mirror of
https://github.com/501351981/vue-office.git
synced 2025-06-25 07:08:58 +08:00
36 lines
1.8 MiB
36 lines
1.8 MiB
(function(l,i){"object"===typeof exports&&"object"===typeof module?module.exports=i():"function"===typeof define&&define.amd?define([],i):"object"===typeof exports?exports["vue-office"]=i():l["vue-office"]=i()})("undefined"!==typeof self?self:this,(function(){return function(){var __webpack_modules__={531:function(l,i,s){!function(i,t){l.exports=t(s(129))}(globalThis,(l=>(()=>{"use strict";var i={438:(l,i,s)=>{s.r(i),s.d(i,{default:()=>n});var t=s(537),c=s.n(t),d=s(645),Z=s.n(d),b=s(806),a=s.n(b),m=new URL(s(583),s.b),e=Z()(c()),W=a()(m);e.push([l.id,'@namespace "http://www.w3.org/1998/Math/MathML";math{display:inline-block;line-height:initial}mfrac{display:inline-block;vertical-align:-50%;text-align:center}mfrac>:first-child{border-bottom:solid thin currentColor}mfrac>*{display:block}msub>:nth-child(2){font-size:smaller;vertical-align:sub}msup>:nth-child(2){font-size:smaller;vertical-align:super}munder,mover,munderover{display:inline-flex;flex-flow:column nowrap;vertical-align:middle;text-align:center}munder>:not(:first-child),mover>:not(:first-child),munderover>:not(:first-child){font-size:smaller}munderover>:last-child{order:-1}mroot,msqrt{position:relative;display:inline-block;border-top:solid thin currentColor;margin-top:.5px;vertical-align:middle;margin-left:1ch}mroot:before,msqrt:before{content:"";display:inline-block;position:absolute;width:1ch;left:-1ch;top:-1px;bottom:0;background-image:url('+W+")}","",{version:3,sources:["webpack://./src/mathml.scss"],names:[],mappings:"AAAA,+CAAA,CAEA,KACI,oBAAA,CACA,mBAAA,CAGJ,MACI,oBAAA,CACA,mBAAA,CACA,iBAAA,CAEA,mBACI,qCAAA,CAGJ,QACI,aAAA,CAKJ,mBACI,iBAAA,CACA,kBAAA,CAKJ,mBACI,iBAAA,CACA,oBAAA,CAIR,wBACI,mBAAA,CACA,uBAAA,CACA,qBAAA,CACA,iBAAA,CAEA,iFACI,iBAAA,CAKJ,uBAAA,QAAA,CAGJ,YACI,iBAAA,CACA,oBAAA,CACA,kCAAA,CACA,eAAA,CACA,qBAAA,CACA,eAAA,CAEA,0BACI,UAAA,CACA,oBAAA,CACA,iBAAA,CACA,SAAA,CACA,SAAA,CACA,QAAA,CACA,QAAA,CACA,wDAAA",sourcesContent:["@namespace \"http://www.w3.org/1998/Math/MathML\";\r\n\r\nmath {\r\n display: inline-block;\r\n line-height: initial;\r\n}\r\n\r\nmfrac {\r\n display: inline-block;\r\n vertical-align: -50%;\r\n text-align: center;\r\n\r\n &>:first-child {\r\n border-bottom: solid thin currentColor;\r\n }\r\n\r\n &>* {\r\n display: block;\r\n }\r\n}\r\n\r\nmsub {\r\n &>:nth-child(2) {\r\n font-size: smaller;\r\n vertical-align: sub;\r\n }\r\n}\r\n\r\nmsup {\r\n &>:nth-child(2) {\r\n font-size: smaller;\r\n vertical-align: super;\r\n }\r\n}\r\n\r\nmunder, mover, munderover {\r\n display: inline-flex;\r\n flex-flow: column nowrap;\r\n vertical-align: middle;\r\n text-align: center;\r\n\r\n &>:not(:first-child) {\r\n font-size: smaller;\r\n }\r\n}\r\n\r\nmunderover {\r\n &>:last-child { order: -1; }\r\n}\r\n\r\nmroot, msqrt {\r\n position: relative;\r\n display: inline-block;\r\n border-top: solid thin currentColor; \r\n margin-top: 0.5px;\r\n vertical-align: middle; \r\n margin-left: 1ch; \r\n\r\n &:before {\r\n content: \"\";\r\n display: inline-block;\r\n position: absolute;\r\n width: 1ch;\r\n left: -1ch;\r\n top: -1px;\r\n bottom: 0;\r\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 100' preserveAspectRatio='none'%3E%3Cpath d='m0,75 l5,0 l5,25 l10,-100' stroke='black' fill='none' vector-effect='non-scaling-stroke'/%3E%3C/svg%3E\");\r\n }\r\n}"],sourceRoot:""}]);const n=e.toString()},645:l=>{l.exports=function(l){var i=[];return i.toString=function(){return this.map((function(i){var s="",t=void 0!==i[5];return i[4]&&(s+="@supports (".concat(i[4],") {")),i[2]&&(s+="@media ".concat(i[2]," {")),t&&(s+="@layer".concat(i[5].length>0?" ".concat(i[5]):""," {")),s+=l(i),t&&(s+="}"),i[2]&&(s+="}"),i[4]&&(s+="}"),s})).join("")},i.i=function(l,s,t,c,d){"string"==typeof l&&(l=[[null,l,void 0]]);var Z={};if(t)for(var b=0;b<this.length;b++){var a=this[b][0];null!=a&&(Z[a]=!0)}for(var m=0;m<l.length;m++){var e=[].concat(l[m]);t&&Z[e[0]]||(void 0!==d&&(void 0===e[5]||(e[1]="@layer".concat(e[5].length>0?" ".concat(e[5]):""," {").concat(e[1],"}")),e[5]=d),s&&(e[2]?(e[1]="@media ".concat(e[2]," {").concat(e[1],"}"),e[2]=s):e[2]=s),c&&(e[4]?(e[1]="@supports (".concat(e[4],") {").concat(e[1],"}"),e[4]=c):e[4]="".concat(c)),i.push(e))}},i}},806:l=>{l.exports=function(l,i){return i||(i={}),l?(l=String(l.__esModule?l.default:l),/^['"].*['"]$/.test(l)&&(l=l.slice(1,-1)),i.hash&&(l+=i.hash),/["'() \t\n]|(%20)/.test(l)||i.needQuotes?'"'.concat(l.replace(/"/g,'\\"').replace(/\n/g,"\\n"),'"'):l):l}},537:l=>{l.exports=function(l){var i=l[1],s=l[3];if(!s)return i;if("function"==typeof btoa){var t=btoa(unescape(encodeURIComponent(JSON.stringify(s)))),c="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(t),d="/*# ".concat(c," */"),Z=s.sources.map((function(l){return"/*# sourceURL=".concat(s.sourceRoot||"").concat(l," */")}));return[i].concat(Z).concat([d]).join("\n")}return[i].join("\n")}},522:(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.OpenXmlPackage=void 0;const t=s(626),c=s(472),d=s(593),Z=s(461);class b{constructor(l,i){this._zip=l,this.options=i,this.xmlParser=new c.XmlParser}get(l){return this._zip.files[function(l){return l.startsWith("/")?l.substr(1):l}(l)]}update(l,i){this._zip.file(l,i)}static load(l,i){return t.loadAsync(l).then((l=>new b(l,i)))}save(l="blob"){return this._zip.generateAsync({type:l})}load(l,i="string"){var s,t;return null!==(t=null===(s=this.get(l))||void 0===s?void 0:s.async(i))&&void 0!==t?t:Promise.resolve(null)}loadRelationships(l=null){let i="_rels/.rels";if(null!=l){const[s,t]=(0,d.splitPath)(l);i=`${s}_rels/${t}.rels`}return this.load(i).then((l=>l?(0,Z.parseRelationships)(this.parseXmlDocument(l).firstElementChild,this.xmlParser):null))}parseXmlDocument(l){return(0,c.parseXmlString)(l,this.options.trimXmlDeclaration)}}i.OpenXmlPackage=b},530:(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.Part=void 0;const t=s(472);i.Part=class{constructor(l,i){this._package=l,this.path=i}load(){return Promise.all([this._package.loadRelationships(this.path).then((l=>{this.rels=l})),this._package.load(this.path).then((l=>{const i=this._package.parseXmlDocument(l);this._package.options.keepOrigin&&(this._xmlDocument=i),this.parseXml(i.firstElementChild)}))])}save(){this._package.update(this.path,(0,t.serializeXmlString)(this._xmlDocument))}parseXml(l){}}},461:(l,i)=>{var s;Object.defineProperty(i,"__esModule",{value:!0}),i.parseRelationships=i.RelationshipTypes=void 0,(s=i.RelationshipTypes||(i.RelationshipTypes={})).OfficeDocument="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",s.FontTable="http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable",s.Image="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",s.Numbering="http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering",s.Styles="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles",s.StylesWithEffects="http://schemas.microsoft.com/office/2007/relationships/stylesWithEffects",s.Theme="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",s.Settings="http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings",s.WebSettings="http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings",s.Hyperlink="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",s.Footnotes="http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes",s.Endnotes="http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes",s.Footer="http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer",s.Header="http://schemas.openxmlformats.org/officeDocument/2006/relationships/header",s.ExtendedProperties="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties",s.CoreProperties="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties",s.CustomProperties="http://schemas.openxmlformats.org/package/2006/relationships/metadata/custom-properties",i.parseRelationships=function(l,i){return i.elements(l).map((l=>({id:i.attr(l,"Id"),type:i.attr(l,"Type"),target:i.attr(l,"Target"),targetMode:i.attr(l,"TargetMode")})))}},168:(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.DocumentParser=i.autos=void 0;const t=s(120),c=s(109),d=s(59),Z=s(472),b=s(488),a=s(172),m=s(149),e=s(320);i.autos={shd:"inherit",color:"black",borderColor:"black",highlight:"transparent"};const W=[],n={oMath:t.DomType.MmlMath,oMathPara:t.DomType.MmlMathParagraph,f:t.DomType.MmlFraction,num:t.DomType.MmlNumerator,den:t.DomType.MmlDenominator,rad:t.DomType.MmlRadical,deg:t.DomType.MmlDegree,e:t.DomType.MmlBase,sSup:t.DomType.MmlSuperscript,sSub:t.DomType.MmlSubscript,sup:t.DomType.MmlSuperArgument,sub:t.DomType.MmlSubArgument,d:t.DomType.MmlDelimiter,nary:t.DomType.MmlNary};i.DocumentParser=class{constructor(l){this.options=Object.assign({ignoreWidth:!1,debug:!1},l)}parseNotes(l,i,s){var t=[];for(let c of Z.default.elements(l,i)){const l=new s;l.id=Z.default.attr(c,"id"),l.noteType=Z.default.attr(c,"type"),l.children=this.parseBodyElements(c),t.push(l)}return t}parseDocumentFile(l){var i=Z.default.element(l,"body"),s=Z.default.element(l,"background"),c=Z.default.element(i,"sectPr");return{type:t.DomType.Document,children:this.parseBodyElements(i),props:c?(0,d.parseSectionProperties)(c,Z.default):null,cssStyle:s?this.parseBackground(s):{}}}parseBackground(l){var i={},s=G.colorAttr(l,"color");return s&&(i["background-color"]=s),i}parseBodyElements(l){var i=[];for(let s of Z.default.elements(l))switch(s.localName){case"p":i.push(this.parseParagraph(s));break;case"tbl":i.push(this.parseTable(s));break;case"sdt":i.push(...this.parseSdt(s,(l=>this.parseBodyElements(l))))}return i}parseStylesFile(l){var i=[];return G.foreach(l,(l=>{switch(l.localName){case"style":i.push(this.parseStyle(l));break;case"docDefaults":i.push(this.parseDefaultStyles(l))}})),i}parseDefaultStyles(l){var i={id:null,name:null,target:null,basedOn:null,styles:[]};return G.foreach(l,(l=>{switch(l.localName){case"rPrDefault":var s=Z.default.element(l,"rPr");s&&i.styles.push({target:"span",values:this.parseDefaultProperties(s,{})});break;case"pPrDefault":var t=Z.default.element(l,"pPr");t&&i.styles.push({target:"p",values:this.parseDefaultProperties(t,{})})}})),i}parseStyle(l){var i={id:Z.default.attr(l,"styleId"),isDefault:Z.default.boolAttr(l,"default"),name:null,target:null,basedOn:null,styles:[],linked:null};switch(Z.default.attr(l,"type")){case"paragraph":i.target="p";break;case"table":i.target="table";break;case"character":i.target="span"}return G.foreach(l,(l=>{switch(l.localName){case"basedOn":i.basedOn=Z.default.attr(l,"val");break;case"name":i.name=Z.default.attr(l,"val");break;case"link":i.linked=Z.default.attr(l,"val");break;case"next":i.next=Z.default.attr(l,"val");break;case"aliases":i.aliases=Z.default.attr(l,"val").split(",");break;case"pPr":i.styles.push({target:"p",values:this.parseDefaultProperties(l,{})}),i.paragraphProps=(0,c.parseParagraphProperties)(l,Z.default);break;case"rPr":i.styles.push({target:"span",values:this.parseDefaultProperties(l,{})}),i.runProps=(0,b.parseRunProperties)(l,Z.default);break;case"tblPr":case"tcPr":i.styles.push({target:"td",values:this.parseDefaultProperties(l,{})});break;case"tblStylePr":for(let s of this.parseTableStyle(l))i.styles.push(s);break;case"rsid":case"qFormat":case"hidden":case"semiHidden":case"unhideWhenUsed":case"autoRedefine":case"uiPriority":break;default:this.options.debug&&console.warn(`DOCX: Unknown style element: ${l.localName}`)}})),i}parseTableStyle(l){var i=[],s=Z.default.attr(l,"type"),t="",c="";switch(s){case"firstRow":c=".first-row",t="tr.first-row td";break;case"lastRow":c=".last-row",t="tr.last-row td";break;case"firstCol":c=".first-col",t="td.first-col";break;case"lastCol":c=".last-col",t="td.last-col";break;case"band1Vert":c=":not(.no-vband)",t="td.odd-col";break;case"band2Vert":c=":not(.no-vband)",t="td.even-col";break;case"band1Horz":c=":not(.no-hband)",t="tr.odd-row";break;case"band2Horz":c=":not(.no-hband)",t="tr.even-row";break;default:return[]}return G.foreach(l,(l=>{switch(l.localName){case"pPr":i.push({target:`${t} p`,mod:c,values:this.parseDefaultProperties(l,{})});break;case"rPr":i.push({target:`${t} span`,mod:c,values:this.parseDefaultProperties(l,{})});break;case"tblPr":case"tcPr":i.push({target:t,mod:c,values:this.parseDefaultProperties(l,{})})}})),i}parseNumberingFile(l){var i=[],s={},t=[];return G.foreach(l,(l=>{switch(l.localName){case"abstractNum":this.parseAbstractNumbering(l,t).forEach((l=>i.push(l)));break;case"numPicBullet":t.push(this.parseNumberingPicBullet(l));break;case"num":var c=Z.default.attr(l,"numId"),d=Z.default.elementAttr(l,"abstractNumId","val");s[d]=c}})),i.forEach((l=>l.id=s[l.id])),i}parseNumberingPicBullet(l){var i=Z.default.element(l,"pict"),s=i&&Z.default.element(i,"shape"),t=s&&Z.default.element(s,"imagedata");return t?{id:Z.default.intAttr(l,"numPicBulletId"),src:Z.default.attr(t,"id"),style:Z.default.attr(s,"style")}:null}parseAbstractNumbering(l,i){var s=[],t=Z.default.attr(l,"abstractNumId");return G.foreach(l,(l=>{"lvl"===l.localName&&s.push(this.parseNumberingLevel(t,l,i))})),s}parseNumberingLevel(l,i,s){var t={id:l,level:Z.default.intAttr(i,"ilvl"),pStyleName:void 0,pStyle:{},rStyle:{},suff:"tab"};return G.foreach(i,(l=>{switch(l.localName){case"pPr":this.parseDefaultProperties(l,t.pStyle);break;case"rPr":this.parseDefaultProperties(l,t.rStyle);break;case"lvlPicBulletId":var i=Z.default.intAttr(l,"val");t.bullet=s.find((l=>l.id==i));break;case"lvlText":t.levelText=Z.default.attr(l,"val");break;case"pStyle":t.pStyleName=Z.default.attr(l,"val");break;case"numFmt":t.format=Z.default.attr(l,"val");break;case"suff":t.suff=Z.default.attr(l,"val")}})),t}parseSdt(l,i){const s=Z.default.element(l,"sdtContent");return s?i(s):[]}parseInserted(l,i){var s,c;return{type:t.DomType.Inserted,children:null!==(c=null===(s=i(l))||void 0===s?void 0:s.children)&&void 0!==c?c:[]}}parseDeleted(l,i){var s,c;return{type:t.DomType.Deleted,children:null!==(c=null===(s=i(l))||void 0===s?void 0:s.children)&&void 0!==c?c:[]}}parseParagraph(l){var i={type:t.DomType.Paragraph,children:[]};for(let s of Z.default.elements(l))switch(s.localName){case"pPr":this.parseParagraphProperties(s,i);break;case"r":i.children.push(this.parseRun(s,i));break;case"hyperlink":i.children.push(this.parseHyperlink(s,i));break;case"bookmarkStart":i.children.push((0,a.parseBookmarkStart)(s,Z.default));break;case"bookmarkEnd":i.children.push((0,a.parseBookmarkEnd)(s,Z.default));break;case"oMath":case"oMathPara":i.children.push(this.parseMathElement(s));break;case"sdt":i.children.push(...this.parseSdt(s,(l=>this.parseParagraph(l).children)));break;case"ins":i.children.push(this.parseInserted(s,(l=>this.parseParagraph(l))));break;case"del":i.children.push(this.parseDeleted(s,(l=>this.parseParagraph(l))))}return i}parseParagraphProperties(l,i){this.parseDefaultProperties(l,i.cssStyle={},null,(l=>{if((0,c.parseParagraphProperty)(l,i,Z.default))return!0;switch(l.localName){case"pStyle":i.styleName=Z.default.attr(l,"val");break;case"cnfStyle":i.className=u.classNameOfCnfStyle(l);break;case"framePr":this.parseFrame(l,i);break;case"rPr":break;default:return!1}return!0}))}parseFrame(l,i){"drop"==Z.default.attr(l,"dropCap")&&(i.cssStyle.float="left")}parseHyperlink(l,i){var s={type:t.DomType.Hyperlink,parent:i,children:[]},c=Z.default.attr(l,"anchor"),d=Z.default.attr(l,"id");return c&&(s.href="#"+c),d&&(s.id=d),G.foreach(l,(l=>{"r"===l.localName&&s.children.push(this.parseRun(l,s))})),s}parseRun(l,i){var s={type:t.DomType.Run,parent:i,children:[]};return G.foreach(l,(l=>{switch((l=this.checkAlternateContent(l)).localName){case"t":s.children.push({type:t.DomType.Text,text:l.textContent});break;case"delText":s.children.push({type:t.DomType.DeletedText,text:l.textContent});break;case"fldSimple":s.children.push({type:t.DomType.SimpleField,instruction:Z.default.attr(l,"instr"),lock:Z.default.boolAttr(l,"lock",!1),dirty:Z.default.boolAttr(l,"dirty",!1)});break;case"instrText":s.fieldRun=!0,s.children.push({type:t.DomType.Instruction,text:l.textContent});break;case"fldChar":s.fieldRun=!0,s.children.push({type:t.DomType.ComplexField,charType:Z.default.attr(l,"fldCharType"),lock:Z.default.boolAttr(l,"lock",!1),dirty:Z.default.boolAttr(l,"dirty",!1)});break;case"noBreakHyphen":s.children.push({type:t.DomType.NoBreakHyphen});break;case"br":s.children.push({type:t.DomType.Break,break:Z.default.attr(l,"type")||"textWrapping"});break;case"lastRenderedPageBreak":s.children.push({type:t.DomType.Break,break:"lastRenderedPageBreak"});break;case"sym":s.children.push({type:t.DomType.Symbol,font:Z.default.attr(l,"font"),char:Z.default.attr(l,"char")});break;case"tab":s.children.push({type:t.DomType.Tab});break;case"footnoteReference":s.children.push({type:t.DomType.FootnoteReference,id:Z.default.attr(l,"id")});break;case"endnoteReference":s.children.push({type:t.DomType.EndnoteReference,id:Z.default.attr(l,"id")});break;case"drawing":let i=this.parseDrawing(l);i&&(s.children=[i]);break;case"pict":s.children.push(this.parseVmlPicture(l));break;case"rPr":this.parseRunProperties(l,s)}})),s}parseMathElement(l){const i=`${l.localName}Pr`,s={type:n[l.localName],children:[]};for(const t of Z.default.elements(l))n[t.localName]?s.children.push(this.parseMathElement(t)):"r"==t.localName?s.children.push(this.parseRun(t)):t.localName==i&&(s.props=this.parseMathProperies(t));return s}parseMathProperies(l){const i={};for(const s of Z.default.elements(l))switch(s.localName){case"chr":i.char=Z.default.attr(s,"val");break;case"degHide":i.hideDegree=Z.default.boolAttr(s,"val");break;case"begChr":i.beginChar=Z.default.attr(s,"val");break;case"endChr":i.endChar=Z.default.attr(s,"val")}return i}parseRunProperties(l,i){this.parseDefaultProperties(l,i.cssStyle={},null,(l=>{switch(l.localName){case"rStyle":i.styleName=Z.default.attr(l,"val");break;case"vertAlign":i.verticalAlign=u.valueOfVertAlign(l,!0);break;default:return!1}return!0}))}parseVmlPicture(l){const i={type:t.DomType.VmlPicture,children:[]};for(const s of Z.default.elements(l)){const l=(0,e.parseVmlElement)(s);l&&i.children.push(l)}return i}checkAlternateContent(l){var i;if("AlternateContent"!=l.localName)return l;var s=Z.default.element(l,"Choice");if(s){var t=Z.default.attr(s,"Requires"),c=l.lookupNamespaceURI(t);if(W.includes(c))return s.firstElementChild}return null===(i=Z.default.element(l,"Fallback"))||void 0===i?void 0:i.firstElementChild}parseDrawing(l){for(var i of Z.default.elements(l))switch(i.localName){case"inline":case"anchor":return this.parseDrawingWrapper(i)}}parseDrawingWrapper(l){var i,s={type:t.DomType.Drawing,children:[],cssStyle:{}},c="anchor"==l.localName;let d=null,b=Z.default.boolAttr(l,"simplePos"),a={relative:"page",align:"left",offset:"0"},e={relative:"page",align:"top",offset:"0"};for(var W of Z.default.elements(l))switch(W.localName){case"simplePos":b&&(a.offset=Z.default.lengthAttr(W,"x",m.LengthUsage.Emu),e.offset=Z.default.lengthAttr(W,"y",m.LengthUsage.Emu));break;case"extent":s.cssStyle.width=Z.default.lengthAttr(W,"cx",m.LengthUsage.Emu),s.cssStyle.height=Z.default.lengthAttr(W,"cy",m.LengthUsage.Emu);break;case"positionH":case"positionV":if(!b){let l="positionH"==W.localName?a:e;var n=Z.default.element(W,"align"),h=Z.default.element(W,"posOffset");l.relative=null!==(i=Z.default.attr(W,"relativeFrom"))&&void 0!==i?i:l.relative,n&&(l.align=n.textContent),h&&(l.offset=G.sizeValue(h,m.LengthUsage.Emu))}break;case"wrapTopAndBottom":d="wrapTopAndBottom";break;case"wrapNone":d="wrapNone";break;case"graphic":var u=this.parseGraphic(W);u&&s.children.push(u)}return"wrapTopAndBottom"==d?(s.cssStyle.display="block",a.align&&(s.cssStyle["text-align"]=a.align,s.cssStyle.width="100%")):"wrapNone"==d?(s.cssStyle.display="block",s.cssStyle.position="relative",s.cssStyle.width="0px",s.cssStyle.height="0px",a.offset&&(s.cssStyle.left=a.offset),e.offset&&(s.cssStyle.top=e.offset)):!c||"left"!=a.align&&"right"!=a.align||(s.cssStyle.float=a.align),s}parseGraphic(l){var i=Z.default.element(l,"graphicData");for(let s of Z.default.elements(i))if("pic"===s.localName)return this.parsePicture(s);return null}parsePicture(l){var i={type:t.DomType.Image,src:"",cssStyle:{}},s=Z.default.element(l,"blipFill"),c=Z.default.element(s,"blip");i.src=Z.default.attr(c,"embed");var d=Z.default.element(l,"spPr"),b=Z.default.element(d,"xfrm");for(var a of(i.cssStyle.position="relative",Z.default.elements(b)))switch(a.localName){case"ext":i.cssStyle.width=Z.default.lengthAttr(a,"cx",m.LengthUsage.Emu),i.cssStyle.height=Z.default.lengthAttr(a,"cy",m.LengthUsage.Emu);break;case"off":i.cssStyle.left=Z.default.lengthAttr(a,"x",m.LengthUsage.Emu),i.cssStyle.top=Z.default.lengthAttr(a,"y",m.LengthUsage.Emu)}return i}parseTable(l){var i={type:t.DomType.Table,children:[]};return G.foreach(l,(l=>{switch(l.localName){case"tr":i.children.push(this.parseTableRow(l));break;case"tblGrid":i.columns=this.parseTableColumns(l);break;case"tblPr":this.parseTableProperties(l,i)}})),i}parseTableColumns(l){var i=[];return G.foreach(l,(l=>{"gridCol"===l.localName&&i.push({width:Z.default.lengthAttr(l,"w")})})),i}parseTableProperties(l,i){switch(i.cssStyle={},i.cellStyle={},this.parseDefaultProperties(l,i.cssStyle,i.cellStyle,(l=>{switch(l.localName){case"tblStyle":i.styleName=Z.default.attr(l,"val");break;case"tblLook":i.className=u.classNameOftblLook(l);break;case"tblpPr":this.parseTablePosition(l,i);break;case"tblStyleColBandSize":i.colBandSize=Z.default.intAttr(l,"val");break;case"tblStyleRowBandSize":i.rowBandSize=Z.default.intAttr(l,"val");break;default:return!1}return!0})),i.cssStyle["text-align"]){case"center":delete i.cssStyle["text-align"],i.cssStyle["margin-left"]="auto",i.cssStyle["margin-right"]="auto";break;case"right":delete i.cssStyle["text-align"],i.cssStyle["margin-left"]="auto"}}parseTablePosition(l,i){var s=Z.default.lengthAttr(l,"topFromText"),t=Z.default.lengthAttr(l,"bottomFromText"),c=Z.default.lengthAttr(l,"rightFromText"),d=Z.default.lengthAttr(l,"leftFromText");i.cssStyle.float="left",i.cssStyle["margin-bottom"]=u.addSize(i.cssStyle["margin-bottom"],t),i.cssStyle["margin-left"]=u.addSize(i.cssStyle["margin-left"],d),i.cssStyle["margin-right"]=u.addSize(i.cssStyle["margin-right"],c),i.cssStyle["margin-top"]=u.addSize(i.cssStyle["margin-top"],s)}parseTableRow(l){var i={type:t.DomType.Row,children:[]};return G.foreach(l,(l=>{switch(l.localName){case"tc":i.children.push(this.parseTableCell(l));break;case"trPr":this.parseTableRowProperties(l,i)}})),i}parseTableRowProperties(l,i){i.cssStyle=this.parseDefaultProperties(l,{},null,(l=>{switch(l.localName){case"cnfStyle":i.className=u.classNameOfCnfStyle(l);break;case"tblHeader":i.isHeader=Z.default.boolAttr(l,"val");break;default:return!1}return!0}))}parseTableCell(l){var i={type:t.DomType.Cell,children:[]};return G.foreach(l,(l=>{switch(l.localName){case"tbl":i.children.push(this.parseTable(l));break;case"p":i.children.push(this.parseParagraph(l));break;case"tcPr":this.parseTableCellProperties(l,i)}})),i}parseTableCellProperties(l,i){i.cssStyle=this.parseDefaultProperties(l,{},null,(l=>{var s;switch(l.localName){case"gridSpan":i.span=Z.default.intAttr(l,"val",null);break;case"vMerge":i.verticalMerge=null!==(s=Z.default.attr(l,"val"))&&void 0!==s?s:"continue";break;case"cnfStyle":i.className=u.classNameOfCnfStyle(l);break;default:return!1}return!0}))}parseDefaultProperties(l,s=null,t=null,c=null){return s=s||{},G.foreach(l,(d=>{if(!(null==c?void 0:c(d)))switch(d.localName){case"jc":s["text-align"]=u.valueOfJc(d);break;case"textAlignment":s["vertical-align"]=u.valueOfTextAlignment(d);break;case"color":s.color=G.colorAttr(d,"val",null,i.autos.color);break;case"sz":s["font-size"]=s["min-height"]=Z.default.lengthAttr(d,"val",m.LengthUsage.FontSize);break;case"shd":s["background-color"]=G.colorAttr(d,"fill",null,i.autos.shd);break;case"highlight":s["background-color"]=G.colorAttr(d,"val",null,i.autos.highlight);break;case"vertAlign":break;case"position":s.verticalAlign=Z.default.lengthAttr(d,"val",m.LengthUsage.FontSize);break;case"tcW":if(this.options.ignoreWidth)break;case"tblW":s.width=u.valueOfSize(d,"w");break;case"trHeight":this.parseTrHeight(d,s);break;case"strike":s["text-decoration"]=Z.default.boolAttr(d,"val",!0)?"line-through":"none";break;case"b":s["font-weight"]=Z.default.boolAttr(d,"val",!0)?"bold":"normal";break;case"i":s["font-style"]=Z.default.boolAttr(d,"val",!0)?"italic":"normal";break;case"caps":s["text-transform"]=Z.default.boolAttr(d,"val",!0)?"uppercase":"none";break;case"smallCaps":s["text-transform"]=Z.default.boolAttr(d,"val",!0)?"lowercase":"none";break;case"u":this.parseUnderline(d,s);break;case"ind":case"tblInd":this.parseIndentation(d,s);break;case"rFonts":this.parseFont(d,s);break;case"tblBorders":this.parseBorderProperties(d,t||s);break;case"tblCellSpacing":s["border-spacing"]=u.valueOfMargin(d),s["border-collapse"]="separate";break;case"pBdr":this.parseBorderProperties(d,s);break;case"bdr":s.border=u.valueOfBorder(d);break;case"tcBorders":this.parseBorderProperties(d,s);break;case"vanish":Z.default.boolAttr(d,"val",!0)&&(s.display="none");break;case"kern":case"noWrap":break;case"tblCellMar":case"tcMar":this.parseMarginProperties(d,t||s);break;case"tblLayout":s["table-layout"]=u.valueOfTblLayout(d);break;case"vAlign":s["vertical-align"]=u.valueOfTextAlignment(d);break;case"spacing":"pPr"==l.localName&&this.parseSpacing(d,s);break;case"wordWrap":Z.default.boolAttr(d,"val")&&(s["overflow-wrap"]="break-word");break;case"bCs":case"iCs":case"szCs":case"tabs":case"outlineLvl":case"contextualSpacing":case"tblStyleColBandSize":case"tblStyleRowBandSize":case"webHidden":case"pageBreakBefore":case"suppressLineNumbers":case"keepLines":case"keepNext":case"lang":case"widowControl":case"bidi":case"rtl":case"noProof":break;default:this.options.debug&&console.warn(`DOCX: Unknown document element: ${l.localName}.${d.localName}`)}})),s}parseUnderline(l,i){var s=Z.default.attr(l,"val");if(null!=s){switch(s){case"dash":case"dashDotDotHeavy":case"dashDotHeavy":case"dashedHeavy":case"dashLong":case"dashLongHeavy":case"dotDash":case"dotDotDash":i["text-decoration-style"]="dashed";break;case"dotted":case"dottedHeavy":i["text-decoration-style"]="dotted";break;case"double":i["text-decoration-style"]="double";break;case"single":case"thick":case"words":i["text-decoration"]="underline";break;case"wave":case"wavyDouble":case"wavyHeavy":i["text-decoration-style"]="wavy";break;case"none":i["text-decoration"]="none"}var t=G.colorAttr(l,"color");t&&(i["text-decoration-color"]=t)}}parseFont(l,i){var s=[Z.default.attr(l,"ascii"),u.themeValue(l,"asciiTheme")].filter((l=>l)).join(", ");s.length>0&&(i["font-family"]=s)}parseIndentation(l,i){var s=Z.default.lengthAttr(l,"firstLine"),t=Z.default.lengthAttr(l,"hanging"),c=Z.default.lengthAttr(l,"left"),d=Z.default.lengthAttr(l,"start"),b=Z.default.lengthAttr(l,"right"),a=Z.default.lengthAttr(l,"end");s&&(i["text-indent"]=s),t&&(i["text-indent"]=`-${t}`),(c||d)&&(i["margin-left"]=c||d),(b||a)&&(i["margin-right"]=b||a)}parseSpacing(l,i){var s=Z.default.lengthAttr(l,"before"),t=Z.default.lengthAttr(l,"after"),c=Z.default.intAttr(l,"line",null),d=Z.default.attr(l,"lineRule");if(s&&(i["margin-top"]=s),t&&(i["margin-bottom"]=t),null!==c)switch(d){case"auto":i["line-height"]=`${(c/240).toFixed(2)}`;break;case"atLeast":i["line-height"]=`calc(100% + ${c/20}pt)`;break;default:i["line-height"]=i["min-height"]=c/20+"pt"}}parseMarginProperties(l,i){G.foreach(l,(l=>{switch(l.localName){case"left":i["padding-left"]=u.valueOfMargin(l);break;case"right":i["padding-right"]=u.valueOfMargin(l);break;case"top":i["padding-top"]=u.valueOfMargin(l);break;case"bottom":i["padding-bottom"]=u.valueOfMargin(l)}}))}parseTrHeight(l,i){Z.default.attr(l,"hRule"),i.height=Z.default.lengthAttr(l,"val")}parseBorderProperties(l,i){G.foreach(l,(l=>{switch(l.localName){case"start":case"left":i["border-left"]=u.valueOfBorder(l);break;case"end":case"right":i["border-right"]=u.valueOfBorder(l);break;case"top":i["border-top"]=u.valueOfBorder(l);break;case"bottom":i["border-bottom"]=u.valueOfBorder(l)}}))}};const h=["black","blue","cyan","darkBlue","darkCyan","darkGray","darkGreen","darkMagenta","darkRed","darkYellow","green","lightGray","magenta","none","red","white","yellow"];class G{static foreach(l,i){for(var s=0;s<l.childNodes.length;s++){let t=l.childNodes[s];t.nodeType==Node.ELEMENT_NODE&&i(t)}}static colorAttr(l,i,s=null,t="black"){var c=Z.default.attr(l,i);if(c)return"auto"==c?t:h.includes(c)?c:`#${c}`;var d=Z.default.attr(l,"themeColor");return d?`var(--docx-${d}-color)`:s}static sizeValue(l,i=m.LengthUsage.Dxa){return(0,m.convertLength)(l.textContent,i)}}class u{static themeValue(l,i){var s=Z.default.attr(l,i);return s?`var(--docx-${s}-font)`:null}static valueOfSize(l,i){var s=m.LengthUsage.Dxa;switch(Z.default.attr(l,"type")){case"dxa":break;case"pct":s=m.LengthUsage.Percent;break;case"auto":return"auto"}return Z.default.lengthAttr(l,i,s)}static valueOfMargin(l){return Z.default.lengthAttr(l,"w")}static valueOfBorder(l){if("nil"==Z.default.attr(l,"val"))return"none";var s=G.colorAttr(l,"color");return`${Z.default.lengthAttr(l,"sz",m.LengthUsage.Border)} solid ${"auto"==s?i.autos.borderColor:s}`}static valueOfTblLayout(l){return"fixed"==Z.default.attr(l,"val")?"fixed":"auto"}static classNameOfCnfStyle(l){const i=Z.default.attr(l,"val");return["first-row","last-row","first-col","last-col","odd-col","even-col","odd-row","even-row","ne-cell","nw-cell","se-cell","sw-cell"].filter(((l,s)=>"1"==i[s])).join(" ")}static valueOfJc(l){var i=Z.default.attr(l,"val");switch(i){case"start":case"left":return"left";case"center":return"center";case"end":case"right":return"right";case"both":return"justify"}return i}static valueOfVertAlign(l,i=!1){var s=Z.default.attr(l,"val");switch(s){case"subscript":return"sub";case"superscript":return i?"sup":"super"}return i?null:s}static valueOfTextAlignment(l){var i=Z.default.attr(l,"val");switch(i){case"auto":case"baseline":return"baseline";case"top":return"top";case"center":return"middle";case"bottom":return"bottom"}return i}static addSize(l,i){return null==l?i:null==i?l:`calc(${l} + ${i})`}static classNameOftblLook(l){const i=Z.default.hexAttr(l,"val",0);let s="";return(Z.default.boolAttr(l,"firstRow")||32&i)&&(s+=" first-row"),(Z.default.boolAttr(l,"lastRow")||64&i)&&(s+=" last-row"),(Z.default.boolAttr(l,"firstColumn")||128&i)&&(s+=" first-col"),(Z.default.boolAttr(l,"lastColumn")||256&i)&&(s+=" last-col"),(Z.default.boolAttr(l,"noHBand")||512&i)&&(s+=" no-hband"),(Z.default.boolAttr(l,"noVBand")||1024&i)&&(s+=" no-vband"),s.trim()}}},162:(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.CorePropsPart=void 0;const t=s(530),c=s(614);class d extends t.Part{parseXml(l){this.props=(0,c.parseCoreProps)(l,this._package.xmlParser)}}i.CorePropsPart=d},614:(l,i)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.parseCoreProps=void 0,i.parseCoreProps=function(l,i){const s={};for(let t of i.elements(l))switch(t.localName){case"title":s.title=t.textContent;break;case"description":s.description=t.textContent;break;case"subject":s.subject=t.textContent;break;case"creator":s.creator=t.textContent;break;case"keywords":s.keywords=t.textContent;break;case"language":s.language=t.textContent;break;case"lastModifiedBy":s.lastModifiedBy=t.textContent;break;case"revision":t.textContent&&(s.revision=parseInt(t.textContent))}return s}},177:(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.CustomPropsPart=void 0;const t=s(530),c=s(821);class d extends t.Part{parseXml(l){this.props=(0,c.parseCustomProps)(l,this._package.xmlParser)}}i.CustomPropsPart=d},821:(l,i)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.parseCustomProps=void 0,i.parseCustomProps=function(l,i){return i.elements(l,"property").map((l=>{const s=l.firstChild;return{formatId:i.attr(l,"fmtid"),name:i.attr(l,"name"),type:s.nodeName,value:s.textContent}}))}},665:(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.ExtendedPropsPart=void 0;const t=s(530),c=s(668);class d extends t.Part{parseXml(l){this.props=(0,c.parseExtendedProps)(l,this._package.xmlParser)}}i.ExtendedPropsPart=d},668:(l,i)=>{function s(l){if(void 0!==l)return parseInt(l)}Object.defineProperty(i,"__esModule",{value:!0}),i.parseExtendedProps=void 0,i.parseExtendedProps=function(l,i){const t={};for(let c of i.elements(l))switch(c.localName){case"Template":t.template=c.textContent;break;case"Pages":t.pages=s(c.textContent);break;case"Words":t.words=s(c.textContent);break;case"Characters":t.characters=s(c.textContent);break;case"Application":t.application=c.textContent;break;case"Lines":t.lines=s(c.textContent);break;case"Paragraphs":t.paragraphs=s(c.textContent);break;case"Company":t.company=c.textContent;break;case"AppVersion":t.appVersion=c.textContent}return t}},172:(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.parseBookmarkEnd=i.parseBookmarkStart=void 0;const t=s(120);i.parseBookmarkStart=function(l,i){return{type:t.DomType.BookmarkStart,id:i.attr(l,"id"),name:i.attr(l,"name"),colFirst:i.intAttr(l,"colFirst"),colLast:i.intAttr(l,"colLast")}},i.parseBookmarkEnd=function(l,i){return{type:t.DomType.BookmarkEnd,id:i.attr(l,"id")}}},191:(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.parseBorders=i.parseBorder=void 0;const t=s(149);function c(l,i){return{type:i.attr(l,"val"),color:i.attr(l,"color"),size:i.lengthAttr(l,"sz",t.LengthUsage.Border),offset:i.lengthAttr(l,"space",t.LengthUsage.Point),frame:i.boolAttr(l,"frame"),shadow:i.boolAttr(l,"shadow")}}i.parseBorder=c,i.parseBorders=function(l,i){var s={};for(let t of i.elements(l))switch(t.localName){case"left":s.left=c(t,i);break;case"top":s.top=c(t,i);break;case"right":s.right=c(t,i);break;case"bottom":s.bottom=c(t,i)}return s}},149:(l,i)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.parseCommonProperty=i.convertPercentage=i.convertBoolean=i.convertLength=i.LengthUsage=i.ns=void 0,i.ns={wordml:"http://schemas.openxmlformats.org/wordprocessingml/2006/main",drawingml:"http://schemas.openxmlformats.org/drawingml/2006/main",picture:"http://schemas.openxmlformats.org/drawingml/2006/picture",compatibility:"http://schemas.openxmlformats.org/markup-compatibility/2006",math:"http://schemas.openxmlformats.org/officeDocument/2006/math"},i.LengthUsage={Dxa:{mul:.05,unit:"pt"},Emu:{mul:1/12700,unit:"pt"},FontSize:{mul:.5,unit:"pt"},Border:{mul:.125,unit:"pt"},Point:{mul:1,unit:"pt"},Percent:{mul:.02,unit:"%"},LineHeight:{mul:1/240,unit:""},VmlEmu:{mul:1/12700,unit:""}},i.convertLength=function(l,s=i.LengthUsage.Dxa){return null==l||/.+(p[xt]|[%])$/.test(l)?l:`${(parseInt(l)*s.mul).toFixed(2)}${s.unit}`},i.convertBoolean=function(l,i=!1){switch(l){case"1":case"on":case"true":return!0;case"0":case"off":case"false":return!1;default:return i}},i.convertPercentage=function(l){return l?parseInt(l)/100:null},i.parseCommonProperty=function(l,s,t){if(l.namespaceURI!=i.ns.wordml)return!1;switch(l.localName){case"color":s.color=t.attr(l,"val");break;case"sz":s.fontSize=t.lengthAttr(l,"val",i.LengthUsage.FontSize);break;default:return!1}return!0}},448:(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.DocumentPart=void 0;const t=s(530);class c extends t.Part{constructor(l,i,s){super(l,i),this._documentParser=s}parseXml(l){this.body=this._documentParser.parseDocumentFile(l)}}i.DocumentPart=c},120:(l,i)=>{var s;Object.defineProperty(i,"__esModule",{value:!0}),i.DomType=void 0,(s=i.DomType||(i.DomType={})).Document="document",s.Paragraph="paragraph",s.Run="run",s.Break="break",s.NoBreakHyphen="noBreakHyphen",s.Table="table",s.Row="row",s.Cell="cell",s.Hyperlink="hyperlink",s.Drawing="drawing",s.Image="image",s.Text="text",s.Tab="tab",s.Symbol="symbol",s.BookmarkStart="bookmarkStart",s.BookmarkEnd="bookmarkEnd",s.Footer="footer",s.Header="header",s.FootnoteReference="footnoteReference",s.EndnoteReference="endnoteReference",s.Footnote="footnote",s.Endnote="endnote",s.SimpleField="simpleField",s.ComplexField="complexField",s.Instruction="instruction",s.VmlPicture="vmlPicture",s.MmlMath="mmlMath",s.MmlMathParagraph="mmlMathParagraph",s.MmlFraction="mmlFraction",s.MmlNumerator="mmlNumerator",s.MmlDenominator="mmlDenominator",s.MmlRadical="mmlRadical",s.MmlBase="mmlBase",s.MmlDegree="mmlDegree",s.MmlSuperscript="mmlSuperscript",s.MmlSubscript="mmlSubscript",s.MmlSubArgument="mmlSubArgument",s.MmlSuperArgument="mmlSuperArgument",s.MmlNary="mmlNary",s.MmlDelimiter="mmlDelimiter",s.VmlElement="vmlElement",s.Inserted="inserted",s.Deleted="deleted",s.DeletedText="deletedText"},931:(l,i)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.parseLineSpacing=void 0,i.parseLineSpacing=function(l,i){return{before:i.lengthAttr(l,"before"),after:i.lengthAttr(l,"after"),line:i.intAttr(l,"line"),lineRule:i.attr(l,"lineRule")}}},109:(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.parseNumbering=i.parseTabs=i.parseParagraphProperty=i.parseParagraphProperties=void 0;const t=s(149),c=s(59),d=s(931),Z=s(488);function b(l,i,s){if(l.namespaceURI!=t.ns.wordml)return!1;if((0,t.parseCommonProperty)(l,i,s))return!0;switch(l.localName){case"tabs":i.tabs=a(l,s);break;case"sectPr":i.sectionProps=(0,c.parseSectionProperties)(l,s);break;case"numPr":i.numbering=m(l,s);break;case"spacing":return i.lineSpacing=(0,d.parseLineSpacing)(l,s),!1;case"textAlignment":return i.textAlignment=s.attr(l,"val"),!1;case"keepNext":i.keepLines=s.boolAttr(l,"val",!0);break;case"keepNext":i.keepNext=s.boolAttr(l,"val",!0);break;case"pageBreakBefore":i.pageBreakBefore=s.boolAttr(l,"val",!0);break;case"outlineLvl":i.outlineLevel=s.intAttr(l,"val");break;case"pStyle":i.styleName=s.attr(l,"val");break;case"rPr":i.runProps=(0,Z.parseRunProperties)(l,s);break;default:return!1}return!0}function a(l,i){return i.elements(l,"tab").map((l=>({position:i.lengthAttr(l,"pos"),leader:i.attr(l,"leader"),style:i.attr(l,"val")})))}function m(l,i){var s={};for(let t of i.elements(l))switch(t.localName){case"numId":s.id=i.attr(t,"val");break;case"ilvl":s.level=i.intAttr(t,"val")}return s}i.parseParagraphProperties=function(l,i){let s={};for(let t of i.elements(l))b(t,s,i);return s},i.parseParagraphProperty=b,i.parseTabs=a,i.parseNumbering=m},488:(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.parseRunProperty=i.parseRunProperties=void 0;const t=s(149);function c(l,i,s){return!!(0,t.parseCommonProperty)(l,i,s)}i.parseRunProperties=function(l,i){let s={};for(let t of i.elements(l))c(t,s,i);return s},i.parseRunProperty=c},59:(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.parseSectionProperties=i.SectionType=void 0;const t=s(472),c=s(191);function d(l,i){return{numberOfColumns:i.intAttr(l,"num"),space:i.lengthAttr(l,"space"),separator:i.boolAttr(l,"sep"),equalWidth:i.boolAttr(l,"equalWidth",!0),columns:i.elements(l,"col").map((l=>({width:i.lengthAttr(l,"w"),space:i.lengthAttr(l,"space")})))}}function Z(l,i){return{chapSep:i.attr(l,"chapSep"),chapStyle:i.attr(l,"chapStyle"),format:i.attr(l,"fmt"),start:i.intAttr(l,"start")}}function b(l,i){return{id:i.attr(l,"id"),type:i.attr(l,"type")}}var a;(a=i.SectionType||(i.SectionType={})).Continuous="continuous",a.NextPage="nextPage",a.NextColumn="nextColumn",a.EvenPage="evenPage",a.OddPage="oddPage",i.parseSectionProperties=function(l,i=t.default){var s,a,m={};for(let t of i.elements(l))switch(t.localName){case"pgSz":m.pageSize={width:i.lengthAttr(t,"w"),height:i.lengthAttr(t,"h"),orientation:i.attr(t,"orient")};break;case"type":m.type=i.attr(t,"val");break;case"pgMar":m.pageMargins={left:i.lengthAttr(t,"left"),right:i.lengthAttr(t,"right"),top:i.lengthAttr(t,"top"),bottom:i.lengthAttr(t,"bottom"),header:i.lengthAttr(t,"header"),footer:i.lengthAttr(t,"footer"),gutter:i.lengthAttr(t,"gutter")};break;case"cols":m.columns=d(t,i);break;case"headerReference":(null!==(s=m.headerRefs)&&void 0!==s?s:m.headerRefs=[]).push(b(t,i));break;case"footerReference":(null!==(a=m.footerRefs)&&void 0!==a?a:m.footerRefs=[]).push(b(t,i));break;case"titlePg":m.titlePage=i.boolAttr(t,"val",!0);break;case"pgBorders":m.pageBorders=(0,c.parseBorders)(t,i);break;case"pgNumType":m.pageNumber=Z(t,i)}return m}},667:(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.renderAsync=i.praseAsync=i.defaultOptions=void 0;const t=s(213),c=s(168),d=s(932);i.defaultOptions={ignoreHeight:!1,ignoreWidth:!1,ignoreFonts:!1,breakPages:!0,debug:!1,experimental:!1,className:"docx",inWrapper:!0,trimXmlDeclaration:!0,ignoreLastRenderedPageBreak:!0,renderHeaders:!0,renderFooters:!0,renderFootnotes:!0,renderEndnotes:!0,useBase64URL:!1,useMathMLPolyfill:!1,renderChanges:!1},i.praseAsync=function(l,s=null){const d=Object.assign(Object.assign({},i.defaultOptions),s);return t.WordDocument.load(l,new c.DocumentParser(d),d)},i.renderAsync=function(l,s,Z=null,b=null){const a=Object.assign(Object.assign({},i.defaultOptions),b),m=new d.HtmlRenderer(window.document);return t.WordDocument.load(l,new c.DocumentParser(a),a).then((l=>(m.render(l,s,Z,a),l)))}},380:(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.FontTablePart=void 0;const t=s(530),c=s(512);class d extends t.Part{parseXml(l){this.fonts=(0,c.parseFonts)(l,this._package.xmlParser)}}i.FontTablePart=d},512:(l,i)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.parseEmbedFontRef=i.parseFont=i.parseFonts=void 0;const s={embedRegular:"regular",embedBold:"bold",embedItalic:"italic",embedBoldItalic:"boldItalic"};function t(l,i){let s={name:i.attr(l,"name"),embedFontRefs:[]};for(let t of i.elements(l))switch(t.localName){case"family":s.family=i.attr(t,"val");break;case"altName":s.altName=i.attr(t,"val");break;case"embedRegular":case"embedBold":case"embedItalic":case"embedBoldItalic":s.embedFontRefs.push(c(t,i))}return s}function c(l,i){return{id:i.attr(l,"id"),key:i.attr(l,"fontKey"),type:s[l.localName]}}i.parseFonts=function(l,i){return i.elements(l).map((l=>t(l,i)))},i.parseFont=t,i.parseEmbedFontRef=c},984:(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.WmlFooter=i.WmlHeader=void 0;const t=s(120);i.WmlHeader=class{constructor(){this.type=t.DomType.Header,this.children=[],this.cssStyle={}}},i.WmlFooter=class{constructor(){this.type=t.DomType.Footer,this.children=[],this.cssStyle={}}}},985:(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.FooterPart=i.HeaderPart=i.BaseHeaderFooterPart=void 0;const t=s(530),c=s(984);class d extends t.Part{constructor(l,i,s){super(l,i),this._documentParser=s}parseXml(l){this.rootElement=this.createRootElement(),this.rootElement.children=this._documentParser.parseBodyElements(l)}}i.BaseHeaderFooterPart=d,i.HeaderPart=class extends d{createRootElement(){return new c.WmlHeader}},i.FooterPart=class extends d{createRootElement(){return new c.WmlFooter}}},932:(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.HtmlRenderer=void 0;const t=s(120),c=s(593),d=s(630),Z=s(438),b="http://www.w3.org/1998/Math/MathML";function a(l,i,s){return e(void 0,l,i,s)}function m(l,i,s){return e("http://www.w3.org/2000/svg",l,i,s)}function e(l,i,s,t){var c=l?document.createElementNS(l,i):document.createElement(i);return Object.assign(c,s),t&&n(c,t),c}function W(l){l.innerHTML=""}function n(l,i){i.forEach((i=>l.appendChild((0,c.isString)(i)?document.createTextNode(i):i)))}function h(l){return a("style",{innerHTML:l})}function G(l,i){l.appendChild(document.createComment(i))}i.HtmlRenderer=class{constructor(l){this.htmlDocument=l,this.className="docx",this.styleMap={},this.currentPart=null,this.tableVerticalMerges=[],this.currentVerticalMerge=null,this.tableCellPositions=[],this.currentCellPosition=null,this.footnoteMap={},this.endnoteMap={},this.currentEndnoteIds=[],this.usedHederFooterParts=[],this.currentTabs=[],this.tabsTimeout=0,this.createElement=a}render(l,i,s=null,t){var d;this.document=l,this.options=t,this.className=t.className,this.rootSelector=t.inWrapper?`.${this.className}-wrapper`:":root",this.styleMap=null,W(s=s||i),W(i),G(s,"docxjs library predefined styles"),s.appendChild(this.renderDefaultStyle()),!window.MathMLElement&&t.useMathMLPolyfill&&(G(s,"docxjs mathml polyfill styles"),s.appendChild(h(Z.default))),l.themePart&&(G(s,"docxjs document theme values"),this.renderTheme(l.themePart,s)),null!=l.stylesPart&&(this.styleMap=this.processStyles(l.stylesPart.styles),G(s,"docxjs document styles"),s.appendChild(this.renderStyles(l.stylesPart.styles))),l.numberingPart&&(this.prodessNumberings(l.numberingPart.domNumberings),G(s,"docxjs document numbering styles"),s.appendChild(this.renderNumbering(l.numberingPart.domNumberings,s))),l.footnotesPart&&(this.footnoteMap=(0,c.keyBy)(l.footnotesPart.notes,(l=>l.id))),l.endnotesPart&&(this.endnoteMap=(0,c.keyBy)(l.endnotesPart.notes,(l=>l.id))),l.settingsPart&&(this.defaultTabSize=null===(d=l.settingsPart.settings)||void 0===d?void 0:d.defaultTabStop),!t.ignoreFonts&&l.fontTablePart&&this.renderFontTable(l.fontTablePart,s);var b=this.renderSections(l.documentPart.body);this.options.inWrapper?i.appendChild(this.renderWrapper(b)):n(i,b),this.refreshTabStops()}renderTheme(l,i){var s,t;const c={},d=null===(s=l.theme)||void 0===s?void 0:s.fontScheme;d&&(d.majorFont&&(c["--docx-majorHAnsi-font"]=d.majorFont.latinTypeface),d.minorFont&&(c["--docx-minorHAnsi-font"]=d.minorFont.latinTypeface));const Z=null===(t=l.theme)||void 0===t?void 0:t.colorScheme;if(Z)for(let[a,m]of Object.entries(Z.colors))c[`--docx-${a}-color`]=`#${m}`;const b=this.styleToString(`.${this.className}`,c);i.appendChild(h(b))}renderFontTable(l,i){for(let s of l.fonts)for(let l of s.embedFontRefs)this.document.loadFont(l.id,l.key).then((t=>{const c={"font-family":s.name,src:`url(${t})`};"bold"!=l.type&&"boldItalic"!=l.type||(c["font-weight"]="bold"),"italic"!=l.type&&"boldItalic"!=l.type||(c["font-style"]="italic"),G(i,`docxjs ${s.name} font`);const d=this.styleToString("@font-face",c);i.appendChild(h(d)),this.refreshTabStops()}))}processStyleName(l){return l?`${this.className}_${(0,c.escapeClassName)(l)}`:this.className}processStyles(l){const i=(0,c.keyBy)(l.filter((l=>null!=l.id)),(l=>l.id));for(const t of l.filter((l=>l.basedOn))){var s=i[t.basedOn];if(s){t.paragraphProps=(0,c.mergeDeep)(t.paragraphProps,s.paragraphProps),t.runProps=(0,c.mergeDeep)(t.runProps,s.runProps);for(const l of s.styles){const i=t.styles.find((i=>i.target==l.target));i?this.copyStyleProperties(l.values,i.values):t.styles.push(Object.assign(Object.assign({},l),{values:Object.assign({},l.values)}))}}else this.options.debug&&console.warn(`Can't find base style ${t.basedOn}`)}for(let t of l)t.cssName=this.processStyleName(t.id);return i}prodessNumberings(l){var i;for(let s of l.filter((l=>l.pStyleName))){const l=this.findStyle(s.pStyleName);(null===(i=null==l?void 0:l.paragraphProps)||void 0===i?void 0:i.numbering)&&(l.paragraphProps.numbering.level=s.level)}}processElement(l){if(l.children)for(var i of l.children)i.parent=l,i.type==t.DomType.Table?this.processTable(i):this.processElement(i)}processTable(l){for(var i of l.children)for(var s of i.children)s.cssStyle=this.copyStyleProperties(l.cellStyle,s.cssStyle,["border-left","border-right","border-top","border-bottom","padding-left","padding-right","padding-top","padding-bottom"]),this.processElement(s)}copyStyleProperties(l,i,s=null){if(!l)return i;for(var t of(null==i&&(i={}),null==s&&(s=Object.getOwnPropertyNames(l)),s))l.hasOwnProperty(t)&&!i.hasOwnProperty(t)&&(i[t]=l[t]);return i}createSection(l,i){var s=this.createElement("section",{className:l});return i&&(i.pageMargins&&(s.style.paddingLeft=i.pageMargins.left,s.style.paddingRight=i.pageMargins.right,s.style.paddingTop=i.pageMargins.top,s.style.paddingBottom=i.pageMargins.bottom),i.pageSize&&(this.options.ignoreWidth||(s.style.width=i.pageSize.width),this.options.ignoreHeight||(s.style.minHeight=i.pageSize.height)),i.columns&&i.columns.numberOfColumns&&(s.style.columnCount=`${i.columns.numberOfColumns}`,s.style.columnGap=i.columns.space,i.columns.separator&&(s.style.columnRule="1px solid black"))),s}renderSections(l){const i=[];this.processElement(l);const s=this.splitBySection(l.children);let t=null;for(let d=0,Z=s.length;d<Z;d++){this.currentFootnoteIds=[];const b=s[d],a=b.sectProps||l.props,m=this.createSection(this.className,a);this.renderStyleValues(l.cssStyle,m),this.options.renderHeaders&&this.renderHeaderFooter(a.headerRefs,a,i.length,t!=a,m);var c=this.createElement("article");this.renderElements(b.elements,c),m.appendChild(c),this.options.renderFootnotes&&this.renderNotes(this.currentFootnoteIds,this.footnoteMap,m),this.options.renderEndnotes&&d==Z-1&&this.renderNotes(this.currentEndnoteIds,this.endnoteMap,m),this.options.renderFooters&&this.renderHeaderFooter(a.footerRefs,a,i.length,t!=a,m),i.push(m),t=a}return i}renderHeaderFooter(l,i,s,t,c){var d,Z;if(l){var b=null!==(Z=null!==(d=i.titlePage&&t?l.find((l=>"first"==l.type)):null)&&void 0!==d?d:s%2==1?l.find((l=>"even"==l.type)):null)&&void 0!==Z?Z:l.find((l=>"default"==l.type)),a=b&&this.document.findPartByRelId(b.id,this.document.documentPart);a&&(this.currentPart=a,this.usedHederFooterParts.includes(a.path)||(this.processElement(a.rootElement),this.usedHederFooterParts.push(a.path)),this.renderElements([a.rootElement],c),this.currentPart=null)}}isPageBreakElement(l){return l.type==t.DomType.Break&&("lastRenderedPageBreak"==l.break?!this.options.ignoreLastRenderedPageBreak:"page"==l.break)}splitBySection(l){var i,s={sectProps:null,elements:[]},c=[s];for(let W of l){if(W.type==t.DomType.Paragraph){const l=this.findStyle(W.styleName);(null===(i=null==l?void 0:l.paragraphProps)||void 0===i?void 0:i.pageBreakBefore)&&(s.sectProps=d,s={sectProps:null,elements:[]},c.push(s))}if(s.elements.push(W),W.type==t.DomType.Paragraph){const l=W;var d=l.sectionProps,Z=-1,b=-1;if(this.options.breakPages&&l.children&&(Z=l.children.findIndex((l=>{var i,s;return-1!=(b=null!==(s=null===(i=l.children)||void 0===i?void 0:i.findIndex(this.isPageBreakElement.bind(this)))&&void 0!==s?s:-1)}))),(d||-1!=Z)&&(s.sectProps=d,s={sectProps:null,elements:[]},c.push(s)),-1!=Z){let i=l.children[Z],t=b<i.children.length-1;if(Z<l.children.length-1||t){var a=W.children,m=Object.assign(Object.assign({},W),{children:a.slice(Z)});if(W.children=a.slice(0,Z),s.elements.push(m),t){let l=i.children,s=Object.assign(Object.assign({},i),{children:l.slice(0,b)});W.children.push(s),i.children=l.slice(b)}}}}}let e=null;for(let t=c.length-1;t>=0;t--)null==c[t].sectProps?c[t].sectProps=e:e=c[t].sectProps;return c}renderWrapper(l){return this.createElement("div",{className:`${this.className}-wrapper`},l)}renderDefaultStyle(){var l=this.className;return h(`\n.${l}-wrapper { background: gray; padding: 30px; padding-bottom: 0px; display: flex; flex-flow: column; align-items: center; } \n.${l}-wrapper>section.${l} { background: white; box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); margin-bottom: 30px; }\n.${l} { color: black; }\nsection.${l} { box-sizing: border-box; display: flex; flex-flow: column nowrap; position: relative; overflow: hidden; }\nsection.${l}>article { margin-bottom: auto; }\n.${l} table { border-collapse: collapse; }\n.${l} table td, .${l} table th { vertical-align: top; }\n.${l} p { margin: 0pt; min-height: 1em; }\n.${l} span { white-space: pre-wrap; overflow-wrap: break-word; }\n.${l} a { color: inherit; text-decoration: inherit; }\n`)}renderNumbering(l,i){var s="",t=[];for(var c of l){var d=`p.${this.numberingClass(c.id,c.level)}`,Z="none";if(c.bullet){let l=`--${this.className}-${c.bullet.src}`.toLowerCase();s+=this.styleToString(`${d}:before`,{content:"' '",display:"inline-block",background:`var(${l})`},c.bullet.style),this.document.loadNumberingImage(c.bullet.src).then((s=>{var t=`${this.rootSelector} { ${l}: url(${s}) }`;i.appendChild(h(t))}))}else if(c.levelText){let l=this.numberingCounter(c.id,c.level);c.level>0?s+=this.styleToString(`p.${this.numberingClass(c.id,c.level-1)}`,{"counter-reset":l}):t.push(l),s+=this.styleToString(`${d}:before`,Object.assign({content:this.levelTextToContent(c.levelText,c.suff,c.id,this.numFormatToCssValue(c.format)),"counter-increment":l},c.rStyle))}else Z=this.numFormatToCssValue(c.format);s+=this.styleToString(d,Object.assign({display:"list-item","list-style-position":"inside","list-style-type":Z},c.pStyle))}return t.length>0&&(s+=this.styleToString(this.rootSelector,{"counter-reset":t.join(" ")})),h(s)}renderStyles(l){var i,s="";const t=this.styleMap,d=(0,c.keyBy)(l.filter((l=>l.isDefault)),(l=>l.target));for(const c of l){var Z=c.styles;if(c.linked){var b=c.linked&&t[c.linked];b?Z=Z.concat(b.styles):this.options.debug&&console.warn(`Can't find linked style ${c.linked}`)}for(const l of Z){var a=`${null!==(i=c.target)&&void 0!==i?i:""}.${c.cssName}`;c.target!=l.target&&(a+=` ${l.target}`),d[c.target]==c&&(a=`.${this.className} ${c.target}, `+a),s+=this.styleToString(a,l.values)}}return h(s)}renderNotes(l,i,s){var t=l.map((l=>i[l])).filter((l=>l));if(t.length>0){var c=this.createElement("ol",null,this.renderElements(t));s.appendChild(c)}}renderElement(l){switch(l.type){case t.DomType.Paragraph:return this.renderParagraph(l);case t.DomType.BookmarkStart:return this.renderBookmarkStart(l);case t.DomType.BookmarkEnd:return null;case t.DomType.Run:return this.renderRun(l);case t.DomType.Table:return this.renderTable(l);case t.DomType.Row:return this.renderTableRow(l);case t.DomType.Cell:return this.renderTableCell(l);case t.DomType.Hyperlink:return this.renderHyperlink(l);case t.DomType.Drawing:return this.renderDrawing(l);case t.DomType.Image:return this.renderImage(l);case t.DomType.Text:case t.DomType.Text:return this.renderText(l);case t.DomType.DeletedText:return this.renderDeletedText(l);case t.DomType.Tab:return this.renderTab(l);case t.DomType.Symbol:return this.renderSymbol(l);case t.DomType.Break:return this.renderBreak(l);case t.DomType.Footer:return this.renderContainer(l,"footer");case t.DomType.Header:return this.renderContainer(l,"header");case t.DomType.Footnote:case t.DomType.Endnote:return this.renderContainer(l,"li");case t.DomType.FootnoteReference:return this.renderFootnoteReference(l);case t.DomType.EndnoteReference:return this.renderEndnoteReference(l);case t.DomType.NoBreakHyphen:return this.createElement("wbr");case t.DomType.VmlPicture:return this.renderVmlPicture(l);case t.DomType.VmlElement:return this.renderVmlElement(l);case t.DomType.MmlMath:return this.renderContainerNS(l,b,"math",{xmlns:b});case t.DomType.MmlMathParagraph:return this.renderContainer(l,"span");case t.DomType.MmlFraction:return this.renderContainerNS(l,b,"mfrac");case t.DomType.MmlNumerator:case t.DomType.MmlDenominator:return this.renderContainerNS(l,b,"mrow");case t.DomType.MmlRadical:return this.renderMmlRadical(l);case t.DomType.MmlDegree:return this.renderContainerNS(l,b,"mn");case t.DomType.MmlSuperscript:return this.renderContainerNS(l,b,"msup");case t.DomType.MmlSubscript:return this.renderContainerNS(l,b,"msub");case t.DomType.MmlBase:return this.renderContainerNS(l,b,"mrow");case t.DomType.MmlSuperArgument:case t.DomType.MmlSubArgument:return this.renderContainerNS(l,b,"mn");case t.DomType.MmlDelimiter:return this.renderMmlDelimiter(l);case t.DomType.MmlNary:return this.renderMmlNary(l);case t.DomType.Inserted:return this.renderInserted(l);case t.DomType.Deleted:return this.renderDeleted(l)}return null}renderChildren(l,i){return this.renderElements(l.children,i)}renderElements(l,i){if(null==l)return null;var s=l.flatMap((l=>this.renderElement(l))).filter((l=>null!=l));return i&&n(i,s),s}renderContainer(l,i,s){return this.createElement(i,s,this.renderChildren(l))}renderContainerNS(l,i,s,t){return e(i,s,t,this.renderChildren(l))}renderParagraph(l){var i,s,t,c,d=this.createElement("p");const Z=this.findStyle(l.styleName);null!==(i=l.tabs)&&void 0!==i||(l.tabs=null===(s=null==Z?void 0:Z.paragraphProps)||void 0===s?void 0:s.tabs),this.renderClass(l,d),this.renderChildren(l,d),this.renderStyleValues(l.cssStyle,d),this.renderCommonProperties(d.style,l);const b=null!==(t=l.numbering)&&void 0!==t?t:null===(c=null==Z?void 0:Z.paragraphProps)||void 0===c?void 0:c.numbering;return b&&d.classList.add(this.numberingClass(b.id,b.level)),d}renderRunProperties(l,i){this.renderCommonProperties(l,i)}renderCommonProperties(l,i){null!=i&&(i.color&&(l.color=i.color),i.fontSize&&(l["font-size"]=i.fontSize))}renderHyperlink(l){var i=this.createElement("a");if(this.renderChildren(l,i),this.renderStyleValues(l.cssStyle,i),l.href)i.href=l.href;else if(l.id){const s=this.document.documentPart.rels.find((i=>i.id==l.id&&"External"===i.targetMode));i.href=null==s?void 0:s.target}return i}renderDrawing(l){var i=this.createElement("div");return i.style.display="inline-block",i.style.position="relative",i.style.textIndent="0px",this.renderChildren(l,i),this.renderStyleValues(l.cssStyle,i),i}renderImage(l){let i=this.createElement("img");return this.renderStyleValues(l.cssStyle,i),this.document&&this.document.loadDocumentImage(l.src,this.currentPart).then((l=>{i.src=l})),i}renderText(l){return this.htmlDocument.createTextNode(l.text)}renderDeletedText(l){return this.options.renderEndnotes?this.htmlDocument.createTextNode(l.text):null}renderBreak(l){return"textWrapping"==l.break?this.createElement("br"):null}renderInserted(l){return this.options.renderChanges?this.renderContainer(l,"ins"):this.renderChildren(l)}renderDeleted(l){return this.options.renderChanges?this.renderContainer(l,"del"):null}renderSymbol(l){var i=this.createElement("span");return i.style.fontFamily=l.font,i.innerHTML=`&#x${l.char};`,i}renderFootnoteReference(l){var i=this.createElement("sup");return this.currentFootnoteIds.push(l.id),i.textContent=`${this.currentFootnoteIds.length}`,i}renderEndnoteReference(l){var i=this.createElement("sup");return this.currentEndnoteIds.push(l.id),i.textContent=`${this.currentEndnoteIds.length}`,i}renderTab(l){var i,s=this.createElement("span");if(s.innerHTML=" ",this.options.experimental){s.className=this.tabStopClass();var c=null===(i=function(l,i){for(var s=l.parent;null!=s&&s.type!=i;)s=s.parent;return s}(l,t.DomType.Paragraph))||void 0===i?void 0:i.tabs;this.currentTabs.push({stops:c,span:s})}return s}renderBookmarkStart(l){var i=this.createElement("span");return i.id=l.name,i}renderRun(l){if(l.fieldRun)return null;const i=this.createElement("span");if(l.id&&(i.id=l.id),this.renderClass(l,i),this.renderStyleValues(l.cssStyle,i),l.verticalAlign){const s=this.createElement(l.verticalAlign);this.renderChildren(l,s),i.appendChild(s)}else this.renderChildren(l,i);return i}renderTable(l){let i=this.createElement("table");return this.tableCellPositions.push(this.currentCellPosition),this.tableVerticalMerges.push(this.currentVerticalMerge),this.currentVerticalMerge={},this.currentCellPosition={col:0,row:0},l.columns&&i.appendChild(this.renderTableColumns(l.columns)),this.renderClass(l,i),this.renderChildren(l,i),this.renderStyleValues(l.cssStyle,i),this.currentVerticalMerge=this.tableVerticalMerges.pop(),this.currentCellPosition=this.tableCellPositions.pop(),i}renderTableColumns(l){let i=this.createElement("colgroup");for(let s of l){let l=this.createElement("col");s.width&&(l.style.width=s.width),i.appendChild(l)}return i}renderTableRow(l){let i=this.createElement("tr");return this.currentCellPosition.col=0,this.renderClass(l,i),this.renderChildren(l,i),this.renderStyleValues(l.cssStyle,i),this.currentCellPosition.row++,i}renderTableCell(l){let i=this.createElement("td");const s=this.currentCellPosition.col;return l.verticalMerge?"restart"==l.verticalMerge?(this.currentVerticalMerge[s]=i,i.rowSpan=1):this.currentVerticalMerge[s]&&(this.currentVerticalMerge[s].rowSpan+=1,i.style.display="none"):this.currentVerticalMerge[s]=null,this.renderClass(l,i),this.renderChildren(l,i),this.renderStyleValues(l.cssStyle,i),l.span&&(i.colSpan=l.span),this.currentCellPosition.col+=i.colSpan,i}renderVmlPicture(l){var i=a("div");return this.renderChildren(l,i),i}renderVmlElement(l){var i,s,t=m("svg");t.setAttribute("style",l.cssStyleText);const c=m(l.tagName);return Object.entries(l.attrs).forEach((([l,i])=>c.setAttribute(l,i))),(null===(i=l.imageHref)||void 0===i?void 0:i.id)&&(null===(s=this.document)||void 0===s||s.loadDocumentImage(l.imageHref.id,this.currentPart).then((l=>c.setAttribute("href",l)))),t.appendChild(c),setTimeout((()=>{const l=t.firstElementChild.getBBox();t.setAttribute("width",`${Math.ceil(l.x+l.width)}`),t.setAttribute("height",`${Math.ceil(l.y+l.height)}`)}),0),t}renderMmlRadical(l){var i;const s=l.children.find((l=>l.type==t.DomType.MmlBase));if(null===(i=l.props)||void 0===i?void 0:i.hideDegree)return e(b,"msqrt",null,this.renderElements([s]));const c=l.children.find((l=>l.type==t.DomType.MmlDegree));return e(b,"mroot",null,this.renderElements([s,c]))}renderMmlDelimiter(l){var i,s;const t=[];return t.push(e(b,"mo",null,[null!==(i=l.props.beginChar)&&void 0!==i?i:"("])),t.push(...this.renderElements(l.children)),t.push(e(b,"mo",null,[null!==(s=l.props.endChar)&&void 0!==s?s:")"])),e(b,"mrow",null,t)}renderMmlNary(l){var i;const s=[],d=(0,c.keyBy)(l.children,(l=>l.type)),Z=d[t.DomType.MmlSuperArgument],a=d[t.DomType.MmlSubArgument],m=Z?e(b,"mo",null,(0,c.asArray)(this.renderElement(Z))):null,W=a?e(b,"mo",null,(0,c.asArray)(this.renderElement(a))):null;if(null===(i=l.props)||void 0===i?void 0:i.char){const i=e(b,"mo",null,[l.props.char]);m||W?s.push(e(b,"munderover",null,[i,W,m])):m?s.push(e(b,"mover",null,[i,m])):W?s.push(e(b,"munder",null,[i,W])):s.push(i)}return s.push(...this.renderElements(d[t.DomType.MmlBase].children)),e(b,"mrow",null,s)}renderStyleValues(l,i){Object.assign(i.style,l)}renderClass(l,i){l.className&&(i.className=l.className),l.styleName&&i.classList.add(this.processStyleName(l.styleName))}findStyle(l){var i;return l&&(null===(i=this.styleMap)||void 0===i?void 0:i[l])}numberingClass(l,i){return`${this.className}-num-${l}-${i}`}tabStopClass(){return`${this.className}-tab-stop`}styleToString(l,i,s=null){let t=`${l} {\r\n`;for(const c in i)t+=` ${c}: ${i[c]};\r\n`;return s&&(t+=s),t+"}\r\n"}numberingCounter(l,i){return`${this.className}-num-${l}-${i}`}levelTextToContent(l,i,s,t){var c;return`"${l.replace(/%\d*/g,(l=>{let i=parseInt(l.substring(1),10)-1;return`"counter(${this.numberingCounter(s,i)}, ${t})"`}))}${null!==(c={tab:"\\9",space:"\\a0"}[i])&&void 0!==c?c:""}"`}numFormatToCssValue(l){return{none:"none",bullet:"disc",decimal:"decimal",lowerLetter:"lower-alpha",upperLetter:"upper-alpha",lowerRoman:"lower-roman",upperRoman:"upper-roman"}[l]||l}refreshTabStops(){this.options.experimental&&(clearTimeout(this.tabsTimeout),this.tabsTimeout=setTimeout((()=>{const l=(0,d.computePixelToPoint)();for(let i of this.currentTabs)(0,d.updateTabStop)(i.span,i.stops,this.defaultTabSize,l)}),500))}}},630:(l,i)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.updateTabStop=i.computePixelToPoint=void 0;const s={pos:0,leader:"none",style:"left"};function t(l){return parseFloat(l)}i.computePixelToPoint=function(l=document.body){const i=document.createElement("div");i.style.width="100pt",l.appendChild(i);const s=100/i.offsetWidth;return l.removeChild(i),s},i.updateTabStop=function(l,i,c,d=.75){const Z=l.closest("p"),b=l.getBoundingClientRect(),a=Z.getBoundingClientRect(),m=getComputedStyle(Z),e=(null==i?void 0:i.length)>0?i.map((l=>({pos:t(l.position),leader:l.leader,style:l.style}))).sort(((l,i)=>l.pos-i.pos)):[s],W=e[e.length-1],n=a.width*d,h=t(c);let G=W.pos+h;if(G<n)for(;G<n&&e.length<50;G+=h)e.push(Object.assign(Object.assign({},s),{pos:G}));const u=parseFloat(m.marginLeft),N=a.left+u,M=(b.left-N)*d,I=e.find((l=>"clear"!=l.style&&l.pos>M));if(null==I)return;let Y=1;if("right"==I.style||"center"==I.style){const i=Array.from(Z.querySelectorAll(`.${l.className}`)),s=i.indexOf(l)+1,t=document.createRange();t.setStart(l,1),s<i.length?t.setEndBefore(i[s]):t.setEndAfter(Z);const c="center"==I.style?.5:1,b=t.getBoundingClientRect(),m=b.left+c*b.width-(a.left-u);Y=I.pos-m*d}else Y=I.pos-M;switch(l.innerHTML=" ",l.style.textDecoration="inherit",l.style.wordSpacing=`${Y.toFixed(0)}pt`,I.leader){case"dot":case"middleDot":l.style.textDecoration="underline",l.style.textDecorationStyle="dotted";break;case"hyphen":case"heavy":case"underscore":l.style.textDecoration="underline"}}},881:(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.WmlEndnote=i.WmlFootnote=i.WmlBaseNote=void 0;const t=s(120);class c{constructor(){this.children=[],this.cssStyle={}}}i.WmlBaseNote=c,i.WmlFootnote=class extends c{constructor(){super(...arguments),this.type=t.DomType.Footnote}},i.WmlEndnote=class extends c{constructor(){super(...arguments),this.type=t.DomType.Endnote}}},735:(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.EndnotesPart=i.FootnotesPart=i.BaseNotePart=void 0;const t=s(530),c=s(881);class d extends t.Part{constructor(l,i,s){super(l,i),this._documentParser=s}}i.BaseNotePart=d,i.FootnotesPart=class extends d{constructor(l,i,s){super(l,i,s)}parseXml(l){this.notes=this._documentParser.parseNotes(l,"footnote",c.WmlFootnote)}},i.EndnotesPart=class extends d{constructor(l,i,s){super(l,i,s)}parseXml(l){this.notes=this._documentParser.parseNotes(l,"endnote",c.WmlEndnote)}}},527:(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.NumberingPart=void 0;const t=s(530),c=s(682);class d extends t.Part{constructor(l,i,s){super(l,i),this._documentParser=s}parseXml(l){Object.assign(this,(0,c.parseNumberingPart)(l,this._package.xmlParser)),this.domNumberings=this._documentParser.parseNumberingFile(l)}}i.NumberingPart=d},682:(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.parseNumberingBulletPicture=i.parseNumberingLevelOverrride=i.parseNumberingLevel=i.parseAbstractNumbering=i.parseNumbering=i.parseNumberingPart=void 0;const t=s(109),c=s(488);function d(l,i){let s={id:i.attr(l,"numId"),overrides:[]};for(let t of i.elements(l))switch(t.localName){case"abstractNumId":s.abstractId=i.attr(t,"val");break;case"lvlOverride":s.overrides.push(a(t,i))}return s}function Z(l,i){let s={id:i.attr(l,"abstractNumId"),levels:[]};for(let t of i.elements(l))switch(t.localName){case"name":s.name=i.attr(t,"val");break;case"multiLevelType":s.multiLevelType=i.attr(t,"val");break;case"numStyleLink":s.numberingStyleLink=i.attr(t,"val");break;case"styleLink":s.styleLink=i.attr(t,"val");break;case"lvl":s.levels.push(b(t,i))}return s}function b(l,i){let s={level:i.intAttr(l,"ilvl")};for(let d of i.elements(l))switch(d.localName){case"start":s.start=i.attr(d,"val");break;case"lvlRestart":s.restart=i.intAttr(d,"val");break;case"numFmt":s.format=i.attr(d,"val");break;case"lvlText":s.text=i.attr(d,"val");break;case"lvlJc":s.justification=i.attr(d,"val");break;case"lvlPicBulletId":s.bulletPictureId=i.attr(d,"val");break;case"pStyle":s.paragraphStyle=i.attr(d,"val");break;case"pPr":s.paragraphProps=(0,t.parseParagraphProperties)(d,i);break;case"rPr":s.runProps=(0,c.parseRunProperties)(d,i)}return s}function a(l,i){let s={level:i.intAttr(l,"ilvl")};for(let t of i.elements(l))switch(t.localName){case"startOverride":s.start=i.intAttr(t,"val");break;case"lvl":s.numberingLevel=b(t,i)}return s}function m(l,i){var s=i.element(l,"pict"),t=s&&i.element(s,"shape"),c=t&&i.element(t,"imagedata");return c?{id:i.attr(l,"numPicBulletId"),referenceId:i.attr(c,"id"),style:i.attr(t,"style")}:null}i.parseNumberingPart=function(l,i){let s={numberings:[],abstractNumberings:[],bulletPictures:[]};for(let t of i.elements(l))switch(t.localName){case"num":s.numberings.push(d(t,i));break;case"abstractNum":s.abstractNumberings.push(Z(t,i));break;case"numPicBullet":s.bulletPictures.push(m(t,i))}return s},i.parseNumbering=d,i.parseAbstractNumbering=Z,i.parseNumberingLevel=b,i.parseNumberingLevelOverrride=a,i.parseNumberingBulletPicture=m},472:(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.XmlParser=i.serializeXmlString=i.parseXmlString=void 0;const t=s(149);i.parseXmlString=function(l,i=!1){i&&(l=l.replace(/<[?].*[?]>/,""));const s=(new DOMParser).parseFromString(l,"application/xml"),t=null===(c=s.getElementsByTagName("parsererror")[0])||void 0===c?void 0:c.textContent;var c;if(t)throw new Error(t);return s},i.serializeXmlString=function(l){return(new XMLSerializer).serializeToString(l)};class c{elements(l,i=null){const s=[];for(let t=0,c=l.childNodes.length;t<c;t++){let c=l.childNodes.item(t);1!=c.nodeType||null!=i&&c.localName!=i||s.push(c)}return s}element(l,i){for(let s=0,t=l.childNodes.length;s<t;s++){let t=l.childNodes.item(s);if(1==t.nodeType&&t.localName==i)return t}return null}elementAttr(l,i,s){var t=this.element(l,i);return t?this.attr(t,s):void 0}attrs(l){return Array.from(l.attributes)}attr(l,i){for(let s=0,t=l.attributes.length;s<t;s++){let t=l.attributes.item(s);if(t.localName==i)return t.value}return null}intAttr(l,i,s=null){var t=this.attr(l,i);return t?parseInt(t):s}hexAttr(l,i,s=null){var t=this.attr(l,i);return t?parseInt(t,16):s}floatAttr(l,i,s=null){var t=this.attr(l,i);return t?parseFloat(t):s}boolAttr(l,i,s=null){return(0,t.convertBoolean)(this.attr(l,i),s)}lengthAttr(l,i,s=t.LengthUsage.Dxa){return(0,t.convertLength)(this.attr(l,i),s)}}i.XmlParser=c;const d=new c;i.default=d},287:(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.SettingsPart=void 0;const t=s(530),c=s(846);class d extends t.Part{constructor(l,i){super(l,i)}parseXml(l){this.settings=(0,c.parseSettings)(l,this._package.xmlParser)}}i.SettingsPart=d},846:(l,i)=>{function s(l,i){var s={defaultNoteIds:[]};for(let t of i.elements(l))switch(t.localName){case"numFmt":s.nummeringFormat=i.attr(t,"val");break;case"footnote":case"endnote":s.defaultNoteIds.push(i.attr(t,"id"))}return s}Object.defineProperty(i,"__esModule",{value:!0}),i.parseNoteProperties=i.parseSettings=void 0,i.parseSettings=function(l,i){var t={};for(let c of i.elements(l))switch(c.localName){case"defaultTabStop":t.defaultTabStop=i.lengthAttr(c,"val");break;case"footnotePr":t.footnoteProps=s(c,i);break;case"endnotePr":t.endnoteProps=s(c,i);break;case"autoHyphenation":t.autoHyphenation=i.boolAttr(c,"val")}return t},i.parseNoteProperties=s},240:(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.StylesPart=void 0;const t=s(530);class c extends t.Part{constructor(l,i,s){super(l,i),this._documentParser=s}parseXml(l){this.styles=this._documentParser.parseStylesFile(l)}}i.StylesPart=c},893:(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.ThemePart=void 0;const t=s(530),c=s(55);class d extends t.Part{constructor(l,i){super(l,i)}parseXml(l){this.theme=(0,c.parseTheme)(l,this._package.xmlParser)}}i.ThemePart=d},55:(l,i)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.parseFontInfo=i.parseFontScheme=i.parseColorScheme=i.parseTheme=i.DmlTheme=void 0;class s{}function t(l,i){var s={name:i.attr(l,"name"),colors:{}};for(let d of i.elements(l)){var t=i.element(d,"srgbClr"),c=i.element(d,"sysClr");t?s.colors[d.localName]=i.attr(t,"val"):c&&(s.colors[d.localName]=i.attr(c,"lastClr"))}return s}function c(l,i){var s={name:i.attr(l,"name")};for(let t of i.elements(l))switch(t.localName){case"majorFont":s.majorFont=d(t,i);break;case"minorFont":s.minorFont=d(t,i)}return s}function d(l,i){return{latinTypeface:i.elementAttr(l,"latin","typeface"),eaTypeface:i.elementAttr(l,"ea","typeface"),csTypeface:i.elementAttr(l,"cs","typeface")}}i.DmlTheme=s,i.parseTheme=function(l,i){var d=new s,Z=i.element(l,"themeElements");for(let s of i.elements(Z))switch(s.localName){case"clrScheme":d.colorScheme=t(s,i);break;case"fontScheme":d.fontScheme=c(s,i)}return d},i.parseColorScheme=t,i.parseFontScheme=c,i.parseFontInfo=d},593:(l,i)=>{function s(l){return l&&"object"==typeof l&&!Array.isArray(l)}Object.defineProperty(i,"__esModule",{value:!0}),i.asArray=i.formatCssRules=i.parseCssRules=i.mergeDeep=i.isString=i.isObject=i.blobToBase64=i.keyBy=i.resolvePath=i.splitPath=i.escapeClassName=void 0,i.escapeClassName=function(l){return null==l?void 0:l.replace(/[ .]+/g,"-").replace(/[&]+/g,"and").toLowerCase()},i.splitPath=function(l){let i=l.lastIndexOf("/")+1;return[0==i?"":l.substring(0,i),0==i?l:l.substring(i)]},i.resolvePath=function(l,i){try{const s="http://docx/";return new URL(l,s+i).toString().substring(s.length)}catch(s){return`${i}${l}`}},i.keyBy=function(l,i){return l.reduce(((l,s)=>(l[i(s)]=s,l)),{})},i.blobToBase64=function(l){return new Promise(((i,s)=>{const t=new FileReader;t.onloadend=()=>i(t.result),t.readAsDataURL(l)}))},i.isObject=s,i.isString=function(l){return l&&"string"==typeof l||l instanceof String},i.mergeDeep=function l(i,...t){var c;if(!t.length)return i;const d=t.shift();if(s(i)&&s(d))for(const Z in d)s(d[Z])?l(null!==(c=i[Z])&&void 0!==c?c:i[Z]={},d[Z]):i[Z]=d[Z];return l(i,...t)},i.parseCssRules=function(l){const i={};for(const s of l.split(";")){const[l,t]=s.split(":");i[l]=t}return i},i.formatCssRules=function(l){return Object.entries(l).map(((l,i)=>`${l}: ${i}`)).join(";")},i.asArray=function(l){return Array.isArray(l)?l:[l]}},320:(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.parseVmlElement=i.VmlElement=void 0;const t=s(149),c=s(120),d=s(472);class Z{constructor(){this.type=c.DomType.VmlElement,this.attrs={},this.chidren=[]}}function b(l){var i;return{stroke:d.default.attr(l,"color"),"stroke-width":null!==(i=d.default.lengthAttr(l,"weight",t.LengthUsage.Emu))&&void 0!==i?i:"1px"}}function a(l){return l.split(",")}i.VmlElement=Z,i.parseVmlElement=function l(i){var s=new Z;switch(i.localName){case"rect":s.tagName="rect",Object.assign(s.attrs,{width:"100%",height:"100%"});break;case"oval":s.tagName="ellipse",Object.assign(s.attrs,{cx:"50%",cy:"50%",rx:"50%",ry:"50%"});break;case"line":s.tagName="line";break;case"shape":s.tagName="g";break;default:return null}for(const t of d.default.attrs(i))switch(t.localName){case"style":s.cssStyleText=t.value;break;case"fillcolor":s.attrs.fill=t.value;break;case"from":const[l,i]=a(t.value);Object.assign(s.attrs,{x1:l,y1:i});break;case"to":const[c,d]=a(t.value);Object.assign(s.attrs,{x2:c,y2:d})}for(const t of d.default.elements(i))switch(t.localName){case"stroke":Object.assign(s.attrs,b(t));break;case"fill":Object.assign(s.attrs,{});break;case"imagedata":s.tagName="image",Object.assign(s.attrs,{width:"100%",height:"100%"}),s.imageHref={id:d.default.attr(t,"id"),title:d.default.attr(t,"title")};break;default:const i=l(t);i&&s.chidren.push(i)}return s}},213:(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.deobfuscate=i.WordDocument=void 0;const t=s(461),c=s(380),d=s(522),Z=s(448),b=s(593),a=s(527),m=s(240),e=s(985),W=s(665),n=s(162),h=s(893),G=s(735),u=s(287),N=s(177),M=[{type:t.RelationshipTypes.OfficeDocument,target:"word/document.xml"},{type:t.RelationshipTypes.ExtendedProperties,target:"docProps/app.xml"},{type:t.RelationshipTypes.CoreProperties,target:"docProps/core.xml"},{type:t.RelationshipTypes.CustomProperties,target:"docProps/custom.xml"}];class I{constructor(){this.parts=[],this.partsMap={}}static load(l,i,s){var t=new I;return t._options=s,t._parser=i,d.OpenXmlPackage.load(l,s).then((l=>(t._package=l,t._package.loadRelationships()))).then((l=>{t.rels=l;const i=M.map((i=>{var s;const c=null!==(s=l.find((l=>l.type===i.type)))&&void 0!==s?s:i;return t.loadRelationshipPart(c.target,c.type)}));return Promise.all(i)})).then((()=>t))}save(l="blob"){return this._package.save(l)}loadRelationshipPart(l,i){if(this.partsMap[l])return Promise.resolve(this.partsMap[l]);if(!this._package.get(l))return Promise.resolve(null);let s=null;switch(i){case t.RelationshipTypes.OfficeDocument:this.documentPart=s=new Z.DocumentPart(this._package,l,this._parser);break;case t.RelationshipTypes.FontTable:this.fontTablePart=s=new c.FontTablePart(this._package,l);break;case t.RelationshipTypes.Numbering:this.numberingPart=s=new a.NumberingPart(this._package,l,this._parser);break;case t.RelationshipTypes.Styles:this.stylesPart=s=new m.StylesPart(this._package,l,this._parser);break;case t.RelationshipTypes.Theme:this.themePart=s=new h.ThemePart(this._package,l);break;case t.RelationshipTypes.Footnotes:this.footnotesPart=s=new G.FootnotesPart(this._package,l,this._parser);break;case t.RelationshipTypes.Endnotes:this.endnotesPart=s=new G.EndnotesPart(this._package,l,this._parser);break;case t.RelationshipTypes.Footer:s=new e.FooterPart(this._package,l,this._parser);break;case t.RelationshipTypes.Header:s=new e.HeaderPart(this._package,l,this._parser);break;case t.RelationshipTypes.CoreProperties:this.corePropsPart=s=new n.CorePropsPart(this._package,l);break;case t.RelationshipTypes.ExtendedProperties:this.extendedPropsPart=s=new W.ExtendedPropsPart(this._package,l);break;case t.RelationshipTypes.CustomProperties:s=new N.CustomPropsPart(this._package,l);break;case t.RelationshipTypes.Settings:this.settingsPart=s=new u.SettingsPart(this._package,l)}return null==s?Promise.resolve(null):(this.partsMap[l]=s,this.parts.push(s),s.load().then((()=>{if(null==s.rels||0==s.rels.length)return s;const[l]=(0,b.splitPath)(s.path),i=s.rels.map((i=>this.loadRelationshipPart((0,b.resolvePath)(i.target,l),i.type)));return Promise.all(i).then((()=>s))})))}loadDocumentImage(l,i){return this.loadResource(null!=i?i:this.documentPart,l,"blob").then((l=>this.blobToURL(l)))}loadNumberingImage(l){return this.loadResource(this.numberingPart,l,"blob").then((l=>this.blobToURL(l)))}loadFont(l,i){return this.loadResource(this.fontTablePart,l,"uint8array").then((l=>l?this.blobToURL(new Blob([Y(l,i)])):l))}blobToURL(l){return l?this._options.useBase64URL?(0,b.blobToBase64)(l):URL.createObjectURL(l):null}findPartByRelId(l,i=null){var s,t=(null!==(s=i.rels)&&void 0!==s?s:this.rels).find((i=>i.id==l));const c=i?(0,b.splitPath)(i.path)[0]:"";return t?this.partsMap[(0,b.resolvePath)(t.target,c)]:null}getPathById(l,i){const s=l.rels.find((l=>l.id==i)),[t]=(0,b.splitPath)(l.path);return s?(0,b.resolvePath)(s.target,t):null}loadResource(l,i,s){const t=this.getPathById(l,i);return t?this._package.load(t,s):Promise.resolve(null)}}function Y(l,i){const s=i.replace(/{|}|-/g,""),t=new Array(16);for(let c=0;c<16;c++)t[16-c-1]=parseInt(s.substr(2*c,2),16);for(let c=0;c<32;c++)l[c]=l[c]^t[c%16];return l}i.WordDocument=I,i.deobfuscate=Y},583:l=>{l.exports="data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 20 100%27 preserveAspectRatio=%27none%27%3E%3Cpath d=%27m0,75 l5,0 l5,25 l10,-100%27 stroke=%27black%27 fill=%27none%27 vector-effect=%27non-scaling-stroke%27/%3E%3C/svg%3E"},626:i=>{i.exports=l}},s={};function t(l){var c=s[l];if(void 0!==c)return c.exports;var d=s[l]={id:l,exports:{}};return i[l](d,d.exports,t),d.exports}return t.m=i,t.n=l=>{var i=l&&l.__esModule?()=>l.default:()=>l;return t.d(i,{a:i}),i},t.d=(l,i)=>{for(var s in i)t.o(i,s)&&!t.o(l,s)&&Object.defineProperty(l,s,{enumerable:!0,get:i[s]})},t.o=(l,i)=>Object.prototype.hasOwnProperty.call(l,i),t.r=l=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(l,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(l,"__esModule",{value:!0})},t.b=document.baseURI||self.location.href,t(667)})()))},129:function(l,i,s){
|
||
/*!
|
||
|
||
JSZip v3.10.1 - A JavaScript class for generating and reading zip files
|
||
<http://stuartk.com/jszip>
|
||
|
||
(c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com>
|
||
Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.
|
||
|
||
JSZip uses the library pako released under the MIT license :
|
||
https://github.com/nodeca/pako/blob/main/LICENSE
|
||
*/
|
||
!function(i){l.exports=i()}((function(){return function l(i,s,t){function c(Z,b){if(!s[Z]){if(!i[Z]){var a=void 0;if(!b&&a)return require(Z,!0);if(d)return d(Z,!0);var m=new Error("Cannot find module '"+Z+"'");throw m.code="MODULE_NOT_FOUND",m}var e=s[Z]={exports:{}};i[Z][0].call(e.exports,(function(l){var s=i[Z][1][l];return c(s||l)}),e,e.exports,l,i,s,t)}return s[Z].exports}for(var d=void 0,Z=0;Z<t.length;Z++)c(t[Z]);return c}({1:[function(l,i,s){"use strict";var t=l("./utils"),c=l("./support"),d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";s.encode=function(l){for(var i,s,c,Z,b,a,m,e=[],W=0,n=l.length,h=n,G="string"!==t.getTypeOf(l);W<l.length;)h=n-W,c=G?(i=l[W++],s=W<n?l[W++]:0,W<n?l[W++]:0):(i=l.charCodeAt(W++),s=W<n?l.charCodeAt(W++):0,W<n?l.charCodeAt(W++):0),Z=i>>2,b=(3&i)<<4|s>>4,a=1<h?(15&s)<<2|c>>6:64,m=2<h?63&c:64,e.push(d.charAt(Z)+d.charAt(b)+d.charAt(a)+d.charAt(m));return e.join("")},s.decode=function(l){var i,s,t,Z,b,a,m=0,e=0,W="data:";if(l.substr(0,W.length)===W)throw new Error("Invalid base64 input, it looks like a data url.");var n,h=3*(l=l.replace(/[^A-Za-z0-9+/=]/g,"")).length/4;if(l.charAt(l.length-1)===d.charAt(64)&&h--,l.charAt(l.length-2)===d.charAt(64)&&h--,h%1!=0)throw new Error("Invalid base64 input, bad content length.");for(n=c.uint8array?new Uint8Array(0|h):new Array(0|h);m<l.length;)i=d.indexOf(l.charAt(m++))<<2|(Z=d.indexOf(l.charAt(m++)))>>4,s=(15&Z)<<4|(b=d.indexOf(l.charAt(m++)))>>2,t=(3&b)<<6|(a=d.indexOf(l.charAt(m++))),n[e++]=i,64!==b&&(n[e++]=s),64!==a&&(n[e++]=t);return n}},{"./support":30,"./utils":32}],2:[function(l,i,s){"use strict";var t=l("./external"),c=l("./stream/DataWorker"),d=l("./stream/Crc32Probe"),Z=l("./stream/DataLengthProbe");function b(l,i,s,t,c){this.compressedSize=l,this.uncompressedSize=i,this.crc32=s,this.compression=t,this.compressedContent=c}b.prototype={getContentWorker:function(){var l=new c(t.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new Z("data_length")),i=this;return l.on("end",(function(){if(this.streamInfo.data_length!==i.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")})),l},getCompressedWorker:function(){return new c(t.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},b.createWorkerFrom=function(l,i,s){return l.pipe(new d).pipe(new Z("uncompressedSize")).pipe(i.compressWorker(s)).pipe(new Z("compressedSize")).withStreamInfo("compression",i)},i.exports=b},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(l,i,s){"use strict";var t=l("./stream/GenericWorker");s.STORE={magic:"\0\0",compressWorker:function(){return new t("STORE compression")},uncompressWorker:function(){return new t("STORE decompression")}},s.DEFLATE=l("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(l,i,s){"use strict";var t=l("./utils"),c=function(){for(var l,i=[],s=0;s<256;s++){l=s;for(var t=0;t<8;t++)l=1&l?3988292384^l>>>1:l>>>1;i[s]=l}return i}();i.exports=function(l,i){return void 0!==l&&l.length?"string"!==t.getTypeOf(l)?function(l,i,s,t){var d=c,Z=t+s;l^=-1;for(var b=t;b<Z;b++)l=l>>>8^d[255&(l^i[b])];return-1^l}(0|i,l,l.length,0):function(l,i,s,t){var d=c,Z=t+s;l^=-1;for(var b=t;b<Z;b++)l=l>>>8^d[255&(l^i.charCodeAt(b))];return-1^l}(0|i,l,l.length,0):0}},{"./utils":32}],5:[function(l,i,s){"use strict";s.base64=!1,s.binary=!1,s.dir=!1,s.createFolders=!0,s.date=null,s.compression=null,s.compressionOptions=null,s.comment=null,s.unixPermissions=null,s.dosPermissions=null},{}],6:[function(l,i,s){"use strict";var t=null;t="undefined"!=typeof Promise?Promise:l("lie"),i.exports={Promise:t}},{lie:37}],7:[function(l,i,s){"use strict";var t="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,c=l("pako"),d=l("./utils"),Z=l("./stream/GenericWorker"),b=t?"uint8array":"array";function a(l,i){Z.call(this,"FlateWorker/"+l),this._pako=null,this._pakoAction=l,this._pakoOptions=i,this.meta={}}s.magic="\b\0",d.inherits(a,Z),a.prototype.processChunk=function(l){this.meta=l.meta,null===this._pako&&this._createPako(),this._pako.push(d.transformTo(b,l.data),!1)},a.prototype.flush=function(){Z.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},a.prototype.cleanUp=function(){Z.prototype.cleanUp.call(this),this._pako=null},a.prototype._createPako=function(){this._pako=new c[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var l=this;this._pako.onData=function(i){l.push({data:i,meta:l.meta})}},s.compressWorker=function(l){return new a("Deflate",l)},s.uncompressWorker=function(){return new a("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(l,i,s){"use strict";function t(l,i){var s,t="";for(s=0;s<i;s++)t+=String.fromCharCode(255&l),l>>>=8;return t}function c(l,i,s,c,Z,e){var W,n,h=l.file,G=l.compression,u=e!==b.utf8encode,N=d.transformTo("string",e(h.name)),M=d.transformTo("string",b.utf8encode(h.name)),I=h.comment,Y=d.transformTo("string",e(I)),X=d.transformTo("string",b.utf8encode(I)),L=M.length!==h.name.length,y=X.length!==I.length,o="",V="",p="",T=h.dir,w=h.date,z={crc32:0,compressedSize:0,uncompressedSize:0};i&&!s||(z.crc32=l.crc32,z.compressedSize=l.compressedSize,z.uncompressedSize=l.uncompressedSize);var R=0;i&&(R|=8),u||!L&&!y||(R|=2048);var r=0,C=0;T&&(r|=16),"UNIX"===Z?(C=798,r|=function(l,i){var s=l;return l||(s=i?16893:33204),(65535&s)<<16}(h.unixPermissions,T)):(C=20,r|=function(l){return 63&(l||0)}(h.dosPermissions)),W=w.getUTCHours(),W<<=6,W|=w.getUTCMinutes(),W<<=5,W|=w.getUTCSeconds()/2,n=w.getUTCFullYear()-1980,n<<=4,n|=w.getUTCMonth()+1,n<<=5,n|=w.getUTCDate(),L&&(V=t(1,1)+t(a(N),4)+M,o+="up"+t(V.length,2)+V),y&&(p=t(1,1)+t(a(Y),4)+X,o+="uc"+t(p.length,2)+p);var S="";return S+="\n\0",S+=t(R,2),S+=G.magic,S+=t(W,2),S+=t(n,2),S+=t(z.crc32,4),S+=t(z.compressedSize,4),S+=t(z.uncompressedSize,4),S+=t(N.length,2),S+=t(o.length,2),{fileRecord:m.LOCAL_FILE_HEADER+S+N+o,dirRecord:m.CENTRAL_FILE_HEADER+t(C,2)+S+t(Y.length,2)+"\0\0\0\0"+t(r,4)+t(c,4)+N+o+Y}}var d=l("../utils"),Z=l("../stream/GenericWorker"),b=l("../utf8"),a=l("../crc32"),m=l("../signature");function e(l,i,s,t){Z.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=i,this.zipPlatform=s,this.encodeFileName=t,this.streamFiles=l,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}d.inherits(e,Z),e.prototype.push=function(l){var i=l.meta.percent||0,s=this.entriesCount,t=this._sources.length;this.accumulate?this.contentBuffer.push(l):(this.bytesWritten+=l.data.length,Z.prototype.push.call(this,{data:l.data,meta:{currentFile:this.currentFile,percent:s?(i+100*(s-t-1))/s:100}}))},e.prototype.openedSource=function(l){this.currentSourceOffset=this.bytesWritten,this.currentFile=l.file.name;var i=this.streamFiles&&!l.file.dir;if(i){var s=c(l,i,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:s.fileRecord,meta:{percent:0}})}else this.accumulate=!0},e.prototype.closedSource=function(l){this.accumulate=!1;var i=this.streamFiles&&!l.file.dir,s=c(l,i,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(s.dirRecord),i)this.push({data:function(l){return m.DATA_DESCRIPTOR+t(l.crc32,4)+t(l.compressedSize,4)+t(l.uncompressedSize,4)}(l),meta:{percent:100}});else for(this.push({data:s.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},e.prototype.flush=function(){for(var l=this.bytesWritten,i=0;i<this.dirRecords.length;i++)this.push({data:this.dirRecords[i],meta:{percent:100}});var s=this.bytesWritten-l,c=function(l,i,s,c,Z){var b=d.transformTo("string",Z(c));return m.CENTRAL_DIRECTORY_END+"\0\0\0\0"+t(l,2)+t(l,2)+t(i,4)+t(s,4)+t(b.length,2)+b}(this.dirRecords.length,s,l,this.zipComment,this.encodeFileName);this.push({data:c,meta:{percent:100}})},e.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},e.prototype.registerPrevious=function(l){this._sources.push(l);var i=this;return l.on("data",(function(l){i.processChunk(l)})),l.on("end",(function(){i.closedSource(i.previous.streamInfo),i._sources.length?i.prepareNextSource():i.end()})),l.on("error",(function(l){i.error(l)})),this},e.prototype.resume=function(){return!!Z.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},e.prototype.error=function(l){var i=this._sources;if(!Z.prototype.error.call(this,l))return!1;for(var s=0;s<i.length;s++)try{i[s].error(l)}catch(l){}return!0},e.prototype.lock=function(){Z.prototype.lock.call(this);for(var l=this._sources,i=0;i<l.length;i++)l[i].lock()},i.exports=e},{"../crc32":4,"../signature":23,"../stream/GenericWorker":28,"../utf8":31,"../utils":32}],9:[function(l,i,s){"use strict";var t=l("../compressions"),c=l("./ZipFileWorker");s.generateWorker=function(l,i,s){var d=new c(i.streamFiles,s,i.platform,i.encodeFileName),Z=0;try{l.forEach((function(l,s){Z++;var c=function(l,i){var s=l||i,c=t[s];if(!c)throw new Error(s+" is not a valid compression method !");return c}(s.options.compression,i.compression),b=s.options.compressionOptions||i.compressionOptions||{},a=s.dir,m=s.date;s._compressWorker(c,b).withStreamInfo("file",{name:l,dir:a,date:m,comment:s.comment||"",unixPermissions:s.unixPermissions,dosPermissions:s.dosPermissions}).pipe(d)})),d.entriesCount=Z}catch(l){d.error(l)}return d}},{"../compressions":3,"./ZipFileWorker":8}],10:[function(l,i,s){"use strict";function t(){if(!(this instanceof t))return new t;if(arguments.length)throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.");this.files=Object.create(null),this.comment=null,this.root="",this.clone=function(){var l=new t;for(var i in this)"function"!=typeof this[i]&&(l[i]=this[i]);return l}}(t.prototype=l("./object")).loadAsync=l("./load"),t.support=l("./support"),t.defaults=l("./defaults"),t.version="3.10.1",t.loadAsync=function(l,i){return(new t).loadAsync(l,i)},t.external=l("./external"),i.exports=t},{"./defaults":5,"./external":6,"./load":11,"./object":15,"./support":30}],11:[function(l,i,s){"use strict";var t=l("./utils"),c=l("./external"),d=l("./utf8"),Z=l("./zipEntries"),b=l("./stream/Crc32Probe"),a=l("./nodejsUtils");function m(l){return new c.Promise((function(i,s){var t=l.decompressed.getContentWorker().pipe(new b);t.on("error",(function(l){s(l)})).on("end",(function(){t.streamInfo.crc32!==l.decompressed.crc32?s(new Error("Corrupted zip : CRC32 mismatch")):i()})).resume()}))}i.exports=function(l,i){var s=this;return i=t.extend(i||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:d.utf8decode}),a.isNode&&a.isStream(l)?c.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")):t.prepareContent("the loaded zip file",l,!0,i.optimizedBinaryString,i.base64).then((function(l){var s=new Z(i);return s.load(l),s})).then((function(l){var s=[c.Promise.resolve(l)],t=l.files;if(i.checkCRC32)for(var d=0;d<t.length;d++)s.push(m(t[d]));return c.Promise.all(s)})).then((function(l){for(var c=l.shift(),d=c.files,Z=0;Z<d.length;Z++){var b=d[Z],a=b.fileNameStr,m=t.resolve(b.fileNameStr);s.file(m,b.decompressed,{binary:!0,optimizedBinaryString:!0,date:b.date,dir:b.dir,comment:b.fileCommentStr.length?b.fileCommentStr:null,unixPermissions:b.unixPermissions,dosPermissions:b.dosPermissions,createFolders:i.createFolders}),b.dir||(s.file(m).unsafeOriginalName=a)}return c.zipComment.length&&(s.comment=c.zipComment),s}))}},{"./external":6,"./nodejsUtils":14,"./stream/Crc32Probe":25,"./utf8":31,"./utils":32,"./zipEntries":33}],12:[function(l,i,s){"use strict";var t=l("../utils"),c=l("../stream/GenericWorker");function d(l,i){c.call(this,"Nodejs stream input adapter for "+l),this._upstreamEnded=!1,this._bindStream(i)}t.inherits(d,c),d.prototype._bindStream=function(l){var i=this;(this._stream=l).pause(),l.on("data",(function(l){i.push({data:l,meta:{percent:0}})})).on("error",(function(l){i.isPaused?this.generatedError=l:i.error(l)})).on("end",(function(){i.isPaused?i._upstreamEnded=!0:i.end()}))},d.prototype.pause=function(){return!!c.prototype.pause.call(this)&&(this._stream.pause(),!0)},d.prototype.resume=function(){return!!c.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)},i.exports=d},{"../stream/GenericWorker":28,"../utils":32}],13:[function(l,i,s){"use strict";var t=l("readable-stream").Readable;function c(l,i,s){t.call(this,i),this._helper=l;var c=this;l.on("data",(function(l,i){c.push(l)||c._helper.pause(),s&&s(i)})).on("error",(function(l){c.emit("error",l)})).on("end",(function(){c.push(null)}))}l("../utils").inherits(c,t),c.prototype._read=function(){this._helper.resume()},i.exports=c},{"../utils":32,"readable-stream":16}],14:[function(l,i,s){"use strict";i.exports={isNode:"undefined"!=typeof Buffer,newBufferFrom:function(l,i){if(Buffer.from&&Buffer.from!==Uint8Array.from)return Buffer.from(l,i);if("number"==typeof l)throw new Error('The "data" argument must not be a number');return new Buffer(l,i)},allocBuffer:function(l){if(Buffer.alloc)return Buffer.alloc(l);var i=new Buffer(l);return i.fill(0),i},isBuffer:function(l){return Buffer.isBuffer(l)},isStream:function(l){return l&&"function"==typeof l.on&&"function"==typeof l.pause&&"function"==typeof l.resume}}},{}],15:[function(l,i,s){"use strict";function t(l,i,s){var t,c=d.getTypeOf(i),b=d.extend(s||{},a);b.date=b.date||new Date,null!==b.compression&&(b.compression=b.compression.toUpperCase()),"string"==typeof b.unixPermissions&&(b.unixPermissions=parseInt(b.unixPermissions,8)),b.unixPermissions&&16384&b.unixPermissions&&(b.dir=!0),b.dosPermissions&&16&b.dosPermissions&&(b.dir=!0),b.dir&&(l=u(l)),b.createFolders&&(t=G(l))&&N.call(this,t,!0);var W="string"===c&&!1===b.binary&&!1===b.base64;s&&void 0!==s.binary||(b.binary=!W),(i instanceof m&&0===i.uncompressedSize||b.dir||!i||0===i.length)&&(b.base64=!1,b.binary=!0,i="",b.compression="STORE",c="string");var M=null;M=i instanceof m||i instanceof Z?i:n.isNode&&n.isStream(i)?new h(l,i):d.prepareContent(l,i,b.binary,b.optimizedBinaryString,b.base64);var I=new e(l,M,b);this.files[l]=I}var c=l("./utf8"),d=l("./utils"),Z=l("./stream/GenericWorker"),b=l("./stream/StreamHelper"),a=l("./defaults"),m=l("./compressedObject"),e=l("./zipObject"),W=l("./generate"),n=l("./nodejsUtils"),h=l("./nodejs/NodejsStreamInputAdapter"),G=function(l){"/"===l.slice(-1)&&(l=l.substring(0,l.length-1));var i=l.lastIndexOf("/");return 0<i?l.substring(0,i):""},u=function(l){return"/"!==l.slice(-1)&&(l+="/"),l},N=function(l,i){return i=void 0!==i?i:a.createFolders,l=u(l),this.files[l]||t.call(this,l,null,{dir:!0,createFolders:i}),this.files[l]};function M(l){return"[object RegExp]"===Object.prototype.toString.call(l)}var I={load:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},forEach:function(l){var i,s,t;for(i in this.files)t=this.files[i],(s=i.slice(this.root.length,i.length))&&i.slice(0,this.root.length)===this.root&&l(s,t)},filter:function(l){var i=[];return this.forEach((function(s,t){l(s,t)&&i.push(t)})),i},file:function(l,i,s){if(1!==arguments.length)return l=this.root+l,t.call(this,l,i,s),this;if(M(l)){var c=l;return this.filter((function(l,i){return!i.dir&&c.test(l)}))}var d=this.files[this.root+l];return d&&!d.dir?d:null},folder:function(l){if(!l)return this;if(M(l))return this.filter((function(i,s){return s.dir&&l.test(i)}));var i=this.root+l,s=N.call(this,i),t=this.clone();return t.root=s.name,t},remove:function(l){l=this.root+l;var i=this.files[l];if(i||("/"!==l.slice(-1)&&(l+="/"),i=this.files[l]),i&&!i.dir)delete this.files[l];else for(var s=this.filter((function(i,s){return s.name.slice(0,l.length)===l})),t=0;t<s.length;t++)delete this.files[s[t].name];return this},generate:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},generateInternalStream:function(l){var i,s={};try{if((s=d.extend(l||{},{streamFiles:!1,compression:"STORE",compressionOptions:null,type:"",platform:"DOS",comment:null,mimeType:"application/zip",encodeFileName:c.utf8encode})).type=s.type.toLowerCase(),s.compression=s.compression.toUpperCase(),"binarystring"===s.type&&(s.type="string"),!s.type)throw new Error("No output type specified.");d.checkSupport(s.type),"darwin"!==s.platform&&"freebsd"!==s.platform&&"linux"!==s.platform&&"sunos"!==s.platform||(s.platform="UNIX"),"win32"===s.platform&&(s.platform="DOS");var t=s.comment||this.comment||"";i=W.generateWorker(this,s,t)}catch(l){(i=new Z("error")).error(l)}return new b(i,s.type||"string",s.mimeType)},generateAsync:function(l,i){return this.generateInternalStream(l).accumulate(i)},generateNodeStream:function(l,i){return(l=l||{}).type||(l.type="nodebuffer"),this.generateInternalStream(l).toNodejsStream(i)}};i.exports=I},{"./compressedObject":2,"./defaults":5,"./generate":9,"./nodejs/NodejsStreamInputAdapter":12,"./nodejsUtils":14,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31,"./utils":32,"./zipObject":35}],16:[function(l,i,s){"use strict";i.exports=l("stream")},{stream:void 0}],17:[function(l,i,s){"use strict";var t=l("./DataReader");function c(l){t.call(this,l);for(var i=0;i<this.data.length;i++)l[i]=255&l[i]}l("../utils").inherits(c,t),c.prototype.byteAt=function(l){return this.data[this.zero+l]},c.prototype.lastIndexOfSignature=function(l){for(var i=l.charCodeAt(0),s=l.charCodeAt(1),t=l.charCodeAt(2),c=l.charCodeAt(3),d=this.length-4;0<=d;--d)if(this.data[d]===i&&this.data[d+1]===s&&this.data[d+2]===t&&this.data[d+3]===c)return d-this.zero;return-1},c.prototype.readAndCheckSignature=function(l){var i=l.charCodeAt(0),s=l.charCodeAt(1),t=l.charCodeAt(2),c=l.charCodeAt(3),d=this.readData(4);return i===d[0]&&s===d[1]&&t===d[2]&&c===d[3]},c.prototype.readData=function(l){if(this.checkOffset(l),0===l)return[];var i=this.data.slice(this.zero+this.index,this.zero+this.index+l);return this.index+=l,i},i.exports=c},{"../utils":32,"./DataReader":18}],18:[function(l,i,s){"use strict";var t=l("../utils");function c(l){this.data=l,this.length=l.length,this.index=0,this.zero=0}c.prototype={checkOffset:function(l){this.checkIndex(this.index+l)},checkIndex:function(l){if(this.length<this.zero+l||l<0)throw new Error("End of data reached (data length = "+this.length+", asked index = "+l+"). Corrupted zip ?")},setIndex:function(l){this.checkIndex(l),this.index=l},skip:function(l){this.setIndex(this.index+l)},byteAt:function(){},readInt:function(l){var i,s=0;for(this.checkOffset(l),i=this.index+l-1;i>=this.index;i--)s=(s<<8)+this.byteAt(i);return this.index+=l,s},readString:function(l){return t.transformTo("string",this.readData(l))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var l=this.readInt(4);return new Date(Date.UTC(1980+(l>>25&127),(l>>21&15)-1,l>>16&31,l>>11&31,l>>5&63,(31&l)<<1))}},i.exports=c},{"../utils":32}],19:[function(l,i,s){"use strict";var t=l("./Uint8ArrayReader");function c(l){t.call(this,l)}l("../utils").inherits(c,t),c.prototype.readData=function(l){this.checkOffset(l);var i=this.data.slice(this.zero+this.index,this.zero+this.index+l);return this.index+=l,i},i.exports=c},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(l,i,s){"use strict";var t=l("./DataReader");function c(l){t.call(this,l)}l("../utils").inherits(c,t),c.prototype.byteAt=function(l){return this.data.charCodeAt(this.zero+l)},c.prototype.lastIndexOfSignature=function(l){return this.data.lastIndexOf(l)-this.zero},c.prototype.readAndCheckSignature=function(l){return l===this.readData(4)},c.prototype.readData=function(l){this.checkOffset(l);var i=this.data.slice(this.zero+this.index,this.zero+this.index+l);return this.index+=l,i},i.exports=c},{"../utils":32,"./DataReader":18}],21:[function(l,i,s){"use strict";var t=l("./ArrayReader");function c(l){t.call(this,l)}l("../utils").inherits(c,t),c.prototype.readData=function(l){if(this.checkOffset(l),0===l)return new Uint8Array(0);var i=this.data.subarray(this.zero+this.index,this.zero+this.index+l);return this.index+=l,i},i.exports=c},{"../utils":32,"./ArrayReader":17}],22:[function(l,i,s){"use strict";var t=l("../utils"),c=l("../support"),d=l("./ArrayReader"),Z=l("./StringReader"),b=l("./NodeBufferReader"),a=l("./Uint8ArrayReader");i.exports=function(l){var i=t.getTypeOf(l);return t.checkSupport(i),"string"!==i||c.uint8array?"nodebuffer"===i?new b(l):c.uint8array?new a(t.transformTo("uint8array",l)):new d(t.transformTo("array",l)):new Z(l)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(l,i,s){"use strict";s.LOCAL_FILE_HEADER="PK",s.CENTRAL_FILE_HEADER="PK",s.CENTRAL_DIRECTORY_END="PK",s.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK",s.ZIP64_CENTRAL_DIRECTORY_END="PK",s.DATA_DESCRIPTOR="PK\b"},{}],24:[function(l,i,s){"use strict";var t=l("./GenericWorker"),c=l("../utils");function d(l){t.call(this,"ConvertWorker to "+l),this.destType=l}c.inherits(d,t),d.prototype.processChunk=function(l){this.push({data:c.transformTo(this.destType,l.data),meta:l.meta})},i.exports=d},{"../utils":32,"./GenericWorker":28}],25:[function(l,i,s){"use strict";var t=l("./GenericWorker"),c=l("../crc32");function d(){t.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}l("../utils").inherits(d,t),d.prototype.processChunk=function(l){this.streamInfo.crc32=c(l.data,this.streamInfo.crc32||0),this.push(l)},i.exports=d},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(l,i,s){"use strict";var t=l("../utils"),c=l("./GenericWorker");function d(l){c.call(this,"DataLengthProbe for "+l),this.propName=l,this.withStreamInfo(l,0)}t.inherits(d,c),d.prototype.processChunk=function(l){if(l){var i=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=i+l.data.length}c.prototype.processChunk.call(this,l)},i.exports=d},{"../utils":32,"./GenericWorker":28}],27:[function(l,i,s){"use strict";var t=l("../utils"),c=l("./GenericWorker");function d(l){c.call(this,"DataWorker");var i=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,l.then((function(l){i.dataIsReady=!0,i.data=l,i.max=l&&l.length||0,i.type=t.getTypeOf(l),i.isPaused||i._tickAndRepeat()}),(function(l){i.error(l)}))}t.inherits(d,c),d.prototype.cleanUp=function(){c.prototype.cleanUp.call(this),this.data=null},d.prototype.resume=function(){return!!c.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,t.delay(this._tickAndRepeat,[],this)),!0)},d.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(t.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},d.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var l=null,i=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":l=this.data.substring(this.index,i);break;case"uint8array":l=this.data.subarray(this.index,i);break;case"array":case"nodebuffer":l=this.data.slice(this.index,i)}return this.index=i,this.push({data:l,meta:{percent:this.max?this.index/this.max*100:0}})},i.exports=d},{"../utils":32,"./GenericWorker":28}],28:[function(l,i,s){"use strict";function t(l){this.name=l||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}t.prototype={push:function(l){this.emit("data",l)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(l){this.emit("error",l)}return!0},error:function(l){return!this.isFinished&&(this.isPaused?this.generatedError=l:(this.isFinished=!0,this.emit("error",l),this.previous&&this.previous.error(l),this.cleanUp()),!0)},on:function(l,i){return this._listeners[l].push(i),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(l,i){if(this._listeners[l])for(var s=0;s<this._listeners[l].length;s++)this._listeners[l][s].call(this,i)},pipe:function(l){return l.registerPrevious(this)},registerPrevious:function(l){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.streamInfo=l.streamInfo,this.mergeStreamInfo(),this.previous=l;var i=this;return l.on("data",(function(l){i.processChunk(l)})),l.on("end",(function(){i.end()})),l.on("error",(function(l){i.error(l)})),this},pause:function(){return!this.isPaused&&!this.isFinished&&(this.isPaused=!0,this.previous&&this.previous.pause(),!0)},resume:function(){if(!this.isPaused||this.isFinished)return!1;var l=this.isPaused=!1;return this.generatedError&&(this.error(this.generatedError),l=!0),this.previous&&this.previous.resume(),!l},flush:function(){},processChunk:function(l){this.push(l)},withStreamInfo:function(l,i){return this.extraStreamInfo[l]=i,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var l in this.extraStreamInfo)Object.prototype.hasOwnProperty.call(this.extraStreamInfo,l)&&(this.streamInfo[l]=this.extraStreamInfo[l])},lock:function(){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.isLocked=!0,this.previous&&this.previous.lock()},toString:function(){var l="Worker "+this.name;return this.previous?this.previous+" -> "+l:l}},i.exports=t},{}],29:[function(l,i,s){"use strict";var t=l("../utils"),c=l("./ConvertWorker"),d=l("./GenericWorker"),Z=l("../base64"),b=l("../support"),a=l("../external"),m=null;if(b.nodestream)try{m=l("../nodejs/NodejsStreamOutputAdapter")}catch(l){}function e(l,i){return new a.Promise((function(s,c){var d=[],b=l._internalType,a=l._outputType,m=l._mimeType;l.on("data",(function(l,s){d.push(l),i&&i(s)})).on("error",(function(l){d=[],c(l)})).on("end",(function(){try{var l=function(l,i,s){switch(l){case"blob":return t.newBlob(t.transformTo("arraybuffer",i),s);case"base64":return Z.encode(i);default:return t.transformTo(l,i)}}(a,function(l,i){var s,t=0,c=null,d=0;for(s=0;s<i.length;s++)d+=i[s].length;switch(l){case"string":return i.join("");case"array":return Array.prototype.concat.apply([],i);case"uint8array":for(c=new Uint8Array(d),s=0;s<i.length;s++)c.set(i[s],t),t+=i[s].length;return c;case"nodebuffer":return Buffer.concat(i);default:throw new Error("concat : unsupported type '"+l+"'")}}(b,d),m);s(l)}catch(l){c(l)}d=[]})).resume()}))}function W(l,i,s){var Z=i;switch(i){case"blob":case"arraybuffer":Z="uint8array";break;case"base64":Z="string"}try{this._internalType=Z,this._outputType=i,this._mimeType=s,t.checkSupport(Z),this._worker=l.pipe(new c(Z)),l.lock()}catch(l){this._worker=new d("error"),this._worker.error(l)}}W.prototype={accumulate:function(l){return e(this,l)},on:function(l,i){var s=this;return"data"===l?this._worker.on(l,(function(l){i.call(s,l.data,l.meta)})):this._worker.on(l,(function(){t.delay(i,arguments,s)})),this},resume:function(){return t.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(l){if(t.checkSupport("nodestream"),"nodebuffer"!==this._outputType)throw new Error(this._outputType+" is not supported by this method");return new m(this,{objectMode:"nodebuffer"!==this._outputType},l)}},i.exports=W},{"../base64":1,"../external":6,"../nodejs/NodejsStreamOutputAdapter":13,"../support":30,"../utils":32,"./ConvertWorker":24,"./GenericWorker":28}],30:[function(l,i,s){"use strict";if(s.base64=!0,s.array=!0,s.string=!0,s.arraybuffer="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof Uint8Array,s.nodebuffer="undefined"!=typeof Buffer,s.uint8array="undefined"!=typeof Uint8Array,"undefined"==typeof ArrayBuffer)s.blob=!1;else{var t=new ArrayBuffer(0);try{s.blob=0===new Blob([t],{type:"application/zip"}).size}catch(l){try{var c=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);c.append(t),s.blob=0===c.getBlob("application/zip").size}catch(l){s.blob=!1}}}try{s.nodestream=!!l("readable-stream").Readable}catch(l){s.nodestream=!1}},{"readable-stream":16}],31:[function(l,i,s){"use strict";for(var t=l("./utils"),c=l("./support"),d=l("./nodejsUtils"),Z=l("./stream/GenericWorker"),b=new Array(256),a=0;a<256;a++)b[a]=252<=a?6:248<=a?5:240<=a?4:224<=a?3:192<=a?2:1;function m(){Z.call(this,"utf-8 decode"),this.leftOver=null}function e(){Z.call(this,"utf-8 encode")}b[254]=b[254]=1,s.utf8encode=function(l){return c.nodebuffer?d.newBufferFrom(l,"utf-8"):function(l){var i,s,t,d,Z,b=l.length,a=0;for(d=0;d<b;d++)55296==(64512&(s=l.charCodeAt(d)))&&d+1<b&&56320==(64512&(t=l.charCodeAt(d+1)))&&(s=65536+(s-55296<<10)+(t-56320),d++),a+=s<128?1:s<2048?2:s<65536?3:4;for(i=c.uint8array?new Uint8Array(a):new Array(a),d=Z=0;Z<a;d++)55296==(64512&(s=l.charCodeAt(d)))&&d+1<b&&56320==(64512&(t=l.charCodeAt(d+1)))&&(s=65536+(s-55296<<10)+(t-56320),d++),s<128?i[Z++]=s:(s<2048?i[Z++]=192|s>>>6:(s<65536?i[Z++]=224|s>>>12:(i[Z++]=240|s>>>18,i[Z++]=128|s>>>12&63),i[Z++]=128|s>>>6&63),i[Z++]=128|63&s);return i}(l)},s.utf8decode=function(l){return c.nodebuffer?t.transformTo("nodebuffer",l).toString("utf-8"):function(l){var i,s,c,d,Z=l.length,a=new Array(2*Z);for(i=s=0;i<Z;)if((c=l[i++])<128)a[s++]=c;else if(4<(d=b[c]))a[s++]=65533,i+=d-1;else{for(c&=2===d?31:3===d?15:7;1<d&&i<Z;)c=c<<6|63&l[i++],d--;1<d?a[s++]=65533:c<65536?a[s++]=c:(c-=65536,a[s++]=55296|c>>10&1023,a[s++]=56320|1023&c)}return a.length!==s&&(a.subarray?a=a.subarray(0,s):a.length=s),t.applyFromCharCode(a)}(l=t.transformTo(c.uint8array?"uint8array":"array",l))},t.inherits(m,Z),m.prototype.processChunk=function(l){var i=t.transformTo(c.uint8array?"uint8array":"array",l.data);if(this.leftOver&&this.leftOver.length){if(c.uint8array){var d=i;(i=new Uint8Array(d.length+this.leftOver.length)).set(this.leftOver,0),i.set(d,this.leftOver.length)}else i=this.leftOver.concat(i);this.leftOver=null}var Z=function(l,i){var s;for((i=i||l.length)>l.length&&(i=l.length),s=i-1;0<=s&&128==(192&l[s]);)s--;return s<0||0===s?i:s+b[l[s]]>i?s:i}(i),a=i;Z!==i.length&&(c.uint8array?(a=i.subarray(0,Z),this.leftOver=i.subarray(Z,i.length)):(a=i.slice(0,Z),this.leftOver=i.slice(Z,i.length))),this.push({data:s.utf8decode(a),meta:l.meta})},m.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=m,t.inherits(e,Z),e.prototype.processChunk=function(l){this.push({data:s.utf8encode(l.data),meta:l.meta})},s.Utf8EncodeWorker=e},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(l,i,s){"use strict";var t=l("./support"),c=l("./base64"),d=l("./nodejsUtils"),Z=l("./external");function b(l){return l}function a(l,i){for(var s=0;s<l.length;++s)i[s]=255&l.charCodeAt(s);return i}l("setimmediate"),s.newBlob=function(i,t){s.checkSupport("blob");try{return new Blob([i],{type:t})}catch(l){try{var c=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);return c.append(i),c.getBlob(t)}catch(l){throw new Error("Bug : can't construct the Blob.")}}};var m={stringifyByChunk:function(l,i,s){var t=[],c=0,d=l.length;if(d<=s)return String.fromCharCode.apply(null,l);for(;c<d;)"array"===i||"nodebuffer"===i?t.push(String.fromCharCode.apply(null,l.slice(c,Math.min(c+s,d)))):t.push(String.fromCharCode.apply(null,l.subarray(c,Math.min(c+s,d)))),c+=s;return t.join("")},stringifyByChar:function(l){for(var i="",s=0;s<l.length;s++)i+=String.fromCharCode(l[s]);return i},applyCanBeUsed:{uint8array:function(){try{return t.uint8array&&1===String.fromCharCode.apply(null,new Uint8Array(1)).length}catch(l){return!1}}(),nodebuffer:function(){try{return t.nodebuffer&&1===String.fromCharCode.apply(null,d.allocBuffer(1)).length}catch(l){return!1}}()}};function e(l){var i=65536,t=s.getTypeOf(l),c=!0;if("uint8array"===t?c=m.applyCanBeUsed.uint8array:"nodebuffer"===t&&(c=m.applyCanBeUsed.nodebuffer),c)for(;1<i;)try{return m.stringifyByChunk(l,t,i)}catch(l){i=Math.floor(i/2)}return m.stringifyByChar(l)}function W(l,i){for(var s=0;s<l.length;s++)i[s]=l[s];return i}s.applyFromCharCode=e;var n={};n.string={string:b,array:function(l){return a(l,new Array(l.length))},arraybuffer:function(l){return n.string.uint8array(l).buffer},uint8array:function(l){return a(l,new Uint8Array(l.length))},nodebuffer:function(l){return a(l,d.allocBuffer(l.length))}},n.array={string:e,array:b,arraybuffer:function(l){return new Uint8Array(l).buffer},uint8array:function(l){return new Uint8Array(l)},nodebuffer:function(l){return d.newBufferFrom(l)}},n.arraybuffer={string:function(l){return e(new Uint8Array(l))},array:function(l){return W(new Uint8Array(l),new Array(l.byteLength))},arraybuffer:b,uint8array:function(l){return new Uint8Array(l)},nodebuffer:function(l){return d.newBufferFrom(new Uint8Array(l))}},n.uint8array={string:e,array:function(l){return W(l,new Array(l.length))},arraybuffer:function(l){return l.buffer},uint8array:b,nodebuffer:function(l){return d.newBufferFrom(l)}},n.nodebuffer={string:e,array:function(l){return W(l,new Array(l.length))},arraybuffer:function(l){return n.nodebuffer.uint8array(l).buffer},uint8array:function(l){return W(l,new Uint8Array(l.length))},nodebuffer:b},s.transformTo=function(l,i){if(i=i||"",!l)return i;s.checkSupport(l);var t=s.getTypeOf(i);return n[t][l](i)},s.resolve=function(l){for(var i=l.split("/"),s=[],t=0;t<i.length;t++){var c=i[t];"."===c||""===c&&0!==t&&t!==i.length-1||(".."===c?s.pop():s.push(c))}return s.join("/")},s.getTypeOf=function(l){return"string"==typeof l?"string":"[object Array]"===Object.prototype.toString.call(l)?"array":t.nodebuffer&&d.isBuffer(l)?"nodebuffer":t.uint8array&&l instanceof Uint8Array?"uint8array":t.arraybuffer&&l instanceof ArrayBuffer?"arraybuffer":void 0},s.checkSupport=function(l){if(!t[l.toLowerCase()])throw new Error(l+" is not supported by this platform")},s.MAX_VALUE_16BITS=65535,s.MAX_VALUE_32BITS=-1,s.pretty=function(l){var i,s,t="";for(s=0;s<(l||"").length;s++)t+="\\x"+((i=l.charCodeAt(s))<16?"0":"")+i.toString(16).toUpperCase();return t},s.delay=function(l,i,s){setImmediate((function(){l.apply(s||null,i||[])}))},s.inherits=function(l,i){function s(){}s.prototype=i.prototype,l.prototype=new s},s.extend=function(){var l,i,s={};for(l=0;l<arguments.length;l++)for(i in arguments[l])Object.prototype.hasOwnProperty.call(arguments[l],i)&&void 0===s[i]&&(s[i]=arguments[l][i]);return s},s.prepareContent=function(l,i,d,b,m){return Z.Promise.resolve(i).then((function(l){return t.blob&&(l instanceof Blob||-1!==["[object File]","[object Blob]"].indexOf(Object.prototype.toString.call(l)))&&"undefined"!=typeof FileReader?new Z.Promise((function(i,s){var t=new FileReader;t.onload=function(l){i(l.target.result)},t.onerror=function(l){s(l.target.error)},t.readAsArrayBuffer(l)})):l})).then((function(i){var e=s.getTypeOf(i);return e?("arraybuffer"===e?i=s.transformTo("uint8array",i):"string"===e&&(m?i=c.decode(i):d&&!0!==b&&(i=function(l){return a(l,t.uint8array?new Uint8Array(l.length):new Array(l.length))}(i))),i):Z.Promise.reject(new Error("Can't read the data of '"+l+"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?"))}))}},{"./base64":1,"./external":6,"./nodejsUtils":14,"./support":30,setimmediate:54}],33:[function(l,i,s){"use strict";var t=l("./reader/readerFor"),c=l("./utils"),d=l("./signature"),Z=l("./zipEntry"),b=l("./support");function a(l){this.files=[],this.loadOptions=l}a.prototype={checkSignature:function(l){if(!this.reader.readAndCheckSignature(l)){this.reader.index-=4;var i=this.reader.readString(4);throw new Error("Corrupted zip or bug: unexpected signature ("+c.pretty(i)+", expected "+c.pretty(l)+")")}},isSignature:function(l,i){var s=this.reader.index;this.reader.setIndex(l);var t=this.reader.readString(4)===i;return this.reader.setIndex(s),t},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var l=this.reader.readData(this.zipCommentLength),i=b.uint8array?"uint8array":"array",s=c.transformTo(i,l);this.zipComment=this.loadOptions.decodeFileName(s)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.reader.skip(4),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var l,i,s,t=this.zip64EndOfCentralSize-44;0<t;)l=this.reader.readInt(2),i=this.reader.readInt(4),s=this.reader.readData(i),this.zip64ExtensibleData[l]={id:l,length:i,value:s}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),1<this.disksCount)throw new Error("Multi-volumes zip are not supported")},readLocalFiles:function(){var l,i;for(l=0;l<this.files.length;l++)i=this.files[l],this.reader.setIndex(i.localHeaderOffset),this.checkSignature(d.LOCAL_FILE_HEADER),i.readLocalPart(this.reader),i.handleUTF8(),i.processAttributes()},readCentralDir:function(){var l;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(d.CENTRAL_FILE_HEADER);)(l=new Z({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(l);if(this.centralDirRecords!==this.files.length&&0!==this.centralDirRecords&&0===this.files.length)throw new Error("Corrupted zip or bug: expected "+this.centralDirRecords+" records in central dir, got "+this.files.length)},readEndOfCentral:function(){var l=this.reader.lastIndexOfSignature(d.CENTRAL_DIRECTORY_END);if(l<0)throw this.isSignature(0,d.LOCAL_FILE_HEADER)?new Error("Corrupted zip: can't find end of central directory"):new Error("Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html");this.reader.setIndex(l);var i=l;if(this.checkSignature(d.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===c.MAX_VALUE_16BITS||this.diskWithCentralDirStart===c.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===c.MAX_VALUE_16BITS||this.centralDirRecords===c.MAX_VALUE_16BITS||this.centralDirSize===c.MAX_VALUE_32BITS||this.centralDirOffset===c.MAX_VALUE_32BITS){if(this.zip64=!0,(l=this.reader.lastIndexOfSignature(d.ZIP64_CENTRAL_DIRECTORY_LOCATOR))<0)throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator");if(this.reader.setIndex(l),this.checkSignature(d.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,d.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(d.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error("Corrupted zip: can't find the ZIP64 end of central directory");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(d.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var s=this.centralDirOffset+this.centralDirSize;this.zip64&&(s+=20,s+=12+this.zip64EndOfCentralSize);var t=i-s;if(0<t)this.isSignature(i,d.CENTRAL_FILE_HEADER)||(this.reader.zero=t);else if(t<0)throw new Error("Corrupted zip: missing "+Math.abs(t)+" bytes.")},prepareReader:function(l){this.reader=t(l)},load:function(l){this.prepareReader(l),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},i.exports=a},{"./reader/readerFor":22,"./signature":23,"./support":30,"./utils":32,"./zipEntry":34}],34:[function(l,i,s){"use strict";var t=l("./reader/readerFor"),c=l("./utils"),d=l("./compressedObject"),Z=l("./crc32"),b=l("./utf8"),a=l("./compressions"),m=l("./support");function e(l,i){this.options=l,this.loadOptions=i}e.prototype={isEncrypted:function(){return 1==(1&this.bitFlag)},useUTF8:function(){return 2048==(2048&this.bitFlag)},readLocalPart:function(l){var i,s;if(l.skip(22),this.fileNameLength=l.readInt(2),s=l.readInt(2),this.fileName=l.readData(this.fileNameLength),l.skip(s),-1===this.compressedSize||-1===this.uncompressedSize)throw new Error("Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)");if(null===(i=function(l){for(var i in a)if(Object.prototype.hasOwnProperty.call(a,i)&&a[i].magic===l)return a[i];return null}(this.compressionMethod)))throw new Error("Corrupted zip : compression "+c.pretty(this.compressionMethod)+" unknown (inner file : "+c.transformTo("string",this.fileName)+")");this.decompressed=new d(this.compressedSize,this.uncompressedSize,this.crc32,i,l.readData(this.compressedSize))},readCentralPart:function(l){this.versionMadeBy=l.readInt(2),l.skip(2),this.bitFlag=l.readInt(2),this.compressionMethod=l.readString(2),this.date=l.readDate(),this.crc32=l.readInt(4),this.compressedSize=l.readInt(4),this.uncompressedSize=l.readInt(4);var i=l.readInt(2);if(this.extraFieldsLength=l.readInt(2),this.fileCommentLength=l.readInt(2),this.diskNumberStart=l.readInt(2),this.internalFileAttributes=l.readInt(2),this.externalFileAttributes=l.readInt(4),this.localHeaderOffset=l.readInt(4),this.isEncrypted())throw new Error("Encrypted zip are not supported");l.skip(i),this.readExtraFields(l),this.parseZIP64ExtraField(l),this.fileComment=l.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var l=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),0==l&&(this.dosPermissions=63&this.externalFileAttributes),3==l&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var l=t(this.extraFields[1].value);this.uncompressedSize===c.MAX_VALUE_32BITS&&(this.uncompressedSize=l.readInt(8)),this.compressedSize===c.MAX_VALUE_32BITS&&(this.compressedSize=l.readInt(8)),this.localHeaderOffset===c.MAX_VALUE_32BITS&&(this.localHeaderOffset=l.readInt(8)),this.diskNumberStart===c.MAX_VALUE_32BITS&&(this.diskNumberStart=l.readInt(4))}},readExtraFields:function(l){var i,s,t,c=l.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});l.index+4<c;)i=l.readInt(2),s=l.readInt(2),t=l.readData(s),this.extraFields[i]={id:i,length:s,value:t};l.setIndex(c)},handleUTF8:function(){var l=m.uint8array?"uint8array":"array";if(this.useUTF8())this.fileNameStr=b.utf8decode(this.fileName),this.fileCommentStr=b.utf8decode(this.fileComment);else{var i=this.findExtraFieldUnicodePath();if(null!==i)this.fileNameStr=i;else{var s=c.transformTo(l,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(s)}var t=this.findExtraFieldUnicodeComment();if(null!==t)this.fileCommentStr=t;else{var d=c.transformTo(l,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(d)}}},findExtraFieldUnicodePath:function(){var l=this.extraFields[28789];if(l){var i=t(l.value);return 1!==i.readInt(1)||Z(this.fileName)!==i.readInt(4)?null:b.utf8decode(i.readData(l.length-5))}return null},findExtraFieldUnicodeComment:function(){var l=this.extraFields[25461];if(l){var i=t(l.value);return 1!==i.readInt(1)||Z(this.fileComment)!==i.readInt(4)?null:b.utf8decode(i.readData(l.length-5))}return null}},i.exports=e},{"./compressedObject":2,"./compressions":3,"./crc32":4,"./reader/readerFor":22,"./support":30,"./utf8":31,"./utils":32}],35:[function(l,i,s){"use strict";function t(l,i,s){this.name=l,this.dir=s.dir,this.date=s.date,this.comment=s.comment,this.unixPermissions=s.unixPermissions,this.dosPermissions=s.dosPermissions,this._data=i,this._dataBinary=s.binary,this.options={compression:s.compression,compressionOptions:s.compressionOptions}}var c=l("./stream/StreamHelper"),d=l("./stream/DataWorker"),Z=l("./utf8"),b=l("./compressedObject"),a=l("./stream/GenericWorker");t.prototype={internalStream:function(l){var i=null,s="string";try{if(!l)throw new Error("No output type specified.");var t="string"===(s=l.toLowerCase())||"text"===s;"binarystring"!==s&&"text"!==s||(s="string"),i=this._decompressWorker();var d=!this._dataBinary;d&&!t&&(i=i.pipe(new Z.Utf8EncodeWorker)),!d&&t&&(i=i.pipe(new Z.Utf8DecodeWorker))}catch(l){(i=new a("error")).error(l)}return new c(i,s,"")},async:function(l,i){return this.internalStream(l).accumulate(i)},nodeStream:function(l,i){return this.internalStream(l||"nodebuffer").toNodejsStream(i)},_compressWorker:function(l,i){if(this._data instanceof b&&this._data.compression.magic===l.magic)return this._data.getCompressedWorker();var s=this._decompressWorker();return this._dataBinary||(s=s.pipe(new Z.Utf8EncodeWorker)),b.createWorkerFrom(s,l,i)},_decompressWorker:function(){return this._data instanceof b?this._data.getContentWorker():this._data instanceof a?this._data:new d(this._data)}};for(var m=["asText","asBinary","asNodeBuffer","asUint8Array","asArrayBuffer"],e=function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},W=0;W<m.length;W++)t.prototype[m[W]]=e;i.exports=t},{"./compressedObject":2,"./stream/DataWorker":27,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31}],36:[function(l,i,t){(function(l){"use strict";var s,t,c=l.MutationObserver||l.WebKitMutationObserver;if(c){var d=0,Z=new c(e),b=l.document.createTextNode("");Z.observe(b,{characterData:!0}),s=function(){b.data=d=++d%2}}else if(l.setImmediate||void 0===l.MessageChannel)s="document"in l&&"onreadystatechange"in l.document.createElement("script")?function(){var i=l.document.createElement("script");i.onreadystatechange=function(){e(),i.onreadystatechange=null,i.parentNode.removeChild(i),i=null},l.document.documentElement.appendChild(i)}:function(){setTimeout(e,0)};else{var a=new l.MessageChannel;a.port1.onmessage=e,s=function(){a.port2.postMessage(0)}}var m=[];function e(){var l,i;t=!0;for(var s=m.length;s;){for(i=m,m=[],l=-1;++l<s;)i[l]();s=m.length}t=!1}i.exports=function(l){1!==m.push(l)||t||s()}}).call(this,"undefined"!=typeof s.g?s.g:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],37:[function(l,i,s){"use strict";var t=l("immediate");function c(){}var d={},Z=["REJECTED"],b=["FULFILLED"],a=["PENDING"];function m(l){if("function"!=typeof l)throw new TypeError("resolver must be a function");this.state=a,this.queue=[],this.outcome=void 0,l!==c&&h(this,l)}function e(l,i,s){this.promise=l,"function"==typeof i&&(this.onFulfilled=i,this.callFulfilled=this.otherCallFulfilled),"function"==typeof s&&(this.onRejected=s,this.callRejected=this.otherCallRejected)}function W(l,i,s){t((function(){var t;try{t=i(s)}catch(t){return d.reject(l,t)}t===l?d.reject(l,new TypeError("Cannot resolve promise with itself")):d.resolve(l,t)}))}function n(l){var i=l&&l.then;if(l&&("object"==typeof l||"function"==typeof l)&&"function"==typeof i)return function(){i.apply(l,arguments)}}function h(l,i){var s=!1;function t(i){s||(s=!0,d.reject(l,i))}function c(i){s||(s=!0,d.resolve(l,i))}var Z=G((function(){i(c,t)}));"error"===Z.status&&t(Z.value)}function G(l,i){var s={};try{s.value=l(i),s.status="success"}catch(l){s.status="error",s.value=l}return s}(i.exports=m).prototype.finally=function(l){if("function"!=typeof l)return this;var i=this.constructor;return this.then((function(s){return i.resolve(l()).then((function(){return s}))}),(function(s){return i.resolve(l()).then((function(){throw s}))}))},m.prototype.catch=function(l){return this.then(null,l)},m.prototype.then=function(l,i){if("function"!=typeof l&&this.state===b||"function"!=typeof i&&this.state===Z)return this;var s=new this.constructor(c);return this.state!==a?W(s,this.state===b?l:i,this.outcome):this.queue.push(new e(s,l,i)),s},e.prototype.callFulfilled=function(l){d.resolve(this.promise,l)},e.prototype.otherCallFulfilled=function(l){W(this.promise,this.onFulfilled,l)},e.prototype.callRejected=function(l){d.reject(this.promise,l)},e.prototype.otherCallRejected=function(l){W(this.promise,this.onRejected,l)},d.resolve=function(l,i){var s=G(n,i);if("error"===s.status)return d.reject(l,s.value);var t=s.value;if(t)h(l,t);else{l.state=b,l.outcome=i;for(var c=-1,Z=l.queue.length;++c<Z;)l.queue[c].callFulfilled(i)}return l},d.reject=function(l,i){l.state=Z,l.outcome=i;for(var s=-1,t=l.queue.length;++s<t;)l.queue[s].callRejected(i);return l},m.resolve=function(l){return l instanceof this?l:d.resolve(new this(c),l)},m.reject=function(l){var i=new this(c);return d.reject(i,l)},m.all=function(l){var i=this;if("[object Array]"!==Object.prototype.toString.call(l))return this.reject(new TypeError("must be an array"));var s=l.length,t=!1;if(!s)return this.resolve([]);for(var Z=new Array(s),b=0,a=-1,m=new this(c);++a<s;)e(l[a],a);return m;function e(l,c){i.resolve(l).then((function(l){Z[c]=l,++b!==s||t||(t=!0,d.resolve(m,Z))}),(function(l){t||(t=!0,d.reject(m,l))}))}},m.race=function(l){var i=this;if("[object Array]"!==Object.prototype.toString.call(l))return this.reject(new TypeError("must be an array"));var s=l.length,t=!1;if(!s)return this.resolve([]);for(var Z,b=-1,a=new this(c);++b<s;)Z=l[b],i.resolve(Z).then((function(l){t||(t=!0,d.resolve(a,l))}),(function(l){t||(t=!0,d.reject(a,l))}));return a}},{immediate:36}],38:[function(l,i,s){"use strict";var t={};(0,l("./lib/utils/common").assign)(t,l("./lib/deflate"),l("./lib/inflate"),l("./lib/zlib/constants")),i.exports=t},{"./lib/deflate":39,"./lib/inflate":40,"./lib/utils/common":41,"./lib/zlib/constants":44}],39:[function(l,i,s){"use strict";var t=l("./zlib/deflate"),c=l("./utils/common"),d=l("./utils/strings"),Z=l("./zlib/messages"),b=l("./zlib/zstream"),a=Object.prototype.toString,m=0,e=-1,W=0,n=8;function h(l){if(!(this instanceof h))return new h(l);this.options=c.assign({level:e,method:n,chunkSize:16384,windowBits:15,memLevel:8,strategy:W,to:""},l||{});var i=this.options;i.raw&&0<i.windowBits?i.windowBits=-i.windowBits:i.gzip&&0<i.windowBits&&i.windowBits<16&&(i.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new b,this.strm.avail_out=0;var s=t.deflateInit2(this.strm,i.level,i.method,i.windowBits,i.memLevel,i.strategy);if(s!==m)throw new Error(Z[s]);if(i.header&&t.deflateSetHeader(this.strm,i.header),i.dictionary){var G;if(G="string"==typeof i.dictionary?d.string2buf(i.dictionary):"[object ArrayBuffer]"===a.call(i.dictionary)?new Uint8Array(i.dictionary):i.dictionary,(s=t.deflateSetDictionary(this.strm,G))!==m)throw new Error(Z[s]);this._dict_set=!0}}function G(l,i){var s=new h(i);if(s.push(l,!0),s.err)throw s.msg||Z[s.err];return s.result}h.prototype.push=function(l,i){var s,Z,b=this.strm,e=this.options.chunkSize;if(this.ended)return!1;Z=i===~~i?i:!0===i?4:0,"string"==typeof l?b.input=d.string2buf(l):"[object ArrayBuffer]"===a.call(l)?b.input=new Uint8Array(l):b.input=l,b.next_in=0,b.avail_in=b.input.length;do{if(0===b.avail_out&&(b.output=new c.Buf8(e),b.next_out=0,b.avail_out=e),1!==(s=t.deflate(b,Z))&&s!==m)return this.onEnd(s),!(this.ended=!0);0!==b.avail_out&&(0!==b.avail_in||4!==Z&&2!==Z)||("string"===this.options.to?this.onData(d.buf2binstring(c.shrinkBuf(b.output,b.next_out))):this.onData(c.shrinkBuf(b.output,b.next_out)))}while((0<b.avail_in||0===b.avail_out)&&1!==s);return 4===Z?(s=t.deflateEnd(this.strm),this.onEnd(s),this.ended=!0,s===m):2!==Z||(this.onEnd(m),!(b.avail_out=0))},h.prototype.onData=function(l){this.chunks.push(l)},h.prototype.onEnd=function(l){l===m&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=c.flattenChunks(this.chunks)),this.chunks=[],this.err=l,this.msg=this.strm.msg},s.Deflate=h,s.deflate=G,s.deflateRaw=function(l,i){return(i=i||{}).raw=!0,G(l,i)},s.gzip=function(l,i){return(i=i||{}).gzip=!0,G(l,i)}},{"./utils/common":41,"./utils/strings":42,"./zlib/deflate":46,"./zlib/messages":51,"./zlib/zstream":53}],40:[function(l,i,s){"use strict";var t=l("./zlib/inflate"),c=l("./utils/common"),d=l("./utils/strings"),Z=l("./zlib/constants"),b=l("./zlib/messages"),a=l("./zlib/zstream"),m=l("./zlib/gzheader"),e=Object.prototype.toString;function W(l){if(!(this instanceof W))return new W(l);this.options=c.assign({chunkSize:16384,windowBits:0,to:""},l||{});var i=this.options;i.raw&&0<=i.windowBits&&i.windowBits<16&&(i.windowBits=-i.windowBits,0===i.windowBits&&(i.windowBits=-15)),!(0<=i.windowBits&&i.windowBits<16)||l&&l.windowBits||(i.windowBits+=32),15<i.windowBits&&i.windowBits<48&&0==(15&i.windowBits)&&(i.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new a,this.strm.avail_out=0;var s=t.inflateInit2(this.strm,i.windowBits);if(s!==Z.Z_OK)throw new Error(b[s]);this.header=new m,t.inflateGetHeader(this.strm,this.header)}function n(l,i){var s=new W(i);if(s.push(l,!0),s.err)throw s.msg||b[s.err];return s.result}W.prototype.push=function(l,i){var s,b,a,m,W,n,h=this.strm,G=this.options.chunkSize,u=this.options.dictionary,N=!1;if(this.ended)return!1;b=i===~~i?i:!0===i?Z.Z_FINISH:Z.Z_NO_FLUSH,"string"==typeof l?h.input=d.binstring2buf(l):"[object ArrayBuffer]"===e.call(l)?h.input=new Uint8Array(l):h.input=l,h.next_in=0,h.avail_in=h.input.length;do{if(0===h.avail_out&&(h.output=new c.Buf8(G),h.next_out=0,h.avail_out=G),(s=t.inflate(h,Z.Z_NO_FLUSH))===Z.Z_NEED_DICT&&u&&(n="string"==typeof u?d.string2buf(u):"[object ArrayBuffer]"===e.call(u)?new Uint8Array(u):u,s=t.inflateSetDictionary(this.strm,n)),s===Z.Z_BUF_ERROR&&!0===N&&(s=Z.Z_OK,N=!1),s!==Z.Z_STREAM_END&&s!==Z.Z_OK)return this.onEnd(s),!(this.ended=!0);h.next_out&&(0!==h.avail_out&&s!==Z.Z_STREAM_END&&(0!==h.avail_in||b!==Z.Z_FINISH&&b!==Z.Z_SYNC_FLUSH)||("string"===this.options.to?(a=d.utf8border(h.output,h.next_out),m=h.next_out-a,W=d.buf2string(h.output,a),h.next_out=m,h.avail_out=G-m,m&&c.arraySet(h.output,h.output,a,m,0),this.onData(W)):this.onData(c.shrinkBuf(h.output,h.next_out)))),0===h.avail_in&&0===h.avail_out&&(N=!0)}while((0<h.avail_in||0===h.avail_out)&&s!==Z.Z_STREAM_END);return s===Z.Z_STREAM_END&&(b=Z.Z_FINISH),b===Z.Z_FINISH?(s=t.inflateEnd(this.strm),this.onEnd(s),this.ended=!0,s===Z.Z_OK):b!==Z.Z_SYNC_FLUSH||(this.onEnd(Z.Z_OK),!(h.avail_out=0))},W.prototype.onData=function(l){this.chunks.push(l)},W.prototype.onEnd=function(l){l===Z.Z_OK&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=c.flattenChunks(this.chunks)),this.chunks=[],this.err=l,this.msg=this.strm.msg},s.Inflate=W,s.inflate=n,s.inflateRaw=function(l,i){return(i=i||{}).raw=!0,n(l,i)},s.ungzip=n},{"./utils/common":41,"./utils/strings":42,"./zlib/constants":44,"./zlib/gzheader":47,"./zlib/inflate":49,"./zlib/messages":51,"./zlib/zstream":53}],41:[function(l,i,s){"use strict";var t="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;s.assign=function(l){for(var i=Array.prototype.slice.call(arguments,1);i.length;){var s=i.shift();if(s){if("object"!=typeof s)throw new TypeError(s+"must be non-object");for(var t in s)s.hasOwnProperty(t)&&(l[t]=s[t])}}return l},s.shrinkBuf=function(l,i){return l.length===i?l:l.subarray?l.subarray(0,i):(l.length=i,l)};var c={arraySet:function(l,i,s,t,c){if(i.subarray&&l.subarray)l.set(i.subarray(s,s+t),c);else for(var d=0;d<t;d++)l[c+d]=i[s+d]},flattenChunks:function(l){var i,s,t,c,d,Z;for(i=t=0,s=l.length;i<s;i++)t+=l[i].length;for(Z=new Uint8Array(t),i=c=0,s=l.length;i<s;i++)d=l[i],Z.set(d,c),c+=d.length;return Z}},d={arraySet:function(l,i,s,t,c){for(var d=0;d<t;d++)l[c+d]=i[s+d]},flattenChunks:function(l){return[].concat.apply([],l)}};s.setTyped=function(l){l?(s.Buf8=Uint8Array,s.Buf16=Uint16Array,s.Buf32=Int32Array,s.assign(s,c)):(s.Buf8=Array,s.Buf16=Array,s.Buf32=Array,s.assign(s,d))},s.setTyped(t)},{}],42:[function(l,i,s){"use strict";var t=l("./common"),c=!0,d=!0;try{String.fromCharCode.apply(null,[0])}catch(l){c=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(l){d=!1}for(var Z=new t.Buf8(256),b=0;b<256;b++)Z[b]=252<=b?6:248<=b?5:240<=b?4:224<=b?3:192<=b?2:1;function a(l,i){if(i<65537&&(l.subarray&&d||!l.subarray&&c))return String.fromCharCode.apply(null,t.shrinkBuf(l,i));for(var s="",Z=0;Z<i;Z++)s+=String.fromCharCode(l[Z]);return s}Z[254]=Z[254]=1,s.string2buf=function(l){var i,s,c,d,Z,b=l.length,a=0;for(d=0;d<b;d++)55296==(64512&(s=l.charCodeAt(d)))&&d+1<b&&56320==(64512&(c=l.charCodeAt(d+1)))&&(s=65536+(s-55296<<10)+(c-56320),d++),a+=s<128?1:s<2048?2:s<65536?3:4;for(i=new t.Buf8(a),d=Z=0;Z<a;d++)55296==(64512&(s=l.charCodeAt(d)))&&d+1<b&&56320==(64512&(c=l.charCodeAt(d+1)))&&(s=65536+(s-55296<<10)+(c-56320),d++),s<128?i[Z++]=s:(s<2048?i[Z++]=192|s>>>6:(s<65536?i[Z++]=224|s>>>12:(i[Z++]=240|s>>>18,i[Z++]=128|s>>>12&63),i[Z++]=128|s>>>6&63),i[Z++]=128|63&s);return i},s.buf2binstring=function(l){return a(l,l.length)},s.binstring2buf=function(l){for(var i=new t.Buf8(l.length),s=0,c=i.length;s<c;s++)i[s]=l.charCodeAt(s);return i},s.buf2string=function(l,i){var s,t,c,d,b=i||l.length,m=new Array(2*b);for(s=t=0;s<b;)if((c=l[s++])<128)m[t++]=c;else if(4<(d=Z[c]))m[t++]=65533,s+=d-1;else{for(c&=2===d?31:3===d?15:7;1<d&&s<b;)c=c<<6|63&l[s++],d--;1<d?m[t++]=65533:c<65536?m[t++]=c:(c-=65536,m[t++]=55296|c>>10&1023,m[t++]=56320|1023&c)}return a(m,t)},s.utf8border=function(l,i){var s;for((i=i||l.length)>l.length&&(i=l.length),s=i-1;0<=s&&128==(192&l[s]);)s--;return s<0||0===s?i:s+Z[l[s]]>i?s:i}},{"./common":41}],43:[function(l,i,s){"use strict";i.exports=function(l,i,s,t){for(var c=65535&l|0,d=l>>>16&65535|0,Z=0;0!==s;){for(s-=Z=2e3<s?2e3:s;d=d+(c=c+i[t++]|0)|0,--Z;);c%=65521,d%=65521}return c|d<<16|0}},{}],44:[function(l,i,s){"use strict";i.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],45:[function(l,i,s){"use strict";var t=function(){for(var l,i=[],s=0;s<256;s++){l=s;for(var t=0;t<8;t++)l=1&l?3988292384^l>>>1:l>>>1;i[s]=l}return i}();i.exports=function(l,i,s,c){var d=t,Z=c+s;l^=-1;for(var b=c;b<Z;b++)l=l>>>8^d[255&(l^i[b])];return-1^l}},{}],46:[function(l,i,s){"use strict";var t,c=l("../utils/common"),d=l("./trees"),Z=l("./adler32"),b=l("./crc32"),a=l("./messages"),m=0,e=4,W=0,n=-2,h=-1,G=4,u=2,N=8,M=9,I=286,Y=30,X=19,L=2*I+1,y=15,o=3,V=258,p=V+o+1,T=42,w=113,z=1,R=2,r=3,C=4;function S(l,i){return l.msg=a[i],i}function x(l){return(l<<1)-(4<l?9:0)}function D(l){for(var i=l.length;0<=--i;)l[i]=0}function J(l){var i=l.state,s=i.pending;s>l.avail_out&&(s=l.avail_out),0!==s&&(c.arraySet(l.output,i.pending_buf,i.pending_out,s,l.next_out),l.next_out+=s,i.pending_out+=s,l.total_out+=s,l.avail_out-=s,i.pending-=s,0===i.pending&&(i.pending_out=0))}function k(l,i){d._tr_flush_block(l,0<=l.block_start?l.block_start:-1,l.strstart-l.block_start,i),l.block_start=l.strstart,J(l.strm)}function j(l,i){l.pending_buf[l.pending++]=i}function F(l,i){l.pending_buf[l.pending++]=i>>>8&255,l.pending_buf[l.pending++]=255&i}function U(l,i){var s,t,c=l.max_chain_length,d=l.strstart,Z=l.prev_length,b=l.nice_match,a=l.strstart>l.w_size-p?l.strstart-(l.w_size-p):0,m=l.window,e=l.w_mask,W=l.prev,n=l.strstart+V,h=m[d+Z-1],G=m[d+Z];l.prev_length>=l.good_match&&(c>>=2),b>l.lookahead&&(b=l.lookahead);do{if(m[(s=i)+Z]===G&&m[s+Z-1]===h&&m[s]===m[d]&&m[++s]===m[d+1]){d+=2,s++;do{}while(m[++d]===m[++s]&&m[++d]===m[++s]&&m[++d]===m[++s]&&m[++d]===m[++s]&&m[++d]===m[++s]&&m[++d]===m[++s]&&m[++d]===m[++s]&&m[++d]===m[++s]&&d<n);if(t=V-(n-d),d=n-V,Z<t){if(l.match_start=i,b<=(Z=t))break;h=m[d+Z-1],G=m[d+Z]}}}while((i=W[i&e])>a&&0!=--c);return Z<=l.lookahead?Z:l.lookahead}function O(l){var i,s,t,d,a,m,e,W,n,h,G=l.w_size;do{if(d=l.window_size-l.lookahead-l.strstart,l.strstart>=G+(G-p)){for(c.arraySet(l.window,l.window,G,G,0),l.match_start-=G,l.strstart-=G,l.block_start-=G,i=s=l.hash_size;t=l.head[--i],l.head[i]=G<=t?t-G:0,--s;);for(i=s=G;t=l.prev[--i],l.prev[i]=G<=t?t-G:0,--s;);d+=G}if(0===l.strm.avail_in)break;if(m=l.strm,e=l.window,W=l.strstart+l.lookahead,n=d,h=void 0,h=m.avail_in,n<h&&(h=n),s=0===h?0:(m.avail_in-=h,c.arraySet(e,m.input,m.next_in,h,W),1===m.state.wrap?m.adler=Z(m.adler,e,h,W):2===m.state.wrap&&(m.adler=b(m.adler,e,h,W)),m.next_in+=h,m.total_in+=h,h),l.lookahead+=s,l.lookahead+l.insert>=o)for(a=l.strstart-l.insert,l.ins_h=l.window[a],l.ins_h=(l.ins_h<<l.hash_shift^l.window[a+1])&l.hash_mask;l.insert&&(l.ins_h=(l.ins_h<<l.hash_shift^l.window[a+o-1])&l.hash_mask,l.prev[a&l.w_mask]=l.head[l.ins_h],l.head[l.ins_h]=a,a++,l.insert--,!(l.lookahead+l.insert<o)););}while(l.lookahead<p&&0!==l.strm.avail_in)}function g(l,i){for(var s,t;;){if(l.lookahead<p){if(O(l),l.lookahead<p&&i===m)return z;if(0===l.lookahead)break}if(s=0,l.lookahead>=o&&(l.ins_h=(l.ins_h<<l.hash_shift^l.window[l.strstart+o-1])&l.hash_mask,s=l.prev[l.strstart&l.w_mask]=l.head[l.ins_h],l.head[l.ins_h]=l.strstart),0!==s&&l.strstart-s<=l.w_size-p&&(l.match_length=U(l,s)),l.match_length>=o)if(t=d._tr_tally(l,l.strstart-l.match_start,l.match_length-o),l.lookahead-=l.match_length,l.match_length<=l.max_lazy_match&&l.lookahead>=o){for(l.match_length--;l.strstart++,l.ins_h=(l.ins_h<<l.hash_shift^l.window[l.strstart+o-1])&l.hash_mask,s=l.prev[l.strstart&l.w_mask]=l.head[l.ins_h],l.head[l.ins_h]=l.strstart,0!=--l.match_length;);l.strstart++}else l.strstart+=l.match_length,l.match_length=0,l.ins_h=l.window[l.strstart],l.ins_h=(l.ins_h<<l.hash_shift^l.window[l.strstart+1])&l.hash_mask;else t=d._tr_tally(l,0,l.window[l.strstart]),l.lookahead--,l.strstart++;if(t&&(k(l,!1),0===l.strm.avail_out))return z}return l.insert=l.strstart<o-1?l.strstart:o-1,i===e?(k(l,!0),0===l.strm.avail_out?r:C):l.last_lit&&(k(l,!1),0===l.strm.avail_out)?z:R}function K(l,i){for(var s,t,c;;){if(l.lookahead<p){if(O(l),l.lookahead<p&&i===m)return z;if(0===l.lookahead)break}if(s=0,l.lookahead>=o&&(l.ins_h=(l.ins_h<<l.hash_shift^l.window[l.strstart+o-1])&l.hash_mask,s=l.prev[l.strstart&l.w_mask]=l.head[l.ins_h],l.head[l.ins_h]=l.strstart),l.prev_length=l.match_length,l.prev_match=l.match_start,l.match_length=o-1,0!==s&&l.prev_length<l.max_lazy_match&&l.strstart-s<=l.w_size-p&&(l.match_length=U(l,s),l.match_length<=5&&(1===l.strategy||l.match_length===o&&4096<l.strstart-l.match_start)&&(l.match_length=o-1)),l.prev_length>=o&&l.match_length<=l.prev_length){for(c=l.strstart+l.lookahead-o,t=d._tr_tally(l,l.strstart-1-l.prev_match,l.prev_length-o),l.lookahead-=l.prev_length-1,l.prev_length-=2;++l.strstart<=c&&(l.ins_h=(l.ins_h<<l.hash_shift^l.window[l.strstart+o-1])&l.hash_mask,s=l.prev[l.strstart&l.w_mask]=l.head[l.ins_h],l.head[l.ins_h]=l.strstart),0!=--l.prev_length;);if(l.match_available=0,l.match_length=o-1,l.strstart++,t&&(k(l,!1),0===l.strm.avail_out))return z}else if(l.match_available){if((t=d._tr_tally(l,0,l.window[l.strstart-1]))&&k(l,!1),l.strstart++,l.lookahead--,0===l.strm.avail_out)return z}else l.match_available=1,l.strstart++,l.lookahead--}return l.match_available&&(t=d._tr_tally(l,0,l.window[l.strstart-1]),l.match_available=0),l.insert=l.strstart<o-1?l.strstart:o-1,i===e?(k(l,!0),0===l.strm.avail_out?r:C):l.last_lit&&(k(l,!1),0===l.strm.avail_out)?z:R}function E(l,i,s,t,c){this.good_length=l,this.max_lazy=i,this.nice_length=s,this.max_chain=t,this.func=c}function Q(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=N,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new c.Buf16(2*L),this.dyn_dtree=new c.Buf16(2*(2*Y+1)),this.bl_tree=new c.Buf16(2*(2*X+1)),D(this.dyn_ltree),D(this.dyn_dtree),D(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new c.Buf16(y+1),this.heap=new c.Buf16(2*I+1),D(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new c.Buf16(2*I+1),D(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function v(l){var i;return l&&l.state?(l.total_in=l.total_out=0,l.data_type=u,(i=l.state).pending=0,i.pending_out=0,i.wrap<0&&(i.wrap=-i.wrap),i.status=i.wrap?T:w,l.adler=2===i.wrap?0:1,i.last_flush=m,d._tr_init(i),W):S(l,n)}function H(l){var i=v(l);return i===W&&function(l){l.window_size=2*l.w_size,D(l.head),l.max_lazy_match=t[l.level].max_lazy,l.good_match=t[l.level].good_length,l.nice_match=t[l.level].nice_length,l.max_chain_length=t[l.level].max_chain,l.strstart=0,l.block_start=0,l.lookahead=0,l.insert=0,l.match_length=l.prev_length=o-1,l.match_available=0,l.ins_h=0}(l.state),i}function P(l,i,s,t,d,Z){if(!l)return n;var b=1;if(i===h&&(i=6),t<0?(b=0,t=-t):15<t&&(b=2,t-=16),d<1||M<d||s!==N||t<8||15<t||i<0||9<i||Z<0||G<Z)return S(l,n);8===t&&(t=9);var a=new Q;return(l.state=a).strm=l,a.wrap=b,a.gzhead=null,a.w_bits=t,a.w_size=1<<a.w_bits,a.w_mask=a.w_size-1,a.hash_bits=d+7,a.hash_size=1<<a.hash_bits,a.hash_mask=a.hash_size-1,a.hash_shift=~~((a.hash_bits+o-1)/o),a.window=new c.Buf8(2*a.w_size),a.head=new c.Buf16(a.hash_size),a.prev=new c.Buf16(a.w_size),a.lit_bufsize=1<<d+6,a.pending_buf_size=4*a.lit_bufsize,a.pending_buf=new c.Buf8(a.pending_buf_size),a.d_buf=1*a.lit_bufsize,a.l_buf=3*a.lit_bufsize,a.level=i,a.strategy=Z,a.method=s,H(l)}t=[new E(0,0,0,0,(function(l,i){var s=65535;for(s>l.pending_buf_size-5&&(s=l.pending_buf_size-5);;){if(l.lookahead<=1){if(O(l),0===l.lookahead&&i===m)return z;if(0===l.lookahead)break}l.strstart+=l.lookahead,l.lookahead=0;var t=l.block_start+s;if((0===l.strstart||l.strstart>=t)&&(l.lookahead=l.strstart-t,l.strstart=t,k(l,!1),0===l.strm.avail_out))return z;if(l.strstart-l.block_start>=l.w_size-p&&(k(l,!1),0===l.strm.avail_out))return z}return l.insert=0,i===e?(k(l,!0),0===l.strm.avail_out?r:C):(l.strstart>l.block_start&&(k(l,!1),l.strm.avail_out),z)})),new E(4,4,8,4,g),new E(4,5,16,8,g),new E(4,6,32,32,g),new E(4,4,16,16,K),new E(8,16,32,32,K),new E(8,16,128,128,K),new E(8,32,128,256,K),new E(32,128,258,1024,K),new E(32,258,258,4096,K)],s.deflateInit=function(l,i){return P(l,i,N,15,8,0)},s.deflateInit2=P,s.deflateReset=H,s.deflateResetKeep=v,s.deflateSetHeader=function(l,i){return l&&l.state?2!==l.state.wrap?n:(l.state.gzhead=i,W):n},s.deflate=function(l,i){var s,c,Z,a;if(!l||!l.state||5<i||i<0)return l?S(l,n):n;if(c=l.state,!l.output||!l.input&&0!==l.avail_in||666===c.status&&i!==e)return S(l,0===l.avail_out?-5:n);if(c.strm=l,s=c.last_flush,c.last_flush=i,c.status===T)if(2===c.wrap)l.adler=0,j(c,31),j(c,139),j(c,8),c.gzhead?(j(c,(c.gzhead.text?1:0)+(c.gzhead.hcrc?2:0)+(c.gzhead.extra?4:0)+(c.gzhead.name?8:0)+(c.gzhead.comment?16:0)),j(c,255&c.gzhead.time),j(c,c.gzhead.time>>8&255),j(c,c.gzhead.time>>16&255),j(c,c.gzhead.time>>24&255),j(c,9===c.level?2:2<=c.strategy||c.level<2?4:0),j(c,255&c.gzhead.os),c.gzhead.extra&&c.gzhead.extra.length&&(j(c,255&c.gzhead.extra.length),j(c,c.gzhead.extra.length>>8&255)),c.gzhead.hcrc&&(l.adler=b(l.adler,c.pending_buf,c.pending,0)),c.gzindex=0,c.status=69):(j(c,0),j(c,0),j(c,0),j(c,0),j(c,0),j(c,9===c.level?2:2<=c.strategy||c.level<2?4:0),j(c,3),c.status=w);else{var h=N+(c.w_bits-8<<4)<<8;h|=(2<=c.strategy||c.level<2?0:c.level<6?1:6===c.level?2:3)<<6,0!==c.strstart&&(h|=32),h+=31-h%31,c.status=w,F(c,h),0!==c.strstart&&(F(c,l.adler>>>16),F(c,65535&l.adler)),l.adler=1}if(69===c.status)if(c.gzhead.extra){for(Z=c.pending;c.gzindex<(65535&c.gzhead.extra.length)&&(c.pending!==c.pending_buf_size||(c.gzhead.hcrc&&c.pending>Z&&(l.adler=b(l.adler,c.pending_buf,c.pending-Z,Z)),J(l),Z=c.pending,c.pending!==c.pending_buf_size));)j(c,255&c.gzhead.extra[c.gzindex]),c.gzindex++;c.gzhead.hcrc&&c.pending>Z&&(l.adler=b(l.adler,c.pending_buf,c.pending-Z,Z)),c.gzindex===c.gzhead.extra.length&&(c.gzindex=0,c.status=73)}else c.status=73;if(73===c.status)if(c.gzhead.name){Z=c.pending;do{if(c.pending===c.pending_buf_size&&(c.gzhead.hcrc&&c.pending>Z&&(l.adler=b(l.adler,c.pending_buf,c.pending-Z,Z)),J(l),Z=c.pending,c.pending===c.pending_buf_size)){a=1;break}a=c.gzindex<c.gzhead.name.length?255&c.gzhead.name.charCodeAt(c.gzindex++):0,j(c,a)}while(0!==a);c.gzhead.hcrc&&c.pending>Z&&(l.adler=b(l.adler,c.pending_buf,c.pending-Z,Z)),0===a&&(c.gzindex=0,c.status=91)}else c.status=91;if(91===c.status)if(c.gzhead.comment){Z=c.pending;do{if(c.pending===c.pending_buf_size&&(c.gzhead.hcrc&&c.pending>Z&&(l.adler=b(l.adler,c.pending_buf,c.pending-Z,Z)),J(l),Z=c.pending,c.pending===c.pending_buf_size)){a=1;break}a=c.gzindex<c.gzhead.comment.length?255&c.gzhead.comment.charCodeAt(c.gzindex++):0,j(c,a)}while(0!==a);c.gzhead.hcrc&&c.pending>Z&&(l.adler=b(l.adler,c.pending_buf,c.pending-Z,Z)),0===a&&(c.status=103)}else c.status=103;if(103===c.status&&(c.gzhead.hcrc?(c.pending+2>c.pending_buf_size&&J(l),c.pending+2<=c.pending_buf_size&&(j(c,255&l.adler),j(c,l.adler>>8&255),l.adler=0,c.status=w)):c.status=w),0!==c.pending){if(J(l),0===l.avail_out)return c.last_flush=-1,W}else if(0===l.avail_in&&x(i)<=x(s)&&i!==e)return S(l,-5);if(666===c.status&&0!==l.avail_in)return S(l,-5);if(0!==l.avail_in||0!==c.lookahead||i!==m&&666!==c.status){var G=2===c.strategy?function(l,i){for(var s;;){if(0===l.lookahead&&(O(l),0===l.lookahead)){if(i===m)return z;break}if(l.match_length=0,s=d._tr_tally(l,0,l.window[l.strstart]),l.lookahead--,l.strstart++,s&&(k(l,!1),0===l.strm.avail_out))return z}return l.insert=0,i===e?(k(l,!0),0===l.strm.avail_out?r:C):l.last_lit&&(k(l,!1),0===l.strm.avail_out)?z:R}(c,i):3===c.strategy?function(l,i){for(var s,t,c,Z,b=l.window;;){if(l.lookahead<=V){if(O(l),l.lookahead<=V&&i===m)return z;if(0===l.lookahead)break}if(l.match_length=0,l.lookahead>=o&&0<l.strstart&&(t=b[c=l.strstart-1])===b[++c]&&t===b[++c]&&t===b[++c]){Z=l.strstart+V;do{}while(t===b[++c]&&t===b[++c]&&t===b[++c]&&t===b[++c]&&t===b[++c]&&t===b[++c]&&t===b[++c]&&t===b[++c]&&c<Z);l.match_length=V-(Z-c),l.match_length>l.lookahead&&(l.match_length=l.lookahead)}if(l.match_length>=o?(s=d._tr_tally(l,1,l.match_length-o),l.lookahead-=l.match_length,l.strstart+=l.match_length,l.match_length=0):(s=d._tr_tally(l,0,l.window[l.strstart]),l.lookahead--,l.strstart++),s&&(k(l,!1),0===l.strm.avail_out))return z}return l.insert=0,i===e?(k(l,!0),0===l.strm.avail_out?r:C):l.last_lit&&(k(l,!1),0===l.strm.avail_out)?z:R}(c,i):t[c.level].func(c,i);if(G!==r&&G!==C||(c.status=666),G===z||G===r)return 0===l.avail_out&&(c.last_flush=-1),W;if(G===R&&(1===i?d._tr_align(c):5!==i&&(d._tr_stored_block(c,0,0,!1),3===i&&(D(c.head),0===c.lookahead&&(c.strstart=0,c.block_start=0,c.insert=0))),J(l),0===l.avail_out))return c.last_flush=-1,W}return i!==e?W:c.wrap<=0?1:(2===c.wrap?(j(c,255&l.adler),j(c,l.adler>>8&255),j(c,l.adler>>16&255),j(c,l.adler>>24&255),j(c,255&l.total_in),j(c,l.total_in>>8&255),j(c,l.total_in>>16&255),j(c,l.total_in>>24&255)):(F(c,l.adler>>>16),F(c,65535&l.adler)),J(l),0<c.wrap&&(c.wrap=-c.wrap),0!==c.pending?W:1)},s.deflateEnd=function(l){var i;return l&&l.state?(i=l.state.status)!==T&&69!==i&&73!==i&&91!==i&&103!==i&&i!==w&&666!==i?S(l,n):(l.state=null,i===w?S(l,-3):W):n},s.deflateSetDictionary=function(l,i){var s,t,d,b,a,m,e,h,G=i.length;if(!l||!l.state)return n;if(2===(b=(s=l.state).wrap)||1===b&&s.status!==T||s.lookahead)return n;for(1===b&&(l.adler=Z(l.adler,i,G,0)),s.wrap=0,G>=s.w_size&&(0===b&&(D(s.head),s.strstart=0,s.block_start=0,s.insert=0),h=new c.Buf8(s.w_size),c.arraySet(h,i,G-s.w_size,s.w_size,0),i=h,G=s.w_size),a=l.avail_in,m=l.next_in,e=l.input,l.avail_in=G,l.next_in=0,l.input=i,O(s);s.lookahead>=o;){for(t=s.strstart,d=s.lookahead-(o-1);s.ins_h=(s.ins_h<<s.hash_shift^s.window[t+o-1])&s.hash_mask,s.prev[t&s.w_mask]=s.head[s.ins_h],s.head[s.ins_h]=t,t++,--d;);s.strstart=t,s.lookahead=o-1,O(s)}return s.strstart+=s.lookahead,s.block_start=s.strstart,s.insert=s.lookahead,s.lookahead=0,s.match_length=s.prev_length=o-1,s.match_available=0,l.next_in=m,l.input=e,l.avail_in=a,s.wrap=b,W},s.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./messages":51,"./trees":52}],47:[function(l,i,s){"use strict";i.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}},{}],48:[function(l,i,s){"use strict";i.exports=function(l,i){var s,t,c,d,Z,b,a,m,e,W,n,h,G,u,N,M,I,Y,X,L,y,o,V,p,T;s=l.state,t=l.next_in,p=l.input,c=t+(l.avail_in-5),d=l.next_out,T=l.output,Z=d-(i-l.avail_out),b=d+(l.avail_out-257),a=s.dmax,m=s.wsize,e=s.whave,W=s.wnext,n=s.window,h=s.hold,G=s.bits,u=s.lencode,N=s.distcode,M=(1<<s.lenbits)-1,I=(1<<s.distbits)-1;l:do{G<15&&(h+=p[t++]<<G,G+=8,h+=p[t++]<<G,G+=8),Y=u[h&M];i:for(;;){if(h>>>=X=Y>>>24,G-=X,0===(X=Y>>>16&255))T[d++]=65535&Y;else{if(!(16&X)){if(0==(64&X)){Y=u[(65535&Y)+(h&(1<<X)-1)];continue i}if(32&X){s.mode=12;break l}l.msg="invalid literal/length code",s.mode=30;break l}L=65535&Y,(X&=15)&&(G<X&&(h+=p[t++]<<G,G+=8),L+=h&(1<<X)-1,h>>>=X,G-=X),G<15&&(h+=p[t++]<<G,G+=8,h+=p[t++]<<G,G+=8),Y=N[h&I];s:for(;;){if(h>>>=X=Y>>>24,G-=X,!(16&(X=Y>>>16&255))){if(0==(64&X)){Y=N[(65535&Y)+(h&(1<<X)-1)];continue s}l.msg="invalid distance code",s.mode=30;break l}if(y=65535&Y,G<(X&=15)&&(h+=p[t++]<<G,(G+=8)<X&&(h+=p[t++]<<G,G+=8)),a<(y+=h&(1<<X)-1)){l.msg="invalid distance too far back",s.mode=30;break l}if(h>>>=X,G-=X,(X=d-Z)<y){if(e<(X=y-X)&&s.sane){l.msg="invalid distance too far back",s.mode=30;break l}if(V=n,(o=0)===W){if(o+=m-X,X<L){for(L-=X;T[d++]=n[o++],--X;);o=d-y,V=T}}else if(W<X){if(o+=m+W-X,(X-=W)<L){for(L-=X;T[d++]=n[o++],--X;);if(o=0,W<L){for(L-=X=W;T[d++]=n[o++],--X;);o=d-y,V=T}}}else if(o+=W-X,X<L){for(L-=X;T[d++]=n[o++],--X;);o=d-y,V=T}for(;2<L;)T[d++]=V[o++],T[d++]=V[o++],T[d++]=V[o++],L-=3;L&&(T[d++]=V[o++],1<L&&(T[d++]=V[o++]))}else{for(o=d-y;T[d++]=T[o++],T[d++]=T[o++],T[d++]=T[o++],2<(L-=3););L&&(T[d++]=T[o++],1<L&&(T[d++]=T[o++]))}break}}break}}while(t<c&&d<b);t-=L=G>>3,h&=(1<<(G-=L<<3))-1,l.next_in=t,l.next_out=d,l.avail_in=t<c?c-t+5:5-(t-c),l.avail_out=d<b?b-d+257:257-(d-b),s.hold=h,s.bits=G}},{}],49:[function(l,i,s){"use strict";var t=l("../utils/common"),c=l("./adler32"),d=l("./crc32"),Z=l("./inffast"),b=l("./inftrees"),a=1,m=2,e=0,W=-2,n=1,h=852,G=592;function u(l){return(l>>>24&255)+(l>>>8&65280)+((65280&l)<<8)+((255&l)<<24)}function N(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new t.Buf16(320),this.work=new t.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function M(l){var i;return l&&l.state?(i=l.state,l.total_in=l.total_out=i.total=0,l.msg="",i.wrap&&(l.adler=1&i.wrap),i.mode=n,i.last=0,i.havedict=0,i.dmax=32768,i.head=null,i.hold=0,i.bits=0,i.lencode=i.lendyn=new t.Buf32(h),i.distcode=i.distdyn=new t.Buf32(G),i.sane=1,i.back=-1,e):W}function I(l){var i;return l&&l.state?((i=l.state).wsize=0,i.whave=0,i.wnext=0,M(l)):W}function Y(l,i){var s,t;return l&&l.state?(t=l.state,i<0?(s=0,i=-i):(s=1+(i>>4),i<48&&(i&=15)),i&&(i<8||15<i)?W:(null!==t.window&&t.wbits!==i&&(t.window=null),t.wrap=s,t.wbits=i,I(l))):W}function X(l,i){var s,t;return l?(t=new N,(l.state=t).window=null,(s=Y(l,i))!==e&&(l.state=null),s):W}var L,y,o=!0;function V(l){if(o){var i;for(L=new t.Buf32(512),y=new t.Buf32(32),i=0;i<144;)l.lens[i++]=8;for(;i<256;)l.lens[i++]=9;for(;i<280;)l.lens[i++]=7;for(;i<288;)l.lens[i++]=8;for(b(a,l.lens,0,288,L,0,l.work,{bits:9}),i=0;i<32;)l.lens[i++]=5;b(m,l.lens,0,32,y,0,l.work,{bits:5}),o=!1}l.lencode=L,l.lenbits=9,l.distcode=y,l.distbits=5}function p(l,i,s,c){var d,Z=l.state;return null===Z.window&&(Z.wsize=1<<Z.wbits,Z.wnext=0,Z.whave=0,Z.window=new t.Buf8(Z.wsize)),c>=Z.wsize?(t.arraySet(Z.window,i,s-Z.wsize,Z.wsize,0),Z.wnext=0,Z.whave=Z.wsize):(c<(d=Z.wsize-Z.wnext)&&(d=c),t.arraySet(Z.window,i,s-c,d,Z.wnext),(c-=d)?(t.arraySet(Z.window,i,s-c,c,0),Z.wnext=c,Z.whave=Z.wsize):(Z.wnext+=d,Z.wnext===Z.wsize&&(Z.wnext=0),Z.whave<Z.wsize&&(Z.whave+=d))),0}s.inflateReset=I,s.inflateReset2=Y,s.inflateResetKeep=M,s.inflateInit=function(l){return X(l,15)},s.inflateInit2=X,s.inflate=function(l,i){var s,h,G,N,M,I,Y,X,L,y,o,T,w,z,R,r,C,S,x,D,J,k,j,F,U=0,O=new t.Buf8(4),g=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!l||!l.state||!l.output||!l.input&&0!==l.avail_in)return W;12===(s=l.state).mode&&(s.mode=13),M=l.next_out,G=l.output,Y=l.avail_out,N=l.next_in,h=l.input,I=l.avail_in,X=s.hold,L=s.bits,y=I,o=Y,k=e;l:for(;;)switch(s.mode){case n:if(0===s.wrap){s.mode=13;break}for(;L<16;){if(0===I)break l;I--,X+=h[N++]<<L,L+=8}if(2&s.wrap&&35615===X){O[s.check=0]=255&X,O[1]=X>>>8&255,s.check=d(s.check,O,2,0),L=X=0,s.mode=2;break}if(s.flags=0,s.head&&(s.head.done=!1),!(1&s.wrap)||(((255&X)<<8)+(X>>8))%31){l.msg="incorrect header check",s.mode=30;break}if(8!=(15&X)){l.msg="unknown compression method",s.mode=30;break}if(L-=4,J=8+(15&(X>>>=4)),0===s.wbits)s.wbits=J;else if(J>s.wbits){l.msg="invalid window size",s.mode=30;break}s.dmax=1<<J,l.adler=s.check=1,s.mode=512&X?10:12,L=X=0;break;case 2:for(;L<16;){if(0===I)break l;I--,X+=h[N++]<<L,L+=8}if(s.flags=X,8!=(255&s.flags)){l.msg="unknown compression method",s.mode=30;break}if(57344&s.flags){l.msg="unknown header flags set",s.mode=30;break}s.head&&(s.head.text=X>>8&1),512&s.flags&&(O[0]=255&X,O[1]=X>>>8&255,s.check=d(s.check,O,2,0)),L=X=0,s.mode=3;case 3:for(;L<32;){if(0===I)break l;I--,X+=h[N++]<<L,L+=8}s.head&&(s.head.time=X),512&s.flags&&(O[0]=255&X,O[1]=X>>>8&255,O[2]=X>>>16&255,O[3]=X>>>24&255,s.check=d(s.check,O,4,0)),L=X=0,s.mode=4;case 4:for(;L<16;){if(0===I)break l;I--,X+=h[N++]<<L,L+=8}s.head&&(s.head.xflags=255&X,s.head.os=X>>8),512&s.flags&&(O[0]=255&X,O[1]=X>>>8&255,s.check=d(s.check,O,2,0)),L=X=0,s.mode=5;case 5:if(1024&s.flags){for(;L<16;){if(0===I)break l;I--,X+=h[N++]<<L,L+=8}s.length=X,s.head&&(s.head.extra_len=X),512&s.flags&&(O[0]=255&X,O[1]=X>>>8&255,s.check=d(s.check,O,2,0)),L=X=0}else s.head&&(s.head.extra=null);s.mode=6;case 6:if(1024&s.flags&&(I<(T=s.length)&&(T=I),T&&(s.head&&(J=s.head.extra_len-s.length,s.head.extra||(s.head.extra=new Array(s.head.extra_len)),t.arraySet(s.head.extra,h,N,T,J)),512&s.flags&&(s.check=d(s.check,h,T,N)),I-=T,N+=T,s.length-=T),s.length))break l;s.length=0,s.mode=7;case 7:if(2048&s.flags){if(0===I)break l;for(T=0;J=h[N+T++],s.head&&J&&s.length<65536&&(s.head.name+=String.fromCharCode(J)),J&&T<I;);if(512&s.flags&&(s.check=d(s.check,h,T,N)),I-=T,N+=T,J)break l}else s.head&&(s.head.name=null);s.length=0,s.mode=8;case 8:if(4096&s.flags){if(0===I)break l;for(T=0;J=h[N+T++],s.head&&J&&s.length<65536&&(s.head.comment+=String.fromCharCode(J)),J&&T<I;);if(512&s.flags&&(s.check=d(s.check,h,T,N)),I-=T,N+=T,J)break l}else s.head&&(s.head.comment=null);s.mode=9;case 9:if(512&s.flags){for(;L<16;){if(0===I)break l;I--,X+=h[N++]<<L,L+=8}if(X!==(65535&s.check)){l.msg="header crc mismatch",s.mode=30;break}L=X=0}s.head&&(s.head.hcrc=s.flags>>9&1,s.head.done=!0),l.adler=s.check=0,s.mode=12;break;case 10:for(;L<32;){if(0===I)break l;I--,X+=h[N++]<<L,L+=8}l.adler=s.check=u(X),L=X=0,s.mode=11;case 11:if(0===s.havedict)return l.next_out=M,l.avail_out=Y,l.next_in=N,l.avail_in=I,s.hold=X,s.bits=L,2;l.adler=s.check=1,s.mode=12;case 12:if(5===i||6===i)break l;case 13:if(s.last){X>>>=7&L,L-=7&L,s.mode=27;break}for(;L<3;){if(0===I)break l;I--,X+=h[N++]<<L,L+=8}switch(s.last=1&X,L-=1,3&(X>>>=1)){case 0:s.mode=14;break;case 1:if(V(s),s.mode=20,6!==i)break;X>>>=2,L-=2;break l;case 2:s.mode=17;break;case 3:l.msg="invalid block type",s.mode=30}X>>>=2,L-=2;break;case 14:for(X>>>=7&L,L-=7&L;L<32;){if(0===I)break l;I--,X+=h[N++]<<L,L+=8}if((65535&X)!=(X>>>16^65535)){l.msg="invalid stored block lengths",s.mode=30;break}if(s.length=65535&X,L=X=0,s.mode=15,6===i)break l;case 15:s.mode=16;case 16:if(T=s.length){if(I<T&&(T=I),Y<T&&(T=Y),0===T)break l;t.arraySet(G,h,N,T,M),I-=T,N+=T,Y-=T,M+=T,s.length-=T;break}s.mode=12;break;case 17:for(;L<14;){if(0===I)break l;I--,X+=h[N++]<<L,L+=8}if(s.nlen=257+(31&X),X>>>=5,L-=5,s.ndist=1+(31&X),X>>>=5,L-=5,s.ncode=4+(15&X),X>>>=4,L-=4,286<s.nlen||30<s.ndist){l.msg="too many length or distance symbols",s.mode=30;break}s.have=0,s.mode=18;case 18:for(;s.have<s.ncode;){for(;L<3;){if(0===I)break l;I--,X+=h[N++]<<L,L+=8}s.lens[g[s.have++]]=7&X,X>>>=3,L-=3}for(;s.have<19;)s.lens[g[s.have++]]=0;if(s.lencode=s.lendyn,s.lenbits=7,j={bits:s.lenbits},k=b(0,s.lens,0,19,s.lencode,0,s.work,j),s.lenbits=j.bits,k){l.msg="invalid code lengths set",s.mode=30;break}s.have=0,s.mode=19;case 19:for(;s.have<s.nlen+s.ndist;){for(;r=(U=s.lencode[X&(1<<s.lenbits)-1])>>>16&255,C=65535&U,!((R=U>>>24)<=L);){if(0===I)break l;I--,X+=h[N++]<<L,L+=8}if(C<16)X>>>=R,L-=R,s.lens[s.have++]=C;else{if(16===C){for(F=R+2;L<F;){if(0===I)break l;I--,X+=h[N++]<<L,L+=8}if(X>>>=R,L-=R,0===s.have){l.msg="invalid bit length repeat",s.mode=30;break}J=s.lens[s.have-1],T=3+(3&X),X>>>=2,L-=2}else if(17===C){for(F=R+3;L<F;){if(0===I)break l;I--,X+=h[N++]<<L,L+=8}L-=R,J=0,T=3+(7&(X>>>=R)),X>>>=3,L-=3}else{for(F=R+7;L<F;){if(0===I)break l;I--,X+=h[N++]<<L,L+=8}L-=R,J=0,T=11+(127&(X>>>=R)),X>>>=7,L-=7}if(s.have+T>s.nlen+s.ndist){l.msg="invalid bit length repeat",s.mode=30;break}for(;T--;)s.lens[s.have++]=J}}if(30===s.mode)break;if(0===s.lens[256]){l.msg="invalid code -- missing end-of-block",s.mode=30;break}if(s.lenbits=9,j={bits:s.lenbits},k=b(a,s.lens,0,s.nlen,s.lencode,0,s.work,j),s.lenbits=j.bits,k){l.msg="invalid literal/lengths set",s.mode=30;break}if(s.distbits=6,s.distcode=s.distdyn,j={bits:s.distbits},k=b(m,s.lens,s.nlen,s.ndist,s.distcode,0,s.work,j),s.distbits=j.bits,k){l.msg="invalid distances set",s.mode=30;break}if(s.mode=20,6===i)break l;case 20:s.mode=21;case 21:if(6<=I&&258<=Y){l.next_out=M,l.avail_out=Y,l.next_in=N,l.avail_in=I,s.hold=X,s.bits=L,Z(l,o),M=l.next_out,G=l.output,Y=l.avail_out,N=l.next_in,h=l.input,I=l.avail_in,X=s.hold,L=s.bits,12===s.mode&&(s.back=-1);break}for(s.back=0;r=(U=s.lencode[X&(1<<s.lenbits)-1])>>>16&255,C=65535&U,!((R=U>>>24)<=L);){if(0===I)break l;I--,X+=h[N++]<<L,L+=8}if(r&&0==(240&r)){for(S=R,x=r,D=C;r=(U=s.lencode[D+((X&(1<<S+x)-1)>>S)])>>>16&255,C=65535&U,!(S+(R=U>>>24)<=L);){if(0===I)break l;I--,X+=h[N++]<<L,L+=8}X>>>=S,L-=S,s.back+=S}if(X>>>=R,L-=R,s.back+=R,s.length=C,0===r){s.mode=26;break}if(32&r){s.back=-1,s.mode=12;break}if(64&r){l.msg="invalid literal/length code",s.mode=30;break}s.extra=15&r,s.mode=22;case 22:if(s.extra){for(F=s.extra;L<F;){if(0===I)break l;I--,X+=h[N++]<<L,L+=8}s.length+=X&(1<<s.extra)-1,X>>>=s.extra,L-=s.extra,s.back+=s.extra}s.was=s.length,s.mode=23;case 23:for(;r=(U=s.distcode[X&(1<<s.distbits)-1])>>>16&255,C=65535&U,!((R=U>>>24)<=L);){if(0===I)break l;I--,X+=h[N++]<<L,L+=8}if(0==(240&r)){for(S=R,x=r,D=C;r=(U=s.distcode[D+((X&(1<<S+x)-1)>>S)])>>>16&255,C=65535&U,!(S+(R=U>>>24)<=L);){if(0===I)break l;I--,X+=h[N++]<<L,L+=8}X>>>=S,L-=S,s.back+=S}if(X>>>=R,L-=R,s.back+=R,64&r){l.msg="invalid distance code",s.mode=30;break}s.offset=C,s.extra=15&r,s.mode=24;case 24:if(s.extra){for(F=s.extra;L<F;){if(0===I)break l;I--,X+=h[N++]<<L,L+=8}s.offset+=X&(1<<s.extra)-1,X>>>=s.extra,L-=s.extra,s.back+=s.extra}if(s.offset>s.dmax){l.msg="invalid distance too far back",s.mode=30;break}s.mode=25;case 25:if(0===Y)break l;if(T=o-Y,s.offset>T){if((T=s.offset-T)>s.whave&&s.sane){l.msg="invalid distance too far back",s.mode=30;break}w=T>s.wnext?(T-=s.wnext,s.wsize-T):s.wnext-T,T>s.length&&(T=s.length),z=s.window}else z=G,w=M-s.offset,T=s.length;for(Y<T&&(T=Y),Y-=T,s.length-=T;G[M++]=z[w++],--T;);0===s.length&&(s.mode=21);break;case 26:if(0===Y)break l;G[M++]=s.length,Y--,s.mode=21;break;case 27:if(s.wrap){for(;L<32;){if(0===I)break l;I--,X|=h[N++]<<L,L+=8}if(o-=Y,l.total_out+=o,s.total+=o,o&&(l.adler=s.check=s.flags?d(s.check,G,o,M-o):c(s.check,G,o,M-o)),o=Y,(s.flags?X:u(X))!==s.check){l.msg="incorrect data check",s.mode=30;break}L=X=0}s.mode=28;case 28:if(s.wrap&&s.flags){for(;L<32;){if(0===I)break l;I--,X+=h[N++]<<L,L+=8}if(X!==(4294967295&s.total)){l.msg="incorrect length check",s.mode=30;break}L=X=0}s.mode=29;case 29:k=1;break l;case 30:k=-3;break l;case 31:return-4;case 32:default:return W}return l.next_out=M,l.avail_out=Y,l.next_in=N,l.avail_in=I,s.hold=X,s.bits=L,(s.wsize||o!==l.avail_out&&s.mode<30&&(s.mode<27||4!==i))&&p(l,l.output,l.next_out,o-l.avail_out)?(s.mode=31,-4):(y-=l.avail_in,o-=l.avail_out,l.total_in+=y,l.total_out+=o,s.total+=o,s.wrap&&o&&(l.adler=s.check=s.flags?d(s.check,G,o,l.next_out-o):c(s.check,G,o,l.next_out-o)),l.data_type=s.bits+(s.last?64:0)+(12===s.mode?128:0)+(20===s.mode||15===s.mode?256:0),(0==y&&0===o||4===i)&&k===e&&(k=-5),k)},s.inflateEnd=function(l){if(!l||!l.state)return W;var i=l.state;return i.window&&(i.window=null),l.state=null,e},s.inflateGetHeader=function(l,i){var s;return l&&l.state?0==(2&(s=l.state).wrap)?W:((s.head=i).done=!1,e):W},s.inflateSetDictionary=function(l,i){var s,t=i.length;return l&&l.state?0!==(s=l.state).wrap&&11!==s.mode?W:11===s.mode&&c(1,i,t,0)!==s.check?-3:p(l,i,t,t)?(s.mode=31,-4):(s.havedict=1,e):W},s.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./inffast":48,"./inftrees":50}],50:[function(l,i,s){"use strict";var t=l("../utils/common"),c=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],d=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],Z=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],b=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];i.exports=function(l,i,s,a,m,e,W,n){var h,G,u,N,M,I,Y,X,L,y=n.bits,o=0,V=0,p=0,T=0,w=0,z=0,R=0,r=0,C=0,S=0,x=null,D=0,J=new t.Buf16(16),k=new t.Buf16(16),j=null,F=0;for(o=0;o<=15;o++)J[o]=0;for(V=0;V<a;V++)J[i[s+V]]++;for(w=y,T=15;1<=T&&0===J[T];T--);if(T<w&&(w=T),0===T)return m[e++]=20971520,m[e++]=20971520,n.bits=1,0;for(p=1;p<T&&0===J[p];p++);for(w<p&&(w=p),o=r=1;o<=15;o++)if(r<<=1,(r-=J[o])<0)return-1;if(0<r&&(0===l||1!==T))return-1;for(k[1]=0,o=1;o<15;o++)k[o+1]=k[o]+J[o];for(V=0;V<a;V++)0!==i[s+V]&&(W[k[i[s+V]]++]=V);if(I=0===l?(x=j=W,19):1===l?(x=c,D-=257,j=d,F-=257,256):(x=Z,j=b,-1),o=p,M=e,R=V=S=0,u=-1,N=(C=1<<(z=w))-1,1===l&&852<C||2===l&&592<C)return 1;for(;;){for(Y=o-R,L=W[V]<I?(X=0,W[V]):W[V]>I?(X=j[F+W[V]],x[D+W[V]]):(X=96,0),h=1<<o-R,p=G=1<<z;m[M+(S>>R)+(G-=h)]=Y<<24|X<<16|L|0,0!==G;);for(h=1<<o-1;S&h;)h>>=1;if(0!==h?(S&=h-1,S+=h):S=0,V++,0==--J[o]){if(o===T)break;o=i[s+W[V]]}if(w<o&&(S&N)!==u){for(0===R&&(R=w),M+=p,r=1<<(z=o-R);z+R<T&&!((r-=J[z+R])<=0);)z++,r<<=1;if(C+=1<<z,1===l&&852<C||2===l&&592<C)return 1;m[u=S&N]=w<<24|z<<16|M-e|0}}return 0!==S&&(m[M+S]=o-R<<24|64<<16|0),n.bits=w,0}},{"../utils/common":41}],51:[function(l,i,s){"use strict";i.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],52:[function(l,i,s){"use strict";var t=l("../utils/common"),c=0,d=1;function Z(l){for(var i=l.length;0<=--i;)l[i]=0}var b=0,a=29,m=256,e=m+1+a,W=30,n=19,h=2*e+1,G=15,u=16,N=7,M=256,I=16,Y=17,X=18,L=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],y=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],o=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],V=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],p=new Array(2*(e+2));Z(p);var T=new Array(2*W);Z(T);var w=new Array(512);Z(w);var z=new Array(256);Z(z);var R=new Array(a);Z(R);var r,C,S,x=new Array(W);function D(l,i,s,t,c){this.static_tree=l,this.extra_bits=i,this.extra_base=s,this.elems=t,this.max_length=c,this.has_stree=l&&l.length}function J(l,i){this.dyn_tree=l,this.max_code=0,this.stat_desc=i}function k(l){return l<256?w[l]:w[256+(l>>>7)]}function j(l,i){l.pending_buf[l.pending++]=255&i,l.pending_buf[l.pending++]=i>>>8&255}function F(l,i,s){l.bi_valid>u-s?(l.bi_buf|=i<<l.bi_valid&65535,j(l,l.bi_buf),l.bi_buf=i>>u-l.bi_valid,l.bi_valid+=s-u):(l.bi_buf|=i<<l.bi_valid&65535,l.bi_valid+=s)}function U(l,i,s){F(l,s[2*i],s[2*i+1])}function O(l,i){for(var s=0;s|=1&l,l>>>=1,s<<=1,0<--i;);return s>>>1}function g(l,i,s){var t,c,d=new Array(G+1),Z=0;for(t=1;t<=G;t++)d[t]=Z=Z+s[t-1]<<1;for(c=0;c<=i;c++){var b=l[2*c+1];0!==b&&(l[2*c]=O(d[b]++,b))}}function K(l){var i;for(i=0;i<e;i++)l.dyn_ltree[2*i]=0;for(i=0;i<W;i++)l.dyn_dtree[2*i]=0;for(i=0;i<n;i++)l.bl_tree[2*i]=0;l.dyn_ltree[2*M]=1,l.opt_len=l.static_len=0,l.last_lit=l.matches=0}function E(l){8<l.bi_valid?j(l,l.bi_buf):0<l.bi_valid&&(l.pending_buf[l.pending++]=l.bi_buf),l.bi_buf=0,l.bi_valid=0}function Q(l,i,s,t){var c=2*i,d=2*s;return l[c]<l[d]||l[c]===l[d]&&t[i]<=t[s]}function v(l,i,s){for(var t=l.heap[s],c=s<<1;c<=l.heap_len&&(c<l.heap_len&&Q(i,l.heap[c+1],l.heap[c],l.depth)&&c++,!Q(i,t,l.heap[c],l.depth));)l.heap[s]=l.heap[c],s=c,c<<=1;l.heap[s]=t}function H(l,i,s){var t,c,d,Z,b=0;if(0!==l.last_lit)for(;t=l.pending_buf[l.d_buf+2*b]<<8|l.pending_buf[l.d_buf+2*b+1],c=l.pending_buf[l.l_buf+b],b++,0===t?U(l,c,i):(U(l,(d=z[c])+m+1,i),0!==(Z=L[d])&&F(l,c-=R[d],Z),U(l,d=k(--t),s),0!==(Z=y[d])&&F(l,t-=x[d],Z)),b<l.last_lit;);U(l,M,i)}function P(l,i){var s,t,c,d=i.dyn_tree,Z=i.stat_desc.static_tree,b=i.stat_desc.has_stree,a=i.stat_desc.elems,m=-1;for(l.heap_len=0,l.heap_max=h,s=0;s<a;s++)0!==d[2*s]?(l.heap[++l.heap_len]=m=s,l.depth[s]=0):d[2*s+1]=0;for(;l.heap_len<2;)d[2*(c=l.heap[++l.heap_len]=m<2?++m:0)]=1,l.depth[c]=0,l.opt_len--,b&&(l.static_len-=Z[2*c+1]);for(i.max_code=m,s=l.heap_len>>1;1<=s;s--)v(l,d,s);for(c=a;s=l.heap[1],l.heap[1]=l.heap[l.heap_len--],v(l,d,1),t=l.heap[1],l.heap[--l.heap_max]=s,l.heap[--l.heap_max]=t,d[2*c]=d[2*s]+d[2*t],l.depth[c]=(l.depth[s]>=l.depth[t]?l.depth[s]:l.depth[t])+1,d[2*s+1]=d[2*t+1]=c,l.heap[1]=c++,v(l,d,1),2<=l.heap_len;);l.heap[--l.heap_max]=l.heap[1],function(l,i){var s,t,c,d,Z,b,a=i.dyn_tree,m=i.max_code,e=i.stat_desc.static_tree,W=i.stat_desc.has_stree,n=i.stat_desc.extra_bits,u=i.stat_desc.extra_base,N=i.stat_desc.max_length,M=0;for(d=0;d<=G;d++)l.bl_count[d]=0;for(a[2*l.heap[l.heap_max]+1]=0,s=l.heap_max+1;s<h;s++)N<(d=a[2*a[2*(t=l.heap[s])+1]+1]+1)&&(d=N,M++),a[2*t+1]=d,m<t||(l.bl_count[d]++,Z=0,u<=t&&(Z=n[t-u]),b=a[2*t],l.opt_len+=b*(d+Z),W&&(l.static_len+=b*(e[2*t+1]+Z)));if(0!==M){do{for(d=N-1;0===l.bl_count[d];)d--;l.bl_count[d]--,l.bl_count[d+1]+=2,l.bl_count[N]--,M-=2}while(0<M);for(d=N;0!==d;d--)for(t=l.bl_count[d];0!==t;)m<(c=l.heap[--s])||(a[2*c+1]!==d&&(l.opt_len+=(d-a[2*c+1])*a[2*c],a[2*c+1]=d),t--)}}(l,i),g(d,m,l.bl_count)}function B(l,i,s){var t,c,d=-1,Z=i[1],b=0,a=7,m=4;for(0===Z&&(a=138,m=3),i[2*(s+1)+1]=65535,t=0;t<=s;t++)c=Z,Z=i[2*(t+1)+1],++b<a&&c===Z||(b<m?l.bl_tree[2*c]+=b:0!==c?(c!==d&&l.bl_tree[2*c]++,l.bl_tree[2*I]++):b<=10?l.bl_tree[2*Y]++:l.bl_tree[2*X]++,d=c,m=(b=0)===Z?(a=138,3):c===Z?(a=6,3):(a=7,4))}function f(l,i,s){var t,c,d=-1,Z=i[1],b=0,a=7,m=4;for(0===Z&&(a=138,m=3),t=0;t<=s;t++)if(c=Z,Z=i[2*(t+1)+1],!(++b<a&&c===Z)){if(b<m)for(;U(l,c,l.bl_tree),0!=--b;);else 0!==c?(c!==d&&(U(l,c,l.bl_tree),b--),U(l,I,l.bl_tree),F(l,b-3,2)):b<=10?(U(l,Y,l.bl_tree),F(l,b-3,3)):(U(l,X,l.bl_tree),F(l,b-11,7));d=c,m=(b=0)===Z?(a=138,3):c===Z?(a=6,3):(a=7,4)}}Z(x);var A=!1;function _(l,i,s,c){F(l,(b<<1)+(c?1:0),3),function(l,i,s,c){E(l),c&&(j(l,s),j(l,~s)),t.arraySet(l.pending_buf,l.window,i,s,l.pending),l.pending+=s}(l,i,s,!0)}s._tr_init=function(l){A||(function(){var l,i,s,t,c,d=new Array(G+1);for(t=s=0;t<a-1;t++)for(R[t]=s,l=0;l<1<<L[t];l++)z[s++]=t;for(z[s-1]=t,t=c=0;t<16;t++)for(x[t]=c,l=0;l<1<<y[t];l++)w[c++]=t;for(c>>=7;t<W;t++)for(x[t]=c<<7,l=0;l<1<<y[t]-7;l++)w[256+c++]=t;for(i=0;i<=G;i++)d[i]=0;for(l=0;l<=143;)p[2*l+1]=8,l++,d[8]++;for(;l<=255;)p[2*l+1]=9,l++,d[9]++;for(;l<=279;)p[2*l+1]=7,l++,d[7]++;for(;l<=287;)p[2*l+1]=8,l++,d[8]++;for(g(p,e+1,d),l=0;l<W;l++)T[2*l+1]=5,T[2*l]=O(l,5);r=new D(p,L,m+1,e,G),C=new D(T,y,0,W,G),S=new D(new Array(0),o,0,n,N)}(),A=!0),l.l_desc=new J(l.dyn_ltree,r),l.d_desc=new J(l.dyn_dtree,C),l.bl_desc=new J(l.bl_tree,S),l.bi_buf=0,l.bi_valid=0,K(l)},s._tr_stored_block=_,s._tr_flush_block=function(l,i,s,t){var Z,b,a=0;0<l.level?(2===l.strm.data_type&&(l.strm.data_type=function(l){var i,s=4093624447;for(i=0;i<=31;i++,s>>>=1)if(1&s&&0!==l.dyn_ltree[2*i])return c;if(0!==l.dyn_ltree[18]||0!==l.dyn_ltree[20]||0!==l.dyn_ltree[26])return d;for(i=32;i<m;i++)if(0!==l.dyn_ltree[2*i])return d;return c}(l)),P(l,l.l_desc),P(l,l.d_desc),a=function(l){var i;for(B(l,l.dyn_ltree,l.l_desc.max_code),B(l,l.dyn_dtree,l.d_desc.max_code),P(l,l.bl_desc),i=n-1;3<=i&&0===l.bl_tree[2*V[i]+1];i--);return l.opt_len+=3*(i+1)+5+5+4,i}(l),Z=l.opt_len+3+7>>>3,(b=l.static_len+3+7>>>3)<=Z&&(Z=b)):Z=b=s+5,s+4<=Z&&-1!==i?_(l,i,s,t):4===l.strategy||b===Z?(F(l,2+(t?1:0),3),H(l,p,T)):(F(l,4+(t?1:0),3),function(l,i,s,t){var c;for(F(l,i-257,5),F(l,s-1,5),F(l,t-4,4),c=0;c<t;c++)F(l,l.bl_tree[2*V[c]+1],3);f(l,l.dyn_ltree,i-1),f(l,l.dyn_dtree,s-1)}(l,l.l_desc.max_code+1,l.d_desc.max_code+1,a+1),H(l,l.dyn_ltree,l.dyn_dtree)),K(l),t&&E(l)},s._tr_tally=function(l,i,s){return l.pending_buf[l.d_buf+2*l.last_lit]=i>>>8&255,l.pending_buf[l.d_buf+2*l.last_lit+1]=255&i,l.pending_buf[l.l_buf+l.last_lit]=255&s,l.last_lit++,0===i?l.dyn_ltree[2*s]++:(l.matches++,i--,l.dyn_ltree[2*(z[s]+m+1)]++,l.dyn_dtree[2*k(i)]++),l.last_lit===l.lit_bufsize-1},s._tr_align=function(l){F(l,2,3),U(l,M,p),function(l){16===l.bi_valid?(j(l,l.bi_buf),l.bi_buf=0,l.bi_valid=0):8<=l.bi_valid&&(l.pending_buf[l.pending++]=255&l.bi_buf,l.bi_buf>>=8,l.bi_valid-=8)}(l)}},{"../utils/common":41}],53:[function(l,i,s){"use strict";i.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(l,i,t){(function(l){!function(l,i){"use strict";if(!l.setImmediate){var s,t,c,d,Z=1,b={},a=!1,m=l.document,e=Object.getPrototypeOf&&Object.getPrototypeOf(l);e=e&&e.setTimeout?e:l,s="[object process]"==={}.toString.call(l.process)?function(l){process.nextTick((function(){n(l)}))}:function(){if(l.postMessage&&!l.importScripts){var i=!0,s=l.onmessage;return l.onmessage=function(){i=!1},l.postMessage("","*"),l.onmessage=s,i}}()?(d="setImmediate$"+Math.random()+"$",l.addEventListener?l.addEventListener("message",h,!1):l.attachEvent("onmessage",h),function(i){l.postMessage(d+i,"*")}):l.MessageChannel?((c=new MessageChannel).port1.onmessage=function(l){n(l.data)},function(l){c.port2.postMessage(l)}):m&&"onreadystatechange"in m.createElement("script")?(t=m.documentElement,function(l){var i=m.createElement("script");i.onreadystatechange=function(){n(l),i.onreadystatechange=null,t.removeChild(i),i=null},t.appendChild(i)}):function(l){setTimeout(n,0,l)},e.setImmediate=function(l){"function"!=typeof l&&(l=new Function(""+l));for(var i=new Array(arguments.length-1),t=0;t<i.length;t++)i[t]=arguments[t+1];var c={callback:l,args:i};return b[Z]=c,s(Z),Z++},e.clearImmediate=W}function W(l){delete b[l]}function n(l){if(a)setTimeout(n,0,l);else{var s=b[l];if(s){a=!0;try{!function(l){var s=l.callback,t=l.args;switch(t.length){case 0:s();break;case 1:s(t[0]);break;case 2:s(t[0],t[1]);break;case 3:s(t[0],t[1],t[2]);break;default:s.apply(i,t)}}(s)}finally{W(l),a=!1}}}}function h(i){i.source===l&&"string"==typeof i.data&&0===i.data.indexOf(d)&&n(+i.data.slice(d.length))}}("undefined"==typeof self?void 0===l?this:l:self)}).call(this,"undefined"!=typeof s.g?s.g:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[10])(10)}))},501:function(module,__unused_webpack_exports,__webpack_require__){
|
||
/**
|
||
* @licstart The following is the entire license notice for the
|
||
* JavaScript code in this page
|
||
*
|
||
* Copyright 2022 Mozilla Foundation
|
||
*
|
||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
* you may not use this file except in compliance with the License.
|
||
* You may obtain a copy of the License at
|
||
*
|
||
* http://www.apache.org/licenses/LICENSE-2.0
|
||
*
|
||
* Unless required by applicable law or agreed to in writing, software
|
||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
* See the License for the specific language governing permissions and
|
||
* limitations under the License.
|
||
*
|
||
* @licend The above is the entire license notice for the
|
||
* JavaScript code in this page
|
||
*/
|
||
(function(l,i){module.exports=i()})(globalThis,(()=>(()=>{"use strict";var __webpack_modules__=[,(l,i)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.VerbosityLevel=i.Util=i.UnknownErrorException=i.UnexpectedResponseException=i.UNSUPPORTED_FEATURES=i.TextRenderingMode=i.StreamType=i.RenderingIntentFlag=i.PermissionFlag=i.PasswordResponses=i.PasswordException=i.PageActionEventType=i.OPS=i.MissingPDFException=i.LINE_FACTOR=i.LINE_DESCENT_FACTOR=i.InvalidPDFException=i.ImageKind=i.IDENTITY_MATRIX=i.FormatError=i.FontType=i.FeatureTest=i.FONT_IDENTITY_MATRIX=i.DocumentActionEventType=i.CMapCompressionType=i.BaseException=i.AnnotationType=i.AnnotationStateModelType=i.AnnotationReviewState=i.AnnotationReplyType=i.AnnotationMode=i.AnnotationMarkedState=i.AnnotationFlag=i.AnnotationFieldFlag=i.AnnotationEditorType=i.AnnotationEditorPrefix=i.AnnotationEditorParamsType=i.AnnotationBorderStyleType=i.AnnotationActionEventType=i.AbortException=void 0,i.arrayByteLength=q,i.arraysToBytes=$,i.assert=F,i.bytesToString=A,i.createPromiseCapability=Il,i.createValidAbsoluteUrl=O,i.escapeString=el,i.getModificationDate=Ml,i.getVerbosityLevel=D,i.info=J,i.isArrayBuffer=ul,i.isArrayEqual=Nl,i.isAscii=Wl,i.objectFromMap=sl,i.objectSize=il,i.setVerbosityLevel=x,i.shadow=g,i.string32=ll,i.stringToBytes=_,i.stringToPDFString=ml,i.stringToUTF16BEString=nl,i.stringToUTF8String=hl,i.unreachable=j,i.utf8StringToString=Gl,i.warn=k;const s=[1,0,0,1,0,0];i.IDENTITY_MATRIX=s;const t=[.001,0,0,.001,0,0];i.FONT_IDENTITY_MATRIX=t;const c=1.35;i.LINE_FACTOR=c;const d=.35;i.LINE_DESCENT_FACTOR=d;const Z={ANY:1,DISPLAY:2,PRINT:4,ANNOTATIONS_FORMS:16,ANNOTATIONS_STORAGE:32,ANNOTATIONS_DISABLE:64,OPLIST:256};i.RenderingIntentFlag=Z;const b={DISABLE:0,ENABLE:1,ENABLE_FORMS:2,ENABLE_STORAGE:3};i.AnnotationMode=b;const a="pdfjs_internal_editor_";i.AnnotationEditorPrefix=a;const m={DISABLE:-1,NONE:0,FREETEXT:3,INK:15};i.AnnotationEditorType=m;const e={FREETEXT_SIZE:1,FREETEXT_COLOR:2,FREETEXT_OPACITY:3,INK_COLOR:11,INK_THICKNESS:12,INK_OPACITY:13};i.AnnotationEditorParamsType=e;const W={PRINT:4,MODIFY_CONTENTS:8,COPY:16,MODIFY_ANNOTATIONS:32,FILL_INTERACTIVE_FORMS:256,COPY_FOR_ACCESSIBILITY:512,ASSEMBLE:1024,PRINT_HIGH_QUALITY:2048};i.PermissionFlag=W;const n={FILL:0,STROKE:1,FILL_STROKE:2,INVISIBLE:3,FILL_ADD_TO_PATH:4,STROKE_ADD_TO_PATH:5,FILL_STROKE_ADD_TO_PATH:6,ADD_TO_PATH:7,FILL_STROKE_MASK:3,ADD_TO_PATH_FLAG:4};i.TextRenderingMode=n;const h={GRAYSCALE_1BPP:1,RGB_24BPP:2,RGBA_32BPP:3};i.ImageKind=h;const G={TEXT:1,LINK:2,FREETEXT:3,LINE:4,SQUARE:5,CIRCLE:6,POLYGON:7,POLYLINE:8,HIGHLIGHT:9,UNDERLINE:10,SQUIGGLY:11,STRIKEOUT:12,STAMP:13,CARET:14,INK:15,POPUP:16,FILEATTACHMENT:17,SOUND:18,MOVIE:19,WIDGET:20,SCREEN:21,PRINTERMARK:22,TRAPNET:23,WATERMARK:24,THREED:25,REDACT:26};i.AnnotationType=G;const u={MARKED:"Marked",REVIEW:"Review"};i.AnnotationStateModelType=u;const N={MARKED:"Marked",UNMARKED:"Unmarked"};i.AnnotationMarkedState=N;const M={ACCEPTED:"Accepted",REJECTED:"Rejected",CANCELLED:"Cancelled",COMPLETED:"Completed",NONE:"None"};i.AnnotationReviewState=M;const I={GROUP:"Group",REPLY:"R"};i.AnnotationReplyType=I;const Y={INVISIBLE:1,HIDDEN:2,PRINT:4,NOZOOM:8,NOROTATE:16,NOVIEW:32,READONLY:64,LOCKED:128,TOGGLENOVIEW:256,LOCKEDCONTENTS:512};i.AnnotationFlag=Y;const X={READONLY:1,REQUIRED:2,NOEXPORT:4,MULTILINE:4096,PASSWORD:8192,NOTOGGLETOOFF:16384,RADIO:32768,PUSHBUTTON:65536,COMBO:131072,EDIT:262144,SORT:524288,FILESELECT:1048576,MULTISELECT:2097152,DONOTSPELLCHECK:4194304,DONOTSCROLL:8388608,COMB:16777216,RICHTEXT:33554432,RADIOSINUNISON:33554432,COMMITONSELCHANGE:67108864};i.AnnotationFieldFlag=X;const L={SOLID:1,DASHED:2,BEVELED:3,INSET:4,UNDERLINE:5};i.AnnotationBorderStyleType=L;const y={E:"Mouse Enter",X:"Mouse Exit",D:"Mouse Down",U:"Mouse Up",Fo:"Focus",Bl:"Blur",PO:"PageOpen",PC:"PageClose",PV:"PageVisible",PI:"PageInvisible",K:"Keystroke",F:"Format",V:"Validate",C:"Calculate"};i.AnnotationActionEventType=y;const o={WC:"WillClose",WS:"WillSave",DS:"DidSave",WP:"WillPrint",DP:"DidPrint"};i.DocumentActionEventType=o;const V={O:"PageOpen",C:"PageClose"};i.PageActionEventType=V;const p={UNKNOWN:"UNKNOWN",FLATE:"FLATE",LZW:"LZW",DCT:"DCT",JPX:"JPX",JBIG:"JBIG",A85:"A85",AHX:"AHX",CCF:"CCF",RLX:"RLX"};i.StreamType=p;const T={UNKNOWN:"UNKNOWN",TYPE1:"TYPE1",TYPE1STANDARD:"TYPE1STANDARD",TYPE1C:"TYPE1C",CIDFONTTYPE0:"CIDFONTTYPE0",CIDFONTTYPE0C:"CIDFONTTYPE0C",TRUETYPE:"TRUETYPE",CIDFONTTYPE2:"CIDFONTTYPE2",TYPE3:"TYPE3",OPENTYPE:"OPENTYPE",TYPE0:"TYPE0",MMTYPE1:"MMTYPE1"};i.FontType=T;const w={ERRORS:0,WARNINGS:1,INFOS:5};i.VerbosityLevel=w;const z={NONE:0,BINARY:1};i.CMapCompressionType=z;const R={dependency:1,setLineWidth:2,setLineCap:3,setLineJoin:4,setMiterLimit:5,setDash:6,setRenderingIntent:7,setFlatness:8,setGState:9,save:10,restore:11,transform:12,moveTo:13,lineTo:14,curveTo:15,curveTo2:16,curveTo3:17,closePath:18,rectangle:19,stroke:20,closeStroke:21,fill:22,eoFill:23,fillStroke:24,eoFillStroke:25,closeFillStroke:26,closeEOFillStroke:27,endPath:28,clip:29,eoClip:30,beginText:31,endText:32,setCharSpacing:33,setWordSpacing:34,setHScale:35,setLeading:36,setFont:37,setTextRenderingMode:38,setTextRise:39,moveText:40,setLeadingMoveText:41,setTextMatrix:42,nextLine:43,showText:44,showSpacedText:45,nextLineShowText:46,nextLineSetSpacingShowText:47,setCharWidth:48,setCharWidthAndBounds:49,setStrokeColorSpace:50,setFillColorSpace:51,setStrokeColor:52,setStrokeColorN:53,setFillColor:54,setFillColorN:55,setStrokeGray:56,setFillGray:57,setStrokeRGBColor:58,setFillRGBColor:59,setStrokeCMYKColor:60,setFillCMYKColor:61,shadingFill:62,beginInlineImage:63,beginImageData:64,endInlineImage:65,paintXObject:66,markPoint:67,markPointProps:68,beginMarkedContent:69,beginMarkedContentProps:70,endMarkedContent:71,beginCompat:72,endCompat:73,paintFormXObjectBegin:74,paintFormXObjectEnd:75,beginGroup:76,endGroup:77,beginAnnotation:80,endAnnotation:81,paintImageMaskXObject:83,paintImageMaskXObjectGroup:84,paintImageXObject:85,paintInlineImageXObject:86,paintInlineImageXObjectGroup:87,paintImageXObjectRepeat:88,paintImageMaskXObjectRepeat:89,paintSolidColorImageMask:90,constructPath:91};i.OPS=R;const r={forms:"forms",javaScript:"javaScript",signatures:"signatures",smask:"smask",shadingPattern:"shadingPattern",errorTilingPattern:"errorTilingPattern",errorExtGState:"errorExtGState",errorXObject:"errorXObject",errorFontLoadType3:"errorFontLoadType3",errorFontState:"errorFontState",errorFontMissing:"errorFontMissing",errorFontTranslate:"errorFontTranslate",errorColorSpace:"errorColorSpace",errorOperatorList:"errorOperatorList",errorFontToUnicode:"errorFontToUnicode",errorFontLoadNative:"errorFontLoadNative",errorFontBuildPath:"errorFontBuildPath",errorFontGetPath:"errorFontGetPath",errorMarkedContent:"errorMarkedContent",errorContentSubStream:"errorContentSubStream"};i.UNSUPPORTED_FEATURES=r;const C={NEED_PASSWORD:1,INCORRECT_PASSWORD:2};i.PasswordResponses=C;let S=w.WARNINGS;function x(l){Number.isInteger(l)&&(S=l)}function D(){return S}function J(l){S>=w.INFOS&&console.log(`Info: ${l}`)}function k(l){S>=w.WARNINGS&&console.log(`Warning: ${l}`)}function j(l){throw new Error(l)}function F(l,i){l||j(i)}function U(l){if(!l)return!1;switch(l.protocol){case"http:":case"https:":case"ftp:":case"mailto:":case"tel:":return!0;default:return!1}}function O(l,i=null,s=null){if(!l)return null;try{if(s&&"string"===typeof l){if(s.addDefaultProtocol&&l.startsWith("www.")){const i=l.match(/\./g);i&&i.length>=2&&(l=`http://${l}`)}if(s.tryConvertEncoding)try{l=hl(l)}catch(t){}}const c=i?new URL(l,i):new URL(l);if(U(c))return c}catch(t){}return null}function g(l,i,s){return Object.defineProperty(l,i,{value:s,enumerable:!0,configurable:!0,writable:!1}),s}const K=function(){function l(i,s){this.constructor===l&&j("Cannot initialize BaseException."),this.message=i,this.name=s}return l.prototype=new Error,l.constructor=l,l}();i.BaseException=K;class E extends K{constructor(l,i){super(l,"PasswordException"),this.code=i}}i.PasswordException=E;class Q extends K{constructor(l,i){super(l,"UnknownErrorException"),this.details=i}}i.UnknownErrorException=Q;class v extends K{constructor(l){super(l,"InvalidPDFException")}}i.InvalidPDFException=v;class H extends K{constructor(l){super(l,"MissingPDFException")}}i.MissingPDFException=H;class P extends K{constructor(l,i){super(l,"UnexpectedResponseException"),this.status=i}}i.UnexpectedResponseException=P;class B extends K{constructor(l){super(l,"FormatError")}}i.FormatError=B;class f extends K{constructor(l){super(l,"AbortException")}}function A(l){"object"===typeof l&&null!==l&&void 0!==l.length||j("Invalid argument for bytesToString");const i=l.length,s=8192;if(i<s)return String.fromCharCode.apply(null,l);const t=[];for(let c=0;c<i;c+=s){const d=Math.min(c+s,i),Z=l.subarray(c,d);t.push(String.fromCharCode.apply(null,Z))}return t.join("")}function _(l){"string"!==typeof l&&j("Invalid argument for stringToBytes");const i=l.length,s=new Uint8Array(i);for(let t=0;t<i;++t)s[t]=255&l.charCodeAt(t);return s}function q(l){return void 0!==l.length?l.length:void 0!==l.byteLength?l.byteLength:void j("Invalid argument for arrayByteLength")}function $(l){const i=l.length;if(1===i&&l[0]instanceof Uint8Array)return l[0];let s=0;for(let d=0;d<i;d++)s+=q(l[d]);let t=0;const c=new Uint8Array(s);for(let d=0;d<i;d++){let i=l[d];i instanceof Uint8Array||(i="string"===typeof i?_(i):new Uint8Array(i));const s=i.byteLength;c.set(i,t),t+=s}return c}function ll(l){return String.fromCharCode(l>>24&255,l>>16&255,l>>8&255,255&l)}function il(l){return Object.keys(l).length}function sl(l){const i=Object.create(null);for(const[s,t]of l)i[s]=t;return i}function tl(){const l=new Uint8Array(4);l[0]=1;const i=new Uint32Array(l.buffer,0,1);return 1===i[0]}function cl(){try{return new Function(""),!0}catch(l){return!1}}i.AbortException=f;class dl{static get isLittleEndian(){return g(this,"isLittleEndian",tl())}static get isEvalSupported(){return g(this,"isEvalSupported",cl())}static get isOffscreenCanvasSupported(){return g(this,"isOffscreenCanvasSupported","undefined"!==typeof OffscreenCanvas)}}i.FeatureTest=dl;const Zl=[...Array(256).keys()].map((l=>l.toString(16).padStart(2,"0")));class bl{static makeHexColor(l,i,s){return`#${Zl[l]}${Zl[i]}${Zl[s]}`}static scaleMinMax(l,i){let s;l[0]?(l[0]<0&&(s=i[0],i[0]=i[1],i[1]=s),i[0]*=l[0],i[1]*=l[0],l[3]<0&&(s=i[2],i[2]=i[3],i[3]=s),i[2]*=l[3],i[3]*=l[3]):(s=i[0],i[0]=i[2],i[2]=s,s=i[1],i[1]=i[3],i[3]=s,l[1]<0&&(s=i[2],i[2]=i[3],i[3]=s),i[2]*=l[1],i[3]*=l[1],l[2]<0&&(s=i[0],i[0]=i[1],i[1]=s),i[0]*=l[2],i[1]*=l[2]),i[0]+=l[4],i[1]+=l[4],i[2]+=l[5],i[3]+=l[5]}static transform(l,i){return[l[0]*i[0]+l[2]*i[1],l[1]*i[0]+l[3]*i[1],l[0]*i[2]+l[2]*i[3],l[1]*i[2]+l[3]*i[3],l[0]*i[4]+l[2]*i[5]+l[4],l[1]*i[4]+l[3]*i[5]+l[5]]}static applyTransform(l,i){const s=l[0]*i[0]+l[1]*i[2]+i[4],t=l[0]*i[1]+l[1]*i[3]+i[5];return[s,t]}static applyInverseTransform(l,i){const s=i[0]*i[3]-i[1]*i[2],t=(l[0]*i[3]-l[1]*i[2]+i[2]*i[5]-i[4]*i[3])/s,c=(-l[0]*i[1]+l[1]*i[0]+i[4]*i[1]-i[5]*i[0])/s;return[t,c]}static getAxialAlignedBoundingBox(l,i){const s=bl.applyTransform(l,i),t=bl.applyTransform(l.slice(2,4),i),c=bl.applyTransform([l[0],l[3]],i),d=bl.applyTransform([l[2],l[1]],i);return[Math.min(s[0],t[0],c[0],d[0]),Math.min(s[1],t[1],c[1],d[1]),Math.max(s[0],t[0],c[0],d[0]),Math.max(s[1],t[1],c[1],d[1])]}static inverseTransform(l){const i=l[0]*l[3]-l[1]*l[2];return[l[3]/i,-l[1]/i,-l[2]/i,l[0]/i,(l[2]*l[5]-l[4]*l[3])/i,(l[4]*l[1]-l[5]*l[0])/i]}static singularValueDecompose2dScale(l){const i=[l[0],l[2],l[1],l[3]],s=l[0]*i[0]+l[1]*i[2],t=l[0]*i[1]+l[1]*i[3],c=l[2]*i[0]+l[3]*i[2],d=l[2]*i[1]+l[3]*i[3],Z=(s+d)/2,b=Math.sqrt((s+d)**2-4*(s*d-c*t))/2,a=Z+b||1,m=Z-b||1;return[Math.sqrt(a),Math.sqrt(m)]}static normalizeRect(l){const i=l.slice(0);return l[0]>l[2]&&(i[0]=l[2],i[2]=l[0]),l[1]>l[3]&&(i[1]=l[3],i[3]=l[1]),i}static intersect(l,i){const s=Math.max(Math.min(l[0],l[2]),Math.min(i[0],i[2])),t=Math.min(Math.max(l[0],l[2]),Math.max(i[0],i[2]));if(s>t)return null;const c=Math.max(Math.min(l[1],l[3]),Math.min(i[1],i[3])),d=Math.min(Math.max(l[1],l[3]),Math.max(i[1],i[3]));return c>d?null:[s,c,t,d]}static bezierBoundingBox(l,i,s,t,c,d,Z,b){const a=[],m=[[],[]];let e,W,n,h,G,u,N,M;for(let L=0;L<2;++L)if(0===L?(W=6*l-12*s+6*c,e=-3*l+9*s-9*c+3*Z,n=3*s-3*l):(W=6*i-12*t+6*d,e=-3*i+9*t-9*d+3*b,n=3*t-3*i),Math.abs(e)<1e-12){if(Math.abs(W)<1e-12)continue;h=-n/W,0<h&&h<1&&a.push(h)}else N=W*W-4*n*e,M=Math.sqrt(N),N<0||(G=(-W+M)/(2*e),0<G&&G<1&&a.push(G),u=(-W-M)/(2*e),0<u&&u<1&&a.push(u));let I,Y=a.length;const X=Y;while(Y--)h=a[Y],I=1-h,m[0][Y]=I*I*I*l+3*I*I*h*s+3*I*h*h*c+h*h*h*Z,m[1][Y]=I*I*I*i+3*I*I*h*t+3*I*h*h*d+h*h*h*b;return m[0][X]=l,m[1][X]=i,m[0][X+1]=Z,m[1][X+1]=b,m[0].length=m[1].length=X+2,[Math.min(...m[0]),Math.min(...m[1]),Math.max(...m[0]),Math.max(...m[1])]}}i.Util=bl;const al=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,728,711,710,729,733,731,730,732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8226,8224,8225,8230,8212,8211,402,8260,8249,8250,8722,8240,8222,8220,8221,8216,8217,8218,8482,64257,64258,321,338,352,376,381,305,322,339,353,382,0,8364];function ml(l){if(l[0]>="ï"){let i;if("þ"===l[0]&&"ÿ"===l[1]?i="utf-16be":"ÿ"===l[0]&&"þ"===l[1]?i="utf-16le":"ï"===l[0]&&"»"===l[1]&&"¿"===l[2]&&(i="utf-8"),i)try{const s=new TextDecoder(i,{fatal:!0}),t=_(l);return s.decode(t)}catch(s){k(`stringToPDFString: "${s}".`)}}const i=[];for(let t=0,c=l.length;t<c;t++){const s=al[l.charCodeAt(t)];i.push(s?String.fromCharCode(s):l.charAt(t))}return i.join("")}function el(l){return l.replace(/([()\\\n\r])/g,(l=>"\n"===l?"\\n":"\r"===l?"\\r":`\\${l}`))}function Wl(l){return/^[\x00-\x7F]*$/.test(l)}function nl(l){const i=["þÿ"];for(let s=0,t=l.length;s<t;s++){const t=l.charCodeAt(s);i.push(String.fromCharCode(t>>8&255),String.fromCharCode(255&t))}return i.join("")}function hl(l){return decodeURIComponent(escape(l))}function Gl(l){return unescape(encodeURIComponent(l))}function ul(l){return"object"===typeof l&&null!==l&&void 0!==l.byteLength}function Nl(l,i){if(l.length!==i.length)return!1;for(let s=0,t=l.length;s<t;s++)if(l[s]!==i[s])return!1;return!0}function Ml(l=new Date){const i=[l.getUTCFullYear().toString(),(l.getUTCMonth()+1).toString().padStart(2,"0"),l.getUTCDate().toString().padStart(2,"0"),l.getUTCHours().toString().padStart(2,"0"),l.getUTCMinutes().toString().padStart(2,"0"),l.getUTCSeconds().toString().padStart(2,"0")];return i.join("")}function Il(){const l=Object.create(null);let i=!1;return Object.defineProperty(l,"settled",{get(){return i}}),l.promise=new Promise((function(s,t){l.resolve=function(l){i=!0,s(l)},l.reject=function(l){i=!0,t(l)}})),l}},(__unused_webpack_module,exports,__w_pdfjs_require__)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.build=exports.RenderTask=exports.PDFWorkerUtil=exports.PDFWorker=exports.PDFPageProxy=exports.PDFDocumentProxy=exports.PDFDocumentLoadingTask=exports.PDFDataRangeTransport=exports.LoopbackPort=exports.DefaultStandardFontDataFactory=exports.DefaultCanvasFactory=exports.DefaultCMapReaderFactory=void 0,exports.getDocument=getDocument,exports.setPDFNetworkStreamFactory=setPDFNetworkStreamFactory,exports.version=void 0;var _util=__w_pdfjs_require__(1),_annotation_storage=__w_pdfjs_require__(3),_display_utils=__w_pdfjs_require__(6),_font_loader=__w_pdfjs_require__(9),_canvas=__w_pdfjs_require__(10),_worker_options=__w_pdfjs_require__(14),_is_node=__w_pdfjs_require__(12),_message_handler=__w_pdfjs_require__(15),_metadata=__w_pdfjs_require__(16),_optional_content_config=__w_pdfjs_require__(17),_transport_stream=__w_pdfjs_require__(18),_xfa_text=__w_pdfjs_require__(19);const DEFAULT_RANGE_CHUNK_SIZE=65536,RENDERING_CANCELLED_TIMEOUT=100;let DefaultCanvasFactory=_display_utils.DOMCanvasFactory;exports.DefaultCanvasFactory=DefaultCanvasFactory;let DefaultCMapReaderFactory=_display_utils.DOMCMapReaderFactory;exports.DefaultCMapReaderFactory=DefaultCMapReaderFactory;let DefaultStandardFontDataFactory=_display_utils.DOMStandardFontDataFactory,createPDFNetworkStream;if(exports.DefaultStandardFontDataFactory=DefaultStandardFontDataFactory,_is_node.isNodeJS){const{NodeCanvasFactory:l,NodeCMapReaderFactory:i,NodeStandardFontDataFactory:s}=__w_pdfjs_require__(20);exports.DefaultCanvasFactory=DefaultCanvasFactory=l,exports.DefaultCMapReaderFactory=DefaultCMapReaderFactory=i,exports.DefaultStandardFontDataFactory=DefaultStandardFontDataFactory=s}function setPDFNetworkStreamFactory(l){createPDFNetworkStream=l}function getDocument(l){const i=new PDFDocumentLoadingTask;let s;if("string"===typeof l||l instanceof URL)s={url:l};else if((0,_util.isArrayBuffer)(l))s={data:l};else if(l instanceof PDFDataRangeTransport)s={range:l};else{if("object"!==typeof l)throw new Error("Invalid parameter in getDocument, need either string, URL, TypedArray, or parameter object.");if(!l.url&&!l.data&&!l.range)throw new Error("Invalid parameter object: need either .data, .range or .url");s=l}const t=Object.create(null);let c=null,d=null;for(const a in s){const l=s[a];switch(a){case"url":if("undefined"!==typeof window)try{t[a]=new URL(l,window.location).href;continue}catch(b){(0,_util.warn)(`Cannot create valid URL: "${b}".`)}else if("string"===typeof l||l instanceof URL){t[a]=l.toString();continue}throw new Error("Invalid PDF url data: either string or URL-object is expected in the url property.");case"range":c=l;continue;case"worker":d=l;continue;case"data":if(_is_node.isNodeJS&&"undefined"!==typeof Buffer&&l instanceof Buffer)t[a]=new Uint8Array(l);else{if(l instanceof Uint8Array)break;if("string"===typeof l)t[a]=(0,_util.stringToBytes)(l);else if("object"!==typeof l||null===l||isNaN(l.length)){if(!(0,_util.isArrayBuffer)(l))throw new Error("Invalid PDF binary data: either TypedArray, string, or array-like object is expected in the data property.");t[a]=new Uint8Array(l)}else t[a]=new Uint8Array(l)}continue}t[a]=l}if(t.CMapReaderFactory=t.CMapReaderFactory||DefaultCMapReaderFactory,t.StandardFontDataFactory=t.StandardFontDataFactory||DefaultStandardFontDataFactory,t.ignoreErrors=!0!==t.stopAtErrors,t.fontExtraProperties=!0===t.fontExtraProperties,t.pdfBug=!0===t.pdfBug,t.enableXfa=!0===t.enableXfa,(!Number.isInteger(t.rangeChunkSize)||t.rangeChunkSize<1)&&(t.rangeChunkSize=DEFAULT_RANGE_CHUNK_SIZE),("string"!==typeof t.docBaseUrl||(0,_display_utils.isDataScheme)(t.docBaseUrl))&&(t.docBaseUrl=null),(!Number.isInteger(t.maxImageSize)||t.maxImageSize<-1)&&(t.maxImageSize=-1),"string"!==typeof t.cMapUrl&&(t.cMapUrl=null),"string"!==typeof t.standardFontDataUrl&&(t.standardFontDataUrl=null),"boolean"!==typeof t.useWorkerFetch&&(t.useWorkerFetch=t.CMapReaderFactory===_display_utils.DOMCMapReaderFactory&&t.StandardFontDataFactory===_display_utils.DOMStandardFontDataFactory),"boolean"!==typeof t.isEvalSupported&&(t.isEvalSupported=!0),"boolean"!==typeof t.isOffscreenCanvasSupported&&(t.isOffscreenCanvasSupported=!_is_node.isNodeJS),"boolean"!==typeof t.disableFontFace&&(t.disableFontFace=_is_node.isNodeJS),"boolean"!==typeof t.useSystemFonts&&(t.useSystemFonts=!_is_node.isNodeJS&&!t.disableFontFace),"object"===typeof t.ownerDocument&&null!==t.ownerDocument||(t.ownerDocument=globalThis.document),"boolean"!==typeof t.disableRange&&(t.disableRange=!1),"boolean"!==typeof t.disableStream&&(t.disableStream=!1),"boolean"!==typeof t.disableAutoFetch&&(t.disableAutoFetch=!1),(0,_util.setVerbosityLevel)(t.verbosity),!d){const l={verbosity:t.verbosity,port:_worker_options.GlobalWorkerOptions.workerPort};d=l.port?PDFWorker.fromPort(l):new PDFWorker(l),i._worker=d}const Z=i.docId;return d.promise.then((function(){if(i.destroyed)throw new Error("Loading aborted");const l=_fetchDocument(d,t,c,Z),s=new Promise((function(l){let i;c?i=new _transport_stream.PDFDataTransportStream({length:t.length,initialData:t.initialData,progressiveDone:t.progressiveDone,contentDispositionFilename:t.contentDispositionFilename,disableRange:t.disableRange,disableStream:t.disableStream},c):t.data||(i=createPDFNetworkStream({url:t.url,length:t.length,httpHeaders:t.httpHeaders,withCredentials:t.withCredentials,rangeChunkSize:t.rangeChunkSize,disableRange:t.disableRange,disableStream:t.disableStream})),l(i)}));return Promise.all([l,s]).then((function([l,s]){if(i.destroyed)throw new Error("Loading aborted");const c=new _message_handler.MessageHandler(Z,l,d.port),b=new WorkerTransport(c,i,s,t);i._transport=b,c.send("Ready",null)}))})).catch(i._capability.reject),i}async function _fetchDocument(l,i,s,t){if(l.destroyed)throw new Error("Worker was destroyed");s&&(i.length=s.length,i.initialData=s.initialData,i.progressiveDone=s.progressiveDone,i.contentDispositionFilename=s.contentDispositionFilename);const c=await l.messageHandler.sendWithPromise("GetDocRequest",{docId:t,apiVersion:"3.0.279",data:i.data,password:i.password,disableAutoFetch:i.disableAutoFetch,rangeChunkSize:i.rangeChunkSize,length:i.length,docBaseUrl:i.docBaseUrl,enableXfa:i.enableXfa,evaluatorOptions:{maxImageSize:i.maxImageSize,disableFontFace:i.disableFontFace,ignoreErrors:i.ignoreErrors,isEvalSupported:i.isEvalSupported,isOffscreenCanvasSupported:i.isOffscreenCanvasSupported,fontExtraProperties:i.fontExtraProperties,useSystemFonts:i.useSystemFonts,cMapUrl:i.useWorkerFetch?i.cMapUrl:null,standardFontDataUrl:i.useWorkerFetch?i.standardFontDataUrl:null}});if(i.data&&(i.data=null),l.destroyed)throw new Error("Worker was destroyed");return c}class PDFDocumentLoadingTask{static#l=0;constructor(){this._capability=(0,_util.createPromiseCapability)(),this._transport=null,this._worker=null,this.docId="d"+PDFDocumentLoadingTask.#l++,this.destroyed=!1,this.onPassword=null,this.onProgress=null,this.onUnsupportedFeature=null}get promise(){return this._capability.promise}async destroy(){this.destroyed=!0,await(this._transport?.destroy()),this._transport=null,this._worker&&(this._worker.destroy(),this._worker=null)}}exports.PDFDocumentLoadingTask=PDFDocumentLoadingTask;class PDFDataRangeTransport{constructor(l,i,s=!1,t=null){this.length=l,this.initialData=i,this.progressiveDone=s,this.contentDispositionFilename=t,this._rangeListeners=[],this._progressListeners=[],this._progressiveReadListeners=[],this._progressiveDoneListeners=[],this._readyCapability=(0,_util.createPromiseCapability)()}addRangeListener(l){this._rangeListeners.push(l)}addProgressListener(l){this._progressListeners.push(l)}addProgressiveReadListener(l){this._progressiveReadListeners.push(l)}addProgressiveDoneListener(l){this._progressiveDoneListeners.push(l)}onDataRange(l,i){for(const s of this._rangeListeners)s(l,i)}onDataProgress(l,i){this._readyCapability.promise.then((()=>{for(const s of this._progressListeners)s(l,i)}))}onDataProgressiveRead(l){this._readyCapability.promise.then((()=>{for(const i of this._progressiveReadListeners)i(l)}))}onDataProgressiveDone(){this._readyCapability.promise.then((()=>{for(const l of this._progressiveDoneListeners)l()}))}transportReady(){this._readyCapability.resolve()}requestDataRange(l,i){(0,_util.unreachable)("Abstract method PDFDataRangeTransport.requestDataRange")}abort(){}}exports.PDFDataRangeTransport=PDFDataRangeTransport;class PDFDocumentProxy{constructor(l,i){this._pdfInfo=l,this._transport=i}get annotationStorage(){return this._transport.annotationStorage}get numPages(){return this._pdfInfo.numPages}get fingerprints(){return this._pdfInfo.fingerprints}get stats(){return this._transport.stats}get isPureXfa(){return!!this._transport._htmlForXfa}get allXfaHtml(){return this._transport._htmlForXfa}getPage(l){return this._transport.getPage(l)}getPageIndex(l){return this._transport.getPageIndex(l)}getDestinations(){return this._transport.getDestinations()}getDestination(l){return this._transport.getDestination(l)}getPageLabels(){return this._transport.getPageLabels()}getPageLayout(){return this._transport.getPageLayout()}getPageMode(){return this._transport.getPageMode()}getViewerPreferences(){return this._transport.getViewerPreferences()}getOpenAction(){return this._transport.getOpenAction()}getAttachments(){return this._transport.getAttachments()}getJavaScript(){return this._transport.getJavaScript()}getJSActions(){return this._transport.getDocJSActions()}getOutline(){return this._transport.getOutline()}getOptionalContentConfig(){return this._transport.getOptionalContentConfig()}getPermissions(){return this._transport.getPermissions()}getMetadata(){return this._transport.getMetadata()}getMarkInfo(){return this._transport.getMarkInfo()}getData(){return this._transport.getData()}saveDocument(){return this._transport.saveDocument()}getDownloadInfo(){return this._transport.downloadInfoCapability.promise}cleanup(l=!1){return this._transport.startCleanup(l||this.isPureXfa)}destroy(){return this.loadingTask.destroy()}get loadingParams(){return this._transport.loadingParams}get loadingTask(){return this._transport.loadingTask}getFieldObjects(){return this._transport.getFieldObjects()}hasJSActions(){return this._transport.hasJSActions()}getCalculationOrderIds(){return this._transport.getCalculationOrderIds()}}exports.PDFDocumentProxy=PDFDocumentProxy;class PDFPageProxy{constructor(l,i,s,t,c=!1){this._pageIndex=l,this._pageInfo=i,this._ownerDocument=t,this._transport=s,this._stats=c?new _display_utils.StatTimer:null,this._pdfBug=c,this.commonObjs=s.commonObjs,this.objs=new PDFObjects,this._bitmaps=new Set,this.cleanupAfterRender=!1,this.pendingCleanup=!1,this._intentStates=new Map,this._annotationPromises=new Map,this.destroyed=!1}get pageNumber(){return this._pageIndex+1}get rotate(){return this._pageInfo.rotate}get ref(){return this._pageInfo.ref}get userUnit(){return this._pageInfo.userUnit}get view(){return this._pageInfo.view}getViewport({scale:l,rotation:i=this.rotate,offsetX:s=0,offsetY:t=0,dontFlip:c=!1}={}){return new _display_utils.PageViewport({viewBox:this.view,scale:l,rotation:i,offsetX:s,offsetY:t,dontFlip:c})}getAnnotations({intent:l="display"}={}){const i=this._transport.getRenderingIntent(l);let s=this._annotationPromises.get(i.cacheKey);return s||(s=this._transport.getAnnotations(this._pageIndex,i.renderingIntent),this._annotationPromises.set(i.cacheKey,s)),s}getJSActions(){return this._jsActionsPromise||=this._transport.getPageJSActions(this._pageIndex)}async getXfa(){return this._transport._htmlForXfa?.children[this._pageIndex]||null}render({canvasContext:l,viewport:i,intent:s="display",annotationMode:t=_util.AnnotationMode.ENABLE,transform:c=null,canvasFactory:d=null,background:Z=null,optionalContentConfigPromise:b=null,annotationCanvasMap:a=null,pageColors:m=null,printAnnotationStorage:e=null}){this._stats?.time("Overall");const W=this._transport.getRenderingIntent(s,t,e);this.pendingCleanup=!1,b||(b=this._transport.getOptionalContentConfig());let n=this._intentStates.get(W.cacheKey);n||(n=Object.create(null),this._intentStates.set(W.cacheKey,n)),n.streamReaderCancelTimeout&&(clearTimeout(n.streamReaderCancelTimeout),n.streamReaderCancelTimeout=null);const h=d||new DefaultCanvasFactory({ownerDocument:this._ownerDocument}),G=!!(W.renderingIntent&_util.RenderingIntentFlag.PRINT);n.displayReadyCapability||(n.displayReadyCapability=(0,_util.createPromiseCapability)(),n.operatorList={fnArray:[],argsArray:[],lastChunk:!1,separateAnnots:null},this._stats?.time("Page Request"),this._pumpOperatorList(W));const u=l=>{n.renderTasks.delete(N),(this.cleanupAfterRender||G)&&(this.pendingCleanup=!0),this._tryCleanup(),l?(N.capability.reject(l),this._abortOperatorList({intentState:n,reason:l instanceof Error?l:new Error(l)})):N.capability.resolve(),this._stats?.timeEnd("Rendering"),this._stats?.timeEnd("Overall")},N=new InternalRenderTask({callback:u,params:{canvasContext:l,viewport:i,transform:c,background:Z},objs:this.objs,commonObjs:this.commonObjs,annotationCanvasMap:a,operatorList:n.operatorList,pageIndex:this._pageIndex,canvasFactory:h,useRequestAnimationFrame:!G,pdfBug:this._pdfBug,pageColors:m});(n.renderTasks||=new Set).add(N);const M=N.task;return Promise.all([n.displayReadyCapability.promise,b]).then((([l,i])=>{this.pendingCleanup?u():(this._stats?.time("Rendering"),N.initializeGraphics({transparency:l,optionalContentConfig:i}),N.operatorListChanged())})).catch(u),M}getOperatorList({intent:l="display",annotationMode:i=_util.AnnotationMode.ENABLE,printAnnotationStorage:s=null}={}){function t(){Z.operatorList.lastChunk&&(Z.opListReadCapability.resolve(Z.operatorList),Z.renderTasks.delete(d))}const c=this._transport.getRenderingIntent(l,i,s,!0);let d,Z=this._intentStates.get(c.cacheKey);return Z||(Z=Object.create(null),this._intentStates.set(c.cacheKey,Z)),Z.opListReadCapability||(d=Object.create(null),d.operatorListChanged=t,Z.opListReadCapability=(0,_util.createPromiseCapability)(),(Z.renderTasks||=new Set).add(d),Z.operatorList={fnArray:[],argsArray:[],lastChunk:!1,separateAnnots:null},this._stats?.time("Page Request"),this._pumpOperatorList(c)),Z.opListReadCapability.promise}streamTextContent({disableCombineTextItems:l=!1,includeMarkedContent:i=!1}={}){const s=100;return this._transport.messageHandler.sendWithStream("GetTextContent",{pageIndex:this._pageIndex,combineTextItems:!0!==l,includeMarkedContent:!0===i},{highWaterMark:s,size(l){return l.items.length}})}getTextContent(l={}){if(this._transport._htmlForXfa)return this.getXfa().then((l=>_xfa_text.XfaText.textContent(l)));const i=this.streamTextContent(l);return new Promise((function(l,s){function t(){c.read().then((function({value:i,done:s}){s?l(d):(Object.assign(d.styles,i.styles),d.items.push(...i.items),t())}),s)}const c=i.getReader(),d={items:[],styles:Object.create(null)};t()}))}getStructTree(){return this._structTreePromise||=this._transport.getStructTree(this._pageIndex)}_destroy(){this.destroyed=!0;const l=[];for(const i of this._intentStates.values())if(this._abortOperatorList({intentState:i,reason:new Error("Page was destroyed."),force:!0}),!i.opListReadCapability)for(const s of i.renderTasks)l.push(s.completed),s.cancel();this.objs.clear();for(const i of this._bitmaps)i.close();return this._bitmaps.clear(),this._annotationPromises.clear(),this._jsActionsPromise=null,this._structTreePromise=null,this.pendingCleanup=!1,Promise.all(l)}cleanup(l=!1){return this.pendingCleanup=!0,this._tryCleanup(l)}_tryCleanup(l=!1){if(!this.pendingCleanup)return!1;for(const{renderTasks:i,operatorList:s}of this._intentStates.values())if(i.size>0||!s.lastChunk)return!1;this._intentStates.clear(),this.objs.clear(),this._annotationPromises.clear(),this._jsActionsPromise=null,this._structTreePromise=null,l&&this._stats&&(this._stats=new _display_utils.StatTimer);for(const i of this._bitmaps)i.close();return this._bitmaps.clear(),this.pendingCleanup=!1,!0}_startRenderPage(l,i){const s=this._intentStates.get(i);s&&(this._stats?.timeEnd("Page Request"),s.displayReadyCapability?.resolve(l))}_renderPageChunk(l,i){for(let s=0,t=l.length;s<t;s++)i.operatorList.fnArray.push(l.fnArray[s]),i.operatorList.argsArray.push(l.argsArray[s]);i.operatorList.lastChunk=l.lastChunk,i.operatorList.separateAnnots=l.separateAnnots;for(const s of i.renderTasks)s.operatorListChanged();l.lastChunk&&this._tryCleanup()}_pumpOperatorList({renderingIntent:l,cacheKey:i,annotationStorageMap:s}){const t=this._transport.messageHandler.sendWithStream("GetOperatorList",{pageIndex:this._pageIndex,intent:l,cacheKey:i,annotationStorage:s}),c=t.getReader(),d=this._intentStates.get(i);d.streamReader=c;const Z=()=>{c.read().then((({value:l,done:i})=>{i?d.streamReader=null:this._transport.destroyed||(this._renderPageChunk(l,d),Z())}),(l=>{if(d.streamReader=null,!this._transport.destroyed){if(d.operatorList){d.operatorList.lastChunk=!0;for(const l of d.renderTasks)l.operatorListChanged();this._tryCleanup()}if(d.displayReadyCapability)d.displayReadyCapability.reject(l);else{if(!d.opListReadCapability)throw l;d.opListReadCapability.reject(l)}}}))};Z()}_abortOperatorList({intentState:l,reason:i,force:s=!1}){if(l.streamReader){if(!s){if(l.renderTasks.size>0)return;if(i instanceof _display_utils.RenderingCancelledException)return void(l.streamReaderCancelTimeout=setTimeout((()=>{this._abortOperatorList({intentState:l,reason:i,force:!0}),l.streamReaderCancelTimeout=null}),RENDERING_CANCELLED_TIMEOUT))}if(l.streamReader.cancel(new _util.AbortException(i.message)).catch((()=>{})),l.streamReader=null,!this._transport.destroyed){for(const[i,s]of this._intentStates)if(s===l){this._intentStates.delete(i);break}this.cleanup()}}}get stats(){return this._stats}}exports.PDFPageProxy=PDFPageProxy;class LoopbackPort{#i=[];#s=Promise.resolve();postMessage(l,i){const s={data:structuredClone(l,i)};this.#s.then((()=>{for(const l of this.#i)l.call(this,s)}))}addEventListener(l,i){this.#i.push(i)}removeEventListener(l,i){const s=this.#i.indexOf(i);this.#i.splice(s,1)}terminate(){this.#i.length=0}}exports.LoopbackPort=LoopbackPort;const PDFWorkerUtil={isWorkerDisabled:!1,fallbackWorkerSrc:null,fakeWorkerId:0};if(exports.PDFWorkerUtil=PDFWorkerUtil,_is_node.isNodeJS)PDFWorkerUtil.isWorkerDisabled=!0,PDFWorkerUtil.fallbackWorkerSrc="./pdf.worker.js";else if("object"===typeof document){const l=document?.currentScript?.src;l&&(PDFWorkerUtil.fallbackWorkerSrc=l.replace(/(\.(?:min\.)?js)(\?.*)?$/i,".worker$1$2"))}PDFWorkerUtil.isSameOrigin=function(l,i){let s;try{if(s=new URL(l),!s.origin||"null"===s.origin)return!1}catch(c){return!1}const t=new URL(i,s);return s.origin===t.origin},PDFWorkerUtil.createCDNWrapper=function(l){const i=`importScripts("${l}");`;return URL.createObjectURL(new Blob([i]))};class PDFWorker{static#t=new WeakMap;constructor({name:l=null,port:i=null,verbosity:s=(0,_util.getVerbosityLevel)()}={}){if(i&&PDFWorker.#t.has(i))throw new Error("Cannot use more than one PDFWorker per port.");if(this.name=l,this.destroyed=!1,this.verbosity=s,this._readyCapability=(0,_util.createPromiseCapability)(),this._port=null,this._webWorker=null,this._messageHandler=null,i)return PDFWorker.#t.set(i,this),void this._initializeFromPort(i);this._initialize()}get promise(){return this._readyCapability.promise}get port(){return this._port}get messageHandler(){return this._messageHandler}_initializeFromPort(l){this._port=l,this._messageHandler=new _message_handler.MessageHandler("main","worker",l),this._messageHandler.on("ready",(function(){})),this._readyCapability.resolve(),this._messageHandler.send("configure",{verbosity:this.verbosity})}_initialize(){if(!PDFWorkerUtil.isWorkerDisabled&&!PDFWorker._mainThreadWorkerMessageHandler){let{workerSrc:i}=PDFWorker;try{PDFWorkerUtil.isSameOrigin(window.location.href,i)||(i=PDFWorkerUtil.createCDNWrapper(new URL(i,window.location).href));const l=new Worker(i),s=new _message_handler.MessageHandler("main","worker",l),t=()=>{l.removeEventListener("error",c),s.destroy(),l.terminate(),this.destroyed?this._readyCapability.reject(new Error("Worker was destroyed")):this._setupFakeWorker()},c=()=>{this._webWorker||t()};l.addEventListener("error",c),s.on("test",(i=>{l.removeEventListener("error",c),this.destroyed?t():i?(this._messageHandler=s,this._port=l,this._webWorker=l,this._readyCapability.resolve(),s.send("configure",{verbosity:this.verbosity})):(this._setupFakeWorker(),s.destroy(),l.terminate())})),s.on("ready",(i=>{if(l.removeEventListener("error",c),this.destroyed)t();else try{d()}catch(s){this._setupFakeWorker()}}));const d=()=>{const l=new Uint8Array;s.send("test",l,[l.buffer])};return void d()}catch(l){(0,_util.info)("The worker has been disabled.")}}this._setupFakeWorker()}_setupFakeWorker(){PDFWorkerUtil.isWorkerDisabled||((0,_util.warn)("Setting up fake worker."),PDFWorkerUtil.isWorkerDisabled=!0),PDFWorker._setupFakeWorkerGlobal.then((l=>{if(this.destroyed)return void this._readyCapability.reject(new Error("Worker was destroyed"));const i=new LoopbackPort;this._port=i;const s="fake"+PDFWorkerUtil.fakeWorkerId++,t=new _message_handler.MessageHandler(s+"_worker",s,i);l.setup(t,i);const c=new _message_handler.MessageHandler(s,s+"_worker",i);this._messageHandler=c,this._readyCapability.resolve(),c.send("configure",{verbosity:this.verbosity})})).catch((l=>{this._readyCapability.reject(new Error(`Setting up fake worker failed: "${l.message}".`))}))}destroy(){this.destroyed=!0,this._webWorker&&(this._webWorker.terminate(),this._webWorker=null),PDFWorker.#t.delete(this._port),this._port=null,this._messageHandler&&(this._messageHandler.destroy(),this._messageHandler=null)}static fromPort(l){if(!l?.port)throw new Error("PDFWorker.fromPort - invalid method signature.");return this.#t.has(l.port)?this.#t.get(l.port):new PDFWorker(l)}static get workerSrc(){if(_worker_options.GlobalWorkerOptions.workerSrc)return _worker_options.GlobalWorkerOptions.workerSrc;if(null!==PDFWorkerUtil.fallbackWorkerSrc)return _is_node.isNodeJS||(0,_display_utils.deprecated)('No "GlobalWorkerOptions.workerSrc" specified.'),PDFWorkerUtil.fallbackWorkerSrc;throw new Error('No "GlobalWorkerOptions.workerSrc" specified.')}static get _mainThreadWorkerMessageHandler(){try{return globalThis.pdfjsWorker?.WorkerMessageHandler||null}catch(l){return null}}static get _setupFakeWorkerGlobal(){const loader=async()=>{const mainWorkerMessageHandler=this._mainThreadWorkerMessageHandler;if(mainWorkerMessageHandler)return mainWorkerMessageHandler;if(_is_node.isNodeJS){const worker=eval("require")(this.workerSrc);return worker.WorkerMessageHandler}return await(0,_display_utils.loadScript)(this.workerSrc),window.pdfjsWorker.WorkerMessageHandler};return(0,_util.shadow)(this,"_setupFakeWorkerGlobal",loader())}}exports.PDFWorker=PDFWorker;class WorkerTransport{#c=null;#d=new Map;#Z=new Map;#b=null;constructor(l,i,s,t){this.messageHandler=l,this.loadingTask=i,this.commonObjs=new PDFObjects,this.fontLoader=new _font_loader.FontLoader({onUnsupportedFeature:this._onUnsupportedFeature.bind(this),ownerDocument:t.ownerDocument,styleElement:t.styleElement}),this._params=t,t.useWorkerFetch||(this.CMapReaderFactory=new t.CMapReaderFactory({baseUrl:t.cMapUrl,isCompressed:t.cMapPacked}),this.StandardFontDataFactory=new t.StandardFontDataFactory({baseUrl:t.standardFontDataUrl})),this.destroyed=!1,this.destroyCapability=null,this._passwordCapability=null,this._networkStream=s,this._fullReader=null,this._lastProgress=null,this.downloadInfoCapability=(0,_util.createPromiseCapability)(),this.setupMessageHandler()}get annotationStorage(){return(0,_util.shadow)(this,"annotationStorage",new _annotation_storage.AnnotationStorage)}get stats(){return this.#c}getRenderingIntent(l,i=_util.AnnotationMode.ENABLE,s=null,t=!1){let c=_util.RenderingIntentFlag.DISPLAY,d=null;switch(l){case"any":c=_util.RenderingIntentFlag.ANY;break;case"display":break;case"print":c=_util.RenderingIntentFlag.PRINT;break;default:(0,_util.warn)(`getRenderingIntent - invalid intent: ${l}`)}switch(i){case _util.AnnotationMode.DISABLE:c+=_util.RenderingIntentFlag.ANNOTATIONS_DISABLE;break;case _util.AnnotationMode.ENABLE:break;case _util.AnnotationMode.ENABLE_FORMS:c+=_util.RenderingIntentFlag.ANNOTATIONS_FORMS;break;case _util.AnnotationMode.ENABLE_STORAGE:c+=_util.RenderingIntentFlag.ANNOTATIONS_STORAGE;const l=c&_util.RenderingIntentFlag.PRINT&&s instanceof _annotation_storage.PrintAnnotationStorage?s:this.annotationStorage;d=l.serializable;break;default:(0,_util.warn)(`getRenderingIntent - invalid annotationMode: ${i}`)}return t&&(c+=_util.RenderingIntentFlag.OPLIST),{renderingIntent:c,cacheKey:`${c}_${_annotation_storage.AnnotationStorage.getHash(d)}`,annotationStorageMap:d}}destroy(){if(this.destroyCapability)return this.destroyCapability.promise;this.destroyed=!0,this.destroyCapability=(0,_util.createPromiseCapability)(),this._passwordCapability&&this._passwordCapability.reject(new Error("Worker was destroyed during onPassword callback"));const l=[];for(const s of this.#d.values())l.push(s._destroy());this.#d.clear(),this.#Z.clear(),this.hasOwnProperty("annotationStorage")&&this.annotationStorage.resetModified();const i=this.messageHandler.sendWithPromise("Terminate",null);return l.push(i),Promise.all(l).then((()=>{this.commonObjs.clear(),this.fontLoader.clear(),this.#b=null,this._getFieldObjectsPromise=null,this._hasJSActionsPromise=null,this._networkStream&&this._networkStream.cancelAllRequests(new _util.AbortException("Worker was terminated.")),this.messageHandler&&(this.messageHandler.destroy(),this.messageHandler=null),this.destroyCapability.resolve()}),this.destroyCapability.reject),this.destroyCapability.promise}setupMessageHandler(){const{messageHandler:l,loadingTask:i}=this;l.on("GetReader",((l,i)=>{(0,_util.assert)(this._networkStream,"GetReader - no `IPDFStream` instance available."),this._fullReader=this._networkStream.getFullReader(),this._fullReader.onProgress=l=>{this._lastProgress={loaded:l.loaded,total:l.total}},i.onPull=()=>{this._fullReader.read().then((function({value:l,done:s}){s?i.close():((0,_util.assert)((0,_util.isArrayBuffer)(l),"GetReader - expected an ArrayBuffer."),i.enqueue(new Uint8Array(l),1,[l]))})).catch((l=>{i.error(l)}))},i.onCancel=l=>{this._fullReader.cancel(l),i.ready.catch((l=>{if(!this.destroyed)throw l}))}})),l.on("ReaderHeadersReady",(l=>{const s=(0,_util.createPromiseCapability)(),t=this._fullReader;return t.headersReady.then((()=>{t.isStreamingSupported&&t.isRangeSupported||(this._lastProgress&&i.onProgress?.(this._lastProgress),t.onProgress=l=>{i.onProgress?.({loaded:l.loaded,total:l.total})}),s.resolve({isStreamingSupported:t.isStreamingSupported,isRangeSupported:t.isRangeSupported,contentLength:t.contentLength})}),s.reject),s.promise})),l.on("GetRangeReader",((l,i)=>{(0,_util.assert)(this._networkStream,"GetRangeReader - no `IPDFStream` instance available.");const s=this._networkStream.getRangeReader(l.begin,l.end);s?(i.onPull=()=>{s.read().then((function({value:l,done:s}){s?i.close():((0,_util.assert)((0,_util.isArrayBuffer)(l),"GetRangeReader - expected an ArrayBuffer."),i.enqueue(new Uint8Array(l),1,[l]))})).catch((l=>{i.error(l)}))},i.onCancel=l=>{s.cancel(l),i.ready.catch((l=>{if(!this.destroyed)throw l}))}):i.close()})),l.on("GetDoc",(({pdfInfo:l})=>{this._numPages=l.numPages,this._htmlForXfa=l.htmlForXfa,delete l.htmlForXfa,i._capability.resolve(new PDFDocumentProxy(l,this))})),l.on("DocException",(function(l){let s;switch(l.name){case"PasswordException":s=new _util.PasswordException(l.message,l.code);break;case"InvalidPDFException":s=new _util.InvalidPDFException(l.message);break;case"MissingPDFException":s=new _util.MissingPDFException(l.message);break;case"UnexpectedResponseException":s=new _util.UnexpectedResponseException(l.message,l.status);break;case"UnknownErrorException":s=new _util.UnknownErrorException(l.message,l.details);break;default:(0,_util.unreachable)("DocException - expected a valid Error.")}i._capability.reject(s)})),l.on("PasswordRequest",(l=>{if(this._passwordCapability=(0,_util.createPromiseCapability)(),i.onPassword){const t=l=>{l instanceof Error?this._passwordCapability.reject(l):this._passwordCapability.resolve({password:l})};try{i.onPassword(t,l.code)}catch(s){this._passwordCapability.reject(s)}}else this._passwordCapability.reject(new _util.PasswordException(l.message,l.code));return this._passwordCapability.promise})),l.on("DataLoaded",(l=>{i.onProgress?.({loaded:l.length,total:l.length}),this.downloadInfoCapability.resolve(l)})),l.on("StartRenderPage",(l=>{if(this.destroyed)return;const i=this.#d.get(l.pageIndex);i._startRenderPage(l.transparency,l.cacheKey)})),l.on("commonobj",(([i,s,t])=>{if(!this.destroyed&&!this.commonObjs.has(i))switch(s){case"Font":const c=this._params;if("error"in t){const l=t.error;(0,_util.warn)(`Error during font loading: ${l}`),this.commonObjs.resolve(i,l);break}let d=null;c.pdfBug&&globalThis.FontInspector?.enabled&&(d={registerFont(l,i){globalThis.FontInspector.fontAdded(l,i)}});const Z=new _font_loader.FontFaceObject(t,{isEvalSupported:c.isEvalSupported,disableFontFace:c.disableFontFace,ignoreErrors:c.ignoreErrors,onUnsupportedFeature:this._onUnsupportedFeature.bind(this),fontRegistry:d});this.fontLoader.bind(Z).catch((s=>l.sendWithPromise("FontFallback",{id:i}))).finally((()=>{!c.fontExtraProperties&&Z.data&&(Z.data=null),this.commonObjs.resolve(i,Z)}));break;case"FontPath":case"Image":this.commonObjs.resolve(i,t);break;default:throw new Error(`Got unknown common object type ${s}`)}})),l.on("obj",(([l,i,s,t])=>{if(this.destroyed)return;const c=this.#d.get(i);if(!c.objs.has(l))switch(s){case"Image":c.objs.resolve(l,t);const i=8e6;if(t){let l;if(t.bitmap){const{bitmap:i,width:s,height:d}=t;l=s*d*4,c._bitmaps.add(i)}else l=t.data?.length||0;l>i&&(c.cleanupAfterRender=!0)}break;case"Pattern":c.objs.resolve(l,t);break;default:throw new Error(`Got unknown object type ${s}`)}})),l.on("DocProgress",(l=>{this.destroyed||i.onProgress?.({loaded:l.loaded,total:l.total})})),l.on("DocStats",(l=>{this.destroyed||(this.#c=Object.freeze({streamTypes:Object.freeze(l.streamTypes),fontTypes:Object.freeze(l.fontTypes)}))})),l.on("UnsupportedFeature",this._onUnsupportedFeature.bind(this)),l.on("FetchBuiltInCMap",(l=>this.destroyed?Promise.reject(new Error("Worker was destroyed.")):this.CMapReaderFactory?this.CMapReaderFactory.fetch(l):Promise.reject(new Error("CMapReaderFactory not initialized, see the `useWorkerFetch` parameter.")))),l.on("FetchStandardFontData",(l=>this.destroyed?Promise.reject(new Error("Worker was destroyed.")):this.StandardFontDataFactory?this.StandardFontDataFactory.fetch(l):Promise.reject(new Error("StandardFontDataFactory not initialized, see the `useWorkerFetch` parameter."))))}_onUnsupportedFeature({featureId:l}){this.destroyed||this.loadingTask.onUnsupportedFeature?.(l)}getData(){return this.messageHandler.sendWithPromise("GetData",null)}saveDocument(){return this.annotationStorage.size<=0&&(0,_util.warn)("saveDocument called while `annotationStorage` is empty, please use the getData-method instead."),this.messageHandler.sendWithPromise("SaveDocument",{isPureXfa:!!this._htmlForXfa,numPages:this._numPages,annotationStorage:this.annotationStorage.serializable,filename:this._fullReader?.filename??null}).finally((()=>{this.annotationStorage.resetModified()}))}getPage(l){if(!Number.isInteger(l)||l<=0||l>this._numPages)return Promise.reject(new Error("Invalid page request."));const i=l-1,s=this.#Z.get(i);if(s)return s;const t=this.messageHandler.sendWithPromise("GetPage",{pageIndex:i}).then((l=>{if(this.destroyed)throw new Error("Transport destroyed");const s=new PDFPageProxy(i,l,this,this._params.ownerDocument,this._params.pdfBug);return this.#d.set(i,s),s}));return this.#Z.set(i,t),t}getPageIndex(l){return"object"!==typeof l||null===l||!Number.isInteger(l.num)||l.num<0||!Number.isInteger(l.gen)||l.gen<0?Promise.reject(new Error("Invalid pageIndex request.")):this.messageHandler.sendWithPromise("GetPageIndex",{num:l.num,gen:l.gen})}getAnnotations(l,i){return this.messageHandler.sendWithPromise("GetAnnotations",{pageIndex:l,intent:i})}getFieldObjects(){return this._getFieldObjectsPromise||=this.messageHandler.sendWithPromise("GetFieldObjects",null)}hasJSActions(){return this._hasJSActionsPromise||=this.messageHandler.sendWithPromise("HasJSActions",null)}getCalculationOrderIds(){return this.messageHandler.sendWithPromise("GetCalculationOrderIds",null)}getDestinations(){return this.messageHandler.sendWithPromise("GetDestinations",null)}getDestination(l){return"string"!==typeof l?Promise.reject(new Error("Invalid destination request.")):this.messageHandler.sendWithPromise("GetDestination",{id:l})}getPageLabels(){return this.messageHandler.sendWithPromise("GetPageLabels",null)}getPageLayout(){return this.messageHandler.sendWithPromise("GetPageLayout",null)}getPageMode(){return this.messageHandler.sendWithPromise("GetPageMode",null)}getViewerPreferences(){return this.messageHandler.sendWithPromise("GetViewerPreferences",null)}getOpenAction(){return this.messageHandler.sendWithPromise("GetOpenAction",null)}getAttachments(){return this.messageHandler.sendWithPromise("GetAttachments",null)}getJavaScript(){return this.messageHandler.sendWithPromise("GetJavaScript",null)}getDocJSActions(){return this.messageHandler.sendWithPromise("GetDocJSActions",null)}getPageJSActions(l){return this.messageHandler.sendWithPromise("GetPageJSActions",{pageIndex:l})}getStructTree(l){return this.messageHandler.sendWithPromise("GetStructTree",{pageIndex:l})}getOutline(){return this.messageHandler.sendWithPromise("GetOutline",null)}getOptionalContentConfig(){return this.messageHandler.sendWithPromise("GetOptionalContentConfig",null).then((l=>new _optional_content_config.OptionalContentConfig(l)))}getPermissions(){return this.messageHandler.sendWithPromise("GetPermissions",null)}getMetadata(){return this.#b||=this.messageHandler.sendWithPromise("GetMetadata",null).then((l=>({info:l[0],metadata:l[1]?new _metadata.Metadata(l[1]):null,contentDispositionFilename:this._fullReader?.filename??null,contentLength:this._fullReader?.contentLength??null})))}getMarkInfo(){return this.messageHandler.sendWithPromise("GetMarkInfo",null)}async startCleanup(l=!1){if(!this.destroyed){await this.messageHandler.sendWithPromise("Cleanup",null);for(const l of this.#d.values()){const i=l.cleanup();if(!i)throw new Error(`startCleanup: Page ${l.pageNumber} is currently rendering.`)}this.commonObjs.clear(),l||this.fontLoader.clear(),this.#b=null,this._getFieldObjectsPromise=null,this._hasJSActionsPromise=null}}get loadingParams(){const l=this._params;return(0,_util.shadow)(this,"loadingParams",{disableAutoFetch:l.disableAutoFetch,enableXfa:l.enableXfa})}}class PDFObjects{#a=Object.create(null);#m(l){const i=this.#a[l];return i||(this.#a[l]={capability:(0,_util.createPromiseCapability)(),data:null})}get(l,i=null){if(i){const s=this.#m(l);return s.capability.promise.then((()=>i(s.data))),null}const s=this.#a[l];if(!s?.capability.settled)throw new Error(`Requesting object that isn't resolved yet ${l}.`);return s.data}has(l){const i=this.#a[l];return i?.capability.settled||!1}resolve(l,i=null){const s=this.#m(l);s.data=i,s.capability.resolve()}clear(){this.#a=Object.create(null)}}class RenderTask{#e=null;constructor(l){this.#e=l,this.onContinue=null}get promise(){return this.#e.capability.promise}cancel(){this.#e.cancel()}get separateAnnots(){const{separateAnnots:l}=this.#e.operatorList;if(!l)return!1;const{annotationCanvasMap:i}=this.#e;return l.form||l.canvas&&i?.size>0}}exports.RenderTask=RenderTask;class InternalRenderTask{static#W=new WeakSet;constructor({callback:l,params:i,objs:s,commonObjs:t,annotationCanvasMap:c,operatorList:d,pageIndex:Z,canvasFactory:b,useRequestAnimationFrame:a=!1,pdfBug:m=!1,pageColors:e=null}){this.callback=l,this.params=i,this.objs=s,this.commonObjs=t,this.annotationCanvasMap=c,this.operatorListIdx=null,this.operatorList=d,this._pageIndex=Z,this.canvasFactory=b,this._pdfBug=m,this.pageColors=e,this.running=!1,this.graphicsReadyCallback=null,this.graphicsReady=!1,this._useRequestAnimationFrame=!0===a&&"undefined"!==typeof window,this.cancelled=!1,this.capability=(0,_util.createPromiseCapability)(),this.task=new RenderTask(this),this._cancelBound=this.cancel.bind(this),this._continueBound=this._continue.bind(this),this._scheduleNextBound=this._scheduleNext.bind(this),this._nextBound=this._next.bind(this),this._canvas=i.canvasContext.canvas}get completed(){return this.capability.promise.catch((function(){}))}initializeGraphics({transparency:l=!1,optionalContentConfig:i}){if(this.cancelled)return;if(this._canvas){if(InternalRenderTask.#W.has(this._canvas))throw new Error("Cannot use the same canvas during multiple render() operations. Use different canvas or ensure previous operations were cancelled or completed.");InternalRenderTask.#W.add(this._canvas)}this._pdfBug&&globalThis.StepperManager?.enabled&&(this.stepper=globalThis.StepperManager.create(this._pageIndex),this.stepper.init(this.operatorList),this.stepper.nextBreakPoint=this.stepper.getNextBreakPoint());const{canvasContext:s,viewport:t,transform:c,background:d}=this.params;this.gfx=new _canvas.CanvasGraphics(s,this.commonObjs,this.objs,this.canvasFactory,i,this.annotationCanvasMap,this.pageColors),this.gfx.beginDrawing({transform:c,viewport:t,transparency:l,background:d}),this.operatorListIdx=0,this.graphicsReady=!0,this.graphicsReadyCallback?.()}cancel(l=null){this.running=!1,this.cancelled=!0,this.gfx?.endDrawing(),this._canvas&&InternalRenderTask.#W.delete(this._canvas),this.callback(l||new _display_utils.RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex+1}`,"canvas"))}operatorListChanged(){this.graphicsReady?(this.stepper?.updateOperatorList(this.operatorList),this.running||this._continue()):this.graphicsReadyCallback||(this.graphicsReadyCallback=this._continueBound)}_continue(){this.running=!0,this.cancelled||(this.task.onContinue?this.task.onContinue(this._scheduleNextBound):this._scheduleNext())}_scheduleNext(){this._useRequestAnimationFrame?window.requestAnimationFrame((()=>{this._nextBound().catch(this._cancelBound)})):Promise.resolve().then(this._nextBound).catch(this._cancelBound)}async _next(){this.cancelled||(this.operatorListIdx=this.gfx.executeOperatorList(this.operatorList,this.operatorListIdx,this._continueBound,this.stepper),this.operatorListIdx===this.operatorList.argsArray.length&&(this.running=!1,this.operatorList.lastChunk&&(this.gfx.endDrawing(),this._canvas&&InternalRenderTask.#W.delete(this._canvas),this.callback())))}}const version="3.0.279";exports.version=version;const build="d0823066c";exports.build=build},(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.PrintAnnotationStorage=i.AnnotationStorage=void 0;var t=s(1),c=s(4),d=s(8);class Z{constructor(){this._storage=new Map,this._modified=!1,this.onSetModified=null,this.onResetModified=null,this.onAnnotationEditor=null}getValue(l,i){const s=this._storage.get(l);return void 0===s?i:Object.assign(i,s)}getRawValue(l){return this._storage.get(l)}remove(l){if(this._storage.delete(l),0===this._storage.size&&this.resetModified(),"function"===typeof this.onAnnotationEditor){for(const l of this._storage.values())if(l instanceof c.AnnotationEditor)return;this.onAnnotationEditor(null)}}setValue(l,i){const s=this._storage.get(l);let t=!1;if(void 0!==s)for(const[c,d]of Object.entries(i))s[c]!==d&&(t=!0,s[c]=d);else t=!0,this._storage.set(l,i);t&&this.#n(),i instanceof c.AnnotationEditor&&"function"===typeof this.onAnnotationEditor&&this.onAnnotationEditor(i.constructor._type)}has(l){return this._storage.has(l)}getAll(){return this._storage.size>0?(0,t.objectFromMap)(this._storage):null}get size(){return this._storage.size}#n(){this._modified||(this._modified=!0,"function"===typeof this.onSetModified&&this.onSetModified())}resetModified(){this._modified&&(this._modified=!1,"function"===typeof this.onResetModified&&this.onResetModified())}get print(){return new b(this)}get serializable(){if(0===this._storage.size)return null;const l=new Map;for(const[i,s]of this._storage){const t=s instanceof c.AnnotationEditor?s.serialize():s;t&&l.set(i,t)}return l}static getHash(l){if(!l)return"";const i=new d.MurmurHash3_64;for(const[s,t]of l)i.update(`${s}:${JSON.stringify(t)}`);return i.hexdigest()}}i.AnnotationStorage=Z;class b extends Z{#h=null;constructor(l){super(),this.#h=structuredClone(l.serializable)}get print(){(0,t.unreachable)("Should not call PrintAnnotationStorage.print")}get serializable(){return this.#h}}i.PrintAnnotationStorage=b},(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.AnnotationEditor=void 0;var t=s(5),c=s(1);class d{#G=this.focusin.bind(this);#u=this.focusout.bind(this);#N=!1;#M=!1;#I=!1;#Y=d._zIndex++;static _colorManager=new t.ColorManager;static _zIndex=1;constructor(l){this.constructor===d&&(0,c.unreachable)("Cannot initialize AnnotationEditor."),this.parent=l.parent,this.id=l.id,this.width=this.height=null,this.pageIndex=l.parent.pageIndex,this.name=l.name,this.div=null;const[i,s]=this.parent.viewportBaseDimensions;this.x=l.x/i,this.y=l.y/s,this.rotation=this.parent.viewport.rotation,this.isAttachedToDOM=!1}static get _defaultLineColor(){return(0,c.shadow)(this,"_defaultLineColor",this._colorManager.getHexCode("CanvasText"))}setInBackground(){this.div.style.zIndex=0}setInForeground(){this.div.style.zIndex=this.#Y}focusin(l){this.#N?this.#N=!1:this.parent.setSelected(this)}focusout(l){if(!this.isAttachedToDOM)return;const i=l.relatedTarget;i?.closest(`#${this.id}`)||(l.preventDefault(),this.parent.isMultipleSelection||this.commitOrRemove())}commitOrRemove(){this.isEmpty()?this.remove():this.commit()}commit(){this.parent.addToAnnotationStorage(this)}dragstart(l){const i=this.parent.div.getBoundingClientRect();this.startX=l.clientX-i.x,this.startY=l.clientY-i.y,l.dataTransfer.setData("text/plain",this.id),l.dataTransfer.effectAllowed="move"}setAt(l,i,s,t){const[c,d]=this.parent.viewportBaseDimensions;[s,t]=this.screenToPageTranslation(s,t),this.x=(l+s)/c,this.y=(i+t)/d,this.div.style.left=100*this.x+"%",this.div.style.top=100*this.y+"%"}translate(l,i){const[s,t]=this.parent.viewportBaseDimensions;[l,i]=this.screenToPageTranslation(l,i),this.x+=l/s,this.y+=i/t,this.div.style.left=100*this.x+"%",this.div.style.top=100*this.y+"%"}screenToPageTranslation(l,i){const{rotation:s}=this.parent.viewport;switch(s){case 90:return[i,-l];case 180:return[-l,-i];case 270:return[-i,l];default:return[l,i]}}setDims(l,i){const[s,t]=this.parent.viewportBaseDimensions;this.div.style.width=100*l/s+"%",this.div.style.height=100*i/t+"%"}fixDims(){const{style:l}=this.div,{height:i,width:s}=l,t=s.endsWith("%"),c=i.endsWith("%");if(t&&c)return;const[d,Z]=this.parent.viewportBaseDimensions;t||(l.width=100*parseFloat(s)/d+"%"),c||(l.height=100*parseFloat(i)/Z+"%")}getInitialTranslation(){return[0,0]}render(){this.div=document.createElement("div"),this.div.setAttribute("data-editor-rotation",(360-this.rotation)%360),this.div.className=this.name,this.div.setAttribute("id",this.id),this.div.setAttribute("tabIndex",0),this.setInForeground(),this.div.addEventListener("focusin",this.#G),this.div.addEventListener("focusout",this.#u);const[l,i]=this.getInitialTranslation();return this.translate(l,i),(0,t.bindEvents)(this,this.div,["dragstart","pointerdown"]),this.div}pointerdown(l){const i=t.KeyboardManager.platform.isMac;0!==l.button||l.ctrlKey&&i?l.preventDefault():(l.ctrlKey&&!i||l.shiftKey||l.metaKey&&i?this.parent.toggleSelected(this):this.parent.setSelected(this),this.#N=!0)}getRect(l,i){const[s,t]=this.parent.viewportBaseDimensions,[c,d]=this.parent.pageDimensions,Z=c*l/s,b=d*i/t,a=this.x*c,m=this.y*d,e=this.width*c,W=this.height*d;switch(this.rotation){case 0:return[a+Z,d-m-b-W,a+Z+e,d-m-b];case 90:return[a+b,d-m+Z,a+b+W,d-m+Z+e];case 180:return[a-Z-e,d-m+b,a-Z,d-m+b+W];case 270:return[a-b-W,d-m-Z-e,a-b,d-m-Z];default:throw new Error("Invalid rotation")}}getRectInCurrentCoords(l,i){const[s,t,c,d]=l,Z=c-s,b=d-t;switch(this.rotation){case 0:return[s,i-d,Z,b];case 90:return[s,i-t,b,Z];case 180:return[c,i-t,Z,b];case 270:return[c,i-d,b,Z];default:throw new Error("Invalid rotation")}}onceAdded(){}isEmpty(){return!1}enableEditMode(){this.#I=!0}disableEditMode(){this.#I=!1}isInEditMode(){return this.#I}shouldGetKeyboardEvents(){return!1}needsToBeRebuilt(){return this.div&&!this.isAttachedToDOM}rebuild(){this.div?.addEventListener("focusin",this.#G)}serialize(){(0,c.unreachable)("An editor must be serializable")}static deserialize(l,i){const s=new this.prototype.constructor({parent:i,id:i.getNextId()});s.rotation=l.rotation;const[t,c]=i.pageDimensions,[d,Z,b,a]=s.getRectInCurrentCoords(l.rect,c);return s.x=d/t,s.y=Z/c,s.width=b/t,s.height=a/c,s}remove(){this.div.removeEventListener("focusin",this.#G),this.div.removeEventListener("focusout",this.#u),this.isEmpty()||this.commit(),this.parent.remove(this)}select(){this.div?.classList.add("selectedEditor")}unselect(){this.div?.classList.remove("selectedEditor")}updateParams(l,i){}disableEditing(){}enableEditing(){}get propertiesToUpdate(){return{}}get contentDiv(){return this.div}get isEditing(){return this.#M}set isEditing(l){this.#M=l,l?(this.parent.setSelected(this),this.parent.setActiveEditor(this)):this.parent.setActiveEditor(null)}}i.AnnotationEditor=d},(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.KeyboardManager=i.CommandManager=i.ColorManager=i.AnnotationEditorUIManager=void 0,i.bindEvents=d,i.opacityToHex=Z;var t=s(1),c=s(6);function d(l,i,s){for(const t of s)i.addEventListener(t,l[t].bind(l))}function Z(l){return Math.round(Math.min(255,Math.max(1,255*l))).toString(16).padStart(2,"0")}class b{#X=0;getId(){return`${t.AnnotationEditorPrefix}${this.#X++}`}}class a{#L=[];#y=!1;#o;#V=-1;constructor(l=128){this.#o=l}add({cmd:l,undo:i,mustExec:s,type:t=NaN,overwriteIfSameType:c=!1,keepUndo:d=!1}){if(s&&l(),this.#y)return;const Z={cmd:l,undo:i,type:t};if(-1===this.#V)return this.#L.length>0&&(this.#L.length=0),this.#V=0,void this.#L.push(Z);if(c&&this.#L[this.#V].type===t)return d&&(Z.undo=this.#L[this.#V].undo),void(this.#L[this.#V]=Z);const b=this.#V+1;b===this.#o?this.#L.splice(0,1):(this.#V=b,b<this.#L.length&&this.#L.splice(b)),this.#L.push(Z)}undo(){-1!==this.#V&&(this.#y=!0,this.#L[this.#V].undo(),this.#y=!1,this.#V-=1)}redo(){this.#V<this.#L.length-1&&(this.#V+=1,this.#y=!0,this.#L[this.#V].cmd(),this.#y=!1)}hasSomethingToUndo(){return-1!==this.#V}hasSomethingToRedo(){return this.#V<this.#L.length-1}destroy(){this.#L=null}}i.CommandManager=a;class m{constructor(l){this.buffer=[],this.callbacks=new Map,this.allKeys=new Set;const i=m.platform.isMac;for(const[s,t]of l)for(const l of s){const s=l.startsWith("mac+");i&&s?(this.callbacks.set(l.slice(4),t),this.allKeys.add(l.split("+").at(-1))):i||s||(this.callbacks.set(l,t),this.allKeys.add(l.split("+").at(-1)))}}static get platform(){const l="undefined"!==typeof navigator?navigator.platform:"";return(0,t.shadow)(this,"platform",{isWin:l.includes("Win"),isMac:l.includes("Mac")})}#p(l){l.altKey&&this.buffer.push("alt"),l.ctrlKey&&this.buffer.push("ctrl"),l.metaKey&&this.buffer.push("meta"),l.shiftKey&&this.buffer.push("shift"),this.buffer.push(l.key);const i=this.buffer.join("+");return this.buffer.length=0,i}exec(l,i){if(!this.allKeys.has(i.key))return;const s=this.callbacks.get(this.#p(i));s&&(s.bind(l)(),i.stopPropagation(),i.preventDefault())}}i.KeyboardManager=m;class e{static _colorsMapping=new Map([["CanvasText",[0,0,0]],["Canvas",[255,255,255]]]);get _colors(){const l=new Map([["CanvasText",null],["Canvas",null]]);return(0,c.getColorValues)(l),(0,t.shadow)(this,"_colors",l)}convert(l){const i=(0,c.getRGB)(l);if(!window.matchMedia("(forced-colors: active)").matches)return i;for(const[s,t]of this._colors)if(t.every(((l,s)=>l===i[s])))return e._colorsMapping.get(s);return i}getHexCode(l){const i=this._colors.get(l);return i?t.Util.makeHexColor(...i):l}}i.ColorManager=e;class W{#T=null;#w=new Map;#z=new Map;#R=new a;#r=0;#C=null;#S=null;#x=new b;#D=!1;#J=t.AnnotationEditorType.NONE;#k=new Set;#j=this.copy.bind(this);#F=this.cut.bind(this);#U=this.paste.bind(this);#O=this.keydown.bind(this);#g=this.onEditingAction.bind(this);#K=this.onPageChanging.bind(this);#E={isEditing:!1,isEmpty:!0,hasSomethingToUndo:!1,hasSomethingToRedo:!1,hasSelectedEditor:!1};#Q=null;static _keyboardManager=new m([[["ctrl+a","mac+meta+a"],W.prototype.selectAll],[["ctrl+z","mac+meta+z"],W.prototype.undo],[["ctrl+y","ctrl+shift+Z","mac+meta+shift+Z"],W.prototype.redo],[["Backspace","alt+Backspace","ctrl+Backspace","shift+Backspace","mac+Backspace","mac+alt+Backspace","mac+ctrl+Backspace","Delete","ctrl+Delete","shift+Delete"],W.prototype.delete],[["Escape","mac+Escape"],W.prototype.unselectAll]]);constructor(l,i){this.#Q=l,this.#S=i,this.#S._on("editingaction",this.#g),this.#S._on("pagechanging",this.#K)}destroy(){this.#v(),this.#S._off("editingaction",this.#g),this.#S._off("pagechanging",this.#K);for(const l of this.#z.values())l.destroy();this.#z.clear(),this.#w.clear(),this.#T=null,this.#k.clear(),this.#R.destroy()}onPageChanging({pageNumber:l}){this.#r=l-1}focusMainContainer(){this.#Q.focus()}#H(){this.#Q.addEventListener("keydown",this.#O)}#v(){this.#Q.removeEventListener("keydown",this.#O)}#P(){document.addEventListener("copy",this.#j),document.addEventListener("cut",this.#F),document.addEventListener("paste",this.#U)}#B(){document.removeEventListener("copy",this.#j),document.removeEventListener("cut",this.#F),document.removeEventListener("paste",this.#U)}copy(l){if(l.preventDefault(),this.#T&&this.#T.commitOrRemove(),!this.hasSelection)return;const i=[];for(const s of this.#k)s.isEmpty()||i.push(s.serialize());0!==i.length&&l.clipboardData.setData("application/pdfjs",JSON.stringify(i))}cut(l){this.copy(l),this.delete()}paste(l){l.preventDefault();let i=l.clipboardData.getData("application/pdfjs");if(!i)return;try{i=JSON.parse(i)}catch(c){return void(0,t.warn)(`paste: "${c.message}".`)}if(!Array.isArray(i))return;this.unselectAll();const s=this.#z.get(this.#r);try{const l=[];for(const d of i){const i=s.deserialize(d);if(!i)return;l.push(i)}const t=()=>{for(const i of l)this.#f(i);this.#A(l)},c=()=>{for(const i of l)i.remove()};this.addCommands({cmd:t,undo:c,mustExec:!0})}catch(c){(0,t.warn)(`paste: "${c.message}".`)}}keydown(l){this.getActive()?.shouldGetKeyboardEvents()||W._keyboardManager.exec(this,l)}onEditingAction(l){["undo","redo","delete","selectAll"].includes(l.name)&&this[l.name]()}#_(l){const i=Object.entries(l).some((([l,i])=>this.#E[l]!==i));i&&this.#S.dispatch("annotationeditorstateschanged",{source:this,details:Object.assign(this.#E,l)})}#q(l){this.#S.dispatch("annotationeditorparamschanged",{source:this,details:l})}setEditingState(l){l?(this.#H(),this.#P(),this.#_({isEditing:this.#J!==t.AnnotationEditorType.NONE,isEmpty:this.#$(),hasSomethingToUndo:this.#R.hasSomethingToUndo(),hasSomethingToRedo:this.#R.hasSomethingToRedo(),hasSelectedEditor:!1})):(this.#v(),this.#B(),this.#_({isEditing:!1}))}registerEditorTypes(l){if(!this.#C){this.#C=l;for(const l of this.#C)this.#q(l.defaultPropertiesToUpdate)}}getId(){return this.#x.getId()}addLayer(l){this.#z.set(l.pageIndex,l),this.#D?l.enable():l.disable()}removeLayer(l){this.#z.delete(l.pageIndex)}updateMode(l){if(this.#J=l,l===t.AnnotationEditorType.NONE)this.setEditingState(!1),this.#ll();else{this.setEditingState(!0),this.#il();for(const i of this.#z.values())i.updateMode(l)}}updateToolbar(l){l!==this.#J&&this.#S.dispatch("switchannotationeditormode",{source:this,mode:l})}updateParams(l,i){if(this.#C){for(const s of this.#k)s.updateParams(l,i);for(const s of this.#C)s.updateDefaultParams(l,i)}}#il(){if(!this.#D){this.#D=!0;for(const l of this.#z.values())l.enable()}}#ll(){if(this.unselectAll(),this.#D){this.#D=!1;for(const l of this.#z.values())l.disable()}}getEditors(l){const i=[];for(const s of this.#w.values())s.pageIndex===l&&i.push(s);return i}getEditor(l){return this.#w.get(l)}addEditor(l){this.#w.set(l.id,l)}removeEditor(l){this.#w.delete(l.id),this.unselect(l)}#f(l){const i=this.#z.get(l.pageIndex);i?i.addOrRebuild(l):this.addEditor(l)}setActiveEditor(l){this.#T!==l&&(this.#T=l,l&&this.#q(l.propertiesToUpdate))}toggleSelected(l){if(this.#k.has(l))return this.#k.delete(l),l.unselect(),void this.#_({hasSelectedEditor:this.hasSelection});this.#k.add(l),l.select(),this.#q(l.propertiesToUpdate),this.#_({hasSelectedEditor:!0})}setSelected(l){for(const i of this.#k)i!==l&&i.unselect();this.#k.clear(),this.#k.add(l),l.select(),this.#q(l.propertiesToUpdate),this.#_({hasSelectedEditor:!0})}isSelected(l){return this.#k.has(l)}unselect(l){l.unselect(),this.#k.delete(l),this.#_({hasSelectedEditor:this.hasSelection})}get hasSelection(){return 0!==this.#k.size}undo(){this.#R.undo(),this.#_({hasSomethingToUndo:this.#R.hasSomethingToUndo(),hasSomethingToRedo:!0,isEmpty:this.#$()})}redo(){this.#R.redo(),this.#_({hasSomethingToUndo:!0,hasSomethingToRedo:this.#R.hasSomethingToRedo(),isEmpty:this.#$()})}addCommands(l){this.#R.add(l),this.#_({hasSomethingToUndo:!0,hasSomethingToRedo:!1,isEmpty:this.#$()})}#$(){if(0===this.#w.size)return!0;if(1===this.#w.size)for(const l of this.#w.values())return l.isEmpty();return!1}delete(){if(this.commitOrRemove(),!this.hasSelection)return;const l=[...this.#k],i=()=>{for(const i of l)i.remove()},s=()=>{for(const i of l)this.#f(i)};this.addCommands({cmd:i,undo:s,mustExec:!0})}commitOrRemove(){this.#T?.commitOrRemove()}#A(l){this.#k.clear();for(const i of l)i.isEmpty()||(this.#k.add(i),i.select());this.#_({hasSelectedEditor:!0})}selectAll(){for(const l of this.#k)l.commit();this.#A(this.#w.values())}unselectAll(){if(this.#T)this.#T.commitOrRemove();else if(0!==this.#k.size){for(const l of this.#k)l.unselect();this.#k.clear(),this.#_({hasSelectedEditor:!1})}}isActive(l){return this.#T===l}getActive(){return this.#T}getMode(){return this.#J}}i.AnnotationEditorUIManager=W},(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.StatTimer=i.RenderingCancelledException=i.PixelsPerInch=i.PageViewport=i.PDFDateString=i.DOMStandardFontDataFactory=i.DOMSVGFactory=i.DOMCanvasFactory=i.DOMCMapReaderFactory=i.AnnotationPrefix=void 0,i.deprecated=y,i.getColorValues=w,i.getCurrentTransform=z,i.getCurrentTransformInverse=R,i.getFilenameFromUrl=M,i.getPdfFilenameFromUrl=I,i.getRGB=T,i.getXfaPageViewport=p,i.isDataScheme=u,i.isPdfFile=N,i.isValidFetchUrl=X,i.loadScript=L;var t=s(7),c=s(1);const d="http://www.w3.org/2000/svg",Z="pdfjs_internal_id_";i.AnnotationPrefix=Z;class b{static CSS=96;static PDF=72;static PDF_TO_CSS_UNITS=this.CSS/this.PDF}i.PixelsPerInch=b;class a extends t.BaseCanvasFactory{constructor({ownerDocument:l=globalThis.document}={}){super(),this._document=l}_createCanvas(l,i){const s=this._document.createElement("canvas");return s.width=l,s.height=i,s}}async function m(l,i=!1){if(X(l,document.baseURI)){const s=await fetch(l);if(!s.ok)throw new Error(s.statusText);return i?new Uint8Array(await s.arrayBuffer()):(0,c.stringToBytes)(await s.text())}return new Promise(((s,t)=>{const d=new XMLHttpRequest;d.open("GET",l,!0),i&&(d.responseType="arraybuffer"),d.onreadystatechange=()=>{if(d.readyState===XMLHttpRequest.DONE){if(200===d.status||0===d.status){let l;if(i&&d.response?l=new Uint8Array(d.response):!i&&d.responseText&&(l=(0,c.stringToBytes)(d.responseText)),l)return void s(l)}t(new Error(d.statusText))}},d.send(null)}))}i.DOMCanvasFactory=a;class e extends t.BaseCMapReaderFactory{_fetchData(l,i){return m(l,this.isCompressed).then((l=>({cMapData:l,compressionType:i})))}}i.DOMCMapReaderFactory=e;class W extends t.BaseStandardFontDataFactory{_fetchData(l){return m(l,!0)}}i.DOMStandardFontDataFactory=W;class n extends t.BaseSVGFactory{_createSVG(l){return document.createElementNS(d,l)}}i.DOMSVGFactory=n;class h{constructor({viewBox:l,scale:i,rotation:s,offsetX:t=0,offsetY:c=0,dontFlip:d=!1}){this.viewBox=l,this.scale=i,this.rotation=s,this.offsetX=t,this.offsetY=c;const Z=(l[2]+l[0])/2,b=(l[3]+l[1])/2;let a,m,e,W,n,h,G,u;switch(s%=360,s<0&&(s+=360),s){case 180:a=-1,m=0,e=0,W=1;break;case 90:a=0,m=1,e=1,W=0;break;case 270:a=0,m=-1,e=-1,W=0;break;case 0:a=1,m=0,e=0,W=-1;break;default:throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees.")}d&&(e=-e,W=-W),0===a?(n=Math.abs(b-l[1])*i+t,h=Math.abs(Z-l[0])*i+c,G=Math.abs(l[3]-l[1])*i,u=Math.abs(l[2]-l[0])*i):(n=Math.abs(Z-l[0])*i+t,h=Math.abs(b-l[1])*i+c,G=Math.abs(l[2]-l[0])*i,u=Math.abs(l[3]-l[1])*i),this.transform=[a*i,m*i,e*i,W*i,n-a*i*Z-e*i*b,h-m*i*Z-W*i*b],this.width=G,this.height=u}clone({scale:l=this.scale,rotation:i=this.rotation,offsetX:s=this.offsetX,offsetY:t=this.offsetY,dontFlip:c=!1}={}){return new h({viewBox:this.viewBox.slice(),scale:l,rotation:i,offsetX:s,offsetY:t,dontFlip:c})}convertToViewportPoint(l,i){return c.Util.applyTransform([l,i],this.transform)}convertToViewportRectangle(l){const i=c.Util.applyTransform([l[0],l[1]],this.transform),s=c.Util.applyTransform([l[2],l[3]],this.transform);return[i[0],i[1],s[0],s[1]]}convertToPdfPoint(l,i){return c.Util.applyInverseTransform([l,i],this.transform)}}i.PageViewport=h;class G extends c.BaseException{constructor(l,i){super(l,"RenderingCancelledException"),this.type=i}}function u(l){const i=l.length;let s=0;while(s<i&&""===l[s].trim())s++;return"data:"===l.substring(s,s+5).toLowerCase()}function N(l){return"string"===typeof l&&/\.pdf$/i.test(l)}function M(l){const i=l.indexOf("#"),s=l.indexOf("?"),t=Math.min(i>0?i:l.length,s>0?s:l.length);return l.substring(l.lastIndexOf("/",t)+1,t)}function I(l,i="document.pdf"){if("string"!==typeof l)return i;if(u(l))return(0,c.warn)('getPdfFilenameFromUrl: ignore "data:"-URL for performance reasons.'),i;const s=/^(?:(?:[^:]+:)?\/\/[^/]+)?([^?#]*)(\?[^#]*)?(#.*)?$/,t=/[^/?#=]+\.pdf\b(?!.*\.pdf\b)/i,d=s.exec(l);let Z=t.exec(d[1])||t.exec(d[2])||t.exec(d[3]);if(Z&&(Z=Z[0],Z.includes("%")))try{Z=t.exec(decodeURIComponent(Z))[0]}catch(b){}return Z||i}i.RenderingCancelledException=G;class Y{constructor(){this.started=Object.create(null),this.times=[]}time(l){l in this.started&&(0,c.warn)(`Timer is already running for ${l}`),this.started[l]=Date.now()}timeEnd(l){l in this.started||(0,c.warn)(`Timer has not been started for ${l}`),this.times.push({name:l,start:this.started[l],end:Date.now()}),delete this.started[l]}toString(){const l=[];let i=0;for(const s of this.times){const l=s.name;l.length>i&&(i=l.length)}for(const s of this.times){const t=s.end-s.start;l.push(`${s.name.padEnd(i)} ${t}ms\n`)}return l.join("")}}function X(l,i){try{const{protocol:s}=i?new URL(l,i):new URL(l);return"http:"===s||"https:"===s}catch(s){return!1}}function L(l,i=!1){return new Promise(((s,t)=>{const c=document.createElement("script");c.src=l,c.onload=function(l){i&&c.remove(),s(l)},c.onerror=function(){t(new Error(`Cannot load script at: ${c.src}`))},(document.head||document.documentElement).append(c)}))}function y(l){console.log("Deprecated API usage: "+l)}let o;i.StatTimer=Y;class V{static toDateObject(l){if(!l||"string"!==typeof l)return null;o||(o=new RegExp("^D:(\\d{4})(\\d{2})?(\\d{2})?(\\d{2})?(\\d{2})?(\\d{2})?([Z|+|-])?(\\d{2})?'?(\\d{2})?'?"));const i=o.exec(l);if(!i)return null;const s=parseInt(i[1],10);let t=parseInt(i[2],10);t=t>=1&&t<=12?t-1:0;let c=parseInt(i[3],10);c=c>=1&&c<=31?c:1;let d=parseInt(i[4],10);d=d>=0&&d<=23?d:0;let Z=parseInt(i[5],10);Z=Z>=0&&Z<=59?Z:0;let b=parseInt(i[6],10);b=b>=0&&b<=59?b:0;const a=i[7]||"Z";let m=parseInt(i[8],10);m=m>=0&&m<=23?m:0;let e=parseInt(i[9],10)||0;return e=e>=0&&e<=59?e:0,"-"===a?(d+=m,Z+=e):"+"===a&&(d-=m,Z-=e),new Date(Date.UTC(s,t,c,d,Z,b))}}function p(l,{scale:i=1,rotation:s=0}){const{width:t,height:c}=l.attributes.style,d=[0,0,parseInt(t),parseInt(c)];return new h({viewBox:d,scale:i,rotation:s})}function T(l){if(l.startsWith("#")){const i=parseInt(l.slice(1),16);return[(16711680&i)>>16,(65280&i)>>8,255&i]}return l.startsWith("rgb(")?l.slice(4,-1).split(",").map((l=>parseInt(l))):l.startsWith("rgba(")?l.slice(5,-1).split(",").map((l=>parseInt(l))).slice(0,3):((0,c.warn)(`Not a valid color format: "${l}"`),[0,0,0])}function w(l){const i=document.createElement("span");i.style.visibility="hidden",document.body.append(i);for(const s of l.keys()){i.style.color=s;const t=window.getComputedStyle(i).color;l.set(s,T(t))}i.remove()}function z(l){const{a:i,b:s,c:t,d:c,e:d,f:Z}=l.getTransform();return[i,s,t,c,d,Z]}function R(l){const{a:i,b:s,c:t,d:c,e:d,f:Z}=l.getTransform().invertSelf();return[i,s,t,c,d,Z]}i.PDFDateString=V},(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.BaseStandardFontDataFactory=i.BaseSVGFactory=i.BaseCanvasFactory=i.BaseCMapReaderFactory=void 0;var t=s(1);class c{constructor(){this.constructor===c&&(0,t.unreachable)("Cannot initialize BaseCanvasFactory.")}create(l,i){if(l<=0||i<=0)throw new Error("Invalid canvas size");const s=this._createCanvas(l,i);return{canvas:s,context:s.getContext("2d")}}reset(l,i,s){if(!l.canvas)throw new Error("Canvas is not specified");if(i<=0||s<=0)throw new Error("Invalid canvas size");l.canvas.width=i,l.canvas.height=s}destroy(l){if(!l.canvas)throw new Error("Canvas is not specified");l.canvas.width=0,l.canvas.height=0,l.canvas=null,l.context=null}_createCanvas(l,i){(0,t.unreachable)("Abstract method `_createCanvas` called.")}}i.BaseCanvasFactory=c;class d{constructor({baseUrl:l=null,isCompressed:i=!1}){this.constructor===d&&(0,t.unreachable)("Cannot initialize BaseCMapReaderFactory."),this.baseUrl=l,this.isCompressed=i}async fetch({name:l}){if(!this.baseUrl)throw new Error('The CMap "baseUrl" parameter must be specified, ensure that the "cMapUrl" and "cMapPacked" API parameters are provided.');if(!l)throw new Error("CMap name must be specified.");const i=this.baseUrl+l+(this.isCompressed?".bcmap":""),s=this.isCompressed?t.CMapCompressionType.BINARY:t.CMapCompressionType.NONE;return this._fetchData(i,s).catch((l=>{throw new Error(`Unable to load ${this.isCompressed?"binary ":""}CMap at: ${i}`)}))}_fetchData(l,i){(0,t.unreachable)("Abstract method `_fetchData` called.")}}i.BaseCMapReaderFactory=d;class Z{constructor({baseUrl:l=null}){this.constructor===Z&&(0,t.unreachable)("Cannot initialize BaseStandardFontDataFactory."),this.baseUrl=l}async fetch({filename:l}){if(!this.baseUrl)throw new Error('The standard font "baseUrl" parameter must be specified, ensure that the "standardFontDataUrl" API parameter is provided.');if(!l)throw new Error("Font filename must be specified.");const i=`${this.baseUrl}${l}`;return this._fetchData(i).catch((l=>{throw new Error(`Unable to load font data at: ${i}`)}))}_fetchData(l){(0,t.unreachable)("Abstract method `_fetchData` called.")}}i.BaseStandardFontDataFactory=Z;class b{constructor(){this.constructor===b&&(0,t.unreachable)("Cannot initialize BaseSVGFactory.")}create(l,i,s=!1){if(l<=0||i<=0)throw new Error("Invalid SVG dimensions");const t=this._createSVG("svg:svg");return t.setAttribute("version","1.1"),s||(t.setAttribute("width",`${l}px`),t.setAttribute("height",`${i}px`)),t.setAttribute("preserveAspectRatio","none"),t.setAttribute("viewBox",`0 0 ${l} ${i}`),t}createElement(l){if("string"!==typeof l)throw new Error("Invalid SVG element type");return this._createSVG(l)}_createSVG(l){(0,t.unreachable)("Abstract method `_createSVG` called.")}}i.BaseSVGFactory=b},(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.MurmurHash3_64=void 0;var t=s(1);const c=3285377520,d=4294901760,Z=65535;class b{constructor(l){this.h1=l?4294967295&l:c,this.h2=l?4294967295&l:c}update(l){let i,s;if("string"===typeof l){i=new Uint8Array(2*l.length),s=0;for(let t=0,c=l.length;t<c;t++){const c=l.charCodeAt(t);c<=255?i[s++]=c:(i[s++]=c>>>8,i[s++]=255&c)}}else{if(!(0,t.isArrayBuffer)(l))throw new Error("Wrong data format in MurmurHash3_64_update. Input must be a string or array.");i=l.slice(),s=i.byteLength}const c=s>>2,b=s-4*c,a=new Uint32Array(i.buffer,0,c);let m=0,e=0,W=this.h1,n=this.h2;const h=3432918353,G=461845907,u=h&Z,N=G&Z;for(let t=0;t<c;t++)1&t?(m=a[t],m=m*h&d|m*u&Z,m=m<<15|m>>>17,m=m*G&d|m*N&Z,W^=m,W=W<<13|W>>>19,W=5*W+3864292196):(e=a[t],e=e*h&d|e*u&Z,e=e<<15|e>>>17,e=e*G&d|e*N&Z,n^=e,n=n<<13|n>>>19,n=5*n+3864292196);switch(m=0,b){case 3:m^=i[4*c+2]<<16;case 2:m^=i[4*c+1]<<8;case 1:m^=i[4*c],m=m*h&d|m*u&Z,m=m<<15|m>>>17,m=m*G&d|m*N&Z,1&c?W^=m:n^=m}this.h1=W,this.h2=n}hexdigest(){let l=this.h1,i=this.h2;l^=i>>>1,l=3981806797*l&d|36045*l&Z,i=4283543511*i&d|(2950163797*(i<<16|l>>>16)&d)>>>16,l^=i>>>1,l=444984403*l&d|60499*l&Z,i=3301882366*i&d|(3120437893*(i<<16|l>>>16)&d)>>>16,l^=i>>>1;const s=(l>>>0).toString(16),t=(i>>>0).toString(16);return s.padStart(8,"0")+t.padStart(8,"0")}}i.MurmurHash3_64=b},(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.FontLoader=i.FontFaceObject=void 0;var t=s(1);class c{constructor({onUnsupportedFeature:l,ownerDocument:i=globalThis.document,styleElement:s=null}){this._onUnsupportedFeature=l,this._document=i,this.nativeFontFaces=[],this.styleElement=null,this.loadingRequests=[],this.loadTestFontId=0}addNativeFontFace(l){this.nativeFontFaces.push(l),this._document.fonts.add(l)}insertRule(l){this.styleElement||(this.styleElement=this._document.createElement("style"),this._document.documentElement.getElementsByTagName("head")[0].append(this.styleElement));const i=this.styleElement.sheet;i.insertRule(l,i.cssRules.length)}clear(){for(const l of this.nativeFontFaces)this._document.fonts.delete(l);this.nativeFontFaces.length=0,this.styleElement&&(this.styleElement.remove(),this.styleElement=null)}async bind(l){if(l.attached||l.missingFile)return;if(l.attached=!0,this.isFontLoadingAPISupported){const i=l.createNativeFontFace();if(i){this.addNativeFontFace(i);try{await i.loaded}catch(s){throw this._onUnsupportedFeature({featureId:t.UNSUPPORTED_FEATURES.errorFontLoadNative}),(0,t.warn)(`Failed to load font '${i.family}': '${s}'.`),l.disableFontFace=!0,s}}return}const i=l.createFontFaceRule();if(i){if(this.insertRule(i),this.isSyncFontLoadingSupported)return;await new Promise((i=>{const s=this._queueLoadingCallback(i);this._prepareFontLoadEvent(l,s)}))}}get isFontLoadingAPISupported(){const l=!!this._document?.fonts;return(0,t.shadow)(this,"isFontLoadingAPISupported",l)}get isSyncFontLoadingSupported(){let l=!1;if("undefined"===typeof navigator)l=!0;else{const i=/Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(navigator.userAgent);i?.[1]>=14&&(l=!0)}return(0,t.shadow)(this,"isSyncFontLoadingSupported",l)}_queueLoadingCallback(l){function i(){(0,t.assert)(!c.done,"completeRequest() cannot be called twice."),c.done=!0;while(s.length>0&&s[0].done){const l=s.shift();setTimeout(l.callback,0)}}const{loadingRequests:s}=this,c={done:!1,complete:i,callback:l};return s.push(c),c}get _loadTestFont(){const l=atob("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQAFQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAAALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgAAAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACMAooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4DIP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAAAAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUAAQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgABAAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABYAAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAAAC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAAAAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQACAQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTjFQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==");return(0,t.shadow)(this,"_loadTestFont",l)}_prepareFontLoadEvent(l,i){function s(l,i){return l.charCodeAt(i)<<24|l.charCodeAt(i+1)<<16|l.charCodeAt(i+2)<<8|255&l.charCodeAt(i+3)}function c(l,i,s,t){const c=l.substring(0,i),d=l.substring(i+s);return c+t+d}let d,Z;const b=this._document.createElement("canvas");b.width=1,b.height=1;const a=b.getContext("2d");let m=0;function e(l,i){if(++m>30)return(0,t.warn)("Load test font never loaded."),void i();a.font="30px "+l,a.fillText(".",0,20);const s=a.getImageData(0,0,1,1);s.data[3]>0?i():setTimeout(e.bind(null,l,i))}const W=`lt${Date.now()}${this.loadTestFontId++}`;let n=this._loadTestFont;const h=976;n=c(n,h,W.length,W);const G=16,u=1482184792;let N=s(n,G);for(d=0,Z=W.length-3;d<Z;d+=4)N=N-u+s(W,d)|0;d<W.length&&(N=N-u+s(W+"XXX",d)|0),n=c(n,G,4,(0,t.string32)(N));const M=`url(data:font/opentype;base64,${btoa(n)});`,I=`@font-face {font-family:"${W}";src:${M}}`;this.insertRule(I);const Y=this._document.createElement("div");Y.style.visibility="hidden",Y.style.width=Y.style.height="10px",Y.style.position="absolute",Y.style.top=Y.style.left="0px";for(const t of[l.loadedName,W]){const l=this._document.createElement("span");l.textContent="Hi",l.style.fontFamily=t,Y.append(l)}this._document.body.append(Y),e(W,(()=>{Y.remove(),i.complete()}))}}i.FontLoader=c;class d{constructor(l,{isEvalSupported:i=!0,disableFontFace:s=!1,ignoreErrors:t=!1,onUnsupportedFeature:c,fontRegistry:d=null}){this.compiledGlyphs=Object.create(null);for(const Z in l)this[Z]=l[Z];this.isEvalSupported=!1!==i,this.disableFontFace=!0===s,this.ignoreErrors=!0===t,this._onUnsupportedFeature=c,this.fontRegistry=d}createNativeFontFace(){if(!this.data||this.disableFontFace)return null;let l;if(this.cssFontInfo){const i={weight:this.cssFontInfo.fontWeight};this.cssFontInfo.italicAngle&&(i.style=`oblique ${this.cssFontInfo.italicAngle}deg`),l=new FontFace(this.cssFontInfo.fontFamily,this.data,i)}else l=new FontFace(this.loadedName,this.data,{});return this.fontRegistry?.registerFont(this),l}createFontFaceRule(){if(!this.data||this.disableFontFace)return null;const l=(0,t.bytesToString)(this.data),i=`url(data:${this.mimetype};base64,${btoa(l)});`;let s;if(this.cssFontInfo){let l=`font-weight: ${this.cssFontInfo.fontWeight};`;this.cssFontInfo.italicAngle&&(l+=`font-style: oblique ${this.cssFontInfo.italicAngle}deg;`),s=`@font-face {font-family:"${this.cssFontInfo.fontFamily}";${l}src:${i}}`}else s=`@font-face {font-family:"${this.loadedName}";src:${i}}`;return this.fontRegistry?.registerFont(this,i),s}getPathGenerator(l,i){if(void 0!==this.compiledGlyphs[i])return this.compiledGlyphs[i];let s;try{s=l.get(this.loadedName+"_path_"+i)}catch(c){if(!this.ignoreErrors)throw c;return this._onUnsupportedFeature({featureId:t.UNSUPPORTED_FEATURES.errorFontGetPath}),(0,t.warn)(`getPathGenerator - ignoring character: "${c}".`),this.compiledGlyphs[i]=function(l,i){}}if(this.isEvalSupported&&t.FeatureTest.isEvalSupported){const l=[];for(const i of s){const s=void 0!==i.args?i.args.join(","):"";l.push("c.",i.cmd,"(",s,");\n")}return this.compiledGlyphs[i]=new Function("c","size",l.join(""))}return this.compiledGlyphs[i]=function(l,i){for(const t of s)"scale"===t.cmd&&(t.args=[i,-i]),l[t.cmd].apply(l,t.args)}}}i.FontFaceObject=d},(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.CanvasGraphics=void 0;var t=s(1),c=s(6),d=s(11),Z=s(13),b=s(12);const a=16,m=100,e=4096,W=15,n=10,h=b.isNodeJS&&"undefined"===typeof Path2D?-1:1e3,G=16;function u(l,i){if(l._removeMirroring)throw new Error("Context is already forwarding operations.");l.__originalSave=l.save,l.__originalRestore=l.restore,l.__originalRotate=l.rotate,l.__originalScale=l.scale,l.__originalTranslate=l.translate,l.__originalTransform=l.transform,l.__originalSetTransform=l.setTransform,l.__originalResetTransform=l.resetTransform,l.__originalClip=l.clip,l.__originalMoveTo=l.moveTo,l.__originalLineTo=l.lineTo,l.__originalBezierCurveTo=l.bezierCurveTo,l.__originalRect=l.rect,l.__originalClosePath=l.closePath,l.__originalBeginPath=l.beginPath,l._removeMirroring=()=>{l.save=l.__originalSave,l.restore=l.__originalRestore,l.rotate=l.__originalRotate,l.scale=l.__originalScale,l.translate=l.__originalTranslate,l.transform=l.__originalTransform,l.setTransform=l.__originalSetTransform,l.resetTransform=l.__originalResetTransform,l.clip=l.__originalClip,l.moveTo=l.__originalMoveTo,l.lineTo=l.__originalLineTo,l.bezierCurveTo=l.__originalBezierCurveTo,l.rect=l.__originalRect,l.closePath=l.__originalClosePath,l.beginPath=l.__originalBeginPath,delete l._removeMirroring},l.save=function(){i.save(),this.__originalSave()},l.restore=function(){i.restore(),this.__originalRestore()},l.translate=function(l,s){i.translate(l,s),this.__originalTranslate(l,s)},l.scale=function(l,s){i.scale(l,s),this.__originalScale(l,s)},l.transform=function(l,s,t,c,d,Z){i.transform(l,s,t,c,d,Z),this.__originalTransform(l,s,t,c,d,Z)},l.setTransform=function(l,s,t,c,d,Z){i.setTransform(l,s,t,c,d,Z),this.__originalSetTransform(l,s,t,c,d,Z)},l.resetTransform=function(){i.resetTransform(),this.__originalResetTransform()},l.rotate=function(l){i.rotate(l),this.__originalRotate(l)},l.clip=function(l){i.clip(l),this.__originalClip(l)},l.moveTo=function(l,s){i.moveTo(l,s),this.__originalMoveTo(l,s)},l.lineTo=function(l,s){i.lineTo(l,s),this.__originalLineTo(l,s)},l.bezierCurveTo=function(l,s,t,c,d,Z){i.bezierCurveTo(l,s,t,c,d,Z),this.__originalBezierCurveTo(l,s,t,c,d,Z)},l.rect=function(l,s,t,c){i.rect(l,s,t,c),this.__originalRect(l,s,t,c)},l.closePath=function(){i.closePath(),this.__originalClosePath()},l.beginPath=function(){i.beginPath(),this.__originalBeginPath()}}class N{constructor(l){this.canvasFactory=l,this.cache=Object.create(null)}getCanvas(l,i,s){let t;return void 0!==this.cache[l]?(t=this.cache[l],this.canvasFactory.reset(t,i,s)):(t=this.canvasFactory.create(i,s),this.cache[l]=t),t}delete(l){delete this.cache[l]}clear(){for(const l in this.cache){const i=this.cache[l];this.canvasFactory.destroy(i),delete this.cache[l]}}}function M(l,i,s,t,d,Z,b,a,m,e){const[W,n,h,G,u,N]=(0,c.getCurrentTransform)(l);if(0===n&&0===h){const c=b*W+u,M=Math.round(c),I=a*G+N,Y=Math.round(I),X=(b+m)*W+u,L=Math.abs(Math.round(X)-M)||1,y=(a+e)*G+N,o=Math.abs(Math.round(y)-Y)||1;return l.setTransform(Math.sign(W),0,0,Math.sign(G),M,Y),l.drawImage(i,s,t,d,Z,0,0,L,o),l.setTransform(W,n,h,G,u,N),[L,o]}if(0===W&&0===G){const c=a*h+u,M=Math.round(c),I=b*n+N,Y=Math.round(I),X=(a+e)*h+u,L=Math.abs(Math.round(X)-M)||1,y=(b+m)*n+N,o=Math.abs(Math.round(y)-Y)||1;return l.setTransform(0,Math.sign(n),Math.sign(h),0,M,Y),l.drawImage(i,s,t,d,Z,0,0,o,L),l.setTransform(W,n,h,G,u,N),[o,L]}l.drawImage(i,s,t,d,Z,b,a,m,e);const M=Math.hypot(W,n),I=Math.hypot(h,G);return[M*m,I*e]}function I(l){const{width:i,height:s}=l;if(i>h||s>h)return null;const t=1e3,c=new Uint8Array([0,2,4,0,1,0,5,4,8,10,0,8,0,2,1,0]),d=i+1;let Z,b,a,m=new Uint8Array(d*(s+1));const e=i+7&-8;let W=new Uint8Array(e*s),n=0;for(const h of l.data){let l=128;while(l>0)W[n++]=h&l?0:255,l>>=1}let G=0;for(n=0,0!==W[n]&&(m[0]=1,++G),b=1;b<i;b++)W[n]!==W[n+1]&&(m[b]=W[n]?2:1,++G),n++;for(0!==W[n]&&(m[b]=2,++G),Z=1;Z<s;Z++){n=Z*e,a=Z*d,W[n-e]!==W[n]&&(m[a]=W[n]?1:8,++G);let l=(W[n]?4:0)+(W[n-e]?8:0);for(b=1;b<i;b++)l=(l>>2)+(W[n+1]?4:0)+(W[n-e+1]?8:0),c[l]&&(m[a+b]=c[l],++G),n++;if(W[n-e]!==W[n]&&(m[a+b]=W[n]?2:4,++G),G>t)return null}for(n=e*(s-1),a=Z*d,0!==W[n]&&(m[a]=8,++G),b=1;b<i;b++)W[n]!==W[n+1]&&(m[a+b]=W[n]?4:8,++G),n++;if(0!==W[n]&&(m[a+b]=4,++G),G>t)return null;const u=new Int32Array([0,d,-1,0,-d,0,0,0,1]),N=new Path2D;for(Z=0;G&&Z<=s;Z++){let l=Z*d;const s=l+i;while(l<s&&!m[l])l++;if(l===s)continue;N.moveTo(l%d,Z);const t=l;let c=m[l];do{const i=u[c];do{l+=i}while(!m[l]);const s=m[l];5!==s&&10!==s?(c=s,m[l]=0):(c=s&51*c>>4,m[l]&=c>>2|c<<2),N.lineTo(l%d,l/d|0),m[l]||--G}while(t!==l);--Z}W=null,m=null;const M=function(l){l.save(),l.scale(1/i,-1/s),l.translate(0,-s),l.fill(N),l.beginPath(),l.restore()};return M}class Y{constructor(l,i){this.alphaIsShape=!1,this.fontSize=0,this.fontSizeScale=1,this.textMatrix=t.IDENTITY_MATRIX,this.textMatrixScale=1,this.fontMatrix=t.FONT_IDENTITY_MATRIX,this.leading=0,this.x=0,this.y=0,this.lineX=0,this.lineY=0,this.charSpacing=0,this.wordSpacing=0,this.textHScale=1,this.textRenderingMode=t.TextRenderingMode.FILL,this.textRise=0,this.fillColor="#000000",this.strokeColor="#000000",this.patternFill=!1,this.fillAlpha=1,this.strokeAlpha=1,this.lineWidth=1,this.activeSMask=null,this.transferMaps=null,this.startNewPathAndClipBox([0,0,l,i])}clone(){const l=Object.create(this);return l.clipBox=this.clipBox.slice(),l}setCurrentPoint(l,i){this.x=l,this.y=i}updatePathMinMax(l,i,s){[i,s]=t.Util.applyTransform([i,s],l),this.minX=Math.min(this.minX,i),this.minY=Math.min(this.minY,s),this.maxX=Math.max(this.maxX,i),this.maxY=Math.max(this.maxY,s)}updateRectMinMax(l,i){const s=t.Util.applyTransform(i,l),c=t.Util.applyTransform(i.slice(2),l);this.minX=Math.min(this.minX,s[0],c[0]),this.minY=Math.min(this.minY,s[1],c[1]),this.maxX=Math.max(this.maxX,s[0],c[0]),this.maxY=Math.max(this.maxY,s[1],c[1])}updateScalingPathMinMax(l,i){t.Util.scaleMinMax(l,i),this.minX=Math.min(this.minX,i[0]),this.maxX=Math.max(this.maxX,i[1]),this.minY=Math.min(this.minY,i[2]),this.maxY=Math.max(this.maxY,i[3])}updateCurvePathMinMax(l,i,s,c,d,Z,b,a,m,e){const W=t.Util.bezierBoundingBox(i,s,c,d,Z,b,a,m);if(e)return e[0]=Math.min(e[0],W[0],W[2]),e[1]=Math.max(e[1],W[0],W[2]),e[2]=Math.min(e[2],W[1],W[3]),void(e[3]=Math.max(e[3],W[1],W[3]));this.updateRectMinMax(l,W)}getPathBoundingBox(l=d.PathType.FILL,i=null){const s=[this.minX,this.minY,this.maxX,this.maxY];if(l===d.PathType.STROKE){i||(0,t.unreachable)("Stroke bounding box must include transform.");const l=t.Util.singularValueDecompose2dScale(i),c=l[0]*this.lineWidth/2,d=l[1]*this.lineWidth/2;s[0]-=c,s[1]-=d,s[2]+=c,s[3]+=d}return s}updateClipFromPath(){const l=t.Util.intersect(this.clipBox,this.getPathBoundingBox());this.startNewPathAndClipBox(l||[0,0,0,0])}isEmptyClip(){return this.minX===1/0}startNewPathAndClipBox(l){this.clipBox=l,this.minX=1/0,this.minY=1/0,this.maxX=0,this.maxY=0}getClippedPathBoundingBox(l=d.PathType.FILL,i=null){return t.Util.intersect(this.clipBox,this.getPathBoundingBox(l,i))}}function X(l,i,s=null){if("undefined"!==typeof ImageData&&i instanceof ImageData)return void l.putImageData(i,0,0);const c=i.height,d=i.width,Z=c%G,b=(c-Z)/G,a=0===Z?b:b+1,m=l.createImageData(d,G);let e,W=0;const n=i.data,h=m.data;let u,N,M,I,Y,X,L,y;if(s)switch(s.length){case 1:Y=s[0],X=s[0],L=s[0],y=s[0];break;case 4:Y=s[0],X=s[1],L=s[2],y=s[3];break}if(i.kind===t.ImageKind.GRAYSCALE_1BPP){const i=n.byteLength,s=new Uint32Array(h.buffer,0,h.byteLength>>2),c=s.length,I=d+7>>3;let Y=4294967295,X=t.FeatureTest.isLittleEndian?4278190080:255;for(y&&255===y[0]&&0===y[255]&&([Y,X]=[X,Y]),u=0;u<a;u++){for(M=u<b?G:Z,e=0,N=0;N<M;N++){const l=i-W;let t=0;const c=l>I?d:8*l-7,Z=-8&c;let b=0,a=0;for(;t<Z;t+=8)a=n[W++],s[e++]=128&a?Y:X,s[e++]=64&a?Y:X,s[e++]=32&a?Y:X,s[e++]=16&a?Y:X,s[e++]=8&a?Y:X,s[e++]=4&a?Y:X,s[e++]=2&a?Y:X,s[e++]=1&a?Y:X;for(;t<c;t++)0===b&&(a=n[W++],b=128),s[e++]=a&b?Y:X,b>>=1}while(e<c)s[e++]=0;l.putImageData(m,0,u*G)}}else if(i.kind===t.ImageKind.RGBA_32BPP){const i=!!(Y||X||L);for(N=0,I=d*G*4,u=0;u<b;u++){if(h.set(n.subarray(W,W+I)),W+=I,i)for(let l=0;l<I;l+=4)Y&&(h[l+0]=Y[h[l+0]]),X&&(h[l+1]=X[h[l+1]]),L&&(h[l+2]=L[h[l+2]]);l.putImageData(m,0,N),N+=G}if(u<a){if(I=d*Z*4,h.set(n.subarray(W,W+I)),i)for(let l=0;l<I;l+=4)Y&&(h[l+0]=Y[h[l+0]]),X&&(h[l+1]=X[h[l+1]]),L&&(h[l+2]=L[h[l+2]]);l.putImageData(m,0,N)}}else{if(i.kind!==t.ImageKind.RGB_24BPP)throw new Error(`bad image kind: ${i.kind}`);{const i=!!(Y||X||L);for(M=G,I=d*M,u=0;u<a;u++){for(u>=b&&(M=Z,I=d*M),e=0,N=I;N--;)h[e++]=n[W++],h[e++]=n[W++],h[e++]=n[W++],h[e++]=255;if(i)for(let l=0;l<e;l+=4)Y&&(h[l+0]=Y[h[l+0]]),X&&(h[l+1]=X[h[l+1]]),L&&(h[l+2]=L[h[l+2]]);l.putImageData(m,0,u*G)}}}}function L(l,i){if(i.bitmap)return void l.drawImage(i.bitmap,0,0);const s=i.height,t=i.width,c=s%G,d=(s-c)/G,b=0===c?d:d+1,a=l.createImageData(t,G);let m=0;const e=i.data,W=a.data;for(let n=0;n<b;n++){const i=n<d?G:c;({srcPos:m}=(0,Z.applyMaskImageData)({src:e,srcPos:m,dest:W,width:t,height:i})),l.putImageData(a,0,n*G)}}function y(l,i){const s=["strokeStyle","fillStyle","fillRule","globalAlpha","lineWidth","lineCap","lineJoin","miterLimit","globalCompositeOperation","font"];for(const t of s)void 0!==l[t]&&(i[t]=l[t]);void 0!==l.setLineDash&&(i.setLineDash(l.getLineDash()),i.lineDashOffset=l.lineDashOffset)}function o(l,i){l.strokeStyle=l.fillStyle=i||"#000000",l.fillRule="nonzero",l.globalAlpha=1,l.lineWidth=1,l.lineCap="butt",l.lineJoin="miter",l.miterLimit=10,l.globalCompositeOperation="source-over",l.font="10px sans-serif",void 0!==l.setLineDash&&(l.setLineDash([]),l.lineDashOffset=0)}function V(l,i,s,t){const c=l.length;for(let d=3;d<c;d+=4){const c=l[d];if(0===c)l[d-3]=i,l[d-2]=s,l[d-1]=t;else if(c<255){const Z=255-c;l[d-3]=l[d-3]*c+i*Z>>8,l[d-2]=l[d-2]*c+s*Z>>8,l[d-1]=l[d-1]*c+t*Z>>8}}}function p(l,i,s){const t=l.length,c=1/255;for(let d=3;d<t;d+=4){const t=s?s[l[d]]:l[d];i[d]=i[d]*t*c|0}}function T(l,i,s){const t=l.length;for(let c=3;c<t;c+=4){const t=77*l[c-3]+152*l[c-2]+28*l[c-1];i[c]=s?i[c]*s[t>>8]>>8:i[c]*t>>16}}function w(l,i,s,t,c,d,Z,b,a,m,e){const W=!!d,n=W?d[0]:0,h=W?d[1]:0,G=W?d[2]:0;let u;u="Luminosity"===c?T:p;const N=1048576,M=Math.min(t,Math.ceil(N/s));for(let I=0;I<t;I+=M){const c=Math.min(M,t-I),d=l.getImageData(b-m,I+(a-e),s,c),N=i.getImageData(b,I+a,s,c);W&&V(d.data,n,h,G),u(d.data,N.data,Z),i.putImageData(N,b,I+a)}}function z(l,i,s,t){const c=t[0],d=t[1],Z=t[2]-c,b=t[3]-d;0!==Z&&0!==b&&(w(i.context,s,Z,b,i.subtype,i.backdrop,i.transferMap,c,d,i.offsetX,i.offsetY),l.save(),l.globalAlpha=1,l.globalCompositeOperation="source-over",l.setTransform(1,0,0,1,0,0),l.drawImage(s.canvas,0,0),l.restore())}function R(l,i){const s=t.Util.singularValueDecompose2dScale(l);s[0]=Math.fround(s[0]),s[1]=Math.fround(s[1]);const d=Math.fround((globalThis.devicePixelRatio||1)*c.PixelsPerInch.PDF_TO_CSS_UNITS);return void 0!==i?i:s[0]<=d||s[1]<=d}const r=["butt","round","square"],C=["miter","round","bevel"],S={},x={};class D{constructor(l,i,s,t,c,d,Z){this.ctx=l,this.current=new Y(this.ctx.canvas.width,this.ctx.canvas.height),this.stateStack=[],this.pendingClip=null,this.pendingEOFill=!1,this.res=null,this.xobjs=null,this.commonObjs=i,this.objs=s,this.canvasFactory=t,this.groupStack=[],this.processingType3=null,this.baseTransform=null,this.baseTransformStack=[],this.groupLevel=0,this.smaskStack=[],this.smaskCounter=0,this.tempSMask=null,this.suspendedCtx=null,this.contentVisible=!0,this.markedContentStack=[],this.optionalContentConfig=c,this.cachedCanvases=new N(this.canvasFactory),this.cachedPatterns=new Map,this.annotationCanvasMap=d,this.viewportScale=1,this.outputScaleX=1,this.outputScaleY=1,this.backgroundColor=Z?.background||null,this.foregroundColor=Z?.foreground||null,this._cachedScaleForStroking=null,this._cachedGetSinglePixelWidth=null,this._cachedBitmapsMap=new Map}getObject(l,i=null){return"string"===typeof l?l.startsWith("g_")?this.commonObjs.get(l):this.objs.get(l):i}beginDrawing({transform:l,viewport:i,transparency:s=!1,background:t=null}){const d=this.ctx.canvas.width,Z=this.ctx.canvas.height,b=t||"#ffffff";if(this.ctx.save(),this.foregroundColor&&this.backgroundColor){this.ctx.fillStyle=this.foregroundColor;const l=this.foregroundColor=this.ctx.fillStyle;this.ctx.fillStyle=this.backgroundColor;const i=this.backgroundColor=this.ctx.fillStyle;let s=!0,t=b;if(this.ctx.fillStyle=b,t=this.ctx.fillStyle,s="string"===typeof t&&/^#[0-9A-Fa-f]{6}$/.test(t),"#000000"===l&&"#ffffff"===i||l===i||!s)this.foregroundColor=this.backgroundColor=null;else{const[s,d,Z]=(0,c.getRGB)(t),b=l=>(l/=255,l<=.03928?l/12.92:((l+.055)/1.055)**2.4),a=Math.round(.2126*b(s)+.7152*b(d)+.0722*b(Z));this.selectColor=(s,t,c)=>{const d=.2126*b(s)+.7152*b(t)+.0722*b(c);return Math.round(d)===a?i:l}}}if(this.ctx.fillStyle=this.backgroundColor||b,this.ctx.fillRect(0,0,d,Z),this.ctx.restore(),s){const l=this.cachedCanvases.getCanvas("transparent",d,Z);this.compositeCtx=this.ctx,this.transparentCanvas=l.canvas,this.ctx=l.context,this.ctx.save(),this.ctx.transform(...(0,c.getCurrentTransform)(this.compositeCtx))}this.ctx.save(),o(this.ctx,this.foregroundColor),l&&(this.ctx.transform(...l),this.outputScaleX=l[0],this.outputScaleY=l[0]),this.ctx.transform(...i.transform),this.viewportScale=i.scale,this.baseTransform=(0,c.getCurrentTransform)(this.ctx)}executeOperatorList(l,i,s,c){const d=l.argsArray,Z=l.fnArray;let b=i||0;const a=d.length;if(a===b)return b;const m=a-b>n&&"function"===typeof s,e=m?Date.now()+W:0;let h=0;const G=this.commonObjs,u=this.objs;let N;while(1){if(void 0!==c&&b===c.nextBreakPoint)return c.breakIt(b,s),b;if(N=Z[b],N!==t.OPS.dependency)this[N].apply(this,d[b]);else for(const l of d[b]){const i=l.startsWith("g_")?G:u;if(!i.has(l))return i.get(l,s),b}if(b++,b===a)return b;if(m&&++h>n){if(Date.now()>e)return s(),b;h=0}}}#sl(){while(this.stateStack.length||this.inSMaskMode)this.restore();this.ctx.restore(),this.transparentCanvas&&(this.ctx=this.compositeCtx,this.ctx.save(),this.ctx.setTransform(1,0,0,1,0,0),this.ctx.drawImage(this.transparentCanvas,0,0),this.ctx.restore(),this.transparentCanvas=null)}endDrawing(){this.#sl(),this.cachedCanvases.clear(),this.cachedPatterns.clear();for(const l of this._cachedBitmapsMap.values()){for(const i of l.values())"undefined"!==typeof HTMLCanvasElement&&i instanceof HTMLCanvasElement&&(i.width=i.height=0);l.clear()}this._cachedBitmapsMap.clear()}_scaleImage(l,i){const s=l.width,t=l.height;let c,d,Z=Math.max(Math.hypot(i[0],i[1]),1),b=Math.max(Math.hypot(i[2],i[3]),1),a=s,m=t,e="prescale1";while(Z>2&&a>1||b>2&&m>1){let i=a,s=m;Z>2&&a>1&&(i=Math.ceil(a/2),Z/=a/i),b>2&&m>1&&(s=Math.ceil(m/2),b/=m/s),c=this.cachedCanvases.getCanvas(e,i,s),d=c.context,d.clearRect(0,0,i,s),d.drawImage(l,0,0,a,m,0,0,i,s),l=c.canvas,a=i,m=s,e="prescale1"===e?"prescale2":"prescale1"}return{img:l,paintWidth:a,paintHeight:m}}_createMaskCanvas(l){const i=this.ctx,{width:s,height:Z}=l,b=this.current.fillColor,a=this.current.patternFill,m=(0,c.getCurrentTransform)(i);let e,W,n,h;if((l.bitmap||l.data)&&l.count>1){const i=l.bitmap||l.data.buffer;W=JSON.stringify(a?m:[m.slice(0,4),b]),e=this._cachedBitmapsMap.get(i),e||(e=new Map,this._cachedBitmapsMap.set(i,e));const s=e.get(W);if(s&&!a){const l=Math.round(Math.min(m[0],m[2])+m[4]),i=Math.round(Math.min(m[1],m[3])+m[5]);return{canvas:s,offsetX:l,offsetY:i}}n=s}n||(h=this.cachedCanvases.getCanvas("maskCanvas",s,Z),L(h.context,l));let G=t.Util.transform(m,[1/s,0,0,-1/Z,0,0]);G=t.Util.transform(G,[1,0,0,1,0,-Z]);const u=t.Util.applyTransform([0,0],G),N=t.Util.applyTransform([s,Z],G),I=t.Util.normalizeRect([u[0],u[1],N[0],N[1]]),Y=Math.round(I[2]-I[0])||1,X=Math.round(I[3]-I[1])||1,y=this.cachedCanvases.getCanvas("fillCanvas",Y,X),o=y.context,V=Math.min(u[0],N[0]),p=Math.min(u[1],N[1]);o.translate(-V,-p),o.transform(...G),n||(n=this._scaleImage(h.canvas,(0,c.getCurrentTransformInverse)(o)),n=n.img,e&&a&&e.set(W,n)),o.imageSmoothingEnabled=R((0,c.getCurrentTransform)(o),l.interpolate),M(o,n,0,0,n.width,n.height,0,0,s,Z),o.globalCompositeOperation="source-in";const T=t.Util.transform((0,c.getCurrentTransformInverse)(o),[1,0,0,1,-V,-p]);return o.fillStyle=a?b.getPattern(i,this,T,d.PathType.FILL):b,o.fillRect(0,0,s,Z),e&&!a&&(this.cachedCanvases.delete("fillCanvas"),e.set(W,y.canvas)),{canvas:y.canvas,offsetX:Math.round(V),offsetY:Math.round(p)}}setLineWidth(l){l!==this.current.lineWidth&&(this._cachedScaleForStroking=null),this.current.lineWidth=l,this.ctx.lineWidth=l}setLineCap(l){this.ctx.lineCap=r[l]}setLineJoin(l){this.ctx.lineJoin=C[l]}setMiterLimit(l){this.ctx.miterLimit=l}setDash(l,i){const s=this.ctx;void 0!==s.setLineDash&&(s.setLineDash(l),s.lineDashOffset=i)}setRenderingIntent(l){}setFlatness(l){}setGState(l){for(const[i,s]of l)switch(i){case"LW":this.setLineWidth(s);break;case"LC":this.setLineCap(s);break;case"LJ":this.setLineJoin(s);break;case"ML":this.setMiterLimit(s);break;case"D":this.setDash(s[0],s[1]);break;case"RI":this.setRenderingIntent(s);break;case"FL":this.setFlatness(s);break;case"Font":this.setFont(s[0],s[1]);break;case"CA":this.current.strokeAlpha=s;break;case"ca":this.current.fillAlpha=s,this.ctx.globalAlpha=s;break;case"BM":this.ctx.globalCompositeOperation=s;break;case"SMask":this.current.activeSMask=s?this.tempSMask:null,this.tempSMask=null,this.checkSMaskState();break;case"TR":this.current.transferMaps=s}}get inSMaskMode(){return!!this.suspendedCtx}checkSMaskState(){const l=this.inSMaskMode;this.current.activeSMask&&!l?this.beginSMaskMode():!this.current.activeSMask&&l&&this.endSMaskMode()}beginSMaskMode(){if(this.inSMaskMode)throw new Error("beginSMaskMode called while already in smask mode");const l=this.ctx.canvas.width,i=this.ctx.canvas.height,s="smaskGroupAt"+this.groupLevel,t=this.cachedCanvases.getCanvas(s,l,i);this.suspendedCtx=this.ctx,this.ctx=t.context;const d=this.ctx;d.setTransform(...(0,c.getCurrentTransform)(this.suspendedCtx)),y(this.suspendedCtx,d),u(d,this.suspendedCtx),this.setGState([["BM","source-over"],["ca",1],["CA",1]])}endSMaskMode(){if(!this.inSMaskMode)throw new Error("endSMaskMode called while not in smask mode");this.ctx._removeMirroring(),y(this.ctx,this.suspendedCtx),this.ctx=this.suspendedCtx,this.suspendedCtx=null}compose(l){if(!this.current.activeSMask)return;l?(l[0]=Math.floor(l[0]),l[1]=Math.floor(l[1]),l[2]=Math.ceil(l[2]),l[3]=Math.ceil(l[3])):l=[0,0,this.ctx.canvas.width,this.ctx.canvas.height];const i=this.current.activeSMask,s=this.suspendedCtx;z(s,i,this.ctx,l),this.ctx.save(),this.ctx.setTransform(1,0,0,1,0,0),this.ctx.clearRect(0,0,this.ctx.canvas.width,this.ctx.canvas.height),this.ctx.restore()}save(){this.inSMaskMode?(y(this.ctx,this.suspendedCtx),this.suspendedCtx.save()):this.ctx.save();const l=this.current;this.stateStack.push(l),this.current=l.clone()}restore(){0===this.stateStack.length&&this.inSMaskMode&&this.endSMaskMode(),0!==this.stateStack.length&&(this.current=this.stateStack.pop(),this.inSMaskMode?(this.suspendedCtx.restore(),y(this.suspendedCtx,this.ctx)):this.ctx.restore(),this.checkSMaskState(),this.pendingClip=null,this._cachedScaleForStroking=null,this._cachedGetSinglePixelWidth=null)}transform(l,i,s,t,c,d){this.ctx.transform(l,i,s,t,c,d),this._cachedScaleForStroking=null,this._cachedGetSinglePixelWidth=null}constructPath(l,i,s){const d=this.ctx,Z=this.current;let b,a,m=Z.x,e=Z.y;const W=(0,c.getCurrentTransform)(d),n=0===W[0]&&0===W[3]||0===W[1]&&0===W[2],h=n?s.slice(0):null;for(let c=0,G=0,u=l.length;c<u;c++)switch(0|l[c]){case t.OPS.rectangle:m=i[G++],e=i[G++];const l=i[G++],s=i[G++],c=m+l,u=e+s;d.moveTo(m,e),0===l||0===s?d.lineTo(c,u):(d.lineTo(c,e),d.lineTo(c,u),d.lineTo(m,u)),n||Z.updateRectMinMax(W,[m,e,c,u]),d.closePath();break;case t.OPS.moveTo:m=i[G++],e=i[G++],d.moveTo(m,e),n||Z.updatePathMinMax(W,m,e);break;case t.OPS.lineTo:m=i[G++],e=i[G++],d.lineTo(m,e),n||Z.updatePathMinMax(W,m,e);break;case t.OPS.curveTo:b=m,a=e,m=i[G+4],e=i[G+5],d.bezierCurveTo(i[G],i[G+1],i[G+2],i[G+3],m,e),Z.updateCurvePathMinMax(W,b,a,i[G],i[G+1],i[G+2],i[G+3],m,e,h),G+=6;break;case t.OPS.curveTo2:b=m,a=e,d.bezierCurveTo(m,e,i[G],i[G+1],i[G+2],i[G+3]),Z.updateCurvePathMinMax(W,b,a,m,e,i[G],i[G+1],i[G+2],i[G+3],h),m=i[G+2],e=i[G+3],G+=4;break;case t.OPS.curveTo3:b=m,a=e,m=i[G+2],e=i[G+3],d.bezierCurveTo(i[G],i[G+1],m,e,m,e),Z.updateCurvePathMinMax(W,b,a,i[G],i[G+1],m,e,m,e,h),G+=4;break;case t.OPS.closePath:d.closePath();break}n&&Z.updateScalingPathMinMax(W,h),Z.setCurrentPoint(m,e)}closePath(){this.ctx.closePath()}stroke(l){l="undefined"===typeof l||l;const i=this.ctx,s=this.current.strokeColor;i.globalAlpha=this.current.strokeAlpha,this.contentVisible&&("object"===typeof s&&s?.getPattern?(i.save(),i.strokeStyle=s.getPattern(i,this,(0,c.getCurrentTransformInverse)(i),d.PathType.STROKE),this.rescaleAndStroke(!1),i.restore()):this.rescaleAndStroke(!0)),l&&this.consumePath(this.current.getClippedPathBoundingBox()),i.globalAlpha=this.current.fillAlpha}closeStroke(){this.closePath(),this.stroke()}fill(l){l="undefined"===typeof l||l;const i=this.ctx,s=this.current.fillColor,t=this.current.patternFill;let Z=!1;t&&(i.save(),i.fillStyle=s.getPattern(i,this,(0,c.getCurrentTransformInverse)(i),d.PathType.FILL),Z=!0);const b=this.current.getClippedPathBoundingBox();this.contentVisible&&null!==b&&(this.pendingEOFill?(i.fill("evenodd"),this.pendingEOFill=!1):i.fill()),Z&&i.restore(),l&&this.consumePath(b)}eoFill(){this.pendingEOFill=!0,this.fill()}fillStroke(){this.fill(!1),this.stroke(!1),this.consumePath()}eoFillStroke(){this.pendingEOFill=!0,this.fillStroke()}closeFillStroke(){this.closePath(),this.fillStroke()}closeEOFillStroke(){this.pendingEOFill=!0,this.closePath(),this.fillStroke()}endPath(){this.consumePath()}clip(){this.pendingClip=S}eoClip(){this.pendingClip=x}beginText(){this.current.textMatrix=t.IDENTITY_MATRIX,this.current.textMatrixScale=1,this.current.x=this.current.lineX=0,this.current.y=this.current.lineY=0}endText(){const l=this.pendingTextPaths,i=this.ctx;if(void 0!==l){i.save(),i.beginPath();for(const s of l)i.setTransform(...s.transform),i.translate(s.x,s.y),s.addToPath(i,s.fontSize);i.restore(),i.clip(),i.beginPath(),delete this.pendingTextPaths}else i.beginPath()}setCharSpacing(l){this.current.charSpacing=l}setWordSpacing(l){this.current.wordSpacing=l}setHScale(l){this.current.textHScale=l/100}setLeading(l){this.current.leading=-l}setFont(l,i){const s=this.commonObjs.get(l),c=this.current;if(!s)throw new Error(`Can't find font for ${l}`);if(c.fontMatrix=s.fontMatrix||t.FONT_IDENTITY_MATRIX,0!==c.fontMatrix[0]&&0!==c.fontMatrix[3]||(0,t.warn)("Invalid font matrix for font "+l),i<0?(i=-i,c.fontDirection=-1):c.fontDirection=1,this.current.font=s,this.current.fontSize=i,s.isType3Font)return;const d=s.loadedName||"sans-serif";let Z="normal";s.black?Z="900":s.bold&&(Z="bold");const b=s.italic?"italic":"normal",e=`"${d}", ${s.fallbackName}`;let W=i;i<a?W=a:i>m&&(W=m),this.current.fontSizeScale=i/W,this.ctx.font=`${b} ${Z} ${W}px ${e}`}setTextRenderingMode(l){this.current.textRenderingMode=l}setTextRise(l){this.current.textRise=l}moveText(l,i){this.current.x=this.current.lineX+=l,this.current.y=this.current.lineY+=i}setLeadingMoveText(l,i){this.setLeading(-i),this.moveText(l,i)}setTextMatrix(l,i,s,t,c,d){this.current.textMatrix=[l,i,s,t,c,d],this.current.textMatrixScale=Math.hypot(l,i),this.current.x=this.current.lineX=0,this.current.y=this.current.lineY=0}nextLine(){this.moveText(0,this.current.leading)}paintChar(l,i,s,d){const Z=this.ctx,b=this.current,a=b.font,m=b.textRenderingMode,e=b.fontSize/b.fontSizeScale,W=m&t.TextRenderingMode.FILL_STROKE_MASK,n=!!(m&t.TextRenderingMode.ADD_TO_PATH_FLAG),h=b.patternFill&&!a.missingFile;let G;if((a.disableFontFace||n||h)&&(G=a.getPathGenerator(this.commonObjs,l)),a.disableFontFace||h?(Z.save(),Z.translate(i,s),Z.beginPath(),G(Z,e),d&&Z.setTransform(...d),W!==t.TextRenderingMode.FILL&&W!==t.TextRenderingMode.FILL_STROKE||Z.fill(),W!==t.TextRenderingMode.STROKE&&W!==t.TextRenderingMode.FILL_STROKE||Z.stroke(),Z.restore()):(W!==t.TextRenderingMode.FILL&&W!==t.TextRenderingMode.FILL_STROKE||Z.fillText(l,i,s),W!==t.TextRenderingMode.STROKE&&W!==t.TextRenderingMode.FILL_STROKE||Z.strokeText(l,i,s)),n){const l=this.pendingTextPaths||(this.pendingTextPaths=[]);l.push({transform:(0,c.getCurrentTransform)(Z),x:i,y:s,fontSize:e,addToPath:G})}}get isFontSubpixelAAEnabled(){const{context:l}=this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled",10,10);l.scale(1.5,1),l.fillText("I",0,10);const i=l.getImageData(0,0,10,10).data;let s=!1;for(let t=3;t<i.length;t+=4)if(i[t]>0&&i[t]<255){s=!0;break}return(0,t.shadow)(this,"isFontSubpixelAAEnabled",s)}showText(l){const i=this.current,s=i.font;if(s.isType3Font)return this.showType3Text(l);const Z=i.fontSize;if(0===Z)return;const b=this.ctx,a=i.fontSizeScale,m=i.charSpacing,e=i.wordSpacing,W=i.fontDirection,n=i.textHScale*W,h=l.length,G=s.vertical,u=G?1:-1,N=s.defaultVMetrics,M=Z*i.fontMatrix[0],I=i.textRenderingMode===t.TextRenderingMode.FILL&&!s.disableFontFace&&!i.patternFill;let Y;if(b.save(),b.transform(...i.textMatrix),b.translate(i.x,i.y+i.textRise),W>0?b.scale(n,-1):b.scale(n,1),i.patternFill){b.save();const l=i.fillColor.getPattern(b,this,(0,c.getCurrentTransformInverse)(b),d.PathType.FILL);Y=(0,c.getCurrentTransform)(b),b.restore(),b.fillStyle=l}let X=i.lineWidth;const L=i.textMatrixScale;if(0===L||0===X){const l=i.textRenderingMode&t.TextRenderingMode.FILL_STROKE_MASK;l!==t.TextRenderingMode.STROKE&&l!==t.TextRenderingMode.FILL_STROKE||(X=this.getSinglePixelWidth())}else X/=L;1!==a&&(b.scale(a,a),X/=a),b.lineWidth=X;let y,o=0;for(y=0;y<h;++y){const i=l[y];if("number"===typeof i){o+=u*i*Z/1e3;continue}let t=!1;const c=(i.isSpace?e:0)+m,d=i.fontChar,n=i.accent;let h,X,L,V=i.width;if(G){const l=i.vmetric||N,s=-(i.vmetric?l[1]:.5*V)*M,t=l[2]*M;V=l?-l[0]:V,h=s/a,X=(o+t)/a}else h=o/a,X=0;if(s.remeasure&&V>0){const l=1e3*b.measureText(d).width/Z*a;if(V<l&&this.isFontSubpixelAAEnabled){const i=V/l;t=!0,b.save(),b.scale(i,1),h/=i}else V!==l&&(h+=(V-l)/2e3*Z/a)}if(this.contentVisible&&(i.isInFont||s.missingFile))if(I&&!n)b.fillText(d,h,X);else if(this.paintChar(d,h,X,Y),n){const l=h+Z*n.offset.x/a,i=X-Z*n.offset.y/a;this.paintChar(n.fontChar,l,i,Y)}L=G?V*M-c*W:V*M+c*W,o+=L,t&&b.restore()}G?i.y-=o:i.x+=o*n,b.restore(),this.compose()}showType3Text(l){const i=this.ctx,s=this.current,c=s.font,d=s.fontSize,Z=s.fontDirection,b=c.vertical?1:-1,a=s.charSpacing,m=s.wordSpacing,e=s.textHScale*Z,W=s.fontMatrix||t.FONT_IDENTITY_MATRIX,n=l.length,h=s.textRenderingMode===t.TextRenderingMode.INVISIBLE;let G,u,N,M;if(!h&&0!==d){for(this._cachedScaleForStroking=null,this._cachedGetSinglePixelWidth=null,i.save(),i.transform(...s.textMatrix),i.translate(s.x,s.y),i.scale(e,Z),G=0;G<n;++G){if(u=l[G],"number"===typeof u){M=b*u*d/1e3,this.ctx.translate(M,0),s.x+=M*e;continue}const Z=(u.isSpace?m:0)+a,n=c.charProcOperatorList[u.operatorListId];if(!n){(0,t.warn)(`Type3 character "${u.operatorListId}" is not available.`);continue}this.contentVisible&&(this.processingType3=u,this.save(),i.scale(d,d),i.transform(...W),this.executeOperatorList(n),this.restore());const h=t.Util.applyTransform([u.width,0],W);N=h[0]*d+Z,i.translate(N,0),s.x+=N*e}i.restore(),this.processingType3=null}}setCharWidth(l,i){}setCharWidthAndBounds(l,i,s,t,c,d){this.ctx.rect(s,t,c-s,d-t),this.ctx.clip(),this.endPath()}getColorN_Pattern(l){let i;if("TilingPattern"===l[0]){const s=l[1],t=this.baseTransform||(0,c.getCurrentTransform)(this.ctx),Z={createCanvasGraphics:l=>new D(l,this.commonObjs,this.objs,this.canvasFactory)};i=new d.TilingPattern(l,s,this.ctx,Z,t)}else i=this._getPattern(l[1],l[2]);return i}setStrokeColorN(){this.current.strokeColor=this.getColorN_Pattern(arguments)}setFillColorN(){this.current.fillColor=this.getColorN_Pattern(arguments),this.current.patternFill=!0}setStrokeRGBColor(l,i,s){const c=this.selectColor?.(l,i,s)||t.Util.makeHexColor(l,i,s);this.ctx.strokeStyle=c,this.current.strokeColor=c}setFillRGBColor(l,i,s){const c=this.selectColor?.(l,i,s)||t.Util.makeHexColor(l,i,s);this.ctx.fillStyle=c,this.current.fillColor=c,this.current.patternFill=!1}_getPattern(l,i=null){let s;return this.cachedPatterns.has(l)?s=this.cachedPatterns.get(l):(s=(0,d.getShadingPattern)(this.objs.get(l)),this.cachedPatterns.set(l,s)),i&&(s.matrix=i),s}shadingFill(l){if(!this.contentVisible)return;const i=this.ctx;this.save();const s=this._getPattern(l);i.fillStyle=s.getPattern(i,this,(0,c.getCurrentTransformInverse)(i),d.PathType.SHADING);const Z=(0,c.getCurrentTransformInverse)(i);if(Z){const l=i.canvas,s=l.width,c=l.height,d=t.Util.applyTransform([0,0],Z),b=t.Util.applyTransform([0,c],Z),a=t.Util.applyTransform([s,0],Z),m=t.Util.applyTransform([s,c],Z),e=Math.min(d[0],b[0],a[0],m[0]),W=Math.min(d[1],b[1],a[1],m[1]),n=Math.max(d[0],b[0],a[0],m[0]),h=Math.max(d[1],b[1],a[1],m[1]);this.ctx.fillRect(e,W,n-e,h-W)}else this.ctx.fillRect(-1e10,-1e10,2e10,2e10);this.compose(this.current.getClippedPathBoundingBox()),this.restore()}beginInlineImage(){(0,t.unreachable)("Should not call beginInlineImage")}beginImageData(){(0,t.unreachable)("Should not call beginImageData")}paintFormXObjectBegin(l,i){if(this.contentVisible&&(this.save(),this.baseTransformStack.push(this.baseTransform),Array.isArray(l)&&6===l.length&&this.transform(...l),this.baseTransform=(0,c.getCurrentTransform)(this.ctx),i)){const l=i[2]-i[0],s=i[3]-i[1];this.ctx.rect(i[0],i[1],l,s),this.current.updateRectMinMax((0,c.getCurrentTransform)(this.ctx),i),this.clip(),this.endPath()}}paintFormXObjectEnd(){this.contentVisible&&(this.restore(),this.baseTransform=this.baseTransformStack.pop())}beginGroup(l){if(!this.contentVisible)return;this.save(),this.inSMaskMode&&(this.endSMaskMode(),this.current.activeSMask=null);const i=this.ctx;l.isolated||(0,t.info)("TODO: Support non-isolated groups."),l.knockout&&(0,t.warn)("Knockout groups not supported.");const s=(0,c.getCurrentTransform)(i);if(l.matrix&&i.transform(...l.matrix),!l.bbox)throw new Error("Bounding box is required.");let d=t.Util.getAxialAlignedBoundingBox(l.bbox,(0,c.getCurrentTransform)(i));const Z=[0,0,i.canvas.width,i.canvas.height];d=t.Util.intersect(d,Z)||[0,0,0,0];const b=Math.floor(d[0]),a=Math.floor(d[1]);let m=Math.max(Math.ceil(d[2])-b,1),W=Math.max(Math.ceil(d[3])-a,1),n=1,h=1;m>e&&(n=m/e,m=e),W>e&&(h=W/e,W=e),this.current.startNewPathAndClipBox([0,0,m,W]);let G="groupAt"+this.groupLevel;l.smask&&(G+="_smask_"+this.smaskCounter++%2);const u=this.cachedCanvases.getCanvas(G,m,W),N=u.context;N.scale(1/n,1/h),N.translate(-b,-a),N.transform(...s),l.smask?this.smaskStack.push({canvas:u.canvas,context:N,offsetX:b,offsetY:a,scaleX:n,scaleY:h,subtype:l.smask.subtype,backdrop:l.smask.backdrop,transferMap:l.smask.transferMap||null,startTransformInverse:null}):(i.setTransform(1,0,0,1,0,0),i.translate(b,a),i.scale(n,h),i.save()),y(i,N),this.ctx=N,this.setGState([["BM","source-over"],["ca",1],["CA",1]]),this.groupStack.push(i),this.groupLevel++}endGroup(l){if(!this.contentVisible)return;this.groupLevel--;const i=this.ctx,s=this.groupStack.pop();if(this.ctx=s,this.ctx.imageSmoothingEnabled=!1,l.smask)this.tempSMask=this.smaskStack.pop(),this.restore();else{this.ctx.restore();const l=(0,c.getCurrentTransform)(this.ctx);this.restore(),this.ctx.save(),this.ctx.setTransform(...l);const s=t.Util.getAxialAlignedBoundingBox([0,0,i.canvas.width,i.canvas.height],l);this.ctx.drawImage(i.canvas,0,0),this.ctx.restore(),this.compose(s)}}beginAnnotation(l,i,s,d,Z){if(this.#sl(),o(this.ctx,this.foregroundColor),this.ctx.save(),this.save(),this.baseTransform&&this.ctx.setTransform(...this.baseTransform),Array.isArray(i)&&4===i.length){const d=i[2]-i[0],b=i[3]-i[1];if(Z&&this.annotationCanvasMap){s=s.slice(),s[4]-=i[0],s[5]-=i[1],i=i.slice(),i[0]=i[1]=0,i[2]=d,i[3]=b;const[Z,a]=t.Util.singularValueDecompose2dScale((0,c.getCurrentTransform)(this.ctx)),{viewportScale:m}=this,e=Math.ceil(d*this.outputScaleX*m),W=Math.ceil(b*this.outputScaleY*m);this.annotationCanvas=this.canvasFactory.create(e,W);const{canvas:n,context:h}=this.annotationCanvas;this.annotationCanvasMap.set(l,n),this.annotationCanvas.savedCtx=this.ctx,this.ctx=h,this.ctx.setTransform(Z,0,0,-a,0,b*a),o(this.ctx,this.foregroundColor)}else o(this.ctx,this.foregroundColor),this.ctx.rect(i[0],i[1],d,b),this.ctx.clip(),this.endPath()}this.current=new Y(this.ctx.canvas.width,this.ctx.canvas.height),this.transform(...s),this.transform(...d)}endAnnotation(){this.annotationCanvas&&(this.ctx=this.annotationCanvas.savedCtx,delete this.annotationCanvas.savedCtx,delete this.annotationCanvas)}paintImageMaskXObject(l){if(!this.contentVisible)return;const i=l.count;l=this.getObject(l.data,l),l.count=i;const s=this.ctx,t=this.processingType3;if(t&&(void 0===t.compiled&&(t.compiled=I(l)),t.compiled))return void t.compiled(s);const c=this._createMaskCanvas(l),d=c.canvas;s.save(),s.setTransform(1,0,0,1,0,0),s.drawImage(d,c.offsetX,c.offsetY),s.restore(),this.compose()}paintImageMaskXObjectRepeat(l,i,s=0,d=0,Z,b){if(!this.contentVisible)return;l=this.getObject(l.data,l);const a=this.ctx;a.save();const m=(0,c.getCurrentTransform)(a);a.transform(i,s,d,Z,0,0);const e=this._createMaskCanvas(l);a.setTransform(1,0,0,1,0,0);for(let c=0,W=b.length;c<W;c+=2){const l=t.Util.transform(m,[i,s,d,Z,b[c],b[c+1]]),[W,n]=t.Util.applyTransform([0,0],l);a.drawImage(e.canvas,W,n)}a.restore(),this.compose()}paintImageMaskXObjectGroup(l){if(!this.contentVisible)return;const i=this.ctx,s=this.current.fillColor,t=this.current.patternFill;for(const Z of l){const{data:l,width:b,height:a,transform:m}=Z,e=this.cachedCanvases.getCanvas("maskCanvas",b,a),W=e.context;W.save();const n=this.getObject(l,Z);L(W,n),W.globalCompositeOperation="source-in",W.fillStyle=t?s.getPattern(W,this,(0,c.getCurrentTransformInverse)(i),d.PathType.FILL):s,W.fillRect(0,0,b,a),W.restore(),i.save(),i.transform(...m),i.scale(1,-1),M(i,e.canvas,0,0,b,a,0,-1,1,1),i.restore()}this.compose()}paintImageXObject(l){if(!this.contentVisible)return;const i=this.getObject(l);i?this.paintInlineImageXObject(i):(0,t.warn)("Dependent image isn't ready yet")}paintImageXObjectRepeat(l,i,s,c){if(!this.contentVisible)return;const d=this.getObject(l);if(!d)return void(0,t.warn)("Dependent image isn't ready yet");const Z=d.width,b=d.height,a=[];for(let t=0,m=c.length;t<m;t+=2)a.push({transform:[i,0,0,s,c[t],c[t+1]],x:0,y:0,w:Z,h:b});this.paintInlineImageXObjectGroup(d,a)}paintInlineImageXObject(l){if(!this.contentVisible)return;const i=l.width,s=l.height,t=this.ctx;let d;if(this.save(),t.scale(1/i,-1/s),"function"===typeof HTMLElement&&l instanceof HTMLElement||!l.data)d=l;else{const t=this.cachedCanvases.getCanvas("inlineImage",i,s),c=t.context;X(c,l,this.current.transferMaps),d=t.canvas}const Z=this._scaleImage(d,(0,c.getCurrentTransformInverse)(t));t.imageSmoothingEnabled=R((0,c.getCurrentTransform)(t),l.interpolate),M(t,Z.img,0,0,Z.paintWidth,Z.paintHeight,0,-s,i,s),this.compose(),this.restore()}paintInlineImageXObjectGroup(l,i){if(!this.contentVisible)return;const s=this.ctx,t=l.width,c=l.height,d=this.cachedCanvases.getCanvas("inlineImage",t,c),Z=d.context;X(Z,l,this.current.transferMaps);for(const b of i)s.save(),s.transform(...b.transform),s.scale(1,-1),M(s,d.canvas,b.x,b.y,b.w,b.h,0,-1,1,1),s.restore();this.compose()}paintSolidColorImageMask(){this.contentVisible&&(this.ctx.fillRect(0,0,1,1),this.compose())}markPoint(l){}markPointProps(l,i){}beginMarkedContent(l){this.markedContentStack.push({visible:!0})}beginMarkedContentProps(l,i){"OC"===l?this.markedContentStack.push({visible:this.optionalContentConfig.isVisible(i)}):this.markedContentStack.push({visible:!0}),this.contentVisible=this.isContentVisible()}endMarkedContent(){this.markedContentStack.pop(),this.contentVisible=this.isContentVisible()}beginCompat(){}endCompat(){}consumePath(l){const i=this.current.isEmptyClip();this.pendingClip&&this.current.updateClipFromPath(),this.pendingClip||this.compose(l);const s=this.ctx;this.pendingClip&&(i||(this.pendingClip===x?s.clip("evenodd"):s.clip()),this.pendingClip=null),this.current.startNewPathAndClipBox(this.current.clipBox),s.beginPath()}getSinglePixelWidth(){if(!this._cachedGetSinglePixelWidth){const l=(0,c.getCurrentTransform)(this.ctx);if(0===l[1]&&0===l[2])this._cachedGetSinglePixelWidth=1/Math.min(Math.abs(l[0]),Math.abs(l[3]));else{const i=Math.abs(l[0]*l[3]-l[2]*l[1]),s=Math.hypot(l[0],l[2]),t=Math.hypot(l[1],l[3]);this._cachedGetSinglePixelWidth=Math.max(s,t)/i}}return this._cachedGetSinglePixelWidth}getScaleForStroking(){if(!this._cachedScaleForStroking){const{lineWidth:l}=this.current,i=(0,c.getCurrentTransform)(this.ctx);let s,t;if(0===i[1]&&0===i[2]){const c=Math.abs(i[0]),d=Math.abs(i[3]);if(0===l)s=1/c,t=1/d;else{const i=c*l,Z=d*l;s=i<1?1/i:1,t=Z<1?1/Z:1}}else{const c=Math.abs(i[0]*i[3]-i[2]*i[1]),d=Math.hypot(i[0],i[1]),Z=Math.hypot(i[2],i[3]);if(0===l)s=Z/c,t=d/c;else{const i=l*c;s=Z>i?Z/i:1,t=d>i?d/i:1}}this._cachedScaleForStroking=[s,t]}return this._cachedScaleForStroking}rescaleAndStroke(l){const{ctx:i}=this,{lineWidth:s}=this.current,[t,d]=this.getScaleForStroking();if(i.lineWidth=s||1,1===t&&1===d)return void i.stroke();let Z,b,a;l&&(Z=(0,c.getCurrentTransform)(i),b=i.getLineDash().slice(),a=i.lineDashOffset),i.scale(t,d);const m=Math.max(t,d);i.setLineDash(i.getLineDash().map((l=>l/m))),i.lineDashOffset/=m,i.stroke(),l&&(i.setTransform(...Z),i.setLineDash(b),i.lineDashOffset=a)}isContentVisible(){for(let l=this.markedContentStack.length-1;l>=0;l--)if(!this.markedContentStack[l].visible)return!1;return!0}}i.CanvasGraphics=D;for(const J in t.OPS)void 0!==D.prototype[J]&&(D.prototype[t.OPS[J]]=D.prototype[J])},(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.TilingPattern=i.PathType=void 0,i.getShadingPattern=G;var t=s(1),c=s(6),d=s(12);const Z={FILL:"Fill",STROKE:"Stroke",SHADING:"Shading"};function b(l,i){if(!i||d.isNodeJS)return;const s=i[2]-i[0],t=i[3]-i[1],c=new Path2D;c.rect(i[0],i[1],s,t),l.clip(c)}i.PathType=Z;class a{constructor(){this.constructor===a&&(0,t.unreachable)("Cannot initialize BaseShadingPattern.")}getPattern(){(0,t.unreachable)("Abstract method `getPattern` called.")}}class m extends a{constructor(l){super(),this._type=l[1],this._bbox=l[2],this._colorStops=l[3],this._p0=l[4],this._p1=l[5],this._r0=l[6],this._r1=l[7],this.matrix=null}_createGradient(l){let i;"axial"===this._type?i=l.createLinearGradient(this._p0[0],this._p0[1],this._p1[0],this._p1[1]):"radial"===this._type&&(i=l.createRadialGradient(this._p0[0],this._p0[1],this._r0,this._p1[0],this._p1[1],this._r1));for(const s of this._colorStops)i.addColorStop(s[0],s[1]);return i}getPattern(l,i,s,d){let a;if(d===Z.STROKE||d===Z.FILL){const Z=i.current.getClippedPathBoundingBox(d,(0,c.getCurrentTransform)(l))||[0,0,0,0],m=Math.ceil(Z[2]-Z[0])||1,e=Math.ceil(Z[3]-Z[1])||1,W=i.cachedCanvases.getCanvas("pattern",m,e,!0),n=W.context;n.clearRect(0,0,n.canvas.width,n.canvas.height),n.beginPath(),n.rect(0,0,n.canvas.width,n.canvas.height),n.translate(-Z[0],-Z[1]),s=t.Util.transform(s,[1,0,0,1,Z[0],Z[1]]),n.transform(...i.baseTransform),this.matrix&&n.transform(...this.matrix),b(n,this._bbox),n.fillStyle=this._createGradient(n),n.fill(),a=l.createPattern(W.canvas,"no-repeat");const h=new DOMMatrix(s);a.setTransform(h)}else b(l,this._bbox),a=this._createGradient(l);return a}}function e(l,i,s,t,c,d,Z,b){const a=i.coords,m=i.colors,e=l.data,W=4*l.width;let n;a[s+1]>a[t+1]&&(n=s,s=t,t=n,n=d,d=Z,Z=n),a[t+1]>a[c+1]&&(n=t,t=c,c=n,n=Z,Z=b,b=n),a[s+1]>a[t+1]&&(n=s,s=t,t=n,n=d,d=Z,Z=n);const h=(a[s]+i.offsetX)*i.scaleX,G=(a[s+1]+i.offsetY)*i.scaleY,u=(a[t]+i.offsetX)*i.scaleX,N=(a[t+1]+i.offsetY)*i.scaleY,M=(a[c]+i.offsetX)*i.scaleX,I=(a[c+1]+i.offsetY)*i.scaleY;if(G>=I)return;const Y=m[d],X=m[d+1],L=m[d+2],y=m[Z],o=m[Z+1],V=m[Z+2],p=m[b],T=m[b+1],w=m[b+2],z=Math.round(G),R=Math.round(I);let r,C,S,x,D,J,k,j;for(let F=z;F<=R;F++){if(F<N){let l;l=F<G?0:(G-F)/(G-N),r=h-(h-u)*l,C=Y-(Y-y)*l,S=X-(X-o)*l,x=L-(L-V)*l}else{let l;l=F>I?1:N===I?0:(N-F)/(N-I),r=u-(u-M)*l,C=y-(y-p)*l,S=o-(o-T)*l,x=V-(V-w)*l}let l;l=F<G?0:F>I?1:(G-F)/(G-I),D=h-(h-M)*l,J=Y-(Y-p)*l,k=X-(X-T)*l,j=L-(L-w)*l;const i=Math.round(Math.min(r,D)),s=Math.round(Math.max(r,D));let t=W*F+4*i;for(let c=i;c<=s;c++)l=(r-c)/(r-D),l<0?l=0:l>1&&(l=1),e[t++]=C-(C-J)*l|0,e[t++]=S-(S-k)*l|0,e[t++]=x-(x-j)*l|0,e[t++]=255}}function W(l,i,s){const t=i.coords,c=i.colors;let d,Z;switch(i.type){case"lattice":const b=i.verticesPerRow,a=Math.floor(t.length/b)-1,m=b-1;for(d=0;d<a;d++){let i=d*b;for(let d=0;d<m;d++,i++)e(l,s,t[i],t[i+1],t[i+b],c[i],c[i+1],c[i+b]),e(l,s,t[i+b+1],t[i+1],t[i+b],c[i+b+1],c[i+1],c[i+b])}break;case"triangles":for(d=0,Z=t.length;d<Z;d+=3)e(l,s,t[d],t[d+1],t[d+2],c[d],c[d+1],c[d+2]);break;default:throw new Error("illegal figure")}}class n extends a{constructor(l){super(),this._coords=l[2],this._colors=l[3],this._figures=l[4],this._bounds=l[5],this._bbox=l[7],this._background=l[8],this.matrix=null}_createMeshCanvas(l,i,s){const t=1.1,c=3e3,d=2,Z=Math.floor(this._bounds[0]),b=Math.floor(this._bounds[1]),a=Math.ceil(this._bounds[2])-Z,m=Math.ceil(this._bounds[3])-b,e=Math.min(Math.ceil(Math.abs(a*l[0]*t)),c),n=Math.min(Math.ceil(Math.abs(m*l[1]*t)),c),h=a/e,G=m/n,u={coords:this._coords,colors:this._colors,offsetX:-Z,offsetY:-b,scaleX:1/h,scaleY:1/G},N=e+2*d,M=n+2*d,I=s.getCanvas("mesh",N,M,!1),Y=I.context,X=Y.createImageData(e,n);if(i){const l=X.data;for(let s=0,t=l.length;s<t;s+=4)l[s]=i[0],l[s+1]=i[1],l[s+2]=i[2],l[s+3]=255}for(const y of this._figures)W(X,y,u);Y.putImageData(X,d,d);const L=I.canvas;return{canvas:L,offsetX:Z-d*h,offsetY:b-d*G,scaleX:h,scaleY:G}}getPattern(l,i,s,d){let a;if(b(l,this._bbox),d===Z.SHADING)a=t.Util.singularValueDecompose2dScale((0,c.getCurrentTransform)(l));else if(a=t.Util.singularValueDecompose2dScale(i.baseTransform),this.matrix){const l=t.Util.singularValueDecompose2dScale(this.matrix);a=[a[0]*l[0],a[1]*l[1]]}const m=this._createMeshCanvas(a,d===Z.SHADING?null:this._background,i.cachedCanvases);return d!==Z.SHADING&&(l.setTransform(...i.baseTransform),this.matrix&&l.transform(...this.matrix)),l.translate(m.offsetX,m.offsetY),l.scale(m.scaleX,m.scaleY),l.createPattern(m.canvas,"no-repeat")}}class h extends a{getPattern(){return"hotpink"}}function G(l){switch(l[0]){case"RadialAxial":return new m(l);case"Mesh":return new n(l);case"Dummy":return new h}throw new Error(`Unknown IR type: ${l[0]}`)}const u={COLORED:1,UNCOLORED:2};class N{static get MAX_PATTERN_SIZE(){return(0,t.shadow)(this,"MAX_PATTERN_SIZE",3e3)}constructor(l,i,s,t,c){this.operatorList=l[2],this.matrix=l[3]||[1,0,0,1,0,0],this.bbox=l[4],this.xstep=l[5],this.ystep=l[6],this.paintType=l[7],this.tilingType=l[8],this.color=i,this.ctx=s,this.canvasGraphicsFactory=t,this.baseTransform=c}createPatternCanvas(l){const i=this.operatorList,s=this.bbox,d=this.xstep,Z=this.ystep,b=this.paintType,a=this.tilingType,m=this.color,e=this.canvasGraphicsFactory;(0,t.info)("TilingType: "+a);const W=s[0],n=s[1],h=s[2],G=s[3],u=t.Util.singularValueDecompose2dScale(this.matrix),N=t.Util.singularValueDecompose2dScale(this.baseTransform),M=[u[0]*N[0],u[1]*N[1]],I=this.getSizeAndScale(d,this.ctx.canvas.width,M[0]),Y=this.getSizeAndScale(Z,this.ctx.canvas.height,M[1]),X=l.cachedCanvases.getCanvas("pattern",I.size,Y.size,!0),L=X.context,y=e.createCanvasGraphics(L);y.groupLevel=l.groupLevel,this.setFillAndStrokeStyleToContext(y,b,m);let o=W,V=n,p=h,T=G;return W<0&&(o=0,p+=Math.abs(W)),n<0&&(V=0,T+=Math.abs(n)),L.translate(-I.scale*o,-Y.scale*V),y.transform(I.scale,0,0,Y.scale,0,0),L.save(),this.clipBbox(y,o,V,p,T),y.baseTransform=(0,c.getCurrentTransform)(y.ctx),y.executeOperatorList(i),y.endDrawing(),{canvas:X.canvas,scaleX:I.scale,scaleY:Y.scale,offsetX:o,offsetY:V}}getSizeAndScale(l,i,s){l=Math.abs(l);const t=Math.max(N.MAX_PATTERN_SIZE,i);let c=Math.ceil(l*s);return c>=t?c=t:s=c/l,{scale:s,size:c}}clipBbox(l,i,s,t,d){const Z=t-i,b=d-s;l.ctx.rect(i,s,Z,b),l.current.updateRectMinMax((0,c.getCurrentTransform)(l.ctx),[i,s,t,d]),l.clip(),l.endPath()}setFillAndStrokeStyleToContext(l,i,s){const c=l.ctx,d=l.current;switch(i){case u.COLORED:const l=this.ctx;c.fillStyle=l.fillStyle,c.strokeStyle=l.strokeStyle,d.fillColor=l.fillStyle,d.strokeColor=l.strokeStyle;break;case u.UNCOLORED:const Z=t.Util.makeHexColor(s[0],s[1],s[2]);c.fillStyle=Z,c.strokeStyle=Z,d.fillColor=Z,d.strokeColor=Z;break;default:throw new t.FormatError(`Unsupported paint type: ${i}`)}}getPattern(l,i,s,c){let d=s;c!==Z.SHADING&&(d=t.Util.transform(d,i.baseTransform),this.matrix&&(d=t.Util.transform(d,this.matrix)));const b=this.createPatternCanvas(i);let a=new DOMMatrix(d);a=a.translate(b.offsetX,b.offsetY),a=a.scale(1/b.scaleX,1/b.scaleY);const m=l.createPattern(b.canvas,"repeat");return m.setTransform(a),m}}i.TilingPattern=N},(l,i)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.isNodeJS=void 0;const s="object"===typeof process&&process+""==="[object process]"&&!process.versions.nw&&!(process.versions.electron&&process.type&&"browser"!==process.type);i.isNodeJS=s},(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.applyMaskImageData=c;var t=s(1);function c({src:l,srcPos:i=0,dest:s,destPos:c=0,width:d,height:Z,inverseDecode:b=!1}){const a=t.FeatureTest.isLittleEndian?4278190080:255,[m,e]=b?[0,a]:[a,0],W=d>>3,n=7&d,h=l.length;s=new Uint32Array(s.buffer);for(let t=0;t<Z;t++){for(const d=i+W;i<d;i++){const t=i<h?l[i]:255;s[c++]=128&t?e:m,s[c++]=64&t?e:m,s[c++]=32&t?e:m,s[c++]=16&t?e:m,s[c++]=8&t?e:m,s[c++]=4&t?e:m,s[c++]=2&t?e:m,s[c++]=1&t?e:m}if(0===n)continue;const t=i<h?l[i++]:255;for(let l=0;l<n;l++)s[c++]=t&1<<7-l?e:m}return{srcPos:i,destPos:c}}},(l,i)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.GlobalWorkerOptions=void 0;const s=Object.create(null);i.GlobalWorkerOptions=s,s.workerPort=void 0===s.workerPort?null:s.workerPort,s.workerSrc=void 0===s.workerSrc?"":s.workerSrc},(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.MessageHandler=void 0;var t=s(1);const c={UNKNOWN:0,DATA:1,ERROR:2},d={UNKNOWN:0,CANCEL:1,CANCEL_COMPLETE:2,CLOSE:3,ENQUEUE:4,ERROR:5,PULL:6,PULL_COMPLETE:7,START_COMPLETE:8};function Z(l){switch(l instanceof Error||"object"===typeof l&&null!==l||(0,t.unreachable)('wrapReason: Expected "reason" to be a (possibly cloned) Error.'),l.name){case"AbortException":return new t.AbortException(l.message);case"MissingPDFException":return new t.MissingPDFException(l.message);case"PasswordException":return new t.PasswordException(l.message,l.code);case"UnexpectedResponseException":return new t.UnexpectedResponseException(l.message,l.status);case"UnknownErrorException":return new t.UnknownErrorException(l.message,l.details);default:return new t.UnknownErrorException(l.message,l.toString())}}class b{constructor(l,i,s){this.sourceName=l,this.targetName=i,this.comObj=s,this.callbackId=1,this.streamId=1,this.streamSinks=Object.create(null),this.streamControllers=Object.create(null),this.callbackCapabilities=Object.create(null),this.actionHandler=Object.create(null),this._onComObjOnMessage=l=>{const i=l.data;if(i.targetName!==this.sourceName)return;if(i.stream)return void this._processStreamMessage(i);if(i.callback){const l=i.callbackId,s=this.callbackCapabilities[l];if(!s)throw new Error(`Cannot resolve callback ${l}`);if(delete this.callbackCapabilities[l],i.callback===c.DATA)s.resolve(i.data);else{if(i.callback!==c.ERROR)throw new Error("Unexpected callback case");s.reject(Z(i.reason))}return}const t=this.actionHandler[i.action];if(!t)throw new Error(`Unknown action from worker: ${i.action}`);if(i.callbackId){const l=this.sourceName,d=i.sourceName;new Promise((function(l){l(t(i.data))})).then((function(t){s.postMessage({sourceName:l,targetName:d,callback:c.DATA,callbackId:i.callbackId,data:t})}),(function(t){s.postMessage({sourceName:l,targetName:d,callback:c.ERROR,callbackId:i.callbackId,reason:Z(t)})}))}else i.streamId?this._createStreamSink(i):t(i.data)},s.addEventListener("message",this._onComObjOnMessage)}on(l,i){const s=this.actionHandler;if(s[l])throw new Error(`There is already an actionName called "${l}"`);s[l]=i}send(l,i,s){this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:l,data:i},s)}sendWithPromise(l,i,s){const c=this.callbackId++,d=(0,t.createPromiseCapability)();this.callbackCapabilities[c]=d;try{this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:l,callbackId:c,data:i},s)}catch(Z){d.reject(Z)}return d.promise}sendWithStream(l,i,s,c){const b=this.streamId++,a=this.sourceName,m=this.targetName,e=this.comObj;return new ReadableStream({start:s=>{const d=(0,t.createPromiseCapability)();return this.streamControllers[b]={controller:s,startCall:d,pullCall:null,cancelCall:null,isClosed:!1},e.postMessage({sourceName:a,targetName:m,action:l,streamId:b,data:i,desiredSize:s.desiredSize},c),d.promise},pull:l=>{const i=(0,t.createPromiseCapability)();return this.streamControllers[b].pullCall=i,e.postMessage({sourceName:a,targetName:m,stream:d.PULL,streamId:b,desiredSize:l.desiredSize}),i.promise},cancel:l=>{(0,t.assert)(l instanceof Error,"cancel must have a valid reason");const i=(0,t.createPromiseCapability)();return this.streamControllers[b].cancelCall=i,this.streamControllers[b].isClosed=!0,e.postMessage({sourceName:a,targetName:m,stream:d.CANCEL,streamId:b,reason:Z(l)}),i.promise}},s)}_createStreamSink(l){const i=l.streamId,s=this.sourceName,c=l.sourceName,b=this.comObj,a=this,m=this.actionHandler[l.action],e={enqueue(l,Z=1,a){if(this.isCancelled)return;const m=this.desiredSize;this.desiredSize-=Z,m>0&&this.desiredSize<=0&&(this.sinkCapability=(0,t.createPromiseCapability)(),this.ready=this.sinkCapability.promise),b.postMessage({sourceName:s,targetName:c,stream:d.ENQUEUE,streamId:i,chunk:l},a)},close(){this.isCancelled||(this.isCancelled=!0,b.postMessage({sourceName:s,targetName:c,stream:d.CLOSE,streamId:i}),delete a.streamSinks[i])},error(l){(0,t.assert)(l instanceof Error,"error must have a valid reason"),this.isCancelled||(this.isCancelled=!0,b.postMessage({sourceName:s,targetName:c,stream:d.ERROR,streamId:i,reason:Z(l)}))},sinkCapability:(0,t.createPromiseCapability)(),onPull:null,onCancel:null,isCancelled:!1,desiredSize:l.desiredSize,ready:null};e.sinkCapability.resolve(),e.ready=e.sinkCapability.promise,this.streamSinks[i]=e,new Promise((function(i){i(m(l.data,e))})).then((function(){b.postMessage({sourceName:s,targetName:c,stream:d.START_COMPLETE,streamId:i,success:!0})}),(function(l){b.postMessage({sourceName:s,targetName:c,stream:d.START_COMPLETE,streamId:i,reason:Z(l)})}))}_processStreamMessage(l){const i=l.streamId,s=this.sourceName,c=l.sourceName,b=this.comObj,a=this.streamControllers[i],m=this.streamSinks[i];switch(l.stream){case d.START_COMPLETE:l.success?a.startCall.resolve():a.startCall.reject(Z(l.reason));break;case d.PULL_COMPLETE:l.success?a.pullCall.resolve():a.pullCall.reject(Z(l.reason));break;case d.PULL:if(!m){b.postMessage({sourceName:s,targetName:c,stream:d.PULL_COMPLETE,streamId:i,success:!0});break}m.desiredSize<=0&&l.desiredSize>0&&m.sinkCapability.resolve(),m.desiredSize=l.desiredSize,new Promise((function(l){l(m.onPull&&m.onPull())})).then((function(){b.postMessage({sourceName:s,targetName:c,stream:d.PULL_COMPLETE,streamId:i,success:!0})}),(function(l){b.postMessage({sourceName:s,targetName:c,stream:d.PULL_COMPLETE,streamId:i,reason:Z(l)})}));break;case d.ENQUEUE:if((0,t.assert)(a,"enqueue should have stream controller"),a.isClosed)break;a.controller.enqueue(l.chunk);break;case d.CLOSE:if((0,t.assert)(a,"close should have stream controller"),a.isClosed)break;a.isClosed=!0,a.controller.close(),this._deleteStreamController(a,i);break;case d.ERROR:(0,t.assert)(a,"error should have stream controller"),a.controller.error(Z(l.reason)),this._deleteStreamController(a,i);break;case d.CANCEL_COMPLETE:l.success?a.cancelCall.resolve():a.cancelCall.reject(Z(l.reason)),this._deleteStreamController(a,i);break;case d.CANCEL:if(!m)break;new Promise((function(i){i(m.onCancel&&m.onCancel(Z(l.reason)))})).then((function(){b.postMessage({sourceName:s,targetName:c,stream:d.CANCEL_COMPLETE,streamId:i,success:!0})}),(function(l){b.postMessage({sourceName:s,targetName:c,stream:d.CANCEL_COMPLETE,streamId:i,reason:Z(l)})})),m.sinkCapability.reject(Z(l.reason)),m.isCancelled=!0,delete this.streamSinks[i];break;default:throw new Error("Unexpected stream case")}}async _deleteStreamController(l,i){await Promise.allSettled([l.startCall&&l.startCall.promise,l.pullCall&&l.pullCall.promise,l.cancelCall&&l.cancelCall.promise]),delete this.streamControllers[i]}destroy(){this.comObj.removeEventListener("message",this._onComObjOnMessage)}}i.MessageHandler=b},(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.Metadata=void 0;var t=s(1);class c{#tl;#cl;constructor({parsedData:l,rawData:i}){this.#tl=l,this.#cl=i}getRaw(){return this.#cl}get(l){return this.#tl.get(l)??null}getAll(){return(0,t.objectFromMap)(this.#tl)}has(l){return this.#tl.has(l)}}i.Metadata=c},(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.OptionalContentConfig=void 0;var t=s(1),c=s(8);const d=Symbol("INTERNAL");class Z{#dl=!0;constructor(l,i){this.name=l,this.intent=i}get visible(){return this.#dl}_setVisible(l,i){l!==d&&(0,t.unreachable)("Internal method `_setVisible` called."),this.#dl=i}}class b{#Zl=null;#bl=new Map;#al=null;#ml=null;constructor(l){if(this.name=null,this.creator=null,null!==l){this.name=l.name,this.creator=l.creator,this.#ml=l.order;for(const i of l.groups)this.#bl.set(i.id,new Z(i.name,i.intent));if("OFF"===l.baseState)for(const l of this.#bl.values())l._setVisible(d,!1);for(const i of l.on)this.#bl.get(i)._setVisible(d,!0);for(const i of l.off)this.#bl.get(i)._setVisible(d,!1);this.#al=this.getHash()}}#el(l){const i=l.length;if(i<2)return!0;const s=l[0];for(let c=1;c<i;c++){const i=l[c];let d;if(Array.isArray(i))d=this.#el(i);else{if(!this.#bl.has(i))return(0,t.warn)(`Optional content group not found: ${i}`),!0;d=this.#bl.get(i).visible}switch(s){case"And":if(!d)return!1;break;case"Or":if(d)return!0;break;case"Not":return!d;default:return!0}}return"And"===s}isVisible(l){if(0===this.#bl.size)return!0;if(!l)return(0,t.warn)("Optional content group not defined."),!0;if("OCG"===l.type)return this.#bl.has(l.id)?this.#bl.get(l.id).visible:((0,t.warn)(`Optional content group not found: ${l.id}`),!0);if("OCMD"===l.type){if(l.expression)return this.#el(l.expression);if(!l.policy||"AnyOn"===l.policy){for(const i of l.ids){if(!this.#bl.has(i))return(0,t.warn)(`Optional content group not found: ${i}`),!0;if(this.#bl.get(i).visible)return!0}return!1}if("AllOn"===l.policy){for(const i of l.ids){if(!this.#bl.has(i))return(0,t.warn)(`Optional content group not found: ${i}`),!0;if(!this.#bl.get(i).visible)return!1}return!0}if("AnyOff"===l.policy){for(const i of l.ids){if(!this.#bl.has(i))return(0,t.warn)(`Optional content group not found: ${i}`),!0;if(!this.#bl.get(i).visible)return!0}return!1}if("AllOff"===l.policy){for(const i of l.ids){if(!this.#bl.has(i))return(0,t.warn)(`Optional content group not found: ${i}`),!0;if(this.#bl.get(i).visible)return!1}return!0}return(0,t.warn)(`Unknown optional content policy ${l.policy}.`),!0}return(0,t.warn)(`Unknown group type ${l.type}.`),!0}setVisibility(l,i=!0){this.#bl.has(l)?(this.#bl.get(l)._setVisible(d,!!i),this.#Zl=null):(0,t.warn)(`Optional content group not found: ${l}`)}get hasInitialVisibility(){return this.getHash()===this.#al}getOrder(){return this.#bl.size?this.#ml?this.#ml.slice():[...this.#bl.keys()]:null}getGroups(){return this.#bl.size>0?(0,t.objectFromMap)(this.#bl):null}getGroup(l){return this.#bl.get(l)||null}getHash(){if(null!==this.#Zl)return this.#Zl;const l=new c.MurmurHash3_64;for(const[i,s]of this.#bl)l.update(`${i}:${s.visible}`);return this.#Zl=l.hexdigest()}}i.OptionalContentConfig=b},(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.PDFDataTransportStream=void 0;var t=s(1),c=s(6);class d{constructor(l,i){(0,t.assert)(i,'PDFDataTransportStream - missing required "pdfDataRangeTransport" argument.'),this._queuedChunks=[],this._progressiveDone=l.progressiveDone||!1,this._contentDispositionFilename=l.contentDispositionFilename||null;const s=l.initialData;if(s?.length>0){const l=new Uint8Array(s).buffer;this._queuedChunks.push(l)}this._pdfDataRangeTransport=i,this._isStreamingSupported=!l.disableStream,this._isRangeSupported=!l.disableRange,this._contentLength=l.length,this._fullRequestReader=null,this._rangeReaders=[],this._pdfDataRangeTransport.addRangeListener(((l,i)=>{this._onReceiveData({begin:l,chunk:i})})),this._pdfDataRangeTransport.addProgressListener(((l,i)=>{this._onProgress({loaded:l,total:i})})),this._pdfDataRangeTransport.addProgressiveReadListener((l=>{this._onReceiveData({chunk:l})})),this._pdfDataRangeTransport.addProgressiveDoneListener((()=>{this._onProgressiveDone()})),this._pdfDataRangeTransport.transportReady()}_onReceiveData(l){const i=new Uint8Array(l.chunk).buffer;if(void 0===l.begin)this._fullRequestReader?this._fullRequestReader._enqueue(i):this._queuedChunks.push(i);else{const s=this._rangeReaders.some((function(s){return s._begin===l.begin&&(s._enqueue(i),!0)}));(0,t.assert)(s,"_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found.")}}get _progressiveDataLength(){return this._fullRequestReader?._loaded??0}_onProgress(l){void 0===l.total?this._rangeReaders[0]?.onProgress?.({loaded:l.loaded}):this._fullRequestReader?.onProgress?.({loaded:l.loaded,total:l.total})}_onProgressiveDone(){this._fullRequestReader?.progressiveDone(),this._progressiveDone=!0}_removeRangeReader(l){const i=this._rangeReaders.indexOf(l);i>=0&&this._rangeReaders.splice(i,1)}getFullReader(){(0,t.assert)(!this._fullRequestReader,"PDFDataTransportStream.getFullReader can only be called once.");const l=this._queuedChunks;return this._queuedChunks=null,new Z(this,l,this._progressiveDone,this._contentDispositionFilename)}getRangeReader(l,i){if(i<=this._progressiveDataLength)return null;const s=new b(this,l,i);return this._pdfDataRangeTransport.requestDataRange(l,i),this._rangeReaders.push(s),s}cancelAllRequests(l){this._fullRequestReader?.cancel(l);for(const i of this._rangeReaders.slice(0))i.cancel(l);this._pdfDataRangeTransport.abort()}}i.PDFDataTransportStream=d;class Z{constructor(l,i,s=!1,t=null){this._stream=l,this._done=s||!1,this._filename=(0,c.isPdfFile)(t)?t:null,this._queuedChunks=i||[],this._loaded=0;for(const c of this._queuedChunks)this._loaded+=c.byteLength;this._requests=[],this._headersReady=Promise.resolve(),l._fullRequestReader=this,this.onProgress=null}_enqueue(l){if(!this._done){if(this._requests.length>0){const i=this._requests.shift();i.resolve({value:l,done:!1})}else this._queuedChunks.push(l);this._loaded+=l.byteLength}}get headersReady(){return this._headersReady}get filename(){return this._filename}get isRangeSupported(){return this._stream._isRangeSupported}get isStreamingSupported(){return this._stream._isStreamingSupported}get contentLength(){return this._stream._contentLength}async read(){if(this._queuedChunks.length>0){const l=this._queuedChunks.shift();return{value:l,done:!1}}if(this._done)return{value:void 0,done:!0};const l=(0,t.createPromiseCapability)();return this._requests.push(l),l.promise}cancel(l){this._done=!0;for(const i of this._requests)i.resolve({value:void 0,done:!0});this._requests.length=0}progressiveDone(){this._done||(this._done=!0)}}class b{constructor(l,i,s){this._stream=l,this._begin=i,this._end=s,this._queuedChunk=null,this._requests=[],this._done=!1,this.onProgress=null}_enqueue(l){if(!this._done){if(0===this._requests.length)this._queuedChunk=l;else{const i=this._requests.shift();i.resolve({value:l,done:!1});for(const l of this._requests)l.resolve({value:void 0,done:!0});this._requests.length=0}this._done=!0,this._stream._removeRangeReader(this)}}get isStreamingSupported(){return!1}async read(){if(this._queuedChunk){const l=this._queuedChunk;return this._queuedChunk=null,{value:l,done:!1}}if(this._done)return{value:void 0,done:!0};const l=(0,t.createPromiseCapability)();return this._requests.push(l),l.promise}cancel(l){this._done=!0;for(const i of this._requests)i.resolve({value:void 0,done:!0});this._requests.length=0,this._stream._removeRangeReader(this)}}},(l,i)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.XfaText=void 0;class s{static textContent(l){const i=[],t={items:i,styles:Object.create(null)};function c(l){if(!l)return;let t=null;const d=l.name;if("#text"===d)t=l.value;else{if(!s.shouldBuildText(d))return;l?.attributes?.textContent?t=l.attributes.textContent:l.value&&(t=l.value)}if(null!==t&&i.push({str:t}),l.children)for(const i of l.children)c(i)}return c(l),t}static shouldBuildText(l){return!("textarea"===l||"input"===l||"option"===l||"select"===l)}}i.XfaText=s},(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.NodeStandardFontDataFactory=i.NodeCanvasFactory=i.NodeCMapReaderFactory=void 0;var t=s(7);const c=function(l){return new Promise(((i,s)=>{const t=__webpack_require__(824);t.readFile(l,((l,t)=>{!l&&t?i(new Uint8Array(t)):s(new Error(l))}))}))};class d extends t.BaseCanvasFactory{_createCanvas(l,i){const s=__webpack_require__(793);return s.createCanvas(l,i)}}i.NodeCanvasFactory=d;class Z extends t.BaseCMapReaderFactory{_fetchData(l,i){return c(l).then((l=>({cMapData:l,compressionType:i})))}}i.NodeCMapReaderFactory=Z;class b extends t.BaseStandardFontDataFactory{_fetchData(l){return c(l)}}i.NodeStandardFontDataFactory=b},(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.AnnotationEditorLayer=void 0;var t=s(5),c=s(1),d=s(22),Z=s(23);class b{#Wl;#nl=!1;#hl=this.pointerup.bind(this);#Gl=this.pointerdown.bind(this);#ul=new Map;#Nl=!1;#Ml=!1;#Il;static _initialized=!1;constructor(l){b._initialized||(b._initialized=!0,d.FreeTextEditor.initialize(l.l10n),Z.InkEditor.initialize(l.l10n)),l.uiManager.registerEditorTypes([d.FreeTextEditor,Z.InkEditor]),this.#Il=l.uiManager,this.annotationStorage=l.annotationStorage,this.pageIndex=l.pageIndex,this.div=l.div,this.#Wl=l.accessibilityManager,this.#Il.addLayer(this)}updateToolbar(l){this.#Il.updateToolbar(l)}updateMode(l=this.#Il.getMode()){this.#Yl(),l===c.AnnotationEditorType.INK?(this.addInkEditorIfNeeded(!1),this.disableClick()):this.enableClick(),this.#Il.unselectAll(),this.div.classList.toggle("freeTextEditing",l===c.AnnotationEditorType.FREETEXT),this.div.classList.toggle("inkEditing",l===c.AnnotationEditorType.INK)}addInkEditorIfNeeded(l){if(!l&&this.#Il.getMode()!==c.AnnotationEditorType.INK)return;if(!l)for(const s of this.#ul.values())if(s.isEmpty())return void s.setInBackground();const i=this.#Xl({offsetX:0,offsetY:0});i.setInBackground()}setEditingState(l){this.#Il.setEditingState(l)}addCommands(l){this.#Il.addCommands(l)}enable(){this.div.style.pointerEvents="auto";for(const l of this.#ul.values())l.enableEditing()}disable(){this.div.style.pointerEvents="none";for(const l of this.#ul.values())l.disableEditing()}setActiveEditor(l){const i=this.#Il.getActive();i!==l&&this.#Il.setActiveEditor(l)}enableClick(){this.div.addEventListener("pointerdown",this.#Gl),this.div.addEventListener("pointerup",this.#hl)}disableClick(){this.div.removeEventListener("pointerdown",this.#Gl),this.div.removeEventListener("pointerup",this.#hl)}attach(l){this.#ul.set(l.id,l)}detach(l){this.#ul.delete(l.id),this.#Wl?.removePointerInTextLayer(l.contentDiv)}remove(l){this.#Il.removeEditor(l),this.detach(l),this.annotationStorage.remove(l.id),l.div.style.display="none",setTimeout((()=>{l.div.style.display="",l.div.remove(),l.isAttachedToDOM=!1,document.activeElement===document.body&&this.#Il.focusMainContainer()}),0),this.#Ml||this.addInkEditorIfNeeded(!1)}#Ll(l){l.parent!==this&&(this.attach(l),l.pageIndex=this.pageIndex,l.parent?.detach(l),l.parent=this,l.div&&l.isAttachedToDOM&&(l.div.remove(),this.div.append(l.div)))}add(l){if(this.#Ll(l),this.#Il.addEditor(l),this.attach(l),!l.isAttachedToDOM){const i=l.render();this.div.append(i),l.isAttachedToDOM=!0}this.moveEditorInDOM(l),l.onceAdded(),this.addToAnnotationStorage(l)}moveEditorInDOM(l){this.#Wl?.moveElementInDOM(this.div,l.div,l.contentDiv,!0)}addToAnnotationStorage(l){l.isEmpty()||this.annotationStorage.has(l.id)||this.annotationStorage.setValue(l.id,l)}addOrRebuild(l){l.needsToBeRebuilt()?l.rebuild():this.add(l)}addANewEditor(l){const i=()=>{this.addOrRebuild(l)},s=()=>{l.remove()};this.addCommands({cmd:i,undo:s,mustExec:!0})}addUndoableEditor(l){const i=()=>{this.addOrRebuild(l)},s=()=>{l.remove()};this.addCommands({cmd:i,undo:s,mustExec:!1})}getNextId(){return this.#Il.getId()}#yl(l){switch(this.#Il.getMode()){case c.AnnotationEditorType.FREETEXT:return new d.FreeTextEditor(l);case c.AnnotationEditorType.INK:return new Z.InkEditor(l)}return null}deserialize(l){switch(l.annotationType){case c.AnnotationEditorType.FREETEXT:return d.FreeTextEditor.deserialize(l,this);case c.AnnotationEditorType.INK:return Z.InkEditor.deserialize(l,this)}return null}#Xl(l){const i=this.getNextId(),s=this.#yl({parent:this,id:i,x:l.offsetX,y:l.offsetY});return s&&this.add(s),s}setSelected(l){this.#Il.setSelected(l)}toggleSelected(l){this.#Il.toggleSelected(l)}isSelected(l){return this.#Il.isSelected(l)}unselect(l){this.#Il.unselect(l)}pointerup(l){const i=t.KeyboardManager.platform.isMac;0!==l.button||l.ctrlKey&&i||l.target===this.div&&this.#Nl&&(this.#Nl=!1,this.#nl?this.#Xl(l):this.#nl=!0)}pointerdown(l){const i=t.KeyboardManager.platform.isMac;if(0!==l.button||l.ctrlKey&&i)return;if(l.target!==this.div)return;this.#Nl=!0;const s=this.#Il.getActive();this.#nl=!s||s.isEmpty()}drop(l){const i=l.dataTransfer.getData("text/plain"),s=this.#Il.getEditor(i);if(!s)return;l.preventDefault(),l.dataTransfer.dropEffect="move",this.#Ll(s);const t=this.div.getBoundingClientRect(),c=l.clientX-t.x,d=l.clientY-t.y;s.translate(c-s.startX,d-s.startY),this.moveEditorInDOM(s),s.div.focus()}dragover(l){l.preventDefault()}destroy(){this.#Il.getActive()?.parent===this&&this.#Il.setActiveEditor(null);for(const l of this.#ul.values())this.#Wl?.removePointerInTextLayer(l.contentDiv),l.isAttachedToDOM=!1,l.div.remove(),l.parent=null;this.div=null,this.#ul.clear(),this.#Il.removeLayer(this)}#Yl(){this.#Ml=!0;for(const l of this.#ul.values())l.isEmpty()&&l.remove();this.#Ml=!1}render(l){this.viewport=l.viewport,(0,t.bindEvents)(this,this.div,["dragover","drop"]),this.setDimensions();for(const i of this.#Il.getEditors(this.pageIndex))this.add(i);this.updateMode()}update(l){this.#Il.commitOrRemove(),this.viewport=l.viewport,this.setDimensions(),this.updateMode()}get scaleFactor(){return this.viewport.scale}get pageDimensions(){const[l,i,s,t]=this.viewport.viewBox,c=s-l,d=t-i;return[c,d]}get viewportBaseDimensions(){const{width:l,height:i,rotation:s}=this.viewport;return s%180===0?[l,i]:[i,l]}setDimensions(){const{width:l,height:i,rotation:s}=this.viewport,t=s%180!==0,c=Math.floor(l)+"px",d=Math.floor(i)+"px";this.div.style.width=t?d:c,this.div.style.height=t?c:d,this.div.setAttribute("data-main-rotation",s)}}i.AnnotationEditorLayer=b},(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.FreeTextEditor=void 0;var t=s(1),c=s(5),d=s(4);class Z extends d.AnnotationEditor{#ol=this.editorDivBlur.bind(this);#Vl=this.editorDivFocus.bind(this);#pl=this.editorDivInput.bind(this);#Tl=this.editorDivKeydown.bind(this);#wl;#zl="";#Rl=`${this.id}-editor`;#rl=!1;#Cl;static _freeTextDefaultContent="";static _l10nPromise;static _internalPadding=0;static _defaultColor=null;static _defaultFontSize=10;static _keyboardManager=new c.KeyboardManager([[["ctrl+Enter","mac+meta+Enter","Escape","mac+Escape"],Z.prototype.commitOrRemove]]);static _type="freetext";constructor(l){super({...l,name:"freeTextEditor"}),this.#wl=l.color||Z._defaultColor||d.AnnotationEditor._defaultLineColor,this.#Cl=l.fontSize||Z._defaultFontSize}static initialize(l){this._l10nPromise=new Map(["free_text2_default_content","editor_free_text2_aria_label"].map((i=>[i,l.get(i)])));const i=getComputedStyle(document.documentElement);this._internalPadding=parseFloat(i.getPropertyValue("--freetext-padding"))}static updateDefaultParams(l,i){switch(l){case t.AnnotationEditorParamsType.FREETEXT_SIZE:Z._defaultFontSize=i;break;case t.AnnotationEditorParamsType.FREETEXT_COLOR:Z._defaultColor=i;break}}updateParams(l,i){switch(l){case t.AnnotationEditorParamsType.FREETEXT_SIZE:this.#Sl(i);break;case t.AnnotationEditorParamsType.FREETEXT_COLOR:this.#xl(i);break}}static get defaultPropertiesToUpdate(){return[[t.AnnotationEditorParamsType.FREETEXT_SIZE,Z._defaultFontSize],[t.AnnotationEditorParamsType.FREETEXT_COLOR,Z._defaultColor||d.AnnotationEditor._defaultLineColor]]}get propertiesToUpdate(){return[[t.AnnotationEditorParamsType.FREETEXT_SIZE,this.#Cl],[t.AnnotationEditorParamsType.FREETEXT_COLOR,this.#wl]]}#Sl(l){const i=l=>{this.editorDiv.style.fontSize=`calc(${l}px * var(--scale-factor))`,this.translate(0,-(l-this.#Cl)*this.parent.scaleFactor),this.#Cl=l,this.#Dl()},s=this.#Cl;this.parent.addCommands({cmd:()=>{i(l)},undo:()=>{i(s)},mustExec:!0,type:t.AnnotationEditorParamsType.FREETEXT_SIZE,overwriteIfSameType:!0,keepUndo:!0})}#xl(l){const i=this.#wl;this.parent.addCommands({cmd:()=>{this.#wl=l,this.editorDiv.style.color=l},undo:()=>{this.#wl=i,this.editorDiv.style.color=i},mustExec:!0,type:t.AnnotationEditorParamsType.FREETEXT_COLOR,overwriteIfSameType:!0,keepUndo:!0})}getInitialTranslation(){return[-Z._internalPadding*this.parent.scaleFactor,-(Z._internalPadding+this.#Cl)*this.parent.scaleFactor]}rebuild(){super.rebuild(),null!==this.div&&(this.isAttachedToDOM||this.parent.add(this))}enableEditMode(){this.isInEditMode()||(this.parent.setEditingState(!1),this.parent.updateToolbar(t.AnnotationEditorType.FREETEXT),super.enableEditMode(),this.overlayDiv.classList.remove("enabled"),this.editorDiv.contentEditable=!0,this.div.draggable=!1,this.div.removeAttribute("aria-activedescendant"),this.editorDiv.addEventListener("keydown",this.#Tl),this.editorDiv.addEventListener("focus",this.#Vl),this.editorDiv.addEventListener("blur",this.#ol),this.editorDiv.addEventListener("input",this.#pl))}disableEditMode(){this.isInEditMode()&&(this.parent.setEditingState(!0),super.disableEditMode(),this.overlayDiv.classList.add("enabled"),this.editorDiv.contentEditable=!1,this.div.setAttribute("aria-activedescendant",this.#Rl),this.div.draggable=!0,this.editorDiv.removeEventListener("keydown",this.#Tl),this.editorDiv.removeEventListener("focus",this.#Vl),this.editorDiv.removeEventListener("blur",this.#ol),this.editorDiv.removeEventListener("input",this.#pl),this.div.focus(),this.isEditing=!1,this.parent.div.classList.add("freeTextEditing"))}focusin(l){super.focusin(l),l.target!==this.editorDiv&&this.editorDiv.focus()}onceAdded(){this.width||(this.enableEditMode(),this.editorDiv.focus())}isEmpty(){return!this.editorDiv||""===this.editorDiv.innerText.trim()}remove(){this.isEditing=!1,this.parent.setEditingState(!0),this.parent.div.classList.add("freeTextEditing"),super.remove()}#Jl(){const l=this.editorDiv.getElementsByTagName("div");if(0===l.length)return this.editorDiv.innerText;const i=[];for(const s of l){const l=s.firstChild;"#text"===l?.nodeName?i.push(l.data):i.push("")}return i.join("\n")}#Dl(){const[l,i]=this.parent.viewportBaseDimensions,s=this.div.getBoundingClientRect();this.width=s.width/l,this.height=s.height/i}commit(){super.commit(),this.#rl||(this.#rl=!0,this.parent.addUndoableEditor(this)),this.disableEditMode(),this.#zl=this.#Jl().trimEnd(),this.#Dl()}shouldGetKeyboardEvents(){return this.isInEditMode()}dblclick(l){this.enableEditMode(),this.editorDiv.focus()}keydown(l){l.target===this.div&&"Enter"===l.key&&(this.enableEditMode(),this.editorDiv.focus())}editorDivKeydown(l){Z._keyboardManager.exec(this,l)}editorDivFocus(l){this.isEditing=!0}editorDivBlur(l){this.isEditing=!1}editorDivInput(l){this.parent.div.classList.toggle("freeTextEditing",this.isEmpty())}disableEditing(){this.editorDiv.setAttribute("role","comment"),this.editorDiv.removeAttribute("aria-multiline")}enableEditing(){this.editorDiv.setAttribute("role","textbox"),this.editorDiv.setAttribute("aria-multiline",!0)}render(){if(this.div)return this.div;let l,i;this.width&&(l=this.x,i=this.y),super.render(),this.editorDiv=document.createElement("div"),this.editorDiv.className="internal",this.editorDiv.setAttribute("id",this.#Rl),this.enableEditing(),Z._l10nPromise.get("editor_free_text2_aria_label").then((l=>this.editorDiv?.setAttribute("aria-label",l))),Z._l10nPromise.get("free_text2_default_content").then((l=>this.editorDiv?.setAttribute("default-content",l))),this.editorDiv.contentEditable=!0;const{style:s}=this.editorDiv;if(s.fontSize=`calc(${this.#Cl}px * var(--scale-factor))`,s.color=this.#wl,this.div.append(this.editorDiv),this.overlayDiv=document.createElement("div"),this.overlayDiv.classList.add("overlay","enabled"),this.div.append(this.overlayDiv),(0,c.bindEvents)(this,this.div,["dblclick","keydown"]),this.width){const[s,t]=this.parent.viewportBaseDimensions;this.setAt(l*s,i*t,this.width*s,this.height*t);for(const l of this.#zl.split("\n")){const i=document.createElement("div");i.append(l?document.createTextNode(l):document.createElement("br")),this.editorDiv.append(i)}this.div.draggable=!0,this.editorDiv.contentEditable=!1}else this.div.draggable=!1,this.editorDiv.contentEditable=!0;return this.div}get contentDiv(){return this.editorDiv}static deserialize(l,i){const s=super.deserialize(l,i);return s.#Cl=l.fontSize,s.#wl=t.Util.makeHexColor(...l.color),s.#zl=l.value,s}serialize(){if(this.isEmpty())return null;const l=Z._internalPadding*this.parent.scaleFactor,i=this.getRect(l,l),s=d.AnnotationEditor._colorManager.convert(getComputedStyle(this.editorDiv).color);return{annotationType:t.AnnotationEditorType.FREETEXT,color:s,fontSize:this.#Cl,value:this.#zl,pageIndex:this.parent.pageIndex,rect:i,rotation:this.rotation}}}i.FreeTextEditor=Z},(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.InkEditor=void 0,Object.defineProperty(i,"fitCurve",{enumerable:!0,get:function(){return d.fitCurve}});var t=s(1),c=s(4),d=s(24),Z=s(5);const b=16,a=100;class m extends c.AnnotationEditor{#kl=0;#jl=0;#Fl=0;#Ul=this.canvasPointermove.bind(this);#Ol=this.canvasPointerleave.bind(this);#gl=this.canvasPointerup.bind(this);#Kl=this.canvasPointerdown.bind(this);#El=!1;#Ql=!1;#vl=null;#Hl=null;#Pl=0;#Bl=0;#fl=null;static _defaultColor=null;static _defaultOpacity=1;static _defaultThickness=1;static _l10nPromise;static _type="ink";constructor(l){super({...l,name:"inkEditor"}),this.color=l.color||null,this.thickness=l.thickness||null,this.opacity=l.opacity||null,this.paths=[],this.bezierPath2D=[],this.currentPath=[],this.scaleFactor=1,this.translationX=this.translationY=0,this.x=0,this.y=0}static initialize(l){this._l10nPromise=new Map(["editor_ink_canvas_aria_label","editor_ink2_aria_label"].map((i=>[i,l.get(i)])))}static updateDefaultParams(l,i){switch(l){case t.AnnotationEditorParamsType.INK_THICKNESS:m._defaultThickness=i;break;case t.AnnotationEditorParamsType.INK_COLOR:m._defaultColor=i;break;case t.AnnotationEditorParamsType.INK_OPACITY:m._defaultOpacity=i/100;break}}updateParams(l,i){switch(l){case t.AnnotationEditorParamsType.INK_THICKNESS:this.#Al(i);break;case t.AnnotationEditorParamsType.INK_COLOR:this.#xl(i);break;case t.AnnotationEditorParamsType.INK_OPACITY:this.#_l(i);break}}static get defaultPropertiesToUpdate(){return[[t.AnnotationEditorParamsType.INK_THICKNESS,m._defaultThickness],[t.AnnotationEditorParamsType.INK_COLOR,m._defaultColor||c.AnnotationEditor._defaultLineColor],[t.AnnotationEditorParamsType.INK_OPACITY,Math.round(100*m._defaultOpacity)]]}get propertiesToUpdate(){return[[t.AnnotationEditorParamsType.INK_THICKNESS,this.thickness||m._defaultThickness],[t.AnnotationEditorParamsType.INK_COLOR,this.color||m._defaultColor||c.AnnotationEditor._defaultLineColor],[t.AnnotationEditorParamsType.INK_OPACITY,Math.round(100*(this.opacity??m._defaultOpacity))]]}#Al(l){const i=this.thickness;this.parent.addCommands({cmd:()=>{this.thickness=l,this.#ql()},undo:()=>{this.thickness=i,this.#ql()},mustExec:!0,type:t.AnnotationEditorParamsType.INK_THICKNESS,overwriteIfSameType:!0,keepUndo:!0})}#xl(l){const i=this.color;this.parent.addCommands({cmd:()=>{this.color=l,this.#$l()},undo:()=>{this.color=i,this.#$l()},mustExec:!0,type:t.AnnotationEditorParamsType.INK_COLOR,overwriteIfSameType:!0,keepUndo:!0})}#_l(l){l/=100;const i=this.opacity;this.parent.addCommands({cmd:()=>{this.opacity=l,this.#$l()},undo:()=>{this.opacity=i,this.#$l()},mustExec:!0,type:t.AnnotationEditorParamsType.INK_OPACITY,overwriteIfSameType:!0,keepUndo:!0})}rebuild(){super.rebuild(),null!==this.div&&(this.canvas||(this.#li(),this.#ii()),this.isAttachedToDOM||(this.parent.add(this),this.#si()),this.#ql())}remove(){null!==this.canvas&&(this.isEmpty()||this.commit(),this.canvas.width=this.canvas.height=0,this.canvas.remove(),this.canvas=null,this.#Hl.disconnect(),this.#Hl=null,super.remove())}enableEditMode(){this.#El||null===this.canvas||(super.enableEditMode(),this.div.draggable=!1,this.canvas.addEventListener("pointerdown",this.#Kl),this.canvas.addEventListener("pointerup",this.#gl))}disableEditMode(){this.isInEditMode()&&null!==this.canvas&&(super.disableEditMode(),this.div.draggable=!this.isEmpty(),this.div.classList.remove("editing"),this.canvas.removeEventListener("pointerdown",this.#Kl),this.canvas.removeEventListener("pointerup",this.#gl))}onceAdded(){this.div.draggable=!this.isEmpty()}isEmpty(){return 0===this.paths.length||1===this.paths.length&&0===this.paths[0].length}#ti(){const{width:l,height:i,rotation:s}=this.parent.viewport;switch(s){case 90:return[0,l,l,i];case 180:return[l,i,l,i];case 270:return[i,0,l,i];default:return[0,0,l,i]}}#ci(){this.ctx.lineWidth=this.thickness*this.parent.scaleFactor/this.scaleFactor,this.ctx.lineCap="round",this.ctx.lineJoin="round",this.ctx.miterLimit=10,this.ctx.strokeStyle=`${this.color}${(0,Z.opacityToHex)(this.opacity)}`}#di(l,i){this.isEditing=!0,this.#Ql||(this.#Ql=!0,this.#si(),this.thickness||=m._defaultThickness,this.color||=m._defaultColor||c.AnnotationEditor._defaultLineColor,this.opacity??=m._defaultOpacity),this.currentPath.push([l,i]),this.#vl=null,this.#ci(),this.ctx.beginPath(),this.ctx.moveTo(l,i),this.#fl=()=>{this.#fl&&(this.#vl&&(this.isEmpty()?(this.ctx.setTransform(1,0,0,1,0,0),this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height)):this.#$l(),this.ctx.lineTo(...this.#vl),this.#vl=null,this.ctx.stroke()),window.requestAnimationFrame(this.#fl))},window.requestAnimationFrame(this.#fl)}#Zi(l,i){const[s,t]=this.currentPath.at(-1);l===s&&i===t||(this.currentPath.push([l,i]),this.#vl=[l,i])}#bi(l,i){this.ctx.closePath(),this.#fl=null,l=Math.min(Math.max(l,0),this.canvas.width),i=Math.min(Math.max(i,0),this.canvas.height);const[s,t]=this.currentPath.at(-1);let c;if(l===s&&i===t||this.currentPath.push([l,i]),1!==this.currentPath.length)c=(0,d.fitCurve)(this.currentPath,30,null);else{const s=[l,i];c=[[s,s.slice(),s.slice(),s]]}const Z=m.#ai(c);this.currentPath.length=0;const b=()=>{this.paths.push(c),this.bezierPath2D.push(Z),this.rebuild()},a=()=>{this.paths.pop(),this.bezierPath2D.pop(),0===this.paths.length?this.remove():(this.canvas||(this.#li(),this.#ii()),this.#ql())};this.parent.addCommands({cmd:b,undo:a,mustExec:!0})}#$l(){if(this.isEmpty())return void this.#mi();this.#ci();const{canvas:l,ctx:i}=this;i.setTransform(1,0,0,1,0,0),i.clearRect(0,0,l.width,l.height),this.#mi();for(const s of this.bezierPath2D)i.stroke(s)}commit(){this.#El||(super.commit(),this.isEditing=!1,this.disableEditMode(),this.setInForeground(),this.#El=!0,this.div.classList.add("disabled"),this.#ql(!0),this.parent.addInkEditorIfNeeded(!0),this.parent.moveEditorInDOM(this),this.div.focus())}focusin(l){super.focusin(l),this.enableEditMode()}canvasPointerdown(l){0===l.button&&this.isInEditMode()&&!this.#El&&(this.setInForeground(),"mouse"!==l.type&&this.div.focus(),l.stopPropagation(),this.canvas.addEventListener("pointerleave",this.#Ol),this.canvas.addEventListener("pointermove",this.#Ul),this.#di(l.offsetX,l.offsetY))}canvasPointermove(l){l.stopPropagation(),this.#Zi(l.offsetX,l.offsetY)}canvasPointerup(l){0===l.button&&this.isInEditMode()&&0!==this.currentPath.length&&(l.stopPropagation(),this.#ei(l),this.setInBackground())}canvasPointerleave(l){this.#ei(l),this.setInBackground()}#ei(l){this.#bi(l.offsetX,l.offsetY),this.canvas.removeEventListener("pointerleave",this.#Ol),this.canvas.removeEventListener("pointermove",this.#Ul),this.parent.addToAnnotationStorage(this)}#li(){this.canvas=document.createElement("canvas"),this.canvas.width=this.canvas.height=0,this.canvas.className="inkEditorCanvas",m._l10nPromise.get("editor_ink_canvas_aria_label").then((l=>this.canvas?.setAttribute("aria-label",l))),this.div.append(this.canvas),this.ctx=this.canvas.getContext("2d")}#ii(){let l=null;this.#Hl=new ResizeObserver((i=>{const s=i[0].contentRect;s.width&&s.height&&(null!==l&&clearTimeout(l),l=setTimeout((()=>{this.fixDims(),l=null}),a),this.setDimensions(s.width,s.height))})),this.#Hl.observe(this.div)}render(){if(this.div)return this.div;let l,i;this.width&&(l=this.x,i=this.y),super.render(),m._l10nPromise.get("editor_ink2_aria_label").then((l=>this.div?.setAttribute("aria-label",l)));const[s,t,c,d]=this.#ti();if(this.setAt(s,t,0,0),this.setDims(c,d),this.#li(),this.width){const[s,t]=this.parent.viewportBaseDimensions;this.setAt(l*s,i*t,this.width*s,this.height*t),this.#Ql=!0,this.#si(),this.setDims(this.width*s,this.height*t),this.#$l(),this.#Wi(),this.div.classList.add("disabled")}else this.div.classList.add("editing"),this.enableEditMode();return this.#ii(),this.div}#si(){if(!this.#Ql)return;const[l,i]=this.parent.viewportBaseDimensions;this.canvas.width=Math.ceil(this.width*l),this.canvas.height=Math.ceil(this.height*i),this.#mi()}setDimensions(l,i){const s=Math.round(l),t=Math.round(i);if(this.#Pl===s&&this.#Bl===t)return;this.#Pl=s,this.#Bl=t,this.canvas.style.visibility="hidden",this.#kl&&Math.abs(this.#kl-l/i)>.01&&(i=Math.ceil(l/this.#kl),this.setDims(l,i));const[c,d]=this.parent.viewportBaseDimensions;this.width=l/c,this.height=i/d,this.#El&&this.#ni(l,i),this.#si(),this.#$l(),this.canvas.style.visibility="visible"}#ni(l,i){const s=this.#hi(),t=(l-s)/this.#Fl,c=(i-s)/this.#jl;this.scaleFactor=Math.min(t,c)}#mi(){const l=this.#hi()/2;this.ctx.setTransform(this.scaleFactor,0,0,this.scaleFactor,this.translationX*this.scaleFactor+l,this.translationY*this.scaleFactor+l)}static#ai(l){const i=new Path2D;for(let s=0,t=l.length;s<t;s++){const[t,c,d,Z]=l[s];0===s&&i.moveTo(...t),i.bezierCurveTo(c[0],c[1],d[0],d[1],Z[0],Z[1])}return i}#Gi(l,i,s,t){const c=4,d=[],Z=this.thickness/2;let b,a;for(const m of this.paths){b=[],a=[];for(let d=0,e=m.length;d<e;d++){const[e,W,n,h]=m[d],G=l*(e[0]+i)+Z,u=t-l*(e[1]+s)-Z,N=l*(W[0]+i)+Z,M=t-l*(W[1]+s)-Z,I=l*(n[0]+i)+Z,Y=t-l*(n[1]+s)-Z,X=l*(h[0]+i)+Z,L=t-l*(h[1]+s)-Z;0===d&&(b.push(G,u),a.push(G,u)),b.push(N,M,I,Y,X,L),this.#ui(G,u,N,M,I,Y,X,L,c,a)}d.push({bezier:b,points:a})}return d}#ui(l,i,s,t,c,d,Z,b,a,m){if(this.#Ni(l,i,s,t,c,d,Z,b))m.push(Z,b);else{for(let e=1;e<a-1;e++){const W=e/a,n=1-W;let h=W*l+n*s,G=W*i+n*t,u=W*s+n*c,N=W*t+n*d;const M=W*c+n*Z,I=W*d+n*b;h=W*h+n*u,G=W*G+n*N,u=W*u+n*M,N=W*N+n*I,h=W*h+n*u,G=W*G+n*N,m.push(h,G)}m.push(Z,b)}}#Ni(l,i,s,t,c,d,Z,b){const a=10,m=(3*s-2*l-Z)**2,e=(3*t-2*i-b)**2,W=(3*c-l-2*Z)**2,n=(3*d-i-2*b)**2;return Math.max(m,W)+Math.max(e,n)<=a}#Mi(){let l=1/0,i=-1/0,s=1/0,c=-1/0;for(const d of this.paths)for(const[Z,b,a,m]of d){const d=t.Util.bezierBoundingBox(...Z,...b,...a,...m);l=Math.min(l,d[0]),s=Math.min(s,d[1]),i=Math.max(i,d[2]),c=Math.max(c,d[3])}return[l,s,i,c]}#hi(){return this.#El?Math.ceil(this.thickness*this.parent.scaleFactor):0}#ql(l=!1){if(this.isEmpty())return;if(!this.#El)return void this.#$l();const i=this.#Mi(),s=this.#hi();this.#Fl=Math.max(b,i[2]-i[0]),this.#jl=Math.max(b,i[3]-i[1]);const t=Math.ceil(s+this.#Fl*this.scaleFactor),c=Math.ceil(s+this.#jl*this.scaleFactor),[d,Z]=this.parent.viewportBaseDimensions;this.width=t/d,this.height=c/Z,this.#kl=t/c,this.#Wi();const a=this.translationX,m=this.translationY;this.translationX=-i[0],this.translationY=-i[1],this.#si(),this.#$l(),this.#Pl=t,this.#Bl=c,this.setDims(t,c);const e=l?s/this.scaleFactor/2:0;this.translate(a-this.translationX-e,m-this.translationY-e)}#Wi(){const{style:l}=this.div;this.#kl>=1?(l.minHeight=`${b}px`,l.minWidth=`${Math.round(this.#kl*b)}px`):(l.minWidth=`${b}px`,l.minHeight=`${Math.round(b/this.#kl)}px`)}static deserialize(l,i){const s=super.deserialize(l,i);s.thickness=l.thickness,s.color=t.Util.makeHexColor(...l.color),s.opacity=l.opacity;const[c,d]=i.pageDimensions,Z=s.width*c,a=s.height*d,m=i.scaleFactor,e=l.thickness/2;s.#kl=Z/a,s.#El=!0,s.#Pl=Math.round(Z),s.#Bl=Math.round(a);for(const{bezier:t}of l.paths){const l=[];s.paths.push(l);let i=m*(t[0]-e),c=m*(a-t[1]-e);for(let s=2,Z=t.length;s<Z;s+=6){const d=m*(t[s]-e),Z=m*(a-t[s+1]-e),b=m*(t[s+2]-e),W=m*(a-t[s+3]-e),n=m*(t[s+4]-e),h=m*(a-t[s+5]-e);l.push([[i,c],[d,Z],[b,W],[n,h]]),i=n,c=h}const d=this.#ai(l);s.bezierPath2D.push(d)}const W=s.#Mi();return s.#Fl=Math.max(b,W[2]-W[0]),s.#jl=Math.max(b,W[3]-W[1]),s.#ni(Z,a),s}serialize(){if(this.isEmpty())return null;const l=this.getRect(0,0),i=this.rotation%180===0?l[3]-l[1]:l[2]-l[0],s=c.AnnotationEditor._colorManager.convert(this.ctx.strokeStyle);return{annotationType:t.AnnotationEditorType.INK,color:s,thickness:this.thickness,opacity:this.opacity,paths:this.#Gi(this.scaleFactor/this.parent.scaleFactor,this.translationX,this.translationY,i),pageIndex:this.parent.pageIndex,rect:l,rotation:this.rotation}}}i.InkEditor=m},(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.fitCurve=void 0;const t=s(25);i.fitCurve=t},l=>{function i(l,i,t){if(!Array.isArray(l))throw new TypeError("First argument should be an array");if(l.forEach((i=>{if(!Array.isArray(i)||i.some((l=>"number"!==typeof l))||i.length!==l[0].length)throw Error("Each point should be an array of numbers. Each point should have the same amount of numbers.")})),l=l.filter(((i,s)=>0===s||!i.every(((i,t)=>i===l[s-1][t])))),l.length<2)return[];const c=l.length,d=W(l[1],l[0]),Z=W(l[c-2],l[c-1]);return s(l,d,Z,i,t)}function s(l,i,c,Z,a){const m=20;var e,W,h,G,u,N,M,I,Y,X,L,y,o;if(2===l.length)return y=n.vectorLen(n.subtract(l[0],l[1]))/3,e=[l[0],n.addArrays(l[0],n.mulItems(i,y)),n.addArrays(l[1],n.mulItems(c,y)),l[1]],[e];if(W=b(l),[e,G,N]=t(l,W,W,i,c,a),0===G||G<Z)return[e];if(G<Z*Z)for(h=W,u=G,M=N,o=0;o<m;o++){if(h=d(e,l,h),[e,G,N]=t(l,W,h,i,c,a),G<Z)return[e];if(N===M){let l=G/u;if(l>.9999&&l<1.0001)break}u=G,M=N}return L=[],I=n.subtract(l[N-1],l[N+1]),I.every((l=>0===l))&&(I=n.subtract(l[N-1],l[N]),[I[0],I[1]]=[-I[1],I[0]]),Y=n.normalize(I),X=n.mulItems(Y,-1),L=L.concat(s(l.slice(0,N+1),i,Y,Z,a)),L=L.concat(s(l.slice(N),X,c,Z,a)),L}function t(l,i,s,t,d,Z){var b,m,e;return b=c(l,s,t,d,Z),[m,e]=a(l,b,i),Z&&Z({bez:b,points:l,params:i,maxErr:m,maxPoint:e}),[b,m,e]}function c(l,i,s,t){var c,d,Z,b,a,m,e,W,G,u,N,M,I,Y,X,L,y,o=l[0],V=l[l.length-1];for(c=[o,null,null,V],d=n.zeros_Xx2x2(i.length),I=0,Y=i.length;I<Y;I++)L=i[I],y=1-L,Z=d[I],Z[0]=n.mulItems(s,3*L*(y*y)),Z[1]=n.mulItems(t,3*y*(L*L));for(b=[[0,0],[0,0]],a=[0,0],I=0,Y=l.length;I<Y;I++)L=i[I],Z=d[I],b[0][0]+=n.dot(Z[0],Z[0]),b[0][1]+=n.dot(Z[0],Z[1]),b[1][0]+=n.dot(Z[0],Z[1]),b[1][1]+=n.dot(Z[1],Z[1]),X=n.subtract(l[I],h.q([o,o,V,V],L)),a[0]+=n.dot(Z[0],X),a[1]+=n.dot(Z[1],X);return m=b[0][0]*b[1][1]-b[1][0]*b[0][1],e=b[0][0]*a[1]-b[1][0]*a[0],W=a[0]*b[1][1]-a[1]*b[0][1],G=0===m?0:W/m,u=0===m?0:e/m,M=n.vectorLen(n.subtract(o,V)),N=1e-6*M,G<N||u<N?(c[1]=n.addArrays(o,n.mulItems(s,M/3)),c[2]=n.addArrays(V,n.mulItems(t,M/3))):(c[1]=n.addArrays(o,n.mulItems(s,G)),c[2]=n.addArrays(V,n.mulItems(t,u))),c}function d(l,i,s){return s.map(((s,t)=>Z(l,i[t],s)))}function Z(l,i,s){var t=n.subtract(h.q(l,s),i),c=h.qprime(l,s),d=n.mulMatrix(t,c),Z=n.sum(n.squareItems(c))+2*n.mulMatrix(t,h.qprimeprime(l,s));return 0===Z?s:s-d/Z}function b(l){var i,s,t,c=[];return l.forEach(((l,d)=>{i=d?s+n.vectorLen(n.subtract(l,t)):0,c.push(i),s=i,t=l})),c=c.map((l=>l/s)),c}function a(l,i,s){var t,c,d,Z,b,a,W,G;c=0,d=Math.floor(l.length/2);const u=m(i,10);for(b=0,a=l.length;b<a;b++)W=l[b],G=e(i,s[b],u,10),Z=n.subtract(h.q(i,G),W),t=Z[0]*Z[0]+Z[1]*Z[1],t>c&&(c=t,d=b);return[c,d]}var m=function(l,i){for(var s,t=[0],c=l[0],d=0,Z=1;Z<=i;Z++)s=h.q(l,Z/i),d+=n.vectorLen(n.subtract(s,c)),t.push(d),c=s;return t=t.map((l=>l/d)),t};function e(l,i,s,t){if(i<0)return 0;if(i>1)return 1;for(var c,d,Z,b,a,m=1;m<=t;m++)if(i<=s[m]){b=(m-1)/t,Z=m/t,d=s[m-1],c=s[m],a=(i-d)/(c-d)*(Z-b)+b;break}return a}function W(l,i){return n.normalize(n.subtract(l,i))}class n{static zeros_Xx2x2(l){var i=[];while(l--)i.push([0,0]);return i}static mulItems(l,i){return l.map((l=>l*i))}static mulMatrix(l,i){return l.reduce(((l,s,t)=>l+s*i[t]),0)}static subtract(l,i){return l.map(((l,s)=>l-i[s]))}static addArrays(l,i){return l.map(((l,s)=>l+i[s]))}static addItems(l,i){return l.map((l=>l+i))}static sum(l){return l.reduce(((l,i)=>l+i))}static dot(l,i){return n.mulMatrix(l,i)}static vectorLen(l){return Math.hypot(...l)}static divItems(l,i){return l.map((l=>l/i))}static squareItems(l){return l.map((l=>l*l))}static normalize(l){return this.divItems(l,this.vectorLen(l))}}class h{static q(l,i){var s=1-i,t=n.mulItems(l[0],s*s*s),c=n.mulItems(l[1],3*s*s*i),d=n.mulItems(l[2],3*s*i*i),Z=n.mulItems(l[3],i*i*i);return n.addArrays(n.addArrays(t,c),n.addArrays(d,Z))}static qprime(l,i){var s=1-i,t=n.mulItems(n.subtract(l[1],l[0]),3*s*s),c=n.mulItems(n.subtract(l[2],l[1]),6*s*i),d=n.mulItems(n.subtract(l[3],l[2]),3*i*i);return n.addArrays(n.addArrays(t,c),d)}static qprimeprime(l,i){return n.addArrays(n.mulItems(n.addArrays(n.subtract(l[2],n.mulItems(l[1],2)),l[0]),6*(1-i)),n.mulItems(n.addArrays(n.subtract(l[3],n.mulItems(l[2],2)),l[1]),6*i))}}l.exports=i,l.exports.fitCubic=s,l.exports.createTangent=W},(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.AnnotationLayer=void 0;var t=s(1),c=s(6),d=s(3),Z=s(27),b=s(28);const a=1e3,m=9,e=new WeakSet;function W(l){return{width:l[2]-l[0],height:l[3]-l[1]}}class n{static create(l){const i=l.data.annotationType;switch(i){case t.AnnotationType.LINK:return new G(l);case t.AnnotationType.TEXT:return new u(l);case t.AnnotationType.WIDGET:const i=l.data.fieldType;switch(i){case"Tx":return new M(l);case"Btn":return l.data.radioButton?new Y(l):l.data.checkBox?new I(l):new X(l);case"Ch":return new L(l)}return new N(l);case t.AnnotationType.POPUP:return new y(l);case t.AnnotationType.FREETEXT:return new V(l);case t.AnnotationType.LINE:return new p(l);case t.AnnotationType.SQUARE:return new T(l);case t.AnnotationType.CIRCLE:return new w(l);case t.AnnotationType.POLYLINE:return new z(l);case t.AnnotationType.CARET:return new r(l);case t.AnnotationType.INK:return new C(l);case t.AnnotationType.POLYGON:return new R(l);case t.AnnotationType.HIGHLIGHT:return new S(l);case t.AnnotationType.UNDERLINE:return new x(l);case t.AnnotationType.SQUIGGLY:return new D(l);case t.AnnotationType.STRIKEOUT:return new J(l);case t.AnnotationType.STAMP:return new k(l);case t.AnnotationType.FILEATTACHMENT:return new j(l);default:return new h(l)}}}class h{constructor(l,{isRenderable:i=!1,ignoreBorder:s=!1,createQuadrilaterals:t=!1}={}){this.isRenderable=i,this.data=l.data,this.layer=l.layer,this.page=l.page,this.viewport=l.viewport,this.linkService=l.linkService,this.downloadManager=l.downloadManager,this.imageResourcesPath=l.imageResourcesPath,this.renderForms=l.renderForms,this.svgFactory=l.svgFactory,this.annotationStorage=l.annotationStorage,this.enableScripting=l.enableScripting,this.hasJSActions=l.hasJSActions,this._fieldObjects=l.fieldObjects,this._mouseState=l.mouseState,i&&(this.container=this._createContainer(s)),t&&(this.quadrilaterals=this._createQuadrilaterals(s))}_createContainer(l=!1){const i=this.data,s=this.page,c=this.viewport,d=document.createElement("section"),{width:Z,height:b}=W(i.rect),[a,m,e,n]=c.viewBox,h=e-a,G=n-m;d.setAttribute("data-annotation-id",i.id);const u=t.Util.normalizeRect([i.rect[0],s.view[3]-i.rect[1]+s.view[1],i.rect[2],s.view[3]-i.rect[3]+s.view[1]]);if(!l&&i.borderStyle.width>0){d.style.borderWidth=`${i.borderStyle.width}px`;const l=i.borderStyle.horizontalCornerRadius,s=i.borderStyle.verticalCornerRadius;if(l>0||s>0){const i=`calc(${l}px * var(--scale-factor)) / calc(${s}px * var(--scale-factor))`;d.style.borderRadius=i}else if(this instanceof Y){const l=`calc(${Z}px * var(--scale-factor)) / calc(${b}px * var(--scale-factor))`;d.style.borderRadius=l}switch(i.borderStyle.style){case t.AnnotationBorderStyleType.SOLID:d.style.borderStyle="solid";break;case t.AnnotationBorderStyleType.DASHED:d.style.borderStyle="dashed";break;case t.AnnotationBorderStyleType.BEVELED:(0,t.warn)("Unimplemented border style: beveled");break;case t.AnnotationBorderStyleType.INSET:(0,t.warn)("Unimplemented border style: inset");break;case t.AnnotationBorderStyleType.UNDERLINE:d.style.borderBottomStyle="solid";break;default:break}const c=i.borderColor||null;c?d.style.borderColor=t.Util.makeHexColor(0|c[0],0|c[1],0|c[2]):d.style.borderWidth=0}d.style.left=100*(u[0]-a)/h+"%",d.style.top=100*(u[1]-m)/G+"%";const{rotation:N}=i;return i.hasOwnCanvas||0===N?(d.style.width=100*Z/h+"%",d.style.height=100*b/G+"%"):this.setRotation(N,d),d}setRotation(l,i=this.container){const[s,t,c,d]=this.viewport.viewBox,Z=c-s,b=d-t,{width:a,height:m}=W(this.data.rect);let e,n;l%180===0?(e=100*a/Z,n=100*m/b):(e=100*m/Z,n=100*a/b),i.style.width=`${e}%`,i.style.height=`${n}%`,i.setAttribute("data-main-rotation",(360-l)%360)}get _commonActions(){const l=(l,i,s)=>{const t=s.detail[l];s.target.style[i]=Z.ColorConverters[`${t[0]}_HTML`](t.slice(1))};return(0,t.shadow)(this,"_commonActions",{display:l=>{const i=l.detail.display%2===1;this.container.style.visibility=i?"hidden":"visible",this.annotationStorage.setValue(this.data.id,{hidden:i,print:0===l.detail.display||3===l.detail.display})},print:l=>{this.annotationStorage.setValue(this.data.id,{print:l.detail.print})},hidden:l=>{this.container.style.visibility=l.detail.hidden?"hidden":"visible",this.annotationStorage.setValue(this.data.id,{hidden:l.detail.hidden})},focus:l=>{setTimeout((()=>l.target.focus({preventScroll:!1})),0)},userName:l=>{l.target.title=l.detail.userName},readonly:l=>{l.detail.readonly?l.target.setAttribute("readonly",""):l.target.removeAttribute("readonly")},required:l=>{this._setRequired(l.target,l.detail.required)},bgColor:i=>{l("bgColor","backgroundColor",i)},fillColor:i=>{l("fillColor","backgroundColor",i)},fgColor:i=>{l("fgColor","color",i)},textColor:i=>{l("textColor","color",i)},borderColor:i=>{l("borderColor","borderColor",i)},strokeColor:i=>{l("strokeColor","borderColor",i)},rotation:l=>{const i=l.detail.rotation;this.setRotation(i),this.annotationStorage.setValue(this.data.id,{rotation:i})}})}_dispatchEventFromSandbox(l,i){const s=this._commonActions;for(const t of Object.keys(i.detail)){const c=l[t]||s[t];c?.(i)}}_setDefaultPropertiesFromJS(l){if(!this.enableScripting)return;const i=this.annotationStorage.getRawValue(this.data.id);if(!i)return;const s=this._commonActions;for(const[t,c]of Object.entries(i)){const d=s[t];if(d){const s={detail:{[t]:c},target:l};d(s),delete i[t]}}}_createQuadrilaterals(l=!1){if(!this.data.quadPoints)return null;const i=[],s=this.data.rect;for(const t of this.data.quadPoints)this.data.rect=[t[2].x,t[2].y,t[1].x,t[1].y],i.push(this._createContainer(l));return this.data.rect=s,i}_createPopup(l,i){let s=this.container;this.quadrilaterals&&(l=l||this.quadrilaterals,s=this.quadrilaterals[0]),l||(l=document.createElement("div"),l.className="popupTriggerArea",s.append(l));const t=new o({container:s,trigger:l,color:i.color,titleObj:i.titleObj,modificationDate:i.modificationDate,contentsObj:i.contentsObj,richText:i.richText,hideWrapper:!0}),c=t.render();c.style.left="100%",s.append(c)}_renderQuadrilaterals(l){for(const i of this.quadrilaterals)i.className=l;return this.quadrilaterals}render(){(0,t.unreachable)("Abstract method `AnnotationElement.render` called")}_getElementsByName(l,i=null){const s=[];if(this._fieldObjects){const c=this._fieldObjects[l];if(c)for(const{page:l,id:d,exportValues:Z}of c){if(-1===l)continue;if(d===i)continue;const c="string"===typeof Z?Z:null,b=document.querySelector(`[data-element-id="${d}"]`);!b||e.has(b)?s.push({id:d,exportValue:c,domElement:b}):(0,t.warn)(`_getElementsByName - element not allowed: ${d}`)}return s}for(const t of document.getElementsByName(l)){const{exportValue:l}=t,c=t.getAttribute("data-element-id");c!==i&&(e.has(t)&&s.push({id:c,exportValue:l,domElement:t}))}return s}static get platform(){const l="undefined"!==typeof navigator?navigator.platform:"";return(0,t.shadow)(this,"platform",{isWin:l.includes("Win"),isMac:l.includes("Mac")})}}class G extends h{constructor(l,i=null){super(l,{isRenderable:!0,ignoreBorder:!!i?.ignoreBorder,createQuadrilaterals:!0}),this.isTooltipOnly=l.data.isTooltipOnly}render(){const{data:l,linkService:i}=this,s=document.createElement("a");s.setAttribute("data-element-id",l.id);let t=!1;return l.url?(i.addLinkAttributes(s,l.url,l.newWindow),t=!0):l.action?(this._bindNamedAction(s,l.action),t=!0):l.attachment?(this._bindAttachment(s,l.attachment),t=!0):l.setOCGState?(this.#Ii(s,l.setOCGState),t=!0):l.dest?(this._bindLink(s,l.dest),t=!0):(l.actions&&(l.actions.Action||l.actions["Mouse Up"]||l.actions["Mouse Down"])&&this.enableScripting&&this.hasJSActions&&(this._bindJSAction(s,l),t=!0),l.resetForm?(this._bindResetFormAction(s,l.resetForm),t=!0):this.isTooltipOnly&&!t&&(this._bindLink(s,""),t=!0)),this.quadrilaterals?this._renderQuadrilaterals("linkAnnotation").map(((l,i)=>{const t=0===i?s:s.cloneNode();return l.append(t),l})):(this.container.className="linkAnnotation",t&&this.container.append(s),this.container)}_bindLink(l,i){l.href=this.linkService.getDestinationHash(i),l.onclick=()=>(i&&this.linkService.goToDestination(i),!1),(i||""===i)&&(l.className="internalLink")}_bindNamedAction(l,i){l.href=this.linkService.getAnchorUrl(""),l.onclick=()=>(this.linkService.executeNamedAction(i),!1),l.className="internalLink"}_bindAttachment(l,i){l.href=this.linkService.getAnchorUrl(""),l.onclick=()=>(this.downloadManager?.openOrDownloadData(this.container,i.content,i.filename),!1),l.className="internalLink"}#Ii(l,i){l.href=this.linkService.getAnchorUrl(""),l.onclick=()=>(this.linkService.executeSetOCGState(i),!1),l.className="internalLink"}_bindJSAction(l,i){l.href=this.linkService.getAnchorUrl("");const s=new Map([["Action","onclick"],["Mouse Up","onmouseup"],["Mouse Down","onmousedown"]]);for(const t of Object.keys(i.actions)){const c=s.get(t);c&&(l[c]=()=>(this.linkService.eventBus?.dispatch("dispatcheventinsandbox",{source:this,detail:{id:i.id,name:t}}),!1))}l.onclick||(l.onclick=()=>!1),l.className="internalLink"}_bindResetFormAction(l,i){const s=l.onclick;if(s||(l.href=this.linkService.getAnchorUrl("")),l.className="internalLink",!this._fieldObjects)return(0,t.warn)('_bindResetFormAction - "resetForm" action not supported, ensure that the `fieldObjects` parameter is provided.'),void(s||(l.onclick=()=>!1));l.onclick=()=>{s?.();const{fields:l,refs:c,include:d}=i,Z=[];if(0!==l.length||0!==c.length){const i=new Set(c);for(const s of l){const l=this._fieldObjects[s]||[];for(const{id:s}of l)i.add(s)}for(const l of Object.values(this._fieldObjects))for(const s of l)i.has(s.id)===d&&Z.push(s)}else for(const i of Object.values(this._fieldObjects))Z.push(...i);const b=this.annotationStorage,a=[];for(const i of Z){const{id:l}=i;switch(a.push(l),i.type){case"text":{const s=i.defaultValue||"";b.setValue(l,{value:s});break}case"checkbox":case"radiobutton":{const s=i.defaultValue===i.exportValues;b.setValue(l,{value:s});break}case"combobox":case"listbox":{const s=i.defaultValue||"";b.setValue(l,{value:s});break}default:continue}const s=document.querySelector(`[data-element-id="${l}"]`);s&&(e.has(s)?s.dispatchEvent(new Event("resetform")):(0,t.warn)(`_bindResetFormAction - element not allowed: ${l}`))}return this.enableScripting&&this.linkService.eventBus?.dispatch("dispatcheventinsandbox",{source:this,detail:{id:"app",ids:a,name:"ResetForm"}}),!1}}}class u extends h{constructor(l){const i=!!(l.data.hasPopup||l.data.titleObj?.str||l.data.contentsObj?.str||l.data.richText?.str);super(l,{isRenderable:i})}render(){this.container.className="textAnnotation";const l=document.createElement("img");return l.src=this.imageResourcesPath+"annotation-"+this.data.name.toLowerCase()+".svg",l.alt="[{{type}} Annotation]",l.dataset.l10nId="text_annotation_type",l.dataset.l10nArgs=JSON.stringify({type:this.data.name}),this.data.hasPopup||this._createPopup(l,this.data),this.container.append(l),this.container}}class N extends h{render(){return this.data.alternativeText&&(this.container.title=this.data.alternativeText),this.container}_getKeyModifier(l){const{isWin:i,isMac:s}=h.platform;return i&&l.ctrlKey||s&&l.metaKey}_setEventListener(l,i,s,t){i.includes("mouse")?l.addEventListener(i,(l=>{this.linkService.eventBus?.dispatch("dispatcheventinsandbox",{source:this,detail:{id:this.data.id,name:s,value:t(l),shift:l.shiftKey,modifier:this._getKeyModifier(l)}})})):l.addEventListener(i,(l=>{this.linkService.eventBus?.dispatch("dispatcheventinsandbox",{source:this,detail:{id:this.data.id,name:s,value:t(l)}})}))}_setEventListeners(l,i,s){for(const[t,c]of i)("Action"===c||this.data.actions?.[c])&&this._setEventListener(l,t,c,s)}_setBackgroundColor(l){const i=this.data.backgroundColor||null;l.style.backgroundColor=null===i?"transparent":t.Util.makeHexColor(i[0],i[1],i[2])}_setTextStyle(l){const i=["left","center","right"],{fontColor:s}=this.data.defaultAppearanceData,c=this.data.defaultAppearanceData.fontSize||m,d=l.style;let Z;const b=2,a=l=>Math.round(10*l)/10;if(this.data.multiLine){const l=Math.abs(this.data.rect[3]-this.data.rect[1]-b),i=Math.round(l/(t.LINE_FACTOR*c))||1,s=l/i;Z=Math.min(c,a(s/t.LINE_FACTOR))}else{const l=Math.abs(this.data.rect[3]-this.data.rect[1]-b);Z=Math.min(c,a(l/t.LINE_FACTOR))}d.fontSize=`calc(${Z}px * var(--scale-factor))`,d.color=t.Util.makeHexColor(s[0],s[1],s[2]),null!==this.data.textAlignment&&(d.textAlign=i[this.data.textAlignment])}_setRequired(l,i){i?l.setAttribute("required",!0):l.removeAttribute("required"),l.setAttribute("aria-required",i)}}class M extends N{constructor(l){const i=l.renderForms||!l.data.hasAppearance&&!!l.data.fieldValue;super(l,{isRenderable:i})}setPropertyOnSiblings(l,i,s,t){const c=this.annotationStorage;for(const d of this._getElementsByName(l.name,l.id))d.domElement&&(d.domElement[i]=s),c.setValue(d.id,{[t]:s})}render(){const l=this.annotationStorage,i=this.data.id;this.container.className="textWidgetAnnotation";let s=null;if(this.renderForms){const t=l.getValue(i,{value:this.data.fieldValue});let c=t.formattedValue||t.value||"";const d=l.getValue(i,{charLimit:this.data.maxLen}).charLimit;d&&c.length>d&&(c=c.slice(0,d));const Z={userValue:c,formattedValue:null,valueOnFocus:""};this.data.multiLine?(s=document.createElement("textarea"),s.textContent=c,this.data.doNotScroll&&(s.style.overflowY="hidden")):(s=document.createElement("input"),s.type="text",s.setAttribute("value",c),this.data.doNotScroll&&(s.style.overflowX="hidden")),e.add(s),s.setAttribute("data-element-id",i),s.disabled=this.data.readOnly,s.name=this.data.fieldName,s.tabIndex=a,this._setRequired(s,this.data.required),d&&(s.maxLength=d),s.addEventListener("input",(t=>{l.setValue(i,{value:t.target.value}),this.setPropertyOnSiblings(s,"value",t.target.value,"value")})),s.addEventListener("resetform",(l=>{const i=this.data.defaultFieldValue??"";s.value=Z.userValue=i,Z.formattedValue=null}));let b=l=>{const{formattedValue:i}=Z;null!==i&&void 0!==i&&(l.target.value=i),l.target.scrollLeft=0};if(this.enableScripting&&this.hasJSActions){s.addEventListener("focus",(l=>{Z.userValue&&(l.target.value=Z.userValue),Z.valueOnFocus=l.target.value})),s.addEventListener("updatefromsandbox",(s=>{const t={value(s){Z.userValue=s.detail.value??"",l.setValue(i,{value:Z.userValue.toString()}),s.target.value=Z.userValue},formattedValue(s){const{formattedValue:t}=s.detail;Z.formattedValue=t,null!==t&&void 0!==t&&s.target!==document.activeElement&&(s.target.value=t),l.setValue(i,{formattedValue:t})},selRange(l){l.target.setSelectionRange(...l.detail.selRange)},charLimit:s=>{const{charLimit:t}=s.detail,{target:c}=s;if(0===t)return void c.removeAttribute("maxLength");c.setAttribute("maxLength",t);let d=Z.userValue;!d||d.length<=t||(d=d.slice(0,t),c.value=Z.userValue=d,l.setValue(i,{value:d}),this.linkService.eventBus?.dispatch("dispatcheventinsandbox",{source:this,detail:{id:i,name:"Keystroke",value:d,willCommit:!0,commitKey:1,selStart:c.selectionStart,selEnd:c.selectionEnd}}))}};this._dispatchEventFromSandbox(t,s)})),s.addEventListener("keydown",(l=>{let s=-1;if("Escape"===l.key?s=0:"Enter"!==l.key||this.data.multiLine?"Tab"===l.key&&(s=3):s=2,-1===s)return;const{value:t}=l.target;Z.valueOnFocus!==t&&(Z.userValue=t,this.linkService.eventBus?.dispatch("dispatcheventinsandbox",{source:this,detail:{id:i,name:"Keystroke",value:t,willCommit:!0,commitKey:s,selStart:l.target.selectionStart,selEnd:l.target.selectionEnd}}))}));const t=b;b=null,s.addEventListener("blur",(l=>{const{value:s}=l.target;Z.userValue=s,this._mouseState.isDown&&Z.valueOnFocus!==s&&this.linkService.eventBus?.dispatch("dispatcheventinsandbox",{source:this,detail:{id:i,name:"Keystroke",value:s,willCommit:!0,commitKey:1,selStart:l.target.selectionStart,selEnd:l.target.selectionEnd}}),t(l)})),this.data.actions?.Keystroke&&s.addEventListener("beforeinput",(l=>{const{data:s,target:t}=l,{value:c,selectionStart:d,selectionEnd:Z}=t;let b=d,a=Z;switch(l.inputType){case"deleteWordBackward":{const l=c.substring(0,d).match(/\w*[^\w]*$/);l&&(b-=l[0].length);break}case"deleteWordForward":{const l=c.substring(d).match(/^[^\w]*\w*/);l&&(a+=l[0].length);break}case"deleteContentBackward":d===Z&&(b-=1);break;case"deleteContentForward":d===Z&&(a+=1);break}l.preventDefault(),this.linkService.eventBus?.dispatch("dispatcheventinsandbox",{source:this,detail:{id:i,name:"Keystroke",value:c,change:s||"",willCommit:!1,selStart:b,selEnd:a}})})),this._setEventListeners(s,[["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"]],(l=>l.target.value))}if(b&&s.addEventListener("blur",b),this.data.comb){const l=this.data.rect[2]-this.data.rect[0],i=l/d;s.classList.add("comb"),s.style.letterSpacing=`calc(${i}px * var(--scale-factor) - 1ch)`}}else s=document.createElement("div"),s.textContent=this.data.fieldValue,s.style.verticalAlign="middle",s.style.display="table-cell";return this._setTextStyle(s),this._setBackgroundColor(s),this._setDefaultPropertiesFromJS(s),this.container.append(s),this.container}}class I extends N{constructor(l){super(l,{isRenderable:l.renderForms})}render(){const l=this.annotationStorage,i=this.data,s=i.id;let t=l.getValue(s,{value:i.exportValue===i.fieldValue}).value;"string"===typeof t&&(t="Off"!==t,l.setValue(s,{value:t})),this.container.className="buttonWidgetAnnotation checkBox";const c=document.createElement("input");return e.add(c),c.setAttribute("data-element-id",s),c.disabled=i.readOnly,this._setRequired(c,this.data.required),c.type="checkbox",c.name=i.fieldName,t&&c.setAttribute("checked",!0),c.setAttribute("exportValue",i.exportValue),c.tabIndex=a,c.addEventListener("change",(t=>{const{name:c,checked:d}=t.target;for(const Z of this._getElementsByName(c,s)){const s=d&&Z.exportValue===i.exportValue;Z.domElement&&(Z.domElement.checked=s),l.setValue(Z.id,{value:s})}l.setValue(s,{value:d})})),c.addEventListener("resetform",(l=>{const s=i.defaultFieldValue||"Off";l.target.checked=s===i.exportValue})),this.enableScripting&&this.hasJSActions&&(c.addEventListener("updatefromsandbox",(i=>{const t={value(i){i.target.checked="Off"!==i.detail.value,l.setValue(s,{value:i.target.checked})}};this._dispatchEventFromSandbox(t,i)})),this._setEventListeners(c,[["change","Validate"],["change","Action"],["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"]],(l=>l.target.checked))),this._setBackgroundColor(c),this._setDefaultPropertiesFromJS(c),this.container.append(c),this.container}}class Y extends N{constructor(l){super(l,{isRenderable:l.renderForms})}render(){this.container.className="buttonWidgetAnnotation radioButton";const l=this.annotationStorage,i=this.data,s=i.id;let t=l.getValue(s,{value:i.fieldValue===i.buttonValue}).value;"string"===typeof t&&(t=t!==i.buttonValue,l.setValue(s,{value:t}));const c=document.createElement("input");if(e.add(c),c.setAttribute("data-element-id",s),c.disabled=i.readOnly,this._setRequired(c,this.data.required),c.type="radio",c.name=i.fieldName,t&&c.setAttribute("checked",!0),c.tabIndex=a,c.addEventListener("change",(i=>{const{name:t,checked:c}=i.target;for(const d of this._getElementsByName(t,s))l.setValue(d.id,{value:!1});l.setValue(s,{value:c})})),c.addEventListener("resetform",(l=>{const s=i.defaultFieldValue;l.target.checked=null!==s&&void 0!==s&&s===i.buttonValue})),this.enableScripting&&this.hasJSActions){const t=i.buttonValue;c.addEventListener("updatefromsandbox",(i=>{const c={value:i=>{const c=t===i.detail.value;for(const t of this._getElementsByName(i.target.name)){const i=c&&t.id===s;t.domElement&&(t.domElement.checked=i),l.setValue(t.id,{value:i})}}};this._dispatchEventFromSandbox(c,i)})),this._setEventListeners(c,[["change","Validate"],["change","Action"],["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"]],(l=>l.target.checked))}return this._setBackgroundColor(c),this._setDefaultPropertiesFromJS(c),this.container.append(c),this.container}}class X extends G{constructor(l){super(l,{ignoreBorder:l.data.hasAppearance})}render(){const l=super.render();l.className="buttonWidgetAnnotation pushButton",this.data.alternativeText&&(l.title=this.data.alternativeText);const i=l.lastChild;return this.enableScripting&&this.hasJSActions&&i&&(this._setDefaultPropertiesFromJS(i),i.addEventListener("updatefromsandbox",(l=>{this._dispatchEventFromSandbox({},l)}))),l}}class L extends N{constructor(l){super(l,{isRenderable:l.renderForms})}render(){this.container.className="choiceWidgetAnnotation";const l=this.annotationStorage,i=this.data.id,s=l.getValue(i,{value:this.data.fieldValue}),t=document.createElement("select");e.add(t),t.setAttribute("data-element-id",i),t.disabled=this.data.readOnly,this._setRequired(t,this.data.required),t.name=this.data.fieldName,t.tabIndex=a;let c=this.data.combo&&this.data.options.length>0;this.data.combo||(t.size=this.data.options.length,this.data.multiSelect&&(t.multiple=!0)),t.addEventListener("resetform",(l=>{const i=this.data.defaultFieldValue;for(const s of t.options)s.selected=s.value===i}));for(const a of this.data.options){const l=document.createElement("option");l.textContent=a.displayValue,l.value=a.exportValue,s.value.includes(a.exportValue)&&(l.setAttribute("selected",!0),c=!1),t.append(l)}let d=null;if(c){const l=document.createElement("option");l.value=" ",l.setAttribute("hidden",!0),l.setAttribute("selected",!0),t.prepend(l),d=()=>{l.remove(),t.removeEventListener("input",d),d=null},t.addEventListener("input",d)}const Z=(l,i)=>{const s=i?"value":"textContent",t=l.target.options;return l.target.multiple?Array.prototype.filter.call(t,(l=>l.selected)).map((l=>l[s])):-1===t.selectedIndex?null:t[t.selectedIndex][s]},b=l=>{const i=l.target.options;return Array.prototype.map.call(i,(l=>({displayValue:l.textContent,exportValue:l.value})))};return this.enableScripting&&this.hasJSActions?(t.addEventListener("updatefromsandbox",(s=>{const c={value(s){d?.();const c=s.detail.value,b=new Set(Array.isArray(c)?c:[c]);for(const l of t.options)l.selected=b.has(l.value);l.setValue(i,{value:Z(s,!0)})},multipleSelection(l){t.multiple=!0},remove(s){const c=t.options,d=s.detail.remove;if(c[d].selected=!1,t.remove(d),c.length>0){const l=Array.prototype.findIndex.call(c,(l=>l.selected));-1===l&&(c[0].selected=!0)}l.setValue(i,{value:Z(s,!0),items:b(s)})},clear(s){while(0!==t.length)t.remove(0);l.setValue(i,{value:null,items:[]})},insert(s){const{index:c,displayValue:d,exportValue:a}=s.detail.insert,m=t.children[c],e=document.createElement("option");e.textContent=d,e.value=a,m?m.before(e):t.append(e),l.setValue(i,{value:Z(s,!0),items:b(s)})},items(s){const{items:c}=s.detail;while(0!==t.length)t.remove(0);for(const l of c){const{displayValue:i,exportValue:s}=l,c=document.createElement("option");c.textContent=i,c.value=s,t.append(c)}t.options.length>0&&(t.options[0].selected=!0),l.setValue(i,{value:Z(s,!0),items:b(s)})},indices(s){const t=new Set(s.detail.indices);for(const l of s.target.options)l.selected=t.has(l.index);l.setValue(i,{value:Z(s,!0)})},editable(l){l.target.disabled=!l.detail.editable}};this._dispatchEventFromSandbox(c,s)})),t.addEventListener("input",(s=>{const t=Z(s,!0),c=Z(s,!1);l.setValue(i,{value:t}),this.linkService.eventBus?.dispatch("dispatcheventinsandbox",{source:this,detail:{id:i,name:"Keystroke",value:c,changeEx:t,willCommit:!0,commitKey:1,keyDown:!1}})})),this._setEventListeners(t,[["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"],["input","Action"]],(l=>l.target.checked))):t.addEventListener("input",(function(s){l.setValue(i,{value:Z(s,!0)})})),this.data.combo&&this._setTextStyle(t),this._setBackgroundColor(t),this._setDefaultPropertiesFromJS(t),this.container.append(t),this.container}}class y extends h{static IGNORE_TYPES=new Set(["Line","Square","Circle","PolyLine","Polygon","Ink"]);constructor(l){const{data:i}=l,s=!y.IGNORE_TYPES.has(i.parentType)&&!!(i.titleObj?.str||i.contentsObj?.str||i.richText?.str);super(l,{isRenderable:s})}render(){this.container.className="popupAnnotation";const l=this.layer.querySelectorAll(`[data-annotation-id="${this.data.parentId}"]`);if(0===l.length)return this.container;const i=new o({container:this.container,trigger:Array.from(l),color:this.data.color,titleObj:this.data.titleObj,modificationDate:this.data.modificationDate,contentsObj:this.data.contentsObj,richText:this.data.richText}),s=this.page,c=t.Util.normalizeRect([this.data.parentRect[0],s.view[3]-this.data.parentRect[1]+s.view[1],this.data.parentRect[2],s.view[3]-this.data.parentRect[3]+s.view[1]]),d=c[0]+this.data.parentRect[2]-this.data.parentRect[0],Z=c[1],[b,a,m,e]=this.viewport.viewBox,W=m-b,n=e-a;return this.container.style.left=100*(d-b)/W+"%",this.container.style.top=100*(Z-a)/n+"%",this.container.append(i.render()),this.container}}class o{constructor(l){this.container=l.container,this.trigger=l.trigger,this.color=l.color,this.titleObj=l.titleObj,this.modificationDate=l.modificationDate,this.contentsObj=l.contentsObj,this.richText=l.richText,this.hideWrapper=l.hideWrapper||!1,this.pinned=!1}render(){const l=.7,i=document.createElement("div");i.className="popupWrapper",this.hideElement=this.hideWrapper?i:this.container,this.hideElement.hidden=!0;const s=document.createElement("div");s.className="popup";const d=this.color;if(d){const i=l*(255-d[0])+d[0],c=l*(255-d[1])+d[1],Z=l*(255-d[2])+d[2];s.style.backgroundColor=t.Util.makeHexColor(0|i,0|c,0|Z)}const Z=document.createElement("h1");Z.dir=this.titleObj.dir,Z.textContent=this.titleObj.str,s.append(Z);const a=c.PDFDateString.toDateObject(this.modificationDate);if(a){const l=document.createElement("span");l.className="popupDate",l.textContent="{{date}}, {{time}}",l.dataset.l10nId="annotation_date_string",l.dataset.l10nArgs=JSON.stringify({date:a.toLocaleDateString(),time:a.toLocaleTimeString()}),s.append(l)}if(!this.richText?.str||this.contentsObj?.str&&this.contentsObj.str!==this.richText.str){const l=this._formatContents(this.contentsObj);s.append(l)}else b.XfaLayer.render({xfaHtml:this.richText.html,intent:"richText",div:s}),s.lastChild.className="richText popupContent";Array.isArray(this.trigger)||(this.trigger=[this.trigger]);for(const t of this.trigger)t.addEventListener("click",this._toggle.bind(this)),t.addEventListener("mouseover",this._show.bind(this,!1)),t.addEventListener("mouseout",this._hide.bind(this,!1));return s.addEventListener("click",this._hide.bind(this,!0)),i.append(s),i}_formatContents({str:l,dir:i}){const s=document.createElement("p");s.className="popupContent",s.dir=i;const t=l.split(/(?:\r\n?|\n)/);for(let c=0,d=t.length;c<d;++c){const l=t[c];s.append(document.createTextNode(l)),c<d-1&&s.append(document.createElement("br"))}return s}_toggle(){this.pinned?this._hide(!0):this._show(!0)}_show(l=!1){l&&(this.pinned=!0),this.hideElement.hidden&&(this.hideElement.hidden=!1,this.container.style.zIndex=parseInt(this.container.style.zIndex)+1e3)}_hide(l=!0){l&&(this.pinned=!1),this.hideElement.hidden||this.pinned||(this.hideElement.hidden=!0,this.container.style.zIndex=parseInt(this.container.style.zIndex)-1e3)}}class V extends h{constructor(l){const i=!!(l.data.hasPopup||l.data.titleObj?.str||l.data.contentsObj?.str||l.data.richText?.str);super(l,{isRenderable:i,ignoreBorder:!0}),this.textContent=l.data.textContent}render(){if(this.container.className="freeTextAnnotation",this.textContent){const l=document.createElement("div");l.className="annotationTextContent",l.setAttribute("role","comment");for(const i of this.textContent){const s=document.createElement("span");s.textContent=i,l.append(s)}this.container.append(l)}return this.data.hasPopup||this._createPopup(null,this.data),this.container}}class p extends h{constructor(l){const i=!!(l.data.hasPopup||l.data.titleObj?.str||l.data.contentsObj?.str||l.data.richText?.str);super(l,{isRenderable:i,ignoreBorder:!0})}render(){this.container.className="lineAnnotation";const l=this.data,{width:i,height:s}=W(l.rect),t=this.svgFactory.create(i,s,!0),c=this.svgFactory.createElement("svg:line");return c.setAttribute("x1",l.rect[2]-l.lineCoordinates[0]),c.setAttribute("y1",l.rect[3]-l.lineCoordinates[1]),c.setAttribute("x2",l.rect[2]-l.lineCoordinates[2]),c.setAttribute("y2",l.rect[3]-l.lineCoordinates[3]),c.setAttribute("stroke-width",l.borderStyle.width||1),c.setAttribute("stroke","transparent"),c.setAttribute("fill","transparent"),t.append(c),this.container.append(t),this._createPopup(c,l),this.container}}class T extends h{constructor(l){const i=!!(l.data.hasPopup||l.data.titleObj?.str||l.data.contentsObj?.str||l.data.richText?.str);super(l,{isRenderable:i,ignoreBorder:!0})}render(){this.container.className="squareAnnotation";const l=this.data,{width:i,height:s}=W(l.rect),t=this.svgFactory.create(i,s,!0),c=l.borderStyle.width,d=this.svgFactory.createElement("svg:rect");return d.setAttribute("x",c/2),d.setAttribute("y",c/2),d.setAttribute("width",i-c),d.setAttribute("height",s-c),d.setAttribute("stroke-width",c||1),d.setAttribute("stroke","transparent"),d.setAttribute("fill","transparent"),t.append(d),this.container.append(t),this._createPopup(d,l),this.container}}class w extends h{constructor(l){const i=!!(l.data.hasPopup||l.data.titleObj?.str||l.data.contentsObj?.str||l.data.richText?.str);super(l,{isRenderable:i,ignoreBorder:!0})}render(){this.container.className="circleAnnotation";const l=this.data,{width:i,height:s}=W(l.rect),t=this.svgFactory.create(i,s,!0),c=l.borderStyle.width,d=this.svgFactory.createElement("svg:ellipse");return d.setAttribute("cx",i/2),d.setAttribute("cy",s/2),d.setAttribute("rx",i/2-c/2),d.setAttribute("ry",s/2-c/2),d.setAttribute("stroke-width",c||1),d.setAttribute("stroke","transparent"),d.setAttribute("fill","transparent"),t.append(d),this.container.append(t),this._createPopup(d,l),this.container}}class z extends h{constructor(l){const i=!!(l.data.hasPopup||l.data.titleObj?.str||l.data.contentsObj?.str||l.data.richText?.str);super(l,{isRenderable:i,ignoreBorder:!0}),this.containerClassName="polylineAnnotation",this.svgElementName="svg:polyline"}render(){this.container.className=this.containerClassName;const l=this.data,{width:i,height:s}=W(l.rect),t=this.svgFactory.create(i,s,!0);let c=[];for(const Z of l.vertices){const i=Z.x-l.rect[0],s=l.rect[3]-Z.y;c.push(i+","+s)}c=c.join(" ");const d=this.svgFactory.createElement(this.svgElementName);return d.setAttribute("points",c),d.setAttribute("stroke-width",l.borderStyle.width||1),d.setAttribute("stroke","transparent"),d.setAttribute("fill","transparent"),t.append(d),this.container.append(t),this._createPopup(d,l),this.container}}class R extends z{constructor(l){super(l),this.containerClassName="polygonAnnotation",this.svgElementName="svg:polygon"}}class r extends h{constructor(l){const i=!!(l.data.hasPopup||l.data.titleObj?.str||l.data.contentsObj?.str||l.data.richText?.str);super(l,{isRenderable:i,ignoreBorder:!0})}render(){return this.container.className="caretAnnotation",this.data.hasPopup||this._createPopup(null,this.data),this.container}}class C extends h{constructor(l){const i=!!(l.data.hasPopup||l.data.titleObj?.str||l.data.contentsObj?.str||l.data.richText?.str);super(l,{isRenderable:i,ignoreBorder:!0}),this.containerClassName="inkAnnotation",this.svgElementName="svg:polyline"}render(){this.container.className=this.containerClassName;const l=this.data,{width:i,height:s}=W(l.rect),t=this.svgFactory.create(i,s,!0);for(const c of l.inkLists){let i=[];for(const t of c){const s=t.x-l.rect[0],c=l.rect[3]-t.y;i.push(`${s},${c}`)}i=i.join(" ");const s=this.svgFactory.createElement(this.svgElementName);s.setAttribute("points",i),s.setAttribute("stroke-width",l.borderStyle.width||1),s.setAttribute("stroke","transparent"),s.setAttribute("fill","transparent"),this._createPopup(s,l),t.append(s)}return this.container.append(t),this.container}}class S extends h{constructor(l){const i=!!(l.data.hasPopup||l.data.titleObj?.str||l.data.contentsObj?.str||l.data.richText?.str);super(l,{isRenderable:i,ignoreBorder:!0,createQuadrilaterals:!0})}render(){return this.data.hasPopup||this._createPopup(null,this.data),this.quadrilaterals?this._renderQuadrilaterals("highlightAnnotation"):(this.container.className="highlightAnnotation",this.container)}}class x extends h{constructor(l){const i=!!(l.data.hasPopup||l.data.titleObj?.str||l.data.contentsObj?.str||l.data.richText?.str);super(l,{isRenderable:i,ignoreBorder:!0,createQuadrilaterals:!0})}render(){return this.data.hasPopup||this._createPopup(null,this.data),this.quadrilaterals?this._renderQuadrilaterals("underlineAnnotation"):(this.container.className="underlineAnnotation",this.container)}}class D extends h{constructor(l){const i=!!(l.data.hasPopup||l.data.titleObj?.str||l.data.contentsObj?.str||l.data.richText?.str);super(l,{isRenderable:i,ignoreBorder:!0,createQuadrilaterals:!0})}render(){return this.data.hasPopup||this._createPopup(null,this.data),this.quadrilaterals?this._renderQuadrilaterals("squigglyAnnotation"):(this.container.className="squigglyAnnotation",this.container)}}class J extends h{constructor(l){const i=!!(l.data.hasPopup||l.data.titleObj?.str||l.data.contentsObj?.str||l.data.richText?.str);super(l,{isRenderable:i,ignoreBorder:!0,createQuadrilaterals:!0})}render(){return this.data.hasPopup||this._createPopup(null,this.data),this.quadrilaterals?this._renderQuadrilaterals("strikeoutAnnotation"):(this.container.className="strikeoutAnnotation",this.container)}}class k extends h{constructor(l){const i=!!(l.data.hasPopup||l.data.titleObj?.str||l.data.contentsObj?.str||l.data.richText?.str);super(l,{isRenderable:i,ignoreBorder:!0})}render(){return this.container.className="stampAnnotation",this.data.hasPopup||this._createPopup(null,this.data),this.container}}class j extends h{constructor(l){super(l,{isRenderable:!0});const{filename:i,content:s}=this.data.file;this.filename=(0,c.getFilenameFromUrl)(i),this.content=s,this.linkService.eventBus?.dispatch("fileattachmentannotation",{source:this,filename:i,content:s})}render(){this.container.className="fileAttachmentAnnotation";const l=document.createElement("div");return l.className="popupTriggerArea",l.addEventListener("dblclick",this._download.bind(this)),!this.data.hasPopup&&(this.data.titleObj?.str||this.data.contentsObj?.str||this.data.richText)&&this._createPopup(l,this.data),this.container.append(l),this.container}_download(){this.downloadManager?.openOrDownloadData(this.container,this.content,this.filename)}}class F{static#Yi(l,i,s,t){const d=l.firstChild||l;d.id=`${c.AnnotationPrefix}${i}`,s.append(l),t?.moveElementInDOM(s,l,d,!1)}static render(l){const{annotations:i,div:s,viewport:Z,accessibilityManager:b}=l;this.#Xi(s,Z);let a=0;for(const m of i){if(m.annotationType!==t.AnnotationType.POPUP){const{width:l,height:i}=W(m.rect);if(l<=0||i<=0)continue}const i=n.create({data:m,layer:s,page:l.page,viewport:Z,linkService:l.linkService,downloadManager:l.downloadManager,imageResourcesPath:l.imageResourcesPath||"",renderForms:!1!==l.renderForms,svgFactory:new c.DOMSVGFactory,annotationStorage:l.annotationStorage||new d.AnnotationStorage,enableScripting:l.enableScripting,hasJSActions:l.hasJSActions,fieldObjects:l.fieldObjects,mouseState:l.mouseState||{isDown:!1}});if(i.isRenderable){const l=i.render();if(m.hidden&&(l.style.visibility="hidden"),Array.isArray(l))for(const i of l)i.style.zIndex=a++,F.#Yi(i,m.id,s,b);else l.style.zIndex=a++,i instanceof y?s.prepend(l):F.#Yi(l,m.id,s,b)}}this.#Li(s,l.annotationCanvasMap)}static update(l){const{annotationCanvasMap:i,div:s,viewport:t}=l;this.#Xi(s,t),this.#Li(s,i),s.hidden=!1}static#Xi(l,{width:i,height:s,rotation:t}){const{style:c}=l,d=t%180!==0,Z=Math.floor(i)+"px",b=Math.floor(s)+"px";c.width=d?b:Z,c.height=d?Z:b,l.setAttribute("data-main-rotation",t)}static#Li(l,i){if(i){for(const[s,t]of i){const i=l.querySelector(`[data-annotation-id="${s}"]`);if(!i)continue;const{firstChild:c}=i;c?"CANVAS"===c.nodeName?c.replaceWith(t):c.before(t):i.append(t)}i.clear()}}}i.AnnotationLayer=F},(l,i)=>{function s(l){return Math.floor(255*Math.max(0,Math.min(1,l))).toString(16).padStart(2,"0")}Object.defineProperty(i,"__esModule",{value:!0}),i.ColorConverters=void 0;class t{static CMYK_G([l,i,s,t]){return["G",1-Math.min(1,.3*l+.59*s+.11*i+t)]}static G_CMYK([l]){return["CMYK",0,0,0,1-l]}static G_RGB([l]){return["RGB",l,l,l]}static G_HTML([l]){const i=s(l);return`#${i}${i}${i}`}static RGB_G([l,i,s]){return["G",.3*l+.59*i+.11*s]}static RGB_HTML([l,i,t]){const c=s(l),d=s(i),Z=s(t);return`#${c}${d}${Z}`}static T_HTML(){return"#00000000"}static CMYK_RGB([l,i,s,t]){return["RGB",1-Math.min(1,l+t),1-Math.min(1,s+t),1-Math.min(1,i+t)]}static CMYK_HTML(l){const i=this.CMYK_RGB(l).slice(1);return this.RGB_HTML(i)}static RGB_CMYK([l,i,s]){const t=1-l,c=1-i,d=1-s,Z=Math.min(t,c,d);return["CMYK",t,c,d,Z]}}i.ColorConverters=t},(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.XfaLayer=void 0;var t=s(19);class c{static setupStorage(l,i,s,t,c){const d=t.getValue(i,{value:null});switch(s.name){case"textarea":if(null!==d.value&&(l.textContent=d.value),"print"===c)break;l.addEventListener("input",(l=>{t.setValue(i,{value:l.target.value})}));break;case"input":if("radio"===s.attributes.type||"checkbox"===s.attributes.type){if(d.value===s.attributes.xfaOn?l.setAttribute("checked",!0):d.value===s.attributes.xfaOff&&l.removeAttribute("checked"),"print"===c)break;l.addEventListener("change",(l=>{t.setValue(i,{value:l.target.checked?l.target.getAttribute("xfaOn"):l.target.getAttribute("xfaOff")})}))}else{if(null!==d.value&&l.setAttribute("value",d.value),"print"===c)break;l.addEventListener("input",(l=>{t.setValue(i,{value:l.target.value})}))}break;case"select":if(null!==d.value)for(const l of s.children)l.attributes.value===d.value&&(l.attributes.selected=!0);l.addEventListener("input",(l=>{const s=l.target.options,c=-1===s.selectedIndex?"":s[s.selectedIndex].value;t.setValue(i,{value:c})}));break}}static setAttributes({html:l,element:i,storage:s=null,intent:t,linkService:c}){const{attributes:d}=i,Z=l instanceof HTMLAnchorElement;"radio"===d.type&&(d.name=`${d.name}-${t}`);for(const[b,a]of Object.entries(d))if(null!==a&&void 0!==a)switch(b){case"class":a.length&&l.setAttribute(b,a.join(" "));break;case"dataId":break;case"id":l.setAttribute("data-element-id",a);break;case"style":Object.assign(l.style,a);break;case"textContent":l.textContent=a;break;default:(!Z||"href"!==b&&"newWindow"!==b)&&l.setAttribute(b,a)}Z&&c.addLinkAttributes(l,d.href,d.newWindow),s&&d.dataId&&this.setupStorage(l,d.dataId,i,s)}static render(l){const i=l.annotationStorage,s=l.linkService,c=l.xfaHtml,d=l.intent||"display",Z=document.createElement(c.name);c.attributes&&this.setAttributes({html:Z,element:c,intent:d,linkService:s});const b=[[c,-1,Z]],a=l.div;if(a.append(Z),l.viewport){const i=`matrix(${l.viewport.transform.join(",")})`;a.style.transform=i}"richText"!==d&&a.setAttribute("class","xfaLayer xfaFont");const m=[];while(b.length>0){const[l,c,Z]=b.at(-1);if(c+1===l.children.length){b.pop();continue}const a=l.children[++b.at(-1)[1]];if(null===a)continue;const{name:e}=a;if("#text"===e){const l=document.createTextNode(a.value);m.push(l),Z.append(l);continue}let W;if(W=a?.attributes?.xmlns?document.createElementNS(a.attributes.xmlns,e):document.createElement(e),Z.append(W),a.attributes&&this.setAttributes({html:W,element:a,storage:i,intent:d,linkService:s}),a.children&&a.children.length>0)b.push([a,-1,W]);else if(a.value){const l=document.createTextNode(a.value);t.XfaText.shouldBuildText(e)&&m.push(l),W.append(l)}}for(const t of a.querySelectorAll(".xfaNonInteractive input, .xfaNonInteractive textarea"))t.setAttribute("readOnly",!0);return{textDivs:m}}static update(l){const i=`matrix(${l.viewport.transform.join(",")})`;l.div.style.transform=i,l.div.hidden=!1}}i.XfaLayer=c},(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.TextLayerRenderTask=void 0,i.renderTextLayer=n;var t=s(1);const c=1e5,d=30,Z=.8,b=new Map;function a(l,i){const s=b.get(l);if(s)return s;i.save(),i.font=`${d}px ${l}`;const t=i.measureText("");let c=t.fontBoundingBoxAscent,a=Math.abs(t.fontBoundingBoxDescent);if(c){i.restore();const s=c/(c+a);return b.set(l,s),s}i.strokeStyle="red",i.clearRect(0,0,d,d),i.strokeText("g",0,0);let m=i.getImageData(0,0,d,d).data;a=0;for(let Z=m.length-1-3;Z>=0;Z-=4)if(m[Z]>0){a=Math.ceil(Z/4/d);break}i.clearRect(0,0,d,d),i.strokeText("A",0,d),m=i.getImageData(0,0,d,d).data,c=0;for(let Z=0,b=m.length;Z<b;Z+=4)if(m[Z]>0){c=d-Math.floor(Z/4/d);break}if(i.restore(),c){const i=c/(c+a);return b.set(l,i),i}return b.set(l,Z),Z}function m(l,i,s,c){const d=document.createElement("span"),Z={angle:0,canvasWidth:0,hasText:""!==i.str,hasEOL:i.hasEOL,fontSize:0};l._textDivs.push(d);const b=t.Util.transform(l._viewport.transform,i.transform);let m=Math.atan2(b[1],b[0]);const e=s[i.fontName];e.vertical&&(m+=Math.PI/2);const W=Math.hypot(b[2],b[3]),n=W*a(e.fontFamily,c);let h,G;0===m?(h=b[4],G=b[5]-n):(h=b[4]+n*Math.sin(m),G=b[5]-n*Math.cos(m)),d.style.left=`${h}px`,d.style.top=`${G}px`,d.style.fontSize=`${W}px`,d.style.fontFamily=e.fontFamily,Z.fontSize=W,d.setAttribute("role","presentation"),d.textContent=i.str,d.dir=i.dir,l._fontInspectorEnabled&&(d.dataset.fontName=i.fontName),0!==m&&(Z.angle=m*(180/Math.PI));let u=!1;if(i.str.length>1)u=!0;else if(" "!==i.str&&i.transform[0]!==i.transform[3]){const l=Math.abs(i.transform[0]),s=Math.abs(i.transform[3]);l!==s&&Math.max(l,s)/Math.min(l,s)>1.5&&(u=!0)}u&&(e.vertical?Z.canvasWidth=i.height*l._viewport.scale:Z.canvasWidth=i.width*l._viewport.scale),l._textDivProperties.set(d,Z),l._textContentStream&&l._layoutText(d)}function e(l){if(l._canceled)return;const i=l._textDivs,s=l._capability,t=i.length;if(t>c)return l._renderingDone=!0,void s.resolve();if(!l._textContentStream)for(const c of i)l._layoutText(c);l._renderingDone=!0,s.resolve()}class W{constructor({textContent:l,textContentStream:i,container:s,viewport:c,textDivs:d,textContentItemsStr:Z}){this._textContent=l,this._textContentStream=i,this._container=s,this._document=s.ownerDocument,this._viewport=c,this._textDivs=d||[],this._textContentItemsStr=Z||[],this._fontInspectorEnabled=!!globalThis.FontInspector?.enabled,this._reader=null,this._layoutTextLastFontSize=null,this._layoutTextLastFontFamily=null,this._layoutTextCtx=null,this._textDivProperties=new WeakMap,this._renderingDone=!1,this._canceled=!1,this._capability=(0,t.createPromiseCapability)(),this._renderTimer=null,this._bounds=[],this._devicePixelRatio=globalThis.devicePixelRatio||1,this._capability.promise.finally((()=>{this._textDivProperties=null,this._layoutTextCtx&&(this._layoutTextCtx.canvas.width=0,this._layoutTextCtx.canvas.height=0,this._layoutTextCtx=null)})).catch((()=>{}))}get promise(){return this._capability.promise}cancel(){this._canceled=!0,this._reader&&(this._reader.cancel(new t.AbortException("TextLayer task cancelled.")).catch((()=>{})),this._reader=null),null!==this._renderTimer&&(clearTimeout(this._renderTimer),this._renderTimer=null),this._capability.reject(new Error("TextLayer task cancelled."))}_processItems(l,i){for(const s of l)if(void 0!==s.str)this._textContentItemsStr.push(s.str),m(this,s,i,this._layoutTextCtx);else if("beginMarkedContentProps"===s.type||"beginMarkedContent"===s.type){const l=this._container;this._container=document.createElement("span"),this._container.classList.add("markedContent"),null!==s.id&&this._container.setAttribute("id",`${s.id}`),l.append(this._container)}else"endMarkedContent"===s.type&&(this._container=this._container.parentNode)}_layoutText(l){const i=this._textDivProperties.get(l);let s="";if(0!==i.canvasWidth&&i.hasText){const{fontFamily:t}=l.style,{fontSize:c}=i;c===this._layoutTextLastFontSize&&t===this._layoutTextLastFontFamily||(this._layoutTextCtx.font=`${c*this._devicePixelRatio}px ${t}`,this._layoutTextLastFontSize=c,this._layoutTextLastFontFamily=t);const{width:d}=this._layoutTextCtx.measureText(l.textContent);d>0&&(s=`scaleX(${this._devicePixelRatio*i.canvasWidth/d})`)}if(0!==i.angle&&(s=`rotate(${i.angle}deg) ${s}`),s.length>0&&(l.style.transform=s),i.hasText&&this._container.append(l),i.hasEOL){const l=document.createElement("br");l.setAttribute("role","presentation"),this._container.append(l)}}_render(l=0){const i=(0,t.createPromiseCapability)();let s=Object.create(null);const c=this._document.createElement("canvas");if(c.height=c.width=d,this._layoutTextCtx=c.getContext("2d",{alpha:!1}),this._textContent){const l=this._textContent.items,s=this._textContent.styles;this._processItems(l,s),i.resolve()}else{if(!this._textContentStream)throw new Error('Neither "textContent" nor "textContentStream" parameters specified.');{const l=()=>{this._reader.read().then((({value:t,done:c})=>{c?i.resolve():(Object.assign(s,t.styles),this._processItems(t.items,s),l())}),i.reject)};this._reader=this._textContentStream.getReader(),l()}}i.promise.then((()=>{s=null,l?this._renderTimer=setTimeout((()=>{e(this),this._renderTimer=null}),l):e(this)}),this._capability.reject)}}function n(l){const i=new W({textContent:l.textContent,textContentStream:l.textContentStream,container:l.container,viewport:l.viewport,textDivs:l.textDivs,textContentItemsStr:l.textContentItemsStr});return i._render(l.timeout),i}i.TextLayerRenderTask=W},(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.SVGGraphics=void 0;var t=s(6),c=s(1),d=s(12);let Z=class{constructor(){(0,c.unreachable)("Not implemented: SVGGraphics")}};i.SVGGraphics=Z;{const b={fontStyle:"normal",fontWeight:"normal",fillColor:"#000000"},a="http://www.w3.org/XML/1998/namespace",m="http://www.w3.org/1999/xlink",e=["butt","round","square"],W=["miter","round","bevel"],n=function(l,i="",s=!1){if(URL.createObjectURL&&"undefined"!==typeof Blob&&!s)return URL.createObjectURL(new Blob([l],{type:i}));const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";let c=`data:${i};base64,`;for(let d=0,Z=l.length;d<Z;d+=3){const i=255&l[d],s=255&l[d+1],b=255&l[d+2],a=i>>2,m=(3&i)<<4|s>>4,e=d+1<Z?(15&s)<<2|b>>6:64,W=d+2<Z?63&b:64;c+=t[a]+t[m]+t[e]+t[W]}return c},h=function(){const l=new Uint8Array([137,80,78,71,13,10,26,10]),i=12,s=new Int32Array(256);for(let c=0;c<256;c++){let l=c;for(let i=0;i<8;i++)l=1&l?3988292384^l>>1&2147483647:l>>1&2147483647;s[c]=l}function t(l,i,t){let c=-1;for(let d=i;d<t;d++){const i=255&(c^l[d]),t=s[i];c=c>>>8^t}return-1^c}function Z(l,i,s,c){let d=c;const Z=i.length;s[d]=Z>>24&255,s[d+1]=Z>>16&255,s[d+2]=Z>>8&255,s[d+3]=255&Z,d+=4,s[d]=255&l.charCodeAt(0),s[d+1]=255&l.charCodeAt(1),s[d+2]=255&l.charCodeAt(2),s[d+3]=255&l.charCodeAt(3),d+=4,s.set(i,d),d+=i.length;const b=t(s,c+4,d);s[d]=b>>24&255,s[d+1]=b>>16&255,s[d+2]=b>>8&255,s[d+3]=255&b}function b(l,i,s){let t=1,c=0;for(let d=i;d<s;++d)t=(t+(255&l[d]))%65521,c=(c+t)%65521;return c<<16|t}function a(l){if(!d.isNodeJS)return m(l);try{let i;i=parseInt(process.versions.node)>=8?l:Buffer.from(l);const s=__webpack_require__(343).deflateSync(i,{level:9});return s instanceof Uint8Array?s:new Uint8Array(s)}catch(i){(0,c.warn)("Not compressing PNG because zlib.deflateSync is unavailable: "+i)}return m(l)}function m(l){let i=l.length;const s=65535,t=Math.ceil(i/s),c=new Uint8Array(2+i+5*t+4);let d=0;c[d++]=120,c[d++]=156;let Z=0;while(i>s)c[d++]=0,c[d++]=255,c[d++]=255,c[d++]=0,c[d++]=0,c.set(l.subarray(Z,Z+s),d),d+=s,Z+=s,i-=s;c[d++]=1,c[d++]=255&i,c[d++]=i>>8&255,c[d++]=255&~i,c[d++]=(65535&~i)>>8&255,c.set(l.subarray(Z),d),d+=l.length-Z;const a=b(l,0,l.length);return c[d++]=a>>24&255,c[d++]=a>>16&255,c[d++]=a>>8&255,c[d++]=255&a,c}function e(s,t,d,b){const m=s.width,e=s.height;let W,h,G;const u=s.data;switch(t){case c.ImageKind.GRAYSCALE_1BPP:h=0,W=1,G=m+7>>3;break;case c.ImageKind.RGB_24BPP:h=2,W=8,G=3*m;break;case c.ImageKind.RGBA_32BPP:h=6,W=8,G=4*m;break;default:throw new Error("invalid format")}const N=new Uint8Array((1+G)*e);let M=0,I=0;for(let l=0;l<e;++l)N[M++]=0,N.set(u.subarray(I,I+G),M),I+=G,M+=G;if(t===c.ImageKind.GRAYSCALE_1BPP&&b){M=0;for(let l=0;l<e;l++){M++;for(let l=0;l<G;l++)N[M++]^=255}}const Y=new Uint8Array([m>>24&255,m>>16&255,m>>8&255,255&m,e>>24&255,e>>16&255,e>>8&255,255&e,W,h,0,0,0]),X=a(N),L=l.length+3*i+Y.length+X.length,y=new Uint8Array(L);let o=0;return y.set(l,o),o+=l.length,Z("IHDR",Y,y,o),o+=i+Y.length,Z("IDATA",X,y,o),o+=i+X.length,Z("IEND",new Uint8Array(0),y,o),n(y,"image/png",d)}return function(l,i,s){const t=void 0===l.kind?c.ImageKind.GRAYSCALE_1BPP:l.kind;return e(l,t,i,s)}}();class G{constructor(){this.fontSizeScale=1,this.fontWeight=b.fontWeight,this.fontSize=0,this.textMatrix=c.IDENTITY_MATRIX,this.fontMatrix=c.FONT_IDENTITY_MATRIX,this.leading=0,this.textRenderingMode=c.TextRenderingMode.FILL,this.textMatrixScale=1,this.x=0,this.y=0,this.lineX=0,this.lineY=0,this.charSpacing=0,this.wordSpacing=0,this.textHScale=1,this.textRise=0,this.fillColor=b.fillColor,this.strokeColor="#000000",this.fillAlpha=1,this.strokeAlpha=1,this.lineWidth=1,this.lineJoin="",this.lineCap="",this.miterLimit=0,this.dashArray=[],this.dashPhase=0,this.dependencies=[],this.activeClipUrl=null,this.clipGroup=null,this.maskId=""}clone(){return Object.create(this)}setCurrentPoint(l,i){this.x=l,this.y=i}}function u(l){let i=[];const s=[];for(const t of l)"save"!==t.fn?"restore"===t.fn?i=s.pop():i.push(t):(i.push({fnId:92,fn:"group",items:[]}),s.push(i),i=i.at(-1).items);return i}function N(l){if(Number.isInteger(l))return l.toString();const i=l.toFixed(10);let s=i.length-1;if("0"!==i[s])return i;do{s--}while("0"===i[s]);return i.substring(0,"."===i[s]?s:s+1)}function M(l){if(0===l[4]&&0===l[5]){if(0===l[1]&&0===l[2])return 1===l[0]&&1===l[3]?"":`scale(${N(l[0])} ${N(l[3])})`;if(l[0]===l[3]&&l[1]===-l[2]){const i=180*Math.acos(l[0])/Math.PI;return`rotate(${N(i)})`}}else if(1===l[0]&&0===l[1]&&0===l[2]&&1===l[3])return`translate(${N(l[4])} ${N(l[5])})`;return`matrix(${N(l[0])} ${N(l[1])} ${N(l[2])} ${N(l[3])} ${N(l[4])} ${N(l[5])})`}let I=0,Y=0,X=0;i.SVGGraphics=Z=class{constructor(l,i,s=!1){(0,t.deprecated)("The SVG back-end is no longer maintained and *may* be removed in the future."),this.svgFactory=new t.DOMSVGFactory,this.current=new G,this.transformMatrix=c.IDENTITY_MATRIX,this.transformStack=[],this.extraStack=[],this.commonObjs=l,this.objs=i,this.pendingClip=null,this.pendingEOFill=!1,this.embedFonts=!1,this.embeddedFonts=Object.create(null),this.cssStyle=null,this.forceDataSchema=!!s,this._operatorIdMapping=[];for(const t in c.OPS)this._operatorIdMapping[c.OPS[t]]=t}getObject(l,i=null){return"string"===typeof l?l.startsWith("g_")?this.commonObjs.get(l):this.objs.get(l):i}save(){this.transformStack.push(this.transformMatrix);const l=this.current;this.extraStack.push(l),this.current=l.clone()}restore(){this.transformMatrix=this.transformStack.pop(),this.current=this.extraStack.pop(),this.pendingClip=null,this.tgrp=null}group(l){this.save(),this.executeOpTree(l),this.restore()}loadDependencies(l){const i=l.fnArray,s=l.argsArray;for(let t=0,d=i.length;t<d;t++)if(i[t]===c.OPS.dependency)for(const l of s[t]){const i=l.startsWith("g_")?this.commonObjs:this.objs,s=new Promise((s=>{i.get(l,s)}));this.current.dependencies.push(s)}return Promise.all(this.current.dependencies)}transform(l,i,s,t,d,Z){const b=[l,i,s,t,d,Z];this.transformMatrix=c.Util.transform(this.transformMatrix,b),this.tgrp=null}getSVG(l,i){this.viewport=i;const s=this._initialize(i);return this.loadDependencies(l).then((()=>(this.transformMatrix=c.IDENTITY_MATRIX,this.executeOpTree(this.convertOpList(l)),s)))}convertOpList(l){const i=this._operatorIdMapping,s=l.argsArray,t=l.fnArray,c=[];for(let d=0,Z=t.length;d<Z;d++){const l=t[d];c.push({fnId:l,fn:i[l],args:s[d]})}return u(c)}executeOpTree(l){for(const i of l){const l=i.fn,s=i.fnId,t=i.args;switch(0|s){case c.OPS.beginText:this.beginText();break;case c.OPS.dependency:break;case c.OPS.setLeading:this.setLeading(t);break;case c.OPS.setLeadingMoveText:this.setLeadingMoveText(t[0],t[1]);break;case c.OPS.setFont:this.setFont(t);break;case c.OPS.showText:this.showText(t[0]);break;case c.OPS.showSpacedText:this.showText(t[0]);break;case c.OPS.endText:this.endText();break;case c.OPS.moveText:this.moveText(t[0],t[1]);break;case c.OPS.setCharSpacing:this.setCharSpacing(t[0]);break;case c.OPS.setWordSpacing:this.setWordSpacing(t[0]);break;case c.OPS.setHScale:this.setHScale(t[0]);break;case c.OPS.setTextMatrix:this.setTextMatrix(t[0],t[1],t[2],t[3],t[4],t[5]);break;case c.OPS.setTextRise:this.setTextRise(t[0]);break;case c.OPS.setTextRenderingMode:this.setTextRenderingMode(t[0]);break;case c.OPS.setLineWidth:this.setLineWidth(t[0]);break;case c.OPS.setLineJoin:this.setLineJoin(t[0]);break;case c.OPS.setLineCap:this.setLineCap(t[0]);break;case c.OPS.setMiterLimit:this.setMiterLimit(t[0]);break;case c.OPS.setFillRGBColor:this.setFillRGBColor(t[0],t[1],t[2]);break;case c.OPS.setStrokeRGBColor:this.setStrokeRGBColor(t[0],t[1],t[2]);break;case c.OPS.setStrokeColorN:this.setStrokeColorN(t);break;case c.OPS.setFillColorN:this.setFillColorN(t);break;case c.OPS.shadingFill:this.shadingFill(t[0]);break;case c.OPS.setDash:this.setDash(t[0],t[1]);break;case c.OPS.setRenderingIntent:this.setRenderingIntent(t[0]);break;case c.OPS.setFlatness:this.setFlatness(t[0]);break;case c.OPS.setGState:this.setGState(t[0]);break;case c.OPS.fill:this.fill();break;case c.OPS.eoFill:this.eoFill();break;case c.OPS.stroke:this.stroke();break;case c.OPS.fillStroke:this.fillStroke();break;case c.OPS.eoFillStroke:this.eoFillStroke();break;case c.OPS.clip:this.clip("nonzero");break;case c.OPS.eoClip:this.clip("evenodd");break;case c.OPS.paintSolidColorImageMask:this.paintSolidColorImageMask();break;case c.OPS.paintImageXObject:this.paintImageXObject(t[0]);break;case c.OPS.paintInlineImageXObject:this.paintInlineImageXObject(t[0]);break;case c.OPS.paintImageMaskXObject:this.paintImageMaskXObject(t[0]);break;case c.OPS.paintFormXObjectBegin:this.paintFormXObjectBegin(t[0],t[1]);break;case c.OPS.paintFormXObjectEnd:this.paintFormXObjectEnd();break;case c.OPS.closePath:this.closePath();break;case c.OPS.closeStroke:this.closeStroke();break;case c.OPS.closeFillStroke:this.closeFillStroke();break;case c.OPS.closeEOFillStroke:this.closeEOFillStroke();break;case c.OPS.nextLine:this.nextLine();break;case c.OPS.transform:this.transform(t[0],t[1],t[2],t[3],t[4],t[5]);break;case c.OPS.constructPath:this.constructPath(t[0],t[1]);break;case c.OPS.endPath:this.endPath();break;case 92:this.group(i.items);break;default:(0,c.warn)(`Unimplemented operator ${l}`);break}}}setWordSpacing(l){this.current.wordSpacing=l}setCharSpacing(l){this.current.charSpacing=l}nextLine(){this.moveText(0,this.current.leading)}setTextMatrix(l,i,s,t,c,d){const Z=this.current;Z.textMatrix=Z.lineMatrix=[l,i,s,t,c,d],Z.textMatrixScale=Math.hypot(l,i),Z.x=Z.lineX=0,Z.y=Z.lineY=0,Z.xcoords=[],Z.ycoords=[],Z.tspan=this.svgFactory.createElement("svg:tspan"),Z.tspan.setAttributeNS(null,"font-family",Z.fontFamily),Z.tspan.setAttributeNS(null,"font-size",`${N(Z.fontSize)}px`),Z.tspan.setAttributeNS(null,"y",N(-Z.y)),Z.txtElement=this.svgFactory.createElement("svg:text"),Z.txtElement.append(Z.tspan)}beginText(){const l=this.current;l.x=l.lineX=0,l.y=l.lineY=0,l.textMatrix=c.IDENTITY_MATRIX,l.lineMatrix=c.IDENTITY_MATRIX,l.textMatrixScale=1,l.tspan=this.svgFactory.createElement("svg:tspan"),l.txtElement=this.svgFactory.createElement("svg:text"),l.txtgrp=this.svgFactory.createElement("svg:g"),l.xcoords=[],l.ycoords=[]}moveText(l,i){const s=this.current;s.x=s.lineX+=l,s.y=s.lineY+=i,s.xcoords=[],s.ycoords=[],s.tspan=this.svgFactory.createElement("svg:tspan"),s.tspan.setAttributeNS(null,"font-family",s.fontFamily),s.tspan.setAttributeNS(null,"font-size",`${N(s.fontSize)}px`),s.tspan.setAttributeNS(null,"y",N(-s.y))}showText(l){const i=this.current,s=i.font,t=i.fontSize;if(0===t)return;const d=i.fontSizeScale,Z=i.charSpacing,m=i.wordSpacing,e=i.fontDirection,W=i.textHScale*e,n=s.vertical,h=n?1:-1,G=s.defaultVMetrics,u=t*i.fontMatrix[0];let I=0;for(const c of l){if(null===c){I+=e*m;continue}if("number"===typeof c){I+=h*c*t/1e3;continue}const l=(c.isSpace?m:0)+Z,b=c.fontChar;let a,W,N,M=c.width;if(n){let l;const i=c.vmetric||G;l=c.vmetric?i[1]:.5*M,l=-l*u;const s=i[2]*u;M=i?-i[0]:M,a=l/d,W=(I+s)/d}else a=I/d,W=0;(c.isInFont||s.missingFile)&&(i.xcoords.push(i.x+a),n&&i.ycoords.push(-i.y+W),i.tspan.textContent+=b),N=n?M*u-l*e:M*u+l*e,I+=N}i.tspan.setAttributeNS(null,"x",i.xcoords.map(N).join(" ")),n?i.tspan.setAttributeNS(null,"y",i.ycoords.map(N).join(" ")):i.tspan.setAttributeNS(null,"y",N(-i.y)),n?i.y-=I:i.x+=I*W,i.tspan.setAttributeNS(null,"font-family",i.fontFamily),i.tspan.setAttributeNS(null,"font-size",`${N(i.fontSize)}px`),i.fontStyle!==b.fontStyle&&i.tspan.setAttributeNS(null,"font-style",i.fontStyle),i.fontWeight!==b.fontWeight&&i.tspan.setAttributeNS(null,"font-weight",i.fontWeight);const Y=i.textRenderingMode&c.TextRenderingMode.FILL_STROKE_MASK;if(Y===c.TextRenderingMode.FILL||Y===c.TextRenderingMode.FILL_STROKE?(i.fillColor!==b.fillColor&&i.tspan.setAttributeNS(null,"fill",i.fillColor),i.fillAlpha<1&&i.tspan.setAttributeNS(null,"fill-opacity",i.fillAlpha)):i.textRenderingMode===c.TextRenderingMode.ADD_TO_PATH?i.tspan.setAttributeNS(null,"fill","transparent"):i.tspan.setAttributeNS(null,"fill","none"),Y===c.TextRenderingMode.STROKE||Y===c.TextRenderingMode.FILL_STROKE){const l=1/(i.textMatrixScale||1);this._setStrokeAttributes(i.tspan,l)}let X=i.textMatrix;0!==i.textRise&&(X=X.slice(),X[5]+=i.textRise),i.txtElement.setAttributeNS(null,"transform",`${M(X)} scale(${N(W)}, -1)`),i.txtElement.setAttributeNS(a,"xml:space","preserve"),i.txtElement.append(i.tspan),i.txtgrp.append(i.txtElement),this._ensureTransformGroup().append(i.txtElement)}setLeadingMoveText(l,i){this.setLeading(-i),this.moveText(l,i)}addFontStyle(l){if(!l.data)throw new Error('addFontStyle: No font data available, ensure that the "fontExtraProperties" API parameter is set.');this.cssStyle||(this.cssStyle=this.svgFactory.createElement("svg:style"),this.cssStyle.setAttributeNS(null,"type","text/css"),this.defs.append(this.cssStyle));const i=n(l.data,l.mimetype,this.forceDataSchema);this.cssStyle.textContent+=`@font-face { font-family: "${l.loadedName}"; src: url(${i}); }\n`}setFont(l){const i=this.current,s=this.commonObjs.get(l[0]);let t=l[1];i.font=s,!this.embedFonts||s.missingFile||this.embeddedFonts[s.loadedName]||(this.addFontStyle(s),this.embeddedFonts[s.loadedName]=s),i.fontMatrix=s.fontMatrix||c.FONT_IDENTITY_MATRIX;let d="normal";s.black?d="900":s.bold&&(d="bold");const Z=s.italic?"italic":"normal";t<0?(t=-t,i.fontDirection=-1):i.fontDirection=1,i.fontSize=t,i.fontFamily=s.loadedName,i.fontWeight=d,i.fontStyle=Z,i.tspan=this.svgFactory.createElement("svg:tspan"),i.tspan.setAttributeNS(null,"y",N(-i.y)),i.xcoords=[],i.ycoords=[]}endText(){const l=this.current;l.textRenderingMode&c.TextRenderingMode.ADD_TO_PATH_FLAG&&l.txtElement?.hasChildNodes()&&(l.element=l.txtElement,this.clip("nonzero"),this.endPath())}setLineWidth(l){l>0&&(this.current.lineWidth=l)}setLineCap(l){this.current.lineCap=e[l]}setLineJoin(l){this.current.lineJoin=W[l]}setMiterLimit(l){this.current.miterLimit=l}setStrokeAlpha(l){this.current.strokeAlpha=l}setStrokeRGBColor(l,i,s){this.current.strokeColor=c.Util.makeHexColor(l,i,s)}setFillAlpha(l){this.current.fillAlpha=l}setFillRGBColor(l,i,s){this.current.fillColor=c.Util.makeHexColor(l,i,s),this.current.tspan=this.svgFactory.createElement("svg:tspan"),this.current.xcoords=[],this.current.ycoords=[]}setStrokeColorN(l){this.current.strokeColor=this._makeColorN_Pattern(l)}setFillColorN(l){this.current.fillColor=this._makeColorN_Pattern(l)}shadingFill(l){const i=this.viewport.width,s=this.viewport.height,t=c.Util.inverseTransform(this.transformMatrix),d=c.Util.applyTransform([0,0],t),Z=c.Util.applyTransform([0,s],t),b=c.Util.applyTransform([i,0],t),a=c.Util.applyTransform([i,s],t),m=Math.min(d[0],Z[0],b[0],a[0]),e=Math.min(d[1],Z[1],b[1],a[1]),W=Math.max(d[0],Z[0],b[0],a[0]),n=Math.max(d[1],Z[1],b[1],a[1]),h=this.svgFactory.createElement("svg:rect");h.setAttributeNS(null,"x",m),h.setAttributeNS(null,"y",e),h.setAttributeNS(null,"width",W-m),h.setAttributeNS(null,"height",n-e),h.setAttributeNS(null,"fill",this._makeShadingPattern(l)),this.current.fillAlpha<1&&h.setAttributeNS(null,"fill-opacity",this.current.fillAlpha),this._ensureTransformGroup().append(h)}_makeColorN_Pattern(l){return"TilingPattern"===l[0]?this._makeTilingPattern(l):this._makeShadingPattern(l)}_makeTilingPattern(l){const i=l[1],s=l[2],t=l[3]||c.IDENTITY_MATRIX,[d,Z,b,a]=l[4],m=l[5],e=l[6],W=l[7],n="shading"+X++,[h,G,u,N]=c.Util.normalizeRect([...c.Util.applyTransform([d,Z],t),...c.Util.applyTransform([b,a],t)]),[M,I]=c.Util.singularValueDecompose2dScale(t),Y=m*M,L=e*I,y=this.svgFactory.createElement("svg:pattern");y.setAttributeNS(null,"id",n),y.setAttributeNS(null,"patternUnits","userSpaceOnUse"),y.setAttributeNS(null,"width",Y),y.setAttributeNS(null,"height",L),y.setAttributeNS(null,"x",`${h}`),y.setAttributeNS(null,"y",`${G}`);const o=this.svg,V=this.transformMatrix,p=this.current.fillColor,T=this.current.strokeColor,w=this.svgFactory.create(u-h,N-G);if(this.svg=w,this.transformMatrix=t,2===W){const l=c.Util.makeHexColor(...i);this.current.fillColor=l,this.current.strokeColor=l}return this.executeOpTree(this.convertOpList(s)),this.svg=o,this.transformMatrix=V,this.current.fillColor=p,this.current.strokeColor=T,y.append(w.childNodes[0]),this.defs.append(y),`url(#${n})`}_makeShadingPattern(l){switch("string"===typeof l&&(l=this.objs.get(l)),l[0]){case"RadialAxial":const i="shading"+X++,s=l[3];let t;switch(l[1]){case"axial":const s=l[4],c=l[5];t=this.svgFactory.createElement("svg:linearGradient"),t.setAttributeNS(null,"id",i),t.setAttributeNS(null,"gradientUnits","userSpaceOnUse"),t.setAttributeNS(null,"x1",s[0]),t.setAttributeNS(null,"y1",s[1]),t.setAttributeNS(null,"x2",c[0]),t.setAttributeNS(null,"y2",c[1]);break;case"radial":const d=l[4],Z=l[5],b=l[6],a=l[7];t=this.svgFactory.createElement("svg:radialGradient"),t.setAttributeNS(null,"id",i),t.setAttributeNS(null,"gradientUnits","userSpaceOnUse"),t.setAttributeNS(null,"cx",Z[0]),t.setAttributeNS(null,"cy",Z[1]),t.setAttributeNS(null,"r",a),t.setAttributeNS(null,"fx",d[0]),t.setAttributeNS(null,"fy",d[1]),t.setAttributeNS(null,"fr",b);break;default:throw new Error(`Unknown RadialAxial type: ${l[1]}`)}for(const l of s){const i=this.svgFactory.createElement("svg:stop");i.setAttributeNS(null,"offset",l[0]),i.setAttributeNS(null,"stop-color",l[1]),t.append(i)}return this.defs.append(t),`url(#${i})`;case"Mesh":return(0,c.warn)("Unimplemented pattern Mesh"),null;case"Dummy":return"hotpink";default:throw new Error(`Unknown IR type: ${l[0]}`)}}setDash(l,i){this.current.dashArray=l,this.current.dashPhase=i}constructPath(l,i){const s=this.current;let t=s.x,d=s.y,Z=[],b=0;for(const a of l)switch(0|a){case c.OPS.rectangle:t=i[b++],d=i[b++];const l=i[b++],s=i[b++],a=t+l,m=d+s;Z.push("M",N(t),N(d),"L",N(a),N(d),"L",N(a),N(m),"L",N(t),N(m),"Z");break;case c.OPS.moveTo:t=i[b++],d=i[b++],Z.push("M",N(t),N(d));break;case c.OPS.lineTo:t=i[b++],d=i[b++],Z.push("L",N(t),N(d));break;case c.OPS.curveTo:t=i[b+4],d=i[b+5],Z.push("C",N(i[b]),N(i[b+1]),N(i[b+2]),N(i[b+3]),N(t),N(d)),b+=6;break;case c.OPS.curveTo2:Z.push("C",N(t),N(d),N(i[b]),N(i[b+1]),N(i[b+2]),N(i[b+3])),t=i[b+2],d=i[b+3],b+=4;break;case c.OPS.curveTo3:t=i[b+2],d=i[b+3],Z.push("C",N(i[b]),N(i[b+1]),N(t),N(d),N(t),N(d)),b+=4;break;case c.OPS.closePath:Z.push("Z");break}Z=Z.join(" "),s.path&&l.length>0&&l[0]!==c.OPS.rectangle&&l[0]!==c.OPS.moveTo?Z=s.path.getAttributeNS(null,"d")+Z:(s.path=this.svgFactory.createElement("svg:path"),this._ensureTransformGroup().append(s.path)),s.path.setAttributeNS(null,"d",Z),s.path.setAttributeNS(null,"fill","none"),s.element=s.path,s.setCurrentPoint(t,d)}endPath(){const l=this.current;if(l.path=null,!this.pendingClip)return;if(!l.element)return void(this.pendingClip=null);const i="clippath"+I++,s=this.svgFactory.createElement("svg:clipPath");s.setAttributeNS(null,"id",i),s.setAttributeNS(null,"transform",M(this.transformMatrix));const t=l.element.cloneNode(!0);if("evenodd"===this.pendingClip?t.setAttributeNS(null,"clip-rule","evenodd"):t.setAttributeNS(null,"clip-rule","nonzero"),this.pendingClip=null,s.append(t),this.defs.append(s),l.activeClipUrl){l.clipGroup=null;for(const l of this.extraStack)l.clipGroup=null;s.setAttributeNS(null,"clip-path",l.activeClipUrl)}l.activeClipUrl=`url(#${i})`,this.tgrp=null}clip(l){this.pendingClip=l}closePath(){const l=this.current;if(l.path){const i=`${l.path.getAttributeNS(null,"d")}Z`;l.path.setAttributeNS(null,"d",i)}}setLeading(l){this.current.leading=-l}setTextRise(l){this.current.textRise=l}setTextRenderingMode(l){this.current.textRenderingMode=l}setHScale(l){this.current.textHScale=l/100}setRenderingIntent(l){}setFlatness(l){}setGState(l){for(const[i,s]of l)switch(i){case"LW":this.setLineWidth(s);break;case"LC":this.setLineCap(s);break;case"LJ":this.setLineJoin(s);break;case"ML":this.setMiterLimit(s);break;case"D":this.setDash(s[0],s[1]);break;case"RI":this.setRenderingIntent(s);break;case"FL":this.setFlatness(s);break;case"Font":this.setFont(s);break;case"CA":this.setStrokeAlpha(s);break;case"ca":this.setFillAlpha(s);break;default:(0,c.warn)(`Unimplemented graphic state operator ${i}`);break}}fill(){const l=this.current;l.element&&(l.element.setAttributeNS(null,"fill",l.fillColor),l.element.setAttributeNS(null,"fill-opacity",l.fillAlpha),this.endPath())}stroke(){const l=this.current;l.element&&(this._setStrokeAttributes(l.element),l.element.setAttributeNS(null,"fill","none"),this.endPath())}_setStrokeAttributes(l,i=1){const s=this.current;let t=s.dashArray;1!==i&&t.length>0&&(t=t.map((function(l){return i*l}))),l.setAttributeNS(null,"stroke",s.strokeColor),l.setAttributeNS(null,"stroke-opacity",s.strokeAlpha),l.setAttributeNS(null,"stroke-miterlimit",N(s.miterLimit)),l.setAttributeNS(null,"stroke-linecap",s.lineCap),l.setAttributeNS(null,"stroke-linejoin",s.lineJoin),l.setAttributeNS(null,"stroke-width",N(i*s.lineWidth)+"px"),l.setAttributeNS(null,"stroke-dasharray",t.map(N).join(" ")),l.setAttributeNS(null,"stroke-dashoffset",N(i*s.dashPhase)+"px")}eoFill(){this.current.element?.setAttributeNS(null,"fill-rule","evenodd"),this.fill()}fillStroke(){this.stroke(),this.fill()}eoFillStroke(){this.current.element?.setAttributeNS(null,"fill-rule","evenodd"),this.fillStroke()}closeStroke(){this.closePath(),this.stroke()}closeFillStroke(){this.closePath(),this.fillStroke()}closeEOFillStroke(){this.closePath(),this.eoFillStroke()}paintSolidColorImageMask(){const l=this.svgFactory.createElement("svg:rect");l.setAttributeNS(null,"x","0"),l.setAttributeNS(null,"y","0"),l.setAttributeNS(null,"width","1px"),l.setAttributeNS(null,"height","1px"),l.setAttributeNS(null,"fill",this.current.fillColor),this._ensureTransformGroup().append(l)}paintImageXObject(l){const i=this.getObject(l);i?this.paintInlineImageXObject(i):(0,c.warn)(`Dependent image with object ID ${l} is not ready yet`)}paintInlineImageXObject(l,i){const s=l.width,t=l.height,c=h(l,this.forceDataSchema,!!i),d=this.svgFactory.createElement("svg:rect");d.setAttributeNS(null,"x","0"),d.setAttributeNS(null,"y","0"),d.setAttributeNS(null,"width",N(s)),d.setAttributeNS(null,"height",N(t)),this.current.element=d,this.clip("nonzero");const Z=this.svgFactory.createElement("svg:image");Z.setAttributeNS(m,"xlink:href",c),Z.setAttributeNS(null,"x","0"),Z.setAttributeNS(null,"y",N(-t)),Z.setAttributeNS(null,"width",N(s)+"px"),Z.setAttributeNS(null,"height",N(t)+"px"),Z.setAttributeNS(null,"transform",`scale(${N(1/s)} ${N(-1/t)})`),i?i.append(Z):this._ensureTransformGroup().append(Z)}paintImageMaskXObject(l){const i=this.getObject(l.data,l);if(i.bitmap)return void(0,c.warn)("paintImageMaskXObject: ImageBitmap support is not implemented, ensure that the `isOffscreenCanvasSupported` API parameter is disabled.");const s=this.current,t=i.width,d=i.height,Z=s.fillColor;s.maskId="mask"+Y++;const b=this.svgFactory.createElement("svg:mask");b.setAttributeNS(null,"id",s.maskId);const a=this.svgFactory.createElement("svg:rect");a.setAttributeNS(null,"x","0"),a.setAttributeNS(null,"y","0"),a.setAttributeNS(null,"width",N(t)),a.setAttributeNS(null,"height",N(d)),a.setAttributeNS(null,"fill",Z),a.setAttributeNS(null,"mask",`url(#${s.maskId})`),this.defs.append(b),this._ensureTransformGroup().append(a),this.paintInlineImageXObject(i,b)}paintFormXObjectBegin(l,i){if(Array.isArray(l)&&6===l.length&&this.transform(l[0],l[1],l[2],l[3],l[4],l[5]),i){const l=i[2]-i[0],s=i[3]-i[1],t=this.svgFactory.createElement("svg:rect");t.setAttributeNS(null,"x",i[0]),t.setAttributeNS(null,"y",i[1]),t.setAttributeNS(null,"width",N(l)),t.setAttributeNS(null,"height",N(s)),this.current.element=t,this.clip("nonzero"),this.endPath()}}paintFormXObjectEnd(){}_initialize(l){const i=this.svgFactory.create(l.width,l.height),s=this.svgFactory.createElement("svg:defs");i.append(s),this.defs=s;const t=this.svgFactory.createElement("svg:g");return t.setAttributeNS(null,"transform",M(l.transform)),i.append(t),this.svg=t,i}_ensureClipGroup(){if(!this.current.clipGroup){const l=this.svgFactory.createElement("svg:g");l.setAttributeNS(null,"clip-path",this.current.activeClipUrl),this.svg.append(l),this.current.clipGroup=l}return this.current.clipGroup}_ensureTransformGroup(){return this.tgrp||(this.tgrp=this.svgFactory.createElement("svg:g"),this.tgrp.setAttributeNS(null,"transform",M(this.transformMatrix)),this.current.activeClipUrl?this._ensureClipGroup().append(this.tgrp):this.svg.append(this.tgrp)),this.tgrp}}}},(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.PDFNodeStream=void 0;var t=s(1),c=s(32);const d=__webpack_require__(824),Z=__webpack_require__(533),b=__webpack_require__(916),a=__webpack_require__(475),m=/^file:\/\/\/[a-zA-Z]:\//;function e(l){const i=a.parse(l);return"file:"===i.protocol||i.host?i:/^[a-z]:[/\\]/i.test(l)?a.parse(`file:///${l}`):(i.host||(i.protocol="file:"),i)}class W{constructor(l){this.source=l,this.url=e(l.url),this.isHttp="http:"===this.url.protocol||"https:"===this.url.protocol,this.isFsUrl="file:"===this.url.protocol,this.httpHeaders=this.isHttp&&l.httpHeaders||{},this._fullRequestReader=null,this._rangeRequestReaders=[]}get _progressiveDataLength(){return this._fullRequestReader?._loaded??0}getFullReader(){return(0,t.assert)(!this._fullRequestReader,"PDFNodeStream.getFullReader can only be called once."),this._fullRequestReader=this.isFsUrl?new M(this):new u(this),this._fullRequestReader}getRangeReader(l,i){if(i<=this._progressiveDataLength)return null;const s=this.isFsUrl?new I(this,l,i):new N(this,l,i);return this._rangeRequestReaders.push(s),s}cancelAllRequests(l){this._fullRequestReader?.cancel(l);for(const i of this._rangeRequestReaders.slice(0))i.cancel(l)}}i.PDFNodeStream=W;class n{constructor(l){this._url=l.url,this._done=!1,this._storedError=null,this.onProgress=null;const i=l.source;this._contentLength=i.length,this._loaded=0,this._filename=null,this._disableRange=i.disableRange||!1,this._rangeChunkSize=i.rangeChunkSize,this._rangeChunkSize||this._disableRange||(this._disableRange=!0),this._isStreamingSupported=!i.disableStream,this._isRangeSupported=!i.disableRange,this._readableStream=null,this._readCapability=(0,t.createPromiseCapability)(),this._headersCapability=(0,t.createPromiseCapability)()}get headersReady(){return this._headersCapability.promise}get filename(){return this._filename}get contentLength(){return this._contentLength}get isRangeSupported(){return this._isRangeSupported}get isStreamingSupported(){return this._isStreamingSupported}async read(){if(await this._readCapability.promise,this._done)return{value:void 0,done:!0};if(this._storedError)throw this._storedError;const l=this._readableStream.read();if(null===l)return this._readCapability=(0,t.createPromiseCapability)(),this.read();this._loaded+=l.length,this.onProgress?.({loaded:this._loaded,total:this._contentLength});const i=new Uint8Array(l).buffer;return{value:i,done:!1}}cancel(l){this._readableStream?this._readableStream.destroy(l):this._error(l)}_error(l){this._storedError=l,this._readCapability.resolve()}_setReadableStream(l){this._readableStream=l,l.on("readable",(()=>{this._readCapability.resolve()})),l.on("end",(()=>{l.destroy(),this._done=!0,this._readCapability.resolve()})),l.on("error",(l=>{this._error(l)})),!this._isStreamingSupported&&this._isRangeSupported&&this._error(new t.AbortException("streaming is disabled")),this._storedError&&this._readableStream.destroy(this._storedError)}}class h{constructor(l){this._url=l.url,this._done=!1,this._storedError=null,this.onProgress=null,this._loaded=0,this._readableStream=null,this._readCapability=(0,t.createPromiseCapability)();const i=l.source;this._isStreamingSupported=!i.disableStream}get isStreamingSupported(){return this._isStreamingSupported}async read(){if(await this._readCapability.promise,this._done)return{value:void 0,done:!0};if(this._storedError)throw this._storedError;const l=this._readableStream.read();if(null===l)return this._readCapability=(0,t.createPromiseCapability)(),this.read();this._loaded+=l.length,this.onProgress?.({loaded:this._loaded});const i=new Uint8Array(l).buffer;return{value:i,done:!1}}cancel(l){this._readableStream?this._readableStream.destroy(l):this._error(l)}_error(l){this._storedError=l,this._readCapability.resolve()}_setReadableStream(l){this._readableStream=l,l.on("readable",(()=>{this._readCapability.resolve()})),l.on("end",(()=>{l.destroy(),this._done=!0,this._readCapability.resolve()})),l.on("error",(l=>{this._error(l)})),this._storedError&&this._readableStream.destroy(this._storedError)}}function G(l,i){return{protocol:l.protocol,auth:l.auth,host:l.hostname,port:l.port,path:l.path,method:"GET",headers:i}}class u extends n{constructor(l){super(l);const i=i=>{if(404===i.statusCode){const l=new t.MissingPDFException(`Missing PDF "${this._url}".`);return this._storedError=l,void this._headersCapability.reject(l)}this._headersCapability.resolve(),this._setReadableStream(i);const s=l=>this._readableStream.headers[l.toLowerCase()],{allowRangeRequests:d,suggestedLength:Z}=(0,c.validateRangeRequestCapabilities)({getResponseHeader:s,isHttp:l.isHttp,rangeChunkSize:this._rangeChunkSize,disableRange:this._disableRange});this._isRangeSupported=d,this._contentLength=Z||this._contentLength,this._filename=(0,c.extractFilenameFromHeader)(s)};this._request=null,"http:"===this._url.protocol?this._request=Z.request(G(this._url,l.httpHeaders),i):this._request=b.request(G(this._url,l.httpHeaders),i),this._request.on("error",(l=>{this._storedError=l,this._headersCapability.reject(l)})),this._request.end()}}class N extends h{constructor(l,i,s){super(l),this._httpHeaders={};for(const t in l.httpHeaders){const i=l.httpHeaders[t];"undefined"!==typeof i&&(this._httpHeaders[t]=i)}this._httpHeaders.Range=`bytes=${i}-${s-1}`;const c=l=>{if(404!==l.statusCode)this._setReadableStream(l);else{const l=new t.MissingPDFException(`Missing PDF "${this._url}".`);this._storedError=l}};this._request=null,"http:"===this._url.protocol?this._request=Z.request(G(this._url,this._httpHeaders),c):this._request=b.request(G(this._url,this._httpHeaders),c),this._request.on("error",(l=>{this._storedError=l})),this._request.end()}}class M extends n{constructor(l){super(l);let i=decodeURIComponent(this._url.path);m.test(this._url.href)&&(i=i.replace(/^\//,"")),d.lstat(i,((l,s)=>{if(l)return"ENOENT"===l.code&&(l=new t.MissingPDFException(`Missing PDF "${i}".`)),this._storedError=l,void this._headersCapability.reject(l);this._contentLength=s.size,this._setReadableStream(d.createReadStream(i)),this._headersCapability.resolve()}))}}class I extends h{constructor(l,i,s){super(l);let t=decodeURIComponent(this._url.path);m.test(this._url.href)&&(t=t.replace(/^\//,"")),this._setReadableStream(d.createReadStream(t,{start:i,end:s-1}))}}},(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.createResponseStatusError=a,i.extractFilenameFromHeader=b,i.validateRangeRequestCapabilities=Z,i.validateResponseStatus=m;var t=s(1),c=s(33),d=s(6);function Z({getResponseHeader:l,isHttp:i,rangeChunkSize:s,disableRange:t}){const c={allowRangeRequests:!1,suggestedLength:void 0},d=parseInt(l("Content-Length"),10);if(!Number.isInteger(d))return c;if(c.suggestedLength=d,d<=2*s)return c;if(t||!i)return c;if("bytes"!==l("Accept-Ranges"))return c;const Z=l("Content-Encoding")||"identity";return"identity"!==Z||(c.allowRangeRequests=!0),c}function b(l){const i=l("Content-Disposition");if(i){let l=(0,c.getFilenameFromContentDispositionHeader)(i);if(l.includes("%"))try{l=decodeURIComponent(l)}catch(s){}if((0,d.isPdfFile)(l))return l}return null}function a(l,i){return 404===l||0===l&&i.startsWith("file:")?new t.MissingPDFException('Missing PDF "'+i+'".'):new t.UnexpectedResponseException(`Unexpected server response (${l}) while retrieving PDF "${i}".`,l)}function m(l){return 200===l||206===l}},(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.getFilenameFromContentDispositionHeader=c;var t=s(1);function c(l){let i=!0,s=c("filename\\*","i").exec(l);if(s){s=s[1];let l=a(s);return l=unescape(l),l=m(l),l=e(l),Z(l)}if(s=b(l),s){const l=e(s);return Z(l)}if(s=c("filename","i").exec(l),s){s=s[1];let l=a(s);return l=e(l),Z(l)}function c(l,i){return new RegExp("(?:^|;)\\s*"+l+'\\s*=\\s*([^";\\s][^;\\s]*|"(?:[^"\\\\]|\\\\"?)+"?)',i)}function d(l,s){if(l){if(!/^[\x00-\xFF]+$/.test(s))return s;try{const c=new TextDecoder(l,{fatal:!0}),d=(0,t.stringToBytes)(s);s=c.decode(d),i=!1}catch(c){}}return s}function Z(l){return i&&/[\x80-\xff]/.test(l)&&(l=d("utf-8",l),i&&(l=d("iso-8859-1",l))),l}function b(l){const i=[];let s;const t=c("filename\\*((?!0\\d)\\d+)(\\*?)","ig");while(null!==(s=t.exec(l))){let[,l,t,c]=s;if(l=parseInt(l,10),l in i){if(0===l)break}else i[l]=[t,c]}const d=[];for(let c=0;c<i.length;++c){if(!(c in i))break;let[l,s]=i[c];s=a(s),l&&(s=unescape(s),0===c&&(s=m(s))),d.push(s)}return d.join("")}function a(l){if(l.startsWith('"')){const i=l.slice(1).split('\\"');for(let l=0;l<i.length;++l){const s=i[l].indexOf('"');-1!==s&&(i[l]=i[l].slice(0,s),i.length=l+1),i[l]=i[l].replace(/\\(.)/g,"$1")}l=i.join('"')}return l}function m(l){const i=l.indexOf("'");if(-1===i)return l;const s=l.slice(0,i),t=l.slice(i+1),c=t.replace(/^[^']*'/,"");return d(s,c)}function e(l){return!l.startsWith("=?")||/[\x00-\x19\x80-\xff]/.test(l)?l:l.replace(/=\?([\w-]*)\?([QqBb])\?((?:[^?]|\?(?!=))*)\?=/g,(function(l,i,s,t){if("q"===s||"Q"===s)return t=t.replace(/_/g," "),t=t.replace(/=([0-9a-fA-F]{2})/g,(function(l,i){return String.fromCharCode(parseInt(i,16))})),d(i,t);try{t=atob(t)}catch(c){}return d(i,t)}))}return""}},(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.PDFNetworkStream=void 0;var t=s(1),c=s(32);const d=200,Z=206;function b(l){const i=l.response;if("string"!==typeof i)return i;const s=(0,t.stringToBytes)(i);return s.buffer}class a{constructor(l,i={}){this.url=l,this.isHttp=/^https?:/i.test(l),this.httpHeaders=this.isHttp&&i.httpHeaders||Object.create(null),this.withCredentials=i.withCredentials||!1,this.getXhr=i.getXhr||function(){return new XMLHttpRequest},this.currXhrId=0,this.pendingRequests=Object.create(null)}requestRange(l,i,s){const t={begin:l,end:i};for(const c in s)t[c]=s[c];return this.request(t)}requestFull(l){return this.request(l)}request(l){const i=this.getXhr(),s=this.currXhrId++,t=this.pendingRequests[s]={xhr:i};i.open("GET",this.url),i.withCredentials=this.withCredentials;for(const c in this.httpHeaders){const l=this.httpHeaders[c];"undefined"!==typeof l&&i.setRequestHeader(c,l)}return this.isHttp&&"begin"in l&&"end"in l?(i.setRequestHeader("Range",`bytes=${l.begin}-${l.end-1}`),t.expectedStatus=Z):t.expectedStatus=d,i.responseType="arraybuffer",l.onError&&(i.onerror=function(s){l.onError(i.status)}),i.onreadystatechange=this.onStateChange.bind(this,s),i.onprogress=this.onProgress.bind(this,s),t.onHeadersReceived=l.onHeadersReceived,t.onDone=l.onDone,t.onError=l.onError,t.onProgress=l.onProgress,i.send(null),s}onProgress(l,i){const s=this.pendingRequests[l];s&&s.onProgress?.(i)}onStateChange(l,i){const s=this.pendingRequests[l];if(!s)return;const t=s.xhr;if(t.readyState>=2&&s.onHeadersReceived&&(s.onHeadersReceived(),delete s.onHeadersReceived),4!==t.readyState)return;if(!(l in this.pendingRequests))return;if(delete this.pendingRequests[l],0===t.status&&this.isHttp)return void s.onError?.(t.status);const c=t.status||d,a=c===d&&s.expectedStatus===Z;if(!a&&c!==s.expectedStatus)return void s.onError?.(t.status);const m=b(t);if(c===Z){const l=t.getResponseHeader("Content-Range"),i=/bytes (\d+)-(\d+)\/(\d+)/.exec(l);s.onDone({begin:parseInt(i[1],10),chunk:m})}else m?s.onDone({begin:0,chunk:m}):s.onError?.(t.status)}getRequestXhr(l){return this.pendingRequests[l].xhr}isPendingRequest(l){return l in this.pendingRequests}abortRequest(l){const i=this.pendingRequests[l].xhr;delete this.pendingRequests[l],i.abort()}}class m{constructor(l){this._source=l,this._manager=new a(l.url,{httpHeaders:l.httpHeaders,withCredentials:l.withCredentials}),this._rangeChunkSize=l.rangeChunkSize,this._fullRequestReader=null,this._rangeRequestReaders=[]}_onRangeRequestReaderClosed(l){const i=this._rangeRequestReaders.indexOf(l);i>=0&&this._rangeRequestReaders.splice(i,1)}getFullReader(){return(0,t.assert)(!this._fullRequestReader,"PDFNetworkStream.getFullReader can only be called once."),this._fullRequestReader=new e(this._manager,this._source),this._fullRequestReader}getRangeReader(l,i){const s=new W(this._manager,l,i);return s.onClosed=this._onRangeRequestReaderClosed.bind(this),this._rangeRequestReaders.push(s),s}cancelAllRequests(l){this._fullRequestReader?.cancel(l);for(const i of this._rangeRequestReaders.slice(0))i.cancel(l)}}i.PDFNetworkStream=m;class e{constructor(l,i){this._manager=l;const s={onHeadersReceived:this._onHeadersReceived.bind(this),onDone:this._onDone.bind(this),onError:this._onError.bind(this),onProgress:this._onProgress.bind(this)};this._url=i.url,this._fullRequestId=l.requestFull(s),this._headersReceivedCapability=(0,t.createPromiseCapability)(),this._disableRange=i.disableRange||!1,this._contentLength=i.length,this._rangeChunkSize=i.rangeChunkSize,this._rangeChunkSize||this._disableRange||(this._disableRange=!0),this._isStreamingSupported=!1,this._isRangeSupported=!1,this._cachedChunks=[],this._requests=[],this._done=!1,this._storedError=void 0,this._filename=null,this.onProgress=null}_onHeadersReceived(){const l=this._fullRequestId,i=this._manager.getRequestXhr(l),s=l=>i.getResponseHeader(l),{allowRangeRequests:t,suggestedLength:d}=(0,c.validateRangeRequestCapabilities)({getResponseHeader:s,isHttp:this._manager.isHttp,rangeChunkSize:this._rangeChunkSize,disableRange:this._disableRange});t&&(this._isRangeSupported=!0),this._contentLength=d||this._contentLength,this._filename=(0,c.extractFilenameFromHeader)(s),this._isRangeSupported&&this._manager.abortRequest(l),this._headersReceivedCapability.resolve()}_onDone(l){if(l)if(this._requests.length>0){const i=this._requests.shift();i.resolve({value:l.chunk,done:!1})}else this._cachedChunks.push(l.chunk);if(this._done=!0,!(this._cachedChunks.length>0)){for(const l of this._requests)l.resolve({value:void 0,done:!0});this._requests.length=0}}_onError(l){this._storedError=(0,c.createResponseStatusError)(l,this._url),this._headersReceivedCapability.reject(this._storedError);for(const i of this._requests)i.reject(this._storedError);this._requests.length=0,this._cachedChunks.length=0}_onProgress(l){this.onProgress?.({loaded:l.loaded,total:l.lengthComputable?l.total:this._contentLength})}get filename(){return this._filename}get isRangeSupported(){return this._isRangeSupported}get isStreamingSupported(){return this._isStreamingSupported}get contentLength(){return this._contentLength}get headersReady(){return this._headersReceivedCapability.promise}async read(){if(this._storedError)throw this._storedError;if(this._cachedChunks.length>0){const l=this._cachedChunks.shift();return{value:l,done:!1}}if(this._done)return{value:void 0,done:!0};const l=(0,t.createPromiseCapability)();return this._requests.push(l),l.promise}cancel(l){this._done=!0,this._headersReceivedCapability.reject(l);for(const i of this._requests)i.resolve({value:void 0,done:!0});this._requests.length=0,this._manager.isPendingRequest(this._fullRequestId)&&this._manager.abortRequest(this._fullRequestId),this._fullRequestReader=null}}class W{constructor(l,i,s){this._manager=l;const t={onDone:this._onDone.bind(this),onError:this._onError.bind(this),onProgress:this._onProgress.bind(this)};this._url=l.url,this._requestId=l.requestRange(i,s,t),this._requests=[],this._queuedChunk=null,this._done=!1,this._storedError=void 0,this.onProgress=null,this.onClosed=null}_close(){this.onClosed?.(this)}_onDone(l){const i=l.chunk;if(this._requests.length>0){const l=this._requests.shift();l.resolve({value:i,done:!1})}else this._queuedChunk=i;this._done=!0;for(const s of this._requests)s.resolve({value:void 0,done:!0});this._requests.length=0,this._close()}_onError(l){this._storedError=(0,c.createResponseStatusError)(l,this._url);for(const i of this._requests)i.reject(this._storedError);this._requests.length=0,this._queuedChunk=null}_onProgress(l){this.isStreamingSupported||this.onProgress?.({loaded:l.loaded})}get isStreamingSupported(){return!1}async read(){if(this._storedError)throw this._storedError;if(null!==this._queuedChunk){const l=this._queuedChunk;return this._queuedChunk=null,{value:l,done:!1}}if(this._done)return{value:void 0,done:!0};const l=(0,t.createPromiseCapability)();return this._requests.push(l),l.promise}cancel(l){this._done=!0;for(const i of this._requests)i.resolve({value:void 0,done:!0});this._requests.length=0,this._manager.isPendingRequest(this._requestId)&&this._manager.abortRequest(this._requestId),this._close()}}},(l,i,s)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.PDFFetchStream=void 0;var t=s(1),c=s(32);function d(l,i,s){return{method:"GET",headers:l,signal:s.signal,mode:"cors",credentials:i?"include":"same-origin",redirect:"follow"}}function Z(l){const i=new Headers;for(const s in l){const t=l[s];"undefined"!==typeof t&&i.append(s,t)}return i}class b{constructor(l){this.source=l,this.isHttp=/^https?:/i.test(l.url),this.httpHeaders=this.isHttp&&l.httpHeaders||{},this._fullRequestReader=null,this._rangeRequestReaders=[]}get _progressiveDataLength(){return this._fullRequestReader?._loaded??0}getFullReader(){return(0,t.assert)(!this._fullRequestReader,"PDFFetchStream.getFullReader can only be called once."),this._fullRequestReader=new a(this),this._fullRequestReader}getRangeReader(l,i){if(i<=this._progressiveDataLength)return null;const s=new m(this,l,i);return this._rangeRequestReaders.push(s),s}cancelAllRequests(l){this._fullRequestReader?.cancel(l);for(const i of this._rangeRequestReaders.slice(0))i.cancel(l)}}i.PDFFetchStream=b;class a{constructor(l){this._stream=l,this._reader=null,this._loaded=0,this._filename=null;const i=l.source;this._withCredentials=i.withCredentials||!1,this._contentLength=i.length,this._headersCapability=(0,t.createPromiseCapability)(),this._disableRange=i.disableRange||!1,this._rangeChunkSize=i.rangeChunkSize,this._rangeChunkSize||this._disableRange||(this._disableRange=!0),this._abortController=new AbortController,this._isStreamingSupported=!i.disableStream,this._isRangeSupported=!i.disableRange,this._headers=Z(this._stream.httpHeaders);const s=i.url;fetch(s,d(this._headers,this._withCredentials,this._abortController)).then((l=>{if(!(0,c.validateResponseStatus)(l.status))throw(0,c.createResponseStatusError)(l.status,s);this._reader=l.body.getReader(),this._headersCapability.resolve();const i=i=>l.headers.get(i),{allowRangeRequests:d,suggestedLength:Z}=(0,c.validateRangeRequestCapabilities)({getResponseHeader:i,isHttp:this._stream.isHttp,rangeChunkSize:this._rangeChunkSize,disableRange:this._disableRange});this._isRangeSupported=d,this._contentLength=Z||this._contentLength,this._filename=(0,c.extractFilenameFromHeader)(i),!this._isStreamingSupported&&this._isRangeSupported&&this.cancel(new t.AbortException("Streaming is disabled."))})).catch(this._headersCapability.reject),this.onProgress=null}get headersReady(){return this._headersCapability.promise}get filename(){return this._filename}get contentLength(){return this._contentLength}get isRangeSupported(){return this._isRangeSupported}get isStreamingSupported(){return this._isStreamingSupported}async read(){await this._headersCapability.promise;const{value:l,done:i}=await this._reader.read();if(i)return{value:l,done:i};this._loaded+=l.byteLength,this.onProgress?.({loaded:this._loaded,total:this._contentLength});const s=new Uint8Array(l).buffer;return{value:s,done:!1}}cancel(l){this._reader?.cancel(l),this._abortController.abort()}}class m{constructor(l,i,s){this._stream=l,this._reader=null,this._loaded=0;const b=l.source;this._withCredentials=b.withCredentials||!1,this._readCapability=(0,t.createPromiseCapability)(),this._isStreamingSupported=!b.disableStream,this._abortController=new AbortController,this._headers=Z(this._stream.httpHeaders),this._headers.append("Range",`bytes=${i}-${s-1}`);const a=b.url;fetch(a,d(this._headers,this._withCredentials,this._abortController)).then((l=>{if(!(0,c.validateResponseStatus)(l.status))throw(0,c.createResponseStatusError)(l.status,a);this._readCapability.resolve(),this._reader=l.body.getReader()})).catch(this._readCapability.reject),this.onProgress=null}get isStreamingSupported(){return this._isStreamingSupported}async read(){await this._readCapability.promise;const{value:l,done:i}=await this._reader.read();if(i)return{value:l,done:i};this._loaded+=l.byteLength,this.onProgress?.({loaded:this._loaded});const s=new Uint8Array(l).buffer;return{value:s,done:!1}}cancel(l){this._reader?.cancel(l),this._abortController.abort()}}}],__webpack_module_cache__={};function __w_pdfjs_require__(l){var i=__webpack_module_cache__[l];if(void 0!==i)return i.exports;var s=__webpack_module_cache__[l]={exports:{}};return __webpack_modules__[l](s,s.exports,__w_pdfjs_require__),s.exports}var __webpack_exports__={};return(()=>{var l=__webpack_exports__;Object.defineProperty(l,"__esModule",{value:!0}),Object.defineProperty(l,"AnnotationEditorLayer",{enumerable:!0,get:function(){return c.AnnotationEditorLayer}}),Object.defineProperty(l,"AnnotationEditorParamsType",{enumerable:!0,get:function(){return i.AnnotationEditorParamsType}}),Object.defineProperty(l,"AnnotationEditorType",{enumerable:!0,get:function(){return i.AnnotationEditorType}}),Object.defineProperty(l,"AnnotationEditorUIManager",{enumerable:!0,get:function(){return d.AnnotationEditorUIManager}}),Object.defineProperty(l,"AnnotationLayer",{enumerable:!0,get:function(){return Z.AnnotationLayer}}),Object.defineProperty(l,"AnnotationMode",{enumerable:!0,get:function(){return i.AnnotationMode}}),Object.defineProperty(l,"CMapCompressionType",{enumerable:!0,get:function(){return i.CMapCompressionType}}),Object.defineProperty(l,"GlobalWorkerOptions",{enumerable:!0,get:function(){return b.GlobalWorkerOptions}}),Object.defineProperty(l,"InvalidPDFException",{enumerable:!0,get:function(){return i.InvalidPDFException}}),Object.defineProperty(l,"MissingPDFException",{enumerable:!0,get:function(){return i.MissingPDFException}}),Object.defineProperty(l,"OPS",{enumerable:!0,get:function(){return i.OPS}}),Object.defineProperty(l,"PDFDataRangeTransport",{enumerable:!0,get:function(){return s.PDFDataRangeTransport}}),Object.defineProperty(l,"PDFDateString",{enumerable:!0,get:function(){return t.PDFDateString}}),Object.defineProperty(l,"PDFWorker",{enumerable:!0,get:function(){return s.PDFWorker}}),Object.defineProperty(l,"PasswordResponses",{enumerable:!0,get:function(){return i.PasswordResponses}}),Object.defineProperty(l,"PermissionFlag",{enumerable:!0,get:function(){return i.PermissionFlag}}),Object.defineProperty(l,"PixelsPerInch",{enumerable:!0,get:function(){return t.PixelsPerInch}}),Object.defineProperty(l,"RenderingCancelledException",{enumerable:!0,get:function(){return t.RenderingCancelledException}}),Object.defineProperty(l,"SVGGraphics",{enumerable:!0,get:function(){return e.SVGGraphics}}),Object.defineProperty(l,"UNSUPPORTED_FEATURES",{enumerable:!0,get:function(){return i.UNSUPPORTED_FEATURES}}),Object.defineProperty(l,"UnexpectedResponseException",{enumerable:!0,get:function(){return i.UnexpectedResponseException}}),Object.defineProperty(l,"Util",{enumerable:!0,get:function(){return i.Util}}),Object.defineProperty(l,"VerbosityLevel",{enumerable:!0,get:function(){return i.VerbosityLevel}}),Object.defineProperty(l,"XfaLayer",{enumerable:!0,get:function(){return W.XfaLayer}}),Object.defineProperty(l,"build",{enumerable:!0,get:function(){return s.build}}),Object.defineProperty(l,"createPromiseCapability",{enumerable:!0,get:function(){return i.createPromiseCapability}}),Object.defineProperty(l,"createValidAbsoluteUrl",{enumerable:!0,get:function(){return i.createValidAbsoluteUrl}}),Object.defineProperty(l,"getDocument",{enumerable:!0,get:function(){return s.getDocument}}),Object.defineProperty(l,"getFilenameFromUrl",{enumerable:!0,get:function(){return t.getFilenameFromUrl}}),Object.defineProperty(l,"getPdfFilenameFromUrl",{enumerable:!0,get:function(){return t.getPdfFilenameFromUrl}}),Object.defineProperty(l,"getXfaPageViewport",{enumerable:!0,get:function(){return t.getXfaPageViewport}}),Object.defineProperty(l,"isPdfFile",{enumerable:!0,get:function(){return t.isPdfFile}}),Object.defineProperty(l,"loadScript",{enumerable:!0,get:function(){return t.loadScript}}),Object.defineProperty(l,"renderTextLayer",{enumerable:!0,get:function(){return m.renderTextLayer}}),Object.defineProperty(l,"shadow",{enumerable:!0,get:function(){return i.shadow}}),Object.defineProperty(l,"version",{enumerable:!0,get:function(){return s.version}});var i=__w_pdfjs_require__(1),s=__w_pdfjs_require__(2),t=__w_pdfjs_require__(6),c=__w_pdfjs_require__(21),d=__w_pdfjs_require__(5),Z=__w_pdfjs_require__(26),b=__w_pdfjs_require__(14),a=__w_pdfjs_require__(12),m=__w_pdfjs_require__(29),e=__w_pdfjs_require__(30),W=__w_pdfjs_require__(28);if(a.isNodeJS){const{PDFNodeStream:l}=__w_pdfjs_require__(31);(0,s.setPDFNetworkStreamFactory)((i=>new l(i)))}else{const{PDFNetworkStream:l}=__w_pdfjs_require__(34),{PDFFetchStream:i}=__w_pdfjs_require__(35);(0,s.setPDFNetworkStreamFactory)((s=>(0,t.isValidFetchUrl)(s.url)?new i(s):new l(s)))}})(),__webpack_exports__})()))},793:function(){},824:function(){},533:function(){},916:function(){},475:function(){},343:function(){}},__webpack_module_cache__={};function __webpack_require__(l){var i=__webpack_module_cache__[l];if(void 0!==i)return i.exports;var s=__webpack_module_cache__[l]={exports:{}};return __webpack_modules__[l](s,s.exports,__webpack_require__),s.exports}!function(){__webpack_require__.d=function(l,i){for(var s in i)__webpack_require__.o(i,s)&&!__webpack_require__.o(l,s)&&Object.defineProperty(l,s,{enumerable:!0,get:i[s]})}}(),function(){__webpack_require__.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(l){if("object"===typeof window)return window}}()}(),function(){__webpack_require__.o=function(l,i){return Object.prototype.hasOwnProperty.call(l,i)}}(),function(){__webpack_require__.r=function(l){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(l,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(l,"__esModule",{value:!0})}}(),function(){__webpack_require__.p=""}();var __webpack_exports__={};return function(){"use strict";if(__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{VueOfficeDocx:function(){return w},VueOfficePdf:function(){return z},default:function(){return r}}),"undefined"!==typeof window){var l=window.document.currentScript,i=l&&l.src.match(/(.+\/)[^/]+\.js(\?.*)?$/);i&&(__webpack_require__.p=i[1])}var s=function(){var l=this,i=l._self._c;return i("div",{ref:"vue-office-docx",staticClass:"vue-office-docx"})},t=[];const c=__webpack_require__(531);function d(l,i={}){return"string"===typeof l?Z(l,i):Promise.resolve(l)}function Z(l,i){return fetch(l,i)}function b(l,i){if(!l)return void(i.innerHtml="");let s;return l instanceof Blob?s=l:l instanceof Response?s=l.blob():l instanceof ArrayBuffer&&(s=new Blob([l])),c.renderAsync(s,i)}var a={getData:d,render:b},m={name:"VueOfficeDocx",props:{src:[String,ArrayBuffer,Blob],requestOptions:{type:Object,default:()=>({})}},watch:{src:{handler(l){l?this.init():a.render("",this.$refs["vue-office-docx"])}}},mounted(){this.src&&this.init()},methods:{init(){a.getData(this.src,this.requestOptions).then((l=>{a.render(l,this.$refs["vue-office-docx"])}))}}},e=m;function W(l,i,s,t,c,d,Z,b){var a,m="function"===typeof l?l.options:l;if(i&&(m.render=i,m.staticRenderFns=s,m._compiled=!0),t&&(m.functional=!0),d&&(m._scopeId="data-v-"+d),Z?(a=function(l){l=l||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,l||"undefined"===typeof __VUE_SSR_CONTEXT__||(l=__VUE_SSR_CONTEXT__),c&&c.call(this,l),l&&l._registeredComponents&&l._registeredComponents.add(Z)},m._ssrRegister=a):c&&(a=b?function(){c.call(this,(m.functional?this.parent:this).$root.$options.shadowRoot)}:c),a)if(m.functional){m._injectStyles=a;var e=m.render;m.render=function(l,i){return a.call(i),e(l,i)}}else{var W=m.beforeCreate;m.beforeCreate=W?[].concat(W,a):[a]}return{exports:l,options:m}}var n=W(e,s,t,!1,null,"ec5bbd9a",null),h=n.exports;h.install=function(l){l.component(h.name,h)};var G=h,u=function(){var l=this,i=l._self._c;return i("div",{ref:"vue-office-pdf",staticClass:"vue-office-pdf"},[l.numPages?i("div",{staticClass:"vue-office-pdf-wrapper",staticStyle:{background:"gray",padding:"30px 0",position:"relative"}},l._l(l.numPages,(function(l){return i("canvas",{key:l,ref:"canvas"+l,refInFor:!0})})),0):l._e()])},N=[];const M="LyoqCiAqIEBsaWNzdGFydCBUaGUgZm9sbG93aW5nIGlzIHRoZSBlbnRpcmUgbGljZW5zZSBub3RpY2UgZm9yIHRoZQogKiBKYXZhU2NyaXB0IGNvZGUgaW4gdGhpcyBwYWdlCiAqCiAqIENvcHlyaWdodCAyMDIyIE1vemlsbGEgRm91bmRhdGlvbgogKgogKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICoKICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKgogKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKiBAbGljZW5kIFRoZSBhYm92ZSBpcyB0aGUgZW50aXJlIGxpY2Vuc2Ugbm90aWNlIGZvciB0aGUKICogSmF2YVNjcmlwdCBjb2RlIGluIHRoaXMgcGFnZQogKi8KIWZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKGUsdCl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoInBkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlciIsW10sdCk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHNbInBkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlciJdPXQoKTplWyJwZGZqcy1kaXN0L2J1aWxkL3BkZi53b3JrZXIiXT1lLnBkZmpzV29ya2VyPXQoKX0oZ2xvYmFsVGhpcywoKCk9PigoKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgZT1bLChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Xb3JrZXJUYXNrPXQuV29ya2VyTWVzc2FnZUhhbmRsZXI9dm9pZCAwO3ZhciByPWEoMiksbj1hKDMpLGk9YSg0KSxzPWEoNiksbz1hKDY5KSxjPWEoNjMpLGw9YSgxMDApLGg9YSgxMDEpLHU9YSgxMDIpO2NsYXNzIFdvcmtlclRhc2t7Y29uc3RydWN0b3IoZSl7dGhpcy5uYW1lPWU7dGhpcy50ZXJtaW5hdGVkPSExO3RoaXMuX2NhcGFiaWxpdHk9KDAsci5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKX1nZXQgZmluaXNoZWQoKXtyZXR1cm4gdGhpcy5fY2FwYWJpbGl0eS5wcm9taXNlfWZpbmlzaCgpe3RoaXMuX2NhcGFiaWxpdHkucmVzb2x2ZSgpfXRlcm1pbmF0ZSgpe3RoaXMudGVybWluYXRlZD0hMH1lbnN1cmVOb3RUZXJtaW5hdGVkKCl7aWYodGhpcy50ZXJtaW5hdGVkKXRocm93IG5ldyBFcnJvcigiV29ya2VyIHRhc2sgd2FzIHRlcm1pbmF0ZWQiKX19dC5Xb3JrZXJUYXNrPVdvcmtlclRhc2s7Y2xhc3MgV29ya2VyTWVzc2FnZUhhbmRsZXJ7c3RhdGljIHNldHVwKGUsdCl7bGV0IGE9ITE7ZS5vbigidGVzdCIsKGZ1bmN0aW9uIHdwaFNldHVwVGVzdCh0KXtpZighYSl7YT0hMDtlLnNlbmQoInRlc3QiLHQgaW5zdGFuY2VvZiBVaW50OEFycmF5KX19KSk7ZS5vbigiY29uZmlndXJlIiwoZnVuY3Rpb24gd3BoQ29uZmlndXJlKGUpeygwLHIuc2V0VmVyYm9zaXR5TGV2ZWwpKGUudmVyYm9zaXR5KX0pKTtlLm9uKCJHZXREb2NSZXF1ZXN0IiwoZnVuY3Rpb24gd3BoU2V0dXBEb2MoZSl7cmV0dXJuIFdvcmtlck1lc3NhZ2VIYW5kbGVyLmNyZWF0ZURvY3VtZW50SGFuZGxlcihlLHQpfSkpfXN0YXRpYyBjcmVhdGVEb2N1bWVudEhhbmRsZXIoZSx0KXtsZXQgYSxkPSExLGY9bnVsbDtjb25zdCBnPVtdLHA9KDAsci5nZXRWZXJib3NpdHlMZXZlbCkoKSx7ZG9jSWQ6bSxhcGlWZXJzaW9uOmJ9PWUseT0iMy4wLjI3OSI7aWYoYiE9PXkpdGhyb3cgbmV3IEVycm9yKGBUaGUgQVBJIHZlcnNpb24gIiR7Yn0iIGRvZXMgbm90IG1hdGNoIHRoZSBXb3JrZXIgdmVyc2lvbiAiMy4wLjI3OSIuYCk7Y29uc3Qgdz1bXTtmb3IoY29uc3QgZSBpbltdKXcucHVzaChlKTtpZih3Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBgQXJyYXkucHJvdG90eXBlYCBjb250YWlucyB1bmV4cGVjdGVkIGVudW1lcmFibGUgcHJvcGVydGllczogIit3LmpvaW4oIiwgIikrIjsgdGh1cyBicmVha2luZyBlLmcuIGBmb3IuLi5pbmAgaXRlcmF0aW9uIG9mIGBBcnJheWBzLiIpO2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVhZGFibGVTdHJlYW0pe2NvbnN0IGU9IlRoZSBicm93c2VyL2Vudmlyb25tZW50IGxhY2tzIG5hdGl2ZSBzdXBwb3J0IGZvciBjcml0aWNhbCBmdW5jdGlvbmFsaXR5IHVzZWQgYnkgdGhlIFBERi5qcyBsaWJyYXJ5IChlLmcuIGBSZWFkYWJsZVN0cmVhbWApOyAiO2lmKGwuaXNOb2RlSlMpdGhyb3cgbmV3IEVycm9yKGUrInBsZWFzZSB1c2UgYSBgbGVnYWN5YC1idWlsZCBpbnN0ZWFkLiIpO3Rocm93IG5ldyBFcnJvcihlKyJwbGVhc2UgdXBkYXRlIHRvIGEgc3VwcG9ydGVkIGJyb3dzZXIuIil9Y29uc3QgUz1tKyJfd29ya2VyIjtsZXQgeD1uZXcgaC5NZXNzYWdlSGFuZGxlcihTLG0sdCk7ZnVuY3Rpb24gZW5zdXJlTm90VGVybWluYXRlZCgpe2lmKGQpdGhyb3cgbmV3IEVycm9yKCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQiKX1mdW5jdGlvbiBzdGFydFdvcmtlclRhc2soZSl7Zy5wdXNoKGUpfWZ1bmN0aW9uIGZpbmlzaFdvcmtlclRhc2soZSl7ZS5maW5pc2goKTtjb25zdCB0PWcuaW5kZXhPZihlKTtnLnNwbGljZSh0LDEpfWFzeW5jIGZ1bmN0aW9uIGxvYWREb2N1bWVudChlKXthd2FpdCBhLmVuc3VyZURvYygiY2hlY2tIZWFkZXIiKTthd2FpdCBhLmVuc3VyZURvYygicGFyc2VTdGFydFhSZWYiKTthd2FpdCBhLmVuc3VyZURvYygicGFyc2UiLFtlXSk7YXdhaXQgYS5lbnN1cmVEb2MoImNoZWNrRmlyc3RQYWdlIixbZV0pO2F3YWl0IGEuZW5zdXJlRG9jKCJjaGVja0xhc3RQYWdlIixbZV0pO2NvbnN0IHQ9YXdhaXQgYS5lbnN1cmVEb2MoImlzUHVyZVhmYSIpO2lmKHQpe2NvbnN0IGU9bmV3IFdvcmtlclRhc2soImxvYWRYZmFGb250cyIpO3N0YXJ0V29ya2VyVGFzayhlKTthd2FpdCBQcm9taXNlLmFsbChbYS5sb2FkWGZhRm9udHMoeCxlKS5jYXRjaCgoZT0+e30pKS50aGVuKCgoKT0+ZmluaXNoV29ya2VyVGFzayhlKSkpLGEubG9hZFhmYUltYWdlcygpXSl9Y29uc3RbcixuXT1hd2FpdCBQcm9taXNlLmFsbChbYS5lbnN1cmVEb2MoIm51bVBhZ2VzIiksYS5lbnN1cmVEb2MoImZpbmdlcnByaW50cyIpXSk7cmV0dXJue251bVBhZ2VzOnIsZmluZ2VycHJpbnRzOm4saHRtbEZvclhmYTp0P2F3YWl0IGEuZW5zdXJlRG9jKCJodG1sRm9yWGZhIik6bnVsbH19ZnVuY3Rpb24gZ2V0UGRmTWFuYWdlcih7ZGF0YTplLHBhc3N3b3JkOnQsZGlzYWJsZUF1dG9GZXRjaDphLHJhbmdlQ2h1bmtTaXplOm4sbGVuZ3RoOmksZG9jQmFzZVVybDpvLGVuYWJsZVhmYTpjLGV2YWx1YXRvck9wdGlvbnM6bH0pe2NvbnN0IGg9KDAsci5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtsZXQgZDtpZihlKXt0cnl7ZD1uZXcgcy5Mb2NhbFBkZk1hbmFnZXIobSxlLHQseCxsLGMsbyk7aC5yZXNvbHZlKGQpfWNhdGNoKGUpe2gucmVqZWN0KGUpfXJldHVybiBoLnByb21pc2V9bGV0IGcscD1bXTt0cnl7Zz1uZXcgdS5QREZXb3JrZXJTdHJlYW0oeCl9Y2F0Y2goZSl7aC5yZWplY3QoZSk7cmV0dXJuIGgucHJvbWlzZX1jb25zdCBiPWcuZ2V0RnVsbFJlYWRlcigpO2IuaGVhZGVyc1JlYWR5LnRoZW4oKGZ1bmN0aW9uKCl7aWYoYi5pc1JhbmdlU3VwcG9ydGVkKXthPWF8fGIuaXNTdHJlYW1pbmdTdXBwb3J0ZWQ7ZD1uZXcgcy5OZXR3b3JrUGRmTWFuYWdlcihtLGcse21zZ0hhbmRsZXI6eCxwYXNzd29yZDp0LGxlbmd0aDpiLmNvbnRlbnRMZW5ndGgsZGlzYWJsZUF1dG9GZXRjaDphLHJhbmdlQ2h1bmtTaXplOm59LGwsYyxvKTtmb3IoY29uc3QgZSBvZiBwKWQuc2VuZFByb2dyZXNzaXZlRGF0YShlKTtwPVtdO2gucmVzb2x2ZShkKTtmPW51bGx9fSkpLmNhdGNoKChmdW5jdGlvbihlKXtoLnJlamVjdChlKTtmPW51bGx9KSk7bGV0IHk9MDtuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSxhKXtjb25zdCByZWFkQ2h1bms9ZnVuY3Rpb24oe3ZhbHVlOmUsZG9uZTpufSl7dHJ5e2Vuc3VyZU5vdFRlcm1pbmF0ZWQoKTtpZihuKXtkfHxmdW5jdGlvbigpe2NvbnN0IGU9KDAsci5hcnJheXNUb0J5dGVzKShwKTtpJiZlLmxlbmd0aCE9PWkmJigwLHIud2FybikoInJlcG9ydGVkIEhUVFAgbGVuZ3RoIGlzIGRpZmZlcmVudCBmcm9tIGFjdHVhbCIpO3RyeXtkPW5ldyBzLkxvY2FsUGRmTWFuYWdlcihtLGUsdCx4LGwsYyxvKTtoLnJlc29sdmUoZCl9Y2F0Y2goZSl7aC5yZWplY3QoZSl9cD1bXX0oKTtmPW51bGw7cmV0dXJufXkrPSgwLHIuYXJyYXlCeXRlTGVuZ3RoKShlKTtiLmlzU3RyZWFtaW5nU3VwcG9ydGVkfHx4LnNlbmQoIkRvY1Byb2dyZXNzIix7bG9hZGVkOnksdG90YWw6TWF0aC5tYXgoeSxiLmNvbnRlbnRMZW5ndGh8fDApfSk7ZD9kLnNlbmRQcm9ncmVzc2l2ZURhdGEoZSk6cC5wdXNoKGUpO2IucmVhZCgpLnRoZW4ocmVhZENodW5rLGEpfWNhdGNoKGUpe2EoZSl9fTtiLnJlYWQoKS50aGVuKHJlYWRDaHVuayxhKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7aC5yZWplY3QoZSk7Zj1udWxsfSkpO2Y9ZnVuY3Rpb24oZSl7Zy5jYW5jZWxBbGxSZXF1ZXN0cyhlKX07cmV0dXJuIGgucHJvbWlzZX14Lm9uKCJHZXRQYWdlIiwoZnVuY3Rpb24gd3BoU2V0dXBHZXRQYWdlKGUpe3JldHVybiBhLmdldFBhZ2UoZS5wYWdlSW5kZXgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChbYS5lbnN1cmUoZSwicm90YXRlIiksYS5lbnN1cmUoZSwicmVmIiksYS5lbnN1cmUoZSwidXNlclVuaXQiKSxhLmVuc3VyZShlLCJ2aWV3IildKS50aGVuKChmdW5jdGlvbihbZSx0LGEscl0pe3JldHVybntyb3RhdGU6ZSxyZWY6dCx1c2VyVW5pdDphLHZpZXc6cn19KSl9KSl9KSk7eC5vbigiR2V0UGFnZUluZGV4IiwoZnVuY3Rpb24gd3BoU2V0dXBHZXRQYWdlSW5kZXgoZSl7Y29uc3QgdD1uLlJlZi5nZXQoZS5udW0sZS5nZW4pO3JldHVybiBhLmVuc3VyZUNhdGFsb2coImdldFBhZ2VJbmRleCIsW3RdKX0pKTt4Lm9uKCJHZXREZXN0aW5hdGlvbnMiLChmdW5jdGlvbiB3cGhTZXR1cEdldERlc3RpbmF0aW9ucyhlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJkZXN0aW5hdGlvbnMiKX0pKTt4Lm9uKCJHZXREZXN0aW5hdGlvbiIsKGZ1bmN0aW9uIHdwaFNldHVwR2V0RGVzdGluYXRpb24oZSl7cmV0dXJuIGEuZW5zdXJlQ2F0YWxvZygiZ2V0RGVzdGluYXRpb24iLFtlLmlkXSl9KSk7eC5vbigiR2V0UGFnZUxhYmVscyIsKGZ1bmN0aW9uIHdwaFNldHVwR2V0UGFnZUxhYmVscyhlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJwYWdlTGFiZWxzIil9KSk7eC5vbigiR2V0UGFnZUxheW91dCIsKGZ1bmN0aW9uIHdwaFNldHVwR2V0UGFnZUxheW91dChlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJwYWdlTGF5b3V0Iil9KSk7eC5vbigiR2V0UGFnZU1vZGUiLChmdW5jdGlvbiB3cGhTZXR1cEdldFBhZ2VNb2RlKGUpe3JldHVybiBhLmVuc3VyZUNhdGFsb2coInBhZ2VNb2RlIil9KSk7eC5vbigiR2V0Vmlld2VyUHJlZmVyZW5jZXMiLChmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJ2aWV3ZXJQcmVmZXJlbmNlcyIpfSkpO3gub24oIkdldE9wZW5BY3Rpb24iLChmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJvcGVuQWN0aW9uIil9KSk7eC5vbigiR2V0QXR0YWNobWVudHMiLChmdW5jdGlvbiB3cGhTZXR1cEdldEF0dGFjaG1lbnRzKGUpe3JldHVybiBhLmVuc3VyZUNhdGFsb2coImF0dGFjaG1lbnRzIil9KSk7eC5vbigiR2V0SmF2YVNjcmlwdCIsKGZ1bmN0aW9uIHdwaFNldHVwR2V0SmF2YVNjcmlwdChlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJqYXZhU2NyaXB0Iil9KSk7eC5vbigiR2V0RG9jSlNBY3Rpb25zIiwoZnVuY3Rpb24gd3BoU2V0dXBHZXREb2NKU0FjdGlvbnMoZSl7cmV0dXJuIGEuZW5zdXJlQ2F0YWxvZygianNBY3Rpb25zIil9KSk7eC5vbigiR2V0UGFnZUpTQWN0aW9ucyIsKGZ1bmN0aW9uKHtwYWdlSW5kZXg6ZX0pe3JldHVybiBhLmdldFBhZ2UoZSkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGEuZW5zdXJlKGUsImpzQWN0aW9ucyIpfSkpfSkpO3gub24oIkdldE91dGxpbmUiLChmdW5jdGlvbiB3cGhTZXR1cEdldE91dGxpbmUoZSl7cmV0dXJuIGEuZW5zdXJlQ2F0YWxvZygiZG9jdW1lbnRPdXRsaW5lIil9KSk7eC5vbigiR2V0T3B0aW9uYWxDb250ZW50Q29uZmlnIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGEuZW5zdXJlQ2F0YWxvZygib3B0aW9uYWxDb250ZW50Q29uZmlnIil9KSk7eC5vbigiR2V0UGVybWlzc2lvbnMiLChmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJwZXJtaXNzaW9ucyIpfSkpO3gub24oIkdldE1ldGFkYXRhIiwoZnVuY3Rpb24gd3BoU2V0dXBHZXRNZXRhZGF0YShlKXtyZXR1cm4gUHJvbWlzZS5hbGwoW2EuZW5zdXJlRG9jKCJkb2N1bWVudEluZm8iKSxhLmVuc3VyZUNhdGFsb2coIm1ldGFkYXRhIildKX0pKTt4Lm9uKCJHZXRNYXJrSW5mbyIsKGZ1bmN0aW9uIHdwaFNldHVwR2V0TWFya0luZm8oZSl7cmV0dXJuIGEuZW5zdXJlQ2F0YWxvZygibWFya0luZm8iKX0pKTt4Lm9uKCJHZXREYXRhIiwoZnVuY3Rpb24gd3BoU2V0dXBHZXREYXRhKGUpe3JldHVybiBhLnJlcXVlc3RMb2FkZWRTdHJlYW0oKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5ieXRlc30pKX0pKTt4Lm9uKCJHZXRBbm5vdGF0aW9ucyIsKGZ1bmN0aW9uKHtwYWdlSW5kZXg6ZSxpbnRlbnQ6dH0pe3JldHVybiBhLmdldFBhZ2UoZSkudGhlbigoZnVuY3Rpb24oYSl7Y29uc3Qgcj1uZXcgV29ya2VyVGFzayhgR2V0QW5ub3RhdGlvbnM6IHBhZ2UgJHtlfWApO3N0YXJ0V29ya2VyVGFzayhyKTtyZXR1cm4gYS5nZXRBbm5vdGF0aW9uc0RhdGEoeCxyLHQpLnRoZW4oKGU9PntmaW5pc2hXb3JrZXJUYXNrKHIpO3JldHVybiBlfSksKGU9PntmaW5pc2hXb3JrZXJUYXNrKHIpfSkpfSkpfSkpO3gub24oIkdldEZpZWxkT2JqZWN0cyIsKGZ1bmN0aW9uKGUpe3JldHVybiBhLmVuc3VyZURvYygiZmllbGRPYmplY3RzIil9KSk7eC5vbigiSGFzSlNBY3Rpb25zIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGEuZW5zdXJlRG9jKCJoYXNKU0FjdGlvbnMiKX0pKTt4Lm9uKCJHZXRDYWxjdWxhdGlvbk9yZGVySWRzIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGEuZW5zdXJlRG9jKCJjYWxjdWxhdGlvbk9yZGVySWRzIil9KSk7eC5vbigiU2F2ZURvY3VtZW50IiwoZnVuY3Rpb24oe2lzUHVyZVhmYTplLG51bVBhZ2VzOnQsYW5ub3RhdGlvblN0b3JhZ2U6cyxmaWxlbmFtZTpvfSl7Y29uc3QgbD1bYS5yZXF1ZXN0TG9hZGVkU3RyZWFtKCksYS5lbnN1cmVDYXRhbG9nKCJhY3JvRm9ybSIpLGEuZW5zdXJlQ2F0YWxvZygiYWNyb0Zvcm1SZWYiKSxhLmVuc3VyZURvYygieHJlZiIpLGEuZW5zdXJlRG9jKCJzdGFydFhSZWYiKV0saD1lP251bGw6KDAsaS5nZXROZXdBbm5vdGF0aW9uc01hcCkocyk7aWYoaClmb3IoY29uc3RbZSx0XW9mIGgpbC5wdXNoKGEuZ2V0UGFnZShlKS50aGVuKChhPT57Y29uc3Qgcj1uZXcgV29ya2VyVGFzayhgU2F2ZSAoZWRpdG9yKTogcGFnZSAke2V9YCk7cmV0dXJuIGEuc2F2ZU5ld0Fubm90YXRpb25zKHgscix0KS5maW5hbGx5KChmdW5jdGlvbigpe2ZpbmlzaFdvcmtlclRhc2socil9KSl9KSkpO2lmKGUpbC5wdXNoKGEuc2VyaWFsaXplWGZhRGF0YShzKSk7ZWxzZSBmb3IobGV0IGU9MDtlPHQ7ZSsrKWwucHVzaChhLmdldFBhZ2UoZSkudGhlbigoZnVuY3Rpb24odCl7Y29uc3QgYT1uZXcgV29ya2VyVGFzayhgU2F2ZTogcGFnZSAke2V9YCk7cmV0dXJuIHQuc2F2ZSh4LGEscykuZmluYWxseSgoZnVuY3Rpb24oKXtmaW5pc2hXb3JrZXJUYXNrKGEpfSkpfSkpKTtyZXR1cm4gUHJvbWlzZS5hbGwobCkudGhlbigoZnVuY3Rpb24oW3QsYSxpLHMsbCwuLi5oXSl7bGV0IHU9W10sZD1udWxsO2lmKGUpe2Q9aFswXTtpZighZClyZXR1cm4gdC5ieXRlc31lbHNle3U9aC5mbGF0KDIpO2lmKDA9PT11Lmxlbmd0aClyZXR1cm4gdC5ieXRlc31jb25zdCBmPWEgaW5zdGFuY2VvZiBuLkRpY3QmJmEuZ2V0KCJYRkEiKXx8bnVsbDtsZXQgZz1udWxsLHA9ITE7aWYoQXJyYXkuaXNBcnJheShmKSl7Zm9yKGxldCBlPTAsdD1mLmxlbmd0aDtlPHQ7ZSs9MilpZigiZGF0YXNldHMiPT09ZltlXSl7Zz1mW2UrMV07aT1udWxsO3A9ITB9bnVsbD09PWcmJihnPXMuZ2V0TmV3UmVmKCkpfWVsc2UgaWYoZil7aT1udWxsOygwLHIud2FybikoIlVuc3VwcG9ydGVkIFhGQSB0eXBlLiIpfWxldCBtPU9iamVjdC5jcmVhdGUobnVsbCk7aWYocy50cmFpbGVyKXtjb25zdCBlPU9iamVjdC5jcmVhdGUobnVsbCksdD1zLnRyYWlsZXIuZ2V0KCJJbmZvIil8fG51bGw7dCBpbnN0YW5jZW9mIG4uRGljdCYmdC5mb3JFYWNoKCgodCxhKT0+eyJzdHJpbmciPT10eXBlb2YgYSYmKGVbdF09KDAsci5zdHJpbmdUb1BERlN0cmluZykoYSkpfSkpO209e3Jvb3RSZWY6cy50cmFpbGVyLmdldFJhdygiUm9vdCIpfHxudWxsLGVuY3J5cHRSZWY6cy50cmFpbGVyLmdldFJhdygiRW5jcnlwdCIpfHxudWxsLG5ld1JlZjpzLmdldE5ld1JlZigpLGluZm9SZWY6cy50cmFpbGVyLmdldFJhdygiSW5mbyIpfHxudWxsLGluZm86ZSxmaWxlSWRzOnMudHJhaWxlci5nZXQoIklEIil8fG51bGwsc3RhcnRYUmVmOmwsZmlsZW5hbWU6b319cy5yZXNldE5ld1JlZigpO3JldHVybigwLGMuaW5jcmVtZW50YWxVcGRhdGUpKHtvcmlnaW5hbERhdGE6dC5ieXRlcyx4cmVmSW5mbzptLG5ld1JlZnM6dSx4cmVmOnMsaGFzWGZhOiEhZix4ZmFEYXRhc2V0c1JlZjpnLGhhc1hmYURhdGFzZXRzRW50cnk6cCxhY3JvRm9ybVJlZjppLGFjcm9Gb3JtOmEseGZhRGF0YTpkfSl9KSl9KSk7eC5vbigiR2V0T3BlcmF0b3JMaXN0IiwoZnVuY3Rpb24gd3BoU2V0dXBSZW5kZXJQYWdlKGUsdCl7Y29uc3Qgbj1lLnBhZ2VJbmRleDthLmdldFBhZ2UobikudGhlbigoZnVuY3Rpb24oYSl7Y29uc3QgaT1uZXcgV29ya2VyVGFzayhgR2V0T3BlcmF0b3JMaXN0OiBwYWdlICR7bn1gKTtzdGFydFdvcmtlclRhc2soaSk7Y29uc3Qgcz1wPj1yLlZlcmJvc2l0eUxldmVsLklORk9TP0RhdGUubm93KCk6MDthLmdldE9wZXJhdG9yTGlzdCh7aGFuZGxlcjp4LHNpbms6dCx0YXNrOmksaW50ZW50OmUuaW50ZW50LGNhY2hlS2V5OmUuY2FjaGVLZXksYW5ub3RhdGlvblN0b3JhZ2U6ZS5hbm5vdGF0aW9uU3RvcmFnZX0pLnRoZW4oKGZ1bmN0aW9uKGUpe2ZpbmlzaFdvcmtlclRhc2soaSk7cyYmKDAsci5pbmZvKShgcGFnZT0ke24rMX0gLSBnZXRPcGVyYXRvckxpc3Q6IHRpbWU9JHtEYXRlLm5vdygpLXN9bXMsIGxlbj0ke2UubGVuZ3RofWApO3QuY2xvc2UoKX0pLChmdW5jdGlvbihlKXtmaW5pc2hXb3JrZXJUYXNrKGkpO2kudGVybWluYXRlZHx8dC5lcnJvcihlKX0pKX0pKX0pKTt4Lm9uKCJHZXRUZXh0Q29udGVudCIsKGZ1bmN0aW9uIHdwaEV4dHJhY3RUZXh0KGUsdCl7Y29uc3Qgbj1lLnBhZ2VJbmRleDthLmdldFBhZ2UobikudGhlbigoZnVuY3Rpb24oYSl7Y29uc3QgaT1uZXcgV29ya2VyVGFzaygiR2V0VGV4dENvbnRlbnQ6IHBhZ2UgIituKTtzdGFydFdvcmtlclRhc2soaSk7Y29uc3Qgcz1wPj1yLlZlcmJvc2l0eUxldmVsLklORk9TP0RhdGUubm93KCk6MDthLmV4dHJhY3RUZXh0Q29udGVudCh7aGFuZGxlcjp4LHRhc2s6aSxzaW5rOnQsaW5jbHVkZU1hcmtlZENvbnRlbnQ6ZS5pbmNsdWRlTWFya2VkQ29udGVudCxjb21iaW5lVGV4dEl0ZW1zOmUuY29tYmluZVRleHRJdGVtc30pLnRoZW4oKGZ1bmN0aW9uKCl7ZmluaXNoV29ya2VyVGFzayhpKTtzJiYoMCxyLmluZm8pKGBwYWdlPSR7bisxfSAtIGdldFRleHRDb250ZW50OiB0aW1lPWArKERhdGUubm93KCktcykrIm1zIik7dC5jbG9zZSgpfSksKGZ1bmN0aW9uKGUpe2ZpbmlzaFdvcmtlclRhc2soaSk7aS50ZXJtaW5hdGVkfHx0LmVycm9yKGUpfSkpfSkpfSkpO3gub24oIkdldFN0cnVjdFRyZWUiLChmdW5jdGlvbiB3cGhHZXRTdHJ1Y3RUcmVlKGUpe3JldHVybiBhLmdldFBhZ2UoZS5wYWdlSW5kZXgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBhLmVuc3VyZShlLCJnZXRTdHJ1Y3RUcmVlIil9KSl9KSk7eC5vbigiRm9udEZhbGxiYWNrIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGEuZm9udEZhbGxiYWNrKGUuaWQseCl9KSk7eC5vbigiQ2xlYW51cCIsKGZ1bmN0aW9uIHdwaENsZWFudXAoZSl7cmV0dXJuIGEuY2xlYW51cCghMCl9KSk7eC5vbigiVGVybWluYXRlIiwoZnVuY3Rpb24gd3BoVGVybWluYXRlKGUpe2Q9ITA7Y29uc3QgdD1bXTtpZihhKXthLnRlcm1pbmF0ZShuZXcgci5BYm9ydEV4Y2VwdGlvbigiV29ya2VyIHdhcyB0ZXJtaW5hdGVkLiIpKTtjb25zdCBlPWEuY2xlYW51cCgpO3QucHVzaChlKTthPW51bGx9ZWxzZSgwLG8uY2xlYXJHbG9iYWxDYWNoZXMpKCk7ZiYmZihuZXcgci5BYm9ydEV4Y2VwdGlvbigiV29ya2VyIHdhcyB0ZXJtaW5hdGVkLiIpKTtmb3IoY29uc3QgZSBvZiBnKXt0LnB1c2goZS5maW5pc2hlZCk7ZS50ZXJtaW5hdGUoKX1yZXR1cm4gUHJvbWlzZS5hbGwodCkudGhlbigoZnVuY3Rpb24oKXt4LmRlc3Ryb3koKTt4PW51bGx9KSl9KSk7eC5vbigiUmVhZHkiLChmdW5jdGlvbiB3cGhSZWFkeSh0KXshZnVuY3Rpb24gc2V0dXBEb2MoZSl7ZnVuY3Rpb24gb25TdWNjZXNzKGUpe2Vuc3VyZU5vdFRlcm1pbmF0ZWQoKTt4LnNlbmQoIkdldERvYyIse3BkZkluZm86ZX0pfWZ1bmN0aW9uIG9uRmFpbHVyZShlKXtlbnN1cmVOb3RUZXJtaW5hdGVkKCk7aWYoZSBpbnN0YW5jZW9mIHIuUGFzc3dvcmRFeGNlcHRpb24pe2NvbnN0IHQ9bmV3IFdvcmtlclRhc2soYFBhc3N3b3JkRXhjZXB0aW9uOiByZXNwb25zZSAke2UuY29kZX1gKTtzdGFydFdvcmtlclRhc2sodCk7eC5zZW5kV2l0aFByb21pc2UoIlBhc3N3b3JkUmVxdWVzdCIsZSkudGhlbigoZnVuY3Rpb24oe3Bhc3N3b3JkOmV9KXtmaW5pc2hXb3JrZXJUYXNrKHQpO2EudXBkYXRlUGFzc3dvcmQoZSk7cGRmTWFuYWdlclJlYWR5KCl9KSkuY2F0Y2goKGZ1bmN0aW9uKCl7ZmluaXNoV29ya2VyVGFzayh0KTt4LnNlbmQoIkRvY0V4Y2VwdGlvbiIsZSl9KSl9ZWxzZSBlIGluc3RhbmNlb2Ygci5JbnZhbGlkUERGRXhjZXB0aW9ufHxlIGluc3RhbmNlb2Ygci5NaXNzaW5nUERGRXhjZXB0aW9ufHxlIGluc3RhbmNlb2Ygci5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb258fGUgaW5zdGFuY2VvZiByLlVua25vd25FcnJvckV4Y2VwdGlvbj94LnNlbmQoIkRvY0V4Y2VwdGlvbiIsZSk6eC5zZW5kKCJEb2NFeGNlcHRpb24iLG5ldyByLlVua25vd25FcnJvckV4Y2VwdGlvbihlLm1lc3NhZ2UsZS50b1N0cmluZygpKSl9ZnVuY3Rpb24gcGRmTWFuYWdlclJlYWR5KCl7ZW5zdXJlTm90VGVybWluYXRlZCgpO2xvYWREb2N1bWVudCghMSkudGhlbihvblN1Y2Nlc3MsKGZ1bmN0aW9uKGUpe2Vuc3VyZU5vdFRlcm1pbmF0ZWQoKTtlIGluc3RhbmNlb2YgaS5YUmVmUGFyc2VFeGNlcHRpb24/YS5yZXF1ZXN0TG9hZGVkU3RyZWFtKCkudGhlbigoZnVuY3Rpb24oKXtlbnN1cmVOb3RUZXJtaW5hdGVkKCk7bG9hZERvY3VtZW50KCEwKS50aGVuKG9uU3VjY2VzcyxvbkZhaWx1cmUpfSkpOm9uRmFpbHVyZShlKX0pKX1lbnN1cmVOb3RUZXJtaW5hdGVkKCk7Z2V0UGRmTWFuYWdlcihlKS50aGVuKChmdW5jdGlvbihlKXtpZihkKXtlLnRlcm1pbmF0ZShuZXcgci5BYm9ydEV4Y2VwdGlvbigiV29ya2VyIHdhcyB0ZXJtaW5hdGVkLiIpKTt0aHJvdyBuZXcgRXJyb3IoIldvcmtlciB3YXMgdGVybWluYXRlZCIpfWE9ZTthLnJlcXVlc3RMb2FkZWRTdHJlYW0oITApLnRoZW4oKGU9Pnt4LnNlbmQoIkRhdGFMb2FkZWQiLHtsZW5ndGg6ZS5ieXRlcy5ieXRlTGVuZ3RofSl9KSl9KSkudGhlbihwZGZNYW5hZ2VyUmVhZHksb25GYWlsdXJlKX0oZSk7ZT1udWxsfSkpO3JldHVybiBTfXN0YXRpYyBpbml0aWFsaXplRnJvbVBvcnQoZSl7Y29uc3QgdD1uZXcgaC5NZXNzYWdlSGFuZGxlcigid29ya2VyIiwibWFpbiIsZSk7V29ya2VyTWVzc2FnZUhhbmRsZXIuc2V0dXAodCxlKTt0LnNlbmQoInJlYWR5IixudWxsKX19dC5Xb3JrZXJNZXNzYWdlSGFuZGxlcj1Xb3JrZXJNZXNzYWdlSGFuZGxlcjsidW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdyYmIWwuaXNOb2RlSlMmJiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmZnVuY3Rpb24gaXNNZXNzYWdlUG9ydChlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZS5wb3N0TWVzc2FnZSYmIm9ubWVzc2FnZSJpbiBlfShzZWxmKSYmV29ya2VyTWVzc2FnZUhhbmRsZXIuaW5pdGlhbGl6ZUZyb21Qb3J0KHNlbGYpfSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlZlcmJvc2l0eUxldmVsPXQuVXRpbD10LlVua25vd25FcnJvckV4Y2VwdGlvbj10LlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbj10LlVOU1VQUE9SVEVEX0ZFQVRVUkVTPXQuVGV4dFJlbmRlcmluZ01vZGU9dC5TdHJlYW1UeXBlPXQuUmVuZGVyaW5nSW50ZW50RmxhZz10LlBlcm1pc3Npb25GbGFnPXQuUGFzc3dvcmRSZXNwb25zZXM9dC5QYXNzd29yZEV4Y2VwdGlvbj10LlBhZ2VBY3Rpb25FdmVudFR5cGU9dC5PUFM9dC5NaXNzaW5nUERGRXhjZXB0aW9uPXQuTElORV9GQUNUT1I9dC5MSU5FX0RFU0NFTlRfRkFDVE9SPXQuSW52YWxpZFBERkV4Y2VwdGlvbj10LkltYWdlS2luZD10LklERU5USVRZX01BVFJJWD10LkZvcm1hdEVycm9yPXQuRm9udFR5cGU9dC5GZWF0dXJlVGVzdD10LkZPTlRfSURFTlRJVFlfTUFUUklYPXQuRG9jdW1lbnRBY3Rpb25FdmVudFR5cGU9dC5DTWFwQ29tcHJlc3Npb25UeXBlPXQuQmFzZUV4Y2VwdGlvbj10LkFubm90YXRpb25UeXBlPXQuQW5ub3RhdGlvblN0YXRlTW9kZWxUeXBlPXQuQW5ub3RhdGlvblJldmlld1N0YXRlPXQuQW5ub3RhdGlvblJlcGx5VHlwZT10LkFubm90YXRpb25Nb2RlPXQuQW5ub3RhdGlvbk1hcmtlZFN0YXRlPXQuQW5ub3RhdGlvbkZsYWc9dC5Bbm5vdGF0aW9uRmllbGRGbGFnPXQuQW5ub3RhdGlvbkVkaXRvclR5cGU9dC5Bbm5vdGF0aW9uRWRpdG9yUHJlZml4PXQuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGU9dC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlPXQuQW5ub3RhdGlvbkFjdGlvbkV2ZW50VHlwZT10LkFib3J0RXhjZXB0aW9uPXZvaWQgMDt0LmFycmF5Qnl0ZUxlbmd0aD1hcnJheUJ5dGVMZW5ndGg7dC5hcnJheXNUb0J5dGVzPWZ1bmN0aW9uIGFycmF5c1RvQnl0ZXMoZSl7Y29uc3QgdD1lLmxlbmd0aDtpZigxPT09dCYmZVswXWluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gZVswXTtsZXQgYT0wO2ZvcihsZXQgcj0wO3I8dDtyKyspYSs9YXJyYXlCeXRlTGVuZ3RoKGVbcl0pO2xldCByPTA7Y29uc3Qgbj1uZXcgVWludDhBcnJheShhKTtmb3IobGV0IGE9MDthPHQ7YSsrKXtsZXQgdD1lW2FdO3QgaW5zdGFuY2VvZiBVaW50OEFycmF5fHwodD0ic3RyaW5nIj09dHlwZW9mIHQ/c3RyaW5nVG9CeXRlcyh0KTpuZXcgVWludDhBcnJheSh0KSk7Y29uc3QgaT10LmJ5dGVMZW5ndGg7bi5zZXQodCxyKTtyKz1pfXJldHVybiBufTt0LmFzc2VydD1mdW5jdGlvbiBhc3NlcnQoZSx0KXtlfHx1bnJlYWNoYWJsZSh0KX07dC5ieXRlc1RvU3RyaW5nPWZ1bmN0aW9uIGJ5dGVzVG9TdHJpbmcoZSl7Im9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmdm9pZCAwIT09ZS5sZW5ndGh8fHVucmVhY2hhYmxlKCJJbnZhbGlkIGFyZ3VtZW50IGZvciBieXRlc1RvU3RyaW5nIik7Y29uc3QgdD1lLmxlbmd0aCxhPTgxOTI7aWYodDxhKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZSk7Y29uc3Qgcj1bXTtmb3IobGV0IG49MDtuPHQ7bis9YSl7Y29uc3QgaT1NYXRoLm1pbihuK2EsdCkscz1lLnN1YmFycmF5KG4saSk7ci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxzKSl9cmV0dXJuIHIuam9pbigiIil9O3QuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHk9ZnVuY3Rpb24gY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkoKXtjb25zdCBlPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IHQ9ITE7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInNldHRsZWQiLHtnZXQ6KCk9PnR9KTtlLnByb21pc2U9bmV3IFByb21pc2UoKGZ1bmN0aW9uKGEscil7ZS5yZXNvbHZlPWZ1bmN0aW9uKGUpe3Q9ITA7YShlKX07ZS5yZWplY3Q9ZnVuY3Rpb24oZSl7dD0hMDtyKGUpfX0pKTtyZXR1cm4gZX07dC5jcmVhdGVWYWxpZEFic29sdXRlVXJsPWZ1bmN0aW9uIGNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwoZSx0PW51bGwsYT1udWxsKXtpZighZSlyZXR1cm4gbnVsbDt0cnl7aWYoYSYmInN0cmluZyI9PXR5cGVvZiBlKXtpZihhLmFkZERlZmF1bHRQcm90b2NvbCYmZS5zdGFydHNXaXRoKCJ3d3cuIikpe2NvbnN0IHQ9ZS5tYXRjaCgvXC4vZyk7dCYmdC5sZW5ndGg+PTImJihlPWBodHRwOi8vJHtlfWApfWlmKGEudHJ5Q29udmVydEVuY29kaW5nKXRyeXtlPXN0cmluZ1RvVVRGOFN0cmluZyhlKX1jYXRjaChlKXt9fWNvbnN0IHI9dD9uZXcgVVJMKGUsdCk6bmV3IFVSTChlKTtpZihmdW5jdGlvbiBfaXNWYWxpZFByb3RvY29sKGUpe2lmKCFlKXJldHVybiExO3N3aXRjaChlLnByb3RvY29sKXtjYXNlImh0dHA6IjpjYXNlImh0dHBzOiI6Y2FzZSJmdHA6IjpjYXNlIm1haWx0bzoiOmNhc2UidGVsOiI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19KHIpKXJldHVybiByfWNhdGNoKGUpe31yZXR1cm4gbnVsbH07dC5lc2NhcGVTdHJpbmc9ZnVuY3Rpb24gZXNjYXBlU3RyaW5nKGUpe3JldHVybiBlLnJlcGxhY2UoLyhbKClcXFxuXHJdKS9nLChlPT4iXG4iPT09ZT8iXFxuIjoiXHIiPT09ZT8iXFxyIjpgXFwke2V9YCkpfTt0LmdldE1vZGlmaWNhdGlvbkRhdGU9ZnVuY3Rpb24gZ2V0TW9kaWZpY2F0aW9uRGF0ZShlPW5ldyBEYXRlKXtyZXR1cm5bZS5nZXRVVENGdWxsWWVhcigpLnRvU3RyaW5nKCksKGUuZ2V0VVRDTW9udGgoKSsxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKSxlLmdldFVUQ0RhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKSxlLmdldFVUQ0hvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksZS5nZXRVVENNaW51dGVzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksZS5nZXRVVENTZWNvbmRzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIildLmpvaW4oIiIpfTt0LmdldFZlcmJvc2l0eUxldmVsPWZ1bmN0aW9uIGdldFZlcmJvc2l0eUxldmVsKCl7cmV0dXJuIHJ9O3QuaW5mbz1mdW5jdGlvbiBpbmZvKGUpe3I+PWEuSU5GT1MmJmNvbnNvbGUubG9nKGBJbmZvOiAke2V9YCl9O3QuaXNBcnJheUJ1ZmZlcj1mdW5jdGlvbiBpc0FycmF5QnVmZmVyKGUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWUmJnZvaWQgMCE9PWUuYnl0ZUxlbmd0aH07dC5pc0FycmF5RXF1YWw9ZnVuY3Rpb24gaXNBcnJheUVxdWFsKGUsdCl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjthKyspaWYoZVthXSE9PXRbYV0pcmV0dXJuITE7cmV0dXJuITB9O3QuaXNBc2NpaT1mdW5jdGlvbiBpc0FzY2lpKGUpe3JldHVybi9eW1x4MDAtXHg3Rl0qJC8udGVzdChlKX07dC5vYmplY3RGcm9tTWFwPWZ1bmN0aW9uIG9iamVjdEZyb21NYXAoZSl7Y29uc3QgdD1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcihjb25zdFthLHJdb2YgZSl0W2FdPXI7cmV0dXJuIHR9O3Qub2JqZWN0U2l6ZT1mdW5jdGlvbiBvYmplY3RTaXplKGUpe3JldHVybiBPYmplY3Qua2V5cyhlKS5sZW5ndGh9O3Quc2V0VmVyYm9zaXR5TGV2ZWw9ZnVuY3Rpb24gc2V0VmVyYm9zaXR5TGV2ZWwoZSl7TnVtYmVyLmlzSW50ZWdlcihlKSYmKHI9ZSl9O3Quc2hhZG93PXNoYWRvdzt0LnN0cmluZzMyPWZ1bmN0aW9uIHN0cmluZzMyKGUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsMjU1JmUpfTt0LnN0cmluZ1RvQnl0ZXM9c3RyaW5nVG9CeXRlczt0LnN0cmluZ1RvUERGU3RyaW5nPWZ1bmN0aW9uIHN0cmluZ1RvUERGU3RyaW5nKGUpe2lmKGVbMF0+PSLDryIpe2xldCB0OyLDviI9PT1lWzBdJiYiw78iPT09ZVsxXT90PSJ1dGYtMTZiZSI6IsO/Ij09PWVbMF0mJiLDviI9PT1lWzFdP3Q9InV0Zi0xNmxlIjoiw68iPT09ZVswXSYmIsK7Ij09PWVbMV0mJiLCvyI9PT1lWzJdJiYodD0idXRmLTgiKTtpZih0KXRyeXtjb25zdCBhPW5ldyBUZXh0RGVjb2Rlcih0LHtmYXRhbDohMH0pLHI9c3RyaW5nVG9CeXRlcyhlKTtyZXR1cm4gYS5kZWNvZGUocil9Y2F0Y2goZSl7d2Fybihgc3RyaW5nVG9QREZTdHJpbmc6ICIke2V9Ii5gKX19Y29uc3QgdD1bXTtmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjthKyspe2NvbnN0IHI9c1tlLmNoYXJDb2RlQXQoYSldO3QucHVzaChyP1N0cmluZy5mcm9tQ2hhckNvZGUocik6ZS5jaGFyQXQoYSkpfXJldHVybiB0LmpvaW4oIiIpfTt0LnN0cmluZ1RvVVRGMTZCRVN0cmluZz1mdW5jdGlvbiBzdHJpbmdUb1VURjE2QkVTdHJpbmcoZSl7Y29uc3QgdD1bIsO+w78iXTtmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjthKyspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KGEpO3QucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHI+PjgmMjU1KSxTdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSZyKSl9cmV0dXJuIHQuam9pbigiIil9O3Quc3RyaW5nVG9VVEY4U3RyaW5nPXN0cmluZ1RvVVRGOFN0cmluZzt0LnVucmVhY2hhYmxlPXVucmVhY2hhYmxlO3QudXRmOFN0cmluZ1RvU3RyaW5nPWZ1bmN0aW9uIHV0ZjhTdHJpbmdUb1N0cmluZyhlKXtyZXR1cm4gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGUpKX07dC53YXJuPXdhcm47dC5JREVOVElUWV9NQVRSSVg9WzEsMCwwLDEsMCwwXTt0LkZPTlRfSURFTlRJVFlfTUFUUklYPVsuMDAxLDAsMCwuMDAxLDAsMF07dC5MSU5FX0ZBQ1RPUj0xLjM1O3QuTElORV9ERVNDRU5UX0ZBQ1RPUj0uMzU7dC5SZW5kZXJpbmdJbnRlbnRGbGFnPXtBTlk6MSxESVNQTEFZOjIsUFJJTlQ6NCxBTk5PVEFUSU9OU19GT1JNUzoxNixBTk5PVEFUSU9OU19TVE9SQUdFOjMyLEFOTk9UQVRJT05TX0RJU0FCTEU6NjQsT1BMSVNUOjI1Nn07dC5Bbm5vdGF0aW9uTW9kZT17RElTQUJMRTowLEVOQUJMRToxLEVOQUJMRV9GT1JNUzoyLEVOQUJMRV9TVE9SQUdFOjN9O3QuQW5ub3RhdGlvbkVkaXRvclByZWZpeD0icGRmanNfaW50ZXJuYWxfZWRpdG9yXyI7dC5Bbm5vdGF0aW9uRWRpdG9yVHlwZT17RElTQUJMRTotMSxOT05FOjAsRlJFRVRFWFQ6MyxJTks6MTV9O3QuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGU9e0ZSRUVURVhUX1NJWkU6MSxGUkVFVEVYVF9DT0xPUjoyLEZSRUVURVhUX09QQUNJVFk6MyxJTktfQ09MT1I6MTEsSU5LX1RISUNLTkVTUzoxMixJTktfT1BBQ0lUWToxM307dC5QZXJtaXNzaW9uRmxhZz17UFJJTlQ6NCxNT0RJRllfQ09OVEVOVFM6OCxDT1BZOjE2LE1PRElGWV9BTk5PVEFUSU9OUzozMixGSUxMX0lOVEVSQUNUSVZFX0ZPUk1TOjI1NixDT1BZX0ZPUl9BQ0NFU1NJQklMSVRZOjUxMixBU1NFTUJMRToxMDI0LFBSSU5UX0hJR0hfUVVBTElUWToyMDQ4fTt0LlRleHRSZW5kZXJpbmdNb2RlPXtGSUxMOjAsU1RST0tFOjEsRklMTF9TVFJPS0U6MixJTlZJU0lCTEU6MyxGSUxMX0FERF9UT19QQVRIOjQsU1RST0tFX0FERF9UT19QQVRIOjUsRklMTF9TVFJPS0VfQUREX1RPX1BBVEg6NixBRERfVE9fUEFUSDo3LEZJTExfU1RST0tFX01BU0s6MyxBRERfVE9fUEFUSF9GTEFHOjR9O3QuSW1hZ2VLaW5kPXtHUkFZU0NBTEVfMUJQUDoxLFJHQl8yNEJQUDoyLFJHQkFfMzJCUFA6M307dC5Bbm5vdGF0aW9uVHlwZT17VEVYVDoxLExJTks6MixGUkVFVEVYVDozLExJTkU6NCxTUVVBUkU6NSxDSVJDTEU6NixQT0xZR09OOjcsUE9MWUxJTkU6OCxISUdITElHSFQ6OSxVTkRFUkxJTkU6MTAsU1FVSUdHTFk6MTEsU1RSSUtFT1VUOjEyLFNUQU1QOjEzLENBUkVUOjE0LElOSzoxNSxQT1BVUDoxNixGSUxFQVRUQUNITUVOVDoxNyxTT1VORDoxOCxNT1ZJRToxOSxXSURHRVQ6MjAsU0NSRUVOOjIxLFBSSU5URVJNQVJLOjIyLFRSQVBORVQ6MjMsV0FURVJNQVJLOjI0LFRIUkVFRDoyNSxSRURBQ1Q6MjZ9O3QuQW5ub3RhdGlvblN0YXRlTW9kZWxUeXBlPXtNQVJLRUQ6Ik1hcmtlZCIsUkVWSUVXOiJSZXZpZXcifTt0LkFubm90YXRpb25NYXJrZWRTdGF0ZT17TUFSS0VEOiJNYXJrZWQiLFVOTUFSS0VEOiJVbm1hcmtlZCJ9O3QuQW5ub3RhdGlvblJldmlld1N0YXRlPXtBQ0NFUFRFRDoiQWNjZXB0ZWQiLFJFSkVDVEVEOiJSZWplY3RlZCIsQ0FOQ0VMTEVEOiJDYW5jZWxsZWQiLENPTVBMRVRFRDoiQ29tcGxldGVkIixOT05FOiJOb25lIn07dC5Bbm5vdGF0aW9uUmVwbHlUeXBlPXtHUk9VUDoiR3JvdXAiLFJFUExZOiJSIn07dC5Bbm5vdGF0aW9uRmxhZz17SU5WSVNJQkxFOjEsSElEREVOOjIsUFJJTlQ6NCxOT1pPT006OCxOT1JPVEFURToxNixOT1ZJRVc6MzIsUkVBRE9OTFk6NjQsTE9DS0VEOjEyOCxUT0dHTEVOT1ZJRVc6MjU2LExPQ0tFRENPTlRFTlRTOjUxMn07dC5Bbm5vdGF0aW9uRmllbGRGbGFnPXtSRUFET05MWToxLFJFUVVJUkVEOjIsTk9FWFBPUlQ6NCxNVUxUSUxJTkU6NDA5NixQQVNTV09SRDo4MTkyLE5PVE9HR0xFVE9PRkY6MTYzODQsUkFESU86MzI3NjgsUFVTSEJVVFRPTjo2NTUzNixDT01CTzoxMzEwNzIsRURJVDoyNjIxNDQsU09SVDo1MjQyODgsRklMRVNFTEVDVDoxMDQ4NTc2LE1VTFRJU0VMRUNUOjIwOTcxNTIsRE9OT1RTUEVMTENIRUNLOjQxOTQzMDQsRE9OT1RTQ1JPTEw6ODM4ODYwOCxDT01COjE2Nzc3MjE2LFJJQ0hURVhUOjMzNTU0NDMyLFJBRElPU0lOVU5JU09OOjMzNTU0NDMyLENPTU1JVE9OU0VMQ0hBTkdFOjY3MTA4ODY0fTt0LkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGU9e1NPTElEOjEsREFTSEVEOjIsQkVWRUxFRDozLElOU0VUOjQsVU5ERVJMSU5FOjV9O3QuQW5ub3RhdGlvbkFjdGlvbkV2ZW50VHlwZT17RToiTW91c2UgRW50ZXIiLFg6Ik1vdXNlIEV4aXQiLEQ6Ik1vdXNlIERvd24iLFU6Ik1vdXNlIFVwIixGbzoiRm9jdXMiLEJsOiJCbHVyIixQTzoiUGFnZU9wZW4iLFBDOiJQYWdlQ2xvc2UiLFBWOiJQYWdlVmlzaWJsZSIsUEk6IlBhZ2VJbnZpc2libGUiLEs6IktleXN0cm9rZSIsRjoiRm9ybWF0IixWOiJWYWxpZGF0ZSIsQzoiQ2FsY3VsYXRlIn07dC5Eb2N1bWVudEFjdGlvbkV2ZW50VHlwZT17V0M6IldpbGxDbG9zZSIsV1M6IldpbGxTYXZlIixEUzoiRGlkU2F2ZSIsV1A6IldpbGxQcmludCIsRFA6IkRpZFByaW50In07dC5QYWdlQWN0aW9uRXZlbnRUeXBlPXtPOiJQYWdlT3BlbiIsQzoiUGFnZUNsb3NlIn07dC5TdHJlYW1UeXBlPXtVTktOT1dOOiJVTktOT1dOIixGTEFURToiRkxBVEUiLExaVzoiTFpXIixEQ1Q6IkRDVCIsSlBYOiJKUFgiLEpCSUc6IkpCSUciLEE4NToiQTg1IixBSFg6IkFIWCIsQ0NGOiJDQ0YiLFJMWDoiUkxYIn07dC5Gb250VHlwZT17VU5LTk9XTjoiVU5LTk9XTiIsVFlQRTE6IlRZUEUxIixUWVBFMVNUQU5EQVJEOiJUWVBFMVNUQU5EQVJEIixUWVBFMUM6IlRZUEUxQyIsQ0lERk9OVFRZUEUwOiJDSURGT05UVFlQRTAiLENJREZPTlRUWVBFMEM6IkNJREZPTlRUWVBFMEMiLFRSVUVUWVBFOiJUUlVFVFlQRSIsQ0lERk9OVFRZUEUyOiJDSURGT05UVFlQRTIiLFRZUEUzOiJUWVBFMyIsT1BFTlRZUEU6Ik9QRU5UWVBFIixUWVBFMDoiVFlQRTAiLE1NVFlQRTE6Ik1NVFlQRTEifTtjb25zdCBhPXtFUlJPUlM6MCxXQVJOSU5HUzoxLElORk9TOjV9O3QuVmVyYm9zaXR5TGV2ZWw9YTt0LkNNYXBDb21wcmVzc2lvblR5cGU9e05PTkU6MCxCSU5BUlk6MX07dC5PUFM9e2RlcGVuZGVuY3k6MSxzZXRMaW5lV2lkdGg6MixzZXRMaW5lQ2FwOjMsc2V0TGluZUpvaW46NCxzZXRNaXRlckxpbWl0OjUsc2V0RGFzaDo2LHNldFJlbmRlcmluZ0ludGVudDo3LHNldEZsYXRuZXNzOjgsc2V0R1N0YXRlOjksc2F2ZToxMCxyZXN0b3JlOjExLHRyYW5zZm9ybToxMixtb3ZlVG86MTMsbGluZVRvOjE0LGN1cnZlVG86MTUsY3VydmVUbzI6MTYsY3VydmVUbzM6MTcsY2xvc2VQYXRoOjE4LHJlY3RhbmdsZToxOSxzdHJva2U6MjAsY2xvc2VTdHJva2U6MjEsZmlsbDoyMixlb0ZpbGw6MjMsZmlsbFN0cm9rZToyNCxlb0ZpbGxTdHJva2U6MjUsY2xvc2VGaWxsU3Ryb2tlOjI2LGNsb3NlRU9GaWxsU3Ryb2tlOjI3LGVuZFBhdGg6MjgsY2xpcDoyOSxlb0NsaXA6MzAsYmVnaW5UZXh0OjMxLGVuZFRleHQ6MzIsc2V0Q2hhclNwYWNpbmc6MzMsc2V0V29yZFNwYWNpbmc6MzQsc2V0SFNjYWxlOjM1LHNldExlYWRpbmc6MzYsc2V0Rm9udDozNyxzZXRUZXh0UmVuZGVyaW5nTW9kZTozOCxzZXRUZXh0UmlzZTozOSxtb3ZlVGV4dDo0MCxzZXRMZWFkaW5nTW92ZVRleHQ6NDEsc2V0VGV4dE1hdHJpeDo0MixuZXh0TGluZTo0MyxzaG93VGV4dDo0NCxzaG93U3BhY2VkVGV4dDo0NSxuZXh0TGluZVNob3dUZXh0OjQ2LG5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0OjQ3LHNldENoYXJXaWR0aDo0OCxzZXRDaGFyV2lkdGhBbmRCb3VuZHM6NDksc2V0U3Ryb2tlQ29sb3JTcGFjZTo1MCxzZXRGaWxsQ29sb3JTcGFjZTo1MSxzZXRTdHJva2VDb2xvcjo1MixzZXRTdHJva2VDb2xvck46NTMsc2V0RmlsbENvbG9yOjU0LHNldEZpbGxDb2xvck46NTUsc2V0U3Ryb2tlR3JheTo1NixzZXRGaWxsR3JheTo1NyxzZXRTdHJva2VSR0JDb2xvcjo1OCxzZXRGaWxsUkdCQ29sb3I6NTksc2V0U3Ryb2tlQ01ZS0NvbG9yOjYwLHNldEZpbGxDTVlLQ29sb3I6NjEsc2hhZGluZ0ZpbGw6NjIsYmVnaW5JbmxpbmVJbWFnZTo2MyxiZWdpbkltYWdlRGF0YTo2NCxlbmRJbmxpbmVJbWFnZTo2NSxwYWludFhPYmplY3Q6NjYsbWFya1BvaW50OjY3LG1hcmtQb2ludFByb3BzOjY4LGJlZ2luTWFya2VkQ29udGVudDo2OSxiZWdpbk1hcmtlZENvbnRlbnRQcm9wczo3MCxlbmRNYXJrZWRDb250ZW50OjcxLGJlZ2luQ29tcGF0OjcyLGVuZENvbXBhdDo3MyxwYWludEZvcm1YT2JqZWN0QmVnaW46NzQscGFpbnRGb3JtWE9iamVjdEVuZDo3NSxiZWdpbkdyb3VwOjc2LGVuZEdyb3VwOjc3LGJlZ2luQW5ub3RhdGlvbjo4MCxlbmRBbm5vdGF0aW9uOjgxLHBhaW50SW1hZ2VNYXNrWE9iamVjdDo4MyxwYWludEltYWdlTWFza1hPYmplY3RHcm91cDo4NCxwYWludEltYWdlWE9iamVjdDo4NSxwYWludElubGluZUltYWdlWE9iamVjdDo4NixwYWludElubGluZUltYWdlWE9iamVjdEdyb3VwOjg3LHBhaW50SW1hZ2VYT2JqZWN0UmVwZWF0Ojg4LHBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdDo4OSxwYWludFNvbGlkQ29sb3JJbWFnZU1hc2s6OTAsY29uc3RydWN0UGF0aDo5MX07dC5VTlNVUFBPUlRFRF9GRUFUVVJFUz17Zm9ybXM6ImZvcm1zIixqYXZhU2NyaXB0OiJqYXZhU2NyaXB0IixzaWduYXR1cmVzOiJzaWduYXR1cmVzIixzbWFzazoic21hc2siLHNoYWRpbmdQYXR0ZXJuOiJzaGFkaW5nUGF0dGVybiIsZXJyb3JUaWxpbmdQYXR0ZXJuOiJlcnJvclRpbGluZ1BhdHRlcm4iLGVycm9yRXh0R1N0YXRlOiJlcnJvckV4dEdTdGF0ZSIsZXJyb3JYT2JqZWN0OiJlcnJvclhPYmplY3QiLGVycm9yRm9udExvYWRUeXBlMzoiZXJyb3JGb250TG9hZFR5cGUzIixlcnJvckZvbnRTdGF0ZToiZXJyb3JGb250U3RhdGUiLGVycm9yRm9udE1pc3Npbmc6ImVycm9yRm9udE1pc3NpbmciLGVycm9yRm9udFRyYW5zbGF0ZToiZXJyb3JGb250VHJhbnNsYXRlIixlcnJvckNvbG9yU3BhY2U6ImVycm9yQ29sb3JTcGFjZSIsZXJyb3JPcGVyYXRvckxpc3Q6ImVycm9yT3BlcmF0b3JMaXN0IixlcnJvckZvbnRUb1VuaWNvZGU6ImVycm9yRm9udFRvVW5pY29kZSIsZXJyb3JGb250TG9hZE5hdGl2ZToiZXJyb3JGb250TG9hZE5hdGl2ZSIsZXJyb3JGb250QnVpbGRQYXRoOiJlcnJvckZvbnRCdWlsZFBhdGgiLGVycm9yRm9udEdldFBhdGg6ImVycm9yRm9udEdldFBhdGgiLGVycm9yTWFya2VkQ29udGVudDoiZXJyb3JNYXJrZWRDb250ZW50IixlcnJvckNvbnRlbnRTdWJTdHJlYW06ImVycm9yQ29udGVudFN1YlN0cmVhbSJ9O3QuUGFzc3dvcmRSZXNwb25zZXM9e05FRURfUEFTU1dPUkQ6MSxJTkNPUlJFQ1RfUEFTU1dPUkQ6Mn07bGV0IHI9YS5XQVJOSU5HUztmdW5jdGlvbiB3YXJuKGUpe3I+PWEuV0FSTklOR1MmJmNvbnNvbGUubG9nKGBXYXJuaW5nOiAke2V9YCl9ZnVuY3Rpb24gdW5yZWFjaGFibGUoZSl7dGhyb3cgbmV3IEVycm9yKGUpfWZ1bmN0aW9uIHNoYWRvdyhlLHQsYSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMX0pO3JldHVybiBhfWNvbnN0IG49ZnVuY3Rpb24gQmFzZUV4Y2VwdGlvbkNsb3N1cmUoKXtmdW5jdGlvbiBCYXNlRXhjZXB0aW9uKGUsdCl7dGhpcy5jb25zdHJ1Y3Rvcj09PUJhc2VFeGNlcHRpb24mJnVucmVhY2hhYmxlKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlRXhjZXB0aW9uLiIpO3RoaXMubWVzc2FnZT1lO3RoaXMubmFtZT10fUJhc2VFeGNlcHRpb24ucHJvdG90eXBlPW5ldyBFcnJvcjtCYXNlRXhjZXB0aW9uLmNvbnN0cnVjdG9yPUJhc2VFeGNlcHRpb247cmV0dXJuIEJhc2VFeGNlcHRpb259KCk7dC5CYXNlRXhjZXB0aW9uPW47dC5QYXNzd29yZEV4Y2VwdGlvbj1jbGFzcyBQYXNzd29yZEV4Y2VwdGlvbiBleHRlbmRzIG57Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLCJQYXNzd29yZEV4Y2VwdGlvbiIpO3RoaXMuY29kZT10fX07dC5Vbmtub3duRXJyb3JFeGNlcHRpb249Y2xhc3MgVW5rbm93bkVycm9yRXhjZXB0aW9uIGV4dGVuZHMgbntjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsIlVua25vd25FcnJvckV4Y2VwdGlvbiIpO3RoaXMuZGV0YWlscz10fX07dC5JbnZhbGlkUERGRXhjZXB0aW9uPWNsYXNzIEludmFsaWRQREZFeGNlcHRpb24gZXh0ZW5kcyBue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIkludmFsaWRQREZFeGNlcHRpb24iKX19O3QuTWlzc2luZ1BERkV4Y2VwdGlvbj1jbGFzcyBNaXNzaW5nUERGRXhjZXB0aW9uIGV4dGVuZHMgbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJNaXNzaW5nUERGRXhjZXB0aW9uIil9fTt0LlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbj1jbGFzcyBVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24gZXh0ZW5kcyBue2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSwiVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIik7dGhpcy5zdGF0dXM9dH19O3QuRm9ybWF0RXJyb3I9Y2xhc3MgRm9ybWF0RXJyb3IgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIkZvcm1hdEVycm9yIil9fTt0LkFib3J0RXhjZXB0aW9uPWNsYXNzIEFib3J0RXhjZXB0aW9uIGV4dGVuZHMgbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJBYm9ydEV4Y2VwdGlvbiIpfX07ZnVuY3Rpb24gc3RyaW5nVG9CeXRlcyhlKXsic3RyaW5nIiE9dHlwZW9mIGUmJnVucmVhY2hhYmxlKCJJbnZhbGlkIGFyZ3VtZW50IGZvciBzdHJpbmdUb0J5dGVzIik7Y29uc3QgdD1lLmxlbmd0aCxhPW5ldyBVaW50OEFycmF5KHQpO2ZvcihsZXQgcj0wO3I8dDsrK3IpYVtyXT0yNTUmZS5jaGFyQ29kZUF0KHIpO3JldHVybiBhfWZ1bmN0aW9uIGFycmF5Qnl0ZUxlbmd0aChlKXtpZih2b2lkIDAhPT1lLmxlbmd0aClyZXR1cm4gZS5sZW5ndGg7aWYodm9pZCAwIT09ZS5ieXRlTGVuZ3RoKXJldHVybiBlLmJ5dGVMZW5ndGg7dW5yZWFjaGFibGUoIkludmFsaWQgYXJndW1lbnQgZm9yIGFycmF5Qnl0ZUxlbmd0aCIpfXQuRmVhdHVyZVRlc3Q9Y2xhc3MgRmVhdHVyZVRlc3R7c3RhdGljIGdldCBpc0xpdHRsZUVuZGlhbigpe3JldHVybiBzaGFkb3codGhpcywiaXNMaXR0bGVFbmRpYW4iLGZ1bmN0aW9uIGlzTGl0dGxlRW5kaWFuKCl7Y29uc3QgZT1uZXcgVWludDhBcnJheSg0KTtlWzBdPTE7cmV0dXJuIDE9PT1uZXcgVWludDMyQXJyYXkoZS5idWZmZXIsMCwxKVswXX0oKSl9c3RhdGljIGdldCBpc0V2YWxTdXBwb3J0ZWQoKXtyZXR1cm4gc2hhZG93KHRoaXMsImlzRXZhbFN1cHBvcnRlZCIsZnVuY3Rpb24gaXNFdmFsU3VwcG9ydGVkKCl7dHJ5e25ldyBGdW5jdGlvbigiIik7cmV0dXJuITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpKX1zdGF0aWMgZ2V0IGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCIsInVuZGVmaW5lZCIhPXR5cGVvZiBPZmZzY3JlZW5DYW52YXMpfX07Y29uc3QgaT1bLi4uQXJyYXkoMjU2KS5rZXlzKCldLm1hcCgoZT0+ZS50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKSk7Y2xhc3MgVXRpbHtzdGF0aWMgbWFrZUhleENvbG9yKGUsdCxhKXtyZXR1cm5gIyR7aVtlXX0ke2lbdF19JHtpW2FdfWB9c3RhdGljIHNjYWxlTWluTWF4KGUsdCl7bGV0IGE7aWYoZVswXSl7aWYoZVswXTwwKXthPXRbMF07dFswXT10WzFdO3RbMV09YX10WzBdKj1lWzBdO3RbMV0qPWVbMF07aWYoZVszXTwwKXthPXRbMl07dFsyXT10WzNdO3RbM109YX10WzJdKj1lWzNdO3RbM10qPWVbM119ZWxzZXthPXRbMF07dFswXT10WzJdO3RbMl09YTthPXRbMV07dFsxXT10WzNdO3RbM109YTtpZihlWzFdPDApe2E9dFsyXTt0WzJdPXRbM107dFszXT1hfXRbMl0qPWVbMV07dFszXSo9ZVsxXTtpZihlWzJdPDApe2E9dFswXTt0WzBdPXRbMV07dFsxXT1hfXRbMF0qPWVbMl07dFsxXSo9ZVsyXX10WzBdKz1lWzRdO3RbMV0rPWVbNF07dFsyXSs9ZVs1XTt0WzNdKz1lWzVdfXN0YXRpYyB0cmFuc2Zvcm0oZSx0KXtyZXR1cm5bZVswXSp0WzBdK2VbMl0qdFsxXSxlWzFdKnRbMF0rZVszXSp0WzFdLGVbMF0qdFsyXStlWzJdKnRbM10sZVsxXSp0WzJdK2VbM10qdFszXSxlWzBdKnRbNF0rZVsyXSp0WzVdK2VbNF0sZVsxXSp0WzRdK2VbM10qdFs1XStlWzVdXX1zdGF0aWMgYXBwbHlUcmFuc2Zvcm0oZSx0KXtyZXR1cm5bZVswXSp0WzBdK2VbMV0qdFsyXSt0WzRdLGVbMF0qdFsxXStlWzFdKnRbM10rdFs1XV19c3RhdGljIGFwcGx5SW52ZXJzZVRyYW5zZm9ybShlLHQpe2NvbnN0IGE9dFswXSp0WzNdLXRbMV0qdFsyXTtyZXR1cm5bKGVbMF0qdFszXS1lWzFdKnRbMl0rdFsyXSp0WzVdLXRbNF0qdFszXSkvYSwoLWVbMF0qdFsxXStlWzFdKnRbMF0rdFs0XSp0WzFdLXRbNV0qdFswXSkvYV19c3RhdGljIGdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KGUsdCl7Y29uc3QgYT1VdGlsLmFwcGx5VHJhbnNmb3JtKGUsdCkscj1VdGlsLmFwcGx5VHJhbnNmb3JtKGUuc2xpY2UoMiw0KSx0KSxuPVV0aWwuYXBwbHlUcmFuc2Zvcm0oW2VbMF0sZVszXV0sdCksaT1VdGlsLmFwcGx5VHJhbnNmb3JtKFtlWzJdLGVbMV1dLHQpO3JldHVybltNYXRoLm1pbihhWzBdLHJbMF0sblswXSxpWzBdKSxNYXRoLm1pbihhWzFdLHJbMV0sblsxXSxpWzFdKSxNYXRoLm1heChhWzBdLHJbMF0sblswXSxpWzBdKSxNYXRoLm1heChhWzFdLHJbMV0sblsxXSxpWzFdKV19c3RhdGljIGludmVyc2VUcmFuc2Zvcm0oZSl7Y29uc3QgdD1lWzBdKmVbM10tZVsxXSplWzJdO3JldHVybltlWzNdL3QsLWVbMV0vdCwtZVsyXS90LGVbMF0vdCwoZVsyXSplWzVdLWVbNF0qZVszXSkvdCwoZVs0XSplWzFdLWVbNV0qZVswXSkvdF19c3RhdGljIHNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKGUpe2NvbnN0IHQ9W2VbMF0sZVsyXSxlWzFdLGVbM11dLGE9ZVswXSp0WzBdK2VbMV0qdFsyXSxyPWVbMF0qdFsxXStlWzFdKnRbM10sbj1lWzJdKnRbMF0rZVszXSp0WzJdLGk9ZVsyXSp0WzFdK2VbM10qdFszXSxzPShhK2kpLzIsbz1NYXRoLnNxcnQoKGEraSkqKjItNCooYSppLW4qcikpLzIsYz1zK298fDEsbD1zLW98fDE7cmV0dXJuW01hdGguc3FydChjKSxNYXRoLnNxcnQobCldfXN0YXRpYyBub3JtYWxpemVSZWN0KGUpe2NvbnN0IHQ9ZS5zbGljZSgwKTtpZihlWzBdPmVbMl0pe3RbMF09ZVsyXTt0WzJdPWVbMF19aWYoZVsxXT5lWzNdKXt0WzFdPWVbM107dFszXT1lWzFdfXJldHVybiB0fXN0YXRpYyBpbnRlcnNlY3QoZSx0KXtjb25zdCBhPU1hdGgubWF4KE1hdGgubWluKGVbMF0sZVsyXSksTWF0aC5taW4odFswXSx0WzJdKSkscj1NYXRoLm1pbihNYXRoLm1heChlWzBdLGVbMl0pLE1hdGgubWF4KHRbMF0sdFsyXSkpO2lmKGE+cilyZXR1cm4gbnVsbDtjb25zdCBuPU1hdGgubWF4KE1hdGgubWluKGVbMV0sZVszXSksTWF0aC5taW4odFsxXSx0WzNdKSksaT1NYXRoLm1pbihNYXRoLm1heChlWzFdLGVbM10pLE1hdGgubWF4KHRbMV0sdFszXSkpO3JldHVybiBuPmk/bnVsbDpbYSxuLHIsaV19c3RhdGljIGJlemllckJvdW5kaW5nQm94KGUsdCxhLHIsbixpLHMsbyl7Y29uc3QgYz1bXSxsPVtbXSxbXV07bGV0IGgsdSxkLGYsZyxwLG0sYjtmb3IobGV0IGw9MDtsPDI7KytsKXtpZigwPT09bCl7dT02KmUtMTIqYSs2Km47aD0tMyplKzkqYS05Km4rMypzO2Q9MyphLTMqZX1lbHNle3U9Nip0LTEyKnIrNippO2g9LTMqdCs5KnItOSppKzMqbztkPTMqci0zKnR9aWYoTWF0aC5hYnMoaCk8MWUtMTIpe2lmKE1hdGguYWJzKHUpPDFlLTEyKWNvbnRpbnVlO2Y9LWQvdTswPGYmJmY8MSYmYy5wdXNoKGYpfWVsc2V7bT11KnUtNCpkKmg7Yj1NYXRoLnNxcnQobSk7aWYoIShtPDApKXtnPSgtdStiKS8oMipoKTswPGcmJmc8MSYmYy5wdXNoKGcpO3A9KC11LWIpLygyKmgpOzA8cCYmcDwxJiZjLnB1c2gocCl9fX1sZXQgeSx3PWMubGVuZ3RoO2NvbnN0IFM9dztmb3IoO3ctLTspe2Y9Y1t3XTt5PTEtZjtsWzBdW3ddPXkqeSp5KmUrMyp5KnkqZiphKzMqeSpmKmYqbitmKmYqZipzO2xbMV1bd109eSp5KnkqdCszKnkqeSpmKnIrMyp5KmYqZippK2YqZipmKm99bFswXVtTXT1lO2xbMV1bU109dDtsWzBdW1MrMV09cztsWzFdW1MrMV09bztsWzBdLmxlbmd0aD1sWzFdLmxlbmd0aD1TKzI7cmV0dXJuW01hdGgubWluKC4uLmxbMF0pLE1hdGgubWluKC4uLmxbMV0pLE1hdGgubWF4KC4uLmxbMF0pLE1hdGgubWF4KC4uLmxbMV0pXX19dC5VdGlsPVV0aWw7Y29uc3Qgcz1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNzI4LDcxMSw3MTAsNzI5LDczMyw3MzEsNzMwLDczMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw4MjI2LDgyMjQsODIyNSw4MjMwLDgyMTIsODIxMSw0MDIsODI2MCw4MjQ5LDgyNTAsODcyMiw4MjQwLDgyMjIsODIyMCw4MjIxLDgyMTYsODIxNyw4MjE4LDg0ODIsNjQyNTcsNjQyNTgsMzIxLDMzOCwzNTIsMzc2LDM4MSwzMDUsMzIyLDMzOSwzNTMsMzgyLDAsODM2NF07ZnVuY3Rpb24gc3RyaW5nVG9VVEY4U3RyaW5nKGUpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGUpKX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5SZWZTZXRDYWNoZT10LlJlZlNldD10LlJlZj10Lk5hbWU9dC5FT0Y9dC5EaWN0PXQuQ21kPXQuQ0lSQ1VMQVJfUkVGPXZvaWQgMDt0LmNsZWFyUHJpbWl0aXZlQ2FjaGVzPWZ1bmN0aW9uIGNsZWFyUHJpbWl0aXZlQ2FjaGVzKCl7by5fY2xlYXJDYWNoZSgpO3MuX2NsZWFyQ2FjaGUoKTtsLl9jbGVhckNhY2hlKCl9O3QuaXNDbWQ9ZnVuY3Rpb24gaXNDbWQoZSx0KXtyZXR1cm4gZSBpbnN0YW5jZW9mIG8mJih2b2lkIDA9PT10fHxlLmNtZD09PXQpfTt0LmlzRGljdD1mdW5jdGlvbiBpc0RpY3QoZSx0KXtyZXR1cm4gZSBpbnN0YW5jZW9mIERpY3QmJih2b2lkIDA9PT10fHxpc05hbWUoZS5nZXQoIlR5cGUiKSx0KSl9O3QuaXNOYW1lPWlzTmFtZTt0LmlzUmVmc0VxdWFsPWZ1bmN0aW9uIGlzUmVmc0VxdWFsKGUsdCl7cmV0dXJuIGUubnVtPT09dC5udW0mJmUuZ2VuPT09dC5nZW59O3ZhciByPWEoMik7Y29uc3Qgbj1TeW1ib2woIkNJUkNVTEFSX1JFRiIpO3QuQ0lSQ1VMQVJfUkVGPW47Y29uc3QgaT1TeW1ib2woIkVPRiIpO3QuRU9GPWk7Y29uc3Qgcz1mdW5jdGlvbiBOYW1lQ2xvc3VyZSgpe2xldCBlPU9iamVjdC5jcmVhdGUobnVsbCk7Y2xhc3MgTmFtZXtjb25zdHJ1Y3RvcihlKXt0aGlzLm5hbWU9ZX1zdGF0aWMgZ2V0KHQpe3JldHVybiBlW3RdfHwoZVt0XT1uZXcgTmFtZSh0KSl9c3RhdGljIF9jbGVhckNhY2hlKCl7ZT1PYmplY3QuY3JlYXRlKG51bGwpfX1yZXR1cm4gTmFtZX0oKTt0Lk5hbWU9cztjb25zdCBvPWZ1bmN0aW9uIENtZENsb3N1cmUoKXtsZXQgZT1PYmplY3QuY3JlYXRlKG51bGwpO2NsYXNzIENtZHtjb25zdHJ1Y3RvcihlKXt0aGlzLmNtZD1lfXN0YXRpYyBnZXQodCl7cmV0dXJuIGVbdF18fChlW3RdPW5ldyBDbWQodCkpfXN0YXRpYyBfY2xlYXJDYWNoZSgpe2U9T2JqZWN0LmNyZWF0ZShudWxsKX19cmV0dXJuIENtZH0oKTt0LkNtZD1vO2NvbnN0IGM9ZnVuY3Rpb24gbm9uU2VyaWFsaXphYmxlQ2xvc3VyZSgpe3JldHVybiBjfTtjbGFzcyBEaWN0e2NvbnN0cnVjdG9yKGU9bnVsbCl7dGhpcy5fbWFwPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy54cmVmPWU7dGhpcy5vYmpJZD1udWxsO3RoaXMuc3VwcHJlc3NFbmNyeXB0aW9uPSExO3RoaXMuX19ub25TZXJpYWxpemFibGVfXz1jfWFzc2lnblhyZWYoZSl7dGhpcy54cmVmPWV9Z2V0IHNpemUoKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fbWFwKS5sZW5ndGh9Z2V0KGUsdCxhKXtsZXQgcj10aGlzLl9tYXBbZV07aWYodm9pZCAwPT09ciYmdm9pZCAwIT09dCl7cj10aGlzLl9tYXBbdF07dm9pZCAwPT09ciYmdm9pZCAwIT09YSYmKHI9dGhpcy5fbWFwW2FdKX1yZXR1cm4gciBpbnN0YW5jZW9mIGwmJnRoaXMueHJlZj90aGlzLnhyZWYuZmV0Y2gocix0aGlzLnN1cHByZXNzRW5jcnlwdGlvbik6cn1hc3luYyBnZXRBc3luYyhlLHQsYSl7bGV0IHI9dGhpcy5fbWFwW2VdO2lmKHZvaWQgMD09PXImJnZvaWQgMCE9PXQpe3I9dGhpcy5fbWFwW3RdO3ZvaWQgMD09PXImJnZvaWQgMCE9PWEmJihyPXRoaXMuX21hcFthXSl9cmV0dXJuIHIgaW5zdGFuY2VvZiBsJiZ0aGlzLnhyZWY/dGhpcy54cmVmLmZldGNoQXN5bmMocix0aGlzLnN1cHByZXNzRW5jcnlwdGlvbik6cn1nZXRBcnJheShlLHQsYSl7bGV0IHI9dGhpcy5fbWFwW2VdO2lmKHZvaWQgMD09PXImJnZvaWQgMCE9PXQpe3I9dGhpcy5fbWFwW3RdO3ZvaWQgMD09PXImJnZvaWQgMCE9PWEmJihyPXRoaXMuX21hcFthXSl9ciBpbnN0YW5jZW9mIGwmJnRoaXMueHJlZiYmKHI9dGhpcy54cmVmLmZldGNoKHIsdGhpcy5zdXBwcmVzc0VuY3J5cHRpb24pKTtpZihBcnJheS5pc0FycmF5KHIpKXtyPXIuc2xpY2UoKTtmb3IobGV0IGU9MCx0PXIubGVuZ3RoO2U8dDtlKyspcltlXWluc3RhbmNlb2YgbCYmdGhpcy54cmVmJiYocltlXT10aGlzLnhyZWYuZmV0Y2gocltlXSx0aGlzLnN1cHByZXNzRW5jcnlwdGlvbikpfXJldHVybiByfWdldFJhdyhlKXtyZXR1cm4gdGhpcy5fbWFwW2VdfWdldEtleXMoKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fbWFwKX1nZXRSYXdWYWx1ZXMoKXtyZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLl9tYXApfXNldChlLHQpe3RoaXMuX21hcFtlXT10fWhhcyhlKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fbWFwW2VdfWZvckVhY2goZSl7Zm9yKGNvbnN0IHQgaW4gdGhpcy5fbWFwKWUodCx0aGlzLmdldCh0KSl9c3RhdGljIGdldCBlbXB0eSgpe2NvbnN0IGU9bmV3IERpY3QobnVsbCk7ZS5zZXQ9KGUsdCk9PnsoMCxyLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIGBzZXRgIG9uIHRoZSBlbXB0eSBkaWN0aW9uYXJ5LiIpfTtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiZW1wdHkiLGUpfXN0YXRpYyBtZXJnZSh7eHJlZjplLGRpY3RBcnJheTp0LG1lcmdlU3ViRGljdHM6YT0hMX0pe2NvbnN0IHI9bmV3IERpY3QoZSksbj1uZXcgTWFwO2Zvcihjb25zdCBlIG9mIHQpaWYoZSBpbnN0YW5jZW9mIERpY3QpZm9yKGNvbnN0W3Qscl1vZiBPYmplY3QuZW50cmllcyhlLl9tYXApKXtsZXQgZT1uLmdldCh0KTtpZih2b2lkIDA9PT1lKXtlPVtdO24uc2V0KHQsZSl9ZWxzZSBpZighKGEmJnIgaW5zdGFuY2VvZiBEaWN0KSljb250aW51ZTtlLnB1c2gocil9Zm9yKGNvbnN0W3QsYV1vZiBuKXtpZigxPT09YS5sZW5ndGh8fCEoYVswXWluc3RhbmNlb2YgRGljdCkpe3IuX21hcFt0XT1hWzBdO2NvbnRpbnVlfWNvbnN0IG49bmV3IERpY3QoZSk7Zm9yKGNvbnN0IGUgb2YgYSlmb3IoY29uc3RbdCxhXW9mIE9iamVjdC5lbnRyaWVzKGUuX21hcCkpdm9pZCAwPT09bi5fbWFwW3RdJiYobi5fbWFwW3RdPWEpO24uc2l6ZT4wJiYoci5fbWFwW3RdPW4pfW4uY2xlYXIoKTtyZXR1cm4gci5zaXplPjA/cjpEaWN0LmVtcHR5fX10LkRpY3Q9RGljdDtjb25zdCBsPWZ1bmN0aW9uIFJlZkNsb3N1cmUoKXtsZXQgZT1PYmplY3QuY3JlYXRlKG51bGwpO2NsYXNzIFJlZntjb25zdHJ1Y3RvcihlLHQpe3RoaXMubnVtPWU7dGhpcy5nZW49dH10b1N0cmluZygpe3JldHVybiAwPT09dGhpcy5nZW4/YCR7dGhpcy5udW19UmA6YCR7dGhpcy5udW19UiR7dGhpcy5nZW59YH1zdGF0aWMgZ2V0KHQsYSl7Y29uc3Qgcj0wPT09YT9gJHt0fVJgOmAke3R9UiR7YX1gO3JldHVybiBlW3JdfHwoZVtyXT1uZXcgUmVmKHQsYSkpfXN0YXRpYyBfY2xlYXJDYWNoZSgpe2U9T2JqZWN0LmNyZWF0ZShudWxsKX19cmV0dXJuIFJlZn0oKTt0LlJlZj1sO2NsYXNzIFJlZlNldHtjb25zdHJ1Y3RvcihlPW51bGwpe3RoaXMuX3NldD1uZXcgU2V0KGUmJmUuX3NldCl9aGFzKGUpe3JldHVybiB0aGlzLl9zZXQuaGFzKGUudG9TdHJpbmcoKSl9cHV0KGUpe3RoaXMuX3NldC5hZGQoZS50b1N0cmluZygpKX1yZW1vdmUoZSl7dGhpcy5fc2V0LmRlbGV0ZShlLnRvU3RyaW5nKCkpfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHRoaXMuX3NldC52YWx1ZXMoKX1jbGVhcigpe3RoaXMuX3NldC5jbGVhcigpfX10LlJlZlNldD1SZWZTZXQ7Y2xhc3MgUmVmU2V0Q2FjaGV7Y29uc3RydWN0b3IoKXt0aGlzLl9tYXA9bmV3IE1hcH1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9tYXAuc2l6ZX1nZXQoZSl7cmV0dXJuIHRoaXMuX21hcC5nZXQoZS50b1N0cmluZygpKX1oYXMoZSl7cmV0dXJuIHRoaXMuX21hcC5oYXMoZS50b1N0cmluZygpKX1wdXQoZSx0KXt0aGlzLl9tYXAuc2V0KGUudG9TdHJpbmcoKSx0KX1wdXRBbGlhcyhlLHQpe3RoaXMuX21hcC5zZXQoZS50b1N0cmluZygpLHRoaXMuZ2V0KHQpKX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzLl9tYXAudmFsdWVzKCl9Y2xlYXIoKXt0aGlzLl9tYXAuY2xlYXIoKX19dC5SZWZTZXRDYWNoZT1SZWZTZXRDYWNoZTtmdW5jdGlvbiBpc05hbWUoZSx0KXtyZXR1cm4gZSBpbnN0YW5jZW9mIHMmJih2b2lkIDA9PT10fHxlLm5hbWU9PT10KX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5YUmVmUGFyc2VFeGNlcHRpb249dC5YUmVmRW50cnlFeGNlcHRpb249dC5QYXJzZXJFT0ZFeGNlcHRpb249dC5QREZfVkVSU0lPTl9SRUdFWFA9dC5NaXNzaW5nRGF0YUV4Y2VwdGlvbj10LkRvY1N0YXRzPXZvaWQgMDt0LmNvbGxlY3RBY3Rpb25zPWZ1bmN0aW9uIGNvbGxlY3RBY3Rpb25zKGUsdCxhKXtjb25zdCBpPU9iamVjdC5jcmVhdGUobnVsbCkscz1nZXRJbmhlcml0YWJsZVByb3BlcnR5KHtkaWN0OnQsa2V5OiJBQSIsc3RvcFdoZW5Gb3VuZDohMX0pO2lmKHMpZm9yKGxldCB0PXMubGVuZ3RoLTE7dD49MDt0LS0pe2NvbnN0IHI9c1t0XTtpZihyIGluc3RhbmNlb2Ygbi5EaWN0KWZvcihjb25zdCB0IG9mIHIuZ2V0S2V5cygpKXtjb25zdCBzPWFbdF07aWYoIXMpY29udGludWU7Y29uc3Qgbz1yLmdldFJhdyh0KSxjPW5ldyBuLlJlZlNldCxsPVtdO19jb2xsZWN0SlMobyxlLGwsYyk7bC5sZW5ndGg+MCYmKGlbc109bCl9fWlmKHQuaGFzKCJBIikpe2NvbnN0IGE9dC5nZXQoIkEiKSxyPW5ldyBuLlJlZlNldCxzPVtdO19jb2xsZWN0SlMoYSxlLHMscik7cy5sZW5ndGg+MCYmKGkuQWN0aW9uPXMpfXJldHVybigwLHIub2JqZWN0U2l6ZSkoaSk+MD9pOm51bGx9O3QuZW5jb2RlVG9YbWxTdHJpbmc9ZnVuY3Rpb24gZW5jb2RlVG9YbWxTdHJpbmcoZSl7Y29uc3QgdD1bXTtsZXQgYT0wO2ZvcihsZXQgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKyl7Y29uc3Qgbj1lLmNvZGVQb2ludEF0KHIpO2lmKDMyPD1uJiZuPD0xMjYpe2NvbnN0IGk9b1tuXTtpZihpKXthPHImJnQucHVzaChlLnN1YnN0cmluZyhhLHIpKTt0LnB1c2goaSk7YT1yKzF9fWVsc2V7YTxyJiZ0LnB1c2goZS5zdWJzdHJpbmcoYSxyKSk7dC5wdXNoKGAmI3gke24udG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9O2ApO24+NTUyOTUmJihuPDU3MzQ0fHxuPjY1NTMzKSYmcisrO2E9cisxfX1pZigwPT09dC5sZW5ndGgpcmV0dXJuIGU7YTxlLmxlbmd0aCYmdC5wdXNoKGUuc3Vic3RyaW5nKGEsZS5sZW5ndGgpKTtyZXR1cm4gdC5qb2luKCIiKX07dC5lc2NhcGVQREZOYW1lPWZ1bmN0aW9uIGVzY2FwZVBERk5hbWUoZSl7Y29uc3QgdD1bXTtsZXQgYT0wO2ZvcihsZXQgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKyl7Y29uc3Qgbj1lLmNoYXJDb2RlQXQocik7aWYobjwzM3x8bj4xMjZ8fDM1PT09bnx8NDA9PT1ufHw0MT09PW58fDYwPT09bnx8NjI9PT1ufHw5MT09PW58fDkzPT09bnx8MTIzPT09bnx8MTI1PT09bnx8NDc9PT1ufHwzNz09PW4pe2E8ciYmdC5wdXNoKGUuc3Vic3RyaW5nKGEscikpO3QucHVzaChgIyR7bi50b1N0cmluZygxNil9YCk7YT1yKzF9fWlmKDA9PT10Lmxlbmd0aClyZXR1cm4gZTthPGUubGVuZ3RoJiZ0LnB1c2goZS5zdWJzdHJpbmcoYSxlLmxlbmd0aCkpO3JldHVybiB0LmpvaW4oIiIpfTt0LmdldEFycmF5TG9va3VwVGFibGVGYWN0b3J5PWZ1bmN0aW9uIGdldEFycmF5TG9va3VwVGFibGVGYWN0b3J5KGUpe2xldCB0O3JldHVybiBmdW5jdGlvbigpe2lmKGUpe2xldCBhPWUoKTtlPW51bGw7dD1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihsZXQgZT0wLHI9YS5sZW5ndGg7ZTxyO2UrPTIpdFthW2VdXT1hW2UrMV07YT1udWxsfXJldHVybiB0fX07dC5nZXRJbmhlcml0YWJsZVByb3BlcnR5PWdldEluaGVyaXRhYmxlUHJvcGVydHk7dC5nZXRMb29rdXBUYWJsZUZhY3Rvcnk9ZnVuY3Rpb24gZ2V0TG9va3VwVGFibGVGYWN0b3J5KGUpe2xldCB0O3JldHVybiBmdW5jdGlvbigpe2lmKGUpe3Q9T2JqZWN0LmNyZWF0ZShudWxsKTtlKHQpO2U9bnVsbH1yZXR1cm4gdH19O3QuZ2V0TmV3QW5ub3RhdGlvbnNNYXA9ZnVuY3Rpb24gZ2V0TmV3QW5ub3RhdGlvbnNNYXAoZSl7aWYoIWUpcmV0dXJuIG51bGw7Y29uc3QgdD1uZXcgTWFwO2Zvcihjb25zdFthLG5db2YgZSl7aWYoIWEuc3RhcnRzV2l0aChyLkFubm90YXRpb25FZGl0b3JQcmVmaXgpKWNvbnRpbnVlO2xldCBlPXQuZ2V0KG4ucGFnZUluZGV4KTtpZighZSl7ZT1bXTt0LnNldChuLnBhZ2VJbmRleCxlKX1lLnB1c2gobil9cmV0dXJuIHQuc2l6ZT4wP3Q6bnVsbH07dC5pc1doaXRlU3BhY2U9ZnVuY3Rpb24gaXNXaGl0ZVNwYWNlKGUpe3JldHVybiAzMj09PWV8fDk9PT1lfHwxMz09PWV8fDEwPT09ZX07dC5sb2cyPWZ1bmN0aW9uIGxvZzIoZSl7aWYoZTw9MClyZXR1cm4gMDtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nMihlKSl9O3QubnVtYmVyVG9TdHJpbmc9ZnVuY3Rpb24gbnVtYmVyVG9TdHJpbmcoZSl7aWYoTnVtYmVyLmlzSW50ZWdlcihlKSlyZXR1cm4gZS50b1N0cmluZygpO2NvbnN0IHQ9TWF0aC5yb3VuZCgxMDAqZSk7aWYodCUxMDA9PTApcmV0dXJuKHQvMTAwKS50b1N0cmluZygpO2lmKHQlMTA9PTApcmV0dXJuIGUudG9GaXhlZCgxKTtyZXR1cm4gZS50b0ZpeGVkKDIpfTt0LnBhcnNlWEZBUGF0aD1mdW5jdGlvbiBwYXJzZVhGQVBhdGgoZSl7Y29uc3QgdD0vKC4rKVxbKFxkKylcXSQvO3JldHVybiBlLnNwbGl0KCIuIikubWFwKChlPT57Y29uc3QgYT1lLm1hdGNoKHQpO3JldHVybiBhP3tuYW1lOmFbMV0scG9zOnBhcnNlSW50KGFbMl0sMTApfTp7bmFtZTplLHBvczowfX0pKX07dC5yZWFkSW50OD1mdW5jdGlvbiByZWFkSW50OChlLHQpe3JldHVybiBlW3RdPDwyND4+MjR9O3QucmVhZFVpbnQxNj1mdW5jdGlvbiByZWFkVWludDE2KGUsdCl7cmV0dXJuIGVbdF08PDh8ZVt0KzFdfTt0LnJlYWRVaW50MzI9ZnVuY3Rpb24gcmVhZFVpbnQzMihlLHQpe3JldHVybihlW3RdPDwyNHxlW3QrMV08PDE2fGVbdCsyXTw8OHxlW3QrM10pPj4+MH07dC5yZWNvdmVySnNVUkw9ZnVuY3Rpb24gcmVjb3ZlckpzVVJMKGUpe2NvbnN0IHQ9bmV3IFJlZ0V4cCgiXlxccyooIitbImFwcC5sYXVuY2hVUkwiLCJ3aW5kb3cub3BlbiIsInhmYS5ob3N0LmdvdG9VUkwiXS5qb2luKCJ8Iikuc3BsaXQoIi4iKS5qb2luKCJcXC4iKSsiKVxcKCg/Oid8XCIpKFteJ1wiXSopKD86J3xcIikoPzosXFxzKihcXHcrKVxcKXxcXCkpIiwiaSIpLmV4ZWMoZSk7aWYodCYmdFsyXSl7Y29uc3QgZT10WzJdO2xldCBhPSExOyJ0cnVlIj09PXRbM10mJiJhcHAubGF1bmNoVVJMIj09PXRbMV0mJihhPSEwKTtyZXR1cm57dXJsOmUsbmV3V2luZG93OmF9fXJldHVybiBudWxsfTt0LnRvUm9tYW5OdW1lcmFscz1mdW5jdGlvbiB0b1JvbWFuTnVtZXJhbHMoZSx0PSExKXsoMCxyLmFzc2VydCkoTnVtYmVyLmlzSW50ZWdlcihlKSYmZT4wLCJUaGUgbnVtYmVyIHNob3VsZCBiZSBhIHBvc2l0aXZlIGludGVnZXIuIik7Y29uc3QgYT1bXTtsZXQgbjtmb3IoO2U+PTFlMzspe2UtPTFlMzthLnB1c2goIk0iKX1uPWUvMTAwfDA7ZSU9MTAwO2EucHVzaChzW25dKTtuPWUvMTB8MDtlJT0xMDthLnB1c2goc1sxMCtuXSk7YS5wdXNoKHNbMjArZV0pO2NvbnN0IGk9YS5qb2luKCIiKTtyZXR1cm4gdD9pLnRvTG93ZXJDYXNlKCk6aX07dC52YWxpZGF0ZUNTU0ZvbnQ9ZnVuY3Rpb24gdmFsaWRhdGVDU1NGb250KGUpe2NvbnN0IHQ9bmV3IFNldChbIjEwMCIsIjIwMCIsIjMwMCIsIjQwMCIsIjUwMCIsIjYwMCIsIjcwMCIsIjgwMCIsIjkwMCIsIjEwMDAiLCJub3JtYWwiLCJib2xkIiwiYm9sZGVyIiwibGlnaHRlciJdKSx7Zm9udEZhbWlseTphLGZvbnRXZWlnaHQ6bixpdGFsaWNBbmdsZTppfT1lO2lmKC9eIi4qIiQvLnRlc3QoYSkpe2lmKC9bXlxcXSIvLnRlc3QoYS5zbGljZSgxLGEubGVuZ3RoLTEpKSl7KDAsci53YXJuKShgWEZBIC0gRm9udEZhbWlseSBjb250YWlucyBzb21lIHVuZXNjYXBlZCAiOiAke2F9LmApO3JldHVybiExfX1lbHNlIGlmKC9eJy4qJyQvLnRlc3QoYSkpe2lmKC9bXlxcXScvLnRlc3QoYS5zbGljZSgxLGEubGVuZ3RoLTEpKSl7KDAsci53YXJuKShgWEZBIC0gRm9udEZhbWlseSBjb250YWlucyBzb21lIHVuZXNjYXBlZCAnOiAke2F9LmApO3JldHVybiExfX1lbHNlIGZvcihjb25zdCBlIG9mIGEuc3BsaXQoL1sgXHRdKy8pKWlmKC9eKFxkfCgtKFxkfC0pKSkvLnRlc3QoZSl8fCEvXltcdy1cXF0rJC8udGVzdChlKSl7KDAsci53YXJuKShgWEZBIC0gRm9udEZhbWlseSBjb250YWlucyBzb21lIGludmFsaWQgPGN1c3RvbS1pZGVudD46ICR7YX0uYCk7cmV0dXJuITF9Y29uc3Qgcz1uP24udG9TdHJpbmcoKToiIjtlLmZvbnRXZWlnaHQ9dC5oYXMocyk/czoiNDAwIjtjb25zdCBvPXBhcnNlRmxvYXQoaSk7ZS5pdGFsaWNBbmdsZT1pc05hTihvKXx8bzwtOTB8fG8+OTA/IjE0IjppLnRvU3RyaW5nKCk7cmV0dXJuITB9O3ZhciByPWEoMiksbj1hKDMpLGk9YSg1KTt0LlBERl9WRVJTSU9OX1JFR0VYUD0vXlsxLTldXC5cZCQvO2NsYXNzIE1pc3NpbmdEYXRhRXhjZXB0aW9uIGV4dGVuZHMgci5CYXNlRXhjZXB0aW9ue2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoYE1pc3NpbmcgZGF0YSBbJHtlfSwgJHt0fSlgLCJNaXNzaW5nRGF0YUV4Y2VwdGlvbiIpO3RoaXMuYmVnaW49ZTt0aGlzLmVuZD10fX10Lk1pc3NpbmdEYXRhRXhjZXB0aW9uPU1pc3NpbmdEYXRhRXhjZXB0aW9uO2NsYXNzIFBhcnNlckVPRkV4Y2VwdGlvbiBleHRlbmRzIHIuQmFzZUV4Y2VwdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJQYXJzZXJFT0ZFeGNlcHRpb24iKX19dC5QYXJzZXJFT0ZFeGNlcHRpb249UGFyc2VyRU9GRXhjZXB0aW9uO2NsYXNzIFhSZWZFbnRyeUV4Y2VwdGlvbiBleHRlbmRzIHIuQmFzZUV4Y2VwdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJYUmVmRW50cnlFeGNlcHRpb24iKX19dC5YUmVmRW50cnlFeGNlcHRpb249WFJlZkVudHJ5RXhjZXB0aW9uO2NsYXNzIFhSZWZQYXJzZUV4Y2VwdGlvbiBleHRlbmRzIHIuQmFzZUV4Y2VwdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJYUmVmUGFyc2VFeGNlcHRpb24iKX19dC5YUmVmUGFyc2VFeGNlcHRpb249WFJlZlBhcnNlRXhjZXB0aW9uO3QuRG9jU3RhdHM9Y2xhc3MgRG9jU3RhdHN7Y29uc3RydWN0b3IoZSl7dGhpcy5faGFuZGxlcj1lO3RoaXMuX3N0cmVhbVR5cGVzPW5ldyBTZXQ7dGhpcy5fZm9udFR5cGVzPW5ldyBTZXR9X3NlbmQoKXtjb25zdCBlPU9iamVjdC5jcmVhdGUobnVsbCksdD1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcihjb25zdCB0IG9mIHRoaXMuX3N0cmVhbVR5cGVzKWVbdF09ITA7Zm9yKGNvbnN0IGUgb2YgdGhpcy5fZm9udFR5cGVzKXRbZV09ITA7dGhpcy5faGFuZGxlci5zZW5kKCJEb2NTdGF0cyIse3N0cmVhbVR5cGVzOmUsZm9udFR5cGVzOnR9KX1hZGRTdHJlYW1UeXBlKGUpe2lmKCF0aGlzLl9zdHJlYW1UeXBlcy5oYXMoZSkpe3RoaXMuX3N0cmVhbVR5cGVzLmFkZChlKTt0aGlzLl9zZW5kKCl9fWFkZEZvbnRUeXBlKGUpe2lmKCF0aGlzLl9mb250VHlwZXMuaGFzKGUpKXt0aGlzLl9mb250VHlwZXMuYWRkKGUpO3RoaXMuX3NlbmQoKX19fTtmdW5jdGlvbiBnZXRJbmhlcml0YWJsZVByb3BlcnR5KHtkaWN0OmUsa2V5OnQsZ2V0QXJyYXk6YT0hMSxzdG9wV2hlbkZvdW5kOnI9ITB9KXtsZXQgaTtjb25zdCBzPW5ldyBuLlJlZlNldDtmb3IoO2UgaW5zdGFuY2VvZiBuLkRpY3QmJighZS5vYmpJZHx8IXMuaGFzKGUub2JqSWQpKTspe2Uub2JqSWQmJnMucHV0KGUub2JqSWQpO2NvbnN0IG49YT9lLmdldEFycmF5KHQpOmUuZ2V0KHQpO2lmKHZvaWQgMCE9PW4pe2lmKHIpcmV0dXJuIG47aXx8KGk9W10pO2kucHVzaChuKX1lPWUuZ2V0KCJQYXJlbnQiKX1yZXR1cm4gaX1jb25zdCBzPVsiIiwiQyIsIkNDIiwiQ0NDIiwiQ0QiLCJEIiwiREMiLCJEQ0MiLCJEQ0NDIiwiQ00iLCIiLCJYIiwiWFgiLCJYWFgiLCJYTCIsIkwiLCJMWCIsIkxYWCIsIkxYWFgiLCJYQyIsIiIsIkkiLCJJSSIsIklJSSIsIklWIiwiViIsIlZJIiwiVklJIiwiVklJSSIsIklYIl07ZnVuY3Rpb24gX2NvbGxlY3RKUyhlLHQsYSxzKXtpZighZSlyZXR1cm47bGV0IG89bnVsbDtpZihlIGluc3RhbmNlb2Ygbi5SZWYpe2lmKHMuaGFzKGUpKXJldHVybjtvPWU7cy5wdXQobyk7ZT10LmZldGNoKGUpfWlmKEFycmF5LmlzQXJyYXkoZSkpZm9yKGNvbnN0IHIgb2YgZSlfY29sbGVjdEpTKHIsdCxhLHMpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIG4uRGljdCl7aWYoKDAsbi5pc05hbWUpKGUuZ2V0KCJTIiksIkphdmFTY3JpcHQiKSl7Y29uc3QgdD1lLmdldCgiSlMiKTtsZXQgbjt0IGluc3RhbmNlb2YgaS5CYXNlU3RyZWFtP249dC5nZXRTdHJpbmcoKToic3RyaW5nIj09dHlwZW9mIHQmJihuPXQpO249biYmKDAsci5zdHJpbmdUb1BERlN0cmluZykobikucmVwbGFjZSgvXHUwMDAwL2csIiIpO24mJmEucHVzaChuKX1fY29sbGVjdEpTKGUuZ2V0UmF3KCJOZXh0IiksdCxhLHMpfW8mJnMucmVtb3ZlKG8pfWNvbnN0IG89ezYwOiImbHQ7Iiw2MjoiJmd0OyIsMzg6IiZhbXA7IiwzNDoiJnF1b3Q7IiwzOToiJmFwb3M7In19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5CYXNlU3RyZWFtPXZvaWQgMDt2YXIgcj1hKDIpO2NsYXNzIEJhc2VTdHJlYW17Y29uc3RydWN0b3IoKXt0aGlzLmNvbnN0cnVjdG9yPT09QmFzZVN0cmVhbSYmKDAsci51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIEJhc2VTdHJlYW0uIil9Z2V0IGxlbmd0aCgpeygwLHIudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBnZXR0ZXIgYGxlbmd0aGAgYWNjZXNzZWQiKX1nZXQgaXNFbXB0eSgpeygwLHIudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBnZXR0ZXIgYGlzRW1wdHlgIGFjY2Vzc2VkIil9Z2V0IGlzRGF0YUxvYWRlZCgpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJpc0RhdGFMb2FkZWQiLCEwKX1nZXRCeXRlKCl7KDAsci51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgZ2V0Qnl0ZWAgY2FsbGVkIil9Z2V0Qnl0ZXMoZSl7KDAsci51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgZ2V0Qnl0ZXNgIGNhbGxlZCIpfXBlZWtCeXRlKCl7Y29uc3QgZT10aGlzLmdldEJ5dGUoKTstMSE9PWUmJnRoaXMucG9zLS07cmV0dXJuIGV9cGVla0J5dGVzKGUpe2NvbnN0IHQ9dGhpcy5nZXRCeXRlcyhlKTt0aGlzLnBvcy09dC5sZW5ndGg7cmV0dXJuIHR9Z2V0VWludDE2KCl7Y29uc3QgZT10aGlzLmdldEJ5dGUoKSx0PXRoaXMuZ2V0Qnl0ZSgpO3JldHVybi0xPT09ZXx8LTE9PT10Py0xOihlPDw4KSt0fWdldEludDMyKCl7cmV0dXJuKHRoaXMuZ2V0Qnl0ZSgpPDwyNCkrKHRoaXMuZ2V0Qnl0ZSgpPDwxNikrKHRoaXMuZ2V0Qnl0ZSgpPDw4KSt0aGlzLmdldEJ5dGUoKX1nZXRCeXRlUmFuZ2UoZSx0KXsoMCxyLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBnZXRCeXRlUmFuZ2VgIGNhbGxlZCIpfWdldFN0cmluZyhlKXtyZXR1cm4oMCxyLmJ5dGVzVG9TdHJpbmcpKHRoaXMuZ2V0Qnl0ZXMoZSkpfXNraXAoZSl7dGhpcy5wb3MrPWV8fDF9cmVzZXQoKXsoMCxyLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGByZXNldGAgY2FsbGVkIil9bW92ZVN0YXJ0KCl7KDAsci51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgbW92ZVN0YXJ0YCBjYWxsZWQiKX1tYWtlU3ViU3RyZWFtKGUsdCxhPW51bGwpeygwLHIudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYG1ha2VTdWJTdHJlYW1gIGNhbGxlZCIpfWdldEJhc2VTdHJlYW1zKCl7cmV0dXJuIG51bGx9fXQuQmFzZVN0cmVhbT1CYXNlU3RyZWFtfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuTmV0d29ya1BkZk1hbmFnZXI9dC5Mb2NhbFBkZk1hbmFnZXI9dm9pZCAwO3ZhciByPWEoMiksbj1hKDcpLGk9YSg0KSxzPWEoOSksbz1hKDgpO2Z1bmN0aW9uIHBhcnNlRG9jQmFzZVVybChlKXtpZihlKXtjb25zdCB0PSgwLHIuY3JlYXRlVmFsaWRBYnNvbHV0ZVVybCkoZSk7aWYodClyZXR1cm4gdC5ocmVmOygwLHIud2FybikoYEludmFsaWQgYWJzb2x1dGUgZG9jQmFzZVVybDogIiR7ZX0iLmApfXJldHVybiBudWxsfWNsYXNzIEJhc2VQZGZNYW5hZ2Vye2NvbnN0cnVjdG9yKCl7dGhpcy5jb25zdHJ1Y3Rvcj09PUJhc2VQZGZNYW5hZ2VyJiYoMCxyLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZVBkZk1hbmFnZXIuIil9Z2V0IGRvY0lkKCl7cmV0dXJuIHRoaXMuX2RvY0lkfWdldCBwYXNzd29yZCgpe3JldHVybiB0aGlzLl9wYXNzd29yZH1nZXQgZG9jQmFzZVVybCgpe2NvbnN0IGU9dGhpcy5wZGZEb2N1bWVudC5jYXRhbG9nO3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJkb2NCYXNlVXJsIixlLmJhc2VVcmx8fHRoaXMuX2RvY0Jhc2VVcmwpfWVuc3VyZURvYyhlLHQpe3JldHVybiB0aGlzLmVuc3VyZSh0aGlzLnBkZkRvY3VtZW50LGUsdCl9ZW5zdXJlWFJlZihlLHQpe3JldHVybiB0aGlzLmVuc3VyZSh0aGlzLnBkZkRvY3VtZW50LnhyZWYsZSx0KX1lbnN1cmVDYXRhbG9nKGUsdCl7cmV0dXJuIHRoaXMuZW5zdXJlKHRoaXMucGRmRG9jdW1lbnQuY2F0YWxvZyxlLHQpfWdldFBhZ2UoZSl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQuZ2V0UGFnZShlKX1mb250RmFsbGJhY2soZSx0KXtyZXR1cm4gdGhpcy5wZGZEb2N1bWVudC5mb250RmFsbGJhY2soZSx0KX1sb2FkWGZhRm9udHMoZSx0KXtyZXR1cm4gdGhpcy5wZGZEb2N1bWVudC5sb2FkWGZhRm9udHMoZSx0KX1sb2FkWGZhSW1hZ2VzKCl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQubG9hZFhmYUltYWdlcygpfXNlcmlhbGl6ZVhmYURhdGEoZSl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQuc2VyaWFsaXplWGZhRGF0YShlKX1jbGVhbnVwKGU9ITEpe3JldHVybiB0aGlzLnBkZkRvY3VtZW50LmNsZWFudXAoZSl9YXN5bmMgZW5zdXJlKGUsdCxhKXsoMCxyLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBlbnN1cmVgIGNhbGxlZCIpfXJlcXVlc3RSYW5nZShlLHQpeygwLHIudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYHJlcXVlc3RSYW5nZWAgY2FsbGVkIil9cmVxdWVzdExvYWRlZFN0cmVhbShlPSExKXsoMCxyLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGByZXF1ZXN0TG9hZGVkU3RyZWFtYCBjYWxsZWQiKX1zZW5kUHJvZ3Jlc3NpdmVEYXRhKGUpeygwLHIudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYHNlbmRQcm9ncmVzc2l2ZURhdGFgIGNhbGxlZCIpfXVwZGF0ZVBhc3N3b3JkKGUpe3RoaXMuX3Bhc3N3b3JkPWV9dGVybWluYXRlKGUpeygwLHIudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYHRlcm1pbmF0ZWAgY2FsbGVkIil9fXQuTG9jYWxQZGZNYW5hZ2VyPWNsYXNzIExvY2FsUGRmTWFuYWdlciBleHRlbmRzIEJhc2VQZGZNYW5hZ2Vye2NvbnN0cnVjdG9yKGUsdCxhLHIsbixpLGMpe3N1cGVyKCk7dGhpcy5fZG9jSWQ9ZTt0aGlzLl9wYXNzd29yZD1hO3RoaXMuX2RvY0Jhc2VVcmw9cGFyc2VEb2NCYXNlVXJsKGMpO3RoaXMubXNnSGFuZGxlcj1yO3RoaXMuZXZhbHVhdG9yT3B0aW9ucz1uO3RoaXMuZW5hYmxlWGZhPWk7Y29uc3QgbD1uZXcgby5TdHJlYW0odCk7dGhpcy5wZGZEb2N1bWVudD1uZXcgcy5QREZEb2N1bWVudCh0aGlzLGwpO3RoaXMuX2xvYWRlZFN0cmVhbVByb21pc2U9UHJvbWlzZS5yZXNvbHZlKGwpfWFzeW5jIGVuc3VyZShlLHQsYSl7Y29uc3Qgcj1lW3RdO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiByP3IuYXBwbHkoZSxhKTpyfXJlcXVlc3RSYW5nZShlLHQpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKX1yZXF1ZXN0TG9hZGVkU3RyZWFtKGU9ITEpe3JldHVybiB0aGlzLl9sb2FkZWRTdHJlYW1Qcm9taXNlfXRlcm1pbmF0ZShlKXt9fTt0Lk5ldHdvcmtQZGZNYW5hZ2VyPWNsYXNzIE5ldHdvcmtQZGZNYW5hZ2VyIGV4dGVuZHMgQmFzZVBkZk1hbmFnZXJ7Y29uc3RydWN0b3IoZSx0LGEscixpLG8pe3N1cGVyKCk7dGhpcy5fZG9jSWQ9ZTt0aGlzLl9wYXNzd29yZD1hLnBhc3N3b3JkO3RoaXMuX2RvY0Jhc2VVcmw9cGFyc2VEb2NCYXNlVXJsKG8pO3RoaXMubXNnSGFuZGxlcj1hLm1zZ0hhbmRsZXI7dGhpcy5ldmFsdWF0b3JPcHRpb25zPXI7dGhpcy5lbmFibGVYZmE9aTt0aGlzLnN0cmVhbU1hbmFnZXI9bmV3IG4uQ2h1bmtlZFN0cmVhbU1hbmFnZXIodCx7bXNnSGFuZGxlcjphLm1zZ0hhbmRsZXIsbGVuZ3RoOmEubGVuZ3RoLGRpc2FibGVBdXRvRmV0Y2g6YS5kaXNhYmxlQXV0b0ZldGNoLHJhbmdlQ2h1bmtTaXplOmEucmFuZ2VDaHVua1NpemV9KTt0aGlzLnBkZkRvY3VtZW50PW5ldyBzLlBERkRvY3VtZW50KHRoaXMsdGhpcy5zdHJlYW1NYW5hZ2VyLmdldFN0cmVhbSgpKX1hc3luYyBlbnN1cmUoZSx0LGEpe3RyeXtjb25zdCByPWVbdF07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHI/ci5hcHBseShlLGEpOnJ9Y2F0Y2gocil7aWYoIShyIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbikpdGhyb3cgcjthd2FpdCB0aGlzLnJlcXVlc3RSYW5nZShyLmJlZ2luLHIuZW5kKTtyZXR1cm4gdGhpcy5lbnN1cmUoZSx0LGEpfX1yZXF1ZXN0UmFuZ2UoZSx0KXtyZXR1cm4gdGhpcy5zdHJlYW1NYW5hZ2VyLnJlcXVlc3RSYW5nZShlLHQpfXJlcXVlc3RMb2FkZWRTdHJlYW0oZT0hMSl7cmV0dXJuIHRoaXMuc3RyZWFtTWFuYWdlci5yZXF1ZXN0QWxsQ2h1bmtzKGUpfXNlbmRQcm9ncmVzc2l2ZURhdGEoZSl7dGhpcy5zdHJlYW1NYW5hZ2VyLm9uUmVjZWl2ZURhdGEoe2NodW5rOmV9KX10ZXJtaW5hdGUoZSl7dGhpcy5zdHJlYW1NYW5hZ2VyLmFib3J0KGUpfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5DaHVua2VkU3RyZWFtTWFuYWdlcj10LkNodW5rZWRTdHJlYW09dm9pZCAwO3ZhciByPWEoMiksbj1hKDQpLGk9YSg4KTtjbGFzcyBDaHVua2VkU3RyZWFtIGV4dGVuZHMgaS5TdHJlYW17Y29uc3RydWN0b3IoZSx0LGEpe3N1cGVyKG5ldyBVaW50OEFycmF5KGUpLDAsZSxudWxsKTt0aGlzLmNodW5rU2l6ZT10O3RoaXMuX2xvYWRlZENodW5rcz1uZXcgU2V0O3RoaXMubnVtQ2h1bmtzPU1hdGguY2VpbChlL3QpO3RoaXMubWFuYWdlcj1hO3RoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoPTA7dGhpcy5sYXN0U3VjY2Vzc2Z1bEVuc3VyZUJ5dGVDaHVuaz0tMX1nZXRNaXNzaW5nQ2h1bmtzKCl7Y29uc3QgZT1bXTtmb3IobGV0IHQ9MCxhPXRoaXMubnVtQ2h1bmtzO3Q8YTsrK3QpdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyh0KXx8ZS5wdXNoKHQpO3JldHVybiBlfWdldCBudW1DaHVua3NMb2FkZWQoKXtyZXR1cm4gdGhpcy5fbG9hZGVkQ2h1bmtzLnNpemV9Z2V0IGlzRGF0YUxvYWRlZCgpe3JldHVybiB0aGlzLm51bUNodW5rc0xvYWRlZD09PXRoaXMubnVtQ2h1bmtzfW9uUmVjZWl2ZURhdGEoZSx0KXtjb25zdCBhPXRoaXMuY2h1bmtTaXplO2lmKGUlYSE9MCl0aHJvdyBuZXcgRXJyb3IoYEJhZCBiZWdpbiBvZmZzZXQ6ICR7ZX1gKTtjb25zdCByPWUrdC5ieXRlTGVuZ3RoO2lmKHIlYSE9MCYmciE9PXRoaXMuYnl0ZXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgQmFkIGVuZCBvZmZzZXQ6ICR7cn1gKTt0aGlzLmJ5dGVzLnNldChuZXcgVWludDhBcnJheSh0KSxlKTtjb25zdCBuPU1hdGguZmxvb3IoZS9hKSxpPU1hdGguZmxvb3IoKHItMSkvYSkrMTtmb3IobGV0IGU9bjtlPGk7KytlKXRoaXMuX2xvYWRlZENodW5rcy5hZGQoZSl9b25SZWNlaXZlUHJvZ3Jlc3NpdmVEYXRhKGUpe2xldCB0PXRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoO2NvbnN0IGE9TWF0aC5mbG9vcih0L3RoaXMuY2h1bmtTaXplKTt0aGlzLmJ5dGVzLnNldChuZXcgVWludDhBcnJheShlKSx0KTt0Kz1lLmJ5dGVMZW5ndGg7dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGg9dDtjb25zdCByPXQ+PXRoaXMuZW5kP3RoaXMubnVtQ2h1bmtzOk1hdGguZmxvb3IodC90aGlzLmNodW5rU2l6ZSk7Zm9yKGxldCBlPWE7ZTxyOysrZSl0aGlzLl9sb2FkZWRDaHVua3MuYWRkKGUpfWVuc3VyZUJ5dGUoZSl7aWYoZTx0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aClyZXR1cm47Y29uc3QgdD1NYXRoLmZsb29yKGUvdGhpcy5jaHVua1NpemUpO2lmKCEodD50aGlzLm51bUNodW5rcykmJnQhPT10aGlzLmxhc3RTdWNjZXNzZnVsRW5zdXJlQnl0ZUNodW5rKXtpZighdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyh0KSl0aHJvdyBuZXcgbi5NaXNzaW5nRGF0YUV4Y2VwdGlvbihlLGUrMSk7dGhpcy5sYXN0U3VjY2Vzc2Z1bEVuc3VyZUJ5dGVDaHVuaz10fX1lbnN1cmVSYW5nZShlLHQpe2lmKGU+PXQpcmV0dXJuO2lmKHQ8PXRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoKXJldHVybjtjb25zdCBhPU1hdGguZmxvb3IoZS90aGlzLmNodW5rU2l6ZSk7aWYoYT50aGlzLm51bUNodW5rcylyZXR1cm47Y29uc3Qgcj1NYXRoLm1pbihNYXRoLmZsb29yKCh0LTEpL3RoaXMuY2h1bmtTaXplKSsxLHRoaXMubnVtQ2h1bmtzKTtmb3IobGV0IGk9YTtpPHI7KytpKWlmKCF0aGlzLl9sb2FkZWRDaHVua3MuaGFzKGkpKXRocm93IG5ldyBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKGUsdCl9bmV4dEVtcHR5Q2h1bmsoZSl7Y29uc3QgdD10aGlzLm51bUNodW5rcztmb3IobGV0IGE9MDthPHQ7KythKXtjb25zdCByPShlK2EpJXQ7aWYoIXRoaXMuX2xvYWRlZENodW5rcy5oYXMocikpcmV0dXJuIHJ9cmV0dXJuIG51bGx9aGFzQ2h1bmsoZSl7cmV0dXJuIHRoaXMuX2xvYWRlZENodW5rcy5oYXMoZSl9Z2V0Qnl0ZSgpe2NvbnN0IGU9dGhpcy5wb3M7aWYoZT49dGhpcy5lbmQpcmV0dXJuLTE7ZT49dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgmJnRoaXMuZW5zdXJlQnl0ZShlKTtyZXR1cm4gdGhpcy5ieXRlc1t0aGlzLnBvcysrXX1nZXRCeXRlcyhlKXtjb25zdCB0PXRoaXMuYnl0ZXMsYT10aGlzLnBvcyxyPXRoaXMuZW5kO2lmKCFlKXtyPnRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoJiZ0aGlzLmVuc3VyZVJhbmdlKGEscik7cmV0dXJuIHQuc3ViYXJyYXkoYSxyKX1sZXQgbj1hK2U7bj5yJiYobj1yKTtuPnRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoJiZ0aGlzLmVuc3VyZVJhbmdlKGEsbik7dGhpcy5wb3M9bjtyZXR1cm4gdC5zdWJhcnJheShhLG4pfWdldEJ5dGVSYW5nZShlLHQpe2U8MCYmKGU9MCk7dD50aGlzLmVuZCYmKHQ9dGhpcy5lbmQpO3Q+dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgmJnRoaXMuZW5zdXJlUmFuZ2UoZSx0KTtyZXR1cm4gdGhpcy5ieXRlcy5zdWJhcnJheShlLHQpfW1ha2VTdWJTdHJlYW0oZSx0LGE9bnVsbCl7dD9lK3Q+dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgmJnRoaXMuZW5zdXJlUmFuZ2UoZSxlK3QpOmU+PXRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoJiZ0aGlzLmVuc3VyZUJ5dGUoZSk7ZnVuY3Rpb24gQ2h1bmtlZFN0cmVhbVN1YnN0cmVhbSgpe31DaHVua2VkU3RyZWFtU3Vic3RyZWFtLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHRoaXMpO0NodW5rZWRTdHJlYW1TdWJzdHJlYW0ucHJvdG90eXBlLmdldE1pc3NpbmdDaHVua3M9ZnVuY3Rpb24oKXtjb25zdCBlPXRoaXMuY2h1bmtTaXplLHQ9TWF0aC5mbG9vcih0aGlzLnN0YXJ0L2UpLGE9TWF0aC5mbG9vcigodGhpcy5lbmQtMSkvZSkrMSxyPVtdO2ZvcihsZXQgZT10O2U8YTsrK2UpdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyhlKXx8ci5wdXNoKGUpO3JldHVybiByfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2h1bmtlZFN0cmVhbVN1YnN0cmVhbS5wcm90b3R5cGUsImlzRGF0YUxvYWRlZCIse2dldCgpe3JldHVybiB0aGlzLm51bUNodW5rc0xvYWRlZD09PXRoaXMubnVtQ2h1bmtzfHwwPT09dGhpcy5nZXRNaXNzaW5nQ2h1bmtzKCkubGVuZ3RofSxjb25maWd1cmFibGU6ITB9KTtjb25zdCByPW5ldyBDaHVua2VkU3RyZWFtU3Vic3RyZWFtO3IucG9zPXIuc3RhcnQ9ZTtyLmVuZD1lK3R8fHRoaXMuZW5kO3IuZGljdD1hO3JldHVybiByfWdldEJhc2VTdHJlYW1zKCl7cmV0dXJuW3RoaXNdfX10LkNodW5rZWRTdHJlYW09Q2h1bmtlZFN0cmVhbTt0LkNodW5rZWRTdHJlYW1NYW5hZ2VyPWNsYXNzIENodW5rZWRTdHJlYW1NYW5hZ2Vye2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5sZW5ndGg9dC5sZW5ndGg7dGhpcy5jaHVua1NpemU9dC5yYW5nZUNodW5rU2l6ZTt0aGlzLnN0cmVhbT1uZXcgQ2h1bmtlZFN0cmVhbSh0aGlzLmxlbmd0aCx0aGlzLmNodW5rU2l6ZSx0aGlzKTt0aGlzLnBkZk5ldHdvcmtTdHJlYW09ZTt0aGlzLmRpc2FibGVBdXRvRmV0Y2g9dC5kaXNhYmxlQXV0b0ZldGNoO3RoaXMubXNnSGFuZGxlcj10Lm1zZ0hhbmRsZXI7dGhpcy5jdXJyUmVxdWVzdElkPTA7dGhpcy5fY2h1bmtzTmVlZGVkQnlSZXF1ZXN0PW5ldyBNYXA7dGhpcy5fcmVxdWVzdHNCeUNodW5rPW5ldyBNYXA7dGhpcy5fcHJvbWlzZXNCeVJlcXVlc3Q9bmV3IE1hcDt0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aD0wO3RoaXMuYWJvcnRlZD0hMTt0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5PSgwLHIuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCl9c2VuZFJlcXVlc3QoZSx0KXtjb25zdCBhPXRoaXMucGRmTmV0d29ya1N0cmVhbS5nZXRSYW5nZVJlYWRlcihlLHQpO2EuaXNTdHJlYW1pbmdTdXBwb3J0ZWR8fChhLm9uUHJvZ3Jlc3M9dGhpcy5vblByb2dyZXNzLmJpbmQodGhpcykpO2xldCBuPVtdLGk9MDtyZXR1cm4gbmV3IFByb21pc2UoKChlLHQpPT57Y29uc3QgcmVhZENodW5rPXM9Pnt0cnl7aWYoIXMuZG9uZSl7Y29uc3QgZT1zLnZhbHVlO24ucHVzaChlKTtpKz0oMCxyLmFycmF5Qnl0ZUxlbmd0aCkoZSk7YS5pc1N0cmVhbWluZ1N1cHBvcnRlZCYmdGhpcy5vblByb2dyZXNzKHtsb2FkZWQ6aX0pO2EucmVhZCgpLnRoZW4ocmVhZENodW5rLHQpO3JldHVybn1jb25zdCBvPSgwLHIuYXJyYXlzVG9CeXRlcykobik7bj1udWxsO2Uobyl9Y2F0Y2goZSl7dChlKX19O2EucmVhZCgpLnRoZW4ocmVhZENodW5rLHQpfSkpLnRoZW4oKHQ9Pnt0aGlzLmFib3J0ZWR8fHRoaXMub25SZWNlaXZlRGF0YSh7Y2h1bms6dCxiZWdpbjplfSl9KSl9cmVxdWVzdEFsbENodW5rcyhlPSExKXtpZighZSl7Y29uc3QgZT10aGlzLnN0cmVhbS5nZXRNaXNzaW5nQ2h1bmtzKCk7dGhpcy5fcmVxdWVzdENodW5rcyhlKX1yZXR1cm4gdGhpcy5fbG9hZGVkU3RyZWFtQ2FwYWJpbGl0eS5wcm9taXNlfV9yZXF1ZXN0Q2h1bmtzKGUpe2NvbnN0IHQ9dGhpcy5jdXJyUmVxdWVzdElkKyssYT1uZXcgU2V0O3RoaXMuX2NodW5rc05lZWRlZEJ5UmVxdWVzdC5zZXQodCxhKTtmb3IoY29uc3QgdCBvZiBlKXRoaXMuc3RyZWFtLmhhc0NodW5rKHQpfHxhLmFkZCh0KTtpZigwPT09YS5zaXplKXJldHVybiBQcm9taXNlLnJlc29sdmUoKTtjb25zdCBuPSgwLHIuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7dGhpcy5fcHJvbWlzZXNCeVJlcXVlc3Quc2V0KHQsbik7Y29uc3QgaT1bXTtmb3IoY29uc3QgZSBvZiBhKXtsZXQgYT10aGlzLl9yZXF1ZXN0c0J5Q2h1bmsuZ2V0KGUpO2lmKCFhKXthPVtdO3RoaXMuX3JlcXVlc3RzQnlDaHVuay5zZXQoZSxhKTtpLnB1c2goZSl9YS5wdXNoKHQpfWlmKGkubGVuZ3RoPjApe2NvbnN0IGU9dGhpcy5ncm91cENodW5rcyhpKTtmb3IoY29uc3QgdCBvZiBlKXtjb25zdCBlPXQuYmVnaW5DaHVuayp0aGlzLmNodW5rU2l6ZSxhPU1hdGgubWluKHQuZW5kQ2h1bmsqdGhpcy5jaHVua1NpemUsdGhpcy5sZW5ndGgpO3RoaXMuc2VuZFJlcXVlc3QoZSxhKS5jYXRjaChuLnJlamVjdCl9fXJldHVybiBuLnByb21pc2UuY2F0Y2goKGU9PntpZighdGhpcy5hYm9ydGVkKXRocm93IGV9KSl9Z2V0U3RyZWFtKCl7cmV0dXJuIHRoaXMuc3RyZWFtfXJlcXVlc3RSYW5nZShlLHQpe3Q9TWF0aC5taW4odCx0aGlzLmxlbmd0aCk7Y29uc3QgYT10aGlzLmdldEJlZ2luQ2h1bmsoZSkscj10aGlzLmdldEVuZENodW5rKHQpLG49W107Zm9yKGxldCBlPWE7ZTxyOysrZSluLnB1c2goZSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RDaHVua3Mobil9cmVxdWVzdFJhbmdlcyhlPVtdKXtjb25zdCB0PVtdO2Zvcihjb25zdCBhIG9mIGUpe2NvbnN0IGU9dGhpcy5nZXRCZWdpbkNodW5rKGEuYmVnaW4pLHI9dGhpcy5nZXRFbmRDaHVuayhhLmVuZCk7Zm9yKGxldCBhPWU7YTxyOysrYSl0LmluY2x1ZGVzKGEpfHx0LnB1c2goYSl9dC5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlLXR9KSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RDaHVua3ModCl9Z3JvdXBDaHVua3MoZSl7Y29uc3QgdD1bXTtsZXQgYT0tMSxyPS0xO2ZvcihsZXQgbj0wLGk9ZS5sZW5ndGg7bjxpOysrbil7Y29uc3QgaT1lW25dO2E8MCYmKGE9aSk7aWYocj49MCYmcisxIT09aSl7dC5wdXNoKHtiZWdpbkNodW5rOmEsZW5kQ2h1bms6cisxfSk7YT1pfW4rMT09PWUubGVuZ3RoJiZ0LnB1c2goe2JlZ2luQ2h1bms6YSxlbmRDaHVuazppKzF9KTtyPWl9cmV0dXJuIHR9b25Qcm9ncmVzcyhlKXt0aGlzLm1zZ0hhbmRsZXIuc2VuZCgiRG9jUHJvZ3Jlc3MiLHtsb2FkZWQ6dGhpcy5zdHJlYW0ubnVtQ2h1bmtzTG9hZGVkKnRoaXMuY2h1bmtTaXplK2UubG9hZGVkLHRvdGFsOnRoaXMubGVuZ3RofSl9b25SZWNlaXZlRGF0YShlKXtjb25zdCB0PWUuY2h1bmssYT12b2lkIDA9PT1lLmJlZ2luLHI9YT90aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aDplLmJlZ2luLG49cit0LmJ5dGVMZW5ndGgsaT1NYXRoLmZsb29yKHIvdGhpcy5jaHVua1NpemUpLHM9bjx0aGlzLmxlbmd0aD9NYXRoLmZsb29yKG4vdGhpcy5jaHVua1NpemUpOk1hdGguY2VpbChuL3RoaXMuY2h1bmtTaXplKTtpZihhKXt0aGlzLnN0cmVhbS5vblJlY2VpdmVQcm9ncmVzc2l2ZURhdGEodCk7dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGg9bn1lbHNlIHRoaXMuc3RyZWFtLm9uUmVjZWl2ZURhdGEocix0KTt0aGlzLnN0cmVhbS5pc0RhdGFMb2FkZWQmJnRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucmVzb2x2ZSh0aGlzLnN0cmVhbSk7Y29uc3Qgbz1bXTtmb3IobGV0IGU9aTtlPHM7KytlKXtjb25zdCB0PXRoaXMuX3JlcXVlc3RzQnlDaHVuay5nZXQoZSk7aWYodCl7dGhpcy5fcmVxdWVzdHNCeUNodW5rLmRlbGV0ZShlKTtmb3IoY29uc3QgYSBvZiB0KXtjb25zdCB0PXRoaXMuX2NodW5rc05lZWRlZEJ5UmVxdWVzdC5nZXQoYSk7dC5oYXMoZSkmJnQuZGVsZXRlKGUpO3Quc2l6ZT4wfHxvLnB1c2goYSl9fX1pZighdGhpcy5kaXNhYmxlQXV0b0ZldGNoJiYwPT09dGhpcy5fcmVxdWVzdHNCeUNodW5rLnNpemUpe2xldCBlO2lmKDE9PT10aGlzLnN0cmVhbS5udW1DaHVua3NMb2FkZWQpe2NvbnN0IHQ9dGhpcy5zdHJlYW0ubnVtQ2h1bmtzLTE7dGhpcy5zdHJlYW0uaGFzQ2h1bmsodCl8fChlPXQpfWVsc2UgZT10aGlzLnN0cmVhbS5uZXh0RW1wdHlDaHVuayhzKTtOdW1iZXIuaXNJbnRlZ2VyKGUpJiZ0aGlzLl9yZXF1ZXN0Q2h1bmtzKFtlXSl9Zm9yKGNvbnN0IGUgb2Ygbyl7Y29uc3QgdD10aGlzLl9wcm9taXNlc0J5UmVxdWVzdC5nZXQoZSk7dGhpcy5fcHJvbWlzZXNCeVJlcXVlc3QuZGVsZXRlKGUpO3QucmVzb2x2ZSgpfXRoaXMubXNnSGFuZGxlci5zZW5kKCJEb2NQcm9ncmVzcyIse2xvYWRlZDp0aGlzLnN0cmVhbS5udW1DaHVua3NMb2FkZWQqdGhpcy5jaHVua1NpemUsdG90YWw6dGhpcy5sZW5ndGh9KX1vbkVycm9yKGUpe3RoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucmVqZWN0KGUpfWdldEJlZ2luQ2h1bmsoZSl7cmV0dXJuIE1hdGguZmxvb3IoZS90aGlzLmNodW5rU2l6ZSl9Z2V0RW5kQ2h1bmsoZSl7cmV0dXJuIE1hdGguZmxvb3IoKGUtMSkvdGhpcy5jaHVua1NpemUpKzF9YWJvcnQoZSl7dGhpcy5hYm9ydGVkPSEwO3RoaXMucGRmTmV0d29ya1N0cmVhbSYmdGhpcy5wZGZOZXR3b3JrU3RyZWFtLmNhbmNlbEFsbFJlcXVlc3RzKGUpO2Zvcihjb25zdCB0IG9mIHRoaXMuX3Byb21pc2VzQnlSZXF1ZXN0LnZhbHVlcygpKXQucmVqZWN0KGUpfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5TdHJpbmdTdHJlYW09dC5TdHJlYW09dC5OdWxsU3RyZWFtPXZvaWQgMDt2YXIgcj1hKDUpLG49YSgyKTtjbGFzcyBTdHJlYW0gZXh0ZW5kcyByLkJhc2VTdHJlYW17Y29uc3RydWN0b3IoZSx0LGEscil7c3VwZXIoKTt0aGlzLmJ5dGVzPWUgaW5zdGFuY2VvZiBVaW50OEFycmF5P2U6bmV3IFVpbnQ4QXJyYXkoZSk7dGhpcy5zdGFydD10fHwwO3RoaXMucG9zPXRoaXMuc3RhcnQ7dGhpcy5lbmQ9dCthfHx0aGlzLmJ5dGVzLmxlbmd0aDt0aGlzLmRpY3Q9cn1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuZW5kLXRoaXMuc3RhcnR9Z2V0IGlzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMubGVuZ3RofWdldEJ5dGUoKXtyZXR1cm4gdGhpcy5wb3M+PXRoaXMuZW5kPy0xOnRoaXMuYnl0ZXNbdGhpcy5wb3MrK119Z2V0Qnl0ZXMoZSl7Y29uc3QgdD10aGlzLmJ5dGVzLGE9dGhpcy5wb3Mscj10aGlzLmVuZDtpZighZSlyZXR1cm4gdC5zdWJhcnJheShhLHIpO2xldCBuPWErZTtuPnImJihuPXIpO3RoaXMucG9zPW47cmV0dXJuIHQuc3ViYXJyYXkoYSxuKX1nZXRCeXRlUmFuZ2UoZSx0KXtlPDAmJihlPTApO3Q+dGhpcy5lbmQmJih0PXRoaXMuZW5kKTtyZXR1cm4gdGhpcy5ieXRlcy5zdWJhcnJheShlLHQpfXJlc2V0KCl7dGhpcy5wb3M9dGhpcy5zdGFydH1tb3ZlU3RhcnQoKXt0aGlzLnN0YXJ0PXRoaXMucG9zfW1ha2VTdWJTdHJlYW0oZSx0LGE9bnVsbCl7cmV0dXJuIG5ldyBTdHJlYW0odGhpcy5ieXRlcy5idWZmZXIsZSx0LGEpfX10LlN0cmVhbT1TdHJlYW07dC5TdHJpbmdTdHJlYW09Y2xhc3MgU3RyaW5nU3RyZWFtIGV4dGVuZHMgU3RyZWFte2NvbnN0cnVjdG9yKGUpe3N1cGVyKCgwLG4uc3RyaW5nVG9CeXRlcykoZSkpfX07dC5OdWxsU3RyZWFtPWNsYXNzIE51bGxTdHJlYW0gZXh0ZW5kcyBTdHJlYW17Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgVWludDhBcnJheSgwKSl9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlBhZ2U9dC5QREZEb2N1bWVudD12b2lkIDA7dmFyIHI9YSgxMCksbj1hKDIpLGk9YSg0KSxzPWEoMyksbz1hKDQ5KSxjPWEoNSksbD1hKDY1KSxoPWEoNjcpLHU9YSg2OSksZD1hKDk4KSxmPWEoMTUpLGc9YSg4KSxwPWEoNzMpLG09YSg2MCksYj1hKDEzKSx5PWEoMTcpLHc9YSg3MiksUz1hKDYzKSx4PWEoNzQpLGs9YSg5OSk7Y29uc3QgQz1bMCwwLDYxMiw3OTJdO2NsYXNzIFBhZ2V7Y29uc3RydWN0b3Ioe3BkZk1hbmFnZXI6ZSx4cmVmOnQscGFnZUluZGV4OmEscGFnZURpY3Q6cixyZWY6bixnbG9iYWxJZEZhY3Rvcnk6aSxmb250Q2FjaGU6cyxidWlsdEluQ01hcENhY2hlOm8sc3RhbmRhcmRGb250RGF0YUNhY2hlOmMsZ2xvYmFsSW1hZ2VDYWNoZTpsLG5vbkJsZW5kTW9kZXNTZXQ6aCx4ZmFGYWN0b3J5OnV9KXt0aGlzLnBkZk1hbmFnZXI9ZTt0aGlzLnBhZ2VJbmRleD1hO3RoaXMucGFnZURpY3Q9cjt0aGlzLnhyZWY9dDt0aGlzLnJlZj1uO3RoaXMuZm9udENhY2hlPXM7dGhpcy5idWlsdEluQ01hcENhY2hlPW87dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGU9Yzt0aGlzLmdsb2JhbEltYWdlQ2FjaGU9bDt0aGlzLm5vbkJsZW5kTW9kZXNTZXQ9aDt0aGlzLmV2YWx1YXRvck9wdGlvbnM9ZS5ldmFsdWF0b3JPcHRpb25zO3RoaXMucmVzb3VyY2VzUHJvbWlzZT1udWxsO3RoaXMueGZhRmFjdG9yeT11O2NvbnN0IGQ9e29iajowfTt0aGlzLl9sb2NhbElkRmFjdG9yeT1jbGFzcyBleHRlbmRzIGl7c3RhdGljIGNyZWF0ZU9iaklkKCl7cmV0dXJuYHAke2F9XyR7KytkLm9ian1gfXN0YXRpYyBnZXRQYWdlT2JqSWQoKXtyZXR1cm5gcGFnZSR7bi50b1N0cmluZygpfWB9fX1fZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eShlLHQ9ITEpe2NvbnN0IGE9KDAsaS5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDp0aGlzLnBhZ2VEaWN0LGtleTplLGdldEFycmF5OnQsc3RvcFdoZW5Gb3VuZDohMX0pO3JldHVybiBBcnJheS5pc0FycmF5KGEpPzEhPT1hLmxlbmd0aCYmYVswXWluc3RhbmNlb2Ygcy5EaWN0P3MuRGljdC5tZXJnZSh7eHJlZjp0aGlzLnhyZWYsZGljdEFycmF5OmF9KTphWzBdOmF9Z2V0IGNvbnRlbnQoKXtyZXR1cm4gdGhpcy5wYWdlRGljdC5nZXRBcnJheSgiQ29udGVudHMiKX1nZXQgcmVzb3VyY2VzKCl7Y29uc3QgZT10aGlzLl9nZXRJbmhlcml0YWJsZVByb3BlcnR5KCJSZXNvdXJjZXMiKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywicmVzb3VyY2VzIixlIGluc3RhbmNlb2Ygcy5EaWN0P2U6cy5EaWN0LmVtcHR5KX1fZ2V0Qm91bmRpbmdCb3goZSl7aWYodGhpcy54ZmFEYXRhKXJldHVybiB0aGlzLnhmYURhdGEuYmJveDtjb25zdCB0PXRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoZSwhMCk7aWYoQXJyYXkuaXNBcnJheSh0KSYmND09PXQubGVuZ3RoKXtpZih0WzJdLXRbMF0hPTAmJnRbM10tdFsxXSE9MClyZXR1cm4gdDsoMCxuLndhcm4pKGBFbXB0eSAvJHtlfSBlbnRyeS5gKX1yZXR1cm4gbnVsbH1nZXQgbWVkaWFCb3goKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywibWVkaWFCb3giLHRoaXMuX2dldEJvdW5kaW5nQm94KCJNZWRpYUJveCIpfHxDKX1nZXQgY3JvcEJveCgpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJjcm9wQm94Iix0aGlzLl9nZXRCb3VuZGluZ0JveCgiQ3JvcEJveCIpfHx0aGlzLm1lZGlhQm94KX1nZXQgdXNlclVuaXQoKXtsZXQgZT10aGlzLnBhZ2VEaWN0LmdldCgiVXNlclVuaXQiKTsoIm51bWJlciIhPXR5cGVvZiBlfHxlPD0wKSYmKGU9MSk7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInVzZXJVbml0IixlKX1nZXQgdmlldygpe2NvbnN0e2Nyb3BCb3g6ZSxtZWRpYUJveDp0fT10aGlzO2xldCBhO2lmKGU9PT10fHwoMCxuLmlzQXJyYXlFcXVhbCkoZSx0KSlhPXQ7ZWxzZXtjb25zdCByPW4uVXRpbC5pbnRlcnNlY3QoZSx0KTtyJiZyWzJdLXJbMF0hPTAmJnJbM10tclsxXSE9MD9hPXI6KDAsbi53YXJuKSgiRW1wdHkgL0Nyb3BCb3ggYW5kIC9NZWRpYUJveCBpbnRlcnNlY3Rpb24uIil9cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInZpZXciLGF8fHQpfWdldCByb3RhdGUoKXtsZXQgZT10aGlzLl9nZXRJbmhlcml0YWJsZVByb3BlcnR5KCJSb3RhdGUiKXx8MDtlJTkwIT0wP2U9MDplPj0zNjA/ZSU9MzYwOmU8MCYmKGU9KGUlMzYwKzM2MCklMzYwKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywicm90YXRlIixlKX1fb25TdWJTdHJlYW1FcnJvcihlLHQsYSl7aWYoIXRoaXMuZXZhbHVhdG9yT3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgdDtlLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDpuLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yQ29udGVudFN1YlN0cmVhbX0pOygwLG4ud2FybikoYGdldENvbnRlbnRTdHJlYW0gLSBpZ25vcmluZyBzdWItc3RyZWFtICgke2F9KTogIiR7dH0iLmApfWdldENvbnRlbnRTdHJlYW0oZSl7cmV0dXJuIHRoaXMucGRmTWFuYWdlci5lbnN1cmUodGhpcywiY29udGVudCIpLnRoZW4oKHQ9PnQgaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0/dDpBcnJheS5pc0FycmF5KHQpP25ldyB5LlN0cmVhbXNTZXF1ZW5jZVN0cmVhbSh0LHRoaXMuX29uU3ViU3RyZWFtRXJyb3IuYmluZCh0aGlzLGUpKTpuZXcgZy5OdWxsU3RyZWFtKSl9Z2V0IHhmYURhdGEoKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywieGZhRGF0YSIsdGhpcy54ZmFGYWN0b3J5P3tiYm94OnRoaXMueGZhRmFjdG9yeS5nZXRCb3VuZGluZ0JveCh0aGlzLnBhZ2VJbmRleCl9Om51bGwpfWFzeW5jIHNhdmVOZXdBbm5vdGF0aW9ucyhlLHQsYSl7aWYodGhpcy54ZmFGYWN0b3J5KXRocm93IG5ldyBFcnJvcigiWEZBOiBDYW5ub3Qgc2F2ZSBuZXcgYW5ub3RhdGlvbnMuIik7Y29uc3Qgbj1uZXcgYi5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOmUscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGlkRmFjdG9yeTp0aGlzLl9sb2NhbElkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOnRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6dGhpcy5nbG9iYWxJbWFnZUNhY2hlLG9wdGlvbnM6dGhpcy5ldmFsdWF0b3JPcHRpb25zfSksaT10aGlzLnBhZ2VEaWN0LHM9dGhpcy5hbm5vdGF0aW9ucy5zbGljZSgpLG89YXdhaXQgci5Bbm5vdGF0aW9uRmFjdG9yeS5zYXZlTmV3QW5ub3RhdGlvbnMobix0LGEpO2Zvcihjb25zdHtyZWY6ZX1vZiBvLmFubm90YXRpb25zKXMucHVzaChlKTtjb25zdCBjPWkuZ2V0KCJBbm5vdHMiKTtpLnNldCgiQW5ub3RzIixzKTtjb25zdCBsPVtdO2xldCBoPW51bGw7dGhpcy54cmVmLmVuY3J5cHQmJihoPXRoaXMueHJlZi5lbmNyeXB0LmNyZWF0ZUNpcGhlclRyYW5zZm9ybSh0aGlzLnJlZi5udW0sdGhpcy5yZWYuZ2VuKSk7KDAsUy53cml0ZU9iamVjdCkodGhpcy5yZWYsaSxsLGgpO2MmJmkuc2V0KCJBbm5vdHMiLGMpO2NvbnN0IHU9by5kZXBlbmRlbmNpZXM7dS5wdXNoKHtyZWY6dGhpcy5yZWYsZGF0YTpsLmpvaW4oIiIpfSwuLi5vLmFubm90YXRpb25zKTtyZXR1cm4gdX1zYXZlKGUsdCxhKXtjb25zdCByPW5ldyBiLlBhcnRpYWxFdmFsdWF0b3Ioe3hyZWY6dGhpcy54cmVmLGhhbmRsZXI6ZSxwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgsaWRGYWN0b3J5OnRoaXMuX2xvY2FsSWRGYWN0b3J5LGZvbnRDYWNoZTp0aGlzLmZvbnRDYWNoZSxidWlsdEluQ01hcENhY2hlOnRoaXMuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsZ2xvYmFsSW1hZ2VDYWNoZTp0aGlzLmdsb2JhbEltYWdlQ2FjaGUsb3B0aW9uczp0aGlzLmV2YWx1YXRvck9wdGlvbnN9KTtyZXR1cm4gdGhpcy5fcGFyc2VkQW5ub3RhdGlvbnMudGhlbigoZnVuY3Rpb24oZSl7Y29uc3QgaT1bXTtmb3IoY29uc3QgcyBvZiBlKXMubXVzdEJlUHJpbnRlZChhKSYmaS5wdXNoKHMuc2F2ZShyLHQsYSkuY2F0Y2goKGZ1bmN0aW9uKGUpeygwLG4ud2FybikoYHNhdmUgLSBpZ25vcmluZyBhbm5vdGF0aW9uIGRhdGEgZHVyaW5nICIke3QubmFtZX0iIHRhc2s6ICIke2V9Ii5gKTtyZXR1cm4gbnVsbH0pKSk7cmV0dXJuIFByb21pc2UuYWxsKGkpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmZpbHRlcigoZT0+ISFlKSl9KSl9KSl9bG9hZFJlc291cmNlcyhlKXt0aGlzLnJlc291cmNlc1Byb21pc2V8fCh0aGlzLnJlc291cmNlc1Byb21pc2U9dGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCJyZXNvdXJjZXMiKSk7cmV0dXJuIHRoaXMucmVzb3VyY2VzUHJvbWlzZS50aGVuKCgoKT0+bmV3IHAuT2JqZWN0TG9hZGVyKHRoaXMucmVzb3VyY2VzLGUsdGhpcy54cmVmKS5sb2FkKCkpKX1nZXRPcGVyYXRvckxpc3Qoe2hhbmRsZXI6ZSxzaW5rOnQsdGFzazphLGludGVudDpzLGNhY2hlS2V5Om8sYW5ub3RhdGlvblN0b3JhZ2U6Yz1udWxsfSl7Y29uc3QgbD10aGlzLmdldENvbnRlbnRTdHJlYW0oZSksaD10aGlzLmxvYWRSZXNvdXJjZXMoWyJDb2xvclNwYWNlIiwiRXh0R1N0YXRlIiwiRm9udCIsIlBhdHRlcm4iLCJQcm9wZXJ0aWVzIiwiU2hhZGluZyIsIlhPYmplY3QiXSksdT1uZXcgYi5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOmUscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGlkRmFjdG9yeTp0aGlzLl9sb2NhbElkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOnRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6dGhpcy5nbG9iYWxJbWFnZUNhY2hlLG9wdGlvbnM6dGhpcy5ldmFsdWF0b3JPcHRpb25zfSksZD10aGlzLnhmYUZhY3Rvcnk/bnVsbDooMCxpLmdldE5ld0Fubm90YXRpb25zTWFwKShjKTtsZXQgZj1Qcm9taXNlLnJlc29sdmUobnVsbCk7aWYoZCl7Y29uc3QgZT1kLmdldCh0aGlzLnBhZ2VJbmRleCk7ZSYmKGY9ci5Bbm5vdGF0aW9uRmFjdG9yeS5wcmludE5ld0Fubm90YXRpb25zKHUsYSxlKSl9Y29uc3QgZz1Qcm9taXNlLmFsbChbbCxoXSkudGhlbigoKFtyXSk9Pntjb25zdCBuPW5ldyBtLk9wZXJhdG9yTGlzdChzLHQpO2Uuc2VuZCgiU3RhcnRSZW5kZXJQYWdlIix7dHJhbnNwYXJlbmN5OnUuaGFzQmxlbmRNb2Rlcyh0aGlzLnJlc291cmNlcyx0aGlzLm5vbkJsZW5kTW9kZXNTZXQpLHBhZ2VJbmRleDp0aGlzLnBhZ2VJbmRleCxjYWNoZUtleTpvfSk7cmV0dXJuIHUuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06cix0YXNrOmEscmVzb3VyY2VzOnRoaXMucmVzb3VyY2VzLG9wZXJhdG9yTGlzdDpufSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gbn0pKX0pKTtyZXR1cm4gUHJvbWlzZS5hbGwoW2csdGhpcy5fcGFyc2VkQW5ub3RhdGlvbnMsZl0pLnRoZW4oKGZ1bmN0aW9uKFtlLHQscl0pe3ImJih0PXQuY29uY2F0KHIpKTtpZigwPT09dC5sZW5ndGh8fHMmbi5SZW5kZXJpbmdJbnRlbnRGbGFnLkFOTk9UQVRJT05TX0RJU0FCTEUpe2UuZmx1c2goITApO3JldHVybntsZW5ndGg6ZS50b3RhbExlbmd0aH19Y29uc3QgaT0hIShzJm4uUmVuZGVyaW5nSW50ZW50RmxhZy5BTk5PVEFUSU9OU19GT1JNUyksbz0hIShzJm4uUmVuZGVyaW5nSW50ZW50RmxhZy5BTlkpLGw9ISEocyZuLlJlbmRlcmluZ0ludGVudEZsYWcuRElTUExBWSksaD0hIShzJm4uUmVuZGVyaW5nSW50ZW50RmxhZy5QUklOVCksZD1bXTtmb3IoY29uc3QgZSBvZiB0KShvfHxsJiZlLm11c3RCZVZpZXdlZChjKXx8aCYmZS5tdXN0QmVQcmludGVkKGMpKSYmZC5wdXNoKGUuZ2V0T3BlcmF0b3JMaXN0KHUsYSxzLGksYykuY2F0Y2goKGZ1bmN0aW9uKGUpeygwLG4ud2FybikoYGdldE9wZXJhdG9yTGlzdCAtIGlnbm9yaW5nIGFubm90YXRpb24gZGF0YSBkdXJpbmcgIiR7YS5uYW1lfSIgdGFzazogIiR7ZX0iLmApO3JldHVybntvcExpc3Q6bnVsbCxzZXBhcmF0ZUZvcm06ITEsc2VwYXJhdGVDYW52YXM6ITF9fSkpKTtyZXR1cm4gUHJvbWlzZS5hbGwoZCkudGhlbigoZnVuY3Rpb24odCl7bGV0IGE9ITEscj0hMTtmb3IoY29uc3R7b3BMaXN0Om4sc2VwYXJhdGVGb3JtOmksc2VwYXJhdGVDYW52YXM6c31vZiB0KXtlLmFkZE9wTGlzdChuKTtpJiYoYT1pKTtzJiYocj1zKX1lLmZsdXNoKCEwLHtmb3JtOmEsY2FudmFzOnJ9KTtyZXR1cm57bGVuZ3RoOmUudG90YWxMZW5ndGh9fSkpfSkpfWV4dHJhY3RUZXh0Q29udGVudCh7aGFuZGxlcjplLHRhc2s6dCxpbmNsdWRlTWFya2VkQ29udGVudDphLHNpbms6cixjb21iaW5lVGV4dEl0ZW1zOm59KXtjb25zdCBpPXRoaXMuZ2V0Q29udGVudFN0cmVhbShlKSxzPXRoaXMubG9hZFJlc291cmNlcyhbIkV4dEdTdGF0ZSIsIkZvbnQiLCJQcm9wZXJ0aWVzIiwiWE9iamVjdCJdKTtyZXR1cm4gUHJvbWlzZS5hbGwoW2ksc10pLnRoZW4oKChbaV0pPT5uZXcgYi5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOmUscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGlkRmFjdG9yeTp0aGlzLl9sb2NhbElkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOnRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6dGhpcy5nbG9iYWxJbWFnZUNhY2hlLG9wdGlvbnM6dGhpcy5ldmFsdWF0b3JPcHRpb25zfSkuZ2V0VGV4dENvbnRlbnQoe3N0cmVhbTppLHRhc2s6dCxyZXNvdXJjZXM6dGhpcy5yZXNvdXJjZXMsaW5jbHVkZU1hcmtlZENvbnRlbnQ6YSxjb21iaW5lVGV4dEl0ZW1zOm4sc2luazpyLHZpZXdCb3g6dGhpcy52aWV3fSkpKX1hc3luYyBnZXRTdHJ1Y3RUcmVlKCl7Y29uc3QgZT1hd2FpdCB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZygic3RydWN0VHJlZVJvb3QiKTtpZighZSlyZXR1cm4gbnVsbDtyZXR1cm4oYXdhaXQgdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCJfcGFyc2VTdHJ1Y3RUcmVlIixbZV0pKS5zZXJpYWxpemFibGV9X3BhcnNlU3RydWN0VHJlZShlKXtjb25zdCB0PW5ldyB3LlN0cnVjdFRyZWVQYWdlKGUsdGhpcy5wYWdlRGljdCk7dC5wYXJzZSgpO3JldHVybiB0fWFzeW5jIGdldEFubm90YXRpb25zRGF0YShlLHQsYSl7Y29uc3Qgcj1hd2FpdCB0aGlzLl9wYXJzZWRBbm5vdGF0aW9ucztpZigwPT09ci5sZW5ndGgpcmV0dXJuW107Y29uc3QgaT1bXSxzPVtdO2xldCBvO2NvbnN0IGM9ISEoYSZuLlJlbmRlcmluZ0ludGVudEZsYWcuQU5ZKSxsPSEhKGEmbi5SZW5kZXJpbmdJbnRlbnRGbGFnLkRJU1BMQVkpLGg9ISEoYSZuLlJlbmRlcmluZ0ludGVudEZsYWcuUFJJTlQpO2Zvcihjb25zdCBhIG9mIHIpe2NvbnN0IHI9Y3x8bCYmYS52aWV3YWJsZTsocnx8aCYmYS5wcmludGFibGUpJiZzLnB1c2goYS5kYXRhKTtpZihhLmhhc1RleHRDb250ZW50JiZyKXtvfHwobz1uZXcgYi5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOmUscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGlkRmFjdG9yeTp0aGlzLl9sb2NhbElkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOnRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6dGhpcy5nbG9iYWxJbWFnZUNhY2hlLG9wdGlvbnM6dGhpcy5ldmFsdWF0b3JPcHRpb25zfSkpO2kucHVzaChhLmV4dHJhY3RUZXh0Q29udGVudChvLHQsdGhpcy52aWV3KS5jYXRjaCgoZnVuY3Rpb24oZSl7KDAsbi53YXJuKShgZ2V0QW5ub3RhdGlvbnNEYXRhIC0gaWdub3JpbmcgdGV4dENvbnRlbnQgZHVyaW5nICIke3QubmFtZX0iIHRhc2s6ICIke2V9Ii5gKX0pKSl9fWF3YWl0IFByb21pc2UuYWxsKGkpO3JldHVybiBzfWdldCBhbm5vdGF0aW9ucygpe2NvbnN0IGU9dGhpcy5fZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSgiQW5ub3RzIik7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImFubm90YXRpb25zIixBcnJheS5pc0FycmF5KGUpP2U6W10pfWdldCBfcGFyc2VkQW5ub3RhdGlvbnMoKXtjb25zdCBlPXRoaXMucGRmTWFuYWdlci5lbnN1cmUodGhpcywiYW5ub3RhdGlvbnMiKS50aGVuKCgoKT0+e2NvbnN0IGU9W107Zm9yKGNvbnN0IHQgb2YgdGhpcy5hbm5vdGF0aW9ucyllLnB1c2goci5Bbm5vdGF0aW9uRmFjdG9yeS5jcmVhdGUodGhpcy54cmVmLHQsdGhpcy5wZGZNYW5hZ2VyLHRoaXMuX2xvY2FsSWRGYWN0b3J5LCExKS5jYXRjaCgoZnVuY3Rpb24oZSl7KDAsbi53YXJuKShgX3BhcnNlZEFubm90YXRpb25zOiAiJHtlfSIuYCk7cmV0dXJuIG51bGx9KSkpO3JldHVybiBQcm9taXNlLmFsbChlKS50aGVuKChmdW5jdGlvbihlKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIGU7Y29uc3QgdD1bXTtsZXQgYTtmb3IoY29uc3QgbiBvZiBlKWlmKG4paWYobiBpbnN0YW5jZW9mIHIuUG9wdXBBbm5vdGF0aW9uKXthfHwoYT1bXSk7YS5wdXNoKG4pfWVsc2UgdC5wdXNoKG4pO2EmJnQucHVzaCguLi5hKTtyZXR1cm4gdH0pKX0pKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiX3BhcnNlZEFubm90YXRpb25zIixlKX1nZXQganNBY3Rpb25zKCl7Y29uc3QgZT0oMCxpLmNvbGxlY3RBY3Rpb25zKSh0aGlzLnhyZWYsdGhpcy5wYWdlRGljdCxuLlBhZ2VBY3Rpb25FdmVudFR5cGUpO3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJqc0FjdGlvbnMiLGUpfX10LlBhZ2U9UGFnZTtjb25zdCB2PW5ldyBVaW50OEFycmF5KFszNyw4MCw2OCw3MCw0NV0pLEY9bmV3IFVpbnQ4QXJyYXkoWzExNSwxMTYsOTcsMTE0LDExNiwxMjAsMTE0LDEwMSwxMDJdKSxPPW5ldyBVaW50OEFycmF5KFsxMDEsMTEwLDEwMCwxMTEsOTgsMTA2XSk7ZnVuY3Rpb24gZmluZChlLHQsYT0xMDI0LHI9ITEpe2NvbnN0IG49dC5sZW5ndGgsaT1lLnBlZWtCeXRlcyhhKSxzPWkubGVuZ3RoLW47aWYoczw9MClyZXR1cm4hMTtpZihyKXtjb25zdCBhPW4tMTtsZXQgcj1pLmxlbmd0aC0xO2Zvcig7cj49YTspe2xldCBzPTA7Zm9yKDtzPG4mJmlbci1zXT09PXRbYS1zXTspcysrO2lmKHM+PW4pe2UucG9zKz1yLWE7cmV0dXJuITB9ci0tfX1lbHNle2xldCBhPTA7Zm9yKDthPD1zOyl7bGV0IHI9MDtmb3IoO3I8biYmaVthK3JdPT09dFtyXTspcisrO2lmKHI+PW4pe2UucG9zKz1hO3JldHVybiEwfWErK319cmV0dXJuITF9dC5QREZEb2N1bWVudD1jbGFzcyBQREZEb2N1bWVudHtjb25zdHJ1Y3RvcihlLHQpe2lmKHQubGVuZ3RoPD0wKXRocm93IG5ldyBuLkludmFsaWRQREZFeGNlcHRpb24oIlRoZSBQREYgZmlsZSBpcyBlbXB0eSwgaS5lLiBpdHMgc2l6ZSBpcyB6ZXJvIGJ5dGVzLiIpO3RoaXMucGRmTWFuYWdlcj1lO3RoaXMuc3RyZWFtPXQ7dGhpcy54cmVmPW5ldyBrLlhSZWYodCxlKTt0aGlzLl9wYWdlUHJvbWlzZXM9bmV3IE1hcDt0aGlzLl92ZXJzaW9uPW51bGw7Y29uc3QgYT17Zm9udDowfTt0aGlzLl9nbG9iYWxJZEZhY3Rvcnk9Y2xhc3N7c3RhdGljIGdldERvY0lkKCl7cmV0dXJuYGdfJHtlLmRvY0lkfWB9c3RhdGljIGNyZWF0ZUZvbnRJZCgpe3JldHVybiJmIisgKythLmZvbnR9c3RhdGljIGNyZWF0ZU9iaklkKCl7KDAsbi51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgY3JlYXRlT2JqSWRgIGNhbGxlZC4iKX1zdGF0aWMgZ2V0UGFnZU9iaklkKCl7KDAsbi51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgZ2V0UGFnZU9iaklkYCBjYWxsZWQuIil9fX1wYXJzZShlKXt0aGlzLnhyZWYucGFyc2UoZSk7dGhpcy5jYXRhbG9nPW5ldyBoLkNhdGFsb2codGhpcy5wZGZNYW5hZ2VyLHRoaXMueHJlZil9Z2V0IGxpbmVhcml6YXRpb24oKXtsZXQgZT1udWxsO3RyeXtlPWYuTGluZWFyaXphdGlvbi5jcmVhdGUodGhpcy5zdHJlYW0pfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi5pbmZvKShlKX1yZXR1cm4oMCxuLnNoYWRvdykodGhpcywibGluZWFyaXphdGlvbiIsZSl9Z2V0IHN0YXJ0WFJlZigpe2NvbnN0IGU9dGhpcy5zdHJlYW07bGV0IHQ9MDtpZih0aGlzLmxpbmVhcml6YXRpb24pe2UucmVzZXQoKTtmaW5kKGUsTykmJih0PWUucG9zKzYtZS5zdGFydCl9ZWxzZXtjb25zdCBhPTEwMjQscj1GLmxlbmd0aDtsZXQgbj0hMSxzPWUuZW5kO2Zvcig7IW4mJnM+MDspe3MtPWEtcjtzPDAmJihzPTApO2UucG9zPXM7bj1maW5kKGUsRixhLCEwKX1pZihuKXtlLnNraXAoOSk7bGV0IGE7ZG97YT1lLmdldEJ5dGUoKX13aGlsZSgoMCxpLmlzV2hpdGVTcGFjZSkoYSkpO2xldCByPSIiO2Zvcig7YT49MzImJmE8PTU3Oyl7cis9U3RyaW5nLmZyb21DaGFyQ29kZShhKTthPWUuZ2V0Qnl0ZSgpfXQ9cGFyc2VJbnQociwxMCk7aXNOYU4odCkmJih0PTApfX1yZXR1cm4oMCxuLnNoYWRvdykodGhpcywic3RhcnRYUmVmIix0KX1jaGVja0hlYWRlcigpe2NvbnN0IGU9dGhpcy5zdHJlYW07ZS5yZXNldCgpO2lmKCFmaW5kKGUsdikpcmV0dXJuO2UubW92ZVN0YXJ0KCk7ZS5za2lwKHYubGVuZ3RoKTtsZXQgdCxhPSIiO2Zvcig7KHQ9ZS5nZXRCeXRlKCkpPjMyJiZhLmxlbmd0aDw3OylhKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpO2kuUERGX1ZFUlNJT05fUkVHRVhQLnRlc3QoYSk/dGhpcy5fdmVyc2lvbj1hOigwLG4ud2FybikoYEludmFsaWQgUERGIGhlYWRlciB2ZXJzaW9uOiAke2F9YCl9cGFyc2VTdGFydFhSZWYoKXt0aGlzLnhyZWYuc2V0U3RhcnRYUmVmKHRoaXMuc3RhcnRYUmVmKX1nZXQgbnVtUGFnZXMoKXtsZXQgZT0wO2U9dGhpcy5jYXRhbG9nLmhhc0FjdHVhbE51bVBhZ2VzP3RoaXMuY2F0YWxvZy5udW1QYWdlczp0aGlzLnhmYUZhY3Rvcnk/dGhpcy54ZmFGYWN0b3J5LmdldE51bVBhZ2VzKCk6dGhpcy5saW5lYXJpemF0aW9uP3RoaXMubGluZWFyaXphdGlvbi5udW1QYWdlczp0aGlzLmNhdGFsb2cubnVtUGFnZXM7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIm51bVBhZ2VzIixlKX1faGFzT25seURvY3VtZW50U2lnbmF0dXJlcyhlLHQ9MCl7cmV0dXJuISFBcnJheS5pc0FycmF5KGUpJiZlLmV2ZXJ5KChlPT57aWYoISgoZT10aGlzLnhyZWYuZmV0Y2hJZlJlZihlKSlpbnN0YW5jZW9mIHMuRGljdCkpcmV0dXJuITE7aWYoZS5oYXMoIktpZHMiKSl7aWYoKyt0PjEwKXsoMCxuLndhcm4pKCJfaGFzT25seURvY3VtZW50U2lnbmF0dXJlczogbWF4aW11bSByZWN1cnNpb24gZGVwdGggcmVhY2hlZCIpO3JldHVybiExfXJldHVybiB0aGlzLl9oYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzKGUuZ2V0KCJLaWRzIiksdCl9Y29uc3QgYT0oMCxzLmlzTmFtZSkoZS5nZXQoIkZUIiksIlNpZyIpLHI9ZS5nZXQoIlJlY3QiKSxpPUFycmF5LmlzQXJyYXkocikmJnIuZXZlcnkoKGU9PjA9PT1lKSk7cmV0dXJuIGEmJml9KSl9Z2V0IF94ZmFTdHJlYW1zKCl7Y29uc3QgZT10aGlzLmNhdGFsb2cuYWNyb0Zvcm07aWYoIWUpcmV0dXJuIG51bGw7Y29uc3QgdD1lLmdldCgiWEZBIiksYT17InhkcDp4ZHAiOiIiLHRlbXBsYXRlOiIiLGRhdGFzZXRzOiIiLGNvbmZpZzoiIixjb25uZWN0aW9uU2V0OiIiLGxvY2FsZVNldDoiIixzdHlsZXNoZWV0OiIiLCIveGRwOnhkcCI6IiJ9O2lmKHQgaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0mJiF0LmlzRW1wdHkpe2FbInhkcDp4ZHAiXT10O3JldHVybiBhfWlmKCFBcnJheS5pc0FycmF5KHQpfHwwPT09dC5sZW5ndGgpcmV0dXJuIG51bGw7Zm9yKGxldCBlPTAscj10Lmxlbmd0aDtlPHI7ZSs9Mil7bGV0IG47bj0wPT09ZT8ieGRwOnhkcCI6ZT09PXItMj8iL3hkcDp4ZHAiOnRbZV07aWYoIWEuaGFzT3duUHJvcGVydHkobikpY29udGludWU7Y29uc3QgaT10aGlzLnhyZWYuZmV0Y2hJZlJlZih0W2UrMV0pO2kgaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0mJiFpLmlzRW1wdHkmJihhW25dPWkpfXJldHVybiBhfWdldCB4ZmFEYXRhc2V0cygpe2NvbnN0IGU9dGhpcy5feGZhU3RyZWFtcztpZighZSlyZXR1cm4oMCxuLnNoYWRvdykodGhpcywieGZhRGF0YXNldHMiLG51bGwpO2Zvcihjb25zdCB0IG9mWyJkYXRhc2V0cyIsInhkcDp4ZHAiXSl7Y29uc3QgYT1lW3RdO2lmKGEpdHJ5e2NvbnN0IGU9e1t0XTooMCxuLnN0cmluZ1RvVVRGOFN0cmluZykoYS5nZXRTdHJpbmcoKSl9O3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJ4ZmFEYXRhc2V0cyIsbmV3IGQuRGF0YXNldFJlYWRlcihlKSl9Y2F0Y2goZSl7KDAsbi53YXJuKSgiWEZBIC0gSW52YWxpZCB1dGYtOCBzdHJpbmcuIik7YnJlYWt9fXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJ4ZmFEYXRhc2V0cyIsbnVsbCl9Z2V0IHhmYURhdGEoKXtjb25zdCBlPXRoaXMuX3hmYVN0cmVhbXM7aWYoIWUpcmV0dXJuIG51bGw7Y29uc3QgdD1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcihjb25zdFthLHJdb2YgT2JqZWN0LmVudHJpZXMoZSkpaWYocil0cnl7dFthXT0oMCxuLnN0cmluZ1RvVVRGOFN0cmluZykoci5nZXRTdHJpbmcoKSl9Y2F0Y2goZSl7KDAsbi53YXJuKSgiWEZBIC0gSW52YWxpZCB1dGYtOCBzdHJpbmcuIik7cmV0dXJuIG51bGx9cmV0dXJuIHR9Z2V0IHhmYUZhY3RvcnkoKXtsZXQgZTt0aGlzLnBkZk1hbmFnZXIuZW5hYmxlWGZhJiZ0aGlzLmNhdGFsb2cubmVlZHNSZW5kZXJpbmcmJnRoaXMuZm9ybUluZm8uaGFzWGZhJiYhdGhpcy5mb3JtSW5mby5oYXNBY3JvRm9ybSYmKGU9dGhpcy54ZmFEYXRhKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywieGZhRmFjdG9yeSIsZT9uZXcgeC5YRkFGYWN0b3J5KGUpOm51bGwpfWdldCBpc1B1cmVYZmEoKXtyZXR1cm4hIXRoaXMueGZhRmFjdG9yeSYmdGhpcy54ZmFGYWN0b3J5LmlzVmFsaWQoKX1nZXQgaHRtbEZvclhmYSgpe3JldHVybiB0aGlzLnhmYUZhY3Rvcnk/dGhpcy54ZmFGYWN0b3J5LmdldFBhZ2VzKCk6bnVsbH1hc3luYyBsb2FkWGZhSW1hZ2VzKCl7Y29uc3QgZT1hd2FpdCB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZygieGZhSW1hZ2VzIik7aWYoIWUpcmV0dXJuO2NvbnN0IHQ9ZS5nZXRLZXlzKCksYT1uZXcgcC5PYmplY3RMb2FkZXIoZSx0LHRoaXMueHJlZik7YXdhaXQgYS5sb2FkKCk7Y29uc3Qgcj1uZXcgTWFwO2Zvcihjb25zdCBhIG9mIHQpe2NvbnN0IHQ9ZS5nZXQoYSk7dCBpbnN0YW5jZW9mIGMuQmFzZVN0cmVhbSYmci5zZXQoYSx0LmdldEJ5dGVzKCkpfXRoaXMueGZhRmFjdG9yeS5zZXRJbWFnZXMocil9YXN5bmMgbG9hZFhmYUZvbnRzKGUsdCl7Y29uc3QgYT1hd2FpdCB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZygiYWNyb0Zvcm0iKTtpZighYSlyZXR1cm47Y29uc3Qgcj1hd2FpdCBhLmdldEFzeW5jKCJEUiIpO2lmKCEociBpbnN0YW5jZW9mIHMuRGljdCkpcmV0dXJuO2NvbnN0IGM9bmV3IHAuT2JqZWN0TG9hZGVyKHIsWyJGb250Il0sdGhpcy54cmVmKTthd2FpdCBjLmxvYWQoKTtjb25zdCBsPXIuZ2V0KCJGb250Iik7aWYoIShsIGluc3RhbmNlb2Ygcy5EaWN0KSlyZXR1cm47Y29uc3QgaD1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5wZGZNYW5hZ2VyLmV2YWx1YXRvck9wdGlvbnMpO2gudXNlU3lzdGVtRm9udHM9ITE7Y29uc3QgdT1uZXcgYi5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOmUscGFnZUluZGV4Oi0xLGlkRmFjdG9yeTp0aGlzLl9nbG9iYWxJZEZhY3RvcnksZm9udENhY2hlOnRoaXMuY2F0YWxvZy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmNhdGFsb2cuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dGhpcy5jYXRhbG9nLnN0YW5kYXJkRm9udERhdGFDYWNoZSxvcHRpb25zOmh9KSxkPW5ldyBtLk9wZXJhdG9yTGlzdCxmPVtdLGc9e2dldCBmb250KCl7cmV0dXJuIGYuYXQoLTEpfSxzZXQgZm9udChlKXtmLnB1c2goZSl9LGNsb25lKCl7cmV0dXJuIHRoaXN9fSx5PW5ldyBNYXA7bC5mb3JFYWNoKCgoZSx0KT0+e3kuc2V0KGUsdCl9KSk7Y29uc3Qgdz1bXTtmb3IoY29uc3RbZSxhXW9mIHkpe2NvbnN0IG89YS5nZXQoIkZvbnREZXNjcmlwdG9yIik7aWYoIShvIGluc3RhbmNlb2Ygcy5EaWN0KSljb250aW51ZTtsZXQgYz1vLmdldCgiRm9udEZhbWlseSIpO2M9Yy5yZXBsYWNlKC9bIF0rKFxkKS9nLCIkMSIpO2NvbnN0IGw9e2ZvbnRGYW1pbHk6Yyxmb250V2VpZ2h0Om8uZ2V0KCJGb250V2VpZ2h0IiksaXRhbGljQW5nbGU6LW8uZ2V0KCJJdGFsaWNBbmdsZSIpfTsoMCxpLnZhbGlkYXRlQ1NTRm9udCkobCkmJncucHVzaCh1LmhhbmRsZVNldEZvbnQocixbcy5OYW1lLmdldChlKSwxXSxudWxsLGQsdCxnLG51bGwsbCkuY2F0Y2goKGZ1bmN0aW9uKGUpeygwLG4ud2FybikoYGxvYWRYZmFGb250czogIiR7ZX0iLmApO3JldHVybiBudWxsfSkpKX1hd2FpdCBQcm9taXNlLmFsbCh3KTtjb25zdCBTPXRoaXMueGZhRmFjdG9yeS5zZXRGb250cyhmKTtpZighUylyZXR1cm47aC5pZ25vcmVFcnJvcnM9ITA7dy5sZW5ndGg9MDtmLmxlbmd0aD0wO2NvbnN0IHg9bmV3IFNldDtmb3IoY29uc3QgZSBvZiBTKSgwLG8uZ2V0WGZhRm9udE5hbWUpKGAke2V9LVJlZ3VsYXJgKXx8eC5hZGQoZSk7eC5zaXplJiZTLnB1c2goIlBkZkpTLUZhbGxiYWNrIik7Zm9yKGNvbnN0IGUgb2YgUylpZigheC5oYXMoZSkpZm9yKGNvbnN0IGEgb2Zbe25hbWU6IlJlZ3VsYXIiLGZvbnRXZWlnaHQ6NDAwLGl0YWxpY0FuZ2xlOjB9LHtuYW1lOiJCb2xkIixmb250V2VpZ2h0OjcwMCxpdGFsaWNBbmdsZTowfSx7bmFtZToiSXRhbGljIixmb250V2VpZ2h0OjQwMCxpdGFsaWNBbmdsZToxMn0se25hbWU6IkJvbGRJdGFsaWMiLGZvbnRXZWlnaHQ6NzAwLGl0YWxpY0FuZ2xlOjEyfV0pe2NvbnN0IGk9YCR7ZX0tJHthLm5hbWV9YCxjPSgwLG8uZ2V0WGZhRm9udERpY3QpKGkpO3cucHVzaCh1LmhhbmRsZVNldEZvbnQocixbcy5OYW1lLmdldChpKSwxXSxudWxsLGQsdCxnLGMse2ZvbnRGYW1pbHk6ZSxmb250V2VpZ2h0OmEuZm9udFdlaWdodCxpdGFsaWNBbmdsZTphLml0YWxpY0FuZ2xlfSkuY2F0Y2goKGZ1bmN0aW9uKGUpeygwLG4ud2FybikoYGxvYWRYZmFGb250czogIiR7ZX0iLmApO3JldHVybiBudWxsfSkpKX1hd2FpdCBQcm9taXNlLmFsbCh3KTt0aGlzLnhmYUZhY3RvcnkuYXBwZW5kRm9udHMoZix4KX1hc3luYyBzZXJpYWxpemVYZmFEYXRhKGUpe3JldHVybiB0aGlzLnhmYUZhY3Rvcnk/dGhpcy54ZmFGYWN0b3J5LnNlcmlhbGl6ZURhdGEoZSk6bnVsbH1nZXQgdmVyc2lvbigpe3JldHVybiB0aGlzLmNhdGFsb2cudmVyc2lvbnx8dGhpcy5fdmVyc2lvbn1nZXQgZm9ybUluZm8oKXtjb25zdCBlPXtoYXNGaWVsZHM6ITEsaGFzQWNyb0Zvcm06ITEsaGFzWGZhOiExLGhhc1NpZ25hdHVyZXM6ITF9LHQ9dGhpcy5jYXRhbG9nLmFjcm9Gb3JtO2lmKCF0KXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJmb3JtSW5mbyIsZSk7dHJ5e2NvbnN0IGE9dC5nZXQoIkZpZWxkcyIpLHI9QXJyYXkuaXNBcnJheShhKSYmYS5sZW5ndGg+MDtlLmhhc0ZpZWxkcz1yO2NvbnN0IG49dC5nZXQoIlhGQSIpO2UuaGFzWGZhPUFycmF5LmlzQXJyYXkobikmJm4ubGVuZ3RoPjB8fG4gaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0mJiFuLmlzRW1wdHk7Y29uc3QgaT0hISgxJnQuZ2V0KCJTaWdGbGFncyIpKSxzPWkmJnRoaXMuX2hhc09ubHlEb2N1bWVudFNpZ25hdHVyZXMoYSk7ZS5oYXNBY3JvRm9ybT1yJiYhcztlLmhhc1NpZ25hdHVyZXM9aX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLG4ud2FybikoYENhbm5vdCBmZXRjaCBmb3JtIGluZm9ybWF0aW9uOiAiJHtlfSIuYCl9cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImZvcm1JbmZvIixlKX1nZXQgZG9jdW1lbnRJbmZvKCl7Y29uc3QgZT17UERGRm9ybWF0VmVyc2lvbjp0aGlzLnZlcnNpb24sTGFuZ3VhZ2U6dGhpcy5jYXRhbG9nLmxhbmcsRW5jcnlwdEZpbHRlck5hbWU6dGhpcy54cmVmLmVuY3J5cHQ/dGhpcy54cmVmLmVuY3J5cHQuZmlsdGVyTmFtZTpudWxsLElzTGluZWFyaXplZDohIXRoaXMubGluZWFyaXphdGlvbixJc0Fjcm9Gb3JtUHJlc2VudDp0aGlzLmZvcm1JbmZvLmhhc0Fjcm9Gb3JtLElzWEZBUHJlc2VudDp0aGlzLmZvcm1JbmZvLmhhc1hmYSxJc0NvbGxlY3Rpb25QcmVzZW50OiEhdGhpcy5jYXRhbG9nLmNvbGxlY3Rpb24sSXNTaWduYXR1cmVzUHJlc2VudDp0aGlzLmZvcm1JbmZvLmhhc1NpZ25hdHVyZXN9O2xldCB0O3RyeXt0PXRoaXMueHJlZi50cmFpbGVyLmdldCgiSW5mbyIpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi5pbmZvKSgiVGhlIGRvY3VtZW50IGluZm9ybWF0aW9uIGRpY3Rpb25hcnkgaXMgaW52YWxpZC4iKX1pZighKHQgaW5zdGFuY2VvZiBzLkRpY3QpKXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJkb2N1bWVudEluZm8iLGUpO2Zvcihjb25zdCBhIG9mIHQuZ2V0S2V5cygpKXtjb25zdCByPXQuZ2V0KGEpO3N3aXRjaChhKXtjYXNlIlRpdGxlIjpjYXNlIkF1dGhvciI6Y2FzZSJTdWJqZWN0IjpjYXNlIktleXdvcmRzIjpjYXNlIkNyZWF0b3IiOmNhc2UiUHJvZHVjZXIiOmNhc2UiQ3JlYXRpb25EYXRlIjpjYXNlIk1vZERhdGUiOmlmKCJzdHJpbmciPT10eXBlb2Ygcil7ZVthXT0oMCxuLnN0cmluZ1RvUERGU3RyaW5nKShyKTtjb250aW51ZX1icmVhaztjYXNlIlRyYXBwZWQiOmlmKHIgaW5zdGFuY2VvZiBzLk5hbWUpe2VbYV09cjtjb250aW51ZX1icmVhaztkZWZhdWx0OmxldCB0O3N3aXRjaCh0eXBlb2Ygcil7Y2FzZSJzdHJpbmciOnQ9KDAsbi5zdHJpbmdUb1BERlN0cmluZykocik7YnJlYWs7Y2FzZSJudW1iZXIiOmNhc2UiYm9vbGVhbiI6dD1yO2JyZWFrO2RlZmF1bHQ6ciBpbnN0YW5jZW9mIHMuTmFtZSYmKHQ9cil9aWYodm9pZCAwPT09dCl7KDAsbi53YXJuKShgQmFkIHZhbHVlLCBmb3IgY3VzdG9tIGtleSAiJHthfSIsIGluIEluZm86ICR7cn0uYCk7Y29udGludWV9ZS5DdXN0b218fChlLkN1c3RvbT1PYmplY3QuY3JlYXRlKG51bGwpKTtlLkN1c3RvbVthXT10O2NvbnRpbnVlfSgwLG4ud2FybikoYEJhZCB2YWx1ZSwgZm9yIGtleSAiJHthfSIsIGluIEluZm86ICR7cn0uYCl9cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImRvY3VtZW50SW5mbyIsZSl9Z2V0IGZpbmdlcnByaW50cygpe2Z1bmN0aW9uIHZhbGlkYXRlKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmZS5sZW5ndGg+MCYmIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIiE9PWV9ZnVuY3Rpb24gaGV4U3RyaW5nKGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IGEgb2YgZSl7Y29uc3QgZT1hLnRvU3RyaW5nKDE2KTt0LnB1c2goZS5wYWRTdGFydCgyLCIwIikpfXJldHVybiB0LmpvaW4oIiIpfWNvbnN0IGU9dGhpcy54cmVmLnRyYWlsZXIuZ2V0KCJJRCIpO2xldCB0LGE7aWYoQXJyYXkuaXNBcnJheShlKSYmdmFsaWRhdGUoZVswXSkpe3Q9KDAsbi5zdHJpbmdUb0J5dGVzKShlWzBdKTtlWzFdIT09ZVswXSYmdmFsaWRhdGUoZVsxXSkmJihhPSgwLG4uc3RyaW5nVG9CeXRlcykoZVsxXSkpfWVsc2UgdD0oMCxsLmNhbGN1bGF0ZU1ENSkodGhpcy5zdHJlYW0uZ2V0Qnl0ZVJhbmdlKDAsMTAyNCksMCwxMDI0KTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiZmluZ2VycHJpbnRzIixbaGV4U3RyaW5nKHQpLGE/aGV4U3RyaW5nKGEpOm51bGxdKX1hc3luYyBfZ2V0TGluZWFyaXphdGlvblBhZ2UoZSl7Y29uc3R7Y2F0YWxvZzp0LGxpbmVhcml6YXRpb246YSx4cmVmOnJ9PXRoaXMsaT1zLlJlZi5nZXQoYS5vYmplY3ROdW1iZXJGaXJzdCwwKTt0cnl7Y29uc3QgZT1hd2FpdCByLmZldGNoQXN5bmMoaSk7aWYoZSBpbnN0YW5jZW9mIHMuRGljdCl7bGV0IGE9ZS5nZXRSYXcoIlR5cGUiKTthIGluc3RhbmNlb2Ygcy5SZWYmJihhPWF3YWl0IHIuZmV0Y2hBc3luYyhhKSk7aWYoKDAscy5pc05hbWUpKGEsIlBhZ2UiKXx8IWUuaGFzKCJUeXBlIikmJiFlLmhhcygiS2lkcyIpKXt0LnBhZ2VLaWRzQ291bnRDYWNoZS5oYXMoaSl8fHQucGFnZUtpZHNDb3VudENhY2hlLnB1dChpLDEpO3QucGFnZUluZGV4Q2FjaGUuaGFzKGkpfHx0LnBhZ2VJbmRleENhY2hlLnB1dChpLDApO3JldHVybltlLGldfX10aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVGhlIExpbmVhcml6YXRpb24gZGljdGlvbmFyeSBkb2Vzbid0IHBvaW50IHRvIGEgdmFsaWQgUGFnZSBkaWN0aW9uYXJ5LiIpfWNhdGNoKGEpeygwLG4ud2FybikoYF9nZXRMaW5lYXJpemF0aW9uUGFnZTogIiR7YS5tZXNzYWdlfSIuYCk7cmV0dXJuIHQuZ2V0UGFnZURpY3QoZSl9fWdldFBhZ2UoZSl7Y29uc3QgdD10aGlzLl9wYWdlUHJvbWlzZXMuZ2V0KGUpO2lmKHQpcmV0dXJuIHQ7Y29uc3R7Y2F0YWxvZzphLGxpbmVhcml6YXRpb246cix4ZmFGYWN0b3J5Om59PXRoaXM7bGV0IGk7aT1uP1Byb21pc2UucmVzb2x2ZShbcy5EaWN0LmVtcHR5LG51bGxdKTpyJiZyLnBhZ2VGaXJzdD09PWU/dGhpcy5fZ2V0TGluZWFyaXphdGlvblBhZ2UoZSk6YS5nZXRQYWdlRGljdChlKTtpPWkudGhlbigoKFt0LHJdKT0+bmV3IFBhZ2Uoe3BkZk1hbmFnZXI6dGhpcy5wZGZNYW5hZ2VyLHhyZWY6dGhpcy54cmVmLHBhZ2VJbmRleDplLHBhZ2VEaWN0OnQscmVmOnIsZ2xvYmFsSWRGYWN0b3J5OnRoaXMuX2dsb2JhbElkRmFjdG9yeSxmb250Q2FjaGU6YS5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTphLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOmEuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6YS5nbG9iYWxJbWFnZUNhY2hlLG5vbkJsZW5kTW9kZXNTZXQ6YS5ub25CbGVuZE1vZGVzU2V0LHhmYUZhY3Rvcnk6bn0pKSk7dGhpcy5fcGFnZVByb21pc2VzLnNldChlLGkpO3JldHVybiBpfWFzeW5jIGNoZWNrRmlyc3RQYWdlKGU9ITEpe2lmKCFlKXRyeXthd2FpdCB0aGlzLmdldFBhZ2UoMCl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIGkuWFJlZkVudHJ5RXhjZXB0aW9uKXt0aGlzLl9wYWdlUHJvbWlzZXMuZGVsZXRlKDApO2F3YWl0IHRoaXMuY2xlYW51cCgpO3Rocm93IG5ldyBpLlhSZWZQYXJzZUV4Y2VwdGlvbn19fWFzeW5jIGNoZWNrTGFzdFBhZ2UoZT0hMSl7Y29uc3R7Y2F0YWxvZzp0LHBkZk1hbmFnZXI6YX09dGhpczt0LnNldEFjdHVhbE51bVBhZ2VzKCk7bGV0IHI7dHJ5e2F3YWl0IFByb21pc2UuYWxsKFthLmVuc3VyZURvYygieGZhRmFjdG9yeSIpLGEuZW5zdXJlRG9jKCJsaW5lYXJpemF0aW9uIiksYS5lbnN1cmVDYXRhbG9nKCJudW1QYWdlcyIpXSk7aWYodGhpcy54ZmFGYWN0b3J5KXJldHVybjtyPXRoaXMubGluZWFyaXphdGlvbj90aGlzLmxpbmVhcml6YXRpb24ubnVtUGFnZXM6dC5udW1QYWdlcztpZighTnVtYmVyLmlzSW50ZWdlcihyKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiUGFnZSBjb3VudCBpcyBub3QgYW4gaW50ZWdlci4iKTtpZihyPD0xKXJldHVybjthd2FpdCB0aGlzLmdldFBhZ2Uoci0xKX1jYXRjaChzKXt0aGlzLl9wYWdlUHJvbWlzZXMuZGVsZXRlKHItMSk7YXdhaXQgdGhpcy5jbGVhbnVwKCk7aWYocyBpbnN0YW5jZW9mIGkuWFJlZkVudHJ5RXhjZXB0aW9uJiYhZSl0aHJvdyBuZXcgaS5YUmVmUGFyc2VFeGNlcHRpb247KDAsbi53YXJuKShgY2hlY2tMYXN0UGFnZSAtIGludmFsaWQgL1BhZ2VzIHRyZWUgL0NvdW50OiAke3J9LmApO2xldCBvO3RyeXtvPWF3YWl0IHQuZ2V0QWxsUGFnZURpY3RzKGUpfWNhdGNoKGEpe2lmKGEgaW5zdGFuY2VvZiBpLlhSZWZFbnRyeUV4Y2VwdGlvbiYmIWUpdGhyb3cgbmV3IGkuWFJlZlBhcnNlRXhjZXB0aW9uO3Quc2V0QWN0dWFsTnVtUGFnZXMoMSk7cmV0dXJufWZvcihjb25zdFtlLFtyLG5dXW9mIG8pe2xldCBpO2lmKHIgaW5zdGFuY2VvZiBFcnJvcil7aT1Qcm9taXNlLnJlamVjdChyKTtpLmNhdGNoKCgoKT0+e30pKX1lbHNlIGk9UHJvbWlzZS5yZXNvbHZlKG5ldyBQYWdlKHtwZGZNYW5hZ2VyOmEseHJlZjp0aGlzLnhyZWYscGFnZUluZGV4OmUscGFnZURpY3Q6cixyZWY6bixnbG9iYWxJZEZhY3Rvcnk6dGhpcy5fZ2xvYmFsSWRGYWN0b3J5LGZvbnRDYWNoZTp0LmZvbnRDYWNoZSxidWlsdEluQ01hcENhY2hlOnQuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dC5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsZ2xvYmFsSW1hZ2VDYWNoZTp0Lmdsb2JhbEltYWdlQ2FjaGUsbm9uQmxlbmRNb2Rlc1NldDp0Lm5vbkJsZW5kTW9kZXNTZXQseGZhRmFjdG9yeTpudWxsfSkpO3RoaXMuX3BhZ2VQcm9taXNlcy5zZXQoZSxpKX10LnNldEFjdHVhbE51bVBhZ2VzKG8uc2l6ZSl9fWZvbnRGYWxsYmFjayhlLHQpe3JldHVybiB0aGlzLmNhdGFsb2cuZm9udEZhbGxiYWNrKGUsdCl9YXN5bmMgY2xlYW51cChlPSExKXtyZXR1cm4gdGhpcy5jYXRhbG9nP3RoaXMuY2F0YWxvZy5jbGVhbnVwKGUpOigwLHUuY2xlYXJHbG9iYWxDYWNoZXMpKCl9X2NvbGxlY3RGaWVsZE9iamVjdHMoZSx0LGEpe2NvbnN0IGk9dGhpcy54cmVmLmZldGNoSWZSZWYodCk7aWYoaS5oYXMoIlQiKSl7Y29uc3QgdD0oMCxuLnN0cmluZ1RvUERGU3RyaW5nKShpLmdldCgiVCIpKTtlPSIiPT09ZT90OmAke2V9LiR7dH1gfWEuaGFzKGUpfHxhLnNldChlLFtdKTthLmdldChlKS5wdXNoKHIuQW5ub3RhdGlvbkZhY3RvcnkuY3JlYXRlKHRoaXMueHJlZix0LHRoaXMucGRmTWFuYWdlcix0aGlzLl9sb2NhbElkRmFjdG9yeSwhMCkudGhlbigoZT0+ZSYmZS5nZXRGaWVsZE9iamVjdCgpKSkuY2F0Y2goKGZ1bmN0aW9uKGUpeygwLG4ud2FybikoYF9jb2xsZWN0RmllbGRPYmplY3RzOiAiJHtlfSIuYCk7cmV0dXJuIG51bGx9KSkpO2lmKGkuaGFzKCJLaWRzIikpe2NvbnN0IHQ9aS5nZXQoIktpZHMiKTtmb3IoY29uc3QgciBvZiB0KXRoaXMuX2NvbGxlY3RGaWVsZE9iamVjdHMoZSxyLGEpfX1nZXQgZmllbGRPYmplY3RzKCl7aWYoIXRoaXMuZm9ybUluZm8uaGFzRmllbGRzKXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJmaWVsZE9iamVjdHMiLFByb21pc2UucmVzb2x2ZShudWxsKSk7Y29uc3QgZT1PYmplY3QuY3JlYXRlKG51bGwpLHQ9bmV3IE1hcDtmb3IoY29uc3QgZSBvZiB0aGlzLmNhdGFsb2cuYWNyb0Zvcm0uZ2V0KCJGaWVsZHMiKSl0aGlzLl9jb2xsZWN0RmllbGRPYmplY3RzKCIiLGUsdCk7Y29uc3QgYT1bXTtmb3IoY29uc3RbcixuXW9mIHQpYS5wdXNoKFByb21pc2UuYWxsKG4pLnRoZW4oKHQ9PnsodD10LmZpbHRlcigoZT0+ISFlKSkpLmxlbmd0aD4wJiYoZVtyXT10KX0pKSk7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImZpZWxkT2JqZWN0cyIsUHJvbWlzZS5hbGwoYSkudGhlbigoKCk9PmUpKSl9Z2V0IGhhc0pTQWN0aW9ucygpe2NvbnN0IGU9dGhpcy5wZGZNYW5hZ2VyLmVuc3VyZURvYygiX3BhcnNlSGFzSlNBY3Rpb25zIik7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImhhc0pTQWN0aW9ucyIsZSl9YXN5bmMgX3BhcnNlSGFzSlNBY3Rpb25zKCl7Y29uc3RbZSx0XT1hd2FpdCBQcm9taXNlLmFsbChbdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coImpzQWN0aW9ucyIpLHRoaXMucGRmTWFuYWdlci5lbnN1cmVEb2MoImZpZWxkT2JqZWN0cyIpXSk7cmV0dXJuISFlfHwhIXQmJk9iamVjdC52YWx1ZXModCkuc29tZSgoZT0+ZS5zb21lKChlPT5udWxsIT09ZS5hY3Rpb25zKSkpKX1nZXQgY2FsY3VsYXRpb25PcmRlcklkcygpe2NvbnN0IGU9dGhpcy5jYXRhbG9nLmFjcm9Gb3JtO2lmKCFlfHwhZS5oYXMoIkNPIikpcmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImNhbGN1bGF0aW9uT3JkZXJJZHMiLG51bGwpO2NvbnN0IHQ9ZS5nZXQoIkNPIik7aWYoIUFycmF5LmlzQXJyYXkodCl8fDA9PT10Lmxlbmd0aClyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiY2FsY3VsYXRpb25PcmRlcklkcyIsbnVsbCk7Y29uc3QgYT1bXTtmb3IoY29uc3QgZSBvZiB0KWUgaW5zdGFuY2VvZiBzLlJlZiYmYS5wdXNoKGUudG9TdHJpbmcoKSk7cmV0dXJuIDA9PT1hLmxlbmd0aD8oMCxuLnNoYWRvdykodGhpcywiY2FsY3VsYXRpb25PcmRlcklkcyIsbnVsbCk6KDAsbi5zaGFkb3cpKHRoaXMsImNhbGN1bGF0aW9uT3JkZXJJZHMiLGEpfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Qb3B1cEFubm90YXRpb249dC5NYXJrdXBBbm5vdGF0aW9uPXQuQW5ub3RhdGlvbkZhY3Rvcnk9dC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGU9dC5Bbm5vdGF0aW9uPXZvaWQgMDt0LmdldFF1YWRQb2ludHM9Z2V0UXVhZFBvaW50czt2YXIgcj1hKDIpLG49YSg0KSxpPWEoMTEpLHM9YSgzKSxvPWEoNjMpLGM9YSg1KSxsPWEoNTgpLGg9YSg2NyksdT1hKDEyKSxkPWEoNzApLGY9YSg3MyksZz1hKDYwKSxwPWEoOCksbT1hKDc0KTt0LkFubm90YXRpb25GYWN0b3J5PWNsYXNzIEFubm90YXRpb25GYWN0b3J5e3N0YXRpYyBjcmVhdGUoZSx0LGEscixuKXtyZXR1cm4gUHJvbWlzZS5hbGwoW2EuZW5zdXJlQ2F0YWxvZygiYWNyb0Zvcm0iKSxhLmVuc3VyZUNhdGFsb2coImJhc2VVcmwiKSxhLmVuc3VyZUNhdGFsb2coImF0dGFjaG1lbnRzIiksYS5lbnN1cmVEb2MoInhmYURhdGFzZXRzIiksbj90aGlzLl9nZXRQYWdlSW5kZXgoZSx0LGEpOi0xXSkudGhlbigoKFtpLHMsbyxjLGxdKT0+YS5lbnN1cmUodGhpcywiX2NyZWF0ZSIsW2UsdCxhLHIsaSxvLGMsbixsXSkpKX1zdGF0aWMgX2NyZWF0ZShlLHQsYSxpLG8sYz1udWxsLGwsaCx1PS0xKXtjb25zdCBkPWUuZmV0Y2hJZlJlZih0KTtpZighKGQgaW5zdGFuY2VvZiBzLkRpY3QpKXJldHVybjtjb25zdCBmPXQgaW5zdGFuY2VvZiBzLlJlZj90LnRvU3RyaW5nKCk6YGFubm90XyR7aS5jcmVhdGVPYmpJZCgpfWA7bGV0IGc9ZC5nZXQoIlN1YnR5cGUiKTtnPWcgaW5zdGFuY2VvZiBzLk5hbWU/Zy5uYW1lOm51bGw7Y29uc3QgcD17eHJlZjplLHJlZjp0LGRpY3Q6ZCxzdWJ0eXBlOmcsaWQ6ZixwZGZNYW5hZ2VyOmEsYWNyb0Zvcm06byBpbnN0YW5jZW9mIHMuRGljdD9vOnMuRGljdC5lbXB0eSxhdHRhY2htZW50czpjLHhmYURhdGFzZXRzOmwsY29sbGVjdEZpZWxkczpoLHBhZ2VJbmRleDp1fTtzd2l0Y2goZyl7Y2FzZSJMaW5rIjpyZXR1cm4gbmV3IExpbmtBbm5vdGF0aW9uKHApO2Nhc2UiVGV4dCI6cmV0dXJuIG5ldyBUZXh0QW5ub3RhdGlvbihwKTtjYXNlIldpZGdldCI6bGV0IGU9KDAsbi5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDpkLGtleToiRlQifSk7ZT1lIGluc3RhbmNlb2Ygcy5OYW1lP2UubmFtZTpudWxsO3N3aXRjaChlKXtjYXNlIlR4IjpyZXR1cm4gbmV3IFRleHRXaWRnZXRBbm5vdGF0aW9uKHApO2Nhc2UiQnRuIjpyZXR1cm4gbmV3IEJ1dHRvbldpZGdldEFubm90YXRpb24ocCk7Y2FzZSJDaCI6cmV0dXJuIG5ldyBDaG9pY2VXaWRnZXRBbm5vdGF0aW9uKHApO2Nhc2UiU2lnIjpyZXR1cm4gbmV3IFNpZ25hdHVyZVdpZGdldEFubm90YXRpb24ocCl9KDAsci53YXJuKShgVW5pbXBsZW1lbnRlZCB3aWRnZXQgZmllbGQgdHlwZSAiJHtlfSIsIGZhbGxpbmcgYmFjayB0byBiYXNlIGZpZWxkIHR5cGUuYCk7cmV0dXJuIG5ldyBXaWRnZXRBbm5vdGF0aW9uKHApO2Nhc2UiUG9wdXAiOnJldHVybiBuZXcgUG9wdXBBbm5vdGF0aW9uKHApO2Nhc2UiRnJlZVRleHQiOnJldHVybiBuZXcgRnJlZVRleHRBbm5vdGF0aW9uKHApO2Nhc2UiTGluZSI6cmV0dXJuIG5ldyBMaW5lQW5ub3RhdGlvbihwKTtjYXNlIlNxdWFyZSI6cmV0dXJuIG5ldyBTcXVhcmVBbm5vdGF0aW9uKHApO2Nhc2UiQ2lyY2xlIjpyZXR1cm4gbmV3IENpcmNsZUFubm90YXRpb24ocCk7Y2FzZSJQb2x5TGluZSI6cmV0dXJuIG5ldyBQb2x5bGluZUFubm90YXRpb24ocCk7Y2FzZSJQb2x5Z29uIjpyZXR1cm4gbmV3IFBvbHlnb25Bbm5vdGF0aW9uKHApO2Nhc2UiQ2FyZXQiOnJldHVybiBuZXcgQ2FyZXRBbm5vdGF0aW9uKHApO2Nhc2UiSW5rIjpyZXR1cm4gbmV3IElua0Fubm90YXRpb24ocCk7Y2FzZSJIaWdobGlnaHQiOnJldHVybiBuZXcgSGlnaGxpZ2h0QW5ub3RhdGlvbihwKTtjYXNlIlVuZGVybGluZSI6cmV0dXJuIG5ldyBVbmRlcmxpbmVBbm5vdGF0aW9uKHApO2Nhc2UiU3F1aWdnbHkiOnJldHVybiBuZXcgU3F1aWdnbHlBbm5vdGF0aW9uKHApO2Nhc2UiU3RyaWtlT3V0IjpyZXR1cm4gbmV3IFN0cmlrZU91dEFubm90YXRpb24ocCk7Y2FzZSJTdGFtcCI6cmV0dXJuIG5ldyBTdGFtcEFubm90YXRpb24ocCk7Y2FzZSJGaWxlQXR0YWNobWVudCI6cmV0dXJuIG5ldyBGaWxlQXR0YWNobWVudEFubm90YXRpb24ocCk7ZGVmYXVsdDpofHwoZz8oMCxyLndhcm4pKGBVbmltcGxlbWVudGVkIGFubm90YXRpb24gdHlwZSAiJHtnfSIsIGZhbGxpbmcgYmFjayB0byBiYXNlIGFubm90YXRpb24uYCk6KDAsci53YXJuKSgiQW5ub3RhdGlvbiBpcyBtaXNzaW5nIHRoZSByZXF1aXJlZCAvU3VidHlwZS4iKSk7cmV0dXJuIG5ldyBBbm5vdGF0aW9uKHApfX1zdGF0aWMgYXN5bmMgX2dldFBhZ2VJbmRleChlLHQsYSl7dHJ5e2NvbnN0IHI9YXdhaXQgZS5mZXRjaElmUmVmQXN5bmModCk7aWYoIShyIGluc3RhbmNlb2Ygcy5EaWN0KSlyZXR1cm4tMTtjb25zdCBuPXIuZ2V0UmF3KCJQIik7aWYoIShuIGluc3RhbmNlb2Ygcy5SZWYpKXJldHVybi0xO3JldHVybiBhd2FpdCBhLmVuc3VyZUNhdGFsb2coImdldFBhZ2VJbmRleCIsW25dKX1jYXRjaChlKXsoMCxyLndhcm4pKGBfZ2V0UGFnZUluZGV4OiAiJHtlfSIuYCk7cmV0dXJuLTF9fXN0YXRpYyBhc3luYyBzYXZlTmV3QW5ub3RhdGlvbnMoZSx0LGEpe2NvbnN0IG49ZS54cmVmO2xldCBpO2NvbnN0IGM9W10sbD1bXTtmb3IoY29uc3QgaCBvZiBhKXN3aXRjaChoLmFubm90YXRpb25UeXBlKXtjYXNlIHIuQW5ub3RhdGlvbkVkaXRvclR5cGUuRlJFRVRFWFQ6aWYoIWkpe2NvbnN0IGU9bmV3IHMuRGljdChuKTtlLnNldCgiQmFzZUZvbnQiLHMuTmFtZS5nZXQoIkhlbHZldGljYSIpKTtlLnNldCgiVHlwZSIscy5OYW1lLmdldCgiRm9udCIpKTtlLnNldCgiU3VidHlwZSIscy5OYW1lLmdldCgiVHlwZTEiKSk7ZS5zZXQoIkVuY29kaW5nIixzLk5hbWUuZ2V0KCJXaW5BbnNpRW5jb2RpbmciKSk7Y29uc3QgdD1bXTtpPW4uZ2V0TmV3UmVmKCk7KDAsby53cml0ZU9iamVjdCkoaSxlLHQsbnVsbCk7Yy5wdXNoKHtyZWY6aSxkYXRhOnQuam9pbigiIil9KX1sLnB1c2goRnJlZVRleHRBbm5vdGF0aW9uLmNyZWF0ZU5ld0Fubm90YXRpb24obixoLGMse2V2YWx1YXRvcjplLHRhc2s6dCxiYXNlRm9udFJlZjppfSkpO2JyZWFrO2Nhc2Ugci5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5JTks6bC5wdXNoKElua0Fubm90YXRpb24uY3JlYXRlTmV3QW5ub3RhdGlvbihuLGgsYykpfXJldHVybnthbm5vdGF0aW9uczphd2FpdCBQcm9taXNlLmFsbChsKSxkZXBlbmRlbmNpZXM6Y319c3RhdGljIGFzeW5jIHByaW50TmV3QW5ub3RhdGlvbnMoZSx0LGEpe2lmKCFhKXJldHVybiBudWxsO2NvbnN0IG49ZS54cmVmLGk9W107Zm9yKGNvbnN0IHMgb2YgYSlzd2l0Y2gocy5hbm5vdGF0aW9uVHlwZSl7Y2FzZSByLkFubm90YXRpb25FZGl0b3JUeXBlLkZSRUVURVhUOmkucHVzaChGcmVlVGV4dEFubm90YXRpb24uY3JlYXRlTmV3UHJpbnRBbm5vdGF0aW9uKG4scyx7ZXZhbHVhdG9yOmUsdGFzazp0fSkpO2JyZWFrO2Nhc2Ugci5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5JTks6aS5wdXNoKElua0Fubm90YXRpb24uY3JlYXRlTmV3UHJpbnRBbm5vdGF0aW9uKG4scykpfXJldHVybiBQcm9taXNlLmFsbChpKX19O2Z1bmN0aW9uIGdldFJnYkNvbG9yKGUsdD1uZXcgVWludDhDbGFtcGVkQXJyYXkoMykpe2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiB0O2NvbnN0IGE9dHx8bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpO3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBudWxsO2Nhc2UgMTp1LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5LmdldFJnYkl0ZW0oZSwwLGEsMCk7cmV0dXJuIGE7Y2FzZSAzOnUuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYi5nZXRSZ2JJdGVtKGUsMCxhLDApO3JldHVybiBhO2Nhc2UgNDp1LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrLmdldFJnYkl0ZW0oZSwwLGEsMCk7cmV0dXJuIGE7ZGVmYXVsdDpyZXR1cm4gdH19ZnVuY3Rpb24gZ2V0UXVhZFBvaW50cyhlLHQpe2lmKCFlLmhhcygiUXVhZFBvaW50cyIpKXJldHVybiBudWxsO2NvbnN0IGE9ZS5nZXRBcnJheSgiUXVhZFBvaW50cyIpO2lmKCFBcnJheS5pc0FycmF5KGEpfHwwPT09YS5sZW5ndGh8fGEubGVuZ3RoJTg+MClyZXR1cm4gbnVsbDtjb25zdCByPVtdO2ZvcihsZXQgZT0wLG49YS5sZW5ndGgvODtlPG47ZSsrKXtyLnB1c2goW10pO2ZvcihsZXQgbj04KmUsaT04KmUrODtuPGk7bis9Mil7Y29uc3QgaT1hW25dLHM9YVtuKzFdO2lmKG51bGwhPT10JiYoaTx0WzBdfHxpPnRbMl18fHM8dFsxXXx8cz50WzNdKSlyZXR1cm4gbnVsbDtyW2VdLnB1c2goe3g6aSx5OnN9KX19cmV0dXJuIHIubWFwKChlPT57Y29uc3RbdCxhLHIsbl09ZS5yZWR1Y2UoKChbZSx0LGEscl0sbik9PltNYXRoLm1pbihlLG4ueCksTWF0aC5tYXgodCxuLngpLE1hdGgubWluKGEsbi55KSxNYXRoLm1heChyLG4ueSldKSxbTnVtYmVyLk1BWF9WQUxVRSxOdW1iZXIuTUlOX1ZBTFVFLE51bWJlci5NQVhfVkFMVUUsTnVtYmVyLk1JTl9WQUxVRV0pO3JldHVyblt7eDp0LHk6bn0se3g6YSx5Om59LHt4OnQseTpyfSx7eDphLHk6cn1dfSkpfWZ1bmN0aW9uIGdldFRyYW5zZm9ybU1hdHJpeChlLHQsYSl7Y29uc3RbbixpLHMsb109ci5VdGlsLmdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KHQsYSk7aWYobj09PXN8fGk9PT1vKXJldHVyblsxLDAsMCwxLGVbMF0sZVsxXV07Y29uc3QgYz0oZVsyXS1lWzBdKS8ocy1uKSxsPShlWzNdLWVbMV0pLyhvLWkpO3JldHVybltjLDAsMCxsLGVbMF0tbipjLGVbMV0taSpsXX1jbGFzcyBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe2NvbnN0IHQ9ZS5kaWN0O3RoaXMuc2V0VGl0bGUodC5nZXQoIlQiKSk7dGhpcy5zZXRDb250ZW50cyh0LmdldCgiQ29udGVudHMiKSk7dGhpcy5zZXRNb2RpZmljYXRpb25EYXRlKHQuZ2V0KCJNIikpO3RoaXMuc2V0RmxhZ3ModC5nZXQoIkYiKSk7dGhpcy5zZXRSZWN0YW5nbGUodC5nZXRBcnJheSgiUmVjdCIpKTt0aGlzLnNldENvbG9yKHQuZ2V0QXJyYXkoIkMiKSk7dGhpcy5zZXRCb3JkZXJTdHlsZSh0KTt0aGlzLnNldEFwcGVhcmFuY2UodCk7dGhpcy5zZXRPcHRpb25hbENvbnRlbnQodCk7Y29uc3QgYT10LmdldCgiTUsiKTt0aGlzLnNldEJvcmRlckFuZEJhY2tncm91bmRDb2xvcnMoYSk7dGhpcy5zZXRSb3RhdGlvbihhKTt0aGlzLl9zdHJlYW1zPVtdO3RoaXMuYXBwZWFyYW5jZSYmdGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuYXBwZWFyYW5jZSk7dGhpcy5kYXRhPXthbm5vdGF0aW9uRmxhZ3M6dGhpcy5mbGFncyxib3JkZXJTdHlsZTp0aGlzLmJvcmRlclN0eWxlLGNvbG9yOnRoaXMuY29sb3IsYmFja2dyb3VuZENvbG9yOnRoaXMuYmFja2dyb3VuZENvbG9yLGJvcmRlckNvbG9yOnRoaXMuYm9yZGVyQ29sb3Iscm90YXRpb246dGhpcy5yb3RhdGlvbixjb250ZW50c09iajp0aGlzLl9jb250ZW50cyxoYXNBcHBlYXJhbmNlOiEhdGhpcy5hcHBlYXJhbmNlLGlkOmUuaWQsbW9kaWZpY2F0aW9uRGF0ZTp0aGlzLm1vZGlmaWNhdGlvbkRhdGUscmVjdDp0aGlzLnJlY3RhbmdsZSxzdWJ0eXBlOmUuc3VidHlwZSxoYXNPd25DYW52YXM6ITF9O2lmKGUuY29sbGVjdEZpZWxkcyl7Y29uc3QgYT10LmdldCgiS2lkcyIpO2lmKEFycmF5LmlzQXJyYXkoYSkpe2NvbnN0IGU9W107Zm9yKGNvbnN0IHQgb2YgYSl0IGluc3RhbmNlb2Ygcy5SZWYmJmUucHVzaCh0LnRvU3RyaW5nKCkpOzAhPT1lLmxlbmd0aCYmKHRoaXMuZGF0YS5raWRJZHM9ZSl9dGhpcy5kYXRhLmFjdGlvbnM9KDAsbi5jb2xsZWN0QWN0aW9ucykoZS54cmVmLHQsci5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlKTt0aGlzLmRhdGEuZmllbGROYW1lPXRoaXMuX2NvbnN0cnVjdEZpZWxkTmFtZSh0KTt0aGlzLmRhdGEucGFnZUluZGV4PWUucGFnZUluZGV4fXRoaXMuX2ZhbGxiYWNrRm9udERpY3Q9bnVsbH1faGFzRmxhZyhlLHQpe3JldHVybiEhKGUmdCl9X2lzVmlld2FibGUoZSl7cmV0dXJuIXRoaXMuX2hhc0ZsYWcoZSxyLkFubm90YXRpb25GbGFnLklOVklTSUJMRSkmJiF0aGlzLl9oYXNGbGFnKGUsci5Bbm5vdGF0aW9uRmxhZy5OT1ZJRVcpfV9pc1ByaW50YWJsZShlKXtyZXR1cm4gdGhpcy5faGFzRmxhZyhlLHIuQW5ub3RhdGlvbkZsYWcuUFJJTlQpJiYhdGhpcy5faGFzRmxhZyhlLHIuQW5ub3RhdGlvbkZsYWcuSU5WSVNJQkxFKX1tdXN0QmVWaWV3ZWQoZSl7Y29uc3QgdD1lJiZlLmdldCh0aGlzLmRhdGEuaWQpO3JldHVybiB0JiZ2b2lkIDAhPT10LmhpZGRlbj8hdC5oaWRkZW46dGhpcy52aWV3YWJsZSYmIXRoaXMuX2hhc0ZsYWcodGhpcy5mbGFncyxyLkFubm90YXRpb25GbGFnLkhJRERFTil9bXVzdEJlUHJpbnRlZChlKXtjb25zdCB0PWUmJmUuZ2V0KHRoaXMuZGF0YS5pZCk7cmV0dXJuIHQmJnZvaWQgMCE9PXQucHJpbnQ/dC5wcmludDp0aGlzLnByaW50YWJsZX1nZXQgdmlld2FibGUoKXtyZXR1cm4gbnVsbCE9PXRoaXMuZGF0YS5xdWFkUG9pbnRzJiYoMD09PXRoaXMuZmxhZ3N8fHRoaXMuX2lzVmlld2FibGUodGhpcy5mbGFncykpfWdldCBwcmludGFibGUoKXtyZXR1cm4gbnVsbCE9PXRoaXMuZGF0YS5xdWFkUG9pbnRzJiYoMCE9PXRoaXMuZmxhZ3MmJnRoaXMuX2lzUHJpbnRhYmxlKHRoaXMuZmxhZ3MpKX1fcGFyc2VTdHJpbmdIZWxwZXIoZSl7Y29uc3QgdD0ic3RyaW5nIj09dHlwZW9mIGU/KDAsci5zdHJpbmdUb1BERlN0cmluZykoZSk6IiI7cmV0dXJue3N0cjp0LGRpcjp0JiYicnRsIj09PSgwLGwuYmlkaSkodCkuZGlyPyJydGwiOiJsdHIifX1zZXRUaXRsZShlKXt0aGlzLl90aXRsZT10aGlzLl9wYXJzZVN0cmluZ0hlbHBlcihlKX1zZXRDb250ZW50cyhlKXt0aGlzLl9jb250ZW50cz10aGlzLl9wYXJzZVN0cmluZ0hlbHBlcihlKX1zZXRNb2RpZmljYXRpb25EYXRlKGUpe3RoaXMubW9kaWZpY2F0aW9uRGF0ZT0ic3RyaW5nIj09dHlwZW9mIGU/ZTpudWxsfXNldEZsYWdzKGUpe3RoaXMuZmxhZ3M9TnVtYmVyLmlzSW50ZWdlcihlKSYmZT4wP2U6MH1oYXNGbGFnKGUpe3JldHVybiB0aGlzLl9oYXNGbGFnKHRoaXMuZmxhZ3MsZSl9c2V0UmVjdGFuZ2xlKGUpe0FycmF5LmlzQXJyYXkoZSkmJjQ9PT1lLmxlbmd0aD90aGlzLnJlY3RhbmdsZT1yLlV0aWwubm9ybWFsaXplUmVjdChlKTp0aGlzLnJlY3RhbmdsZT1bMCwwLDAsMF19c2V0Q29sb3IoZSl7dGhpcy5jb2xvcj1nZXRSZ2JDb2xvcihlKX1zZXRMaW5lRW5kaW5ncyhlKXt0aGlzLmxpbmVFbmRpbmdzPVsiTm9uZSIsIk5vbmUiXTtpZihBcnJheS5pc0FycmF5KGUpJiYyPT09ZS5sZW5ndGgpZm9yKGxldCB0PTA7dDwyO3QrKyl7Y29uc3QgYT1lW3RdO2lmKGEgaW5zdGFuY2VvZiBzLk5hbWUpc3dpdGNoKGEubmFtZSl7Y2FzZSJOb25lIjpjb250aW51ZTtjYXNlIlNxdWFyZSI6Y2FzZSJDaXJjbGUiOmNhc2UiRGlhbW9uZCI6Y2FzZSJPcGVuQXJyb3ciOmNhc2UiQ2xvc2VkQXJyb3ciOmNhc2UiQnV0dCI6Y2FzZSJST3BlbkFycm93IjpjYXNlIlJDbG9zZWRBcnJvdyI6Y2FzZSJTbGFzaCI6dGhpcy5saW5lRW5kaW5nc1t0XT1hLm5hbWU7Y29udGludWV9KDAsci53YXJuKShgSWdub3JpbmcgaW52YWxpZCBsaW5lRW5kaW5nOiAke2F9YCl9fXNldFJvdGF0aW9uKGUpe3RoaXMucm90YXRpb249MDtpZihlIGluc3RhbmNlb2Ygcy5EaWN0KXtsZXQgdD1lLmdldCgiUiIpfHwwO2lmKE51bWJlci5pc0ludGVnZXIodCkmJjAhPT10KXt0JT0zNjA7dDwwJiYodCs9MzYwKTt0JTkwPT0wJiYodGhpcy5yb3RhdGlvbj10KX19fXNldEJvcmRlckFuZEJhY2tncm91bmRDb2xvcnMoZSl7aWYoZSBpbnN0YW5jZW9mIHMuRGljdCl7dGhpcy5ib3JkZXJDb2xvcj1nZXRSZ2JDb2xvcihlLmdldEFycmF5KCJCQyIpLG51bGwpO3RoaXMuYmFja2dyb3VuZENvbG9yPWdldFJnYkNvbG9yKGUuZ2V0QXJyYXkoIkJHIiksbnVsbCl9ZWxzZSB0aGlzLmJvcmRlckNvbG9yPXRoaXMuYmFja2dyb3VuZENvbG9yPW51bGx9c2V0Qm9yZGVyU3R5bGUoZSl7dGhpcy5ib3JkZXJTdHlsZT1uZXcgQW5ub3RhdGlvbkJvcmRlclN0eWxlO2lmKGUgaW5zdGFuY2VvZiBzLkRpY3QpaWYoZS5oYXMoIkJTIikpe2NvbnN0IHQ9ZS5nZXQoIkJTIiksYT10LmdldCgiVHlwZSIpO2lmKCFhfHwoMCxzLmlzTmFtZSkoYSwiQm9yZGVyIikpe3RoaXMuYm9yZGVyU3R5bGUuc2V0V2lkdGgodC5nZXQoIlciKSx0aGlzLnJlY3RhbmdsZSk7dGhpcy5ib3JkZXJTdHlsZS5zZXRTdHlsZSh0LmdldCgiUyIpKTt0aGlzLmJvcmRlclN0eWxlLnNldERhc2hBcnJheSh0LmdldEFycmF5KCJEIikpfX1lbHNlIGlmKGUuaGFzKCJCb3JkZXIiKSl7Y29uc3QgdD1lLmdldEFycmF5KCJCb3JkZXIiKTtpZihBcnJheS5pc0FycmF5KHQpJiZ0Lmxlbmd0aD49Myl7dGhpcy5ib3JkZXJTdHlsZS5zZXRIb3Jpem9udGFsQ29ybmVyUmFkaXVzKHRbMF0pO3RoaXMuYm9yZGVyU3R5bGUuc2V0VmVydGljYWxDb3JuZXJSYWRpdXModFsxXSk7dGhpcy5ib3JkZXJTdHlsZS5zZXRXaWR0aCh0WzJdLHRoaXMucmVjdGFuZ2xlKTs0PT09dC5sZW5ndGgmJnRoaXMuYm9yZGVyU3R5bGUuc2V0RGFzaEFycmF5KHRbM10sITApfX1lbHNlIHRoaXMuYm9yZGVyU3R5bGUuc2V0V2lkdGgoMCl9c2V0QXBwZWFyYW5jZShlKXt0aGlzLmFwcGVhcmFuY2U9bnVsbDtjb25zdCB0PWUuZ2V0KCJBUCIpO2lmKCEodCBpbnN0YW5jZW9mIHMuRGljdCkpcmV0dXJuO2NvbnN0IGE9dC5nZXQoIk4iKTtpZihhIGluc3RhbmNlb2YgYy5CYXNlU3RyZWFtKXt0aGlzLmFwcGVhcmFuY2U9YTtyZXR1cm59aWYoIShhIGluc3RhbmNlb2Ygcy5EaWN0KSlyZXR1cm47Y29uc3Qgcj1lLmdldCgiQVMiKTtyIGluc3RhbmNlb2Ygcy5OYW1lJiZhLmhhcyhyLm5hbWUpJiYodGhpcy5hcHBlYXJhbmNlPWEuZ2V0KHIubmFtZSkpfXNldE9wdGlvbmFsQ29udGVudChlKXt0aGlzLm9jPW51bGw7Y29uc3QgdD1lLmdldCgiT0MiKTt0IGluc3RhbmNlb2Ygcy5OYW1lPygwLHIud2FybikoInNldE9wdGlvbmFsQ29udGVudDogU3VwcG9ydCBmb3IgL05hbWUtZW50cnkgaXMgbm90IGltcGxlbWVudGVkLiIpOnQgaW5zdGFuY2VvZiBzLkRpY3QmJih0aGlzLm9jPXQpfWxvYWRSZXNvdXJjZXMoZSx0KXtyZXR1cm4gdC5kaWN0LmdldEFzeW5jKCJSZXNvdXJjZXMiKS50aGVuKCh0PT57aWYoIXQpcmV0dXJuO3JldHVybiBuZXcgZi5PYmplY3RMb2FkZXIodCxlLHQueHJlZikubG9hZCgpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KSl9KSl9YXN5bmMgZ2V0T3BlcmF0b3JMaXN0KGUsdCxhLG4saSl7Y29uc3Qgbz10aGlzLmRhdGE7bGV0IGM9dGhpcy5hcHBlYXJhbmNlO2NvbnN0IGw9ISEodGhpcy5kYXRhLmhhc093bkNhbnZhcyYmYSZyLlJlbmRlcmluZ0ludGVudEZsYWcuRElTUExBWSk7aWYoIWMpe2lmKCFsKXJldHVybntvcExpc3Q6bmV3IGcuT3BlcmF0b3JMaXN0LHNlcGFyYXRlRm9ybTohMSxzZXBhcmF0ZUNhbnZhczohMX07Yz1uZXcgcC5TdHJpbmdTdHJlYW0oIiIpO2MuZGljdD1uZXcgcy5EaWN0fWNvbnN0IGg9Yy5kaWN0LHU9YXdhaXQgdGhpcy5sb2FkUmVzb3VyY2VzKFsiRXh0R1N0YXRlIiwiQ29sb3JTcGFjZSIsIlBhdHRlcm4iLCJTaGFkaW5nIiwiWE9iamVjdCIsIkZvbnQiXSxjKSxkPWguZ2V0QXJyYXkoIkJCb3giKXx8WzAsMCwxLDFdLGY9aC5nZXRBcnJheSgiTWF0cml4Iil8fFsxLDAsMCwxLDAsMF0sbT1nZXRUcmFuc2Zvcm1NYXRyaXgoby5yZWN0LGQsZiksYj1uZXcgZy5PcGVyYXRvckxpc3Q7bGV0IHk7dGhpcy5vYyYmKHk9YXdhaXQgZS5wYXJzZU1hcmtlZENvbnRlbnRQcm9wcyh0aGlzLm9jLG51bGwpKTt2b2lkIDAhPT15JiZiLmFkZE9wKHIuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLFsiT0MiLHldKTtiLmFkZE9wKHIuT1BTLmJlZ2luQW5ub3RhdGlvbixbby5pZCxvLnJlY3QsbSxmLGxdKTthd2FpdCBlLmdldE9wZXJhdG9yTGlzdCh7c3RyZWFtOmMsdGFzazp0LHJlc291cmNlczp1LG9wZXJhdG9yTGlzdDpiLGZhbGxiYWNrRm9udERpY3Q6dGhpcy5fZmFsbGJhY2tGb250RGljdH0pO2IuYWRkT3Aoci5PUFMuZW5kQW5ub3RhdGlvbixbXSk7dm9pZCAwIT09eSYmYi5hZGRPcChyLk9QUy5lbmRNYXJrZWRDb250ZW50LFtdKTt0aGlzLnJlc2V0KCk7cmV0dXJue29wTGlzdDpiLHNlcGFyYXRlRm9ybTohMSxzZXBhcmF0ZUNhbnZhczpsfX1hc3luYyBzYXZlKGUsdCxhKXtyZXR1cm4gbnVsbH1nZXQgaGFzVGV4dENvbnRlbnQoKXtyZXR1cm4hMX1hc3luYyBleHRyYWN0VGV4dENvbnRlbnQoZSx0LGEpe2lmKCF0aGlzLmFwcGVhcmFuY2UpcmV0dXJuO2NvbnN0IHI9YXdhaXQgdGhpcy5sb2FkUmVzb3VyY2VzKFsiRXh0R1N0YXRlIiwiRm9udCIsIlByb3BlcnRpZXMiLCJYT2JqZWN0Il0sdGhpcy5hcHBlYXJhbmNlKSxuPVtdLGk9W10scz17ZGVzaXJlZFNpemU6TWF0aC5JbmZpbml0eSxyZWFkeTohMCxlbnF1ZXVlKGUsdCl7Zm9yKGNvbnN0IHQgb2YgZS5pdGVtcyl7aS5wdXNoKHQuc3RyKTtpZih0Lmhhc0VPTCl7bi5wdXNoKGkuam9pbigiIikpO2kubGVuZ3RoPTB9fX19O2F3YWl0IGUuZ2V0VGV4dENvbnRlbnQoe3N0cmVhbTp0aGlzLmFwcGVhcmFuY2UsdGFzazp0LHJlc291cmNlczpyLGluY2x1ZGVNYXJrZWRDb250ZW50OiEwLGNvbWJpbmVUZXh0SXRlbXM6ITAsc2luazpzLHZpZXdCb3g6YX0pO3RoaXMucmVzZXQoKTtpLmxlbmd0aCYmbi5wdXNoKGkuam9pbigiIikpO24ubGVuZ3RoPjAmJih0aGlzLmRhdGEudGV4dENvbnRlbnQ9bil9Z2V0RmllbGRPYmplY3QoKXtyZXR1cm4gdGhpcy5kYXRhLmtpZElkcz97aWQ6dGhpcy5kYXRhLmlkLGFjdGlvbnM6dGhpcy5kYXRhLmFjdGlvbnMsbmFtZTp0aGlzLmRhdGEuZmllbGROYW1lLHN0cm9rZUNvbG9yOnRoaXMuZGF0YS5ib3JkZXJDb2xvcixmaWxsQ29sb3I6dGhpcy5kYXRhLmJhY2tncm91bmRDb2xvcix0eXBlOiIiLGtpZElkczp0aGlzLmRhdGEua2lkSWRzLHBhZ2U6dGhpcy5kYXRhLnBhZ2VJbmRleCxyb3RhdGlvbjp0aGlzLnJvdGF0aW9ufTpudWxsfXJlc2V0KCl7Zm9yKGNvbnN0IGUgb2YgdGhpcy5fc3RyZWFtcyllLnJlc2V0KCl9X2NvbnN0cnVjdEZpZWxkTmFtZShlKXtpZighZS5oYXMoIlQiKSYmIWUuaGFzKCJQYXJlbnQiKSl7KDAsci53YXJuKSgiVW5rbm93biBmaWVsZCBuYW1lLCBmYWxsaW5nIGJhY2sgdG8gZW1wdHkgZmllbGQgbmFtZS4iKTtyZXR1cm4iIn1pZighZS5oYXMoIlBhcmVudCIpKXJldHVybigwLHIuc3RyaW5nVG9QREZTdHJpbmcpKGUuZ2V0KCJUIikpO2NvbnN0IHQ9W107ZS5oYXMoIlQiKSYmdC51bnNoaWZ0KCgwLHIuc3RyaW5nVG9QREZTdHJpbmcpKGUuZ2V0KCJUIikpKTtsZXQgYT1lO2NvbnN0IG49bmV3IHMuUmVmU2V0O2Uub2JqSWQmJm4ucHV0KGUub2JqSWQpO2Zvcig7YS5oYXMoIlBhcmVudCIpOyl7YT1hLmdldCgiUGFyZW50Iik7aWYoIShhIGluc3RhbmNlb2Ygcy5EaWN0KXx8YS5vYmpJZCYmbi5oYXMoYS5vYmpJZCkpYnJlYWs7YS5vYmpJZCYmbi5wdXQoYS5vYmpJZCk7YS5oYXMoIlQiKSYmdC51bnNoaWZ0KCgwLHIuc3RyaW5nVG9QREZTdHJpbmcpKGEuZ2V0KCJUIikpKX1yZXR1cm4gdC5qb2luKCIuIil9fXQuQW5ub3RhdGlvbj1Bbm5vdGF0aW9uO2NsYXNzIEFubm90YXRpb25Cb3JkZXJTdHlsZXtjb25zdHJ1Y3Rvcigpe3RoaXMud2lkdGg9MTt0aGlzLnN0eWxlPXIuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5TT0xJRDt0aGlzLmRhc2hBcnJheT1bM107dGhpcy5ob3Jpem9udGFsQ29ybmVyUmFkaXVzPTA7dGhpcy52ZXJ0aWNhbENvcm5lclJhZGl1cz0wfXNldFdpZHRoKGUsdD1bMCwwLDAsMF0pe2lmKGUgaW5zdGFuY2VvZiBzLk5hbWUpdGhpcy53aWR0aD0wO2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBlKXtpZihlPjApe2NvbnN0IGE9KHRbMl0tdFswXSkvMixuPSh0WzNdLXRbMV0pLzI7aWYoYT4wJiZuPjAmJihlPmF8fGU+bikpeygwLHIud2FybikoYEFubm90YXRpb25Cb3JkZXJTdHlsZS5zZXRXaWR0aCAtIGlnbm9yaW5nIHdpZHRoOiAke2V9YCk7ZT0xfX10aGlzLndpZHRoPWV9fXNldFN0eWxlKGUpe2lmKGUgaW5zdGFuY2VvZiBzLk5hbWUpc3dpdGNoKGUubmFtZSl7Y2FzZSJTIjp0aGlzLnN0eWxlPXIuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5TT0xJRDticmVhaztjYXNlIkQiOnRoaXMuc3R5bGU9ci5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLkRBU0hFRDticmVhaztjYXNlIkIiOnRoaXMuc3R5bGU9ci5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLkJFVkVMRUQ7YnJlYWs7Y2FzZSJJIjp0aGlzLnN0eWxlPXIuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5JTlNFVDticmVhaztjYXNlIlUiOnRoaXMuc3R5bGU9ci5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLlVOREVSTElORX19c2V0RGFzaEFycmF5KGUsdD0hMSl7aWYoQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGg+MCl7bGV0IGE9ITAscj0hMDtmb3IoY29uc3QgdCBvZiBlKXtpZighKCt0Pj0wKSl7YT0hMTticmVha310PjAmJihyPSExKX1pZihhJiYhcil7dGhpcy5kYXNoQXJyYXk9ZTt0JiZ0aGlzLnNldFN0eWxlKHMuTmFtZS5nZXQoIkQiKSl9ZWxzZSB0aGlzLndpZHRoPTB9ZWxzZSBlJiYodGhpcy53aWR0aD0wKX1zZXRIb3Jpem9udGFsQ29ybmVyUmFkaXVzKGUpe051bWJlci5pc0ludGVnZXIoZSkmJih0aGlzLmhvcml6b250YWxDb3JuZXJSYWRpdXM9ZSl9c2V0VmVydGljYWxDb3JuZXJSYWRpdXMoZSl7TnVtYmVyLmlzSW50ZWdlcihlKSYmKHRoaXMudmVydGljYWxDb3JuZXJSYWRpdXM9ZSl9fXQuQW5ub3RhdGlvbkJvcmRlclN0eWxlPUFubm90YXRpb25Cb3JkZXJTdHlsZTtjbGFzcyBNYXJrdXBBbm5vdGF0aW9uIGV4dGVuZHMgQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdCB0PWUuZGljdDtpZih0LmhhcygiSVJUIikpe2NvbnN0IGU9dC5nZXRSYXcoIklSVCIpO3RoaXMuZGF0YS5pblJlcGx5VG89ZSBpbnN0YW5jZW9mIHMuUmVmP2UudG9TdHJpbmcoKTpudWxsO2NvbnN0IGE9dC5nZXQoIlJUIik7dGhpcy5kYXRhLnJlcGx5VHlwZT1hIGluc3RhbmNlb2Ygcy5OYW1lP2EubmFtZTpyLkFubm90YXRpb25SZXBseVR5cGUuUkVQTFl9aWYodGhpcy5kYXRhLnJlcGx5VHlwZT09PXIuQW5ub3RhdGlvblJlcGx5VHlwZS5HUk9VUCl7Y29uc3QgZT10LmdldCgiSVJUIik7dGhpcy5zZXRUaXRsZShlLmdldCgiVCIpKTt0aGlzLmRhdGEudGl0bGVPYmo9dGhpcy5fdGl0bGU7dGhpcy5zZXRDb250ZW50cyhlLmdldCgiQ29udGVudHMiKSk7dGhpcy5kYXRhLmNvbnRlbnRzT2JqPXRoaXMuX2NvbnRlbnRzO2lmKGUuaGFzKCJDcmVhdGlvbkRhdGUiKSl7dGhpcy5zZXRDcmVhdGlvbkRhdGUoZS5nZXQoIkNyZWF0aW9uRGF0ZSIpKTt0aGlzLmRhdGEuY3JlYXRpb25EYXRlPXRoaXMuY3JlYXRpb25EYXRlfWVsc2UgdGhpcy5kYXRhLmNyZWF0aW9uRGF0ZT1udWxsO2lmKGUuaGFzKCJNIikpe3RoaXMuc2V0TW9kaWZpY2F0aW9uRGF0ZShlLmdldCgiTSIpKTt0aGlzLmRhdGEubW9kaWZpY2F0aW9uRGF0ZT10aGlzLm1vZGlmaWNhdGlvbkRhdGV9ZWxzZSB0aGlzLmRhdGEubW9kaWZpY2F0aW9uRGF0ZT1udWxsO3RoaXMuZGF0YS5oYXNQb3B1cD1lLmhhcygiUG9wdXAiKTtpZihlLmhhcygiQyIpKXt0aGlzLnNldENvbG9yKGUuZ2V0QXJyYXkoIkMiKSk7dGhpcy5kYXRhLmNvbG9yPXRoaXMuY29sb3J9ZWxzZSB0aGlzLmRhdGEuY29sb3I9bnVsbH1lbHNle3RoaXMuZGF0YS50aXRsZU9iaj10aGlzLl90aXRsZTt0aGlzLnNldENyZWF0aW9uRGF0ZSh0LmdldCgiQ3JlYXRpb25EYXRlIikpO3RoaXMuZGF0YS5jcmVhdGlvbkRhdGU9dGhpcy5jcmVhdGlvbkRhdGU7dGhpcy5kYXRhLmhhc1BvcHVwPXQuaGFzKCJQb3B1cCIpO3QuaGFzKCJDIil8fCh0aGlzLmRhdGEuY29sb3I9bnVsbCl9dC5oYXMoIlJDIikmJih0aGlzLmRhdGEucmljaFRleHQ9bS5YRkFGYWN0b3J5LmdldFJpY2hUZXh0QXNIdG1sKHQuZ2V0KCJSQyIpKSl9c2V0Q3JlYXRpb25EYXRlKGUpe3RoaXMuY3JlYXRpb25EYXRlPSJzdHJpbmciPT10eXBlb2YgZT9lOm51bGx9X3NldERlZmF1bHRBcHBlYXJhbmNlKHt4cmVmOmUsZXh0cmE6dCxzdHJva2VDb2xvcjphLGZpbGxDb2xvcjpyLGJsZW5kTW9kZTpuLHN0cm9rZUFscGhhOmksZmlsbEFscGhhOm8scG9pbnRzQ2FsbGJhY2s6Y30pe2xldCBsPU51bWJlci5NQVhfVkFMVUUsaD1OdW1iZXIuTUFYX1ZBTFVFLHU9TnVtYmVyLk1JTl9WQUxVRSxkPU51bWJlci5NSU5fVkFMVUU7Y29uc3QgZj1bInEiXTt0JiZmLnB1c2godCk7YSYmZi5wdXNoKGAke2FbMF19ICR7YVsxXX0gJHthWzJdfSBSR2ApO3ImJmYucHVzaChgJHtyWzBdfSAke3JbMV19ICR7clsyXX0gcmdgKTtsZXQgZz10aGlzLmRhdGEucXVhZFBvaW50cztnfHwoZz1bW3t4OnRoaXMucmVjdGFuZ2xlWzBdLHk6dGhpcy5yZWN0YW5nbGVbM119LHt4OnRoaXMucmVjdGFuZ2xlWzJdLHk6dGhpcy5yZWN0YW5nbGVbM119LHt4OnRoaXMucmVjdGFuZ2xlWzBdLHk6dGhpcy5yZWN0YW5nbGVbMV19LHt4OnRoaXMucmVjdGFuZ2xlWzJdLHk6dGhpcy5yZWN0YW5nbGVbMV19XV0pO2Zvcihjb25zdCBlIG9mIGcpe2NvbnN0W3QsYSxyLG5dPWMoZixlKTtsPU1hdGgubWluKGwsdCk7dT1NYXRoLm1heCh1LGEpO2g9TWF0aC5taW4oaCxyKTtkPU1hdGgubWF4KGQsbil9Zi5wdXNoKCJRIik7Y29uc3QgbT1uZXcgcy5EaWN0KGUpLGI9bmV3IHMuRGljdChlKTtiLnNldCgiU3VidHlwZSIscy5OYW1lLmdldCgiRm9ybSIpKTtjb25zdCB5PW5ldyBwLlN0cmluZ1N0cmVhbShmLmpvaW4oIiAiKSk7eS5kaWN0PWI7bS5zZXQoIkZtMCIseSk7Y29uc3Qgdz1uZXcgcy5EaWN0KGUpO24mJncuc2V0KCJCTSIscy5OYW1lLmdldChuKSk7Im51bWJlciI9PXR5cGVvZiBpJiZ3LnNldCgiQ0EiLGkpOyJudW1iZXIiPT10eXBlb2YgbyYmdy5zZXQoImNhIixvKTtjb25zdCBTPW5ldyBzLkRpY3QoZSk7Uy5zZXQoIkdTMCIsdyk7Y29uc3QgeD1uZXcgcy5EaWN0KGUpO3guc2V0KCJFeHRHU3RhdGUiLFMpO3guc2V0KCJYT2JqZWN0IixtKTtjb25zdCBrPW5ldyBzLkRpY3QoZSk7ay5zZXQoIlJlc291cmNlcyIseCk7Y29uc3QgQz10aGlzLmRhdGEucmVjdD1bbCxoLHUsZF07ay5zZXQoIkJCb3giLEMpO3RoaXMuYXBwZWFyYW5jZT1uZXcgcC5TdHJpbmdTdHJlYW0oIi9HUzAgZ3MgL0ZtMCBEbyIpO3RoaXMuYXBwZWFyYW5jZS5kaWN0PWs7dGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuYXBwZWFyYW5jZSx5KX1zdGF0aWMgYXN5bmMgY3JlYXRlTmV3QW5ub3RhdGlvbihlLHQsYSxyKXtjb25zdCBuPWUuZ2V0TmV3UmVmKCksaT1lLmdldE5ld1JlZigpLHM9dGhpcy5jcmVhdGVOZXdEaWN0KHQsZSx7YXBSZWY6aX0pLGM9YXdhaXQgdGhpcy5jcmVhdGVOZXdBcHBlYXJhbmNlU3RyZWFtKHQsZSxyKSxsPVtdO2xldCBoPWUuZW5jcnlwdD9lLmVuY3J5cHQuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKGkubnVtLGkuZ2VuKTpudWxsOygwLG8ud3JpdGVPYmplY3QpKGksYyxsLGgpO2EucHVzaCh7cmVmOmksZGF0YTpsLmpvaW4oIiIpfSk7bC5sZW5ndGg9MDtoPWUuZW5jcnlwdD9lLmVuY3J5cHQuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKG4ubnVtLG4uZ2VuKTpudWxsOygwLG8ud3JpdGVPYmplY3QpKG4scyxsLGgpO3JldHVybntyZWY6bixkYXRhOmwuam9pbigiIil9fXN0YXRpYyBhc3luYyBjcmVhdGVOZXdQcmludEFubm90YXRpb24oZSx0LGEpe2NvbnN0IHI9YXdhaXQgdGhpcy5jcmVhdGVOZXdBcHBlYXJhbmNlU3RyZWFtKHQsZSxhKSxuPXRoaXMuY3JlYXRlTmV3RGljdCh0LGUse2FwOnJ9KTtyZXR1cm4gbmV3IHRoaXMucHJvdG90eXBlLmNvbnN0cnVjdG9yKHtkaWN0Om4seHJlZjplfSl9fXQuTWFya3VwQW5ub3RhdGlvbj1NYXJrdXBBbm5vdGF0aW9uO2NsYXNzIFdpZGdldEFubm90YXRpb24gZXh0ZW5kcyBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0IHQ9ZS5kaWN0LGE9dGhpcy5kYXRhO3RoaXMucmVmPWUucmVmO2EuYW5ub3RhdGlvblR5cGU9ci5Bbm5vdGF0aW9uVHlwZS5XSURHRVQ7dm9pZCAwPT09YS5maWVsZE5hbWUmJihhLmZpZWxkTmFtZT10aGlzLl9jb25zdHJ1Y3RGaWVsZE5hbWUodCkpO3ZvaWQgMD09PWEuYWN0aW9ucyYmKGEuYWN0aW9ucz0oMCxuLmNvbGxlY3RBY3Rpb25zKShlLnhyZWYsdCxyLkFubm90YXRpb25BY3Rpb25FdmVudFR5cGUpKTtsZXQgbz0oMCxuLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnQsa2V5OiJWIixnZXRBcnJheTohMH0pO2EuZmllbGRWYWx1ZT10aGlzLl9kZWNvZGVGb3JtVmFsdWUobyk7Y29uc3QgYz0oMCxuLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnQsa2V5OiJEViIsZ2V0QXJyYXk6ITB9KTthLmRlZmF1bHRGaWVsZFZhbHVlPXRoaXMuX2RlY29kZUZvcm1WYWx1ZShjKTtpZih2b2lkIDA9PT1vJiZlLnhmYURhdGFzZXRzKXtjb25zdCB0PXRoaXMuX3RpdGxlLnN0cjtpZih0KXt0aGlzLl9oYXNWYWx1ZUZyb21YRkE9ITA7YS5maWVsZFZhbHVlPW89ZS54ZmFEYXRhc2V0cy5nZXRWYWx1ZSh0KX19dm9pZCAwPT09byYmbnVsbCE9PWEuZGVmYXVsdEZpZWxkVmFsdWUmJihhLmZpZWxkVmFsdWU9YS5kZWZhdWx0RmllbGRWYWx1ZSk7YS5hbHRlcm5hdGl2ZVRleHQ9KDAsci5zdHJpbmdUb1BERlN0cmluZykodC5nZXQoIlRVIil8fCIiKTtjb25zdCBsPSgwLG4uZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6dCxrZXk6IkRBIn0pfHxlLmFjcm9Gb3JtLmdldCgiREEiKTt0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZT0ic3RyaW5nIj09dHlwZW9mIGw/bDoiIjthLmRlZmF1bHRBcHBlYXJhbmNlRGF0YT0oMCxpLnBhcnNlRGVmYXVsdEFwcGVhcmFuY2UpKHRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlKTtjb25zdCBoPSgwLG4uZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6dCxrZXk6IkZUIn0pO2EuZmllbGRUeXBlPWggaW5zdGFuY2VvZiBzLk5hbWU/aC5uYW1lOm51bGw7Y29uc3QgdT0oMCxuLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnQsa2V5OiJEUiJ9KSxkPWUuYWNyb0Zvcm0uZ2V0KCJEUiIpLGY9dGhpcy5hcHBlYXJhbmNlJiZ0aGlzLmFwcGVhcmFuY2UuZGljdC5nZXQoIlJlc291cmNlcyIpO3RoaXMuX2ZpZWxkUmVzb3VyY2VzPXtsb2NhbFJlc291cmNlczp1LGFjcm9Gb3JtUmVzb3VyY2VzOmQsYXBwZWFyYW5jZVJlc291cmNlczpmLG1lcmdlZFJlc291cmNlczpzLkRpY3QubWVyZ2Uoe3hyZWY6ZS54cmVmLGRpY3RBcnJheTpbdSxmLGRdLG1lcmdlU3ViRGljdHM6ITB9KX07YS5maWVsZEZsYWdzPSgwLG4uZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6dCxrZXk6IkZmIn0pOyghTnVtYmVyLmlzSW50ZWdlcihhLmZpZWxkRmxhZ3MpfHxhLmZpZWxkRmxhZ3M8MCkmJihhLmZpZWxkRmxhZ3M9MCk7YS5yZWFkT25seT10aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuUkVBRE9OTFkpO2EucmVxdWlyZWQ9dGhpcy5oYXNGaWVsZEZsYWcoci5Bbm5vdGF0aW9uRmllbGRGbGFnLlJFUVVJUkVEKTthLmhpZGRlbj10aGlzLl9oYXNGbGFnKGEuYW5ub3RhdGlvbkZsYWdzLHIuQW5ub3RhdGlvbkZsYWcuSElEREVOKX1fZGVjb2RlRm9ybVZhbHVlKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2UuZmlsdGVyKChlPT4ic3RyaW5nIj09dHlwZW9mIGUpKS5tYXAoKGU9PigwLHIuc3RyaW5nVG9QREZTdHJpbmcpKGUpKSk6ZSBpbnN0YW5jZW9mIHMuTmFtZT8oMCxyLnN0cmluZ1RvUERGU3RyaW5nKShlLm5hbWUpOiJzdHJpbmciPT10eXBlb2YgZT8oMCxyLnN0cmluZ1RvUERGU3RyaW5nKShlKTpudWxsfWhhc0ZpZWxkRmxhZyhlKXtyZXR1cm4hISh0aGlzLmRhdGEuZmllbGRGbGFncyZlKX1zdGF0aWMgX2dldFJvdGF0aW9uTWF0cml4KGUsdCxhKXtzd2l0Y2goZSl7Y2FzZSA5MDpyZXR1cm5bMCwxLC0xLDAsdCwwXTtjYXNlIDE4MDpyZXR1cm5bLTEsMCwwLC0xLHQsYV07Y2FzZSAyNzA6cmV0dXJuWzAsLTEsMSwwLDAsYV07ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcm90YXRpb24iKX19Z2V0Um90YXRpb25NYXRyaXgoZSl7Y29uc3QgdD1lP2UuZ2V0KHRoaXMuZGF0YS5pZCk6dm9pZCAwO2xldCBhPXQmJnQucm90YXRpb247dm9pZCAwPT09YSYmKGE9dGhpcy5yb3RhdGlvbik7aWYoMD09PWEpcmV0dXJuIHIuSURFTlRJVFlfTUFUUklYO2NvbnN0IG49dGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0saT10aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXTtyZXR1cm4gV2lkZ2V0QW5ub3RhdGlvbi5fZ2V0Um90YXRpb25NYXRyaXgoYSxuLGkpfWdldEJvcmRlckFuZEJhY2tncm91bmRBcHBlYXJhbmNlcyhlKXtjb25zdCB0PWU/ZS5nZXQodGhpcy5kYXRhLmlkKTp2b2lkIDA7bGV0IGE9dCYmdC5yb3RhdGlvbjt2b2lkIDA9PT1hJiYoYT10aGlzLnJvdGF0aW9uKTtpZighdGhpcy5iYWNrZ3JvdW5kQ29sb3ImJiF0aGlzLmJvcmRlckNvbG9yKXJldHVybiIiO2NvbnN0IHI9dGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0sbj10aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXSxzPTA9PT1hfHwxODA9PT1hP2AwIDAgJHtyfSAke259IHJlYDpgMCAwICR7bn0gJHtyfSByZWA7bGV0IG89IiI7dGhpcy5iYWNrZ3JvdW5kQ29sb3ImJihvPWAkeygwLGkuZ2V0UGRmQ29sb3IpKHRoaXMuYmFja2dyb3VuZENvbG9yLCEwKX0gJHtzfSBmIGApO2lmKHRoaXMuYm9yZGVyQ29sb3Ipe28rPWAke3RoaXMuYm9yZGVyU3R5bGUud2lkdGh8fDF9IHcgJHsoMCxpLmdldFBkZkNvbG9yKSh0aGlzLmJvcmRlckNvbG9yLCExKX0gJHtzfSBTIGB9cmV0dXJuIG99YXN5bmMgZ2V0T3BlcmF0b3JMaXN0KGUsdCxhLG4saSl7aWYobiYmISh0aGlzIGluc3RhbmNlb2YgU2lnbmF0dXJlV2lkZ2V0QW5ub3RhdGlvbikpcmV0dXJue29wTGlzdDpuZXcgZy5PcGVyYXRvckxpc3Qsc2VwYXJhdGVGb3JtOiEwLHNlcGFyYXRlQ2FudmFzOiExfTtpZighdGhpcy5faGFzVGV4dClyZXR1cm4gc3VwZXIuZ2V0T3BlcmF0b3JMaXN0KGUsdCxhLG4saSk7Y29uc3Qgcz1hd2FpdCB0aGlzLl9nZXRBcHBlYXJhbmNlKGUsdCxpKTtpZih0aGlzLmFwcGVhcmFuY2UmJm51bGw9PT1zKXJldHVybiBzdXBlci5nZXRPcGVyYXRvckxpc3QoZSx0LGEsbixpKTtjb25zdCBvPW5ldyBnLk9wZXJhdG9yTGlzdDtpZighdGhpcy5fZGVmYXVsdEFwcGVhcmFuY2V8fG51bGw9PT1zKXJldHVybntvcExpc3Q6byxzZXBhcmF0ZUZvcm06ITEsc2VwYXJhdGVDYW52YXM6ITF9O2NvbnN0IGM9WzAsMCx0aGlzLmRhdGEucmVjdFsyXS10aGlzLmRhdGEucmVjdFswXSx0aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXV0sbD1nZXRUcmFuc2Zvcm1NYXRyaXgodGhpcy5kYXRhLnJlY3QsYyxbMSwwLDAsMSwwLDBdKTtsZXQgaDt0aGlzLm9jJiYoaD1hd2FpdCBlLnBhcnNlTWFya2VkQ29udGVudFByb3BzKHRoaXMub2MsbnVsbCkpO3ZvaWQgMCE9PWgmJm8uYWRkT3Aoci5PUFMuYmVnaW5NYXJrZWRDb250ZW50UHJvcHMsWyJPQyIsaF0pO28uYWRkT3Aoci5PUFMuYmVnaW5Bbm5vdGF0aW9uLFt0aGlzLmRhdGEuaWQsdGhpcy5kYXRhLnJlY3QsbCx0aGlzLmdldFJvdGF0aW9uTWF0cml4KGkpLCExXSk7Y29uc3QgdT1uZXcgcC5TdHJpbmdTdHJlYW0ocyk7YXdhaXQgZS5nZXRPcGVyYXRvckxpc3Qoe3N0cmVhbTp1LHRhc2s6dCxyZXNvdXJjZXM6dGhpcy5fZmllbGRSZXNvdXJjZXMubWVyZ2VkUmVzb3VyY2VzLG9wZXJhdG9yTGlzdDpvfSk7by5hZGRPcChyLk9QUy5lbmRBbm5vdGF0aW9uLFtdKTt2b2lkIDAhPT1oJiZvLmFkZE9wKHIuT1BTLmVuZE1hcmtlZENvbnRlbnQsW10pO3JldHVybntvcExpc3Q6byxzZXBhcmF0ZUZvcm06ITEsc2VwYXJhdGVDYW52YXM6ITF9fV9nZXRNS0RpY3QoZSl7Y29uc3QgdD1uZXcgcy5EaWN0KG51bGwpO2UmJnQuc2V0KCJSIixlKTt0aGlzLmJvcmRlckNvbG9yJiZ0LnNldCgiQkMiLEFycmF5LmZyb20odGhpcy5ib3JkZXJDb2xvciwoZT0+ZS8yNTUpKSk7dGhpcy5iYWNrZ3JvdW5kQ29sb3ImJnQuc2V0KCJCRyIsQXJyYXkuZnJvbSh0aGlzLmJhY2tncm91bmRDb2xvciwoZT0+ZS8yNTUpKSk7cmV0dXJuIHQuc2l6ZT4wP3Q6bnVsbH1hc3luYyBzYXZlKGUsdCxhKXtjb25zdCBuPWE/YS5nZXQodGhpcy5kYXRhLmlkKTp2b2lkIDA7bGV0IGk9biYmbi52YWx1ZSxjPW4mJm4ucm90YXRpb247aWYoaT09PXRoaXMuZGF0YS5maWVsZFZhbHVlfHx2b2lkIDA9PT1pKXtpZighdGhpcy5faGFzVmFsdWVGcm9tWEZBJiZ2b2lkIDA9PT1jKXJldHVybiBudWxsO2k9aXx8dGhpcy5kYXRhLmZpZWxkVmFsdWV9aWYodm9pZCAwPT09YyYmIXRoaXMuX2hhc1ZhbHVlRnJvbVhGQSYmQXJyYXkuaXNBcnJheShpKSYmQXJyYXkuaXNBcnJheSh0aGlzLmRhdGEuZmllbGRWYWx1ZSkmJmkubGVuZ3RoPT09dGhpcy5kYXRhLmZpZWxkVmFsdWUubGVuZ3RoJiZpLmV2ZXJ5KCgoZSx0KT0+ZT09PXRoaXMuZGF0YS5maWVsZFZhbHVlW3RdKSkpcmV0dXJuIG51bGw7dm9pZCAwPT09YyYmKGM9dGhpcy5yb3RhdGlvbik7bGV0IGw9YXdhaXQgdGhpcy5fZ2V0QXBwZWFyYW5jZShlLHQsYSk7aWYobnVsbD09PWwpcmV0dXJuIG51bGw7Y29uc3R7eHJlZjpofT1lLHU9aC5mZXRjaElmUmVmKHRoaXMucmVmKTtpZighKHUgaW5zdGFuY2VvZiBzLkRpY3QpKXJldHVybiBudWxsO2NvbnN0IGQ9WzAsMCx0aGlzLmRhdGEucmVjdFsyXS10aGlzLmRhdGEucmVjdFswXSx0aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXV0sZj17cGF0aDooMCxyLnN0cmluZ1RvUERGU3RyaW5nKSh1LmdldCgiVCIpfHwiIiksdmFsdWU6aX0sZz1oLmdldE5ld1JlZigpLHA9bmV3IHMuRGljdChoKTtwLnNldCgiTiIsZyk7Y29uc3QgbT1oLmVuY3J5cHQ7bGV0IGI9bnVsbCx5PW51bGw7aWYobSl7Yj1tLmNyZWF0ZUNpcGhlclRyYW5zZm9ybSh0aGlzLnJlZi5udW0sdGhpcy5yZWYuZ2VuKTt5PW0uY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKGcubnVtLGcuZ2VuKTtsPXkuZW5jcnlwdFN0cmluZyhsKX1jb25zdCBlbmNvZGVyPWU9PigwLHIuaXNBc2NpaSkoZSk/ZTooMCxyLnN0cmluZ1RvVVRGMTZCRVN0cmluZykoZSk7dS5zZXQoIlYiLEFycmF5LmlzQXJyYXkoaSk/aS5tYXAoZW5jb2Rlcik6ZW5jb2RlcihpKSk7dS5zZXQoIkFQIixwKTt1LnNldCgiTSIsYEQ6JHsoMCxyLmdldE1vZGlmaWNhdGlvbkRhdGUpKCl9YCk7Y29uc3Qgdz10aGlzLl9nZXRNS0RpY3QoYyk7dyYmdS5zZXQoIk1LIix3KTtjb25zdCBTPW5ldyBzLkRpY3QoaCk7Uy5zZXQoIkxlbmd0aCIsbC5sZW5ndGgpO1Muc2V0KCJTdWJ0eXBlIixzLk5hbWUuZ2V0KCJGb3JtIikpO1Muc2V0KCJSZXNvdXJjZXMiLHRoaXMuX2dldFNhdmVGaWVsZFJlc291cmNlcyhoKSk7Uy5zZXQoIkJCb3giLGQpO2NvbnN0IHg9dGhpcy5nZXRSb3RhdGlvbk1hdHJpeChhKTt4IT09ci5JREVOVElUWV9NQVRSSVgmJlMuc2V0KCJNYXRyaXgiLHgpO2NvbnN0IGs9W2Ake3RoaXMucmVmLm51bX0gJHt0aGlzLnJlZi5nZW59IG9ialxuYF07KDAsby53cml0ZURpY3QpKHUsayxiKTtrLnB1c2goIlxuZW5kb2JqXG4iKTtjb25zdCBDPVtgJHtnLm51bX0gJHtnLmdlbn0gb2JqXG5gXTsoMCxvLndyaXRlRGljdCkoUyxDLHkpO0MucHVzaCgiIHN0cmVhbVxuIixsLCJcbmVuZHN0cmVhbVxuZW5kb2JqXG4iKTtyZXR1cm5be3JlZjp0aGlzLnJlZixkYXRhOmsuam9pbigiIikseGZhOmZ9LHtyZWY6ZyxkYXRhOkMuam9pbigiIikseGZhOm51bGx9XX1hc3luYyBfZ2V0QXBwZWFyYW5jZShlLHQsYSl7aWYodGhpcy5oYXNGaWVsZEZsYWcoci5Bbm5vdGF0aW9uRmllbGRGbGFnLlBBU1NXT1JEKSlyZXR1cm4gbnVsbDtjb25zdCBuPWE/YS5nZXQodGhpcy5kYXRhLmlkKTp2b2lkIDA7bGV0IHMsbztpZihuKXtzPW4uZm9ybWF0dGVkVmFsdWV8fG4udmFsdWU7bz1uLnJvdGF0aW9ufWlmKHZvaWQgMD09PW8mJnZvaWQgMD09PXMmJighdGhpcy5faGFzVmFsdWVGcm9tWEZBfHx0aGlzLmFwcGVhcmFuY2UpKXJldHVybiBudWxsO2lmKHZvaWQgMD09PXMpe3M9dGhpcy5kYXRhLmZpZWxkVmFsdWU7aWYoIXMpcmV0dXJuIiJ9QXJyYXkuaXNBcnJheShzKSYmMT09PXMubGVuZ3RoJiYocz1zWzBdKTsoMCxyLmFzc2VydCkoInN0cmluZyI9PXR5cGVvZiBzLCJFeHBlY3RlZCBgdmFsdWVgIHRvIGJlIGEgc3RyaW5nLiIpO3M9cy50cmltKCk7aWYoIiI9PT1zKXJldHVybiIiO3ZvaWQgMD09PW8mJihvPXRoaXMucm90YXRpb24pO2xldCBjPS0xO3RoaXMuZGF0YS5tdWx0aUxpbmUmJihjPXMuc3BsaXQoL1xyXG58XHJ8XG4vKS5sZW5ndGgpO2xldCBsPXRoaXMuZGF0YS5yZWN0WzNdLXRoaXMuZGF0YS5yZWN0WzFdLGg9dGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF07OTAhPT1vJiYyNzAhPT1vfHwoW2gsbF09W2wsaF0pO3RoaXMuX2RlZmF1bHRBcHBlYXJhbmNlfHwodGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YT0oMCxpLnBhcnNlRGVmYXVsdEFwcGVhcmFuY2UpKHRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlPSIvSGVsdmV0aWNhIDAgVGYgMCBnIikpO2NvbnN0IHU9YXdhaXQgV2lkZ2V0QW5ub3RhdGlvbi5fZ2V0Rm9udERhdGEoZSx0LHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEsdGhpcy5fZmllbGRSZXNvdXJjZXMubWVyZ2VkUmVzb3VyY2VzKSxbZCxmXT10aGlzLl9jb21wdXRlRm9udFNpemUobC0yLGgtNCxzLHUsYyk7bGV0IGc9dS5kZXNjZW50O2lzTmFOKGcpJiYoZz0wKTtjb25zdCBwPU1hdGgubWluKE1hdGguZmxvb3IoKGwtZikvMiksMikrTWF0aC5hYnMoZykqZixtPXRoaXMuZGF0YS50ZXh0QWxpZ25tZW50O2lmKHRoaXMuZGF0YS5tdWx0aUxpbmUpcmV0dXJuIHRoaXMuX2dldE11bHRpbGluZUFwcGVhcmFuY2UoZCxzLHUsZixoLGwsbSwyLHAsYSk7Y29uc3QgYj11LmVuY29kZVN0cmluZyhzKS5qb2luKCIiKTtpZih0aGlzLmRhdGEuY29tYilyZXR1cm4gdGhpcy5fZ2V0Q29tYkFwcGVhcmFuY2UoZCx1LGIsaCwyLHAsYSk7Y29uc3QgeT10aGlzLmdldEJvcmRlckFuZEJhY2tncm91bmRBcHBlYXJhbmNlcyhhKTtpZigwPT09bXx8bT4yKXJldHVybmAvVHggQk1DIHEgJHt5fUJUIGArZCtgIDEgMCAwIDEgMiAke3B9IFRtICgkeygwLHIuZXNjYXBlU3RyaW5nKShiKX0pIFRqIEVUIFEgRU1DYDtyZXR1cm5gL1R4IEJNQyBxICR7eX1CVCBgK2QrYCAxIDAgMCAxIDAgMCBUbSAke3RoaXMuX3JlbmRlclRleHQoYix1LGYsaCxtLDIscCl9IEVUIFEgRU1DYH1zdGF0aWMgYXN5bmMgX2dldEZvbnREYXRhKGUsdCxhLHIpe2NvbnN0IG49bmV3IGcuT3BlcmF0b3JMaXN0LGk9e2ZvbnQ6bnVsbCxjbG9uZSgpe3JldHVybiB0aGlzfX0se2ZvbnROYW1lOm8sZm9udFNpemU6Y309YTthd2FpdCBlLmhhbmRsZVNldEZvbnQocixbbyYmcy5OYW1lLmdldChvKSxjXSxudWxsLG4sdCxpLG51bGwpO3JldHVybiBpLmZvbnR9X2dldFRleHRXaWR0aChlLHQpe3JldHVybiB0LmNoYXJzVG9HbHlwaHMoZSkucmVkdWNlKCgoZSx0KT0+ZSt0LndpZHRoKSwwKS8xZTN9X2NvbXB1dGVGb250U2l6ZShlLHQsYSxuLHMpe2xldHtmb250U2l6ZTpvfT10aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhO2lmKCFvKXtjb25zdCByb3VuZFdpdGhUd29EaWdpdHM9ZT0+TWF0aC5mbG9vcigxMDAqZSkvMTAwO2lmKC0xPT09cyl7Y29uc3QgaT10aGlzLl9nZXRUZXh0V2lkdGgoYSxuKTtvPXJvdW5kV2l0aFR3b0RpZ2l0cyhNYXRoLm1pbihlL3IuTElORV9GQUNUT1IsdC9pKSl9ZWxzZXtjb25zdCBpPWEuc3BsaXQoL1xyXG4/fFxuLyksYz1bXTtmb3IoY29uc3QgZSBvZiBpKXtjb25zdCB0PW4uZW5jb2RlU3RyaW5nKGUpLmpvaW4oIiIpLGE9bi5jaGFyc1RvR2x5cGhzKHQpLHI9bi5nZXRDaGFyUG9zaXRpb25zKHQpO2MucHVzaCh7bGluZTp0LGdseXBoczphLHBvc2l0aW9uczpyfSl9Y29uc3QgaXNUb29CaWc9YT0+e2xldCByPTA7Zm9yKGNvbnN0IGkgb2YgYyl7cis9dGhpcy5fc3BsaXRMaW5lKG51bGwsbixhLHQsaSkubGVuZ3RoKmE7aWYocj5lKXJldHVybiEwfXJldHVybiExfTtvPTEyO2xldCBsPW8qci5MSU5FX0ZBQ1RPUixoPU1hdGgucm91bmQoZS9sKTtoPU1hdGgubWF4KGgscyk7Zm9yKDs7KXtsPWUvaDtvPXJvdW5kV2l0aFR3b0RpZ2l0cyhsL3IuTElORV9GQUNUT1IpO2lmKCFpc1Rvb0JpZyhvKSlicmVhaztoKyt9fWNvbnN0e2ZvbnROYW1lOmMsZm9udENvbG9yOmx9PXRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGE7dGhpcy5fZGVmYXVsdEFwcGVhcmFuY2U9KDAsaS5jcmVhdGVEZWZhdWx0QXBwZWFyYW5jZSkoe2ZvbnRTaXplOm8sZm9udE5hbWU6Yyxmb250Q29sb3I6bH0pfXJldHVyblt0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZSxvXX1fcmVuZGVyVGV4dChlLHQsYSxpLHMsbyxjKXtsZXQgbDtpZigxPT09cyl7bD0oaS10aGlzLl9nZXRUZXh0V2lkdGgoZSx0KSphKS8yfWVsc2UgaWYoMj09PXMpe2w9aS10aGlzLl9nZXRUZXh0V2lkdGgoZSx0KSphLW99ZWxzZSBsPW87bD0oMCxuLm51bWJlclRvU3RyaW5nKShsKTtyZXR1cm5gJHtsfSAke2M9KDAsbi5udW1iZXJUb1N0cmluZykoYyl9IFRkICgkeygwLHIuZXNjYXBlU3RyaW5nKShlKX0pIFRqYH1fZ2V0U2F2ZUZpZWxkUmVzb3VyY2VzKGUpe2NvbnN0e2xvY2FsUmVzb3VyY2VzOnQsYXBwZWFyYW5jZVJlc291cmNlczphLGFjcm9Gb3JtUmVzb3VyY2VzOnJ9PXRoaXMuX2ZpZWxkUmVzb3VyY2VzLG49dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YSYmdGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YS5mb250TmFtZTtpZighbilyZXR1cm4gdHx8cy5EaWN0LmVtcHR5O2Zvcihjb25zdCBlIG9mW3QsYV0paWYoZSBpbnN0YW5jZW9mIHMuRGljdCl7Y29uc3QgdD1lLmdldCgiRm9udCIpO2lmKHQgaW5zdGFuY2VvZiBzLkRpY3QmJnQuaGFzKG4pKXJldHVybiBlfWlmKHIgaW5zdGFuY2VvZiBzLkRpY3Qpe2NvbnN0IGE9ci5nZXQoIkZvbnQiKTtpZihhIGluc3RhbmNlb2Ygcy5EaWN0JiZhLmhhcyhuKSl7Y29uc3Qgcj1uZXcgcy5EaWN0KGUpO3Iuc2V0KG4sYS5nZXRSYXcobikpO2NvbnN0IGk9bmV3IHMuRGljdChlKTtpLnNldCgiRm9udCIscik7cmV0dXJuIHMuRGljdC5tZXJnZSh7eHJlZjplLGRpY3RBcnJheTpbaSx0XSxtZXJnZVN1YkRpY3RzOiEwfSl9fXJldHVybiB0fHxzLkRpY3QuZW1wdHl9Z2V0RmllbGRPYmplY3QoKXtyZXR1cm4gbnVsbH19Y2xhc3MgVGV4dFdpZGdldEFubm90YXRpb24gZXh0ZW5kcyBXaWRnZXRBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuX2hhc1RleHQ9ITA7Y29uc3QgdD1lLmRpY3Q7InN0cmluZyIhPXR5cGVvZiB0aGlzLmRhdGEuZmllbGRWYWx1ZSYmKHRoaXMuZGF0YS5maWVsZFZhbHVlPSIiKTtsZXQgYT0oMCxuLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnQsa2V5OiJRIn0pOyghTnVtYmVyLmlzSW50ZWdlcihhKXx8YTwwfHxhPjIpJiYoYT1udWxsKTt0aGlzLmRhdGEudGV4dEFsaWdubWVudD1hO2xldCBpPSgwLG4uZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6dCxrZXk6Ik1heExlbiJ9KTsoIU51bWJlci5pc0ludGVnZXIoaSl8fGk8MCkmJihpPTApO3RoaXMuZGF0YS5tYXhMZW49aTt0aGlzLmRhdGEubXVsdGlMaW5lPXRoaXMuaGFzRmllbGRGbGFnKHIuQW5ub3RhdGlvbkZpZWxkRmxhZy5NVUxUSUxJTkUpO3RoaXMuZGF0YS5jb21iPXRoaXMuaGFzRmllbGRGbGFnKHIuQW5ub3RhdGlvbkZpZWxkRmxhZy5DT01CKSYmIXRoaXMuaGFzRmllbGRGbGFnKHIuQW5ub3RhdGlvbkZpZWxkRmxhZy5NVUxUSUxJTkUpJiYhdGhpcy5oYXNGaWVsZEZsYWcoci5Bbm5vdGF0aW9uRmllbGRGbGFnLlBBU1NXT1JEKSYmIXRoaXMuaGFzRmllbGRGbGFnKHIuQW5ub3RhdGlvbkZpZWxkRmxhZy5GSUxFU0VMRUNUKSYmMCE9PXRoaXMuZGF0YS5tYXhMZW47dGhpcy5kYXRhLmRvTm90U2Nyb2xsPXRoaXMuaGFzRmllbGRGbGFnKHIuQW5ub3RhdGlvbkZpZWxkRmxhZy5ET05PVFNDUk9MTCl9X2dldENvbWJBcHBlYXJhbmNlKGUsdCxhLGkscyxvLGMpe2NvbnN0IGw9KDAsbi5udW1iZXJUb1N0cmluZykoaS90aGlzLmRhdGEubWF4TGVuKSxoPVtdLHU9dC5nZXRDaGFyUG9zaXRpb25zKGEpO2Zvcihjb25zdFtlLHRdb2YgdSloLnB1c2goYCgkeygwLHIuZXNjYXBlU3RyaW5nKShhLnN1YnN0cmluZyhlLHQpKX0pIFRqYCk7cmV0dXJuYC9UeCBCTUMgcSAke3RoaXMuZ2V0Qm9yZGVyQW5kQmFja2dyb3VuZEFwcGVhcmFuY2VzKGMpfUJUIGArZStgIDEgMCAwIDEgJHtzfSAke299IFRtICR7aC5qb2luKGAgJHtsfSAwIFRkIGApfSBFVCBRIEVNQ2B9X2dldE11bHRpbGluZUFwcGVhcmFuY2UoZSx0LGEscixuLGkscyxvLGMsbCl7Y29uc3QgaD10LnNwbGl0KC9cclxuP3xcbi8pLHU9W10sZD1uLTIqbztmb3IoY29uc3QgZSBvZiBoKXtjb25zdCB0PXRoaXMuX3NwbGl0TGluZShlLGEscixkKTtmb3IoY29uc3QgZSBvZiB0KXtjb25zdCB0PTA9PT11Lmxlbmd0aD9vOjA7dS5wdXNoKHRoaXMuX3JlbmRlclRleHQoZSxhLHIsbixzLHQsLXIpKX19Y29uc3QgZj11LmpvaW4oIlxuIik7cmV0dXJuYC9UeCBCTUMgcSAke3RoaXMuZ2V0Qm9yZGVyQW5kQmFja2dyb3VuZEFwcGVhcmFuY2VzKGwpfUJUIGArZStgIDEgMCAwIDEgMCAke2l9IFRtICR7Zn0gRVQgUSBFTUNgfV9zcGxpdExpbmUoZSx0LGEscixuPXt9KXtlPW4ubGluZXx8dC5lbmNvZGVTdHJpbmcoZSkuam9pbigiIik7Y29uc3QgaT1uLmdseXBoc3x8dC5jaGFyc1RvR2x5cGhzKGUpO2lmKGkubGVuZ3RoPD0xKXJldHVybltlXTtjb25zdCBzPW4ucG9zaXRpb25zfHx0LmdldENoYXJQb3NpdGlvbnMoZSksbz1hLzFlMyxjPVtdO2xldCBsPS0xLGg9LTEsdT0tMSxkPTAsZj0wO2ZvcihsZXQgdD0wLGE9aS5sZW5ndGg7dDxhO3QrKyl7Y29uc3RbYSxuXT1zW3RdLGc9aVt0XSxwPWcud2lkdGgqbztpZigiICI9PT1nLnVuaWNvZGUpaWYoZitwPnIpe2MucHVzaChlLnN1YnN0cmluZyhkLGEpKTtkPWE7Zj1wO2w9LTE7dT0tMX1lbHNle2YrPXA7bD1hO2g9bjt1PXR9ZWxzZSBpZihmK3A+cilpZigtMSE9PWwpe2MucHVzaChlLnN1YnN0cmluZyhkLGgpKTtkPWg7dD11KzE7bD0tMTtmPTB9ZWxzZXtjLnB1c2goZS5zdWJzdHJpbmcoZCxhKSk7ZD1hO2Y9cH1lbHNlIGYrPXB9ZDxlLmxlbmd0aCYmYy5wdXNoKGUuc3Vic3RyaW5nKGQsZS5sZW5ndGgpKTtyZXR1cm4gY31nZXRGaWVsZE9iamVjdCgpe3JldHVybntpZDp0aGlzLmRhdGEuaWQsdmFsdWU6dGhpcy5kYXRhLmZpZWxkVmFsdWUsZGVmYXVsdFZhbHVlOnRoaXMuZGF0YS5kZWZhdWx0RmllbGRWYWx1ZXx8IiIsbXVsdGlsaW5lOnRoaXMuZGF0YS5tdWx0aUxpbmUscGFzc3dvcmQ6dGhpcy5oYXNGaWVsZEZsYWcoci5Bbm5vdGF0aW9uRmllbGRGbGFnLlBBU1NXT1JEKSxjaGFyTGltaXQ6dGhpcy5kYXRhLm1heExlbixjb21iOnRoaXMuZGF0YS5jb21iLGVkaXRhYmxlOiF0aGlzLmRhdGEucmVhZE9ubHksaGlkZGVuOnRoaXMuZGF0YS5oaWRkZW4sbmFtZTp0aGlzLmRhdGEuZmllbGROYW1lLHJlY3Q6dGhpcy5kYXRhLnJlY3QsYWN0aW9uczp0aGlzLmRhdGEuYWN0aW9ucyxwYWdlOnRoaXMuZGF0YS5wYWdlSW5kZXgsc3Ryb2tlQ29sb3I6dGhpcy5kYXRhLmJvcmRlckNvbG9yLGZpbGxDb2xvcjp0aGlzLmRhdGEuYmFja2dyb3VuZENvbG9yLHJvdGF0aW9uOnRoaXMucm90YXRpb24sdHlwZToidGV4dCJ9fX1jbGFzcyBCdXR0b25XaWRnZXRBbm5vdGF0aW9uIGV4dGVuZHMgV2lkZ2V0QW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLmNoZWNrZWRBcHBlYXJhbmNlPW51bGw7dGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlPW51bGw7dGhpcy5kYXRhLmNoZWNrQm94PSF0aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuUkFESU8pJiYhdGhpcy5oYXNGaWVsZEZsYWcoci5Bbm5vdGF0aW9uRmllbGRGbGFnLlBVU0hCVVRUT04pO3RoaXMuZGF0YS5yYWRpb0J1dHRvbj10aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuUkFESU8pJiYhdGhpcy5oYXNGaWVsZEZsYWcoci5Bbm5vdGF0aW9uRmllbGRGbGFnLlBVU0hCVVRUT04pO3RoaXMuZGF0YS5wdXNoQnV0dG9uPXRoaXMuaGFzRmllbGRGbGFnKHIuQW5ub3RhdGlvbkZpZWxkRmxhZy5QVVNIQlVUVE9OKTt0aGlzLmRhdGEuaXNUb29sdGlwT25seT0hMTtpZih0aGlzLmRhdGEuY2hlY2tCb3gpdGhpcy5fcHJvY2Vzc0NoZWNrQm94KGUpO2Vsc2UgaWYodGhpcy5kYXRhLnJhZGlvQnV0dG9uKXRoaXMuX3Byb2Nlc3NSYWRpb0J1dHRvbihlKTtlbHNlIGlmKHRoaXMuZGF0YS5wdXNoQnV0dG9uKXt0aGlzLmRhdGEuaGFzT3duQ2FudmFzPSEwO3RoaXMuX3Byb2Nlc3NQdXNoQnV0dG9uKGUpfWVsc2UoMCxyLndhcm4pKCJJbnZhbGlkIGZpZWxkIGZsYWdzIGZvciBidXR0b24gd2lkZ2V0IGFubm90YXRpb24iKX1hc3luYyBnZXRPcGVyYXRvckxpc3QoZSx0LGEsbixpKXtpZih0aGlzLmRhdGEucHVzaEJ1dHRvbilyZXR1cm4gc3VwZXIuZ2V0T3BlcmF0b3JMaXN0KGUsdCxhLCExLGkpO2xldCBzPW51bGwsbz1udWxsO2lmKGkpe2NvbnN0IGU9aS5nZXQodGhpcy5kYXRhLmlkKTtzPWU/ZS52YWx1ZTpudWxsO289ZT9lLnJvdGF0aW9uOm51bGx9aWYobnVsbD09PXMmJnRoaXMuYXBwZWFyYW5jZSlyZXR1cm4gc3VwZXIuZ2V0T3BlcmF0b3JMaXN0KGUsdCxhLG4saSk7bnVsbD09cyYmKHM9dGhpcy5kYXRhLmNoZWNrQm94P3RoaXMuZGF0YS5maWVsZFZhbHVlPT09dGhpcy5kYXRhLmV4cG9ydFZhbHVlOnRoaXMuZGF0YS5maWVsZFZhbHVlPT09dGhpcy5kYXRhLmJ1dHRvblZhbHVlKTtjb25zdCBjPXM/dGhpcy5jaGVja2VkQXBwZWFyYW5jZTp0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2U7aWYoYyl7Y29uc3Qgcz10aGlzLmFwcGVhcmFuY2UsbD1jLmRpY3QuZ2V0QXJyYXkoIk1hdHJpeCIpfHxyLklERU5USVRZX01BVFJJWDtvJiZjLmRpY3Quc2V0KCJNYXRyaXgiLHRoaXMuZ2V0Um90YXRpb25NYXRyaXgoaSkpO3RoaXMuYXBwZWFyYW5jZT1jO2NvbnN0IGg9c3VwZXIuZ2V0T3BlcmF0b3JMaXN0KGUsdCxhLG4saSk7dGhpcy5hcHBlYXJhbmNlPXM7Yy5kaWN0LnNldCgiTWF0cml4IixsKTtyZXR1cm4gaH1yZXR1cm57b3BMaXN0Om5ldyBnLk9wZXJhdG9yTGlzdCxzZXBhcmF0ZUZvcm06ITEsc2VwYXJhdGVDYW52YXM6ITF9fWFzeW5jIHNhdmUoZSx0LGEpe3JldHVybiB0aGlzLmRhdGEuY2hlY2tCb3g/dGhpcy5fc2F2ZUNoZWNrYm94KGUsdCxhKTp0aGlzLmRhdGEucmFkaW9CdXR0b24/dGhpcy5fc2F2ZVJhZGlvQnV0dG9uKGUsdCxhKTpudWxsfWFzeW5jIF9zYXZlQ2hlY2tib3goZSx0LGEpe2lmKCFhKXJldHVybiBudWxsO2NvbnN0IG49YS5nZXQodGhpcy5kYXRhLmlkKTtsZXQgaT1uJiZuLnJvdGF0aW9uLGM9biYmbi52YWx1ZTtpZih2b2lkIDA9PT1pKXtpZih2b2lkIDA9PT1jKXJldHVybiBudWxsO2lmKHRoaXMuZGF0YS5maWVsZFZhbHVlPT09dGhpcy5kYXRhLmV4cG9ydFZhbHVlPT09YylyZXR1cm4gbnVsbH1jb25zdCBsPWUueHJlZi5mZXRjaElmUmVmKHRoaXMucmVmKTtpZighKGwgaW5zdGFuY2VvZiBzLkRpY3QpKXJldHVybiBudWxsO3ZvaWQgMD09PWkmJihpPXRoaXMucm90YXRpb24pO3ZvaWQgMD09PWMmJihjPXRoaXMuZGF0YS5maWVsZFZhbHVlPT09dGhpcy5kYXRhLmV4cG9ydFZhbHVlKTtjb25zdCBoPXtwYXRoOigwLHIuc3RyaW5nVG9QREZTdHJpbmcpKGwuZ2V0KCJUIil8fCIiKSx2YWx1ZTpjP3RoaXMuZGF0YS5leHBvcnRWYWx1ZToiIn0sdT1zLk5hbWUuZ2V0KGM/dGhpcy5kYXRhLmV4cG9ydFZhbHVlOiJPZmYiKTtsLnNldCgiViIsdSk7bC5zZXQoIkFTIix1KTtsLnNldCgiTSIsYEQ6JHsoMCxyLmdldE1vZGlmaWNhdGlvbkRhdGUpKCl9YCk7Y29uc3QgZD10aGlzLl9nZXRNS0RpY3QoaSk7ZCYmbC5zZXQoIk1LIixkKTtjb25zdCBmPWUueHJlZi5lbmNyeXB0O2xldCBnPW51bGw7ZiYmKGc9Zi5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0odGhpcy5yZWYubnVtLHRoaXMucmVmLmdlbikpO2NvbnN0IHA9W2Ake3RoaXMucmVmLm51bX0gJHt0aGlzLnJlZi5nZW59IG9ialxuYF07KDAsby53cml0ZURpY3QpKGwscCxnKTtwLnB1c2goIlxuZW5kb2JqXG4iKTtyZXR1cm5be3JlZjp0aGlzLnJlZixkYXRhOnAuam9pbigiIikseGZhOmh9XX1hc3luYyBfc2F2ZVJhZGlvQnV0dG9uKGUsdCxhKXtpZighYSlyZXR1cm4gbnVsbDtjb25zdCBuPWEuZ2V0KHRoaXMuZGF0YS5pZCk7bGV0IGk9biYmbi5yb3RhdGlvbixjPW4mJm4udmFsdWU7aWYodm9pZCAwPT09aSl7aWYodm9pZCAwPT09YylyZXR1cm4gbnVsbDtpZih0aGlzLmRhdGEuZmllbGRWYWx1ZT09PXRoaXMuZGF0YS5idXR0b25WYWx1ZT09PWMpcmV0dXJuIG51bGx9Y29uc3QgbD1lLnhyZWYuZmV0Y2hJZlJlZih0aGlzLnJlZik7aWYoIShsIGluc3RhbmNlb2Ygcy5EaWN0KSlyZXR1cm4gbnVsbDt2b2lkIDA9PT1jJiYoYz10aGlzLmRhdGEuZmllbGRWYWx1ZT09PXRoaXMuZGF0YS5idXR0b25WYWx1ZSk7dm9pZCAwPT09aSYmKGk9dGhpcy5yb3RhdGlvbik7Y29uc3QgaD17cGF0aDooMCxyLnN0cmluZ1RvUERGU3RyaW5nKShsLmdldCgiVCIpfHwiIiksdmFsdWU6Yz90aGlzLmRhdGEuYnV0dG9uVmFsdWU6IiJ9LHU9cy5OYW1lLmdldChjP3RoaXMuZGF0YS5idXR0b25WYWx1ZToiT2ZmIik7bGV0IGQ9bnVsbDtjb25zdCBmPWUueHJlZi5lbmNyeXB0O2lmKGMpaWYodGhpcy5wYXJlbnQgaW5zdGFuY2VvZiBzLlJlZil7Y29uc3QgdD1lLnhyZWYuZmV0Y2godGhpcy5wYXJlbnQpO2xldCBhPW51bGw7ZiYmKGE9Zi5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0odGhpcy5wYXJlbnQubnVtLHRoaXMucGFyZW50LmdlbikpO3Quc2V0KCJWIix1KTtkPVtgJHt0aGlzLnBhcmVudC5udW19ICR7dGhpcy5wYXJlbnQuZ2VufSBvYmpcbmBdOygwLG8ud3JpdGVEaWN0KSh0LGQsYSk7ZC5wdXNoKCJcbmVuZG9ialxuIil9ZWxzZSB0aGlzLnBhcmVudCBpbnN0YW5jZW9mIHMuRGljdCYmdGhpcy5wYXJlbnQuc2V0KCJWIix1KTtsLnNldCgiQVMiLHUpO2wuc2V0KCJNIixgRDokeygwLHIuZ2V0TW9kaWZpY2F0aW9uRGF0ZSkoKX1gKTtjb25zdCBnPXRoaXMuX2dldE1LRGljdChpKTtnJiZsLnNldCgiTUsiLGcpO2xldCBwPW51bGw7ZiYmKHA9Zi5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0odGhpcy5yZWYubnVtLHRoaXMucmVmLmdlbikpO2NvbnN0IG09W2Ake3RoaXMucmVmLm51bX0gJHt0aGlzLnJlZi5nZW59IG9ialxuYF07KDAsby53cml0ZURpY3QpKGwsbSxwKTttLnB1c2goIlxuZW5kb2JqXG4iKTtjb25zdCBiPVt7cmVmOnRoaXMucmVmLGRhdGE6bS5qb2luKCIiKSx4ZmE6aH1dO251bGwhPT1kJiZiLnB1c2goe3JlZjp0aGlzLnBhcmVudCxkYXRhOmQuam9pbigiIikseGZhOm51bGx9KTtyZXR1cm4gYn1fZ2V0RGVmYXVsdENoZWNrZWRBcHBlYXJhbmNlKGUsdCl7Y29uc3QgYT10aGlzLmRhdGEucmVjdFsyXS10aGlzLmRhdGEucmVjdFswXSxpPXRoaXMuZGF0YS5yZWN0WzNdLXRoaXMuZGF0YS5yZWN0WzFdLG89WzAsMCxhLGldLGM9LjgqTWF0aC5taW4oYSxpKTtsZXQgbCxoO2lmKCJjaGVjayI9PT10KXtsPXt3aWR0aDouNzU1KmMsaGVpZ2h0Oi43MDUqY307aD0iMyJ9ZWxzZSBpZigiZGlzYyI9PT10KXtsPXt3aWR0aDouNzkxKmMsaGVpZ2h0Oi43MDUqY307aD0ibCJ9ZWxzZSgwLHIudW5yZWFjaGFibGUpKGBfZ2V0RGVmYXVsdENoZWNrZWRBcHBlYXJhbmNlIC0gdW5zdXBwb3J0ZWQgdHlwZTogJHt0fWApO2NvbnN0IHU9YHEgQlQgL1BkZkpzWmFEYiAke2N9IFRmIDAgZyAkeygwLG4ubnVtYmVyVG9TdHJpbmcpKChhLWwud2lkdGgpLzIpfSAkeygwLG4ubnVtYmVyVG9TdHJpbmcpKChpLWwuaGVpZ2h0KS8yKX0gVGQgKCR7aH0pIFRqIEVUIFFgLGQ9bmV3IHMuRGljdChlLnhyZWYpO2Quc2V0KCJGb3JtVHlwZSIsMSk7ZC5zZXQoIlN1YnR5cGUiLHMuTmFtZS5nZXQoIkZvcm0iKSk7ZC5zZXQoIlR5cGUiLHMuTmFtZS5nZXQoIlhPYmplY3QiKSk7ZC5zZXQoIkJCb3giLG8pO2Quc2V0KCJNYXRyaXgiLFsxLDAsMCwxLDAsMF0pO2Quc2V0KCJMZW5ndGgiLHUubGVuZ3RoKTtjb25zdCBmPW5ldyBzLkRpY3QoZS54cmVmKSxnPW5ldyBzLkRpY3QoZS54cmVmKTtnLnNldCgiUGRmSnNaYURiIix0aGlzLmZhbGxiYWNrRm9udERpY3QpO2Yuc2V0KCJGb250IixnKTtkLnNldCgiUmVzb3VyY2VzIixmKTt0aGlzLmNoZWNrZWRBcHBlYXJhbmNlPW5ldyBwLlN0cmluZ1N0cmVhbSh1KTt0aGlzLmNoZWNrZWRBcHBlYXJhbmNlLmRpY3Q9ZDt0aGlzLl9zdHJlYW1zLnB1c2godGhpcy5jaGVja2VkQXBwZWFyYW5jZSl9X3Byb2Nlc3NDaGVja0JveChlKXtjb25zdCB0PWUuZGljdC5nZXQoIkFQIik7aWYoISh0IGluc3RhbmNlb2Ygcy5EaWN0KSlyZXR1cm47Y29uc3QgYT10LmdldCgiTiIpO2lmKCEoYSBpbnN0YW5jZW9mIHMuRGljdCkpcmV0dXJuO2NvbnN0IHI9dGhpcy5fZGVjb2RlRm9ybVZhbHVlKGUuZGljdC5nZXQoIkFTIikpOyJzdHJpbmciPT10eXBlb2YgciYmKHRoaXMuZGF0YS5maWVsZFZhbHVlPXIpO2NvbnN0IG49bnVsbCE9PXRoaXMuZGF0YS5maWVsZFZhbHVlJiYiT2ZmIiE9PXRoaXMuZGF0YS5maWVsZFZhbHVlP3RoaXMuZGF0YS5maWVsZFZhbHVlOiJZZXMiLGk9YS5nZXRLZXlzKCk7aWYoMD09PWkubGVuZ3RoKWkucHVzaCgiT2ZmIixuKTtlbHNlIGlmKDE9PT1pLmxlbmd0aCkiT2ZmIj09PWlbMF0/aS5wdXNoKG4pOmkudW5zaGlmdCgiT2ZmIik7ZWxzZSBpZihpLmluY2x1ZGVzKG4pKXtpLmxlbmd0aD0wO2kucHVzaCgiT2ZmIixuKX1lbHNle2NvbnN0IGU9aS5maW5kKChlPT4iT2ZmIiE9PWUpKTtpLmxlbmd0aD0wO2kucHVzaCgiT2ZmIixlKX1pLmluY2x1ZGVzKHRoaXMuZGF0YS5maWVsZFZhbHVlKXx8KHRoaXMuZGF0YS5maWVsZFZhbHVlPSJPZmYiKTt0aGlzLmRhdGEuZXhwb3J0VmFsdWU9aVsxXTt0aGlzLmNoZWNrZWRBcHBlYXJhbmNlPWEuZ2V0KHRoaXMuZGF0YS5leHBvcnRWYWx1ZSl8fG51bGw7dGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlPWEuZ2V0KCJPZmYiKXx8bnVsbDt0aGlzLmNoZWNrZWRBcHBlYXJhbmNlP3RoaXMuX3N0cmVhbXMucHVzaCh0aGlzLmNoZWNrZWRBcHBlYXJhbmNlKTp0aGlzLl9nZXREZWZhdWx0Q2hlY2tlZEFwcGVhcmFuY2UoZSwiY2hlY2siKTt0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2UmJnRoaXMuX3N0cmVhbXMucHVzaCh0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2UpO3RoaXMuX2ZhbGxiYWNrRm9udERpY3Q9dGhpcy5mYWxsYmFja0ZvbnREaWN0fV9wcm9jZXNzUmFkaW9CdXR0b24oZSl7dGhpcy5kYXRhLmZpZWxkVmFsdWU9dGhpcy5kYXRhLmJ1dHRvblZhbHVlPW51bGw7Y29uc3QgdD1lLmRpY3QuZ2V0KCJQYXJlbnQiKTtpZih0IGluc3RhbmNlb2Ygcy5EaWN0KXt0aGlzLnBhcmVudD1lLmRpY3QuZ2V0UmF3KCJQYXJlbnQiKTtjb25zdCBhPXQuZ2V0KCJWIik7YSBpbnN0YW5jZW9mIHMuTmFtZSYmKHRoaXMuZGF0YS5maWVsZFZhbHVlPXRoaXMuX2RlY29kZUZvcm1WYWx1ZShhKSl9Y29uc3QgYT1lLmRpY3QuZ2V0KCJBUCIpO2lmKCEoYSBpbnN0YW5jZW9mIHMuRGljdCkpcmV0dXJuO2NvbnN0IHI9YS5nZXQoIk4iKTtpZihyIGluc3RhbmNlb2Ygcy5EaWN0KXtmb3IoY29uc3QgZSBvZiByLmdldEtleXMoKSlpZigiT2ZmIiE9PWUpe3RoaXMuZGF0YS5idXR0b25WYWx1ZT10aGlzLl9kZWNvZGVGb3JtVmFsdWUoZSk7YnJlYWt9dGhpcy5jaGVja2VkQXBwZWFyYW5jZT1yLmdldCh0aGlzLmRhdGEuYnV0dG9uVmFsdWUpfHxudWxsO3RoaXMudW5jaGVja2VkQXBwZWFyYW5jZT1yLmdldCgiT2ZmIil8fG51bGw7dGhpcy5jaGVja2VkQXBwZWFyYW5jZT90aGlzLl9zdHJlYW1zLnB1c2godGhpcy5jaGVja2VkQXBwZWFyYW5jZSk6dGhpcy5fZ2V0RGVmYXVsdENoZWNrZWRBcHBlYXJhbmNlKGUsImRpc2MiKTt0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2UmJnRoaXMuX3N0cmVhbXMucHVzaCh0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2UpO3RoaXMuX2ZhbGxiYWNrRm9udERpY3Q9dGhpcy5mYWxsYmFja0ZvbnREaWN0fX1fcHJvY2Vzc1B1c2hCdXR0b24oZSl7aWYoZS5kaWN0LmhhcygiQSIpfHxlLmRpY3QuaGFzKCJBQSIpfHx0aGlzLmRhdGEuYWx0ZXJuYXRpdmVUZXh0KXt0aGlzLmRhdGEuaXNUb29sdGlwT25seT0hZS5kaWN0LmhhcygiQSIpJiYhZS5kaWN0LmhhcygiQUEiKTtoLkNhdGFsb2cucGFyc2VEZXN0RGljdGlvbmFyeSh7ZGVzdERpY3Q6ZS5kaWN0LHJlc3VsdE9iajp0aGlzLmRhdGEsZG9jQmFzZVVybDplLnBkZk1hbmFnZXIuZG9jQmFzZVVybCxkb2NBdHRhY2htZW50czplLmF0dGFjaG1lbnRzfSl9ZWxzZSgwLHIud2FybikoIlB1c2ggYnV0dG9ucyB3aXRob3V0IGFjdGlvbiBkaWN0aW9uYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQiKX1nZXRGaWVsZE9iamVjdCgpe2xldCBlLHQ9ImJ1dHRvbiI7aWYodGhpcy5kYXRhLmNoZWNrQm94KXt0PSJjaGVja2JveCI7ZT10aGlzLmRhdGEuZXhwb3J0VmFsdWV9ZWxzZSBpZih0aGlzLmRhdGEucmFkaW9CdXR0b24pe3Q9InJhZGlvYnV0dG9uIjtlPXRoaXMuZGF0YS5idXR0b25WYWx1ZX1yZXR1cm57aWQ6dGhpcy5kYXRhLmlkLHZhbHVlOnRoaXMuZGF0YS5maWVsZFZhbHVlfHwiT2ZmIixkZWZhdWx0VmFsdWU6dGhpcy5kYXRhLmRlZmF1bHRGaWVsZFZhbHVlLGV4cG9ydFZhbHVlczplLGVkaXRhYmxlOiF0aGlzLmRhdGEucmVhZE9ubHksbmFtZTp0aGlzLmRhdGEuZmllbGROYW1lLHJlY3Q6dGhpcy5kYXRhLnJlY3QsaGlkZGVuOnRoaXMuZGF0YS5oaWRkZW4sYWN0aW9uczp0aGlzLmRhdGEuYWN0aW9ucyxwYWdlOnRoaXMuZGF0YS5wYWdlSW5kZXgsc3Ryb2tlQ29sb3I6dGhpcy5kYXRhLmJvcmRlckNvbG9yLGZpbGxDb2xvcjp0aGlzLmRhdGEuYmFja2dyb3VuZENvbG9yLHJvdGF0aW9uOnRoaXMucm90YXRpb24sdHlwZTp0fX1nZXQgZmFsbGJhY2tGb250RGljdCgpe2NvbnN0IGU9bmV3IHMuRGljdDtlLnNldCgiQmFzZUZvbnQiLHMuTmFtZS5nZXQoIlphcGZEaW5nYmF0cyIpKTtlLnNldCgiVHlwZSIscy5OYW1lLmdldCgiRmFsbGJhY2tUeXBlIikpO2Uuc2V0KCJTdWJ0eXBlIixzLk5hbWUuZ2V0KCJGYWxsYmFja1R5cGUiKSk7ZS5zZXQoIkVuY29kaW5nIixzLk5hbWUuZ2V0KCJaYXBmRGluZ2JhdHNFbmNvZGluZyIpKTtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiZmFsbGJhY2tGb250RGljdCIsZSl9fWNsYXNzIENob2ljZVdpZGdldEFubm90YXRpb24gZXh0ZW5kcyBXaWRnZXRBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuZGF0YS5vcHRpb25zPVtdO2NvbnN0IHQ9KDAsbi5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDplLmRpY3Qsa2V5OiJPcHQifSk7aWYoQXJyYXkuaXNBcnJheSh0KSl7Y29uc3QgYT1lLnhyZWY7Zm9yKGxldCBlPTAscj10Lmxlbmd0aDtlPHI7ZSsrKXtjb25zdCByPWEuZmV0Y2hJZlJlZih0W2VdKSxuPUFycmF5LmlzQXJyYXkocik7dGhpcy5kYXRhLm9wdGlvbnNbZV09e2V4cG9ydFZhbHVlOnRoaXMuX2RlY29kZUZvcm1WYWx1ZShuP2EuZmV0Y2hJZlJlZihyWzBdKTpyKSxkaXNwbGF5VmFsdWU6dGhpcy5fZGVjb2RlRm9ybVZhbHVlKG4/YS5mZXRjaElmUmVmKHJbMV0pOnIpfX19InN0cmluZyI9PXR5cGVvZiB0aGlzLmRhdGEuZmllbGRWYWx1ZT90aGlzLmRhdGEuZmllbGRWYWx1ZT1bdGhpcy5kYXRhLmZpZWxkVmFsdWVdOnRoaXMuZGF0YS5maWVsZFZhbHVlfHwodGhpcy5kYXRhLmZpZWxkVmFsdWU9W10pO3RoaXMuZGF0YS5jb21ibz10aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuQ09NQk8pO3RoaXMuZGF0YS5tdWx0aVNlbGVjdD10aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuTVVMVElTRUxFQ1QpO3RoaXMuX2hhc1RleHQ9ITB9Z2V0RmllbGRPYmplY3QoKXtjb25zdCBlPXRoaXMuZGF0YS5jb21ibz8iY29tYm9ib3giOiJsaXN0Ym94Iix0PXRoaXMuZGF0YS5maWVsZFZhbHVlLmxlbmd0aD4wP3RoaXMuZGF0YS5maWVsZFZhbHVlWzBdOm51bGw7cmV0dXJue2lkOnRoaXMuZGF0YS5pZCx2YWx1ZTp0LGRlZmF1bHRWYWx1ZTp0aGlzLmRhdGEuZGVmYXVsdEZpZWxkVmFsdWUsZWRpdGFibGU6IXRoaXMuZGF0YS5yZWFkT25seSxuYW1lOnRoaXMuZGF0YS5maWVsZE5hbWUscmVjdDp0aGlzLmRhdGEucmVjdCxudW1JdGVtczp0aGlzLmRhdGEuZmllbGRWYWx1ZS5sZW5ndGgsbXVsdGlwbGVTZWxlY3Rpb246dGhpcy5kYXRhLm11bHRpU2VsZWN0LGhpZGRlbjp0aGlzLmRhdGEuaGlkZGVuLGFjdGlvbnM6dGhpcy5kYXRhLmFjdGlvbnMsaXRlbXM6dGhpcy5kYXRhLm9wdGlvbnMscGFnZTp0aGlzLmRhdGEucGFnZUluZGV4LHN0cm9rZUNvbG9yOnRoaXMuZGF0YS5ib3JkZXJDb2xvcixmaWxsQ29sb3I6dGhpcy5kYXRhLmJhY2tncm91bmRDb2xvcixyb3RhdGlvbjp0aGlzLnJvdGF0aW9uLHR5cGU6ZX19YXN5bmMgX2dldEFwcGVhcmFuY2UoZSx0LGEpe2lmKHRoaXMuZGF0YS5jb21ibylyZXR1cm4gc3VwZXIuX2dldEFwcGVhcmFuY2UoZSx0LGEpO2lmKCFhKXJldHVybiBudWxsO2NvbnN0IG49YS5nZXQodGhpcy5kYXRhLmlkKTtpZighbilyZXR1cm4gbnVsbDtjb25zdCBzPW4ucm90YXRpb247bGV0IG89bi52YWx1ZTtpZih2b2lkIDA9PT1zJiZ2b2lkIDA9PT1vKXJldHVybiBudWxsO3ZvaWQgMD09PW8/bz10aGlzLmRhdGEuZmllbGRWYWx1ZTpBcnJheS5pc0FycmF5KG8pfHwobz1bb10pO2xldCBjPXRoaXMuZGF0YS5yZWN0WzNdLXRoaXMuZGF0YS5yZWN0WzFdLGw9dGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF07OTAhPT1zJiYyNzAhPT1zfHwoW2wsY109W2MsbF0pO2NvbnN0IGg9dGhpcy5kYXRhLm9wdGlvbnMubGVuZ3RoLHU9W107Zm9yKGxldCBlPTA7ZTxoO2UrKyl7Y29uc3R7ZXhwb3J0VmFsdWU6dH09dGhpcy5kYXRhLm9wdGlvbnNbZV07by5pbmNsdWRlcyh0KSYmdS5wdXNoKGUpfXRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlfHwodGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YT0oMCxpLnBhcnNlRGVmYXVsdEFwcGVhcmFuY2UpKHRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlPSIvSGVsdmV0aWNhIDAgVGYgMCBnIikpO2NvbnN0IGQ9YXdhaXQgV2lkZ2V0QW5ub3RhdGlvbi5fZ2V0Rm9udERhdGEoZSx0LHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEsdGhpcy5fZmllbGRSZXNvdXJjZXMubWVyZ2VkUmVzb3VyY2VzKTtsZXQgZix7Zm9udFNpemU6Z309dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YTtpZihnKWY9dGhpcy5fZGVmYXVsdEFwcGVhcmFuY2U7ZWxzZXtjb25zdCBlPShjLTIpL2g7bGV0IHQsYT0tMTtmb3IoY29uc3R7ZGlzcGxheVZhbHVlOmV9b2YgdGhpcy5kYXRhLm9wdGlvbnMpe2NvbnN0IHI9dGhpcy5fZ2V0VGV4dFdpZHRoKGUsZCk7aWYocj5hKXthPXI7dD1lfX1bZixnXT10aGlzLl9jb21wdXRlRm9udFNpemUoZSxsLTQsdCxkLC0xKX1jb25zdCBwPWcqci5MSU5FX0ZBQ1RPUixtPShwLWcpLzIsYj1NYXRoLmZsb29yKGMvcCk7bGV0IHk7aWYoMT09PXUubGVuZ3RoKXtjb25zdCBlPXVbMF07eT1lLWUlYn1lbHNlIHk9dS5sZW5ndGg/dVswXTowO2NvbnN0IHc9TWF0aC5taW4oeStiKzEsaCksUz1bIi9UeCBCTUMgcSIsYDEgMSAke2x9ICR7Y30gcmUgVyBuYF07aWYodS5sZW5ndGgpe1MucHVzaCgiMC42MDAwMDYgMC43NTY4NjYgMC44NTQ5MDQgcmciKTtmb3IoY29uc3QgZSBvZiB1KXk8PWUmJmU8dyYmUy5wdXNoKGAxICR7Yy0oZS15KzEpKnB9ICR7bH0gJHtwfSByZSBmYCl9Uy5wdXNoKCJCVCIsZixgMSAwIDAgMSAwICR7Y30gVG1gKTtmb3IobGV0IGU9eTtlPHc7ZSsrKXtjb25zdHtkaXNwbGF5VmFsdWU6dH09dGhpcy5kYXRhLm9wdGlvbnNbZV0sYT1lPT09eT8yOjAscj1lPT09eT9tOjA7Uy5wdXNoKHRoaXMuX3JlbmRlclRleHQodCxkLGcsbCwwLGEsLXArcikpfVMucHVzaCgiRVQgUSBFTUMiKTtyZXR1cm4gUy5qb2luKCJcbiIpfX1jbGFzcyBTaWduYXR1cmVXaWRnZXRBbm5vdGF0aW9uIGV4dGVuZHMgV2lkZ2V0QW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLmRhdGEuZmllbGRWYWx1ZT1udWxsfWdldEZpZWxkT2JqZWN0KCl7cmV0dXJue2lkOnRoaXMuZGF0YS5pZCx2YWx1ZTpudWxsLHBhZ2U6dGhpcy5kYXRhLnBhZ2VJbmRleCx0eXBlOiJzaWduYXR1cmUifX19Y2xhc3MgVGV4dEFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0IHQ9ZS5kaWN0O3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1yLkFubm90YXRpb25UeXBlLlRFWFQ7aWYodGhpcy5kYXRhLmhhc0FwcGVhcmFuY2UpdGhpcy5kYXRhLm5hbWU9Ik5vSWNvbiI7ZWxzZXt0aGlzLmRhdGEucmVjdFsxXT10aGlzLmRhdGEucmVjdFszXS0yMjt0aGlzLmRhdGEucmVjdFsyXT10aGlzLmRhdGEucmVjdFswXSsyMjt0aGlzLmRhdGEubmFtZT10LmhhcygiTmFtZSIpP3QuZ2V0KCJOYW1lIikubmFtZToiTm90ZSJ9aWYodC5oYXMoIlN0YXRlIikpe3RoaXMuZGF0YS5zdGF0ZT10LmdldCgiU3RhdGUiKXx8bnVsbDt0aGlzLmRhdGEuc3RhdGVNb2RlbD10LmdldCgiU3RhdGVNb2RlbCIpfHxudWxsfWVsc2V7dGhpcy5kYXRhLnN0YXRlPW51bGw7dGhpcy5kYXRhLnN0YXRlTW9kZWw9bnVsbH19fWNsYXNzIExpbmtBbm5vdGF0aW9uIGV4dGVuZHMgQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9ci5Bbm5vdGF0aW9uVHlwZS5MSU5LO2NvbnN0IHQ9Z2V0UXVhZFBvaW50cyhlLmRpY3QsdGhpcy5yZWN0YW5nbGUpO3QmJih0aGlzLmRhdGEucXVhZFBvaW50cz10KTt0aGlzLmRhdGEuYm9yZGVyQ29sb3I9dGhpcy5kYXRhLmJvcmRlckNvbG9yfHx0aGlzLmRhdGEuY29sb3I7aC5DYXRhbG9nLnBhcnNlRGVzdERpY3Rpb25hcnkoe2Rlc3REaWN0OmUuZGljdCxyZXN1bHRPYmo6dGhpcy5kYXRhLGRvY0Jhc2VVcmw6ZS5wZGZNYW5hZ2VyLmRvY0Jhc2VVcmwsZG9jQXR0YWNobWVudHM6ZS5hdHRhY2htZW50c30pfX1jbGFzcyBQb3B1cEFubm90YXRpb24gZXh0ZW5kcyBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1yLkFubm90YXRpb25UeXBlLlBPUFVQO2xldCB0PWUuZGljdC5nZXQoIlBhcmVudCIpO2lmKCF0KXsoMCxyLndhcm4pKCJQb3B1cCBhbm5vdGF0aW9uIGhhcyBhIG1pc3Npbmcgb3IgaW52YWxpZCBwYXJlbnQgYW5ub3RhdGlvbi4iKTtyZXR1cm59Y29uc3QgYT10LmdldCgiU3VidHlwZSIpO3RoaXMuZGF0YS5wYXJlbnRUeXBlPWEgaW5zdGFuY2VvZiBzLk5hbWU/YS5uYW1lOm51bGw7Y29uc3Qgbj1lLmRpY3QuZ2V0UmF3KCJQYXJlbnQiKTt0aGlzLmRhdGEucGFyZW50SWQ9biBpbnN0YW5jZW9mIHMuUmVmP24udG9TdHJpbmcoKTpudWxsO2NvbnN0IGk9dC5nZXRBcnJheSgiUmVjdCIpO0FycmF5LmlzQXJyYXkoaSkmJjQ9PT1pLmxlbmd0aD90aGlzLmRhdGEucGFyZW50UmVjdD1yLlV0aWwubm9ybWFsaXplUmVjdChpKTp0aGlzLmRhdGEucGFyZW50UmVjdD1bMCwwLDAsMF07Y29uc3Qgbz10LmdldCgiUlQiKTsoMCxzLmlzTmFtZSkobyxyLkFubm90YXRpb25SZXBseVR5cGUuR1JPVVApJiYodD10LmdldCgiSVJUIikpO2lmKHQuaGFzKCJNIikpe3RoaXMuc2V0TW9kaWZpY2F0aW9uRGF0ZSh0LmdldCgiTSIpKTt0aGlzLmRhdGEubW9kaWZpY2F0aW9uRGF0ZT10aGlzLm1vZGlmaWNhdGlvbkRhdGV9ZWxzZSB0aGlzLmRhdGEubW9kaWZpY2F0aW9uRGF0ZT1udWxsO2lmKHQuaGFzKCJDIikpe3RoaXMuc2V0Q29sb3IodC5nZXRBcnJheSgiQyIpKTt0aGlzLmRhdGEuY29sb3I9dGhpcy5jb2xvcn1lbHNlIHRoaXMuZGF0YS5jb2xvcj1udWxsO2lmKCF0aGlzLnZpZXdhYmxlKXtjb25zdCBlPXQuZ2V0KCJGIik7dGhpcy5faXNWaWV3YWJsZShlKSYmdGhpcy5zZXRGbGFncyhlKX10aGlzLnNldFRpdGxlKHQuZ2V0KCJUIikpO3RoaXMuZGF0YS50aXRsZU9iaj10aGlzLl90aXRsZTt0aGlzLnNldENvbnRlbnRzKHQuZ2V0KCJDb250ZW50cyIpKTt0aGlzLmRhdGEuY29udGVudHNPYmo9dGhpcy5fY29udGVudHM7dC5oYXMoIlJDIikmJih0aGlzLmRhdGEucmljaFRleHQ9bS5YRkFGYWN0b3J5LmdldFJpY2hUZXh0QXNIdG1sKHQuZ2V0KCJSQyIpKSl9fXQuUG9wdXBBbm5vdGF0aW9uPVBvcHVwQW5ub3RhdGlvbjtjbGFzcyBGcmVlVGV4dEFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1yLkFubm90YXRpb25UeXBlLkZSRUVURVhUfWdldCBoYXNUZXh0Q29udGVudCgpe3JldHVybiEhdGhpcy5hcHBlYXJhbmNlfXN0YXRpYyBjcmVhdGVOZXdEaWN0KGUsdCx7YXBSZWY6YSxhcDpufSl7Y29uc3R7Y29sb3I6byxmb250U2l6ZTpjLHJlY3Q6bCxyb3RhdGlvbjpoLHVzZXI6dSx2YWx1ZTpkfT1lLGY9bmV3IHMuRGljdCh0KTtmLnNldCgiVHlwZSIscy5OYW1lLmdldCgiQW5ub3QiKSk7Zi5zZXQoIlN1YnR5cGUiLHMuTmFtZS5nZXQoIkZyZWVUZXh0IikpO2Yuc2V0KCJDcmVhdGlvbkRhdGUiLGBEOiR7KDAsci5nZXRNb2RpZmljYXRpb25EYXRlKSgpfWApO2Yuc2V0KCJSZWN0IixsKTtjb25zdCBnPWAvSGVsdiAke2N9IFRmICR7KDAsaS5nZXRQZGZDb2xvcikobywhMCl9YDtmLnNldCgiREEiLGcpO2Yuc2V0KCJDb250ZW50cyIsZCk7Zi5zZXQoIkYiLDQpO2Yuc2V0KCJCb3JkZXIiLFswLDAsMF0pO2Yuc2V0KCJSb3RhdGUiLGgpO3UmJmYuc2V0KCJUIiwoMCxyLnN0cmluZ1RvVVRGOFN0cmluZykodSkpO2NvbnN0IHA9bmV3IHMuRGljdCh0KTtmLnNldCgiQVAiLHApO2E/cC5zZXQoIk4iLGEpOnAuc2V0KCJOIixuKTtyZXR1cm4gZn1zdGF0aWMgYXN5bmMgY3JlYXRlTmV3QXBwZWFyYW5jZVN0cmVhbShlLHQsYSl7Y29uc3R7YmFzZUZvbnRSZWY6byxldmFsdWF0b3I6Yyx0YXNrOmx9PWEse2NvbG9yOmgsZm9udFNpemU6dSxyZWN0OmQscm90YXRpb246Zix2YWx1ZTpnfT1lLG09bmV3IHMuRGljdCh0KSxiPW5ldyBzLkRpY3QodCk7aWYobyliLnNldCgiSGVsdiIsbyk7ZWxzZXtjb25zdCBlPW5ldyBzLkRpY3QodCk7ZS5zZXQoIkJhc2VGb250IixzLk5hbWUuZ2V0KCJIZWx2ZXRpY2EiKSk7ZS5zZXQoIlR5cGUiLHMuTmFtZS5nZXQoIkZvbnQiKSk7ZS5zZXQoIlN1YnR5cGUiLHMuTmFtZS5nZXQoIlR5cGUxIikpO2Uuc2V0KCJFbmNvZGluZyIscy5OYW1lLmdldCgiV2luQW5zaUVuY29kaW5nIikpO2Iuc2V0KCJIZWx2IixlKX1tLnNldCgiRm9udCIsYik7Y29uc3QgeT1hd2FpdCBXaWRnZXRBbm5vdGF0aW9uLl9nZXRGb250RGF0YShjLGwse2ZvbnROYW1lOiJIZWx2ZXRpY2EiLGZvbnRTaXplOnV9LG0pLFt3LFMseCxrXT1kO2xldCBDPXgtdyx2PWstUztmJTE4MCE9MCYmKFtDLHZdPVt2LENdKTtjb25zdCBGPWcuc3BsaXQoIlxuIiksTz11LzFlMztsZXQgVD0tMS8wO2NvbnN0IE09W107Zm9yKGxldCBlIG9mIEYpe2U9eS5lbmNvZGVTdHJpbmcoZSkuam9pbigiIik7TS5wdXNoKGUpO2xldCB0PTA7Y29uc3QgYT15LmNoYXJzVG9HbHlwaHMoZSk7Zm9yKGNvbnN0IGUgb2YgYSl0Kz1lLndpZHRoKk87VD1NYXRoLm1heChULHQpfWxldCBFPTE7VD5DJiYoRT1DL1QpO2xldCBEPTE7Y29uc3QgTj1yLkxJTkVfRkFDVE9SKnUsUj1yLkxJTkVfREVTQ0VOVF9GQUNUT1IqdSxMPU4qRi5sZW5ndGg7TD52JiYoRD12L0wpO2NvbnN0IGo9dSpNYXRoLm1pbihFLEQpLCQ9WyJxIixgMCAwICR7KDAsbi5udW1iZXJUb1N0cmluZykoQyl9ICR7KDAsbi5udW1iZXJUb1N0cmluZykodil9IHJlIFcgbmAsIkJUIixgMSAwIDAgMSAwICR7KDAsbi5udW1iZXJUb1N0cmluZykoditSKX0gVG0gMCBUYyAkeygwLGkuZ2V0UGRmQ29sb3IpKGgsITApfWAsYC9IZWx2ICR7KDAsbi5udW1iZXJUb1N0cmluZykoail9IFRmYF0sXz0oMCxuLm51bWJlclRvU3RyaW5nKShOKTtmb3IoY29uc3QgZSBvZiBNKSQucHVzaChgMCAtJHtffSBUZCAoJHsoMCxyLmVzY2FwZVN0cmluZykoZSl9KSBUamApOyQucHVzaCgiRVQiLCJRIik7Y29uc3QgVT0kLmpvaW4oIlxuIiksWD1uZXcgcy5EaWN0KHQpO1guc2V0KCJGb3JtVHlwZSIsMSk7WC5zZXQoIlN1YnR5cGUiLHMuTmFtZS5nZXQoIkZvcm0iKSk7WC5zZXQoIlR5cGUiLHMuTmFtZS5nZXQoIlhPYmplY3QiKSk7WC5zZXQoIkJCb3giLFswLDAsQyx2XSk7WC5zZXQoIkxlbmd0aCIsVS5sZW5ndGgpO1guc2V0KCJSZXNvdXJjZXMiLG0pO2lmKGYpe2NvbnN0IGU9V2lkZ2V0QW5ub3RhdGlvbi5fZ2V0Um90YXRpb25NYXRyaXgoZixDLHYpO1guc2V0KCJNYXRyaXgiLGUpfWNvbnN0IEg9bmV3IHAuU3RyaW5nU3RyZWFtKFUpO0guZGljdD1YO3JldHVybiBIfX1jbGFzcyBMaW5lQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3R7ZGljdDp0fT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1yLkFubm90YXRpb25UeXBlLkxJTkU7Y29uc3QgYT10LmdldEFycmF5KCJMIik7dGhpcy5kYXRhLmxpbmVDb29yZGluYXRlcz1yLlV0aWwubm9ybWFsaXplUmVjdChhKTt0aGlzLnNldExpbmVFbmRpbmdzKHQuZ2V0QXJyYXkoIkxFIikpO3RoaXMuZGF0YS5saW5lRW5kaW5ncz10aGlzLmxpbmVFbmRpbmdzO2lmKCF0aGlzLmFwcGVhcmFuY2Upe2NvbnN0IG49dGhpcy5jb2xvcj9BcnJheS5mcm9tKHRoaXMuY29sb3IsKGU9PmUvMjU1KSk6WzAsMCwwXSxpPXQuZ2V0KCJDQSIpO2xldCBzPW51bGwsbz10LmdldEFycmF5KCJJQyIpO2lmKG8pe289Z2V0UmdiQ29sb3IobyxudWxsKTtzPW8/QXJyYXkuZnJvbShvLChlPT5lLzI1NSkpOm51bGx9Y29uc3QgYz1zP2k6bnVsbCxsPXRoaXMuYm9yZGVyU3R5bGUud2lkdGh8fDEsaD0yKmwsdT1bdGhpcy5kYXRhLmxpbmVDb29yZGluYXRlc1swXS1oLHRoaXMuZGF0YS5saW5lQ29vcmRpbmF0ZXNbMV0taCx0aGlzLmRhdGEubGluZUNvb3JkaW5hdGVzWzJdK2gsdGhpcy5kYXRhLmxpbmVDb29yZGluYXRlc1szXStoXTtyLlV0aWwuaW50ZXJzZWN0KHRoaXMucmVjdGFuZ2xlLHUpfHwodGhpcy5yZWN0YW5nbGU9dSk7dGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6ZS54cmVmLGV4dHJhOmAke2x9IHdgLHN0cm9rZUNvbG9yOm4sZmlsbENvbG9yOnMsc3Ryb2tlQWxwaGE6aSxmaWxsQWxwaGE6Yyxwb2ludHNDYWxsYmFjazooZSx0KT0+e2UucHVzaChgJHthWzBdfSAke2FbMV19IG1gLGAke2FbMl19ICR7YVszXX0gbGAsIlMiKTtyZXR1cm5bdFswXS54LWwsdFsxXS54K2wsdFszXS55LWwsdFsxXS55K2xdfX0pfX19Y2xhc3MgU3F1YXJlQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPXIuQW5ub3RhdGlvblR5cGUuU1FVQVJFO2lmKCF0aGlzLmFwcGVhcmFuY2Upe2NvbnN0IHQ9dGhpcy5jb2xvcj9BcnJheS5mcm9tKHRoaXMuY29sb3IsKGU9PmUvMjU1KSk6WzAsMCwwXSxhPWUuZGljdC5nZXQoIkNBIik7bGV0IHI9bnVsbCxuPWUuZGljdC5nZXRBcnJheSgiSUMiKTtpZihuKXtuPWdldFJnYkNvbG9yKG4sbnVsbCk7cj1uP0FycmF5LmZyb20obiwoZT0+ZS8yNTUpKTpudWxsfWNvbnN0IGk9cj9hOm51bGw7aWYoMD09PXRoaXMuYm9yZGVyU3R5bGUud2lkdGgmJiFyKXJldHVybjt0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjplLnhyZWYsZXh0cmE6YCR7dGhpcy5ib3JkZXJTdHlsZS53aWR0aH0gd2Asc3Ryb2tlQ29sb3I6dCxmaWxsQ29sb3I6cixzdHJva2VBbHBoYTphLGZpbGxBbHBoYTppLHBvaW50c0NhbGxiYWNrOihlLHQpPT57Y29uc3QgYT10WzJdLngrdGhpcy5ib3JkZXJTdHlsZS53aWR0aC8yLG49dFsyXS55K3RoaXMuYm9yZGVyU3R5bGUud2lkdGgvMixpPXRbM10ueC10WzJdLngtdGhpcy5ib3JkZXJTdHlsZS53aWR0aCxzPXRbMV0ueS10WzNdLnktdGhpcy5ib3JkZXJTdHlsZS53aWR0aDtlLnB1c2goYCR7YX0gJHtufSAke2l9ICR7c30gcmVgKTtyP2UucHVzaCgiQiIpOmUucHVzaCgiUyIpO3JldHVyblt0WzBdLngsdFsxXS54LHRbM10ueSx0WzFdLnldfX0pfX19Y2xhc3MgQ2lyY2xlQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPXIuQW5ub3RhdGlvblR5cGUuQ0lSQ0xFO2lmKCF0aGlzLmFwcGVhcmFuY2Upe2NvbnN0IHQ9dGhpcy5jb2xvcj9BcnJheS5mcm9tKHRoaXMuY29sb3IsKGU9PmUvMjU1KSk6WzAsMCwwXSxhPWUuZGljdC5nZXQoIkNBIik7bGV0IHI9bnVsbCxuPWUuZGljdC5nZXRBcnJheSgiSUMiKTtpZihuKXtuPWdldFJnYkNvbG9yKG4sbnVsbCk7cj1uP0FycmF5LmZyb20obiwoZT0+ZS8yNTUpKTpudWxsfWNvbnN0IGk9cj9hOm51bGw7aWYoMD09PXRoaXMuYm9yZGVyU3R5bGUud2lkdGgmJiFyKXJldHVybjtjb25zdCBzPTQvMypNYXRoLnRhbihNYXRoLlBJLzgpO3RoaXMuX3NldERlZmF1bHRBcHBlYXJhbmNlKHt4cmVmOmUueHJlZixleHRyYTpgJHt0aGlzLmJvcmRlclN0eWxlLndpZHRofSB3YCxzdHJva2VDb2xvcjp0LGZpbGxDb2xvcjpyLHN0cm9rZUFscGhhOmEsZmlsbEFscGhhOmkscG9pbnRzQ2FsbGJhY2s6KGUsdCk9Pntjb25zdCBhPXRbMF0ueCt0aGlzLmJvcmRlclN0eWxlLndpZHRoLzIsbj10WzBdLnktdGhpcy5ib3JkZXJTdHlsZS53aWR0aC8yLGk9dFszXS54LXRoaXMuYm9yZGVyU3R5bGUud2lkdGgvMixvPXRbM10ueSt0aGlzLmJvcmRlclN0eWxlLndpZHRoLzIsYz1hKyhpLWEpLzIsbD1uKyhvLW4pLzIsaD0oaS1hKS8yKnMsdT0oby1uKS8yKnM7ZS5wdXNoKGAke2N9ICR7b30gbWAsYCR7YytofSAke299ICR7aX0gJHtsK3V9ICR7aX0gJHtsfSBjYCxgJHtpfSAke2wtdX0gJHtjK2h9ICR7bn0gJHtjfSAke259IGNgLGAke2MtaH0gJHtufSAke2F9ICR7bC11fSAke2F9ICR7bH0gY2AsYCR7YX0gJHtsK3V9ICR7Yy1ofSAke299ICR7Y30gJHtvfSBjYCwiaCIpO3I/ZS5wdXNoKCJCIik6ZS5wdXNoKCJTIik7cmV0dXJuW3RbMF0ueCx0WzFdLngsdFszXS55LHRbMV0ueV19fSl9fX1jbGFzcyBQb2x5bGluZUFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0e2RpY3Q6dH09ZTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9ci5Bbm5vdGF0aW9uVHlwZS5QT0xZTElORTt0aGlzLmRhdGEudmVydGljZXM9W107aWYoISh0aGlzIGluc3RhbmNlb2YgUG9seWdvbkFubm90YXRpb24pKXt0aGlzLnNldExpbmVFbmRpbmdzKHQuZ2V0QXJyYXkoIkxFIikpO3RoaXMuZGF0YS5saW5lRW5kaW5ncz10aGlzLmxpbmVFbmRpbmdzfWNvbnN0IGE9dC5nZXRBcnJheSgiVmVydGljZXMiKTtpZihBcnJheS5pc0FycmF5KGEpKXtmb3IobGV0IGU9MCx0PWEubGVuZ3RoO2U8dDtlKz0yKXRoaXMuZGF0YS52ZXJ0aWNlcy5wdXNoKHt4OmFbZV0seTphW2UrMV19KTtpZighdGhpcy5hcHBlYXJhbmNlKXtjb25zdCBhPXRoaXMuY29sb3I/QXJyYXkuZnJvbSh0aGlzLmNvbG9yLChlPT5lLzI1NSkpOlswLDAsMF0sbj10LmdldCgiQ0EiKSxpPXRoaXMuYm9yZGVyU3R5bGUud2lkdGh8fDEscz0yKmksbz1bMS8wLDEvMCwtMS8wLC0xLzBdO2Zvcihjb25zdCBlIG9mIHRoaXMuZGF0YS52ZXJ0aWNlcyl7b1swXT1NYXRoLm1pbihvWzBdLGUueC1zKTtvWzFdPU1hdGgubWluKG9bMV0sZS55LXMpO29bMl09TWF0aC5tYXgob1syXSxlLngrcyk7b1szXT1NYXRoLm1heChvWzNdLGUueStzKX1yLlV0aWwuaW50ZXJzZWN0KHRoaXMucmVjdGFuZ2xlLG8pfHwodGhpcy5yZWN0YW5nbGU9byk7dGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6ZS54cmVmLGV4dHJhOmAke2l9IHdgLHN0cm9rZUNvbG9yOmEsc3Ryb2tlQWxwaGE6bixwb2ludHNDYWxsYmFjazooZSx0KT0+e2NvbnN0IGE9dGhpcy5kYXRhLnZlcnRpY2VzO2ZvcihsZXQgdD0wLHI9YS5sZW5ndGg7dDxyO3QrKyllLnB1c2goYCR7YVt0XS54fSAke2FbdF0ueX0gJHswPT09dD8ibSI6ImwifWApO2UucHVzaCgiUyIpO3JldHVyblt0WzBdLngsdFsxXS54LHRbM10ueSx0WzFdLnldfX0pfX19fWNsYXNzIFBvbHlnb25Bbm5vdGF0aW9uIGV4dGVuZHMgUG9seWxpbmVBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1yLkFubm90YXRpb25UeXBlLlBPTFlHT059fWNsYXNzIENhcmV0QW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPXIuQW5ub3RhdGlvblR5cGUuQ0FSRVR9fWNsYXNzIElua0Fubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1yLkFubm90YXRpb25UeXBlLklOSzt0aGlzLmRhdGEuaW5rTGlzdHM9W107Y29uc3QgdD1lLmRpY3QuZ2V0QXJyYXkoIklua0xpc3QiKTtpZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm47Y29uc3QgYT1lLnhyZWY7Zm9yKGxldCBlPTAscj10Lmxlbmd0aDtlPHI7KytlKXt0aGlzLmRhdGEuaW5rTGlzdHMucHVzaChbXSk7Zm9yKGxldCByPTAsbj10W2VdLmxlbmd0aDtyPG47cis9Mil0aGlzLmRhdGEuaW5rTGlzdHNbZV0ucHVzaCh7eDphLmZldGNoSWZSZWYodFtlXVtyXSkseTphLmZldGNoSWZSZWYodFtlXVtyKzFdKX0pfWlmKCF0aGlzLmFwcGVhcmFuY2Upe2NvbnN0IHQ9dGhpcy5jb2xvcj9BcnJheS5mcm9tKHRoaXMuY29sb3IsKGU9PmUvMjU1KSk6WzAsMCwwXSxhPWUuZGljdC5nZXQoIkNBIiksbj10aGlzLmJvcmRlclN0eWxlLndpZHRofHwxLGk9MipuLHM9WzEvMCwxLzAsLTEvMCwtMS8wXTtmb3IoY29uc3QgZSBvZiB0aGlzLmRhdGEuaW5rTGlzdHMpZm9yKGNvbnN0IHQgb2YgZSl7c1swXT1NYXRoLm1pbihzWzBdLHQueC1pKTtzWzFdPU1hdGgubWluKHNbMV0sdC55LWkpO3NbMl09TWF0aC5tYXgoc1syXSx0LngraSk7c1szXT1NYXRoLm1heChzWzNdLHQueStpKX1yLlV0aWwuaW50ZXJzZWN0KHRoaXMucmVjdGFuZ2xlLHMpfHwodGhpcy5yZWN0YW5nbGU9cyk7dGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6ZS54cmVmLGV4dHJhOmAke259IHdgLHN0cm9rZUNvbG9yOnQsc3Ryb2tlQWxwaGE6YSxwb2ludHNDYWxsYmFjazooZSx0KT0+e2Zvcihjb25zdCB0IG9mIHRoaXMuZGF0YS5pbmtMaXN0cyl7Zm9yKGxldCBhPTAscj10Lmxlbmd0aDthPHI7YSsrKWUucHVzaChgJHt0W2FdLnh9ICR7dFthXS55fSAkezA9PT1hPyJtIjoibCJ9YCk7ZS5wdXNoKCJTIil9cmV0dXJuW3RbMF0ueCx0WzFdLngsdFszXS55LHRbMV0ueV19fSl9fXN0YXRpYyBjcmVhdGVOZXdEaWN0KGUsdCx7YXBSZWY6YSxhcDpufSl7Y29uc3R7cGF0aHM6aSxyZWN0Om8scm90YXRpb246Y309ZSxsPW5ldyBzLkRpY3QodCk7bC5zZXQoIlR5cGUiLHMuTmFtZS5nZXQoIkFubm90IikpO2wuc2V0KCJTdWJ0eXBlIixzLk5hbWUuZ2V0KCJJbmsiKSk7bC5zZXQoIkNyZWF0aW9uRGF0ZSIsYEQ6JHsoMCxyLmdldE1vZGlmaWNhdGlvbkRhdGUpKCl9YCk7bC5zZXQoIlJlY3QiLG8pO2wuc2V0KCJJbmtMaXN0IixpLm1hcCgoZT0+ZS5wb2ludHMpKSk7bC5zZXQoIkYiLDQpO2wuc2V0KCJCb3JkZXIiLFswLDAsMF0pO2wuc2V0KCJSb3RhdGUiLGMpO2NvbnN0IGg9bmV3IHMuRGljdCh0KTtsLnNldCgiQVAiLGgpO2E/aC5zZXQoIk4iLGEpOmguc2V0KCJOIixuKTtyZXR1cm4gbH1zdGF0aWMgYXN5bmMgY3JlYXRlTmV3QXBwZWFyYW5jZVN0cmVhbShlLHQsYSl7Y29uc3R7Y29sb3I6cixyZWN0Om8scm90YXRpb246YyxwYXRoczpsLHRoaWNrbmVzczpoLG9wYWNpdHk6dX09ZSxbZCxmLGcsbV09bztsZXQgYj1nLWQseT1tLWY7YyUxODAhPTAmJihbYix5XT1beSxiXSk7Y29uc3Qgdz1bYCR7aH0gdyAxIEogMSBqYCxgJHsoMCxpLmdldFBkZkNvbG9yKShyLCExKX1gXTsxIT09dSYmdy5wdXNoKCIvUjAgZ3MiKTtjb25zdCBTPVtdO2Zvcihjb25zdHtiZXppZXI6ZX1vZiBsKXtTLmxlbmd0aD0wO1MucHVzaChgJHsoMCxuLm51bWJlclRvU3RyaW5nKShlWzBdKX0gJHsoMCxuLm51bWJlclRvU3RyaW5nKShlWzFdKX0gbWApO2ZvcihsZXQgdD0yLGE9ZS5sZW5ndGg7dDxhO3QrPTYpe2NvbnN0IGE9ZS5zbGljZSh0LHQrNikubWFwKG4ubnVtYmVyVG9TdHJpbmcpLmpvaW4oIiAiKTtTLnB1c2goYCR7YX0gY2ApfVMucHVzaCgiUyIpO3cucHVzaChTLmpvaW4oIlxuIikpfWNvbnN0IHg9dy5qb2luKCJcbiIpLGs9bmV3IHMuRGljdCh0KTtrLnNldCgiRm9ybVR5cGUiLDEpO2suc2V0KCJTdWJ0eXBlIixzLk5hbWUuZ2V0KCJGb3JtIikpO2suc2V0KCJUeXBlIixzLk5hbWUuZ2V0KCJYT2JqZWN0IikpO2suc2V0KCJCQm94IixbMCwwLGIseV0pO2suc2V0KCJMZW5ndGgiLHgubGVuZ3RoKTtpZihjKXtjb25zdCBlPVdpZGdldEFubm90YXRpb24uX2dldFJvdGF0aW9uTWF0cml4KGMsYix5KTtrLnNldCgiTWF0cml4IixlKX1pZigxIT09dSl7Y29uc3QgZT1uZXcgcy5EaWN0KHQpLGE9bmV3IHMuRGljdCh0KSxyPW5ldyBzLkRpY3QodCk7ci5zZXQoIkNBIix1KTtyLnNldCgiVHlwZSIscy5OYW1lLmdldCgiRXh0R1N0YXRlIikpO2Euc2V0KCJSMCIscik7ZS5zZXQoIkV4dEdTdGF0ZSIsYSk7ay5zZXQoIlJlc291cmNlcyIsZSl9Y29uc3QgQz1uZXcgcC5TdHJpbmdTdHJlYW0oeCk7Qy5kaWN0PWs7cmV0dXJuIEN9fWNsYXNzIEhpZ2hsaWdodEFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1yLkFubm90YXRpb25UeXBlLkhJR0hMSUdIVDtpZih0aGlzLmRhdGEucXVhZFBvaW50cz1nZXRRdWFkUG9pbnRzKGUuZGljdCxudWxsKSl7Y29uc3QgdD10aGlzLmFwcGVhcmFuY2UmJnRoaXMuYXBwZWFyYW5jZS5kaWN0LmdldCgiUmVzb3VyY2VzIik7aWYoIXRoaXMuYXBwZWFyYW5jZXx8IXR8fCF0LmhhcygiRXh0R1N0YXRlIikpe3RoaXMuYXBwZWFyYW5jZSYmKDAsci53YXJuKSgiSGlnaGxpZ2h0QW5ub3RhdGlvbiAtIGlnbm9yaW5nIGJ1aWx0LWluIGFwcGVhcmFuY2Ugc3RyZWFtLiIpO2NvbnN0IHQ9dGhpcy5jb2xvcj9BcnJheS5mcm9tKHRoaXMuY29sb3IsKGU9PmUvMjU1KSk6WzEsMSwwXSxhPWUuZGljdC5nZXQoIkNBIik7dGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6ZS54cmVmLGZpbGxDb2xvcjp0LGJsZW5kTW9kZToiTXVsdGlwbHkiLGZpbGxBbHBoYTphLHBvaW50c0NhbGxiYWNrOihlLHQpPT57ZS5wdXNoKGAke3RbMF0ueH0gJHt0WzBdLnl9IG1gLGAke3RbMV0ueH0gJHt0WzFdLnl9IGxgLGAke3RbM10ueH0gJHt0WzNdLnl9IGxgLGAke3RbMl0ueH0gJHt0WzJdLnl9IGxgLCJmIik7cmV0dXJuW3RbMF0ueCx0WzFdLngsdFszXS55LHRbMV0ueV19fSl9fWVsc2UgdGhpcy5kYXRhLmhhc1BvcHVwPSExfX1jbGFzcyBVbmRlcmxpbmVBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9ci5Bbm5vdGF0aW9uVHlwZS5VTkRFUkxJTkU7aWYodGhpcy5kYXRhLnF1YWRQb2ludHM9Z2V0UXVhZFBvaW50cyhlLmRpY3QsbnVsbCkpe2lmKCF0aGlzLmFwcGVhcmFuY2Upe2NvbnN0IHQ9dGhpcy5jb2xvcj9BcnJheS5mcm9tKHRoaXMuY29sb3IsKGU9PmUvMjU1KSk6WzAsMCwwXSxhPWUuZGljdC5nZXQoIkNBIik7dGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6ZS54cmVmLGV4dHJhOiJbXSAwIGQgMSB3IixzdHJva2VDb2xvcjp0LHN0cm9rZUFscGhhOmEscG9pbnRzQ2FsbGJhY2s6KGUsdCk9PntlLnB1c2goYCR7dFsyXS54fSAke3RbMl0ueX0gbWAsYCR7dFszXS54fSAke3RbM10ueX0gbGAsIlMiKTtyZXR1cm5bdFswXS54LHRbMV0ueCx0WzNdLnksdFsxXS55XX19KX19ZWxzZSB0aGlzLmRhdGEuaGFzUG9wdXA9ITF9fWNsYXNzIFNxdWlnZ2x5QW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPXIuQW5ub3RhdGlvblR5cGUuU1FVSUdHTFk7aWYodGhpcy5kYXRhLnF1YWRQb2ludHM9Z2V0UXVhZFBvaW50cyhlLmRpY3QsbnVsbCkpe2lmKCF0aGlzLmFwcGVhcmFuY2Upe2NvbnN0IHQ9dGhpcy5jb2xvcj9BcnJheS5mcm9tKHRoaXMuY29sb3IsKGU9PmUvMjU1KSk6WzAsMCwwXSxhPWUuZGljdC5nZXQoIkNBIik7dGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6ZS54cmVmLGV4dHJhOiJbXSAwIGQgMSB3IixzdHJva2VDb2xvcjp0LHN0cm9rZUFscGhhOmEscG9pbnRzQ2FsbGJhY2s6KGUsdCk9Pntjb25zdCBhPSh0WzBdLnktdFsyXS55KS82O2xldCByPWEsbj10WzJdLng7Y29uc3QgaT10WzJdLnkscz10WzNdLng7ZS5wdXNoKGAke259ICR7aStyfSBtYCk7ZG97bis9MjtyPTA9PT1yP2E6MDtlLnB1c2goYCR7bn0gJHtpK3J9IGxgKX13aGlsZShuPHMpO2UucHVzaCgiUyIpO3JldHVyblt0WzJdLngscyxpLTIqYSxpKzIqYV19fSl9fWVsc2UgdGhpcy5kYXRhLmhhc1BvcHVwPSExfX1jbGFzcyBTdHJpa2VPdXRBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9ci5Bbm5vdGF0aW9uVHlwZS5TVFJJS0VPVVQ7aWYodGhpcy5kYXRhLnF1YWRQb2ludHM9Z2V0UXVhZFBvaW50cyhlLmRpY3QsbnVsbCkpe2lmKCF0aGlzLmFwcGVhcmFuY2Upe2NvbnN0IHQ9dGhpcy5jb2xvcj9BcnJheS5mcm9tKHRoaXMuY29sb3IsKGU9PmUvMjU1KSk6WzAsMCwwXSxhPWUuZGljdC5nZXQoIkNBIik7dGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6ZS54cmVmLGV4dHJhOiJbXSAwIGQgMSB3IixzdHJva2VDb2xvcjp0LHN0cm9rZUFscGhhOmEscG9pbnRzQ2FsbGJhY2s6KGUsdCk9PntlLnB1c2goKHRbMF0ueCt0WzJdLngpLzIrIiAiKyh0WzBdLnkrdFsyXS55KS8yKyIgbSIsKHRbMV0ueCt0WzNdLngpLzIrIiAiKyh0WzFdLnkrdFszXS55KS8yKyIgbCIsIlMiKTtyZXR1cm5bdFswXS54LHRbMV0ueCx0WzNdLnksdFsxXS55XX19KX19ZWxzZSB0aGlzLmRhdGEuaGFzUG9wdXA9ITF9fWNsYXNzIFN0YW1wQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPXIuQW5ub3RhdGlvblR5cGUuU1RBTVB9fWNsYXNzIEZpbGVBdHRhY2htZW50QW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3QgdD1uZXcgZC5GaWxlU3BlYyhlLmRpY3QuZ2V0KCJGUyIpLGUueHJlZik7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPXIuQW5ub3RhdGlvblR5cGUuRklMRUFUVEFDSE1FTlQ7dGhpcy5kYXRhLmZpbGU9dC5zZXJpYWxpemFibGV9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LmNyZWF0ZURlZmF1bHRBcHBlYXJhbmNlPWZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRBcHBlYXJhbmNlKHtmb250U2l6ZTplLGZvbnROYW1lOnQsZm9udENvbG9yOmF9KXtyZXR1cm5gLyR7KDAsci5lc2NhcGVQREZOYW1lKSh0KX0gJHtlfSBUZiAke2dldFBkZkNvbG9yKGEsITApfWB9O3QuZ2V0UGRmQ29sb3I9Z2V0UGRmQ29sb3I7dC5wYXJzZURlZmF1bHRBcHBlYXJhbmNlPWZ1bmN0aW9uIHBhcnNlRGVmYXVsdEFwcGVhcmFuY2UoZSl7cmV0dXJuIG5ldyBEZWZhdWx0QXBwZWFyYW5jZUV2YWx1YXRvcihlKS5wYXJzZSgpfTt2YXIgcj1hKDQpLG49YSgyKSxpPWEoMTIpLHM9YSgxMyksbz1hKDMpLGM9YSg4KTtjbGFzcyBEZWZhdWx0QXBwZWFyYW5jZUV2YWx1YXRvciBleHRlbmRzIHMuRXZhbHVhdG9yUHJlcHJvY2Vzc29ye2NvbnN0cnVjdG9yKGUpe3N1cGVyKG5ldyBjLlN0cmluZ1N0cmVhbShlKSl9cGFyc2UoKXtjb25zdCBlPXtmbjowLGFyZ3M6W119LHQ9e2ZvbnRTaXplOjAsZm9udE5hbWU6IiIsZm9udENvbG9yOm5ldyBVaW50OENsYW1wZWRBcnJheSgzKX07dHJ5e2Zvcig7Oyl7ZS5hcmdzLmxlbmd0aD0wO2lmKCF0aGlzLnJlYWQoZSkpYnJlYWs7aWYoMCE9PXRoaXMuc2F2ZWRTdGF0ZXNEZXB0aCljb250aW51ZTtjb25zdHtmbjphLGFyZ3M6cn09ZTtzd2l0Y2goMHxhKXtjYXNlIG4uT1BTLnNldEZvbnQ6Y29uc3RbZSxhXT1yO2UgaW5zdGFuY2VvZiBvLk5hbWUmJih0LmZvbnROYW1lPWUubmFtZSk7Im51bWJlciI9PXR5cGVvZiBhJiZhPjAmJih0LmZvbnRTaXplPWEpO2JyZWFrO2Nhc2Ugbi5PUFMuc2V0RmlsbFJHQkNvbG9yOmkuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYi5nZXRSZ2JJdGVtKHIsMCx0LmZvbnRDb2xvciwwKTticmVhaztjYXNlIG4uT1BTLnNldEZpbGxHcmF5OmkuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiSXRlbShyLDAsdC5mb250Q29sb3IsMCk7YnJlYWs7Y2FzZSBuLk9QUy5zZXRGaWxsQ29sb3JTcGFjZTppLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrLmdldFJnYkl0ZW0ociwwLHQuZm9udENvbG9yLDApfX19Y2F0Y2goZSl7KDAsbi53YXJuKShgcGFyc2VEZWZhdWx0QXBwZWFyYW5jZSAtIGlnbm9yaW5nIGVycm9yczogIiR7ZX0iLmApfXJldHVybiB0fX1mdW5jdGlvbiBnZXRQZGZDb2xvcihlLHQpe2lmKGVbMF09PT1lWzFdJiZlWzFdPT09ZVsyXSl7Y29uc3QgYT1lWzBdLzI1NTtyZXR1cm5gJHsoMCxyLm51bWJlclRvU3RyaW5nKShhKX0gJHt0PyJnIjoiRyJ9YH1yZXR1cm4gQXJyYXkuZnJvbShlLChlPT4oMCxyLm51bWJlclRvU3RyaW5nKShlLzI1NSkpKS5qb2luKCIgIikrIiAiKyh0PyJyZyI6IlJHIil9fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuQ29sb3JTcGFjZT12b2lkIDA7dmFyIHI9YSgyKSxuPWEoMyksaT1hKDUpLHM9YSg0KTtjbGFzcyBDb2xvclNwYWNle2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5jb25zdHJ1Y3Rvcj09PUNvbG9yU3BhY2UmJigwLHIudW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBDb2xvclNwYWNlLiIpO3RoaXMubmFtZT1lO3RoaXMubnVtQ29tcHM9dH1nZXRSZ2IoZSx0KXtjb25zdCBhPW5ldyBVaW50OENsYW1wZWRBcnJheSgzKTt0aGlzLmdldFJnYkl0ZW0oZSx0LGEsMCk7cmV0dXJuIGF9Z2V0UmdiSXRlbShlLHQsYSxuKXsoMCxyLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIENvbG9yU3BhY2UuZ2V0UmdiSXRlbSIpfWdldFJnYkJ1ZmZlcihlLHQsYSxuLGkscyxvKXsoMCxyLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIENvbG9yU3BhY2UuZ2V0UmdiQnVmZmVyIil9Z2V0T3V0cHV0TGVuZ3RoKGUsdCl7KDAsci51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBDb2xvclNwYWNlLmdldE91dHB1dExlbmd0aCIpfWlzUGFzc3Rocm91Z2goZSl7cmV0dXJuITF9aXNEZWZhdWx0RGVjb2RlKGUsdCl7cmV0dXJuIENvbG9yU3BhY2UuaXNEZWZhdWx0RGVjb2RlKGUsdGhpcy5udW1Db21wcyl9ZmlsbFJnYihlLHQsYSxyLG4saSxzLG8sYyl7Y29uc3QgbD10KmE7bGV0IGg9bnVsbDtjb25zdCB1PTE8PHMsZD1hIT09bnx8dCE9PXI7aWYodGhpcy5pc1Bhc3N0aHJvdWdoKHMpKWg9bztlbHNlIGlmKDE9PT10aGlzLm51bUNvbXBzJiZsPnUmJiJEZXZpY2VHcmF5IiE9PXRoaXMubmFtZSYmIkRldmljZVJHQiIhPT10aGlzLm5hbWUpe2NvbnN0IHQ9czw9OD9uZXcgVWludDhBcnJheSh1KTpuZXcgVWludDE2QXJyYXkodSk7Zm9yKGxldCBlPTA7ZTx1O2UrKyl0W2VdPWU7Y29uc3QgYT1uZXcgVWludDhDbGFtcGVkQXJyYXkoMyp1KTt0aGlzLmdldFJnYkJ1ZmZlcih0LDAsdSxhLDAscywwKTtpZihkKXtoPW5ldyBVaW50OEFycmF5KDMqbCk7bGV0IGU9MDtmb3IobGV0IHQ9MDt0PGw7Kyt0KXtjb25zdCByPTMqb1t0XTtoW2UrK109YVtyXTtoW2UrK109YVtyKzFdO2hbZSsrXT1hW3IrMl19fWVsc2V7bGV0IHQ9MDtmb3IobGV0IHI9MDtyPGw7KytyKXtjb25zdCBuPTMqb1tyXTtlW3QrK109YVtuXTtlW3QrK109YVtuKzFdO2VbdCsrXT1hW24rMl07dCs9Y319fWVsc2UgaWYoZCl7aD1uZXcgVWludDhDbGFtcGVkQXJyYXkoMypsKTt0aGlzLmdldFJnYkJ1ZmZlcihvLDAsbCxoLDAscywwKX1lbHNlIHRoaXMuZ2V0UmdiQnVmZmVyKG8sMCxyKmksZSwwLHMsYyk7aWYoaClpZihkKSFmdW5jdGlvbiByZXNpemVSZ2JJbWFnZShlLHQsYSxyLG4saSxzKXtzPTEhPT1zPzA6cztjb25zdCBvPWEvbixjPXIvaTtsZXQgbCxoPTA7Y29uc3QgdT1uZXcgVWludDE2QXJyYXkobiksZD0zKmE7Zm9yKGxldCBlPTA7ZTxuO2UrKyl1W2VdPTMqTWF0aC5mbG9vcihlKm8pO2ZvcihsZXQgYT0wO2E8aTthKyspe2NvbnN0IHI9TWF0aC5mbG9vcihhKmMpKmQ7Zm9yKGxldCBhPTA7YTxuO2ErKyl7bD1yK3VbYV07dFtoKytdPWVbbCsrXTt0W2grK109ZVtsKytdO3RbaCsrXT1lW2wrK107aCs9c319fShoLGUsdCxhLHIsbixjKTtlbHNle2xldCB0PTAsYT0wO2ZvcihsZXQgbj0wLHM9cippO248cztuKyspe2VbdCsrXT1oW2ErK107ZVt0KytdPWhbYSsrXTtlW3QrK109aFthKytdO3QrPWN9fX1nZXQgdXNlc1plcm9Ub09uZVJhbmdlKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsInVzZXNaZXJvVG9PbmVSYW5nZSIsITApfXN0YXRpYyBfY2FjaGUoZSx0LGEscil7aWYoIWEpdGhyb3cgbmV3IEVycm9yKCdDb2xvclNwYWNlLl9jYWNoZSAtIGV4cGVjdGVkICJsb2NhbENvbG9yU3BhY2VDYWNoZSIgYXJndW1lbnQuJyk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCdDb2xvclNwYWNlLl9jYWNoZSAtIGV4cGVjdGVkICJwYXJzZWRDb2xvclNwYWNlIiBhcmd1bWVudC4nKTtsZXQgaSxzO2lmKGUgaW5zdGFuY2VvZiBuLlJlZil7cz1lO2U9dC5mZXRjaChlKX1lIGluc3RhbmNlb2Ygbi5OYW1lJiYoaT1lLm5hbWUpOyhpfHxzKSYmYS5zZXQoaSxzLHIpfXN0YXRpYyBnZXRDYWNoZWQoZSx0LGEpe2lmKCFhKXRocm93IG5ldyBFcnJvcignQ29sb3JTcGFjZS5nZXRDYWNoZWQgLSBleHBlY3RlZCAibG9jYWxDb2xvclNwYWNlQ2FjaGUiIGFyZ3VtZW50LicpO2lmKGUgaW5zdGFuY2VvZiBuLlJlZil7Y29uc3Qgcj1hLmdldEJ5UmVmKGUpO2lmKHIpcmV0dXJuIHI7dHJ5e2U9dC5mZXRjaChlKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygcy5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlfX1pZihlIGluc3RhbmNlb2Ygbi5OYW1lKXtjb25zdCB0PWEuZ2V0QnlOYW1lKGUubmFtZSk7aWYodClyZXR1cm4gdH1yZXR1cm4gbnVsbH1zdGF0aWMgYXN5bmMgcGFyc2VBc3luYyh7Y3M6ZSx4cmVmOnQscmVzb3VyY2VzOmE9bnVsbCxwZGZGdW5jdGlvbkZhY3Rvcnk6cixsb2NhbENvbG9yU3BhY2VDYWNoZTpufSl7Y29uc3QgaT10aGlzLl9wYXJzZShlLHQsYSxyKTt0aGlzLl9jYWNoZShlLHQsbixpKTtyZXR1cm4gaX1zdGF0aWMgcGFyc2Uoe2NzOmUseHJlZjp0LHJlc291cmNlczphPW51bGwscGRmRnVuY3Rpb25GYWN0b3J5OnIsbG9jYWxDb2xvclNwYWNlQ2FjaGU6bn0pe2NvbnN0IGk9dGhpcy5nZXRDYWNoZWQoZSx0LG4pO2lmKGkpcmV0dXJuIGk7Y29uc3Qgcz10aGlzLl9wYXJzZShlLHQsYSxyKTt0aGlzLl9jYWNoZShlLHQsbixzKTtyZXR1cm4gc31zdGF0aWMgX3BhcnNlKGUsdCxhPW51bGwsaSl7aWYoKGU9dC5mZXRjaElmUmVmKGUpKWluc3RhbmNlb2Ygbi5OYW1lKXN3aXRjaChlLm5hbWUpe2Nhc2UiRyI6Y2FzZSJEZXZpY2VHcmF5IjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmdyYXk7Y2FzZSJSR0IiOmNhc2UiRGV2aWNlUkdCIjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLnJnYjtjYXNlIkNNWUsiOmNhc2UiRGV2aWNlQ01ZSyI6cmV0dXJuIHRoaXMuc2luZ2xldG9ucy5jbXlrO2Nhc2UiUGF0dGVybiI6cmV0dXJuIG5ldyBQYXR0ZXJuQ1MobnVsbCk7ZGVmYXVsdDppZihhIGluc3RhbmNlb2Ygbi5EaWN0KXtjb25zdCByPWEuZ2V0KCJDb2xvclNwYWNlIik7aWYociBpbnN0YW5jZW9mIG4uRGljdCl7Y29uc3Qgcz1yLmdldChlLm5hbWUpO2lmKHMpe2lmKHMgaW5zdGFuY2VvZiBuLk5hbWUpcmV0dXJuIHRoaXMuX3BhcnNlKHMsdCxhLGkpO2U9czticmVha319fXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBVbnJlY29nbml6ZWQgQ29sb3JTcGFjZTogJHtlLm5hbWV9YCl9aWYoQXJyYXkuaXNBcnJheShlKSl7Y29uc3Qgbj10LmZldGNoSWZSZWYoZVswXSkubmFtZTtsZXQgcyxvLHUsZCxmLGc7c3dpdGNoKG4pe2Nhc2UiRyI6Y2FzZSJEZXZpY2VHcmF5IjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmdyYXk7Y2FzZSJSR0IiOmNhc2UiRGV2aWNlUkdCIjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLnJnYjtjYXNlIkNNWUsiOmNhc2UiRGV2aWNlQ01ZSyI6cmV0dXJuIHRoaXMuc2luZ2xldG9ucy5jbXlrO2Nhc2UiQ2FsR3JheSI6cz10LmZldGNoSWZSZWYoZVsxXSk7ZD1zLmdldEFycmF5KCJXaGl0ZVBvaW50Iik7Zj1zLmdldEFycmF5KCJCbGFja1BvaW50Iik7Zz1zLmdldCgiR2FtbWEiKTtyZXR1cm4gbmV3IGMoZCxmLGcpO2Nhc2UiQ2FsUkdCIjpzPXQuZmV0Y2hJZlJlZihlWzFdKTtkPXMuZ2V0QXJyYXkoIldoaXRlUG9pbnQiKTtmPXMuZ2V0QXJyYXkoIkJsYWNrUG9pbnQiKTtnPXMuZ2V0QXJyYXkoIkdhbW1hIik7Y29uc3QgcD1zLmdldEFycmF5KCJNYXRyaXgiKTtyZXR1cm4gbmV3IGwoZCxmLGcscCk7Y2FzZSJJQ0NCYXNlZCI6Y29uc3QgbT10LmZldGNoSWZSZWYoZVsxXSkuZGljdDtvPW0uZ2V0KCJOIik7Y29uc3QgYj1tLmdldCgiQWx0ZXJuYXRlIik7aWYoYil7Y29uc3QgZT10aGlzLl9wYXJzZShiLHQsYSxpKTtpZihlLm51bUNvbXBzPT09bylyZXR1cm4gZTsoMCxyLndhcm4pKCJJQ0NCYXNlZCBjb2xvciBzcGFjZTogSWdub3JpbmcgaW5jb3JyZWN0IC9BbHRlcm5hdGUgZW50cnkuIil9aWYoMT09PW8pcmV0dXJuIHRoaXMuc2luZ2xldG9ucy5ncmF5O2lmKDM9PT1vKXJldHVybiB0aGlzLnNpbmdsZXRvbnMucmdiO2lmKDQ9PT1vKXJldHVybiB0aGlzLnNpbmdsZXRvbnMuY215azticmVhaztjYXNlIlBhdHRlcm4iOnU9ZVsxXXx8bnVsbDt1JiYodT10aGlzLl9wYXJzZSh1LHQsYSxpKSk7cmV0dXJuIG5ldyBQYXR0ZXJuQ1ModSk7Y2FzZSJJIjpjYXNlIkluZGV4ZWQiOnU9dGhpcy5fcGFyc2UoZVsxXSx0LGEsaSk7Y29uc3QgeT10LmZldGNoSWZSZWYoZVsyXSkrMSx3PXQuZmV0Y2hJZlJlZihlWzNdKTtyZXR1cm4gbmV3IEluZGV4ZWRDUyh1LHksdyk7Y2FzZSJTZXBhcmF0aW9uIjpjYXNlIkRldmljZU4iOmNvbnN0IFM9dC5mZXRjaElmUmVmKGVbMV0pO289QXJyYXkuaXNBcnJheShTKT9TLmxlbmd0aDoxO3U9dGhpcy5fcGFyc2UoZVsyXSx0LGEsaSk7Y29uc3QgeD1pLmNyZWF0ZShlWzNdKTtyZXR1cm4gbmV3IEFsdGVybmF0ZUNTKG8sdSx4KTtjYXNlIkxhYiI6cz10LmZldGNoSWZSZWYoZVsxXSk7ZD1zLmdldEFycmF5KCJXaGl0ZVBvaW50Iik7Zj1zLmdldEFycmF5KCJCbGFja1BvaW50Iik7Y29uc3Qgaz1zLmdldEFycmF5KCJSYW5nZSIpO3JldHVybiBuZXcgaChkLGYsayk7ZGVmYXVsdDp0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgVW5pbXBsZW1lbnRlZCBDb2xvclNwYWNlIG9iamVjdDogJHtufWApfX10aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgVW5yZWNvZ25pemVkIENvbG9yU3BhY2Ugb2JqZWN0OiAke2V9YCl9c3RhdGljIGlzRGVmYXVsdERlY29kZShlLHQpe2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiEwO2lmKDIqdCE9PWUubGVuZ3RoKXsoMCxyLndhcm4pKCJUaGUgZGVjb2RlIG1hcCBpcyBub3QgdGhlIGNvcnJlY3QgbGVuZ3RoIik7cmV0dXJuITB9Zm9yKGxldCB0PTAsYT1lLmxlbmd0aDt0PGE7dCs9MilpZigwIT09ZVt0XXx8MSE9PWVbdCsxXSlyZXR1cm4hMTtyZXR1cm4hMH1zdGF0aWMgZ2V0IHNpbmdsZXRvbnMoKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywic2luZ2xldG9ucyIse2dldCBncmF5KCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsImdyYXkiLG5ldyBEZXZpY2VHcmF5Q1MpfSxnZXQgcmdiKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsInJnYiIsbmV3IERldmljZVJnYkNTKX0sZ2V0IGNteWsoKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiY215ayIsbmV3IG8pfX0pfX10LkNvbG9yU3BhY2U9Q29sb3JTcGFjZTtjbGFzcyBBbHRlcm5hdGVDUyBleHRlbmRzIENvbG9yU3BhY2V7Y29uc3RydWN0b3IoZSx0LGEpe3N1cGVyKCJBbHRlcm5hdGUiLGUpO3RoaXMuYmFzZT10O3RoaXMudGludEZuPWE7dGhpcy50bXBCdWY9bmV3IEZsb2F0MzJBcnJheSh0Lm51bUNvbXBzKX1nZXRSZ2JJdGVtKGUsdCxhLHIpe2NvbnN0IG49dGhpcy50bXBCdWY7dGhpcy50aW50Rm4oZSx0LG4sMCk7dGhpcy5iYXNlLmdldFJnYkl0ZW0obiwwLGEscil9Z2V0UmdiQnVmZmVyKGUsdCxhLHIsbixpLHMpe2NvbnN0IG89dGhpcy50aW50Rm4sYz10aGlzLmJhc2UsbD0xLygoMTw8aSktMSksaD1jLm51bUNvbXBzLHU9Yy51c2VzWmVyb1RvT25lUmFuZ2UsZD0oYy5pc1Bhc3N0aHJvdWdoKDgpfHwhdSkmJjA9PT1zO2xldCBmPWQ/bjowO2NvbnN0IGc9ZD9yOm5ldyBVaW50OENsYW1wZWRBcnJheShoKmEpLHA9dGhpcy5udW1Db21wcyxtPW5ldyBGbG9hdDMyQXJyYXkocCksYj1uZXcgRmxvYXQzMkFycmF5KGgpO2xldCB5LHc7Zm9yKHk9MDt5PGE7eSsrKXtmb3Iodz0wO3c8cDt3KyspbVt3XT1lW3QrK10qbDtvKG0sMCxiLDApO2lmKHUpZm9yKHc9MDt3PGg7dysrKWdbZisrXT0yNTUqYlt3XTtlbHNle2MuZ2V0UmdiSXRlbShiLDAsZyxmKTtmKz1ofX1kfHxjLmdldFJnYkJ1ZmZlcihnLDAsYSxyLG4sOCxzKX1nZXRPdXRwdXRMZW5ndGgoZSx0KXtyZXR1cm4gdGhpcy5iYXNlLmdldE91dHB1dExlbmd0aChlKnRoaXMuYmFzZS5udW1Db21wcy90aGlzLm51bUNvbXBzLHQpfX1jbGFzcyBQYXR0ZXJuQ1MgZXh0ZW5kcyBDb2xvclNwYWNle2NvbnN0cnVjdG9yKGUpe3N1cGVyKCJQYXR0ZXJuIixudWxsKTt0aGlzLmJhc2U9ZX1pc0RlZmF1bHREZWNvZGUoZSx0KXsoMCxyLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIFBhdHRlcm5DUy5pc0RlZmF1bHREZWNvZGUiKX19Y2xhc3MgSW5kZXhlZENTIGV4dGVuZHMgQ29sb3JTcGFjZXtjb25zdHJ1Y3RvcihlLHQsYSl7c3VwZXIoIkluZGV4ZWQiLDEpO3RoaXMuYmFzZT1lO3RoaXMuaGlnaFZhbD10O2NvbnN0IG49ZS5udW1Db21wcyp0O3RoaXMubG9va3VwPW5ldyBVaW50OEFycmF5KG4pO2lmKGEgaW5zdGFuY2VvZiBpLkJhc2VTdHJlYW0pe2NvbnN0IGU9YS5nZXRCeXRlcyhuKTt0aGlzLmxvb2t1cC5zZXQoZSl9ZWxzZXtpZigic3RyaW5nIiE9dHlwZW9mIGEpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYEluZGV4ZWRDUyAtIHVucmVjb2duaXplZCBsb29rdXAgdGFibGU6ICR7YX1gKTtmb3IobGV0IGU9MDtlPG47KytlKXRoaXMubG9va3VwW2VdPTI1NSZhLmNoYXJDb2RlQXQoZSl9fWdldFJnYkl0ZW0oZSx0LGEscil7Y29uc3Qgbj10aGlzLmJhc2UubnVtQ29tcHMsaT1lW3RdKm47dGhpcy5iYXNlLmdldFJnYkJ1ZmZlcih0aGlzLmxvb2t1cCxpLDEsYSxyLDgsMCl9Z2V0UmdiQnVmZmVyKGUsdCxhLHIsbixpLHMpe2NvbnN0IG89dGhpcy5iYXNlLGM9by5udW1Db21wcyxsPW8uZ2V0T3V0cHV0TGVuZ3RoKGMscyksaD10aGlzLmxvb2t1cDtmb3IobGV0IGk9MDtpPGE7KytpKXtjb25zdCBhPWVbdCsrXSpjO28uZ2V0UmdiQnVmZmVyKGgsYSwxLHIsbiw4LHMpO24rPWx9fWdldE91dHB1dExlbmd0aChlLHQpe3JldHVybiB0aGlzLmJhc2UuZ2V0T3V0cHV0TGVuZ3RoKGUqdGhpcy5iYXNlLm51bUNvbXBzLHQpfWlzRGVmYXVsdERlY29kZShlLHQpe2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiEwO2lmKDIhPT1lLmxlbmd0aCl7KDAsci53YXJuKSgiRGVjb2RlIG1hcCBsZW5ndGggaXMgbm90IGNvcnJlY3QiKTtyZXR1cm4hMH1pZighTnVtYmVyLmlzSW50ZWdlcih0KXx8dDwxKXsoMCxyLndhcm4pKCJCaXRzIHBlciBjb21wb25lbnQgaXMgbm90IGNvcnJlY3QiKTtyZXR1cm4hMH1yZXR1cm4gMD09PWVbMF0mJmVbMV09PT0oMTw8dCktMX19Y2xhc3MgRGV2aWNlR3JheUNTIGV4dGVuZHMgQ29sb3JTcGFjZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCJEZXZpY2VHcmF5IiwxKX1nZXRSZ2JJdGVtKGUsdCxhLHIpe2NvbnN0IG49MjU1KmVbdF07YVtyXT1hW3IrMV09YVtyKzJdPW59Z2V0UmdiQnVmZmVyKGUsdCxhLHIsbixpLHMpe2NvbnN0IG89MjU1LygoMTw8aSktMSk7bGV0IGM9dCxsPW47Zm9yKGxldCB0PTA7dDxhOysrdCl7Y29uc3QgdD1vKmVbYysrXTtyW2wrK109dDtyW2wrK109dDtyW2wrK109dDtsKz1zfX1nZXRPdXRwdXRMZW5ndGgoZSx0KXtyZXR1cm4gZSooMyt0KX19Y2xhc3MgRGV2aWNlUmdiQ1MgZXh0ZW5kcyBDb2xvclNwYWNle2NvbnN0cnVjdG9yKCl7c3VwZXIoIkRldmljZVJHQiIsMyl9Z2V0UmdiSXRlbShlLHQsYSxyKXthW3JdPTI1NSplW3RdO2FbcisxXT0yNTUqZVt0KzFdO2FbcisyXT0yNTUqZVt0KzJdfWdldFJnYkJ1ZmZlcihlLHQsYSxyLG4saSxzKXtpZig4PT09aSYmMD09PXMpe3Iuc2V0KGUuc3ViYXJyYXkodCx0KzMqYSksbik7cmV0dXJufWNvbnN0IG89MjU1LygoMTw8aSktMSk7bGV0IGM9dCxsPW47Zm9yKGxldCB0PTA7dDxhOysrdCl7cltsKytdPW8qZVtjKytdO3JbbCsrXT1vKmVbYysrXTtyW2wrK109byplW2MrK107bCs9c319Z2V0T3V0cHV0TGVuZ3RoKGUsdCl7cmV0dXJuIGUqKDMrdCkvM3wwfWlzUGFzc3Rocm91Z2goZSl7cmV0dXJuIDg9PT1lfX1jb25zdCBvPWZ1bmN0aW9uIERldmljZUNteWtDU0Nsb3N1cmUoKXtmdW5jdGlvbiBjb252ZXJ0VG9SZ2IoZSx0LGEscixuKXtjb25zdCBpPWVbdF0qYSxzPWVbdCsxXSphLG89ZVt0KzJdKmEsYz1lW3QrM10qYTtyW25dPTI1NStpKigtNC4zODczMzIzODQ2MDk5ODgqaSs1NC40ODYxNTE5NDE4OTE3NipzKzE4LjgyMjkwNTAyMTY1MzAyKm8rMjEyLjI1NjYyNDUxNjM5NTg1KmMtMjg1LjIzMzEwMjYxMzcwMDQpK3MqKDEuNzE0OTc2MzQ3NzM2MjEzNCpzLTUuNjA5NjczNjkwNDA0NzMxNSpvKy0xNy44NzM4NzA4NjE0MTU0NDQqYy01LjQ5NzAwNjQyNzE5NjM2NikrbyooLTIuNTIxNzM0MDEzMTY4MzAzMypvLTIxLjI0ODkyMzMzNzM1MzA3MypjKzE3LjUxMTkyNzA4NDE4MTMpK2MqKC0yMS44NjEyMjE0NzQ2MzYwNSpjLTE4OS40ODE4MDgzNTkyMjc0Nyk7cltuKzFdPTI1NStpKig4Ljg0MTA0MTQyMjAzNjE0OSppKzYwLjExODAyNzA0NTU5NzM2NipzKzYuODcxNDI1NTkyMDQ5MDA3Km8rMzEuMTU5MTAwMTMwMDU1OTIyKmMtNzkuMjk3MDg0NDgxNjU0OCkrcyooLTE1LjMxMDM2MTMwNjk2NzgxNypzKzE3LjU3NTI1MTI2MTEwOTQ4MipvKzEzMS4zNTI1MDkxMjQ5Mzk3NipjLTE5MC45NDUzMzAyNTg4OTUxKStvKig0LjQ0NDMzOTEwMjg1MjczOSpvKzkuODYzMjg2MTQ5MzQwNSpjLTI0Ljg2NzQxNTgyNTU1ODc4KStjKigtMjAuNzM3MzI1NDcxMTgxMDM0KmMtMTg3LjgwNDUzNzA5NzE5NTc4KTtyW24rMl09MjU1K2kqKC44ODQyNTIyNDMwMDAzMjk2KmkrOC4wNzg2Nzc1MDMxMTI5MjgqcyszMC44OTk3ODMwOTcwMzcyOSpvLS4yMzg4MzIzODY4OTE3ODkzNCpjLTE0LjE4MzU3Njc5OTY3MzI4NikrcyooMTAuNDk1OTMyNzM0MzIwNzIqcys2My4wMjM3ODQ5NDc1NDA1MipvKzUwLjYwNjk1NzY1NjM2MDczNCpjLTExMi4yMzg4NDI1MzcxOTI0OCkrbyooLjAzMjk2MDQxMTE0ODczMjE3Km8rMTE1LjYwMzg0NDQ5NjQ2NjQxKmMtMTkzLjU4MjA5MzU2ODYxNTA1KStjKigtMjIuMzM4MTY4MDczMDk4ODYqYy0xODAuMTI2MTM5NzQ3MDgzNjcpfXJldHVybiBjbGFzcyBEZXZpY2VDbXlrQ1MgZXh0ZW5kcyBDb2xvclNwYWNle2NvbnN0cnVjdG9yKCl7c3VwZXIoIkRldmljZUNNWUsiLDQpfWdldFJnYkl0ZW0oZSx0LGEscil7Y29udmVydFRvUmdiKGUsdCwxLGEscil9Z2V0UmdiQnVmZmVyKGUsdCxhLHIsbixpLHMpe2NvbnN0IG89MS8oKDE8PGkpLTEpO2ZvcihsZXQgaT0wO2k8YTtpKyspe2NvbnZlcnRUb1JnYihlLHQsbyxyLG4pO3QrPTQ7bis9MytzfX1nZXRPdXRwdXRMZW5ndGgoZSx0KXtyZXR1cm4gZS80KigzK3QpfDB9fX0oKSxjPWZ1bmN0aW9uIENhbEdyYXlDU0Nsb3N1cmUoKXtmdW5jdGlvbiBjb252ZXJ0VG9SZ2IoZSx0LGEscixuLGkpe2NvbnN0IHM9KHRbYV0qaSkqKmUuRyxvPWUuWVcqcyxjPU1hdGgubWF4KDI5NS44Km8qKi4zMzMzMzMzMzMzMzMzMzMzLTQwLjgsMCk7cltuXT1jO3JbbisxXT1jO3JbbisyXT1jfXJldHVybiBjbGFzcyBDYWxHcmF5Q1MgZXh0ZW5kcyBDb2xvclNwYWNle2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcigiQ2FsR3JheSIsMSk7aWYoIWUpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIldoaXRlUG9pbnQgbWlzc2luZyAtIHJlcXVpcmVkIGZvciBjb2xvciBzcGFjZSBDYWxHcmF5Iik7dD10fHxbMCwwLDBdO2E9YXx8MTt0aGlzLlhXPWVbMF07dGhpcy5ZVz1lWzFdO3RoaXMuWlc9ZVsyXTt0aGlzLlhCPXRbMF07dGhpcy5ZQj10WzFdO3RoaXMuWkI9dFsyXTt0aGlzLkc9YTtpZih0aGlzLlhXPDB8fHRoaXMuWlc8MHx8MSE9PXRoaXMuWVcpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYEludmFsaWQgV2hpdGVQb2ludCBjb21wb25lbnRzIGZvciAke3RoaXMubmFtZX0sIG5vIGZhbGxiYWNrIGF2YWlsYWJsZWApO2lmKHRoaXMuWEI8MHx8dGhpcy5ZQjwwfHx0aGlzLlpCPDApeygwLHIuaW5mbykoYEludmFsaWQgQmxhY2tQb2ludCBmb3IgJHt0aGlzLm5hbWV9LCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC5gKTt0aGlzLlhCPXRoaXMuWUI9dGhpcy5aQj0wfTA9PT10aGlzLlhCJiYwPT09dGhpcy5ZQiYmMD09PXRoaXMuWkJ8fCgwLHIud2FybikoYCR7dGhpcy5uYW1lfSwgQmxhY2tQb2ludDogWEI6ICR7dGhpcy5YQn0sIFlCOiAke3RoaXMuWUJ9LCBaQjogJHt0aGlzLlpCfSwgb25seSBkZWZhdWx0IHZhbHVlcyBhcmUgc3VwcG9ydGVkLmApO2lmKHRoaXMuRzwxKXsoMCxyLmluZm8pKGBJbnZhbGlkIEdhbW1hOiAke3RoaXMuR30gZm9yICR7dGhpcy5uYW1lfSwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuYCk7dGhpcy5HPTF9fWdldFJnYkl0ZW0oZSx0LGEscil7Y29udmVydFRvUmdiKHRoaXMsZSx0LGEsciwxKX1nZXRSZ2JCdWZmZXIoZSx0LGEscixuLGkscyl7Y29uc3Qgbz0xLygoMTw8aSktMSk7Zm9yKGxldCBpPTA7aTxhOysraSl7Y29udmVydFRvUmdiKHRoaXMsZSx0LHIsbixvKTt0Kz0xO24rPTMrc319Z2V0T3V0cHV0TGVuZ3RoKGUsdCl7cmV0dXJuIGUqKDMrdCl9fX0oKSxsPWZ1bmN0aW9uIENhbFJHQkNTQ2xvc3VyZSgpe2NvbnN0IGU9bmV3IEZsb2F0MzJBcnJheShbLjg5NTEsLjI2NjQsLS4xNjE0LC0uNzUwMiwxLjcxMzUsLjAzNjcsLjAzODksLS4wNjg1LDEuMDI5Nl0pLHQ9bmV3IEZsb2F0MzJBcnJheShbLjk4Njk5MjksLS4xNDcwNTQzLC4xNTk5NjI3LC40MzIzMDUzLC41MTgzNjAzLC4wNDkyOTEyLC0uMDA4NTI4NywuMDQwMDQyOCwuOTY4NDg2N10pLGE9bmV3IEZsb2F0MzJBcnJheShbMy4yNDA0NTQyLC0xLjUzNzEzODUsLS40OTg1MzE0LC0uOTY5MjY2LDEuODc2MDEwOCwuMDQxNTU2LC4wNTU2NDM0LC0uMjA0MDI1OSwxLjA1NzIyNTJdKSxuPW5ldyBGbG9hdDMyQXJyYXkoWzEsMSwxXSksaT1uZXcgRmxvYXQzMkFycmF5KDMpLHM9bmV3IEZsb2F0MzJBcnJheSgzKSxvPW5ldyBGbG9hdDMyQXJyYXkoMyk7ZnVuY3Rpb24gbWF0cml4UHJvZHVjdChlLHQsYSl7YVswXT1lWzBdKnRbMF0rZVsxXSp0WzFdK2VbMl0qdFsyXTthWzFdPWVbM10qdFswXStlWzRdKnRbMV0rZVs1XSp0WzJdO2FbMl09ZVs2XSp0WzBdK2VbN10qdFsxXStlWzhdKnRbMl19ZnVuY3Rpb24gc1JHQlRyYW5zZmVyRnVuY3Rpb24oZSl7cmV0dXJuIGU8PS4wMDMxMzA4P2FkanVzdFRvUmFuZ2UoMCwxLDEyLjkyKmUpOmU+PS45OTU1NDUyNT8xOmFkanVzdFRvUmFuZ2UoMCwxLDEuMDU1KmUqKigxLzIuNCktLjA1NSl9ZnVuY3Rpb24gYWRqdXN0VG9SYW5nZShlLHQsYSl7cmV0dXJuIE1hdGgubWF4KGUsTWF0aC5taW4odCxhKSl9ZnVuY3Rpb24gZGVjb2RlTChlKXtyZXR1cm4gZTwwPy1kZWNvZGVMKC1lKTplPjg/KChlKzE2KS8xMTYpKiozOi4wMDExMDcwNTY0NTk4Nzk0NTM5KmV9ZnVuY3Rpb24gY29udmVydFRvUmdiKHIsYyxsLGgsdSxkKXtjb25zdCBmPWFkanVzdFRvUmFuZ2UoMCwxLGNbbF0qZCksZz1hZGp1c3RUb1JhbmdlKDAsMSxjW2wrMV0qZCkscD1hZGp1c3RUb1JhbmdlKDAsMSxjW2wrMl0qZCksbT0xPT09Zj8xOmYqKnIuR1IsYj0xPT09Zz8xOmcqKnIuR0cseT0xPT09cD8xOnAqKnIuR0Isdz1yLk1YQSptK3IuTVhCKmIrci5NWEMqeSxTPXIuTVlBKm0rci5NWUIqYityLk1ZQyp5LHg9ci5NWkEqbStyLk1aQipiK3IuTVpDKnksaz1zO2tbMF09dztrWzFdPVM7a1syXT14O2NvbnN0IEM9bzshZnVuY3Rpb24gbm9ybWFsaXplV2hpdGVQb2ludFRvRmxhdChhLHIsbil7aWYoMT09PWFbMF0mJjE9PT1hWzJdKXtuWzBdPXJbMF07blsxXT1yWzFdO25bMl09clsyXTtyZXR1cm59Y29uc3Qgcz1uO21hdHJpeFByb2R1Y3QoZSxyLHMpO2NvbnN0IG89aTshZnVuY3Rpb24gY29udmVydFRvRmxhdChlLHQsYSl7YVswXT0xKnRbMF0vZVswXTthWzFdPTEqdFsxXS9lWzFdO2FbMl09MSp0WzJdL2VbMl19KGEscyxvKTttYXRyaXhQcm9kdWN0KHQsbyxuKX0oci53aGl0ZVBvaW50LGssQyk7Y29uc3Qgdj1zOyFmdW5jdGlvbiBjb21wZW5zYXRlQmxhY2tQb2ludChlLHQsYSl7aWYoMD09PWVbMF0mJjA9PT1lWzFdJiYwPT09ZVsyXSl7YVswXT10WzBdO2FbMV09dFsxXTthWzJdPXRbMl07cmV0dXJufWNvbnN0IHI9ZGVjb2RlTCgwKSxuPSgxLXIpLygxLWRlY29kZUwoZVswXSkpLGk9MS1uLHM9KDEtcikvKDEtZGVjb2RlTChlWzFdKSksbz0xLXMsYz0oMS1yKS8oMS1kZWNvZGVMKGVbMl0pKSxsPTEtYzthWzBdPXRbMF0qbitpO2FbMV09dFsxXSpzK287YVsyXT10WzJdKmMrbH0oci5ibGFja1BvaW50LEMsdik7Y29uc3QgRj1vOyFmdW5jdGlvbiBub3JtYWxpemVXaGl0ZVBvaW50VG9ENjUoYSxyLG4pe2NvbnN0IHM9bjttYXRyaXhQcm9kdWN0KGUscixzKTtjb25zdCBvPWk7IWZ1bmN0aW9uIGNvbnZlcnRUb0Q2NShlLHQsYSl7YVswXT0uOTUwNDcqdFswXS9lWzBdO2FbMV09MSp0WzFdL2VbMV07YVsyXT0xLjA4ODgzKnRbMl0vZVsyXX0oYSxzLG8pO21hdHJpeFByb2R1Y3QodCxvLG4pfShuLHYsRik7Y29uc3QgTz1zO21hdHJpeFByb2R1Y3QoYSxGLE8pO2hbdV09MjU1KnNSR0JUcmFuc2ZlckZ1bmN0aW9uKE9bMF0pO2hbdSsxXT0yNTUqc1JHQlRyYW5zZmVyRnVuY3Rpb24oT1sxXSk7aFt1KzJdPTI1NSpzUkdCVHJhbnNmZXJGdW5jdGlvbihPWzJdKX1yZXR1cm4gY2xhc3MgQ2FsUkdCQ1MgZXh0ZW5kcyBDb2xvclNwYWNle2NvbnN0cnVjdG9yKGUsdCxhLG4pe3N1cGVyKCJDYWxSR0IiLDMpO2lmKCFlKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJXaGl0ZVBvaW50IG1pc3NpbmcgLSByZXF1aXJlZCBmb3IgY29sb3Igc3BhY2UgQ2FsUkdCIik7dD10fHxuZXcgRmxvYXQzMkFycmF5KDMpO2E9YXx8bmV3IEZsb2F0MzJBcnJheShbMSwxLDFdKTtuPW58fG5ldyBGbG9hdDMyQXJyYXkoWzEsMCwwLDAsMSwwLDAsMCwxXSk7Y29uc3QgaT1lWzBdLHM9ZVsxXSxvPWVbMl07dGhpcy53aGl0ZVBvaW50PWU7Y29uc3QgYz10WzBdLGw9dFsxXSxoPXRbMl07dGhpcy5ibGFja1BvaW50PXQ7dGhpcy5HUj1hWzBdO3RoaXMuR0c9YVsxXTt0aGlzLkdCPWFbMl07dGhpcy5NWEE9blswXTt0aGlzLk1ZQT1uWzFdO3RoaXMuTVpBPW5bMl07dGhpcy5NWEI9blszXTt0aGlzLk1ZQj1uWzRdO3RoaXMuTVpCPW5bNV07dGhpcy5NWEM9bls2XTt0aGlzLk1ZQz1uWzddO3RoaXMuTVpDPW5bOF07aWYoaTwwfHxvPDB8fDEhPT1zKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBJbnZhbGlkIFdoaXRlUG9pbnQgY29tcG9uZW50cyBmb3IgJHt0aGlzLm5hbWV9LCBubyBmYWxsYmFjayBhdmFpbGFibGVgKTtpZihjPDB8fGw8MHx8aDwwKXsoMCxyLmluZm8pKGBJbnZhbGlkIEJsYWNrUG9pbnQgZm9yICR7dGhpcy5uYW1lfSBbJHtjfSwgJHtsfSwgJHtofV0sIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0LmApO3RoaXMuYmxhY2tQb2ludD1uZXcgRmxvYXQzMkFycmF5KDMpfWlmKHRoaXMuR1I8MHx8dGhpcy5HRzwwfHx0aGlzLkdCPDApeygwLHIuaW5mbykoYEludmFsaWQgR2FtbWEgWyR7dGhpcy5HUn0sICR7dGhpcy5HR30sICR7dGhpcy5HQn1dIGZvciAke3RoaXMubmFtZX0sIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0LmApO3RoaXMuR1I9dGhpcy5HRz10aGlzLkdCPTF9fWdldFJnYkl0ZW0oZSx0LGEscil7Y29udmVydFRvUmdiKHRoaXMsZSx0LGEsciwxKX1nZXRSZ2JCdWZmZXIoZSx0LGEscixuLGkscyl7Y29uc3Qgbz0xLygoMTw8aSktMSk7Zm9yKGxldCBpPTA7aTxhOysraSl7Y29udmVydFRvUmdiKHRoaXMsZSx0LHIsbixvKTt0Kz0zO24rPTMrc319Z2V0T3V0cHV0TGVuZ3RoKGUsdCl7cmV0dXJuIGUqKDMrdCkvM3wwfX19KCksaD1mdW5jdGlvbiBMYWJDU0Nsb3N1cmUoKXtmdW5jdGlvbiBmbl9nKGUpe2xldCB0O3Q9ZT49Ni8yOT9lKiozOjEwOC84NDEqKGUtNC8yOSk7cmV0dXJuIHR9ZnVuY3Rpb24gZGVjb2RlKGUsdCxhLHIpe3JldHVybiBhK2UqKHItYSkvdH1mdW5jdGlvbiBjb252ZXJ0VG9SZ2IoZSx0LGEscixuLGkpe2xldCBzPXRbYV0sbz10W2ErMV0sYz10W2ErMl07aWYoITEhPT1yKXtzPWRlY29kZShzLHIsMCwxMDApO289ZGVjb2RlKG8scixlLmFtaW4sZS5hbWF4KTtjPWRlY29kZShjLHIsZS5ibWluLGUuYm1heCl9bz5lLmFtYXg/bz1lLmFtYXg6bzxlLmFtaW4mJihvPWUuYW1pbik7Yz5lLmJtYXg/Yz1lLmJtYXg6YzxlLmJtaW4mJihjPWUuYm1pbik7Y29uc3QgbD0ocysxNikvMTE2LGg9bCtvLzUwMCx1PWwtYy8yMDAsZD1lLlhXKmZuX2coaCksZj1lLllXKmZuX2cobCksZz1lLlpXKmZuX2codSk7bGV0IHAsbSxiO2lmKGUuWlc8MSl7cD0zLjEzMzkqZCstMS42MTcqZistLjQ5MDYqZzttPS0uOTc4NSpkKzEuOTE2KmYrLjAzMzMqZztiPS4wNzIqZCstLjIyOSpmKzEuNDA1NypnfWVsc2V7cD0zLjI0MDYqZCstMS41MzcyKmYrLS40OTg2Kmc7bT0tLjk2ODkqZCsxLjg3NTgqZisuMDQxNSpnO2I9LjA1NTcqZCstLjIwNCpmKzEuMDU3Kmd9bltpXT0yNTUqTWF0aC5zcXJ0KHApO25baSsxXT0yNTUqTWF0aC5zcXJ0KG0pO25baSsyXT0yNTUqTWF0aC5zcXJ0KGIpfXJldHVybiBjbGFzcyBMYWJDUyBleHRlbmRzIENvbG9yU3BhY2V7Y29uc3RydWN0b3IoZSx0LGEpe3N1cGVyKCJMYWIiLDMpO2lmKCFlKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJXaGl0ZVBvaW50IG1pc3NpbmcgLSByZXF1aXJlZCBmb3IgY29sb3Igc3BhY2UgTGFiIik7dD10fHxbMCwwLDBdO2E9YXx8Wy0xMDAsMTAwLC0xMDAsMTAwXTt0aGlzLlhXPWVbMF07dGhpcy5ZVz1lWzFdO3RoaXMuWlc9ZVsyXTt0aGlzLmFtaW49YVswXTt0aGlzLmFtYXg9YVsxXTt0aGlzLmJtaW49YVsyXTt0aGlzLmJtYXg9YVszXTt0aGlzLlhCPXRbMF07dGhpcy5ZQj10WzFdO3RoaXMuWkI9dFsyXTtpZih0aGlzLlhXPDB8fHRoaXMuWlc8MHx8MSE9PXRoaXMuWVcpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkludmFsaWQgV2hpdGVQb2ludCBjb21wb25lbnRzLCBubyBmYWxsYmFjayBhdmFpbGFibGUiKTtpZih0aGlzLlhCPDB8fHRoaXMuWUI8MHx8dGhpcy5aQjwwKXsoMCxyLmluZm8pKCJJbnZhbGlkIEJsYWNrUG9pbnQsIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0Iik7dGhpcy5YQj10aGlzLllCPXRoaXMuWkI9MH1pZih0aGlzLmFtaW4+dGhpcy5hbWF4fHx0aGlzLmJtaW4+dGhpcy5ibWF4KXsoMCxyLmluZm8pKCJJbnZhbGlkIFJhbmdlLCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdHMiKTt0aGlzLmFtaW49LTEwMDt0aGlzLmFtYXg9MTAwO3RoaXMuYm1pbj0tMTAwO3RoaXMuYm1heD0xMDB9fWdldFJnYkl0ZW0oZSx0LGEscil7Y29udmVydFRvUmdiKHRoaXMsZSx0LCExLGEscil9Z2V0UmdiQnVmZmVyKGUsdCxhLHIsbixpLHMpe2NvbnN0IG89KDE8PGkpLTE7Zm9yKGxldCBpPTA7aTxhO2krKyl7Y29udmVydFRvUmdiKHRoaXMsZSx0LG8scixuKTt0Kz0zO24rPTMrc319Z2V0T3V0cHV0TGVuZ3RoKGUsdCl7cmV0dXJuIGUqKDMrdCkvM3wwfWlzRGVmYXVsdERlY29kZShlLHQpe3JldHVybiEwfWdldCB1c2VzWmVyb1RvT25lUmFuZ2UoKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywidXNlc1plcm9Ub09uZVJhbmdlIiwhMSl9fX0oKX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlBhcnRpYWxFdmFsdWF0b3I9dC5FdmFsdWF0b3JQcmVwcm9jZXNzb3I9dm9pZCAwO3ZhciByPWEoMiksbj1hKDE0KSxpPWEoMykscz1hKDMyKSxvPWEoMzYpLGM9YSgzNSksbD1hKDM5KSxoPWEoMzgpLHU9YSg0OCksZD1hKDQ5KSxmPWEoNDApLGc9YSg1NSkscD1hKDE1KSxtPWEoNTcpLGI9YSg4KSx5PWEoNSksdz1hKDU4KSxTPWEoMTIpLHg9YSgxNyksaz1hKDM3KSxDPWEoNCksdj1hKDQzKSxGPWEoNTkpLE89YSg2MCksVD1hKDYxKTtjb25zdCBNPU9iamVjdC5mcmVlemUoe21heEltYWdlU2l6ZTotMSxkaXNhYmxlRm9udEZhY2U6ITEsaWdub3JlRXJyb3JzOiExLGlzRXZhbFN1cHBvcnRlZDohMCxpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDohMCxmb250RXh0cmFQcm9wZXJ0aWVzOiExLHVzZVN5c3RlbUZvbnRzOiEwLGNNYXBVcmw6bnVsbCxzdGFuZGFyZEZvbnREYXRhVXJsOm51bGx9KSxFPTEsRD0yLE49UHJvbWlzZS5yZXNvbHZlKCk7ZnVuY3Rpb24gbm9ybWFsaXplQmxlbmRNb2RlKGUsdD0hMSl7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKGNvbnN0IHQgb2YgZSl7Y29uc3QgZT1ub3JtYWxpemVCbGVuZE1vZGUodCwhMCk7aWYoZSlyZXR1cm4gZX0oMCxyLndhcm4pKGBVbnN1cHBvcnRlZCBibGVuZCBtb2RlIEFycmF5OiAke2V9YCk7cmV0dXJuInNvdXJjZS1vdmVyIn1pZighKGUgaW5zdGFuY2VvZiBpLk5hbWUpKXJldHVybiB0P251bGw6InNvdXJjZS1vdmVyIjtzd2l0Y2goZS5uYW1lKXtjYXNlIk5vcm1hbCI6Y2FzZSJDb21wYXRpYmxlIjpyZXR1cm4ic291cmNlLW92ZXIiO2Nhc2UiTXVsdGlwbHkiOnJldHVybiJtdWx0aXBseSI7Y2FzZSJTY3JlZW4iOnJldHVybiJzY3JlZW4iO2Nhc2UiT3ZlcmxheSI6cmV0dXJuIm92ZXJsYXkiO2Nhc2UiRGFya2VuIjpyZXR1cm4iZGFya2VuIjtjYXNlIkxpZ2h0ZW4iOnJldHVybiJsaWdodGVuIjtjYXNlIkNvbG9yRG9kZ2UiOnJldHVybiJjb2xvci1kb2RnZSI7Y2FzZSJDb2xvckJ1cm4iOnJldHVybiJjb2xvci1idXJuIjtjYXNlIkhhcmRMaWdodCI6cmV0dXJuImhhcmQtbGlnaHQiO2Nhc2UiU29mdExpZ2h0IjpyZXR1cm4ic29mdC1saWdodCI7Y2FzZSJEaWZmZXJlbmNlIjpyZXR1cm4iZGlmZmVyZW5jZSI7Y2FzZSJFeGNsdXNpb24iOnJldHVybiJleGNsdXNpb24iO2Nhc2UiSHVlIjpyZXR1cm4iaHVlIjtjYXNlIlNhdHVyYXRpb24iOnJldHVybiJzYXR1cmF0aW9uIjtjYXNlIkNvbG9yIjpyZXR1cm4iY29sb3IiO2Nhc2UiTHVtaW5vc2l0eSI6cmV0dXJuImx1bWlub3NpdHkifWlmKHQpcmV0dXJuIG51bGw7KDAsci53YXJuKShgVW5zdXBwb3J0ZWQgYmxlbmQgbW9kZTogJHtlLm5hbWV9YCk7cmV0dXJuInNvdXJjZS1vdmVyIn1mdW5jdGlvbiBpbmNyZW1lbnRDYWNoZWRJbWFnZU1hc2tDb3VudChlKXtlLmZuPT09ci5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0JiZlLmFyZ3NbMF0mJmUuYXJnc1swXS5jb3VudD4wJiZlLmFyZ3NbMF0uY291bnQrK31jbGFzcyBUaW1lU2xvdE1hbmFnZXJ7c3RhdGljIGdldCBUSU1FX1NMT1RfRFVSQVRJT05fTVMoKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiVElNRV9TTE9UX0RVUkFUSU9OX01TIiwyMCl9c3RhdGljIGdldCBDSEVDS19USU1FX0VWRVJZKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsIkNIRUNLX1RJTUVfRVZFUlkiLDEwMCl9Y29uc3RydWN0b3IoKXt0aGlzLnJlc2V0KCl9Y2hlY2soKXtpZigrK3RoaXMuY2hlY2tlZDxUaW1lU2xvdE1hbmFnZXIuQ0hFQ0tfVElNRV9FVkVSWSlyZXR1cm4hMTt0aGlzLmNoZWNrZWQ9MDtyZXR1cm4gdGhpcy5lbmRUaW1lPD1EYXRlLm5vdygpfXJlc2V0KCl7dGhpcy5lbmRUaW1lPURhdGUubm93KCkrVGltZVNsb3RNYW5hZ2VyLlRJTUVfU0xPVF9EVVJBVElPTl9NUzt0aGlzLmNoZWNrZWQ9MH19Y2xhc3MgUGFydGlhbEV2YWx1YXRvcntjb25zdHJ1Y3Rvcih7eHJlZjplLGhhbmRsZXI6dCxwYWdlSW5kZXg6YSxpZEZhY3Rvcnk6cixmb250Q2FjaGU6bixidWlsdEluQ01hcENhY2hlOmksc3RhbmRhcmRGb250RGF0YUNhY2hlOnMsZ2xvYmFsSW1hZ2VDYWNoZTpvLG9wdGlvbnM6Yz1udWxsfSl7dGhpcy54cmVmPWU7dGhpcy5oYW5kbGVyPXQ7dGhpcy5wYWdlSW5kZXg9YTt0aGlzLmlkRmFjdG9yeT1yO3RoaXMuZm9udENhY2hlPW47dGhpcy5idWlsdEluQ01hcENhY2hlPWk7dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGU9czt0aGlzLmdsb2JhbEltYWdlQ2FjaGU9bzt0aGlzLm9wdGlvbnM9Y3x8TTt0aGlzLnBhcnNpbmdUeXBlM0ZvbnQ9ITE7dGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kPXRoaXMuZmV0Y2hCdWlsdEluQ01hcC5iaW5kKHRoaXMpfWdldCBfcGRmRnVuY3Rpb25GYWN0b3J5KCl7Y29uc3QgZT1uZXcgZy5QREZGdW5jdGlvbkZhY3Rvcnkoe3hyZWY6dGhpcy54cmVmLGlzRXZhbFN1cHBvcnRlZDp0aGlzLm9wdGlvbnMuaXNFdmFsU3VwcG9ydGVkfSk7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsIl9wZGZGdW5jdGlvbkZhY3RvcnkiLGUpfWNsb25lKGU9bnVsbCl7Y29uc3QgdD1PYmplY3QuY3JlYXRlKHRoaXMpO3Qub3B0aW9ucz1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5vcHRpb25zLGUpO3JldHVybiB0fWhhc0JsZW5kTW9kZXMoZSx0KXtpZighKGUgaW5zdGFuY2VvZiBpLkRpY3QpKXJldHVybiExO2lmKGUub2JqSWQmJnQuaGFzKGUub2JqSWQpKXJldHVybiExO2NvbnN0IGE9bmV3IGkuUmVmU2V0KHQpO2Uub2JqSWQmJmEucHV0KGUub2JqSWQpO2NvbnN0IG49W2VdLHM9dGhpcy54cmVmO2Zvcig7bi5sZW5ndGg7KXtjb25zdCBlPW4uc2hpZnQoKSx0PWUuZ2V0KCJFeHRHU3RhdGUiKTtpZih0IGluc3RhbmNlb2YgaS5EaWN0KWZvcihsZXQgZSBvZiB0LmdldFJhd1ZhbHVlcygpKXtpZihlIGluc3RhbmNlb2YgaS5SZWYpe2lmKGEuaGFzKGUpKWNvbnRpbnVlO3RyeXtlPXMuZmV0Y2goZSl9Y2F0Y2godCl7YS5wdXQoZSk7KDAsci5pbmZvKShgaGFzQmxlbmRNb2RlcyAtIGlnbm9yaW5nIEV4dEdTdGF0ZTogIiR7dH0iLmApO2NvbnRpbnVlfX1pZighKGUgaW5zdGFuY2VvZiBpLkRpY3QpKWNvbnRpbnVlO2Uub2JqSWQmJmEucHV0KGUub2JqSWQpO2NvbnN0IHQ9ZS5nZXQoIkJNIik7aWYodCBpbnN0YW5jZW9mIGkuTmFtZSl7aWYoIk5vcm1hbCIhPT10Lm5hbWUpcmV0dXJuITB9ZWxzZSBpZih2b2lkIDAhPT10JiZBcnJheS5pc0FycmF5KHQpKWZvcihjb25zdCBlIG9mIHQpaWYoZSBpbnN0YW5jZW9mIGkuTmFtZSYmIk5vcm1hbCIhPT1lLm5hbWUpcmV0dXJuITB9Y29uc3Qgbz1lLmdldCgiWE9iamVjdCIpO2lmKG8gaW5zdGFuY2VvZiBpLkRpY3QpZm9yKGxldCBlIG9mIG8uZ2V0UmF3VmFsdWVzKCkpe2lmKGUgaW5zdGFuY2VvZiBpLlJlZil7aWYoYS5oYXMoZSkpY29udGludWU7dHJ5e2U9cy5mZXRjaChlKX1jYXRjaCh0KXthLnB1dChlKTsoMCxyLmluZm8pKGBoYXNCbGVuZE1vZGVzIC0gaWdub3JpbmcgWE9iamVjdDogIiR7dH0iLmApO2NvbnRpbnVlfX1pZighKGUgaW5zdGFuY2VvZiB5LkJhc2VTdHJlYW0pKWNvbnRpbnVlO2UuZGljdC5vYmpJZCYmYS5wdXQoZS5kaWN0Lm9iaklkKTtjb25zdCB0PWUuZGljdC5nZXQoIlJlc291cmNlcyIpO2lmKHQgaW5zdGFuY2VvZiBpLkRpY3QmJighdC5vYmpJZHx8IWEuaGFzKHQub2JqSWQpKSl7bi5wdXNoKHQpO3Qub2JqSWQmJmEucHV0KHQub2JqSWQpfX19Zm9yKGNvbnN0IGUgb2YgYSl0LnB1dChlKTtyZXR1cm4hMX1hc3luYyBmZXRjaEJ1aWx0SW5DTWFwKGUpe2NvbnN0IHQ9dGhpcy5idWlsdEluQ01hcENhY2hlLmdldChlKTtpZih0KXJldHVybiB0O2xldCBhO2lmKG51bGwhPT10aGlzLm9wdGlvbnMuY01hcFVybCl7Y29uc3QgdD1gJHt0aGlzLm9wdGlvbnMuY01hcFVybH0ke2V9LmJjbWFwYCxuPWF3YWl0IGZldGNoKHQpO2lmKCFuLm9rKXRocm93IG5ldyBFcnJvcihgZmV0Y2hCdWlsdEluQ01hcDogZmFpbGVkIHRvIGZldGNoIGZpbGUgIiR7dH0iIHdpdGggIiR7bi5zdGF0dXNUZXh0fSIuYCk7YT17Y01hcERhdGE6bmV3IFVpbnQ4QXJyYXkoYXdhaXQgbi5hcnJheUJ1ZmZlcigpKSxjb21wcmVzc2lvblR5cGU6ci5DTWFwQ29tcHJlc3Npb25UeXBlLkJJTkFSWX19ZWxzZSBhPWF3YWl0IHRoaXMuaGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkZldGNoQnVpbHRJbkNNYXAiLHtuYW1lOmV9KTthLmNvbXByZXNzaW9uVHlwZSE9PXIuQ01hcENvbXByZXNzaW9uVHlwZS5OT05FJiZ0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUuc2V0KGUsYSk7cmV0dXJuIGF9YXN5bmMgZmV0Y2hTdGFuZGFyZEZvbnREYXRhKGUpe2NvbnN0IHQ9dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUuZ2V0KGUpO2lmKHQpcmV0dXJuIG5ldyBiLlN0cmVhbSh0KTtpZih0aGlzLm9wdGlvbnMudXNlU3lzdGVtRm9udHMmJiJTeW1ib2wiIT09ZSYmIlphcGZEaW5nYmF0cyIhPT1lKXJldHVybiBudWxsO2NvbnN0IGE9KDAsbC5nZXRGb250TmFtZVRvRmlsZU1hcCkoKVtlXTtsZXQgbjtpZihudWxsIT09dGhpcy5vcHRpb25zLnN0YW5kYXJkRm9udERhdGFVcmwpe2NvbnN0IGU9YCR7dGhpcy5vcHRpb25zLnN0YW5kYXJkRm9udERhdGFVcmx9JHthfWAsdD1hd2FpdCBmZXRjaChlKTt0Lm9rP249YXdhaXQgdC5hcnJheUJ1ZmZlcigpOigwLHIud2FybikoYGZldGNoU3RhbmRhcmRGb250RGF0YTogZmFpbGVkIHRvIGZldGNoIGZpbGUgIiR7ZX0iIHdpdGggIiR7dC5zdGF0dXNUZXh0fSIuYCl9ZWxzZSB0cnl7bj1hd2FpdCB0aGlzLmhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJGZXRjaFN0YW5kYXJkRm9udERhdGEiLHtmaWxlbmFtZTphfSl9Y2F0Y2goZSl7KDAsci53YXJuKShgZmV0Y2hTdGFuZGFyZEZvbnREYXRhOiBmYWlsZWQgdG8gZmV0Y2ggZmlsZSAiJHthfSIgd2l0aCAiJHtlfSIuYCl9aWYoIW4pcmV0dXJuIG51bGw7dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUuc2V0KGUsbik7cmV0dXJuIG5ldyBiLlN0cmVhbShuKX1hc3luYyBidWlsZEZvcm1YT2JqZWN0KGUsdCxhLG4scyxvLGMpe2NvbnN0IGw9dC5kaWN0LGg9bC5nZXRBcnJheSgiTWF0cml4Iik7bGV0IHUsZCxmPWwuZ2V0QXJyYXkoIkJCb3giKTtmPUFycmF5LmlzQXJyYXkoZikmJjQ9PT1mLmxlbmd0aD9yLlV0aWwubm9ybWFsaXplUmVjdChmKTpudWxsO2wuaGFzKCJPQyIpJiYodT1hd2FpdCB0aGlzLnBhcnNlTWFya2VkQ29udGVudFByb3BzKGwuZ2V0KCJPQyIpLGUpKTt2b2lkIDAhPT11JiZuLmFkZE9wKHIuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLFsiT0MiLHVdKTtjb25zdCBnPWwuZ2V0KCJHcm91cCIpO2lmKGcpe2Q9e21hdHJpeDpoLGJib3g6ZixzbWFzazphLGlzb2xhdGVkOiExLGtub2Nrb3V0OiExfTtjb25zdCB0PWcuZ2V0KCJTIik7bGV0IHM9bnVsbDtpZigoMCxpLmlzTmFtZSkodCwiVHJhbnNwYXJlbmN5Iikpe2QuaXNvbGF0ZWQ9Zy5nZXQoIkkiKXx8ITE7ZC5rbm9ja291dD1nLmdldCgiSyIpfHwhMTtpZihnLmhhcygiQ1MiKSl7Y29uc3QgdD1nLmdldFJhdygiQ1MiKSxhPVMuQ29sb3JTcGFjZS5nZXRDYWNoZWQodCx0aGlzLnhyZWYsYyk7cz1hfHxhd2FpdCB0aGlzLnBhcnNlQ29sb3JTcGFjZSh7Y3M6dCxyZXNvdXJjZXM6ZSxsb2NhbENvbG9yU3BhY2VDYWNoZTpjfSl9fWlmKGEmJmEuYmFja2Ryb3Ape3M9c3x8Uy5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiO2EuYmFja2Ryb3A9cy5nZXRSZ2IoYS5iYWNrZHJvcCwwKX1uLmFkZE9wKHIuT1BTLmJlZ2luR3JvdXAsW2RdKX1jb25zdCBwPWc/W2gsbnVsbF06W2gsZl07bi5hZGRPcChyLk9QUy5wYWludEZvcm1YT2JqZWN0QmVnaW4scCk7cmV0dXJuIHRoaXMuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06dCx0YXNrOnMscmVzb3VyY2VzOmwuZ2V0KCJSZXNvdXJjZXMiKXx8ZSxvcGVyYXRvckxpc3Q6bixpbml0aWFsU3RhdGU6b30pLnRoZW4oKGZ1bmN0aW9uKCl7bi5hZGRPcChyLk9QUy5wYWludEZvcm1YT2JqZWN0RW5kLFtdKTtnJiZuLmFkZE9wKHIuT1BTLmVuZEdyb3VwLFtkXSk7dm9pZCAwIT09dSYmbi5hZGRPcChyLk9QUy5lbmRNYXJrZWRDb250ZW50LFtdKX0pKX1fc2VuZEltZ0RhdGEoZSx0LGE9ITEpe2NvbnN0IHI9dD9bdC5iaXRtYXB8fHQuZGF0YS5idWZmZXJdOm51bGw7cmV0dXJuIHRoaXMucGFyc2luZ1R5cGUzRm9udHx8YT90aGlzLmhhbmRsZXIuc2VuZCgiY29tbW9ub2JqIixbZSwiSW1hZ2UiLHRdLHIpOnRoaXMuaGFuZGxlci5zZW5kKCJvYmoiLFtlLHRoaXMucGFnZUluZGV4LCJJbWFnZSIsdF0scil9YXN5bmMgYnVpbGRQYWludEltYWdlWE9iamVjdCh7cmVzb3VyY2VzOmUsaW1hZ2U6dCxpc0lubGluZTphPSExLG9wZXJhdG9yTGlzdDpuLGNhY2hlS2V5OmksbG9jYWxJbWFnZUNhY2hlOnMsbG9jYWxDb2xvclNwYWNlQ2FjaGU6b30pe2NvbnN0IGM9dC5kaWN0LGw9Yy5vYmpJZCxoPWMuZ2V0KCJXIiwiV2lkdGgiKSx1PWMuZ2V0KCJIIiwiSGVpZ2h0Iik7aWYoIWh8fCJudW1iZXIiIT10eXBlb2YgaHx8IXV8fCJudW1iZXIiIT10eXBlb2YgdSl7KDAsci53YXJuKSgiSW1hZ2UgZGltZW5zaW9ucyBhcmUgbWlzc2luZywgb3Igbm90IG51bWJlcnMuIik7cmV0dXJufWNvbnN0IGQ9dGhpcy5vcHRpb25zLm1heEltYWdlU2l6ZTtpZigtMSE9PWQmJmgqdT5kKXtjb25zdCBlPSJJbWFnZSBleGNlZWRlZCBtYXhpbXVtIGFsbG93ZWQgc2l6ZSBhbmQgd2FzIHJlbW92ZWQuIjtpZih0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXsoMCxyLndhcm4pKGUpO3JldHVybn10aHJvdyBuZXcgRXJyb3IoZSl9bGV0IGY7Yy5oYXMoIk9DIikmJihmPWF3YWl0IHRoaXMucGFyc2VNYXJrZWRDb250ZW50UHJvcHMoYy5nZXQoIk9DIiksZSkpO2xldCBnLHA7aWYoYy5nZXQoIklNIiwiSW1hZ2VNYXNrIil8fCExKXtjb25zdCBlPWMuZ2V0KCJJIiwiSW50ZXJwb2xhdGUiKSxhPWgrNz4+MyxvPXQuZ2V0Qnl0ZXMoYSp1KSxkPWMuZ2V0QXJyYXkoIkQiLCJEZWNvZGUiKTtpZih0aGlzLnBhcnNpbmdUeXBlM0ZvbnQpe2c9VC5QREZJbWFnZS5jcmVhdGVSYXdNYXNrKHtpbWdBcnJheTpvLHdpZHRoOmgsaGVpZ2h0OnUsaW1hZ2VJc0Zyb21EZWNvZGVTdHJlYW06dCBpbnN0YW5jZW9mIHguRGVjb2RlU3RyZWFtLGludmVyc2VEZWNvZGU6ISFkJiZkWzBdPjAsaW50ZXJwb2xhdGU6ZX0pO2cuY2FjaGVkPSEhaTtwPVtnXTtuLmFkZEltYWdlT3BzKHIuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCxwLGYpO2kmJnMuc2V0KGksbCx7Zm46ci5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0LGFyZ3M6cCxvcHRpb25hbENvbnRlbnQ6Zn0pO3JldHVybn1nPVQuUERGSW1hZ2UuY3JlYXRlTWFzayh7aW1nQXJyYXk6byx3aWR0aDpoLGhlaWdodDp1LGltYWdlSXNGcm9tRGVjb2RlU3RyZWFtOnQgaW5zdGFuY2VvZiB4LkRlY29kZVN0cmVhbSxpbnZlcnNlRGVjb2RlOiEhZCYmZFswXT4wLGludGVycG9sYXRlOmUsaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6dGhpcy5vcHRpb25zLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkfSk7aWYoZy5pc1NpbmdsZU9wYXF1ZVBpeGVsKXtuLmFkZEltYWdlT3BzKHIuT1BTLnBhaW50U29saWRDb2xvckltYWdlTWFzayxbXSxmKTtpJiZzLnNldChpLGwse2ZuOnIuT1BTLnBhaW50U29saWRDb2xvckltYWdlTWFzayxhcmdzOltdLG9wdGlvbmFsQ29udGVudDpmfSk7cmV0dXJufWNvbnN0IG09YG1hc2tfJHt0aGlzLmlkRmFjdG9yeS5jcmVhdGVPYmpJZCgpfWA7bi5hZGREZXBlbmRlbmN5KG0pO3RoaXMuX3NlbmRJbWdEYXRhKG0sZyk7cD1be2RhdGE6bSx3aWR0aDpnLndpZHRoLGhlaWdodDpnLmhlaWdodCxpbnRlcnBvbGF0ZTpnLmludGVycG9sYXRlLGNvdW50OjF9XTtuLmFkZEltYWdlT3BzKHIuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCxwLGYpO2kmJnMuc2V0KGksbCx7Zm46ci5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0LGFyZ3M6cCxvcHRpb25hbENvbnRlbnQ6Zn0pO3JldHVybn1jb25zdCBtPWMuZ2V0KCJTTSIsIlNNYXNrIil8fCExLGI9Yy5nZXQoIk1hc2siKXx8ITE7aWYoYSYmIW0mJiFiJiZoK3U8MjAwKXtjb25zdCBpPW5ldyBULlBERkltYWdlKHt4cmVmOnRoaXMueHJlZixyZXM6ZSxpbWFnZTp0LGlzSW5saW5lOmEscGRmRnVuY3Rpb25GYWN0b3J5OnRoaXMuX3BkZkZ1bmN0aW9uRmFjdG9yeSxsb2NhbENvbG9yU3BhY2VDYWNoZTpvfSk7Zz1pLmNyZWF0ZUltYWdlRGF0YSghMCk7bi5hZGRJbWFnZU9wcyhyLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdCxbZ10sZik7cmV0dXJufWxldCB5PWBpbWdfJHt0aGlzLmlkRmFjdG9yeS5jcmVhdGVPYmpJZCgpfWAsdz0hMTtpZih0aGlzLnBhcnNpbmdUeXBlM0ZvbnQpeT1gJHt0aGlzLmlkRmFjdG9yeS5nZXREb2NJZCgpfV90eXBlM18ke3l9YDtlbHNlIGlmKGwpe3c9dGhpcy5nbG9iYWxJbWFnZUNhY2hlLnNob3VsZENhY2hlKGwsdGhpcy5wYWdlSW5kZXgpO3cmJih5PWAke3RoaXMuaWRGYWN0b3J5LmdldERvY0lkKCl9XyR7eX1gKX1uLmFkZERlcGVuZGVuY3koeSk7cD1beSxoLHVdO1QuUERGSW1hZ2UuYnVpbGRJbWFnZSh7eHJlZjp0aGlzLnhyZWYscmVzOmUsaW1hZ2U6dCxpc0lubGluZTphLHBkZkZ1bmN0aW9uRmFjdG9yeTp0aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnksbG9jYWxDb2xvclNwYWNlQ2FjaGU6b30pLnRoZW4oKGU9PntnPWUuY3JlYXRlSW1hZ2VEYXRhKCExKTtpJiZsJiZ3JiZ0aGlzLmdsb2JhbEltYWdlQ2FjaGUuYWRkQnl0ZVNpemUobCxnLmRhdGEubGVuZ3RoKTtyZXR1cm4gdGhpcy5fc2VuZEltZ0RhdGEoeSxnLHcpfSkpLmNhdGNoKChlPT57KDAsci53YXJuKShgVW5hYmxlIHRvIGRlY29kZSBpbWFnZSAiJHt5fSI6ICIke2V9Ii5gKTtyZXR1cm4gdGhpcy5fc2VuZEltZ0RhdGEoeSxudWxsLHcpfSkpO24uYWRkSW1hZ2VPcHMoci5PUFMucGFpbnRJbWFnZVhPYmplY3QscCxmKTtpZihpKXtzLnNldChpLGwse2ZuOnIuT1BTLnBhaW50SW1hZ2VYT2JqZWN0LGFyZ3M6cCxvcHRpb25hbENvbnRlbnQ6Zn0pO2lmKGwpeygwLHIuYXNzZXJ0KSghYSwiQ2Fubm90IGNhY2hlIGFuIGlubGluZSBpbWFnZSBnbG9iYWxseS4iKTt0aGlzLmdsb2JhbEltYWdlQ2FjaGUuYWRkUGFnZUluZGV4KGwsdGhpcy5wYWdlSW5kZXgpO3cmJnRoaXMuZ2xvYmFsSW1hZ2VDYWNoZS5zZXREYXRhKGwse29iaklkOnksZm46ci5PUFMucGFpbnRJbWFnZVhPYmplY3QsYXJnczpwLG9wdGlvbmFsQ29udGVudDpmLGJ5dGVTaXplOjB9KX19fWhhbmRsZVNNYXNrKGUsdCxhLHIsbixpKXtjb25zdCBzPWUuZ2V0KCJHIiksbz17c3VidHlwZTplLmdldCgiUyIpLm5hbWUsYmFja2Ryb3A6ZS5nZXQoIkJDIil9LGM9ZS5nZXQoIlRSIik7aWYoKDAsZy5pc1BERkZ1bmN0aW9uKShjKSl7Y29uc3QgZT10aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnkuY3JlYXRlKGMpLHQ9bmV3IFVpbnQ4QXJyYXkoMjU2KSxhPW5ldyBGbG9hdDMyQXJyYXkoMSk7Zm9yKGxldCByPTA7cjwyNTY7cisrKXthWzBdPXIvMjU1O2UoYSwwLGEsMCk7dFtyXT0yNTUqYVswXXwwfW8udHJhbnNmZXJNYXA9dH1yZXR1cm4gdGhpcy5idWlsZEZvcm1YT2JqZWN0KHQscyxvLGEscixuLnN0YXRlLmNsb25lKCksaSl9aGFuZGxlVHJhbnNmZXJGdW5jdGlvbihlKXtsZXQgdDtpZihBcnJheS5pc0FycmF5KGUpKXQ9ZTtlbHNle2lmKCEoMCxnLmlzUERGRnVuY3Rpb24pKGUpKXJldHVybiBudWxsO3Q9W2VdfWNvbnN0IGE9W107bGV0IHI9MCxuPTA7Zm9yKGNvbnN0IGUgb2YgdCl7Y29uc3QgdD10aGlzLnhyZWYuZmV0Y2hJZlJlZihlKTtyKys7aWYoKDAsaS5pc05hbWUpKHQsIklkZW50aXR5Iikpe2EucHVzaChudWxsKTtjb250aW51ZX1pZighKDAsZy5pc1BERkZ1bmN0aW9uKSh0KSlyZXR1cm4gbnVsbDtjb25zdCBzPXRoaXMuX3BkZkZ1bmN0aW9uRmFjdG9yeS5jcmVhdGUodCksbz1uZXcgVWludDhBcnJheSgyNTYpLGM9bmV3IEZsb2F0MzJBcnJheSgxKTtmb3IobGV0IGU9MDtlPDI1NjtlKyspe2NbMF09ZS8yNTU7cyhjLDAsYywwKTtvW2VdPTI1NSpjWzBdfDB9YS5wdXNoKG8pO24rK31yZXR1cm4gMSE9PXImJjQhPT1yfHwwPT09bj9udWxsOmF9aGFuZGxlVGlsaW5nVHlwZShlLHQsYSxuLHMsbyxjLGwpe2NvbnN0IGg9bmV3IE8uT3BlcmF0b3JMaXN0LGQ9aS5EaWN0Lm1lcmdlKHt4cmVmOnRoaXMueHJlZixkaWN0QXJyYXk6W3MuZ2V0KCJSZXNvdXJjZXMiKSxhXX0pO3JldHVybiB0aGlzLmdldE9wZXJhdG9yTGlzdCh7c3RyZWFtOm4sdGFzazpjLHJlc291cmNlczpkLG9wZXJhdG9yTGlzdDpofSkudGhlbigoZnVuY3Rpb24oKXtjb25zdCBhPWguZ2V0SVIoKSxyPSgwLHUuZ2V0VGlsaW5nUGF0dGVybklSKShhLHMsdCk7by5hZGREZXBlbmRlbmNpZXMoaC5kZXBlbmRlbmNpZXMpO28uYWRkT3AoZSxyKTtzLm9iaklkJiZsLnNldChudWxsLHMub2JqSWQse29wZXJhdG9yTGlzdElSOmEsZGljdDpzfSl9KSkuY2F0Y2goKGU9PntpZighKGUgaW5zdGFuY2VvZiByLkFib3J0RXhjZXB0aW9uKSl7aWYoIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTt0aGlzLmhhbmRsZXIuc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOnIuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JUaWxpbmdQYXR0ZXJufSk7KDAsci53YXJuKShgaGFuZGxlVGlsaW5nVHlwZSAtIGlnbm9yaW5nIHBhdHRlcm46ICIke2V9Ii5gKX19KSl9aGFuZGxlU2V0Rm9udChlLHQsYSxuLG8sYyxsPW51bGwsaD1udWxsKXtjb25zdCB1PXQmJnRbMF1pbnN0YW5jZW9mIGkuTmFtZT90WzBdLm5hbWU6bnVsbDtyZXR1cm4gdGhpcy5sb2FkRm9udCh1LGEsZSxsLGgpLnRoZW4oKHQ9PnQuZm9udC5pc1R5cGUzRm9udD90LmxvYWRUeXBlM0RhdGEodGhpcyxlLG8pLnRoZW4oKGZ1bmN0aW9uKCl7bi5hZGREZXBlbmRlbmNpZXModC50eXBlM0RlcGVuZGVuY2llcyk7cmV0dXJuIHR9KSkuY2F0Y2goKGU9Pnt0aGlzLmhhbmRsZXIuc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOnIuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JGb250TG9hZFR5cGUzfSk7cmV0dXJuIG5ldyBUcmFuc2xhdGVkRm9udCh7bG9hZGVkTmFtZToiZ19mb250X2Vycm9yIixmb250Om5ldyBzLkVycm9yRm9udChgVHlwZTMgZm9udCBsb2FkIGVycm9yOiAke2V9YCksZGljdDp0LmZvbnQsZXZhbHVhdG9yT3B0aW9uczp0aGlzLm9wdGlvbnN9KX0pKTp0KSkudGhlbigoZT0+e2MuZm9udD1lLmZvbnQ7ZS5zZW5kKHRoaXMuaGFuZGxlcik7cmV0dXJuIGUubG9hZGVkTmFtZX0pKX1oYW5kbGVUZXh0KGUsdCl7Y29uc3QgYT10LmZvbnQsbj1hLmNoYXJzVG9HbHlwaHMoZSk7aWYoYS5kYXRhKXsoISEodC50ZXh0UmVuZGVyaW5nTW9kZSZyLlRleHRSZW5kZXJpbmdNb2RlLkFERF9UT19QQVRIX0ZMQUcpfHwiUGF0dGVybiI9PT10LmZpbGxDb2xvclNwYWNlLm5hbWV8fGEuZGlzYWJsZUZvbnRGYWNlfHx0aGlzLm9wdGlvbnMuZGlzYWJsZUZvbnRGYWNlKSYmUGFydGlhbEV2YWx1YXRvci5idWlsZEZvbnRQYXRocyhhLG4sdGhpcy5oYW5kbGVyLHRoaXMub3B0aW9ucyl9cmV0dXJuIG59ZW5zdXJlU3RhdGVGb250KGUpe2lmKGUuZm9udClyZXR1cm47Y29uc3QgdD1uZXcgci5Gb3JtYXRFcnJvcigiTWlzc2luZyBzZXRGb250IChUZikgb3BlcmF0b3IgYmVmb3JlIHRleHQgcmVuZGVyaW5nIG9wZXJhdG9yLiIpO2lmKCF0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IHQ7dGhpcy5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDpyLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udFN0YXRlfSk7KDAsci53YXJuKShgZW5zdXJlU3RhdGVGb250OiAiJHt0fSIuYCl9YXN5bmMgc2V0R1N0YXRlKHtyZXNvdXJjZXM6ZSxnU3RhdGU6dCxvcGVyYXRvckxpc3Q6YSxjYWNoZUtleTpuLHRhc2s6cyxzdGF0ZU1hbmFnZXI6byxsb2NhbEdTdGF0ZUNhY2hlOmMsbG9jYWxDb2xvclNwYWNlQ2FjaGU6bH0pe2NvbnN0IGg9dC5vYmpJZDtsZXQgdT0hMDtjb25zdCBkPVtdO2xldCBmPVByb21pc2UucmVzb2x2ZSgpO2Zvcihjb25zdCBuIG9mIHQuZ2V0S2V5cygpKXtjb25zdCBjPXQuZ2V0KG4pO3N3aXRjaChuKXtjYXNlIlR5cGUiOmJyZWFrO2Nhc2UiTFciOmNhc2UiTEMiOmNhc2UiTEoiOmNhc2UiTUwiOmNhc2UiRCI6Y2FzZSJSSSI6Y2FzZSJGTCI6Y2FzZSJDQSI6Y2FzZSJjYSI6ZC5wdXNoKFtuLGNdKTticmVhaztjYXNlIkZvbnQiOnU9ITE7Zj1mLnRoZW4oKCgpPT50aGlzLmhhbmRsZVNldEZvbnQoZSxudWxsLGNbMF0sYSxzLG8uc3RhdGUpLnRoZW4oKGZ1bmN0aW9uKGUpe2EuYWRkRGVwZW5kZW5jeShlKTtkLnB1c2goW24sW2UsY1sxXV1dKX0pKSkpO2JyZWFrO2Nhc2UiQk0iOmQucHVzaChbbixub3JtYWxpemVCbGVuZE1vZGUoYyldKTticmVhaztjYXNlIlNNYXNrIjppZigoMCxpLmlzTmFtZSkoYywiTm9uZSIpKXtkLnB1c2goW24sITFdKTticmVha31pZihjIGluc3RhbmNlb2YgaS5EaWN0KXt1PSExO2Y9Zi50aGVuKCgoKT0+dGhpcy5oYW5kbGVTTWFzayhjLGUsYSxzLG8sbCkpKTtkLnB1c2goW24sITBdKX1lbHNlKDAsci53YXJuKSgiVW5zdXBwb3J0ZWQgU01hc2sgdHlwZSIpO2JyZWFrO2Nhc2UiVFIiOmNvbnN0IHQ9dGhpcy5oYW5kbGVUcmFuc2ZlckZ1bmN0aW9uKGMpO2QucHVzaChbbix0XSk7YnJlYWs7Y2FzZSJPUCI6Y2FzZSJvcCI6Y2FzZSJPUE0iOmNhc2UiQkciOmNhc2UiQkcyIjpjYXNlIlVDUiI6Y2FzZSJVQ1IyIjpjYXNlIlRSMiI6Y2FzZSJIVCI6Y2FzZSJTTSI6Y2FzZSJTQSI6Y2FzZSJBSVMiOmNhc2UiVEsiOigwLHIuaW5mbykoImdyYXBoaWMgc3RhdGUgb3BlcmF0b3IgIituKTticmVhaztkZWZhdWx0OigwLHIuaW5mbykoIlVua25vd24gZ3JhcGhpYyBzdGF0ZSBvcGVyYXRvciAiK24pfX1yZXR1cm4gZi50aGVuKChmdW5jdGlvbigpe2QubGVuZ3RoPjAmJmEuYWRkT3Aoci5PUFMuc2V0R1N0YXRlLFtkXSk7dSYmYy5zZXQobixoLGQpfSkpfWxvYWRGb250KGUsdCxhLG49bnVsbCxjPW51bGwpe2NvbnN0IGVycm9yRm9udD1hc3luYygpPT5uZXcgVHJhbnNsYXRlZEZvbnQoe2xvYWRlZE5hbWU6ImdfZm9udF9lcnJvciIsZm9udDpuZXcgcy5FcnJvckZvbnQoYEZvbnQgIiR7ZX0iIGlzIG5vdCBhdmFpbGFibGUuYCksZGljdDp0LGV2YWx1YXRvck9wdGlvbnM6dGhpcy5vcHRpb25zfSksbD10aGlzLnhyZWY7bGV0IGg7aWYodCl0IGluc3RhbmNlb2YgaS5SZWYmJihoPXQpO2Vsc2V7Y29uc3QgdD1hLmdldCgiRm9udCIpO3QmJihoPXQuZ2V0UmF3KGUpKX1pZighaCl7Y29uc3QgYT1gRm9udCAiJHtlfHx0JiZ0LnRvU3RyaW5nKCl9IiBpcyBub3QgYXZhaWxhYmxlYDtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyYmIXRoaXMucGFyc2luZ1R5cGUzRm9udCl7KDAsci53YXJuKShgJHthfS5gKTtyZXR1cm4gZXJyb3JGb250KCl9dGhpcy5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDpyLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udE1pc3Npbmd9KTsoMCxyLndhcm4pKGAke2F9IC0tIGF0dGVtcHRpbmcgdG8gZmFsbGJhY2sgdG8gYSBkZWZhdWx0IGZvbnQuYCk7aD1ufHxQYXJ0aWFsRXZhbHVhdG9yLmZhbGxiYWNrRm9udERpY3R9aWYodGhpcy5wYXJzaW5nVHlwZTNGb250JiZ0aGlzLnR5cGUzRm9udFJlZnMuaGFzKGgpKXJldHVybiBlcnJvckZvbnQoKTtpZih0aGlzLmZvbnRDYWNoZS5oYXMoaCkpcmV0dXJuIHRoaXMuZm9udENhY2hlLmdldChoKTtpZighKCh0PWwuZmV0Y2hJZlJlZihoKSlpbnN0YW5jZW9mIGkuRGljdCkpcmV0dXJuIGVycm9yRm9udCgpO2lmKHQuY2FjaGVLZXkmJnRoaXMuZm9udENhY2hlLmhhcyh0LmNhY2hlS2V5KSlyZXR1cm4gdGhpcy5mb250Q2FjaGUuZ2V0KHQuY2FjaGVLZXkpO2NvbnN0IHU9KDAsci5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtsZXQgZDt0cnl7ZD10aGlzLnByZUV2YWx1YXRlRm9udCh0KTtkLmNzc0ZvbnRJbmZvPWN9Y2F0Y2goZSl7KDAsci53YXJuKShgbG9hZEZvbnQgLSBwcmVFdmFsdWF0ZUZvbnQgZmFpbGVkOiAiJHtlfSIuYCk7cmV0dXJuIGVycm9yRm9udCgpfWNvbnN0e2Rlc2NyaXB0b3I6ZixoYXNoOmd9PWQscD1oIGluc3RhbmNlb2YgaS5SZWY7bGV0IG07cCYmKG09YGYke2gudG9TdHJpbmcoKX1gKTtpZihnJiZmIGluc3RhbmNlb2YgaS5EaWN0KXtmLmZvbnRBbGlhc2VzfHwoZi5mb250QWxpYXNlcz1PYmplY3QuY3JlYXRlKG51bGwpKTtjb25zdCBlPWYuZm9udEFsaWFzZXM7aWYoZVtnXSl7Y29uc3QgdD1lW2ddLmFsaWFzUmVmO2lmKHAmJnQmJnRoaXMuZm9udENhY2hlLmhhcyh0KSl7dGhpcy5mb250Q2FjaGUucHV0QWxpYXMoaCx0KTtyZXR1cm4gdGhpcy5mb250Q2FjaGUuZ2V0KGgpfX1lbHNlIGVbZ109e2ZvbnRJRDp0aGlzLmlkRmFjdG9yeS5jcmVhdGVGb250SWQoKX07cCYmKGVbZ10uYWxpYXNSZWY9aCk7bT1lW2ddLmZvbnRJRH1pZihwKXRoaXMuZm9udENhY2hlLnB1dChoLHUucHJvbWlzZSk7ZWxzZXttfHwobT10aGlzLmlkRmFjdG9yeS5jcmVhdGVGb250SWQoKSk7dC5jYWNoZUtleT1gY2FjaGVLZXlfJHttfWA7dGhpcy5mb250Q2FjaGUucHV0KHQuY2FjaGVLZXksdS5wcm9taXNlKX0oMCxyLmFzc2VydCkobSYmbS5zdGFydHNXaXRoKCJmIiksJ1RoZSAiZm9udElEIiBtdXN0IGJlIChjb3JyZWN0bHkpIGRlZmluZWQuJyk7dC5sb2FkZWROYW1lPWAke3RoaXMuaWRGYWN0b3J5LmdldERvY0lkKCl9XyR7bX1gO3RoaXMudHJhbnNsYXRlRm9udChkKS50aGVuKChlPT57dm9pZCAwIT09ZS5mb250VHlwZSYmbC5zdGF0cy5hZGRGb250VHlwZShlLmZvbnRUeXBlKTt1LnJlc29sdmUobmV3IFRyYW5zbGF0ZWRGb250KHtsb2FkZWROYW1lOnQubG9hZGVkTmFtZSxmb250OmUsZGljdDp0LGV2YWx1YXRvck9wdGlvbnM6dGhpcy5vcHRpb25zfSkpfSkpLmNhdGNoKChlPT57dGhpcy5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDpyLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udFRyYW5zbGF0ZX0pOygwLHIud2FybikoYGxvYWRGb250IC0gdHJhbnNsYXRlRm9udCBmYWlsZWQ6ICIke2V9Ii5gKTt0cnl7Y29uc3QgZT1mJiZmLmdldCgiRm9udEZpbGUzIiksdD1lJiZlLmdldCgiU3VidHlwZSIpLGE9KDAsby5nZXRGb250VHlwZSkoZC50eXBlLHQmJnQubmFtZSk7dm9pZCAwIT09YSYmbC5zdGF0cy5hZGRGb250VHlwZShhKX1jYXRjaChlKXt9dS5yZXNvbHZlKG5ldyBUcmFuc2xhdGVkRm9udCh7bG9hZGVkTmFtZTp0LmxvYWRlZE5hbWUsZm9udDpuZXcgcy5FcnJvckZvbnQoZSBpbnN0YW5jZW9mIEVycm9yP2UubWVzc2FnZTplKSxkaWN0OnQsZXZhbHVhdG9yT3B0aW9uczp0aGlzLm9wdGlvbnN9KSl9KSk7cmV0dXJuIHUucHJvbWlzZX1idWlsZFBhdGgoZSx0LGEsbj0hMSl7Y29uc3QgaT1lLmxlbmd0aC0xO2F8fChhPVtdKTtpZihpPDB8fGUuZm5BcnJheVtpXSE9PXIuT1BTLmNvbnN0cnVjdFBhdGgpe2lmKG4peygwLHIud2FybikoYEVuY291bnRlcmVkIHBhdGggb3BlcmF0b3IgIiR7dH0iIGluc2lkZSBvZiBhIHRleHQgb2JqZWN0LmApO2UuYWRkT3Aoci5PUFMuc2F2ZSxudWxsKX1sZXQgaTtzd2l0Y2godCl7Y2FzZSByLk9QUy5yZWN0YW5nbGU6Y29uc3QgZT1hWzBdK2FbMl0sdD1hWzFdK2FbM107aT1bTWF0aC5taW4oYVswXSxlKSxNYXRoLm1heChhWzBdLGUpLE1hdGgubWluKGFbMV0sdCksTWF0aC5tYXgoYVsxXSx0KV07YnJlYWs7Y2FzZSByLk9QUy5tb3ZlVG86Y2FzZSByLk9QUy5saW5lVG86aT1bYVswXSxhWzBdLGFbMV0sYVsxXV07YnJlYWs7ZGVmYXVsdDppPVsxLzAsLTEvMCwxLzAsLTEvMF19ZS5hZGRPcChyLk9QUy5jb25zdHJ1Y3RQYXRoLFtbdF0sYSxpXSk7biYmZS5hZGRPcChyLk9QUy5yZXN0b3JlLG51bGwpfWVsc2V7Y29uc3Qgbj1lLmFyZ3NBcnJheVtpXTtuWzBdLnB1c2godCk7blsxXS5wdXNoKC4uLmEpO2NvbnN0IHM9blsyXTtzd2l0Y2godCl7Y2FzZSByLk9QUy5yZWN0YW5nbGU6Y29uc3QgZT1hWzBdK2FbMl0sdD1hWzFdK2FbM107c1swXT1NYXRoLm1pbihzWzBdLGFbMF0sZSk7c1sxXT1NYXRoLm1heChzWzFdLGFbMF0sZSk7c1syXT1NYXRoLm1pbihzWzJdLGFbMV0sdCk7c1szXT1NYXRoLm1heChzWzNdLGFbMV0sdCk7YnJlYWs7Y2FzZSByLk9QUy5tb3ZlVG86Y2FzZSByLk9QUy5saW5lVG86c1swXT1NYXRoLm1pbihzWzBdLGFbMF0pO3NbMV09TWF0aC5tYXgoc1sxXSxhWzBdKTtzWzJdPU1hdGgubWluKHNbMl0sYVsxXSk7c1szXT1NYXRoLm1heChzWzNdLGFbMV0pfX19cGFyc2VDb2xvclNwYWNlKHtjczplLHJlc291cmNlczp0LGxvY2FsQ29sb3JTcGFjZUNhY2hlOmF9KXtyZXR1cm4gUy5Db2xvclNwYWNlLnBhcnNlQXN5bmMoe2NzOmUseHJlZjp0aGlzLnhyZWYscmVzb3VyY2VzOnQscGRmRnVuY3Rpb25GYWN0b3J5OnRoaXMuX3BkZkZ1bmN0aW9uRmFjdG9yeSxsb2NhbENvbG9yU3BhY2VDYWNoZTphfSkuY2F0Y2goKGU9PntpZihlIGluc3RhbmNlb2Ygci5BYm9ydEV4Y2VwdGlvbilyZXR1cm4gbnVsbDtpZih0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXt0aGlzLmhhbmRsZXIuc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOnIuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JDb2xvclNwYWNlfSk7KDAsci53YXJuKShgcGFyc2VDb2xvclNwYWNlIC0gaWdub3JpbmcgQ29sb3JTcGFjZTogIiR7ZX0iLmApO3JldHVybiBudWxsfXRocm93IGV9KSl9cGFyc2VTaGFkaW5nKHtzaGFkaW5nOmUscmVzb3VyY2VzOnQsbG9jYWxDb2xvclNwYWNlQ2FjaGU6YSxsb2NhbFNoYWRpbmdQYXR0ZXJuQ2FjaGU6cn0pe2xldCBuPXIuZ2V0KGUpO2lmKCFuKXtjb25zdCBpPXUuUGF0dGVybi5wYXJzZVNoYWRpbmcoZSx0aGlzLnhyZWYsdCx0aGlzLmhhbmRsZXIsdGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LGEpLmdldElSKCk7bj1gcGF0dGVybl8ke3RoaXMuaWRGYWN0b3J5LmNyZWF0ZU9iaklkKCl9YDtyLnNldChlLG4pO3RoaXMuaGFuZGxlci5zZW5kKCJvYmoiLFtuLHRoaXMucGFnZUluZGV4LCJQYXR0ZXJuIixpXSl9cmV0dXJuIG59aGFuZGxlQ29sb3JOKGUsdCxhLG4scyxvLGMsbCxoLGQpe2NvbnN0IGY9YS5wb3AoKTtpZihmIGluc3RhbmNlb2YgaS5OYW1lKXtjb25zdCBnPXMuZ2V0UmF3KGYubmFtZSkscD1nIGluc3RhbmNlb2YgaS5SZWYmJmguZ2V0QnlSZWYoZyk7aWYocCl0cnl7Y29uc3Qgcj1uLmJhc2U/bi5iYXNlLmdldFJnYihhLDApOm51bGwsaT0oMCx1LmdldFRpbGluZ1BhdHRlcm5JUikocC5vcGVyYXRvckxpc3RJUixwLmRpY3Qscik7ZS5hZGRPcCh0LGkpO3JldHVybn1jYXRjaChlKXt9Y29uc3QgbT10aGlzLnhyZWYuZmV0Y2hJZlJlZihnKTtpZihtKXtjb25zdCBpPW0gaW5zdGFuY2VvZiB5LkJhc2VTdHJlYW0/bS5kaWN0Om0scz1pLmdldCgiUGF0dGVyblR5cGUiKTtpZihzPT09RSl7Y29uc3Qgcj1uLmJhc2U/bi5iYXNlLmdldFJnYihhLDApOm51bGw7cmV0dXJuIHRoaXMuaGFuZGxlVGlsaW5nVHlwZSh0LHIsbyxtLGksZSxjLGgpfWlmKHM9PT1EKXtjb25zdCBhPWkuZ2V0KCJTaGFkaW5nIikscj1pLmdldEFycmF5KCJNYXRyaXgiKSxuPXRoaXMucGFyc2VTaGFkaW5nKHtzaGFkaW5nOmEscmVzb3VyY2VzOm8sbG9jYWxDb2xvclNwYWNlQ2FjaGU6bCxsb2NhbFNoYWRpbmdQYXR0ZXJuQ2FjaGU6ZH0pO2UuYWRkT3AodCxbIlNoYWRpbmciLG4scl0pO3JldHVybn10aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgVW5rbm93biBQYXR0ZXJuVHlwZTogJHtzfWApfX10aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgVW5rbm93biBQYXR0ZXJuTmFtZTogJHtmfWApfV9wYXJzZVZpc2liaWxpdHlFeHByZXNzaW9uKGUsdCxhKXtpZigrK3Q+MTApeygwLHIud2FybikoIlZpc2liaWxpdHkgZXhwcmVzc2lvbiBpcyB0b28gZGVlcGx5IG5lc3RlZCIpO3JldHVybn1jb25zdCBuPWUubGVuZ3RoLHM9dGhpcy54cmVmLmZldGNoSWZSZWYoZVswXSk7aWYoIShuPDIpJiZzIGluc3RhbmNlb2YgaS5OYW1lKXtzd2l0Y2gocy5uYW1lKXtjYXNlIkFuZCI6Y2FzZSJPciI6Y2FzZSJOb3QiOmEucHVzaChzLm5hbWUpO2JyZWFrO2RlZmF1bHQ6KDAsci53YXJuKShgSW52YWxpZCBvcGVyYXRvciAke3MubmFtZX0gaW4gdmlzaWJpbGl0eSBleHByZXNzaW9uYCk7cmV0dXJufWZvcihsZXQgcj0xO3I8bjtyKyspe2NvbnN0IG49ZVtyXSxzPXRoaXMueHJlZi5mZXRjaElmUmVmKG4pO2lmKEFycmF5LmlzQXJyYXkocykpe2NvbnN0IGU9W107YS5wdXNoKGUpO3RoaXMuX3BhcnNlVmlzaWJpbGl0eUV4cHJlc3Npb24ocyx0LGUpfWVsc2UgbiBpbnN0YW5jZW9mIGkuUmVmJiZhLnB1c2gobi50b1N0cmluZygpKX19ZWxzZSgwLHIud2FybikoIkludmFsaWQgdmlzaWJpbGl0eSBleHByZXNzaW9uIil9YXN5bmMgcGFyc2VNYXJrZWRDb250ZW50UHJvcHMoZSx0KXtsZXQgYTtpZihlIGluc3RhbmNlb2YgaS5OYW1lKXthPXQuZ2V0KCJQcm9wZXJ0aWVzIikuZ2V0KGUubmFtZSl9ZWxzZXtpZighKGUgaW5zdGFuY2VvZiBpLkRpY3QpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJPcHRpb25hbCBjb250ZW50IHByb3BlcnRpZXMgbWFsZm9ybWVkLiIpO2E9ZX1jb25zdCBuPWEuZ2V0KCJUeXBlIikubmFtZTtpZigiT0NHIj09PW4pcmV0dXJue3R5cGU6bixpZDphLm9iaklkfTtpZigiT0NNRCI9PT1uKXtjb25zdCBlPWEuZ2V0KCJWRSIpO2lmKEFycmF5LmlzQXJyYXkoZSkpe2NvbnN0IHQ9W107dGhpcy5fcGFyc2VWaXNpYmlsaXR5RXhwcmVzc2lvbihlLDAsdCk7aWYodC5sZW5ndGg+MClyZXR1cm57dHlwZToiT0NNRCIsZXhwcmVzc2lvbjp0fX1jb25zdCB0PWEuZ2V0KCJPQ0dzIik7aWYoQXJyYXkuaXNBcnJheSh0KXx8dCBpbnN0YW5jZW9mIGkuRGljdCl7Y29uc3QgZT1bXTtpZihBcnJheS5pc0FycmF5KHQpKWZvcihjb25zdCBhIG9mIHQpZS5wdXNoKGEudG9TdHJpbmcoKSk7ZWxzZSBlLnB1c2godC5vYmpJZCk7cmV0dXJue3R5cGU6bixpZHM6ZSxwb2xpY3k6YS5nZXQoIlAiKWluc3RhbmNlb2YgaS5OYW1lP2EuZ2V0KCJQIikubmFtZTpudWxsLGV4cHJlc3Npb246bnVsbH19aWYodCBpbnN0YW5jZW9mIGkuUmVmKXJldHVybnt0eXBlOm4saWQ6dC50b1N0cmluZygpfX1yZXR1cm4gbnVsbH1nZXRPcGVyYXRvckxpc3Qoe3N0cmVhbTplLHRhc2s6dCxyZXNvdXJjZXM6YSxvcGVyYXRvckxpc3Q6bixpbml0aWFsU3RhdGU6cz1udWxsLGZhbGxiYWNrRm9udERpY3Q6bz1udWxsfSl7YT1hfHxpLkRpY3QuZW1wdHk7cz1zfHxuZXcgRXZhbFN0YXRlO2lmKCFuKXRocm93IG5ldyBFcnJvcignZ2V0T3BlcmF0b3JMaXN0OiBtaXNzaW5nICJvcGVyYXRvckxpc3QiIHBhcmFtZXRlcicpO2NvbnN0IGM9dGhpcyxsPXRoaXMueHJlZjtsZXQgaD0hMTtjb25zdCB1PW5ldyBtLkxvY2FsSW1hZ2VDYWNoZSxkPW5ldyBtLkxvY2FsQ29sb3JTcGFjZUNhY2hlLGY9bmV3IG0uTG9jYWxHU3RhdGVDYWNoZSxnPW5ldyBtLkxvY2FsVGlsaW5nUGF0dGVybkNhY2hlLHA9bmV3IE1hcCxiPWEuZ2V0KCJYT2JqZWN0Iil8fGkuRGljdC5lbXB0eSx3PWEuZ2V0KCJQYXR0ZXJuIil8fGkuRGljdC5lbXB0eSx4PW5ldyBTdGF0ZU1hbmFnZXIocyksaz1uZXcgRXZhbHVhdG9yUHJlcHJvY2Vzc29yKGUsbCx4KSxDPW5ldyBUaW1lU2xvdE1hbmFnZXI7ZnVuY3Rpb24gY2xvc2VQZW5kaW5nUmVzdG9yZU9QUyhlKXtmb3IobGV0IGU9MCx0PWsuc2F2ZWRTdGF0ZXNEZXB0aDtlPHQ7ZSsrKW4uYWRkT3Aoci5PUFMucmVzdG9yZSxbXSl9cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbiBwcm9taXNlQm9keShlLHMpe2NvbnN0IG5leHQ9ZnVuY3Rpb24odCl7UHJvbWlzZS5hbGwoW3Qsbi5yZWFkeV0pLnRoZW4oKGZ1bmN0aW9uKCl7dHJ5e3Byb21pc2VCb2R5KGUscyl9Y2F0Y2goZSl7cyhlKX19KSxzKX07dC5lbnN1cmVOb3RUZXJtaW5hdGVkKCk7Qy5yZXNldCgpO2NvbnN0IG09e307bGV0IHYsRixPLFQsTSxFO2Zvcig7ISh2PUMuY2hlY2soKSk7KXttLmFyZ3M9bnVsbDtpZighay5yZWFkKG0pKWJyZWFrO2xldCBlPW0uYXJncyxzPW0uZm47c3dpdGNoKDB8cyl7Y2FzZSByLk9QUy5wYWludFhPYmplY3Q6RT1lWzBdaW5zdGFuY2VvZiBpLk5hbWU7TT1lWzBdLm5hbWU7aWYoRSl7Y29uc3QgdD11LmdldEJ5TmFtZShNKTtpZih0KXtuLmFkZEltYWdlT3BzKHQuZm4sdC5hcmdzLHQub3B0aW9uYWxDb250ZW50KTtpbmNyZW1lbnRDYWNoZWRJbWFnZU1hc2tDb3VudCh0KTtlPW51bGw7Y29udGludWV9fW5leHQobmV3IFByb21pc2UoKGZ1bmN0aW9uKGUscyl7aWYoIUUpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIlhPYmplY3QgbXVzdCBiZSByZWZlcnJlZCB0byBieSBuYW1lLiIpO2xldCBvPWIuZ2V0UmF3KE0pO2lmKG8gaW5zdGFuY2VvZiBpLlJlZil7Y29uc3QgdD11LmdldEJ5UmVmKG8pO2lmKHQpe24uYWRkSW1hZ2VPcHModC5mbix0LmFyZ3MsdC5vcHRpb25hbENvbnRlbnQpO2luY3JlbWVudENhY2hlZEltYWdlTWFza0NvdW50KHQpO2UoKTtyZXR1cm59Y29uc3QgYT1jLmdsb2JhbEltYWdlQ2FjaGUuZ2V0RGF0YShvLGMucGFnZUluZGV4KTtpZihhKXtuLmFkZERlcGVuZGVuY3koYS5vYmpJZCk7bi5hZGRJbWFnZU9wcyhhLmZuLGEuYXJncyxhLm9wdGlvbmFsQ29udGVudCk7ZSgpO3JldHVybn1vPWwuZmV0Y2gobyl9aWYoIShvIGluc3RhbmNlb2YgeS5CYXNlU3RyZWFtKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiWE9iamVjdCBzaG91bGQgYmUgYSBzdHJlYW0iKTtjb25zdCBoPW8uZGljdC5nZXQoIlN1YnR5cGUiKTtpZighKGggaW5zdGFuY2VvZiBpLk5hbWUpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJYT2JqZWN0IHNob3VsZCBoYXZlIGEgTmFtZSBzdWJ0eXBlIik7aWYoIkZvcm0iIT09aC5uYW1lKWlmKCJJbWFnZSIhPT1oLm5hbWUpe2lmKCJQUyIhPT1oLm5hbWUpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYFVuaGFuZGxlZCBYT2JqZWN0IHN1YnR5cGUgJHtoLm5hbWV9YCk7KDAsci5pbmZvKSgiSWdub3JlZCBYT2JqZWN0IHN1YnR5cGUgUFMiKTtlKCl9ZWxzZSBjLmJ1aWxkUGFpbnRJbWFnZVhPYmplY3Qoe3Jlc291cmNlczphLGltYWdlOm8sb3BlcmF0b3JMaXN0Om4sY2FjaGVLZXk6TSxsb2NhbEltYWdlQ2FjaGU6dSxsb2NhbENvbG9yU3BhY2VDYWNoZTpkfSkudGhlbihlLHMpO2Vsc2V7eC5zYXZlKCk7Yy5idWlsZEZvcm1YT2JqZWN0KGEsbyxudWxsLG4sdCx4LnN0YXRlLmNsb25lKCksZCkudGhlbigoZnVuY3Rpb24oKXt4LnJlc3RvcmUoKTtlKCl9KSxzKX19KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIHIuQWJvcnRFeGNlcHRpb24pKXtpZighYy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlO2MuaGFuZGxlci5zZW5kKCJVbnN1cHBvcnRlZEZlYXR1cmUiLHtmZWF0dXJlSWQ6ci5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvclhPYmplY3R9KTsoMCxyLndhcm4pKGBnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBYT2JqZWN0OiAiJHtlfSIuYCl9fSkpKTtyZXR1cm47Y2FzZSByLk9QUy5zZXRGb250OnZhciBEPWVbMV07bmV4dChjLmhhbmRsZVNldEZvbnQoYSxlLG51bGwsbix0LHguc3RhdGUsbykudGhlbigoZnVuY3Rpb24oZSl7bi5hZGREZXBlbmRlbmN5KGUpO24uYWRkT3Aoci5PUFMuc2V0Rm9udCxbZSxEXSl9KSkpO3JldHVybjtjYXNlIHIuT1BTLmJlZ2luVGV4dDpoPSEwO2JyZWFrO2Nhc2Ugci5PUFMuZW5kVGV4dDpoPSExO2JyZWFrO2Nhc2Ugci5PUFMuZW5kSW5saW5lSW1hZ2U6dmFyIFI9ZVswXS5jYWNoZUtleTtpZihSKXtjb25zdCB0PXUuZ2V0QnlOYW1lKFIpO2lmKHQpe24uYWRkSW1hZ2VPcHModC5mbix0LmFyZ3MsdC5vcHRpb25hbENvbnRlbnQpO2luY3JlbWVudENhY2hlZEltYWdlTWFza0NvdW50KHQpO2U9bnVsbDtjb250aW51ZX19bmV4dChjLmJ1aWxkUGFpbnRJbWFnZVhPYmplY3Qoe3Jlc291cmNlczphLGltYWdlOmVbMF0saXNJbmxpbmU6ITAsb3BlcmF0b3JMaXN0Om4sY2FjaGVLZXk6Uixsb2NhbEltYWdlQ2FjaGU6dSxsb2NhbENvbG9yU3BhY2VDYWNoZTpkfSkpO3JldHVybjtjYXNlIHIuT1BTLnNob3dUZXh0OmlmKCF4LnN0YXRlLmZvbnQpe2MuZW5zdXJlU3RhdGVGb250KHguc3RhdGUpO2NvbnRpbnVlfWVbMF09Yy5oYW5kbGVUZXh0KGVbMF0seC5zdGF0ZSk7YnJlYWs7Y2FzZSByLk9QUy5zaG93U3BhY2VkVGV4dDppZigheC5zdGF0ZS5mb250KXtjLmVuc3VyZVN0YXRlRm9udCh4LnN0YXRlKTtjb250aW51ZX12YXIgTD1bXSxqPXguc3RhdGU7Zm9yKGNvbnN0IHQgb2YgZVswXSkic3RyaW5nIj09dHlwZW9mIHQ/TC5wdXNoKC4uLmMuaGFuZGxlVGV4dCh0LGopKToibnVtYmVyIj09dHlwZW9mIHQmJkwucHVzaCh0KTtlWzBdPUw7cz1yLk9QUy5zaG93VGV4dDticmVhaztjYXNlIHIuT1BTLm5leHRMaW5lU2hvd1RleHQ6aWYoIXguc3RhdGUuZm9udCl7Yy5lbnN1cmVTdGF0ZUZvbnQoeC5zdGF0ZSk7Y29udGludWV9bi5hZGRPcChyLk9QUy5uZXh0TGluZSk7ZVswXT1jLmhhbmRsZVRleHQoZVswXSx4LnN0YXRlKTtzPXIuT1BTLnNob3dUZXh0O2JyZWFrO2Nhc2Ugci5PUFMubmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQ6aWYoIXguc3RhdGUuZm9udCl7Yy5lbnN1cmVTdGF0ZUZvbnQoeC5zdGF0ZSk7Y29udGludWV9bi5hZGRPcChyLk9QUy5uZXh0TGluZSk7bi5hZGRPcChyLk9QUy5zZXRXb3JkU3BhY2luZyxbZS5zaGlmdCgpXSk7bi5hZGRPcChyLk9QUy5zZXRDaGFyU3BhY2luZyxbZS5zaGlmdCgpXSk7ZVswXT1jLmhhbmRsZVRleHQoZVswXSx4LnN0YXRlKTtzPXIuT1BTLnNob3dUZXh0O2JyZWFrO2Nhc2Ugci5PUFMuc2V0VGV4dFJlbmRlcmluZ01vZGU6eC5zdGF0ZS50ZXh0UmVuZGVyaW5nTW9kZT1lWzBdO2JyZWFrO2Nhc2Ugci5PUFMuc2V0RmlsbENvbG9yU3BhY2U6e2NvbnN0IHQ9Uy5Db2xvclNwYWNlLmdldENhY2hlZChlWzBdLGwsZCk7aWYodCl7eC5zdGF0ZS5maWxsQ29sb3JTcGFjZT10O2NvbnRpbnVlfW5leHQoYy5wYXJzZUNvbG9yU3BhY2Uoe2NzOmVbMF0scmVzb3VyY2VzOmEsbG9jYWxDb2xvclNwYWNlQ2FjaGU6ZH0pLnRoZW4oKGZ1bmN0aW9uKGUpe2UmJih4LnN0YXRlLmZpbGxDb2xvclNwYWNlPWUpfSkpKTtyZXR1cm59Y2FzZSByLk9QUy5zZXRTdHJva2VDb2xvclNwYWNlOntjb25zdCB0PVMuQ29sb3JTcGFjZS5nZXRDYWNoZWQoZVswXSxsLGQpO2lmKHQpe3guc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZT10O2NvbnRpbnVlfW5leHQoYy5wYXJzZUNvbG9yU3BhY2Uoe2NzOmVbMF0scmVzb3VyY2VzOmEsbG9jYWxDb2xvclNwYWNlQ2FjaGU6ZH0pLnRoZW4oKGZ1bmN0aW9uKGUpe2UmJih4LnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9ZSl9KSkpO3JldHVybn1jYXNlIHIuT1BTLnNldEZpbGxDb2xvcjpUPXguc3RhdGUuZmlsbENvbG9yU3BhY2U7ZT1ULmdldFJnYihlLDApO3M9ci5PUFMuc2V0RmlsbFJHQkNvbG9yO2JyZWFrO2Nhc2Ugci5PUFMuc2V0U3Ryb2tlQ29sb3I6VD14LnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U7ZT1ULmdldFJnYihlLDApO3M9ci5PUFMuc2V0U3Ryb2tlUkdCQ29sb3I7YnJlYWs7Y2FzZSByLk9QUy5zZXRGaWxsR3JheTp4LnN0YXRlLmZpbGxDb2xvclNwYWNlPVMuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXk7ZT1TLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5LmdldFJnYihlLDApO3M9ci5PUFMuc2V0RmlsbFJHQkNvbG9yO2JyZWFrO2Nhc2Ugci5PUFMuc2V0U3Ryb2tlR3JheTp4LnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9Uy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheTtlPVMuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiKGUsMCk7cz1yLk9QUy5zZXRTdHJva2VSR0JDb2xvcjticmVhaztjYXNlIHIuT1BTLnNldEZpbGxDTVlLQ29sb3I6eC5zdGF0ZS5maWxsQ29sb3JTcGFjZT1TLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrO2U9Uy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ay5nZXRSZ2IoZSwwKTtzPXIuT1BTLnNldEZpbGxSR0JDb2xvcjticmVhaztjYXNlIHIuT1BTLnNldFN0cm9rZUNNWUtDb2xvcjp4LnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9Uy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215aztlPVMuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWsuZ2V0UmdiKGUsMCk7cz1yLk9QUy5zZXRTdHJva2VSR0JDb2xvcjticmVhaztjYXNlIHIuT1BTLnNldEZpbGxSR0JDb2xvcjp4LnN0YXRlLmZpbGxDb2xvclNwYWNlPVMuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYjtlPVMuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYi5nZXRSZ2IoZSwwKTticmVhaztjYXNlIHIuT1BTLnNldFN0cm9rZVJHQkNvbG9yOnguc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZT1TLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2I7ZT1TLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IuZ2V0UmdiKGUsMCk7YnJlYWs7Y2FzZSByLk9QUy5zZXRGaWxsQ29sb3JOOlQ9eC5zdGF0ZS5maWxsQ29sb3JTcGFjZTtpZigiUGF0dGVybiI9PT1ULm5hbWUpe25leHQoYy5oYW5kbGVDb2xvck4obixyLk9QUy5zZXRGaWxsQ29sb3JOLGUsVCx3LGEsdCxkLGcscCkpO3JldHVybn1lPVQuZ2V0UmdiKGUsMCk7cz1yLk9QUy5zZXRGaWxsUkdCQ29sb3I7YnJlYWs7Y2FzZSByLk9QUy5zZXRTdHJva2VDb2xvck46VD14LnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U7aWYoIlBhdHRlcm4iPT09VC5uYW1lKXtuZXh0KGMuaGFuZGxlQ29sb3JOKG4sci5PUFMuc2V0U3Ryb2tlQ29sb3JOLGUsVCx3LGEsdCxkLGcscCkpO3JldHVybn1lPVQuZ2V0UmdiKGUsMCk7cz1yLk9QUy5zZXRTdHJva2VSR0JDb2xvcjticmVhaztjYXNlIHIuT1BTLnNoYWRpbmdGaWxsOnZhciAkPWEuZ2V0KCJTaGFkaW5nIik7aWYoISQpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIk5vIHNoYWRpbmcgcmVzb3VyY2UgZm91bmQiKTt2YXIgXz0kLmdldChlWzBdLm5hbWUpO2lmKCFfKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJObyBzaGFkaW5nIG9iamVjdCBmb3VuZCIpO2U9W2MucGFyc2VTaGFkaW5nKHtzaGFkaW5nOl8scmVzb3VyY2VzOmEsbG9jYWxDb2xvclNwYWNlQ2FjaGU6ZCxsb2NhbFNoYWRpbmdQYXR0ZXJuQ2FjaGU6cH0pXTtzPXIuT1BTLnNoYWRpbmdGaWxsO2JyZWFrO2Nhc2Ugci5PUFMuc2V0R1N0YXRlOkU9ZVswXWluc3RhbmNlb2YgaS5OYW1lO009ZVswXS5uYW1lO2lmKEUpe2NvbnN0IHQ9Zi5nZXRCeU5hbWUoTSk7aWYodCl7dC5sZW5ndGg+MCYmbi5hZGRPcChyLk9QUy5zZXRHU3RhdGUsW3RdKTtlPW51bGw7Y29udGludWV9fW5leHQobmV3IFByb21pc2UoKGZ1bmN0aW9uKGUscyl7aWYoIUUpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkdTdGF0ZSBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuIik7Y29uc3Qgbz1hLmdldCgiRXh0R1N0YXRlIik7aWYoIShvIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiRXh0R1N0YXRlIHNob3VsZCBiZSBhIGRpY3Rpb25hcnkuIik7Y29uc3QgbD1vLmdldChNKTtpZighKGwgaW5zdGFuY2VvZiBpLkRpY3QpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJHU3RhdGUgc2hvdWxkIGJlIGEgZGljdGlvbmFyeS4iKTtjLnNldEdTdGF0ZSh7cmVzb3VyY2VzOmEsZ1N0YXRlOmwsb3BlcmF0b3JMaXN0Om4sY2FjaGVLZXk6TSx0YXNrOnQsc3RhdGVNYW5hZ2VyOngsbG9jYWxHU3RhdGVDYWNoZTpmLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmR9KS50aGVuKGUscyl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIHIuQWJvcnRFeGNlcHRpb24pKXtpZighYy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlO2MuaGFuZGxlci5zZW5kKCJVbnN1cHBvcnRlZEZlYXR1cmUiLHtmZWF0dXJlSWQ6ci5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckV4dEdTdGF0ZX0pOygwLHIud2FybikoYGdldE9wZXJhdG9yTGlzdCAtIGlnbm9yaW5nIEV4dEdTdGF0ZTogIiR7ZX0iLmApfX0pKSk7cmV0dXJuO2Nhc2Ugci5PUFMubW92ZVRvOmNhc2Ugci5PUFMubGluZVRvOmNhc2Ugci5PUFMuY3VydmVUbzpjYXNlIHIuT1BTLmN1cnZlVG8yOmNhc2Ugci5PUFMuY3VydmVUbzM6Y2FzZSByLk9QUy5jbG9zZVBhdGg6Y2FzZSByLk9QUy5yZWN0YW5nbGU6Yy5idWlsZFBhdGgobixzLGUsaCk7Y29udGludWU7Y2FzZSByLk9QUy5tYXJrUG9pbnQ6Y2FzZSByLk9QUy5tYXJrUG9pbnRQcm9wczpjYXNlIHIuT1BTLmJlZ2luQ29tcGF0OmNhc2Ugci5PUFMuZW5kQ29tcGF0OmNvbnRpbnVlO2Nhc2Ugci5PUFMuYmVnaW5NYXJrZWRDb250ZW50UHJvcHM6aWYoIShlWzBdaW5zdGFuY2VvZiBpLk5hbWUpKXsoMCxyLndhcm4pKGBFeHBlY3RlZCBuYW1lIGZvciBiZWdpbk1hcmtlZENvbnRlbnRQcm9wcyBhcmcwPSR7ZVswXX1gKTtjb250aW51ZX1pZigiT0MiPT09ZVswXS5uYW1lKXtuZXh0KGMucGFyc2VNYXJrZWRDb250ZW50UHJvcHMoZVsxXSxhKS50aGVuKChlPT57bi5hZGRPcChyLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wcyxbIk9DIixlXSl9KSkuY2F0Y2goKGU9PntpZighKGUgaW5zdGFuY2VvZiByLkFib3J0RXhjZXB0aW9uKSl7aWYoIWMub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTtjLmhhbmRsZXIuc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOnIuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JNYXJrZWRDb250ZW50fSk7KDAsci53YXJuKShgZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3JpbmcgYmVnaW5NYXJrZWRDb250ZW50UHJvcHM6ICIke2V9Ii5gKX19KSkpO3JldHVybn1lPVtlWzBdLm5hbWUsZVsxXWluc3RhbmNlb2YgaS5EaWN0P2VbMV0uZ2V0KCJNQ0lEIik6bnVsbF07YnJlYWs7Y2FzZSByLk9QUy5iZWdpbk1hcmtlZENvbnRlbnQ6Y2FzZSByLk9QUy5lbmRNYXJrZWRDb250ZW50OmRlZmF1bHQ6aWYobnVsbCE9PWUpe2ZvcihGPTAsTz1lLmxlbmd0aDtGPE8mJiEoZVtGXWluc3RhbmNlb2YgaS5EaWN0KTtGKyspO2lmKEY8Tyl7KDAsci53YXJuKSgiZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3Jpbmcgb3BlcmF0b3I6ICIrcyk7Y29udGludWV9fX1uLmFkZE9wKHMsZSl9aWYodiluZXh0KE4pO2Vsc2V7Y2xvc2VQZW5kaW5nUmVzdG9yZU9QUygpO2UoKX19KSkuY2F0Y2goKGU9PntpZighKGUgaW5zdGFuY2VvZiByLkFib3J0RXhjZXB0aW9uKSl7aWYoIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTt0aGlzLmhhbmRsZXIuc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOnIuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JPcGVyYXRvckxpc3R9KTsoMCxyLndhcm4pKGBnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBlcnJvcnMgZHVyaW5nICIke3QubmFtZX0iIHRhc2s6ICIke2V9Ii5gKTtjbG9zZVBlbmRpbmdSZXN0b3JlT1BTKCl9fSkpfWdldFRleHRDb250ZW50KHtzdHJlYW06ZSx0YXNrOnQscmVzb3VyY2VzOmEsc3RhdGVNYW5hZ2VyOm49bnVsbCxjb21iaW5lVGV4dEl0ZW1zOnM9ITEsaW5jbHVkZU1hcmtlZENvbnRlbnQ6bz0hMSxzaW5rOmMsc2VlblN0eWxlczpsPW5ldyBTZXQsdmlld0JveDp1LG1hcmtlZENvbnRlbnREYXRhOmQ9bnVsbH0pe2E9YXx8aS5EaWN0LmVtcHR5O249bnx8bmV3IFN0YXRlTWFuYWdlcihuZXcgVGV4dFN0YXRlKTtvJiYoZD1kfHx7bGV2ZWw6MH0pO2NvbnN0IGY9KDAsaC5nZXROb3JtYWxpemVkVW5pY29kZXMpKCksZz17aXRlbXM6W10sc3R5bGVzOk9iamVjdC5jcmVhdGUobnVsbCl9LHA9e2luaXRpYWxpemVkOiExLHN0cjpbXSx0b3RhbFdpZHRoOjAsdG90YWxIZWlnaHQ6MCx3aWR0aDowLGhlaWdodDowLHZlcnRpY2FsOiExLHByZXZUcmFuc2Zvcm06bnVsbCx0ZXh0QWR2YW5jZVNjYWxlOjAsc3BhY2VJbkZsb3dNaW46MCxzcGFjZUluRmxvd01heDowLHRyYWNraW5nU3BhY2VNaW46MS8wLG5lZ2F0aXZlU3BhY2VNYXg6LTEvMCxub3RBU3BhY2U6LTEvMCx0cmFuc2Zvcm06bnVsbCxmb250TmFtZTpudWxsLGhhc0VPTDohMX0sYj1bIiAiLCIgIl07bGV0IFM9MDtmdW5jdGlvbiBzYXZlTGFzdENoYXIoZSl7Y29uc3QgdD0oUysxKSUyLGE9IiAiIT09YltTXSYmIiAiPT09Ylt0XTtiW1NdPWU7Uz10O3JldHVybiBhfWZ1bmN0aW9uIHJlc2V0TGFzdENoYXJzKCl7YlswXT1iWzFdPSIgIjtTPTB9Y29uc3QgeD10aGlzLGs9dGhpcy54cmVmLEM9W107bGV0IHY9bnVsbDtjb25zdCBGPW5ldyBtLkxvY2FsSW1hZ2VDYWNoZSxPPW5ldyBtLkxvY2FsR1N0YXRlQ2FjaGUsVD1uZXcgRXZhbHVhdG9yUHJlcHJvY2Vzc29yKGUsayxuKTtsZXQgTTtmdW5jdGlvbiBnZXRDdXJyZW50VGV4dFRyYW5zZm9ybSgpe2NvbnN0IGU9TS5mb250LHQ9W00uZm9udFNpemUqTS50ZXh0SFNjYWxlLDAsMCxNLmZvbnRTaXplLDAsTS50ZXh0UmlzZV07aWYoZS5pc1R5cGUzRm9udCYmKE0uZm9udFNpemU8PTF8fGUuaXNDaGFyQkJveCkmJiEoMCxyLmlzQXJyYXlFcXVhbCkoTS5mb250TWF0cml4LHIuRk9OVF9JREVOVElUWV9NQVRSSVgpKXtjb25zdCBhPWUuYmJveFszXS1lLmJib3hbMV07YT4wJiYodFszXSo9YSpNLmZvbnRNYXRyaXhbM10pfXJldHVybiByLlV0aWwudHJhbnNmb3JtKE0uY3RtLHIuVXRpbC50cmFuc2Zvcm0oTS50ZXh0TWF0cml4LHQpKX1mdW5jdGlvbiBlbnN1cmVUZXh0Q29udGVudEl0ZW0oKXtpZihwLmluaXRpYWxpemVkKXJldHVybiBwO2NvbnN0IGU9TS5mb250LHQ9ZS5sb2FkZWROYW1lO2lmKCFsLmhhcyh0KSl7bC5hZGQodCk7Zy5zdHlsZXNbdF09e2ZvbnRGYW1pbHk6ZS5mYWxsYmFja05hbWUsYXNjZW50OmUuYXNjZW50LGRlc2NlbnQ6ZS5kZXNjZW50LHZlcnRpY2FsOmUudmVydGljYWx9fXAuZm9udE5hbWU9dDtjb25zdCBhPXAudHJhbnNmb3JtPWdldEN1cnJlbnRUZXh0VHJhbnNmb3JtKCk7aWYoZS52ZXJ0aWNhbCl7cC53aWR0aD1wLnRvdGFsV2lkdGg9TWF0aC5oeXBvdChhWzBdLGFbMV0pO3AuaGVpZ2h0PXAudG90YWxIZWlnaHQ9MDtwLnZlcnRpY2FsPSEwfWVsc2V7cC53aWR0aD1wLnRvdGFsV2lkdGg9MDtwLmhlaWdodD1wLnRvdGFsSGVpZ2h0PU1hdGguaHlwb3QoYVsyXSxhWzNdKTtwLnZlcnRpY2FsPSExfWNvbnN0IHI9TWF0aC5oeXBvdChNLnRleHRMaW5lTWF0cml4WzBdLE0udGV4dExpbmVNYXRyaXhbMV0pLG49TWF0aC5oeXBvdChNLmN0bVswXSxNLmN0bVsxXSk7cC50ZXh0QWR2YW5jZVNjYWxlPW4qcjtwLnRyYWNraW5nU3BhY2VNaW49LjEqTS5mb250U2l6ZTtwLm5vdEFTcGFjZT0uMDMqTS5mb250U2l6ZTtwLm5lZ2F0aXZlU3BhY2VNYXg9LS4yKk0uZm9udFNpemU7cC5zcGFjZUluRmxvd01pbj0uMSpNLmZvbnRTaXplO3Auc3BhY2VJbkZsb3dNYXg9LjYqTS5mb250U2l6ZTtwLmhhc0VPTD0hMTtwLmluaXRpYWxpemVkPSEwO3JldHVybiBwfWZ1bmN0aW9uIHVwZGF0ZUFkdmFuY2VTY2FsZSgpe2lmKCFwLmluaXRpYWxpemVkKXJldHVybjtjb25zdCBlPU1hdGguaHlwb3QoTS50ZXh0TGluZU1hdHJpeFswXSxNLnRleHRMaW5lTWF0cml4WzFdKSx0PU1hdGguaHlwb3QoTS5jdG1bMF0sTS5jdG1bMV0pKmU7aWYodCE9PXAudGV4dEFkdmFuY2VTY2FsZSl7aWYocC52ZXJ0aWNhbCl7cC50b3RhbEhlaWdodCs9cC5oZWlnaHQqcC50ZXh0QWR2YW5jZVNjYWxlO3AuaGVpZ2h0PTB9ZWxzZXtwLnRvdGFsV2lkdGgrPXAud2lkdGgqcC50ZXh0QWR2YW5jZVNjYWxlO3Aud2lkdGg9MH1wLnRleHRBZHZhbmNlU2NhbGU9dH19ZnVuY3Rpb24gaGFuZGxlU2V0Rm9udChlLG4pe3JldHVybiB4LmxvYWRGb250KGUsbixhKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5mb250LmlzVHlwZTNGb250P2UubG9hZFR5cGUzRGF0YSh4LGEsdCkuY2F0Y2goKGZ1bmN0aW9uKCl7fSkpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIGV9KSk6ZX0pKS50aGVuKChmdW5jdGlvbihlKXtNLmZvbnQ9ZS5mb250O00uZm9udE1hdHJpeD1lLmZvbnQuZm9udE1hdHJpeHx8ci5GT05UX0lERU5USVRZX01BVFJJWH0pKX1mdW5jdGlvbiBhcHBseUludmVyc2VSb3RhdGlvbihlLHQsYSl7Y29uc3Qgcj1NYXRoLmh5cG90KGFbMF0sYVsxXSk7cmV0dXJuWyhhWzBdKmUrYVsxXSp0KS9yLChhWzJdKmUrYVszXSp0KS9yXX1mdW5jdGlvbiBjb21wYXJlV2l0aExhc3RQb3NpdGlvbigpe2NvbnN0IGU9Z2V0Q3VycmVudFRleHRUcmFuc2Zvcm0oKTtsZXQgdD1lWzRdLGE9ZVs1XTtjb25zdCByPXQtdVswXSxuPWEtdVsxXTtpZihyPDB8fHI+dVsyXXx8bjwwfHxuPnVbM10pcmV0dXJuITE7aWYoIXN8fCFNLmZvbnR8fCFwLnByZXZUcmFuc2Zvcm0pcmV0dXJuITA7bGV0IGk9cC5wcmV2VHJhbnNmb3JtWzRdLG89cC5wcmV2VHJhbnNmb3JtWzVdO2lmKGk9PT10JiZvPT09YSlyZXR1cm4hMDtsZXQgYz0tMTtlWzBdJiYwPT09ZVsxXSYmMD09PWVbMl0/Yz1lWzBdPjA/MDoxODA6ZVsxXSYmMD09PWVbMF0mJjA9PT1lWzNdJiYoYz1lWzFdPjA/OTA6MjcwKTtzd2l0Y2goYyl7Y2FzZSAwOmJyZWFrO2Nhc2UgOTA6W3QsYV09W2EsdF07W2ksb109W28saV07YnJlYWs7Y2FzZSAxODA6W3QsYSxpLG9dPVstdCwtYSwtaSwtb107YnJlYWs7Y2FzZSAyNzA6W3QsYV09Wy1hLC10XTtbaSxvXT1bLW8sLWldO2JyZWFrO2RlZmF1bHQ6W3QsYV09YXBwbHlJbnZlcnNlUm90YXRpb24odCxhLGUpO1tpLG9dPWFwcGx5SW52ZXJzZVJvdGF0aW9uKGksbyxwLnByZXZUcmFuc2Zvcm0pfWlmKE0uZm9udC52ZXJ0aWNhbCl7Y29uc3QgZT0oby1hKS9wLnRleHRBZHZhbmNlU2NhbGUscj10LWksbj1NYXRoLnNpZ24ocC5oZWlnaHQpO2lmKGU8bipwLm5lZ2F0aXZlU3BhY2VNYXgpe2lmKE1hdGguYWJzKHIpPi41KnAud2lkdGgpe2FwcGVuZEVPTCgpO3JldHVybiEwfXJlc2V0TGFzdENoYXJzKCk7Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtyZXR1cm4hMH1pZihNYXRoLmFicyhyKT5wLndpZHRoKXthcHBlbmRFT0woKTtyZXR1cm4hMH1lPD1uKnAubm90QVNwYWNlJiZyZXNldExhc3RDaGFycygpO2lmKGU8PW4qcC50cmFja2luZ1NwYWNlTWluKXAuaGVpZ2h0Kz1lO2Vsc2UgaWYoIWFkZEZha2VTcGFjZXMoZSxwLnByZXZUcmFuc2Zvcm0sbikpaWYoMD09PXAuc3RyLmxlbmd0aCl7cmVzZXRMYXN0Q2hhcnMoKTtnLml0ZW1zLnB1c2goe3N0cjoiICIsZGlyOiJsdHIiLHdpZHRoOjAsaGVpZ2h0Ok1hdGguYWJzKGUpLHRyYW5zZm9ybTpwLnByZXZUcmFuc2Zvcm0sZm9udE5hbWU6cC5mb250TmFtZSxoYXNFT0w6ITF9KX1lbHNlIHAuaGVpZ2h0Kz1lO3JldHVybiEwfWNvbnN0IGw9KHQtaSkvcC50ZXh0QWR2YW5jZVNjYWxlLGg9YS1vLGQ9TWF0aC5zaWduKHAud2lkdGgpO2lmKGw8ZCpwLm5lZ2F0aXZlU3BhY2VNYXgpe2lmKE1hdGguYWJzKGgpPi41KnAuaGVpZ2h0KXthcHBlbmRFT0woKTtyZXR1cm4hMH1yZXNldExhc3RDaGFycygpO2ZsdXNoVGV4dENvbnRlbnRJdGVtKCk7cmV0dXJuITB9aWYoTWF0aC5hYnMoaCk+cC5oZWlnaHQpe2FwcGVuZEVPTCgpO3JldHVybiEwfWw8PWQqcC5ub3RBU3BhY2UmJnJlc2V0TGFzdENoYXJzKCk7aWYobDw9ZCpwLnRyYWNraW5nU3BhY2VNaW4pcC53aWR0aCs9bDtlbHNlIGlmKCFhZGRGYWtlU3BhY2VzKGwscC5wcmV2VHJhbnNmb3JtLGQpKWlmKDA9PT1wLnN0ci5sZW5ndGgpe3Jlc2V0TGFzdENoYXJzKCk7Zy5pdGVtcy5wdXNoKHtzdHI6IiAiLGRpcjoibHRyIix3aWR0aDpNYXRoLmFicyhsKSxoZWlnaHQ6MCx0cmFuc2Zvcm06cC5wcmV2VHJhbnNmb3JtLGZvbnROYW1lOnAuZm9udE5hbWUsaGFzRU9MOiExfSl9ZWxzZSBwLndpZHRoKz1sO3JldHVybiEwfWZ1bmN0aW9uIGJ1aWxkVGV4dENvbnRlbnRJdGVtKHtjaGFyczplLGV4dHJhU3BhY2luZzp0fSl7Y29uc3QgYT1NLmZvbnQ7aWYoIWUpe2NvbnN0IGU9TS5jaGFyU3BhY2luZyt0O2UmJihhLnZlcnRpY2FsP00udHJhbnNsYXRlVGV4dE1hdHJpeCgwLC1lKTpNLnRyYW5zbGF0ZVRleHRNYXRyaXgoZSpNLnRleHRIU2NhbGUsMCkpO3JldHVybn1jb25zdCByPWEuY2hhcnNUb0dseXBocyhlKSxuPU0uZm9udE1hdHJpeFswXSpNLmZvbnRTaXplO2ZvcihsZXQgZT0wLGk9ci5sZW5ndGg7ZTxpO2UrKyl7Y29uc3Qgcz1yW2VdO2lmKHMuaXNJbnZpc2libGVGb3JtYXRNYXJrKWNvbnRpbnVlO2xldCBvPU0uY2hhclNwYWNpbmcrKGUrMT09PWk/dDowKSxjPXMud2lkdGg7YS52ZXJ0aWNhbCYmKGM9cy52bWV0cmljP3Mudm1ldHJpY1swXTotYyk7bGV0IGw9YypuO2lmKHMuaXNXaGl0ZXNwYWNlKXtpZihhLnZlcnRpY2FsKXtvKz0tbCtNLndvcmRTcGFjaW5nO00udHJhbnNsYXRlVGV4dE1hdHJpeCgwLC1vKX1lbHNle28rPWwrTS53b3JkU3BhY2luZztNLnRyYW5zbGF0ZVRleHRNYXRyaXgobypNLnRleHRIU2NhbGUsMCl9c2F2ZUxhc3RDaGFyKCIgIik7Y29udGludWV9aWYoIWNvbXBhcmVXaXRoTGFzdFBvc2l0aW9uKCkpY29udGludWU7Y29uc3QgdT1lbnN1cmVUZXh0Q29udGVudEl0ZW0oKTtzLmlzWmVyb1dpZHRoRGlhY3JpdGljJiYobD0wKTtpZihhLnZlcnRpY2FsKXtNLnRyYW5zbGF0ZVRleHRNYXRyaXgoMCxsKTtsPU1hdGguYWJzKGwpO3UuaGVpZ2h0Kz1sfWVsc2V7bCo9TS50ZXh0SFNjYWxlO00udHJhbnNsYXRlVGV4dE1hdHJpeChsLDApO3Uud2lkdGgrPWx9bCYmKHUucHJldlRyYW5zZm9ybT1nZXRDdXJyZW50VGV4dFRyYW5zZm9ybSgpKTtsZXQgZD1zLnVuaWNvZGU7ZD1mW2RdfHxkO2Q9KDAsaC5yZXZlcnNlSWZSdGwpKGQpO3NhdmVMYXN0Q2hhcihkKSYmdS5zdHIucHVzaCgiICIpO3Uuc3RyLnB1c2goZCk7byYmKGEudmVydGljYWw/TS50cmFuc2xhdGVUZXh0TWF0cml4KDAsLW8pOk0udHJhbnNsYXRlVGV4dE1hdHJpeChvKk0udGV4dEhTY2FsZSwwKSl9fWZ1bmN0aW9uIGFwcGVuZEVPTCgpe3Jlc2V0TGFzdENoYXJzKCk7aWYocC5pbml0aWFsaXplZCl7cC5oYXNFT0w9ITA7Zmx1c2hUZXh0Q29udGVudEl0ZW0oKX1lbHNlIGcuaXRlbXMucHVzaCh7c3RyOiIiLGRpcjoibHRyIix3aWR0aDowLGhlaWdodDowLHRyYW5zZm9ybTpnZXRDdXJyZW50VGV4dFRyYW5zZm9ybSgpLGZvbnROYW1lOk0uZm9udC5sb2FkZWROYW1lLGhhc0VPTDohMH0pfWZ1bmN0aW9uIGFkZEZha2VTcGFjZXMoZSx0LGEpe2lmKGEqcC5zcGFjZUluRmxvd01pbjw9ZSYmZTw9YSpwLnNwYWNlSW5GbG93TWF4KXtpZihwLmluaXRpYWxpemVkKXtyZXNldExhc3RDaGFycygpO3Auc3RyLnB1c2goIiAiKX1yZXR1cm4hMX1jb25zdCByPXAuZm9udE5hbWU7bGV0IG49MDtpZihwLnZlcnRpY2FsKXtuPWU7ZT0wfWZsdXNoVGV4dENvbnRlbnRJdGVtKCk7cmVzZXRMYXN0Q2hhcnMoKTtnLml0ZW1zLnB1c2goe3N0cjoiICIsZGlyOiJsdHIiLHdpZHRoOk1hdGguYWJzKGUpLGhlaWdodDpNYXRoLmFicyhuKSx0cmFuc2Zvcm06dHx8Z2V0Q3VycmVudFRleHRUcmFuc2Zvcm0oKSxmb250TmFtZTpyLGhhc0VPTDohMX0pO3JldHVybiEwfWZ1bmN0aW9uIGZsdXNoVGV4dENvbnRlbnRJdGVtKCl7aWYocC5pbml0aWFsaXplZCYmcC5zdHIpe3AudmVydGljYWw/cC50b3RhbEhlaWdodCs9cC5oZWlnaHQqcC50ZXh0QWR2YW5jZVNjYWxlOnAudG90YWxXaWR0aCs9cC53aWR0aCpwLnRleHRBZHZhbmNlU2NhbGU7Zy5pdGVtcy5wdXNoKGZ1bmN0aW9uIHJ1bkJpZGlUcmFuc2Zvcm0oZSl7Y29uc3QgdD1lLnN0ci5qb2luKCIiKSxhPSgwLHcuYmlkaSkodCwtMSxlLnZlcnRpY2FsKTtyZXR1cm57c3RyOmEuc3RyLGRpcjphLmRpcix3aWR0aDpNYXRoLmFicyhlLnRvdGFsV2lkdGgpLGhlaWdodDpNYXRoLmFicyhlLnRvdGFsSGVpZ2h0KSx0cmFuc2Zvcm06ZS50cmFuc2Zvcm0sZm9udE5hbWU6ZS5mb250TmFtZSxoYXNFT0w6ZS5oYXNFT0x9fShwKSk7cC5pbml0aWFsaXplZD0hMTtwLnN0ci5sZW5ndGg9MH19ZnVuY3Rpb24gZW5xdWV1ZUNodW5rKGU9ITEpe2NvbnN0IHQ9Zy5pdGVtcy5sZW5ndGg7aWYoMCE9PXQmJiEoZSYmdDwxMCkpe2MuZW5xdWV1ZShnLHQpO2cuaXRlbXM9W107Zy5zdHlsZXM9T2JqZWN0LmNyZWF0ZShudWxsKX19Y29uc3QgRT1uZXcgVGltZVNsb3RNYW5hZ2VyO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24gcHJvbWlzZUJvZHkoZSxoKXtjb25zdCBuZXh0PWZ1bmN0aW9uKHQpe2VucXVldWVDaHVuayghMCk7UHJvbWlzZS5hbGwoW3QsYy5yZWFkeV0pLnRoZW4oKGZ1bmN0aW9uKCl7dHJ5e3Byb21pc2VCb2R5KGUsaCl9Y2F0Y2goZSl7aChlKX19KSxoKX07dC5lbnN1cmVOb3RUZXJtaW5hdGVkKCk7RS5yZXNldCgpO2NvbnN0IGY9e307bGV0IHAsbT1bXTtmb3IoOyEocD1FLmNoZWNrKCkpOyl7bS5sZW5ndGg9MDtmLmFyZ3M9bTtpZighVC5yZWFkKGYpKWJyZWFrO009bi5zdGF0ZTtjb25zdCBlPWYuZm47bT1mLmFyZ3M7c3dpdGNoKDB8ZSl7Y2FzZSByLk9QUy5zZXRGb250OnZhciBiPW1bMF0ubmFtZSx3PW1bMV07aWYoTS5mb250JiZiPT09TS5mb250TmFtZSYmdz09PU0uZm9udFNpemUpYnJlYWs7Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtNLmZvbnROYW1lPWI7TS5mb250U2l6ZT13O25leHQoaGFuZGxlU2V0Rm9udChiLG51bGwpKTtyZXR1cm47Y2FzZSByLk9QUy5zZXRUZXh0UmlzZTpNLnRleHRSaXNlPW1bMF07YnJlYWs7Y2FzZSByLk9QUy5zZXRIU2NhbGU6TS50ZXh0SFNjYWxlPW1bMF0vMTAwO2JyZWFrO2Nhc2Ugci5PUFMuc2V0TGVhZGluZzpNLmxlYWRpbmc9bVswXTticmVhaztjYXNlIHIuT1BTLm1vdmVUZXh0Ok0udHJhbnNsYXRlVGV4dExpbmVNYXRyaXgobVswXSxtWzFdKTtNLnRleHRNYXRyaXg9TS50ZXh0TGluZU1hdHJpeC5zbGljZSgpO2JyZWFrO2Nhc2Ugci5PUFMuc2V0TGVhZGluZ01vdmVUZXh0Ok0ubGVhZGluZz0tbVsxXTtNLnRyYW5zbGF0ZVRleHRMaW5lTWF0cml4KG1bMF0sbVsxXSk7TS50ZXh0TWF0cml4PU0udGV4dExpbmVNYXRyaXguc2xpY2UoKTticmVhaztjYXNlIHIuT1BTLm5leHRMaW5lOk0uY2FycmlhZ2VSZXR1cm4oKTticmVhaztjYXNlIHIuT1BTLnNldFRleHRNYXRyaXg6TS5zZXRUZXh0TWF0cml4KG1bMF0sbVsxXSxtWzJdLG1bM10sbVs0XSxtWzVdKTtNLnNldFRleHRMaW5lTWF0cml4KG1bMF0sbVsxXSxtWzJdLG1bM10sbVs0XSxtWzVdKTt1cGRhdGVBZHZhbmNlU2NhbGUoKTticmVhaztjYXNlIHIuT1BTLnNldENoYXJTcGFjaW5nOk0uY2hhclNwYWNpbmc9bVswXTticmVhaztjYXNlIHIuT1BTLnNldFdvcmRTcGFjaW5nOk0ud29yZFNwYWNpbmc9bVswXTticmVhaztjYXNlIHIuT1BTLmJlZ2luVGV4dDpNLnRleHRNYXRyaXg9ci5JREVOVElUWV9NQVRSSVguc2xpY2UoKTtNLnRleHRMaW5lTWF0cml4PXIuSURFTlRJVFlfTUFUUklYLnNsaWNlKCk7YnJlYWs7Y2FzZSByLk9QUy5zaG93U3BhY2VkVGV4dDppZighbi5zdGF0ZS5mb250KXt4LmVuc3VyZVN0YXRlRm9udChuLnN0YXRlKTtjb250aW51ZX1jb25zdCBlPShNLmZvbnQudmVydGljYWw/MTotMSkqTS5mb250U2l6ZS8xZTMsaD1tWzBdO2ZvcihsZXQgdD0wLGE9aC5sZW5ndGg7dDxhLTE7dCsrKXtjb25zdCBhPWhbdF07aWYoInN0cmluZyI9PXR5cGVvZiBhKUMucHVzaChhKTtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgYSYmMCE9PWEpe2NvbnN0IHQ9Qy5qb2luKCIiKTtDLmxlbmd0aD0wO2J1aWxkVGV4dENvbnRlbnRJdGVtKHtjaGFyczp0LGV4dHJhU3BhY2luZzphKmV9KX19Y29uc3QgZj1oLmF0KC0xKTsic3RyaW5nIj09dHlwZW9mIGYmJkMucHVzaChmKTtpZihDLmxlbmd0aD4wKXtjb25zdCBlPUMuam9pbigiIik7Qy5sZW5ndGg9MDtidWlsZFRleHRDb250ZW50SXRlbSh7Y2hhcnM6ZSxleHRyYVNwYWNpbmc6MH0pfWJyZWFrO2Nhc2Ugci5PUFMuc2hvd1RleHQ6aWYoIW4uc3RhdGUuZm9udCl7eC5lbnN1cmVTdGF0ZUZvbnQobi5zdGF0ZSk7Y29udGludWV9YnVpbGRUZXh0Q29udGVudEl0ZW0oe2NoYXJzOm1bMF0sZXh0cmFTcGFjaW5nOjB9KTticmVhaztjYXNlIHIuT1BTLm5leHRMaW5lU2hvd1RleHQ6aWYoIW4uc3RhdGUuZm9udCl7eC5lbnN1cmVTdGF0ZUZvbnQobi5zdGF0ZSk7Y29udGludWV9TS5jYXJyaWFnZVJldHVybigpO2J1aWxkVGV4dENvbnRlbnRJdGVtKHtjaGFyczptWzBdLGV4dHJhU3BhY2luZzowfSk7YnJlYWs7Y2FzZSByLk9QUy5uZXh0TGluZVNldFNwYWNpbmdTaG93VGV4dDppZighbi5zdGF0ZS5mb250KXt4LmVuc3VyZVN0YXRlRm9udChuLnN0YXRlKTtjb250aW51ZX1NLndvcmRTcGFjaW5nPW1bMF07TS5jaGFyU3BhY2luZz1tWzFdO00uY2FycmlhZ2VSZXR1cm4oKTtidWlsZFRleHRDb250ZW50SXRlbSh7Y2hhcnM6bVsyXSxleHRyYVNwYWNpbmc6MH0pO2JyZWFrO2Nhc2Ugci5PUFMucGFpbnRYT2JqZWN0OmZsdXNoVGV4dENvbnRlbnRJdGVtKCk7dnx8KHY9YS5nZXQoIlhPYmplY3QiKXx8aS5EaWN0LmVtcHR5KTt2YXIgUz1tWzBdaW5zdGFuY2VvZiBpLk5hbWUsRD1tWzBdLm5hbWU7aWYoUyYmRi5nZXRCeU5hbWUoRCkpYnJlYWs7bmV4dChuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSxoKXtpZighUyl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiWE9iamVjdCBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuIik7bGV0IGY9di5nZXRSYXcoRCk7aWYoZiBpbnN0YW5jZW9mIGkuUmVmKXtpZihGLmdldEJ5UmVmKGYpKXtlKCk7cmV0dXJufWlmKHguZ2xvYmFsSW1hZ2VDYWNoZS5nZXREYXRhKGYseC5wYWdlSW5kZXgpKXtlKCk7cmV0dXJufWY9ay5mZXRjaChmKX1pZighKGYgaW5zdGFuY2VvZiB5LkJhc2VTdHJlYW0pKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJYT2JqZWN0IHNob3VsZCBiZSBhIHN0cmVhbSIpO2NvbnN0IGc9Zi5kaWN0LmdldCgiU3VidHlwZSIpO2lmKCEoZyBpbnN0YW5jZW9mIGkuTmFtZSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIlhPYmplY3Qgc2hvdWxkIGhhdmUgYSBOYW1lIHN1YnR5cGUiKTtpZigiRm9ybSIhPT1nLm5hbWUpe0Yuc2V0KEQsZi5kaWN0Lm9iaklkLCEwKTtlKCk7cmV0dXJufWNvbnN0IHA9bi5zdGF0ZS5jbG9uZSgpLG09bmV3IFN0YXRlTWFuYWdlcihwKSxiPWYuZGljdC5nZXRBcnJheSgiTWF0cml4Iik7QXJyYXkuaXNBcnJheShiKSYmNj09PWIubGVuZ3RoJiZtLnRyYW5zZm9ybShiKTtlbnF1ZXVlQ2h1bmsoKTtjb25zdCB3PXtlbnF1ZXVlSW52b2tlZDohMSxlbnF1ZXVlKGUsdCl7dGhpcy5lbnF1ZXVlSW52b2tlZD0hMDtjLmVucXVldWUoZSx0KX0sZ2V0IGRlc2lyZWRTaXplKCl7cmV0dXJuIGMuZGVzaXJlZFNpemV9LGdldCByZWFkeSgpe3JldHVybiBjLnJlYWR5fX07eC5nZXRUZXh0Q29udGVudCh7c3RyZWFtOmYsdGFzazp0LHJlc291cmNlczpmLmRpY3QuZ2V0KCJSZXNvdXJjZXMiKXx8YSxzdGF0ZU1hbmFnZXI6bSxjb21iaW5lVGV4dEl0ZW1zOnMsaW5jbHVkZU1hcmtlZENvbnRlbnQ6byxzaW5rOncsc2VlblN0eWxlczpsLHZpZXdCb3g6dSxtYXJrZWRDb250ZW50RGF0YTpkfSkudGhlbigoZnVuY3Rpb24oKXt3LmVucXVldWVJbnZva2VkfHxGLnNldChELGYuZGljdC5vYmpJZCwhMCk7ZSgpfSksaCl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIHIuQWJvcnRFeGNlcHRpb24pKXtpZigheC5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLHIud2FybikoYGdldFRleHRDb250ZW50IC0gaWdub3JpbmcgWE9iamVjdDogIiR7ZX0iLmApfX0pKSk7cmV0dXJuO2Nhc2Ugci5PUFMuc2V0R1N0YXRlOlM9bVswXWluc3RhbmNlb2YgaS5OYW1lO0Q9bVswXS5uYW1lO2lmKFMmJk8uZ2V0QnlOYW1lKEQpKWJyZWFrO25leHQobmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7aWYoIVMpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkdTdGF0ZSBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuIik7Y29uc3Qgbj1hLmdldCgiRXh0R1N0YXRlIik7aWYoIShuIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiRXh0R1N0YXRlIHNob3VsZCBiZSBhIGRpY3Rpb25hcnkuIik7Y29uc3Qgcz1uLmdldChEKTtpZighKHMgaW5zdGFuY2VvZiBpLkRpY3QpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJHU3RhdGUgc2hvdWxkIGJlIGEgZGljdGlvbmFyeS4iKTtjb25zdCBvPXMuZ2V0KCJGb250Iik7aWYobyl7Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtNLmZvbnROYW1lPW51bGw7TS5mb250U2l6ZT1vWzFdO2hhbmRsZVNldEZvbnQobnVsbCxvWzBdKS50aGVuKGUsdCl9ZWxzZXtPLnNldChELHMub2JqSWQsITApO2UoKX19KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIHIuQWJvcnRFeGNlcHRpb24pKXtpZigheC5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLHIud2FybikoYGdldFRleHRDb250ZW50IC0gaWdub3JpbmcgRXh0R1N0YXRlOiAiJHtlfSIuYCl9fSkpKTtyZXR1cm47Y2FzZSByLk9QUy5iZWdpbk1hcmtlZENvbnRlbnQ6Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtpZihvKXtkLmxldmVsKys7Zy5pdGVtcy5wdXNoKHt0eXBlOiJiZWdpbk1hcmtlZENvbnRlbnQiLHRhZzptWzBdaW5zdGFuY2VvZiBpLk5hbWU/bVswXS5uYW1lOm51bGx9KX1icmVhaztjYXNlIHIuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzOmZsdXNoVGV4dENvbnRlbnRJdGVtKCk7aWYobyl7ZC5sZXZlbCsrO2xldCBlPW51bGw7bVsxXWluc3RhbmNlb2YgaS5EaWN0JiYoZT1tWzFdLmdldCgiTUNJRCIpKTtnLml0ZW1zLnB1c2goe3R5cGU6ImJlZ2luTWFya2VkQ29udGVudFByb3BzIixpZDpOdW1iZXIuaXNJbnRlZ2VyKGUpP2Ake3guaWRGYWN0b3J5LmdldFBhZ2VPYmpJZCgpfV9tY2lkJHtlfWA6bnVsbCx0YWc6bVswXWluc3RhbmNlb2YgaS5OYW1lP21bMF0ubmFtZTpudWxsfSl9YnJlYWs7Y2FzZSByLk9QUy5lbmRNYXJrZWRDb250ZW50OmZsdXNoVGV4dENvbnRlbnRJdGVtKCk7aWYobyl7aWYoMD09PWQubGV2ZWwpYnJlYWs7ZC5sZXZlbC0tO2cuaXRlbXMucHVzaCh7dHlwZToiZW5kTWFya2VkQ29udGVudCJ9KX19aWYoZy5pdGVtcy5sZW5ndGg+PWMuZGVzaXJlZFNpemUpe3A9ITA7YnJlYWt9fWlmKHApbmV4dChOKTtlbHNle2ZsdXNoVGV4dENvbnRlbnRJdGVtKCk7ZW5xdWV1ZUNodW5rKCk7ZSgpfX0pKS5jYXRjaCgoZT0+e2lmKCEoZSBpbnN0YW5jZW9mIHIuQWJvcnRFeGNlcHRpb24pKXtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLHIud2FybikoYGdldFRleHRDb250ZW50IC0gaWdub3JpbmcgZXJyb3JzIGR1cmluZyAiJHt0Lm5hbWV9IiB0YXNrOiAiJHtlfSIuYCk7Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtlbnF1ZXVlQ2h1bmsoKX19KSl9ZXh0cmFjdERhdGFTdHJ1Y3R1cmVzKGUsdCxhKXtjb25zdCBuPXRoaXMueHJlZjtsZXQgcztjb25zdCBsPXRoaXMucmVhZFRvVW5pY29kZShhLnRvVW5pY29kZXx8ZS5nZXQoIlRvVW5pY29kZSIpfHx0LmdldCgiVG9Vbmljb2RlIikpO2lmKGEuY29tcG9zaXRlKXtjb25zdCB0PWUuZ2V0KCJDSURTeXN0ZW1JbmZvIik7dCBpbnN0YW5jZW9mIGkuRGljdCYmKGEuY2lkU3lzdGVtSW5mbz17cmVnaXN0cnk6KDAsci5zdHJpbmdUb1BERlN0cmluZykodC5nZXQoIlJlZ2lzdHJ5IikpLG9yZGVyaW5nOigwLHIuc3RyaW5nVG9QREZTdHJpbmcpKHQuZ2V0KCJPcmRlcmluZyIpKSxzdXBwbGVtZW50OnQuZ2V0KCJTdXBwbGVtZW50Iil9KTt0cnl7Y29uc3QgdD1lLmdldCgiQ0lEVG9HSURNYXAiKTt0IGluc3RhbmNlb2YgeS5CYXNlU3RyZWFtJiYocz10LmdldEJ5dGVzKCkpfWNhdGNoKGUpe2lmKCF0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IGU7KDAsci53YXJuKShgZXh0cmFjdERhdGFTdHJ1Y3R1cmVzIC0gaWdub3JpbmcgQ0lEVG9HSURNYXAgZGF0YTogIiR7ZX0iLmApfX1jb25zdCBoPVtdO2xldCB1LGQ9bnVsbDtpZihlLmhhcygiRW5jb2RpbmciKSl7dT1lLmdldCgiRW5jb2RpbmciKTtpZih1IGluc3RhbmNlb2YgaS5EaWN0KXtkPXUuZ2V0KCJCYXNlRW5jb2RpbmciKTtkPWQgaW5zdGFuY2VvZiBpLk5hbWU/ZC5uYW1lOm51bGw7aWYodS5oYXMoIkRpZmZlcmVuY2VzIikpe2NvbnN0IGU9dS5nZXQoIkRpZmZlcmVuY2VzIik7bGV0IHQ9MDtmb3IoY29uc3QgYSBvZiBlKXtjb25zdCBlPW4uZmV0Y2hJZlJlZihhKTtpZigibnVtYmVyIj09dHlwZW9mIGUpdD1lO2Vsc2V7aWYoIShlIGluc3RhbmNlb2YgaS5OYW1lKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgSW52YWxpZCBlbnRyeSBpbiAnRGlmZmVyZW5jZXMnIGFycmF5OiAke2V9YCk7aFt0KytdPWUubmFtZX19fX1lbHNlIGlmKHUgaW5zdGFuY2VvZiBpLk5hbWUpZD11Lm5hbWU7ZWxzZXtjb25zdCBlPSJFbmNvZGluZyBpcyBub3QgYSBOYW1lIG5vciBhIERpY3QiO2lmKCF0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGUpOygwLHIud2FybikoZSl9Ik1hY1JvbWFuRW5jb2RpbmciIT09ZCYmIk1hY0V4cGVydEVuY29kaW5nIiE9PWQmJiJXaW5BbnNpRW5jb2RpbmciIT09ZCYmKGQ9bnVsbCl9aWYoZClhLmRlZmF1bHRFbmNvZGluZz0oMCxjLmdldEVuY29kaW5nKShkKTtlbHNle2NvbnN0IGU9ISEoYS5mbGFncyZvLkZvbnRGbGFncy5TeW1ib2xpYyksdD0hIShhLmZsYWdzJm8uRm9udEZsYWdzLk5vbnN5bWJvbGljKTt1PWMuU3RhbmRhcmRFbmNvZGluZzsiVHJ1ZVR5cGUiIT09YS50eXBlfHx0fHwodT1jLldpbkFuc2lFbmNvZGluZyk7aWYoZSl7dT1jLk1hY1JvbWFuRW5jb2Rpbmc7YS5maWxlJiYhYS5pc0ludGVybmFsRm9udHx8KC9TeW1ib2wvaS50ZXN0KGEubmFtZSk/dT1jLlN5bWJvbFNldEVuY29kaW5nOi9EaW5nYmF0c3xXaW5nZGluZ3MvaS50ZXN0KGEubmFtZSkmJih1PWMuWmFwZkRpbmdiYXRzRW5jb2RpbmcpKX1hLmRlZmF1bHRFbmNvZGluZz11fWEuZGlmZmVyZW5jZXM9aDthLmJhc2VFbmNvZGluZ05hbWU9ZDthLmhhc0VuY29kaW5nPSEhZHx8aC5sZW5ndGg+MDthLmRpY3Q9ZTtyZXR1cm4gbC50aGVuKChlPT57YS50b1VuaWNvZGU9ZTtyZXR1cm4gdGhpcy5idWlsZFRvVW5pY29kZShhKX0pKS50aGVuKChlPT57YS50b1VuaWNvZGU9ZTtzJiYoYS5jaWRUb0dpZE1hcD10aGlzLnJlYWRDaWRUb0dpZE1hcChzLGUpKTtyZXR1cm4gYX0pKX1fc2ltcGxlRm9udFRvVW5pY29kZShlLHQ9ITEpeygwLHIuYXNzZXJ0KSghZS5jb21wb3NpdGUsIk11c3QgYmUgYSBzaW1wbGUgZm9udC4iKTtjb25zdCBhPVtdLG49ZS5kZWZhdWx0RW5jb2Rpbmcuc2xpY2UoKSxpPWUuYmFzZUVuY29kaW5nTmFtZSxzPWUuZGlmZmVyZW5jZXM7Zm9yKGNvbnN0IGUgaW4gcyl7Y29uc3QgdD1zW2VdOyIubm90ZGVmIiE9PXQmJihuW2VdPXQpfWNvbnN0IG89KDAsay5nZXRHbHlwaHNVbmljb2RlKSgpO2Zvcihjb25zdCByIGluIG4pe2xldCBzPW5bcl07aWYoIiI9PT1zKWNvbnRpbnVlO2xldCBsPW9bc107aWYodm9pZCAwIT09bCl7YVtyXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGwpO2NvbnRpbnVlfWxldCB1PTA7c3dpdGNoKHNbMF0pe2Nhc2UiRyI6Mz09PXMubGVuZ3RoJiYodT1wYXJzZUludChzLnN1YnN0cmluZygxKSwxNikpO2JyZWFrO2Nhc2UiZyI6NT09PXMubGVuZ3RoJiYodT1wYXJzZUludChzLnN1YnN0cmluZygxKSwxNikpO2JyZWFrO2Nhc2UiQyI6Y2FzZSJjIjppZihzLmxlbmd0aD49MyYmcy5sZW5ndGg8PTQpe2NvbnN0IGE9cy5zdWJzdHJpbmcoMSk7aWYodCl7dT1wYXJzZUludChhLDE2KTticmVha311PSthO2lmKE51bWJlci5pc05hTih1KSYmTnVtYmVyLmlzSW50ZWdlcihwYXJzZUludChhLDE2KSkpcmV0dXJuIHRoaXMuX3NpbXBsZUZvbnRUb1VuaWNvZGUoZSwhMCl9YnJlYWs7Y2FzZSJ1IjpsPSgwLGguZ2V0VW5pY29kZUZvckdseXBoKShzLG8pOy0xIT09bCYmKHU9bCl9aWYodT4wJiZ1PD0xMTE0MTExJiZOdW1iZXIuaXNJbnRlZ2VyKHUpKXtpZihpJiZ1PT09K3Ipe2NvbnN0IGU9KDAsYy5nZXRFbmNvZGluZykoaSk7aWYoZSYmKHM9ZVtyXSkpe2Fbcl09U3RyaW5nLmZyb21DaGFyQ29kZShvW3NdKTtjb250aW51ZX19YVtyXT1TdHJpbmcuZnJvbUNvZGVQb2ludCh1KX19cmV0dXJuIGF9YXN5bmMgYnVpbGRUb1VuaWNvZGUoZSl7ZS5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcD0hIWUudG9Vbmljb2RlJiZlLnRvVW5pY29kZS5sZW5ndGg+MDtpZihlLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwKXshZS5jb21wb3NpdGUmJmUuaGFzRW5jb2RpbmcmJihlLmZhbGxiYWNrVG9Vbmljb2RlPXRoaXMuX3NpbXBsZUZvbnRUb1VuaWNvZGUoZSkpO3JldHVybiBlLnRvVW5pY29kZX1pZighZS5jb21wb3NpdGUpcmV0dXJuIG5ldyBmLlRvVW5pY29kZU1hcCh0aGlzLl9zaW1wbGVGb250VG9Vbmljb2RlKGUpKTtpZihlLmNvbXBvc2l0ZSYmKGUuY01hcC5idWlsdEluQ01hcCYmIShlLmNNYXAgaW5zdGFuY2VvZiBuLklkZW50aXR5Q01hcCl8fCJBZG9iZSI9PT1lLmNpZFN5c3RlbUluZm8ucmVnaXN0cnkmJigiR0IxIj09PWUuY2lkU3lzdGVtSW5mby5vcmRlcmluZ3x8IkNOUzEiPT09ZS5jaWRTeXN0ZW1JbmZvLm9yZGVyaW5nfHwiSmFwYW4xIj09PWUuY2lkU3lzdGVtSW5mby5vcmRlcmluZ3x8IktvcmVhMSI9PT1lLmNpZFN5c3RlbUluZm8ub3JkZXJpbmcpKSl7Y29uc3R7cmVnaXN0cnk6dCxvcmRlcmluZzphfT1lLmNpZFN5c3RlbUluZm8scz1pLk5hbWUuZ2V0KGAke3R9LSR7YX0tVUNTMmApLG89YXdhaXQgbi5DTWFwRmFjdG9yeS5jcmVhdGUoe2VuY29kaW5nOnMsZmV0Y2hCdWlsdEluQ01hcDp0aGlzLl9mZXRjaEJ1aWx0SW5DTWFwQm91bmQsdXNlQ01hcDpudWxsfSksYz1bXTtlLmNNYXAuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtpZih0PjY1NTM1KXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJNYXggc2l6ZSBvZiBDSUQgaXMgNjUsNTM1Iik7Y29uc3QgYT1vLmxvb2t1cCh0KTthJiYoY1tlXT1TdHJpbmcuZnJvbUNoYXJDb2RlKChhLmNoYXJDb2RlQXQoMCk8PDgpK2EuY2hhckNvZGVBdCgxKSkpfSkpO3JldHVybiBuZXcgZi5Ub1VuaWNvZGVNYXAoYyl9cmV0dXJuIG5ldyBmLklkZW50aXR5VG9Vbmljb2RlTWFwKGUuZmlyc3RDaGFyLGUubGFzdENoYXIpfXJlYWRUb1VuaWNvZGUoZSl7cmV0dXJuIGU/ZSBpbnN0YW5jZW9mIGkuTmFtZT9uLkNNYXBGYWN0b3J5LmNyZWF0ZSh7ZW5jb2Rpbmc6ZSxmZXRjaEJ1aWx0SW5DTWFwOnRoaXMuX2ZldGNoQnVpbHRJbkNNYXBCb3VuZCx1c2VDTWFwOm51bGx9KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIG4uSWRlbnRpdHlDTWFwP25ldyBmLklkZW50aXR5VG9Vbmljb2RlTWFwKDAsNjU1MzUpOm5ldyBmLlRvVW5pY29kZU1hcChlLmdldE1hcCgpKX0pKTplIGluc3RhbmNlb2YgeS5CYXNlU3RyZWFtP24uQ01hcEZhY3RvcnkuY3JlYXRlKHtlbmNvZGluZzplLGZldGNoQnVpbHRJbkNNYXA6dGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kLHVzZUNNYXA6bnVsbH0pLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKGUgaW5zdGFuY2VvZiBuLklkZW50aXR5Q01hcClyZXR1cm4gbmV3IGYuSWRlbnRpdHlUb1VuaWNvZGVNYXAoMCw2NTUzNSk7Y29uc3QgdD1uZXcgQXJyYXkoZS5sZW5ndGgpO2UuZm9yRWFjaCgoZnVuY3Rpb24oZSxhKXtpZigibnVtYmVyIj09dHlwZW9mIGEpe3RbZV09U3RyaW5nLmZyb21Db2RlUG9pbnQoYSk7cmV0dXJufWNvbnN0IHI9W107Zm9yKGxldCBlPTA7ZTxhLmxlbmd0aDtlKz0yKXtjb25zdCB0PWEuY2hhckNvZGVBdChlKTw8OHxhLmNoYXJDb2RlQXQoZSsxKTtpZig1NTI5NiE9KDYzNDg4JnQpKXtyLnB1c2godCk7Y29udGludWV9ZSs9Mjtjb25zdCBuPWEuY2hhckNvZGVBdChlKTw8OHxhLmNoYXJDb2RlQXQoZSsxKTtyLnB1c2goKCgxMDIzJnQpPDwxMCkrKDEwMjMmbikrNjU1MzYpfXRbZV09U3RyaW5nLmZyb21Db2RlUG9pbnQoLi4ucil9KSk7cmV0dXJuIG5ldyBmLlRvVW5pY29kZU1hcCh0KX0pLChlPT57aWYoZSBpbnN0YW5jZW9mIHIuQWJvcnRFeGNlcHRpb24pcmV0dXJuIG51bGw7aWYodGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl7dGhpcy5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDpyLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udFRvVW5pY29kZX0pOygwLHIud2FybikoYHJlYWRUb1VuaWNvZGUgLSBpZ25vcmluZyBUb1VuaWNvZGUgZGF0YTogIiR7ZX0iLmApO3JldHVybiBudWxsfXRocm93IGV9KSk6UHJvbWlzZS5yZXNvbHZlKG51bGwpOlByb21pc2UucmVzb2x2ZShudWxsKX1yZWFkQ2lkVG9HaWRNYXAoZSx0KXtjb25zdCBhPVtdO2ZvcihsZXQgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKyl7Y29uc3Qgbj1lW3IrK108PDh8ZVtyXSxpPXI+PjE7KDAhPT1ufHx0LmhhcyhpKSkmJihhW2ldPW4pfXJldHVybiBhfWV4dHJhY3RXaWR0aHMoZSx0LGEpe2NvbnN0IHI9dGhpcy54cmVmO2xldCBuPVtdLHM9MDtjb25zdCBjPVtdO2xldCBsLGgsdSxkLGYsZyxwLG07aWYoYS5jb21wb3NpdGUpe3M9ZS5oYXMoIkRXIik/ZS5nZXQoIkRXIik6MWUzO209ZS5nZXQoIlciKTtpZihtKWZvcihoPTAsdT1tLmxlbmd0aDtoPHU7aCsrKXtnPXIuZmV0Y2hJZlJlZihtW2grK10pO3A9ci5mZXRjaElmUmVmKG1baF0pO2lmKEFycmF5LmlzQXJyYXkocCkpZm9yKGQ9MCxmPXAubGVuZ3RoO2Q8ZjtkKyspbltnKytdPXIuZmV0Y2hJZlJlZihwW2RdKTtlbHNle2NvbnN0IGU9ci5mZXRjaElmUmVmKG1bKytoXSk7Zm9yKGQ9ZztkPD1wO2QrKyluW2RdPWV9fWlmKGEudmVydGljYWwpe2xldCB0PWUuZ2V0QXJyYXkoIkRXMiIpfHxbODgwLC0xZTNdO2w9W3RbMV0sLjUqcyx0WzBdXTt0PWUuZ2V0KCJXMiIpO2lmKHQpZm9yKGg9MCx1PXQubGVuZ3RoO2g8dTtoKyspe2c9ci5mZXRjaElmUmVmKHRbaCsrXSk7cD1yLmZldGNoSWZSZWYodFtoXSk7aWYoQXJyYXkuaXNBcnJheShwKSlmb3IoZD0wLGY9cC5sZW5ndGg7ZDxmO2QrKyljW2crK109W3IuZmV0Y2hJZlJlZihwW2QrK10pLHIuZmV0Y2hJZlJlZihwW2QrK10pLHIuZmV0Y2hJZlJlZihwW2RdKV07ZWxzZXtjb25zdCBlPVtyLmZldGNoSWZSZWYodFsrK2hdKSxyLmZldGNoSWZSZWYodFsrK2hdKSxyLmZldGNoSWZSZWYodFsrK2hdKV07Zm9yKGQ9ZztkPD1wO2QrKyljW2RdPWV9fX19ZWxzZXtjb25zdCBvPWEuZmlyc3RDaGFyO209ZS5nZXQoIldpZHRocyIpO2lmKG0pe2Q9bztmb3IoaD0wLHU9bS5sZW5ndGg7aDx1O2grKyluW2QrK109ci5mZXRjaElmUmVmKG1baF0pO3M9cGFyc2VGbG9hdCh0LmdldCgiTWlzc2luZ1dpZHRoIikpfHwwfWVsc2V7Y29uc3QgdD1lLmdldCgiQmFzZUZvbnQiKTtpZih0IGluc3RhbmNlb2YgaS5OYW1lKXtjb25zdCBlPXRoaXMuZ2V0QmFzZUZvbnRNZXRyaWNzKHQubmFtZSk7bj10aGlzLmJ1aWxkQ2hhckNvZGVUb1dpZHRoKGUud2lkdGhzLGEpO3M9ZS5kZWZhdWx0V2lkdGh9fX1sZXQgYj0hMCx5PXM7Zm9yKGNvbnN0IGUgaW4gbil7Y29uc3QgdD1uW2VdO2lmKHQpaWYoeSl7aWYoeSE9PXQpe2I9ITE7YnJlYWt9fWVsc2UgeT10fWImJihhLmZsYWdzfD1vLkZvbnRGbGFncy5GaXhlZFBpdGNoKTthLmRlZmF1bHRXaWR0aD1zO2Eud2lkdGhzPW47YS5kZWZhdWx0Vk1ldHJpY3M9bDthLnZtZXRyaWNzPWN9aXNTZXJpZkZvbnQoZSl7Y29uc3QgdD1lLnNwbGl0KCItIilbMF07cmV0dXJuIHQgaW4oMCxsLmdldFNlcmlmRm9udHMpKCl8fC9zZXJpZi9naS50ZXN0KHQpfWdldEJhc2VGb250TWV0cmljcyhlKXtsZXQgdD0wLGE9T2JqZWN0LmNyZWF0ZShudWxsKSxyPSExO2xldCBuPSgwLGwuZ2V0U3RkRm9udE1hcCkoKVtlXXx8ZTtjb25zdCBpPSgwLHYuZ2V0TWV0cmljcykoKTtuIGluIGl8fChuPXRoaXMuaXNTZXJpZkZvbnQoZSk/IlRpbWVzLVJvbWFuIjoiSGVsdmV0aWNhIik7Y29uc3Qgcz1pW25dO2lmKCJudW1iZXIiPT10eXBlb2Ygcyl7dD1zO3I9ITB9ZWxzZSBhPXMoKTtyZXR1cm57ZGVmYXVsdFdpZHRoOnQsbW9ub3NwYWNlOnIsd2lkdGhzOmF9fWJ1aWxkQ2hhckNvZGVUb1dpZHRoKGUsdCl7Y29uc3QgYT1PYmplY3QuY3JlYXRlKG51bGwpLHI9dC5kaWZmZXJlbmNlcyxuPXQuZGVmYXVsdEVuY29kaW5nO2ZvcihsZXQgdD0wO3Q8MjU2O3QrKyl0IGluIHImJmVbclt0XV0/YVt0XT1lW3JbdF1dOnQgaW4gbiYmZVtuW3RdXSYmKGFbdF09ZVtuW3RdXSk7cmV0dXJuIGF9cHJlRXZhbHVhdGVGb250KGUpe2NvbnN0IHQ9ZTtsZXQgYT1lLmdldCgiU3VidHlwZSIpO2lmKCEoYSBpbnN0YW5jZW9mIGkuTmFtZSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoImludmFsaWQgZm9udCBTdWJ0eXBlIik7bGV0IG4scyxvPSExO2lmKCJUeXBlMCI9PT1hLm5hbWUpe2NvbnN0IHQ9ZS5nZXQoIkRlc2NlbmRhbnRGb250cyIpO2lmKCF0KXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJEZXNjZW5kYW50IGZvbnRzIGFyZSBub3Qgc3BlY2lmaWVkIik7aWYoISgoZT1BcnJheS5pc0FycmF5KHQpP3RoaXMueHJlZi5mZXRjaElmUmVmKHRbMF0pOnQpaW5zdGFuY2VvZiBpLkRpY3QpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJEZXNjZW5kYW50IGZvbnQgaXMgbm90IGEgZGljdGlvbmFyeS4iKTthPWUuZ2V0KCJTdWJ0eXBlIik7aWYoIShhIGluc3RhbmNlb2YgaS5OYW1lKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiaW52YWxpZCBmb250IFN1YnR5cGUiKTtvPSEwfWNvbnN0IGM9ZS5nZXQoIkZpcnN0Q2hhciIpfHwwLGw9ZS5nZXQoIkxhc3RDaGFyIil8fChvPzY1NTM1OjI1NSksaD1lLmdldCgiRm9udERlc2NyaXB0b3IiKTtpZihoKXtuPW5ldyBGLk11cm11ckhhc2gzXzY0O2NvbnN0IGE9dC5nZXRSYXcoIkVuY29kaW5nIik7aWYoYSBpbnN0YW5jZW9mIGkuTmFtZSluLnVwZGF0ZShhLm5hbWUpO2Vsc2UgaWYoYSBpbnN0YW5jZW9mIGkuUmVmKW4udXBkYXRlKGEudG9TdHJpbmcoKSk7ZWxzZSBpZihhIGluc3RhbmNlb2YgaS5EaWN0KWZvcihjb25zdCBlIG9mIGEuZ2V0UmF3VmFsdWVzKCkpaWYoZSBpbnN0YW5jZW9mIGkuTmFtZSluLnVwZGF0ZShlLm5hbWUpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIGkuUmVmKW4udXBkYXRlKGUudG9TdHJpbmcoKSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXtjb25zdCB0PWUubGVuZ3RoLGE9bmV3IEFycmF5KHQpO2ZvcihsZXQgcj0wO3I8dDtyKyspe2NvbnN0IHQ9ZVtyXTt0IGluc3RhbmNlb2YgaS5OYW1lP2Fbcl09dC5uYW1lOigibnVtYmVyIj09dHlwZW9mIHR8fHQgaW5zdGFuY2VvZiBpLlJlZikmJihhW3JdPXQudG9TdHJpbmcoKSl9bi51cGRhdGUoYS5qb2luKCkpfW4udXBkYXRlKGAke2N9LSR7bH1gKTtzPWUuZ2V0KCJUb1VuaWNvZGUiKXx8dC5nZXQoIlRvVW5pY29kZSIpO2lmKHMgaW5zdGFuY2VvZiB5LkJhc2VTdHJlYW0pe2NvbnN0IGU9cy5zdHJ8fHMsdD1lLmJ1ZmZlcj9uZXcgVWludDhBcnJheShlLmJ1ZmZlci5idWZmZXIsMCxlLmJ1ZmZlckxlbmd0aCk6bmV3IFVpbnQ4QXJyYXkoZS5ieXRlcy5idWZmZXIsZS5zdGFydCxlLmVuZC1lLnN0YXJ0KTtuLnVwZGF0ZSh0KX1lbHNlIHMgaW5zdGFuY2VvZiBpLk5hbWUmJm4udXBkYXRlKHMubmFtZSk7Y29uc3Qgcj1lLmdldCgiV2lkdGhzIil8fHQuZ2V0KCJXaWR0aHMiKTtpZihBcnJheS5pc0FycmF5KHIpKXtjb25zdCBlPVtdO2Zvcihjb25zdCB0IG9mIHIpKCJudW1iZXIiPT10eXBlb2YgdHx8dCBpbnN0YW5jZW9mIGkuUmVmKSYmZS5wdXNoKHQudG9TdHJpbmcoKSk7bi51cGRhdGUoZS5qb2luKCkpfWlmKG8pe24udXBkYXRlKCJjb21wb3NpdGVGb250Iik7Y29uc3QgYT1lLmdldCgiVyIpfHx0LmdldCgiVyIpO2lmKEFycmF5LmlzQXJyYXkoYSkpe2NvbnN0IGU9W107Zm9yKGNvbnN0IHQgb2YgYSlpZigibnVtYmVyIj09dHlwZW9mIHR8fHQgaW5zdGFuY2VvZiBpLlJlZillLnB1c2godC50b1N0cmluZygpKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe2NvbnN0IGE9W107Zm9yKGNvbnN0IGUgb2YgdCkoIm51bWJlciI9PXR5cGVvZiBlfHxlIGluc3RhbmNlb2YgaS5SZWYpJiZhLnB1c2goZS50b1N0cmluZygpKTtlLnB1c2goYFske2Euam9pbigpfV1gKX1uLnVwZGF0ZShlLmpvaW4oKSl9Y29uc3Qgcj1lLmdldFJhdygiQ0lEVG9HSURNYXAiKXx8dC5nZXRSYXcoIkNJRFRvR0lETWFwIik7ciBpbnN0YW5jZW9mIGkuTmFtZT9uLnVwZGF0ZShyLm5hbWUpOnIgaW5zdGFuY2VvZiBpLlJlZj9uLnVwZGF0ZShyLnRvU3RyaW5nKCkpOnIgaW5zdGFuY2VvZiB5LkJhc2VTdHJlYW0mJm4udXBkYXRlKHIucGVla0J5dGVzKCkpfX1yZXR1cm57ZGVzY3JpcHRvcjpoLGRpY3Q6ZSxiYXNlRGljdDp0LGNvbXBvc2l0ZTpvLHR5cGU6YS5uYW1lLGZpcnN0Q2hhcjpjLGxhc3RDaGFyOmwsdG9Vbmljb2RlOnMsaGFzaDpuP24uaGV4ZGlnZXN0KCk6IiJ9fWFzeW5jIHRyYW5zbGF0ZUZvbnQoe2Rlc2NyaXB0b3I6ZSxkaWN0OnQsYmFzZURpY3Q6YSxjb21wb3NpdGU6Yyx0eXBlOmgsZmlyc3RDaGFyOnUsbGFzdENoYXI6Zix0b1VuaWNvZGU6Zyxjc3NGb250SW5mbzpwfSl7Y29uc3QgbT0iVHlwZTMiPT09aDtsZXQgeTtpZighZSl7aWYoIW0pe2xldCBlPXQuZ2V0KCJCYXNlRm9udCIpO2lmKCEoZSBpbnN0YW5jZW9mIGkuTmFtZSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkJhc2UgZm9udCBpcyBub3Qgc3BlY2lmaWVkIik7ZT1lLm5hbWUucmVwbGFjZSgvWyxfXS9nLCItIik7Y29uc3Qgbj10aGlzLmdldEJhc2VGb250TWV0cmljcyhlKSxjPWUuc3BsaXQoIi0iKVswXSxkPSh0aGlzLmlzU2VyaWZGb250KGMpP28uRm9udEZsYWdzLlNlcmlmOjApfChuLm1vbm9zcGFjZT9vLkZvbnRGbGFncy5GaXhlZFBpdGNoOjApfCgoMCxsLmdldFN5bWJvbHNGb250cykoKVtjXT9vLkZvbnRGbGFncy5TeW1ib2xpYzpvLkZvbnRGbGFncy5Ob25zeW1ib2xpYyk7eT17dHlwZTpoLG5hbWU6ZSxsb2FkZWROYW1lOmEubG9hZGVkTmFtZSx3aWR0aHM6bi53aWR0aHMsZGVmYXVsdFdpZHRoOm4uZGVmYXVsdFdpZHRoLGlzU2ltdWxhdGVkRmxhZ3M6ITAsZmxhZ3M6ZCxmaXJzdENoYXI6dSxsYXN0Q2hhcjpmLHRvVW5pY29kZTpnLHhIZWlnaHQ6MCxjYXBIZWlnaHQ6MCxpdGFsaWNBbmdsZTowLGlzVHlwZTNGb250Om19O2NvbnN0IHA9dC5nZXQoIldpZHRocyIpLGI9KDAsbC5nZXRTdGFuZGFyZEZvbnROYW1lKShlKTtsZXQgdz1udWxsO2lmKGIpe3kuaXNTdGFuZGFyZEZvbnQ9ITA7dz1hd2FpdCB0aGlzLmZldGNoU3RhbmRhcmRGb250RGF0YShiKTt5LmlzSW50ZXJuYWxGb250PSEhd31yZXR1cm4gdGhpcy5leHRyYWN0RGF0YVN0cnVjdHVyZXModCx0LHkpLnRoZW4oKHQ9PntpZihwKXtjb25zdCBlPVtdO2xldCBhPXU7Zm9yKGNvbnN0IHQgb2YgcCllW2ErK109dGhpcy54cmVmLmZldGNoSWZSZWYodCk7dC53aWR0aHM9ZX1lbHNlIHQud2lkdGhzPXRoaXMuYnVpbGRDaGFyQ29kZVRvV2lkdGgobi53aWR0aHMsdCk7cmV0dXJuIG5ldyBzLkZvbnQoZSx3LHQpfSkpfShlPW5ldyBpLkRpY3QobnVsbCkpLnNldCgiRm9udE5hbWUiLGkuTmFtZS5nZXQoaCkpO2Uuc2V0KCJGb250QkJveCIsdC5nZXRBcnJheSgiRm9udEJCb3giKXx8WzAsMCwwLDBdKX1sZXQgdyxTLHgsayxDLHY9ZS5nZXQoIkZvbnROYW1lIiksRj10LmdldCgiQmFzZUZvbnQiKTsic3RyaW5nIj09dHlwZW9mIHYmJih2PWkuTmFtZS5nZXQodikpOyJzdHJpbmciPT10eXBlb2YgRiYmKEY9aS5OYW1lLmdldChGKSk7aWYoIW0pe2NvbnN0IGU9diYmdi5uYW1lLHQ9RiYmRi5uYW1lO2lmKGUhPT10KXsoMCxyLmluZm8pKGBUaGUgRm9udERlc2NyaXB0b3IncyBGb250TmFtZSBpcyAiJHtlfSIgYnV0IHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgRm9udCdzIEJhc2VGb250ICIke3R9Ii5gKTtlJiZ0JiZ0LnN0YXJ0c1dpdGgoZSkmJih2PUYpfX12PXZ8fEY7aWYoISh2IGluc3RhbmNlb2YgaS5OYW1lKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiaW52YWxpZCBmb250IG5hbWUiKTt0cnl7dz1lLmdldCgiRm9udEZpbGUiLCJGb250RmlsZTIiLCJGb250RmlsZTMiKX1jYXRjaChlKXtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLHIud2FybikoYHRyYW5zbGF0ZUZvbnQgLSBmZXRjaGluZyAiJHt2Lm5hbWV9IiBmb250IGZpbGU6ICIke2V9Ii5gKTt3PW5ldyBiLk51bGxTdHJlYW19bGV0IE89ITEsVD0hMSxNPW51bGw7aWYodyl7aWYody5kaWN0KXtjb25zdCBlPXcuZGljdC5nZXQoIlN1YnR5cGUiKTtlIGluc3RhbmNlb2YgaS5OYW1lJiYoUz1lLm5hbWUpO3g9dy5kaWN0LmdldCgiTGVuZ3RoMSIpO2s9dy5kaWN0LmdldCgiTGVuZ3RoMiIpO0M9dy5kaWN0LmdldCgiTGVuZ3RoMyIpfX1lbHNlIGlmKHApe2NvbnN0IGU9KDAsZC5nZXRYZmFGb250TmFtZSkodi5uYW1lKTtpZihlKXtwLmZvbnRGYW1pbHk9YCR7cC5mb250RmFtaWx5fS1QZGZKUy1YRkFgO3AubWV0cmljcz1lLm1ldHJpY3N8fG51bGw7TT1lLmZhY3RvcnN8fG51bGw7dz1hd2FpdCB0aGlzLmZldGNoU3RhbmRhcmRGb250RGF0YShlLm5hbWUpO1Q9ISF3O2E9dD0oMCxkLmdldFhmYUZvbnREaWN0KSh2Lm5hbWUpO2M9ITB9fWVsc2UgaWYoIW0pe2NvbnN0IGU9KDAsbC5nZXRTdGFuZGFyZEZvbnROYW1lKSh2Lm5hbWUpO2lmKGUpe089ITA7dz1hd2FpdCB0aGlzLmZldGNoU3RhbmRhcmRGb250RGF0YShlKTtUPSEhd319eT17dHlwZTpoLG5hbWU6di5uYW1lLHN1YnR5cGU6UyxmaWxlOncsbGVuZ3RoMTp4LGxlbmd0aDI6ayxsZW5ndGgzOkMsaXNTdGFuZGFyZEZvbnQ6Tyxpc0ludGVybmFsRm9udDpULGxvYWRlZE5hbWU6YS5sb2FkZWROYW1lLGNvbXBvc2l0ZTpjLGZpeGVkUGl0Y2g6ITEsZm9udE1hdHJpeDp0LmdldEFycmF5KCJGb250TWF0cml4Iil8fHIuRk9OVF9JREVOVElUWV9NQVRSSVgsZmlyc3RDaGFyOnUsbGFzdENoYXI6Zix0b1VuaWNvZGU6ZyxiYm94OmUuZ2V0QXJyYXkoIkZvbnRCQm94Iil8fHQuZ2V0QXJyYXkoIkZvbnRCQm94IiksYXNjZW50OmUuZ2V0KCJBc2NlbnQiKSxkZXNjZW50OmUuZ2V0KCJEZXNjZW50IikseEhlaWdodDplLmdldCgiWEhlaWdodCIpfHwwLGNhcEhlaWdodDplLmdldCgiQ2FwSGVpZ2h0Iil8fDAsZmxhZ3M6ZS5nZXQoIkZsYWdzIiksaXRhbGljQW5nbGU6ZS5nZXQoIkl0YWxpY0FuZ2xlIil8fDAsaXNUeXBlM0ZvbnQ6bSxjc3NGb250SW5mbzpwLHNjYWxlRmFjdG9yczpNfTtpZihjKXtjb25zdCBlPWEuZ2V0KCJFbmNvZGluZyIpO2UgaW5zdGFuY2VvZiBpLk5hbWUmJih5LmNpZEVuY29kaW5nPWUubmFtZSk7Y29uc3QgdD1hd2FpdCBuLkNNYXBGYWN0b3J5LmNyZWF0ZSh7ZW5jb2Rpbmc6ZSxmZXRjaEJ1aWx0SW5DTWFwOnRoaXMuX2ZldGNoQnVpbHRJbkNNYXBCb3VuZCx1c2VDTWFwOm51bGx9KTt5LmNNYXA9dDt5LnZlcnRpY2FsPXkuY01hcC52ZXJ0aWNhbH1yZXR1cm4gdGhpcy5leHRyYWN0RGF0YVN0cnVjdHVyZXModCxhLHkpLnRoZW4oKGE9Pnt0aGlzLmV4dHJhY3RXaWR0aHModCxlLGEpO3JldHVybiBuZXcgcy5Gb250KHYubmFtZSx3LGEpfSkpfXN0YXRpYyBidWlsZEZvbnRQYXRocyhlLHQsYSxuKXtmdW5jdGlvbiBidWlsZFBhdGgodCl7Y29uc3QgaT1gJHtlLmxvYWRlZE5hbWV9X3BhdGhfJHt0fWA7dHJ5e2lmKGUucmVuZGVyZXIuaGFzQnVpbHRQYXRoKHQpKXJldHVybjthLnNlbmQoImNvbW1vbm9iaiIsW2ksIkZvbnRQYXRoIixlLnJlbmRlcmVyLmdldFBhdGhKcyh0KV0pfWNhdGNoKGUpe2lmKG4uaWdub3JlRXJyb3JzKXthLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDpyLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udEJ1aWxkUGF0aH0pOygwLHIud2FybikoYGJ1aWxkRm9udFBhdGhzIC0gaWdub3JpbmcgJHtpfSBnbHlwaDogIiR7ZX0iLmApO3JldHVybn10aHJvdyBlfX1mb3IoY29uc3QgZSBvZiB0KXtidWlsZFBhdGgoZS5mb250Q2hhcik7Y29uc3QgdD1lLmFjY2VudDt0JiZ0LmZvbnRDaGFyJiZidWlsZFBhdGgodC5mb250Q2hhcil9fXN0YXRpYyBnZXQgZmFsbGJhY2tGb250RGljdCgpe2NvbnN0IGU9bmV3IGkuRGljdDtlLnNldCgiQmFzZUZvbnQiLGkuTmFtZS5nZXQoIlBERkpTLUZhbGxiYWNrRm9udCIpKTtlLnNldCgiVHlwZSIsaS5OYW1lLmdldCgiRmFsbGJhY2tUeXBlIikpO2Uuc2V0KCJTdWJ0eXBlIixpLk5hbWUuZ2V0KCJGYWxsYmFja1R5cGUiKSk7ZS5zZXQoIkVuY29kaW5nIixpLk5hbWUuZ2V0KCJXaW5BbnNpRW5jb2RpbmciKSk7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsImZhbGxiYWNrRm9udERpY3QiLGUpfX10LlBhcnRpYWxFdmFsdWF0b3I9UGFydGlhbEV2YWx1YXRvcjtjbGFzcyBUcmFuc2xhdGVkRm9udHtjb25zdHJ1Y3Rvcih7bG9hZGVkTmFtZTplLGZvbnQ6dCxkaWN0OmEsZXZhbHVhdG9yT3B0aW9uczpyfSl7dGhpcy5sb2FkZWROYW1lPWU7dGhpcy5mb250PXQ7dGhpcy5kaWN0PWE7dGhpcy5fZXZhbHVhdG9yT3B0aW9ucz1yfHxNO3RoaXMudHlwZTNMb2FkZWQ9bnVsbDt0aGlzLnR5cGUzRGVwZW5kZW5jaWVzPXQuaXNUeXBlM0ZvbnQ/bmV3IFNldDpudWxsO3RoaXMuc2VudD0hMX1zZW5kKGUpe2lmKCF0aGlzLnNlbnQpe3RoaXMuc2VudD0hMDtlLnNlbmQoImNvbW1vbm9iaiIsW3RoaXMubG9hZGVkTmFtZSwiRm9udCIsdGhpcy5mb250LmV4cG9ydERhdGEodGhpcy5fZXZhbHVhdG9yT3B0aW9ucy5mb250RXh0cmFQcm9wZXJ0aWVzKV0pfX1mYWxsYmFjayhlKXtpZih0aGlzLmZvbnQuZGF0YSl7dGhpcy5mb250LmRpc2FibGVGb250RmFjZT0hMDtQYXJ0aWFsRXZhbHVhdG9yLmJ1aWxkRm9udFBhdGhzKHRoaXMuZm9udCx0aGlzLmZvbnQuZ2x5cGhDYWNoZVZhbHVlcyxlLHRoaXMuX2V2YWx1YXRvck9wdGlvbnMpfX1sb2FkVHlwZTNEYXRhKGUsdCxhKXtpZih0aGlzLnR5cGUzTG9hZGVkKXJldHVybiB0aGlzLnR5cGUzTG9hZGVkO2lmKCF0aGlzLmZvbnQuaXNUeXBlM0ZvbnQpdGhyb3cgbmV3IEVycm9yKCJNdXN0IGJlIGEgVHlwZTMgZm9udC4iKTtjb25zdCBuPWUuY2xvbmUoe2lnbm9yZUVycm9yczohMX0pO24ucGFyc2luZ1R5cGUzRm9udD0hMDtjb25zdCBzPW5ldyBpLlJlZlNldChlLnR5cGUzRm9udFJlZnMpO3RoaXMuZGljdC5vYmpJZCYmIXMuaGFzKHRoaXMuZGljdC5vYmpJZCkmJnMucHV0KHRoaXMuZGljdC5vYmpJZCk7bi50eXBlM0ZvbnRSZWZzPXM7Y29uc3Qgbz10aGlzLmZvbnQsYz10aGlzLnR5cGUzRGVwZW5kZW5jaWVzO2xldCBsPVByb21pc2UucmVzb2x2ZSgpO2NvbnN0IGg9dGhpcy5kaWN0LmdldCgiQ2hhclByb2NzIiksdT10aGlzLmRpY3QuZ2V0KCJSZXNvdXJjZXMiKXx8dCxkPU9iamVjdC5jcmVhdGUobnVsbCksZj1yLlV0aWwubm9ybWFsaXplUmVjdChvLmJib3h8fFswLDAsMCwwXSksZz1mWzJdLWZbMF0scD1mWzNdLWZbMV0sbT1NYXRoLmh5cG90KGcscCk7Zm9yKGNvbnN0IGUgb2YgaC5nZXRLZXlzKCkpbD1sLnRoZW4oKCgpPT57Y29uc3QgdD1oLmdldChlKSxpPW5ldyBPLk9wZXJhdG9yTGlzdDtyZXR1cm4gbi5nZXRPcGVyYXRvckxpc3Qoe3N0cmVhbTp0LHRhc2s6YSxyZXNvdXJjZXM6dSxvcGVyYXRvckxpc3Q6aX0pLnRoZW4oKCgpPT57aS5mbkFycmF5WzBdPT09ci5PUFMuc2V0Q2hhcldpZHRoQW5kQm91bmRzJiZ0aGlzLl9yZW1vdmVUeXBlM0NvbG9yT3BlcmF0b3JzKGksbSk7ZFtlXT1pLmdldElSKCk7Zm9yKGNvbnN0IGUgb2YgaS5kZXBlbmRlbmNpZXMpYy5hZGQoZSl9KSkuY2F0Y2goKGZ1bmN0aW9uKHQpeygwLHIud2FybikoYFR5cGUzIGZvbnQgcmVzb3VyY2UgIiR7ZX0iIGlzIG5vdCBhdmFpbGFibGUuYCk7Y29uc3QgYT1uZXcgTy5PcGVyYXRvckxpc3Q7ZFtlXT1hLmdldElSKCl9KSl9KSk7dGhpcy50eXBlM0xvYWRlZD1sLnRoZW4oKCgpPT57by5jaGFyUHJvY09wZXJhdG9yTGlzdD1kO2lmKHRoaXMuX2Jib3gpe28uaXNDaGFyQkJveD0hMDtvLmJib3g9dGhpcy5fYmJveH19KSk7cmV0dXJuIHRoaXMudHlwZTNMb2FkZWR9X3JlbW92ZVR5cGUzQ29sb3JPcGVyYXRvcnMoZSx0PU5hTil7Y29uc3QgYT1yLlV0aWwubm9ybWFsaXplUmVjdChlLmFyZ3NBcnJheVswXS5zbGljZSgyKSksbj1hWzJdLWFbMF0saT1hWzNdLWFbMV0scz1NYXRoLmh5cG90KG4saSk7aWYoMD09PW58fDA9PT1pKXtlLmZuQXJyYXkuc3BsaWNlKDAsMSk7ZS5hcmdzQXJyYXkuc3BsaWNlKDAsMSl9ZWxzZSBpZigwPT09dHx8TWF0aC5yb3VuZChzL3QpPj0xMCl7dGhpcy5fYmJveHx8KHRoaXMuX2Jib3g9WzEvMCwxLzAsLTEvMCwtMS8wXSk7dGhpcy5fYmJveFswXT1NYXRoLm1pbih0aGlzLl9iYm94WzBdLGFbMF0pO3RoaXMuX2Jib3hbMV09TWF0aC5taW4odGhpcy5fYmJveFsxXSxhWzFdKTt0aGlzLl9iYm94WzJdPU1hdGgubWF4KHRoaXMuX2Jib3hbMl0sYVsyXSk7dGhpcy5fYmJveFszXT1NYXRoLm1heCh0aGlzLl9iYm94WzNdLGFbM10pfWxldCBvPTAsYz1lLmxlbmd0aDtmb3IoO288Yzspe3N3aXRjaChlLmZuQXJyYXlbb10pe2Nhc2Ugci5PUFMuc2V0Q2hhcldpZHRoQW5kQm91bmRzOmJyZWFrO2Nhc2Ugci5PUFMuc2V0U3Ryb2tlQ29sb3JTcGFjZTpjYXNlIHIuT1BTLnNldEZpbGxDb2xvclNwYWNlOmNhc2Ugci5PUFMuc2V0U3Ryb2tlQ29sb3I6Y2FzZSByLk9QUy5zZXRTdHJva2VDb2xvck46Y2FzZSByLk9QUy5zZXRGaWxsQ29sb3I6Y2FzZSByLk9QUy5zZXRGaWxsQ29sb3JOOmNhc2Ugci5PUFMuc2V0U3Ryb2tlR3JheTpjYXNlIHIuT1BTLnNldEZpbGxHcmF5OmNhc2Ugci5PUFMuc2V0U3Ryb2tlUkdCQ29sb3I6Y2FzZSByLk9QUy5zZXRGaWxsUkdCQ29sb3I6Y2FzZSByLk9QUy5zZXRTdHJva2VDTVlLQ29sb3I6Y2FzZSByLk9QUy5zZXRGaWxsQ01ZS0NvbG9yOmNhc2Ugci5PUFMuc2hhZGluZ0ZpbGw6Y2FzZSByLk9QUy5zZXRSZW5kZXJpbmdJbnRlbnQ6ZS5mbkFycmF5LnNwbGljZShvLDEpO2UuYXJnc0FycmF5LnNwbGljZShvLDEpO2MtLTtjb250aW51ZTtjYXNlIHIuT1BTLnNldEdTdGF0ZTpjb25zdFt0XT1lLmFyZ3NBcnJheVtvXTtsZXQgYT0wLG49dC5sZW5ndGg7Zm9yKDthPG47KXtjb25zdFtlXT10W2FdO3N3aXRjaChlKXtjYXNlIlRSIjpjYXNlIlRSMiI6Y2FzZSJIVCI6Y2FzZSJCRyI6Y2FzZSJCRzIiOmNhc2UiVUNSIjpjYXNlIlVDUjIiOnQuc3BsaWNlKGEsMSk7bi0tO2NvbnRpbnVlfWErK319bysrfX19Y2xhc3MgU3RhdGVNYW5hZ2Vye2NvbnN0cnVjdG9yKGU9bmV3IEV2YWxTdGF0ZSl7dGhpcy5zdGF0ZT1lO3RoaXMuc3RhdGVTdGFjaz1bXX1zYXZlKCl7Y29uc3QgZT10aGlzLnN0YXRlO3RoaXMuc3RhdGVTdGFjay5wdXNoKHRoaXMuc3RhdGUpO3RoaXMuc3RhdGU9ZS5jbG9uZSgpfXJlc3RvcmUoKXtjb25zdCBlPXRoaXMuc3RhdGVTdGFjay5wb3AoKTtlJiYodGhpcy5zdGF0ZT1lKX10cmFuc2Zvcm0oZSl7dGhpcy5zdGF0ZS5jdG09ci5VdGlsLnRyYW5zZm9ybSh0aGlzLnN0YXRlLmN0bSxlKX19Y2xhc3MgVGV4dFN0YXRle2NvbnN0cnVjdG9yKCl7dGhpcy5jdG09bmV3IEZsb2F0MzJBcnJheShyLklERU5USVRZX01BVFJJWCk7dGhpcy5mb250TmFtZT1udWxsO3RoaXMuZm9udFNpemU9MDt0aGlzLmZvbnQ9bnVsbDt0aGlzLmZvbnRNYXRyaXg9ci5GT05UX0lERU5USVRZX01BVFJJWDt0aGlzLnRleHRNYXRyaXg9ci5JREVOVElUWV9NQVRSSVguc2xpY2UoKTt0aGlzLnRleHRMaW5lTWF0cml4PXIuSURFTlRJVFlfTUFUUklYLnNsaWNlKCk7dGhpcy5jaGFyU3BhY2luZz0wO3RoaXMud29yZFNwYWNpbmc9MDt0aGlzLmxlYWRpbmc9MDt0aGlzLnRleHRIU2NhbGU9MTt0aGlzLnRleHRSaXNlPTB9c2V0VGV4dE1hdHJpeChlLHQsYSxyLG4saSl7Y29uc3Qgcz10aGlzLnRleHRNYXRyaXg7c1swXT1lO3NbMV09dDtzWzJdPWE7c1szXT1yO3NbNF09bjtzWzVdPWl9c2V0VGV4dExpbmVNYXRyaXgoZSx0LGEscixuLGkpe2NvbnN0IHM9dGhpcy50ZXh0TGluZU1hdHJpeDtzWzBdPWU7c1sxXT10O3NbMl09YTtzWzNdPXI7c1s0XT1uO3NbNV09aX10cmFuc2xhdGVUZXh0TWF0cml4KGUsdCl7Y29uc3QgYT10aGlzLnRleHRNYXRyaXg7YVs0XT1hWzBdKmUrYVsyXSp0K2FbNF07YVs1XT1hWzFdKmUrYVszXSp0K2FbNV19dHJhbnNsYXRlVGV4dExpbmVNYXRyaXgoZSx0KXtjb25zdCBhPXRoaXMudGV4dExpbmVNYXRyaXg7YVs0XT1hWzBdKmUrYVsyXSp0K2FbNF07YVs1XT1hWzFdKmUrYVszXSp0K2FbNV19Y2FycmlhZ2VSZXR1cm4oKXt0aGlzLnRyYW5zbGF0ZVRleHRMaW5lTWF0cml4KDAsLXRoaXMubGVhZGluZyk7dGhpcy50ZXh0TWF0cml4PXRoaXMudGV4dExpbmVNYXRyaXguc2xpY2UoKX1jbG9uZSgpe2NvbnN0IGU9T2JqZWN0LmNyZWF0ZSh0aGlzKTtlLnRleHRNYXRyaXg9dGhpcy50ZXh0TWF0cml4LnNsaWNlKCk7ZS50ZXh0TGluZU1hdHJpeD10aGlzLnRleHRMaW5lTWF0cml4LnNsaWNlKCk7ZS5mb250TWF0cml4PXRoaXMuZm9udE1hdHJpeC5zbGljZSgpO3JldHVybiBlfX1jbGFzcyBFdmFsU3RhdGV7Y29uc3RydWN0b3IoKXt0aGlzLmN0bT1uZXcgRmxvYXQzMkFycmF5KHIuSURFTlRJVFlfTUFUUklYKTt0aGlzLmZvbnQ9bnVsbDt0aGlzLnRleHRSZW5kZXJpbmdNb2RlPXIuVGV4dFJlbmRlcmluZ01vZGUuRklMTDt0aGlzLmZpbGxDb2xvclNwYWNlPVMuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXk7dGhpcy5zdHJva2VDb2xvclNwYWNlPVMuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXl9Y2xvbmUoKXtyZXR1cm4gT2JqZWN0LmNyZWF0ZSh0aGlzKX19Y2xhc3MgRXZhbHVhdG9yUHJlcHJvY2Vzc29ye3N0YXRpYyBnZXQgb3BNYXAoKXtjb25zdCBlPSgwLEMuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS53PXtpZDpyLk9QUy5zZXRMaW5lV2lkdGgsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX07ZS5KPXtpZDpyLk9QUy5zZXRMaW5lQ2FwLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9O2Uuaj17aWQ6ci5PUFMuc2V0TGluZUpvaW4sbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX07ZS5NPXtpZDpyLk9QUy5zZXRNaXRlckxpbWl0LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9O2UuZD17aWQ6ci5PUFMuc2V0RGFzaCxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfTtlLnJpPXtpZDpyLk9QUy5zZXRSZW5kZXJpbmdJbnRlbnQsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX07ZS5pPXtpZDpyLk9QUy5zZXRGbGF0bmVzcyxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfTtlLmdzPXtpZDpyLk9QUy5zZXRHU3RhdGUsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX07ZS5xPXtpZDpyLk9QUy5zYXZlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9O2UuUT17aWQ6ci5PUFMucmVzdG9yZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfTtlLmNtPXtpZDpyLk9QUy50cmFuc2Zvcm0sbnVtQXJnczo2LHZhcmlhYmxlQXJnczohMX07ZS5tPXtpZDpyLk9QUy5tb3ZlVG8sbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX07ZS5sPXtpZDpyLk9QUy5saW5lVG8sbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX07ZS5jPXtpZDpyLk9QUy5jdXJ2ZVRvLG51bUFyZ3M6Nix2YXJpYWJsZUFyZ3M6ITF9O2Uudj17aWQ6ci5PUFMuY3VydmVUbzIsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX07ZS55PXtpZDpyLk9QUy5jdXJ2ZVRvMyxudW1BcmdzOjQsdmFyaWFibGVBcmdzOiExfTtlLmg9e2lkOnIuT1BTLmNsb3NlUGF0aCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfTtlLnJlPXtpZDpyLk9QUy5yZWN0YW5nbGUsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX07ZS5TPXtpZDpyLk9QUy5zdHJva2UsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX07ZS5zPXtpZDpyLk9QUy5jbG9zZVN0cm9rZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfTtlLmY9e2lkOnIuT1BTLmZpbGwsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX07ZS5GPXtpZDpyLk9QUy5maWxsLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9O2VbImYqIl09e2lkOnIuT1BTLmVvRmlsbCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfTtlLkI9e2lkOnIuT1BTLmZpbGxTdHJva2UsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX07ZVsiQioiXT17aWQ6ci5PUFMuZW9GaWxsU3Ryb2tlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9O2UuYj17aWQ6ci5PUFMuY2xvc2VGaWxsU3Ryb2tlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9O2VbImIqIl09e2lkOnIuT1BTLmNsb3NlRU9GaWxsU3Ryb2tlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9O2Uubj17aWQ6ci5PUFMuZW5kUGF0aCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfTtlLlc9e2lkOnIuT1BTLmNsaXAsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX07ZVsiVyoiXT17aWQ6ci5PUFMuZW9DbGlwLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9O2UuQlQ9e2lkOnIuT1BTLmJlZ2luVGV4dCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfTtlLkVUPXtpZDpyLk9QUy5lbmRUZXh0LG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9O2UuVGM9e2lkOnIuT1BTLnNldENoYXJTcGFjaW5nLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9O2UuVHc9e2lkOnIuT1BTLnNldFdvcmRTcGFjaW5nLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9O2UuVHo9e2lkOnIuT1BTLnNldEhTY2FsZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfTtlLlRMPXtpZDpyLk9QUy5zZXRMZWFkaW5nLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9O2UuVGY9e2lkOnIuT1BTLnNldEZvbnQsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX07ZS5Ucj17aWQ6ci5PUFMuc2V0VGV4dFJlbmRlcmluZ01vZGUsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX07ZS5Ucz17aWQ6ci5PUFMuc2V0VGV4dFJpc2UsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX07ZS5UZD17aWQ6ci5PUFMubW92ZVRleHQsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX07ZS5URD17aWQ6ci5PUFMuc2V0TGVhZGluZ01vdmVUZXh0LG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9O2UuVG09e2lkOnIuT1BTLnNldFRleHRNYXRyaXgsbnVtQXJnczo2LHZhcmlhYmxlQXJnczohMX07ZVsiVCoiXT17aWQ6ci5PUFMubmV4dExpbmUsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX07ZS5Uaj17aWQ6ci5PUFMuc2hvd1RleHQsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX07ZS5USj17aWQ6ci5PUFMuc2hvd1NwYWNlZFRleHQsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX07ZVsiJyJdPXtpZDpyLk9QUy5uZXh0TGluZVNob3dUZXh0LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9O2VbJyInXT17aWQ6ci5PUFMubmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQsbnVtQXJnczozLHZhcmlhYmxlQXJnczohMX07ZS5kMD17aWQ6ci5PUFMuc2V0Q2hhcldpZHRoLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9O2UuZDE9e2lkOnIuT1BTLnNldENoYXJXaWR0aEFuZEJvdW5kcyxudW1BcmdzOjYsdmFyaWFibGVBcmdzOiExfTtlLkNTPXtpZDpyLk9QUy5zZXRTdHJva2VDb2xvclNwYWNlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9O2UuY3M9e2lkOnIuT1BTLnNldEZpbGxDb2xvclNwYWNlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9O2UuU0M9e2lkOnIuT1BTLnNldFN0cm9rZUNvbG9yLG51bUFyZ3M6NCx2YXJpYWJsZUFyZ3M6ITB9O2UuU0NOPXtpZDpyLk9QUy5zZXRTdHJva2VDb2xvck4sbnVtQXJnczozMyx2YXJpYWJsZUFyZ3M6ITB9O2Uuc2M9e2lkOnIuT1BTLnNldEZpbGxDb2xvcixudW1BcmdzOjQsdmFyaWFibGVBcmdzOiEwfTtlLnNjbj17aWQ6ci5PUFMuc2V0RmlsbENvbG9yTixudW1BcmdzOjMzLHZhcmlhYmxlQXJnczohMH07ZS5HPXtpZDpyLk9QUy5zZXRTdHJva2VHcmF5LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9O2UuZz17aWQ6ci5PUFMuc2V0RmlsbEdyYXksbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX07ZS5SRz17aWQ6ci5PUFMuc2V0U3Ryb2tlUkdCQ29sb3IsbnVtQXJnczozLHZhcmlhYmxlQXJnczohMX07ZS5yZz17aWQ6ci5PUFMuc2V0RmlsbFJHQkNvbG9yLG51bUFyZ3M6Myx2YXJpYWJsZUFyZ3M6ITF9O2UuSz17aWQ6ci5PUFMuc2V0U3Ryb2tlQ01ZS0NvbG9yLG51bUFyZ3M6NCx2YXJpYWJsZUFyZ3M6ITF9O2Uuaz17aWQ6ci5PUFMuc2V0RmlsbENNWUtDb2xvcixudW1BcmdzOjQsdmFyaWFibGVBcmdzOiExfTtlLnNoPXtpZDpyLk9QUy5zaGFkaW5nRmlsbCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfTtlLkJJPXtpZDpyLk9QUy5iZWdpbklubGluZUltYWdlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9O2UuSUQ9e2lkOnIuT1BTLmJlZ2luSW1hZ2VEYXRhLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9O2UuRUk9e2lkOnIuT1BTLmVuZElubGluZUltYWdlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9O2UuRG89e2lkOnIuT1BTLnBhaW50WE9iamVjdCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfTtlLk1QPXtpZDpyLk9QUy5tYXJrUG9pbnQsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX07ZS5EUD17aWQ6ci5PUFMubWFya1BvaW50UHJvcHMsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX07ZS5CTUM9e2lkOnIuT1BTLmJlZ2luTWFya2VkQ29udGVudCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfTtlLkJEQz17aWQ6ci5PUFMuYmVnaW5NYXJrZWRDb250ZW50UHJvcHMsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX07ZS5FTUM9e2lkOnIuT1BTLmVuZE1hcmtlZENvbnRlbnQsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX07ZS5CWD17aWQ6ci5PUFMuYmVnaW5Db21wYXQsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX07ZS5FWD17aWQ6ci5PUFMuZW5kQ29tcGF0LG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9O2UuQk09bnVsbDtlLkJEPW51bGw7ZS50cnVlPW51bGw7ZS5mYT1udWxsO2UuZmFsPW51bGw7ZS5mYWxzPW51bGw7ZS5mYWxzZT1udWxsO2UubnU9bnVsbDtlLm51bD1udWxsO2UubnVsbD1udWxsfSkpO3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJvcE1hcCIsZSgpKX1zdGF0aWMgZ2V0IE1BWF9JTlZBTElEX1BBVEhfT1BTKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsIk1BWF9JTlZBTElEX1BBVEhfT1BTIiwxMCl9Y29uc3RydWN0b3IoZSx0LGE9bmV3IFN0YXRlTWFuYWdlcil7dGhpcy5wYXJzZXI9bmV3IHAuUGFyc2VyKHtsZXhlcjpuZXcgcC5MZXhlcihlLEV2YWx1YXRvclByZXByb2Nlc3Nvci5vcE1hcCkseHJlZjp0fSk7dGhpcy5zdGF0ZU1hbmFnZXI9YTt0aGlzLm5vblByb2Nlc3NlZEFyZ3M9W107dGhpcy5faXNQYXRoT3A9ITE7dGhpcy5fbnVtSW52YWxpZFBhdGhPUFM9MH1nZXQgc2F2ZWRTdGF0ZXNEZXB0aCgpe3JldHVybiB0aGlzLnN0YXRlTWFuYWdlci5zdGF0ZVN0YWNrLmxlbmd0aH1yZWFkKGUpe2xldCB0PWUuYXJncztmb3IoOzspe2NvbnN0IGE9dGhpcy5wYXJzZXIuZ2V0T2JqKCk7aWYoYSBpbnN0YW5jZW9mIGkuQ21kKXtjb25zdCBuPWEuY21kLGk9RXZhbHVhdG9yUHJlcHJvY2Vzc29yLm9wTWFwW25dO2lmKCFpKXsoMCxyLndhcm4pKGBVbmtub3duIGNvbW1hbmQgIiR7bn0iLmApO2NvbnRpbnVlfWNvbnN0IHM9aS5pZCxvPWkubnVtQXJncztsZXQgYz1udWxsIT09dD90Lmxlbmd0aDowO3RoaXMuX2lzUGF0aE9wfHwodGhpcy5fbnVtSW52YWxpZFBhdGhPUFM9MCk7dGhpcy5faXNQYXRoT3A9cz49ci5PUFMubW92ZVRvJiZzPD1yLk9QUy5lbmRQYXRoO2lmKGkudmFyaWFibGVBcmdzKWM+byYmKDAsci5pbmZvKShgQ29tbWFuZCAke259OiBleHBlY3RlZCBbMCwgJHtvfV0gYXJncywgYnV0IHJlY2VpdmVkICR7Y30gYXJncy5gKTtlbHNle2lmKGMhPT1vKXtjb25zdCBlPXRoaXMubm9uUHJvY2Vzc2VkQXJncztmb3IoO2M+bzspe2UucHVzaCh0LnNoaWZ0KCkpO2MtLX1mb3IoO2M8byYmMCE9PWUubGVuZ3RoOyl7bnVsbD09PXQmJih0PVtdKTt0LnVuc2hpZnQoZS5wb3AoKSk7YysrfX1pZihjPG8pe2NvbnN0IGU9YGNvbW1hbmQgJHtufTogZXhwZWN0ZWQgJHtvfSBhcmdzLCBidXQgcmVjZWl2ZWQgJHtjfSBhcmdzLmA7aWYodGhpcy5faXNQYXRoT3AmJisrdGhpcy5fbnVtSW52YWxpZFBhdGhPUFM+RXZhbHVhdG9yUHJlcHJvY2Vzc29yLk1BWF9JTlZBTElEX1BBVEhfT1BTKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBJbnZhbGlkICR7ZX1gKTsoMCxyLndhcm4pKGBTa2lwcGluZyAke2V9YCk7bnVsbCE9PXQmJih0Lmxlbmd0aD0wKTtjb250aW51ZX19dGhpcy5wcmVwcm9jZXNzQ29tbWFuZChzLHQpO2UuZm49cztlLmFyZ3M9dDtyZXR1cm4hMH1pZihhPT09aS5FT0YpcmV0dXJuITE7aWYobnVsbCE9PWEpe251bGw9PT10JiYodD1bXSk7dC5wdXNoKGEpO2lmKHQubGVuZ3RoPjMzKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJUb28gbWFueSBhcmd1bWVudHMiKX19fXByZXByb2Nlc3NDb21tYW5kKGUsdCl7c3dpdGNoKDB8ZSl7Y2FzZSByLk9QUy5zYXZlOnRoaXMuc3RhdGVNYW5hZ2VyLnNhdmUoKTticmVhaztjYXNlIHIuT1BTLnJlc3RvcmU6dGhpcy5zdGF0ZU1hbmFnZXIucmVzdG9yZSgpO2JyZWFrO2Nhc2Ugci5PUFMudHJhbnNmb3JtOnRoaXMuc3RhdGVNYW5hZ2VyLnRyYW5zZm9ybSh0KX19fXQuRXZhbHVhdG9yUHJlcHJvY2Vzc29yPUV2YWx1YXRvclByZXByb2Nlc3Nvcn0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LklkZW50aXR5Q01hcD10LkNNYXBGYWN0b3J5PXQuQ01hcD12b2lkIDA7dmFyIHI9YSgyKSxuPWEoMyksaT1hKDUpLHM9YSgxNSksbz1hKDQpLGM9YSg4KTtjb25zdCBsPVsiQWRvYmUtR0IxLVVDUzIiLCJBZG9iZS1DTlMxLVVDUzIiLCJBZG9iZS1KYXBhbjEtVUNTMiIsIkFkb2JlLUtvcmVhMS1VQ1MyIiwiNzgtRVVDLUgiLCI3OC1FVUMtViIsIjc4LUgiLCI3OC1SS1NKLUgiLCI3OC1SS1NKLVYiLCI3OC1WIiwiNzhtcy1SS1NKLUgiLCI3OG1zLVJLU0otViIsIjgzcHYtUktTSi1IIiwiOTBtcy1SS1NKLUgiLCI5MG1zLVJLU0otViIsIjkwbXNwLVJLU0otSCIsIjkwbXNwLVJLU0otViIsIjkwcHYtUktTSi1IIiwiOTBwdi1SS1NKLVYiLCJBZGQtSCIsIkFkZC1SS1NKLUgiLCJBZGQtUktTSi1WIiwiQWRkLVYiLCJBZG9iZS1DTlMxLTAiLCJBZG9iZS1DTlMxLTEiLCJBZG9iZS1DTlMxLTIiLCJBZG9iZS1DTlMxLTMiLCJBZG9iZS1DTlMxLTQiLCJBZG9iZS1DTlMxLTUiLCJBZG9iZS1DTlMxLTYiLCJBZG9iZS1HQjEtMCIsIkFkb2JlLUdCMS0xIiwiQWRvYmUtR0IxLTIiLCJBZG9iZS1HQjEtMyIsIkFkb2JlLUdCMS00IiwiQWRvYmUtR0IxLTUiLCJBZG9iZS1KYXBhbjEtMCIsIkFkb2JlLUphcGFuMS0xIiwiQWRvYmUtSmFwYW4xLTIiLCJBZG9iZS1KYXBhbjEtMyIsIkFkb2JlLUphcGFuMS00IiwiQWRvYmUtSmFwYW4xLTUiLCJBZG9iZS1KYXBhbjEtNiIsIkFkb2JlLUtvcmVhMS0wIiwiQWRvYmUtS29yZWExLTEiLCJBZG9iZS1Lb3JlYTEtMiIsIkI1LUgiLCJCNS1WIiwiQjVwYy1IIiwiQjVwYy1WIiwiQ05TLUVVQy1IIiwiQ05TLUVVQy1WIiwiQ05TMS1IIiwiQ05TMS1WIiwiQ05TMi1IIiwiQ05TMi1WIiwiRVRISy1CNS1IIiwiRVRISy1CNS1WIiwiRVRlbi1CNS1IIiwiRVRlbi1CNS1WIiwiRVRlbm1zLUI1LUgiLCJFVGVubXMtQjUtViIsIkVVQy1IIiwiRVVDLVYiLCJFeHQtSCIsIkV4dC1SS1NKLUgiLCJFeHQtUktTSi1WIiwiRXh0LVYiLCJHQi1FVUMtSCIsIkdCLUVVQy1WIiwiR0ItSCIsIkdCLVYiLCJHQkstRVVDLUgiLCJHQkstRVVDLVYiLCJHQksySy1IIiwiR0JLMkstViIsIkdCS3AtRVVDLUgiLCJHQktwLUVVQy1WIiwiR0JULUVVQy1IIiwiR0JULUVVQy1WIiwiR0JULUgiLCJHQlQtViIsIkdCVHBjLUVVQy1IIiwiR0JUcGMtRVVDLVYiLCJHQnBjLUVVQy1IIiwiR0JwYy1FVUMtViIsIkgiLCJIS2RsYS1CNS1IIiwiSEtkbGEtQjUtViIsIkhLZGxiLUI1LUgiLCJIS2RsYi1CNS1WIiwiSEtnY2NzLUI1LUgiLCJIS2djY3MtQjUtViIsIkhLbTMxNC1CNS1IIiwiSEttMzE0LUI1LVYiLCJIS200NzEtQjUtSCIsIkhLbTQ3MS1CNS1WIiwiSEtzY3MtQjUtSCIsIkhLc2NzLUI1LVYiLCJIYW5rYWt1IiwiSGlyYWdhbmEiLCJLU0MtRVVDLUgiLCJLU0MtRVVDLVYiLCJLU0MtSCIsIktTQy1Kb2hhYi1IIiwiS1NDLUpvaGFiLVYiLCJLU0MtViIsIktTQ21zLVVIQy1IIiwiS1NDbXMtVUhDLUhXLUgiLCJLU0Ntcy1VSEMtSFctViIsIktTQ21zLVVIQy1WIiwiS1NDcGMtRVVDLUgiLCJLU0NwYy1FVUMtViIsIkthdGFrYW5hIiwiTldQLUgiLCJOV1AtViIsIlJLU0otSCIsIlJLU0otViIsIlJvbWFuIiwiVW5pQ05TLVVDUzItSCIsIlVuaUNOUy1VQ1MyLVYiLCJVbmlDTlMtVVRGMTYtSCIsIlVuaUNOUy1VVEYxNi1WIiwiVW5pQ05TLVVURjMyLUgiLCJVbmlDTlMtVVRGMzItViIsIlVuaUNOUy1VVEY4LUgiLCJVbmlDTlMtVVRGOC1WIiwiVW5pR0ItVUNTMi1IIiwiVW5pR0ItVUNTMi1WIiwiVW5pR0ItVVRGMTYtSCIsIlVuaUdCLVVURjE2LVYiLCJVbmlHQi1VVEYzMi1IIiwiVW5pR0ItVVRGMzItViIsIlVuaUdCLVVURjgtSCIsIlVuaUdCLVVURjgtViIsIlVuaUpJUy1VQ1MyLUgiLCJVbmlKSVMtVUNTMi1IVy1IIiwiVW5pSklTLVVDUzItSFctViIsIlVuaUpJUy1VQ1MyLVYiLCJVbmlKSVMtVVRGMTYtSCIsIlVuaUpJUy1VVEYxNi1WIiwiVW5pSklTLVVURjMyLUgiLCJVbmlKSVMtVVRGMzItViIsIlVuaUpJUy1VVEY4LUgiLCJVbmlKSVMtVVRGOC1WIiwiVW5pSklTMjAwNC1VVEYxNi1IIiwiVW5pSklTMjAwNC1VVEYxNi1WIiwiVW5pSklTMjAwNC1VVEYzMi1IIiwiVW5pSklTMjAwNC1VVEYzMi1WIiwiVW5pSklTMjAwNC1VVEY4LUgiLCJVbmlKSVMyMDA0LVVURjgtViIsIlVuaUpJU1Byby1VQ1MyLUhXLVYiLCJVbmlKSVNQcm8tVUNTMi1WIiwiVW5pSklTUHJvLVVURjgtViIsIlVuaUpJU1gwMjEzLVVURjMyLUgiLCJVbmlKSVNYMDIxMy1VVEYzMi1WIiwiVW5pSklTWDAyMTMyMDA0LVVURjMyLUgiLCJVbmlKSVNYMDIxMzIwMDQtVVRGMzItViIsIlVuaUtTLVVDUzItSCIsIlVuaUtTLVVDUzItViIsIlVuaUtTLVVURjE2LUgiLCJVbmlLUy1VVEYxNi1WIiwiVW5pS1MtVVRGMzItSCIsIlVuaUtTLVVURjMyLVYiLCJVbmlLUy1VVEY4LUgiLCJVbmlLUy1VVEY4LVYiLCJWIiwiV1AtU3ltYm9sIl0saD0yKioyNC0xO2NsYXNzIENNYXB7Y29uc3RydWN0b3IoZT0hMSl7dGhpcy5jb2Rlc3BhY2VSYW5nZXM9W1tdLFtdLFtdLFtdXTt0aGlzLm51bUNvZGVzcGFjZVJhbmdlcz0wO3RoaXMuX21hcD1bXTt0aGlzLm5hbWU9IiI7dGhpcy52ZXJ0aWNhbD0hMTt0aGlzLnVzZUNNYXA9bnVsbDt0aGlzLmJ1aWx0SW5DTWFwPWV9YWRkQ29kZXNwYWNlUmFuZ2UoZSx0LGEpe3RoaXMuY29kZXNwYWNlUmFuZ2VzW2UtMV0ucHVzaCh0LGEpO3RoaXMubnVtQ29kZXNwYWNlUmFuZ2VzKyt9bWFwQ2lkUmFuZ2UoZSx0LGEpe2lmKHQtZT5oKXRocm93IG5ldyBFcnJvcigibWFwQ2lkUmFuZ2UgLSBpZ25vcmluZyBkYXRhIGFib3ZlIE1BWF9NQVBfUkFOR0UuIik7Zm9yKDtlPD10Oyl0aGlzLl9tYXBbZSsrXT1hKyt9bWFwQmZSYW5nZShlLHQsYSl7aWYodC1lPmgpdGhyb3cgbmV3IEVycm9yKCJtYXBCZlJhbmdlIC0gaWdub3JpbmcgZGF0YSBhYm92ZSBNQVhfTUFQX1JBTkdFLiIpO2NvbnN0IHI9YS5sZW5ndGgtMTtmb3IoO2U8PXQ7KXt0aGlzLl9tYXBbZSsrXT1hO2NvbnN0IHQ9YS5jaGFyQ29kZUF0KHIpKzE7dD4yNTU/YT1hLnN1YnN0cmluZygwLHItMSkrU3RyaW5nLmZyb21DaGFyQ29kZShhLmNoYXJDb2RlQXQoci0xKSsxKSsiXDAiOmE9YS5zdWJzdHJpbmcoMCxyKStTdHJpbmcuZnJvbUNoYXJDb2RlKHQpfX1tYXBCZlJhbmdlVG9BcnJheShlLHQsYSl7aWYodC1lPmgpdGhyb3cgbmV3IEVycm9yKCJtYXBCZlJhbmdlVG9BcnJheSAtIGlnbm9yaW5nIGRhdGEgYWJvdmUgTUFYX01BUF9SQU5HRS4iKTtjb25zdCByPWEubGVuZ3RoO2xldCBuPTA7Zm9yKDtlPD10JiZuPHI7KXt0aGlzLl9tYXBbZV09YVtuKytdOysrZX19bWFwT25lKGUsdCl7dGhpcy5fbWFwW2VdPXR9bG9va3VwKGUpe3JldHVybiB0aGlzLl9tYXBbZV19Y29udGFpbnMoZSl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX21hcFtlXX1mb3JFYWNoKGUpe2NvbnN0IHQ9dGhpcy5fbWFwLGE9dC5sZW5ndGg7aWYoYTw9NjU1MzYpZm9yKGxldCByPTA7cjxhO3IrKyl2b2lkIDAhPT10W3JdJiZlKHIsdFtyXSk7ZWxzZSBmb3IoY29uc3QgYSBpbiB0KWUoYSx0W2FdKX1jaGFyQ29kZU9mKGUpe2NvbnN0IHQ9dGhpcy5fbWFwO2lmKHQubGVuZ3RoPD02NTUzNilyZXR1cm4gdC5pbmRleE9mKGUpO2Zvcihjb25zdCBhIGluIHQpaWYodFthXT09PWUpcmV0dXJuIDB8YTtyZXR1cm4tMX1nZXRNYXAoKXtyZXR1cm4gdGhpcy5fbWFwfXJlYWRDaGFyQ29kZShlLHQsYSl7bGV0IHI9MDtjb25zdCBuPXRoaXMuY29kZXNwYWNlUmFuZ2VzO2ZvcihsZXQgaT0wLHM9bi5sZW5ndGg7aTxzO2krKyl7cj0ocjw8OHxlLmNoYXJDb2RlQXQodCtpKSk+Pj4wO2NvbnN0IHM9bltpXTtmb3IobGV0IGU9MCx0PXMubGVuZ3RoO2U8dDspe2NvbnN0IHQ9c1tlKytdLG49c1tlKytdO2lmKHI+PXQmJnI8PW4pe2EuY2hhcmNvZGU9cjthLmxlbmd0aD1pKzE7cmV0dXJufX19YS5jaGFyY29kZT0wO2EubGVuZ3RoPTF9Z2V0Q2hhckNvZGVMZW5ndGgoZSl7Y29uc3QgdD10aGlzLmNvZGVzcGFjZVJhbmdlcztmb3IobGV0IGE9MCxyPXQubGVuZ3RoO2E8cjthKyspe2NvbnN0IHI9dFthXTtmb3IobGV0IHQ9MCxuPXIubGVuZ3RoO3Q8bjspe2NvbnN0IG49clt0KytdLGk9clt0KytdO2lmKGU+PW4mJmU8PWkpcmV0dXJuIGErMX19cmV0dXJuIDF9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9tYXAubGVuZ3RofWdldCBpc0lkZW50aXR5Q01hcCgpe2lmKCJJZGVudGl0eS1IIiE9PXRoaXMubmFtZSYmIklkZW50aXR5LVYiIT09dGhpcy5uYW1lKXJldHVybiExO2lmKDY1NTM2IT09dGhpcy5fbWFwLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGU9MDtlPDY1NTM2O2UrKylpZih0aGlzLl9tYXBbZV0hPT1lKXJldHVybiExO3JldHVybiEwfX10LkNNYXA9Q01hcDtjbGFzcyBJZGVudGl0eUNNYXAgZXh0ZW5kcyBDTWFwe2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoKTt0aGlzLnZlcnRpY2FsPWU7dGhpcy5hZGRDb2Rlc3BhY2VSYW5nZSh0LDAsNjU1MzUpfW1hcENpZFJhbmdlKGUsdCxhKXsoMCxyLnVucmVhY2hhYmxlKSgic2hvdWxkIG5vdCBjYWxsIG1hcENpZFJhbmdlIil9bWFwQmZSYW5nZShlLHQsYSl7KDAsci51bnJlYWNoYWJsZSkoInNob3VsZCBub3QgY2FsbCBtYXBCZlJhbmdlIil9bWFwQmZSYW5nZVRvQXJyYXkoZSx0LGEpeygwLHIudW5yZWFjaGFibGUpKCJzaG91bGQgbm90IGNhbGwgbWFwQmZSYW5nZVRvQXJyYXkiKX1tYXBPbmUoZSx0KXsoMCxyLnVucmVhY2hhYmxlKSgic2hvdWxkIG5vdCBjYWxsIG1hcENpZE9uZSIpfWxvb2t1cChlKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihlKSYmZTw9NjU1MzU/ZTp2b2lkIDB9Y29udGFpbnMoZSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZSkmJmU8PTY1NTM1fWZvckVhY2goZSl7Zm9yKGxldCB0PTA7dDw9NjU1MzU7dCsrKWUodCx0KX1jaGFyQ29kZU9mKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPD02NTUzNT9lOi0xfWdldE1hcCgpe2NvbnN0IGU9bmV3IEFycmF5KDY1NTM2KTtmb3IobGV0IHQ9MDt0PD02NTUzNTt0KyspZVt0XT10O3JldHVybiBlfWdldCBsZW5ndGgoKXtyZXR1cm4gNjU1MzZ9Z2V0IGlzSWRlbnRpdHlDTWFwKCl7KDAsci51bnJlYWNoYWJsZSkoInNob3VsZCBub3QgYWNjZXNzIC5pc0lkZW50aXR5Q01hcCIpfX10LklkZW50aXR5Q01hcD1JZGVudGl0eUNNYXA7Y29uc3QgdT1mdW5jdGlvbiBCaW5hcnlDTWFwUmVhZGVyQ2xvc3VyZSgpe2Z1bmN0aW9uIGhleFRvSW50KGUsdCl7bGV0IGE9MDtmb3IobGV0IHI9MDtyPD10O3IrKylhPWE8PDh8ZVtyXTtyZXR1cm4gYT4+PjB9ZnVuY3Rpb24gaGV4VG9TdHIoZSx0KXtyZXR1cm4gMT09PXQ/U3RyaW5nLmZyb21DaGFyQ29kZShlWzBdLGVbMV0pOjM9PT10P1N0cmluZy5mcm9tQ2hhckNvZGUoZVswXSxlWzFdLGVbMl0sZVszXSk6U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGUuc3ViYXJyYXkoMCx0KzEpKX1mdW5jdGlvbiBhZGRIZXgoZSx0LGEpe2xldCByPTA7Zm9yKGxldCBuPWE7bj49MDtuLS0pe3IrPWVbbl0rdFtuXTtlW25dPTI1NSZyO3I+Pj04fX1mdW5jdGlvbiBpbmNIZXgoZSx0KXtsZXQgYT0xO2ZvcihsZXQgcj10O3I+PTAmJmE+MDtyLS0pe2ErPWVbcl07ZVtyXT0yNTUmYTthPj49OH19Y29uc3QgZT0xNjtjbGFzcyBCaW5hcnlDTWFwU3RyZWFte2NvbnN0cnVjdG9yKGUpe3RoaXMuYnVmZmVyPWU7dGhpcy5wb3M9MDt0aGlzLmVuZD1lLmxlbmd0aDt0aGlzLnRtcEJ1Zj1uZXcgVWludDhBcnJheSgxOSl9cmVhZEJ5dGUoKXtyZXR1cm4gdGhpcy5wb3M+PXRoaXMuZW5kPy0xOnRoaXMuYnVmZmVyW3RoaXMucG9zKytdfXJlYWROdW1iZXIoKXtsZXQgZSx0PTA7ZG97Y29uc3QgYT10aGlzLnJlYWRCeXRlKCk7aWYoYTwwKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJ1bmV4cGVjdGVkIEVPRiBpbiBiY21hcCIpO2U9ISgxMjgmYSk7dD10PDw3fDEyNyZhfXdoaWxlKCFlKTtyZXR1cm4gdH1yZWFkU2lnbmVkKCl7Y29uc3QgZT10aGlzLnJlYWROdW1iZXIoKTtyZXR1cm4gMSZlP34oZT4+PjEpOmU+Pj4xfXJlYWRIZXgoZSx0KXtlLnNldCh0aGlzLmJ1ZmZlci5zdWJhcnJheSh0aGlzLnBvcyx0aGlzLnBvcyt0KzEpKTt0aGlzLnBvcys9dCsxfXJlYWRIZXhOdW1iZXIoZSx0KXtsZXQgYTtjb25zdCBuPXRoaXMudG1wQnVmO2xldCBpPTA7ZG97Y29uc3QgZT10aGlzLnJlYWRCeXRlKCk7aWYoZTwwKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJ1bmV4cGVjdGVkIEVPRiBpbiBiY21hcCIpO2E9ISgxMjgmZSk7bltpKytdPTEyNyZlfXdoaWxlKCFhKTtsZXQgcz10LG89MCxjPTA7Zm9yKDtzPj0wOyl7Zm9yKDtjPDgmJm4ubGVuZ3RoPjA7KXtvfD1uWy0taV08PGM7Yys9N31lW3NdPTI1NSZvO3MtLTtvPj49ODtjLT04fX1yZWFkSGV4U2lnbmVkKGUsdCl7dGhpcy5yZWFkSGV4TnVtYmVyKGUsdCk7Y29uc3QgYT0xJmVbdF0/MjU1OjA7bGV0IHI9MDtmb3IobGV0IG49MDtuPD10O24rKyl7cj0oMSZyKTw8OHxlW25dO2Vbbl09cj4+MV5hfX1yZWFkU3RyaW5nKCl7Y29uc3QgZT10aGlzLnJlYWROdW1iZXIoKTtsZXQgdD0iIjtmb3IobGV0IGE9MDthPGU7YSsrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5yZWFkTnVtYmVyKCkpO3JldHVybiB0fX1yZXR1cm4gY2xhc3MgQmluYXJ5Q01hcFJlYWRlcnthc3luYyBwcm9jZXNzKHQsYSxyKXtjb25zdCBuPW5ldyBCaW5hcnlDTWFwU3RyZWFtKHQpLGk9bi5yZWFkQnl0ZSgpO2EudmVydGljYWw9ISEoMSZpKTtsZXQgcz1udWxsO2NvbnN0IG89bmV3IFVpbnQ4QXJyYXkoZSksYz1uZXcgVWludDhBcnJheShlKSxsPW5ldyBVaW50OEFycmF5KGUpLGg9bmV3IFVpbnQ4QXJyYXkoZSksdT1uZXcgVWludDhBcnJheShlKTtsZXQgZCxmO2Zvcig7KGY9bi5yZWFkQnl0ZSgpKT49MDspe2NvbnN0IHQ9Zj4+NTtpZig3PT09dCl7c3dpdGNoKDMxJmYpe2Nhc2UgMDpuLnJlYWRTdHJpbmcoKTticmVhaztjYXNlIDE6cz1uLnJlYWRTdHJpbmcoKX1jb250aW51ZX1jb25zdCByPSEhKDE2JmYpLGk9MTUmZjtpZihpKzE+ZSl0aHJvdyBuZXcgRXJyb3IoIkJpbmFyeUNNYXBSZWFkZXIucHJvY2VzczogSW52YWxpZCBkYXRhU2l6ZS4iKTtjb25zdCBnPTEscD1uLnJlYWROdW1iZXIoKTtzd2l0Y2godCl7Y2FzZSAwOm4ucmVhZEhleChvLGkpO24ucmVhZEhleE51bWJlcihjLGkpO2FkZEhleChjLG8saSk7YS5hZGRDb2Rlc3BhY2VSYW5nZShpKzEsaGV4VG9JbnQobyxpKSxoZXhUb0ludChjLGkpKTtmb3IobGV0IGU9MTtlPHA7ZSsrKXtpbmNIZXgoYyxpKTtuLnJlYWRIZXhOdW1iZXIobyxpKTthZGRIZXgobyxjLGkpO24ucmVhZEhleE51bWJlcihjLGkpO2FkZEhleChjLG8saSk7YS5hZGRDb2Rlc3BhY2VSYW5nZShpKzEsaGV4VG9JbnQobyxpKSxoZXhUb0ludChjLGkpKX1icmVhaztjYXNlIDE6bi5yZWFkSGV4KG8saSk7bi5yZWFkSGV4TnVtYmVyKGMsaSk7YWRkSGV4KGMsbyxpKTtuLnJlYWROdW1iZXIoKTtmb3IobGV0IGU9MTtlPHA7ZSsrKXtpbmNIZXgoYyxpKTtuLnJlYWRIZXhOdW1iZXIobyxpKTthZGRIZXgobyxjLGkpO24ucmVhZEhleE51bWJlcihjLGkpO2FkZEhleChjLG8saSk7bi5yZWFkTnVtYmVyKCl9YnJlYWs7Y2FzZSAyOm4ucmVhZEhleChsLGkpO2Q9bi5yZWFkTnVtYmVyKCk7YS5tYXBPbmUoaGV4VG9JbnQobCxpKSxkKTtmb3IobGV0IGU9MTtlPHA7ZSsrKXtpbmNIZXgobCxpKTtpZighcil7bi5yZWFkSGV4TnVtYmVyKHUsaSk7YWRkSGV4KGwsdSxpKX1kPW4ucmVhZFNpZ25lZCgpKyhkKzEpO2EubWFwT25lKGhleFRvSW50KGwsaSksZCl9YnJlYWs7Y2FzZSAzOm4ucmVhZEhleChvLGkpO24ucmVhZEhleE51bWJlcihjLGkpO2FkZEhleChjLG8saSk7ZD1uLnJlYWROdW1iZXIoKTthLm1hcENpZFJhbmdlKGhleFRvSW50KG8saSksaGV4VG9JbnQoYyxpKSxkKTtmb3IobGV0IGU9MTtlPHA7ZSsrKXtpbmNIZXgoYyxpKTtpZihyKW8uc2V0KGMpO2Vsc2V7bi5yZWFkSGV4TnVtYmVyKG8saSk7YWRkSGV4KG8sYyxpKX1uLnJlYWRIZXhOdW1iZXIoYyxpKTthZGRIZXgoYyxvLGkpO2Q9bi5yZWFkTnVtYmVyKCk7YS5tYXBDaWRSYW5nZShoZXhUb0ludChvLGkpLGhleFRvSW50KGMsaSksZCl9YnJlYWs7Y2FzZSA0Om4ucmVhZEhleChsLGcpO24ucmVhZEhleChoLGkpO2EubWFwT25lKGhleFRvSW50KGwsZyksaGV4VG9TdHIoaCxpKSk7Zm9yKGxldCBlPTE7ZTxwO2UrKyl7aW5jSGV4KGwsZyk7aWYoIXIpe24ucmVhZEhleE51bWJlcih1LGcpO2FkZEhleChsLHUsZyl9aW5jSGV4KGgsaSk7bi5yZWFkSGV4U2lnbmVkKHUsaSk7YWRkSGV4KGgsdSxpKTthLm1hcE9uZShoZXhUb0ludChsLGcpLGhleFRvU3RyKGgsaSkpfWJyZWFrO2Nhc2UgNTpuLnJlYWRIZXgobyxnKTtuLnJlYWRIZXhOdW1iZXIoYyxnKTthZGRIZXgoYyxvLGcpO24ucmVhZEhleChoLGkpO2EubWFwQmZSYW5nZShoZXhUb0ludChvLGcpLGhleFRvSW50KGMsZyksaGV4VG9TdHIoaCxpKSk7Zm9yKGxldCBlPTE7ZTxwO2UrKyl7aW5jSGV4KGMsZyk7aWYocilvLnNldChjKTtlbHNle24ucmVhZEhleE51bWJlcihvLGcpO2FkZEhleChvLGMsZyl9bi5yZWFkSGV4TnVtYmVyKGMsZyk7YWRkSGV4KGMsbyxnKTtuLnJlYWRIZXgoaCxpKTthLm1hcEJmUmFuZ2UoaGV4VG9JbnQobyxnKSxoZXhUb0ludChjLGcpLGhleFRvU3RyKGgsaSkpfWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBCaW5hcnlDTWFwUmVhZGVyLnByb2Nlc3MgLSB1bmtub3duIHR5cGU6ICR7dH1gKX19cmV0dXJuIHM/cihzKTphfX19KCksZD1mdW5jdGlvbiBDTWFwRmFjdG9yeUNsb3N1cmUoKXtmdW5jdGlvbiBzdHJUb0ludChlKXtsZXQgdD0wO2ZvcihsZXQgYT0wO2E8ZS5sZW5ndGg7YSsrKXQ9dDw8OHxlLmNoYXJDb2RlQXQoYSk7cmV0dXJuIHQ+Pj4wfWZ1bmN0aW9uIGV4cGVjdFN0cmluZyhlKXtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIk1hbGZvcm1lZCBDTWFwOiBleHBlY3RlZCBzdHJpbmcuIil9ZnVuY3Rpb24gZXhwZWN0SW50KGUpe2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGUpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJNYWxmb3JtZWQgQ01hcDogZXhwZWN0ZWQgaW50LiIpfWZ1bmN0aW9uIHBhcnNlQmZDaGFyKGUsdCl7Zm9yKDs7KXtsZXQgYT10LmdldE9iaigpO2lmKGE9PT1uLkVPRilicmVhaztpZigoMCxuLmlzQ21kKShhLCJlbmRiZmNoYXIiKSlyZXR1cm47ZXhwZWN0U3RyaW5nKGEpO2NvbnN0IHI9c3RyVG9JbnQoYSk7YT10LmdldE9iaigpO2V4cGVjdFN0cmluZyhhKTtjb25zdCBpPWE7ZS5tYXBPbmUocixpKX19ZnVuY3Rpb24gcGFyc2VCZlJhbmdlKGUsdCl7Zm9yKDs7KXtsZXQgYT10LmdldE9iaigpO2lmKGE9PT1uLkVPRilicmVhaztpZigoMCxuLmlzQ21kKShhLCJlbmRiZnJhbmdlIikpcmV0dXJuO2V4cGVjdFN0cmluZyhhKTtjb25zdCByPXN0clRvSW50KGEpO2E9dC5nZXRPYmooKTtleHBlY3RTdHJpbmcoYSk7Y29uc3QgaT1zdHJUb0ludChhKTthPXQuZ2V0T2JqKCk7aWYoTnVtYmVyLmlzSW50ZWdlcihhKXx8InN0cmluZyI9PXR5cGVvZiBhKXtjb25zdCB0PU51bWJlci5pc0ludGVnZXIoYSk/U3RyaW5nLmZyb21DaGFyQ29kZShhKTphO2UubWFwQmZSYW5nZShyLGksdCl9ZWxzZXtpZighKDAsbi5pc0NtZCkoYSwiWyIpKWJyZWFrO3thPXQuZ2V0T2JqKCk7Y29uc3Qgcz1bXTtmb3IoOyEoMCxuLmlzQ21kKShhLCJdIikmJmEhPT1uLkVPRjspe3MucHVzaChhKTthPXQuZ2V0T2JqKCl9ZS5tYXBCZlJhbmdlVG9BcnJheShyLGkscyl9fX10aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiSW52YWxpZCBiZiByYW5nZS4iKX1mdW5jdGlvbiBwYXJzZUNpZENoYXIoZSx0KXtmb3IoOzspe2xldCBhPXQuZ2V0T2JqKCk7aWYoYT09PW4uRU9GKWJyZWFrO2lmKCgwLG4uaXNDbWQpKGEsImVuZGNpZGNoYXIiKSlyZXR1cm47ZXhwZWN0U3RyaW5nKGEpO2NvbnN0IHI9c3RyVG9JbnQoYSk7YT10LmdldE9iaigpO2V4cGVjdEludChhKTtjb25zdCBpPWE7ZS5tYXBPbmUocixpKX19ZnVuY3Rpb24gcGFyc2VDaWRSYW5nZShlLHQpe2Zvcig7Oyl7bGV0IGE9dC5nZXRPYmooKTtpZihhPT09bi5FT0YpYnJlYWs7aWYoKDAsbi5pc0NtZCkoYSwiZW5kY2lkcmFuZ2UiKSlyZXR1cm47ZXhwZWN0U3RyaW5nKGEpO2NvbnN0IHI9c3RyVG9JbnQoYSk7YT10LmdldE9iaigpO2V4cGVjdFN0cmluZyhhKTtjb25zdCBpPXN0clRvSW50KGEpO2E9dC5nZXRPYmooKTtleHBlY3RJbnQoYSk7Y29uc3Qgcz1hO2UubWFwQ2lkUmFuZ2UocixpLHMpfX1mdW5jdGlvbiBwYXJzZUNvZGVzcGFjZVJhbmdlKGUsdCl7Zm9yKDs7KXtsZXQgYT10LmdldE9iaigpO2lmKGE9PT1uLkVPRilicmVhaztpZigoMCxuLmlzQ21kKShhLCJlbmRjb2Rlc3BhY2VyYW5nZSIpKXJldHVybjtpZigic3RyaW5nIiE9dHlwZW9mIGEpYnJlYWs7Y29uc3Qgcj1zdHJUb0ludChhKTthPXQuZ2V0T2JqKCk7aWYoInN0cmluZyIhPXR5cGVvZiBhKWJyZWFrO2NvbnN0IGk9c3RyVG9JbnQoYSk7ZS5hZGRDb2Rlc3BhY2VSYW5nZShhLmxlbmd0aCxyLGkpfXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJJbnZhbGlkIGNvZGVzcGFjZSByYW5nZS4iKX1mdW5jdGlvbiBwYXJzZVdNb2RlKGUsdCl7Y29uc3QgYT10LmdldE9iaigpO051bWJlci5pc0ludGVnZXIoYSkmJihlLnZlcnRpY2FsPSEhYSl9ZnVuY3Rpb24gcGFyc2VDTWFwTmFtZShlLHQpe2NvbnN0IGE9dC5nZXRPYmooKTthIGluc3RhbmNlb2Ygbi5OYW1lJiYoZS5uYW1lPWEubmFtZSl9YXN5bmMgZnVuY3Rpb24gcGFyc2VDTWFwKGUsdCxhLGkpe2xldCBzLGM7ZTpmb3IoOzspdHJ5e2NvbnN0IGE9dC5nZXRPYmooKTtpZihhPT09bi5FT0YpYnJlYWs7aWYoYSBpbnN0YW5jZW9mIG4uTmFtZSl7IldNb2RlIj09PWEubmFtZT9wYXJzZVdNb2RlKGUsdCk6IkNNYXBOYW1lIj09PWEubmFtZSYmcGFyc2VDTWFwTmFtZShlLHQpO3M9YX1lbHNlIGlmKGEgaW5zdGFuY2VvZiBuLkNtZClzd2l0Y2goYS5jbWQpe2Nhc2UiZW5kY21hcCI6YnJlYWsgZTtjYXNlInVzZWNtYXAiOnMgaW5zdGFuY2VvZiBuLk5hbWUmJihjPXMubmFtZSk7YnJlYWs7Y2FzZSJiZWdpbmNvZGVzcGFjZXJhbmdlIjpwYXJzZUNvZGVzcGFjZVJhbmdlKGUsdCk7YnJlYWs7Y2FzZSJiZWdpbmJmY2hhciI6cGFyc2VCZkNoYXIoZSx0KTticmVhaztjYXNlImJlZ2luY2lkY2hhciI6cGFyc2VDaWRDaGFyKGUsdCk7YnJlYWs7Y2FzZSJiZWdpbmJmcmFuZ2UiOnBhcnNlQmZSYW5nZShlLHQpO2JyZWFrO2Nhc2UiYmVnaW5jaWRyYW5nZSI6cGFyc2VDaWRSYW5nZShlLHQpfX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygby5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLHIud2FybikoIkludmFsaWQgY01hcCBkYXRhOiAiK2UpO2NvbnRpbnVlfSFpJiZjJiYoaT1jKTtyZXR1cm4gaT9leHRlbmRDTWFwKGUsYSxpKTplfWFzeW5jIGZ1bmN0aW9uIGV4dGVuZENNYXAoZSx0LGEpe2UudXNlQ01hcD1hd2FpdCBjcmVhdGVCdWlsdEluQ01hcChhLHQpO2lmKDA9PT1lLm51bUNvZGVzcGFjZVJhbmdlcyl7Y29uc3QgdD1lLnVzZUNNYXAuY29kZXNwYWNlUmFuZ2VzO2ZvcihsZXQgYT0wO2E8dC5sZW5ndGg7YSsrKWUuY29kZXNwYWNlUmFuZ2VzW2FdPXRbYV0uc2xpY2UoKTtlLm51bUNvZGVzcGFjZVJhbmdlcz1lLnVzZUNNYXAubnVtQ29kZXNwYWNlUmFuZ2VzfWUudXNlQ01hcC5mb3JFYWNoKChmdW5jdGlvbih0LGEpe2UuY29udGFpbnModCl8fGUubWFwT25lKHQsZS51c2VDTWFwLmxvb2t1cCh0KSl9KSk7cmV0dXJuIGV9YXN5bmMgZnVuY3Rpb24gY3JlYXRlQnVpbHRJbkNNYXAoZSx0KXtpZigiSWRlbnRpdHktSCI9PT1lKXJldHVybiBuZXcgSWRlbnRpdHlDTWFwKCExLDIpO2lmKCJJZGVudGl0eS1WIj09PWUpcmV0dXJuIG5ldyBJZGVudGl0eUNNYXAoITAsMik7aWYoIWwuaW5jbHVkZXMoZSkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIENNYXAgbmFtZTogIitlKTtpZighdCl0aHJvdyBuZXcgRXJyb3IoIkJ1aWx0LWluIENNYXAgcGFyYW1ldGVycyBhcmUgbm90IHByb3ZpZGVkLiIpO2NvbnN0e2NNYXBEYXRhOmEsY29tcHJlc3Npb25UeXBlOm59PWF3YWl0IHQoZSksaT1uZXcgQ01hcCghMCk7aWYobj09PXIuQ01hcENvbXByZXNzaW9uVHlwZS5CSU5BUlkpcmV0dXJuKG5ldyB1KS5wcm9jZXNzKGEsaSwoZT0+ZXh0ZW5kQ01hcChpLHQsZSkpKTtpZihuPT09ci5DTWFwQ29tcHJlc3Npb25UeXBlLk5PTkUpe2NvbnN0IGU9bmV3IHMuTGV4ZXIobmV3IGMuU3RyZWFtKGEpKTtyZXR1cm4gcGFyc2VDTWFwKGksZSx0LG51bGwpfXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBDTWFwICJjb21wcmVzc2lvblR5cGUiIHZhbHVlOiAke259YCl9cmV0dXJue2FzeW5jIGNyZWF0ZShlKXtjb25zdCB0PWUuZW5jb2RpbmcsYT1lLmZldGNoQnVpbHRJbkNNYXAscj1lLnVzZUNNYXA7aWYodCBpbnN0YW5jZW9mIG4uTmFtZSlyZXR1cm4gY3JlYXRlQnVpbHRJbkNNYXAodC5uYW1lLGEpO2lmKHQgaW5zdGFuY2VvZiBpLkJhc2VTdHJlYW0pe2NvbnN0IGU9YXdhaXQgcGFyc2VDTWFwKG5ldyBDTWFwLG5ldyBzLkxleGVyKHQpLGEscik7cmV0dXJuIGUuaXNJZGVudGl0eUNNYXA/Y3JlYXRlQnVpbHRJbkNNYXAoZS5uYW1lLGEpOmV9dGhyb3cgbmV3IEVycm9yKCJFbmNvZGluZyByZXF1aXJlZC4iKX19fSgpO3QuQ01hcEZhY3Rvcnk9ZH0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlBhcnNlcj10LkxpbmVhcml6YXRpb249dC5MZXhlcj12b2lkIDA7dmFyIHI9YSgyKSxuPWEoMyksaT1hKDQpLHM9YSgxNiksbz1hKDE4KSxjPWEoMTkpLGw9YSgyMSksaD1hKDIyKSx1PWEoMjUpLGQ9YSgyNyksZj1hKDI5KSxnPWEoOCkscD1hKDMwKSxtPWEoMzEpO2Z1bmN0aW9uIGNvbXB1dGVBZGxlcjMyKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IGE9MSxyPTA7Zm9yKGxldCBuPTA7bjx0Oysrbil7YSs9MjU1JmVbbl07cis9YX1yZXR1cm4gciU2NTUyMTw8MTZ8YSU2NTUyMX1jbGFzcyBQYXJzZXJ7Y29uc3RydWN0b3Ioe2xleGVyOmUseHJlZjp0LGFsbG93U3RyZWFtczphPSExLHJlY292ZXJ5TW9kZTpyPSExfSl7dGhpcy5sZXhlcj1lO3RoaXMueHJlZj10O3RoaXMuYWxsb3dTdHJlYW1zPWE7dGhpcy5yZWNvdmVyeU1vZGU9cjt0aGlzLmltYWdlQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLnJlZmlsbCgpfXJlZmlsbCgpe3RoaXMuYnVmMT10aGlzLmxleGVyLmdldE9iaigpO3RoaXMuYnVmMj10aGlzLmxleGVyLmdldE9iaigpfXNoaWZ0KCl7aWYodGhpcy5idWYyIGluc3RhbmNlb2Ygbi5DbWQmJiJJRCI9PT10aGlzLmJ1ZjIuY21kKXt0aGlzLmJ1ZjE9dGhpcy5idWYyO3RoaXMuYnVmMj1udWxsfWVsc2V7dGhpcy5idWYxPXRoaXMuYnVmMjt0aGlzLmJ1ZjI9dGhpcy5sZXhlci5nZXRPYmooKX19dHJ5U2hpZnQoKXt0cnl7dGhpcy5zaGlmdCgpO3JldHVybiEwfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7cmV0dXJuITF9fWdldE9iaihlPW51bGwpe2NvbnN0IHQ9dGhpcy5idWYxO3RoaXMuc2hpZnQoKTtpZih0IGluc3RhbmNlb2Ygbi5DbWQpc3dpdGNoKHQuY21kKXtjYXNlIkJJIjpyZXR1cm4gdGhpcy5tYWtlSW5saW5lSW1hZ2UoZSk7Y2FzZSJbIjpjb25zdCBhPVtdO2Zvcig7ISgwLG4uaXNDbWQpKHRoaXMuYnVmMSwiXSIpJiZ0aGlzLmJ1ZjEhPT1uLkVPRjspYS5wdXNoKHRoaXMuZ2V0T2JqKGUpKTtpZih0aGlzLmJ1ZjE9PT1uLkVPRil7aWYodGhpcy5yZWNvdmVyeU1vZGUpcmV0dXJuIGE7dGhyb3cgbmV3IGkuUGFyc2VyRU9GRXhjZXB0aW9uKCJFbmQgb2YgZmlsZSBpbnNpZGUgYXJyYXkuIil9dGhpcy5zaGlmdCgpO3JldHVybiBhO2Nhc2UiPDwiOmNvbnN0IHM9bmV3IG4uRGljdCh0aGlzLnhyZWYpO2Zvcig7ISgwLG4uaXNDbWQpKHRoaXMuYnVmMSwiPj4iKSYmdGhpcy5idWYxIT09bi5FT0Y7KXtpZighKHRoaXMuYnVmMSBpbnN0YW5jZW9mIG4uTmFtZSkpeygwLHIuaW5mbykoIk1hbGZvcm1lZCBkaWN0aW9uYXJ5OiBrZXkgbXVzdCBiZSBhIG5hbWUgb2JqZWN0Iik7dGhpcy5zaGlmdCgpO2NvbnRpbnVlfWNvbnN0IHQ9dGhpcy5idWYxLm5hbWU7dGhpcy5zaGlmdCgpO2lmKHRoaXMuYnVmMT09PW4uRU9GKWJyZWFrO3Muc2V0KHQsdGhpcy5nZXRPYmooZSkpfWlmKHRoaXMuYnVmMT09PW4uRU9GKXtpZih0aGlzLnJlY292ZXJ5TW9kZSlyZXR1cm4gczt0aHJvdyBuZXcgaS5QYXJzZXJFT0ZFeGNlcHRpb24oIkVuZCBvZiBmaWxlIGluc2lkZSBkaWN0aW9uYXJ5LiIpfWlmKCgwLG4uaXNDbWQpKHRoaXMuYnVmMiwic3RyZWFtIikpcmV0dXJuIHRoaXMuYWxsb3dTdHJlYW1zP3RoaXMubWFrZVN0cmVhbShzLGUpOnM7dGhpcy5zaGlmdCgpO3JldHVybiBzO2RlZmF1bHQ6cmV0dXJuIHR9aWYoTnVtYmVyLmlzSW50ZWdlcih0KSl7aWYoTnVtYmVyLmlzSW50ZWdlcih0aGlzLmJ1ZjEpJiYoMCxuLmlzQ21kKSh0aGlzLmJ1ZjIsIlIiKSl7Y29uc3QgZT1uLlJlZi5nZXQodCx0aGlzLmJ1ZjEpO3RoaXMuc2hpZnQoKTt0aGlzLnNoaWZ0KCk7cmV0dXJuIGV9cmV0dXJuIHR9cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiZlP2UuZGVjcnlwdFN0cmluZyh0KTp0fWZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kKGUpe2NvbnN0IHQ9dGhpcy5sZXhlcixhPWUucG9zO2xldCBzLG8sYz0wO2Zvcig7LTEhPT0ocz1lLmdldEJ5dGUoKSk7KWlmKDA9PT1jKWM9Njk9PT1zPzE6MDtlbHNlIGlmKDE9PT1jKWM9NzM9PT1zPzI6MDtlbHNleygwLHIuYXNzZXJ0KSgyPT09YywiZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQgLSBpbnZhbGlkIHN0YXRlLiIpO2lmKDMyPT09c3x8MTA9PT1zfHwxMz09PXMpe289ZS5wb3M7Y29uc3QgYT1lLnBlZWtCeXRlcygxMCk7Zm9yKGxldCBlPTAsdD1hLmxlbmd0aDtlPHQ7ZSsrKXtzPWFbZV07aWYoKDAhPT1zfHwwPT09YVtlKzFdKSYmKDEwIT09cyYmMTMhPT1zJiYoczwzMnx8cz4xMjcpKSl7Yz0wO2JyZWFrfX1pZigyIT09Yyljb250aW51ZTtpZih0Lmtub3duQ29tbWFuZHMpe2NvbnN0IGU9dC5wZWVrT2JqKCk7ZSBpbnN0YW5jZW9mIG4uQ21kJiYhdC5rbm93bkNvbW1hbmRzW2UuY21kXSYmKGM9MCl9ZWxzZSgwLHIud2FybikoImZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kIC0gYGxleGVyLmtub3duQ29tbWFuZHNgIGlzIHVuZGVmaW5lZC4iKTtpZigyPT09YylicmVha31lbHNlIGM9MH1pZigtMT09PXMpeygwLHIud2FybikoImZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kOiBSZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHN0cmVhbSB3aXRob3V0IGZpbmRpbmcgYSB2YWxpZCBFSSBtYXJrZXIiKTtpZihvKXsoMCxyLndhcm4pKCcuLi4gdHJ5aW5nIHRvIHJlY292ZXIgYnkgdXNpbmcgdGhlIGxhc3QgIkVJIiBvY2N1cnJlbmNlLicpO2Uuc2tpcCgtKGUucG9zLW8pKX19bGV0IGw9NDtlLnNraXAoLWwpO3M9ZS5wZWVrQnl0ZSgpO2Uuc2tpcChsKTsoMCxpLmlzV2hpdGVTcGFjZSkocyl8fGwtLTtyZXR1cm4gZS5wb3MtbC1hfWZpbmREQ1REZWNvZGVJbmxpbmVTdHJlYW1FbmQoZSl7Y29uc3QgdD1lLnBvcztsZXQgYSxuLGk9ITE7Zm9yKDstMSE9PShhPWUuZ2V0Qnl0ZSgpKTspaWYoMjU1PT09YSl7c3dpdGNoKGUuZ2V0Qnl0ZSgpKXtjYXNlIDA6YnJlYWs7Y2FzZSAyNTU6ZS5za2lwKC0xKTticmVhaztjYXNlIDIxNzppPSEwO2JyZWFrO2Nhc2UgMTkyOmNhc2UgMTkzOmNhc2UgMTk0OmNhc2UgMTk1OmNhc2UgMTk3OmNhc2UgMTk4OmNhc2UgMTk5OmNhc2UgMjAxOmNhc2UgMjAyOmNhc2UgMjAzOmNhc2UgMjA1OmNhc2UgMjA2OmNhc2UgMjA3OmNhc2UgMTk2OmNhc2UgMjA0OmNhc2UgMjE4OmNhc2UgMjE5OmNhc2UgMjIwOmNhc2UgMjIxOmNhc2UgMjIyOmNhc2UgMjIzOmNhc2UgMjI0OmNhc2UgMjI1OmNhc2UgMjI2OmNhc2UgMjI3OmNhc2UgMjI4OmNhc2UgMjI5OmNhc2UgMjMwOmNhc2UgMjMxOmNhc2UgMjMyOmNhc2UgMjMzOmNhc2UgMjM0OmNhc2UgMjM1OmNhc2UgMjM2OmNhc2UgMjM3OmNhc2UgMjM4OmNhc2UgMjM5OmNhc2UgMjU0Om49ZS5nZXRVaW50MTYoKTtuPjI/ZS5za2lwKG4tMik6ZS5za2lwKC0yKX1pZihpKWJyZWFrfWNvbnN0IHM9ZS5wb3MtdDtpZigtMT09PWEpeygwLHIud2FybikoIklubGluZSBEQ1REZWNvZGUgaW1hZ2Ugc3RyZWFtOiBFT0kgbWFya2VyIG5vdCBmb3VuZCwgc2VhcmNoaW5nIGZvciAvRUkvIGluc3RlYWQuIik7ZS5za2lwKC1zKTtyZXR1cm4gdGhpcy5maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChlKX10aGlzLmlubGluZVN0cmVhbVNraXBFSShlKTtyZXR1cm4gc31maW5kQVNDSUk4NURlY29kZUlubGluZVN0cmVhbUVuZChlKXtjb25zdCB0PWUucG9zO2xldCBhO2Zvcig7LTEhPT0oYT1lLmdldEJ5dGUoKSk7KWlmKDEyNj09PWEpe2NvbnN0IHQ9ZS5wb3M7YT1lLnBlZWtCeXRlKCk7Zm9yKDsoMCxpLmlzV2hpdGVTcGFjZSkoYSk7KXtlLnNraXAoKTthPWUucGVla0J5dGUoKX1pZig2Mj09PWEpe2Uuc2tpcCgpO2JyZWFrfWlmKGUucG9zPnQpe2NvbnN0IHQ9ZS5wZWVrQnl0ZXMoMik7aWYoNjk9PT10WzBdJiY3Mz09PXRbMV0pYnJlYWt9fWNvbnN0IG49ZS5wb3MtdDtpZigtMT09PWEpeygwLHIud2FybikoIklubGluZSBBU0NJSTg1RGVjb2RlIGltYWdlIHN0cmVhbTogRU9EIG1hcmtlciBub3QgZm91bmQsIHNlYXJjaGluZyBmb3IgL0VJLyBpbnN0ZWFkLiIpO2Uuc2tpcCgtbik7cmV0dXJuIHRoaXMuZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQoZSl9dGhpcy5pbmxpbmVTdHJlYW1Ta2lwRUkoZSk7cmV0dXJuIG59ZmluZEFTQ0lJSGV4RGVjb2RlSW5saW5lU3RyZWFtRW5kKGUpe2NvbnN0IHQ9ZS5wb3M7bGV0IGE7Zm9yKDstMSE9PShhPWUuZ2V0Qnl0ZSgpKSYmNjIhPT1hOyk7Y29uc3Qgbj1lLnBvcy10O2lmKC0xPT09YSl7KDAsci53YXJuKSgiSW5saW5lIEFTQ0lJSGV4RGVjb2RlIGltYWdlIHN0cmVhbTogRU9EIG1hcmtlciBub3QgZm91bmQsIHNlYXJjaGluZyBmb3IgL0VJLyBpbnN0ZWFkLiIpO2Uuc2tpcCgtbik7cmV0dXJuIHRoaXMuZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQoZSl9dGhpcy5pbmxpbmVTdHJlYW1Ta2lwRUkoZSk7cmV0dXJuIG59aW5saW5lU3RyZWFtU2tpcEVJKGUpe2xldCB0LGE9MDtmb3IoOy0xIT09KHQ9ZS5nZXRCeXRlKCkpOylpZigwPT09YSlhPTY5PT09dD8xOjA7ZWxzZSBpZigxPT09YSlhPTczPT09dD8yOjA7ZWxzZSBpZigyPT09YSlicmVha31tYWtlSW5saW5lSW1hZ2UoZSl7Y29uc3QgdD10aGlzLmxleGVyLGE9dC5zdHJlYW0saT1uZXcgbi5EaWN0KHRoaXMueHJlZik7bGV0IHM7Zm9yKDshKDAsbi5pc0NtZCkodGhpcy5idWYxLCJJRCIpJiZ0aGlzLmJ1ZjEhPT1uLkVPRjspe2lmKCEodGhpcy5idWYxIGluc3RhbmNlb2Ygbi5OYW1lKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiRGljdGlvbmFyeSBrZXkgbXVzdCBiZSBhIG5hbWUgb2JqZWN0Iik7Y29uc3QgdD10aGlzLmJ1ZjEubmFtZTt0aGlzLnNoaWZ0KCk7aWYodGhpcy5idWYxPT09bi5FT0YpYnJlYWs7aS5zZXQodCx0aGlzLmdldE9iaihlKSl9LTEhPT10LmJlZ2luSW5saW5lSW1hZ2VQb3MmJihzPWEucG9zLXQuYmVnaW5JbmxpbmVJbWFnZVBvcyk7Y29uc3Qgbz1pLmdldCgiRiIsIkZpbHRlciIpO2xldCBjO2lmKG8gaW5zdGFuY2VvZiBuLk5hbWUpYz1vLm5hbWU7ZWxzZSBpZihBcnJheS5pc0FycmF5KG8pKXtjb25zdCBlPXRoaXMueHJlZi5mZXRjaElmUmVmKG9bMF0pO2UgaW5zdGFuY2VvZiBuLk5hbWUmJihjPWUubmFtZSl9Y29uc3QgbD1hLnBvcztsZXQgaDtzd2l0Y2goYyl7Y2FzZSJEQ1QiOmNhc2UiRENURGVjb2RlIjpoPXRoaXMuZmluZERDVERlY29kZUlubGluZVN0cmVhbUVuZChhKTticmVhaztjYXNlIkE4NSI6Y2FzZSJBU0NJSTg1RGVjb2RlIjpoPXRoaXMuZmluZEFTQ0lJODVEZWNvZGVJbmxpbmVTdHJlYW1FbmQoYSk7YnJlYWs7Y2FzZSJBSHgiOmNhc2UiQVNDSUlIZXhEZWNvZGUiOmg9dGhpcy5maW5kQVNDSUlIZXhEZWNvZGVJbmxpbmVTdHJlYW1FbmQoYSk7YnJlYWs7ZGVmYXVsdDpoPXRoaXMuZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQoYSl9bGV0IHUsZD1hLm1ha2VTdWJTdHJlYW0obCxoLGkpO2lmKGg8MWUzJiZzPDU1NTIpe2NvbnN0IGU9ZC5nZXRCeXRlcygpO2QucmVzZXQoKTtjb25zdCByPWEucG9zO2EucG9zPXQuYmVnaW5JbmxpbmVJbWFnZVBvcztjb25zdCBpPWEuZ2V0Qnl0ZXMocyk7YS5wb3M9cjt1PWNvbXB1dGVBZGxlcjMyKGUpKyJfIitjb21wdXRlQWRsZXIzMihpKTtjb25zdCBvPXRoaXMuaW1hZ2VDYWNoZVt1XTtpZih2b2lkIDAhPT1vKXt0aGlzLmJ1ZjI9bi5DbWQuZ2V0KCJFSSIpO3RoaXMuc2hpZnQoKTtvLnJlc2V0KCk7cmV0dXJuIG99fWUmJihkPWUuY3JlYXRlU3RyZWFtKGQsaCkpO2Q9dGhpcy5maWx0ZXIoZCxpLGgpO2QuZGljdD1pO2lmKHZvaWQgMCE9PXUpe2QuY2FjaGVLZXk9YGlubGluZV8ke2h9XyR7dX1gO3RoaXMuaW1hZ2VDYWNoZVt1XT1kfXRoaXMuYnVmMj1uLkNtZC5nZXQoIkVJIik7dGhpcy5zaGlmdCgpO3JldHVybiBkfV9maW5kU3RyZWFtTGVuZ3RoKGUsdCl7Y29uc3R7c3RyZWFtOmF9PXRoaXMubGV4ZXI7YS5wb3M9ZTtjb25zdCByPXQubGVuZ3RoO2Zvcig7YS5wb3M8YS5lbmQ7KXtjb25zdCBuPWEucGVla0J5dGVzKDIwNDgpLGk9bi5sZW5ndGgtcjtpZihpPD0wKWJyZWFrO2xldCBzPTA7Zm9yKDtzPGk7KXtsZXQgaT0wO2Zvcig7aTxyJiZuW3MraV09PT10W2ldOylpKys7aWYoaT49cil7YS5wb3MrPXM7cmV0dXJuIGEucG9zLWV9cysrfWEucG9zKz1pfXJldHVybi0xfW1ha2VTdHJlYW0oZSx0KXtjb25zdCBhPXRoaXMubGV4ZXI7bGV0IHM9YS5zdHJlYW07YS5za2lwVG9OZXh0TGluZSgpO2NvbnN0IG89cy5wb3MtMTtsZXQgYz1lLmdldCgiTGVuZ3RoIik7aWYoIU51bWJlci5pc0ludGVnZXIoYykpeygwLHIuaW5mbykoYEJhZCBsZW5ndGggIiR7YyYmYy50b1N0cmluZygpfSIgaW4gc3RyZWFtLmApO2M9MH1zLnBvcz1vK2M7YS5uZXh0Q2hhcigpO2lmKHRoaXMudHJ5U2hpZnQoKSYmKDAsbi5pc0NtZCkodGhpcy5idWYyLCJlbmRzdHJlYW0iKSl0aGlzLnNoaWZ0KCk7ZWxzZXtjb25zdCBlPW5ldyBVaW50OEFycmF5KFsxMDEsMTEwLDEwMCwxMTUsMTE2LDExNCwxMDEsOTcsMTA5XSk7bGV0IHQ9dGhpcy5fZmluZFN0cmVhbUxlbmd0aChvLGUpO2lmKHQ8MCl7Y29uc3QgYT0xO2ZvcihsZXQgbj0xO248PWE7bisrKXtjb25zdCBhPWUubGVuZ3RoLW4sYz1lLnNsaWNlKDAsYSksbD10aGlzLl9maW5kU3RyZWFtTGVuZ3RoKG8sYyk7aWYobD49MCl7Y29uc3QgZT1zLnBlZWtCeXRlcyhhKzEpW2FdO2lmKCEoMCxpLmlzV2hpdGVTcGFjZSkoZSkpYnJlYWs7KDAsci5pbmZvKShgRm91bmQgIiR7KDAsci5ieXRlc1RvU3RyaW5nKShjKX0iIHdoZW4gc2VhcmNoaW5nIGZvciBlbmRzdHJlYW0gY29tbWFuZC5gKTt0PWw7YnJlYWt9fWlmKHQ8MCl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiTWlzc2luZyBlbmRzdHJlYW0gY29tbWFuZC4iKX1jPXQ7YS5uZXh0Q2hhcigpO3RoaXMuc2hpZnQoKTt0aGlzLnNoaWZ0KCl9dGhpcy5zaGlmdCgpO3M9cy5tYWtlU3ViU3RyZWFtKG8sYyxlKTt0JiYocz10LmNyZWF0ZVN0cmVhbShzLGMpKTtzPXRoaXMuZmlsdGVyKHMsZSxjKTtzLmRpY3Q9ZTtyZXR1cm4gc31maWx0ZXIoZSx0LGEpe2xldCBpPXQuZ2V0KCJGIiwiRmlsdGVyIikscz10LmdldCgiRFAiLCJEZWNvZGVQYXJtcyIpO2lmKGkgaW5zdGFuY2VvZiBuLk5hbWUpe0FycmF5LmlzQXJyYXkocykmJigwLHIud2FybikoIi9EZWNvZGVQYXJtcyBzaG91bGQgbm90IGJlIGFuIEFycmF5LCB3aGVuIC9GaWx0ZXIgaXMgYSBOYW1lLiIpO3JldHVybiB0aGlzLm1ha2VGaWx0ZXIoZSxpLm5hbWUsYSxzKX1sZXQgbz1hO2lmKEFycmF5LmlzQXJyYXkoaSkpe2NvbnN0IHQ9aSxhPXM7Zm9yKGxldCBjPTAsbD10Lmxlbmd0aDtjPGw7KytjKXtpPXRoaXMueHJlZi5mZXRjaElmUmVmKHRbY10pO2lmKCEoaSBpbnN0YW5jZW9mIG4uTmFtZSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYEJhZCBmaWx0ZXIgbmFtZSAiJHtpfSJgKTtzPW51bGw7QXJyYXkuaXNBcnJheShhKSYmYyBpbiBhJiYocz10aGlzLnhyZWYuZmV0Y2hJZlJlZihhW2NdKSk7ZT10aGlzLm1ha2VGaWx0ZXIoZSxpLm5hbWUsbyxzKTtvPW51bGx9fXJldHVybiBlfW1ha2VGaWx0ZXIoZSx0LGEsbil7aWYoMD09PWEpeygwLHIud2FybikoYEVtcHR5ICIke3R9IiBzdHJlYW0uYCk7cmV0dXJuIG5ldyBnLk51bGxTdHJlYW19Y29uc3QgYj10aGlzLnhyZWYuc3RhdHM7dHJ5e3N3aXRjaCh0KXtjYXNlIkZsIjpjYXNlIkZsYXRlRGVjb2RlIjpiLmFkZFN0cmVhbVR5cGUoci5TdHJlYW1UeXBlLkZMQVRFKTtyZXR1cm4gbj9uZXcgcC5QcmVkaWN0b3JTdHJlYW0obmV3IGwuRmxhdGVTdHJlYW0oZSxhKSxhLG4pOm5ldyBsLkZsYXRlU3RyZWFtKGUsYSk7Y2FzZSJMWlciOmNhc2UiTFpXRGVjb2RlIjpiLmFkZFN0cmVhbVR5cGUoci5TdHJlYW1UeXBlLkxaVyk7bGV0IHQ9MTtpZihuKXtuLmhhcygiRWFybHlDaGFuZ2UiKSYmKHQ9bi5nZXQoIkVhcmx5Q2hhbmdlIikpO3JldHVybiBuZXcgcC5QcmVkaWN0b3JTdHJlYW0obmV3IGYuTFpXU3RyZWFtKGUsYSx0KSxhLG4pfXJldHVybiBuZXcgZi5MWldTdHJlYW0oZSxhLHQpO2Nhc2UiRENUIjpjYXNlIkRDVERlY29kZSI6Yi5hZGRTdHJlYW1UeXBlKHIuU3RyZWFtVHlwZS5EQ1QpO3JldHVybiBuZXcgdS5KcGVnU3RyZWFtKGUsYSxuKTtjYXNlIkpQWCI6Y2FzZSJKUFhEZWNvZGUiOmIuYWRkU3RyZWFtVHlwZShyLlN0cmVhbVR5cGUuSlBYKTtyZXR1cm4gbmV3IGQuSnB4U3RyZWFtKGUsYSxuKTtjYXNlIkE4NSI6Y2FzZSJBU0NJSTg1RGVjb2RlIjpiLmFkZFN0cmVhbVR5cGUoci5TdHJlYW1UeXBlLkE4NSk7cmV0dXJuIG5ldyBzLkFzY2lpODVTdHJlYW0oZSxhKTtjYXNlIkFIeCI6Y2FzZSJBU0NJSUhleERlY29kZSI6Yi5hZGRTdHJlYW1UeXBlKHIuU3RyZWFtVHlwZS5BSFgpO3JldHVybiBuZXcgby5Bc2NpaUhleFN0cmVhbShlLGEpO2Nhc2UiQ0NGIjpjYXNlIkNDSVRURmF4RGVjb2RlIjpiLmFkZFN0cmVhbVR5cGUoci5TdHJlYW1UeXBlLkNDRik7cmV0dXJuIG5ldyBjLkNDSVRURmF4U3RyZWFtKGUsYSxuKTtjYXNlIlJMIjpjYXNlIlJ1bkxlbmd0aERlY29kZSI6Yi5hZGRTdHJlYW1UeXBlKHIuU3RyZWFtVHlwZS5STFgpO3JldHVybiBuZXcgbS5SdW5MZW5ndGhTdHJlYW0oZSxhKTtjYXNlIkpCSUcyRGVjb2RlIjpiLmFkZFN0cmVhbVR5cGUoci5TdHJlYW1UeXBlLkpCSUcpO3JldHVybiBuZXcgaC5KYmlnMlN0cmVhbShlLGEsbil9KDAsci53YXJuKShgRmlsdGVyICIke3R9IiBpcyBub3Qgc3VwcG9ydGVkLmApO3JldHVybiBlfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsci53YXJuKShgSW52YWxpZCBzdHJlYW06ICIke2V9ImApO3JldHVybiBuZXcgZy5OdWxsU3RyZWFtfX19dC5QYXJzZXI9UGFyc2VyO2NvbnN0IGI9WzEsMCwwLDAsMCwwLDAsMCwwLDEsMSwwLDEsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMiwwLDAsMiwyLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdO2Z1bmN0aW9uIHRvSGV4RGlnaXQoZSl7cmV0dXJuIGU+PTQ4JiZlPD01Nz8xNSZlOmU+PTY1JiZlPD03MHx8ZT49OTcmJmU8PTEwMj85KygxNSZlKTotMX1jbGFzcyBMZXhlcntjb25zdHJ1Y3RvcihlLHQ9bnVsbCl7dGhpcy5zdHJlYW09ZTt0aGlzLm5leHRDaGFyKCk7dGhpcy5zdHJCdWY9W107dGhpcy5rbm93bkNvbW1hbmRzPXQ7dGhpcy5faGV4U3RyaW5nTnVtV2Fybj0wO3RoaXMuYmVnaW5JbmxpbmVJbWFnZVBvcz0tMX1uZXh0Q2hhcigpe3JldHVybiB0aGlzLmN1cnJlbnRDaGFyPXRoaXMuc3RyZWFtLmdldEJ5dGUoKX1wZWVrQ2hhcigpe3JldHVybiB0aGlzLnN0cmVhbS5wZWVrQnl0ZSgpfWdldE51bWJlcigpe2xldCBlPXRoaXMuY3VycmVudENoYXIsdD0hMSxhPTAsbj0wO2lmKDQ1PT09ZSl7bj0tMTtlPXRoaXMubmV4dENoYXIoKTs0NT09PWUmJihlPXRoaXMubmV4dENoYXIoKSl9ZWxzZSBpZig0Mz09PWUpe249MTtlPXRoaXMubmV4dENoYXIoKX1pZigxMD09PWV8fDEzPT09ZSlkb3tlPXRoaXMubmV4dENoYXIoKX13aGlsZSgxMD09PWV8fDEzPT09ZSk7aWYoNDY9PT1lKXthPTEwO2U9dGhpcy5uZXh0Q2hhcigpfWlmKGU8NDh8fGU+NTcpe2NvbnN0IHQ9YEludmFsaWQgbnVtYmVyOiAke1N0cmluZy5mcm9tQ2hhckNvZGUoZSl9IChjaGFyQ29kZSAke2V9KWA7aWYoKDAsaS5pc1doaXRlU3BhY2UpKGUpfHwtMT09PWUpeygwLHIuaW5mbykoYExleGVyLmdldE51bWJlciAtICIke3R9Ii5gKTtyZXR1cm4gMH10aHJvdyBuZXcgci5Gb3JtYXRFcnJvcih0KX1uPW58fDE7bGV0IHM9ZS00OCxvPTAsYz0xO2Zvcig7KGU9dGhpcy5uZXh0Q2hhcigpKT49MDspaWYoZT49NDgmJmU8PTU3KXtjb25zdCByPWUtNDg7aWYodClvPTEwKm8rcjtlbHNlezAhPT1hJiYoYSo9MTApO3M9MTAqcytyfX1lbHNlIGlmKDQ2PT09ZSl7aWYoMCE9PWEpYnJlYWs7YT0xfWVsc2UgaWYoNDU9PT1lKSgwLHIud2FybikoIkJhZGx5IGZvcm1hdHRlZCBudW1iZXI6IG1pbnVzIHNpZ24gaW4gdGhlIG1pZGRsZSIpO2Vsc2V7aWYoNjkhPT1lJiYxMDEhPT1lKWJyZWFrO2U9dGhpcy5wZWVrQ2hhcigpO2lmKDQzPT09ZXx8NDU9PT1lKXtjPTQ1PT09ZT8tMToxO3RoaXMubmV4dENoYXIoKX1lbHNlIGlmKGU8NDh8fGU+NTcpYnJlYWs7dD0hMH0wIT09YSYmKHMvPWEpO3QmJihzKj0xMCoqKGMqbykpO3JldHVybiBuKnN9Z2V0U3RyaW5nKCl7bGV0IGU9MSx0PSExO2NvbnN0IGE9dGhpcy5zdHJCdWY7YS5sZW5ndGg9MDtsZXQgbj10aGlzLm5leHRDaGFyKCk7Zm9yKDs7KXtsZXQgaT0hMTtzd2l0Y2goMHxuKXtjYXNlLTE6KDAsci53YXJuKSgiVW50ZXJtaW5hdGVkIHN0cmluZyIpO3Q9ITA7YnJlYWs7Y2FzZSA0MDorK2U7YS5wdXNoKCIoIik7YnJlYWs7Y2FzZSA0MTppZigwPT0tLWUpe3RoaXMubmV4dENoYXIoKTt0PSEwfWVsc2UgYS5wdXNoKCIpIik7YnJlYWs7Y2FzZSA5MjpuPXRoaXMubmV4dENoYXIoKTtzd2l0Y2gobil7Y2FzZS0xOigwLHIud2FybikoIlVudGVybWluYXRlZCBzdHJpbmciKTt0PSEwO2JyZWFrO2Nhc2UgMTEwOmEucHVzaCgiXG4iKTticmVhaztjYXNlIDExNDphLnB1c2goIlxyIik7YnJlYWs7Y2FzZSAxMTY6YS5wdXNoKCJcdCIpO2JyZWFrO2Nhc2UgOTg6YS5wdXNoKCJcYiIpO2JyZWFrO2Nhc2UgMTAyOmEucHVzaCgiXGYiKTticmVhaztjYXNlIDkyOmNhc2UgNDA6Y2FzZSA0MTphLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShuKSk7YnJlYWs7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmxldCBlPTE1Jm47bj10aGlzLm5leHRDaGFyKCk7aT0hMDtpZihuPj00OCYmbjw9NTUpe2U9KGU8PDMpKygxNSZuKTtuPXRoaXMubmV4dENoYXIoKTtpZihuPj00OCYmbjw9NTUpe2k9ITE7ZT0oZTw8MykrKDE1Jm4pfX1hLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShlKSk7YnJlYWs7Y2FzZSAxMzoxMD09PXRoaXMucGVla0NoYXIoKSYmdGhpcy5uZXh0Q2hhcigpO2JyZWFrO2Nhc2UgMTA6YnJlYWs7ZGVmYXVsdDphLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShuKSl9YnJlYWs7ZGVmYXVsdDphLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShuKSl9aWYodClicmVhaztpfHwobj10aGlzLm5leHRDaGFyKCkpfXJldHVybiBhLmpvaW4oIiIpfWdldE5hbWUoKXtsZXQgZSx0O2NvbnN0IGE9dGhpcy5zdHJCdWY7YS5sZW5ndGg9MDtmb3IoOyhlPXRoaXMubmV4dENoYXIoKSk+PTAmJiFiW2VdOylpZigzNT09PWUpe2U9dGhpcy5uZXh0Q2hhcigpO2lmKGJbZV0peygwLHIud2FybikoIkxleGVyX2dldE5hbWU6IE5VTUJFUiBTSUdOICgjKSBzaG91bGQgYmUgZm9sbG93ZWQgYnkgYSBoZXhhZGVjaW1hbCBudW1iZXIuIik7YS5wdXNoKCIjIik7YnJlYWt9Y29uc3Qgbj10b0hleERpZ2l0KGUpO2lmKC0xIT09bil7dD1lO2U9dGhpcy5uZXh0Q2hhcigpO2NvbnN0IGk9dG9IZXhEaWdpdChlKTtpZigtMT09PWkpeygwLHIud2FybikoYExleGVyX2dldE5hbWU6IElsbGVnYWwgZGlnaXQgKCR7U3RyaW5nLmZyb21DaGFyQ29kZShlKX0pIGluIGhleGFkZWNpbWFsIG51bWJlci5gKTthLnB1c2goIiMiLFN0cmluZy5mcm9tQ2hhckNvZGUodCkpO2lmKGJbZV0pYnJlYWs7YS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpO2NvbnRpbnVlfWEucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKG48PDR8aSkpfWVsc2UgYS5wdXNoKCIjIixTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKX1lbHNlIGEucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKTthLmxlbmd0aD4xMjcmJigwLHIud2FybikoYE5hbWUgdG9rZW4gaXMgbG9uZ2VyIHRoYW4gYWxsb3dlZCBieSB0aGUgc3BlYzogJHthLmxlbmd0aH1gKTtyZXR1cm4gbi5OYW1lLmdldChhLmpvaW4oIiIpKX1faGV4U3RyaW5nV2FybihlKXs1IT10aGlzLl9oZXhTdHJpbmdOdW1XYXJuKys/dGhpcy5faGV4U3RyaW5nTnVtV2Fybj41fHwoMCxyLndhcm4pKGBnZXRIZXhTdHJpbmcgLSBpZ25vcmluZyBpbnZhbGlkIGNoYXJhY3RlcjogJHtlfWApOigwLHIud2FybikoImdldEhleFN0cmluZyAtIGlnbm9yaW5nIGFkZGl0aW9uYWwgaW52YWxpZCBjaGFyYWN0ZXJzLiIpfWdldEhleFN0cmluZygpe2NvbnN0IGU9dGhpcy5zdHJCdWY7ZS5sZW5ndGg9MDtsZXQgdCxhLG49dGhpcy5jdXJyZW50Q2hhcixpPSEwO3RoaXMuX2hleFN0cmluZ051bVdhcm49MDtmb3IoOzspe2lmKG48MCl7KDAsci53YXJuKSgiVW50ZXJtaW5hdGVkIGhleCBzdHJpbmciKTticmVha31pZig2Mj09PW4pe3RoaXMubmV4dENoYXIoKTticmVha31pZigxIT09YltuXSl7aWYoaSl7dD10b0hleERpZ2l0KG4pO2lmKC0xPT09dCl7dGhpcy5faGV4U3RyaW5nV2FybihuKTtuPXRoaXMubmV4dENoYXIoKTtjb250aW51ZX19ZWxzZXthPXRvSGV4RGlnaXQobik7aWYoLTE9PT1hKXt0aGlzLl9oZXhTdHJpbmdXYXJuKG4pO249dGhpcy5uZXh0Q2hhcigpO2NvbnRpbnVlfWUucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHQ8PDR8YSkpfWk9IWk7bj10aGlzLm5leHRDaGFyKCl9ZWxzZSBuPXRoaXMubmV4dENoYXIoKX1yZXR1cm4gZS5qb2luKCIiKX1nZXRPYmooKXtsZXQgZT0hMSx0PXRoaXMuY3VycmVudENoYXI7Zm9yKDs7KXtpZih0PDApcmV0dXJuIG4uRU9GO2lmKGUpMTAhPT10JiYxMyE9PXR8fChlPSExKTtlbHNlIGlmKDM3PT09dCllPSEwO2Vsc2UgaWYoMSE9PWJbdF0pYnJlYWs7dD10aGlzLm5leHRDaGFyKCl9c3dpdGNoKDB8dCl7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1NzpjYXNlIDQzOmNhc2UgNDU6Y2FzZSA0NjpyZXR1cm4gdGhpcy5nZXROdW1iZXIoKTtjYXNlIDQwOnJldHVybiB0aGlzLmdldFN0cmluZygpO2Nhc2UgNDc6cmV0dXJuIHRoaXMuZ2V0TmFtZSgpO2Nhc2UgOTE6dGhpcy5uZXh0Q2hhcigpO3JldHVybiBuLkNtZC5nZXQoIlsiKTtjYXNlIDkzOnRoaXMubmV4dENoYXIoKTtyZXR1cm4gbi5DbWQuZ2V0KCJdIik7Y2FzZSA2MDp0PXRoaXMubmV4dENoYXIoKTtpZig2MD09PXQpe3RoaXMubmV4dENoYXIoKTtyZXR1cm4gbi5DbWQuZ2V0KCI8PCIpfXJldHVybiB0aGlzLmdldEhleFN0cmluZygpO2Nhc2UgNjI6dD10aGlzLm5leHRDaGFyKCk7aWYoNjI9PT10KXt0aGlzLm5leHRDaGFyKCk7cmV0dXJuIG4uQ21kLmdldCgiPj4iKX1yZXR1cm4gbi5DbWQuZ2V0KCI+Iik7Y2FzZSAxMjM6dGhpcy5uZXh0Q2hhcigpO3JldHVybiBuLkNtZC5nZXQoInsiKTtjYXNlIDEyNTp0aGlzLm5leHRDaGFyKCk7cmV0dXJuIG4uQ21kLmdldCgifSIpO2Nhc2UgNDE6dGhpcy5uZXh0Q2hhcigpO3Rocm93IG5ldyByLkZvcm1hdEVycm9yKGBJbGxlZ2FsIGNoYXJhY3RlcjogJHt0fWApfWxldCBhPVN0cmluZy5mcm9tQ2hhckNvZGUodCk7aWYodDwzMnx8dD4xMjcpe2NvbnN0IGU9dGhpcy5wZWVrQ2hhcigpO2lmKGU+PTMyJiZlPD0xMjcpe3RoaXMubmV4dENoYXIoKTtyZXR1cm4gbi5DbWQuZ2V0KGEpfX1jb25zdCBpPXRoaXMua25vd25Db21tYW5kcztsZXQgcz1pJiZ2b2lkIDAhPT1pW2FdO2Zvcig7KHQ9dGhpcy5uZXh0Q2hhcigpKT49MCYmIWJbdF07KXtjb25zdCBlPWErU3RyaW5nLmZyb21DaGFyQ29kZSh0KTtpZihzJiZ2b2lkIDA9PT1pW2VdKWJyZWFrO2lmKDEyOD09PWEubGVuZ3RoKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBDb21tYW5kIHRva2VuIHRvbyBsb25nOiAke2EubGVuZ3RofWApO2E9ZTtzPWkmJnZvaWQgMCE9PWlbYV19aWYoInRydWUiPT09YSlyZXR1cm4hMDtpZigiZmFsc2UiPT09YSlyZXR1cm4hMTtpZigibnVsbCI9PT1hKXJldHVybiBudWxsOyJCSSI9PT1hJiYodGhpcy5iZWdpbklubGluZUltYWdlUG9zPXRoaXMuc3RyZWFtLnBvcyk7cmV0dXJuIG4uQ21kLmdldChhKX1wZWVrT2JqKCl7Y29uc3QgZT10aGlzLnN0cmVhbS5wb3MsdD10aGlzLmN1cnJlbnRDaGFyLGE9dGhpcy5iZWdpbklubGluZUltYWdlUG9zO2xldCBuO3RyeXtuPXRoaXMuZ2V0T2JqKCl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIGkuTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxyLndhcm4pKGBwZWVrT2JqOiAke2V9YCl9dGhpcy5zdHJlYW0ucG9zPWU7dGhpcy5jdXJyZW50Q2hhcj10O3RoaXMuYmVnaW5JbmxpbmVJbWFnZVBvcz1hO3JldHVybiBufXNraXBUb05leHRMaW5lKCl7bGV0IGU9dGhpcy5jdXJyZW50Q2hhcjtmb3IoO2U+PTA7KXtpZigxMz09PWUpe2U9dGhpcy5uZXh0Q2hhcigpOzEwPT09ZSYmdGhpcy5uZXh0Q2hhcigpO2JyZWFrfWlmKDEwPT09ZSl7dGhpcy5uZXh0Q2hhcigpO2JyZWFrfWU9dGhpcy5uZXh0Q2hhcigpfX19dC5MZXhlcj1MZXhlcjt0LkxpbmVhcml6YXRpb249Y2xhc3MgTGluZWFyaXphdGlvbntzdGF0aWMgY3JlYXRlKGUpe2Z1bmN0aW9uIGdldEludChlLHQsYT0hMSl7Y29uc3Qgcj1lLmdldCh0KTtpZihOdW1iZXIuaXNJbnRlZ2VyKHIpJiYoYT9yPj0wOnI+MCkpcmV0dXJuIHI7dGhyb3cgbmV3IEVycm9yKGBUaGUgIiR7dH0iIHBhcmFtZXRlciBpbiB0aGUgbGluZWFyaXphdGlvbiBkaWN0aW9uYXJ5IGlzIGludmFsaWQuYCl9Y29uc3QgdD1uZXcgUGFyc2VyKHtsZXhlcjpuZXcgTGV4ZXIoZSkseHJlZjpudWxsfSksYT10LmdldE9iaigpLHI9dC5nZXRPYmooKSxpPXQuZ2V0T2JqKCkscz10LmdldE9iaigpO2xldCBvLGM7aWYoIShOdW1iZXIuaXNJbnRlZ2VyKGEpJiZOdW1iZXIuaXNJbnRlZ2VyKHIpJiYoMCxuLmlzQ21kKShpLCJvYmoiKSYmcyBpbnN0YW5jZW9mIG4uRGljdCYmIm51bWJlciI9PXR5cGVvZihvPXMuZ2V0KCJMaW5lYXJpemVkIikpJiZvPjApKXJldHVybiBudWxsO2lmKChjPWdldEludChzLCJMIikpIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCdUaGUgIkwiIHBhcmFtZXRlciBpbiB0aGUgbGluZWFyaXphdGlvbiBkaWN0aW9uYXJ5IGRvZXMgbm90IGVxdWFsIHRoZSBzdHJlYW0gbGVuZ3RoLicpO3JldHVybntsZW5ndGg6YyxoaW50czpmdW5jdGlvbiBnZXRIaW50cyhlKXtjb25zdCB0PWUuZ2V0KCJIIik7bGV0IGE7aWYoQXJyYXkuaXNBcnJheSh0KSYmKDI9PT0oYT10Lmxlbmd0aCl8fDQ9PT1hKSl7Zm9yKGxldCBlPTA7ZTxhO2UrKyl7Y29uc3QgYT10W2VdO2lmKCEoTnVtYmVyLmlzSW50ZWdlcihhKSYmYT4wKSl0aHJvdyBuZXcgRXJyb3IoYEhpbnQgKCR7ZX0pIGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgaXMgaW52YWxpZC5gKX1yZXR1cm4gdH10aHJvdyBuZXcgRXJyb3IoIkhpbnQgYXJyYXkgaW4gdGhlIGxpbmVhcml6YXRpb24gZGljdGlvbmFyeSBpcyBpbnZhbGlkLiIpfShzKSxvYmplY3ROdW1iZXJGaXJzdDpnZXRJbnQocywiTyIpLGVuZEZpcnN0OmdldEludChzLCJFIiksbnVtUGFnZXM6Z2V0SW50KHMsIk4iKSxtYWluWFJlZkVudHJpZXNPZmZzZXQ6Z2V0SW50KHMsIlQiKSxwYWdlRmlyc3Q6cy5oYXMoIlAiKT9nZXRJbnQocywiUCIsITApOjB9fX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Bc2NpaTg1U3RyZWFtPXZvaWQgMDt2YXIgcj1hKDE3KSxuPWEoNCk7Y2xhc3MgQXNjaWk4NVN0cmVhbSBleHRlbmRzIHIuRGVjb2RlU3RyZWFte2NvbnN0cnVjdG9yKGUsdCl7dCYmKHQqPS44KTtzdXBlcih0KTt0aGlzLnN0cj1lO3RoaXMuZGljdD1lLmRpY3Q7dGhpcy5pbnB1dD1uZXcgVWludDhBcnJheSg1KX1yZWFkQmxvY2soKXtjb25zdCBlPXRoaXMuc3RyO2xldCB0PWUuZ2V0Qnl0ZSgpO2Zvcig7KDAsbi5pc1doaXRlU3BhY2UpKHQpOyl0PWUuZ2V0Qnl0ZSgpO2lmKC0xPT09dHx8MTI2PT09dCl7dGhpcy5lb2Y9ITA7cmV0dXJufWNvbnN0IGE9dGhpcy5idWZmZXJMZW5ndGg7bGV0IHIsaTtpZigxMjI9PT10KXtyPXRoaXMuZW5zdXJlQnVmZmVyKGErNCk7Zm9yKGk9MDtpPDQ7KytpKXJbYStpXT0wO3RoaXMuYnVmZmVyTGVuZ3RoKz00fWVsc2V7Y29uc3Qgcz10aGlzLmlucHV0O3NbMF09dDtmb3IoaT0xO2k8NTsrK2kpe3Q9ZS5nZXRCeXRlKCk7Zm9yKDsoMCxuLmlzV2hpdGVTcGFjZSkodCk7KXQ9ZS5nZXRCeXRlKCk7c1tpXT10O2lmKC0xPT09dHx8MTI2PT09dClicmVha31yPXRoaXMuZW5zdXJlQnVmZmVyKGEraS0xKTt0aGlzLmJ1ZmZlckxlbmd0aCs9aS0xO2lmKGk8NSl7Zm9yKDtpPDU7KytpKXNbaV09MTE3O3RoaXMuZW9mPSEwfWxldCBvPTA7Zm9yKGk9MDtpPDU7KytpKW89ODUqbysoc1tpXS0zMyk7Zm9yKGk9MztpPj0wOy0taSl7clthK2ldPTI1NSZvO28+Pj04fX19fXQuQXNjaWk4NVN0cmVhbT1Bc2NpaTg1U3RyZWFtfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuU3RyZWFtc1NlcXVlbmNlU3RyZWFtPXQuRGVjb2RlU3RyZWFtPXZvaWQgMDt2YXIgcj1hKDUpLG49YSg4KTtjb25zdCBpPW5ldyBVaW50OEFycmF5KDApO2NsYXNzIERlY29kZVN0cmVhbSBleHRlbmRzIHIuQmFzZVN0cmVhbXtjb25zdHJ1Y3RvcihlKXtzdXBlcigpO3RoaXMuX3Jhd01pbkJ1ZmZlckxlbmd0aD1lfHwwO3RoaXMucG9zPTA7dGhpcy5idWZmZXJMZW5ndGg9MDt0aGlzLmVvZj0hMTt0aGlzLmJ1ZmZlcj1pO3RoaXMubWluQnVmZmVyTGVuZ3RoPTUxMjtpZihlKWZvcig7dGhpcy5taW5CdWZmZXJMZW5ndGg8ZTspdGhpcy5taW5CdWZmZXJMZW5ndGgqPTJ9Z2V0IGlzRW1wdHkoKXtmb3IoOyF0aGlzLmVvZiYmMD09PXRoaXMuYnVmZmVyTGVuZ3RoOyl0aGlzLnJlYWRCbG9jaygpO3JldHVybiAwPT09dGhpcy5idWZmZXJMZW5ndGh9ZW5zdXJlQnVmZmVyKGUpe2NvbnN0IHQ9dGhpcy5idWZmZXI7aWYoZTw9dC5ieXRlTGVuZ3RoKXJldHVybiB0O2xldCBhPXRoaXMubWluQnVmZmVyTGVuZ3RoO2Zvcig7YTxlOylhKj0yO2NvbnN0IHI9bmV3IFVpbnQ4QXJyYXkoYSk7ci5zZXQodCk7cmV0dXJuIHRoaXMuYnVmZmVyPXJ9Z2V0Qnl0ZSgpe2NvbnN0IGU9dGhpcy5wb3M7Zm9yKDt0aGlzLmJ1ZmZlckxlbmd0aDw9ZTspe2lmKHRoaXMuZW9mKXJldHVybi0xO3RoaXMucmVhZEJsb2NrKCl9cmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMucG9zKytdfWdldEJ5dGVzKGUpe2NvbnN0IHQ9dGhpcy5wb3M7bGV0IGE7aWYoZSl7dGhpcy5lbnN1cmVCdWZmZXIodCtlKTthPXQrZTtmb3IoOyF0aGlzLmVvZiYmdGhpcy5idWZmZXJMZW5ndGg8YTspdGhpcy5yZWFkQmxvY2soKTtjb25zdCByPXRoaXMuYnVmZmVyTGVuZ3RoO2E+ciYmKGE9cil9ZWxzZXtmb3IoOyF0aGlzLmVvZjspdGhpcy5yZWFkQmxvY2soKTthPXRoaXMuYnVmZmVyTGVuZ3RofXRoaXMucG9zPWE7cmV0dXJuIHRoaXMuYnVmZmVyLnN1YmFycmF5KHQsYSl9cmVzZXQoKXt0aGlzLnBvcz0wfW1ha2VTdWJTdHJlYW0oZSx0LGE9bnVsbCl7aWYodm9pZCAwPT09dClmb3IoOyF0aGlzLmVvZjspdGhpcy5yZWFkQmxvY2soKTtlbHNle2NvbnN0IGE9ZSt0O2Zvcig7dGhpcy5idWZmZXJMZW5ndGg8PWEmJiF0aGlzLmVvZjspdGhpcy5yZWFkQmxvY2soKX1yZXR1cm4gbmV3IG4uU3RyZWFtKHRoaXMuYnVmZmVyLGUsdCxhKX1nZXRCYXNlU3RyZWFtcygpe3JldHVybiB0aGlzLnN0cj90aGlzLnN0ci5nZXRCYXNlU3RyZWFtcygpOm51bGx9fXQuRGVjb2RlU3RyZWFtPURlY29kZVN0cmVhbTt0LlN0cmVhbXNTZXF1ZW5jZVN0cmVhbT1jbGFzcyBTdHJlYW1zU2VxdWVuY2VTdHJlYW0gZXh0ZW5kcyBEZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0PW51bGwpe2xldCBhPTA7Zm9yKGNvbnN0IHQgb2YgZSlhKz10IGluc3RhbmNlb2YgRGVjb2RlU3RyZWFtP3QuX3Jhd01pbkJ1ZmZlckxlbmd0aDp0Lmxlbmd0aDtzdXBlcihhKTt0aGlzLnN0cmVhbXM9ZTt0aGlzLl9vbkVycm9yPXR9cmVhZEJsb2NrKCl7Y29uc3QgZT10aGlzLnN0cmVhbXM7aWYoMD09PWUubGVuZ3RoKXt0aGlzLmVvZj0hMDtyZXR1cm59Y29uc3QgdD1lLnNoaWZ0KCk7bGV0IGE7dHJ5e2E9dC5nZXRCeXRlcygpfWNhdGNoKGUpe2lmKHRoaXMuX29uRXJyb3Ipe3RoaXMuX29uRXJyb3IoZSx0LmRpY3QmJnQuZGljdC5vYmpJZCk7cmV0dXJufXRocm93IGV9Y29uc3Qgcj10aGlzLmJ1ZmZlckxlbmd0aCxuPXIrYS5sZW5ndGg7dGhpcy5lbnN1cmVCdWZmZXIobikuc2V0KGEscik7dGhpcy5idWZmZXJMZW5ndGg9bn1nZXRCYXNlU3RyZWFtcygpe2NvbnN0IGU9W107Zm9yKGNvbnN0IHQgb2YgdGhpcy5zdHJlYW1zKXtjb25zdCBhPXQuZ2V0QmFzZVN0cmVhbXMoKTthJiZlLnB1c2goLi4uYSl9cmV0dXJuIGUubGVuZ3RoPjA/ZTpudWxsfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Bc2NpaUhleFN0cmVhbT12b2lkIDA7dmFyIHI9YSgxNyk7Y2xhc3MgQXNjaWlIZXhTdHJlYW0gZXh0ZW5kcyByLkRlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQpe3QmJih0Kj0uNSk7c3VwZXIodCk7dGhpcy5zdHI9ZTt0aGlzLmRpY3Q9ZS5kaWN0O3RoaXMuZmlyc3REaWdpdD0tMX1yZWFkQmxvY2soKXtjb25zdCBlPXRoaXMuc3RyLmdldEJ5dGVzKDhlMyk7aWYoIWUubGVuZ3RoKXt0aGlzLmVvZj0hMDtyZXR1cm59Y29uc3QgdD1lLmxlbmd0aCsxPj4xLGE9dGhpcy5lbnN1cmVCdWZmZXIodGhpcy5idWZmZXJMZW5ndGgrdCk7bGV0IHI9dGhpcy5idWZmZXJMZW5ndGgsbj10aGlzLmZpcnN0RGlnaXQ7Zm9yKGNvbnN0IHQgb2YgZSl7bGV0IGU7aWYodD49NDgmJnQ8PTU3KWU9MTUmdDtlbHNle2lmKCEodD49NjUmJnQ8PTcwfHx0Pj05NyYmdDw9MTAyKSl7aWYoNjI9PT10KXt0aGlzLmVvZj0hMDticmVha31jb250aW51ZX1lPTkrKDE1JnQpfWlmKG48MCluPWU7ZWxzZXthW3IrK109bjw8NHxlO249LTF9fWlmKG4+PTAmJnRoaXMuZW9mKXthW3IrK109bjw8NDtuPS0xfXRoaXMuZmlyc3REaWdpdD1uO3RoaXMuYnVmZmVyTGVuZ3RoPXJ9fXQuQXNjaWlIZXhTdHJlYW09QXNjaWlIZXhTdHJlYW19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5DQ0lUVEZheFN0cmVhbT12b2lkIDA7dmFyIHI9YSgyMCksbj1hKDE3KSxpPWEoMyk7Y2xhc3MgQ0NJVFRGYXhTdHJlYW0gZXh0ZW5kcyBuLkRlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQsYSl7c3VwZXIodCk7dGhpcy5zdHI9ZTt0aGlzLmRpY3Q9ZS5kaWN0O2EgaW5zdGFuY2VvZiBpLkRpY3R8fChhPWkuRGljdC5lbXB0eSk7Y29uc3Qgbj17bmV4dDooKT0+ZS5nZXRCeXRlKCl9O3RoaXMuY2NpdHRGYXhEZWNvZGVyPW5ldyByLkNDSVRURmF4RGVjb2RlcihuLHtLOmEuZ2V0KCJLIiksRW5kT2ZMaW5lOmEuZ2V0KCJFbmRPZkxpbmUiKSxFbmNvZGVkQnl0ZUFsaWduOmEuZ2V0KCJFbmNvZGVkQnl0ZUFsaWduIiksQ29sdW1uczphLmdldCgiQ29sdW1ucyIpLFJvd3M6YS5nZXQoIlJvd3MiKSxFbmRPZkJsb2NrOmEuZ2V0KCJFbmRPZkJsb2NrIiksQmxhY2tJczE6YS5nZXQoIkJsYWNrSXMxIil9KX1yZWFkQmxvY2soKXtmb3IoOyF0aGlzLmVvZjspe2NvbnN0IGU9dGhpcy5jY2l0dEZheERlY29kZXIucmVhZE5leHRDaGFyKCk7aWYoLTE9PT1lKXt0aGlzLmVvZj0hMDtyZXR1cm59dGhpcy5lbnN1cmVCdWZmZXIodGhpcy5idWZmZXJMZW5ndGgrMSk7dGhpcy5idWZmZXJbdGhpcy5idWZmZXJMZW5ndGgrK109ZX19fXQuQ0NJVFRGYXhTdHJlYW09Q0NJVFRGYXhTdHJlYW19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5DQ0lUVEZheERlY29kZXI9dm9pZCAwO3ZhciByPWEoMik7Y29uc3Qgbj0tMSxpPVtbLTEsLTFdLFstMSwtMV0sWzcsOF0sWzcsN10sWzYsNl0sWzYsNl0sWzYsNV0sWzYsNV0sWzQsMF0sWzQsMF0sWzQsMF0sWzQsMF0sWzQsMF0sWzQsMF0sWzQsMF0sWzQsMF0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl1dLHM9W1stMSwtMV0sWzEyLC0yXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWzExLDE3OTJdLFsxMSwxNzkyXSxbMTIsMTk4NF0sWzEyLDIwNDhdLFsxMiwyMTEyXSxbMTIsMjE3Nl0sWzEyLDIyNDBdLFsxMiwyMzA0XSxbMTEsMTg1Nl0sWzExLDE4NTZdLFsxMSwxOTIwXSxbMTEsMTkyMF0sWzEyLDIzNjhdLFsxMiwyNDMyXSxbMTIsMjQ5Nl0sWzEyLDI1NjBdXSxvPVtbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFs4LDI5XSxbOCwyOV0sWzgsMzBdLFs4LDMwXSxbOCw0NV0sWzgsNDVdLFs4LDQ2XSxbOCw0Nl0sWzcsMjJdLFs3LDIyXSxbNywyMl0sWzcsMjJdLFs3LDIzXSxbNywyM10sWzcsMjNdLFs3LDIzXSxbOCw0N10sWzgsNDddLFs4LDQ4XSxbOCw0OF0sWzYsMTNdLFs2LDEzXSxbNiwxM10sWzYsMTNdLFs2LDEzXSxbNiwxM10sWzYsMTNdLFs2LDEzXSxbNywyMF0sWzcsMjBdLFs3LDIwXSxbNywyMF0sWzgsMzNdLFs4LDMzXSxbOCwzNF0sWzgsMzRdLFs4LDM1XSxbOCwzNV0sWzgsMzZdLFs4LDM2XSxbOCwzN10sWzgsMzddLFs4LDM4XSxbOCwzOF0sWzcsMTldLFs3LDE5XSxbNywxOV0sWzcsMTldLFs4LDMxXSxbOCwzMV0sWzgsMzJdLFs4LDMyXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxMl0sWzYsMTJdLFs2LDEyXSxbNiwxMl0sWzYsMTJdLFs2LDEyXSxbNiwxMl0sWzYsMTJdLFs4LDUzXSxbOCw1M10sWzgsNTRdLFs4LDU0XSxbNywyNl0sWzcsMjZdLFs3LDI2XSxbNywyNl0sWzgsMzldLFs4LDM5XSxbOCw0MF0sWzgsNDBdLFs4LDQxXSxbOCw0MV0sWzgsNDJdLFs4LDQyXSxbOCw0M10sWzgsNDNdLFs4LDQ0XSxbOCw0NF0sWzcsMjFdLFs3LDIxXSxbNywyMV0sWzcsMjFdLFs3LDI4XSxbNywyOF0sWzcsMjhdLFs3LDI4XSxbOCw2MV0sWzgsNjFdLFs4LDYyXSxbOCw2Ml0sWzgsNjNdLFs4LDYzXSxbOCwwXSxbOCwwXSxbOCwzMjBdLFs4LDMyMF0sWzgsMzg0XSxbOCwzODRdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzcsMjddLFs3LDI3XSxbNywyN10sWzcsMjddLFs4LDU5XSxbOCw1OV0sWzgsNjBdLFs4LDYwXSxbOSwxNDcyXSxbOSwxNTM2XSxbOSwxNjAwXSxbOSwxNzI4XSxbNywxOF0sWzcsMThdLFs3LDE4XSxbNywxOF0sWzcsMjRdLFs3LDI0XSxbNywyNF0sWzcsMjRdLFs4LDQ5XSxbOCw0OV0sWzgsNTBdLFs4LDUwXSxbOCw1MV0sWzgsNTFdLFs4LDUyXSxbOCw1Ml0sWzcsMjVdLFs3LDI1XSxbNywyNV0sWzcsMjVdLFs4LDU1XSxbOCw1NV0sWzgsNTZdLFs4LDU2XSxbOCw1N10sWzgsNTddLFs4LDU4XSxbOCw1OF0sWzYsMTkyXSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxOTJdLFs2LDE2NjRdLFs2LDE2NjRdLFs2LDE2NjRdLFs2LDE2NjRdLFs2LDE2NjRdLFs2LDE2NjRdLFs2LDE2NjRdLFs2LDE2NjRdLFs4LDQ0OF0sWzgsNDQ4XSxbOCw1MTJdLFs4LDUxMl0sWzksNzA0XSxbOSw3NjhdLFs4LDY0MF0sWzgsNjQwXSxbOCw1NzZdLFs4LDU3Nl0sWzksODMyXSxbOSw4OTZdLFs5LDk2MF0sWzksMTAyNF0sWzksMTA4OF0sWzksMTE1Ml0sWzksMTIxNl0sWzksMTI4MF0sWzksMTM0NF0sWzksMTQwOF0sWzcsMjU2XSxbNywyNTZdLFs3LDI1Nl0sWzcsMjU2XSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs2LDE2XSxbNiwxNl0sWzYsMTZdLFs2LDE2XSxbNiwxNl0sWzYsMTZdLFs2LDE2XSxbNiwxNl0sWzYsMTddLFs2LDE3XSxbNiwxN10sWzYsMTddLFs2LDE3XSxbNiwxN10sWzYsMTddLFs2LDE3XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNiwxNF0sWzYsMTRdLFs2LDE0XSxbNiwxNF0sWzYsMTRdLFs2LDE0XSxbNiwxNF0sWzYsMTRdLFs2LDE1XSxbNiwxNV0sWzYsMTVdLFs2LDE1XSxbNiwxNV0sWzYsMTVdLFs2LDE1XSxbNiwxNV0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddXSxjPVtbLTEsLTFdLFstMSwtMV0sWzEyLC0yXSxbMTIsLTJdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWzExLDE3OTJdLFsxMSwxNzkyXSxbMTEsMTc5Ml0sWzExLDE3OTJdLFsxMiwxOTg0XSxbMTIsMTk4NF0sWzEyLDIwNDhdLFsxMiwyMDQ4XSxbMTIsMjExMl0sWzEyLDIxMTJdLFsxMiwyMTc2XSxbMTIsMjE3Nl0sWzEyLDIyNDBdLFsxMiwyMjQwXSxbMTIsMjMwNF0sWzEyLDIzMDRdLFsxMSwxODU2XSxbMTEsMTg1Nl0sWzExLDE4NTZdLFsxMSwxODU2XSxbMTEsMTkyMF0sWzExLDE5MjBdLFsxMSwxOTIwXSxbMTEsMTkyMF0sWzEyLDIzNjhdLFsxMiwyMzY4XSxbMTIsMjQzMl0sWzEyLDI0MzJdLFsxMiwyNDk2XSxbMTIsMjQ5Nl0sWzEyLDI1NjBdLFsxMiwyNTYwXSxbMTAsMThdLFsxMCwxOF0sWzEwLDE4XSxbMTAsMThdLFsxMCwxOF0sWzEwLDE4XSxbMTAsMThdLFsxMCwxOF0sWzEyLDUyXSxbMTIsNTJdLFsxMyw2NDBdLFsxMyw3MDRdLFsxMyw3NjhdLFsxMyw4MzJdLFsxMiw1NV0sWzEyLDU1XSxbMTIsNTZdLFsxMiw1Nl0sWzEzLDEyODBdLFsxMywxMzQ0XSxbMTMsMTQwOF0sWzEzLDE0NzJdLFsxMiw1OV0sWzEyLDU5XSxbMTIsNjBdLFsxMiw2MF0sWzEzLDE1MzZdLFsxMywxNjAwXSxbMTEsMjRdLFsxMSwyNF0sWzExLDI0XSxbMTEsMjRdLFsxMSwyNV0sWzExLDI1XSxbMTEsMjVdLFsxMSwyNV0sWzEzLDE2NjRdLFsxMywxNzI4XSxbMTIsMzIwXSxbMTIsMzIwXSxbMTIsMzg0XSxbMTIsMzg0XSxbMTIsNDQ4XSxbMTIsNDQ4XSxbMTMsNTEyXSxbMTMsNTc2XSxbMTIsNTNdLFsxMiw1M10sWzEyLDU0XSxbMTIsNTRdLFsxMyw4OTZdLFsxMyw5NjBdLFsxMywxMDI0XSxbMTMsMTA4OF0sWzEzLDExNTJdLFsxMywxMjE2XSxbMTAsNjRdLFsxMCw2NF0sWzEwLDY0XSxbMTAsNjRdLFsxMCw2NF0sWzEwLDY0XSxbMTAsNjRdLFsxMCw2NF1dLGw9W1s4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbMTEsMjNdLFsxMSwyM10sWzEyLDUwXSxbMTIsNTFdLFsxMiw0NF0sWzEyLDQ1XSxbMTIsNDZdLFsxMiw0N10sWzEyLDU3XSxbMTIsNThdLFsxMiw2MV0sWzEyLDI1Nl0sWzEwLDE2XSxbMTAsMTZdLFsxMCwxNl0sWzEwLDE2XSxbMTAsMTddLFsxMCwxN10sWzEwLDE3XSxbMTAsMTddLFsxMiw0OF0sWzEyLDQ5XSxbMTIsNjJdLFsxMiw2M10sWzEyLDMwXSxbMTIsMzFdLFsxMiwzMl0sWzEyLDMzXSxbMTIsNDBdLFsxMiw0MV0sWzExLDIyXSxbMTEsMjJdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzksMTVdLFs5LDE1XSxbOSwxNV0sWzksMTVdLFs5LDE1XSxbOSwxNV0sWzksMTVdLFs5LDE1XSxbMTIsMTI4XSxbMTIsMTkyXSxbMTIsMjZdLFsxMiwyN10sWzEyLDI4XSxbMTIsMjldLFsxMSwxOV0sWzExLDE5XSxbMTEsMjBdLFsxMSwyMF0sWzEyLDM0XSxbMTIsMzVdLFsxMiwzNl0sWzEyLDM3XSxbMTIsMzhdLFsxMiwzOV0sWzExLDIxXSxbMTEsMjFdLFsxMiw0Ml0sWzEyLDQzXSxbMTAsMF0sWzEwLDBdLFsxMCwwXSxbMTAsMF0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXV0saD1bWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbNiw5XSxbNiw4XSxbNSw3XSxbNSw3XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXV07dC5DQ0lUVEZheERlY29kZXI9Y2xhc3MgQ0NJVFRGYXhEZWNvZGVye2NvbnN0cnVjdG9yKGUsdD17fSl7aWYoIWV8fCJmdW5jdGlvbiIhPXR5cGVvZiBlLm5leHQpdGhyb3cgbmV3IEVycm9yKCdDQ0lUVEZheERlY29kZXIgLSBpbnZhbGlkICJzb3VyY2UiIHBhcmFtZXRlci4nKTt0aGlzLnNvdXJjZT1lO3RoaXMuZW9mPSExO3RoaXMuZW5jb2Rpbmc9dC5LfHwwO3RoaXMuZW9saW5lPXQuRW5kT2ZMaW5lfHwhMTt0aGlzLmJ5dGVBbGlnbj10LkVuY29kZWRCeXRlQWxpZ258fCExO3RoaXMuY29sdW1ucz10LkNvbHVtbnN8fDE3Mjg7dGhpcy5yb3dzPXQuUm93c3x8MDtsZXQgYSxyPXQuRW5kT2ZCbG9jaztudWxsPT1yJiYocj0hMCk7dGhpcy5lb2Jsb2NrPXI7dGhpcy5ibGFjaz10LkJsYWNrSXMxfHwhMTt0aGlzLmNvZGluZ0xpbmU9bmV3IFVpbnQzMkFycmF5KHRoaXMuY29sdW1ucysxKTt0aGlzLnJlZkxpbmU9bmV3IFVpbnQzMkFycmF5KHRoaXMuY29sdW1ucysyKTt0aGlzLmNvZGluZ0xpbmVbMF09dGhpcy5jb2x1bW5zO3RoaXMuY29kaW5nUG9zPTA7dGhpcy5yb3c9MDt0aGlzLm5leHRMaW5lMkQ9dGhpcy5lbmNvZGluZzwwO3RoaXMuaW5wdXRCaXRzPTA7dGhpcy5pbnB1dEJ1Zj0wO3RoaXMub3V0cHV0Qml0cz0wO3RoaXMucm93c0RvbmU9ITE7Zm9yKDswPT09KGE9dGhpcy5fbG9va0JpdHMoMTIpKTspdGhpcy5fZWF0Qml0cygxKTsxPT09YSYmdGhpcy5fZWF0Qml0cygxMik7aWYodGhpcy5lbmNvZGluZz4wKXt0aGlzLm5leHRMaW5lMkQ9IXRoaXMuX2xvb2tCaXRzKDEpO3RoaXMuX2VhdEJpdHMoMSl9fXJlYWROZXh0Q2hhcigpe2lmKHRoaXMuZW9mKXJldHVybi0xO2NvbnN0IGU9dGhpcy5yZWZMaW5lLHQ9dGhpcy5jb2RpbmdMaW5lLGE9dGhpcy5jb2x1bW5zO2xldCBpLHMsbyxjLGw7aWYoMD09PXRoaXMub3V0cHV0Qml0cyl7dGhpcy5yb3dzRG9uZSYmKHRoaXMuZW9mPSEwKTtpZih0aGlzLmVvZilyZXR1cm4tMTt0aGlzLmVycj0hMTtsZXQgbyxsLGg7aWYodGhpcy5uZXh0TGluZTJEKXtmb3IoYz0wO3RbY108YTsrK2MpZVtjXT10W2NdO2VbYysrXT1hO2VbY109YTt0WzBdPTA7dGhpcy5jb2RpbmdQb3M9MDtpPTA7cz0wO2Zvcig7dFt0aGlzLmNvZGluZ1Bvc108YTspe289dGhpcy5fZ2V0VHdvRGltQ29kZSgpO3N3aXRjaChvKXtjYXNlIDA6dGhpcy5fYWRkUGl4ZWxzKGVbaSsxXSxzKTtlW2krMV08YSYmKGkrPTIpO2JyZWFrO2Nhc2UgMTpvPWw9MDtpZihzKXtkb3tvKz1oPXRoaXMuX2dldEJsYWNrQ29kZSgpfXdoaWxlKGg+PTY0KTtkb3tsKz1oPXRoaXMuX2dldFdoaXRlQ29kZSgpfXdoaWxlKGg+PTY0KX1lbHNle2Rve28rPWg9dGhpcy5fZ2V0V2hpdGVDb2RlKCl9d2hpbGUoaD49NjQpO2Rve2wrPWg9dGhpcy5fZ2V0QmxhY2tDb2RlKCl9d2hpbGUoaD49NjQpfXRoaXMuX2FkZFBpeGVscyh0W3RoaXMuY29kaW5nUG9zXStvLHMpO3RbdGhpcy5jb2RpbmdQb3NdPGEmJnRoaXMuX2FkZFBpeGVscyh0W3RoaXMuY29kaW5nUG9zXStsLDFecyk7Zm9yKDtlW2ldPD10W3RoaXMuY29kaW5nUG9zXSYmZVtpXTxhOylpKz0yO2JyZWFrO2Nhc2UgNzp0aGlzLl9hZGRQaXhlbHMoZVtpXSszLHMpO3NePTE7aWYodFt0aGlzLmNvZGluZ1Bvc108YSl7KytpO2Zvcig7ZVtpXTw9dFt0aGlzLmNvZGluZ1Bvc10mJmVbaV08YTspaSs9Mn1icmVhaztjYXNlIDU6dGhpcy5fYWRkUGl4ZWxzKGVbaV0rMixzKTtzXj0xO2lmKHRbdGhpcy5jb2RpbmdQb3NdPGEpeysraTtmb3IoO2VbaV08PXRbdGhpcy5jb2RpbmdQb3NdJiZlW2ldPGE7KWkrPTJ9YnJlYWs7Y2FzZSAzOnRoaXMuX2FkZFBpeGVscyhlW2ldKzEscyk7c149MTtpZih0W3RoaXMuY29kaW5nUG9zXTxhKXsrK2k7Zm9yKDtlW2ldPD10W3RoaXMuY29kaW5nUG9zXSYmZVtpXTxhOylpKz0yfWJyZWFrO2Nhc2UgMjp0aGlzLl9hZGRQaXhlbHMoZVtpXSxzKTtzXj0xO2lmKHRbdGhpcy5jb2RpbmdQb3NdPGEpeysraTtmb3IoO2VbaV08PXRbdGhpcy5jb2RpbmdQb3NdJiZlW2ldPGE7KWkrPTJ9YnJlYWs7Y2FzZSA4OnRoaXMuX2FkZFBpeGVsc05lZyhlW2ldLTMscyk7c149MTtpZih0W3RoaXMuY29kaW5nUG9zXTxhKXtpPjA/LS1pOisraTtmb3IoO2VbaV08PXRbdGhpcy5jb2RpbmdQb3NdJiZlW2ldPGE7KWkrPTJ9YnJlYWs7Y2FzZSA2OnRoaXMuX2FkZFBpeGVsc05lZyhlW2ldLTIscyk7c149MTtpZih0W3RoaXMuY29kaW5nUG9zXTxhKXtpPjA/LS1pOisraTtmb3IoO2VbaV08PXRbdGhpcy5jb2RpbmdQb3NdJiZlW2ldPGE7KWkrPTJ9YnJlYWs7Y2FzZSA0OnRoaXMuX2FkZFBpeGVsc05lZyhlW2ldLTEscyk7c149MTtpZih0W3RoaXMuY29kaW5nUG9zXTxhKXtpPjA/LS1pOisraTtmb3IoO2VbaV08PXRbdGhpcy5jb2RpbmdQb3NdJiZlW2ldPGE7KWkrPTJ9YnJlYWs7Y2FzZSBuOnRoaXMuX2FkZFBpeGVscyhhLDApO3RoaXMuZW9mPSEwO2JyZWFrO2RlZmF1bHQ6KDAsci5pbmZvKSgiYmFkIDJkIGNvZGUiKTt0aGlzLl9hZGRQaXhlbHMoYSwwKTt0aGlzLmVycj0hMH19fWVsc2V7dFswXT0wO3RoaXMuY29kaW5nUG9zPTA7cz0wO2Zvcig7dFt0aGlzLmNvZGluZ1Bvc108YTspe289MDtpZihzKWRve28rPWg9dGhpcy5fZ2V0QmxhY2tDb2RlKCl9d2hpbGUoaD49NjQpO2Vsc2UgZG97bys9aD10aGlzLl9nZXRXaGl0ZUNvZGUoKX13aGlsZShoPj02NCk7dGhpcy5fYWRkUGl4ZWxzKHRbdGhpcy5jb2RpbmdQb3NdK28scyk7c149MX19bGV0IHU9ITE7dGhpcy5ieXRlQWxpZ24mJih0aGlzLmlucHV0Qml0cyY9LTgpO2lmKHRoaXMuZW9ibG9ja3x8dGhpcy5yb3chPT10aGlzLnJvd3MtMSl7bz10aGlzLl9sb29rQml0cygxMik7aWYodGhpcy5lb2xpbmUpZm9yKDtvIT09biYmMSE9PW87KXt0aGlzLl9lYXRCaXRzKDEpO289dGhpcy5fbG9va0JpdHMoMTIpfWVsc2UgZm9yKDswPT09bzspe3RoaXMuX2VhdEJpdHMoMSk7bz10aGlzLl9sb29rQml0cygxMil9aWYoMT09PW8pe3RoaXMuX2VhdEJpdHMoMTIpO3U9ITB9ZWxzZSBvPT09biYmKHRoaXMuZW9mPSEwKX1lbHNlIHRoaXMucm93c0RvbmU9ITA7aWYoIXRoaXMuZW9mJiZ0aGlzLmVuY29kaW5nPjAmJiF0aGlzLnJvd3NEb25lKXt0aGlzLm5leHRMaW5lMkQ9IXRoaXMuX2xvb2tCaXRzKDEpO3RoaXMuX2VhdEJpdHMoMSl9aWYodGhpcy5lb2Jsb2NrJiZ1JiZ0aGlzLmJ5dGVBbGlnbil7bz10aGlzLl9sb29rQml0cygxMik7aWYoMT09PW8pe3RoaXMuX2VhdEJpdHMoMTIpO2lmKHRoaXMuZW5jb2Rpbmc+MCl7dGhpcy5fbG9va0JpdHMoMSk7dGhpcy5fZWF0Qml0cygxKX1pZih0aGlzLmVuY29kaW5nPj0wKWZvcihjPTA7Yzw0OysrYyl7bz10aGlzLl9sb29rQml0cygxMik7MSE9PW8mJigwLHIuaW5mbykoImJhZCBydGMgY29kZTogIitvKTt0aGlzLl9lYXRCaXRzKDEyKTtpZih0aGlzLmVuY29kaW5nPjApe3RoaXMuX2xvb2tCaXRzKDEpO3RoaXMuX2VhdEJpdHMoMSl9fXRoaXMuZW9mPSEwfX1lbHNlIGlmKHRoaXMuZXJyJiZ0aGlzLmVvbGluZSl7Zm9yKDs7KXtvPXRoaXMuX2xvb2tCaXRzKDEzKTtpZihvPT09bil7dGhpcy5lb2Y9ITA7cmV0dXJuLTF9aWYobz4+MT09MSlicmVhazt0aGlzLl9lYXRCaXRzKDEpfXRoaXMuX2VhdEJpdHMoMTIpO2lmKHRoaXMuZW5jb2Rpbmc+MCl7dGhpcy5fZWF0Qml0cygxKTt0aGlzLm5leHRMaW5lMkQ9ISgxJm8pfX10WzBdPjA/dGhpcy5vdXRwdXRCaXRzPXRbdGhpcy5jb2RpbmdQb3M9MF06dGhpcy5vdXRwdXRCaXRzPXRbdGhpcy5jb2RpbmdQb3M9MV07dGhpcy5yb3crK31pZih0aGlzLm91dHB1dEJpdHM+PTgpe2w9MSZ0aGlzLmNvZGluZ1Bvcz8wOjI1NTt0aGlzLm91dHB1dEJpdHMtPTg7aWYoMD09PXRoaXMub3V0cHV0Qml0cyYmdFt0aGlzLmNvZGluZ1Bvc108YSl7dGhpcy5jb2RpbmdQb3MrKzt0aGlzLm91dHB1dEJpdHM9dFt0aGlzLmNvZGluZ1Bvc10tdFt0aGlzLmNvZGluZ1Bvcy0xXX19ZWxzZXtvPTg7bD0wO2Rve2lmKCJudW1iZXIiIT10eXBlb2YgdGhpcy5vdXRwdXRCaXRzKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCdJbnZhbGlkIC9DQ0lUVEZheERlY29kZSBkYXRhLCAib3V0cHV0Qml0cyIgbXVzdCBiZSBhIG51bWJlci4nKTtpZih0aGlzLm91dHB1dEJpdHM+byl7bDw8PW87MSZ0aGlzLmNvZGluZ1Bvc3x8KGx8PTI1NT4+OC1vKTt0aGlzLm91dHB1dEJpdHMtPW87bz0wfWVsc2V7bDw8PXRoaXMub3V0cHV0Qml0czsxJnRoaXMuY29kaW5nUG9zfHwobHw9MjU1Pj44LXRoaXMub3V0cHV0Qml0cyk7by09dGhpcy5vdXRwdXRCaXRzO3RoaXMub3V0cHV0Qml0cz0wO2lmKHRbdGhpcy5jb2RpbmdQb3NdPGEpe3RoaXMuY29kaW5nUG9zKys7dGhpcy5vdXRwdXRCaXRzPXRbdGhpcy5jb2RpbmdQb3NdLXRbdGhpcy5jb2RpbmdQb3MtMV19ZWxzZSBpZihvPjApe2w8PD1vO289MH19fXdoaWxlKG8pfXRoaXMuYmxhY2smJihsXj0yNTUpO3JldHVybiBsfV9hZGRQaXhlbHMoZSx0KXtjb25zdCBhPXRoaXMuY29kaW5nTGluZTtsZXQgbj10aGlzLmNvZGluZ1BvcztpZihlPmFbbl0pe2lmKGU+dGhpcy5jb2x1bW5zKXsoMCxyLmluZm8pKCJyb3cgaXMgd3JvbmcgbGVuZ3RoIik7dGhpcy5lcnI9ITA7ZT10aGlzLmNvbHVtbnN9MSZuXnQmJisrbjthW25dPWV9dGhpcy5jb2RpbmdQb3M9bn1fYWRkUGl4ZWxzTmVnKGUsdCl7Y29uc3QgYT10aGlzLmNvZGluZ0xpbmU7bGV0IG49dGhpcy5jb2RpbmdQb3M7aWYoZT5hW25dKXtpZihlPnRoaXMuY29sdW1ucyl7KDAsci5pbmZvKSgicm93IGlzIHdyb25nIGxlbmd0aCIpO3RoaXMuZXJyPSEwO2U9dGhpcy5jb2x1bW5zfTEmbl50JiYrK247YVtuXT1lfWVsc2UgaWYoZTxhW25dKXtpZihlPDApeygwLHIuaW5mbykoImludmFsaWQgY29kZSIpO3RoaXMuZXJyPSEwO2U9MH1mb3IoO24+MCYmZTxhW24tMV07KS0tbjthW25dPWV9dGhpcy5jb2RpbmdQb3M9bn1fZmluZFRhYmxlQ29kZShlLHQsYSxyKXtjb25zdCBpPXJ8fDA7Zm9yKGxldCByPWU7cjw9dDsrK3Ipe2xldCBlPXRoaXMuX2xvb2tCaXRzKHIpO2lmKGU9PT1uKXJldHVyblshMCwxLCExXTtyPHQmJihlPDw9dC1yKTtpZighaXx8ZT49aSl7Y29uc3QgdD1hW2UtaV07aWYodFswXT09PXIpe3RoaXMuX2VhdEJpdHMocik7cmV0dXJuWyEwLHRbMV0sITBdfX19cmV0dXJuWyExLDAsITFdfV9nZXRUd29EaW1Db2RlKCl7bGV0IGUsdD0wO2lmKHRoaXMuZW9ibG9jayl7dD10aGlzLl9sb29rQml0cyg3KTtlPWlbdF07aWYoZSYmZVswXT4wKXt0aGlzLl9lYXRCaXRzKGVbMF0pO3JldHVybiBlWzFdfX1lbHNle2NvbnN0IGU9dGhpcy5fZmluZFRhYmxlQ29kZSgxLDcsaSk7aWYoZVswXSYmZVsyXSlyZXR1cm4gZVsxXX0oMCxyLmluZm8pKCJCYWQgdHdvIGRpbSBjb2RlIik7cmV0dXJuIG59X2dldFdoaXRlQ29kZSgpe2xldCBlLHQ9MDtpZih0aGlzLmVvYmxvY2spe3Q9dGhpcy5fbG9va0JpdHMoMTIpO2lmKHQ9PT1uKXJldHVybiAxO2U9dD4+NT09MD9zW3RdOm9bdD4+M107aWYoZVswXT4wKXt0aGlzLl9lYXRCaXRzKGVbMF0pO3JldHVybiBlWzFdfX1lbHNle2xldCBlPXRoaXMuX2ZpbmRUYWJsZUNvZGUoMSw5LG8pO2lmKGVbMF0pcmV0dXJuIGVbMV07ZT10aGlzLl9maW5kVGFibGVDb2RlKDExLDEyLHMpO2lmKGVbMF0pcmV0dXJuIGVbMV19KDAsci5pbmZvKSgiYmFkIHdoaXRlIGNvZGUiKTt0aGlzLl9lYXRCaXRzKDEpO3JldHVybiAxfV9nZXRCbGFja0NvZGUoKXtsZXQgZSx0O2lmKHRoaXMuZW9ibG9jayl7ZT10aGlzLl9sb29rQml0cygxMyk7aWYoZT09PW4pcmV0dXJuIDE7dD1lPj43PT0wP2NbZV06ZT4+OT09MCYmZT4+NyE9MD9sWyhlPj4xKS02NF06aFtlPj43XTtpZih0WzBdPjApe3RoaXMuX2VhdEJpdHModFswXSk7cmV0dXJuIHRbMV19fWVsc2V7bGV0IGU9dGhpcy5fZmluZFRhYmxlQ29kZSgyLDYsaCk7aWYoZVswXSlyZXR1cm4gZVsxXTtlPXRoaXMuX2ZpbmRUYWJsZUNvZGUoNywxMixsLDY0KTtpZihlWzBdKXJldHVybiBlWzFdO2U9dGhpcy5fZmluZFRhYmxlQ29kZSgxMCwxMyxjKTtpZihlWzBdKXJldHVybiBlWzFdfSgwLHIuaW5mbykoImJhZCBibGFjayBjb2RlIik7dGhpcy5fZWF0Qml0cygxKTtyZXR1cm4gMX1fbG9va0JpdHMoZSl7bGV0IHQ7Zm9yKDt0aGlzLmlucHV0Qml0czxlOyl7aWYoLTE9PT0odD10aGlzLnNvdXJjZS5uZXh0KCkpKXJldHVybiAwPT09dGhpcy5pbnB1dEJpdHM/bjp0aGlzLmlucHV0QnVmPDxlLXRoaXMuaW5wdXRCaXRzJjY1NTM1Pj4xNi1lO3RoaXMuaW5wdXRCdWY9dGhpcy5pbnB1dEJ1Zjw8OHx0O3RoaXMuaW5wdXRCaXRzKz04fXJldHVybiB0aGlzLmlucHV0QnVmPj50aGlzLmlucHV0Qml0cy1lJjY1NTM1Pj4xNi1lfV9lYXRCaXRzKGUpeyh0aGlzLmlucHV0Qml0cy09ZSk8MCYmKHRoaXMuaW5wdXRCaXRzPTApfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5GbGF0ZVN0cmVhbT12b2lkIDA7dmFyIHI9YSgxNyksbj1hKDIpO2NvbnN0IGk9bmV3IEludDMyQXJyYXkoWzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdKSxzPW5ldyBJbnQzMkFycmF5KFszLDQsNSw2LDcsOCw5LDEwLDY1NTQ3LDY1NTQ5LDY1NTUxLDY1NTUzLDEzMTA5MSwxMzEwOTUsMTMxMDk5LDEzMTEwMywxOTY2NDMsMTk2NjUxLDE5NjY1OSwxOTY2NjcsMjYyMjExLDI2MjIyNywyNjIyNDMsMjYyMjU5LDMyNzgxMSwzMjc4NDMsMzI3ODc1LDMyNzkwNywyNTgsMjU4LDI1OF0pLG89bmV3IEludDMyQXJyYXkoWzEsMiwzLDQsNjU1NDEsNjU1NDMsMTMxMDgxLDEzMTA4NSwxOTY2MjUsMTk2NjMzLDI2MjE3NywyNjIxOTMsMzI3NzQ1LDMyNzc3NywzOTMzNDUsMzkzNDA5LDQ1OTAwOSw0NTkxMzcsNTI0ODAxLDUyNTA1Nyw1OTA4NDksNTkxMzYxLDY1NzQwOSw2NTg0MzMsNzI0OTkzLDcyNzA0MSw3OTQ2MjUsNzk4NzIxLDg2ODM1Myw4NzY1NDVdKSxjPVtuZXcgSW50MzJBcnJheShbNDU5MDA4LDUyNDM2OCw1MjQzMDQsNTI0NTY4LDQ1OTAyNCw1MjQ0MDAsNTI0MzM2LDU5MDAxNiw0NTkwMTYsNTI0Mzg0LDUyNDMyMCw1ODk5ODQsNTI0Mjg4LDUyNDQxNiw1MjQzNTIsNTkwMDQ4LDQ1OTAxMiw1MjQzNzYsNTI0MzEyLDU4OTk2OCw0NTkwMjgsNTI0NDA4LDUyNDM0NCw1OTAwMzIsNDU5MDIwLDUyNDM5Miw1MjQzMjgsNTllNCw1MjQyOTYsNTI0NDI0LDUyNDM2MCw1OTAwNjQsNDU5MDEwLDUyNDM3Miw1MjQzMDgsNTI0NTcyLDQ1OTAyNiw1MjQ0MDQsNTI0MzQwLDU5MDAyNCw0NTkwMTgsNTI0Mzg4LDUyNDMyNCw1ODk5OTIsNTI0MjkyLDUyNDQyMCw1MjQzNTYsNTkwMDU2LDQ1OTAxNCw1MjQzODAsNTI0MzE2LDU4OTk3Niw0NTkwMzAsNTI0NDEyLDUyNDM0OCw1OTAwNDAsNDU5MDIyLDUyNDM5Niw1MjQzMzIsNTkwMDA4LDUyNDMwMCw1MjQ0MjgsNTI0MzY0LDU5MDA3Miw0NTkwMDksNTI0MzcwLDUyNDMwNiw1MjQ1NzAsNDU5MDI1LDUyNDQwMiw1MjQzMzgsNTkwMDIwLDQ1OTAxNyw1MjQzODYsNTI0MzIyLDU4OTk4OCw1MjQyOTAsNTI0NDE4LDUyNDM1NCw1OTAwNTIsNDU5MDEzLDUyNDM3OCw1MjQzMTQsNTg5OTcyLDQ1OTAyOSw1MjQ0MTAsNTI0MzQ2LDU5MDAzNiw0NTkwMjEsNTI0Mzk0LDUyNDMzMCw1OTAwMDQsNTI0Mjk4LDUyNDQyNiw1MjQzNjIsNTkwMDY4LDQ1OTAxMSw1MjQzNzQsNTI0MzEwLDUyNDU3NCw0NTkwMjcsNTI0NDA2LDUyNDM0Miw1OTAwMjgsNDU5MDE5LDUyNDM5MCw1MjQzMjYsNTg5OTk2LDUyNDI5NCw1MjQ0MjIsNTI0MzU4LDU5MDA2MCw0NTkwMTUsNTI0MzgyLDUyNDMxOCw1ODk5ODAsNDU5MDMxLDUyNDQxNCw1MjQzNTAsNTkwMDQ0LDQ1OTAyMyw1MjQzOTgsNTI0MzM0LDU5MDAxMiw1MjQzMDIsNTI0NDMwLDUyNDM2Niw1OTAwNzYsNDU5MDA4LDUyNDM2OSw1MjQzMDUsNTI0NTY5LDQ1OTAyNCw1MjQ0MDEsNTI0MzM3LDU5MDAxOCw0NTkwMTYsNTI0Mzg1LDUyNDMyMSw1ODk5ODYsNTI0Mjg5LDUyNDQxNyw1MjQzNTMsNTkwMDUwLDQ1OTAxMiw1MjQzNzcsNTI0MzEzLDU4OTk3MCw0NTkwMjgsNTI0NDA5LDUyNDM0NSw1OTAwMzQsNDU5MDIwLDUyNDM5Myw1MjQzMjksNTkwMDAyLDUyNDI5Nyw1MjQ0MjUsNTI0MzYxLDU5MDA2Niw0NTkwMTAsNTI0MzczLDUyNDMwOSw1MjQ1NzMsNDU5MDI2LDUyNDQwNSw1MjQzNDEsNTkwMDI2LDQ1OTAxOCw1MjQzODksNTI0MzI1LDU4OTk5NCw1MjQyOTMsNTI0NDIxLDUyNDM1Nyw1OTAwNTgsNDU5MDE0LDUyNDM4MSw1MjQzMTcsNTg5OTc4LDQ1OTAzMCw1MjQ0MTMsNTI0MzQ5LDU5MDA0Miw0NTkwMjIsNTI0Mzk3LDUyNDMzMyw1OTAwMTAsNTI0MzAxLDUyNDQyOSw1MjQzNjUsNTkwMDc0LDQ1OTAwOSw1MjQzNzEsNTI0MzA3LDUyNDU3MSw0NTkwMjUsNTI0NDAzLDUyNDMzOSw1OTAwMjIsNDU5MDE3LDUyNDM4Nyw1MjQzMjMsNTg5OTkwLDUyNDI5MSw1MjQ0MTksNTI0MzU1LDU5MDA1NCw0NTkwMTMsNTI0Mzc5LDUyNDMxNSw1ODk5NzQsNDU5MDI5LDUyNDQxMSw1MjQzNDcsNTkwMDM4LDQ1OTAyMSw1MjQzOTUsNTI0MzMxLDU5MDAwNiw1MjQyOTksNTI0NDI3LDUyNDM2Myw1OTAwNzAsNDU5MDExLDUyNDM3NSw1MjQzMTEsNTI0NTc1LDQ1OTAyNyw1MjQ0MDcsNTI0MzQzLDU5MDAzMCw0NTkwMTksNTI0MzkxLDUyNDMyNyw1ODk5OTgsNTI0Mjk1LDUyNDQyMyw1MjQzNTksNTkwMDYyLDQ1OTAxNSw1MjQzODMsNTI0MzE5LDU4OTk4Miw0NTkwMzEsNTI0NDE1LDUyNDM1MSw1OTAwNDYsNDU5MDIzLDUyNDM5OSw1MjQzMzUsNTkwMDE0LDUyNDMwMyw1MjQ0MzEsNTI0MzY3LDU5MDA3OCw0NTkwMDgsNTI0MzY4LDUyNDMwNCw1MjQ1NjgsNDU5MDI0LDUyNDQwMCw1MjQzMzYsNTkwMDE3LDQ1OTAxNiw1MjQzODQsNTI0MzIwLDU4OTk4NSw1MjQyODgsNTI0NDE2LDUyNDM1Miw1OTAwNDksNDU5MDEyLDUyNDM3Niw1MjQzMTIsNTg5OTY5LDQ1OTAyOCw1MjQ0MDgsNTI0MzQ0LDU5MDAzMyw0NTkwMjAsNTI0MzkyLDUyNDMyOCw1OTAwMDEsNTI0Mjk2LDUyNDQyNCw1MjQzNjAsNTkwMDY1LDQ1OTAxMCw1MjQzNzIsNTI0MzA4LDUyNDU3Miw0NTkwMjYsNTI0NDA0LDUyNDM0MCw1OTAwMjUsNDU5MDE4LDUyNDM4OCw1MjQzMjQsNTg5OTkzLDUyNDI5Miw1MjQ0MjAsNTI0MzU2LDU5MDA1Nyw0NTkwMTQsNTI0MzgwLDUyNDMxNiw1ODk5NzcsNDU5MDMwLDUyNDQxMiw1MjQzNDgsNTkwMDQxLDQ1OTAyMiw1MjQzOTYsNTI0MzMyLDU5MDAwOSw1MjQzMDAsNTI0NDI4LDUyNDM2NCw1OTAwNzMsNDU5MDA5LDUyNDM3MCw1MjQzMDYsNTI0NTcwLDQ1OTAyNSw1MjQ0MDIsNTI0MzM4LDU5MDAyMSw0NTkwMTcsNTI0Mzg2LDUyNDMyMiw1ODk5ODksNTI0MjkwLDUyNDQxOCw1MjQzNTQsNTkwMDUzLDQ1OTAxMyw1MjQzNzgsNTI0MzE0LDU4OTk3Myw0NTkwMjksNTI0NDEwLDUyNDM0Niw1OTAwMzcsNDU5MDIxLDUyNDM5NCw1MjQzMzAsNTkwMDA1LDUyNDI5OCw1MjQ0MjYsNTI0MzYyLDU5MDA2OSw0NTkwMTEsNTI0Mzc0LDUyNDMxMCw1MjQ1NzQsNDU5MDI3LDUyNDQwNiw1MjQzNDIsNTkwMDI5LDQ1OTAxOSw1MjQzOTAsNTI0MzI2LDU4OTk5Nyw1MjQyOTQsNTI0NDIyLDUyNDM1OCw1OTAwNjEsNDU5MDE1LDUyNDM4Miw1MjQzMTgsNTg5OTgxLDQ1OTAzMSw1MjQ0MTQsNTI0MzUwLDU5MDA0NSw0NTkwMjMsNTI0Mzk4LDUyNDMzNCw1OTAwMTMsNTI0MzAyLDUyNDQzMCw1MjQzNjYsNTkwMDc3LDQ1OTAwOCw1MjQzNjksNTI0MzA1LDUyNDU2OSw0NTkwMjQsNTI0NDAxLDUyNDMzNyw1OTAwMTksNDU5MDE2LDUyNDM4NSw1MjQzMjEsNTg5OTg3LDUyNDI4OSw1MjQ0MTcsNTI0MzUzLDU5MDA1MSw0NTkwMTIsNTI0Mzc3LDUyNDMxMyw1ODk5NzEsNDU5MDI4LDUyNDQwOSw1MjQzNDUsNTkwMDM1LDQ1OTAyMCw1MjQzOTMsNTI0MzI5LDU5MDAwMyw1MjQyOTcsNTI0NDI1LDUyNDM2MSw1OTAwNjcsNDU5MDEwLDUyNDM3Myw1MjQzMDksNTI0NTczLDQ1OTAyNiw1MjQ0MDUsNTI0MzQxLDU5MDAyNyw0NTkwMTgsNTI0Mzg5LDUyNDMyNSw1ODk5OTUsNTI0MjkzLDUyNDQyMSw1MjQzNTcsNTkwMDU5LDQ1OTAxNCw1MjQzODEsNTI0MzE3LDU4OTk3OSw0NTkwMzAsNTI0NDEzLDUyNDM0OSw1OTAwNDMsNDU5MDIyLDUyNDM5Nyw1MjQzMzMsNTkwMDExLDUyNDMwMSw1MjQ0MjksNTI0MzY1LDU5MDA3NSw0NTkwMDksNTI0MzcxLDUyNDMwNyw1MjQ1NzEsNDU5MDI1LDUyNDQwMyw1MjQzMzksNTkwMDIzLDQ1OTAxNyw1MjQzODcsNTI0MzIzLDU4OTk5MSw1MjQyOTEsNTI0NDE5LDUyNDM1NSw1OTAwNTUsNDU5MDEzLDUyNDM3OSw1MjQzMTUsNTg5OTc1LDQ1OTAyOSw1MjQ0MTEsNTI0MzQ3LDU5MDAzOSw0NTkwMjEsNTI0Mzk1LDUyNDMzMSw1OTAwMDcsNTI0Mjk5LDUyNDQyNyw1MjQzNjMsNTkwMDcxLDQ1OTAxMSw1MjQzNzUsNTI0MzExLDUyNDU3NSw0NTkwMjcsNTI0NDA3LDUyNDM0Myw1OTAwMzEsNDU5MDE5LDUyNDM5MSw1MjQzMjcsNTg5OTk5LDUyNDI5NSw1MjQ0MjMsNTI0MzU5LDU5MDA2Myw0NTkwMTUsNTI0MzgzLDUyNDMxOSw1ODk5ODMsNDU5MDMxLDUyNDQxNSw1MjQzNTEsNTkwMDQ3LDQ1OTAyMyw1MjQzOTksNTI0MzM1LDU5MDAxNSw1MjQzMDMsNTI0NDMxLDUyNDM2Nyw1OTAwNzldKSw5XSxsPVtuZXcgSW50MzJBcnJheShbMzI3NjgwLDMyNzY5NiwzMjc2ODgsMzI3NzA0LDMyNzY4NCwzMjc3MDAsMzI3NjkyLDMyNzcwOCwzMjc2ODIsMzI3Njk4LDMyNzY5MCwzMjc3MDYsMzI3Njg2LDMyNzcwMiwzMjc2OTQsMCwzMjc2ODEsMzI3Njk3LDMyNzY4OSwzMjc3MDUsMzI3Njg1LDMyNzcwMSwzMjc2OTMsMzI3NzA5LDMyNzY4MywzMjc2OTksMzI3NjkxLDMyNzcwNywzMjc2ODcsMzI3NzAzLDMyNzY5NSwwXSksNV07Y2xhc3MgRmxhdGVTdHJlYW0gZXh0ZW5kcyByLkRlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKHQpO3RoaXMuc3RyPWU7dGhpcy5kaWN0PWUuZGljdDtjb25zdCBhPWUuZ2V0Qnl0ZSgpLHI9ZS5nZXRCeXRlKCk7aWYoLTE9PT1hfHwtMT09PXIpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoYEludmFsaWQgaGVhZGVyIGluIGZsYXRlIHN0cmVhbTogJHthfSwgJHtyfWApO2lmKDghPSgxNSZhKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcihgVW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QgaW4gZmxhdGUgc3RyZWFtOiAke2F9LCAke3J9YCk7aWYoKChhPDw4KStyKSUzMSE9MCl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcihgQmFkIEZDSEVDSyBpbiBmbGF0ZSBzdHJlYW06ICR7YX0sICR7cn1gKTtpZigzMiZyKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKGBGRElDVCBiaXQgc2V0IGluIGZsYXRlIHN0cmVhbTogJHthfSwgJHtyfWApO3RoaXMuY29kZVNpemU9MDt0aGlzLmNvZGVCdWY9MH1nZXRCaXRzKGUpe2NvbnN0IHQ9dGhpcy5zdHI7bGV0IGEscj10aGlzLmNvZGVTaXplLGk9dGhpcy5jb2RlQnVmO2Zvcig7cjxlOyl7aWYoLTE9PT0oYT10LmdldEJ5dGUoKSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkJhZCBlbmNvZGluZyBpbiBmbGF0ZSBzdHJlYW0iKTtpfD1hPDxyO3IrPTh9YT1pJigxPDxlKS0xO3RoaXMuY29kZUJ1Zj1pPj5lO3RoaXMuY29kZVNpemU9ci09ZTtyZXR1cm4gYX1nZXRDb2RlKGUpe2NvbnN0IHQ9dGhpcy5zdHIsYT1lWzBdLHI9ZVsxXTtsZXQgaSxzPXRoaXMuY29kZVNpemUsbz10aGlzLmNvZGVCdWY7Zm9yKDtzPHImJi0xIT09KGk9dC5nZXRCeXRlKCkpOyl7b3w9aTw8cztzKz04fWNvbnN0IGM9YVtvJigxPDxyKS0xXSxsPWM+PjE2LGg9NjU1MzUmYztpZihsPDF8fHM8bCl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiQmFkIGVuY29kaW5nIGluIGZsYXRlIHN0cmVhbSIpO3RoaXMuY29kZUJ1Zj1vPj5sO3RoaXMuY29kZVNpemU9cy1sO3JldHVybiBofWdlbmVyYXRlSHVmZm1hblRhYmxlKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IGEscj0wO2ZvcihhPTA7YTx0OysrYSllW2FdPnImJihyPWVbYV0pO2NvbnN0IG49MTw8cixpPW5ldyBJbnQzMkFycmF5KG4pO2ZvcihsZXQgcz0xLG89MCxjPTI7czw9cjsrK3Msbzw8PTEsYzw8PTEpZm9yKGxldCByPTA7cjx0OysrcilpZihlW3JdPT09cyl7bGV0IGU9MCx0PW87Zm9yKGE9MDthPHM7KythKXtlPWU8PDF8MSZ0O3Q+Pj0xfWZvcihhPWU7YTxuO2ErPWMpaVthXT1zPDwxNnxyOysrb31yZXR1cm5baSxyXX1yZWFkQmxvY2soKXtsZXQgZSx0O2NvbnN0IGE9dGhpcy5zdHI7bGV0IHIsaCx1PXRoaXMuZ2V0Qml0cygzKTsxJnUmJih0aGlzLmVvZj0hMCk7dT4+PTE7aWYoMD09PXUpe2xldCB0O2lmKC0xPT09KHQ9YS5nZXRCeXRlKCkpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJCYWQgYmxvY2sgaGVhZGVyIGluIGZsYXRlIHN0cmVhbSIpO2xldCByPXQ7aWYoLTE9PT0odD1hLmdldEJ5dGUoKSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkJhZCBibG9jayBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtIik7cnw9dDw8ODtpZigtMT09PSh0PWEuZ2V0Qnl0ZSgpKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiQmFkIGJsb2NrIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW0iKTtsZXQgaT10O2lmKC0xPT09KHQ9YS5nZXRCeXRlKCkpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJCYWQgYmxvY2sgaGVhZGVyIGluIGZsYXRlIHN0cmVhbSIpO2l8PXQ8PDg7aWYoaSE9PSg2NTUzNSZ+cikmJigwIT09cnx8MCE9PWkpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJCYWQgdW5jb21wcmVzc2VkIGJsb2NrIGxlbmd0aCBpbiBmbGF0ZSBzdHJlYW0iKTt0aGlzLmNvZGVCdWY9MDt0aGlzLmNvZGVTaXplPTA7Y29uc3Qgcz10aGlzLmJ1ZmZlckxlbmd0aCxvPXMrcjtlPXRoaXMuZW5zdXJlQnVmZmVyKG8pO3RoaXMuYnVmZmVyTGVuZ3RoPW87aWYoMD09PXIpLTE9PT1hLnBlZWtCeXRlKCkmJih0aGlzLmVvZj0hMCk7ZWxzZXtjb25zdCB0PWEuZ2V0Qnl0ZXMocik7ZS5zZXQodCxzKTt0Lmxlbmd0aDxyJiYodGhpcy5lb2Y9ITApfXJldHVybn1pZigxPT09dSl7cj1jO2g9bH1lbHNle2lmKDIhPT11KXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIGJsb2NrIHR5cGUgaW4gZmxhdGUgc3RyZWFtIik7e2NvbnN0IGU9dGhpcy5nZXRCaXRzKDUpKzI1NyxhPXRoaXMuZ2V0Qml0cyg1KSsxLG49dGhpcy5nZXRCaXRzKDQpKzQscz1uZXcgVWludDhBcnJheShpLmxlbmd0aCk7bGV0IG87Zm9yKG89MDtvPG47KytvKXNbaVtvXV09dGhpcy5nZXRCaXRzKDMpO2NvbnN0IGM9dGhpcy5nZW5lcmF0ZUh1ZmZtYW5UYWJsZShzKTt0PTA7bz0wO2NvbnN0IGw9ZSthLHU9bmV3IFVpbnQ4QXJyYXkobCk7bGV0IGQsZixnO2Zvcig7bzxsOyl7Y29uc3QgZT10aGlzLmdldENvZGUoYyk7aWYoMTY9PT1lKXtkPTI7Zj0zO2c9dH1lbHNlIGlmKDE3PT09ZSl7ZD0zO2Y9MztnPXQ9MH1lbHNle2lmKDE4IT09ZSl7dVtvKytdPXQ9ZTtjb250aW51ZX1kPTc7Zj0xMTtnPXQ9MH1sZXQgYT10aGlzLmdldEJpdHMoZCkrZjtmb3IoO2EtLSA+MDspdVtvKytdPWd9cj10aGlzLmdlbmVyYXRlSHVmZm1hblRhYmxlKHUuc3ViYXJyYXkoMCxlKSk7aD10aGlzLmdlbmVyYXRlSHVmZm1hblRhYmxlKHUuc3ViYXJyYXkoZSxsKSl9fWU9dGhpcy5idWZmZXI7bGV0IGQ9ZT9lLmxlbmd0aDowLGY9dGhpcy5idWZmZXJMZW5ndGg7Zm9yKDs7KXtsZXQgYT10aGlzLmdldENvZGUocik7aWYoYTwyNTYpe2lmKGYrMT49ZCl7ZT10aGlzLmVuc3VyZUJ1ZmZlcihmKzEpO2Q9ZS5sZW5ndGh9ZVtmKytdPWE7Y29udGludWV9aWYoMjU2PT09YSl7dGhpcy5idWZmZXJMZW5ndGg9ZjtyZXR1cm59YS09MjU3O2E9c1thXTtsZXQgbj1hPj4xNjtuPjAmJihuPXRoaXMuZ2V0Qml0cyhuKSk7dD0oNjU1MzUmYSkrbjthPXRoaXMuZ2V0Q29kZShoKTthPW9bYV07bj1hPj4xNjtuPjAmJihuPXRoaXMuZ2V0Qml0cyhuKSk7Y29uc3QgaT0oNjU1MzUmYSkrbjtpZihmK3Q+PWQpe2U9dGhpcy5lbnN1cmVCdWZmZXIoZit0KTtkPWUubGVuZ3RofWZvcihsZXQgYT0wO2E8dDsrK2EsKytmKWVbZl09ZVtmLWldfX19dC5GbGF0ZVN0cmVhbT1GbGF0ZVN0cmVhbX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkpiaWcyU3RyZWFtPXZvaWQgMDt2YXIgcj1hKDUpLG49YSgxNyksaT1hKDMpLHM9YSgyMyksbz1hKDIpO2NsYXNzIEpiaWcyU3RyZWFtIGV4dGVuZHMgbi5EZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0LGEpe3N1cGVyKHQpO3RoaXMuc3RyZWFtPWU7dGhpcy5kaWN0PWUuZGljdDt0aGlzLm1heWJlTGVuZ3RoPXQ7dGhpcy5wYXJhbXM9YX1nZXQgYnl0ZXMoKXtyZXR1cm4oMCxvLnNoYWRvdykodGhpcywiYnl0ZXMiLHRoaXMuc3RyZWFtLmdldEJ5dGVzKHRoaXMubWF5YmVMZW5ndGgpKX1lbnN1cmVCdWZmZXIoZSl7fXJlYWRCbG9jaygpe2lmKHRoaXMuZW9mKXJldHVybjtjb25zdCBlPW5ldyBzLkpiaWcySW1hZ2UsdD1bXTtpZih0aGlzLnBhcmFtcyBpbnN0YW5jZW9mIGkuRGljdCl7Y29uc3QgZT10aGlzLnBhcmFtcy5nZXQoIkpCSUcyR2xvYmFscyIpO2lmKGUgaW5zdGFuY2VvZiByLkJhc2VTdHJlYW0pe2NvbnN0IGE9ZS5nZXRCeXRlcygpO3QucHVzaCh7ZGF0YTphLHN0YXJ0OjAsZW5kOmEubGVuZ3RofSl9fXQucHVzaCh7ZGF0YTp0aGlzLmJ5dGVzLHN0YXJ0OjAsZW5kOnRoaXMuYnl0ZXMubGVuZ3RofSk7Y29uc3QgYT1lLnBhcnNlQ2h1bmtzKHQpLG49YS5sZW5ndGg7Zm9yKGxldCBlPTA7ZTxuO2UrKylhW2VdXj0yNTU7dGhpcy5idWZmZXI9YTt0aGlzLmJ1ZmZlckxlbmd0aD1uO3RoaXMuZW9mPSEwfX10LkpiaWcyU3RyZWFtPUpiaWcyU3RyZWFtfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuSmJpZzJJbWFnZT12b2lkIDA7dmFyIHI9YSgyKSxuPWEoNCksaT1hKDI0KSxzPWEoMjApO2NsYXNzIEpiaWcyRXJyb3IgZXh0ZW5kcyByLkJhc2VFeGNlcHRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoYEpCSUcyIGVycm9yOiAke2V9YCwiSmJpZzJFcnJvciIpfX1jbGFzcyBDb250ZXh0Q2FjaGV7Z2V0Q29udGV4dHMoZSl7cmV0dXJuIGUgaW4gdGhpcz90aGlzW2VdOnRoaXNbZV09bmV3IEludDhBcnJheSg2NTUzNil9fWNsYXNzIERlY29kaW5nQ29udGV4dHtjb25zdHJ1Y3RvcihlLHQsYSl7dGhpcy5kYXRhPWU7dGhpcy5zdGFydD10O3RoaXMuZW5kPWF9Z2V0IGRlY29kZXIoKXtjb25zdCBlPW5ldyBpLkFyaXRobWV0aWNEZWNvZGVyKHRoaXMuZGF0YSx0aGlzLnN0YXJ0LHRoaXMuZW5kKTtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiZGVjb2RlciIsZSl9Z2V0IGNvbnRleHRDYWNoZSgpe2NvbnN0IGU9bmV3IENvbnRleHRDYWNoZTtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiY29udGV4dENhY2hlIixlKX19ZnVuY3Rpb24gZGVjb2RlSW50ZWdlcihlLHQsYSl7Y29uc3Qgcj1lLmdldENvbnRleHRzKHQpO2xldCBuPTE7ZnVuY3Rpb24gcmVhZEJpdHMoZSl7bGV0IHQ9MDtmb3IobGV0IGk9MDtpPGU7aSsrKXtjb25zdCBlPWEucmVhZEJpdChyLG4pO249bjwyNTY/bjw8MXxlOjUxMSYobjw8MXxlKXwyNTY7dD10PDwxfGV9cmV0dXJuIHQ+Pj4wfWNvbnN0IGk9cmVhZEJpdHMoMSkscz1yZWFkQml0cygxKT9yZWFkQml0cygxKT9yZWFkQml0cygxKT9yZWFkQml0cygxKT9yZWFkQml0cygxKT9yZWFkQml0cygzMikrNDQzNjpyZWFkQml0cygxMikrMzQwOnJlYWRCaXRzKDgpKzg0OnJlYWRCaXRzKDYpKzIwOnJlYWRCaXRzKDQpKzQ6cmVhZEJpdHMoMik7cmV0dXJuIDA9PT1pP3M6cz4wPy1zOm51bGx9ZnVuY3Rpb24gZGVjb2RlSUFJRChlLHQsYSl7Y29uc3Qgcj1lLmdldENvbnRleHRzKCJJQUlEIik7bGV0IG49MTtmb3IobGV0IGU9MDtlPGE7ZSsrKXtuPW48PDF8dC5yZWFkQml0KHIsbil9cmV0dXJuIGE8MzE/biYoMTw8YSktMToyMTQ3NDgzNjQ3Jm59Y29uc3Qgbz1bIlN5bWJvbERpY3Rpb25hcnkiLG51bGwsbnVsbCxudWxsLCJJbnRlcm1lZGlhdGVUZXh0UmVnaW9uIixudWxsLCJJbW1lZGlhdGVUZXh0UmVnaW9uIiwiSW1tZWRpYXRlTG9zc2xlc3NUZXh0UmVnaW9uIixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsIlBhdHRlcm5EaWN0aW9uYXJ5IixudWxsLG51bGwsbnVsbCwiSW50ZXJtZWRpYXRlSGFsZnRvbmVSZWdpb24iLG51bGwsIkltbWVkaWF0ZUhhbGZ0b25lUmVnaW9uIiwiSW1tZWRpYXRlTG9zc2xlc3NIYWxmdG9uZVJlZ2lvbiIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsIkludGVybWVkaWF0ZUdlbmVyaWNSZWdpb24iLG51bGwsIkltbWVkaWF0ZUdlbmVyaWNSZWdpb24iLCJJbW1lZGlhdGVMb3NzbGVzc0dlbmVyaWNSZWdpb24iLCJJbnRlcm1lZGlhdGVHZW5lcmljUmVmaW5lbWVudFJlZ2lvbiIsbnVsbCwiSW1tZWRpYXRlR2VuZXJpY1JlZmluZW1lbnRSZWdpb24iLCJJbW1lZGlhdGVMb3NzbGVzc0dlbmVyaWNSZWZpbmVtZW50UmVnaW9uIixudWxsLG51bGwsbnVsbCxudWxsLCJQYWdlSW5mb3JtYXRpb24iLCJFbmRPZlBhZ2UiLCJFbmRPZlN0cmlwZSIsIkVuZE9mRmlsZSIsIlByb2ZpbGVzIiwiVGFibGVzIixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsIkV4dGVuc2lvbiJdLGM9W1t7eDotMSx5Oi0yfSx7eDowLHk6LTJ9LHt4OjEseTotMn0se3g6LTIseTotMX0se3g6LTEseTotMX0se3g6MCx5Oi0xfSx7eDoxLHk6LTF9LHt4OjIseTotMX0se3g6LTQseTowfSx7eDotMyx5OjB9LHt4Oi0yLHk6MH0se3g6LTEseTowfV0sW3t4Oi0xLHk6LTJ9LHt4OjAseTotMn0se3g6MSx5Oi0yfSx7eDoyLHk6LTJ9LHt4Oi0yLHk6LTF9LHt4Oi0xLHk6LTF9LHt4OjAseTotMX0se3g6MSx5Oi0xfSx7eDoyLHk6LTF9LHt4Oi0zLHk6MH0se3g6LTIseTowfSx7eDotMSx5OjB9XSxbe3g6LTEseTotMn0se3g6MCx5Oi0yfSx7eDoxLHk6LTJ9LHt4Oi0yLHk6LTF9LHt4Oi0xLHk6LTF9LHt4OjAseTotMX0se3g6MSx5Oi0xfSx7eDotMix5OjB9LHt4Oi0xLHk6MH1dLFt7eDotMyx5Oi0xfSx7eDotMix5Oi0xfSx7eDotMSx5Oi0xfSx7eDowLHk6LTF9LHt4OjEseTotMX0se3g6LTQseTowfSx7eDotMyx5OjB9LHt4Oi0yLHk6MH0se3g6LTEseTowfV1dLGw9W3tjb2Rpbmc6W3t4OjAseTotMX0se3g6MSx5Oi0xfSx7eDotMSx5OjB9XSxyZWZlcmVuY2U6W3t4OjAseTotMX0se3g6MSx5Oi0xfSx7eDotMSx5OjB9LHt4OjAseTowfSx7eDoxLHk6MH0se3g6LTEseToxfSx7eDowLHk6MX0se3g6MSx5OjF9XX0se2NvZGluZzpbe3g6LTEseTotMX0se3g6MCx5Oi0xfSx7eDoxLHk6LTF9LHt4Oi0xLHk6MH1dLHJlZmVyZW5jZTpbe3g6MCx5Oi0xfSx7eDotMSx5OjB9LHt4OjAseTowfSx7eDoxLHk6MH0se3g6MCx5OjF9LHt4OjEseToxfV19XSxoPVszOTcxNywxOTQxLDIyOSw0MDVdLHU9WzMyLDhdO2Z1bmN0aW9uIGRlY29kZUJpdG1hcChlLHQsYSxyLG4saSxzLG8pe2lmKGUpe3JldHVybiBkZWNvZGVNTVJCaXRtYXAobmV3IFJlYWRlcihvLmRhdGEsby5zdGFydCxvLmVuZCksdCxhLCExKX1pZigwPT09ciYmIWkmJiFuJiY0PT09cy5sZW5ndGgmJjM9PT1zWzBdLngmJi0xPT09c1swXS55JiYtMz09PXNbMV0ueCYmLTE9PT1zWzFdLnkmJjI9PT1zWzJdLngmJi0yPT09c1syXS55JiYtMj09PXNbM10ueCYmLTI9PT1zWzNdLnkpcmV0dXJuIGZ1bmN0aW9uIGRlY29kZUJpdG1hcFRlbXBsYXRlMChlLHQsYSl7Y29uc3Qgcj1hLmRlY29kZXIsbj1hLmNvbnRleHRDYWNoZS5nZXRDb250ZXh0cygiR0IiKSxpPVtdO2xldCBzLG8sYyxsLGgsdSxkO2ZvcihvPTA7bzx0O28rKyl7aD1pW29dPW5ldyBVaW50OEFycmF5KGUpO3U9bzwxP2g6aVtvLTFdO2Q9bzwyP2g6aVtvLTJdO3M9ZFswXTw8MTN8ZFsxXTw8MTJ8ZFsyXTw8MTF8dVswXTw8N3x1WzFdPDw2fHVbMl08PDV8dVszXTw8NDtmb3IoYz0wO2M8ZTtjKyspe2hbY109bD1yLnJlYWRCaXQobixzKTtzPSgzMTczNSZzKTw8MXwoYyszPGU/ZFtjKzNdPDwxMTowKXwoYys0PGU/dVtjKzRdPDw0OjApfGx9fXJldHVybiBpfSh0LGEsbyk7Y29uc3QgbD0hIWksdT1jW3JdLmNvbmNhdChzKTt1LnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUueS10Lnl8fGUueC10Lnh9KSk7Y29uc3QgZD11Lmxlbmd0aCxmPW5ldyBJbnQ4QXJyYXkoZCksZz1uZXcgSW50OEFycmF5KGQpLHA9W107bGV0IG0sYix5PTAsdz0wLFM9MCx4PTA7Zm9yKGI9MDtiPGQ7YisrKXtmW2JdPXVbYl0ueDtnW2JdPXVbYl0ueTt3PU1hdGgubWluKHcsdVtiXS54KTtTPU1hdGgubWF4KFMsdVtiXS54KTt4PU1hdGgubWluKHgsdVtiXS55KTtiPGQtMSYmdVtiXS55PT09dVtiKzFdLnkmJnVbYl0ueD09PXVbYisxXS54LTE/eXw9MTw8ZC0xLWI6cC5wdXNoKGIpfWNvbnN0IGs9cC5sZW5ndGgsQz1uZXcgSW50OEFycmF5KGspLHY9bmV3IEludDhBcnJheShrKSxGPW5ldyBVaW50MTZBcnJheShrKTtmb3IobT0wO208azttKyspe2I9cFttXTtDW21dPXVbYl0ueDt2W21dPXVbYl0ueTtGW21dPTE8PGQtMS1ifWNvbnN0IE89LXcsVD0teCxNPXQtUyxFPWhbcl07bGV0IEQ9bmV3IFVpbnQ4QXJyYXkodCk7Y29uc3QgTj1bXSxSPW8uZGVjb2RlcixMPW8uY29udGV4dENhY2hlLmdldENvbnRleHRzKCJHQiIpO2xldCBqLCQsXyxVLFgsSD0wLHE9MDtmb3IobGV0IGU9MDtlPGE7ZSsrKXtpZihuKXtIXj1SLnJlYWRCaXQoTCxFKTtpZihIKXtOLnB1c2goRCk7Y29udGludWV9fUQ9bmV3IFVpbnQ4QXJyYXkoRCk7Ti5wdXNoKEQpO2ZvcihqPTA7ajx0O2orKyl7aWYobCYmaVtlXVtqXSl7RFtqXT0wO2NvbnRpbnVlfWlmKGo+PU8mJmo8TSYmZT49VCl7cT1xPDwxJnk7Zm9yKGI9MDtiPGs7YisrKXskPWUrdltiXTtfPWorQ1tiXTtVPU5bJF1bX107aWYoVSl7VT1GW2JdO3F8PVV9fX1lbHNle3E9MDtYPWQtMTtmb3IoYj0wO2I8ZDtiKyssWC0tKXtfPWorZltiXTtpZihfPj0wJiZfPHQpeyQ9ZStnW2JdO2lmKCQ+PTApe1U9TlskXVtfXTtVJiYocXw9VTw8WCl9fX19Y29uc3QgYT1SLnJlYWRCaXQoTCxxKTtEW2pdPWF9fXJldHVybiBOfWZ1bmN0aW9uIGRlY29kZVJlZmluZW1lbnQoZSx0LGEscixuLGkscyxvLGMpe2xldCBoPWxbYV0uY29kaW5nOzA9PT1hJiYoaD1oLmNvbmNhdChbb1swXV0pKTtjb25zdCBkPWgubGVuZ3RoLGY9bmV3IEludDMyQXJyYXkoZCksZz1uZXcgSW50MzJBcnJheShkKTtsZXQgcDtmb3IocD0wO3A8ZDtwKyspe2ZbcF09aFtwXS54O2dbcF09aFtwXS55fWxldCBtPWxbYV0ucmVmZXJlbmNlOzA9PT1hJiYobT1tLmNvbmNhdChbb1sxXV0pKTtjb25zdCBiPW0ubGVuZ3RoLHk9bmV3IEludDMyQXJyYXkoYiksdz1uZXcgSW50MzJBcnJheShiKTtmb3IocD0wO3A8YjtwKyspe3lbcF09bVtwXS54O3dbcF09bVtwXS55fWNvbnN0IFM9clswXS5sZW5ndGgseD1yLmxlbmd0aCxrPXVbYV0sQz1bXSx2PWMuZGVjb2RlcixGPWMuY29udGV4dENhY2hlLmdldENvbnRleHRzKCJHUiIpO2xldCBPPTA7Zm9yKGxldCBhPTA7YTx0O2ErKyl7aWYocyl7T149di5yZWFkQml0KEYsayk7aWYoTyl0aHJvdyBuZXcgSmJpZzJFcnJvcigicHJlZGljdGlvbiBpcyBub3Qgc3VwcG9ydGVkIil9Y29uc3QgdD1uZXcgVWludDhBcnJheShlKTtDLnB1c2godCk7Zm9yKGxldCBzPTA7czxlO3MrKyl7bGV0IG8sYyxsPTA7Zm9yKHA9MDtwPGQ7cCsrKXtvPWErZ1twXTtjPXMrZltwXTtvPDB8fGM8MHx8Yz49ZT9sPDw9MTpsPWw8PDF8Q1tvXVtjXX1mb3IocD0wO3A8YjtwKyspe289YSt3W3BdLWk7Yz1zK3lbcF0tbjtvPDB8fG8+PXh8fGM8MHx8Yz49Uz9sPDw9MTpsPWw8PDF8cltvXVtjXX1jb25zdCBoPXYucmVhZEJpdChGLGwpO3Rbc109aH19cmV0dXJuIEN9ZnVuY3Rpb24gZGVjb2RlVGV4dFJlZ2lvbihlLHQsYSxyLG4saSxzLG8sYyxsLGgsdSxkLGYsZyxwLG0sYix5KXtpZihlJiZ0KXRocm93IG5ldyBKYmlnMkVycm9yKCJyZWZpbmVtZW50IHdpdGggSHVmZm1hbiBpcyBub3Qgc3VwcG9ydGVkIik7Y29uc3Qgdz1bXTtsZXQgUyx4O2ZvcihTPTA7UzxyO1MrKyl7eD1uZXcgVWludDhBcnJheShhKTtpZihuKWZvcihsZXQgZT0wO2U8YTtlKyspeFtlXT1uO3cucHVzaCh4KX1jb25zdCBrPW0uZGVjb2RlcixDPW0uY29udGV4dENhY2hlO2xldCB2PWU/LWYudGFibGVEZWx0YVQuZGVjb2RlKHkpOi1kZWNvZGVJbnRlZ2VyKEMsIklBRFQiLGspLEY9MDtTPTA7Zm9yKDtTPGk7KXt2Kz1lP2YudGFibGVEZWx0YVQuZGVjb2RlKHkpOmRlY29kZUludGVnZXIoQywiSUFEVCIsayk7Ris9ZT9mLnRhYmxlRmlyc3RTLmRlY29kZSh5KTpkZWNvZGVJbnRlZ2VyKEMsIklBRlMiLGspO2xldCByPUY7Zm9yKDs7KXtsZXQgbj0wO3M+MSYmKG49ZT95LnJlYWRCaXRzKGIpOmRlY29kZUludGVnZXIoQywiSUFJVCIsaykpO2NvbnN0IGk9cyp2K24sRj1lP2Yuc3ltYm9sSURUYWJsZS5kZWNvZGUoeSk6ZGVjb2RlSUFJRChDLGssYyksTz10JiYoZT95LnJlYWRCaXQoKTpkZWNvZGVJbnRlZ2VyKEMsIklBUkkiLGspKTtsZXQgVD1vW0ZdLE09VFswXS5sZW5ndGgsRT1ULmxlbmd0aDtpZihPKXtjb25zdCBlPWRlY29kZUludGVnZXIoQywiSUFSRFciLGspLHQ9ZGVjb2RlSW50ZWdlcihDLCJJQVJESCIsayksYT1kZWNvZGVJbnRlZ2VyKEMsIklBUkRYIixrKSxyPWRlY29kZUludGVnZXIoQywiSUFSRFkiLGspO00rPWU7RSs9dDtUPWRlY29kZVJlZmluZW1lbnQoTSxFLGcsVCwoZT4+MSkrYSwodD4+MSkrciwhMSxwLG0pfWNvbnN0IEQ9aS0oMSZ1PzA6RS0xKSxOPXItKDImdT9NLTE6MCk7bGV0IFIsTCxqO2lmKGwpe2ZvcihSPTA7UjxFO1IrKyl7eD13W04rUl07aWYoIXgpY29udGludWU7aj1UW1JdO2NvbnN0IGU9TWF0aC5taW4oYS1ELE0pO3N3aXRjaChkKXtjYXNlIDA6Zm9yKEw9MDtMPGU7TCsrKXhbRCtMXXw9altMXTticmVhaztjYXNlIDI6Zm9yKEw9MDtMPGU7TCsrKXhbRCtMXV49altMXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBKYmlnMkVycm9yKGBvcGVyYXRvciAke2R9IGlzIG5vdCBzdXBwb3J0ZWRgKX19cis9RS0xfWVsc2V7Zm9yKEw9MDtMPEU7TCsrKXt4PXdbRCtMXTtpZih4KXtqPVRbTF07c3dpdGNoKGQpe2Nhc2UgMDpmb3IoUj0wO1I8TTtSKyspeFtOK1JdfD1qW1JdO2JyZWFrO2Nhc2UgMjpmb3IoUj0wO1I8TTtSKyspeFtOK1JdXj1qW1JdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoYG9wZXJhdG9yICR7ZH0gaXMgbm90IHN1cHBvcnRlZGApfX19cis9TS0xfVMrKztjb25zdCAkPWU/Zi50YWJsZURlbHRhUy5kZWNvZGUoeSk6ZGVjb2RlSW50ZWdlcihDLCJJQURTIixrKTtpZihudWxsPT09JClicmVhaztyKz0kK2h9fXJldHVybiB3fWZ1bmN0aW9uIHJlYWRTZWdtZW50SGVhZGVyKGUsdCl7Y29uc3QgYT17fTthLm51bWJlcj0oMCxuLnJlYWRVaW50MzIpKGUsdCk7Y29uc3Qgcj1lW3QrNF0saT02MyZyO2lmKCFvW2ldKXRocm93IG5ldyBKYmlnMkVycm9yKCJpbnZhbGlkIHNlZ21lbnQgdHlwZTogIitpKTthLnR5cGU9aTthLnR5cGVOYW1lPW9baV07YS5kZWZlcnJlZE5vblJldGFpbj0hISgxMjgmcik7Y29uc3Qgcz0hISg2NCZyKSxjPWVbdCs1XTtsZXQgbD1jPj41Jjc7Y29uc3QgaD1bMzEmY107bGV0IHU9dCs2O2lmKDc9PT1jKXtsPTUzNjg3MDkxMSYoMCxuLnJlYWRVaW50MzIpKGUsdS0xKTt1Kz0zO2xldCB0PWwrNz4+MztoWzBdPWVbdSsrXTtmb3IoOy0tdD4wOyloLnB1c2goZVt1KytdKX1lbHNlIGlmKDU9PT1jfHw2PT09Yyl0aHJvdyBuZXcgSmJpZzJFcnJvcigiaW52YWxpZCByZWZlcnJlZC10byBmbGFncyIpO2EucmV0YWluQml0cz1oO2xldCBmPTQ7YS5udW1iZXI8PTI1Nj9mPTE6YS5udW1iZXI8PTY1NTM2JiYoZj0yKTtjb25zdCBnPVtdO2xldCBwLG07Zm9yKHA9MDtwPGw7cCsrKXtsZXQgdDt0PTE9PT1mP2VbdV06Mj09PWY/KDAsbi5yZWFkVWludDE2KShlLHUpOigwLG4ucmVhZFVpbnQzMikoZSx1KTtnLnB1c2godCk7dSs9Zn1hLnJlZmVycmVkVG89ZztpZihzKXthLnBhZ2VBc3NvY2lhdGlvbj0oMCxuLnJlYWRVaW50MzIpKGUsdSk7dSs9NH1lbHNlIGEucGFnZUFzc29jaWF0aW9uPWVbdSsrXTthLmxlbmd0aD0oMCxuLnJlYWRVaW50MzIpKGUsdSk7dSs9NDtpZig0Mjk0OTY3Mjk1PT09YS5sZW5ndGgpe2lmKDM4IT09aSl0aHJvdyBuZXcgSmJpZzJFcnJvcigiaW52YWxpZCB1bmtub3duIHNlZ21lbnQgbGVuZ3RoIik7e2NvbnN0IHQ9cmVhZFJlZ2lvblNlZ21lbnRJbmZvcm1hdGlvbihlLHUpLHI9ISEoMSZlW3UrZF0pLG49NixpPW5ldyBVaW50OEFycmF5KG4pO2lmKCFyKXtpWzBdPTI1NTtpWzFdPTE3Mn1pWzJdPXQuaGVpZ2h0Pj4+MjQmMjU1O2lbM109dC5oZWlnaHQ+PjE2JjI1NTtpWzRdPXQuaGVpZ2h0Pj44JjI1NTtpWzVdPTI1NSZ0LmhlaWdodDtmb3IocD11LG09ZS5sZW5ndGg7cDxtO3ArKyl7bGV0IHQ9MDtmb3IoO3Q8biYmaVt0XT09PWVbcCt0XTspdCsrO2lmKHQ9PT1uKXthLmxlbmd0aD1wK247YnJlYWt9fWlmKDQyOTQ5NjcyOTU9PT1hLmxlbmd0aCl0aHJvdyBuZXcgSmJpZzJFcnJvcigic2VnbWVudCBlbmQgd2FzIG5vdCBmb3VuZCIpfX1hLmhlYWRlckVuZD11O3JldHVybiBhfWZ1bmN0aW9uIHJlYWRTZWdtZW50cyhlLHQsYSxyKXtjb25zdCBuPVtdO2xldCBpPWE7Zm9yKDtpPHI7KXtjb25zdCBhPXJlYWRTZWdtZW50SGVhZGVyKHQsaSk7aT1hLmhlYWRlckVuZDtjb25zdCByPXtoZWFkZXI6YSxkYXRhOnR9O2lmKCFlLnJhbmRvbUFjY2Vzcyl7ci5zdGFydD1pO2krPWEubGVuZ3RoO3IuZW5kPWl9bi5wdXNoKHIpO2lmKDUxPT09YS50eXBlKWJyZWFrfWlmKGUucmFuZG9tQWNjZXNzKWZvcihsZXQgZT0wLHQ9bi5sZW5ndGg7ZTx0O2UrKyl7bltlXS5zdGFydD1pO2krPW5bZV0uaGVhZGVyLmxlbmd0aDtuW2VdLmVuZD1pfXJldHVybiBufWZ1bmN0aW9uIHJlYWRSZWdpb25TZWdtZW50SW5mb3JtYXRpb24oZSx0KXtyZXR1cm57d2lkdGg6KDAsbi5yZWFkVWludDMyKShlLHQpLGhlaWdodDooMCxuLnJlYWRVaW50MzIpKGUsdCs0KSx4OigwLG4ucmVhZFVpbnQzMikoZSx0KzgpLHk6KDAsbi5yZWFkVWludDMyKShlLHQrMTIpLGNvbWJpbmF0aW9uT3BlcmF0b3I6NyZlW3QrMTZdfX1jb25zdCBkPTE3O2Z1bmN0aW9uIHByb2Nlc3NTZWdtZW50KGUsdCl7Y29uc3QgYT1lLmhlYWRlcixyPWUuZGF0YSxpPWUuZW5kO2xldCBzLG8sYyxsLGg9ZS5zdGFydDtzd2l0Y2goYS50eXBlKXtjYXNlIDA6Y29uc3QgZT17fSx0PSgwLG4ucmVhZFVpbnQxNikocixoKTtlLmh1ZmZtYW49ISEoMSZ0KTtlLnJlZmluZW1lbnQ9ISEoMiZ0KTtlLmh1ZmZtYW5ESFNlbGVjdG9yPXQ+PjImMztlLmh1ZmZtYW5EV1NlbGVjdG9yPXQ+PjQmMztlLmJpdG1hcFNpemVTZWxlY3Rvcj10Pj42JjE7ZS5hZ2dyZWdhdGlvbkluc3RhbmNlc1NlbGVjdG9yPXQ+PjcmMTtlLmJpdG1hcENvZGluZ0NvbnRleHRVc2VkPSEhKDI1NiZ0KTtlLmJpdG1hcENvZGluZ0NvbnRleHRSZXRhaW5lZD0hISg1MTImdCk7ZS50ZW1wbGF0ZT10Pj4xMCYzO2UucmVmaW5lbWVudFRlbXBsYXRlPXQ+PjEyJjE7aCs9MjtpZighZS5odWZmbWFuKXtsPTA9PT1lLnRlbXBsYXRlPzQ6MTtvPVtdO2ZvcihjPTA7YzxsO2MrKyl7by5wdXNoKHt4OigwLG4ucmVhZEludDgpKHIsaCkseTooMCxuLnJlYWRJbnQ4KShyLGgrMSl9KTtoKz0yfWUuYXQ9b31pZihlLnJlZmluZW1lbnQmJiFlLnJlZmluZW1lbnRUZW1wbGF0ZSl7bz1bXTtmb3IoYz0wO2M8MjtjKyspe28ucHVzaCh7eDooMCxuLnJlYWRJbnQ4KShyLGgpLHk6KDAsbi5yZWFkSW50OCkocixoKzEpfSk7aCs9Mn1lLnJlZmluZW1lbnRBdD1vfWUubnVtYmVyT2ZFeHBvcnRlZFN5bWJvbHM9KDAsbi5yZWFkVWludDMyKShyLGgpO2grPTQ7ZS5udW1iZXJPZk5ld1N5bWJvbHM9KDAsbi5yZWFkVWludDMyKShyLGgpO2grPTQ7cz1bZSxhLm51bWJlcixhLnJlZmVycmVkVG8scixoLGldO2JyZWFrO2Nhc2UgNjpjYXNlIDc6Y29uc3QgdT17fTt1LmluZm89cmVhZFJlZ2lvblNlZ21lbnRJbmZvcm1hdGlvbihyLGgpO2grPWQ7Y29uc3QgZj0oMCxuLnJlYWRVaW50MTYpKHIsaCk7aCs9Mjt1Lmh1ZmZtYW49ISEoMSZmKTt1LnJlZmluZW1lbnQ9ISEoMiZmKTt1LmxvZ1N0cmlwU2l6ZT1mPj4yJjM7dS5zdHJpcFNpemU9MTw8dS5sb2dTdHJpcFNpemU7dS5yZWZlcmVuY2VDb3JuZXI9Zj4+NCYzO3UudHJhbnNwb3NlZD0hISg2NCZmKTt1LmNvbWJpbmF0aW9uT3BlcmF0b3I9Zj4+NyYzO3UuZGVmYXVsdFBpeGVsVmFsdWU9Zj4+OSYxO3UuZHNPZmZzZXQ9Zjw8MTc+PjI3O3UucmVmaW5lbWVudFRlbXBsYXRlPWY+PjE1JjE7aWYodS5odWZmbWFuKXtjb25zdCBlPSgwLG4ucmVhZFVpbnQxNikocixoKTtoKz0yO3UuaHVmZm1hbkZTPTMmZTt1Lmh1ZmZtYW5EUz1lPj4yJjM7dS5odWZmbWFuRFQ9ZT4+NCYzO3UuaHVmZm1hblJlZmluZW1lbnREVz1lPj42JjM7dS5odWZmbWFuUmVmaW5lbWVudERIPWU+PjgmMzt1Lmh1ZmZtYW5SZWZpbmVtZW50RFg9ZT4+MTAmMzt1Lmh1ZmZtYW5SZWZpbmVtZW50RFk9ZT4+MTImMzt1Lmh1ZmZtYW5SZWZpbmVtZW50U2l6ZVNlbGVjdG9yPSEhKDE2Mzg0JmUpfWlmKHUucmVmaW5lbWVudCYmIXUucmVmaW5lbWVudFRlbXBsYXRlKXtvPVtdO2ZvcihjPTA7YzwyO2MrKyl7by5wdXNoKHt4OigwLG4ucmVhZEludDgpKHIsaCkseTooMCxuLnJlYWRJbnQ4KShyLGgrMSl9KTtoKz0yfXUucmVmaW5lbWVudEF0PW99dS5udW1iZXJPZlN5bWJvbEluc3RhbmNlcz0oMCxuLnJlYWRVaW50MzIpKHIsaCk7aCs9NDtzPVt1LGEucmVmZXJyZWRUbyxyLGgsaV07YnJlYWs7Y2FzZSAxNjpjb25zdCBnPXt9LHA9cltoKytdO2cubW1yPSEhKDEmcCk7Zy50ZW1wbGF0ZT1wPj4xJjM7Zy5wYXR0ZXJuV2lkdGg9cltoKytdO2cucGF0dGVybkhlaWdodD1yW2grK107Zy5tYXhQYXR0ZXJuSW5kZXg9KDAsbi5yZWFkVWludDMyKShyLGgpO2grPTQ7cz1bZyxhLm51bWJlcixyLGgsaV07YnJlYWs7Y2FzZSAyMjpjYXNlIDIzOmNvbnN0IG09e307bS5pbmZvPXJlYWRSZWdpb25TZWdtZW50SW5mb3JtYXRpb24ocixoKTtoKz1kO2NvbnN0IGI9cltoKytdO20ubW1yPSEhKDEmYik7bS50ZW1wbGF0ZT1iPj4xJjM7bS5lbmFibGVTa2lwPSEhKDgmYik7bS5jb21iaW5hdGlvbk9wZXJhdG9yPWI+PjQmNzttLmRlZmF1bHRQaXhlbFZhbHVlPWI+PjcmMTttLmdyaWRXaWR0aD0oMCxuLnJlYWRVaW50MzIpKHIsaCk7aCs9NDttLmdyaWRIZWlnaHQ9KDAsbi5yZWFkVWludDMyKShyLGgpO2grPTQ7bS5ncmlkT2Zmc2V0WD00Mjk0OTY3Mjk1JigwLG4ucmVhZFVpbnQzMikocixoKTtoKz00O20uZ3JpZE9mZnNldFk9NDI5NDk2NzI5NSYoMCxuLnJlYWRVaW50MzIpKHIsaCk7aCs9NDttLmdyaWRWZWN0b3JYPSgwLG4ucmVhZFVpbnQxNikocixoKTtoKz0yO20uZ3JpZFZlY3Rvclk9KDAsbi5yZWFkVWludDE2KShyLGgpO2grPTI7cz1bbSxhLnJlZmVycmVkVG8scixoLGldO2JyZWFrO2Nhc2UgMzg6Y2FzZSAzOTpjb25zdCB5PXt9O3kuaW5mbz1yZWFkUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uKHIsaCk7aCs9ZDtjb25zdCB3PXJbaCsrXTt5Lm1tcj0hISgxJncpO3kudGVtcGxhdGU9dz4+MSYzO3kucHJlZGljdGlvbj0hISg4JncpO2lmKCF5Lm1tcil7bD0wPT09eS50ZW1wbGF0ZT80OjE7bz1bXTtmb3IoYz0wO2M8bDtjKyspe28ucHVzaCh7eDooMCxuLnJlYWRJbnQ4KShyLGgpLHk6KDAsbi5yZWFkSW50OCkocixoKzEpfSk7aCs9Mn15LmF0PW99cz1beSxyLGgsaV07YnJlYWs7Y2FzZSA0ODpjb25zdCBTPXt3aWR0aDooMCxuLnJlYWRVaW50MzIpKHIsaCksaGVpZ2h0OigwLG4ucmVhZFVpbnQzMikocixoKzQpLHJlc29sdXRpb25YOigwLG4ucmVhZFVpbnQzMikocixoKzgpLHJlc29sdXRpb25ZOigwLG4ucmVhZFVpbnQzMikocixoKzEyKX07NDI5NDk2NzI5NT09PVMuaGVpZ2h0JiZkZWxldGUgUy5oZWlnaHQ7Y29uc3QgeD1yW2grMTZdOygwLG4ucmVhZFVpbnQxNikocixoKzE3KTtTLmxvc3NsZXNzPSEhKDEmeCk7Uy5yZWZpbmVtZW50PSEhKDImeCk7Uy5kZWZhdWx0UGl4ZWxWYWx1ZT14Pj4yJjE7Uy5jb21iaW5hdGlvbk9wZXJhdG9yPXg+PjMmMztTLnJlcXVpcmVzQnVmZmVyPSEhKDMyJngpO1MuY29tYmluYXRpb25PcGVyYXRvck92ZXJyaWRlPSEhKDY0JngpO3M9W1NdO2JyZWFrO2Nhc2UgNDk6Y2FzZSA1MDpjYXNlIDUxOmNhc2UgNjI6YnJlYWs7Y2FzZSA1MzpzPVthLm51bWJlcixyLGgsaV07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgSmJpZzJFcnJvcihgc2VnbWVudCB0eXBlICR7YS50eXBlTmFtZX0oJHthLnR5cGV9KSBpcyBub3QgaW1wbGVtZW50ZWRgKX1jb25zdCB1PSJvbiIrYS50eXBlTmFtZTt1IGluIHQmJnRbdV0uYXBwbHkodCxzKX1mdW5jdGlvbiBwcm9jZXNzU2VnbWVudHMoZSx0KXtmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjthKyspcHJvY2Vzc1NlZ21lbnQoZVthXSx0KX1jbGFzcyBTaW1wbGVTZWdtZW50VmlzaXRvcntvblBhZ2VJbmZvcm1hdGlvbihlKXt0aGlzLmN1cnJlbnRQYWdlSW5mbz1lO2NvbnN0IHQ9ZS53aWR0aCs3Pj4zLGE9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHQqZS5oZWlnaHQpO2UuZGVmYXVsdFBpeGVsVmFsdWUmJmEuZmlsbCgyNTUpO3RoaXMuYnVmZmVyPWF9ZHJhd0JpdG1hcChlLHQpe2NvbnN0IGE9dGhpcy5jdXJyZW50UGFnZUluZm8scj1lLndpZHRoLG49ZS5oZWlnaHQsaT1hLndpZHRoKzc+PjMscz1hLmNvbWJpbmF0aW9uT3BlcmF0b3JPdmVycmlkZT9lLmNvbWJpbmF0aW9uT3BlcmF0b3I6YS5jb21iaW5hdGlvbk9wZXJhdG9yLG89dGhpcy5idWZmZXIsYz0xMjg+Pig3JmUueCk7bGV0IGwsaCx1LGQsZj1lLnkqaSsoZS54Pj4zKTtzd2l0Y2gocyl7Y2FzZSAwOmZvcihsPTA7bDxuO2wrKyl7dT1jO2Q9Zjtmb3IoaD0wO2g8cjtoKyspe3RbbF1baF0mJihvW2RdfD11KTt1Pj49MTtpZighdSl7dT0xMjg7ZCsrfX1mKz1pfWJyZWFrO2Nhc2UgMjpmb3IobD0wO2w8bjtsKyspe3U9YztkPWY7Zm9yKGg9MDtoPHI7aCsrKXt0W2xdW2hdJiYob1tkXV49dSk7dT4+PTE7aWYoIXUpe3U9MTI4O2QrK319Zis9aX1icmVhaztkZWZhdWx0OnRocm93IG5ldyBKYmlnMkVycm9yKGBvcGVyYXRvciAke3N9IGlzIG5vdCBzdXBwb3J0ZWRgKX19b25JbW1lZGlhdGVHZW5lcmljUmVnaW9uKGUsdCxhLHIpe2NvbnN0IG49ZS5pbmZvLGk9bmV3IERlY29kaW5nQ29udGV4dCh0LGEscikscz1kZWNvZGVCaXRtYXAoZS5tbXIsbi53aWR0aCxuLmhlaWdodCxlLnRlbXBsYXRlLGUucHJlZGljdGlvbixudWxsLGUuYXQsaSk7dGhpcy5kcmF3Qml0bWFwKG4scyl9b25JbW1lZGlhdGVMb3NzbGVzc0dlbmVyaWNSZWdpb24oKXt0aGlzLm9uSW1tZWRpYXRlR2VuZXJpY1JlZ2lvbiguLi5hcmd1bWVudHMpfW9uU3ltYm9sRGljdGlvbmFyeShlLHQsYSxyLGkscyl7bGV0IG8sYztpZihlLmh1ZmZtYW4pe289ZnVuY3Rpb24gZ2V0U3ltYm9sRGljdGlvbmFyeUh1ZmZtYW5UYWJsZXMoZSx0LGEpe2xldCByLG4saSxzLG89MDtzd2l0Y2goZS5odWZmbWFuREhTZWxlY3Rvcil7Y2FzZSAwOmNhc2UgMTpyPWdldFN0YW5kYXJkVGFibGUoZS5odWZmbWFuREhTZWxlY3Rvcis0KTticmVhaztjYXNlIDM6cj1nZXRDdXN0b21IdWZmbWFuVGFibGUobyx0LGEpO28rKzticmVhaztkZWZhdWx0OnRocm93IG5ldyBKYmlnMkVycm9yKCJpbnZhbGlkIEh1ZmZtYW4gREggc2VsZWN0b3IiKX1zd2l0Y2goZS5odWZmbWFuRFdTZWxlY3Rvcil7Y2FzZSAwOmNhc2UgMTpuPWdldFN0YW5kYXJkVGFibGUoZS5odWZmbWFuRFdTZWxlY3RvcisyKTticmVhaztjYXNlIDM6bj1nZXRDdXN0b21IdWZmbWFuVGFibGUobyx0LGEpO28rKzticmVhaztkZWZhdWx0OnRocm93IG5ldyBKYmlnMkVycm9yKCJpbnZhbGlkIEh1ZmZtYW4gRFcgc2VsZWN0b3IiKX1pZihlLmJpdG1hcFNpemVTZWxlY3Rvcil7aT1nZXRDdXN0b21IdWZmbWFuVGFibGUobyx0LGEpO28rK31lbHNlIGk9Z2V0U3RhbmRhcmRUYWJsZSgxKTtzPWUuYWdncmVnYXRpb25JbnN0YW5jZXNTZWxlY3Rvcj9nZXRDdXN0b21IdWZmbWFuVGFibGUobyx0LGEpOmdldFN0YW5kYXJkVGFibGUoMSk7cmV0dXJue3RhYmxlRGVsdGFIZWlnaHQ6cix0YWJsZURlbHRhV2lkdGg6bix0YWJsZUJpdG1hcFNpemU6aSx0YWJsZUFnZ3JlZ2F0ZUluc3RhbmNlczpzfX0oZSxhLHRoaXMuY3VzdG9tVGFibGVzKTtjPW5ldyBSZWFkZXIocixpLHMpfWxldCBsPXRoaXMuc3ltYm9scztsfHwodGhpcy5zeW1ib2xzPWw9e30pO2NvbnN0IGg9W107Zm9yKGNvbnN0IGUgb2YgYSl7Y29uc3QgdD1sW2VdO3QmJmgucHVzaCguLi50KX1jb25zdCB1PW5ldyBEZWNvZGluZ0NvbnRleHQocixpLHMpO2xbdF09ZnVuY3Rpb24gZGVjb2RlU3ltYm9sRGljdGlvbmFyeShlLHQsYSxyLGkscyxvLGMsbCxoLHUsZCl7aWYoZSYmdCl0aHJvdyBuZXcgSmJpZzJFcnJvcigic3ltYm9sIHJlZmluZW1lbnQgd2l0aCBIdWZmbWFuIGlzIG5vdCBzdXBwb3J0ZWQiKTtjb25zdCBmPVtdO2xldCBnPTAscD0oMCxuLmxvZzIpKGEubGVuZ3RoK3IpO2NvbnN0IG09dS5kZWNvZGVyLGI9dS5jb250ZXh0Q2FjaGU7bGV0IHksdztpZihlKXt5PWdldFN0YW5kYXJkVGFibGUoMSk7dz1bXTtwPU1hdGgubWF4KHAsMSl9Zm9yKDtmLmxlbmd0aDxyOyl7Zys9ZT9zLnRhYmxlRGVsdGFIZWlnaHQuZGVjb2RlKGQpOmRlY29kZUludGVnZXIoYiwiSUFESCIsbSk7bGV0IHI9MCxuPTA7Y29uc3QgaT1lP3cubGVuZ3RoOjA7Zm9yKDs7KXtjb25zdCBpPWU/cy50YWJsZURlbHRhV2lkdGguZGVjb2RlKGQpOmRlY29kZUludGVnZXIoYiwiSUFEVyIsbSk7aWYobnVsbD09PWkpYnJlYWs7cis9aTtuKz1yO2xldCB5O2lmKHQpe2NvbnN0IG49ZGVjb2RlSW50ZWdlcihiLCJJQUFJIixtKTtpZihuPjEpeT1kZWNvZGVUZXh0UmVnaW9uKGUsdCxyLGcsMCxuLDEsYS5jb25jYXQoZikscCwwLDAsMSwwLHMsbCxoLHUsMCxkKTtlbHNle2NvbnN0IGU9ZGVjb2RlSUFJRChiLG0scCksdD1kZWNvZGVJbnRlZ2VyKGIsIklBUkRYIixtKSxuPWRlY29kZUludGVnZXIoYiwiSUFSRFkiLG0pO3k9ZGVjb2RlUmVmaW5lbWVudChyLGcsbCxlPGEubGVuZ3RoP2FbZV06ZltlLWEubGVuZ3RoXSx0LG4sITEsaCx1KX1mLnB1c2goeSl9ZWxzZSBpZihlKXcucHVzaChyKTtlbHNle3k9ZGVjb2RlQml0bWFwKCExLHIsZyxvLCExLG51bGwsYyx1KTtmLnB1c2goeSl9fWlmKGUmJiF0KXtjb25zdCBlPXMudGFibGVCaXRtYXBTaXplLmRlY29kZShkKTtkLmJ5dGVBbGlnbigpO2xldCB0O2lmKDA9PT1lKXQ9cmVhZFVuY29tcHJlc3NlZEJpdG1hcChkLG4sZyk7ZWxzZXtjb25zdCBhPWQuZW5kLHI9ZC5wb3NpdGlvbitlO2QuZW5kPXI7dD1kZWNvZGVNTVJCaXRtYXAoZCxuLGcsITEpO2QuZW5kPWE7ZC5wb3NpdGlvbj1yfWNvbnN0IGE9dy5sZW5ndGg7aWYoaT09PWEtMSlmLnB1c2godCk7ZWxzZXtsZXQgZSxyLG4scyxvLGM9MDtmb3IoZT1pO2U8YTtlKyspe3M9d1tlXTtuPWMrcztvPVtdO2ZvcihyPTA7cjxnO3IrKylvLnB1c2godFtyXS5zdWJhcnJheShjLG4pKTtmLnB1c2gobyk7Yz1ufX19fWNvbnN0IFM9W10seD1bXTtsZXQgayxDLHY9ITE7Y29uc3QgRj1hLmxlbmd0aCtyO2Zvcig7eC5sZW5ndGg8Rjspe2xldCB0PWU/eS5kZWNvZGUoZCk6ZGVjb2RlSW50ZWdlcihiLCJJQUVYIixtKTtmb3IoO3QtLTspeC5wdXNoKHYpO3Y9IXZ9Zm9yKGs9MCxDPWEubGVuZ3RoO2s8QztrKyspeFtrXSYmUy5wdXNoKGFba10pO2ZvcihsZXQgZT0wO2U8cjtrKyssZSsrKXhba10mJlMucHVzaChmW2VdKTtyZXR1cm4gU30oZS5odWZmbWFuLGUucmVmaW5lbWVudCxoLGUubnVtYmVyT2ZOZXdTeW1ib2xzLGUubnVtYmVyT2ZFeHBvcnRlZFN5bWJvbHMsbyxlLnRlbXBsYXRlLGUuYXQsZS5yZWZpbmVtZW50VGVtcGxhdGUsZS5yZWZpbmVtZW50QXQsdSxjKX1vbkltbWVkaWF0ZVRleHRSZWdpb24oZSx0LGEscixpKXtjb25zdCBzPWUuaW5mbztsZXQgbyxjO2NvbnN0IGw9dGhpcy5zeW1ib2xzLGg9W107Zm9yKGNvbnN0IGUgb2YgdCl7Y29uc3QgdD1sW2VdO3QmJmgucHVzaCguLi50KX1jb25zdCB1PSgwLG4ubG9nMikoaC5sZW5ndGgpO2lmKGUuaHVmZm1hbil7Yz1uZXcgUmVhZGVyKGEscixpKTtvPWZ1bmN0aW9uIGdldFRleHRSZWdpb25IdWZmbWFuVGFibGVzKGUsdCxhLHIsbil7Y29uc3QgaT1bXTtmb3IobGV0IGU9MDtlPD0zNDtlKyspe2NvbnN0IHQ9bi5yZWFkQml0cyg0KTtpLnB1c2gobmV3IEh1ZmZtYW5MaW5lKFtlLHQsMCwwXSkpfWNvbnN0IHM9bmV3IEh1ZmZtYW5UYWJsZShpLCExKTtpLmxlbmd0aD0wO2ZvcihsZXQgZT0wO2U8cjspe2NvbnN0IHQ9cy5kZWNvZGUobik7aWYodD49MzIpe2xldCBhLHIscztzd2l0Y2godCl7Y2FzZSAzMjppZigwPT09ZSl0aHJvdyBuZXcgSmJpZzJFcnJvcigibm8gcHJldmlvdXMgdmFsdWUgaW4gc3ltYm9sIElEIHRhYmxlIik7cj1uLnJlYWRCaXRzKDIpKzM7YT1pW2UtMV0ucHJlZml4TGVuZ3RoO2JyZWFrO2Nhc2UgMzM6cj1uLnJlYWRCaXRzKDMpKzM7YT0wO2JyZWFrO2Nhc2UgMzQ6cj1uLnJlYWRCaXRzKDcpKzExO2E9MDticmVhaztkZWZhdWx0OnRocm93IG5ldyBKYmlnMkVycm9yKCJpbnZhbGlkIGNvZGUgbGVuZ3RoIGluIHN5bWJvbCBJRCB0YWJsZSIpfWZvcihzPTA7czxyO3MrKyl7aS5wdXNoKG5ldyBIdWZmbWFuTGluZShbZSxhLDAsMF0pKTtlKyt9fWVsc2V7aS5wdXNoKG5ldyBIdWZmbWFuTGluZShbZSx0LDAsMF0pKTtlKyt9fW4uYnl0ZUFsaWduKCk7Y29uc3Qgbz1uZXcgSHVmZm1hblRhYmxlKGksITEpO2xldCBjLGwsaCx1PTA7c3dpdGNoKGUuaHVmZm1hbkZTKXtjYXNlIDA6Y2FzZSAxOmM9Z2V0U3RhbmRhcmRUYWJsZShlLmh1ZmZtYW5GUys2KTticmVhaztjYXNlIDM6Yz1nZXRDdXN0b21IdWZmbWFuVGFibGUodSx0LGEpO3UrKzticmVhaztkZWZhdWx0OnRocm93IG5ldyBKYmlnMkVycm9yKCJpbnZhbGlkIEh1ZmZtYW4gRlMgc2VsZWN0b3IiKX1zd2l0Y2goZS5odWZmbWFuRFMpe2Nhc2UgMDpjYXNlIDE6Y2FzZSAyOmw9Z2V0U3RhbmRhcmRUYWJsZShlLmh1ZmZtYW5EUys4KTticmVhaztjYXNlIDM6bD1nZXRDdXN0b21IdWZmbWFuVGFibGUodSx0LGEpO3UrKzticmVhaztkZWZhdWx0OnRocm93IG5ldyBKYmlnMkVycm9yKCJpbnZhbGlkIEh1ZmZtYW4gRFMgc2VsZWN0b3IiKX1zd2l0Y2goZS5odWZmbWFuRFQpe2Nhc2UgMDpjYXNlIDE6Y2FzZSAyOmg9Z2V0U3RhbmRhcmRUYWJsZShlLmh1ZmZtYW5EVCsxMSk7YnJlYWs7Y2FzZSAzOmg9Z2V0Q3VzdG9tSHVmZm1hblRhYmxlKHUsdCxhKTt1Kys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgSmJpZzJFcnJvcigiaW52YWxpZCBIdWZmbWFuIERUIHNlbGVjdG9yIil9aWYoZS5yZWZpbmVtZW50KXRocm93IG5ldyBKYmlnMkVycm9yKCJyZWZpbmVtZW50IHdpdGggSHVmZm1hbiBpcyBub3Qgc3VwcG9ydGVkIik7cmV0dXJue3N5bWJvbElEVGFibGU6byx0YWJsZUZpcnN0UzpjLHRhYmxlRGVsdGFTOmwsdGFibGVEZWx0YVQ6aH19KGUsdCx0aGlzLmN1c3RvbVRhYmxlcyxoLmxlbmd0aCxjKX1jb25zdCBkPW5ldyBEZWNvZGluZ0NvbnRleHQoYSxyLGkpLGY9ZGVjb2RlVGV4dFJlZ2lvbihlLmh1ZmZtYW4sZS5yZWZpbmVtZW50LHMud2lkdGgscy5oZWlnaHQsZS5kZWZhdWx0UGl4ZWxWYWx1ZSxlLm51bWJlck9mU3ltYm9sSW5zdGFuY2VzLGUuc3RyaXBTaXplLGgsdSxlLnRyYW5zcG9zZWQsZS5kc09mZnNldCxlLnJlZmVyZW5jZUNvcm5lcixlLmNvbWJpbmF0aW9uT3BlcmF0b3IsbyxlLnJlZmluZW1lbnRUZW1wbGF0ZSxlLnJlZmluZW1lbnRBdCxkLGUubG9nU3RyaXBTaXplLGMpO3RoaXMuZHJhd0JpdG1hcChzLGYpfW9uSW1tZWRpYXRlTG9zc2xlc3NUZXh0UmVnaW9uKCl7dGhpcy5vbkltbWVkaWF0ZVRleHRSZWdpb24oLi4uYXJndW1lbnRzKX1vblBhdHRlcm5EaWN0aW9uYXJ5KGUsdCxhLHIsbil7bGV0IGk9dGhpcy5wYXR0ZXJucztpfHwodGhpcy5wYXR0ZXJucz1pPXt9KTtjb25zdCBzPW5ldyBEZWNvZGluZ0NvbnRleHQoYSxyLG4pO2lbdF09ZnVuY3Rpb24gZGVjb2RlUGF0dGVybkRpY3Rpb25hcnkoZSx0LGEscixuLGkpe2NvbnN0IHM9W107aWYoIWUpe3MucHVzaCh7eDotdCx5OjB9KTswPT09biYmcy5wdXNoKHt4Oi0zLHk6LTF9LHt4OjIseTotMn0se3g6LTIseTotMn0pfWNvbnN0IG89ZGVjb2RlQml0bWFwKGUsKHIrMSkqdCxhLG4sITEsbnVsbCxzLGkpLGM9W107Zm9yKGxldCBlPTA7ZTw9cjtlKyspe2NvbnN0IHI9W10sbj10KmUsaT1uK3Q7Zm9yKGxldCBlPTA7ZTxhO2UrKylyLnB1c2gob1tlXS5zdWJhcnJheShuLGkpKTtjLnB1c2gocil9cmV0dXJuIGN9KGUubW1yLGUucGF0dGVybldpZHRoLGUucGF0dGVybkhlaWdodCxlLm1heFBhdHRlcm5JbmRleCxlLnRlbXBsYXRlLHMpfW9uSW1tZWRpYXRlSGFsZnRvbmVSZWdpb24oZSx0LGEscixpKXtjb25zdCBzPXRoaXMucGF0dGVybnNbdFswXV0sbz1lLmluZm8sYz1uZXcgRGVjb2RpbmdDb250ZXh0KGEscixpKSxsPWZ1bmN0aW9uIGRlY29kZUhhbGZ0b25lUmVnaW9uKGUsdCxhLHIsaSxzLG8sYyxsLGgsdSxkLGYsZyxwKXtpZihvKXRocm93IG5ldyBKYmlnMkVycm9yKCJza2lwIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZigwIT09Yyl0aHJvdyBuZXcgSmJpZzJFcnJvcihgb3BlcmF0b3IgIiR7Y30iIGlzIG5vdCBzdXBwb3J0ZWQgaW4gaGFsZnRvbmUgcmVnaW9uYCk7Y29uc3QgbT1bXTtsZXQgYix5LHc7Zm9yKGI9MDtiPGk7YisrKXt3PW5ldyBVaW50OEFycmF5KHIpO2lmKHMpZm9yKHk9MDt5PHI7eSsrKXdbeV09czttLnB1c2godyl9Y29uc3QgUz10Lmxlbmd0aCx4PXRbMF0saz14WzBdLmxlbmd0aCxDPXgubGVuZ3RoLHY9KDAsbi5sb2cyKShTKSxGPVtdO2lmKCFlKXtGLnB1c2goe3g6YTw9MT8zOjIseTotMX0pOzA9PT1hJiZGLnB1c2goe3g6LTMseTotMX0se3g6Mix5Oi0yfSx7eDotMix5Oi0yfSl9Y29uc3QgTz1bXTtsZXQgVCxNLEUsRCxOLFIsTCxqLCQsXyxVO2UmJihUPW5ldyBSZWFkZXIocC5kYXRhLHAuc3RhcnQscC5lbmQpKTtmb3IoYj12LTE7Yj49MDtiLS0pe009ZT9kZWNvZGVNTVJCaXRtYXAoVCxsLGgsITApOmRlY29kZUJpdG1hcCghMSxsLGgsYSwhMSxudWxsLEYscCk7T1tiXT1NfWZvcihFPTA7RTxoO0UrKylmb3IoRD0wO0Q8bDtEKyspe049MDtSPTA7Zm9yKHk9di0xO3k+PTA7eS0tKXtOXj1PW3ldW0VdW0RdO1J8PU48PHl9TD10W1JdO2o9dStFKmcrRCpmPj44OyQ9ZCtFKmYtRCpnPj44O2lmKGo+PTAmJmorazw9ciYmJD49MCYmJCtDPD1pKWZvcihiPTA7YjxDO2IrKyl7VT1tWyQrYl07Xz1MW2JdO2Zvcih5PTA7eTxrO3krKylVW2oreV18PV9beV19ZWxzZXtsZXQgZSx0O2ZvcihiPTA7YjxDO2IrKyl7dD0kK2I7aWYoISh0PDB8fHQ+PWkpKXtVPW1bdF07Xz1MW2JdO2Zvcih5PTA7eTxrO3krKyl7ZT1qK3k7ZT49MCYmZTxyJiYoVVtlXXw9X1t5XSl9fX19fXJldHVybiBtfShlLm1tcixzLGUudGVtcGxhdGUsby53aWR0aCxvLmhlaWdodCxlLmRlZmF1bHRQaXhlbFZhbHVlLGUuZW5hYmxlU2tpcCxlLmNvbWJpbmF0aW9uT3BlcmF0b3IsZS5ncmlkV2lkdGgsZS5ncmlkSGVpZ2h0LGUuZ3JpZE9mZnNldFgsZS5ncmlkT2Zmc2V0WSxlLmdyaWRWZWN0b3JYLGUuZ3JpZFZlY3RvclksYyk7dGhpcy5kcmF3Qml0bWFwKG8sbCl9b25JbW1lZGlhdGVMb3NzbGVzc0hhbGZ0b25lUmVnaW9uKCl7dGhpcy5vbkltbWVkaWF0ZUhhbGZ0b25lUmVnaW9uKC4uLmFyZ3VtZW50cyl9b25UYWJsZXMoZSx0LGEscil7bGV0IGk9dGhpcy5jdXN0b21UYWJsZXM7aXx8KHRoaXMuY3VzdG9tVGFibGVzPWk9e30pO2lbZV09ZnVuY3Rpb24gZGVjb2RlVGFibGVzU2VnbWVudChlLHQsYSl7Y29uc3Qgcj1lW3RdLGk9NDI5NDk2NzI5NSYoMCxuLnJlYWRVaW50MzIpKGUsdCsxKSxzPTQyOTQ5NjcyOTUmKDAsbi5yZWFkVWludDMyKShlLHQrNSksbz1uZXcgUmVhZGVyKGUsdCs5LGEpLGM9MSsocj4+MSY3KSxsPTErKHI+PjQmNyksaD1bXTtsZXQgdSxkLGY9aTtkb3t1PW8ucmVhZEJpdHMoYyk7ZD1vLnJlYWRCaXRzKGwpO2gucHVzaChuZXcgSHVmZm1hbkxpbmUoW2YsdSxkLDBdKSk7Zis9MTw8ZH13aGlsZShmPHMpO3U9by5yZWFkQml0cyhjKTtoLnB1c2gobmV3IEh1ZmZtYW5MaW5lKFtpLTEsdSwzMiwwLCJsb3dlciJdKSk7dT1vLnJlYWRCaXRzKGMpO2gucHVzaChuZXcgSHVmZm1hbkxpbmUoW3MsdSwzMiwwXSkpO2lmKDEmcil7dT1vLnJlYWRCaXRzKGMpO2gucHVzaChuZXcgSHVmZm1hbkxpbmUoW3UsMF0pKX1yZXR1cm4gbmV3IEh1ZmZtYW5UYWJsZShoLCExKX0odCxhLHIpfX1jbGFzcyBIdWZmbWFuTGluZXtjb25zdHJ1Y3RvcihlKXtpZigyPT09ZS5sZW5ndGgpe3RoaXMuaXNPT0I9ITA7dGhpcy5yYW5nZUxvdz0wO3RoaXMucHJlZml4TGVuZ3RoPWVbMF07dGhpcy5yYW5nZUxlbmd0aD0wO3RoaXMucHJlZml4Q29kZT1lWzFdO3RoaXMuaXNMb3dlclJhbmdlPSExfWVsc2V7dGhpcy5pc09PQj0hMTt0aGlzLnJhbmdlTG93PWVbMF07dGhpcy5wcmVmaXhMZW5ndGg9ZVsxXTt0aGlzLnJhbmdlTGVuZ3RoPWVbMl07dGhpcy5wcmVmaXhDb2RlPWVbM107dGhpcy5pc0xvd2VyUmFuZ2U9Imxvd2VyIj09PWVbNF19fX1jbGFzcyBIdWZmbWFuVHJlZU5vZGV7Y29uc3RydWN0b3IoZSl7dGhpcy5jaGlsZHJlbj1bXTtpZihlKXt0aGlzLmlzTGVhZj0hMDt0aGlzLnJhbmdlTGVuZ3RoPWUucmFuZ2VMZW5ndGg7dGhpcy5yYW5nZUxvdz1lLnJhbmdlTG93O3RoaXMuaXNMb3dlclJhbmdlPWUuaXNMb3dlclJhbmdlO3RoaXMuaXNPT0I9ZS5pc09PQn1lbHNlIHRoaXMuaXNMZWFmPSExfWJ1aWxkVHJlZShlLHQpe2NvbnN0IGE9ZS5wcmVmaXhDb2RlPj50JjE7aWYodDw9MCl0aGlzLmNoaWxkcmVuW2FdPW5ldyBIdWZmbWFuVHJlZU5vZGUoZSk7ZWxzZXtsZXQgcj10aGlzLmNoaWxkcmVuW2FdO3J8fCh0aGlzLmNoaWxkcmVuW2FdPXI9bmV3IEh1ZmZtYW5UcmVlTm9kZShudWxsKSk7ci5idWlsZFRyZWUoZSx0LTEpfX1kZWNvZGVOb2RlKGUpe2lmKHRoaXMuaXNMZWFmKXtpZih0aGlzLmlzT09CKXJldHVybiBudWxsO2NvbnN0IHQ9ZS5yZWFkQml0cyh0aGlzLnJhbmdlTGVuZ3RoKTtyZXR1cm4gdGhpcy5yYW5nZUxvdysodGhpcy5pc0xvd2VyUmFuZ2U/LXQ6dCl9Y29uc3QgdD10aGlzLmNoaWxkcmVuW2UucmVhZEJpdCgpXTtpZighdCl0aHJvdyBuZXcgSmJpZzJFcnJvcigiaW52YWxpZCBIdWZmbWFuIGRhdGEiKTtyZXR1cm4gdC5kZWNvZGVOb2RlKGUpfX1jbGFzcyBIdWZmbWFuVGFibGV7Y29uc3RydWN0b3IoZSx0KXt0fHx0aGlzLmFzc2lnblByZWZpeENvZGVzKGUpO3RoaXMucm9vdE5vZGU9bmV3IEh1ZmZtYW5UcmVlTm9kZShudWxsKTtmb3IobGV0IHQ9MCxhPWUubGVuZ3RoO3Q8YTt0Kyspe2NvbnN0IGE9ZVt0XTthLnByZWZpeExlbmd0aD4wJiZ0aGlzLnJvb3ROb2RlLmJ1aWxkVHJlZShhLGEucHJlZml4TGVuZ3RoLTEpfX1kZWNvZGUoZSl7cmV0dXJuIHRoaXMucm9vdE5vZGUuZGVjb2RlTm9kZShlKX1hc3NpZ25QcmVmaXhDb2RlcyhlKXtjb25zdCB0PWUubGVuZ3RoO2xldCBhPTA7Zm9yKGxldCByPTA7cjx0O3IrKylhPU1hdGgubWF4KGEsZVtyXS5wcmVmaXhMZW5ndGgpO2NvbnN0IHI9bmV3IFVpbnQzMkFycmF5KGErMSk7Zm9yKGxldCBhPTA7YTx0O2ErKylyW2VbYV0ucHJlZml4TGVuZ3RoXSsrO2xldCBuLGkscyxvPTEsYz0wO3JbMF09MDtmb3IoO288PWE7KXtjPWMrcltvLTFdPDwxO249YztpPTA7Zm9yKDtpPHQ7KXtzPWVbaV07aWYocy5wcmVmaXhMZW5ndGg9PT1vKXtzLnByZWZpeENvZGU9bjtuKyt9aSsrfW8rK319fWNvbnN0IGY9e307ZnVuY3Rpb24gZ2V0U3RhbmRhcmRUYWJsZShlKXtsZXQgdCxhPWZbZV07aWYoYSlyZXR1cm4gYTtzd2l0Y2goZSl7Y2FzZSAxOnQ9W1swLDEsNCwwXSxbMTYsMiw4LDJdLFsyNzIsMywxNiw2XSxbNjU4MDgsMywzMiw3XV07YnJlYWs7Y2FzZSAyOnQ9W1swLDEsMCwwXSxbMSwyLDAsMl0sWzIsMywwLDZdLFszLDQsMywxNF0sWzExLDUsNiwzMF0sWzc1LDYsMzIsNjJdLFs2LDYzXV07YnJlYWs7Y2FzZSAzOnQ9W1stMjU2LDgsOCwyNTRdLFswLDEsMCwwXSxbMSwyLDAsMl0sWzIsMywwLDZdLFszLDQsMywxNF0sWzExLDUsNiwzMF0sWy0yNTcsOCwzMiwyNTUsImxvd2VyIl0sWzc1LDcsMzIsMTI2XSxbNiw2Ml1dO2JyZWFrO2Nhc2UgNDp0PVtbMSwxLDAsMF0sWzIsMiwwLDJdLFszLDMsMCw2XSxbNCw0LDMsMTRdLFsxMiw1LDYsMzBdLFs3Niw1LDMyLDMxXV07YnJlYWs7Y2FzZSA1OnQ9W1stMjU1LDcsOCwxMjZdLFsxLDEsMCwwXSxbMiwyLDAsMl0sWzMsMywwLDZdLFs0LDQsMywxNF0sWzEyLDUsNiwzMF0sWy0yNTYsNywzMiwxMjcsImxvd2VyIl0sWzc2LDYsMzIsNjJdXTticmVhaztjYXNlIDY6dD1bWy0yMDQ4LDUsMTAsMjhdLFstMTAyNCw0LDksOF0sWy01MTIsNCw4LDldLFstMjU2LDQsNywxMF0sWy0xMjgsNSw2LDI5XSxbLTY0LDUsNSwzMF0sWy0zMiw0LDUsMTFdLFswLDIsNywwXSxbMTI4LDMsNywyXSxbMjU2LDMsOCwzXSxbNTEyLDQsOSwxMl0sWzEwMjQsNCwxMCwxM10sWy0yMDQ5LDYsMzIsNjIsImxvd2VyIl0sWzIwNDgsNiwzMiw2M11dO2JyZWFrO2Nhc2UgNzp0PVtbLTEwMjQsNCw5LDhdLFstNTEyLDMsOCwwXSxbLTI1Niw0LDcsOV0sWy0xMjgsNSw2LDI2XSxbLTY0LDUsNSwyN10sWy0zMiw0LDUsMTBdLFswLDQsNSwxMV0sWzMyLDUsNSwyOF0sWzY0LDUsNiwyOV0sWzEyOCw0LDcsMTJdLFsyNTYsMyw4LDFdLFs1MTIsMyw5LDJdLFsxMDI0LDMsMTAsM10sWy0xMDI1LDUsMzIsMzAsImxvd2VyIl0sWzIwNDgsNSwzMiwzMV1dO2JyZWFrO2Nhc2UgODp0PVtbLTE1LDgsMywyNTJdLFstNyw5LDEsNTA4XSxbLTUsOCwxLDI1M10sWy0zLDksMCw1MDldLFstMiw3LDAsMTI0XSxbLTEsNCwwLDEwXSxbMCwyLDEsMF0sWzIsNSwwLDI2XSxbMyw2LDAsNThdLFs0LDMsNCw0XSxbMjAsNiwxLDU5XSxbMjIsNCw0LDExXSxbMzgsNCw1LDEyXSxbNzAsNSw2LDI3XSxbMTM0LDUsNywyOF0sWzI2Miw2LDcsNjBdLFszOTAsNyw4LDEyNV0sWzY0Niw2LDEwLDYxXSxbLTE2LDksMzIsNTEwLCJsb3dlciJdLFsxNjcwLDksMzIsNTExXSxbMiwxXV07YnJlYWs7Y2FzZSA5OnQ9W1stMzEsOCw0LDI1Ml0sWy0xNSw5LDIsNTA4XSxbLTExLDgsMiwyNTNdLFstNyw5LDEsNTA5XSxbLTUsNywxLDEyNF0sWy0zLDQsMSwxMF0sWy0xLDMsMSwyXSxbMSwzLDEsM10sWzMsNSwxLDI2XSxbNSw2LDEsNThdLFs3LDMsNSw0XSxbMzksNiwyLDU5XSxbNDMsNCw1LDExXSxbNzUsNCw2LDEyXSxbMTM5LDUsNywyN10sWzI2Nyw1LDgsMjhdLFs1MjMsNiw4LDYwXSxbNzc5LDcsOSwxMjVdLFsxMjkxLDYsMTEsNjFdLFstMzIsOSwzMiw1MTAsImxvd2VyIl0sWzMzMzksOSwzMiw1MTFdLFsyLDBdXTticmVhaztjYXNlIDEwOnQ9W1stMjEsNyw0LDEyMl0sWy01LDgsMCwyNTJdLFstNCw3LDAsMTIzXSxbLTMsNSwwLDI0XSxbLTIsMiwyLDBdLFsyLDUsMCwyNV0sWzMsNiwwLDU0XSxbNCw3LDAsMTI0XSxbNSw4LDAsMjUzXSxbNiwyLDYsMV0sWzcwLDUsNSwyNl0sWzEwMiw2LDUsNTVdLFsxMzQsNiw2LDU2XSxbMTk4LDYsNyw1N10sWzMyNiw2LDgsNThdLFs1ODIsNiw5LDU5XSxbMTA5NCw2LDEwLDYwXSxbMjExOCw3LDExLDEyNV0sWy0yMiw4LDMyLDI1NCwibG93ZXIiXSxbNDE2Niw4LDMyLDI1NV0sWzIsMl1dO2JyZWFrO2Nhc2UgMTE6dD1bWzEsMSwwLDBdLFsyLDIsMSwyXSxbNCw0LDAsMTJdLFs1LDQsMSwxM10sWzcsNSwxLDI4XSxbOSw1LDIsMjldLFsxMyw2LDIsNjBdLFsxNyw3LDIsMTIyXSxbMjEsNywzLDEyM10sWzI5LDcsNCwxMjRdLFs0NSw3LDUsMTI1XSxbNzcsNyw2LDEyNl0sWzE0MSw3LDMyLDEyN11dO2JyZWFrO2Nhc2UgMTI6dD1bWzEsMSwwLDBdLFsyLDIsMCwyXSxbMywzLDEsNl0sWzUsNSwwLDI4XSxbNiw1LDEsMjldLFs4LDYsMSw2MF0sWzEwLDcsMCwxMjJdLFsxMSw3LDEsMTIzXSxbMTMsNywyLDEyNF0sWzE3LDcsMywxMjVdLFsyNSw3LDQsMTI2XSxbNDEsOCw1LDI1NF0sWzczLDgsMzIsMjU1XV07YnJlYWs7Y2FzZSAxMzp0PVtbMSwxLDAsMF0sWzIsMywwLDRdLFszLDQsMCwxMl0sWzQsNSwwLDI4XSxbNSw0LDEsMTNdLFs3LDMsMyw1XSxbMTUsNiwxLDU4XSxbMTcsNiwyLDU5XSxbMjEsNiwzLDYwXSxbMjksNiw0LDYxXSxbNDUsNiw1LDYyXSxbNzcsNyw2LDEyNl0sWzE0MSw3LDMyLDEyN11dO2JyZWFrO2Nhc2UgMTQ6dD1bWy0yLDMsMCw0XSxbLTEsMywwLDVdLFswLDEsMCwwXSxbMSwzLDAsNl0sWzIsMywwLDddXTticmVhaztjYXNlIDE1OnQ9W1stMjQsNyw0LDEyNF0sWy04LDYsMiw2MF0sWy00LDUsMSwyOF0sWy0yLDQsMCwxMl0sWy0xLDMsMCw0XSxbMCwxLDAsMF0sWzEsMywwLDVdLFsyLDQsMCwxM10sWzMsNSwxLDI5XSxbNSw2LDIsNjFdLFs5LDcsNCwxMjVdLFstMjUsNywzMiwxMjYsImxvd2VyIl0sWzI1LDcsMzIsMTI3XV07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgSmJpZzJFcnJvcihgc3RhbmRhcmQgdGFibGUgQi4ke2V9IGRvZXMgbm90IGV4aXN0YCl9Zm9yKGxldCBlPTAsYT10Lmxlbmd0aDtlPGE7ZSsrKXRbZV09bmV3IEh1ZmZtYW5MaW5lKHRbZV0pO2E9bmV3IEh1ZmZtYW5UYWJsZSh0LCEwKTtmW2VdPWE7cmV0dXJuIGF9Y2xhc3MgUmVhZGVye2NvbnN0cnVjdG9yKGUsdCxhKXt0aGlzLmRhdGE9ZTt0aGlzLnN0YXJ0PXQ7dGhpcy5lbmQ9YTt0aGlzLnBvc2l0aW9uPXQ7dGhpcy5zaGlmdD0tMTt0aGlzLmN1cnJlbnRCeXRlPTB9cmVhZEJpdCgpe2lmKHRoaXMuc2hpZnQ8MCl7aWYodGhpcy5wb3NpdGlvbj49dGhpcy5lbmQpdGhyb3cgbmV3IEpiaWcyRXJyb3IoImVuZCBvZiBkYXRhIHdoaWxlIHJlYWRpbmcgYml0Iik7dGhpcy5jdXJyZW50Qnl0ZT10aGlzLmRhdGFbdGhpcy5wb3NpdGlvbisrXTt0aGlzLnNoaWZ0PTd9Y29uc3QgZT10aGlzLmN1cnJlbnRCeXRlPj50aGlzLnNoaWZ0JjE7dGhpcy5zaGlmdC0tO3JldHVybiBlfXJlYWRCaXRzKGUpe2xldCB0LGE9MDtmb3IodD1lLTE7dD49MDt0LS0pYXw9dGhpcy5yZWFkQml0KCk8PHQ7cmV0dXJuIGF9Ynl0ZUFsaWduKCl7dGhpcy5zaGlmdD0tMX1uZXh0KCl7cmV0dXJuIHRoaXMucG9zaXRpb24+PXRoaXMuZW5kPy0xOnRoaXMuZGF0YVt0aGlzLnBvc2l0aW9uKytdfX1mdW5jdGlvbiBnZXRDdXN0b21IdWZmbWFuVGFibGUoZSx0LGEpe2xldCByPTA7Zm9yKGxldCBuPTAsaT10Lmxlbmd0aDtuPGk7bisrKXtjb25zdCBpPWFbdFtuXV07aWYoaSl7aWYoZT09PXIpcmV0dXJuIGk7cisrfX10aHJvdyBuZXcgSmJpZzJFcnJvcigiY2FuJ3QgZmluZCBjdXN0b20gSHVmZm1hbiB0YWJsZSIpfWZ1bmN0aW9uIHJlYWRVbmNvbXByZXNzZWRCaXRtYXAoZSx0LGEpe2NvbnN0IHI9W107Zm9yKGxldCBuPTA7bjxhO24rKyl7Y29uc3QgYT1uZXcgVWludDhBcnJheSh0KTtyLnB1c2goYSk7Zm9yKGxldCByPTA7cjx0O3IrKylhW3JdPWUucmVhZEJpdCgpO2UuYnl0ZUFsaWduKCl9cmV0dXJuIHJ9ZnVuY3Rpb24gZGVjb2RlTU1SQml0bWFwKGUsdCxhLHIpe2NvbnN0IG49e0s6LTEsQ29sdW1uczp0LFJvd3M6YSxCbGFja0lzMTohMCxFbmRPZkJsb2NrOnJ9LGk9bmV3IHMuQ0NJVFRGYXhEZWNvZGVyKGUsbiksbz1bXTtsZXQgYyxsPSExO2ZvcihsZXQgZT0wO2U8YTtlKyspe2NvbnN0IGU9bmV3IFVpbnQ4QXJyYXkodCk7by5wdXNoKGUpO2xldCBhPS0xO2ZvcihsZXQgcj0wO3I8dDtyKyspe2lmKGE8MCl7Yz1pLnJlYWROZXh0Q2hhcigpO2lmKC0xPT09Yyl7Yz0wO2w9ITB9YT03fWVbcl09Yz4+YSYxO2EtLX19aWYociYmIWwpe2NvbnN0IGU9NTtmb3IobGV0IHQ9MDt0PGUmJi0xIT09aS5yZWFkTmV4dENoYXIoKTt0KyspO31yZXR1cm4gb310LkpiaWcySW1hZ2U9Y2xhc3MgSmJpZzJJbWFnZXtwYXJzZUNodW5rcyhlKXtyZXR1cm4gZnVuY3Rpb24gcGFyc2VKYmlnMkNodW5rcyhlKXtjb25zdCB0PW5ldyBTaW1wbGVTZWdtZW50VmlzaXRvcjtmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjthKyspe2NvbnN0IHI9ZVthXTtwcm9jZXNzU2VnbWVudHMocmVhZFNlZ21lbnRzKHt9LHIuZGF0YSxyLnN0YXJ0LHIuZW5kKSx0KX1yZXR1cm4gdC5idWZmZXJ9KGUpfXBhcnNlKGUpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkOiBKYmlnMkltYWdlLnBhcnNlIil9fX0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Bcml0aG1ldGljRGVjb2Rlcj12b2lkIDA7Y29uc3QgYT1be3FlOjIyMDE3LG5tcHM6MSxubHBzOjEsc3dpdGNoRmxhZzoxfSx7cWU6MTMzMTMsbm1wczoyLG5scHM6Nixzd2l0Y2hGbGFnOjB9LHtxZTo2MTQ1LG5tcHM6MyxubHBzOjksc3dpdGNoRmxhZzowfSx7cWU6Mjc1MyxubXBzOjQsbmxwczoxMixzd2l0Y2hGbGFnOjB9LHtxZToxMzEzLG5tcHM6NSxubHBzOjI5LHN3aXRjaEZsYWc6MH0se3FlOjU0NSxubXBzOjM4LG5scHM6MzMsc3dpdGNoRmxhZzowfSx7cWU6MjIwMTcsbm1wczo3LG5scHM6Nixzd2l0Y2hGbGFnOjF9LHtxZToyMTUwNSxubXBzOjgsbmxwczoxNCxzd2l0Y2hGbGFnOjB9LHtxZToxODQzMyxubXBzOjksbmxwczoxNCxzd2l0Y2hGbGFnOjB9LHtxZToxNDMzNyxubXBzOjEwLG5scHM6MTQsc3dpdGNoRmxhZzowfSx7cWU6MTIyODksbm1wczoxMSxubHBzOjE3LHN3aXRjaEZsYWc6MH0se3FlOjkyMTcsbm1wczoxMixubHBzOjE4LHN3aXRjaEZsYWc6MH0se3FlOjcxNjksbm1wczoxMyxubHBzOjIwLHN3aXRjaEZsYWc6MH0se3FlOjU2MzMsbm1wczoyOSxubHBzOjIxLHN3aXRjaEZsYWc6MH0se3FlOjIyMDE3LG5tcHM6MTUsbmxwczoxNCxzd2l0Y2hGbGFnOjF9LHtxZToyMTUwNSxubXBzOjE2LG5scHM6MTQsc3dpdGNoRmxhZzowfSx7cWU6MjA3Mzcsbm1wczoxNyxubHBzOjE1LHN3aXRjaEZsYWc6MH0se3FlOjE4NDMzLG5tcHM6MTgsbmxwczoxNixzd2l0Y2hGbGFnOjB9LHtxZToxNDMzNyxubXBzOjE5LG5scHM6MTcsc3dpdGNoRmxhZzowfSx7cWU6MTMzMTMsbm1wczoyMCxubHBzOjE4LHN3aXRjaEZsYWc6MH0se3FlOjEyMjg5LG5tcHM6MjEsbmxwczoxOSxzd2l0Y2hGbGFnOjB9LHtxZToxMDI0MSxubXBzOjIyLG5scHM6MTksc3dpdGNoRmxhZzowfSx7cWU6OTIxNyxubXBzOjIzLG5scHM6MjAsc3dpdGNoRmxhZzowfSx7cWU6ODcwNSxubXBzOjI0LG5scHM6MjEsc3dpdGNoRmxhZzowfSx7cWU6NzE2OSxubXBzOjI1LG5scHM6MjIsc3dpdGNoRmxhZzowfSx7cWU6NjE0NSxubXBzOjI2LG5scHM6MjMsc3dpdGNoRmxhZzowfSx7cWU6NTYzMyxubXBzOjI3LG5scHM6MjQsc3dpdGNoRmxhZzowfSx7cWU6NTEyMSxubXBzOjI4LG5scHM6MjUsc3dpdGNoRmxhZzowfSx7cWU6NDYwOSxubXBzOjI5LG5scHM6MjYsc3dpdGNoRmxhZzowfSx7cWU6NDM1MyxubXBzOjMwLG5scHM6Mjcsc3dpdGNoRmxhZzowfSx7cWU6Mjc1MyxubXBzOjMxLG5scHM6Mjgsc3dpdGNoRmxhZzowfSx7cWU6MjQ5NyxubXBzOjMyLG5scHM6Mjksc3dpdGNoRmxhZzowfSx7cWU6MjIwOSxubXBzOjMzLG5scHM6MzAsc3dpdGNoRmxhZzowfSx7cWU6MTMxMyxubXBzOjM0LG5scHM6MzEsc3dpdGNoRmxhZzowfSx7cWU6MTA4OSxubXBzOjM1LG5scHM6MzIsc3dpdGNoRmxhZzowfSx7cWU6NjczLG5tcHM6MzYsbmxwczozMyxzd2l0Y2hGbGFnOjB9LHtxZTo1NDUsbm1wczozNyxubHBzOjM0LHN3aXRjaEZsYWc6MH0se3FlOjMyMSxubXBzOjM4LG5scHM6MzUsc3dpdGNoRmxhZzowfSx7cWU6MjczLG5tcHM6MzksbmxwczozNixzd2l0Y2hGbGFnOjB9LHtxZToxMzMsbm1wczo0MCxubHBzOjM3LHN3aXRjaEZsYWc6MH0se3FlOjczLG5tcHM6NDEsbmxwczozOCxzd2l0Y2hGbGFnOjB9LHtxZTozNyxubXBzOjQyLG5scHM6Mzksc3dpdGNoRmxhZzowfSx7cWU6MjEsbm1wczo0MyxubHBzOjQwLHN3aXRjaEZsYWc6MH0se3FlOjksbm1wczo0NCxubHBzOjQxLHN3aXRjaEZsYWc6MH0se3FlOjUsbm1wczo0NSxubHBzOjQyLHN3aXRjaEZsYWc6MH0se3FlOjEsbm1wczo0NSxubHBzOjQzLHN3aXRjaEZsYWc6MH0se3FlOjIyMDE3LG5tcHM6NDYsbmxwczo0Nixzd2l0Y2hGbGFnOjB9XTt0LkFyaXRobWV0aWNEZWNvZGVyPWNsYXNzIEFyaXRobWV0aWNEZWNvZGVye2NvbnN0cnVjdG9yKGUsdCxhKXt0aGlzLmRhdGE9ZTt0aGlzLmJwPXQ7dGhpcy5kYXRhRW5kPWE7dGhpcy5jaGlnaD1lW3RdO3RoaXMuY2xvdz0wO3RoaXMuYnl0ZUluKCk7dGhpcy5jaGlnaD10aGlzLmNoaWdoPDw3JjY1NTM1fHRoaXMuY2xvdz4+OSYxMjc7dGhpcy5jbG93PXRoaXMuY2xvdzw8NyY2NTUzNTt0aGlzLmN0LT03O3RoaXMuYT0zMjc2OH1ieXRlSW4oKXtjb25zdCBlPXRoaXMuZGF0YTtsZXQgdD10aGlzLmJwO2lmKDI1NT09PWVbdF0paWYoZVt0KzFdPjE0Myl7dGhpcy5jbG93Kz02NTI4MDt0aGlzLmN0PTh9ZWxzZXt0Kys7dGhpcy5jbG93Kz1lW3RdPDw5O3RoaXMuY3Q9Nzt0aGlzLmJwPXR9ZWxzZXt0Kys7dGhpcy5jbG93Kz10PHRoaXMuZGF0YUVuZD9lW3RdPDw4OjY1MjgwO3RoaXMuY3Q9ODt0aGlzLmJwPXR9aWYodGhpcy5jbG93PjY1NTM1KXt0aGlzLmNoaWdoKz10aGlzLmNsb3c+PjE2O3RoaXMuY2xvdyY9NjU1MzV9fXJlYWRCaXQoZSx0KXtsZXQgcj1lW3RdPj4xLG49MSZlW3RdO2NvbnN0IGk9YVtyXSxzPWkucWU7bGV0IG8sYz10aGlzLmEtcztpZih0aGlzLmNoaWdoPHMpaWYoYzxzKXtjPXM7bz1uO3I9aS5ubXBzfWVsc2V7Yz1zO289MV5uOzE9PT1pLnN3aXRjaEZsYWcmJihuPW8pO3I9aS5ubHBzfWVsc2V7dGhpcy5jaGlnaC09cztpZigwIT0oMzI3NjgmYykpe3RoaXMuYT1jO3JldHVybiBufWlmKGM8cyl7bz0xXm47MT09PWkuc3dpdGNoRmxhZyYmKG49byk7cj1pLm5scHN9ZWxzZXtvPW47cj1pLm5tcHN9fWRvezA9PT10aGlzLmN0JiZ0aGlzLmJ5dGVJbigpO2M8PD0xO3RoaXMuY2hpZ2g9dGhpcy5jaGlnaDw8MSY2NTUzNXx0aGlzLmNsb3c+PjE1JjE7dGhpcy5jbG93PXRoaXMuY2xvdzw8MSY2NTUzNTt0aGlzLmN0LS19d2hpbGUoMD09KDMyNzY4JmMpKTt0aGlzLmE9YztlW3RdPXI8PDF8bjtyZXR1cm4gb319fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuSnBlZ1N0cmVhbT12b2lkIDA7dmFyIHI9YSgxNyksbj1hKDMpLGk9YSgyNikscz1hKDIpO2NsYXNzIEpwZWdTdHJlYW0gZXh0ZW5kcyByLkRlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQsYSl7bGV0IHI7Zm9yKDstMSE9PShyPWUuZ2V0Qnl0ZSgpKTspaWYoMjU1PT09cil7ZS5za2lwKC0xKTticmVha31zdXBlcih0KTt0aGlzLnN0cmVhbT1lO3RoaXMuZGljdD1lLmRpY3Q7dGhpcy5tYXliZUxlbmd0aD10O3RoaXMucGFyYW1zPWF9Z2V0IGJ5dGVzKCl7cmV0dXJuKDAscy5zaGFkb3cpKHRoaXMsImJ5dGVzIix0aGlzLnN0cmVhbS5nZXRCeXRlcyh0aGlzLm1heWJlTGVuZ3RoKSl9ZW5zdXJlQnVmZmVyKGUpe31yZWFkQmxvY2soKXtpZih0aGlzLmVvZilyZXR1cm47Y29uc3QgZT17ZGVjb2RlVHJhbnNmb3JtOnZvaWQgMCxjb2xvclRyYW5zZm9ybTp2b2lkIDB9LHQ9dGhpcy5kaWN0LmdldEFycmF5KCJEIiwiRGVjb2RlIik7aWYodGhpcy5mb3JjZVJHQiYmQXJyYXkuaXNBcnJheSh0KSl7Y29uc3QgYT10aGlzLmRpY3QuZ2V0KCJCUEMiLCJCaXRzUGVyQ29tcG9uZW50Iil8fDgscj10Lmxlbmd0aCxuPW5ldyBJbnQzMkFycmF5KHIpO2xldCBpPSExO2NvbnN0IHM9KDE8PGEpLTE7Zm9yKGxldCBlPTA7ZTxyO2UrPTIpe25bZV09MjU2Kih0W2UrMV0tdFtlXSl8MDtuW2UrMV09dFtlXSpzfDA7MjU2PT09bltlXSYmMD09PW5bZSsxXXx8KGk9ITApfWkmJihlLmRlY29kZVRyYW5zZm9ybT1uKX1pZih0aGlzLnBhcmFtcyBpbnN0YW5jZW9mIG4uRGljdCl7Y29uc3QgdD10aGlzLnBhcmFtcy5nZXQoIkNvbG9yVHJhbnNmb3JtIik7TnVtYmVyLmlzSW50ZWdlcih0KSYmKGUuY29sb3JUcmFuc2Zvcm09dCl9Y29uc3QgYT1uZXcgaS5KcGVnSW1hZ2UoZSk7YS5wYXJzZSh0aGlzLmJ5dGVzKTtjb25zdCByPWEuZ2V0RGF0YSh7d2lkdGg6dGhpcy5kcmF3V2lkdGgsaGVpZ2h0OnRoaXMuZHJhd0hlaWdodCxmb3JjZVJHQjp0aGlzLmZvcmNlUkdCLGlzU291cmNlUERGOiEwfSk7dGhpcy5idWZmZXI9cjt0aGlzLmJ1ZmZlckxlbmd0aD1yLmxlbmd0aDt0aGlzLmVvZj0hMH19dC5KcGVnU3RyZWFtPUpwZWdTdHJlYW19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5KcGVnSW1hZ2U9dm9pZCAwO3ZhciByPWEoMiksbj1hKDQpO2NsYXNzIEpwZWdFcnJvciBleHRlbmRzIHIuQmFzZUV4Y2VwdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihgSlBFRyBlcnJvcjogJHtlfWAsIkpwZWdFcnJvciIpfX1jbGFzcyBETkxNYXJrZXJFcnJvciBleHRlbmRzIHIuQmFzZUV4Y2VwdGlvbntjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsIkROTE1hcmtlckVycm9yIik7dGhpcy5zY2FuTGluZXM9dH19Y2xhc3MgRU9JTWFya2VyRXJyb3IgZXh0ZW5kcyByLkJhc2VFeGNlcHRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiRU9JTWFya2VyRXJyb3IiKX19Y29uc3QgaT1uZXcgVWludDhBcnJheShbMCwxLDgsMTYsOSwyLDMsMTAsMTcsMjQsMzIsMjUsMTgsMTEsNCw1LDEyLDE5LDI2LDMzLDQwLDQ4LDQxLDM0LDI3LDIwLDEzLDYsNywxNCwyMSwyOCwzNSw0Miw0OSw1Niw1Nyw1MCw0MywzNiwyOSwyMiwxNSwyMywzMCwzNyw0NCw1MSw1OCw1OSw1Miw0NSwzOCwzMSwzOSw0Niw1Myw2MCw2MSw1NCw0Nyw1NSw2Miw2M10pLHM9NDAxNyxvPTc5OSxjPTM0MDYsbD0yMjc2LGg9MTU2Nyx1PTM3ODQsZD01NzkzLGY9Mjg5NjtmdW5jdGlvbiBidWlsZEh1ZmZtYW5UYWJsZShlLHQpe2xldCBhLHIsbj0wLGk9MTY7Zm9yKDtpPjAmJiFlW2ktMV07KWktLTtjb25zdCBzPVt7Y2hpbGRyZW46W10saW5kZXg6MH1dO2xldCBvLGM9c1swXTtmb3IoYT0wO2E8aTthKyspe2ZvcihyPTA7cjxlW2FdO3IrKyl7Yz1zLnBvcCgpO2MuY2hpbGRyZW5bYy5pbmRleF09dFtuXTtmb3IoO2MuaW5kZXg+MDspYz1zLnBvcCgpO2MuaW5kZXgrKztzLnB1c2goYyk7Zm9yKDtzLmxlbmd0aDw9YTspe3MucHVzaChvPXtjaGlsZHJlbjpbXSxpbmRleDowfSk7Yy5jaGlsZHJlbltjLmluZGV4XT1vLmNoaWxkcmVuO2M9b31uKyt9aWYoYSsxPGkpe3MucHVzaChvPXtjaGlsZHJlbjpbXSxpbmRleDowfSk7Yy5jaGlsZHJlbltjLmluZGV4XT1vLmNoaWxkcmVuO2M9b319cmV0dXJuIHNbMF0uY2hpbGRyZW59ZnVuY3Rpb24gZ2V0QmxvY2tCdWZmZXJPZmZzZXQoZSx0LGEpe3JldHVybiA2NCooKGUuYmxvY2tzUGVyTGluZSsxKSp0K2EpfWZ1bmN0aW9uIGRlY29kZVNjYW4oZSx0LGEscyxvLGMsbCxoLHUsZD0hMSl7Y29uc3QgZj1hLm1jdXNQZXJMaW5lLGc9YS5wcm9ncmVzc2l2ZSxwPXQ7bGV0IG09MCxiPTA7ZnVuY3Rpb24gcmVhZEJpdCgpe2lmKGI+MCl7Yi0tO3JldHVybiBtPj5iJjF9bT1lW3QrK107aWYoMjU1PT09bSl7Y29uc3Qgcj1lW3QrK107aWYocil7aWYoMjIwPT09ciYmZCl7dCs9Mjtjb25zdCByPSgwLG4ucmVhZFVpbnQxNikoZSx0KTt0Kz0yO2lmKHI+MCYmciE9PWEuc2NhbkxpbmVzKXRocm93IG5ldyBETkxNYXJrZXJFcnJvcigiRm91bmQgRE5MIG1hcmtlciAoMHhGRkRDKSB3aGlsZSBwYXJzaW5nIHNjYW4gZGF0YSIscil9ZWxzZSBpZigyMTc9PT1yKXtpZihkKXtjb25zdCBlPXgqKDg9PT1hLnByZWNpc2lvbj84OjApO2lmKGU+MCYmTWF0aC5yb3VuZChhLnNjYW5MaW5lcy9lKT49NSl0aHJvdyBuZXcgRE5MTWFya2VyRXJyb3IoIkZvdW5kIEVPSSBtYXJrZXIgKDB4RkZEOSkgd2hpbGUgcGFyc2luZyBzY2FuIGRhdGEsIHBvc3NpYmx5IGNhdXNlZCBieSBpbmNvcnJlY3QgYHNjYW5MaW5lc2AgcGFyYW1ldGVyIixlKX10aHJvdyBuZXcgRU9JTWFya2VyRXJyb3IoIkZvdW5kIEVPSSBtYXJrZXIgKDB4RkZEOSkgd2hpbGUgcGFyc2luZyBzY2FuIGRhdGEiKX10aHJvdyBuZXcgSnBlZ0Vycm9yKGB1bmV4cGVjdGVkIG1hcmtlciAkeyhtPDw4fHIpLnRvU3RyaW5nKDE2KX1gKX19Yj03O3JldHVybiBtPj4+N31mdW5jdGlvbiBkZWNvZGVIdWZmbWFuKGUpe2xldCB0PWU7Zm9yKDs7KXt0PXRbcmVhZEJpdCgpXTtzd2l0Y2godHlwZW9mIHQpe2Nhc2UibnVtYmVyIjpyZXR1cm4gdDtjYXNlIm9iamVjdCI6Y29udGludWV9dGhyb3cgbmV3IEpwZWdFcnJvcigiaW52YWxpZCBodWZmbWFuIHNlcXVlbmNlIil9fWZ1bmN0aW9uIHJlY2VpdmUoZSl7bGV0IHQ9MDtmb3IoO2U+MDspe3Q9dDw8MXxyZWFkQml0KCk7ZS0tfXJldHVybiB0fWZ1bmN0aW9uIHJlY2VpdmVBbmRFeHRlbmQoZSl7aWYoMT09PWUpcmV0dXJuIDE9PT1yZWFkQml0KCk/MTotMTtjb25zdCB0PXJlY2VpdmUoZSk7cmV0dXJuIHQ+PTE8PGUtMT90OnQrKC0xPDxlKSsxfWxldCB5PTA7bGV0IHcsUz0wO2xldCB4PTA7ZnVuY3Rpb24gZGVjb2RlTWN1KGUsdCxhLHIsbil7Y29uc3QgaT1hJWY7eD0oYS9mfDApKmUudityO2NvbnN0IHM9aSplLmgrbjt0KGUsZ2V0QmxvY2tCdWZmZXJPZmZzZXQoZSx4LHMpKX1mdW5jdGlvbiBkZWNvZGVCbG9jayhlLHQsYSl7eD1hL2UuYmxvY2tzUGVyTGluZXwwO2NvbnN0IHI9YSVlLmJsb2Nrc1BlckxpbmU7dChlLGdldEJsb2NrQnVmZmVyT2Zmc2V0KGUseCxyKSl9Y29uc3Qgaz1zLmxlbmd0aDtsZXQgQyx2LEYsTyxULE07TT1nPzA9PT1jPzA9PT1oP2Z1bmN0aW9uIGRlY29kZURDRmlyc3QoZSx0KXtjb25zdCBhPWRlY29kZUh1ZmZtYW4oZS5odWZmbWFuVGFibGVEQykscj0wPT09YT8wOnJlY2VpdmVBbmRFeHRlbmQoYSk8PHU7ZS5ibG9ja0RhdGFbdF09ZS5wcmVkKz1yfTpmdW5jdGlvbiBkZWNvZGVEQ1N1Y2Nlc3NpdmUoZSx0KXtlLmJsb2NrRGF0YVt0XXw9cmVhZEJpdCgpPDx1fTowPT09aD9mdW5jdGlvbiBkZWNvZGVBQ0ZpcnN0KGUsdCl7aWYoeT4wKXt5LS07cmV0dXJufWxldCBhPWM7Y29uc3Qgcj1sO2Zvcig7YTw9cjspe2NvbnN0IHI9ZGVjb2RlSHVmZm1hbihlLmh1ZmZtYW5UYWJsZUFDKSxuPTE1JnIscz1yPj40O2lmKDA9PT1uKXtpZihzPDE1KXt5PXJlY2VpdmUocykrKDE8PHMpLTE7YnJlYWt9YSs9MTY7Y29udGludWV9YSs9cztjb25zdCBvPWlbYV07ZS5ibG9ja0RhdGFbdCtvXT1yZWNlaXZlQW5kRXh0ZW5kKG4pKigxPDx1KTthKyt9fTpmdW5jdGlvbiBkZWNvZGVBQ1N1Y2Nlc3NpdmUoZSx0KXtsZXQgYT1jO2NvbnN0IHI9bDtsZXQgbixzLG89MDtmb3IoO2E8PXI7KXtjb25zdCByPXQraVthXSxjPWUuYmxvY2tEYXRhW3JdPDA/LTE6MTtzd2l0Y2goUyl7Y2FzZSAwOnM9ZGVjb2RlSHVmZm1hbihlLmh1ZmZtYW5UYWJsZUFDKTtuPTE1JnM7bz1zPj40O2lmKDA9PT1uKWlmKG88MTUpe3k9cmVjZWl2ZShvKSsoMTw8byk7Uz00fWVsc2V7bz0xNjtTPTF9ZWxzZXtpZigxIT09bil0aHJvdyBuZXcgSnBlZ0Vycm9yKCJpbnZhbGlkIEFDbiBlbmNvZGluZyIpO3c9cmVjZWl2ZUFuZEV4dGVuZChuKTtTPW8/MjozfWNvbnRpbnVlO2Nhc2UgMTpjYXNlIDI6aWYoZS5ibG9ja0RhdGFbcl0pZS5ibG9ja0RhdGFbcl0rPWMqKHJlYWRCaXQoKTw8dSk7ZWxzZXtvLS07MD09PW8mJihTPTI9PT1TPzM6MCl9YnJlYWs7Y2FzZSAzOmlmKGUuYmxvY2tEYXRhW3JdKWUuYmxvY2tEYXRhW3JdKz1jKihyZWFkQml0KCk8PHUpO2Vsc2V7ZS5ibG9ja0RhdGFbcl09dzw8dTtTPTB9YnJlYWs7Y2FzZSA0OmUuYmxvY2tEYXRhW3JdJiYoZS5ibG9ja0RhdGFbcl0rPWMqKHJlYWRCaXQoKTw8dSkpfWErK31pZig0PT09Uyl7eS0tOzA9PT15JiYoUz0wKX19OmZ1bmN0aW9uIGRlY29kZUJhc2VsaW5lKGUsdCl7Y29uc3QgYT1kZWNvZGVIdWZmbWFuKGUuaHVmZm1hblRhYmxlREMpLHI9MD09PWE/MDpyZWNlaXZlQW5kRXh0ZW5kKGEpO2UuYmxvY2tEYXRhW3RdPWUucHJlZCs9cjtsZXQgbj0xO2Zvcig7bjw2NDspe2NvbnN0IGE9ZGVjb2RlSHVmZm1hbihlLmh1ZmZtYW5UYWJsZUFDKSxyPTE1JmEscz1hPj40O2lmKDA9PT1yKXtpZihzPDE1KWJyZWFrO24rPTE2O2NvbnRpbnVlfW4rPXM7Y29uc3Qgbz1pW25dO2UuYmxvY2tEYXRhW3Qrb109cmVjZWl2ZUFuZEV4dGVuZChyKTtuKyt9fTtsZXQgRSxELE4sUixMPTA7RD0xPT09az9zWzBdLmJsb2Nrc1BlckxpbmUqc1swXS5ibG9ja3NQZXJDb2x1bW46ZiphLm1jdXNQZXJDb2x1bW47Zm9yKDtMPD1EOyl7Y29uc3QgYT1vP01hdGgubWluKEQtTCxvKTpEO2lmKGE+MCl7Zm9yKHY9MDt2PGs7disrKXNbdl0ucHJlZD0wO3k9MDtpZigxPT09ayl7Qz1zWzBdO2ZvcihUPTA7VDxhO1QrKyl7ZGVjb2RlQmxvY2soQyxNLEwpO0wrK319ZWxzZSBmb3IoVD0wO1Q8YTtUKyspe2Zvcih2PTA7djxrO3YrKyl7Qz1zW3ZdO049Qy5oO1I9Qy52O2ZvcihGPTA7RjxSO0YrKylmb3IoTz0wO088TjtPKyspZGVjb2RlTWN1KEMsTSxMLEYsTyl9TCsrfX1iPTA7RT1maW5kTmV4dEZpbGVNYXJrZXIoZSx0KTtpZighRSlicmVhaztpZihFLmludmFsaWQpe2NvbnN0IGU9YT4wPyJ1bmV4cGVjdGVkIjoiZXhjZXNzaXZlIjsoMCxyLndhcm4pKGBkZWNvZGVTY2FuIC0gJHtlfSBNQ1UgZGF0YSwgY3VycmVudCBtYXJrZXIgaXM6ICR7RS5pbnZhbGlkfWApO3Q9RS5vZmZzZXR9aWYoIShFLm1hcmtlcj49NjU0ODgmJkUubWFya2VyPD02NTQ5NSkpYnJlYWs7dCs9Mn1yZXR1cm4gdC1wfWZ1bmN0aW9uIHF1YW50aXplQW5kSW52ZXJzZShlLHQsYSl7Y29uc3Qgcj1lLnF1YW50aXphdGlvblRhYmxlLG49ZS5ibG9ja0RhdGE7bGV0IGksZyxwLG0sYix5LHcsUyx4LGssQyx2LEYsTyxULE0sRTtpZighcil0aHJvdyBuZXcgSnBlZ0Vycm9yKCJtaXNzaW5nIHJlcXVpcmVkIFF1YW50aXphdGlvbiBUYWJsZS4iKTtmb3IobGV0IGU9MDtlPDY0O2UrPTgpe3g9blt0K2VdO2s9blt0K2UrMV07Qz1uW3QrZSsyXTt2PW5bdCtlKzNdO0Y9blt0K2UrNF07Tz1uW3QrZSs1XTtUPW5bdCtlKzZdO009blt0K2UrN107eCo9cltlXTtpZigwIT0oa3xDfHZ8RnxPfFR8TSkpe2sqPXJbZSsxXTtDKj1yW2UrMl07dio9cltlKzNdO0YqPXJbZSs0XTtPKj1yW2UrNV07VCo9cltlKzZdO00qPXJbZSs3XTtpPWQqeCsxMjg+Pjg7Zz1kKkYrMTI4Pj44O3A9QzttPVQ7Yj1mKihrLU0pKzEyOD4+ODtTPWYqKGsrTSkrMTI4Pj44O3k9djw8NDt3PU88PDQ7aT1pK2crMT4+MTtnPWktZztFPXAqdSttKmgrMTI4Pj44O3A9cCpoLW0qdSsxMjg+Pjg7bT1FO2I9Yit3KzE+PjE7dz1iLXc7Uz1TK3krMT4+MTt5PVMteTtpPWkrbSsxPj4xO209aS1tO2c9ZytwKzE+PjE7cD1nLXA7RT1iKmwrUypjKzIwNDg+PjEyO2I9YipjLVMqbCsyMDQ4Pj4xMjtTPUU7RT15Km8rdypzKzIwNDg+PjEyO3k9eSpzLXcqbysyMDQ4Pj4xMjt3PUU7YVtlXT1pK1M7YVtlKzddPWktUzthW2UrMV09Zyt3O2FbZSs2XT1nLXc7YVtlKzJdPXAreTthW2UrNV09cC15O2FbZSszXT1tK2I7YVtlKzRdPW0tYn1lbHNle0U9ZCp4KzUxMj4+MTA7YVtlXT1FO2FbZSsxXT1FO2FbZSsyXT1FO2FbZSszXT1FO2FbZSs0XT1FO2FbZSs1XT1FO2FbZSs2XT1FO2FbZSs3XT1FfX1mb3IobGV0IGU9MDtlPDg7KytlKXt4PWFbZV07az1hW2UrOF07Qz1hW2UrMTZdO3Y9YVtlKzI0XTtGPWFbZSszMl07Tz1hW2UrNDBdO1Q9YVtlKzQ4XTtNPWFbZSs1Nl07aWYoMCE9KGt8Q3x2fEZ8T3xUfE0pKXtpPWQqeCsyMDQ4Pj4xMjtnPWQqRisyMDQ4Pj4xMjtwPUM7bT1UO2I9Ziooay1NKSsyMDQ4Pj4xMjtTPWYqKGsrTSkrMjA0OD4+MTI7eT12O3c9TztpPTQxMTIrKGkrZysxPj4xKTtnPWktZztFPXAqdSttKmgrMjA0OD4+MTI7cD1wKmgtbSp1KzIwNDg+PjEyO209RTtiPWIrdysxPj4xO3c9Yi13O1M9Uyt5KzE+PjE7eT1TLXk7aT1pK20rMT4+MTttPWktbTtnPWcrcCsxPj4xO3A9Zy1wO0U9YipsK1MqYysyMDQ4Pj4xMjtiPWIqYy1TKmwrMjA0OD4+MTI7Uz1FO0U9eSpvK3cqcysyMDQ4Pj4xMjt5PXkqcy13Km8rMjA0OD4+MTI7dz1FO3g9aStTO009aS1TO2s9Zyt3O1Q9Zy13O0M9cCt5O089cC15O3Y9bStiO0Y9bS1iO3g8MTY/eD0wOng+PTQwODA/eD0yNTU6eD4+PTQ7azwxNj9rPTA6az49NDA4MD9rPTI1NTprPj49NDtDPDE2P0M9MDpDPj00MDgwP0M9MjU1OkM+Pj00O3Y8MTY/dj0wOnY+PTQwODA/dj0yNTU6dj4+PTQ7RjwxNj9GPTA6Rj49NDA4MD9GPTI1NTpGPj49NDtPPDE2P089MDpPPj00MDgwP089MjU1Ok8+Pj00O1Q8MTY/VD0wOlQ+PTQwODA/VD0yNTU6VD4+PTQ7TTwxNj9NPTA6TT49NDA4MD9NPTI1NTpNPj49NDtuW3QrZV09eDtuW3QrZSs4XT1rO25bdCtlKzE2XT1DO25bdCtlKzI0XT12O25bdCtlKzMyXT1GO25bdCtlKzQwXT1PO25bdCtlKzQ4XT1UO25bdCtlKzU2XT1NfWVsc2V7RT1kKngrODE5Mj4+MTQ7RT1FPC0yMDQwPzA6RT49MjAyND8yNTU6RSsyMDU2Pj40O25bdCtlXT1FO25bdCtlKzhdPUU7blt0K2UrMTZdPUU7blt0K2UrMjRdPUU7blt0K2UrMzJdPUU7blt0K2UrNDBdPUU7blt0K2UrNDhdPUU7blt0K2UrNTZdPUV9fX1mdW5jdGlvbiBidWlsZENvbXBvbmVudERhdGEoZSx0KXtjb25zdCBhPXQuYmxvY2tzUGVyTGluZSxyPXQuYmxvY2tzUGVyQ29sdW1uLG49bmV3IEludDE2QXJyYXkoNjQpO2ZvcihsZXQgZT0wO2U8cjtlKyspZm9yKGxldCByPTA7cjxhO3IrKyl7cXVhbnRpemVBbmRJbnZlcnNlKHQsZ2V0QmxvY2tCdWZmZXJPZmZzZXQodCxlLHIpLG4pfXJldHVybiB0LmJsb2NrRGF0YX1mdW5jdGlvbiBmaW5kTmV4dEZpbGVNYXJrZXIoZSx0LGE9dCl7Y29uc3Qgcj1lLmxlbmd0aC0xO2xldCBpPWE8dD9hOnQ7aWYodD49cilyZXR1cm4gbnVsbDtjb25zdCBzPSgwLG4ucmVhZFVpbnQxNikoZSx0KTtpZihzPj02NTQ3MiYmczw9NjU1MzQpcmV0dXJue2ludmFsaWQ6bnVsbCxtYXJrZXI6cyxvZmZzZXQ6dH07bGV0IG89KDAsbi5yZWFkVWludDE2KShlLGkpO2Zvcig7IShvPj02NTQ3MiYmbzw9NjU1MzQpOyl7aWYoKytpPj1yKXJldHVybiBudWxsO289KDAsbi5yZWFkVWludDE2KShlLGkpfXJldHVybntpbnZhbGlkOnMudG9TdHJpbmcoMTYpLG1hcmtlcjpvLG9mZnNldDppfX10LkpwZWdJbWFnZT1jbGFzcyBKcGVnSW1hZ2V7Y29uc3RydWN0b3Ioe2RlY29kZVRyYW5zZm9ybTplPW51bGwsY29sb3JUcmFuc2Zvcm06dD0tMX09e30pe3RoaXMuX2RlY29kZVRyYW5zZm9ybT1lO3RoaXMuX2NvbG9yVHJhbnNmb3JtPXR9cGFyc2UoZSx7ZG5sU2NhbkxpbmVzOnQ9bnVsbH09e30pe2Z1bmN0aW9uIHJlYWREYXRhQmxvY2soKXtjb25zdCB0PSgwLG4ucmVhZFVpbnQxNikoZSxvKTtvKz0yO2xldCBhPW8rdC0yO2NvbnN0IGk9ZmluZE5leHRGaWxlTWFya2VyKGUsYSxvKTtpZihpJiZpLmludmFsaWQpeygwLHIud2FybikoInJlYWREYXRhQmxvY2sgLSBpbmNvcnJlY3QgbGVuZ3RoLCBjdXJyZW50IG1hcmtlciBpczogIitpLmludmFsaWQpO2E9aS5vZmZzZXR9Y29uc3Qgcz1lLnN1YmFycmF5KG8sYSk7bys9cy5sZW5ndGg7cmV0dXJuIHN9ZnVuY3Rpb24gcHJlcGFyZUNvbXBvbmVudHMoZSl7Y29uc3QgdD1NYXRoLmNlaWwoZS5zYW1wbGVzUGVyTGluZS84L2UubWF4SCksYT1NYXRoLmNlaWwoZS5zY2FuTGluZXMvOC9lLm1heFYpO2Zvcihjb25zdCByIG9mIGUuY29tcG9uZW50cyl7Y29uc3Qgbj1NYXRoLmNlaWwoTWF0aC5jZWlsKGUuc2FtcGxlc1BlckxpbmUvOCkqci5oL2UubWF4SCksaT1NYXRoLmNlaWwoTWF0aC5jZWlsKGUuc2NhbkxpbmVzLzgpKnIudi9lLm1heFYpLHM9dCpyLmgsbz02NCooYSpyLnYpKihzKzEpO3IuYmxvY2tEYXRhPW5ldyBJbnQxNkFycmF5KG8pO3IuYmxvY2tzUGVyTGluZT1uO3IuYmxvY2tzUGVyQ29sdW1uPWl9ZS5tY3VzUGVyTGluZT10O2UubWN1c1BlckNvbHVtbj1hfWxldCBhLHMsbz0wLGM9bnVsbCxsPW51bGwsaD0wO2NvbnN0IHU9W10sZD1bXSxmPVtdO2xldCBnPSgwLG4ucmVhZFVpbnQxNikoZSxvKTtvKz0yO2lmKDY1NDk2IT09Zyl0aHJvdyBuZXcgSnBlZ0Vycm9yKCJTT0kgbm90IGZvdW5kIik7Zz0oMCxuLnJlYWRVaW50MTYpKGUsbyk7bys9MjtlOmZvcig7NjU0OTchPT1nOyl7bGV0IHAsbSxiO3N3aXRjaChnKXtjYXNlIDY1NTA0OmNhc2UgNjU1MDU6Y2FzZSA2NTUwNjpjYXNlIDY1NTA3OmNhc2UgNjU1MDg6Y2FzZSA2NTUwOTpjYXNlIDY1NTEwOmNhc2UgNjU1MTE6Y2FzZSA2NTUxMjpjYXNlIDY1NTEzOmNhc2UgNjU1MTQ6Y2FzZSA2NTUxNTpjYXNlIDY1NTE2OmNhc2UgNjU1MTc6Y2FzZSA2NTUxODpjYXNlIDY1NTE5OmNhc2UgNjU1MzQ6Y29uc3QgeT1yZWFkRGF0YUJsb2NrKCk7NjU1MDQ9PT1nJiY3ND09PXlbMF0mJjcwPT09eVsxXSYmNzM9PT15WzJdJiY3MD09PXlbM10mJjA9PT15WzRdJiYoYz17dmVyc2lvbjp7bWFqb3I6eVs1XSxtaW5vcjp5WzZdfSxkZW5zaXR5VW5pdHM6eVs3XSx4RGVuc2l0eTp5WzhdPDw4fHlbOV0seURlbnNpdHk6eVsxMF08PDh8eVsxMV0sdGh1bWJXaWR0aDp5WzEyXSx0aHVtYkhlaWdodDp5WzEzXSx0aHVtYkRhdGE6eS5zdWJhcnJheSgxNCwxNCszKnlbMTJdKnlbMTNdKX0pOzY1NTE4PT09ZyYmNjU9PT15WzBdJiYxMDA9PT15WzFdJiYxMTE9PT15WzJdJiY5OD09PXlbM10mJjEwMT09PXlbNF0mJihsPXt2ZXJzaW9uOnlbNV08PDh8eVs2XSxmbGFnczA6eVs3XTw8OHx5WzhdLGZsYWdzMTp5WzldPDw4fHlbMTBdLHRyYW5zZm9ybUNvZGU6eVsxMV19KTticmVhaztjYXNlIDY1NDk5OmNvbnN0IHc9KDAsbi5yZWFkVWludDE2KShlLG8pO28rPTI7Y29uc3QgUz13K28tMjtsZXQgeDtmb3IoO288Uzspe2NvbnN0IHQ9ZVtvKytdLGE9bmV3IFVpbnQxNkFycmF5KDY0KTtpZih0Pj40PT0wKWZvcihtPTA7bTw2NDttKyspe3g9aVttXTthW3hdPWVbbysrXX1lbHNle2lmKHQ+PjQhPTEpdGhyb3cgbmV3IEpwZWdFcnJvcigiRFFUIC0gaW52YWxpZCB0YWJsZSBzcGVjIik7Zm9yKG09MDttPDY0O20rKyl7eD1pW21dO2FbeF09KDAsbi5yZWFkVWludDE2KShlLG8pO28rPTJ9fXVbMTUmdF09YX1icmVhaztjYXNlIDY1NDcyOmNhc2UgNjU0NzM6Y2FzZSA2NTQ3NDppZihhKXRocm93IG5ldyBKcGVnRXJyb3IoIk9ubHkgc2luZ2xlIGZyYW1lIEpQRUdzIHN1cHBvcnRlZCIpO28rPTI7YT17fTthLmV4dGVuZGVkPTY1NDczPT09ZzthLnByb2dyZXNzaXZlPTY1NDc0PT09ZzthLnByZWNpc2lvbj1lW28rK107Y29uc3Qgaz0oMCxuLnJlYWRVaW50MTYpKGUsbyk7bys9MjthLnNjYW5MaW5lcz10fHxrO2Euc2FtcGxlc1BlckxpbmU9KDAsbi5yZWFkVWludDE2KShlLG8pO28rPTI7YS5jb21wb25lbnRzPVtdO2EuY29tcG9uZW50SWRzPXt9O2NvbnN0IEM9ZVtvKytdO2xldCB2PTAsRj0wO2ZvcihwPTA7cDxDO3ArKyl7Y29uc3QgdD1lW29dLHI9ZVtvKzFdPj40LG49MTUmZVtvKzFdO3Y8ciYmKHY9cik7RjxuJiYoRj1uKTtjb25zdCBpPWVbbysyXTtiPWEuY29tcG9uZW50cy5wdXNoKHtoOnIsdjpuLHF1YW50aXphdGlvbklkOmkscXVhbnRpemF0aW9uVGFibGU6bnVsbH0pO2EuY29tcG9uZW50SWRzW3RdPWItMTtvKz0zfWEubWF4SD12O2EubWF4Vj1GO3ByZXBhcmVDb21wb25lbnRzKGEpO2JyZWFrO2Nhc2UgNjU0NzY6Y29uc3QgTz0oMCxuLnJlYWRVaW50MTYpKGUsbyk7bys9Mjtmb3IocD0yO3A8Tzspe2NvbnN0IHQ9ZVtvKytdLGE9bmV3IFVpbnQ4QXJyYXkoMTYpO2xldCByPTA7Zm9yKG09MDttPDE2O20rKyxvKyspcis9YVttXT1lW29dO2NvbnN0IG49bmV3IFVpbnQ4QXJyYXkocik7Zm9yKG09MDttPHI7bSsrLG8rKyluW21dPWVbb107cCs9MTcrcjsodD4+ND09MD9mOmQpWzE1JnRdPWJ1aWxkSHVmZm1hblRhYmxlKGEsbil9YnJlYWs7Y2FzZSA2NTUwMTpvKz0yO3M9KDAsbi5yZWFkVWludDE2KShlLG8pO28rPTI7YnJlYWs7Y2FzZSA2NTQ5ODpjb25zdCBUPTE9PSsraCYmIXQ7bys9Mjtjb25zdCBNPWVbbysrXSxFPVtdO2ZvcihwPTA7cDxNO3ArKyl7Y29uc3QgdD1lW28rK10scj1hLmNvbXBvbmVudElkc1t0XSxuPWEuY29tcG9uZW50c1tyXTtuLmluZGV4PXQ7Y29uc3QgaT1lW28rK107bi5odWZmbWFuVGFibGVEQz1mW2k+PjRdO24uaHVmZm1hblRhYmxlQUM9ZFsxNSZpXTtFLnB1c2gobil9Y29uc3QgRD1lW28rK10sTj1lW28rK10sUj1lW28rK107dHJ5e2NvbnN0IHQ9ZGVjb2RlU2NhbihlLG8sYSxFLHMsRCxOLFI+PjQsMTUmUixUKTtvKz10fWNhdGNoKHQpe2lmKHQgaW5zdGFuY2VvZiBETkxNYXJrZXJFcnJvcil7KDAsci53YXJuKShgJHt0Lm1lc3NhZ2V9IC0tIGF0dGVtcHRpbmcgdG8gcmUtcGFyc2UgdGhlIEpQRUcgaW1hZ2UuYCk7cmV0dXJuIHRoaXMucGFyc2UoZSx7ZG5sU2NhbkxpbmVzOnQuc2NhbkxpbmVzfSl9aWYodCBpbnN0YW5jZW9mIEVPSU1hcmtlckVycm9yKXsoMCxyLndhcm4pKGAke3QubWVzc2FnZX0gLS0gaWdub3JpbmcgdGhlIHJlc3Qgb2YgdGhlIGltYWdlIGRhdGEuYCk7YnJlYWsgZX10aHJvdyB0fWJyZWFrO2Nhc2UgNjU1MDA6bys9NDticmVhaztjYXNlIDY1NTM1OjI1NSE9PWVbb10mJm8tLTticmVhaztkZWZhdWx0OmNvbnN0IEw9ZmluZE5leHRGaWxlTWFya2VyKGUsby0yLG8tMyk7aWYoTCYmTC5pbnZhbGlkKXsoMCxyLndhcm4pKCJKcGVnSW1hZ2UucGFyc2UgLSB1bmV4cGVjdGVkIGRhdGEsIGN1cnJlbnQgbWFya2VyIGlzOiAiK0wuaW52YWxpZCk7bz1MLm9mZnNldDticmVha31pZighTHx8bz49ZS5sZW5ndGgtMSl7KDAsci53YXJuKSgiSnBlZ0ltYWdlLnBhcnNlIC0gcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBpbWFnZSBkYXRhIHdpdGhvdXQgZmluZGluZyBhbiBFT0kgbWFya2VyICgweEZGRDkpLiIpO2JyZWFrIGV9dGhyb3cgbmV3IEpwZWdFcnJvcigiSnBlZ0ltYWdlLnBhcnNlIC0gdW5rbm93biBtYXJrZXI6ICIrZy50b1N0cmluZygxNikpfWc9KDAsbi5yZWFkVWludDE2KShlLG8pO28rPTJ9dGhpcy53aWR0aD1hLnNhbXBsZXNQZXJMaW5lO3RoaXMuaGVpZ2h0PWEuc2NhbkxpbmVzO3RoaXMuamZpZj1jO3RoaXMuYWRvYmU9bDt0aGlzLmNvbXBvbmVudHM9W107Zm9yKGNvbnN0IGUgb2YgYS5jb21wb25lbnRzKXtjb25zdCB0PXVbZS5xdWFudGl6YXRpb25JZF07dCYmKGUucXVhbnRpemF0aW9uVGFibGU9dCk7dGhpcy5jb21wb25lbnRzLnB1c2goe2luZGV4OmUuaW5kZXgsb3V0cHV0OmJ1aWxkQ29tcG9uZW50RGF0YSgwLGUpLHNjYWxlWDplLmgvYS5tYXhILHNjYWxlWTplLnYvYS5tYXhWLGJsb2Nrc1BlckxpbmU6ZS5ibG9ja3NQZXJMaW5lLGJsb2Nrc1BlckNvbHVtbjplLmJsb2Nrc1BlckNvbHVtbn0pfXRoaXMubnVtQ29tcG9uZW50cz10aGlzLmNvbXBvbmVudHMubGVuZ3RofV9nZXRMaW5lYXJpemVkQmxvY2tEYXRhKGUsdCxhPSExKXtjb25zdCByPXRoaXMud2lkdGgvZSxuPXRoaXMuaGVpZ2h0L3Q7bGV0IGkscyxvLGMsbCxoLHUsZCxmLGcscCxtPTA7Y29uc3QgYj10aGlzLmNvbXBvbmVudHMubGVuZ3RoLHk9ZSp0KmIsdz1uZXcgVWludDhDbGFtcGVkQXJyYXkoeSksUz1uZXcgVWludDMyQXJyYXkoZSkseD00Mjk0OTY3Mjg4O2xldCBrO2Zvcih1PTA7dTxiO3UrKyl7aT10aGlzLmNvbXBvbmVudHNbdV07cz1pLnNjYWxlWCpyO289aS5zY2FsZVkqbjttPXU7cD1pLm91dHB1dDtjPWkuYmxvY2tzUGVyTGluZSsxPDwzO2lmKHMhPT1rKXtmb3IobD0wO2w8ZTtsKyspe2Q9MHxsKnM7U1tsXT0oZCZ4KTw8M3w3JmR9az1zfWZvcihoPTA7aDx0O2grKyl7ZD0wfGgqbztnPWMqKGQmeCl8KDcmZCk8PDM7Zm9yKGw9MDtsPGU7bCsrKXt3W21dPXBbZytTW2xdXTttKz1ifX19bGV0IEM9dGhpcy5fZGVjb2RlVHJhbnNmb3JtO2F8fDQhPT1ifHxDfHwoQz1uZXcgSW50MzJBcnJheShbLTI1NiwyNTUsLTI1NiwyNTUsLTI1NiwyNTUsLTI1NiwyNTVdKSk7aWYoQylmb3IodT0wO3U8eTspZm9yKGQ9MCxmPTA7ZDxiO2QrKyx1KyssZis9Mil3W3VdPSh3W3VdKkNbZl0+PjgpK0NbZisxXTtyZXR1cm4gd31nZXQgX2lzQ29sb3JDb252ZXJzaW9uTmVlZGVkKCl7cmV0dXJuIHRoaXMuYWRvYmU/ISF0aGlzLmFkb2JlLnRyYW5zZm9ybUNvZGU6Mz09PXRoaXMubnVtQ29tcG9uZW50cz8wIT09dGhpcy5fY29sb3JUcmFuc2Zvcm0mJig4MiE9PXRoaXMuY29tcG9uZW50c1swXS5pbmRleHx8NzEhPT10aGlzLmNvbXBvbmVudHNbMV0uaW5kZXh8fDY2IT09dGhpcy5jb21wb25lbnRzWzJdLmluZGV4KToxPT09dGhpcy5fY29sb3JUcmFuc2Zvcm19X2NvbnZlcnRZY2NUb1JnYihlKXtsZXQgdCxhLHI7Zm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuPGk7bis9Myl7dD1lW25dO2E9ZVtuKzFdO3I9ZVtuKzJdO2Vbbl09dC0xNzkuNDU2KzEuNDAyKnI7ZVtuKzFdPXQrMTM1LjQ1OS0uMzQ0KmEtLjcxNCpyO2VbbisyXT10LTIyNi44MTYrMS43NzIqYX1yZXR1cm4gZX1fY29udmVydFljY2tUb1JnYihlKXtsZXQgdCxhLHIsbixpPTA7Zm9yKGxldCBzPTAsbz1lLmxlbmd0aDtzPG87cys9NCl7dD1lW3NdO2E9ZVtzKzFdO3I9ZVtzKzJdO249ZVtzKzNdO2VbaSsrXT1hKigtNjYwNjM1NjY5NDIwMzY0ZS0xOSphKy4wMDA0MzcxMzA0NzU5MjYyMzIqci01NDA4MDYxMDA2NDU5OWUtMTgqdCsuMDAwNDg0NDk3OTcxMjAyODEqbi0uMTU0MzYyMTUxODcxMTI2KS0xMjIuNjcxOTU0MDY4OTQrciooLS4wMDA5NTc5NjQzNzg0NDU3NzMqcisuMDAwODE3MDc2OTExMzQ2NjI1KnQtLjAwNDc3MjcxNDA1NDA4NzQ3Km4rMS41MzM4MDI1MzIyMTczNCkrdCooLjAwMDk2MTI1MDE4NDEzMDY4OCp0LS4wMDI2NjI1NzMzMjI4MzkzMypuKy40ODM1NzA4ODQ1MTI2NSkrbiooLS4wMDAzMzYxOTcxNzc2MTgzOTQqbisuNDg0NzkxNTYxNDkwNzc2KTtlW2krK109MTA3LjI2ODAzOTM5NzcyNCthKigyMTk5MjcxMDQ1MjU3NDFlLTE5KmEtLjAwMDY0MDk5MjAxODI5Nzk0NSpyKy4wMDA2NTkzOTcwMDEyNDU1NzcqdCsuMDAwNDI2MTA1NjUyOTM4ODM3Km4tLjE3NjQ5MTc5MjQ2Mjg3NSkrciooLS4wMDA3NzgyNjk5NDE1MTM2ODMqcisuMDAxMzA4NzIyNjE0MDgyNzUqdCsuMDAwNzcwNDgyNjMxODAxMTMyKm4tLjE1MTA1MTQ5Mjc3NTU2MikrdCooLjAwMTI2OTM1MzY4MTE0ODQzKnQtLjAwMjY1MDkwMTg5MDEwODk4Km4rLjI1ODAyOTEwMjA2ODQ1KStuKigtLjAwMDMxODkxMzExNzU4ODMyOCpuLS4yMTM3NDI0MDAzMjM2NjUpO2VbaSsrXT1hKigtLjAwMDU3MDExNTE5Njk3MzY3NyphLTI2MzQwOTA1MTAwNDU4OWUtMTkqcisuMDAyMDc0MTA4ODExNTAxMip0LS4wMDI4ODI2MDIzNjg1MzQ0MipuKy44MTQyNzI5NjgzNTkyOTUpLTIwLjgxMDAxMjU0Njk0NytyKigtMTUzNDk2MDU3NDQwOTc1ZS0xOSpyLS4wMDAxMzI2ODkwNDM5NjE0NDYqdCsuMDAwNTYwODMzNjkxMjQyODEyKm4tLjE5NTE1MjAyNzUzNDA0OSkrdCooLjAwMTc0NDE4MTMyOTI3NTgyKnQtLjAwMjU1MjQzMzIxNDM5MzQ3Km4rLjExNjkzNTAyMDQ2NTE0NSkrbiooLS4wMDAzNDM1MzE5OTY1MTA1NTUqbisuMjQxNjUyNjAyMzI0MDcpfXJldHVybiBlLnN1YmFycmF5KDAsaSl9X2NvbnZlcnRZY2NrVG9DbXlrKGUpe2xldCB0LGEscjtmb3IobGV0IG49MCxpPWUubGVuZ3RoO248aTtuKz00KXt0PWVbbl07YT1lW24rMV07cj1lW24rMl07ZVtuXT00MzQuNDU2LXQtMS40MDIqcjtlW24rMV09MTE5LjU0MS10Ky4zNDQqYSsuNzE0KnI7ZVtuKzJdPTQ4MS44MTYtdC0xLjc3MiphfXJldHVybiBlfV9jb252ZXJ0Q215a1RvUmdiKGUpe2xldCB0LGEscixuLGk9MDtmb3IobGV0IHM9MCxvPWUubGVuZ3RoO3M8bztzKz00KXt0PWVbc107YT1lW3MrMV07cj1lW3MrMl07bj1lW3MrM107ZVtpKytdPTI1NSt0KigtNjc0NzE0NzA3MzYwMjQ0MWUtMjAqdCsuMDAwODM3OTI2MjEyMTAxMzcyNyphKy4wMDAyODk0NzE4MTg4NjQzMjk0KnIrLjAwMzI2NDIzMTA1NzUzNzgwNipuLTEuMTE4NTYxMTg2NzIwMzkzNykrYSooMjYzNzQxMDc2MTYwODk0MDVlLTIxKmEtODYyNjk0OTE1ODYzODU3MmUtMjAqci0uMDAwMjc0ODc2OTA2NzQ5OTQ5MSpuLS4wMjE1NTY4ODc5NDk3ODk2NykrciooLTM4NzgwOTkyMTI4NjkzNjNlLTIwKnItLjAwMDMyNjc4MDgyNzk0ODUyODYqbisuMDY4Njc0MjIzODU5NTM0NSktbiooLjAwMDMzNjE5NzE3NzYxODM5MzcqbisuNzQzMDY1OTE1MTM0MjI1NCk7ZVtpKytdPTI1NSt0KiguMDAwMTM1OTYzNzI4MTM1ODg4NDgqdCsuMDAwOTI0NTM3MTMyNTczNTg1KmErLjAwMDEwNTY3MzU5NjE4NjgzNTkzKnIrLjAwMDQ3OTE4NjQ2ODc0MzY1MTIqbi0uMzEwOTY4OTU4NzUxNTg3NSkrYSooLS4wMDAyMzU0NTM0NjEwODM3MDM0NCphKy4wMDAyNzAyODQ1MjUzNTM0NzE0KnIrLjAwMjAyMDAzMDg5NzczMDcxNTYqbi0uNzQ4ODA1MjE2NzAxNTQ5NCkrciooNjgzNDgxNTk5ODIzNTY2MmUtMjAqcisuMDAwMTUxNjg0NTIzNjM0NjA5NzMqbi0uMDk3NTE5Mjc3NzQ3Mjg5MzMpLW4qKC4wMDAzMTg5MTMxMTc1ODgzMjgxKm4rLjczNjQ4ODM4MDc3MzMxNjgpO2VbaSsrXT0yNTUrdCooMTM1OTg2NTA0MTEzODUzMDdlLTIxKnQrLjAwMDEyNDIzOTU2MTc1NDkwODUxKmErLjAwMDQ3NTE5ODUwOTc1ODM1ODkqci0zNjcyOTMxNzQ3NjYzMDQyMmUtMjIqbi0uMDU1NjIxODY5ODAyNjQwMzQpK2EqKC4wMDAxNjE0MTM4MDU5ODcyNDY3NiphKy4wMDA5NjkyMjM5MTMwNzI1MTg2KnIrLjAwMDc3ODI2OTI0NTAwMzYyNTMqbi0uNDQwMTUyMzIzNjc1MjY0NjMpK3IqKDUuMDY4ODgyOTE0MDY4NzY5ZS03KnIrLjAwMTc3NzgzNjkwMTEzNzUwNzEqbi0uNzU5MTQ1NDY0OTc0OTYwOSktbiooLjAwMDM0MzUzMTk5NjUxMDU1NTMqbisuNzA2Mzc3MDE4NjE2MDE0NCl9cmV0dXJuIGUuc3ViYXJyYXkoMCxpKX1nZXREYXRhKHt3aWR0aDplLGhlaWdodDp0LGZvcmNlUkdCOmE9ITEsaXNTb3VyY2VQREY6cj0hMX0pe2lmKHRoaXMubnVtQ29tcG9uZW50cz40KXRocm93IG5ldyBKcGVnRXJyb3IoIlVuc3VwcG9ydGVkIGNvbG9yIG1vZGUiKTtjb25zdCBuPXRoaXMuX2dldExpbmVhcml6ZWRCbG9ja0RhdGEoZSx0LHIpO2lmKDE9PT10aGlzLm51bUNvbXBvbmVudHMmJmEpe2NvbnN0IGU9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMqbi5sZW5ndGgpO2xldCB0PTA7Zm9yKGNvbnN0IGEgb2Ygbil7ZVt0KytdPWE7ZVt0KytdPWE7ZVt0KytdPWF9cmV0dXJuIGV9aWYoMz09PXRoaXMubnVtQ29tcG9uZW50cyYmdGhpcy5faXNDb2xvckNvbnZlcnNpb25OZWVkZWQpcmV0dXJuIHRoaXMuX2NvbnZlcnRZY2NUb1JnYihuKTtpZig0PT09dGhpcy5udW1Db21wb25lbnRzKXtpZih0aGlzLl9pc0NvbG9yQ29udmVyc2lvbk5lZWRlZClyZXR1cm4gYT90aGlzLl9jb252ZXJ0WWNja1RvUmdiKG4pOnRoaXMuX2NvbnZlcnRZY2NrVG9DbXlrKG4pO2lmKGEpcmV0dXJuIHRoaXMuX2NvbnZlcnRDbXlrVG9SZ2Iobil9cmV0dXJuIG59fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkpweFN0cmVhbT12b2lkIDA7dmFyIHI9YSgxNyksbj1hKDI4KSxpPWEoMik7Y2xhc3MgSnB4U3RyZWFtIGV4dGVuZHMgci5EZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0LGEpe3N1cGVyKHQpO3RoaXMuc3RyZWFtPWU7dGhpcy5kaWN0PWUuZGljdDt0aGlzLm1heWJlTGVuZ3RoPXQ7dGhpcy5wYXJhbXM9YX1nZXQgYnl0ZXMoKXtyZXR1cm4oMCxpLnNoYWRvdykodGhpcywiYnl0ZXMiLHRoaXMuc3RyZWFtLmdldEJ5dGVzKHRoaXMubWF5YmVMZW5ndGgpKX1lbnN1cmVCdWZmZXIoZSl7fXJlYWRCbG9jaygpe2lmKHRoaXMuZW9mKXJldHVybjtjb25zdCBlPW5ldyBuLkpweEltYWdlO2UucGFyc2UodGhpcy5ieXRlcyk7Y29uc3QgdD1lLndpZHRoLGE9ZS5oZWlnaHQscj1lLmNvbXBvbmVudHNDb3VudCxpPWUudGlsZXMubGVuZ3RoO2lmKDE9PT1pKXRoaXMuYnVmZmVyPWUudGlsZXNbMF0uaXRlbXM7ZWxzZXtjb25zdCBuPW5ldyBVaW50OENsYW1wZWRBcnJheSh0KmEqcik7Zm9yKGxldCBhPTA7YTxpO2ErKyl7Y29uc3QgaT1lLnRpbGVzW2FdLHM9aS53aWR0aCxvPWkuaGVpZ2h0LGM9aS5sZWZ0LGw9aS50b3AsaD1pLml0ZW1zO2xldCB1PTAsZD0odCpsK2MpKnI7Y29uc3QgZj10KnIsZz1zKnI7Zm9yKGxldCBlPTA7ZTxvO2UrKyl7Y29uc3QgZT1oLnN1YmFycmF5KHUsdStnKTtuLnNldChlLGQpO3UrPWc7ZCs9Zn19dGhpcy5idWZmZXI9bn10aGlzLmJ1ZmZlckxlbmd0aD10aGlzLmJ1ZmZlci5sZW5ndGg7dGhpcy5lb2Y9ITB9fXQuSnB4U3RyZWFtPUpweFN0cmVhbX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkpweEltYWdlPXZvaWQgMDt2YXIgcj1hKDIpLG49YSg0KSxpPWEoMjQpO2NsYXNzIEpweEVycm9yIGV4dGVuZHMgci5CYXNlRXhjZXB0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGBKUFggZXJyb3I6ICR7ZX1gLCJKcHhFcnJvciIpfX1jb25zdCBzPXtMTDowLExIOjEsSEw6MSxISDoyfTt0LkpweEltYWdlPWNsYXNzIEpweEltYWdle2NvbnN0cnVjdG9yKCl7dGhpcy5mYWlsT25Db3JydXB0ZWRJbWFnZT0hMX1wYXJzZShlKXtpZig2NTM1OT09PSgwLG4ucmVhZFVpbnQxNikoZSwwKSl7dGhpcy5wYXJzZUNvZGVzdHJlYW0oZSwwLGUubGVuZ3RoKTtyZXR1cm59Y29uc3QgdD1lLmxlbmd0aDtsZXQgYT0wO2Zvcig7YTx0Oyl7bGV0IGk9OCxzPSgwLG4ucmVhZFVpbnQzMikoZSxhKTtjb25zdCBvPSgwLG4ucmVhZFVpbnQzMikoZSxhKzQpO2ErPWk7aWYoMT09PXMpe3M9NDI5NDk2NzI5NiooMCxuLnJlYWRVaW50MzIpKGUsYSkrKDAsbi5yZWFkVWludDMyKShlLGErNCk7YSs9ODtpKz04fTA9PT1zJiYocz10LWEraSk7aWYoczxpKXRocm93IG5ldyBKcHhFcnJvcigiSW52YWxpZCBib3ggZmllbGQgc2l6ZSIpO2NvbnN0IGM9cy1pO2xldCBsPSEwO3N3aXRjaChvKXtjYXNlIDE3ODU3Mzc4MzI6bD0hMTticmVhaztjYXNlIDE2NjgyNDY2NDI6Y29uc3QgdD1lW2FdO2lmKDE9PT10KXtjb25zdCB0PSgwLG4ucmVhZFVpbnQzMikoZSxhKzMpO3N3aXRjaCh0KXtjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpicmVhaztkZWZhdWx0OigwLHIud2FybikoIlVua25vd24gY29sb3JzcGFjZSAiK3QpfX1lbHNlIDI9PT10JiYoMCxyLmluZm8pKCJJQ0MgcHJvZmlsZSBub3Qgc3VwcG9ydGVkIik7YnJlYWs7Y2FzZSAxNzg1NzM3ODI3OnRoaXMucGFyc2VDb2Rlc3RyZWFtKGUsYSxhK2MpO2JyZWFrO2Nhc2UgMTc4MzYzNmUzOjIxODc5MzczOCE9PSgwLG4ucmVhZFVpbnQzMikoZSxhKSYmKDAsci53YXJuKSgiSW52YWxpZCBKUDIgc2lnbmF0dXJlIik7YnJlYWs7Y2FzZSAxNzgzNjM0NDU4OmNhc2UgMTcxODkwOTI5NjpjYXNlIDE5MjAwOTk2OTc6Y2FzZSAxOTE5MjUxMjMyOmNhc2UgMTc2ODQ0OTEzODpicmVhaztkZWZhdWx0OmNvbnN0IGk9U3RyaW5nLmZyb21DaGFyQ29kZShvPj4yNCYyNTUsbz4+MTYmMjU1LG8+PjgmMjU1LDI1NSZvKTsoMCxyLndhcm4pKGBVbnN1cHBvcnRlZCBoZWFkZXIgdHlwZSAke299ICgke2l9KS5gKX1sJiYoYSs9Yyl9fXBhcnNlSW1hZ2VQcm9wZXJ0aWVzKGUpe2xldCB0PWUuZ2V0Qnl0ZSgpO2Zvcig7dD49MDspe2NvbnN0IGE9dDt0PWUuZ2V0Qnl0ZSgpO2lmKDY1MzYxPT09KGE8PDh8dCkpe2Uuc2tpcCg0KTtjb25zdCB0PWUuZ2V0SW50MzIoKT4+PjAsYT1lLmdldEludDMyKCk+Pj4wLHI9ZS5nZXRJbnQzMigpPj4+MCxuPWUuZ2V0SW50MzIoKT4+PjA7ZS5za2lwKDE2KTtjb25zdCBpPWUuZ2V0VWludDE2KCk7dGhpcy53aWR0aD10LXI7dGhpcy5oZWlnaHQ9YS1uO3RoaXMuY29tcG9uZW50c0NvdW50PWk7dGhpcy5iaXRzUGVyQ29tcG9uZW50PTg7cmV0dXJufX10aHJvdyBuZXcgSnB4RXJyb3IoIk5vIHNpemUgbWFya2VyIGZvdW5kIGluIEpQWCBzdHJlYW0iKX1wYXJzZUNvZGVzdHJlYW0oZSx0LGEpe2NvbnN0IGk9e307bGV0IHM9ITE7dHJ5e2xldCBvPXQ7Zm9yKDtvKzE8YTspe2NvbnN0IHQ9KDAsbi5yZWFkVWludDE2KShlLG8pO28rPTI7bGV0IGEsYyxsLGgsdSxkLGY9MDtzd2l0Y2godCl7Y2FzZSA2NTM1OTppLm1haW5IZWFkZXI9ITA7YnJlYWs7Y2FzZSA2NTQ5NzpicmVhaztjYXNlIDY1MzYxOmY9KDAsbi5yZWFkVWludDE2KShlLG8pO2NvbnN0IGc9e307Zy5Yc2l6PSgwLG4ucmVhZFVpbnQzMikoZSxvKzQpO2cuWXNpej0oMCxuLnJlYWRVaW50MzIpKGUsbys4KTtnLlhPc2l6PSgwLG4ucmVhZFVpbnQzMikoZSxvKzEyKTtnLllPc2l6PSgwLG4ucmVhZFVpbnQzMikoZSxvKzE2KTtnLlhUc2l6PSgwLG4ucmVhZFVpbnQzMikoZSxvKzIwKTtnLllUc2l6PSgwLG4ucmVhZFVpbnQzMikoZSxvKzI0KTtnLlhUT3Npej0oMCxuLnJlYWRVaW50MzIpKGUsbysyOCk7Zy5ZVE9zaXo9KDAsbi5yZWFkVWludDMyKShlLG8rMzIpO2NvbnN0IHA9KDAsbi5yZWFkVWludDE2KShlLG8rMzYpO2cuQ3Npej1wO2NvbnN0IG09W107YT1vKzM4O2ZvcihsZXQgdD0wO3Q8cDt0Kyspe2NvbnN0IHQ9e3ByZWNpc2lvbjoxKygxMjcmZVthXSksaXNTaWduZWQ6ISEoMTI4JmVbYV0pLFhSc2l6OmVbYSsxXSxZUnNpejplW2ErMl19O2ErPTM7Y2FsY3VsYXRlQ29tcG9uZW50RGltZW5zaW9ucyh0LGcpO20ucHVzaCh0KX1pLlNJWj1nO2kuY29tcG9uZW50cz1tO2NhbGN1bGF0ZVRpbGVHcmlkcyhpLG0pO2kuUUNDPVtdO2kuQ09DPVtdO2JyZWFrO2Nhc2UgNjUzNzI6Zj0oMCxuLnJlYWRVaW50MTYpKGUsbyk7Y29uc3QgYj17fTthPW8rMjtjPWVbYSsrXTtzd2l0Y2goMzEmYyl7Y2FzZSAwOmg9ODt1PSEwO2JyZWFrO2Nhc2UgMTpoPTE2O3U9ITE7YnJlYWs7Y2FzZSAyOmg9MTY7dT0hMDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBTUWNkIHZhbHVlICIrYyl9Yi5ub1F1YW50aXphdGlvbj04PT09aDtiLnNjYWxhckV4cG91bmRlZD11O2IuZ3VhcmRCaXRzPWM+PjU7bD1bXTtmb3IoO2E8ZitvOyl7Y29uc3QgdD17fTtpZig4PT09aCl7dC5lcHNpbG9uPWVbYSsrXT4+Mzt0Lm11PTB9ZWxzZXt0LmVwc2lsb249ZVthXT4+Mzt0Lm11PSg3JmVbYV0pPDw4fGVbYSsxXTthKz0yfWwucHVzaCh0KX1iLlNQcWNkcz1sO2lmKGkubWFpbkhlYWRlcilpLlFDRD1iO2Vsc2V7aS5jdXJyZW50VGlsZS5RQ0Q9YjtpLmN1cnJlbnRUaWxlLlFDQz1bXX1icmVhaztjYXNlIDY1MzczOmY9KDAsbi5yZWFkVWludDE2KShlLG8pO2NvbnN0IHk9e307YT1vKzI7bGV0IHc7aWYoaS5TSVouQ3NpejwyNTcpdz1lW2ErK107ZWxzZXt3PSgwLG4ucmVhZFVpbnQxNikoZSxhKTthKz0yfWM9ZVthKytdO3N3aXRjaCgzMSZjKXtjYXNlIDA6aD04O3U9ITA7YnJlYWs7Y2FzZSAxOmg9MTY7dT0hMTticmVhaztjYXNlIDI6aD0xNjt1PSEwO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFNRY2QgdmFsdWUgIitjKX15Lm5vUXVhbnRpemF0aW9uPTg9PT1oO3kuc2NhbGFyRXhwb3VuZGVkPXU7eS5ndWFyZEJpdHM9Yz4+NTtsPVtdO2Zvcig7YTxmK287KXtjb25zdCB0PXt9O2lmKDg9PT1oKXt0LmVwc2lsb249ZVthKytdPj4zO3QubXU9MH1lbHNle3QuZXBzaWxvbj1lW2FdPj4zO3QubXU9KDcmZVthXSk8PDh8ZVthKzFdO2ErPTJ9bC5wdXNoKHQpfXkuU1BxY2RzPWw7aS5tYWluSGVhZGVyP2kuUUNDW3ddPXk6aS5jdXJyZW50VGlsZS5RQ0Nbd109eTticmVhaztjYXNlIDY1MzYyOmY9KDAsbi5yZWFkVWludDE2KShlLG8pO2NvbnN0IFM9e307YT1vKzI7Y29uc3QgeD1lW2ErK107Uy5lbnRyb3B5Q29kZXJXaXRoQ3VzdG9tUHJlY2luY3RzPSEhKDEmeCk7Uy5zb3BNYXJrZXJVc2VkPSEhKDImeCk7Uy5lcGhNYXJrZXJVc2VkPSEhKDQmeCk7Uy5wcm9ncmVzc2lvbk9yZGVyPWVbYSsrXTtTLmxheWVyc0NvdW50PSgwLG4ucmVhZFVpbnQxNikoZSxhKTthKz0yO1MubXVsdGlwbGVDb21wb25lbnRUcmFuc2Zvcm09ZVthKytdO1MuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50PWVbYSsrXTtTLnhjYj0yKygxNSZlW2ErK10pO1MueWNiPTIrKDE1JmVbYSsrXSk7Y29uc3Qgaz1lW2ErK107Uy5zZWxlY3RpdmVBcml0aG1ldGljQ29kaW5nQnlwYXNzPSEhKDEmayk7Uy5yZXNldENvbnRleHRQcm9iYWJpbGl0aWVzPSEhKDImayk7Uy50ZXJtaW5hdGlvbk9uRWFjaENvZGluZ1Bhc3M9ISEoNCZrKTtTLnZlcnRpY2FsbHlTdHJpcGU9ISEoOCZrKTtTLnByZWRpY3RhYmxlVGVybWluYXRpb249ISEoMTYmayk7Uy5zZWdtZW50YXRpb25TeW1ib2xVc2VkPSEhKDMyJmspO1MucmV2ZXJzaWJsZVRyYW5zZm9ybWF0aW9uPWVbYSsrXTtpZihTLmVudHJvcHlDb2RlcldpdGhDdXN0b21QcmVjaW5jdHMpe2NvbnN0IHQ9W107Zm9yKDthPGYrbzspe2NvbnN0IHI9ZVthKytdO3QucHVzaCh7UFB4OjE1JnIsUFB5OnI+PjR9KX1TLnByZWNpbmN0c1NpemVzPXR9Y29uc3QgQz1bXTtTLnNlbGVjdGl2ZUFyaXRobWV0aWNDb2RpbmdCeXBhc3MmJkMucHVzaCgic2VsZWN0aXZlQXJpdGhtZXRpY0NvZGluZ0J5cGFzcyIpO1MudGVybWluYXRpb25PbkVhY2hDb2RpbmdQYXNzJiZDLnB1c2goInRlcm1pbmF0aW9uT25FYWNoQ29kaW5nUGFzcyIpO1MudmVydGljYWxseVN0cmlwZSYmQy5wdXNoKCJ2ZXJ0aWNhbGx5U3RyaXBlIik7Uy5wcmVkaWN0YWJsZVRlcm1pbmF0aW9uJiZDLnB1c2goInByZWRpY3RhYmxlVGVybWluYXRpb24iKTtpZihDLmxlbmd0aD4wKXtzPSEwOygwLHIud2FybikoYEpQWDogVW5zdXBwb3J0ZWQgQ09EIG9wdGlvbnMgKCR7Qy5qb2luKCIsICIpfSkuYCl9aWYoaS5tYWluSGVhZGVyKWkuQ09EPVM7ZWxzZXtpLmN1cnJlbnRUaWxlLkNPRD1TO2kuY3VycmVudFRpbGUuQ09DPVtdfWJyZWFrO2Nhc2UgNjU0MjQ6Zj0oMCxuLnJlYWRVaW50MTYpKGUsbyk7ZD17fTtkLmluZGV4PSgwLG4ucmVhZFVpbnQxNikoZSxvKzIpO2QubGVuZ3RoPSgwLG4ucmVhZFVpbnQzMikoZSxvKzQpO2QuZGF0YUVuZD1kLmxlbmd0aCtvLTI7ZC5wYXJ0SW5kZXg9ZVtvKzhdO2QucGFydHNDb3VudD1lW28rOV07aS5tYWluSGVhZGVyPSExO2lmKDA9PT1kLnBhcnRJbmRleCl7ZC5DT0Q9aS5DT0Q7ZC5DT0M9aS5DT0Muc2xpY2UoMCk7ZC5RQ0Q9aS5RQ0Q7ZC5RQ0M9aS5RQ0Muc2xpY2UoMCl9aS5jdXJyZW50VGlsZT1kO2JyZWFrO2Nhc2UgNjU0Mjc6ZD1pLmN1cnJlbnRUaWxlO2lmKDA9PT1kLnBhcnRJbmRleCl7aW5pdGlhbGl6ZVRpbGUoaSxkLmluZGV4KTtidWlsZFBhY2tldHMoaSl9Zj1kLmRhdGFFbmQtbztwYXJzZVRpbGVQYWNrZXRzKGksZSxvLGYpO2JyZWFrO2Nhc2UgNjUzNjM6KDAsci53YXJuKSgiSlBYOiBDb2Rlc3RyZWFtIGNvZGUgMHhGRjUzIChDT0MpIGlzIG5vdCBpbXBsZW1lbnRlZC4iKTtjYXNlIDY1MzY1OmNhc2UgNjUzNjc6Y2FzZSA2NTM2ODpjYXNlIDY1MzgwOmY9KDAsbi5yZWFkVWludDE2KShlLG8pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGNvZGVzdHJlYW0gY29kZTogIit0LnRvU3RyaW5nKDE2KSl9bys9Zn19Y2F0Y2goZSl7aWYoc3x8dGhpcy5mYWlsT25Db3JydXB0ZWRJbWFnZSl0aHJvdyBuZXcgSnB4RXJyb3IoZS5tZXNzYWdlKTsoMCxyLndhcm4pKGBKUFg6IFRyeWluZyB0byByZWNvdmVyIGZyb206ICIke2UubWVzc2FnZX0iLmApfXRoaXMudGlsZXM9ZnVuY3Rpb24gdHJhbnNmb3JtQ29tcG9uZW50cyhlKXtjb25zdCB0PWUuU0laLGE9ZS5jb21wb25lbnRzLHI9dC5Dc2l6LG49W107Zm9yKGxldCB0PTAsaT1lLnRpbGVzLmxlbmd0aDt0PGk7dCsrKXtjb25zdCBpPWUudGlsZXNbdF0scz1bXTtmb3IobGV0IHQ9MDt0PHI7dCsrKXNbdF09dHJhbnNmb3JtVGlsZShlLGksdCk7Y29uc3Qgbz1zWzBdLGM9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KG8uaXRlbXMubGVuZ3RoKnIpLGw9e2xlZnQ6by5sZWZ0LHRvcDpvLnRvcCx3aWR0aDpvLndpZHRoLGhlaWdodDpvLmhlaWdodCxpdGVtczpjfTtsZXQgaCx1LGQsZixnLHAsbSxiPTA7aWYoaS5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLm11bHRpcGxlQ29tcG9uZW50VHJhbnNmb3JtKXtjb25zdCBlPTQ9PT1yLHQ9c1swXS5pdGVtcyxuPXNbMV0uaXRlbXMsbz1zWzJdLml0ZW1zLGw9ZT9zWzNdLml0ZW1zOm51bGw7aD1hWzBdLnByZWNpc2lvbi04O3U9LjUrKDEyODw8aCk7Y29uc3QgeT1pLmNvbXBvbmVudHNbMF0sdz1yLTM7Zj10Lmxlbmd0aDtpZih5LmNvZGluZ1N0eWxlUGFyYW1ldGVycy5yZXZlcnNpYmxlVHJhbnNmb3JtYXRpb24pZm9yKGQ9MDtkPGY7ZCsrLGIrPXcpe2c9dFtkXSt1O3A9bltkXTttPW9bZF07Y29uc3QgZT1nLShtK3A+PjIpO2NbYisrXT1lK20+Pmg7Y1tiKytdPWU+Pmg7Y1tiKytdPWUrcD4+aH1lbHNlIGZvcihkPTA7ZDxmO2QrKyxiKz13KXtnPXRbZF0rdTtwPW5bZF07bT1vW2RdO2NbYisrXT1nKzEuNDAyKm0+Pmg7Y1tiKytdPWctLjM0NDEzKnAtLjcxNDE0Km0+Pmg7Y1tiKytdPWcrMS43NzIqcD4+aH1pZihlKWZvcihkPTAsYj0zO2Q8ZjtkKyssYis9NCljW2JdPWxbZF0rdT4+aH1lbHNlIGZvcihsZXQgZT0wO2U8cjtlKyspe2NvbnN0IHQ9c1tlXS5pdGVtcztoPWFbZV0ucHJlY2lzaW9uLTg7dT0uNSsoMTI4PDxoKTtmb3IoYj1lLGQ9MCxmPXQubGVuZ3RoO2Q8ZjtkKyspe2NbYl09dFtkXSt1Pj5oO2IrPXJ9fW4ucHVzaChsKX1yZXR1cm4gbn0oaSk7dGhpcy53aWR0aD1pLlNJWi5Yc2l6LWkuU0laLlhPc2l6O3RoaXMuaGVpZ2h0PWkuU0laLllzaXotaS5TSVouWU9zaXo7dGhpcy5jb21wb25lbnRzQ291bnQ9aS5TSVouQ3Npen19O2Z1bmN0aW9uIGNhbGN1bGF0ZUNvbXBvbmVudERpbWVuc2lvbnMoZSx0KXtlLngwPU1hdGguY2VpbCh0LlhPc2l6L2UuWFJzaXopO2UueDE9TWF0aC5jZWlsKHQuWHNpei9lLlhSc2l6KTtlLnkwPU1hdGguY2VpbCh0LllPc2l6L2UuWVJzaXopO2UueTE9TWF0aC5jZWlsKHQuWXNpei9lLllSc2l6KTtlLndpZHRoPWUueDEtZS54MDtlLmhlaWdodD1lLnkxLWUueTB9ZnVuY3Rpb24gY2FsY3VsYXRlVGlsZUdyaWRzKGUsdCl7Y29uc3QgYT1lLlNJWixyPVtdO2xldCBuO2NvbnN0IGk9TWF0aC5jZWlsKChhLlhzaXotYS5YVE9zaXopL2EuWFRzaXopLHM9TWF0aC5jZWlsKChhLllzaXotYS5ZVE9zaXopL2EuWVRzaXopO2ZvcihsZXQgZT0wO2U8cztlKyspZm9yKGxldCB0PTA7dDxpO3QrKyl7bj17fTtuLnR4MD1NYXRoLm1heChhLlhUT3Npeit0KmEuWFRzaXosYS5YT3Npeik7bi50eTA9TWF0aC5tYXgoYS5ZVE9zaXorZSphLllUc2l6LGEuWU9zaXopO24udHgxPU1hdGgubWluKGEuWFRPc2l6Kyh0KzEpKmEuWFRzaXosYS5Yc2l6KTtuLnR5MT1NYXRoLm1pbihhLllUT3NpeisoZSsxKSphLllUc2l6LGEuWXNpeik7bi53aWR0aD1uLnR4MS1uLnR4MDtuLmhlaWdodD1uLnR5MS1uLnR5MDtuLmNvbXBvbmVudHM9W107ci5wdXNoKG4pfWUudGlsZXM9cjtmb3IobGV0IGU9MCxpPWEuQ3NpejtlPGk7ZSsrKXtjb25zdCBhPXRbZV07Zm9yKGxldCB0PTAsaT1yLmxlbmd0aDt0PGk7dCsrKXtjb25zdCBpPXt9O249clt0XTtpLnRjeDA9TWF0aC5jZWlsKG4udHgwL2EuWFJzaXopO2kudGN5MD1NYXRoLmNlaWwobi50eTAvYS5ZUnNpeik7aS50Y3gxPU1hdGguY2VpbChuLnR4MS9hLlhSc2l6KTtpLnRjeTE9TWF0aC5jZWlsKG4udHkxL2EuWVJzaXopO2kud2lkdGg9aS50Y3gxLWkudGN4MDtpLmhlaWdodD1pLnRjeTEtaS50Y3kwO24uY29tcG9uZW50c1tlXT1pfX19ZnVuY3Rpb24gZ2V0QmxvY2tzRGltZW5zaW9ucyhlLHQsYSl7Y29uc3Qgcj10LmNvZGluZ1N0eWxlUGFyYW1ldGVycyxuPXt9O2lmKHIuZW50cm9weUNvZGVyV2l0aEN1c3RvbVByZWNpbmN0cyl7bi5QUHg9ci5wcmVjaW5jdHNTaXplc1thXS5QUHg7bi5QUHk9ci5wcmVjaW5jdHNTaXplc1thXS5QUHl9ZWxzZXtuLlBQeD0xNTtuLlBQeT0xNX1uLnhjYl89YT4wP01hdGgubWluKHIueGNiLG4uUFB4LTEpOk1hdGgubWluKHIueGNiLG4uUFB4KTtuLnljYl89YT4wP01hdGgubWluKHIueWNiLG4uUFB5LTEpOk1hdGgubWluKHIueWNiLG4uUFB5KTtyZXR1cm4gbn1mdW5jdGlvbiBidWlsZFByZWNpbmN0cyhlLHQsYSl7Y29uc3Qgcj0xPDxhLlBQeCxuPTE8PGEuUFB5LGk9MD09PXQucmVzTGV2ZWwscz0xPDxhLlBQeCsoaT8wOi0xKSxvPTE8PGEuUFB5KyhpPzA6LTEpLGM9dC50cngxPnQudHJ4MD9NYXRoLmNlaWwodC50cngxL3IpLU1hdGguZmxvb3IodC50cngwL3IpOjAsbD10LnRyeTE+dC50cnkwP01hdGguY2VpbCh0LnRyeTEvbiktTWF0aC5mbG9vcih0LnRyeTAvbik6MCxoPWMqbDt0LnByZWNpbmN0UGFyYW1ldGVycz17cHJlY2luY3RXaWR0aDpyLHByZWNpbmN0SGVpZ2h0Om4sbnVtcHJlY2luY3Rzd2lkZTpjLG51bXByZWNpbmN0c2hpZ2g6bCxudW1wcmVjaW5jdHM6aCxwcmVjaW5jdFdpZHRoSW5TdWJiYW5kOnMscHJlY2luY3RIZWlnaHRJblN1YmJhbmQ6b319ZnVuY3Rpb24gYnVpbGRDb2RlYmxvY2tzKGUsdCxhKXtjb25zdCByPWEueGNiXyxuPWEueWNiXyxpPTE8PHIscz0xPDxuLG89dC50YngwPj5yLGM9dC50YnkwPj5uLGw9dC50YngxK2ktMT4+cixoPXQudGJ5MStzLTE+Pm4sdT10LnJlc29sdXRpb24ucHJlY2luY3RQYXJhbWV0ZXJzLGQ9W10sZj1bXTtsZXQgZyxwLG0sYjtmb3IocD1jO3A8aDtwKyspZm9yKGc9bztnPGw7ZysrKXttPXtjYng6ZyxjYnk6cCx0YngwOmkqZyx0YnkwOnMqcCx0YngxOmkqKGcrMSksdGJ5MTpzKihwKzEpfTttLnRieDBfPU1hdGgubWF4KHQudGJ4MCxtLnRieDApO20udGJ5MF89TWF0aC5tYXgodC50YnkwLG0udGJ5MCk7bS50YngxXz1NYXRoLm1pbih0LnRieDEsbS50YngxKTttLnRieTFfPU1hdGgubWluKHQudGJ5MSxtLnRieTEpO2I9TWF0aC5mbG9vcigobS50YngwXy10LnRieDApL3UucHJlY2luY3RXaWR0aEluU3ViYmFuZCkrTWF0aC5mbG9vcigobS50YnkwXy10LnRieTApL3UucHJlY2luY3RIZWlnaHRJblN1YmJhbmQpKnUubnVtcHJlY2luY3Rzd2lkZTttLnByZWNpbmN0TnVtYmVyPWI7bS5zdWJiYW5kVHlwZT10LnR5cGU7bS5MYmxvY2s9MztpZihtLnRieDFfPD1tLnRieDBffHxtLnRieTFfPD1tLnRieTBfKWNvbnRpbnVlO2QucHVzaChtKTtsZXQgZT1mW2JdO2lmKHZvaWQgMCE9PWUpe2c8ZS5jYnhNaW4/ZS5jYnhNaW49ZzpnPmUuY2J4TWF4JiYoZS5jYnhNYXg9Zyk7cDxlLmNieU1pbj9lLmNieE1pbj1wOnA+ZS5jYnlNYXgmJihlLmNieU1heD1wKX1lbHNlIGZbYl09ZT17Y2J4TWluOmcsY2J5TWluOnAsY2J4TWF4OmcsY2J5TWF4OnB9O20ucHJlY2luY3Q9ZX10LmNvZGVibG9ja1BhcmFtZXRlcnM9e2NvZGVibG9ja1dpZHRoOnIsY29kZWJsb2NrSGVpZ2h0Om4sbnVtY29kZWJsb2Nrd2lkZTpsLW8rMSxudW1jb2RlYmxvY2toaWdoOmgtYysxfTt0LmNvZGVibG9ja3M9ZDt0LnByZWNpbmN0cz1mfWZ1bmN0aW9uIGNyZWF0ZVBhY2tldChlLHQsYSl7Y29uc3Qgcj1bXSxuPWUuc3ViYmFuZHM7Zm9yKGxldCBlPTAsYT1uLmxlbmd0aDtlPGE7ZSsrKXtjb25zdCBhPW5bZV0uY29kZWJsb2Nrcztmb3IobGV0IGU9MCxuPWEubGVuZ3RoO2U8bjtlKyspe2NvbnN0IG49YVtlXTtuLnByZWNpbmN0TnVtYmVyPT09dCYmci5wdXNoKG4pfX1yZXR1cm57bGF5ZXJOdW1iZXI6YSxjb2RlYmxvY2tzOnJ9fWZ1bmN0aW9uIExheWVyUmVzb2x1dGlvbkNvbXBvbmVudFBvc2l0aW9uSXRlcmF0b3IoZSl7Y29uc3QgdD1lLlNJWixhPWUuY3VycmVudFRpbGUuaW5kZXgscj1lLnRpbGVzW2FdLG49ci5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LGk9dC5Dc2l6O2xldCBzPTA7Zm9yKGxldCBlPTA7ZTxpO2UrKylzPU1hdGgubWF4KHMsci5jb21wb25lbnRzW2VdLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpO2xldCBvPTAsYz0wLGw9MCxoPTA7dGhpcy5uZXh0UGFja2V0PWZ1bmN0aW9uIEpweEltYWdlX25leHRQYWNrZXQoKXtmb3IoO288bjtvKyspe2Zvcig7Yzw9cztjKyspe2Zvcig7bDxpO2wrKyl7Y29uc3QgZT1yLmNvbXBvbmVudHNbbF07aWYoYz5lLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpY29udGludWU7Y29uc3QgdD1lLnJlc29sdXRpb25zW2NdLGE9dC5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzO2Zvcig7aDxhOyl7Y29uc3QgZT1jcmVhdGVQYWNrZXQodCxoLG8pO2grKztyZXR1cm4gZX1oPTB9bD0wfWM9MH10aHJvdyBuZXcgSnB4RXJyb3IoIk91dCBvZiBwYWNrZXRzIil9fWZ1bmN0aW9uIFJlc29sdXRpb25MYXllckNvbXBvbmVudFBvc2l0aW9uSXRlcmF0b3IoZSl7Y29uc3QgdD1lLlNJWixhPWUuY3VycmVudFRpbGUuaW5kZXgscj1lLnRpbGVzW2FdLG49ci5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LGk9dC5Dc2l6O2xldCBzPTA7Zm9yKGxldCBlPTA7ZTxpO2UrKylzPU1hdGgubWF4KHMsci5jb21wb25lbnRzW2VdLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpO2xldCBvPTAsYz0wLGw9MCxoPTA7dGhpcy5uZXh0UGFja2V0PWZ1bmN0aW9uIEpweEltYWdlX25leHRQYWNrZXQoKXtmb3IoO288PXM7bysrKXtmb3IoO2M8bjtjKyspe2Zvcig7bDxpO2wrKyl7Y29uc3QgZT1yLmNvbXBvbmVudHNbbF07aWYobz5lLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpY29udGludWU7Y29uc3QgdD1lLnJlc29sdXRpb25zW29dLGE9dC5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzO2Zvcig7aDxhOyl7Y29uc3QgZT1jcmVhdGVQYWNrZXQodCxoLGMpO2grKztyZXR1cm4gZX1oPTB9bD0wfWM9MH10aHJvdyBuZXcgSnB4RXJyb3IoIk91dCBvZiBwYWNrZXRzIil9fWZ1bmN0aW9uIFJlc29sdXRpb25Qb3NpdGlvbkNvbXBvbmVudExheWVySXRlcmF0b3IoZSl7Y29uc3QgdD1lLlNJWixhPWUuY3VycmVudFRpbGUuaW5kZXgscj1lLnRpbGVzW2FdLG49ci5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LGk9dC5Dc2l6O2xldCBzLG8sYyxsLGg9MDtmb3IoYz0wO2M8aTtjKyspe2NvbnN0IGU9ci5jb21wb25lbnRzW2NdO2g9TWF0aC5tYXgoaCxlLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpfWNvbnN0IHU9bmV3IEludDMyQXJyYXkoaCsxKTtmb3Iobz0wO288PWg7KytvKXtsZXQgZT0wO2ZvcihjPTA7YzxpOysrYyl7Y29uc3QgdD1yLmNvbXBvbmVudHNbY10ucmVzb2x1dGlvbnM7bzx0Lmxlbmd0aCYmKGU9TWF0aC5tYXgoZSx0W29dLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHMpKX11W29dPWV9cz0wO289MDtjPTA7bD0wO3RoaXMubmV4dFBhY2tldD1mdW5jdGlvbiBKcHhJbWFnZV9uZXh0UGFja2V0KCl7Zm9yKDtvPD1oO28rKyl7Zm9yKDtsPHVbb107bCsrKXtmb3IoO2M8aTtjKyspe2NvbnN0IGU9ci5jb21wb25lbnRzW2NdO2lmKG8+ZS5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KWNvbnRpbnVlO2NvbnN0IHQ9ZS5yZXNvbHV0aW9uc1tvXSxhPXQucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0cztpZighKGw+PWEpKXtmb3IoO3M8bjspe2NvbnN0IGU9Y3JlYXRlUGFja2V0KHQsbCxzKTtzKys7cmV0dXJuIGV9cz0wfX1jPTB9bD0wfXRocm93IG5ldyBKcHhFcnJvcigiT3V0IG9mIHBhY2tldHMiKX19ZnVuY3Rpb24gUG9zaXRpb25Db21wb25lbnRSZXNvbHV0aW9uTGF5ZXJJdGVyYXRvcihlKXtjb25zdCB0PWUuU0laLGE9ZS5jdXJyZW50VGlsZS5pbmRleCxyPWUudGlsZXNbYV0sbj1yLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMubGF5ZXJzQ291bnQsaT10LkNzaXoscz1nZXRQcmVjaW5jdFNpemVzSW5JbWFnZVNjYWxlKHIpLG89cztsZXQgYz0wLGw9MCxoPTAsdT0wLGQ9MDt0aGlzLm5leHRQYWNrZXQ9ZnVuY3Rpb24gSnB4SW1hZ2VfbmV4dFBhY2tldCgpe2Zvcig7ZDxvLm1heE51bUhpZ2g7ZCsrKXtmb3IoO3U8by5tYXhOdW1XaWRlO3UrKyl7Zm9yKDtoPGk7aCsrKXtjb25zdCBlPXIuY29tcG9uZW50c1toXSx0PWUuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudDtmb3IoO2w8PXQ7bCsrKXtjb25zdCB0PWUucmVzb2x1dGlvbnNbbF0sYT1zLmNvbXBvbmVudHNbaF0ucmVzb2x1dGlvbnNbbF0scj1nZXRQcmVjaW5jdEluZGV4SWZFeGlzdCh1LGQsYSxvLHQpO2lmKG51bGwhPT1yKXtmb3IoO2M8bjspe2NvbnN0IGU9Y3JlYXRlUGFja2V0KHQscixjKTtjKys7cmV0dXJuIGV9Yz0wfX1sPTB9aD0wfXU9MH10aHJvdyBuZXcgSnB4RXJyb3IoIk91dCBvZiBwYWNrZXRzIil9fWZ1bmN0aW9uIENvbXBvbmVudFBvc2l0aW9uUmVzb2x1dGlvbkxheWVySXRlcmF0b3IoZSl7Y29uc3QgdD1lLlNJWixhPWUuY3VycmVudFRpbGUuaW5kZXgscj1lLnRpbGVzW2FdLG49ci5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LGk9dC5Dc2l6LHM9Z2V0UHJlY2luY3RTaXplc0luSW1hZ2VTY2FsZShyKTtsZXQgbz0wLGM9MCxsPTAsaD0wLHU9MDt0aGlzLm5leHRQYWNrZXQ9ZnVuY3Rpb24gSnB4SW1hZ2VfbmV4dFBhY2tldCgpe2Zvcig7bDxpOysrbCl7Y29uc3QgZT1yLmNvbXBvbmVudHNbbF0sdD1zLmNvbXBvbmVudHNbbF0sYT1lLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7Zm9yKDt1PHQubWF4TnVtSGlnaDt1Kyspe2Zvcig7aDx0Lm1heE51bVdpZGU7aCsrKXtmb3IoO2M8PWE7YysrKXtjb25zdCBhPWUucmVzb2x1dGlvbnNbY10scj10LnJlc29sdXRpb25zW2NdLGk9Z2V0UHJlY2luY3RJbmRleElmRXhpc3QoaCx1LHIsdCxhKTtpZihudWxsIT09aSl7Zm9yKDtvPG47KXtjb25zdCBlPWNyZWF0ZVBhY2tldChhLGksbyk7bysrO3JldHVybiBlfW89MH19Yz0wfWg9MH11PTB9dGhyb3cgbmV3IEpweEVycm9yKCJPdXQgb2YgcGFja2V0cyIpfX1mdW5jdGlvbiBnZXRQcmVjaW5jdEluZGV4SWZFeGlzdChlLHQsYSxyLG4pe2NvbnN0IGk9ZSpyLm1pbldpZHRoLHM9dCpyLm1pbkhlaWdodDtpZihpJWEud2lkdGghPTB8fHMlYS5oZWlnaHQhPTApcmV0dXJuIG51bGw7Y29uc3Qgbz1zL2Eud2lkdGgqbi5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3Rzd2lkZTtyZXR1cm4gaS9hLmhlaWdodCtvfWZ1bmN0aW9uIGdldFByZWNpbmN0U2l6ZXNJbkltYWdlU2NhbGUoZSl7Y29uc3QgdD1lLmNvbXBvbmVudHMubGVuZ3RoO2xldCBhPU51bWJlci5NQVhfVkFMVUUscj1OdW1iZXIuTUFYX1ZBTFVFLG49MCxpPTA7Y29uc3Qgcz1uZXcgQXJyYXkodCk7Zm9yKGxldCBvPTA7bzx0O28rKyl7Y29uc3QgdD1lLmNvbXBvbmVudHNbb10sYz10LmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQsbD1uZXcgQXJyYXkoYysxKTtsZXQgaD1OdW1iZXIuTUFYX1ZBTFVFLHU9TnVtYmVyLk1BWF9WQUxVRSxkPTAsZj0wLGc9MTtmb3IobGV0IGU9YztlPj0wOy0tZSl7Y29uc3QgYT10LnJlc29sdXRpb25zW2VdLHI9ZyphLnByZWNpbmN0UGFyYW1ldGVycy5wcmVjaW5jdFdpZHRoLG49ZyphLnByZWNpbmN0UGFyYW1ldGVycy5wcmVjaW5jdEhlaWdodDtoPU1hdGgubWluKGgscik7dT1NYXRoLm1pbih1LG4pO2Q9TWF0aC5tYXgoZCxhLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHN3aWRlKTtmPU1hdGgubWF4KGYsYS5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzaGlnaCk7bFtlXT17d2lkdGg6cixoZWlnaHQ6bn07Zzw8PTF9YT1NYXRoLm1pbihhLGgpO3I9TWF0aC5taW4ocix1KTtuPU1hdGgubWF4KG4sZCk7aT1NYXRoLm1heChpLGYpO3Nbb109e3Jlc29sdXRpb25zOmwsbWluV2lkdGg6aCxtaW5IZWlnaHQ6dSxtYXhOdW1XaWRlOmQsbWF4TnVtSGlnaDpmfX1yZXR1cm57Y29tcG9uZW50czpzLG1pbldpZHRoOmEsbWluSGVpZ2h0OnIsbWF4TnVtV2lkZTpuLG1heE51bUhpZ2g6aX19ZnVuY3Rpb24gYnVpbGRQYWNrZXRzKGUpe2NvbnN0IHQ9ZS5TSVosYT1lLmN1cnJlbnRUaWxlLmluZGV4LHI9ZS50aWxlc1thXSxuPXQuQ3Npejtmb3IobGV0IGU9MDtlPG47ZSsrKXtjb25zdCB0PXIuY29tcG9uZW50c1tlXSxhPXQuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCxuPVtdLGk9W107Zm9yKGxldCBlPTA7ZTw9YTtlKyspe2NvbnN0IHI9Z2V0QmxvY2tzRGltZW5zaW9ucygwLHQsZSkscz17fSxvPTE8PGEtZTtzLnRyeDA9TWF0aC5jZWlsKHQudGN4MC9vKTtzLnRyeTA9TWF0aC5jZWlsKHQudGN5MC9vKTtzLnRyeDE9TWF0aC5jZWlsKHQudGN4MS9vKTtzLnRyeTE9TWF0aC5jZWlsKHQudGN5MS9vKTtzLnJlc0xldmVsPWU7YnVpbGRQcmVjaW5jdHMoMCxzLHIpO24ucHVzaChzKTtsZXQgYztpZigwPT09ZSl7Yz17fTtjLnR5cGU9IkxMIjtjLnRieDA9TWF0aC5jZWlsKHQudGN4MC9vKTtjLnRieTA9TWF0aC5jZWlsKHQudGN5MC9vKTtjLnRieDE9TWF0aC5jZWlsKHQudGN4MS9vKTtjLnRieTE9TWF0aC5jZWlsKHQudGN5MS9vKTtjLnJlc29sdXRpb249cztidWlsZENvZGVibG9ja3MoMCxjLHIpO2kucHVzaChjKTtzLnN1YmJhbmRzPVtjXX1lbHNle2NvbnN0IG49MTw8YS1lKzEsbz1bXTtjPXt9O2MudHlwZT0iSEwiO2MudGJ4MD1NYXRoLmNlaWwodC50Y3gwL24tLjUpO2MudGJ5MD1NYXRoLmNlaWwodC50Y3kwL24pO2MudGJ4MT1NYXRoLmNlaWwodC50Y3gxL24tLjUpO2MudGJ5MT1NYXRoLmNlaWwodC50Y3kxL24pO2MucmVzb2x1dGlvbj1zO2J1aWxkQ29kZWJsb2NrcygwLGMscik7aS5wdXNoKGMpO28ucHVzaChjKTtjPXt9O2MudHlwZT0iTEgiO2MudGJ4MD1NYXRoLmNlaWwodC50Y3gwL24pO2MudGJ5MD1NYXRoLmNlaWwodC50Y3kwL24tLjUpO2MudGJ4MT1NYXRoLmNlaWwodC50Y3gxL24pO2MudGJ5MT1NYXRoLmNlaWwodC50Y3kxL24tLjUpO2MucmVzb2x1dGlvbj1zO2J1aWxkQ29kZWJsb2NrcygwLGMscik7aS5wdXNoKGMpO28ucHVzaChjKTtjPXt9O2MudHlwZT0iSEgiO2MudGJ4MD1NYXRoLmNlaWwodC50Y3gwL24tLjUpO2MudGJ5MD1NYXRoLmNlaWwodC50Y3kwL24tLjUpO2MudGJ4MT1NYXRoLmNlaWwodC50Y3gxL24tLjUpO2MudGJ5MT1NYXRoLmNlaWwodC50Y3kxL24tLjUpO2MucmVzb2x1dGlvbj1zO2J1aWxkQ29kZWJsb2NrcygwLGMscik7aS5wdXNoKGMpO28ucHVzaChjKTtzLnN1YmJhbmRzPW99fXQucmVzb2x1dGlvbnM9bjt0LnN1YmJhbmRzPWl9Y29uc3QgaT1yLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMucHJvZ3Jlc3Npb25PcmRlcjtzd2l0Y2goaSl7Y2FzZSAwOnIucGFja2V0c0l0ZXJhdG9yPW5ldyBMYXllclJlc29sdXRpb25Db21wb25lbnRQb3NpdGlvbkl0ZXJhdG9yKGUpO2JyZWFrO2Nhc2UgMTpyLnBhY2tldHNJdGVyYXRvcj1uZXcgUmVzb2x1dGlvbkxheWVyQ29tcG9uZW50UG9zaXRpb25JdGVyYXRvcihlKTticmVhaztjYXNlIDI6ci5wYWNrZXRzSXRlcmF0b3I9bmV3IFJlc29sdXRpb25Qb3NpdGlvbkNvbXBvbmVudExheWVySXRlcmF0b3IoZSk7YnJlYWs7Y2FzZSAzOnIucGFja2V0c0l0ZXJhdG9yPW5ldyBQb3NpdGlvbkNvbXBvbmVudFJlc29sdXRpb25MYXllckl0ZXJhdG9yKGUpO2JyZWFrO2Nhc2UgNDpyLnBhY2tldHNJdGVyYXRvcj1uZXcgQ29tcG9uZW50UG9zaXRpb25SZXNvbHV0aW9uTGF5ZXJJdGVyYXRvcihlKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBKcHhFcnJvcihgVW5zdXBwb3J0ZWQgcHJvZ3Jlc3Npb24gb3JkZXIgJHtpfWApfX1mdW5jdGlvbiBwYXJzZVRpbGVQYWNrZXRzKGUsdCxhLHIpe2xldCBpLHM9MCxvPTAsYz0hMTtmdW5jdGlvbiByZWFkQml0cyhlKXtmb3IoO288ZTspe2NvbnN0IGU9dFthK3NdO3MrKztpZihjKXtpPWk8PDd8ZTtvKz03O2M9ITF9ZWxzZXtpPWk8PDh8ZTtvKz04fTI1NT09PWUmJihjPSEwKX1vLT1lO3JldHVybiBpPj4+byYoMTw8ZSktMX1mdW5jdGlvbiBza2lwTWFya2VySWZFcXVhbChlKXtpZigyNTU9PT10W2Ercy0xXSYmdFthK3NdPT09ZSl7c2tpcEJ5dGVzKDEpO3JldHVybiEwfWlmKDI1NT09PXRbYStzXSYmdFthK3MrMV09PT1lKXtza2lwQnl0ZXMoMik7cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gc2tpcEJ5dGVzKGUpe3MrPWV9ZnVuY3Rpb24gYWxpZ25Ub0J5dGUoKXtvPTA7aWYoYyl7cysrO2M9ITF9fWZ1bmN0aW9uIHJlYWRDb2RpbmdwYXNzZXMoKXtpZigwPT09cmVhZEJpdHMoMSkpcmV0dXJuIDE7aWYoMD09PXJlYWRCaXRzKDEpKXJldHVybiAyO2xldCBlPXJlYWRCaXRzKDIpO2lmKGU8MylyZXR1cm4gZSszO2U9cmVhZEJpdHMoNSk7aWYoZTwzMSlyZXR1cm4gZSs2O2U9cmVhZEJpdHMoNyk7cmV0dXJuIGUrMzd9Y29uc3QgbD1lLmN1cnJlbnRUaWxlLmluZGV4LGg9ZS50aWxlc1tsXSx1PWUuQ09ELnNvcE1hcmtlclVzZWQsZD1lLkNPRC5lcGhNYXJrZXJVc2VkLGY9aC5wYWNrZXRzSXRlcmF0b3I7Zm9yKDtzPHI7KXthbGlnblRvQnl0ZSgpO3UmJnNraXBNYXJrZXJJZkVxdWFsKDE0NSkmJnNraXBCeXRlcyg0KTtjb25zdCBlPWYubmV4dFBhY2tldCgpO2lmKCFyZWFkQml0cygxKSljb250aW51ZTtjb25zdCByPWUubGF5ZXJOdW1iZXIsaT1bXTtsZXQgbztmb3IobGV0IHQ9MCxhPWUuY29kZWJsb2Nrcy5sZW5ndGg7dDxhO3QrKyl7bz1lLmNvZGVibG9ja3NbdF07bGV0IGE9by5wcmVjaW5jdDtjb25zdCBzPW8uY2J4LWEuY2J4TWluLGM9by5jYnktYS5jYnlNaW47bGV0IGwsaCx1PSExLGQ9ITE7aWYodm9pZCAwIT09by5pbmNsdWRlZCl1PSEhcmVhZEJpdHMoMSk7ZWxzZXthPW8ucHJlY2luY3Q7bGV0IGU7aWYodm9pZCAwIT09YS5pbmNsdXNpb25UcmVlKWU9YS5pbmNsdXNpb25UcmVlO2Vsc2V7Y29uc3QgdD1hLmNieE1heC1hLmNieE1pbisxLG49YS5jYnlNYXgtYS5jYnlNaW4rMTtlPW5ldyBJbmNsdXNpb25UcmVlKHQsbixyKTtoPW5ldyBUYWdUcmVlKHQsbik7YS5pbmNsdXNpb25UcmVlPWU7YS56ZXJvQml0UGxhbmVzVHJlZT1oO2ZvcihsZXQgZT0wO2U8cjtlKyspaWYoMCE9PXJlYWRCaXRzKDEpKXRocm93IG5ldyBKcHhFcnJvcigiSW52YWxpZCB0YWcgdHJlZSIpfWlmKGUucmVzZXQocyxjLHIpKWZvcig7Oyl7aWYoIXJlYWRCaXRzKDEpKXtlLmluY3JlbWVudFZhbHVlKHIpO2JyZWFrfWw9IWUubmV4dExldmVsKCk7aWYobCl7by5pbmNsdWRlZD0hMDt1PWQ9ITA7YnJlYWt9fX1pZighdSljb250aW51ZTtpZihkKXtoPWEuemVyb0JpdFBsYW5lc1RyZWU7aC5yZXNldChzLGMpO2Zvcig7OylpZihyZWFkQml0cygxKSl7bD0haC5uZXh0TGV2ZWwoKTtpZihsKWJyZWFrfWVsc2UgaC5pbmNyZW1lbnRWYWx1ZSgpO28uemVyb0JpdFBsYW5lcz1oLnZhbHVlfWNvbnN0IGY9cmVhZENvZGluZ3Bhc3NlcygpO2Zvcig7cmVhZEJpdHMoMSk7KW8uTGJsb2NrKys7Y29uc3QgZz0oMCxuLmxvZzIpKGYpLHA9cmVhZEJpdHMoKGY8MTw8Zz9nLTE6Zykrby5MYmxvY2spO2kucHVzaCh7Y29kZWJsb2NrOm8sY29kaW5ncGFzc2VzOmYsZGF0YUxlbmd0aDpwfSl9YWxpZ25Ub0J5dGUoKTtkJiZza2lwTWFya2VySWZFcXVhbCgxNDYpO2Zvcig7aS5sZW5ndGg+MDspe2NvbnN0IGU9aS5zaGlmdCgpO289ZS5jb2RlYmxvY2s7dm9pZCAwPT09by5kYXRhJiYoby5kYXRhPVtdKTtvLmRhdGEucHVzaCh7ZGF0YTp0LHN0YXJ0OmErcyxlbmQ6YStzK2UuZGF0YUxlbmd0aCxjb2RpbmdwYXNzZXM6ZS5jb2RpbmdwYXNzZXN9KTtzKz1lLmRhdGFMZW5ndGh9fXJldHVybiBzfWZ1bmN0aW9uIGNvcHlDb2VmZmljaWVudHMoZSx0LGEscixuLHMsYyxsLGgpe2NvbnN0IHU9ci50YngwLGQ9ci50YnkwLGY9ci50YngxLXIudGJ4MCxnPXIuY29kZWJsb2NrcyxwPSJIIj09PXIudHlwZS5jaGFyQXQoMCk/MTowLG09IkgiPT09ci50eXBlLmNoYXJBdCgxKT90OjA7Zm9yKGxldCBhPTAsYj1nLmxlbmd0aDthPGI7KythKXtjb25zdCBiPWdbYV0seT1iLnRieDFfLWIudGJ4MF8sdz1iLnRieTFfLWIudGJ5MF87aWYoMD09PXl8fDA9PT13KWNvbnRpbnVlO2lmKHZvaWQgMD09PWIuZGF0YSljb250aW51ZTtjb25zdCBTPW5ldyBvKHksdyxiLnN1YmJhbmRUeXBlLGIuemVyb0JpdFBsYW5lcyxzKTtsZXQgeD0yO2NvbnN0IGs9Yi5kYXRhO2xldCBDLHYsRixPPTAsVD0wO2ZvcihDPTAsdj1rLmxlbmd0aDtDPHY7QysrKXtGPWtbQ107Tys9Ri5lbmQtRi5zdGFydDtUKz1GLmNvZGluZ3Bhc3Nlc31jb25zdCBNPW5ldyBVaW50OEFycmF5KE8pO2xldCBFPTA7Zm9yKEM9MCx2PWsubGVuZ3RoO0M8djtDKyspe0Y9a1tDXTtjb25zdCBlPUYuZGF0YS5zdWJhcnJheShGLnN0YXJ0LEYuZW5kKTtNLnNldChlLEUpO0UrPWUubGVuZ3RofWNvbnN0IEQ9bmV3IGkuQXJpdGhtZXRpY0RlY29kZXIoTSwwLE8pO1Muc2V0RGVjb2RlcihEKTtmb3IoQz0wO0M8VDtDKyspe3N3aXRjaCh4KXtjYXNlIDA6Uy5ydW5TaWduaWZpY2FuY2VQcm9wYWdhdGlvblBhc3MoKTticmVhaztjYXNlIDE6Uy5ydW5NYWduaXR1ZGVSZWZpbmVtZW50UGFzcygpO2JyZWFrO2Nhc2UgMjpTLnJ1bkNsZWFudXBQYXNzKCk7bCYmUy5jaGVja1NlZ21lbnRhdGlvblN5bWJvbCgpfWgmJlMucmVzZXQoKTt4PSh4KzEpJTN9bGV0IE49Yi50YngwXy11KyhiLnRieTBfLWQpKmY7Y29uc3QgUj1TLmNvZWZmaWNlbnRzU2lnbixMPVMuY29lZmZpY2VudHNNYWduaXR1ZGUsaj1TLmJpdHNEZWNvZGVkLCQ9Yz8wOi41O2xldCBfLFUsWDtFPTA7Y29uc3QgSD0iTEwiIT09ci50eXBlO2ZvcihDPTA7Qzx3O0MrKyl7Y29uc3QgYT0yKihOL2Z8MCkqKHQtZikrcCttO2ZvcihfPTA7Xzx5O18rKyl7VT1MW0VdO2lmKDAhPT1VKXtVPShVKyQpKm47MCE9PVJbRV0mJihVPS1VKTtYPWpbRV07Y29uc3QgdD1IP2ErKE48PDEpOk47ZVt0XT1jJiZYPj1zP1U6VSooMTw8cy1YKX1OKys7RSsrfU4rPWYteX19fWZ1bmN0aW9uIHRyYW5zZm9ybVRpbGUoZSx0LGEpe2NvbnN0IHI9dC5jb21wb25lbnRzW2FdLG49ci5jb2RpbmdTdHlsZVBhcmFtZXRlcnMsaT1yLnF1YW50aXphdGlvblBhcmFtZXRlcnMsbz1uLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCxjPWkuU1BxY2RzLGw9aS5zY2FsYXJFeHBvdW5kZWQsaD1pLmd1YXJkQml0cyx1PW4uc2VnbWVudGF0aW9uU3ltYm9sVXNlZCxkPW4ucmVzZXRDb250ZXh0UHJvYmFiaWxpdGllcyxmPWUuY29tcG9uZW50c1thXS5wcmVjaXNpb24sZz1uLnJldmVyc2libGVUcmFuc2Zvcm1hdGlvbixwPWc/bmV3IFJldmVyc2libGVUcmFuc2Zvcm06bmV3IElycmV2ZXJzaWJsZVRyYW5zZm9ybSxtPVtdO2xldCBiPTA7Zm9yKGxldCBlPTA7ZTw9bztlKyspe2NvbnN0IHQ9ci5yZXNvbHV0aW9uc1tlXSxhPXQudHJ4MS10LnRyeDAsbj10LnRyeTEtdC50cnkwLGk9bmV3IEZsb2F0MzJBcnJheShhKm4pO2ZvcihsZXQgcj0wLG49dC5zdWJiYW5kcy5sZW5ndGg7cjxuO3IrKyl7bGV0IG4sbztpZihsKXtuPWNbYl0ubXU7bz1jW2JdLmVwc2lsb247YisrfWVsc2V7bj1jWzBdLm11O289Y1swXS5lcHNpbG9uKyhlPjA/MS1lOjApfWNvbnN0IHA9dC5zdWJiYW5kc1tyXSxtPXNbcC50eXBlXTtjb3B5Q29lZmZpY2llbnRzKGksYSwwLHAsZz8xOjIqKihmK20tbykqKDErbi8yMDQ4KSxoK28tMSxnLHUsZCl9bS5wdXNoKHt3aWR0aDphLGhlaWdodDpuLGl0ZW1zOml9KX1jb25zdCB5PXAuY2FsY3VsYXRlKG0sci50Y3gwLHIudGN5MCk7cmV0dXJue2xlZnQ6ci50Y3gwLHRvcDpyLnRjeTAsd2lkdGg6eS53aWR0aCxoZWlnaHQ6eS5oZWlnaHQsaXRlbXM6eS5pdGVtc319ZnVuY3Rpb24gaW5pdGlhbGl6ZVRpbGUoZSx0KXtjb25zdCBhPWUuU0laLkNzaXoscj1lLnRpbGVzW3RdO2ZvcihsZXQgdD0wO3Q8YTt0Kyspe2NvbnN0IGE9ci5jb21wb25lbnRzW3RdLG49dm9pZCAwIT09ZS5jdXJyZW50VGlsZS5RQ0NbdF0/ZS5jdXJyZW50VGlsZS5RQ0NbdF06ZS5jdXJyZW50VGlsZS5RQ0Q7YS5xdWFudGl6YXRpb25QYXJhbWV0ZXJzPW47Y29uc3QgaT12b2lkIDAhPT1lLmN1cnJlbnRUaWxlLkNPQ1t0XT9lLmN1cnJlbnRUaWxlLkNPQ1t0XTplLmN1cnJlbnRUaWxlLkNPRDthLmNvZGluZ1N0eWxlUGFyYW1ldGVycz1pfXIuY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycz1lLmN1cnJlbnRUaWxlLkNPRH1jbGFzcyBUYWdUcmVle2NvbnN0cnVjdG9yKGUsdCl7Y29uc3QgYT0oMCxuLmxvZzIpKE1hdGgubWF4KGUsdCkpKzE7dGhpcy5sZXZlbHM9W107Zm9yKGxldCByPTA7cjxhO3IrKyl7Y29uc3QgYT17d2lkdGg6ZSxoZWlnaHQ6dCxpdGVtczpbXX07dGhpcy5sZXZlbHMucHVzaChhKTtlPU1hdGguY2VpbChlLzIpO3Q9TWF0aC5jZWlsKHQvMil9fXJlc2V0KGUsdCl7bGV0IGEscj0wLG49MDtmb3IoO3I8dGhpcy5sZXZlbHMubGVuZ3RoOyl7YT10aGlzLmxldmVsc1tyXTtjb25zdCBpPWUrdCphLndpZHRoO2lmKHZvaWQgMCE9PWEuaXRlbXNbaV0pe249YS5pdGVtc1tpXTticmVha31hLmluZGV4PWk7ZT4+PTE7dD4+PTE7cisrfXItLTthPXRoaXMubGV2ZWxzW3JdO2EuaXRlbXNbYS5pbmRleF09bjt0aGlzLmN1cnJlbnRMZXZlbD1yO2RlbGV0ZSB0aGlzLnZhbHVlfWluY3JlbWVudFZhbHVlKCl7Y29uc3QgZT10aGlzLmxldmVsc1t0aGlzLmN1cnJlbnRMZXZlbF07ZS5pdGVtc1tlLmluZGV4XSsrfW5leHRMZXZlbCgpe2xldCBlPXRoaXMuY3VycmVudExldmVsLHQ9dGhpcy5sZXZlbHNbZV07Y29uc3QgYT10Lml0ZW1zW3QuaW5kZXhdO2UtLTtpZihlPDApe3RoaXMudmFsdWU9YTtyZXR1cm4hMX10aGlzLmN1cnJlbnRMZXZlbD1lO3Q9dGhpcy5sZXZlbHNbZV07dC5pdGVtc1t0LmluZGV4XT1hO3JldHVybiEwfX1jbGFzcyBJbmNsdXNpb25UcmVle2NvbnN0cnVjdG9yKGUsdCxhKXtjb25zdCByPSgwLG4ubG9nMikoTWF0aC5tYXgoZSx0KSkrMTt0aGlzLmxldmVscz1bXTtmb3IobGV0IG49MDtuPHI7bisrKXtjb25zdCByPW5ldyBVaW50OEFycmF5KGUqdCk7Zm9yKGxldCBlPTAsdD1yLmxlbmd0aDtlPHQ7ZSsrKXJbZV09YTtjb25zdCBuPXt3aWR0aDplLGhlaWdodDp0LGl0ZW1zOnJ9O3RoaXMubGV2ZWxzLnB1c2gobik7ZT1NYXRoLmNlaWwoZS8yKTt0PU1hdGguY2VpbCh0LzIpfX1yZXNldChlLHQsYSl7bGV0IHI9MDtmb3IoO3I8dGhpcy5sZXZlbHMubGVuZ3RoOyl7Y29uc3Qgbj10aGlzLmxldmVsc1tyXSxpPWUrdCpuLndpZHRoO24uaW5kZXg9aTtjb25zdCBzPW4uaXRlbXNbaV07aWYoMjU1PT09cylicmVhaztpZihzPmEpe3RoaXMuY3VycmVudExldmVsPXI7dGhpcy5wcm9wYWdhdGVWYWx1ZXMoKTtyZXR1cm4hMX1lPj49MTt0Pj49MTtyKyt9dGhpcy5jdXJyZW50TGV2ZWw9ci0xO3JldHVybiEwfWluY3JlbWVudFZhbHVlKGUpe2NvbnN0IHQ9dGhpcy5sZXZlbHNbdGhpcy5jdXJyZW50TGV2ZWxdO3QuaXRlbXNbdC5pbmRleF09ZSsxO3RoaXMucHJvcGFnYXRlVmFsdWVzKCl9cHJvcGFnYXRlVmFsdWVzKCl7bGV0IGU9dGhpcy5jdXJyZW50TGV2ZWwsdD10aGlzLmxldmVsc1tlXTtjb25zdCBhPXQuaXRlbXNbdC5pbmRleF07Zm9yKDstLWU+PTA7KXt0PXRoaXMubGV2ZWxzW2VdO3QuaXRlbXNbdC5pbmRleF09YX19bmV4dExldmVsKCl7bGV0IGU9dGhpcy5jdXJyZW50TGV2ZWwsdD10aGlzLmxldmVsc1tlXTtjb25zdCBhPXQuaXRlbXNbdC5pbmRleF07dC5pdGVtc1t0LmluZGV4XT0yNTU7ZS0tO2lmKGU8MClyZXR1cm4hMTt0aGlzLmN1cnJlbnRMZXZlbD1lO3Q9dGhpcy5sZXZlbHNbZV07dC5pdGVtc1t0LmluZGV4XT1hO3JldHVybiEwfX1jb25zdCBvPWZ1bmN0aW9uIEJpdE1vZGVsQ2xvc3VyZSgpe2NvbnN0IGU9MTcsdD1uZXcgVWludDhBcnJheShbMCw1LDgsMCwzLDcsOCwwLDQsNyw4LDAsMCwwLDAsMCwxLDYsOCwwLDMsNyw4LDAsNCw3LDgsMCwwLDAsMCwwLDIsNiw4LDAsMyw3LDgsMCw0LDcsOCwwLDAsMCwwLDAsMiw2LDgsMCwzLDcsOCwwLDQsNyw4LDAsMCwwLDAsMCwyLDYsOCwwLDMsNyw4LDAsNCw3LDhdKSxhPW5ldyBVaW50OEFycmF5KFswLDMsNCwwLDUsNyw3LDAsOCw4LDgsMCwwLDAsMCwwLDEsMyw0LDAsNiw3LDcsMCw4LDgsOCwwLDAsMCwwLDAsMiwzLDQsMCw2LDcsNywwLDgsOCw4LDAsMCwwLDAsMCwyLDMsNCwwLDYsNyw3LDAsOCw4LDgsMCwwLDAsMCwwLDIsMyw0LDAsNiw3LDcsMCw4LDgsOF0pLHI9bmV3IFVpbnQ4QXJyYXkoWzAsMSwyLDAsMSwyLDIsMCwyLDIsMiwwLDAsMCwwLDAsMyw0LDUsMCw0LDUsNSwwLDUsNSw1LDAsMCwwLDAsMCw2LDcsNywwLDcsNyw3LDAsNyw3LDcsMCwwLDAsMCwwLDgsOCw4LDAsOCw4LDgsMCw4LDgsOCwwLDAsMCwwLDAsOCw4LDgsMCw4LDgsOCwwLDgsOCw4XSk7cmV0dXJuIGNsYXNzIEJpdE1vZGVse2NvbnN0cnVjdG9yKGUsbixpLHMsbyl7dGhpcy53aWR0aD1lO3RoaXMuaGVpZ2h0PW47bGV0IGM7Yz0iSEgiPT09aT9yOiJITCI9PT1pP2E6dDt0aGlzLmNvbnRleHRMYWJlbFRhYmxlPWM7Y29uc3QgbD1lKm47dGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2U9bmV3IFVpbnQ4QXJyYXkobCk7dGhpcy5jb2VmZmljZW50c1NpZ249bmV3IFVpbnQ4QXJyYXkobCk7bGV0IGg7aD1vPjE0P25ldyBVaW50MzJBcnJheShsKTpvPjY/bmV3IFVpbnQxNkFycmF5KGwpOm5ldyBVaW50OEFycmF5KGwpO3RoaXMuY29lZmZpY2VudHNNYWduaXR1ZGU9aDt0aGlzLnByb2Nlc3NpbmdGbGFncz1uZXcgVWludDhBcnJheShsKTtjb25zdCB1PW5ldyBVaW50OEFycmF5KGwpO2lmKDAhPT1zKWZvcihsZXQgZT0wO2U8bDtlKyspdVtlXT1zO3RoaXMuYml0c0RlY29kZWQ9dTt0aGlzLnJlc2V0KCl9c2V0RGVjb2RlcihlKXt0aGlzLmRlY29kZXI9ZX1yZXNldCgpe3RoaXMuY29udGV4dHM9bmV3IEludDhBcnJheSgxOSk7dGhpcy5jb250ZXh0c1swXT04O3RoaXMuY29udGV4dHNbMTddPTkyO3RoaXMuY29udGV4dHNbMThdPTZ9c2V0TmVpZ2hib3JzU2lnbmlmaWNhbmNlKGUsdCxhKXtjb25zdCByPXRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlLG49dGhpcy53aWR0aCxpPXRoaXMuaGVpZ2h0LHM9dD4wLG89dCsxPG47bGV0IGM7aWYoZT4wKXtjPWEtbjtzJiYocltjLTFdKz0xNik7byYmKHJbYysxXSs9MTYpO3JbY10rPTR9aWYoZSsxPGkpe2M9YStuO3MmJihyW2MtMV0rPTE2KTtvJiYocltjKzFdKz0xNik7cltjXSs9NH1zJiYoclthLTFdKz0xKTtvJiYoclthKzFdKz0xKTtyW2FdfD0xMjh9cnVuU2lnbmlmaWNhbmNlUHJvcGFnYXRpb25QYXNzKCl7Y29uc3QgZT10aGlzLmRlY29kZXIsdD10aGlzLndpZHRoLGE9dGhpcy5oZWlnaHQscj10aGlzLmNvZWZmaWNlbnRzTWFnbml0dWRlLG49dGhpcy5jb2VmZmljZW50c1NpZ24saT10aGlzLm5laWdoYm9yc1NpZ25pZmljYW5jZSxzPXRoaXMucHJvY2Vzc2luZ0ZsYWdzLG89dGhpcy5jb250ZXh0cyxjPXRoaXMuY29udGV4dExhYmVsVGFibGUsbD10aGlzLmJpdHNEZWNvZGVkO2ZvcihsZXQgaD0wO2g8YTtoKz00KWZvcihsZXQgdT0wO3U8dDt1Kyspe2xldCBkPWgqdCt1O2ZvcihsZXQgZj0wO2Y8NDtmKyssZCs9dCl7Y29uc3QgdD1oK2Y7aWYodD49YSlicmVhaztzW2RdJj0tMjtpZihyW2RdfHwhaVtkXSljb250aW51ZTtjb25zdCBnPWNbaVtkXV07aWYoZS5yZWFkQml0KG8sZykpe2NvbnN0IGU9dGhpcy5kZWNvZGVTaWduQml0KHQsdSxkKTtuW2RdPWU7cltkXT0xO3RoaXMuc2V0TmVpZ2hib3JzU2lnbmlmaWNhbmNlKHQsdSxkKTtzW2RdfD0yfWxbZF0rKztzW2RdfD0xfX19ZGVjb2RlU2lnbkJpdChlLHQsYSl7Y29uc3Qgcj10aGlzLndpZHRoLG49dGhpcy5oZWlnaHQsaT10aGlzLmNvZWZmaWNlbnRzTWFnbml0dWRlLHM9dGhpcy5jb2VmZmljZW50c1NpZ247bGV0IG8sYyxsLGgsdSxkO2g9dD4wJiYwIT09aVthLTFdO2lmKHQrMTxyJiYwIT09aVthKzFdKXtsPXNbYSsxXTtpZihoKXtjPXNbYS0xXTtvPTEtbC1jfWVsc2Ugbz0xLWwtbH1lbHNlIGlmKGgpe2M9c1thLTFdO289MS1jLWN9ZWxzZSBvPTA7Y29uc3QgZj0zKm87aD1lPjAmJjAhPT1pW2Etcl07aWYoZSsxPG4mJjAhPT1pW2Ercl0pe2w9c1thK3JdO2lmKGgpe2M9c1thLXJdO289MS1sLWMrZn1lbHNlIG89MS1sLWwrZn1lbHNlIGlmKGgpe2M9c1thLXJdO289MS1jLWMrZn1lbHNlIG89ZjtpZihvPj0wKXt1PTkrbztkPXRoaXMuZGVjb2Rlci5yZWFkQml0KHRoaXMuY29udGV4dHMsdSl9ZWxzZXt1PTktbztkPTFedGhpcy5kZWNvZGVyLnJlYWRCaXQodGhpcy5jb250ZXh0cyx1KX1yZXR1cm4gZH1ydW5NYWduaXR1ZGVSZWZpbmVtZW50UGFzcygpe2NvbnN0IGU9dGhpcy5kZWNvZGVyLHQ9dGhpcy53aWR0aCxhPXRoaXMuaGVpZ2h0LHI9dGhpcy5jb2VmZmljZW50c01hZ25pdHVkZSxuPXRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlLGk9dGhpcy5jb250ZXh0cyxzPXRoaXMuYml0c0RlY29kZWQsbz10aGlzLnByb2Nlc3NpbmdGbGFncyxjPXQqYSxsPTQqdDtmb3IobGV0IGEsaD0wO2g8YztoPWEpe2E9TWF0aC5taW4oYyxoK2wpO2ZvcihsZXQgYz0wO2M8dDtjKyspZm9yKGxldCBsPWgrYztsPGE7bCs9dCl7aWYoIXJbbF18fDAhPSgxJm9bbF0pKWNvbnRpbnVlO2xldCB0PTE2O2lmKDAhPSgyJm9bbF0pKXtvW2xdXj0yO3Q9MD09PSgxMjcmbltsXSk/MTU6MTR9Y29uc3QgYT1lLnJlYWRCaXQoaSx0KTtyW2xdPXJbbF08PDF8YTtzW2xdKys7b1tsXXw9MX19fXJ1bkNsZWFudXBQYXNzKCl7Y29uc3QgdD10aGlzLmRlY29kZXIsYT10aGlzLndpZHRoLHI9dGhpcy5oZWlnaHQsbj10aGlzLm5laWdoYm9yc1NpZ25pZmljYW5jZSxpPXRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGUscz10aGlzLmNvZWZmaWNlbnRzU2lnbixvPXRoaXMuY29udGV4dHMsYz10aGlzLmNvbnRleHRMYWJlbFRhYmxlLGw9dGhpcy5iaXRzRGVjb2RlZCxoPXRoaXMucHJvY2Vzc2luZ0ZsYWdzLHU9YSxkPTIqYSxmPTMqYTtsZXQgZztmb3IobGV0IHA9MDtwPHI7cD1nKXtnPU1hdGgubWluKHArNCxyKTtjb25zdCBtPXAqYSxiPXArMzxyO2ZvcihsZXQgcj0wO3I8YTtyKyspe2NvbnN0IHk9bStyO2xldCB3LFM9MCx4PXksaz1wO2lmKGImJjA9PT1oW3ldJiYwPT09aFt5K3VdJiYwPT09aFt5K2RdJiYwPT09aFt5K2ZdJiYwPT09blt5XSYmMD09PW5beSt1XSYmMD09PW5beStkXSYmMD09PW5beStmXSl7aWYoIXQucmVhZEJpdChvLDE4KSl7bFt5XSsrO2xbeSt1XSsrO2xbeStkXSsrO2xbeStmXSsrO2NvbnRpbnVlfVM9dC5yZWFkQml0KG8sZSk8PDF8dC5yZWFkQml0KG8sZSk7aWYoMCE9PVMpe2s9cCtTO3grPVMqYX13PXRoaXMuZGVjb2RlU2lnbkJpdChrLHIseCk7c1t4XT13O2lbeF09MTt0aGlzLnNldE5laWdoYm9yc1NpZ25pZmljYW5jZShrLHIseCk7aFt4XXw9Mjt4PXk7Zm9yKGxldCBlPXA7ZTw9aztlKysseCs9YSlsW3hdKys7UysrfWZvcihrPXArUztrPGc7aysrLHgrPWEpe2lmKGlbeF18fDAhPSgxJmhbeF0pKWNvbnRpbnVlO2NvbnN0IGU9Y1tuW3hdXTtpZigxPT09dC5yZWFkQml0KG8sZSkpe3c9dGhpcy5kZWNvZGVTaWduQml0KGsscix4KTtzW3hdPXc7aVt4XT0xO3RoaXMuc2V0TmVpZ2hib3JzU2lnbmlmaWNhbmNlKGsscix4KTtoW3hdfD0yfWxbeF0rK319fX1jaGVja1NlZ21lbnRhdGlvblN5bWJvbCgpe2NvbnN0IHQ9dGhpcy5kZWNvZGVyLGE9dGhpcy5jb250ZXh0cztpZigxMCE9PSh0LnJlYWRCaXQoYSxlKTw8M3x0LnJlYWRCaXQoYSxlKTw8Mnx0LnJlYWRCaXQoYSxlKTw8MXx0LnJlYWRCaXQoYSxlKSkpdGhyb3cgbmV3IEpweEVycm9yKCJJbnZhbGlkIHNlZ21lbnRhdGlvbiBzeW1ib2wiKX19fSgpO2NsYXNzIFRyYW5zZm9ybXtjb25zdHJ1Y3Rvcigpe3RoaXMuY29uc3RydWN0b3I9PT1UcmFuc2Zvcm0mJigwLHIudW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBUcmFuc2Zvcm0uIil9Y2FsY3VsYXRlKGUsdCxhKXtsZXQgcj1lWzBdO2ZvcihsZXQgbj0xLGk9ZS5sZW5ndGg7bjxpO24rKylyPXRoaXMuaXRlcmF0ZShyLGVbbl0sdCxhKTtyZXR1cm4gcn1leHRlbmQoZSx0LGEpe2xldCByPXQtMSxuPXQrMSxpPXQrYS0yLHM9dCthO2Vbci0tXT1lW24rK107ZVtzKytdPWVbaS0tXTtlW3ItLV09ZVtuKytdO2VbcysrXT1lW2ktLV07ZVtyLS1dPWVbbisrXTtlW3MrK109ZVtpLS1dO2Vbcl09ZVtuXTtlW3NdPWVbaV19ZmlsdGVyKGUsdCxhKXsoMCxyLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBmaWx0ZXJgIGNhbGxlZCIpfWl0ZXJhdGUoZSx0LGEscil7Y29uc3Qgbj1lLndpZHRoLGk9ZS5oZWlnaHQ7bGV0IHM9ZS5pdGVtcztjb25zdCBvPXQud2lkdGgsYz10LmhlaWdodCxsPXQuaXRlbXM7bGV0IGgsdSxkLGYsZyxwO2ZvcihkPTAsaD0wO2g8aTtoKyspe2Y9MipoKm87Zm9yKHU9MDt1PG47dSsrLGQrKyxmKz0yKWxbZl09c1tkXX1zPWUuaXRlbXM9bnVsbDtjb25zdCBtPW5ldyBGbG9hdDMyQXJyYXkobys4KTtpZigxPT09byl7aWYoMCE9KDEmYSkpZm9yKHA9MCxkPTA7cDxjO3ArKyxkKz1vKWxbZF0qPS41fWVsc2UgZm9yKHA9MCxkPTA7cDxjO3ArKyxkKz1vKXttLnNldChsLnN1YmFycmF5KGQsZCtvKSw0KTt0aGlzLmV4dGVuZChtLDQsbyk7dGhpcy5maWx0ZXIobSw0LG8pO2wuc2V0KG0uc3ViYXJyYXkoNCw0K28pLGQpfWxldCBiPTE2O2NvbnN0IHk9W107Zm9yKGg9MDtoPGI7aCsrKXkucHVzaChuZXcgRmxvYXQzMkFycmF5KGMrOCkpO2xldCB3LFM9MDtlPTQrYztpZigxPT09Yyl7aWYoMCE9KDEmcikpZm9yKGc9MDtnPG87ZysrKWxbZ10qPS41fWVsc2UgZm9yKGc9MDtnPG87ZysrKXtpZigwPT09Uyl7Yj1NYXRoLm1pbihvLWcsYik7Zm9yKGQ9ZyxmPTQ7ZjxlO2QrPW8sZisrKWZvcih3PTA7dzxiO3crKyl5W3ddW2ZdPWxbZCt3XTtTPWJ9Uy0tO2NvbnN0IHQ9eVtTXTt0aGlzLmV4dGVuZCh0LDQsYyk7dGhpcy5maWx0ZXIodCw0LGMpO2lmKDA9PT1TKXtkPWctYisxO2ZvcihmPTQ7ZjxlO2QrPW8sZisrKWZvcih3PTA7dzxiO3crKylsW2Qrd109eVt3XVtmXX19cmV0dXJue3dpZHRoOm8saGVpZ2h0OmMsaXRlbXM6bH19fWNsYXNzIElycmV2ZXJzaWJsZVRyYW5zZm9ybSBleHRlbmRzIFRyYW5zZm9ybXtmaWx0ZXIoZSx0LGEpe2NvbnN0IHI9YT4+MTtsZXQgbixpLHMsbztjb25zdCBjPS0xLjU4NjEzNDM0MjA1OTkyNCxsPS0uMDUyOTgwMTE4NTcyOTYxLGg9Ljg4MjkxMTA3NTUzMDkzNCx1PS40NDM1MDY4NTIwNDM5NzEsZD0xLjIzMDE3NDEwNDkxNDAwMTtuPSh0fD0wKS0zO2ZvcihpPXIrNDtpLS07bis9MillW25dKj0uODEyODkzMDY2MTE1OTYwOTtuPXQtMjtzPXUqZVtuLTFdO2ZvcihpPXIrMztpLS07bis9Mil7bz11KmVbbisxXTtlW25dPWQqZVtuXS1zLW87aWYoIWktLSlicmVhaztuKz0yO3M9dSplW24rMV07ZVtuXT1kKmVbbl0tcy1vfW49dC0xO3M9aCplW24tMV07Zm9yKGk9cisyO2ktLTtuKz0yKXtvPWgqZVtuKzFdO2Vbbl0tPXMrbztpZighaS0tKWJyZWFrO24rPTI7cz1oKmVbbisxXTtlW25dLT1zK299bj10O3M9bCplW24tMV07Zm9yKGk9cisxO2ktLTtuKz0yKXtvPWwqZVtuKzFdO2Vbbl0tPXMrbztpZighaS0tKWJyZWFrO24rPTI7cz1sKmVbbisxXTtlW25dLT1zK299aWYoMCE9PXIpe249dCsxO3M9YyplW24tMV07Zm9yKGk9cjtpLS07bis9Mil7bz1jKmVbbisxXTtlW25dLT1zK287aWYoIWktLSlicmVhaztuKz0yO3M9YyplW24rMV07ZVtuXS09cytvfX19fWNsYXNzIFJldmVyc2libGVUcmFuc2Zvcm0gZXh0ZW5kcyBUcmFuc2Zvcm17ZmlsdGVyKGUsdCxhKXtjb25zdCByPWE+PjE7bGV0IG4saTtmb3Iobj10fD0wLGk9cisxO2ktLTtuKz0yKWVbbl0tPWVbbi0xXStlW24rMV0rMj4+Mjtmb3Iobj10KzEsaT1yO2ktLTtuKz0yKWVbbl0rPWVbbi0xXStlW24rMV0+PjF9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkxaV1N0cmVhbT12b2lkIDA7dmFyIHI9YSgxNyk7Y2xhc3MgTFpXU3RyZWFtIGV4dGVuZHMgci5EZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0LGEpe3N1cGVyKHQpO3RoaXMuc3RyPWU7dGhpcy5kaWN0PWUuZGljdDt0aGlzLmNhY2hlZERhdGE9MDt0aGlzLmJpdHNDYWNoZWQ9MDtjb25zdCByPTQwOTYsbj17ZWFybHlDaGFuZ2U6YSxjb2RlTGVuZ3RoOjksbmV4dENvZGU6MjU4LGRpY3Rpb25hcnlWYWx1ZXM6bmV3IFVpbnQ4QXJyYXkociksZGljdGlvbmFyeUxlbmd0aHM6bmV3IFVpbnQxNkFycmF5KHIpLGRpY3Rpb25hcnlQcmV2Q29kZXM6bmV3IFVpbnQxNkFycmF5KHIpLGN1cnJlbnRTZXF1ZW5jZTpuZXcgVWludDhBcnJheShyKSxjdXJyZW50U2VxdWVuY2VMZW5ndGg6MH07Zm9yKGxldCBlPTA7ZTwyNTY7KytlKXtuLmRpY3Rpb25hcnlWYWx1ZXNbZV09ZTtuLmRpY3Rpb25hcnlMZW5ndGhzW2VdPTF9dGhpcy5sendTdGF0ZT1ufXJlYWRCaXRzKGUpe2xldCB0PXRoaXMuYml0c0NhY2hlZCxhPXRoaXMuY2FjaGVkRGF0YTtmb3IoO3Q8ZTspe2NvbnN0IGU9dGhpcy5zdHIuZ2V0Qnl0ZSgpO2lmKC0xPT09ZSl7dGhpcy5lb2Y9ITA7cmV0dXJuIG51bGx9YT1hPDw4fGU7dCs9OH10aGlzLmJpdHNDYWNoZWQ9dC09ZTt0aGlzLmNhY2hlZERhdGE9YTt0aGlzLmxhc3RDb2RlPW51bGw7cmV0dXJuIGE+Pj50JigxPDxlKS0xfXJlYWRCbG9jaygpe2xldCBlLHQsYSxyPTEwMjQ7Y29uc3Qgbj10aGlzLmx6d1N0YXRlO2lmKCFuKXJldHVybjtjb25zdCBpPW4uZWFybHlDaGFuZ2U7bGV0IHM9bi5uZXh0Q29kZTtjb25zdCBvPW4uZGljdGlvbmFyeVZhbHVlcyxjPW4uZGljdGlvbmFyeUxlbmd0aHMsbD1uLmRpY3Rpb25hcnlQcmV2Q29kZXM7bGV0IGg9bi5jb2RlTGVuZ3RoLHU9bi5wcmV2Q29kZTtjb25zdCBkPW4uY3VycmVudFNlcXVlbmNlO2xldCBmPW4uY3VycmVudFNlcXVlbmNlTGVuZ3RoLGc9MCxwPXRoaXMuYnVmZmVyTGVuZ3RoLG09dGhpcy5lbnN1cmVCdWZmZXIodGhpcy5idWZmZXJMZW5ndGgrcik7Zm9yKGU9MDtlPDUxMjtlKyspe2NvbnN0IGU9dGhpcy5yZWFkQml0cyhoKSxuPWY+MDtpZihlPDI1Nil7ZFswXT1lO2Y9MX1lbHNle2lmKCEoZT49MjU4KSl7aWYoMjU2PT09ZSl7aD05O3M9MjU4O2Y9MDtjb250aW51ZX10aGlzLmVvZj0hMDtkZWxldGUgdGhpcy5sendTdGF0ZTticmVha31pZihlPHMpe2Y9Y1tlXTtmb3IodD1mLTEsYT1lO3Q+PTA7dC0tKXtkW3RdPW9bYV07YT1sW2FdfX1lbHNlIGRbZisrXT1kWzBdfWlmKG4pe2xbc109dTtjW3NdPWNbdV0rMTtvW3NdPWRbMF07cysrO2g9cytpJnMraS0xP2g6MHxNYXRoLm1pbihNYXRoLmxvZyhzK2kpLy42OTMxNDcxODA1NTk5NDUzKzEsMTIpfXU9ZTtnKz1mO2lmKHI8Zyl7ZG97cis9NTEyfXdoaWxlKHI8Zyk7bT10aGlzLmVuc3VyZUJ1ZmZlcih0aGlzLmJ1ZmZlckxlbmd0aCtyKX1mb3IodD0wO3Q8Zjt0KyspbVtwKytdPWRbdF19bi5uZXh0Q29kZT1zO24uY29kZUxlbmd0aD1oO24ucHJldkNvZGU9dTtuLmN1cnJlbnRTZXF1ZW5jZUxlbmd0aD1mO3RoaXMuYnVmZmVyTGVuZ3RoPXB9fXQuTFpXU3RyZWFtPUxaV1N0cmVhbX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlByZWRpY3RvclN0cmVhbT12b2lkIDA7dmFyIHI9YSgxNyksbj1hKDMpLGk9YSgyKTtjbGFzcyBQcmVkaWN0b3JTdHJlYW0gZXh0ZW5kcyByLkRlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQsYSl7c3VwZXIodCk7aWYoIShhIGluc3RhbmNlb2Ygbi5EaWN0KSlyZXR1cm4gZTtjb25zdCByPXRoaXMucHJlZGljdG9yPWEuZ2V0KCJQcmVkaWN0b3IiKXx8MTtpZihyPD0xKXJldHVybiBlO2lmKDIhPT1yJiYocjwxMHx8cj4xNSkpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoYFVuc3VwcG9ydGVkIHByZWRpY3RvcjogJHtyfWApO3RoaXMucmVhZEJsb2NrPTI9PT1yP3RoaXMucmVhZEJsb2NrVGlmZjp0aGlzLnJlYWRCbG9ja1BuZzt0aGlzLnN0cj1lO3RoaXMuZGljdD1lLmRpY3Q7Y29uc3Qgcz10aGlzLmNvbG9ycz1hLmdldCgiQ29sb3JzIil8fDEsbz10aGlzLmJpdHM9YS5nZXQoIkJQQyIsIkJpdHNQZXJDb21wb25lbnQiKXx8OCxjPXRoaXMuY29sdW1ucz1hLmdldCgiQ29sdW1ucyIpfHwxO3RoaXMucGl4Qnl0ZXM9cypvKzc+PjM7dGhpcy5yb3dCeXRlcz1jKnMqbys3Pj4zO3JldHVybiB0aGlzfXJlYWRCbG9ja1RpZmYoKXtjb25zdCBlPXRoaXMucm93Qnl0ZXMsdD10aGlzLmJ1ZmZlckxlbmd0aCxhPXRoaXMuZW5zdXJlQnVmZmVyKHQrZSkscj10aGlzLmJpdHMsbj10aGlzLmNvbG9ycyxpPXRoaXMuc3RyLmdldEJ5dGVzKGUpO3RoaXMuZW9mPSFpLmxlbmd0aDtpZih0aGlzLmVvZilyZXR1cm47bGV0IHMsbz0wLGM9MCxsPTAsaD0wLHU9dDtpZigxPT09ciYmMT09PW4pZm9yKHM9MDtzPGU7KytzKXtsZXQgZT1pW3NdXm87ZV49ZT4+MTtlXj1lPj4yO2VePWU+PjQ7bz0oMSZlKTw8NzthW3UrK109ZX1lbHNlIGlmKDg9PT1yKXtmb3Iocz0wO3M8bjsrK3MpYVt1KytdPWlbc107Zm9yKDtzPGU7KytzKXthW3VdPWFbdS1uXStpW3NdO3UrK319ZWxzZSBpZigxNj09PXIpe2NvbnN0IHQ9MipuO2ZvcihzPTA7czx0OysrcylhW3UrK109aVtzXTtmb3IoO3M8ZTtzKz0yKXtjb25zdCBlPSgoMjU1Jmlbc10pPDw4KSsoMjU1JmlbcysxXSkrKCgyNTUmYVt1LXRdKTw8OCkrKDI1NSZhW3UtdCsxXSk7YVt1KytdPWU+PjgmMjU1O2FbdSsrXT0yNTUmZX19ZWxzZXtjb25zdCBlPW5ldyBVaW50OEFycmF5KG4rMSksdT0oMTw8ciktMTtsZXQgZD0wLGY9dDtjb25zdCBnPXRoaXMuY29sdW1ucztmb3Iocz0wO3M8ZzsrK3MpZm9yKGxldCB0PTA7dDxuOysrdCl7aWYobDxyKXtvPW88PDh8MjU1JmlbZCsrXTtsKz04fWVbdF09ZVt0XSsobz4+bC1yKSZ1O2wtPXI7Yz1jPDxyfGVbdF07aCs9cjtpZihoPj04KXthW2YrK109Yz4+aC04JjI1NTtoLT04fX1oPjAmJihhW2YrK109KGM8PDgtaCkrKG8mKDE8PDgtaCktMSkpfXRoaXMuYnVmZmVyTGVuZ3RoKz1lfXJlYWRCbG9ja1BuZygpe2NvbnN0IGU9dGhpcy5yb3dCeXRlcyx0PXRoaXMucGl4Qnl0ZXMsYT10aGlzLnN0ci5nZXRCeXRlKCkscj10aGlzLnN0ci5nZXRCeXRlcyhlKTt0aGlzLmVvZj0hci5sZW5ndGg7aWYodGhpcy5lb2YpcmV0dXJuO2NvbnN0IG49dGhpcy5idWZmZXJMZW5ndGgscz10aGlzLmVuc3VyZUJ1ZmZlcihuK2UpO2xldCBvPXMuc3ViYXJyYXkobi1lLG4pOzA9PT1vLmxlbmd0aCYmKG89bmV3IFVpbnQ4QXJyYXkoZSkpO2xldCBjLGwsaCx1PW47c3dpdGNoKGEpe2Nhc2UgMDpmb3IoYz0wO2M8ZTsrK2Mpc1t1KytdPXJbY107YnJlYWs7Y2FzZSAxOmZvcihjPTA7Yzx0OysrYylzW3UrK109cltjXTtmb3IoO2M8ZTsrK2Mpe3NbdV09c1t1LXRdK3JbY10mMjU1O3UrK31icmVhaztjYXNlIDI6Zm9yKGM9MDtjPGU7KytjKXNbdSsrXT1vW2NdK3JbY10mMjU1O2JyZWFrO2Nhc2UgMzpmb3IoYz0wO2M8dDsrK2Mpc1t1KytdPShvW2NdPj4xKStyW2NdO2Zvcig7YzxlOysrYyl7c1t1XT0ob1tjXStzW3UtdF0+PjEpK3JbY10mMjU1O3UrK31icmVhaztjYXNlIDQ6Zm9yKGM9MDtjPHQ7KytjKXtsPW9bY107aD1yW2NdO3NbdSsrXT1sK2h9Zm9yKDtjPGU7KytjKXtsPW9bY107Y29uc3QgZT1vW2MtdF0sYT1zW3UtdF0sbj1hK2wtZTtsZXQgaT1uLWE7aTwwJiYoaT0taSk7bGV0IGQ9bi1sO2Q8MCYmKGQ9LWQpO2xldCBmPW4tZTtmPDAmJihmPS1mKTtoPXJbY107c1t1KytdPWk8PWQmJmk8PWY/YStoOmQ8PWY/bCtoOmUraH1icmVhaztkZWZhdWx0OnRocm93IG5ldyBpLkZvcm1hdEVycm9yKGBVbnN1cHBvcnRlZCBwcmVkaWN0b3I6ICR7YX1gKX10aGlzLmJ1ZmZlckxlbmd0aCs9ZX19dC5QcmVkaWN0b3JTdHJlYW09UHJlZGljdG9yU3RyZWFtfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuUnVuTGVuZ3RoU3RyZWFtPXZvaWQgMDt2YXIgcj1hKDE3KTtjbGFzcyBSdW5MZW5ndGhTdHJlYW0gZXh0ZW5kcyByLkRlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKHQpO3RoaXMuc3RyPWU7dGhpcy5kaWN0PWUuZGljdH1yZWFkQmxvY2soKXtjb25zdCBlPXRoaXMuc3RyLmdldEJ5dGVzKDIpO2lmKCFlfHxlLmxlbmd0aDwyfHwxMjg9PT1lWzBdKXt0aGlzLmVvZj0hMDtyZXR1cm59bGV0IHQsYT10aGlzLmJ1ZmZlckxlbmd0aCxyPWVbMF07aWYocjwxMjgpe3Q9dGhpcy5lbnN1cmVCdWZmZXIoYStyKzEpO3RbYSsrXT1lWzFdO2lmKHI+MCl7Y29uc3QgZT10aGlzLnN0ci5nZXRCeXRlcyhyKTt0LnNldChlLGEpO2ErPXJ9fWVsc2V7cj0yNTctcjtjb25zdCBuPWVbMV07dD10aGlzLmVuc3VyZUJ1ZmZlcihhK3IrMSk7Zm9yKGxldCBlPTA7ZTxyO2UrKyl0W2ErK109bn10aGlzLmJ1ZmZlckxlbmd0aD1hfX10LlJ1bkxlbmd0aFN0cmVhbT1SdW5MZW5ndGhTdHJlYW19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Gb250PXQuRXJyb3JGb250PXZvaWQgMDt2YXIgcj1hKDIpLG49YSgzMyksaT1hKDM2KSxzPWEoMzgpLG89YSgzNyksYz1hKDM1KSxsPWEoMzkpLGg9YSg0MCksdT1hKDQxKSxkPWEoNDIpLGY9YSg0MyksZz1hKDQ0KSxwPWEoMTQpLG09YSg0NSksYj1hKDQpLHk9YSg4KSx3PWEoNDYpO2NvbnN0IFM9W1s1NzM0NCw2Mzc0M10sWzEwNDg1NzYsMTExNDEwOV1dLHg9MWUzLGs9WyJhc2NlbnQiLCJiYm94IiwiYmxhY2siLCJib2xkIiwiY2hhclByb2NPcGVyYXRvckxpc3QiLCJjb21wb3NpdGUiLCJjc3NGb250SW5mbyIsImRhdGEiLCJkZWZhdWx0Vk1ldHJpY3MiLCJkZWZhdWx0V2lkdGgiLCJkZXNjZW50IiwiZmFsbGJhY2tOYW1lIiwiZm9udE1hdHJpeCIsImZvbnRUeXBlIiwiaXNUeXBlM0ZvbnQiLCJpdGFsaWMiLCJsb2FkZWROYW1lIiwibWltZXR5cGUiLCJtaXNzaW5nRmlsZSIsIm5hbWUiLCJyZW1lYXN1cmUiLCJzdWJ0eXBlIiwidHlwZSIsInZlcnRpY2FsIl0sQz1bImNNYXAiLCJkZWZhdWx0RW5jb2RpbmciLCJkaWZmZXJlbmNlcyIsImlzTW9ub3NwYWNlIiwiaXNTZXJpZkZvbnQiLCJpc1N5bWJvbGljRm9udCIsInNlYWNNYXAiLCJ0b0ZvbnRDaGFyIiwidG9Vbmljb2RlIiwidm1ldHJpY3MiLCJ3aWR0aHMiXTtmdW5jdGlvbiBhZGp1c3RXaWR0aHMoZSl7aWYoIWUuZm9udE1hdHJpeClyZXR1cm47aWYoZS5mb250TWF0cml4WzBdPT09ci5GT05UX0lERU5USVRZX01BVFJJWFswXSlyZXR1cm47Y29uc3QgdD0uMDAxL2UuZm9udE1hdHJpeFswXSxhPWUud2lkdGhzO2Zvcihjb25zdCBlIGluIGEpYVtlXSo9dDtlLmRlZmF1bHRXaWR0aCo9dH1mdW5jdGlvbiBhbWVuZEZhbGxiYWNrVG9Vbmljb2RlKGUpe2lmKCFlLmZhbGxiYWNrVG9Vbmljb2RlKXJldHVybjtpZihlLnRvVW5pY29kZSBpbnN0YW5jZW9mIGguSWRlbnRpdHlUb1VuaWNvZGVNYXApcmV0dXJuO2NvbnN0IHQ9W107Zm9yKGNvbnN0IGEgaW4gZS5mYWxsYmFja1RvVW5pY29kZSllLnRvVW5pY29kZS5oYXMoYSl8fCh0W2FdPWUuZmFsbGJhY2tUb1VuaWNvZGVbYV0pO3QubGVuZ3RoPjAmJmUudG9Vbmljb2RlLmFtZW5kKHQpfWNsYXNzIEdseXBoe2NvbnN0cnVjdG9yKGUsdCxhLHIsbixpLG8sYyxsKXt0aGlzLm9yaWdpbmFsQ2hhckNvZGU9ZTt0aGlzLmZvbnRDaGFyPXQ7dGhpcy51bmljb2RlPWE7dGhpcy5hY2NlbnQ9cjt0aGlzLndpZHRoPW47dGhpcy52bWV0cmljPWk7dGhpcy5vcGVyYXRvckxpc3RJZD1vO3RoaXMuaXNTcGFjZT1jO3RoaXMuaXNJbkZvbnQ9bDtjb25zdCBoPSgwLHMuZ2V0Q2hhclVuaWNvZGVDYXRlZ29yeSkoYSk7dGhpcy5pc1doaXRlc3BhY2U9aC5pc1doaXRlc3BhY2U7dGhpcy5pc1plcm9XaWR0aERpYWNyaXRpYz1oLmlzWmVyb1dpZHRoRGlhY3JpdGljO3RoaXMuaXNJbnZpc2libGVGb3JtYXRNYXJrPWguaXNJbnZpc2libGVGb3JtYXRNYXJrfX1mdW5jdGlvbiBpbnQxNihlLHQpe3JldHVybihlPDw4KSt0fWZ1bmN0aW9uIHdyaXRlU2lnbmVkSW50MTYoZSx0LGEpe2VbdCsxXT1hO2VbdF09YT4+Pjh9ZnVuY3Rpb24gc2lnbmVkSW50MTYoZSx0KXtjb25zdCBhPShlPDw4KSt0O3JldHVybiAzMjc2OCZhP2EtNjU1MzY6YX1mdW5jdGlvbiBzdHJpbmcxNihlKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShlPj44JjI1NSwyNTUmZSl9ZnVuY3Rpb24gc2FmZVN0cmluZzE2KGUpe2U+MzI3Njc/ZT0zMjc2NzplPC0zMjc2OCYmKGU9LTMyNzY4KTtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShlPj44JjI1NSwyNTUmZSl9ZnVuY3Rpb24gaXNUcnVlVHlwZUNvbGxlY3Rpb25GaWxlKGUpe2NvbnN0IHQ9ZS5wZWVrQnl0ZXMoNCk7cmV0dXJuInR0Y2YiPT09KDAsci5ieXRlc1RvU3RyaW5nKSh0KX1mdW5jdGlvbiBnZXRGb250RmlsZVR5cGUoZSx7dHlwZTp0LHN1YnR5cGU6YSxjb21wb3NpdGU6bn0pe2xldCBpLHM7aWYoZnVuY3Rpb24gaXNUcnVlVHlwZUZpbGUoZSl7Y29uc3QgdD1lLnBlZWtCeXRlcyg0KTtyZXR1cm4gNjU1MzY9PT0oMCxiLnJlYWRVaW50MzIpKHQsMCl8fCJ0cnVlIj09PSgwLHIuYnl0ZXNUb1N0cmluZykodCl9KGUpfHxpc1RydWVUeXBlQ29sbGVjdGlvbkZpbGUoZSkpaT1uPyJDSURGb250VHlwZTIiOiJUcnVlVHlwZSI7ZWxzZSBpZihmdW5jdGlvbiBpc09wZW5UeXBlRmlsZShlKXtjb25zdCB0PWUucGVla0J5dGVzKDQpO3JldHVybiJPVFRPIj09PSgwLHIuYnl0ZXNUb1N0cmluZykodCl9KGUpKWk9bj8iQ0lERm9udFR5cGUyIjoiT3BlblR5cGUiO2Vsc2UgaWYoZnVuY3Rpb24gaXNUeXBlMUZpbGUoZSl7Y29uc3QgdD1lLnBlZWtCeXRlcygyKTtyZXR1cm4gMzc9PT10WzBdJiYzMz09PXRbMV18fDEyOD09PXRbMF0mJjE9PT10WzFdfShlKSlpPW4/IkNJREZvbnRUeXBlMCI6Ik1NVHlwZTEiPT09dD8iTU1UeXBlMSI6IlR5cGUxIjtlbHNlIGlmKGZ1bmN0aW9uIGlzQ0ZGRmlsZShlKXtjb25zdCB0PWUucGVla0J5dGVzKDQpO3JldHVybiB0WzBdPj0xJiZ0WzNdPj0xJiZ0WzNdPD00fShlKSlpZihuKXtpPSJDSURGb250VHlwZTAiO3M9IkNJREZvbnRUeXBlMEMifWVsc2V7aT0iTU1UeXBlMSI9PT10PyJNTVR5cGUxIjoiVHlwZTEiO3M9IlR5cGUxQyJ9ZWxzZXsoMCxyLndhcm4pKCJnZXRGb250RmlsZVR5cGU6IFVuYWJsZSB0byBkZXRlY3QgY29ycmVjdCBmb250IGZpbGUgVHlwZS9TdWJ0eXBlLiIpO2k9dDtzPWF9cmV0dXJuW2ksc119ZnVuY3Rpb24gYXBwbHlTdGFuZGFyZEZvbnRHbHlwaE1hcChlLHQpe2Zvcihjb25zdCBhIGluIHQpZVsrYV09dFthXX1mdW5jdGlvbiBidWlsZFRvRm9udENoYXIoZSx0LGEpe2NvbnN0IHI9W107bGV0IG47Zm9yKGxldCBhPTAsaT1lLmxlbmd0aDthPGk7YSsrKXtuPSgwLHMuZ2V0VW5pY29kZUZvckdseXBoKShlW2FdLHQpOy0xIT09biYmKHJbYV09bil9Zm9yKGNvbnN0IGUgaW4gYSl7bj0oMCxzLmdldFVuaWNvZGVGb3JHbHlwaCkoYVtlXSx0KTstMSE9PW4mJihyWytlXT1uKX1yZXR1cm4gcn1mdW5jdGlvbiBjb252ZXJ0Q2lkU3RyaW5nKGUsdCxhPSExKXtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gdC5jaGFyQ29kZUF0KDApO2Nhc2UgMjpyZXR1cm4gdC5jaGFyQ29kZUF0KDApPDw4fHQuY2hhckNvZGVBdCgxKX1jb25zdCBuPWBVbnN1cHBvcnRlZCBDSUQgc3RyaW5nIChjaGFyQ29kZSAke2V9KTogIiR7dH0iLmA7aWYoYSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihuKTsoMCxyLndhcm4pKG4pO3JldHVybiB0fWZ1bmN0aW9uIGFkanVzdE1hcHBpbmcoZSx0LGEsbil7Y29uc3QgaT1PYmplY3QuY3JlYXRlKG51bGwpLHM9bmV3IE1hcCxvPVtdLGM9bmV3IFNldDtsZXQgbD0wO2NvbnN0IGg9U1tsXVswXTtsZXQgdT1oLGQ9U1tsXVsxXTtmb3IobGV0IGYgaW4gZSl7Znw9MDtsZXQgZz1lW2ZdO2lmKCF0KGcpKWNvbnRpbnVlO2lmKHU+ZCl7bCsrO2lmKGw+PVMubGVuZ3RoKXsoMCxyLndhcm4pKCJSYW4gb3V0IG9mIHNwYWNlIGluIGZvbnQgcHJpdmF0ZSB1c2UgYXJlYS4iKTticmVha311PVNbbF1bMF07ZD1TW2xdWzFdfWNvbnN0IHA9dSsrOzA9PT1nJiYoZz1hKTtsZXQgbT1uLmdldChmKTsic3RyaW5nIj09dHlwZW9mIG0mJihtPW0uY29kZVBvaW50QXQoMCkpO2lmKG0mJm08aCYmIWMuaGFzKGcpKXtzLnNldChtLGcpO2MuYWRkKGcpfWlbcF09ZztvW2ZdPXB9cmV0dXJue3RvRm9udENoYXI6byxjaGFyQ29kZVRvR2x5cGhJZDppLHRvVW5pY29kZUV4dHJhTWFwOnMsbmV4dEF2YWlsYWJsZUZvbnRDaGFyQ29kZTp1fX1mdW5jdGlvbiBjcmVhdGVDbWFwVGFibGUoZSx0LGEpe2NvbnN0IG49ZnVuY3Rpb24gZ2V0UmFuZ2VzKGUsdCxhKXtjb25zdCByPVtdO2Zvcihjb25zdCB0IGluIGUpZVt0XT49YXx8ci5wdXNoKHtmb250Q2hhckNvZGU6MHx0LGdseXBoSWQ6ZVt0XX0pO2lmKHQpZm9yKGNvbnN0W2Usbl1vZiB0KW4+PWF8fHIucHVzaCh7Zm9udENoYXJDb2RlOmUsZ2x5cGhJZDpufSk7MD09PXIubGVuZ3RoJiZyLnB1c2goe2ZvbnRDaGFyQ29kZTowLGdseXBoSWQ6MH0pO3Iuc29ydCgoZnVuY3Rpb24gZm9udEdldFJhbmdlc1NvcnQoZSx0KXtyZXR1cm4gZS5mb250Q2hhckNvZGUtdC5mb250Q2hhckNvZGV9KSk7Y29uc3Qgbj1bXSxpPXIubGVuZ3RoO2ZvcihsZXQgZT0wO2U8aTspe2NvbnN0IHQ9cltlXS5mb250Q2hhckNvZGUsYT1bcltlXS5nbHlwaElkXTsrK2U7bGV0IHM9dDtmb3IoO2U8aSYmcysxPT09cltlXS5mb250Q2hhckNvZGU7KXthLnB1c2gocltlXS5nbHlwaElkKTsrK3M7KytlO2lmKDY1NTM1PT09cylicmVha31uLnB1c2goW3QscyxhXSl9cmV0dXJuIG59KGUsdCxhKSxpPW4uYXQoLTEpWzFdPjY1NTM1PzI6MTtsZXQgcyxvLGMsbCxoPSJcMFwwIitzdHJpbmcxNihpKSsiXDADXDABIisoMCxyLnN0cmluZzMyKSg0KzgqaSk7Zm9yKHM9bi5sZW5ndGgtMTtzPj0wJiYhKG5bc11bMF08PTY1NTM1KTstLXMpO2NvbnN0IHU9cysxO25bc11bMF08NjU1MzUmJjY1NTM1PT09bltzXVsxXSYmKG5bc11bMV09NjU1MzQpO2NvbnN0IGQ9bltzXVsxXTw2NTUzNT8xOjAsZj11K2QsZz1tLk9wZW5UeXBlRmlsZUJ1aWxkZXIuZ2V0U2VhcmNoUGFyYW1zKGYsMik7bGV0IHAsYix5LHcsUz0iIix4PSIiLGs9IiIsQz0iIix2PSIiLEY9MDtmb3Iocz0wLG89dTtzPG87cysrKXtwPW5bc107Yj1wWzBdO3k9cFsxXTtTKz1zdHJpbmcxNihiKTt4Kz1zdHJpbmcxNih5KTt3PXBbMl07bGV0IGU9ITA7Zm9yKGM9MSxsPXcubGVuZ3RoO2M8bDsrK2MpaWYod1tjXSE9PXdbYy0xXSsxKXtlPSExO2JyZWFrfWlmKGUpe2srPXN0cmluZzE2KHdbMF0tYiY2NTUzNSk7Qys9c3RyaW5nMTYoMCl9ZWxzZXtjb25zdCBlPTIqKGYtcykrMipGO0YrPXktYisxO2srPXN0cmluZzE2KDApO0MrPXN0cmluZzE2KGUpO2ZvcihjPTAsbD13Lmxlbmd0aDtjPGw7KytjKXYrPXN0cmluZzE2KHdbY10pfX1pZihkPjApe3grPSLDv8O/IjtTKz0iw7/DvyI7ays9IlwwASI7Qys9IlwwXDAifWNvbnN0IE89IlwwXDAiK3N0cmluZzE2KDIqZikrc3RyaW5nMTYoZy5yYW5nZSkrc3RyaW5nMTYoZy5lbnRyeSkrc3RyaW5nMTYoZy5yYW5nZVNoaWZ0KSt4KyJcMFwwIitTK2srQyt2O2xldCBUPSIiLE09IiI7aWYoaT4xKXtoKz0iXDADXDBcbiIrKDAsci5zdHJpbmczMikoNCs4KmkrNCtPLmxlbmd0aCk7VD0iIjtmb3Iocz0wLG89bi5sZW5ndGg7czxvO3MrKyl7cD1uW3NdO2I9cFswXTt3PXBbMl07bGV0IGU9d1swXTtmb3IoYz0xLGw9dy5sZW5ndGg7YzxsOysrYylpZih3W2NdIT09d1tjLTFdKzEpe3k9cFswXStjLTE7VCs9KDAsci5zdHJpbmczMikoYikrKDAsci5zdHJpbmczMikoeSkrKDAsci5zdHJpbmczMikoZSk7Yj15KzE7ZT13W2NdfVQrPSgwLHIuc3RyaW5nMzIpKGIpKygwLHIuc3RyaW5nMzIpKHBbMV0pKygwLHIuc3RyaW5nMzIpKGUpfU09IlwwXGZcMFwwIisoMCxyLnN0cmluZzMyKShULmxlbmd0aCsxNikrIlwwXDBcMFwwIisoMCxyLnN0cmluZzMyKShULmxlbmd0aC8xMil9cmV0dXJuIGgrIlwwBCIrc3RyaW5nMTYoTy5sZW5ndGgrNCkrTytNK1R9ZnVuY3Rpb24gY3JlYXRlT1MyVGFibGUoZSx0LGEpe2E9YXx8e3VuaXRzUGVyRW06MCx5TWF4OjAseU1pbjowLGFzY2VudDowLGRlc2NlbnQ6MH07bGV0IG49MCxpPTAsbz0wLGM9MCxsPW51bGwsaD0wO2lmKHQpe2ZvcihsZXQgZSBpbiB0KXtlfD0wOyhsPmV8fCFsKSYmKGw9ZSk7aDxlJiYoaD1lKTtjb25zdCB0PSgwLHMuZ2V0VW5pY29kZVJhbmdlRm9yKShlKTtpZih0PDMyKW58PTE8PHQ7ZWxzZSBpZih0PDY0KWl8PTE8PHQtMzI7ZWxzZSBpZih0PDk2KW98PTE8PHQtNjQ7ZWxzZXtpZighKHQ8MTIzKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiVW5pY29kZSByYW5nZXMgQml0cyA+IDEyMyBhcmUgcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzYWdlIik7Y3w9MTw8dC05Nn19aD42NTUzNSYmKGg9NjU1MzUpfWVsc2V7bD0wO2g9MjU1fWNvbnN0IHU9ZS5iYm94fHxbMCwwLDAsMF0sZD1hLnVuaXRzUGVyRW18fDEvKGUuZm9udE1hdHJpeHx8ci5GT05UX0lERU5USVRZX01BVFJJWClbMF0sZj1lLmFzY2VudFNjYWxlZD8xOmQveCxnPWEuYXNjZW50fHxNYXRoLnJvdW5kKGYqKGUuYXNjZW50fHx1WzNdKSk7bGV0IHA9YS5kZXNjZW50fHxNYXRoLnJvdW5kKGYqKGUuZGVzY2VudHx8dVsxXSkpO3A+MCYmZS5kZXNjZW50PjAmJnVbMV08MCYmKHA9LXApO2NvbnN0IG09YS55TWF4fHxnLGI9LWEueU1pbnx8LXA7cmV0dXJuIlwwAwIkAcO0XDAFXDBcMALCigLCu1wwXDBcMMKMAsKKAsK7XDBcMAHDn1x4MDAxAQJcMFwwXDBcMAYiK1N0cmluZy5mcm9tQ2hhckNvZGUoZS5maXhlZFBpdGNoPzk6MCkrIlwwXDBcMFwwXDBcMCIrKDAsci5zdHJpbmczMikobikrKDAsci5zdHJpbmczMikoaSkrKDAsci5zdHJpbmczMikobykrKDAsci5zdHJpbmczMikoYykrIioyMSoiK3N0cmluZzE2KGUuaXRhbGljQW5nbGU/MTowKStzdHJpbmcxNihsfHxlLmZpcnN0Q2hhcikrc3RyaW5nMTYoaHx8ZS5sYXN0Q2hhcikrc3RyaW5nMTYoZykrc3RyaW5nMTYocCkrIlwwZCIrc3RyaW5nMTYobSkrc3RyaW5nMTYoYikrIlwwXDBcMFwwXDBcMFwwXDAiK3N0cmluZzE2KGUueEhlaWdodCkrc3RyaW5nMTYoZS5jYXBIZWlnaHQpK3N0cmluZzE2KDApK3N0cmluZzE2KGx8fGUuZmlyc3RDaGFyKSsiXDADIn1mdW5jdGlvbiBjcmVhdGVQb3N0VGFibGUoZSl7Y29uc3QgdD1NYXRoLmZsb29yKDY1NTM2KmUuaXRhbGljQW5nbGUpO3JldHVybiJcMANcMFwwIisoMCxyLnN0cmluZzMyKSh0KSsiXDBcMFwwXDAiKygwLHIuc3RyaW5nMzIpKGUuZml4ZWRQaXRjaD8xOjApKyJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCJ9ZnVuY3Rpb24gY3JlYXRlUG9zdHNjcmlwdE5hbWUoZSl7cmV0dXJuIGUucmVwbGFjZSgvW15ceDIxLVx4N0VdfFtbXF0oKXt9PD4vJV0vZywiIikuc2xpY2UoMCw2Myl9ZnVuY3Rpb24gY3JlYXRlTmFtZVRhYmxlKGUsdCl7dHx8KHQ9W1tdLFtdXSk7Y29uc3QgYT1bdFswXVswXXx8Ik9yaWdpbmFsIGxpY2VuY2UiLHRbMF1bMV18fGUsdFswXVsyXXx8IlVua25vd24iLHRbMF1bM118fCJ1bmlxdWVJRCIsdFswXVs0XXx8ZSx0WzBdWzVdfHwiVmVyc2lvbiAwLjExIix0WzBdWzZdfHxjcmVhdGVQb3N0c2NyaXB0TmFtZShlKSx0WzBdWzddfHwiVW5rbm93biIsdFswXVs4XXx8IlVua25vd24iLHRbMF1bOV18fCJVbmtub3duIl0scj1bXTtsZXQgbixpLHMsbyxjO2ZvcihuPTAsaT1hLmxlbmd0aDtuPGk7bisrKXtjPXRbMV1bbl18fGFbbl07Y29uc3QgZT1bXTtmb3Iocz0wLG89Yy5sZW5ndGg7czxvO3MrKyllLnB1c2goc3RyaW5nMTYoYy5jaGFyQ29kZUF0KHMpKSk7ci5wdXNoKGUuam9pbigiIikpfWNvbnN0IGw9W2Escl0saD1bIlwwASIsIlwwAyJdLHU9WyJcMFwwIiwiXDABIl0sZD1bIlwwXDAiLCIEXHQiXSxmPWEubGVuZ3RoKmgubGVuZ3RoO2xldCBnPSJcMFwwIitzdHJpbmcxNihmKStzdHJpbmcxNigxMipmKzYpLHA9MDtmb3Iobj0wLGk9aC5sZW5ndGg7bjxpO24rKyl7Y29uc3QgZT1sW25dO2ZvcihzPTAsbz1lLmxlbmd0aDtzPG87cysrKXtjPWVbc107Zys9aFtuXSt1W25dK2Rbbl0rc3RyaW5nMTYocykrc3RyaW5nMTYoYy5sZW5ndGgpK3N0cmluZzE2KHApO3ArPWMubGVuZ3RofX1nKz1hLmpvaW4oIiIpK3Iuam9pbigiIik7cmV0dXJuIGd9dC5Gb250PWNsYXNzIEZvbnR7Y29uc3RydWN0b3IoZSx0LGEpe3RoaXMubmFtZT1lO3RoaXMucHNOYW1lPW51bGw7dGhpcy5taW1ldHlwZT1udWxsO3RoaXMuZGlzYWJsZUZvbnRGYWNlPSExO3RoaXMubG9hZGVkTmFtZT1hLmxvYWRlZE5hbWU7dGhpcy5pc1R5cGUzRm9udD1hLmlzVHlwZTNGb250O3RoaXMubWlzc2luZ0ZpbGU9ITE7dGhpcy5jc3NGb250SW5mbz1hLmNzc0ZvbnRJbmZvO3RoaXMuX2NoYXJzQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLl9nbHlwaENhY2hlPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IG49ISEoYS5mbGFncyZpLkZvbnRGbGFncy5TZXJpZik7aWYoIW4mJiFhLmlzU2ltdWxhdGVkRmxhZ3Mpe2NvbnN0IHQ9ZS5yZXBsYWNlKC9bLF9dL2csIi0iKS5zcGxpdCgiLSIpWzBdLGE9KDAsbC5nZXRTZXJpZkZvbnRzKSgpO2Zvcihjb25zdCBlIG9mIHQuc3BsaXQoIisiKSlpZihhW2VdKXtuPSEwO2JyZWFrfX10aGlzLmlzU2VyaWZGb250PW47dGhpcy5pc1N5bWJvbGljRm9udD0hIShhLmZsYWdzJmkuRm9udEZsYWdzLlN5bWJvbGljKTt0aGlzLmlzTW9ub3NwYWNlPSEhKGEuZmxhZ3MmaS5Gb250RmxhZ3MuRml4ZWRQaXRjaCk7bGV0IHM9YS50eXBlLG89YS5zdWJ0eXBlO3RoaXMudHlwZT1zO3RoaXMuc3VidHlwZT1vO2xldCBjLGg9InNhbnMtc2VyaWYiO3RoaXMuaXNNb25vc3BhY2U/aD0ibW9ub3NwYWNlIjp0aGlzLmlzU2VyaWZGb250JiYoaD0ic2VyaWYiKTt0aGlzLmZhbGxiYWNrTmFtZT1oO3RoaXMuZGlmZmVyZW5jZXM9YS5kaWZmZXJlbmNlczt0aGlzLndpZHRocz1hLndpZHRoczt0aGlzLmRlZmF1bHRXaWR0aD1hLmRlZmF1bHRXaWR0aDt0aGlzLmNvbXBvc2l0ZT1hLmNvbXBvc2l0ZTt0aGlzLmNNYXA9YS5jTWFwO3RoaXMuY2FwSGVpZ2h0PWEuY2FwSGVpZ2h0L3g7dGhpcy5hc2NlbnQ9YS5hc2NlbnQveDt0aGlzLmRlc2NlbnQ9YS5kZXNjZW50L3g7dGhpcy5saW5lSGVpZ2h0PXRoaXMuYXNjZW50LXRoaXMuZGVzY2VudDt0aGlzLmZvbnRNYXRyaXg9YS5mb250TWF0cml4O3RoaXMuYmJveD1hLmJib3g7dGhpcy5kZWZhdWx0RW5jb2Rpbmc9YS5kZWZhdWx0RW5jb2Rpbmc7dGhpcy50b1VuaWNvZGU9YS50b1VuaWNvZGU7dGhpcy50b0ZvbnRDaGFyPVtdO2lmKCJUeXBlMyIhPT1hLnR5cGUpe3RoaXMuY2lkRW5jb2Rpbmc9YS5jaWRFbmNvZGluZ3x8IiI7dGhpcy52ZXJ0aWNhbD0hIWEudmVydGljYWw7aWYodGhpcy52ZXJ0aWNhbCl7dGhpcy52bWV0cmljcz1hLnZtZXRyaWNzO3RoaXMuZGVmYXVsdFZNZXRyaWNzPWEuZGVmYXVsdFZNZXRyaWNzfWlmKHQmJiF0LmlzRW1wdHkpe1tzLG9dPWdldEZvbnRGaWxlVHlwZSh0LGEpO3M9PT10aGlzLnR5cGUmJm89PT10aGlzLnN1YnR5cGV8fCgwLHIuaW5mbykoYEluY29uc2lzdGVudCBmb250IGZpbGUgVHlwZS9TdWJUeXBlLCBleHBlY3RlZDogJHt0aGlzLnR5cGV9LyR7dGhpcy5zdWJ0eXBlfSBidXQgZm91bmQ6ICR7c30vJHtvfS5gKTt0cnl7c3dpdGNoKHMpe2Nhc2UiTU1UeXBlMSI6KDAsci5pbmZvKSgiTU1UeXBlMSBmb250ICgiK2UrIiksIGZhbGxpbmcgYmFjayB0byBUeXBlMS4iKTtjYXNlIlR5cGUxIjpjYXNlIkNJREZvbnRUeXBlMCI6dGhpcy5taW1ldHlwZT0iZm9udC9vcGVudHlwZSI7Y29uc3Qgbj0iVHlwZTFDIj09PW98fCJDSURGb250VHlwZTBDIj09PW8/bmV3IHUuQ0ZGRm9udCh0LGEpOm5ldyB3LlR5cGUxRm9udChlLHQsYSk7YWRqdXN0V2lkdGhzKGEpO2M9dGhpcy5jb252ZXJ0KGUsbixhKTticmVhaztjYXNlIk9wZW5UeXBlIjpjYXNlIlRydWVUeXBlIjpjYXNlIkNJREZvbnRUeXBlMiI6dGhpcy5taW1ldHlwZT0iZm9udC9vcGVudHlwZSI7Yz10aGlzLmNoZWNrQW5kUmVwYWlyKGUsdCxhKTtpZih0aGlzLmlzT3BlblR5cGUpe2FkanVzdFdpZHRocyhhKTtzPSJPcGVuVHlwZSJ9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgRm9udCAke3N9IGlzIG5vdCBzdXBwb3J0ZWRgKX19Y2F0Y2goZSl7KDAsci53YXJuKShlKTt0aGlzLmZhbGxiYWNrVG9TeXN0ZW1Gb250KGEpO3JldHVybn1hbWVuZEZhbGxiYWNrVG9Vbmljb2RlKGEpO3RoaXMuZGF0YT1jO3RoaXMuZm9udFR5cGU9KDAsaS5nZXRGb250VHlwZSkocyxvLGEuaXNTdGFuZGFyZEZvbnQpO3RoaXMuZm9udE1hdHJpeD1hLmZvbnRNYXRyaXg7dGhpcy53aWR0aHM9YS53aWR0aHM7dGhpcy5kZWZhdWx0V2lkdGg9YS5kZWZhdWx0V2lkdGg7dGhpcy50b1VuaWNvZGU9YS50b1VuaWNvZGU7dGhpcy5zZWFjTWFwPWEuc2VhY01hcH1lbHNle3QmJigwLHIud2FybikoJ0ZvbnQgZmlsZSBpcyBlbXB0eSBpbiAiJytlKyciICgnK3RoaXMubG9hZGVkTmFtZSsiKSIpO3RoaXMuZmFsbGJhY2tUb1N5c3RlbUZvbnQoYSl9fWVsc2V7Zm9yKGxldCBlPTA7ZTwyNTY7ZSsrKXRoaXMudG9Gb250Q2hhcltlXT10aGlzLmRpZmZlcmVuY2VzW2VdfHxhLmRlZmF1bHRFbmNvZGluZ1tlXTt0aGlzLmZvbnRUeXBlPXIuRm9udFR5cGUuVFlQRTN9fWdldCByZW5kZXJlcigpe2NvbnN0IGU9ZC5Gb250UmVuZGVyZXJGYWN0b3J5LmNyZWF0ZSh0aGlzLGkuU0VBQ19BTkFMWVNJU19FTkFCTEVEKTtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywicmVuZGVyZXIiLGUpfWV4cG9ydERhdGEoZT0hMSl7Y29uc3QgdD1lP1suLi5rLC4uLkNdOmssYT1PYmplY3QuY3JlYXRlKG51bGwpO2xldCByLG47Zm9yKHIgb2YgdCl7bj10aGlzW3JdO3ZvaWQgMCE9PW4mJihhW3JdPW4pfXJldHVybiBhfWZhbGxiYWNrVG9TeXN0ZW1Gb250KGUpe3RoaXMubWlzc2luZ0ZpbGU9ITA7Y29uc3QgdD10aGlzLm5hbWUsYT10aGlzLnR5cGUsbj10aGlzLnN1YnR5cGU7bGV0IHU9KDAsaS5ub3JtYWxpemVGb250TmFtZSkodCk7Y29uc3QgZD0oMCxsLmdldFN0ZEZvbnRNYXApKCksZz0oMCxsLmdldE5vblN0ZEZvbnRNYXApKCkscD0hIWRbdV0sbT0hKCFnW3VdfHwhZFtnW3VdXSk7dT1kW3VdfHxnW3VdfHx1O2NvbnN0IGI9KDAsZi5nZXRGb250QmFzaWNNZXRyaWNzKSgpW3VdO2lmKGIpe2lzTmFOKHRoaXMuYXNjZW50KSYmKHRoaXMuYXNjZW50PWIuYXNjZW50L3gpO2lzTmFOKHRoaXMuZGVzY2VudCkmJih0aGlzLmRlc2NlbnQ9Yi5kZXNjZW50L3gpO2lzTmFOKHRoaXMuY2FwSGVpZ2h0KSYmKHRoaXMuY2FwSGVpZ2h0PWIuY2FwSGVpZ2h0L3gpfXRoaXMuYm9sZD0vYm9sZC9naS50ZXN0KHUpO3RoaXMuaXRhbGljPS9vYmxpcXVlfGl0YWxpYy9naS50ZXN0KHUpO3RoaXMuYmxhY2s9L0JsYWNrL2cudGVzdCh0KTtjb25zdCB5PS9OYXJyb3cvZy50ZXN0KHQpO3RoaXMucmVtZWFzdXJlPSghcHx8eSkmJk9iamVjdC5rZXlzKHRoaXMud2lkdGhzKS5sZW5ndGg+MDtpZigocHx8bSkmJiJDSURGb250VHlwZTIiPT09YSYmdGhpcy5jaWRFbmNvZGluZy5zdGFydHNXaXRoKCJJZGVudGl0eS0iKSl7Y29uc3QgYT1lLmNpZFRvR2lkTWFwLHI9W107YXBwbHlTdGFuZGFyZEZvbnRHbHlwaE1hcChyLCgwLGwuZ2V0R2x5cGhNYXBGb3JTdGFuZGFyZEZvbnRzKSgpKTsvQXJpYWwtP0JsYWNrL2kudGVzdCh0KT9hcHBseVN0YW5kYXJkRm9udEdseXBoTWFwKHIsKDAsbC5nZXRTdXBwbGVtZW50YWxHbHlwaE1hcEZvckFyaWFsQmxhY2spKCkpOi9DYWxpYnJpL2kudGVzdCh0KSYmYXBwbHlTdGFuZGFyZEZvbnRHbHlwaE1hcChyLCgwLGwuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JDYWxpYnJpKSgpKTtpZihhKXtmb3IoY29uc3QgZSBpbiByKXtjb25zdCB0PXJbZV07dm9pZCAwIT09YVt0XSYmKHJbK2VdPWFbdF0pfWEubGVuZ3RoIT09dGhpcy50b1VuaWNvZGUubGVuZ3RoJiZlLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwJiZ0aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIGguSWRlbnRpdHlUb1VuaWNvZGVNYXAmJnRoaXMudG9Vbmljb2RlLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1yW2VdO3ZvaWQgMD09PWFbbl0mJihyWytlXT10KX0pKX10aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIGguSWRlbnRpdHlUb1VuaWNvZGVNYXB8fHRoaXMudG9Vbmljb2RlLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7clsrZV09dH0pKTt0aGlzLnRvRm9udENoYXI9cjt0aGlzLnRvVW5pY29kZT1uZXcgaC5Ub1VuaWNvZGVNYXAocil9ZWxzZSBpZigvU3ltYm9sL2kudGVzdCh1KSl0aGlzLnRvRm9udENoYXI9YnVpbGRUb0ZvbnRDaGFyKGMuU3ltYm9sU2V0RW5jb2RpbmcsKDAsby5nZXRHbHlwaHNVbmljb2RlKSgpLHRoaXMuZGlmZmVyZW5jZXMpO2Vsc2UgaWYoL0RpbmdiYXRzL2kudGVzdCh1KSl7L1dpbmdkaW5ncy9pLnRlc3QodCkmJigwLHIud2FybikoIk5vbi1lbWJlZGRlZCBXaW5nZGluZ3MgZm9udCwgZmFsbGluZyBiYWNrIHRvIFphcGZEaW5nYmF0cy4iKTt0aGlzLnRvRm9udENoYXI9YnVpbGRUb0ZvbnRDaGFyKGMuWmFwZkRpbmdiYXRzRW5jb2RpbmcsKDAsby5nZXREaW5nYmF0c0dseXBoc1VuaWNvZGUpKCksdGhpcy5kaWZmZXJlbmNlcyl9ZWxzZSBpZihwKXtjb25zdCBlPWJ1aWxkVG9Gb250Q2hhcih0aGlzLmRlZmF1bHRFbmNvZGluZywoMCxvLmdldEdseXBoc1VuaWNvZGUpKCksdGhpcy5kaWZmZXJlbmNlcyk7IkNJREZvbnRUeXBlMiIhPT1hfHx0aGlzLmNpZEVuY29kaW5nLnN0YXJ0c1dpdGgoIklkZW50aXR5LSIpfHx0aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIGguSWRlbnRpdHlUb1VuaWNvZGVNYXB8fHRoaXMudG9Vbmljb2RlLmZvckVhY2goKGZ1bmN0aW9uKHQsYSl7ZVsrdF09YX0pKTt0aGlzLnRvRm9udENoYXI9ZX1lbHNle2NvbnN0IGU9KDAsby5nZXRHbHlwaHNVbmljb2RlKSgpLGE9W107dGhpcy50b1VuaWNvZGUuZm9yRWFjaCgoKHQscik9PntpZighdGhpcy5jb21wb3NpdGUpe2NvbnN0IGE9dGhpcy5kaWZmZXJlbmNlc1t0XXx8dGhpcy5kZWZhdWx0RW5jb2RpbmdbdF0sbj0oMCxzLmdldFVuaWNvZGVGb3JHbHlwaCkoYSxlKTstMSE9PW4mJihyPW4pfWFbK3RdPXJ9KSk7dGhpcy5jb21wb3NpdGUmJnRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgaC5JZGVudGl0eVRvVW5pY29kZU1hcCYmL1ZlcmRhbmEvaS50ZXN0KHQpJiZhcHBseVN0YW5kYXJkRm9udEdseXBoTWFwKGEsKDAsbC5nZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHMpKCkpO3RoaXMudG9Gb250Q2hhcj1hfWFtZW5kRmFsbGJhY2tUb1VuaWNvZGUoZSk7dGhpcy5sb2FkZWROYW1lPXUuc3BsaXQoIi0iKVswXTt0aGlzLmZvbnRUeXBlPSgwLGkuZ2V0Rm9udFR5cGUpKGEsbixlLmlzU3RhbmRhcmRGb250KX1jaGVja0FuZFJlcGFpcihlLHQsYSl7Y29uc3Qgcz1bIk9TLzIiLCJjbWFwIiwiaGVhZCIsImhoZWEiLCJobXR4IiwibWF4cCIsIm5hbWUiLCJwb3N0IiwibG9jYSIsImdseWYiLCJmcGdtIiwicHJlcCIsImN2dCAiLCJDRkYgIl07ZnVuY3Rpb24gcmVhZFRhYmxlcyhlLHQpe2NvbnN0IGE9T2JqZWN0LmNyZWF0ZShudWxsKTthWyJPUy8yIl09bnVsbDthLmNtYXA9bnVsbDthLmhlYWQ9bnVsbDthLmhoZWE9bnVsbDthLmhtdHg9bnVsbDthLm1heHA9bnVsbDthLm5hbWU9bnVsbDthLnBvc3Q9bnVsbDtmb3IobGV0IHI9MDtyPHQ7cisrKXtjb25zdCB0PXJlYWRUYWJsZUVudHJ5KGUpO3MuaW5jbHVkZXModC50YWcpJiYoMCE9PXQubGVuZ3RoJiYoYVt0LnRhZ109dCkpfXJldHVybiBhfWZ1bmN0aW9uIHJlYWRUYWJsZUVudHJ5KGUpe2NvbnN0IHQ9ZS5nZXRTdHJpbmcoNCksYT1lLmdldEludDMyKCk+Pj4wLHI9ZS5nZXRJbnQzMigpPj4+MCxuPWUuZ2V0SW50MzIoKT4+PjAsaT1lLnBvcztlLnBvcz1lLnN0YXJ0fHwwO2Uuc2tpcChyKTtjb25zdCBzPWUuZ2V0Qnl0ZXMobik7ZS5wb3M9aTtpZigiaGVhZCI9PT10KXtzWzhdPXNbOV09c1sxMF09c1sxMV09MDtzWzE3XXw9MzJ9cmV0dXJue3RhZzp0LGNoZWNrc3VtOmEsbGVuZ3RoOm4sb2Zmc2V0OnIsZGF0YTpzfX1mdW5jdGlvbiByZWFkT3BlblR5cGVIZWFkZXIoZSl7cmV0dXJue3ZlcnNpb246ZS5nZXRTdHJpbmcoNCksbnVtVGFibGVzOmUuZ2V0VWludDE2KCksc2VhcmNoUmFuZ2U6ZS5nZXRVaW50MTYoKSxlbnRyeVNlbGVjdG9yOmUuZ2V0VWludDE2KCkscmFuZ2VTaGlmdDplLmdldFVpbnQxNigpfX1mdW5jdGlvbiBzYW5pdGl6ZUdseXBoKGUsdCxhLHIsbixpKXtjb25zdCBzPXtsZW5ndGg6MCxzaXplT2ZJbnN0cnVjdGlvbnM6MH07aWYoYS10PD0xMilyZXR1cm4gcztjb25zdCBvPWUuc3ViYXJyYXkodCxhKTtsZXQgYz1zaWduZWRJbnQxNihvWzBdLG9bMV0pO2lmKGM8MCl7Yz0tMTt3cml0ZVNpZ25lZEludDE2KG8sMCxjKTtyLnNldChvLG4pO3MubGVuZ3RoPW8ubGVuZ3RoO3JldHVybiBzfWxldCBsLGg9MTAsdT0wO2ZvcihsPTA7bDxjO2wrKyl7dT0ob1toXTw8OHxvW2grMV0pKzE7aCs9Mn1jb25zdCBkPWgsZj1vW2hdPDw4fG9baCsxXTtzLnNpemVPZkluc3RydWN0aW9ucz1mO2grPTIrZjtjb25zdCBnPWg7bGV0IHA9MDtmb3IobD0wO2w8dTtsKyspe2NvbnN0IGU9b1toKytdOzE5MiZlJiYob1toLTFdPTYzJmUpO2xldCB0PTI7MiZlP3Q9MToxNiZlJiYodD0wKTtsZXQgYT0yOzQmZT9hPTE6MzImZSYmKGE9MCk7Y29uc3Qgcj10K2E7cCs9cjtpZig4JmUpe2NvbnN0IGU9b1toKytdO2wrPWU7cCs9ZSpyfX1pZigwPT09cClyZXR1cm4gcztsZXQgbT1oK3A7aWYobT5vLmxlbmd0aClyZXR1cm4gcztpZighaSYmZj4wKXtyLnNldChvLnN1YmFycmF5KDAsZCksbik7ci5zZXQoWzAsMF0sbitkKTtyLnNldChvLnN1YmFycmF5KGcsbSksbitkKzIpO20tPWY7by5sZW5ndGgtbT4zJiYobT1tKzMmLTQpO3MubGVuZ3RoPW07cmV0dXJuIHN9aWYoby5sZW5ndGgtbT4zKXttPW0rMyYtNDtyLnNldChvLnN1YmFycmF5KDAsbSksbik7cy5sZW5ndGg9bTtyZXR1cm4gc31yLnNldChvLG4pO3MubGVuZ3RoPW8ubGVuZ3RoO3JldHVybiBzfWZ1bmN0aW9uIHJlYWROYW1lVGFibGUoZSl7Y29uc3QgYT0odC5zdGFydHx8MCkrZS5vZmZzZXQ7dC5wb3M9YTtjb25zdCByPVtbXSxbXV0sbj1lLmxlbmd0aCxpPWErbjtpZigwIT09dC5nZXRVaW50MTYoKXx8bjw2KXJldHVybiByO2NvbnN0IHM9dC5nZXRVaW50MTYoKSxvPXQuZ2V0VWludDE2KCksYz1bXTtsZXQgbCxoO2ZvcihsPTA7bDxzJiZ0LnBvcysxMjw9aTtsKyspe2NvbnN0IGU9e3BsYXRmb3JtOnQuZ2V0VWludDE2KCksZW5jb2Rpbmc6dC5nZXRVaW50MTYoKSxsYW5ndWFnZTp0LmdldFVpbnQxNigpLG5hbWU6dC5nZXRVaW50MTYoKSxsZW5ndGg6dC5nZXRVaW50MTYoKSxvZmZzZXQ6dC5nZXRVaW50MTYoKX07KDE9PT1lLnBsYXRmb3JtJiYwPT09ZS5lbmNvZGluZyYmMD09PWUubGFuZ3VhZ2V8fDM9PT1lLnBsYXRmb3JtJiYxPT09ZS5lbmNvZGluZyYmMTAzMz09PWUubGFuZ3VhZ2UpJiZjLnB1c2goZSl9Zm9yKGw9MCxoPWMubGVuZ3RoO2w8aDtsKyspe2NvbnN0IGU9Y1tsXTtpZihlLmxlbmd0aDw9MCljb250aW51ZTtjb25zdCBuPWErbytlLm9mZnNldDtpZihuK2UubGVuZ3RoPmkpY29udGludWU7dC5wb3M9bjtjb25zdCBzPWUubmFtZTtpZihlLmVuY29kaW5nKXtsZXQgYT0iIjtmb3IobGV0IHI9MCxuPWUubGVuZ3RoO3I8bjtyKz0yKWErPVN0cmluZy5mcm9tQ2hhckNvZGUodC5nZXRVaW50MTYoKSk7clsxXVtzXT1hfWVsc2UgclswXVtzXT10LmdldFN0cmluZyhlLmxlbmd0aCl9cmV0dXJuIHJ9Y29uc3QgbD1bMCwwLDAsMCwwLDAsMCwwLC0yLC0yLC0yLC0yLDAsMCwtMiwtNSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwwLDAsLTEsMCwtMSwtMSwtMSwtMSwxLC0xLC05OTksMCwxLDAsLTEsLTIsMCwtMSwtMiwtMSwtMSwwLC0xLC0xLDAsMCwtOTk5LC05OTksLTEsLTEsLTEsLTEsLTIsLTk5OSwtMiwtMiwtOTk5LDAsLTIsLTIsMCwwLC0yLDAsLTIsMCwwLDAsLTIsLTEsLTEsMSwxLDAsMCwtMSwtMSwtMSwtMSwtMSwtMSwtMSwwLDAsLTEsMCwtMSwtMSwwLC05OTksLTEsLTEsLTEsLTEsLTEsLTEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsLTIsLTk5OSwtOTk5LC05OTksLTk5OSwtOTk5LC0xLC0xLC0yLC0yLDAsMCwwLDAsLTEsLTEsLTk5OSwtMiwtMiwwLDAsLTEsLTIsLTIsMCwwLDAsLTEsLTEsLTEsLTJdO2Z1bmN0aW9uIHNhbml0aXplVFRQcm9ncmFtKGUsdCl7bGV0IGEsbixpLHMsbyxjPWUuZGF0YSxoPTAsdT0wLGQ9MDtjb25zdCBmPVtdLGc9W10scD1bXTtsZXQgbT10LnRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucyxiPSExLHk9MCx3PTA7Zm9yKGxldCBlPWMubGVuZ3RoO2g8ZTspe2NvbnN0IGU9Y1toKytdO2lmKDY0PT09ZSl7bj1jW2grK107aWYoYnx8dyloKz1uO2Vsc2UgZm9yKGE9MDthPG47YSsrKWYucHVzaChjW2grK10pfWVsc2UgaWYoNjU9PT1lKXtuPWNbaCsrXTtpZihifHx3KWgrPTIqbjtlbHNlIGZvcihhPTA7YTxuO2ErKyl7aT1jW2grK107Zi5wdXNoKGk8PDh8Y1toKytdKX19ZWxzZSBpZigxNzY9PSgyNDgmZSkpe249ZS0xNzYrMTtpZihifHx3KWgrPW47ZWxzZSBmb3IoYT0wO2E8bjthKyspZi5wdXNoKGNbaCsrXSl9ZWxzZSBpZigxODQ9PSgyNDgmZSkpe249ZS0xODQrMTtpZihifHx3KWgrPTIqbjtlbHNlIGZvcihhPTA7YTxuO2ErKyl7aT1jW2grK107Zi5wdXNoKGk8PDh8Y1toKytdKX19ZWxzZSBpZig0MyE9PWV8fG0paWYoNDQhPT1lfHxtKXtpZig0NT09PWUpaWYoYil7Yj0hMTt1PWh9ZWxzZXtvPWcucG9wKCk7aWYoIW8peygwLHIud2FybikoIlRUOiBFTkRGIGJhZCBzdGFjayIpO3QuaGludHNWYWxpZD0hMTtyZXR1cm59cz1wLnBvcCgpO2M9by5kYXRhO2g9by5pO3QuZnVuY3Rpb25zU3RhY2tEZWx0YXNbc109Zi5sZW5ndGgtby5zdGFja1RvcH1lbHNlIGlmKDEzNz09PWUpe2lmKGJ8fHcpeygwLHIud2FybikoIlRUOiBuZXN0ZWQgSURFRnMgbm90IGFsbG93ZWQiKTttPSEwfWI9ITA7ZD1ofWVsc2UgaWYoODg9PT1lKSsreTtlbHNlIGlmKDI3PT09ZSl3PXk7ZWxzZSBpZig4OT09PWUpe3c9PT15JiYodz0wKTstLXl9ZWxzZSBpZigyOD09PWUmJiFiJiYhdyl7Y29uc3QgZT1mLmF0KC0xKTtlPjAmJihoKz1lLTEpfX1lbHNle2lmKGJ8fHcpeygwLHIud2FybikoIlRUOiBuZXN0ZWQgRkRFRnMgbm90IGFsbG93ZWQiKTttPSEwfWI9ITA7ZD1oO3M9Zi5wb3AoKTt0LmZ1bmN0aW9uc0RlZmluZWRbc109e2RhdGE6YyxpOmh9fWVsc2UgaWYoIWImJiF3KXtzPWYuYXQoLTEpO2lmKGlzTmFOKHMpKSgwLHIuaW5mbykoIlRUOiBDQUxMIGVtcHR5IHN0YWNrIChvciBpbnZhbGlkIGVudHJ5KS4iKTtlbHNle3QuZnVuY3Rpb25zVXNlZFtzXT0hMDtpZihzIGluIHQuZnVuY3Rpb25zU3RhY2tEZWx0YXMpe2NvbnN0IGU9Zi5sZW5ndGgrdC5mdW5jdGlvbnNTdGFja0RlbHRhc1tzXTtpZihlPDApeygwLHIud2FybikoIlRUOiBDQUxMIGludmFsaWQgZnVuY3Rpb25zIHN0YWNrIGRlbHRhLiIpO3QuaGludHNWYWxpZD0hMTtyZXR1cm59Zi5sZW5ndGg9ZX1lbHNlIGlmKHMgaW4gdC5mdW5jdGlvbnNEZWZpbmVkJiYhcC5pbmNsdWRlcyhzKSl7Zy5wdXNoKHtkYXRhOmMsaTpoLHN0YWNrVG9wOmYubGVuZ3RoLTF9KTtwLnB1c2gocyk7bz10LmZ1bmN0aW9uc0RlZmluZWRbc107aWYoIW8peygwLHIud2FybikoIlRUOiBDQUxMIG5vbi1leGlzdGVudCBmdW5jdGlvbiIpO3QuaGludHNWYWxpZD0hMTtyZXR1cm59Yz1vLmRhdGE7aD1vLml9fX1pZighYiYmIXcpe2xldCB0PTA7ZTw9MTQyP3Q9bFtlXTplPj0xOTImJmU8PTIyMz90PS0xOmU+PTIyNCYmKHQ9LTIpO2lmKGU+PTExMyYmZTw9MTE3KXtuPWYucG9wKCk7aXNOYU4obil8fCh0PTIqLW4pfWZvcig7dDwwJiZmLmxlbmd0aD4wOyl7Zi5wb3AoKTt0Kyt9Zm9yKDt0PjA7KXtmLnB1c2goTmFOKTt0LS19fX10LnRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucz1tO2NvbnN0IFM9W2NdO2g+Yy5sZW5ndGgmJlMucHVzaChuZXcgVWludDhBcnJheShoLWMubGVuZ3RoKSk7aWYoZD51KXsoMCxyLndhcm4pKCJUVDogY29tcGxlbWVudGluZyBhIG1pc3NpbmcgZnVuY3Rpb24gdGFpbCIpO1MucHVzaChuZXcgVWludDhBcnJheShbMzQsNDVdKSl9IWZ1bmN0aW9uIGZvbGRUVFRhYmxlKGUsdCl7aWYodC5sZW5ndGg+MSl7bGV0IGEscixuPTA7Zm9yKGE9MCxyPXQubGVuZ3RoO2E8cjthKyspbis9dFthXS5sZW5ndGg7bj1uKzMmLTQ7Y29uc3QgaT1uZXcgVWludDhBcnJheShuKTtsZXQgcz0wO2ZvcihhPTAscj10Lmxlbmd0aDthPHI7YSsrKXtpLnNldCh0W2FdLHMpO3MrPXRbYV0ubGVuZ3RofWUuZGF0YT1pO2UubGVuZ3RoPW59fShlLFMpfWxldCBkLGYsYix3O2lmKGlzVHJ1ZVR5cGVDb2xsZWN0aW9uRmlsZSh0PW5ldyB5LlN0cmVhbShuZXcgVWludDhBcnJheSh0LmdldEJ5dGVzKCkpKSkpe2NvbnN0IGU9ZnVuY3Rpb24gcmVhZFRydWVUeXBlQ29sbGVjdGlvbkRhdGEoZSx0KXtjb25zdHtudW1Gb250czphLG9mZnNldFRhYmxlOm59PWZ1bmN0aW9uIHJlYWRUcnVlVHlwZUNvbGxlY3Rpb25IZWFkZXIoZSl7Y29uc3QgdD1lLmdldFN0cmluZyg0KTsoMCxyLmFzc2VydCkoInR0Y2YiPT09dCwiTXVzdCBiZSBhIFRydWVUeXBlIENvbGxlY3Rpb24gZm9udC4iKTtjb25zdCBhPWUuZ2V0VWludDE2KCksbj1lLmdldFVpbnQxNigpLGk9ZS5nZXRJbnQzMigpPj4+MCxzPVtdO2ZvcihsZXQgdD0wO3Q8aTt0Kyspcy5wdXNoKGUuZ2V0SW50MzIoKT4+PjApO2NvbnN0IG89e3R0Y1RhZzp0LG1ham9yVmVyc2lvbjphLG1pbm9yVmVyc2lvbjpuLG51bUZvbnRzOmksb2Zmc2V0VGFibGU6c307c3dpdGNoKGEpe2Nhc2UgMTpyZXR1cm4gbztjYXNlIDI6by5kc2lnVGFnPWUuZ2V0SW50MzIoKT4+PjA7by5kc2lnTGVuZ3RoPWUuZ2V0SW50MzIoKT4+PjA7by5kc2lnT2Zmc2V0PWUuZ2V0SW50MzIoKT4+PjA7cmV0dXJuIG99dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYEludmFsaWQgVHJ1ZVR5cGUgQ29sbGVjdGlvbiBtYWpvclZlcnNpb246ICR7YX0uYCl9KGUpLGk9dC5zcGxpdCgiKyIpO2xldCBzO2ZvcihsZXQgbz0wO288YTtvKyspe2UucG9zPShlLnN0YXJ0fHwwKStuW29dO2NvbnN0IGE9cmVhZE9wZW5UeXBlSGVhZGVyKGUpLGM9cmVhZFRhYmxlcyhlLGEubnVtVGFibGVzKTtpZighYy5uYW1lKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCdUcnVlVHlwZSBDb2xsZWN0aW9uIGZvbnQgbXVzdCBjb250YWluIGEgIm5hbWUiIHRhYmxlLicpO2NvbnN0IGw9cmVhZE5hbWVUYWJsZShjLm5hbWUpO2ZvcihsZXQgZT0wLHI9bC5sZW5ndGg7ZTxyO2UrKylmb3IobGV0IHI9MCxuPWxbZV0ubGVuZ3RoO3I8bjtyKyspe2NvbnN0IG49bFtlXVtyXSYmbFtlXVtyXS5yZXBsYWNlKC9ccy9nLCIiKTtpZihuKXtpZihuPT09dClyZXR1cm57aGVhZGVyOmEsdGFibGVzOmN9O2lmKCEoaS5sZW5ndGg8MikpZm9yKGNvbnN0IGUgb2YgaSluPT09ZSYmKHM9e25hbWU6ZSxoZWFkZXI6YSx0YWJsZXM6Y30pfX19aWYocyl7KDAsci53YXJuKShgVHJ1ZVR5cGUgQ29sbGVjdGlvbiBkb2VzIG5vdCBjb250YWluICIke3R9IiBmb250LCBmYWxsaW5nIGJhY2sgdG8gIiR7cy5uYW1lfSIgZm9udCBpbnN0ZWFkLmApO3JldHVybntoZWFkZXI6cy5oZWFkZXIsdGFibGVzOnMudGFibGVzfX10aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgVHJ1ZVR5cGUgQ29sbGVjdGlvbiBkb2VzIG5vdCBjb250YWluICIke3R9IiBmb250LmApfSh0LHRoaXMubmFtZSk7ZD1lLmhlYWRlcjtmPWUudGFibGVzfWVsc2V7ZD1yZWFkT3BlblR5cGVIZWFkZXIodCk7Zj1yZWFkVGFibGVzKHQsZC5udW1UYWJsZXMpfWNvbnN0IFM9IWZbIkNGRiAiXTtpZihTKXtpZighZi5sb2NhKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCdSZXF1aXJlZCAibG9jYSIgdGFibGUgaXMgbm90IGZvdW5kJyk7aWYoIWYuZ2x5Zil7KDAsci53YXJuKSgnUmVxdWlyZWQgImdseWYiIHRhYmxlIGlzIG5vdCBmb3VuZCAtLSB0cnlpbmcgdG8gcmVjb3Zlci4nKTtmLmdseWY9e3RhZzoiZ2x5ZiIsZGF0YTpuZXcgVWludDhBcnJheSgwKX19dGhpcy5pc09wZW5UeXBlPSExfWVsc2V7Y29uc3QgdD1hLmNvbXBvc2l0ZSYmKChhLmNpZFRvR2lkTWFwfHxbXSkubGVuZ3RoPjB8fCEoYS5jTWFwIGluc3RhbmNlb2YgcC5JZGVudGl0eUNNYXApKTtpZigiT1RUTyI9PT1kLnZlcnNpb24mJiF0fHwhZi5oZWFkfHwhZi5oaGVhfHwhZi5tYXhwfHwhZi5wb3N0KXt3PW5ldyB5LlN0cmVhbShmWyJDRkYgIl0uZGF0YSk7Yj1uZXcgdS5DRkZGb250KHcsYSk7YWRqdXN0V2lkdGhzKGEpO3JldHVybiB0aGlzLmNvbnZlcnQoZSxiLGEpfWRlbGV0ZSBmLmdseWY7ZGVsZXRlIGYubG9jYTtkZWxldGUgZi5mcGdtO2RlbGV0ZSBmLnByZXA7ZGVsZXRlIGZbImN2dCAiXTt0aGlzLmlzT3BlblR5cGU9ITB9aWYoIWYubWF4cCl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcignUmVxdWlyZWQgIm1heHAiIHRhYmxlIGlzIG5vdCBmb3VuZCcpO3QucG9zPSh0LnN0YXJ0fHwwKStmLm1heHAub2Zmc2V0O2NvbnN0IHg9dC5nZXRJbnQzMigpLGs9dC5nZXRVaW50MTYoKTtpZihhLnNjYWxlRmFjdG9ycyYmYS5zY2FsZUZhY3RvcnMubGVuZ3RoPT09ayYmUyl7Y29uc3R7c2NhbGVGYWN0b3JzOmV9PWEsdD1pbnQxNihmLmhlYWQuZGF0YVs1MF0sZi5oZWFkLmRhdGFbNTFdKSxyPW5ldyBnLkdseWZUYWJsZSh7Z2x5ZlRhYmxlOmYuZ2x5Zi5kYXRhLGlzR2x5cGhMb2NhdGlvbnNMb25nOnQsbG9jYVRhYmxlOmYubG9jYS5kYXRhLG51bUdseXBoczprfSk7ci5zY2FsZShlKTtjb25zdHtnbHlmOm4sbG9jYTppLGlzTG9jYXRpb25Mb25nOnN9PXIud3JpdGUoKTtmLmdseWYuZGF0YT1uO2YubG9jYS5kYXRhPWk7aWYocyE9PSEhdCl7Zi5oZWFkLmRhdGFbNTBdPTA7Zi5oZWFkLmRhdGFbNTFdPXM/MTowfWNvbnN0IG89Zi5obXR4LmRhdGE7Zm9yKGxldCB0PTA7dDxrO3QrKyl7Y29uc3QgYT00KnQscj1NYXRoLnJvdW5kKGVbdF0qaW50MTYob1thXSxvW2ErMV0pKTtvW2FdPXI+PjgmMjU1O29bYSsxXT0yNTUmcjt3cml0ZVNpZ25lZEludDE2KG8sYSsyLE1hdGgucm91bmQoZVt0XSpzaWduZWRJbnQxNihvW2ErMl0sb1thKzNdKSkpfX1sZXQgQz1rKzEsdj0hMDtpZihDPjY1NTM1KXt2PSExO0M9azsoMCxyLndhcm4pKCJOb3QgZW5vdWdoIHNwYWNlIGluIGdseWZzIHRvIGR1cGxpY2F0ZSBmaXJzdCBnbHlwaC4iKX1sZXQgRj0wLE89MDtpZih4Pj02NTUzNiYmZi5tYXhwLmxlbmd0aD49MjIpe3QucG9zKz04O2lmKHQuZ2V0VWludDE2KCk+Mil7Zi5tYXhwLmRhdGFbMTRdPTA7Zi5tYXhwLmRhdGFbMTVdPTJ9dC5wb3MrPTQ7Rj10LmdldFVpbnQxNigpO3QucG9zKz00O089dC5nZXRVaW50MTYoKX1mLm1heHAuZGF0YVs0XT1DPj44O2YubWF4cC5kYXRhWzVdPTI1NSZDO2NvbnN0IFQ9ZnVuY3Rpb24gc2FuaXRpemVUVFByb2dyYW1zKGUsdCxhLG4pe2NvbnN0IGk9e2Z1bmN0aW9uc0RlZmluZWQ6W10sZnVuY3Rpb25zVXNlZDpbXSxmdW5jdGlvbnNTdGFja0RlbHRhczpbXSx0b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnM6ITEsaGludHNWYWxpZDohMH07ZSYmc2FuaXRpemVUVFByb2dyYW0oZSxpKTt0JiZzYW5pdGl6ZVRUUHJvZ3JhbSh0LGkpO2UmJmZ1bmN0aW9uIGNoZWNrSW52YWxpZEZ1bmN0aW9ucyhlLHQpe2lmKCFlLnRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucylpZihlLmZ1bmN0aW9uc0RlZmluZWQubGVuZ3RoPnQpeygwLHIud2FybikoIlRUOiBtb3JlIGZ1bmN0aW9ucyBkZWZpbmVkIHRoYW4gZXhwZWN0ZWQiKTtlLmhpbnRzVmFsaWQ9ITF9ZWxzZSBmb3IobGV0IGE9MCxuPWUuZnVuY3Rpb25zVXNlZC5sZW5ndGg7YTxuO2ErKyl7aWYoYT50KXsoMCxyLndhcm4pKCJUVDogaW52YWxpZCBmdW5jdGlvbiBpZDogIithKTtlLmhpbnRzVmFsaWQ9ITE7cmV0dXJufWlmKGUuZnVuY3Rpb25zVXNlZFthXSYmIWUuZnVuY3Rpb25zRGVmaW5lZFthXSl7KDAsci53YXJuKSgiVFQ6IHVuZGVmaW5lZCBmdW5jdGlvbjogIithKTtlLmhpbnRzVmFsaWQ9ITE7cmV0dXJufX19KGksbik7aWYoYSYmMSZhLmxlbmd0aCl7Y29uc3QgZT1uZXcgVWludDhBcnJheShhLmxlbmd0aCsxKTtlLnNldChhLmRhdGEpO2EuZGF0YT1lfXJldHVybiBpLmhpbnRzVmFsaWR9KGYuZnBnbSxmLnByZXAsZlsiY3Z0ICJdLEYpO2lmKCFUKXtkZWxldGUgZi5mcGdtO2RlbGV0ZSBmLnByZXA7ZGVsZXRlIGZbImN2dCAiXX0hZnVuY3Rpb24gc2FuaXRpemVNZXRyaWNzKGUsdCxhLG4saSxzKXtpZighdCl7YSYmKGEuZGF0YT1udWxsKTtyZXR1cm59ZS5wb3M9KGUuc3RhcnR8fDApK3Qub2Zmc2V0O2UucG9zKz00O2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2NvbnN0IG89ZS5nZXRVaW50MTYoKTtlLnBvcys9ODtlLnBvcys9MjtsZXQgYz1lLmdldFVpbnQxNigpO2lmKDAhPT1vKXtpZighKDImaW50MTYobi5kYXRhWzQ0XSxuLmRhdGFbNDVdKSkpe3QuZGF0YVsyMl09MDt0LmRhdGFbMjNdPTB9fWlmKGM+aSl7KDAsci5pbmZvKShgVGhlIG51bU9mTWV0cmljcyAoJHtjfSkgc2hvdWxkIG5vdCBiZSBncmVhdGVyIHRoYW4gdGhlIG51bUdseXBocyAoJHtpfSkuYCk7Yz1pO3QuZGF0YVszNF09KDY1MjgwJmMpPj44O3QuZGF0YVszNV09MjU1JmN9Y29uc3QgbD1pLWMtKGEubGVuZ3RoLTQqYz4+MSk7aWYobD4wKXtjb25zdCBlPW5ldyBVaW50OEFycmF5KGEubGVuZ3RoKzIqbCk7ZS5zZXQoYS5kYXRhKTtpZihzKXtlW2EubGVuZ3RoXT1hLmRhdGFbMl07ZVthLmxlbmd0aCsxXT1hLmRhdGFbM119YS5kYXRhPWV9fSh0LGYuaGhlYSxmLmhtdHgsZi5oZWFkLEMsdik7aWYoIWYuaGVhZCl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcignUmVxdWlyZWQgImhlYWQiIHRhYmxlIGlzIG5vdCBmb3VuZCcpOyFmdW5jdGlvbiBzYW5pdGl6ZUhlYWQoZSx0LGEpe2NvbnN0IG49ZS5kYXRhLGk9ZnVuY3Rpb24gaW50MzIoZSx0LGEscil7cmV0dXJuKGU8PDI0KSsodDw8MTYpKyhhPDw4KStyfShuWzBdLG5bMV0sblsyXSxuWzNdKTtpZihpPj4xNiE9MSl7KDAsci5pbmZvKSgiQXR0ZW1wdGluZyB0byBmaXggaW52YWxpZCB2ZXJzaW9uIGluIGhlYWQgdGFibGU6ICIraSk7blswXT0wO25bMV09MTtuWzJdPTA7blszXT0wfWNvbnN0IHM9aW50MTYobls1MF0sbls1MV0pO2lmKHM8MHx8cz4xKXsoMCxyLmluZm8pKCJBdHRlbXB0aW5nIHRvIGZpeCBpbnZhbGlkIGluZGV4VG9Mb2NGb3JtYXQgaW4gaGVhZCB0YWJsZTogIitzKTtjb25zdCBlPXQrMTtpZihhPT09ZTw8MSl7bls1MF09MDtuWzUxXT0wfWVsc2V7aWYoYSE9PWU8PDIpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkNvdWxkIG5vdCBmaXggaW5kZXhUb0xvY0Zvcm1hdDogIitzKTtuWzUwXT0wO25bNTFdPTF9fX0oZi5oZWFkLGssUz9mLmxvY2EubGVuZ3RoOjApO2xldCBNPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoUyl7Y29uc3QgZT1pbnQxNihmLmhlYWQuZGF0YVs1MF0sZi5oZWFkLmRhdGFbNTFdKSx0PWZ1bmN0aW9uIHNhbml0aXplR2x5cGhMb2NhdGlvbnMoZSx0LGEscixuLGkscyl7bGV0IG8sYyxsO2lmKHIpe289NDtjPWZ1bmN0aW9uIGZvbnRJdGVtRGVjb2RlTG9uZyhlLHQpe3JldHVybiBlW3RdPDwyNHxlW3QrMV08PDE2fGVbdCsyXTw8OHxlW3QrM119O2w9ZnVuY3Rpb24gZm9udEl0ZW1FbmNvZGVMb25nKGUsdCxhKXtlW3RdPWE+Pj4yNCYyNTU7ZVt0KzFdPWE+PjE2JjI1NTtlW3QrMl09YT4+OCYyNTU7ZVt0KzNdPTI1NSZhfX1lbHNle289MjtjPWZ1bmN0aW9uIGZvbnRJdGVtRGVjb2RlKGUsdCl7cmV0dXJuIGVbdF08PDl8ZVt0KzFdPDwxfTtsPWZ1bmN0aW9uIGZvbnRJdGVtRW5jb2RlKGUsdCxhKXtlW3RdPWE+PjkmMjU1O2VbdCsxXT1hPj4xJjI1NX19Y29uc3QgaD1pP2ErMTphLHU9byooMStoKSxkPW5ldyBVaW50OEFycmF5KHUpO2Quc2V0KGUuZGF0YS5zdWJhcnJheSgwLHUpKTtlLmRhdGE9ZDtjb25zdCBmPXQuZGF0YSxnPWYubGVuZ3RoLHA9bmV3IFVpbnQ4QXJyYXkoZyk7bGV0IG0sYjtjb25zdCB5PVtdO2ZvcihtPTAsYj0wO208YSsxO20rKyxiKz1vKXtsZXQgZT1jKGQsYik7ZT5nJiYoZT1nKTt5LnB1c2goe2luZGV4Om0sb2Zmc2V0OmUsZW5kT2Zmc2V0OjB9KX15LnNvcnQoKChlLHQpPT5lLm9mZnNldC10Lm9mZnNldCkpO2ZvcihtPTA7bTxhO20rKyl5W21dLmVuZE9mZnNldD15W20rMV0ub2Zmc2V0O3kuc29ydCgoKGUsdCk9PmUuaW5kZXgtdC5pbmRleCkpO2ZvcihtPTA7bTxhO20rKyl7Y29uc3R7b2Zmc2V0OmUsZW5kT2Zmc2V0OnR9PXlbbV07aWYoMCE9PWV8fDAhPT10KWJyZWFrO2NvbnN0IGE9eVttKzFdLm9mZnNldDtpZigwIT09YSl7eVttXS5lbmRPZmZzZXQ9YTticmVha319Y29uc3Qgdz1PYmplY3QuY3JlYXRlKG51bGwpO2xldCBTPTA7bChkLDAsUyk7Zm9yKG09MCxiPW87bTxhO20rKyxiKz1vKXtjb25zdCBlPXNhbml0aXplR2x5cGgoZix5W21dLm9mZnNldCx5W21dLmVuZE9mZnNldCxwLFMsbiksdD1lLmxlbmd0aDswPT09dCYmKHdbbV09ITApO2Uuc2l6ZU9mSW5zdHJ1Y3Rpb25zPnMmJihzPWUuc2l6ZU9mSW5zdHJ1Y3Rpb25zKTtTKz10O2woZCxiLFMpfWlmKDA9PT1TKXtjb25zdCBlPW5ldyBVaW50OEFycmF5KFswLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNDksMF0pO2ZvcihtPTAsYj1vO208aDttKyssYis9bylsKGQsYixlLmxlbmd0aCk7dC5kYXRhPWV9ZWxzZSBpZihpKXtjb25zdCBhPWMoZCxvKTtpZihwLmxlbmd0aD5hK1MpdC5kYXRhPXAuc3ViYXJyYXkoMCxhK1MpO2Vsc2V7dC5kYXRhPW5ldyBVaW50OEFycmF5KGErUyk7dC5kYXRhLnNldChwLnN1YmFycmF5KDAsUykpfXQuZGF0YS5zZXQocC5zdWJhcnJheSgwLGEpLFMpO2woZS5kYXRhLGQubGVuZ3RoLW8sUythKX1lbHNlIHQuZGF0YT1wLnN1YmFycmF5KDAsUyk7cmV0dXJue21pc3NpbmdHbHlwaHM6dyxtYXhTaXplT2ZJbnN0cnVjdGlvbnM6c319KGYubG9jYSxmLmdseWYsayxlLFQsdixPKTtNPXQubWlzc2luZ0dseXBocztpZih4Pj02NTUzNiYmZi5tYXhwLmxlbmd0aD49MjIpe2YubWF4cC5kYXRhWzI2XT10Lm1heFNpemVPZkluc3RydWN0aW9ucz4+ODtmLm1heHAuZGF0YVsyN109MjU1JnQubWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zfX1pZighZi5oaGVhKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCdSZXF1aXJlZCAiaGhlYSIgdGFibGUgaXMgbm90IGZvdW5kJyk7aWYoMD09PWYuaGhlYS5kYXRhWzEwXSYmMD09PWYuaGhlYS5kYXRhWzExXSl7Zi5oaGVhLmRhdGFbMTBdPTI1NTtmLmhoZWEuZGF0YVsxMV09MjU1fWNvbnN0IEU9e3VuaXRzUGVyRW06aW50MTYoZi5oZWFkLmRhdGFbMThdLGYuaGVhZC5kYXRhWzE5XSkseU1heDppbnQxNihmLmhlYWQuZGF0YVs0Ml0sZi5oZWFkLmRhdGFbNDNdKSx5TWluOnNpZ25lZEludDE2KGYuaGVhZC5kYXRhWzM4XSxmLmhlYWQuZGF0YVszOV0pLGFzY2VudDpzaWduZWRJbnQxNihmLmhoZWEuZGF0YVs0XSxmLmhoZWEuZGF0YVs1XSksZGVzY2VudDpzaWduZWRJbnQxNihmLmhoZWEuZGF0YVs2XSxmLmhoZWEuZGF0YVs3XSksbGluZUdhcDpzaWduZWRJbnQxNihmLmhoZWEuZGF0YVs4XSxmLmhoZWEuZGF0YVs5XSl9O3RoaXMuYXNjZW50PUUuYXNjZW50L0UudW5pdHNQZXJFbTt0aGlzLmRlc2NlbnQ9RS5kZXNjZW50L0UudW5pdHNQZXJFbTt0aGlzLmxpbmVHYXA9RS5saW5lR2FwL0UudW5pdHNQZXJFbTtpZih0aGlzLmNzc0ZvbnRJbmZvJiZ0aGlzLmNzc0ZvbnRJbmZvLmxpbmVIZWlnaHQpe3RoaXMubGluZUhlaWdodD10aGlzLmNzc0ZvbnRJbmZvLm1ldHJpY3MubGluZUhlaWdodDt0aGlzLmxpbmVHYXA9dGhpcy5jc3NGb250SW5mby5tZXRyaWNzLmxpbmVHYXB9ZWxzZSB0aGlzLmxpbmVIZWlnaHQ9dGhpcy5hc2NlbnQtdGhpcy5kZXNjZW50K3RoaXMubGluZUdhcDtmLnBvc3QmJmZ1bmN0aW9uIHJlYWRQb3N0U2NyaXB0VGFibGUoZSxhLG4pe2NvbnN0IHM9KHQuc3RhcnR8fDApK2Uub2Zmc2V0O3QucG9zPXM7Y29uc3Qgbz1zK2UubGVuZ3RoLGM9dC5nZXRJbnQzMigpO3Quc2tpcCgyOCk7bGV0IGwsaCx1PSEwO3N3aXRjaChjKXtjYXNlIDY1NTM2Omw9aS5NYWNTdGFuZGFyZEdseXBoT3JkZXJpbmc7YnJlYWs7Y2FzZSAxMzEwNzI6Y29uc3QgZT10LmdldFVpbnQxNigpO2lmKGUhPT1uKXt1PSExO2JyZWFrfWNvbnN0IHM9W107Zm9yKGg9MDtoPGU7KytoKXtjb25zdCBlPXQuZ2V0VWludDE2KCk7aWYoZT49MzI3Njgpe3U9ITE7YnJlYWt9cy5wdXNoKGUpfWlmKCF1KWJyZWFrO2NvbnN0IGQ9W10sZj1bXTtmb3IoO3QucG9zPG87KXtjb25zdCBlPXQuZ2V0Qnl0ZSgpO2YubGVuZ3RoPWU7Zm9yKGg9MDtoPGU7KytoKWZbaF09U3RyaW5nLmZyb21DaGFyQ29kZSh0LmdldEJ5dGUoKSk7ZC5wdXNoKGYuam9pbigiIikpfWw9W107Zm9yKGg9MDtoPGU7KytoKXtjb25zdCBlPXNbaF07ZTwyNTg/bC5wdXNoKGkuTWFjU3RhbmRhcmRHbHlwaE9yZGVyaW5nW2VdKTpsLnB1c2goZFtlLTI1OF0pfWJyZWFrO2Nhc2UgMTk2NjA4OmJyZWFrO2RlZmF1bHQ6KDAsci53YXJuKSgiVW5rbm93bi91bnN1cHBvcnRlZCBwb3N0IHRhYmxlIHZlcnNpb24gIitjKTt1PSExO2EuZGVmYXVsdEVuY29kaW5nJiYobD1hLmRlZmF1bHRFbmNvZGluZyl9YS5nbHlwaE5hbWVzPWw7cmV0dXJuIHV9KGYucG9zdCxhLGspO2YucG9zdD17dGFnOiJwb3N0IixkYXRhOmNyZWF0ZVBvc3RUYWJsZShhKX07Y29uc3QgRD1bXTtmdW5jdGlvbiBoYXNHbHlwaChlKXtyZXR1cm4hTVtlXX1pZihhLmNvbXBvc2l0ZSl7Y29uc3QgZT1hLmNpZFRvR2lkTWFwfHxbXSx0PTA9PT1lLmxlbmd0aDthLmNNYXAuZm9yRWFjaCgoZnVuY3Rpb24oYSxuKXsic3RyaW5nIj09dHlwZW9mIG4mJihuPWNvbnZlcnRDaWRTdHJpbmcoYSxuLCEwKSk7aWYobj42NTUzNSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiTWF4IHNpemUgb2YgQ0lEIGlzIDY1LDUzNSIpO2xldCBpPS0xO3Q/aT1uOnZvaWQgMCE9PWVbbl0mJihpPWVbbl0pO2k+PTAmJmk8ayYmaGFzR2x5cGgoaSkmJihEW2FdPWkpfSkpfWVsc2V7Y29uc3QgZT1mdW5jdGlvbiByZWFkQ21hcFRhYmxlKGUsdCxhLG4pe2lmKCFlKXsoMCxyLndhcm4pKCJObyBjbWFwIHRhYmxlIGF2YWlsYWJsZS4iKTtyZXR1cm57cGxhdGZvcm1JZDotMSxlbmNvZGluZ0lkOi0xLG1hcHBpbmdzOltdLGhhc1Nob3J0Q21hcDohMX19bGV0IGkscz0odC5zdGFydHx8MCkrZS5vZmZzZXQ7dC5wb3M9czt0LnNraXAoMik7Y29uc3Qgbz10LmdldFVpbnQxNigpO2xldCBjLGw9ITE7Zm9yKGxldCBlPTA7ZTxvO2UrKyl7Y29uc3Qgcj10LmdldFVpbnQxNigpLGk9dC5nZXRVaW50MTYoKSxzPXQuZ2V0SW50MzIoKT4+PjA7bGV0IGg9ITE7aWYoIWN8fGMucGxhdGZvcm1JZCE9PXJ8fGMuZW5jb2RpbmdJZCE9PWkpe2lmKDAhPT1yfHwwIT09aSYmMSE9PWkmJjMhPT1pKWlmKDE9PT1yJiYwPT09aSloPSEwO2Vsc2UgaWYoMyE9PXJ8fDEhPT1pfHwhbiYmYyl7aWYoYSYmMz09PXImJjA9PT1pKXtoPSEwO2xldCBhPSEwO2lmKGU8by0xKXtjb25zdCBlPXQucGVla0J5dGVzKDIpO2ludDE2KGVbMF0sZVsxXSk8ciYmKGE9ITEpfWEmJihsPSEwKX19ZWxzZXtoPSEwO2F8fChsPSEwKX1lbHNlIGg9ITA7aCYmKGM9e3BsYXRmb3JtSWQ6cixlbmNvZGluZ0lkOmksb2Zmc2V0OnN9KTtpZihsKWJyZWFrfX1jJiYodC5wb3M9cytjLm9mZnNldCk7aWYoIWN8fC0xPT09dC5wZWVrQnl0ZSgpKXsoMCxyLndhcm4pKCJDb3VsZCBub3QgZmluZCBhIHByZWZlcnJlZCBjbWFwIHRhYmxlLiIpO3JldHVybntwbGF0Zm9ybUlkOi0xLGVuY29kaW5nSWQ6LTEsbWFwcGluZ3M6W10saGFzU2hvcnRDbWFwOiExfX1jb25zdCBoPXQuZ2V0VWludDE2KCk7bGV0IHU9ITE7Y29uc3QgZD1bXTtsZXQgZixnO2lmKDA9PT1oKXt0LnNraXAoNCk7Zm9yKGY9MDtmPDI1NjtmKyspe2NvbnN0IGU9dC5nZXRCeXRlKCk7ZSYmZC5wdXNoKHtjaGFyQ29kZTpmLGdseXBoSWQ6ZX0pfXU9ITB9ZWxzZSBpZigyPT09aCl7dC5za2lwKDQpO2NvbnN0IGU9W107bGV0IGE9MDtmb3IobGV0IHI9MDtyPDI1NjtyKyspe2NvbnN0IHI9dC5nZXRVaW50MTYoKT4+MztlLnB1c2gocik7YT1NYXRoLm1heChyLGEpfWNvbnN0IHI9W107Zm9yKGxldCBlPTA7ZTw9YTtlKyspci5wdXNoKHtmaXJzdENvZGU6dC5nZXRVaW50MTYoKSxlbnRyeUNvdW50OnQuZ2V0VWludDE2KCksaWREZWx0YTpzaWduZWRJbnQxNih0LmdldEJ5dGUoKSx0LmdldEJ5dGUoKSksaWRSYW5nZVBvczp0LnBvcyt0LmdldFVpbnQxNigpfSk7Zm9yKGxldCBhPTA7YTwyNTY7YSsrKWlmKDA9PT1lW2FdKXt0LnBvcz1yWzBdLmlkUmFuZ2VQb3MrMiphO2c9dC5nZXRVaW50MTYoKTtkLnB1c2goe2NoYXJDb2RlOmEsZ2x5cGhJZDpnfSl9ZWxzZXtjb25zdCBuPXJbZVthXV07Zm9yKGY9MDtmPG4uZW50cnlDb3VudDtmKyspe2NvbnN0IGU9KGE8PDgpK2Yrbi5maXJzdENvZGU7dC5wb3M9bi5pZFJhbmdlUG9zKzIqZjtnPXQuZ2V0VWludDE2KCk7MCE9PWcmJihnPShnK24uaWREZWx0YSklNjU1MzYpO2QucHVzaCh7Y2hhckNvZGU6ZSxnbHlwaElkOmd9KX19fWVsc2UgaWYoND09PWgpe3Quc2tpcCg0KTtjb25zdCBlPXQuZ2V0VWludDE2KCk+PjE7dC5za2lwKDYpO2NvbnN0IGE9W107bGV0IHI7Zm9yKHI9MDtyPGU7cisrKWEucHVzaCh7ZW5kOnQuZ2V0VWludDE2KCl9KTt0LnNraXAoMik7Zm9yKHI9MDtyPGU7cisrKWFbcl0uc3RhcnQ9dC5nZXRVaW50MTYoKTtmb3Iocj0wO3I8ZTtyKyspYVtyXS5kZWx0YT10LmdldFVpbnQxNigpO2xldCBuLG89MDtmb3Iocj0wO3I8ZTtyKyspe2k9YVtyXTtjb25zdCBzPXQuZ2V0VWludDE2KCk7aWYocyl7bj0ocz4+MSktKGUtcik7aS5vZmZzZXRJbmRleD1uO289TWF0aC5tYXgobyxuK2kuZW5kLWkuc3RhcnQrMSl9ZWxzZSBpLm9mZnNldEluZGV4PS0xfWNvbnN0IGM9W107Zm9yKGY9MDtmPG87ZisrKWMucHVzaCh0LmdldFVpbnQxNigpKTtmb3Iocj0wO3I8ZTtyKyspe2k9YVtyXTtzPWkuc3RhcnQ7Y29uc3QgZT1pLmVuZCx0PWkuZGVsdGE7bj1pLm9mZnNldEluZGV4O2ZvcihmPXM7Zjw9ZTtmKyspaWYoNjU1MzUhPT1mKXtnPW48MD9mOmNbbitmLXNdO2c9Zyt0JjY1NTM1O2QucHVzaCh7Y2hhckNvZGU6ZixnbHlwaElkOmd9KX19fWVsc2UgaWYoNj09PWgpe3Quc2tpcCg0KTtjb25zdCBlPXQuZ2V0VWludDE2KCksYT10LmdldFVpbnQxNigpO2ZvcihmPTA7ZjxhO2YrKyl7Zz10LmdldFVpbnQxNigpO2NvbnN0IGE9ZStmO2QucHVzaCh7Y2hhckNvZGU6YSxnbHlwaElkOmd9KX19ZWxzZXtpZigxMiE9PWgpeygwLHIud2FybikoImNtYXAgdGFibGUgaGFzIHVuc3VwcG9ydGVkIGZvcm1hdDogIitoKTtyZXR1cm57cGxhdGZvcm1JZDotMSxlbmNvZGluZ0lkOi0xLG1hcHBpbmdzOltdLGhhc1Nob3J0Q21hcDohMX19e3Quc2tpcCgxMCk7Y29uc3QgZT10LmdldEludDMyKCk+Pj4wO2ZvcihmPTA7ZjxlO2YrKyl7Y29uc3QgZT10LmdldEludDMyKCk+Pj4wLGE9dC5nZXRJbnQzMigpPj4+MDtsZXQgcj10LmdldEludDMyKCk+Pj4wO2ZvcihsZXQgdD1lO3Q8PWE7dCsrKWQucHVzaCh7Y2hhckNvZGU6dCxnbHlwaElkOnIrK30pfX19ZC5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNoYXJDb2RlLXQuY2hhckNvZGV9KSk7Zm9yKGxldCBlPTE7ZTxkLmxlbmd0aDtlKyspaWYoZFtlLTFdLmNoYXJDb2RlPT09ZFtlXS5jaGFyQ29kZSl7ZC5zcGxpY2UoZSwxKTtlLS19cmV0dXJue3BsYXRmb3JtSWQ6Yy5wbGF0Zm9ybUlkLGVuY29kaW5nSWQ6Yy5lbmNvZGluZ0lkLG1hcHBpbmdzOmQsaGFzU2hvcnRDbWFwOnV9fShmLmNtYXAsdCx0aGlzLmlzU3ltYm9saWNGb250LGEuaGFzRW5jb2RpbmcpLG49ZS5wbGF0Zm9ybUlkLHM9ZS5lbmNvZGluZ0lkLGw9ZS5tYXBwaW5ncztsZXQgdT1bXSxkPSExOyFhLmhhc0VuY29kaW5nfHwiTWFjUm9tYW5FbmNvZGluZyIhPT1hLmJhc2VFbmNvZGluZ05hbWUmJiJXaW5BbnNpRW5jb2RpbmciIT09YS5iYXNlRW5jb2RpbmdOYW1lfHwodT0oMCxjLmdldEVuY29kaW5nKShhLmJhc2VFbmNvZGluZ05hbWUpKTtpZihhLmhhc0VuY29kaW5nJiYhdGhpcy5pc1N5bWJvbGljRm9udCYmKDM9PT1uJiYxPT09c3x8MT09PW4mJjA9PT1zKSl7Y29uc3QgZT0oMCxvLmdldEdseXBoc1VuaWNvZGUpKCk7Zm9yKGxldCB0PTA7dDwyNTY7dCsrKXtsZXQgcjtyPXZvaWQgMCE9PXRoaXMuZGlmZmVyZW5jZXNbdF0/dGhpcy5kaWZmZXJlbmNlc1t0XTp1Lmxlbmd0aCYmIiIhPT11W3RdP3VbdF06Yy5TdGFuZGFyZEVuY29kaW5nW3RdO2lmKCFyKWNvbnRpbnVlO2NvbnN0IG89KDAsaS5yZWNvdmVyR2x5cGhOYW1lKShyLGUpO2xldCBkOzM9PT1uJiYxPT09cz9kPWVbb106MT09PW4mJjA9PT1zJiYoZD1jLk1hY1JvbWFuRW5jb2RpbmcuaW5kZXhPZihvKSk7aWYodm9pZCAwPT09ZCl7aWYoIWEuZ2x5cGhOYW1lcyYmYS5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcCYmISh0aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIGguSWRlbnRpdHlUb1VuaWNvZGVNYXApKXtjb25zdCBlPXRoaXMudG9Vbmljb2RlLmdldCh0KTtlJiYoZD1lLmNvZGVQb2ludEF0KDApKX1pZih2b2lkIDA9PT1kKWNvbnRpbnVlfWZvcihjb25zdCBlIG9mIGwpaWYoZS5jaGFyQ29kZT09PWQpe0RbdF09ZS5nbHlwaElkO2JyZWFrfX19ZWxzZSBpZigwPT09bil7Zm9yKGNvbnN0IGUgb2YgbClEW2UuY2hhckNvZGVdPWUuZ2x5cGhJZDtkPSEwfWVsc2UgZm9yKGNvbnN0IGUgb2YgbCl7bGV0IHQ9ZS5jaGFyQ29kZTszPT09biYmdD49NjE0NDAmJnQ8PTYxNjk1JiYodCY9MjU1KTtEW3RdPWUuZ2x5cGhJZH1pZihhLmdseXBoTmFtZXMmJih1Lmxlbmd0aHx8dGhpcy5kaWZmZXJlbmNlcy5sZW5ndGgpKWZvcihsZXQgZT0wO2U8MjU2OysrZSl7aWYoIWQmJnZvaWQgMCE9PURbZV0pY29udGludWU7Y29uc3QgdD10aGlzLmRpZmZlcmVuY2VzW2VdfHx1W2VdO2lmKCF0KWNvbnRpbnVlO2NvbnN0IHI9YS5nbHlwaE5hbWVzLmluZGV4T2YodCk7cj4wJiZoYXNHbHlwaChyKSYmKERbZV09cil9fTA9PT1ELmxlbmd0aCYmKERbMF09MCk7bGV0IE49Qy0xO3Z8fChOPTApO2lmKCFhLmNzc0ZvbnRJbmZvKXtjb25zdCBlPWFkanVzdE1hcHBpbmcoRCxoYXNHbHlwaCxOLHRoaXMudG9Vbmljb2RlKTt0aGlzLnRvRm9udENoYXI9ZS50b0ZvbnRDaGFyO2YuY21hcD17dGFnOiJjbWFwIixkYXRhOmNyZWF0ZUNtYXBUYWJsZShlLmNoYXJDb2RlVG9HbHlwaElkLGUudG9Vbmljb2RlRXh0cmFNYXAsQyl9O2ZbIk9TLzIiXSYmZnVuY3Rpb24gdmFsaWRhdGVPUzJUYWJsZShlLHQpe3QucG9zPSh0LnN0YXJ0fHwwKStlLm9mZnNldDtjb25zdCBhPXQuZ2V0VWludDE2KCk7dC5za2lwKDYwKTtjb25zdCByPXQuZ2V0VWludDE2KCk7aWYoYTw0JiY3NjgmcilyZXR1cm4hMTtpZih0LmdldFVpbnQxNigpPnQuZ2V0VWludDE2KCkpcmV0dXJuITE7dC5za2lwKDYpO2lmKDA9PT10LmdldFVpbnQxNigpKXJldHVybiExO2UuZGF0YVs4XT1lLmRhdGFbOV09MDtyZXR1cm4hMH0oZlsiT1MvMiJdLHQpfHwoZlsiT1MvMiJdPXt0YWc6Ik9TLzIiLGRhdGE6Y3JlYXRlT1MyVGFibGUoYSxlLmNoYXJDb2RlVG9HbHlwaElkLEUpfSl9aWYoIVMpdHJ5e3c9bmV3IHkuU3RyZWFtKGZbIkNGRiAiXS5kYXRhKTtiPW5ldyBuLkNGRlBhcnNlcih3LGEsaS5TRUFDX0FOQUxZU0lTX0VOQUJMRUQpLnBhcnNlKCk7Yi5kdXBsaWNhdGVGaXJzdEdseXBoKCk7Y29uc3QgZT1uZXcgbi5DRkZDb21waWxlcihiKTtmWyJDRkYgIl0uZGF0YT1lLmNvbXBpbGUoKX1jYXRjaChlKXsoMCxyLndhcm4pKCJGYWlsZWQgdG8gY29tcGlsZSBmb250ICIrYS5sb2FkZWROYW1lKX1pZihmLm5hbWUpe2NvbnN0IHQ9cmVhZE5hbWVUYWJsZShmLm5hbWUpO2YubmFtZS5kYXRhPWNyZWF0ZU5hbWVUYWJsZShlLHQpO3RoaXMucHNOYW1lPXRbMF1bNl18fG51bGx9ZWxzZSBmLm5hbWU9e3RhZzoibmFtZSIsZGF0YTpjcmVhdGVOYW1lVGFibGUodGhpcy5uYW1lKX07Y29uc3QgUj1uZXcgbS5PcGVuVHlwZUZpbGVCdWlsZGVyKGQudmVyc2lvbik7Zm9yKGNvbnN0IGUgaW4gZilSLmFkZFRhYmxlKGUsZltlXS5kYXRhKTtyZXR1cm4gUi50b0FycmF5KCl9Y29udmVydChlLHQsYSl7YS5maXhlZFBpdGNoPSExO2EuYnVpbHRJbkVuY29kaW5nJiZmdW5jdGlvbiBhZGp1c3RUb1VuaWNvZGUoZSx0KXtpZihlLmlzSW50ZXJuYWxGb250KXJldHVybjtpZihlLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwKXJldHVybjtpZih0PT09ZS5kZWZhdWx0RW5jb2RpbmcpcmV0dXJuO2lmKGUudG9Vbmljb2RlIGluc3RhbmNlb2YgaC5JZGVudGl0eVRvVW5pY29kZU1hcClyZXR1cm47Y29uc3QgYT1bXSxyPSgwLG8uZ2V0R2x5cGhzVW5pY29kZSkoKTtmb3IoY29uc3QgbiBpbiB0KXtpZihlLmhhc0VuY29kaW5nJiYoMD09PWUuZGlmZmVyZW5jZXMubGVuZ3RofHx2b2lkIDAhPT1lLmRpZmZlcmVuY2VzW25dKSljb250aW51ZTtjb25zdCBpPXRbbl0sbz0oMCxzLmdldFVuaWNvZGVGb3JHbHlwaCkoaSxyKTstMSE9PW8mJihhW25dPVN0cmluZy5mcm9tQ2hhckNvZGUobykpfWEubGVuZ3RoPjAmJmUudG9Vbmljb2RlLmFtZW5kKGEpfShhLGEuYnVpbHRJbkVuY29kaW5nKTtsZXQgbj0xO3QgaW5zdGFuY2VvZiB1LkNGRkZvbnQmJihuPXQubnVtR2x5cGhzLTEpO2NvbnN0IGw9dC5nZXRHbHlwaE1hcHBpbmcoYSk7bGV0IGQ9bnVsbCxmPWwsZz1udWxsO2lmKCFhLmNzc0ZvbnRJbmZvKXtkPWFkanVzdE1hcHBpbmcobCx0Lmhhc0dseXBoSWQuYmluZCh0KSxuLHRoaXMudG9Vbmljb2RlKTt0aGlzLnRvRm9udENoYXI9ZC50b0ZvbnRDaGFyO2Y9ZC5jaGFyQ29kZVRvR2x5cGhJZDtnPWQudG9Vbmljb2RlRXh0cmFNYXB9Y29uc3QgcD10Lm51bUdseXBocztmdW5jdGlvbiBnZXRDaGFyQ29kZXMoZSx0KXtsZXQgYT1udWxsO2Zvcihjb25zdCByIGluIGUpaWYodD09PWVbcl0pe2F8fChhPVtdKTthLnB1c2goMHxyKX1yZXR1cm4gYX1mdW5jdGlvbiBjcmVhdGVDaGFyQ29kZShlLHQpe2Zvcihjb25zdCBhIGluIGUpaWYodD09PWVbYV0pcmV0dXJuIDB8YTtkLmNoYXJDb2RlVG9HbHlwaElkW2QubmV4dEF2YWlsYWJsZUZvbnRDaGFyQ29kZV09dDtyZXR1cm4gZC5uZXh0QXZhaWxhYmxlRm9udENoYXJDb2RlKyt9Y29uc3QgYj10LnNlYWNzO2lmKGQmJmkuU0VBQ19BTkFMWVNJU19FTkFCTEVEJiZiJiZiLmxlbmd0aCl7Y29uc3QgZT1hLmZvbnRNYXRyaXh8fHIuRk9OVF9JREVOVElUWV9NQVRSSVgsbj10LmdldENoYXJzZXQoKSxpPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGxldCB0IGluIGIpe3R8PTA7Y29uc3QgYT1iW3RdLHI9Yy5TdGFuZGFyZEVuY29kaW5nW2FbMl1dLHM9Yy5TdGFuZGFyZEVuY29kaW5nW2FbM11dLG89bi5pbmRleE9mKHIpLGg9bi5pbmRleE9mKHMpO2lmKG88MHx8aDwwKWNvbnRpbnVlO2NvbnN0IHU9e3g6YVswXSplWzBdK2FbMV0qZVsyXStlWzRdLHk6YVswXSplWzFdK2FbMV0qZVszXStlWzVdfSxmPWdldENoYXJDb2RlcyhsLHQpO2lmKGYpZm9yKGNvbnN0IGUgb2YgZil7Y29uc3QgdD1kLmNoYXJDb2RlVG9HbHlwaElkLGE9Y3JlYXRlQ2hhckNvZGUodCxvKSxyPWNyZWF0ZUNoYXJDb2RlKHQsaCk7aVtlXT17YmFzZUZvbnRDaGFyQ29kZTphLGFjY2VudEZvbnRDaGFyQ29kZTpyLGFjY2VudE9mZnNldDp1fX19YS5zZWFjTWFwPWl9Y29uc3QgeT0xLyhhLmZvbnRNYXRyaXh8fHIuRk9OVF9JREVOVElUWV9NQVRSSVgpWzBdLHc9bmV3IG0uT3BlblR5cGVGaWxlQnVpbGRlcigiT1RUTyIpO3cuYWRkVGFibGUoIkNGRiAiLHQuZGF0YSk7dy5hZGRUYWJsZSgiT1MvMiIsY3JlYXRlT1MyVGFibGUoYSxmKSk7dy5hZGRUYWJsZSgiY21hcCIsY3JlYXRlQ21hcFRhYmxlKGYsZyxwKSk7dy5hZGRUYWJsZSgiaGVhZCIsIlwwAVwwXDBcMFwwEFwwXDBcMFwwXDBfDzzDtVwwXDAiK3NhZmVTdHJpbmcxNih5KSsiXDBcMFwwXDDCnlx2fidcMFwwXDBcMMKeXHZ+J1wwXDAiK3NhZmVTdHJpbmcxNihhLmRlc2NlbnQpKyIPw78iK3NhZmVTdHJpbmcxNihhLmFzY2VudCkrc3RyaW5nMTYoYS5pdGFsaWNBbmdsZT8yOjApKyJcMBFcMFwwXDBcMFwwXDAiKTt3LmFkZFRhYmxlKCJoaGVhIiwiXDABXDBcMCIrc2FmZVN0cmluZzE2KGEuYXNjZW50KStzYWZlU3RyaW5nMTYoYS5kZXNjZW50KSsiXDBcMMO/w79cMFwwXDBcMFwwXDAiK3NhZmVTdHJpbmcxNihhLmNhcEhlaWdodCkrc2FmZVN0cmluZzE2KE1hdGgudGFuKGEuaXRhbGljQW5nbGUpKmEueEhlaWdodCkrIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIrc3RyaW5nMTYocCkpO3cuYWRkVGFibGUoImhtdHgiLGZ1bmN0aW9uIGZvbnRGaWVsZHNIbXR4KCl7Y29uc3QgZT10LmNoYXJzdHJpbmdzLGE9dC5jZmY/dC5jZmYud2lkdGhzOm51bGw7bGV0IHI9IlwwXDBcMFwwIjtmb3IobGV0IHQ9MSxuPXA7dDxuO3QrKyl7bGV0IG49MDtpZihlKXtjb25zdCBhPWVbdC0xXTtuPSJ3aWR0aCJpbiBhP2Eud2lkdGg6MH1lbHNlIGEmJihuPU1hdGguY2VpbChhW3RdfHwwKSk7cis9c3RyaW5nMTYobikrc3RyaW5nMTYoMCl9cmV0dXJuIHJ9KCkpO3cuYWRkVGFibGUoIm1heHAiLCJcMFwwUFwwIitzdHJpbmcxNihwKSk7dy5hZGRUYWJsZSgibmFtZSIsY3JlYXRlTmFtZVRhYmxlKGUpKTt3LmFkZFRhYmxlKCJwb3N0IixjcmVhdGVQb3N0VGFibGUoYSkpO3JldHVybiB3LnRvQXJyYXkoKX1nZXQgc3BhY2VXaWR0aCgpe2NvbnN0IGU9WyJzcGFjZSIsIm1pbnVzIiwib25lIiwiaSIsIkkiXTtsZXQgdDtmb3IoY29uc3QgYSBvZiBlKXtpZihhIGluIHRoaXMud2lkdGhzKXt0PXRoaXMud2lkdGhzW2FdO2JyZWFrfWNvbnN0IGU9KDAsby5nZXRHbHlwaHNVbmljb2RlKSgpW2FdO2xldCByPTA7aWYodGhpcy5jb21wb3NpdGUmJnRoaXMuY01hcC5jb250YWlucyhlKSl7cj10aGlzLmNNYXAubG9va3VwKGUpOyJzdHJpbmciPT10eXBlb2YgciYmKHI9Y29udmVydENpZFN0cmluZyhlLHIpKX0hciYmdGhpcy50b1VuaWNvZGUmJihyPXRoaXMudG9Vbmljb2RlLmNoYXJDb2RlT2YoZSkpO3I8PTAmJihyPWUpO3Q9dGhpcy53aWR0aHNbcl07aWYodClicmVha310PXR8fHRoaXMuZGVmYXVsdFdpZHRoO3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJzcGFjZVdpZHRoIix0KX1fY2hhclRvR2x5cGgoZSx0PSExKXtsZXQgYSxuLGksbz10aGlzLl9nbHlwaENhY2hlW2VdO2lmKG8mJm8uaXNTcGFjZT09PXQpcmV0dXJuIG87bGV0IGM9ZTtpZih0aGlzLmNNYXAmJnRoaXMuY01hcC5jb250YWlucyhlKSl7Yz10aGlzLmNNYXAubG9va3VwKGUpOyJzdHJpbmciPT10eXBlb2YgYyYmKGM9Y29udmVydENpZFN0cmluZyhlLGMpKX1uPXRoaXMud2lkdGhzW2NdOyJudW1iZXIiIT10eXBlb2YgbiYmKG49dGhpcy5kZWZhdWx0V2lkdGgpO2NvbnN0IGw9dGhpcy52bWV0cmljcyYmdGhpcy52bWV0cmljc1tjXTtsZXQgaD10aGlzLnRvVW5pY29kZS5nZXQoZSl8fGU7Im51bWJlciI9PXR5cGVvZiBoJiYoaD1TdHJpbmcuZnJvbUNoYXJDb2RlKGgpKTtsZXQgdT12b2lkIDAhPT10aGlzLnRvRm9udENoYXJbZV07YT10aGlzLnRvRm9udENoYXJbZV18fGU7aWYodGhpcy5taXNzaW5nRmlsZSl7Y29uc3QgdD10aGlzLmRpZmZlcmVuY2VzW2VdfHx0aGlzLmRlZmF1bHRFbmNvZGluZ1tlXTsiLm5vdGRlZiIhPT10JiYiIiE9PXR8fCJUeXBlMSIhPT10aGlzLnR5cGV8fChhPTMyKTthPSgwLHMubWFwU3BlY2lhbFVuaWNvZGVWYWx1ZXMpKGEpfXRoaXMuaXNUeXBlM0ZvbnQmJihpPWEpO2xldCBkPW51bGw7aWYodGhpcy5zZWFjTWFwJiZ0aGlzLnNlYWNNYXBbZV0pe3U9ITA7Y29uc3QgdD10aGlzLnNlYWNNYXBbZV07YT10LmJhc2VGb250Q2hhckNvZGU7ZD17Zm9udENoYXI6U3RyaW5nLmZyb21Db2RlUG9pbnQodC5hY2NlbnRGb250Q2hhckNvZGUpLG9mZnNldDp0LmFjY2VudE9mZnNldH19bGV0IGY9IiI7Im51bWJlciI9PXR5cGVvZiBhJiYoYTw9MTExNDExMT9mPVN0cmluZy5mcm9tQ29kZVBvaW50KGEpOigwLHIud2FybikoYGNoYXJUb0dseXBoIC0gaW52YWxpZCBmb250Q2hhckNvZGU6ICR7YX1gKSk7bz1uZXcgR2x5cGgoZSxmLGgsZCxuLGwsaSx0LHUpO3JldHVybiB0aGlzLl9nbHlwaENhY2hlW2VdPW99Y2hhcnNUb0dseXBocyhlKXtsZXQgdD10aGlzLl9jaGFyc0NhY2hlW2VdO2lmKHQpcmV0dXJuIHQ7dD1bXTtpZih0aGlzLmNNYXApe2NvbnN0IGE9T2JqZWN0LmNyZWF0ZShudWxsKSxyPWUubGVuZ3RoO2xldCBuPTA7Zm9yKDtuPHI7KXt0aGlzLmNNYXAucmVhZENoYXJDb2RlKGUsbixhKTtjb25zdHtjaGFyY29kZTpyLGxlbmd0aDppfT1hO24rPWk7Y29uc3Qgcz10aGlzLl9jaGFyVG9HbHlwaChyLDE9PT1pJiYzMj09PWUuY2hhckNvZGVBdChuLTEpKTt0LnB1c2gocyl9fWVsc2UgZm9yKGxldCBhPTAscj1lLmxlbmd0aDthPHI7KythKXtjb25zdCByPWUuY2hhckNvZGVBdChhKSxuPXRoaXMuX2NoYXJUb0dseXBoKHIsMzI9PT1yKTt0LnB1c2gobil9cmV0dXJuIHRoaXMuX2NoYXJzQ2FjaGVbZV09dH1nZXRDaGFyUG9zaXRpb25zKGUpe2NvbnN0IHQ9W107aWYodGhpcy5jTWFwKXtjb25zdCBhPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IHI9MDtmb3IoO3I8ZS5sZW5ndGg7KXt0aGlzLmNNYXAucmVhZENoYXJDb2RlKGUscixhKTtjb25zdCBuPWEubGVuZ3RoO3QucHVzaChbcixyK25dKTtyKz1ufX1lbHNlIGZvcihsZXQgYT0wLHI9ZS5sZW5ndGg7YTxyOysrYSl0LnB1c2goW2EsYSsxXSk7cmV0dXJuIHR9Z2V0IGdseXBoQ2FjaGVWYWx1ZXMoKXtyZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLl9nbHlwaENhY2hlKX1lbmNvZGVTdHJpbmcoZSl7Y29uc3QgdD1bXSxhPVtdLGhhc0N1cnJlbnRCdWZFcnJvcnM9KCk9PnQubGVuZ3RoJTI9PTEscj10aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIGguSWRlbnRpdHlUb1VuaWNvZGVNYXA/ZT0+dGhpcy50b1VuaWNvZGUuY2hhckNvZGVPZihlKTplPT50aGlzLnRvVW5pY29kZS5jaGFyQ29kZU9mKFN0cmluZy5mcm9tQ29kZVBvaW50KGUpKTtmb3IobGV0IG49MCxpPWUubGVuZ3RoO248aTtuKyspe2NvbnN0IGk9ZS5jb2RlUG9pbnRBdChuKTtpPjU1Mjk1JiYoaTw1NzM0NHx8aT42NTUzMykmJm4rKztpZih0aGlzLnRvVW5pY29kZSl7Y29uc3QgZT1yKGkpO2lmKC0xIT09ZSl7aWYoaGFzQ3VycmVudEJ1ZkVycm9ycygpKXt0LnB1c2goYS5qb2luKCIiKSk7YS5sZW5ndGg9MH1mb3IobGV0IHQ9KHRoaXMuY01hcD90aGlzLmNNYXAuZ2V0Q2hhckNvZGVMZW5ndGgoZSk6MSktMTt0Pj0wO3QtLSlhLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShlPj44KnQmMjU1KSk7Y29udGludWV9fWlmKCFoYXNDdXJyZW50QnVmRXJyb3JzKCkpe3QucHVzaChhLmpvaW4oIiIpKTthLmxlbmd0aD0wfWEucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludChpKSl9dC5wdXNoKGEuam9pbigiIikpO3JldHVybiB0fX07dC5FcnJvckZvbnQ9Y2xhc3MgRXJyb3JGb250e2NvbnN0cnVjdG9yKGUpe3RoaXMuZXJyb3I9ZTt0aGlzLmxvYWRlZE5hbWU9ImdfZm9udF9lcnJvciI7dGhpcy5taXNzaW5nRmlsZT0hMH1jaGFyc1RvR2x5cGhzKCl7cmV0dXJuW119ZW5jb2RlU3RyaW5nKGUpe3JldHVybltlXX1leHBvcnREYXRhKGU9ITEpe3JldHVybntlcnJvcjp0aGlzLmVycm9yfX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuQ0ZGVG9wRGljdD10LkNGRlN0cmluZ3M9dC5DRkZTdGFuZGFyZFN0cmluZ3M9dC5DRkZQcml2YXRlRGljdD10LkNGRlBhcnNlcj10LkNGRkluZGV4PXQuQ0ZGSGVhZGVyPXQuQ0ZGRkRTZWxlY3Q9dC5DRkZDb21waWxlcj10LkNGRkNoYXJzZXQ9dC5DRkY9dm9pZCAwO3ZhciByPWEoMiksbj1hKDM0KSxpPWEoMzUpO2NvbnN0IHM9WyIubm90ZGVmIiwic3BhY2UiLCJleGNsYW0iLCJxdW90ZWRibCIsIm51bWJlcnNpZ24iLCJkb2xsYXIiLCJwZXJjZW50IiwiYW1wZXJzYW5kIiwicXVvdGVyaWdodCIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwicXVvdGVsZWZ0IiwiYSIsImIiLCJjIiwiZCIsImUiLCJmIiwiZyIsImgiLCJpIiwiaiIsImsiLCJsIiwibSIsIm4iLCJvIiwicCIsInEiLCJyIiwicyIsInQiLCJ1IiwidiIsInciLCJ4IiwieSIsInoiLCJicmFjZWxlZnQiLCJiYXIiLCJicmFjZXJpZ2h0IiwiYXNjaWl0aWxkZSIsImV4Y2xhbWRvd24iLCJjZW50Iiwic3RlcmxpbmciLCJmcmFjdGlvbiIsInllbiIsImZsb3JpbiIsInNlY3Rpb24iLCJjdXJyZW5jeSIsInF1b3Rlc2luZ2xlIiwicXVvdGVkYmxsZWZ0IiwiZ3VpbGxlbW90bGVmdCIsImd1aWxzaW5nbGxlZnQiLCJndWlsc2luZ2xyaWdodCIsImZpIiwiZmwiLCJlbmRhc2giLCJkYWdnZXIiLCJkYWdnZXJkYmwiLCJwZXJpb2RjZW50ZXJlZCIsInBhcmFncmFwaCIsImJ1bGxldCIsInF1b3Rlc2luZ2xiYXNlIiwicXVvdGVkYmxiYXNlIiwicXVvdGVkYmxyaWdodCIsImd1aWxsZW1vdHJpZ2h0IiwiZWxsaXBzaXMiLCJwZXJ0aG91c2FuZCIsInF1ZXN0aW9uZG93biIsImdyYXZlIiwiYWN1dGUiLCJjaXJjdW1mbGV4IiwidGlsZGUiLCJtYWNyb24iLCJicmV2ZSIsImRvdGFjY2VudCIsImRpZXJlc2lzIiwicmluZyIsImNlZGlsbGEiLCJodW5nYXJ1bWxhdXQiLCJvZ29uZWsiLCJjYXJvbiIsImVtZGFzaCIsIkFFIiwib3JkZmVtaW5pbmUiLCJMc2xhc2giLCJPc2xhc2giLCJPRSIsIm9yZG1hc2N1bGluZSIsImFlIiwiZG90bGVzc2kiLCJsc2xhc2giLCJvc2xhc2giLCJvZSIsImdlcm1hbmRibHMiLCJvbmVzdXBlcmlvciIsImxvZ2ljYWxub3QiLCJtdSIsInRyYWRlbWFyayIsIkV0aCIsIm9uZWhhbGYiLCJwbHVzbWludXMiLCJUaG9ybiIsIm9uZXF1YXJ0ZXIiLCJkaXZpZGUiLCJicm9rZW5iYXIiLCJkZWdyZWUiLCJ0aG9ybiIsInRocmVlcXVhcnRlcnMiLCJ0d29zdXBlcmlvciIsInJlZ2lzdGVyZWQiLCJtaW51cyIsImV0aCIsIm11bHRpcGx5IiwidGhyZWVzdXBlcmlvciIsImNvcHlyaWdodCIsIkFhY3V0ZSIsIkFjaXJjdW1mbGV4IiwiQWRpZXJlc2lzIiwiQWdyYXZlIiwiQXJpbmciLCJBdGlsZGUiLCJDY2VkaWxsYSIsIkVhY3V0ZSIsIkVjaXJjdW1mbGV4IiwiRWRpZXJlc2lzIiwiRWdyYXZlIiwiSWFjdXRlIiwiSWNpcmN1bWZsZXgiLCJJZGllcmVzaXMiLCJJZ3JhdmUiLCJOdGlsZGUiLCJPYWN1dGUiLCJPY2lyY3VtZmxleCIsIk9kaWVyZXNpcyIsIk9ncmF2ZSIsIk90aWxkZSIsIlNjYXJvbiIsIlVhY3V0ZSIsIlVjaXJjdW1mbGV4IiwiVWRpZXJlc2lzIiwiVWdyYXZlIiwiWWFjdXRlIiwiWWRpZXJlc2lzIiwiWmNhcm9uIiwiYWFjdXRlIiwiYWNpcmN1bWZsZXgiLCJhZGllcmVzaXMiLCJhZ3JhdmUiLCJhcmluZyIsImF0aWxkZSIsImNjZWRpbGxhIiwiZWFjdXRlIiwiZWNpcmN1bWZsZXgiLCJlZGllcmVzaXMiLCJlZ3JhdmUiLCJpYWN1dGUiLCJpY2lyY3VtZmxleCIsImlkaWVyZXNpcyIsImlncmF2ZSIsIm50aWxkZSIsIm9hY3V0ZSIsIm9jaXJjdW1mbGV4Iiwib2RpZXJlc2lzIiwib2dyYXZlIiwib3RpbGRlIiwic2Nhcm9uIiwidWFjdXRlIiwidWNpcmN1bWZsZXgiLCJ1ZGllcmVzaXMiLCJ1Z3JhdmUiLCJ5YWN1dGUiLCJ5ZGllcmVzaXMiLCJ6Y2Fyb24iLCJleGNsYW1zbWFsbCIsIkh1bmdhcnVtbGF1dHNtYWxsIiwiZG9sbGFyb2xkc3R5bGUiLCJkb2xsYXJzdXBlcmlvciIsImFtcGVyc2FuZHNtYWxsIiwiQWN1dGVzbWFsbCIsInBhcmVubGVmdHN1cGVyaW9yIiwicGFyZW5yaWdodHN1cGVyaW9yIiwidHdvZG90ZW5sZWFkZXIiLCJvbmVkb3RlbmxlYWRlciIsInplcm9vbGRzdHlsZSIsIm9uZW9sZHN0eWxlIiwidHdvb2xkc3R5bGUiLCJ0aHJlZW9sZHN0eWxlIiwiZm91cm9sZHN0eWxlIiwiZml2ZW9sZHN0eWxlIiwic2l4b2xkc3R5bGUiLCJzZXZlbm9sZHN0eWxlIiwiZWlnaHRvbGRzdHlsZSIsIm5pbmVvbGRzdHlsZSIsImNvbW1hc3VwZXJpb3IiLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwicGVyaW9kc3VwZXJpb3IiLCJxdWVzdGlvbnNtYWxsIiwiYXN1cGVyaW9yIiwiYnN1cGVyaW9yIiwiY2VudHN1cGVyaW9yIiwiZHN1cGVyaW9yIiwiZXN1cGVyaW9yIiwiaXN1cGVyaW9yIiwibHN1cGVyaW9yIiwibXN1cGVyaW9yIiwibnN1cGVyaW9yIiwib3N1cGVyaW9yIiwicnN1cGVyaW9yIiwic3N1cGVyaW9yIiwidHN1cGVyaW9yIiwiZmYiLCJmZmkiLCJmZmwiLCJwYXJlbmxlZnRpbmZlcmlvciIsInBhcmVucmlnaHRpbmZlcmlvciIsIkNpcmN1bWZsZXhzbWFsbCIsImh5cGhlbnN1cGVyaW9yIiwiR3JhdmVzbWFsbCIsIkFzbWFsbCIsIkJzbWFsbCIsIkNzbWFsbCIsIkRzbWFsbCIsIkVzbWFsbCIsIkZzbWFsbCIsIkdzbWFsbCIsIkhzbWFsbCIsIklzbWFsbCIsIkpzbWFsbCIsIktzbWFsbCIsIkxzbWFsbCIsIk1zbWFsbCIsIk5zbWFsbCIsIk9zbWFsbCIsIlBzbWFsbCIsIlFzbWFsbCIsIlJzbWFsbCIsIlNzbWFsbCIsIlRzbWFsbCIsIlVzbWFsbCIsIlZzbWFsbCIsIldzbWFsbCIsIlhzbWFsbCIsIllzbWFsbCIsIlpzbWFsbCIsImNvbG9ubW9uZXRhcnkiLCJvbmVmaXR0ZWQiLCJydXBpYWgiLCJUaWxkZXNtYWxsIiwiZXhjbGFtZG93bnNtYWxsIiwiY2VudG9sZHN0eWxlIiwiTHNsYXNoc21hbGwiLCJTY2Fyb25zbWFsbCIsIlpjYXJvbnNtYWxsIiwiRGllcmVzaXNzbWFsbCIsIkJyZXZlc21hbGwiLCJDYXJvbnNtYWxsIiwiRG90YWNjZW50c21hbGwiLCJNYWNyb25zbWFsbCIsImZpZ3VyZWRhc2giLCJoeXBoZW5pbmZlcmlvciIsIk9nb25la3NtYWxsIiwiUmluZ3NtYWxsIiwiQ2VkaWxsYXNtYWxsIiwicXVlc3Rpb25kb3duc21hbGwiLCJvbmVlaWdodGgiLCJ0aHJlZWVpZ2h0aHMiLCJmaXZlZWlnaHRocyIsInNldmVuZWlnaHRocyIsIm9uZXRoaXJkIiwidHdvdGhpcmRzIiwiemVyb3N1cGVyaW9yIiwiZm91cnN1cGVyaW9yIiwiZml2ZXN1cGVyaW9yIiwic2l4c3VwZXJpb3IiLCJzZXZlbnN1cGVyaW9yIiwiZWlnaHRzdXBlcmlvciIsIm5pbmVzdXBlcmlvciIsInplcm9pbmZlcmlvciIsIm9uZWluZmVyaW9yIiwidHdvaW5mZXJpb3IiLCJ0aHJlZWluZmVyaW9yIiwiZm91cmluZmVyaW9yIiwiZml2ZWluZmVyaW9yIiwic2l4aW5mZXJpb3IiLCJzZXZlbmluZmVyaW9yIiwiZWlnaHRpbmZlcmlvciIsIm5pbmVpbmZlcmlvciIsImNlbnRpbmZlcmlvciIsImRvbGxhcmluZmVyaW9yIiwicGVyaW9kaW5mZXJpb3IiLCJjb21tYWluZmVyaW9yIiwiQWdyYXZlc21hbGwiLCJBYWN1dGVzbWFsbCIsIkFjaXJjdW1mbGV4c21hbGwiLCJBdGlsZGVzbWFsbCIsIkFkaWVyZXNpc3NtYWxsIiwiQXJpbmdzbWFsbCIsIkFFc21hbGwiLCJDY2VkaWxsYXNtYWxsIiwiRWdyYXZlc21hbGwiLCJFYWN1dGVzbWFsbCIsIkVjaXJjdW1mbGV4c21hbGwiLCJFZGllcmVzaXNzbWFsbCIsIklncmF2ZXNtYWxsIiwiSWFjdXRlc21hbGwiLCJJY2lyY3VtZmxleHNtYWxsIiwiSWRpZXJlc2lzc21hbGwiLCJFdGhzbWFsbCIsIk50aWxkZXNtYWxsIiwiT2dyYXZlc21hbGwiLCJPYWN1dGVzbWFsbCIsIk9jaXJjdW1mbGV4c21hbGwiLCJPdGlsZGVzbWFsbCIsIk9kaWVyZXNpc3NtYWxsIiwiT0VzbWFsbCIsIk9zbGFzaHNtYWxsIiwiVWdyYXZlc21hbGwiLCJVYWN1dGVzbWFsbCIsIlVjaXJjdW1mbGV4c21hbGwiLCJVZGllcmVzaXNzbWFsbCIsIllhY3V0ZXNtYWxsIiwiVGhvcm5zbWFsbCIsIllkaWVyZXNpc3NtYWxsIiwiMDAxLjAwMCIsIjAwMS4wMDEiLCIwMDEuMDAyIiwiMDAxLjAwMyIsIkJsYWNrIiwiQm9sZCIsIkJvb2siLCJMaWdodCIsIk1lZGl1bSIsIlJlZ3VsYXIiLCJSb21hbiIsIlNlbWlib2xkIl07dC5DRkZTdGFuZGFyZFN0cmluZ3M9cztjb25zdCBvPTM5MSxjPVtudWxsLHtpZDoiaHN0ZW0iLG1pbjoyLHN0YWNrQ2xlYXJpbmc6ITAsc3RlbTohMH0sbnVsbCx7aWQ6InZzdGVtIixtaW46MixzdGFja0NsZWFyaW5nOiEwLHN0ZW06ITB9LHtpZDoidm1vdmV0byIsbWluOjEsc3RhY2tDbGVhcmluZzohMH0se2lkOiJybGluZXRvIixtaW46MixyZXNldFN0YWNrOiEwfSx7aWQ6ImhsaW5ldG8iLG1pbjoxLHJlc2V0U3RhY2s6ITB9LHtpZDoidmxpbmV0byIsbWluOjEscmVzZXRTdGFjazohMH0se2lkOiJycmN1cnZldG8iLG1pbjo2LHJlc2V0U3RhY2s6ITB9LG51bGwse2lkOiJjYWxsc3ViciIsbWluOjEsdW5kZWZTdGFjazohMH0se2lkOiJyZXR1cm4iLG1pbjowLHVuZGVmU3RhY2s6ITB9LG51bGwsbnVsbCx7aWQ6ImVuZGNoYXIiLG1pbjowLHN0YWNrQ2xlYXJpbmc6ITB9LG51bGwsbnVsbCxudWxsLHtpZDoiaHN0ZW1obSIsbWluOjIsc3RhY2tDbGVhcmluZzohMCxzdGVtOiEwfSx7aWQ6ImhpbnRtYXNrIixtaW46MCxzdGFja0NsZWFyaW5nOiEwfSx7aWQ6ImNudHJtYXNrIixtaW46MCxzdGFja0NsZWFyaW5nOiEwfSx7aWQ6InJtb3ZldG8iLG1pbjoyLHN0YWNrQ2xlYXJpbmc6ITB9LHtpZDoiaG1vdmV0byIsbWluOjEsc3RhY2tDbGVhcmluZzohMH0se2lkOiJ2c3RlbWhtIixtaW46MixzdGFja0NsZWFyaW5nOiEwLHN0ZW06ITB9LHtpZDoicmN1cnZlbGluZSIsbWluOjgscmVzZXRTdGFjazohMH0se2lkOiJybGluZWN1cnZlIixtaW46OCxyZXNldFN0YWNrOiEwfSx7aWQ6InZ2Y3VydmV0byIsbWluOjQscmVzZXRTdGFjazohMH0se2lkOiJoaGN1cnZldG8iLG1pbjo0LHJlc2V0U3RhY2s6ITB9LG51bGwse2lkOiJjYWxsZ3N1YnIiLG1pbjoxLHVuZGVmU3RhY2s6ITB9LHtpZDoidmhjdXJ2ZXRvIixtaW46NCxyZXNldFN0YWNrOiEwfSx7aWQ6Imh2Y3VydmV0byIsbWluOjQscmVzZXRTdGFjazohMH1dLGw9W251bGwsbnVsbCxudWxsLHtpZDoiYW5kIixtaW46MixzdGFja0RlbHRhOi0xfSx7aWQ6Im9yIixtaW46MixzdGFja0RlbHRhOi0xfSx7aWQ6Im5vdCIsbWluOjEsc3RhY2tEZWx0YTowfSxudWxsLG51bGwsbnVsbCx7aWQ6ImFicyIsbWluOjEsc3RhY2tEZWx0YTowfSx7aWQ6ImFkZCIsbWluOjIsc3RhY2tEZWx0YTotMSxzdGFja0ZuKGUsdCl7ZVt0LTJdPWVbdC0yXStlW3QtMV19fSx7aWQ6InN1YiIsbWluOjIsc3RhY2tEZWx0YTotMSxzdGFja0ZuKGUsdCl7ZVt0LTJdPWVbdC0yXS1lW3QtMV19fSx7aWQ6ImRpdiIsbWluOjIsc3RhY2tEZWx0YTotMSxzdGFja0ZuKGUsdCl7ZVt0LTJdPWVbdC0yXS9lW3QtMV19fSxudWxsLHtpZDoibmVnIixtaW46MSxzdGFja0RlbHRhOjAsc3RhY2tGbihlLHQpe2VbdC0xXT0tZVt0LTFdfX0se2lkOiJlcSIsbWluOjIsc3RhY2tEZWx0YTotMX0sbnVsbCxudWxsLHtpZDoiZHJvcCIsbWluOjEsc3RhY2tEZWx0YTotMX0sbnVsbCx7aWQ6InB1dCIsbWluOjIsc3RhY2tEZWx0YTotMn0se2lkOiJnZXQiLG1pbjoxLHN0YWNrRGVsdGE6MH0se2lkOiJpZmVsc2UiLG1pbjo0LHN0YWNrRGVsdGE6LTN9LHtpZDoicmFuZG9tIixtaW46MCxzdGFja0RlbHRhOjF9LHtpZDoibXVsIixtaW46MixzdGFja0RlbHRhOi0xLHN0YWNrRm4oZSx0KXtlW3QtMl09ZVt0LTJdKmVbdC0xXX19LG51bGwse2lkOiJzcXJ0IixtaW46MSxzdGFja0RlbHRhOjB9LHtpZDoiZHVwIixtaW46MSxzdGFja0RlbHRhOjF9LHtpZDoiZXhjaCIsbWluOjIsc3RhY2tEZWx0YTowfSx7aWQ6ImluZGV4IixtaW46MixzdGFja0RlbHRhOjB9LHtpZDoicm9sbCIsbWluOjMsc3RhY2tEZWx0YTotMn0sbnVsbCxudWxsLG51bGwse2lkOiJoZmxleCIsbWluOjcscmVzZXRTdGFjazohMH0se2lkOiJmbGV4IixtaW46MTMscmVzZXRTdGFjazohMH0se2lkOiJoZmxleDEiLG1pbjo5LHJlc2V0U3RhY2s6ITB9LHtpZDoiZmxleDEiLG1pbjoxMSxyZXNldFN0YWNrOiEwfV07dC5DRkZQYXJzZXI9Y2xhc3MgQ0ZGUGFyc2Vye2NvbnN0cnVjdG9yKGUsdCxhKXt0aGlzLmJ5dGVzPWUuZ2V0Qnl0ZXMoKTt0aGlzLnByb3BlcnRpZXM9dDt0aGlzLnNlYWNBbmFseXNpc0VuYWJsZWQ9ISFhfXBhcnNlKCl7Y29uc3QgZT10aGlzLnByb3BlcnRpZXMsdD1uZXcgQ0ZGO3RoaXMuY2ZmPXQ7Y29uc3QgYT10aGlzLnBhcnNlSGVhZGVyKCkscj10aGlzLnBhcnNlSW5kZXgoYS5lbmRQb3MpLG49dGhpcy5wYXJzZUluZGV4KHIuZW5kUG9zKSxpPXRoaXMucGFyc2VJbmRleChuLmVuZFBvcykscz10aGlzLnBhcnNlSW5kZXgoaS5lbmRQb3MpLG89dGhpcy5wYXJzZURpY3Qobi5vYmouZ2V0KDApKSxjPXRoaXMuY3JlYXRlRGljdChDRkZUb3BEaWN0LG8sdC5zdHJpbmdzKTt0LmhlYWRlcj1hLm9iajt0Lm5hbWVzPXRoaXMucGFyc2VOYW1lSW5kZXgoci5vYmopO3Quc3RyaW5ncz10aGlzLnBhcnNlU3RyaW5nSW5kZXgoaS5vYmopO3QudG9wRGljdD1jO3QuZ2xvYmFsU3VickluZGV4PXMub2JqO3RoaXMucGFyc2VQcml2YXRlRGljdCh0LnRvcERpY3QpO3QuaXNDSURGb250PWMuaGFzTmFtZSgiUk9TIik7Y29uc3QgbD1jLmdldEJ5TmFtZSgiQ2hhclN0cmluZ3MiKSxoPXRoaXMucGFyc2VJbmRleChsKS5vYmosdT1jLmdldEJ5TmFtZSgiRm9udE1hdHJpeCIpO3UmJihlLmZvbnRNYXRyaXg9dSk7Y29uc3QgZD1jLmdldEJ5TmFtZSgiRm9udEJCb3giKTtpZihkKXtlLmFzY2VudD1NYXRoLm1heChkWzNdLGRbMV0pO2UuZGVzY2VudD1NYXRoLm1pbihkWzFdLGRbM10pO2UuYXNjZW50U2NhbGVkPSEwfWxldCBmLGc7aWYodC5pc0NJREZvbnQpe2NvbnN0IGU9dGhpcy5wYXJzZUluZGV4KGMuZ2V0QnlOYW1lKCJGREFycmF5IikpLm9iajtmb3IobGV0IGE9MCxyPWUuY291bnQ7YTxyOysrYSl7Y29uc3Qgcj1lLmdldChhKSxuPXRoaXMuY3JlYXRlRGljdChDRkZUb3BEaWN0LHRoaXMucGFyc2VEaWN0KHIpLHQuc3RyaW5ncyk7dGhpcy5wYXJzZVByaXZhdGVEaWN0KG4pO3QuZmRBcnJheS5wdXNoKG4pfWc9bnVsbDtmPXRoaXMucGFyc2VDaGFyc2V0cyhjLmdldEJ5TmFtZSgiY2hhcnNldCIpLGguY291bnQsdC5zdHJpbmdzLCEwKTt0LmZkU2VsZWN0PXRoaXMucGFyc2VGRFNlbGVjdChjLmdldEJ5TmFtZSgiRkRTZWxlY3QiKSxoLmNvdW50KX1lbHNle2Y9dGhpcy5wYXJzZUNoYXJzZXRzKGMuZ2V0QnlOYW1lKCJjaGFyc2V0IiksaC5jb3VudCx0LnN0cmluZ3MsITEpO2c9dGhpcy5wYXJzZUVuY29kaW5nKGMuZ2V0QnlOYW1lKCJFbmNvZGluZyIpLGUsdC5zdHJpbmdzLGYuY2hhcnNldCl9dC5jaGFyc2V0PWY7dC5lbmNvZGluZz1nO2NvbnN0IHA9dGhpcy5wYXJzZUNoYXJTdHJpbmdzKHtjaGFyU3RyaW5nczpoLGxvY2FsU3VickluZGV4OmMucHJpdmF0ZURpY3Quc3VicnNJbmRleCxnbG9iYWxTdWJySW5kZXg6cy5vYmosZmRTZWxlY3Q6dC5mZFNlbGVjdCxmZEFycmF5OnQuZmRBcnJheSxwcml2YXRlRGljdDpjLnByaXZhdGVEaWN0fSk7dC5jaGFyU3RyaW5ncz1wLmNoYXJTdHJpbmdzO3Quc2VhY3M9cC5zZWFjczt0LndpZHRocz1wLndpZHRocztyZXR1cm4gdH1wYXJzZUhlYWRlcigpe2xldCBlPXRoaXMuYnl0ZXM7Y29uc3QgdD1lLmxlbmd0aDtsZXQgYT0wO2Zvcig7YTx0JiYxIT09ZVthXTspKythO2lmKGE+PXQpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkludmFsaWQgQ0ZGIGhlYWRlciIpO2lmKDAhPT1hKXsoMCxyLmluZm8pKCJjZmYgZGF0YSBpcyBzaGlmdGVkIik7ZT1lLnN1YmFycmF5KGEpO3RoaXMuYnl0ZXM9ZX1jb25zdCBuPWVbMF0saT1lWzFdLHM9ZVsyXSxvPWVbM107cmV0dXJue29iajpuZXcgQ0ZGSGVhZGVyKG4saSxzLG8pLGVuZFBvczpzfX1wYXJzZURpY3QoZSl7bGV0IHQ9MDtmdW5jdGlvbiBwYXJzZU9wZXJhbmQoKXtsZXQgYT1lW3QrK107aWYoMzA9PT1hKXJldHVybiBmdW5jdGlvbiBwYXJzZUZsb2F0T3BlcmFuZCgpe2xldCBhPSIiO2NvbnN0IHI9MTUsbj1bIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIuIiwiRSIsIkUtIixudWxsLCItIl0saT1lLmxlbmd0aDtmb3IoO3Q8aTspe2NvbnN0IGk9ZVt0KytdLHM9aT4+NCxvPTE1Jmk7aWYocz09PXIpYnJlYWs7YSs9bltzXTtpZihvPT09cilicmVhazthKz1uW29dfXJldHVybiBwYXJzZUZsb2F0KGEpfSgpO2lmKDI4PT09YSl7YT1lW3QrK107YT0oYTw8MjR8ZVt0KytdPDwxNik+PjE2O3JldHVybiBhfWlmKDI5PT09YSl7YT1lW3QrK107YT1hPDw4fGVbdCsrXTthPWE8PDh8ZVt0KytdO2E9YTw8OHxlW3QrK107cmV0dXJuIGF9aWYoYT49MzImJmE8PTI0NilyZXR1cm4gYS0xMzk7aWYoYT49MjQ3JiZhPD0yNTApcmV0dXJuIDI1NiooYS0yNDcpK2VbdCsrXSsxMDg7aWYoYT49MjUxJiZhPD0yNTQpcmV0dXJuLTI1NiooYS0yNTEpLWVbdCsrXS0xMDg7KDAsci53YXJuKSgnQ0ZGUGFyc2VyX3BhcnNlRGljdDogIicrYSsnIiBpcyBhIHJlc2VydmVkIGNvbW1hbmQuJyk7cmV0dXJuIE5hTn1sZXQgYT1bXTtjb25zdCBuPVtdO3Q9MDtjb25zdCBpPWUubGVuZ3RoO2Zvcig7dDxpOyl7bGV0IHI9ZVt0XTtpZihyPD0yMSl7MTI9PT1yJiYocj1yPDw4fGVbKyt0XSk7bi5wdXNoKFtyLGFdKTthPVtdOysrdH1lbHNlIGEucHVzaChwYXJzZU9wZXJhbmQoKSl9cmV0dXJuIG59cGFyc2VJbmRleChlKXtjb25zdCB0PW5ldyBDRkZJbmRleCxhPXRoaXMuYnl0ZXMscj1hW2UrK108PDh8YVtlKytdLG49W107bGV0IGkscyxvPWU7aWYoMCE9PXIpe2NvbnN0IHQ9YVtlKytdLGM9ZSsocisxKSp0LTE7Zm9yKGk9MCxzPXIrMTtpPHM7KytpKXtsZXQgcj0wO2ZvcihsZXQgbj0wO248dDsrK24pe3I8PD04O3IrPWFbZSsrXX1uLnB1c2goYytyKX1vPW5bcl19Zm9yKGk9MCxzPW4ubGVuZ3RoLTE7aTxzOysraSl7Y29uc3QgZT1uW2ldLHI9bltpKzFdO3QuYWRkKGEuc3ViYXJyYXkoZSxyKSl9cmV0dXJue29iajp0LGVuZFBvczpvfX1wYXJzZU5hbWVJbmRleChlKXtjb25zdCB0PVtdO2ZvcihsZXQgYT0wLG49ZS5jb3VudDthPG47KythKXtjb25zdCBuPWUuZ2V0KGEpO3QucHVzaCgoMCxyLmJ5dGVzVG9TdHJpbmcpKG4pKX1yZXR1cm4gdH1wYXJzZVN0cmluZ0luZGV4KGUpe2NvbnN0IHQ9bmV3IENGRlN0cmluZ3M7Zm9yKGxldCBhPTAsbj1lLmNvdW50O2E8bjsrK2Epe2NvbnN0IG49ZS5nZXQoYSk7dC5hZGQoKDAsci5ieXRlc1RvU3RyaW5nKShuKSl9cmV0dXJuIHR9Y3JlYXRlRGljdChlLHQsYSl7Y29uc3Qgcj1uZXcgZShhKTtmb3IoY29uc3RbZSxhXW9mIHQpci5zZXRCeUtleShlLGEpO3JldHVybiByfXBhcnNlQ2hhclN0cmluZyhlLHQsYSxuKXtpZighdHx8ZS5jYWxsRGVwdGg+MTApcmV0dXJuITE7bGV0IGk9ZS5zdGFja1NpemU7Y29uc3Qgcz1lLnN0YWNrLG89dC5sZW5ndGg7Zm9yKGxldCBoPTA7aDxvOyl7Y29uc3Qgbz10W2grK107bGV0IHU9bnVsbDtpZigxMj09PW8pe2NvbnN0IGU9dFtoKytdO2lmKDA9PT1lKXt0W2gtMl09MTM5O3RbaC0xXT0yMjtpPTB9ZWxzZSB1PWxbZV19ZWxzZSBpZigyOD09PW8pe3NbaV09KHRbaF08PDI0fHRbaCsxXTw8MTYpPj4xNjtoKz0yO2krK31lbHNlIGlmKDE0PT09byl7aWYoaT49NCl7aS09NDtpZih0aGlzLnNlYWNBbmFseXNpc0VuYWJsZWQpe2Uuc2VhYz1zLnNsaWNlKGksaSs0KTtyZXR1cm4hMX19dT1jW29dfWVsc2UgaWYobz49MzImJm88PTI0Nil7c1tpXT1vLTEzOTtpKyt9ZWxzZSBpZihvPj0yNDcmJm88PTI1NCl7c1tpXT1vPDI1MT8oby0yNDc8PDgpK3RbaF0rMTA4Oi0oby0yNTE8PDgpLXRbaF0tMTA4O2grKztpKyt9ZWxzZSBpZigyNTU9PT1vKXtzW2ldPSh0W2hdPDwyNHx0W2grMV08PDE2fHRbaCsyXTw8OHx0W2grM10pLzY1NTM2O2grPTQ7aSsrfWVsc2UgaWYoMTk9PT1vfHwyMD09PW8pe2UuaGludHMrPWk+PjE7aCs9ZS5oaW50cys3Pj4zO2klPTI7dT1jW29dfWVsc2V7aWYoMTA9PT1vfHwyOT09PW8pe2xldCB0O3Q9MTA9PT1vP2E6bjtpZighdCl7dT1jW29dOygwLHIud2FybikoIk1pc3Npbmcgc3VicnNJbmRleCBmb3IgIit1LmlkKTtyZXR1cm4hMX1sZXQgbD0zMjc2ODt0LmNvdW50PDEyNDA/bD0xMDc6dC5jb3VudDwzMzkwMCYmKGw9MTEzMSk7Y29uc3QgaD1zWy0taV0rbDtpZihoPDB8fGg+PXQuY291bnR8fGlzTmFOKGgpKXt1PWNbb107KDAsci53YXJuKSgiT3V0IG9mIGJvdW5kcyBzdWJySW5kZXggZm9yICIrdS5pZCk7cmV0dXJuITF9ZS5zdGFja1NpemU9aTtlLmNhbGxEZXB0aCsrO2lmKCF0aGlzLnBhcnNlQ2hhclN0cmluZyhlLHQuZ2V0KGgpLGEsbikpcmV0dXJuITE7ZS5jYWxsRGVwdGgtLTtpPWUuc3RhY2tTaXplO2NvbnRpbnVlfWlmKDExPT09byl7ZS5zdGFja1NpemU9aTtyZXR1cm4hMH1pZigwPT09byYmaD09PXQubGVuZ3RoKXt0W2gtMV09MTQ7dT1jWzE0XX1lbHNlIHU9Y1tvXX1pZih1KXtpZih1LnN0ZW0pe2UuaGludHMrPWk+PjE7aWYoMz09PW98fDIzPT09byllLmhhc1ZTdGVtcz0hMDtlbHNlIGlmKGUuaGFzVlN0ZW1zJiYoMT09PW98fDE4PT09bykpeygwLHIud2FybikoIkNGRiBzdGVtIGhpbnRzIGFyZSBpbiB3cm9uZyBvcmRlciIpO3RbaC0xXT0xPT09bz8zOjIzfX1pZigibWluImluIHUmJiFlLnVuZGVmU3RhY2smJmk8dS5taW4peygwLHIud2FybikoIk5vdCBlbm91Z2ggcGFyYW1ldGVycyBmb3IgIit1LmlkKyI7IGFjdHVhbDogIitpKyIsIGV4cGVjdGVkOiAiK3UubWluKTtpZigwPT09aSl7dFtoLTFdPTE0O3JldHVybiEwfXJldHVybiExfWlmKGUuZmlyc3RTdGFja0NsZWFyaW5nJiZ1LnN0YWNrQ2xlYXJpbmcpe2UuZmlyc3RTdGFja0NsZWFyaW5nPSExO2ktPXUubWluO2k+PTImJnUuc3RlbT9pJT0yOmk+MSYmKDAsci53YXJuKSgiRm91bmQgdG9vIG1hbnkgcGFyYW1ldGVycyBmb3Igc3RhY2stY2xlYXJpbmcgY29tbWFuZCIpO2k+MCYmKGUud2lkdGg9c1tpLTFdKX1pZigic3RhY2tEZWx0YSJpbiB1KXsic3RhY2tGbiJpbiB1JiZ1LnN0YWNrRm4ocyxpKTtpKz11LnN0YWNrRGVsdGF9ZWxzZSBpZih1LnN0YWNrQ2xlYXJpbmcpaT0wO2Vsc2UgaWYodS5yZXNldFN0YWNrKXtpPTA7ZS51bmRlZlN0YWNrPSExfWVsc2UgaWYodS51bmRlZlN0YWNrKXtpPTA7ZS51bmRlZlN0YWNrPSEwO2UuZmlyc3RTdGFja0NsZWFyaW5nPSExfX19ZS5zdGFja1NpemU9aTtyZXR1cm4hMH1wYXJzZUNoYXJTdHJpbmdzKHtjaGFyU3RyaW5nczplLGxvY2FsU3VickluZGV4OnQsZ2xvYmFsU3VickluZGV4OmEsZmRTZWxlY3Q6bixmZEFycmF5OmkscHJpdmF0ZURpY3Q6c30pe2NvbnN0IG89W10sYz1bXSxsPWUuY291bnQ7Zm9yKGxldCBoPTA7aDxsO2grKyl7Y29uc3QgbD1lLmdldChoKSx1PXtjYWxsRGVwdGg6MCxzdGFja1NpemU6MCxzdGFjazpbXSx1bmRlZlN0YWNrOiEwLGhpbnRzOjAsZmlyc3RTdGFja0NsZWFyaW5nOiEwLHNlYWM6bnVsbCx3aWR0aDpudWxsLGhhc1ZTdGVtczohMX07bGV0IGQ9ITAsZj1udWxsLGc9cztpZihuJiZpLmxlbmd0aCl7Y29uc3QgZT1uLmdldEZESW5kZXgoaCk7aWYoLTE9PT1lKXsoMCxyLndhcm4pKCJHbHlwaCBpbmRleCBpcyBub3QgaW4gZmQgc2VsZWN0LiIpO2Q9ITF9aWYoZT49aS5sZW5ndGgpeygwLHIud2FybikoIkludmFsaWQgZmQgaW5kZXggZm9yIGdseXBoIGluZGV4LiIpO2Q9ITF9aWYoZCl7Zz1pW2VdLnByaXZhdGVEaWN0O2Y9Zy5zdWJyc0luZGV4fX1lbHNlIHQmJihmPXQpO2QmJihkPXRoaXMucGFyc2VDaGFyU3RyaW5nKHUsbCxmLGEpKTtpZihudWxsIT09dS53aWR0aCl7Y29uc3QgZT1nLmdldEJ5TmFtZSgibm9taW5hbFdpZHRoWCIpO2NbaF09ZSt1LndpZHRofWVsc2V7Y29uc3QgZT1nLmdldEJ5TmFtZSgiZGVmYXVsdFdpZHRoWCIpO2NbaF09ZX1udWxsIT09dS5zZWFjJiYob1toXT11LnNlYWMpO2R8fGUuc2V0KGgsbmV3IFVpbnQ4QXJyYXkoWzE0XSkpfXJldHVybntjaGFyU3RyaW5nczplLHNlYWNzOm8sd2lkdGhzOmN9fWVtcHR5UHJpdmF0ZURpY3Rpb25hcnkoZSl7Y29uc3QgdD10aGlzLmNyZWF0ZURpY3QoQ0ZGUHJpdmF0ZURpY3QsW10sZS5zdHJpbmdzKTtlLnNldEJ5S2V5KDE4LFswLDBdKTtlLnByaXZhdGVEaWN0PXR9cGFyc2VQcml2YXRlRGljdChlKXtpZighZS5oYXNOYW1lKCJQcml2YXRlIikpe3RoaXMuZW1wdHlQcml2YXRlRGljdGlvbmFyeShlKTtyZXR1cm59Y29uc3QgdD1lLmdldEJ5TmFtZSgiUHJpdmF0ZSIpO2lmKCFBcnJheS5pc0FycmF5KHQpfHwyIT09dC5sZW5ndGgpe2UucmVtb3ZlQnlOYW1lKCJQcml2YXRlIik7cmV0dXJufWNvbnN0IGE9dFswXSxyPXRbMV07aWYoMD09PWF8fHI+PXRoaXMuYnl0ZXMubGVuZ3RoKXt0aGlzLmVtcHR5UHJpdmF0ZURpY3Rpb25hcnkoZSk7cmV0dXJufWNvbnN0IG49cithLGk9dGhpcy5ieXRlcy5zdWJhcnJheShyLG4pLHM9dGhpcy5wYXJzZURpY3QoaSksbz10aGlzLmNyZWF0ZURpY3QoQ0ZGUHJpdmF0ZURpY3QscyxlLnN0cmluZ3MpO2UucHJpdmF0ZURpY3Q9bztpZighby5nZXRCeU5hbWUoIlN1YnJzIikpcmV0dXJuO2NvbnN0IGM9by5nZXRCeU5hbWUoIlN1YnJzIiksbD1yK2M7aWYoMD09PWN8fGw+PXRoaXMuYnl0ZXMubGVuZ3RoKXt0aGlzLmVtcHR5UHJpdmF0ZURpY3Rpb25hcnkoZSk7cmV0dXJufWNvbnN0IGg9dGhpcy5wYXJzZUluZGV4KGwpO28uc3VicnNJbmRleD1oLm9ian1wYXJzZUNoYXJzZXRzKGUsdCxhLGkpe2lmKDA9PT1lKXJldHVybiBuZXcgQ0ZGQ2hhcnNldCghMCxkLklTT19BRE9CRSxuLklTT0Fkb2JlQ2hhcnNldCk7aWYoMT09PWUpcmV0dXJuIG5ldyBDRkZDaGFyc2V0KCEwLGQuRVhQRVJULG4uRXhwZXJ0Q2hhcnNldCk7aWYoMj09PWUpcmV0dXJuIG5ldyBDRkZDaGFyc2V0KCEwLGQuRVhQRVJUX1NVQlNFVCxuLkV4cGVydFN1YnNldENoYXJzZXQpO2NvbnN0IHM9dGhpcy5ieXRlcyxvPWUsYz1zW2UrK10sbD1baT8wOiIubm90ZGVmIl07bGV0IGgsdSxmO3QtPTE7c3dpdGNoKGMpe2Nhc2UgMDpmb3IoZj0wO2Y8dDtmKyspe2g9c1tlKytdPDw4fHNbZSsrXTtsLnB1c2goaT9oOmEuZ2V0KGgpKX1icmVhaztjYXNlIDE6Zm9yKDtsLmxlbmd0aDw9dDspe2g9c1tlKytdPDw4fHNbZSsrXTt1PXNbZSsrXTtmb3IoZj0wO2Y8PXU7ZisrKWwucHVzaChpP2grKzphLmdldChoKyspKX1icmVhaztjYXNlIDI6Zm9yKDtsLmxlbmd0aDw9dDspe2g9c1tlKytdPDw4fHNbZSsrXTt1PXNbZSsrXTw8OHxzW2UrK107Zm9yKGY9MDtmPD11O2YrKylsLnB1c2goaT9oKys6YS5nZXQoaCsrKSl9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiVW5rbm93biBjaGFyc2V0IGZvcm1hdCIpfWNvbnN0IGc9ZSxwPXMuc3ViYXJyYXkobyxnKTtyZXR1cm4gbmV3IENGRkNoYXJzZXQoITEsYyxsLHApfXBhcnNlRW5jb2RpbmcoZSx0LGEsbil7Y29uc3Qgcz1PYmplY3QuY3JlYXRlKG51bGwpLG89dGhpcy5ieXRlcztsZXQgYyxsLGgsdT0hMSxkPW51bGw7aWYoMD09PWV8fDE9PT1lKXt1PSEwO2M9ZTtjb25zdCB0PWU/aS5FeHBlcnRFbmNvZGluZzppLlN0YW5kYXJkRW5jb2Rpbmc7Zm9yKGw9MCxoPW4ubGVuZ3RoO2w8aDtsKyspe2NvbnN0IGU9dC5pbmRleE9mKG5bbF0pOy0xIT09ZSYmKHNbZV09bCl9fWVsc2V7Y29uc3QgdD1lO2M9b1tlKytdO3N3aXRjaCgxMjcmYyl7Y2FzZSAwOmNvbnN0IHQ9b1tlKytdO2ZvcihsPTE7bDw9dDtsKyspc1tvW2UrK11dPWw7YnJlYWs7Y2FzZSAxOmNvbnN0IGE9b1tlKytdO2xldCBuPTE7Zm9yKGw9MDtsPGE7bCsrKXtjb25zdCB0PW9bZSsrXSxhPW9bZSsrXTtmb3IobGV0IGU9dDtlPD10K2E7ZSsrKXNbZV09bisrfWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYFVua25vd24gZW5jb2RpbmcgZm9ybWF0OiAke2N9IGluIENGRmApfWNvbnN0IGk9ZTtpZigxMjgmYyl7b1t0XSY9MTI3OyFmdW5jdGlvbiByZWFkU3VwcGxlbWVudCgpe2NvbnN0IHQ9b1tlKytdO2ZvcihsPTA7bDx0O2wrKyl7Y29uc3QgdD1vW2UrK10scj0ob1tlKytdPDw4KSsoMjU1Jm9bZSsrXSk7c1t0XT1uLmluZGV4T2YoYS5nZXQocikpfX0oKX1kPW8uc3ViYXJyYXkodCxpKX1jJj0xMjc7cmV0dXJuIG5ldyBDRkZFbmNvZGluZyh1LGMscyxkKX1wYXJzZUZEU2VsZWN0KGUsdCl7Y29uc3QgYT10aGlzLmJ5dGVzLG49YVtlKytdLGk9W107bGV0IHM7c3dpdGNoKG4pe2Nhc2UgMDpmb3Iocz0wO3M8dDsrK3Mpe2NvbnN0IHQ9YVtlKytdO2kucHVzaCh0KX1icmVhaztjYXNlIDM6Y29uc3Qgbz1hW2UrK108PDh8YVtlKytdO2ZvcihzPTA7czxvOysrcyl7bGV0IHQ9YVtlKytdPDw4fGFbZSsrXTtpZigwPT09cyYmMCE9PXQpeygwLHIud2FybikoInBhcnNlRkRTZWxlY3Q6IFRoZSBmaXJzdCByYW5nZSBtdXN0IGhhdmUgYSBmaXJzdCBHSUQgb2YgMCAtLSB0cnlpbmcgdG8gcmVjb3Zlci4iKTt0PTB9Y29uc3Qgbj1hW2UrK10sbz1hW2VdPDw4fGFbZSsxXTtmb3IobGV0IGU9dDtlPG87KytlKWkucHVzaChuKX1lKz0yO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYHBhcnNlRkRTZWxlY3Q6IFVua25vd24gZm9ybWF0ICIke259Ii5gKX1pZihpLmxlbmd0aCE9PXQpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoInBhcnNlRkRTZWxlY3Q6IEludmFsaWQgZm9udCBkYXRhLiIpO3JldHVybiBuZXcgQ0ZGRkRTZWxlY3QobixpKX19O2NsYXNzIENGRntjb25zdHJ1Y3Rvcigpe3RoaXMuaGVhZGVyPW51bGw7dGhpcy5uYW1lcz1bXTt0aGlzLnRvcERpY3Q9bnVsbDt0aGlzLnN0cmluZ3M9bmV3IENGRlN0cmluZ3M7dGhpcy5nbG9iYWxTdWJySW5kZXg9bnVsbDt0aGlzLmVuY29kaW5nPW51bGw7dGhpcy5jaGFyc2V0PW51bGw7dGhpcy5jaGFyU3RyaW5ncz1udWxsO3RoaXMuZmRBcnJheT1bXTt0aGlzLmZkU2VsZWN0PW51bGw7dGhpcy5pc0NJREZvbnQ9ITF9ZHVwbGljYXRlRmlyc3RHbHlwaCgpe2lmKHRoaXMuY2hhclN0cmluZ3MuY291bnQ+PTY1NTM1KXsoMCxyLndhcm4pKCJOb3QgZW5vdWdoIHNwYWNlIGluIGNoYXJzdHJpbmdzIHRvIGR1cGxpY2F0ZSBmaXJzdCBnbHlwaC4iKTtyZXR1cm59Y29uc3QgZT10aGlzLmNoYXJTdHJpbmdzLmdldCgwKTt0aGlzLmNoYXJTdHJpbmdzLmFkZChlKTt0aGlzLmlzQ0lERm9udCYmdGhpcy5mZFNlbGVjdC5mZFNlbGVjdC5wdXNoKHRoaXMuZmRTZWxlY3QuZmRTZWxlY3RbMF0pfWhhc0dseXBoSWQoZSl7aWYoZTwwfHxlPj10aGlzLmNoYXJTdHJpbmdzLmNvdW50KXJldHVybiExO3JldHVybiB0aGlzLmNoYXJTdHJpbmdzLmdldChlKS5sZW5ndGg+MH19dC5DRkY9Q0ZGO2NsYXNzIENGRkhlYWRlcntjb25zdHJ1Y3RvcihlLHQsYSxyKXt0aGlzLm1ham9yPWU7dGhpcy5taW5vcj10O3RoaXMuaGRyU2l6ZT1hO3RoaXMub2ZmU2l6ZT1yfX10LkNGRkhlYWRlcj1DRkZIZWFkZXI7Y2xhc3MgQ0ZGU3RyaW5nc3tjb25zdHJ1Y3Rvcigpe3RoaXMuc3RyaW5ncz1bXX1nZXQoZSl7cmV0dXJuIGU+PTAmJmU8PTM5MD9zW2VdOmUtbzw9dGhpcy5zdHJpbmdzLmxlbmd0aD90aGlzLnN0cmluZ3NbZS1vXTpzWzBdfWdldFNJRChlKXtsZXQgdD1zLmluZGV4T2YoZSk7aWYoLTEhPT10KXJldHVybiB0O3Q9dGhpcy5zdHJpbmdzLmluZGV4T2YoZSk7cmV0dXJuLTEhPT10P3QrbzotMX1hZGQoZSl7dGhpcy5zdHJpbmdzLnB1c2goZSl9Z2V0IGNvdW50KCl7cmV0dXJuIHRoaXMuc3RyaW5ncy5sZW5ndGh9fXQuQ0ZGU3RyaW5ncz1DRkZTdHJpbmdzO2NsYXNzIENGRkluZGV4e2NvbnN0cnVjdG9yKCl7dGhpcy5vYmplY3RzPVtdO3RoaXMubGVuZ3RoPTB9YWRkKGUpe3RoaXMubGVuZ3RoKz1lLmxlbmd0aDt0aGlzLm9iamVjdHMucHVzaChlKX1zZXQoZSx0KXt0aGlzLmxlbmd0aCs9dC5sZW5ndGgtdGhpcy5vYmplY3RzW2VdLmxlbmd0aDt0aGlzLm9iamVjdHNbZV09dH1nZXQoZSl7cmV0dXJuIHRoaXMub2JqZWN0c1tlXX1nZXQgY291bnQoKXtyZXR1cm4gdGhpcy5vYmplY3RzLmxlbmd0aH19dC5DRkZJbmRleD1DRkZJbmRleDtjbGFzcyBDRkZEaWN0e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5rZXlUb05hbWVNYXA9ZS5rZXlUb05hbWVNYXA7dGhpcy5uYW1lVG9LZXlNYXA9ZS5uYW1lVG9LZXlNYXA7dGhpcy5kZWZhdWx0cz1lLmRlZmF1bHRzO3RoaXMudHlwZXM9ZS50eXBlczt0aGlzLm9wY29kZXM9ZS5vcGNvZGVzO3RoaXMub3JkZXI9ZS5vcmRlcjt0aGlzLnN0cmluZ3M9dDt0aGlzLnZhbHVlcz1PYmplY3QuY3JlYXRlKG51bGwpfXNldEJ5S2V5KGUsdCl7aWYoIShlIGluIHRoaXMua2V5VG9OYW1lTWFwKSlyZXR1cm4hMTtpZigwPT09dC5sZW5ndGgpcmV0dXJuITA7Zm9yKGNvbnN0IGEgb2YgdClpZihpc05hTihhKSl7KDAsci53YXJuKShgSW52YWxpZCBDRkZEaWN0IHZhbHVlOiAiJHt0fSIgZm9yIGtleSAiJHtlfSIuYCk7cmV0dXJuITB9Y29uc3QgYT10aGlzLnR5cGVzW2VdOyJudW0iIT09YSYmInNpZCIhPT1hJiYib2Zmc2V0IiE9PWF8fCh0PXRbMF0pO3RoaXMudmFsdWVzW2VdPXQ7cmV0dXJuITB9c2V0QnlOYW1lKGUsdCl7aWYoIShlIGluIHRoaXMubmFtZVRvS2V5TWFwKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgSW52YWxpZCBkaWN0aW9uYXJ5IG5hbWUgIiR7ZX0iYCk7dGhpcy52YWx1ZXNbdGhpcy5uYW1lVG9LZXlNYXBbZV1dPXR9aGFzTmFtZShlKXtyZXR1cm4gdGhpcy5uYW1lVG9LZXlNYXBbZV1pbiB0aGlzLnZhbHVlc31nZXRCeU5hbWUoZSl7aWYoIShlIGluIHRoaXMubmFtZVRvS2V5TWFwKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgSW52YWxpZCBkaWN0aW9uYXJ5IG5hbWUgJHtlfSJgKTtjb25zdCB0PXRoaXMubmFtZVRvS2V5TWFwW2VdO3JldHVybiB0IGluIHRoaXMudmFsdWVzP3RoaXMudmFsdWVzW3RdOnRoaXMuZGVmYXVsdHNbdF19cmVtb3ZlQnlOYW1lKGUpe2RlbGV0ZSB0aGlzLnZhbHVlc1t0aGlzLm5hbWVUb0tleU1hcFtlXV19c3RhdGljIGNyZWF0ZVRhYmxlcyhlKXtjb25zdCB0PXtrZXlUb05hbWVNYXA6e30sbmFtZVRvS2V5TWFwOnt9LGRlZmF1bHRzOnt9LHR5cGVzOnt9LG9wY29kZXM6e30sb3JkZXI6W119O2Zvcihjb25zdCBhIG9mIGUpe2NvbnN0IGU9QXJyYXkuaXNBcnJheShhWzBdKT8oYVswXVswXTw8OCkrYVswXVsxXTphWzBdO3Qua2V5VG9OYW1lTWFwW2VdPWFbMV07dC5uYW1lVG9LZXlNYXBbYVsxXV09ZTt0LnR5cGVzW2VdPWFbMl07dC5kZWZhdWx0c1tlXT1hWzNdO3Qub3Bjb2Rlc1tlXT1BcnJheS5pc0FycmF5KGFbMF0pP2FbMF06W2FbMF1dO3Qub3JkZXIucHVzaChlKX1yZXR1cm4gdH19Y29uc3QgaD1bW1sxMiwzMF0sIlJPUyIsWyJzaWQiLCJzaWQiLCJudW0iXSxudWxsXSxbWzEyLDIwXSwiU3ludGhldGljQmFzZSIsIm51bSIsbnVsbF0sWzAsInZlcnNpb24iLCJzaWQiLG51bGxdLFsxLCJOb3RpY2UiLCJzaWQiLG51bGxdLFtbMTIsMF0sIkNvcHlyaWdodCIsInNpZCIsbnVsbF0sWzIsIkZ1bGxOYW1lIiwic2lkIixudWxsXSxbMywiRmFtaWx5TmFtZSIsInNpZCIsbnVsbF0sWzQsIldlaWdodCIsInNpZCIsbnVsbF0sW1sxMiwxXSwiaXNGaXhlZFBpdGNoIiwibnVtIiwwXSxbWzEyLDJdLCJJdGFsaWNBbmdsZSIsIm51bSIsMF0sW1sxMiwzXSwiVW5kZXJsaW5lUG9zaXRpb24iLCJudW0iLC0xMDBdLFtbMTIsNF0sIlVuZGVybGluZVRoaWNrbmVzcyIsIm51bSIsNTBdLFtbMTIsNV0sIlBhaW50VHlwZSIsIm51bSIsMF0sW1sxMiw2XSwiQ2hhcnN0cmluZ1R5cGUiLCJudW0iLDJdLFtbMTIsN10sIkZvbnRNYXRyaXgiLFsibnVtIiwibnVtIiwibnVtIiwibnVtIiwibnVtIiwibnVtIl0sWy4wMDEsMCwwLC4wMDEsMCwwXV0sWzEzLCJVbmlxdWVJRCIsIm51bSIsbnVsbF0sWzUsIkZvbnRCQm94IixbIm51bSIsIm51bSIsIm51bSIsIm51bSJdLFswLDAsMCwwXV0sW1sxMiw4XSwiU3Ryb2tlV2lkdGgiLCJudW0iLDBdLFsxNCwiWFVJRCIsImFycmF5IixudWxsXSxbMTUsImNoYXJzZXQiLCJvZmZzZXQiLDBdLFsxNiwiRW5jb2RpbmciLCJvZmZzZXQiLDBdLFsxNywiQ2hhclN0cmluZ3MiLCJvZmZzZXQiLDBdLFsxOCwiUHJpdmF0ZSIsWyJvZmZzZXQiLCJvZmZzZXQiXSxudWxsXSxbWzEyLDIxXSwiUG9zdFNjcmlwdCIsInNpZCIsbnVsbF0sW1sxMiwyMl0sIkJhc2VGb250TmFtZSIsInNpZCIsbnVsbF0sW1sxMiwyM10sIkJhc2VGb250QmxlbmQiLCJkZWx0YSIsbnVsbF0sW1sxMiwzMV0sIkNJREZvbnRWZXJzaW9uIiwibnVtIiwwXSxbWzEyLDMyXSwiQ0lERm9udFJldmlzaW9uIiwibnVtIiwwXSxbWzEyLDMzXSwiQ0lERm9udFR5cGUiLCJudW0iLDBdLFtbMTIsMzRdLCJDSURDb3VudCIsIm51bSIsODcyMF0sW1sxMiwzNV0sIlVJREJhc2UiLCJudW0iLG51bGxdLFtbMTIsMzddLCJGRFNlbGVjdCIsIm9mZnNldCIsbnVsbF0sW1sxMiwzNl0sIkZEQXJyYXkiLCJvZmZzZXQiLG51bGxdLFtbMTIsMzhdLCJGb250TmFtZSIsInNpZCIsbnVsbF1dO2NsYXNzIENGRlRvcERpY3QgZXh0ZW5kcyBDRkZEaWN0e3N0YXRpYyBnZXQgdGFibGVzKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsInRhYmxlcyIsdGhpcy5jcmVhdGVUYWJsZXMoaCkpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKENGRlRvcERpY3QudGFibGVzLGUpO3RoaXMucHJpdmF0ZURpY3Q9bnVsbH19dC5DRkZUb3BEaWN0PUNGRlRvcERpY3Q7Y29uc3QgdT1bWzYsIkJsdWVWYWx1ZXMiLCJkZWx0YSIsbnVsbF0sWzcsIk90aGVyQmx1ZXMiLCJkZWx0YSIsbnVsbF0sWzgsIkZhbWlseUJsdWVzIiwiZGVsdGEiLG51bGxdLFs5LCJGYW1pbHlPdGhlckJsdWVzIiwiZGVsdGEiLG51bGxdLFtbMTIsOV0sIkJsdWVTY2FsZSIsIm51bSIsLjAzOTYyNV0sW1sxMiwxMF0sIkJsdWVTaGlmdCIsIm51bSIsN10sW1sxMiwxMV0sIkJsdWVGdXp6IiwibnVtIiwxXSxbMTAsIlN0ZEhXIiwibnVtIixudWxsXSxbMTEsIlN0ZFZXIiwibnVtIixudWxsXSxbWzEyLDEyXSwiU3RlbVNuYXBIIiwiZGVsdGEiLG51bGxdLFtbMTIsMTNdLCJTdGVtU25hcFYiLCJkZWx0YSIsbnVsbF0sW1sxMiwxNF0sIkZvcmNlQm9sZCIsIm51bSIsMF0sW1sxMiwxN10sIkxhbmd1YWdlR3JvdXAiLCJudW0iLDBdLFtbMTIsMThdLCJFeHBhbnNpb25GYWN0b3IiLCJudW0iLC4wNl0sW1sxMiwxOV0sImluaXRpYWxSYW5kb21TZWVkIiwibnVtIiwwXSxbMjAsImRlZmF1bHRXaWR0aFgiLCJudW0iLDBdLFsyMSwibm9taW5hbFdpZHRoWCIsIm51bSIsMF0sWzE5LCJTdWJycyIsIm9mZnNldCIsbnVsbF1dO2NsYXNzIENGRlByaXZhdGVEaWN0IGV4dGVuZHMgQ0ZGRGljdHtzdGF0aWMgZ2V0IHRhYmxlcygpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJ0YWJsZXMiLHRoaXMuY3JlYXRlVGFibGVzKHUpKX1jb25zdHJ1Y3RvcihlKXtzdXBlcihDRkZQcml2YXRlRGljdC50YWJsZXMsZSk7dGhpcy5zdWJyc0luZGV4PW51bGx9fXQuQ0ZGUHJpdmF0ZURpY3Q9Q0ZGUHJpdmF0ZURpY3Q7Y29uc3QgZD17SVNPX0FET0JFOjAsRVhQRVJUOjEsRVhQRVJUX1NVQlNFVDoyfTtjbGFzcyBDRkZDaGFyc2V0e2NvbnN0cnVjdG9yKGUsdCxhLHIpe3RoaXMucHJlZGVmaW5lZD1lO3RoaXMuZm9ybWF0PXQ7dGhpcy5jaGFyc2V0PWE7dGhpcy5yYXc9cn19dC5DRkZDaGFyc2V0PUNGRkNoYXJzZXQ7Y2xhc3MgQ0ZGRW5jb2Rpbmd7Y29uc3RydWN0b3IoZSx0LGEscil7dGhpcy5wcmVkZWZpbmVkPWU7dGhpcy5mb3JtYXQ9dDt0aGlzLmVuY29kaW5nPWE7dGhpcy5yYXc9cn19Y2xhc3MgQ0ZGRkRTZWxlY3R7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmZvcm1hdD1lO3RoaXMuZmRTZWxlY3Q9dH1nZXRGREluZGV4KGUpe3JldHVybiBlPDB8fGU+PXRoaXMuZmRTZWxlY3QubGVuZ3RoPy0xOnRoaXMuZmRTZWxlY3RbZV19fXQuQ0ZGRkRTZWxlY3Q9Q0ZGRkRTZWxlY3Q7Y2xhc3MgQ0ZGT2Zmc2V0VHJhY2tlcntjb25zdHJ1Y3Rvcigpe3RoaXMub2Zmc2V0cz1PYmplY3QuY3JlYXRlKG51bGwpfWlzVHJhY2tpbmcoZSl7cmV0dXJuIGUgaW4gdGhpcy5vZmZzZXRzfXRyYWNrKGUsdCl7aWYoZSBpbiB0aGlzLm9mZnNldHMpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYEFscmVhZHkgdHJhY2tpbmcgbG9jYXRpb24gb2YgJHtlfWApO3RoaXMub2Zmc2V0c1tlXT10fW9mZnNldChlKXtmb3IoY29uc3QgdCBpbiB0aGlzLm9mZnNldHMpdGhpcy5vZmZzZXRzW3RdKz1lfXNldEVudHJ5TG9jYXRpb24oZSx0LGEpe2lmKCEoZSBpbiB0aGlzLm9mZnNldHMpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBOb3QgdHJhY2tpbmcgbG9jYXRpb24gb2YgJHtlfWApO2NvbnN0IG49YS5kYXRhLGk9dGhpcy5vZmZzZXRzW2VdO2ZvcihsZXQgZT0wLGE9dC5sZW5ndGg7ZTxhOysrZSl7Y29uc3QgYT01KmUraSxzPWErMSxvPWErMixjPWErMyxsPWErNDtpZigyOSE9PW5bYV18fDAhPT1uW3NdfHwwIT09bltvXXx8MCE9PW5bY118fDAhPT1uW2xdKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJ3cml0aW5nIHRvIGFuIG9mZnNldCB0aGF0IGlzIG5vdCBlbXB0eSIpO2NvbnN0IGg9dFtlXTtuW2FdPTI5O25bc109aD4+MjQmMjU1O25bb109aD4+MTYmMjU1O25bY109aD4+OCYyNTU7bltsXT0yNTUmaH19fWNsYXNzIENGRkNvbXBpbGVye2NvbnN0cnVjdG9yKGUpe3RoaXMuY2ZmPWV9Y29tcGlsZSgpe2NvbnN0IGU9dGhpcy5jZmYsdD17ZGF0YTpbXSxsZW5ndGg6MCxhZGQoZSl7dGhpcy5kYXRhPXRoaXMuZGF0YS5jb25jYXQoZSk7dGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aH19LGE9dGhpcy5jb21waWxlSGVhZGVyKGUuaGVhZGVyKTt0LmFkZChhKTtjb25zdCBuPXRoaXMuY29tcGlsZU5hbWVJbmRleChlLm5hbWVzKTt0LmFkZChuKTtpZihlLmlzQ0lERm9udCYmZS50b3BEaWN0Lmhhc05hbWUoIkZvbnRNYXRyaXgiKSl7Y29uc3QgdD1lLnRvcERpY3QuZ2V0QnlOYW1lKCJGb250TWF0cml4Iik7ZS50b3BEaWN0LnJlbW92ZUJ5TmFtZSgiRm9udE1hdHJpeCIpO2Zvcihjb25zdCBhIG9mIGUuZmRBcnJheSl7bGV0IGU9dC5zbGljZSgwKTthLmhhc05hbWUoIkZvbnRNYXRyaXgiKSYmKGU9ci5VdGlsLnRyYW5zZm9ybShlLGEuZ2V0QnlOYW1lKCJGb250TWF0cml4IikpKTthLnNldEJ5TmFtZSgiRm9udE1hdHJpeCIsZSl9fWNvbnN0IGk9ZS50b3BEaWN0LmdldEJ5TmFtZSgiWFVJRCIpO2kmJmkubGVuZ3RoPjE2JiZlLnRvcERpY3QucmVtb3ZlQnlOYW1lKCJYVUlEIik7ZS50b3BEaWN0LnNldEJ5TmFtZSgiY2hhcnNldCIsMCk7bGV0IHM9dGhpcy5jb21waWxlVG9wRGljdHMoW2UudG9wRGljdF0sdC5sZW5ndGgsZS5pc0NJREZvbnQpO3QuYWRkKHMub3V0cHV0KTtjb25zdCBvPXMudHJhY2tlcnNbMF0sYz10aGlzLmNvbXBpbGVTdHJpbmdJbmRleChlLnN0cmluZ3Muc3RyaW5ncyk7dC5hZGQoYyk7Y29uc3QgbD10aGlzLmNvbXBpbGVJbmRleChlLmdsb2JhbFN1YnJJbmRleCk7dC5hZGQobCk7aWYoZS5lbmNvZGluZyYmZS50b3BEaWN0Lmhhc05hbWUoIkVuY29kaW5nIikpaWYoZS5lbmNvZGluZy5wcmVkZWZpbmVkKW8uc2V0RW50cnlMb2NhdGlvbigiRW5jb2RpbmciLFtlLmVuY29kaW5nLmZvcm1hdF0sdCk7ZWxzZXtjb25zdCBhPXRoaXMuY29tcGlsZUVuY29kaW5nKGUuZW5jb2RpbmcpO28uc2V0RW50cnlMb2NhdGlvbigiRW5jb2RpbmciLFt0Lmxlbmd0aF0sdCk7dC5hZGQoYSl9Y29uc3QgaD10aGlzLmNvbXBpbGVDaGFyc2V0KGUuY2hhcnNldCxlLmNoYXJTdHJpbmdzLmNvdW50LGUuc3RyaW5ncyxlLmlzQ0lERm9udCk7by5zZXRFbnRyeUxvY2F0aW9uKCJjaGFyc2V0IixbdC5sZW5ndGhdLHQpO3QuYWRkKGgpO2NvbnN0IHU9dGhpcy5jb21waWxlQ2hhclN0cmluZ3MoZS5jaGFyU3RyaW5ncyk7by5zZXRFbnRyeUxvY2F0aW9uKCJDaGFyU3RyaW5ncyIsW3QubGVuZ3RoXSx0KTt0LmFkZCh1KTtpZihlLmlzQ0lERm9udCl7by5zZXRFbnRyeUxvY2F0aW9uKCJGRFNlbGVjdCIsW3QubGVuZ3RoXSx0KTtjb25zdCBhPXRoaXMuY29tcGlsZUZEU2VsZWN0KGUuZmRTZWxlY3QpO3QuYWRkKGEpO3M9dGhpcy5jb21waWxlVG9wRGljdHMoZS5mZEFycmF5LHQubGVuZ3RoLCEwKTtvLnNldEVudHJ5TG9jYXRpb24oIkZEQXJyYXkiLFt0Lmxlbmd0aF0sdCk7dC5hZGQocy5vdXRwdXQpO2NvbnN0IHI9cy50cmFja2Vyczt0aGlzLmNvbXBpbGVQcml2YXRlRGljdHMoZS5mZEFycmF5LHIsdCl9dGhpcy5jb21waWxlUHJpdmF0ZURpY3RzKFtlLnRvcERpY3RdLFtvXSx0KTt0LmFkZChbMF0pO3JldHVybiB0LmRhdGF9ZW5jb2RlTnVtYmVyKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpP3RoaXMuZW5jb2RlSW50ZWdlcihlKTp0aGlzLmVuY29kZUZsb2F0KGUpfXN0YXRpYyBnZXQgRW5jb2RlRmxvYXRSZWdFeHAoKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiRW5jb2RlRmxvYXRSZWdFeHAiLC9cLihcZCo/KSg/Ojl7NSwyMH18MHs1LDIwfSlcZHswLDJ9KD86ZSguKyl8JCkvKX1lbmNvZGVGbG9hdChlKXtsZXQgdD1lLnRvU3RyaW5nKCk7Y29uc3QgYT1DRkZDb21waWxlci5FbmNvZGVGbG9hdFJlZ0V4cC5leGVjKHQpO2lmKGEpe2NvbnN0IHI9cGFyc2VGbG9hdCgiMWUiKygoYVsyXT8rYVsyXTowKSthWzFdLmxlbmd0aCkpO3Q9KE1hdGgucm91bmQoZSpyKS9yKS50b1N0cmluZygpfWxldCByLG4saT0iIjtmb3Iocj0wLG49dC5sZW5ndGg7cjxuOysrcil7Y29uc3QgZT10W3JdO2krPSJlIj09PWU/Ii0iPT09dFsrK3JdPyJjIjoiYiI6Ii4iPT09ZT8iYSI6Ii0iPT09ZT8iZSI6ZX1pKz0xJmkubGVuZ3RoPyJmIjoiZmYiO2NvbnN0IHM9WzMwXTtmb3Iocj0wLG49aS5sZW5ndGg7cjxuO3IrPTIpcy5wdXNoKHBhcnNlSW50KGkuc3Vic3RyaW5nKHIscisyKSwxNikpO3JldHVybiBzfWVuY29kZUludGVnZXIoZSl7bGV0IHQ7dD1lPj0tMTA3JiZlPD0xMDc/W2UrMTM5XTplPj0xMDgmJmU8PTExMzE/WzI0NysoKGUtPTEwOCk+PjgpLDI1NSZlXTplPj0tMTEzMSYmZTw9LTEwOD9bMjUxKygoZT0tZS0xMDgpPj44KSwyNTUmZV06ZT49LTMyNzY4JiZlPD0zMjc2Nz9bMjgsZT4+OCYyNTUsMjU1JmVdOlsyOSxlPj4yNCYyNTUsZT4+MTYmMjU1LGU+PjgmMjU1LDI1NSZlXTtyZXR1cm4gdH1jb21waWxlSGVhZGVyKGUpe3JldHVybltlLm1ham9yLGUubWlub3IsNCxlLm9mZlNpemVdfWNvbXBpbGVOYW1lSW5kZXgoZSl7Y29uc3QgdD1uZXcgQ0ZGSW5kZXg7Zm9yKGNvbnN0IGEgb2YgZSl7Y29uc3QgZT1NYXRoLm1pbihhLmxlbmd0aCwxMjcpO2xldCBuPW5ldyBBcnJheShlKTtmb3IobGV0IHQ9MDt0PGU7dCsrKXtsZXQgZT1hW3RdOyhlPCIhInx8ZT4ifiJ8fCJbIj09PWV8fCJdIj09PWV8fCIoIj09PWV8fCIpIj09PWV8fCJ7Ij09PWV8fCJ9Ij09PWV8fCI8Ij09PWV8fCI+Ij09PWV8fCIvIj09PWV8fCIlIj09PWUpJiYoZT0iXyIpO25bdF09ZX1uPW4uam9pbigiIik7IiI9PT1uJiYobj0iQmFkX0ZvbnRfTmFtZSIpO3QuYWRkKCgwLHIuc3RyaW5nVG9CeXRlcykobikpfXJldHVybiB0aGlzLmNvbXBpbGVJbmRleCh0KX1jb21waWxlVG9wRGljdHMoZSx0LGEpe2NvbnN0IHI9W107bGV0IG49bmV3IENGRkluZGV4O2Zvcihjb25zdCBpIG9mIGUpe2lmKGEpe2kucmVtb3ZlQnlOYW1lKCJDSURGb250VmVyc2lvbiIpO2kucmVtb3ZlQnlOYW1lKCJDSURGb250UmV2aXNpb24iKTtpLnJlbW92ZUJ5TmFtZSgiQ0lERm9udFR5cGUiKTtpLnJlbW92ZUJ5TmFtZSgiQ0lEQ291bnQiKTtpLnJlbW92ZUJ5TmFtZSgiVUlEQmFzZSIpfWNvbnN0IGU9bmV3IENGRk9mZnNldFRyYWNrZXIscz10aGlzLmNvbXBpbGVEaWN0KGksZSk7ci5wdXNoKGUpO24uYWRkKHMpO2Uub2Zmc2V0KHQpfW49dGhpcy5jb21waWxlSW5kZXgobixyKTtyZXR1cm57dHJhY2tlcnM6cixvdXRwdXQ6bn19Y29tcGlsZVByaXZhdGVEaWN0cyhlLHQsYSl7Zm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKXtjb25zdCBpPWVbbl0scz1pLnByaXZhdGVEaWN0O2lmKCFzfHwhaS5oYXNOYW1lKCJQcml2YXRlIikpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIlRoZXJlIG11c3QgYmUgYSBwcml2YXRlIGRpY3Rpb25hcnkuIik7Y29uc3Qgbz1uZXcgQ0ZGT2Zmc2V0VHJhY2tlcixjPXRoaXMuY29tcGlsZURpY3QocyxvKTtsZXQgbD1hLmxlbmd0aDtvLm9mZnNldChsKTtjLmxlbmd0aHx8KGw9MCk7dFtuXS5zZXRFbnRyeUxvY2F0aW9uKCJQcml2YXRlIixbYy5sZW5ndGgsbF0sYSk7YS5hZGQoYyk7aWYocy5zdWJyc0luZGV4JiZzLmhhc05hbWUoIlN1YnJzIikpe2NvbnN0IGU9dGhpcy5jb21waWxlSW5kZXgocy5zdWJyc0luZGV4KTtvLnNldEVudHJ5TG9jYXRpb24oIlN1YnJzIixbYy5sZW5ndGhdLGEpO2EuYWRkKGUpfX19Y29tcGlsZURpY3QoZSx0KXtjb25zdCBhPVtdO2Zvcihjb25zdCBuIG9mIGUub3JkZXIpe2lmKCEobiBpbiBlLnZhbHVlcykpY29udGludWU7bGV0IGk9ZS52YWx1ZXNbbl0scz1lLnR5cGVzW25dO0FycmF5LmlzQXJyYXkocyl8fChzPVtzXSk7QXJyYXkuaXNBcnJheShpKXx8KGk9W2ldKTtpZigwIT09aS5sZW5ndGgpe2ZvcihsZXQgbz0wLGM9cy5sZW5ndGg7bzxjOysrbyl7Y29uc3QgYz1zW29dLGw9aVtvXTtzd2l0Y2goYyl7Y2FzZSJudW0iOmNhc2Uic2lkIjphLnB1c2goLi4udGhpcy5lbmNvZGVOdW1iZXIobCkpO2JyZWFrO2Nhc2Uib2Zmc2V0Ijpjb25zdCBzPWUua2V5VG9OYW1lTWFwW25dO3QuaXNUcmFja2luZyhzKXx8dC50cmFjayhzLGEubGVuZ3RoKTthLnB1c2goMjksMCwwLDAsMCk7YnJlYWs7Y2FzZSJhcnJheSI6Y2FzZSJkZWx0YSI6YS5wdXNoKC4uLnRoaXMuZW5jb2RlTnVtYmVyKGwpKTtmb3IobGV0IGU9MSx0PWkubGVuZ3RoO2U8dDsrK2UpYS5wdXNoKC4uLnRoaXMuZW5jb2RlTnVtYmVyKGlbZV0pKTticmVhaztkZWZhdWx0OnRocm93IG5ldyByLkZvcm1hdEVycm9yKGBVbmtub3duIGRhdGEgdHlwZSBvZiAke2N9YCl9fWEucHVzaCguLi5lLm9wY29kZXNbbl0pfX1yZXR1cm4gYX1jb21waWxlU3RyaW5nSW5kZXgoZSl7Y29uc3QgdD1uZXcgQ0ZGSW5kZXg7Zm9yKGNvbnN0IGEgb2YgZSl0LmFkZCgoMCxyLnN0cmluZ1RvQnl0ZXMpKGEpKTtyZXR1cm4gdGhpcy5jb21waWxlSW5kZXgodCl9Y29tcGlsZUdsb2JhbFN1YnJJbmRleCgpe2NvbnN0IGU9dGhpcy5jZmYuZ2xvYmFsU3VickluZGV4O3RoaXMub3V0LndyaXRlQnl0ZUFycmF5KHRoaXMuY29tcGlsZUluZGV4KGUpKX1jb21waWxlQ2hhclN0cmluZ3MoZSl7Y29uc3QgdD1uZXcgQ0ZGSW5kZXg7Zm9yKGxldCBhPTA7YTxlLmNvdW50O2ErKyl7Y29uc3Qgcj1lLmdldChhKTswIT09ci5sZW5ndGg/dC5hZGQocik6dC5hZGQobmV3IFVpbnQ4QXJyYXkoWzEzOSwxNF0pKX1yZXR1cm4gdGhpcy5jb21waWxlSW5kZXgodCl9Y29tcGlsZUNoYXJzZXQoZSx0LGEsbil7bGV0IGk7Y29uc3Qgcz10LTE7aWYobilpPW5ldyBVaW50OEFycmF5KFsyLDAsMCxzPj44JjI1NSwyNTUmc10pO2Vsc2V7aT1uZXcgVWludDhBcnJheSgxKzIqcyk7aVswXT0wO2xldCB0PTA7Y29uc3Qgbj1lLmNoYXJzZXQubGVuZ3RoO2xldCBvPSExO2ZvcihsZXQgcz0xO3M8aS5sZW5ndGg7cys9Mil7bGV0IGM9MDtpZih0PG4pe2NvbnN0IG49ZS5jaGFyc2V0W3QrK107Yz1hLmdldFNJRChuKTtpZigtMT09PWMpe2M9MDtpZighbyl7bz0hMDsoMCxyLndhcm4pKGBDb3VsZG4ndCBmaW5kICR7bn0gaW4gQ0ZGIHN0cmluZ3NgKX19fWlbc109Yz4+OCYyNTU7aVtzKzFdPTI1NSZjfX1yZXR1cm4gdGhpcy5jb21waWxlVHlwZWRBcnJheShpKX1jb21waWxlRW5jb2RpbmcoZSl7cmV0dXJuIHRoaXMuY29tcGlsZVR5cGVkQXJyYXkoZS5yYXcpfWNvbXBpbGVGRFNlbGVjdChlKXtjb25zdCB0PWUuZm9ybWF0O2xldCBhLHI7c3dpdGNoKHQpe2Nhc2UgMDphPW5ldyBVaW50OEFycmF5KDErZS5mZFNlbGVjdC5sZW5ndGgpO2FbMF09dDtmb3Iocj0wO3I8ZS5mZFNlbGVjdC5sZW5ndGg7cisrKWFbcisxXT1lLmZkU2VsZWN0W3JdO2JyZWFrO2Nhc2UgMzpjb25zdCBuPTA7bGV0IGk9ZS5mZFNlbGVjdFswXTtjb25zdCBzPVt0LDAsMCxuPj44JjI1NSwyNTUmbixpXTtmb3Iocj0xO3I8ZS5mZFNlbGVjdC5sZW5ndGg7cisrKXtjb25zdCB0PWUuZmRTZWxlY3Rbcl07aWYodCE9PWkpe3MucHVzaChyPj44JjI1NSwyNTUmcix0KTtpPXR9fWNvbnN0IG89KHMubGVuZ3RoLTMpLzM7c1sxXT1vPj44JjI1NTtzWzJdPTI1NSZvO3MucHVzaChyPj44JjI1NSwyNTUmcik7YT1uZXcgVWludDhBcnJheShzKX1yZXR1cm4gdGhpcy5jb21waWxlVHlwZWRBcnJheShhKX1jb21waWxlVHlwZWRBcnJheShlKXtjb25zdCB0PVtdO2ZvcihsZXQgYT0wLHI9ZS5sZW5ndGg7YTxyOysrYSl0W2FdPWVbYV07cmV0dXJuIHR9Y29tcGlsZUluZGV4KGUsdD1bXSl7Y29uc3QgYT1lLm9iamVjdHMscj1hLmxlbmd0aDtpZigwPT09cilyZXR1cm5bMCwwXTtjb25zdCBuPVtyPj44JjI1NSwyNTUmcl07bGV0IGkscyxvPTE7Zm9yKGk9MDtpPHI7KytpKW8rPWFbaV0ubGVuZ3RoO3M9bzwyNTY/MTpvPDY1NTM2PzI6bzwxNjc3NzIxNj8zOjQ7bi5wdXNoKHMpO2xldCBjPTE7Zm9yKGk9MDtpPHIrMTtpKyspezE9PT1zP24ucHVzaCgyNTUmYyk6Mj09PXM/bi5wdXNoKGM+PjgmMjU1LDI1NSZjKTozPT09cz9uLnB1c2goYz4+MTYmMjU1LGM+PjgmMjU1LDI1NSZjKTpuLnB1c2goYz4+PjI0JjI1NSxjPj4xNiYyNTUsYz4+OCYyNTUsMjU1JmMpO2FbaV0mJihjKz1hW2ldLmxlbmd0aCl9Zm9yKGk9MDtpPHI7aSsrKXt0W2ldJiZ0W2ldLm9mZnNldChuLmxlbmd0aCk7bi5wdXNoKC4uLmFbaV0pfXJldHVybiBufX10LkNGRkNvbXBpbGVyPUNGRkNvbXBpbGVyfSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LklTT0Fkb2JlQ2hhcnNldD10LkV4cGVydFN1YnNldENoYXJzZXQ9dC5FeHBlcnRDaGFyc2V0PXZvaWQgMDt0LklTT0Fkb2JlQ2hhcnNldD1bIi5ub3RkZWYiLCJzcGFjZSIsImV4Y2xhbSIsInF1b3RlZGJsIiwibnVtYmVyc2lnbiIsImRvbGxhciIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJxdW90ZXJpZ2h0IiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJxdW90ZWxlZnQiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJhc2NpaXRpbGRlIiwiZXhjbGFtZG93biIsImNlbnQiLCJzdGVybGluZyIsImZyYWN0aW9uIiwieWVuIiwiZmxvcmluIiwic2VjdGlvbiIsImN1cnJlbmN5IiwicXVvdGVzaW5nbGUiLCJxdW90ZWRibGxlZnQiLCJndWlsbGVtb3RsZWZ0IiwiZ3VpbHNpbmdsbGVmdCIsImd1aWxzaW5nbHJpZ2h0IiwiZmkiLCJmbCIsImVuZGFzaCIsImRhZ2dlciIsImRhZ2dlcmRibCIsInBlcmlvZGNlbnRlcmVkIiwicGFyYWdyYXBoIiwiYnVsbGV0IiwicXVvdGVzaW5nbGJhc2UiLCJxdW90ZWRibGJhc2UiLCJxdW90ZWRibHJpZ2h0IiwiZ3VpbGxlbW90cmlnaHQiLCJlbGxpcHNpcyIsInBlcnRob3VzYW5kIiwicXVlc3Rpb25kb3duIiwiZ3JhdmUiLCJhY3V0ZSIsImNpcmN1bWZsZXgiLCJ0aWxkZSIsIm1hY3JvbiIsImJyZXZlIiwiZG90YWNjZW50IiwiZGllcmVzaXMiLCJyaW5nIiwiY2VkaWxsYSIsImh1bmdhcnVtbGF1dCIsIm9nb25layIsImNhcm9uIiwiZW1kYXNoIiwiQUUiLCJvcmRmZW1pbmluZSIsIkxzbGFzaCIsIk9zbGFzaCIsIk9FIiwib3JkbWFzY3VsaW5lIiwiYWUiLCJkb3RsZXNzaSIsImxzbGFzaCIsIm9zbGFzaCIsIm9lIiwiZ2VybWFuZGJscyIsIm9uZXN1cGVyaW9yIiwibG9naWNhbG5vdCIsIm11IiwidHJhZGVtYXJrIiwiRXRoIiwib25laGFsZiIsInBsdXNtaW51cyIsIlRob3JuIiwib25lcXVhcnRlciIsImRpdmlkZSIsImJyb2tlbmJhciIsImRlZ3JlZSIsInRob3JuIiwidGhyZWVxdWFydGVycyIsInR3b3N1cGVyaW9yIiwicmVnaXN0ZXJlZCIsIm1pbnVzIiwiZXRoIiwibXVsdGlwbHkiLCJ0aHJlZXN1cGVyaW9yIiwiY29weXJpZ2h0IiwiQWFjdXRlIiwiQWNpcmN1bWZsZXgiLCJBZGllcmVzaXMiLCJBZ3JhdmUiLCJBcmluZyIsIkF0aWxkZSIsIkNjZWRpbGxhIiwiRWFjdXRlIiwiRWNpcmN1bWZsZXgiLCJFZGllcmVzaXMiLCJFZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIklncmF2ZSIsIk50aWxkZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiT2RpZXJlc2lzIiwiT2dyYXZlIiwiT3RpbGRlIiwiU2Nhcm9uIiwiVWFjdXRlIiwiVWNpcmN1bWZsZXgiLCJVZGllcmVzaXMiLCJVZ3JhdmUiLCJZYWN1dGUiLCJZZGllcmVzaXMiLCJaY2Fyb24iLCJhYWN1dGUiLCJhY2lyY3VtZmxleCIsImFkaWVyZXNpcyIsImFncmF2ZSIsImFyaW5nIiwiYXRpbGRlIiwiY2NlZGlsbGEiLCJlYWN1dGUiLCJlY2lyY3VtZmxleCIsImVkaWVyZXNpcyIsImVncmF2ZSIsImlhY3V0ZSIsImljaXJjdW1mbGV4IiwiaWRpZXJlc2lzIiwiaWdyYXZlIiwibnRpbGRlIiwib2FjdXRlIiwib2NpcmN1bWZsZXgiLCJvZGllcmVzaXMiLCJvZ3JhdmUiLCJvdGlsZGUiLCJzY2Fyb24iLCJ1YWN1dGUiLCJ1Y2lyY3VtZmxleCIsInVkaWVyZXNpcyIsInVncmF2ZSIsInlhY3V0ZSIsInlkaWVyZXNpcyIsInpjYXJvbiJdO3QuRXhwZXJ0Q2hhcnNldD1bIi5ub3RkZWYiLCJzcGFjZSIsImV4Y2xhbXNtYWxsIiwiSHVuZ2FydW1sYXV0c21hbGwiLCJkb2xsYXJvbGRzdHlsZSIsImRvbGxhcnN1cGVyaW9yIiwiYW1wZXJzYW5kc21hbGwiLCJBY3V0ZXNtYWxsIiwicGFyZW5sZWZ0c3VwZXJpb3IiLCJwYXJlbnJpZ2h0c3VwZXJpb3IiLCJ0d29kb3RlbmxlYWRlciIsIm9uZWRvdGVubGVhZGVyIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJmcmFjdGlvbiIsInplcm9vbGRzdHlsZSIsIm9uZW9sZHN0eWxlIiwidHdvb2xkc3R5bGUiLCJ0aHJlZW9sZHN0eWxlIiwiZm91cm9sZHN0eWxlIiwiZml2ZW9sZHN0eWxlIiwic2l4b2xkc3R5bGUiLCJzZXZlbm9sZHN0eWxlIiwiZWlnaHRvbGRzdHlsZSIsIm5pbmVvbGRzdHlsZSIsImNvbG9uIiwic2VtaWNvbG9uIiwiY29tbWFzdXBlcmlvciIsInRocmVlcXVhcnRlcnNlbWRhc2giLCJwZXJpb2RzdXBlcmlvciIsInF1ZXN0aW9uc21hbGwiLCJhc3VwZXJpb3IiLCJic3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCJkc3VwZXJpb3IiLCJlc3VwZXJpb3IiLCJpc3VwZXJpb3IiLCJsc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJvc3VwZXJpb3IiLCJyc3VwZXJpb3IiLCJzc3VwZXJpb3IiLCJ0c3VwZXJpb3IiLCJmZiIsImZpIiwiZmwiLCJmZmkiLCJmZmwiLCJwYXJlbmxlZnRpbmZlcmlvciIsInBhcmVucmlnaHRpbmZlcmlvciIsIkNpcmN1bWZsZXhzbWFsbCIsImh5cGhlbnN1cGVyaW9yIiwiR3JhdmVzbWFsbCIsIkFzbWFsbCIsIkJzbWFsbCIsIkNzbWFsbCIsIkRzbWFsbCIsIkVzbWFsbCIsIkZzbWFsbCIsIkdzbWFsbCIsIkhzbWFsbCIsIklzbWFsbCIsIkpzbWFsbCIsIktzbWFsbCIsIkxzbWFsbCIsIk1zbWFsbCIsIk5zbWFsbCIsIk9zbWFsbCIsIlBzbWFsbCIsIlFzbWFsbCIsIlJzbWFsbCIsIlNzbWFsbCIsIlRzbWFsbCIsIlVzbWFsbCIsIlZzbWFsbCIsIldzbWFsbCIsIlhzbWFsbCIsIllzbWFsbCIsIlpzbWFsbCIsImNvbG9ubW9uZXRhcnkiLCJvbmVmaXR0ZWQiLCJydXBpYWgiLCJUaWxkZXNtYWxsIiwiZXhjbGFtZG93bnNtYWxsIiwiY2VudG9sZHN0eWxlIiwiTHNsYXNoc21hbGwiLCJTY2Fyb25zbWFsbCIsIlpjYXJvbnNtYWxsIiwiRGllcmVzaXNzbWFsbCIsIkJyZXZlc21hbGwiLCJDYXJvbnNtYWxsIiwiRG90YWNjZW50c21hbGwiLCJNYWNyb25zbWFsbCIsImZpZ3VyZWRhc2giLCJoeXBoZW5pbmZlcmlvciIsIk9nb25la3NtYWxsIiwiUmluZ3NtYWxsIiwiQ2VkaWxsYXNtYWxsIiwib25lcXVhcnRlciIsIm9uZWhhbGYiLCJ0aHJlZXF1YXJ0ZXJzIiwicXVlc3Rpb25kb3duc21hbGwiLCJvbmVlaWdodGgiLCJ0aHJlZWVpZ2h0aHMiLCJmaXZlZWlnaHRocyIsInNldmVuZWlnaHRocyIsIm9uZXRoaXJkIiwidHdvdGhpcmRzIiwiemVyb3N1cGVyaW9yIiwib25lc3VwZXJpb3IiLCJ0d29zdXBlcmlvciIsInRocmVlc3VwZXJpb3IiLCJmb3Vyc3VwZXJpb3IiLCJmaXZlc3VwZXJpb3IiLCJzaXhzdXBlcmlvciIsInNldmVuc3VwZXJpb3IiLCJlaWdodHN1cGVyaW9yIiwibmluZXN1cGVyaW9yIiwiemVyb2luZmVyaW9yIiwib25laW5mZXJpb3IiLCJ0d29pbmZlcmlvciIsInRocmVlaW5mZXJpb3IiLCJmb3VyaW5mZXJpb3IiLCJmaXZlaW5mZXJpb3IiLCJzaXhpbmZlcmlvciIsInNldmVuaW5mZXJpb3IiLCJlaWdodGluZmVyaW9yIiwibmluZWluZmVyaW9yIiwiY2VudGluZmVyaW9yIiwiZG9sbGFyaW5mZXJpb3IiLCJwZXJpb2RpbmZlcmlvciIsImNvbW1haW5mZXJpb3IiLCJBZ3JhdmVzbWFsbCIsIkFhY3V0ZXNtYWxsIiwiQWNpcmN1bWZsZXhzbWFsbCIsIkF0aWxkZXNtYWxsIiwiQWRpZXJlc2lzc21hbGwiLCJBcmluZ3NtYWxsIiwiQUVzbWFsbCIsIkNjZWRpbGxhc21hbGwiLCJFZ3JhdmVzbWFsbCIsIkVhY3V0ZXNtYWxsIiwiRWNpcmN1bWZsZXhzbWFsbCIsIkVkaWVyZXNpc3NtYWxsIiwiSWdyYXZlc21hbGwiLCJJYWN1dGVzbWFsbCIsIkljaXJjdW1mbGV4c21hbGwiLCJJZGllcmVzaXNzbWFsbCIsIkV0aHNtYWxsIiwiTnRpbGRlc21hbGwiLCJPZ3JhdmVzbWFsbCIsIk9hY3V0ZXNtYWxsIiwiT2NpcmN1bWZsZXhzbWFsbCIsIk90aWxkZXNtYWxsIiwiT2RpZXJlc2lzc21hbGwiLCJPRXNtYWxsIiwiT3NsYXNoc21hbGwiLCJVZ3JhdmVzbWFsbCIsIlVhY3V0ZXNtYWxsIiwiVWNpcmN1bWZsZXhzbWFsbCIsIlVkaWVyZXNpc3NtYWxsIiwiWWFjdXRlc21hbGwiLCJUaG9ybnNtYWxsIiwiWWRpZXJlc2lzc21hbGwiXTt0LkV4cGVydFN1YnNldENoYXJzZXQ9WyIubm90ZGVmIiwic3BhY2UiLCJkb2xsYXJvbGRzdHlsZSIsImRvbGxhcnN1cGVyaW9yIiwicGFyZW5sZWZ0c3VwZXJpb3IiLCJwYXJlbnJpZ2h0c3VwZXJpb3IiLCJ0d29kb3RlbmxlYWRlciIsIm9uZWRvdGVubGVhZGVyIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJmcmFjdGlvbiIsInplcm9vbGRzdHlsZSIsIm9uZW9sZHN0eWxlIiwidHdvb2xkc3R5bGUiLCJ0aHJlZW9sZHN0eWxlIiwiZm91cm9sZHN0eWxlIiwiZml2ZW9sZHN0eWxlIiwic2l4b2xkc3R5bGUiLCJzZXZlbm9sZHN0eWxlIiwiZWlnaHRvbGRzdHlsZSIsIm5pbmVvbGRzdHlsZSIsImNvbG9uIiwic2VtaWNvbG9uIiwiY29tbWFzdXBlcmlvciIsInRocmVlcXVhcnRlcnNlbWRhc2giLCJwZXJpb2RzdXBlcmlvciIsImFzdXBlcmlvciIsImJzdXBlcmlvciIsImNlbnRzdXBlcmlvciIsImRzdXBlcmlvciIsImVzdXBlcmlvciIsImlzdXBlcmlvciIsImxzdXBlcmlvciIsIm1zdXBlcmlvciIsIm5zdXBlcmlvciIsIm9zdXBlcmlvciIsInJzdXBlcmlvciIsInNzdXBlcmlvciIsInRzdXBlcmlvciIsImZmIiwiZmkiLCJmbCIsImZmaSIsImZmbCIsInBhcmVubGVmdGluZmVyaW9yIiwicGFyZW5yaWdodGluZmVyaW9yIiwiaHlwaGVuc3VwZXJpb3IiLCJjb2xvbm1vbmV0YXJ5Iiwib25lZml0dGVkIiwicnVwaWFoIiwiY2VudG9sZHN0eWxlIiwiZmlndXJlZGFzaCIsImh5cGhlbmluZmVyaW9yIiwib25lcXVhcnRlciIsIm9uZWhhbGYiLCJ0aHJlZXF1YXJ0ZXJzIiwib25lZWlnaHRoIiwidGhyZWVlaWdodGhzIiwiZml2ZWVpZ2h0aHMiLCJzZXZlbmVpZ2h0aHMiLCJvbmV0aGlyZCIsInR3b3RoaXJkcyIsInplcm9zdXBlcmlvciIsIm9uZXN1cGVyaW9yIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwiZm91cnN1cGVyaW9yIiwiZml2ZXN1cGVyaW9yIiwic2l4c3VwZXJpb3IiLCJzZXZlbnN1cGVyaW9yIiwiZWlnaHRzdXBlcmlvciIsIm5pbmVzdXBlcmlvciIsInplcm9pbmZlcmlvciIsIm9uZWluZmVyaW9yIiwidHdvaW5mZXJpb3IiLCJ0aHJlZWluZmVyaW9yIiwiZm91cmluZmVyaW9yIiwiZml2ZWluZmVyaW9yIiwic2l4aW5mZXJpb3IiLCJzZXZlbmluZmVyaW9yIiwiZWlnaHRpbmZlcmlvciIsIm5pbmVpbmZlcmlvciIsImNlbnRpbmZlcmlvciIsImRvbGxhcmluZmVyaW9yIiwicGVyaW9kaW5mZXJpb3IiLCJjb21tYWluZmVyaW9yIl19LChlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuWmFwZkRpbmdiYXRzRW5jb2Rpbmc9dC5XaW5BbnNpRW5jb2Rpbmc9dC5TeW1ib2xTZXRFbmNvZGluZz10LlN0YW5kYXJkRW5jb2Rpbmc9dC5NYWNSb21hbkVuY29kaW5nPXQuRXhwZXJ0RW5jb2Rpbmc9dm9pZCAwO3QuZ2V0RW5jb2Rpbmc9ZnVuY3Rpb24gZ2V0RW5jb2RpbmcoZSl7c3dpdGNoKGUpe2Nhc2UiV2luQW5zaUVuY29kaW5nIjpyZXR1cm4gcztjYXNlIlN0YW5kYXJkRW5jb2RpbmciOnJldHVybiBpO2Nhc2UiTWFjUm9tYW5FbmNvZGluZyI6cmV0dXJuIG47Y2FzZSJTeW1ib2xTZXRFbmNvZGluZyI6cmV0dXJuIG87Y2FzZSJaYXBmRGluZ2JhdHNFbmNvZGluZyI6cmV0dXJuIGM7Y2FzZSJFeHBlcnRFbmNvZGluZyI6cmV0dXJuIGE7Y2FzZSJNYWNFeHBlcnRFbmNvZGluZyI6cmV0dXJuIHI7ZGVmYXVsdDpyZXR1cm4gbnVsbH19O2NvbnN0IGE9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbXNtYWxsIiwiSHVuZ2FydW1sYXV0c21hbGwiLCIiLCJkb2xsYXJvbGRzdHlsZSIsImRvbGxhcnN1cGVyaW9yIiwiYW1wZXJzYW5kc21hbGwiLCJBY3V0ZXNtYWxsIiwicGFyZW5sZWZ0c3VwZXJpb3IiLCJwYXJlbnJpZ2h0c3VwZXJpb3IiLCJ0d29kb3RlbmxlYWRlciIsIm9uZWRvdGVubGVhZGVyIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJmcmFjdGlvbiIsInplcm9vbGRzdHlsZSIsIm9uZW9sZHN0eWxlIiwidHdvb2xkc3R5bGUiLCJ0aHJlZW9sZHN0eWxlIiwiZm91cm9sZHN0eWxlIiwiZml2ZW9sZHN0eWxlIiwic2l4b2xkc3R5bGUiLCJzZXZlbm9sZHN0eWxlIiwiZWlnaHRvbGRzdHlsZSIsIm5pbmVvbGRzdHlsZSIsImNvbG9uIiwic2VtaWNvbG9uIiwiY29tbWFzdXBlcmlvciIsInRocmVlcXVhcnRlcnNlbWRhc2giLCJwZXJpb2RzdXBlcmlvciIsInF1ZXN0aW9uc21hbGwiLCIiLCJhc3VwZXJpb3IiLCJic3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCJkc3VwZXJpb3IiLCJlc3VwZXJpb3IiLCIiLCIiLCIiLCJpc3VwZXJpb3IiLCIiLCIiLCJsc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJvc3VwZXJpb3IiLCIiLCIiLCJyc3VwZXJpb3IiLCJzc3VwZXJpb3IiLCJ0c3VwZXJpb3IiLCIiLCJmZiIsImZpIiwiZmwiLCJmZmkiLCJmZmwiLCJwYXJlbmxlZnRpbmZlcmlvciIsIiIsInBhcmVucmlnaHRpbmZlcmlvciIsIkNpcmN1bWZsZXhzbWFsbCIsImh5cGhlbnN1cGVyaW9yIiwiR3JhdmVzbWFsbCIsIkFzbWFsbCIsIkJzbWFsbCIsIkNzbWFsbCIsIkRzbWFsbCIsIkVzbWFsbCIsIkZzbWFsbCIsIkdzbWFsbCIsIkhzbWFsbCIsIklzbWFsbCIsIkpzbWFsbCIsIktzbWFsbCIsIkxzbWFsbCIsIk1zbWFsbCIsIk5zbWFsbCIsIk9zbWFsbCIsIlBzbWFsbCIsIlFzbWFsbCIsIlJzbWFsbCIsIlNzbWFsbCIsIlRzbWFsbCIsIlVzbWFsbCIsIlZzbWFsbCIsIldzbWFsbCIsIlhzbWFsbCIsIllzbWFsbCIsIlpzbWFsbCIsImNvbG9ubW9uZXRhcnkiLCJvbmVmaXR0ZWQiLCJydXBpYWgiLCJUaWxkZXNtYWxsIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiZXhjbGFtZG93bnNtYWxsIiwiY2VudG9sZHN0eWxlIiwiTHNsYXNoc21hbGwiLCIiLCIiLCJTY2Fyb25zbWFsbCIsIlpjYXJvbnNtYWxsIiwiRGllcmVzaXNzbWFsbCIsIkJyZXZlc21hbGwiLCJDYXJvbnNtYWxsIiwiIiwiRG90YWNjZW50c21hbGwiLCIiLCIiLCJNYWNyb25zbWFsbCIsIiIsIiIsImZpZ3VyZWRhc2giLCJoeXBoZW5pbmZlcmlvciIsIiIsIiIsIk9nb25la3NtYWxsIiwiUmluZ3NtYWxsIiwiQ2VkaWxsYXNtYWxsIiwiIiwiIiwiIiwib25lcXVhcnRlciIsIm9uZWhhbGYiLCJ0aHJlZXF1YXJ0ZXJzIiwicXVlc3Rpb25kb3duc21hbGwiLCJvbmVlaWdodGgiLCJ0aHJlZWVpZ2h0aHMiLCJmaXZlZWlnaHRocyIsInNldmVuZWlnaHRocyIsIm9uZXRoaXJkIiwidHdvdGhpcmRzIiwiIiwiIiwiemVyb3N1cGVyaW9yIiwib25lc3VwZXJpb3IiLCJ0d29zdXBlcmlvciIsInRocmVlc3VwZXJpb3IiLCJmb3Vyc3VwZXJpb3IiLCJmaXZlc3VwZXJpb3IiLCJzaXhzdXBlcmlvciIsInNldmVuc3VwZXJpb3IiLCJlaWdodHN1cGVyaW9yIiwibmluZXN1cGVyaW9yIiwiemVyb2luZmVyaW9yIiwib25laW5mZXJpb3IiLCJ0d29pbmZlcmlvciIsInRocmVlaW5mZXJpb3IiLCJmb3VyaW5mZXJpb3IiLCJmaXZlaW5mZXJpb3IiLCJzaXhpbmZlcmlvciIsInNldmVuaW5mZXJpb3IiLCJlaWdodGluZmVyaW9yIiwibmluZWluZmVyaW9yIiwiY2VudGluZmVyaW9yIiwiZG9sbGFyaW5mZXJpb3IiLCJwZXJpb2RpbmZlcmlvciIsImNvbW1haW5mZXJpb3IiLCJBZ3JhdmVzbWFsbCIsIkFhY3V0ZXNtYWxsIiwiQWNpcmN1bWZsZXhzbWFsbCIsIkF0aWxkZXNtYWxsIiwiQWRpZXJlc2lzc21hbGwiLCJBcmluZ3NtYWxsIiwiQUVzbWFsbCIsIkNjZWRpbGxhc21hbGwiLCJFZ3JhdmVzbWFsbCIsIkVhY3V0ZXNtYWxsIiwiRWNpcmN1bWZsZXhzbWFsbCIsIkVkaWVyZXNpc3NtYWxsIiwiSWdyYXZlc21hbGwiLCJJYWN1dGVzbWFsbCIsIkljaXJjdW1mbGV4c21hbGwiLCJJZGllcmVzaXNzbWFsbCIsIkV0aHNtYWxsIiwiTnRpbGRlc21hbGwiLCJPZ3JhdmVzbWFsbCIsIk9hY3V0ZXNtYWxsIiwiT2NpcmN1bWZsZXhzbWFsbCIsIk90aWxkZXNtYWxsIiwiT2RpZXJlc2lzc21hbGwiLCJPRXNtYWxsIiwiT3NsYXNoc21hbGwiLCJVZ3JhdmVzbWFsbCIsIlVhY3V0ZXNtYWxsIiwiVWNpcmN1bWZsZXhzbWFsbCIsIlVkaWVyZXNpc3NtYWxsIiwiWWFjdXRlc21hbGwiLCJUaG9ybnNtYWxsIiwiWWRpZXJlc2lzc21hbGwiXTt0LkV4cGVydEVuY29kaW5nPWE7Y29uc3Qgcj1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtc21hbGwiLCJIdW5nYXJ1bWxhdXRzbWFsbCIsImNlbnRvbGRzdHlsZSIsImRvbGxhcm9sZHN0eWxlIiwiZG9sbGFyc3VwZXJpb3IiLCJhbXBlcnNhbmRzbWFsbCIsIkFjdXRlc21hbGwiLCJwYXJlbmxlZnRzdXBlcmlvciIsInBhcmVucmlnaHRzdXBlcmlvciIsInR3b2RvdGVubGVhZGVyIiwib25lZG90ZW5sZWFkZXIiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsImZyYWN0aW9uIiwiemVyb29sZHN0eWxlIiwib25lb2xkc3R5bGUiLCJ0d29vbGRzdHlsZSIsInRocmVlb2xkc3R5bGUiLCJmb3Vyb2xkc3R5bGUiLCJmaXZlb2xkc3R5bGUiLCJzaXhvbGRzdHlsZSIsInNldmVub2xkc3R5bGUiLCJlaWdodG9sZHN0eWxlIiwibmluZW9sZHN0eWxlIiwiY29sb24iLCJzZW1pY29sb24iLCIiLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwiIiwicXVlc3Rpb25zbWFsbCIsIiIsIiIsIiIsIiIsIkV0aHNtYWxsIiwiIiwiIiwib25lcXVhcnRlciIsIm9uZWhhbGYiLCJ0aHJlZXF1YXJ0ZXJzIiwib25lZWlnaHRoIiwidGhyZWVlaWdodGhzIiwiZml2ZWVpZ2h0aHMiLCJzZXZlbmVpZ2h0aHMiLCJvbmV0aGlyZCIsInR3b3RoaXJkcyIsIiIsIiIsIiIsIiIsIiIsIiIsImZmIiwiZmkiLCJmbCIsImZmaSIsImZmbCIsInBhcmVubGVmdGluZmVyaW9yIiwiIiwicGFyZW5yaWdodGluZmVyaW9yIiwiQ2lyY3VtZmxleHNtYWxsIiwiaHlwaGVuaW5mZXJpb3IiLCJHcmF2ZXNtYWxsIiwiQXNtYWxsIiwiQnNtYWxsIiwiQ3NtYWxsIiwiRHNtYWxsIiwiRXNtYWxsIiwiRnNtYWxsIiwiR3NtYWxsIiwiSHNtYWxsIiwiSXNtYWxsIiwiSnNtYWxsIiwiS3NtYWxsIiwiTHNtYWxsIiwiTXNtYWxsIiwiTnNtYWxsIiwiT3NtYWxsIiwiUHNtYWxsIiwiUXNtYWxsIiwiUnNtYWxsIiwiU3NtYWxsIiwiVHNtYWxsIiwiVXNtYWxsIiwiVnNtYWxsIiwiV3NtYWxsIiwiWHNtYWxsIiwiWXNtYWxsIiwiWnNtYWxsIiwiY29sb25tb25ldGFyeSIsIm9uZWZpdHRlZCIsInJ1cGlhaCIsIlRpbGRlc21hbGwiLCIiLCIiLCJhc3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCIiLCIiLCIiLCIiLCJBYWN1dGVzbWFsbCIsIkFncmF2ZXNtYWxsIiwiQWNpcmN1bWZsZXhzbWFsbCIsIkFkaWVyZXNpc3NtYWxsIiwiQXRpbGRlc21hbGwiLCJBcmluZ3NtYWxsIiwiQ2NlZGlsbGFzbWFsbCIsIkVhY3V0ZXNtYWxsIiwiRWdyYXZlc21hbGwiLCJFY2lyY3VtZmxleHNtYWxsIiwiRWRpZXJlc2lzc21hbGwiLCJJYWN1dGVzbWFsbCIsIklncmF2ZXNtYWxsIiwiSWNpcmN1bWZsZXhzbWFsbCIsIklkaWVyZXNpc3NtYWxsIiwiTnRpbGRlc21hbGwiLCJPYWN1dGVzbWFsbCIsIk9ncmF2ZXNtYWxsIiwiT2NpcmN1bWZsZXhzbWFsbCIsIk9kaWVyZXNpc3NtYWxsIiwiT3RpbGRlc21hbGwiLCJVYWN1dGVzbWFsbCIsIlVncmF2ZXNtYWxsIiwiVWNpcmN1bWZsZXhzbWFsbCIsIlVkaWVyZXNpc3NtYWxsIiwiIiwiZWlnaHRzdXBlcmlvciIsImZvdXJpbmZlcmlvciIsInRocmVlaW5mZXJpb3IiLCJzaXhpbmZlcmlvciIsImVpZ2h0aW5mZXJpb3IiLCJzZXZlbmluZmVyaW9yIiwiU2Nhcm9uc21hbGwiLCIiLCJjZW50aW5mZXJpb3IiLCJ0d29pbmZlcmlvciIsIiIsIkRpZXJlc2lzc21hbGwiLCIiLCJDYXJvbnNtYWxsIiwib3N1cGVyaW9yIiwiZml2ZWluZmVyaW9yIiwiIiwiY29tbWFpbmZlcmlvciIsInBlcmlvZGluZmVyaW9yIiwiWWFjdXRlc21hbGwiLCIiLCJkb2xsYXJpbmZlcmlvciIsIiIsIiIsIlRob3Juc21hbGwiLCIiLCJuaW5laW5mZXJpb3IiLCJ6ZXJvaW5mZXJpb3IiLCJaY2Fyb25zbWFsbCIsIkFFc21hbGwiLCJPc2xhc2hzbWFsbCIsInF1ZXN0aW9uZG93bnNtYWxsIiwib25laW5mZXJpb3IiLCJMc2xhc2hzbWFsbCIsIiIsIiIsIiIsIiIsIiIsIiIsIkNlZGlsbGFzbWFsbCIsIiIsIiIsIiIsIiIsIiIsIk9Fc21hbGwiLCJmaWd1cmVkYXNoIiwiaHlwaGVuc3VwZXJpb3IiLCIiLCIiLCIiLCIiLCJleGNsYW1kb3duc21hbGwiLCIiLCJZZGllcmVzaXNzbWFsbCIsIiIsIm9uZXN1cGVyaW9yIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwiZm91cnN1cGVyaW9yIiwiZml2ZXN1cGVyaW9yIiwic2l4c3VwZXJpb3IiLCJzZXZlbnN1cGVyaW9yIiwibmluZXN1cGVyaW9yIiwiemVyb3N1cGVyaW9yIiwiIiwiZXN1cGVyaW9yIiwicnN1cGVyaW9yIiwidHN1cGVyaW9yIiwiIiwiIiwiaXN1cGVyaW9yIiwic3N1cGVyaW9yIiwiZHN1cGVyaW9yIiwiIiwiIiwiIiwiIiwiIiwibHN1cGVyaW9yIiwiT2dvbmVrc21hbGwiLCJCcmV2ZXNtYWxsIiwiTWFjcm9uc21hbGwiLCJic3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJjb21tYXN1cGVyaW9yIiwicGVyaW9kc3VwZXJpb3IiLCJEb3RhY2NlbnRzbWFsbCIsIlJpbmdzbWFsbCIsIiIsIiIsIiIsIiJdLG49WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbSIsInF1b3RlZGJsIiwibnVtYmVyc2lnbiIsImRvbGxhciIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJxdW90ZXNpbmdsZSIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwiZ3JhdmUiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJhc2NpaXRpbGRlIiwiIiwiQWRpZXJlc2lzIiwiQXJpbmciLCJDY2VkaWxsYSIsIkVhY3V0ZSIsIk50aWxkZSIsIk9kaWVyZXNpcyIsIlVkaWVyZXNpcyIsImFhY3V0ZSIsImFncmF2ZSIsImFjaXJjdW1mbGV4IiwiYWRpZXJlc2lzIiwiYXRpbGRlIiwiYXJpbmciLCJjY2VkaWxsYSIsImVhY3V0ZSIsImVncmF2ZSIsImVjaXJjdW1mbGV4IiwiZWRpZXJlc2lzIiwiaWFjdXRlIiwiaWdyYXZlIiwiaWNpcmN1bWZsZXgiLCJpZGllcmVzaXMiLCJudGlsZGUiLCJvYWN1dGUiLCJvZ3JhdmUiLCJvY2lyY3VtZmxleCIsIm9kaWVyZXNpcyIsIm90aWxkZSIsInVhY3V0ZSIsInVncmF2ZSIsInVjaXJjdW1mbGV4IiwidWRpZXJlc2lzIiwiZGFnZ2VyIiwiZGVncmVlIiwiY2VudCIsInN0ZXJsaW5nIiwic2VjdGlvbiIsImJ1bGxldCIsInBhcmFncmFwaCIsImdlcm1hbmRibHMiLCJyZWdpc3RlcmVkIiwiY29weXJpZ2h0IiwidHJhZGVtYXJrIiwiYWN1dGUiLCJkaWVyZXNpcyIsIm5vdGVxdWFsIiwiQUUiLCJPc2xhc2giLCJpbmZpbml0eSIsInBsdXNtaW51cyIsImxlc3NlcXVhbCIsImdyZWF0ZXJlcXVhbCIsInllbiIsIm11IiwicGFydGlhbGRpZmYiLCJzdW1tYXRpb24iLCJwcm9kdWN0IiwicGkiLCJpbnRlZ3JhbCIsIm9yZGZlbWluaW5lIiwib3JkbWFzY3VsaW5lIiwiT21lZ2EiLCJhZSIsIm9zbGFzaCIsInF1ZXN0aW9uZG93biIsImV4Y2xhbWRvd24iLCJsb2dpY2Fsbm90IiwicmFkaWNhbCIsImZsb3JpbiIsImFwcHJveGVxdWFsIiwiRGVsdGEiLCJndWlsbGVtb3RsZWZ0IiwiZ3VpbGxlbW90cmlnaHQiLCJlbGxpcHNpcyIsInNwYWNlIiwiQWdyYXZlIiwiQXRpbGRlIiwiT3RpbGRlIiwiT0UiLCJvZSIsImVuZGFzaCIsImVtZGFzaCIsInF1b3RlZGJsbGVmdCIsInF1b3RlZGJscmlnaHQiLCJxdW90ZWxlZnQiLCJxdW90ZXJpZ2h0IiwiZGl2aWRlIiwibG96ZW5nZSIsInlkaWVyZXNpcyIsIllkaWVyZXNpcyIsImZyYWN0aW9uIiwiY3VycmVuY3kiLCJndWlsc2luZ2xsZWZ0IiwiZ3VpbHNpbmdscmlnaHQiLCJmaSIsImZsIiwiZGFnZ2VyZGJsIiwicGVyaW9kY2VudGVyZWQiLCJxdW90ZXNpbmdsYmFzZSIsInF1b3RlZGJsYmFzZSIsInBlcnRob3VzYW5kIiwiQWNpcmN1bWZsZXgiLCJFY2lyY3VtZmxleCIsIkFhY3V0ZSIsIkVkaWVyZXNpcyIsIkVncmF2ZSIsIklhY3V0ZSIsIkljaXJjdW1mbGV4IiwiSWRpZXJlc2lzIiwiSWdyYXZlIiwiT2FjdXRlIiwiT2NpcmN1bWZsZXgiLCJhcHBsZSIsIk9ncmF2ZSIsIlVhY3V0ZSIsIlVjaXJjdW1mbGV4IiwiVWdyYXZlIiwiZG90bGVzc2kiLCJjaXJjdW1mbGV4IiwidGlsZGUiLCJtYWNyb24iLCJicmV2ZSIsImRvdGFjY2VudCIsInJpbmciLCJjZWRpbGxhIiwiaHVuZ2FydW1sYXV0Iiwib2dvbmVrIiwiY2Fyb24iXTt0Lk1hY1JvbWFuRW5jb2Rpbmc9bjtjb25zdCBpPVsiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwic3BhY2UiLCJleGNsYW0iLCJxdW90ZWRibCIsIm51bWJlcnNpZ24iLCJkb2xsYXIiLCJwZXJjZW50IiwiYW1wZXJzYW5kIiwicXVvdGVyaWdodCIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwicXVvdGVsZWZ0IiwiYSIsImIiLCJjIiwiZCIsImUiLCJmIiwiZyIsImgiLCJpIiwiaiIsImsiLCJsIiwibSIsIm4iLCJvIiwicCIsInEiLCJyIiwicyIsInQiLCJ1IiwidiIsInciLCJ4IiwieSIsInoiLCJicmFjZWxlZnQiLCJiYXIiLCJicmFjZXJpZ2h0IiwiYXNjaWl0aWxkZSIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsImV4Y2xhbWRvd24iLCJjZW50Iiwic3RlcmxpbmciLCJmcmFjdGlvbiIsInllbiIsImZsb3JpbiIsInNlY3Rpb24iLCJjdXJyZW5jeSIsInF1b3Rlc2luZ2xlIiwicXVvdGVkYmxsZWZ0IiwiZ3VpbGxlbW90bGVmdCIsImd1aWxzaW5nbGxlZnQiLCJndWlsc2luZ2xyaWdodCIsImZpIiwiZmwiLCIiLCJlbmRhc2giLCJkYWdnZXIiLCJkYWdnZXJkYmwiLCJwZXJpb2RjZW50ZXJlZCIsIiIsInBhcmFncmFwaCIsImJ1bGxldCIsInF1b3Rlc2luZ2xiYXNlIiwicXVvdGVkYmxiYXNlIiwicXVvdGVkYmxyaWdodCIsImd1aWxsZW1vdHJpZ2h0IiwiZWxsaXBzaXMiLCJwZXJ0aG91c2FuZCIsIiIsInF1ZXN0aW9uZG93biIsIiIsImdyYXZlIiwiYWN1dGUiLCJjaXJjdW1mbGV4IiwidGlsZGUiLCJtYWNyb24iLCJicmV2ZSIsImRvdGFjY2VudCIsImRpZXJlc2lzIiwiIiwicmluZyIsImNlZGlsbGEiLCIiLCJodW5nYXJ1bWxhdXQiLCJvZ29uZWsiLCJjYXJvbiIsImVtZGFzaCIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIkFFIiwiIiwib3JkZmVtaW5pbmUiLCIiLCIiLCIiLCIiLCJMc2xhc2giLCJPc2xhc2giLCJPRSIsIm9yZG1hc2N1bGluZSIsIiIsIiIsIiIsIiIsIiIsImFlIiwiIiwiIiwiIiwiZG90bGVzc2kiLCIiLCIiLCJsc2xhc2giLCJvc2xhc2giLCJvZSIsImdlcm1hbmRibHMiLCIiLCIiLCIiLCIiXTt0LlN0YW5kYXJkRW5jb2Rpbmc9aTtjb25zdCBzPVsiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwic3BhY2UiLCJleGNsYW0iLCJxdW90ZWRibCIsIm51bWJlcnNpZ24iLCJkb2xsYXIiLCJwZXJjZW50IiwiYW1wZXJzYW5kIiwicXVvdGVzaW5nbGUiLCJwYXJlbmxlZnQiLCJwYXJlbnJpZ2h0IiwiYXN0ZXJpc2siLCJwbHVzIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJzbGFzaCIsInplcm8iLCJvbmUiLCJ0d28iLCJ0aHJlZSIsImZvdXIiLCJmaXZlIiwic2l4Iiwic2V2ZW4iLCJlaWdodCIsIm5pbmUiLCJjb2xvbiIsInNlbWljb2xvbiIsImxlc3MiLCJlcXVhbCIsImdyZWF0ZXIiLCJxdWVzdGlvbiIsImF0IiwiQSIsIkIiLCJDIiwiRCIsIkUiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIksiLCJMIiwiTSIsIk4iLCJPIiwiUCIsIlEiLCJSIiwiUyIsIlQiLCJVIiwiViIsIlciLCJYIiwiWSIsIloiLCJicmFja2V0bGVmdCIsImJhY2tzbGFzaCIsImJyYWNrZXRyaWdodCIsImFzY2lpY2lyY3VtIiwidW5kZXJzY29yZSIsImdyYXZlIiwiYSIsImIiLCJjIiwiZCIsImUiLCJmIiwiZyIsImgiLCJpIiwiaiIsImsiLCJsIiwibSIsIm4iLCJvIiwicCIsInEiLCJyIiwicyIsInQiLCJ1IiwidiIsInciLCJ4IiwieSIsInoiLCJicmFjZWxlZnQiLCJiYXIiLCJicmFjZXJpZ2h0IiwiYXNjaWl0aWxkZSIsImJ1bGxldCIsIkV1cm8iLCJidWxsZXQiLCJxdW90ZXNpbmdsYmFzZSIsImZsb3JpbiIsInF1b3RlZGJsYmFzZSIsImVsbGlwc2lzIiwiZGFnZ2VyIiwiZGFnZ2VyZGJsIiwiY2lyY3VtZmxleCIsInBlcnRob3VzYW5kIiwiU2Nhcm9uIiwiZ3VpbHNpbmdsbGVmdCIsIk9FIiwiYnVsbGV0IiwiWmNhcm9uIiwiYnVsbGV0IiwiYnVsbGV0IiwicXVvdGVsZWZ0IiwicXVvdGVyaWdodCIsInF1b3RlZGJsbGVmdCIsInF1b3RlZGJscmlnaHQiLCJidWxsZXQiLCJlbmRhc2giLCJlbWRhc2giLCJ0aWxkZSIsInRyYWRlbWFyayIsInNjYXJvbiIsImd1aWxzaW5nbHJpZ2h0Iiwib2UiLCJidWxsZXQiLCJ6Y2Fyb24iLCJZZGllcmVzaXMiLCJzcGFjZSIsImV4Y2xhbWRvd24iLCJjZW50Iiwic3RlcmxpbmciLCJjdXJyZW5jeSIsInllbiIsImJyb2tlbmJhciIsInNlY3Rpb24iLCJkaWVyZXNpcyIsImNvcHlyaWdodCIsIm9yZGZlbWluaW5lIiwiZ3VpbGxlbW90bGVmdCIsImxvZ2ljYWxub3QiLCJoeXBoZW4iLCJyZWdpc3RlcmVkIiwibWFjcm9uIiwiZGVncmVlIiwicGx1c21pbnVzIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwiYWN1dGUiLCJtdSIsInBhcmFncmFwaCIsInBlcmlvZGNlbnRlcmVkIiwiY2VkaWxsYSIsIm9uZXN1cGVyaW9yIiwib3JkbWFzY3VsaW5lIiwiZ3VpbGxlbW90cmlnaHQiLCJvbmVxdWFydGVyIiwib25laGFsZiIsInRocmVlcXVhcnRlcnMiLCJxdWVzdGlvbmRvd24iLCJBZ3JhdmUiLCJBYWN1dGUiLCJBY2lyY3VtZmxleCIsIkF0aWxkZSIsIkFkaWVyZXNpcyIsIkFyaW5nIiwiQUUiLCJDY2VkaWxsYSIsIkVncmF2ZSIsIkVhY3V0ZSIsIkVjaXJjdW1mbGV4IiwiRWRpZXJlc2lzIiwiSWdyYXZlIiwiSWFjdXRlIiwiSWNpcmN1bWZsZXgiLCJJZGllcmVzaXMiLCJFdGgiLCJOdGlsZGUiLCJPZ3JhdmUiLCJPYWN1dGUiLCJPY2lyY3VtZmxleCIsIk90aWxkZSIsIk9kaWVyZXNpcyIsIm11bHRpcGx5IiwiT3NsYXNoIiwiVWdyYXZlIiwiVWFjdXRlIiwiVWNpcmN1bWZsZXgiLCJVZGllcmVzaXMiLCJZYWN1dGUiLCJUaG9ybiIsImdlcm1hbmRibHMiLCJhZ3JhdmUiLCJhYWN1dGUiLCJhY2lyY3VtZmxleCIsImF0aWxkZSIsImFkaWVyZXNpcyIsImFyaW5nIiwiYWUiLCJjY2VkaWxsYSIsImVncmF2ZSIsImVhY3V0ZSIsImVjaXJjdW1mbGV4IiwiZWRpZXJlc2lzIiwiaWdyYXZlIiwiaWFjdXRlIiwiaWNpcmN1bWZsZXgiLCJpZGllcmVzaXMiLCJldGgiLCJudGlsZGUiLCJvZ3JhdmUiLCJvYWN1dGUiLCJvY2lyY3VtZmxleCIsIm90aWxkZSIsIm9kaWVyZXNpcyIsImRpdmlkZSIsIm9zbGFzaCIsInVncmF2ZSIsInVhY3V0ZSIsInVjaXJjdW1mbGV4IiwidWRpZXJlc2lzIiwieWFjdXRlIiwidGhvcm4iLCJ5ZGllcmVzaXMiXTt0LldpbkFuc2lFbmNvZGluZz1zO2NvbnN0IG89WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbSIsInVuaXZlcnNhbCIsIm51bWJlcnNpZ24iLCJleGlzdGVudGlhbCIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJzdWNodGhhdCIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3Rlcmlza21hdGgiLCJwbHVzIiwiY29tbWEiLCJtaW51cyIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiY29uZ3J1ZW50IiwiQWxwaGEiLCJCZXRhIiwiQ2hpIiwiRGVsdGEiLCJFcHNpbG9uIiwiUGhpIiwiR2FtbWEiLCJFdGEiLCJJb3RhIiwidGhldGExIiwiS2FwcGEiLCJMYW1iZGEiLCJNdSIsIk51IiwiT21pY3JvbiIsIlBpIiwiVGhldGEiLCJSaG8iLCJTaWdtYSIsIlRhdSIsIlVwc2lsb24iLCJzaWdtYTEiLCJPbWVnYSIsIlhpIiwiUHNpIiwiWmV0YSIsImJyYWNrZXRsZWZ0IiwidGhlcmVmb3JlIiwiYnJhY2tldHJpZ2h0IiwicGVycGVuZGljdWxhciIsInVuZGVyc2NvcmUiLCJyYWRpY2FsZXgiLCJhbHBoYSIsImJldGEiLCJjaGkiLCJkZWx0YSIsImVwc2lsb24iLCJwaGkiLCJnYW1tYSIsImV0YSIsImlvdGEiLCJwaGkxIiwia2FwcGEiLCJsYW1iZGEiLCJtdSIsIm51Iiwib21pY3JvbiIsInBpIiwidGhldGEiLCJyaG8iLCJzaWdtYSIsInRhdSIsInVwc2lsb24iLCJvbWVnYTEiLCJvbWVnYSIsInhpIiwicHNpIiwiemV0YSIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJzaW1pbGFyIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiRXVybyIsIlVwc2lsb24xIiwibWludXRlIiwibGVzc2VxdWFsIiwiZnJhY3Rpb24iLCJpbmZpbml0eSIsImZsb3JpbiIsImNsdWIiLCJkaWFtb25kIiwiaGVhcnQiLCJzcGFkZSIsImFycm93Ym90aCIsImFycm93bGVmdCIsImFycm93dXAiLCJhcnJvd3JpZ2h0IiwiYXJyb3dkb3duIiwiZGVncmVlIiwicGx1c21pbnVzIiwic2Vjb25kIiwiZ3JlYXRlcmVxdWFsIiwibXVsdGlwbHkiLCJwcm9wb3J0aW9uYWwiLCJwYXJ0aWFsZGlmZiIsImJ1bGxldCIsImRpdmlkZSIsIm5vdGVxdWFsIiwiZXF1aXZhbGVuY2UiLCJhcHByb3hlcXVhbCIsImVsbGlwc2lzIiwiYXJyb3d2ZXJ0ZXgiLCJhcnJvd2hvcml6ZXgiLCJjYXJyaWFnZXJldHVybiIsImFsZXBoIiwiSWZyYWt0dXIiLCJSZnJha3R1ciIsIndlaWVyc3RyYXNzIiwiY2lyY2xlbXVsdGlwbHkiLCJjaXJjbGVwbHVzIiwiZW1wdHlzZXQiLCJpbnRlcnNlY3Rpb24iLCJ1bmlvbiIsInByb3BlcnN1cGVyc2V0IiwicmVmbGV4c3VwZXJzZXQiLCJub3RzdWJzZXQiLCJwcm9wZXJzdWJzZXQiLCJyZWZsZXhzdWJzZXQiLCJlbGVtZW50Iiwibm90ZWxlbWVudCIsImFuZ2xlIiwiZ3JhZGllbnQiLCJyZWdpc3RlcnNlcmlmIiwiY29weXJpZ2h0c2VyaWYiLCJ0cmFkZW1hcmtzZXJpZiIsInByb2R1Y3QiLCJyYWRpY2FsIiwiZG90bWF0aCIsImxvZ2ljYWxub3QiLCJsb2dpY2FsYW5kIiwibG9naWNhbG9yIiwiYXJyb3dkYmxib3RoIiwiYXJyb3dkYmxsZWZ0IiwiYXJyb3dkYmx1cCIsImFycm93ZGJscmlnaHQiLCJhcnJvd2RibGRvd24iLCJsb3plbmdlIiwiYW5nbGVsZWZ0IiwicmVnaXN0ZXJzYW5zIiwiY29weXJpZ2h0c2FucyIsInRyYWRlbWFya3NhbnMiLCJzdW1tYXRpb24iLCJwYXJlbmxlZnR0cCIsInBhcmVubGVmdGV4IiwicGFyZW5sZWZ0YnQiLCJicmFja2V0bGVmdHRwIiwiYnJhY2tldGxlZnRleCIsImJyYWNrZXRsZWZ0YnQiLCJicmFjZWxlZnR0cCIsImJyYWNlbGVmdG1pZCIsImJyYWNlbGVmdGJ0IiwiYnJhY2VleCIsIiIsImFuZ2xlcmlnaHQiLCJpbnRlZ3JhbCIsImludGVncmFsdHAiLCJpbnRlZ3JhbGV4IiwiaW50ZWdyYWxidCIsInBhcmVucmlnaHR0cCIsInBhcmVucmlnaHRleCIsInBhcmVucmlnaHRidCIsImJyYWNrZXRyaWdodHRwIiwiYnJhY2tldHJpZ2h0ZXgiLCJicmFja2V0cmlnaHRidCIsImJyYWNlcmlnaHR0cCIsImJyYWNlcmlnaHRtaWQiLCJicmFjZXJpZ2h0YnQiLCIiXTt0LlN5bWJvbFNldEVuY29kaW5nPW87Y29uc3QgYz1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiYTEiLCJhMiIsImEyMDIiLCJhMyIsImE0IiwiYTUiLCJhMTE5IiwiYTExOCIsImExMTciLCJhMTEiLCJhMTIiLCJhMTMiLCJhMTQiLCJhMTUiLCJhMTYiLCJhMTA1IiwiYTE3IiwiYTE4IiwiYTE5IiwiYTIwIiwiYTIxIiwiYTIyIiwiYTIzIiwiYTI0IiwiYTI1IiwiYTI2IiwiYTI3IiwiYTI4IiwiYTYiLCJhNyIsImE4IiwiYTkiLCJhMTAiLCJhMjkiLCJhMzAiLCJhMzEiLCJhMzIiLCJhMzMiLCJhMzQiLCJhMzUiLCJhMzYiLCJhMzciLCJhMzgiLCJhMzkiLCJhNDAiLCJhNDEiLCJhNDIiLCJhNDMiLCJhNDQiLCJhNDUiLCJhNDYiLCJhNDciLCJhNDgiLCJhNDkiLCJhNTAiLCJhNTEiLCJhNTIiLCJhNTMiLCJhNTQiLCJhNTUiLCJhNTYiLCJhNTciLCJhNTgiLCJhNTkiLCJhNjAiLCJhNjEiLCJhNjIiLCJhNjMiLCJhNjQiLCJhNjUiLCJhNjYiLCJhNjciLCJhNjgiLCJhNjkiLCJhNzAiLCJhNzEiLCJhNzIiLCJhNzMiLCJhNzQiLCJhMjAzIiwiYTc1IiwiYTIwNCIsImE3NiIsImE3NyIsImE3OCIsImE3OSIsImE4MSIsImE4MiIsImE4MyIsImE4NCIsImE5NyIsImE5OCIsImE5OSIsImExMDAiLCIiLCJhODkiLCJhOTAiLCJhOTMiLCJhOTQiLCJhOTEiLCJhOTIiLCJhMjA1IiwiYTg1IiwiYTIwNiIsImE4NiIsImE4NyIsImE4OCIsImE5NSIsImE5NiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsImExMDEiLCJhMTAyIiwiYTEwMyIsImExMDQiLCJhMTA2IiwiYTEwNyIsImExMDgiLCJhMTEyIiwiYTExMSIsImExMTAiLCJhMTA5IiwiYTEyMCIsImExMjEiLCJhMTIyIiwiYTEyMyIsImExMjQiLCJhMTI1IiwiYTEyNiIsImExMjciLCJhMTI4IiwiYTEyOSIsImExMzAiLCJhMTMxIiwiYTEzMiIsImExMzMiLCJhMTM0IiwiYTEzNSIsImExMzYiLCJhMTM3IiwiYTEzOCIsImExMzkiLCJhMTQwIiwiYTE0MSIsImExNDIiLCJhMTQzIiwiYTE0NCIsImExNDUiLCJhMTQ2IiwiYTE0NyIsImExNDgiLCJhMTQ5IiwiYTE1MCIsImExNTEiLCJhMTUyIiwiYTE1MyIsImExNTQiLCJhMTU1IiwiYTE1NiIsImExNTciLCJhMTU4IiwiYTE1OSIsImExNjAiLCJhMTYxIiwiYTE2MyIsImExNjQiLCJhMTk2IiwiYTE2NSIsImExOTIiLCJhMTY2IiwiYTE2NyIsImExNjgiLCJhMTY5IiwiYTE3MCIsImExNzEiLCJhMTcyIiwiYTE3MyIsImExNjIiLCJhMTc0IiwiYTE3NSIsImExNzYiLCJhMTc3IiwiYTE3OCIsImExNzkiLCJhMTkzIiwiYTE4MCIsImExOTkiLCJhMTgxIiwiYTIwMCIsImExODIiLCIiLCJhMjAxIiwiYTE4MyIsImExODQiLCJhMTk3IiwiYTE4NSIsImExOTQiLCJhMTk4IiwiYTE4NiIsImExOTUiLCJhMTg3IiwiYTE4OCIsImExODkiLCJhMTkwIiwiYTE5MSIsIiJdO3QuWmFwZkRpbmdiYXRzRW5jb2Rpbmc9Y30sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlNFQUNfQU5BTFlTSVNfRU5BQkxFRD10Lk1hY1N0YW5kYXJkR2x5cGhPcmRlcmluZz10LkZvbnRGbGFncz12b2lkIDA7dC5nZXRGb250VHlwZT1mdW5jdGlvbiBnZXRGb250VHlwZShlLHQsYT0hMSl7c3dpdGNoKGUpe2Nhc2UiVHlwZTEiOnJldHVybiBhP3IuRm9udFR5cGUuVFlQRTFTVEFOREFSRDoiVHlwZTFDIj09PXQ/ci5Gb250VHlwZS5UWVBFMUM6ci5Gb250VHlwZS5UWVBFMTtjYXNlIkNJREZvbnRUeXBlMCI6cmV0dXJuIkNJREZvbnRUeXBlMEMiPT09dD9yLkZvbnRUeXBlLkNJREZPTlRUWVBFMEM6ci5Gb250VHlwZS5DSURGT05UVFlQRTA7Y2FzZSJPcGVuVHlwZSI6cmV0dXJuIHIuRm9udFR5cGUuT1BFTlRZUEU7Y2FzZSJUcnVlVHlwZSI6cmV0dXJuIHIuRm9udFR5cGUuVFJVRVRZUEU7Y2FzZSJDSURGb250VHlwZTIiOnJldHVybiByLkZvbnRUeXBlLkNJREZPTlRUWVBFMjtjYXNlIk1NVHlwZTEiOnJldHVybiByLkZvbnRUeXBlLk1NVFlQRTE7Y2FzZSJUeXBlMCI6cmV0dXJuIHIuRm9udFR5cGUuVFlQRTA7ZGVmYXVsdDpyZXR1cm4gci5Gb250VHlwZS5VTktOT1dOfX07dC5ub3JtYWxpemVGb250TmFtZT1mdW5jdGlvbiBub3JtYWxpemVGb250TmFtZShlKXtyZXR1cm4gZS5yZXBsYWNlKC9bLF9dL2csIi0iKS5yZXBsYWNlKC9ccy9nLCIiKX07dC5yZWNvdmVyR2x5cGhOYW1lPXJlY292ZXJHbHlwaE5hbWU7dC50eXBlMUZvbnRHbHlwaE1hcHBpbmc9ZnVuY3Rpb24gdHlwZTFGb250R2x5cGhNYXBwaW5nKGUsdCxhKXtjb25zdCByPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IHMsYyxsO2NvbnN0IGg9ISEoZS5mbGFncyZvLlN5bWJvbGljKTtpZihlLmlzSW50ZXJuYWxGb250KXtsPXQ7Zm9yKGM9MDtjPGwubGVuZ3RoO2MrKyl7cz1hLmluZGV4T2YobFtjXSk7cltjXT1zPj0wP3M6MH19ZWxzZSBpZihlLmJhc2VFbmNvZGluZ05hbWUpe2w9KDAsbi5nZXRFbmNvZGluZykoZS5iYXNlRW5jb2RpbmdOYW1lKTtmb3IoYz0wO2M8bC5sZW5ndGg7YysrKXtzPWEuaW5kZXhPZihsW2NdKTtyW2NdPXM+PTA/czowfX1lbHNlIGlmKGgpZm9yKGMgaW4gdClyW2NdPXRbY107ZWxzZXtsPW4uU3RhbmRhcmRFbmNvZGluZztmb3IoYz0wO2M8bC5sZW5ndGg7YysrKXtzPWEuaW5kZXhPZihsW2NdKTtyW2NdPXM+PTA/czowfX1jb25zdCB1PWUuZGlmZmVyZW5jZXM7bGV0IGQ7aWYodSlmb3IoYyBpbiB1KXtjb25zdCBlPXVbY107cz1hLmluZGV4T2YoZSk7aWYoLTE9PT1zKXtkfHwoZD0oMCxpLmdldEdseXBoc1VuaWNvZGUpKCkpO2NvbnN0IHQ9cmVjb3ZlckdseXBoTmFtZShlLGQpO3QhPT1lJiYocz1hLmluZGV4T2YodCkpfXJbY109cz49MD9zOjB9cmV0dXJuIHJ9O3ZhciByPWEoMiksbj1hKDM1KSxpPWEoMzcpLHM9YSgzOCk7dC5TRUFDX0FOQUxZU0lTX0VOQUJMRUQ9ITA7Y29uc3Qgbz17Rml4ZWRQaXRjaDoxLFNlcmlmOjIsU3ltYm9saWM6NCxTY3JpcHQ6OCxOb25zeW1ib2xpYzozMixJdGFsaWM6NjQsQWxsQ2FwOjY1NTM2LFNtYWxsQ2FwOjEzMTA3MixGb3JjZUJvbGQ6MjYyMTQ0fTt0LkZvbnRGbGFncz1vO3QuTWFjU3RhbmRhcmRHbHlwaE9yZGVyaW5nPVsiLm5vdGRlZiIsIi5udWxsIiwibm9ubWFya2luZ3JldHVybiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3Rlc2luZ2xlIiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJncmF2ZSIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCJBZGllcmVzaXMiLCJBcmluZyIsIkNjZWRpbGxhIiwiRWFjdXRlIiwiTnRpbGRlIiwiT2RpZXJlc2lzIiwiVWRpZXJlc2lzIiwiYWFjdXRlIiwiYWdyYXZlIiwiYWNpcmN1bWZsZXgiLCJhZGllcmVzaXMiLCJhdGlsZGUiLCJhcmluZyIsImNjZWRpbGxhIiwiZWFjdXRlIiwiZWdyYXZlIiwiZWNpcmN1bWZsZXgiLCJlZGllcmVzaXMiLCJpYWN1dGUiLCJpZ3JhdmUiLCJpY2lyY3VtZmxleCIsImlkaWVyZXNpcyIsIm50aWxkZSIsIm9hY3V0ZSIsIm9ncmF2ZSIsIm9jaXJjdW1mbGV4Iiwib2RpZXJlc2lzIiwib3RpbGRlIiwidWFjdXRlIiwidWdyYXZlIiwidWNpcmN1bWZsZXgiLCJ1ZGllcmVzaXMiLCJkYWdnZXIiLCJkZWdyZWUiLCJjZW50Iiwic3RlcmxpbmciLCJzZWN0aW9uIiwiYnVsbGV0IiwicGFyYWdyYXBoIiwiZ2VybWFuZGJscyIsInJlZ2lzdGVyZWQiLCJjb3B5cmlnaHQiLCJ0cmFkZW1hcmsiLCJhY3V0ZSIsImRpZXJlc2lzIiwibm90ZXF1YWwiLCJBRSIsIk9zbGFzaCIsImluZmluaXR5IiwicGx1c21pbnVzIiwibGVzc2VxdWFsIiwiZ3JlYXRlcmVxdWFsIiwieWVuIiwibXUiLCJwYXJ0aWFsZGlmZiIsInN1bW1hdGlvbiIsInByb2R1Y3QiLCJwaSIsImludGVncmFsIiwib3JkZmVtaW5pbmUiLCJvcmRtYXNjdWxpbmUiLCJPbWVnYSIsImFlIiwib3NsYXNoIiwicXVlc3Rpb25kb3duIiwiZXhjbGFtZG93biIsImxvZ2ljYWxub3QiLCJyYWRpY2FsIiwiZmxvcmluIiwiYXBwcm94ZXF1YWwiLCJEZWx0YSIsImd1aWxsZW1vdGxlZnQiLCJndWlsbGVtb3RyaWdodCIsImVsbGlwc2lzIiwibm9uYnJlYWtpbmdzcGFjZSIsIkFncmF2ZSIsIkF0aWxkZSIsIk90aWxkZSIsIk9FIiwib2UiLCJlbmRhc2giLCJlbWRhc2giLCJxdW90ZWRibGxlZnQiLCJxdW90ZWRibHJpZ2h0IiwicXVvdGVsZWZ0IiwicXVvdGVyaWdodCIsImRpdmlkZSIsImxvemVuZ2UiLCJ5ZGllcmVzaXMiLCJZZGllcmVzaXMiLCJmcmFjdGlvbiIsImN1cnJlbmN5IiwiZ3VpbHNpbmdsbGVmdCIsImd1aWxzaW5nbHJpZ2h0IiwiZmkiLCJmbCIsImRhZ2dlcmRibCIsInBlcmlvZGNlbnRlcmVkIiwicXVvdGVzaW5nbGJhc2UiLCJxdW90ZWRibGJhc2UiLCJwZXJ0aG91c2FuZCIsIkFjaXJjdW1mbGV4IiwiRWNpcmN1bWZsZXgiLCJBYWN1dGUiLCJFZGllcmVzaXMiLCJFZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIklncmF2ZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiYXBwbGUiLCJPZ3JhdmUiLCJVYWN1dGUiLCJVY2lyY3VtZmxleCIsIlVncmF2ZSIsImRvdGxlc3NpIiwiY2lyY3VtZmxleCIsInRpbGRlIiwibWFjcm9uIiwiYnJldmUiLCJkb3RhY2NlbnQiLCJyaW5nIiwiY2VkaWxsYSIsImh1bmdhcnVtbGF1dCIsIm9nb25layIsImNhcm9uIiwiTHNsYXNoIiwibHNsYXNoIiwiU2Nhcm9uIiwic2Nhcm9uIiwiWmNhcm9uIiwiemNhcm9uIiwiYnJva2VuYmFyIiwiRXRoIiwiZXRoIiwiWWFjdXRlIiwieWFjdXRlIiwiVGhvcm4iLCJ0aG9ybiIsIm1pbnVzIiwibXVsdGlwbHkiLCJvbmVzdXBlcmlvciIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsIm9uZWhhbGYiLCJvbmVxdWFydGVyIiwidGhyZWVxdWFydGVycyIsImZyYW5jIiwiR2JyZXZlIiwiZ2JyZXZlIiwiSWRvdGFjY2VudCIsIlNjZWRpbGxhIiwic2NlZGlsbGEiLCJDYWN1dGUiLCJjYWN1dGUiLCJDY2Fyb24iLCJjY2Fyb24iLCJkY3JvYXQiXTtmdW5jdGlvbiByZWNvdmVyR2x5cGhOYW1lKGUsdCl7aWYodm9pZCAwIT09dFtlXSlyZXR1cm4gZTtjb25zdCBhPSgwLHMuZ2V0VW5pY29kZUZvckdseXBoKShlLHQpO2lmKC0xIT09YSlmb3IoY29uc3QgZSBpbiB0KWlmKHRbZV09PT1hKXJldHVybiBlOygwLHIuaW5mbykoIlVuYWJsZSB0byByZWNvdmVyIGEgc3RhbmRhcmQgZ2x5cGggbmFtZSBmb3I6ICIrZSk7cmV0dXJuIGV9fSwoZSx0LGEpPT57YS5yKHQpO2EuZCh0LHtnZXREaW5nYmF0c0dseXBoc1VuaWNvZGU6KCk9PmksZ2V0R2x5cGhzVW5pY29kZTooKT0+bn0pO3ZhciByPWEoNCk7Y29uc3Qgbj0oMCxyLmdldEFycmF5TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oKXtyZXR1cm5bIkEiLDY1LCJBRSIsMTk4LCJBRWFjdXRlIiw1MDgsIkFFbWFjcm9uIiw0ODIsIkFFc21hbGwiLDYzNDYyLCJBYWN1dGUiLDE5MywiQWFjdXRlc21hbGwiLDYzNDU3LCJBYnJldmUiLDI1OCwiQWJyZXZlYWN1dGUiLDc4NTQsIkFicmV2ZWN5cmlsbGljIiwxMjMyLCJBYnJldmVkb3RiZWxvdyIsNzg2MiwiQWJyZXZlZ3JhdmUiLDc4NTYsIkFicmV2ZWhvb2thYm92ZSIsNzg1OCwiQWJyZXZldGlsZGUiLDc4NjAsIkFjYXJvbiIsNDYxLCJBY2lyY2xlIiw5Mzk4LCJBY2lyY3VtZmxleCIsMTk0LCJBY2lyY3VtZmxleGFjdXRlIiw3ODQ0LCJBY2lyY3VtZmxleGRvdGJlbG93Iiw3ODUyLCJBY2lyY3VtZmxleGdyYXZlIiw3ODQ2LCJBY2lyY3VtZmxleGhvb2thYm92ZSIsNzg0OCwiQWNpcmN1bWZsZXhzbWFsbCIsNjM0NTgsIkFjaXJjdW1mbGV4dGlsZGUiLDc4NTAsIkFjdXRlIiw2MzE3NywiQWN1dGVzbWFsbCIsNjM0MTIsIkFjeXJpbGxpYyIsMTA0MCwiQWRibGdyYXZlIiw1MTIsIkFkaWVyZXNpcyIsMTk2LCJBZGllcmVzaXNjeXJpbGxpYyIsMTIzNCwiQWRpZXJlc2lzbWFjcm9uIiw0NzgsIkFkaWVyZXNpc3NtYWxsIiw2MzQ2MCwiQWRvdGJlbG93Iiw3ODQwLCJBZG90bWFjcm9uIiw0ODAsIkFncmF2ZSIsMTkyLCJBZ3JhdmVzbWFsbCIsNjM0NTYsIkFob29rYWJvdmUiLDc4NDIsIkFpZWN5cmlsbGljIiwxMjM2LCJBaW52ZXJ0ZWRicmV2ZSIsNTE0LCJBbHBoYSIsOTEzLCJBbHBoYXRvbm9zIiw5MDIsIkFtYWNyb24iLDI1NiwiQW1vbm9zcGFjZSIsNjUzMTMsIkFvZ29uZWsiLDI2MCwiQXJpbmciLDE5NywiQXJpbmdhY3V0ZSIsNTA2LCJBcmluZ2JlbG93Iiw3NjgwLCJBcmluZ3NtYWxsIiw2MzQ2MSwiQXNtYWxsIiw2MzMyOSwiQXRpbGRlIiwxOTUsIkF0aWxkZXNtYWxsIiw2MzQ1OSwiQXliYXJtZW5pYW4iLDEzMjksIkIiLDY2LCJCY2lyY2xlIiw5Mzk5LCJCZG90YWNjZW50Iiw3NjgyLCJCZG90YmVsb3ciLDc2ODQsIkJlY3lyaWxsaWMiLDEwNDEsIkJlbmFybWVuaWFuIiwxMzMwLCJCZXRhIiw5MTQsIkJob29rIiwzODUsIkJsaW5lYmVsb3ciLDc2ODYsIkJtb25vc3BhY2UiLDY1MzE0LCJCcmV2ZXNtYWxsIiw2MzIyMCwiQnNtYWxsIiw2MzMzMCwiQnRvcGJhciIsMzg2LCJDIiw2NywiQ2Fhcm1lbmlhbiIsMTM0MiwiQ2FjdXRlIiwyNjIsIkNhcm9uIiw2MzE3OCwiQ2Fyb25zbWFsbCIsNjMyMjEsIkNjYXJvbiIsMjY4LCJDY2VkaWxsYSIsMTk5LCJDY2VkaWxsYWFjdXRlIiw3Njg4LCJDY2VkaWxsYXNtYWxsIiw2MzQ2MywiQ2NpcmNsZSIsOTQwMCwiQ2NpcmN1bWZsZXgiLDI2NCwiQ2RvdCIsMjY2LCJDZG90YWNjZW50IiwyNjYsIkNlZGlsbGFzbWFsbCIsNjM0MTYsIkNoYWFybWVuaWFuIiwxMzUzLCJDaGVhYmtoYXNpYW5jeXJpbGxpYyIsMTIxMiwiQ2hlY3lyaWxsaWMiLDEwNjMsIkNoZWRlc2NlbmRlcmFia2hhc2lhbmN5cmlsbGljIiwxMjE0LCJDaGVkZXNjZW5kZXJjeXJpbGxpYyIsMTIwNiwiQ2hlZGllcmVzaXNjeXJpbGxpYyIsMTI2OCwiQ2hlaGFybWVuaWFuIiwxMzQ3LCJDaGVraGFrYXNzaWFuY3lyaWxsaWMiLDEyMjcsIkNoZXZlcnRpY2Fsc3Ryb2tlY3lyaWxsaWMiLDEyMDgsIkNoaSIsOTM1LCJDaG9vayIsMzkxLCJDaXJjdW1mbGV4c21hbGwiLDYzMjIyLCJDbW9ub3NwYWNlIiw2NTMxNSwiQ29hcm1lbmlhbiIsMTM2MSwiQ3NtYWxsIiw2MzMzMSwiRCIsNjgsIkRaIiw0OTcsIkRaY2Fyb24iLDQ1MiwiRGFhcm1lbmlhbiIsMTMzMiwiRGFmcmljYW4iLDM5MywiRGNhcm9uIiwyNzAsIkRjZWRpbGxhIiw3Njk2LCJEY2lyY2xlIiw5NDAxLCJEY2lyY3VtZmxleGJlbG93Iiw3Njk4LCJEY3JvYXQiLDI3MiwiRGRvdGFjY2VudCIsNzY5MCwiRGRvdGJlbG93Iiw3NjkyLCJEZWN5cmlsbGljIiwxMDQ0LCJEZWljb3B0aWMiLDEwMDYsIkRlbHRhIiw4NzEwLCJEZWx0YWdyZWVrIiw5MTYsIkRob29rIiwzOTQsIkRpZXJlc2lzIiw2MzE3OSwiRGllcmVzaXNBY3V0ZSIsNjMxODAsIkRpZXJlc2lzR3JhdmUiLDYzMTgxLCJEaWVyZXNpc3NtYWxsIiw2MzQwMCwiRGlnYW1tYWdyZWVrIiw5ODgsIkRqZWN5cmlsbGljIiwxMDI2LCJEbGluZWJlbG93Iiw3Njk0LCJEbW9ub3NwYWNlIiw2NTMxNiwiRG90YWNjZW50c21hbGwiLDYzMjIzLCJEc2xhc2giLDI3MiwiRHNtYWxsIiw2MzMzMiwiRHRvcGJhciIsMzk1LCJEeiIsNDk4LCJEemNhcm9uIiw0NTMsIkR6ZWFia2hhc2lhbmN5cmlsbGljIiwxMjQ4LCJEemVjeXJpbGxpYyIsMTAyOSwiRHpoZWN5cmlsbGljIiwxMDM5LCJFIiw2OSwiRWFjdXRlIiwyMDEsIkVhY3V0ZXNtYWxsIiw2MzQ2NSwiRWJyZXZlIiwyNzYsIkVjYXJvbiIsMjgyLCJFY2VkaWxsYWJyZXZlIiw3NzA4LCJFY2hhcm1lbmlhbiIsMTMzMywiRWNpcmNsZSIsOTQwMiwiRWNpcmN1bWZsZXgiLDIwMiwiRWNpcmN1bWZsZXhhY3V0ZSIsNzg3MCwiRWNpcmN1bWZsZXhiZWxvdyIsNzcwNCwiRWNpcmN1bWZsZXhkb3RiZWxvdyIsNzg3OCwiRWNpcmN1bWZsZXhncmF2ZSIsNzg3MiwiRWNpcmN1bWZsZXhob29rYWJvdmUiLDc4NzQsIkVjaXJjdW1mbGV4c21hbGwiLDYzNDY2LCJFY2lyY3VtZmxleHRpbGRlIiw3ODc2LCJFY3lyaWxsaWMiLDEwMjgsIkVkYmxncmF2ZSIsNTE2LCJFZGllcmVzaXMiLDIwMywiRWRpZXJlc2lzc21hbGwiLDYzNDY3LCJFZG90IiwyNzgsIkVkb3RhY2NlbnQiLDI3OCwiRWRvdGJlbG93Iiw3ODY0LCJFZmN5cmlsbGljIiwxMDYwLCJFZ3JhdmUiLDIwMCwiRWdyYXZlc21hbGwiLDYzNDY0LCJFaGFybWVuaWFuIiwxMzM1LCJFaG9va2Fib3ZlIiw3ODY2LCJFaWdodHJvbWFuIiw4NTUxLCJFaW52ZXJ0ZWRicmV2ZSIsNTE4LCJFaW90aWZpZWRjeXJpbGxpYyIsMTEyNCwiRWxjeXJpbGxpYyIsMTA1MSwiRWxldmVucm9tYW4iLDg1NTQsIkVtYWNyb24iLDI3NCwiRW1hY3JvbmFjdXRlIiw3NzAyLCJFbWFjcm9uZ3JhdmUiLDc3MDAsIkVtY3lyaWxsaWMiLDEwNTIsIkVtb25vc3BhY2UiLDY1MzE3LCJFbmN5cmlsbGljIiwxMDUzLCJFbmRlc2NlbmRlcmN5cmlsbGljIiwxMTg2LCJFbmciLDMzMCwiRW5naGVjeXJpbGxpYyIsMTE4OCwiRW5ob29rY3lyaWxsaWMiLDEyMjMsIkVvZ29uZWsiLDI4MCwiRW9wZW4iLDQwMCwiRXBzaWxvbiIsOTE3LCJFcHNpbG9udG9ub3MiLDkwNCwiRXJjeXJpbGxpYyIsMTA1NiwiRXJldmVyc2VkIiwzOTgsIkVyZXZlcnNlZGN5cmlsbGljIiwxMDY5LCJFc2N5cmlsbGljIiwxMDU3LCJFc2Rlc2NlbmRlcmN5cmlsbGljIiwxMTk0LCJFc2giLDQyNSwiRXNtYWxsIiw2MzMzMywiRXRhIiw5MTksIkV0YXJtZW5pYW4iLDEzMzYsIkV0YXRvbm9zIiw5MDUsIkV0aCIsMjA4LCJFdGhzbWFsbCIsNjM0NzIsIkV0aWxkZSIsNzg2OCwiRXRpbGRlYmVsb3ciLDc3MDYsIkV1cm8iLDgzNjQsIkV6aCIsNDM5LCJFemhjYXJvbiIsNDk0LCJFemhyZXZlcnNlZCIsNDQwLCJGIiw3MCwiRmNpcmNsZSIsOTQwMywiRmRvdGFjY2VudCIsNzcxMCwiRmVoYXJtZW5pYW4iLDEzNjYsIkZlaWNvcHRpYyIsOTk2LCJGaG9vayIsNDAxLCJGaXRhY3lyaWxsaWMiLDExMzgsIkZpdmVyb21hbiIsODU0OCwiRm1vbm9zcGFjZSIsNjUzMTgsIkZvdXJyb21hbiIsODU0NywiRnNtYWxsIiw2MzMzNCwiRyIsNzEsIkdCc3F1YXJlIiwxMzE5MSwiR2FjdXRlIiw1MDAsIkdhbW1hIiw5MTUsIkdhbW1hYWZyaWNhbiIsNDA0LCJHYW5naWFjb3B0aWMiLDEwMDIsIkdicmV2ZSIsMjg2LCJHY2Fyb24iLDQ4NiwiR2NlZGlsbGEiLDI5MCwiR2NpcmNsZSIsOTQwNCwiR2NpcmN1bWZsZXgiLDI4NCwiR2NvbW1hYWNjZW50IiwyOTAsIkdkb3QiLDI4OCwiR2RvdGFjY2VudCIsMjg4LCJHZWN5cmlsbGljIiwxMDQzLCJHaGFkYXJtZW5pYW4iLDEzNDYsIkdoZW1pZGRsZWhvb2tjeXJpbGxpYyIsMTE3MiwiR2hlc3Ryb2tlY3lyaWxsaWMiLDExNzAsIkdoZXVwdHVybmN5cmlsbGljIiwxMTY4LCJHaG9vayIsNDAzLCJHaW1hcm1lbmlhbiIsMTMzMSwiR2plY3lyaWxsaWMiLDEwMjcsIkdtYWNyb24iLDc3MTIsIkdtb25vc3BhY2UiLDY1MzE5LCJHcmF2ZSIsNjMxODIsIkdyYXZlc21hbGwiLDYzMzI4LCJHc21hbGwiLDYzMzM1LCJHc21hbGxob29rIiw2NjcsIkdzdHJva2UiLDQ4NCwiSCIsNzIsIkgxODUzMyIsOTY3OSwiSDE4NTQzIiw5NjQyLCJIMTg1NTEiLDk2NDMsIkgyMjA3MyIsOTYzMywiSFBzcXVhcmUiLDEzMjU5LCJIYWFia2hhc2lhbmN5cmlsbGljIiwxMTkyLCJIYWRlc2NlbmRlcmN5cmlsbGljIiwxMjAyLCJIYXJkc2lnbmN5cmlsbGljIiwxMDY2LCJIYmFyIiwyOTQsIkhicmV2ZWJlbG93Iiw3NzIyLCJIY2VkaWxsYSIsNzcyMCwiSGNpcmNsZSIsOTQwNSwiSGNpcmN1bWZsZXgiLDI5MiwiSGRpZXJlc2lzIiw3NzE4LCJIZG90YWNjZW50Iiw3NzE0LCJIZG90YmVsb3ciLDc3MTYsIkhtb25vc3BhY2UiLDY1MzIwLCJIb2FybWVuaWFuIiwxMzQ0LCJIb3JpY29wdGljIiwxZTMsIkhzbWFsbCIsNjMzMzYsIkh1bmdhcnVtbGF1dCIsNjMxODMsIkh1bmdhcnVtbGF1dHNtYWxsIiw2MzIyNCwiSHpzcXVhcmUiLDEzMjAwLCJJIiw3MywiSUFjeXJpbGxpYyIsMTA3MSwiSUoiLDMwNiwiSVVjeXJpbGxpYyIsMTA3MCwiSWFjdXRlIiwyMDUsIklhY3V0ZXNtYWxsIiw2MzQ2OSwiSWJyZXZlIiwzMDAsIkljYXJvbiIsNDYzLCJJY2lyY2xlIiw5NDA2LCJJY2lyY3VtZmxleCIsMjA2LCJJY2lyY3VtZmxleHNtYWxsIiw2MzQ3MCwiSWN5cmlsbGljIiwxMDMwLCJJZGJsZ3JhdmUiLDUyMCwiSWRpZXJlc2lzIiwyMDcsIklkaWVyZXNpc2FjdXRlIiw3NzI2LCJJZGllcmVzaXNjeXJpbGxpYyIsMTI1MiwiSWRpZXJlc2lzc21hbGwiLDYzNDcxLCJJZG90IiwzMDQsIklkb3RhY2NlbnQiLDMwNCwiSWRvdGJlbG93Iiw3ODgyLCJJZWJyZXZlY3lyaWxsaWMiLDEyMzgsIkllY3lyaWxsaWMiLDEwNDUsIklmcmFrdHVyIiw4NDY1LCJJZ3JhdmUiLDIwNCwiSWdyYXZlc21hbGwiLDYzNDY4LCJJaG9va2Fib3ZlIiw3ODgwLCJJaWN5cmlsbGljIiwxMDQ4LCJJaW52ZXJ0ZWRicmV2ZSIsNTIyLCJJaXNob3J0Y3lyaWxsaWMiLDEwNDksIkltYWNyb24iLDI5OCwiSW1hY3JvbmN5cmlsbGljIiwxMjUwLCJJbW9ub3NwYWNlIiw2NTMyMSwiSW5pYXJtZW5pYW4iLDEzMzksIklvY3lyaWxsaWMiLDEwMjUsIklvZ29uZWsiLDMwMiwiSW90YSIsOTIxLCJJb3RhYWZyaWNhbiIsNDA2LCJJb3RhZGllcmVzaXMiLDkzOCwiSW90YXRvbm9zIiw5MDYsIklzbWFsbCIsNjMzMzcsIklzdHJva2UiLDQwNywiSXRpbGRlIiwyOTYsIkl0aWxkZWJlbG93Iiw3NzI0LCJJemhpdHNhY3lyaWxsaWMiLDExNDAsIkl6aGl0c2FkYmxncmF2ZWN5cmlsbGljIiwxMTQyLCJKIiw3NCwiSmFhcm1lbmlhbiIsMTM0NSwiSmNpcmNsZSIsOTQwNywiSmNpcmN1bWZsZXgiLDMwOCwiSmVjeXJpbGxpYyIsMTAzMiwiSmhlaGFybWVuaWFuIiwxMzU1LCJKbW9ub3NwYWNlIiw2NTMyMiwiSnNtYWxsIiw2MzMzOCwiSyIsNzUsIktCc3F1YXJlIiwxMzE4OSwiS0tzcXVhcmUiLDEzMjYxLCJLYWJhc2hraXJjeXJpbGxpYyIsMTE4NCwiS2FjdXRlIiw3NzI4LCJLYWN5cmlsbGljIiwxMDUwLCJLYWRlc2NlbmRlcmN5cmlsbGljIiwxMTc4LCJLYWhvb2tjeXJpbGxpYyIsMTIxOSwiS2FwcGEiLDkyMiwiS2FzdHJva2VjeXJpbGxpYyIsMTE4MiwiS2F2ZXJ0aWNhbHN0cm9rZWN5cmlsbGljIiwxMTgwLCJLY2Fyb24iLDQ4OCwiS2NlZGlsbGEiLDMxMCwiS2NpcmNsZSIsOTQwOCwiS2NvbW1hYWNjZW50IiwzMTAsIktkb3RiZWxvdyIsNzczMCwiS2VoYXJtZW5pYW4iLDEzNjQsIktlbmFybWVuaWFuIiwxMzQzLCJLaGFjeXJpbGxpYyIsMTA2MSwiS2hlaWNvcHRpYyIsOTk4LCJLaG9vayIsNDA4LCJLamVjeXJpbGxpYyIsMTAzNiwiS2xpbmViZWxvdyIsNzczMiwiS21vbm9zcGFjZSIsNjUzMjMsIktvcHBhY3lyaWxsaWMiLDExNTIsIktvcHBhZ3JlZWsiLDk5MCwiS3NpY3lyaWxsaWMiLDExMzQsIktzbWFsbCIsNjMzMzksIkwiLDc2LCJMSiIsNDU1LCJMTCIsNjMxNjcsIkxhY3V0ZSIsMzEzLCJMYW1iZGEiLDkyMywiTGNhcm9uIiwzMTcsIkxjZWRpbGxhIiwzMTUsIkxjaXJjbGUiLDk0MDksIkxjaXJjdW1mbGV4YmVsb3ciLDc3NDAsIkxjb21tYWFjY2VudCIsMzE1LCJMZG90IiwzMTksIkxkb3RhY2NlbnQiLDMxOSwiTGRvdGJlbG93Iiw3NzM0LCJMZG90YmVsb3dtYWNyb24iLDc3MzYsIkxpd25hcm1lbmlhbiIsMTM0MCwiTGoiLDQ1NiwiTGplY3lyaWxsaWMiLDEwMzMsIkxsaW5lYmVsb3ciLDc3MzgsIkxtb25vc3BhY2UiLDY1MzI0LCJMc2xhc2giLDMyMSwiTHNsYXNoc21hbGwiLDYzMjI1LCJMc21hbGwiLDYzMzQwLCJNIiw3NywiTUJzcXVhcmUiLDEzMTkwLCJNYWNyb24iLDYzMTg0LCJNYWNyb25zbWFsbCIsNjM0MDcsIk1hY3V0ZSIsNzc0MiwiTWNpcmNsZSIsOTQxMCwiTWRvdGFjY2VudCIsNzc0NCwiTWRvdGJlbG93Iiw3NzQ2LCJNZW5hcm1lbmlhbiIsMTM0OCwiTW1vbm9zcGFjZSIsNjUzMjUsIk1zbWFsbCIsNjMzNDEsIk10dXJuZWQiLDQxMiwiTXUiLDkyNCwiTiIsNzgsIk5KIiw0NTgsIk5hY3V0ZSIsMzIzLCJOY2Fyb24iLDMyNywiTmNlZGlsbGEiLDMyNSwiTmNpcmNsZSIsOTQxMSwiTmNpcmN1bWZsZXhiZWxvdyIsNzc1NCwiTmNvbW1hYWNjZW50IiwzMjUsIk5kb3RhY2NlbnQiLDc3NDgsIk5kb3RiZWxvdyIsNzc1MCwiTmhvb2tsZWZ0Iiw0MTMsIk5pbmVyb21hbiIsODU1MiwiTmoiLDQ1OSwiTmplY3lyaWxsaWMiLDEwMzQsIk5saW5lYmVsb3ciLDc3NTIsIk5tb25vc3BhY2UiLDY1MzI2LCJOb3dhcm1lbmlhbiIsMTM1MCwiTnNtYWxsIiw2MzM0MiwiTnRpbGRlIiwyMDksIk50aWxkZXNtYWxsIiw2MzQ3MywiTnUiLDkyNSwiTyIsNzksIk9FIiwzMzgsIk9Fc21hbGwiLDYzMjI2LCJPYWN1dGUiLDIxMSwiT2FjdXRlc21hbGwiLDYzNDc1LCJPYmFycmVkY3lyaWxsaWMiLDEyNTYsIk9iYXJyZWRkaWVyZXNpc2N5cmlsbGljIiwxMjU4LCJPYnJldmUiLDMzNCwiT2Nhcm9uIiw0NjUsIk9jZW50ZXJlZHRpbGRlIiw0MTUsIk9jaXJjbGUiLDk0MTIsIk9jaXJjdW1mbGV4IiwyMTIsIk9jaXJjdW1mbGV4YWN1dGUiLDc4ODgsIk9jaXJjdW1mbGV4ZG90YmVsb3ciLDc4OTYsIk9jaXJjdW1mbGV4Z3JhdmUiLDc4OTAsIk9jaXJjdW1mbGV4aG9va2Fib3ZlIiw3ODkyLCJPY2lyY3VtZmxleHNtYWxsIiw2MzQ3NiwiT2NpcmN1bWZsZXh0aWxkZSIsNzg5NCwiT2N5cmlsbGljIiwxMDU0LCJPZGJsYWN1dGUiLDMzNiwiT2RibGdyYXZlIiw1MjQsIk9kaWVyZXNpcyIsMjE0LCJPZGllcmVzaXNjeXJpbGxpYyIsMTI1NCwiT2RpZXJlc2lzc21hbGwiLDYzNDc4LCJPZG90YmVsb3ciLDc4ODQsIk9nb25la3NtYWxsIiw2MzIyNywiT2dyYXZlIiwyMTAsIk9ncmF2ZXNtYWxsIiw2MzQ3NCwiT2hhcm1lbmlhbiIsMTM2NSwiT2htIiw4NDg2LCJPaG9va2Fib3ZlIiw3ODg2LCJPaG9ybiIsNDE2LCJPaG9ybmFjdXRlIiw3ODk4LCJPaG9ybmRvdGJlbG93Iiw3OTA2LCJPaG9ybmdyYXZlIiw3OTAwLCJPaG9ybmhvb2thYm92ZSIsNzkwMiwiT2hvcm50aWxkZSIsNzkwNCwiT2h1bmdhcnVtbGF1dCIsMzM2LCJPaSIsNDE4LCJPaW52ZXJ0ZWRicmV2ZSIsNTI2LCJPbWFjcm9uIiwzMzIsIk9tYWNyb25hY3V0ZSIsNzc2MiwiT21hY3JvbmdyYXZlIiw3NzYwLCJPbWVnYSIsODQ4NiwiT21lZ2FjeXJpbGxpYyIsMTEyMCwiT21lZ2FncmVlayIsOTM3LCJPbWVnYXJvdW5kY3lyaWxsaWMiLDExNDYsIk9tZWdhdGl0bG9jeXJpbGxpYyIsMTE0OCwiT21lZ2F0b25vcyIsOTExLCJPbWljcm9uIiw5MjcsIk9taWNyb250b25vcyIsOTA4LCJPbW9ub3NwYWNlIiw2NTMyNywiT25lcm9tYW4iLDg1NDQsIk9vZ29uZWsiLDQ5MCwiT29nb25la21hY3JvbiIsNDkyLCJPb3BlbiIsMzkwLCJPc2xhc2giLDIxNiwiT3NsYXNoYWN1dGUiLDUxMCwiT3NsYXNoc21hbGwiLDYzNDgwLCJPc21hbGwiLDYzMzQzLCJPc3Ryb2tlYWN1dGUiLDUxMCwiT3RjeXJpbGxpYyIsMTE1MCwiT3RpbGRlIiwyMTMsIk90aWxkZWFjdXRlIiw3NzU2LCJPdGlsZGVkaWVyZXNpcyIsNzc1OCwiT3RpbGRlc21hbGwiLDYzNDc3LCJQIiw4MCwiUGFjdXRlIiw3NzY0LCJQY2lyY2xlIiw5NDEzLCJQZG90YWNjZW50Iiw3NzY2LCJQZWN5cmlsbGljIiwxMDU1LCJQZWhhcm1lbmlhbiIsMTM1NCwiUGVtaWRkbGVob29rY3lyaWxsaWMiLDExOTAsIlBoaSIsOTM0LCJQaG9vayIsNDIwLCJQaSIsOTI4LCJQaXdyYXJtZW5pYW4iLDEzNjMsIlBtb25vc3BhY2UiLDY1MzI4LCJQc2kiLDkzNiwiUHNpY3lyaWxsaWMiLDExMzYsIlBzbWFsbCIsNjMzNDQsIlEiLDgxLCJRY2lyY2xlIiw5NDE0LCJRbW9ub3NwYWNlIiw2NTMyOSwiUXNtYWxsIiw2MzM0NSwiUiIsODIsIlJhYXJtZW5pYW4iLDEzNTYsIlJhY3V0ZSIsMzQwLCJSY2Fyb24iLDM0NCwiUmNlZGlsbGEiLDM0MiwiUmNpcmNsZSIsOTQxNSwiUmNvbW1hYWNjZW50IiwzNDIsIlJkYmxncmF2ZSIsNTI4LCJSZG90YWNjZW50Iiw3NzY4LCJSZG90YmVsb3ciLDc3NzAsIlJkb3RiZWxvd21hY3JvbiIsNzc3MiwiUmVoYXJtZW5pYW4iLDEzNjAsIlJmcmFrdHVyIiw4NDc2LCJSaG8iLDkyOSwiUmluZ3NtYWxsIiw2MzIyOCwiUmludmVydGVkYnJldmUiLDUzMCwiUmxpbmViZWxvdyIsNzc3NCwiUm1vbm9zcGFjZSIsNjUzMzAsIlJzbWFsbCIsNjMzNDYsIlJzbWFsbGludmVydGVkIiw2NDEsIlJzbWFsbGludmVydGVkc3VwZXJpb3IiLDY5NCwiUyIsODMsIlNGMDEwMDAwIiw5NDg0LCJTRjAyMDAwMCIsOTQ5MiwiU0YwMzAwMDAiLDk0ODgsIlNGMDQwMDAwIiw5NDk2LCJTRjA1MDAwMCIsOTUzMiwiU0YwNjAwMDAiLDk1MTYsIlNGMDcwMDAwIiw5NTI0LCJTRjA4MDAwMCIsOTUwMCwiU0YwOTAwMDAiLDk1MDgsIlNGMTAwMDAwIiw5NDcyLCJTRjExMDAwMCIsOTQ3NCwiU0YxOTAwMDAiLDk1NjksIlNGMjAwMDAwIiw5NTcwLCJTRjIxMDAwMCIsOTU1OCwiU0YyMjAwMDAiLDk1NTcsIlNGMjMwMDAwIiw5NTcxLCJTRjI0MDAwMCIsOTU1MywiU0YyNTAwMDAiLDk1NTksIlNGMjYwMDAwIiw5NTY1LCJTRjI3MDAwMCIsOTU2NCwiU0YyODAwMDAiLDk1NjMsIlNGMzYwMDAwIiw5NTY2LCJTRjM3MDAwMCIsOTU2NywiU0YzODAwMDAiLDk1NjIsIlNGMzkwMDAwIiw5NTU2LCJTRjQwMDAwMCIsOTU3NywiU0Y0MTAwMDAiLDk1NzQsIlNGNDIwMDAwIiw5NTY4LCJTRjQzMDAwMCIsOTU1MiwiU0Y0NDAwMDAiLDk1ODAsIlNGNDUwMDAwIiw5NTc1LCJTRjQ2MDAwMCIsOTU3NiwiU0Y0NzAwMDAiLDk1NzIsIlNGNDgwMDAwIiw5NTczLCJTRjQ5MDAwMCIsOTU2MSwiU0Y1MDAwMDAiLDk1NjAsIlNGNTEwMDAwIiw5NTU0LCJTRjUyMDAwMCIsOTU1NSwiU0Y1MzAwMDAiLDk1NzksIlNGNTQwMDAwIiw5NTc4LCJTYWN1dGUiLDM0NiwiU2FjdXRlZG90YWNjZW50Iiw3NzgwLCJTYW1waWdyZWVrIiw5OTIsIlNjYXJvbiIsMzUyLCJTY2Fyb25kb3RhY2NlbnQiLDc3ODIsIlNjYXJvbnNtYWxsIiw2MzIyOSwiU2NlZGlsbGEiLDM1MCwiU2Nod2EiLDM5OSwiU2Nod2FjeXJpbGxpYyIsMTI0MCwiU2Nod2FkaWVyZXNpc2N5cmlsbGljIiwxMjQyLCJTY2lyY2xlIiw5NDE2LCJTY2lyY3VtZmxleCIsMzQ4LCJTY29tbWFhY2NlbnQiLDUzNiwiU2RvdGFjY2VudCIsNzc3NiwiU2RvdGJlbG93Iiw3Nzc4LCJTZG90YmVsb3dkb3RhY2NlbnQiLDc3ODQsIlNlaGFybWVuaWFuIiwxMzU3LCJTZXZlbnJvbWFuIiw4NTUwLCJTaGFhcm1lbmlhbiIsMTM1MSwiU2hhY3lyaWxsaWMiLDEwNjQsIlNoY2hhY3lyaWxsaWMiLDEwNjUsIlNoZWljb3B0aWMiLDk5NCwiU2hoYWN5cmlsbGljIiwxMjEwLCJTaGltYWNvcHRpYyIsMTAwNCwiU2lnbWEiLDkzMSwiU2l4cm9tYW4iLDg1NDksIlNtb25vc3BhY2UiLDY1MzMxLCJTb2Z0c2lnbmN5cmlsbGljIiwxMDY4LCJTc21hbGwiLDYzMzQ3LCJTdGlnbWFncmVlayIsOTg2LCJUIiw4NCwiVGF1Iiw5MzIsIlRiYXIiLDM1OCwiVGNhcm9uIiwzNTYsIlRjZWRpbGxhIiwzNTQsIlRjaXJjbGUiLDk0MTcsIlRjaXJjdW1mbGV4YmVsb3ciLDc3OTIsIlRjb21tYWFjY2VudCIsMzU0LCJUZG90YWNjZW50Iiw3Nzg2LCJUZG90YmVsb3ciLDc3ODgsIlRlY3lyaWxsaWMiLDEwNTgsIlRlZGVzY2VuZGVyY3lyaWxsaWMiLDExOTYsIlRlbnJvbWFuIiw4NTUzLCJUZXRzZWN5cmlsbGljIiwxMjA0LCJUaGV0YSIsOTIwLCJUaG9vayIsNDI4LCJUaG9ybiIsMjIyLCJUaG9ybnNtYWxsIiw2MzQ4NiwiVGhyZWVyb21hbiIsODU0NiwiVGlsZGVzbWFsbCIsNjMyMzAsIlRpd25hcm1lbmlhbiIsMTM1OSwiVGxpbmViZWxvdyIsNzc5MCwiVG1vbm9zcGFjZSIsNjUzMzIsIlRvYXJtZW5pYW4iLDEzMzcsIlRvbmVmaXZlIiw0NDQsIlRvbmVzaXgiLDM4OCwiVG9uZXR3byIsNDIzLCJUcmV0cm9mbGV4aG9vayIsNDMwLCJUc2VjeXJpbGxpYyIsMTA2MiwiVHNoZWN5cmlsbGljIiwxMDM1LCJUc21hbGwiLDYzMzQ4LCJUd2VsdmVyb21hbiIsODU1NSwiVHdvcm9tYW4iLDg1NDUsIlUiLDg1LCJVYWN1dGUiLDIxOCwiVWFjdXRlc21hbGwiLDYzNDgyLCJVYnJldmUiLDM2NCwiVWNhcm9uIiw0NjcsIlVjaXJjbGUiLDk0MTgsIlVjaXJjdW1mbGV4IiwyMTksIlVjaXJjdW1mbGV4YmVsb3ciLDc3OTgsIlVjaXJjdW1mbGV4c21hbGwiLDYzNDgzLCJVY3lyaWxsaWMiLDEwNTksIlVkYmxhY3V0ZSIsMzY4LCJVZGJsZ3JhdmUiLDUzMiwiVWRpZXJlc2lzIiwyMjAsIlVkaWVyZXNpc2FjdXRlIiw0NzEsIlVkaWVyZXNpc2JlbG93Iiw3Nzk0LCJVZGllcmVzaXNjYXJvbiIsNDczLCJVZGllcmVzaXNjeXJpbGxpYyIsMTI2NCwiVWRpZXJlc2lzZ3JhdmUiLDQ3NSwiVWRpZXJlc2lzbWFjcm9uIiw0NjksIlVkaWVyZXNpc3NtYWxsIiw2MzQ4NCwiVWRvdGJlbG93Iiw3OTA4LCJVZ3JhdmUiLDIxNywiVWdyYXZlc21hbGwiLDYzNDgxLCJVaG9va2Fib3ZlIiw3OTEwLCJVaG9ybiIsNDMxLCJVaG9ybmFjdXRlIiw3OTEyLCJVaG9ybmRvdGJlbG93Iiw3OTIwLCJVaG9ybmdyYXZlIiw3OTE0LCJVaG9ybmhvb2thYm92ZSIsNzkxNiwiVWhvcm50aWxkZSIsNzkxOCwiVWh1bmdhcnVtbGF1dCIsMzY4LCJVaHVuZ2FydW1sYXV0Y3lyaWxsaWMiLDEyNjYsIlVpbnZlcnRlZGJyZXZlIiw1MzQsIlVrY3lyaWxsaWMiLDExNDQsIlVtYWNyb24iLDM2MiwiVW1hY3JvbmN5cmlsbGljIiwxMjYyLCJVbWFjcm9uZGllcmVzaXMiLDc4MDIsIlVtb25vc3BhY2UiLDY1MzMzLCJVb2dvbmVrIiwzNzAsIlVwc2lsb24iLDkzMywiVXBzaWxvbjEiLDk3OCwiVXBzaWxvbmFjdXRlaG9va3N5bWJvbGdyZWVrIiw5NzksIlVwc2lsb25hZnJpY2FuIiw0MzMsIlVwc2lsb25kaWVyZXNpcyIsOTM5LCJVcHNpbG9uZGllcmVzaXNob29rc3ltYm9sZ3JlZWsiLDk4MCwiVXBzaWxvbmhvb2tzeW1ib2wiLDk3OCwiVXBzaWxvbnRvbm9zIiw5MTAsIlVyaW5nIiwzNjYsIlVzaG9ydGN5cmlsbGljIiwxMDM4LCJVc21hbGwiLDYzMzQ5LCJVc3RyYWlnaHRjeXJpbGxpYyIsMTE5OCwiVXN0cmFpZ2h0c3Ryb2tlY3lyaWxsaWMiLDEyMDAsIlV0aWxkZSIsMzYwLCJVdGlsZGVhY3V0ZSIsNzgwMCwiVXRpbGRlYmVsb3ciLDc3OTYsIlYiLDg2LCJWY2lyY2xlIiw5NDE5LCJWZG90YmVsb3ciLDc4MDYsIlZlY3lyaWxsaWMiLDEwNDIsIlZld2FybWVuaWFuIiwxMzU4LCJWaG9vayIsNDM0LCJWbW9ub3NwYWNlIiw2NTMzNCwiVm9hcm1lbmlhbiIsMTM1MiwiVnNtYWxsIiw2MzM1MCwiVnRpbGRlIiw3ODA0LCJXIiw4NywiV2FjdXRlIiw3ODEwLCJXY2lyY2xlIiw5NDIwLCJXY2lyY3VtZmxleCIsMzcyLCJXZGllcmVzaXMiLDc4MTIsIldkb3RhY2NlbnQiLDc4MTQsIldkb3RiZWxvdyIsNzgxNiwiV2dyYXZlIiw3ODA4LCJXbW9ub3NwYWNlIiw2NTMzNSwiV3NtYWxsIiw2MzM1MSwiWCIsODgsIlhjaXJjbGUiLDk0MjEsIlhkaWVyZXNpcyIsNzgyMCwiWGRvdGFjY2VudCIsNzgxOCwiWGVoYXJtZW5pYW4iLDEzNDEsIlhpIiw5MjYsIlhtb25vc3BhY2UiLDY1MzM2LCJYc21hbGwiLDYzMzUyLCJZIiw4OSwiWWFjdXRlIiwyMjEsIllhY3V0ZXNtYWxsIiw2MzQ4NSwiWWF0Y3lyaWxsaWMiLDExMjIsIlljaXJjbGUiLDk0MjIsIlljaXJjdW1mbGV4IiwzNzQsIllkaWVyZXNpcyIsMzc2LCJZZGllcmVzaXNzbWFsbCIsNjM0ODcsIllkb3RhY2NlbnQiLDc4MjIsIllkb3RiZWxvdyIsNzkyNCwiWWVyaWN5cmlsbGljIiwxMDY3LCJZZXJ1ZGllcmVzaXNjeXJpbGxpYyIsMTI3MiwiWWdyYXZlIiw3OTIyLCJZaG9vayIsNDM1LCJZaG9va2Fib3ZlIiw3OTI2LCJZaWFybWVuaWFuIiwxMzQ5LCJZaWN5cmlsbGljIiwxMDMxLCJZaXduYXJtZW5pYW4iLDEzNjIsIlltb25vc3BhY2UiLDY1MzM3LCJZc21hbGwiLDYzMzUzLCJZdGlsZGUiLDc5MjgsIll1c2JpZ2N5cmlsbGljIiwxMTMwLCJZdXNiaWdpb3RpZmllZGN5cmlsbGljIiwxMTMyLCJZdXNsaXR0bGVjeXJpbGxpYyIsMTEyNiwiWXVzbGl0dGxlaW90aWZpZWRjeXJpbGxpYyIsMTEyOCwiWiIsOTAsIlphYXJtZW5pYW4iLDEzMzQsIlphY3V0ZSIsMzc3LCJaY2Fyb24iLDM4MSwiWmNhcm9uc21hbGwiLDYzMjMxLCJaY2lyY2xlIiw5NDIzLCJaY2lyY3VtZmxleCIsNzgyNCwiWmRvdCIsMzc5LCJaZG90YWNjZW50IiwzNzksIlpkb3RiZWxvdyIsNzgyNiwiWmVjeXJpbGxpYyIsMTA0NywiWmVkZXNjZW5kZXJjeXJpbGxpYyIsMTE3NiwiWmVkaWVyZXNpc2N5cmlsbGljIiwxMjQ2LCJaZXRhIiw5MTgsIlpoZWFybWVuaWFuIiwxMzM4LCJaaGVicmV2ZWN5cmlsbGljIiwxMjE3LCJaaGVjeXJpbGxpYyIsMTA0NiwiWmhlZGVzY2VuZGVyY3lyaWxsaWMiLDExNzQsIlpoZWRpZXJlc2lzY3lyaWxsaWMiLDEyNDQsIlpsaW5lYmVsb3ciLDc4MjgsIlptb25vc3BhY2UiLDY1MzM4LCJac21hbGwiLDYzMzU0LCJac3Ryb2tlIiw0MzcsImEiLDk3LCJhYWJlbmdhbGkiLDI0MzgsImFhY3V0ZSIsMjI1LCJhYWRldmEiLDIzMTAsImFhZ3VqYXJhdGkiLDI2OTQsImFhZ3VybXVraGkiLDI1NjYsImFhbWF0cmFndXJtdWtoaSIsMjYyMiwiYWFydXNxdWFyZSIsMTMwNTksImFhdm93ZWxzaWduYmVuZ2FsaSIsMjQ5NCwiYWF2b3dlbHNpZ25kZXZhIiwyMzY2LCJhYXZvd2Vsc2lnbmd1amFyYXRpIiwyNzUwLCJhYmJyZXZpYXRpb25tYXJrYXJtZW5pYW4iLDEzNzUsImFiYnJldmlhdGlvbnNpZ25kZXZhIiwyNDE2LCJhYmVuZ2FsaSIsMjQzNywiYWJvcG9tb2ZvIiwxMjU3MCwiYWJyZXZlIiwyNTksImFicmV2ZWFjdXRlIiw3ODU1LCJhYnJldmVjeXJpbGxpYyIsMTIzMywiYWJyZXZlZG90YmVsb3ciLDc4NjMsImFicmV2ZWdyYXZlIiw3ODU3LCJhYnJldmVob29rYWJvdmUiLDc4NTksImFicmV2ZXRpbGRlIiw3ODYxLCJhY2Fyb24iLDQ2MiwiYWNpcmNsZSIsOTQyNCwiYWNpcmN1bWZsZXgiLDIyNiwiYWNpcmN1bWZsZXhhY3V0ZSIsNzg0NSwiYWNpcmN1bWZsZXhkb3RiZWxvdyIsNzg1MywiYWNpcmN1bWZsZXhncmF2ZSIsNzg0NywiYWNpcmN1bWZsZXhob29rYWJvdmUiLDc4NDksImFjaXJjdW1mbGV4dGlsZGUiLDc4NTEsImFjdXRlIiwxODAsImFjdXRlYmVsb3djbWIiLDc5MSwiYWN1dGVjbWIiLDc2OSwiYWN1dGVjb21iIiw3NjksImFjdXRlZGV2YSIsMjM4OCwiYWN1dGVsb3dtb2QiLDcxOSwiYWN1dGV0b25lY21iIiw4MzMsImFjeXJpbGxpYyIsMTA3MiwiYWRibGdyYXZlIiw1MTMsImFkZGFrZ3VybXVraGkiLDI2NzMsImFkZXZhIiwyMzA5LCJhZGllcmVzaXMiLDIyOCwiYWRpZXJlc2lzY3lyaWxsaWMiLDEyMzUsImFkaWVyZXNpc21hY3JvbiIsNDc5LCJhZG90YmVsb3ciLDc4NDEsImFkb3RtYWNyb24iLDQ4MSwiYWUiLDIzMCwiYWVhY3V0ZSIsNTA5LCJhZWtvcmVhbiIsMTI2MjQsImFlbWFjcm9uIiw0ODMsImFmaWkwMDIwOCIsODIxMywiYWZpaTA4OTQxIiw4MzU2LCJhZmlpMTAwMTciLDEwNDAsImFmaWkxMDAxOCIsMTA0MSwiYWZpaTEwMDE5IiwxMDQyLCJhZmlpMTAwMjAiLDEwNDMsImFmaWkxMDAyMSIsMTA0NCwiYWZpaTEwMDIyIiwxMDQ1LCJhZmlpMTAwMjMiLDEwMjUsImFmaWkxMDAyNCIsMTA0NiwiYWZpaTEwMDI1IiwxMDQ3LCJhZmlpMTAwMjYiLDEwNDgsImFmaWkxMDAyNyIsMTA0OSwiYWZpaTEwMDI4IiwxMDUwLCJhZmlpMTAwMjkiLDEwNTEsImFmaWkxMDAzMCIsMTA1MiwiYWZpaTEwMDMxIiwxMDUzLCJhZmlpMTAwMzIiLDEwNTQsImFmaWkxMDAzMyIsMTA1NSwiYWZpaTEwMDM0IiwxMDU2LCJhZmlpMTAwMzUiLDEwNTcsImFmaWkxMDAzNiIsMTA1OCwiYWZpaTEwMDM3IiwxMDU5LCJhZmlpMTAwMzgiLDEwNjAsImFmaWkxMDAzOSIsMTA2MSwiYWZpaTEwMDQwIiwxMDYyLCJhZmlpMTAwNDEiLDEwNjMsImFmaWkxMDA0MiIsMTA2NCwiYWZpaTEwMDQzIiwxMDY1LCJhZmlpMTAwNDQiLDEwNjYsImFmaWkxMDA0NSIsMTA2NywiYWZpaTEwMDQ2IiwxMDY4LCJhZmlpMTAwNDciLDEwNjksImFmaWkxMDA0OCIsMTA3MCwiYWZpaTEwMDQ5IiwxMDcxLCJhZmlpMTAwNTAiLDExNjgsImFmaWkxMDA1MSIsMTAyNiwiYWZpaTEwMDUyIiwxMDI3LCJhZmlpMTAwNTMiLDEwMjgsImFmaWkxMDA1NCIsMTAyOSwiYWZpaTEwMDU1IiwxMDMwLCJhZmlpMTAwNTYiLDEwMzEsImFmaWkxMDA1NyIsMTAzMiwiYWZpaTEwMDU4IiwxMDMzLCJhZmlpMTAwNTkiLDEwMzQsImFmaWkxMDA2MCIsMTAzNSwiYWZpaTEwMDYxIiwxMDM2LCJhZmlpMTAwNjIiLDEwMzgsImFmaWkxMDA2MyIsNjMxNzIsImFmaWkxMDA2NCIsNjMxNzMsImFmaWkxMDA2NSIsMTA3MiwiYWZpaTEwMDY2IiwxMDczLCJhZmlpMTAwNjciLDEwNzQsImFmaWkxMDA2OCIsMTA3NSwiYWZpaTEwMDY5IiwxMDc2LCJhZmlpMTAwNzAiLDEwNzcsImFmaWkxMDA3MSIsMTEwNSwiYWZpaTEwMDcyIiwxMDc4LCJhZmlpMTAwNzMiLDEwNzksImFmaWkxMDA3NCIsMTA4MCwiYWZpaTEwMDc1IiwxMDgxLCJhZmlpMTAwNzYiLDEwODIsImFmaWkxMDA3NyIsMTA4MywiYWZpaTEwMDc4IiwxMDg0LCJhZmlpMTAwNzkiLDEwODUsImFmaWkxMDA4MCIsMTA4NiwiYWZpaTEwMDgxIiwxMDg3LCJhZmlpMTAwODIiLDEwODgsImFmaWkxMDA4MyIsMTA4OSwiYWZpaTEwMDg0IiwxMDkwLCJhZmlpMTAwODUiLDEwOTEsImFmaWkxMDA4NiIsMTA5MiwiYWZpaTEwMDg3IiwxMDkzLCJhZmlpMTAwODgiLDEwOTQsImFmaWkxMDA4OSIsMTA5NSwiYWZpaTEwMDkwIiwxMDk2LCJhZmlpMTAwOTEiLDEwOTcsImFmaWkxMDA5MiIsMTA5OCwiYWZpaTEwMDkzIiwxMDk5LCJhZmlpMTAwOTQiLDExMDAsImFmaWkxMDA5NSIsMTEwMSwiYWZpaTEwMDk2IiwxMTAyLCJhZmlpMTAwOTciLDExMDMsImFmaWkxMDA5OCIsMTE2OSwiYWZpaTEwMDk5IiwxMTA2LCJhZmlpMTAxMDAiLDExMDcsImFmaWkxMDEwMSIsMTEwOCwiYWZpaTEwMTAyIiwxMTA5LCJhZmlpMTAxMDMiLDExMTAsImFmaWkxMDEwNCIsMTExMSwiYWZpaTEwMTA1IiwxMTEyLCJhZmlpMTAxMDYiLDExMTMsImFmaWkxMDEwNyIsMTExNCwiYWZpaTEwMTA4IiwxMTE1LCJhZmlpMTAxMDkiLDExMTYsImFmaWkxMDExMCIsMTExOCwiYWZpaTEwMTQ1IiwxMDM5LCJhZmlpMTAxNDYiLDExMjIsImFmaWkxMDE0NyIsMTEzOCwiYWZpaTEwMTQ4IiwxMTQwLCJhZmlpMTAxOTIiLDYzMTc0LCJhZmlpMTAxOTMiLDExMTksImFmaWkxMDE5NCIsMTEyMywiYWZpaTEwMTk1IiwxMTM5LCJhZmlpMTAxOTYiLDExNDEsImFmaWkxMDgzMSIsNjMxNzUsImFmaWkxMDgzMiIsNjMxNzYsImFmaWkxMDg0NiIsMTI0MSwiYWZpaTI5OSIsODIwNiwiYWZpaTMwMCIsODIwNywiYWZpaTMwMSIsODIwNSwiYWZpaTU3MzgxIiwxNjQyLCJhZmlpNTczODgiLDE1NDgsImFmaWk1NzM5MiIsMTYzMiwiYWZpaTU3MzkzIiwxNjMzLCJhZmlpNTczOTQiLDE2MzQsImFmaWk1NzM5NSIsMTYzNSwiYWZpaTU3Mzk2IiwxNjM2LCJhZmlpNTczOTciLDE2MzcsImFmaWk1NzM5OCIsMTYzOCwiYWZpaTU3Mzk5IiwxNjM5LCJhZmlpNTc0MDAiLDE2NDAsImFmaWk1NzQwMSIsMTY0MSwiYWZpaTU3NDAzIiwxNTYzLCJhZmlpNTc0MDciLDE1NjcsImFmaWk1NzQwOSIsMTU2OSwiYWZpaTU3NDEwIiwxNTcwLCJhZmlpNTc0MTEiLDE1NzEsImFmaWk1NzQxMiIsMTU3MiwiYWZpaTU3NDEzIiwxNTczLCJhZmlpNTc0MTQiLDE1NzQsImFmaWk1NzQxNSIsMTU3NSwiYWZpaTU3NDE2IiwxNTc2LCJhZmlpNTc0MTciLDE1NzcsImFmaWk1NzQxOCIsMTU3OCwiYWZpaTU3NDE5IiwxNTc5LCJhZmlpNTc0MjAiLDE1ODAsImFmaWk1NzQyMSIsMTU4MSwiYWZpaTU3NDIyIiwxNTgyLCJhZmlpNTc0MjMiLDE1ODMsImFmaWk1NzQyNCIsMTU4NCwiYWZpaTU3NDI1IiwxNTg1LCJhZmlpNTc0MjYiLDE1ODYsImFmaWk1NzQyNyIsMTU4NywiYWZpaTU3NDI4IiwxNTg4LCJhZmlpNTc0MjkiLDE1ODksImFmaWk1NzQzMCIsMTU5MCwiYWZpaTU3NDMxIiwxNTkxLCJhZmlpNTc0MzIiLDE1OTIsImFmaWk1NzQzMyIsMTU5MywiYWZpaTU3NDM0IiwxNTk0LCJhZmlpNTc0NDAiLDE2MDAsImFmaWk1NzQ0MSIsMTYwMSwiYWZpaTU3NDQyIiwxNjAyLCJhZmlpNTc0NDMiLDE2MDMsImFmaWk1NzQ0NCIsMTYwNCwiYWZpaTU3NDQ1IiwxNjA1LCJhZmlpNTc0NDYiLDE2MDYsImFmaWk1NzQ0OCIsMTYwOCwiYWZpaTU3NDQ5IiwxNjA5LCJhZmlpNTc0NTAiLDE2MTAsImFmaWk1NzQ1MSIsMTYxMSwiYWZpaTU3NDUyIiwxNjEyLCJhZmlpNTc0NTMiLDE2MTMsImFmaWk1NzQ1NCIsMTYxNCwiYWZpaTU3NDU1IiwxNjE1LCJhZmlpNTc0NTYiLDE2MTYsImFmaWk1NzQ1NyIsMTYxNywiYWZpaTU3NDU4IiwxNjE4LCJhZmlpNTc0NzAiLDE2MDcsImFmaWk1NzUwNSIsMTcwMCwiYWZpaTU3NTA2IiwxNjYyLCJhZmlpNTc1MDciLDE2NzAsImFmaWk1NzUwOCIsMTY4OCwiYWZpaTU3NTA5IiwxNzExLCJhZmlpNTc1MTEiLDE2NTcsImFmaWk1NzUxMiIsMTY3MiwiYWZpaTU3NTEzIiwxNjgxLCJhZmlpNTc1MTQiLDE3MjIsImFmaWk1NzUxOSIsMTc0NiwiYWZpaTU3NTM0IiwxNzQ5LCJhZmlpNTc2MzYiLDgzNjIsImFmaWk1NzY0NSIsMTQ3MCwiYWZpaTU3NjU4IiwxNDc1LCJhZmlpNTc2NjQiLDE0ODgsImFmaWk1NzY2NSIsMTQ4OSwiYWZpaTU3NjY2IiwxNDkwLCJhZmlpNTc2NjciLDE0OTEsImFmaWk1NzY2OCIsMTQ5MiwiYWZpaTU3NjY5IiwxNDkzLCJhZmlpNTc2NzAiLDE0OTQsImFmaWk1NzY3MSIsMTQ5NSwiYWZpaTU3NjcyIiwxNDk2LCJhZmlpNTc2NzMiLDE0OTcsImFmaWk1NzY3NCIsMTQ5OCwiYWZpaTU3Njc1IiwxNDk5LCJhZmlpNTc2NzYiLDE1MDAsImFmaWk1NzY3NyIsMTUwMSwiYWZpaTU3Njc4IiwxNTAyLCJhZmlpNTc2NzkiLDE1MDMsImFmaWk1NzY4MCIsMTUwNCwiYWZpaTU3NjgxIiwxNTA1LCJhZmlpNTc2ODIiLDE1MDYsImFmaWk1NzY4MyIsMTUwNywiYWZpaTU3Njg0IiwxNTA4LCJhZmlpNTc2ODUiLDE1MDksImFmaWk1NzY4NiIsMTUxMCwiYWZpaTU3Njg3IiwxNTExLCJhZmlpNTc2ODgiLDE1MTIsImFmaWk1NzY4OSIsMTUxMywiYWZpaTU3NjkwIiwxNTE0LCJhZmlpNTc2OTQiLDY0Mjk4LCJhZmlpNTc2OTUiLDY0Mjk5LCJhZmlpNTc3MDAiLDY0MzMxLCJhZmlpNTc3MDUiLDY0Mjg3LCJhZmlpNTc3MTYiLDE1MjAsImFmaWk1NzcxNyIsMTUyMSwiYWZpaTU3NzE4IiwxNTIyLCJhZmlpNTc3MjMiLDY0MzA5LCJhZmlpNTc3OTMiLDE0NjAsImFmaWk1Nzc5NCIsMTQ2MSwiYWZpaTU3Nzk1IiwxNDYyLCJhZmlpNTc3OTYiLDE0NjcsImFmaWk1Nzc5NyIsMTQ2NCwiYWZpaTU3Nzk4IiwxNDYzLCJhZmlpNTc3OTkiLDE0NTYsImFmaWk1NzgwMCIsMTQ1OCwiYWZpaTU3ODAxIiwxNDU3LCJhZmlpNTc4MDIiLDE0NTksImFmaWk1NzgwMyIsMTQ3NCwiYWZpaTU3ODA0IiwxNDczLCJhZmlpNTc4MDYiLDE0NjUsImFmaWk1NzgwNyIsMTQ2OCwiYWZpaTU3ODM5IiwxNDY5LCJhZmlpNTc4NDEiLDE0NzEsImFmaWk1Nzg0MiIsMTQ3MiwiYWZpaTU3OTI5Iiw3MDAsImFmaWk2MTI0OCIsODQ1MywiYWZpaTYxMjg5Iiw4NDY3LCJhZmlpNjEzNTIiLDg0NzAsImFmaWk2MTU3MyIsODIzNiwiYWZpaTYxNTc0Iiw4MjM3LCJhZmlpNjE1NzUiLDgyMzgsImFmaWk2MTY2NCIsODIwNCwiYWZpaTYzMTY3IiwxNjQ1LCJhZmlpNjQ5MzciLDcwMSwiYWdyYXZlIiwyMjQsImFndWphcmF0aSIsMjY5MywiYWd1cm11a2hpIiwyNTY1LCJhaGlyYWdhbmEiLDEyMzU0LCJhaG9va2Fib3ZlIiw3ODQzLCJhaWJlbmdhbGkiLDI0NDgsImFpYm9wb21vZm8iLDEyNTc0LCJhaWRldmEiLDIzMjAsImFpZWN5cmlsbGljIiwxMjM3LCJhaWd1amFyYXRpIiwyNzA0LCJhaWd1cm11a2hpIiwyNTc2LCJhaW1hdHJhZ3VybXVraGkiLDI2MzIsImFpbmFyYWJpYyIsMTU5MywiYWluZmluYWxhcmFiaWMiLDY1MjI2LCJhaW5pbml0aWFsYXJhYmljIiw2NTIyNywiYWlubWVkaWFsYXJhYmljIiw2NTIyOCwiYWludmVydGVkYnJldmUiLDUxNSwiYWl2b3dlbHNpZ25iZW5nYWxpIiwyNTA0LCJhaXZvd2Vsc2lnbmRldmEiLDIzNzYsImFpdm93ZWxzaWduZ3VqYXJhdGkiLDI3NjAsImFrYXRha2FuYSIsMTI0NTAsImFrYXRha2FuYWhhbGZ3aWR0aCIsNjUzOTMsImFrb3JlYW4iLDEyNjIzLCJhbGVmIiwxNDg4LCJhbGVmYXJhYmljIiwxNTc1LCJhbGVmZGFnZXNoaGVicmV3Iiw2NDMwNCwiYWxlZmZpbmFsYXJhYmljIiw2NTE2NiwiYWxlZmhhbXphYWJvdmVhcmFiaWMiLDE1NzEsImFsZWZoYW16YWFib3ZlZmluYWxhcmFiaWMiLDY1MTU2LCJhbGVmaGFtemFiZWxvd2FyYWJpYyIsMTU3MywiYWxlZmhhbXphYmVsb3dmaW5hbGFyYWJpYyIsNjUxNjAsImFsZWZoZWJyZXciLDE0ODgsImFsZWZsYW1lZGhlYnJldyIsNjQzMzUsImFsZWZtYWRkYWFib3ZlYXJhYmljIiwxNTcwLCJhbGVmbWFkZGFhYm92ZWZpbmFsYXJhYmljIiw2NTE1NCwiYWxlZm1ha3N1cmFhcmFiaWMiLDE2MDksImFsZWZtYWtzdXJhZmluYWxhcmFiaWMiLDY1MjY0LCJhbGVmbWFrc3VyYWluaXRpYWxhcmFiaWMiLDY1MjY3LCJhbGVmbWFrc3VyYW1lZGlhbGFyYWJpYyIsNjUyNjgsImFsZWZwYXRhaGhlYnJldyIsNjQzMDIsImFsZWZxYW1hdHNoZWJyZXciLDY0MzAzLCJhbGVwaCIsODUwMSwiYWxsZXF1YWwiLDg3ODAsImFscGhhIiw5NDUsImFscGhhdG9ub3MiLDk0MCwiYW1hY3JvbiIsMjU3LCJhbW9ub3NwYWNlIiw2NTM0NSwiYW1wZXJzYW5kIiwzOCwiYW1wZXJzYW5kbW9ub3NwYWNlIiw2NTI4NiwiYW1wZXJzYW5kc21hbGwiLDYzMjcwLCJhbXNxdWFyZSIsMTMyNTAsImFuYm9wb21vZm8iLDEyNTc4LCJhbmdib3BvbW9mbyIsMTI1ODAsImFuZ2JyYWNrZXRsZWZ0IiwxMjI5NiwiYW5nYnJhY2tldHJpZ2h0IiwxMjI5NywiYW5na2hhbmtodXRoYWkiLDM2NzQsImFuZ2xlIiw4NzM2LCJhbmdsZWJyYWNrZXRsZWZ0IiwxMjI5NiwiYW5nbGVicmFja2V0bGVmdHZlcnRpY2FsIiw2NTA4NywiYW5nbGVicmFja2V0cmlnaHQiLDEyMjk3LCJhbmdsZWJyYWNrZXRyaWdodHZlcnRpY2FsIiw2NTA4OCwiYW5nbGVsZWZ0Iiw5MDAxLCJhbmdsZXJpZ2h0Iiw5MDAyLCJhbmdzdHJvbSIsODQ5MSwiYW5vdGVsZWlhIiw5MDMsImFudWRhdHRhZGV2YSIsMjM4NiwiYW51c3ZhcmFiZW5nYWxpIiwyNDM0LCJhbnVzdmFyYWRldmEiLDIzMDYsImFudXN2YXJhZ3VqYXJhdGkiLDI2OTAsImFvZ29uZWsiLDI2MSwiYXBhYXRvc3F1YXJlIiwxMzA1NiwiYXBhcmVuIiw5MzcyLCJhcG9zdHJvcGhlYXJtZW5pYW4iLDEzNzAsImFwb3N0cm9waGVtb2QiLDcwMCwiYXBwbGUiLDYzNzQzLCJhcHByb2FjaGVzIiw4Nzg0LCJhcHByb3hlcXVhbCIsODc3NiwiYXBwcm94ZXF1YWxvcmltYWdlIiw4Nzg2LCJhcHByb3hpbWF0ZWx5ZXF1YWwiLDg3NzMsImFyYWVhZWtvcmVhbiIsMTI2ODYsImFyYWVha29yZWFuIiwxMjY4NSwiYXJjIiw4OTc4LCJhcmlnaHRoYWxmcmluZyIsNzgzNCwiYXJpbmciLDIyOSwiYXJpbmdhY3V0ZSIsNTA3LCJhcmluZ2JlbG93Iiw3NjgxLCJhcnJvd2JvdGgiLDg1OTYsImFycm93ZGFzaGRvd24iLDg2NzUsImFycm93ZGFzaGxlZnQiLDg2NzIsImFycm93ZGFzaHJpZ2h0Iiw4Njc0LCJhcnJvd2Rhc2h1cCIsODY3MywiYXJyb3dkYmxib3RoIiw4NjYwLCJhcnJvd2RibGRvd24iLDg2NTksImFycm93ZGJsbGVmdCIsODY1NiwiYXJyb3dkYmxyaWdodCIsODY1OCwiYXJyb3dkYmx1cCIsODY1NywiYXJyb3dkb3duIiw4NTk1LCJhcnJvd2Rvd25sZWZ0Iiw4NjAxLCJhcnJvd2Rvd25yaWdodCIsODYwMCwiYXJyb3dkb3dud2hpdGUiLDg2ODEsImFycm93aGVhZGRvd25tb2QiLDcwOSwiYXJyb3doZWFkbGVmdG1vZCIsNzA2LCJhcnJvd2hlYWRyaWdodG1vZCIsNzA3LCJhcnJvd2hlYWR1cG1vZCIsNzA4LCJhcnJvd2hvcml6ZXgiLDYzNzE5LCJhcnJvd2xlZnQiLDg1OTIsImFycm93bGVmdGRibCIsODY1NiwiYXJyb3dsZWZ0ZGJsc3Ryb2tlIiw4NjUzLCJhcnJvd2xlZnRvdmVycmlnaHQiLDg2NDYsImFycm93bGVmdHdoaXRlIiw4Njc4LCJhcnJvd3JpZ2h0Iiw4NTk0LCJhcnJvd3JpZ2h0ZGJsc3Ryb2tlIiw4NjU1LCJhcnJvd3JpZ2h0aGVhdnkiLDEwMTQyLCJhcnJvd3JpZ2h0b3ZlcmxlZnQiLDg2NDQsImFycm93cmlnaHR3aGl0ZSIsODY4MCwiYXJyb3d0YWJsZWZ0Iiw4Njc2LCJhcnJvd3RhYnJpZ2h0Iiw4Njc3LCJhcnJvd3VwIiw4NTkzLCJhcnJvd3VwZG4iLDg1OTcsImFycm93dXBkbmJzZSIsODYxNiwiYXJyb3d1cGRvd25iYXNlIiw4NjE2LCJhcnJvd3VwbGVmdCIsODU5OCwiYXJyb3d1cGxlZnRvZmRvd24iLDg2NDUsImFycm93dXByaWdodCIsODU5OSwiYXJyb3d1cHdoaXRlIiw4Njc5LCJhcnJvd3ZlcnRleCIsNjM3MTgsImFzY2lpY2lyY3VtIiw5NCwiYXNjaWljaXJjdW1tb25vc3BhY2UiLDY1MzQyLCJhc2NpaXRpbGRlIiwxMjYsImFzY2lpdGlsZGVtb25vc3BhY2UiLDY1Mzc0LCJhc2NyaXB0Iiw1OTMsImFzY3JpcHR0dXJuZWQiLDU5NCwiYXNtYWxsaGlyYWdhbmEiLDEyMzUzLCJhc21hbGxrYXRha2FuYSIsMTI0NDksImFzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4MywiYXN0ZXJpc2siLDQyLCJhc3Rlcmlza2FsdG9uZWFyYWJpYyIsMTY0NSwiYXN0ZXJpc2thcmFiaWMiLDE2NDUsImFzdGVyaXNrbWF0aCIsODcyNywiYXN0ZXJpc2ttb25vc3BhY2UiLDY1MjkwLCJhc3Rlcmlza3NtYWxsIiw2NTEyMSwiYXN0ZXJpc20iLDgyNTgsImFzdXBlcmlvciIsNjMyMDksImFzeW1wdG90aWNhbGx5ZXF1YWwiLDg3NzEsImF0Iiw2NCwiYXRpbGRlIiwyMjcsImF0bW9ub3NwYWNlIiw2NTMxMiwiYXRzbWFsbCIsNjUxMzEsImF0dXJuZWQiLDU5MiwiYXViZW5nYWxpIiwyNDUyLCJhdWJvcG9tb2ZvIiwxMjU3NiwiYXVkZXZhIiwyMzI0LCJhdWd1amFyYXRpIiwyNzA4LCJhdWd1cm11a2hpIiwyNTgwLCJhdWxlbmd0aG1hcmtiZW5nYWxpIiwyNTE5LCJhdW1hdHJhZ3VybXVraGkiLDI2MzYsImF1dm93ZWxzaWduYmVuZ2FsaSIsMjUwOCwiYXV2b3dlbHNpZ25kZXZhIiwyMzgwLCJhdXZvd2Vsc2lnbmd1amFyYXRpIiwyNzY0LCJhdmFncmFoYWRldmEiLDIzNjUsImF5YmFybWVuaWFuIiwxMzc3LCJheWluIiwxNTA2LCJheWluYWx0b25laGVicmV3Iiw2NDI4OCwiYXlpbmhlYnJldyIsMTUwNiwiYiIsOTgsImJhYmVuZ2FsaSIsMjQ3NiwiYmFja3NsYXNoIiw5MiwiYmFja3NsYXNobW9ub3NwYWNlIiw2NTM0MCwiYmFkZXZhIiwyMzQ4LCJiYWd1amFyYXRpIiwyNzMyLCJiYWd1cm11a2hpIiwyNjA0LCJiYWhpcmFnYW5hIiwxMjQwMCwiYmFodHRoYWkiLDM2NDcsImJha2F0YWthbmEiLDEyNDk2LCJiYXIiLDEyNCwiYmFybW9ub3NwYWNlIiw2NTM3MiwiYmJvcG9tb2ZvIiwxMjU0OSwiYmNpcmNsZSIsOTQyNSwiYmRvdGFjY2VudCIsNzY4MywiYmRvdGJlbG93Iiw3Njg1LCJiZWFtZWRzaXh0ZWVudGhub3RlcyIsOTgzNiwiYmVjYXVzZSIsODc1NywiYmVjeXJpbGxpYyIsMTA3MywiYmVoYXJhYmljIiwxNTc2LCJiZWhmaW5hbGFyYWJpYyIsNjUxNjgsImJlaGluaXRpYWxhcmFiaWMiLDY1MTY5LCJiZWhpcmFnYW5hIiwxMjQwOSwiYmVobWVkaWFsYXJhYmljIiw2NTE3MCwiYmVobWVlbWluaXRpYWxhcmFiaWMiLDY0NjcxLCJiZWhtZWVtaXNvbGF0ZWRhcmFiaWMiLDY0NTIwLCJiZWhub29uZmluYWxhcmFiaWMiLDY0NjIxLCJiZWthdGFrYW5hIiwxMjUwNSwiYmVuYXJtZW5pYW4iLDEzNzgsImJldCIsMTQ4OSwiYmV0YSIsOTQ2LCJiZXRhc3ltYm9sZ3JlZWsiLDk3NiwiYmV0ZGFnZXNoIiw2NDMwNSwiYmV0ZGFnZXNoaGVicmV3Iiw2NDMwNSwiYmV0aGVicmV3IiwxNDg5LCJiZXRyYWZlaGVicmV3Iiw2NDMzMiwiYmhhYmVuZ2FsaSIsMjQ3NywiYmhhZGV2YSIsMjM0OSwiYmhhZ3VqYXJhdGkiLDI3MzMsImJoYWd1cm11a2hpIiwyNjA1LCJiaG9vayIsNTk1LCJiaWhpcmFnYW5hIiwxMjQwMywiYmlrYXRha2FuYSIsMTI0OTksImJpbGFiaWFsY2xpY2siLDY2NCwiYmluZGlndXJtdWtoaSIsMjU2MiwiYmlydXNxdWFyZSIsMTMxMDUsImJsYWNrY2lyY2xlIiw5Njc5LCJibGFja2RpYW1vbmQiLDk2NzAsImJsYWNrZG93bnBvaW50aW5ndHJpYW5nbGUiLDk2NjAsImJsYWNrbGVmdHBvaW50aW5ncG9pbnRlciIsOTY2OCwiYmxhY2tsZWZ0cG9pbnRpbmd0cmlhbmdsZSIsOTY2NCwiYmxhY2tsZW50aWN1bGFyYnJhY2tldGxlZnQiLDEyMzA0LCJibGFja2xlbnRpY3VsYXJicmFja2V0bGVmdHZlcnRpY2FsIiw2NTA4MywiYmxhY2tsZW50aWN1bGFyYnJhY2tldHJpZ2h0IiwxMjMwNSwiYmxhY2tsZW50aWN1bGFyYnJhY2tldHJpZ2h0dmVydGljYWwiLDY1MDg0LCJibGFja2xvd2VybGVmdHRyaWFuZ2xlIiw5Njk5LCJibGFja2xvd2VycmlnaHR0cmlhbmdsZSIsOTY5OCwiYmxhY2tyZWN0YW5nbGUiLDk2NDQsImJsYWNrcmlnaHRwb2ludGluZ3BvaW50ZXIiLDk2NTgsImJsYWNrcmlnaHRwb2ludGluZ3RyaWFuZ2xlIiw5NjU0LCJibGFja3NtYWxsc3F1YXJlIiw5NjQyLCJibGFja3NtaWxpbmdmYWNlIiw5Nzg3LCJibGFja3NxdWFyZSIsOTYzMiwiYmxhY2tzdGFyIiw5NzMzLCJibGFja3VwcGVybGVmdHRyaWFuZ2xlIiw5NzAwLCJibGFja3VwcGVycmlnaHR0cmlhbmdsZSIsOTcwMSwiYmxhY2t1cHBvaW50aW5nc21hbGx0cmlhbmdsZSIsOTY1MiwiYmxhY2t1cHBvaW50aW5ndHJpYW5nbGUiLDk2NTAsImJsYW5rIiw5MjUxLCJibGluZWJlbG93Iiw3Njg3LCJibG9jayIsOTYwOCwiYm1vbm9zcGFjZSIsNjUzNDYsImJvYmFpbWFpdGhhaSIsMzYxMCwiYm9oaXJhZ2FuYSIsMTI0MTIsImJva2F0YWthbmEiLDEyNTA4LCJicGFyZW4iLDkzNzMsImJxc3F1YXJlIiwxMzI1MSwiYnJhY2VleCIsNjM3MzIsImJyYWNlbGVmdCIsMTIzLCJicmFjZWxlZnRidCIsNjM3MzEsImJyYWNlbGVmdG1pZCIsNjM3MzAsImJyYWNlbGVmdG1vbm9zcGFjZSIsNjUzNzEsImJyYWNlbGVmdHNtYWxsIiw2NTExNSwiYnJhY2VsZWZ0dHAiLDYzNzI5LCJicmFjZWxlZnR2ZXJ0aWNhbCIsNjUwNzksImJyYWNlcmlnaHQiLDEyNSwiYnJhY2VyaWdodGJ0Iiw2Mzc0MiwiYnJhY2VyaWdodG1pZCIsNjM3NDEsImJyYWNlcmlnaHRtb25vc3BhY2UiLDY1MzczLCJicmFjZXJpZ2h0c21hbGwiLDY1MTE2LCJicmFjZXJpZ2h0dHAiLDYzNzQwLCJicmFjZXJpZ2h0dmVydGljYWwiLDY1MDgwLCJicmFja2V0bGVmdCIsOTEsImJyYWNrZXRsZWZ0YnQiLDYzNzI4LCJicmFja2V0bGVmdGV4Iiw2MzcyNywiYnJhY2tldGxlZnRtb25vc3BhY2UiLDY1MzM5LCJicmFja2V0bGVmdHRwIiw2MzcyNiwiYnJhY2tldHJpZ2h0Iiw5MywiYnJhY2tldHJpZ2h0YnQiLDYzNzM5LCJicmFja2V0cmlnaHRleCIsNjM3MzgsImJyYWNrZXRyaWdodG1vbm9zcGFjZSIsNjUzNDEsImJyYWNrZXRyaWdodHRwIiw2MzczNywiYnJldmUiLDcyOCwiYnJldmViZWxvd2NtYiIsODE0LCJicmV2ZWNtYiIsNzc0LCJicmV2ZWludmVydGVkYmVsb3djbWIiLDgxNSwiYnJldmVpbnZlcnRlZGNtYiIsNzg1LCJicmV2ZWludmVydGVkZG91YmxlY21iIiw4NjUsImJyaWRnZWJlbG93Y21iIiw4MTAsImJyaWRnZWludmVydGVkYmVsb3djbWIiLDgyNiwiYnJva2VuYmFyIiwxNjYsImJzdHJva2UiLDM4NCwiYnN1cGVyaW9yIiw2MzIxMCwiYnRvcGJhciIsMzg3LCJidWhpcmFnYW5hIiwxMjQwNiwiYnVrYXRha2FuYSIsMTI1MDIsImJ1bGxldCIsODIyNiwiYnVsbGV0aW52ZXJzZSIsOTY4OCwiYnVsbGV0b3BlcmF0b3IiLDg3MjksImJ1bGxzZXllIiw5Njc4LCJjIiw5OSwiY2Fhcm1lbmlhbiIsMTM5MCwiY2FiZW5nYWxpIiwyNDU4LCJjYWN1dGUiLDI2MywiY2FkZXZhIiwyMzMwLCJjYWd1amFyYXRpIiwyNzE0LCJjYWd1cm11a2hpIiwyNTg2LCJjYWxzcXVhcmUiLDEzMTkyLCJjYW5kcmFiaW5kdWJlbmdhbGkiLDI0MzMsImNhbmRyYWJpbmR1Y21iIiw3ODQsImNhbmRyYWJpbmR1ZGV2YSIsMjMwNSwiY2FuZHJhYmluZHVndWphcmF0aSIsMjY4OSwiY2Fwc2xvY2siLDg2ODIsImNhcmVvZiIsODQ1MywiY2Fyb24iLDcxMSwiY2Fyb25iZWxvd2NtYiIsODEyLCJjYXJvbmNtYiIsNzgwLCJjYXJyaWFnZXJldHVybiIsODYyOSwiY2JvcG9tb2ZvIiwxMjU2OCwiY2Nhcm9uIiwyNjksImNjZWRpbGxhIiwyMzEsImNjZWRpbGxhYWN1dGUiLDc2ODksImNjaXJjbGUiLDk0MjYsImNjaXJjdW1mbGV4IiwyNjUsImNjdXJsIiw1OTcsImNkb3QiLDI2NywiY2RvdGFjY2VudCIsMjY3LCJjZHNxdWFyZSIsMTMyNTMsImNlZGlsbGEiLDE4NCwiY2VkaWxsYWNtYiIsODA3LCJjZW50IiwxNjIsImNlbnRpZ3JhZGUiLDg0NTEsImNlbnRpbmZlcmlvciIsNjMxOTksImNlbnRtb25vc3BhY2UiLDY1NTA0LCJjZW50b2xkc3R5bGUiLDYzMzk0LCJjZW50c3VwZXJpb3IiLDYzMjAwLCJjaGFhcm1lbmlhbiIsMTQwMSwiY2hhYmVuZ2FsaSIsMjQ1OSwiY2hhZGV2YSIsMjMzMSwiY2hhZ3VqYXJhdGkiLDI3MTUsImNoYWd1cm11a2hpIiwyNTg3LCJjaGJvcG9tb2ZvIiwxMjU2NCwiY2hlYWJraGFzaWFuY3lyaWxsaWMiLDEyMTMsImNoZWNrbWFyayIsMTAwMDMsImNoZWN5cmlsbGljIiwxMDk1LCJjaGVkZXNjZW5kZXJhYmtoYXNpYW5jeXJpbGxpYyIsMTIxNSwiY2hlZGVzY2VuZGVyY3lyaWxsaWMiLDEyMDcsImNoZWRpZXJlc2lzY3lyaWxsaWMiLDEyNjksImNoZWhhcm1lbmlhbiIsMTM5NSwiY2hla2hha2Fzc2lhbmN5cmlsbGljIiwxMjI4LCJjaGV2ZXJ0aWNhbHN0cm9rZWN5cmlsbGljIiwxMjA5LCJjaGkiLDk2NywiY2hpZXVjaGFjaXJjbGVrb3JlYW4iLDEyOTE5LCJjaGlldWNoYXBhcmVua29yZWFuIiwxMjgyMywiY2hpZXVjaGNpcmNsZWtvcmVhbiIsMTI5MDUsImNoaWV1Y2hrb3JlYW4iLDEyNjE4LCJjaGlldWNocGFyZW5rb3JlYW4iLDEyODA5LCJjaG9jaGFuZ3RoYWkiLDM1OTQsImNob2NoYW50aGFpIiwzNTkyLCJjaG9jaGluZ3RoYWkiLDM1OTMsImNob2Nob2V0aGFpIiwzNTk2LCJjaG9vayIsMzkyLCJjaWV1Y2FjaXJjbGVrb3JlYW4iLDEyOTE4LCJjaWV1Y2FwYXJlbmtvcmVhbiIsMTI4MjIsImNpZXVjY2lyY2xla29yZWFuIiwxMjkwNCwiY2lldWNrb3JlYW4iLDEyNjE2LCJjaWV1Y3BhcmVua29yZWFuIiwxMjgwOCwiY2lldWN1cGFyZW5rb3JlYW4iLDEyODI4LCJjaXJjbGUiLDk2NzUsImNpcmNsZWNvcHlydCIsMTY5LCJjaXJjbGVtdWx0aXBseSIsODg1NSwiY2lyY2xlb3QiLDg4NTcsImNpcmNsZXBsdXMiLDg4NTMsImNpcmNsZXBvc3RhbG1hcmsiLDEyMzQyLCJjaXJjbGV3aXRobGVmdGhhbGZibGFjayIsOTY4MCwiY2lyY2xld2l0aHJpZ2h0aGFsZmJsYWNrIiw5NjgxLCJjaXJjdW1mbGV4Iiw3MTAsImNpcmN1bWZsZXhiZWxvd2NtYiIsODEzLCJjaXJjdW1mbGV4Y21iIiw3NzAsImNsZWFyIiw4OTk5LCJjbGlja2FsdmVvbGFyIiw0NTAsImNsaWNrZGVudGFsIiw0NDgsImNsaWNrbGF0ZXJhbCIsNDQ5LCJjbGlja3JldHJvZmxleCIsNDUxLCJjbHViIiw5ODI3LCJjbHVic3VpdGJsYWNrIiw5ODI3LCJjbHVic3VpdHdoaXRlIiw5ODMxLCJjbWN1YmVkc3F1YXJlIiwxMzIyMCwiY21vbm9zcGFjZSIsNjUzNDcsImNtc3F1YXJlZHNxdWFyZSIsMTMyMTYsImNvYXJtZW5pYW4iLDE0MDksImNvbG9uIiw1OCwiY29sb25tb25ldGFyeSIsODM1MywiY29sb25tb25vc3BhY2UiLDY1MzA2LCJjb2xvbnNpZ24iLDgzNTMsImNvbG9uc21hbGwiLDY1MTA5LCJjb2xvbnRyaWFuZ3VsYXJoYWxmbW9kIiw3MjEsImNvbG9udHJpYW5ndWxhcm1vZCIsNzIwLCJjb21tYSIsNDQsImNvbW1hYWJvdmVjbWIiLDc4NywiY29tbWFhYm92ZXJpZ2h0Y21iIiw3ODksImNvbW1hYWNjZW50Iiw2MzE3MSwiY29tbWFhcmFiaWMiLDE1NDgsImNvbW1hYXJtZW5pYW4iLDEzNzMsImNvbW1haW5mZXJpb3IiLDYzMjAxLCJjb21tYW1vbm9zcGFjZSIsNjUyOTIsImNvbW1hcmV2ZXJzZWRhYm92ZWNtYiIsNzg4LCJjb21tYXJldmVyc2VkbW9kIiw3MDEsImNvbW1hc21hbGwiLDY1MTA0LCJjb21tYXN1cGVyaW9yIiw2MzIwMiwiY29tbWF0dXJuZWRhYm92ZWNtYiIsNzg2LCJjb21tYXR1cm5lZG1vZCIsNjk5LCJjb21wYXNzIiw5Nzg4LCJjb25ncnVlbnQiLDg3NzMsImNvbnRvdXJpbnRlZ3JhbCIsODc1MCwiY29udHJvbCIsODk2MywiY29udHJvbEFDSyIsNiwiY29udHJvbEJFTCIsNywiY29udHJvbEJTIiw4LCJjb250cm9sQ0FOIiwyNCwiY29udHJvbENSIiwxMywiY29udHJvbERDMSIsMTcsImNvbnRyb2xEQzIiLDE4LCJjb250cm9sREMzIiwxOSwiY29udHJvbERDNCIsMjAsImNvbnRyb2xERUwiLDEyNywiY29udHJvbERMRSIsMTYsImNvbnRyb2xFTSIsMjUsImNvbnRyb2xFTlEiLDUsImNvbnRyb2xFT1QiLDQsImNvbnRyb2xFU0MiLDI3LCJjb250cm9sRVRCIiwyMywiY29udHJvbEVUWCIsMywiY29udHJvbEZGIiwxMiwiY29udHJvbEZTIiwyOCwiY29udHJvbEdTIiwyOSwiY29udHJvbEhUIiw5LCJjb250cm9sTEYiLDEwLCJjb250cm9sTkFLIiwyMSwiY29udHJvbE5VTEwiLDAsImNvbnRyb2xSUyIsMzAsImNvbnRyb2xTSSIsMTUsImNvbnRyb2xTTyIsMTQsImNvbnRyb2xTT1QiLDIsImNvbnRyb2xTVFgiLDEsImNvbnRyb2xTVUIiLDI2LCJjb250cm9sU1lOIiwyMiwiY29udHJvbFVTIiwzMSwiY29udHJvbFZUIiwxMSwiY29weXJpZ2h0IiwxNjksImNvcHlyaWdodHNhbnMiLDYzNzIxLCJjb3B5cmlnaHRzZXJpZiIsNjMxOTMsImNvcm5lcmJyYWNrZXRsZWZ0IiwxMjMwMCwiY29ybmVyYnJhY2tldGxlZnRoYWxmd2lkdGgiLDY1Mzc4LCJjb3JuZXJicmFja2V0bGVmdHZlcnRpY2FsIiw2NTA4OSwiY29ybmVyYnJhY2tldHJpZ2h0IiwxMjMwMSwiY29ybmVyYnJhY2tldHJpZ2h0aGFsZndpZHRoIiw2NTM3OSwiY29ybmVyYnJhY2tldHJpZ2h0dmVydGljYWwiLDY1MDkwLCJjb3Jwb3JhdGlvbnNxdWFyZSIsMTMxODMsImNvc3F1YXJlIiwxMzI1NSwiY292ZXJrZ3NxdWFyZSIsMTMyNTQsImNwYXJlbiIsOTM3NCwiY3J1emVpcm8iLDgzNTQsImNzdHJldGNoZWQiLDY2MywiY3VybHlhbmQiLDg5MTEsImN1cmx5b3IiLDg5MTAsImN1cnJlbmN5IiwxNjQsImN5ckJyZXZlIiw2MzE4NSwiY3lyRmxleCIsNjMxODYsImN5cmJyZXZlIiw2MzE4OCwiY3lyZmxleCIsNjMxODksImQiLDEwMCwiZGFhcm1lbmlhbiIsMTM4MCwiZGFiZW5nYWxpIiwyNDcwLCJkYWRhcmFiaWMiLDE1OTAsImRhZGV2YSIsMjM0MiwiZGFkZmluYWxhcmFiaWMiLDY1MjE0LCJkYWRpbml0aWFsYXJhYmljIiw2NTIxNSwiZGFkbWVkaWFsYXJhYmljIiw2NTIxNiwiZGFnZXNoIiwxNDY4LCJkYWdlc2hoZWJyZXciLDE0NjgsImRhZ2dlciIsODIyNCwiZGFnZ2VyZGJsIiw4MjI1LCJkYWd1amFyYXRpIiwyNzI2LCJkYWd1cm11a2hpIiwyNTk4LCJkYWhpcmFnYW5hIiwxMjM4NCwiZGFrYXRha2FuYSIsMTI0ODAsImRhbGFyYWJpYyIsMTU4MywiZGFsZXQiLDE0OTEsImRhbGV0ZGFnZXNoIiw2NDMwNywiZGFsZXRkYWdlc2hoZWJyZXciLDY0MzA3LCJkYWxldGhlYnJldyIsMTQ5MSwiZGFsZmluYWxhcmFiaWMiLDY1MTk0LCJkYW1tYWFyYWJpYyIsMTYxNSwiZGFtbWFsb3dhcmFiaWMiLDE2MTUsImRhbW1hdGFuYWx0b25lYXJhYmljIiwxNjEyLCJkYW1tYXRhbmFyYWJpYyIsMTYxMiwiZGFuZGEiLDI0MDQsImRhcmdhaGVicmV3IiwxNDQ3LCJkYXJnYWxlZnRoZWJyZXciLDE0NDcsImRhc2lhcG5ldW1hdGFjeXJpbGxpY2NtYiIsMTE1NywiZGJsR3JhdmUiLDYzMTg3LCJkYmxhbmdsZWJyYWNrZXRsZWZ0IiwxMjI5OCwiZGJsYW5nbGVicmFja2V0bGVmdHZlcnRpY2FsIiw2NTA4NSwiZGJsYW5nbGVicmFja2V0cmlnaHQiLDEyMjk5LCJkYmxhbmdsZWJyYWNrZXRyaWdodHZlcnRpY2FsIiw2NTA4NiwiZGJsYXJjaGludmVydGVkYmVsb3djbWIiLDgxMSwiZGJsYXJyb3dsZWZ0Iiw4NjYwLCJkYmxhcnJvd3JpZ2h0Iiw4NjU4LCJkYmxkYW5kYSIsMjQwNSwiZGJsZ3JhdmUiLDYzMTkwLCJkYmxncmF2ZWNtYiIsNzgzLCJkYmxpbnRlZ3JhbCIsODc0OCwiZGJsbG93bGluZSIsODIxNSwiZGJsbG93bGluZWNtYiIsODE5LCJkYmxvdmVybGluZWNtYiIsODMxLCJkYmxwcmltZW1vZCIsNjk4LCJkYmx2ZXJ0aWNhbGJhciIsODIxNCwiZGJsdmVydGljYWxsaW5lYWJvdmVjbWIiLDc4MiwiZGJvcG9tb2ZvIiwxMjU1MywiZGJzcXVhcmUiLDEzMjU2LCJkY2Fyb24iLDI3MSwiZGNlZGlsbGEiLDc2OTcsImRjaXJjbGUiLDk0MjcsImRjaXJjdW1mbGV4YmVsb3ciLDc2OTksImRjcm9hdCIsMjczLCJkZGFiZW5nYWxpIiwyNDY1LCJkZGFkZXZhIiwyMzM3LCJkZGFndWphcmF0aSIsMjcyMSwiZGRhZ3VybXVraGkiLDI1OTMsImRkYWxhcmFiaWMiLDE2NzIsImRkYWxmaW5hbGFyYWJpYyIsNjQzOTMsImRkZGhhZGV2YSIsMjM5NiwiZGRoYWJlbmdhbGkiLDI0NjYsImRkaGFkZXZhIiwyMzM4LCJkZGhhZ3VqYXJhdGkiLDI3MjIsImRkaGFndXJtdWtoaSIsMjU5NCwiZGRvdGFjY2VudCIsNzY5MSwiZGRvdGJlbG93Iiw3NjkzLCJkZWNpbWFsc2VwYXJhdG9yYXJhYmljIiwxNjQzLCJkZWNpbWFsc2VwYXJhdG9ycGVyc2lhbiIsMTY0MywiZGVjeXJpbGxpYyIsMTA3NiwiZGVncmVlIiwxNzYsImRlaGloZWJyZXciLDE0NTMsImRlaGlyYWdhbmEiLDEyMzkxLCJkZWljb3B0aWMiLDEwMDcsImRla2F0YWthbmEiLDEyNDg3LCJkZWxldGVsZWZ0Iiw5MDAzLCJkZWxldGVyaWdodCIsODk5OCwiZGVsdGEiLDk0OCwiZGVsdGF0dXJuZWQiLDM5NywiZGVub21pbmF0b3JtaW51c29uZW51bWVyYXRvcmJlbmdhbGkiLDI1NTIsImRlemgiLDY3NiwiZGhhYmVuZ2FsaSIsMjQ3MSwiZGhhZGV2YSIsMjM0MywiZGhhZ3VqYXJhdGkiLDI3MjcsImRoYWd1cm11a2hpIiwyNTk5LCJkaG9vayIsNTk5LCJkaWFseXRpa2F0b25vcyIsOTAxLCJkaWFseXRpa2F0b25vc2NtYiIsODM2LCJkaWFtb25kIiw5ODMwLCJkaWFtb25kc3VpdHdoaXRlIiw5ODI2LCJkaWVyZXNpcyIsMTY4LCJkaWVyZXNpc2FjdXRlIiw2MzE5MSwiZGllcmVzaXNiZWxvd2NtYiIsODA0LCJkaWVyZXNpc2NtYiIsNzc2LCJkaWVyZXNpc2dyYXZlIiw2MzE5MiwiZGllcmVzaXN0b25vcyIsOTAxLCJkaWhpcmFnYW5hIiwxMjM4NiwiZGlrYXRha2FuYSIsMTI0ODIsImRpdHRvbWFyayIsMTIyOTEsImRpdmlkZSIsMjQ3LCJkaXZpZGVzIiw4NzM5LCJkaXZpc2lvbnNsYXNoIiw4NzI1LCJkamVjeXJpbGxpYyIsMTEwNiwiZGtzaGFkZSIsOTYxOSwiZGxpbmViZWxvdyIsNzY5NSwiZGxzcXVhcmUiLDEzMjA3LCJkbWFjcm9uIiwyNzMsImRtb25vc3BhY2UiLDY1MzQ4LCJkbmJsb2NrIiw5NjA0LCJkb2NoYWRhdGhhaSIsMzU5OCwiZG9kZWt0aGFpIiwzNjA0LCJkb2hpcmFnYW5hIiwxMjM5MywiZG9rYXRha2FuYSIsMTI0ODksImRvbGxhciIsMzYsImRvbGxhcmluZmVyaW9yIiw2MzIwMywiZG9sbGFybW9ub3NwYWNlIiw2NTI4NCwiZG9sbGFyb2xkc3R5bGUiLDYzMjY4LCJkb2xsYXJzbWFsbCIsNjUxMjksImRvbGxhcnN1cGVyaW9yIiw2MzIwNCwiZG9uZyIsODM2MywiZG9ydXNxdWFyZSIsMTMwOTQsImRvdGFjY2VudCIsNzI5LCJkb3RhY2NlbnRjbWIiLDc3NSwiZG90YmVsb3djbWIiLDgwMywiZG90YmVsb3djb21iIiw4MDMsImRvdGthdGFrYW5hIiwxMjUzOSwiZG90bGVzc2kiLDMwNSwiZG90bGVzc2oiLDYzMTY2LCJkb3RsZXNzanN0cm9rZWhvb2siLDY0NCwiZG90bWF0aCIsODkwMSwiZG90dGVkY2lyY2xlIiw5Njc2LCJkb3VibGV5b2RwYXRhaCIsNjQyODcsImRvdWJsZXlvZHBhdGFoaGVicmV3Iiw2NDI4NywiZG93bnRhY2tiZWxvd2NtYiIsNzk4LCJkb3dudGFja21vZCIsNzI1LCJkcGFyZW4iLDkzNzUsImRzdXBlcmlvciIsNjMyMTEsImR0YWlsIiw1OTgsImR0b3BiYXIiLDM5NiwiZHVoaXJhZ2FuYSIsMTIzODksImR1a2F0YWthbmEiLDEyNDg1LCJkeiIsNDk5LCJkemFsdG9uZSIsNjc1LCJkemNhcm9uIiw0NTQsImR6Y3VybCIsNjc3LCJkemVhYmtoYXNpYW5jeXJpbGxpYyIsMTI0OSwiZHplY3lyaWxsaWMiLDExMDksImR6aGVjeXJpbGxpYyIsMTExOSwiZSIsMTAxLCJlYWN1dGUiLDIzMywiZWFydGgiLDk3OTMsImViZW5nYWxpIiwyNDQ3LCJlYm9wb21vZm8iLDEyNTcyLCJlYnJldmUiLDI3NywiZWNhbmRyYWRldmEiLDIzMTcsImVjYW5kcmFndWphcmF0aSIsMjcwMSwiZWNhbmRyYXZvd2Vsc2lnbmRldmEiLDIzNzMsImVjYW5kcmF2b3dlbHNpZ25ndWphcmF0aSIsMjc1NywiZWNhcm9uIiwyODMsImVjZWRpbGxhYnJldmUiLDc3MDksImVjaGFybWVuaWFuIiwxMzgxLCJlY2h5aXduYXJtZW5pYW4iLDE0MTUsImVjaXJjbGUiLDk0MjgsImVjaXJjdW1mbGV4IiwyMzQsImVjaXJjdW1mbGV4YWN1dGUiLDc4NzEsImVjaXJjdW1mbGV4YmVsb3ciLDc3MDUsImVjaXJjdW1mbGV4ZG90YmVsb3ciLDc4NzksImVjaXJjdW1mbGV4Z3JhdmUiLDc4NzMsImVjaXJjdW1mbGV4aG9va2Fib3ZlIiw3ODc1LCJlY2lyY3VtZmxleHRpbGRlIiw3ODc3LCJlY3lyaWxsaWMiLDExMDgsImVkYmxncmF2ZSIsNTE3LCJlZGV2YSIsMjMxOSwiZWRpZXJlc2lzIiwyMzUsImVkb3QiLDI3OSwiZWRvdGFjY2VudCIsMjc5LCJlZG90YmVsb3ciLDc4NjUsImVlZ3VybXVraGkiLDI1NzUsImVlbWF0cmFndXJtdWtoaSIsMjYzMSwiZWZjeXJpbGxpYyIsMTA5MiwiZWdyYXZlIiwyMzIsImVndWphcmF0aSIsMjcwMywiZWhhcm1lbmlhbiIsMTM4MywiZWhib3BvbW9mbyIsMTI1NzMsImVoaXJhZ2FuYSIsMTIzNjAsImVob29rYWJvdmUiLDc4NjcsImVpYm9wb21vZm8iLDEyNTc1LCJlaWdodCIsNTYsImVpZ2h0YXJhYmljIiwxNjQwLCJlaWdodGJlbmdhbGkiLDI1NDIsImVpZ2h0Y2lyY2xlIiw5MzE5LCJlaWdodGNpcmNsZWludmVyc2VzYW5zc2VyaWYiLDEwMTI5LCJlaWdodGRldmEiLDI0MTQsImVpZ2h0ZWVuY2lyY2xlIiw5MzI5LCJlaWdodGVlbnBhcmVuIiw5MzQ5LCJlaWdodGVlbnBlcmlvZCIsOTM2OSwiZWlnaHRndWphcmF0aSIsMjc5OCwiZWlnaHRndXJtdWtoaSIsMjY3MCwiZWlnaHRoYWNrYXJhYmljIiwxNjQwLCJlaWdodGhhbmd6aG91IiwxMjMyOCwiZWlnaHRobm90ZWJlYW1lZCIsOTgzNSwiZWlnaHRpZGVvZ3JhcGhpY3BhcmVuIiwxMjgzOSwiZWlnaHRpbmZlcmlvciIsODMyOCwiZWlnaHRtb25vc3BhY2UiLDY1MzA0LCJlaWdodG9sZHN0eWxlIiw2MzI4OCwiZWlnaHRwYXJlbiIsOTMzOSwiZWlnaHRwZXJpb2QiLDkzNTksImVpZ2h0cGVyc2lhbiIsMTc4NCwiZWlnaHRyb21hbiIsODU2NywiZWlnaHRzdXBlcmlvciIsODMxMiwiZWlnaHR0aGFpIiwzNjcyLCJlaW52ZXJ0ZWRicmV2ZSIsNTE5LCJlaW90aWZpZWRjeXJpbGxpYyIsMTEyNSwiZWthdGFrYW5hIiwxMjQ1NiwiZWthdGFrYW5haGFsZndpZHRoIiw2NTM5NiwiZWtvbmthcmd1cm11a2hpIiwyNjc2LCJla29yZWFuIiwxMjYyOCwiZWxjeXJpbGxpYyIsMTA4MywiZWxlbWVudCIsODcxMiwiZWxldmVuY2lyY2xlIiw5MzIyLCJlbGV2ZW5wYXJlbiIsOTM0MiwiZWxldmVucGVyaW9kIiw5MzYyLCJlbGV2ZW5yb21hbiIsODU3MCwiZWxsaXBzaXMiLDgyMzAsImVsbGlwc2lzdmVydGljYWwiLDg5NDIsImVtYWNyb24iLDI3NSwiZW1hY3JvbmFjdXRlIiw3NzAzLCJlbWFjcm9uZ3JhdmUiLDc3MDEsImVtY3lyaWxsaWMiLDEwODQsImVtZGFzaCIsODIxMiwiZW1kYXNodmVydGljYWwiLDY1MDczLCJlbW9ub3NwYWNlIiw2NTM0OSwiZW1waGFzaXNtYXJrYXJtZW5pYW4iLDEzNzEsImVtcHR5c2V0Iiw4NzA5LCJlbmJvcG9tb2ZvIiwxMjU3OSwiZW5jeXJpbGxpYyIsMTA4NSwiZW5kYXNoIiw4MjExLCJlbmRhc2h2ZXJ0aWNhbCIsNjUwNzQsImVuZGVzY2VuZGVyY3lyaWxsaWMiLDExODcsImVuZyIsMzMxLCJlbmdib3BvbW9mbyIsMTI1ODEsImVuZ2hlY3lyaWxsaWMiLDExODksImVuaG9va2N5cmlsbGljIiwxMjI0LCJlbnNwYWNlIiw4MTk0LCJlb2dvbmVrIiwyODEsImVva29yZWFuIiwxMjYyNywiZW9wZW4iLDYwMywiZW9wZW5jbG9zZWQiLDY2NiwiZW9wZW5yZXZlcnNlZCIsNjA0LCJlb3BlbnJldmVyc2VkY2xvc2VkIiw2MDYsImVvcGVucmV2ZXJzZWRob29rIiw2MDUsImVwYXJlbiIsOTM3NiwiZXBzaWxvbiIsOTQ5LCJlcHNpbG9udG9ub3MiLDk0MSwiZXF1YWwiLDYxLCJlcXVhbG1vbm9zcGFjZSIsNjUzMDksImVxdWFsc21hbGwiLDY1MTI2LCJlcXVhbHN1cGVyaW9yIiw4MzE2LCJlcXVpdmFsZW5jZSIsODgwMSwiZXJib3BvbW9mbyIsMTI1ODIsImVyY3lyaWxsaWMiLDEwODgsImVyZXZlcnNlZCIsNjAwLCJlcmV2ZXJzZWRjeXJpbGxpYyIsMTEwMSwiZXNjeXJpbGxpYyIsMTA4OSwiZXNkZXNjZW5kZXJjeXJpbGxpYyIsMTE5NSwiZXNoIiw2NDMsImVzaGN1cmwiLDY0NiwiZXNob3J0ZGV2YSIsMjMxOCwiZXNob3J0dm93ZWxzaWduZGV2YSIsMjM3NCwiZXNocmV2ZXJzZWRsb29wIiw0MjYsImVzaHNxdWF0cmV2ZXJzZWQiLDY0NSwiZXNtYWxsaGlyYWdhbmEiLDEyMzU5LCJlc21hbGxrYXRha2FuYSIsMTI0NTUsImVzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4NiwiZXN0aW1hdGVkIiw4NDk0LCJlc3VwZXJpb3IiLDYzMjEyLCJldGEiLDk1MSwiZXRhcm1lbmlhbiIsMTM4NCwiZXRhdG9ub3MiLDk0MiwiZXRoIiwyNDAsImV0aWxkZSIsNzg2OSwiZXRpbGRlYmVsb3ciLDc3MDcsImV0bmFodGFmb3VraGhlYnJldyIsMTQyNSwiZXRuYWh0YWZvdWtobGVmdGhlYnJldyIsMTQyNSwiZXRuYWh0YWhlYnJldyIsMTQyNSwiZXRuYWh0YWxlZnRoZWJyZXciLDE0MjUsImV0dXJuZWQiLDQ3NywiZXVrb3JlYW4iLDEyNjQxLCJldXJvIiw4MzY0LCJldm93ZWxzaWduYmVuZ2FsaSIsMjUwMywiZXZvd2Vsc2lnbmRldmEiLDIzNzUsImV2b3dlbHNpZ25ndWphcmF0aSIsMjc1OSwiZXhjbGFtIiwzMywiZXhjbGFtYXJtZW5pYW4iLDEzNzIsImV4Y2xhbWRibCIsODI1MiwiZXhjbGFtZG93biIsMTYxLCJleGNsYW1kb3duc21hbGwiLDYzMzkzLCJleGNsYW1tb25vc3BhY2UiLDY1MjgxLCJleGNsYW1zbWFsbCIsNjMyNjUsImV4aXN0ZW50aWFsIiw4NzA3LCJlemgiLDY1OCwiZXpoY2Fyb24iLDQ5NSwiZXpoY3VybCIsNjU5LCJlemhyZXZlcnNlZCIsNDQxLCJlemh0YWlsIiw0NDIsImYiLDEwMiwiZmFkZXZhIiwyMzk4LCJmYWd1cm11a2hpIiwyNjU0LCJmYWhyZW5oZWl0Iiw4NDU3LCJmYXRoYWFyYWJpYyIsMTYxNCwiZmF0aGFsb3dhcmFiaWMiLDE2MTQsImZhdGhhdGFuYXJhYmljIiwxNjExLCJmYm9wb21vZm8iLDEyNTUyLCJmY2lyY2xlIiw5NDI5LCJmZG90YWNjZW50Iiw3NzExLCJmZWhhcmFiaWMiLDE2MDEsImZlaGFybWVuaWFuIiwxNDE0LCJmZWhmaW5hbGFyYWJpYyIsNjUyMzQsImZlaGluaXRpYWxhcmFiaWMiLDY1MjM1LCJmZWhtZWRpYWxhcmFiaWMiLDY1MjM2LCJmZWljb3B0aWMiLDk5NywiZmVtYWxlIiw5NzkyLCJmZiIsNjQyNTYsImZfZiIsNjQyNTYsImZmaSIsNjQyNTksImZfZl9pIiw2NDI1OSwiZmZsIiw2NDI2MCwiZl9mX2wiLDY0MjYwLCJmaSIsNjQyNTcsImZfaSIsNjQyNTcsImZpZnRlZW5jaXJjbGUiLDkzMjYsImZpZnRlZW5wYXJlbiIsOTM0NiwiZmlmdGVlbnBlcmlvZCIsOTM2NiwiZmlndXJlZGFzaCIsODIxMCwiZmlsbGVkYm94Iiw5NjMyLCJmaWxsZWRyZWN0Iiw5NjQ0LCJmaW5hbGthZiIsMTQ5OCwiZmluYWxrYWZkYWdlc2giLDY0MzE0LCJmaW5hbGthZmRhZ2VzaGhlYnJldyIsNjQzMTQsImZpbmFsa2FmaGVicmV3IiwxNDk4LCJmaW5hbG1lbSIsMTUwMSwiZmluYWxtZW1oZWJyZXciLDE1MDEsImZpbmFsbnVuIiwxNTAzLCJmaW5hbG51bmhlYnJldyIsMTUwMywiZmluYWxwZSIsMTUwNywiZmluYWxwZWhlYnJldyIsMTUwNywiZmluYWx0c2FkaSIsMTUwOSwiZmluYWx0c2FkaWhlYnJldyIsMTUwOSwiZmlyc3R0b25lY2hpbmVzZSIsNzEzLCJmaXNoZXllIiw5NjczLCJmaXRhY3lyaWxsaWMiLDExMzksImZpdmUiLDUzLCJmaXZlYXJhYmljIiwxNjM3LCJmaXZlYmVuZ2FsaSIsMjUzOSwiZml2ZWNpcmNsZSIsOTMxNiwiZml2ZWNpcmNsZWludmVyc2VzYW5zc2VyaWYiLDEwMTI2LCJmaXZlZGV2YSIsMjQxMSwiZml2ZWVpZ2h0aHMiLDg1NDEsImZpdmVndWphcmF0aSIsMjc5NSwiZml2ZWd1cm11a2hpIiwyNjY3LCJmaXZlaGFja2FyYWJpYyIsMTYzNywiZml2ZWhhbmd6aG91IiwxMjMyNSwiZml2ZWlkZW9ncmFwaGljcGFyZW4iLDEyODM2LCJmaXZlaW5mZXJpb3IiLDgzMjUsImZpdmVtb25vc3BhY2UiLDY1MzAxLCJmaXZlb2xkc3R5bGUiLDYzMjg1LCJmaXZlcGFyZW4iLDkzMzYsImZpdmVwZXJpb2QiLDkzNTYsImZpdmVwZXJzaWFuIiwxNzgxLCJmaXZlcm9tYW4iLDg1NjQsImZpdmVzdXBlcmlvciIsODMwOSwiZml2ZXRoYWkiLDM2NjksImZsIiw2NDI1OCwiZl9sIiw2NDI1OCwiZmxvcmluIiw0MDIsImZtb25vc3BhY2UiLDY1MzUwLCJmbXNxdWFyZSIsMTMyMDksImZvZmFudGhhaSIsMzYxNSwiZm9mYXRoYWkiLDM2MTMsImZvbmdtYW50aGFpIiwzNjYzLCJmb3JhbGwiLDg3MDQsImZvdXIiLDUyLCJmb3VyYXJhYmljIiwxNjM2LCJmb3VyYmVuZ2FsaSIsMjUzOCwiZm91cmNpcmNsZSIsOTMxNSwiZm91cmNpcmNsZWludmVyc2VzYW5zc2VyaWYiLDEwMTI1LCJmb3VyZGV2YSIsMjQxMCwiZm91cmd1amFyYXRpIiwyNzk0LCJmb3VyZ3VybXVraGkiLDI2NjYsImZvdXJoYWNrYXJhYmljIiwxNjM2LCJmb3VyaGFuZ3pob3UiLDEyMzI0LCJmb3VyaWRlb2dyYXBoaWNwYXJlbiIsMTI4MzUsImZvdXJpbmZlcmlvciIsODMyNCwiZm91cm1vbm9zcGFjZSIsNjUzMDAsImZvdXJudW1lcmF0b3JiZW5nYWxpIiwyNTUxLCJmb3Vyb2xkc3R5bGUiLDYzMjg0LCJmb3VycGFyZW4iLDkzMzUsImZvdXJwZXJpb2QiLDkzNTUsImZvdXJwZXJzaWFuIiwxNzgwLCJmb3Vycm9tYW4iLDg1NjMsImZvdXJzdXBlcmlvciIsODMwOCwiZm91cnRlZW5jaXJjbGUiLDkzMjUsImZvdXJ0ZWVucGFyZW4iLDkzNDUsImZvdXJ0ZWVucGVyaW9kIiw5MzY1LCJmb3VydGhhaSIsMzY2OCwiZm91cnRodG9uZWNoaW5lc2UiLDcxNSwiZnBhcmVuIiw5Mzc3LCJmcmFjdGlvbiIsODI2MCwiZnJhbmMiLDgzNTUsImciLDEwMywiZ2FiZW5nYWxpIiwyNDU1LCJnYWN1dGUiLDUwMSwiZ2FkZXZhIiwyMzI3LCJnYWZhcmFiaWMiLDE3MTEsImdhZmZpbmFsYXJhYmljIiw2NDQwMywiZ2FmaW5pdGlhbGFyYWJpYyIsNjQ0MDQsImdhZm1lZGlhbGFyYWJpYyIsNjQ0MDUsImdhZ3VqYXJhdGkiLDI3MTEsImdhZ3VybXVraGkiLDI1ODMsImdhaGlyYWdhbmEiLDEyMzY0LCJnYWthdGFrYW5hIiwxMjQ2MCwiZ2FtbWEiLDk0NywiZ2FtbWFsYXRpbnNtYWxsIiw2MTEsImdhbW1hc3VwZXJpb3IiLDczNiwiZ2FuZ2lhY29wdGljIiwxMDAzLCJnYm9wb21vZm8iLDEyNTU3LCJnYnJldmUiLDI4NywiZ2Nhcm9uIiw0ODcsImdjZWRpbGxhIiwyOTEsImdjaXJjbGUiLDk0MzAsImdjaXJjdW1mbGV4IiwyODUsImdjb21tYWFjY2VudCIsMjkxLCJnZG90IiwyODksImdkb3RhY2NlbnQiLDI4OSwiZ2VjeXJpbGxpYyIsMTA3NSwiZ2VoaXJhZ2FuYSIsMTIzNzAsImdla2F0YWthbmEiLDEyNDY2LCJnZW9tZXRyaWNhbGx5ZXF1YWwiLDg3ODUsImdlcmVzaGFjY2VudGhlYnJldyIsMTQzNiwiZ2VyZXNoaGVicmV3IiwxNTIzLCJnZXJlc2htdXFkYW1oZWJyZXciLDE0MzcsImdlcm1hbmRibHMiLDIyMywiZ2Vyc2hheWltYWNjZW50aGVicmV3IiwxNDM4LCJnZXJzaGF5aW1oZWJyZXciLDE1MjQsImdldGFtYXJrIiwxMjMwNywiZ2hhYmVuZ2FsaSIsMjQ1NiwiZ2hhZGFybWVuaWFuIiwxMzk0LCJnaGFkZXZhIiwyMzI4LCJnaGFndWphcmF0aSIsMjcxMiwiZ2hhZ3VybXVraGkiLDI1ODQsImdoYWluYXJhYmljIiwxNTk0LCJnaGFpbmZpbmFsYXJhYmljIiw2NTIzMCwiZ2hhaW5pbml0aWFsYXJhYmljIiw2NTIzMSwiZ2hhaW5tZWRpYWxhcmFiaWMiLDY1MjMyLCJnaGVtaWRkbGVob29rY3lyaWxsaWMiLDExNzMsImdoZXN0cm9rZWN5cmlsbGljIiwxMTcxLCJnaGV1cHR1cm5jeXJpbGxpYyIsMTE2OSwiZ2hoYWRldmEiLDIzOTQsImdoaGFndXJtdWtoaSIsMjY1MCwiZ2hvb2siLDYwOCwiZ2h6c3F1YXJlIiwxMzIwMywiZ2loaXJhZ2FuYSIsMTIzNjYsImdpa2F0YWthbmEiLDEyNDYyLCJnaW1hcm1lbmlhbiIsMTM3OSwiZ2ltZWwiLDE0OTAsImdpbWVsZGFnZXNoIiw2NDMwNiwiZ2ltZWxkYWdlc2hoZWJyZXciLDY0MzA2LCJnaW1lbGhlYnJldyIsMTQ5MCwiZ2plY3lyaWxsaWMiLDExMDcsImdsb3R0YWxpbnZlcnRlZHN0cm9rZSIsNDQ2LCJnbG90dGFsc3RvcCIsNjYwLCJnbG90dGFsc3RvcGludmVydGVkIiw2NjIsImdsb3R0YWxzdG9wbW9kIiw3MDQsImdsb3R0YWxzdG9wcmV2ZXJzZWQiLDY2MSwiZ2xvdHRhbHN0b3ByZXZlcnNlZG1vZCIsNzA1LCJnbG90dGFsc3RvcHJldmVyc2Vkc3VwZXJpb3IiLDc0MCwiZ2xvdHRhbHN0b3BzdHJva2UiLDY3MywiZ2xvdHRhbHN0b3BzdHJva2VyZXZlcnNlZCIsNjc0LCJnbWFjcm9uIiw3NzEzLCJnbW9ub3NwYWNlIiw2NTM1MSwiZ29oaXJhZ2FuYSIsMTIzNzIsImdva2F0YWthbmEiLDEyNDY4LCJncGFyZW4iLDkzNzgsImdwYXNxdWFyZSIsMTMyMjgsImdyYWRpZW50Iiw4NzExLCJncmF2ZSIsOTYsImdyYXZlYmVsb3djbWIiLDc5MCwiZ3JhdmVjbWIiLDc2OCwiZ3JhdmVjb21iIiw3NjgsImdyYXZlZGV2YSIsMjM4NywiZ3JhdmVsb3dtb2QiLDcxOCwiZ3JhdmVtb25vc3BhY2UiLDY1MzQ0LCJncmF2ZXRvbmVjbWIiLDgzMiwiZ3JlYXRlciIsNjIsImdyZWF0ZXJlcXVhbCIsODgwNSwiZ3JlYXRlcmVxdWFsb3JsZXNzIiw4OTIzLCJncmVhdGVybW9ub3NwYWNlIiw2NTMxMCwiZ3JlYXRlcm9yZXF1aXZhbGVudCIsODgxOSwiZ3JlYXRlcm9ybGVzcyIsODgyMywiZ3JlYXRlcm92ZXJlcXVhbCIsODgwNywiZ3JlYXRlcnNtYWxsIiw2NTEyNSwiZ3NjcmlwdCIsNjA5LCJnc3Ryb2tlIiw0ODUsImd1aGlyYWdhbmEiLDEyMzY4LCJndWlsbGVtb3RsZWZ0IiwxNzEsImd1aWxsZW1vdHJpZ2h0IiwxODcsImd1aWxzaW5nbGxlZnQiLDgyNDksImd1aWxzaW5nbHJpZ2h0Iiw4MjUwLCJndWthdGFrYW5hIiwxMjQ2NCwiZ3VyYW11c3F1YXJlIiwxMzA4MCwiZ3lzcXVhcmUiLDEzMjU3LCJoIiwxMDQsImhhYWJraGFzaWFuY3lyaWxsaWMiLDExOTMsImhhYWx0b25lYXJhYmljIiwxNzI5LCJoYWJlbmdhbGkiLDI0ODksImhhZGVzY2VuZGVyY3lyaWxsaWMiLDEyMDMsImhhZGV2YSIsMjM2MSwiaGFndWphcmF0aSIsMjc0NSwiaGFndXJtdWtoaSIsMjYxNywiaGFoYXJhYmljIiwxNTgxLCJoYWhmaW5hbGFyYWJpYyIsNjUxODYsImhhaGluaXRpYWxhcmFiaWMiLDY1MTg3LCJoYWhpcmFnYW5hIiwxMjM5OSwiaGFobWVkaWFsYXJhYmljIiw2NTE4OCwiaGFpdHVzcXVhcmUiLDEzMDk4LCJoYWthdGFrYW5hIiwxMjQ5NSwiaGFrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MTgsImhhbGFudGd1cm11a2hpIiwyNjM3LCJoYW16YWFyYWJpYyIsMTU2OSwiaGFtemFsb3dhcmFiaWMiLDE1NjksImhhbmd1bGZpbGxlciIsMTI2NDQsImhhcmRzaWduY3lyaWxsaWMiLDEwOTgsImhhcnBvb25sZWZ0YmFyYnVwIiw4NjM2LCJoYXJwb29ucmlnaHRiYXJidXAiLDg2NDAsImhhc3F1YXJlIiwxMzI1OCwiaGF0YWZwYXRhaCIsMTQ1OCwiaGF0YWZwYXRhaDE2IiwxNDU4LCJoYXRhZnBhdGFoMjMiLDE0NTgsImhhdGFmcGF0YWgyZiIsMTQ1OCwiaGF0YWZwYXRhaGhlYnJldyIsMTQ1OCwiaGF0YWZwYXRhaG5hcnJvd2hlYnJldyIsMTQ1OCwiaGF0YWZwYXRhaHF1YXJ0ZXJoZWJyZXciLDE0NTgsImhhdGFmcGF0YWh3aWRlaGVicmV3IiwxNDU4LCJoYXRhZnFhbWF0cyIsMTQ1OSwiaGF0YWZxYW1hdHMxYiIsMTQ1OSwiaGF0YWZxYW1hdHMyOCIsMTQ1OSwiaGF0YWZxYW1hdHMzNCIsMTQ1OSwiaGF0YWZxYW1hdHNoZWJyZXciLDE0NTksImhhdGFmcWFtYXRzbmFycm93aGVicmV3IiwxNDU5LCJoYXRhZnFhbWF0c3F1YXJ0ZXJoZWJyZXciLDE0NTksImhhdGFmcWFtYXRzd2lkZWhlYnJldyIsMTQ1OSwiaGF0YWZzZWdvbCIsMTQ1NywiaGF0YWZzZWdvbDE3IiwxNDU3LCJoYXRhZnNlZ29sMjQiLDE0NTcsImhhdGFmc2Vnb2wzMCIsMTQ1NywiaGF0YWZzZWdvbGhlYnJldyIsMTQ1NywiaGF0YWZzZWdvbG5hcnJvd2hlYnJldyIsMTQ1NywiaGF0YWZzZWdvbHF1YXJ0ZXJoZWJyZXciLDE0NTcsImhhdGFmc2Vnb2x3aWRlaGVicmV3IiwxNDU3LCJoYmFyIiwyOTUsImhib3BvbW9mbyIsMTI1NTksImhicmV2ZWJlbG93Iiw3NzIzLCJoY2VkaWxsYSIsNzcyMSwiaGNpcmNsZSIsOTQzMSwiaGNpcmN1bWZsZXgiLDI5MywiaGRpZXJlc2lzIiw3NzE5LCJoZG90YWNjZW50Iiw3NzE1LCJoZG90YmVsb3ciLDc3MTcsImhlIiwxNDkyLCJoZWFydCIsOTgyOSwiaGVhcnRzdWl0YmxhY2siLDk4MjksImhlYXJ0c3VpdHdoaXRlIiw5ODI1LCJoZWRhZ2VzaCIsNjQzMDgsImhlZGFnZXNoaGVicmV3Iiw2NDMwOCwiaGVoYWx0b25lYXJhYmljIiwxNzI5LCJoZWhhcmFiaWMiLDE2MDcsImhlaGVicmV3IiwxNDkyLCJoZWhmaW5hbGFsdG9uZWFyYWJpYyIsNjQ0MjMsImhlaGZpbmFsYWx0dHdvYXJhYmljIiw2NTI1OCwiaGVoZmluYWxhcmFiaWMiLDY1MjU4LCJoZWhoYW16YWFib3ZlZmluYWxhcmFiaWMiLDY0NDIxLCJoZWhoYW16YWFib3ZlaXNvbGF0ZWRhcmFiaWMiLDY0NDIwLCJoZWhpbml0aWFsYWx0b25lYXJhYmljIiw2NDQyNCwiaGVoaW5pdGlhbGFyYWJpYyIsNjUyNTksImhlaGlyYWdhbmEiLDEyNDA4LCJoZWhtZWRpYWxhbHRvbmVhcmFiaWMiLDY0NDI1LCJoZWhtZWRpYWxhcmFiaWMiLDY1MjYwLCJoZWlzZWllcmFzcXVhcmUiLDEzMTc5LCJoZWthdGFrYW5hIiwxMjUwNCwiaGVrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MjEsImhla3V0YWFydXNxdWFyZSIsMTMxMTAsImhlbmdob29rIiw2MTUsImhlcnV0dXNxdWFyZSIsMTMxMTMsImhldCIsMTQ5NSwiaGV0aGVicmV3IiwxNDk1LCJoaG9vayIsNjE0LCJoaG9va3N1cGVyaW9yIiw2ODksImhpZXVoYWNpcmNsZWtvcmVhbiIsMTI5MjMsImhpZXVoYXBhcmVua29yZWFuIiwxMjgyNywiaGlldWhjaXJjbGVrb3JlYW4iLDEyOTA5LCJoaWV1aGtvcmVhbiIsMTI2MjIsImhpZXVocGFyZW5rb3JlYW4iLDEyODEzLCJoaWhpcmFnYW5hIiwxMjQwMiwiaGlrYXRha2FuYSIsMTI0OTgsImhpa2F0YWthbmFoYWxmd2lkdGgiLDY1NDE5LCJoaXJpcSIsMTQ2MCwiaGlyaXExNCIsMTQ2MCwiaGlyaXEyMSIsMTQ2MCwiaGlyaXEyZCIsMTQ2MCwiaGlyaXFoZWJyZXciLDE0NjAsImhpcmlxbmFycm93aGVicmV3IiwxNDYwLCJoaXJpcXF1YXJ0ZXJoZWJyZXciLDE0NjAsImhpcmlxd2lkZWhlYnJldyIsMTQ2MCwiaGxpbmViZWxvdyIsNzgzMCwiaG1vbm9zcGFjZSIsNjUzNTIsImhvYXJtZW5pYW4iLDEzOTIsImhvaGlwdGhhaSIsMzYyNywiaG9oaXJhZ2FuYSIsMTI0MTEsImhva2F0YWthbmEiLDEyNTA3LCJob2thdGFrYW5haGFsZndpZHRoIiw2NTQyMiwiaG9sYW0iLDE0NjUsImhvbGFtMTkiLDE0NjUsImhvbGFtMjYiLDE0NjUsImhvbGFtMzIiLDE0NjUsImhvbGFtaGVicmV3IiwxNDY1LCJob2xhbW5hcnJvd2hlYnJldyIsMTQ2NSwiaG9sYW1xdWFydGVyaGVicmV3IiwxNDY1LCJob2xhbXdpZGVoZWJyZXciLDE0NjUsImhvbm9raHVrdGhhaSIsMzYzMCwiaG9va2Fib3ZlY29tYiIsNzc3LCJob29rY21iIiw3NzcsImhvb2twYWxhdGFsaXplZGJlbG93Y21iIiw4MDEsImhvb2tyZXRyb2ZsZXhiZWxvd2NtYiIsODAyLCJob29uc3F1YXJlIiwxMzEyMiwiaG9yaWNvcHRpYyIsMTAwMSwiaG9yaXpvbnRhbGJhciIsODIxMywiaG9ybmNtYiIsNzk1LCJob3RzcHJpbmdzIiw5ODMyLCJob3VzZSIsODk2MiwiaHBhcmVuIiw5Mzc5LCJoc3VwZXJpb3IiLDY4OCwiaHR1cm5lZCIsNjEzLCJodWhpcmFnYW5hIiwxMjQwNSwiaHVpaXRvc3F1YXJlIiwxMzEwNywiaHVrYXRha2FuYSIsMTI1MDEsImh1a2F0YWthbmFoYWxmd2lkdGgiLDY1NDIwLCJodW5nYXJ1bWxhdXQiLDczMywiaHVuZ2FydW1sYXV0Y21iIiw3NzksImh2Iiw0MDUsImh5cGhlbiIsNDUsImh5cGhlbmluZmVyaW9yIiw2MzIwNSwiaHlwaGVubW9ub3NwYWNlIiw2NTI5MywiaHlwaGVuc21hbGwiLDY1MTIzLCJoeXBoZW5zdXBlcmlvciIsNjMyMDYsImh5cGhlbnR3byIsODIwOCwiaSIsMTA1LCJpYWN1dGUiLDIzNywiaWFjeXJpbGxpYyIsMTEwMywiaWJlbmdhbGkiLDI0MzksImlib3BvbW9mbyIsMTI1ODMsImlicmV2ZSIsMzAxLCJpY2Fyb24iLDQ2NCwiaWNpcmNsZSIsOTQzMiwiaWNpcmN1bWZsZXgiLDIzOCwiaWN5cmlsbGljIiwxMTEwLCJpZGJsZ3JhdmUiLDUyMSwiaWRlb2dyYXBoZWFydGhjaXJjbGUiLDEyOTQzLCJpZGVvZ3JhcGhmaXJlY2lyY2xlIiwxMjkzOSwiaWRlb2dyYXBoaWNhbGxpYW5jZXBhcmVuIiwxMjg2MywiaWRlb2dyYXBoaWNjYWxscGFyZW4iLDEyODU4LCJpZGVvZ3JhcGhpY2NlbnRyZWNpcmNsZSIsMTI5NjUsImlkZW9ncmFwaGljY2xvc2UiLDEyMjk0LCJpZGVvZ3JhcGhpY2NvbW1hIiwxMjI4OSwiaWRlb2dyYXBoaWNjb21tYWxlZnQiLDY1MzgwLCJpZGVvZ3JhcGhpY2NvbmdyYXR1bGF0aW9ucGFyZW4iLDEyODU1LCJpZGVvZ3JhcGhpY2NvcnJlY3RjaXJjbGUiLDEyOTYzLCJpZGVvZ3JhcGhpY2VhcnRocGFyZW4iLDEyODQ3LCJpZGVvZ3JhcGhpY2VudGVycHJpc2VwYXJlbiIsMTI4NjEsImlkZW9ncmFwaGljZXhjZWxsZW50Y2lyY2xlIiwxMjk1NywiaWRlb2dyYXBoaWNmZXN0aXZhbHBhcmVuIiwxMjg2NCwiaWRlb2dyYXBoaWNmaW5hbmNpYWxjaXJjbGUiLDEyOTUwLCJpZGVvZ3JhcGhpY2ZpbmFuY2lhbHBhcmVuIiwxMjg1NCwiaWRlb2dyYXBoaWNmaXJlcGFyZW4iLDEyODQzLCJpZGVvZ3JhcGhpY2hhdmVwYXJlbiIsMTI4NTAsImlkZW9ncmFwaGljaGlnaGNpcmNsZSIsMTI5NjQsImlkZW9ncmFwaGljaXRlcmF0aW9ubWFyayIsMTIyOTMsImlkZW9ncmFwaGljbGFib3JjaXJjbGUiLDEyOTUyLCJpZGVvZ3JhcGhpY2xhYm9ycGFyZW4iLDEyODU2LCJpZGVvZ3JhcGhpY2xlZnRjaXJjbGUiLDEyOTY3LCJpZGVvZ3JhcGhpY2xvd2NpcmNsZSIsMTI5NjYsImlkZW9ncmFwaGljbWVkaWNpbmVjaXJjbGUiLDEyOTY5LCJpZGVvZ3JhcGhpY21ldGFscGFyZW4iLDEyODQ2LCJpZGVvZ3JhcGhpY21vb25wYXJlbiIsMTI4NDIsImlkZW9ncmFwaGljbmFtZXBhcmVuIiwxMjg1MiwiaWRlb2dyYXBoaWNwZXJpb2QiLDEyMjkwLCJpZGVvZ3JhcGhpY3ByaW50Y2lyY2xlIiwxMjk1OCwiaWRlb2dyYXBoaWNyZWFjaHBhcmVuIiwxMjg2NywiaWRlb2dyYXBoaWNyZXByZXNlbnRwYXJlbiIsMTI4NTcsImlkZW9ncmFwaGljcmVzb3VyY2VwYXJlbiIsMTI4NjIsImlkZW9ncmFwaGljcmlnaHRjaXJjbGUiLDEyOTY4LCJpZGVvZ3JhcGhpY3NlY3JldGNpcmNsZSIsMTI5NTMsImlkZW9ncmFwaGljc2VsZnBhcmVuIiwxMjg2NiwiaWRlb2dyYXBoaWNzb2NpZXR5cGFyZW4iLDEyODUxLCJpZGVvZ3JhcGhpY3NwYWNlIiwxMjI4OCwiaWRlb2dyYXBoaWNzcGVjaWFscGFyZW4iLDEyODUzLCJpZGVvZ3JhcGhpY3N0b2NrcGFyZW4iLDEyODQ5LCJpZGVvZ3JhcGhpY3N0dWR5cGFyZW4iLDEyODU5LCJpZGVvZ3JhcGhpY3N1bnBhcmVuIiwxMjg0OCwiaWRlb2dyYXBoaWNzdXBlcnZpc2VwYXJlbiIsMTI4NjAsImlkZW9ncmFwaGljd2F0ZXJwYXJlbiIsMTI4NDQsImlkZW9ncmFwaGljd29vZHBhcmVuIiwxMjg0NSwiaWRlb2dyYXBoaWN6ZXJvIiwxMjI5NSwiaWRlb2dyYXBobWV0YWxjaXJjbGUiLDEyOTQyLCJpZGVvZ3JhcGhtb29uY2lyY2xlIiwxMjkzOCwiaWRlb2dyYXBobmFtZWNpcmNsZSIsMTI5NDgsImlkZW9ncmFwaHN1bmNpcmNsZSIsMTI5NDQsImlkZW9ncmFwaHdhdGVyY2lyY2xlIiwxMjk0MCwiaWRlb2dyYXBod29vZGNpcmNsZSIsMTI5NDEsImlkZXZhIiwyMzExLCJpZGllcmVzaXMiLDIzOSwiaWRpZXJlc2lzYWN1dGUiLDc3MjcsImlkaWVyZXNpc2N5cmlsbGljIiwxMjUzLCJpZG90YmVsb3ciLDc4ODMsImllYnJldmVjeXJpbGxpYyIsMTIzOSwiaWVjeXJpbGxpYyIsMTA3NywiaWV1bmdhY2lyY2xla29yZWFuIiwxMjkxNywiaWV1bmdhcGFyZW5rb3JlYW4iLDEyODIxLCJpZXVuZ2NpcmNsZWtvcmVhbiIsMTI5MDMsImlldW5na29yZWFuIiwxMjYxNSwiaWV1bmdwYXJlbmtvcmVhbiIsMTI4MDcsImlncmF2ZSIsMjM2LCJpZ3VqYXJhdGkiLDI2OTUsImlndXJtdWtoaSIsMjU2NywiaWhpcmFnYW5hIiwxMjM1NiwiaWhvb2thYm92ZSIsNzg4MSwiaWliZW5nYWxpIiwyNDQwLCJpaWN5cmlsbGljIiwxMDgwLCJpaWRldmEiLDIzMTIsImlpZ3VqYXJhdGkiLDI2OTYsImlpZ3VybXVraGkiLDI1NjgsImlpbWF0cmFndXJtdWtoaSIsMjYyNCwiaWludmVydGVkYnJldmUiLDUyMywiaWlzaG9ydGN5cmlsbGljIiwxMDgxLCJpaXZvd2Vsc2lnbmJlbmdhbGkiLDI0OTYsImlpdm93ZWxzaWduZGV2YSIsMjM2OCwiaWl2b3dlbHNpZ25ndWphcmF0aSIsMjc1MiwiaWoiLDMwNywiaWthdGFrYW5hIiwxMjQ1MiwiaWthdGFrYW5haGFsZndpZHRoIiw2NTM5NCwiaWtvcmVhbiIsMTI2NDMsImlsZGUiLDczMiwiaWx1eWhlYnJldyIsMTQ1MiwiaW1hY3JvbiIsMjk5LCJpbWFjcm9uY3lyaWxsaWMiLDEyNTEsImltYWdlb3JhcHByb3hpbWF0ZWx5ZXF1YWwiLDg3ODcsImltYXRyYWd1cm11a2hpIiwyNjIzLCJpbW9ub3NwYWNlIiw2NTM1MywiaW5jcmVtZW50Iiw4NzEwLCJpbmZpbml0eSIsODczNCwiaW5pYXJtZW5pYW4iLDEzODcsImludGVncmFsIiw4NzQ3LCJpbnRlZ3JhbGJvdHRvbSIsODk5MywiaW50ZWdyYWxidCIsODk5MywiaW50ZWdyYWxleCIsNjM3MzMsImludGVncmFsdG9wIiw4OTkyLCJpbnRlZ3JhbHRwIiw4OTkyLCJpbnRlcnNlY3Rpb24iLDg3NDUsImludGlzcXVhcmUiLDEzMDYxLCJpbnZidWxsZXQiLDk2ODgsImludmNpcmNsZSIsOTY4OSwiaW52c21pbGVmYWNlIiw5Nzg3LCJpb2N5cmlsbGljIiwxMTA1LCJpb2dvbmVrIiwzMDMsImlvdGEiLDk1MywiaW90YWRpZXJlc2lzIiw5NzAsImlvdGFkaWVyZXNpc3Rvbm9zIiw5MTIsImlvdGFsYXRpbiIsNjE3LCJpb3RhdG9ub3MiLDk0MywiaXBhcmVuIiw5MzgwLCJpcmlndXJtdWtoaSIsMjY3NCwiaXNtYWxsaGlyYWdhbmEiLDEyMzU1LCJpc21hbGxrYXRha2FuYSIsMTI0NTEsImlzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4NCwiaXNzaGFyYmVuZ2FsaSIsMjU1NCwiaXN0cm9rZSIsNjE2LCJpc3VwZXJpb3IiLDYzMjEzLCJpdGVyYXRpb25oaXJhZ2FuYSIsMTI0NDUsIml0ZXJhdGlvbmthdGFrYW5hIiwxMjU0MSwiaXRpbGRlIiwyOTcsIml0aWxkZWJlbG93Iiw3NzI1LCJpdWJvcG9tb2ZvIiwxMjU4NSwiaXVjeXJpbGxpYyIsMTEwMiwiaXZvd2Vsc2lnbmJlbmdhbGkiLDI0OTUsIml2b3dlbHNpZ25kZXZhIiwyMzY3LCJpdm93ZWxzaWduZ3VqYXJhdGkiLDI3NTEsIml6aGl0c2FjeXJpbGxpYyIsMTE0MSwiaXpoaXRzYWRibGdyYXZlY3lyaWxsaWMiLDExNDMsImoiLDEwNiwiamFhcm1lbmlhbiIsMTM5MywiamFiZW5nYWxpIiwyNDYwLCJqYWRldmEiLDIzMzIsImphZ3VqYXJhdGkiLDI3MTYsImphZ3VybXVraGkiLDI1ODgsImpib3BvbW9mbyIsMTI1NjAsImpjYXJvbiIsNDk2LCJqY2lyY2xlIiw5NDMzLCJqY2lyY3VtZmxleCIsMzA5LCJqY3Jvc3NlZHRhaWwiLDY2OSwiamRvdGxlc3NzdHJva2UiLDYwNywiamVjeXJpbGxpYyIsMTExMiwiamVlbWFyYWJpYyIsMTU4MCwiamVlbWZpbmFsYXJhYmljIiw2NTE4MiwiamVlbWluaXRpYWxhcmFiaWMiLDY1MTgzLCJqZWVtbWVkaWFsYXJhYmljIiw2NTE4NCwiamVoYXJhYmljIiwxNjg4LCJqZWhmaW5hbGFyYWJpYyIsNjQzOTUsImpoYWJlbmdhbGkiLDI0NjEsImpoYWRldmEiLDIzMzMsImpoYWd1amFyYXRpIiwyNzE3LCJqaGFndXJtdWtoaSIsMjU4OSwiamhlaGFybWVuaWFuIiwxNDAzLCJqaXMiLDEyMjkyLCJqbW9ub3NwYWNlIiw2NTM1NCwianBhcmVuIiw5MzgxLCJqc3VwZXJpb3IiLDY5MCwiayIsMTA3LCJrYWJhc2hraXJjeXJpbGxpYyIsMTE4NSwia2FiZW5nYWxpIiwyNDUzLCJrYWN1dGUiLDc3MjksImthY3lyaWxsaWMiLDEwODIsImthZGVzY2VuZGVyY3lyaWxsaWMiLDExNzksImthZGV2YSIsMjMyNSwia2FmIiwxNDk5LCJrYWZhcmFiaWMiLDE2MDMsImthZmRhZ2VzaCIsNjQzMTUsImthZmRhZ2VzaGhlYnJldyIsNjQzMTUsImthZmZpbmFsYXJhYmljIiw2NTI0Miwia2FmaGVicmV3IiwxNDk5LCJrYWZpbml0aWFsYXJhYmljIiw2NTI0Mywia2FmbWVkaWFsYXJhYmljIiw2NTI0NCwia2FmcmFmZWhlYnJldyIsNjQzMzMsImthZ3VqYXJhdGkiLDI3MDksImthZ3VybXVraGkiLDI1ODEsImthaGlyYWdhbmEiLDEyMzYzLCJrYWhvb2tjeXJpbGxpYyIsMTIyMCwia2FrYXRha2FuYSIsMTI0NTksImtha2F0YWthbmFoYWxmd2lkdGgiLDY1Mzk4LCJrYXBwYSIsOTU0LCJrYXBwYXN5bWJvbGdyZWVrIiwxMDA4LCJrYXB5ZW91bm1pZXVta29yZWFuIiwxMjY1Nywia2FweWVvdW5waGlldXBoa29yZWFuIiwxMjY3Niwia2FweWVvdW5waWV1cGtvcmVhbiIsMTI2NjQsImthcHllb3Vuc3NhbmdwaWV1cGtvcmVhbiIsMTI2NjUsImthcm9yaWlzcXVhcmUiLDEzMDY5LCJrYXNoaWRhYXV0b2FyYWJpYyIsMTYwMCwia2FzaGlkYWF1dG9ub3NpZGViZWFyaW5nYXJhYmljIiwxNjAwLCJrYXNtYWxsa2F0YWthbmEiLDEyNTMzLCJrYXNxdWFyZSIsMTMxODgsImthc3JhYXJhYmljIiwxNjE2LCJrYXNyYXRhbmFyYWJpYyIsMTYxMywia2FzdHJva2VjeXJpbGxpYyIsMTE4Mywia2F0YWhpcmFwcm9sb25nbWFya2hhbGZ3aWR0aCIsNjUzOTIsImthdmVydGljYWxzdHJva2VjeXJpbGxpYyIsMTE4MSwia2JvcG9tb2ZvIiwxMjU1OCwia2NhbHNxdWFyZSIsMTMxOTMsImtjYXJvbiIsNDg5LCJrY2VkaWxsYSIsMzExLCJrY2lyY2xlIiw5NDM0LCJrY29tbWFhY2NlbnQiLDMxMSwia2RvdGJlbG93Iiw3NzMxLCJrZWhhcm1lbmlhbiIsMTQxMiwia2VoaXJhZ2FuYSIsMTIzNjksImtla2F0YWthbmEiLDEyNDY1LCJrZWthdGFrYW5haGFsZndpZHRoIiw2NTQwMSwia2VuYXJtZW5pYW4iLDEzOTEsImtlc21hbGxrYXRha2FuYSIsMTI1MzQsImtncmVlbmxhbmRpYyIsMzEyLCJraGFiZW5nYWxpIiwyNDU0LCJraGFjeXJpbGxpYyIsMTA5Mywia2hhZGV2YSIsMjMyNiwia2hhZ3VqYXJhdGkiLDI3MTAsImtoYWd1cm11a2hpIiwyNTgyLCJraGFoYXJhYmljIiwxNTgyLCJraGFoZmluYWxhcmFiaWMiLDY1MTkwLCJraGFoaW5pdGlhbGFyYWJpYyIsNjUxOTEsImtoYWhtZWRpYWxhcmFiaWMiLDY1MTkyLCJraGVpY29wdGljIiw5OTksImtoaGFkZXZhIiwyMzkzLCJraGhhZ3VybXVraGkiLDI2NDksImtoaWV1a2hhY2lyY2xla29yZWFuIiwxMjkyMCwia2hpZXVraGFwYXJlbmtvcmVhbiIsMTI4MjQsImtoaWV1a2hjaXJjbGVrb3JlYW4iLDEyOTA2LCJraGlldWtoa29yZWFuIiwxMjYxOSwia2hpZXVraHBhcmVua29yZWFuIiwxMjgxMCwia2hva2hhaXRoYWkiLDM1ODYsImtob2tob250aGFpIiwzNTg5LCJraG9raHVhdHRoYWkiLDM1ODcsImtob2tod2FpdGhhaSIsMzU4OCwia2hvbXV0dGhhaSIsMzY3NSwia2hvb2siLDQwOSwia2hvcmFraGFuZ3RoYWkiLDM1OTAsImtoenNxdWFyZSIsMTMyMDEsImtpaGlyYWdhbmEiLDEyMzY1LCJraWthdGFrYW5hIiwxMjQ2MSwia2lrYXRha2FuYWhhbGZ3aWR0aCIsNjUzOTksImtpcm9ndXJhbXVzcXVhcmUiLDEzMDc3LCJraXJvbWVldG9ydXNxdWFyZSIsMTMwNzgsImtpcm9zcXVhcmUiLDEzMDc2LCJraXllb2thY2lyY2xla29yZWFuIiwxMjkxMCwia2l5ZW9rYXBhcmVua29yZWFuIiwxMjgxNCwia2l5ZW9rY2lyY2xla29yZWFuIiwxMjg5Niwia2l5ZW9ra29yZWFuIiwxMjU5Mywia2l5ZW9rcGFyZW5rb3JlYW4iLDEyODAwLCJraXllb2tzaW9za29yZWFuIiwxMjU5NSwia2plY3lyaWxsaWMiLDExMTYsImtsaW5lYmVsb3ciLDc3MzMsImtsc3F1YXJlIiwxMzIwOCwia21jdWJlZHNxdWFyZSIsMTMyMjIsImttb25vc3BhY2UiLDY1MzU1LCJrbXNxdWFyZWRzcXVhcmUiLDEzMjE4LCJrb2hpcmFnYW5hIiwxMjM3MSwia29obXNxdWFyZSIsMTMyNDgsImtva2FpdGhhaSIsMzU4NSwia29rYXRha2FuYSIsMTI0NjcsImtva2F0YWthbmFoYWxmd2lkdGgiLDY1NDAyLCJrb29wb3NxdWFyZSIsMTMwODYsImtvcHBhY3lyaWxsaWMiLDExNTMsImtvcmVhbnN0YW5kYXJkc3ltYm9sIiwxMjkyNywia29yb25pc2NtYiIsODM1LCJrcGFyZW4iLDkzODIsImtwYXNxdWFyZSIsMTMyMjYsImtzaWN5cmlsbGljIiwxMTM1LCJrdHNxdWFyZSIsMTMyNjMsImt0dXJuZWQiLDY3MCwia3VoaXJhZ2FuYSIsMTIzNjcsImt1a2F0YWthbmEiLDEyNDYzLCJrdWthdGFrYW5haGFsZndpZHRoIiw2NTQwMCwia3ZzcXVhcmUiLDEzMjQwLCJrd3NxdWFyZSIsMTMyNDYsImwiLDEwOCwibGFiZW5nYWxpIiwyNDgyLCJsYWN1dGUiLDMxNCwibGFkZXZhIiwyMzU0LCJsYWd1amFyYXRpIiwyNzM4LCJsYWd1cm11a2hpIiwyNjEwLCJsYWtraGFuZ3lhb3RoYWkiLDM2NTMsImxhbWFsZWZmaW5hbGFyYWJpYyIsNjUyNzYsImxhbWFsZWZoYW16YWFib3ZlZmluYWxhcmFiaWMiLDY1MjcyLCJsYW1hbGVmaGFtemFhYm92ZWlzb2xhdGVkYXJhYmljIiw2NTI3MSwibGFtYWxlZmhhbXphYmVsb3dmaW5hbGFyYWJpYyIsNjUyNzQsImxhbWFsZWZoYW16YWJlbG93aXNvbGF0ZWRhcmFiaWMiLDY1MjczLCJsYW1hbGVmaXNvbGF0ZWRhcmFiaWMiLDY1Mjc1LCJsYW1hbGVmbWFkZGFhYm92ZWZpbmFsYXJhYmljIiw2NTI3MCwibGFtYWxlZm1hZGRhYWJvdmVpc29sYXRlZGFyYWJpYyIsNjUyNjksImxhbWFyYWJpYyIsMTYwNCwibGFtYmRhIiw5NTUsImxhbWJkYXN0cm9rZSIsNDExLCJsYW1lZCIsMTUwMCwibGFtZWRkYWdlc2giLDY0MzE2LCJsYW1lZGRhZ2VzaGhlYnJldyIsNjQzMTYsImxhbWVkaGVicmV3IiwxNTAwLCJsYW1maW5hbGFyYWJpYyIsNjUyNDYsImxhbWhhaGluaXRpYWxhcmFiaWMiLDY0NzE0LCJsYW1pbml0aWFsYXJhYmljIiw2NTI0NywibGFtamVlbWluaXRpYWxhcmFiaWMiLDY0NzEzLCJsYW1raGFoaW5pdGlhbGFyYWJpYyIsNjQ3MTUsImxhbWxhbWhlaGlzb2xhdGVkYXJhYmljIiw2NTAxMCwibGFtbWVkaWFsYXJhYmljIiw2NTI0OCwibGFtbWVlbWhhaGluaXRpYWxhcmFiaWMiLDY0OTA0LCJsYW1tZWVtaW5pdGlhbGFyYWJpYyIsNjQ3MTYsImxhcmdlY2lyY2xlIiw5NzExLCJsYmFyIiw0MTAsImxiZWx0Iiw2MjAsImxib3BvbW9mbyIsMTI1NTYsImxjYXJvbiIsMzE4LCJsY2VkaWxsYSIsMzE2LCJsY2lyY2xlIiw5NDM1LCJsY2lyY3VtZmxleGJlbG93Iiw3NzQxLCJsY29tbWFhY2NlbnQiLDMxNiwibGRvdCIsMzIwLCJsZG90YWNjZW50IiwzMjAsImxkb3RiZWxvdyIsNzczNSwibGRvdGJlbG93bWFjcm9uIiw3NzM3LCJsZWZ0YW5nbGVhYm92ZWNtYiIsNzk0LCJsZWZ0dGFja2JlbG93Y21iIiw3OTIsImxlc3MiLDYwLCJsZXNzZXF1YWwiLDg4MDQsImxlc3NlcXVhbG9yZ3JlYXRlciIsODkyMiwibGVzc21vbm9zcGFjZSIsNjUzMDgsImxlc3NvcmVxdWl2YWxlbnQiLDg4MTgsImxlc3NvcmdyZWF0ZXIiLDg4MjIsImxlc3NvdmVyZXF1YWwiLDg4MDYsImxlc3NzbWFsbCIsNjUxMjQsImxlemgiLDYyMiwibGZibG9jayIsOTYxMiwibGhvb2tyZXRyb2ZsZXgiLDYyMSwibGlyYSIsODM1NiwibGl3bmFybWVuaWFuIiwxMzg4LCJsaiIsNDU3LCJsamVjeXJpbGxpYyIsMTExMywibGwiLDYzMTY4LCJsbGFkZXZhIiwyMzU1LCJsbGFndWphcmF0aSIsMjczOSwibGxpbmViZWxvdyIsNzczOSwibGxsYWRldmEiLDIzNTYsImxsdm9jYWxpY2JlbmdhbGkiLDI1MjksImxsdm9jYWxpY2RldmEiLDI0MDEsImxsdm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGkiLDI1MzEsImxsdm9jYWxpY3Zvd2Vsc2lnbmRldmEiLDI0MDMsImxtaWRkbGV0aWxkZSIsNjE5LCJsbW9ub3NwYWNlIiw2NTM1NiwibG1zcXVhcmUiLDEzMjY0LCJsb2NodWxhdGhhaSIsMzYyOCwibG9naWNhbGFuZCIsODc0MywibG9naWNhbG5vdCIsMTcyLCJsb2dpY2Fsbm90cmV2ZXJzZWQiLDg5NzYsImxvZ2ljYWxvciIsODc0NCwibG9saW5ndGhhaSIsMzYyMSwibG9uZ3MiLDM4MywibG93bGluZWNlbnRlcmxpbmUiLDY1MTAyLCJsb3dsaW5lY21iIiw4MTgsImxvd2xpbmVkYXNoZWQiLDY1MTAxLCJsb3plbmdlIiw5Njc0LCJscGFyZW4iLDkzODMsImxzbGFzaCIsMzIyLCJsc3F1YXJlIiw4NDY3LCJsc3VwZXJpb3IiLDYzMjE0LCJsdHNoYWRlIiw5NjE3LCJsdXRoYWkiLDM2MjIsImx2b2NhbGljYmVuZ2FsaSIsMjQ0NCwibHZvY2FsaWNkZXZhIiwyMzE2LCJsdm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGkiLDI1MzAsImx2b2NhbGljdm93ZWxzaWduZGV2YSIsMjQwMiwibHhzcXVhcmUiLDEzMjY3LCJtIiwxMDksIm1hYmVuZ2FsaSIsMjQ3OCwibWFjcm9uIiwxNzUsIm1hY3JvbmJlbG93Y21iIiw4MTcsIm1hY3JvbmNtYiIsNzcyLCJtYWNyb25sb3dtb2QiLDcxNywibWFjcm9ubW9ub3NwYWNlIiw2NTUwNywibWFjdXRlIiw3NzQzLCJtYWRldmEiLDIzNTAsIm1hZ3VqYXJhdGkiLDI3MzQsIm1hZ3VybXVraGkiLDI2MDYsIm1haGFwYWtoaGVicmV3IiwxNDQ0LCJtYWhhcGFraGxlZnRoZWJyZXciLDE0NDQsIm1haGlyYWdhbmEiLDEyNDE0LCJtYWljaGF0dGF3YWxvd2xlZnR0aGFpIiw2MzYzNywibWFpY2hhdHRhd2Fsb3dyaWdodHRoYWkiLDYzNjM2LCJtYWljaGF0dGF3YXRoYWkiLDM2NTksIm1haWNoYXR0YXdhdXBwZXJsZWZ0dGhhaSIsNjM2MzUsIm1haWVrbG93bGVmdHRoYWkiLDYzNjI4LCJtYWlla2xvd3JpZ2h0dGhhaSIsNjM2MjcsIm1haWVrdGhhaSIsMzY1NiwibWFpZWt1cHBlcmxlZnR0aGFpIiw2MzYyNiwibWFpaGFuYWthdGxlZnR0aGFpIiw2MzYyMCwibWFpaGFuYWthdHRoYWkiLDM2MzMsIm1haXRhaWtodWxlZnR0aGFpIiw2MzYyNSwibWFpdGFpa2h1dGhhaSIsMzY1NSwibWFpdGhvbG93bGVmdHRoYWkiLDYzNjMxLCJtYWl0aG9sb3dyaWdodHRoYWkiLDYzNjMwLCJtYWl0aG90aGFpIiwzNjU3LCJtYWl0aG91cHBlcmxlZnR0aGFpIiw2MzYyOSwibWFpdHJpbG93bGVmdHRoYWkiLDYzNjM0LCJtYWl0cmlsb3dyaWdodHRoYWkiLDYzNjMzLCJtYWl0cml0aGFpIiwzNjU4LCJtYWl0cml1cHBlcmxlZnR0aGFpIiw2MzYzMiwibWFpeWFtb2t0aGFpIiwzNjU0LCJtYWthdGFrYW5hIiwxMjUxMCwibWFrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MjMsIm1hbGUiLDk3OTQsIm1hbnN5b25zcXVhcmUiLDEzMTI3LCJtYXFhZmhlYnJldyIsMTQ3MCwibWFycyIsOTc5NCwibWFzb3JhY2lyY2xlaGVicmV3IiwxNDU1LCJtYXNxdWFyZSIsMTMxODcsIm1ib3BvbW9mbyIsMTI1NTEsIm1ic3F1YXJlIiwxMzI2OCwibWNpcmNsZSIsOTQzNiwibWN1YmVkc3F1YXJlIiwxMzIyMSwibWRvdGFjY2VudCIsNzc0NSwibWRvdGJlbG93Iiw3NzQ3LCJtZWVtYXJhYmljIiwxNjA1LCJtZWVtZmluYWxhcmFiaWMiLDY1MjUwLCJtZWVtaW5pdGlhbGFyYWJpYyIsNjUyNTEsIm1lZW1tZWRpYWxhcmFiaWMiLDY1MjUyLCJtZWVtbWVlbWluaXRpYWxhcmFiaWMiLDY0NzIxLCJtZWVtbWVlbWlzb2xhdGVkYXJhYmljIiw2NDU4NCwibWVldG9ydXNxdWFyZSIsMTMxMzMsIm1laGlyYWdhbmEiLDEyNDE3LCJtZWl6aWVyYXNxdWFyZSIsMTMxODIsIm1la2F0YWthbmEiLDEyNTEzLCJtZWthdGFrYW5haGFsZndpZHRoIiw2NTQyNiwibWVtIiwxNTAyLCJtZW1kYWdlc2giLDY0MzE4LCJtZW1kYWdlc2hoZWJyZXciLDY0MzE4LCJtZW1oZWJyZXciLDE1MDIsIm1lbmFybWVuaWFuIiwxMzk2LCJtZXJraGFoZWJyZXciLDE0NDUsIm1lcmtoYWtlZnVsYWhlYnJldyIsMTQ0NiwibWVya2hha2VmdWxhbGVmdGhlYnJldyIsMTQ0NiwibWVya2hhbGVmdGhlYnJldyIsMTQ0NSwibWhvb2siLDYyNSwibWh6c3F1YXJlIiwxMzIwMiwibWlkZGxlZG90a2F0YWthbmFoYWxmd2lkdGgiLDY1MzgxLCJtaWRkb3QiLDE4MywibWlldW1hY2lyY2xla29yZWFuIiwxMjkxNCwibWlldW1hcGFyZW5rb3JlYW4iLDEyODE4LCJtaWV1bWNpcmNsZWtvcmVhbiIsMTI5MDAsIm1pZXVta29yZWFuIiwxMjYwOSwibWlldW1wYW5zaW9za29yZWFuIiwxMjY1NiwibWlldW1wYXJlbmtvcmVhbiIsMTI4MDQsIm1pZXVtcGlldXBrb3JlYW4iLDEyNjU0LCJtaWV1bXNpb3Nrb3JlYW4iLDEyNjU1LCJtaWhpcmFnYW5hIiwxMjQxNSwibWlrYXRha2FuYSIsMTI1MTEsIm1pa2F0YWthbmFoYWxmd2lkdGgiLDY1NDI0LCJtaW51cyIsODcyMiwibWludXNiZWxvd2NtYiIsODAwLCJtaW51c2NpcmNsZSIsODg1NCwibWludXNtb2QiLDcyNywibWludXNwbHVzIiw4NzIzLCJtaW51dGUiLDgyNDIsIm1pcmliYWFydXNxdWFyZSIsMTMxMzAsIm1pcmlzcXVhcmUiLDEzMTI5LCJtbG9uZ2xlZ3R1cm5lZCIsNjI0LCJtbHNxdWFyZSIsMTMyMDYsIm1tY3ViZWRzcXVhcmUiLDEzMjE5LCJtbW9ub3NwYWNlIiw2NTM1NywibW1zcXVhcmVkc3F1YXJlIiwxMzIxNSwibW9oaXJhZ2FuYSIsMTI0MTgsIm1vaG1zcXVhcmUiLDEzMjQ5LCJtb2thdGFrYW5hIiwxMjUxNCwibW9rYXRha2FuYWhhbGZ3aWR0aCIsNjU0MjcsIm1vbHNxdWFyZSIsMTMyNzAsIm1vbWF0aGFpIiwzNjE3LCJtb3ZlcnNzcXVhcmUiLDEzMjIzLCJtb3ZlcnNzcXVhcmVkc3F1YXJlIiwxMzIyNCwibXBhcmVuIiw5Mzg0LCJtcGFzcXVhcmUiLDEzMjI3LCJtc3NxdWFyZSIsMTMyMzUsIm1zdXBlcmlvciIsNjMyMTUsIm10dXJuZWQiLDYyMywibXUiLDE4MSwibXUxIiwxODEsIm11YXNxdWFyZSIsMTMxODYsIm11Y2hncmVhdGVyIiw4ODExLCJtdWNobGVzcyIsODgxMCwibXVmc3F1YXJlIiwxMzE5NiwibXVncmVlayIsOTU2LCJtdWdzcXVhcmUiLDEzMTk3LCJtdWhpcmFnYW5hIiwxMjQxNiwibXVrYXRha2FuYSIsMTI1MTIsIm11a2F0YWthbmFoYWxmd2lkdGgiLDY1NDI1LCJtdWxzcXVhcmUiLDEzMjA1LCJtdWx0aXBseSIsMjE1LCJtdW1zcXVhcmUiLDEzMjExLCJtdW5haGhlYnJldyIsMTQ0MywibXVuYWhsZWZ0aGVicmV3IiwxNDQzLCJtdXNpY2Fsbm90ZSIsOTgzNCwibXVzaWNhbG5vdGVkYmwiLDk4MzUsIm11c2ljZmxhdHNpZ24iLDk4MzcsIm11c2ljc2hhcnBzaWduIiw5ODM5LCJtdXNzcXVhcmUiLDEzMjM0LCJtdXZzcXVhcmUiLDEzMjM4LCJtdXdzcXVhcmUiLDEzMjQ0LCJtdm1lZ2FzcXVhcmUiLDEzMjQxLCJtdnNxdWFyZSIsMTMyMzksIm13bWVnYXNxdWFyZSIsMTMyNDcsIm13c3F1YXJlIiwxMzI0NSwibiIsMTEwLCJuYWJlbmdhbGkiLDI0NzIsIm5hYmxhIiw4NzExLCJuYWN1dGUiLDMyNCwibmFkZXZhIiwyMzQ0LCJuYWd1amFyYXRpIiwyNzI4LCJuYWd1cm11a2hpIiwyNjAwLCJuYWhpcmFnYW5hIiwxMjM5NCwibmFrYXRha2FuYSIsMTI0OTAsIm5ha2F0YWthbmFoYWxmd2lkdGgiLDY1NDEzLCJuYXBvc3Ryb3BoZSIsMzI5LCJuYXNxdWFyZSIsMTMxODUsIm5ib3BvbW9mbyIsMTI1NTUsIm5ic3BhY2UiLDE2MCwibmNhcm9uIiwzMjgsIm5jZWRpbGxhIiwzMjYsIm5jaXJjbGUiLDk0MzcsIm5jaXJjdW1mbGV4YmVsb3ciLDc3NTUsIm5jb21tYWFjY2VudCIsMzI2LCJuZG90YWNjZW50Iiw3NzQ5LCJuZG90YmVsb3ciLDc3NTEsIm5laGlyYWdhbmEiLDEyMzk3LCJuZWthdGFrYW5hIiwxMjQ5MywibmVrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MTYsIm5ld3NoZXFlbHNpZ24iLDgzNjIsIm5mc3F1YXJlIiwxMzE5NSwibmdhYmVuZ2FsaSIsMjQ1NywibmdhZGV2YSIsMjMyOSwibmdhZ3VqYXJhdGkiLDI3MTMsIm5nYWd1cm11a2hpIiwyNTg1LCJuZ29uZ3V0aGFpIiwzNTkxLCJuaGlyYWdhbmEiLDEyNDM1LCJuaG9va2xlZnQiLDYyNiwibmhvb2tyZXRyb2ZsZXgiLDYyNywibmlldW5hY2lyY2xla29yZWFuIiwxMjkxMSwibmlldW5hcGFyZW5rb3JlYW4iLDEyODE1LCJuaWV1bmNpZXVja29yZWFuIiwxMjU5NywibmlldW5jaXJjbGVrb3JlYW4iLDEyODk3LCJuaWV1bmhpZXVoa29yZWFuIiwxMjU5OCwibmlldW5rb3JlYW4iLDEyNTk2LCJuaWV1bnBhbnNpb3Nrb3JlYW4iLDEyNjQ4LCJuaWV1bnBhcmVua29yZWFuIiwxMjgwMSwibmlldW5zaW9za29yZWFuIiwxMjY0NywibmlldW50aWtldXRrb3JlYW4iLDEyNjQ2LCJuaWhpcmFnYW5hIiwxMjM5NSwibmlrYXRha2FuYSIsMTI0OTEsIm5pa2F0YWthbmFoYWxmd2lkdGgiLDY1NDE0LCJuaWtoYWhpdGxlZnR0aGFpIiw2MzY0MSwibmlraGFoaXR0aGFpIiwzNjYxLCJuaW5lIiw1NywibmluZWFyYWJpYyIsMTY0MSwibmluZWJlbmdhbGkiLDI1NDMsIm5pbmVjaXJjbGUiLDkzMjAsIm5pbmVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmIiwxMDEzMCwibmluZWRldmEiLDI0MTUsIm5pbmVndWphcmF0aSIsMjc5OSwibmluZWd1cm11a2hpIiwyNjcxLCJuaW5laGFja2FyYWJpYyIsMTY0MSwibmluZWhhbmd6aG91IiwxMjMyOSwibmluZWlkZW9ncmFwaGljcGFyZW4iLDEyODQwLCJuaW5laW5mZXJpb3IiLDgzMjksIm5pbmVtb25vc3BhY2UiLDY1MzA1LCJuaW5lb2xkc3R5bGUiLDYzMjg5LCJuaW5lcGFyZW4iLDkzNDAsIm5pbmVwZXJpb2QiLDkzNjAsIm5pbmVwZXJzaWFuIiwxNzg1LCJuaW5lcm9tYW4iLDg1NjgsIm5pbmVzdXBlcmlvciIsODMxMywibmluZXRlZW5jaXJjbGUiLDkzMzAsIm5pbmV0ZWVucGFyZW4iLDkzNTAsIm5pbmV0ZWVucGVyaW9kIiw5MzcwLCJuaW5ldGhhaSIsMzY3MywibmoiLDQ2MCwibmplY3lyaWxsaWMiLDExMTQsIm5rYXRha2FuYSIsMTI1MzEsIm5rYXRha2FuYWhhbGZ3aWR0aCIsNjU0MzcsIm5sZWdyaWdodGxvbmciLDQxNCwibmxpbmViZWxvdyIsNzc1Mywibm1vbm9zcGFjZSIsNjUzNTgsIm5tc3F1YXJlIiwxMzIxMCwibm5hYmVuZ2FsaSIsMjQ2Nywibm5hZGV2YSIsMjMzOSwibm5hZ3VqYXJhdGkiLDI3MjMsIm5uYWd1cm11a2hpIiwyNTk1LCJubm5hZGV2YSIsMjM0NSwibm9oaXJhZ2FuYSIsMTIzOTgsIm5va2F0YWthbmEiLDEyNDk0LCJub2thdGFrYW5haGFsZndpZHRoIiw2NTQxNywibm9uYnJlYWtpbmdzcGFjZSIsMTYwLCJub25lbnRoYWkiLDM2MDMsIm5vbnV0aGFpIiwzNjA5LCJub29uYXJhYmljIiwxNjA2LCJub29uZmluYWxhcmFiaWMiLDY1MjU0LCJub29uZ2h1bm5hYXJhYmljIiwxNzIyLCJub29uZ2h1bm5hZmluYWxhcmFiaWMiLDY0NDE1LCJub29uaW5pdGlhbGFyYWJpYyIsNjUyNTUsIm5vb25qZWVtaW5pdGlhbGFyYWJpYyIsNjQ3MjIsIm5vb25qZWVtaXNvbGF0ZWRhcmFiaWMiLDY0NTg3LCJub29ubWVkaWFsYXJhYmljIiw2NTI1Niwibm9vbm1lZW1pbml0aWFsYXJhYmljIiw2NDcyNSwibm9vbm1lZW1pc29sYXRlZGFyYWJpYyIsNjQ1OTAsIm5vb25ub29uZmluYWxhcmFiaWMiLDY0NjUzLCJub3Rjb250YWlucyIsODcxNiwibm90ZWxlbWVudCIsODcxMywibm90ZWxlbWVudG9mIiw4NzEzLCJub3RlcXVhbCIsODgwMCwibm90Z3JlYXRlciIsODgxNSwibm90Z3JlYXRlcm5vcmVxdWFsIiw4ODE3LCJub3RncmVhdGVybm9ybGVzcyIsODgyNSwibm90aWRlbnRpY2FsIiw4ODAyLCJub3RsZXNzIiw4ODE0LCJub3RsZXNzbm9yZXF1YWwiLDg4MTYsIm5vdHBhcmFsbGVsIiw4NzQyLCJub3RwcmVjZWRlcyIsODgzMiwibm90c3Vic2V0Iiw4ODM2LCJub3RzdWNjZWVkcyIsODgzMywibm90c3VwZXJzZXQiLDg4MzcsIm5vd2FybWVuaWFuIiwxMzk4LCJucGFyZW4iLDkzODUsIm5zc3F1YXJlIiwxMzIzMywibnN1cGVyaW9yIiw4MzE5LCJudGlsZGUiLDI0MSwibnUiLDk1NywibnVoaXJhZ2FuYSIsMTIzOTYsIm51a2F0YWthbmEiLDEyNDkyLCJudWthdGFrYW5haGFsZndpZHRoIiw2NTQxNSwibnVrdGFiZW5nYWxpIiwyNDkyLCJudWt0YWRldmEiLDIzNjQsIm51a3RhZ3VqYXJhdGkiLDI3NDgsIm51a3RhZ3VybXVraGkiLDI2MjAsIm51bWJlcnNpZ24iLDM1LCJudW1iZXJzaWdubW9ub3NwYWNlIiw2NTI4MywibnVtYmVyc2lnbnNtYWxsIiw2NTExOSwibnVtZXJhbHNpZ25ncmVlayIsODg0LCJudW1lcmFsc2lnbmxvd2VyZ3JlZWsiLDg4NSwibnVtZXJvIiw4NDcwLCJudW4iLDE1MDQsIm51bmRhZ2VzaCIsNjQzMjAsIm51bmRhZ2VzaGhlYnJldyIsNjQzMjAsIm51bmhlYnJldyIsMTUwNCwibnZzcXVhcmUiLDEzMjM3LCJud3NxdWFyZSIsMTMyNDMsIm55YWJlbmdhbGkiLDI0NjIsIm55YWRldmEiLDIzMzQsIm55YWd1amFyYXRpIiwyNzE4LCJueWFndXJtdWtoaSIsMjU5MCwibyIsMTExLCJvYWN1dGUiLDI0Mywib2FuZ3RoYWkiLDM2MjksIm9iYXJyZWQiLDYyOSwib2JhcnJlZGN5cmlsbGljIiwxMjU3LCJvYmFycmVkZGllcmVzaXNjeXJpbGxpYyIsMTI1OSwib2JlbmdhbGkiLDI0NTEsIm9ib3BvbW9mbyIsMTI1NzEsIm9icmV2ZSIsMzM1LCJvY2FuZHJhZGV2YSIsMjMyMSwib2NhbmRyYWd1amFyYXRpIiwyNzA1LCJvY2FuZHJhdm93ZWxzaWduZGV2YSIsMjM3Nywib2NhbmRyYXZvd2Vsc2lnbmd1amFyYXRpIiwyNzYxLCJvY2Fyb24iLDQ2Niwib2NpcmNsZSIsOTQzOCwib2NpcmN1bWZsZXgiLDI0NCwib2NpcmN1bWZsZXhhY3V0ZSIsNzg4OSwib2NpcmN1bWZsZXhkb3RiZWxvdyIsNzg5Nywib2NpcmN1bWZsZXhncmF2ZSIsNzg5MSwib2NpcmN1bWZsZXhob29rYWJvdmUiLDc4OTMsIm9jaXJjdW1mbGV4dGlsZGUiLDc4OTUsIm9jeXJpbGxpYyIsMTA4Niwib2RibGFjdXRlIiwzMzcsIm9kYmxncmF2ZSIsNTI1LCJvZGV2YSIsMjMyMywib2RpZXJlc2lzIiwyNDYsIm9kaWVyZXNpc2N5cmlsbGljIiwxMjU1LCJvZG90YmVsb3ciLDc4ODUsIm9lIiwzMzksIm9la29yZWFuIiwxMjYzNCwib2dvbmVrIiw3MzEsIm9nb25la2NtYiIsODA4LCJvZ3JhdmUiLDI0Miwib2d1amFyYXRpIiwyNzA3LCJvaGFybWVuaWFuIiwxNDEzLCJvaGlyYWdhbmEiLDEyMzYyLCJvaG9va2Fib3ZlIiw3ODg3LCJvaG9ybiIsNDE3LCJvaG9ybmFjdXRlIiw3ODk5LCJvaG9ybmRvdGJlbG93Iiw3OTA3LCJvaG9ybmdyYXZlIiw3OTAxLCJvaG9ybmhvb2thYm92ZSIsNzkwMywib2hvcm50aWxkZSIsNzkwNSwib2h1bmdhcnVtbGF1dCIsMzM3LCJvaSIsNDE5LCJvaW52ZXJ0ZWRicmV2ZSIsNTI3LCJva2F0YWthbmEiLDEyNDU4LCJva2F0YWthbmFoYWxmd2lkdGgiLDY1Mzk3LCJva29yZWFuIiwxMjYzMSwib2xlaGVicmV3IiwxNDUxLCJvbWFjcm9uIiwzMzMsIm9tYWNyb25hY3V0ZSIsNzc2Mywib21hY3JvbmdyYXZlIiw3NzYxLCJvbWRldmEiLDIzODQsIm9tZWdhIiw5NjksIm9tZWdhMSIsOTgyLCJvbWVnYWN5cmlsbGljIiwxMTIxLCJvbWVnYWxhdGluY2xvc2VkIiw2MzEsIm9tZWdhcm91bmRjeXJpbGxpYyIsMTE0Nywib21lZ2F0aXRsb2N5cmlsbGljIiwxMTQ5LCJvbWVnYXRvbm9zIiw5NzQsIm9tZ3VqYXJhdGkiLDI3NjgsIm9taWNyb24iLDk1OSwib21pY3JvbnRvbm9zIiw5NzIsIm9tb25vc3BhY2UiLDY1MzU5LCJvbmUiLDQ5LCJvbmVhcmFiaWMiLDE2MzMsIm9uZWJlbmdhbGkiLDI1MzUsIm9uZWNpcmNsZSIsOTMxMiwib25lY2lyY2xlaW52ZXJzZXNhbnNzZXJpZiIsMTAxMjIsIm9uZWRldmEiLDI0MDcsIm9uZWRvdGVubGVhZGVyIiw4MjI4LCJvbmVlaWdodGgiLDg1MzksIm9uZWZpdHRlZCIsNjMxOTYsIm9uZWd1amFyYXRpIiwyNzkxLCJvbmVndXJtdWtoaSIsMjY2Mywib25laGFja2FyYWJpYyIsMTYzMywib25laGFsZiIsMTg5LCJvbmVoYW5nemhvdSIsMTIzMjEsIm9uZWlkZW9ncmFwaGljcGFyZW4iLDEyODMyLCJvbmVpbmZlcmlvciIsODMyMSwib25lbW9ub3NwYWNlIiw2NTI5Nywib25lbnVtZXJhdG9yYmVuZ2FsaSIsMjU0OCwib25lb2xkc3R5bGUiLDYzMjgxLCJvbmVwYXJlbiIsOTMzMiwib25lcGVyaW9kIiw5MzUyLCJvbmVwZXJzaWFuIiwxNzc3LCJvbmVxdWFydGVyIiwxODgsIm9uZXJvbWFuIiw4NTYwLCJvbmVzdXBlcmlvciIsMTg1LCJvbmV0aGFpIiwzNjY1LCJvbmV0aGlyZCIsODUzMSwib29nb25layIsNDkxLCJvb2dvbmVrbWFjcm9uIiw0OTMsIm9vZ3VybXVraGkiLDI1NzksIm9vbWF0cmFndXJtdWtoaSIsMjYzNSwib29wZW4iLDU5Niwib3BhcmVuIiw5Mzg2LCJvcGVuYnVsbGV0Iiw5NzAyLCJvcHRpb24iLDg5OTcsIm9yZGZlbWluaW5lIiwxNzAsIm9yZG1hc2N1bGluZSIsMTg2LCJvcnRob2dvbmFsIiw4NzM1LCJvc2hvcnRkZXZhIiwyMzIyLCJvc2hvcnR2b3dlbHNpZ25kZXZhIiwyMzc4LCJvc2xhc2giLDI0OCwib3NsYXNoYWN1dGUiLDUxMSwib3NtYWxsaGlyYWdhbmEiLDEyMzYxLCJvc21hbGxrYXRha2FuYSIsMTI0NTcsIm9zbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4Nywib3N0cm9rZWFjdXRlIiw1MTEsIm9zdXBlcmlvciIsNjMyMTYsIm90Y3lyaWxsaWMiLDExNTEsIm90aWxkZSIsMjQ1LCJvdGlsZGVhY3V0ZSIsNzc1Nywib3RpbGRlZGllcmVzaXMiLDc3NTksIm91Ym9wb21vZm8iLDEyNTc3LCJvdmVybGluZSIsODI1NCwib3ZlcmxpbmVjZW50ZXJsaW5lIiw2NTA5OCwib3ZlcmxpbmVjbWIiLDc3Mywib3ZlcmxpbmVkYXNoZWQiLDY1MDk3LCJvdmVybGluZWRibHdhdnkiLDY1MTAwLCJvdmVybGluZXdhdnkiLDY1MDk5LCJvdmVyc2NvcmUiLDE3NSwib3Zvd2Vsc2lnbmJlbmdhbGkiLDI1MDcsIm92b3dlbHNpZ25kZXZhIiwyMzc5LCJvdm93ZWxzaWduZ3VqYXJhdGkiLDI3NjMsInAiLDExMiwicGFhbXBzc3F1YXJlIiwxMzE4NCwicGFhc2VudG9zcXVhcmUiLDEzMDk5LCJwYWJlbmdhbGkiLDI0NzQsInBhY3V0ZSIsNzc2NSwicGFkZXZhIiwyMzQ2LCJwYWdlZG93biIsODY3MSwicGFnZXVwIiw4NjcwLCJwYWd1amFyYXRpIiwyNzMwLCJwYWd1cm11a2hpIiwyNjAyLCJwYWhpcmFnYW5hIiwxMjQwMSwicGFpeWFubm9pdGhhaSIsMzYzMSwicGFrYXRha2FuYSIsMTI0OTcsInBhbGF0YWxpemF0aW9uY3lyaWxsaWNjbWIiLDExNTYsInBhbG9jaGthY3lyaWxsaWMiLDEyMTYsInBhbnNpb3Nrb3JlYW4iLDEyNjcxLCJwYXJhZ3JhcGgiLDE4MiwicGFyYWxsZWwiLDg3NDEsInBhcmVubGVmdCIsNDAsInBhcmVubGVmdGFsdG9uZWFyYWJpYyIsNjQ4MzAsInBhcmVubGVmdGJ0Iiw2MzcyNSwicGFyZW5sZWZ0ZXgiLDYzNzI0LCJwYXJlbmxlZnRpbmZlcmlvciIsODMzMywicGFyZW5sZWZ0bW9ub3NwYWNlIiw2NTI4OCwicGFyZW5sZWZ0c21hbGwiLDY1MTEzLCJwYXJlbmxlZnRzdXBlcmlvciIsODMxNywicGFyZW5sZWZ0dHAiLDYzNzIzLCJwYXJlbmxlZnR2ZXJ0aWNhbCIsNjUwNzcsInBhcmVucmlnaHQiLDQxLCJwYXJlbnJpZ2h0YWx0b25lYXJhYmljIiw2NDgzMSwicGFyZW5yaWdodGJ0Iiw2MzczNiwicGFyZW5yaWdodGV4Iiw2MzczNSwicGFyZW5yaWdodGluZmVyaW9yIiw4MzM0LCJwYXJlbnJpZ2h0bW9ub3NwYWNlIiw2NTI4OSwicGFyZW5yaWdodHNtYWxsIiw2NTExNCwicGFyZW5yaWdodHN1cGVyaW9yIiw4MzE4LCJwYXJlbnJpZ2h0dHAiLDYzNzM0LCJwYXJlbnJpZ2h0dmVydGljYWwiLDY1MDc4LCJwYXJ0aWFsZGlmZiIsODcwNiwicGFzZXFoZWJyZXciLDE0NzIsInBhc2h0YWhlYnJldyIsMTQzMywicGFzcXVhcmUiLDEzMjI1LCJwYXRhaCIsMTQ2MywicGF0YWgxMSIsMTQ2MywicGF0YWgxZCIsMTQ2MywicGF0YWgyYSIsMTQ2MywicGF0YWhoZWJyZXciLDE0NjMsInBhdGFobmFycm93aGVicmV3IiwxNDYzLCJwYXRhaHF1YXJ0ZXJoZWJyZXciLDE0NjMsInBhdGFod2lkZWhlYnJldyIsMTQ2MywicGF6ZXJoZWJyZXciLDE0NDEsInBib3BvbW9mbyIsMTI1NTAsInBjaXJjbGUiLDk0MzksInBkb3RhY2NlbnQiLDc3NjcsInBlIiwxNTA4LCJwZWN5cmlsbGljIiwxMDg3LCJwZWRhZ2VzaCIsNjQzMjQsInBlZGFnZXNoaGVicmV3Iiw2NDMyNCwicGVlemlzcXVhcmUiLDEzMTE1LCJwZWZpbmFsZGFnZXNoaGVicmV3Iiw2NDMyMywicGVoYXJhYmljIiwxNjYyLCJwZWhhcm1lbmlhbiIsMTQwMiwicGVoZWJyZXciLDE1MDgsInBlaGZpbmFsYXJhYmljIiw2NDM0MywicGVoaW5pdGlhbGFyYWJpYyIsNjQzNDQsInBlaGlyYWdhbmEiLDEyNDEwLCJwZWhtZWRpYWxhcmFiaWMiLDY0MzQ1LCJwZWthdGFrYW5hIiwxMjUwNiwicGVtaWRkbGVob29rY3lyaWxsaWMiLDExOTEsInBlcmFmZWhlYnJldyIsNjQzMzQsInBlcmNlbnQiLDM3LCJwZXJjZW50YXJhYmljIiwxNjQyLCJwZXJjZW50bW9ub3NwYWNlIiw2NTI4NSwicGVyY2VudHNtYWxsIiw2NTEzMCwicGVyaW9kIiw0NiwicGVyaW9kYXJtZW5pYW4iLDE0MTcsInBlcmlvZGNlbnRlcmVkIiwxODMsInBlcmlvZGhhbGZ3aWR0aCIsNjUzNzcsInBlcmlvZGluZmVyaW9yIiw2MzIwNywicGVyaW9kbW9ub3NwYWNlIiw2NTI5NCwicGVyaW9kc21hbGwiLDY1MTA2LCJwZXJpb2RzdXBlcmlvciIsNjMyMDgsInBlcmlzcG9tZW5pZ3JlZWtjbWIiLDgzNCwicGVycGVuZGljdWxhciIsODg2OSwicGVydGhvdXNhbmQiLDgyNDAsInBlc2V0YSIsODM1OSwicGZzcXVhcmUiLDEzMTk0LCJwaGFiZW5nYWxpIiwyNDc1LCJwaGFkZXZhIiwyMzQ3LCJwaGFndWphcmF0aSIsMjczMSwicGhhZ3VybXVraGkiLDI2MDMsInBoaSIsOTY2LCJwaGkxIiw5ODEsInBoaWV1cGhhY2lyY2xla29yZWFuIiwxMjkyMiwicGhpZXVwaGFwYXJlbmtvcmVhbiIsMTI4MjYsInBoaWV1cGhjaXJjbGVrb3JlYW4iLDEyOTA4LCJwaGlldXBoa29yZWFuIiwxMjYyMSwicGhpZXVwaHBhcmVua29yZWFuIiwxMjgxMiwicGhpbGF0aW4iLDYzMiwicGhpbnRodXRoYWkiLDM2NDIsInBoaXN5bWJvbGdyZWVrIiw5ODEsInBob29rIiw0MjEsInBob3BoYW50aGFpIiwzNjE0LCJwaG9waHVuZ3RoYWkiLDM2MTIsInBob3NhbXBoYW90aGFpIiwzNjE2LCJwaSIsOTYwLCJwaWV1cGFjaXJjbGVrb3JlYW4iLDEyOTE1LCJwaWV1cGFwYXJlbmtvcmVhbiIsMTI4MTksInBpZXVwY2lldWNrb3JlYW4iLDEyNjYyLCJwaWV1cGNpcmNsZWtvcmVhbiIsMTI5MDEsInBpZXVwa2l5ZW9ra29yZWFuIiwxMjY1OCwicGlldXBrb3JlYW4iLDEyNjEwLCJwaWV1cHBhcmVua29yZWFuIiwxMjgwNSwicGlldXBzaW9za2l5ZW9ra29yZWFuIiwxMjY2MCwicGlldXBzaW9za29yZWFuIiwxMjYxMiwicGlldXBzaW9zdGlrZXV0a29yZWFuIiwxMjY2MSwicGlldXB0aGlldXRoa29yZWFuIiwxMjY2MywicGlldXB0aWtldXRrb3JlYW4iLDEyNjU5LCJwaWhpcmFnYW5hIiwxMjQwNCwicGlrYXRha2FuYSIsMTI1MDAsInBpc3ltYm9sZ3JlZWsiLDk4MiwicGl3cmFybWVuaWFuIiwxNDExLCJwbHVzIiw0MywicGx1c2JlbG93Y21iIiw3OTksInBsdXNjaXJjbGUiLDg4NTMsInBsdXNtaW51cyIsMTc3LCJwbHVzbW9kIiw3MjYsInBsdXNtb25vc3BhY2UiLDY1MjkxLCJwbHVzc21hbGwiLDY1MTIyLCJwbHVzc3VwZXJpb3IiLDgzMTQsInBtb25vc3BhY2UiLDY1MzYwLCJwbXNxdWFyZSIsMTMyNzIsInBvaGlyYWdhbmEiLDEyNDEzLCJwb2ludGluZ2luZGV4ZG93bndoaXRlIiw5NzU5LCJwb2ludGluZ2luZGV4bGVmdHdoaXRlIiw5NzU2LCJwb2ludGluZ2luZGV4cmlnaHR3aGl0ZSIsOTc1OCwicG9pbnRpbmdpbmRleHVwd2hpdGUiLDk3NTcsInBva2F0YWthbmEiLDEyNTA5LCJwb3BsYXRoYWkiLDM2MTEsInBvc3RhbG1hcmsiLDEyMzA2LCJwb3N0YWxtYXJrZmFjZSIsMTIzMjAsInBwYXJlbiIsOTM4NywicHJlY2VkZXMiLDg4MjYsInByZXNjcmlwdGlvbiIsODQ3OCwicHJpbWVtb2QiLDY5NywicHJpbWVyZXZlcnNlZCIsODI0NSwicHJvZHVjdCIsODcxOSwicHJvamVjdGl2ZSIsODk2NSwicHJvbG9uZ2Vka2FuYSIsMTI1NDAsInByb3BlbGxvciIsODk4NCwicHJvcGVyc3Vic2V0Iiw4ODM0LCJwcm9wZXJzdXBlcnNldCIsODgzNSwicHJvcG9ydGlvbiIsODc1OSwicHJvcG9ydGlvbmFsIiw4NzMzLCJwc2kiLDk2OCwicHNpY3lyaWxsaWMiLDExMzcsInBzaWxpcG5ldW1hdGFjeXJpbGxpY2NtYiIsMTE1OCwicHNzcXVhcmUiLDEzMjMyLCJwdWhpcmFnYW5hIiwxMjQwNywicHVrYXRha2FuYSIsMTI1MDMsInB2c3F1YXJlIiwxMzIzNiwicHdzcXVhcmUiLDEzMjQyLCJxIiwxMTMsInFhZGV2YSIsMjM5MiwicWFkbWFoZWJyZXciLDE0NDgsInFhZmFyYWJpYyIsMTYwMiwicWFmZmluYWxhcmFiaWMiLDY1MjM4LCJxYWZpbml0aWFsYXJhYmljIiw2NTIzOSwicWFmbWVkaWFsYXJhYmljIiw2NTI0MCwicWFtYXRzIiwxNDY0LCJxYW1hdHMxMCIsMTQ2NCwicWFtYXRzMWEiLDE0NjQsInFhbWF0czFjIiwxNDY0LCJxYW1hdHMyNyIsMTQ2NCwicWFtYXRzMjkiLDE0NjQsInFhbWF0czMzIiwxNDY0LCJxYW1hdHNkZSIsMTQ2NCwicWFtYXRzaGVicmV3IiwxNDY0LCJxYW1hdHNuYXJyb3doZWJyZXciLDE0NjQsInFhbWF0c3FhdGFuaGVicmV3IiwxNDY0LCJxYW1hdHNxYXRhbm5hcnJvd2hlYnJldyIsMTQ2NCwicWFtYXRzcWF0YW5xdWFydGVyaGVicmV3IiwxNDY0LCJxYW1hdHNxYXRhbndpZGVoZWJyZXciLDE0NjQsInFhbWF0c3F1YXJ0ZXJoZWJyZXciLDE0NjQsInFhbWF0c3dpZGVoZWJyZXciLDE0NjQsInFhcm5leXBhcmFoZWJyZXciLDE0MzksInFib3BvbW9mbyIsMTI1NjEsInFjaXJjbGUiLDk0NDAsInFob29rIiw2NzIsInFtb25vc3BhY2UiLDY1MzYxLCJxb2YiLDE1MTEsInFvZmRhZ2VzaCIsNjQzMjcsInFvZmRhZ2VzaGhlYnJldyIsNjQzMjcsInFvZmhlYnJldyIsMTUxMSwicXBhcmVuIiw5Mzg4LCJxdWFydGVybm90ZSIsOTgzMywicXVidXRzIiwxNDY3LCJxdWJ1dHMxOCIsMTQ2NywicXVidXRzMjUiLDE0NjcsInF1YnV0czMxIiwxNDY3LCJxdWJ1dHNoZWJyZXciLDE0NjcsInF1YnV0c25hcnJvd2hlYnJldyIsMTQ2NywicXVidXRzcXVhcnRlcmhlYnJldyIsMTQ2NywicXVidXRzd2lkZWhlYnJldyIsMTQ2NywicXVlc3Rpb24iLDYzLCJxdWVzdGlvbmFyYWJpYyIsMTU2NywicXVlc3Rpb25hcm1lbmlhbiIsMTM3NCwicXVlc3Rpb25kb3duIiwxOTEsInF1ZXN0aW9uZG93bnNtYWxsIiw2MzQyMywicXVlc3Rpb25ncmVlayIsODk0LCJxdWVzdGlvbm1vbm9zcGFjZSIsNjUzMTEsInF1ZXN0aW9uc21hbGwiLDYzMjk1LCJxdW90ZWRibCIsMzQsInF1b3RlZGJsYmFzZSIsODIyMiwicXVvdGVkYmxsZWZ0Iiw4MjIwLCJxdW90ZWRibG1vbm9zcGFjZSIsNjUyODIsInF1b3RlZGJscHJpbWUiLDEyMzE4LCJxdW90ZWRibHByaW1lcmV2ZXJzZWQiLDEyMzE3LCJxdW90ZWRibHJpZ2h0Iiw4MjIxLCJxdW90ZWxlZnQiLDgyMTYsInF1b3RlbGVmdHJldmVyc2VkIiw4MjE5LCJxdW90ZXJldmVyc2VkIiw4MjE5LCJxdW90ZXJpZ2h0Iiw4MjE3LCJxdW90ZXJpZ2h0biIsMzI5LCJxdW90ZXNpbmdsYmFzZSIsODIxOCwicXVvdGVzaW5nbGUiLDM5LCJxdW90ZXNpbmdsZW1vbm9zcGFjZSIsNjUyODcsInIiLDExNCwicmFhcm1lbmlhbiIsMTQwNCwicmFiZW5nYWxpIiwyNDgwLCJyYWN1dGUiLDM0MSwicmFkZXZhIiwyMzUyLCJyYWRpY2FsIiw4NzMwLCJyYWRpY2FsZXgiLDYzNzE3LCJyYWRvdmVyc3NxdWFyZSIsMTMyMzAsInJhZG92ZXJzc3F1YXJlZHNxdWFyZSIsMTMyMzEsInJhZHNxdWFyZSIsMTMyMjksInJhZmUiLDE0NzEsInJhZmVoZWJyZXciLDE0NzEsInJhZ3VqYXJhdGkiLDI3MzYsInJhZ3VybXVraGkiLDI2MDgsInJhaGlyYWdhbmEiLDEyNDI1LCJyYWthdGFrYW5hIiwxMjUyMSwicmFrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MzEsInJhbG93ZXJkaWFnb25hbGJlbmdhbGkiLDI1NDUsInJhbWlkZGxlZGlhZ29uYWxiZW5nYWxpIiwyNTQ0LCJyYW1zaG9ybiIsNjEyLCJyYXRpbyIsODc1OCwicmJvcG9tb2ZvIiwxMjU2NiwicmNhcm9uIiwzNDUsInJjZWRpbGxhIiwzNDMsInJjaXJjbGUiLDk0NDEsInJjb21tYWFjY2VudCIsMzQzLCJyZGJsZ3JhdmUiLDUyOSwicmRvdGFjY2VudCIsNzc2OSwicmRvdGJlbG93Iiw3NzcxLCJyZG90YmVsb3dtYWNyb24iLDc3NzMsInJlZmVyZW5jZW1hcmsiLDgyNTEsInJlZmxleHN1YnNldCIsODgzOCwicmVmbGV4c3VwZXJzZXQiLDg4MzksInJlZ2lzdGVyZWQiLDE3NCwicmVnaXN0ZXJzYW5zIiw2MzcyMCwicmVnaXN0ZXJzZXJpZiIsNjMxOTQsInJlaGFyYWJpYyIsMTU4NSwicmVoYXJtZW5pYW4iLDE0MDgsInJlaGZpbmFsYXJhYmljIiw2NTE5OCwicmVoaXJhZ2FuYSIsMTI0MjgsInJla2F0YWthbmEiLDEyNTI0LCJyZWthdGFrYW5haGFsZndpZHRoIiw2NTQzNCwicmVzaCIsMTUxMiwicmVzaGRhZ2VzaGhlYnJldyIsNjQzMjgsInJlc2hoZWJyZXciLDE1MTIsInJldmVyc2VkdGlsZGUiLDg3NjUsInJldmlhaGVicmV3IiwxNDMxLCJyZXZpYW11Z3Jhc2hoZWJyZXciLDE0MzEsInJldmxvZ2ljYWxub3QiLDg5NzYsInJmaXNoaG9vayIsNjM4LCJyZmlzaGhvb2tyZXZlcnNlZCIsNjM5LCJyaGFiZW5nYWxpIiwyNTI1LCJyaGFkZXZhIiwyMzk3LCJyaG8iLDk2MSwicmhvb2siLDYzNywicmhvb2t0dXJuZWQiLDYzNSwicmhvb2t0dXJuZWRzdXBlcmlvciIsNjkzLCJyaG9zeW1ib2xncmVlayIsMTAwOSwicmhvdGljaG9va21vZCIsNzM0LCJyaWV1bGFjaXJjbGVrb3JlYW4iLDEyOTEzLCJyaWV1bGFwYXJlbmtvcmVhbiIsMTI4MTcsInJpZXVsY2lyY2xla29yZWFuIiwxMjg5OSwicmlldWxoaWV1aGtvcmVhbiIsMTI2MDgsInJpZXVsa2l5ZW9ra29yZWFuIiwxMjYwMiwicmlldWxraXllb2tzaW9za29yZWFuIiwxMjY0OSwicmlldWxrb3JlYW4iLDEyNjAxLCJyaWV1bG1pZXVta29yZWFuIiwxMjYwMywicmlldWxwYW5zaW9za29yZWFuIiwxMjY1MiwicmlldWxwYXJlbmtvcmVhbiIsMTI4MDMsInJpZXVscGhpZXVwaGtvcmVhbiIsMTI2MDcsInJpZXVscGlldXBrb3JlYW4iLDEyNjA0LCJyaWV1bHBpZXVwc2lvc2tvcmVhbiIsMTI2NTEsInJpZXVsc2lvc2tvcmVhbiIsMTI2MDUsInJpZXVsdGhpZXV0aGtvcmVhbiIsMTI2MDYsInJpZXVsdGlrZXV0a29yZWFuIiwxMjY1MCwicmlldWx5ZW9yaW5oaWV1aGtvcmVhbiIsMTI2NTMsInJpZ2h0YW5nbGUiLDg3MzUsInJpZ2h0dGFja2JlbG93Y21iIiw3OTMsInJpZ2h0dHJpYW5nbGUiLDg4OTUsInJpaGlyYWdhbmEiLDEyNDI2LCJyaWthdGFrYW5hIiwxMjUyMiwicmlrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MzIsInJpbmciLDczMCwicmluZ2JlbG93Y21iIiw4MDUsInJpbmdjbWIiLDc3OCwicmluZ2hhbGZsZWZ0Iiw3MDMsInJpbmdoYWxmbGVmdGFybWVuaWFuIiwxMzY5LCJyaW5naGFsZmxlZnRiZWxvd2NtYiIsNzk2LCJyaW5naGFsZmxlZnRjZW50ZXJlZCIsNzIzLCJyaW5naGFsZnJpZ2h0Iiw3MDIsInJpbmdoYWxmcmlnaHRiZWxvd2NtYiIsODI1LCJyaW5naGFsZnJpZ2h0Y2VudGVyZWQiLDcyMiwicmludmVydGVkYnJldmUiLDUzMSwicml0dG9ydXNxdWFyZSIsMTMxMzcsInJsaW5lYmVsb3ciLDc3NzUsInJsb25nbGVnIiw2MzYsInJsb25nbGVndHVybmVkIiw2MzQsInJtb25vc3BhY2UiLDY1MzYyLCJyb2hpcmFnYW5hIiwxMjQyOSwicm9rYXRha2FuYSIsMTI1MjUsInJva2F0YWthbmFoYWxmd2lkdGgiLDY1NDM1LCJyb3J1YXRoYWkiLDM2MTksInJwYXJlbiIsOTM4OSwicnJhYmVuZ2FsaSIsMjUyNCwicnJhZGV2YSIsMjM1MywicnJhZ3VybXVraGkiLDI2NTIsInJyZWhhcmFiaWMiLDE2ODEsInJyZWhmaW5hbGFyYWJpYyIsNjQzOTcsInJydm9jYWxpY2JlbmdhbGkiLDI1MjgsInJydm9jYWxpY2RldmEiLDI0MDAsInJydm9jYWxpY2d1amFyYXRpIiwyNzg0LCJycnZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpIiwyNTAwLCJycnZvY2FsaWN2b3dlbHNpZ25kZXZhIiwyMzcyLCJycnZvY2FsaWN2b3dlbHNpZ25ndWphcmF0aSIsMjc1NiwicnN1cGVyaW9yIiw2MzIxNywicnRibG9jayIsOTYxNiwicnR1cm5lZCIsNjMzLCJydHVybmVkc3VwZXJpb3IiLDY5MiwicnVoaXJhZ2FuYSIsMTI0MjcsInJ1a2F0YWthbmEiLDEyNTIzLCJydWthdGFrYW5haGFsZndpZHRoIiw2NTQzMywicnVwZWVtYXJrYmVuZ2FsaSIsMjU0NiwicnVwZWVzaWduYmVuZ2FsaSIsMjU0NywicnVwaWFoIiw2MzE5NywicnV0aGFpIiwzNjIwLCJydm9jYWxpY2JlbmdhbGkiLDI0NDMsInJ2b2NhbGljZGV2YSIsMjMxNSwicnZvY2FsaWNndWphcmF0aSIsMjY5OSwicnZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpIiwyNDk5LCJydm9jYWxpY3Zvd2Vsc2lnbmRldmEiLDIzNzEsInJ2b2NhbGljdm93ZWxzaWduZ3VqYXJhdGkiLDI3NTUsInMiLDExNSwic2FiZW5nYWxpIiwyNDg4LCJzYWN1dGUiLDM0Nywic2FjdXRlZG90YWNjZW50Iiw3NzgxLCJzYWRhcmFiaWMiLDE1ODksInNhZGV2YSIsMjM2MCwic2FkZmluYWxhcmFiaWMiLDY1MjEwLCJzYWRpbml0aWFsYXJhYmljIiw2NTIxMSwic2FkbWVkaWFsYXJhYmljIiw2NTIxMiwic2FndWphcmF0aSIsMjc0NCwic2FndXJtdWtoaSIsMjYxNiwic2FoaXJhZ2FuYSIsMTIzNzMsInNha2F0YWthbmEiLDEyNDY5LCJzYWthdGFrYW5haGFsZndpZHRoIiw2NTQwMywic2FsbGFsbGFob3VhbGF5aGV3YXNhbGxhbWFyYWJpYyIsNjUwMTgsInNhbWVraCIsMTUwNSwic2FtZWtoZGFnZXNoIiw2NDMyMSwic2FtZWtoZGFnZXNoaGVicmV3Iiw2NDMyMSwic2FtZWtoaGVicmV3IiwxNTA1LCJzYXJhYWF0aGFpIiwzNjM0LCJzYXJhYWV0aGFpIiwzNjQ5LCJzYXJhYWltYWltYWxhaXRoYWkiLDM2NTIsInNhcmFhaW1haW11YW50aGFpIiwzNjUxLCJzYXJhYW10aGFpIiwzNjM1LCJzYXJhYXRoYWkiLDM2MzIsInNhcmFldGhhaSIsMzY0OCwic2FyYWlpbGVmdHRoYWkiLDYzNjIyLCJzYXJhaWl0aGFpIiwzNjM3LCJzYXJhaWxlZnR0aGFpIiw2MzYyMSwic2FyYWl0aGFpIiwzNjM2LCJzYXJhb3RoYWkiLDM2NTAsInNhcmF1ZWVsZWZ0dGhhaSIsNjM2MjQsInNhcmF1ZWV0aGFpIiwzNjM5LCJzYXJhdWVsZWZ0dGhhaSIsNjM2MjMsInNhcmF1ZXRoYWkiLDM2MzgsInNhcmF1dGhhaSIsMzY0MCwic2FyYXV1dGhhaSIsMzY0MSwic2JvcG9tb2ZvIiwxMjU2OSwic2Nhcm9uIiwzNTMsInNjYXJvbmRvdGFjY2VudCIsNzc4Mywic2NlZGlsbGEiLDM1MSwic2Nod2EiLDYwMSwic2Nod2FjeXJpbGxpYyIsMTI0MSwic2Nod2FkaWVyZXNpc2N5cmlsbGljIiwxMjQzLCJzY2h3YWhvb2siLDYwMiwic2NpcmNsZSIsOTQ0Miwic2NpcmN1bWZsZXgiLDM0OSwic2NvbW1hYWNjZW50Iiw1MzcsInNkb3RhY2NlbnQiLDc3NzcsInNkb3RiZWxvdyIsNzc3OSwic2RvdGJlbG93ZG90YWNjZW50Iiw3Nzg1LCJzZWFndWxsYmVsb3djbWIiLDgyOCwic2Vjb25kIiw4MjQzLCJzZWNvbmR0b25lY2hpbmVzZSIsNzE0LCJzZWN0aW9uIiwxNjcsInNlZW5hcmFiaWMiLDE1ODcsInNlZW5maW5hbGFyYWJpYyIsNjUyMDIsInNlZW5pbml0aWFsYXJhYmljIiw2NTIwMywic2Vlbm1lZGlhbGFyYWJpYyIsNjUyMDQsInNlZ29sIiwxNDYyLCJzZWdvbDEzIiwxNDYyLCJzZWdvbDFmIiwxNDYyLCJzZWdvbDJjIiwxNDYyLCJzZWdvbGhlYnJldyIsMTQ2Miwic2Vnb2xuYXJyb3doZWJyZXciLDE0NjIsInNlZ29scXVhcnRlcmhlYnJldyIsMTQ2Miwic2Vnb2x0YWhlYnJldyIsMTQyNiwic2Vnb2x3aWRlaGVicmV3IiwxNDYyLCJzZWhhcm1lbmlhbiIsMTQwNSwic2VoaXJhZ2FuYSIsMTIzNzksInNla2F0YWthbmEiLDEyNDc1LCJzZWthdGFrYW5haGFsZndpZHRoIiw2NTQwNiwic2VtaWNvbG9uIiw1OSwic2VtaWNvbG9uYXJhYmljIiwxNTYzLCJzZW1pY29sb25tb25vc3BhY2UiLDY1MzA3LCJzZW1pY29sb25zbWFsbCIsNjUxMDgsInNlbWl2b2ljZWRtYXJra2FuYSIsMTI0NDQsInNlbWl2b2ljZWRtYXJra2FuYWhhbGZ3aWR0aCIsNjU0MzksInNlbnRpc3F1YXJlIiwxMzA5MCwic2VudG9zcXVhcmUiLDEzMDkxLCJzZXZlbiIsNTUsInNldmVuYXJhYmljIiwxNjM5LCJzZXZlbmJlbmdhbGkiLDI1NDEsInNldmVuY2lyY2xlIiw5MzE4LCJzZXZlbmNpcmNsZWludmVyc2VzYW5zc2VyaWYiLDEwMTI4LCJzZXZlbmRldmEiLDI0MTMsInNldmVuZWlnaHRocyIsODU0Miwic2V2ZW5ndWphcmF0aSIsMjc5Nywic2V2ZW5ndXJtdWtoaSIsMjY2OSwic2V2ZW5oYWNrYXJhYmljIiwxNjM5LCJzZXZlbmhhbmd6aG91IiwxMjMyNywic2V2ZW5pZGVvZ3JhcGhpY3BhcmVuIiwxMjgzOCwic2V2ZW5pbmZlcmlvciIsODMyNywic2V2ZW5tb25vc3BhY2UiLDY1MzAzLCJzZXZlbm9sZHN0eWxlIiw2MzI4Nywic2V2ZW5wYXJlbiIsOTMzOCwic2V2ZW5wZXJpb2QiLDkzNTgsInNldmVucGVyc2lhbiIsMTc4Mywic2V2ZW5yb21hbiIsODU2Niwic2V2ZW5zdXBlcmlvciIsODMxMSwic2V2ZW50ZWVuY2lyY2xlIiw5MzI4LCJzZXZlbnRlZW5wYXJlbiIsOTM0OCwic2V2ZW50ZWVucGVyaW9kIiw5MzY4LCJzZXZlbnRoYWkiLDM2NzEsInNmdGh5cGhlbiIsMTczLCJzaGFhcm1lbmlhbiIsMTM5OSwic2hhYmVuZ2FsaSIsMjQ4Niwic2hhY3lyaWxsaWMiLDEwOTYsInNoYWRkYWFyYWJpYyIsMTYxNywic2hhZGRhZGFtbWFhcmFiaWMiLDY0NjA5LCJzaGFkZGFkYW1tYXRhbmFyYWJpYyIsNjQ2MDYsInNoYWRkYWZhdGhhYXJhYmljIiw2NDYwOCwic2hhZGRha2FzcmFhcmFiaWMiLDY0NjEwLCJzaGFkZGFrYXNyYXRhbmFyYWJpYyIsNjQ2MDcsInNoYWRlIiw5NjE4LCJzaGFkZWRhcmsiLDk2MTksInNoYWRlbGlnaHQiLDk2MTcsInNoYWRlbWVkaXVtIiw5NjE4LCJzaGFkZXZhIiwyMzU4LCJzaGFndWphcmF0aSIsMjc0Miwic2hhZ3VybXVraGkiLDI2MTQsInNoYWxzaGVsZXRoZWJyZXciLDE0MjcsInNoYm9wb21vZm8iLDEyNTY1LCJzaGNoYWN5cmlsbGljIiwxMDk3LCJzaGVlbmFyYWJpYyIsMTU4OCwic2hlZW5maW5hbGFyYWJpYyIsNjUyMDYsInNoZWVuaW5pdGlhbGFyYWJpYyIsNjUyMDcsInNoZWVubWVkaWFsYXJhYmljIiw2NTIwOCwic2hlaWNvcHRpYyIsOTk1LCJzaGVxZWwiLDgzNjIsInNoZXFlbGhlYnJldyIsODM2Miwic2hldmEiLDE0NTYsInNoZXZhMTE1IiwxNDU2LCJzaGV2YTE1IiwxNDU2LCJzaGV2YTIyIiwxNDU2LCJzaGV2YTJlIiwxNDU2LCJzaGV2YWhlYnJldyIsMTQ1Niwic2hldmFuYXJyb3doZWJyZXciLDE0NTYsInNoZXZhcXVhcnRlcmhlYnJldyIsMTQ1Niwic2hldmF3aWRlaGVicmV3IiwxNDU2LCJzaGhhY3lyaWxsaWMiLDEyMTEsInNoaW1hY29wdGljIiwxMDA1LCJzaGluIiwxNTEzLCJzaGluZGFnZXNoIiw2NDMyOSwic2hpbmRhZ2VzaGhlYnJldyIsNjQzMjksInNoaW5kYWdlc2hzaGluZG90Iiw2NDMwMCwic2hpbmRhZ2VzaHNoaW5kb3RoZWJyZXciLDY0MzAwLCJzaGluZGFnZXNoc2luZG90Iiw2NDMwMSwic2hpbmRhZ2VzaHNpbmRvdGhlYnJldyIsNjQzMDEsInNoaW5kb3RoZWJyZXciLDE0NzMsInNoaW5oZWJyZXciLDE1MTMsInNoaW5zaGluZG90Iiw2NDI5OCwic2hpbnNoaW5kb3RoZWJyZXciLDY0Mjk4LCJzaGluc2luZG90Iiw2NDI5OSwic2hpbnNpbmRvdGhlYnJldyIsNjQyOTksInNob29rIiw2NDIsInNpZ21hIiw5NjMsInNpZ21hMSIsOTYyLCJzaWdtYWZpbmFsIiw5NjIsInNpZ21hbHVuYXRlc3ltYm9sZ3JlZWsiLDEwMTAsInNpaGlyYWdhbmEiLDEyMzc1LCJzaWthdGFrYW5hIiwxMjQ3MSwic2lrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDQsInNpbHVxaGVicmV3IiwxNDY5LCJzaWx1cWxlZnRoZWJyZXciLDE0NjksInNpbWlsYXIiLDg3NjQsInNpbmRvdGhlYnJldyIsMTQ3NCwic2lvc2FjaXJjbGVrb3JlYW4iLDEyOTE2LCJzaW9zYXBhcmVua29yZWFuIiwxMjgyMCwic2lvc2NpZXVja29yZWFuIiwxMjY3MCwic2lvc2NpcmNsZWtvcmVhbiIsMTI5MDIsInNpb3NraXllb2trb3JlYW4iLDEyNjY2LCJzaW9za29yZWFuIiwxMjYxMywic2lvc25pZXVua29yZWFuIiwxMjY2Nywic2lvc3BhcmVua29yZWFuIiwxMjgwNiwic2lvc3BpZXVwa29yZWFuIiwxMjY2OSwic2lvc3Rpa2V1dGtvcmVhbiIsMTI2NjgsInNpeCIsNTQsInNpeGFyYWJpYyIsMTYzOCwic2l4YmVuZ2FsaSIsMjU0MCwic2l4Y2lyY2xlIiw5MzE3LCJzaXhjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmIiwxMDEyNywic2l4ZGV2YSIsMjQxMiwic2l4Z3VqYXJhdGkiLDI3OTYsInNpeGd1cm11a2hpIiwyNjY4LCJzaXhoYWNrYXJhYmljIiwxNjM4LCJzaXhoYW5nemhvdSIsMTIzMjYsInNpeGlkZW9ncmFwaGljcGFyZW4iLDEyODM3LCJzaXhpbmZlcmlvciIsODMyNiwic2l4bW9ub3NwYWNlIiw2NTMwMiwic2l4b2xkc3R5bGUiLDYzMjg2LCJzaXhwYXJlbiIsOTMzNywic2l4cGVyaW9kIiw5MzU3LCJzaXhwZXJzaWFuIiwxNzgyLCJzaXhyb21hbiIsODU2NSwic2l4c3VwZXJpb3IiLDgzMTAsInNpeHRlZW5jaXJjbGUiLDkzMjcsInNpeHRlZW5jdXJyZW5jeWRlbm9taW5hdG9yYmVuZ2FsaSIsMjU1Mywic2l4dGVlbnBhcmVuIiw5MzQ3LCJzaXh0ZWVucGVyaW9kIiw5MzY3LCJzaXh0aGFpIiwzNjcwLCJzbGFzaCIsNDcsInNsYXNobW9ub3NwYWNlIiw2NTI5NSwic2xvbmciLDM4Mywic2xvbmdkb3RhY2NlbnQiLDc4MzUsInNtaWxlZmFjZSIsOTc4Niwic21vbm9zcGFjZSIsNjUzNjMsInNvZnBhc3VxaGVicmV3IiwxNDc1LCJzb2Z0aHlwaGVuIiwxNzMsInNvZnRzaWduY3lyaWxsaWMiLDExMDAsInNvaGlyYWdhbmEiLDEyMzgxLCJzb2thdGFrYW5hIiwxMjQ3Nywic29rYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDcsInNvbGlkdXNsb25nb3ZlcmxheWNtYiIsODI0LCJzb2xpZHVzc2hvcnRvdmVybGF5Y21iIiw4MjMsInNvcnVzaXRoYWkiLDM2MjUsInNvc2FsYXRoYWkiLDM2MjQsInNvc290aGFpIiwzNTk1LCJzb3N1YXRoYWkiLDM2MjYsInNwYWNlIiwzMiwic3BhY2VoYWNrYXJhYmljIiwzMiwic3BhZGUiLDk4MjQsInNwYWRlc3VpdGJsYWNrIiw5ODI0LCJzcGFkZXN1aXR3aGl0ZSIsOTgyOCwic3BhcmVuIiw5MzkwLCJzcXVhcmViZWxvd2NtYiIsODI3LCJzcXVhcmVjYyIsMTMyNTIsInNxdWFyZWNtIiwxMzIxMywic3F1YXJlZGlhZ29uYWxjcm9zc2hhdGNoZmlsbCIsOTY0MSwic3F1YXJlaG9yaXpvbnRhbGZpbGwiLDk2MzYsInNxdWFyZWtnIiwxMzE5OSwic3F1YXJla20iLDEzMjE0LCJzcXVhcmVrbWNhcGl0YWwiLDEzMjYyLCJzcXVhcmVsbiIsMTMyNjUsInNxdWFyZWxvZyIsMTMyNjYsInNxdWFyZW1nIiwxMzE5OCwic3F1YXJlbWlsIiwxMzI2OSwic3F1YXJlbW0iLDEzMjEyLCJzcXVhcmVtc3F1YXJlZCIsMTMyMTcsInNxdWFyZW9ydGhvZ29uYWxjcm9zc2hhdGNoZmlsbCIsOTYzOCwic3F1YXJldXBwZXJsZWZ0dG9sb3dlcnJpZ2h0ZmlsbCIsOTYzOSwic3F1YXJldXBwZXJyaWdodHRvbG93ZXJsZWZ0ZmlsbCIsOTY0MCwic3F1YXJldmVydGljYWxmaWxsIiw5NjM3LCJzcXVhcmV3aGl0ZXdpdGhzbWFsbGJsYWNrIiw5NjM1LCJzcnNxdWFyZSIsMTMyNzUsInNzYWJlbmdhbGkiLDI0ODcsInNzYWRldmEiLDIzNTksInNzYWd1amFyYXRpIiwyNzQzLCJzc2FuZ2NpZXVja29yZWFuIiwxMjYxNywic3NhbmdoaWV1aGtvcmVhbiIsMTI2NzcsInNzYW5naWV1bmdrb3JlYW4iLDEyNjcyLCJzc2FuZ2tpeWVva2tvcmVhbiIsMTI1OTQsInNzYW5nbmlldW5rb3JlYW4iLDEyNjQ1LCJzc2FuZ3BpZXVwa29yZWFuIiwxMjYxMSwic3NhbmdzaW9za29yZWFuIiwxMjYxNCwic3Nhbmd0aWtldXRrb3JlYW4iLDEyNjAwLCJzc3VwZXJpb3IiLDYzMjE4LCJzdGVybGluZyIsMTYzLCJzdGVybGluZ21vbm9zcGFjZSIsNjU1MDUsInN0cm9rZWxvbmdvdmVybGF5Y21iIiw4MjIsInN0cm9rZXNob3J0b3ZlcmxheWNtYiIsODIxLCJzdWJzZXQiLDg4MzQsInN1YnNldG5vdGVxdWFsIiw4ODQyLCJzdWJzZXRvcmVxdWFsIiw4ODM4LCJzdWNjZWVkcyIsODgyNywic3VjaHRoYXQiLDg3MTUsInN1aGlyYWdhbmEiLDEyMzc3LCJzdWthdGFrYW5hIiwxMjQ3Mywic3VrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDUsInN1a3VuYXJhYmljIiwxNjE4LCJzdW1tYXRpb24iLDg3MjEsInN1biIsOTc4OCwic3VwZXJzZXQiLDg4MzUsInN1cGVyc2V0bm90ZXF1YWwiLDg4NDMsInN1cGVyc2V0b3JlcXVhbCIsODgzOSwic3ZzcXVhcmUiLDEzMjc2LCJzeW91d2FlcmFzcXVhcmUiLDEzMTgwLCJ0IiwxMTYsInRhYmVuZ2FsaSIsMjQ2OCwidGFja2Rvd24iLDg4NjgsInRhY2tsZWZ0Iiw4ODY3LCJ0YWRldmEiLDIzNDAsInRhZ3VqYXJhdGkiLDI3MjQsInRhZ3VybXVraGkiLDI1OTYsInRhaGFyYWJpYyIsMTU5MSwidGFoZmluYWxhcmFiaWMiLDY1MjE4LCJ0YWhpbml0aWFsYXJhYmljIiw2NTIxOSwidGFoaXJhZ2FuYSIsMTIzODMsInRhaG1lZGlhbGFyYWJpYyIsNjUyMjAsInRhaXN5b3VlcmFzcXVhcmUiLDEzMTgxLCJ0YWthdGFrYW5hIiwxMjQ3OSwidGFrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDgsInRhdHdlZWxhcmFiaWMiLDE2MDAsInRhdSIsOTY0LCJ0YXYiLDE1MTQsInRhdmRhZ2VzIiw2NDMzMCwidGF2ZGFnZXNoIiw2NDMzMCwidGF2ZGFnZXNoaGVicmV3Iiw2NDMzMCwidGF2aGVicmV3IiwxNTE0LCJ0YmFyIiwzNTksInRib3BvbW9mbyIsMTI1NTQsInRjYXJvbiIsMzU3LCJ0Y2N1cmwiLDY4MCwidGNlZGlsbGEiLDM1NSwidGNoZWhhcmFiaWMiLDE2NzAsInRjaGVoZmluYWxhcmFiaWMiLDY0Mzc5LCJ0Y2hlaGluaXRpYWxhcmFiaWMiLDY0MzgwLCJ0Y2hlaG1lZGlhbGFyYWJpYyIsNjQzODEsInRjaXJjbGUiLDk0NDMsInRjaXJjdW1mbGV4YmVsb3ciLDc3OTMsInRjb21tYWFjY2VudCIsMzU1LCJ0ZGllcmVzaXMiLDc4MzEsInRkb3RhY2NlbnQiLDc3ODcsInRkb3RiZWxvdyIsNzc4OSwidGVjeXJpbGxpYyIsMTA5MCwidGVkZXNjZW5kZXJjeXJpbGxpYyIsMTE5NywidGVoYXJhYmljIiwxNTc4LCJ0ZWhmaW5hbGFyYWJpYyIsNjUxNzQsInRlaGhhaGluaXRpYWxhcmFiaWMiLDY0Njc0LCJ0ZWhoYWhpc29sYXRlZGFyYWJpYyIsNjQ1MjQsInRlaGluaXRpYWxhcmFiaWMiLDY1MTc1LCJ0ZWhpcmFnYW5hIiwxMjM5MCwidGVoamVlbWluaXRpYWxhcmFiaWMiLDY0NjczLCJ0ZWhqZWVtaXNvbGF0ZWRhcmFiaWMiLDY0NTIzLCJ0ZWhtYXJidXRhYXJhYmljIiwxNTc3LCJ0ZWhtYXJidXRhZmluYWxhcmFiaWMiLDY1MTcyLCJ0ZWhtZWRpYWxhcmFiaWMiLDY1MTc2LCJ0ZWhtZWVtaW5pdGlhbGFyYWJpYyIsNjQ2NzYsInRlaG1lZW1pc29sYXRlZGFyYWJpYyIsNjQ1MjYsInRlaG5vb25maW5hbGFyYWJpYyIsNjQ2MjcsInRla2F0YWthbmEiLDEyNDg2LCJ0ZWthdGFrYW5haGFsZndpZHRoIiw2NTQxMSwidGVsZXBob25lIiw4NDgxLCJ0ZWxlcGhvbmVibGFjayIsOTc0MiwidGVsaXNoYWdlZG9sYWhlYnJldyIsMTQ0MCwidGVsaXNoYXFldGFuYWhlYnJldyIsMTQ0OSwidGVuY2lyY2xlIiw5MzIxLCJ0ZW5pZGVvZ3JhcGhpY3BhcmVuIiwxMjg0MSwidGVucGFyZW4iLDkzNDEsInRlbnBlcmlvZCIsOTM2MSwidGVucm9tYW4iLDg1NjksInRlc2giLDY3OSwidGV0IiwxNDk2LCJ0ZXRkYWdlc2giLDY0MzEyLCJ0ZXRkYWdlc2hoZWJyZXciLDY0MzEyLCJ0ZXRoZWJyZXciLDE0OTYsInRldHNlY3lyaWxsaWMiLDEyMDUsInRldmlyaGVicmV3IiwxNDM1LCJ0ZXZpcmxlZnRoZWJyZXciLDE0MzUsInRoYWJlbmdhbGkiLDI0NjksInRoYWRldmEiLDIzNDEsInRoYWd1amFyYXRpIiwyNzI1LCJ0aGFndXJtdWtoaSIsMjU5NywidGhhbGFyYWJpYyIsMTU4NCwidGhhbGZpbmFsYXJhYmljIiw2NTE5NiwidGhhbnRoYWtoYXRsb3dsZWZ0dGhhaSIsNjM2NDAsInRoYW50aGFraGF0bG93cmlnaHR0aGFpIiw2MzYzOSwidGhhbnRoYWtoYXR0aGFpIiwzNjYwLCJ0aGFudGhha2hhdHVwcGVybGVmdHRoYWkiLDYzNjM4LCJ0aGVoYXJhYmljIiwxNTc5LCJ0aGVoZmluYWxhcmFiaWMiLDY1MTc4LCJ0aGVoaW5pdGlhbGFyYWJpYyIsNjUxNzksInRoZWhtZWRpYWxhcmFiaWMiLDY1MTgwLCJ0aGVyZWV4aXN0cyIsODcwNywidGhlcmVmb3JlIiw4NzU2LCJ0aGV0YSIsOTUyLCJ0aGV0YTEiLDk3NywidGhldGFzeW1ib2xncmVlayIsOTc3LCJ0aGlldXRoYWNpcmNsZWtvcmVhbiIsMTI5MjEsInRoaWV1dGhhcGFyZW5rb3JlYW4iLDEyODI1LCJ0aGlldXRoY2lyY2xla29yZWFuIiwxMjkwNywidGhpZXV0aGtvcmVhbiIsMTI2MjAsInRoaWV1dGhwYXJlbmtvcmVhbiIsMTI4MTEsInRoaXJ0ZWVuY2lyY2xlIiw5MzI0LCJ0aGlydGVlbnBhcmVuIiw5MzQ0LCJ0aGlydGVlbnBlcmlvZCIsOTM2NCwidGhvbmFuZ21vbnRob3RoYWkiLDM2MDEsInRob29rIiw0MjksInRob3BodXRoYW90aGFpIiwzNjAyLCJ0aG9ybiIsMjU0LCJ0aG90aGFoYW50aGFpIiwzNjA3LCJ0aG90aGFudGhhaSIsMzYwMCwidGhvdGhvbmd0aGFpIiwzNjA4LCJ0aG90aHVuZ3RoYWkiLDM2MDYsInRob3VzYW5kY3lyaWxsaWMiLDExNTQsInRob3VzYW5kc3NlcGFyYXRvcmFyYWJpYyIsMTY0NCwidGhvdXNhbmRzc2VwYXJhdG9ycGVyc2lhbiIsMTY0NCwidGhyZWUiLDUxLCJ0aHJlZWFyYWJpYyIsMTYzNSwidGhyZWViZW5nYWxpIiwyNTM3LCJ0aHJlZWNpcmNsZSIsOTMxNCwidGhyZWVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmIiwxMDEyNCwidGhyZWVkZXZhIiwyNDA5LCJ0aHJlZWVpZ2h0aHMiLDg1NDAsInRocmVlZ3VqYXJhdGkiLDI3OTMsInRocmVlZ3VybXVraGkiLDI2NjUsInRocmVlaGFja2FyYWJpYyIsMTYzNSwidGhyZWVoYW5nemhvdSIsMTIzMjMsInRocmVlaWRlb2dyYXBoaWNwYXJlbiIsMTI4MzQsInRocmVlaW5mZXJpb3IiLDgzMjMsInRocmVlbW9ub3NwYWNlIiw2NTI5OSwidGhyZWVudW1lcmF0b3JiZW5nYWxpIiwyNTUwLCJ0aHJlZW9sZHN0eWxlIiw2MzI4MywidGhyZWVwYXJlbiIsOTMzNCwidGhyZWVwZXJpb2QiLDkzNTQsInRocmVlcGVyc2lhbiIsMTc3OSwidGhyZWVxdWFydGVycyIsMTkwLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiw2MzE5OCwidGhyZWVyb21hbiIsODU2MiwidGhyZWVzdXBlcmlvciIsMTc5LCJ0aHJlZXRoYWkiLDM2NjcsInRoenNxdWFyZSIsMTMyMDQsInRpaGlyYWdhbmEiLDEyMzg1LCJ0aWthdGFrYW5hIiwxMjQ4MSwidGlrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDksInRpa2V1dGFjaXJjbGVrb3JlYW4iLDEyOTEyLCJ0aWtldXRhcGFyZW5rb3JlYW4iLDEyODE2LCJ0aWtldXRjaXJjbGVrb3JlYW4iLDEyODk4LCJ0aWtldXRrb3JlYW4iLDEyNTk5LCJ0aWtldXRwYXJlbmtvcmVhbiIsMTI4MDIsInRpbGRlIiw3MzIsInRpbGRlYmVsb3djbWIiLDgxNiwidGlsZGVjbWIiLDc3MSwidGlsZGVjb21iIiw3NzEsInRpbGRlZG91YmxlY21iIiw4NjQsInRpbGRlb3BlcmF0b3IiLDg3NjQsInRpbGRlb3ZlcmxheWNtYiIsODIwLCJ0aWxkZXZlcnRpY2FsY21iIiw4MzAsInRpbWVzY2lyY2xlIiw4ODU1LCJ0aXBlaGFoZWJyZXciLDE0MzAsInRpcGVoYWxlZnRoZWJyZXciLDE0MzAsInRpcHBpZ3VybXVraGkiLDI2NzIsInRpdGxvY3lyaWxsaWNjbWIiLDExNTUsInRpd25hcm1lbmlhbiIsMTQwNywidGxpbmViZWxvdyIsNzc5MSwidG1vbm9zcGFjZSIsNjUzNjQsInRvYXJtZW5pYW4iLDEzODUsInRvaGlyYWdhbmEiLDEyMzkyLCJ0b2thdGFrYW5hIiwxMjQ4OCwidG9rYXRha2FuYWhhbGZ3aWR0aCIsNjU0MTIsInRvbmViYXJleHRyYWhpZ2htb2QiLDc0MSwidG9uZWJhcmV4dHJhbG93bW9kIiw3NDUsInRvbmViYXJoaWdobW9kIiw3NDIsInRvbmViYXJsb3dtb2QiLDc0NCwidG9uZWJhcm1pZG1vZCIsNzQzLCJ0b25lZml2ZSIsNDQ1LCJ0b25lc2l4IiwzODksInRvbmV0d28iLDQyNCwidG9ub3MiLDkwMCwidG9uc3F1YXJlIiwxMzA5NSwidG9wYXRha3RoYWkiLDM1OTksInRvcnRvaXNlc2hlbGxicmFja2V0bGVmdCIsMTIzMDgsInRvcnRvaXNlc2hlbGxicmFja2V0bGVmdHNtYWxsIiw2NTExNywidG9ydG9pc2VzaGVsbGJyYWNrZXRsZWZ0dmVydGljYWwiLDY1MDgxLCJ0b3J0b2lzZXNoZWxsYnJhY2tldHJpZ2h0IiwxMjMwOSwidG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodHNtYWxsIiw2NTExOCwidG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodHZlcnRpY2FsIiw2NTA4MiwidG90YW90aGFpIiwzNjA1LCJ0cGFsYXRhbGhvb2siLDQyNywidHBhcmVuIiw5MzkxLCJ0cmFkZW1hcmsiLDg0ODIsInRyYWRlbWFya3NhbnMiLDYzNzIyLCJ0cmFkZW1hcmtzZXJpZiIsNjMxOTUsInRyZXRyb2ZsZXhob29rIiw2NDgsInRyaWFnZG4iLDk2NjAsInRyaWFnbGYiLDk2NjgsInRyaWFncnQiLDk2NTgsInRyaWFndXAiLDk2NTAsInRzIiw2NzgsInRzYWRpIiwxNTEwLCJ0c2FkaWRhZ2VzaCIsNjQzMjYsInRzYWRpZGFnZXNoaGVicmV3Iiw2NDMyNiwidHNhZGloZWJyZXciLDE1MTAsInRzZWN5cmlsbGljIiwxMDk0LCJ0c2VyZSIsMTQ2MSwidHNlcmUxMiIsMTQ2MSwidHNlcmUxZSIsMTQ2MSwidHNlcmUyYiIsMTQ2MSwidHNlcmVoZWJyZXciLDE0NjEsInRzZXJlbmFycm93aGVicmV3IiwxNDYxLCJ0c2VyZXF1YXJ0ZXJoZWJyZXciLDE0NjEsInRzZXJld2lkZWhlYnJldyIsMTQ2MSwidHNoZWN5cmlsbGljIiwxMTE1LCJ0c3VwZXJpb3IiLDYzMjE5LCJ0dGFiZW5nYWxpIiwyNDYzLCJ0dGFkZXZhIiwyMzM1LCJ0dGFndWphcmF0aSIsMjcxOSwidHRhZ3VybXVraGkiLDI1OTEsInR0ZWhhcmFiaWMiLDE2NTcsInR0ZWhmaW5hbGFyYWJpYyIsNjQzNTksInR0ZWhpbml0aWFsYXJhYmljIiw2NDM2MCwidHRlaG1lZGlhbGFyYWJpYyIsNjQzNjEsInR0aGFiZW5nYWxpIiwyNDY0LCJ0dGhhZGV2YSIsMjMzNiwidHRoYWd1amFyYXRpIiwyNzIwLCJ0dGhhZ3VybXVraGkiLDI1OTIsInR0dXJuZWQiLDY0NywidHVoaXJhZ2FuYSIsMTIzODgsInR1a2F0YWthbmEiLDEyNDg0LCJ0dWthdGFrYW5haGFsZndpZHRoIiw2NTQxMCwidHVzbWFsbGhpcmFnYW5hIiwxMjM4NywidHVzbWFsbGthdGFrYW5hIiwxMjQ4MywidHVzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM5MSwidHdlbHZlY2lyY2xlIiw5MzIzLCJ0d2VsdmVwYXJlbiIsOTM0MywidHdlbHZlcGVyaW9kIiw5MzYzLCJ0d2VsdmVyb21hbiIsODU3MSwidHdlbnR5Y2lyY2xlIiw5MzMxLCJ0d2VudHloYW5nemhvdSIsMjEzMTYsInR3ZW50eXBhcmVuIiw5MzUxLCJ0d2VudHlwZXJpb2QiLDkzNzEsInR3byIsNTAsInR3b2FyYWJpYyIsMTYzNCwidHdvYmVuZ2FsaSIsMjUzNiwidHdvY2lyY2xlIiw5MzEzLCJ0d29jaXJjbGVpbnZlcnNlc2Fuc3NlcmlmIiwxMDEyMywidHdvZGV2YSIsMjQwOCwidHdvZG90ZW5sZWFkZXIiLDgyMjksInR3b2RvdGxlYWRlciIsODIyOSwidHdvZG90bGVhZGVydmVydGljYWwiLDY1MDcyLCJ0d29ndWphcmF0aSIsMjc5MiwidHdvZ3VybXVraGkiLDI2NjQsInR3b2hhY2thcmFiaWMiLDE2MzQsInR3b2hhbmd6aG91IiwxMjMyMiwidHdvaWRlb2dyYXBoaWNwYXJlbiIsMTI4MzMsInR3b2luZmVyaW9yIiw4MzIyLCJ0d29tb25vc3BhY2UiLDY1Mjk4LCJ0d29udW1lcmF0b3JiZW5nYWxpIiwyNTQ5LCJ0d29vbGRzdHlsZSIsNjMyODIsInR3b3BhcmVuIiw5MzMzLCJ0d29wZXJpb2QiLDkzNTMsInR3b3BlcnNpYW4iLDE3NzgsInR3b3JvbWFuIiw4NTYxLCJ0d29zdHJva2UiLDQ0MywidHdvc3VwZXJpb3IiLDE3OCwidHdvdGhhaSIsMzY2NiwidHdvdGhpcmRzIiw4NTMyLCJ1IiwxMTcsInVhY3V0ZSIsMjUwLCJ1YmFyIiw2NDksInViZW5nYWxpIiwyNDQxLCJ1Ym9wb21vZm8iLDEyNTg0LCJ1YnJldmUiLDM2NSwidWNhcm9uIiw0NjgsInVjaXJjbGUiLDk0NDQsInVjaXJjdW1mbGV4IiwyNTEsInVjaXJjdW1mbGV4YmVsb3ciLDc3OTksInVjeXJpbGxpYyIsMTA5MSwidWRhdHRhZGV2YSIsMjM4NSwidWRibGFjdXRlIiwzNjksInVkYmxncmF2ZSIsNTMzLCJ1ZGV2YSIsMjMxMywidWRpZXJlc2lzIiwyNTIsInVkaWVyZXNpc2FjdXRlIiw0NzIsInVkaWVyZXNpc2JlbG93Iiw3Nzk1LCJ1ZGllcmVzaXNjYXJvbiIsNDc0LCJ1ZGllcmVzaXNjeXJpbGxpYyIsMTI2NSwidWRpZXJlc2lzZ3JhdmUiLDQ3NiwidWRpZXJlc2lzbWFjcm9uIiw0NzAsInVkb3RiZWxvdyIsNzkwOSwidWdyYXZlIiwyNDksInVndWphcmF0aSIsMjY5NywidWd1cm11a2hpIiwyNTY5LCJ1aGlyYWdhbmEiLDEyMzU4LCJ1aG9va2Fib3ZlIiw3OTExLCJ1aG9ybiIsNDMyLCJ1aG9ybmFjdXRlIiw3OTEzLCJ1aG9ybmRvdGJlbG93Iiw3OTIxLCJ1aG9ybmdyYXZlIiw3OTE1LCJ1aG9ybmhvb2thYm92ZSIsNzkxNywidWhvcm50aWxkZSIsNzkxOSwidWh1bmdhcnVtbGF1dCIsMzY5LCJ1aHVuZ2FydW1sYXV0Y3lyaWxsaWMiLDEyNjcsInVpbnZlcnRlZGJyZXZlIiw1MzUsInVrYXRha2FuYSIsMTI0NTQsInVrYXRha2FuYWhhbGZ3aWR0aCIsNjUzOTUsInVrY3lyaWxsaWMiLDExNDUsInVrb3JlYW4iLDEyNjM2LCJ1bWFjcm9uIiwzNjMsInVtYWNyb25jeXJpbGxpYyIsMTI2MywidW1hY3JvbmRpZXJlc2lzIiw3ODAzLCJ1bWF0cmFndXJtdWtoaSIsMjYyNSwidW1vbm9zcGFjZSIsNjUzNjUsInVuZGVyc2NvcmUiLDk1LCJ1bmRlcnNjb3JlZGJsIiw4MjE1LCJ1bmRlcnNjb3JlbW9ub3NwYWNlIiw2NTM0MywidW5kZXJzY29yZXZlcnRpY2FsIiw2NTA3NSwidW5kZXJzY29yZXdhdnkiLDY1MTAzLCJ1bmlvbiIsODc0NiwidW5pdmVyc2FsIiw4NzA0LCJ1b2dvbmVrIiwzNzEsInVwYXJlbiIsOTM5MiwidXBibG9jayIsOTYwMCwidXBwZXJkb3RoZWJyZXciLDE0NzYsInVwc2lsb24iLDk2NSwidXBzaWxvbmRpZXJlc2lzIiw5NzEsInVwc2lsb25kaWVyZXNpc3Rvbm9zIiw5NDQsInVwc2lsb25sYXRpbiIsNjUwLCJ1cHNpbG9udG9ub3MiLDk3MywidXB0YWNrYmVsb3djbWIiLDc5NywidXB0YWNrbW9kIiw3MjQsInVyYWd1cm11a2hpIiwyNjc1LCJ1cmluZyIsMzY3LCJ1c2hvcnRjeXJpbGxpYyIsMTExOCwidXNtYWxsaGlyYWdhbmEiLDEyMzU3LCJ1c21hbGxrYXRha2FuYSIsMTI0NTMsInVzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4NSwidXN0cmFpZ2h0Y3lyaWxsaWMiLDExOTksInVzdHJhaWdodHN0cm9rZWN5cmlsbGljIiwxMjAxLCJ1dGlsZGUiLDM2MSwidXRpbGRlYWN1dGUiLDc4MDEsInV0aWxkZWJlbG93Iiw3Nzk3LCJ1dWJlbmdhbGkiLDI0NDIsInV1ZGV2YSIsMjMxNCwidXVndWphcmF0aSIsMjY5OCwidXVndXJtdWtoaSIsMjU3MCwidXVtYXRyYWd1cm11a2hpIiwyNjI2LCJ1dXZvd2Vsc2lnbmJlbmdhbGkiLDI0OTgsInV1dm93ZWxzaWduZGV2YSIsMjM3MCwidXV2b3dlbHNpZ25ndWphcmF0aSIsMjc1NCwidXZvd2Vsc2lnbmJlbmdhbGkiLDI0OTcsInV2b3dlbHNpZ25kZXZhIiwyMzY5LCJ1dm93ZWxzaWduZ3VqYXJhdGkiLDI3NTMsInYiLDExOCwidmFkZXZhIiwyMzU3LCJ2YWd1amFyYXRpIiwyNzQxLCJ2YWd1cm11a2hpIiwyNjEzLCJ2YWthdGFrYW5hIiwxMjUzNSwidmF2IiwxNDkzLCJ2YXZkYWdlc2giLDY0MzA5LCJ2YXZkYWdlc2g2NSIsNjQzMDksInZhdmRhZ2VzaGhlYnJldyIsNjQzMDksInZhdmhlYnJldyIsMTQ5MywidmF2aG9sYW0iLDY0MzMxLCJ2YXZob2xhbWhlYnJldyIsNjQzMzEsInZhdnZhdmhlYnJldyIsMTUyMCwidmF2eW9kaGVicmV3IiwxNTIxLCJ2Y2lyY2xlIiw5NDQ1LCJ2ZG90YmVsb3ciLDc4MDcsInZlY3lyaWxsaWMiLDEwNzQsInZlaGFyYWJpYyIsMTcwMCwidmVoZmluYWxhcmFiaWMiLDY0MzYzLCJ2ZWhpbml0aWFsYXJhYmljIiw2NDM2NCwidmVobWVkaWFsYXJhYmljIiw2NDM2NSwidmVrYXRha2FuYSIsMTI1MzcsInZlbnVzIiw5NzkyLCJ2ZXJ0aWNhbGJhciIsMTI0LCJ2ZXJ0aWNhbGxpbmVhYm92ZWNtYiIsNzgxLCJ2ZXJ0aWNhbGxpbmViZWxvd2NtYiIsODA5LCJ2ZXJ0aWNhbGxpbmVsb3dtb2QiLDcxNiwidmVydGljYWxsaW5lbW9kIiw3MTIsInZld2FybWVuaWFuIiwxNDA2LCJ2aG9vayIsNjUxLCJ2aWthdGFrYW5hIiwxMjUzNiwidmlyYW1hYmVuZ2FsaSIsMjUwOSwidmlyYW1hZGV2YSIsMjM4MSwidmlyYW1hZ3VqYXJhdGkiLDI3NjUsInZpc2FyZ2FiZW5nYWxpIiwyNDM1LCJ2aXNhcmdhZGV2YSIsMjMwNywidmlzYXJnYWd1amFyYXRpIiwyNjkxLCJ2bW9ub3NwYWNlIiw2NTM2Niwidm9hcm1lbmlhbiIsMTQwMCwidm9pY2VkaXRlcmF0aW9uaGlyYWdhbmEiLDEyNDQ2LCJ2b2ljZWRpdGVyYXRpb25rYXRha2FuYSIsMTI1NDIsInZvaWNlZG1hcmtrYW5hIiwxMjQ0Mywidm9pY2VkbWFya2thbmFoYWxmd2lkdGgiLDY1NDM4LCJ2b2thdGFrYW5hIiwxMjUzOCwidnBhcmVuIiw5MzkzLCJ2dGlsZGUiLDc4MDUsInZ0dXJuZWQiLDY1MiwidnVoaXJhZ2FuYSIsMTI0MzYsInZ1a2F0YWthbmEiLDEyNTMyLCJ3IiwxMTksIndhY3V0ZSIsNzgxMSwid2Fla29yZWFuIiwxMjYzMywid2FoaXJhZ2FuYSIsMTI0MzEsIndha2F0YWthbmEiLDEyNTI3LCJ3YWthdGFrYW5haGFsZndpZHRoIiw2NTQzNiwid2Frb3JlYW4iLDEyNjMyLCJ3YXNtYWxsaGlyYWdhbmEiLDEyNDMwLCJ3YXNtYWxsa2F0YWthbmEiLDEyNTI2LCJ3YXR0b3NxdWFyZSIsMTMxNDMsIndhdmVkYXNoIiwxMjMxNiwid2F2eXVuZGVyc2NvcmV2ZXJ0aWNhbCIsNjUwNzYsIndhd2FyYWJpYyIsMTYwOCwid2F3ZmluYWxhcmFiaWMiLDY1MjYyLCJ3YXdoYW16YWFib3ZlYXJhYmljIiwxNTcyLCJ3YXdoYW16YWFib3ZlZmluYWxhcmFiaWMiLDY1MTU4LCJ3YnNxdWFyZSIsMTMyNzcsIndjaXJjbGUiLDk0NDYsIndjaXJjdW1mbGV4IiwzNzMsIndkaWVyZXNpcyIsNzgxMywid2RvdGFjY2VudCIsNzgxNSwid2RvdGJlbG93Iiw3ODE3LCJ3ZWhpcmFnYW5hIiwxMjQzMywid2VpZXJzdHJhc3MiLDg0NzIsIndla2F0YWthbmEiLDEyNTI5LCJ3ZWtvcmVhbiIsMTI2MzgsIndlb2tvcmVhbiIsMTI2MzcsIndncmF2ZSIsNzgwOSwid2hpdGVidWxsZXQiLDk3MDIsIndoaXRlY2lyY2xlIiw5Njc1LCJ3aGl0ZWNpcmNsZWludmVyc2UiLDk2ODksIndoaXRlY29ybmVyYnJhY2tldGxlZnQiLDEyMzAyLCJ3aGl0ZWNvcm5lcmJyYWNrZXRsZWZ0dmVydGljYWwiLDY1MDkxLCJ3aGl0ZWNvcm5lcmJyYWNrZXRyaWdodCIsMTIzMDMsIndoaXRlY29ybmVyYnJhY2tldHJpZ2h0dmVydGljYWwiLDY1MDkyLCJ3aGl0ZWRpYW1vbmQiLDk2NzEsIndoaXRlZGlhbW9uZGNvbnRhaW5pbmdibGFja3NtYWxsZGlhbW9uZCIsOTY3Miwid2hpdGVkb3ducG9pbnRpbmdzbWFsbHRyaWFuZ2xlIiw5NjYzLCJ3aGl0ZWRvd25wb2ludGluZ3RyaWFuZ2xlIiw5NjYxLCJ3aGl0ZWxlZnRwb2ludGluZ3NtYWxsdHJpYW5nbGUiLDk2NjcsIndoaXRlbGVmdHBvaW50aW5ndHJpYW5nbGUiLDk2NjUsIndoaXRlbGVudGljdWxhcmJyYWNrZXRsZWZ0IiwxMjMxMCwid2hpdGVsZW50aWN1bGFyYnJhY2tldHJpZ2h0IiwxMjMxMSwid2hpdGVyaWdodHBvaW50aW5nc21hbGx0cmlhbmdsZSIsOTY1Nywid2hpdGVyaWdodHBvaW50aW5ndHJpYW5nbGUiLDk2NTUsIndoaXRlc21hbGxzcXVhcmUiLDk2NDMsIndoaXRlc21pbGluZ2ZhY2UiLDk3ODYsIndoaXRlc3F1YXJlIiw5NjMzLCJ3aGl0ZXN0YXIiLDk3MzQsIndoaXRldGVsZXBob25lIiw5NzQzLCJ3aGl0ZXRvcnRvaXNlc2hlbGxicmFja2V0bGVmdCIsMTIzMTIsIndoaXRldG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodCIsMTIzMTMsIndoaXRldXBwb2ludGluZ3NtYWxsdHJpYW5nbGUiLDk2NTMsIndoaXRldXBwb2ludGluZ3RyaWFuZ2xlIiw5NjUxLCJ3aWhpcmFnYW5hIiwxMjQzMiwid2lrYXRha2FuYSIsMTI1MjgsIndpa29yZWFuIiwxMjYzOSwid21vbm9zcGFjZSIsNjUzNjcsIndvaGlyYWdhbmEiLDEyNDM0LCJ3b2thdGFrYW5hIiwxMjUzMCwid29rYXRha2FuYWhhbGZ3aWR0aCIsNjUzODIsIndvbiIsODM2MSwid29ubW9ub3NwYWNlIiw2NTUxMCwid293YWVudGhhaSIsMzYyMywid3BhcmVuIiw5Mzk0LCJ3cmluZyIsNzgzMiwid3N1cGVyaW9yIiw2OTUsInd0dXJuZWQiLDY1Mywid3lubiIsNDQ3LCJ4IiwxMjAsInhhYm92ZWNtYiIsODI5LCJ4Ym9wb21vZm8iLDEyNTYyLCJ4Y2lyY2xlIiw5NDQ3LCJ4ZGllcmVzaXMiLDc4MjEsInhkb3RhY2NlbnQiLDc4MTksInhlaGFybWVuaWFuIiwxMzg5LCJ4aSIsOTU4LCJ4bW9ub3NwYWNlIiw2NTM2OCwieHBhcmVuIiw5Mzk1LCJ4c3VwZXJpb3IiLDczOSwieSIsMTIxLCJ5YWFkb3NxdWFyZSIsMTMxMzQsInlhYmVuZ2FsaSIsMjQ3OSwieWFjdXRlIiwyNTMsInlhZGV2YSIsMjM1MSwieWFla29yZWFuIiwxMjYyNiwieWFndWphcmF0aSIsMjczNSwieWFndXJtdWtoaSIsMjYwNywieWFoaXJhZ2FuYSIsMTI0MjAsInlha2F0YWthbmEiLDEyNTE2LCJ5YWthdGFrYW5haGFsZndpZHRoIiw2NTQyOCwieWFrb3JlYW4iLDEyNjI1LCJ5YW1ha2thbnRoYWkiLDM2NjIsInlhc21hbGxoaXJhZ2FuYSIsMTI0MTksInlhc21hbGxrYXRha2FuYSIsMTI1MTUsInlhc21hbGxrYXRha2FuYWhhbGZ3aWR0aCIsNjUzODgsInlhdGN5cmlsbGljIiwxMTIzLCJ5Y2lyY2xlIiw5NDQ4LCJ5Y2lyY3VtZmxleCIsMzc1LCJ5ZGllcmVzaXMiLDI1NSwieWRvdGFjY2VudCIsNzgyMywieWRvdGJlbG93Iiw3OTI1LCJ5ZWhhcmFiaWMiLDE2MTAsInllaGJhcnJlZWFyYWJpYyIsMTc0NiwieWVoYmFycmVlZmluYWxhcmFiaWMiLDY0NDMxLCJ5ZWhmaW5hbGFyYWJpYyIsNjUyNjYsInllaGhhbXphYWJvdmVhcmFiaWMiLDE1NzQsInllaGhhbXphYWJvdmVmaW5hbGFyYWJpYyIsNjUxNjIsInllaGhhbXphYWJvdmVpbml0aWFsYXJhYmljIiw2NTE2MywieWVoaGFtemFhYm92ZW1lZGlhbGFyYWJpYyIsNjUxNjQsInllaGluaXRpYWxhcmFiaWMiLDY1MjY3LCJ5ZWhtZWRpYWxhcmFiaWMiLDY1MjY4LCJ5ZWhtZWVtaW5pdGlhbGFyYWJpYyIsNjQ3MzMsInllaG1lZW1pc29sYXRlZGFyYWJpYyIsNjQ2MDAsInllaG5vb25maW5hbGFyYWJpYyIsNjQ2NjAsInllaHRocmVlZG90c2JlbG93YXJhYmljIiwxNzQ1LCJ5ZWtvcmVhbiIsMTI2MzAsInllbiIsMTY1LCJ5ZW5tb25vc3BhY2UiLDY1NTA5LCJ5ZW9rb3JlYW4iLDEyNjI5LCJ5ZW9yaW5oaWV1aGtvcmVhbiIsMTI2NzgsInllcmFoYmVueW9tb2hlYnJldyIsMTQ1MCwieWVyYWhiZW55b21vbGVmdGhlYnJldyIsMTQ1MCwieWVyaWN5cmlsbGljIiwxMDk5LCJ5ZXJ1ZGllcmVzaXNjeXJpbGxpYyIsMTI3MywieWVzaWV1bmdrb3JlYW4iLDEyNjczLCJ5ZXNpZXVuZ3BhbnNpb3Nrb3JlYW4iLDEyNjc1LCJ5ZXNpZXVuZ3Npb3Nrb3JlYW4iLDEyNjc0LCJ5ZXRpdmhlYnJldyIsMTQzNCwieWdyYXZlIiw3OTIzLCJ5aG9vayIsNDM2LCJ5aG9va2Fib3ZlIiw3OTI3LCJ5aWFybWVuaWFuIiwxMzk3LCJ5aWN5cmlsbGljIiwxMTExLCJ5aWtvcmVhbiIsMTI2NDIsInlpbnlhbmciLDk3NzUsInlpd25hcm1lbmlhbiIsMTQxMCwieW1vbm9zcGFjZSIsNjUzNjksInlvZCIsMTQ5NywieW9kZGFnZXNoIiw2NDMxMywieW9kZGFnZXNoaGVicmV3Iiw2NDMxMywieW9kaGVicmV3IiwxNDk3LCJ5b2R5b2RoZWJyZXciLDE1MjIsInlvZHlvZHBhdGFoaGVicmV3Iiw2NDI4NywieW9oaXJhZ2FuYSIsMTI0MjQsInlvaWtvcmVhbiIsMTI2ODEsInlva2F0YWthbmEiLDEyNTIwLCJ5b2thdGFrYW5haGFsZndpZHRoIiw2NTQzMCwieW9rb3JlYW4iLDEyNjM1LCJ5b3NtYWxsaGlyYWdhbmEiLDEyNDIzLCJ5b3NtYWxsa2F0YWthbmEiLDEyNTE5LCJ5b3NtYWxsa2F0YWthbmFoYWxmd2lkdGgiLDY1MzkwLCJ5b3RncmVlayIsMTAxMSwieW95YWVrb3JlYW4iLDEyNjgwLCJ5b3lha29yZWFuIiwxMjY3OSwieW95YWt0aGFpIiwzNjE4LCJ5b3lpbmd0aGFpIiwzNTk3LCJ5cGFyZW4iLDkzOTYsInlwb2dlZ3JhbW1lbmkiLDg5MCwieXBvZ2VncmFtbWVuaWdyZWVrY21iIiw4MzcsInlyIiw0MjIsInlyaW5nIiw3ODMzLCJ5c3VwZXJpb3IiLDY5NiwieXRpbGRlIiw3OTI5LCJ5dHVybmVkIiw2NTQsInl1aGlyYWdhbmEiLDEyNDIyLCJ5dWlrb3JlYW4iLDEyNjg0LCJ5dWthdGFrYW5hIiwxMjUxOCwieXVrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MjksInl1a29yZWFuIiwxMjY0MCwieXVzYmlnY3lyaWxsaWMiLDExMzEsInl1c2JpZ2lvdGlmaWVkY3lyaWxsaWMiLDExMzMsInl1c2xpdHRsZWN5cmlsbGljIiwxMTI3LCJ5dXNsaXR0bGVpb3RpZmllZGN5cmlsbGljIiwxMTI5LCJ5dXNtYWxsaGlyYWdhbmEiLDEyNDIxLCJ5dXNtYWxsa2F0YWthbmEiLDEyNTE3LCJ5dXNtYWxsa2F0YWthbmFoYWxmd2lkdGgiLDY1Mzg5LCJ5dXlla29yZWFuIiwxMjY4MywieXV5ZW9rb3JlYW4iLDEyNjgyLCJ5eWFiZW5nYWxpIiwyNTI3LCJ5eWFkZXZhIiwyMzk5LCJ6IiwxMjIsInphYXJtZW5pYW4iLDEzODIsInphY3V0ZSIsMzc4LCJ6YWRldmEiLDIzOTUsInphZ3VybXVraGkiLDI2NTEsInphaGFyYWJpYyIsMTU5MiwiemFoZmluYWxhcmFiaWMiLDY1MjIyLCJ6YWhpbml0aWFsYXJhYmljIiw2NTIyMywiemFoaXJhZ2FuYSIsMTIzNzQsInphaG1lZGlhbGFyYWJpYyIsNjUyMjQsInphaW5hcmFiaWMiLDE1ODYsInphaW5maW5hbGFyYWJpYyIsNjUyMDAsInpha2F0YWthbmEiLDEyNDcwLCJ6YXFlZmdhZG9saGVicmV3IiwxNDI5LCJ6YXFlZnFhdGFuaGVicmV3IiwxNDI4LCJ6YXJxYWhlYnJldyIsMTQzMiwiemF5aW4iLDE0OTQsInpheWluZGFnZXNoIiw2NDMxMCwiemF5aW5kYWdlc2hoZWJyZXciLDY0MzEwLCJ6YXlpbmhlYnJldyIsMTQ5NCwiemJvcG9tb2ZvIiwxMjU2NywiemNhcm9uIiwzODIsInpjaXJjbGUiLDk0NDksInpjaXJjdW1mbGV4Iiw3ODI1LCJ6Y3VybCIsNjU3LCJ6ZG90IiwzODAsInpkb3RhY2NlbnQiLDM4MCwiemRvdGJlbG93Iiw3ODI3LCJ6ZWN5cmlsbGljIiwxMDc5LCJ6ZWRlc2NlbmRlcmN5cmlsbGljIiwxMTc3LCJ6ZWRpZXJlc2lzY3lyaWxsaWMiLDEyNDcsInplaGlyYWdhbmEiLDEyMzgwLCJ6ZWthdGFrYW5hIiwxMjQ3NiwiemVybyIsNDgsInplcm9hcmFiaWMiLDE2MzIsInplcm9iZW5nYWxpIiwyNTM0LCJ6ZXJvZGV2YSIsMjQwNiwiemVyb2d1amFyYXRpIiwyNzkwLCJ6ZXJvZ3VybXVraGkiLDI2NjIsInplcm9oYWNrYXJhYmljIiwxNjMyLCJ6ZXJvaW5mZXJpb3IiLDgzMjAsInplcm9tb25vc3BhY2UiLDY1Mjk2LCJ6ZXJvb2xkc3R5bGUiLDYzMjgwLCJ6ZXJvcGVyc2lhbiIsMTc3NiwiemVyb3N1cGVyaW9yIiw4MzA0LCJ6ZXJvdGhhaSIsMzY2NCwiemVyb3dpZHRoam9pbmVyIiw2NTI3OSwiemVyb3dpZHRobm9uam9pbmVyIiw4MjA0LCJ6ZXJvd2lkdGhzcGFjZSIsODIwMywiemV0YSIsOTUwLCJ6aGJvcG9tb2ZvIiwxMjU2MywiemhlYXJtZW5pYW4iLDEzODYsInpoZWJyZXZlY3lyaWxsaWMiLDEyMTgsInpoZWN5cmlsbGljIiwxMDc4LCJ6aGVkZXNjZW5kZXJjeXJpbGxpYyIsMTE3NSwiemhlZGllcmVzaXNjeXJpbGxpYyIsMTI0NSwiemloaXJhZ2FuYSIsMTIzNzYsInppa2F0YWthbmEiLDEyNDcyLCJ6aW5vcmhlYnJldyIsMTQ1NCwiemxpbmViZWxvdyIsNzgyOSwiem1vbm9zcGFjZSIsNjUzNzAsInpvaGlyYWdhbmEiLDEyMzgyLCJ6b2thdGFrYW5hIiwxMjQ3OCwienBhcmVuIiw5Mzk3LCJ6cmV0cm9mbGV4aG9vayIsNjU2LCJ6c3Ryb2tlIiw0MzgsInp1aGlyYWdhbmEiLDEyMzc4LCJ6dWthdGFrYW5hIiwxMjQ3NCwiLm5vdGRlZiIsMCwiYW5nYnJhY2tldGxlZnRiaWciLDkwMDEsImFuZ2JyYWNrZXRsZWZ0QmlnIiw5MDAxLCJhbmdicmFja2V0bGVmdGJpZ2ciLDkwMDEsImFuZ2JyYWNrZXRsZWZ0QmlnZyIsOTAwMSwiYW5nYnJhY2tldHJpZ2h0QmlnIiw5MDAyLCJhbmdicmFja2V0cmlnaHRiaWciLDkwMDIsImFuZ2JyYWNrZXRyaWdodEJpZ2ciLDkwMDIsImFuZ2JyYWNrZXRyaWdodGJpZ2ciLDkwMDIsImFycm93aG9va2xlZnQiLDg2MTgsImFycm93aG9va3JpZ2h0Iiw4NjE3LCJhcnJvd2xlZnR0b3BoYWxmIiw4NjM2LCJhcnJvd2xlZnRib3RoYWxmIiw4NjM3LCJhcnJvd25vcnRoZWFzdCIsODU5OSwiYXJyb3dub3J0aHdlc3QiLDg1OTgsImFycm93cmlnaHR0b3BoYWxmIiw4NjQwLCJhcnJvd3JpZ2h0Ym90aGFsZiIsODY0MSwiYXJyb3dzb3V0aGVhc3QiLDg2MDAsImFycm93c291dGh3ZXN0Iiw4NjAxLCJiYWNrc2xhc2hiaWciLDg3MjYsImJhY2tzbGFzaEJpZyIsODcyNiwiYmFja3NsYXNoQmlnZyIsODcyNiwiYmFja3NsYXNoYmlnZyIsODcyNiwiYmFyZGJsIiw4MjE0LCJicmFjZWh0aXBkb3dubGVmdCIsNjUwNzksImJyYWNlaHRpcGRvd25yaWdodCIsNjUwNzksImJyYWNlaHRpcHVwbGVmdCIsNjUwODAsImJyYWNlaHRpcHVwcmlnaHQiLDY1MDgwLCJicmFjZWxlZnRCaWciLDEyMywiYnJhY2VsZWZ0YmlnIiwxMjMsImJyYWNlbGVmdGJpZ2ciLDEyMywiYnJhY2VsZWZ0QmlnZyIsMTIzLCJicmFjZXJpZ2h0QmlnIiwxMjUsImJyYWNlcmlnaHRiaWciLDEyNSwiYnJhY2VyaWdodGJpZ2ciLDEyNSwiYnJhY2VyaWdodEJpZ2ciLDEyNSwiYnJhY2tldGxlZnRiaWciLDkxLCJicmFja2V0bGVmdEJpZyIsOTEsImJyYWNrZXRsZWZ0YmlnZyIsOTEsImJyYWNrZXRsZWZ0QmlnZyIsOTEsImJyYWNrZXRyaWdodEJpZyIsOTMsImJyYWNrZXRyaWdodGJpZyIsOTMsImJyYWNrZXRyaWdodGJpZ2ciLDkzLCJicmFja2V0cmlnaHRCaWdnIiw5MywiY2VpbGluZ2xlZnRiaWciLDg5NjgsImNlaWxpbmdsZWZ0QmlnIiw4OTY4LCJjZWlsaW5nbGVmdEJpZ2ciLDg5NjgsImNlaWxpbmdsZWZ0YmlnZyIsODk2OCwiY2VpbGluZ3JpZ2h0YmlnIiw4OTY5LCJjZWlsaW5ncmlnaHRCaWciLDg5NjksImNlaWxpbmdyaWdodGJpZ2ciLDg5NjksImNlaWxpbmdyaWdodEJpZ2ciLDg5NjksImNpcmNsZWRvdGRpc3BsYXkiLDg4NTcsImNpcmNsZWRvdHRleHQiLDg4NTcsImNpcmNsZW11bHRpcGx5ZGlzcGxheSIsODg1NSwiY2lyY2xlbXVsdGlwbHl0ZXh0Iiw4ODU1LCJjaXJjbGVwbHVzZGlzcGxheSIsODg1MywiY2lyY2xlcGx1c3RleHQiLDg4NTMsImNvbnRpbnRlZ3JhbGRpc3BsYXkiLDg3NTAsImNvbnRpbnRlZ3JhbHRleHQiLDg3NTAsImNvcHJvZHVjdGRpc3BsYXkiLDg3MjAsImNvcHJvZHVjdHRleHQiLDg3MjAsImZsb29ybGVmdEJpZyIsODk3MCwiZmxvb3JsZWZ0YmlnIiw4OTcwLCJmbG9vcmxlZnRiaWdnIiw4OTcwLCJmbG9vcmxlZnRCaWdnIiw4OTcwLCJmbG9vcnJpZ2h0YmlnIiw4OTcxLCJmbG9vcnJpZ2h0QmlnIiw4OTcxLCJmbG9vcnJpZ2h0QmlnZyIsODk3MSwiZmxvb3JyaWdodGJpZ2ciLDg5NzEsImhhdHdpZGUiLDc3MCwiaGF0d2lkZXIiLDc3MCwiaGF0d2lkZXN0Iiw3NzAsImludGVyY2FsIiw3NDg4LCJpbnRlZ3JhbGRpc3BsYXkiLDg3NDcsImludGVncmFsdGV4dCIsODc0NywiaW50ZXJzZWN0aW9uZGlzcGxheSIsODg5OCwiaW50ZXJzZWN0aW9udGV4dCIsODg5OCwibG9naWNhbGFuZGRpc3BsYXkiLDg3NDMsImxvZ2ljYWxhbmR0ZXh0Iiw4NzQzLCJsb2dpY2Fsb3JkaXNwbGF5Iiw4NzQ0LCJsb2dpY2Fsb3J0ZXh0Iiw4NzQ0LCJwYXJlbmxlZnRCaWciLDQwLCJwYXJlbmxlZnRiaWciLDQwLCJwYXJlbmxlZnRCaWdnIiw0MCwicGFyZW5sZWZ0YmlnZyIsNDAsInBhcmVucmlnaHRCaWciLDQxLCJwYXJlbnJpZ2h0YmlnIiw0MSwicGFyZW5yaWdodEJpZ2ciLDQxLCJwYXJlbnJpZ2h0YmlnZyIsNDEsInByaW1lIiw4MjQyLCJwcm9kdWN0ZGlzcGxheSIsODcxOSwicHJvZHVjdHRleHQiLDg3MTksInJhZGljYWxiaWciLDg3MzAsInJhZGljYWxCaWciLDg3MzAsInJhZGljYWxCaWdnIiw4NzMwLCJyYWRpY2FsYmlnZyIsODczMCwicmFkaWNhbGJ0Iiw4NzMwLCJyYWRpY2FsdHAiLDg3MzAsInJhZGljYWx2ZXJ0ZXgiLDg3MzAsInNsYXNoYmlnIiw0Nywic2xhc2hCaWciLDQ3LCJzbGFzaEJpZ2ciLDQ3LCJzbGFzaGJpZ2ciLDQ3LCJzdW1tYXRpb25kaXNwbGF5Iiw4NzIxLCJzdW1tYXRpb250ZXh0Iiw4NzIxLCJ0aWxkZXdpZGUiLDczMiwidGlsZGV3aWRlciIsNzMyLCJ0aWxkZXdpZGVzdCIsNzMyLCJ1bmlvbmRpc3BsYXkiLDg4OTksInVuaW9ubXVsdGlkaXNwbGF5Iiw4ODQ2LCJ1bmlvbm11bHRpdGV4dCIsODg0NiwidW5pb25zcWRpc3BsYXkiLDg4NTIsInVuaW9uc3F0ZXh0Iiw4ODUyLCJ1bmlvbnRleHQiLDg4OTksInZleHRlbmRkb3VibGUiLDg3NDEsInZleHRlbmRzaW5nbGUiLDg3MzldfSkpLGk9KDAsci5nZXRBcnJheUxvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKCl7cmV0dXJuWyJzcGFjZSIsMzIsImExIiw5OTg1LCJhMiIsOTk4NiwiYTIwMiIsOTk4NywiYTMiLDk5ODgsImE0Iiw5NzQyLCJhNSIsOTk5MCwiYTExOSIsOTk5MSwiYTExOCIsOTk5MiwiYTExNyIsOTk5MywiYTExIiw5NzU1LCJhMTIiLDk3NTgsImExMyIsOTk5NiwiYTE0Iiw5OTk3LCJhMTUiLDk5OTgsImExNiIsOTk5OSwiYTEwNSIsMWU0LCJhMTciLDEwMDAxLCJhMTgiLDEwMDAyLCJhMTkiLDEwMDAzLCJhMjAiLDEwMDA0LCJhMjEiLDEwMDA1LCJhMjIiLDEwMDA2LCJhMjMiLDEwMDA3LCJhMjQiLDEwMDA4LCJhMjUiLDEwMDA5LCJhMjYiLDEwMDEwLCJhMjciLDEwMDExLCJhMjgiLDEwMDEyLCJhNiIsMTAwMTMsImE3IiwxMDAxNCwiYTgiLDEwMDE1LCJhOSIsMTAwMTYsImExMCIsMTAwMTcsImEyOSIsMTAwMTgsImEzMCIsMTAwMTksImEzMSIsMTAwMjAsImEzMiIsMTAwMjEsImEzMyIsMTAwMjIsImEzNCIsMTAwMjMsImEzNSIsOTczMywiYTM2IiwxMDAyNSwiYTM3IiwxMDAyNiwiYTM4IiwxMDAyNywiYTM5IiwxMDAyOCwiYTQwIiwxMDAyOSwiYTQxIiwxMDAzMCwiYTQyIiwxMDAzMSwiYTQzIiwxMDAzMiwiYTQ0IiwxMDAzMywiYTQ1IiwxMDAzNCwiYTQ2IiwxMDAzNSwiYTQ3IiwxMDAzNiwiYTQ4IiwxMDAzNywiYTQ5IiwxMDAzOCwiYTUwIiwxMDAzOSwiYTUxIiwxMDA0MCwiYTUyIiwxMDA0MSwiYTUzIiwxMDA0MiwiYTU0IiwxMDA0MywiYTU1IiwxMDA0NCwiYTU2IiwxMDA0NSwiYTU3IiwxMDA0NiwiYTU4IiwxMDA0NywiYTU5IiwxMDA0OCwiYTYwIiwxMDA0OSwiYTYxIiwxMDA1MCwiYTYyIiwxMDA1MSwiYTYzIiwxMDA1MiwiYTY0IiwxMDA1MywiYTY1IiwxMDA1NCwiYTY2IiwxMDA1NSwiYTY3IiwxMDA1NiwiYTY4IiwxMDA1NywiYTY5IiwxMDA1OCwiYTcwIiwxMDA1OSwiYTcxIiw5Njc5LCJhNzIiLDEwMDYxLCJhNzMiLDk2MzIsImE3NCIsMTAwNjMsImEyMDMiLDEwMDY0LCJhNzUiLDEwMDY1LCJhMjA0IiwxMDA2NiwiYTc2Iiw5NjUwLCJhNzciLDk2NjAsImE3OCIsOTY3MCwiYTc5IiwxMDA3MCwiYTgxIiw5Njg3LCJhODIiLDEwMDcyLCJhODMiLDEwMDczLCJhODQiLDEwMDc0LCJhOTciLDEwMDc1LCJhOTgiLDEwMDc2LCJhOTkiLDEwMDc3LCJhMTAwIiwxMDA3OCwiYTEwMSIsMTAwODEsImExMDIiLDEwMDgyLCJhMTAzIiwxMDA4MywiYTEwNCIsMTAwODQsImExMDYiLDEwMDg1LCJhMTA3IiwxMDA4NiwiYTEwOCIsMTAwODcsImExMTIiLDk4MjcsImExMTEiLDk4MzAsImExMTAiLDk4MjksImExMDkiLDk4MjQsImExMjAiLDkzMTIsImExMjEiLDkzMTMsImExMjIiLDkzMTQsImExMjMiLDkzMTUsImExMjQiLDkzMTYsImExMjUiLDkzMTcsImExMjYiLDkzMTgsImExMjciLDkzMTksImExMjgiLDkzMjAsImExMjkiLDkzMjEsImExMzAiLDEwMTAyLCJhMTMxIiwxMDEwMywiYTEzMiIsMTAxMDQsImExMzMiLDEwMTA1LCJhMTM0IiwxMDEwNiwiYTEzNSIsMTAxMDcsImExMzYiLDEwMTA4LCJhMTM3IiwxMDEwOSwiYTEzOCIsMTAxMTAsImExMzkiLDEwMTExLCJhMTQwIiwxMDExMiwiYTE0MSIsMTAxMTMsImExNDIiLDEwMTE0LCJhMTQzIiwxMDExNSwiYTE0NCIsMTAxMTYsImExNDUiLDEwMTE3LCJhMTQ2IiwxMDExOCwiYTE0NyIsMTAxMTksImExNDgiLDEwMTIwLCJhMTQ5IiwxMDEyMSwiYTE1MCIsMTAxMjIsImExNTEiLDEwMTIzLCJhMTUyIiwxMDEyNCwiYTE1MyIsMTAxMjUsImExNTQiLDEwMTI2LCJhMTU1IiwxMDEyNywiYTE1NiIsMTAxMjgsImExNTciLDEwMTI5LCJhMTU4IiwxMDEzMCwiYTE1OSIsMTAxMzEsImExNjAiLDEwMTMyLCJhMTYxIiw4NTk0LCJhMTYzIiw4NTk2LCJhMTY0Iiw4NTk3LCJhMTk2IiwxMDEzNiwiYTE2NSIsMTAxMzcsImExOTIiLDEwMTM4LCJhMTY2IiwxMDEzOSwiYTE2NyIsMTAxNDAsImExNjgiLDEwMTQxLCJhMTY5IiwxMDE0MiwiYTE3MCIsMTAxNDMsImExNzEiLDEwMTQ0LCJhMTcyIiwxMDE0NSwiYTE3MyIsMTAxNDYsImExNjIiLDEwMTQ3LCJhMTc0IiwxMDE0OCwiYTE3NSIsMTAxNDksImExNzYiLDEwMTUwLCJhMTc3IiwxMDE1MSwiYTE3OCIsMTAxNTIsImExNzkiLDEwMTUzLCJhMTkzIiwxMDE1NCwiYTE4MCIsMTAxNTUsImExOTkiLDEwMTU2LCJhMTgxIiwxMDE1NywiYTIwMCIsMTAxNTgsImExODIiLDEwMTU5LCJhMjAxIiwxMDE2MSwiYTE4MyIsMTAxNjIsImExODQiLDEwMTYzLCJhMTk3IiwxMDE2NCwiYTE4NSIsMTAxNjUsImExOTQiLDEwMTY2LCJhMTk4IiwxMDE2NywiYTE4NiIsMTAxNjgsImExOTUiLDEwMTY5LCJhMTg3IiwxMDE3MCwiYTE4OCIsMTAxNzEsImExODkiLDEwMTcyLCJhMTkwIiwxMDE3MywiYTE5MSIsMTAxNzQsImE4OSIsMTAwODgsImE5MCIsMTAwODksImE5MyIsMTAwOTAsImE5NCIsMTAwOTEsImE5MSIsMTAwOTIsImE5MiIsMTAwOTMsImEyMDUiLDEwMDk0LCJhODUiLDEwMDk1LCJhMjA2IiwxMDA5NiwiYTg2IiwxMDA5NywiYTg3IiwxMDA5OCwiYTg4IiwxMDA5OSwiYTk1IiwxMDEwMCwiYTk2IiwxMDEwMSwiLm5vdGRlZiIsMF19KSl9LChlLHQsYSk9PnthLnIodCk7YS5kKHQse2NsZWFyVW5pY29kZUNhY2hlczooKT0+Y2xlYXJVbmljb2RlQ2FjaGVzLGdldENoYXJVbmljb2RlQ2F0ZWdvcnk6KCk9PmdldENoYXJVbmljb2RlQ2F0ZWdvcnksZ2V0Tm9ybWFsaXplZFVuaWNvZGVzOigpPT5zLGdldFVuaWNvZGVGb3JHbHlwaDooKT0+Z2V0VW5pY29kZUZvckdseXBoLGdldFVuaWNvZGVSYW5nZUZvcjooKT0+Z2V0VW5pY29kZVJhbmdlRm9yLG1hcFNwZWNpYWxVbmljb2RlVmFsdWVzOigpPT5tYXBTcGVjaWFsVW5pY29kZVZhbHVlcyxyZXZlcnNlSWZSdGw6KCk9PnJldmVyc2VJZlJ0bH0pO3ZhciByPWEoNCk7Y29uc3Qgbj0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbNjM3MjFdPTE2OTtlWzYzMTkzXT0xNjk7ZVs2MzcyMF09MTc0O2VbNjMxOTRdPTE3NDtlWzYzNzIyXT04NDgyO2VbNjMxOTVdPTg0ODI7ZVs2MzcyOV09OTEyNztlWzYzNzMwXT05MTI4O2VbNjM3MzFdPTkxMjk7ZVs2Mzc0MF09OTEzMTtlWzYzNzQxXT05MTMyO2VbNjM3NDJdPTkxMzM7ZVs2MzcyNl09OTEyMTtlWzYzNzI3XT05MTIyO2VbNjM3MjhdPTkxMjM7ZVs2MzczN109OTEyNDtlWzYzNzM4XT05MTI1O2VbNjM3MzldPTkxMjY7ZVs2MzcyM109OTExNTtlWzYzNzI0XT05MTE2O2VbNjM3MjVdPTkxMTc7ZVs2MzczNF09OTExODtlWzYzNzM1XT05MTE5O2VbNjM3MzZdPTkxMjB9KSk7ZnVuY3Rpb24gbWFwU3BlY2lhbFVuaWNvZGVWYWx1ZXMoZSl7cmV0dXJuIGU+PTY1NTIwJiZlPD02NTUzNT8wOmU+PTYyOTc2JiZlPD02Mzc0Mz9uKClbZV18fGU6MTczPT09ZT80NTplfWZ1bmN0aW9uIGdldFVuaWNvZGVGb3JHbHlwaChlLHQpe2xldCBhPXRbZV07aWYodm9pZCAwIT09YSlyZXR1cm4gYTtpZighZSlyZXR1cm4tMTtpZigidSI9PT1lWzBdKXtjb25zdCB0PWUubGVuZ3RoO2xldCByO2lmKDc9PT10JiYibiI9PT1lWzFdJiYiaSI9PT1lWzJdKXI9ZS5zdWJzdHJpbmcoMyk7ZWxzZXtpZighKHQ+PTUmJnQ8PTcpKXJldHVybi0xO3I9ZS5zdWJzdHJpbmcoMSl9aWYocj09PXIudG9VcHBlckNhc2UoKSl7YT1wYXJzZUludChyLDE2KTtpZihhPj0wKXJldHVybiBhfX1yZXR1cm4tMX1jb25zdCBpPVt7YmVnaW46MCxlbmQ6MTI3fSx7YmVnaW46MTI4LGVuZDoyNTV9LHtiZWdpbjoyNTYsZW5kOjM4M30se2JlZ2luOjM4NCxlbmQ6NTkxfSx7YmVnaW46NTkyLGVuZDo2ODd9LHtiZWdpbjo2ODgsZW5kOjc2N30se2JlZ2luOjc2OCxlbmQ6ODc5fSx7YmVnaW46ODgwLGVuZDoxMDIzfSx7YmVnaW46MTEzOTIsZW5kOjExNTE5fSx7YmVnaW46MTAyNCxlbmQ6MTI3OX0se2JlZ2luOjEzMjgsZW5kOjE0MjN9LHtiZWdpbjoxNDI0LGVuZDoxNTM1fSx7YmVnaW46NDIyNDAsZW5kOjQyNTU5fSx7YmVnaW46MTUzNixlbmQ6MTc5MX0se2JlZ2luOjE5ODQsZW5kOjIwNDd9LHtiZWdpbjoyMzA0LGVuZDoyNDMxfSx7YmVnaW46MjQzMixlbmQ6MjU1OX0se2JlZ2luOjI1NjAsZW5kOjI2ODd9LHtiZWdpbjoyNjg4LGVuZDoyODE1fSx7YmVnaW46MjgxNixlbmQ6Mjk0M30se2JlZ2luOjI5NDQsZW5kOjMwNzF9LHtiZWdpbjozMDcyLGVuZDozMTk5fSx7YmVnaW46MzIwMCxlbmQ6MzMyN30se2JlZ2luOjMzMjgsZW5kOjM0NTV9LHtiZWdpbjozNTg0LGVuZDozNzExfSx7YmVnaW46MzcxMixlbmQ6MzgzOX0se2JlZ2luOjQyNTYsZW5kOjQzNTF9LHtiZWdpbjo2OTEyLGVuZDo3MDM5fSx7YmVnaW46NDM1MixlbmQ6NDYwN30se2JlZ2luOjc2ODAsZW5kOjc5MzV9LHtiZWdpbjo3OTM2LGVuZDo4MTkxfSx7YmVnaW46ODE5MixlbmQ6ODMwM30se2JlZ2luOjgzMDQsZW5kOjgzNTF9LHtiZWdpbjo4MzUyLGVuZDo4Mzk5fSx7YmVnaW46ODQwMCxlbmQ6ODQ0N30se2JlZ2luOjg0NDgsZW5kOjg1Mjd9LHtiZWdpbjo4NTI4LGVuZDo4NTkxfSx7YmVnaW46ODU5MixlbmQ6ODcwM30se2JlZ2luOjg3MDQsZW5kOjg5NTl9LHtiZWdpbjo4OTYwLGVuZDo5MjE1fSx7YmVnaW46OTIxNixlbmQ6OTI3OX0se2JlZ2luOjkyODAsZW5kOjkzMTF9LHtiZWdpbjo5MzEyLGVuZDo5NDcxfSx7YmVnaW46OTQ3MixlbmQ6OTU5OX0se2JlZ2luOjk2MDAsZW5kOjk2MzF9LHtiZWdpbjo5NjMyLGVuZDo5NzI3fSx7YmVnaW46OTcyOCxlbmQ6OTk4M30se2JlZ2luOjk5ODQsZW5kOjEwMTc1fSx7YmVnaW46MTIyODgsZW5kOjEyMzUxfSx7YmVnaW46MTIzNTIsZW5kOjEyNDQ3fSx7YmVnaW46MTI0NDgsZW5kOjEyNTQzfSx7YmVnaW46MTI1NDQsZW5kOjEyNTkxfSx7YmVnaW46MTI1OTIsZW5kOjEyNjg3fSx7YmVnaW46NDMwNzIsZW5kOjQzMTM1fSx7YmVnaW46MTI4MDAsZW5kOjEzMDU1fSx7YmVnaW46MTMwNTYsZW5kOjEzMzExfSx7YmVnaW46NDQwMzIsZW5kOjU1MjE1fSx7YmVnaW46NTUyOTYsZW5kOjU3MzQzfSx7YmVnaW46Njc4NDAsZW5kOjY3ODcxfSx7YmVnaW46MTk5NjgsZW5kOjQwOTU5fSx7YmVnaW46NTczNDQsZW5kOjYzNzQzfSx7YmVnaW46MTI3MzYsZW5kOjEyNzgzfSx7YmVnaW46NjQyNTYsZW5kOjY0MzM1fSx7YmVnaW46NjQzMzYsZW5kOjY1MDIzfSx7YmVnaW46NjUwNTYsZW5kOjY1MDcxfSx7YmVnaW46NjUwNDAsZW5kOjY1MDU1fSx7YmVnaW46NjUxMDQsZW5kOjY1MTM1fSx7YmVnaW46NjUxMzYsZW5kOjY1Mjc5fSx7YmVnaW46NjUyODAsZW5kOjY1NTE5fSx7YmVnaW46NjU1MjAsZW5kOjY1NTM1fSx7YmVnaW46Mzg0MCxlbmQ6NDA5NX0se2JlZ2luOjE3OTIsZW5kOjE4NzF9LHtiZWdpbjoxOTIwLGVuZDoxOTgzfSx7YmVnaW46MzQ1NixlbmQ6MzU4M30se2JlZ2luOjQwOTYsZW5kOjQyNTV9LHtiZWdpbjo0NjA4LGVuZDo0OTkxfSx7YmVnaW46NTAyNCxlbmQ6NTExOX0se2JlZ2luOjUxMjAsZW5kOjU3NTl9LHtiZWdpbjo1NzYwLGVuZDo1NzkxfSx7YmVnaW46NTc5MixlbmQ6NTg4N30se2JlZ2luOjYwMTYsZW5kOjYxNDN9LHtiZWdpbjo2MTQ0LGVuZDo2MzE5fSx7YmVnaW46MTAyNDAsZW5kOjEwNDk1fSx7YmVnaW46NDA5NjAsZW5kOjQyMTI3fSx7YmVnaW46NTg4OCxlbmQ6NTkxOX0se2JlZ2luOjY2MzA0LGVuZDo2NjM1MX0se2JlZ2luOjY2MzUyLGVuZDo2NjM4M30se2JlZ2luOjY2NTYwLGVuZDo2NjYzOX0se2JlZ2luOjExODc4NCxlbmQ6MTE5MDM5fSx7YmVnaW46MTE5ODA4LGVuZDoxMjA4MzF9LHtiZWdpbjoxMDQ0NDgwLGVuZDoxMDQ4NTczfSx7YmVnaW46NjUwMjQsZW5kOjY1MDM5fSx7YmVnaW46OTE3NTA0LGVuZDo5MTc2MzF9LHtiZWdpbjo2NDAwLGVuZDo2NDc5fSx7YmVnaW46NjQ4MCxlbmQ6NjUyN30se2JlZ2luOjY1MjgsZW5kOjY2MjN9LHtiZWdpbjo2NjU2LGVuZDo2Njg3fSx7YmVnaW46MTEyNjQsZW5kOjExMzU5fSx7YmVnaW46MTE1NjgsZW5kOjExNjQ3fSx7YmVnaW46MTk5MDQsZW5kOjE5OTY3fSx7YmVnaW46NDMwMDgsZW5kOjQzMDU1fSx7YmVnaW46NjU1MzYsZW5kOjY1NjYzfSx7YmVnaW46NjU4NTYsZW5kOjY1OTM1fSx7YmVnaW46NjY0MzIsZW5kOjY2NDYzfSx7YmVnaW46NjY0NjQsZW5kOjY2NTI3fSx7YmVnaW46NjY2NDAsZW5kOjY2Njg3fSx7YmVnaW46NjY2ODgsZW5kOjY2NzM1fSx7YmVnaW46Njc1ODQsZW5kOjY3NjQ3fSx7YmVnaW46NjgwOTYsZW5kOjY4MTkxfSx7YmVnaW46MTE5NTUyLGVuZDoxMTk2NDd9LHtiZWdpbjo3MzcyOCxlbmQ6NzQ3NTF9LHtiZWdpbjoxMTk2NDgsZW5kOjExOTY3OX0se2JlZ2luOjcwNDAsZW5kOjcxMDN9LHtiZWdpbjo3MTY4LGVuZDo3MjQ3fSx7YmVnaW46NzI0OCxlbmQ6NzI5NX0se2JlZ2luOjQzMTM2LGVuZDo0MzIzMX0se2JlZ2luOjQzMjY0LGVuZDo0MzMxMX0se2JlZ2luOjQzMzEyLGVuZDo0MzM1OX0se2JlZ2luOjQzNTIwLGVuZDo0MzYxNX0se2JlZ2luOjY1OTM2LGVuZDo2NTk5OX0se2JlZ2luOjY2ZTMsZW5kOjY2MDQ3fSx7YmVnaW46NjYyMDgsZW5kOjY2MjcxfSx7YmVnaW46MTI3MDI0LGVuZDoxMjcxMzV9XTtmdW5jdGlvbiBnZXRVbmljb2RlUmFuZ2VGb3IoZSl7Zm9yKGxldCB0PTAsYT1pLmxlbmd0aDt0PGE7dCsrKXtjb25zdCBhPWlbdF07aWYoZT49YS5iZWdpbiYmZTxhLmVuZClyZXR1cm4gdH1yZXR1cm4tMX1jb25zdCBzPSgwLHIuZ2V0QXJyYXlMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbigpe3JldHVyblsiwqgiLCIgzIgiLCLCryIsIiDMhCIsIsK0IiwiIMyBIiwiwrUiLCLOvCIsIsK4IiwiIMynIiwixLIiLCJJSiIsIsSzIiwiaWoiLCLEvyIsIkzCtyIsIsWAIiwibMK3IiwixYkiLCLKvG4iLCLFvyIsInMiLCLHhCIsIkTFvSIsIseFIiwiRMW+Iiwix4YiLCJkxb4iLCLHhyIsIkxKIiwix4giLCJMaiIsIseJIiwibGoiLCLHiiIsIk5KIiwix4siLCJOaiIsIseMIiwibmoiLCLHsSIsIkRaIiwix7IiLCJEeiIsIsezIiwiZHoiLCLLmCIsIiDMhiIsIsuZIiwiIMyHIiwiy5oiLCIgzIoiLCLLmyIsIiDMqCIsIsucIiwiIMyDIiwiy50iLCIgzIsiLCLNuiIsIiDNhSIsIs6EIiwiIMyBIiwiz5AiLCLOsiIsIs+RIiwizrgiLCLPkiIsIs6lIiwiz5UiLCLPhiIsIs+WIiwiz4AiLCLPsCIsIs66Iiwiz7EiLCLPgSIsIs+yIiwiz4IiLCLPtCIsIs6YIiwiz7UiLCLOtSIsIs+5IiwizqMiLCLWhyIsItWl1oIiLCLZtSIsItin2bQiLCLZtiIsItmI2bQiLCLZtyIsItuH2bQiLCLZuCIsItmK2bQiLCLguLMiLCLguY3guLIiLCLgurMiLCLgu43gurIiLCLgu5wiLCLguqvgupkiLCLgu50iLCLguqvguqEiLCLgvbciLCLgvrLgvoEiLCLgvbkiLCLgvrPgvoEiLCLhupoiLCJhyr4iLCLhvr0iLCIgzJMiLCLhvr8iLCIgzJMiLCLhv4AiLCIgzYIiLCLhv74iLCIgzJQiLCLigIIiLCIgIiwi4oCDIiwiICIsIuKAhCIsIiAiLCLigIUiLCIgIiwi4oCGIiwiICIsIuKAiCIsIiAiLCLigIkiLCIgIiwi4oCKIiwiICIsIuKAlyIsIiDMsyIsIuKApCIsIi4iLCLigKUiLCIuLiIsIuKApiIsIi4uLiIsIuKAsyIsIuKAsuKAsiIsIuKAtCIsIuKAsuKAsuKAsiIsIuKAtiIsIuKAteKAtSIsIuKAtyIsIuKAteKAteKAtSIsIuKAvCIsIiEhIiwi4oC+IiwiIMyFIiwi4oGHIiwiPz8iLCLigYgiLCI/ISIsIuKBiSIsIiE/Iiwi4oGXIiwi4oCy4oCy4oCy4oCyIiwi4oGfIiwiICIsIuKCqCIsIlJzIiwi4oSAIiwiYS9jIiwi4oSBIiwiYS9zIiwi4oSDIiwiwrBDIiwi4oSFIiwiYy9vIiwi4oSGIiwiYy91Iiwi4oSHIiwixpAiLCLihIkiLCLCsEYiLCLihJYiLCJObyIsIuKEoSIsIlRFTCIsIuKEtSIsIteQIiwi4oS2Iiwi15EiLCLihLciLCLXkiIsIuKEuCIsIteTIiwi4oS7IiwiRkFYIiwi4oWgIiwiSSIsIuKFoSIsIklJIiwi4oWiIiwiSUlJIiwi4oWjIiwiSVYiLCLihaQiLCJWIiwi4oWlIiwiVkkiLCLihaYiLCJWSUkiLCLihaciLCJWSUlJIiwi4oWoIiwiSVgiLCLihakiLCJYIiwi4oWqIiwiWEkiLCLihasiLCJYSUkiLCLihawiLCJMIiwi4oWtIiwiQyIsIuKFriIsIkQiLCLiha8iLCJNIiwi4oWwIiwiaSIsIuKFsSIsImlpIiwi4oWyIiwiaWlpIiwi4oWzIiwiaXYiLCLihbQiLCJ2Iiwi4oW1IiwidmkiLCLihbYiLCJ2aWkiLCLihbciLCJ2aWlpIiwi4oW4IiwiaXgiLCLihbkiLCJ4Iiwi4oW6IiwieGkiLCLihbsiLCJ4aWkiLCLihbwiLCJsIiwi4oW9IiwiYyIsIuKFviIsImQiLCLihb8iLCJtIiwi4oisIiwi4oir4oirIiwi4oitIiwi4oir4oir4oirIiwi4oivIiwi4oiu4oiuIiwi4oiwIiwi4oiu4oiu4oiuIiwi4pG0IiwiKDEpIiwi4pG1IiwiKDIpIiwi4pG2IiwiKDMpIiwi4pG3IiwiKDQpIiwi4pG4IiwiKDUpIiwi4pG5IiwiKDYpIiwi4pG6IiwiKDcpIiwi4pG7IiwiKDgpIiwi4pG8IiwiKDkpIiwi4pG9IiwiKDEwKSIsIuKRviIsIigxMSkiLCLikb8iLCIoMTIpIiwi4pKAIiwiKDEzKSIsIuKSgSIsIigxNCkiLCLikoIiLCIoMTUpIiwi4pKDIiwiKDE2KSIsIuKShCIsIigxNykiLCLikoUiLCIoMTgpIiwi4pKGIiwiKDE5KSIsIuKShyIsIigyMCkiLCLikogiLCIxLiIsIuKSiSIsIjIuIiwi4pKKIiwiMy4iLCLikosiLCI0LiIsIuKSjCIsIjUuIiwi4pKNIiwiNi4iLCLiko4iLCI3LiIsIuKSjyIsIjguIiwi4pKQIiwiOS4iLCLikpEiLCIxMC4iLCLikpIiLCIxMS4iLCLikpMiLCIxMi4iLCLikpQiLCIxMy4iLCLikpUiLCIxNC4iLCLikpYiLCIxNS4iLCLikpciLCIxNi4iLCLikpgiLCIxNy4iLCLikpkiLCIxOC4iLCLikpoiLCIxOS4iLCLikpsiLCIyMC4iLCLikpwiLCIoYSkiLCLikp0iLCIoYikiLCLikp4iLCIoYykiLCLikp8iLCIoZCkiLCLikqAiLCIoZSkiLCLikqEiLCIoZikiLCLikqIiLCIoZykiLCLikqMiLCIoaCkiLCLikqQiLCIoaSkiLCLikqUiLCIoaikiLCLikqYiLCIoaykiLCLikqciLCIobCkiLCLikqgiLCIobSkiLCLikqkiLCIobikiLCLikqoiLCIobykiLCLikqsiLCIocCkiLCLikqwiLCIocSkiLCLikq0iLCIocikiLCLikq4iLCIocykiLCLikq8iLCIodCkiLCLikrAiLCIodSkiLCLikrEiLCIodikiLCLikrIiLCIodykiLCLikrMiLCIoeCkiLCLikrQiLCIoeSkiLCLikrUiLCIoeikiLCLiqIwiLCLiiKviiKviiKviiKsiLCLiqbQiLCI6Oj0iLCLiqbUiLCI9PSIsIuKptiIsIj09PSIsIuK6nyIsIuavjSIsIuK7syIsIum+nyIsIuK8gCIsIuS4gCIsIuK8gSIsIuS4qCIsIuK8giIsIuS4tiIsIuK8gyIsIuS4vyIsIuK8hCIsIuS5mSIsIuK8hSIsIuS6hSIsIuK8hiIsIuS6jCIsIuK8hyIsIuS6oCIsIuK8iCIsIuS6uiIsIuK8iSIsIuWEvyIsIuK8iiIsIuWFpSIsIuK8iyIsIuWFqyIsIuK8jCIsIuWGgiIsIuK8jSIsIuWGliIsIuK8jiIsIuWGqyIsIuK8jyIsIuWHoCIsIuK8kCIsIuWHtSIsIuK8kSIsIuWIgCIsIuK8kiIsIuWKmyIsIuK8kyIsIuWLuSIsIuK8lCIsIuWMlSIsIuK8lSIsIuWMmiIsIuK8liIsIuWMuCIsIuK8lyIsIuWNgSIsIuK8mCIsIuWNnCIsIuK8mSIsIuWNqSIsIuK8miIsIuWOgiIsIuK8myIsIuWOtiIsIuK8nCIsIuWPiCIsIuK8nSIsIuWPoyIsIuK8niIsIuWblyIsIuK8nyIsIuWcnyIsIuK8oCIsIuWjqyIsIuK8oSIsIuWkgiIsIuK8oiIsIuWkiiIsIuK8oyIsIuWklSIsIuK8pCIsIuWkpyIsIuK8pSIsIuWlsyIsIuK8piIsIuWtkCIsIuK8pyIsIuWugCIsIuK8qCIsIuWvuCIsIuK8qSIsIuWwjyIsIuK8qiIsIuWwoiIsIuK8qyIsIuWwuCIsIuK8rCIsIuWxriIsIuK8rSIsIuWxsSIsIuK8riIsIuW3myIsIuK8ryIsIuW3pSIsIuK8sCIsIuW3sSIsIuK8sSIsIuW3viIsIuK8siIsIuW5siIsIuK8syIsIuW5uiIsIuK8tCIsIuW5vyIsIuK8tSIsIuW7tCIsIuK8tiIsIuW7viIsIuK8tyIsIuW8iyIsIuK8uCIsIuW8kyIsIuK8uSIsIuW9kCIsIuK8uiIsIuW9oSIsIuK8uyIsIuW9syIsIuK8vCIsIuW/gyIsIuK8vSIsIuaIiCIsIuK8viIsIuaItiIsIuK8vyIsIuaJiyIsIuK9gCIsIuaUryIsIuK9gSIsIuaUtCIsIuK9giIsIuaWhyIsIuK9gyIsIuaWlyIsIuK9hCIsIuaWpCIsIuK9hSIsIuaWuSIsIuK9hiIsIuaXoCIsIuK9hyIsIuaXpSIsIuK9iCIsIuabsCIsIuK9iSIsIuaciCIsIuK9iiIsIuacqCIsIuK9iyIsIuasoCIsIuK9jCIsIuatoiIsIuK9jSIsIuatuSIsIuK9jiIsIuausyIsIuK9jyIsIuaviyIsIuK9kCIsIuavlCIsIuK9kSIsIuavmyIsIuK9kiIsIuawjyIsIuK9kyIsIuawlCIsIuK9lCIsIuawtCIsIuK9lSIsIueBqyIsIuK9liIsIueIqiIsIuK9lyIsIueItiIsIuK9mCIsIueIuyIsIuK9mSIsIueIvyIsIuK9miIsIueJhyIsIuK9myIsIueJmSIsIuK9nCIsIueJmyIsIuK9nSIsIueKrCIsIuK9niIsIueOhCIsIuK9nyIsIueOiSIsIuK9oCIsIueTnCIsIuK9oSIsIueTpiIsIuK9oiIsIueUmCIsIuK9oyIsIueUnyIsIuK9pCIsIueUqCIsIuK9pSIsIueUsCIsIuK9piIsIueWiyIsIuK9pyIsIueWkiIsIuK9qCIsIueZtiIsIuK9qSIsIueZvSIsIuK9qiIsIueariIsIuK9qyIsIueavyIsIuK9rCIsIuebriIsIuK9rSIsIuefmyIsIuK9riIsIuefoiIsIuK9ryIsIuefsyIsIuK9sCIsIuekuiIsIuK9sSIsIuemuCIsIuK9siIsIuemviIsIuK9syIsIueptCIsIuK9tCIsIueriyIsIuK9tSIsIueruSIsIuK9tiIsIuexsyIsIuK9tyIsIuezuCIsIuK9uCIsIue8tiIsIuK9uSIsIue9kSIsIuK9uiIsIue+iiIsIuK9uyIsIue+vSIsIuK9vCIsIuiAgSIsIuK9vSIsIuiAjCIsIuK9viIsIuiAkiIsIuK9vyIsIuiAsyIsIuK+gCIsIuiBvyIsIuK+gSIsIuiCiSIsIuK+giIsIuiHoyIsIuK+gyIsIuiHqiIsIuK+hCIsIuiHsyIsIuK+hSIsIuiHvCIsIuK+hiIsIuiIjCIsIuK+hyIsIuiImyIsIuK+iCIsIuiInyIsIuK+iSIsIuiJriIsIuK+iiIsIuiJsiIsIuK+iyIsIuiJuCIsIuK+jCIsIuiZjSIsIuK+jSIsIuiZqyIsIuK+jiIsIuihgCIsIuK+jyIsIuihjCIsIuK+kCIsIuihoyIsIuK+kSIsIuilviIsIuK+kiIsIuimiyIsIuK+kyIsIuinkiIsIuK+lCIsIuiogCIsIuK+lSIsIuiwtyIsIuK+liIsIuixhiIsIuK+lyIsIuixlSIsIuK+mCIsIuixuCIsIuK+mSIsIuiynSIsIuK+miIsIui1pCIsIuK+myIsIui1sCIsIuK+nCIsIui2syIsIuK+nSIsIui6qyIsIuK+niIsIui7iiIsIuK+nyIsIui+myIsIuK+oCIsIui+sCIsIuK+oSIsIui+tSIsIuK+oiIsIumCkSIsIuK+oyIsIumFiSIsIuK+pCIsIumHhiIsIuK+pSIsIumHjCIsIuK+piIsIumHkSIsIuK+pyIsIumVtyIsIuK+qCIsIumWgCIsIuK+qSIsIumYnCIsIuK+qiIsIumatiIsIuK+qyIsIumauSIsIuK+rCIsIumbqCIsIuK+rSIsIumdkSIsIuK+riIsIumdniIsIuK+ryIsIumdoiIsIuK+sCIsIumdqSIsIuK+sSIsIumfiyIsIuK+siIsIumfrSIsIuK+syIsIumfsyIsIuK+tCIsIumggSIsIuK+tSIsIumiqCIsIuK+tiIsIumjmyIsIuK+tyIsIumjnyIsIuK+uCIsIummliIsIuK+uSIsIummmSIsIuK+uiIsIummrCIsIuK+uyIsIumqqCIsIuK+vCIsIumrmCIsIuK+vSIsIumrnyIsIuK+viIsIumspSIsIuK+vyIsIumsryIsIuK/gCIsIumssiIsIuK/gSIsIumsvCIsIuK/giIsIumtmiIsIuK/gyIsIumzpSIsIuK/hCIsIum5tSIsIuK/hSIsIum5vyIsIuK/hiIsIum6pSIsIuK/hyIsIum6uyIsIuK/iCIsIum7gyIsIuK/iSIsIum7jSIsIuK/iiIsIum7kSIsIuK/iyIsIum7uSIsIuK/jCIsIum7vSIsIuK/jSIsIum8jiIsIuK/jiIsIum8kyIsIuK/jyIsIum8oCIsIuK/kCIsIum8uyIsIuK/kSIsIum9iiIsIuK/kiIsIum9kiIsIuK/kyIsIum+jSIsIuK/lCIsIum+nCIsIuK/lSIsIum+oCIsIuOAtiIsIuOAkiIsIuOAuCIsIuWNgSIsIuOAuSIsIuWNhCIsIuOAuiIsIuWNhSIsIuOCmyIsIiDjgpkiLCLjgpwiLCIg44KaIiwi44SxIiwi4YSAIiwi44SyIiwi4YSBIiwi44SzIiwi4YaqIiwi44S0Iiwi4YSCIiwi44S1Iiwi4YasIiwi44S2Iiwi4YatIiwi44S3Iiwi4YSDIiwi44S4Iiwi4YSEIiwi44S5Iiwi4YSFIiwi44S6Iiwi4YawIiwi44S7Iiwi4YaxIiwi44S8Iiwi4YayIiwi44S9Iiwi4YazIiwi44S+Iiwi4Ya0Iiwi44S/Iiwi4Ya1Iiwi44WAIiwi4YSaIiwi44WBIiwi4YSGIiwi44WCIiwi4YSHIiwi44WDIiwi4YSIIiwi44WEIiwi4YShIiwi44WFIiwi4YSJIiwi44WGIiwi4YSKIiwi44WHIiwi4YSLIiwi44WIIiwi4YSMIiwi44WJIiwi4YSNIiwi44WKIiwi4YSOIiwi44WLIiwi4YSPIiwi44WMIiwi4YSQIiwi44WNIiwi4YSRIiwi44WOIiwi4YSSIiwi44WPIiwi4YWhIiwi44WQIiwi4YWiIiwi44WRIiwi4YWjIiwi44WSIiwi4YWkIiwi44WTIiwi4YWlIiwi44WUIiwi4YWmIiwi44WVIiwi4YWnIiwi44WWIiwi4YWoIiwi44WXIiwi4YWpIiwi44WYIiwi4YWqIiwi44WZIiwi4YWrIiwi44WaIiwi4YWsIiwi44WbIiwi4YWtIiwi44WcIiwi4YWuIiwi44WdIiwi4YWvIiwi44WeIiwi4YWwIiwi44WfIiwi4YWxIiwi44WgIiwi4YWyIiwi44WhIiwi4YWzIiwi44WiIiwi4YW0Iiwi44WjIiwi4YW1Iiwi44WkIiwi4YWgIiwi44WlIiwi4YSUIiwi44WmIiwi4YSVIiwi44WnIiwi4YeHIiwi44WoIiwi4YeIIiwi44WpIiwi4YeMIiwi44WqIiwi4YeOIiwi44WrIiwi4YeTIiwi44WsIiwi4YeXIiwi44WtIiwi4YeZIiwi44WuIiwi4YScIiwi44WvIiwi4YedIiwi44WwIiwi4YefIiwi44WxIiwi4YSdIiwi44WyIiwi4YSeIiwi44WzIiwi4YSgIiwi44W0Iiwi4YSiIiwi44W1Iiwi4YSjIiwi44W2Iiwi4YSnIiwi44W3Iiwi4YSpIiwi44W4Iiwi4YSrIiwi44W5Iiwi4YSsIiwi44W6Iiwi4YStIiwi44W7Iiwi4YSuIiwi44W8Iiwi4YSvIiwi44W9Iiwi4YSyIiwi44W+Iiwi4YS2Iiwi44W/Iiwi4YWAIiwi44aAIiwi4YWHIiwi44aBIiwi4YWMIiwi44aCIiwi4YexIiwi44aDIiwi4YeyIiwi44aEIiwi4YWXIiwi44aFIiwi4YWYIiwi44aGIiwi4YWZIiwi44aHIiwi4YaEIiwi44aIIiwi4YaFIiwi44aJIiwi4YaIIiwi44aKIiwi4YaRIiwi44aLIiwi4YaSIiwi44aMIiwi4YaUIiwi44aNIiwi4YaeIiwi44aOIiwi4YahIiwi44iAIiwiKOGEgCkiLCLjiIEiLCIo4YSCKSIsIuOIgiIsIijhhIMpIiwi44iDIiwiKOGEhSkiLCLjiIQiLCIo4YSGKSIsIuOIhSIsIijhhIcpIiwi44iGIiwiKOGEiSkiLCLjiIciLCIo4YSLKSIsIuOIiCIsIijhhIwpIiwi44iJIiwiKOGEjikiLCLjiIoiLCIo4YSPKSIsIuOIiyIsIijhhJApIiwi44iMIiwiKOGEkSkiLCLjiI0iLCIo4YSSKSIsIuOIjiIsIijhhIDhhaEpIiwi44iPIiwiKOGEguGFoSkiLCLjiJAiLCIo4YSD4YWhKSIsIuOIkSIsIijhhIXhhaEpIiwi44iSIiwiKOGEhuGFoSkiLCLjiJMiLCIo4YSH4YWhKSIsIuOIlCIsIijhhInhhaEpIiwi44iVIiwiKOGEi+GFoSkiLCLjiJYiLCIo4YSM4YWhKSIsIuOIlyIsIijhhI7hhaEpIiwi44iYIiwiKOGEj+GFoSkiLCLjiJkiLCIo4YSQ4YWhKSIsIuOImiIsIijhhJHhhaEpIiwi44ibIiwiKOGEkuGFoSkiLCLjiJwiLCIo4YSM4YWuKSIsIuOInSIsIijhhIvhhanhhIzhhaXhhqspIiwi44ieIiwiKOGEi+GFqeGEkuGFrikiLCLjiKAiLCIo5LiAKSIsIuOIoSIsIijkuowpIiwi44iiIiwiKOS4iSkiLCLjiKMiLCIo5ZubKSIsIuOIpCIsIijkupQpIiwi44ilIiwiKOWFrSkiLCLjiKYiLCIo5LiDKSIsIuOIpyIsIijlhaspIiwi44ioIiwiKOS5nSkiLCLjiKkiLCIo5Y2BKSIsIuOIqiIsIijmnIgpIiwi44irIiwiKOeBqykiLCLjiKwiLCIo5rC0KSIsIuOIrSIsIijmnKgpIiwi44iuIiwiKOmHkSkiLCLjiK8iLCIo5ZyfKSIsIuOIsCIsIijml6UpIiwi44ixIiwiKOagqikiLCLjiLIiLCIo5pyJKSIsIuOIsyIsIijnpL4pIiwi44i0IiwiKOWQjSkiLCLjiLUiLCIo54m5KSIsIuOItiIsIijosqEpIiwi44i3IiwiKOelnSkiLCLjiLgiLCIo5Yq0KSIsIuOIuSIsIijku6MpIiwi44i6IiwiKOWRvCkiLCLjiLsiLCIo5a2mKSIsIuOIvCIsIijnm6MpIiwi44i9IiwiKOS8gSkiLCLjiL4iLCIo6LOHKSIsIuOIvyIsIijljZQpIiwi44mAIiwiKOelrSkiLCLjiYEiLCIo5LyRKSIsIuOJgiIsIijoh6opIiwi44mDIiwiKOiHsykiLCLji4AiLCIx5pyIIiwi44uBIiwiMuaciCIsIuOLgiIsIjPmnIgiLCLji4MiLCI05pyIIiwi44uEIiwiNeaciCIsIuOLhSIsIjbmnIgiLCLji4YiLCI35pyIIiwi44uHIiwiOOaciCIsIuOLiCIsIjnmnIgiLCLji4kiLCIxMOaciCIsIuOLiiIsIjEx5pyIIiwi44uLIiwiMTLmnIgiLCLjjZgiLCIw54K5Iiwi442ZIiwiMeeCuSIsIuONmiIsIjLngrkiLCLjjZsiLCIz54K5Iiwi442cIiwiNOeCuSIsIuONnSIsIjXngrkiLCLjjZ4iLCI254K5Iiwi442fIiwiN+eCuSIsIuONoCIsIjjngrkiLCLjjaEiLCI554K5Iiwi442iIiwiMTDngrkiLCLjjaMiLCIxMeeCuSIsIuONpCIsIjEy54K5Iiwi442lIiwiMTPngrkiLCLjjaYiLCIxNOeCuSIsIuONpyIsIjE154K5Iiwi442oIiwiMTbngrkiLCLjjakiLCIxN+eCuSIsIuONqiIsIjE454K5Iiwi442rIiwiMTnngrkiLCLjjawiLCIyMOeCuSIsIuONrSIsIjIx54K5Iiwi442uIiwiMjLngrkiLCLjja8iLCIyM+eCuSIsIuONsCIsIjI054K5Iiwi44+gIiwiMeaXpSIsIuOPoSIsIjLml6UiLCLjj6IiLCIz5pelIiwi44+jIiwiNOaXpSIsIuOPpCIsIjXml6UiLCLjj6UiLCI25pelIiwi44+mIiwiN+aXpSIsIuOPpyIsIjjml6UiLCLjj6giLCI55pelIiwi44+pIiwiMTDml6UiLCLjj6oiLCIxMeaXpSIsIuOPqyIsIjEy5pelIiwi44+sIiwiMTPml6UiLCLjj60iLCIxNOaXpSIsIuOPriIsIjE15pelIiwi44+vIiwiMTbml6UiLCLjj7AiLCIxN+aXpSIsIuOPsSIsIjE45pelIiwi44+yIiwiMTnml6UiLCLjj7MiLCIyMOaXpSIsIuOPtCIsIjIx5pelIiwi44+1IiwiMjLml6UiLCLjj7YiLCIyM+aXpSIsIuOPtyIsIjI05pelIiwi44+4IiwiMjXml6UiLCLjj7kiLCIyNuaXpSIsIuOPuiIsIjI35pelIiwi44+7IiwiMjjml6UiLCLjj7wiLCIyOeaXpSIsIuOPvSIsIjMw5pelIiwi44++IiwiMzHml6UiLCLvrIAiLCJmZiIsIu+sgSIsImZpIiwi76yCIiwiZmwiLCLvrIMiLCJmZmkiLCLvrIQiLCJmZmwiLCLvrIUiLCLFv3QiLCLvrIYiLCJzdCIsIu+skyIsItW01bYiLCLvrJQiLCLVtNWlIiwi76yVIiwi1bTVqyIsIu+sliIsItW+1bYiLCLvrJciLCLVtNWtIiwi762PIiwi15DXnCIsIu+tkCIsItmxIiwi762RIiwi2bEiLCLvrZIiLCLZuyIsIu+tkyIsItm7Iiwi762UIiwi2bsiLCLvrZUiLCLZuyIsIu+tliIsItm+Iiwi762XIiwi2b4iLCLvrZgiLCLZviIsIu+tmSIsItm+Iiwi762aIiwi2oAiLCLvrZsiLCLagCIsIu+tnCIsItqAIiwi762dIiwi2oAiLCLvrZ4iLCLZuiIsIu+tnyIsItm6Iiwi762gIiwi2boiLCLvraEiLCLZuiIsIu+toiIsItm/Iiwi762jIiwi2b8iLCLvraQiLCLZvyIsIu+tpSIsItm/Iiwi762mIiwi2bkiLCLvraciLCLZuSIsIu+tqCIsItm5Iiwi762pIiwi2bkiLCLvraoiLCLapCIsIu+tqyIsItqkIiwi762sIiwi2qQiLCLvra0iLCLapCIsIu+triIsItqmIiwi762vIiwi2qYiLCLvrbAiLCLapiIsIu+tsSIsItqmIiwi762yIiwi2oQiLCLvrbMiLCLahCIsIu+ttCIsItqEIiwi7621Iiwi2oQiLCLvrbYiLCLagyIsIu+ttyIsItqDIiwi7624Iiwi2oMiLCLvrbkiLCLagyIsIu+tuiIsItqGIiwi7627Iiwi2oYiLCLvrbwiLCLahiIsIu+tvSIsItqGIiwi762+Iiwi2ociLCLvrb8iLCLahyIsIu+ugCIsItqHIiwi766BIiwi2ociLCLvroIiLCLajSIsIu+ugyIsItqNIiwi766EIiwi2owiLCLvroUiLCLajCIsIu+uhiIsItqOIiwi766HIiwi2o4iLCLvrogiLCLaiCIsIu+uiSIsItqIIiwi766KIiwi2pgiLCLvrosiLCLamCIsIu+ujCIsItqRIiwi766NIiwi2pEiLCLvro4iLCLaqSIsIu+ujyIsItqpIiwi766QIiwi2qkiLCLvrpEiLCLaqSIsIu+ukiIsItqvIiwi766TIiwi2q8iLCLvrpQiLCLaryIsIu+ulSIsItqvIiwi766WIiwi2rMiLCLvrpciLCLasyIsIu+umCIsItqzIiwi766ZIiwi2rMiLCLvrpoiLCLasSIsIu+umyIsItqxIiwi766cIiwi2rEiLCLvrp0iLCLasSIsIu+uniIsItq6Iiwi766fIiwi2roiLCLvrqAiLCLauyIsIu+uoSIsItq7Iiwi766iIiwi2rsiLCLvrqMiLCLauyIsIu+upCIsItuAIiwi766lIiwi24AiLCLvrqYiLCLbgSIsIu+upyIsItuBIiwi766oIiwi24EiLCLvrqkiLCLbgSIsIu+uqiIsItq+Iiwi766rIiwi2r4iLCLvrqwiLCLaviIsIu+urSIsItq+Iiwi766uIiwi25IiLCLvrq8iLCLbkiIsIu+usCIsItuTIiwi766xIiwi25MiLCLvr5MiLCLarSIsIu+vlCIsItqtIiwi76+VIiwi2q0iLCLvr5YiLCLarSIsIu+vlyIsItuHIiwi76+YIiwi24ciLCLvr5kiLCLbhiIsIu+vmiIsItuGIiwi76+bIiwi24giLCLvr5wiLCLbiCIsIu+vnSIsItm3Iiwi76+eIiwi24siLCLvr58iLCLbiyIsIu+voCIsItuFIiwi76+hIiwi24UiLCLvr6IiLCLbiSIsIu+voyIsItuJIiwi76+kIiwi25AiLCLvr6UiLCLbkCIsIu+vpiIsItuQIiwi76+nIiwi25AiLCLvr6giLCLZiSIsIu+vqSIsItmJIiwi76+qIiwi2KbYpyIsIu+vqyIsItim2KciLCLvr6wiLCLYptuVIiwi76+tIiwi2KbblSIsIu+vriIsItim2YgiLCLvr68iLCLYptmIIiwi76+wIiwi2KbbhyIsIu+vsSIsItim24ciLCLvr7IiLCLYptuGIiwi76+zIiwi2KbbhiIsIu+vtCIsItim24giLCLvr7UiLCLYptuIIiwi76+2Iiwi2KbbkCIsIu+vtyIsItim25AiLCLvr7giLCLYptuQIiwi76+5Iiwi2KbZiSIsIu+vuiIsItim2YkiLCLvr7siLCLYptmJIiwi76+8Iiwi24wiLCLvr70iLCLbjCIsIu+vviIsItuMIiwi76+/Iiwi24wiLCLvsIAiLCLYptisIiwi77CBIiwi2KbYrSIsIu+wgiIsItim2YUiLCLvsIMiLCLYptmJIiwi77CEIiwi2KbZiiIsIu+whSIsItio2KwiLCLvsIYiLCLYqNitIiwi77CHIiwi2KjYriIsIu+wiCIsItio2YUiLCLvsIkiLCLYqNmJIiwi77CKIiwi2KjZiiIsIu+wiyIsItiq2KwiLCLvsIwiLCLYqtitIiwi77CNIiwi2KrYriIsIu+wjiIsItiq2YUiLCLvsI8iLCLYqtmJIiwi77CQIiwi2KrZiiIsIu+wkSIsItir2KwiLCLvsJIiLCLYq9mFIiwi77CTIiwi2KvZiSIsIu+wlCIsItir2YoiLCLvsJUiLCLYrNitIiwi77CWIiwi2KzZhSIsIu+wlyIsItit2KwiLCLvsJgiLCLYrdmFIiwi77CZIiwi2K7YrCIsIu+wmiIsItiu2K0iLCLvsJsiLCLYrtmFIiwi77CcIiwi2LPYrCIsIu+wnSIsItiz2K0iLCLvsJ4iLCLYs9iuIiwi77CfIiwi2LPZhSIsIu+woCIsIti12K0iLCLvsKEiLCLYtdmFIiwi77CiIiwi2LbYrCIsIu+woyIsIti22K0iLCLvsKQiLCLYttiuIiwi77ClIiwi2LbZhSIsIu+wpiIsIti32K0iLCLvsKciLCLYt9mFIiwi77CoIiwi2LjZhSIsIu+wqSIsIti52KwiLCLvsKoiLCLYudmFIiwi77CrIiwi2LrYrCIsIu+wrCIsIti62YUiLCLvsK0iLCLZgdisIiwi77CuIiwi2YHYrSIsIu+wryIsItmB2K4iLCLvsLAiLCLZgdmFIiwi77CxIiwi2YHZiSIsIu+wsiIsItmB2YoiLCLvsLMiLCLZgtitIiwi77C0Iiwi2YLZhSIsIu+wtSIsItmC2YkiLCLvsLYiLCLZgtmKIiwi77C3Iiwi2YPYpyIsIu+wuCIsItmD2KwiLCLvsLkiLCLZg9itIiwi77C6Iiwi2YPYriIsIu+wuyIsItmD2YQiLCLvsLwiLCLZg9mFIiwi77C9Iiwi2YPZiSIsIu+wviIsItmD2YoiLCLvsL8iLCLZhNisIiwi77GAIiwi2YTYrSIsIu+xgSIsItmE2K4iLCLvsYIiLCLZhNmFIiwi77GDIiwi2YTZiSIsIu+xhCIsItmE2YoiLCLvsYUiLCLZhdisIiwi77GGIiwi2YXYrSIsIu+xhyIsItmF2K4iLCLvsYgiLCLZhdmFIiwi77GJIiwi2YXZiSIsIu+xiiIsItmF2YoiLCLvsYsiLCLZhtisIiwi77GMIiwi2YbYrSIsIu+xjSIsItmG2K4iLCLvsY4iLCLZhtmFIiwi77GPIiwi2YbZiSIsIu+xkCIsItmG2YoiLCLvsZEiLCLZh9isIiwi77GSIiwi2YfZhSIsIu+xkyIsItmH2YkiLCLvsZQiLCLZh9mKIiwi77GVIiwi2YrYrCIsIu+xliIsItmK2K0iLCLvsZciLCLZitiuIiwi77GYIiwi2YrZhSIsIu+xmSIsItmK2YkiLCLvsZoiLCLZitmKIiwi77GbIiwi2LDZsCIsIu+xnCIsItix2bAiLCLvsZ0iLCLZidmwIiwi77GeIiwiINmM2ZEiLCLvsZ8iLCIg2Y3ZkSIsIu+xoCIsIiDZjtmRIiwi77GhIiwiINmP2ZEiLCLvsaIiLCIg2ZDZkSIsIu+xoyIsIiDZkdmwIiwi77GkIiwi2KbYsSIsIu+xpSIsItim2LIiLCLvsaYiLCLYptmFIiwi77GnIiwi2KbZhiIsIu+xqCIsItim2YkiLCLvsakiLCLYptmKIiwi77GqIiwi2KjYsSIsIu+xqyIsItio2LIiLCLvsawiLCLYqNmFIiwi77GtIiwi2KjZhiIsIu+xriIsItio2YkiLCLvsa8iLCLYqNmKIiwi77GwIiwi2KrYsSIsIu+xsSIsItiq2LIiLCLvsbIiLCLYqtmFIiwi77GzIiwi2KrZhiIsIu+xtCIsItiq2YkiLCLvsbUiLCLYqtmKIiwi77G2Iiwi2KvYsSIsIu+xtyIsItir2LIiLCLvsbgiLCLYq9mFIiwi77G5Iiwi2KvZhiIsIu+xuiIsItir2YkiLCLvsbsiLCLYq9mKIiwi77G8Iiwi2YHZiSIsIu+xvSIsItmB2YoiLCLvsb4iLCLZgtmJIiwi77G/Iiwi2YLZiiIsIu+ygCIsItmD2KciLCLvsoEiLCLZg9mEIiwi77KCIiwi2YPZhSIsIu+ygyIsItmD2YkiLCLvsoQiLCLZg9mKIiwi77KFIiwi2YTZhSIsIu+yhiIsItmE2YkiLCLvsociLCLZhNmKIiwi77KIIiwi2YXYpyIsIu+yiSIsItmF2YUiLCLvsooiLCLZhtixIiwi77KLIiwi2YbYsiIsIu+yjCIsItmG2YUiLCLvso0iLCLZhtmGIiwi77KOIiwi2YbZiSIsIu+yjyIsItmG2YoiLCLvspAiLCLZidmwIiwi77KRIiwi2YrYsSIsIu+ykiIsItmK2LIiLCLvspMiLCLZitmFIiwi77KUIiwi2YrZhiIsIu+ylSIsItmK2YkiLCLvspYiLCLZitmKIiwi77KXIiwi2KbYrCIsIu+ymCIsItim2K0iLCLvspkiLCLYptiuIiwi77KaIiwi2KbZhSIsIu+ymyIsItim2YciLCLvspwiLCLYqNisIiwi77KdIiwi2KjYrSIsIu+yniIsItio2K4iLCLvsp8iLCLYqNmFIiwi77KgIiwi2KjZhyIsIu+yoSIsItiq2KwiLCLvsqIiLCLYqtitIiwi77KjIiwi2KrYriIsIu+ypCIsItiq2YUiLCLvsqUiLCLYqtmHIiwi77KmIiwi2KvZhSIsIu+ypyIsItis2K0iLCLvsqgiLCLYrNmFIiwi77KpIiwi2K3YrCIsIu+yqiIsItit2YUiLCLvsqsiLCLYrtisIiwi77KsIiwi2K7ZhSIsIu+yrSIsItiz2KwiLCLvsq4iLCLYs9itIiwi77KvIiwi2LPYriIsIu+ysCIsItiz2YUiLCLvsrEiLCLYtditIiwi77KyIiwi2LXYriIsIu+ysyIsIti12YUiLCLvsrQiLCLYttisIiwi77K1Iiwi2LbYrSIsIu+ytiIsIti22K4iLCLvsrciLCLYttmFIiwi77K4Iiwi2LfYrSIsIu+yuSIsIti42YUiLCLvsroiLCLYudisIiwi77K7Iiwi2LnZhSIsIu+yvCIsIti62KwiLCLvsr0iLCLYutmFIiwi77K+Iiwi2YHYrCIsIu+yvyIsItmB2K0iLCLvs4AiLCLZgdiuIiwi77OBIiwi2YHZhSIsIu+zgiIsItmC2K0iLCLvs4MiLCLZgtmFIiwi77OEIiwi2YPYrCIsIu+zhSIsItmD2K0iLCLvs4YiLCLZg9iuIiwi77OHIiwi2YPZhCIsIu+ziCIsItmD2YUiLCLvs4kiLCLZhNisIiwi77OKIiwi2YTYrSIsIu+ziyIsItmE2K4iLCLvs4wiLCLZhNmFIiwi77ONIiwi2YTZhyIsIu+zjiIsItmF2KwiLCLvs48iLCLZhditIiwi77OQIiwi2YXYriIsIu+zkSIsItmF2YUiLCLvs5IiLCLZhtisIiwi77OTIiwi2YbYrSIsIu+zlCIsItmG2K4iLCLvs5UiLCLZhtmFIiwi77OWIiwi2YbZhyIsIu+zlyIsItmH2KwiLCLvs5giLCLZh9mFIiwi77OZIiwi2YfZsCIsIu+zmiIsItmK2KwiLCLvs5siLCLZititIiwi77OcIiwi2YrYriIsIu+znSIsItmK2YUiLCLvs54iLCLZitmHIiwi77OfIiwi2KbZhSIsIu+zoCIsItim2YciLCLvs6EiLCLYqNmFIiwi77OiIiwi2KjZhyIsIu+zoyIsItiq2YUiLCLvs6QiLCLYqtmHIiwi77OlIiwi2KvZhSIsIu+zpiIsItir2YciLCLvs6ciLCLYs9mFIiwi77OoIiwi2LPZhyIsIu+zqSIsIti02YUiLCLvs6oiLCLYtNmHIiwi77OrIiwi2YPZhCIsIu+zrCIsItmD2YUiLCLvs60iLCLZhNmFIiwi77OuIiwi2YbZhSIsIu+zryIsItmG2YciLCLvs7AiLCLZitmFIiwi77OxIiwi2YrZhyIsIu+zsiIsItmA2Y7ZkSIsIu+zsyIsItmA2Y/ZkSIsIu+ztCIsItmA2ZDZkSIsIu+ztSIsIti32YkiLCLvs7YiLCLYt9mKIiwi77O3Iiwi2LnZiSIsIu+zuCIsIti52YoiLCLvs7kiLCLYutmJIiwi77O6Iiwi2LrZiiIsIu+zuyIsItiz2YkiLCLvs7wiLCLYs9mKIiwi77O9Iiwi2LTZiSIsIu+zviIsIti02YoiLCLvs78iLCLYrdmJIiwi77SAIiwi2K3ZiiIsIu+0gSIsItis2YkiLCLvtIIiLCLYrNmKIiwi77SDIiwi2K7ZiSIsIu+0hCIsItiu2YoiLCLvtIUiLCLYtdmJIiwi77SGIiwi2LXZiiIsIu+0hyIsIti22YkiLCLvtIgiLCLYttmKIiwi77SJIiwi2LTYrCIsIu+0iiIsIti02K0iLCLvtIsiLCLYtNiuIiwi77SMIiwi2LTZhSIsIu+0jSIsIti02LEiLCLvtI4iLCLYs9ixIiwi77SPIiwi2LXYsSIsIu+0kCIsIti22LEiLCLvtJEiLCLYt9mJIiwi77SSIiwi2LfZiiIsIu+0kyIsIti52YkiLCLvtJQiLCLYudmKIiwi77SVIiwi2LrZiSIsIu+0liIsIti62YoiLCLvtJciLCLYs9mJIiwi77SYIiwi2LPZiiIsIu+0mSIsIti02YkiLCLvtJoiLCLYtNmKIiwi77SbIiwi2K3ZiSIsIu+0nCIsItit2YoiLCLvtJ0iLCLYrNmJIiwi77SeIiwi2KzZiiIsIu+0nyIsItiu2YkiLCLvtKAiLCLYrtmKIiwi77ShIiwi2LXZiSIsIu+0oiIsIti12YoiLCLvtKMiLCLYttmJIiwi77SkIiwi2LbZiiIsIu+0pSIsIti02KwiLCLvtKYiLCLYtNitIiwi77SnIiwi2LTYriIsIu+0qCIsIti02YUiLCLvtKkiLCLYtNixIiwi77SqIiwi2LPYsSIsIu+0qyIsIti12LEiLCLvtKwiLCLYttixIiwi77StIiwi2LTYrCIsIu+0riIsIti02K0iLCLvtK8iLCLYtNiuIiwi77SwIiwi2LTZhSIsIu+0sSIsItiz2YciLCLvtLIiLCLYtNmHIiwi77SzIiwi2LfZhSIsIu+0tCIsItiz2KwiLCLvtLUiLCLYs9itIiwi77S2Iiwi2LPYriIsIu+0tyIsIti02KwiLCLvtLgiLCLYtNitIiwi77S5Iiwi2LTYriIsIu+0uiIsIti32YUiLCLvtLsiLCLYuNmFIiwi77S8Iiwi2KfZiyIsIu+0vSIsItin2YsiLCLvtZAiLCLYqtis2YUiLCLvtZEiLCLYqtit2KwiLCLvtZIiLCLYqtit2KwiLCLvtZMiLCLYqtit2YUiLCLvtZQiLCLYqtiu2YUiLCLvtZUiLCLYqtmF2KwiLCLvtZYiLCLYqtmF2K0iLCLvtZciLCLYqtmF2K4iLCLvtZgiLCLYrNmF2K0iLCLvtZkiLCLYrNmF2K0iLCLvtZoiLCLYrdmF2YoiLCLvtZsiLCLYrdmF2YkiLCLvtZwiLCLYs9it2KwiLCLvtZ0iLCLYs9is2K0iLCLvtZ4iLCLYs9is2YkiLCLvtZ8iLCLYs9mF2K0iLCLvtaAiLCLYs9mF2K0iLCLvtaEiLCLYs9mF2KwiLCLvtaIiLCLYs9mF2YUiLCLvtaMiLCLYs9mF2YUiLCLvtaQiLCLYtdit2K0iLCLvtaUiLCLYtdit2K0iLCLvtaYiLCLYtdmF2YUiLCLvtaciLCLYtNit2YUiLCLvtagiLCLYtNit2YUiLCLvtakiLCLYtNis2YoiLCLvtaoiLCLYtNmF2K4iLCLvtasiLCLYtNmF2K4iLCLvtawiLCLYtNmF2YUiLCLvta0iLCLYtNmF2YUiLCLvta4iLCLYttit2YkiLCLvta8iLCLYttiu2YUiLCLvtbAiLCLYttiu2YUiLCLvtbEiLCLYt9mF2K0iLCLvtbIiLCLYt9mF2K0iLCLvtbMiLCLYt9mF2YUiLCLvtbQiLCLYt9mF2YoiLCLvtbUiLCLYudis2YUiLCLvtbYiLCLYudmF2YUiLCLvtbciLCLYudmF2YUiLCLvtbgiLCLYudmF2YkiLCLvtbkiLCLYutmF2YUiLCLvtboiLCLYutmF2YoiLCLvtbsiLCLYutmF2YkiLCLvtbwiLCLZgdiu2YUiLCLvtb0iLCLZgdiu2YUiLCLvtb4iLCLZgtmF2K0iLCLvtb8iLCLZgtmF2YUiLCLvtoAiLCLZhNit2YUiLCLvtoEiLCLZhNit2YoiLCLvtoIiLCLZhNit2YkiLCLvtoMiLCLZhNis2KwiLCLvtoQiLCLZhNis2KwiLCLvtoUiLCLZhNiu2YUiLCLvtoYiLCLZhNiu2YUiLCLvtociLCLZhNmF2K0iLCLvtogiLCLZhNmF2K0iLCLvtokiLCLZhdit2KwiLCLvtooiLCLZhdit2YUiLCLvtosiLCLZhdit2YoiLCLvtowiLCLZhdis2K0iLCLvto0iLCLZhdis2YUiLCLvto4iLCLZhdiu2KwiLCLvto8iLCLZhdiu2YUiLCLvtpIiLCLZhdis2K4iLCLvtpMiLCLZh9mF2KwiLCLvtpQiLCLZh9mF2YUiLCLvtpUiLCLZhtit2YUiLCLvtpYiLCLZhtit2YkiLCLvtpciLCLZhtis2YUiLCLvtpgiLCLZhtis2YUiLCLvtpkiLCLZhtis2YkiLCLvtpoiLCLZhtmF2YoiLCLvtpsiLCLZhtmF2YkiLCLvtpwiLCLZitmF2YUiLCLvtp0iLCLZitmF2YUiLCLvtp4iLCLYqNiu2YoiLCLvtp8iLCLYqtis2YoiLCLvtqAiLCLYqtis2YkiLCLvtqEiLCLYqtiu2YoiLCLvtqIiLCLYqtiu2YkiLCLvtqMiLCLYqtmF2YoiLCLvtqQiLCLYqtmF2YkiLCLvtqUiLCLYrNmF2YoiLCLvtqYiLCLYrNit2YkiLCLvtqciLCLYrNmF2YkiLCLvtqgiLCLYs9iu2YkiLCLvtqkiLCLYtdit2YoiLCLvtqoiLCLYtNit2YoiLCLvtqsiLCLYttit2YoiLCLvtqwiLCLZhNis2YoiLCLvtq0iLCLZhNmF2YoiLCLvtq4iLCLZitit2YoiLCLvtq8iLCLZitis2YoiLCLvtrAiLCLZitmF2YoiLCLvtrEiLCLZhdmF2YoiLCLvtrIiLCLZgtmF2YoiLCLvtrMiLCLZhtit2YoiLCLvtrQiLCLZgtmF2K0iLCLvtrUiLCLZhNit2YUiLCLvtrYiLCLYudmF2YoiLCLvtrciLCLZg9mF2YoiLCLvtrgiLCLZhtis2K0iLCLvtrkiLCLZhdiu2YoiLCLvtroiLCLZhNis2YUiLCLvtrsiLCLZg9mF2YUiLCLvtrwiLCLZhNis2YUiLCLvtr0iLCLZhtis2K0iLCLvtr4iLCLYrNit2YoiLCLvtr8iLCLYrdis2YoiLCLvt4AiLCLZhdis2YoiLCLvt4EiLCLZgdmF2YoiLCLvt4IiLCLYqNit2YoiLCLvt4MiLCLZg9mF2YUiLCLvt4QiLCLYudis2YUiLCLvt4UiLCLYtdmF2YUiLCLvt4YiLCLYs9iu2YoiLCLvt4ciLCLZhtis2YoiLCLvuYkiLCLigL4iLCLvuYoiLCLigL4iLCLvuYsiLCLigL4iLCLvuYwiLCLigL4iLCLvuY0iLCJfIiwi77mOIiwiXyIsIu+5jyIsIl8iLCLvuoAiLCLYoSIsIu+6gSIsItiiIiwi77qCIiwi2KIiLCLvuoMiLCLYoyIsIu+6hCIsItijIiwi77qFIiwi2KQiLCLvuoYiLCLYpCIsIu+6hyIsItilIiwi77qIIiwi2KUiLCLvuokiLCLYpiIsIu+6iiIsItimIiwi77qLIiwi2KYiLCLvuowiLCLYpiIsIu+6jSIsItinIiwi77qOIiwi2KciLCLvuo8iLCLYqCIsIu+6kCIsItioIiwi77qRIiwi2KgiLCLvupIiLCLYqCIsIu+6kyIsItipIiwi77qUIiwi2KkiLCLvupUiLCLYqiIsIu+6liIsItiqIiwi77qXIiwi2KoiLCLvupgiLCLYqiIsIu+6mSIsItirIiwi77qaIiwi2KsiLCLvupsiLCLYqyIsIu+6nCIsItirIiwi77qdIiwi2KwiLCLvup4iLCLYrCIsIu+6nyIsItisIiwi77qgIiwi2KwiLCLvuqEiLCLYrSIsIu+6oiIsItitIiwi77qjIiwi2K0iLCLvuqQiLCLYrSIsIu+6pSIsItiuIiwi77qmIiwi2K4iLCLvuqciLCLYriIsIu+6qCIsItiuIiwi77qpIiwi2K8iLCLvuqoiLCLYryIsIu+6qyIsItiwIiwi77qsIiwi2LAiLCLvuq0iLCLYsSIsIu+6riIsItixIiwi77qvIiwi2LIiLCLvurAiLCLYsiIsIu+6sSIsItizIiwi77qyIiwi2LMiLCLvurMiLCLYsyIsIu+6tCIsItizIiwi77q1Iiwi2LQiLCLvurYiLCLYtCIsIu+6tyIsIti0Iiwi77q4Iiwi2LQiLCLvurkiLCLYtSIsIu+6uiIsIti1Iiwi77q7Iiwi2LUiLCLvurwiLCLYtSIsIu+6vSIsIti2Iiwi77q+Iiwi2LYiLCLvur8iLCLYtiIsIu+7gCIsIti2Iiwi77uBIiwi2LciLCLvu4IiLCLYtyIsIu+7gyIsIti3Iiwi77uEIiwi2LciLCLvu4UiLCLYuCIsIu+7hiIsIti4Iiwi77uHIiwi2LgiLCLvu4giLCLYuCIsIu+7iSIsIti5Iiwi77uKIiwi2LkiLCLvu4siLCLYuSIsIu+7jCIsIti5Iiwi77uNIiwi2LoiLCLvu44iLCLYuiIsIu+7jyIsIti6Iiwi77uQIiwi2LoiLCLvu5EiLCLZgSIsIu+7kiIsItmBIiwi77uTIiwi2YEiLCLvu5QiLCLZgSIsIu+7lSIsItmCIiwi77uWIiwi2YIiLCLvu5ciLCLZgiIsIu+7mCIsItmCIiwi77uZIiwi2YMiLCLvu5oiLCLZgyIsIu+7myIsItmDIiwi77ucIiwi2YMiLCLvu50iLCLZhCIsIu+7niIsItmEIiwi77ufIiwi2YQiLCLvu6AiLCLZhCIsIu+7oSIsItmFIiwi77uiIiwi2YUiLCLvu6MiLCLZhSIsIu+7pCIsItmFIiwi77ulIiwi2YYiLCLvu6YiLCLZhiIsIu+7pyIsItmGIiwi77uoIiwi2YYiLCLvu6kiLCLZhyIsIu+7qiIsItmHIiwi77urIiwi2YciLCLvu6wiLCLZhyIsIu+7rSIsItmIIiwi77uuIiwi2YgiLCLvu68iLCLZiSIsIu+7sCIsItmJIiwi77uxIiwi2YoiLCLvu7IiLCLZiiIsIu+7syIsItmKIiwi77u0Iiwi2YoiLCLvu7UiLCLZhNiiIiwi77u2Iiwi2YTYoiIsIu+7tyIsItmE2KMiLCLvu7giLCLZhNijIiwi77u5Iiwi2YTYpSIsIu+7uiIsItmE2KUiLCLvu7siLCLZhNinIiwi77u8Iiwi2YTYpyJdfSkpO2Z1bmN0aW9uIHJldmVyc2VJZlJ0bChlKXtjb25zdCB0PWUubGVuZ3RoO2lmKHQ8PTF8fCFmdW5jdGlvbiBpc1JUTFJhbmdlRm9yKGUpe2xldCB0PWlbMTNdO2lmKGU+PXQuYmVnaW4mJmU8dC5lbmQpcmV0dXJuITA7dD1pWzExXTtyZXR1cm4gZT49dC5iZWdpbiYmZTx0LmVuZH0oZS5jaGFyQ29kZUF0KDApKSlyZXR1cm4gZTtjb25zdCBhPVtdO2ZvcihsZXQgcj10LTE7cj49MDtyLS0pYS5wdXNoKGVbcl0pO3JldHVybiBhLmpvaW4oIiIpfWNvbnN0IG89bmV3IFJlZ0V4cCgiXihcXHMpfChcXHB7TW59KXwoXFxwe0NmfSkkIiwidSIpLGM9bmV3IE1hcDtmdW5jdGlvbiBnZXRDaGFyVW5pY29kZUNhdGVnb3J5KGUpe2NvbnN0IHQ9Yy5nZXQoZSk7aWYodClyZXR1cm4gdDtjb25zdCBhPWUubWF0Y2gobykscj17aXNXaGl0ZXNwYWNlOiEoIWF8fCFhWzFdKSxpc1plcm9XaWR0aERpYWNyaXRpYzohKCFhfHwhYVsyXSksaXNJbnZpc2libGVGb3JtYXRNYXJrOiEoIWF8fCFhWzNdKX07Yy5zZXQoZSxyKTtyZXR1cm4gcn1mdW5jdGlvbiBjbGVhclVuaWNvZGVDYWNoZXMoKXtjLmNsZWFyKCl9fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuZ2V0U2VyaWZGb250cz10LmdldE5vblN0ZEZvbnRNYXA9dC5nZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHM9dC5nZXRGb250TmFtZVRvRmlsZU1hcD12b2lkIDA7dC5nZXRTdGFuZGFyZEZvbnROYW1lPWZ1bmN0aW9uIGdldFN0YW5kYXJkRm9udE5hbWUoZSl7Y29uc3QgdD0oMCxuLm5vcm1hbGl6ZUZvbnROYW1lKShlKTtyZXR1cm4gaSgpW3RdfTt0LmdldFN5bWJvbHNGb250cz10LmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaT10LmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQXJpYWxCbGFjaz10LmdldFN0ZEZvbnRNYXA9dm9pZCAwO3ZhciByPWEoNCksbj1hKDM2KTtjb25zdCBpPSgwLHIuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZVsiVGltZXMtUm9tYW4iXT0iVGltZXMtUm9tYW4iO2UuSGVsdmV0aWNhPSJIZWx2ZXRpY2EiO2UuQ291cmllcj0iQ291cmllciI7ZS5TeW1ib2w9IlN5bWJvbCI7ZVsiVGltZXMtQm9sZCJdPSJUaW1lcy1Cb2xkIjtlWyJIZWx2ZXRpY2EtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiQ291cmllci1Cb2xkIl09IkNvdXJpZXItQm9sZCI7ZS5aYXBmRGluZ2JhdHM9IlphcGZEaW5nYmF0cyI7ZVsiVGltZXMtSXRhbGljIl09IlRpbWVzLUl0YWxpYyI7ZVsiSGVsdmV0aWNhLU9ibGlxdWUiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2VbIkNvdXJpZXItT2JsaXF1ZSJdPSJDb3VyaWVyLU9ibGlxdWUiO2VbIlRpbWVzLUJvbGRJdGFsaWMiXT0iVGltZXMtQm9sZEl0YWxpYyI7ZVsiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSI7ZVsiQ291cmllci1Cb2xkT2JsaXF1ZSJdPSJDb3VyaWVyLUJvbGRPYmxpcXVlIjtlLkFyaWFsTmFycm93PSJIZWx2ZXRpY2EiO2VbIkFyaWFsTmFycm93LUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIkFyaWFsTmFycm93LUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIjtlWyJBcmlhbE5hcnJvdy1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2UuQXJpYWxCbGFjaz0iSGVsdmV0aWNhIjtlWyJBcmlhbEJsYWNrLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIkFyaWFsQmxhY2stQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkFyaWFsQmxhY2stSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIjtlWyJBcmlhbC1CbGFjayJdPSJIZWx2ZXRpY2EiO2VbIkFyaWFsLUJsYWNrLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIkFyaWFsLUJsYWNrLUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIjtlWyJBcmlhbC1CbGFjay1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2UuQXJpYWw9IkhlbHZldGljYSI7ZVsiQXJpYWwtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiQXJpYWwtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkFyaWFsLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSI7ZS5BcmlhbE1UPSJIZWx2ZXRpY2EiO2VbIkFyaWFsLUJvbGRJdGFsaWNNVCJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkFyaWFsLUJvbGRNVCJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiQXJpYWwtSXRhbGljTVQiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2UuQXJpYWxVbmljb2RlTVM9IkhlbHZldGljYSI7ZVsiQXJpYWxVbmljb2RlTVMtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiQXJpYWxVbmljb2RlTVMtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkFyaWFsVW5pY29kZU1TLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSI7ZVsiQ291cmllci1Cb2xkSXRhbGljIl09IkNvdXJpZXItQm9sZE9ibGlxdWUiO2VbIkNvdXJpZXItSXRhbGljIl09IkNvdXJpZXItT2JsaXF1ZSI7ZS5Db3VyaWVyTmV3PSJDb3VyaWVyIjtlWyJDb3VyaWVyTmV3LUJvbGQiXT0iQ291cmllci1Cb2xkIjtlWyJDb3VyaWVyTmV3LUJvbGRJdGFsaWMiXT0iQ291cmllci1Cb2xkT2JsaXF1ZSI7ZVsiQ291cmllck5ldy1JdGFsaWMiXT0iQ291cmllci1PYmxpcXVlIjtlWyJDb3VyaWVyTmV3UFMtQm9sZEl0YWxpY01UIl09IkNvdXJpZXItQm9sZE9ibGlxdWUiO2VbIkNvdXJpZXJOZXdQUy1Cb2xkTVQiXT0iQ291cmllci1Cb2xkIjtlWyJDb3VyaWVyTmV3UFMtSXRhbGljTVQiXT0iQ291cmllci1PYmxpcXVlIjtlLkNvdXJpZXJOZXdQU01UPSJDb3VyaWVyIjtlWyJIZWx2ZXRpY2EtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkhlbHZldGljYS1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2VbIlN5bWJvbC1Cb2xkIl09IlN5bWJvbCI7ZVsiU3ltYm9sLUJvbGRJdGFsaWMiXT0iU3ltYm9sIjtlWyJTeW1ib2wtSXRhbGljIl09IlN5bWJvbCI7ZS5UaW1lc05ld1JvbWFuPSJUaW1lcy1Sb21hbiI7ZVsiVGltZXNOZXdSb21hbi1Cb2xkIl09IlRpbWVzLUJvbGQiO2VbIlRpbWVzTmV3Um9tYW4tQm9sZEl0YWxpYyJdPSJUaW1lcy1Cb2xkSXRhbGljIjtlWyJUaW1lc05ld1JvbWFuLUl0YWxpYyJdPSJUaW1lcy1JdGFsaWMiO2UuVGltZXNOZXdSb21hblBTPSJUaW1lcy1Sb21hbiI7ZVsiVGltZXNOZXdSb21hblBTLUJvbGQiXT0iVGltZXMtQm9sZCI7ZVsiVGltZXNOZXdSb21hblBTLUJvbGRJdGFsaWMiXT0iVGltZXMtQm9sZEl0YWxpYyI7ZVsiVGltZXNOZXdSb21hblBTLUJvbGRJdGFsaWNNVCJdPSJUaW1lcy1Cb2xkSXRhbGljIjtlWyJUaW1lc05ld1JvbWFuUFMtQm9sZE1UIl09IlRpbWVzLUJvbGQiO2VbIlRpbWVzTmV3Um9tYW5QUy1JdGFsaWMiXT0iVGltZXMtSXRhbGljIjtlWyJUaW1lc05ld1JvbWFuUFMtSXRhbGljTVQiXT0iVGltZXMtSXRhbGljIjtlLlRpbWVzTmV3Um9tYW5QU01UPSJUaW1lcy1Sb21hbiI7ZVsiVGltZXNOZXdSb21hblBTTVQtQm9sZCJdPSJUaW1lcy1Cb2xkIjtlWyJUaW1lc05ld1JvbWFuUFNNVC1Cb2xkSXRhbGljIl09IlRpbWVzLUJvbGRJdGFsaWMiO2VbIlRpbWVzTmV3Um9tYW5QU01ULUl0YWxpYyJdPSJUaW1lcy1JdGFsaWMifSkpO3QuZ2V0U3RkRm9udE1hcD1pO2NvbnN0IHM9KDAsci5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLkNvdXJpZXI9IkZveGl0Rml4ZWQucGZiIjtlWyJDb3VyaWVyLUJvbGQiXT0iRm94aXRGaXhlZEJvbGQucGZiIjtlWyJDb3VyaWVyLUJvbGRPYmxpcXVlIl09IkZveGl0Rml4ZWRCb2xkSXRhbGljLnBmYiI7ZVsiQ291cmllci1PYmxpcXVlIl09IkZveGl0Rml4ZWRJdGFsaWMucGZiIjtlLkhlbHZldGljYT0iRm94aXRTYW5zLnBmYiI7ZVsiSGVsdmV0aWNhLUJvbGQiXT0iRm94aXRTYW5zQm9sZC5wZmIiO2VbIkhlbHZldGljYS1Cb2xkT2JsaXF1ZSJdPSJGb3hpdFNhbnNCb2xkSXRhbGljLnBmYiI7ZVsiSGVsdmV0aWNhLU9ibGlxdWUiXT0iRm94aXRTYW5zSXRhbGljLnBmYiI7ZVsiVGltZXMtUm9tYW4iXT0iRm94aXRTZXJpZi5wZmIiO2VbIlRpbWVzLUJvbGQiXT0iRm94aXRTZXJpZkJvbGQucGZiIjtlWyJUaW1lcy1Cb2xkSXRhbGljIl09IkZveGl0U2VyaWZCb2xkSXRhbGljLnBmYiI7ZVsiVGltZXMtSXRhbGljIl09IkZveGl0U2VyaWZJdGFsaWMucGZiIjtlLlN5bWJvbD0iRm94aXRTeW1ib2wucGZiIjtlLlphcGZEaW5nYmF0cz0iRm94aXREaW5nYmF0cy5wZmIiO2VbIkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIiXT0iTGliZXJhdGlvblNhbnMtUmVndWxhci50dGYiO2VbIkxpYmVyYXRpb25TYW5zLUJvbGQiXT0iTGliZXJhdGlvblNhbnMtQm9sZC50dGYiO2VbIkxpYmVyYXRpb25TYW5zLUl0YWxpYyJdPSJMaWJlcmF0aW9uU2Fucy1JdGFsaWMudHRmIjtlWyJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljIl09IkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMudHRmIn0pKTt0LmdldEZvbnROYW1lVG9GaWxlTWFwPXM7Y29uc3Qgbz0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2UuQ2FsaWJyaT0iSGVsdmV0aWNhIjtlWyJDYWxpYnJpLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIkNhbGlicmktQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkNhbGlicmktSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIjtlLkNlbnR1cnlHb3RoaWM9IkhlbHZldGljYSI7ZVsiQ2VudHVyeUdvdGhpYy1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIjtlWyJDZW50dXJ5R290aGljLUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIjtlWyJDZW50dXJ5R290aGljLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSI7ZS5Db21pY1NhbnNNUz0iQ29taWMgU2FucyBNUyI7ZVsiQ29taWNTYW5zTVMtQm9sZCJdPSJDb21pYyBTYW5zIE1TLUJvbGQiO2VbIkNvbWljU2Fuc01TLUJvbGRJdGFsaWMiXT0iQ29taWMgU2FucyBNUy1Cb2xkSXRhbGljIjtlWyJDb21pY1NhbnNNUy1JdGFsaWMiXT0iQ29taWMgU2FucyBNUy1JdGFsaWMiO2VbIkl0Y1N5bWJvbC1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIjtlWyJJdGNTeW1ib2wtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkl0Y1N5bWJvbC1Cb29rIl09IkhlbHZldGljYSI7ZVsiSXRjU3ltYm9sLUJvb2tJdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2VbIkl0Y1N5bWJvbC1NZWRpdW0iXT0iSGVsdmV0aWNhIjtlWyJJdGNTeW1ib2wtTWVkaXVtSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIjtlLkx1Y2lkYUNvbnNvbGU9IkNvdXJpZXIiO2VbIkx1Y2lkYUNvbnNvbGUtQm9sZCJdPSJDb3VyaWVyLUJvbGQiO2VbIkx1Y2lkYUNvbnNvbGUtQm9sZEl0YWxpYyJdPSJDb3VyaWVyLUJvbGRPYmxpcXVlIjtlWyJMdWNpZGFDb25zb2xlLUl0YWxpYyJdPSJDb3VyaWVyLU9ibGlxdWUiO2VbIkx1Y2lkYVNhbnMtRGVtaSJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiTVMtR290aGljIl09Ik1TIEdvdGhpYyI7ZVsiTVMtR290aGljLUJvbGQiXT0iTVMgR290aGljLUJvbGQiO2VbIk1TLUdvdGhpYy1Cb2xkSXRhbGljIl09Ik1TIEdvdGhpYy1Cb2xkSXRhbGljIjtlWyJNUy1Hb3RoaWMtSXRhbGljIl09Ik1TIEdvdGhpYy1JdGFsaWMiO2VbIk1TLU1pbmNobyJdPSJNUyBNaW5jaG8iO2VbIk1TLU1pbmNoby1Cb2xkIl09Ik1TIE1pbmNoby1Cb2xkIjtlWyJNUy1NaW5jaG8tQm9sZEl0YWxpYyJdPSJNUyBNaW5jaG8tQm9sZEl0YWxpYyI7ZVsiTVMtTWluY2hvLUl0YWxpYyJdPSJNUyBNaW5jaG8tSXRhbGljIjtlWyJNUy1QR290aGljIl09Ik1TIFBHb3RoaWMiO2VbIk1TLVBHb3RoaWMtQm9sZCJdPSJNUyBQR290aGljLUJvbGQiO2VbIk1TLVBHb3RoaWMtQm9sZEl0YWxpYyJdPSJNUyBQR290aGljLUJvbGRJdGFsaWMiO2VbIk1TLVBHb3RoaWMtSXRhbGljIl09Ik1TIFBHb3RoaWMtSXRhbGljIjtlWyJNUy1QTWluY2hvIl09Ik1TIFBNaW5jaG8iO2VbIk1TLVBNaW5jaG8tQm9sZCJdPSJNUyBQTWluY2hvLUJvbGQiO2VbIk1TLVBNaW5jaG8tQm9sZEl0YWxpYyJdPSJNUyBQTWluY2hvLUJvbGRJdGFsaWMiO2VbIk1TLVBNaW5jaG8tSXRhbGljIl09Ik1TIFBNaW5jaG8tSXRhbGljIjtlLk51cHRpYWxTY3JpcHQ9IlRpbWVzLUl0YWxpYyI7ZS5TZWdvZVVJU3ltYm9sPSJIZWx2ZXRpY2EiO2UuV2luZ2RpbmdzPSJaYXBmRGluZ2JhdHMiO2VbIldpbmdkaW5ncy1SZWd1bGFyIl09IlphcGZEaW5nYmF0cyJ9KSk7dC5nZXROb25TdGRGb250TWFwPW87Y29uc3QgYz0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbIkFkb2JlIEplbnNvbiJdPSEwO2VbIkFkb2JlIFRleHQiXT0hMDtlLkFsYmVydHVzPSEwO2UuQWxkdXM9ITA7ZS5BbGV4YW5kcmlhPSEwO2UuQWxnZXJpYW49ITA7ZVsiQW1lcmljYW4gVHlwZXdyaXRlciJdPSEwO2UuQW50aXF1YT0hMDtlLkFwZXg9ITA7ZS5Bcm5vPSEwO2UuQXN0ZXI9ITA7ZS5BdXJvcmE9ITA7ZS5CYXNrZXJ2aWxsZT0hMDtlLkJlbGw9ITA7ZS5CZW1ibz0hMDtlWyJCZW1ibyBTY2hvb2xib29rIl09ITA7ZS5CZW5ndWlhdD0hMDtlWyJCZXJrZWxleSBPbGQgU3R5bGUiXT0hMDtlWyJCZXJuaGFyZCBNb2Rlcm4iXT0hMDtlWyJCZXJ0aG9sZCBDaXR5Il09ITA7ZS5Cb2Rvbmk9ITA7ZVsiQmF1ZXIgQm9kb25pIl09ITA7ZVsiQm9vayBBbnRpcXVhIl09ITA7ZS5Cb29rbWFuPSEwO2VbIkJvcmRlYXV4IFJvbWFuIl09ITA7ZVsiQ2FsaWZvcm5pYW4gRkIiXT0hMDtlLkNhbGlzdG89ITA7ZS5DYWx2ZXJ0PSEwO2UuQ2FwaXRhbHM9ITA7ZS5DYW1icmlhPSEwO2UuQ2FydGllcj0hMDtlLkNhc2xvbj0hMDtlLkNhdHVsbD0hMDtlLkNlbnRhdXI9ITA7ZVsiQ2VudHVyeSBPbGQgU3R5bGUiXT0hMDtlWyJDZW50dXJ5IFNjaG9vbGJvb2siXT0hMDtlLkNoYXBhcnJhbD0hMDtlWyJDaGFyaXMgU0lMIl09ITA7ZS5DaGVsdGVuaGFtPSEwO2VbIkNob2xsYSBTbGFiIl09ITA7ZS5DbGFyZW5kb249ITA7ZS5DbGVhcmZhY2U9ITA7ZS5Db2NoaW49ITA7ZS5Db2xvbm5hPSEwO2VbIkNvbXB1dGVyIE1vZGVybiJdPSEwO2VbIkNvbmNyZXRlIFJvbWFuIl09ITA7ZS5Db25zdGFudGlhPSEwO2VbIkNvb3BlciBCbGFjayJdPSEwO2UuQ29yb25hPSEwO2UuRWNvdHlwZT0hMDtlLkVneXB0aWVubmU9ITA7ZS5FbGVwaGFudD0hMDtlLkV4Y2Vsc2lvcj0hMDtlLkZhaXJmaWVsZD0hMDtlWyJGRiBTY2FsYSJdPSEwO2UuRm9sa2FyZD0hMDtlLkZvb3RsaWdodD0hMDtlLkZyZWVTZXJpZj0hMDtlWyJGcml6IFF1YWRyYXRhIl09ITA7ZS5HYXJhbW9uZD0hMDtlLkdlbnRpdW09ITA7ZS5HZW9yZ2lhPSEwO2UuR2xvdWNlc3Rlcj0hMDtlWyJHb3VkeSBPbGQgU3R5bGUiXT0hMDtlWyJHb3VkeSBTY2hvb2xib29rIl09ITA7ZVsiR291ZHkgUHJvIEZvbnQiXT0hMDtlLkdyYW5qb249ITA7ZVsiR3VhcmRpYW4gRWd5cHRpYW4iXT0hMDtlLkhlYXRoZXI9ITA7ZS5IZXJjdWxlcz0hMDtlWyJIaWdoIFRvd2VyIFRleHQiXT0hMDtlLkhpcm9zaGlnZT0hMDtlWyJIb2VmbGVyIFRleHQiXT0hMDtlWyJIdW1hbmEgU2VyaWYiXT0hMDtlLkltcHJpbnQ9ITA7ZVsiSW9uaWMgTm8uIDUiXT0hMDtlLkphbnNvbj0hMDtlLkpvYW5uYT0hMDtlLktvcmlubmE9ITA7ZS5MZXhpY29uPSEwO2UuTGliZXJhdGlvblNlcmlmPSEwO2VbIkxpYmVyYXRpb24gU2VyaWYiXT0hMDtlWyJMaW51eCBMaWJlcnRpbmUiXT0hMDtlLkxpdGVyYXR1cm5heWE9ITA7ZS5MdWNpZGE9ITA7ZVsiTHVjaWRhIEJyaWdodCJdPSEwO2UuTWVsaW9yPSEwO2UuTWVtcGhpcz0hMDtlLk1pbGxlcj0hMDtlLk1pbmlvbj0hMDtlLk1vZGVybj0hMDtlWyJNb25hIExpc2EiXT0hMDtlWyJNcnMgRWF2ZXMiXT0hMDtlWyJNUyBTZXJpZiJdPSEwO2VbIk11c2VvIFNsYWIiXT0hMDtlWyJOZXcgWW9yayJdPSEwO2VbIk5pbWJ1cyBSb21hbiJdPSEwO2VbIk5QUyBSYXdsaW5zb24gUm9hZHdheSJdPSEwO2UuTnVwdGlhbFNjcmlwdD0hMDtlLlBhbGF0aW5vPSEwO2UuUGVycGV0dWE9ITA7ZS5QbGFudGluPSEwO2VbIlBsYW50aW4gU2Nob29sYm9vayJdPSEwO2UuUGxheWJpbGw9ITA7ZVsiUG9vciBSaWNoYXJkIl09ITA7ZVsiUmF3bGluc29uIFJvYWR3YXkiXT0hMDtlLlJlbmF1bHQ9ITA7ZS5SZXF1aWVtPSEwO2UuUm9ja3dlbGw9ITA7ZS5Sb21hbj0hMDtlWyJSb3RpcyBTZXJpZiJdPSEwO2UuU2Fib249ITA7ZS5TY2FsYT0hMDtlLlNlYWd1bGw9ITA7ZS5TaXN0aW5hPSEwO2UuU291dmVuaXI9ITA7ZS5TVElYPSEwO2VbIlN0b25lIEluZm9ybWFsIl09ITA7ZVsiU3RvbmUgU2VyaWYiXT0hMDtlLlN5bGZhZW49ITA7ZS5UaW1lcz0hMDtlLlRyYWphbj0hMDtlWyJUcmluaXTDqSJdPSEwO2VbIlRydW1wIE1lZGlhZXZhbCJdPSEwO2UuVXRvcGlhPSEwO2VbIlZhbGUgVHlwZSJdPSEwO2VbIkJpdHN0cmVhbSBWZXJhIl09ITA7ZVsiVmVyYSBTZXJpZiJdPSEwO2UuVmVyc2FpbGxlcz0hMDtlLldhbnRlZD0hMDtlLldlaXNzPSEwO2VbIldpZGUgTGF0aW4iXT0hMDtlLldpbmRzb3I9ITA7ZS5YSVRTPSEwfSkpO3QuZ2V0U2VyaWZGb250cz1jO2NvbnN0IGw9KDAsci5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLkRpbmdiYXRzPSEwO2UuU3ltYm9sPSEwO2UuWmFwZkRpbmdiYXRzPSEwfSkpO3QuZ2V0U3ltYm9sc0ZvbnRzPWw7Y29uc3QgaD0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbMl09MTA7ZVszXT0zMjtlWzRdPTMzO2VbNV09MzQ7ZVs2XT0zNTtlWzddPTM2O2VbOF09Mzc7ZVs5XT0zODtlWzEwXT0zOTtlWzExXT00MDtlWzEyXT00MTtlWzEzXT00MjtlWzE0XT00MztlWzE1XT00NDtlWzE2XT00NTtlWzE3XT00NjtlWzE4XT00NztlWzE5XT00ODtlWzIwXT00OTtlWzIxXT01MDtlWzIyXT01MTtlWzIzXT01MjtlWzI0XT01MztlWzI1XT01NDtlWzI2XT01NTtlWzI3XT01NjtlWzI4XT01NztlWzI5XT01ODtlWzMwXT04OTQ7ZVszMV09NjA7ZVszMl09NjE7ZVszM109NjI7ZVszNF09NjM7ZVszNV09NjQ7ZVszNl09NjU7ZVszN109NjY7ZVszOF09Njc7ZVszOV09Njg7ZVs0MF09Njk7ZVs0MV09NzA7ZVs0Ml09NzE7ZVs0M109NzI7ZVs0NF09NzM7ZVs0NV09NzQ7ZVs0Nl09NzU7ZVs0N109NzY7ZVs0OF09Nzc7ZVs0OV09Nzg7ZVs1MF09Nzk7ZVs1MV09ODA7ZVs1Ml09ODE7ZVs1M109ODI7ZVs1NF09ODM7ZVs1NV09ODQ7ZVs1Nl09ODU7ZVs1N109ODY7ZVs1OF09ODc7ZVs1OV09ODg7ZVs2MF09ODk7ZVs2MV09OTA7ZVs2Ml09OTE7ZVs2M109OTI7ZVs2NF09OTM7ZVs2NV09OTQ7ZVs2Nl09OTU7ZVs2N109OTY7ZVs2OF09OTc7ZVs2OV09OTg7ZVs3MF09OTk7ZVs3MV09MTAwO2VbNzJdPTEwMTtlWzczXT0xMDI7ZVs3NF09MTAzO2VbNzVdPTEwNDtlWzc2XT0xMDU7ZVs3N109MTA2O2VbNzhdPTEwNztlWzc5XT0xMDg7ZVs4MF09MTA5O2VbODFdPTExMDtlWzgyXT0xMTE7ZVs4M109MTEyO2VbODRdPTExMztlWzg1XT0xMTQ7ZVs4Nl09MTE1O2VbODddPTExNjtlWzg4XT0xMTc7ZVs4OV09MTE4O2VbOTBdPTExOTtlWzkxXT0xMjA7ZVs5Ml09MTIxO2VbOTNdPTEyMjtlWzk0XT0xMjM7ZVs5NV09MTI0O2VbOTZdPTEyNTtlWzk3XT0xMjY7ZVs5OF09MTk2O2VbOTldPTE5NztlWzEwMF09MTk5O2VbMTAxXT0yMDE7ZVsxMDJdPTIwOTtlWzEwM109MjE0O2VbMTA0XT0yMjA7ZVsxMDVdPTIyNTtlWzEwNl09MjI0O2VbMTA3XT0yMjY7ZVsxMDhdPTIyODtlWzEwOV09MjI3O2VbMTEwXT0yMjk7ZVsxMTFdPTIzMTtlWzExMl09MjMzO2VbMTEzXT0yMzI7ZVsxMTRdPTIzNDtlWzExNV09MjM1O2VbMTE2XT0yMzc7ZVsxMTddPTIzNjtlWzExOF09MjM4O2VbMTE5XT0yMzk7ZVsxMjBdPTI0MTtlWzEyMV09MjQzO2VbMTIyXT0yNDI7ZVsxMjNdPTI0NDtlWzEyNF09MjQ2O2VbMTI1XT0yNDU7ZVsxMjZdPTI1MDtlWzEyN109MjQ5O2VbMTI4XT0yNTE7ZVsxMjldPTI1MjtlWzEzMF09ODIyNDtlWzEzMV09MTc2O2VbMTMyXT0xNjI7ZVsxMzNdPTE2MztlWzEzNF09MTY3O2VbMTM1XT04MjI2O2VbMTM2XT0xODI7ZVsxMzddPTIyMztlWzEzOF09MTc0O2VbMTM5XT0xNjk7ZVsxNDBdPTg0ODI7ZVsxNDFdPTE4MDtlWzE0Ml09MTY4O2VbMTQzXT04ODAwO2VbMTQ0XT0xOTg7ZVsxNDVdPTIxNjtlWzE0Nl09ODczNDtlWzE0N109MTc3O2VbMTQ4XT04ODA0O2VbMTQ5XT04ODA1O2VbMTUwXT0xNjU7ZVsxNTFdPTE4MTtlWzE1Ml09ODcwNjtlWzE1M109ODcyMTtlWzE1NF09ODcxOTtlWzE1Nl09ODc0NztlWzE1N109MTcwO2VbMTU4XT0xODY7ZVsxNTldPTg0ODY7ZVsxNjBdPTIzMDtlWzE2MV09MjQ4O2VbMTYyXT0xOTE7ZVsxNjNdPTE2MTtlWzE2NF09MTcyO2VbMTY1XT04NzMwO2VbMTY2XT00MDI7ZVsxNjddPTg3NzY7ZVsxNjhdPTg3MTA7ZVsxNjldPTE3MTtlWzE3MF09MTg3O2VbMTcxXT04MjMwO2VbMTc5XT04MjIwO2VbMTgwXT04MjIxO2VbMTgxXT04MjE2O2VbMTgyXT04MjE3O2VbMjAwXT0xOTM7ZVsyMDNdPTIwNTtlWzIxMF09MjE4O2VbMjIzXT03MTE7ZVsyMjRdPTMyMTtlWzIyNV09MzIyO2VbMjI2XT0zNTI7ZVsyMjddPTM1MztlWzIyOF09MzgxO2VbMjI5XT0zODI7ZVsyMzNdPTIyMTtlWzIzNF09MjUzO2VbMjUyXT0yNjM7ZVsyNTNdPTI2ODtlWzI1NF09MjY5O2VbMjU4XT0yNTg7ZVsyNjBdPTI2MDtlWzI2MV09MjYxO2VbMjY1XT0yODA7ZVsyNjZdPTI4MTtlWzI2N109MjgyO2VbMjY4XT0yODM7ZVsyNjldPTMxMztlWzI3NV09MzIzO2VbMjc2XT0zMjQ7ZVsyNzhdPTMyODtlWzI4M109MzQ0O2VbMjg0XT0zNDU7ZVsyODVdPTM0NjtlWzI4Nl09MzQ3O2VbMjkyXT0zNjc7ZVsyOTVdPTM3NztlWzI5Nl09Mzc4O2VbMjk4XT0zODA7ZVszMDVdPTk2MztlWzMwNl09OTY0O2VbMzA3XT05NjY7ZVszMDhdPTgyMTU7ZVszMDldPTgyNTI7ZVszMTBdPTgzMTk7ZVszMTFdPTgzNTk7ZVszMTJdPTg1OTI7ZVszMTNdPTg1OTM7ZVszMzddPTk1NTI7ZVs0OTNdPTEwMzk7ZVs0OTRdPTEwNDA7ZVs2NzJdPTE0ODg7ZVs2NzNdPTE0ODk7ZVs2NzRdPTE0OTA7ZVs2NzVdPTE0OTE7ZVs2NzZdPTE0OTI7ZVs2NzddPTE0OTM7ZVs2NzhdPTE0OTQ7ZVs2NzldPTE0OTU7ZVs2ODBdPTE0OTY7ZVs2ODFdPTE0OTc7ZVs2ODJdPTE0OTg7ZVs2ODNdPTE0OTk7ZVs2ODRdPTE1MDA7ZVs2ODVdPTE1MDE7ZVs2ODZdPTE1MDI7ZVs2ODddPTE1MDM7ZVs2ODhdPTE1MDQ7ZVs2ODldPTE1MDU7ZVs2OTBdPTE1MDY7ZVs2OTFdPTE1MDc7ZVs2OTJdPTE1MDg7ZVs2OTNdPTE1MDk7ZVs2OTRdPTE1MTA7ZVs2OTVdPTE1MTE7ZVs2OTZdPTE1MTI7ZVs2OTddPTE1MTM7ZVs2OThdPTE1MTQ7ZVs3MDVdPTE1MjQ7ZVs3MDZdPTgzNjI7ZVs3MTBdPTY0Mjg4O2VbNzExXT02NDI5ODtlWzc1OV09MTYxNztlWzc2MV09MTc3NjtlWzc2M109MTc3ODtlWzc3NV09MTY1MjtlWzc3N109MTc2NDtlWzc3OF09MTc4MDtlWzc3OV09MTc4MTtlWzc4MF09MTc4MjtlWzc4Ml09NzcxO2VbNzgzXT02NDcyNjtlWzc4Nl09ODM2MztlWzc4OF09ODUzMjtlWzc5MF09NzY4O2VbNzkxXT03Njk7ZVs3OTJdPTc2ODtlWzc5NV09ODAzO2VbNzk3XT02NDMzNjtlWzc5OF09NjQzMzc7ZVs3OTldPTY0MzQyO2VbODAwXT02NDM0MztlWzgwMV09NjQzNDQ7ZVs4MDJdPTY0MzQ1O2VbODAzXT02NDM2MjtlWzgwNF09NjQzNjM7ZVs4MDVdPTY0MzY0O2VbMjQyNF09NzgyMTtlWzI0MjVdPTc4MjI7ZVsyNDI2XT03ODIzO2VbMjQyN109NzgyNDtlWzI0MjhdPTc4MjU7ZVsyNDI5XT03ODI2O2VbMjQzMF09NzgyNztlWzI0MzNdPTc2ODI7ZVsyNjc4XT04MDQ1O2VbMjY3OV09ODA0NjtlWzI4MzBdPTE1NTI7ZVsyODM4XT02ODY7ZVsyODQwXT03NTE7ZVsyODQyXT03NTM7ZVsyODQzXT03NTQ7ZVsyODQ0XT03NTU7ZVsyODQ2XT03NTc7ZVsyODU2XT03Njc7ZVsyODU3XT04NDg7ZVsyODU4XT04NDk7ZVsyODYyXT04NTM7ZVsyODYzXT04NTQ7ZVsyODY0XT04NTU7ZVsyODY1XT04NjE7ZVsyODY2XT04NjI7ZVsyOTA2XT03NDYwO2VbMjkwOF09NzQ2MjtlWzI5MDldPTc0NjM7ZVsyOTEwXT03NDY0O2VbMjkxMl09NzQ2NjtlWzI5MTNdPTc0Njc7ZVsyOTE0XT03NDY4O2VbMjkxNl09NzQ3MDtlWzI5MTddPTc0NzE7ZVsyOTE4XT03NDcyO2VbMjkyMF09NzQ3NDtlWzI5MjFdPTc0NzU7ZVsyOTIyXT03NDc2O2VbMjkyNF09NzQ3ODtlWzI5MjVdPTc0Nzk7ZVsyOTI2XT03NDgwO2VbMjkyOF09NzQ4MjtlWzI5MjldPTc0ODM7ZVsyOTMwXT03NDg0O2VbMjkzMl09NzQ4NjtlWzI5MzNdPTc0ODc7ZVsyOTM0XT03NDg4O2VbMjkzNl09NzQ5MDtlWzI5MzddPTc0OTE7ZVsyOTM4XT03NDkyO2VbMjk0MF09NzQ5NDtlWzI5NDFdPTc0OTU7ZVsyOTQyXT03NDk2O2VbMjk0NF09NzQ5ODtlWzI5NDZdPTc1MDA7ZVsyOTQ4XT03NTAyO2VbMjk1MF09NzUwNDtlWzI5NTFdPTc1MDU7ZVsyOTUyXT03NTA2O2VbMjk1NF09NzUwODtlWzI5NTVdPTc1MDk7ZVsyOTU2XT03NTEwO2VbMjk1OF09NzUxMjtlWzI5NTldPTc1MTM7ZVsyOTYwXT03NTE0O2VbMjk2Ml09NzUxNjtlWzI5NjNdPTc1MTc7ZVsyOTY0XT03NTE4O2VbMjk2Nl09NzUyMDtlWzI5NjddPTc1MjE7ZVsyOTY4XT03NTIyO2VbMjk3MF09NzUyNDtlWzI5NzFdPTc1MjU7ZVsyOTcyXT03NTI2O2VbMjk3NF09NzUyODtlWzI5NzVdPTc1Mjk7ZVsyOTc2XT03NTMwO2VbMjk3OF09MTUzNztlWzI5NzldPTE1Mzg7ZVsyOTgwXT0xNTM5O2VbMjk4Ml09MTU0OTtlWzI5ODNdPTE1NTE7ZVsyOTg0XT0xNTUyO2VbMjk4Nl09MTU1NDtlWzI5ODddPTE1NTU7ZVsyOTg4XT0xNTU2O2VbMjk5MF09MTYyMztlWzI5OTFdPTE2MjQ7ZVsyOTk1XT0xNzc1O2VbMjk5OV09MTc5MTtlWzMwMDJdPTY0MjkwO2VbMzAwM109NjQyOTE7ZVszMDA0XT02NDI5MjtlWzMwMDZdPTY0Mjk0O2VbMzAwN109NjQyOTU7ZVszMDA4XT02NDI5NjtlWzMwMTFdPTE5MDA7ZVszMDE0XT04MjIzO2VbMzAxNV09ODI0NDtlWzMwMTddPTc1MzI7ZVszMDE4XT03NTMzO2VbMzAxOV09NzUzNDtlWzMwNzVdPTc1OTA7ZVszMDc2XT03NTkxO2VbMzA3OV09NzU5NDtlWzMwODBdPTc1OTU7ZVszMDgzXT03NTk4O2VbMzA4NF09NzU5OTtlWzMwODddPTc2MDI7ZVszMDg4XT03NjAzO2VbMzA5MV09NzYwNjtlWzMwOTJdPTc2MDc7ZVszMDk1XT03NjEwO2VbMzA5Nl09NzYxMTtlWzMwOTldPTc2MTQ7ZVszMTAwXT03NjE1O2VbMzEwM109NzYxODtlWzMxMDRdPTc2MTk7ZVszMTA3XT04MzM3O2VbMzEwOF09ODMzODtlWzMxMTZdPTE4ODQ7ZVszMTE5XT0xODg1O2VbMzEyMF09MTg4NTtlWzMxMjNdPTE4ODY7ZVszMTI0XT0xODg2O2VbMzEyN109MTg4NztlWzMxMjhdPTE4ODc7ZVszMTMxXT0xODg4O2VbMzEzMl09MTg4ODtlWzMxMzVdPTE4ODk7ZVszMTM2XT0xODg5O2VbMzEzOV09MTg5MDtlWzMxNDBdPTE4OTA7ZVszMTQzXT0xODkxO2VbMzE0NF09MTg5MTtlWzMxNDddPTE4OTI7ZVszMTQ4XT0xODkyO2VbMzE1M109NTgwO2VbMzE1NF09NTgxO2VbMzE1N109NTg0O2VbMzE1OF09NTg1O2VbMzE2MV09NTg4O2VbMzE2Ml09NTg5O2VbMzE2NV09ODkxO2VbMzE2Nl09ODkyO2VbMzE2OV09MTI3NDtlWzMxNzBdPTEyNzU7ZVszMTczXT0xMjc4O2VbMzE3NF09MTI3OTtlWzMxODFdPTc2MjI7ZVszMTgyXT03NjIzO2VbMzI4Ml09MTE3OTk7ZVszMzE2XT01Nzg7ZVszMzc5XT00Mjc4NTtlWzMzOTNdPTExNTk7ZVszNDE2XT04Mzc3fSkpO3QuZ2V0R2x5cGhNYXBGb3JTdGFuZGFyZEZvbnRzPWg7Y29uc3QgdT0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbMjI3XT0zMjI7ZVsyNjRdPTI2MTtlWzI5MV09MzQ2fSkpO3QuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JBcmlhbEJsYWNrPXU7Y29uc3QgZD0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbMV09MzI7ZVs0XT02NTtlWzVdPTE5MjtlWzZdPTE5MztlWzldPTE5NjtlWzE3XT02NjtlWzE4XT02NztlWzIxXT0yNjg7ZVsyNF09Njg7ZVsyOF09Njk7ZVsyOV09MjAwO2VbMzBdPTIwMTtlWzMyXT0yODI7ZVszOF09NzA7ZVszOV09NzE7ZVs0NF09NzI7ZVs0N109NzM7ZVs0OF09MjA0O2VbNDldPTIwNTtlWzU4XT03NDtlWzYwXT03NTtlWzYyXT03NjtlWzY4XT03NztlWzY5XT03ODtlWzc1XT03OTtlWzc2XT0yMTA7ZVs4MF09MjE0O2VbODddPTgwO2VbODldPTgxO2VbOTBdPTgyO2VbOTJdPTM0NDtlWzk0XT04MztlWzk3XT0zNTI7ZVsxMDBdPTg0O2VbMTA0XT04NTtlWzEwOV09MjIwO2VbMTE1XT04NjtlWzExNl09ODc7ZVsxMjFdPTg4O2VbMTIyXT04OTtlWzEyNF09MjIxO2VbMTI3XT05MDtlWzEyOV09MzgxO2VbMjU4XT05NztlWzI1OV09MjI0O2VbMjYwXT0yMjU7ZVsyNjNdPTIyODtlWzI2OF09MjYxO2VbMjcxXT05ODtlWzI3Ml09OTk7ZVsyNzNdPTI2MztlWzI3NV09MjY5O2VbMjgyXT0xMDA7ZVsyODZdPTEwMTtlWzI4N109MjMyO2VbMjg4XT0yMzM7ZVsyOTBdPTI4MztlWzI5NV09MjgxO2VbMjk2XT0xMDI7ZVszMzZdPTEwMztlWzM0Nl09MTA0O2VbMzQ5XT0xMDU7ZVszNTBdPTIzNjtlWzM1MV09MjM3O2VbMzYxXT0xMDY7ZVszNjRdPTEwNztlWzM2N109MTA4O2VbMzcxXT0zMjI7ZVszNzNdPTEwOTtlWzM3NF09MTEwO2VbMzgxXT0xMTE7ZVszODJdPTI0MjtlWzM4M109MjQzO2VbMzg2XT0yNDY7ZVszOTNdPTExMjtlWzM5NV09MTEzO2VbMzk2XT0xMTQ7ZVszOThdPTM0NTtlWzQwMF09MTE1O2VbNDAxXT0zNDc7ZVs0MDNdPTM1MztlWzQxMF09MTE2O2VbNDM3XT0xMTc7ZVs0NDJdPTI1MjtlWzQ0OF09MTE4O2VbNDQ5XT0xMTk7ZVs0NTRdPTEyMDtlWzQ1NV09MTIxO2VbNDU3XT0yNTM7ZVs0NjBdPTEyMjtlWzQ2Ml09MzgyO2VbNDYzXT0zODA7ZVs4NTNdPTQ0O2VbODU1XT01ODtlWzg1Nl09NDY7ZVs4NzZdPTQ3O2VbODc4XT00NTtlWzg4Ml09NDU7ZVs4OTRdPTQwO2VbODk1XT00MTtlWzg5Nl09OTE7ZVs4OTddPTkzO2VbOTIzXT02NDtlWzEwMDRdPTQ4O2VbMTAwNV09NDk7ZVsxMDA2XT01MDtlWzEwMDddPTUxO2VbMTAwOF09NTI7ZVsxMDA5XT01MztlWzEwMTBdPTU0O2VbMTAxMV09NTU7ZVsxMDEyXT01NjtlWzEwMTNdPTU3O2VbMTA4MV09Mzc7ZVsxMDg1XT00MztlWzEwODZdPTQ1fSkpO3QuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JDYWxpYnJpPWR9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Ub1VuaWNvZGVNYXA9dC5JZGVudGl0eVRvVW5pY29kZU1hcD12b2lkIDA7dmFyIHI9YSgyKTt0LlRvVW5pY29kZU1hcD1jbGFzcyBUb1VuaWNvZGVNYXB7Y29uc3RydWN0b3IoZT1bXSl7dGhpcy5fbWFwPWV9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9tYXAubGVuZ3RofWZvckVhY2goZSl7Zm9yKGNvbnN0IHQgaW4gdGhpcy5fbWFwKWUodCx0aGlzLl9tYXBbdF0uY2hhckNvZGVBdCgwKSl9aGFzKGUpe3JldHVybiB2b2lkIDAhPT10aGlzLl9tYXBbZV19Z2V0KGUpe3JldHVybiB0aGlzLl9tYXBbZV19Y2hhckNvZGVPZihlKXtjb25zdCB0PXRoaXMuX21hcDtpZih0Lmxlbmd0aDw9NjU1MzYpcmV0dXJuIHQuaW5kZXhPZihlKTtmb3IoY29uc3QgYSBpbiB0KWlmKHRbYV09PT1lKXJldHVybiAwfGE7cmV0dXJuLTF9YW1lbmQoZSl7Zm9yKGNvbnN0IHQgaW4gZSl0aGlzLl9tYXBbdF09ZVt0XX19O3QuSWRlbnRpdHlUb1VuaWNvZGVNYXA9Y2xhc3MgSWRlbnRpdHlUb1VuaWNvZGVNYXB7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmZpcnN0Q2hhcj1lO3RoaXMubGFzdENoYXI9dH1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMubGFzdENoYXIrMS10aGlzLmZpcnN0Q2hhcn1mb3JFYWNoKGUpe2ZvcihsZXQgdD10aGlzLmZpcnN0Q2hhcixhPXRoaXMubGFzdENoYXI7dDw9YTt0KyspZSh0LHQpfWhhcyhlKXtyZXR1cm4gdGhpcy5maXJzdENoYXI8PWUmJmU8PXRoaXMubGFzdENoYXJ9Z2V0KGUpe2lmKHRoaXMuZmlyc3RDaGFyPD1lJiZlPD10aGlzLmxhc3RDaGFyKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGUpfWNoYXJDb2RlT2YoZSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZSkmJmU+PXRoaXMuZmlyc3RDaGFyJiZlPD10aGlzLmxhc3RDaGFyP2U6LTF9YW1lbmQoZSl7KDAsci51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBhbWVuZCgpIil9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkNGRkZvbnQ9dm9pZCAwO3ZhciByPWEoMzMpLG49YSgzNiksaT1hKDIpO3QuQ0ZGRm9udD1jbGFzcyBDRkZGb250e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5wcm9wZXJ0aWVzPXQ7Y29uc3QgYT1uZXcgci5DRkZQYXJzZXIoZSx0LG4uU0VBQ19BTkFMWVNJU19FTkFCTEVEKTt0aGlzLmNmZj1hLnBhcnNlKCk7dGhpcy5jZmYuZHVwbGljYXRlRmlyc3RHbHlwaCgpO2NvbnN0IHM9bmV3IHIuQ0ZGQ29tcGlsZXIodGhpcy5jZmYpO3RoaXMuc2VhY3M9dGhpcy5jZmYuc2VhY3M7dHJ5e3RoaXMuZGF0YT1zLmNvbXBpbGUoKX1jYXRjaChhKXsoMCxpLndhcm4pKCJGYWlsZWQgdG8gY29tcGlsZSBmb250ICIrdC5sb2FkZWROYW1lKTt0aGlzLmRhdGE9ZX10aGlzLl9jcmVhdGVCdWlsdEluRW5jb2RpbmcoKX1nZXQgbnVtR2x5cGhzKCl7cmV0dXJuIHRoaXMuY2ZmLmNoYXJTdHJpbmdzLmNvdW50fWdldENoYXJzZXQoKXtyZXR1cm4gdGhpcy5jZmYuY2hhcnNldC5jaGFyc2V0fWdldEdseXBoTWFwcGluZygpe2NvbnN0IGU9dGhpcy5jZmYsdD10aGlzLnByb3BlcnRpZXMse2NpZFRvR2lkTWFwOmEsY01hcDpyfT10LGk9ZS5jaGFyc2V0LmNoYXJzZXQ7bGV0IHMsbztpZih0LmNvbXBvc2l0ZSl7bGV0IHQsbjtpZihhJiZhLmxlbmd0aD4wKXt0PU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGxldCBlPTAscj1hLmxlbmd0aDtlPHI7ZSsrKXtjb25zdCByPWFbZV07dm9pZCAwIT09ciYmKHRbcl09ZSl9fXM9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihlLmlzQ0lERm9udClmb3Iobz0wO288aS5sZW5ndGg7bysrKXtjb25zdCBlPWlbb107bj1yLmNoYXJDb2RlT2YoZSk7dCYmdm9pZCAwIT09dFtuXSYmKG49dFtuXSk7c1tuXT1vfWVsc2UgZm9yKG89MDtvPGUuY2hhclN0cmluZ3MuY291bnQ7bysrKXtuPXIuY2hhckNvZGVPZihvKTtzW25dPW99cmV0dXJuIHN9bGV0IGM9ZS5lbmNvZGluZz9lLmVuY29kaW5nLmVuY29kaW5nOm51bGw7dC5pc0ludGVybmFsRm9udCYmKGM9dC5kZWZhdWx0RW5jb2RpbmcpO3M9KDAsbi50eXBlMUZvbnRHbHlwaE1hcHBpbmcpKHQsYyxpKTtyZXR1cm4gc31oYXNHbHlwaElkKGUpe3JldHVybiB0aGlzLmNmZi5oYXNHbHlwaElkKGUpfV9jcmVhdGVCdWlsdEluRW5jb2RpbmcoKXtjb25zdHtjaGFyc2V0OmUsZW5jb2Rpbmc6dH09dGhpcy5jZmY7aWYoIWV8fCF0KXJldHVybjtjb25zdCBhPWUuY2hhcnNldCxyPXQuZW5jb2Rpbmcsbj1bXTtmb3IoY29uc3QgZSBpbiByKXtjb25zdCB0PXJbZV07aWYodD49MCl7Y29uc3Qgcj1hW3RdO3ImJihuW2VdPXIpfX1uLmxlbmd0aD4wJiYodGhpcy5wcm9wZXJ0aWVzLmJ1aWx0SW5FbmNvZGluZz1uKX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuRm9udFJlbmRlcmVyRmFjdG9yeT12b2lkIDA7dmFyIHI9YSgyKSxuPWEoMzMpLGk9YSgzNykscz1hKDM1KSxvPWEoOCk7ZnVuY3Rpb24gZ2V0VWludDMyKGUsdCl7cmV0dXJuKGVbdF08PDI0fGVbdCsxXTw8MTZ8ZVt0KzJdPDw4fGVbdCszXSk+Pj4wfWZ1bmN0aW9uIGdldFVpbnQxNihlLHQpe3JldHVybiBlW3RdPDw4fGVbdCsxXX1mdW5jdGlvbiBnZXRJbnQxNihlLHQpe3JldHVybihlW3RdPDwyNHxlW3QrMV08PDE2KT4+MTZ9ZnVuY3Rpb24gZ2V0SW50OChlLHQpe3JldHVybiBlW3RdPDwyND4+MjR9ZnVuY3Rpb24gZ2V0RmxvYXQyMTQoZSx0KXtyZXR1cm4gZ2V0SW50MTYoZSx0KS8xNjM4NH1mdW5jdGlvbiBnZXRTdWJyb3V0aW5lQmlhcyhlKXtjb25zdCB0PWUubGVuZ3RoO2xldCBhPTMyNzY4O3Q8MTI0MD9hPTEwNzp0PDMzOTAwJiYoYT0xMTMxKTtyZXR1cm4gYX1mdW5jdGlvbiBwYXJzZUNtYXAoZSx0LGEpe2NvbnN0IG49MT09PWdldFVpbnQxNihlLHQrMik/Z2V0VWludDMyKGUsdCs4KTpnZXRVaW50MzIoZSx0KzE2KSxpPWdldFVpbnQxNihlLHQrbik7bGV0IHMsbyxjO2lmKDQ9PT1pKXtnZXRVaW50MTYoZSx0K24rMik7Y29uc3QgYT1nZXRVaW50MTYoZSx0K24rNik+PjE7bz10K24rMTQ7cz1bXTtmb3IoYz0wO2M8YTtjKyssbys9MilzW2NdPXtlbmQ6Z2V0VWludDE2KGUsbyl9O28rPTI7Zm9yKGM9MDtjPGE7YysrLG8rPTIpc1tjXS5zdGFydD1nZXRVaW50MTYoZSxvKTtmb3IoYz0wO2M8YTtjKyssbys9MilzW2NdLmlkRGVsdGE9Z2V0VWludDE2KGUsbyk7Zm9yKGM9MDtjPGE7YysrLG8rPTIpe2xldCB0PWdldFVpbnQxNihlLG8pO2lmKDAhPT10KXtzW2NdLmlkcz1bXTtmb3IobGV0IGE9MCxyPXNbY10uZW5kLXNbY10uc3RhcnQrMTthPHI7YSsrKXtzW2NdLmlkc1thXT1nZXRVaW50MTYoZSxvK3QpO3QrPTJ9fX1yZXR1cm4gc31pZigxMj09PWkpe2NvbnN0IGE9Z2V0VWludDMyKGUsdCtuKzEyKTtvPXQrbisxNjtzPVtdO2ZvcihjPTA7YzxhO2MrKyl7dD1nZXRVaW50MzIoZSxvKTtzLnB1c2goe3N0YXJ0OnQsZW5kOmdldFVpbnQzMihlLG8rNCksaWREZWx0YTpnZXRVaW50MzIoZSxvKzgpLXR9KTtvKz0xMn1yZXR1cm4gc310aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgdW5zdXBwb3J0ZWQgY21hcDogJHtpfWApfWZ1bmN0aW9uIHBhcnNlQ2ZmKGUsdCxhLHIpe2NvbnN0IGk9bmV3IG4uQ0ZGUGFyc2VyKG5ldyBvLlN0cmVhbShlLHQsYS10KSx7fSxyKS5wYXJzZSgpO3JldHVybntnbHlwaHM6aS5jaGFyU3RyaW5ncy5vYmplY3RzLHN1YnJzOmkudG9wRGljdC5wcml2YXRlRGljdCYmaS50b3BEaWN0LnByaXZhdGVEaWN0LnN1YnJzSW5kZXgmJmkudG9wRGljdC5wcml2YXRlRGljdC5zdWJyc0luZGV4Lm9iamVjdHMsZ3N1YnJzOmkuZ2xvYmFsU3VickluZGV4JiZpLmdsb2JhbFN1YnJJbmRleC5vYmplY3RzLGlzQ0ZGQ0lERm9udDppLmlzQ0lERm9udCxmZFNlbGVjdDppLmZkU2VsZWN0LGZkQXJyYXk6aS5mZEFycmF5fX1mdW5jdGlvbiBsb29rdXBDbWFwKGUsdCl7Y29uc3QgYT10LmNvZGVQb2ludEF0KDApO2xldCByPTAsbj0wLGk9ZS5sZW5ndGgtMTtmb3IoO248aTspe2NvbnN0IHQ9bitpKzE+PjE7YTxlW3RdLnN0YXJ0P2k9dC0xOm49dH1lW25dLnN0YXJ0PD1hJiZhPD1lW25dLmVuZCYmKHI9ZVtuXS5pZERlbHRhKyhlW25dLmlkcz9lW25dLmlkc1thLWVbbl0uc3RhcnRdOmEpJjY1NTM1KTtyZXR1cm57Y2hhckNvZGU6YSxnbHlwaElkOnJ9fWZ1bmN0aW9uIGNvbXBpbGVHbHlmKGUsdCxhKXtmdW5jdGlvbiBtb3ZlVG8oZSxhKXt0LnB1c2goe2NtZDoibW92ZVRvIixhcmdzOltlLGFdfSl9ZnVuY3Rpb24gbGluZVRvKGUsYSl7dC5wdXNoKHtjbWQ6ImxpbmVUbyIsYXJnczpbZSxhXX0pfWZ1bmN0aW9uIHF1YWRyYXRpY0N1cnZlVG8oZSxhLHIsbil7dC5wdXNoKHtjbWQ6InF1YWRyYXRpY0N1cnZlVG8iLGFyZ3M6W2UsYSxyLG5dfSl9bGV0IHI9MDtjb25zdCBuPWdldEludDE2KGUscik7bGV0IGkscz0wLG89MDtyKz0xMDtpZihuPDApZG97aT1nZXRVaW50MTYoZSxyKTtjb25zdCBuPWdldFVpbnQxNihlLHIrMik7cis9NDtsZXQgYyxsO2lmKDEmaSl7aWYoMiZpKXtjPWdldEludDE2KGUscik7bD1nZXRJbnQxNihlLHIrMil9ZWxzZXtjPWdldFVpbnQxNihlLHIpO2w9Z2V0VWludDE2KGUscisyKX1yKz00fWVsc2UgaWYoMiZpKXtjPWdldEludDgoZSxyKyspO2w9Z2V0SW50OChlLHIrKyl9ZWxzZXtjPWVbcisrXTtsPWVbcisrXX1pZigyJmkpe3M9YztvPWx9ZWxzZXtzPTA7bz0wfWxldCBoPTEsdT0xLGQ9MCxmPTA7aWYoOCZpKXtoPXU9Z2V0RmxvYXQyMTQoZSxyKTtyKz0yfWVsc2UgaWYoNjQmaSl7aD1nZXRGbG9hdDIxNChlLHIpO3U9Z2V0RmxvYXQyMTQoZSxyKzIpO3IrPTR9ZWxzZSBpZigxMjgmaSl7aD1nZXRGbG9hdDIxNChlLHIpO2Q9Z2V0RmxvYXQyMTQoZSxyKzIpO2Y9Z2V0RmxvYXQyMTQoZSxyKzQpO3U9Z2V0RmxvYXQyMTQoZSxyKzYpO3IrPTh9Y29uc3QgZz1hLmdseXBoc1tuXTtpZihnKXt0LnB1c2goe2NtZDoic2F2ZSJ9LHtjbWQ6InRyYW5zZm9ybSIsYXJnczpbaCxkLGYsdSxzLG9dfSk7Y29tcGlsZUdseWYoZyx0LGEpO3QucHVzaCh7Y21kOiJyZXN0b3JlIn0pfX13aGlsZSgzMiZpKTtlbHNle2NvbnN0IHQ9W107bGV0IGEsYztmb3IoYT0wO2E8bjthKyspe3QucHVzaChnZXRVaW50MTYoZSxyKSk7cis9Mn1yKz0yK2dldFVpbnQxNihlLHIpO2NvbnN0IGw9dC5hdCgtMSkrMSxoPVtdO2Zvcig7aC5sZW5ndGg8bDspe2k9ZVtyKytdO2xldCB0PTE7OCZpJiYodCs9ZVtyKytdKTtmb3IoO3QtLSA+MDspaC5wdXNoKHtmbGFnczppfSl9Zm9yKGE9MDthPGw7YSsrKXtzd2l0Y2goMTgmaFthXS5mbGFncyl7Y2FzZSAwOnMrPWdldEludDE2KGUscik7cis9MjticmVhaztjYXNlIDI6cy09ZVtyKytdO2JyZWFrO2Nhc2UgMTg6cys9ZVtyKytdfWhbYV0ueD1zfWZvcihhPTA7YTxsO2ErKyl7c3dpdGNoKDM2JmhbYV0uZmxhZ3Mpe2Nhc2UgMDpvKz1nZXRJbnQxNihlLHIpO3IrPTI7YnJlYWs7Y2FzZSA0Om8tPWVbcisrXTticmVhaztjYXNlIDM2Om8rPWVbcisrXX1oW2FdLnk9b31sZXQgdT0wO2ZvcihyPTA7cjxuO3IrKyl7Y29uc3QgZT10W3JdLG49aC5zbGljZSh1LGUrMSk7aWYoMSZuWzBdLmZsYWdzKW4ucHVzaChuWzBdKTtlbHNlIGlmKDEmbi5hdCgtMSkuZmxhZ3Mpbi51bnNoaWZ0KG4uYXQoLTEpKTtlbHNle2NvbnN0IGU9e2ZsYWdzOjEseDooblswXS54K24uYXQoLTEpLngpLzIseTooblswXS55K24uYXQoLTEpLnkpLzJ9O24udW5zaGlmdChlKTtuLnB1c2goZSl9bW92ZVRvKG5bMF0ueCxuWzBdLnkpO2ZvcihhPTEsYz1uLmxlbmd0aDthPGM7YSsrKWlmKDEmblthXS5mbGFncylsaW5lVG8oblthXS54LG5bYV0ueSk7ZWxzZSBpZigxJm5bYSsxXS5mbGFncyl7cXVhZHJhdGljQ3VydmVUbyhuW2FdLngsblthXS55LG5bYSsxXS54LG5bYSsxXS55KTthKyt9ZWxzZSBxdWFkcmF0aWNDdXJ2ZVRvKG5bYV0ueCxuW2FdLnksKG5bYV0ueCtuW2ErMV0ueCkvMiwoblthXS55K25bYSsxXS55KS8yKTt1PWUrMX19fWZ1bmN0aW9uIGNvbXBpbGVDaGFyU3RyaW5nKGUsdCxhLG4pe2Z1bmN0aW9uIG1vdmVUbyhlLGEpe3QucHVzaCh7Y21kOiJtb3ZlVG8iLGFyZ3M6W2UsYV19KX1mdW5jdGlvbiBsaW5lVG8oZSxhKXt0LnB1c2goe2NtZDoibGluZVRvIixhcmdzOltlLGFdfSl9ZnVuY3Rpb24gYmV6aWVyQ3VydmVUbyhlLGEscixuLGkscyl7dC5wdXNoKHtjbWQ6ImJlemllckN1cnZlVG8iLGFyZ3M6W2UsYSxyLG4saSxzXX0pfWNvbnN0IGk9W107bGV0IG89MCxjPTAsbD0wOyFmdW5jdGlvbiBwYXJzZShlKXtsZXQgaD0wO2Zvcig7aDxlLmxlbmd0aDspe2xldCB1LGQsZixnLHAsbSxiLHksdyxTPSExLHg9ZVtoKytdO3N3aXRjaCh4KXtjYXNlIDE6Y2FzZSAzOmNhc2UgMTg6Y2FzZSAyMzpsKz1pLmxlbmd0aD4+MTtTPSEwO2JyZWFrO2Nhc2UgNDpjKz1pLnBvcCgpO21vdmVUbyhvLGMpO1M9ITA7YnJlYWs7Y2FzZSA1OmZvcig7aS5sZW5ndGg+MDspe28rPWkuc2hpZnQoKTtjKz1pLnNoaWZ0KCk7bGluZVRvKG8sYyl9YnJlYWs7Y2FzZSA2OmZvcig7aS5sZW5ndGg+MDspe28rPWkuc2hpZnQoKTtsaW5lVG8obyxjKTtpZigwPT09aS5sZW5ndGgpYnJlYWs7Yys9aS5zaGlmdCgpO2xpbmVUbyhvLGMpfWJyZWFrO2Nhc2UgNzpmb3IoO2kubGVuZ3RoPjA7KXtjKz1pLnNoaWZ0KCk7bGluZVRvKG8sYyk7aWYoMD09PWkubGVuZ3RoKWJyZWFrO28rPWkuc2hpZnQoKTtsaW5lVG8obyxjKX1icmVhaztjYXNlIDg6Zm9yKDtpLmxlbmd0aD4wOyl7dT1vK2kuc2hpZnQoKTtmPWMraS5zaGlmdCgpO2Q9dStpLnNoaWZ0KCk7Zz1mK2kuc2hpZnQoKTtvPWQraS5zaGlmdCgpO2M9ZytpLnNoaWZ0KCk7YmV6aWVyQ3VydmVUbyh1LGYsZCxnLG8sYyl9YnJlYWs7Y2FzZSAxMDp5PWkucG9wKCk7dz1udWxsO2lmKGEuaXNDRkZDSURGb250KXtjb25zdCBlPWEuZmRTZWxlY3QuZ2V0RkRJbmRleChuKTtpZihlPj0wJiZlPGEuZmRBcnJheS5sZW5ndGgpe2NvbnN0IHQ9YS5mZEFycmF5W2VdO2xldCByO3QucHJpdmF0ZURpY3QmJnQucHJpdmF0ZURpY3Quc3VicnNJbmRleCYmKHI9dC5wcml2YXRlRGljdC5zdWJyc0luZGV4Lm9iamVjdHMpO2lmKHIpe3krPWdldFN1YnJvdXRpbmVCaWFzKHIpO3c9clt5XX19ZWxzZSgwLHIud2FybikoIkludmFsaWQgZmQgaW5kZXggZm9yIGdseXBoIGluZGV4LiIpfWVsc2Ugdz1hLnN1YnJzW3krYS5zdWJyc0JpYXNdO3cmJnBhcnNlKHcpO2JyZWFrO2Nhc2UgMTE6cmV0dXJuO2Nhc2UgMTI6eD1lW2grK107c3dpdGNoKHgpe2Nhc2UgMzQ6dT1vK2kuc2hpZnQoKTtkPXUraS5zaGlmdCgpO3A9YytpLnNoaWZ0KCk7bz1kK2kuc2hpZnQoKTtiZXppZXJDdXJ2ZVRvKHUsYyxkLHAsbyxwKTt1PW8raS5zaGlmdCgpO2Q9dStpLnNoaWZ0KCk7bz1kK2kuc2hpZnQoKTtiZXppZXJDdXJ2ZVRvKHUscCxkLGMsbyxjKTticmVhaztjYXNlIDM1OnU9bytpLnNoaWZ0KCk7Zj1jK2kuc2hpZnQoKTtkPXUraS5zaGlmdCgpO2c9ZitpLnNoaWZ0KCk7bz1kK2kuc2hpZnQoKTtjPWcraS5zaGlmdCgpO2JlemllckN1cnZlVG8odSxmLGQsZyxvLGMpO3U9bytpLnNoaWZ0KCk7Zj1jK2kuc2hpZnQoKTtkPXUraS5zaGlmdCgpO2c9ZitpLnNoaWZ0KCk7bz1kK2kuc2hpZnQoKTtjPWcraS5zaGlmdCgpO2JlemllckN1cnZlVG8odSxmLGQsZyxvLGMpO2kucG9wKCk7YnJlYWs7Y2FzZSAzNjp1PW8raS5zaGlmdCgpO3A9YytpLnNoaWZ0KCk7ZD11K2kuc2hpZnQoKTttPXAraS5zaGlmdCgpO289ZCtpLnNoaWZ0KCk7YmV6aWVyQ3VydmVUbyh1LHAsZCxtLG8sbSk7dT1vK2kuc2hpZnQoKTtkPXUraS5zaGlmdCgpO2I9bStpLnNoaWZ0KCk7bz1kK2kuc2hpZnQoKTtiZXppZXJDdXJ2ZVRvKHUsbSxkLGIsbyxjKTticmVhaztjYXNlIDM3OmNvbnN0IGU9byx0PWM7dT1vK2kuc2hpZnQoKTtmPWMraS5zaGlmdCgpO2Q9dStpLnNoaWZ0KCk7Zz1mK2kuc2hpZnQoKTtvPWQraS5zaGlmdCgpO2M9ZytpLnNoaWZ0KCk7YmV6aWVyQ3VydmVUbyh1LGYsZCxnLG8sYyk7dT1vK2kuc2hpZnQoKTtmPWMraS5zaGlmdCgpO2Q9dStpLnNoaWZ0KCk7Zz1mK2kuc2hpZnQoKTtvPWQ7Yz1nO01hdGguYWJzKG8tZSk+TWF0aC5hYnMoYy10KT9vKz1pLnNoaWZ0KCk6Yys9aS5zaGlmdCgpO2JlemllckN1cnZlVG8odSxmLGQsZyxvLGMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYHVua25vd24gb3BlcmF0b3I6IDEyICR7eH1gKX1icmVhaztjYXNlIDE0OmlmKGkubGVuZ3RoPj00KXtjb25zdCBlPWkucG9wKCkscj1pLnBvcCgpO2M9aS5wb3AoKTtvPWkucG9wKCk7dC5wdXNoKHtjbWQ6InNhdmUifSx7Y21kOiJ0cmFuc2xhdGUiLGFyZ3M6W28sY119KTtsZXQgbj1sb29rdXBDbWFwKGEuY21hcCxTdHJpbmcuZnJvbUNoYXJDb2RlKGEuZ2x5cGhOYW1lTWFwW3MuU3RhbmRhcmRFbmNvZGluZ1tlXV0pKTtjb21waWxlQ2hhclN0cmluZyhhLmdseXBoc1tuLmdseXBoSWRdLHQsYSxuLmdseXBoSWQpO3QucHVzaCh7Y21kOiJyZXN0b3JlIn0pO249bG9va3VwQ21hcChhLmNtYXAsU3RyaW5nLmZyb21DaGFyQ29kZShhLmdseXBoTmFtZU1hcFtzLlN0YW5kYXJkRW5jb2Rpbmdbcl1dKSk7Y29tcGlsZUNoYXJTdHJpbmcoYS5nbHlwaHNbbi5nbHlwaElkXSx0LGEsbi5nbHlwaElkKX1yZXR1cm47Y2FzZSAxOTpjYXNlIDIwOmwrPWkubGVuZ3RoPj4xO2grPWwrNz4+MztTPSEwO2JyZWFrO2Nhc2UgMjE6Yys9aS5wb3AoKTtvKz1pLnBvcCgpO21vdmVUbyhvLGMpO1M9ITA7YnJlYWs7Y2FzZSAyMjpvKz1pLnBvcCgpO21vdmVUbyhvLGMpO1M9ITA7YnJlYWs7Y2FzZSAyNDpmb3IoO2kubGVuZ3RoPjI7KXt1PW8raS5zaGlmdCgpO2Y9YytpLnNoaWZ0KCk7ZD11K2kuc2hpZnQoKTtnPWYraS5zaGlmdCgpO289ZCtpLnNoaWZ0KCk7Yz1nK2kuc2hpZnQoKTtiZXppZXJDdXJ2ZVRvKHUsZixkLGcsbyxjKX1vKz1pLnNoaWZ0KCk7Yys9aS5zaGlmdCgpO2xpbmVUbyhvLGMpO2JyZWFrO2Nhc2UgMjU6Zm9yKDtpLmxlbmd0aD42Oyl7bys9aS5zaGlmdCgpO2MrPWkuc2hpZnQoKTtsaW5lVG8obyxjKX11PW8raS5zaGlmdCgpO2Y9YytpLnNoaWZ0KCk7ZD11K2kuc2hpZnQoKTtnPWYraS5zaGlmdCgpO289ZCtpLnNoaWZ0KCk7Yz1nK2kuc2hpZnQoKTtiZXppZXJDdXJ2ZVRvKHUsZixkLGcsbyxjKTticmVhaztjYXNlIDI2OmkubGVuZ3RoJTImJihvKz1pLnNoaWZ0KCkpO2Zvcig7aS5sZW5ndGg+MDspe3U9bztmPWMraS5zaGlmdCgpO2Q9dStpLnNoaWZ0KCk7Zz1mK2kuc2hpZnQoKTtvPWQ7Yz1nK2kuc2hpZnQoKTtiZXppZXJDdXJ2ZVRvKHUsZixkLGcsbyxjKX1icmVhaztjYXNlIDI3OmkubGVuZ3RoJTImJihjKz1pLnNoaWZ0KCkpO2Zvcig7aS5sZW5ndGg+MDspe3U9bytpLnNoaWZ0KCk7Zj1jO2Q9dStpLnNoaWZ0KCk7Zz1mK2kuc2hpZnQoKTtvPWQraS5zaGlmdCgpO2M9ZztiZXppZXJDdXJ2ZVRvKHUsZixkLGcsbyxjKX1icmVhaztjYXNlIDI4OmkucHVzaCgoZVtoXTw8MjR8ZVtoKzFdPDwxNik+PjE2KTtoKz0yO2JyZWFrO2Nhc2UgMjk6eT1pLnBvcCgpK2EuZ3N1YnJzQmlhczt3PWEuZ3N1YnJzW3ldO3cmJnBhcnNlKHcpO2JyZWFrO2Nhc2UgMzA6Zm9yKDtpLmxlbmd0aD4wOyl7dT1vO2Y9YytpLnNoaWZ0KCk7ZD11K2kuc2hpZnQoKTtnPWYraS5zaGlmdCgpO289ZCtpLnNoaWZ0KCk7Yz1nKygxPT09aS5sZW5ndGg/aS5zaGlmdCgpOjApO2JlemllckN1cnZlVG8odSxmLGQsZyxvLGMpO2lmKDA9PT1pLmxlbmd0aClicmVhazt1PW8raS5zaGlmdCgpO2Y9YztkPXUraS5zaGlmdCgpO2c9ZitpLnNoaWZ0KCk7Yz1nK2kuc2hpZnQoKTtvPWQrKDE9PT1pLmxlbmd0aD9pLnNoaWZ0KCk6MCk7YmV6aWVyQ3VydmVUbyh1LGYsZCxnLG8sYyl9YnJlYWs7Y2FzZSAzMTpmb3IoO2kubGVuZ3RoPjA7KXt1PW8raS5zaGlmdCgpO2Y9YztkPXUraS5zaGlmdCgpO2c9ZitpLnNoaWZ0KCk7Yz1nK2kuc2hpZnQoKTtvPWQrKDE9PT1pLmxlbmd0aD9pLnNoaWZ0KCk6MCk7YmV6aWVyQ3VydmVUbyh1LGYsZCxnLG8sYyk7aWYoMD09PWkubGVuZ3RoKWJyZWFrO3U9bztmPWMraS5zaGlmdCgpO2Q9dStpLnNoaWZ0KCk7Zz1mK2kuc2hpZnQoKTtvPWQraS5zaGlmdCgpO2M9ZysoMT09PWkubGVuZ3RoP2kuc2hpZnQoKTowKTtiZXppZXJDdXJ2ZVRvKHUsZixkLGcsbyxjKX1icmVhaztkZWZhdWx0OmlmKHg8MzIpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYHVua25vd24gb3BlcmF0b3I6ICR7eH1gKTtpZih4PDI0NylpLnB1c2goeC0xMzkpO2Vsc2UgaWYoeDwyNTEpaS5wdXNoKDI1NiooeC0yNDcpK2VbaCsrXSsxMDgpO2Vsc2UgaWYoeDwyNTUpaS5wdXNoKDI1NiotKHgtMjUxKS1lW2grK10tMTA4KTtlbHNle2kucHVzaCgoZVtoXTw8MjR8ZVtoKzFdPDwxNnxlW2grMl08PDh8ZVtoKzNdKS82NTUzNik7aCs9NH19UyYmKGkubGVuZ3RoPTApfX0oZSl9Y29uc3QgYz1bXTtjbGFzcyBDb21waWxlZEZvbnR7Y29uc3RydWN0b3IoZSl7dGhpcy5jb25zdHJ1Y3Rvcj09PUNvbXBpbGVkRm9udCYmKDAsci51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIENvbXBpbGVkRm9udC4iKTt0aGlzLmZvbnRNYXRyaXg9ZTt0aGlzLmNvbXBpbGVkR2x5cGhzPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkPU9iamVjdC5jcmVhdGUobnVsbCl9Z2V0UGF0aEpzKGUpe2NvbnN0e2NoYXJDb2RlOnQsZ2x5cGhJZDphfT1sb29rdXBDbWFwKHRoaXMuY21hcCxlKTtsZXQgcj10aGlzLmNvbXBpbGVkR2x5cGhzW2FdO2lmKCFyKXRyeXtyPXRoaXMuY29tcGlsZUdseXBoKHRoaXMuZ2x5cGhzW2FdLGEpO3RoaXMuY29tcGlsZWRHbHlwaHNbYV09cn1jYXRjaChlKXt0aGlzLmNvbXBpbGVkR2x5cGhzW2FdPWM7dm9pZCAwPT09dGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkW3RdJiYodGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkW3RdPWEpO3Rocm93IGV9dm9pZCAwPT09dGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkW3RdJiYodGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkW3RdPWEpO3JldHVybiByfWNvbXBpbGVHbHlwaChlLHQpe2lmKCFlfHwwPT09ZS5sZW5ndGh8fDE0PT09ZVswXSlyZXR1cm4gYztsZXQgYT10aGlzLmZvbnRNYXRyaXg7aWYodGhpcy5pc0NGRkNJREZvbnQpe2NvbnN0IGU9dGhpcy5mZFNlbGVjdC5nZXRGREluZGV4KHQpO2lmKGU+PTAmJmU8dGhpcy5mZEFycmF5Lmxlbmd0aCl7YT10aGlzLmZkQXJyYXlbZV0uZ2V0QnlOYW1lKCJGb250TWF0cml4Iil8fHIuRk9OVF9JREVOVElUWV9NQVRSSVh9ZWxzZSgwLHIud2FybikoIkludmFsaWQgZmQgaW5kZXggZm9yIGdseXBoIGluZGV4LiIpfWNvbnN0IG49W3tjbWQ6InNhdmUifSx7Y21kOiJ0cmFuc2Zvcm0iLGFyZ3M6YS5zbGljZSgpfSx7Y21kOiJzY2FsZSIsYXJnczpbInNpemUiLCItc2l6ZSJdfV07dGhpcy5jb21waWxlR2x5cGhJbXBsKGUsbix0KTtuLnB1c2goe2NtZDoicmVzdG9yZSJ9KTtyZXR1cm4gbn1jb21waWxlR2x5cGhJbXBsKCl7KDAsci51bnJlYWNoYWJsZSkoIkNoaWxkcmVuIGNsYXNzZXMgc2hvdWxkIGltcGxlbWVudCB0aGlzLiIpfWhhc0J1aWx0UGF0aChlKXtjb25zdHtjaGFyQ29kZTp0LGdseXBoSWQ6YX09bG9va3VwQ21hcCh0aGlzLmNtYXAsZSk7cmV0dXJuIHZvaWQgMCE9PXRoaXMuY29tcGlsZWRHbHlwaHNbYV0mJnZvaWQgMCE9PXRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZFt0XX19Y2xhc3MgVHJ1ZVR5cGVDb21waWxlZCBleHRlbmRzIENvbXBpbGVkRm9udHtjb25zdHJ1Y3RvcihlLHQsYSl7c3VwZXIoYXx8WzQ4OGUtNiwwLDAsNDg4ZS02LDAsMF0pO3RoaXMuZ2x5cGhzPWU7dGhpcy5jbWFwPXR9Y29tcGlsZUdseXBoSW1wbChlLHQpe2NvbXBpbGVHbHlmKGUsdCx0aGlzKX19Y2xhc3MgVHlwZTJDb21waWxlZCBleHRlbmRzIENvbXBpbGVkRm9udHtjb25zdHJ1Y3RvcihlLHQsYSxyKXtzdXBlcihhfHxbLjAwMSwwLDAsLjAwMSwwLDBdKTt0aGlzLmdseXBocz1lLmdseXBoczt0aGlzLmdzdWJycz1lLmdzdWJyc3x8W107dGhpcy5zdWJycz1lLnN1YnJzfHxbXTt0aGlzLmNtYXA9dDt0aGlzLmdseXBoTmFtZU1hcD1yfHwoMCxpLmdldEdseXBoc1VuaWNvZGUpKCk7dGhpcy5nc3VicnNCaWFzPWdldFN1YnJvdXRpbmVCaWFzKHRoaXMuZ3N1YnJzKTt0aGlzLnN1YnJzQmlhcz1nZXRTdWJyb3V0aW5lQmlhcyh0aGlzLnN1YnJzKTt0aGlzLmlzQ0ZGQ0lERm9udD1lLmlzQ0ZGQ0lERm9udDt0aGlzLmZkU2VsZWN0PWUuZmRTZWxlY3Q7dGhpcy5mZEFycmF5PWUuZmRBcnJheX1jb21waWxlR2x5cGhJbXBsKGUsdCxhKXtjb21waWxlQ2hhclN0cmluZyhlLHQsdGhpcyxhKX19dC5Gb250UmVuZGVyZXJGYWN0b3J5PWNsYXNzIEZvbnRSZW5kZXJlckZhY3Rvcnl7c3RhdGljIGNyZWF0ZShlLHQpe2NvbnN0IGE9bmV3IFVpbnQ4QXJyYXkoZS5kYXRhKTtsZXQgbixpLHMsbyxjLGw7Y29uc3QgaD1nZXRVaW50MTYoYSw0KTtmb3IobGV0IGU9MCx1PTEyO2U8aDtlKyssdSs9MTYpe2NvbnN0IGU9KDAsci5ieXRlc1RvU3RyaW5nKShhLnN1YmFycmF5KHUsdSs0KSksaD1nZXRVaW50MzIoYSx1KzgpLGQ9Z2V0VWludDMyKGEsdSsxMik7c3dpdGNoKGUpe2Nhc2UiY21hcCI6bj1wYXJzZUNtYXAoYSxoKTticmVhaztjYXNlImdseWYiOmk9YS5zdWJhcnJheShoLGgrZCk7YnJlYWs7Y2FzZSJsb2NhIjpzPWEuc3ViYXJyYXkoaCxoK2QpO2JyZWFrO2Nhc2UiaGVhZCI6bD1nZXRVaW50MTYoYSxoKzE4KTtjPWdldFVpbnQxNihhLGgrNTApO2JyZWFrO2Nhc2UiQ0ZGICI6bz1wYXJzZUNmZihhLGgsaCtkLHQpfX1pZihpKXtjb25zdCB0PWw/WzEvbCwwLDAsMS9sLDAsMF06ZS5mb250TWF0cml4O3JldHVybiBuZXcgVHJ1ZVR5cGVDb21waWxlZChmdW5jdGlvbiBwYXJzZUdseWZUYWJsZShlLHQsYSl7bGV0IHIsbjtpZihhKXtyPTQ7bj1nZXRVaW50MzJ9ZWxzZXtyPTI7bj0oZSx0KT0+MipnZXRVaW50MTYoZSx0KX1jb25zdCBpPVtdO2xldCBzPW4odCwwKTtmb3IobGV0IGE9cjthPHQubGVuZ3RoO2ErPXIpe2NvbnN0IHI9bih0LGEpO2kucHVzaChlLnN1YmFycmF5KHMscikpO3M9cn1yZXR1cm4gaX0oaSxzLGMpLG4sdCl9cmV0dXJuIG5ldyBUeXBlMkNvbXBpbGVkKG8sbixlLmZvbnRNYXRyaXgsZS5nbHlwaE5hbWVNYXApfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5nZXRNZXRyaWNzPXQuZ2V0Rm9udEJhc2ljTWV0cmljcz12b2lkIDA7dmFyIHI9YSg0KTtjb25zdCBuPSgwLHIuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5Db3VyaWVyPTYwMDtlWyJDb3VyaWVyLUJvbGQiXT02MDA7ZVsiQ291cmllci1Cb2xkT2JsaXF1ZSJdPTYwMDtlWyJDb3VyaWVyLU9ibGlxdWUiXT02MDA7ZS5IZWx2ZXRpY2E9KDAsci5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI3ODtlLmV4Y2xhbT0yNzg7ZS5xdW90ZWRibD0zNTU7ZS5udW1iZXJzaWduPTU1NjtlLmRvbGxhcj01NTY7ZS5wZXJjZW50PTg4OTtlLmFtcGVyc2FuZD02Njc7ZS5xdW90ZXJpZ2h0PTIyMjtlLnBhcmVubGVmdD0zMzM7ZS5wYXJlbnJpZ2h0PTMzMztlLmFzdGVyaXNrPTM4OTtlLnBsdXM9NTg0O2UuY29tbWE9Mjc4O2UuaHlwaGVuPTMzMztlLnBlcmlvZD0yNzg7ZS5zbGFzaD0yNzg7ZS56ZXJvPTU1NjtlLm9uZT01NTY7ZS50d289NTU2O2UudGhyZWU9NTU2O2UuZm91cj01NTY7ZS5maXZlPTU1NjtlLnNpeD01NTY7ZS5zZXZlbj01NTY7ZS5laWdodD01NTY7ZS5uaW5lPTU1NjtlLmNvbG9uPTI3ODtlLnNlbWljb2xvbj0yNzg7ZS5sZXNzPTU4NDtlLmVxdWFsPTU4NDtlLmdyZWF0ZXI9NTg0O2UucXVlc3Rpb249NTU2O2UuYXQ9MTAxNTtlLkE9NjY3O2UuQj02Njc7ZS5DPTcyMjtlLkQ9NzIyO2UuRT02Njc7ZS5GPTYxMTtlLkc9Nzc4O2UuSD03MjI7ZS5JPTI3ODtlLko9NTAwO2UuSz02Njc7ZS5MPTU1NjtlLk09ODMzO2UuTj03MjI7ZS5PPTc3ODtlLlA9NjY3O2UuUT03Nzg7ZS5SPTcyMjtlLlM9NjY3O2UuVD02MTE7ZS5VPTcyMjtlLlY9NjY3O2UuVz05NDQ7ZS5YPTY2NztlLlk9NjY3O2UuWj02MTE7ZS5icmFja2V0bGVmdD0yNzg7ZS5iYWNrc2xhc2g9Mjc4O2UuYnJhY2tldHJpZ2h0PTI3ODtlLmFzY2lpY2lyY3VtPTQ2OTtlLnVuZGVyc2NvcmU9NTU2O2UucXVvdGVsZWZ0PTIyMjtlLmE9NTU2O2UuYj01NTY7ZS5jPTUwMDtlLmQ9NTU2O2UuZT01NTY7ZS5mPTI3ODtlLmc9NTU2O2UuaD01NTY7ZS5pPTIyMjtlLmo9MjIyO2Uuaz01MDA7ZS5sPTIyMjtlLm09ODMzO2Uubj01NTY7ZS5vPTU1NjtlLnA9NTU2O2UucT01NTY7ZS5yPTMzMztlLnM9NTAwO2UudD0yNzg7ZS51PTU1NjtlLnY9NTAwO2Uudz03MjI7ZS54PTUwMDtlLnk9NTAwO2Uuej01MDA7ZS5icmFjZWxlZnQ9MzM0O2UuYmFyPTI2MDtlLmJyYWNlcmlnaHQ9MzM0O2UuYXNjaWl0aWxkZT01ODQ7ZS5leGNsYW1kb3duPTMzMztlLmNlbnQ9NTU2O2Uuc3Rlcmxpbmc9NTU2O2UuZnJhY3Rpb249MTY3O2UueWVuPTU1NjtlLmZsb3Jpbj01NTY7ZS5zZWN0aW9uPTU1NjtlLmN1cnJlbmN5PTU1NjtlLnF1b3Rlc2luZ2xlPTE5MTtlLnF1b3RlZGJsbGVmdD0zMzM7ZS5ndWlsbGVtb3RsZWZ0PTU1NjtlLmd1aWxzaW5nbGxlZnQ9MzMzO2UuZ3VpbHNpbmdscmlnaHQ9MzMzO2UuZmk9NTAwO2UuZmw9NTAwO2UuZW5kYXNoPTU1NjtlLmRhZ2dlcj01NTY7ZS5kYWdnZXJkYmw9NTU2O2UucGVyaW9kY2VudGVyZWQ9Mjc4O2UucGFyYWdyYXBoPTUzNztlLmJ1bGxldD0zNTA7ZS5xdW90ZXNpbmdsYmFzZT0yMjI7ZS5xdW90ZWRibGJhc2U9MzMzO2UucXVvdGVkYmxyaWdodD0zMzM7ZS5ndWlsbGVtb3RyaWdodD01NTY7ZS5lbGxpcHNpcz0xZTM7ZS5wZXJ0aG91c2FuZD0xZTM7ZS5xdWVzdGlvbmRvd249NjExO2UuZ3JhdmU9MzMzO2UuYWN1dGU9MzMzO2UuY2lyY3VtZmxleD0zMzM7ZS50aWxkZT0zMzM7ZS5tYWNyb249MzMzO2UuYnJldmU9MzMzO2UuZG90YWNjZW50PTMzMztlLmRpZXJlc2lzPTMzMztlLnJpbmc9MzMzO2UuY2VkaWxsYT0zMzM7ZS5odW5nYXJ1bWxhdXQ9MzMzO2Uub2dvbmVrPTMzMztlLmNhcm9uPTMzMztlLmVtZGFzaD0xZTM7ZS5BRT0xZTM7ZS5vcmRmZW1pbmluZT0zNzA7ZS5Mc2xhc2g9NTU2O2UuT3NsYXNoPTc3ODtlLk9FPTFlMztlLm9yZG1hc2N1bGluZT0zNjU7ZS5hZT04ODk7ZS5kb3RsZXNzaT0yNzg7ZS5sc2xhc2g9MjIyO2Uub3NsYXNoPTYxMTtlLm9lPTk0NDtlLmdlcm1hbmRibHM9NjExO2UuSWRpZXJlc2lzPTI3ODtlLmVhY3V0ZT01NTY7ZS5hYnJldmU9NTU2O2UudWh1bmdhcnVtbGF1dD01NTY7ZS5lY2Fyb249NTU2O2UuWWRpZXJlc2lzPTY2NztlLmRpdmlkZT01ODQ7ZS5ZYWN1dGU9NjY3O2UuQWNpcmN1bWZsZXg9NjY3O2UuYWFjdXRlPTU1NjtlLlVjaXJjdW1mbGV4PTcyMjtlLnlhY3V0ZT01MDA7ZS5zY29tbWFhY2NlbnQ9NTAwO2UuZWNpcmN1bWZsZXg9NTU2O2UuVXJpbmc9NzIyO2UuVWRpZXJlc2lzPTcyMjtlLmFvZ29uZWs9NTU2O2UuVWFjdXRlPTcyMjtlLnVvZ29uZWs9NTU2O2UuRWRpZXJlc2lzPTY2NztlLkRjcm9hdD03MjI7ZS5jb21tYWFjY2VudD0yNTA7ZS5jb3B5cmlnaHQ9NzM3O2UuRW1hY3Jvbj02Njc7ZS5jY2Fyb249NTAwO2UuYXJpbmc9NTU2O2UuTmNvbW1hYWNjZW50PTcyMjtlLmxhY3V0ZT0yMjI7ZS5hZ3JhdmU9NTU2O2UuVGNvbW1hYWNjZW50PTYxMTtlLkNhY3V0ZT03MjI7ZS5hdGlsZGU9NTU2O2UuRWRvdGFjY2VudD02Njc7ZS5zY2Fyb249NTAwO2Uuc2NlZGlsbGE9NTAwO2UuaWFjdXRlPTI3ODtlLmxvemVuZ2U9NDcxO2UuUmNhcm9uPTcyMjtlLkdjb21tYWFjY2VudD03Nzg7ZS51Y2lyY3VtZmxleD01NTY7ZS5hY2lyY3VtZmxleD01NTY7ZS5BbWFjcm9uPTY2NztlLnJjYXJvbj0zMzM7ZS5jY2VkaWxsYT01MDA7ZS5aZG90YWNjZW50PTYxMTtlLlRob3JuPTY2NztlLk9tYWNyb249Nzc4O2UuUmFjdXRlPTcyMjtlLlNhY3V0ZT02Njc7ZS5kY2Fyb249NjQzO2UuVW1hY3Jvbj03MjI7ZS51cmluZz01NTY7ZS50aHJlZXN1cGVyaW9yPTMzMztlLk9ncmF2ZT03Nzg7ZS5BZ3JhdmU9NjY3O2UuQWJyZXZlPTY2NztlLm11bHRpcGx5PTU4NDtlLnVhY3V0ZT01NTY7ZS5UY2Fyb249NjExO2UucGFydGlhbGRpZmY9NDc2O2UueWRpZXJlc2lzPTUwMDtlLk5hY3V0ZT03MjI7ZS5pY2lyY3VtZmxleD0yNzg7ZS5FY2lyY3VtZmxleD02Njc7ZS5hZGllcmVzaXM9NTU2O2UuZWRpZXJlc2lzPTU1NjtlLmNhY3V0ZT01MDA7ZS5uYWN1dGU9NTU2O2UudW1hY3Jvbj01NTY7ZS5OY2Fyb249NzIyO2UuSWFjdXRlPTI3ODtlLnBsdXNtaW51cz01ODQ7ZS5icm9rZW5iYXI9MjYwO2UucmVnaXN0ZXJlZD03Mzc7ZS5HYnJldmU9Nzc4O2UuSWRvdGFjY2VudD0yNzg7ZS5zdW1tYXRpb249NjAwO2UuRWdyYXZlPTY2NztlLnJhY3V0ZT0zMzM7ZS5vbWFjcm9uPTU1NjtlLlphY3V0ZT02MTE7ZS5aY2Fyb249NjExO2UuZ3JlYXRlcmVxdWFsPTU0OTtlLkV0aD03MjI7ZS5DY2VkaWxsYT03MjI7ZS5sY29tbWFhY2NlbnQ9MjIyO2UudGNhcm9uPTMxNztlLmVvZ29uZWs9NTU2O2UuVW9nb25laz03MjI7ZS5BYWN1dGU9NjY3O2UuQWRpZXJlc2lzPTY2NztlLmVncmF2ZT01NTY7ZS56YWN1dGU9NTAwO2UuaW9nb25laz0yMjI7ZS5PYWN1dGU9Nzc4O2Uub2FjdXRlPTU1NjtlLmFtYWNyb249NTU2O2Uuc2FjdXRlPTUwMDtlLmlkaWVyZXNpcz0yNzg7ZS5PY2lyY3VtZmxleD03Nzg7ZS5VZ3JhdmU9NzIyO2UuRGVsdGE9NjEyO2UudGhvcm49NTU2O2UudHdvc3VwZXJpb3I9MzMzO2UuT2RpZXJlc2lzPTc3ODtlLm11PTU1NjtlLmlncmF2ZT0yNzg7ZS5vaHVuZ2FydW1sYXV0PTU1NjtlLkVvZ29uZWs9NjY3O2UuZGNyb2F0PTU1NjtlLnRocmVlcXVhcnRlcnM9ODM0O2UuU2NlZGlsbGE9NjY3O2UubGNhcm9uPTI5OTtlLktjb21tYWFjY2VudD02Njc7ZS5MYWN1dGU9NTU2O2UudHJhZGVtYXJrPTFlMztlLmVkb3RhY2NlbnQ9NTU2O2UuSWdyYXZlPTI3ODtlLkltYWNyb249Mjc4O2UuTGNhcm9uPTU1NjtlLm9uZWhhbGY9ODM0O2UubGVzc2VxdWFsPTU0OTtlLm9jaXJjdW1mbGV4PTU1NjtlLm50aWxkZT01NTY7ZS5VaHVuZ2FydW1sYXV0PTcyMjtlLkVhY3V0ZT02Njc7ZS5lbWFjcm9uPTU1NjtlLmdicmV2ZT01NTY7ZS5vbmVxdWFydGVyPTgzNDtlLlNjYXJvbj02Njc7ZS5TY29tbWFhY2NlbnQ9NjY3O2UuT2h1bmdhcnVtbGF1dD03Nzg7ZS5kZWdyZWU9NDAwO2Uub2dyYXZlPTU1NjtlLkNjYXJvbj03MjI7ZS51Z3JhdmU9NTU2O2UucmFkaWNhbD00NTM7ZS5EY2Fyb249NzIyO2UucmNvbW1hYWNjZW50PTMzMztlLk50aWxkZT03MjI7ZS5vdGlsZGU9NTU2O2UuUmNvbW1hYWNjZW50PTcyMjtlLkxjb21tYWFjY2VudD01NTY7ZS5BdGlsZGU9NjY3O2UuQW9nb25laz02Njc7ZS5BcmluZz02Njc7ZS5PdGlsZGU9Nzc4O2UuemRvdGFjY2VudD01MDA7ZS5FY2Fyb249NjY3O2UuSW9nb25laz0yNzg7ZS5rY29tbWFhY2NlbnQ9NTAwO2UubWludXM9NTg0O2UuSWNpcmN1bWZsZXg9Mjc4O2UubmNhcm9uPTU1NjtlLnRjb21tYWFjY2VudD0yNzg7ZS5sb2dpY2Fsbm90PTU4NDtlLm9kaWVyZXNpcz01NTY7ZS51ZGllcmVzaXM9NTU2O2Uubm90ZXF1YWw9NTQ5O2UuZ2NvbW1hYWNjZW50PTU1NjtlLmV0aD01NTY7ZS56Y2Fyb249NTAwO2UubmNvbW1hYWNjZW50PTU1NjtlLm9uZXN1cGVyaW9yPTMzMztlLmltYWNyb249Mjc4O2UuRXVybz01NTZ9KSk7ZVsiSGVsdmV0aWNhLUJvbGQiXT0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9Mjc4O2UuZXhjbGFtPTMzMztlLnF1b3RlZGJsPTQ3NDtlLm51bWJlcnNpZ249NTU2O2UuZG9sbGFyPTU1NjtlLnBlcmNlbnQ9ODg5O2UuYW1wZXJzYW5kPTcyMjtlLnF1b3RlcmlnaHQ9Mjc4O2UucGFyZW5sZWZ0PTMzMztlLnBhcmVucmlnaHQ9MzMzO2UuYXN0ZXJpc2s9Mzg5O2UucGx1cz01ODQ7ZS5jb21tYT0yNzg7ZS5oeXBoZW49MzMzO2UucGVyaW9kPTI3ODtlLnNsYXNoPTI3ODtlLnplcm89NTU2O2Uub25lPTU1NjtlLnR3bz01NTY7ZS50aHJlZT01NTY7ZS5mb3VyPTU1NjtlLmZpdmU9NTU2O2Uuc2l4PTU1NjtlLnNldmVuPTU1NjtlLmVpZ2h0PTU1NjtlLm5pbmU9NTU2O2UuY29sb249MzMzO2Uuc2VtaWNvbG9uPTMzMztlLmxlc3M9NTg0O2UuZXF1YWw9NTg0O2UuZ3JlYXRlcj01ODQ7ZS5xdWVzdGlvbj02MTE7ZS5hdD05NzU7ZS5BPTcyMjtlLkI9NzIyO2UuQz03MjI7ZS5EPTcyMjtlLkU9NjY3O2UuRj02MTE7ZS5HPTc3ODtlLkg9NzIyO2UuST0yNzg7ZS5KPTU1NjtlLks9NzIyO2UuTD02MTE7ZS5NPTgzMztlLk49NzIyO2UuTz03Nzg7ZS5QPTY2NztlLlE9Nzc4O2UuUj03MjI7ZS5TPTY2NztlLlQ9NjExO2UuVT03MjI7ZS5WPTY2NztlLlc9OTQ0O2UuWD02Njc7ZS5ZPTY2NztlLlo9NjExO2UuYnJhY2tldGxlZnQ9MzMzO2UuYmFja3NsYXNoPTI3ODtlLmJyYWNrZXRyaWdodD0zMzM7ZS5hc2NpaWNpcmN1bT01ODQ7ZS51bmRlcnNjb3JlPTU1NjtlLnF1b3RlbGVmdD0yNzg7ZS5hPTU1NjtlLmI9NjExO2UuYz01NTY7ZS5kPTYxMTtlLmU9NTU2O2UuZj0zMzM7ZS5nPTYxMTtlLmg9NjExO2UuaT0yNzg7ZS5qPTI3ODtlLms9NTU2O2UubD0yNzg7ZS5tPTg4OTtlLm49NjExO2Uubz02MTE7ZS5wPTYxMTtlLnE9NjExO2Uucj0zODk7ZS5zPTU1NjtlLnQ9MzMzO2UudT02MTE7ZS52PTU1NjtlLnc9Nzc4O2UueD01NTY7ZS55PTU1NjtlLno9NTAwO2UuYnJhY2VsZWZ0PTM4OTtlLmJhcj0yODA7ZS5icmFjZXJpZ2h0PTM4OTtlLmFzY2lpdGlsZGU9NTg0O2UuZXhjbGFtZG93bj0zMzM7ZS5jZW50PTU1NjtlLnN0ZXJsaW5nPTU1NjtlLmZyYWN0aW9uPTE2NztlLnllbj01NTY7ZS5mbG9yaW49NTU2O2Uuc2VjdGlvbj01NTY7ZS5jdXJyZW5jeT01NTY7ZS5xdW90ZXNpbmdsZT0yMzg7ZS5xdW90ZWRibGxlZnQ9NTAwO2UuZ3VpbGxlbW90bGVmdD01NTY7ZS5ndWlsc2luZ2xsZWZ0PTMzMztlLmd1aWxzaW5nbHJpZ2h0PTMzMztlLmZpPTYxMTtlLmZsPTYxMTtlLmVuZGFzaD01NTY7ZS5kYWdnZXI9NTU2O2UuZGFnZ2VyZGJsPTU1NjtlLnBlcmlvZGNlbnRlcmVkPTI3ODtlLnBhcmFncmFwaD01NTY7ZS5idWxsZXQ9MzUwO2UucXVvdGVzaW5nbGJhc2U9Mjc4O2UucXVvdGVkYmxiYXNlPTUwMDtlLnF1b3RlZGJscmlnaHQ9NTAwO2UuZ3VpbGxlbW90cmlnaHQ9NTU2O2UuZWxsaXBzaXM9MWUzO2UucGVydGhvdXNhbmQ9MWUzO2UucXVlc3Rpb25kb3duPTYxMTtlLmdyYXZlPTMzMztlLmFjdXRlPTMzMztlLmNpcmN1bWZsZXg9MzMzO2UudGlsZGU9MzMzO2UubWFjcm9uPTMzMztlLmJyZXZlPTMzMztlLmRvdGFjY2VudD0zMzM7ZS5kaWVyZXNpcz0zMzM7ZS5yaW5nPTMzMztlLmNlZGlsbGE9MzMzO2UuaHVuZ2FydW1sYXV0PTMzMztlLm9nb25laz0zMzM7ZS5jYXJvbj0zMzM7ZS5lbWRhc2g9MWUzO2UuQUU9MWUzO2Uub3JkZmVtaW5pbmU9MzcwO2UuTHNsYXNoPTYxMTtlLk9zbGFzaD03Nzg7ZS5PRT0xZTM7ZS5vcmRtYXNjdWxpbmU9MzY1O2UuYWU9ODg5O2UuZG90bGVzc2k9Mjc4O2UubHNsYXNoPTI3ODtlLm9zbGFzaD02MTE7ZS5vZT05NDQ7ZS5nZXJtYW5kYmxzPTYxMTtlLklkaWVyZXNpcz0yNzg7ZS5lYWN1dGU9NTU2O2UuYWJyZXZlPTU1NjtlLnVodW5nYXJ1bWxhdXQ9NjExO2UuZWNhcm9uPTU1NjtlLllkaWVyZXNpcz02Njc7ZS5kaXZpZGU9NTg0O2UuWWFjdXRlPTY2NztlLkFjaXJjdW1mbGV4PTcyMjtlLmFhY3V0ZT01NTY7ZS5VY2lyY3VtZmxleD03MjI7ZS55YWN1dGU9NTU2O2Uuc2NvbW1hYWNjZW50PTU1NjtlLmVjaXJjdW1mbGV4PTU1NjtlLlVyaW5nPTcyMjtlLlVkaWVyZXNpcz03MjI7ZS5hb2dvbmVrPTU1NjtlLlVhY3V0ZT03MjI7ZS51b2dvbmVrPTYxMTtlLkVkaWVyZXNpcz02Njc7ZS5EY3JvYXQ9NzIyO2UuY29tbWFhY2NlbnQ9MjUwO2UuY29weXJpZ2h0PTczNztlLkVtYWNyb249NjY3O2UuY2Nhcm9uPTU1NjtlLmFyaW5nPTU1NjtlLk5jb21tYWFjY2VudD03MjI7ZS5sYWN1dGU9Mjc4O2UuYWdyYXZlPTU1NjtlLlRjb21tYWFjY2VudD02MTE7ZS5DYWN1dGU9NzIyO2UuYXRpbGRlPTU1NjtlLkVkb3RhY2NlbnQ9NjY3O2Uuc2Nhcm9uPTU1NjtlLnNjZWRpbGxhPTU1NjtlLmlhY3V0ZT0yNzg7ZS5sb3plbmdlPTQ5NDtlLlJjYXJvbj03MjI7ZS5HY29tbWFhY2NlbnQ9Nzc4O2UudWNpcmN1bWZsZXg9NjExO2UuYWNpcmN1bWZsZXg9NTU2O2UuQW1hY3Jvbj03MjI7ZS5yY2Fyb249Mzg5O2UuY2NlZGlsbGE9NTU2O2UuWmRvdGFjY2VudD02MTE7ZS5UaG9ybj02Njc7ZS5PbWFjcm9uPTc3ODtlLlJhY3V0ZT03MjI7ZS5TYWN1dGU9NjY3O2UuZGNhcm9uPTc0MztlLlVtYWNyb249NzIyO2UudXJpbmc9NjExO2UudGhyZWVzdXBlcmlvcj0zMzM7ZS5PZ3JhdmU9Nzc4O2UuQWdyYXZlPTcyMjtlLkFicmV2ZT03MjI7ZS5tdWx0aXBseT01ODQ7ZS51YWN1dGU9NjExO2UuVGNhcm9uPTYxMTtlLnBhcnRpYWxkaWZmPTQ5NDtlLnlkaWVyZXNpcz01NTY7ZS5OYWN1dGU9NzIyO2UuaWNpcmN1bWZsZXg9Mjc4O2UuRWNpcmN1bWZsZXg9NjY3O2UuYWRpZXJlc2lzPTU1NjtlLmVkaWVyZXNpcz01NTY7ZS5jYWN1dGU9NTU2O2UubmFjdXRlPTYxMTtlLnVtYWNyb249NjExO2UuTmNhcm9uPTcyMjtlLklhY3V0ZT0yNzg7ZS5wbHVzbWludXM9NTg0O2UuYnJva2VuYmFyPTI4MDtlLnJlZ2lzdGVyZWQ9NzM3O2UuR2JyZXZlPTc3ODtlLklkb3RhY2NlbnQ9Mjc4O2Uuc3VtbWF0aW9uPTYwMDtlLkVncmF2ZT02Njc7ZS5yYWN1dGU9Mzg5O2Uub21hY3Jvbj02MTE7ZS5aYWN1dGU9NjExO2UuWmNhcm9uPTYxMTtlLmdyZWF0ZXJlcXVhbD01NDk7ZS5FdGg9NzIyO2UuQ2NlZGlsbGE9NzIyO2UubGNvbW1hYWNjZW50PTI3ODtlLnRjYXJvbj0zODk7ZS5lb2dvbmVrPTU1NjtlLlVvZ29uZWs9NzIyO2UuQWFjdXRlPTcyMjtlLkFkaWVyZXNpcz03MjI7ZS5lZ3JhdmU9NTU2O2UuemFjdXRlPTUwMDtlLmlvZ29uZWs9Mjc4O2UuT2FjdXRlPTc3ODtlLm9hY3V0ZT02MTE7ZS5hbWFjcm9uPTU1NjtlLnNhY3V0ZT01NTY7ZS5pZGllcmVzaXM9Mjc4O2UuT2NpcmN1bWZsZXg9Nzc4O2UuVWdyYXZlPTcyMjtlLkRlbHRhPTYxMjtlLnRob3JuPTYxMTtlLnR3b3N1cGVyaW9yPTMzMztlLk9kaWVyZXNpcz03Nzg7ZS5tdT02MTE7ZS5pZ3JhdmU9Mjc4O2Uub2h1bmdhcnVtbGF1dD02MTE7ZS5Fb2dvbmVrPTY2NztlLmRjcm9hdD02MTE7ZS50aHJlZXF1YXJ0ZXJzPTgzNDtlLlNjZWRpbGxhPTY2NztlLmxjYXJvbj00MDA7ZS5LY29tbWFhY2NlbnQ9NzIyO2UuTGFjdXRlPTYxMTtlLnRyYWRlbWFyaz0xZTM7ZS5lZG90YWNjZW50PTU1NjtlLklncmF2ZT0yNzg7ZS5JbWFjcm9uPTI3ODtlLkxjYXJvbj02MTE7ZS5vbmVoYWxmPTgzNDtlLmxlc3NlcXVhbD01NDk7ZS5vY2lyY3VtZmxleD02MTE7ZS5udGlsZGU9NjExO2UuVWh1bmdhcnVtbGF1dD03MjI7ZS5FYWN1dGU9NjY3O2UuZW1hY3Jvbj01NTY7ZS5nYnJldmU9NjExO2Uub25lcXVhcnRlcj04MzQ7ZS5TY2Fyb249NjY3O2UuU2NvbW1hYWNjZW50PTY2NztlLk9odW5nYXJ1bWxhdXQ9Nzc4O2UuZGVncmVlPTQwMDtlLm9ncmF2ZT02MTE7ZS5DY2Fyb249NzIyO2UudWdyYXZlPTYxMTtlLnJhZGljYWw9NTQ5O2UuRGNhcm9uPTcyMjtlLnJjb21tYWFjY2VudD0zODk7ZS5OdGlsZGU9NzIyO2Uub3RpbGRlPTYxMTtlLlJjb21tYWFjY2VudD03MjI7ZS5MY29tbWFhY2NlbnQ9NjExO2UuQXRpbGRlPTcyMjtlLkFvZ29uZWs9NzIyO2UuQXJpbmc9NzIyO2UuT3RpbGRlPTc3ODtlLnpkb3RhY2NlbnQ9NTAwO2UuRWNhcm9uPTY2NztlLklvZ29uZWs9Mjc4O2Uua2NvbW1hYWNjZW50PTU1NjtlLm1pbnVzPTU4NDtlLkljaXJjdW1mbGV4PTI3ODtlLm5jYXJvbj02MTE7ZS50Y29tbWFhY2NlbnQ9MzMzO2UubG9naWNhbG5vdD01ODQ7ZS5vZGllcmVzaXM9NjExO2UudWRpZXJlc2lzPTYxMTtlLm5vdGVxdWFsPTU0OTtlLmdjb21tYWFjY2VudD02MTE7ZS5ldGg9NjExO2UuemNhcm9uPTUwMDtlLm5jb21tYWFjY2VudD02MTE7ZS5vbmVzdXBlcmlvcj0zMzM7ZS5pbWFjcm9uPTI3ODtlLkV1cm89NTU2fSkpO2VbIkhlbHZldGljYS1Cb2xkT2JsaXF1ZSJdPSgwLHIuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNzg7ZS5leGNsYW09MzMzO2UucXVvdGVkYmw9NDc0O2UubnVtYmVyc2lnbj01NTY7ZS5kb2xsYXI9NTU2O2UucGVyY2VudD04ODk7ZS5hbXBlcnNhbmQ9NzIyO2UucXVvdGVyaWdodD0yNzg7ZS5wYXJlbmxlZnQ9MzMzO2UucGFyZW5yaWdodD0zMzM7ZS5hc3Rlcmlzaz0zODk7ZS5wbHVzPTU4NDtlLmNvbW1hPTI3ODtlLmh5cGhlbj0zMzM7ZS5wZXJpb2Q9Mjc4O2Uuc2xhc2g9Mjc4O2UuemVybz01NTY7ZS5vbmU9NTU2O2UudHdvPTU1NjtlLnRocmVlPTU1NjtlLmZvdXI9NTU2O2UuZml2ZT01NTY7ZS5zaXg9NTU2O2Uuc2V2ZW49NTU2O2UuZWlnaHQ9NTU2O2UubmluZT01NTY7ZS5jb2xvbj0zMzM7ZS5zZW1pY29sb249MzMzO2UubGVzcz01ODQ7ZS5lcXVhbD01ODQ7ZS5ncmVhdGVyPTU4NDtlLnF1ZXN0aW9uPTYxMTtlLmF0PTk3NTtlLkE9NzIyO2UuQj03MjI7ZS5DPTcyMjtlLkQ9NzIyO2UuRT02Njc7ZS5GPTYxMTtlLkc9Nzc4O2UuSD03MjI7ZS5JPTI3ODtlLko9NTU2O2UuSz03MjI7ZS5MPTYxMTtlLk09ODMzO2UuTj03MjI7ZS5PPTc3ODtlLlA9NjY3O2UuUT03Nzg7ZS5SPTcyMjtlLlM9NjY3O2UuVD02MTE7ZS5VPTcyMjtlLlY9NjY3O2UuVz05NDQ7ZS5YPTY2NztlLlk9NjY3O2UuWj02MTE7ZS5icmFja2V0bGVmdD0zMzM7ZS5iYWNrc2xhc2g9Mjc4O2UuYnJhY2tldHJpZ2h0PTMzMztlLmFzY2lpY2lyY3VtPTU4NDtlLnVuZGVyc2NvcmU9NTU2O2UucXVvdGVsZWZ0PTI3ODtlLmE9NTU2O2UuYj02MTE7ZS5jPTU1NjtlLmQ9NjExO2UuZT01NTY7ZS5mPTMzMztlLmc9NjExO2UuaD02MTE7ZS5pPTI3ODtlLmo9Mjc4O2Uuaz01NTY7ZS5sPTI3ODtlLm09ODg5O2Uubj02MTE7ZS5vPTYxMTtlLnA9NjExO2UucT02MTE7ZS5yPTM4OTtlLnM9NTU2O2UudD0zMzM7ZS51PTYxMTtlLnY9NTU2O2Uudz03Nzg7ZS54PTU1NjtlLnk9NTU2O2Uuej01MDA7ZS5icmFjZWxlZnQ9Mzg5O2UuYmFyPTI4MDtlLmJyYWNlcmlnaHQ9Mzg5O2UuYXNjaWl0aWxkZT01ODQ7ZS5leGNsYW1kb3duPTMzMztlLmNlbnQ9NTU2O2Uuc3Rlcmxpbmc9NTU2O2UuZnJhY3Rpb249MTY3O2UueWVuPTU1NjtlLmZsb3Jpbj01NTY7ZS5zZWN0aW9uPTU1NjtlLmN1cnJlbmN5PTU1NjtlLnF1b3Rlc2luZ2xlPTIzODtlLnF1b3RlZGJsbGVmdD01MDA7ZS5ndWlsbGVtb3RsZWZ0PTU1NjtlLmd1aWxzaW5nbGxlZnQ9MzMzO2UuZ3VpbHNpbmdscmlnaHQ9MzMzO2UuZmk9NjExO2UuZmw9NjExO2UuZW5kYXNoPTU1NjtlLmRhZ2dlcj01NTY7ZS5kYWdnZXJkYmw9NTU2O2UucGVyaW9kY2VudGVyZWQ9Mjc4O2UucGFyYWdyYXBoPTU1NjtlLmJ1bGxldD0zNTA7ZS5xdW90ZXNpbmdsYmFzZT0yNzg7ZS5xdW90ZWRibGJhc2U9NTAwO2UucXVvdGVkYmxyaWdodD01MDA7ZS5ndWlsbGVtb3RyaWdodD01NTY7ZS5lbGxpcHNpcz0xZTM7ZS5wZXJ0aG91c2FuZD0xZTM7ZS5xdWVzdGlvbmRvd249NjExO2UuZ3JhdmU9MzMzO2UuYWN1dGU9MzMzO2UuY2lyY3VtZmxleD0zMzM7ZS50aWxkZT0zMzM7ZS5tYWNyb249MzMzO2UuYnJldmU9MzMzO2UuZG90YWNjZW50PTMzMztlLmRpZXJlc2lzPTMzMztlLnJpbmc9MzMzO2UuY2VkaWxsYT0zMzM7ZS5odW5nYXJ1bWxhdXQ9MzMzO2Uub2dvbmVrPTMzMztlLmNhcm9uPTMzMztlLmVtZGFzaD0xZTM7ZS5BRT0xZTM7ZS5vcmRmZW1pbmluZT0zNzA7ZS5Mc2xhc2g9NjExO2UuT3NsYXNoPTc3ODtlLk9FPTFlMztlLm9yZG1hc2N1bGluZT0zNjU7ZS5hZT04ODk7ZS5kb3RsZXNzaT0yNzg7ZS5sc2xhc2g9Mjc4O2Uub3NsYXNoPTYxMTtlLm9lPTk0NDtlLmdlcm1hbmRibHM9NjExO2UuSWRpZXJlc2lzPTI3ODtlLmVhY3V0ZT01NTY7ZS5hYnJldmU9NTU2O2UudWh1bmdhcnVtbGF1dD02MTE7ZS5lY2Fyb249NTU2O2UuWWRpZXJlc2lzPTY2NztlLmRpdmlkZT01ODQ7ZS5ZYWN1dGU9NjY3O2UuQWNpcmN1bWZsZXg9NzIyO2UuYWFjdXRlPTU1NjtlLlVjaXJjdW1mbGV4PTcyMjtlLnlhY3V0ZT01NTY7ZS5zY29tbWFhY2NlbnQ9NTU2O2UuZWNpcmN1bWZsZXg9NTU2O2UuVXJpbmc9NzIyO2UuVWRpZXJlc2lzPTcyMjtlLmFvZ29uZWs9NTU2O2UuVWFjdXRlPTcyMjtlLnVvZ29uZWs9NjExO2UuRWRpZXJlc2lzPTY2NztlLkRjcm9hdD03MjI7ZS5jb21tYWFjY2VudD0yNTA7ZS5jb3B5cmlnaHQ9NzM3O2UuRW1hY3Jvbj02Njc7ZS5jY2Fyb249NTU2O2UuYXJpbmc9NTU2O2UuTmNvbW1hYWNjZW50PTcyMjtlLmxhY3V0ZT0yNzg7ZS5hZ3JhdmU9NTU2O2UuVGNvbW1hYWNjZW50PTYxMTtlLkNhY3V0ZT03MjI7ZS5hdGlsZGU9NTU2O2UuRWRvdGFjY2VudD02Njc7ZS5zY2Fyb249NTU2O2Uuc2NlZGlsbGE9NTU2O2UuaWFjdXRlPTI3ODtlLmxvemVuZ2U9NDk0O2UuUmNhcm9uPTcyMjtlLkdjb21tYWFjY2VudD03Nzg7ZS51Y2lyY3VtZmxleD02MTE7ZS5hY2lyY3VtZmxleD01NTY7ZS5BbWFjcm9uPTcyMjtlLnJjYXJvbj0zODk7ZS5jY2VkaWxsYT01NTY7ZS5aZG90YWNjZW50PTYxMTtlLlRob3JuPTY2NztlLk9tYWNyb249Nzc4O2UuUmFjdXRlPTcyMjtlLlNhY3V0ZT02Njc7ZS5kY2Fyb249NzQzO2UuVW1hY3Jvbj03MjI7ZS51cmluZz02MTE7ZS50aHJlZXN1cGVyaW9yPTMzMztlLk9ncmF2ZT03Nzg7ZS5BZ3JhdmU9NzIyO2UuQWJyZXZlPTcyMjtlLm11bHRpcGx5PTU4NDtlLnVhY3V0ZT02MTE7ZS5UY2Fyb249NjExO2UucGFydGlhbGRpZmY9NDk0O2UueWRpZXJlc2lzPTU1NjtlLk5hY3V0ZT03MjI7ZS5pY2lyY3VtZmxleD0yNzg7ZS5FY2lyY3VtZmxleD02Njc7ZS5hZGllcmVzaXM9NTU2O2UuZWRpZXJlc2lzPTU1NjtlLmNhY3V0ZT01NTY7ZS5uYWN1dGU9NjExO2UudW1hY3Jvbj02MTE7ZS5OY2Fyb249NzIyO2UuSWFjdXRlPTI3ODtlLnBsdXNtaW51cz01ODQ7ZS5icm9rZW5iYXI9MjgwO2UucmVnaXN0ZXJlZD03Mzc7ZS5HYnJldmU9Nzc4O2UuSWRvdGFjY2VudD0yNzg7ZS5zdW1tYXRpb249NjAwO2UuRWdyYXZlPTY2NztlLnJhY3V0ZT0zODk7ZS5vbWFjcm9uPTYxMTtlLlphY3V0ZT02MTE7ZS5aY2Fyb249NjExO2UuZ3JlYXRlcmVxdWFsPTU0OTtlLkV0aD03MjI7ZS5DY2VkaWxsYT03MjI7ZS5sY29tbWFhY2NlbnQ9Mjc4O2UudGNhcm9uPTM4OTtlLmVvZ29uZWs9NTU2O2UuVW9nb25laz03MjI7ZS5BYWN1dGU9NzIyO2UuQWRpZXJlc2lzPTcyMjtlLmVncmF2ZT01NTY7ZS56YWN1dGU9NTAwO2UuaW9nb25laz0yNzg7ZS5PYWN1dGU9Nzc4O2Uub2FjdXRlPTYxMTtlLmFtYWNyb249NTU2O2Uuc2FjdXRlPTU1NjtlLmlkaWVyZXNpcz0yNzg7ZS5PY2lyY3VtZmxleD03Nzg7ZS5VZ3JhdmU9NzIyO2UuRGVsdGE9NjEyO2UudGhvcm49NjExO2UudHdvc3VwZXJpb3I9MzMzO2UuT2RpZXJlc2lzPTc3ODtlLm11PTYxMTtlLmlncmF2ZT0yNzg7ZS5vaHVuZ2FydW1sYXV0PTYxMTtlLkVvZ29uZWs9NjY3O2UuZGNyb2F0PTYxMTtlLnRocmVlcXVhcnRlcnM9ODM0O2UuU2NlZGlsbGE9NjY3O2UubGNhcm9uPTQwMDtlLktjb21tYWFjY2VudD03MjI7ZS5MYWN1dGU9NjExO2UudHJhZGVtYXJrPTFlMztlLmVkb3RhY2NlbnQ9NTU2O2UuSWdyYXZlPTI3ODtlLkltYWNyb249Mjc4O2UuTGNhcm9uPTYxMTtlLm9uZWhhbGY9ODM0O2UubGVzc2VxdWFsPTU0OTtlLm9jaXJjdW1mbGV4PTYxMTtlLm50aWxkZT02MTE7ZS5VaHVuZ2FydW1sYXV0PTcyMjtlLkVhY3V0ZT02Njc7ZS5lbWFjcm9uPTU1NjtlLmdicmV2ZT02MTE7ZS5vbmVxdWFydGVyPTgzNDtlLlNjYXJvbj02Njc7ZS5TY29tbWFhY2NlbnQ9NjY3O2UuT2h1bmdhcnVtbGF1dD03Nzg7ZS5kZWdyZWU9NDAwO2Uub2dyYXZlPTYxMTtlLkNjYXJvbj03MjI7ZS51Z3JhdmU9NjExO2UucmFkaWNhbD01NDk7ZS5EY2Fyb249NzIyO2UucmNvbW1hYWNjZW50PTM4OTtlLk50aWxkZT03MjI7ZS5vdGlsZGU9NjExO2UuUmNvbW1hYWNjZW50PTcyMjtlLkxjb21tYWFjY2VudD02MTE7ZS5BdGlsZGU9NzIyO2UuQW9nb25laz03MjI7ZS5BcmluZz03MjI7ZS5PdGlsZGU9Nzc4O2UuemRvdGFjY2VudD01MDA7ZS5FY2Fyb249NjY3O2UuSW9nb25laz0yNzg7ZS5rY29tbWFhY2NlbnQ9NTU2O2UubWludXM9NTg0O2UuSWNpcmN1bWZsZXg9Mjc4O2UubmNhcm9uPTYxMTtlLnRjb21tYWFjY2VudD0zMzM7ZS5sb2dpY2Fsbm90PTU4NDtlLm9kaWVyZXNpcz02MTE7ZS51ZGllcmVzaXM9NjExO2Uubm90ZXF1YWw9NTQ5O2UuZ2NvbW1hYWNjZW50PTYxMTtlLmV0aD02MTE7ZS56Y2Fyb249NTAwO2UubmNvbW1hYWNjZW50PTYxMTtlLm9uZXN1cGVyaW9yPTMzMztlLmltYWNyb249Mjc4O2UuRXVybz01NTZ9KSk7ZVsiSGVsdmV0aWNhLU9ibGlxdWUiXT0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9Mjc4O2UuZXhjbGFtPTI3ODtlLnF1b3RlZGJsPTM1NTtlLm51bWJlcnNpZ249NTU2O2UuZG9sbGFyPTU1NjtlLnBlcmNlbnQ9ODg5O2UuYW1wZXJzYW5kPTY2NztlLnF1b3RlcmlnaHQ9MjIyO2UucGFyZW5sZWZ0PTMzMztlLnBhcmVucmlnaHQ9MzMzO2UuYXN0ZXJpc2s9Mzg5O2UucGx1cz01ODQ7ZS5jb21tYT0yNzg7ZS5oeXBoZW49MzMzO2UucGVyaW9kPTI3ODtlLnNsYXNoPTI3ODtlLnplcm89NTU2O2Uub25lPTU1NjtlLnR3bz01NTY7ZS50aHJlZT01NTY7ZS5mb3VyPTU1NjtlLmZpdmU9NTU2O2Uuc2l4PTU1NjtlLnNldmVuPTU1NjtlLmVpZ2h0PTU1NjtlLm5pbmU9NTU2O2UuY29sb249Mjc4O2Uuc2VtaWNvbG9uPTI3ODtlLmxlc3M9NTg0O2UuZXF1YWw9NTg0O2UuZ3JlYXRlcj01ODQ7ZS5xdWVzdGlvbj01NTY7ZS5hdD0xMDE1O2UuQT02Njc7ZS5CPTY2NztlLkM9NzIyO2UuRD03MjI7ZS5FPTY2NztlLkY9NjExO2UuRz03Nzg7ZS5IPTcyMjtlLkk9Mjc4O2UuSj01MDA7ZS5LPTY2NztlLkw9NTU2O2UuTT04MzM7ZS5OPTcyMjtlLk89Nzc4O2UuUD02Njc7ZS5RPTc3ODtlLlI9NzIyO2UuUz02Njc7ZS5UPTYxMTtlLlU9NzIyO2UuVj02Njc7ZS5XPTk0NDtlLlg9NjY3O2UuWT02Njc7ZS5aPTYxMTtlLmJyYWNrZXRsZWZ0PTI3ODtlLmJhY2tzbGFzaD0yNzg7ZS5icmFja2V0cmlnaHQ9Mjc4O2UuYXNjaWljaXJjdW09NDY5O2UudW5kZXJzY29yZT01NTY7ZS5xdW90ZWxlZnQ9MjIyO2UuYT01NTY7ZS5iPTU1NjtlLmM9NTAwO2UuZD01NTY7ZS5lPTU1NjtlLmY9Mjc4O2UuZz01NTY7ZS5oPTU1NjtlLmk9MjIyO2Uuaj0yMjI7ZS5rPTUwMDtlLmw9MjIyO2UubT04MzM7ZS5uPTU1NjtlLm89NTU2O2UucD01NTY7ZS5xPTU1NjtlLnI9MzMzO2Uucz01MDA7ZS50PTI3ODtlLnU9NTU2O2Uudj01MDA7ZS53PTcyMjtlLng9NTAwO2UueT01MDA7ZS56PTUwMDtlLmJyYWNlbGVmdD0zMzQ7ZS5iYXI9MjYwO2UuYnJhY2VyaWdodD0zMzQ7ZS5hc2NpaXRpbGRlPTU4NDtlLmV4Y2xhbWRvd249MzMzO2UuY2VudD01NTY7ZS5zdGVybGluZz01NTY7ZS5mcmFjdGlvbj0xNjc7ZS55ZW49NTU2O2UuZmxvcmluPTU1NjtlLnNlY3Rpb249NTU2O2UuY3VycmVuY3k9NTU2O2UucXVvdGVzaW5nbGU9MTkxO2UucXVvdGVkYmxsZWZ0PTMzMztlLmd1aWxsZW1vdGxlZnQ9NTU2O2UuZ3VpbHNpbmdsbGVmdD0zMzM7ZS5ndWlsc2luZ2xyaWdodD0zMzM7ZS5maT01MDA7ZS5mbD01MDA7ZS5lbmRhc2g9NTU2O2UuZGFnZ2VyPTU1NjtlLmRhZ2dlcmRibD01NTY7ZS5wZXJpb2RjZW50ZXJlZD0yNzg7ZS5wYXJhZ3JhcGg9NTM3O2UuYnVsbGV0PTM1MDtlLnF1b3Rlc2luZ2xiYXNlPTIyMjtlLnF1b3RlZGJsYmFzZT0zMzM7ZS5xdW90ZWRibHJpZ2h0PTMzMztlLmd1aWxsZW1vdHJpZ2h0PTU1NjtlLmVsbGlwc2lzPTFlMztlLnBlcnRob3VzYW5kPTFlMztlLnF1ZXN0aW9uZG93bj02MTE7ZS5ncmF2ZT0zMzM7ZS5hY3V0ZT0zMzM7ZS5jaXJjdW1mbGV4PTMzMztlLnRpbGRlPTMzMztlLm1hY3Jvbj0zMzM7ZS5icmV2ZT0zMzM7ZS5kb3RhY2NlbnQ9MzMzO2UuZGllcmVzaXM9MzMzO2UucmluZz0zMzM7ZS5jZWRpbGxhPTMzMztlLmh1bmdhcnVtbGF1dD0zMzM7ZS5vZ29uZWs9MzMzO2UuY2Fyb249MzMzO2UuZW1kYXNoPTFlMztlLkFFPTFlMztlLm9yZGZlbWluaW5lPTM3MDtlLkxzbGFzaD01NTY7ZS5Pc2xhc2g9Nzc4O2UuT0U9MWUzO2Uub3JkbWFzY3VsaW5lPTM2NTtlLmFlPTg4OTtlLmRvdGxlc3NpPTI3ODtlLmxzbGFzaD0yMjI7ZS5vc2xhc2g9NjExO2Uub2U9OTQ0O2UuZ2VybWFuZGJscz02MTE7ZS5JZGllcmVzaXM9Mjc4O2UuZWFjdXRlPTU1NjtlLmFicmV2ZT01NTY7ZS51aHVuZ2FydW1sYXV0PTU1NjtlLmVjYXJvbj01NTY7ZS5ZZGllcmVzaXM9NjY3O2UuZGl2aWRlPTU4NDtlLllhY3V0ZT02Njc7ZS5BY2lyY3VtZmxleD02Njc7ZS5hYWN1dGU9NTU2O2UuVWNpcmN1bWZsZXg9NzIyO2UueWFjdXRlPTUwMDtlLnNjb21tYWFjY2VudD01MDA7ZS5lY2lyY3VtZmxleD01NTY7ZS5VcmluZz03MjI7ZS5VZGllcmVzaXM9NzIyO2UuYW9nb25laz01NTY7ZS5VYWN1dGU9NzIyO2UudW9nb25laz01NTY7ZS5FZGllcmVzaXM9NjY3O2UuRGNyb2F0PTcyMjtlLmNvbW1hYWNjZW50PTI1MDtlLmNvcHlyaWdodD03Mzc7ZS5FbWFjcm9uPTY2NztlLmNjYXJvbj01MDA7ZS5hcmluZz01NTY7ZS5OY29tbWFhY2NlbnQ9NzIyO2UubGFjdXRlPTIyMjtlLmFncmF2ZT01NTY7ZS5UY29tbWFhY2NlbnQ9NjExO2UuQ2FjdXRlPTcyMjtlLmF0aWxkZT01NTY7ZS5FZG90YWNjZW50PTY2NztlLnNjYXJvbj01MDA7ZS5zY2VkaWxsYT01MDA7ZS5pYWN1dGU9Mjc4O2UubG96ZW5nZT00NzE7ZS5SY2Fyb249NzIyO2UuR2NvbW1hYWNjZW50PTc3ODtlLnVjaXJjdW1mbGV4PTU1NjtlLmFjaXJjdW1mbGV4PTU1NjtlLkFtYWNyb249NjY3O2UucmNhcm9uPTMzMztlLmNjZWRpbGxhPTUwMDtlLlpkb3RhY2NlbnQ9NjExO2UuVGhvcm49NjY3O2UuT21hY3Jvbj03Nzg7ZS5SYWN1dGU9NzIyO2UuU2FjdXRlPTY2NztlLmRjYXJvbj02NDM7ZS5VbWFjcm9uPTcyMjtlLnVyaW5nPTU1NjtlLnRocmVlc3VwZXJpb3I9MzMzO2UuT2dyYXZlPTc3ODtlLkFncmF2ZT02Njc7ZS5BYnJldmU9NjY3O2UubXVsdGlwbHk9NTg0O2UudWFjdXRlPTU1NjtlLlRjYXJvbj02MTE7ZS5wYXJ0aWFsZGlmZj00NzY7ZS55ZGllcmVzaXM9NTAwO2UuTmFjdXRlPTcyMjtlLmljaXJjdW1mbGV4PTI3ODtlLkVjaXJjdW1mbGV4PTY2NztlLmFkaWVyZXNpcz01NTY7ZS5lZGllcmVzaXM9NTU2O2UuY2FjdXRlPTUwMDtlLm5hY3V0ZT01NTY7ZS51bWFjcm9uPTU1NjtlLk5jYXJvbj03MjI7ZS5JYWN1dGU9Mjc4O2UucGx1c21pbnVzPTU4NDtlLmJyb2tlbmJhcj0yNjA7ZS5yZWdpc3RlcmVkPTczNztlLkdicmV2ZT03Nzg7ZS5JZG90YWNjZW50PTI3ODtlLnN1bW1hdGlvbj02MDA7ZS5FZ3JhdmU9NjY3O2UucmFjdXRlPTMzMztlLm9tYWNyb249NTU2O2UuWmFjdXRlPTYxMTtlLlpjYXJvbj02MTE7ZS5ncmVhdGVyZXF1YWw9NTQ5O2UuRXRoPTcyMjtlLkNjZWRpbGxhPTcyMjtlLmxjb21tYWFjY2VudD0yMjI7ZS50Y2Fyb249MzE3O2UuZW9nb25laz01NTY7ZS5Vb2dvbmVrPTcyMjtlLkFhY3V0ZT02Njc7ZS5BZGllcmVzaXM9NjY3O2UuZWdyYXZlPTU1NjtlLnphY3V0ZT01MDA7ZS5pb2dvbmVrPTIyMjtlLk9hY3V0ZT03Nzg7ZS5vYWN1dGU9NTU2O2UuYW1hY3Jvbj01NTY7ZS5zYWN1dGU9NTAwO2UuaWRpZXJlc2lzPTI3ODtlLk9jaXJjdW1mbGV4PTc3ODtlLlVncmF2ZT03MjI7ZS5EZWx0YT02MTI7ZS50aG9ybj01NTY7ZS50d29zdXBlcmlvcj0zMzM7ZS5PZGllcmVzaXM9Nzc4O2UubXU9NTU2O2UuaWdyYXZlPTI3ODtlLm9odW5nYXJ1bWxhdXQ9NTU2O2UuRW9nb25laz02Njc7ZS5kY3JvYXQ9NTU2O2UudGhyZWVxdWFydGVycz04MzQ7ZS5TY2VkaWxsYT02Njc7ZS5sY2Fyb249Mjk5O2UuS2NvbW1hYWNjZW50PTY2NztlLkxhY3V0ZT01NTY7ZS50cmFkZW1hcms9MWUzO2UuZWRvdGFjY2VudD01NTY7ZS5JZ3JhdmU9Mjc4O2UuSW1hY3Jvbj0yNzg7ZS5MY2Fyb249NTU2O2Uub25laGFsZj04MzQ7ZS5sZXNzZXF1YWw9NTQ5O2Uub2NpcmN1bWZsZXg9NTU2O2UubnRpbGRlPTU1NjtlLlVodW5nYXJ1bWxhdXQ9NzIyO2UuRWFjdXRlPTY2NztlLmVtYWNyb249NTU2O2UuZ2JyZXZlPTU1NjtlLm9uZXF1YXJ0ZXI9ODM0O2UuU2Nhcm9uPTY2NztlLlNjb21tYWFjY2VudD02Njc7ZS5PaHVuZ2FydW1sYXV0PTc3ODtlLmRlZ3JlZT00MDA7ZS5vZ3JhdmU9NTU2O2UuQ2Nhcm9uPTcyMjtlLnVncmF2ZT01NTY7ZS5yYWRpY2FsPTQ1MztlLkRjYXJvbj03MjI7ZS5yY29tbWFhY2NlbnQ9MzMzO2UuTnRpbGRlPTcyMjtlLm90aWxkZT01NTY7ZS5SY29tbWFhY2NlbnQ9NzIyO2UuTGNvbW1hYWNjZW50PTU1NjtlLkF0aWxkZT02Njc7ZS5Bb2dvbmVrPTY2NztlLkFyaW5nPTY2NztlLk90aWxkZT03Nzg7ZS56ZG90YWNjZW50PTUwMDtlLkVjYXJvbj02Njc7ZS5Jb2dvbmVrPTI3ODtlLmtjb21tYWFjY2VudD01MDA7ZS5taW51cz01ODQ7ZS5JY2lyY3VtZmxleD0yNzg7ZS5uY2Fyb249NTU2O2UudGNvbW1hYWNjZW50PTI3ODtlLmxvZ2ljYWxub3Q9NTg0O2Uub2RpZXJlc2lzPTU1NjtlLnVkaWVyZXNpcz01NTY7ZS5ub3RlcXVhbD01NDk7ZS5nY29tbWFhY2NlbnQ9NTU2O2UuZXRoPTU1NjtlLnpjYXJvbj01MDA7ZS5uY29tbWFhY2NlbnQ9NTU2O2Uub25lc3VwZXJpb3I9MzMzO2UuaW1hY3Jvbj0yNzg7ZS5FdXJvPTU1Nn0pKTtlLlN5bWJvbD0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9MjUwO2UuZXhjbGFtPTMzMztlLnVuaXZlcnNhbD03MTM7ZS5udW1iZXJzaWduPTUwMDtlLmV4aXN0ZW50aWFsPTU0OTtlLnBlcmNlbnQ9ODMzO2UuYW1wZXJzYW5kPTc3ODtlLnN1Y2h0aGF0PTQzOTtlLnBhcmVubGVmdD0zMzM7ZS5wYXJlbnJpZ2h0PTMzMztlLmFzdGVyaXNrbWF0aD01MDA7ZS5wbHVzPTU0OTtlLmNvbW1hPTI1MDtlLm1pbnVzPTU0OTtlLnBlcmlvZD0yNTA7ZS5zbGFzaD0yNzg7ZS56ZXJvPTUwMDtlLm9uZT01MDA7ZS50d289NTAwO2UudGhyZWU9NTAwO2UuZm91cj01MDA7ZS5maXZlPTUwMDtlLnNpeD01MDA7ZS5zZXZlbj01MDA7ZS5laWdodD01MDA7ZS5uaW5lPTUwMDtlLmNvbG9uPTI3ODtlLnNlbWljb2xvbj0yNzg7ZS5sZXNzPTU0OTtlLmVxdWFsPTU0OTtlLmdyZWF0ZXI9NTQ5O2UucXVlc3Rpb249NDQ0O2UuY29uZ3J1ZW50PTU0OTtlLkFscGhhPTcyMjtlLkJldGE9NjY3O2UuQ2hpPTcyMjtlLkRlbHRhPTYxMjtlLkVwc2lsb249NjExO2UuUGhpPTc2MztlLkdhbW1hPTYwMztlLkV0YT03MjI7ZS5Jb3RhPTMzMztlLnRoZXRhMT02MzE7ZS5LYXBwYT03MjI7ZS5MYW1iZGE9Njg2O2UuTXU9ODg5O2UuTnU9NzIyO2UuT21pY3Jvbj03MjI7ZS5QaT03Njg7ZS5UaGV0YT03NDE7ZS5SaG89NTU2O2UuU2lnbWE9NTkyO2UuVGF1PTYxMTtlLlVwc2lsb249NjkwO2Uuc2lnbWExPTQzOTtlLk9tZWdhPTc2ODtlLlhpPTY0NTtlLlBzaT03OTU7ZS5aZXRhPTYxMTtlLmJyYWNrZXRsZWZ0PTMzMztlLnRoZXJlZm9yZT04NjM7ZS5icmFja2V0cmlnaHQ9MzMzO2UucGVycGVuZGljdWxhcj02NTg7ZS51bmRlcnNjb3JlPTUwMDtlLnJhZGljYWxleD01MDA7ZS5hbHBoYT02MzE7ZS5iZXRhPTU0OTtlLmNoaT01NDk7ZS5kZWx0YT00OTQ7ZS5lcHNpbG9uPTQzOTtlLnBoaT01MjE7ZS5nYW1tYT00MTE7ZS5ldGE9NjAzO2UuaW90YT0zMjk7ZS5waGkxPTYwMztlLmthcHBhPTU0OTtlLmxhbWJkYT01NDk7ZS5tdT01NzY7ZS5udT01MjE7ZS5vbWljcm9uPTU0OTtlLnBpPTU0OTtlLnRoZXRhPTUyMTtlLnJobz01NDk7ZS5zaWdtYT02MDM7ZS50YXU9NDM5O2UudXBzaWxvbj01NzY7ZS5vbWVnYTE9NzEzO2Uub21lZ2E9Njg2O2UueGk9NDkzO2UucHNpPTY4NjtlLnpldGE9NDk0O2UuYnJhY2VsZWZ0PTQ4MDtlLmJhcj0yMDA7ZS5icmFjZXJpZ2h0PTQ4MDtlLnNpbWlsYXI9NTQ5O2UuRXVybz03NTA7ZS5VcHNpbG9uMT02MjA7ZS5taW51dGU9MjQ3O2UubGVzc2VxdWFsPTU0OTtlLmZyYWN0aW9uPTE2NztlLmluZmluaXR5PTcxMztlLmZsb3Jpbj01MDA7ZS5jbHViPTc1MztlLmRpYW1vbmQ9NzUzO2UuaGVhcnQ9NzUzO2Uuc3BhZGU9NzUzO2UuYXJyb3dib3RoPTEwNDI7ZS5hcnJvd2xlZnQ9OTg3O2UuYXJyb3d1cD02MDM7ZS5hcnJvd3JpZ2h0PTk4NztlLmFycm93ZG93bj02MDM7ZS5kZWdyZWU9NDAwO2UucGx1c21pbnVzPTU0OTtlLnNlY29uZD00MTE7ZS5ncmVhdGVyZXF1YWw9NTQ5O2UubXVsdGlwbHk9NTQ5O2UucHJvcG9ydGlvbmFsPTcxMztlLnBhcnRpYWxkaWZmPTQ5NDtlLmJ1bGxldD00NjA7ZS5kaXZpZGU9NTQ5O2Uubm90ZXF1YWw9NTQ5O2UuZXF1aXZhbGVuY2U9NTQ5O2UuYXBwcm94ZXF1YWw9NTQ5O2UuZWxsaXBzaXM9MWUzO2UuYXJyb3d2ZXJ0ZXg9NjAzO2UuYXJyb3dob3JpemV4PTFlMztlLmNhcnJpYWdlcmV0dXJuPTY1ODtlLmFsZXBoPTgyMztlLklmcmFrdHVyPTY4NjtlLlJmcmFrdHVyPTc5NTtlLndlaWVyc3RyYXNzPTk4NztlLmNpcmNsZW11bHRpcGx5PTc2ODtlLmNpcmNsZXBsdXM9NzY4O2UuZW1wdHlzZXQ9ODIzO2UuaW50ZXJzZWN0aW9uPTc2ODtlLnVuaW9uPTc2ODtlLnByb3BlcnN1cGVyc2V0PTcxMztlLnJlZmxleHN1cGVyc2V0PTcxMztlLm5vdHN1YnNldD03MTM7ZS5wcm9wZXJzdWJzZXQ9NzEzO2UucmVmbGV4c3Vic2V0PTcxMztlLmVsZW1lbnQ9NzEzO2Uubm90ZWxlbWVudD03MTM7ZS5hbmdsZT03Njg7ZS5ncmFkaWVudD03MTM7ZS5yZWdpc3RlcnNlcmlmPTc5MDtlLmNvcHlyaWdodHNlcmlmPTc5MDtlLnRyYWRlbWFya3NlcmlmPTg5MDtlLnByb2R1Y3Q9ODIzO2UucmFkaWNhbD01NDk7ZS5kb3RtYXRoPTI1MDtlLmxvZ2ljYWxub3Q9NzEzO2UubG9naWNhbGFuZD02MDM7ZS5sb2dpY2Fsb3I9NjAzO2UuYXJyb3dkYmxib3RoPTEwNDI7ZS5hcnJvd2RibGxlZnQ9OTg3O2UuYXJyb3dkYmx1cD02MDM7ZS5hcnJvd2RibHJpZ2h0PTk4NztlLmFycm93ZGJsZG93bj02MDM7ZS5sb3plbmdlPTQ5NDtlLmFuZ2xlbGVmdD0zMjk7ZS5yZWdpc3RlcnNhbnM9NzkwO2UuY29weXJpZ2h0c2Fucz03OTA7ZS50cmFkZW1hcmtzYW5zPTc4NjtlLnN1bW1hdGlvbj03MTM7ZS5wYXJlbmxlZnR0cD0zODQ7ZS5wYXJlbmxlZnRleD0zODQ7ZS5wYXJlbmxlZnRidD0zODQ7ZS5icmFja2V0bGVmdHRwPTM4NDtlLmJyYWNrZXRsZWZ0ZXg9Mzg0O2UuYnJhY2tldGxlZnRidD0zODQ7ZS5icmFjZWxlZnR0cD00OTQ7ZS5icmFjZWxlZnRtaWQ9NDk0O2UuYnJhY2VsZWZ0YnQ9NDk0O2UuYnJhY2VleD00OTQ7ZS5hbmdsZXJpZ2h0PTMyOTtlLmludGVncmFsPTI3NDtlLmludGVncmFsdHA9Njg2O2UuaW50ZWdyYWxleD02ODY7ZS5pbnRlZ3JhbGJ0PTY4NjtlLnBhcmVucmlnaHR0cD0zODQ7ZS5wYXJlbnJpZ2h0ZXg9Mzg0O2UucGFyZW5yaWdodGJ0PTM4NDtlLmJyYWNrZXRyaWdodHRwPTM4NDtlLmJyYWNrZXRyaWdodGV4PTM4NDtlLmJyYWNrZXRyaWdodGJ0PTM4NDtlLmJyYWNlcmlnaHR0cD00OTQ7ZS5icmFjZXJpZ2h0bWlkPTQ5NDtlLmJyYWNlcmlnaHRidD00OTQ7ZS5hcHBsZT03OTB9KSk7ZVsiVGltZXMtUm9tYW4iXT0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9MjUwO2UuZXhjbGFtPTMzMztlLnF1b3RlZGJsPTQwODtlLm51bWJlcnNpZ249NTAwO2UuZG9sbGFyPTUwMDtlLnBlcmNlbnQ9ODMzO2UuYW1wZXJzYW5kPTc3ODtlLnF1b3RlcmlnaHQ9MzMzO2UucGFyZW5sZWZ0PTMzMztlLnBhcmVucmlnaHQ9MzMzO2UuYXN0ZXJpc2s9NTAwO2UucGx1cz01NjQ7ZS5jb21tYT0yNTA7ZS5oeXBoZW49MzMzO2UucGVyaW9kPTI1MDtlLnNsYXNoPTI3ODtlLnplcm89NTAwO2Uub25lPTUwMDtlLnR3bz01MDA7ZS50aHJlZT01MDA7ZS5mb3VyPTUwMDtlLmZpdmU9NTAwO2Uuc2l4PTUwMDtlLnNldmVuPTUwMDtlLmVpZ2h0PTUwMDtlLm5pbmU9NTAwO2UuY29sb249Mjc4O2Uuc2VtaWNvbG9uPTI3ODtlLmxlc3M9NTY0O2UuZXF1YWw9NTY0O2UuZ3JlYXRlcj01NjQ7ZS5xdWVzdGlvbj00NDQ7ZS5hdD05MjE7ZS5BPTcyMjtlLkI9NjY3O2UuQz02Njc7ZS5EPTcyMjtlLkU9NjExO2UuRj01NTY7ZS5HPTcyMjtlLkg9NzIyO2UuST0zMzM7ZS5KPTM4OTtlLks9NzIyO2UuTD02MTE7ZS5NPTg4OTtlLk49NzIyO2UuTz03MjI7ZS5QPTU1NjtlLlE9NzIyO2UuUj02Njc7ZS5TPTU1NjtlLlQ9NjExO2UuVT03MjI7ZS5WPTcyMjtlLlc9OTQ0O2UuWD03MjI7ZS5ZPTcyMjtlLlo9NjExO2UuYnJhY2tldGxlZnQ9MzMzO2UuYmFja3NsYXNoPTI3ODtlLmJyYWNrZXRyaWdodD0zMzM7ZS5hc2NpaWNpcmN1bT00Njk7ZS51bmRlcnNjb3JlPTUwMDtlLnF1b3RlbGVmdD0zMzM7ZS5hPTQ0NDtlLmI9NTAwO2UuYz00NDQ7ZS5kPTUwMDtlLmU9NDQ0O2UuZj0zMzM7ZS5nPTUwMDtlLmg9NTAwO2UuaT0yNzg7ZS5qPTI3ODtlLms9NTAwO2UubD0yNzg7ZS5tPTc3ODtlLm49NTAwO2Uubz01MDA7ZS5wPTUwMDtlLnE9NTAwO2Uucj0zMzM7ZS5zPTM4OTtlLnQ9Mjc4O2UudT01MDA7ZS52PTUwMDtlLnc9NzIyO2UueD01MDA7ZS55PTUwMDtlLno9NDQ0O2UuYnJhY2VsZWZ0PTQ4MDtlLmJhcj0yMDA7ZS5icmFjZXJpZ2h0PTQ4MDtlLmFzY2lpdGlsZGU9NTQxO2UuZXhjbGFtZG93bj0zMzM7ZS5jZW50PTUwMDtlLnN0ZXJsaW5nPTUwMDtlLmZyYWN0aW9uPTE2NztlLnllbj01MDA7ZS5mbG9yaW49NTAwO2Uuc2VjdGlvbj01MDA7ZS5jdXJyZW5jeT01MDA7ZS5xdW90ZXNpbmdsZT0xODA7ZS5xdW90ZWRibGxlZnQ9NDQ0O2UuZ3VpbGxlbW90bGVmdD01MDA7ZS5ndWlsc2luZ2xsZWZ0PTMzMztlLmd1aWxzaW5nbHJpZ2h0PTMzMztlLmZpPTU1NjtlLmZsPTU1NjtlLmVuZGFzaD01MDA7ZS5kYWdnZXI9NTAwO2UuZGFnZ2VyZGJsPTUwMDtlLnBlcmlvZGNlbnRlcmVkPTI1MDtlLnBhcmFncmFwaD00NTM7ZS5idWxsZXQ9MzUwO2UucXVvdGVzaW5nbGJhc2U9MzMzO2UucXVvdGVkYmxiYXNlPTQ0NDtlLnF1b3RlZGJscmlnaHQ9NDQ0O2UuZ3VpbGxlbW90cmlnaHQ9NTAwO2UuZWxsaXBzaXM9MWUzO2UucGVydGhvdXNhbmQ9MWUzO2UucXVlc3Rpb25kb3duPTQ0NDtlLmdyYXZlPTMzMztlLmFjdXRlPTMzMztlLmNpcmN1bWZsZXg9MzMzO2UudGlsZGU9MzMzO2UubWFjcm9uPTMzMztlLmJyZXZlPTMzMztlLmRvdGFjY2VudD0zMzM7ZS5kaWVyZXNpcz0zMzM7ZS5yaW5nPTMzMztlLmNlZGlsbGE9MzMzO2UuaHVuZ2FydW1sYXV0PTMzMztlLm9nb25laz0zMzM7ZS5jYXJvbj0zMzM7ZS5lbWRhc2g9MWUzO2UuQUU9ODg5O2Uub3JkZmVtaW5pbmU9Mjc2O2UuTHNsYXNoPTYxMTtlLk9zbGFzaD03MjI7ZS5PRT04ODk7ZS5vcmRtYXNjdWxpbmU9MzEwO2UuYWU9NjY3O2UuZG90bGVzc2k9Mjc4O2UubHNsYXNoPTI3ODtlLm9zbGFzaD01MDA7ZS5vZT03MjI7ZS5nZXJtYW5kYmxzPTUwMDtlLklkaWVyZXNpcz0zMzM7ZS5lYWN1dGU9NDQ0O2UuYWJyZXZlPTQ0NDtlLnVodW5nYXJ1bWxhdXQ9NTAwO2UuZWNhcm9uPTQ0NDtlLllkaWVyZXNpcz03MjI7ZS5kaXZpZGU9NTY0O2UuWWFjdXRlPTcyMjtlLkFjaXJjdW1mbGV4PTcyMjtlLmFhY3V0ZT00NDQ7ZS5VY2lyY3VtZmxleD03MjI7ZS55YWN1dGU9NTAwO2Uuc2NvbW1hYWNjZW50PTM4OTtlLmVjaXJjdW1mbGV4PTQ0NDtlLlVyaW5nPTcyMjtlLlVkaWVyZXNpcz03MjI7ZS5hb2dvbmVrPTQ0NDtlLlVhY3V0ZT03MjI7ZS51b2dvbmVrPTUwMDtlLkVkaWVyZXNpcz02MTE7ZS5EY3JvYXQ9NzIyO2UuY29tbWFhY2NlbnQ9MjUwO2UuY29weXJpZ2h0PTc2MDtlLkVtYWNyb249NjExO2UuY2Nhcm9uPTQ0NDtlLmFyaW5nPTQ0NDtlLk5jb21tYWFjY2VudD03MjI7ZS5sYWN1dGU9Mjc4O2UuYWdyYXZlPTQ0NDtlLlRjb21tYWFjY2VudD02MTE7ZS5DYWN1dGU9NjY3O2UuYXRpbGRlPTQ0NDtlLkVkb3RhY2NlbnQ9NjExO2Uuc2Nhcm9uPTM4OTtlLnNjZWRpbGxhPTM4OTtlLmlhY3V0ZT0yNzg7ZS5sb3plbmdlPTQ3MTtlLlJjYXJvbj02Njc7ZS5HY29tbWFhY2NlbnQ9NzIyO2UudWNpcmN1bWZsZXg9NTAwO2UuYWNpcmN1bWZsZXg9NDQ0O2UuQW1hY3Jvbj03MjI7ZS5yY2Fyb249MzMzO2UuY2NlZGlsbGE9NDQ0O2UuWmRvdGFjY2VudD02MTE7ZS5UaG9ybj01NTY7ZS5PbWFjcm9uPTcyMjtlLlJhY3V0ZT02Njc7ZS5TYWN1dGU9NTU2O2UuZGNhcm9uPTU4ODtlLlVtYWNyb249NzIyO2UudXJpbmc9NTAwO2UudGhyZWVzdXBlcmlvcj0zMDA7ZS5PZ3JhdmU9NzIyO2UuQWdyYXZlPTcyMjtlLkFicmV2ZT03MjI7ZS5tdWx0aXBseT01NjQ7ZS51YWN1dGU9NTAwO2UuVGNhcm9uPTYxMTtlLnBhcnRpYWxkaWZmPTQ3NjtlLnlkaWVyZXNpcz01MDA7ZS5OYWN1dGU9NzIyO2UuaWNpcmN1bWZsZXg9Mjc4O2UuRWNpcmN1bWZsZXg9NjExO2UuYWRpZXJlc2lzPTQ0NDtlLmVkaWVyZXNpcz00NDQ7ZS5jYWN1dGU9NDQ0O2UubmFjdXRlPTUwMDtlLnVtYWNyb249NTAwO2UuTmNhcm9uPTcyMjtlLklhY3V0ZT0zMzM7ZS5wbHVzbWludXM9NTY0O2UuYnJva2VuYmFyPTIwMDtlLnJlZ2lzdGVyZWQ9NzYwO2UuR2JyZXZlPTcyMjtlLklkb3RhY2NlbnQ9MzMzO2Uuc3VtbWF0aW9uPTYwMDtlLkVncmF2ZT02MTE7ZS5yYWN1dGU9MzMzO2Uub21hY3Jvbj01MDA7ZS5aYWN1dGU9NjExO2UuWmNhcm9uPTYxMTtlLmdyZWF0ZXJlcXVhbD01NDk7ZS5FdGg9NzIyO2UuQ2NlZGlsbGE9NjY3O2UubGNvbW1hYWNjZW50PTI3ODtlLnRjYXJvbj0zMjY7ZS5lb2dvbmVrPTQ0NDtlLlVvZ29uZWs9NzIyO2UuQWFjdXRlPTcyMjtlLkFkaWVyZXNpcz03MjI7ZS5lZ3JhdmU9NDQ0O2UuemFjdXRlPTQ0NDtlLmlvZ29uZWs9Mjc4O2UuT2FjdXRlPTcyMjtlLm9hY3V0ZT01MDA7ZS5hbWFjcm9uPTQ0NDtlLnNhY3V0ZT0zODk7ZS5pZGllcmVzaXM9Mjc4O2UuT2NpcmN1bWZsZXg9NzIyO2UuVWdyYXZlPTcyMjtlLkRlbHRhPTYxMjtlLnRob3JuPTUwMDtlLnR3b3N1cGVyaW9yPTMwMDtlLk9kaWVyZXNpcz03MjI7ZS5tdT01MDA7ZS5pZ3JhdmU9Mjc4O2Uub2h1bmdhcnVtbGF1dD01MDA7ZS5Fb2dvbmVrPTYxMTtlLmRjcm9hdD01MDA7ZS50aHJlZXF1YXJ0ZXJzPTc1MDtlLlNjZWRpbGxhPTU1NjtlLmxjYXJvbj0zNDQ7ZS5LY29tbWFhY2NlbnQ9NzIyO2UuTGFjdXRlPTYxMTtlLnRyYWRlbWFyaz05ODA7ZS5lZG90YWNjZW50PTQ0NDtlLklncmF2ZT0zMzM7ZS5JbWFjcm9uPTMzMztlLkxjYXJvbj02MTE7ZS5vbmVoYWxmPTc1MDtlLmxlc3NlcXVhbD01NDk7ZS5vY2lyY3VtZmxleD01MDA7ZS5udGlsZGU9NTAwO2UuVWh1bmdhcnVtbGF1dD03MjI7ZS5FYWN1dGU9NjExO2UuZW1hY3Jvbj00NDQ7ZS5nYnJldmU9NTAwO2Uub25lcXVhcnRlcj03NTA7ZS5TY2Fyb249NTU2O2UuU2NvbW1hYWNjZW50PTU1NjtlLk9odW5nYXJ1bWxhdXQ9NzIyO2UuZGVncmVlPTQwMDtlLm9ncmF2ZT01MDA7ZS5DY2Fyb249NjY3O2UudWdyYXZlPTUwMDtlLnJhZGljYWw9NDUzO2UuRGNhcm9uPTcyMjtlLnJjb21tYWFjY2VudD0zMzM7ZS5OdGlsZGU9NzIyO2Uub3RpbGRlPTUwMDtlLlJjb21tYWFjY2VudD02Njc7ZS5MY29tbWFhY2NlbnQ9NjExO2UuQXRpbGRlPTcyMjtlLkFvZ29uZWs9NzIyO2UuQXJpbmc9NzIyO2UuT3RpbGRlPTcyMjtlLnpkb3RhY2NlbnQ9NDQ0O2UuRWNhcm9uPTYxMTtlLklvZ29uZWs9MzMzO2Uua2NvbW1hYWNjZW50PTUwMDtlLm1pbnVzPTU2NDtlLkljaXJjdW1mbGV4PTMzMztlLm5jYXJvbj01MDA7ZS50Y29tbWFhY2NlbnQ9Mjc4O2UubG9naWNhbG5vdD01NjQ7ZS5vZGllcmVzaXM9NTAwO2UudWRpZXJlc2lzPTUwMDtlLm5vdGVxdWFsPTU0OTtlLmdjb21tYWFjY2VudD01MDA7ZS5ldGg9NTAwO2UuemNhcm9uPTQ0NDtlLm5jb21tYWFjY2VudD01MDA7ZS5vbmVzdXBlcmlvcj0zMDA7ZS5pbWFjcm9uPTI3ODtlLkV1cm89NTAwfSkpO2VbIlRpbWVzLUJvbGQiXT0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9MjUwO2UuZXhjbGFtPTMzMztlLnF1b3RlZGJsPTU1NTtlLm51bWJlcnNpZ249NTAwO2UuZG9sbGFyPTUwMDtlLnBlcmNlbnQ9MWUzO2UuYW1wZXJzYW5kPTgzMztlLnF1b3RlcmlnaHQ9MzMzO2UucGFyZW5sZWZ0PTMzMztlLnBhcmVucmlnaHQ9MzMzO2UuYXN0ZXJpc2s9NTAwO2UucGx1cz01NzA7ZS5jb21tYT0yNTA7ZS5oeXBoZW49MzMzO2UucGVyaW9kPTI1MDtlLnNsYXNoPTI3ODtlLnplcm89NTAwO2Uub25lPTUwMDtlLnR3bz01MDA7ZS50aHJlZT01MDA7ZS5mb3VyPTUwMDtlLmZpdmU9NTAwO2Uuc2l4PTUwMDtlLnNldmVuPTUwMDtlLmVpZ2h0PTUwMDtlLm5pbmU9NTAwO2UuY29sb249MzMzO2Uuc2VtaWNvbG9uPTMzMztlLmxlc3M9NTcwO2UuZXF1YWw9NTcwO2UuZ3JlYXRlcj01NzA7ZS5xdWVzdGlvbj01MDA7ZS5hdD05MzA7ZS5BPTcyMjtlLkI9NjY3O2UuQz03MjI7ZS5EPTcyMjtlLkU9NjY3O2UuRj02MTE7ZS5HPTc3ODtlLkg9Nzc4O2UuST0zODk7ZS5KPTUwMDtlLks9Nzc4O2UuTD02Njc7ZS5NPTk0NDtlLk49NzIyO2UuTz03Nzg7ZS5QPTYxMTtlLlE9Nzc4O2UuUj03MjI7ZS5TPTU1NjtlLlQ9NjY3O2UuVT03MjI7ZS5WPTcyMjtlLlc9MWUzO2UuWD03MjI7ZS5ZPTcyMjtlLlo9NjY3O2UuYnJhY2tldGxlZnQ9MzMzO2UuYmFja3NsYXNoPTI3ODtlLmJyYWNrZXRyaWdodD0zMzM7ZS5hc2NpaWNpcmN1bT01ODE7ZS51bmRlcnNjb3JlPTUwMDtlLnF1b3RlbGVmdD0zMzM7ZS5hPTUwMDtlLmI9NTU2O2UuYz00NDQ7ZS5kPTU1NjtlLmU9NDQ0O2UuZj0zMzM7ZS5nPTUwMDtlLmg9NTU2O2UuaT0yNzg7ZS5qPTMzMztlLms9NTU2O2UubD0yNzg7ZS5tPTgzMztlLm49NTU2O2Uubz01MDA7ZS5wPTU1NjtlLnE9NTU2O2Uucj00NDQ7ZS5zPTM4OTtlLnQ9MzMzO2UudT01NTY7ZS52PTUwMDtlLnc9NzIyO2UueD01MDA7ZS55PTUwMDtlLno9NDQ0O2UuYnJhY2VsZWZ0PTM5NDtlLmJhcj0yMjA7ZS5icmFjZXJpZ2h0PTM5NDtlLmFzY2lpdGlsZGU9NTIwO2UuZXhjbGFtZG93bj0zMzM7ZS5jZW50PTUwMDtlLnN0ZXJsaW5nPTUwMDtlLmZyYWN0aW9uPTE2NztlLnllbj01MDA7ZS5mbG9yaW49NTAwO2Uuc2VjdGlvbj01MDA7ZS5jdXJyZW5jeT01MDA7ZS5xdW90ZXNpbmdsZT0yNzg7ZS5xdW90ZWRibGxlZnQ9NTAwO2UuZ3VpbGxlbW90bGVmdD01MDA7ZS5ndWlsc2luZ2xsZWZ0PTMzMztlLmd1aWxzaW5nbHJpZ2h0PTMzMztlLmZpPTU1NjtlLmZsPTU1NjtlLmVuZGFzaD01MDA7ZS5kYWdnZXI9NTAwO2UuZGFnZ2VyZGJsPTUwMDtlLnBlcmlvZGNlbnRlcmVkPTI1MDtlLnBhcmFncmFwaD01NDA7ZS5idWxsZXQ9MzUwO2UucXVvdGVzaW5nbGJhc2U9MzMzO2UucXVvdGVkYmxiYXNlPTUwMDtlLnF1b3RlZGJscmlnaHQ9NTAwO2UuZ3VpbGxlbW90cmlnaHQ9NTAwO2UuZWxsaXBzaXM9MWUzO2UucGVydGhvdXNhbmQ9MWUzO2UucXVlc3Rpb25kb3duPTUwMDtlLmdyYXZlPTMzMztlLmFjdXRlPTMzMztlLmNpcmN1bWZsZXg9MzMzO2UudGlsZGU9MzMzO2UubWFjcm9uPTMzMztlLmJyZXZlPTMzMztlLmRvdGFjY2VudD0zMzM7ZS5kaWVyZXNpcz0zMzM7ZS5yaW5nPTMzMztlLmNlZGlsbGE9MzMzO2UuaHVuZ2FydW1sYXV0PTMzMztlLm9nb25laz0zMzM7ZS5jYXJvbj0zMzM7ZS5lbWRhc2g9MWUzO2UuQUU9MWUzO2Uub3JkZmVtaW5pbmU9MzAwO2UuTHNsYXNoPTY2NztlLk9zbGFzaD03Nzg7ZS5PRT0xZTM7ZS5vcmRtYXNjdWxpbmU9MzMwO2UuYWU9NzIyO2UuZG90bGVzc2k9Mjc4O2UubHNsYXNoPTI3ODtlLm9zbGFzaD01MDA7ZS5vZT03MjI7ZS5nZXJtYW5kYmxzPTU1NjtlLklkaWVyZXNpcz0zODk7ZS5lYWN1dGU9NDQ0O2UuYWJyZXZlPTUwMDtlLnVodW5nYXJ1bWxhdXQ9NTU2O2UuZWNhcm9uPTQ0NDtlLllkaWVyZXNpcz03MjI7ZS5kaXZpZGU9NTcwO2UuWWFjdXRlPTcyMjtlLkFjaXJjdW1mbGV4PTcyMjtlLmFhY3V0ZT01MDA7ZS5VY2lyY3VtZmxleD03MjI7ZS55YWN1dGU9NTAwO2Uuc2NvbW1hYWNjZW50PTM4OTtlLmVjaXJjdW1mbGV4PTQ0NDtlLlVyaW5nPTcyMjtlLlVkaWVyZXNpcz03MjI7ZS5hb2dvbmVrPTUwMDtlLlVhY3V0ZT03MjI7ZS51b2dvbmVrPTU1NjtlLkVkaWVyZXNpcz02Njc7ZS5EY3JvYXQ9NzIyO2UuY29tbWFhY2NlbnQ9MjUwO2UuY29weXJpZ2h0PTc0NztlLkVtYWNyb249NjY3O2UuY2Nhcm9uPTQ0NDtlLmFyaW5nPTUwMDtlLk5jb21tYWFjY2VudD03MjI7ZS5sYWN1dGU9Mjc4O2UuYWdyYXZlPTUwMDtlLlRjb21tYWFjY2VudD02Njc7ZS5DYWN1dGU9NzIyO2UuYXRpbGRlPTUwMDtlLkVkb3RhY2NlbnQ9NjY3O2Uuc2Nhcm9uPTM4OTtlLnNjZWRpbGxhPTM4OTtlLmlhY3V0ZT0yNzg7ZS5sb3plbmdlPTQ5NDtlLlJjYXJvbj03MjI7ZS5HY29tbWFhY2NlbnQ9Nzc4O2UudWNpcmN1bWZsZXg9NTU2O2UuYWNpcmN1bWZsZXg9NTAwO2UuQW1hY3Jvbj03MjI7ZS5yY2Fyb249NDQ0O2UuY2NlZGlsbGE9NDQ0O2UuWmRvdGFjY2VudD02Njc7ZS5UaG9ybj02MTE7ZS5PbWFjcm9uPTc3ODtlLlJhY3V0ZT03MjI7ZS5TYWN1dGU9NTU2O2UuZGNhcm9uPTY3MjtlLlVtYWNyb249NzIyO2UudXJpbmc9NTU2O2UudGhyZWVzdXBlcmlvcj0zMDA7ZS5PZ3JhdmU9Nzc4O2UuQWdyYXZlPTcyMjtlLkFicmV2ZT03MjI7ZS5tdWx0aXBseT01NzA7ZS51YWN1dGU9NTU2O2UuVGNhcm9uPTY2NztlLnBhcnRpYWxkaWZmPTQ5NDtlLnlkaWVyZXNpcz01MDA7ZS5OYWN1dGU9NzIyO2UuaWNpcmN1bWZsZXg9Mjc4O2UuRWNpcmN1bWZsZXg9NjY3O2UuYWRpZXJlc2lzPTUwMDtlLmVkaWVyZXNpcz00NDQ7ZS5jYWN1dGU9NDQ0O2UubmFjdXRlPTU1NjtlLnVtYWNyb249NTU2O2UuTmNhcm9uPTcyMjtlLklhY3V0ZT0zODk7ZS5wbHVzbWludXM9NTcwO2UuYnJva2VuYmFyPTIyMDtlLnJlZ2lzdGVyZWQ9NzQ3O2UuR2JyZXZlPTc3ODtlLklkb3RhY2NlbnQ9Mzg5O2Uuc3VtbWF0aW9uPTYwMDtlLkVncmF2ZT02Njc7ZS5yYWN1dGU9NDQ0O2Uub21hY3Jvbj01MDA7ZS5aYWN1dGU9NjY3O2UuWmNhcm9uPTY2NztlLmdyZWF0ZXJlcXVhbD01NDk7ZS5FdGg9NzIyO2UuQ2NlZGlsbGE9NzIyO2UubGNvbW1hYWNjZW50PTI3ODtlLnRjYXJvbj00MTY7ZS5lb2dvbmVrPTQ0NDtlLlVvZ29uZWs9NzIyO2UuQWFjdXRlPTcyMjtlLkFkaWVyZXNpcz03MjI7ZS5lZ3JhdmU9NDQ0O2UuemFjdXRlPTQ0NDtlLmlvZ29uZWs9Mjc4O2UuT2FjdXRlPTc3ODtlLm9hY3V0ZT01MDA7ZS5hbWFjcm9uPTUwMDtlLnNhY3V0ZT0zODk7ZS5pZGllcmVzaXM9Mjc4O2UuT2NpcmN1bWZsZXg9Nzc4O2UuVWdyYXZlPTcyMjtlLkRlbHRhPTYxMjtlLnRob3JuPTU1NjtlLnR3b3N1cGVyaW9yPTMwMDtlLk9kaWVyZXNpcz03Nzg7ZS5tdT01NTY7ZS5pZ3JhdmU9Mjc4O2Uub2h1bmdhcnVtbGF1dD01MDA7ZS5Fb2dvbmVrPTY2NztlLmRjcm9hdD01NTY7ZS50aHJlZXF1YXJ0ZXJzPTc1MDtlLlNjZWRpbGxhPTU1NjtlLmxjYXJvbj0zOTQ7ZS5LY29tbWFhY2NlbnQ9Nzc4O2UuTGFjdXRlPTY2NztlLnRyYWRlbWFyaz0xZTM7ZS5lZG90YWNjZW50PTQ0NDtlLklncmF2ZT0zODk7ZS5JbWFjcm9uPTM4OTtlLkxjYXJvbj02Njc7ZS5vbmVoYWxmPTc1MDtlLmxlc3NlcXVhbD01NDk7ZS5vY2lyY3VtZmxleD01MDA7ZS5udGlsZGU9NTU2O2UuVWh1bmdhcnVtbGF1dD03MjI7ZS5FYWN1dGU9NjY3O2UuZW1hY3Jvbj00NDQ7ZS5nYnJldmU9NTAwO2Uub25lcXVhcnRlcj03NTA7ZS5TY2Fyb249NTU2O2UuU2NvbW1hYWNjZW50PTU1NjtlLk9odW5nYXJ1bWxhdXQ9Nzc4O2UuZGVncmVlPTQwMDtlLm9ncmF2ZT01MDA7ZS5DY2Fyb249NzIyO2UudWdyYXZlPTU1NjtlLnJhZGljYWw9NTQ5O2UuRGNhcm9uPTcyMjtlLnJjb21tYWFjY2VudD00NDQ7ZS5OdGlsZGU9NzIyO2Uub3RpbGRlPTUwMDtlLlJjb21tYWFjY2VudD03MjI7ZS5MY29tbWFhY2NlbnQ9NjY3O2UuQXRpbGRlPTcyMjtlLkFvZ29uZWs9NzIyO2UuQXJpbmc9NzIyO2UuT3RpbGRlPTc3ODtlLnpkb3RhY2NlbnQ9NDQ0O2UuRWNhcm9uPTY2NztlLklvZ29uZWs9Mzg5O2Uua2NvbW1hYWNjZW50PTU1NjtlLm1pbnVzPTU3MDtlLkljaXJjdW1mbGV4PTM4OTtlLm5jYXJvbj01NTY7ZS50Y29tbWFhY2NlbnQ9MzMzO2UubG9naWNhbG5vdD01NzA7ZS5vZGllcmVzaXM9NTAwO2UudWRpZXJlc2lzPTU1NjtlLm5vdGVxdWFsPTU0OTtlLmdjb21tYWFjY2VudD01MDA7ZS5ldGg9NTAwO2UuemNhcm9uPTQ0NDtlLm5jb21tYWFjY2VudD01NTY7ZS5vbmVzdXBlcmlvcj0zMDA7ZS5pbWFjcm9uPTI3ODtlLkV1cm89NTAwfSkpO2VbIlRpbWVzLUJvbGRJdGFsaWMiXT0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9MjUwO2UuZXhjbGFtPTM4OTtlLnF1b3RlZGJsPTU1NTtlLm51bWJlcnNpZ249NTAwO2UuZG9sbGFyPTUwMDtlLnBlcmNlbnQ9ODMzO2UuYW1wZXJzYW5kPTc3ODtlLnF1b3RlcmlnaHQ9MzMzO2UucGFyZW5sZWZ0PTMzMztlLnBhcmVucmlnaHQ9MzMzO2UuYXN0ZXJpc2s9NTAwO2UucGx1cz01NzA7ZS5jb21tYT0yNTA7ZS5oeXBoZW49MzMzO2UucGVyaW9kPTI1MDtlLnNsYXNoPTI3ODtlLnplcm89NTAwO2Uub25lPTUwMDtlLnR3bz01MDA7ZS50aHJlZT01MDA7ZS5mb3VyPTUwMDtlLmZpdmU9NTAwO2Uuc2l4PTUwMDtlLnNldmVuPTUwMDtlLmVpZ2h0PTUwMDtlLm5pbmU9NTAwO2UuY29sb249MzMzO2Uuc2VtaWNvbG9uPTMzMztlLmxlc3M9NTcwO2UuZXF1YWw9NTcwO2UuZ3JlYXRlcj01NzA7ZS5xdWVzdGlvbj01MDA7ZS5hdD04MzI7ZS5BPTY2NztlLkI9NjY3O2UuQz02Njc7ZS5EPTcyMjtlLkU9NjY3O2UuRj02Njc7ZS5HPTcyMjtlLkg9Nzc4O2UuST0zODk7ZS5KPTUwMDtlLks9NjY3O2UuTD02MTE7ZS5NPTg4OTtlLk49NzIyO2UuTz03MjI7ZS5QPTYxMTtlLlE9NzIyO2UuUj02Njc7ZS5TPTU1NjtlLlQ9NjExO2UuVT03MjI7ZS5WPTY2NztlLlc9ODg5O2UuWD02Njc7ZS5ZPTYxMTtlLlo9NjExO2UuYnJhY2tldGxlZnQ9MzMzO2UuYmFja3NsYXNoPTI3ODtlLmJyYWNrZXRyaWdodD0zMzM7ZS5hc2NpaWNpcmN1bT01NzA7ZS51bmRlcnNjb3JlPTUwMDtlLnF1b3RlbGVmdD0zMzM7ZS5hPTUwMDtlLmI9NTAwO2UuYz00NDQ7ZS5kPTUwMDtlLmU9NDQ0O2UuZj0zMzM7ZS5nPTUwMDtlLmg9NTU2O2UuaT0yNzg7ZS5qPTI3ODtlLms9NTAwO2UubD0yNzg7ZS5tPTc3ODtlLm49NTU2O2Uubz01MDA7ZS5wPTUwMDtlLnE9NTAwO2Uucj0zODk7ZS5zPTM4OTtlLnQ9Mjc4O2UudT01NTY7ZS52PTQ0NDtlLnc9NjY3O2UueD01MDA7ZS55PTQ0NDtlLno9Mzg5O2UuYnJhY2VsZWZ0PTM0ODtlLmJhcj0yMjA7ZS5icmFjZXJpZ2h0PTM0ODtlLmFzY2lpdGlsZGU9NTcwO2UuZXhjbGFtZG93bj0zODk7ZS5jZW50PTUwMDtlLnN0ZXJsaW5nPTUwMDtlLmZyYWN0aW9uPTE2NztlLnllbj01MDA7ZS5mbG9yaW49NTAwO2Uuc2VjdGlvbj01MDA7ZS5jdXJyZW5jeT01MDA7ZS5xdW90ZXNpbmdsZT0yNzg7ZS5xdW90ZWRibGxlZnQ9NTAwO2UuZ3VpbGxlbW90bGVmdD01MDA7ZS5ndWlsc2luZ2xsZWZ0PTMzMztlLmd1aWxzaW5nbHJpZ2h0PTMzMztlLmZpPTU1NjtlLmZsPTU1NjtlLmVuZGFzaD01MDA7ZS5kYWdnZXI9NTAwO2UuZGFnZ2VyZGJsPTUwMDtlLnBlcmlvZGNlbnRlcmVkPTI1MDtlLnBhcmFncmFwaD01MDA7ZS5idWxsZXQ9MzUwO2UucXVvdGVzaW5nbGJhc2U9MzMzO2UucXVvdGVkYmxiYXNlPTUwMDtlLnF1b3RlZGJscmlnaHQ9NTAwO2UuZ3VpbGxlbW90cmlnaHQ9NTAwO2UuZWxsaXBzaXM9MWUzO2UucGVydGhvdXNhbmQ9MWUzO2UucXVlc3Rpb25kb3duPTUwMDtlLmdyYXZlPTMzMztlLmFjdXRlPTMzMztlLmNpcmN1bWZsZXg9MzMzO2UudGlsZGU9MzMzO2UubWFjcm9uPTMzMztlLmJyZXZlPTMzMztlLmRvdGFjY2VudD0zMzM7ZS5kaWVyZXNpcz0zMzM7ZS5yaW5nPTMzMztlLmNlZGlsbGE9MzMzO2UuaHVuZ2FydW1sYXV0PTMzMztlLm9nb25laz0zMzM7ZS5jYXJvbj0zMzM7ZS5lbWRhc2g9MWUzO2UuQUU9OTQ0O2Uub3JkZmVtaW5pbmU9MjY2O2UuTHNsYXNoPTYxMTtlLk9zbGFzaD03MjI7ZS5PRT05NDQ7ZS5vcmRtYXNjdWxpbmU9MzAwO2UuYWU9NzIyO2UuZG90bGVzc2k9Mjc4O2UubHNsYXNoPTI3ODtlLm9zbGFzaD01MDA7ZS5vZT03MjI7ZS5nZXJtYW5kYmxzPTUwMDtlLklkaWVyZXNpcz0zODk7ZS5lYWN1dGU9NDQ0O2UuYWJyZXZlPTUwMDtlLnVodW5nYXJ1bWxhdXQ9NTU2O2UuZWNhcm9uPTQ0NDtlLllkaWVyZXNpcz02MTE7ZS5kaXZpZGU9NTcwO2UuWWFjdXRlPTYxMTtlLkFjaXJjdW1mbGV4PTY2NztlLmFhY3V0ZT01MDA7ZS5VY2lyY3VtZmxleD03MjI7ZS55YWN1dGU9NDQ0O2Uuc2NvbW1hYWNjZW50PTM4OTtlLmVjaXJjdW1mbGV4PTQ0NDtlLlVyaW5nPTcyMjtlLlVkaWVyZXNpcz03MjI7ZS5hb2dvbmVrPTUwMDtlLlVhY3V0ZT03MjI7ZS51b2dvbmVrPTU1NjtlLkVkaWVyZXNpcz02Njc7ZS5EY3JvYXQ9NzIyO2UuY29tbWFhY2NlbnQ9MjUwO2UuY29weXJpZ2h0PTc0NztlLkVtYWNyb249NjY3O2UuY2Nhcm9uPTQ0NDtlLmFyaW5nPTUwMDtlLk5jb21tYWFjY2VudD03MjI7ZS5sYWN1dGU9Mjc4O2UuYWdyYXZlPTUwMDtlLlRjb21tYWFjY2VudD02MTE7ZS5DYWN1dGU9NjY3O2UuYXRpbGRlPTUwMDtlLkVkb3RhY2NlbnQ9NjY3O2Uuc2Nhcm9uPTM4OTtlLnNjZWRpbGxhPTM4OTtlLmlhY3V0ZT0yNzg7ZS5sb3plbmdlPTQ5NDtlLlJjYXJvbj02Njc7ZS5HY29tbWFhY2NlbnQ9NzIyO2UudWNpcmN1bWZsZXg9NTU2O2UuYWNpcmN1bWZsZXg9NTAwO2UuQW1hY3Jvbj02Njc7ZS5yY2Fyb249Mzg5O2UuY2NlZGlsbGE9NDQ0O2UuWmRvdGFjY2VudD02MTE7ZS5UaG9ybj02MTE7ZS5PbWFjcm9uPTcyMjtlLlJhY3V0ZT02Njc7ZS5TYWN1dGU9NTU2O2UuZGNhcm9uPTYwODtlLlVtYWNyb249NzIyO2UudXJpbmc9NTU2O2UudGhyZWVzdXBlcmlvcj0zMDA7ZS5PZ3JhdmU9NzIyO2UuQWdyYXZlPTY2NztlLkFicmV2ZT02Njc7ZS5tdWx0aXBseT01NzA7ZS51YWN1dGU9NTU2O2UuVGNhcm9uPTYxMTtlLnBhcnRpYWxkaWZmPTQ5NDtlLnlkaWVyZXNpcz00NDQ7ZS5OYWN1dGU9NzIyO2UuaWNpcmN1bWZsZXg9Mjc4O2UuRWNpcmN1bWZsZXg9NjY3O2UuYWRpZXJlc2lzPTUwMDtlLmVkaWVyZXNpcz00NDQ7ZS5jYWN1dGU9NDQ0O2UubmFjdXRlPTU1NjtlLnVtYWNyb249NTU2O2UuTmNhcm9uPTcyMjtlLklhY3V0ZT0zODk7ZS5wbHVzbWludXM9NTcwO2UuYnJva2VuYmFyPTIyMDtlLnJlZ2lzdGVyZWQ9NzQ3O2UuR2JyZXZlPTcyMjtlLklkb3RhY2NlbnQ9Mzg5O2Uuc3VtbWF0aW9uPTYwMDtlLkVncmF2ZT02Njc7ZS5yYWN1dGU9Mzg5O2Uub21hY3Jvbj01MDA7ZS5aYWN1dGU9NjExO2UuWmNhcm9uPTYxMTtlLmdyZWF0ZXJlcXVhbD01NDk7ZS5FdGg9NzIyO2UuQ2NlZGlsbGE9NjY3O2UubGNvbW1hYWNjZW50PTI3ODtlLnRjYXJvbj0zNjY7ZS5lb2dvbmVrPTQ0NDtlLlVvZ29uZWs9NzIyO2UuQWFjdXRlPTY2NztlLkFkaWVyZXNpcz02Njc7ZS5lZ3JhdmU9NDQ0O2UuemFjdXRlPTM4OTtlLmlvZ29uZWs9Mjc4O2UuT2FjdXRlPTcyMjtlLm9hY3V0ZT01MDA7ZS5hbWFjcm9uPTUwMDtlLnNhY3V0ZT0zODk7ZS5pZGllcmVzaXM9Mjc4O2UuT2NpcmN1bWZsZXg9NzIyO2UuVWdyYXZlPTcyMjtlLkRlbHRhPTYxMjtlLnRob3JuPTUwMDtlLnR3b3N1cGVyaW9yPTMwMDtlLk9kaWVyZXNpcz03MjI7ZS5tdT01NzY7ZS5pZ3JhdmU9Mjc4O2Uub2h1bmdhcnVtbGF1dD01MDA7ZS5Fb2dvbmVrPTY2NztlLmRjcm9hdD01MDA7ZS50aHJlZXF1YXJ0ZXJzPTc1MDtlLlNjZWRpbGxhPTU1NjtlLmxjYXJvbj0zODI7ZS5LY29tbWFhY2NlbnQ9NjY3O2UuTGFjdXRlPTYxMTtlLnRyYWRlbWFyaz0xZTM7ZS5lZG90YWNjZW50PTQ0NDtlLklncmF2ZT0zODk7ZS5JbWFjcm9uPTM4OTtlLkxjYXJvbj02MTE7ZS5vbmVoYWxmPTc1MDtlLmxlc3NlcXVhbD01NDk7ZS5vY2lyY3VtZmxleD01MDA7ZS5udGlsZGU9NTU2O2UuVWh1bmdhcnVtbGF1dD03MjI7ZS5FYWN1dGU9NjY3O2UuZW1hY3Jvbj00NDQ7ZS5nYnJldmU9NTAwO2Uub25lcXVhcnRlcj03NTA7ZS5TY2Fyb249NTU2O2UuU2NvbW1hYWNjZW50PTU1NjtlLk9odW5nYXJ1bWxhdXQ9NzIyO2UuZGVncmVlPTQwMDtlLm9ncmF2ZT01MDA7ZS5DY2Fyb249NjY3O2UudWdyYXZlPTU1NjtlLnJhZGljYWw9NTQ5O2UuRGNhcm9uPTcyMjtlLnJjb21tYWFjY2VudD0zODk7ZS5OdGlsZGU9NzIyO2Uub3RpbGRlPTUwMDtlLlJjb21tYWFjY2VudD02Njc7ZS5MY29tbWFhY2NlbnQ9NjExO2UuQXRpbGRlPTY2NztlLkFvZ29uZWs9NjY3O2UuQXJpbmc9NjY3O2UuT3RpbGRlPTcyMjtlLnpkb3RhY2NlbnQ9Mzg5O2UuRWNhcm9uPTY2NztlLklvZ29uZWs9Mzg5O2Uua2NvbW1hYWNjZW50PTUwMDtlLm1pbnVzPTYwNjtlLkljaXJjdW1mbGV4PTM4OTtlLm5jYXJvbj01NTY7ZS50Y29tbWFhY2NlbnQ9Mjc4O2UubG9naWNhbG5vdD02MDY7ZS5vZGllcmVzaXM9NTAwO2UudWRpZXJlc2lzPTU1NjtlLm5vdGVxdWFsPTU0OTtlLmdjb21tYWFjY2VudD01MDA7ZS5ldGg9NTAwO2UuemNhcm9uPTM4OTtlLm5jb21tYWFjY2VudD01NTY7ZS5vbmVzdXBlcmlvcj0zMDA7ZS5pbWFjcm9uPTI3ODtlLkV1cm89NTAwfSkpO2VbIlRpbWVzLUl0YWxpYyJdPSgwLHIuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNTA7ZS5leGNsYW09MzMzO2UucXVvdGVkYmw9NDIwO2UubnVtYmVyc2lnbj01MDA7ZS5kb2xsYXI9NTAwO2UucGVyY2VudD04MzM7ZS5hbXBlcnNhbmQ9Nzc4O2UucXVvdGVyaWdodD0zMzM7ZS5wYXJlbmxlZnQ9MzMzO2UucGFyZW5yaWdodD0zMzM7ZS5hc3Rlcmlzaz01MDA7ZS5wbHVzPTY3NTtlLmNvbW1hPTI1MDtlLmh5cGhlbj0zMzM7ZS5wZXJpb2Q9MjUwO2Uuc2xhc2g9Mjc4O2UuemVybz01MDA7ZS5vbmU9NTAwO2UudHdvPTUwMDtlLnRocmVlPTUwMDtlLmZvdXI9NTAwO2UuZml2ZT01MDA7ZS5zaXg9NTAwO2Uuc2V2ZW49NTAwO2UuZWlnaHQ9NTAwO2UubmluZT01MDA7ZS5jb2xvbj0zMzM7ZS5zZW1pY29sb249MzMzO2UubGVzcz02NzU7ZS5lcXVhbD02NzU7ZS5ncmVhdGVyPTY3NTtlLnF1ZXN0aW9uPTUwMDtlLmF0PTkyMDtlLkE9NjExO2UuQj02MTE7ZS5DPTY2NztlLkQ9NzIyO2UuRT02MTE7ZS5GPTYxMTtlLkc9NzIyO2UuSD03MjI7ZS5JPTMzMztlLko9NDQ0O2UuSz02Njc7ZS5MPTU1NjtlLk09ODMzO2UuTj02Njc7ZS5PPTcyMjtlLlA9NjExO2UuUT03MjI7ZS5SPTYxMTtlLlM9NTAwO2UuVD01NTY7ZS5VPTcyMjtlLlY9NjExO2UuVz04MzM7ZS5YPTYxMTtlLlk9NTU2O2UuWj01NTY7ZS5icmFja2V0bGVmdD0zODk7ZS5iYWNrc2xhc2g9Mjc4O2UuYnJhY2tldHJpZ2h0PTM4OTtlLmFzY2lpY2lyY3VtPTQyMjtlLnVuZGVyc2NvcmU9NTAwO2UucXVvdGVsZWZ0PTMzMztlLmE9NTAwO2UuYj01MDA7ZS5jPTQ0NDtlLmQ9NTAwO2UuZT00NDQ7ZS5mPTI3ODtlLmc9NTAwO2UuaD01MDA7ZS5pPTI3ODtlLmo9Mjc4O2Uuaz00NDQ7ZS5sPTI3ODtlLm09NzIyO2Uubj01MDA7ZS5vPTUwMDtlLnA9NTAwO2UucT01MDA7ZS5yPTM4OTtlLnM9Mzg5O2UudD0yNzg7ZS51PTUwMDtlLnY9NDQ0O2Uudz02Njc7ZS54PTQ0NDtlLnk9NDQ0O2Uuej0zODk7ZS5icmFjZWxlZnQ9NDAwO2UuYmFyPTI3NTtlLmJyYWNlcmlnaHQ9NDAwO2UuYXNjaWl0aWxkZT01NDE7ZS5leGNsYW1kb3duPTM4OTtlLmNlbnQ9NTAwO2Uuc3Rlcmxpbmc9NTAwO2UuZnJhY3Rpb249MTY3O2UueWVuPTUwMDtlLmZsb3Jpbj01MDA7ZS5zZWN0aW9uPTUwMDtlLmN1cnJlbmN5PTUwMDtlLnF1b3Rlc2luZ2xlPTIxNDtlLnF1b3RlZGJsbGVmdD01NTY7ZS5ndWlsbGVtb3RsZWZ0PTUwMDtlLmd1aWxzaW5nbGxlZnQ9MzMzO2UuZ3VpbHNpbmdscmlnaHQ9MzMzO2UuZmk9NTAwO2UuZmw9NTAwO2UuZW5kYXNoPTUwMDtlLmRhZ2dlcj01MDA7ZS5kYWdnZXJkYmw9NTAwO2UucGVyaW9kY2VudGVyZWQ9MjUwO2UucGFyYWdyYXBoPTUyMztlLmJ1bGxldD0zNTA7ZS5xdW90ZXNpbmdsYmFzZT0zMzM7ZS5xdW90ZWRibGJhc2U9NTU2O2UucXVvdGVkYmxyaWdodD01NTY7ZS5ndWlsbGVtb3RyaWdodD01MDA7ZS5lbGxpcHNpcz04ODk7ZS5wZXJ0aG91c2FuZD0xZTM7ZS5xdWVzdGlvbmRvd249NTAwO2UuZ3JhdmU9MzMzO2UuYWN1dGU9MzMzO2UuY2lyY3VtZmxleD0zMzM7ZS50aWxkZT0zMzM7ZS5tYWNyb249MzMzO2UuYnJldmU9MzMzO2UuZG90YWNjZW50PTMzMztlLmRpZXJlc2lzPTMzMztlLnJpbmc9MzMzO2UuY2VkaWxsYT0zMzM7ZS5odW5nYXJ1bWxhdXQ9MzMzO2Uub2dvbmVrPTMzMztlLmNhcm9uPTMzMztlLmVtZGFzaD04ODk7ZS5BRT04ODk7ZS5vcmRmZW1pbmluZT0yNzY7ZS5Mc2xhc2g9NTU2O2UuT3NsYXNoPTcyMjtlLk9FPTk0NDtlLm9yZG1hc2N1bGluZT0zMTA7ZS5hZT02Njc7ZS5kb3RsZXNzaT0yNzg7ZS5sc2xhc2g9Mjc4O2Uub3NsYXNoPTUwMDtlLm9lPTY2NztlLmdlcm1hbmRibHM9NTAwO2UuSWRpZXJlc2lzPTMzMztlLmVhY3V0ZT00NDQ7ZS5hYnJldmU9NTAwO2UudWh1bmdhcnVtbGF1dD01MDA7ZS5lY2Fyb249NDQ0O2UuWWRpZXJlc2lzPTU1NjtlLmRpdmlkZT02NzU7ZS5ZYWN1dGU9NTU2O2UuQWNpcmN1bWZsZXg9NjExO2UuYWFjdXRlPTUwMDtlLlVjaXJjdW1mbGV4PTcyMjtlLnlhY3V0ZT00NDQ7ZS5zY29tbWFhY2NlbnQ9Mzg5O2UuZWNpcmN1bWZsZXg9NDQ0O2UuVXJpbmc9NzIyO2UuVWRpZXJlc2lzPTcyMjtlLmFvZ29uZWs9NTAwO2UuVWFjdXRlPTcyMjtlLnVvZ29uZWs9NTAwO2UuRWRpZXJlc2lzPTYxMTtlLkRjcm9hdD03MjI7ZS5jb21tYWFjY2VudD0yNTA7ZS5jb3B5cmlnaHQ9NzYwO2UuRW1hY3Jvbj02MTE7ZS5jY2Fyb249NDQ0O2UuYXJpbmc9NTAwO2UuTmNvbW1hYWNjZW50PTY2NztlLmxhY3V0ZT0yNzg7ZS5hZ3JhdmU9NTAwO2UuVGNvbW1hYWNjZW50PTU1NjtlLkNhY3V0ZT02Njc7ZS5hdGlsZGU9NTAwO2UuRWRvdGFjY2VudD02MTE7ZS5zY2Fyb249Mzg5O2Uuc2NlZGlsbGE9Mzg5O2UuaWFjdXRlPTI3ODtlLmxvemVuZ2U9NDcxO2UuUmNhcm9uPTYxMTtlLkdjb21tYWFjY2VudD03MjI7ZS51Y2lyY3VtZmxleD01MDA7ZS5hY2lyY3VtZmxleD01MDA7ZS5BbWFjcm9uPTYxMTtlLnJjYXJvbj0zODk7ZS5jY2VkaWxsYT00NDQ7ZS5aZG90YWNjZW50PTU1NjtlLlRob3JuPTYxMTtlLk9tYWNyb249NzIyO2UuUmFjdXRlPTYxMTtlLlNhY3V0ZT01MDA7ZS5kY2Fyb249NTQ0O2UuVW1hY3Jvbj03MjI7ZS51cmluZz01MDA7ZS50aHJlZXN1cGVyaW9yPTMwMDtlLk9ncmF2ZT03MjI7ZS5BZ3JhdmU9NjExO2UuQWJyZXZlPTYxMTtlLm11bHRpcGx5PTY3NTtlLnVhY3V0ZT01MDA7ZS5UY2Fyb249NTU2O2UucGFydGlhbGRpZmY9NDc2O2UueWRpZXJlc2lzPTQ0NDtlLk5hY3V0ZT02Njc7ZS5pY2lyY3VtZmxleD0yNzg7ZS5FY2lyY3VtZmxleD02MTE7ZS5hZGllcmVzaXM9NTAwO2UuZWRpZXJlc2lzPTQ0NDtlLmNhY3V0ZT00NDQ7ZS5uYWN1dGU9NTAwO2UudW1hY3Jvbj01MDA7ZS5OY2Fyb249NjY3O2UuSWFjdXRlPTMzMztlLnBsdXNtaW51cz02NzU7ZS5icm9rZW5iYXI9Mjc1O2UucmVnaXN0ZXJlZD03NjA7ZS5HYnJldmU9NzIyO2UuSWRvdGFjY2VudD0zMzM7ZS5zdW1tYXRpb249NjAwO2UuRWdyYXZlPTYxMTtlLnJhY3V0ZT0zODk7ZS5vbWFjcm9uPTUwMDtlLlphY3V0ZT01NTY7ZS5aY2Fyb249NTU2O2UuZ3JlYXRlcmVxdWFsPTU0OTtlLkV0aD03MjI7ZS5DY2VkaWxsYT02Njc7ZS5sY29tbWFhY2NlbnQ9Mjc4O2UudGNhcm9uPTMwMDtlLmVvZ29uZWs9NDQ0O2UuVW9nb25laz03MjI7ZS5BYWN1dGU9NjExO2UuQWRpZXJlc2lzPTYxMTtlLmVncmF2ZT00NDQ7ZS56YWN1dGU9Mzg5O2UuaW9nb25laz0yNzg7ZS5PYWN1dGU9NzIyO2Uub2FjdXRlPTUwMDtlLmFtYWNyb249NTAwO2Uuc2FjdXRlPTM4OTtlLmlkaWVyZXNpcz0yNzg7ZS5PY2lyY3VtZmxleD03MjI7ZS5VZ3JhdmU9NzIyO2UuRGVsdGE9NjEyO2UudGhvcm49NTAwO2UudHdvc3VwZXJpb3I9MzAwO2UuT2RpZXJlc2lzPTcyMjtlLm11PTUwMDtlLmlncmF2ZT0yNzg7ZS5vaHVuZ2FydW1sYXV0PTUwMDtlLkVvZ29uZWs9NjExO2UuZGNyb2F0PTUwMDtlLnRocmVlcXVhcnRlcnM9NzUwO2UuU2NlZGlsbGE9NTAwO2UubGNhcm9uPTMwMDtlLktjb21tYWFjY2VudD02Njc7ZS5MYWN1dGU9NTU2O2UudHJhZGVtYXJrPTk4MDtlLmVkb3RhY2NlbnQ9NDQ0O2UuSWdyYXZlPTMzMztlLkltYWNyb249MzMzO2UuTGNhcm9uPTYxMTtlLm9uZWhhbGY9NzUwO2UubGVzc2VxdWFsPTU0OTtlLm9jaXJjdW1mbGV4PTUwMDtlLm50aWxkZT01MDA7ZS5VaHVuZ2FydW1sYXV0PTcyMjtlLkVhY3V0ZT02MTE7ZS5lbWFjcm9uPTQ0NDtlLmdicmV2ZT01MDA7ZS5vbmVxdWFydGVyPTc1MDtlLlNjYXJvbj01MDA7ZS5TY29tbWFhY2NlbnQ9NTAwO2UuT2h1bmdhcnVtbGF1dD03MjI7ZS5kZWdyZWU9NDAwO2Uub2dyYXZlPTUwMDtlLkNjYXJvbj02Njc7ZS51Z3JhdmU9NTAwO2UucmFkaWNhbD00NTM7ZS5EY2Fyb249NzIyO2UucmNvbW1hYWNjZW50PTM4OTtlLk50aWxkZT02Njc7ZS5vdGlsZGU9NTAwO2UuUmNvbW1hYWNjZW50PTYxMTtlLkxjb21tYWFjY2VudD01NTY7ZS5BdGlsZGU9NjExO2UuQW9nb25laz02MTE7ZS5BcmluZz02MTE7ZS5PdGlsZGU9NzIyO2UuemRvdGFjY2VudD0zODk7ZS5FY2Fyb249NjExO2UuSW9nb25laz0zMzM7ZS5rY29tbWFhY2NlbnQ9NDQ0O2UubWludXM9Njc1O2UuSWNpcmN1bWZsZXg9MzMzO2UubmNhcm9uPTUwMDtlLnRjb21tYWFjY2VudD0yNzg7ZS5sb2dpY2Fsbm90PTY3NTtlLm9kaWVyZXNpcz01MDA7ZS51ZGllcmVzaXM9NTAwO2Uubm90ZXF1YWw9NTQ5O2UuZ2NvbW1hYWNjZW50PTUwMDtlLmV0aD01MDA7ZS56Y2Fyb249Mzg5O2UubmNvbW1hYWNjZW50PTUwMDtlLm9uZXN1cGVyaW9yPTMwMDtlLmltYWNyb249Mjc4O2UuRXVybz01MDB9KSk7ZS5aYXBmRGluZ2JhdHM9KDAsci5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI3ODtlLmExPTk3NDtlLmEyPTk2MTtlLmEyMDI9OTc0O2UuYTM9OTgwO2UuYTQ9NzE5O2UuYTU9Nzg5O2UuYTExOT03OTA7ZS5hMTE4PTc5MTtlLmExMTc9NjkwO2UuYTExPTk2MDtlLmExMj05Mzk7ZS5hMTM9NTQ5O2UuYTE0PTg1NTtlLmExNT05MTE7ZS5hMTY9OTMzO2UuYTEwNT05MTE7ZS5hMTc9OTQ1O2UuYTE4PTk3NDtlLmExOT03NTU7ZS5hMjA9ODQ2O2UuYTIxPTc2MjtlLmEyMj03NjE7ZS5hMjM9NTcxO2UuYTI0PTY3NztlLmEyNT03NjM7ZS5hMjY9NzYwO2UuYTI3PTc1OTtlLmEyOD03NTQ7ZS5hNj00OTQ7ZS5hNz01NTI7ZS5hOD01Mzc7ZS5hOT01Nzc7ZS5hMTA9NjkyO2UuYTI5PTc4NjtlLmEzMD03ODg7ZS5hMzE9Nzg4O2UuYTMyPTc5MDtlLmEzMz03OTM7ZS5hMzQ9Nzk0O2UuYTM1PTgxNjtlLmEzNj04MjM7ZS5hMzc9Nzg5O2UuYTM4PTg0MTtlLmEzOT04MjM7ZS5hNDA9ODMzO2UuYTQxPTgxNjtlLmE0Mj04MzE7ZS5hNDM9OTIzO2UuYTQ0PTc0NDtlLmE0NT03MjM7ZS5hNDY9NzQ5O2UuYTQ3PTc5MDtlLmE0OD03OTI7ZS5hNDk9Njk1O2UuYTUwPTc3NjtlLmE1MT03Njg7ZS5hNTI9NzkyO2UuYTUzPTc1OTtlLmE1ND03MDc7ZS5hNTU9NzA4O2UuYTU2PTY4MjtlLmE1Nz03MDE7ZS5hNTg9ODI2O2UuYTU5PTgxNTtlLmE2MD03ODk7ZS5hNjE9Nzg5O2UuYTYyPTcwNztlLmE2Mz02ODc7ZS5hNjQ9Njk2O2UuYTY1PTY4OTtlLmE2Nj03ODY7ZS5hNjc9Nzg3O2UuYTY4PTcxMztlLmE2OT03OTE7ZS5hNzA9Nzg1O2UuYTcxPTc5MTtlLmE3Mj04NzM7ZS5hNzM9NzYxO2UuYTc0PTc2MjtlLmEyMDM9NzYyO2UuYTc1PTc1OTtlLmEyMDQ9NzU5O2UuYTc2PTg5MjtlLmE3Nz04OTI7ZS5hNzg9Nzg4O2UuYTc5PTc4NDtlLmE4MT00Mzg7ZS5hODI9MTM4O2UuYTgzPTI3NztlLmE4ND00MTU7ZS5hOTc9MzkyO2UuYTk4PTM5MjtlLmE5OT02Njg7ZS5hMTAwPTY2ODtlLmE4OT0zOTA7ZS5hOTA9MzkwO2UuYTkzPTMxNztlLmE5ND0zMTc7ZS5hOTE9Mjc2O2UuYTkyPTI3NjtlLmEyMDU9NTA5O2UuYTg1PTUwOTtlLmEyMDY9NDEwO2UuYTg2PTQxMDtlLmE4Nz0yMzQ7ZS5hODg9MjM0O2UuYTk1PTMzNDtlLmE5Nj0zMzQ7ZS5hMTAxPTczMjtlLmExMDI9NTQ0O2UuYTEwMz01NDQ7ZS5hMTA0PTkxMDtlLmExMDY9NjY3O2UuYTEwNz03NjA7ZS5hMTA4PTc2MDtlLmExMTI9Nzc2O2UuYTExMT01OTU7ZS5hMTEwPTY5NDtlLmExMDk9NjI2O2UuYTEyMD03ODg7ZS5hMTIxPTc4ODtlLmExMjI9Nzg4O2UuYTEyMz03ODg7ZS5hMTI0PTc4ODtlLmExMjU9Nzg4O2UuYTEyNj03ODg7ZS5hMTI3PTc4ODtlLmExMjg9Nzg4O2UuYTEyOT03ODg7ZS5hMTMwPTc4ODtlLmExMzE9Nzg4O2UuYTEzMj03ODg7ZS5hMTMzPTc4ODtlLmExMzQ9Nzg4O2UuYTEzNT03ODg7ZS5hMTM2PTc4ODtlLmExMzc9Nzg4O2UuYTEzOD03ODg7ZS5hMTM5PTc4ODtlLmExNDA9Nzg4O2UuYTE0MT03ODg7ZS5hMTQyPTc4ODtlLmExNDM9Nzg4O2UuYTE0ND03ODg7ZS5hMTQ1PTc4ODtlLmExNDY9Nzg4O2UuYTE0Nz03ODg7ZS5hMTQ4PTc4ODtlLmExNDk9Nzg4O2UuYTE1MD03ODg7ZS5hMTUxPTc4ODtlLmExNTI9Nzg4O2UuYTE1Mz03ODg7ZS5hMTU0PTc4ODtlLmExNTU9Nzg4O2UuYTE1Nj03ODg7ZS5hMTU3PTc4ODtlLmExNTg9Nzg4O2UuYTE1OT03ODg7ZS5hMTYwPTg5NDtlLmExNjE9ODM4O2UuYTE2Mz0xMDE2O2UuYTE2ND00NTg7ZS5hMTk2PTc0ODtlLmExNjU9OTI0O2UuYTE5Mj03NDg7ZS5hMTY2PTkxODtlLmExNjc9OTI3O2UuYTE2OD05Mjg7ZS5hMTY5PTkyODtlLmExNzA9ODM0O2UuYTE3MT04NzM7ZS5hMTcyPTgyODtlLmExNzM9OTI0O2UuYTE2Mj05MjQ7ZS5hMTc0PTkxNztlLmExNzU9OTMwO2UuYTE3Nj05MzE7ZS5hMTc3PTQ2MztlLmExNzg9ODgzO2UuYTE3OT04MzY7ZS5hMTkzPTgzNjtlLmExODA9ODY3O2UuYTE5OT04Njc7ZS5hMTgxPTY5NjtlLmEyMDA9Njk2O2UuYTE4Mj04NzQ7ZS5hMjAxPTg3NDtlLmExODM9NzYwO2UuYTE4ND05NDY7ZS5hMTk3PTc3MTtlLmExODU9ODY1O2UuYTE5ND03NzE7ZS5hMTk4PTg4ODtlLmExODY9OTY3O2UuYTE5NT04ODg7ZS5hMTg3PTgzMTtlLmExODg9ODczO2UuYTE4OT05Mjc7ZS5hMTkwPTk3MDtlLmExOTE9OTE4fSkpfSkpO3QuZ2V0TWV0cmljcz1uO2NvbnN0IGk9KDAsci5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLkNvdXJpZXI9e2FzY2VudDo2MjksZGVzY2VudDotMTU3LGNhcEhlaWdodDo1NjIseEhlaWdodDotNDI2fTtlWyJDb3VyaWVyLUJvbGQiXT17YXNjZW50OjYyOSxkZXNjZW50Oi0xNTcsY2FwSGVpZ2h0OjU2Mix4SGVpZ2h0OjQzOX07ZVsiQ291cmllci1PYmxpcXVlIl09e2FzY2VudDo2MjksZGVzY2VudDotMTU3LGNhcEhlaWdodDo1NjIseEhlaWdodDo0MjZ9O2VbIkNvdXJpZXItQm9sZE9ibGlxdWUiXT17YXNjZW50OjYyOSxkZXNjZW50Oi0xNTcsY2FwSGVpZ2h0OjU2Mix4SGVpZ2h0OjQyNn07ZS5IZWx2ZXRpY2E9e2FzY2VudDo3MTgsZGVzY2VudDotMjA3LGNhcEhlaWdodDo3MTgseEhlaWdodDo1MjN9O2VbIkhlbHZldGljYS1Cb2xkIl09e2FzY2VudDo3MTgsZGVzY2VudDotMjA3LGNhcEhlaWdodDo3MTgseEhlaWdodDo1MzJ9O2VbIkhlbHZldGljYS1PYmxpcXVlIl09e2FzY2VudDo3MTgsZGVzY2VudDotMjA3LGNhcEhlaWdodDo3MTgseEhlaWdodDo1MjN9O2VbIkhlbHZldGljYS1Cb2xkT2JsaXF1ZSJdPXthc2NlbnQ6NzE4LGRlc2NlbnQ6LTIwNyxjYXBIZWlnaHQ6NzE4LHhIZWlnaHQ6NTMyfTtlWyJUaW1lcy1Sb21hbiJdPXthc2NlbnQ6NjgzLGRlc2NlbnQ6LTIxNyxjYXBIZWlnaHQ6NjYyLHhIZWlnaHQ6NDUwfTtlWyJUaW1lcy1Cb2xkIl09e2FzY2VudDo2ODMsZGVzY2VudDotMjE3LGNhcEhlaWdodDo2NzYseEhlaWdodDo0NjF9O2VbIlRpbWVzLUl0YWxpYyJdPXthc2NlbnQ6NjgzLGRlc2NlbnQ6LTIxNyxjYXBIZWlnaHQ6NjUzLHhIZWlnaHQ6NDQxfTtlWyJUaW1lcy1Cb2xkSXRhbGljIl09e2FzY2VudDo2ODMsZGVzY2VudDotMjE3LGNhcEhlaWdodDo2NjkseEhlaWdodDo0NjJ9O2UuU3ltYm9sPXthc2NlbnQ6TWF0aC5OYU4sZGVzY2VudDpNYXRoLk5hTixjYXBIZWlnaHQ6TWF0aC5OYU4seEhlaWdodDpNYXRoLk5hTn07ZS5aYXBmRGluZ2JhdHM9e2FzY2VudDpNYXRoLk5hTixkZXNjZW50Ok1hdGguTmFOLGNhcEhlaWdodDpNYXRoLk5hTix4SGVpZ2h0Ok1hdGguTmFOfX0pKTt0LmdldEZvbnRCYXNpY01ldHJpY3M9aX0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5HbHlmVGFibGU9dm9pZCAwO3QuR2x5ZlRhYmxlPWNsYXNzIEdseWZUYWJsZXtjb25zdHJ1Y3Rvcih7Z2x5ZlRhYmxlOmUsaXNHbHlwaExvY2F0aW9uc0xvbmc6dCxsb2NhVGFibGU6YSxudW1HbHlwaHM6cn0pe3RoaXMuZ2x5cGhzPVtdO2NvbnN0IG49bmV3IERhdGFWaWV3KGEuYnVmZmVyLGEuYnl0ZU9mZnNldCxhLmJ5dGVMZW5ndGgpLGk9bmV3IERhdGFWaWV3KGUuYnVmZmVyLGUuYnl0ZU9mZnNldCxlLmJ5dGVMZW5ndGgpLHM9dD80OjI7bGV0IG89dD9uLmdldFVpbnQzMigwKToyKm4uZ2V0VWludDE2KDApLGM9MDtmb3IobGV0IGU9MDtlPHI7ZSsrKXtjKz1zO2NvbnN0IGU9dD9uLmdldFVpbnQzMihjKToyKm4uZ2V0VWludDE2KGMpO2lmKGU9PT1vKXt0aGlzLmdseXBocy5wdXNoKG5ldyBHbHlwaCh7fSkpO2NvbnRpbnVlfWNvbnN0IGE9R2x5cGgucGFyc2UobyxpKTt0aGlzLmdseXBocy5wdXNoKGEpO289ZX19Z2V0U2l6ZSgpe3JldHVybiB0aGlzLmdseXBocy5yZWR1Y2UoKChlLHQpPT5lKyh0LmdldFNpemUoKSszJi00KSksMCl9d3JpdGUoKXtjb25zdCBlPXRoaXMuZ2V0U2l6ZSgpLHQ9bmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcihlKSksYT1lPjEzMTA3MCxyPWE/NDoyLG49bmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigodGhpcy5nbHlwaHMubGVuZ3RoKzEpKnIpKTthP24uc2V0VWludDMyKDAsMCk6bi5zZXRVaW50MTYoMCwwKTtsZXQgaT0wLHM9MDtmb3IoY29uc3QgZSBvZiB0aGlzLmdseXBocyl7aSs9ZS53cml0ZShpLHQpO2k9aSszJi00O3MrPXI7YT9uLnNldFVpbnQzMihzLGkpOm4uc2V0VWludDE2KHMsaT4+MSl9cmV0dXJue2lzTG9jYXRpb25Mb25nOmEsbG9jYTpuZXcgVWludDhBcnJheShuLmJ1ZmZlciksZ2x5ZjpuZXcgVWludDhBcnJheSh0LmJ1ZmZlcil9fXNjYWxlKGUpe2ZvcihsZXQgdD0wLGE9dGhpcy5nbHlwaHMubGVuZ3RoO3Q8YTt0KyspdGhpcy5nbHlwaHNbdF0uc2NhbGUoZVt0XSl9fTtjbGFzcyBHbHlwaHtjb25zdHJ1Y3Rvcih7aGVhZGVyOmU9bnVsbCxzaW1wbGU6dD1udWxsLGNvbXBvc2l0ZXM6YT1udWxsfSl7dGhpcy5oZWFkZXI9ZTt0aGlzLnNpbXBsZT10O3RoaXMuY29tcG9zaXRlcz1hfXN0YXRpYyBwYXJzZShlLHQpe2NvbnN0W2Escl09R2x5cGhIZWFkZXIucGFyc2UoZSx0KTtlKz1hO2lmKHIubnVtYmVyT2ZDb250b3VyczwwKXtjb25zdCBhPVtdO2Zvcig7Oyl7Y29uc3RbcixuXT1Db21wb3NpdGVHbHlwaC5wYXJzZShlLHQpO2UrPXI7YS5wdXNoKG4pO2lmKCEoMzImbi5mbGFncykpYnJlYWt9cmV0dXJuIG5ldyBHbHlwaCh7aGVhZGVyOnIsY29tcG9zaXRlczphfSl9Y29uc3Qgbj1TaW1wbGVHbHlwaC5wYXJzZShlLHQsci5udW1iZXJPZkNvbnRvdXJzKTtyZXR1cm4gbmV3IEdseXBoKHtoZWFkZXI6cixzaW1wbGU6bn0pfWdldFNpemUoKXtpZighdGhpcy5oZWFkZXIpcmV0dXJuIDA7Y29uc3QgZT10aGlzLnNpbXBsZT90aGlzLnNpbXBsZS5nZXRTaXplKCk6dGhpcy5jb21wb3NpdGVzLnJlZHVjZSgoKGUsdCk9PmUrdC5nZXRTaXplKCkpLDApO3JldHVybiB0aGlzLmhlYWRlci5nZXRTaXplKCkrZX13cml0ZShlLHQpe2lmKCF0aGlzLmhlYWRlcilyZXR1cm4gMDtjb25zdCBhPWU7ZSs9dGhpcy5oZWFkZXIud3JpdGUoZSx0KTtpZih0aGlzLnNpbXBsZSllKz10aGlzLnNpbXBsZS53cml0ZShlLHQpO2Vsc2UgZm9yKGNvbnN0IGEgb2YgdGhpcy5jb21wb3NpdGVzKWUrPWEud3JpdGUoZSx0KTtyZXR1cm4gZS1hfXNjYWxlKGUpe2lmKCF0aGlzLmhlYWRlcilyZXR1cm47Y29uc3QgdD0odGhpcy5oZWFkZXIueE1pbit0aGlzLmhlYWRlci54TWF4KS8yO3RoaXMuaGVhZGVyLnNjYWxlKHQsZSk7aWYodGhpcy5zaW1wbGUpdGhpcy5zaW1wbGUuc2NhbGUodCxlKTtlbHNlIGZvcihjb25zdCBhIG9mIHRoaXMuY29tcG9zaXRlcylhLnNjYWxlKHQsZSl9fWNsYXNzIEdseXBoSGVhZGVye2NvbnN0cnVjdG9yKHtudW1iZXJPZkNvbnRvdXJzOmUseE1pbjp0LHlNaW46YSx4TWF4OnIseU1heDpufSl7dGhpcy5udW1iZXJPZkNvbnRvdXJzPWU7dGhpcy54TWluPXQ7dGhpcy55TWluPWE7dGhpcy54TWF4PXI7dGhpcy55TWF4PW59c3RhdGljIHBhcnNlKGUsdCl7cmV0dXJuWzEwLG5ldyBHbHlwaEhlYWRlcih7bnVtYmVyT2ZDb250b3Vyczp0LmdldEludDE2KGUpLHhNaW46dC5nZXRJbnQxNihlKzIpLHlNaW46dC5nZXRJbnQxNihlKzQpLHhNYXg6dC5nZXRJbnQxNihlKzYpLHlNYXg6dC5nZXRJbnQxNihlKzgpfSldfWdldFNpemUoKXtyZXR1cm4gMTB9d3JpdGUoZSx0KXt0LnNldEludDE2KGUsdGhpcy5udW1iZXJPZkNvbnRvdXJzKTt0LnNldEludDE2KGUrMix0aGlzLnhNaW4pO3Quc2V0SW50MTYoZSs0LHRoaXMueU1pbik7dC5zZXRJbnQxNihlKzYsdGhpcy54TWF4KTt0LnNldEludDE2KGUrOCx0aGlzLnlNYXgpO3JldHVybiAxMH1zY2FsZShlLHQpe3RoaXMueE1pbj1NYXRoLnJvdW5kKGUrKHRoaXMueE1pbi1lKSp0KTt0aGlzLnhNYXg9TWF0aC5yb3VuZChlKyh0aGlzLnhNYXgtZSkqdCl9fWNsYXNzIENvbnRvdXJ7Y29uc3RydWN0b3Ioe2ZsYWdzOmUseENvb3JkaW5hdGVzOnQseUNvb3JkaW5hdGVzOmF9KXt0aGlzLnhDb29yZGluYXRlcz10O3RoaXMueUNvb3JkaW5hdGVzPWE7dGhpcy5mbGFncz1lfX1jbGFzcyBTaW1wbGVHbHlwaHtjb25zdHJ1Y3Rvcih7Y29udG91cnM6ZSxpbnN0cnVjdGlvbnM6dH0pe3RoaXMuY29udG91cnM9ZTt0aGlzLmluc3RydWN0aW9ucz10fXN0YXRpYyBwYXJzZShlLHQsYSl7Y29uc3Qgcj1bXTtmb3IobGV0IG49MDtuPGE7bisrKXtjb25zdCBhPXQuZ2V0VWludDE2KGUpO2UrPTI7ci5wdXNoKGEpfWNvbnN0IG49clthLTFdKzEsaT10LmdldFVpbnQxNihlKTtlKz0yO2NvbnN0IHM9bmV3IFVpbnQ4QXJyYXkodCkuc2xpY2UoZSxlK2kpO2UrPWk7Y29uc3Qgbz1bXTtmb3IobGV0IGE9MDthPG47ZSsrLGErKyl7bGV0IHI9dC5nZXRVaW50OChlKTtvLnB1c2gocik7aWYoOCZyKXtjb25zdCBuPXQuZ2V0VWludDgoKytlKTtyXj04O2ZvcihsZXQgZT0wO2U8bjtlKyspby5wdXNoKHIpO2ErPW59fWNvbnN0IGM9W107bGV0IGw9W10saD1bXSx1PVtdO2NvbnN0IGQ9W107bGV0IGY9MCxnPTA7Zm9yKGxldCBhPTA7YTxuO2ErKyl7Y29uc3Qgbj1vW2FdO2lmKDImbil7Y29uc3QgYT10LmdldFVpbnQ4KGUrKyk7Zys9MTYmbj9hOi1hO2wucHVzaChnKX1lbHNlIGlmKDE2Jm4pbC5wdXNoKGcpO2Vsc2V7Zys9dC5nZXRJbnQxNihlKTtlKz0yO2wucHVzaChnKX1pZihyW2ZdPT09YSl7ZisrO2MucHVzaChsKTtsPVtdfX1nPTA7Zj0wO2ZvcihsZXQgYT0wO2E8bjthKyspe2NvbnN0IG49b1thXTtpZig0Jm4pe2NvbnN0IGE9dC5nZXRVaW50OChlKyspO2crPTMyJm4/YTotYTtoLnB1c2goZyl9ZWxzZSBpZigzMiZuKWgucHVzaChnKTtlbHNle2crPXQuZ2V0SW50MTYoZSk7ZSs9MjtoLnB1c2goZyl9dS5wdXNoKDEmbnw2NCZuKTtpZihyW2ZdPT09YSl7bD1jW2ZdO2YrKztkLnB1c2gobmV3IENvbnRvdXIoe2ZsYWdzOnUseENvb3JkaW5hdGVzOmwseUNvb3JkaW5hdGVzOmh9KSk7aD1bXTt1PVtdfX1yZXR1cm4gbmV3IFNpbXBsZUdseXBoKHtjb250b3VyczpkLGluc3RydWN0aW9uczpzfSl9Z2V0U2l6ZSgpe2xldCBlPTIqdGhpcy5jb250b3Vycy5sZW5ndGgrMit0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgsdD0wLGE9MDtmb3IoY29uc3QgciBvZiB0aGlzLmNvbnRvdXJzKXtlKz1yLmZsYWdzLmxlbmd0aDtmb3IobGV0IG49MCxpPXIueENvb3JkaW5hdGVzLmxlbmd0aDtuPGk7bisrKXtjb25zdCBpPXIueENvb3JkaW5hdGVzW25dLHM9ci55Q29vcmRpbmF0ZXNbbl07bGV0IG89TWF0aC5hYnMoaS10KTtvPjI1NT9lKz0yOm8+MCYmKGUrPTEpO3Q9aTtvPU1hdGguYWJzKHMtYSk7bz4yNTU/ZSs9MjpvPjAmJihlKz0xKTthPXN9fXJldHVybiBlfXdyaXRlKGUsdCl7Y29uc3QgYT1lLHI9W10sbj1bXSxpPVtdO2xldCBzPTAsbz0wO2Zvcihjb25zdCBhIG9mIHRoaXMuY29udG91cnMpe2ZvcihsZXQgZT0wLHQ9YS54Q29vcmRpbmF0ZXMubGVuZ3RoO2U8dDtlKyspe2xldCB0PWEuZmxhZ3NbZV07Y29uc3QgYz1hLnhDb29yZGluYXRlc1tlXTtsZXQgbD1jLXM7aWYoMD09PWwpe3R8PTE2O3IucHVzaCgwKX1lbHNle2NvbnN0IGU9TWF0aC5hYnMobCk7aWYoZTw9MjU1KXt0fD1sPj0wPzE4OjI7ci5wdXNoKGUpfWVsc2Ugci5wdXNoKGwpfXM9Yztjb25zdCBoPWEueUNvb3JkaW5hdGVzW2VdO2w9aC1vO2lmKDA9PT1sKXt0fD0zMjtuLnB1c2goMCl9ZWxzZXtjb25zdCBlPU1hdGguYWJzKGwpO2lmKGU8PTI1NSl7dHw9bD49MD8zNjo0O24ucHVzaChlKX1lbHNlIG4ucHVzaChsKX1vPWg7aS5wdXNoKHQpfXQuc2V0VWludDE2KGUsci5sZW5ndGgtMSk7ZSs9Mn10LnNldFVpbnQxNihlLHRoaXMuaW5zdHJ1Y3Rpb25zLmxlbmd0aCk7ZSs9MjtpZih0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgpe25ldyBVaW50OEFycmF5KHQuYnVmZmVyLDAsdC5idWZmZXIuYnl0ZUxlbmd0aCkuc2V0KHRoaXMuaW5zdHJ1Y3Rpb25zLGUpO2UrPXRoaXMuaW5zdHJ1Y3Rpb25zLmxlbmd0aH1mb3IoY29uc3QgYSBvZiBpKXQuc2V0VWludDgoZSsrLGEpO2ZvcihsZXQgYT0wLG49ci5sZW5ndGg7YTxuO2ErKyl7Y29uc3Qgbj1yW2FdLHM9aVthXTtpZigyJnMpdC5zZXRVaW50OChlKyssbik7ZWxzZSBpZighKDE2JnMpKXt0LnNldEludDE2KGUsbik7ZSs9Mn19Zm9yKGxldCBhPTAscj1uLmxlbmd0aDthPHI7YSsrKXtjb25zdCByPW5bYV0scz1pW2FdO2lmKDQmcyl0LnNldFVpbnQ4KGUrKyxyKTtlbHNlIGlmKCEoMzImcykpe3Quc2V0SW50MTYoZSxyKTtlKz0yfX1yZXR1cm4gZS1hfXNjYWxlKGUsdCl7Zm9yKGNvbnN0IGEgb2YgdGhpcy5jb250b3VycylpZigwIT09YS54Q29vcmRpbmF0ZXMubGVuZ3RoKWZvcihsZXQgcj0wLG49YS54Q29vcmRpbmF0ZXMubGVuZ3RoO3I8bjtyKyspYS54Q29vcmRpbmF0ZXNbcl09TWF0aC5yb3VuZChlKyhhLnhDb29yZGluYXRlc1tyXS1lKSp0KX19Y2xhc3MgQ29tcG9zaXRlR2x5cGh7Y29uc3RydWN0b3Ioe2ZsYWdzOmUsZ2x5cGhJbmRleDp0LGFyZ3VtZW50MTphLGFyZ3VtZW50MjpyLHRyYW5zZjpuLGluc3RydWN0aW9uczppfSl7dGhpcy5mbGFncz1lO3RoaXMuZ2x5cGhJbmRleD10O3RoaXMuYXJndW1lbnQxPWE7dGhpcy5hcmd1bWVudDI9cjt0aGlzLnRyYW5zZj1uO3RoaXMuaW5zdHJ1Y3Rpb25zPWl9c3RhdGljIHBhcnNlKGUsdCl7Y29uc3QgYT1lLHI9W107bGV0IG49dC5nZXRVaW50MTYoZSk7Y29uc3QgaT10LmdldFVpbnQxNihlKzIpO2UrPTQ7bGV0IHMsbztpZigxJm4pe2lmKDImbil7cz10LmdldEludDE2KGUpO289dC5nZXRJbnQxNihlKzIpfWVsc2V7cz10LmdldFVpbnQxNihlKTtvPXQuZ2V0VWludDE2KGUrMil9ZSs9NDtuXj0xfWVsc2V7aWYoMiZuKXtzPXQuZ2V0SW50OChlKTtvPXQuZ2V0SW50OChlKzEpfWVsc2V7cz10LmdldFVpbnQ4KGUpO289dC5nZXRVaW50OChlKzEpfWUrPTJ9aWYoOCZuKXtyLnB1c2godC5nZXRVaW50MTYoZSkpO2UrPTJ9ZWxzZSBpZig2NCZuKXtyLnB1c2godC5nZXRVaW50MTYoZSksdC5nZXRVaW50MTYoZSsyKSk7ZSs9NH1lbHNlIGlmKDEyOCZuKXtyLnB1c2godC5nZXRVaW50MTYoZSksdC5nZXRVaW50MTYoZSsyKSx0LmdldFVpbnQxNihlKzQpLHQuZ2V0VWludDE2KGUrNikpO2UrPTh9bGV0IGM9bnVsbDtpZigyNTYmbil7Y29uc3QgYT10LmdldFVpbnQxNihlKTtlKz0yO2M9bmV3IFVpbnQ4QXJyYXkodCkuc2xpY2UoZSxlK2EpO2UrPWF9cmV0dXJuW2UtYSxuZXcgQ29tcG9zaXRlR2x5cGgoe2ZsYWdzOm4sZ2x5cGhJbmRleDppLGFyZ3VtZW50MTpzLGFyZ3VtZW50MjpvLHRyYW5zZjpyLGluc3RydWN0aW9uczpjfSldfWdldFNpemUoKXtsZXQgZT00KzIqdGhpcy50cmFuc2YubGVuZ3RoOzI1NiZ0aGlzLmZsYWdzJiYoZSs9Mit0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgpO2UrPTI7MiZ0aGlzLmZsYWdzP3RoaXMuYXJndW1lbnQxPj0tMTI4JiZ0aGlzLmFyZ3VtZW50MTw9MTI3JiZ0aGlzLmFyZ3VtZW50Mj49LTEyOCYmdGhpcy5hcmd1bWVudDI8PTEyN3x8KGUrPTIpOnRoaXMuYXJndW1lbnQxPj0wJiZ0aGlzLmFyZ3VtZW50MTw9MjU1JiZ0aGlzLmFyZ3VtZW50Mj49MCYmdGhpcy5hcmd1bWVudDI8PTI1NXx8KGUrPTIpO3JldHVybiBlfXdyaXRlKGUsdCl7Y29uc3QgYT1lOzImdGhpcy5mbGFncz90aGlzLmFyZ3VtZW50MT49LTEyOCYmdGhpcy5hcmd1bWVudDE8PTEyNyYmdGhpcy5hcmd1bWVudDI+PS0xMjgmJnRoaXMuYXJndW1lbnQyPD0xMjd8fCh0aGlzLmZsYWdzfD0xKTp0aGlzLmFyZ3VtZW50MT49MCYmdGhpcy5hcmd1bWVudDE8PTI1NSYmdGhpcy5hcmd1bWVudDI+PTAmJnRoaXMuYXJndW1lbnQyPD0yNTV8fCh0aGlzLmZsYWdzfD0xKTt0LnNldFVpbnQxNihlLHRoaXMuZmxhZ3MpO3Quc2V0VWludDE2KGUrMix0aGlzLmdseXBoSW5kZXgpO2UrPTQ7aWYoMSZ0aGlzLmZsYWdzKXtpZigyJnRoaXMuZmxhZ3Mpe3Quc2V0SW50MTYoZSx0aGlzLmFyZ3VtZW50MSk7dC5zZXRJbnQxNihlKzIsdGhpcy5hcmd1bWVudDIpfWVsc2V7dC5zZXRVaW50MTYoZSx0aGlzLmFyZ3VtZW50MSk7dC5zZXRVaW50MTYoZSsyLHRoaXMuYXJndW1lbnQyKX1lKz00fWVsc2V7dC5zZXRVaW50OChlLHRoaXMuYXJndW1lbnQxKTt0LnNldFVpbnQ4KGUrMSx0aGlzLmFyZ3VtZW50Mik7ZSs9Mn1pZigyNTYmdGhpcy5mbGFncyl7dC5zZXRVaW50MTYoZSx0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgpO2UrPTI7aWYodGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoKXtuZXcgVWludDhBcnJheSh0LmJ1ZmZlciwwLHQuYnVmZmVyLmJ5dGVMZW5ndGgpLnNldCh0aGlzLmluc3RydWN0aW9ucyxlKTtlKz10aGlzLmluc3RydWN0aW9ucy5sZW5ndGh9fXJldHVybiBlLWF9c2NhbGUoZSx0KXt9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0Lk9wZW5UeXBlRmlsZUJ1aWxkZXI9dm9pZCAwO3ZhciByPWEoNCksbj1hKDIpO2Z1bmN0aW9uIHdyaXRlSW50MTYoZSx0LGEpe2VbdF09YT4+OCYyNTU7ZVt0KzFdPTI1NSZhfWZ1bmN0aW9uIHdyaXRlSW50MzIoZSx0LGEpe2VbdF09YT4+MjQmMjU1O2VbdCsxXT1hPj4xNiYyNTU7ZVt0KzJdPWE+PjgmMjU1O2VbdCszXT0yNTUmYX1mdW5jdGlvbiB3cml0ZURhdGEoZSx0LGEpe2lmKGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KWUuc2V0KGEsdCk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGEpZm9yKGxldCByPTAsbj1hLmxlbmd0aDtyPG47cisrKWVbdCsrXT0yNTUmYS5jaGFyQ29kZUF0KHIpO2Vsc2UgZm9yKGNvbnN0IHIgb2YgYSllW3QrK109MjU1JnJ9Y2xhc3MgT3BlblR5cGVGaWxlQnVpbGRlcntjb25zdHJ1Y3RvcihlKXt0aGlzLnNmbnQ9ZTt0aGlzLnRhYmxlcz1PYmplY3QuY3JlYXRlKG51bGwpfXN0YXRpYyBnZXRTZWFyY2hQYXJhbXMoZSx0KXtsZXQgYT0xLHI9MDtmb3IoOyhhXmUpPmE7KXthPDw9MTtyKyt9Y29uc3Qgbj1hKnQ7cmV0dXJue3JhbmdlOm4sZW50cnk6cixyYW5nZVNoaWZ0OnQqZS1ufX10b0FycmF5KCl7bGV0IGU9dGhpcy5zZm50O2NvbnN0IHQ9dGhpcy50YWJsZXMsYT1PYmplY3Qua2V5cyh0KTthLnNvcnQoKTtjb25zdCBpPWEubGVuZ3RoO2xldCBzLG8sYyxsLGgsdT0xMisxNippO2NvbnN0IGQ9W3VdO2ZvcihzPTA7czxpO3MrKyl7bD10W2Fbc11dO3UrPShsLmxlbmd0aCszJi00KT4+PjA7ZC5wdXNoKHUpfWNvbnN0IGY9bmV3IFVpbnQ4QXJyYXkodSk7Zm9yKHM9MDtzPGk7cysrKXtsPXRbYVtzXV07d3JpdGVEYXRhKGYsZFtzXSxsKX0idHJ1ZSI9PT1lJiYoZT0oMCxuLnN0cmluZzMyKSg2NTUzNikpO2ZbMF09MjU1JmUuY2hhckNvZGVBdCgwKTtmWzFdPTI1NSZlLmNoYXJDb2RlQXQoMSk7ZlsyXT0yNTUmZS5jaGFyQ29kZUF0KDIpO2ZbM109MjU1JmUuY2hhckNvZGVBdCgzKTt3cml0ZUludDE2KGYsNCxpKTtjb25zdCBnPU9wZW5UeXBlRmlsZUJ1aWxkZXIuZ2V0U2VhcmNoUGFyYW1zKGksMTYpO3dyaXRlSW50MTYoZiw2LGcucmFuZ2UpO3dyaXRlSW50MTYoZiw4LGcuZW50cnkpO3dyaXRlSW50MTYoZiwxMCxnLnJhbmdlU2hpZnQpO3U9MTI7Zm9yKHM9MDtzPGk7cysrKXtoPWFbc107Zlt1XT0yNTUmaC5jaGFyQ29kZUF0KDApO2ZbdSsxXT0yNTUmaC5jaGFyQ29kZUF0KDEpO2ZbdSsyXT0yNTUmaC5jaGFyQ29kZUF0KDIpO2ZbdSszXT0yNTUmaC5jaGFyQ29kZUF0KDMpO2xldCBlPTA7Zm9yKG89ZFtzXSxjPWRbcysxXTtvPGM7bys9NCl7ZT1lKygwLHIucmVhZFVpbnQzMikoZixvKT4+PjB9d3JpdGVJbnQzMihmLHUrNCxlKTt3cml0ZUludDMyKGYsdSs4LGRbc10pO3dyaXRlSW50MzIoZix1KzEyLHRbaF0ubGVuZ3RoKTt1Kz0xNn1yZXR1cm4gZn1hZGRUYWJsZShlLHQpe2lmKGUgaW4gdGhpcy50YWJsZXMpdGhyb3cgbmV3IEVycm9yKCJUYWJsZSAiK2UrIiBhbHJlYWR5IGV4aXN0cyIpO3RoaXMudGFibGVzW2VdPXR9fXQuT3BlblR5cGVGaWxlQnVpbGRlcj1PcGVuVHlwZUZpbGVCdWlsZGVyfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuVHlwZTFGb250PXZvaWQgMDt2YXIgcj1hKDMzKSxuPWEoMiksaT1hKDM2KSxzPWEoNCksbz1hKDgpLGM9YSg0Nyk7ZnVuY3Rpb24gZmluZEJsb2NrKGUsdCxhKXtjb25zdCByPWUubGVuZ3RoLG49dC5sZW5ndGgsaT1yLW47bGV0IG89YSxjPSExO2Zvcig7bzxpOyl7bGV0IGE9MDtmb3IoO2E8biYmZVtvK2FdPT09dFthXTspYSsrO2lmKGE+PW4pe28rPWE7Zm9yKDtvPHImJigwLHMuaXNXaGl0ZVNwYWNlKShlW29dKTspbysrO2M9ITA7YnJlYWt9bysrfXJldHVybntmb3VuZDpjLGxlbmd0aDpvfX10LlR5cGUxRm9udD1jbGFzcyBUeXBlMUZvbnR7Y29uc3RydWN0b3IoZSx0LGEpe2xldCByPWEubGVuZ3RoMSxzPWEubGVuZ3RoMixsPXQucGVla0J5dGVzKDYpO2NvbnN0IGg9MTI4PT09bFswXSYmMT09PWxbMV07aWYoaCl7dC5za2lwKDYpO3I9bFs1XTw8MjR8bFs0XTw8MTZ8bFszXTw8OHxsWzJdfWNvbnN0IHU9ZnVuY3Rpb24gZ2V0SGVhZGVyQmxvY2soZSx0KXtjb25zdCBhPVsxMDEsMTAxLDEyMCwxMDEsOTldLHI9ZS5wb3M7bGV0IGkscyxjLGw7dHJ5e2k9ZS5nZXRCeXRlcyh0KTtzPWkubGVuZ3RofWNhdGNoKGUpe31pZihzPT09dCl7Yz1maW5kQmxvY2soaSxhLHQtMiphLmxlbmd0aCk7aWYoYy5mb3VuZCYmYy5sZW5ndGg9PT10KXJldHVybntzdHJlYW06bmV3IG8uU3RyZWFtKGkpLGxlbmd0aDp0fX0oMCxuLndhcm4pKCdJbnZhbGlkICJMZW5ndGgxIiBwcm9wZXJ0eSBpbiBUeXBlMSBmb250IC0tIHRyeWluZyB0byByZWNvdmVyLicpO2UucG9zPXI7Zm9yKDs7KXtjPWZpbmRCbG9jayhlLnBlZWtCeXRlcygyMDQ4KSxhLDApO2lmKDA9PT1jLmxlbmd0aClicmVhaztlLnBvcys9Yy5sZW5ndGg7aWYoYy5mb3VuZCl7bD1lLnBvcy1yO2JyZWFrfX1lLnBvcz1yO2lmKGwpcmV0dXJue3N0cmVhbTpuZXcgby5TdHJlYW0oZS5nZXRCeXRlcyhsKSksbGVuZ3RoOmx9OygwLG4ud2FybikoJ1VuYWJsZSB0byByZWNvdmVyICJMZW5ndGgxIiBwcm9wZXJ0eSBpbiBUeXBlMSBmb250IC0tIHVzaW5nIGFzIGlzLicpO3JldHVybntzdHJlYW06bmV3IG8uU3RyZWFtKGUuZ2V0Qnl0ZXModCkpLGxlbmd0aDp0fX0odCxyKTtuZXcgYy5UeXBlMVBhcnNlcih1LnN0cmVhbSwhMSxpLlNFQUNfQU5BTFlTSVNfRU5BQkxFRCkuZXh0cmFjdEZvbnRIZWFkZXIoYSk7aWYoaCl7bD10LmdldEJ5dGVzKDYpO3M9bFs1XTw8MjR8bFs0XTw8MTZ8bFszXTw8OHxsWzJdfWNvbnN0IGQ9ZnVuY3Rpb24gZ2V0RWV4ZWNCbG9jayhlLHQpe2NvbnN0IGE9ZS5nZXRCeXRlcygpO2lmKDA9PT1hLmxlbmd0aCl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiZ2V0RWV4ZWNCbG9jayAtIG5vIGZvbnQgcHJvZ3JhbSBmb3VuZC4iKTtyZXR1cm57c3RyZWFtOm5ldyBvLlN0cmVhbShhKSxsZW5ndGg6YS5sZW5ndGh9fSh0KSxmPW5ldyBjLlR5cGUxUGFyc2VyKGQuc3RyZWFtLCEwLGkuU0VBQ19BTkFMWVNJU19FTkFCTEVEKS5leHRyYWN0Rm9udFByb2dyYW0oYSk7Zm9yKGNvbnN0IGUgaW4gZi5wcm9wZXJ0aWVzKWFbZV09Zi5wcm9wZXJ0aWVzW2VdO2NvbnN0IGc9Zi5jaGFyc3RyaW5ncyxwPXRoaXMuZ2V0VHlwZTJDaGFyc3RyaW5ncyhnKSxtPXRoaXMuZ2V0VHlwZTJTdWJycyhmLnN1YnJzKTt0aGlzLmNoYXJzdHJpbmdzPWc7dGhpcy5kYXRhPXRoaXMud3JhcChlLHAsdGhpcy5jaGFyc3RyaW5ncyxtLGEpO3RoaXMuc2VhY3M9dGhpcy5nZXRTZWFjcyhmLmNoYXJzdHJpbmdzKX1nZXQgbnVtR2x5cGhzKCl7cmV0dXJuIHRoaXMuY2hhcnN0cmluZ3MubGVuZ3RoKzF9Z2V0Q2hhcnNldCgpe2NvbnN0IGU9WyIubm90ZGVmIl07Zm9yKGNvbnN0e2dseXBoTmFtZTp0fW9mIHRoaXMuY2hhcnN0cmluZ3MpZS5wdXNoKHQpO3JldHVybiBlfWdldEdseXBoTWFwcGluZyhlKXtjb25zdCB0PXRoaXMuY2hhcnN0cmluZ3M7aWYoZS5jb21wb3NpdGUpe2NvbnN0IGE9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0IHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspe2FbZS5jTWFwLmNoYXJDb2RlT2YocildPXIrMX1yZXR1cm4gYX1jb25zdCBhPVsiLm5vdGRlZiJdO2xldCByLG47Zm9yKG49MDtuPHQubGVuZ3RoO24rKylhLnB1c2godFtuXS5nbHlwaE5hbWUpO2NvbnN0IHM9ZS5idWlsdEluRW5jb2Rpbmc7aWYocyl7cj1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcihjb25zdCBlIGluIHMpe249YS5pbmRleE9mKHNbZV0pO24+PTAmJihyW2VdPW4pfX1yZXR1cm4oMCxpLnR5cGUxRm9udEdseXBoTWFwcGluZykoZSxyLGEpfWhhc0dseXBoSWQoZSl7aWYoZTwwfHxlPj10aGlzLm51bUdseXBocylyZXR1cm4hMTtpZigwPT09ZSlyZXR1cm4hMDtyZXR1cm4gdGhpcy5jaGFyc3RyaW5nc1tlLTFdLmNoYXJzdHJpbmcubGVuZ3RoPjB9Z2V0U2VhY3MoZSl7Y29uc3QgdD1bXTtmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjthKyspe2NvbnN0IHI9ZVthXTtyLnNlYWMmJih0W2ErMV09ci5zZWFjKX1yZXR1cm4gdH1nZXRUeXBlMkNoYXJzdHJpbmdzKGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IGEgb2YgZSl0LnB1c2goYS5jaGFyc3RyaW5nKTtyZXR1cm4gdH1nZXRUeXBlMlN1YnJzKGUpe2xldCB0PTA7Y29uc3QgYT1lLmxlbmd0aDt0PWE8MTEzMz8xMDc6YTwzMzc2OT8xMTMxOjMyNzY4O2NvbnN0IHI9W107bGV0IG47Zm9yKG49MDtuPHQ7bisrKXIucHVzaChbMTFdKTtmb3Iobj0wO248YTtuKyspci5wdXNoKGVbbl0pO3JldHVybiByfXdyYXAoZSx0LGEsbixpKXtjb25zdCBzPW5ldyByLkNGRjtzLmhlYWRlcj1uZXcgci5DRkZIZWFkZXIoMSwwLDQsNCk7cy5uYW1lcz1bZV07Y29uc3Qgbz1uZXcgci5DRkZUb3BEaWN0O28uc2V0QnlOYW1lKCJ2ZXJzaW9uIiwzOTEpO28uc2V0QnlOYW1lKCJOb3RpY2UiLDM5Mik7by5zZXRCeU5hbWUoIkZ1bGxOYW1lIiwzOTMpO28uc2V0QnlOYW1lKCJGYW1pbHlOYW1lIiwzOTQpO28uc2V0QnlOYW1lKCJXZWlnaHQiLDM5NSk7by5zZXRCeU5hbWUoIkVuY29kaW5nIixudWxsKTtvLnNldEJ5TmFtZSgiRm9udE1hdHJpeCIsaS5mb250TWF0cml4KTtvLnNldEJ5TmFtZSgiRm9udEJCb3giLGkuYmJveCk7by5zZXRCeU5hbWUoImNoYXJzZXQiLG51bGwpO28uc2V0QnlOYW1lKCJDaGFyU3RyaW5ncyIsbnVsbCk7by5zZXRCeU5hbWUoIlByaXZhdGUiLG51bGwpO3MudG9wRGljdD1vO2NvbnN0IGM9bmV3IHIuQ0ZGU3RyaW5ncztjLmFkZCgiVmVyc2lvbiAwLjExIik7Yy5hZGQoIlNlZSBvcmlnaW5hbCBub3RpY2UiKTtjLmFkZChlKTtjLmFkZChlKTtjLmFkZCgiTWVkaXVtIik7cy5zdHJpbmdzPWM7cy5nbG9iYWxTdWJySW5kZXg9bmV3IHIuQ0ZGSW5kZXg7Y29uc3QgbD10Lmxlbmd0aCxoPVsiLm5vdGRlZiJdO2xldCB1LGQ7Zm9yKHU9MDt1PGw7dSsrKXtjb25zdCBlPWFbdV0uZ2x5cGhOYW1lOy0xPT09ci5DRkZTdGFuZGFyZFN0cmluZ3MuaW5kZXhPZihlKSYmYy5hZGQoZSk7aC5wdXNoKGUpfXMuY2hhcnNldD1uZXcgci5DRkZDaGFyc2V0KCExLDAsaCk7Y29uc3QgZj1uZXcgci5DRkZJbmRleDtmLmFkZChbMTM5LDE0XSk7Zm9yKHU9MDt1PGw7dSsrKWYuYWRkKHRbdV0pO3MuY2hhclN0cmluZ3M9Zjtjb25zdCBnPW5ldyByLkNGRlByaXZhdGVEaWN0O2cuc2V0QnlOYW1lKCJTdWJycyIsbnVsbCk7Y29uc3QgcD1bIkJsdWVWYWx1ZXMiLCJPdGhlckJsdWVzIiwiRmFtaWx5Qmx1ZXMiLCJGYW1pbHlPdGhlckJsdWVzIiwiU3RlbVNuYXBIIiwiU3RlbVNuYXBWIiwiQmx1ZVNoaWZ0IiwiQmx1ZUZ1enoiLCJCbHVlU2NhbGUiLCJMYW5ndWFnZUdyb3VwIiwiRXhwYW5zaW9uRmFjdG9yIiwiRm9yY2VCb2xkIiwiU3RkSFciLCJTdGRWVyJdO2Zvcih1PTAsZD1wLmxlbmd0aDt1PGQ7dSsrKXtjb25zdCBlPXBbdV07aWYoIShlIGluIGkucHJpdmF0ZURhdGEpKWNvbnRpbnVlO2NvbnN0IHQ9aS5wcml2YXRlRGF0YVtlXTtpZihBcnJheS5pc0FycmF5KHQpKWZvcihsZXQgZT10Lmxlbmd0aC0xO2U+MDtlLS0pdFtlXS09dFtlLTFdO2cuc2V0QnlOYW1lKGUsdCl9cy50b3BEaWN0LnByaXZhdGVEaWN0PWc7Y29uc3QgbT1uZXcgci5DRkZJbmRleDtmb3IodT0wLGQ9bi5sZW5ndGg7dTxkO3UrKyltLmFkZChuW3VdKTtnLnN1YnJzSW5kZXg9bTtyZXR1cm4gbmV3IHIuQ0ZGQ29tcGlsZXIocykuY29tcGlsZSgpfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5UeXBlMVBhcnNlcj12b2lkIDA7dmFyIHI9YSgzNSksbj1hKDQpLGk9YSg4KSxzPWEoMik7Y29uc3Qgbz1bNF0sYz1bNV0sbD1bNl0saD1bN10sdT1bOF0sZD1bMTIsMzVdLGY9WzE0XSxnPVsyMV0scD1bMjJdLG09WzMwXSxiPVszMV07Y2xhc3MgVHlwZTFDaGFyU3RyaW5ne2NvbnN0cnVjdG9yKCl7dGhpcy53aWR0aD0wO3RoaXMubHNiPTA7dGhpcy5mbGV4aW5nPSExO3RoaXMub3V0cHV0PVtdO3RoaXMuc3RhY2s9W119Y29udmVydChlLHQsYSl7Y29uc3Qgcj1lLmxlbmd0aDtsZXQgbixpLHksdz0hMTtmb3IobGV0IFM9MDtTPHI7UysrKXtsZXQgcj1lW1NdO2lmKHI8MzIpezEyPT09ciYmKHI9KHI8PDgpK2VbKytTXSk7c3dpdGNoKHIpe2Nhc2UgMTpjYXNlIDM6Y2FzZSA5OmNhc2UgMzA3MjpjYXNlIDMwNzM6Y2FzZSAzMDc0OmNhc2UgMzEwNTp0aGlzLnN0YWNrPVtdO2JyZWFrO2Nhc2UgNDppZih0aGlzLmZsZXhpbmcpe2lmKHRoaXMuc3RhY2subGVuZ3RoPDEpe3c9ITA7YnJlYWt9Y29uc3QgZT10aGlzLnN0YWNrLnBvcCgpO3RoaXMuc3RhY2sucHVzaCgwLGUpO2JyZWFrfXc9dGhpcy5leGVjdXRlQ29tbWFuZCgxLG8pO2JyZWFrO2Nhc2UgNTp3PXRoaXMuZXhlY3V0ZUNvbW1hbmQoMixjKTticmVhaztjYXNlIDY6dz10aGlzLmV4ZWN1dGVDb21tYW5kKDEsbCk7YnJlYWs7Y2FzZSA3Onc9dGhpcy5leGVjdXRlQ29tbWFuZCgxLGgpO2JyZWFrO2Nhc2UgODp3PXRoaXMuZXhlY3V0ZUNvbW1hbmQoNix1KTticmVhaztjYXNlIDEwOmlmKHRoaXMuc3RhY2subGVuZ3RoPDEpe3c9ITA7YnJlYWt9eT10aGlzLnN0YWNrLnBvcCgpO2lmKCF0W3ldKXt3PSEwO2JyZWFrfXc9dGhpcy5jb252ZXJ0KHRbeV0sdCxhKTticmVhaztjYXNlIDExOnJldHVybiB3O2Nhc2UgMTM6aWYodGhpcy5zdGFjay5sZW5ndGg8Mil7dz0hMDticmVha31uPXRoaXMuc3RhY2sucG9wKCk7aT10aGlzLnN0YWNrLnBvcCgpO3RoaXMubHNiPWk7dGhpcy53aWR0aD1uO3RoaXMuc3RhY2sucHVzaChuLGkpO3c9dGhpcy5leGVjdXRlQ29tbWFuZCgyLHApO2JyZWFrO2Nhc2UgMTQ6dGhpcy5vdXRwdXQucHVzaChmWzBdKTticmVhaztjYXNlIDIxOmlmKHRoaXMuZmxleGluZylicmVhazt3PXRoaXMuZXhlY3V0ZUNvbW1hbmQoMixnKTticmVhaztjYXNlIDIyOmlmKHRoaXMuZmxleGluZyl7dGhpcy5zdGFjay5wdXNoKDApO2JyZWFrfXc9dGhpcy5leGVjdXRlQ29tbWFuZCgxLHApO2JyZWFrO2Nhc2UgMzA6dz10aGlzLmV4ZWN1dGVDb21tYW5kKDQsbSk7YnJlYWs7Y2FzZSAzMTp3PXRoaXMuZXhlY3V0ZUNvbW1hbmQoNCxiKTticmVhaztjYXNlIDMwNzg6aWYoYSl7Y29uc3QgZT10aGlzLnN0YWNrLmF0KC01KTt0aGlzLnNlYWM9dGhpcy5zdGFjay5zcGxpY2UoLTQsNCk7dGhpcy5zZWFjWzBdKz10aGlzLmxzYi1lO3c9dGhpcy5leGVjdXRlQ29tbWFuZCgwLGYpfWVsc2Ugdz10aGlzLmV4ZWN1dGVDb21tYW5kKDQsZik7YnJlYWs7Y2FzZSAzMDc5OmlmKHRoaXMuc3RhY2subGVuZ3RoPDQpe3c9ITA7YnJlYWt9dGhpcy5zdGFjay5wb3AoKTtuPXRoaXMuc3RhY2sucG9wKCk7Y29uc3QgZT10aGlzLnN0YWNrLnBvcCgpO2k9dGhpcy5zdGFjay5wb3AoKTt0aGlzLmxzYj1pO3RoaXMud2lkdGg9bjt0aGlzLnN0YWNrLnB1c2gobixpLGUpO3c9dGhpcy5leGVjdXRlQ29tbWFuZCgzLGcpO2JyZWFrO2Nhc2UgMzA4NDppZih0aGlzLnN0YWNrLmxlbmd0aDwyKXt3PSEwO2JyZWFrfWNvbnN0IFM9dGhpcy5zdGFjay5wb3AoKSx4PXRoaXMuc3RhY2sucG9wKCk7dGhpcy5zdGFjay5wdXNoKHgvUyk7YnJlYWs7Y2FzZSAzMDg4OmlmKHRoaXMuc3RhY2subGVuZ3RoPDIpe3c9ITA7YnJlYWt9eT10aGlzLnN0YWNrLnBvcCgpO2NvbnN0IGs9dGhpcy5zdGFjay5wb3AoKTtpZigwPT09eSYmMz09PWspe2NvbnN0IGU9dGhpcy5zdGFjay5zcGxpY2UodGhpcy5zdGFjay5sZW5ndGgtMTcsMTcpO3RoaXMuc3RhY2sucHVzaChlWzJdK2VbMF0sZVszXStlWzFdLGVbNF0sZVs1XSxlWzZdLGVbN10sZVs4XSxlWzldLGVbMTBdLGVbMTFdLGVbMTJdLGVbMTNdLGVbMTRdKTt3PXRoaXMuZXhlY3V0ZUNvbW1hbmQoMTMsZCwhMCk7dGhpcy5mbGV4aW5nPSExO3RoaXMuc3RhY2sucHVzaChlWzE1XSxlWzE2XSl9ZWxzZSAxPT09eSYmMD09PWsmJih0aGlzLmZsZXhpbmc9ITApO2JyZWFrO2Nhc2UgMzA4OTpicmVhaztkZWZhdWx0OigwLHMud2FybikoJ1Vua25vd24gdHlwZSAxIGNoYXJzdHJpbmcgY29tbWFuZCBvZiAiJytyKyciJyl9aWYodylicmVha31lbHNle3I8PTI0Nj9yLT0xMzk6cj1yPD0yNTA/MjU2KihyLTI0NykrZVsrK1NdKzEwODpyPD0yNTQ/LTI1Niooci0yNTEpLWVbKytTXS0xMDg6KDI1NSZlWysrU10pPDwyNHwoMjU1JmVbKytTXSk8PDE2fCgyNTUmZVsrK1NdKTw8OHwoMjU1JmVbKytTXSk8PDA7dGhpcy5zdGFjay5wdXNoKHIpfX1yZXR1cm4gd31leGVjdXRlQ29tbWFuZChlLHQsYSl7Y29uc3Qgcj10aGlzLnN0YWNrLmxlbmd0aDtpZihlPnIpcmV0dXJuITA7Y29uc3Qgbj1yLWU7Zm9yKGxldCBlPW47ZTxyO2UrKyl7bGV0IHQ9dGhpcy5zdGFja1tlXTtpZihOdW1iZXIuaXNJbnRlZ2VyKHQpKXRoaXMub3V0cHV0LnB1c2goMjgsdD4+OCYyNTUsMjU1JnQpO2Vsc2V7dD02NTUzNip0fDA7dGhpcy5vdXRwdXQucHVzaCgyNTUsdD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCl9fXRoaXMub3V0cHV0LnB1c2goLi4udCk7YT90aGlzLnN0YWNrLnNwbGljZShuLGUpOnRoaXMuc3RhY2subGVuZ3RoPTA7cmV0dXJuITF9fWZ1bmN0aW9uIGlzSGV4RGlnaXQoZSl7cmV0dXJuIGU+PTQ4JiZlPD01N3x8ZT49NjUmJmU8PTcwfHxlPj05NyYmZTw9MTAyfWZ1bmN0aW9uIGRlY3J5cHQoZSx0LGEpe2lmKGE+PWUubGVuZ3RoKXJldHVybiBuZXcgVWludDhBcnJheSgwKTtsZXQgcixuLGk9MHx0O2ZvcihyPTA7cjxhO3IrKylpPTUyODQ1KihlW3JdK2kpKzIyNzE5JjY1NTM1O2NvbnN0IHM9ZS5sZW5ndGgtYSxvPW5ldyBVaW50OEFycmF5KHMpO2ZvcihyPWEsbj0wO248cztyKyssbisrKXtjb25zdCB0PWVbcl07b1tuXT10Xmk+Pjg7aT01Mjg0NSoodCtpKSsyMjcxOSY2NTUzNX1yZXR1cm4gb31mdW5jdGlvbiBpc1NwZWNpYWwoZSl7cmV0dXJuIDQ3PT09ZXx8OTE9PT1lfHw5Mz09PWV8fDEyMz09PWV8fDEyNT09PWV8fDQwPT09ZXx8NDE9PT1lfXQuVHlwZTFQYXJzZXI9Y2xhc3MgVHlwZTFQYXJzZXJ7Y29uc3RydWN0b3IoZSx0LGEpe2lmKHQpe2NvbnN0IHQ9ZS5nZXRCeXRlcygpLGE9ISgoaXNIZXhEaWdpdCh0WzBdKXx8KDAsbi5pc1doaXRlU3BhY2UpKHRbMF0pKSYmaXNIZXhEaWdpdCh0WzFdKSYmaXNIZXhEaWdpdCh0WzJdKSYmaXNIZXhEaWdpdCh0WzNdKSYmaXNIZXhEaWdpdCh0WzRdKSYmaXNIZXhEaWdpdCh0WzVdKSYmaXNIZXhEaWdpdCh0WzZdKSYmaXNIZXhEaWdpdCh0WzddKSk7ZT1uZXcgaS5TdHJlYW0oYT9kZWNyeXB0KHQsNTU2NjUsNCk6ZnVuY3Rpb24gZGVjcnlwdEFzY2lpKGUsdCxhKXtsZXQgcj0wfHQ7Y29uc3Qgbj1lLmxlbmd0aCxpPW5ldyBVaW50OEFycmF5KG4+Pj4xKTtsZXQgcyxvO2ZvcihzPTAsbz0wO3M8bjtzKyspe2NvbnN0IHQ9ZVtzXTtpZighaXNIZXhEaWdpdCh0KSljb250aW51ZTtzKys7bGV0IGE7Zm9yKDtzPG4mJiFpc0hleERpZ2l0KGE9ZVtzXSk7KXMrKztpZihzPG4pe2NvbnN0IGU9cGFyc2VJbnQoU3RyaW5nLmZyb21DaGFyQ29kZSh0LGEpLDE2KTtpW28rK109ZV5yPj44O3I9NTI4NDUqKGUrcikrMjI3MTkmNjU1MzV9fXJldHVybiBpLnNsaWNlKGEsbyl9KHQsNTU2NjUsNCkpfXRoaXMuc2VhY0FuYWx5c2lzRW5hYmxlZD0hIWE7dGhpcy5zdHJlYW09ZTt0aGlzLm5leHRDaGFyKCl9cmVhZE51bWJlckFycmF5KCl7dGhpcy5nZXRUb2tlbigpO2NvbnN0IGU9W107Zm9yKDs7KXtjb25zdCB0PXRoaXMuZ2V0VG9rZW4oKTtpZihudWxsPT09dHx8Il0iPT09dHx8In0iPT09dClicmVhaztlLnB1c2gocGFyc2VGbG9hdCh0fHwwKSl9cmV0dXJuIGV9cmVhZE51bWJlcigpe2NvbnN0IGU9dGhpcy5nZXRUb2tlbigpO3JldHVybiBwYXJzZUZsb2F0KGV8fDApfXJlYWRJbnQoKXtjb25zdCBlPXRoaXMuZ2V0VG9rZW4oKTtyZXR1cm4gMHxwYXJzZUludChlfHwwLDEwKX1yZWFkQm9vbGVhbigpe3JldHVybiJ0cnVlIj09PXRoaXMuZ2V0VG9rZW4oKT8xOjB9bmV4dENoYXIoKXtyZXR1cm4gdGhpcy5jdXJyZW50Q2hhcj10aGlzLnN0cmVhbS5nZXRCeXRlKCl9cHJldkNoYXIoKXt0aGlzLnN0cmVhbS5za2lwKC0yKTtyZXR1cm4gdGhpcy5jdXJyZW50Q2hhcj10aGlzLnN0cmVhbS5nZXRCeXRlKCl9Z2V0VG9rZW4oKXtsZXQgZT0hMSx0PXRoaXMuY3VycmVudENoYXI7Zm9yKDs7KXtpZigtMT09PXQpcmV0dXJuIG51bGw7aWYoZSkxMCE9PXQmJjEzIT09dHx8KGU9ITEpO2Vsc2UgaWYoMzc9PT10KWU9ITA7ZWxzZSBpZighKDAsbi5pc1doaXRlU3BhY2UpKHQpKWJyZWFrO3Q9dGhpcy5uZXh0Q2hhcigpfWlmKGlzU3BlY2lhbCh0KSl7dGhpcy5uZXh0Q2hhcigpO3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHQpfWxldCBhPSIiO2Rve2ErPVN0cmluZy5mcm9tQ2hhckNvZGUodCk7dD10aGlzLm5leHRDaGFyKCl9d2hpbGUodD49MCYmISgwLG4uaXNXaGl0ZVNwYWNlKSh0KSYmIWlzU3BlY2lhbCh0KSk7cmV0dXJuIGF9cmVhZENoYXJTdHJpbmdzKGUsdCl7cmV0dXJuLTE9PT10P2U6ZGVjcnlwdChlLDQzMzAsdCl9ZXh0cmFjdEZvbnRQcm9ncmFtKGUpe2NvbnN0IHQ9dGhpcy5zdHJlYW0sYT1bXSxyPVtdLG49T2JqZWN0LmNyZWF0ZShudWxsKTtuLmxlbklWPTQ7Y29uc3QgaT17c3VicnM6W10sY2hhcnN0cmluZ3M6W10scHJvcGVydGllczp7cHJpdmF0ZURhdGE6bn19O2xldCBzLG8sYyxsO2Zvcig7bnVsbCE9PShzPXRoaXMuZ2V0VG9rZW4oKSk7KWlmKCIvIj09PXMpe3M9dGhpcy5nZXRUb2tlbigpO3N3aXRjaChzKXtjYXNlIkNoYXJTdHJpbmdzIjp0aGlzLmdldFRva2VuKCk7dGhpcy5nZXRUb2tlbigpO3RoaXMuZ2V0VG9rZW4oKTt0aGlzLmdldFRva2VuKCk7Zm9yKDs7KXtzPXRoaXMuZ2V0VG9rZW4oKTtpZihudWxsPT09c3x8ImVuZCI9PT1zKWJyZWFrO2lmKCIvIiE9PXMpY29udGludWU7Y29uc3QgZT10aGlzLmdldFRva2VuKCk7bz10aGlzLnJlYWRJbnQoKTt0aGlzLmdldFRva2VuKCk7Yz1vPjA/dC5nZXRCeXRlcyhvKTpuZXcgVWludDhBcnJheSgwKTtsPWkucHJvcGVydGllcy5wcml2YXRlRGF0YS5sZW5JVjtjb25zdCBhPXRoaXMucmVhZENoYXJTdHJpbmdzKGMsbCk7dGhpcy5uZXh0Q2hhcigpO3M9dGhpcy5nZXRUb2tlbigpOyJub2FjY2VzcyI9PT1zP3RoaXMuZ2V0VG9rZW4oKToiLyI9PT1zJiZ0aGlzLnByZXZDaGFyKCk7ci5wdXNoKHtnbHlwaDplLGVuY29kZWQ6YX0pfWJyZWFrO2Nhc2UiU3VicnMiOnRoaXMucmVhZEludCgpO3RoaXMuZ2V0VG9rZW4oKTtmb3IoOyJkdXAiPT09dGhpcy5nZXRUb2tlbigpOyl7Y29uc3QgZT10aGlzLnJlYWRJbnQoKTtvPXRoaXMucmVhZEludCgpO3RoaXMuZ2V0VG9rZW4oKTtjPW8+MD90LmdldEJ5dGVzKG8pOm5ldyBVaW50OEFycmF5KDApO2w9aS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhLmxlbklWO2NvbnN0IHI9dGhpcy5yZWFkQ2hhclN0cmluZ3MoYyxsKTt0aGlzLm5leHRDaGFyKCk7cz10aGlzLmdldFRva2VuKCk7Im5vYWNjZXNzIj09PXMmJnRoaXMuZ2V0VG9rZW4oKTthW2VdPXJ9YnJlYWs7Y2FzZSJCbHVlVmFsdWVzIjpjYXNlIk90aGVyQmx1ZXMiOmNhc2UiRmFtaWx5Qmx1ZXMiOmNhc2UiRmFtaWx5T3RoZXJCbHVlcyI6Y29uc3QgZT10aGlzLnJlYWROdW1iZXJBcnJheSgpO2UubGVuZ3RoPjAmJmUubGVuZ3RoLDA7YnJlYWs7Y2FzZSJTdGVtU25hcEgiOmNhc2UiU3RlbVNuYXBWIjppLnByb3BlcnRpZXMucHJpdmF0ZURhdGFbc109dGhpcy5yZWFkTnVtYmVyQXJyYXkoKTticmVhaztjYXNlIlN0ZEhXIjpjYXNlIlN0ZFZXIjppLnByb3BlcnRpZXMucHJpdmF0ZURhdGFbc109dGhpcy5yZWFkTnVtYmVyQXJyYXkoKVswXTticmVhaztjYXNlIkJsdWVTaGlmdCI6Y2FzZSJsZW5JViI6Y2FzZSJCbHVlRnV6eiI6Y2FzZSJCbHVlU2NhbGUiOmNhc2UiTGFuZ3VhZ2VHcm91cCI6Y2FzZSJFeHBhbnNpb25GYWN0b3IiOmkucHJvcGVydGllcy5wcml2YXRlRGF0YVtzXT10aGlzLnJlYWROdW1iZXIoKTticmVhaztjYXNlIkZvcmNlQm9sZCI6aS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW3NdPXRoaXMucmVhZEJvb2xlYW4oKX19Zm9yKGNvbnN0e2VuY29kZWQ6dCxnbHlwaDpufW9mIHIpe2NvbnN0IHI9bmV3IFR5cGUxQ2hhclN0cmluZyxzPXIuY29udmVydCh0LGEsdGhpcy5zZWFjQW5hbHlzaXNFbmFibGVkKTtsZXQgbz1yLm91dHB1dDtzJiYobz1bMTRdKTtjb25zdCBjPXtnbHlwaE5hbWU6bixjaGFyc3RyaW5nOm8sd2lkdGg6ci53aWR0aCxsc2I6ci5sc2Isc2VhYzpyLnNlYWN9OyIubm90ZGVmIj09PW4/aS5jaGFyc3RyaW5ncy51bnNoaWZ0KGMpOmkuY2hhcnN0cmluZ3MucHVzaChjKTtpZihlLmJ1aWx0SW5FbmNvZGluZyl7Y29uc3QgdD1lLmJ1aWx0SW5FbmNvZGluZy5pbmRleE9mKG4pO3Q+LTEmJnZvaWQgMD09PWUud2lkdGhzW3RdJiZ0Pj1lLmZpcnN0Q2hhciYmdDw9ZS5sYXN0Q2hhciYmKGUud2lkdGhzW3RdPXIud2lkdGgpfX1yZXR1cm4gaX1leHRyYWN0Rm9udEhlYWRlcihlKXtsZXQgdDtmb3IoO251bGwhPT0odD10aGlzLmdldFRva2VuKCkpOylpZigiLyI9PT10KXt0PXRoaXMuZ2V0VG9rZW4oKTtzd2l0Y2godCl7Y2FzZSJGb250TWF0cml4Ijpjb25zdCBhPXRoaXMucmVhZE51bWJlckFycmF5KCk7ZS5mb250TWF0cml4PWE7YnJlYWs7Y2FzZSJFbmNvZGluZyI6Y29uc3Qgbj10aGlzLmdldFRva2VuKCk7bGV0IGk7aWYoL15cZCskLy50ZXN0KG4pKXtpPVtdO2NvbnN0IGU9MHxwYXJzZUludChuLDEwKTt0aGlzLmdldFRva2VuKCk7Zm9yKGxldCBhPTA7YTxlO2ErKyl7dD10aGlzLmdldFRva2VuKCk7Zm9yKDsiZHVwIiE9PXQmJiJkZWYiIT09dDspe3Q9dGhpcy5nZXRUb2tlbigpO2lmKG51bGw9PT10KXJldHVybn1pZigiZGVmIj09PXQpYnJlYWs7Y29uc3QgZT10aGlzLnJlYWRJbnQoKTt0aGlzLmdldFRva2VuKCk7Y29uc3QgYT10aGlzLmdldFRva2VuKCk7aVtlXT1hO3RoaXMuZ2V0VG9rZW4oKX19ZWxzZSBpPSgwLHIuZ2V0RW5jb2RpbmcpKG4pO2UuYnVpbHRJbkVuY29kaW5nPWk7YnJlYWs7Y2FzZSJGb250QkJveCI6Y29uc3Qgcz10aGlzLnJlYWROdW1iZXJBcnJheSgpO2UuYXNjZW50PU1hdGgubWF4KHNbM10sc1sxXSk7ZS5kZXNjZW50PU1hdGgubWluKHNbMV0sc1szXSk7ZS5hc2NlbnRTY2FsZWQ9ITB9fX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuUGF0dGVybj12b2lkIDA7dC5nZXRUaWxpbmdQYXR0ZXJuSVI9ZnVuY3Rpb24gZ2V0VGlsaW5nUGF0dGVybklSKGUsdCxhKXtjb25zdCBuPXQuZ2V0QXJyYXkoIk1hdHJpeCIpLGk9ci5VdGlsLm5vcm1hbGl6ZVJlY3QodC5nZXRBcnJheSgiQkJveCIpKSxzPXQuZ2V0KCJYU3RlcCIpLG89dC5nZXQoIllTdGVwIiksYz10LmdldCgiUGFpbnRUeXBlIiksbD10LmdldCgiVGlsaW5nVHlwZSIpO2lmKGlbMl0taVswXT09MHx8aVszXS1pWzFdPT0wKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBJbnZhbGlkIGdldFRpbGluZ1BhdHRlcm5JUiAvQkJveCBhcnJheTogWyR7aX1dLmApO3JldHVyblsiVGlsaW5nUGF0dGVybiIsYSxlLG4saSxzLG8sYyxsXX07dmFyIHI9YSgyKSxuPWEoNSksaT1hKDEyKSxzPWEoNCk7Y29uc3Qgbz0yLGM9MyxsPTQsaD01LHU9NixkPTc7dC5QYXR0ZXJuPWNsYXNzIFBhdHRlcm57Y29uc3RydWN0b3IoKXsoMCxyLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgUGF0dGVybi4iKX1zdGF0aWMgcGFyc2VTaGFkaW5nKGUsdCxhLGksZixnKXtjb25zdCBwPWUgaW5zdGFuY2VvZiBuLkJhc2VTdHJlYW0/ZS5kaWN0OmUsbT1wLmdldCgiU2hhZGluZ1R5cGUiKTt0cnl7c3dpdGNoKG0pe2Nhc2UgbzpjYXNlIGM6cmV0dXJuIG5ldyBSYWRpYWxBeGlhbFNoYWRpbmcocCx0LGEsZixnKTtjYXNlIGw6Y2FzZSBoOmNhc2UgdTpjYXNlIGQ6cmV0dXJuIG5ldyBNZXNoU2hhZGluZyhlLHQsYSxmLGcpO2RlZmF1bHQ6dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIlVuc3VwcG9ydGVkIFNoYWRpbmdUeXBlOiAiK20pfX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygcy5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO2kuc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOnIuVU5TVVBQT1JURURfRkVBVFVSRVMuc2hhZGluZ1BhdHRlcm59KTsoMCxyLndhcm4pKGUpO3JldHVybiBuZXcgRHVtbXlTaGFkaW5nfX19O2NsYXNzIEJhc2VTaGFkaW5ne3N0YXRpYyBnZXQgU01BTExfTlVNQkVSKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsIlNNQUxMX05VTUJFUiIsMWUtNil9Y29uc3RydWN0b3IoKXt0aGlzLmNvbnN0cnVjdG9yPT09QmFzZVNoYWRpbmcmJigwLHIudW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlU2hhZGluZy4iKX1nZXRJUigpeygwLHIudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGdldElSYCBjYWxsZWQuIil9fWNsYXNzIFJhZGlhbEF4aWFsU2hhZGluZyBleHRlbmRzIEJhc2VTaGFkaW5ne2NvbnN0cnVjdG9yKGUsdCxhLG4scyl7c3VwZXIoKTt0aGlzLmNvb3Jkc0Fycj1lLmdldEFycmF5KCJDb29yZHMiKTt0aGlzLnNoYWRpbmdUeXBlPWUuZ2V0KCJTaGFkaW5nVHlwZSIpO2NvbnN0IG89aS5Db2xvclNwYWNlLnBhcnNlKHtjczplLmdldFJhdygiQ1MiKXx8ZS5nZXRSYXcoIkNvbG9yU3BhY2UiKSx4cmVmOnQscmVzb3VyY2VzOmEscGRmRnVuY3Rpb25GYWN0b3J5Om4sbG9jYWxDb2xvclNwYWNlQ2FjaGU6c30pLGw9ZS5nZXRBcnJheSgiQkJveCIpO0FycmF5LmlzQXJyYXkobCkmJjQ9PT1sLmxlbmd0aD90aGlzLmJib3g9ci5VdGlsLm5vcm1hbGl6ZVJlY3QobCk6dGhpcy5iYm94PW51bGw7bGV0IGg9MCx1PTE7aWYoZS5oYXMoIkRvbWFpbiIpKXtjb25zdCB0PWUuZ2V0QXJyYXkoIkRvbWFpbiIpO2g9dFswXTt1PXRbMV19bGV0IGQ9ITEsZj0hMTtpZihlLmhhcygiRXh0ZW5kIikpe2NvbnN0IHQ9ZS5nZXRBcnJheSgiRXh0ZW5kIik7ZD10WzBdO2Y9dFsxXX1pZighKHRoaXMuc2hhZGluZ1R5cGUhPT1jfHxkJiZmKSl7Y29uc3RbZSx0LGEsbixpLHNdPXRoaXMuY29vcmRzQXJyLG89TWF0aC5oeXBvdChlLW4sdC1pKTthPD1zK28mJnM8PWErbyYmKDAsci53YXJuKSgiVW5zdXBwb3J0ZWQgcmFkaWFsIGdyYWRpZW50LiIpfXRoaXMuZXh0ZW5kU3RhcnQ9ZDt0aGlzLmV4dGVuZEVuZD1mO2NvbnN0IGc9ZS5nZXRSYXcoIkZ1bmN0aW9uIikscD1uLmNyZWF0ZUZyb21BcnJheShnKSxtPSh1LWgpLzEwLGI9dGhpcy5jb2xvclN0b3BzPVtdO2lmKGg+PXV8fG08PTApeygwLHIuaW5mbykoIkJhZCBzaGFkaW5nIGRvbWFpbi4iKTtyZXR1cm59Y29uc3QgeT1uZXcgRmxvYXQzMkFycmF5KG8ubnVtQ29tcHMpLHc9bmV3IEZsb2F0MzJBcnJheSgxKTtsZXQgUztmb3IobGV0IGU9MDtlPD0xMDtlKyspe3dbMF09aCtlKm07cCh3LDAseSwwKTtTPW8uZ2V0UmdiKHksMCk7Y29uc3QgdD1yLlV0aWwubWFrZUhleENvbG9yKFNbMF0sU1sxXSxTWzJdKTtiLnB1c2goW2UvMTAsdF0pfWxldCB4PSJ0cmFuc3BhcmVudCI7aWYoZS5oYXMoIkJhY2tncm91bmQiKSl7Uz1vLmdldFJnYihlLmdldCgiQmFja2dyb3VuZCIpLDApO3g9ci5VdGlsLm1ha2VIZXhDb2xvcihTWzBdLFNbMV0sU1syXSl9aWYoIWQpe2IudW5zaGlmdChbMCx4XSk7YlsxXVswXSs9QmFzZVNoYWRpbmcuU01BTExfTlVNQkVSfWlmKCFmKXtiLmF0KC0xKVswXS09QmFzZVNoYWRpbmcuU01BTExfTlVNQkVSO2IucHVzaChbMSx4XSl9dGhpcy5jb2xvclN0b3BzPWJ9Z2V0SVIoKXtjb25zdCBlPXRoaXMuY29vcmRzQXJyLHQ9dGhpcy5zaGFkaW5nVHlwZTtsZXQgYSxuLGkscyxsO2lmKHQ9PT1vKXtuPVtlWzBdLGVbMV1dO2k9W2VbMl0sZVszXV07cz1udWxsO2w9bnVsbDthPSJheGlhbCJ9ZWxzZSBpZih0PT09Yyl7bj1bZVswXSxlWzFdXTtpPVtlWzNdLGVbNF1dO3M9ZVsyXTtsPWVbNV07YT0icmFkaWFsIn1lbHNlKDAsci51bnJlYWNoYWJsZSkoYGdldFBhdHRlcm4gdHlwZSB1bmtub3duOiAke3R9YCk7cmV0dXJuWyJSYWRpYWxBeGlhbCIsYSx0aGlzLmJib3gsdGhpcy5jb2xvclN0b3BzLG4saSxzLGxdfX1jbGFzcyBNZXNoU3RyZWFtUmVhZGVye2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5zdHJlYW09ZTt0aGlzLmNvbnRleHQ9dDt0aGlzLmJ1ZmZlcj0wO3RoaXMuYnVmZmVyTGVuZ3RoPTA7Y29uc3QgYT10Lm51bUNvbXBzO3RoaXMudG1wQ29tcHNCdWY9bmV3IEZsb2F0MzJBcnJheShhKTtjb25zdCByPXQuY29sb3JTcGFjZS5udW1Db21wczt0aGlzLnRtcENzQ29tcHNCdWY9dC5jb2xvckZuP25ldyBGbG9hdDMyQXJyYXkocik6dGhpcy50bXBDb21wc0J1Zn1nZXQgaGFzRGF0YSgpe2lmKHRoaXMuc3RyZWFtLmVuZClyZXR1cm4gdGhpcy5zdHJlYW0ucG9zPHRoaXMuc3RyZWFtLmVuZDtpZih0aGlzLmJ1ZmZlckxlbmd0aD4wKXJldHVybiEwO2NvbnN0IGU9dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpO2lmKGU8MClyZXR1cm4hMTt0aGlzLmJ1ZmZlcj1lO3RoaXMuYnVmZmVyTGVuZ3RoPTg7cmV0dXJuITB9cmVhZEJpdHMoZSl7bGV0IHQ9dGhpcy5idWZmZXIsYT10aGlzLmJ1ZmZlckxlbmd0aDtpZigzMj09PWUpe2lmKDA9PT1hKXJldHVybih0aGlzLnN0cmVhbS5nZXRCeXRlKCk8PDI0fHRoaXMuc3RyZWFtLmdldEJ5dGUoKTw8MTZ8dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpPDw4fHRoaXMuc3RyZWFtLmdldEJ5dGUoKSk+Pj4wO3Q9dDw8MjR8dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpPDwxNnx0aGlzLnN0cmVhbS5nZXRCeXRlKCk8PDh8dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpO2NvbnN0IGU9dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpO3RoaXMuYnVmZmVyPWUmKDE8PGEpLTE7cmV0dXJuKHQ8PDgtYXwoMjU1JmUpPj5hKT4+PjB9aWYoOD09PWUmJjA9PT1hKXJldHVybiB0aGlzLnN0cmVhbS5nZXRCeXRlKCk7Zm9yKDthPGU7KXt0PXQ8PDh8dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpO2ErPTh9YS09ZTt0aGlzLmJ1ZmZlckxlbmd0aD1hO3RoaXMuYnVmZmVyPXQmKDE8PGEpLTE7cmV0dXJuIHQ+PmF9YWxpZ24oKXt0aGlzLmJ1ZmZlcj0wO3RoaXMuYnVmZmVyTGVuZ3RoPTB9cmVhZEZsYWcoKXtyZXR1cm4gdGhpcy5yZWFkQml0cyh0aGlzLmNvbnRleHQuYml0c1BlckZsYWcpfXJlYWRDb29yZGluYXRlKCl7Y29uc3QgZT10aGlzLmNvbnRleHQuYml0c1BlckNvb3JkaW5hdGUsdD10aGlzLnJlYWRCaXRzKGUpLGE9dGhpcy5yZWFkQml0cyhlKSxyPXRoaXMuY29udGV4dC5kZWNvZGUsbj1lPDMyPzEvKCgxPDxlKS0xKToyLjMyODMwNjQzNjUzODY5NjNlLTEwO3JldHVyblt0Km4qKHJbMV0tclswXSkrclswXSxhKm4qKHJbM10tclsyXSkrclsyXV19cmVhZENvbXBvbmVudHMoKXtjb25zdCBlPXRoaXMuY29udGV4dC5udW1Db21wcyx0PXRoaXMuY29udGV4dC5iaXRzUGVyQ29tcG9uZW50LGE9dDwzMj8xLygoMTw8dCktMSk6Mi4zMjgzMDY0MzY1Mzg2OTYzZS0xMCxyPXRoaXMuY29udGV4dC5kZWNvZGUsbj10aGlzLnRtcENvbXBzQnVmO2ZvcihsZXQgaT0wLHM9NDtpPGU7aSsrLHMrPTIpe2NvbnN0IGU9dGhpcy5yZWFkQml0cyh0KTtuW2ldPWUqYSoocltzKzFdLXJbc10pK3Jbc119Y29uc3QgaT10aGlzLnRtcENzQ29tcHNCdWY7dGhpcy5jb250ZXh0LmNvbG9yRm4mJnRoaXMuY29udGV4dC5jb2xvckZuKG4sMCxpLDApO3JldHVybiB0aGlzLmNvbnRleHQuY29sb3JTcGFjZS5nZXRSZ2IoaSwwKX19Y29uc3QgZj1mdW5jdGlvbiBnZXRCQ2xvc3VyZSgpe2NvbnN0IGU9W107cmV0dXJuIGZ1bmN0aW9uKHQpe2VbdF18fChlW3RdPWZ1bmN0aW9uIGJ1aWxkQihlKXtjb25zdCB0PVtdO2ZvcihsZXQgYT0wO2E8PWU7YSsrKXtjb25zdCByPWEvZSxuPTEtcjt0LnB1c2gobmV3IEZsb2F0MzJBcnJheShbbipuKm4sMypyKm4qbiwzKnIqcipuLHIqcipyXSkpfXJldHVybiB0fSh0KSk7cmV0dXJuIGVbdF19fSgpO2NsYXNzIE1lc2hTaGFkaW5nIGV4dGVuZHMgQmFzZVNoYWRpbmd7c3RhdGljIGdldCBNSU5fU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCgpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJNSU5fU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCIsMyl9c3RhdGljIGdldCBNQVhfU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCgpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJNQVhfU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCIsMjApfXN0YXRpYyBnZXQgVFJJQU5HTEVfREVOU0lUWSgpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJUUklBTkdMRV9ERU5TSVRZIiwyMCl9Y29uc3RydWN0b3IoZSx0LGEscyxvKXtzdXBlcigpO2lmKCEoZSBpbnN0YW5jZW9mIG4uQmFzZVN0cmVhbSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIk1lc2ggZGF0YSBpcyBub3QgYSBzdHJlYW0iKTtjb25zdCBjPWUuZGljdDt0aGlzLnNoYWRpbmdUeXBlPWMuZ2V0KCJTaGFkaW5nVHlwZSIpO2NvbnN0IGY9Yy5nZXRBcnJheSgiQkJveCIpO0FycmF5LmlzQXJyYXkoZikmJjQ9PT1mLmxlbmd0aD90aGlzLmJib3g9ci5VdGlsLm5vcm1hbGl6ZVJlY3QoZik6dGhpcy5iYm94PW51bGw7Y29uc3QgZz1pLkNvbG9yU3BhY2UucGFyc2Uoe2NzOmMuZ2V0UmF3KCJDUyIpfHxjLmdldFJhdygiQ29sb3JTcGFjZSIpLHhyZWY6dCxyZXNvdXJjZXM6YSxwZGZGdW5jdGlvbkZhY3Rvcnk6cyxsb2NhbENvbG9yU3BhY2VDYWNoZTpvfSk7dGhpcy5iYWNrZ3JvdW5kPWMuaGFzKCJCYWNrZ3JvdW5kIik/Zy5nZXRSZ2IoYy5nZXQoIkJhY2tncm91bmQiKSwwKTpudWxsO2NvbnN0IHA9Yy5nZXRSYXcoIkZ1bmN0aW9uIiksbT1wP3MuY3JlYXRlRnJvbUFycmF5KHApOm51bGw7dGhpcy5jb29yZHM9W107dGhpcy5jb2xvcnM9W107dGhpcy5maWd1cmVzPVtdO2NvbnN0IGI9e2JpdHNQZXJDb29yZGluYXRlOmMuZ2V0KCJCaXRzUGVyQ29vcmRpbmF0ZSIpLGJpdHNQZXJDb21wb25lbnQ6Yy5nZXQoIkJpdHNQZXJDb21wb25lbnQiKSxiaXRzUGVyRmxhZzpjLmdldCgiQml0c1BlckZsYWciKSxkZWNvZGU6Yy5nZXRBcnJheSgiRGVjb2RlIiksY29sb3JGbjptLGNvbG9yU3BhY2U6ZyxudW1Db21wczptPzE6Zy5udW1Db21wc30seT1uZXcgTWVzaFN0cmVhbVJlYWRlcihlLGIpO2xldCB3PSExO3N3aXRjaCh0aGlzLnNoYWRpbmdUeXBlKXtjYXNlIGw6dGhpcy5fZGVjb2RlVHlwZTRTaGFkaW5nKHkpO2JyZWFrO2Nhc2UgaDpjb25zdCBlPTB8Yy5nZXQoIlZlcnRpY2VzUGVyUm93Iik7aWYoZTwyKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJJbnZhbGlkIFZlcnRpY2VzUGVyUm93Iik7dGhpcy5fZGVjb2RlVHlwZTVTaGFkaW5nKHksZSk7YnJlYWs7Y2FzZSB1OnRoaXMuX2RlY29kZVR5cGU2U2hhZGluZyh5KTt3PSEwO2JyZWFrO2Nhc2UgZDp0aGlzLl9kZWNvZGVUeXBlN1NoYWRpbmcoeSk7dz0hMDticmVhaztkZWZhdWx0OigwLHIudW5yZWFjaGFibGUpKCJVbnN1cHBvcnRlZCBtZXNoIHR5cGUuIil9aWYodyl7dGhpcy5fdXBkYXRlQm91bmRzKCk7Zm9yKGxldCBlPTAsdD10aGlzLmZpZ3VyZXMubGVuZ3RoO2U8dDtlKyspdGhpcy5fYnVpbGRGaWd1cmVGcm9tUGF0Y2goZSl9dGhpcy5fdXBkYXRlQm91bmRzKCk7dGhpcy5fcGFja0RhdGEoKX1fZGVjb2RlVHlwZTRTaGFkaW5nKGUpe2NvbnN0IHQ9dGhpcy5jb29yZHMsYT10aGlzLmNvbG9ycyxuPVtdLGk9W107bGV0IHM9MDtmb3IoO2UuaGFzRGF0YTspe2NvbnN0IG89ZS5yZWFkRmxhZygpLGM9ZS5yZWFkQ29vcmRpbmF0ZSgpLGw9ZS5yZWFkQ29tcG9uZW50cygpO2lmKDA9PT1zKXtpZighKDA8PW8mJm88PTIpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJVbmtub3duIHR5cGU0IGZsYWciKTtzd2l0Y2gobyl7Y2FzZSAwOnM9MzticmVhaztjYXNlIDE6aS5wdXNoKGkuYXQoLTIpLGkuYXQoLTEpKTtzPTE7YnJlYWs7Y2FzZSAyOmkucHVzaChpLmF0KC0zKSxpLmF0KC0xKSk7cz0xfW4ucHVzaChvKX1pLnB1c2godC5sZW5ndGgpO3QucHVzaChjKTthLnB1c2gobCk7cy0tO2UuYWxpZ24oKX10aGlzLmZpZ3VyZXMucHVzaCh7dHlwZToidHJpYW5nbGVzIixjb29yZHM6bmV3IEludDMyQXJyYXkoaSksY29sb3JzOm5ldyBJbnQzMkFycmF5KGkpfSl9X2RlY29kZVR5cGU1U2hhZGluZyhlLHQpe2NvbnN0IGE9dGhpcy5jb29yZHMscj10aGlzLmNvbG9ycyxuPVtdO2Zvcig7ZS5oYXNEYXRhOyl7Y29uc3QgdD1lLnJlYWRDb29yZGluYXRlKCksaT1lLnJlYWRDb21wb25lbnRzKCk7bi5wdXNoKGEubGVuZ3RoKTthLnB1c2godCk7ci5wdXNoKGkpfXRoaXMuZmlndXJlcy5wdXNoKHt0eXBlOiJsYXR0aWNlIixjb29yZHM6bmV3IEludDMyQXJyYXkobiksY29sb3JzOm5ldyBJbnQzMkFycmF5KG4pLHZlcnRpY2VzUGVyUm93OnR9KX1fZGVjb2RlVHlwZTZTaGFkaW5nKGUpe2NvbnN0IHQ9dGhpcy5jb29yZHMsYT10aGlzLmNvbG9ycyxuPW5ldyBJbnQzMkFycmF5KDE2KSxpPW5ldyBJbnQzMkFycmF5KDQpO2Zvcig7ZS5oYXNEYXRhOyl7Y29uc3Qgcz1lLnJlYWRGbGFnKCk7aWYoISgwPD1zJiZzPD0zKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiVW5rbm93biB0eXBlNiBmbGFnIik7Y29uc3Qgbz10Lmxlbmd0aDtmb3IobGV0IGE9MCxyPTAhPT1zPzg6MTI7YTxyO2ErKyl0LnB1c2goZS5yZWFkQ29vcmRpbmF0ZSgpKTtjb25zdCBjPWEubGVuZ3RoO2ZvcihsZXQgdD0wLHI9MCE9PXM/Mjo0O3Q8cjt0KyspYS5wdXNoKGUucmVhZENvbXBvbmVudHMoKSk7bGV0IGwsaCx1LGQ7c3dpdGNoKHMpe2Nhc2UgMDpuWzEyXT1vKzM7blsxM109bys0O25bMTRdPW8rNTtuWzE1XT1vKzY7bls4XT1vKzI7blsxMV09bys3O25bNF09bysxO25bN109bys4O25bMF09bztuWzFdPW8rMTE7blsyXT1vKzEwO25bM109bys5O2lbMl09YysxO2lbM109YysyO2lbMF09YztpWzFdPWMrMzticmVhaztjYXNlIDE6bD1uWzEyXTtoPW5bMTNdO3U9blsxNF07ZD1uWzE1XTtuWzEyXT1kO25bMTNdPW8rMDtuWzE0XT1vKzE7blsxNV09bysyO25bOF09dTtuWzExXT1vKzM7bls0XT1oO25bN109bys0O25bMF09bDtuWzFdPW8rNztuWzJdPW8rNjtuWzNdPW8rNTtsPWlbMl07aD1pWzNdO2lbMl09aDtpWzNdPWM7aVswXT1sO2lbMV09YysxO2JyZWFrO2Nhc2UgMjpsPW5bMTVdO2g9blsxMV07blsxMl09blszXTtuWzEzXT1vKzA7blsxNF09bysxO25bMTVdPW8rMjtuWzhdPW5bN107blsxMV09byszO25bNF09aDtuWzddPW8rNDtuWzBdPWw7blsxXT1vKzc7blsyXT1vKzY7blszXT1vKzU7bD1pWzNdO2lbMl09aVsxXTtpWzNdPWM7aVswXT1sO2lbMV09YysxO2JyZWFrO2Nhc2UgMzpuWzEyXT1uWzBdO25bMTNdPW8rMDtuWzE0XT1vKzE7blsxNV09bysyO25bOF09blsxXTtuWzExXT1vKzM7bls0XT1uWzJdO25bN109bys0O25bMF09blszXTtuWzFdPW8rNztuWzJdPW8rNjtuWzNdPW8rNTtpWzJdPWlbMF07aVszXT1jO2lbMF09aVsxXTtpWzFdPWMrMX1uWzVdPXQubGVuZ3RoO3QucHVzaChbKC00KnRbblswXV1bMF0tdFtuWzE1XV1bMF0rNioodFtuWzRdXVswXSt0W25bMV1dWzBdKS0yKih0W25bMTJdXVswXSt0W25bM11dWzBdKSszKih0W25bMTNdXVswXSt0W25bN11dWzBdKSkvOSwoLTQqdFtuWzBdXVsxXS10W25bMTVdXVsxXSs2Kih0W25bNF1dWzFdK3RbblsxXV1bMV0pLTIqKHRbblsxMl1dWzFdK3RbblszXV1bMV0pKzMqKHRbblsxM11dWzFdK3Rbbls3XV1bMV0pKS85XSk7bls2XT10Lmxlbmd0aDt0LnB1c2goWygtNCp0W25bM11dWzBdLXRbblsxMl1dWzBdKzYqKHRbblsyXV1bMF0rdFtuWzddXVswXSktMioodFtuWzBdXVswXSt0W25bMTVdXVswXSkrMyoodFtuWzRdXVswXSt0W25bMTRdXVswXSkpLzksKC00KnRbblszXV1bMV0tdFtuWzEyXV1bMV0rNioodFtuWzJdXVsxXSt0W25bN11dWzFdKS0yKih0W25bMF1dWzFdK3RbblsxNV1dWzFdKSszKih0W25bNF1dWzFdK3RbblsxNF1dWzFdKSkvOV0pO25bOV09dC5sZW5ndGg7dC5wdXNoKFsoLTQqdFtuWzEyXV1bMF0tdFtuWzNdXVswXSs2Kih0W25bOF1dWzBdK3RbblsxM11dWzBdKS0yKih0W25bMF1dWzBdK3RbblsxNV1dWzBdKSszKih0W25bMTFdXVswXSt0W25bMV1dWzBdKSkvOSwoLTQqdFtuWzEyXV1bMV0tdFtuWzNdXVsxXSs2Kih0W25bOF1dWzFdK3RbblsxM11dWzFdKS0yKih0W25bMF1dWzFdK3RbblsxNV1dWzFdKSszKih0W25bMTFdXVsxXSt0W25bMV1dWzFdKSkvOV0pO25bMTBdPXQubGVuZ3RoO3QucHVzaChbKC00KnRbblsxNV1dWzBdLXRbblswXV1bMF0rNioodFtuWzExXV1bMF0rdFtuWzE0XV1bMF0pLTIqKHRbblsxMl1dWzBdK3RbblszXV1bMF0pKzMqKHRbblsyXV1bMF0rdFtuWzhdXVswXSkpLzksKC00KnRbblsxNV1dWzFdLXRbblswXV1bMV0rNioodFtuWzExXV1bMV0rdFtuWzE0XV1bMV0pLTIqKHRbblsxMl1dWzFdK3RbblszXV1bMV0pKzMqKHRbblsyXV1bMV0rdFtuWzhdXVsxXSkpLzldKTt0aGlzLmZpZ3VyZXMucHVzaCh7dHlwZToicGF0Y2giLGNvb3JkczpuZXcgSW50MzJBcnJheShuKSxjb2xvcnM6bmV3IEludDMyQXJyYXkoaSl9KX19X2RlY29kZVR5cGU3U2hhZGluZyhlKXtjb25zdCB0PXRoaXMuY29vcmRzLGE9dGhpcy5jb2xvcnMsbj1uZXcgSW50MzJBcnJheSgxNiksaT1uZXcgSW50MzJBcnJheSg0KTtmb3IoO2UuaGFzRGF0YTspe2NvbnN0IHM9ZS5yZWFkRmxhZygpO2lmKCEoMDw9cyYmczw9MykpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIlVua25vd24gdHlwZTcgZmxhZyIpO2NvbnN0IG89dC5sZW5ndGg7Zm9yKGxldCBhPTAscj0wIT09cz8xMjoxNjthPHI7YSsrKXQucHVzaChlLnJlYWRDb29yZGluYXRlKCkpO2NvbnN0IGM9YS5sZW5ndGg7Zm9yKGxldCB0PTAscj0wIT09cz8yOjQ7dDxyO3QrKylhLnB1c2goZS5yZWFkQ29tcG9uZW50cygpKTtsZXQgbCxoLHUsZDtzd2l0Y2gocyl7Y2FzZSAwOm5bMTJdPW8rMztuWzEzXT1vKzQ7blsxNF09bys1O25bMTVdPW8rNjtuWzhdPW8rMjtuWzldPW8rMTM7blsxMF09bysxNDtuWzExXT1vKzc7bls0XT1vKzE7bls1XT1vKzEyO25bNl09bysxNTtuWzddPW8rODtuWzBdPW87blsxXT1vKzExO25bMl09bysxMDtuWzNdPW8rOTtpWzJdPWMrMTtpWzNdPWMrMjtpWzBdPWM7aVsxXT1jKzM7YnJlYWs7Y2FzZSAxOmw9blsxMl07aD1uWzEzXTt1PW5bMTRdO2Q9blsxNV07blsxMl09ZDtuWzEzXT1vKzA7blsxNF09bysxO25bMTVdPW8rMjtuWzhdPXU7bls5XT1vKzk7blsxMF09bysxMDtuWzExXT1vKzM7bls0XT1oO25bNV09bys4O25bNl09bysxMTtuWzddPW8rNDtuWzBdPWw7blsxXT1vKzc7blsyXT1vKzY7blszXT1vKzU7bD1pWzJdO2g9aVszXTtpWzJdPWg7aVszXT1jO2lbMF09bDtpWzFdPWMrMTticmVhaztjYXNlIDI6bD1uWzE1XTtoPW5bMTFdO25bMTJdPW5bM107blsxM109byswO25bMTRdPW8rMTtuWzE1XT1vKzI7bls4XT1uWzddO25bOV09bys5O25bMTBdPW8rMTA7blsxMV09byszO25bNF09aDtuWzVdPW8rODtuWzZdPW8rMTE7bls3XT1vKzQ7blswXT1sO25bMV09bys3O25bMl09bys2O25bM109bys1O2w9aVszXTtpWzJdPWlbMV07aVszXT1jO2lbMF09bDtpWzFdPWMrMTticmVhaztjYXNlIDM6blsxMl09blswXTtuWzEzXT1vKzA7blsxNF09bysxO25bMTVdPW8rMjtuWzhdPW5bMV07bls5XT1vKzk7blsxMF09bysxMDtuWzExXT1vKzM7bls0XT1uWzJdO25bNV09bys4O25bNl09bysxMTtuWzddPW8rNDtuWzBdPW5bM107blsxXT1vKzc7blsyXT1vKzY7blszXT1vKzU7aVsyXT1pWzBdO2lbM109YztpWzBdPWlbMV07aVsxXT1jKzF9dGhpcy5maWd1cmVzLnB1c2goe3R5cGU6InBhdGNoIixjb29yZHM6bmV3IEludDMyQXJyYXkobiksY29sb3JzOm5ldyBJbnQzMkFycmF5KGkpfSl9fV9idWlsZEZpZ3VyZUZyb21QYXRjaChlKXtjb25zdCB0PXRoaXMuZmlndXJlc1tlXTsoMCxyLmFzc2VydCkoInBhdGNoIj09PXQudHlwZSwiVW5leHBlY3RlZCBwYXRjaCBtZXNoIGZpZ3VyZSIpO2NvbnN0IGE9dGhpcy5jb29yZHMsbj10aGlzLmNvbG9ycyxpPXQuY29vcmRzLHM9dC5jb2xvcnMsbz1NYXRoLm1pbihhW2lbMF1dWzBdLGFbaVszXV1bMF0sYVtpWzEyXV1bMF0sYVtpWzE1XV1bMF0pLGM9TWF0aC5taW4oYVtpWzBdXVsxXSxhW2lbM11dWzFdLGFbaVsxMl1dWzFdLGFbaVsxNV1dWzFdKSxsPU1hdGgubWF4KGFbaVswXV1bMF0sYVtpWzNdXVswXSxhW2lbMTJdXVswXSxhW2lbMTVdXVswXSksaD1NYXRoLm1heChhW2lbMF1dWzFdLGFbaVszXV1bMV0sYVtpWzEyXV1bMV0sYVtpWzE1XV1bMV0pO2xldCB1PU1hdGguY2VpbCgobC1vKSpNZXNoU2hhZGluZy5UUklBTkdMRV9ERU5TSVRZLyh0aGlzLmJvdW5kc1syXS10aGlzLmJvdW5kc1swXSkpO3U9TWF0aC5tYXgoTWVzaFNoYWRpbmcuTUlOX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQsTWF0aC5taW4oTWVzaFNoYWRpbmcuTUFYX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQsdSkpO2xldCBkPU1hdGguY2VpbCgoaC1jKSpNZXNoU2hhZGluZy5UUklBTkdMRV9ERU5TSVRZLyh0aGlzLmJvdW5kc1szXS10aGlzLmJvdW5kc1sxXSkpO2Q9TWF0aC5tYXgoTWVzaFNoYWRpbmcuTUlOX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQsTWF0aC5taW4oTWVzaFNoYWRpbmcuTUFYX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQsZCkpO2NvbnN0IGc9dSsxLHA9bmV3IEludDMyQXJyYXkoKGQrMSkqZyksbT1uZXcgSW50MzJBcnJheSgoZCsxKSpnKTtsZXQgYj0wO2NvbnN0IHk9bmV3IFVpbnQ4QXJyYXkoMyksdz1uZXcgVWludDhBcnJheSgzKSxTPW5bc1swXV0seD1uW3NbMV1dLGs9bltzWzJdXSxDPW5bc1szXV0sdj1mKGQpLEY9Zih1KTtmb3IobGV0IGU9MDtlPD1kO2UrKyl7eVswXT0oU1swXSooZC1lKStrWzBdKmUpL2R8MDt5WzFdPShTWzFdKihkLWUpK2tbMV0qZSkvZHwwO3lbMl09KFNbMl0qKGQtZSkra1syXSplKS9kfDA7d1swXT0oeFswXSooZC1lKStDWzBdKmUpL2R8MDt3WzFdPSh4WzFdKihkLWUpK0NbMV0qZSkvZHwwO3dbMl09KHhbMl0qKGQtZSkrQ1syXSplKS9kfDA7Zm9yKGxldCB0PTA7dDw9dTt0KyssYisrKXtpZighKDAhPT1lJiZlIT09ZHx8MCE9PXQmJnQhPT11KSljb250aW51ZTtsZXQgcj0wLHM9MCxvPTA7Zm9yKGxldCBuPTA7bjw9MztuKyspZm9yKGxldCBjPTA7Yzw9MztjKyssbysrKXtjb25zdCBsPXZbZV1bbl0qRlt0XVtjXTtyKz1hW2lbb11dWzBdKmw7cys9YVtpW29dXVsxXSpsfXBbYl09YS5sZW5ndGg7YS5wdXNoKFtyLHNdKTttW2JdPW4ubGVuZ3RoO2NvbnN0IGM9bmV3IFVpbnQ4QXJyYXkoMyk7Y1swXT0oeVswXSoodS10KSt3WzBdKnQpL3V8MDtjWzFdPSh5WzFdKih1LXQpK3dbMV0qdCkvdXwwO2NbMl09KHlbMl0qKHUtdCkrd1syXSp0KS91fDA7bi5wdXNoKGMpfX1wWzBdPWlbMF07bVswXT1zWzBdO3BbdV09aVszXTttW3VdPXNbMV07cFtnKmRdPWlbMTJdO21bZypkXT1zWzJdO3BbZypkK3VdPWlbMTVdO21bZypkK3VdPXNbM107dGhpcy5maWd1cmVzW2VdPXt0eXBlOiJsYXR0aWNlIixjb29yZHM6cCxjb2xvcnM6bSx2ZXJ0aWNlc1BlclJvdzpnfX1fdXBkYXRlQm91bmRzKCl7bGV0IGU9dGhpcy5jb29yZHNbMF1bMF0sdD10aGlzLmNvb3Jkc1swXVsxXSxhPWUscj10O2ZvcihsZXQgbj0xLGk9dGhpcy5jb29yZHMubGVuZ3RoO248aTtuKyspe2NvbnN0IGk9dGhpcy5jb29yZHNbbl1bMF0scz10aGlzLmNvb3Jkc1tuXVsxXTtlPWU+aT9pOmU7dD10PnM/czp0O2E9YTxpP2k6YTtyPXI8cz9zOnJ9dGhpcy5ib3VuZHM9W2UsdCxhLHJdfV9wYWNrRGF0YSgpe2xldCBlLHQsYSxyO2NvbnN0IG49dGhpcy5jb29yZHMsaT1uZXcgRmxvYXQzMkFycmF5KDIqbi5sZW5ndGgpO2ZvcihlPTAsYT0wLHQ9bi5sZW5ndGg7ZTx0O2UrKyl7Y29uc3QgdD1uW2VdO2lbYSsrXT10WzBdO2lbYSsrXT10WzFdfXRoaXMuY29vcmRzPWk7Y29uc3Qgcz10aGlzLmNvbG9ycyxvPW5ldyBVaW50OEFycmF5KDMqcy5sZW5ndGgpO2ZvcihlPTAsYT0wLHQ9cy5sZW5ndGg7ZTx0O2UrKyl7Y29uc3QgdD1zW2VdO29bYSsrXT10WzBdO29bYSsrXT10WzFdO29bYSsrXT10WzJdfXRoaXMuY29sb3JzPW87Y29uc3QgYz10aGlzLmZpZ3VyZXM7Zm9yKGU9MCx0PWMubGVuZ3RoO2U8dDtlKyspe2NvbnN0IHQ9Y1tlXSxuPXQuY29vcmRzLGk9dC5jb2xvcnM7Zm9yKGE9MCxyPW4ubGVuZ3RoO2E8cjthKyspe25bYV0qPTI7aVthXSo9M319fWdldElSKCl7cmV0dXJuWyJNZXNoIix0aGlzLnNoYWRpbmdUeXBlLHRoaXMuY29vcmRzLHRoaXMuY29sb3JzLHRoaXMuZmlndXJlcyx0aGlzLmJvdW5kcyx0aGlzLmJib3gsdGhpcy5iYWNrZ3JvdW5kXX19Y2xhc3MgRHVtbXlTaGFkaW5nIGV4dGVuZHMgQmFzZVNoYWRpbmd7Z2V0SVIoKXtyZXR1cm5bIkR1bW15Il19fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LmdldFhmYUZvbnREaWN0PWZ1bmN0aW9uIGdldFhmYUZvbnREaWN0KGUpe2NvbnN0IHQ9ZnVuY3Rpb24gZ2V0WGZhRm9udFdpZHRocyhlKXtjb25zdCB0PWdldFhmYUZvbnROYW1lKGUpO2lmKCF0KXJldHVybiBudWxsO2NvbnN0e2Jhc2VXaWR0aHM6YSxiYXNlTWFwcGluZzpyLGZhY3RvcnM6bn09dDtsZXQgaTtpPW4/YS5tYXAoKChlLHQpPT5lKm5bdF0pKTphO2xldCBzLG89LTI7Y29uc3QgYz1bXTtmb3IoY29uc3RbZSx0XW9mIHIubWFwKCgoZSx0KT0+W2UsdF0pKS5zb3J0KCgoW2VdLFt0XSk9PmUtdCkpKWlmKC0xIT09ZSlpZihlPT09bysxKXtzLnB1c2goaVt0XSk7bys9MX1lbHNle289ZTtzPVtpW3RdXTtjLnB1c2goZSxzKX1yZXR1cm4gY30oZSksYT1uZXcgbi5EaWN0KG51bGwpO2Euc2V0KCJCYXNlRm9udCIsbi5OYW1lLmdldChlKSk7YS5zZXQoIlR5cGUiLG4uTmFtZS5nZXQoIkZvbnQiKSk7YS5zZXQoIlN1YnR5cGUiLG4uTmFtZS5nZXQoIkNJREZvbnRUeXBlMiIpKTthLnNldCgiRW5jb2RpbmciLG4uTmFtZS5nZXQoIklkZW50aXR5LUgiKSk7YS5zZXQoIkNJRFRvR0lETWFwIixuLk5hbWUuZ2V0KCJJZGVudGl0eSIpKTthLnNldCgiVyIsdCk7YS5zZXQoIkZpcnN0Q2hhciIsdFswXSk7YS5zZXQoIkxhc3RDaGFyIix0LmF0KC0yKSt0LmF0KC0xKS5sZW5ndGgtMSk7Y29uc3Qgcj1uZXcgbi5EaWN0KG51bGwpO2Euc2V0KCJGb250RGVzY3JpcHRvciIscik7Y29uc3QgaT1uZXcgbi5EaWN0KG51bGwpO2kuc2V0KCJPcmRlcmluZyIsIklkZW50aXR5Iik7aS5zZXQoIlJlZ2lzdHJ5IiwiQWRvYmUiKTtpLnNldCgiU3VwcGxlbWVudCIsMCk7YS5zZXQoIkNJRFN5c3RlbUluZm8iLGkpO3JldHVybiBhfTt0LmdldFhmYUZvbnROYW1lPWdldFhmYUZvbnROYW1lO3ZhciByPWEoNTApLG49YSgzKSxpPWEoNTEpLHM9YSg1Miksbz1hKDUzKSxjPWEoNTQpLGw9YSg0KSxoPWEoMzYpO2NvbnN0IHU9KDAsbC5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlWyJNeXJpYWRQcm8tUmVndWxhciJdPWVbIlBkZkpTLUZhbGxiYWNrLVJlZ3VsYXIiXT17bmFtZToiTGliZXJhdGlvblNhbnMtUmVndWxhciIsZmFjdG9yczpvLk15cmlhZFByb1JlZ3VsYXJGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJNYXBwaW5nLG1ldHJpY3M6by5NeXJpYWRQcm9SZWd1bGFyTWV0cmljc307ZVsiTXlyaWFkUHJvLUJvbGQiXT1lWyJQZGZKUy1GYWxsYmFjay1Cb2xkIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGQiLGZhY3RvcnM6by5NeXJpYWRQcm9Cb2xkRmFjdG9ycyxiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzLGJhc2VNYXBwaW5nOnMuTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZyxtZXRyaWNzOm8uTXlyaWFkUHJvQm9sZE1ldHJpY3N9O2VbIk15cmlhZFByby1JdCJdPWVbIk15cmlhZFByby1JdGFsaWMiXT1lWyJQZGZKUy1GYWxsYmFjay1JdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtSXRhbGljIixmYWN0b3JzOm8uTXlyaWFkUHJvSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmcsbWV0cmljczpvLk15cmlhZFByb0l0YWxpY01ldHJpY3N9O2VbIk15cmlhZFByby1Cb2xkSXQiXT1lWyJNeXJpYWRQcm8tQm9sZEl0YWxpYyJdPWVbIlBkZkpTLUZhbGxiYWNrLUJvbGRJdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYyIsZmFjdG9yczpvLk15cmlhZFByb0JvbGRJdGFsaWNGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nLG1ldHJpY3M6by5NeXJpYWRQcm9Cb2xkSXRhbGljTWV0cmljc307ZS5BcmlhbE1UPWUuQXJpYWw9ZVsiQXJpYWwtUmVndWxhciJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyIixiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzLGJhc2VNYXBwaW5nOnMuTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZ307ZVsiQXJpYWwtQm9sZE1UIl09ZVsiQXJpYWwtQm9sZCJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkIixiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzLGJhc2VNYXBwaW5nOnMuTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZ307ZVsiQXJpYWwtSXRhbGljTVQiXT1lWyJBcmlhbC1JdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtSXRhbGljIixiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmd9O2VbIkFyaWFsLUJvbGRJdGFsaWNNVCJdPWVbIkFyaWFsLUJvbGRJdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYyIsYmFzZVdpZHRoczpzLkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY1dpZHRocyxiYXNlTWFwcGluZzpzLkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY01hcHBpbmd9O2VbIkNhbGlicmktUmVndWxhciJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyIixmYWN0b3JzOnIuQ2FsaWJyaVJlZ3VsYXJGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJNYXBwaW5nLG1ldHJpY3M6ci5DYWxpYnJpUmVndWxhck1ldHJpY3N9O2VbIkNhbGlicmktQm9sZCJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkIixmYWN0b3JzOnIuQ2FsaWJyaUJvbGRGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0JvbGRXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0JvbGRNYXBwaW5nLG1ldHJpY3M6ci5DYWxpYnJpQm9sZE1ldHJpY3N9O2VbIkNhbGlicmktSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUl0YWxpYyIsZmFjdG9yczpyLkNhbGlicmlJdGFsaWNGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0l0YWxpY1dpZHRocyxiYXNlTWFwcGluZzpzLkxpYmVyYXRpb25TYW5zSXRhbGljTWFwcGluZyxtZXRyaWNzOnIuQ2FsaWJyaUl0YWxpY01ldHJpY3N9O2VbIkNhbGlicmktQm9sZEl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljIixmYWN0b3JzOnIuQ2FsaWJyaUJvbGRJdGFsaWNGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nLG1ldHJpY3M6ci5DYWxpYnJpQm9sZEl0YWxpY01ldHJpY3N9O2VbIlNlZ29ldWktUmVndWxhciJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyIixmYWN0b3JzOmMuU2Vnb2V1aVJlZ3VsYXJGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJNYXBwaW5nLG1ldHJpY3M6Yy5TZWdvZXVpUmVndWxhck1ldHJpY3N9O2VbIlNlZ29ldWktQm9sZCJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkIixmYWN0b3JzOmMuU2Vnb2V1aUJvbGRGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0JvbGRXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0JvbGRNYXBwaW5nLG1ldHJpY3M6Yy5TZWdvZXVpQm9sZE1ldHJpY3N9O2VbIlNlZ29ldWktSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUl0YWxpYyIsZmFjdG9yczpjLlNlZ29ldWlJdGFsaWNGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0l0YWxpY1dpZHRocyxiYXNlTWFwcGluZzpzLkxpYmVyYXRpb25TYW5zSXRhbGljTWFwcGluZyxtZXRyaWNzOmMuU2Vnb2V1aUl0YWxpY01ldHJpY3N9O2VbIlNlZ29ldWktQm9sZEl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljIixmYWN0b3JzOmMuU2Vnb2V1aUJvbGRJdGFsaWNGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nLG1ldHJpY3M6Yy5TZWdvZXVpQm9sZEl0YWxpY01ldHJpY3N9O2VbIkhlbHZldGljYS1SZWd1bGFyIl09ZS5IZWx2ZXRpY2E9e25hbWU6IkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIiLGZhY3RvcnM6aS5IZWx2ZXRpY2FSZWd1bGFyRmFjdG9ycyxiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzLGJhc2VNYXBwaW5nOnMuTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZyxtZXRyaWNzOmkuSGVsdmV0aWNhUmVndWxhck1ldHJpY3N9O2VbIkhlbHZldGljYS1Cb2xkIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGQiLGZhY3RvcnM6aS5IZWx2ZXRpY2FCb2xkRmFjdG9ycyxiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzLGJhc2VNYXBwaW5nOnMuTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZyxtZXRyaWNzOmkuSGVsdmV0aWNhQm9sZE1ldHJpY3N9O2VbIkhlbHZldGljYS1JdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtSXRhbGljIixmYWN0b3JzOmkuSGVsdmV0aWNhSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmcsbWV0cmljczppLkhlbHZldGljYUl0YWxpY01ldHJpY3N9O2VbIkhlbHZldGljYS1Cb2xkSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMiLGZhY3RvcnM6aS5IZWx2ZXRpY2FCb2xkSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOnMuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZyxtZXRyaWNzOmkuSGVsdmV0aWNhQm9sZEl0YWxpY01ldHJpY3N9fSkpO2Z1bmN0aW9uIGdldFhmYUZvbnROYW1lKGUpe2NvbnN0IHQ9KDAsaC5ub3JtYWxpemVGb250TmFtZSkoZSk7cmV0dXJuIHUoKVt0XX19LChlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuQ2FsaWJyaVJlZ3VsYXJNZXRyaWNzPXQuQ2FsaWJyaVJlZ3VsYXJGYWN0b3JzPXQuQ2FsaWJyaUl0YWxpY01ldHJpY3M9dC5DYWxpYnJpSXRhbGljRmFjdG9ycz10LkNhbGlicmlCb2xkTWV0cmljcz10LkNhbGlicmlCb2xkSXRhbGljTWV0cmljcz10LkNhbGlicmlCb2xkSXRhbGljRmFjdG9ycz10LkNhbGlicmlCb2xkRmFjdG9ycz12b2lkIDA7dC5DYWxpYnJpQm9sZEZhY3RvcnM9WzEuMzg3NywxLDEsMSwuOTc4MDEsLjkyNDgyLC44OTU1MiwuOTExMzMsLjgxOTg4LC45NzU2NiwuOTgxNTIsLjkzNTQ4LC45MzU0OCwxLjI3OTgsLjg1Mjg0LC45Mjc5NCwxLC45NjEzNCwxLjU0NjU3LC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuODI4NDUsLjgyODQ1LC44NTI4NCwuODUyODQsLjg1Mjg0LC43NTg1OSwuOTIxMzgsLjgzOTA4LC43NzYyLC43MzI5MywuODcyODksLjczMTMzLC43NTE0LC44MTkyMSwuODczNTYsLjk1OTU4LC41OTUyNiwuNzU3MjcsLjY5MjI1LDEuMDQ5MjQsLjkxMjEsLjg2OTQzLC43OTc5NSwuODgxOTgsLjc3OTU4LC43MDg2NCwuODEwNTUsLjkwMzk5LC44ODY1MywuOTYwMTcsLjgyNTc3LC43Nzg5MiwuNzgyNTcsLjk3NTA3LDEuNTQ2NTcsLjk3NTA3LC44NTI4NCwuODk1NTIsLjkwMTc2LC44ODc2MiwuODc4NSwuNzUyNDEsLjg3ODUsLjkwNTE4LC45NTAxNSwuNzc2MTgsLjg3ODUsLjg4NDAxLC45MTkxNiwuODYzMDQsLjg4NDAxLC45MTQ4OCwuODc4NSwuODgwMSwuODc4NSwuODc4NSwuOTEzNDMsLjcxNzMsMS4wNDEwNiwuODc4NSwuODUwNzUsLjk1Nzk0LC44MjYxNiwuODUxNjIsLjc5NDkyLC44ODMzMSwxLjY5ODA4LC44ODMzMSwuODUyODQsLjk3ODAxLC44OTU1MiwuOTExMzMsLjg5NTUyLC45MTEzMywxLjc4MDEsLjg5NTUyLDEuMjQ0ODcsMS4xMzI1NCwxLjEyNDAxLC45NjgzOSwuODUyODQsLjY4Nzg3LC43MDY0NSwuODU1OTIsLjkwNzQ3LDEuMDE0NjYsMS4wMDg4LC45MDMyMywxLDEuMDc0NjMsMSwuOTEwNTYsLjc1ODA2LDEuMTkxMTgsLjk2ODM5LC43ODg2NCwuODI4NDUsLjg0MTMzLC43NTg1OSwuODM5MDgsLjgzOTA4LC44MzkwOCwuODM5MDgsLjgzOTA4LC44MzkwOCwuNzc1MzksLjczMjkzLC43MzEzMywuNzMxMzMsLjczMTMzLC43MzEzMywuOTU5NTgsLjk1OTU4LC45NTk1OCwuOTU5NTgsLjg4NTA2LC45MTIxLC44Njk0MywuODY5NDMsLjg2OTQzLC44Njk0MywuODY5NDMsLjg1Mjg0LC44NzUwOCwuOTAzOTksLjkwMzk5LC45MDM5OSwuOTAzOTksLjc3ODkyLC43OTc5NSwuOTA4MDcsLjg4NzYyLC44ODc2MiwuODg3NjIsLjg4NzYyLC44ODc2MiwuODg3NjIsLjg3MTUsLjc1MjQxLC45MDUxOCwuOTA1MTgsLjkwNTE4LC45MDUxOCwuODg0MDEsLjg4NDAxLC44ODQwMSwuODg0MDEsLjg3ODUsLjg3ODUsLjg4MDEsLjg4MDEsLjg4MDEsLjg4MDEsLjg4MDEsLjkwNzQ3LC44OTA0OSwuODc4NSwuODc4NSwuODc4NSwuODc4NSwuODUxNjIsLjg3ODUsLjg1MTYyLC44MzkwOCwuODg3NjIsLjgzOTA4LC44ODc2MiwuODM5MDgsLjg4NzYyLC43MzI5MywuNzUyNDEsLjczMjkzLC43NTI0MSwuNzMyOTMsLjc1MjQxLC43MzI5MywuNzUyNDEsLjg3Mjg5LC44MzAxNiwuODg1MDYsLjkzMTI1LC43MzEzMywuOTA1MTgsLjczMTMzLC45MDUxOCwuNzMxMzMsLjkwNTE4LC43MzEzMywuOTA1MTgsLjczMTMzLC45MDUxOCwuODE5MjEsLjc3NjE4LC44MTkyMSwuNzc2MTgsLjgxOTIxLC43NzYxOCwxLDEsLjg3MzU2LC44Nzg1LC45MTA3NSwuODk2MDgsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC43NjIyOSwuOTAxNjcsLjU5NTI2LC45MTkxNiwxLDEsLjg2MzA0LC42OTIyNSwuODg0MDEsMSwxLC43MDQyNCwuNzk0NjgsLjkxOTI2LC44ODE3NSwuNzA4MjMsLjk0OTAzLC45MTIxLC44Nzg1LDEsMSwuOTEyMSwuODc4NSwuODc4MDIsLjg4NjU2LC44Nzg1LC44Njk0MywuODgwMSwuODY5NDMsLjg4MDEsLjg2OTQzLC44ODAxLC44NzQwMiwuODkyOTEsLjc3OTU4LC45MTM0MywxLDEsLjc3OTU4LC45MTM0MywuNzA4NjQsLjcxNzMsLjcwODY0LC43MTczLC43MDg2NCwuNzE3MywuNzA4NjQsLjcxNzMsMSwxLC44MTA1NSwuNzU4NDEsLjgxMDU1LDEuMDY0NTIsLjkwMzk5LC44Nzg1LC45MDM5OSwuODc4NSwuOTAzOTksLjg3ODUsLjkwMzk5LC44Nzg1LC45MDM5OSwuODc4NSwuOTAzOTksLjg3ODUsLjk2MDE3LC45NTc5NCwuNzc4OTIsLjg1MTYyLC43Nzg5MiwuNzgyNTcsLjc5NDkyLC43ODI1NywuNzk0OTIsLjc4MjU3LC43OTQ5MiwuOTI5NywuNTY4OTIsLjgzOTA4LC44ODc2MiwuNzc1MzksLjg3MTUsLjg3NTA4LC44OTA0OSwxLDEsLjgxMDU1LDEuMDQxMDYsMS4yMDUyOCwxLjIwNTI4LDEsMS4xNTU0MywuNzA2NzQsLjk4Mzg3LC45NDcyMSwxLjMzNDMxLDEuNDU4OTQsLjk1MTYxLDEuMDYzMDMsLjgzOTA4LC44MDM1MiwuNTcxODQsLjY5NjUsLjU2Mjg5LC44MjAwMSwuNTYwMjksLjgxMjM1LDEuMDI5ODgsLjgzOTA4LC43NzYyLC42ODE1NiwuODAzNjcsLjczMTMzLC43ODI1NywuODczNTYsLjg2OTQzLC45NTk1OCwuNzU3MjcsLjg5MDE5LDEuMDQ5MjQsLjkxMjEsLjc2NDgsLjg2OTQzLC44NzM1NiwuNzk3OTUsLjc4Mjc1LC44MTA1NSwuNzc4OTIsLjk3NjIsLjgyNTc3LC45OTgxOSwuODQ4OTYsLjk1OTU4LC43Nzg5MiwuOTYxMDgsMS4wMTQwNywuODkwNDksMS4wMjk4OCwuOTQyMTEsLjk2MTA4LC44OTM2LC44NDAyMSwuODc4NDIsLjk2Mzk5LC43OTEwOSwuODkwNDksMS4wMDgxMywxLjAyOTg4LC44NjA3NywuODc0NDUsLjkyMDk5LC44NDcyMywuODY1MTMsLjg4MDEsLjc1NjM4LC44NTcxNCwuNzgyMTYsLjc5NTg2LC44Nzk2NSwuOTQyMTEsLjk3NzQ3LC43ODI4NywuOTc5MjYsLjg0OTcxLDEuMDI5ODgsLjk0MjExLC44ODAxLC45NDIxMSwuODQ5NzEsLjczMTMzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDI2NCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTA1MTgsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkwNTQ4LDEsMSwxLDEsMSwxLC45NjAxNywuOTU3OTQsLjk2MDE3LC45NTc5NCwuOTYwMTcsLjk1Nzk0LC43Nzg5MiwuODUxNjIsMSwxLC44OTU1MiwuOTA1MjcsMSwuOTAzNjMsLjkyNzk0LC45Mjc5NCwuOTI3OTQsLjkyNzk0LC44NzAxMiwuODcwMTIsLjg3MDEyLC44OTU1MiwuODk1NTIsMS40MjI1OSwuNzExNDMsMS4wNjE1MiwxLDEsMS4wMzM3MiwxLjAzMzcyLC45NzE3MSwxLjQ5NTYsMi4yODA3LC45MzgzNSwuODM0MDYsLjkxMTMzLC44NDEwNywuOTExMzMsMSwxLDEsLjcyMDIxLDEsMS4yMzEwOCwuODM0ODksLjg4NTI1LC44ODUyNSwuODE0OTksLjkwNTI3LDEuODEwNTUsLjkwNTI3LDEuODEwNTUsMS4zMTAwNiwxLjUzNzExLC45NDQzNCwxLjA4Njk2LDEsLjk1MDE4LC43NzE5MiwuODUyODQsLjkwNzQ3LDEuMTc1MzQsLjY5ODI1LC45NzE2LDEuMzcwNzcsLjkwNzQ3LC45MDc0NywuODUzNTYsLjkwNzQ3LC45MDc0NywxLjQ0OTQ3LC44NTI4NCwuODk0MSwuODk0MSwuNzA1NzIsLjgsLjcwNTcyLC43MDU3MiwuNzA1NzIsLjcwNTcyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTk4NjIsLjk5ODYyLDEsMSwxLDEsMSwxLjA4MDA0LC45MTAyNywxLDEsMSwuOTk4NjIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkwNzI3LC45MDcyNywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV07dC5DYWxpYnJpQm9sZE1ldHJpY3M9e2xpbmVIZWlnaHQ6MS4yMjA3LGxpbmVHYXA6LjIyMDd9O3QuQ2FsaWJyaUJvbGRJdGFsaWNGYWN0b3JzPVsxLjM4NzcsMSwxLDEsLjk3ODAxLC45MjQ4MiwuODk1NTIsLjkxMTMzLC44MTk4OCwuOTc1NjYsLjk4MTUyLC45MzU0OCwuOTM1NDgsMS4yNzk4LC44NTI4NCwuOTI3OTQsMSwuOTYxMzQsMS41NjIzOSwuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjgyODQ1LC44Mjg0NSwuODUyODQsLjg1Mjg0LC44NTI4NCwuNzU4NTksLjkyMTM4LC44MzkwOCwuNzc2MiwuNzE4MDUsLjg3Mjg5LC43MzEzMywuNzUxNCwuODE5MjEsLjg3MzU2LC45NTk1OCwuNTk1MjYsLjc1NzI3LC42OTIyNSwxLjA0OTI0LC45MDg3MiwuODU5MzgsLjc5Nzk1LC44NzA2OCwuNzc5NTgsLjY5NzY2LC44MTA1NSwuOTAzOTksLjg4NjUzLC45NjA2OCwuODI1NzcsLjc3ODkyLC43ODI1NywuOTc1MDcsMS41MjksLjk3NTA3LC44NTI4NCwuODk1NTIsLjkwMTc2LC45NDkwOCwuODY0MTEsLjc0MDEyLC44NjQxMSwuODgzMjMsLjk1MDE1LC44NjQxMSwuODYzMzEsLjg4NDAxLC45MTkxNiwuODYzMDQsLjg4NDAxLC45MDM5LC44NjMzMSwuODYzMzEsLjg2NDExLC44NjQxMSwuOTA0NjQsLjcwODUyLDEuMDQxMDYsLjg2MzMxLC44NDM3MiwuOTU3OTQsLjgyNjE2LC44NDU0OCwuNzk0OTIsLjg4MzMxLDEuNjk4MDgsLjg4MzMxLC44NTI4NCwuOTc4MDEsLjg5NTUyLC45MTEzMywuODk1NTIsLjkxMTMzLDEuNzgwMSwuODk1NTIsMS4yNDQ4NywxLjEzMjU0LDEuMTkxMjksLjk2ODM5LC44NTI4NCwuNjg3ODcsLjcwNjQ1LC44NTU5MiwuOTA3NDcsMS4wMTQ2NiwxLjAwODgsLjkwMzIzLDEsMS4wNzQ2MywxLC45MTA1NiwuNzU4MDYsMS4xOTExOCwuOTY4MzksLjc4ODY0LC44Mjg0NSwuODQxMzMsLjc1ODU5LC44MzkwOCwuODM5MDgsLjgzOTA4LC44MzkwOCwuODM5MDgsLjgzOTA4LC43NzUzOSwuNzE4MDUsLjczMTMzLC43MzEzMywuNzMxMzMsLjczMTMzLC45NTk1OCwuOTU5NTgsLjk1OTU4LC45NTk1OCwuODg1MDYsLjkwODcyLC44NTkzOCwuODU5MzgsLjg1OTM4LC44NTkzOCwuODU5MzgsLjg1Mjg0LC44NzA2OCwuOTAzOTksLjkwMzk5LC45MDM5OSwuOTAzOTksLjc3ODkyLC43OTc5NSwuOTA4MDcsLjk0OTA4LC45NDkwOCwuOTQ5MDgsLjk0OTA4LC45NDkwOCwuOTQ5MDgsLjg1ODg3LC43NDAxMiwuODgzMjMsLjg4MzIzLC44ODMyMywuODgzMjMsLjg4NDAxLC44ODQwMSwuODg0MDEsLjg4NDAxLC44Nzg1LC44NjMzMSwuODYzMzEsLjg2MzMxLC44NjMzMSwuODYzMzEsLjg2MzMxLC45MDc0NywuODkwNDksLjg2MzMxLC44NjMzMSwuODYzMzEsLjg2MzMxLC44NDU0OCwuODY0MTEsLjg0NTQ4LC44MzkwOCwuOTQ5MDgsLjgzOTA4LC45NDkwOCwuODM5MDgsLjk0OTA4LC43MTgwNSwuNzQwMTIsLjcxODA1LC43NDAxMiwuNzE4MDUsLjc0MDEyLC43MTgwNSwuNzQwMTIsLjg3Mjg5LC43OTUzOCwuODg1MDYsLjkyNzI2LC43MzEzMywuODgzMjMsLjczMTMzLC44ODMyMywuNzMxMzMsLjg4MzIzLC43MzEzMywuODgzMjMsLjczMTMzLC44ODMyMywuODE5MjEsLjg2NDExLC44MTkyMSwuODY0MTEsLjgxOTIxLC44NjQxMSwxLDEsLjg3MzU2LC44NjMzMSwuOTEwNzUsLjg3NzcsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC43NjQ2NywuOTAxNjcsLjU5NTI2LC45MTkxNiwxLDEsLjg2MzA0LC42OTIyNSwuODg0MDEsMSwxLC43MDQyNCwuNzczMTIsLjkxOTI2LC44ODE3NSwuNzA4MjMsLjk0OTAzLC45MDg3MiwuODYzMzEsMSwxLC45MDg3MiwuODYzMzEsLjg2OTA2LC44ODExNiwuODYzMzEsLjg1OTM4LC44NjMzMSwuODU5MzgsLjg2MzMxLC44NTkzOCwuODYzMzEsLjg3NDAyLC44NjU0OSwuNzc5NTgsLjkwNDY0LDEsMSwuNzc5NTgsLjkwNDY0LC42OTc2NiwuNzA4NTIsLjY5NzY2LC43MDg1MiwuNjk3NjYsLjcwODUyLC42OTc2NiwuNzA4NTIsMSwxLC44MTA1NSwuNzU4NDEsLjgxMDU1LDEuMDY0NTIsLjkwMzk5LC44NjMzMSwuOTAzOTksLjg2MzMxLC45MDM5OSwuODYzMzEsLjkwMzk5LC44NjMzMSwuOTAzOTksLjg2MzMxLC45MDM5OSwuODYzMzEsLjk2MDY4LC45NTc5NCwuNzc4OTIsLjg0NTQ4LC43Nzg5MiwuNzgyNTcsLjc5NDkyLC43ODI1NywuNzk0OTIsLjc4MjU3LC43OTQ5MiwuOTI5NywuNTY4OTIsLjgzOTA4LC45NDkwOCwuNzc1MzksLjg1ODg3LC44NzA2OCwuODkwNDksMSwxLC44MTA1NSwxLjA0MTA2LDEuMjA1MjgsMS4yMDUyOCwxLDEuMTU1NDMsLjcwMDg4LC45ODM4NywuOTQ3MjEsMS4zMzQzMSwxLjQ1ODk0LC45NTE2MSwxLjQ4Mzg3LC44MzkwOCwuODAzNTIsLjU3MTE4LC42OTY1LC41NjM0NywuNzkxNzksLjU1ODUzLC44MDM0NiwxLjAyOTg4LC44MzkwOCwuNzc2MiwuNjcxNzQsLjg2MDM2LC43MzEzMywuNzgyNTcsLjg3MzU2LC44NjQ0MSwuOTU5NTgsLjc1NzI3LC44OTAxOSwxLjA0OTI0LC45MDg3MiwuNzQ4ODksLjg1OTM4LC44Nzg5MSwuNzk3OTUsLjc5NTcsLjgxMDU1LC43Nzg5MiwuOTc0NDcsLjgyNTc3LC45NzQ2NiwuODcxNzksLjk1OTU4LC43Nzg5MiwuOTQyNTIsLjk1NjEyLC44NzUzLDEuMDI5ODgsLjkyNzMzLC45NDI1MiwuODc0MTEsLjg0MDIxLC44NzI4LC45NTYxMiwuNzQwODEsLjg3NTMsMS4wMjE4OSwxLjAyOTg4LC44NDgxNCwuODc0NDUsLjkxODIyLC44NDcyMywuODU2NjgsLjg2MzMxLC44MTM0NCwuODc1ODEsLjc2NDIyLC44MjA0NiwuOTYwNTcsLjkyNzMzLC45OTM3NSwuNzgwMjIsLjk1NDUyLC44NjAxNSwxLjAyOTg4LC45MjczMywuODYzMzEsLjkyNzMzLC44NjAxNSwuNzMxMzMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkwNjMxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44ODMyMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODUxNzQsMSwxLDEsMSwxLDEsLjk2MDY4LC45NTc5NCwuOTYwNjgsLjk1Nzk0LC45NjA2OCwuOTU3OTQsLjc3ODkyLC44NDU0OCwxLDEsLjg5NTUyLC45MDUyNywxLC45MDM2MywuOTI3OTQsLjkyNzk0LC45Mjc5NCwuODk4MDcsLjg3MDEyLC44NzAxMiwuODcwMTIsLjg5NTUyLC44OTU1MiwxLjQyMjU5LC43MTA5NCwxLjA2MTUyLDEsMSwxLjAzMzcyLDEuMDMzNzIsLjk3MTcxLDEuNDk1NiwyLjI4MDcsLjkyOTcyLC44MzQwNiwuOTExMzMsLjgzMzI2LC45MTEzMywxLDEsMSwuNzIwMjEsMSwxLjIzMTA4LC44MzQ4OSwuODg1MjUsLjg4NTI1LC44MTQ5OSwuOTA2MTYsMS44MTA1NSwuOTA1MjcsMS44MTA1NSwxLjMxMDcsMS41MzcxMSwuOTQ0MzQsMS4wODY5NiwxLC45NTAxOCwuNzcxOTIsLjg1Mjg0LC45MDc0NywxLjE3NTM0LC42OTgyNSwuOTcxNiwxLjM3MDc3LC45MDc0NywuOTA3NDcsLjg1MzU2LC45MDc0NywuOTA3NDcsMS40NDk0NywuODUyODQsLjg5NDEsLjg5NDEsLjcwNTcyLC44LC43MDU3MiwuNzA1NzIsLjcwNTcyLC43MDU3MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk5ODYyLC45OTg2MiwxLDEsMSwxLDEsMS4wODAwNCwuOTEwMjcsMSwxLDEsLjk5ODYyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDcyNywuOTA3MjcsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdO3QuQ2FsaWJyaUJvbGRJdGFsaWNNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMjIwNyxsaW5lR2FwOi4yMjA3fTt0LkNhbGlicmlJdGFsaWNGYWN0b3JzPVsxLjM4NzcsMSwxLDEsMS4xNzIyMywxLjEyOTMsLjg5NTUyLC45MTEzMywuODAzOTUsMS4wMjI2OSwxLjE1NjAxLC45MTA1NiwuOTEwNTYsMS4yNzk4LC44NTI4NCwuODk4MDcsMSwuOTA4NjEsMS4zOTU0MywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjk2MzA5LC45NjMwOSwuODUyODQsLjg1Mjg0LC44NTI4NCwuODMzMTksLjg4MDcxLC44Njc1LC44MTU1MiwuNzIzNDYsLjg1MTkzLC43MzIwNiwuNzUyMiwuODExMDUsLjg2Mjc1LC45MDY4NSwuNjM3NywuNzc4OTIsLjc1NTkzLDEuMDI2MzgsLjg5MjQ5LC44NDExOCwuNzc0NTIsLjg1Mzc0LC43NTE4NiwuNjc3ODksLjc5Nzc2LC44ODg0NCwuODUwNjYsLjk0MzA5LC43NzgxOCwuNzMwNiwuNzY2NTksMS4xMDM2OSwxLjM4MzEzLDEuMTAzNjksMS4wNjEzOSwuODk1NTIsLjg3MzksLjkyNDUsLjkyNDUsLjgzMjAzLC45MjQ1LC44NTg2NSwxLjA5ODQyLC45MjQ1LC45MjQ1LDEuMDMyOTcsMS4wNzY5MiwuOTA5MTgsMS4wMzI5NywuOTQ5NTksLjkyNDUsLjkyMjc0LC45MjQ1LC45MjQ1LDEuMDI5MzMsLjc3ODMyLDEuMjA1NjIsLjkyNDUsLjg5MTYsLjk4OTg2LC44NjYyMSwuODk0NTMsLjc5MDA0LC45NDE1MiwxLjc3MjU2LC45NDE1MiwuODUyODQsLjk3ODAxLC44OTU1MiwuOTExMzMsLjg5NTUyLC45MTEzMywxLjkxNzI5LC44OTU1MiwxLjE3ODg5LDEuMTMyNTQsMS4xNjM1OSwuOTIwOTgsLjg1Mjg0LC42ODc4NywuNzEzNTMsLjg0NzM3LC45MDc0NywxLjAwODgsMS4wMDQ0LC44NzY4MywxLDEuMDkwOTEsMSwuOTIyMjksLjczOSwxLjE1NjQyLC45MjA5OCwuNzYyODgsLjgwNTA0LC44MDk3MiwuNzU4NTksLjg2NzUsLjg2NzUsLjg2NzUsLjg2NzUsLjg2NzUsLjg2NzUsLjc2MzE4LC43MjM0NiwuNzMyMDYsLjczMjA2LC43MzIwNiwuNzMyMDYsLjkwNjg1LC45MDY4NSwuOTA2ODUsLjkwNjg1LC44NjQ3NywuODkyNDksLjg0MTE4LC44NDExOCwuODQxMTgsLjg0MTE4LC44NDExOCwuODUyODQsLjg0NTU3LC44ODg0NCwuODg4NDQsLjg4ODQ0LC44ODg0NCwuNzMwNiwuNzc0NTIsLjg2MzMxLC45MjQ1LC45MjQ1LC45MjQ1LC45MjQ1LC45MjQ1LC45MjQ1LC44NDg0MywuODMyMDMsLjg1ODY1LC44NTg2NSwuODU4NjUsLjg1ODY1LC44MjYwMSwuODI2MDEsLjgyNjAxLC44MjYwMSwuOTQ0NjksLjkyNDUsLjkyMjc0LC45MjI3NCwuOTIyNzQsLjkyMjc0LC45MjI3NCwuOTA3NDcsLjg2NjUxLC45MjQ1LC45MjQ1LC45MjQ1LC45MjQ1LC44OTQ1MywuOTI0NSwuODk0NTMsLjg2NzUsLjkyNDUsLjg2NzUsLjkyNDUsLjg2NzUsLjkyNDUsLjcyMzQ2LC44MzIwMywuNzIzNDYsLjgzMjAzLC43MjM0NiwuODMyMDMsLjcyMzQ2LC44MzIwMywuODUxOTMsLjg4NzUsLjg2NDc3LC45OTAzNCwuNzMyMDYsLjg1ODY1LC43MzIwNiwuODU4NjUsLjczMjA2LC44NTg2NSwuNzMyMDYsLjg1ODY1LC43MzIwNiwuODU4NjUsLjgxMTA1LC45MjQ1LC44MTEwNSwuOTI0NSwuODExMDUsLjkyNDUsMSwxLC44NjI3NSwuOTI0NSwuOTA4NzIsLjkzNTkxLC45MDY4NSwuODI2MDEsLjkwNjg1LC44MjYwMSwuOTA2ODUsLjgyNjAxLC45MDY4NSwxLjAzMjk3LC45MDY4NSwuODI2MDEsLjc3ODk2LDEuMDU2MTEsLjYzNzcsMS4wNzY5MiwxLDEsLjkwOTE4LC43NTU5MywxLjAzMjk3LDEsMSwuNzYwMzIsLjkzNzUsLjk4MTU2LC45MzQwNywuNzcyNjEsMS4xMTQyOSwuODkyNDksLjkyNDUsMSwxLC44OTI0OSwuOTI0NSwuOTI1MzQsLjg2Njk4LC45MjQ1LC44NDExOCwuOTIyNzQsLjg0MTE4LC45MjI3NCwuODQxMTgsLjkyMjc0LC44NjY3LC44NjI5MSwuNzUxODYsMS4wMjkzMywxLDEsLjc1MTg2LDEuMDI5MzMsLjY3Nzg5LC43NzgzMiwuNjc3ODksLjc3ODMyLC42Nzc4OSwuNzc4MzIsLjY3Nzg5LC43NzgzMiwxLDEsLjc5Nzc2LC45NzY1NSwuNzk3NzYsMS4yMzAyMywuODg4NDQsLjkyNDUsLjg4ODQ0LC45MjQ1LC44ODg0NCwuOTI0NSwuODg4NDQsLjkyNDUsLjg4ODQ0LC45MjQ1LC44ODg0NCwuOTI0NSwuOTQzMDksLjk4OTg2LC43MzA2LC44OTQ1MywuNzMwNiwuNzY2NTksLjc5MDA0LC43NjY1OSwuNzkwMDQsLjc2NjU5LC43OTAwNCwxLjA5MjMxLC41NDg3MywuODY3NSwuOTI0NSwuNzYzMTgsLjg0ODQzLC44NDU1NywuODY2NTEsMSwxLC43OTc3NiwxLjIwNTYyLDEuMTg2MjIsMS4xODYyMiwxLDEuMTQzNywuNjcwMDksLjk2MzM0LC45MzY5NSwxLjM1MTkxLDEuNDA5MDksLjk1MTYxLDEuNDgzODcsLjg2NzUsLjkwODYxLC42MTkyLC43MzYzLC42NDgyNCwuODI0MTEsLjU2MzIxLC44NTY5NiwxLjIzNTE2LC44Njc1LC44MTU1MiwuNzI4NiwuODQxMzQsLjczMjA2LC43NjY1OSwuODYyNzUsLjg0MzY5LC45MDY4NSwuNzc4OTIsLjg1ODcxLDEuMDI2MzgsLjg5MjQ5LC43NTgyOCwuODQxMTgsLjg1OTg0LC43NzQ1MiwuNzY0NjYsLjc5Nzc2LC43MzA2LC45MDc4MiwuNzc4MTgsLjkwMywuODcyOTEsLjkwNjg1LC43MzA2LC45OTA1OCwxLjAzNjY3LC45NDYzNSwxLjIzNTE2LC45ODQ5LC45OTA1OCwuOTIzOTMsLjg5MTYsLjk0MiwxLjAzNjY3LC43NTAyNiwuOTQ2MzUsMS4wMjk3LDEuMjM1MTYsLjkwOTE4LC45NDA0OCwuOTgyMTcsLjg5NzQ2LC44NDE1MywuOTIyNzQsLjgyNTA3LC44ODgzMiwuODQ0MzgsLjg4MTc4LDEuMDM1MjUsLjk4NDksMS4wMDIyNSwuNzgwODYsLjk3MjQ4LC44OTQwNCwxLjIzNTE2LC45ODQ5LC45MjI3NCwuOTg0OSwuODk0MDQsLjczMjA2LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44OTY5MywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODU4NjUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkwOTMzLDEsMSwxLDEsMSwxLC45NDMwOSwuOTg5ODYsLjk0MzA5LC45ODk4NiwuOTQzMDksLjk4OTg2LC43MzA2LC44OTQ1MywxLDEsLjg5NTUyLC45MDUyNywxLC45MDE4NiwxLjEyMzA4LDEuMTIzMDgsMS4xMjMwOCwxLjEyMzA4LDEuMjU2NiwxLjI1NjYsMS4yNTY2LC44OTU1MiwuODk1NTIsMS40MjI1OSwuNjg5OTQsMS4wMzgwOSwxLDEsMS4wMTc2LDEuMDE3NiwxLjExNTIzLDEuNDk1NiwyLjAxNDYyLC45Nzg1OCwuODI2MTYsLjkxMTMzLC44MzQzNywuOTExMzMsMSwxLDEsLjcwNTA4LDEsMS4yMzEwOCwuNzk4MDEsLjg0NDI2LC44NDQyNiwuNzc0LC45MDU3MiwxLjgxMDU1LC45MDc0OSwxLjgxMDU1LDEuMjg4MDksMS41NTQ2OSwuOTQ0MzQsMS4wNzgwNiwxLC45NzA5NCwuNzU4OSwuODUyODQsLjkwNzQ3LDEuMTk2NTgsLjY5ODI1LC45NzYyMiwxLjMzNTEyLC45MDc0NywuOTA3NDcsLjg1Mjg0LC45MDc0NywuOTA3NDcsMS40NDk0NywuODUyODQsLjg5NDEsLjg5NDEsLjcwNTcyLC44LC43MDU3MiwuNzA1NzIsLjcwNTcyLC43MDU3MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk5ODYyLC45OTg2MiwxLDEsMSwxLDEsMS4wMzM2LC45MTAyNywxLDEsMSwuOTk4NjIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wNTg1OSwxLjA1ODU5LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXTt0LkNhbGlicmlJdGFsaWNNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMjIwNyxsaW5lR2FwOi4yMjA3fTt0LkNhbGlicmlSZWd1bGFyRmFjdG9ycz1bMS4zODc3LDEsMSwxLDEuMTcyMjMsMS4xMjkzLC44OTU1MiwuOTExMzMsLjgwMzk1LDEuMDIyNjksMS4xNTYwMSwuOTEwNTYsLjkxMDU2LDEuMjc5OCwuODUyODQsLjg5ODA3LDEsLjkwODYxLDEuMzkwMTYsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45NjMwOSwuOTYzMDksLjg1Mjg0LC44NTI4NCwuODUyODQsLjgzMzE5LC44ODA3MSwuODY3NSwuODE1NTIsLjczODM0LC44NTE5MywuNzMyMDYsLjc1MjIsLjgxMTA1LC44NjI3NSwuOTA2ODUsLjYzNzcsLjc3ODkyLC43NTU5MywxLjAyNjM4LC44OTM4NSwuODUxMjIsLjc3NDUyLC44NjUwMywuNzUxODYsLjY4ODg3LC43OTc3NiwuODg4NDQsLjg1MDY2LC45NDI1OCwuNzc4MTgsLjczMDYsLjc2NjU5LDEuMTAzNjksMS4zOTAxNiwxLjEwMzY5LDEuMDYxMzksLjg5NTUyLC44NzM5LC44NjEyOCwuOTQ0NjksLjg0NTcsLjk0NDY5LC44OTQ2NCwxLjA5ODQyLC44NDYzNiwuOTQ0NjksMS4wMzI5NywxLjA3NjkyLC45MDkxOCwxLjAzMjk3LC45NTg5NywuOTQ0NjksLjk0ODIsLjk0NDY5LC45NDQ2OSwxLjA0NjkyLC43ODIyMywxLjIwNTYyLC45NDQ2OSwuOTAzMzIsLjk4OTg2LC44NjYyMSwuOTA1MjcsLjc5MDA0LC45NDE1MiwxLjc3MjU2LC45NDE1MiwuODUyODQsLjk3ODAxLC44OTU1MiwuOTExMzMsLjg5NTUyLC45MTEzMywxLjkxNzI5LC44OTU1MiwxLjE3ODg5LDEuMTMyNTQsMS4wODcwNywuOTIwOTgsLjg1Mjg0LC42ODc4NywuNzEzNTMsLjg0NzM3LC45MDc0NywxLjAwODgsMS4wMDQ0LC44NzY4MywxLDEuMDkwOTEsMSwuOTIyMjksLjczOSwxLjE1NjQyLC45MjA5OCwuNzYyODgsLjgwNTA0LC44MDk3MiwuNzU4NTksLjg2NzUsLjg2NzUsLjg2NzUsLjg2NzUsLjg2NzUsLjg2NzUsLjc2MzE4LC43MzgzNCwuNzMyMDYsLjczMjA2LC43MzIwNiwuNzMyMDYsLjkwNjg1LC45MDY4NSwuOTA2ODUsLjkwNjg1LC44NjQ3NywuODkzODUsLjg1MTIyLC44NTEyMiwuODUxMjIsLjg1MTIyLC44NTEyMiwuODUyODQsLjg1MzExLC44ODg0NCwuODg4NDQsLjg4ODQ0LC44ODg0NCwuNzMwNiwuNzc0NTIsLjg2MzMxLC44NjEyOCwuODYxMjgsLjg2MTI4LC44NjEyOCwuODYxMjgsLjg2MTI4LC44NjkzLC44NDU3LC44OTQ2NCwuODk0NjQsLjg5NDY0LC44OTQ2NCwuODI2MDEsLjgyNjAxLC44MjYwMSwuODI2MDEsLjk0NDY5LC45NDQ2OSwuOTQ4MiwuOTQ4MiwuOTQ4MiwuOTQ4MiwuOTQ4MiwuOTA3NDcsLjg2NjUxLC45NDQ2OSwuOTQ0NjksLjk0NDY5LC45NDQ2OSwuOTA1MjcsLjk0NDY5LC45MDUyNywuODY3NSwuODYxMjgsLjg2NzUsLjg2MTI4LC44Njc1LC44NjEyOCwuNzM4MzQsLjg0NTcsLjczODM0LC44NDU3LC43MzgzNCwuODQ1NywuNzM4MzQsLjg0NTcsLjg1MTkzLC45MjQ1NCwuODY0NzcsLjk5MjEsLjczMjA2LC44OTQ2NCwuNzMyMDYsLjg5NDY0LC43MzIwNiwuODk0NjQsLjczMjA2LC44OTQ2NCwuNzMyMDYsLjg5NDY0LC44MTEwNSwuODQ2MzYsLjgxMTA1LC44NDYzNiwuODExMDUsLjg0NjM2LDEsMSwuODYyNzUsLjk0NDY5LC45MDg3MiwuOTU3ODYsLjkwNjg1LC44MjYwMSwuOTA2ODUsLjgyNjAxLC45MDY4NSwuODI2MDEsLjkwNjg1LDEuMDMyOTcsLjkwNjg1LC44MjYwMSwuNzc3NDEsMS4wNTYxMSwuNjM3NywxLjA3NjkyLDEsMSwuOTA5MTgsLjc1NTkzLDEuMDMyOTcsMSwxLC43NjAzMiwuOTA0NTIsLjk4MTU2LDEuMTE4NDIsLjc3MjYxLDEuMTE0MjksLjg5Mzg1LC45NDQ2OSwxLDEsLjg5Mzg1LC45NDQ2OSwuOTU4NzcsLjg2OTAxLC45NDQ2OSwuODUxMjIsLjk0ODIsLjg1MTIyLC45NDgyLC44NTEyMiwuOTQ4MiwuODY2NywuOTAwMTYsLjc1MTg2LDEuMDQ2OTIsMSwxLC43NTE4NiwxLjA0NjkyLC42ODg4NywuNzgyMjMsLjY4ODg3LC43ODIyMywuNjg4ODcsLjc4MjIzLC42ODg4NywuNzgyMjMsMSwxLC43OTc3NiwuOTIxODgsLjc5Nzc2LDEuMjMwMjMsLjg4ODQ0LC45NDQ2OSwuODg4NDQsLjk0NDY5LC44ODg0NCwuOTQ0NjksLjg4ODQ0LC45NDQ2OSwuODg4NDQsLjk0NDY5LC44ODg0NCwuOTQ0NjksLjk0MjU4LC45ODk4NiwuNzMwNiwuOTA1MjcsLjczMDYsLjc2NjU5LC43OTAwNCwuNzY2NTksLjc5MDA0LC43NjY1OSwuNzkwMDQsMS4wOTIzMSwuNTQ4NzMsLjg2NzUsLjg2MTI4LC43NjMxOCwuODY5MywuODUzMTEsLjg2NjUxLDEsMSwuNzk3NzYsMS4yMDU2MiwxLjE4NjIyLDEuMTg2MjIsMSwxLjE0MzcsLjY3NzQyLC45NjMzNCwuOTM2OTUsMS4zNTE5MSwxLjQwOTA5LC45NTE2MSwxLjQ4Mzg3LC44NjY4NiwuOTA4NjEsLjYyMjY3LC43NDM1OSwuNjU2NDksLjg1NDk4LC41Njk2MywuODgyNTQsMS4yMzUxNiwuODY3NSwuODE1NTIsLjc1NDQzLC44NDUwMywuNzMyMDYsLjc2NjU5LC44NjI3NSwuODUxMjIsLjkwNjg1LC43Nzg5MiwuODU3NDYsMS4wMjYzOCwuODkzODUsLjc1NjU3LC44NTEyMiwuODYyNzUsLjc3NDUyLC43NDE3MSwuNzk3NzYsLjczMDYsLjk1MTY1LC43NzgxOCwuODk3NzIsLjg4ODMxLC45MDY4NSwuNzMwNiwuOTgxNDIsMS4wMjE5MSwuOTY1NzYsMS4yMzUxNiwuOTkwMTgsLjk4MTQyLC45MjM2LC44OTI1OCwuOTQwMzUsMS4wMjE5MSwuNzg4NDgsLjk2NTc2LC45NTYxLDEuMjM1MTYsLjkwOTE4LC45MjU3OCwuOTU0MjQsLjg5NzQ2LC44Mzk2OSwuOTQ4MiwuODAxMTMsLjg5NDQyLC44NTIwOCwuODYxNTUsLjk4MDIyLC45OTAxOCwxLjAwNDUyLC44MTIwOSwuOTkyNDcsLjg5MTgxLDEuMjM1MTYsLjk5MDE4LC45NDgyLC45OTAxOCwuODkxODEsLjczMjA2LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44ODg0NCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODk0NjQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk2NzY2LDEsMSwxLDEsMSwxLC45NDI1OCwuOTg5ODYsLjk0MjU4LC45ODk4NiwuOTQyNTgsLjk4OTg2LC43MzA2LC45MDUyNywxLDEsLjg5NTUyLC45MDUyNywxLC45MDE4NiwxLjEyMzA4LDEuMTIzMDgsMS4xMjMwOCwxLjEyMzA4LDEuMjU2NiwxLjI1NjYsMS4yNTY2LC44OTU1MiwuODk1NTIsMS40MjI1OSwuNjkwNDMsMS4wMzgwOSwxLDEsMS4wMTc2LDEuMDE3NiwxLjExNTIzLDEuNDk1NiwyLjAxNDYyLC45OTMzMSwuODI2MTYsLjkxMTMzLC44NDI4NiwuOTExMzMsMSwxLDEsLjcwNTA4LDEsMS4yMzEwOCwuNzk4MDEsLjg0NDI2LC44NDQyNiwuNzc0LC45MDUyNywxLjgxMDU1LC45MDUyNywxLjgxMDU1LDEuMjg4MDksMS41NTQ2OSwuOTQ0MzQsMS4wNzgwNiwxLC45NzA5NCwuNzU4OSwuODUyODQsLjkwNzQ3LDEuMTk2NTgsLjY5ODI1LC45NzYyMiwxLjMzNTEyLC45MDc0NywuOTA3NDcsLjg1MzU2LC45MDc0NywuOTA3NDcsMS40NDk0NywuODUyODQsLjg5NDEsLjg5NDEsLjcwNTcyLC44LC43MDU3MiwuNzA1NzIsLjcwNTcyLC43MDU3MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk5ODYyLC45OTg2MiwxLDEsMSwxLDEsMS4wMzM2LC45MTAyNywxLDEsMSwuOTk4NjIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wNTg1OSwxLjA1ODU5LDEsMSwxLDEuMDcxODUsLjk5NDEzLC45NjMzNCwxLjA4MDY1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMV07dC5DYWxpYnJpUmVndWxhck1ldHJpY3M9e2xpbmVIZWlnaHQ6MS4yMjA3LGxpbmVHYXA6LjIyMDd9fSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkhlbHZldGljYVJlZ3VsYXJNZXRyaWNzPXQuSGVsdmV0aWNhUmVndWxhckZhY3RvcnM9dC5IZWx2ZXRpY2FJdGFsaWNNZXRyaWNzPXQuSGVsdmV0aWNhSXRhbGljRmFjdG9ycz10LkhlbHZldGljYUJvbGRNZXRyaWNzPXQuSGVsdmV0aWNhQm9sZEl0YWxpY01ldHJpY3M9dC5IZWx2ZXRpY2FCb2xkSXRhbGljRmFjdG9ycz10LkhlbHZldGljYUJvbGRGYWN0b3JzPXZvaWQgMDt0LkhlbHZldGljYUJvbGRGYWN0b3JzPVsuNzYxMTYsMSwxLDEuMDAwNiwuOTk5OTgsLjk5OTc0LC45OTk3MywuOTk5NzMsLjk5OTgyLC45OTk3NywxLjAwMDg3LC45OTk5OCwuOTk5OTgsLjk5OTU5LDEuMDAwMDMsMS4wMDA2LC45OTk5OCwxLjAwMDYsMS4wMDA2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5OTgsMSwxLjAwMDAzLDEuMDAwMDMsMS4wMDAwMywxLjAwMDI2LC45OTk5LC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywxLjAwMDAxLDEuMDAwMjYsMS4wMDAyMiwuOTk5NzcsMS4wMDA2LC45OTk3MywuOTk5NzcsMS4wMDAyNiwuOTk5OTksLjk5OTc3LDEuMDAwMjIsMS4wMDAwMSwxLjAwMDIyLC45OTk3NywxLjAwMDAxLDEuMDAwMjYsLjk5OTc3LDEuMDAwMDEsMS4wMDAxNiwxLjAwMDAxLDEuMDAwMDEsMS4wMDAyNiwuOTk5OTgsMS4wMDA2LC45OTk5OCwxLjAwMDAzLC45OTk3MywuOTk5OTgsLjk5OTczLDEuMDAwMjYsLjk5OTczLDEuMDAwMjYsLjk5OTczLC45OTk5OCwxLjAwMDI2LDEuMDAwMjYsMS4wMDA2LDEuMDAwNiwuOTk5NzMsMS4wMDA2LC45OTk4MiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45OTk1OSwuOTk5NzMsLjk5OTk4LDEuMDAwMjYsLjk5OTczLDEuMDAwMjIsLjk5OTczLC45OTk3MywxLC45OTk1OSwxLjAwMDc3LC45OTk1OSwxLjAwMDAzLC45OTk5OCwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA3NywuOTk5NzMsLjk5OTk4LDEuMDAwMjUsLjk5OTY4LC45OTk3MywxLjAwMDAzLDEuMDAwMjUsLjYwMjk5LDEuMDAwMjQsMS4wNjQwOSwxLDEsLjk5OTk4LDEsLjk5OTczLDEuMDAwNiwuOTk5OTgsMSwuOTk5MzYsLjk5OTczLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMjYsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMSwuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTc3LC45OTk3NywxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAwMywxLjAwMDIyLC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywxLjAwMDAxLDEuMDAwMDEsMS4wMDAyNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5ODIsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjA2NDA5LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsMS4wMzM3NCwuOTk5NzcsMS4wMDAyNiwxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNDIsLjk5OTczLC45OTk3MywxLjAwMDYsLjk5OTc3LC45OTk3MywuOTk5NzMsMS4wMDAyNiwxLjAwMDYsMS4wMDAyNiwxLjAwMDYsMS4wMDAyNiwxLjAzODI4LDEuMDAwMjYsLjk5OTk5LDEuMDAwMjYsMS4wMDA2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTkzLC45OTk4LDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMSwxLjAwMDE2LC45OTk3NywuOTk5NTksLjk5OTc3LC45OTk1OSwuOTk5NzcsLjk5OTU5LDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMjYsLjk5OTk4LDEuMDAwMjYsLjgxMjEsMS4wMDAyNiwuOTk5OTgsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsMS4wMDAyNiwxLDEuMDAwMjYsMSwxLjAwMDI2LDEsMS4wMDA2LC45OTk3MywuOTk5NzcsLjk5OTczLDEsLjk5OTgyLDEuMDAwMjIsMS4wMDAyNiwxLjAwMDAxLC45OTk3MywxLjAwMDI2LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsMS4wMDAzNCwuOTk5NzcsMSwuOTk5OTcsMS4wMDAyNiwxLjAwMDc4LDEuMDAwMzYsLjk5OTczLDEuMDAwMTMsMS4wMDA2LC45OTk3NywuOTk5NzcsLjk5OTg4LC44NTE0OCwxLjAwMDAxLDEuMDAwMjYsLjk5OTc3LDEuMDAwMjIsMS4wMDA2LC45OTk3NywxLjAwMDAxLC45OTk5OSwuOTk5NzcsMS4wMDA2OSwxLjAwMDIyLC45OTk3NywxLjAwMDAxLC45OTk4NCwxLjAwMDI2LDEuMDAwMDEsMS4wMDAyNCwxLjAwMDAxLC45OTk5LDEsMS4wMDA2LDEuMDAwMDEsMS4wMDA0MSwuOTk5NjIsMS4wMDAyNiwxLjAwMDYsLjk5OTk1LDEuMDAwNDEsLjk5OTQyLC45OTk3MywuOTk5MjcsMS4wMDA4MiwuOTk5MDIsMS4wMDAyNiwxLjAwMDg3LDEuMDAwNiwxLjAwMDY5LC45OTk3MywuOTk4NjcsLjk5OTczLC45OTkzLDEuMDAwMjYsMS4wMDA0OSwxLjAwMDU2LDEsLjk5OTg4LC45OTkzNSwuOTk5OTUsLjk5OTU0LDEuMDAwNTUsLjk5OTQ1LDEuMDAwMzIsMS4wMDA2LC45OTk5NSwxLjAwMDI2LC45OTk5NSwxLjAwMDMyLDEuMDAwMDEsMS4wMDAwOCwuOTk5NzEsMS4wMDAxOSwuOTk5NCwxLjAwMDAxLDEuMDAwNiwxLjAwMDQ0LC45OTk3MywxLjAwMDIzLDEuMDAwNDcsMSwuOTk5NDIsLjk5NTYxLC45OTk4OSwxLjAwMDM1LC45OTk3NywxLjAwMDM1LC45OTk3NywxLjAwMDE5LC45OTk0NCwxLjAwMDAxLDEuMDAwMjEsLjk5OTI2LDEuMDAwMzUsMS4wMDAzNSwuOTk5NDIsMS4wMDA0OCwuOTk5OTksLjk5OTc3LDEuMDAwMjIsMS4wMDAzNSwxLjAwMDAxLC45OTk3NywxLjAwMDI2LC45OTk4OSwxLjAwMDU3LDEuMDAwMDEsLjk5OTM2LDEuMDAwNTIsMS4wMDAxMiwuOTk5OTYsMS4wMDA0MywxLDEuMDAwMzUsLjk5OTQsLjk5OTc2LDEuMDAwMzUsLjk5OTczLDEuMDAwNTIsMS4wMDA0MSwxLjAwMTE5LDEuMDAwMzcsLjk5OTczLDEuMDAwMDIsLjk5OTg2LDEuMDAwNDEsMS4wMDA0MSwuOTk5MDIsLjk5OTYsMS4wMDAzNCwuOTk5OTksMS4wMDAyNiwuOTk5OTksMS4wMDAyNiwuOTk5NzMsMS4wMDA1MiwuOTk5NzMsMSwuOTk5NzMsMS4wMDA0MSwxLjAwMDc1LC45OTk0LDEuMDAwMywuOTk5OTksMSwxLjAwMDQxLC45OTk1NSwxLC45OTkxNSwuOTk5NzMsLjk5OTczLDEuMDAwMjYsMS4wMDExOSwuOTk5NTUsLjk5OTczLDEuMDAwNiwuOTk5MTEsMS4wMDA2LDEuMDAwMjYsLjk5OTcyLDEuMDAwMjYsLjk5OTAyLDEuMDAwNDEsLjk5OTczLC45OTk5OSwxLDEsMS4wMDAzOCwxLjAwMDUsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMTYsMS4wMDAyMiwxLjAwMDE2LDEuMDAwMjIsMS4wMDAwMSwuOTk5NzMsMSwxLC45OTk3MywxLDEsLjk5OTU1LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLDEsMSwuOTk5NzMsLjk5OTczLC45OTk3MiwxLDEsMS4wMDEwNiwuOTk5OTksLjk5OTk4LC45OTk5OCwuOTk5OTksLjk5OTk4LDEuNjY0NzUsMSwuOTk5NzMsLjk5OTczLDEuMDAwMjMsLjk5OTczLC45OTk3MSwxLjAwMDQ3LDEuMDAwMjMsMSwuOTk5OTEsLjk5OTg0LDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMSwxLDEsMSwxLDEsMSwuOTk5NzIsMSwxLjIwOTg1LDEuMzk3MTMsMS4wMDAwMywxLjAwMDMxLDEuMDAwMTUsMSwuOTk1NjEsMS4wMDAyNywxLjAwMDMxLDEuMDAwMzEsLjk5OTE1LDEuMDAwMzEsMS4wMDAzMSwuOTk5OTksMS4wMDAwMywuOTk5OTksLjk5OTk5LDEuNDExNDQsMS42LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MDU3OSwxLjQwNTc5LDEuMzY2MjUsLjk5OTk5LDEsLjk5ODYxLC45OTg2MSwxLDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTcyLC45OTk5OSwuOTk5OTksLjk5OTk5LC45OTk5OSwxLjQwNDgzLDEsLjk5OTc3LDEuMDAwNTQsMSwxLC45OTk1MywuOTk5NjIsMS4wMDA0MiwuOTk5NSwxLDEsMSwxLDEsMSwxLDEsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LDEsMSwxLDEsMSwxLDEsMSwxLDEsMV07dC5IZWx2ZXRpY2FCb2xkTWV0cmljcz17bGluZUhlaWdodDoxLjIsbGluZUdhcDouMn07dC5IZWx2ZXRpY2FCb2xkSXRhbGljRmFjdG9ycz1bLjc2MTE2LDEsMSwxLjAwMDYsLjk5OTk4LC45OTk3NCwuOTk5NzMsLjk5OTczLC45OTk4MiwuOTk5NzcsMS4wMDA4NywuOTk5OTgsLjk5OTk4LC45OTk1OSwxLjAwMDAzLDEuMDAwNiwuOTk5OTgsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTk4LDEsMS4wMDAwMywxLjAwMDAzLDEuMDAwMDMsMS4wMDAyNiwuOTk5OSwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LDEuMDAwMjIsLjk5OTc3LDEuMDAwNiwuOTk5NzMsLjk5OTc3LDEuMDAwMjYsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwMDEsMS4wMDAyMiwuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDAxLDEuMDAwMTYsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTk4LDEuMDAwNiwuOTk5OTgsMS4wMDAwMywuOTk5NzMsLjk5OTk4LC45OTk3MywxLjAwMDI2LC45OTk3MywxLjAwMDI2LC45OTk3MywuOTk5OTgsMS4wMDAyNiwxLjAwMDI2LDEuMDAwNiwxLjAwMDYsLjk5OTczLDEuMDAwNiwuOTk5ODIsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTk5NTksLjk5OTczLC45OTk5OCwxLjAwMDI2LC45OTk3MywxLjAwMDIyLC45OTk3MywuOTk5NzMsMSwuOTk5NTksMS4wMDA3NywuOTk5NTksMS4wMDAwMywuOTk5OTgsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNzcsLjk5OTczLC45OTk5OCwxLjAwMDI1LC45OTk2OCwuOTk5NzMsMS4wMDAwMywxLjAwMDI1LC42MDI5OSwxLjAwMDI0LDEuMDY0MDksMSwxLC45OTk5OCwxLC45OTk3MywxLjAwMDYsLjk5OTk4LDEsLjk5OTM2LC45OTk3MywxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDI2LC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3NywuOTk5NzcsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMDMsMS4wMDAyMiwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTgyLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wNjQwOSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTczLDEuMDAwMjYsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LDEuMDA0NCwuOTk5NzcsMS4wMDAyNiwxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3MSwuOTk5NzMsLjk5OTczLDEuMDAwNiwuOTk5NzcsLjk5OTczLC45OTk3MywxLjAwMDI2LDEuMDAwNiwxLjAwMDI2LDEuMDAwNiwxLjAwMDI2LDEuMDEwMTEsMS4wMDAyNiwuOTk5OTksMS4wMDAyNiwxLjAwMDYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTMsLjk5OTgsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLDEuMDAwMTYsLjk5OTc3LC45OTk1OSwuOTk5NzcsLjk5OTU5LC45OTk3NywuOTk5NTksMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyNiwuOTk5OTgsMS4wMDAyNiwuODEyMSwxLjAwMDI2LC45OTk5OCwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwxLjAwMDE2LDEuMDAwMjIsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwxLjAwMDI2LDEsMS4wMDAyNiwxLDEuMDAwMjYsMSwxLjAwMDYsLjk5OTczLC45OTk3NywuOTk5NzMsMSwuOTk5ODIsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMDEsLjk5OTczLDEuMDAwMjYsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTc3LDEsMSwxLjAwMDI2LC45OTk2OSwuOTk5NzIsLjk5OTgxLC45OTk4LDEuMDAwNiwuOTk5NzcsLjk5OTc3LDEuMDAwMjIsLjkxMTU1LDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAyMiwxLjAwMDYsLjk5OTc3LDEuMDAwMDEsLjk5OTk5LC45OTk3NywuOTk5NjYsMS4wMDAyMiwxLjAwMDMyLDEuMDAwMDEsLjk5OTQ0LDEuMDAwMjYsMS4wMDAwMSwuOTk5NjgsMS4wMDAwMSwxLjAwMDQ3LDEsMS4wMDA2LDEuMDAwMDEsLjk5OTgxLDEuMDAxMDEsMS4wMDAyNiwxLjAwMDYsLjk5OTQ4LC45OTk4MSwxLjAwMDY0LC45OTk3MywuOTk5NDIsMS4wMDEwMSwxLjAwMDYxLDEuMDAwMjYsMS4wMDA2OSwxLjAwMDYsMS4wMDAxNCwuOTk5NzMsMS4wMTMyMiwuOTk5NzMsMS4wMDA2NSwxLjAwMDI2LDEuMDAwMTIsLjk5OTIzLDEsMS4wMDA2NCwxLjAwMDc2LC45OTk0OCwxLjAwMDU1LDEuMDAwNjMsMS4wMDAwNywuOTk5NDMsMS4wMDA2LC45OTk0OCwxLjAwMDI2LC45OTk0OCwuOTk5NDMsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjksMS4wMDAzOCwxLjAwMDM1LDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTc4LDEuMDAwMDEsMS4wMDA1NywuOTk5ODksLjk5OTY3LC45OTk2NCwuOTk5NjcsLjk5OTc3LC45OTk5OSwuOTk5NzcsMS4wMDAzOCwuOTk5NzcsMS4wMDAwMSwuOTk5NzMsMS4wMDA2NiwuOTk5NjcsLjk5OTY3LDEuMDAwNDEsLjk5OTk4LC45OTk5OSwuOTk5NzcsMS4wMDAyMiwuOTk5NjcsMS4wMDAwMSwuOTk5NzcsMS4wMDAyNiwuOTk5NjQsMS4wMDAzMSwxLjAwMDAxLC45OTk5OSwuOTk5OTksMSwxLjAwMDIzLDEsMSwuOTk5OTksMS4wMDAzNSwxLjAwMDAxLC45OTk5OSwuOTk5NzMsLjk5OTc3LC45OTk5OSwxLjAwMDU4LC45OTk3MywuOTk5NzMsLjk5OTU1LC45OTk1LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDMyLC45OTk4OSwxLjAwMDM0LC45OTk5OSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTk5NzMsLjQ1OTk4LC45OTk3MywxLjAwMDI2LC45OTk3MywxLjAwMDAxLC45OTk5OSwuOTk5ODIsLjk5OTk0LC45OTk5NiwxLDEuMDAwNDIsMS4wMDA0NCwxLjAwMDI5LDEuMDAwMjMsLjk5OTczLC45OTk3MywxLjAwMDI2LC45OTk0OSwxLjAwMDAyLC45OTk3MywxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzUsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMzIsLjk4Njg1LC45OTk3MywxLjAwMDI2LDEsMSwuOTk5NjYsMS4wMDA0NCwxLjAwMDE2LDEuMDAwMjIsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMTYsMS4wMDAyMiwxLjAwMDAxLC45OTk3MywxLDEsLjk5OTczLDEsMSwuOTk5NTUsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEsMSwxLC45OTk3MywuOTk5NzMsLjk5OTcyLDEsMSwxLjAwMTA2LC45OTk5OSwuOTk5OTgsLjk5OTk4LC45OTk5OSwuOTk5OTgsMS42NjQ3NSwxLC45OTk3MywuOTk5NzMsMSwuOTk5NzMsLjk5OTcxLC45OTk3OCwxLDEsLjk5OTkxLC45OTk4NCwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwOTgsMSwxLDEsMS4wMDA0OSwxLDEsLjk5OTcyLDEsMS4yMDk4NSwxLjM5NzEzLDEuMDAwMDMsMS4wMDAzMSwxLjAwMDE1LDEsLjk5NTYxLDEuMDAwMjcsMS4wMDAzMSwxLjAwMDMxLC45OTkxNSwxLjAwMDMxLDEuMDAwMzEsLjk5OTk5LDEuMDAwMDMsLjk5OTk5LC45OTk5OSwxLjQxMTQ0LDEuNiwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDA1NzksMS40MDU3OSwxLjM2NjI1LC45OTk5OSwxLC45OTg2MSwuOTk4NjEsMSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45OTk3MiwuOTk5OTksLjk5OTk5LC45OTk5OSwuOTk5OTksMS40MDQ4MywxLC45OTk3NywxLjAwMDU0LDEsMSwuOTk5NTMsLjk5OTYyLDEuMDAwNDIsLjk5OTUsMSwxLDEsMSwxLDEsMSwxLC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdO3QuSGVsdmV0aWNhQm9sZEl0YWxpY01ldHJpY3M9e2xpbmVIZWlnaHQ6MS4zNSxsaW5lR2FwOi4yfTt0LkhlbHZldGljYUl0YWxpY0ZhY3RvcnM9Wy43NjExNiwxLDEsMS4wMDA2LDEuMDAwNiwxLjAwMDA2LC45OTk3MywuOTk5NzMsLjk5OTgyLDEuMDAwMDEsMS4wMDA0MywuOTk5OTgsLjk5OTk4LC45OTk1OSwxLjAwMDAzLDEuMDAwNiwuOTk5OTgsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA2LDEsMS4wMDAwMywxLjAwMDAzLDEuMDAwMDMsLjk5OTczLC45OTk4NywxLjAwMDAxLDEuMDAwMDEsLjk5OTc3LC45OTk3NywxLjAwMDAxLDEuMDAwMjYsMS4wMDAyMiwuOTk5NzcsMS4wMDA2LDEsMS4wMDAwMSwuOTk5NzMsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwMDEsMS4wMDAyMiwuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDAxLDEuMDAwMTYsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTQ5LC45OTk3MywuOTk5OTgsLjk5OTczLC45OTk3MywxLC45OTk3MywuOTk5NzMsMS4wMDA2LC45OTk3MywuOTk5NzMsLjk5OTI0LC45OTkyNCwxLC45OTkyNCwuOTk5OTksLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk5OCwxLDEuMDAwNiwuOTk5NzMsMSwuOTk5NzcsMSwxLDEsMS4wMDAwNSwxLjAwMDksMS4wMDAwNSwxLjAwMDAzLC45OTk5OCwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA5LC45OTk3MywuOTk5OTgsMS4wMDAyNSwuOTk5NjgsLjk5OTczLDEuMDAwMDMsMS4wMDAyNSwuNjAyOTksMS4wMDAyNCwxLjA2NDA5LDEsMSwuOTk5OTgsMSwuOTk5OCwxLjAwMDYsLjk5OTk4LDEsLjk5OTM2LC45OTk3MywxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDI2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3NywuOTk5NzcsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMDMsMS4wMDAyMiwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTgyLDEsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wNjQwOSwxLjAwMDI2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLC45OTk3MywxLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLjAyODgsLjk5OTc3LC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTkyNCwxLjAwMDYsMS4wMDA2LC45OTk0NiwxLjAwMDM0LDEsLjk5OTI0LDEuMDAwMDEsMSwxLC45OTk3MywuOTk5MjQsLjk5OTczLC45OTkyNCwuOTk5NzMsMS4wNjMxMSwuOTk5NzMsMS4wMDAyNCwuOTk5NzMsLjk5OTI0LC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLDEuMDAwNDEsLjk5OTgsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEsMS4wMDAxNiwuOTk5NzcsLjk5OTk4LC45OTk3NywuOTk5OTgsLjk5OTc3LC45OTk5OCwxLjAwMDAxLDEsMS4wMDAwMSwxLDEuMDAwMDEsMSwxLjAwMDAxLDEsMS4wMDAyNiwxLjAwMDYsMS4wMDAyNiwuODk1NDcsMS4wMDAyNiwxLjAwMDYsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsMS4wMDAxNiwuOTk5NzcsMS4wMDAwMSwxLDEuMDAwMDEsMS4wMDAyNiwxLDEuMDAwMjYsMSwxLjAwMDI2LDEsLjk5OTI0LC45OTk3MywxLjAwMDAxLC45OTk3MywxLC45OTk4MiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAwMSwxLDEuMDAwMjYsMS4wMDA2LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsMS4wMDAwMSwxLDEuMDAwNTQsLjk5OTc3LDEuMDAwODQsMS4wMDAwNywuOTk5NzMsMS4wMDAxMywuOTk5MjQsMS4wMDAwMSwxLjAwMDAxLC45OTk0NSwuOTEyMjEsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDIyLDEuMDAwNiwxLjAwMDAxLDEuMDAwMDEsLjk5OTk5LC45OTk3NywuOTk5MzMsMS4wMDAyMiwxLjAwMDU0LDEuMDAwMDEsMS4wMDA2NSwxLjAwMDI2LDEuMDAwMDEsMS4wMDAxLDEuMDAwMDEsMS4wMDA1MiwxLDEuMDAwNiwxLjAwMDAxLC45OTk0NSwuOTk4OTcsLjk5OTY4LC45OTkyNCwxLjAwMDM2LC45OTk0NSwuOTk5NDksMSwxLjAwMDYsLjk5ODk3LC45OTkxOCwuOTk5NjgsLjk5OTExLC45OTkyNCwxLC45OTk2MiwxLjAxNDg3LDEsMS4wMDA1LC45OTk3MywxLjAwMDEyLDEuMDAwNDMsMSwuOTk5OTUsLjk5OTk0LDEuMDAwMzYsLjk5OTQ3LDEuMDAwMTksMS4wMDA2MywxLjAwMDI1LC45OTkyNCwxLjAwMDM2LC45OTk3MywxLjAwMDM2LDEuMDAwMjUsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjcsMS4wMDAxLDEuMDAwNjgsMS4wMDAwMSwxLjAwMDYsMS4wMDA2LDEsMS4wMDAwOCwuOTk5NTcsLjk5OTcyLC45OTk0LC45OTk1NCwuOTk5NzUsMS4wMDA1MSwxLjAwMDAxLDEuMDAwMTksMS4wMDAwMSwxLjAwMDEsLjk5OTg2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDM4LC45OTk1NCwuOTk5NTQsLjk5OTQsMS4wMDA2NiwuOTk5OTksLjk5OTc3LDEuMDAwMjIsMS4wMDA1NCwxLjAwMDAxLC45OTk3NywxLjAwMDI2LC45OTk3NSwxLjAwMDEsMS4wMDAwMSwuOTk5OTMsLjk5OTUsLjk5OTU1LDEuMDAwMTYsLjk5OTc4LC45OTk3NCwxLjAwMDE5LDEuMDAwMjIsLjk5OTU1LDEuMDAwNTMsLjk5OTczLDEuMDAwODksMS4wMDAwNSwuOTk5NjcsMS4wMDA0OCwuOTk5NzMsMS4wMDAwMiwxLjAwMDM0LC45OTk3MywuOTk5NzMsLjk5OTY0LDEuMDAwMDYsMS4wMDA2NiwuOTk5NDcsLjk5OTczLC45ODg5NCwuOTk5NzMsMSwuNDQ4OTgsMSwuOTk5NDYsMSwxLjAwMDM5LDEuMDAwODIsLjk5OTkxLC45OTk5MSwuOTk5ODUsMS4wMDAyMiwxLjAwMDIzLDEuMDAwNjEsMS4wMDAwNiwuOTk5NjYsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDAxOSwxLjAwMDgsMSwuOTk5MjQsLjk5OTI0LC45OTkyNCwuOTk5ODMsMS4wMDA0NCwuOTk5NzMsLjk5OTY0LC45ODMzMiwxLC45OTk3MywxLDEsLjk5OTYyLC45OTg5NSwxLjAwMDE2LC45OTk3NywxLjAwMDE2LC45OTk3NywxLjAwMDE2LC45OTk3NywxLjAwMDAxLDEsMSwxLC45OTk3MywxLDEsLjk5OTU1LC45OTkyNCwuOTk5MjQsLjk5OTI0LC45OTkyNCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5NzMsLjk5OTczLC45OTk3MiwxLDEsMS4wMDI2NywuOTk5OTksLjk5OTk4LC45OTk5OCwxLC45OTk5OCwxLjY2NDc1LDEsLjk5OTczLC45OTk3MywxLjAwMDIzLC45OTk3MywxLjAwNDIzLC45OTkyNSwuOTk5OTksMSwuOTk5OTEsLjk5OTg0LDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDA0OSwxLDEuMDAyNDUsMSwxLDEsMSwuOTYzMjksMSwxLjIwOTg1LDEuMzk3MTMsMS4wMDAwMywuODI1NCwxLjAwMDE1LDEsMS4wMDAzNSwxLjAwMDI3LDEuMDAwMzEsMS4wMDAzMSwxLjAwMDAzLDEuMDAwMzEsMS4wMDAzMSwuOTk5OTksMS4wMDAwMywuOTk5OTksLjk5OTk5LDEuNDExNDQsMS42LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MDU3OSwxLjQwNTc5LDEuMzY2MjUsLjk5OTk5LDEsLjk5ODYxLC45OTg2MSwxLDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk1MzE3LC45OTk5OSwuOTk5OTksLjk5OTk5LC45OTk5OSwxLjQwNDgzLDEsLjk5OTc3LDEuMDAwNTQsMSwxLC45OTk1MywuOTk5NjIsMS4wMDA0MiwuOTk5NSwxLDEsMSwxLDEsMSwxLDEsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LDEsMSwxLDEsMSwxLDEsMSwxLDEsMV07dC5IZWx2ZXRpY2FJdGFsaWNNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMzUsbGluZUdhcDouMn07dC5IZWx2ZXRpY2FSZWd1bGFyRmFjdG9ycz1bLjc2MTE2LDEsMSwxLjAwMDYsMS4wMDA2LDEuMDAwMDYsLjk5OTczLC45OTk3MywuOTk5ODIsMS4wMDAwMSwxLjAwMDQzLC45OTk5OCwuOTk5OTgsLjk5OTU5LDEuMDAwMDMsMS4wMDA2LC45OTk5OCwxLjAwMDYsMS4wMDA2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDYsMSwxLjAwMDAzLDEuMDAwMDMsMS4wMDAwMywuOTk5NzMsLjk5OTg3LDEuMDAwMDEsMS4wMDAwMSwuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwxLjAwMDIyLC45OTk3NywxLjAwMDYsMSwxLjAwMDAxLC45OTk3MywuOTk5OTksLjk5OTc3LDEuMDAwMjIsMS4wMDAwMSwxLjAwMDIyLC45OTk3NywxLjAwMDAxLDEuMDAwMjYsLjk5OTc3LDEuMDAwMDEsMS4wMDAxNiwxLjAwMDAxLDEuMDAwMDEsMS4wMDAyNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NDksLjk5OTczLC45OTk5OCwuOTk5NzMsLjk5OTczLDEsLjk5OTczLC45OTk3MywxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5MjQsLjk5OTI0LDEsLjk5OTI0LC45OTk5OSwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTk4LDEsMS4wMDA2LC45OTk3MywxLC45OTk3NywxLDEsMSwxLjAwMDA1LDEuMDAwOSwxLjAwMDA1LDEuMDAwMDMsLjk5OTk4LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDksLjk5OTczLC45OTk5OCwxLjAwMDI1LC45OTk2OCwuOTk5NzMsMS4wMDAwMywxLjAwMDI1LC42MDI5OSwxLjAwMDI0LDEuMDY0MDksMSwxLC45OTk5OCwxLC45OTk4LDEuMDAwNiwuOTk5OTgsMSwuOTk5MzYsLjk5OTczLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMjYsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMSwuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTc3LC45OTk3NywxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAwMywxLjAwMDIyLC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywxLjAwMDAxLDEuMDAwMDEsMS4wMDAyNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5ODIsMSwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjA2NDA5LDEuMDAwMjYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEsLjk5OTczLDEsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsLjk5OTc3LDEsLjk5OTc3LDEsLjk5OTc3LDEsLjk5OTc3LDEsLjk5OTc3LDEuMDQ1OTYsLjk5OTc3LC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTkyNCwxLjAwMDYsMS4wMDA2LDEuMDAwMTksMS4wMDAzNCwxLC45OTkyNCwxLjAwMDAxLDEsMSwuOTk5NzMsLjk5OTI0LC45OTk3MywuOTk5MjQsLjk5OTczLDEuMDI1NzIsLjk5OTczLDEuMDAwMDUsLjk5OTczLC45OTkyNCwuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5OTksLjk5OTgsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEsMS4wMDAxNiwuOTk5NzcsLjk5OTk4LC45OTk3NywuOTk5OTgsLjk5OTc3LC45OTk5OCwxLjAwMDAxLDEsMS4wMDAwMSwxLDEuMDAwMDEsMSwxLjAwMDAxLDEsMS4wMDAyNiwxLjAwMDYsMS4wMDAyNiwuODQ1MzMsMS4wMDAyNiwxLjAwMDYsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsMS4wMDAxNiwuOTk5NzcsMS4wMDAwMSwxLDEuMDAwMDEsMS4wMDAyNiwxLDEuMDAwMjYsMSwxLjAwMDI2LDEsLjk5OTI0LC45OTk3MywxLjAwMDAxLC45OTk3MywxLC45OTk4MiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAwMSwxLDEuMDAwMjYsMS4wMDA2LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTI4LDEsLjk5OTc3LDEuMDAwMTMsMS4wMDA1NSwuOTk5NDcsLjk5OTQ1LC45OTk0MSwuOTk5MjQsMS4wMDAwMSwxLjAwMDAxLDEuMDAwNCwuOTE2MjEsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDIyLDEuMDAwNiwxLjAwMDAxLDEuMDAwMDUsLjk5OTk5LC45OTk3NywxLjAwMDE1LDEuMDAwMjIsLjk5OTc3LDEuMDAwMDEsLjk5OTczLDEuMDAwMjYsMS4wMDAwMSwxLjAwMDE5LDEuMDAwMDEsLjk5OTQ2LDEsMS4wMDA2LDEuMDAwMDEsLjk5OTc4LDEuMDAwNDUsLjk5OTczLC45OTkyNCwxLjAwMDIzLC45OTk3OCwuOTk5NjYsMSwxLjAwMDY1LDEuMDAwNDUsMS4wMDAxOSwuOTk5NzMsLjk5OTczLC45OTkyNCwxLDEsLjk2NDk5LDEsMS4wMDA1NSwuOTk5NzMsMS4wMDAwOCwxLjAwMDI3LDEsLjk5OTcsLjk5OTk1LDEuMDAwMjMsLjk5OTMzLDEuMDAwMTksMS4wMDAxNSwxLjAwMDMxLC45OTkyNCwxLjAwMDIzLC45OTk3MywxLjAwMDIzLDEuMDAwMzEsMS4wMDAwMSwuOTk5MjgsMS4wMDAyOSwxLjAwMDkyLDEuMDAwMzUsMS4wMDAwMSwxLjAwMDYsMS4wMDA2LDEsLjk5OTg4LC45OTk3NSwxLDEuMDAwODIsLjk5NTYxLC45OTk2LDEuMDAwMzUsMS4wMDAwMSwuOTk5NjIsMS4wMDAwMSwxLjAwMDkyLC45OTk2NCwxLjAwMDAxLC45OTk2MywuOTk5OTksMS4wMDAzNSwxLjAwMDM1LDEuMDAwODIsLjk5OTYyLC45OTk5OSwuOTk5NzcsMS4wMDAyMiwxLjAwMDM1LDEuMDAwMDEsLjk5OTc3LDEuMDAwMjYsLjk5OTYsLjk5OTY3LDEuMDAwMDEsMS4wMDAzNCwxLjAwMDc0LDEuMDAwNTQsMS4wMDA1MywxLjAwMDYzLC45OTk3MSwuOTk5NjIsMS4wMDAzNSwuOTk5NzUsLjk5OTc3LC45OTk3MywxLjAwMDQzLC45OTk1MywxLjAwMDcsLjk5OTE1LC45OTk3MywxLjAwMDA4LC45OTg5MiwxLjAwMDczLDEuMDAwNzMsMS4wMDExNCwuOTk5MTUsMS4wMDA3MywuOTk5NTUsLjk5OTczLDEuMDAwOTIsLjk5OTczLDEsLjk5OTk4LDEsMS4wMDAzLDEsMS4wMDA0MywxLjAwMDAxLC45OTk2OSwxLjAwMDMsMSwxLjAwMDM1LDEuMDAwMDEsLjk5OTUsMSwxLjAwMDkyLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNywuOTk5NSwxLC45OTkyNCwxLjAwMDYsLjk5OTI0LC45OTk3MiwxLjAwMDYyLC45OTk3MywxLjAwMTE0LDEuMDAwNzMsMSwuOTk5NTUsMSwxLDEuMDAwNDcsLjk5OTY4LDEuMDAwMTYsLjk5OTc3LDEuMDAwMTYsLjk5OTc3LDEuMDAwMTYsLjk5OTc3LDEuMDAwMDEsMSwxLDEsLjk5OTczLDEsMSwuOTk5NTUsLjk5OTI0LC45OTkyNCwuOTk5MjQsLjk5OTI0LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk3MywuOTk5NzMsLjk5OTcyLDEsMSwxLjAwMjY3LC45OTk5OSwuOTk5OTgsLjk5OTk4LDEsLjk5OTk4LDEuNjY0NzUsMSwuOTk5NzMsLjk5OTczLDEuMDAwMjMsLjk5OTczLC45OTk3MSwuOTk5MjUsMS4wMDAyMywxLC45OTk5MSwuOTk5ODQsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLDEsMSwxLDEsMSwxLC45NjMyOSwxLDEuMjA5ODUsMS4zOTcxMywxLjAwMDAzLC44MjU0LDEuMDAwMTUsMSwxLjAwMDM1LDEuMDAwMjcsMS4wMDAzMSwxLjAwMDMxLC45OTkxNSwxLjAwMDMxLDEuMDAwMzEsLjk5OTk5LDEuMDAwMDMsLjk5OTk5LC45OTk5OSwxLjQxMTQ0LDEuNiwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDA1NzksMS40MDU3OSwxLjM2NjI1LC45OTk5OSwxLC45OTg2MSwuOTk4NjEsMSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45NTMxNywuOTk5OTksLjk5OTk5LC45OTk5OSwuOTk5OTksMS40MDQ4MywxLC45OTk3NywxLjAwMDU0LDEsMSwuOTk5NTMsLjk5OTYyLDEuMDAwNDIsLjk5OTUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXTt0LkhlbHZldGljYVJlZ3VsYXJNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMixsaW5lR2FwOi4yfX0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHM9dC5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJNYXBwaW5nPXQuTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHM9dC5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmc9dC5MaWJlcmF0aW9uU2Fuc0JvbGRXaWR0aHM9dC5MaWJlcmF0aW9uU2Fuc0JvbGRNYXBwaW5nPXQuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljV2lkdGhzPXQuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZz12b2lkIDA7dC5MaWJlcmF0aW9uU2Fuc0JvbGRXaWR0aHM9WzM2NSwwLDMzMywyNzgsMzMzLDQ3NCw1NTYsNTU2LDg4OSw3MjIsMjM4LDMzMywzMzMsMzg5LDU4NCwyNzgsMzMzLDI3OCwyNzgsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDMzMywzMzMsNTg0LDU4NCw1ODQsNjExLDk3NSw3MjIsNzIyLDcyMiw3MjIsNjY3LDYxMSw3NzgsNzIyLDI3OCw1NTYsNzIyLDYxMSw4MzMsNzIyLDc3OCw2NjcsNzc4LDcyMiw2NjcsNjExLDcyMiw2NjcsOTQ0LDY2Nyw2NjcsNjExLDMzMywyNzgsMzMzLDU4NCw1NTYsMzMzLDU1Niw2MTEsNTU2LDYxMSw1NTYsMzMzLDYxMSw2MTEsMjc4LDI3OCw1NTYsMjc4LDg4OSw2MTEsNjExLDYxMSw2MTEsMzg5LDU1NiwzMzMsNjExLDU1Niw3NzgsNTU2LDU1Niw1MDAsMzg5LDI4MCwzODksNTg0LDMzMyw1NTYsNTU2LDU1Niw1NTYsMjgwLDU1NiwzMzMsNzM3LDM3MCw1NTYsNTg0LDczNyw1NTIsNDAwLDU0OSwzMzMsMzMzLDMzMyw1NzYsNTU2LDI3OCwzMzMsMzMzLDM2NSw1NTYsODM0LDgzNCw4MzQsNjExLDcyMiw3MjIsNzIyLDcyMiw3MjIsNzIyLDFlMyw3MjIsNjY3LDY2Nyw2NjcsNjY3LDI3OCwyNzgsMjc4LDI3OCw3MjIsNzIyLDc3OCw3NzgsNzc4LDc3OCw3NzgsNTg0LDc3OCw3MjIsNzIyLDcyMiw3MjIsNjY3LDY2Nyw2MTEsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsODg5LDU1Niw1NTYsNTU2LDU1Niw1NTYsMjc4LDI3OCwyNzgsMjc4LDYxMSw2MTEsNjExLDYxMSw2MTEsNjExLDYxMSw1NDksNjExLDYxMSw2MTEsNjExLDYxMSw1NTYsNjExLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw3MTksNzIyLDYxMSw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNzc4LDYxMSw3NzgsNjExLDc3OCw2MTEsNzc4LDYxMSw3MjIsNjExLDcyMiw2MTEsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDc4NSw1NTYsNTU2LDI3OCw3MjIsNTU2LDU1Niw2MTEsMjc4LDYxMSwyNzgsNjExLDM4NSw2MTEsNDc5LDYxMSwyNzgsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzA4LDcyMyw2MTEsNzc4LDYxMSw3NzgsNjExLDc3OCw2MTEsMWUzLDk0NCw3MjIsMzg5LDcyMiwzODksNzIyLDM4OSw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDYxMSwzMzMsNjExLDQ3OSw2MTEsMzMzLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDk0NCw3NzgsNjY3LDU1Niw2NjcsNjExLDUwMCw2MTEsNTAwLDYxMSw1MDAsMjc4LDU1Niw3MjIsNTU2LDFlMyw4ODksNzc4LDYxMSw2NjcsNTU2LDYxMSwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDQ2NSw3MjIsMzMzLDg1Myw5MDYsNDc0LDgyNSw5MjcsODM4LDI3OCw3MjIsNzIyLDYwMSw3MTksNjY3LDYxMSw3MjIsNzc4LDI3OCw3MjIsNjY3LDgzMyw3MjIsNjQ0LDc3OCw3MjIsNjY3LDYwMCw2MTEsNjY3LDgyMSw2NjcsODA5LDgwMiwyNzgsNjY3LDYxNSw0NTEsNjExLDI3OCw1ODIsNjE1LDYxMCw1NTYsNjA2LDQ3NSw0NjAsNjExLDU0MSwyNzgsNTU4LDU1Niw2MTIsNTU2LDQ0NSw2MTEsNzY2LDYxOSw1MjAsNjg0LDQ0Niw1ODIsNzE1LDU3Niw3NTMsODQ1LDI3OCw1ODIsNjExLDU4Miw4NDUsNjY3LDY2OSw4ODUsNTY3LDcxMSw2NjcsMjc4LDI3Niw1NTYsMTA5NCwxMDYyLDg3NSw2MTAsNzIyLDYyMiw3MTksNzIyLDcxOSw3MjIsNTY3LDcxMiw2NjcsOTA0LDYyNiw3MTksNzE5LDYxMCw3MDIsODMzLDcyMiw3NzgsNzE5LDY2Nyw3MjIsNjExLDYyMiw4NTQsNjY3LDczMCw3MDMsMTAwNSwxMDE5LDg3MCw5NzksNzE5LDcxMSwxMDMxLDcxOSw1NTYsNjE4LDYxNSw0MTcsNjM1LDU1Niw3MDksNDk3LDYxNSw2MTUsNTAwLDYzNSw3NDAsNjA0LDYxMSw2MDQsNjExLDU1Niw0OTAsNTU2LDg3NSw1NTYsNjE1LDU4MSw4MzMsODQ0LDcyOSw4NTQsNjE1LDU1Miw4NTQsNTgzLDU1Niw1NTYsNjExLDQxNyw1NTIsNTU2LDI3OCwyODEsMjc4LDk2OSw5MDYsNjExLDUwMCw2MTUsNTU2LDYwNCw3NzgsNjExLDQ4Nyw0NDcsOTQ0LDc3OCw5NDQsNzc4LDk0NCw3NzgsNjY3LDU1NiwzMzMsMzMzLDU1NiwxZTMsMWUzLDU1MiwyNzgsMjc4LDI3OCwyNzgsNTAwLDUwMCw1MDAsNTU2LDU1NiwzNTAsMWUzLDFlMywyNDAsNDc5LDMzMywzMzMsNjA0LDMzMywxNjcsMzk2LDU1Niw1NTYsMTA5NCw1NTYsODg1LDQ4OSwxMTE1LDFlMyw3NjgsNjAwLDgzNCw4MzQsODM0LDgzNCwxZTMsNTAwLDFlMyw1MDAsMWUzLDUwMCw1MDAsNDk0LDYxMiw4MjMsNzEzLDU4NCw1NDksNzEzLDk3OSw3MjIsMjc0LDU0OSw1NDksNTgzLDU0OSw1NDksNjA0LDU4NCw2MDQsNjA0LDcwOCw2MjUsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzI5LDYwNCw2MDQsMzU0LDM1NCwxZTMsOTkwLDk5MCw5OTAsOTkwLDQ5NCw2MDQsNjA0LDYwNCw2MDQsMzU0LDEwMjEsMTA1Miw5MTcsNzUwLDc1MCw1MzEsNjU2LDU5NCw1MTAsNTAwLDc1MCw3NTAsNjExLDYxMSwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDIyMiwyMjIsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzM107dC5MaWJlcmF0aW9uU2Fuc0JvbGRNYXBwaW5nPVstMSwtMSwtMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5Niw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMjEsMTIyLDEyMywxMjQsMTI1LDEyNiwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjA4LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyNDAsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDI1NCwyNTUsMjU2LDI1NywyNTgsMjU5LDI2MCwyNjEsMjYyLDI2MywyNjQsMjY1LDI2NiwyNjcsMjY4LDI2OSwyNzAsMjcxLDI3MiwyNzMsMjc0LDI3NSwyNzYsMjc3LDI3OCwyNzksMjgwLDI4MSwyODIsMjgzLDI4NCwyODUsMjg2LDI4NywyODgsMjg5LDI5MCwyOTEsMjkyLDI5MywyOTQsMjk1LDI5NiwyOTcsMjk4LDI5OSwzMDAsMzAxLDMwMiwzMDMsMzA0LDMwNSwzMDYsMzA3LDMwOCwzMDksMzEwLDMxMSwzMTIsMzEzLDMxNCwzMTUsMzE2LDMxNywzMTgsMzE5LDMyMCwzMjEsMzIyLDMyMywzMjQsMzI1LDMyNiwzMjcsMzI4LDMyOSwzMzAsMzMxLDMzMiwzMzMsMzM0LDMzNSwzMzYsMzM3LDMzOCwzMzksMzQwLDM0MSwzNDIsMzQzLDM0NCwzNDUsMzQ2LDM0NywzNDgsMzQ5LDM1MCwzNTEsMzUyLDM1MywzNTQsMzU1LDM1NiwzNTcsMzU4LDM1OSwzNjAsMzYxLDM2MiwzNjMsMzY0LDM2NSwzNjYsMzY3LDM2OCwzNjksMzcwLDM3MSwzNzIsMzczLDM3NCwzNzUsMzc2LDM3NywzNzgsMzc5LDM4MCwzODEsMzgyLDM4Myw0MDIsNTA2LDUwNyw1MDgsNTA5LDUxMCw1MTEsNTM2LDUzNyw1MzgsNTM5LDcxMCw3MTEsNzEzLDcyOCw3MjksNzMwLDczMSw3MzIsNzMzLDkwMCw5MDEsOTAyLDkwMyw5MDQsOTA1LDkwNiw5MDgsOTEwLDkxMSw5MTIsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTM4LDkzOSw5NDAsOTQxLDk0Miw5NDMsOTQ0LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYyLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSw5NzAsOTcxLDk3Miw5NzMsOTc0LDEwMjQsMTAyNSwxMDI2LDEwMjcsMTAyOCwxMDI5LDEwMzAsMTAzMSwxMDMyLDEwMzMsMTAzNCwxMDM1LDEwMzYsMTAzNywxMDM4LDEwMzksMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMywxMTA0LDExMDUsMTEwNiwxMTA3LDExMDgsMTEwOSwxMTEwLDExMTEsMTExMiwxMTEzLDExMTQsMTExNSwxMTE2LDExMTcsMTExOCwxMTE5LDExMzgsMTEzOSwxMTY4LDExNjksNzgwOCw3ODA5LDc4MTAsNzgxMSw3ODEyLDc4MTMsNzkyMiw3OTIzLDgyMDgsODIwOSw4MjExLDgyMTIsODIxMyw4MjE1LDgyMTYsODIxNyw4MjE4LDgyMTksODIyMCw4MjIxLDgyMjIsODIyNCw4MjI1LDgyMjYsODIzMCw4MjQwLDgyNDIsODI0Myw4MjQ5LDgyNTAsODI1Miw4MjU0LDgyNjAsODMxOSw4MzU1LDgzNTYsODM1OSw4MzY0LDg0NTMsODQ2Nyw4NDcwLDg0ODIsODQ4Niw4NDk0LDg1MzksODU0MCw4NTQxLDg1NDIsODU5Miw4NTkzLDg1OTQsODU5NSw4NTk2LDg1OTcsODYxNiw4NzA2LDg3MTAsODcxOSw4NzIxLDg3MjIsODczMCw4NzM0LDg3MzUsODc0NSw4NzQ3LDg3NzYsODgwMCw4ODAxLDg4MDQsODgwNSw4OTYyLDg5NzYsODk5Miw4OTkzLDk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1MDAsOTUwOCw5NTE2LDk1MjQsOTUzMiw5NTUyLDk1NTMsOTU1NCw5NTU1LDk1NTYsOTU1Nyw5NTU4LDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2Myw5NTY0LDk1NjUsOTU2Niw5NTY3LDk1NjgsOTU2OSw5NTcwLDk1NzEsOTU3Miw5NTczLDk1NzQsOTU3NSw5NTc2LDk1NzcsOTU3OCw5NTc5LDk1ODAsOTYwMCw5NjA0LDk2MDgsOTYxMiw5NjE2LDk2MTcsOTYxOCw5NjE5LDk2MzIsOTYzMyw5NjQyLDk2NDMsOTY0NCw5NjUwLDk2NTgsOTY2MCw5NjY4LDk2NzQsOTY3NSw5Njc5LDk2ODgsOTY4OSw5NzAyLDk3ODYsOTc4Nyw5Nzg4LDk3OTIsOTc5NCw5ODI0LDk4MjcsOTgyOSw5ODMwLDk4MzQsOTgzNSw5ODM2LDYxNDQxLDYxNDQyLDYxNDQ1LC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xXTt0LkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY1dpZHRocz1bMzY1LDAsMzMzLDI3OCwzMzMsNDc0LDU1Niw1NTYsODg5LDcyMiwyMzgsMzMzLDMzMywzODksNTg0LDI3OCwzMzMsMjc4LDI3OCw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsMzMzLDMzMyw1ODQsNTg0LDU4NCw2MTEsOTc1LDcyMiw3MjIsNzIyLDcyMiw2NjcsNjExLDc3OCw3MjIsMjc4LDU1Niw3MjIsNjExLDgzMyw3MjIsNzc4LDY2Nyw3NzgsNzIyLDY2Nyw2MTEsNzIyLDY2Nyw5NDQsNjY3LDY2Nyw2MTEsMzMzLDI3OCwzMzMsNTg0LDU1NiwzMzMsNTU2LDYxMSw1NTYsNjExLDU1NiwzMzMsNjExLDYxMSwyNzgsMjc4LDU1NiwyNzgsODg5LDYxMSw2MTEsNjExLDYxMSwzODksNTU2LDMzMyw2MTEsNTU2LDc3OCw1NTYsNTU2LDUwMCwzODksMjgwLDM4OSw1ODQsMzMzLDU1Niw1NTYsNTU2LDU1NiwyODAsNTU2LDMzMyw3MzcsMzcwLDU1Niw1ODQsNzM3LDU1Miw0MDAsNTQ5LDMzMywzMzMsMzMzLDU3Niw1NTYsMjc4LDMzMywzMzMsMzY1LDU1Niw4MzQsODM0LDgzNCw2MTEsNzIyLDcyMiw3MjIsNzIyLDcyMiw3MjIsMWUzLDcyMiw2NjcsNjY3LDY2Nyw2NjcsMjc4LDI3OCwyNzgsMjc4LDcyMiw3MjIsNzc4LDc3OCw3NzgsNzc4LDc3OCw1ODQsNzc4LDcyMiw3MjIsNzIyLDcyMiw2NjcsNjY3LDYxMSw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw4ODksNTU2LDU1Niw1NTYsNTU2LDU1NiwyNzgsMjc4LDI3OCwyNzgsNjExLDYxMSw2MTEsNjExLDYxMSw2MTEsNjExLDU0OSw2MTEsNjExLDYxMSw2MTEsNjExLDU1Niw2MTEsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDc0MCw3MjIsNjExLDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw3NzgsNjExLDc3OCw2MTEsNzc4LDYxMSw3NzgsNjExLDcyMiw2MTEsNzIyLDYxMSwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsNzgyLDU1Niw1NTYsMjc4LDcyMiw1NTYsNTU2LDYxMSwyNzgsNjExLDI3OCw2MTEsMzk2LDYxMSw0NzksNjExLDI3OCw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MDgsNzIzLDYxMSw3NzgsNjExLDc3OCw2MTEsNzc4LDYxMSwxZTMsOTQ0LDcyMiwzODksNzIyLDM4OSw3MjIsMzg5LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjExLDMzMyw2MTEsNDc5LDYxMSwzMzMsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsOTQ0LDc3OCw2NjcsNTU2LDY2Nyw2MTEsNTAwLDYxMSw1MDAsNjExLDUwMCwyNzgsNTU2LDcyMiw1NTYsMWUzLDg4OSw3NzgsNjExLDY2Nyw1NTYsNjExLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDcyMiwzMzMsODU0LDkwNiw0NzMsODQ0LDkzMCw4NDcsMjc4LDcyMiw3MjIsNjEwLDY3MSw2NjcsNjExLDcyMiw3NzgsMjc4LDcyMiw2NjcsODMzLDcyMiw2NTcsNzc4LDcxOCw2NjcsNTkwLDYxMSw2NjcsODIyLDY2Nyw4MjksNzgxLDI3OCw2NjcsNjIwLDQ3OSw2MTEsMjc4LDU5MSw2MjAsNjIxLDU1Niw2MTAsNDc5LDQ5Miw2MTEsNTU4LDI3OCw1NjYsNTU2LDYwMyw1NTYsNDUwLDYxMSw3MTIsNjA1LDUzMiw2NjQsNDA5LDU5MSw3MDQsNTc4LDc3Myw4MzQsMjc4LDU5MSw2MTEsNTkxLDgzNCw2NjcsNjY3LDg4Niw2MTQsNzE5LDY2NywyNzgsMjc4LDU1NiwxMDk0LDEwNDIsODU0LDYyMiw3MTksNjc3LDcxOSw3MjIsNzA4LDcyMiw2MTQsNzIyLDY2Nyw5MjcsNjQzLDcxOSw3MTksNjE1LDY4Nyw4MzMsNzIyLDc3OCw3MTksNjY3LDcyMiw2MTEsNjc3LDc4MSw2NjcsNzI5LDcwOCw5NzksOTg5LDg1NCwxZTMsNzA4LDcxOSwxMDQyLDcyOSw1NTYsNjE5LDYwNCw1MzQsNjE4LDU1Niw3MzYsNTEwLDYxMSw2MTEsNTA3LDYyMiw3NDAsNjA0LDYxMSw2MTEsNjExLDU1Niw4ODksNTU2LDg4NSw1NTYsNjQ2LDU4Myw4ODksOTM1LDcwNyw4NTQsNTk0LDU1Miw4NjUsNTg5LDU1Niw1NTYsNjExLDQ2OSw1NjMsNTU2LDI3OCwyNzgsMjc4LDk2OSw5MDYsNjExLDUwNyw2MTksNTU2LDYxMSw3NzgsNjExLDU3NSw0NjcsOTQ0LDc3OCw5NDQsNzc4LDk0NCw3NzgsNjY3LDU1NiwzMzMsMzMzLDU1NiwxZTMsMWUzLDU1MiwyNzgsMjc4LDI3OCwyNzgsNTAwLDUwMCw1MDAsNTU2LDU1NiwzNTAsMWUzLDFlMywyNDAsNDc5LDMzMywzMzMsNjA0LDMzMywxNjcsMzk2LDU1Niw1NTYsMTEwNCw1NTYsODg1LDUxNiwxMTQ2LDFlMyw3NjgsNjAwLDgzNCw4MzQsODM0LDgzNCw5OTksNTAwLDFlMyw1MDAsMWUzLDUwMCw1MDAsNDk0LDYxMiw4MjMsNzEzLDU4NCw1NDksNzEzLDk3OSw3MjIsMjc0LDU0OSw1NDksNTgzLDU0OSw1NDksNjA0LDU4NCw2MDQsNjA0LDcwOCw2MjUsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzI5LDYwNCw2MDQsMzU0LDM1NCwxZTMsOTkwLDk5MCw5OTAsOTkwLDQ5NCw2MDQsNjA0LDYwNCw2MDQsMzU0LDEwMjEsMTA1Miw5MTcsNzUwLDc1MCw1MzEsNjU2LDU5NCw1MTAsNTAwLDc1MCw3NTAsNjExLDYxMSwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDIyMiwyMjIsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzM107dC5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nPVstMSwtMSwtMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5Niw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMjEsMTIyLDEyMywxMjQsMTI1LDEyNiwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjA4LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyNDAsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDI1NCwyNTUsMjU2LDI1NywyNTgsMjU5LDI2MCwyNjEsMjYyLDI2MywyNjQsMjY1LDI2NiwyNjcsMjY4LDI2OSwyNzAsMjcxLDI3MiwyNzMsMjc0LDI3NSwyNzYsMjc3LDI3OCwyNzksMjgwLDI4MSwyODIsMjgzLDI4NCwyODUsMjg2LDI4NywyODgsMjg5LDI5MCwyOTEsMjkyLDI5MywyOTQsMjk1LDI5NiwyOTcsMjk4LDI5OSwzMDAsMzAxLDMwMiwzMDMsMzA0LDMwNSwzMDYsMzA3LDMwOCwzMDksMzEwLDMxMSwzMTIsMzEzLDMxNCwzMTUsMzE2LDMxNywzMTgsMzE5LDMyMCwzMjEsMzIyLDMyMywzMjQsMzI1LDMyNiwzMjcsMzI4LDMyOSwzMzAsMzMxLDMzMiwzMzMsMzM0LDMzNSwzMzYsMzM3LDMzOCwzMzksMzQwLDM0MSwzNDIsMzQzLDM0NCwzNDUsMzQ2LDM0NywzNDgsMzQ5LDM1MCwzNTEsMzUyLDM1MywzNTQsMzU1LDM1NiwzNTcsMzU4LDM1OSwzNjAsMzYxLDM2MiwzNjMsMzY0LDM2NSwzNjYsMzY3LDM2OCwzNjksMzcwLDM3MSwzNzIsMzczLDM3NCwzNzUsMzc2LDM3NywzNzgsMzc5LDM4MCwzODEsMzgyLDM4Myw0MDIsNTA2LDUwNyw1MDgsNTA5LDUxMCw1MTEsNTM2LDUzNyw1MzgsNTM5LDcxMCw3MTEsNzEzLDcyOCw3MjksNzMwLDczMSw3MzIsNzMzLDkwMCw5MDEsOTAyLDkwMyw5MDQsOTA1LDkwNiw5MDgsOTEwLDkxMSw5MTIsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTM4LDkzOSw5NDAsOTQxLDk0Miw5NDMsOTQ0LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYyLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSw5NzAsOTcxLDk3Miw5NzMsOTc0LDEwMjQsMTAyNSwxMDI2LDEwMjcsMTAyOCwxMDI5LDEwMzAsMTAzMSwxMDMyLDEwMzMsMTAzNCwxMDM1LDEwMzYsMTAzNywxMDM4LDEwMzksMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMywxMTA0LDExMDUsMTEwNiwxMTA3LDExMDgsMTEwOSwxMTEwLDExMTEsMTExMiwxMTEzLDExMTQsMTExNSwxMTE2LDExMTcsMTExOCwxMTE5LDExMzgsMTEzOSwxMTY4LDExNjksNzgwOCw3ODA5LDc4MTAsNzgxMSw3ODEyLDc4MTMsNzkyMiw3OTIzLDgyMDgsODIwOSw4MjExLDgyMTIsODIxMyw4MjE1LDgyMTYsODIxNyw4MjE4LDgyMTksODIyMCw4MjIxLDgyMjIsODIyNCw4MjI1LDgyMjYsODIzMCw4MjQwLDgyNDIsODI0Myw4MjQ5LDgyNTAsODI1Miw4MjU0LDgyNjAsODMxOSw4MzU1LDgzNTYsODM1OSw4MzY0LDg0NTMsODQ2Nyw4NDcwLDg0ODIsODQ4Niw4NDk0LDg1MzksODU0MCw4NTQxLDg1NDIsODU5Miw4NTkzLDg1OTQsODU5NSw4NTk2LDg1OTcsODYxNiw4NzA2LDg3MTAsODcxOSw4NzIxLDg3MjIsODczMCw4NzM0LDg3MzUsODc0NSw4NzQ3LDg3NzYsODgwMCw4ODAxLDg4MDQsODgwNSw4OTYyLDg5NzYsODk5Miw4OTkzLDk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1MDAsOTUwOCw5NTE2LDk1MjQsOTUzMiw5NTUyLDk1NTMsOTU1NCw5NTU1LDk1NTYsOTU1Nyw5NTU4LDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2Myw5NTY0LDk1NjUsOTU2Niw5NTY3LDk1NjgsOTU2OSw5NTcwLDk1NzEsOTU3Miw5NTczLDk1NzQsOTU3NSw5NTc2LDk1NzcsOTU3OCw5NTc5LDk1ODAsOTYwMCw5NjA0LDk2MDgsOTYxMiw5NjE2LDk2MTcsOTYxOCw5NjE5LDk2MzIsOTYzMyw5NjQyLDk2NDMsOTY0NCw5NjUwLDk2NTgsOTY2MCw5NjY4LDk2NzQsOTY3NSw5Njc5LDk2ODgsOTY4OSw5NzAyLDk3ODYsOTc4Nyw5Nzg4LDk3OTIsOTc5NCw5ODI0LDk4MjcsOTgyOSw5ODMwLDk4MzQsOTgzNSw5ODM2LDYxNDQxLDYxNDQyLDYxNDQ1LC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xXTt0LkxpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzPVszNjUsMCwzMzMsMjc4LDI3OCwzNTUsNTU2LDU1Niw4ODksNjY3LDE5MSwzMzMsMzMzLDM4OSw1ODQsMjc4LDMzMywyNzgsMjc4LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1NiwyNzgsMjc4LDU4NCw1ODQsNTg0LDU1NiwxMDE1LDY2Nyw2NjcsNzIyLDcyMiw2NjcsNjExLDc3OCw3MjIsMjc4LDUwMCw2NjcsNTU2LDgzMyw3MjIsNzc4LDY2Nyw3NzgsNzIyLDY2Nyw2MTEsNzIyLDY2Nyw5NDQsNjY3LDY2Nyw2MTEsMjc4LDI3OCwyNzgsNDY5LDU1NiwzMzMsNTU2LDU1Niw1MDAsNTU2LDU1NiwyNzgsNTU2LDU1NiwyMjIsMjIyLDUwMCwyMjIsODMzLDU1Niw1NTYsNTU2LDU1NiwzMzMsNTAwLDI3OCw1NTYsNTAwLDcyMiw1MDAsNTAwLDUwMCwzMzQsMjYwLDMzNCw1ODQsMzMzLDU1Niw1NTYsNTU2LDU1NiwyNjAsNTU2LDMzMyw3MzcsMzcwLDU1Niw1ODQsNzM3LDU1Miw0MDAsNTQ5LDMzMywzMzMsMzMzLDU3Niw1MzcsMjc4LDMzMywzMzMsMzY1LDU1Niw4MzQsODM0LDgzNCw2MTEsNjY3LDY2Nyw2NjcsNjY3LDY2Nyw2NjcsMWUzLDcyMiw2NjcsNjY3LDY2Nyw2NjcsMjc4LDI3OCwyNzgsMjc4LDcyMiw3MjIsNzc4LDc3OCw3NzgsNzc4LDc3OCw1ODQsNzc4LDcyMiw3MjIsNzIyLDcyMiw2NjcsNjY3LDYxMSw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw4ODksNTAwLDU1Niw1NTYsNTU2LDU1NiwyNzgsMjc4LDI3OCwyNzgsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU0OSw2MTEsNTU2LDU1Niw1NTYsNTU2LDUwMCw1NTYsNTAwLDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDcyMiw1MDAsNzIyLDUwMCw3MjIsNTAwLDcyMiw1MDAsNzIyLDYyNSw3MjIsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw3NzgsNTU2LDc3OCw1NTYsNzc4LDU1Niw3NzgsNTU2LDcyMiw1NTYsNzIyLDU1NiwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjIyLDI3OCwyNzgsNzMzLDQ0NCw1MDAsMjIyLDY2Nyw1MDAsNTAwLDU1NiwyMjIsNTU2LDIyMiw1NTYsMjgxLDU1Niw0MDAsNTU2LDIyMiw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw2MTUsNzIzLDU1Niw3NzgsNTU2LDc3OCw1NTYsNzc4LDU1NiwxZTMsOTQ0LDcyMiwzMzMsNzIyLDMzMyw3MjIsMzMzLDY2Nyw1MDAsNjY3LDUwMCw2NjcsNTAwLDY2Nyw1MDAsNjExLDI3OCw2MTEsMzU0LDYxMSwyNzgsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsOTQ0LDcyMiw2NjcsNTAwLDY2Nyw2MTEsNTAwLDYxMSw1MDAsNjExLDUwMCwyMjIsNTU2LDY2Nyw1NTYsMWUzLDg4OSw3NzgsNjExLDY2Nyw1MDAsNjExLDI3OCwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDY2NywyNzgsNzg5LDg0NiwzODksNzk0LDg2NSw3NzUsMjIyLDY2Nyw2NjcsNTcwLDY3MSw2NjcsNjExLDcyMiw3NzgsMjc4LDY2Nyw2NjcsODMzLDcyMiw2NDgsNzc4LDcyNSw2NjcsNjAwLDYxMSw2NjcsODM3LDY2Nyw4MzEsNzYxLDI3OCw2NjcsNTcwLDQzOSw1NTUsMjIyLDU1MCw1NzAsNTcxLDUwMCw1NTYsNDM5LDQ2Myw1NTUsNTQyLDIyMiw1MDAsNDkyLDU0OCw1MDAsNDQ3LDU1Niw2NzAsNTczLDQ4Niw2MDMsMzc0LDU1MCw2NTIsNTQ2LDcyOCw3NzksMjIyLDU1MCw1NTYsNTUwLDc3OSw2NjcsNjY3LDg0Myw1NDQsNzA4LDY2NywyNzgsMjc4LDUwMCwxMDY2LDk4Miw4NDQsNTg5LDcxNSw2MzksNzI0LDY2Nyw2NTEsNjY3LDU0NCw3MDQsNjY3LDkxNyw2MTQsNzE1LDcxNSw1ODksNjg2LDgzMyw3MjIsNzc4LDcyNSw2NjcsNzIyLDYxMSw2MzksNzk1LDY2Nyw3MjcsNjczLDkyMCw5MjMsODA1LDg4Niw2NTEsNjk0LDEwMjIsNjgyLDU1Niw1NjIsNTIyLDQ5Myw1NTMsNTU2LDY4OCw0NjUsNTU2LDU1Niw0NzIsNTY0LDY4Niw1NTAsNTU2LDU1Niw1NTYsNTAwLDgzMyw1MDAsODM1LDUwMCw1NzIsNTE4LDgzMCw4NTEsNjIxLDczNiw1MjYsNDkyLDc1Miw1MzQsNTU2LDU1Niw1NTYsMzc4LDQ5Niw1MDAsMjIyLDIyMiwyMjIsOTEwLDgyOCw1NTYsNDcyLDU2NSw1MDAsNTU2LDc3OCw1NTYsNDkyLDMzOSw5NDQsNzIyLDk0NCw3MjIsOTQ0LDcyMiw2NjcsNTAwLDMzMywzMzMsNTU2LDFlMywxZTMsNTUyLDIyMiwyMjIsMjIyLDIyMiwzMzMsMzMzLDMzMyw1NTYsNTU2LDM1MCwxZTMsMWUzLDE4OCwzNTQsMzMzLDMzMyw1MDAsMzMzLDE2NywzNjUsNTU2LDU1NiwxMDk0LDU1Niw4ODUsMzIzLDEwODMsMWUzLDc2OCw2MDAsODM0LDgzNCw4MzQsODM0LDFlMyw1MDAsOTk4LDUwMCwxZTMsNTAwLDUwMCw0OTQsNjEyLDgyMyw3MTMsNTg0LDU0OSw3MTMsOTc5LDcxOSwyNzQsNTQ5LDU0OSw1ODQsNTQ5LDU0OSw2MDQsNTg0LDYwNCw2MDQsNzA4LDYyNSw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MjksNjA0LDYwNCwzNTQsMzU0LDFlMyw5OTAsOTkwLDk5MCw5OTAsNDk0LDYwNCw2MDQsNjA0LDYwNCwzNTQsMTAyMSwxMDUyLDkxNyw3NTAsNzUwLDUzMSw2NTYsNTk0LDUxMCw1MDAsNzUwLDc1MCw1MDAsNTAwLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMjIyLDIyMiwyOTQsMjk0LDMyNCwzMjQsMzE2LDMyOCwzOTgsMjg1XTt0LkxpYmVyYXRpb25TYW5zSXRhbGljTWFwcGluZz1bLTEsLTEsLTEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwxMjAsMTIxLDEyMiwxMjMsMTI0LDEyNSwxMjYsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1LDI1NiwyNTcsMjU4LDI1OSwyNjAsMjYxLDI2MiwyNjMsMjY0LDI2NSwyNjYsMjY3LDI2OCwyNjksMjcwLDI3MSwyNzIsMjczLDI3NCwyNzUsMjc2LDI3NywyNzgsMjc5LDI4MCwyODEsMjgyLDI4MywyODQsMjg1LDI4NiwyODcsMjg4LDI4OSwyOTAsMjkxLDI5MiwyOTMsMjk0LDI5NSwyOTYsMjk3LDI5OCwyOTksMzAwLDMwMSwzMDIsMzAzLDMwNCwzMDUsMzA2LDMwNywzMDgsMzA5LDMxMCwzMTEsMzEyLDMxMywzMTQsMzE1LDMxNiwzMTcsMzE4LDMxOSwzMjAsMzIxLDMyMiwzMjMsMzI0LDMyNSwzMjYsMzI3LDMyOCwzMjksMzMwLDMzMSwzMzIsMzMzLDMzNCwzMzUsMzM2LDMzNywzMzgsMzM5LDM0MCwzNDEsMzQyLDM0MywzNDQsMzQ1LDM0NiwzNDcsMzQ4LDM0OSwzNTAsMzUxLDM1MiwzNTMsMzU0LDM1NSwzNTYsMzU3LDM1OCwzNTksMzYwLDM2MSwzNjIsMzYzLDM2NCwzNjUsMzY2LDM2NywzNjgsMzY5LDM3MCwzNzEsMzcyLDM3MywzNzQsMzc1LDM3NiwzNzcsMzc4LDM3OSwzODAsMzgxLDM4MiwzODMsNDAyLDUwNiw1MDcsNTA4LDUwOSw1MTAsNTExLDUzNiw1MzcsNTM4LDUzOSw3MTAsNzExLDcxMyw3MjgsNzI5LDczMCw3MzEsNzMyLDczMyw5MDAsOTAxLDkwMiw5MDMsOTA0LDkwNSw5MDYsOTA4LDkxMCw5MTEsOTEyLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDkzOCw5MzksOTQwLDk0MSw5NDIsOTQzLDk0NCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Miw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksOTcwLDk3MSw5NzIsOTczLDk3NCwxMDI0LDEwMjUsMTAyNiwxMDI3LDEwMjgsMTAyOSwxMDMwLDEwMzEsMTAzMiwxMDMzLDEwMzQsMTAzNSwxMDM2LDEwMzcsMTAzOCwxMDM5LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsMTEwNCwxMTA1LDExMDYsMTEwNywxMTA4LDExMDksMTExMCwxMTExLDExMTIsMTExMywxMTE0LDExMTUsMTExNiwxMTE3LDExMTgsMTExOSwxMTM4LDExMzksMTE2OCwxMTY5LDc4MDgsNzgwOSw3ODEwLDc4MTEsNzgxMiw3ODEzLDc5MjIsNzkyMyw4MjA4LDgyMDksODIxMSw4MjEyLDgyMTMsODIxNSw4MjE2LDgyMTcsODIxOCw4MjE5LDgyMjAsODIyMSw4MjIyLDgyMjQsODIyNSw4MjI2LDgyMzAsODI0MCw4MjQyLDgyNDMsODI0OSw4MjUwLDgyNTIsODI1NCw4MjYwLDgzMTksODM1NSw4MzU2LDgzNTksODM2NCw4NDUzLDg0NjcsODQ3MCw4NDgyLDg0ODYsODQ5NCw4NTM5LDg1NDAsODU0MSw4NTQyLDg1OTIsODU5Myw4NTk0LDg1OTUsODU5Niw4NTk3LDg2MTYsODcwNiw4NzEwLDg3MTksODcyMSw4NzIyLDg3MzAsODczNCw4NzM1LDg3NDUsODc0Nyw4Nzc2LDg4MDAsODgwMSw4ODA0LDg4MDUsODk2Miw4OTc2LDg5OTIsODk5Myw5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTIsOTQ5Niw5NTAwLDk1MDgsOTUxNiw5NTI0LDk1MzIsOTU1Miw5NTUzLDk1NTQsOTU1NSw5NTU2LDk1NTcsOTU1OCw5NTU5LDk1NjAsOTU2MSw5NTYyLDk1NjMsOTU2NCw5NTY1LDk1NjYsOTU2Nyw5NTY4LDk1NjksOTU3MCw5NTcxLDk1NzIsOTU3Myw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsOTU3OSw5NTgwLDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5NjE3LDk2MTgsOTYxOSw5NjMyLDk2MzMsOTY0Miw5NjQzLDk2NDQsOTY1MCw5NjU4LDk2NjAsOTY2OCw5Njc0LDk2NzUsOTY3OSw5Njg4LDk2ODksOTcwMiw5Nzg2LDk3ODcsOTc4OCw5NzkyLDk3OTQsOTgyNCw5ODI3LDk4MjksOTgzMCw5ODM0LDk4MzUsOTgzNiw2MTQ0MSw2MTQ0Miw2MTQ0NSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMV07dC5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHM9WzM2NSwwLDMzMywyNzgsMjc4LDM1NSw1NTYsNTU2LDg4OSw2NjcsMTkxLDMzMywzMzMsMzg5LDU4NCwyNzgsMzMzLDI3OCwyNzgsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDI3OCwyNzgsNTg0LDU4NCw1ODQsNTU2LDEwMTUsNjY3LDY2Nyw3MjIsNzIyLDY2Nyw2MTEsNzc4LDcyMiwyNzgsNTAwLDY2Nyw1NTYsODMzLDcyMiw3NzgsNjY3LDc3OCw3MjIsNjY3LDYxMSw3MjIsNjY3LDk0NCw2NjcsNjY3LDYxMSwyNzgsMjc4LDI3OCw0NjksNTU2LDMzMyw1NTYsNTU2LDUwMCw1NTYsNTU2LDI3OCw1NTYsNTU2LDIyMiwyMjIsNTAwLDIyMiw4MzMsNTU2LDU1Niw1NTYsNTU2LDMzMyw1MDAsMjc4LDU1Niw1MDAsNzIyLDUwMCw1MDAsNTAwLDMzNCwyNjAsMzM0LDU4NCwzMzMsNTU2LDU1Niw1NTYsNTU2LDI2MCw1NTYsMzMzLDczNywzNzAsNTU2LDU4NCw3MzcsNTUyLDQwMCw1NDksMzMzLDMzMywzMzMsNTc2LDUzNywyNzgsMzMzLDMzMywzNjUsNTU2LDgzNCw4MzQsODM0LDYxMSw2NjcsNjY3LDY2Nyw2NjcsNjY3LDY2NywxZTMsNzIyLDY2Nyw2NjcsNjY3LDY2NywyNzgsMjc4LDI3OCwyNzgsNzIyLDcyMiw3NzgsNzc4LDc3OCw3NzgsNzc4LDU4NCw3NzgsNzIyLDcyMiw3MjIsNzIyLDY2Nyw2NjcsNjExLDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDg4OSw1MDAsNTU2LDU1Niw1NTYsNTU2LDI3OCwyNzgsMjc4LDI3OCw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTQ5LDYxMSw1NTYsNTU2LDU1Niw1NTYsNTAwLDU1Niw1MDAsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNzIyLDUwMCw3MjIsNTAwLDcyMiw1MDAsNzIyLDUwMCw3MjIsNjE1LDcyMiw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDc3OCw1NTYsNzc4LDU1Niw3NzgsNTU2LDc3OCw1NTYsNzIyLDU1Niw3MjIsNTU2LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyMjIsMjc4LDI3OCw3MzUsNDQ0LDUwMCwyMjIsNjY3LDUwMCw1MDAsNTU2LDIyMiw1NTYsMjIyLDU1NiwyOTIsNTU2LDMzNCw1NTYsMjIyLDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDYwNCw3MjMsNTU2LDc3OCw1NTYsNzc4LDU1Niw3NzgsNTU2LDFlMyw5NDQsNzIyLDMzMyw3MjIsMzMzLDcyMiwzMzMsNjY3LDUwMCw2NjcsNTAwLDY2Nyw1MDAsNjY3LDUwMCw2MTEsMjc4LDYxMSwzNzUsNjExLDI3OCw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw5NDQsNzIyLDY2Nyw1MDAsNjY3LDYxMSw1MDAsNjExLDUwMCw2MTEsNTAwLDIyMiw1NTYsNjY3LDU1NiwxZTMsODg5LDc3OCw2MTEsNjY3LDUwMCw2MTEsMjc4LDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsNjY3LDI3OCw3ODQsODM4LDM4NCw3NzQsODU1LDc1MiwyMjIsNjY3LDY2Nyw1NTEsNjY4LDY2Nyw2MTEsNzIyLDc3OCwyNzgsNjY3LDY2OCw4MzMsNzIyLDY1MCw3NzgsNzIyLDY2Nyw2MTgsNjExLDY2Nyw3OTgsNjY3LDgzNSw3NDgsMjc4LDY2Nyw1NzgsNDQ2LDU1NiwyMjIsNTQ3LDU3OCw1NzUsNTAwLDU1Nyw0NDYsNDQxLDU1Niw1NTYsMjIyLDUwMCw1MDAsNTc2LDUwMCw0NDgsNTU2LDY5MCw1NjksNDgyLDYxNywzOTUsNTQ3LDY0OCw1MjUsNzEzLDc4MSwyMjIsNTQ3LDU1Niw1NDcsNzgxLDY2Nyw2NjcsODY1LDU0Miw3MTksNjY3LDI3OCwyNzgsNTAwLDEwNTcsMTAxMCw4NTQsNTgzLDcyMiw2MzUsNzE5LDY2Nyw2NTYsNjY3LDU0Miw2NzcsNjY3LDkyMyw2MDQsNzE5LDcxOSw1ODMsNjU2LDgzMyw3MjIsNzc4LDcxOSw2NjcsNzIyLDYxMSw2MzUsNzYwLDY2Nyw3NDAsNjY3LDkxNyw5MzgsNzkyLDg4NSw2NTYsNzE5LDEwMTAsNzIyLDU1Niw1NzMsNTMxLDM2NSw1ODMsNTU2LDY2OSw0NTgsNTU5LDU1OSw0MzgsNTgzLDY4OCw1NTIsNTU2LDU0Miw1NTYsNTAwLDQ1OCw1MDAsODIzLDUwMCw1NzMsNTIxLDgwMiw4MjMsNjI1LDcxOSw1MjEsNTEwLDc1MCw1NDIsNTU2LDU1Niw1NTYsMzY1LDUxMCw1MDAsMjIyLDI3OCwyMjIsOTA2LDgxMiw1NTYsNDM4LDU1OSw1MDAsNTUyLDc3OCw1NTYsNDg5LDQxMSw5NDQsNzIyLDk0NCw3MjIsOTQ0LDcyMiw2NjcsNTAwLDMzMywzMzMsNTU2LDFlMywxZTMsNTUyLDIyMiwyMjIsMjIyLDIyMiwzMzMsMzMzLDMzMyw1NTYsNTU2LDM1MCwxZTMsMWUzLDE4OCwzNTQsMzMzLDMzMyw1MDAsMzMzLDE2NywzNjUsNTU2LDU1NiwxMDk0LDU1Niw4ODUsMzIzLDEwNzMsMWUzLDc2OCw2MDAsODM0LDgzNCw4MzQsODM0LDFlMyw1MDAsMWUzLDUwMCwxZTMsNTAwLDUwMCw0OTQsNjEyLDgyMyw3MTMsNTg0LDU0OSw3MTMsOTc5LDcxOSwyNzQsNTQ5LDU0OSw1ODMsNTQ5LDU0OSw2MDQsNTg0LDYwNCw2MDQsNzA4LDYyNSw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MjksNjA0LDYwNCwzNTQsMzU0LDFlMyw5OTAsOTkwLDk5MCw5OTAsNDk0LDYwNCw2MDQsNjA0LDYwNCwzNTQsMTAyMSwxMDUyLDkxNyw3NTAsNzUwLDUzMSw2NTYsNTk0LDUxMCw1MDAsNzUwLDc1MCw1MDAsNTAwLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMjIyLDIyMiwyOTQsMjk0LDMyNCwzMjQsMzE2LDMyOCwzOTgsMjg1XTt0LkxpYmVyYXRpb25TYW5zUmVndWxhck1hcHBpbmc9Wy0xLC0xLC0xLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwLDEyMSwxMjIsMTIzLDEyNCwxMjUsMTI2LDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcyLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyMDgsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI0MCwyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwyNTMsMjU0LDI1NSwyNTYsMjU3LDI1OCwyNTksMjYwLDI2MSwyNjIsMjYzLDI2NCwyNjUsMjY2LDI2NywyNjgsMjY5LDI3MCwyNzEsMjcyLDI3MywyNzQsMjc1LDI3NiwyNzcsMjc4LDI3OSwyODAsMjgxLDI4MiwyODMsMjg0LDI4NSwyODYsMjg3LDI4OCwyODksMjkwLDI5MSwyOTIsMjkzLDI5NCwyOTUsMjk2LDI5NywyOTgsMjk5LDMwMCwzMDEsMzAyLDMwMywzMDQsMzA1LDMwNiwzMDcsMzA4LDMwOSwzMTAsMzExLDMxMiwzMTMsMzE0LDMxNSwzMTYsMzE3LDMxOCwzMTksMzIwLDMyMSwzMjIsMzIzLDMyNCwzMjUsMzI2LDMyNywzMjgsMzI5LDMzMCwzMzEsMzMyLDMzMywzMzQsMzM1LDMzNiwzMzcsMzM4LDMzOSwzNDAsMzQxLDM0MiwzNDMsMzQ0LDM0NSwzNDYsMzQ3LDM0OCwzNDksMzUwLDM1MSwzNTIsMzUzLDM1NCwzNTUsMzU2LDM1NywzNTgsMzU5LDM2MCwzNjEsMzYyLDM2MywzNjQsMzY1LDM2NiwzNjcsMzY4LDM2OSwzNzAsMzcxLDM3MiwzNzMsMzc0LDM3NSwzNzYsMzc3LDM3OCwzNzksMzgwLDM4MSwzODIsMzgzLDQwMiw1MDYsNTA3LDUwOCw1MDksNTEwLDUxMSw1MzYsNTM3LDUzOCw1MzksNzEwLDcxMSw3MTMsNzI4LDcyOSw3MzAsNzMxLDczMiw3MzMsOTAwLDkwMSw5MDIsOTAzLDkwNCw5MDUsOTA2LDkwOCw5MTAsOTExLDkxMiw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyw5MzgsOTM5LDk0MCw5NDEsOTQyLDk0Myw5NDQsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjIsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDk3MCw5NzEsOTcyLDk3Myw5NzQsMTAyNCwxMDI1LDEwMjYsMTAyNywxMDI4LDEwMjksMTAzMCwxMDMxLDEwMzIsMTAzMywxMDM0LDEwMzUsMTAzNiwxMDM3LDEwMzgsMTAzOSwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDExMDQsMTEwNSwxMTA2LDExMDcsMTEwOCwxMTA5LDExMTAsMTExMSwxMTEyLDExMTMsMTExNCwxMTE1LDExMTYsMTExNywxMTE4LDExMTksMTEzOCwxMTM5LDExNjgsMTE2OSw3ODA4LDc4MDksNzgxMCw3ODExLDc4MTIsNzgxMyw3OTIyLDc5MjMsODIwOCw4MjA5LDgyMTEsODIxMiw4MjEzLDgyMTUsODIxNiw4MjE3LDgyMTgsODIxOSw4MjIwLDgyMjEsODIyMiw4MjI0LDgyMjUsODIyNiw4MjMwLDgyNDAsODI0Miw4MjQzLDgyNDksODI1MCw4MjUyLDgyNTQsODI2MCw4MzE5LDgzNTUsODM1Niw4MzU5LDgzNjQsODQ1Myw4NDY3LDg0NzAsODQ4Miw4NDg2LDg0OTQsODUzOSw4NTQwLDg1NDEsODU0Miw4NTkyLDg1OTMsODU5NCw4NTk1LDg1OTYsODU5Nyw4NjE2LDg3MDYsODcxMCw4NzE5LDg3MjEsODcyMiw4NzMwLDg3MzQsODczNSw4NzQ1LDg3NDcsODc3Niw4ODAwLDg4MDEsODgwNCw4ODA1LDg5NjIsODk3Niw4OTkyLDg5OTMsOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDkyLDk0OTYsOTUwMCw5NTA4LDk1MTYsOTUyNCw5NTMyLDk1NTIsOTU1Myw5NTU0LDk1NTUsOTU1Niw5NTU3LDk1NTgsOTU1OSw5NTYwLDk1NjEsOTU2Miw5NTYzLDk1NjQsOTU2NSw5NTY2LDk1NjcsOTU2OCw5NTY5LDk1NzAsOTU3MSw5NTcyLDk1NzMsOTU3NCw5NTc1LDk1NzYsOTU3Nyw5NTc4LDk1NzksOTU4MCw5NjAwLDk2MDQsOTYwOCw5NjEyLDk2MTYsOTYxNyw5NjE4LDk2MTksOTYzMiw5NjMzLDk2NDIsOTY0Myw5NjQ0LDk2NTAsOTY1OCw5NjYwLDk2NjgsOTY3NCw5Njc1LDk2NzksOTY4OCw5Njg5LDk3MDIsOTc4Niw5Nzg3LDk3ODgsOTc5Miw5Nzk0LDk4MjQsOTgyNyw5ODI5LDk4MzAsOTgzNCw5ODM1LDk4MzYsNjE0NDEsNjE0NDIsNjE0NDUsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTFdfSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0Lk15cmlhZFByb1JlZ3VsYXJNZXRyaWNzPXQuTXlyaWFkUHJvUmVndWxhckZhY3RvcnM9dC5NeXJpYWRQcm9JdGFsaWNNZXRyaWNzPXQuTXlyaWFkUHJvSXRhbGljRmFjdG9ycz10Lk15cmlhZFByb0JvbGRNZXRyaWNzPXQuTXlyaWFkUHJvQm9sZEl0YWxpY01ldHJpY3M9dC5NeXJpYWRQcm9Cb2xkSXRhbGljRmFjdG9ycz10Lk15cmlhZFByb0JvbGRGYWN0b3JzPXZvaWQgMDt0Lk15cmlhZFByb0JvbGRGYWN0b3JzPVsxLjM2ODk4LDEsMSwuNzI3MDYsLjgwNDc5LC44MzczNCwuOTg4OTQsLjk5NzkzLC45ODk3LC45Mzg4NCwuODYyMDksLjk0MjkyLC45NDI5MiwxLjE2NjYxLDEuMDIwNTgsLjkzNTgyLC45NjY5NCwuOTM1ODIsMS4xOTEzNywuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsLjc4MDc2LC43ODA3NiwxLjAyMDU4LDEuMDIwNTgsMS4wMjA1OCwuNzI4NTEsLjc4OTY2LC45MDgzOCwuODM2MzcsLjgyMzkxLC45NjM3NiwuODAwNjEsLjg2Mjc1LC44NzY4LC45NTQwNywxLjAyNTgsLjczOTAxLC44NTAyMiwuODM2NTUsMS4wMTU2LC45NTU0NiwuOTIxNzksLjg3MTA3LC45MjE3OSwuODIxMTQsLjgwOTYsLjg5NzEzLC45NDQzOCwuOTUzNTMsLjk0MDgzLC45MTkwNSwuOTA0MDYsLjk0NDYsLjk0MjkyLDEuMTg3NzcsLjk0MjkyLDEuMDIwNTgsLjg5OTAzLC45MDA4OCwuOTQ5MzgsLjk3ODk4LC44MTA5MywuOTc1NzEsLjk0OTM4LDEuMDI0LC45NTc3LC45NTkzMywuOTg2MjEsMS4wNDc0LC45NzQ1NSwuOTg5ODEsLjk2NzIsLjk1OTMzLC45NDQ2LC45Nzg5OCwuOTc0MDcsLjk3NjQ2LC43ODAzNiwxLjEwMjA4LC45NTQ0MiwuOTUyOTgsLjk3NTc5LC45MzMyLC45NDAzOSwuOTM4LC44MDY4NywxLjAxMTQ5LC44MDY4NywxLjAyMDU4LC44MDQ3OSwuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsMS4wMTE0OSwxLjAwODcyLC45MDA4OCwuOTE4ODIsMS4wMjEzLC44MzYxLDEuMDIwNTgsLjYyMjk1LC41NDMyNCwuODkwMjIsMS4wODU5NSwxLDEsLjkwMDg4LDEsLjk3NDU1LC45MzU4MiwuOTAwODgsMSwxLjA1Njg2LC44MzYxLC45OTY0MiwuOTk2NDIsLjk5NjQyLC43Mjg1MSwuOTA4MzgsLjkwODM4LC45MDgzOCwuOTA4MzgsLjkwODM4LC45MDgzOCwuODY4LC44MjM5MSwuODAwNjEsLjgwMDYxLC44MDA2MSwuODAwNjEsMS4wMjU4LDEuMDI1OCwxLjAyNTgsMS4wMjU4LC45NzQ4NCwuOTU1NDYsLjkyMTc5LC45MjE3OSwuOTIxNzksLjkyMTc5LC45MjE3OSwxLjAyMDU4LC45MjE3OSwuOTQ0MzgsLjk0NDM4LC45NDQzOCwuOTQ0MzgsLjkwNDA2LC44Njk1OCwuOTgyMjUsLjk0OTM4LC45NDkzOCwuOTQ5MzgsLjk0OTM4LC45NDkzOCwuOTQ5MzgsLjkwMzEsLjgxMDkzLC45NDkzOCwuOTQ5MzgsLjk0OTM4LC45NDkzOCwuOTg2MjEsLjk4NjIxLC45ODYyMSwuOTg2MjEsLjkzOTY5LC45NTkzMywuOTQ0NiwuOTQ0NiwuOTQ0NiwuOTQ0NiwuOTQ0NiwxLjA4NTk1LC45NDQ2LC45NTQ0MiwuOTU0NDIsLjk1NDQyLC45NTQ0MiwuOTQwMzksLjk3ODk4LC45NDAzOSwuOTA4MzgsLjk0OTM4LC45MDgzOCwuOTQ5MzgsLjkwODM4LC45NDkzOCwuODIzOTEsLjgxMDkzLC44MjM5MSwuODEwOTMsLjgyMzkxLC44MTA5MywuODIzOTEsLjgxMDkzLC45NjM3NiwuODQzMTMsLjk3NDg0LC45NzU3MSwuODAwNjEsLjk0OTM4LC44MDA2MSwuOTQ5MzgsLjgwMDYxLC45NDkzOCwuODAwNjEsLjk0OTM4LC44MDA2MSwuOTQ5MzgsLjg3NjgsLjk1NzcsLjg3NjgsLjk1NzcsLjg3NjgsLjk1NzcsMSwxLC45NTQwNywuOTU5MzMsLjk3MDY5LC45NTkzMywxLjAyNTgsLjk4NjIxLDEuMDI1OCwuOTg2MjEsMS4wMjU4LC45ODYyMSwxLjAyNTgsLjk4NjIxLDEuMDI1OCwuOTg2MjEsLjg4NywxLjAxNTkxLC43MzkwMSwxLjA0NzQsMSwxLC45NzQ1NSwuODM2NTUsLjk4OTgxLDEsMSwuODM2NTUsLjczOTc3LC44MzY1NSwuNzM5MDMsLjg0NjM4LDEuMDMzLC45NTU0NiwuOTU5MzMsMSwxLC45NTU0NiwuOTU5MzMsLjgyNzEsLjk1NDE3LC45NTkzMywuOTIxNzksLjk0NDYsLjkyMTc5LC45NDQ2LC45MjE3OSwuOTQ0NiwuOTM2LC45MTk2NCwuODIxMTQsLjk3NjQ2LDEsMSwuODIxMTQsLjk3NjQ2LC44MDk2LC43ODAzNiwuODA5NiwuNzgwMzYsMSwxLC44MDk2LC43ODAzNiwxLDEsLjg5NzEzLC43NzQ1MiwuODk3MTMsMS4xMDIwOCwuOTQ0MzgsLjk1NDQyLC45NDQzOCwuOTU0NDIsLjk0NDM4LC45NTQ0MiwuOTQ0MzgsLjk1NDQyLC45NDQzOCwuOTU0NDIsLjk0NDM4LC45NTQ0MiwuOTQwODMsLjk3NTc5LC45MDQwNiwuOTQwMzksLjkwNDA2LC45NDQ2LC45MzgsLjk0NDYsLjkzOCwuOTQ0NiwuOTM4LDEsLjk5NzkzLC45MDgzOCwuOTQ5MzgsLjg2OCwuOTAzMSwuOTIxNzksLjk0NDYsMSwxLC44OTcxMywxLjEwMjA4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDk4OSwuOTM1OCwuOTE5NDUsLjgzMTgxLC43NTI2MSwuODc5OTIsLjgyOTc2LC45NjAzNCwuODM2ODksLjk3MjY4LDEuMDA3OCwuOTA4MzgsLjgzNjM3LC44MDE5LC45MDE1NywuODAwNjEsLjk0NDYsLjk1NDA3LC45MjQzNiwxLjAyNTgsLjg1MDIyLC45NzE1MywxLjAxNTYsLjk1NTQ2LC44OTE5MiwuOTIxNzksLjkyMzYxLC44NzEwNywuOTYzMTgsLjg5NzEzLC45MzcwNCwuOTU2MzgsLjkxOTA1LC45MTcwOSwuOTI3OTYsMS4wMjU4LC45MzcwNCwuOTQ4MzYsMS4wMzczLC45NTkzMywxLjAwNzgsLjk1ODcxLC45NDgzNiwuOTYxNzQsLjkyNjAxLC45NDk4LC45ODYwNywuOTU3NzYsLjk1OTMzLDEuMDU0NTMsMS4wMDc4LC45ODI3NSwuOTMxNCwuOTU2MTcsLjkxNzAxLDEuMDU5OTMsLjk0NDYsLjc4MzY3LC45NTUzLDEsLjg2ODMyLDEuMDEyOCwuOTU4NzEsLjk5Mzk0LC44NzU0OCwuOTYzNjEsLjg2Nzc0LDEuMDA3OCwuOTU4NzEsLjk0NDYsLjk1ODcxLC44Njc3NCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45NDA4MywuOTc1NzksLjk0MDgzLC45NzU3OSwuOTQwODMsLjk3NTc5LC45MDQwNiwuOTQwMzksLjk2Njk0LDEsLjg5OTAzLDEsMSwxLC45MzU4MiwuOTM1ODIsLjkzNTgyLDEsLjkwOCwuOTA4LC45MTgsLjk0MjE5LC45NDIxOSwuOTY1NDQsMSwxLjI4NSwxLDEsLjgxMDc5LC44MTA3OSwxLDEsLjc0ODU0LDEsMSwxLDEsLjk5NzkzLDEsMSwxLC42NSwxLDEuMzYxNDUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMTcxNzMsMSwuODA1MzUsLjc2MTY5LDEuMDIwNTgsMS4wNzMyLDEuMDU0ODYsMSwxLDEuMzA2OTIsMS4wODU5NSwxLjA4NTk1LDEsMS4wODU5NSwxLjA4NTk1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4xNjE2MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXTt0Lk15cmlhZFByb0JvbGRNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMixsaW5lR2FwOi4yfTt0Lk15cmlhZFByb0JvbGRJdGFsaWNGYWN0b3JzPVsxLjM2ODk4LDEsMSwuNjYyMjcsLjgwNzc5LC44MTYyNSwuOTcyNzYsLjk3Mjc2LC45NzczMywuOTIyMjIsLjgzMjY2LC45NDI5MiwuOTQyOTIsMS4xNjE0OCwxLjAyMDU4LC45MzU4MiwuOTY2OTQsLjkzNTgyLDEuMTczMzcsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC43ODA3NiwuNzgwNzYsMS4wMjA1OCwxLjAyMDU4LDEuMDIwNTgsLjcxNTQxLC43NjgxMywuODU1NzYsLjgwNTkxLC44MDcyOSwuOTQyOTksLjc3NTEyLC44MzY1NSwuODY1MjMsLjkyMjIyLC45ODYyMSwuNzE3NDMsLjgxNjk4LC43OTcyNiwuOTg1NTgsLjkyMjIyLC45MDYzNywuODM4MDksLjkwNjM3LC44MDcyOSwuNzY0NjMsLjg2Mjc1LC45MDY5OSwuOTE2MDUsLjkxNTQsLjg1MzA4LC44NTQ1OCwuOTA1MzEsLjk0MjkyLDEuMjEyOTYsLjk0MjkyLDEuMDIwNTgsLjg5OTAzLDEuMTg2MTYsLjk5NjEzLC45MTY3NywuNzgyMTYsLjkxNjc3LC45MDA4MywuOTg3OTYsLjkxMzUsLjkyMTY4LC45NTM4MSwuOTg5ODEsLjk1Mjk4LC45NTM4MSwuOTM0NTksLjkyMTY4LC45MTUxMywuOTIwMDQsLjkxNjc3LC45NTA3NywuNzQ4LDEuMDQ1MDIsLjkxNjc3LC45MjA2MSwuOTQyMzYsLjg5NTQ0LC44OTM2NCwuOSwuODA2ODcsLjg1NzgsLjgwNjg3LDEuMDIwNTgsLjgwNzc5LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuODU3OCwuOTk5NzMsMS4xODYxNiwuOTEzMzksMS4wODA3NCwuODI4OTEsMS4wMjA1OCwuNTU1MDksLjcxNTI2LC44OTAyMiwxLjA4NTk1LDEsMSwxLjE4NjE2LDEsLjk2NzM2LC45MzU4MiwxLjE4NjE2LDEsMS4wNDg2NCwuODI3MTEsLjk5MDQzLC45OTA0MywuOTkwNDMsLjcxNTQxLC44NTU3NiwuODU1NzYsLjg1NTc2LC44NTU3NiwuODU1NzYsLjg1NTc2LC44NDUsLjgwNzI5LC43NzUxMiwuNzc1MTIsLjc3NTEyLC43NzUxMiwuOTg2MjEsLjk4NjIxLC45ODYyMSwuOTg2MjEsLjk1OTYxLC45MjIyMiwuOTA2MzcsLjkwNjM3LC45MDYzNywuOTA2MzcsLjkwNjM3LDEuMDIwNTgsLjkwMjUxLC45MDY5OSwuOTA2OTksLjkwNjk5LC45MDY5OSwuODU0NTgsLjgzNjU5LC45NDk1MSwuOTk2MTMsLjk5NjEzLC45OTYxMywuOTk2MTMsLjk5NjEzLC45OTYxMywuODU4MTEsLjc4MjE2LC45MDA4MywuOTAwODMsLjkwMDgzLC45MDA4MywuOTUzODEsLjk1MzgxLC45NTM4MSwuOTUzODEsLjkxMzUsLjkyMTY4LC45MTUxMywuOTE1MTMsLjkxNTEzLC45MTUxMywuOTE1MTMsMS4wODU5NSwuOTE2NzcsLjkxNjc3LC45MTY3NywuOTE2NzcsLjkxNjc3LC44OTM2NCwuOTIzMzIsLjg5MzY0LC44NTU3NiwuOTk2MTMsLjg1NTc2LC45OTYxMywuODU1NzYsLjk5NjEzLC44MDcyOSwuNzgyMTYsLjgwNzI5LC43ODIxNiwuODA3MjksLjc4MjE2LC44MDcyOSwuNzgyMTYsLjk0Mjk5LC43Njc4MywuOTU5NjEsLjkxNjc3LC43NzUxMiwuOTAwODMsLjc3NTEyLC45MDA4MywuNzc1MTIsLjkwMDgzLC43NzUxMiwuOTAwODMsLjc3NTEyLC45MDA4MywuODY1MjMsLjkxMzUsLjg2NTIzLC45MTM1LC44NjUyMywuOTEzNSwxLDEsLjkyMjIyLC45MjE2OCwuOTIyMjIsLjkyMTY4LC45ODYyMSwuOTUzODEsLjk4NjIxLC45NTM4MSwuOTg2MjEsLjk1MzgxLC45ODYyMSwuOTUzODEsLjk4NjIxLC45NTM4MSwuODYwMzYsLjk3MDk2LC43MTc0MywuOTg5ODEsMSwxLC45NTI5OCwuNzk3MjYsLjk1MzgxLDEsMSwuNzk3MjYsLjY4OTQsLjc5NzI2LC43NDMyMSwuODE2OTEsMS4wMDA2LC45MjIyMiwuOTIxNjgsMSwxLC45MjIyMiwuOTIxNjgsLjc5NDY0LC45MjA5OCwuOTIxNjgsLjkwNjM3LC45MTUxMywuOTA2MzcsLjkxNTEzLC45MDYzNywuOTE1MTMsLjkwOSwuODc1MTQsLjgwNzI5LC45NTA3NywxLDEsLjgwNzI5LC45NTA3NywuNzY0NjMsLjc0OCwuNzY0NjMsLjc0OCwxLDEsLjc2NDYzLC43NDgsMSwxLC44NjI3NSwuNzI2NTEsLjg2Mjc1LDEuMDQ1MDIsLjkwNjk5LC45MTY3NywuOTA2OTksLjkxNjc3LC45MDY5OSwuOTE2NzcsLjkwNjk5LC45MTY3NywuOTA2OTksLjkxNjc3LC45MDY5OSwuOTE2NzcsLjkxNTQsLjk0MjM2LC44NTQ1OCwuODkzNjQsLjg1NDU4LC45MDUzMSwuOSwuOTA1MzEsLjksLjkwNTMxLC45LDEsLjk3Mjc2LC44NTU3NiwuOTk2MTMsLjg0NSwuODU4MTEsLjkwMjUxLC45MTY3NywxLDEsLjg2Mjc1LDEuMDQ1MDIsMS4xODYxNiwxLjE4NjE2LDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMTg2MTYsMS4wMDg5OSwxLjMwNjI4LC44NTU3NiwuODAxNzgsLjY2ODYyLC43OTI3LC42OTMyMywuODgxMjcsLjcyNDU5LC44OTcxMSwuOTUzODEsLjg1NTc2LC44MDU5MSwuNzgwNSwuOTQ3MjksLjc3NTEyLC45MDUzMSwuOTIyMjIsLjkwNjM3LC45ODYyMSwuODE2OTgsLjkyNjU1LC45ODU1OCwuOTIyMjIsLjg1MzU5LC45MDYzNywuOTA5NzYsLjgzODA5LC45NDUyMywuODYyNzUsLjgzNTA5LC45MzE1NywuODUzMDgsLjgzMzkyLC45MjM0NiwuOTg2MjEsLjgzNTA5LC45Mjg4NiwuOTEzMjQsLjkyMTY4LC45NTM4MSwuOTA2NDYsLjkyODg2LC45MDU1NywuODY4NDcsLjkwMjc2LC45MTMyNCwuODY4NDIsLjkyMTY4LC45OTUzMSwuOTUzODEsLjkyMjQsLjg1NDA4LC45MjY5OSwuODY4NDcsMS4wMDUxLC45MTUxMywuODA0ODcsLjkzNDgxLDEsLjg4MTU5LDEuMDUyMTQsLjkwNjQ2LC45NzM1NSwuODE1MzksLjg5Mzk4LC44NTkyMywuOTUzODEsLjkwNjQ2LC45MTUxMywuOTA2NDYsLjg1OTIzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkxNTQsLjk0MjM2LC45MTU0LC45NDIzNiwuOTE1NCwuOTQyMzYsLjg1NDU4LC44OTM2NCwuOTY2OTQsMSwuODk5MDMsMSwxLDEsLjkxNzgyLC45MTc4MiwuOTE3ODIsMSwuODk2LC44OTYsLjg5NiwuOTMzMiwuOTMzMiwuOTU5NzMsMSwxLjI2LDEsMSwuODA0NzksLjgwMTc4LDEsMSwuODU2MzMsMSwxLDEsMSwuOTcyNzYsMSwxLDEsLjY5OCwxLDEuMzYxNDUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMTQ1NDIsMSwuNzkxOTksLjc4Njk0LDEuMDIwNTgsMS4wMzQ5MywxLjA1NDg2LDEsMSwxLjIzMDI2LDEuMDg1OTUsMS4wODU5NSwxLDEuMDg1OTUsMS4wODU5NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMjAwMDYsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV07dC5NeXJpYWRQcm9Cb2xkSXRhbGljTWV0cmljcz17bGluZUhlaWdodDoxLjIsbGluZUdhcDouMn07dC5NeXJpYWRQcm9JdGFsaWNGYWN0b3JzPVsxLjM2ODk4LDEsMSwuNjU1MDcsLjg0OTQzLC44NTYzOSwuODg0NjUsLjg4NDY1LC44NjkzNiwuODgzMDcsLjg2OTQ4LC44NTI4MywuODUyODMsMS4wNjM4MywxLjAyMDU4LC43NTk0NSwuOTIxOSwuNzU5NDUsMS4xNzMzNywuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjc1OTQ1LC43NTk0NSwxLjAyMDU4LDEuMDIwNTgsMS4wMjA1OCwuNjkwNDYsLjcwOTI2LC44NTE1OCwuNzc4MTIsLjc2ODUyLC44OTU5MSwuNzA0NjYsLjc2MTI1LC44MDA5NCwuODY4MjIsLjgzODY0LC43MjgsLjc3MjEyLC43OTQ3NSwuOTM2MzcsLjg3NTE0LC44NTg4LC43NjAxMywuODU4OCwuNzI0MjEsLjY5ODY2LC43NzU5OCwuODU5OTEsLjgwODExLC44NzgzMiwuNzgxMTIsLjc3NTEyLC44NTYyLDEuMDIyMiwxLjE4NDE3LDEuMDIyMiwxLjI3MDE0LC44OTkwMywxLjE1MDEyLC45Mzg1OSwuOTQzOTksLjg0NiwuOTQzOTksLjgxNDUzLDEuMDE4NiwuOTQyMTksLjk2MDE3LDEuMDMwNzUsMS4wMjE3NSwuOTEyLDEuMDMwNzUsLjk2OTk4LC45NjAxNywuOTM4NTksLjk0Mzk5LC45NDM5OSwuOTU0OTMsLjc0NiwxLjEyNjU4LC45NDU3OCwuOTEsLjk3OSwuODgyLC44ODIsLjgzLC44NTAzNCwuODM1MzcsLjg1MDM0LDEuMDIwNTgsLjcwODY5LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODM1MzcsLjkwMDgzLDEuMTUwMTIsLjkxNjEsLjk0NTY1LC43MzU0MSwxLjAyMDU4LC41MzYwOSwuNjkzNTMsLjc5NTE5LDEuMDg1OTUsMSwxLDEuMTUwMTIsMSwuOTE5NzQsLjc1OTQ1LDEuMTUwMTIsMSwuOTQ0NiwuNzMzNjEsLjkwMDUsLjkwMDUsLjkwMDUsLjYyODY0LC44NTE1OCwuODUxNTgsLjg1MTU4LC44NTE1OCwuODUxNTgsLjg1MTU4LC43NzMsLjc2ODUyLC43MDQ2NiwuNzA0NjYsLjcwNDY2LC43MDQ2NiwuODM4NjQsLjgzODY0LC44Mzg2NCwuODM4NjQsLjkwNTYxLC44NzUxNCwuODU4OCwuODU4OCwuODU4OCwuODU4OCwuODU4OCwxLjAyMDU4LC44NTc1MSwuODU5OTEsLjg1OTkxLC44NTk5MSwuODU5OTEsLjc3NTEyLC43NjAxMywuODgwNzUsLjkzODU5LC45Mzg1OSwuOTM4NTksLjkzODU5LC45Mzg1OSwuOTM4NTksLjgwNzUsLjg0NiwuODE0NTMsLjgxNDUzLC44MTQ1MywuODE0NTMsLjgyNDI0LC44MjQyNCwuODI0MjQsLjgyNDI0LC45Mjc4LC45NjAxNywuOTM4NTksLjkzODU5LC45Mzg1OSwuOTM4NTksLjkzODU5LDEuMDg1OTUsLjg1NjIsLjk0NTc4LC45NDU3OCwuOTQ1NzgsLjk0NTc4LC44ODIsLjk0NTc4LC44ODIsLjg1MTU4LC45Mzg1OSwuODUxNTgsLjkzODU5LC44NTE1OCwuOTM4NTksLjc2ODUyLC44NDYsLjc2ODUyLC44NDYsLjc2ODUyLC44NDYsLjc2ODUyLC44NDYsLjg5NTkxLC44NTQ0LC45MDU2MSwuOTQzOTksLjcwNDY2LC44MTQ1MywuNzA0NjYsLjgxNDUzLC43MDQ2NiwuODE0NTMsLjcwNDY2LC44MTQ1MywuNzA0NjYsLjgxNDUzLC44MDA5NCwuOTQyMTksLjgwMDk0LC45NDIxOSwuODAwOTQsLjk0MjE5LDEsMSwuODY4MjIsLjk2MDE3LC44NjgyMiwuOTYwMTcsLjgzODY0LC44MjQyNCwuODM4NjQsLjgyNDI0LC44Mzg2NCwuODI0MjQsLjgzODY0LDEuMDMwNzUsLjgzODY0LC44MjQyNCwuODE0MDIsMS4wMjczOCwuNzI4LDEuMDIxNzUsMSwxLC45MTIsLjc5NDc1LDEuMDMwNzUsMSwxLC43OTQ3NSwuODM5MTEsLjc5NDc1LC42NjI2NiwuODA1NTMsMS4wNjY3NiwuODc1MTQsLjk2MDE3LDEsMSwuODc1MTQsLjk2MDE3LC44Njg2NSwuODczOTYsLjk2MDE3LC44NTg4LC45Mzg1OSwuODU4OCwuOTM4NTksLjg1ODgsLjkzODU5LC44NjcsLjg0NzU5LC43MjQyMSwuOTU0OTMsMSwxLC43MjQyMSwuOTU0OTMsLjY5ODY2LC43NDYsLjY5ODY2LC43NDYsMSwxLC42OTg2NiwuNzQ2LDEsMSwuNzc1OTgsLjg4NDE3LC43NzU5OCwxLjEyNjU4LC44NTk5MSwuOTQ1NzgsLjg1OTkxLC45NDU3OCwuODU5OTEsLjk0NTc4LC44NTk5MSwuOTQ1NzgsLjg1OTkxLC45NDU3OCwuODU5OTEsLjk0NTc4LC44NzgzMiwuOTc5LC43NzUxMiwuODgyLC43NzUxMiwuODU2MiwuODMsLjg1NjIsLjgzLC44NTYyLC44MywxLC44ODQ2NSwuODUxNTgsLjkzODU5LC43NzMsLjgwNzUsLjg1NzUxLC44NTYyLDEsMSwuNzc1OTgsMS4xMjY1OCwxLjE1MDEyLDEuMTUwMTIsMS4xNTAxMiwxLjE1MDEyLDEuMTUwMTIsMS4xNTMxMywxLjE1MDEyLDEuMTUwMTIsMS4xNTAxMiwxLjA4MTA2LDEuMDM5MDEsLjg1MTU4LC43NzAyNSwuNjIyNjQsLjc2NDYsLjY1MzUxLC44NjAyNiwuNjk0NjEsLjg5OTQ3LDEuMDMwNzUsLjg1MTU4LC43NzgxMiwuNzY0NDksLjg4ODM2LC43MDQ2NiwuODU2MiwuODY4MjIsLjg1ODgsLjgzODY0LC43NzIxMiwuODUzMDgsLjkzNjM3LC44NzUxNCwuODIzNTIsLjg1ODgsLjg1NzAxLC43NjAxMywuODkwNTgsLjc3NTk4LC44MTU2LC44MjU2NSwuNzgxMTIsLjc3ODk5LC44OTM4NiwuODM4NjQsLjgxNTYsLjk0ODYsLjkyMzg4LC45NjE4NiwxLjAzMDc1LC45MTEyMywuOTQ4NiwuOTMyOTgsLjg3OCwuOTM5NDIsLjkyMzg4LC44NDU5NiwuOTYxODYsLjk1MTE5LDEuMDMwNzUsLjkyMiwuODg3ODcsLjk1ODI5LC44OCwuOTM1NTksLjkzODU5LC43ODgxNSwuOTM3NTgsMSwuODkyMTcsMS4wMzczNywuOTExMjMsLjkzOTY5LC43NzQ4NywuODU3NjksLjg2Nzk5LDEuMDMwNzUsLjkxMTIzLC45Mzg1OSwuOTExMjMsLjg2Nzk5LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg3ODMyLC45NzksLjg3ODMyLC45NzksLjg3ODMyLC45NzksLjc3NTEyLC44ODIsLjkyMTksMSwuODk5MDMsMSwxLDEsLjg3MzIxLC44NzMyMSwuODczMjEsMSwxLjAyNywxLjAyNywxLjAyNywuODY4NDcsLjg2ODQ3LC43OTEyMSwxLDEuMTI0LDEsMSwuNzM1NzIsLjczNTcyLDEsMSwuODUwMzQsMSwxLDEsMSwuODg0NjUsMSwxLDEsLjY2OSwxLDEuMzYxNDUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDQ4MjgsMSwuNzQ5NDgsLjc1MTg3LDEuMDIwNTgsLjk4MzkxLDEuMDIxMTksMSwxLDEuMDYyMzMsMS4wODU5NSwxLjA4NTk1LDEsMS4wODU5NSwxLjA4NTk1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wNTIzMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXTt0Lk15cmlhZFByb0l0YWxpY01ldHJpY3M9e2xpbmVIZWlnaHQ6MS4yLGxpbmVHYXA6LjJ9O3QuTXlyaWFkUHJvUmVndWxhckZhY3RvcnM9WzEuMzY4OTgsMSwxLC43NjMwNSwuODI3ODQsLjk0OTM1LC44OTM2NCwuOTIyNDEsLjg5MDczLC45MDcwNiwuOTg0NzIsLjg1MjgzLC44NTI4MywxLjA2NjQsMS4wMjA1OCwuNzQ1MDUsLjkyMTksLjc0NTA1LDEuMjM0NTYsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC43NDUwNSwuNzQ1MDUsMS4wMjA1OCwxLjAyMDU4LDEuMDIwNTgsLjczMDAyLC43MjYwMSwuOTE3NTUsLjgxMjYsLjgwMzE0LC45MjIyMiwuNzM3NjQsLjc5NzI2LC44MzA1MSwuOTAyODQsLjg2MDIzLC43NCwuODEyNiwuODQ4NjksLjk2NTE4LC45MTExNSwuODg1OCwuNzk3NjEsLjg4NTgsLjc0NDk4LC43MzkxNCwuODEzNjMsLjg5NTkxLC44MzY1OSwuODk2MzMsLjg1NjA4LC44MTExLC45MDUzMSwxLjAyMjIsMS4yMjczNiwxLjAyMjIsMS4yNzAxNCwuODk5MDMsLjkwMDg4LC44NjY2NywxLjAyMzEsLjg5NiwxLjAxNDExLC45MDA4MywxLjA1MDk5LDEuMDA1MTIsLjk5NzkzLDEuMDUzMjYsMS4wOTM3NywuOTM4LDEuMDYyMjYsMS4wMDExOSwuOTk3OTMsLjk4NzE0LDEuMDIzMSwxLjAxMjMxLC45ODE5NiwuNzkyLDEuMTkxMzcsLjk5MDc0LC45NjIsMS4wMTkxNSwuOTI2LC45NDIsLjg1NiwuODUwMzQsLjkyMDA2LC44NTAzNCwxLjAyMDU4LC42OTA2NywuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMDA2LC45MzMyLC45MDA4OCwuOTE4ODIsLjkzNDg0LC43NTMzOSwxLjAyMDU4LC41Njg2NiwuNTQzMjQsLjc5NTE5LDEuMDg1OTUsMSwxLC45MDA4OCwxLC45NTMyNSwuNzQ1MDUsLjkwMDg4LDEsLjk3MTk4LC43NTMzOSwuOTEwMDksLjkxMDA5LC45MTAwOSwuNjY0NjYsLjkxNzU1LC45MTc1NSwuOTE3NTUsLjkxNzU1LC45MTc1NSwuOTE3NTUsLjc4OCwuODAzMTQsLjczNzY0LC43Mzc2NCwuNzM3NjQsLjczNzY0LC44NjAyMywuODYwMjMsLjg2MDIzLC44NjAyMywuOTI5MTUsLjkxMTE1LC44ODU4LC44ODU4LC44ODU4LC44ODU4LC44ODU4LDEuMDIwNTgsLjg4NTgsLjg5NTkxLC44OTU5MSwuODk1OTEsLjg5NTkxLC44MTExLC43OTYxMSwuODk3MTMsLjg2NjY3LC44NjY2NywuODY2NjcsLjg2NjY3LC44NjY2NywuODY2NjcsLjg2OTM2LC44OTYsLjkwMDgzLC45MDA4MywuOTAwODMsLjkwMDgzLC44NDIyNCwuODQyMjQsLjg0MjI0LC44NDIyNCwuOTcyNzYsLjk5NzkzLC45ODcxNCwuOTg3MTQsLjk4NzE0LC45ODcxNCwuOTg3MTQsMS4wODU5NSwuODk4NzYsLjk5MDc0LC45OTA3NCwuOTkwNzQsLjk5MDc0LC45NDIsMS4wMjMxLC45NDIsLjkxNzU1LC44NjY2NywuOTE3NTUsLjg2NjY3LC45MTc1NSwuODY2NjcsLjgwMzE0LC44OTYsLjgwMzE0LC44OTYsLjgwMzE0LC44OTYsLjgwMzE0LC44OTYsLjkyMjIyLC45MzM3MiwuOTI5MTUsMS4wMTQxMSwuNzM3NjQsLjkwMDgzLC43Mzc2NCwuOTAwODMsLjczNzY0LC45MDA4MywuNzM3NjQsLjkwMDgzLC43Mzc2NCwuOTAwODMsLjgzMDUxLDEuMDA1MTIsLjgzMDUxLDEuMDA1MTIsLjgzMDUxLDEuMDA1MTIsMSwxLC45MDI4NCwuOTk3OTMsLjkwOTc2LC45OTc5MywuODYwMjMsLjg0MjI0LC44NjAyMywuODQyMjQsLjg2MDIzLC44NDIyNCwuODYwMjMsMS4wNTMyNiwuODYwMjMsLjg0MjI0LC44Mjg3MywxLjA3NDY5LC43NCwxLjA5Mzc3LDEsMSwuOTM4LC44NDg2OSwxLjA2MjI2LDEsMSwuODQ4NjksLjgzNzA0LC44NDg2OSwuODE0NDEsLjg1NTg4LDEuMDg5MjcsLjkxMTE1LC45OTc5MywxLDEsLjkxMTE1LC45OTc5MywuOTE4ODcsLjkwOTkxLC45OTc5MywuODg1OCwuOTg3MTQsLjg4NTgsLjk4NzE0LC44ODU4LC45ODcxNCwuODk0LC45MTQzNCwuNzQ0OTgsLjk4MTk2LDEsMSwuNzQ0OTgsLjk4MTk2LC43MzkxNCwuNzkyLC43MzkxNCwuNzkyLDEsMSwuNzM5MTQsLjc5MiwxLDEsLjgxMzYzLC45MDQsLjgxMzYzLDEuMTkxMzcsLjg5NTkxLC45OTA3NCwuODk1OTEsLjk5MDc0LC44OTU5MSwuOTkwNzQsLjg5NTkxLC45OTA3NCwuODk1OTEsLjk5MDc0LC44OTU5MSwuOTkwNzQsLjg5NjMzLDEuMDE5MTUsLjgxMTEsLjk0MiwuODExMSwuOTA1MzEsLjg1NiwuOTA1MzEsLjg1NiwuOTA1MzEsLjg1NiwxLC45MjI0MSwuOTE3NTUsLjg2NjY3LC43ODgsLjg2OTM2LC44ODU4LC44OTg3NiwxLDEsLjgxMzYzLDEuMTkxMzcsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMzg4LDEuMDM5MDEsLjkyMTM4LC43ODEwNSwuNzE1NCwuODYxNjksLjgwNTEzLC45NDAwNywuODI1MjgsLjk4NjEyLDEuMDYyMjYsLjkxNzU1LC44MTI2LC44MTg4NCwuOTI4MTksLjczNzY0LC45MDUzMSwuOTAyODQsLjg4NTgsLjg2MDIzLC44MTI2LC45MTE3MiwuOTY1MTgsLjkxMTE1LC44MzA4OSwuODg1OCwuODc3OTEsLjc5NzYxLC44OTI5NywuODEzNjMsLjg4MTU3LC44OTk5MiwuODU2MDgsLjgxOTkyLC45NDMwNywuODYwMjMsLjg4MTU3LC45NTMwOCwuOTg2OTksLjk5NzkzLDEuMDYyMjYsLjk1ODE3LC45NTMwOCwuOTczNTgsLjkyOCwuOTgwODgsLjk4Njk5LC45Mjc2MSwuOTk3OTMsLjk2MDE3LDEuMDYyMjYsLjk4NiwuOTQ0LC45NTk3OCwuOTM4LC45NjcwNSwuOTg3MTQsLjgwNDQyLC45ODk3MiwxLC44OTc2MiwxLjA0NTUyLC45NTgxNywuOTkwMDcsLjg3MDY0LC45MTg3OSwuODg4ODgsMS4wNjIyNiwuOTU4MTcsLjk4NzE0LC45NTgxNywuODg4ODgsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODk2MzMsMS4wMTkxNSwuODk2MzMsMS4wMTkxNSwuODk2MzMsMS4wMTkxNSwuODExMSwuOTQyLC45MjE5LDEsLjg5OTAzLDEsMSwxLC45MzE3MywuOTMxNzMsLjkzMTczLDEsMS4wNjMwNCwxLjA2MzA0LDEuMDY5MDQsLjg5OTAzLC44OTkwMywuODA1NDksMSwxLjE1NiwxLDEsLjc2NTc1LC43NjU3NSwxLDEsLjcyNDU4LDEsMSwxLDEsLjkyMjQxLDEsMSwxLC42MTksMSwxLjM2MTQ1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA3MjU3LDEsLjc0NzA1LC43MTExOSwxLjAyMDU4LDEuMDI0LDEuMDIxMTksMSwxLDEuMTUzNiwxLjA4NTk1LDEuMDg1OTUsMSwxLjA4NTk1LDEuMDg1OTUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA1NjM4LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdO3QuTXlyaWFkUHJvUmVndWxhck1ldHJpY3M9e2xpbmVIZWlnaHQ6MS4yLGxpbmVHYXA6LjJ9fSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlNlZ29ldWlSZWd1bGFyTWV0cmljcz10LlNlZ29ldWlSZWd1bGFyRmFjdG9ycz10LlNlZ29ldWlJdGFsaWNNZXRyaWNzPXQuU2Vnb2V1aUl0YWxpY0ZhY3RvcnM9dC5TZWdvZXVpQm9sZE1ldHJpY3M9dC5TZWdvZXVpQm9sZEl0YWxpY01ldHJpY3M9dC5TZWdvZXVpQm9sZEl0YWxpY0ZhY3RvcnM9dC5TZWdvZXVpQm9sZEZhY3RvcnM9dm9pZCAwO3QuU2Vnb2V1aUJvbGRGYWN0b3JzPVsxLjc2NzM4LDEsMSwuOTkyOTcsLjk4MjQsMS4wNDAxNiwxLjA2NDk3LDEuMDM0MjQsLjk3NTI5LDEuMTc2NDcsMS4yMzIwMywxLjEwODUsMS4xMDg1LDEuMTY5MzksMS4yMTA3LC45NzU0LDEuMjE0MDgsLjk3NTQsMS41OTU3OCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LC44MTM3OCwuODEzNzgsMS4yMTA3LDEuMjEwNywxLjIxMDcsLjcxNzAzLC45Nzg0NywuOTczNjMsLjg4Nzc2LC44NjQxLDEuMDIwOTYsLjc5Nzk1LC44NTEzMiwuOTE0LDEuMDYwODUsMS4xNDA2LC44MDA3LC44OTg1OCwuODM2OTMsMS4xNDg4OSwxLjA5Mzk4LC45NzQ4OSwuOTIwOTQsLjk3NDg5LC45MDM5OSwuODQwNDEsLjk1OTIzLDEuMDAxMzUsMSwxLjA2NDY3LC45ODI0MywuOTA5OTYsLjk5MzYxLDEuMTA4NSwxLjU2OTQyLDEuMTA4NSwxLjIxMDcsLjc0NjI3LC45NDI4MiwuOTY3NTIsMS4wMTUxOSwuODYzMDQsMS4wMTM1OSwuOTcyNzgsMS4xNTEwMywxLjAxMzU5LC45ODU2MSwxLjAyMjg1LDEuMDIyODUsMS4wMDUyNywxLjAyMjg1LDEuMDMwMiwuOTkwNDEsMS4wMDA4LDEuMDE1MTksMS4wMTM1OSwxLjAyMjU4LC43OTEwNCwxLjE2ODYyLC45OTA0MSwuOTc0NTQsMS4wMjUxMSwuOTkyOTgsLjk2NzUyLC45NTgwMSwuOTQ4NTYsMS4xNjU3OSwuOTQ4NTYsMS4yMTA3LC45ODI0LDEuMDM0MjQsMS4wMzQyNCwxLDEuMDM0MjQsMS4xNjU3OSwuODcyNywxLjM4NzEsMS4xODYyMiwxLjEwODE4LDEuMDQ0NzgsMS4yMTA3LDEuMTg2MjIsLjc1MTU1LC45NDk5NCwxLjI4ODI2LDEuMjE0MDgsMS4yMTQwOCwuOTEwNTYsMSwuOTE1NzIsLjk3NTQsLjY0NjYzLDEuMTgzMjgsMS4yNDg2NiwxLjA0NDc4LDEuMTQxNjksMS4xNTc0OSwxLjE3Mzg5LC43MTcwMywuOTczNjMsLjk3MzYzLC45NzM2MywuOTczNjMsLjk3MzYzLC45NzM2MywuOTM1MDYsLjg2NDEsLjc5Nzk1LC43OTc5NSwuNzk3OTUsLjc5Nzk1LDEuMTQwNiwxLjE0MDYsMS4xNDA2LDEuMTQwNiwxLjAyMDk2LDEuMDkzOTgsLjk3NDI2LC45NzQyNiwuOTc0MjYsLjk3NDI2LC45NzQyNiwxLjIxMDcsLjk3NDg5LDEuMDAxMzUsMS4wMDEzNSwxLjAwMTM1LDEuMDAxMzUsLjkwOTk2LC45MjA5NCwxLjAyNzk4LC45Njc1MiwuOTY3NTIsLjk2NzUyLC45Njc1MiwuOTY3NTIsLjk2NzUyLC45MzEzNiwuODYzMDQsLjk3Mjc4LC45NzI3OCwuOTcyNzgsLjk3Mjc4LDEuMDIyODUsMS4wMjI4NSwxLjAyMjg1LDEuMDIyODUsLjk3MTIyLC45OTA0MSwxLDEsMSwxLDEsMS4yODgyNiwxLjAwMDgsLjk5MDQxLC45OTA0MSwuOTkwNDEsLjk5MDQxLC45Njc1MiwxLjAxNTE5LC45Njc1MiwuOTczNjMsLjk2NzUyLC45NzM2MywuOTY3NTIsLjk3MzYzLC45Njc1MiwuODY0MSwuODYzMDQsLjg2NDEsLjg2MzA0LC44NjQxLC44NjMwNCwuODY0MSwuODYzMDQsMS4wMjA5NiwxLjAzMDU3LDEuMDIwOTYsMS4wMzUxNywuNzk3OTUsLjk3Mjc4LC43OTc5NSwuOTcyNzgsLjc5Nzk1LC45NzI3OCwuNzk3OTUsLjk3Mjc4LC43OTc5NSwuOTcyNzgsLjkxNCwxLjAxMzU5LC45MTQsMS4wMTM1OSwuOTE0LDEuMDEzNTksMSwxLDEuMDYwODUsLjk4NTYxLDEuMDYwODUsMS4wMDg3OSwxLjE0MDYsMS4wMjI4NSwxLjE0MDYsMS4wMjI4NSwxLjE0MDYsMS4wMjI4NSwxLjE0MDYsMS4wMjI4NSwxLjE0MDYsMS4wMjI4NSwuOTcxMzgsMS4wODY5MiwuODAwNywxLjAyMjg1LDEsMSwxLjAwNTI3LC44MzY5MywxLjAyMjg1LDEsMSwuODM2OTMsLjk0NTUsLjgzNjkzLC45MDQxOCwuODM2OTMsMS4xMzAwNSwxLjA5Mzk4LC45OTA0MSwxLDEsMS4wOTM5OCwuOTkwNDEsLjk2NjkyLDEuMDkyNTEsLjk5MDQxLC45NzQ4OSwxLjAwMDgsLjk3NDg5LDEuMDAwOCwuOTc0ODksMS4wMDA4LC45Mzk5NCwuOTc5MzEsLjkwMzk5LDEuMDIyNTgsMSwxLC45MDM5OSwxLjAyMjU4LC44NDA0MSwuNzkxMDQsLjg0MDQxLC43OTEwNCwuODQwNDEsLjc5MTA0LC44NDA0MSwuNzkxMDQsMSwxLC45NTkyMywxLjA3MDM0LC45NTkyMywxLjE2ODYyLDEuMDAxMzUsLjk5MDQxLDEuMDAxMzUsLjk5MDQxLDEuMDAxMzUsLjk5MDQxLDEuMDAxMzUsLjk5MDQxLDEuMDAxMzUsLjk5MDQxLDEuMDAxMzUsLjk5MDQxLDEuMDY0NjcsMS4wMjUxMSwuOTA5OTYsLjk2NzUyLC45MDk5NiwuOTkzNjEsLjk1ODAxLC45OTM2MSwuOTU4MDEsLjk5MzYxLC45NTgwMSwxLjA3NzMzLDEuMDM0MjQsLjk3MzYzLC45Njc1MiwuOTM1MDYsLjkzMTM2LC45NzQ4OSwxLjAwMDgsMSwxLC45NTkyMywxLjE2ODYyLDEuMTUxMDMsMS4xNTEwMywxLjAxMTczLDEuMDM5NTksLjc1OTUzLC44MTM3OCwuNzk5MTIsMS4xNTEwMywxLjIxOTk0LC45NTE2MSwuODc4MTUsMS4wMTE0OSwuODE1MjUsLjc2NzYsLjk4MTY3LDEuMDExMzQsMS4wMjU0NiwuODQwOTcsMS4wMzA4OSwxLjE4MTAyLC45NzM2MywuODg3NzYsLjg1MTM0LC45NzgyNiwuNzk3OTUsLjk5MzYxLDEuMDYwODUsLjk3NDg5LDEuMTQwNiwuODk4NTgsMS4wMzg4LDEuMTQ4ODksMS4wOTM5OCwuODYwMzksLjk3NDg5LDEuMDU5NSwuOTIwOTQsLjk0NzkzLC45NTkyMywuOTA5OTYsLjk5MzQ2LC45ODI0MywxLjAyMTEyLC45NTQ5MywxLjE0MDYsLjkwOTk2LDEuMDM1NzQsMS4wMjU5NywxLjAwMDgsMS4xODEwMiwxLjA2NjI4LDEuMDM1NzQsMS4wMTkyLDEuMDE5MzIsMS4wMDg4NiwuOTc1MzEsMS4wMTA2LDEuMDAwOCwxLjEzMTg5LDEuMTgxMDIsMS4wMjI3NywuOTg2ODMsMS4wMDE2LC45OTU2MSwxLjA3MjM3LDEuMDAwOCwuOTA0MzQsLjk5OTIxLC45MzgwMywuODk2NSwxLjIzMDg1LDEuMDY2MjgsMS4wNDk4MywuOTYyNjgsMS4wNDk5LC45ODQzOSwxLjE4MTAyLDEuMDY2MjgsMS4wMDA4LDEuMDY2MjgsLjk4NDM5LC43OTc5NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA5NDY2LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45NzI3OCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjAyMDY1LDEsMSwxLDEsMSwxLDEuMDY0NjcsMS4wMjUxMSwxLjA2NDY3LDEuMDI1MTEsMS4wNjQ2NywxLjAyNTExLC45MDk5NiwuOTY3NTIsMSwxLjIxNDA4LC44OTkwMywxLDEsLjc1MTU1LDEuMDQzOTQsMS4wNDM5NCwxLjA0Mzk0LDEuMDQzOTQsLjk4NjMzLC45ODYzMywuOTg2MzMsLjczMDQ3LC43MzA0NywxLjIwNjQyLC45MTIxMSwxLjI1NjM1LDEuMjIyLDEuMDI5NTYsMS4wMzM3MiwxLjAzMzcyLC45NjAzOSwxLjI0NjMzLDEsMS4xMjQ1NCwuOTM1MDMsMS4wMzQyNCwxLjE5Njg3LDEuMDM0MjQsMSwxLDEsLjc3MSwxLDEsMS4xNTc0OSwxLjE1NzQ5LDEuMTU3NDksMS4xMDk0OCwuODYyNzksLjk0NDM0LC44NjI3OSwuOTQ0MzQsLjg2MTgyLDEsMSwxLjE2ODk3LDEsLjk2MDg1LC45MDEzNywxLjIxMDcsMS4xODQxNiwxLjEzOTczLC42OTgyNSwuOTcxNiwyLjEwMzM5LDEuMjkwMDQsMS4yOTAwNCwxLjIxMTcyLDEuMjkwMDQsMS4yOTAwNCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuNDI2MDMsMSwuOTk4NjIsLjk5ODYyLDEsLjg3MDI1LC44NzAyNSwuODcwMjUsLjg3MDI1LDEuMTg4NzQsMS40MjYwMywxLDEuNDI2MDMsMS40MjYwMywuOTk4NjIsMSwxLDEsMSwxLDEuMjg4NiwxLjA0MzE1LDEuMTUyOTYsMS4zNDE2MywxLDEsMSwxLjA5MTkzLDEuMDkxOTMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdO3QuU2Vnb2V1aUJvbGRNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMzMwMDgsbGluZUdhcDowfTt0LlNlZ29ldWlCb2xkSXRhbGljRmFjdG9ycz1bMS43NjczOCwxLDEsLjk4OTQ2LDEuMDM5NTksMS4wNDAxNiwxLjAyODA5LDEuMDM2LC45NzYzOSwxLjEwOTUzLDEuMjMyMDMsMS4xMTE0NCwxLjExMTQ0LDEuMTY5MzksMS4yMTIzNywuOTc1NCwxLjIxMjYxLC45NzU0LDEuNTk3NTQsMS4wMzYsMS4wMzYsMS4wMzYsMS4wMzYsMS4wMzYsMS4wMzYsMS4wMzYsMS4wMzYsMS4wMzYsMS4wMzYsLjgxMzc4LC44MTM3OCwxLjIxMjM3LDEuMjEyMzcsMS4yMTIzNywuNzM1NDEsLjk3ODQ3LC45NzM2MywuODk3MjMsLjg3ODk3LDEuMDQyNiwuNzk0MjksLjg1MjkyLC45MTE0OSwxLjA1ODE1LDEuMTQwNiwuNzk2MzEsLjkwMTI4LC44Mzg1MywxLjA0Mzk2LDEuMTA2MTUsLjk3NTUyLC45NDQzNiwuOTc1NTIsLjg4NjQxLC44MDUyNywuOTYwODMsMS4wMDEzNSwxLDEuMDY3NzcsLjk4MTcsLjkxMTQyLC45OTM2MSwxLjExMTQ0LDEuNTcyOTMsMS4xMTE0NCwxLjIxMjM3LC43NDYyNywxLjMxODE4LDEuMDY1ODUsLjk3MDQyLC44MzA1NSwuOTcwNDIsLjkzNTAzLDEuMTI2MSwuOTcwNDIsLjk3OTIyLDEuMTQyMzYsLjk0NTUyLDEuMDEwNTQsMS4xNDIzNiwxLjAyNDcxLC45NzkyMiwuOTQxNjUsLjk3MDQyLC45NzA0MiwxLjAyNzYsLjc4OTI5LDEuMTI2MSwuOTc5MjIsLjk1ODc0LDEuMDIxOTcsLjk4NTA3LC45Njc1MiwuOTcxNjgsLjk1MTA3LDEuMTY1NzksLjk1MTA3LDEuMjEyMzcsMS4wMzk1OSwxLjAzNiwxLjAzNiwxLDEuMDM2LDEuMTY1NzksLjg3MzU3LDEuMzE4MTgsMS4xODc1NCwxLjI2NzgxLDEuMDUzNTYsMS4yMTIzNywxLjE4NjIyLC43OTQ4NywuOTQ5OTQsMS4yOTAwNCwxLjI0MDQ3LDEuMjQwNDcsMS4zMTgxOCwxLC45MTQ4NCwuOTc1NCwxLjMxODE4LDEuMTM0OSwxLjI0ODY2LDEuMDUzNTYsMS4xMzkzNCwxLjE1NTc0LDEuMTczODksLjczNTQxLC45NzM2MywuOTczNjMsLjk3MzYzLC45NzM2MywuOTczNjMsLjk3MzYzLC45NDM4NSwuODc4OTcsLjc5NDI5LC43OTQyOSwuNzk0MjksLjc5NDI5LDEuMTQwNiwxLjE0MDYsMS4xNDA2LDEuMTQwNiwxLjA0MjYsMS4xMDYxNSwuOTc1NTIsLjk3NTUyLC45NzU1MiwuOTc1NTIsLjk3NTUyLDEuMjEyMzcsLjk3NTUyLDEuMDAxMzUsMS4wMDEzNSwxLjAwMTM1LDEuMDAxMzUsLjkxMTQyLC45NDQzNiwuOTg3MjEsMS4wNjU4NSwxLjA2NTg1LDEuMDY1ODUsMS4wNjU4NSwxLjA2NTg1LDEuMDY1ODUsLjk2NzA1LC44MzA1NSwuOTM1MDMsLjkzNTAzLC45MzUwMywuOTM1MDMsMS4xNDIzNiwxLjE0MjM2LDEuMTQyMzYsMS4xNDIzNiwuOTMxMjUsLjk3OTIyLC45NDE2NSwuOTQxNjUsLjk0MTY1LC45NDE2NSwuOTQxNjUsMS4yOTAwNCwuOTQxNjUsLjk3OTIyLC45NzkyMiwuOTc5MjIsLjk3OTIyLC45Njc1MiwuOTcwNDIsLjk2NzUyLC45NzM2MywxLjA2NTg1LC45NzM2MywxLjA2NTg1LC45NzM2MywxLjA2NTg1LC44Nzg5NywuODMwNTUsLjg3ODk3LC44MzA1NSwuODc4OTcsLjgzMDU1LC44Nzg5NywuODMwNTUsMS4wNDI2LDEuMDAzMywxLjA0MjYsLjk3MDQyLC43OTQyOSwuOTM1MDMsLjc5NDI5LC45MzUwMywuNzk0MjksLjkzNTAzLC43OTQyOSwuOTM1MDMsLjc5NDI5LC45MzUwMywuOTExNDksLjk3MDQyLC45MTE0OSwuOTcwNDIsLjkxMTQ5LC45NzA0MiwxLDEsMS4wNTgxNSwuOTc5MjIsMS4wNTgxNSwuOTc5MjIsMS4xNDA2LDEuMTQyMzYsMS4xNDA2LDEuMTQyMzYsMS4xNDA2LDEuMTQyMzYsMS4xNDA2LDEuMTQyMzYsMS4xNDA2LDEuMTQyMzYsLjk3NDQxLDEuMDQzMDIsLjc5NjMxLDEuMDE1ODIsMSwxLDEuMDEwNTQsLjgzODUzLDEuMTQyMzYsMSwxLC44Mzg1MywxLjA5MTI1LC44Mzg1MywuOTA0MTgsLjgzODUzLDEuMTk1MDgsMS4xMDYxNSwuOTc5MjIsMSwxLDEuMTA2MTUsLjk3OTIyLDEuMDEwMzQsMS4xMDQ2NiwuOTc5MjIsLjk3NTUyLC45NDE2NSwuOTc1NTIsLjk0MTY1LC45NzU1MiwuOTQxNjUsLjkxNjAyLC45MTk4MSwuODg2NDEsMS4wMjc2LDEsMSwuODg2NDEsMS4wMjc2LC44MDUyNywuNzg5MjksLjgwNTI3LC43ODkyOSwuODA1MjcsLjc4OTI5LC44MDUyNywuNzg5MjksMSwxLC45NjA4MywxLjA1NDAzLC45NTkyMywxLjE2ODYyLDEuMDAxMzUsLjk3OTIyLDEuMDAxMzUsLjk3OTIyLDEuMDAxMzUsLjk3OTIyLDEuMDAxMzUsLjk3OTIyLDEuMDAxMzUsLjk3OTIyLDEuMDAxMzUsLjk3OTIyLDEuMDY3NzcsMS4wMjE5NywuOTExNDIsLjk2NzUyLC45MTE0MiwuOTkzNjEsLjk3MTY4LC45OTM2MSwuOTcxNjgsLjk5MzYxLC45NzE2OCwxLjIzMTk5LDEuMDM2LC45NzM2MywxLjA2NTg1LC45NDM4NSwuOTY3MDUsLjk3NTUyLC45NDE2NSwxLDEsLjk2MDgzLDEuMTI2MSwxLjMxODE4LDEuMzE4MTgsMS4zMTgxOCwxLjMxODE4LDEuMzE4MTgsMS4zMTgxOCwxLjMxODE4LDEuMzE4MTgsMS4zMTgxOCwuOTUxNjEsMS4yNzEyNiwxLjAwODExLC44MzI4NCwuNzc3MDIsLjk5MTM3LC45NTI1MywxLjAzNDcsLjg2MTQyLDEuMDcyMDUsMS4xNDIzNiwuOTczNjMsLjg5NzIzLC44Njg2OSwxLjA5ODE4LC43OTQyOSwuOTkzNjEsMS4wNTgxNSwuOTc1NTIsMS4xNDA2LC45MDEyOCwxLjA2NjYyLDEuMDQzOTYsMS4xMDYxNSwuODQ5MTgsLjk3NTUyLDEuMDQ2OTQsLjk0NDM2LC45ODAxNSwuOTYwODMsLjkxMTQyLDEuMDAzNTYsLjk4MTcsMS4wMTk0NSwuOTg5OTksMS4xNDA2LC45MTE0MiwxLjA0OTYxLC45ODk4LDEuMDA2MzksMS4xNDIzNiwxLjA3NTE0LDEuMDQ5NjEsLjk5NjA3LDEuMDI4OTcsMS4wMDgsLjk4OTgsLjk1MTM0LDEuMDA2MzksMS4xMTEyMSwxLjE0MjM2LDEuMDA1MTgsLjk3OTgxLDEuMDIxODYsMSwxLjA4NTc4LC45NDE2NSwuOTkzMTQsLjk4Mzg3LC45MzAyOCwuOTMzNzcsMS4zNTEyNSwxLjA3NTE0LDEuMTA2ODcsLjkzNDkxLDEuMDQyMzIsMS4wMDM1MSwxLjE0MjM2LDEuMDc1MTQsLjk0MTY1LDEuMDc1MTQsMS4wMDM1MSwuNzk0MjksMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wOTA5NywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTM1MDMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk2NjA5LDEsMSwxLDEsMSwxLDEuMDY3NzcsMS4wMjE5NywxLjA2Nzc3LDEuMDIxOTcsMS4wNjc3NywxLjAyMTk3LC45MTE0MiwuOTY3NTIsMSwxLjIxMjYxLC44OTkwMywxLDEsLjc1MTU1LDEuMDQ3NDUsMS4wNDc0NSwxLjA0NzQ1LDEuMDQzOTQsLjk4NjMzLC45ODYzMywuOTg2MzMsLjcyOTU5LC43Mjk1OSwxLjIwNTAyLC45MTQwNiwxLjI2NTE0LDEuMjIyLDEuMDI5NTYsMS4wMzM3MiwxLjAzMzcyLC45NjAzOSwxLjI0NjMzLDEsMS4wOTEyNSwuOTMzMjcsMS4wMzMzNiwxLjE2NTQxLDEuMDM2LDEsMSwxLC43NzEsMSwxLDEuMTU1NzQsMS4xNTU3NCwxLjE1NTc0LDEuMTU1NzQsLjg2MzY0LC45NDQzNCwuODYyNzksLjk0NDM0LC44NjIyNCwxLDEsMS4xNjc5OCwxLC45NjA4NSwuOTAwNjgsMS4yMTIzNywxLjE4NDE2LDEuMTM5MDQsLjY5ODI1LC45NzE2LDIuMTAzMzksMS4yOTAwNCwxLjI5MDA0LDEuMjEzMzksMS4yOTAwNCwxLjI5MDA0LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS40MjYwMywxLC45OTg2MiwuOTk4NjIsMSwuODcwMjUsLjg3MDI1LC44NzAyNSwuODcwMjUsMS4xODc3NSwxLjQyNjAzLDEsMS40MjYwMywxLjQyNjAzLC45OTg2MiwxLDEsMSwxLDEsMS4yODg2LDEuMDQzMTUsMS4xNTI5NiwxLjM0MTYzLDEsMSwxLDEuMTMyNjksMS4xMzI2OSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV07dC5TZWdvZXVpQm9sZEl0YWxpY01ldHJpY3M9e2xpbmVIZWlnaHQ6MS4zMzAwOCxsaW5lR2FwOjB9O3QuU2Vnb2V1aUl0YWxpY0ZhY3RvcnM9WzEuNzY3MzgsMSwxLC45ODk0NiwxLjE0NzYzLDEuMDUzNjUsMS4wNjIzNCwuOTY5MjcsLjkyNTg2LDEuMTUzNzMsMS4xODQxNCwuOTEzNDksLjkxMzQ5LDEuMDc0MDMsMS4xNzMwOCwuNzgzODMsMS4yMDA4OCwuNzgzODMsMS40MjUzMSwuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjc4MzgzLC43ODM4MywxLjE3MzA4LDEuMTczMDgsMS4xNzMwOCwuNzczNDksLjk0NTY1LC45NDcyOSwuODU5NDQsLjg4NTA2LC45ODU4LC43NDgxNywuODAwMTYsLjg4NDQ5LC45ODAzOSwuOTU3ODIsLjY5MjM4LC44OTg5OCwuODMyMzEsLjk4MTgzLDEuMDM5ODksLjk2OTI0LC44NjIzNywuOTY5MjQsLjgwNTk1LC43NDUyNCwuODYwOTEsLjk1NDAyLC45NDE0MywuOTg0NDgsLjg4NTgsLjgzMDg5LC45MzI4NSwxLjA5NDksMS4zOTAxNiwxLjA5NDksMS40NTk5NCwuNzQ2MjcsMS4wNDgzOSwuOTc0NTQsLjk3NDU0LC44NzIwNywuOTc0NTQsLjg3NTMzLDEuMDYxNTEsLjk3NDU0LDEuMDAxNzYsMS4xNjQ4NCwxLjA4MTMyLC45ODA0NywxLjE2NDg0LDEuMDI5ODksMS4wMTA1NCwuOTYyMjUsLjk3NDU0LC45NzQ1NCwxLjA2NTk4LC43OTAwNCwxLjE2MzQ0LDEuMDAzNTEsLjk0NjI5LC45OTczLC45MTAxNiwuOTY3NzcsLjkwNDMsLjkxMDgyLC45MjQ4MSwuOTEwODIsMS4xNzMwOCwuOTU3NDgsLjk2OTI3LC45NjkyNywxLC45NjkyNywuOTI0ODEsLjgwNTk3LDEuMDQ4MzksMS4yMzM5MywxLjE3ODEsLjkyNDUsMS4xNzMwOCwxLjIwODA4LC42MzIxOCwuOTQyNjEsMS4yNDgyMiwxLjA5OTcxLDEuMDk5NzEsMS4wNDgzOSwxLC44NTI3MywuNzgwMzIsMS4wNDgzOSwxLjA5OTcxLDEuMjIzMjYsLjkyNDUsMS4wOTgzNiwxLjEzNTI1LDEuMTUyMjIsLjcwNDI0LC45NDcyOSwuOTQ3MjksLjk0NzI5LC45NDcyOSwuOTQ3MjksLjk0NzI5LC44NTQ5OCwuODg1MDYsLjc0ODE3LC43NDgxNywuNzQ4MTcsLjc0ODE3LC45NTc4MiwuOTU3ODIsLjk1NzgyLC45NTc4MiwuOTg1OCwxLjAzOTg5LC45NjkyNCwuOTY5MjQsLjk2OTI0LC45NjkyNCwuOTY5MjQsMS4xNzMwOCwuOTY5MjQsLjk1NDAyLC45NTQwMiwuOTU0MDIsLjk1NDAyLC44MzA4OSwuODYyMzcsLjg4NDA5LC45NzQ1NCwuOTc0NTQsLjk3NDU0LC45NzQ1NCwuOTc0NTQsLjk3NDU0LC45MjkxNiwuODcyMDcsLjg3NTMzLC44NzUzMywuODc1MzMsLjg3NTMzLC45MzE0NiwuOTMxNDYsLjkzMTQ2LC45MzE0NiwuOTM4NTQsMS4wMTA1NCwuOTYyMjUsLjk2MjI1LC45NjIyNSwuOTYyMjUsLjk2MjI1LDEuMjQ4MjIsLjg3NjEsMS4wMDM1MSwxLjAwMzUxLDEuMDAzNTEsMS4wMDM1MSwuOTY3NzcsLjk3NDU0LC45Njc3NywuOTQ3MjksLjk3NDU0LC45NDcyOSwuOTc0NTQsLjk0NzI5LC45NzQ1NCwuODg1MDYsLjg3MjA3LC44ODUwNiwuODcyMDcsLjg4NTA2LC44NzIwNywuODg1MDYsLjg3MjA3LC45ODU4LC45NTM5MSwuOTg1OCwuOTc0NTQsLjc0ODE3LC44NzUzMywuNzQ4MTcsLjg3NTMzLC43NDgxNywuODc1MzMsLjc0ODE3LC44NzUzMywuNzQ4MTcsLjg3NTMzLC44ODQ0OSwuOTc0NTQsLjg4NDQ5LC45NzQ1NCwuODg0NDksLjk3NDU0LDEsMSwuOTgwMzksMS4wMDE3NiwuOTgwMzksMS4wMDE3NiwuOTU3ODIsLjkzMTQ2LC45NTc4MiwuOTMxNDYsLjk1NzgyLC45MzE0NiwuOTU3ODIsMS4xNjQ4NCwuOTU3ODIsLjkzMTQ2LC44NDQyMSwxLjEyNzYxLC42OTIzOCwxLjA4MTMyLDEsMSwuOTgwNDcsLjgzMjMxLDEuMTY0ODQsMSwxLC44NDcyMywxLjA0ODYxLC44NDcyMywuNzg3NTUsLjgzMjMxLDEuMjM3MzYsMS4wMzk4OSwxLjAxMDU0LDEsMSwxLjAzOTg5LDEuMDEwNTQsLjk4NTcsMS4wMzg0OSwxLjAxMDU0LC45NjkyNCwuOTYyMjUsLjk2OTI0LC45NjIyNSwuOTY5MjQsLjk2MjI1LC45MjM4MywuOTAxNzEsLjgwNTk1LDEuMDY1OTgsMSwxLC44MDU5NSwxLjA2NTk4LC43NDUyNCwuNzkwMDQsLjc0NTI0LC43OTAwNCwuNzQ1MjQsLjc5MDA0LC43NDUyNCwuNzkwMDQsMSwxLC44NjA5MSwxLjAyNzU5LC44NTc3MSwxLjE2MzQ0LC45NTQwMiwxLjAwMzUxLC45NTQwMiwxLjAwMzUxLC45NTQwMiwxLjAwMzUxLC45NTQwMiwxLjAwMzUxLC45NTQwMiwxLjAwMzUxLC45NTQwMiwxLjAwMzUxLC45ODQ0OCwuOTk3MywuODMwODksLjk2Nzc3LC44MzA4OSwuOTMyODUsLjkwNDMsLjkzMjg1LC45MDQzLC45MzI4NSwuOTA0MywxLjMxODY4LC45NjkyNywuOTQ3MjksLjk3NDU0LC44NTQ5OCwuOTI5MTYsLjk2OTI0LC44NzYxLDEsMSwuODYwOTEsMS4xNjM0NCwxLjA0ODM5LDEuMDQ4MzksMS4wNDgzOSwxLjA0ODM5LDEuMDQ4MzksMS4wNDgzOSwxLjA0ODM5LDEuMDQ4MzksMS4wNDgzOSwuODE5NjUsLjgxOTY1LC45NDcyOSwuNzgwMzIsLjcxMDIyLC45MDg4MywuODQxNzEsLjk5ODc3LC43NzU5NiwxLjA1NzM0LDEuMiwuOTQ3MjksLjg1OTQ0LC44Mjc5MSwuOTYwNywuNzQ4MTcsLjkzMjg1LC45ODAzOSwuOTY5MjQsLjk1NzgyLC44OTg5OCwuOTgzMTYsLjk4MTgzLDEuMDM5ODksLjc4NjE0LC45NjkyNCwuOTc2NDIsLjg2MjM3LC44NjA3NSwuODYwOTEsLjgzMDg5LC45MDA4MiwuODg1OCwuOTcyOTYsMS4wMTI4NCwuOTU3ODIsLjgzMDg5LDEuMDk3NiwxLjA0LDEuMDMzNDIsMS4yLDEuMDY3NSwxLjA5NzYsLjk4MjA1LDEuMDM4MDksMS4wNTA5NywxLjA0LC45NTM2NCwxLjAzMzQyLDEuMDU0MDEsMS4yLDEuMDIxNDgsMS4wMTE5LDEuMDQ3MjQsMS4wMTI3LDEuMDI3MzIsLjk2MjI1LC44OTY1LC45Nzc4MywuOTM1NzQsLjk0ODE4LDEuMzA2NzksMS4wNjc1LDEuMTE4MjYsLjk5ODIxLDEuMDU1NywxLjAzMjYsMS4yLDEuMDY3NSwuOTYyMjUsMS4wNjc1LDEuMDMyNiwuNzQ4MTcsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wMzc1NCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODc1MzMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk4NzA1LDEsMSwxLDEsMSwxLC45ODQ0OCwuOTk3MywuOTg0NDgsLjk5NzMsLjk4NDQ4LC45OTczLC44MzA4OSwuOTY3NzcsMSwxLjIwMDg4LC44OTkwMywxLDEsLjc1MTU1LC45NDk0NSwuOTQ5NDUsLjk0OTQ1LC45NDk0NSwxLjEyMzE3LDEuMTIzMTcsMS4xMjMxNywuNjc2MDMsLjY3NjAzLDEuMTU2MjEsLjczNTg0LDEuMjExOTEsMS4yMjEzNSwxLjA2NDgzLC45NDg2OCwuOTQ4NjgsLjk1OTk2LDEuMjQ2MzMsMSwxLjA3NDk3LC44NzcwOSwuOTY5MjcsMS4wMTQ3MywuOTY5MjcsMSwxLDEsLjc3Mjk1LDEsMSwxLjA5ODM2LDEuMDk4MzYsMS4wOTgzNiwxLjAxNTIyLC44NjMyMSwuOTQ0MzQsLjg2NDksLjk0NDM0LC44NjE4MiwxLDEsMS4wODMsMSwuOTE1NzgsLjg2NDM4LDEuMTczMDgsMS4xODQxNiwxLjE0NTg5LC42OTgyNSwuOTc2MjIsMS45Njc5MSwxLjI0ODIyLDEuMjQ4MjIsMS4xNzMwOCwxLjI0ODIyLDEuMjQ4MjIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjQyNjAzLDEsLjk5ODYyLC45OTg2MiwxLC44NzAyNSwuODcwMjUsLjg3MDI1LC44NzAyNSwxLjE3OTg0LDEuNDI2MDMsMSwxLjQyNjAzLDEuNDI2MDMsLjk5ODYyLDEsMSwxLDEsMSwxLjI4ODYsMS4wNDMxNSwxLjE1Mjk2LDEuMzQxNjMsMSwxLDEsMS4xMDc0MiwxLjEwNzQyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXTt0LlNlZ29ldWlJdGFsaWNNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMzMwMDgsbGluZUdhcDowfTt0LlNlZ29ldWlSZWd1bGFyRmFjdG9ycz1bMS43NjczOCwxLDEsLjk4NTk0LDEuMDIyODUsMS4xMDQ1NCwxLjA2MjM0LC45NjkyNywuOTIwMzcsMS4xOTk4NSwxLjIwNDYsLjkwNjE2LC45MDYxNiwxLjA3MTUyLDEuMTcxNCwuNzgwMzIsMS4yMDA4OCwuNzgwMzIsMS40MDI0NiwuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjc4MDMyLC43ODAzMiwxLjE3MTQsMS4xNzE0LDEuMTcxNCwuODA1OTcsLjk0MDg0LC45NjcwNiwuODU5NDQsLjg1NzM0LC45NzA5MywuNzU4NDIsLjc5OTM2LC44ODE5OCwuOTgzMSwuOTU3ODIsLjcxMzg3LC44Njk2OSwuODQ2MzYsMS4wNzc5NiwxLjAzNTg0LC45NjkyNCwuODM5NjgsLjk2OTI0LC44MjgyNiwuNzk2NDksLjg1NzcxLC45NTEzMiwuOTMxMTksLjk4OTY1LC44ODQzMywuODI4NywuOTMzNjUsMS4wODYxMiwxLjM2MzgsMS4wODYxMiwxLjQ1Nzg2LC43NDYyNywuODA0OTksLjkxNDg0LDEuMDU3MDcsLjkyMzgzLDEuMDU4ODIsLjk0MDMsMS4xMjY1NCwxLjA1ODgyLDEuMDE3NTYsMS4wOTAxMSwxLjA5MDExLC45OTQxNCwxLjA5MDExLDEuMDM0LDEuMDE3NTYsMS4wNTM1NiwxLjA1NzA3LDEuMDU4ODIsMS4wNDM5OSwuODQ4NjMsMS4yMTk2OCwxLjAxNzU2LC45NTgwMSwxLjAwMDY4LC45MTc5NywuOTY3NzcsLjkwNDMsLjkwMzUxLC45MjEwNSwuOTAzNTEsMS4xNzE0LC44NTMzNywuOTY5MjcsLjk2OTI3LC45OTkxMiwuOTY5MjcsLjkyMTA1LC44MDU5NywxLjI0MzQsMS4yMDgwOCwxLjA1OTM3LC45MDk1NywxLjE3MTQsMS4yMDgwOCwuNzUxNTUsLjk0MjYxLDEuMjQ2NDQsMS4wOTk3MSwxLjA5OTcxLC44NDc1MSwxLC44NTI3MywuNzgwMzIsLjYxNTg0LDEuMDU0MjUsMS4xNzkxNCwuOTA5NTcsMS4wODY2NSwxLjExNTkzLDEuMTQxNjksLjczMzgxLC45NjcwNiwuOTY3MDYsLjk2NzA2LC45NjcwNiwuOTY3MDYsLjk2NzA2LC44NjAzNSwuODU3MzQsLjc1ODQyLC43NTg0MiwuNzU4NDIsLjc1ODQyLC45NTc4MiwuOTU3ODIsLjk1NzgyLC45NTc4MiwuOTcwOTMsMS4wMzU4NCwuOTY5MjQsLjk2OTI0LC45NjkyNCwuOTY5MjQsLjk2OTI0LDEuMTcxNCwuOTY5MjQsLjk1MTMyLC45NTEzMiwuOTUxMzIsLjk1MTMyLC44Mjg3LC44Mzk2OCwuODkwNDksLjkxNDg0LC45MTQ4NCwuOTE0ODQsLjkxNDg0LC45MTQ4NCwuOTE0ODQsLjkzNTc1LC45MjM4MywuOTQwMywuOTQwMywuOTQwMywuOTQwMywuODcxNywuODcxNywuODcxNywuODcxNywxLjAwNTI3LDEuMDE3NTYsMS4wNTM1NiwxLjA1MzU2LDEuMDUzNTYsMS4wNTM1NiwxLjA1MzU2LDEuMjQ2NDQsLjk1OTIzLDEuMDE3NTYsMS4wMTc1NiwxLjAxNzU2LDEuMDE3NTYsLjk2Nzc3LDEuMDU3MDcsLjk2Nzc3LC45NjcwNiwuOTE0ODQsLjk2NzA2LC45MTQ4NCwuOTY3MDYsLjkxNDg0LC44NTczNCwuOTIzODMsLjg1NzM0LC45MjM4MywuODU3MzQsLjkyMzgzLC44NTczNCwuOTIzODMsLjk3MDkzLDEuMDk2OSwuOTcwOTMsMS4wNTg4MiwuNzU4NDIsLjk0MDMsLjc1ODQyLC45NDAzLC43NTg0MiwuOTQwMywuNzU4NDIsLjk0MDMsLjc1ODQyLC45NDAzLC44ODE5OCwxLjA1ODgyLC44ODE5OCwxLjA1ODgyLC44ODE5OCwxLjA1ODgyLDEsMSwuOTgzMSwxLjAxNzU2LC45ODMxLDEuMDE3NTYsLjk1NzgyLC44NzE3LC45NTc4MiwuODcxNywuOTU3ODIsLjg3MTcsLjk1NzgyLDEuMDkwMTEsLjk1NzgyLC44NzE3LC44NDc4NCwxLjExNTUxLC43MTM4NywxLjA5MDExLDEsMSwuOTk0MTQsLjg0NjM2LDEuMDkwMTEsMSwxLC44NDYzNiwxLjA1MzYsLjg0NjM2LC45NDI5OCwuODQ2MzYsMS4yMzI5NywxLjAzNTg0LDEuMDE3NTYsMSwxLDEuMDM1ODQsMS4wMTc1NiwxLjAwMzIzLDEuMDM0NDQsMS4wMTc1NiwuOTY5MjQsMS4wNTM1NiwuOTY5MjQsMS4wNTM1NiwuOTY5MjQsMS4wNTM1NiwuOTMwNjYsLjk4MjkzLC44MjgyNiwxLjA0Mzk5LDEsMSwuODI4MjYsMS4wNDM5OSwuNzk2NDksLjg0ODYzLC43OTY0OSwuODQ4NjMsLjc5NjQ5LC44NDg2MywuNzk2NDksLjg0ODYzLDEsMSwuODU3NzEsMS4xNzMxOCwuODU3NzEsMS4yMTk2OCwuOTUxMzIsMS4wMTc1NiwuOTUxMzIsMS4wMTc1NiwuOTUxMzIsMS4wMTc1NiwuOTUxMzIsMS4wMTc1NiwuOTUxMzIsMS4wMTc1NiwuOTUxMzIsMS4wMTc1NiwuOTg5NjUsMS4wMDA2OCwuODI4NywuOTY3NzcsLjgyODcsLjkzMzY1LC45MDQzLC45MzM2NSwuOTA0MywuOTMzNjUsLjkwNDMsMS4wODU3MSwuOTY5MjcsLjk2NzA2LC45MTQ4NCwuODYwMzUsLjkzNTc1LC45NjkyNCwuOTU5MjMsMSwxLC44NTc3MSwxLjIxOTY4LDEuMTE0MzcsMS4xMTQzNywuOTMxMDksLjkxMjAyLC42MDQxMSwuODQxNjQsLjU1NTcyLDEuMDExNzMsLjk3MzYxLC44MTgxOCwuODE4MTgsLjk2NjM1LC43ODAzMiwuNzI3MjcsLjkyMzY2LC45ODYwMSwxLjAzNDA1LC43Nzk2OCwxLjA5Nzk5LDEuMiwuOTY3MDYsLjg1OTQ0LC44NTYzOCwuOTY0OTEsLjc1ODQyLC45MzM2NSwuOTgzMSwuOTY5MjQsLjk1NzgyLC44Njk2OSwuOTQxNTIsMS4wNzc5NiwxLjAzNTg0LC43ODQzNywuOTY5MjQsLjk4NzE1LC44Mzk2OCwuODM0OTEsLjg1NzcxLC44Mjg3LC45NDQ5MiwuODg0MzMsLjkyODcsMS4wMDk4LC45NTc4MiwuODI4NywxLjA2MjUsLjk4MjQ4LDEuMDM0MjQsMS4yLDEuMDEwNzEsMS4wNjI1LC45NTI0NiwxLjAzODA5LDEuMDQ5MTIsLjk4MjQ4LDEuMDAyMjEsMS4wMzQyNCwxLjA1NDQzLDEuMiwxLjA0Nzg1LC45OTYwOSwxLjAwMTY5LDEuMDUxNzYsLjk5MzQ2LDEuMDUzNTYsLjkwODcsMS4wMzAwNCwuOTU1NDIsLjkzMTE3LDEuMjMzNjIsMS4wMTA3MSwxLjA3ODMxLDEuMDI1MTIsMS4wNTIwNSwxLjAzNTAyLDEuMiwxLjAxMDcxLDEuMDUzNTYsMS4wMTA3MSwxLjAzNTAyLC43NTg0MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjAzNzE5LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45NDAzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDQwMjEsMSwxLDEsMSwxLDEsLjk4OTY1LDEuMDAwNjgsLjk4OTY1LDEuMDAwNjgsLjk4OTY1LDEuMDAwNjgsLjgyODcsLjk2Nzc3LDEsMS4yMDA4OCwuODk5MDMsMSwxLC43NTE1NSwxLjAzMDc3LDEuMDMwNzcsMS4wMzA3NywxLjAzMDc3LDEuMTMxOTYsMS4xMzE5NiwxLjEzMTk2LC42NzQyOCwuNjc0MjgsMS4xNjAzOSwuNzMyOTEsMS4yMDk5NiwxLjIyMTM1LDEuMDY0ODMsLjk0ODY4LC45NDg2OCwuOTU5OTYsMS4yNDYzMywxLDEuMDc0OTcsLjg3Nzk2LC45NjkyNywxLjAxNTE4LC45NjkyNywxLDEsMSwuNzcyOTUsMSwxLDEuMTA1MzksMS4xMDUzOSwxLjExMzU4LDEuMDY5NjcsLjg2Mjc5LC45NDQzNCwuODYyNzksLjk0NDM0LC44NjE4MiwxLDEsMS4wODMsMSwuOTE1NzgsLjg2NTA3LDEuMTcxNCwxLjE4NDE2LDEuMTQ1ODksLjY5ODI1LC45NzYyMiwxLjk2OTcsMS4yNDgyMiwxLjI0ODIyLDEuMTcyMzgsMS4yNDgyMiwxLjI0ODIyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS40MjYwMywxLC45OTg2MiwuOTk4NjIsMSwuODcwMjUsLjg3MDI1LC44NzAyNSwuODcwMjUsMS4xODA4MywxLjQyNjAzLDEsMS40MjYwMywxLjQyNjAzLC45OTg2MiwxLDEsMSwxLDEsMS4yODg2LDEuMDQzMTUsMS4xNTI5NiwxLjM0MTYzLDEsMSwxLDEuMTA5MzgsMS4xMDkzOCwxLDEsMSwxLjA1NDI1LDEuMDk5NzEsMS4wOTk3MSwxLjA5OTcxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV07dC5TZWdvZXVpUmVndWxhck1ldHJpY3M9e2xpbmVIZWlnaHQ6MS4zMzAwOCxsaW5lR2FwOjB9fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuUG9zdFNjcmlwdEV2YWx1YXRvcj10LlBvc3RTY3JpcHRDb21waWxlcj10LlBERkZ1bmN0aW9uRmFjdG9yeT12b2lkIDA7dC5pc1BERkZ1bmN0aW9uPWZ1bmN0aW9uIGlzUERGRnVuY3Rpb24oZSl7bGV0IHQ7aWYoIm9iamVjdCIhPXR5cGVvZiBlKXJldHVybiExO2lmKGUgaW5zdGFuY2VvZiByLkRpY3QpdD1lO2Vsc2V7aWYoIShlIGluc3RhbmNlb2Ygcy5CYXNlU3RyZWFtKSlyZXR1cm4hMTt0PWUuZGljdH1yZXR1cm4gdC5oYXMoIkZ1bmN0aW9uVHlwZSIpfTt2YXIgcj1hKDMpLG49YSgyKSxpPWEoNTYpLHM9YSg1KSxvPWEoNTcpO3QuUERGRnVuY3Rpb25GYWN0b3J5PWNsYXNzIFBERkZ1bmN0aW9uRmFjdG9yeXtjb25zdHJ1Y3Rvcih7eHJlZjplLGlzRXZhbFN1cHBvcnRlZDp0PSEwfSl7dGhpcy54cmVmPWU7dGhpcy5pc0V2YWxTdXBwb3J0ZWQ9ITEhPT10fWNyZWF0ZShlKXtjb25zdCB0PXRoaXMuZ2V0Q2FjaGVkKGUpO2lmKHQpcmV0dXJuIHQ7Y29uc3QgYT1QREZGdW5jdGlvbi5wYXJzZSh7eHJlZjp0aGlzLnhyZWYsaXNFdmFsU3VwcG9ydGVkOnRoaXMuaXNFdmFsU3VwcG9ydGVkLGZuOmUgaW5zdGFuY2VvZiByLlJlZj90aGlzLnhyZWYuZmV0Y2goZSk6ZX0pO3RoaXMuX2NhY2hlKGUsYSk7cmV0dXJuIGF9Y3JlYXRlRnJvbUFycmF5KGUpe2NvbnN0IHQ9dGhpcy5nZXRDYWNoZWQoZSk7aWYodClyZXR1cm4gdDtjb25zdCBhPVBERkZ1bmN0aW9uLnBhcnNlQXJyYXkoe3hyZWY6dGhpcy54cmVmLGlzRXZhbFN1cHBvcnRlZDp0aGlzLmlzRXZhbFN1cHBvcnRlZCxmbk9iajplIGluc3RhbmNlb2Ygci5SZWY/dGhpcy54cmVmLmZldGNoKGUpOmV9KTt0aGlzLl9jYWNoZShlLGEpO3JldHVybiBhfWdldENhY2hlZChlKXtsZXQgdDtlIGluc3RhbmNlb2Ygci5SZWY/dD1lOmUgaW5zdGFuY2VvZiByLkRpY3Q/dD1lLm9iaklkOmUgaW5zdGFuY2VvZiBzLkJhc2VTdHJlYW0mJih0PWUuZGljdCYmZS5kaWN0Lm9iaklkKTtpZih0KXtjb25zdCBlPXRoaXMuX2xvY2FsRnVuY3Rpb25DYWNoZS5nZXRCeVJlZih0KTtpZihlKXJldHVybiBlfXJldHVybiBudWxsfV9jYWNoZShlLHQpe2lmKCF0KXRocm93IG5ldyBFcnJvcignUERGRnVuY3Rpb25GYWN0b3J5Ll9jYWNoZSAtIGV4cGVjdGVkICJwYXJzZWRGdW5jdGlvbiIgYXJndW1lbnQuJyk7bGV0IGE7ZSBpbnN0YW5jZW9mIHIuUmVmP2E9ZTplIGluc3RhbmNlb2Ygci5EaWN0P2E9ZS5vYmpJZDplIGluc3RhbmNlb2Ygcy5CYXNlU3RyZWFtJiYoYT1lLmRpY3QmJmUuZGljdC5vYmpJZCk7YSYmdGhpcy5fbG9jYWxGdW5jdGlvbkNhY2hlLnNldChudWxsLGEsdCl9Z2V0IF9sb2NhbEZ1bmN0aW9uQ2FjaGUoKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiX2xvY2FsRnVuY3Rpb25DYWNoZSIsbmV3IG8uTG9jYWxGdW5jdGlvbkNhY2hlKX19O2Z1bmN0aW9uIHRvTnVtYmVyQXJyYXkoZSl7aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIG51bGw7Y29uc3QgdD1lLmxlbmd0aDtmb3IobGV0IGE9MDthPHQ7YSsrKWlmKCJudW1iZXIiIT10eXBlb2YgZVthXSl7Y29uc3QgYT1uZXcgQXJyYXkodCk7Zm9yKGxldCByPTA7cjx0O3IrKylhW3JdPStlW3JdO3JldHVybiBhfXJldHVybiBlfWNsYXNzIFBERkZ1bmN0aW9ue3N0YXRpYyBnZXRTYW1wbGVBcnJheShlLHQsYSxyKXtsZXQgbixpLHM9MTtmb3Iobj0wLGk9ZS5sZW5ndGg7bjxpO24rKylzKj1lW25dO3MqPXQ7Y29uc3Qgbz1uZXcgQXJyYXkocyk7bGV0IGM9MCxsPTA7Y29uc3QgaD0xLygyKiphLTEpLHU9ci5nZXRCeXRlcygocyphKzcpLzgpO2xldCBkPTA7Zm9yKG49MDtuPHM7bisrKXtmb3IoO2M8YTspe2w8PD04O2x8PXVbZCsrXTtjKz04fWMtPWE7b1tuXT0obD4+YykqaDtsJj0oMTw8YyktMX1yZXR1cm4gb31zdGF0aWMgcGFyc2Uoe3hyZWY6ZSxpc0V2YWxTdXBwb3J0ZWQ6dCxmbjphfSl7Y29uc3Qgcj1hLmRpY3R8fGE7c3dpdGNoKHIuZ2V0KCJGdW5jdGlvblR5cGUiKSl7Y2FzZSAwOnJldHVybiB0aGlzLmNvbnN0cnVjdFNhbXBsZWQoe3hyZWY6ZSxpc0V2YWxTdXBwb3J0ZWQ6dCxmbjphLGRpY3Q6cn0pO2Nhc2UgMTpicmVhaztjYXNlIDI6cmV0dXJuIHRoaXMuY29uc3RydWN0SW50ZXJwb2xhdGVkKHt4cmVmOmUsaXNFdmFsU3VwcG9ydGVkOnQsZGljdDpyfSk7Y2FzZSAzOnJldHVybiB0aGlzLmNvbnN0cnVjdFN0aWNoZWQoe3hyZWY6ZSxpc0V2YWxTdXBwb3J0ZWQ6dCxkaWN0OnJ9KTtjYXNlIDQ6cmV0dXJuIHRoaXMuY29uc3RydWN0UG9zdFNjcmlwdCh7eHJlZjplLGlzRXZhbFN1cHBvcnRlZDp0LGZuOmEsZGljdDpyfSl9dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVua25vd24gdHlwZSBvZiBmdW5jdGlvbiIpfXN0YXRpYyBwYXJzZUFycmF5KHt4cmVmOmUsaXNFdmFsU3VwcG9ydGVkOnQsZm5PYmo6YX0pe2lmKCFBcnJheS5pc0FycmF5KGEpKXJldHVybiB0aGlzLnBhcnNlKHt4cmVmOmUsaXNFdmFsU3VwcG9ydGVkOnQsZm46YX0pO2NvbnN0IHI9W107Zm9yKGNvbnN0IG4gb2YgYSlyLnB1c2godGhpcy5wYXJzZSh7eHJlZjplLGlzRXZhbFN1cHBvcnRlZDp0LGZuOmUuZmV0Y2hJZlJlZihuKX0pKTtyZXR1cm4gZnVuY3Rpb24oZSx0LGEsbil7Zm9yKGxldCBpPTAscz1yLmxlbmd0aDtpPHM7aSsrKXJbaV0oZSx0LGEsbitpKX19c3RhdGljIGNvbnN0cnVjdFNhbXBsZWQoe3hyZWY6ZSxpc0V2YWxTdXBwb3J0ZWQ6dCxmbjphLGRpY3Q6cn0pe2Z1bmN0aW9uIHRvTXVsdGlBcnJheShlKXtjb25zdCB0PWUubGVuZ3RoLGE9W107bGV0IHI9MDtmb3IobGV0IG49MDtuPHQ7bis9MilhW3IrK109W2Vbbl0sZVtuKzFdXTtyZXR1cm4gYX1mdW5jdGlvbiBpbnRlcnBvbGF0ZShlLHQsYSxyLG4pe3JldHVybiByKyhuLXIpLyhhLXQpKihlLXQpfWxldCBpPXRvTnVtYmVyQXJyYXkoci5nZXRBcnJheSgiRG9tYWluIikpLHM9dG9OdW1iZXJBcnJheShyLmdldEFycmF5KCJSYW5nZSIpKTtpZighaXx8IXMpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk5vIGRvbWFpbiBvciByYW5nZSIpO2NvbnN0IG89aS5sZW5ndGgvMixjPXMubGVuZ3RoLzI7aT10b011bHRpQXJyYXkoaSk7cz10b011bHRpQXJyYXkocyk7Y29uc3QgbD10b051bWJlckFycmF5KHIuZ2V0QXJyYXkoIlNpemUiKSksaD1yLmdldCgiQml0c1BlclNhbXBsZSIpLHU9ci5nZXQoIk9yZGVyIil8fDE7MSE9PXUmJigwLG4uaW5mbykoIk5vIHN1cHBvcnQgZm9yIGN1YmljIHNwbGluZSBpbnRlcnBvbGF0aW9uOiAiK3UpO2xldCBkPXRvTnVtYmVyQXJyYXkoci5nZXRBcnJheSgiRW5jb2RlIikpO2lmKGQpZD10b011bHRpQXJyYXkoZCk7ZWxzZXtkPVtdO2ZvcihsZXQgZT0wO2U8bzsrK2UpZC5wdXNoKFswLGxbZV0tMV0pfWxldCBmPXRvTnVtYmVyQXJyYXkoci5nZXRBcnJheSgiRGVjb2RlIikpO2Y9Zj90b011bHRpQXJyYXkoZik6cztjb25zdCBnPXRoaXMuZ2V0U2FtcGxlQXJyYXkobCxjLGgsYSk7cmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdFNhbXBsZWRGbihlLHQsYSxyKXtjb25zdCBuPTE8PG8saD1uZXcgRmxvYXQ2NEFycmF5KG4pLHU9bmV3IFVpbnQzMkFycmF5KG4pO2xldCBwLG07Zm9yKG09MDttPG47bSsrKWhbbV09MTtsZXQgYj1jLHk9MTtmb3IocD0wO3A8bzsrK3Ape2NvbnN0IGE9aVtwXVswXSxyPWlbcF1bMV07bGV0IHM9aW50ZXJwb2xhdGUoTWF0aC5taW4oTWF0aC5tYXgoZVt0K3BdLGEpLHIpLGEscixkW3BdWzBdLGRbcF1bMV0pO2NvbnN0IG89bFtwXTtzPU1hdGgubWluKE1hdGgubWF4KHMsMCksby0xKTtjb25zdCBjPXM8by0xP01hdGguZmxvb3Iocyk6cy0xLGY9YysxLXMsZz1zLWMsdz1jKmIsUz13K2I7Zm9yKG09MDttPG47bSsrKWlmKG0meSl7aFttXSo9Zzt1W21dKz1TfWVsc2V7aFttXSo9Zjt1W21dKz13fWIqPW87eTw8PTF9Zm9yKG09MDttPGM7KyttKXtsZXQgZT0wO2ZvcihwPTA7cDxuO3ArKyllKz1nW3VbcF0rbV0qaFtwXTtlPWludGVycG9sYXRlKGUsMCwxLGZbbV1bMF0sZlttXVsxXSk7YVtyK21dPU1hdGgubWluKE1hdGgubWF4KGUsc1ttXVswXSksc1ttXVsxXSl9fX1zdGF0aWMgY29uc3RydWN0SW50ZXJwb2xhdGVkKHt4cmVmOmUsaXNFdmFsU3VwcG9ydGVkOnQsZGljdDphfSl7Y29uc3Qgcj10b051bWJlckFycmF5KGEuZ2V0QXJyYXkoIkMwIikpfHxbMF0sbj10b051bWJlckFycmF5KGEuZ2V0QXJyYXkoIkMxIikpfHxbMV0saT1hLmdldCgiTiIpLHM9W107Zm9yKGxldCBlPTAsdD1yLmxlbmd0aDtlPHQ7KytlKXMucHVzaChuW2VdLXJbZV0pO2NvbnN0IG89cy5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdEludGVycG9sYXRlZEZuKGUsdCxhLG4pe2NvbnN0IGM9MT09PWk/ZVt0XTplW3RdKippO2ZvcihsZXQgZT0wO2U8bzsrK2UpYVtuK2VdPXJbZV0rYypzW2VdfX1zdGF0aWMgY29uc3RydWN0U3RpY2hlZCh7eHJlZjplLGlzRXZhbFN1cHBvcnRlZDp0LGRpY3Q6YX0pe2NvbnN0IHI9dG9OdW1iZXJBcnJheShhLmdldEFycmF5KCJEb21haW4iKSk7aWYoIXIpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk5vIGRvbWFpbiIpO2lmKDEhPT1yLmxlbmd0aC8yKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJCYWQgZG9tYWluIGZvciBzdGljaGVkIGZ1bmN0aW9uIik7Y29uc3QgaT1bXTtmb3IoY29uc3QgciBvZiBhLmdldCgiRnVuY3Rpb25zIikpaS5wdXNoKHRoaXMucGFyc2Uoe3hyZWY6ZSxpc0V2YWxTdXBwb3J0ZWQ6dCxmbjplLmZldGNoSWZSZWYocil9KSk7Y29uc3Qgcz10b051bWJlckFycmF5KGEuZ2V0QXJyYXkoIkJvdW5kcyIpKSxvPXRvTnVtYmVyQXJyYXkoYS5nZXRBcnJheSgiRW5jb2RlIikpLGM9bmV3IEZsb2F0MzJBcnJheSgxKTtyZXR1cm4gZnVuY3Rpb24gY29uc3RydWN0U3RpY2hlZEZuKGUsdCxhLG4pe2NvbnN0IGw9ZnVuY3Rpb24gY29uc3RydWN0U3RpY2hlZEZyb21JUkNsaXAoZSx0LGEpe2U+YT9lPWE6ZTx0JiYoZT10KTtyZXR1cm4gZX0oZVt0XSxyWzBdLHJbMV0pLGg9cy5sZW5ndGg7bGV0IHU7Zm9yKHU9MDt1PGgmJiEobDxzW3VdKTsrK3UpO2xldCBkPXJbMF07dT4wJiYoZD1zW3UtMV0pO2xldCBmPXJbMV07dTxzLmxlbmd0aCYmKGY9c1t1XSk7Y29uc3QgZz1vWzIqdV0scD1vWzIqdSsxXTtjWzBdPWQ9PT1mP2c6ZysobC1kKSoocC1nKS8oZi1kKTtpW3VdKGMsMCxhLG4pfX1zdGF0aWMgY29uc3RydWN0UG9zdFNjcmlwdCh7eHJlZjplLGlzRXZhbFN1cHBvcnRlZDp0LGZuOmEsZGljdDpyfSl7Y29uc3Qgcz10b051bWJlckFycmF5KHIuZ2V0QXJyYXkoIkRvbWFpbiIpKSxvPXRvTnVtYmVyQXJyYXkoci5nZXRBcnJheSgiUmFuZ2UiKSk7aWYoIXMpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk5vIGRvbWFpbi4iKTtpZighbyl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiTm8gcmFuZ2UuIik7Y29uc3QgYz1uZXcgaS5Qb3N0U2NyaXB0TGV4ZXIoYSksbD1uZXcgaS5Qb3N0U2NyaXB0UGFyc2VyKGMpLnBhcnNlKCk7aWYodCYmbi5GZWF0dXJlVGVzdC5pc0V2YWxTdXBwb3J0ZWQpe2NvbnN0IGU9KG5ldyBQb3N0U2NyaXB0Q29tcGlsZXIpLmNvbXBpbGUobCxzLG8pO2lmKGUpcmV0dXJuIG5ldyBGdW5jdGlvbigic3JjIiwic3JjT2Zmc2V0IiwiZGVzdCIsImRlc3RPZmZzZXQiLGUpfSgwLG4uaW5mbykoIlVuYWJsZSB0byBjb21waWxlIFBTIGZ1bmN0aW9uIik7Y29uc3QgaD1vLmxlbmd0aD4+MSx1PXMubGVuZ3RoPj4xLGQ9bmV3IFBvc3RTY3JpcHRFdmFsdWF0b3IobCksZj1PYmplY3QuY3JlYXRlKG51bGwpO2xldCBnPTgxOTI7Y29uc3QgcD1uZXcgRmxvYXQzMkFycmF5KHUpO3JldHVybiBmdW5jdGlvbiBjb25zdHJ1Y3RQb3N0U2NyaXB0Rm4oZSx0LGEscil7bGV0IG4saSxzPSIiO2NvbnN0IGM9cDtmb3Iobj0wO248dTtuKyspe2k9ZVt0K25dO2Nbbl09aTtzKz1pKyJfIn1jb25zdCBsPWZbc107aWYodm9pZCAwIT09bCl7YS5zZXQobCxyKTtyZXR1cm59Y29uc3QgbT1uZXcgRmxvYXQzMkFycmF5KGgpLGI9ZC5leGVjdXRlKGMpLHk9Yi5sZW5ndGgtaDtmb3Iobj0wO248aDtuKyspe2k9Ylt5K25dO2xldCBlPW9bMipuXTtpZihpPGUpaT1lO2Vsc2V7ZT1vWzIqbisxXTtpPmUmJihpPWUpfW1bbl09aX1pZihnPjApe2ctLTtmW3NdPW19YS5zZXQobSxyKX19fWNsYXNzIFBvc3RTY3JpcHRTdGFja3tzdGF0aWMgZ2V0IE1BWF9TVEFDS19TSVpFKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIk1BWF9TVEFDS19TSVpFIiwxMDApfWNvbnN0cnVjdG9yKGUpe3RoaXMuc3RhY2s9ZT9BcnJheS5mcm9tKGUpOltdfXB1c2goZSl7aWYodGhpcy5zdGFjay5sZW5ndGg+PVBvc3RTY3JpcHRTdGFjay5NQVhfU1RBQ0tfU0laRSl0aHJvdyBuZXcgRXJyb3IoIlBvc3RTY3JpcHQgZnVuY3Rpb24gc3RhY2sgb3ZlcmZsb3cuIik7dGhpcy5zdGFjay5wdXNoKGUpfXBvcCgpe2lmKHRoaXMuc3RhY2subGVuZ3RoPD0wKXRocm93IG5ldyBFcnJvcigiUG9zdFNjcmlwdCBmdW5jdGlvbiBzdGFjayB1bmRlcmZsb3cuIik7cmV0dXJuIHRoaXMuc3RhY2sucG9wKCl9Y29weShlKXtpZih0aGlzLnN0YWNrLmxlbmd0aCtlPj1Qb3N0U2NyaXB0U3RhY2suTUFYX1NUQUNLX1NJWkUpdGhyb3cgbmV3IEVycm9yKCJQb3N0U2NyaXB0IGZ1bmN0aW9uIHN0YWNrIG92ZXJmbG93LiIpO2NvbnN0IHQ9dGhpcy5zdGFjaztmb3IobGV0IGE9dC5sZW5ndGgtZSxyPWUtMTtyPj0wO3ItLSxhKyspdC5wdXNoKHRbYV0pfWluZGV4KGUpe3RoaXMucHVzaCh0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLWUtMV0pfXJvbGwoZSx0KXtjb25zdCBhPXRoaXMuc3RhY2sscj1hLmxlbmd0aC1lLG49YS5sZW5ndGgtMSxpPXIrKHQtTWF0aC5mbG9vcih0L2UpKmUpO2ZvcihsZXQgZT1yLHQ9bjtlPHQ7ZSsrLHQtLSl7Y29uc3Qgcj1hW2VdO2FbZV09YVt0XTthW3RdPXJ9Zm9yKGxldCBlPXIsdD1pLTE7ZTx0O2UrKyx0LS0pe2NvbnN0IHI9YVtlXTthW2VdPWFbdF07YVt0XT1yfWZvcihsZXQgZT1pLHQ9bjtlPHQ7ZSsrLHQtLSl7Y29uc3Qgcj1hW2VdO2FbZV09YVt0XTthW3RdPXJ9fX1jbGFzcyBQb3N0U2NyaXB0RXZhbHVhdG9ye2NvbnN0cnVjdG9yKGUpe3RoaXMub3BlcmF0b3JzPWV9ZXhlY3V0ZShlKXtjb25zdCB0PW5ldyBQb3N0U2NyaXB0U3RhY2soZSk7bGV0IGE9MDtjb25zdCByPXRoaXMub3BlcmF0b3JzLGk9ci5sZW5ndGg7bGV0IHMsbyxjO2Zvcig7YTxpOyl7cz1yW2ErK107aWYoIm51bWJlciIhPXR5cGVvZiBzKXN3aXRjaChzKXtjYXNlImp6IjpjPXQucG9wKCk7bz10LnBvcCgpO298fChhPWMpO2JyZWFrO2Nhc2UiaiI6bz10LnBvcCgpO2E9bzticmVhaztjYXNlImFicyI6bz10LnBvcCgpO3QucHVzaChNYXRoLmFicyhvKSk7YnJlYWs7Y2FzZSJhZGQiOmM9dC5wb3AoKTtvPXQucG9wKCk7dC5wdXNoKG8rYyk7YnJlYWs7Y2FzZSJhbmQiOmM9dC5wb3AoKTtvPXQucG9wKCk7ImJvb2xlYW4iPT10eXBlb2YgbyYmImJvb2xlYW4iPT10eXBlb2YgYz90LnB1c2gobyYmYyk6dC5wdXNoKG8mYyk7YnJlYWs7Y2FzZSJhdGFuIjpvPXQucG9wKCk7dC5wdXNoKE1hdGguYXRhbihvKSk7YnJlYWs7Y2FzZSJiaXRzaGlmdCI6Yz10LnBvcCgpO289dC5wb3AoKTtvPjA/dC5wdXNoKG88PGMpOnQucHVzaChvPj5jKTticmVhaztjYXNlImNlaWxpbmciOm89dC5wb3AoKTt0LnB1c2goTWF0aC5jZWlsKG8pKTticmVhaztjYXNlImNvcHkiOm89dC5wb3AoKTt0LmNvcHkobyk7YnJlYWs7Y2FzZSJjb3MiOm89dC5wb3AoKTt0LnB1c2goTWF0aC5jb3MobykpO2JyZWFrO2Nhc2UiY3ZpIjpvPTB8dC5wb3AoKTt0LnB1c2gobyk7YnJlYWs7Y2FzZSJjdnIiOmJyZWFrO2Nhc2UiZGl2IjpjPXQucG9wKCk7bz10LnBvcCgpO3QucHVzaChvL2MpO2JyZWFrO2Nhc2UiZHVwIjp0LmNvcHkoMSk7YnJlYWs7Y2FzZSJlcSI6Yz10LnBvcCgpO289dC5wb3AoKTt0LnB1c2gobz09PWMpO2JyZWFrO2Nhc2UiZXhjaCI6dC5yb2xsKDIsMSk7YnJlYWs7Y2FzZSJleHAiOmM9dC5wb3AoKTtvPXQucG9wKCk7dC5wdXNoKG8qKmMpO2JyZWFrO2Nhc2UiZmFsc2UiOnQucHVzaCghMSk7YnJlYWs7Y2FzZSJmbG9vciI6bz10LnBvcCgpO3QucHVzaChNYXRoLmZsb29yKG8pKTticmVhaztjYXNlImdlIjpjPXQucG9wKCk7bz10LnBvcCgpO3QucHVzaChvPj1jKTticmVhaztjYXNlImd0IjpjPXQucG9wKCk7bz10LnBvcCgpO3QucHVzaChvPmMpO2JyZWFrO2Nhc2UiaWRpdiI6Yz10LnBvcCgpO289dC5wb3AoKTt0LnB1c2goby9jfDApO2JyZWFrO2Nhc2UiaW5kZXgiOm89dC5wb3AoKTt0LmluZGV4KG8pO2JyZWFrO2Nhc2UibGUiOmM9dC5wb3AoKTtvPXQucG9wKCk7dC5wdXNoKG88PWMpO2JyZWFrO2Nhc2UibG4iOm89dC5wb3AoKTt0LnB1c2goTWF0aC5sb2cobykpO2JyZWFrO2Nhc2UibG9nIjpvPXQucG9wKCk7dC5wdXNoKE1hdGgubG9nKG8pL01hdGguTE4xMCk7YnJlYWs7Y2FzZSJsdCI6Yz10LnBvcCgpO289dC5wb3AoKTt0LnB1c2gobzxjKTticmVhaztjYXNlIm1vZCI6Yz10LnBvcCgpO289dC5wb3AoKTt0LnB1c2gobyVjKTticmVhaztjYXNlIm11bCI6Yz10LnBvcCgpO289dC5wb3AoKTt0LnB1c2gobypjKTticmVhaztjYXNlIm5lIjpjPXQucG9wKCk7bz10LnBvcCgpO3QucHVzaChvIT09Yyk7YnJlYWs7Y2FzZSJuZWciOm89dC5wb3AoKTt0LnB1c2goLW8pO2JyZWFrO2Nhc2Uibm90IjpvPXQucG9wKCk7ImJvb2xlYW4iPT10eXBlb2Ygbz90LnB1c2goIW8pOnQucHVzaCh+byk7YnJlYWs7Y2FzZSJvciI6Yz10LnBvcCgpO289dC5wb3AoKTsiYm9vbGVhbiI9PXR5cGVvZiBvJiYiYm9vbGVhbiI9PXR5cGVvZiBjP3QucHVzaChvfHxjKTp0LnB1c2gob3xjKTticmVhaztjYXNlInBvcCI6dC5wb3AoKTticmVhaztjYXNlInJvbGwiOmM9dC5wb3AoKTtvPXQucG9wKCk7dC5yb2xsKG8sYyk7YnJlYWs7Y2FzZSJyb3VuZCI6bz10LnBvcCgpO3QucHVzaChNYXRoLnJvdW5kKG8pKTticmVhaztjYXNlInNpbiI6bz10LnBvcCgpO3QucHVzaChNYXRoLnNpbihvKSk7YnJlYWs7Y2FzZSJzcXJ0IjpvPXQucG9wKCk7dC5wdXNoKE1hdGguc3FydChvKSk7YnJlYWs7Y2FzZSJzdWIiOmM9dC5wb3AoKTtvPXQucG9wKCk7dC5wdXNoKG8tYyk7YnJlYWs7Y2FzZSJ0cnVlIjp0LnB1c2goITApO2JyZWFrO2Nhc2UidHJ1bmNhdGUiOm89dC5wb3AoKTtvPW88MD9NYXRoLmNlaWwobyk6TWF0aC5mbG9vcihvKTt0LnB1c2gobyk7YnJlYWs7Y2FzZSJ4b3IiOmM9dC5wb3AoKTtvPXQucG9wKCk7ImJvb2xlYW4iPT10eXBlb2YgbyYmImJvb2xlYW4iPT10eXBlb2YgYz90LnB1c2gobyE9PWMpOnQucHVzaChvXmMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoYFVua25vd24gb3BlcmF0b3IgJHtzfWApfWVsc2UgdC5wdXNoKHMpfXJldHVybiB0LnN0YWNrfX10LlBvc3RTY3JpcHRFdmFsdWF0b3I9UG9zdFNjcmlwdEV2YWx1YXRvcjtjbGFzcyBBc3ROb2Rle2NvbnN0cnVjdG9yKGUpe3RoaXMudHlwZT1lfXZpc2l0KGUpeygwLG4udW5yZWFjaGFibGUpKCJhYnN0cmFjdCBtZXRob2QiKX19Y2xhc3MgQXN0QXJndW1lbnQgZXh0ZW5kcyBBc3ROb2Rle2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcigiYXJncyIpO3RoaXMuaW5kZXg9ZTt0aGlzLm1pbj10O3RoaXMubWF4PWF9dmlzaXQoZSl7ZS52aXNpdEFyZ3VtZW50KHRoaXMpfX1jbGFzcyBBc3RMaXRlcmFsIGV4dGVuZHMgQXN0Tm9kZXtjb25zdHJ1Y3RvcihlKXtzdXBlcigibGl0ZXJhbCIpO3RoaXMubnVtYmVyPWU7dGhpcy5taW49ZTt0aGlzLm1heD1lfXZpc2l0KGUpe2UudmlzaXRMaXRlcmFsKHRoaXMpfX1jbGFzcyBBc3RCaW5hcnlPcGVyYXRpb24gZXh0ZW5kcyBBc3ROb2Rle2NvbnN0cnVjdG9yKGUsdCxhLHIsbil7c3VwZXIoImJpbmFyeSIpO3RoaXMub3A9ZTt0aGlzLmFyZzE9dDt0aGlzLmFyZzI9YTt0aGlzLm1pbj1yO3RoaXMubWF4PW59dmlzaXQoZSl7ZS52aXNpdEJpbmFyeU9wZXJhdGlvbih0aGlzKX19Y2xhc3MgQXN0TWluIGV4dGVuZHMgQXN0Tm9kZXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKCJtYXgiKTt0aGlzLmFyZz1lO3RoaXMubWluPWUubWluO3RoaXMubWF4PXR9dmlzaXQoZSl7ZS52aXNpdE1pbih0aGlzKX19Y2xhc3MgQXN0VmFyaWFibGUgZXh0ZW5kcyBBc3ROb2Rle2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcigidmFyIik7dGhpcy5pbmRleD1lO3RoaXMubWluPXQ7dGhpcy5tYXg9YX12aXNpdChlKXtlLnZpc2l0VmFyaWFibGUodGhpcyl9fWNsYXNzIEFzdFZhcmlhYmxlRGVmaW5pdGlvbiBleHRlbmRzIEFzdE5vZGV7Y29uc3RydWN0b3IoZSx0KXtzdXBlcigiZGVmaW5pdGlvbiIpO3RoaXMudmFyaWFibGU9ZTt0aGlzLmFyZz10fXZpc2l0KGUpe2UudmlzaXRWYXJpYWJsZURlZmluaXRpb24odGhpcyl9fWNsYXNzIEV4cHJlc3Npb25CdWlsZGVyVmlzaXRvcntjb25zdHJ1Y3Rvcigpe3RoaXMucGFydHM9W119dmlzaXRBcmd1bWVudChlKXt0aGlzLnBhcnRzLnB1c2goIk1hdGgubWF4KCIsZS5taW4sIiwgTWF0aC5taW4oIixlLm1heCwiLCBzcmNbc3JjT2Zmc2V0ICsgIixlLmluZGV4LCJdKSkiKX12aXNpdFZhcmlhYmxlKGUpe3RoaXMucGFydHMucHVzaCgidiIsZS5pbmRleCl9dmlzaXRMaXRlcmFsKGUpe3RoaXMucGFydHMucHVzaChlLm51bWJlcil9dmlzaXRCaW5hcnlPcGVyYXRpb24oZSl7dGhpcy5wYXJ0cy5wdXNoKCIoIik7ZS5hcmcxLnZpc2l0KHRoaXMpO3RoaXMucGFydHMucHVzaCgiICIsZS5vcCwiICIpO2UuYXJnMi52aXNpdCh0aGlzKTt0aGlzLnBhcnRzLnB1c2goIikiKX12aXNpdFZhcmlhYmxlRGVmaW5pdGlvbihlKXt0aGlzLnBhcnRzLnB1c2goInZhciAiKTtlLnZhcmlhYmxlLnZpc2l0KHRoaXMpO3RoaXMucGFydHMucHVzaCgiID0gIik7ZS5hcmcudmlzaXQodGhpcyk7dGhpcy5wYXJ0cy5wdXNoKCI7Iil9dmlzaXRNaW4oZSl7dGhpcy5wYXJ0cy5wdXNoKCJNYXRoLm1pbigiKTtlLmFyZy52aXNpdCh0aGlzKTt0aGlzLnBhcnRzLnB1c2goIiwgIixlLm1heCwiKSIpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMucGFydHMuam9pbigiIil9fWZ1bmN0aW9uIGJ1aWxkQWRkT3BlcmF0aW9uKGUsdCl7cmV0dXJuImxpdGVyYWwiPT09dC50eXBlJiYwPT09dC5udW1iZXI/ZToibGl0ZXJhbCI9PT1lLnR5cGUmJjA9PT1lLm51bWJlcj90OiJsaXRlcmFsIj09PXQudHlwZSYmImxpdGVyYWwiPT09ZS50eXBlP25ldyBBc3RMaXRlcmFsKGUubnVtYmVyK3QubnVtYmVyKTpuZXcgQXN0QmluYXJ5T3BlcmF0aW9uKCIrIixlLHQsZS5taW4rdC5taW4sZS5tYXgrdC5tYXgpfWZ1bmN0aW9uIGJ1aWxkTXVsT3BlcmF0aW9uKGUsdCl7aWYoImxpdGVyYWwiPT09dC50eXBlKXtpZigwPT09dC5udW1iZXIpcmV0dXJuIG5ldyBBc3RMaXRlcmFsKDApO2lmKDE9PT10Lm51bWJlcilyZXR1cm4gZTtpZigibGl0ZXJhbCI9PT1lLnR5cGUpcmV0dXJuIG5ldyBBc3RMaXRlcmFsKGUubnVtYmVyKnQubnVtYmVyKX1pZigibGl0ZXJhbCI9PT1lLnR5cGUpe2lmKDA9PT1lLm51bWJlcilyZXR1cm4gbmV3IEFzdExpdGVyYWwoMCk7aWYoMT09PWUubnVtYmVyKXJldHVybiB0fWNvbnN0IGE9TWF0aC5taW4oZS5taW4qdC5taW4sZS5taW4qdC5tYXgsZS5tYXgqdC5taW4sZS5tYXgqdC5tYXgpLHI9TWF0aC5tYXgoZS5taW4qdC5taW4sZS5taW4qdC5tYXgsZS5tYXgqdC5taW4sZS5tYXgqdC5tYXgpO3JldHVybiBuZXcgQXN0QmluYXJ5T3BlcmF0aW9uKCIqIixlLHQsYSxyKX1mdW5jdGlvbiBidWlsZFN1Yk9wZXJhdGlvbihlLHQpe2lmKCJsaXRlcmFsIj09PXQudHlwZSl7aWYoMD09PXQubnVtYmVyKXJldHVybiBlO2lmKCJsaXRlcmFsIj09PWUudHlwZSlyZXR1cm4gbmV3IEFzdExpdGVyYWwoZS5udW1iZXItdC5udW1iZXIpfXJldHVybiJiaW5hcnkiPT09dC50eXBlJiYiLSI9PT10Lm9wJiYibGl0ZXJhbCI9PT1lLnR5cGUmJjE9PT1lLm51bWJlciYmImxpdGVyYWwiPT09dC5hcmcxLnR5cGUmJjE9PT10LmFyZzEubnVtYmVyP3QuYXJnMjpuZXcgQXN0QmluYXJ5T3BlcmF0aW9uKCItIixlLHQsZS5taW4tdC5tYXgsZS5tYXgtdC5taW4pfWZ1bmN0aW9uIGJ1aWxkTWluT3BlcmF0aW9uKGUsdCl7cmV0dXJuIGUubWluPj10P25ldyBBc3RMaXRlcmFsKHQpOmUubWF4PD10P2U6bmV3IEFzdE1pbihlLHQpfWNsYXNzIFBvc3RTY3JpcHRDb21waWxlcntjb21waWxlKGUsdCxhKXtjb25zdCByPVtdLG49W10saT10Lmxlbmd0aD4+MSxzPWEubGVuZ3RoPj4xO2xldCBvLGMsbCxoLHUsZCxmLGcscD0wO2ZvcihsZXQgZT0wO2U8aTtlKyspci5wdXNoKG5ldyBBc3RBcmd1bWVudChlLHRbMiplXSx0WzIqZSsxXSkpO2ZvcihsZXQgdD0wLGE9ZS5sZW5ndGg7dDxhO3QrKyl7Zz1lW3RdO2lmKCJudW1iZXIiIT10eXBlb2YgZylzd2l0Y2goZyl7Y2FzZSJhZGQiOmlmKHIubGVuZ3RoPDIpcmV0dXJuIG51bGw7aD1yLnBvcCgpO2w9ci5wb3AoKTtyLnB1c2goYnVpbGRBZGRPcGVyYXRpb24obCxoKSk7YnJlYWs7Y2FzZSJjdnIiOmlmKHIubGVuZ3RoPDEpcmV0dXJuIG51bGw7YnJlYWs7Y2FzZSJtdWwiOmlmKHIubGVuZ3RoPDIpcmV0dXJuIG51bGw7aD1yLnBvcCgpO2w9ci5wb3AoKTtyLnB1c2goYnVpbGRNdWxPcGVyYXRpb24obCxoKSk7YnJlYWs7Y2FzZSJzdWIiOmlmKHIubGVuZ3RoPDIpcmV0dXJuIG51bGw7aD1yLnBvcCgpO2w9ci5wb3AoKTtyLnB1c2goYnVpbGRTdWJPcGVyYXRpb24obCxoKSk7YnJlYWs7Y2FzZSJleGNoIjppZihyLmxlbmd0aDwyKXJldHVybiBudWxsO3U9ci5wb3AoKTtkPXIucG9wKCk7ci5wdXNoKHUsZCk7YnJlYWs7Y2FzZSJwb3AiOmlmKHIubGVuZ3RoPDEpcmV0dXJuIG51bGw7ci5wb3AoKTticmVhaztjYXNlImluZGV4IjppZihyLmxlbmd0aDwxKXJldHVybiBudWxsO2w9ci5wb3AoKTtpZigibGl0ZXJhbCIhPT1sLnR5cGUpcmV0dXJuIG51bGw7bz1sLm51bWJlcjtpZihvPDB8fCFOdW1iZXIuaXNJbnRlZ2VyKG8pfHxyLmxlbmd0aDxvKXJldHVybiBudWxsO3U9cltyLmxlbmd0aC1vLTFdO2lmKCJsaXRlcmFsIj09PXUudHlwZXx8InZhciI9PT11LnR5cGUpe3IucHVzaCh1KTticmVha31mPW5ldyBBc3RWYXJpYWJsZShwKyssdS5taW4sdS5tYXgpO3Jbci5sZW5ndGgtby0xXT1mO3IucHVzaChmKTtuLnB1c2gobmV3IEFzdFZhcmlhYmxlRGVmaW5pdGlvbihmLHUpKTticmVhaztjYXNlImR1cCI6aWYoci5sZW5ndGg8MSlyZXR1cm4gbnVsbDtpZigibnVtYmVyIj09dHlwZW9mIGVbdCsxXSYmImd0Ij09PWVbdCsyXSYmZVt0KzNdPT09dCs3JiYianoiPT09ZVt0KzRdJiYicG9wIj09PWVbdCs1XSYmZVt0KzZdPT09ZVt0KzFdKXtsPXIucG9wKCk7ci5wdXNoKGJ1aWxkTWluT3BlcmF0aW9uKGwsZVt0KzFdKSk7dCs9NjticmVha311PXIuYXQoLTEpO2lmKCJsaXRlcmFsIj09PXUudHlwZXx8InZhciI9PT11LnR5cGUpe3IucHVzaCh1KTticmVha31mPW5ldyBBc3RWYXJpYWJsZShwKyssdS5taW4sdS5tYXgpO3Jbci5sZW5ndGgtMV09ZjtyLnB1c2goZik7bi5wdXNoKG5ldyBBc3RWYXJpYWJsZURlZmluaXRpb24oZix1KSk7YnJlYWs7Y2FzZSJyb2xsIjppZihyLmxlbmd0aDwyKXJldHVybiBudWxsO2g9ci5wb3AoKTtsPXIucG9wKCk7aWYoImxpdGVyYWwiIT09aC50eXBlfHwibGl0ZXJhbCIhPT1sLnR5cGUpcmV0dXJuIG51bGw7Yz1oLm51bWJlcjtvPWwubnVtYmVyO2lmKG88PTB8fCFOdW1iZXIuaXNJbnRlZ2VyKG8pfHwhTnVtYmVyLmlzSW50ZWdlcihjKXx8ci5sZW5ndGg8bylyZXR1cm4gbnVsbDtjPShjJW8rbyklbztpZigwPT09YylicmVhaztyLnB1c2goLi4uci5zcGxpY2Uoci5sZW5ndGgtbyxvLWMpKTticmVhaztkZWZhdWx0OnJldHVybiBudWxsfWVsc2Ugci5wdXNoKG5ldyBBc3RMaXRlcmFsKGcpKX1pZihyLmxlbmd0aCE9PXMpcmV0dXJuIG51bGw7Y29uc3QgbT1bXTtmb3IoY29uc3QgZSBvZiBuKXtjb25zdCB0PW5ldyBFeHByZXNzaW9uQnVpbGRlclZpc2l0b3I7ZS52aXNpdCh0KTttLnB1c2godC50b1N0cmluZygpKX1mb3IobGV0IGU9MCx0PXIubGVuZ3RoO2U8dDtlKyspe2NvbnN0IHQ9cltlXSxuPW5ldyBFeHByZXNzaW9uQnVpbGRlclZpc2l0b3I7dC52aXNpdChuKTtjb25zdCBpPWFbMiplXSxzPWFbMiplKzFdLG89W24udG9TdHJpbmcoKV07aWYoaT50Lm1pbil7by51bnNoaWZ0KCJNYXRoLm1heCgiLGksIiwgIik7by5wdXNoKCIpIil9aWYoczx0Lm1heCl7by51bnNoaWZ0KCJNYXRoLm1pbigiLHMsIiwgIik7by5wdXNoKCIpIil9by51bnNoaWZ0KCJkZXN0W2Rlc3RPZmZzZXQgKyAiLGUsIl0gPSAiKTtvLnB1c2goIjsiKTttLnB1c2goby5qb2luKCIiKSl9cmV0dXJuIG0uam9pbigiXG4iKX19dC5Qb3N0U2NyaXB0Q29tcGlsZXI9UG9zdFNjcmlwdENvbXBpbGVyfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuUG9zdFNjcmlwdFBhcnNlcj10LlBvc3RTY3JpcHRMZXhlcj12b2lkIDA7dmFyIHI9YSgyKSxuPWEoMyksaT1hKDQpO3QuUG9zdFNjcmlwdFBhcnNlcj1jbGFzcyBQb3N0U2NyaXB0UGFyc2Vye2NvbnN0cnVjdG9yKGUpe3RoaXMubGV4ZXI9ZTt0aGlzLm9wZXJhdG9ycz1bXTt0aGlzLnRva2VuPW51bGw7dGhpcy5wcmV2PW51bGx9bmV4dFRva2VuKCl7dGhpcy5wcmV2PXRoaXMudG9rZW47dGhpcy50b2tlbj10aGlzLmxleGVyLmdldFRva2VuKCl9YWNjZXB0KGUpe2lmKHRoaXMudG9rZW4udHlwZT09PWUpe3RoaXMubmV4dFRva2VuKCk7cmV0dXJuITB9cmV0dXJuITF9ZXhwZWN0KGUpe2lmKHRoaXMuYWNjZXB0KGUpKXJldHVybiEwO3Rocm93IG5ldyByLkZvcm1hdEVycm9yKGBVbmV4cGVjdGVkIHN5bWJvbDogZm91bmQgJHt0aGlzLnRva2VuLnR5cGV9IGV4cGVjdGVkICR7ZX0uYCl9cGFyc2UoKXt0aGlzLm5leHRUb2tlbigpO3RoaXMuZXhwZWN0KHMuTEJSQUNFKTt0aGlzLnBhcnNlQmxvY2soKTt0aGlzLmV4cGVjdChzLlJCUkFDRSk7cmV0dXJuIHRoaXMub3BlcmF0b3JzfXBhcnNlQmxvY2soKXtmb3IoOzspaWYodGhpcy5hY2NlcHQocy5OVU1CRVIpKXRoaXMub3BlcmF0b3JzLnB1c2godGhpcy5wcmV2LnZhbHVlKTtlbHNlIGlmKHRoaXMuYWNjZXB0KHMuT1BFUkFUT1IpKXRoaXMub3BlcmF0b3JzLnB1c2godGhpcy5wcmV2LnZhbHVlKTtlbHNle2lmKCF0aGlzLmFjY2VwdChzLkxCUkFDRSkpcmV0dXJuO3RoaXMucGFyc2VDb25kaXRpb24oKX19cGFyc2VDb25kaXRpb24oKXtjb25zdCBlPXRoaXMub3BlcmF0b3JzLmxlbmd0aDt0aGlzLm9wZXJhdG9ycy5wdXNoKG51bGwsbnVsbCk7dGhpcy5wYXJzZUJsb2NrKCk7dGhpcy5leHBlY3Qocy5SQlJBQ0UpO2lmKHRoaXMuYWNjZXB0KHMuSUYpKXt0aGlzLm9wZXJhdG9yc1tlXT10aGlzLm9wZXJhdG9ycy5sZW5ndGg7dGhpcy5vcGVyYXRvcnNbZSsxXT0ianoifWVsc2V7aWYoIXRoaXMuYWNjZXB0KHMuTEJSQUNFKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiUFMgRnVuY3Rpb246IGVycm9yIHBhcnNpbmcgY29uZGl0aW9uYWwuIik7e2NvbnN0IHQ9dGhpcy5vcGVyYXRvcnMubGVuZ3RoO3RoaXMub3BlcmF0b3JzLnB1c2gobnVsbCxudWxsKTtjb25zdCBhPXRoaXMub3BlcmF0b3JzLmxlbmd0aDt0aGlzLnBhcnNlQmxvY2soKTt0aGlzLmV4cGVjdChzLlJCUkFDRSk7dGhpcy5leHBlY3Qocy5JRkVMU0UpO3RoaXMub3BlcmF0b3JzW3RdPXRoaXMub3BlcmF0b3JzLmxlbmd0aDt0aGlzLm9wZXJhdG9yc1t0KzFdPSJqIjt0aGlzLm9wZXJhdG9yc1tlXT1hO3RoaXMub3BlcmF0b3JzW2UrMV09Imp6In19fX07Y29uc3Qgcz17TEJSQUNFOjAsUkJSQUNFOjEsTlVNQkVSOjIsT1BFUkFUT1I6MyxJRjo0LElGRUxTRTo1fTtjbGFzcyBQb3N0U2NyaXB0VG9rZW57c3RhdGljIGdldCBvcENhY2hlKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsIm9wQ2FjaGUiLE9iamVjdC5jcmVhdGUobnVsbCkpfWNvbnN0cnVjdG9yKGUsdCl7dGhpcy50eXBlPWU7dGhpcy52YWx1ZT10fXN0YXRpYyBnZXRPcGVyYXRvcihlKXtjb25zdCB0PVBvc3RTY3JpcHRUb2tlbi5vcENhY2hlW2VdO3JldHVybiB0fHwoUG9zdFNjcmlwdFRva2VuLm9wQ2FjaGVbZV09bmV3IFBvc3RTY3JpcHRUb2tlbihzLk9QRVJBVE9SLGUpKX1zdGF0aWMgZ2V0IExCUkFDRSgpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJMQlJBQ0UiLG5ldyBQb3N0U2NyaXB0VG9rZW4ocy5MQlJBQ0UsInsiKSl9c3RhdGljIGdldCBSQlJBQ0UoKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiUkJSQUNFIixuZXcgUG9zdFNjcmlwdFRva2VuKHMuUkJSQUNFLCJ9IikpfXN0YXRpYyBnZXQgSUYoKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiSUYiLG5ldyBQb3N0U2NyaXB0VG9rZW4ocy5JRiwiSUYiKSl9c3RhdGljIGdldCBJRkVMU0UoKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiSUZFTFNFIixuZXcgUG9zdFNjcmlwdFRva2VuKHMuSUZFTFNFLCJJRkVMU0UiKSl9fXQuUG9zdFNjcmlwdExleGVyPWNsYXNzIFBvc3RTY3JpcHRMZXhlcntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0cmVhbT1lO3RoaXMubmV4dENoYXIoKTt0aGlzLnN0ckJ1Zj1bXX1uZXh0Q2hhcigpe3JldHVybiB0aGlzLmN1cnJlbnRDaGFyPXRoaXMuc3RyZWFtLmdldEJ5dGUoKX1nZXRUb2tlbigpe2xldCBlPSExLHQ9dGhpcy5jdXJyZW50Q2hhcjtmb3IoOzspe2lmKHQ8MClyZXR1cm4gbi5FT0Y7aWYoZSkxMCE9PXQmJjEzIT09dHx8KGU9ITEpO2Vsc2UgaWYoMzc9PT10KWU9ITA7ZWxzZSBpZighKDAsaS5pc1doaXRlU3BhY2UpKHQpKWJyZWFrO3Q9dGhpcy5uZXh0Q2hhcigpfXN3aXRjaCgwfHQpe2Nhc2UgNDg6Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA1MjpjYXNlIDUzOmNhc2UgNTQ6Y2FzZSA1NTpjYXNlIDU2OmNhc2UgNTc6Y2FzZSA0MzpjYXNlIDQ1OmNhc2UgNDY6cmV0dXJuIG5ldyBQb3N0U2NyaXB0VG9rZW4ocy5OVU1CRVIsdGhpcy5nZXROdW1iZXIoKSk7Y2FzZSAxMjM6dGhpcy5uZXh0Q2hhcigpO3JldHVybiBQb3N0U2NyaXB0VG9rZW4uTEJSQUNFO2Nhc2UgMTI1OnRoaXMubmV4dENoYXIoKTtyZXR1cm4gUG9zdFNjcmlwdFRva2VuLlJCUkFDRX1jb25zdCBhPXRoaXMuc3RyQnVmO2EubGVuZ3RoPTA7YVswXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpO2Zvcig7KHQ9dGhpcy5uZXh0Q2hhcigpKT49MCYmKHQ+PTY1JiZ0PD05MHx8dD49OTcmJnQ8PTEyMik7KWEucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHQpKTtjb25zdCByPWEuam9pbigiIik7c3dpdGNoKHIudG9Mb3dlckNhc2UoKSl7Y2FzZSJpZiI6cmV0dXJuIFBvc3RTY3JpcHRUb2tlbi5JRjtjYXNlImlmZWxzZSI6cmV0dXJuIFBvc3RTY3JpcHRUb2tlbi5JRkVMU0U7ZGVmYXVsdDpyZXR1cm4gUG9zdFNjcmlwdFRva2VuLmdldE9wZXJhdG9yKHIpfX1nZXROdW1iZXIoKXtsZXQgZT10aGlzLmN1cnJlbnRDaGFyO2NvbnN0IHQ9dGhpcy5zdHJCdWY7dC5sZW5ndGg9MDt0WzBdPVN0cmluZy5mcm9tQ2hhckNvZGUoZSk7Zm9yKDsoZT10aGlzLm5leHRDaGFyKCkpPj0wJiYoZT49NDgmJmU8PTU3fHw0NT09PWV8fDQ2PT09ZSk7KXQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKTtjb25zdCBhPXBhcnNlRmxvYXQodC5qb2luKCIiKSk7aWYoaXNOYU4oYSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYEludmFsaWQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyOiAke2F9YCk7cmV0dXJuIGF9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkxvY2FsVGlsaW5nUGF0dGVybkNhY2hlPXQuTG9jYWxJbWFnZUNhY2hlPXQuTG9jYWxHU3RhdGVDYWNoZT10LkxvY2FsRnVuY3Rpb25DYWNoZT10LkxvY2FsQ29sb3JTcGFjZUNhY2hlPXQuR2xvYmFsSW1hZ2VDYWNoZT12b2lkIDA7dmFyIHI9YSgyKSxuPWEoMyk7Y2xhc3MgQmFzZUxvY2FsQ2FjaGV7Y29uc3RydWN0b3IoZSl7dGhpcy5jb25zdHJ1Y3Rvcj09PUJhc2VMb2NhbENhY2hlJiYoMCxyLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZUxvY2FsQ2FjaGUuIik7dGhpcy5fb25seVJlZnM9ITA9PT0oZSYmZS5vbmx5UmVmcyk7aWYoIXRoaXMuX29ubHlSZWZzKXt0aGlzLl9uYW1lUmVmTWFwPW5ldyBNYXA7dGhpcy5faW1hZ2VNYXA9bmV3IE1hcH10aGlzLl9pbWFnZUNhY2hlPW5ldyBuLlJlZlNldENhY2hlfWdldEJ5TmFtZShlKXt0aGlzLl9vbmx5UmVmcyYmKDAsci51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBgZ2V0QnlOYW1lYCBtZXRob2QuIik7Y29uc3QgdD10aGlzLl9uYW1lUmVmTWFwLmdldChlKTtyZXR1cm4gdD90aGlzLmdldEJ5UmVmKHQpOnRoaXMuX2ltYWdlTWFwLmdldChlKXx8bnVsbH1nZXRCeVJlZihlKXtyZXR1cm4gdGhpcy5faW1hZ2VDYWNoZS5nZXQoZSl8fG51bGx9c2V0KGUsdCxhKXsoMCxyLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBzZXRgIGNhbGxlZC4iKX19dC5Mb2NhbEltYWdlQ2FjaGU9Y2xhc3MgTG9jYWxJbWFnZUNhY2hlIGV4dGVuZHMgQmFzZUxvY2FsQ2FjaGV7c2V0KGUsdD1udWxsLGEpe2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsSW1hZ2VDYWNoZS5zZXQgLSBleHBlY3RlZCAibmFtZSIgYXJndW1lbnQuJyk7aWYodCl7aWYodGhpcy5faW1hZ2VDYWNoZS5oYXModCkpcmV0dXJuO3RoaXMuX25hbWVSZWZNYXAuc2V0KGUsdCk7dGhpcy5faW1hZ2VDYWNoZS5wdXQodCxhKX1lbHNlIHRoaXMuX2ltYWdlTWFwLmhhcyhlKXx8dGhpcy5faW1hZ2VNYXAuc2V0KGUsYSl9fTt0LkxvY2FsQ29sb3JTcGFjZUNhY2hlPWNsYXNzIExvY2FsQ29sb3JTcGFjZUNhY2hlIGV4dGVuZHMgQmFzZUxvY2FsQ2FjaGV7c2V0KGU9bnVsbCx0PW51bGwsYSl7aWYoInN0cmluZyIhPXR5cGVvZiBlJiYhdCl0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsQ29sb3JTcGFjZUNhY2hlLnNldCAtIGV4cGVjdGVkICJuYW1lIiBhbmQvb3IgInJlZiIgYXJndW1lbnQuJyk7aWYodCl7aWYodGhpcy5faW1hZ2VDYWNoZS5oYXModCkpcmV0dXJuO251bGwhPT1lJiZ0aGlzLl9uYW1lUmVmTWFwLnNldChlLHQpO3RoaXMuX2ltYWdlQ2FjaGUucHV0KHQsYSl9ZWxzZSB0aGlzLl9pbWFnZU1hcC5oYXMoZSl8fHRoaXMuX2ltYWdlTWFwLnNldChlLGEpfX07dC5Mb2NhbEZ1bmN0aW9uQ2FjaGU9Y2xhc3MgTG9jYWxGdW5jdGlvbkNhY2hlIGV4dGVuZHMgQmFzZUxvY2FsQ2FjaGV7Y29uc3RydWN0b3IoZSl7c3VwZXIoe29ubHlSZWZzOiEwfSl9c2V0KGU9bnVsbCx0LGEpe2lmKCF0KXRocm93IG5ldyBFcnJvcignTG9jYWxGdW5jdGlvbkNhY2hlLnNldCAtIGV4cGVjdGVkICJyZWYiIGFyZ3VtZW50LicpO3RoaXMuX2ltYWdlQ2FjaGUuaGFzKHQpfHx0aGlzLl9pbWFnZUNhY2hlLnB1dCh0LGEpfX07dC5Mb2NhbEdTdGF0ZUNhY2hlPWNsYXNzIExvY2FsR1N0YXRlQ2FjaGUgZXh0ZW5kcyBCYXNlTG9jYWxDYWNoZXtzZXQoZSx0PW51bGwsYSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcignTG9jYWxHU3RhdGVDYWNoZS5zZXQgLSBleHBlY3RlZCAibmFtZSIgYXJndW1lbnQuJyk7aWYodCl7aWYodGhpcy5faW1hZ2VDYWNoZS5oYXModCkpcmV0dXJuO3RoaXMuX25hbWVSZWZNYXAuc2V0KGUsdCk7dGhpcy5faW1hZ2VDYWNoZS5wdXQodCxhKX1lbHNlIHRoaXMuX2ltYWdlTWFwLmhhcyhlKXx8dGhpcy5faW1hZ2VNYXAuc2V0KGUsYSl9fTt0LkxvY2FsVGlsaW5nUGF0dGVybkNhY2hlPWNsYXNzIExvY2FsVGlsaW5nUGF0dGVybkNhY2hlIGV4dGVuZHMgQmFzZUxvY2FsQ2FjaGV7Y29uc3RydWN0b3IoZSl7c3VwZXIoe29ubHlSZWZzOiEwfSl9c2V0KGU9bnVsbCx0LGEpe2lmKCF0KXRocm93IG5ldyBFcnJvcignTG9jYWxUaWxpbmdQYXR0ZXJuQ2FjaGUuc2V0IC0gZXhwZWN0ZWQgInJlZiIgYXJndW1lbnQuJyk7dGhpcy5faW1hZ2VDYWNoZS5oYXModCl8fHRoaXMuX2ltYWdlQ2FjaGUucHV0KHQsYSl9fTtjbGFzcyBHbG9iYWxJbWFnZUNhY2hle3N0YXRpYyBnZXQgTlVNX1BBR0VTX1RIUkVTSE9MRCgpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJOVU1fUEFHRVNfVEhSRVNIT0xEIiwyKX1zdGF0aWMgZ2V0IE1JTl9JTUFHRVNfVE9fQ0FDSEUoKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiTUlOX0lNQUdFU19UT19DQUNIRSIsMTApfXN0YXRpYyBnZXQgTUFYX0JZVEVfU0laRSgpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJNQVhfQllURV9TSVpFIiw0ZTcpfWNvbnN0cnVjdG9yKCl7dGhpcy5fcmVmQ2FjaGU9bmV3IG4uUmVmU2V0Q2FjaGU7dGhpcy5faW1hZ2VDYWNoZT1uZXcgbi5SZWZTZXRDYWNoZX1nZXQgX2J5dGVTaXplKCl7bGV0IGU9MDtmb3IoY29uc3QgdCBvZiB0aGlzLl9pbWFnZUNhY2hlKWUrPXQuYnl0ZVNpemU7cmV0dXJuIGV9Z2V0IF9jYWNoZUxpbWl0UmVhY2hlZCgpe3JldHVybiEodGhpcy5faW1hZ2VDYWNoZS5zaXplPEdsb2JhbEltYWdlQ2FjaGUuTUlOX0lNQUdFU19UT19DQUNIRSkmJiEodGhpcy5fYnl0ZVNpemU8R2xvYmFsSW1hZ2VDYWNoZS5NQVhfQllURV9TSVpFKX1zaG91bGRDYWNoZShlLHQpe2NvbnN0IGE9dGhpcy5fcmVmQ2FjaGUuZ2V0KGUpO3JldHVybiEoKGE/YS5zaXplKyhhLmhhcyh0KT8wOjEpOjEpPEdsb2JhbEltYWdlQ2FjaGUuTlVNX1BBR0VTX1RIUkVTSE9MRCkmJiEoIXRoaXMuX2ltYWdlQ2FjaGUuaGFzKGUpJiZ0aGlzLl9jYWNoZUxpbWl0UmVhY2hlZCl9YWRkUGFnZUluZGV4KGUsdCl7bGV0IGE9dGhpcy5fcmVmQ2FjaGUuZ2V0KGUpO2lmKCFhKXthPW5ldyBTZXQ7dGhpcy5fcmVmQ2FjaGUucHV0KGUsYSl9YS5hZGQodCl9YWRkQnl0ZVNpemUoZSx0KXtjb25zdCBhPXRoaXMuX2ltYWdlQ2FjaGUuZ2V0KGUpO2EmJihhLmJ5dGVTaXplfHwoYS5ieXRlU2l6ZT10KSl9Z2V0RGF0YShlLHQpe2NvbnN0IGE9dGhpcy5fcmVmQ2FjaGUuZ2V0KGUpO2lmKCFhKXJldHVybiBudWxsO2lmKGEuc2l6ZTxHbG9iYWxJbWFnZUNhY2hlLk5VTV9QQUdFU19USFJFU0hPTEQpcmV0dXJuIG51bGw7Y29uc3Qgcj10aGlzLl9pbWFnZUNhY2hlLmdldChlKTtpZighcilyZXR1cm4gbnVsbDthLmFkZCh0KTtyZXR1cm4gcn1zZXREYXRhKGUsdCl7aWYoIXRoaXMuX3JlZkNhY2hlLmhhcyhlKSl0aHJvdyBuZXcgRXJyb3IoJ0dsb2JhbEltYWdlQ2FjaGUuc2V0RGF0YSAtIGV4cGVjdGVkICJhZGRQYWdlSW5kZXgiIHRvIGhhdmUgYmVlbiBjYWxsZWQuJyk7dGhpcy5faW1hZ2VDYWNoZS5oYXMoZSl8fCh0aGlzLl9jYWNoZUxpbWl0UmVhY2hlZD8oMCxyLndhcm4pKCJHbG9iYWxJbWFnZUNhY2hlLnNldERhdGEgLSBjYWNoZSBsaW1pdCByZWFjaGVkLiIpOnRoaXMuX2ltYWdlQ2FjaGUucHV0KGUsdCkpfWNsZWFyKGU9ITEpe2V8fHRoaXMuX3JlZkNhY2hlLmNsZWFyKCk7dGhpcy5faW1hZ2VDYWNoZS5jbGVhcigpfX10Lkdsb2JhbEltYWdlQ2FjaGU9R2xvYmFsSW1hZ2VDYWNoZX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LmJpZGk9ZnVuY3Rpb24gYmlkaShlLHQ9LTEsYT0hMSl7bGV0IGM9ITA7Y29uc3QgbD1lLmxlbmd0aDtpZigwPT09bHx8YSlyZXR1cm4gY3JlYXRlQmlkaVRleHQoZSxjLGEpO3MubGVuZ3RoPWw7by5sZW5ndGg9bDtsZXQgaCx1LGQ9MDtmb3IoaD0wO2g8bDsrK2gpe3NbaF09ZS5jaGFyQXQoaCk7Y29uc3QgdD1lLmNoYXJDb2RlQXQoaCk7bGV0IGE9IkwiO2lmKHQ8PTI1NSlhPW5bdF07ZWxzZSBpZigxNDI0PD10JiZ0PD0xNTI0KWE9IlIiO2Vsc2UgaWYoMTUzNjw9dCYmdDw9MTc5MSl7YT1pWzI1NSZ0XTthfHwoMCxyLndhcm4pKCJCaWRpOiBpbnZhbGlkIFVuaWNvZGUgY2hhcmFjdGVyICIrdC50b1N0cmluZygxNikpfWVsc2UgMTc5Mjw9dCYmdDw9MjIyMCYmKGE9IkFMIik7IlIiIT09YSYmIkFMIiE9PWEmJiJBTiIhPT1hfHxkKys7b1toXT1hfWlmKDA9PT1kKXtjPSEwO3JldHVybiBjcmVhdGVCaWRpVGV4dChlLGMpfWlmKC0xPT09dClpZihkL2w8LjMmJmw+NCl7Yz0hMDt0PTB9ZWxzZXtjPSExO3Q9MX1jb25zdCBmPVtdO2ZvcihoPTA7aDxsOysraClmW2hdPXQ7Y29uc3QgZz1pc09kZCh0KT8iUiI6IkwiLHA9ZyxtPXA7bGV0IGIseT1wO2ZvcihoPTA7aDxsOysraCkiTlNNIj09PW9baF0/b1toXT15Onk9b1toXTt5PXA7Zm9yKGg9MDtoPGw7KytoKXtiPW9baF07IkVOIj09PWI/b1toXT0iQUwiPT09eT8iQU4iOiJFTiI6IlIiIT09YiYmIkwiIT09YiYmIkFMIiE9PWJ8fCh5PWIpfWZvcihoPTA7aDxsOysraCl7Yj1vW2hdOyJBTCI9PT1iJiYob1toXT0iUiIpfWZvcihoPTE7aDxsLTE7KytoKXsiRVMiPT09b1toXSYmIkVOIj09PW9baC0xXSYmIkVOIj09PW9baCsxXSYmKG9baF09IkVOIik7IkNTIiE9PW9baF18fCJFTiIhPT1vW2gtMV0mJiJBTiIhPT1vW2gtMV18fG9baCsxXSE9PW9baC0xXXx8KG9baF09b1toLTFdKX1mb3IoaD0wO2g8bDsrK2gpaWYoIkVOIj09PW9baF0pe2ZvcihsZXQgZT1oLTE7ZT49MCYmIkVUIj09PW9bZV07LS1lKW9bZV09IkVOIjtmb3IobGV0IGU9aCsxO2U8bCYmIkVUIj09PW9bZV07KytlKW9bZV09IkVOIn1mb3IoaD0wO2g8bDsrK2gpe2I9b1toXTsiV1MiIT09YiYmIkVTIiE9PWImJiJFVCIhPT1iJiYiQ1MiIT09Ynx8KG9baF09Ik9OIil9eT1wO2ZvcihoPTA7aDxsOysraCl7Yj1vW2hdOyJFTiI9PT1iP29baF09IkwiPT09eT8iTCI6IkVOIjoiUiIhPT1iJiYiTCIhPT1ifHwoeT1iKX1mb3IoaD0wO2g8bDsrK2gpaWYoIk9OIj09PW9baF0pe2NvbnN0IGU9ZmluZFVuZXF1YWwobyxoKzEsIk9OIik7bGV0IHQ9cDtoPjAmJih0PW9baC0xXSk7bGV0IGE9bTtlKzE8bCYmKGE9b1tlKzFdKTsiTCIhPT10JiYodD0iUiIpOyJMIiE9PWEmJihhPSJSIik7dD09PWEmJnNldFZhbHVlcyhvLGgsZSx0KTtoPWUtMX1mb3IoaD0wO2g8bDsrK2gpIk9OIj09PW9baF0mJihvW2hdPWcpO2ZvcihoPTA7aDxsOysraCl7Yj1vW2hdO2lzRXZlbihmW2hdKT8iUiI9PT1iP2ZbaF0rPTE6IkFOIiE9PWImJiJFTiIhPT1ifHwoZltoXSs9Mik6IkwiIT09YiYmIkFOIiE9PWImJiJFTiIhPT1ifHwoZltoXSs9MSl9bGV0IHcsUz0tMSx4PTk5O2ZvcihoPTAsdT1mLmxlbmd0aDtoPHU7KytoKXt3PWZbaF07Uzx3JiYoUz13KTt4PncmJmlzT2RkKHcpJiYoeD13KX1mb3Iodz1TO3c+PXg7LS13KXtsZXQgZT0tMTtmb3IoaD0wLHU9Zi5sZW5ndGg7aDx1OysraClpZihmW2hdPHcpe2lmKGU+PTApe3JldmVyc2VWYWx1ZXMocyxlLGgpO2U9LTF9fWVsc2UgZTwwJiYoZT1oKTtlPj0wJiZyZXZlcnNlVmFsdWVzKHMsZSxmLmxlbmd0aCl9Zm9yKGg9MCx1PXMubGVuZ3RoO2g8dTsrK2gpe2NvbnN0IGU9c1toXTsiPCIhPT1lJiYiPiIhPT1lfHwoc1toXT0iIil9cmV0dXJuIGNyZWF0ZUJpZGlUZXh0KHMuam9pbigiIiksYyl9O3ZhciByPWEoMik7Y29uc3Qgbj1bIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIlMiLCJCIiwiUyIsIldTIiwiQiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCIiwiQiIsIkIiLCJTIiwiV1MiLCJPTiIsIk9OIiwiRVQiLCJFVCIsIkVUIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIkVTIiwiQ1MiLCJFUyIsIkNTIiwiQ1MiLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkNTIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIk9OIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJPTiIsIk9OIiwiT04iLCJPTiIsIk9OIiwiT04iLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIk9OIiwiT04iLCJPTiIsIk9OIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJDUyIsIk9OIiwiRVQiLCJFVCIsIkVUIiwiRVQiLCJPTiIsIk9OIiwiT04iLCJPTiIsIkwiLCJPTiIsIk9OIiwiQk4iLCJPTiIsIk9OIiwiRVQiLCJFVCIsIkVOIiwiRU4iLCJPTiIsIkwiLCJPTiIsIk9OIiwiT04iLCJFTiIsIkwiLCJPTiIsIk9OIiwiT04iLCJPTiIsIk9OIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJPTiIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJPTiIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIl0saT1bIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIk9OIiwiT04iLCJBTCIsIkVUIiwiRVQiLCJBTCIsIkNTIiwiQUwiLCJPTiIsIk9OIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiQUwiLCJBTCIsIiIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiRVQiLCJBTiIsIkFOIiwiQUwiLCJBTCIsIkFMIiwiTlNNIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIkFOIiwiT04iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJBTCIsIkFMIiwiTlNNIiwiTlNNIiwiT04iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJBTCIsIkFMIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiXTtmdW5jdGlvbiBpc09kZChlKXtyZXR1cm4gMCE9KDEmZSl9ZnVuY3Rpb24gaXNFdmVuKGUpe3JldHVybiAwPT0oMSZlKX1mdW5jdGlvbiBmaW5kVW5lcXVhbChlLHQsYSl7bGV0IHIsbjtmb3Iocj10LG49ZS5sZW5ndGg7cjxuOysrcilpZihlW3JdIT09YSlyZXR1cm4gcjtyZXR1cm4gcn1mdW5jdGlvbiBzZXRWYWx1ZXMoZSx0LGEscil7Zm9yKGxldCBuPXQ7bjxhOysrbillW25dPXJ9ZnVuY3Rpb24gcmV2ZXJzZVZhbHVlcyhlLHQsYSl7Zm9yKGxldCByPXQsbj1hLTE7cjxuOysrciwtLW4pe2NvbnN0IHQ9ZVtyXTtlW3JdPWVbbl07ZVtuXT10fX1mdW5jdGlvbiBjcmVhdGVCaWRpVGV4dChlLHQsYT0hMSl7bGV0IHI9Imx0ciI7YT9yPSJ0dGIiOnR8fChyPSJydGwiKTtyZXR1cm57c3RyOmUsZGlyOnJ9fWNvbnN0IHM9W10sbz1bXX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0Lk11cm11ckhhc2gzXzY0PXZvaWQgMDt2YXIgcj1hKDIpO2NvbnN0IG49MzI4NTM3NzUyMCxpPTQyOTQ5MDE3NjAscz02NTUzNTt0Lk11cm11ckhhc2gzXzY0PWNsYXNzIE11cm11ckhhc2gzXzY0e2NvbnN0cnVjdG9yKGUpe3RoaXMuaDE9ZT80Mjk0OTY3Mjk1JmU6bjt0aGlzLmgyPWU/NDI5NDk2NzI5NSZlOm59dXBkYXRlKGUpe2xldCB0LGE7aWYoInN0cmluZyI9PXR5cGVvZiBlKXt0PW5ldyBVaW50OEFycmF5KDIqZS5sZW5ndGgpO2E9MDtmb3IobGV0IHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspe2NvbnN0IG49ZS5jaGFyQ29kZUF0KHIpO2lmKG48PTI1NSl0W2ErK109bjtlbHNle3RbYSsrXT1uPj4+ODt0W2ErK109MjU1Jm59fX1lbHNle2lmKCEoMCxyLmlzQXJyYXlCdWZmZXIpKGUpKXRocm93IG5ldyBFcnJvcigiV3JvbmcgZGF0YSBmb3JtYXQgaW4gTXVybXVySGFzaDNfNjRfdXBkYXRlLiBJbnB1dCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFycmF5LiIpO3Q9ZS5zbGljZSgpO2E9dC5ieXRlTGVuZ3RofWNvbnN0IG49YT4+MixvPWEtNCpuLGM9bmV3IFVpbnQzMkFycmF5KHQuYnVmZmVyLDAsbik7bGV0IGw9MCxoPTAsdT10aGlzLmgxLGQ9dGhpcy5oMjtjb25zdCBmPTM0MzI5MTgzNTMsZz00NjE4NDU5MDcscD0xMTYwMSxtPTEzNzE1O2ZvcihsZXQgZT0wO2U8bjtlKyspaWYoMSZlKXtsPWNbZV07bD1sKmYmaXxsKnAmcztsPWw8PDE1fGw+Pj4xNztsPWwqZyZpfGwqbSZzO3VePWw7dT11PDwxM3x1Pj4+MTk7dT01KnUrMzg2NDI5MjE5Nn1lbHNle2g9Y1tlXTtoPWgqZiZpfGgqcCZzO2g9aDw8MTV8aD4+PjE3O2g9aCpnJml8aCptJnM7ZF49aDtkPWQ8PDEzfGQ+Pj4xOTtkPTUqZCszODY0MjkyMTk2fWw9MDtzd2l0Y2gobyl7Y2FzZSAzOmxePXRbNCpuKzJdPDwxNjtjYXNlIDI6bF49dFs0Km4rMV08PDg7Y2FzZSAxOmxePXRbNCpuXTtsPWwqZiZpfGwqcCZzO2w9bDw8MTV8bD4+PjE3O2w9bCpnJml8bCptJnM7MSZuP3VePWw6ZF49bH10aGlzLmgxPXU7dGhpcy5oMj1kfWhleGRpZ2VzdCgpe2xldCBlPXRoaXMuaDEsdD10aGlzLmgyO2VePXQ+Pj4xO2U9Mzk4MTgwNjc5NyplJml8MzYwNDUqZSZzO3Q9NDI4MzU0MzUxMSp0Jml8KDI5NTAxNjM3OTcqKHQ8PDE2fGU+Pj4xNikmaSk+Pj4xNjtlXj10Pj4+MTtlPTQ0NDk4NDQwMyplJml8NjA0OTkqZSZzO3Q9MzMwMTg4MjM2Nip0Jml8KDMxMjA0Mzc4OTMqKHQ8PDE2fGU+Pj4xNikmaSk+Pj4xNjtlXj10Pj4+MTtjb25zdCBhPShlPj4+MCkudG9TdHJpbmcoMTYpLHI9KHQ+Pj4wKS50b1N0cmluZygxNik7cmV0dXJuIGEucGFkU3RhcnQoOCwiMCIpK3IucGFkU3RhcnQoOCwiMCIpfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5PcGVyYXRvckxpc3Q9dm9pZCAwO3ZhciByPWEoMik7ZnVuY3Rpb24gYWRkU3RhdGUoZSx0LGEscixuKXtsZXQgaT1lO2ZvcihsZXQgZT0wLGE9dC5sZW5ndGgtMTtlPGE7ZSsrKXtjb25zdCBhPXRbZV07aT1pW2FdfHwoaVthXT1bXSl9aVt0LmF0KC0xKV09e2NoZWNrRm46YSxpdGVyYXRlRm46cixwcm9jZXNzRm46bn19Y29uc3Qgbj1bXTthZGRTdGF0ZShuLFtyLk9QUy5zYXZlLHIuT1BTLnRyYW5zZm9ybSxyLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdCxyLk9QUy5yZXN0b3JlXSxudWxsLChmdW5jdGlvbiBpdGVyYXRlSW5saW5lSW1hZ2VHcm91cChlLHQpe2NvbnN0IGE9ZS5mbkFycmF5LG49KHQtKGUuaUN1cnItMykpJTQ7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gYVt0XT09PXIuT1BTLnNhdmU7Y2FzZSAxOnJldHVybiBhW3RdPT09ci5PUFMudHJhbnNmb3JtO2Nhc2UgMjpyZXR1cm4gYVt0XT09PXIuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0O2Nhc2UgMzpyZXR1cm4gYVt0XT09PXIuT1BTLnJlc3RvcmV9dGhyb3cgbmV3IEVycm9yKGBpdGVyYXRlSW5saW5lSW1hZ2VHcm91cCAtIGludmFsaWQgcG9zOiAke259YCl9KSwoZnVuY3Rpb24gZm91bmRJbmxpbmVJbWFnZUdyb3VwKGUsdCl7Y29uc3QgYT1lLmZuQXJyYXksbj1lLmFyZ3NBcnJheSxpPWUuaUN1cnIscz1pLTMsbz1pLTIsYz1pLTEsbD1NYXRoLm1pbihNYXRoLmZsb29yKCh0LXMpLzQpLDIwMCk7aWYobDwxMClyZXR1cm4gdC0odC1zKSU0O2xldCBoPTA7Y29uc3QgdT1bXTtsZXQgZD0wLGY9MSxnPTE7Zm9yKGxldCBlPTA7ZTxsO2UrKyl7Y29uc3QgdD1uW28rKGU8PDIpXSxhPW5bYysoZTw8MildWzBdO2lmKGYrYS53aWR0aD4xZTMpe2g9TWF0aC5tYXgoaCxmKTtnKz1kKzI7Zj0wO2Q9MH11LnB1c2goe3RyYW5zZm9ybTp0LHg6Zix5OmcsdzphLndpZHRoLGg6YS5oZWlnaHR9KTtmKz1hLndpZHRoKzI7ZD1NYXRoLm1heChkLGEuaGVpZ2h0KX1jb25zdCBwPU1hdGgubWF4KGgsZikrMSxtPWcrZCsxLGI9bmV3IFVpbnQ4QXJyYXkocCptKjQpLHk9cDw8Mjtmb3IobGV0IGU9MDtlPGw7ZSsrKXtjb25zdCB0PW5bYysoZTw8MildWzBdLmRhdGEsYT11W2VdLnc8PDI7bGV0IHI9MCxpPXVbZV0ueCt1W2VdLnkqcDw8MjtiLnNldCh0LnN1YmFycmF5KDAsYSksaS15KTtmb3IobGV0IG49MCxzPXVbZV0uaDtuPHM7bisrKXtiLnNldCh0LnN1YmFycmF5KHIscithKSxpKTtyKz1hO2krPXl9Yi5zZXQodC5zdWJhcnJheShyLWEsciksaSk7Zm9yKDtpPj0wOyl7dFtpLTRdPXRbaV07dFtpLTNdPXRbaSsxXTt0W2ktMl09dFtpKzJdO3RbaS0xXT10W2krM107dFtpK2FdPXRbaSthLTRdO3RbaSthKzFdPXRbaSthLTNdO3RbaSthKzJdPXRbaSthLTJdO3RbaSthKzNdPXRbaSthLTFdO2ktPXl9fWEuc3BsaWNlKHMsNCpsLHIuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXApO24uc3BsaWNlKHMsNCpsLFt7d2lkdGg6cCxoZWlnaHQ6bSxraW5kOnIuSW1hZ2VLaW5kLlJHQkFfMzJCUFAsZGF0YTpifSx1XSk7cmV0dXJuIHMrMX0pKTthZGRTdGF0ZShuLFtyLk9QUy5zYXZlLHIuT1BTLnRyYW5zZm9ybSxyLk9QUy5wYWludEltYWdlTWFza1hPYmplY3Qsci5PUFMucmVzdG9yZV0sbnVsbCwoZnVuY3Rpb24gaXRlcmF0ZUltYWdlTWFza0dyb3VwKGUsdCl7Y29uc3QgYT1lLmZuQXJyYXksbj0odC0oZS5pQ3Vyci0zKSklNDtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiBhW3RdPT09ci5PUFMuc2F2ZTtjYXNlIDE6cmV0dXJuIGFbdF09PT1yLk9QUy50cmFuc2Zvcm07Y2FzZSAyOnJldHVybiBhW3RdPT09ci5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0O2Nhc2UgMzpyZXR1cm4gYVt0XT09PXIuT1BTLnJlc3RvcmV9dGhyb3cgbmV3IEVycm9yKGBpdGVyYXRlSW1hZ2VNYXNrR3JvdXAgLSBpbnZhbGlkIHBvczogJHtufWApfSksKGZ1bmN0aW9uIGZvdW5kSW1hZ2VNYXNrR3JvdXAoZSx0KXtjb25zdCBhPWUuZm5BcnJheSxuPWUuYXJnc0FycmF5LGk9ZS5pQ3VycixzPWktMyxvPWktMixjPWktMTtsZXQgbD1NYXRoLmZsb29yKCh0LXMpLzQpO2lmKGw8MTApcmV0dXJuIHQtKHQtcyklNDtsZXQgaCx1LGQ9ITE7Y29uc3QgZj1uW2NdWzBdLGc9bltvXVswXSxwPW5bb11bMV0sbT1uW29dWzJdLGI9bltvXVszXTtpZihwPT09bSl7ZD0hMDtoPW8rNDtsZXQgZT1jKzQ7Zm9yKGxldCB0PTE7dDxsO3QrKyxoKz00LGUrPTQpe3U9bltoXTtpZihuW2VdWzBdIT09Znx8dVswXSE9PWd8fHVbMV0hPT1wfHx1WzJdIT09bXx8dVszXSE9PWIpe3Q8MTA/ZD0hMTpsPXQ7YnJlYWt9fX1pZihkKXtsPU1hdGgubWluKGwsMWUzKTtjb25zdCBlPW5ldyBGbG9hdDMyQXJyYXkoMipsKTtoPW87Zm9yKGxldCB0PTA7dDxsO3QrKyxoKz00KXt1PW5baF07ZVt0PDwxXT11WzRdO2VbMSsodDw8MSldPXVbNV19YS5zcGxpY2Uocyw0Kmwsci5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0UmVwZWF0KTtuLnNwbGljZShzLDQqbCxbZixnLHAsbSxiLGVdKX1lbHNle2w9TWF0aC5taW4obCwxMDApO2NvbnN0IGU9W107Zm9yKGxldCB0PTA7dDxsO3QrKyl7dT1uW28rKHQ8PDIpXTtjb25zdCBhPW5bYysodDw8MildWzBdO2UucHVzaCh7ZGF0YTphLmRhdGEsd2lkdGg6YS53aWR0aCxoZWlnaHQ6YS5oZWlnaHQsaW50ZXJwb2xhdGU6YS5pbnRlcnBvbGF0ZSxjb3VudDphLmNvdW50LHRyYW5zZm9ybTp1fSl9YS5zcGxpY2Uocyw0Kmwsci5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0R3JvdXApO24uc3BsaWNlKHMsNCpsLFtlXSl9cmV0dXJuIHMrMX0pKTthZGRTdGF0ZShuLFtyLk9QUy5zYXZlLHIuT1BTLnRyYW5zZm9ybSxyLk9QUy5wYWludEltYWdlWE9iamVjdCxyLk9QUy5yZXN0b3JlXSwoZnVuY3Rpb24oZSl7Y29uc3QgdD1lLmFyZ3NBcnJheSxhPWUuaUN1cnItMjtyZXR1cm4gMD09PXRbYV1bMV0mJjA9PT10W2FdWzJdfSksKGZ1bmN0aW9uIGl0ZXJhdGVJbWFnZUdyb3VwKGUsdCl7Y29uc3QgYT1lLmZuQXJyYXksbj1lLmFyZ3NBcnJheSxpPSh0LShlLmlDdXJyLTMpKSU0O3N3aXRjaChpKXtjYXNlIDA6cmV0dXJuIGFbdF09PT1yLk9QUy5zYXZlO2Nhc2UgMTppZihhW3RdIT09ci5PUFMudHJhbnNmb3JtKXJldHVybiExO2NvbnN0IGk9ZS5pQ3Vyci0yLHM9bltpXVswXSxvPW5baV1bM107cmV0dXJuIG5bdF1bMF09PT1zJiYwPT09blt0XVsxXSYmMD09PW5bdF1bMl0mJm5bdF1bM109PT1vO2Nhc2UgMjppZihhW3RdIT09ci5PUFMucGFpbnRJbWFnZVhPYmplY3QpcmV0dXJuITE7Y29uc3QgYz1uW2UuaUN1cnItMV1bMF07cmV0dXJuIG5bdF1bMF09PT1jO2Nhc2UgMzpyZXR1cm4gYVt0XT09PXIuT1BTLnJlc3RvcmV9dGhyb3cgbmV3IEVycm9yKGBpdGVyYXRlSW1hZ2VHcm91cCAtIGludmFsaWQgcG9zOiAke2l9YCl9KSwoZnVuY3Rpb24oZSx0KXtjb25zdCBhPWUuZm5BcnJheSxuPWUuYXJnc0FycmF5LGk9ZS5pQ3VycixzPWktMyxvPWktMixjPW5baS0xXVswXSxsPW5bb11bMF0saD1uW29dWzNdLHU9TWF0aC5taW4oTWF0aC5mbG9vcigodC1zKS80KSwxZTMpO2lmKHU8MylyZXR1cm4gdC0odC1zKSU0O2NvbnN0IGQ9bmV3IEZsb2F0MzJBcnJheSgyKnUpO2xldCBmPW87Zm9yKGxldCBlPTA7ZTx1O2UrKyxmKz00KXtjb25zdCB0PW5bZl07ZFtlPDwxXT10WzRdO2RbMSsoZTw8MSldPXRbNV19Y29uc3QgZz1bYyxsLGgsZF07YS5zcGxpY2Uocyw0KnUsci5PUFMucGFpbnRJbWFnZVhPYmplY3RSZXBlYXQpO24uc3BsaWNlKHMsNCp1LGcpO3JldHVybiBzKzF9KSk7YWRkU3RhdGUobixbci5PUFMuYmVnaW5UZXh0LHIuT1BTLnNldEZvbnQsci5PUFMuc2V0VGV4dE1hdHJpeCxyLk9QUy5zaG93VGV4dCxyLk9QUy5lbmRUZXh0XSxudWxsLChmdW5jdGlvbiBpdGVyYXRlU2hvd1RleHRHcm91cChlLHQpe2NvbnN0IGE9ZS5mbkFycmF5LG49ZS5hcmdzQXJyYXksaT0odC0oZS5pQ3Vyci00KSklNTtzd2l0Y2goaSl7Y2FzZSAwOnJldHVybiBhW3RdPT09ci5PUFMuYmVnaW5UZXh0O2Nhc2UgMTpyZXR1cm4gYVt0XT09PXIuT1BTLnNldEZvbnQ7Y2FzZSAyOnJldHVybiBhW3RdPT09ci5PUFMuc2V0VGV4dE1hdHJpeDtjYXNlIDM6aWYoYVt0XSE9PXIuT1BTLnNob3dUZXh0KXJldHVybiExO2NvbnN0IGk9ZS5pQ3Vyci0zLHM9bltpXVswXSxvPW5baV1bMV07cmV0dXJuIG5bdF1bMF09PT1zJiZuW3RdWzFdPT09bztjYXNlIDQ6cmV0dXJuIGFbdF09PT1yLk9QUy5lbmRUZXh0fXRocm93IG5ldyBFcnJvcihgaXRlcmF0ZVNob3dUZXh0R3JvdXAgLSBpbnZhbGlkIHBvczogJHtpfWApfSksKGZ1bmN0aW9uKGUsdCl7Y29uc3QgYT1lLmZuQXJyYXkscj1lLmFyZ3NBcnJheSxuPWUuaUN1cnIsaT1uLTQscz1uLTMsbz1uLTIsYz1uLTEsbD1uLGg9cltzXVswXSx1PXJbc11bMV07bGV0IGQ9TWF0aC5taW4oTWF0aC5mbG9vcigodC1pKS81KSwxZTMpO2lmKGQ8MylyZXR1cm4gdC0odC1pKSU1O2xldCBmPWk7aWYoaT49NCYmYVtpLTRdPT09YVtzXSYmYVtpLTNdPT09YVtvXSYmYVtpLTJdPT09YVtjXSYmYVtpLTFdPT09YVtsXSYmcltpLTRdWzBdPT09aCYmcltpLTRdWzFdPT09dSl7ZCsrO2YtPTV9bGV0IGc9Zis0O2ZvcihsZXQgZT0xO2U8ZDtlKyspe2Euc3BsaWNlKGcsMyk7ci5zcGxpY2UoZywzKTtnKz0yfXJldHVybiBnKzF9KSk7Y2xhc3MgTnVsbE9wdGltaXplcntjb25zdHJ1Y3RvcihlKXt0aGlzLnF1ZXVlPWV9X29wdGltaXplKCl7fXB1c2goZSx0KXt0aGlzLnF1ZXVlLmZuQXJyYXkucHVzaChlKTt0aGlzLnF1ZXVlLmFyZ3NBcnJheS5wdXNoKHQpO3RoaXMuX29wdGltaXplKCl9Zmx1c2goKXt9cmVzZXQoKXt9fWNsYXNzIFF1ZXVlT3B0aW1pemVyIGV4dGVuZHMgTnVsbE9wdGltaXplcntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLnN0YXRlPW51bGw7dGhpcy5jb250ZXh0PXtpQ3VycjowLGZuQXJyYXk6ZS5mbkFycmF5LGFyZ3NBcnJheTplLmFyZ3NBcnJheX07dGhpcy5tYXRjaD1udWxsO3RoaXMubGFzdFByb2Nlc3NlZD0wfV9vcHRpbWl6ZSgpe2NvbnN0IGU9dGhpcy5xdWV1ZS5mbkFycmF5O2xldCB0PXRoaXMubGFzdFByb2Nlc3NlZCxhPWUubGVuZ3RoLHI9dGhpcy5zdGF0ZSxpPXRoaXMubWF0Y2g7aWYoIXImJiFpJiZ0KzE9PT1hJiYhbltlW3RdXSl7dGhpcy5sYXN0UHJvY2Vzc2VkPWE7cmV0dXJufWNvbnN0IHM9dGhpcy5jb250ZXh0O2Zvcig7dDxhOyl7aWYoaSl7aWYoKDAsaS5pdGVyYXRlRm4pKHMsdCkpe3QrKztjb250aW51ZX10PSgwLGkucHJvY2Vzc0ZuKShzLHQrMSk7YT1lLmxlbmd0aDtpPW51bGw7cj1udWxsO2lmKHQ+PWEpYnJlYWt9cj0ocnx8bilbZVt0XV07aWYociYmIUFycmF5LmlzQXJyYXkocikpe3MuaUN1cnI9dDt0Kys7aWYoIXIuY2hlY2tGbnx8KDAsci5jaGVja0ZuKShzKSl7aT1yO3I9bnVsbH1lbHNlIHI9bnVsbH1lbHNlIHQrK310aGlzLnN0YXRlPXI7dGhpcy5tYXRjaD1pO3RoaXMubGFzdFByb2Nlc3NlZD10fWZsdXNoKCl7Zm9yKDt0aGlzLm1hdGNoOyl7Y29uc3QgZT10aGlzLnF1ZXVlLmZuQXJyYXkubGVuZ3RoO3RoaXMubGFzdFByb2Nlc3NlZD0oMCx0aGlzLm1hdGNoLnByb2Nlc3NGbikodGhpcy5jb250ZXh0LGUpO3RoaXMubWF0Y2g9bnVsbDt0aGlzLnN0YXRlPW51bGw7dGhpcy5fb3B0aW1pemUoKX19cmVzZXQoKXt0aGlzLnN0YXRlPW51bGw7dGhpcy5tYXRjaD1udWxsO3RoaXMubGFzdFByb2Nlc3NlZD0wfX1jbGFzcyBPcGVyYXRvckxpc3R7c3RhdGljIGdldCBDSFVOS19TSVpFKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsIkNIVU5LX1NJWkUiLDFlMyl9c3RhdGljIGdldCBDSFVOS19TSVpFX0FCT1VUKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsIkNIVU5LX1NJWkVfQUJPVVQiLHRoaXMuQ0hVTktfU0laRS01KX1jb25zdHJ1Y3RvcihlPTAsdCl7dGhpcy5fc3RyZWFtU2luaz10O3RoaXMuZm5BcnJheT1bXTt0aGlzLmFyZ3NBcnJheT1bXTshdHx8ZSZyLlJlbmRlcmluZ0ludGVudEZsYWcuT1BMSVNUP3RoaXMub3B0aW1pemVyPW5ldyBOdWxsT3B0aW1pemVyKHRoaXMpOnRoaXMub3B0aW1pemVyPW5ldyBRdWV1ZU9wdGltaXplcih0aGlzKTt0aGlzLmRlcGVuZGVuY2llcz1uZXcgU2V0O3RoaXMuX3RvdGFsTGVuZ3RoPTA7dGhpcy53ZWlnaHQ9MDt0aGlzLl9yZXNvbHZlZD10P251bGw6UHJvbWlzZS5yZXNvbHZlKCl9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmFyZ3NBcnJheS5sZW5ndGh9Z2V0IHJlYWR5KCl7cmV0dXJuIHRoaXMuX3Jlc29sdmVkfHx0aGlzLl9zdHJlYW1TaW5rLnJlYWR5fWdldCB0b3RhbExlbmd0aCgpe3JldHVybiB0aGlzLl90b3RhbExlbmd0aCt0aGlzLmxlbmd0aH1hZGRPcChlLHQpe3RoaXMub3B0aW1pemVyLnB1c2goZSx0KTt0aGlzLndlaWdodCsrO3RoaXMuX3N0cmVhbVNpbmsmJih0aGlzLndlaWdodD49T3BlcmF0b3JMaXN0LkNIVU5LX1NJWkV8fHRoaXMud2VpZ2h0Pj1PcGVyYXRvckxpc3QuQ0hVTktfU0laRV9BQk9VVCYmKGU9PT1yLk9QUy5yZXN0b3JlfHxlPT09ci5PUFMuZW5kVGV4dCkpJiZ0aGlzLmZsdXNoKCl9YWRkSW1hZ2VPcHMoZSx0LGEpe3ZvaWQgMCE9PWEmJnRoaXMuYWRkT3Aoci5PUFMuYmVnaW5NYXJrZWRDb250ZW50UHJvcHMsWyJPQyIsYV0pO3RoaXMuYWRkT3AoZSx0KTt2b2lkIDAhPT1hJiZ0aGlzLmFkZE9wKHIuT1BTLmVuZE1hcmtlZENvbnRlbnQsW10pfWFkZERlcGVuZGVuY3koZSl7aWYoIXRoaXMuZGVwZW5kZW5jaWVzLmhhcyhlKSl7dGhpcy5kZXBlbmRlbmNpZXMuYWRkKGUpO3RoaXMuYWRkT3Aoci5PUFMuZGVwZW5kZW5jeSxbZV0pfX1hZGREZXBlbmRlbmNpZXMoZSl7Zm9yKGNvbnN0IHQgb2YgZSl0aGlzLmFkZERlcGVuZGVuY3kodCl9YWRkT3BMaXN0KGUpe2lmKGUgaW5zdGFuY2VvZiBPcGVyYXRvckxpc3Qpe2Zvcihjb25zdCB0IG9mIGUuZGVwZW5kZW5jaWVzKXRoaXMuZGVwZW5kZW5jaWVzLmFkZCh0KTtmb3IobGV0IHQ9MCxhPWUubGVuZ3RoO3Q8YTt0KyspdGhpcy5hZGRPcChlLmZuQXJyYXlbdF0sZS5hcmdzQXJyYXlbdF0pfWVsc2UoMCxyLndhcm4pKCdhZGRPcExpc3QgLSBpZ25vcmluZyBpbnZhbGlkICJvcExpc3QiIHBhcmFtZXRlci4nKX1nZXRJUigpe3JldHVybntmbkFycmF5OnRoaXMuZm5BcnJheSxhcmdzQXJyYXk6dGhpcy5hcmdzQXJyYXksbGVuZ3RoOnRoaXMubGVuZ3RofX1nZXQgX3RyYW5zZmVycygpe2NvbnN0IGU9W10se2ZuQXJyYXk6dCxhcmdzQXJyYXk6YSxsZW5ndGg6bn09dGhpcztmb3IobGV0IGk9MDtpPG47aSsrKXN3aXRjaCh0W2ldKXtjYXNlIHIuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0OmNhc2Ugci5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cDpjYXNlIHIuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdDpjb25zdCB0PWFbaV1bMF07IXQuY2FjaGVkJiZ0LmRhdGEmJnQuZGF0YS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmZS5wdXNoKHQuZGF0YS5idWZmZXIpfXJldHVybiBlfWZsdXNoKGU9ITEsdD1udWxsKXt0aGlzLm9wdGltaXplci5mbHVzaCgpO2NvbnN0IGE9dGhpcy5sZW5ndGg7dGhpcy5fdG90YWxMZW5ndGgrPWE7dGhpcy5fc3RyZWFtU2luay5lbnF1ZXVlKHtmbkFycmF5OnRoaXMuZm5BcnJheSxhcmdzQXJyYXk6dGhpcy5hcmdzQXJyYXksbGFzdENodW5rOmUsc2VwYXJhdGVBbm5vdHM6dCxsZW5ndGg6YX0sMSx0aGlzLl90cmFuc2ZlcnMpO3RoaXMuZGVwZW5kZW5jaWVzLmNsZWFyKCk7dGhpcy5mbkFycmF5Lmxlbmd0aD0wO3RoaXMuYXJnc0FycmF5Lmxlbmd0aD0wO3RoaXMud2VpZ2h0PTA7dGhpcy5vcHRpbWl6ZXIucmVzZXQoKX19dC5PcGVyYXRvckxpc3Q9T3BlcmF0b3JMaXN0fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuUERGSW1hZ2U9dm9pZCAwO3ZhciByPWEoMiksbj1hKDYyKSxpPWEoNSkscz1hKDEyKSxvPWEoMTcpLGM9YSgyNSksbD1hKDI4KSxoPWEoMyk7ZnVuY3Rpb24gZGVjb2RlQW5kQ2xhbXAoZSx0LGEscil7KGU9dCtlKmEpPDA/ZT0wOmU+ciYmKGU9cik7cmV0dXJuIGV9ZnVuY3Rpb24gcmVzaXplSW1hZ2VNYXNrKGUsdCxhLHIsbixpKXtjb25zdCBzPW4qaTtsZXQgbztvPXQ8PTg/bmV3IFVpbnQ4QXJyYXkocyk6dDw9MTY/bmV3IFVpbnQxNkFycmF5KHMpOm5ldyBVaW50MzJBcnJheShzKTtjb25zdCBjPWEvbixsPXIvaTtsZXQgaCx1LGQsZixnPTA7Y29uc3QgcD1uZXcgVWludDE2QXJyYXkobiksbT1hO2ZvcihoPTA7aDxuO2grKylwW2hdPU1hdGguZmxvb3IoaCpjKTtmb3IoaD0wO2g8aTtoKyspe2Q9TWF0aC5mbG9vcihoKmwpKm07Zm9yKHU9MDt1PG47dSsrKXtmPWQrcFt1XTtvW2crK109ZVtmXX19cmV0dXJuIG99Y2xhc3MgUERGSW1hZ2V7Y29uc3RydWN0b3Ioe3hyZWY6ZSxyZXM6dCxpbWFnZTphLGlzSW5saW5lOm49ITEsc21hc2s6bz1udWxsLG1hc2s6Yz1udWxsLGlzTWFzazp1PSExLHBkZkZ1bmN0aW9uRmFjdG9yeTpkLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmZ9KXt0aGlzLmltYWdlPWE7Y29uc3QgZz1hLmRpY3QscD1nLmdldCgiRiIsIkZpbHRlciIpO2xldCBtO2lmKHAgaW5zdGFuY2VvZiBoLk5hbWUpbT1wLm5hbWU7ZWxzZSBpZihBcnJheS5pc0FycmF5KHApKXtjb25zdCB0PWUuZmV0Y2hJZlJlZihwWzBdKTt0IGluc3RhbmNlb2YgaC5OYW1lJiYobT10Lm5hbWUpfXN3aXRjaChtKXtjYXNlIkpQWERlY29kZSI6Y29uc3QgZT1uZXcgbC5KcHhJbWFnZTtlLnBhcnNlSW1hZ2VQcm9wZXJ0aWVzKGEuc3RyZWFtKTthLnN0cmVhbS5yZXNldCgpO2Eud2lkdGg9ZS53aWR0aDthLmhlaWdodD1lLmhlaWdodDthLmJpdHNQZXJDb21wb25lbnQ9ZS5iaXRzUGVyQ29tcG9uZW50O2EubnVtQ29tcHM9ZS5jb21wb25lbnRzQ291bnQ7YnJlYWs7Y2FzZSJKQklHMkRlY29kZSI6YS5iaXRzUGVyQ29tcG9uZW50PTE7YS5udW1Db21wcz0xfWxldCBiPWcuZ2V0KCJXIiwiV2lkdGgiKSx5PWcuZ2V0KCJIIiwiSGVpZ2h0Iik7aWYoTnVtYmVyLmlzSW50ZWdlcihhLndpZHRoKSYmYS53aWR0aD4wJiZOdW1iZXIuaXNJbnRlZ2VyKGEuaGVpZ2h0KSYmYS5oZWlnaHQ+MCYmKGEud2lkdGghPT1ifHxhLmhlaWdodCE9PXkpKXsoMCxyLndhcm4pKCJQREZJbWFnZSAtIHVzaW5nIHRoZSBXaWR0aC9IZWlnaHQgb2YgdGhlIGltYWdlIGRhdGEsIHJhdGhlciB0aGFuIHRoZSBpbWFnZSBkaWN0aW9uYXJ5LiIpO2I9YS53aWR0aDt5PWEuaGVpZ2h0fWlmKGI8MXx8eTwxKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBJbnZhbGlkIGltYWdlIHdpZHRoOiAke2J9IG9yIGhlaWdodDogJHt5fWApO3RoaXMud2lkdGg9Yjt0aGlzLmhlaWdodD15O3RoaXMuaW50ZXJwb2xhdGU9Zy5nZXQoIkkiLCJJbnRlcnBvbGF0ZSIpO3RoaXMuaW1hZ2VNYXNrPWcuZ2V0KCJJTSIsIkltYWdlTWFzayIpfHwhMTt0aGlzLm1hdHRlPWcuZ2V0KCJNYXR0ZSIpfHwhMTtsZXQgdz1hLmJpdHNQZXJDb21wb25lbnQ7aWYoIXcpe3c9Zy5nZXQoIkJQQyIsIkJpdHNQZXJDb21wb25lbnQiKTtpZighdyl7aWYoIXRoaXMuaW1hZ2VNYXNrKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBCaXRzIHBlciBjb21wb25lbnQgbWlzc2luZyBpbiBpbWFnZTogJHt0aGlzLmltYWdlTWFza31gKTt3PTF9fXRoaXMuYnBjPXc7aWYoIXRoaXMuaW1hZ2VNYXNrKXtsZXQgaT1nLmdldFJhdygiQ1MiKXx8Zy5nZXRSYXcoIkNvbG9yU3BhY2UiKTtpZighaSl7KDAsci5pbmZvKSgiSlBYIGltYWdlcyAod2hpY2ggZG8gbm90IHJlcXVpcmUgY29sb3Igc3BhY2VzKSIpO3N3aXRjaChhLm51bUNvbXBzKXtjYXNlIDE6aT1oLk5hbWUuZ2V0KCJEZXZpY2VHcmF5Iik7YnJlYWs7Y2FzZSAzOmk9aC5OYW1lLmdldCgiRGV2aWNlUkdCIik7YnJlYWs7Y2FzZSA0Omk9aC5OYW1lLmdldCgiRGV2aWNlQ01ZSyIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBKUFggaW1hZ2VzIHdpdGggJHthLm51bUNvbXBzfSBjb2xvciBjb21wb25lbnRzIG5vdCBzdXBwb3J0ZWQuYCl9fXRoaXMuY29sb3JTcGFjZT1zLkNvbG9yU3BhY2UucGFyc2Uoe2NzOmkseHJlZjplLHJlc291cmNlczpuP3Q6bnVsbCxwZGZGdW5jdGlvbkZhY3Rvcnk6ZCxsb2NhbENvbG9yU3BhY2VDYWNoZTpmfSk7dGhpcy5udW1Db21wcz10aGlzLmNvbG9yU3BhY2UubnVtQ29tcHN9dGhpcy5kZWNvZGU9Zy5nZXRBcnJheSgiRCIsIkRlY29kZSIpO3RoaXMubmVlZHNEZWNvZGU9ITE7aWYodGhpcy5kZWNvZGUmJih0aGlzLmNvbG9yU3BhY2UmJiF0aGlzLmNvbG9yU3BhY2UuaXNEZWZhdWx0RGVjb2RlKHRoaXMuZGVjb2RlLHcpfHx1JiYhcy5Db2xvclNwYWNlLmlzRGVmYXVsdERlY29kZSh0aGlzLmRlY29kZSwxKSkpe3RoaXMubmVlZHNEZWNvZGU9ITA7Y29uc3QgZT0oMTw8dyktMTt0aGlzLmRlY29kZUNvZWZmaWNpZW50cz1bXTt0aGlzLmRlY29kZUFkZGVuZHM9W107Y29uc3QgdD10aGlzLmNvbG9yU3BhY2UmJiJJbmRleGVkIj09PXRoaXMuY29sb3JTcGFjZS5uYW1lO2ZvcihsZXQgYT0wLHI9MDthPHRoaXMuZGVjb2RlLmxlbmd0aDthKz0yLCsrcil7Y29uc3Qgbj10aGlzLmRlY29kZVthXSxpPXRoaXMuZGVjb2RlW2ErMV07dGhpcy5kZWNvZGVDb2VmZmljaWVudHNbcl09dD8oaS1uKS9lOmktbjt0aGlzLmRlY29kZUFkZGVuZHNbcl09dD9uOmUqbn19aWYobyl0aGlzLnNtYXNrPW5ldyBQREZJbWFnZSh7eHJlZjplLHJlczp0LGltYWdlOm8saXNJbmxpbmU6bixwZGZGdW5jdGlvbkZhY3Rvcnk6ZCxsb2NhbENvbG9yU3BhY2VDYWNoZTpmfSk7ZWxzZSBpZihjKWlmKGMgaW5zdGFuY2VvZiBpLkJhc2VTdHJlYW0pe2MuZGljdC5nZXQoIklNIiwiSW1hZ2VNYXNrIik/dGhpcy5tYXNrPW5ldyBQREZJbWFnZSh7eHJlZjplLHJlczp0LGltYWdlOmMsaXNJbmxpbmU6bixpc01hc2s6ITAscGRmRnVuY3Rpb25GYWN0b3J5OmQsbG9jYWxDb2xvclNwYWNlQ2FjaGU6Zn0pOigwLHIud2FybikoIklnbm9yaW5nIC9NYXNrIGluIGltYWdlIHdpdGhvdXQgL0ltYWdlTWFzay4iKX1lbHNlIHRoaXMubWFzaz1jfXN0YXRpYyBhc3luYyBidWlsZEltYWdlKHt4cmVmOmUscmVzOnQsaW1hZ2U6YSxpc0lubGluZTpuPSExLHBkZkZ1bmN0aW9uRmFjdG9yeTpzLGxvY2FsQ29sb3JTcGFjZUNhY2hlOm99KXtjb25zdCBjPWE7bGV0IGw9bnVsbCxoPW51bGw7Y29uc3QgdT1hLmRpY3QuZ2V0KCJTTWFzayIpLGQ9YS5kaWN0LmdldCgiTWFzayIpO3U/dSBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbT9sPXU6KDAsci53YXJuKSgiVW5zdXBwb3J0ZWQgL1NNYXNrIGZvcm1hdC4iKTpkJiYoZCBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbXx8QXJyYXkuaXNBcnJheShkKT9oPWQ6KDAsci53YXJuKSgiVW5zdXBwb3J0ZWQgL01hc2sgZm9ybWF0LiIpKTtyZXR1cm4gbmV3IFBERkltYWdlKHt4cmVmOmUscmVzOnQsaW1hZ2U6Yyxpc0lubGluZTpuLHNtYXNrOmwsbWFzazpoLHBkZkZ1bmN0aW9uRmFjdG9yeTpzLGxvY2FsQ29sb3JTcGFjZUNhY2hlOm99KX1zdGF0aWMgY3JlYXRlUmF3TWFzayh7aW1nQXJyYXk6ZSx3aWR0aDp0LGhlaWdodDphLGltYWdlSXNGcm9tRGVjb2RlU3RyZWFtOnIsaW52ZXJzZURlY29kZTpuLGludGVycG9sYXRlOml9KXtjb25zdCBzPSh0Kzc+PjMpKmEsbz1lLmJ5dGVMZW5ndGg7bGV0IGMsbDtpZighcnx8biYmIShzPT09bykpaWYobil7Yz1uZXcgVWludDhBcnJheShzKTtjLnNldChlKTtjLmZpbGwoMjU1LG8pfWVsc2UgYz1uZXcgVWludDhBcnJheShlKTtlbHNlIGM9ZTtpZihuKWZvcihsPTA7bDxvO2wrKyljW2xdXj0yNTU7cmV0dXJue2RhdGE6Yyx3aWR0aDp0LGhlaWdodDphLGludGVycG9sYXRlOml9fXN0YXRpYyBjcmVhdGVNYXNrKHtpbWdBcnJheTplLHdpZHRoOnQsaGVpZ2h0OmEsaW1hZ2VJc0Zyb21EZWNvZGVTdHJlYW06aSxpbnZlcnNlRGVjb2RlOnMsaW50ZXJwb2xhdGU6byxpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDpjPSEwfSl7Y29uc3QgbD0xPT09dCYmMT09PWEmJnM9PT0oMD09PWUubGVuZ3RofHwhISgxMjgmZVswXSkpO2lmKGwpcmV0dXJue2lzU2luZ2xlT3BhcXVlUGl4ZWw6bH07aWYoYyYmci5GZWF0dXJlVGVzdC5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCl7Y29uc3Qgcj1uZXcgT2Zmc2NyZWVuQ2FudmFzKHQsYSksaT1yLmdldENvbnRleHQoIjJkIix7IHdpbGxSZWFkRnJlcXVlbnRseTogdHJ1ZX0pLGM9aS5jcmVhdGVJbWFnZURhdGEodCxhKTsoMCxuLmFwcGx5TWFza0ltYWdlRGF0YSkoe3NyYzplLGRlc3Q6Yy5kYXRhLHdpZHRoOnQsaGVpZ2h0OmEsaW52ZXJzZURlY29kZTpzfSk7aS5wdXRJbWFnZURhdGEoYywwLDApO3JldHVybntkYXRhOm51bGwsd2lkdGg6dCxoZWlnaHQ6YSxpbnRlcnBvbGF0ZTpvLGJpdG1hcDpyLnRyYW5zZmVyVG9JbWFnZUJpdG1hcCgpfX1yZXR1cm4gdGhpcy5jcmVhdGVSYXdNYXNrKHtpbWdBcnJheTplLHdpZHRoOnQsaGVpZ2h0OmEsaW52ZXJzZURlY29kZTpzLGltYWdlSXNGcm9tRGVjb2RlU3RyZWFtOmksaW50ZXJwb2xhdGU6b30pfWdldCBkcmF3V2lkdGgoKXtyZXR1cm4gTWF0aC5tYXgodGhpcy53aWR0aCx0aGlzLnNtYXNrJiZ0aGlzLnNtYXNrLndpZHRofHwwLHRoaXMubWFzayYmdGhpcy5tYXNrLndpZHRofHwwKX1nZXQgZHJhd0hlaWdodCgpe3JldHVybiBNYXRoLm1heCh0aGlzLmhlaWdodCx0aGlzLnNtYXNrJiZ0aGlzLnNtYXNrLmhlaWdodHx8MCx0aGlzLm1hc2smJnRoaXMubWFzay5oZWlnaHR8fDApfWRlY29kZUJ1ZmZlcihlKXtjb25zdCB0PXRoaXMuYnBjLGE9dGhpcy5udW1Db21wcyxyPXRoaXMuZGVjb2RlQWRkZW5kcyxuPXRoaXMuZGVjb2RlQ29lZmZpY2llbnRzLGk9KDE8PHQpLTE7bGV0IHMsbztpZigxPT09dCl7Zm9yKHM9MCxvPWUubGVuZ3RoO3M8bztzKyspZVtzXT0rIWVbc107cmV0dXJufWxldCBjPTA7Zm9yKHM9MCxvPXRoaXMud2lkdGgqdGhpcy5oZWlnaHQ7czxvO3MrKylmb3IobGV0IHQ9MDt0PGE7dCsrKXtlW2NdPWRlY29kZUFuZENsYW1wKGVbY10sclt0XSxuW3RdLGkpO2MrK319Z2V0Q29tcG9uZW50cyhlKXtjb25zdCB0PXRoaXMuYnBjO2lmKDg9PT10KXJldHVybiBlO2NvbnN0IGE9dGhpcy53aWR0aCxyPXRoaXMuaGVpZ2h0LG49dGhpcy5udW1Db21wcyxpPWEqcipuO2xldCBzLG89MDtzPXQ8PTg/bmV3IFVpbnQ4QXJyYXkoaSk6dDw9MTY/bmV3IFVpbnQxNkFycmF5KGkpOm5ldyBVaW50MzJBcnJheShpKTtjb25zdCBjPWEqbixsPSgxPDx0KS0xO2xldCBoLHUsZD0wO2lmKDE9PT10KXtsZXQgdCxhLG47Zm9yKGxldCBpPTA7aTxyO2krKyl7YT1kKygtOCZjKTtuPWQrYztmb3IoO2Q8YTspe3U9ZVtvKytdO3NbZF09dT4+NyYxO3NbZCsxXT11Pj42JjE7c1tkKzJdPXU+PjUmMTtzW2QrM109dT4+NCYxO3NbZCs0XT11Pj4zJjE7c1tkKzVdPXU+PjImMTtzW2QrNl09dT4+MSYxO3NbZCs3XT0xJnU7ZCs9OH1pZihkPG4pe3U9ZVtvKytdO3Q9MTI4O2Zvcig7ZDxuOyl7c1tkKytdPSshISh1JnQpO3Q+Pj0xfX19fWVsc2V7bGV0IGE9MDt1PTA7Zm9yKGQ9MCxoPWk7ZDxoOysrZCl7aWYoZCVjPT0wKXt1PTA7YT0wfWZvcig7YTx0Oyl7dT11PDw4fGVbbysrXTthKz04fWNvbnN0IHI9YS10O2xldCBuPXU+PnI7bjwwP249MDpuPmwmJihuPWwpO3NbZF09bjt1Jj0oMTw8ciktMTthPXJ9fXJldHVybiBzfWZpbGxPcGFjaXR5KGUsdCxhLG4saSl7Y29uc3Qgcz10aGlzLnNtYXNrLG89dGhpcy5tYXNrO2xldCBjLGwsaCx1LGQsZjtpZihzKXtsPXMud2lkdGg7aD1zLmhlaWdodDtjPW5ldyBVaW50OENsYW1wZWRBcnJheShsKmgpO3MuZmlsbEdyYXlCdWZmZXIoYyk7bD09PXQmJmg9PT1hfHwoYz1yZXNpemVJbWFnZU1hc2soYyxzLmJwYyxsLGgsdCxhKSl9ZWxzZSBpZihvKWlmKG8gaW5zdGFuY2VvZiBQREZJbWFnZSl7bD1vLndpZHRoO2g9by5oZWlnaHQ7Yz1uZXcgVWludDhDbGFtcGVkQXJyYXkobCpoKTtvLm51bUNvbXBzPTE7by5maWxsR3JheUJ1ZmZlcihjKTtmb3IodT0wLGQ9bCpoO3U8ZDsrK3UpY1t1XT0yNTUtY1t1XTtsPT09dCYmaD09PWF8fChjPXJlc2l6ZUltYWdlTWFzayhjLG8uYnBjLGwsaCx0LGEpKX1lbHNle2lmKCFBcnJheS5pc0FycmF5KG8pKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJVbmtub3duIG1hc2sgZm9ybWF0LiIpO3tjPW5ldyBVaW50OENsYW1wZWRBcnJheSh0KmEpO2NvbnN0IGU9dGhpcy5udW1Db21wcztmb3IodT0wLGQ9dCphO3U8ZDsrK3Upe2xldCB0PTA7Y29uc3QgYT11KmU7Zm9yKGY9MDtmPGU7KytmKXtjb25zdCBlPWlbYStmXSxyPTIqZjtpZihlPG9bcl18fGU+b1tyKzFdKXt0PTI1NTticmVha319Y1t1XT10fX19aWYoYylmb3IodT0wLGY9MyxkPXQqbjt1PGQ7Kyt1LGYrPTQpZVtmXT1jW3VdO2Vsc2UgZm9yKHU9MCxmPTMsZD10Km47dTxkOysrdSxmKz00KWVbZl09MjU1fXVuZG9QcmVibGVuZChlLHQsYSl7Y29uc3Qgcj10aGlzLnNtYXNrJiZ0aGlzLnNtYXNrLm1hdHRlO2lmKCFyKXJldHVybjtjb25zdCBuPXRoaXMuY29sb3JTcGFjZS5nZXRSZ2IociwwKSxpPW5bMF0scz1uWzFdLG89blsyXSxjPXQqYSo0O2ZvcihsZXQgdD0wO3Q8Yzt0Kz00KXtjb25zdCBhPWVbdCszXTtpZigwPT09YSl7ZVt0XT0yNTU7ZVt0KzFdPTI1NTtlW3QrMl09MjU1O2NvbnRpbnVlfWNvbnN0IHI9MjU1L2E7ZVt0XT0oZVt0XS1pKSpyK2k7ZVt0KzFdPShlW3QrMV0tcykqcitzO2VbdCsyXT0oZVt0KzJdLW8pKnIrb319Y3JlYXRlSW1hZ2VEYXRhKGU9ITEpe2NvbnN0IHQ9dGhpcy5kcmF3V2lkdGgsYT10aGlzLmRyYXdIZWlnaHQsbj17d2lkdGg6dCxoZWlnaHQ6YSxpbnRlcnBvbGF0ZTp0aGlzLmludGVycG9sYXRlLGtpbmQ6MCxkYXRhOm51bGx9LGk9dGhpcy5udW1Db21wcyxzPXRoaXMud2lkdGgsbz10aGlzLmhlaWdodCxsPXRoaXMuYnBjLGg9cyppKmwrNz4+MztpZighZSl7bGV0IGU7IkRldmljZUdyYXkiPT09dGhpcy5jb2xvclNwYWNlLm5hbWUmJjE9PT1sP2U9ci5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFA6IkRldmljZVJHQiIhPT10aGlzLmNvbG9yU3BhY2UubmFtZXx8OCE9PWx8fHRoaXMubmVlZHNEZWNvZGV8fChlPXIuSW1hZ2VLaW5kLlJHQl8yNEJQUCk7aWYoZSYmIXRoaXMuc21hc2smJiF0aGlzLm1hc2smJnQ9PT1zJiZhPT09byl7bi5raW5kPWU7bi5kYXRhPXRoaXMuZ2V0SW1hZ2VCeXRlcyhvKmgse30pO2lmKHRoaXMubmVlZHNEZWNvZGUpeygwLHIuYXNzZXJ0KShlPT09ci5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFAsIlBERkltYWdlLmNyZWF0ZUltYWdlRGF0YTogVGhlIGltYWdlIG11c3QgYmUgZ3JheXNjYWxlLiIpO2NvbnN0IHQ9bi5kYXRhO2ZvcihsZXQgZT0wLGE9dC5sZW5ndGg7ZTxhO2UrKyl0W2VdXj0yNTV9cmV0dXJuIG59aWYodGhpcy5pbWFnZSBpbnN0YW5jZW9mIGMuSnBlZ1N0cmVhbSYmIXRoaXMuc21hc2smJiF0aGlzLm1hc2spe2xldCBlPW8qaDtzd2l0Y2godGhpcy5jb2xvclNwYWNlLm5hbWUpe2Nhc2UiRGV2aWNlR3JheSI6ZSo9MztjYXNlIkRldmljZVJHQiI6Y2FzZSJEZXZpY2VDTVlLIjpuLmtpbmQ9ci5JbWFnZUtpbmQuUkdCXzI0QlBQO24uZGF0YT10aGlzLmdldEltYWdlQnl0ZXMoZSx7ZHJhd1dpZHRoOnQsZHJhd0hlaWdodDphLGZvcmNlUkdCOiEwfSk7cmV0dXJuIG59fX1jb25zdCB1PXRoaXMuZ2V0SW1hZ2VCeXRlcyhvKmgse2ludGVybmFsOiEwfSksZD0wfHUubGVuZ3RoL2gqYS9vLGY9dGhpcy5nZXRDb21wb25lbnRzKHUpO2xldCBnLHA7aWYoZXx8dGhpcy5zbWFza3x8dGhpcy5tYXNrKXtuLmtpbmQ9ci5JbWFnZUtpbmQuUkdCQV8zMkJQUDtuLmRhdGE9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHQqYSo0KTtnPTE7cD0hMDt0aGlzLmZpbGxPcGFjaXR5KG4uZGF0YSx0LGEsZCxmKX1lbHNle24ua2luZD1yLkltYWdlS2luZC5SR0JfMjRCUFA7bi5kYXRhPW5ldyBVaW50OENsYW1wZWRBcnJheSh0KmEqMyk7Zz0wO3A9ITF9dGhpcy5uZWVkc0RlY29kZSYmdGhpcy5kZWNvZGVCdWZmZXIoZik7dGhpcy5jb2xvclNwYWNlLmZpbGxSZ2Iobi5kYXRhLHMsbyx0LGEsZCxsLGYsZyk7cCYmdGhpcy51bmRvUHJlYmxlbmQobi5kYXRhLHQsZCk7cmV0dXJuIG59ZmlsbEdyYXlCdWZmZXIoZSl7Y29uc3QgdD10aGlzLm51bUNvbXBzO2lmKDEhPT10KXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBSZWFkaW5nIGdyYXkgc2NhbGUgZnJvbSBhIGNvbG9yIGltYWdlOiAke3R9YCk7Y29uc3QgYT10aGlzLndpZHRoLG49dGhpcy5oZWlnaHQsaT10aGlzLmJwYyxzPWEqdCppKzc+PjMsbz10aGlzLmdldEltYWdlQnl0ZXMobipzLHtpbnRlcm5hbDohMH0pLGM9dGhpcy5nZXRDb21wb25lbnRzKG8pO2xldCBsLGg7aWYoMT09PWkpe2g9YSpuO2lmKHRoaXMubmVlZHNEZWNvZGUpZm9yKGw9MDtsPGg7KytsKWVbbF09Y1tsXS0xJjI1NTtlbHNlIGZvcihsPTA7bDxoOysrbCllW2xdPTI1NSYtY1tsXTtyZXR1cm59dGhpcy5uZWVkc0RlY29kZSYmdGhpcy5kZWNvZGVCdWZmZXIoYyk7aD1hKm47Y29uc3QgdT0yNTUvKCgxPDxpKS0xKTtmb3IobD0wO2w8aDsrK2wpZVtsXT11KmNbbF19Z2V0SW1hZ2VCeXRlcyhlLHtkcmF3V2lkdGg6dCxkcmF3SGVpZ2h0OmEsZm9yY2VSR0I6bj0hMSxpbnRlcm5hbDppPSExfSl7dGhpcy5pbWFnZS5yZXNldCgpO3RoaXMuaW1hZ2UuZHJhd1dpZHRoPXR8fHRoaXMud2lkdGg7dGhpcy5pbWFnZS5kcmF3SGVpZ2h0PWF8fHRoaXMuaGVpZ2h0O3RoaXMuaW1hZ2UuZm9yY2VSR0I9ISFuO2NvbnN0IHM9dGhpcy5pbWFnZS5nZXRCeXRlcyhlKTtpZihpfHx0aGlzLmltYWdlIGluc3RhbmNlb2Ygby5EZWNvZGVTdHJlYW0pcmV0dXJuIHM7KDAsci5hc3NlcnQpKHMgaW5zdGFuY2VvZiBVaW50OEFycmF5LCdQREZJbWFnZS5nZXRJbWFnZUJ5dGVzOiBVbnN1cHBvcnRlZCAiaW1hZ2VCeXRlcyIgdHlwZS4nKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkocyl9fXQuUERGSW1hZ2U9UERGSW1hZ2V9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5hcHBseU1hc2tJbWFnZURhdGE9ZnVuY3Rpb24gYXBwbHlNYXNrSW1hZ2VEYXRhKHtzcmM6ZSxzcmNQb3M6dD0wLGRlc3Q6YSxkZXN0UG9zOm49MCx3aWR0aDppLGhlaWdodDpzLGludmVyc2VEZWNvZGU6bz0hMX0pe2NvbnN0IGM9ci5GZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbj80Mjc4MTkwMDgwOjI1NSxbbCxoXT1vP1swLGNdOltjLDBdLHU9aT4+MyxkPTcmaSxmPWUubGVuZ3RoO2E9bmV3IFVpbnQzMkFycmF5KGEuYnVmZmVyKTtmb3IobGV0IHI9MDtyPHM7cisrKXtmb3IoY29uc3Qgcj10K3U7dDxyO3QrKyl7Y29uc3Qgcj10PGY/ZVt0XToyNTU7YVtuKytdPTEyOCZyP2g6bDthW24rK109NjQmcj9oOmw7YVtuKytdPTMyJnI/aDpsO2FbbisrXT0xNiZyP2g6bDthW24rK109OCZyP2g6bDthW24rK109NCZyP2g6bDthW24rK109MiZyP2g6bDthW24rK109MSZyP2g6bH1pZigwPT09ZCljb250aW51ZTtjb25zdCByPXQ8Zj9lW3QrK106MjU1O2ZvcihsZXQgZT0wO2U8ZDtlKyspYVtuKytdPXImMTw8Ny1lP2g6bH1yZXR1cm57c3JjUG9zOnQsZGVzdFBvczpufX07dmFyIHI9YSgyKX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LmluY3JlbWVudGFsVXBkYXRlPWZ1bmN0aW9uIGluY3JlbWVudGFsVXBkYXRlKHtvcmlnaW5hbERhdGE6ZSx4cmVmSW5mbzp0LG5ld1JlZnM6YSx4cmVmOm89bnVsbCxoYXNYZmE6bD0hMSx4ZmFEYXRhc2V0c1JlZjpoPW51bGwsaGFzWGZhRGF0YXNldHNFbnRyeTp1PSExLGFjcm9Gb3JtUmVmOmQ9bnVsbCxhY3JvRm9ybTpmPW51bGwseGZhRGF0YTpnPW51bGx9KXtsJiZmdW5jdGlvbiB1cGRhdGVYRkEoe3hmYURhdGE6ZSx4ZmFEYXRhc2V0c1JlZjp0LGhhc1hmYURhdGFzZXRzRW50cnk6YSxhY3JvRm9ybVJlZjpuLGFjcm9Gb3JtOm8sbmV3UmVmczpjLHhyZWY6bCx4cmVmSW5mbzpofSl7aWYobnVsbD09PWwpcmV0dXJuO2lmKCFhKXtpZighbil7KDAsci53YXJuKSgiWEZBIC0gQ2Fubm90IHNhdmUgaXQiKTtyZXR1cm59Y29uc3QgZT1vLmdldCgiWEZBIiksYT1lLnNsaWNlKCk7YS5zcGxpY2UoMiwwLCJkYXRhc2V0cyIpO2Euc3BsaWNlKDMsMCx0KTtvLnNldCgiWEZBIixhKTtjb25zdCBpPWwuZW5jcnlwdDtsZXQgcz1udWxsO2kmJihzPWkuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKG4ubnVtLG4uZ2VuKSk7Y29uc3QgaD1bYCR7bi5udW19ICR7bi5nZW59IG9ialxuYF07d3JpdGVEaWN0KG8saCxzKTtoLnB1c2goIlxuIik7by5zZXQoIlhGQSIsZSk7Yy5wdXNoKHtyZWY6bixkYXRhOmguam9pbigiIil9KX1pZihudWxsPT09ZSl7ZT1mdW5jdGlvbiB3cml0ZVhGQURhdGFGb3JBY3JvZm9ybShlLHQpe2NvbnN0IGE9bmV3IHMuU2ltcGxlWE1MUGFyc2VyKHtoYXNBdHRyaWJ1dGVzOiEwfSkucGFyc2VGcm9tU3RyaW5nKGUpO2Zvcihjb25zdHt4ZmE6ZX1vZiB0KXtpZighZSljb250aW51ZTtjb25zdHtwYXRoOnQsdmFsdWU6bn09ZTtpZighdCljb250aW51ZTtjb25zdCBvPWEuZG9jdW1lbnRFbGVtZW50LnNlYXJjaE5vZGUoKDAsaS5wYXJzZVhGQVBhdGgpKHQpLDApO28/QXJyYXkuaXNBcnJheShuKT9vLmNoaWxkTm9kZXM9bi5tYXAoKGU9Pm5ldyBzLlNpbXBsZURPTU5vZGUoInZhbHVlIixlKSkpOm8uY2hpbGROb2Rlcz1bbmV3IHMuU2ltcGxlRE9NTm9kZSgiI3RleHQiLG4pXTooMCxyLndhcm4pKGBOb2RlIG5vdCBmb3VuZCBmb3IgcGF0aDogJHt0fWApfWNvbnN0IG49W107YS5kb2N1bWVudEVsZW1lbnQuZHVtcChuKTtyZXR1cm4gbi5qb2luKCIiKX0obC5mZXRjaElmUmVmKHQpLmdldFN0cmluZygpLGMpfWNvbnN0IHU9bC5lbmNyeXB0O2lmKHUpe2U9dS5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0odC5udW0sdC5nZW4pLmVuY3J5cHRTdHJpbmcoZSl9Y29uc3QgZD1gJHt0Lm51bX0gJHt0Lmdlbn0gb2JqXG48PCAvVHlwZSAvRW1iZWRkZWRGaWxlIC9MZW5ndGggJHtlLmxlbmd0aH0+Plxuc3RyZWFtXG5gK2UrIlxuZW5kc3RyZWFtXG5lbmRvYmpcbiI7Yy5wdXNoKHtyZWY6dCxkYXRhOmR9KX0oe3hmYURhdGE6Zyx4ZmFEYXRhc2V0c1JlZjpoLGhhc1hmYURhdGFzZXRzRW50cnk6dSxhY3JvRm9ybVJlZjpkLGFjcm9Gb3JtOmYsbmV3UmVmczphLHhyZWY6byx4cmVmSW5mbzp0fSk7Y29uc3QgcD1uZXcgbi5EaWN0KG51bGwpLG09dC5uZXdSZWY7bGV0IGIseTtjb25zdCB3PWUuYXQoLTEpO2lmKDEwPT09d3x8MTM9PT13KXtiPVtdO3k9ZS5sZW5ndGh9ZWxzZXtiPVsiXG4iXTt5PWUubGVuZ3RoKzF9cC5zZXQoIlNpemUiLG0ubnVtKzEpO3Auc2V0KCJQcmV2Iix0LnN0YXJ0WFJlZik7cC5zZXQoIlR5cGUiLG4uTmFtZS5nZXQoIlhSZWYiKSk7bnVsbCE9PXQucm9vdFJlZiYmcC5zZXQoIlJvb3QiLHQucm9vdFJlZik7bnVsbCE9PXQuaW5mb1JlZiYmcC5zZXQoIkluZm8iLHQuaW5mb1JlZik7bnVsbCE9PXQuZW5jcnlwdFJlZiYmcC5zZXQoIkVuY3J5cHQiLHQuZW5jcnlwdFJlZik7YS5wdXNoKHtyZWY6bSxkYXRhOiIifSk7YT1hLnNvcnQoKChlLHQpPT5lLnJlZi5udW0tdC5yZWYubnVtKSk7Y29uc3QgUz1bWzAsMSw2NTUzNV1dLHg9WzAsMV07bGV0IGs9MDtmb3IoY29uc3R7cmVmOmUsZGF0YTp0fW9mIGEpe2s9TWF0aC5tYXgoayx5KTtTLnB1c2goWzEseSxNYXRoLm1pbihlLmdlbiw2NTUzNSldKTt5Kz10Lmxlbmd0aDt4LnB1c2goZS5udW0sMSk7Yi5wdXNoKHQpfXAuc2V0KCJJbmRleCIseCk7aWYoQXJyYXkuaXNBcnJheSh0LmZpbGVJZHMpJiZ0LmZpbGVJZHMubGVuZ3RoPjApe2NvbnN0IGU9ZnVuY3Rpb24gY29tcHV0ZU1ENShlLHQpe2NvbnN0IGE9TWF0aC5mbG9vcihEYXRlLm5vdygpLzFlMyksbj10LmZpbGVuYW1lfHwiIixpPVthLnRvU3RyaW5nKCksbixlLnRvU3RyaW5nKCldO2xldCBzPWkucmVkdWNlKCgoZSx0KT0+ZSt0Lmxlbmd0aCksMCk7Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LnZhbHVlcyh0LmluZm8pKXtpLnB1c2goZSk7cys9ZS5sZW5ndGh9Y29uc3Qgbz1uZXcgVWludDhBcnJheShzKTtsZXQgbD0wO2Zvcihjb25zdCBlIG9mIGkpe3dyaXRlU3RyaW5nKGUsbCxvKTtsKz1lLmxlbmd0aH1yZXR1cm4oMCxyLmJ5dGVzVG9TdHJpbmcpKCgwLGMuY2FsY3VsYXRlTUQ1KShvKSl9KHksdCk7cC5zZXQoIklEIixbdC5maWxlSWRzWzBdLGVdKX1jb25zdCBDPVsxLE1hdGguY2VpbChNYXRoLmxvZzIoaykvOCksMl0sdj0oQ1swXStDWzFdK0NbMl0pKlMubGVuZ3RoO3Auc2V0KCJXIixDKTtwLnNldCgiTGVuZ3RoIix2KTtiLnB1c2goYCR7bS5udW19ICR7bS5nZW59IG9ialxuYCk7d3JpdGVEaWN0KHAsYixudWxsKTtiLnB1c2goIiBzdHJlYW1cbiIpO2NvbnN0IEY9Yi5yZWR1Y2UoKChlLHQpPT5lK3QubGVuZ3RoKSwwKSxPPWBcbmVuZHN0cmVhbVxuZW5kb2JqXG5zdGFydHhyZWZcbiR7eX1cbiUlRU9GXG5gLFQ9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgrRit2K08ubGVuZ3RoKTtULnNldChlKTtsZXQgTT1lLmxlbmd0aDtmb3IoY29uc3QgZSBvZiBiKXt3cml0ZVN0cmluZyhlLE0sVCk7TSs9ZS5sZW5ndGh9Zm9yKGNvbnN0W2UsdCxhXW9mIFMpe009d3JpdGVJbnQoZSxDWzBdLE0sVCk7TT13cml0ZUludCh0LENbMV0sTSxUKTtNPXdyaXRlSW50KGEsQ1syXSxNLFQpfXdyaXRlU3RyaW5nKE8sTSxUKTtyZXR1cm4gVH07dC53cml0ZURpY3Q9d3JpdGVEaWN0O3Qud3JpdGVPYmplY3Q9ZnVuY3Rpb24gd3JpdGVPYmplY3QoZSx0LGEscil7YS5wdXNoKGAke2UubnVtfSAke2UuZ2VufSBvYmpcbmApO3QgaW5zdGFuY2VvZiBuLkRpY3Q/d3JpdGVEaWN0KHQsYSxyKTp0IGluc3RhbmNlb2Ygby5CYXNlU3RyZWFtJiZ3cml0ZVN0cmVhbSh0LGEscik7YS5wdXNoKCJcbmVuZG9ialxuIil9O3ZhciByPWEoMiksbj1hKDMpLGk9YSg0KSxzPWEoNjQpLG89YSg1KSxjPWEoNjUpO2Z1bmN0aW9uIHdyaXRlRGljdChlLHQsYSl7dC5wdXNoKCI8PCIpO2Zvcihjb25zdCByIG9mIGUuZ2V0S2V5cygpKXt0LnB1c2goYCAvJHsoMCxpLmVzY2FwZVBERk5hbWUpKHIpfSBgKTt3cml0ZVZhbHVlKGUuZ2V0UmF3KHIpLHQsYSl9dC5wdXNoKCI+PiIpfWZ1bmN0aW9uIHdyaXRlU3RyZWFtKGUsdCxhKXt3cml0ZURpY3QoZS5kaWN0LHQsYSk7dC5wdXNoKCIgc3RyZWFtXG4iKTtsZXQgcj1lLmdldFN0cmluZygpO251bGwhPT1hJiYocj1hLmVuY3J5cHRTdHJpbmcocikpO3QucHVzaChyLCJcbmVuZHN0cmVhbVxuIil9ZnVuY3Rpb24gd3JpdGVWYWx1ZShlLHQsYSl7aWYoZSBpbnN0YW5jZW9mIG4uTmFtZSl0LnB1c2goYC8keygwLGkuZXNjYXBlUERGTmFtZSkoZS5uYW1lKX1gKTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBuLlJlZil0LnB1c2goYCR7ZS5udW19ICR7ZS5nZW59IFJgKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpIWZ1bmN0aW9uIHdyaXRlQXJyYXkoZSx0LGEpe3QucHVzaCgiWyIpO2xldCByPSEwO2Zvcihjb25zdCBuIG9mIGUpe3I/cj0hMTp0LnB1c2goIiAiKTt3cml0ZVZhbHVlKG4sdCxhKX10LnB1c2goIl0iKX0oZSx0LGEpO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBlKXtudWxsIT09YSYmKGU9YS5lbmNyeXB0U3RyaW5nKGUpKTt0LnB1c2goYCgkeygwLHIuZXNjYXBlU3RyaW5nKShlKX0pYCl9ZWxzZSJudW1iZXIiPT10eXBlb2YgZT90LnB1c2goKDAsaS5udW1iZXJUb1N0cmluZykoZSkpOiJib29sZWFuIj09dHlwZW9mIGU/dC5wdXNoKGUudG9TdHJpbmcoKSk6ZSBpbnN0YW5jZW9mIG4uRGljdD93cml0ZURpY3QoZSx0LGEpOmUgaW5zdGFuY2VvZiBvLkJhc2VTdHJlYW0/d3JpdGVTdHJlYW0oZSx0LGEpOm51bGw9PT1lP3QucHVzaCgibnVsbCIpOigwLHIud2FybikoYFVuaGFuZGxlZCB2YWx1ZSBpbiB3cml0ZXI6ICR7dHlwZW9mIGV9LCBwbGVhc2UgZmlsZSBhIGJ1Zy5gKX1mdW5jdGlvbiB3cml0ZUludChlLHQsYSxyKXtmb3IobGV0IG49dCthLTE7bj5hLTE7bi0tKXtyW25dPTI1NSZlO2U+Pj04fXJldHVybiBhK3R9ZnVuY3Rpb24gd3JpdGVTdHJpbmcoZSx0LGEpe2ZvcihsZXQgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKylhW3Qrcl09MjU1JmUuY2hhckNvZGVBdChyKX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5YTUxQYXJzZXJFcnJvckNvZGU9dC5YTUxQYXJzZXJCYXNlPXQuU2ltcGxlWE1MUGFyc2VyPXQuU2ltcGxlRE9NTm9kZT12b2lkIDA7dmFyIHI9YSg0KTtjb25zdCBuPXtOb0Vycm9yOjAsRW5kT2ZEb2N1bWVudDotMSxVbnRlcm1pbmF0ZWRDZGF0Oi0yLFVudGVybWluYXRlZFhtbERlY2xhcmF0aW9uOi0zLFVudGVybWluYXRlZERvY3R5cGVEZWNsYXJhdGlvbjotNCxVbnRlcm1pbmF0ZWRDb21tZW50Oi01LE1hbGZvcm1lZEVsZW1lbnQ6LTYsT3V0T2ZNZW1vcnk6LTcsVW50ZXJtaW5hdGVkQXR0cmlidXRlVmFsdWU6LTgsVW50ZXJtaW5hdGVkRWxlbWVudDotOSxFbGVtZW50TmV2ZXJCZWd1bjotMTB9O3QuWE1MUGFyc2VyRXJyb3JDb2RlPW47ZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKGUsdCl7Y29uc3QgYT1lW3RdO3JldHVybiIgIj09PWF8fCJcbiI9PT1hfHwiXHIiPT09YXx8Ilx0Ij09PWF9Y2xhc3MgWE1MUGFyc2VyQmFzZXtfcmVzb2x2ZUVudGl0aWVzKGUpe3JldHVybiBlLnJlcGxhY2UoLyYoW147XSspOy9nLCgoZSx0KT0+e2lmKCIjeCI9PT10LnN1YnN0cmluZygwLDIpKXJldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludChwYXJzZUludCh0LnN1YnN0cmluZygyKSwxNikpO2lmKCIjIj09PXQuc3Vic3RyaW5nKDAsMSkpcmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KHBhcnNlSW50KHQuc3Vic3RyaW5nKDEpLDEwKSk7c3dpdGNoKHQpe2Nhc2UibHQiOnJldHVybiI8IjtjYXNlImd0IjpyZXR1cm4iPiI7Y2FzZSJhbXAiOnJldHVybiImIjtjYXNlInF1b3QiOnJldHVybiciJztjYXNlImFwb3MiOnJldHVybiInIn1yZXR1cm4gdGhpcy5vblJlc29sdmVFbnRpdHkodCl9KSl9X3BhcnNlQ29udGVudChlLHQpe2NvbnN0IGE9W107bGV0IHI9dDtmdW5jdGlvbiBza2lwV3MoKXtmb3IoO3I8ZS5sZW5ndGgmJmlzV2hpdGVzcGFjZShlLHIpOykrK3J9Zm9yKDtyPGUubGVuZ3RoJiYhaXNXaGl0ZXNwYWNlKGUscikmJiI+IiE9PWVbcl0mJiIvIiE9PWVbcl07KSsrcjtjb25zdCBuPWUuc3Vic3RyaW5nKHQscik7c2tpcFdzKCk7Zm9yKDtyPGUubGVuZ3RoJiYiPiIhPT1lW3JdJiYiLyIhPT1lW3JdJiYiPyIhPT1lW3JdOyl7c2tpcFdzKCk7bGV0IHQ9IiIsbj0iIjtmb3IoO3I8ZS5sZW5ndGgmJiFpc1doaXRlc3BhY2UoZSxyKSYmIj0iIT09ZVtyXTspe3QrPWVbcl07KytyfXNraXBXcygpO2lmKCI9IiE9PWVbcl0pcmV0dXJuIG51bGw7KytyO3NraXBXcygpO2NvbnN0IGk9ZVtyXTtpZignIichPT1pJiYiJyIhPT1pKXJldHVybiBudWxsO2NvbnN0IHM9ZS5pbmRleE9mKGksKytyKTtpZihzPDApcmV0dXJuIG51bGw7bj1lLnN1YnN0cmluZyhyLHMpO2EucHVzaCh7bmFtZTp0LHZhbHVlOnRoaXMuX3Jlc29sdmVFbnRpdGllcyhuKX0pO3I9cysxO3NraXBXcygpfXJldHVybntuYW1lOm4sYXR0cmlidXRlczphLHBhcnNlZDpyLXR9fV9wYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbihlLHQpe2xldCBhPXQ7Zm9yKDthPGUubGVuZ3RoJiYhaXNXaGl0ZXNwYWNlKGUsYSkmJiI+IiE9PWVbYV0mJiI/IiE9PWVbYV0mJiIvIiE9PWVbYV07KSsrYTtjb25zdCByPWUuc3Vic3RyaW5nKHQsYSk7IWZ1bmN0aW9uIHNraXBXcygpe2Zvcig7YTxlLmxlbmd0aCYmaXNXaGl0ZXNwYWNlKGUsYSk7KSsrYX0oKTtjb25zdCBuPWE7Zm9yKDthPGUubGVuZ3RoJiYoIj8iIT09ZVthXXx8Ij4iIT09ZVthKzFdKTspKythO3JldHVybntuYW1lOnIsdmFsdWU6ZS5zdWJzdHJpbmcobixhKSxwYXJzZWQ6YS10fX1wYXJzZVhtbChlKXtsZXQgdD0wO2Zvcig7dDxlLmxlbmd0aDspe2xldCBhPXQ7aWYoIjwiPT09ZVt0XSl7KythO2xldCB0O3N3aXRjaChlW2FdKXtjYXNlIi8iOisrYTt0PWUuaW5kZXhPZigiPiIsYSk7aWYodDwwKXt0aGlzLm9uRXJyb3Iobi5VbnRlcm1pbmF0ZWRFbGVtZW50KTtyZXR1cm59dGhpcy5vbkVuZEVsZW1lbnQoZS5zdWJzdHJpbmcoYSx0KSk7YT10KzE7YnJlYWs7Y2FzZSI/IjorK2E7Y29uc3Qgcj10aGlzLl9wYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbihlLGEpO2lmKCI/PiIhPT1lLnN1YnN0cmluZyhhK3IucGFyc2VkLGErci5wYXJzZWQrMikpe3RoaXMub25FcnJvcihuLlVudGVybWluYXRlZFhtbERlY2xhcmF0aW9uKTtyZXR1cm59dGhpcy5vblBpKHIubmFtZSxyLnZhbHVlKTthKz1yLnBhcnNlZCsyO2JyZWFrO2Nhc2UiISI6aWYoIi0tIj09PWUuc3Vic3RyaW5nKGErMSxhKzMpKXt0PWUuaW5kZXhPZigiLS1ceDNlIixhKzMpO2lmKHQ8MCl7dGhpcy5vbkVycm9yKG4uVW50ZXJtaW5hdGVkQ29tbWVudCk7cmV0dXJufXRoaXMub25Db21tZW50KGUuc3Vic3RyaW5nKGErMyx0KSk7YT10KzN9ZWxzZSBpZigiW0NEQVRBWyI9PT1lLnN1YnN0cmluZyhhKzEsYSs4KSl7dD1lLmluZGV4T2YoIl1dPiIsYSs4KTtpZih0PDApe3RoaXMub25FcnJvcihuLlVudGVybWluYXRlZENkYXQpO3JldHVybn10aGlzLm9uQ2RhdGEoZS5zdWJzdHJpbmcoYSs4LHQpKTthPXQrM31lbHNle2lmKCJET0NUWVBFIiE9PWUuc3Vic3RyaW5nKGErMSxhKzgpKXt0aGlzLm9uRXJyb3Iobi5NYWxmb3JtZWRFbGVtZW50KTtyZXR1cm59e2NvbnN0IHI9ZS5pbmRleE9mKCJbIixhKzgpO2xldCBpPSExO3Q9ZS5pbmRleE9mKCI+IixhKzgpO2lmKHQ8MCl7dGhpcy5vbkVycm9yKG4uVW50ZXJtaW5hdGVkRG9jdHlwZURlY2xhcmF0aW9uKTtyZXR1cm59aWYocj4wJiZ0PnIpe3Q9ZS5pbmRleE9mKCJdPiIsYSs4KTtpZih0PDApe3RoaXMub25FcnJvcihuLlVudGVybWluYXRlZERvY3R5cGVEZWNsYXJhdGlvbik7cmV0dXJufWk9ITB9Y29uc3Qgcz1lLnN1YnN0cmluZyhhKzgsdCsoaT8xOjApKTt0aGlzLm9uRG9jdHlwZShzKTthPXQrKGk/MjoxKX19YnJlYWs7ZGVmYXVsdDpjb25zdCBpPXRoaXMuX3BhcnNlQ29udGVudChlLGEpO2lmKG51bGw9PT1pKXt0aGlzLm9uRXJyb3Iobi5NYWxmb3JtZWRFbGVtZW50KTtyZXR1cm59bGV0IHM9ITE7aWYoIi8+Ij09PWUuc3Vic3RyaW5nKGEraS5wYXJzZWQsYStpLnBhcnNlZCsyKSlzPSEwO2Vsc2UgaWYoIj4iIT09ZS5zdWJzdHJpbmcoYStpLnBhcnNlZCxhK2kucGFyc2VkKzEpKXt0aGlzLm9uRXJyb3Iobi5VbnRlcm1pbmF0ZWRFbGVtZW50KTtyZXR1cm59dGhpcy5vbkJlZ2luRWxlbWVudChpLm5hbWUsaS5hdHRyaWJ1dGVzLHMpO2ErPWkucGFyc2VkKyhzPzI6MSl9fWVsc2V7Zm9yKDthPGUubGVuZ3RoJiYiPCIhPT1lW2FdOylhKys7Y29uc3Qgcj1lLnN1YnN0cmluZyh0LGEpO3RoaXMub25UZXh0KHRoaXMuX3Jlc29sdmVFbnRpdGllcyhyKSl9dD1hfX1vblJlc29sdmVFbnRpdHkoZSl7cmV0dXJuYCYke2V9O2B9b25QaShlLHQpe31vbkNvbW1lbnQoZSl7fW9uQ2RhdGEoZSl7fW9uRG9jdHlwZShlKXt9b25UZXh0KGUpe31vbkJlZ2luRWxlbWVudChlLHQsYSl7fW9uRW5kRWxlbWVudChlKXt9b25FcnJvcihlKXt9fXQuWE1MUGFyc2VyQmFzZT1YTUxQYXJzZXJCYXNlO2NsYXNzIFNpbXBsZURPTU5vZGV7Y29uc3RydWN0b3IoZSx0KXt0aGlzLm5vZGVOYW1lPWU7dGhpcy5ub2RlVmFsdWU9dDtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywicGFyZW50Tm9kZSIse3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KX1nZXQgZmlyc3RDaGlsZCgpe3JldHVybiB0aGlzLmNoaWxkTm9kZXMmJnRoaXMuY2hpbGROb2Rlc1swXX1nZXQgbmV4dFNpYmxpbmcoKXtjb25zdCBlPXRoaXMucGFyZW50Tm9kZS5jaGlsZE5vZGVzO2lmKCFlKXJldHVybjtjb25zdCB0PWUuaW5kZXhPZih0aGlzKTtyZXR1cm4tMSE9PXQ/ZVt0KzFdOnZvaWQgMH1nZXQgdGV4dENvbnRlbnQoKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzP3RoaXMuY2hpbGROb2Rlcy5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRleHRDb250ZW50fSkpLmpvaW4oIiIpOnRoaXMubm9kZVZhbHVlfHwiIn1nZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfHxbXX1oYXNDaGlsZE5vZGVzKCl7cmV0dXJuIHRoaXMuY2hpbGROb2RlcyYmdGhpcy5jaGlsZE5vZGVzLmxlbmd0aD4wfXNlYXJjaE5vZGUoZSx0KXtpZih0Pj1lLmxlbmd0aClyZXR1cm4gdGhpcztjb25zdCBhPWVbdF0scj1bXTtsZXQgbj10aGlzO2Zvcig7Oyl7aWYoYS5uYW1lPT09bi5ub2RlTmFtZSl7aWYoMCE9PWEucG9zKXtpZigwPT09ci5sZW5ndGgpcmV0dXJuIG51bGw7e2NvbnN0W2ldPXIucG9wKCk7bGV0IHM9MDtmb3IoY29uc3QgciBvZiBpLmNoaWxkTm9kZXMpaWYoYS5uYW1lPT09ci5ub2RlTmFtZSl7aWYocz09PWEucG9zKXJldHVybiByLnNlYXJjaE5vZGUoZSx0KzEpO3MrK31yZXR1cm4gbi5zZWFyY2hOb2RlKGUsdCsxKX19e2NvbnN0IGE9bi5zZWFyY2hOb2RlKGUsdCsxKTtpZihudWxsIT09YSlyZXR1cm4gYX19aWYobi5jaGlsZE5vZGVzJiYwIT09bi5jaGlsZE5vZGVzLmxlbmd0aCl7ci5wdXNoKFtuLDBdKTtuPW4uY2hpbGROb2Rlc1swXX1lbHNle2lmKDA9PT1yLmxlbmd0aClyZXR1cm4gbnVsbDtmb3IoOzAhPT1yLmxlbmd0aDspe2NvbnN0W2UsdF09ci5wb3AoKSxhPXQrMTtpZihhPGUuY2hpbGROb2Rlcy5sZW5ndGgpe3IucHVzaChbZSxhXSk7bj1lLmNoaWxkTm9kZXNbYV07YnJlYWt9fWlmKDA9PT1yLmxlbmd0aClyZXR1cm4gbnVsbH19fWR1bXAoZSl7aWYoIiN0ZXh0IiE9PXRoaXMubm9kZU5hbWUpe2UucHVzaChgPCR7dGhpcy5ub2RlTmFtZX1gKTtpZih0aGlzLmF0dHJpYnV0ZXMpZm9yKGNvbnN0IHQgb2YgdGhpcy5hdHRyaWJ1dGVzKWUucHVzaChgICR7dC5uYW1lfT0iJHsoMCxyLmVuY29kZVRvWG1sU3RyaW5nKSh0LnZhbHVlKX0iYCk7aWYodGhpcy5oYXNDaGlsZE5vZGVzKCkpe2UucHVzaCgiPiIpO2Zvcihjb25zdCB0IG9mIHRoaXMuY2hpbGROb2Rlcyl0LmR1bXAoZSk7ZS5wdXNoKGA8LyR7dGhpcy5ub2RlTmFtZX0+YCl9ZWxzZSB0aGlzLm5vZGVWYWx1ZT9lLnB1c2goYD4keygwLHIuZW5jb2RlVG9YbWxTdHJpbmcpKHRoaXMubm9kZVZhbHVlKX08LyR7dGhpcy5ub2RlTmFtZX0+YCk6ZS5wdXNoKCIvPiIpfWVsc2UgZS5wdXNoKCgwLHIuZW5jb2RlVG9YbWxTdHJpbmcpKHRoaXMubm9kZVZhbHVlKSl9fXQuU2ltcGxlRE9NTm9kZT1TaW1wbGVET01Ob2RlO3QuU2ltcGxlWE1MUGFyc2VyPWNsYXNzIFNpbXBsZVhNTFBhcnNlciBleHRlbmRzIFhNTFBhcnNlckJhc2V7Y29uc3RydWN0b3Ioe2hhc0F0dHJpYnV0ZXM6ZT0hMSxsb3dlckNhc2VOYW1lOnQ9ITF9KXtzdXBlcigpO3RoaXMuX2N1cnJlbnRGcmFnbWVudD1udWxsO3RoaXMuX3N0YWNrPW51bGw7dGhpcy5fZXJyb3JDb2RlPW4uTm9FcnJvcjt0aGlzLl9oYXNBdHRyaWJ1dGVzPWU7dGhpcy5fbG93ZXJDYXNlTmFtZT10fXBhcnNlRnJvbVN0cmluZyhlKXt0aGlzLl9jdXJyZW50RnJhZ21lbnQ9W107dGhpcy5fc3RhY2s9W107dGhpcy5fZXJyb3JDb2RlPW4uTm9FcnJvcjt0aGlzLnBhcnNlWG1sKGUpO2lmKHRoaXMuX2Vycm9yQ29kZSE9PW4uTm9FcnJvcilyZXR1cm47Y29uc3RbdF09dGhpcy5fY3VycmVudEZyYWdtZW50O3JldHVybiB0P3tkb2N1bWVudEVsZW1lbnQ6dH06dm9pZCAwfW9uVGV4dChlKXtpZihmdW5jdGlvbiBpc1doaXRlc3BhY2VTdHJpbmcoZSl7Zm9yKGxldCB0PTAsYT1lLmxlbmd0aDt0PGE7dCsrKWlmKCFpc1doaXRlc3BhY2UoZSx0KSlyZXR1cm4hMTtyZXR1cm4hMH0oZSkpcmV0dXJuO2NvbnN0IHQ9bmV3IFNpbXBsZURPTU5vZGUoIiN0ZXh0IixlKTt0aGlzLl9jdXJyZW50RnJhZ21lbnQucHVzaCh0KX1vbkNkYXRhKGUpe2NvbnN0IHQ9bmV3IFNpbXBsZURPTU5vZGUoIiN0ZXh0IixlKTt0aGlzLl9jdXJyZW50RnJhZ21lbnQucHVzaCh0KX1vbkJlZ2luRWxlbWVudChlLHQsYSl7dGhpcy5fbG93ZXJDYXNlTmFtZSYmKGU9ZS50b0xvd2VyQ2FzZSgpKTtjb25zdCByPW5ldyBTaW1wbGVET01Ob2RlKGUpO3IuY2hpbGROb2Rlcz1bXTt0aGlzLl9oYXNBdHRyaWJ1dGVzJiYoci5hdHRyaWJ1dGVzPXQpO3RoaXMuX2N1cnJlbnRGcmFnbWVudC5wdXNoKHIpO2lmKCFhKXt0aGlzLl9zdGFjay5wdXNoKHRoaXMuX2N1cnJlbnRGcmFnbWVudCk7dGhpcy5fY3VycmVudEZyYWdtZW50PXIuY2hpbGROb2Rlc319b25FbmRFbGVtZW50KGUpe3RoaXMuX2N1cnJlbnRGcmFnbWVudD10aGlzLl9zdGFjay5wb3AoKXx8W107Y29uc3QgdD10aGlzLl9jdXJyZW50RnJhZ21lbnQuYXQoLTEpO2lmKCF0KXJldHVybiBudWxsO2Zvcihjb25zdCBlIG9mIHQuY2hpbGROb2RlcyllLnBhcmVudE5vZGU9dDtyZXR1cm4gdH1vbkVycm9yKGUpe3RoaXMuX2Vycm9yQ29kZT1lfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5jYWxjdWxhdGVTSEEyNTY9dC5jYWxjdWxhdGVNRDU9dC5QREYyMD10LlBERjE3PXQuQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeT10LkFSQ0ZvdXJDaXBoZXI9dC5BRVMyNTZDaXBoZXI9dC5BRVMxMjhDaXBoZXI9dm9pZCAwO3QuY2FsY3VsYXRlU0hBMzg0PWNhbGN1bGF0ZVNIQTM4NDt0LmNhbGN1bGF0ZVNIQTUxMj12b2lkIDA7dmFyIHI9YSgyKSxuPWEoMyksaT1hKDY2KTtjbGFzcyBBUkNGb3VyQ2lwaGVye2NvbnN0cnVjdG9yKGUpe3RoaXMuYT0wO3RoaXMuYj0wO2NvbnN0IHQ9bmV3IFVpbnQ4QXJyYXkoMjU2KSxhPWUubGVuZ3RoO2ZvcihsZXQgZT0wO2U8MjU2OysrZSl0W2VdPWU7Zm9yKGxldCByPTAsbj0wO3I8MjU2Oysrcil7Y29uc3QgaT10W3JdO249bitpK2VbciVhXSYyNTU7dFtyXT10W25dO3Rbbl09aX10aGlzLnM9dH1lbmNyeXB0QmxvY2soZSl7bGV0IHQ9dGhpcy5hLGE9dGhpcy5iO2NvbnN0IHI9dGhpcy5zLG49ZS5sZW5ndGgsaT1uZXcgVWludDhBcnJheShuKTtmb3IobGV0IHM9MDtzPG47KytzKXt0PXQrMSYyNTU7Y29uc3Qgbj1yW3RdO2E9YStuJjI1NTtjb25zdCBvPXJbYV07clt0XT1vO3JbYV09bjtpW3NdPWVbc11ecltuK28mMjU1XX10aGlzLmE9dDt0aGlzLmI9YTtyZXR1cm4gaX1kZWNyeXB0QmxvY2soZSl7cmV0dXJuIHRoaXMuZW5jcnlwdEJsb2NrKGUpfWVuY3J5cHQoZSl7cmV0dXJuIHRoaXMuZW5jcnlwdEJsb2NrKGUpfX10LkFSQ0ZvdXJDaXBoZXI9QVJDRm91ckNpcGhlcjtjb25zdCBzPWZ1bmN0aW9uIGNhbGN1bGF0ZU1ENUNsb3N1cmUoKXtjb25zdCBlPW5ldyBVaW50OEFycmF5KFs3LDEyLDE3LDIyLDcsMTIsMTcsMjIsNywxMiwxNywyMiw3LDEyLDE3LDIyLDUsOSwxNCwyMCw1LDksMTQsMjAsNSw5LDE0LDIwLDUsOSwxNCwyMCw0LDExLDE2LDIzLDQsMTEsMTYsMjMsNCwxMSwxNiwyMyw0LDExLDE2LDIzLDYsMTAsMTUsMjEsNiwxMCwxNSwyMSw2LDEwLDE1LDIxLDYsMTAsMTUsMjFdKSx0PW5ldyBJbnQzMkFycmF5KFstNjgwODc2OTM2LC0zODk1NjQ1ODYsNjA2MTA1ODE5LC0xMDQ0NTI1MzMwLC0xNzY0MTg4OTcsMTIwMDA4MDQyNiwtMTQ3MzIzMTM0MSwtNDU3MDU5ODMsMTc3MDAzNTQxNiwtMTk1ODQxNDQxNywtNDIwNjMsLTE5OTA0MDQxNjIsMTgwNDYwMzY4MiwtNDAzNDExMDEsLTE1MDIwMDIyOTAsMTIzNjUzNTMyOSwtMTY1Nzk2NTEwLC0xMDY5NTAxNjMyLDY0MzcxNzcxMywtMzczODk3MzAyLC03MDE1NTg2OTEsMzgwMTYwODMsLTY2MDQ3ODMzNSwtNDA1NTM3ODQ4LDU2ODQ0NjQzOCwtMTAxOTgwMzY5MCwtMTg3MzYzOTYxLDExNjM1MzE1MDEsLTE0NDQ2ODE0NjcsLTUxNDAzNzg0LDE3MzUzMjg0NzMsLTE5MjY2MDc3MzQsLTM3ODU1OCwtMjAyMjU3NDQ2MywxODM5MDMwNTYyLC0zNTMwOTU1NiwtMTUzMDk5MjA2MCwxMjcyODkzMzUzLC0xNTU0OTc2MzIsLTEwOTQ3MzA2NDAsNjgxMjc5MTc0LC0zNTg1MzcyMjIsLTcyMjUyMTk3OSw3NjAyOTE4OSwtNjQwMzY0NDg3LC00MjE4MTU4MzUsNTMwNzQyNTIwLC05OTUzMzg2NTEsLTE5ODYzMDg0NCwxMTI2ODkxNDE1LC0xNDE2MzU0OTA1LC01NzQzNDA1NSwxNzAwNDg1NTcxLC0xODk0OTg2NjA2LC0xMDUxNTIzLC0yMDU0OTIyNzk5LDE4NzMzMTMzNTksLTMwNjExNzQ0LC0xNTYwMTk4MzgwLDEzMDkxNTE2NDksLTE0NTUyMzA3MCwtMTEyMDIxMDM3OSw3MTg3ODcyNTksLTM0MzQ4NTU1MV0pO3JldHVybiBmdW5jdGlvbiBoYXNoKGEscixuKXtsZXQgaT0xNzMyNTg0MTkzLHM9LTI3MTczMzg3OSxvPS0xNzMyNTg0MTk0LGM9MjcxNzMzODc4O2NvbnN0IGw9bis3MiYtNjQsaD1uZXcgVWludDhBcnJheShsKTtsZXQgdSxkO2Zvcih1PTA7dTxuOysrdSloW3VdPWFbcisrXTtoW3UrK109MTI4O2NvbnN0IGY9bC04O2Zvcig7dTxmOyloW3UrK109MDtoW3UrK109bjw8MyYyNTU7aFt1KytdPW4+PjUmMjU1O2hbdSsrXT1uPj4xMyYyNTU7aFt1KytdPW4+PjIxJjI1NTtoW3UrK109bj4+PjI5JjI1NTtoW3UrK109MDtoW3UrK109MDtoW3UrK109MDtjb25zdCBnPW5ldyBJbnQzMkFycmF5KDE2KTtmb3IodT0wO3U8bDspe2ZvcihkPTA7ZDwxNjsrK2QsdSs9NClnW2RdPWhbdV18aFt1KzFdPDw4fGhbdSsyXTw8MTZ8aFt1KzNdPDwyNDtsZXQgYSxyLG49aSxsPXMsZj1vLHA9Yztmb3IoZD0wO2Q8NjQ7KytkKXtpZihkPDE2KXthPWwmZnx+bCZwO3I9ZH1lbHNlIGlmKGQ8MzIpe2E9cCZsfH5wJmY7cj01KmQrMSYxNX1lbHNlIGlmKGQ8NDgpe2E9bF5mXnA7cj0zKmQrNSYxNX1lbHNle2E9Zl4obHx+cCk7cj03KmQmMTV9Y29uc3QgaT1wLHM9bithK3RbZF0rZ1tyXXwwLG89ZVtkXTtwPWY7Zj1sO2w9bCsoczw8b3xzPj4+MzItbyl8MDtuPWl9aT1pK258MDtzPXMrbHwwO289bytmfDA7Yz1jK3B8MH1yZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWzI1NSZpLGk+PjgmMjU1LGk+PjE2JjI1NSxpPj4+MjQmMjU1LDI1NSZzLHM+PjgmMjU1LHM+PjE2JjI1NSxzPj4+MjQmMjU1LDI1NSZvLG8+PjgmMjU1LG8+PjE2JjI1NSxvPj4+MjQmMjU1LDI1NSZjLGM+PjgmMjU1LGM+PjE2JjI1NSxjPj4+MjQmMjU1XSl9fSgpO3QuY2FsY3VsYXRlTUQ1PXM7Y2xhc3MgV29yZDY0e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5oaWdoPTB8ZTt0aGlzLmxvdz0wfHR9YW5kKGUpe3RoaXMuaGlnaCY9ZS5oaWdoO3RoaXMubG93Jj1lLmxvd314b3IoZSl7dGhpcy5oaWdoXj1lLmhpZ2g7dGhpcy5sb3dePWUubG93fW9yKGUpe3RoaXMuaGlnaHw9ZS5oaWdoO3RoaXMubG93fD1lLmxvd31zaGlmdFJpZ2h0KGUpe2lmKGU+PTMyKXt0aGlzLmxvdz10aGlzLmhpZ2g+Pj5lLTMyfDA7dGhpcy5oaWdoPTB9ZWxzZXt0aGlzLmxvdz10aGlzLmxvdz4+PmV8dGhpcy5oaWdoPDwzMi1lO3RoaXMuaGlnaD10aGlzLmhpZ2g+Pj5lfDB9fXNoaWZ0TGVmdChlKXtpZihlPj0zMil7dGhpcy5oaWdoPXRoaXMubG93PDxlLTMyO3RoaXMubG93PTB9ZWxzZXt0aGlzLmhpZ2g9dGhpcy5oaWdoPDxlfHRoaXMubG93Pj4+MzItZTt0aGlzLmxvdzw8PWV9fXJvdGF0ZVJpZ2h0KGUpe2xldCB0LGE7aWYoMzImZSl7YT10aGlzLmxvdzt0PXRoaXMuaGlnaH1lbHNle3Q9dGhpcy5sb3c7YT10aGlzLmhpZ2h9ZSY9MzE7dGhpcy5sb3c9dD4+PmV8YTw8MzItZTt0aGlzLmhpZ2g9YT4+PmV8dDw8MzItZX1ub3QoKXt0aGlzLmhpZ2g9fnRoaXMuaGlnaDt0aGlzLmxvdz1+dGhpcy5sb3d9YWRkKGUpe2NvbnN0IHQ9KHRoaXMubG93Pj4+MCkrKGUubG93Pj4+MCk7bGV0IGE9KHRoaXMuaGlnaD4+PjApKyhlLmhpZ2g+Pj4wKTt0PjQyOTQ5NjcyOTUmJihhKz0xKTt0aGlzLmxvdz0wfHQ7dGhpcy5oaWdoPTB8YX1jb3B5VG8oZSx0KXtlW3RdPXRoaXMuaGlnaD4+PjI0JjI1NTtlW3QrMV09dGhpcy5oaWdoPj4xNiYyNTU7ZVt0KzJdPXRoaXMuaGlnaD4+OCYyNTU7ZVt0KzNdPTI1NSZ0aGlzLmhpZ2g7ZVt0KzRdPXRoaXMubG93Pj4+MjQmMjU1O2VbdCs1XT10aGlzLmxvdz4+MTYmMjU1O2VbdCs2XT10aGlzLmxvdz4+OCYyNTU7ZVt0KzddPTI1NSZ0aGlzLmxvd31hc3NpZ24oZSl7dGhpcy5oaWdoPWUuaGlnaDt0aGlzLmxvdz1lLmxvd319Y29uc3Qgbz1mdW5jdGlvbiBjYWxjdWxhdGVTSEEyNTZDbG9zdXJlKCl7ZnVuY3Rpb24gcm90cihlLHQpe3JldHVybiBlPj4+dHxlPDwzMi10fWZ1bmN0aW9uIGNoKGUsdCxhKXtyZXR1cm4gZSZ0Xn5lJmF9ZnVuY3Rpb24gbWFqKGUsdCxhKXtyZXR1cm4gZSZ0XmUmYV50JmF9ZnVuY3Rpb24gc2lnbWEoZSl7cmV0dXJuIHJvdHIoZSwyKV5yb3RyKGUsMTMpXnJvdHIoZSwyMil9ZnVuY3Rpb24gc2lnbWFQcmltZShlKXtyZXR1cm4gcm90cihlLDYpXnJvdHIoZSwxMSlecm90cihlLDI1KX1mdW5jdGlvbiBsaXR0bGVTaWdtYShlKXtyZXR1cm4gcm90cihlLDcpXnJvdHIoZSwxOCleZT4+PjN9Y29uc3QgZT1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XTtyZXR1cm4gZnVuY3Rpb24gaGFzaCh0LGEscil7bGV0IG49MTc3OTAzMzcwMyxpPTMxNDQxMzQyNzcscz0xMDEzOTA0MjQyLG89Mjc3MzQ4MDc2MixjPTEzNTk4OTMxMTksbD0yNjAwODIyOTI0LGg9NTI4NzM0NjM1LHU9MTU0MTQ1OTIyNTtjb25zdCBkPTY0Kk1hdGguY2VpbCgocis5KS82NCksZj1uZXcgVWludDhBcnJheShkKTtsZXQgZyxwO2ZvcihnPTA7ZzxyOysrZylmW2ddPXRbYSsrXTtmW2crK109MTI4O2NvbnN0IG09ZC04O2Zvcig7ZzxtOylmW2crK109MDtmW2crK109MDtmW2crK109MDtmW2crK109MDtmW2crK109cj4+PjI5JjI1NTtmW2crK109cj4+MjEmMjU1O2ZbZysrXT1yPj4xMyYyNTU7ZltnKytdPXI+PjUmMjU1O2ZbZysrXT1yPDwzJjI1NTtjb25zdCBiPW5ldyBVaW50MzJBcnJheSg2NCk7Zm9yKGc9MDtnPGQ7KXtmb3IocD0wO3A8MTY7KytwKXtiW3BdPWZbZ108PDI0fGZbZysxXTw8MTZ8ZltnKzJdPDw4fGZbZyszXTtnKz00fWZvcihwPTE2O3A8NjQ7KytwKWJbcF09KHJvdHIoeT1iW3AtMl0sMTcpXnJvdHIoeSwxOSleeT4+PjEwKStiW3AtN10rbGl0dGxlU2lnbWEoYltwLTE1XSkrYltwLTE2XXwwO2xldCB0LGEscj1uLGQ9aSxtPXMsdz1vLFM9Yyx4PWwsaz1oLEM9dTtmb3IocD0wO3A8NjQ7KytwKXt0PUMrc2lnbWFQcmltZShTKStjaChTLHgsaykrZVtwXStiW3BdO2E9c2lnbWEocikrbWFqKHIsZCxtKTtDPWs7az14O3g9UztTPXcrdHwwO3c9bTttPWQ7ZD1yO3I9dCthfDB9bj1uK3J8MDtpPWkrZHwwO3M9cyttfDA7bz1vK3d8MDtjPWMrU3wwO2w9bCt4fDA7aD1oK2t8MDt1PXUrQ3wwfXZhciB5O3JldHVybiBuZXcgVWludDhBcnJheShbbj4+MjQmMjU1LG4+PjE2JjI1NSxuPj44JjI1NSwyNTUmbixpPj4yNCYyNTUsaT4+MTYmMjU1LGk+PjgmMjU1LDI1NSZpLHM+PjI0JjI1NSxzPj4xNiYyNTUscz4+OCYyNTUsMjU1JnMsbz4+MjQmMjU1LG8+PjE2JjI1NSxvPj44JjI1NSwyNTUmbyxjPj4yNCYyNTUsYz4+MTYmMjU1LGM+PjgmMjU1LDI1NSZjLGw+PjI0JjI1NSxsPj4xNiYyNTUsbD4+OCYyNTUsMjU1JmwsaD4+MjQmMjU1LGg+PjE2JjI1NSxoPj44JjI1NSwyNTUmaCx1Pj4yNCYyNTUsdT4+MTYmMjU1LHU+PjgmMjU1LDI1NSZ1XSl9fSgpO3QuY2FsY3VsYXRlU0hBMjU2PW87Y29uc3QgYz1mdW5jdGlvbiBjYWxjdWxhdGVTSEE1MTJDbG9zdXJlKCl7ZnVuY3Rpb24gY2goZSx0LGEscixuKXtlLmFzc2lnbih0KTtlLmFuZChhKTtuLmFzc2lnbih0KTtuLm5vdCgpO24uYW5kKHIpO2UueG9yKG4pfWZ1bmN0aW9uIG1haihlLHQsYSxyLG4pe2UuYXNzaWduKHQpO2UuYW5kKGEpO24uYXNzaWduKHQpO24uYW5kKHIpO2UueG9yKG4pO24uYXNzaWduKGEpO24uYW5kKHIpO2UueG9yKG4pfWZ1bmN0aW9uIHNpZ21hKGUsdCxhKXtlLmFzc2lnbih0KTtlLnJvdGF0ZVJpZ2h0KDI4KTthLmFzc2lnbih0KTthLnJvdGF0ZVJpZ2h0KDM0KTtlLnhvcihhKTthLmFzc2lnbih0KTthLnJvdGF0ZVJpZ2h0KDM5KTtlLnhvcihhKX1mdW5jdGlvbiBzaWdtYVByaW1lKGUsdCxhKXtlLmFzc2lnbih0KTtlLnJvdGF0ZVJpZ2h0KDE0KTthLmFzc2lnbih0KTthLnJvdGF0ZVJpZ2h0KDE4KTtlLnhvcihhKTthLmFzc2lnbih0KTthLnJvdGF0ZVJpZ2h0KDQxKTtlLnhvcihhKX1mdW5jdGlvbiBsaXR0bGVTaWdtYShlLHQsYSl7ZS5hc3NpZ24odCk7ZS5yb3RhdGVSaWdodCgxKTthLmFzc2lnbih0KTthLnJvdGF0ZVJpZ2h0KDgpO2UueG9yKGEpO2EuYXNzaWduKHQpO2Euc2hpZnRSaWdodCg3KTtlLnhvcihhKX1mdW5jdGlvbiBsaXR0bGVTaWdtYVByaW1lKGUsdCxhKXtlLmFzc2lnbih0KTtlLnJvdGF0ZVJpZ2h0KDE5KTthLmFzc2lnbih0KTthLnJvdGF0ZVJpZ2h0KDYxKTtlLnhvcihhKTthLmFzc2lnbih0KTthLnNoaWZ0UmlnaHQoNik7ZS54b3IoYSl9Y29uc3QgZT1bbmV3IFdvcmQ2NCgxMTE2MzUyNDA4LDM2MDk3Njc0NTgpLG5ldyBXb3JkNjQoMTg5OTQ0NzQ0MSw2MDI4OTE3MjUpLG5ldyBXb3JkNjQoMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5KSxuZXcgV29yZDY0KDM5MjEwMDk1NzMsMjE3MzI5NTU0OCksbmV3IFdvcmQ2NCg5NjE5ODcxNjMsNDA4MTYyODQ3MiksbmV3IFdvcmQ2NCgxNTA4OTcwOTkzLDMwNTM4MzQyNjUpLG5ldyBXb3JkNjQoMjQ1MzYzNTc0OCwyOTM3NjcxNTc5KSxuZXcgV29yZDY0KDI4NzA3NjMyMjEsMzY2NDYwOTU2MCksbmV3IFdvcmQ2NCgzNjI0MzgxMDgwLDI3MzQ4ODMzOTQpLG5ldyBXb3JkNjQoMzEwNTk4NDAxLDExNjQ5OTY1NDIpLG5ldyBXb3JkNjQoNjA3MjI1Mjc4LDEzMjM2MTA3NjQpLG5ldyBXb3JkNjQoMTQyNjg4MTk4NywzNTkwMzA0OTk0KSxuZXcgV29yZDY0KDE5MjUwNzgzODgsNDA2ODE4MjM4MyksbmV3IFdvcmQ2NCgyMTYyMDc4MjA2LDk5MTMzNjExMyksbmV3IFdvcmQ2NCgyNjE0ODg4MTAzLDYzMzgwMzMxNyksbmV3IFdvcmQ2NCgzMjQ4MjIyNTgwLDM0Nzk3NzQ4NjgpLG5ldyBXb3JkNjQoMzgzNTM5MDQwMSwyNjY2NjEzNDU4KSxuZXcgV29yZDY0KDQwMjIyMjQ3NzQsOTQ0NzExMTM5KSxuZXcgV29yZDY0KDI2NDM0NzA3OCwyMzQxMjYyNzczKSxuZXcgV29yZDY0KDYwNDgwNzYyOCwyMDA3ODAwOTMzKSxuZXcgV29yZDY0KDc3MDI1NTk4MywxNDk1OTkwOTAxKSxuZXcgV29yZDY0KDEyNDkxNTAxMjIsMTg1NjQzMTIzNSksbmV3IFdvcmQ2NCgxNTU1MDgxNjkyLDMxNzUyMTgxMzIpLG5ldyBXb3JkNjQoMTk5NjA2NDk4NiwyMTk4OTUwODM3KSxuZXcgV29yZDY0KDI1NTQyMjA4ODIsMzk5OTcxOTMzOSksbmV3IFdvcmQ2NCgyODIxODM0MzQ5LDc2Njc4NDAxNiksbmV3IFdvcmQ2NCgyOTUyOTk2ODA4LDI1NjY1OTQ4NzkpLG5ldyBXb3JkNjQoMzIxMDMxMzY3MSwzMjAzMzM3OTU2KSxuZXcgV29yZDY0KDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiksbmV3IFdvcmQ2NCgzNTg0NTI4NzExLDI0NjY5NDg5MDEpLG5ldyBXb3JkNjQoMTEzOTI2OTkzLDM3NTgzMjYzODMpLG5ldyBXb3JkNjQoMzM4MjQxODk1LDE2ODcxNzkzNiksbmV3IFdvcmQ2NCg2NjYzMDcyMDUsMTE4ODE3OTk2NCksbmV3IFdvcmQ2NCg3NzM1Mjk5MTIsMTU0NjA0NTczNCksbmV3IFdvcmQ2NCgxMjk0NzU3MzcyLDE1MjI4MDU0ODUpLG5ldyBXb3JkNjQoMTM5NjE4MjI5MSwyNjQzODMzODIzKSxuZXcgV29yZDY0KDE2OTUxODM3MDAsMjM0MzUyNzM5MCksbmV3IFdvcmQ2NCgxOTg2NjYxMDUxLDEwMTQ0Nzc0ODApLG5ldyBXb3JkNjQoMjE3NzAyNjM1MCwxMjA2NzU5MTQyKSxuZXcgV29yZDY0KDI0NTY5NTYwMzcsMzQ0MDc3NjI3KSxuZXcgV29yZDY0KDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCksbmV3IFdvcmQ2NCgyODIwMzAyNDExLDMxNTg0NTQyNzMpLG5ldyBXb3JkNjQoMzI1OTczMDgwMCwzNTA1OTUyNjU3KSxuZXcgV29yZDY0KDMzNDU3NjQ3NzEsMTA2MjE3MDA4KSxuZXcgV29yZDY0KDM1MTYwNjU4MTcsMzYwNjAwODM0NCksbmV3IFdvcmQ2NCgzNjAwMzUyODA0LDE0MzI3MjU3NzYpLG5ldyBXb3JkNjQoNDA5NDU3MTkwOSwxNDY3MDMxNTk0KSxuZXcgV29yZDY0KDI3NTQyMzM0NCw4NTExNjk3MjApLG5ldyBXb3JkNjQoNDMwMjI3NzM0LDMxMDA4MjM3NTIpLG5ldyBXb3JkNjQoNTA2OTQ4NjE2LDEzNjMyNTgxOTUpLG5ldyBXb3JkNjQoNjU5MDYwNTU2LDM3NTA2ODU1OTMpLG5ldyBXb3JkNjQoODgzOTk3ODc3LDM3ODUwNTAyODApLG5ldyBXb3JkNjQoOTU4MTM5NTcxLDMzMTgzMDc0MjcpLG5ldyBXb3JkNjQoMTMyMjgyMjIxOCwzODEyNzIzNDAzKSxuZXcgV29yZDY0KDE1MzcwMDIwNjMsMjAwMzAzNDk5NSksbmV3IFdvcmQ2NCgxNzQ3ODczNzc5LDM2MDIwMzY4OTkpLG5ldyBXb3JkNjQoMTk1NTU2MjIyMiwxNTc1OTkwMDEyKSxuZXcgV29yZDY0KDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCksbmV3IFdvcmQ2NCgyMjI3NzMwNDUyLDI3MTY5MDQzMDYpLG5ldyBXb3JkNjQoMjM2MTg1MjQyNCw0NDI3NzYwNDQpLG5ldyBXb3JkNjQoMjQyODQzNjQ3NCw1OTM2OTgzNDQpLG5ldyBXb3JkNjQoMjc1NjczNDE4NywzNzMzMTEwMjQ5KSxuZXcgV29yZDY0KDMyMDQwMzE0NzksMjk5OTM1MTU3MyksbmV3IFdvcmQ2NCgzMzI5MzI1Mjk4LDM4MTU5MjA0MjcpLG5ldyBXb3JkNjQoMzM5MTU2OTYxNCwzOTI4MzgzOTAwKSxuZXcgV29yZDY0KDM1MTUyNjcyNzEsNTY2MjgwNzExKSxuZXcgV29yZDY0KDM5NDAxODc2MDYsMzQ1NDA2OTUzNCksbmV3IFdvcmQ2NCg0MTE4NjMwMjcxLDQwMDAyMzk5OTIpLG5ldyBXb3JkNjQoMTE2NDE4NDc0LDE5MTQxMzg1NTQpLG5ldyBXb3JkNjQoMTc0MjkyNDIxLDI3MzEwNTUyNzApLG5ldyBXb3JkNjQoMjg5MzgwMzU2LDMyMDM5OTMwMDYpLG5ldyBXb3JkNjQoNDYwMzkzMjY5LDMyMDYyMDMxNSksbmV3IFdvcmQ2NCg2ODU0NzE3MzMsNTg3NDk2ODM2KSxuZXcgV29yZDY0KDg1MjE0Mjk3MSwxMDg2NzkyODUxKSxuZXcgV29yZDY0KDEwMTcwMzYyOTgsMzY1NTQzMTAwKSxuZXcgV29yZDY0KDExMjYwMDA1ODAsMjYxODI5NzY3NiksbmV3IFdvcmQ2NCgxMjg4MDMzNDcwLDM0MDk4NTUxNTgpLG5ldyBXb3JkNjQoMTUwMTUwNTk0OCw0MjM0NTA5ODY2KSxuZXcgV29yZDY0KDE2MDcxNjc5MTUsOTg3MTY3NDY4KSxuZXcgV29yZDY0KDE4MTY0MDIzMTYsMTI0NjE4OTU5MSldO3JldHVybiBmdW5jdGlvbiBoYXNoKHQsYSxyLG49ITEpe2xldCBpLHMsbyxjLGwsaCx1LGQ7aWYobil7aT1uZXcgV29yZDY0KDM0MTgwNzAzNjUsMzIzODM3MTAzMik7cz1uZXcgV29yZDY0KDE2NTQyNzAyNTAsOTE0MTUwNjYzKTtvPW5ldyBXb3JkNjQoMjQzODUyOTM3MCw4MTI3MDI5OTkpO2M9bmV3IFdvcmQ2NCgzNTU0NjIzNjAsNDE0NDkxMjY5Nyk7bD1uZXcgV29yZDY0KDE3MzE0MDU0MTUsNDI5MDc3NTg1Nyk7aD1uZXcgV29yZDY0KDIzOTQxODAyMzEsMTc1MDYwMzAyNSk7dT1uZXcgV29yZDY0KDM2NzUwMDg1MjUsMTY5NDA3NjgzOSk7ZD1uZXcgV29yZDY0KDEyMDMwNjI4MTMsMzIwNDA3NTQyOCl9ZWxzZXtpPW5ldyBXb3JkNjQoMTc3OTAzMzcwMyw0MDg5MjM1NzIwKTtzPW5ldyBXb3JkNjQoMzE0NDEzNDI3NywyMjI3ODczNTk1KTtvPW5ldyBXb3JkNjQoMTAxMzkwNDI0Miw0MjcxMTc1NzIzKTtjPW5ldyBXb3JkNjQoMjc3MzQ4MDc2MiwxNTk1NzUwMTI5KTtsPW5ldyBXb3JkNjQoMTM1OTg5MzExOSwyOTE3NTY1MTM3KTtoPW5ldyBXb3JkNjQoMjYwMDgyMjkyNCw3MjU1MTExOTkpO3U9bmV3IFdvcmQ2NCg1Mjg3MzQ2MzUsNDIxNTM4OTU0Nyk7ZD1uZXcgV29yZDY0KDE1NDE0NTkyMjUsMzI3MDMzMjA5KX1jb25zdCBmPTEyOCpNYXRoLmNlaWwoKHIrMTcpLzEyOCksZz1uZXcgVWludDhBcnJheShmKTtsZXQgcCxtO2ZvcihwPTA7cDxyOysrcClnW3BdPXRbYSsrXTtnW3ArK109MTI4O2NvbnN0IGI9Zi0xNjtmb3IoO3A8YjspZ1twKytdPTA7Z1twKytdPTA7Z1twKytdPTA7Z1twKytdPTA7Z1twKytdPTA7Z1twKytdPTA7Z1twKytdPTA7Z1twKytdPTA7Z1twKytdPTA7Z1twKytdPTA7Z1twKytdPTA7Z1twKytdPTA7Z1twKytdPXI+Pj4yOSYyNTU7Z1twKytdPXI+PjIxJjI1NTtnW3ArK109cj4+MTMmMjU1O2dbcCsrXT1yPj41JjI1NTtnW3ArK109cjw8MyYyNTU7Y29uc3QgeT1uZXcgQXJyYXkoODApO2ZvcihwPTA7cDw4MDtwKyspeVtwXT1uZXcgV29yZDY0KDAsMCk7bGV0IHc9bmV3IFdvcmQ2NCgwLDApLFM9bmV3IFdvcmQ2NCgwLDApLHg9bmV3IFdvcmQ2NCgwLDApLGs9bmV3IFdvcmQ2NCgwLDApLEM9bmV3IFdvcmQ2NCgwLDApLHY9bmV3IFdvcmQ2NCgwLDApLEY9bmV3IFdvcmQ2NCgwLDApLE89bmV3IFdvcmQ2NCgwLDApO2NvbnN0IFQ9bmV3IFdvcmQ2NCgwLDApLE09bmV3IFdvcmQ2NCgwLDApLEU9bmV3IFdvcmQ2NCgwLDApLEQ9bmV3IFdvcmQ2NCgwLDApO2xldCBOLFI7Zm9yKHA9MDtwPGY7KXtmb3IobT0wO208MTY7KyttKXt5W21dLmhpZ2g9Z1twXTw8MjR8Z1twKzFdPDwxNnxnW3ArMl08PDh8Z1twKzNdO3lbbV0ubG93PWdbcCs0XTw8MjR8Z1twKzVdPDwxNnxnW3ArNl08PDh8Z1twKzddO3ArPTh9Zm9yKG09MTY7bTw4MDsrK20pe049eVttXTtsaXR0bGVTaWdtYVByaW1lKE4seVttLTJdLEQpO04uYWRkKHlbbS03XSk7bGl0dGxlU2lnbWEoRSx5W20tMTVdLEQpO04uYWRkKEUpO04uYWRkKHlbbS0xNl0pfXcuYXNzaWduKGkpO1MuYXNzaWduKHMpO3guYXNzaWduKG8pO2suYXNzaWduKGMpO0MuYXNzaWduKGwpO3YuYXNzaWduKGgpO0YuYXNzaWduKHUpO08uYXNzaWduKGQpO2ZvcihtPTA7bTw4MDsrK20pe1QuYXNzaWduKE8pO3NpZ21hUHJpbWUoRSxDLEQpO1QuYWRkKEUpO2NoKEUsQyx2LEYsRCk7VC5hZGQoRSk7VC5hZGQoZVttXSk7VC5hZGQoeVttXSk7c2lnbWEoTSx3LEQpO21haihFLHcsUyx4LEQpO00uYWRkKEUpO049TztPPUY7Rj12O3Y9QztrLmFkZChUKTtDPWs7az14O3g9UztTPXc7Ti5hc3NpZ24oVCk7Ti5hZGQoTSk7dz1OfWkuYWRkKHcpO3MuYWRkKFMpO28uYWRkKHgpO2MuYWRkKGspO2wuYWRkKEMpO2guYWRkKHYpO3UuYWRkKEYpO2QuYWRkKE8pfWlmKG4pe1I9bmV3IFVpbnQ4QXJyYXkoNDgpO2kuY29weVRvKFIsMCk7cy5jb3B5VG8oUiw4KTtvLmNvcHlUbyhSLDE2KTtjLmNvcHlUbyhSLDI0KTtsLmNvcHlUbyhSLDMyKTtoLmNvcHlUbyhSLDQwKX1lbHNle1I9bmV3IFVpbnQ4QXJyYXkoNjQpO2kuY29weVRvKFIsMCk7cy5jb3B5VG8oUiw4KTtvLmNvcHlUbyhSLDE2KTtjLmNvcHlUbyhSLDI0KTtsLmNvcHlUbyhSLDMyKTtoLmNvcHlUbyhSLDQwKTt1LmNvcHlUbyhSLDQ4KTtkLmNvcHlUbyhSLDU2KX1yZXR1cm4gUn19KCk7dC5jYWxjdWxhdGVTSEE1MTI9YztmdW5jdGlvbiBjYWxjdWxhdGVTSEEzODQoZSx0LGEpe3JldHVybiBjKGUsdCxhLCEwKX1jbGFzcyBOdWxsQ2lwaGVye2RlY3J5cHRCbG9jayhlKXtyZXR1cm4gZX1lbmNyeXB0KGUpe3JldHVybiBlfX1jbGFzcyBBRVNCYXNlQ2lwaGVye2NvbnN0cnVjdG9yKCl7dGhpcy5jb25zdHJ1Y3Rvcj09PUFFU0Jhc2VDaXBoZXImJigwLHIudW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBBRVNCYXNlQ2lwaGVyLiIpO3RoaXMuX3M9bmV3IFVpbnQ4QXJyYXkoWzk5LDEyNCwxMTksMTIzLDI0MiwxMDcsMTExLDE5Nyw0OCwxLDEwMyw0MywyNTQsMjE1LDE3MSwxMTgsMjAyLDEzMCwyMDEsMTI1LDI1MCw4OSw3MSwyNDAsMTczLDIxMiwxNjIsMTc1LDE1NiwxNjQsMTE0LDE5MiwxODMsMjUzLDE0NywzOCw1NCw2MywyNDcsMjA0LDUyLDE2NSwyMjksMjQxLDExMywyMTYsNDksMjEsNCwxOTksMzUsMTk1LDI0LDE1MCw1LDE1NCw3LDE4LDEyOCwyMjYsMjM1LDM5LDE3OCwxMTcsOSwxMzEsNDQsMjYsMjcsMTEwLDkwLDE2MCw4Miw1OSwyMTQsMTc5LDQxLDIyNyw0NywxMzIsODMsMjA5LDAsMjM3LDMyLDI1MiwxNzcsOTEsMTA2LDIwMywxOTAsNTcsNzQsNzYsODgsMjA3LDIwOCwyMzksMTcwLDI1MSw2Nyw3Nyw1MSwxMzMsNjksMjQ5LDIsMTI3LDgwLDYwLDE1OSwxNjgsODEsMTYzLDY0LDE0MywxNDYsMTU3LDU2LDI0NSwxODgsMTgyLDIxOCwzMywxNiwyNTUsMjQzLDIxMCwyMDUsMTIsMTksMjM2LDk1LDE1MSw2OCwyMywxOTYsMTY3LDEyNiw2MSwxMDAsOTMsMjUsMTE1LDk2LDEyOSw3OSwyMjAsMzQsNDIsMTQ0LDEzNiw3MCwyMzgsMTg0LDIwLDIyMiw5NCwxMSwyMTksMjI0LDUwLDU4LDEwLDczLDYsMzYsOTIsMTk0LDIxMSwxNzIsOTgsMTQ1LDE0OSwyMjgsMTIxLDIzMSwyMDAsNTUsMTA5LDE0MSwyMTMsNzgsMTY5LDEwOCw4NiwyNDQsMjM0LDEwMSwxMjIsMTc0LDgsMTg2LDEyMCwzNyw0NiwyOCwxNjYsMTgwLDE5OCwyMzIsMjIxLDExNiwzMSw3NSwxODksMTM5LDEzOCwxMTIsNjIsMTgxLDEwMiw3MiwzLDI0NiwxNCw5Nyw1Myw4NywxODUsMTM0LDE5MywyOSwxNTgsMjI1LDI0OCwxNTIsMTcsMTA1LDIxNywxNDIsMTQ4LDE1NSwzMCwxMzUsMjMzLDIwNiw4NSw0MCwyMjMsMTQwLDE2MSwxMzcsMTMsMTkxLDIzMCw2NiwxMDQsNjUsMTUzLDQ1LDE1LDE3Niw4NCwxODcsMjJdKTt0aGlzLl9pbnZfcz1uZXcgVWludDhBcnJheShbODIsOSwxMDYsMjEzLDQ4LDU0LDE2NSw1NiwxOTEsNjQsMTYzLDE1OCwxMjksMjQzLDIxNSwyNTEsMTI0LDIyNyw1NywxMzAsMTU1LDQ3LDI1NSwxMzUsNTIsMTQyLDY3LDY4LDE5NiwyMjIsMjMzLDIwMyw4NCwxMjMsMTQ4LDUwLDE2NiwxOTQsMzUsNjEsMjM4LDc2LDE0OSwxMSw2NiwyNTAsMTk1LDc4LDgsNDYsMTYxLDEwMiw0MCwyMTcsMzYsMTc4LDExOCw5MSwxNjIsNzMsMTA5LDEzOSwyMDksMzcsMTE0LDI0OCwyNDYsMTAwLDEzNCwxMDQsMTUyLDIyLDIxMiwxNjQsOTIsMjA0LDkzLDEwMSwxODIsMTQ2LDEwOCwxMTIsNzIsODAsMjUzLDIzNywxODUsMjE4LDk0LDIxLDcwLDg3LDE2NywxNDEsMTU3LDEzMiwxNDQsMjE2LDE3MSwwLDE0MCwxODgsMjExLDEwLDI0NywyMjgsODgsNSwxODQsMTc5LDY5LDYsMjA4LDQ0LDMwLDE0MywyMDIsNjMsMTUsMiwxOTMsMTc1LDE4OSwzLDEsMTksMTM4LDEwNyw1OCwxNDUsMTcsNjUsNzksMTAzLDIyMCwyMzQsMTUxLDI0MiwyMDcsMjA2LDI0MCwxODAsMjMwLDExNSwxNTAsMTcyLDExNiwzNCwyMzEsMTczLDUzLDEzMywyMjYsMjQ5LDU1LDIzMiwyOCwxMTcsMjIzLDExMCw3MSwyNDEsMjYsMTEzLDI5LDQxLDE5NywxMzcsMTExLDE4Myw5OCwxNCwxNzAsMjQsMTkwLDI3LDI1Miw4Niw2Miw3NSwxOTgsMjEwLDEyMSwzMiwxNTQsMjE5LDE5MiwyNTQsMTIwLDIwNSw5MCwyNDQsMzEsMjIxLDE2OCw1MSwxMzYsNywxOTksNDksMTc3LDE4LDE2LDg5LDM5LDEyOCwyMzYsOTUsOTYsODEsMTI3LDE2OSwyNSwxODEsNzQsMTMsNDUsMjI5LDEyMiwxNTksMTQ3LDIwMSwxNTYsMjM5LDE2MCwyMjQsNTksNzcsMTc0LDQyLDI0NSwxNzYsMjAwLDIzNSwxODcsNjAsMTMxLDgzLDE1Myw5NywyMyw0Myw0LDEyNiwxODYsMTE5LDIxNCwzOCwyMjUsMTA1LDIwLDk5LDg1LDMzLDEyLDEyNV0pO3RoaXMuX21peD1uZXcgVWludDMyQXJyYXkoWzAsMjM1NDc0MTg3LDQ3MDk0ODM3NCwzMDM3NjUyNzcsOTQxODk2NzQ4LDkwODkzMzQxNSw2MDc1MzA1NTQsNzA4NzgwODQ5LDE4ODM3OTM0OTYsMjExODIxNDk5NSwxODE3ODY2ODMwLDE2NDk2MzkyMzcsMTIxNTA2MTEwOCwxMTgxMDQ1MTE5LDE0MTc1NjE2OTgsMTUxNzc2NzUyOSwzNzY3NTg2OTkyLDQwMDMwNjExNzksNDIzNjQyOTk5MCw0MDY5MjQ2ODkzLDM2MzU3MzM2NjAsMzYwMjc3MDMyNywzMjk5Mjc4NDc0LDM0MDA1Mjg3NjksMjQzMDEyMjIxNiwyNjY0NTQzNzE1LDIzNjIwOTAyMzgsMjE5Mzg2MjY0NSwyODM1MTIzMzk2LDI4MDExMDc0MDcsMzAzNTUzNTA1OCwzMTM1NzQwODg5LDM2NzgxMjQ5MjMsMzU3Njg3MDUxMiwzMzQxMzk0Mjg1LDMzNzQzNjE3MDIsMzgxMDQ5NjM0MywzOTc3Njc1MzU2LDQyNzkwODAyNTcsNDA0MzYxMDE4NiwyODc2NDk0NjI3LDI3NzYyOTI5MDQsMzA3NjYzOTAyOSwzMTEwNjUwOTQyLDI0NzIwMTE1MzUsMjY0MDI0MzIwNCwyNDAzNzI4NjY1LDIxNjkzMDMwNTgsMTAwMTA4OTk5NSw4OTk4MzU1ODQsNjY2NDY0NzMzLDY5OTQzMjE1MCw1OTcyNzg0NywyMjY5MDY4NjAsNTMwNDAwNzUzLDI5NDkzMDY4MiwxMjczMTY4Nzg3LDExNzI5NjcwNjQsMTQ3NTQxODUwMSwxNTA5NDMwNDE0LDE5NDI0MzU3NzUsMjExMDY2NzQ0NCwxODc2MjQxODMzLDE2NDE4MTYyMjYsMjkxMDIxOTc2NiwyNzQzMDM0MTA5LDI5NzYxNTE1MjAsMzIxMTYyMzE0NywyNTA1MjAyMTM4LDI2MDY0NTM5NjksMjMwMjY5MDI1MiwyMjY5NzI4NDU1LDM3MTE4Mjk0MjIsMzU0MzU5OTI2OSwzMjQwODk0MzkyLDM0NzUzMTMzMzEsMzg0MzY5OTA3NCwzOTQzOTA2NDQxLDQxNzgwNjIyMjgsNDE0NDA0Nzc3NSwxMzA2OTY3MzY2LDExMzk3ODE3MDksMTM3NDk4ODExMiwxNjEwNDU5NzM5LDE5NzU2ODM0MzQsMjA3NjkzNTI2NSwxNzc1Mjc2OTI0LDE3NDIzMTUxMjcsMTAzNDg2Nzk5OCw4NjY2Mzc4NDUsNTY2MDIxODk2LDgwMDQ0MDgzNSw5Mjk4NzY5OCwxOTMxOTUwNjUsNDI5NDU2MTY0LDM5NTQ0MTcxMSwxOTg0ODEyNjg1LDIwMTc3Nzg1NjYsMTc4NDY2MzE5NSwxNjgzNDA3MjQ4LDEzMTU1NjIxNDUsMTA4MDA5NDYzNCwxMzgzODU2MzExLDE1NTEwMzc4ODQsMTAxMDM5ODI5LDEzNTA1MDIwNiw0Mzc3NTcxMjMsMzM3NTUzODY0LDEwNDIzODU2NTcsODA3OTYyNjEwLDU3MzgwNDc4Myw3NDIwMzkwMTIsMjUzMTA2NzQ1MywyNTY0MDMzMzM0LDIzMjg4Mjg5NzEsMjIyNzU3MzAyNCwyOTM1NTY2ODY1LDI3MDAwOTkzNTQsMzAwMTc1NTY1NSwzMTY4OTM3MjI4LDM4Njg1NTI4MDUsMzkwMjU2MzE4Miw0MjAzMTgxMTcxLDQxMDI5Nzc5MTIsMzczNjE2NDkzNywzNTAxNzQxODkwLDMyNjU0Nzg3NTEsMzQzMzcxMjk4MCwxMTA2MDQxNTkxLDEzNDA0NjMxMDAsMTU3Njk3NjYwOSwxNDA4NzQ5MDM0LDIwNDMyMTE0ODMsMjAwOTE5NTQ3MiwxNzA4ODQ4MzMzLDE4MDkwNTQxNTAsODMyODc3MjMxLDEwNjgzNTEzOTYsNzY2OTQ1NDY1LDU5OTc2MjM1NCwxNTk0MTc5ODcsMTI2NDU0NjY0LDM2MTkyOTg3Nyw0NjMxODAxOTAsMjcwOTI2MDg3MSwyOTQzNjgyMzgwLDMxNzgxMDY5NjEsMzAwOTg3OTM4NiwyNTcyNjk3MTk1LDI1Mzg2ODExODQsMjIzNjIyODczMywyMzM2NDM0NTUwLDM1MDk4NzExMzUsMzc0NTM0NTMwMCwzNDQxODUwMzc3LDMyNzQ2NjcyNjYsMzkxMDE2MTk3MSwzODc3MTk4NjQ4LDQxMTA1Njg0ODUsNDIxMTgxODc5OCwyNTk3ODA2NDc2LDI0OTc2MDQ3NDMsMjI2MTA4OTE3OCwyMjk1MTAxMDczLDI3MzM4NTYxNjAsMjkwMjA4Nzg1MSwzMjAyNDM3MDQ2LDI5NjgwMTE0NTMsMzkzNjI5MTI4NCwzODM1MDM2ODk1LDQxMzY0NDA3NzAsNDE2OTQwODIwMSwzNTM1NDg2NDU2LDM3MDI2NjU0NTksMzQ2NzE5MjMwMiwzMjMxNzIyMjEzLDIwNTE1MTg3ODAsMTk1MTMxNzA0NywxNzE2ODkwNDEwLDE3NTA5MDIzMDUsMTExMzgxODM4NCwxMjgyMDUwMDc1LDE1ODQ1MDQ1ODIsMTM1MDA3ODk4OSwxNjg4MTA4NTIsNjc1NTY0NjMsMzcxMDQ5MzMwLDQwNDAxNjc2MSw4NDE3Mzk1OTIsMTAwODkxODU5NSw3NzU1NTA4MTQsNTQwMDgwNzI1LDM5Njk1NjIzNjksMzgwMTMzMjIzNCw0MDM1NDg5MDQ3LDQyNjk5MDc5OTYsMzU2OTI1NTIxMywzNjY5NDYyNTY2LDMzNjY3NTQ2MTksMzMzMjc0MDE0NCwyNjMxMDY1NDMzLDI0NjM4Nzk3NjIsMjE2MDExNzA3MSwyMzk1NTg4Njc2LDI3Njc2NDU1NTcsMjg2ODg5NzQwNiwzMTAyMDExNzQ3LDMwNjkwNDk5NjAsMjAyMDA4NDk3LDMzNzc4MzYyLDI3MDA0MDQ4Nyw1MDQ0NTk0MzYsODc1NDUxMjkzLDk3NTY1ODY0Niw2NzUwMzk2MjcsNjQxMDI1MTUyLDIwODQ3MDQyMzMsMTkxNzUxODU2MiwxNjE1ODYxMjQ3LDE4NTEzMzI4NTIsMTE0NzU1MDY2MSwxMjQ4ODAyNTEwLDE0ODQwMDU4NDMsMTQ1MTA0NDA1Niw5MzMzMDEzNzAsOTY3MzExNzI5LDczMzE1Njk3Miw2MzI5NTM3MDMsMjYwMzg4OTUwLDI1OTY1OTE3LDMyODY3MTgwOCw0OTY5MDYwNTksMTIwNjQ3Nzg1OCwxMjM5NDQzNzUzLDE1NDMyMDg1MDAsMTQ0MTk1MjU3NSwyMTQ0MTYxODA2LDE5MDg2OTQyNzcsMTY3NTU3Nzg4MCwxODQyNzU5NDQzLDM2MTAzNjkyMjYsMzY0NDM3OTU4NSwzNDA4MTE5NTE2LDMzMDc5MTYyNDcsNDAxMTE5MDUwMiwzNzc2NzY3NDY5LDQwNzczODQ0MzIsNDI0NTYxODY4MywyODA5NzcxMTU0LDI4NDI3MzcwNDksMzE0NDM5NjQyMCwzMDQzMTQwNDk1LDI2NzM3MDUxNTAsMjQzODIzNzYyMSwyMjAzMDMyMjMyLDIzNzAyMTM3OTVdKTt0aGlzLl9taXhDb2w9bmV3IFVpbnQ4QXJyYXkoMjU2KTtmb3IobGV0IGU9MDtlPDI1NjtlKyspdGhpcy5fbWl4Q29sW2VdPWU8MTI4P2U8PDE6ZTw8MV4yNzt0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxNik7dGhpcy5idWZmZXJQb3NpdGlvbj0wfV9leHBhbmRLZXkoZSl7KDAsci51bnJlYWNoYWJsZSkoIkNhbm5vdCBjYWxsIGBfZXhwYW5kS2V5YCBvbiB0aGUgYmFzZSBjbGFzcyIpfV9kZWNyeXB0KGUsdCl7bGV0IGEscixuO2NvbnN0IGk9bmV3IFVpbnQ4QXJyYXkoMTYpO2kuc2V0KGUpO2ZvcihsZXQgZT0wLGE9dGhpcy5fa2V5U2l6ZTtlPDE2OysrZSwrK2EpaVtlXV49dFthXTtmb3IobGV0IGU9dGhpcy5fY3ljbGVzT2ZSZXBldGl0aW9uLTE7ZT49MTstLWUpe2E9aVsxM107aVsxM109aVs5XTtpWzldPWlbNV07aVs1XT1pWzFdO2lbMV09YTthPWlbMTRdO3I9aVsxMF07aVsxNF09aVs2XTtpWzEwXT1pWzJdO2lbNl09YTtpWzJdPXI7YT1pWzE1XTtyPWlbMTFdO249aVs3XTtpWzE1XT1pWzNdO2lbMTFdPWE7aVs3XT1yO2lbM109bjtmb3IobGV0IGU9MDtlPDE2OysrZSlpW2VdPXRoaXMuX2ludl9zW2lbZV1dO2ZvcihsZXQgYT0wLHI9MTYqZTthPDE2OysrYSwrK3IpaVthXV49dFtyXTtmb3IobGV0IGU9MDtlPDE2O2UrPTQpe2NvbnN0IHQ9dGhpcy5fbWl4W2lbZV1dLHI9dGhpcy5fbWl4W2lbZSsxXV0sbj10aGlzLl9taXhbaVtlKzJdXSxzPXRoaXMuX21peFtpW2UrM11dO2E9dF5yPj4+OF5yPDwyNF5uPj4+MTZebjw8MTZecz4+PjI0XnM8PDg7aVtlXT1hPj4+MjQmMjU1O2lbZSsxXT1hPj4xNiYyNTU7aVtlKzJdPWE+PjgmMjU1O2lbZSszXT0yNTUmYX19YT1pWzEzXTtpWzEzXT1pWzldO2lbOV09aVs1XTtpWzVdPWlbMV07aVsxXT1hO2E9aVsxNF07cj1pWzEwXTtpWzE0XT1pWzZdO2lbMTBdPWlbMl07aVs2XT1hO2lbMl09cjthPWlbMTVdO3I9aVsxMV07bj1pWzddO2lbMTVdPWlbM107aVsxMV09YTtpWzddPXI7aVszXT1uO2ZvcihsZXQgZT0wO2U8MTY7KytlKXtpW2VdPXRoaXMuX2ludl9zW2lbZV1dO2lbZV1ePXRbZV19cmV0dXJuIGl9X2VuY3J5cHQoZSx0KXtjb25zdCBhPXRoaXMuX3M7bGV0IHIsbixpO2NvbnN0IHM9bmV3IFVpbnQ4QXJyYXkoMTYpO3Muc2V0KGUpO2ZvcihsZXQgZT0wO2U8MTY7KytlKXNbZV1ePXRbZV07Zm9yKGxldCBlPTE7ZTx0aGlzLl9jeWNsZXNPZlJlcGV0aXRpb247ZSsrKXtmb3IobGV0IGU9MDtlPDE2OysrZSlzW2VdPWFbc1tlXV07aT1zWzFdO3NbMV09c1s1XTtzWzVdPXNbOV07c1s5XT1zWzEzXTtzWzEzXT1pO2k9c1syXTtuPXNbNl07c1syXT1zWzEwXTtzWzZdPXNbMTRdO3NbMTBdPWk7c1sxNF09bjtpPXNbM107bj1zWzddO3I9c1sxMV07c1szXT1zWzE1XTtzWzddPWk7c1sxMV09bjtzWzE1XT1yO2ZvcihsZXQgZT0wO2U8MTY7ZSs9NCl7Y29uc3QgdD1zW2UrMF0sYT1zW2UrMV0sbj1zW2UrMl0saT1zW2UrM107cj10XmFebl5pO3NbZSswXV49cl50aGlzLl9taXhDb2xbdF5hXTtzW2UrMV1ePXJedGhpcy5fbWl4Q29sW2Febl07c1tlKzJdXj1yXnRoaXMuX21peENvbFtuXmldO3NbZSszXV49cl50aGlzLl9taXhDb2xbaV50XX1mb3IobGV0IGE9MCxyPTE2KmU7YTwxNjsrK2EsKytyKXNbYV1ePXRbcl19Zm9yKGxldCBlPTA7ZTwxNjsrK2Upc1tlXT1hW3NbZV1dO2k9c1sxXTtzWzFdPXNbNV07c1s1XT1zWzldO3NbOV09c1sxM107c1sxM109aTtpPXNbMl07bj1zWzZdO3NbMl09c1sxMF07c1s2XT1zWzE0XTtzWzEwXT1pO3NbMTRdPW47aT1zWzNdO249c1s3XTtyPXNbMTFdO3NbM109c1sxNV07c1s3XT1pO3NbMTFdPW47c1sxNV09cjtmb3IobGV0IGU9MCxhPXRoaXMuX2tleVNpemU7ZTwxNjsrK2UsKythKXNbZV1ePXRbYV07cmV0dXJuIHN9X2RlY3J5cHRCbG9jazIoZSx0KXtjb25zdCBhPWUubGVuZ3RoO2xldCByPXRoaXMuYnVmZmVyLG49dGhpcy5idWZmZXJQb3NpdGlvbjtjb25zdCBpPVtdO2xldCBzPXRoaXMuaXY7Zm9yKGxldCB0PTA7dDxhOysrdCl7cltuXT1lW3RdOysrbjtpZihuPDE2KWNvbnRpbnVlO2NvbnN0IGE9dGhpcy5fZGVjcnlwdChyLHRoaXMuX2tleSk7Zm9yKGxldCBlPTA7ZTwxNjsrK2UpYVtlXV49c1tlXTtzPXI7aS5wdXNoKGEpO3I9bmV3IFVpbnQ4QXJyYXkoMTYpO249MH10aGlzLmJ1ZmZlcj1yO3RoaXMuYnVmZmVyTGVuZ3RoPW47dGhpcy5pdj1zO2lmKDA9PT1pLmxlbmd0aClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7bGV0IG89MTYqaS5sZW5ndGg7aWYodCl7Y29uc3QgZT1pLmF0KC0xKTtsZXQgdD1lWzE1XTtpZih0PD0xNil7Zm9yKGxldCBhPTE1LHI9MTYtdDthPj1yOy0tYSlpZihlW2FdIT09dCl7dD0wO2JyZWFrfW8tPXQ7aVtpLmxlbmd0aC0xXT1lLnN1YmFycmF5KDAsMTYtdCl9fWNvbnN0IGM9bmV3IFVpbnQ4QXJyYXkobyk7Zm9yKGxldCBlPTAsdD0wLGE9aS5sZW5ndGg7ZTxhOysrZSx0Kz0xNiljLnNldChpW2VdLHQpO3JldHVybiBjfWRlY3J5cHRCbG9jayhlLHQsYT1udWxsKXtjb25zdCByPWUubGVuZ3RoLG49dGhpcy5idWZmZXI7bGV0IGk9dGhpcy5idWZmZXJQb3NpdGlvbjtpZihhKXRoaXMuaXY9YTtlbHNle2ZvcihsZXQgdD0wO2k8MTYmJnQ8cjsrK3QsKytpKW5baV09ZVt0XTtpZihpPDE2KXt0aGlzLmJ1ZmZlckxlbmd0aD1pO3JldHVybiBuZXcgVWludDhBcnJheSgwKX10aGlzLml2PW47ZT1lLnN1YmFycmF5KDE2KX10aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxNik7dGhpcy5idWZmZXJMZW5ndGg9MDt0aGlzLmRlY3J5cHRCbG9jaz10aGlzLl9kZWNyeXB0QmxvY2syO3JldHVybiB0aGlzLmRlY3J5cHRCbG9jayhlLHQpfWVuY3J5cHQoZSx0KXtjb25zdCBhPWUubGVuZ3RoO2xldCByPXRoaXMuYnVmZmVyLG49dGhpcy5idWZmZXJQb3NpdGlvbjtjb25zdCBpPVtdO3R8fCh0PW5ldyBVaW50OEFycmF5KDE2KSk7Zm9yKGxldCBzPTA7czxhOysrcyl7cltuXT1lW3NdOysrbjtpZihuPDE2KWNvbnRpbnVlO2ZvcihsZXQgZT0wO2U8MTY7KytlKXJbZV1ePXRbZV07Y29uc3QgYT10aGlzLl9lbmNyeXB0KHIsdGhpcy5fa2V5KTt0PWE7aS5wdXNoKGEpO3I9bmV3IFVpbnQ4QXJyYXkoMTYpO249MH10aGlzLmJ1ZmZlcj1yO3RoaXMuYnVmZmVyTGVuZ3RoPW47dGhpcy5pdj10O2lmKDA9PT1pLmxlbmd0aClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7Y29uc3Qgcz0xNippLmxlbmd0aCxvPW5ldyBVaW50OEFycmF5KHMpO2ZvcihsZXQgZT0wLHQ9MCxhPWkubGVuZ3RoO2U8YTsrK2UsdCs9MTYpby5zZXQoaVtlXSx0KTtyZXR1cm4gb319Y2xhc3MgQUVTMTI4Q2lwaGVyIGV4dGVuZHMgQUVTQmFzZUNpcGhlcntjb25zdHJ1Y3RvcihlKXtzdXBlcigpO3RoaXMuX2N5Y2xlc09mUmVwZXRpdGlvbj0xMDt0aGlzLl9rZXlTaXplPTE2MDt0aGlzLl9yY29uPW5ldyBVaW50OEFycmF5KFsxNDEsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTQsMTA4LDIxNiwxNzEsNzcsMTU0LDQ3LDk0LDE4OCw5OSwxOTgsMTUxLDUzLDEwNiwyMTIsMTc5LDEyNSwyNTAsMjM5LDE5NywxNDUsNTcsMTE0LDIyOCwyMTEsMTg5LDk3LDE5NCwxNTksMzcsNzQsMTQ4LDUxLDEwMiwyMDQsMTMxLDI5LDU4LDExNiwyMzIsMjAzLDE0MSwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NCwxMDgsMjE2LDE3MSw3NywxNTQsNDcsOTQsMTg4LDk5LDE5OCwxNTEsNTMsMTA2LDIxMiwxNzksMTI1LDI1MCwyMzksMTk3LDE0NSw1NywxMTQsMjI4LDIxMSwxODksOTcsMTk0LDE1OSwzNyw3NCwxNDgsNTEsMTAyLDIwNCwxMzEsMjksNTgsMTE2LDIzMiwyMDMsMTQxLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0LDEwOCwyMTYsMTcxLDc3LDE1NCw0Nyw5NCwxODgsOTksMTk4LDE1MSw1MywxMDYsMjEyLDE3OSwxMjUsMjUwLDIzOSwxOTcsMTQ1LDU3LDExNCwyMjgsMjExLDE4OSw5NywxOTQsMTU5LDM3LDc0LDE0OCw1MSwxMDIsMjA0LDEzMSwyOSw1OCwxMTYsMjMyLDIwMywxNDEsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTQsMTA4LDIxNiwxNzEsNzcsMTU0LDQ3LDk0LDE4OCw5OSwxOTgsMTUxLDUzLDEwNiwyMTIsMTc5LDEyNSwyNTAsMjM5LDE5NywxNDUsNTcsMTE0LDIyOCwyMTEsMTg5LDk3LDE5NCwxNTksMzcsNzQsMTQ4LDUxLDEwMiwyMDQsMTMxLDI5LDU4LDExNiwyMzIsMjAzLDE0MSwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NCwxMDgsMjE2LDE3MSw3NywxNTQsNDcsOTQsMTg4LDk5LDE5OCwxNTEsNTMsMTA2LDIxMiwxNzksMTI1LDI1MCwyMzksMTk3LDE0NSw1NywxMTQsMjI4LDIxMSwxODksOTcsMTk0LDE1OSwzNyw3NCwxNDgsNTEsMTAyLDIwNCwxMzEsMjksNTgsMTE2LDIzMiwyMDMsMTQxXSk7dGhpcy5fa2V5PXRoaXMuX2V4cGFuZEtleShlKX1fZXhwYW5kS2V5KGUpe2NvbnN0IHQ9dGhpcy5fcyxhPXRoaXMuX3Jjb24scj1uZXcgVWludDhBcnJheSgxNzYpO3Iuc2V0KGUpO2ZvcihsZXQgZT0xNixuPTE7ZTwxNzY7KytuKXtsZXQgaT1yW2UtM10scz1yW2UtMl0sbz1yW2UtMV0sYz1yW2UtNF07aT10W2ldO3M9dFtzXTtvPXRbb107Yz10W2NdO2lePWFbbl07Zm9yKGxldCB0PTA7dDw0OysrdCl7cltlXT1pXj1yW2UtMTZdO2UrKztyW2VdPXNePXJbZS0xNl07ZSsrO3JbZV09b149cltlLTE2XTtlKys7cltlXT1jXj1yW2UtMTZdO2UrK319cmV0dXJuIHJ9fXQuQUVTMTI4Q2lwaGVyPUFFUzEyOENpcGhlcjtjbGFzcyBBRVMyNTZDaXBoZXIgZXh0ZW5kcyBBRVNCYXNlQ2lwaGVye2NvbnN0cnVjdG9yKGUpe3N1cGVyKCk7dGhpcy5fY3ljbGVzT2ZSZXBldGl0aW9uPTE0O3RoaXMuX2tleVNpemU9MjI0O3RoaXMuX2tleT10aGlzLl9leHBhbmRLZXkoZSl9X2V4cGFuZEtleShlKXtjb25zdCB0PXRoaXMuX3MsYT1uZXcgVWludDhBcnJheSgyNDApO2Euc2V0KGUpO2xldCByLG4saSxzLG89MTtmb3IobGV0IGU9MzIsYz0xO2U8MjQwOysrYyl7aWYoZSUzMj09MTYpe3I9dFtyXTtuPXRbbl07aT10W2ldO3M9dFtzXX1lbHNlIGlmKGUlMzI9PTApe3I9YVtlLTNdO249YVtlLTJdO2k9YVtlLTFdO3M9YVtlLTRdO3I9dFtyXTtuPXRbbl07aT10W2ldO3M9dFtzXTtyXj1vOyhvPDw9MSk+PTI1NiYmKG89MjU1JigyN15vKSl9Zm9yKGxldCB0PTA7dDw0OysrdCl7YVtlXT1yXj1hW2UtMzJdO2UrKzthW2VdPW5ePWFbZS0zMl07ZSsrO2FbZV09aV49YVtlLTMyXTtlKys7YVtlXT1zXj1hW2UtMzJdO2UrK319cmV0dXJuIGF9fXQuQUVTMjU2Q2lwaGVyPUFFUzI1NkNpcGhlcjtjbGFzcyBQREYxN3tjaGVja093bmVyUGFzc3dvcmQoZSx0LGEsbil7Y29uc3QgaT1uZXcgVWludDhBcnJheShlLmxlbmd0aCs1Nik7aS5zZXQoZSwwKTtpLnNldCh0LGUubGVuZ3RoKTtpLnNldChhLGUubGVuZ3RoK3QubGVuZ3RoKTtjb25zdCBzPW8oaSwwLGkubGVuZ3RoKTtyZXR1cm4oMCxyLmlzQXJyYXlFcXVhbCkocyxuKX1jaGVja1VzZXJQYXNzd29yZChlLHQsYSl7Y29uc3Qgbj1uZXcgVWludDhBcnJheShlLmxlbmd0aCs4KTtuLnNldChlLDApO24uc2V0KHQsZS5sZW5ndGgpO2NvbnN0IGk9byhuLDAsbi5sZW5ndGgpO3JldHVybigwLHIuaXNBcnJheUVxdWFsKShpLGEpfWdldE93bmVyS2V5KGUsdCxhLHIpe2NvbnN0IG49bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgrNTYpO24uc2V0KGUsMCk7bi5zZXQodCxlLmxlbmd0aCk7bi5zZXQoYSxlLmxlbmd0aCt0Lmxlbmd0aCk7Y29uc3QgaT1vKG4sMCxuLmxlbmd0aCk7cmV0dXJuIG5ldyBBRVMyNTZDaXBoZXIoaSkuZGVjcnlwdEJsb2NrKHIsITEsbmV3IFVpbnQ4QXJyYXkoMTYpKX1nZXRVc2VyS2V5KGUsdCxhKXtjb25zdCByPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzgpO3Iuc2V0KGUsMCk7ci5zZXQodCxlLmxlbmd0aCk7Y29uc3Qgbj1vKHIsMCxyLmxlbmd0aCk7cmV0dXJuIG5ldyBBRVMyNTZDaXBoZXIobikuZGVjcnlwdEJsb2NrKGEsITEsbmV3IFVpbnQ4QXJyYXkoMTYpKX19dC5QREYxNz1QREYxNztjb25zdCBsPWZ1bmN0aW9uIFBERjIwQ2xvc3VyZSgpe2Z1bmN0aW9uIGNhbGN1bGF0ZVBERjIwSGFzaChlLHQsYSl7bGV0IHI9byh0LDAsdC5sZW5ndGgpLnN1YmFycmF5KDAsMzIpLG49WzBdLGk9MDtmb3IoO2k8NjR8fG4uYXQoLTEpPmktMzI7KXtjb25zdCB0PWUubGVuZ3RoK3IubGVuZ3RoK2EubGVuZ3RoLHM9bmV3IFVpbnQ4QXJyYXkodCk7bGV0IGw9MDtzLnNldChlLGwpO2wrPWUubGVuZ3RoO3Muc2V0KHIsbCk7bCs9ci5sZW5ndGg7cy5zZXQoYSxsKTtjb25zdCBoPW5ldyBVaW50OEFycmF5KDY0KnQpO2ZvcihsZXQgZT0wLGE9MDtlPDY0O2UrKyxhKz10KWguc2V0KHMsYSk7bj1uZXcgQUVTMTI4Q2lwaGVyKHIuc3ViYXJyYXkoMCwxNikpLmVuY3J5cHQoaCxyLnN1YmFycmF5KDE2LDMyKSk7Y29uc3QgdT1uLnNsaWNlKDAsMTYpLnJlZHVjZSgoKGUsdCk9PmUrdCksMCklMzswPT09dT9yPW8obiwwLG4ubGVuZ3RoKToxPT09dT9yPWNhbGN1bGF0ZVNIQTM4NChuLDAsbi5sZW5ndGgpOjI9PT11JiYocj1jKG4sMCxuLmxlbmd0aCkpO2krK31yZXR1cm4gci5zdWJhcnJheSgwLDMyKX1yZXR1cm4gY2xhc3MgUERGMjB7aGFzaChlLHQsYSl7cmV0dXJuIGNhbGN1bGF0ZVBERjIwSGFzaChlLHQsYSl9Y2hlY2tPd25lclBhc3N3b3JkKGUsdCxhLG4pe2NvbnN0IGk9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgrNTYpO2kuc2V0KGUsMCk7aS5zZXQodCxlLmxlbmd0aCk7aS5zZXQoYSxlLmxlbmd0aCt0Lmxlbmd0aCk7Y29uc3Qgcz1jYWxjdWxhdGVQREYyMEhhc2goZSxpLGEpO3JldHVybigwLHIuaXNBcnJheUVxdWFsKShzLG4pfWNoZWNrVXNlclBhc3N3b3JkKGUsdCxhKXtjb25zdCBuPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzgpO24uc2V0KGUsMCk7bi5zZXQodCxlLmxlbmd0aCk7Y29uc3QgaT1jYWxjdWxhdGVQREYyMEhhc2goZSxuLFtdKTtyZXR1cm4oMCxyLmlzQXJyYXlFcXVhbCkoaSxhKX1nZXRPd25lcktleShlLHQsYSxyKXtjb25zdCBuPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzU2KTtuLnNldChlLDApO24uc2V0KHQsZS5sZW5ndGgpO24uc2V0KGEsZS5sZW5ndGgrdC5sZW5ndGgpO2NvbnN0IGk9Y2FsY3VsYXRlUERGMjBIYXNoKGUsbixhKTtyZXR1cm4gbmV3IEFFUzI1NkNpcGhlcihpKS5kZWNyeXB0QmxvY2sociwhMSxuZXcgVWludDhBcnJheSgxNikpfWdldFVzZXJLZXkoZSx0LGEpe2NvbnN0IHI9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgrOCk7ci5zZXQoZSwwKTtyLnNldCh0LGUubGVuZ3RoKTtjb25zdCBuPWNhbGN1bGF0ZVBERjIwSGFzaChlLHIsW10pO3JldHVybiBuZXcgQUVTMjU2Q2lwaGVyKG4pLmRlY3J5cHRCbG9jayhhLCExLG5ldyBVaW50OEFycmF5KDE2KSl9fX0oKTt0LlBERjIwPWw7Y2xhc3MgQ2lwaGVyVHJhbnNmb3Jte2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5TdHJpbmdDaXBoZXJDb25zdHJ1Y3Rvcj1lO3RoaXMuU3RyZWFtQ2lwaGVyQ29uc3RydWN0b3I9dH1jcmVhdGVTdHJlYW0oZSx0KXtjb25zdCBhPW5ldyB0aGlzLlN0cmVhbUNpcGhlckNvbnN0cnVjdG9yO3JldHVybiBuZXcgaS5EZWNyeXB0U3RyZWFtKGUsdCwoZnVuY3Rpb24gY2lwaGVyVHJhbnNmb3JtRGVjcnlwdFN0cmVhbShlLHQpe3JldHVybiBhLmRlY3J5cHRCbG9jayhlLHQpfSkpfWRlY3J5cHRTdHJpbmcoZSl7Y29uc3QgdD1uZXcgdGhpcy5TdHJpbmdDaXBoZXJDb25zdHJ1Y3RvcjtsZXQgYT0oMCxyLnN0cmluZ1RvQnl0ZXMpKGUpO2E9dC5kZWNyeXB0QmxvY2soYSwhMCk7cmV0dXJuKDAsci5ieXRlc1RvU3RyaW5nKShhKX1lbmNyeXB0U3RyaW5nKGUpe2NvbnN0IHQ9bmV3IHRoaXMuU3RyaW5nQ2lwaGVyQ29uc3RydWN0b3I7aWYodCBpbnN0YW5jZW9mIEFFU0Jhc2VDaXBoZXIpe2NvbnN0IGE9MTYtZS5sZW5ndGglMTY7ZSs9U3RyaW5nLmZyb21DaGFyQ29kZShhKS5yZXBlYXQoYSk7Y29uc3Qgbj1uZXcgVWludDhBcnJheSgxNik7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBjcnlwdG8pY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuKTtlbHNlIGZvcihsZXQgZT0wO2U8MTY7ZSsrKW5bZV09TWF0aC5mbG9vcigyNTYqTWF0aC5yYW5kb20oKSk7bGV0IGk9KDAsci5zdHJpbmdUb0J5dGVzKShlKTtpPXQuZW5jcnlwdChpLG4pO2NvbnN0IHM9bmV3IFVpbnQ4QXJyYXkoMTYraS5sZW5ndGgpO3Muc2V0KG4pO3Muc2V0KGksMTYpO3JldHVybigwLHIuYnl0ZXNUb1N0cmluZykocyl9bGV0IGE9KDAsci5zdHJpbmdUb0J5dGVzKShlKTthPXQuZW5jcnlwdChhKTtyZXR1cm4oMCxyLmJ5dGVzVG9TdHJpbmcpKGEpfX1jb25zdCBoPWZ1bmN0aW9uIENpcGhlclRyYW5zZm9ybUZhY3RvcnlDbG9zdXJlKCl7Y29uc3QgZT1uZXcgVWludDhBcnJheShbNDAsMTkxLDc4LDk0LDc4LDExNywxMzgsNjUsMTAwLDAsNzgsODYsMjU1LDI1MCwxLDgsNDYsNDYsMCwxODIsMjA4LDEwNCw2MiwxMjgsNDcsMTIsMTY5LDI1NCwxMDAsODMsMTA1LDEyMl0pO2Z1bmN0aW9uIHByZXBhcmVLZXlEYXRhKHQsYSxyLG4saSxvLGMsbCl7Y29uc3QgaD00MCtyLmxlbmd0aCt0Lmxlbmd0aCx1PW5ldyBVaW50OEFycmF5KGgpO2xldCBkLGYsZz0wO2lmKGEpe2Y9TWF0aC5taW4oMzIsYS5sZW5ndGgpO2Zvcig7ZzxmOysrZyl1W2ddPWFbZ119ZD0wO2Zvcig7ZzwzMjspdVtnKytdPWVbZCsrXTtmb3IoZD0wLGY9ci5sZW5ndGg7ZDxmOysrZCl1W2crK109cltkXTt1W2crK109MjU1Jmk7dVtnKytdPWk+PjgmMjU1O3VbZysrXT1pPj4xNiYyNTU7dVtnKytdPWk+Pj4yNCYyNTU7Zm9yKGQ9MCxmPXQubGVuZ3RoO2Q8ZjsrK2QpdVtnKytdPXRbZF07aWYobz49NCYmIWwpe3VbZysrXT0yNTU7dVtnKytdPTI1NTt1W2crK109MjU1O3VbZysrXT0yNTV9bGV0IHA9cyh1LDAsZyk7Y29uc3QgbT1jPj4zO2lmKG8+PTMpZm9yKGQ9MDtkPDUwOysrZClwPXMocCwwLG0pO2NvbnN0IGI9cC5zdWJhcnJheSgwLG0pO2xldCB5LHc7aWYobz49Myl7Zm9yKGc9MDtnPDMyOysrZyl1W2ddPWVbZ107Zm9yKGQ9MCxmPXQubGVuZ3RoO2Q8ZjsrK2QpdVtnKytdPXRbZF07eT1uZXcgQVJDRm91ckNpcGhlcihiKTt3PXkuZW5jcnlwdEJsb2NrKHModSwwLGcpKTtmPWIubGVuZ3RoO2NvbnN0IGE9bmV3IFVpbnQ4QXJyYXkoZik7Zm9yKGQ9MTtkPD0xOTsrK2Qpe2ZvcihsZXQgZT0wO2U8ZjsrK2UpYVtlXT1iW2VdXmQ7eT1uZXcgQVJDRm91ckNpcGhlcihhKTt3PXkuZW5jcnlwdEJsb2NrKHcpfWZvcihkPTAsZj13Lmxlbmd0aDtkPGY7KytkKWlmKG5bZF0hPT13W2RdKXJldHVybiBudWxsfWVsc2V7eT1uZXcgQVJDRm91ckNpcGhlcihiKTt3PXkuZW5jcnlwdEJsb2NrKGUpO2ZvcihkPTAsZj13Lmxlbmd0aDtkPGY7KytkKWlmKG5bZF0hPT13W2RdKXJldHVybiBudWxsfXJldHVybiBifWNvbnN0IHQ9bi5OYW1lLmdldCgiSWRlbnRpdHkiKTtmdW5jdGlvbiBidWlsZE9iamVjdEtleShlLHQsYSxyPSExKXtjb25zdCBuPW5ldyBVaW50OEFycmF5KGEubGVuZ3RoKzkpLGk9YS5sZW5ndGg7bGV0IG87Zm9yKG89MDtvPGk7KytvKW5bb109YVtvXTtuW28rK109MjU1JmU7bltvKytdPWU+PjgmMjU1O25bbysrXT1lPj4xNiYyNTU7bltvKytdPTI1NSZ0O25bbysrXT10Pj44JjI1NTtpZihyKXtuW28rK109MTE1O25bbysrXT02NTtuW28rK109MTA4O25bbysrXT04NH1yZXR1cm4gcyhuLDAsbykuc3ViYXJyYXkoMCxNYXRoLm1pbihhLmxlbmd0aCs1LDE2KSl9ZnVuY3Rpb24gYnVpbGRDaXBoZXJDb25zdHJ1Y3RvcihlLHQsYSxpLHMpe2lmKCEodCBpbnN0YW5jZW9mIG4uTmFtZSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkludmFsaWQgY3J5cHQgZmlsdGVyIG5hbWUuIik7Y29uc3Qgbz1lLmdldCh0Lm5hbWUpO2xldCBjO251bGwhPW8mJihjPW8uZ2V0KCJDRk0iKSk7aWYoIWN8fCJOb25lIj09PWMubmFtZSlyZXR1cm4gZnVuY3Rpb24gY2lwaGVyVHJhbnNmb3JtRmFjdG9yeUJ1aWxkQ2lwaGVyQ29uc3RydWN0b3JOb25lKCl7cmV0dXJuIG5ldyBOdWxsQ2lwaGVyfTtpZigiVjIiPT09Yy5uYW1lKXJldHVybiBmdW5jdGlvbiBjaXBoZXJUcmFuc2Zvcm1GYWN0b3J5QnVpbGRDaXBoZXJDb25zdHJ1Y3RvclYyKCl7cmV0dXJuIG5ldyBBUkNGb3VyQ2lwaGVyKGJ1aWxkT2JqZWN0S2V5KGEsaSxzLCExKSl9O2lmKCJBRVNWMiI9PT1jLm5hbWUpcmV0dXJuIGZ1bmN0aW9uIGNpcGhlclRyYW5zZm9ybUZhY3RvcnlCdWlsZENpcGhlckNvbnN0cnVjdG9yQUVTVjIoKXtyZXR1cm4gbmV3IEFFUzEyOENpcGhlcihidWlsZE9iamVjdEtleShhLGkscywhMCkpfTtpZigiQUVTVjMiPT09Yy5uYW1lKXJldHVybiBmdW5jdGlvbiBjaXBoZXJUcmFuc2Zvcm1GYWN0b3J5QnVpbGRDaXBoZXJDb25zdHJ1Y3RvckFFU1YzKCl7cmV0dXJuIG5ldyBBRVMyNTZDaXBoZXIocyl9O3Rocm93IG5ldyByLkZvcm1hdEVycm9yKCJVbmtub3duIGNyeXB0byBtZXRob2QiKX1yZXR1cm4gY2xhc3MgQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeXtjb25zdHJ1Y3RvcihhLGksbyl7Y29uc3QgYz1hLmdldCgiRmlsdGVyIik7aWYoISgwLG4uaXNOYW1lKShjLCJTdGFuZGFyZCIpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJ1bmtub3duIGVuY3J5cHRpb24gbWV0aG9kIik7dGhpcy5maWx0ZXJOYW1lPWMubmFtZTt0aGlzLmRpY3Q9YTtjb25zdCBoPWEuZ2V0KCJWIik7aWYoIU51bWJlci5pc0ludGVnZXIoaCl8fDEhPT1oJiYyIT09aCYmNCE9PWgmJjUhPT1oKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJ1bnN1cHBvcnRlZCBlbmNyeXB0aW9uIGFsZ29yaXRobSIpO3RoaXMuYWxnb3JpdGhtPWg7bGV0IHU9YS5nZXQoIkxlbmd0aCIpO2lmKCF1KWlmKGg8PTMpdT00MDtlbHNle2NvbnN0IGU9YS5nZXQoIkNGIiksdD1hLmdldCgiU3RtRiIpO2lmKGUgaW5zdGFuY2VvZiBuLkRpY3QmJnQgaW5zdGFuY2VvZiBuLk5hbWUpe2Uuc3VwcHJlc3NFbmNyeXB0aW9uPSEwO2NvbnN0IGE9ZS5nZXQodC5uYW1lKTt1PWEmJmEuZ2V0KCJMZW5ndGgiKXx8MTI4O3U8NDAmJih1PDw9Myl9fWlmKCFOdW1iZXIuaXNJbnRlZ2VyKHUpfHx1PDQwfHx1JTghPTApdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoImludmFsaWQga2V5IGxlbmd0aCIpO2NvbnN0IGQ9KDAsci5zdHJpbmdUb0J5dGVzKShhLmdldCgiTyIpKS5zdWJhcnJheSgwLDMyKSxmPSgwLHIuc3RyaW5nVG9CeXRlcykoYS5nZXQoIlUiKSkuc3ViYXJyYXkoMCwzMiksZz1hLmdldCgiUCIpLHA9YS5nZXQoIlIiKSxtPSg0PT09aHx8NT09PWgpJiYhMSE9PWEuZ2V0KCJFbmNyeXB0TWV0YWRhdGEiKTt0aGlzLmVuY3J5cHRNZXRhZGF0YT1tO2NvbnN0IGI9KDAsci5zdHJpbmdUb0J5dGVzKShpKTtsZXQgeSx3O2lmKG8pe2lmKDY9PT1wKXRyeXtvPSgwLHIudXRmOFN0cmluZ1RvU3RyaW5nKShvKX1jYXRjaChlKXsoMCxyLndhcm4pKCJDaXBoZXJUcmFuc2Zvcm1GYWN0b3J5OiBVbmFibGUgdG8gY29udmVydCBVVEY4IGVuY29kZWQgcGFzc3dvcmQuIil9eT0oMCxyLnN0cmluZ1RvQnl0ZXMpKG8pfWlmKDUhPT1oKXc9cHJlcGFyZUtleURhdGEoYix5LGQsZixnLHAsdSxtKTtlbHNle2NvbnN0IGU9KDAsci5zdHJpbmdUb0J5dGVzKShhLmdldCgiTyIpKS5zdWJhcnJheSgzMiw0MCksdD0oMCxyLnN0cmluZ1RvQnl0ZXMpKGEuZ2V0KCJPIikpLnN1YmFycmF5KDQwLDQ4KSxuPSgwLHIuc3RyaW5nVG9CeXRlcykoYS5nZXQoIlUiKSkuc3ViYXJyYXkoMCw0OCksaT0oMCxyLnN0cmluZ1RvQnl0ZXMpKGEuZ2V0KCJVIikpLnN1YmFycmF5KDMyLDQwKSxzPSgwLHIuc3RyaW5nVG9CeXRlcykoYS5nZXQoIlUiKSkuc3ViYXJyYXkoNDAsNDgpLG89KDAsci5zdHJpbmdUb0J5dGVzKShhLmdldCgiT0UiKSksYz0oMCxyLnN0cmluZ1RvQnl0ZXMpKGEuZ2V0KCJVRSIpKTsoMCxyLnN0cmluZ1RvQnl0ZXMpKGEuZ2V0KCJQZXJtcyIpKTt3PWZ1bmN0aW9uIGNyZWF0ZUVuY3J5cHRpb25LZXkyMChlLHQsYSxyLG4saSxzLG8sYyxoLHUsZCl7aWYodCl7Y29uc3QgZT1NYXRoLm1pbigxMjcsdC5sZW5ndGgpO3Q9dC5zdWJhcnJheSgwLGUpfWVsc2UgdD1bXTtsZXQgZjtmPTY9PT1lP25ldyBsOm5ldyBQREYxNztyZXR1cm4gZi5jaGVja1VzZXJQYXNzd29yZCh0LG8scyk/Zi5nZXRVc2VyS2V5KHQsYyx1KTp0Lmxlbmd0aCYmZi5jaGVja093bmVyUGFzc3dvcmQodCxyLGksYSk/Zi5nZXRPd25lcktleSh0LG4saSxoKTpudWxsfShwLHksZCxlLHQsbixmLGkscyxvLGMpfWlmKCF3JiYhbyl0aHJvdyBuZXcgci5QYXNzd29yZEV4Y2VwdGlvbigiTm8gcGFzc3dvcmQgZ2l2ZW4iLHIuUGFzc3dvcmRSZXNwb25zZXMuTkVFRF9QQVNTV09SRCk7aWYoIXcmJm8pe2NvbnN0IHQ9ZnVuY3Rpb24gZGVjb2RlVXNlclBhc3N3b3JkKHQsYSxyLG4pe2NvbnN0IGk9bmV3IFVpbnQ4QXJyYXkoMzIpO2xldCBvPTA7Y29uc3QgYz1NYXRoLm1pbigzMix0Lmxlbmd0aCk7Zm9yKDtvPGM7KytvKWlbb109dFtvXTtsZXQgbD0wO2Zvcig7bzwzMjspaVtvKytdPWVbbCsrXTtsZXQgaD1zKGksMCxvKTtjb25zdCB1PW4+PjM7aWYocj49Mylmb3IobD0wO2w8NTA7KytsKWg9cyhoLDAsaC5sZW5ndGgpO2xldCBkLGY7aWYocj49Myl7Zj1hO2NvbnN0IGU9bmV3IFVpbnQ4QXJyYXkodSk7Zm9yKGw9MTk7bD49MDtsLS0pe2ZvcihsZXQgdD0wO3Q8dTsrK3QpZVt0XT1oW3RdXmw7ZD1uZXcgQVJDRm91ckNpcGhlcihlKTtmPWQuZW5jcnlwdEJsb2NrKGYpfX1lbHNle2Q9bmV3IEFSQ0ZvdXJDaXBoZXIoaC5zdWJhcnJheSgwLHUpKTtmPWQuZW5jcnlwdEJsb2NrKGEpfXJldHVybiBmfSh5LGQscCx1KTt3PXByZXBhcmVLZXlEYXRhKGIsdCxkLGYsZyxwLHUsbSl9aWYoIXcpdGhyb3cgbmV3IHIuUGFzc3dvcmRFeGNlcHRpb24oIkluY29ycmVjdCBQYXNzd29yZCIsci5QYXNzd29yZFJlc3BvbnNlcy5JTkNPUlJFQ1RfUEFTU1dPUkQpO3RoaXMuZW5jcnlwdGlvbktleT13O2lmKGg+PTQpe2NvbnN0IGU9YS5nZXQoIkNGIik7ZSBpbnN0YW5jZW9mIG4uRGljdCYmKGUuc3VwcHJlc3NFbmNyeXB0aW9uPSEwKTt0aGlzLmNmPWU7dGhpcy5zdG1mPWEuZ2V0KCJTdG1GIil8fHQ7dGhpcy5zdHJmPWEuZ2V0KCJTdHJGIil8fHQ7dGhpcy5lZmY9YS5nZXQoIkVGRiIpfHx0aGlzLnN0bWZ9fWNyZWF0ZUNpcGhlclRyYW5zZm9ybShlLHQpe2lmKDQ9PT10aGlzLmFsZ29yaXRobXx8NT09PXRoaXMuYWxnb3JpdGhtKXJldHVybiBuZXcgQ2lwaGVyVHJhbnNmb3JtKGJ1aWxkQ2lwaGVyQ29uc3RydWN0b3IodGhpcy5jZix0aGlzLnN0cmYsZSx0LHRoaXMuZW5jcnlwdGlvbktleSksYnVpbGRDaXBoZXJDb25zdHJ1Y3Rvcih0aGlzLmNmLHRoaXMuc3RtZixlLHQsdGhpcy5lbmNyeXB0aW9uS2V5KSk7Y29uc3QgYT1idWlsZE9iamVjdEtleShlLHQsdGhpcy5lbmNyeXB0aW9uS2V5LCExKSxyPWZ1bmN0aW9uIGJ1aWxkQ2lwaGVyQ2lwaGVyQ29uc3RydWN0b3IoKXtyZXR1cm4gbmV3IEFSQ0ZvdXJDaXBoZXIoYSl9O3JldHVybiBuZXcgQ2lwaGVyVHJhbnNmb3JtKHIscil9fX0oKTt0LkNpcGhlclRyYW5zZm9ybUZhY3Rvcnk9aH0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkRlY3J5cHRTdHJlYW09dm9pZCAwO3ZhciByPWEoMTcpO2NsYXNzIERlY3J5cHRTdHJlYW0gZXh0ZW5kcyByLkRlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQsYSl7c3VwZXIodCk7dGhpcy5zdHI9ZTt0aGlzLmRpY3Q9ZS5kaWN0O3RoaXMuZGVjcnlwdD1hO3RoaXMubmV4dENodW5rPW51bGw7dGhpcy5pbml0aWFsaXplZD0hMX1yZWFkQmxvY2soKXtsZXQgZTtpZih0aGlzLmluaXRpYWxpemVkKWU9dGhpcy5uZXh0Q2h1bms7ZWxzZXtlPXRoaXMuc3RyLmdldEJ5dGVzKDUxMik7dGhpcy5pbml0aWFsaXplZD0hMH1pZighZXx8MD09PWUubGVuZ3RoKXt0aGlzLmVvZj0hMDtyZXR1cm59dGhpcy5uZXh0Q2h1bms9dGhpcy5zdHIuZ2V0Qnl0ZXMoNTEyKTtjb25zdCB0PXRoaXMubmV4dENodW5rJiZ0aGlzLm5leHRDaHVuay5sZW5ndGg+MDtlPSgwLHRoaXMuZGVjcnlwdCkoZSwhdCk7Y29uc3QgYT10aGlzLmJ1ZmZlckxlbmd0aCxyPWErZS5sZW5ndGg7dGhpcy5lbnN1cmVCdWZmZXIocikuc2V0KGUsYSk7dGhpcy5idWZmZXJMZW5ndGg9cn19dC5EZWNyeXB0U3RyZWFtPURlY3J5cHRTdHJlYW19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5DYXRhbG9nPXZvaWQgMDt2YXIgcj1hKDQpLG49YSgyKSxpPWEoMykscz1hKDY4KSxvPWEoNSksYz1hKDY5KSxsPWEoMTIpLGg9YSg3MCksdT1hKDU3KSxkPWEoNzEpLGY9YSg3Mik7ZnVuY3Rpb24gZmV0Y2hEZXN0aW5hdGlvbihlKXtlIGluc3RhbmNlb2YgaS5EaWN0JiYoZT1lLmdldCgiRCIpKTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lOm51bGx9Y2xhc3MgQ2F0YWxvZ3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMucGRmTWFuYWdlcj1lO3RoaXMueHJlZj10O3RoaXMuX2NhdERpY3Q9dC5nZXRDYXRhbG9nT2JqKCk7aWYoISh0aGlzLl9jYXREaWN0IGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiQ2F0YWxvZyBvYmplY3QgaXMgbm90IGEgZGljdGlvbmFyeS4iKTt0aGlzLnRvcGxldmVsUGFnZXNEaWN0O3RoaXMuX2FjdHVhbE51bVBhZ2VzPW51bGw7dGhpcy5mb250Q2FjaGU9bmV3IGkuUmVmU2V0Q2FjaGU7dGhpcy5idWlsdEluQ01hcENhY2hlPW5ldyBNYXA7dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGU9bmV3IE1hcDt0aGlzLmdsb2JhbEltYWdlQ2FjaGU9bmV3IHUuR2xvYmFsSW1hZ2VDYWNoZTt0aGlzLnBhZ2VLaWRzQ291bnRDYWNoZT1uZXcgaS5SZWZTZXRDYWNoZTt0aGlzLnBhZ2VJbmRleENhY2hlPW5ldyBpLlJlZlNldENhY2hlO3RoaXMubm9uQmxlbmRNb2Rlc1NldD1uZXcgaS5SZWZTZXR9Z2V0IHZlcnNpb24oKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJWZXJzaW9uIik7aWYoZSBpbnN0YW5jZW9mIGkuTmFtZSl7aWYoci5QREZfVkVSU0lPTl9SRUdFWFAudGVzdChlLm5hbWUpKXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJ2ZXJzaW9uIixlLm5hbWUpOygwLG4ud2FybikoYEludmFsaWQgUERGIGNhdGFsb2cgdmVyc2lvbjogJHtlLm5hbWV9YCl9cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInZlcnNpb24iLG51bGwpfWdldCBsYW5nKCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiTGFuZyIpO3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJsYW5nIiwic3RyaW5nIj09dHlwZW9mIGU/KDAsbi5zdHJpbmdUb1BERlN0cmluZykoZSk6bnVsbCl9Z2V0IG5lZWRzUmVuZGVyaW5nKCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiTmVlZHNSZW5kZXJpbmciKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywibmVlZHNSZW5kZXJpbmciLCJib29sZWFuIj09dHlwZW9mIGUmJmUpfWdldCBjb2xsZWN0aW9uKCl7bGV0IGU9bnVsbDt0cnl7Y29uc3QgdD10aGlzLl9jYXREaWN0LmdldCgiQ29sbGVjdGlvbiIpO3QgaW5zdGFuY2VvZiBpLkRpY3QmJnQuc2l6ZT4wJiYoZT10KX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygci5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLG4uaW5mbykoIkNhbm5vdCBmZXRjaCBDb2xsZWN0aW9uIGVudHJ5OyBhc3N1bWluZyBubyBjb2xsZWN0aW9uIGlzIHByZXNlbnQuIil9cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImNvbGxlY3Rpb24iLGUpfWdldCBhY3JvRm9ybSgpe2xldCBlPW51bGw7dHJ5e2NvbnN0IHQ9dGhpcy5fY2F0RGljdC5nZXQoIkFjcm9Gb3JtIik7dCBpbnN0YW5jZW9mIGkuRGljdCYmdC5zaXplPjAmJihlPXQpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiByLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi5pbmZvKSgiQ2Fubm90IGZldGNoIEFjcm9Gb3JtIGVudHJ5OyBhc3N1bWluZyBubyBmb3JtcyBhcmUgcHJlc2VudC4iKX1yZXR1cm4oMCxuLnNoYWRvdykodGhpcywiYWNyb0Zvcm0iLGUpfWdldCBhY3JvRm9ybVJlZigpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXRSYXcoIkFjcm9Gb3JtIik7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImFjcm9Gb3JtUmVmIixlIGluc3RhbmNlb2YgaS5SZWY/ZTpudWxsKX1nZXQgbWV0YWRhdGEoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0UmF3KCJNZXRhZGF0YSIpO2lmKCEoZSBpbnN0YW5jZW9mIGkuUmVmKSlyZXR1cm4oMCxuLnNoYWRvdykodGhpcywibWV0YWRhdGEiLG51bGwpO2xldCB0PW51bGw7dHJ5e2NvbnN0IGE9ISh0aGlzLnhyZWYuZW5jcnlwdCYmdGhpcy54cmVmLmVuY3J5cHQuZW5jcnlwdE1ldGFkYXRhKSxyPXRoaXMueHJlZi5mZXRjaChlLGEpO2lmKHIgaW5zdGFuY2VvZiBvLkJhc2VTdHJlYW0mJnIuZGljdCBpbnN0YW5jZW9mIGkuRGljdCl7Y29uc3QgZT1yLmRpY3QuZ2V0KCJUeXBlIiksYT1yLmRpY3QuZ2V0KCJTdWJ0eXBlIik7aWYoKDAsaS5pc05hbWUpKGUsIk1ldGFkYXRhIikmJigwLGkuaXNOYW1lKShhLCJYTUwiKSl7Y29uc3QgZT0oMCxuLnN0cmluZ1RvVVRGOFN0cmluZykoci5nZXRTdHJpbmcoKSk7ZSYmKHQ9bmV3IGQuTWV0YWRhdGFQYXJzZXIoZSkuc2VyaWFsaXphYmxlKX19fWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiByLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi5pbmZvKShgU2tpcHBpbmcgaW52YWxpZCBNZXRhZGF0YTogIiR7ZX0iLmApfXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJtZXRhZGF0YSIsdCl9Z2V0IG1hcmtJbmZvKCl7bGV0IGU9bnVsbDt0cnl7ZT10aGlzLl9yZWFkTWFya0luZm8oKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygci5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLG4ud2FybikoIlVuYWJsZSB0byByZWFkIG1hcmsgaW5mby4iKX1yZXR1cm4oMCxuLnNoYWRvdykodGhpcywibWFya0luZm8iLGUpfV9yZWFkTWFya0luZm8oKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJNYXJrSW5mbyIpO2lmKCEoZSBpbnN0YW5jZW9mIGkuRGljdCkpcmV0dXJuIG51bGw7Y29uc3QgdD17TWFya2VkOiExLFVzZXJQcm9wZXJ0aWVzOiExLFN1c3BlY3RzOiExfTtmb3IoY29uc3QgYSBpbiB0KXtjb25zdCByPWUuZ2V0KGEpOyJib29sZWFuIj09dHlwZW9mIHImJih0W2FdPXIpfXJldHVybiB0fWdldCBzdHJ1Y3RUcmVlUm9vdCgpe2xldCBlPW51bGw7dHJ5e2U9dGhpcy5fcmVhZFN0cnVjdFRyZWVSb290KCl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIHIuTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxuLndhcm4pKCJVbmFibGUgcmVhZCB0byBzdHJ1Y3RUcmVlUm9vdCBpbmZvLiIpfXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJzdHJ1Y3RUcmVlUm9vdCIsZSl9X3JlYWRTdHJ1Y3RUcmVlUm9vdCgpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIlN0cnVjdFRyZWVSb290Iik7aWYoIShlIGluc3RhbmNlb2YgaS5EaWN0KSlyZXR1cm4gbnVsbDtjb25zdCB0PW5ldyBmLlN0cnVjdFRyZWVSb290KGUpO3QuaW5pdCgpO3JldHVybiB0fWdldCB0b3BsZXZlbFBhZ2VzRGljdCgpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIlBhZ2VzIik7aWYoIShlIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCB0b3AtbGV2ZWwgcGFnZXMgZGljdGlvbmFyeS4iKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywidG9wbGV2ZWxQYWdlc0RpY3QiLGUpfWdldCBkb2N1bWVudE91dGxpbmUoKXtsZXQgZT1udWxsO3RyeXtlPXRoaXMuX3JlYWREb2N1bWVudE91dGxpbmUoKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygci5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLG4ud2FybikoIlVuYWJsZSB0byByZWFkIGRvY3VtZW50IG91dGxpbmUuIil9cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImRvY3VtZW50T3V0bGluZSIsZSl9X3JlYWREb2N1bWVudE91dGxpbmUoKXtsZXQgZT10aGlzLl9jYXREaWN0LmdldCgiT3V0bGluZXMiKTtpZighKGUgaW5zdGFuY2VvZiBpLkRpY3QpKXJldHVybiBudWxsO2U9ZS5nZXRSYXcoIkZpcnN0Iik7aWYoIShlIGluc3RhbmNlb2YgaS5SZWYpKXJldHVybiBudWxsO2NvbnN0IHQ9e2l0ZW1zOltdfSxhPVt7b2JqOmUscGFyZW50OnR9XSxyPW5ldyBpLlJlZlNldDtyLnB1dChlKTtjb25zdCBzPXRoaXMueHJlZixvPW5ldyBVaW50OENsYW1wZWRBcnJheSgzKTtmb3IoO2EubGVuZ3RoPjA7KXtjb25zdCB0PWEuc2hpZnQoKSxjPXMuZmV0Y2hJZlJlZih0Lm9iaik7aWYobnVsbD09PWMpY29udGludWU7aWYoIWMuaGFzKCJUaXRsZSIpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIG91dGxpbmUgaXRlbSBlbmNvdW50ZXJlZC4iKTtjb25zdCBoPXt1cmw6bnVsbCxkZXN0Om51bGwsYWN0aW9uOm51bGx9O0NhdGFsb2cucGFyc2VEZXN0RGljdGlvbmFyeSh7ZGVzdERpY3Q6YyxyZXN1bHRPYmo6aCxkb2NCYXNlVXJsOnRoaXMucGRmTWFuYWdlci5kb2NCYXNlVXJsLGRvY0F0dGFjaG1lbnRzOnRoaXMuYXR0YWNobWVudHN9KTtjb25zdCB1PWMuZ2V0KCJUaXRsZSIpLGQ9Yy5nZXQoIkYiKXx8MCxmPWMuZ2V0QXJyYXkoIkMiKSxnPWMuZ2V0KCJDb3VudCIpO2xldCBwPW87IUFycmF5LmlzQXJyYXkoZil8fDMhPT1mLmxlbmd0aHx8MD09PWZbMF0mJjA9PT1mWzFdJiYwPT09ZlsyXXx8KHA9bC5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYihmLDApKTtjb25zdCBtPXthY3Rpb246aC5hY3Rpb24sYXR0YWNobWVudDpoLmF0dGFjaG1lbnQsZGVzdDpoLmRlc3QsdXJsOmgudXJsLHVuc2FmZVVybDpoLnVuc2FmZVVybCxuZXdXaW5kb3c6aC5uZXdXaW5kb3csc2V0T0NHU3RhdGU6aC5zZXRPQ0dTdGF0ZSx0aXRsZTooMCxuLnN0cmluZ1RvUERGU3RyaW5nKSh1KSxjb2xvcjpwLGNvdW50Ok51bWJlci5pc0ludGVnZXIoZyk/Zzp2b2lkIDAsYm9sZDohISgyJmQpLGl0YWxpYzohISgxJmQpLGl0ZW1zOltdfTt0LnBhcmVudC5pdGVtcy5wdXNoKG0pO2U9Yy5nZXRSYXcoIkZpcnN0Iik7aWYoZSBpbnN0YW5jZW9mIGkuUmVmJiYhci5oYXMoZSkpe2EucHVzaCh7b2JqOmUscGFyZW50Om19KTtyLnB1dChlKX1lPWMuZ2V0UmF3KCJOZXh0Iik7aWYoZSBpbnN0YW5jZW9mIGkuUmVmJiYhci5oYXMoZSkpe2EucHVzaCh7b2JqOmUscGFyZW50OnQucGFyZW50fSk7ci5wdXQoZSl9fXJldHVybiB0Lml0ZW1zLmxlbmd0aD4wP3QuaXRlbXM6bnVsbH1nZXQgcGVybWlzc2lvbnMoKXtsZXQgZT1udWxsO3RyeXtlPXRoaXMuX3JlYWRQZXJtaXNzaW9ucygpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiByLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi53YXJuKSgiVW5hYmxlIHRvIHJlYWQgcGVybWlzc2lvbnMuIil9cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInBlcm1pc3Npb25zIixlKX1fcmVhZFBlcm1pc3Npb25zKCl7Y29uc3QgZT10aGlzLnhyZWYudHJhaWxlci5nZXQoIkVuY3J5cHQiKTtpZighKGUgaW5zdGFuY2VvZiBpLkRpY3QpKXJldHVybiBudWxsO2xldCB0PWUuZ2V0KCJQIik7aWYoIm51bWJlciIhPXR5cGVvZiB0KXJldHVybiBudWxsO3QrPTIqKjMyO2NvbnN0IGE9W107Zm9yKGNvbnN0IGUgaW4gbi5QZXJtaXNzaW9uRmxhZyl7Y29uc3Qgcj1uLlBlcm1pc3Npb25GbGFnW2VdO3QmciYmYS5wdXNoKHIpfXJldHVybiBhfWdldCBvcHRpb25hbENvbnRlbnRDb25maWcoKXtsZXQgZT1udWxsO3RyeXtjb25zdCB0PXRoaXMuX2NhdERpY3QuZ2V0KCJPQ1Byb3BlcnRpZXMiKTtpZighdClyZXR1cm4oMCxuLnNoYWRvdykodGhpcywib3B0aW9uYWxDb250ZW50Q29uZmlnIixudWxsKTtjb25zdCBhPXQuZ2V0KCJEIik7aWYoIWEpcmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIm9wdGlvbmFsQ29udGVudENvbmZpZyIsbnVsbCk7Y29uc3Qgcj10LmdldCgiT0NHcyIpO2lmKCFBcnJheS5pc0FycmF5KHIpKXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJvcHRpb25hbENvbnRlbnRDb25maWciLG51bGwpO2NvbnN0IHM9W10sbz1bXTtmb3IoY29uc3QgZSBvZiByKXtpZighKGUgaW5zdGFuY2VvZiBpLlJlZikpY29udGludWU7by5wdXNoKGUpO2NvbnN0IHQ9dGhpcy54cmVmLmZldGNoSWZSZWYoZSk7cy5wdXNoKHtpZDplLnRvU3RyaW5nKCksbmFtZToic3RyaW5nIj09dHlwZW9mIHQuZ2V0KCJOYW1lIik/KDAsbi5zdHJpbmdUb1BERlN0cmluZykodC5nZXQoIk5hbWUiKSk6bnVsbCxpbnRlbnQ6InN0cmluZyI9PXR5cGVvZiB0LmdldCgiSW50ZW50Iik/KDAsbi5zdHJpbmdUb1BERlN0cmluZykodC5nZXQoIkludGVudCIpKTpudWxsfSl9ZT10aGlzLl9yZWFkT3B0aW9uYWxDb250ZW50Q29uZmlnKGEsbyk7ZS5ncm91cHM9c31jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygci5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLG4ud2FybikoYFVuYWJsZSB0byByZWFkIG9wdGlvbmFsIGNvbnRlbnQgY29uZmlnOiAke2V9YCl9cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIm9wdGlvbmFsQ29udGVudENvbmZpZyIsZSl9X3JlYWRPcHRpb25hbENvbnRlbnRDb25maWcoZSx0KXtmdW5jdGlvbiBwYXJzZU9uT2ZmKGUpe2NvbnN0IGE9W107aWYoQXJyYXkuaXNBcnJheShlKSlmb3IoY29uc3QgciBvZiBlKXIgaW5zdGFuY2VvZiBpLlJlZiYmdC5pbmNsdWRlcyhyKSYmYS5wdXNoKHIudG9TdHJpbmcoKSk7cmV0dXJuIGF9ZnVuY3Rpb24gcGFyc2VPcmRlcihlLGE9MCl7aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIG51bGw7Y29uc3Qgbj1bXTtmb3IoY29uc3QgcyBvZiBlKXtpZihzIGluc3RhbmNlb2YgaS5SZWYmJnQuaW5jbHVkZXMocykpe3IucHV0KHMpO24ucHVzaChzLnRvU3RyaW5nKCkpO2NvbnRpbnVlfWNvbnN0IGU9cGFyc2VOZXN0ZWRPcmRlcihzLGEpO2UmJm4ucHVzaChlKX1pZihhPjApcmV0dXJuIG47Y29uc3Qgcz1bXTtmb3IoY29uc3QgZSBvZiB0KXIuaGFzKGUpfHxzLnB1c2goZS50b1N0cmluZygpKTtzLmxlbmd0aCYmbi5wdXNoKHtuYW1lOm51bGwsb3JkZXI6c30pO3JldHVybiBufWZ1bmN0aW9uIHBhcnNlTmVzdGVkT3JkZXIoZSx0KXtpZigrK3Q+cyl7KDAsbi53YXJuKSgicGFyc2VOZXN0ZWRPcmRlciAtIHJlYWNoZWQgTUFYX05FU1RFRF9MRVZFTFMuIik7cmV0dXJuIG51bGx9Y29uc3Qgcj1hLmZldGNoSWZSZWYoZSk7aWYoIUFycmF5LmlzQXJyYXkocikpcmV0dXJuIG51bGw7Y29uc3QgaT1hLmZldGNoSWZSZWYoclswXSk7aWYoInN0cmluZyIhPXR5cGVvZiBpKXJldHVybiBudWxsO2NvbnN0IG89cGFyc2VPcmRlcihyLnNsaWNlKDEpLHQpO3JldHVybiBvJiZvLmxlbmd0aD97bmFtZTooMCxuLnN0cmluZ1RvUERGU3RyaW5nKShpKSxvcmRlcjpvfTpudWxsfWNvbnN0IGE9dGhpcy54cmVmLHI9bmV3IGkuUmVmU2V0LHM9MTA7cmV0dXJue25hbWU6InN0cmluZyI9PXR5cGVvZiBlLmdldCgiTmFtZSIpPygwLG4uc3RyaW5nVG9QREZTdHJpbmcpKGUuZ2V0KCJOYW1lIikpOm51bGwsY3JlYXRvcjoic3RyaW5nIj09dHlwZW9mIGUuZ2V0KCJDcmVhdG9yIik/KDAsbi5zdHJpbmdUb1BERlN0cmluZykoZS5nZXQoIkNyZWF0b3IiKSk6bnVsbCxiYXNlU3RhdGU6ZS5nZXQoIkJhc2VTdGF0ZSIpaW5zdGFuY2VvZiBpLk5hbWU/ZS5nZXQoIkJhc2VTdGF0ZSIpLm5hbWU6bnVsbCxvbjpwYXJzZU9uT2ZmKGUuZ2V0KCJPTiIpKSxvZmY6cGFyc2VPbk9mZihlLmdldCgiT0ZGIikpLG9yZGVyOnBhcnNlT3JkZXIoZS5nZXQoIk9yZGVyIikpLGdyb3VwczpudWxsfX1zZXRBY3R1YWxOdW1QYWdlcyhlPW51bGwpe3RoaXMuX2FjdHVhbE51bVBhZ2VzPWV9Z2V0IGhhc0FjdHVhbE51bVBhZ2VzKCl7cmV0dXJuIG51bGwhPT10aGlzLl9hY3R1YWxOdW1QYWdlc31nZXQgX3BhZ2VzQ291bnQoKXtjb25zdCBlPXRoaXMudG9wbGV2ZWxQYWdlc0RpY3QuZ2V0KCJDb3VudCIpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGUpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJQYWdlIGNvdW50IGluIHRvcC1sZXZlbCBwYWdlcyBkaWN0aW9uYXJ5IGlzIG5vdCBhbiBpbnRlZ2VyLiIpO3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJfcGFnZXNDb3VudCIsZSl9Z2V0IG51bVBhZ2VzKCl7cmV0dXJuIHRoaXMuaGFzQWN0dWFsTnVtUGFnZXM/dGhpcy5fYWN0dWFsTnVtUGFnZXM6dGhpcy5fcGFnZXNDb3VudH1nZXQgZGVzdGluYXRpb25zKCl7Y29uc3QgZT10aGlzLl9yZWFkRGVzdHMoKSx0PU9iamVjdC5jcmVhdGUobnVsbCk7aWYoZSBpbnN0YW5jZW9mIHMuTmFtZVRyZWUpZm9yKGNvbnN0W2Escl1vZiBlLmdldEFsbCgpKXtjb25zdCBlPWZldGNoRGVzdGluYXRpb24ocik7ZSYmKHRbKDAsbi5zdHJpbmdUb1BERlN0cmluZykoYSldPWUpfWVsc2UgZSBpbnN0YW5jZW9mIGkuRGljdCYmZS5mb3JFYWNoKChmdW5jdGlvbihlLGEpe2NvbnN0IHI9ZmV0Y2hEZXN0aW5hdGlvbihhKTtyJiYodFtlXT1yKX0pKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiZGVzdGluYXRpb25zIix0KX1nZXREZXN0aW5hdGlvbihlKXtjb25zdCB0PXRoaXMuX3JlYWREZXN0cygpO2lmKHQgaW5zdGFuY2VvZiBzLk5hbWVUcmVlKXtjb25zdCBhPWZldGNoRGVzdGluYXRpb24odC5nZXQoZSkpO2lmKGEpcmV0dXJuIGE7Y29uc3Qgcj10aGlzLmRlc3RpbmF0aW9uc1tlXTtpZihyKXsoMCxuLndhcm4pKGBGb3VuZCAiJHtlfSIgYXQgYW4gaW5jb3JyZWN0IHBvc2l0aW9uIGluIHRoZSBOYW1lVHJlZS5gKTtyZXR1cm4gcn19ZWxzZSBpZih0IGluc3RhbmNlb2YgaS5EaWN0KXtjb25zdCBhPWZldGNoRGVzdGluYXRpb24odC5nZXQoZSkpO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9X3JlYWREZXN0cygpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIk5hbWVzIik7cmV0dXJuIGUmJmUuaGFzKCJEZXN0cyIpP25ldyBzLk5hbWVUcmVlKGUuZ2V0UmF3KCJEZXN0cyIpLHRoaXMueHJlZik6dGhpcy5fY2F0RGljdC5oYXMoIkRlc3RzIik/dGhpcy5fY2F0RGljdC5nZXQoIkRlc3RzIik6dm9pZCAwfWdldCBwYWdlTGFiZWxzKCl7bGV0IGU9bnVsbDt0cnl7ZT10aGlzLl9yZWFkUGFnZUxhYmVscygpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiByLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi53YXJuKSgiVW5hYmxlIHRvIHJlYWQgcGFnZSBsYWJlbHMuIil9cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInBhZ2VMYWJlbHMiLGUpfV9yZWFkUGFnZUxhYmVscygpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXRSYXcoIlBhZ2VMYWJlbHMiKTtpZighZSlyZXR1cm4gbnVsbDtjb25zdCB0PW5ldyBBcnJheSh0aGlzLm51bVBhZ2VzKTtsZXQgYT1udWxsLG89IiI7Y29uc3QgYz1uZXcgcy5OdW1iZXJUcmVlKGUsdGhpcy54cmVmKS5nZXRBbGwoKTtsZXQgbD0iIixoPTE7Zm9yKGxldCBlPTAscz10aGlzLm51bVBhZ2VzO2U8cztlKyspe2NvbnN0IHM9Yy5nZXQoZSk7aWYodm9pZCAwIT09cyl7aWYoIShzIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiUGFnZUxhYmVsIGlzIG5vdCBhIGRpY3Rpb25hcnkuIik7aWYocy5oYXMoIlR5cGUiKSYmISgwLGkuaXNOYW1lKShzLmdldCgiVHlwZSIpLCJQYWdlTGFiZWwiKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCB0eXBlIGluIFBhZ2VMYWJlbCBkaWN0aW9uYXJ5LiIpO2lmKHMuaGFzKCJTIikpe2NvbnN0IGU9cy5nZXQoIlMiKTtpZighKGUgaW5zdGFuY2VvZiBpLk5hbWUpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIHN0eWxlIGluIFBhZ2VMYWJlbCBkaWN0aW9uYXJ5LiIpO2E9ZS5uYW1lfWVsc2UgYT1udWxsO2lmKHMuaGFzKCJQIikpe2NvbnN0IGU9cy5nZXQoIlAiKTtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgcHJlZml4IGluIFBhZ2VMYWJlbCBkaWN0aW9uYXJ5LiIpO289KDAsbi5zdHJpbmdUb1BERlN0cmluZykoZSl9ZWxzZSBvPSIiO2lmKHMuaGFzKCJTdCIpKXtjb25zdCBlPXMuZ2V0KCJTdCIpO2lmKCEoTnVtYmVyLmlzSW50ZWdlcihlKSYmZT49MSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgc3RhcnQgaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuIik7aD1lfWVsc2UgaD0xfXN3aXRjaChhKXtjYXNlIkQiOmw9aDticmVhaztjYXNlIlIiOmNhc2UiciI6bD0oMCxyLnRvUm9tYW5OdW1lcmFscykoaCwiciI9PT1hKTticmVhaztjYXNlIkEiOmNhc2UiYSI6Y29uc3QgZT0yNix0PTY1LGk9OTcscz0iYSI9PT1hP2k6dCxvPWgtMTtsPVN0cmluZy5mcm9tQ2hhckNvZGUocytvJWUpLnJlcGVhdChNYXRoLmZsb29yKG8vZSkrMSk7YnJlYWs7ZGVmYXVsdDppZihhKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKGBJbnZhbGlkIHN0eWxlICIke2F9IiBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS5gKTtsPSIifXRbZV09bytsO2grK31yZXR1cm4gdH1nZXQgcGFnZUxheW91dCgpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIlBhZ2VMYXlvdXQiKTtsZXQgdD0iIjtpZihlIGluc3RhbmNlb2YgaS5OYW1lKXN3aXRjaChlLm5hbWUpe2Nhc2UiU2luZ2xlUGFnZSI6Y2FzZSJPbmVDb2x1bW4iOmNhc2UiVHdvQ29sdW1uTGVmdCI6Y2FzZSJUd29Db2x1bW5SaWdodCI6Y2FzZSJUd29QYWdlTGVmdCI6Y2FzZSJUd29QYWdlUmlnaHQiOnQ9ZS5uYW1lfXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJwYWdlTGF5b3V0Iix0KX1nZXQgcGFnZU1vZGUoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJQYWdlTW9kZSIpO2xldCB0PSJVc2VOb25lIjtpZihlIGluc3RhbmNlb2YgaS5OYW1lKXN3aXRjaChlLm5hbWUpe2Nhc2UiVXNlTm9uZSI6Y2FzZSJVc2VPdXRsaW5lcyI6Y2FzZSJVc2VUaHVtYnMiOmNhc2UiRnVsbFNjcmVlbiI6Y2FzZSJVc2VPQyI6Y2FzZSJVc2VBdHRhY2htZW50cyI6dD1lLm5hbWV9cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInBhZ2VNb2RlIix0KX1nZXQgdmlld2VyUHJlZmVyZW5jZXMoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJWaWV3ZXJQcmVmZXJlbmNlcyIpO2lmKCEoZSBpbnN0YW5jZW9mIGkuRGljdCkpcmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInZpZXdlclByZWZlcmVuY2VzIixudWxsKTtsZXQgdD1udWxsO2Zvcihjb25zdCBhIG9mIGUuZ2V0S2V5cygpKXtjb25zdCByPWUuZ2V0KGEpO2xldCBzO3N3aXRjaChhKXtjYXNlIkhpZGVUb29sYmFyIjpjYXNlIkhpZGVNZW51YmFyIjpjYXNlIkhpZGVXaW5kb3dVSSI6Y2FzZSJGaXRXaW5kb3ciOmNhc2UiQ2VudGVyV2luZG93IjpjYXNlIkRpc3BsYXlEb2NUaXRsZSI6Y2FzZSJQaWNrVHJheUJ5UERGU2l6ZSI6ImJvb2xlYW4iPT10eXBlb2YgciYmKHM9cik7YnJlYWs7Y2FzZSJOb25GdWxsU2NyZWVuUGFnZU1vZGUiOmlmKHIgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKHIubmFtZSl7Y2FzZSJVc2VOb25lIjpjYXNlIlVzZU91dGxpbmVzIjpjYXNlIlVzZVRodW1icyI6Y2FzZSJVc2VPQyI6cz1yLm5hbWU7YnJlYWs7ZGVmYXVsdDpzPSJVc2VOb25lIn1icmVhaztjYXNlIkRpcmVjdGlvbiI6aWYociBpbnN0YW5jZW9mIGkuTmFtZSlzd2l0Y2goci5uYW1lKXtjYXNlIkwyUiI6Y2FzZSJSMkwiOnM9ci5uYW1lO2JyZWFrO2RlZmF1bHQ6cz0iTDJSIn1icmVhaztjYXNlIlZpZXdBcmVhIjpjYXNlIlZpZXdDbGlwIjpjYXNlIlByaW50QXJlYSI6Y2FzZSJQcmludENsaXAiOmlmKHIgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKHIubmFtZSl7Y2FzZSJNZWRpYUJveCI6Y2FzZSJDcm9wQm94IjpjYXNlIkJsZWVkQm94IjpjYXNlIlRyaW1Cb3giOmNhc2UiQXJ0Qm94IjpzPXIubmFtZTticmVhaztkZWZhdWx0OnM9IkNyb3BCb3gifWJyZWFrO2Nhc2UiUHJpbnRTY2FsaW5nIjppZihyIGluc3RhbmNlb2YgaS5OYW1lKXN3aXRjaChyLm5hbWUpe2Nhc2UiTm9uZSI6Y2FzZSJBcHBEZWZhdWx0IjpzPXIubmFtZTticmVhaztkZWZhdWx0OnM9IkFwcERlZmF1bHQifWJyZWFrO2Nhc2UiRHVwbGV4IjppZihyIGluc3RhbmNlb2YgaS5OYW1lKXN3aXRjaChyLm5hbWUpe2Nhc2UiU2ltcGxleCI6Y2FzZSJEdXBsZXhGbGlwU2hvcnRFZGdlIjpjYXNlIkR1cGxleEZsaXBMb25nRWRnZSI6cz1yLm5hbWU7YnJlYWs7ZGVmYXVsdDpzPSJOb25lIn1icmVhaztjYXNlIlByaW50UGFnZVJhbmdlIjppZihBcnJheS5pc0FycmF5KHIpJiZyLmxlbmd0aCUyPT0wKXtyLmV2ZXJ5KCgoZSx0LGEpPT5OdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPjAmJigwPT09dHx8ZT49YVt0LTFdKSYmZTw9dGhpcy5udW1QYWdlcykpJiYocz1yKX1icmVhaztjYXNlIk51bUNvcGllcyI6TnVtYmVyLmlzSW50ZWdlcihyKSYmcj4wJiYocz1yKTticmVhaztkZWZhdWx0OigwLG4ud2FybikoYElnbm9yaW5nIG5vbi1zdGFuZGFyZCBrZXkgaW4gVmlld2VyUHJlZmVyZW5jZXM6ICR7YX0uYCk7Y29udGludWV9aWYodm9pZCAwIT09cyl7dHx8KHQ9T2JqZWN0LmNyZWF0ZShudWxsKSk7dFthXT1zfWVsc2UoMCxuLndhcm4pKGBCYWQgdmFsdWUsIGZvciBrZXkgIiR7YX0iLCBpbiBWaWV3ZXJQcmVmZXJlbmNlczogJHtyfS5gKX1yZXR1cm4oMCxuLnNoYWRvdykodGhpcywidmlld2VyUHJlZmVyZW5jZXMiLHQpfWdldCBvcGVuQWN0aW9uKCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiT3BlbkFjdGlvbiIpLHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihlIGluc3RhbmNlb2YgaS5EaWN0KXtjb25zdCBhPW5ldyBpLkRpY3QodGhpcy54cmVmKTthLnNldCgiQSIsZSk7Y29uc3Qgcj17dXJsOm51bGwsZGVzdDpudWxsLGFjdGlvbjpudWxsfTtDYXRhbG9nLnBhcnNlRGVzdERpY3Rpb25hcnkoe2Rlc3REaWN0OmEscmVzdWx0T2JqOnJ9KTtBcnJheS5pc0FycmF5KHIuZGVzdCk/dC5kZXN0PXIuZGVzdDpyLmFjdGlvbiYmKHQuYWN0aW9uPXIuYWN0aW9uKX1lbHNlIEFycmF5LmlzQXJyYXkoZSkmJih0LmRlc3Q9ZSk7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIm9wZW5BY3Rpb24iLCgwLG4ub2JqZWN0U2l6ZSkodCk+MD90Om51bGwpfWdldCBhdHRhY2htZW50cygpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIk5hbWVzIik7bGV0IHQ9bnVsbDtpZihlIGluc3RhbmNlb2YgaS5EaWN0JiZlLmhhcygiRW1iZWRkZWRGaWxlcyIpKXtjb25zdCBhPW5ldyBzLk5hbWVUcmVlKGUuZ2V0UmF3KCJFbWJlZGRlZEZpbGVzIiksdGhpcy54cmVmKTtmb3IoY29uc3RbZSxyXW9mIGEuZ2V0QWxsKCkpe2NvbnN0IGE9bmV3IGguRmlsZVNwZWMocix0aGlzLnhyZWYpO3R8fCh0PU9iamVjdC5jcmVhdGUobnVsbCkpO3RbKDAsbi5zdHJpbmdUb1BERlN0cmluZykoZSldPWEuc2VyaWFsaXphYmxlfX1yZXR1cm4oMCxuLnNoYWRvdykodGhpcywiYXR0YWNobWVudHMiLHQpfWdldCB4ZmFJbWFnZXMoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJOYW1lcyIpO2xldCB0PW51bGw7aWYoZSBpbnN0YW5jZW9mIGkuRGljdCYmZS5oYXMoIlhGQUltYWdlcyIpKXtjb25zdCBhPW5ldyBzLk5hbWVUcmVlKGUuZ2V0UmF3KCJYRkFJbWFnZXMiKSx0aGlzLnhyZWYpO2Zvcihjb25zdFtlLHJdb2YgYS5nZXRBbGwoKSl7dHx8KHQ9bmV3IGkuRGljdCh0aGlzLnhyZWYpKTt0LnNldCgoMCxuLnN0cmluZ1RvUERGU3RyaW5nKShlKSxyKX19cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInhmYUltYWdlcyIsdCl9X2NvbGxlY3RKYXZhU2NyaXB0KCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiTmFtZXMiKTtsZXQgdD1udWxsO2Z1bmN0aW9uIGFwcGVuZElmSmF2YVNjcmlwdERpY3QoZSxhKXtpZighKGEgaW5zdGFuY2VvZiBpLkRpY3QpKXJldHVybjtpZighKDAsaS5pc05hbWUpKGEuZ2V0KCJTIiksIkphdmFTY3JpcHQiKSlyZXR1cm47bGV0IHI9YS5nZXQoIkpTIik7aWYociBpbnN0YW5jZW9mIG8uQmFzZVN0cmVhbSlyPXIuZ2V0U3RyaW5nKCk7ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIHIpcmV0dXJuO251bGw9PT10JiYodD1uZXcgTWFwKTtyPSgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKHIpLnJlcGxhY2UoL1x1MDAwMC9nLCIiKTt0LnNldChlLHIpfWlmKGUgaW5zdGFuY2VvZiBpLkRpY3QmJmUuaGFzKCJKYXZhU2NyaXB0Iikpe2NvbnN0IHQ9bmV3IHMuTmFtZVRyZWUoZS5nZXRSYXcoIkphdmFTY3JpcHQiKSx0aGlzLnhyZWYpO2Zvcihjb25zdFtlLGFdb2YgdC5nZXRBbGwoKSlhcHBlbmRJZkphdmFTY3JpcHREaWN0KCgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKGUpLGEpfWNvbnN0IGE9dGhpcy5fY2F0RGljdC5nZXQoIk9wZW5BY3Rpb24iKTthJiZhcHBlbmRJZkphdmFTY3JpcHREaWN0KCJPcGVuQWN0aW9uIixhKTtyZXR1cm4gdH1nZXQgamF2YVNjcmlwdCgpe2NvbnN0IGU9dGhpcy5fY29sbGVjdEphdmFTY3JpcHQoKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiamF2YVNjcmlwdCIsZT9bLi4uZS52YWx1ZXMoKV06bnVsbCl9Z2V0IGpzQWN0aW9ucygpe2NvbnN0IGU9dGhpcy5fY29sbGVjdEphdmFTY3JpcHQoKTtsZXQgdD0oMCxyLmNvbGxlY3RBY3Rpb25zKSh0aGlzLnhyZWYsdGhpcy5fY2F0RGljdCxuLkRvY3VtZW50QWN0aW9uRXZlbnRUeXBlKTtpZihlKXt0fHwodD1PYmplY3QuY3JlYXRlKG51bGwpKTtmb3IoY29uc3RbYSxyXW9mIGUpYSBpbiB0P3RbYV0ucHVzaChyKTp0W2FdPVtyXX1yZXR1cm4oMCxuLnNoYWRvdykodGhpcywianNBY3Rpb25zIix0KX1hc3luYyBmb250RmFsbGJhY2soZSx0KXtjb25zdCBhPWF3YWl0IFByb21pc2UuYWxsKHRoaXMuZm9udENhY2hlKTtmb3IoY29uc3QgciBvZiBhKWlmKHIubG9hZGVkTmFtZT09PWUpe3IuZmFsbGJhY2sodCk7cmV0dXJufX1hc3luYyBjbGVhbnVwKGU9ITEpeygwLGMuY2xlYXJHbG9iYWxDYWNoZXMpKCk7dGhpcy5nbG9iYWxJbWFnZUNhY2hlLmNsZWFyKGUpO3RoaXMucGFnZUtpZHNDb3VudENhY2hlLmNsZWFyKCk7dGhpcy5wYWdlSW5kZXhDYWNoZS5jbGVhcigpO3RoaXMubm9uQmxlbmRNb2Rlc1NldC5jbGVhcigpO2NvbnN0IHQ9YXdhaXQgUHJvbWlzZS5hbGwodGhpcy5mb250Q2FjaGUpO2Zvcihjb25zdHtkaWN0OmV9b2YgdClkZWxldGUgZS5jYWNoZUtleTt0aGlzLmZvbnRDYWNoZS5jbGVhcigpO3RoaXMuYnVpbHRJbkNNYXBDYWNoZS5jbGVhcigpO3RoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLmNsZWFyKCl9YXN5bmMgZ2V0UGFnZURpY3QoZSl7Y29uc3QgdD1bdGhpcy50b3BsZXZlbFBhZ2VzRGljdF0sYT1uZXcgaS5SZWZTZXQscj10aGlzLl9jYXREaWN0LmdldFJhdygiUGFnZXMiKTtyIGluc3RhbmNlb2YgaS5SZWYmJmEucHV0KHIpO2NvbnN0IHM9dGhpcy54cmVmLG89dGhpcy5wYWdlS2lkc0NvdW50Q2FjaGUsYz10aGlzLnBhZ2VJbmRleENhY2hlO2xldCBsPTA7Zm9yKDt0Lmxlbmd0aDspe2NvbnN0IHI9dC5wb3AoKTtpZihyIGluc3RhbmNlb2YgaS5SZWYpe2NvbnN0IGg9by5nZXQocik7aWYoaD49MCYmbCtoPD1lKXtsKz1oO2NvbnRpbnVlfWlmKGEuaGFzKHIpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJQYWdlcyB0cmVlIGNvbnRhaW5zIGNpcmN1bGFyIHJlZmVyZW5jZS4iKTthLnB1dChyKTtjb25zdCB1PWF3YWl0IHMuZmV0Y2hBc3luYyhyKTtpZih1IGluc3RhbmNlb2YgaS5EaWN0KXtsZXQgdD11LmdldFJhdygiVHlwZSIpO3QgaW5zdGFuY2VvZiBpLlJlZiYmKHQ9YXdhaXQgcy5mZXRjaEFzeW5jKHQpKTtpZigoMCxpLmlzTmFtZSkodCwiUGFnZSIpfHwhdS5oYXMoIktpZHMiKSl7by5oYXMocil8fG8ucHV0KHIsMSk7Yy5oYXMocil8fGMucHV0KHIsbCk7aWYobD09PWUpcmV0dXJuW3Uscl07bCsrO2NvbnRpbnVlfX10LnB1c2godSk7Y29udGludWV9aWYoIShyIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiUGFnZSBkaWN0aW9uYXJ5IGtpZCByZWZlcmVuY2UgcG9pbnRzIHRvIHdyb25nIHR5cGUgb2Ygb2JqZWN0LiIpO2NvbnN0e29iaklkOmh9PXI7bGV0IHU9ci5nZXRSYXcoIkNvdW50Iik7dSBpbnN0YW5jZW9mIGkuUmVmJiYodT1hd2FpdCBzLmZldGNoQXN5bmModSkpO2lmKE51bWJlci5pc0ludGVnZXIodSkmJnU+PTApe2gmJiFvLmhhcyhoKSYmby5wdXQoaCx1KTtpZihsK3U8PWUpe2wrPXU7Y29udGludWV9fWxldCBkPXIuZ2V0UmF3KCJLaWRzIik7ZCBpbnN0YW5jZW9mIGkuUmVmJiYoZD1hd2FpdCBzLmZldGNoQXN5bmMoZCkpO2lmKCFBcnJheS5pc0FycmF5KGQpKXtsZXQgdD1yLmdldFJhdygiVHlwZSIpO3QgaW5zdGFuY2VvZiBpLlJlZiYmKHQ9YXdhaXQgcy5mZXRjaEFzeW5jKHQpKTtpZigoMCxpLmlzTmFtZSkodCwiUGFnZSIpfHwhci5oYXMoIktpZHMiKSl7aWYobD09PWUpcmV0dXJuW3IsbnVsbF07bCsrO2NvbnRpbnVlfXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJQYWdlIGRpY3Rpb25hcnkga2lkcyBvYmplY3QgaXMgbm90IGFuIGFycmF5LiIpfWZvcihsZXQgZT1kLmxlbmd0aC0xO2U+PTA7ZS0tKXQucHVzaChkW2VdKX10aHJvdyBuZXcgRXJyb3IoYFBhZ2UgaW5kZXggJHtlfSBub3QgZm91bmQuYCl9YXN5bmMgZ2V0QWxsUGFnZURpY3RzKGU9ITEpe2NvbnN0IHQ9W3tjdXJyZW50Tm9kZTp0aGlzLnRvcGxldmVsUGFnZXNEaWN0LHBvc0luS2lkczowfV0sYT1uZXcgaS5SZWZTZXQscz10aGlzLl9jYXREaWN0LmdldFJhdygiUGFnZXMiKTtzIGluc3RhbmNlb2YgaS5SZWYmJmEucHV0KHMpO2NvbnN0IG89bmV3IE1hcCxjPXRoaXMueHJlZixsPXRoaXMucGFnZUluZGV4Q2FjaGU7bGV0IGg9MDtmdW5jdGlvbiBhZGRQYWdlRGljdChlLHQpe3QmJiFsLmhhcyh0KSYmbC5wdXQodCxoKTtvLnNldChoKyssW2UsdF0pfWZ1bmN0aW9uIGFkZFBhZ2VFcnJvcih0KXtpZih0IGluc3RhbmNlb2Ygci5YUmVmRW50cnlFeGNlcHRpb24mJiFlKXRocm93IHQ7by5zZXQoaCsrLFt0LG51bGxdKX1mb3IoO3QubGVuZ3RoPjA7KXtjb25zdCBlPXQuYXQoLTEpLHtjdXJyZW50Tm9kZTpyLHBvc0luS2lkczpzfT1lO2xldCBvPXIuZ2V0UmF3KCJLaWRzIik7aWYobyBpbnN0YW5jZW9mIGkuUmVmKXRyeXtvPWF3YWl0IGMuZmV0Y2hBc3luYyhvKX1jYXRjaChlKXthZGRQYWdlRXJyb3IoZSk7YnJlYWt9aWYoIUFycmF5LmlzQXJyYXkobykpe2FkZFBhZ2VFcnJvcihuZXcgbi5Gb3JtYXRFcnJvcigiUGFnZSBkaWN0aW9uYXJ5IGtpZHMgb2JqZWN0IGlzIG5vdCBhbiBhcnJheS4iKSk7YnJlYWt9aWYocz49by5sZW5ndGgpe3QucG9wKCk7Y29udGludWV9Y29uc3QgbD1vW3NdO2xldCBoO2lmKGwgaW5zdGFuY2VvZiBpLlJlZil7aWYoYS5oYXMobCkpe2FkZFBhZ2VFcnJvcihuZXcgbi5Gb3JtYXRFcnJvcigiUGFnZXMgdHJlZSBjb250YWlucyBjaXJjdWxhciByZWZlcmVuY2UuIikpO2JyZWFrfWEucHV0KGwpO3RyeXtoPWF3YWl0IGMuZmV0Y2hBc3luYyhsKX1jYXRjaChlKXthZGRQYWdlRXJyb3IoZSk7YnJlYWt9fWVsc2UgaD1sO2lmKCEoaCBpbnN0YW5jZW9mIGkuRGljdCkpe2FkZFBhZ2VFcnJvcihuZXcgbi5Gb3JtYXRFcnJvcigiUGFnZSBkaWN0aW9uYXJ5IGtpZCByZWZlcmVuY2UgcG9pbnRzIHRvIHdyb25nIHR5cGUgb2Ygb2JqZWN0LiIpKTticmVha31sZXQgdT1oLmdldFJhdygiVHlwZSIpO2lmKHUgaW5zdGFuY2VvZiBpLlJlZil0cnl7dT1hd2FpdCBjLmZldGNoQXN5bmModSl9Y2F0Y2goZSl7YWRkUGFnZUVycm9yKGUpO2JyZWFrfSgwLGkuaXNOYW1lKSh1LCJQYWdlIil8fCFoLmhhcygiS2lkcyIpP2FkZFBhZ2VEaWN0KGgsbCBpbnN0YW5jZW9mIGkuUmVmP2w6bnVsbCk6dC5wdXNoKHtjdXJyZW50Tm9kZTpoLHBvc0luS2lkczowfSk7ZS5wb3NJbktpZHMrK31yZXR1cm4gb31nZXRQYWdlSW5kZXgoZSl7Y29uc3QgdD10aGlzLnBhZ2VJbmRleENhY2hlLmdldChlKTtpZih2b2lkIDAhPT10KXJldHVybiBQcm9taXNlLnJlc29sdmUodCk7Y29uc3QgYT10aGlzLnhyZWY7bGV0IHI9MDtjb25zdCBuZXh0PXQ9PmZ1bmN0aW9uIHBhZ2VzQmVmb3JlUmVmKHQpe2xldCByLHM9MDtyZXR1cm4gYS5mZXRjaEFzeW5jKHQpLnRoZW4oKGZ1bmN0aW9uKGEpe2lmKCgwLGkuaXNSZWZzRXF1YWwpKHQsZSkmJiEoMCxpLmlzRGljdCkoYSwiUGFnZSIpJiYhKGEgaW5zdGFuY2VvZiBpLkRpY3QmJiFhLmhhcygiVHlwZSIpJiZhLmhhcygiQ29udGVudHMiKSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlRoZSByZWZlcmVuY2UgZG9lcyBub3QgcG9pbnQgdG8gYSAvUGFnZSBkaWN0aW9uYXJ5LiIpO2lmKCFhKXJldHVybiBudWxsO2lmKCEoYSBpbnN0YW5jZW9mIGkuRGljdCkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk5vZGUgbXVzdCBiZSBhIGRpY3Rpb25hcnkuIik7cj1hLmdldFJhdygiUGFyZW50Iik7cmV0dXJuIGEuZ2V0QXN5bmMoIlBhcmVudCIpfSkpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiBudWxsO2lmKCEoZSBpbnN0YW5jZW9mIGkuRGljdCkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlBhcmVudCBtdXN0IGJlIGEgZGljdGlvbmFyeS4iKTtyZXR1cm4gZS5nZXRBc3luYygiS2lkcyIpfSkpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiBudWxsO2NvbnN0IG89W107bGV0IGM9ITE7Zm9yKGNvbnN0IHIgb2YgZSl7aWYoIShyIGluc3RhbmNlb2YgaS5SZWYpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJLaWQgbXVzdCBiZSBhIHJlZmVyZW5jZS4iKTtpZigoMCxpLmlzUmVmc0VxdWFsKShyLHQpKXtjPSEwO2JyZWFrfW8ucHVzaChhLmZldGNoQXN5bmMocikudGhlbigoZnVuY3Rpb24oZSl7aWYoIShlIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiS2lkIG5vZGUgbXVzdCBiZSBhIGRpY3Rpb25hcnkuIik7ZS5oYXMoIkNvdW50Iik/cys9ZS5nZXQoIkNvdW50Iik6cysrfSkpKX1pZighYyl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiS2lkIHJlZmVyZW5jZSBub3QgZm91bmQgaW4gcGFyZW50J3Mga2lkcy4iKTtyZXR1cm4gUHJvbWlzZS5hbGwobykudGhlbigoZnVuY3Rpb24oKXtyZXR1cm5bcyxyXX0pKX0pKX0odCkudGhlbigodD0+e2lmKCF0KXt0aGlzLnBhZ2VJbmRleENhY2hlLnB1dChlLHIpO3JldHVybiByfWNvbnN0W2Esbl09dDtyKz1hO3JldHVybiBuZXh0KG4pfSkpO3JldHVybiBuZXh0KGUpfWdldCBiYXNlVXJsKCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiVVJJIik7aWYoZSBpbnN0YW5jZW9mIGkuRGljdCl7Y29uc3QgdD1lLmdldCgiQmFzZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7Y29uc3QgZT0oMCxuLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwpKHQsbnVsbCx7dHJ5Q29udmVydEVuY29kaW5nOiEwfSk7aWYoZSlyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiYmFzZVVybCIsZS5ocmVmKX19cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImJhc2VVcmwiLG51bGwpfXN0YXRpYyBwYXJzZURlc3REaWN0aW9uYXJ5KGUpe2NvbnN0IHQ9ZS5kZXN0RGljdDtpZighKHQgaW5zdGFuY2VvZiBpLkRpY3QpKXsoMCxuLndhcm4pKCJwYXJzZURlc3REaWN0aW9uYXJ5OiBgZGVzdERpY3RgIG11c3QgYmUgYSBkaWN0aW9uYXJ5LiIpO3JldHVybn1jb25zdCBhPWUucmVzdWx0T2JqO2lmKCJvYmplY3QiIT10eXBlb2YgYSl7KDAsbi53YXJuKSgicGFyc2VEZXN0RGljdGlvbmFyeTogYHJlc3VsdE9iamAgbXVzdCBiZSBhbiBvYmplY3QuIik7cmV0dXJufWNvbnN0IHM9ZS5kb2NCYXNlVXJsfHxudWxsLGM9ZS5kb2NBdHRhY2htZW50c3x8bnVsbDtsZXQgbCxoLHU9dC5nZXQoIkEiKTtpZighKHUgaW5zdGFuY2VvZiBpLkRpY3QpKWlmKHQuaGFzKCJEZXN0IikpdT10LmdldCgiRGVzdCIpO2Vsc2V7dT10LmdldCgiQUEiKTt1IGluc3RhbmNlb2YgaS5EaWN0JiYodS5oYXMoIkQiKT91PXUuZ2V0KCJEIik6dS5oYXMoIlUiKSYmKHU9dS5nZXQoIlUiKSkpfWlmKHUgaW5zdGFuY2VvZiBpLkRpY3Qpe2NvbnN0IGU9dS5nZXQoIlMiKTtpZighKGUgaW5zdGFuY2VvZiBpLk5hbWUpKXsoMCxuLndhcm4pKCJwYXJzZURlc3REaWN0aW9uYXJ5OiBJbnZhbGlkIHR5cGUgaW4gQWN0aW9uIGRpY3Rpb25hcnkuIik7cmV0dXJufWNvbnN0IHQ9ZS5uYW1lO3N3aXRjaCh0KXtjYXNlIlJlc2V0Rm9ybSI6Y29uc3QgZT11LmdldCgiRmxhZ3MiKSxzPTA9PSgxJigibnVtYmVyIj09dHlwZW9mIGU/ZTowKSksZD1bXSxmPVtdO2Zvcihjb25zdCBlIG9mIHUuZ2V0KCJGaWVsZHMiKXx8W10pZSBpbnN0YW5jZW9mIGkuUmVmP2YucHVzaChlLnRvU3RyaW5nKCkpOiJzdHJpbmciPT10eXBlb2YgZSYmZC5wdXNoKCgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKGUpKTthLnJlc2V0Rm9ybT17ZmllbGRzOmQscmVmczpmLGluY2x1ZGU6c307YnJlYWs7Y2FzZSJVUkkiOmw9dS5nZXQoIlVSSSIpO2wgaW5zdGFuY2VvZiBpLk5hbWUmJihsPSIvIitsLm5hbWUpO2JyZWFrO2Nhc2UiR29UbyI6aD11LmdldCgiRCIpO2JyZWFrO2Nhc2UiTGF1bmNoIjpjYXNlIkdvVG9SIjpjb25zdCBnPXUuZ2V0KCJGIik7ZyBpbnN0YW5jZW9mIGkuRGljdD9sPWcuZ2V0KCJGIil8fG51bGw6InN0cmluZyI9PXR5cGVvZiBnJiYobD1nKTtsZXQgcD11LmdldCgiRCIpO2lmKHApe3AgaW5zdGFuY2VvZiBpLk5hbWUmJihwPXAubmFtZSk7aWYoInN0cmluZyI9PXR5cGVvZiBsKXtjb25zdCBlPWwuc3BsaXQoIiMiKVswXTsic3RyaW5nIj09dHlwZW9mIHA/bD1lKyIjIitwOkFycmF5LmlzQXJyYXkocCkmJihsPWUrIiMiK0pTT04uc3RyaW5naWZ5KHApKX19Y29uc3QgbT11LmdldCgiTmV3V2luZG93Iik7ImJvb2xlYW4iPT10eXBlb2YgbSYmKGEubmV3V2luZG93PW0pO2JyZWFrO2Nhc2UiR29Ub0UiOmNvbnN0IGI9dS5nZXQoIlQiKTtsZXQgeTtpZihjJiZiIGluc3RhbmNlb2YgaS5EaWN0KXtjb25zdCBlPWIuZ2V0KCJSIiksdD1iLmdldCgiTiIpOygwLGkuaXNOYW1lKShlLCJDIikmJiJzdHJpbmciPT10eXBlb2YgdCYmKHk9Y1soMCxuLnN0cmluZ1RvUERGU3RyaW5nKSh0KV0pfXk/YS5hdHRhY2htZW50PXk6KDAsbi53YXJuKSgncGFyc2VEZXN0RGljdGlvbmFyeSAtIHVuaW1wbGVtZW50ZWQgIkdvVG9FIiBhY3Rpb24uJyk7YnJlYWs7Y2FzZSJOYW1lZCI6Y29uc3Qgdz11LmdldCgiTiIpO3cgaW5zdGFuY2VvZiBpLk5hbWUmJihhLmFjdGlvbj13Lm5hbWUpO2JyZWFrO2Nhc2UiU2V0T0NHU3RhdGUiOmNvbnN0IFM9dS5nZXQoIlN0YXRlIikseD11LmdldCgiUHJlc2VydmVSQiIpO2lmKCFBcnJheS5pc0FycmF5KFMpfHwwPT09Uy5sZW5ndGgpYnJlYWs7Y29uc3Qgaz1bXTtmb3IoY29uc3QgZSBvZiBTKWlmKGUgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKGUubmFtZSl7Y2FzZSJPTiI6Y2FzZSJPRkYiOmNhc2UiVG9nZ2xlIjprLnB1c2goZS5uYW1lKX1lbHNlIGUgaW5zdGFuY2VvZiBpLlJlZiYmay5wdXNoKGUudG9TdHJpbmcoKSk7aWYoay5sZW5ndGghPT1TLmxlbmd0aClicmVhazthLnNldE9DR1N0YXRlPXtzdGF0ZTprLHByZXNlcnZlUkI6ImJvb2xlYW4iIT10eXBlb2YgeHx8eH07YnJlYWs7Y2FzZSJKYXZhU2NyaXB0Ijpjb25zdCBDPXUuZ2V0KCJKUyIpO2xldCB2O0MgaW5zdGFuY2VvZiBvLkJhc2VTdHJlYW0/dj1DLmdldFN0cmluZygpOiJzdHJpbmciPT10eXBlb2YgQyYmKHY9Qyk7Y29uc3QgRj12JiYoMCxyLnJlY292ZXJKc1VSTCkoKDAsbi5zdHJpbmdUb1BERlN0cmluZykodikpO2lmKEYpe2w9Ri51cmw7YS5uZXdXaW5kb3c9Ri5uZXdXaW5kb3c7YnJlYWt9ZGVmYXVsdDppZigiSmF2YVNjcmlwdCI9PT10fHwiU3VibWl0Rm9ybSI9PT10KWJyZWFrOygwLG4ud2FybikoYHBhcnNlRGVzdERpY3Rpb25hcnkgLSB1bnN1cHBvcnRlZCBhY3Rpb246ICIke3R9Ii5gKX19ZWxzZSB0LmhhcygiRGVzdCIpJiYoaD10LmdldCgiRGVzdCIpKTtpZigic3RyaW5nIj09dHlwZW9mIGwpe2NvbnN0IGU9KDAsbi5jcmVhdGVWYWxpZEFic29sdXRlVXJsKShsLHMse2FkZERlZmF1bHRQcm90b2NvbDohMCx0cnlDb252ZXJ0RW5jb2Rpbmc6ITB9KTtlJiYoYS51cmw9ZS5ocmVmKTthLnVuc2FmZVVybD1sfWlmKGgpe2ggaW5zdGFuY2VvZiBpLk5hbWUmJihoPWgubmFtZSk7InN0cmluZyI9PXR5cGVvZiBoP2EuZGVzdD0oMCxuLnN0cmluZ1RvUERGU3RyaW5nKShoKTpBcnJheS5pc0FycmF5KGgpJiYoYS5kZXN0PWgpfX19dC5DYXRhbG9nPUNhdGFsb2d9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5OdW1iZXJUcmVlPXQuTmFtZVRyZWU9dm9pZCAwO3ZhciByPWEoMyksbj1hKDIpO2NsYXNzIE5hbWVPck51bWJlclRyZWV7Y29uc3RydWN0b3IoZSx0LGEpe3RoaXMuY29uc3RydWN0b3I9PT1OYW1lT3JOdW1iZXJUcmVlJiYoMCxuLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgTmFtZU9yTnVtYmVyVHJlZS4iKTt0aGlzLnJvb3Q9ZTt0aGlzLnhyZWY9dDt0aGlzLl90eXBlPWF9Z2V0QWxsKCl7Y29uc3QgZT1uZXcgTWFwO2lmKCF0aGlzLnJvb3QpcmV0dXJuIGU7Y29uc3QgdD10aGlzLnhyZWYsYT1uZXcgci5SZWZTZXQ7YS5wdXQodGhpcy5yb290KTtjb25zdCBpPVt0aGlzLnJvb3RdO2Zvcig7aS5sZW5ndGg+MDspe2NvbnN0IHM9dC5mZXRjaElmUmVmKGkuc2hpZnQoKSk7aWYoIShzIGluc3RhbmNlb2Ygci5EaWN0KSljb250aW51ZTtpZihzLmhhcygiS2lkcyIpKXtjb25zdCBlPXMuZ2V0KCJLaWRzIik7aWYoIUFycmF5LmlzQXJyYXkoZSkpY29udGludWU7Zm9yKGNvbnN0IHQgb2YgZSl7aWYoYS5oYXModCkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoYER1cGxpY2F0ZSBlbnRyeSBpbiAiJHt0aGlzLl90eXBlfSIgdHJlZS5gKTtpLnB1c2godCk7YS5wdXQodCl9Y29udGludWV9Y29uc3Qgbz1zLmdldCh0aGlzLl90eXBlKTtpZihBcnJheS5pc0FycmF5KG8pKWZvcihsZXQgYT0wLHI9by5sZW5ndGg7YTxyO2ErPTIpZS5zZXQodC5mZXRjaElmUmVmKG9bYV0pLHQuZmV0Y2hJZlJlZihvW2ErMV0pKX1yZXR1cm4gZX1nZXQoZSl7aWYoIXRoaXMucm9vdClyZXR1cm4gbnVsbDtjb25zdCB0PXRoaXMueHJlZjtsZXQgYT10LmZldGNoSWZSZWYodGhpcy5yb290KSxyPTA7Zm9yKDthLmhhcygiS2lkcyIpOyl7aWYoKytyPjEwKXsoMCxuLndhcm4pKGBTZWFyY2ggZGVwdGggbGltaXQgcmVhY2hlZCBmb3IgIiR7dGhpcy5fdHlwZX0iIHRyZWUuYCk7cmV0dXJuIG51bGx9Y29uc3QgaT1hLmdldCgiS2lkcyIpO2lmKCFBcnJheS5pc0FycmF5KGkpKXJldHVybiBudWxsO2xldCBzPTAsbz1pLmxlbmd0aC0xO2Zvcig7czw9bzspe2NvbnN0IHI9cytvPj4xLG49dC5mZXRjaElmUmVmKGlbcl0pLGM9bi5nZXQoIkxpbWl0cyIpO2lmKGU8dC5mZXRjaElmUmVmKGNbMF0pKW89ci0xO2Vsc2V7aWYoIShlPnQuZmV0Y2hJZlJlZihjWzFdKSkpe2E9bjticmVha31zPXIrMX19aWYocz5vKXJldHVybiBudWxsfWNvbnN0IGk9YS5nZXQodGhpcy5fdHlwZSk7aWYoQXJyYXkuaXNBcnJheShpKSl7bGV0IGE9MCxyPWkubGVuZ3RoLTI7Zm9yKDthPD1yOyl7Y29uc3Qgbj1hK3I+PjEscz1uKygxJm4pLG89dC5mZXRjaElmUmVmKGlbc10pO2lmKGU8bylyPXMtMjtlbHNle2lmKCEoZT5vKSlyZXR1cm4gdC5mZXRjaElmUmVmKGlbcysxXSk7YT1zKzJ9fX1yZXR1cm4gbnVsbH19dC5OYW1lVHJlZT1jbGFzcyBOYW1lVHJlZSBleHRlbmRzIE5hbWVPck51bWJlclRyZWV7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLHQsIk5hbWVzIil9fTt0Lk51bWJlclRyZWU9Y2xhc3MgTnVtYmVyVHJlZSBleHRlbmRzIE5hbWVPck51bWJlclRyZWV7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLHQsIk51bXMiKX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuY2xlYXJHbG9iYWxDYWNoZXM9ZnVuY3Rpb24gY2xlYXJHbG9iYWxDYWNoZXMoKXsoMCxyLmNsZWFyUHJpbWl0aXZlQ2FjaGVzKSgpOygwLG4uY2xlYXJVbmljb2RlQ2FjaGVzKSgpfTt2YXIgcj1hKDMpLG49YSgzOCl9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5GaWxlU3BlYz12b2lkIDA7dmFyIHI9YSgyKSxuPWEoNSksaT1hKDMpO2Z1bmN0aW9uIHBpY2tQbGF0Zm9ybUl0ZW0oZSl7cmV0dXJuIGUuaGFzKCJVRiIpP2UuZ2V0KCJVRiIpOmUuaGFzKCJGIik/ZS5nZXQoIkYiKTplLmhhcygiVW5peCIpP2UuZ2V0KCJVbml4Iik6ZS5oYXMoIk1hYyIpP2UuZ2V0KCJNYWMiKTplLmhhcygiRE9TIik/ZS5nZXQoIkRPUyIpOm51bGx9dC5GaWxlU3BlYz1jbGFzcyBGaWxlU3BlY3tjb25zdHJ1Y3RvcihlLHQpe2lmKGUgaW5zdGFuY2VvZiBpLkRpY3Qpe3RoaXMueHJlZj10O3RoaXMucm9vdD1lO2UuaGFzKCJGUyIpJiYodGhpcy5mcz1lLmdldCgiRlMiKSk7dGhpcy5kZXNjcmlwdGlvbj1lLmhhcygiRGVzYyIpPygwLHIuc3RyaW5nVG9QREZTdHJpbmcpKGUuZ2V0KCJEZXNjIikpOiIiO2UuaGFzKCJSRiIpJiYoMCxyLndhcm4pKCJSZWxhdGVkIGZpbGUgc3BlY2lmaWNhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQiKTt0aGlzLmNvbnRlbnRBdmFpbGFibGU9ITA7aWYoIWUuaGFzKCJFRiIpKXt0aGlzLmNvbnRlbnRBdmFpbGFibGU9ITE7KDAsci53YXJuKSgiTm9uLWVtYmVkZGVkIGZpbGUgc3BlY2lmaWNhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQiKX19fWdldCBmaWxlbmFtZSgpe2lmKCF0aGlzLl9maWxlbmFtZSYmdGhpcy5yb290KXtjb25zdCBlPXBpY2tQbGF0Zm9ybUl0ZW0odGhpcy5yb290KXx8InVubmFtZWQiO3RoaXMuX2ZpbGVuYW1lPSgwLHIuc3RyaW5nVG9QREZTdHJpbmcpKGUpLnJlcGxhY2UoL1xcXFwvZywiXFwiKS5yZXBsYWNlKC9cXFwvL2csIi8iKS5yZXBsYWNlKC9cXC9nLCIvIil9cmV0dXJuIHRoaXMuX2ZpbGVuYW1lfWdldCBjb250ZW50KCl7aWYoIXRoaXMuY29udGVudEF2YWlsYWJsZSlyZXR1cm4gbnVsbDshdGhpcy5jb250ZW50UmVmJiZ0aGlzLnJvb3QmJih0aGlzLmNvbnRlbnRSZWY9cGlja1BsYXRmb3JtSXRlbSh0aGlzLnJvb3QuZ2V0KCJFRiIpKSk7bGV0IGU9bnVsbDtpZih0aGlzLmNvbnRlbnRSZWYpe2NvbnN0IHQ9dGhpcy54cmVmLmZldGNoSWZSZWYodGhpcy5jb250ZW50UmVmKTt0IGluc3RhbmNlb2Ygbi5CYXNlU3RyZWFtP2U9dC5nZXRCeXRlcygpOigwLHIud2FybikoIkVtYmVkZGVkIGZpbGUgc3BlY2lmaWNhdGlvbiBwb2ludHMgdG8gbm9uLWV4aXN0aW5nL2ludmFsaWQgY29udGVudCIpfWVsc2UoMCxyLndhcm4pKCJFbWJlZGRlZCBmaWxlIHNwZWNpZmljYXRpb24gZG9lcyBub3QgaGF2ZSBhIGNvbnRlbnQiKTtyZXR1cm4gZX1nZXQgc2VyaWFsaXphYmxlKCl7cmV0dXJue2ZpbGVuYW1lOnRoaXMuZmlsZW5hbWUsY29udGVudDp0aGlzLmNvbnRlbnR9fX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5NZXRhZGF0YVBhcnNlcj12b2lkIDA7dmFyIHI9YSg2NCk7dC5NZXRhZGF0YVBhcnNlcj1jbGFzcyBNZXRhZGF0YVBhcnNlcntjb25zdHJ1Y3RvcihlKXtlPXRoaXMuX3JlcGFpcihlKTtjb25zdCB0PW5ldyByLlNpbXBsZVhNTFBhcnNlcih7bG93ZXJDYXNlTmFtZTohMH0pLnBhcnNlRnJvbVN0cmluZyhlKTt0aGlzLl9tZXRhZGF0YU1hcD1uZXcgTWFwO3RoaXMuX2RhdGE9ZTt0JiZ0aGlzLl9wYXJzZSh0KX1fcmVwYWlyKGUpe3JldHVybiBlLnJlcGxhY2UoL15bXjxdKy8sIiIpLnJlcGxhY2UoLz5cXDM3NlxcMzc3KFtePF0rKS9nLChmdW5jdGlvbihlLHQpe2NvbnN0IGE9dC5yZXBsYWNlKC9cXChbMC0zXSkoWzAtN10pKFswLTddKS9nLChmdW5jdGlvbihlLHQsYSxyKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSg2NCp0KzgqYSsxKnIpfSkpLnJlcGxhY2UoLyYoYW1wfGFwb3N8Z3R8bHR8cXVvdCk7L2csKGZ1bmN0aW9uKGUsdCl7c3dpdGNoKHQpe2Nhc2UiYW1wIjpyZXR1cm4iJiI7Y2FzZSJhcG9zIjpyZXR1cm4iJyI7Y2FzZSJndCI6cmV0dXJuIj4iO2Nhc2UibHQiOnJldHVybiI8IjtjYXNlInF1b3QiOnJldHVybiciJ310aHJvdyBuZXcgRXJyb3IoYF9yZXBhaXI6ICR7dH0gaXNuJ3QgZGVmaW5lZC5gKX0pKSxyPVtdO2ZvcihsZXQgZT0wLHQ9YS5sZW5ndGg7ZTx0O2UrPTIpe2NvbnN0IHQ9MjU2KmEuY2hhckNvZGVBdChlKSthLmNoYXJDb2RlQXQoZSsxKTt0Pj0zMiYmdDwxMjcmJjYwIT09dCYmNjIhPT10JiYzOCE9PXQ/ci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUodCkpOnIucHVzaCgiJiN4IisoNjU1MzYrdCkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKSsiOyIpfXJldHVybiI+IityLmpvaW4oIiIpfSkpfV9nZXRTZXF1ZW5jZShlKXtjb25zdCB0PWUubm9kZU5hbWU7cmV0dXJuInJkZjpiYWciIT09dCYmInJkZjpzZXEiIT09dCYmInJkZjphbHQiIT09dD9udWxsOmUuY2hpbGROb2Rlcy5maWx0ZXIoKGU9PiJyZGY6bGkiPT09ZS5ub2RlTmFtZSkpfV9wYXJzZUFycmF5KGUpe2lmKCFlLmhhc0NoaWxkTm9kZXMoKSlyZXR1cm47Y29uc3RbdF09ZS5jaGlsZE5vZGVzLGE9dGhpcy5fZ2V0U2VxdWVuY2UodCl8fFtdO3RoaXMuX21ldGFkYXRhTWFwLnNldChlLm5vZGVOYW1lLGEubWFwKChlPT5lLnRleHRDb250ZW50LnRyaW0oKSkpKX1fcGFyc2UoZSl7bGV0IHQ9ZS5kb2N1bWVudEVsZW1lbnQ7aWYoInJkZjpyZGYiIT09dC5ub2RlTmFtZSl7dD10LmZpcnN0Q2hpbGQ7Zm9yKDt0JiYicmRmOnJkZiIhPT10Lm5vZGVOYW1lOyl0PXQubmV4dFNpYmxpbmd9aWYodCYmInJkZjpyZGYiPT09dC5ub2RlTmFtZSYmdC5oYXNDaGlsZE5vZGVzKCkpZm9yKGNvbnN0IGUgb2YgdC5jaGlsZE5vZGVzKWlmKCJyZGY6ZGVzY3JpcHRpb24iPT09ZS5ub2RlTmFtZSlmb3IoY29uc3QgdCBvZiBlLmNoaWxkTm9kZXMpe2NvbnN0IGU9dC5ub2RlTmFtZTtzd2l0Y2goZSl7Y2FzZSIjdGV4dCI6Y29udGludWU7Y2FzZSJkYzpjcmVhdG9yIjpjYXNlImRjOnN1YmplY3QiOnRoaXMuX3BhcnNlQXJyYXkodCk7Y29udGludWV9dGhpcy5fbWV0YWRhdGFNYXAuc2V0KGUsdC50ZXh0Q29udGVudC50cmltKCkpfX1nZXQgc2VyaWFsaXphYmxlKCl7cmV0dXJue3BhcnNlZERhdGE6dGhpcy5fbWV0YWRhdGFNYXAscmF3RGF0YTp0aGlzLl9kYXRhfX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuU3RydWN0VHJlZVJvb3Q9dC5TdHJ1Y3RUcmVlUGFnZT12b2lkIDA7dmFyIHI9YSgzKSxuPWEoMiksaT1hKDY4KTtjb25zdCBzPSJQQUdFX0NPTlRFTlQiLG89IlNUUkVBTV9DT05URU5UIixjPSJPQkpFQ1QiLGw9IkVMRU1FTlQiO3QuU3RydWN0VHJlZVJvb3Q9Y2xhc3MgU3RydWN0VHJlZVJvb3R7Y29uc3RydWN0b3IoZSl7dGhpcy5kaWN0PWU7dGhpcy5yb2xlTWFwPW5ldyBNYXB9aW5pdCgpe3RoaXMucmVhZFJvbGVNYXAoKX1yZWFkUm9sZU1hcCgpe2NvbnN0IGU9dGhpcy5kaWN0LmdldCgiUm9sZU1hcCIpO2UgaW5zdGFuY2VvZiByLkRpY3QmJmUuZm9yRWFjaCgoKGUsdCk9Pnt0IGluc3RhbmNlb2Ygci5OYW1lJiZ0aGlzLnJvbGVNYXAuc2V0KGUsdC5uYW1lKX0pKX19O2NsYXNzIFN0cnVjdEVsZW1lbnROb2Rle2NvbnN0cnVjdG9yKGUsdCl7dGhpcy50cmVlPWU7dGhpcy5kaWN0PXQ7dGhpcy5raWRzPVtdO3RoaXMucGFyc2VLaWRzKCl9Z2V0IHJvbGUoKXtjb25zdCBlPXRoaXMuZGljdC5nZXQoIlMiKSx0PWUgaW5zdGFuY2VvZiByLk5hbWU/ZS5uYW1lOiIiLHtyb290OmF9PXRoaXMudHJlZTtyZXR1cm4gYS5yb2xlTWFwLmhhcyh0KT9hLnJvbGVNYXAuZ2V0KHQpOnR9cGFyc2VLaWRzKCl7bGV0IGU9bnVsbDtjb25zdCB0PXRoaXMuZGljdC5nZXRSYXcoIlBnIik7dCBpbnN0YW5jZW9mIHIuUmVmJiYoZT10LnRvU3RyaW5nKCkpO2NvbnN0IGE9dGhpcy5kaWN0LmdldCgiSyIpO2lmKEFycmF5LmlzQXJyYXkoYSkpZm9yKGNvbnN0IHQgb2YgYSl7Y29uc3QgYT10aGlzLnBhcnNlS2lkKGUsdCk7YSYmdGhpcy5raWRzLnB1c2goYSl9ZWxzZXtjb25zdCB0PXRoaXMucGFyc2VLaWQoZSxhKTt0JiZ0aGlzLmtpZHMucHVzaCh0KX19cGFyc2VLaWQoZSx0KXtpZihOdW1iZXIuaXNJbnRlZ2VyKHQpKXJldHVybiB0aGlzLnRyZWUucGFnZURpY3Qub2JqSWQhPT1lP251bGw6bmV3IFN0cnVjdEVsZW1lbnQoe3R5cGU6cyxtY2lkOnQscGFnZU9iaklkOmV9KTtsZXQgYT1udWxsO3QgaW5zdGFuY2VvZiByLlJlZj9hPXRoaXMuZGljdC54cmVmLmZldGNoKHQpOnQgaW5zdGFuY2VvZiByLkRpY3QmJihhPXQpO2lmKCFhKXJldHVybiBudWxsO2NvbnN0IG49YS5nZXRSYXcoIlBnIik7biBpbnN0YW5jZW9mIHIuUmVmJiYoZT1uLnRvU3RyaW5nKCkpO2NvbnN0IGk9YS5nZXQoIlR5cGUiKWluc3RhbmNlb2Ygci5OYW1lP2EuZ2V0KCJUeXBlIikubmFtZTpudWxsO3JldHVybiJNQ1IiPT09aT90aGlzLnRyZWUucGFnZURpY3Qub2JqSWQhPT1lP251bGw6bmV3IFN0cnVjdEVsZW1lbnQoe3R5cGU6byxyZWZPYmpJZDphLmdldFJhdygiU3RtIilpbnN0YW5jZW9mIHIuUmVmP2EuZ2V0UmF3KCJTdG0iKS50b1N0cmluZygpOm51bGwscGFnZU9iaklkOmUsbWNpZDphLmdldCgiTUNJRCIpfSk6Ik9CSlIiPT09aT90aGlzLnRyZWUucGFnZURpY3Qub2JqSWQhPT1lP251bGw6bmV3IFN0cnVjdEVsZW1lbnQoe3R5cGU6YyxyZWZPYmpJZDphLmdldFJhdygiT2JqIilpbnN0YW5jZW9mIHIuUmVmP2EuZ2V0UmF3KCJPYmoiKS50b1N0cmluZygpOm51bGwscGFnZU9iaklkOmV9KTpuZXcgU3RydWN0RWxlbWVudCh7dHlwZTpsLGRpY3Q6YX0pfX1jbGFzcyBTdHJ1Y3RFbGVtZW50e2NvbnN0cnVjdG9yKHt0eXBlOmUsZGljdDp0PW51bGwsbWNpZDphPW51bGwscGFnZU9iaklkOnI9bnVsbCxyZWZPYmpJZDpuPW51bGx9KXt0aGlzLnR5cGU9ZTt0aGlzLmRpY3Q9dDt0aGlzLm1jaWQ9YTt0aGlzLnBhZ2VPYmpJZD1yO3RoaXMucmVmT2JqSWQ9bjt0aGlzLnBhcmVudE5vZGU9bnVsbH19dC5TdHJ1Y3RUcmVlUGFnZT1jbGFzcyBTdHJ1Y3RUcmVlUGFnZXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMucm9vdD1lO3RoaXMucm9vdERpY3Q9ZT9lLmRpY3Q6bnVsbDt0aGlzLnBhZ2VEaWN0PXQ7dGhpcy5ub2Rlcz1bXX1wYXJzZSgpe2lmKCF0aGlzLnJvb3R8fCF0aGlzLnJvb3REaWN0KXJldHVybjtjb25zdCBlPXRoaXMucm9vdERpY3QuZ2V0KCJQYXJlbnRUcmVlIik7aWYoIWUpcmV0dXJuO2NvbnN0IHQ9dGhpcy5wYWdlRGljdC5nZXQoIlN0cnVjdFBhcmVudHMiKTtpZighTnVtYmVyLmlzSW50ZWdlcih0KSlyZXR1cm47Y29uc3QgYT1uZXcgaS5OdW1iZXJUcmVlKGUsdGhpcy5yb290RGljdC54cmVmKS5nZXQodCk7aWYoIUFycmF5LmlzQXJyYXkoYSkpcmV0dXJuO2NvbnN0IG49bmV3IE1hcDtmb3IoY29uc3QgZSBvZiBhKWUgaW5zdGFuY2VvZiByLlJlZiYmdGhpcy5hZGROb2RlKHRoaXMucm9vdERpY3QueHJlZi5mZXRjaChlKSxuKX1hZGROb2RlKGUsdCxhPTApe2lmKGE+NDApeygwLG4ud2FybikoIlN0cnVjdFRyZWUgTUFYX0RFUFRIIHJlYWNoZWQuIik7cmV0dXJuIG51bGx9aWYodC5oYXMoZSkpcmV0dXJuIHQuZ2V0KGUpO2NvbnN0IGk9bmV3IFN0cnVjdEVsZW1lbnROb2RlKHRoaXMsZSk7dC5zZXQoZSxpKTtjb25zdCBzPWUuZ2V0KCJQIik7aWYoIXN8fCgwLHIuaXNOYW1lKShzLmdldCgiVHlwZSIpLCJTdHJ1Y3RUcmVlUm9vdCIpKXt0aGlzLmFkZFRvcExldmVsTm9kZShlLGkpfHx0LmRlbGV0ZShlKTtyZXR1cm4gaX1jb25zdCBvPXRoaXMuYWRkTm9kZShzLHQsYSsxKTtpZighbylyZXR1cm4gaTtsZXQgYz0hMTtmb3IoY29uc3QgdCBvZiBvLmtpZHMpaWYodC50eXBlPT09bCYmdC5kaWN0PT09ZSl7dC5wYXJlbnROb2RlPWk7Yz0hMH1jfHx0LmRlbGV0ZShlKTtyZXR1cm4gaX1hZGRUb3BMZXZlbE5vZGUoZSx0KXtjb25zdCBhPXRoaXMucm9vdERpY3QuZ2V0KCJLIik7aWYoIWEpcmV0dXJuITE7aWYoYSBpbnN0YW5jZW9mIHIuRGljdCl7aWYoYS5vYmpJZCE9PWUub2JqSWQpcmV0dXJuITE7dGhpcy5ub2Rlc1swXT10O3JldHVybiEwfWlmKCFBcnJheS5pc0FycmF5KGEpKXJldHVybiEwO2xldCBuPSExO2ZvcihsZXQgcj0wO3I8YS5sZW5ndGg7cisrKXtjb25zdCBpPWFbcl07aWYoaSYmaS50b1N0cmluZygpPT09ZS5vYmpJZCl7dGhpcy5ub2Rlc1tyXT10O249ITB9fXJldHVybiBufWdldCBzZXJpYWxpemFibGUoKXtmdW5jdGlvbiBub2RlVG9TZXJpYWxpemFibGUoZSx0LGE9MCl7aWYoYT40MCl7KDAsbi53YXJuKSgiU3RydWN0VHJlZSB0b28gZGVlcCB0byBiZSBmdWxseSBzZXJpYWxpemVkLiIpO3JldHVybn1jb25zdCByPU9iamVjdC5jcmVhdGUobnVsbCk7ci5yb2xlPWUucm9sZTtyLmNoaWxkcmVuPVtdO3QuY2hpbGRyZW4ucHVzaChyKTtjb25zdCBpPWUuZGljdC5nZXQoIkFsdCIpOyJzdHJpbmciPT10eXBlb2YgaSYmKHIuYWx0PSgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKGkpKTtjb25zdCBoPWUuZGljdC5nZXQoIkxhbmciKTsic3RyaW5nIj09dHlwZW9mIGgmJihyLmxhbmc9KDAsbi5zdHJpbmdUb1BERlN0cmluZykoaCkpO2Zvcihjb25zdCB0IG9mIGUua2lkcyl7Y29uc3QgZT10LnR5cGU9PT1sP3QucGFyZW50Tm9kZTpudWxsO2U/bm9kZVRvU2VyaWFsaXphYmxlKGUscixhKzEpOnQudHlwZT09PXN8fHQudHlwZT09PW8/ci5jaGlsZHJlbi5wdXNoKHt0eXBlOiJjb250ZW50IixpZDpgcGFnZSR7dC5wYWdlT2JqSWR9X21jaWQke3QubWNpZH1gfSk6dC50eXBlPT09YyYmci5jaGlsZHJlbi5wdXNoKHt0eXBlOiJvYmplY3QiLGlkOnQucmVmT2JqSWR9KX19Y29uc3QgZT1PYmplY3QuY3JlYXRlKG51bGwpO2UuY2hpbGRyZW49W107ZS5yb2xlPSJSb290Ijtmb3IoY29uc3QgdCBvZiB0aGlzLm5vZGVzKXQmJm5vZGVUb1NlcmlhbGl6YWJsZSh0LGUpO3JldHVybiBlfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5PYmplY3RMb2FkZXI9dm9pZCAwO3ZhciByPWEoMyksbj1hKDUpLGk9YSg0KSxzPWEoMik7ZnVuY3Rpb24gYWRkQ2hpbGRyZW4oZSx0KXtpZihlIGluc3RhbmNlb2Ygci5EaWN0KWU9ZS5nZXRSYXdWYWx1ZXMoKTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBuLkJhc2VTdHJlYW0pZT1lLmRpY3QuZ2V0UmF3VmFsdWVzKCk7ZWxzZSBpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm47Zm9yKGNvbnN0IGkgb2YgZSkoKGE9aSlpbnN0YW5jZW9mIHIuUmVmfHxhIGluc3RhbmNlb2Ygci5EaWN0fHxhIGluc3RhbmNlb2Ygbi5CYXNlU3RyZWFtfHxBcnJheS5pc0FycmF5KGEpKSYmdC5wdXNoKGkpO3ZhciBhfXQuT2JqZWN0TG9hZGVyPWNsYXNzIE9iamVjdExvYWRlcntjb25zdHJ1Y3RvcihlLHQsYSl7dGhpcy5kaWN0PWU7dGhpcy5rZXlzPXQ7dGhpcy54cmVmPWE7dGhpcy5yZWZTZXQ9bnVsbH1hc3luYyBsb2FkKCl7aWYodGhpcy54cmVmLnN0cmVhbS5pc0RhdGFMb2FkZWQpcmV0dXJuO2NvbnN0e2tleXM6ZSxkaWN0OnR9PXRoaXM7dGhpcy5yZWZTZXQ9bmV3IHIuUmVmU2V0O2NvbnN0IGE9W107Zm9yKGNvbnN0IHIgb2YgZSl7Y29uc3QgZT10LmdldFJhdyhyKTt2b2lkIDAhPT1lJiZhLnB1c2goZSl9cmV0dXJuIHRoaXMuX3dhbGsoYSl9YXN5bmMgX3dhbGsoZSl7Y29uc3QgdD1bXSxhPVtdO2Zvcig7ZS5sZW5ndGg7KXtsZXQgbz1lLnBvcCgpO2lmKG8gaW5zdGFuY2VvZiByLlJlZil7aWYodGhpcy5yZWZTZXQuaGFzKG8pKWNvbnRpbnVlO3RyeXt0aGlzLnJlZlNldC5wdXQobyk7bz10aGlzLnhyZWYuZmV0Y2gobyl9Y2F0Y2goZSl7aWYoIShlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbikpeygwLHMud2FybikoYE9iamVjdExvYWRlci5fd2FsayAtIHJlcXVlc3RpbmcgYWxsIGRhdGE6ICIke2V9Ii5gKTt0aGlzLnJlZlNldD1udWxsO2NvbnN0e21hbmFnZXI6dH09dGhpcy54cmVmLnN0cmVhbTtyZXR1cm4gdC5yZXF1ZXN0QWxsQ2h1bmtzKCl9dC5wdXNoKG8pO2EucHVzaCh7YmVnaW46ZS5iZWdpbixlbmQ6ZS5lbmR9KX19aWYobyBpbnN0YW5jZW9mIG4uQmFzZVN0cmVhbSl7Y29uc3QgZT1vLmdldEJhc2VTdHJlYW1zKCk7aWYoZSl7bGV0IHI9ITE7Zm9yKGNvbnN0IHQgb2YgZSlpZighdC5pc0RhdGFMb2FkZWQpe3I9ITA7YS5wdXNoKHtiZWdpbjp0LnN0YXJ0LGVuZDp0LmVuZH0pfXImJnQucHVzaChvKX19YWRkQ2hpbGRyZW4obyxlKX1pZihhLmxlbmd0aCl7YXdhaXQgdGhpcy54cmVmLnN0cmVhbS5tYW5hZ2VyLnJlcXVlc3RSYW5nZXMoYSk7Zm9yKGNvbnN0IGUgb2YgdCllIGluc3RhbmNlb2Ygci5SZWYmJnRoaXMucmVmU2V0LnJlbW92ZShlKTtyZXR1cm4gdGhpcy5fd2Fsayh0KX10aGlzLnJlZlNldD1udWxsfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5YRkFGYWN0b3J5PXZvaWQgMDt2YXIgcj1hKDc1KSxuPWEoNzkpLGk9YSg4NSkscz1hKDgzKSxvPWEoNzYpLGM9YSgyKSxsPWEoODYpLGg9YSg5Nik7Y2xhc3MgWEZBRmFjdG9yeXtjb25zdHJ1Y3RvcihlKXt0cnl7dGhpcy5yb290PShuZXcgbC5YRkFQYXJzZXIpLnBhcnNlKFhGQUZhY3RvcnkuX2NyZWF0ZURvY3VtZW50KGUpKTtjb25zdCB0PW5ldyBuLkJpbmRlcih0aGlzLnJvb3QpO3RoaXMuZm9ybT10LmJpbmQoKTt0aGlzLmRhdGFIYW5kbGVyPW5ldyBpLkRhdGFIYW5kbGVyKHRoaXMucm9vdCx0LmdldERhdGEoKSk7dGhpcy5mb3JtW3IuJGdsb2JhbERhdGFdLnRlbXBsYXRlPXRoaXMuZm9ybX1jYXRjaChlKXsoMCxjLndhcm4pKGBYRkEgLSBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgcGFyc2luZyBhbmQgYmluZGluZzogJHtlfWApfX1pc1ZhbGlkKCl7cmV0dXJuIHRoaXMucm9vdCYmdGhpcy5mb3JtfV9jcmVhdGVQYWdlc0hlbHBlcigpe2NvbnN0IGU9dGhpcy5mb3JtW3IuJHRvUGFnZXNdKCk7cmV0dXJuIG5ldyBQcm9taXNlKCgodCxhKT0+e2NvbnN0IG5leHRJdGVyYXRpb249KCk9Pnt0cnl7Y29uc3QgYT1lLm5leHQoKTthLmRvbmU/dChhLnZhbHVlKTpzZXRUaW1lb3V0KG5leHRJdGVyYXRpb24sMCl9Y2F0Y2goZSl7YShlKX19O3NldFRpbWVvdXQobmV4dEl0ZXJhdGlvbiwwKX0pKX1hc3luYyBfY3JlYXRlUGFnZXMoKXt0cnl7dGhpcy5wYWdlcz1hd2FpdCB0aGlzLl9jcmVhdGVQYWdlc0hlbHBlcigpO3RoaXMuZGltcz10aGlzLnBhZ2VzLmNoaWxkcmVuLm1hcCgoZT0+e2NvbnN0e3dpZHRoOnQsaGVpZ2h0OmF9PWUuYXR0cmlidXRlcy5zdHlsZTtyZXR1cm5bMCwwLHBhcnNlSW50KHQpLHBhcnNlSW50KGEpXX0pKX1jYXRjaChlKXsoMCxjLndhcm4pKGBYRkEgLSBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgbGF5b3V0OiAke2V9YCl9fWdldEJvdW5kaW5nQm94KGUpe3JldHVybiB0aGlzLmRpbXNbZV19YXN5bmMgZ2V0TnVtUGFnZXMoKXt0aGlzLnBhZ2VzfHxhd2FpdCB0aGlzLl9jcmVhdGVQYWdlcygpO3JldHVybiB0aGlzLmRpbXMubGVuZ3RofXNldEltYWdlcyhlKXt0aGlzLmZvcm1bci4kZ2xvYmFsRGF0YV0uaW1hZ2VzPWV9c2V0Rm9udHMoZSl7dGhpcy5mb3JtW3IuJGdsb2JhbERhdGFdLmZvbnRGaW5kZXI9bmV3IHMuRm9udEZpbmRlcihlKTtjb25zdCB0PVtdO2ZvcihsZXQgZSBvZiB0aGlzLmZvcm1bci4kZ2xvYmFsRGF0YV0udXNlZFR5cGVmYWNlcyl7ZT0oMCxvLnN0cmlwUXVvdGVzKShlKTt0aGlzLmZvcm1bci4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlci5maW5kKGUpfHx0LnB1c2goZSl9cmV0dXJuIHQubGVuZ3RoPjA/dDpudWxsfWFwcGVuZEZvbnRzKGUsdCl7dGhpcy5mb3JtW3IuJGdsb2JhbERhdGFdLmZvbnRGaW5kZXIuYWRkKGUsdCl9YXN5bmMgZ2V0UGFnZXMoKXt0aGlzLnBhZ2VzfHxhd2FpdCB0aGlzLl9jcmVhdGVQYWdlcygpO2NvbnN0IGU9dGhpcy5wYWdlczt0aGlzLnBhZ2VzPW51bGw7cmV0dXJuIGV9c2VyaWFsaXplRGF0YShlKXtyZXR1cm4gdGhpcy5kYXRhSGFuZGxlci5zZXJpYWxpemUoZSl9c3RhdGljIF9jcmVhdGVEb2N1bWVudChlKXtyZXR1cm4gZVsiL3hkcDp4ZHAiXT9PYmplY3QudmFsdWVzKGUpLmpvaW4oIiIpOmVbInhkcDp4ZHAiXX1zdGF0aWMgZ2V0UmljaFRleHRBc0h0bWwoZSl7aWYoIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gbnVsbDt0cnl7bGV0IHQ9bmV3IGwuWEZBUGFyc2VyKGguWGh0bWxOYW1lc3BhY2UsITApLnBhcnNlKGUpO2lmKCFbImJvZHkiLCJ4aHRtbCJdLmluY2x1ZGVzKHRbci4kbm9kZU5hbWVdKSl7Y29uc3QgZT1oLlhodG1sTmFtZXNwYWNlLmJvZHkoe30pO2Vbci4kYXBwZW5kQ2hpbGRdKHQpO3Q9ZX1jb25zdCBhPXRbci4kdG9IVE1MXSgpO2lmKCFhLnN1Y2Nlc3MpcmV0dXJuIG51bGw7Y29uc3R7aHRtbDpufT1hLHthdHRyaWJ1dGVzOml9PW47aWYoaSl7aS5jbGFzcyYmKGkuY2xhc3M9aS5jbGFzcy5maWx0ZXIoKGU9PiFlLnN0YXJ0c1dpdGgoInhmYSIpKSkpO2kuZGlyPSJhdXRvIn1yZXR1cm57aHRtbDpuLHN0cjp0W3IuJHRleHRdKCl9fWNhdGNoKGUpeygwLGMud2FybikoYFhGQSAtIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBwYXJzaW5nIG9mIHJpY2ggdGV4dDogJHtlfWApfXJldHVybiBudWxsfX10LlhGQUZhY3Rvcnk9WEZBRmFjdG9yeX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlhtbE9iamVjdD10LlhGQU9iamVjdEFycmF5PXQuWEZBT2JqZWN0PXQuWEZBQXR0cmlidXRlPXQuU3RyaW5nT2JqZWN0PXQuT3B0aW9uT2JqZWN0PXQuT3B0aW9uMTA9dC5PcHRpb24wMT10LkludGVnZXJPYmplY3Q9dC5Db250ZW50T2JqZWN0PXQuJHVpZD10LiR0b1N0eWxlPXQuJHRvU3RyaW5nPXQuJHRvUGFnZXM9dC4kdG9IVE1MPXQuJHRleHQ9dC4kdGFiSW5kZXg9dC4kc2V0VmFsdWU9dC4kc2V0U2V0QXR0cmlidXRlcz10LiRzZXRJZD10LiRzZWFyY2hOb2RlPXQuJHJvb3Q9dC4kcmVzb2x2ZVByb3RvdHlwZXM9dC4kcmVtb3ZlQ2hpbGQ9dC4kcHVzaFBhcmE9dC4kcHVzaEdseXBocz10LiRwb3BQYXJhPXQuJG9uVGV4dD10LiRvbkNoaWxkQ2hlY2s9dC4kb25DaGlsZD10LiRuc0F0dHJpYnV0ZXM9dC4kbm9kZU5hbWU9dC4kbmFtZXNwYWNlSWQ9dC4kaXNVc2FibGU9dC4kaXNUcmFuc3BhcmVudD10LiRpc1RoZXJlTW9yZVdpZHRoPXQuJGlzU3BsaXR0YWJsZT10LiRpc05zQWdub3N0aWM9dC4kaXNEZXNjZW5kZW50PXQuJGlzRGF0YVZhbHVlPXQuJGlzQ0RBVEFYbWw9dC4kaXNCaW5kYWJsZT10LiRpbnNlcnRBdD10LiRpbmRleE9mPXQuJGlkcz10LiRoYXNTZXR0YWJsZVZhbHVlPXQuJGdsb2JhbERhdGE9dC4kZ2V0VGVtcGxhdGVSb290PXQuJGdldFN1YmZvcm1QYXJlbnQ9dC4kZ2V0UmVhbENoaWxkcmVuQnlOYW1lSXQ9dC4kZ2V0UGFyZW50PXQuJGdldE5leHRQYWdlPXQuJGdldEV4dHJhPXQuJGdldERhdGFWYWx1ZT10LiRnZXRDb250YWluZWRDaGlsZHJlbj10LiRnZXRDaGlsZHJlbkJ5TmFtZUl0PXQuJGdldENoaWxkcmVuQnlOYW1lPXQuJGdldENoaWxkcmVuQnlDbGFzcz10LiRnZXRDaGlsZHJlbj10LiRnZXRBdmFpbGFibGVTcGFjZT10LiRnZXRBdHRyaWJ1dGVzPXQuJGdldEF0dHJpYnV0ZUl0PXQuJGZsdXNoSFRNTD10LiRmaW5hbGl6ZT10LiRleHRyYT10LiRkdW1wPXQuJGRhdGE9dC4kY29udGVudD10LiRjb25zdW1lZD10LiRjbG9uZT10LiRjbGVhbnVwPXQuJGNsZWFuUGFnZT10LiRjbGVhbj10LiRjaGlsZHJlblRvSFRNTD10LiRhcHBlbmRDaGlsZD10LiRhZGRIVE1MPXQuJGFjY2VwdFdoaXRlc3BhY2U9dm9pZCAwO3ZhciByPWEoNzYpLG49YSgyKSxpPWEoNCkscz1hKDc3KSxvPWEoNzgpO2NvbnN0IGM9U3ltYm9sKCk7dC4kYWNjZXB0V2hpdGVzcGFjZT1jO2NvbnN0IGw9U3ltYm9sKCk7dC4kYWRkSFRNTD1sO2NvbnN0IGg9U3ltYm9sKCk7dC4kYXBwZW5kQ2hpbGQ9aDtjb25zdCB1PVN5bWJvbCgpO3QuJGNoaWxkcmVuVG9IVE1MPXU7Y29uc3QgZD1TeW1ib2woKTt0LiRjbGVhbj1kO2NvbnN0IGY9U3ltYm9sKCk7dC4kY2xlYW5QYWdlPWY7Y29uc3QgZz1TeW1ib2woKTt0LiRjbGVhbnVwPWc7Y29uc3QgcD1TeW1ib2woKTt0LiRjbG9uZT1wO2NvbnN0IG09U3ltYm9sKCk7dC4kY29uc3VtZWQ9bTtjb25zdCBiPVN5bWJvbCgiY29udGVudCIpO3QuJGNvbnRlbnQ9Yjtjb25zdCB5PVN5bWJvbCgiZGF0YSIpO3QuJGRhdGE9eTtjb25zdCB3PVN5bWJvbCgpO3QuJGR1bXA9dztjb25zdCBTPVN5bWJvbCgiZXh0cmEiKTt0LiRleHRyYT1TO2NvbnN0IHg9U3ltYm9sKCk7dC4kZmluYWxpemU9eDtjb25zdCBrPVN5bWJvbCgpO3QuJGZsdXNoSFRNTD1rO2NvbnN0IEM9U3ltYm9sKCk7dC4kZ2V0QXR0cmlidXRlSXQ9Qztjb25zdCB2PVN5bWJvbCgpO3QuJGdldEF0dHJpYnV0ZXM9djtjb25zdCBGPVN5bWJvbCgpO3QuJGdldEF2YWlsYWJsZVNwYWNlPUY7Y29uc3QgTz1TeW1ib2woKTt0LiRnZXRDaGlsZHJlbkJ5Q2xhc3M9Tztjb25zdCBUPVN5bWJvbCgpO3QuJGdldENoaWxkcmVuQnlOYW1lPVQ7Y29uc3QgTT1TeW1ib2woKTt0LiRnZXRDaGlsZHJlbkJ5TmFtZUl0PU07Y29uc3QgRT1TeW1ib2woKTt0LiRnZXREYXRhVmFsdWU9RTtjb25zdCBEPVN5bWJvbCgpO3QuJGdldEV4dHJhPUQ7Y29uc3QgTj1TeW1ib2woKTt0LiRnZXRSZWFsQ2hpbGRyZW5CeU5hbWVJdD1OO2NvbnN0IFI9U3ltYm9sKCk7dC4kZ2V0Q2hpbGRyZW49Ujtjb25zdCBMPVN5bWJvbCgpO3QuJGdldENvbnRhaW5lZENoaWxkcmVuPUw7Y29uc3Qgaj1TeW1ib2woKTt0LiRnZXROZXh0UGFnZT1qO2NvbnN0ICQ9U3ltYm9sKCk7dC4kZ2V0U3ViZm9ybVBhcmVudD0kO2NvbnN0IF89U3ltYm9sKCk7dC4kZ2V0UGFyZW50PV87Y29uc3QgVT1TeW1ib2woKTt0LiRnZXRUZW1wbGF0ZVJvb3Q9VTtjb25zdCBYPVN5bWJvbCgpO3QuJGdsb2JhbERhdGE9WDtjb25zdCBIPVN5bWJvbCgpO3QuJGhhc1NldHRhYmxlVmFsdWU9SDtjb25zdCBxPVN5bWJvbCgpO3QuJGlkcz1xO2NvbnN0IFc9U3ltYm9sKCk7dC4kaW5kZXhPZj1XO2NvbnN0IHo9U3ltYm9sKCk7dC4kaW5zZXJ0QXQ9ejtjb25zdCBHPVN5bWJvbCgpO3QuJGlzQ0RBVEFYbWw9Rztjb25zdCBWPVN5bWJvbCgpO3QuJGlzQmluZGFibGU9Vjtjb25zdCBLPVN5bWJvbCgpO3QuJGlzRGF0YVZhbHVlPUs7Y29uc3QgWT1TeW1ib2woKTt0LiRpc0Rlc2NlbmRlbnQ9WTtjb25zdCBKPVN5bWJvbCgpO3QuJGlzTnNBZ25vc3RpYz1KO2NvbnN0IFo9U3ltYm9sKCk7dC4kaXNTcGxpdHRhYmxlPVo7Y29uc3QgUT1TeW1ib2woKTt0LiRpc1RoZXJlTW9yZVdpZHRoPVE7Y29uc3QgZWU9U3ltYm9sKCk7dC4kaXNUcmFuc3BhcmVudD1lZTtjb25zdCB0ZT1TeW1ib2woKTt0LiRpc1VzYWJsZT10ZTtjb25zdCBhZT1TeW1ib2woKSxyZT1TeW1ib2woIm5hbWVzcGFjZUlkIik7dC4kbmFtZXNwYWNlSWQ9cmU7Y29uc3QgbmU9U3ltYm9sKCJub2RlTmFtZSIpO3QuJG5vZGVOYW1lPW5lO2NvbnN0IGllPVN5bWJvbCgpO3QuJG5zQXR0cmlidXRlcz1pZTtjb25zdCBzZT1TeW1ib2woKTt0LiRvbkNoaWxkPXNlO2NvbnN0IG9lPVN5bWJvbCgpO3QuJG9uQ2hpbGRDaGVjaz1vZTtjb25zdCBjZT1TeW1ib2woKTt0LiRvblRleHQ9Y2U7Y29uc3QgbGU9U3ltYm9sKCk7dC4kcHVzaEdseXBocz1sZTtjb25zdCBoZT1TeW1ib2woKTt0LiRwb3BQYXJhPWhlO2NvbnN0IHVlPVN5bWJvbCgpO3QuJHB1c2hQYXJhPXVlO2NvbnN0IGRlPVN5bWJvbCgpO3QuJHJlbW92ZUNoaWxkPWRlO2NvbnN0IGZlPVN5bWJvbCgicm9vdCIpO3QuJHJvb3Q9ZmU7Y29uc3QgZ2U9U3ltYm9sKCk7dC4kcmVzb2x2ZVByb3RvdHlwZXM9Z2U7Y29uc3QgcGU9U3ltYm9sKCk7dC4kc2VhcmNoTm9kZT1wZTtjb25zdCBtZT1TeW1ib2woKTt0LiRzZXRJZD1tZTtjb25zdCBiZT1TeW1ib2woKTt0LiRzZXRTZXRBdHRyaWJ1dGVzPWJlO2NvbnN0IHllPVN5bWJvbCgpO3QuJHNldFZhbHVlPXllO2NvbnN0IHdlPVN5bWJvbCgpO3QuJHRhYkluZGV4PXdlO2NvbnN0IFNlPVN5bWJvbCgpO3QuJHRleHQ9U2U7Y29uc3QgeGU9U3ltYm9sKCk7dC4kdG9QYWdlcz14ZTtjb25zdCBBZT1TeW1ib2woKTt0LiR0b0hUTUw9QWU7Y29uc3Qga2U9U3ltYm9sKCk7dC4kdG9TdHJpbmc9a2U7Y29uc3QgQ2U9U3ltYm9sKCk7dC4kdG9TdHlsZT1DZTtjb25zdCB2ZT1TeW1ib2woInVpZCIpO3QuJHVpZD12ZTtjb25zdCBGZT1TeW1ib2woKSxPZT1TeW1ib2woKSxUZT1TeW1ib2woKSxJZT1TeW1ib2woIl9jaGlsZHJlbiIpLFBlPVN5bWJvbCgpLE1lPVN5bWJvbCgpLEVlPVN5bWJvbCgpLERlPVN5bWJvbCgpLE5lPVN5bWJvbCgpLEJlPVN5bWJvbCgpLFJlPVN5bWJvbCgpLExlPVN5bWJvbCgpLGplPVN5bWJvbCgpLCRlPVN5bWJvbCgicGFyZW50IiksX2U9U3ltYm9sKCksVWU9U3ltYm9sKCksWGU9U3ltYm9sKCk7bGV0IEhlPTA7Y29uc3QgcWU9cy5OYW1lc3BhY2VJZHMuZGF0YXNldHMuaWQ7Y2xhc3MgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUsdCxhPSExKXt0aGlzW3JlXT1lO3RoaXNbbmVdPXQ7dGhpc1tSZV09YTt0aGlzWyRlXT1udWxsO3RoaXNbSWVdPVtdO3RoaXNbdmVdPWAke3R9JHtIZSsrfWA7dGhpc1tYXT1udWxsfVtzZV0oZSl7aWYoIXRoaXNbUmVdfHwhdGhpc1tvZV0oZSkpcmV0dXJuITE7Y29uc3QgdD1lW25lXSxhPXRoaXNbdF07aWYoIShhIGluc3RhbmNlb2YgWEZBT2JqZWN0QXJyYXkpKXtudWxsIT09YSYmdGhpc1tkZV0oYSk7dGhpc1t0XT1lO3RoaXNbaF0oZSk7cmV0dXJuITB9aWYoYS5wdXNoKGUpKXt0aGlzW2hdKGUpO3JldHVybiEwfWxldCByPSIiO3RoaXMuaWQ/cj1gIChpZDogJHt0aGlzLmlkfSlgOnRoaXMubmFtZSYmKHI9YCAobmFtZTogJHt0aGlzLm5hbWV9ICR7dGhpcy5oLnZhbHVlfSlgKTsoMCxuLndhcm4pKGBYRkEgLSBub2RlICIke3RoaXNbbmVdfSIke3J9IGhhcyBhbHJlYWR5IGVub3VnaCAiJHt0fSIhYCk7cmV0dXJuITF9W29lXShlKXtyZXR1cm4gdGhpcy5oYXNPd25Qcm9wZXJ0eShlW25lXSkmJmVbcmVdPT09dGhpc1tyZV19W0pdKCl7cmV0dXJuITF9W2NdKCl7cmV0dXJuITF9W0ddKCl7cmV0dXJuITF9W1ZdKCl7cmV0dXJuITF9W2hlXSgpe3RoaXMucGFyYSYmdGhpc1tVXSgpW1NdLnBhcmFTdGFjay5wb3AoKX1bdWVdKCl7dGhpc1tVXSgpW1NdLnBhcmFTdGFjay5wdXNoKHRoaXMucGFyYSl9W21lXShlKXt0aGlzLmlkJiZ0aGlzW3JlXT09PXMuTmFtZXNwYWNlSWRzLnRlbXBsYXRlLmlkJiZlLnNldCh0aGlzLmlkLHRoaXMpfVtVXSgpe3JldHVybiB0aGlzW1hdLnRlbXBsYXRlfVtaXSgpe3JldHVybiExfVtRXSgpe3JldHVybiExfVtoXShlKXtlWyRlXT10aGlzO3RoaXNbSWVdLnB1c2goZSk7IWVbWF0mJnRoaXNbWF0mJihlW1hdPXRoaXNbWF0pfVtkZV0oZSl7Y29uc3QgdD10aGlzW0llXS5pbmRleE9mKGUpO3RoaXNbSWVdLnNwbGljZSh0LDEpfVtIXSgpe3JldHVybiB0aGlzLmhhc093blByb3BlcnR5KCJ2YWx1ZSIpfVt5ZV0oZSl7fVtjZV0oZSl7fVt4XSgpe31bZF0oZSl7ZGVsZXRlIHRoaXNbUmVdO2lmKHRoaXNbZ10pe2UuY2xlYW4odGhpc1tnXSk7ZGVsZXRlIHRoaXNbZ119fVtXXShlKXtyZXR1cm4gdGhpc1tJZV0uaW5kZXhPZihlKX1bel0oZSx0KXt0WyRlXT10aGlzO3RoaXNbSWVdLnNwbGljZShlLDAsdCk7IXRbWF0mJnRoaXNbWF0mJih0W1hdPXRoaXNbWF0pfVtlZV0oKXtyZXR1cm4hdGhpcy5uYW1lfVthZV0oKXtyZXR1cm4iIn1bU2VdKCl7cmV0dXJuIDA9PT10aGlzW0llXS5sZW5ndGg/dGhpc1tiXTp0aGlzW0llXS5tYXAoKGU9PmVbU2VdKCkpKS5qb2luKCIiKX1nZXRbVGVdKCl7Y29uc3QgZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7aWYoIWUuX2F0dHJpYnV0ZXMpe2NvbnN0IHQ9ZS5fYXR0cmlidXRlcz1uZXcgU2V0O2Zvcihjb25zdCBlIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKXtpZihudWxsPT09dGhpc1tlXXx8dGhpc1tlXWluc3RhbmNlb2YgWEZBT2JqZWN0fHx0aGlzW2VdaW5zdGFuY2VvZiBYRkFPYmplY3RBcnJheSlicmVhazt0LmFkZChlKX19cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsVGUsZS5fYXR0cmlidXRlcyl9W1ldKGUpe2xldCB0PXRoaXM7Zm9yKDt0Oyl7aWYodD09PWUpcmV0dXJuITA7dD10W19dKCl9cmV0dXJuITF9W19dKCl7cmV0dXJuIHRoaXNbJGVdfVskXSgpe3JldHVybiB0aGlzW19dKCl9W1JdKGU9bnVsbCl7cmV0dXJuIGU/dGhpc1tlXTp0aGlzW0llXX1bd10oKXtjb25zdCBlPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpc1tiXSYmKGUuJGNvbnRlbnQ9dGhpc1tiXSk7Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2NvbnN0IGE9dGhpc1t0XTtudWxsIT09YSYmKGEgaW5zdGFuY2VvZiBYRkFPYmplY3Q/ZVt0XT1hW3ddKCk6YSBpbnN0YW5jZW9mIFhGQU9iamVjdEFycmF5P2EuaXNFbXB0eSgpfHwoZVt0XT1hLmR1bXAoKSk6ZVt0XT1hKX1yZXR1cm4gZX1bQ2VdKCl7cmV0dXJuIG51bGx9W0FlXSgpe3JldHVybiByLkhUTUxSZXN1bHQuRU1QVFl9KltMXSgpe2Zvcihjb25zdCBlIG9mIHRoaXNbUl0oKSl5aWVsZCBlfSpbRGVdKGUsdCl7Zm9yKGNvbnN0IGEgb2YgdGhpc1tMXSgpKWlmKCFlfHx0PT09ZS5oYXMoYVtuZV0pKXtjb25zdCBlPXRoaXNbRl0oKSx0PWFbQWVdKGUpO3Quc3VjY2Vzc3x8KHRoaXNbU10uZmFpbGluZ05vZGU9YSk7eWllbGQgdH19W2tdKCl7cmV0dXJuIG51bGx9W2xdKGUsdCl7dGhpc1tTXS5jaGlsZHJlbi5wdXNoKGUpfVtGXSgpe31bdV0oe2ZpbHRlcjplPW51bGwsaW5jbHVkZTp0PSEwfSl7aWYodGhpc1tTXS5nZW5lcmF0b3Ipe2NvbnN0IGU9dGhpc1tGXSgpLHQ9dGhpc1tTXS5mYWlsaW5nTm9kZVtBZV0oZSk7aWYoIXQuc3VjY2VzcylyZXR1cm4gdDt0Lmh0bWwmJnRoaXNbbF0odC5odG1sLHQuYmJveCk7ZGVsZXRlIHRoaXNbU10uZmFpbGluZ05vZGV9ZWxzZSB0aGlzW1NdLmdlbmVyYXRvcj10aGlzW0RlXShlLHQpO2Zvcig7Oyl7Y29uc3QgZT10aGlzW1NdLmdlbmVyYXRvci5uZXh0KCk7aWYoZS5kb25lKWJyZWFrO2NvbnN0IHQ9ZS52YWx1ZTtpZighdC5zdWNjZXNzKXJldHVybiB0O3QuaHRtbCYmdGhpc1tsXSh0Lmh0bWwsdC5iYm94KX10aGlzW1NdLmdlbmVyYXRvcj1udWxsO3JldHVybiByLkhUTUxSZXN1bHQuRU1QVFl9W2JlXShlKXt0aGlzW1VlXT1uZXcgU2V0KE9iamVjdC5rZXlzKGUpKX1bQmVdKGUpe2NvbnN0IHQ9dGhpc1tUZV0sYT10aGlzW1VlXTtyZXR1cm5bLi4uZV0uZmlsdGVyKChlPT50LmhhcyhlKSYmIWEuaGFzKGUpKSl9W2dlXShlLHQ9bmV3IFNldCl7Zm9yKGNvbnN0IGEgb2YgdGhpc1tJZV0pYVtfZV0oZSx0KX1bX2VdKGUsdCl7Y29uc3QgYT10aGlzW05lXShlLHQpO2E/dGhpc1tGZV0oYSxlLHQpOnRoaXNbZ2VdKGUsdCl9W05lXShlLHQpe2NvbnN0e3VzZTphLHVzZWhyZWY6cn09dGhpcztpZighYSYmIXIpcmV0dXJuIG51bGw7bGV0IGk9bnVsbCxzPW51bGwsYz1udWxsLGw9YTtpZihyKXtsPXI7ci5zdGFydHNXaXRoKCIjc29tKCIpJiZyLmVuZHNXaXRoKCIpIik/cz1yLnNsaWNlKCIjc29tKCIubGVuZ3RoLHIubGVuZ3RoLTEpOnIuc3RhcnRzV2l0aCgiLiNzb20oIikmJnIuZW5kc1dpdGgoIikiKT9zPXIuc2xpY2UoIi4jc29tKCIubGVuZ3RoLHIubGVuZ3RoLTEpOnIuc3RhcnRzV2l0aCgiIyIpP2M9ci5zbGljZSgxKTpyLnN0YXJ0c1dpdGgoIi4jIikmJihjPXIuc2xpY2UoMikpfWVsc2UgYS5zdGFydHNXaXRoKCIjIik/Yz1hLnNsaWNlKDEpOnM9YTt0aGlzLnVzZT10aGlzLnVzZWhyZWY9IiI7aWYoYylpPWUuZ2V0KGMpO2Vsc2V7aT0oMCxvLnNlYXJjaE5vZGUpKGUuZ2V0KGZlKSx0aGlzLHMsITAsITEpO2kmJihpPWlbMF0pfWlmKCFpKXsoMCxuLndhcm4pKGBYRkEgLSBJbnZhbGlkIHByb3RvdHlwZSByZWZlcmVuY2U6ICR7bH0uYCk7cmV0dXJuIG51bGx9aWYoaVtuZV0hPT10aGlzW25lXSl7KDAsbi53YXJuKShgWEZBIC0gSW5jb21wYXRpYmxlIHByb3RvdHlwZTogJHtpW25lXX0gIT09ICR7dGhpc1tuZV19LmApO3JldHVybiBudWxsfWlmKHQuaGFzKGkpKXsoMCxuLndhcm4pKCJYRkEgLSBDeWNsZSBkZXRlY3RlZCBpbiBwcm90b3R5cGVzIHVzZS4iKTtyZXR1cm4gbnVsbH10LmFkZChpKTtjb25zdCBoPWlbTmVdKGUsdCk7aCYmaVtGZV0oaCxlLHQpO2lbZ2VdKGUsdCk7dC5kZWxldGUoaSk7cmV0dXJuIGl9W0ZlXShlLHQsYSl7aWYoYS5oYXMoZSkpeygwLG4ud2FybikoIlhGQSAtIEN5Y2xlIGRldGVjdGVkIGluIHByb3RvdHlwZXMgdXNlLiIpO3JldHVybn0hdGhpc1tiXSYmZVtiXSYmKHRoaXNbYl09ZVtiXSk7bmV3IFNldChhKS5hZGQoZSk7Zm9yKGNvbnN0IHQgb2YgdGhpc1tCZV0oZVtVZV0pKXt0aGlzW3RdPWVbdF07dGhpc1tVZV0mJnRoaXNbVWVdLmFkZCh0KX1mb3IoY29uc3QgciBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSl7aWYodGhpc1tUZV0uaGFzKHIpKWNvbnRpbnVlO2NvbnN0IG49dGhpc1tyXSxpPWVbcl07aWYobiBpbnN0YW5jZW9mIFhGQU9iamVjdEFycmF5KXtmb3IoY29uc3QgZSBvZiBuW0llXSllW19lXSh0LGEpO2ZvcihsZXQgcj1uW0llXS5sZW5ndGgscz1pW0llXS5sZW5ndGg7cjxzO3IrKyl7Y29uc3QgaT1lW0llXVtyXVtwXSgpO2lmKCFuLnB1c2goaSkpYnJlYWs7aVskZV09dGhpczt0aGlzW0llXS5wdXNoKGkpO2lbX2VdKHQsYSl9fWVsc2UgaWYobnVsbD09PW4pe2lmKG51bGwhPT1pKXtjb25zdCBlPWlbcF0oKTtlWyRlXT10aGlzO3RoaXNbcl09ZTt0aGlzW0llXS5wdXNoKGUpO2VbX2VdKHQsYSl9fWVsc2V7bltnZV0odCxhKTtpJiZuW0ZlXShpLHQsYSl9fX1zdGF0aWNbUGVdKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2UubWFwKChlPT5YRkFPYmplY3RbUGVdKGUpKSk6Im9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZT9PYmplY3QuYXNzaWduKHt9LGUpOmV9W3BdKCl7Y29uc3QgZT1PYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSk7Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0aGlzKSl0cnl7ZVt0XT10aGlzW3RdfWNhdGNoKGEpeygwLG4uc2hhZG93KShlLHQsdGhpc1t0XSl9ZVt2ZV09YCR7ZVtuZV19JHtIZSsrfWA7ZVtJZV09W107Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2lmKHRoaXNbVGVdLmhhcyh0KSl7ZVt0XT1YRkFPYmplY3RbUGVdKHRoaXNbdF0pO2NvbnRpbnVlfWNvbnN0IGE9dGhpc1t0XTtlW3RdPWEgaW5zdGFuY2VvZiBYRkFPYmplY3RBcnJheT9uZXcgWEZBT2JqZWN0QXJyYXkoYVtMZV0pOm51bGx9Zm9yKGNvbnN0IHQgb2YgdGhpc1tJZV0pe2NvbnN0IGE9dFtuZV0scj10W3BdKCk7ZVtJZV0ucHVzaChyKTtyWyRlXT1lO251bGw9PT1lW2FdP2VbYV09cjplW2FdW0llXS5wdXNoKHIpfXJldHVybiBlfVtSXShlPW51bGwpe3JldHVybiBlP3RoaXNbSWVdLmZpbHRlcigodD0+dFtuZV09PT1lKSk6dGhpc1tJZV19W09dKGUpe3JldHVybiB0aGlzW2VdfVtUXShlLHQsYT0hMCl7cmV0dXJuIEFycmF5LmZyb20odGhpc1tNXShlLHQsYSkpfSpbTV0oZSx0LGE9ITApe2lmKCJwYXJlbnQiIT09ZSl7Zm9yKGNvbnN0IGEgb2YgdGhpc1tJZV0pe2FbbmVdPT09ZSYmKHlpZWxkIGEpO2EubmFtZT09PWUmJih5aWVsZCBhKTsodHx8YVtlZV0oKSkmJih5aWVsZCphW01dKGUsdCwhMSkpfWEmJnRoaXNbVGVdLmhhcyhlKSYmKHlpZWxkIG5ldyBYRkFBdHRyaWJ1dGUodGhpcyxlLHRoaXNbZV0pKX1lbHNlIHlpZWxkIHRoaXNbJGVdfX10LlhGQU9iamVjdD1YRkFPYmplY3Q7Y2xhc3MgWEZBT2JqZWN0QXJyYXl7Y29uc3RydWN0b3IoZT0xLzApe3RoaXNbTGVdPWU7dGhpc1tJZV09W119cHVzaChlKXtpZih0aGlzW0llXS5sZW5ndGg8PXRoaXNbTGVdKXt0aGlzW0llXS5wdXNoKGUpO3JldHVybiEwfSgwLG4ud2FybikoYFhGQSAtIG5vZGUgIiR7ZVtuZV19IiBhY2NlcHRzIG5vIG1vcmUgdGhhbiAke3RoaXNbTGVdfSBjaGlsZHJlbmApO3JldHVybiExfWlzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXNbSWVdLmxlbmd0aH1kdW1wKCl7cmV0dXJuIDE9PT10aGlzW0llXS5sZW5ndGg/dGhpc1tJZV1bMF1bd10oKTp0aGlzW0llXS5tYXAoKGU9PmVbd10oKSkpfVtwXSgpe2NvbnN0IGU9bmV3IFhGQU9iamVjdEFycmF5KHRoaXNbTGVdKTtlW0llXT10aGlzW0llXS5tYXAoKGU9PmVbcF0oKSkpO3JldHVybiBlfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzW0llXX1jbGVhcigpe3RoaXNbSWVdLmxlbmd0aD0wfX10LlhGQU9iamVjdEFycmF5PVhGQU9iamVjdEFycmF5O2NsYXNzIFhGQUF0dHJpYnV0ZXtjb25zdHJ1Y3RvcihlLHQsYSl7dGhpc1skZV09ZTt0aGlzW25lXT10O3RoaXNbYl09YTt0aGlzW21dPSExO3RoaXNbdmVdPSJhdHRyaWJ1dGUiK0hlKyt9W19dKCl7cmV0dXJuIHRoaXNbJGVdfVtLXSgpe3JldHVybiEwfVtFXSgpe3JldHVybiB0aGlzW2JdLnRyaW0oKX1beWVdKGUpe2U9ZS52YWx1ZXx8IiI7dGhpc1tiXT1lLnRvU3RyaW5nKCl9W1NlXSgpe3JldHVybiB0aGlzW2JdfVtZXShlKXtyZXR1cm4gdGhpc1skZV09PT1lfHx0aGlzWyRlXVtZXShlKX19dC5YRkFBdHRyaWJ1dGU9WEZBQXR0cmlidXRlO2NsYXNzIFhtbE9iamVjdCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlLHQsYT17fSl7c3VwZXIoZSx0KTt0aGlzW2JdPSIiO3RoaXNbTWVdPW51bGw7aWYoIiN0ZXh0IiE9PXQpe2NvbnN0IGU9bmV3IE1hcDt0aGlzW09lXT1lO2Zvcihjb25zdFt0LHJdb2YgT2JqZWN0LmVudHJpZXMoYSkpZS5zZXQodCxuZXcgWEZBQXR0cmlidXRlKHRoaXMsdCxyKSk7aWYoYS5oYXNPd25Qcm9wZXJ0eShpZSkpe2NvbnN0IGU9YVtpZV0ueGZhLmRhdGFOb2RlO3ZvaWQgMCE9PWUmJigiZGF0YUdyb3VwIj09PWU/dGhpc1tNZV09ITE6ImRhdGFWYWx1ZSI9PT1lJiYodGhpc1tNZV09ITApKX19dGhpc1ttXT0hMX1ba2VdKGUpe2NvbnN0IHQ9dGhpc1tuZV07aWYoIiN0ZXh0Ij09PXQpe2UucHVzaCgoMCxpLmVuY29kZVRvWG1sU3RyaW5nKSh0aGlzW2JdKSk7cmV0dXJufWNvbnN0IGE9KDAsbi51dGY4U3RyaW5nVG9TdHJpbmcpKHQpLHI9dGhpc1tyZV09PT1xZT8ieGZhOiI6IiI7ZS5wdXNoKGA8JHtyfSR7YX1gKTtmb3IoY29uc3RbdCxhXW9mIHRoaXNbT2VdLmVudHJpZXMoKSl7Y29uc3Qgcj0oMCxuLnV0ZjhTdHJpbmdUb1N0cmluZykodCk7ZS5wdXNoKGAgJHtyfT0iJHsoMCxpLmVuY29kZVRvWG1sU3RyaW5nKShhW2JdKX0iYCl9bnVsbCE9PXRoaXNbTWVdJiYodGhpc1tNZV0/ZS5wdXNoKCcgeGZhOmRhdGFOb2RlPSJkYXRhVmFsdWUiJyk6ZS5wdXNoKCcgeGZhOmRhdGFOb2RlPSJkYXRhR3JvdXAiJykpO2lmKHRoaXNbYl18fDAhPT10aGlzW0llXS5sZW5ndGgpe2UucHVzaCgiPiIpO2lmKHRoaXNbYl0pInN0cmluZyI9PXR5cGVvZiB0aGlzW2JdP2UucHVzaCgoMCxpLmVuY29kZVRvWG1sU3RyaW5nKSh0aGlzW2JdKSk6dGhpc1tiXVtrZV0oZSk7ZWxzZSBmb3IoY29uc3QgdCBvZiB0aGlzW0llXSl0W2tlXShlKTtlLnB1c2goYDwvJHtyfSR7YX0+YCl9ZWxzZSBlLnB1c2goIi8+Iil9W3NlXShlKXtpZih0aGlzW2JdKXtjb25zdCBlPW5ldyBYbWxPYmplY3QodGhpc1tyZV0sIiN0ZXh0Iik7dGhpc1toXShlKTtlW2JdPXRoaXNbYl07dGhpc1tiXT0iIn10aGlzW2hdKGUpO3JldHVybiEwfVtjZV0oZSl7dGhpc1tiXSs9ZX1beF0oKXtpZih0aGlzW2JdJiZ0aGlzW0llXS5sZW5ndGg+MCl7Y29uc3QgZT1uZXcgWG1sT2JqZWN0KHRoaXNbcmVdLCIjdGV4dCIpO3RoaXNbaF0oZSk7ZVtiXT10aGlzW2JdO2RlbGV0ZSB0aGlzW2JdfX1bQWVdKCl7cmV0dXJuIiN0ZXh0Ij09PXRoaXNbbmVdP3IuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiIjdGV4dCIsdmFsdWU6dGhpc1tiXX0pOnIuSFRNTFJlc3VsdC5FTVBUWX1bUl0oZT1udWxsKXtyZXR1cm4gZT90aGlzW0llXS5maWx0ZXIoKHQ9PnRbbmVdPT09ZSkpOnRoaXNbSWVdfVt2XSgpe3JldHVybiB0aGlzW09lXX1bT10oZSl7Y29uc3QgdD10aGlzW09lXS5nZXQoZSk7cmV0dXJuIHZvaWQgMCE9PXQ/dDp0aGlzW1JdKGUpfSpbTV0oZSx0KXtjb25zdCBhPXRoaXNbT2VdLmdldChlKTthJiYoeWllbGQgYSk7Zm9yKGNvbnN0IGEgb2YgdGhpc1tJZV0pe2FbbmVdPT09ZSYmKHlpZWxkIGEpO3QmJih5aWVsZCphW01dKGUsdCkpfX0qW0NdKGUsdCl7Y29uc3QgYT10aGlzW09lXS5nZXQoZSk7IWF8fHQmJmFbbV18fCh5aWVsZCBhKTtmb3IoY29uc3QgYSBvZiB0aGlzW0llXSl5aWVsZCphW0NdKGUsdCl9KltOXShlLHQsYSl7Zm9yKGNvbnN0IHIgb2YgdGhpc1tJZV0pe3JbbmVdIT09ZXx8YSYmclttXXx8KHlpZWxkIHIpO3QmJih5aWVsZCpyW05dKGUsdCxhKSl9fVtLXSgpe3JldHVybiBudWxsPT09dGhpc1tNZV0/MD09PXRoaXNbSWVdLmxlbmd0aHx8dGhpc1tJZV1bMF1bcmVdPT09cy5OYW1lc3BhY2VJZHMueGh0bWwuaWQ6dGhpc1tNZV19W0VdKCl7cmV0dXJuIG51bGw9PT10aGlzW01lXT8wPT09dGhpc1tJZV0ubGVuZ3RoP3RoaXNbYl0udHJpbSgpOnRoaXNbSWVdWzBdW3JlXT09PXMuTmFtZXNwYWNlSWRzLnhodG1sLmlkP3RoaXNbSWVdWzBdW1NlXSgpLnRyaW0oKTpudWxsOnRoaXNbYl0udHJpbSgpfVt5ZV0oZSl7ZT1lLnZhbHVlfHwiIjt0aGlzW2JdPWUudG9TdHJpbmcoKX1bd10oZT0hMSl7Y29uc3QgdD1PYmplY3QuY3JlYXRlKG51bGwpO2UmJih0LiRucz10aGlzW3JlXSk7dGhpc1tiXSYmKHQuJGNvbnRlbnQ9dGhpc1tiXSk7dC4kbmFtZT10aGlzW25lXTt0LmNoaWxkcmVuPVtdO2Zvcihjb25zdCBhIG9mIHRoaXNbSWVdKXQuY2hpbGRyZW4ucHVzaChhW3ddKGUpKTt0LmF0dHJpYnV0ZXM9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IoY29uc3RbZSxhXW9mIHRoaXNbT2VdKXQuYXR0cmlidXRlc1tlXT1hW2JdO3JldHVybiB0fX10LlhtbE9iamVjdD1YbWxPYmplY3Q7Y2xhc3MgQ29udGVudE9iamVjdCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdCk7dGhpc1tiXT0iIn1bY2VdKGUpe3RoaXNbYl0rPWV9W3hdKCl7fX10LkNvbnRlbnRPYmplY3Q9Q29udGVudE9iamVjdDt0Lk9wdGlvbk9iamVjdD1jbGFzcyBPcHRpb25PYmplY3QgZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcihlLHQpO3RoaXNbamVdPWF9W3hdKCl7dGhpc1tiXT0oMCxyLmdldEtleXdvcmQpKHtkYXRhOnRoaXNbYl0sZGVmYXVsdFZhbHVlOnRoaXNbamVdWzBdLHZhbGlkYXRlOmU9PnRoaXNbamVdLmluY2x1ZGVzKGUpfSl9W2RdKGUpe3N1cGVyW2RdKGUpO2RlbGV0ZSB0aGlzW2plXX19O3QuU3RyaW5nT2JqZWN0PWNsYXNzIFN0cmluZ09iamVjdCBleHRlbmRzIENvbnRlbnRPYmplY3R7W3hdKCl7dGhpc1tiXT10aGlzW2JdLnRyaW0oKX19O2NsYXNzIEludGVnZXJPYmplY3QgZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUsdCxhLHIpe3N1cGVyKGUsdCk7dGhpc1tFZV09YTt0aGlzW1hlXT1yfVt4XSgpe3RoaXNbYl09KDAsci5nZXRJbnRlZ2VyKSh7ZGF0YTp0aGlzW2JdLGRlZmF1bHRWYWx1ZTp0aGlzW0VlXSx2YWxpZGF0ZTp0aGlzW1hlXX0pfVtkXShlKXtzdXBlcltkXShlKTtkZWxldGUgdGhpc1tFZV07ZGVsZXRlIHRoaXNbWGVdfX10LkludGVnZXJPYmplY3Q9SW50ZWdlck9iamVjdDt0Lk9wdGlvbjAxPWNsYXNzIE9wdGlvbjAxIGV4dGVuZHMgSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdCwwLChlPT4xPT09ZSkpfX07dC5PcHRpb24xMD1jbGFzcyBPcHRpb24xMCBleHRlbmRzIEludGVnZXJPYmplY3R7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLHQsMSwoZT0+MD09PWUpKX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuSFRNTFJlc3VsdD12b2lkIDA7dC5nZXRCQm94PWZ1bmN0aW9uIGdldEJCb3goZSl7Y29uc3QgdD0tMTtpZighZSlyZXR1cm57eDp0LHk6dCx3aWR0aDp0LGhlaWdodDp0fTtjb25zdCBhPWUudHJpbSgpLnNwbGl0KC9ccyosXHMqLykubWFwKChlPT5nZXRNZWFzdXJlbWVudChlLCItMSIpKSk7aWYoYS5sZW5ndGg8NHx8YVsyXTwwfHxhWzNdPDApcmV0dXJue3g6dCx5OnQsd2lkdGg6dCxoZWlnaHQ6dH07Y29uc3RbcixuLGksc109YTtyZXR1cm57eDpyLHk6bix3aWR0aDppLGhlaWdodDpzfX07dC5nZXRDb2xvcj1mdW5jdGlvbiBnZXRDb2xvcihlLHQ9WzAsMCwwXSl7bGV0W2EscixuXT10O2lmKCFlKXJldHVybntyOmEsZzpyLGI6bn07Y29uc3QgaT1lLnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8pLm1hcCgoZT0+TWF0aC5taW4oTWF0aC5tYXgoMCxwYXJzZUludChlLnRyaW0oKSwxMCkpLDI1NSkpKS5tYXAoKGU9PmlzTmFOKGUpPzA6ZSkpO2lmKGkubGVuZ3RoPDMpcmV0dXJue3I6YSxnOnIsYjpufTtbYSxyLG5dPWk7cmV0dXJue3I6YSxnOnIsYjpufX07dC5nZXRGbG9hdD1mdW5jdGlvbiBnZXRGbG9hdCh7ZGF0YTplLGRlZmF1bHRWYWx1ZTp0LHZhbGlkYXRlOmF9KXtpZighZSlyZXR1cm4gdDtlPWUudHJpbSgpO2NvbnN0IHI9cGFyc2VGbG9hdChlKTtpZighaXNOYU4ocikmJmEocikpcmV0dXJuIHI7cmV0dXJuIHR9O3QuZ2V0SW50ZWdlcj1mdW5jdGlvbiBnZXRJbnRlZ2VyKHtkYXRhOmUsZGVmYXVsdFZhbHVlOnQsdmFsaWRhdGU6YX0pe2lmKCFlKXJldHVybiB0O2U9ZS50cmltKCk7Y29uc3Qgcj1wYXJzZUludChlLDEwKTtpZighaXNOYU4ocikmJmEocikpcmV0dXJuIHI7cmV0dXJuIHR9O3QuZ2V0S2V5d29yZD1nZXRLZXl3b3JkO3QuZ2V0TWVhc3VyZW1lbnQ9Z2V0TWVhc3VyZW1lbnQ7dC5nZXRSYXRpbz1mdW5jdGlvbiBnZXRSYXRpbyhlKXtpZighZSlyZXR1cm57bnVtOjEsZGVuOjF9O2NvbnN0IHQ9ZS50cmltKCkuc3BsaXQoL1xzKjpccyovKS5tYXAoKGU9PnBhcnNlRmxvYXQoZSkpKS5maWx0ZXIoKGU9PiFpc05hTihlKSkpOzE9PT10Lmxlbmd0aCYmdC5wdXNoKDEpO2lmKDA9PT10Lmxlbmd0aClyZXR1cm57bnVtOjEsZGVuOjF9O2NvbnN0W2Escl09dDtyZXR1cm57bnVtOmEsZGVuOnJ9fTt0LmdldFJlbGV2YW50PWZ1bmN0aW9uIGdldFJlbGV2YW50KGUpe2lmKCFlKXJldHVybltdO3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXHMrLykubWFwKChlPT4oe2V4Y2x1ZGVkOiItIj09PWVbMF0sdmlld25hbWU6ZS5zdWJzdHJpbmcoMSl9KSkpfTt0LmdldFN0cmluZ09wdGlvbj1mdW5jdGlvbiBnZXRTdHJpbmdPcHRpb24oZSx0KXtyZXR1cm4gZ2V0S2V5d29yZCh7ZGF0YTplLGRlZmF1bHRWYWx1ZTp0WzBdLHZhbGlkYXRlOmU9PnQuaW5jbHVkZXMoZSl9KX07dC5zdHJpcFF1b3Rlcz1mdW5jdGlvbiBzdHJpcFF1b3RlcyhlKXtpZihlLnN0YXJ0c1dpdGgoIiciKXx8ZS5zdGFydHNXaXRoKCciJykpcmV0dXJuIGUuc2xpY2UoMSxlLmxlbmd0aC0xKTtyZXR1cm4gZX07dmFyIHI9YSgyKTtjb25zdCBuPXtwdDplPT5lLGNtOmU9PmUvMi41NCo3MixtbTplPT5lLzI1LjQqNzIsaW46ZT0+NzIqZSxweDplPT5lfSxpPS8oWystXT9cZCtcLj9cZCopKC4qKS87ZnVuY3Rpb24gZ2V0S2V5d29yZCh7ZGF0YTplLGRlZmF1bHRWYWx1ZTp0LHZhbGlkYXRlOmF9KXtyZXR1cm4gZSYmYShlPWUudHJpbSgpKT9lOnR9ZnVuY3Rpb24gZ2V0TWVhc3VyZW1lbnQoZSx0PSIwIil7dD10fHwiMCI7aWYoIWUpcmV0dXJuIGdldE1lYXN1cmVtZW50KHQpO2NvbnN0IGE9ZS50cmltKCkubWF0Y2goaSk7aWYoIWEpcmV0dXJuIGdldE1lYXN1cmVtZW50KHQpO2NvbnN0WyxyLHNdPWEsbz1wYXJzZUZsb2F0KHIpO2lmKGlzTmFOKG8pKXJldHVybiBnZXRNZWFzdXJlbWVudCh0KTtpZigwPT09bylyZXR1cm4gMDtjb25zdCBjPW5bc107cmV0dXJuIGM/YyhvKTpvfWNsYXNzIEhUTUxSZXN1bHR7c3RhdGljIGdldCBGQUlMVVJFKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsIkZBSUxVUkUiLG5ldyBIVE1MUmVzdWx0KCExLG51bGwsbnVsbCxudWxsKSl9c3RhdGljIGdldCBFTVBUWSgpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJFTVBUWSIsbmV3IEhUTUxSZXN1bHQoITAsbnVsbCxudWxsLG51bGwpKX1jb25zdHJ1Y3RvcihlLHQsYSxyKXt0aGlzLnN1Y2Nlc3M9ZTt0aGlzLmh0bWw9dDt0aGlzLmJib3g9YTt0aGlzLmJyZWFrTm9kZT1yfWlzQnJlYWsoKXtyZXR1cm4hIXRoaXMuYnJlYWtOb2RlfXN0YXRpYyBicmVha05vZGUoZSl7cmV0dXJuIG5ldyBIVE1MUmVzdWx0KCExLG51bGwsbnVsbCxlKX1zdGF0aWMgc3VjY2VzcyhlLHQ9bnVsbCl7cmV0dXJuIG5ldyBIVE1MUmVzdWx0KCEwLGUsdCxudWxsKX19dC5IVE1MUmVzdWx0PUhUTUxSZXN1bHR9LChlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuTmFtZXNwYWNlSWRzPXQuJGJ1aWxkWEZBT2JqZWN0PXZvaWQgMDtjb25zdCBhPVN5bWJvbCgpO3QuJGJ1aWxkWEZBT2JqZWN0PWE7dC5OYW1lc3BhY2VJZHM9e2NvbmZpZzp7aWQ6MCxjaGVjazplPT5lLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGNpLyIpfSxjb25uZWN0aW9uU2V0OntpZDoxLGNoZWNrOmU9PmUuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtY29ubmVjdGlvbi1zZXQvIil9LGRhdGFzZXRzOntpZDoyLGNoZWNrOmU9PmUuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtZGF0YS8iKX0sZm9ybTp7aWQ6MyxjaGVjazplPT5lLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLWZvcm0vIil9LGxvY2FsZVNldDp7aWQ6NCxjaGVjazplPT5lLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLWxvY2FsZS1zZXQvIil9LHBkZjp7aWQ6NSxjaGVjazplPT4iaHR0cDovL25zLmFkb2JlLmNvbS94ZHAvcGRmLyI9PT1lfSxzaWduYXR1cmU6e2lkOjYsY2hlY2s6ZT0+Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiPT09ZX0sc291cmNlU2V0OntpZDo3LGNoZWNrOmU9PmUuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtc291cmNlLXNldC8iKX0sc3R5bGVzaGVldDp7aWQ6OCxjaGVjazplPT4iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIj09PWV9LHRlbXBsYXRlOntpZDo5LGNoZWNrOmU9PmUuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtdGVtcGxhdGUvIil9LHhkYzp7aWQ6MTAsY2hlY2s6ZT0+ZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hkYy8iKX0seGRwOntpZDoxMSxjaGVjazplPT4iaHR0cDovL25zLmFkb2JlLmNvbS94ZHAvIj09PWV9LHhmZGY6e2lkOjEyLGNoZWNrOmU9PiJodHRwOi8vbnMuYWRvYmUuY29tL3hmZGYvIj09PWV9LHhodG1sOntpZDoxMyxjaGVjazplPT4iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI9PT1lfSx4bXBtZXRhOntpZDoxNCxjaGVjazplPT4iaHR0cDovL25zLmFkb2JlLmNvbS94bXBtZXRhLyI9PT1lfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5jcmVhdGVEYXRhTm9kZT1mdW5jdGlvbiBjcmVhdGVEYXRhTm9kZShlLHQsYSl7Y29uc3Qgbj1wYXJzZUV4cHJlc3Npb24oYSk7aWYoIW4pcmV0dXJuIG51bGw7aWYobi5zb21lKChlPT5lLm9wZXJhdG9yPT09bCkpKXJldHVybiBudWxsO2NvbnN0IHM9Zi5nZXQoblswXS5uYW1lKTtsZXQgbz0wO2lmKHMpe2U9cyhlLHQpO289MX1lbHNlIGU9dHx8ZTtmb3IobGV0IHQ9bi5sZW5ndGg7bzx0O28rKyl7Y29uc3R7bmFtZTp0LG9wZXJhdG9yOmEsaW5kZXg6c309bltvXTtpZighaXNGaW5pdGUocykpe25bb10uaW5kZXg9MDtyZXR1cm4gY3JlYXRlTm9kZXMoZSxuLnNsaWNlKG8pKX1sZXQgdTtzd2l0Y2goYSl7Y2FzZSBjOnU9ZVtyLiRnZXRDaGlsZHJlbkJ5TmFtZV0odCwhMSk7YnJlYWs7Y2FzZSBsOnU9ZVtyLiRnZXRDaGlsZHJlbkJ5TmFtZV0odCwhMCk7YnJlYWs7Y2FzZSBoOnU9ZVtyLiRnZXRDaGlsZHJlbkJ5Q2xhc3NdKHQpO3U9dSBpbnN0YW5jZW9mIHIuWEZBT2JqZWN0QXJyYXk/dS5jaGlsZHJlbjpbdV19aWYoMD09PXUubGVuZ3RoKXJldHVybiBjcmVhdGVOb2RlcyhlLG4uc2xpY2UobykpO2lmKCEoczx1Lmxlbmd0aCkpe25bb10uaW5kZXg9cy11Lmxlbmd0aDtyZXR1cm4gY3JlYXRlTm9kZXMoZSxuLnNsaWNlKG8pKX17Y29uc3QgdD11W3NdO2lmKCEodCBpbnN0YW5jZW9mIHIuWEZBT2JqZWN0KSl7KDAsaS53YXJuKSgiWEZBIC0gQ2Fubm90IGNyZWF0ZSBhIG5vZGUuIik7cmV0dXJuIG51bGx9ZT10fX1yZXR1cm4gbnVsbH07dC5zZWFyY2hOb2RlPWZ1bmN0aW9uIHNlYXJjaE5vZGUoZSx0LGEsbj0hMCxpPSEwKXtjb25zdCBzPXBhcnNlRXhwcmVzc2lvbihhLG4pO2lmKCFzKXJldHVybiBudWxsO2NvbnN0IG89Zi5nZXQoc1swXS5uYW1lKTtsZXQgdSxkPTA7aWYobyl7dT0hMDtlPVtvKGUsdCldO2Q9MX1lbHNle3U9bnVsbD09PXQ7ZT1bdHx8ZV19Zm9yKGxldCBhPXMubGVuZ3RoO2Q8YTtkKyspe2NvbnN0e25hbWU6YSxjYWNoZU5hbWU6bixvcGVyYXRvcjpvLGluZGV4OmZ9PXNbZF0scD1bXTtmb3IoY29uc3QgdCBvZiBlKXtpZighKHQgaW5zdGFuY2VvZiByLlhGQU9iamVjdCkpY29udGludWU7bGV0IGUscztpZihpKXtzPWcuZ2V0KHQpO2lmKCFzKXtzPW5ldyBNYXA7Zy5zZXQodCxzKX1lPXMuZ2V0KG4pfWlmKCFlKXtzd2l0Y2gobyl7Y2FzZSBjOmU9dFtyLiRnZXRDaGlsZHJlbkJ5TmFtZV0oYSwhMSk7YnJlYWs7Y2FzZSBsOmU9dFtyLiRnZXRDaGlsZHJlbkJ5TmFtZV0oYSwhMCk7YnJlYWs7Y2FzZSBoOmU9dFtyLiRnZXRDaGlsZHJlbkJ5Q2xhc3NdKGEpO2U9ZSBpbnN0YW5jZW9mIHIuWEZBT2JqZWN0QXJyYXk/ZS5jaGlsZHJlbjpbZV19aSYmcy5zZXQobixlKX1lLmxlbmd0aD4wJiZwLnB1c2goZSl9aWYoMCE9PXAubGVuZ3RofHx1fHwwIT09ZCllPWlzRmluaXRlKGYpP3AuZmlsdGVyKChlPT5mPGUubGVuZ3RoKSkubWFwKChlPT5lW2ZdKSk6cC5mbGF0KCk7ZWxzZXtjb25zdCBhPXRbci4kZ2V0UGFyZW50XSgpO2lmKCEodD1hKSlyZXR1cm4gbnVsbDtkPS0xO2U9W3RdfX1pZigwPT09ZS5sZW5ndGgpcmV0dXJuIG51bGw7cmV0dXJuIGV9O3ZhciByPWEoNzUpLG49YSg3NyksaT1hKDIpO2NvbnN0IHM9L15bXi5bXSsvLG89L15bXlxdXSsvLGM9MCxsPTEsaD0yLHU9MyxkPTQsZj1uZXcgTWFwKFtbIiRkYXRhIiwoZSx0KT0+ZS5kYXRhc2V0cz9lLmRhdGFzZXRzLmRhdGE6ZV0sWyIkcmVjb3JkIiwoZSx0KT0+KGUuZGF0YXNldHM/ZS5kYXRhc2V0cy5kYXRhOmUpW3IuJGdldENoaWxkcmVuXSgpWzBdXSxbIiR0ZW1wbGF0ZSIsKGUsdCk9PmUudGVtcGxhdGVdLFsiJGNvbm5lY3Rpb25TZXQiLChlLHQpPT5lLmNvbm5lY3Rpb25TZXRdLFsiJGZvcm0iLChlLHQpPT5lLmZvcm1dLFsiJGxheW91dCIsKGUsdCk9PmUubGF5b3V0XSxbIiRob3N0IiwoZSx0KT0+ZS5ob3N0XSxbIiRkYXRhV2luZG93IiwoZSx0KT0+ZS5kYXRhV2luZG93XSxbIiRldmVudCIsKGUsdCk9PmUuZXZlbnRdLFsiISIsKGUsdCk9PmUuZGF0YXNldHNdLFsiJHhmYSIsKGUsdCk9PmVdLFsieGZhIiwoZSx0KT0+ZV0sWyIkIiwoZSx0KT0+dF1dKSxnPW5ldyBXZWFrTWFwLHA9bi5OYW1lc3BhY2VJZHMuZGF0YXNldHMuaWQ7ZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9uKGUsdCxhPSEwKXtsZXQgcj1lLm1hdGNoKHMpO2lmKCFyKXJldHVybiBudWxsO2xldFtuXT1yO2NvbnN0IGY9W3tuYW1lOm4sY2FjaGVOYW1lOiIuIituLGluZGV4OjAsanM6bnVsbCxmb3JtQ2FsYzpudWxsLG9wZXJhdG9yOmN9XTtsZXQgZz1uLmxlbmd0aDtmb3IoO2c8ZS5sZW5ndGg7KXtjb25zdCBtPWc7aWYoIlsiPT09ZS5jaGFyQXQoZysrKSl7cj1lLnNsaWNlKGcpLm1hdGNoKG8pO2lmKCFyKXsoMCxpLndhcm4pKCJYRkEgLSBJbnZhbGlkIGluZGV4IGluIFNPTSBleHByZXNzaW9uIik7cmV0dXJuIG51bGx9Zi5hdCgtMSkuaW5kZXg9IioiPT09KHA9KHA9clswXSkudHJpbSgpKT8xLzA6cGFyc2VJbnQocCwxMCl8fDA7Zys9clswXS5sZW5ndGgrMTtjb250aW51ZX1sZXQgYjtzd2l0Y2goZS5jaGFyQXQoZykpe2Nhc2UiLiI6aWYoIXQpcmV0dXJuIG51bGw7ZysrO2I9bDticmVhaztjYXNlIiMiOmcrKztiPWg7YnJlYWs7Y2FzZSJbIjppZihhKXsoMCxpLndhcm4pKCJYRkEgLSBTT00gZXhwcmVzc2lvbiBjb250YWlucyBhIEZvcm1DYWxjIHN1YmV4cHJlc3Npb24gd2hpY2ggaXMgbm90IHN1cHBvcnRlZCBmb3Igbm93LiIpO3JldHVybiBudWxsfWI9dTticmVhaztjYXNlIigiOmlmKGEpeygwLGkud2FybikoIlhGQSAtIFNPTSBleHByZXNzaW9uIGNvbnRhaW5zIGEgSmF2YVNjcmlwdCBzdWJleHByZXNzaW9uIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIG5vdy4iKTtyZXR1cm4gbnVsbH1iPWQ7YnJlYWs7ZGVmYXVsdDpiPWN9cj1lLnNsaWNlKGcpLm1hdGNoKHMpO2lmKCFyKWJyZWFrO1tuXT1yO2crPW4ubGVuZ3RoO2YucHVzaCh7bmFtZTpuLGNhY2hlTmFtZTplLnNsaWNlKG0sZyksb3BlcmF0b3I6YixpbmRleDowLGpzOm51bGwsZm9ybUNhbGM6bnVsbH0pfXZhciBwO3JldHVybiBmfWZ1bmN0aW9uIGNyZWF0ZU5vZGVzKGUsdCl7bGV0IGE9bnVsbDtmb3IoY29uc3R7bmFtZTpuLGluZGV4Oml9b2YgdCl7Zm9yKGxldCB0PTAscz1pc0Zpbml0ZShpKT9pOjA7dDw9czt0Kyspe2NvbnN0IHQ9ZVtyLiRuYW1lc3BhY2VJZF09PT1wPy0xOmVbci4kbmFtZXNwYWNlSWRdO2E9bmV3IHIuWG1sT2JqZWN0KHQsbik7ZVtyLiRhcHBlbmRDaGlsZF0oYSl9ZT1hfXJldHVybiBhfX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkJpbmRlcj12b2lkIDA7dmFyIHI9YSg3NSksbj1hKDgwKSxpPWEoNzgpLHM9YSg3Nyksbz1hKDIpO2NvbnN0IGM9cy5OYW1lc3BhY2VJZHMuZGF0YXNldHMuaWQ7ZnVuY3Rpb24gY3JlYXRlVGV4dChlKXtjb25zdCB0PW5ldyBuLlRleHQoe30pO3Rbci4kY29udGVudF09ZTtyZXR1cm4gdH10LkJpbmRlcj1jbGFzcyBCaW5kZXJ7Y29uc3RydWN0b3IoZSl7dGhpcy5yb290PWU7dGhpcy5kYXRhc2V0cz1lLmRhdGFzZXRzO2UuZGF0YXNldHMmJmUuZGF0YXNldHMuZGF0YT90aGlzLmRhdGE9ZS5kYXRhc2V0cy5kYXRhOnRoaXMuZGF0YT1uZXcgci5YbWxPYmplY3Qocy5OYW1lc3BhY2VJZHMuZGF0YXNldHMuaWQsImRhdGEiKTt0aGlzLmVtcHR5TWVyZ2U9MD09PXRoaXMuZGF0YVtyLiRnZXRDaGlsZHJlbl0oKS5sZW5ndGg7dGhpcy5yb290LmZvcm09dGhpcy5mb3JtPWUudGVtcGxhdGVbci4kY2xvbmVdKCl9X2lzQ29uc3VtZURhdGEoKXtyZXR1cm4hdGhpcy5lbXB0eU1lcmdlJiZ0aGlzLl9tZXJnZU1vZGV9X2lzTWF0Y2hUZW1wbGF0ZSgpe3JldHVybiF0aGlzLl9pc0NvbnN1bWVEYXRhKCl9YmluZCgpe3RoaXMuX2JpbmRFbGVtZW50KHRoaXMuZm9ybSx0aGlzLmRhdGEpO3JldHVybiB0aGlzLmZvcm19Z2V0RGF0YSgpe3JldHVybiB0aGlzLmRhdGF9X2JpbmRWYWx1ZShlLHQsYSl7ZVtyLiRkYXRhXT10O2lmKGVbci4kaGFzU2V0dGFibGVWYWx1ZV0oKSlpZih0W3IuJGlzRGF0YVZhbHVlXSgpKXtjb25zdCBhPXRbci4kZ2V0RGF0YVZhbHVlXSgpO2Vbci4kc2V0VmFsdWVdKGNyZWF0ZVRleHQoYSkpfWVsc2UgaWYoZSBpbnN0YW5jZW9mIG4uRmllbGQmJmUudWkmJmUudWkuY2hvaWNlTGlzdCYmIm11bHRpU2VsZWN0Ij09PWUudWkuY2hvaWNlTGlzdC5vcGVuKXtjb25zdCBhPXRbci4kZ2V0Q2hpbGRyZW5dKCkubWFwKChlPT5lW3IuJGNvbnRlbnRdLnRyaW0oKSkpLmpvaW4oIlxuIik7ZVtyLiRzZXRWYWx1ZV0oY3JlYXRlVGV4dChhKSl9ZWxzZSB0aGlzLl9pc0NvbnN1bWVEYXRhKCkmJigwLG8ud2FybikoIlhGQSAtIE5vZGVzIGhhdmVuJ3QgdGhlIHNhbWUgdHlwZS4iKTtlbHNlIXRbci4kaXNEYXRhVmFsdWVdKCl8fHRoaXMuX2lzTWF0Y2hUZW1wbGF0ZSgpP3RoaXMuX2JpbmRFbGVtZW50KGUsdCk6KDAsby53YXJuKSgiWEZBIC0gTm9kZXMgaGF2ZW4ndCB0aGUgc2FtZSB0eXBlLiIpfV9maW5kRGF0YUJ5TmFtZVRvQ29uc3VtZShlLHQsYSxuKXtpZighZSlyZXR1cm4gbnVsbDtsZXQgaSxvO2ZvcihsZXQgbj0wO248MztuKyspe2k9YVtyLiRnZXRSZWFsQ2hpbGRyZW5CeU5hbWVJdF0oZSwhMSwhMCk7Zm9yKDs7KXtvPWkubmV4dCgpLnZhbHVlO2lmKCFvKWJyZWFrO2lmKHQ9PT1vW3IuJGlzRGF0YVZhbHVlXSgpKXJldHVybiBvfWlmKGFbci4kbmFtZXNwYWNlSWRdPT09cy5OYW1lc3BhY2VJZHMuZGF0YXNldHMuaWQmJiJkYXRhIj09PWFbci4kbm9kZU5hbWVdKWJyZWFrO2E9YVtyLiRnZXRQYXJlbnRdKCl9aWYoIW4pcmV0dXJuIG51bGw7aT10aGlzLmRhdGFbci4kZ2V0UmVhbENoaWxkcmVuQnlOYW1lSXRdKGUsITAsITEpO289aS5uZXh0KCkudmFsdWU7aWYobylyZXR1cm4gbztpPXRoaXMuZGF0YVtyLiRnZXRBdHRyaWJ1dGVJdF0oZSwhMCk7bz1pLm5leHQoKS52YWx1ZTtyZXR1cm4gbyYmb1tyLiRpc0RhdGFWYWx1ZV0oKT9vOm51bGx9X3NldFByb3BlcnRpZXMoZSx0KXtpZihlLmhhc093blByb3BlcnR5KCJzZXRQcm9wZXJ0eSIpKWZvcihjb25zdHtyZWY6YSx0YXJnZXQ6cyxjb25uZWN0aW9uOmN9b2YgZS5zZXRQcm9wZXJ0eS5jaGlsZHJlbil7aWYoYyljb250aW51ZTtpZighYSljb250aW51ZTtjb25zdCBsPSgwLGkuc2VhcmNoTm9kZSkodGhpcy5yb290LHQsYSwhMSwhMSk7aWYoIWwpeygwLG8ud2FybikoYFhGQSAtIEludmFsaWQgcmVmZXJlbmNlOiAke2F9LmApO2NvbnRpbnVlfWNvbnN0W2hdPWw7aWYoIWhbci4kaXNEZXNjZW5kZW50XSh0aGlzLmRhdGEpKXsoMCxvLndhcm4pKCJYRkEgLSBJbnZhbGlkIG5vZGU6IG11c3QgYmUgYSBkYXRhIG5vZGUuIik7Y29udGludWV9Y29uc3QgdT0oMCxpLnNlYXJjaE5vZGUpKHRoaXMucm9vdCxlLHMsITEsITEpO2lmKCF1KXsoMCxvLndhcm4pKGBYRkEgLSBJbnZhbGlkIHRhcmdldDogJHtzfS5gKTtjb250aW51ZX1jb25zdFtkXT11O2lmKCFkW3IuJGlzRGVzY2VuZGVudF0oZSkpeygwLG8ud2FybikoIlhGQSAtIEludmFsaWQgdGFyZ2V0OiBtdXN0IGJlIGEgcHJvcGVydHkgb3Igc3VicHJvcGVydHkuIik7Y29udGludWV9Y29uc3QgZj1kW3IuJGdldFBhcmVudF0oKTtpZihkIGluc3RhbmNlb2Ygbi5TZXRQcm9wZXJ0eXx8ZiBpbnN0YW5jZW9mIG4uU2V0UHJvcGVydHkpeygwLG8ud2FybikoIlhGQSAtIEludmFsaWQgdGFyZ2V0OiBjYW5ub3QgYmUgYSBzZXRQcm9wZXJ0eSBvciBvbmUgb2YgaXRzIHByb3BlcnRpZXMuIik7Y29udGludWV9aWYoZCBpbnN0YW5jZW9mIG4uQmluZEl0ZW1zfHxmIGluc3RhbmNlb2Ygbi5CaW5kSXRlbXMpeygwLG8ud2FybikoIlhGQSAtIEludmFsaWQgdGFyZ2V0OiBjYW5ub3QgYmUgYSBiaW5kSXRlbXMgb3Igb25lIG9mIGl0cyBwcm9wZXJ0aWVzLiIpO2NvbnRpbnVlfWNvbnN0IGc9aFtyLiR0ZXh0XSgpLHA9ZFtyLiRub2RlTmFtZV07aWYoZCBpbnN0YW5jZW9mIHIuWEZBQXR0cmlidXRlKXtjb25zdCBlPU9iamVjdC5jcmVhdGUobnVsbCk7ZVtwXT1nO2NvbnN0IHQ9UmVmbGVjdC5jb25zdHJ1Y3QoT2JqZWN0LmdldFByb3RvdHlwZU9mKGYpLmNvbnN0cnVjdG9yLFtlXSk7ZltwXT10W3BdfWVsc2UgaWYoZC5oYXNPd25Qcm9wZXJ0eShyLiRjb250ZW50KSl7ZFtyLiRkYXRhXT1oO2Rbci4kY29udGVudF09ZztkW3IuJGZpbmFsaXplXSgpfWVsc2UoMCxvLndhcm4pKCJYRkEgLSBJbnZhbGlkIG5vZGUgdG8gdXNlIGluIHNldFByb3BlcnR5Iil9fV9iaW5kSXRlbXMoZSx0KXtpZighZS5oYXNPd25Qcm9wZXJ0eSgiaXRlbXMiKXx8IWUuaGFzT3duUHJvcGVydHkoImJpbmRJdGVtcyIpfHxlLmJpbmRJdGVtcy5pc0VtcHR5KCkpcmV0dXJuO2Zvcihjb25zdCB0IG9mIGUuaXRlbXMuY2hpbGRyZW4pZVtyLiRyZW1vdmVDaGlsZF0odCk7ZS5pdGVtcy5jbGVhcigpO2NvbnN0IGE9bmV3IG4uSXRlbXMoe30pLHM9bmV3IG4uSXRlbXMoe30pO2Vbci4kYXBwZW5kQ2hpbGRdKGEpO2UuaXRlbXMucHVzaChhKTtlW3IuJGFwcGVuZENoaWxkXShzKTtlLml0ZW1zLnB1c2gocyk7Zm9yKGNvbnN0e3JlZjpuLGxhYmVsUmVmOmMsdmFsdWVSZWY6bCxjb25uZWN0aW9uOmh9b2YgZS5iaW5kSXRlbXMuY2hpbGRyZW4pe2lmKGgpY29udGludWU7aWYoIW4pY29udGludWU7Y29uc3QgZT0oMCxpLnNlYXJjaE5vZGUpKHRoaXMucm9vdCx0LG4sITEsITEpO2lmKGUpZm9yKGNvbnN0IHQgb2YgZSl7aWYoIXRbci4kaXNEZXNjZW5kZW50XSh0aGlzLmRhdGFzZXRzKSl7KDAsby53YXJuKShgWEZBIC0gSW52YWxpZCByZWYgKCR7bn0pOiBtdXN0IGJlIGEgZGF0YXNldHMgY2hpbGQuYCk7Y29udGludWV9Y29uc3QgZT0oMCxpLnNlYXJjaE5vZGUpKHRoaXMucm9vdCx0LGMsITAsITEpO2lmKCFlKXsoMCxvLndhcm4pKGBYRkEgLSBJbnZhbGlkIGxhYmVsOiAke2N9LmApO2NvbnRpbnVlfWNvbnN0W2hdPWU7aWYoIWhbci4kaXNEZXNjZW5kZW50XSh0aGlzLmRhdGFzZXRzKSl7KDAsby53YXJuKSgiWEZBIC0gSW52YWxpZCBsYWJlbDogbXVzdCBiZSBhIGRhdGFzZXRzIGNoaWxkLiIpO2NvbnRpbnVlfWNvbnN0IHU9KDAsaS5zZWFyY2hOb2RlKSh0aGlzLnJvb3QsdCxsLCEwLCExKTtpZighdSl7KDAsby53YXJuKShgWEZBIC0gSW52YWxpZCB2YWx1ZTogJHtsfS5gKTtjb250aW51ZX1jb25zdFtkXT11O2lmKCFkW3IuJGlzRGVzY2VuZGVudF0odGhpcy5kYXRhc2V0cykpeygwLG8ud2FybikoIlhGQSAtIEludmFsaWQgdmFsdWU6IG11c3QgYmUgYSBkYXRhc2V0cyBjaGlsZC4iKTtjb250aW51ZX1jb25zdCBmPWNyZWF0ZVRleHQoaFtyLiR0ZXh0XSgpKSxnPWNyZWF0ZVRleHQoZFtyLiR0ZXh0XSgpKTthW3IuJGFwcGVuZENoaWxkXShmKTthLnRleHQucHVzaChmKTtzW3IuJGFwcGVuZENoaWxkXShnKTtzLnRleHQucHVzaChnKX1lbHNlKDAsby53YXJuKShgWEZBIC0gSW52YWxpZCByZWZlcmVuY2U6ICR7bn0uYCl9fV9iaW5kT2NjdXJyZW5jZXMoZSx0LGEpe2xldCBuO2lmKHQubGVuZ3RoPjEpe249ZVtyLiRjbG9uZV0oKTtuW3IuJHJlbW92ZUNoaWxkXShuLm9jY3VyKTtuLm9jY3VyPW51bGx9dGhpcy5fYmluZFZhbHVlKGUsdFswXSxhKTt0aGlzLl9zZXRQcm9wZXJ0aWVzKGUsdFswXSk7dGhpcy5fYmluZEl0ZW1zKGUsdFswXSk7aWYoMT09PXQubGVuZ3RoKXJldHVybjtjb25zdCBpPWVbci4kZ2V0UGFyZW50XSgpLHM9ZVtyLiRub2RlTmFtZV0sbz1pW3IuJGluZGV4T2ZdKGUpO2ZvcihsZXQgZT0xLGM9dC5sZW5ndGg7ZTxjO2UrKyl7Y29uc3QgYz10W2VdLGw9bltyLiRjbG9uZV0oKTtpW3NdLnB1c2gobCk7aVtyLiRpbnNlcnRBdF0obytlLGwpO3RoaXMuX2JpbmRWYWx1ZShsLGMsYSk7dGhpcy5fc2V0UHJvcGVydGllcyhsLGMpO3RoaXMuX2JpbmRJdGVtcyhsLGMpfX1fY3JlYXRlT2NjdXJyZW5jZXMoZSl7aWYoIXRoaXMuZW1wdHlNZXJnZSlyZXR1cm47Y29uc3R7b2NjdXI6dH09ZTtpZighdHx8dC5pbml0aWFsPD0xKXJldHVybjtjb25zdCBhPWVbci4kZ2V0UGFyZW50XSgpLG49ZVtyLiRub2RlTmFtZV07aWYoIShhW25daW5zdGFuY2VvZiByLlhGQU9iamVjdEFycmF5KSlyZXR1cm47bGV0IGk7aT1lLm5hbWU/YVtuXS5jaGlsZHJlbi5maWx0ZXIoKHQ9PnQubmFtZT09PWUubmFtZSkpLmxlbmd0aDphW25dLmNoaWxkcmVuLmxlbmd0aDtjb25zdCBzPWFbci4kaW5kZXhPZl0oZSkrMSxvPXQuaW5pdGlhbC1pO2lmKG8pe2NvbnN0IHQ9ZVtyLiRjbG9uZV0oKTt0W3IuJHJlbW92ZUNoaWxkXSh0Lm9jY3VyKTt0Lm9jY3VyPW51bGw7YVtuXS5wdXNoKHQpO2Fbci4kaW5zZXJ0QXRdKHMsdCk7Zm9yKGxldCBlPTE7ZTxvO2UrKyl7Y29uc3QgaT10W3IuJGNsb25lXSgpO2Fbbl0ucHVzaChpKTthW3IuJGluc2VydEF0XShzK2UsaSl9fX1fZ2V0T2NjdXJJbmZvKGUpe2NvbnN0e25hbWU6dCxvY2N1cjphfT1lO2lmKCFhfHwhdClyZXR1cm5bMSwxXTtjb25zdCByPS0xPT09YS5tYXg/MS8wOmEubWF4O3JldHVyblthLm1pbixyXX1fc2V0QW5kQmluZChlLHQpe3RoaXMuX3NldFByb3BlcnRpZXMoZSx0KTt0aGlzLl9iaW5kSXRlbXMoZSx0KTt0aGlzLl9iaW5kRWxlbWVudChlLHQpfV9iaW5kRWxlbWVudChlLHQpe2NvbnN0IGE9W107dGhpcy5fY3JlYXRlT2NjdXJyZW5jZXMoZSk7Zm9yKGNvbnN0IG4gb2YgZVtyLiRnZXRDaGlsZHJlbl0oKSl7aWYobltyLiRkYXRhXSljb250aW51ZTtpZih2b2lkIDA9PT10aGlzLl9tZXJnZU1vZGUmJiJzdWJmb3JtIj09PW5bci4kbm9kZU5hbWVdKXt0aGlzLl9tZXJnZU1vZGU9ImNvbnN1bWVEYXRhIj09PW4ubWVyZ2VNb2RlO2NvbnN0IGU9dFtyLiRnZXRDaGlsZHJlbl0oKTtpZihlLmxlbmd0aD4wKXRoaXMuX2JpbmRPY2N1cnJlbmNlcyhuLFtlWzBdXSxudWxsKTtlbHNlIGlmKHRoaXMuZW1wdHlNZXJnZSl7Y29uc3QgZT10W3IuJG5hbWVzcGFjZUlkXT09PWM/LTE6dFtyLiRuYW1lc3BhY2VJZF0sYT1uW3IuJGRhdGFdPW5ldyByLlhtbE9iamVjdChlLG4ubmFtZXx8InJvb3QiKTt0W3IuJGFwcGVuZENoaWxkXShhKTt0aGlzLl9iaW5kRWxlbWVudChuLGEpfWNvbnRpbnVlfWlmKCFuW3IuJGlzQmluZGFibGVdKCkpY29udGludWU7bGV0IGU9ITEscz1udWxsLGw9bnVsbCxoPW51bGw7aWYobi5iaW5kKXtzd2l0Y2gobi5iaW5kLm1hdGNoKXtjYXNlIm5vbmUiOnRoaXMuX3NldEFuZEJpbmQobix0KTtjb250aW51ZTtjYXNlImdsb2JhbCI6ZT0hMDticmVhaztjYXNlImRhdGFSZWYiOmlmKCFuLmJpbmQucmVmKXsoMCxvLndhcm4pKGBYRkEgLSByZWYgaXMgZW1wdHkgaW4gbm9kZSAke25bci4kbm9kZU5hbWVdfS5gKTt0aGlzLl9zZXRBbmRCaW5kKG4sdCk7Y29udGludWV9bD1uLmJpbmQucmVmfW4uYmluZC5waWN0dXJlJiYocz1uLmJpbmQucGljdHVyZVtyLiRjb250ZW50XSl9Y29uc3RbdSxkXT10aGlzLl9nZXRPY2N1ckluZm8obik7aWYobCl7aD0oMCxpLnNlYXJjaE5vZGUpKHRoaXMucm9vdCx0LGwsITAsITEpO2lmKG51bGw9PT1oKXtoPSgwLGkuY3JlYXRlRGF0YU5vZGUpKHRoaXMuZGF0YSx0LGwpO2lmKCFoKWNvbnRpbnVlO3RoaXMuX2lzQ29uc3VtZURhdGEoKSYmKGhbci4kY29uc3VtZWRdPSEwKTt0aGlzLl9zZXRBbmRCaW5kKG4saCk7Y29udGludWV9dGhpcy5faXNDb25zdW1lRGF0YSgpJiYoaD1oLmZpbHRlcigoZT0+IWVbci4kY29uc3VtZWRdKSkpO2gubGVuZ3RoPmQ/aD1oLnNsaWNlKDAsZCk6MD09PWgubGVuZ3RoJiYoaD1udWxsKTtoJiZ0aGlzLl9pc0NvbnN1bWVEYXRhKCkmJmguZm9yRWFjaCgoZT0+e2Vbci4kY29uc3VtZWRdPSEwfSkpfWVsc2V7aWYoIW4ubmFtZSl7dGhpcy5fc2V0QW5kQmluZChuLHQpO2NvbnRpbnVlfWlmKHRoaXMuX2lzQ29uc3VtZURhdGEoKSl7Y29uc3QgYT1bXTtmb3IoO2EubGVuZ3RoPGQ7KXtjb25zdCBpPXRoaXMuX2ZpbmREYXRhQnlOYW1lVG9Db25zdW1lKG4ubmFtZSxuW3IuJGhhc1NldHRhYmxlVmFsdWVdKCksdCxlKTtpZighaSlicmVhaztpW3IuJGNvbnN1bWVkXT0hMDthLnB1c2goaSl9aD1hLmxlbmd0aD4wP2E6bnVsbH1lbHNle2g9dFtyLiRnZXRSZWFsQ2hpbGRyZW5CeU5hbWVJdF0obi5uYW1lLCExLHRoaXMuZW1wdHlNZXJnZSkubmV4dCgpLnZhbHVlO2lmKCFoKXtpZigwPT09dSl7YS5wdXNoKG4pO2NvbnRpbnVlfWNvbnN0IGU9dFtyLiRuYW1lc3BhY2VJZF09PT1jPy0xOnRbci4kbmFtZXNwYWNlSWRdO2g9bltyLiRkYXRhXT1uZXcgci5YbWxPYmplY3QoZSxuLm5hbWUpO3RoaXMuZW1wdHlNZXJnZSYmKGhbci4kY29uc3VtZWRdPSEwKTt0W3IuJGFwcGVuZENoaWxkXShoKTt0aGlzLl9zZXRBbmRCaW5kKG4saCk7Y29udGludWV9dGhpcy5lbXB0eU1lcmdlJiYoaFtyLiRjb25zdW1lZF09ITApO2g9W2hdfX1oP3RoaXMuX2JpbmRPY2N1cnJlbmNlcyhuLGgscyk6dT4wP3RoaXMuX3NldEFuZEJpbmQobix0KTphLnB1c2gobil9YS5mb3JFYWNoKChlPT5lW3IuJGdldFBhcmVudF0oKVtyLiRyZW1vdmVDaGlsZF0oZSkpKX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuVmFsdWU9dC5UZXh0PXQuVGVtcGxhdGVOYW1lc3BhY2U9dC5UZW1wbGF0ZT10LlNldFByb3BlcnR5PXQuSXRlbXM9dC5GaWVsZD10LkJpbmRJdGVtcz12b2lkIDA7dmFyIHI9YSg3NSksbj1hKDc3KSxpPWEoODEpLHM9YSg4Miksbz1hKDc2KSxjPWEoMiksbD1hKDgzKSxoPWEoNCksdT1hKDc4KTtjb25zdCBkPW4uTmFtZXNwYWNlSWRzLnRlbXBsYXRlLmlkLGY9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixnPS9eSChcZCspJC8scD1uZXcgU2V0KFsiaW1hZ2UvZ2lmIiwiaW1hZ2UvanBlZyIsImltYWdlL2pwZyIsImltYWdlL3BqcGVnIiwiaW1hZ2UvcG5nIiwiaW1hZ2UvYXBuZyIsImltYWdlL3gtcG5nIiwiaW1hZ2UvYm1wIiwiaW1hZ2UveC1tcy1ibXAiLCJpbWFnZS90aWZmIiwiaW1hZ2UvdGlmIiwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIl0pLG09W1tbNjYsNzddLCJpbWFnZS9ibXAiXSxbWzI1NSwyMTYsMjU1XSwiaW1hZ2UvanBlZyJdLFtbNzMsNzMsNDIsMF0sImltYWdlL3RpZmYiXSxbWzc3LDc3LDAsNDJdLCJpbWFnZS90aWZmIl0sW1s3MSw3Myw3MCw1Niw1Nyw5N10sImltYWdlL2dpZiJdLFtbMTM3LDgwLDc4LDcxLDEzLDEwLDI2LDEwXSwiaW1hZ2UvcG5nIl1dO2Z1bmN0aW9uIGdldEJvcmRlckRpbXMoZSl7aWYoIWV8fCFlLmJvcmRlcilyZXR1cm57dzowLGg6MH07Y29uc3QgdD1lLmJvcmRlcltyLiRnZXRFeHRyYV0oKTtyZXR1cm4gdD97dzp0LndpZHRoc1swXSt0LndpZHRoc1syXSt0Lmluc2V0c1swXSt0Lmluc2V0c1syXSxoOnQud2lkdGhzWzFdK3Qud2lkdGhzWzNdK3QuaW5zZXRzWzFdK3QuaW5zZXRzWzNdfTp7dzowLGg6MH19ZnVuY3Rpb24gaGFzTWFyZ2luKGUpe3JldHVybiBlLm1hcmdpbiYmKGUubWFyZ2luLnRvcEluc2V0fHxlLm1hcmdpbi5yaWdodEluc2V0fHxlLm1hcmdpbi5ib3R0b21JbnNldHx8ZS5tYXJnaW4ubGVmdEluc2V0KX1mdW5jdGlvbiBfc2V0VmFsdWUoZSx0KXtpZighZS52YWx1ZSl7Y29uc3QgdD1uZXcgVmFsdWUoe30pO2Vbci4kYXBwZW5kQ2hpbGRdKHQpO2UudmFsdWU9dH1lLnZhbHVlW3IuJHNldFZhbHVlXSh0KX1mdW5jdGlvbipnZXRDb250YWluZWRDaGlsZHJlbihlKXtmb3IoY29uc3QgdCBvZiBlW3IuJGdldENoaWxkcmVuXSgpKXQgaW5zdGFuY2VvZiBTdWJmb3JtU2V0P3lpZWxkKnRbci4kZ2V0Q29udGFpbmVkQ2hpbGRyZW5dKCk6eWllbGQgdH1mdW5jdGlvbiBpc1JlcXVpcmVkKGUpe3JldHVybiBlLnZhbGlkYXRlJiYiZXJyb3IiPT09ZS52YWxpZGF0ZS5udWxsVGVzdH1mdW5jdGlvbiBzZXRUYWJJbmRleChlKXtmb3IoO2U7KXtpZighZS50cmF2ZXJzYWwpe2Vbci4kdGFiSW5kZXhdPWVbci4kZ2V0UGFyZW50XSgpW3IuJHRhYkluZGV4XTtyZXR1cm59aWYoZVtyLiR0YWJJbmRleF0pcmV0dXJuO2xldCB0PW51bGw7Zm9yKGNvbnN0IGEgb2YgZS50cmF2ZXJzYWxbci4kZ2V0Q2hpbGRyZW5dKCkpaWYoIm5leHQiPT09YS5vcGVyYXRpb24pe3Q9YTticmVha31pZighdHx8IXQucmVmKXtlW3IuJHRhYkluZGV4XT1lW3IuJGdldFBhcmVudF0oKVtyLiR0YWJJbmRleF07cmV0dXJufWNvbnN0IGE9ZVtyLiRnZXRUZW1wbGF0ZVJvb3RdKCk7ZVtyLiR0YWJJbmRleF09KythW3IuJHRhYkluZGV4XTtjb25zdCBuPWFbci4kc2VhcmNoTm9kZV0odC5yZWYsZSk7aWYoIW4pcmV0dXJuO2U9blswXX19ZnVuY3Rpb24gYXBwbHlBc3Npc3QoZSx0KXtjb25zdCBhPWUuYXNzaXN0O2lmKGEpe2NvbnN0IGU9YVtyLiR0b0hUTUxdKCk7ZSYmKHQudGl0bGU9ZSk7Y29uc3Qgbj1hLnJvbGUubWF0Y2goZyk7aWYobil7Y29uc3QgZT0iaGVhZGluZyIsYT1uWzFdO3Qucm9sZT1lO3RbImFyaWEtbGV2ZWwiXT1hfX1pZigidGFibGUiPT09ZS5sYXlvdXQpdC5yb2xlPSJ0YWJsZSI7ZWxzZSBpZigicm93Ij09PWUubGF5b3V0KXQucm9sZT0icm93IjtlbHNle2NvbnN0IGE9ZVtyLiRnZXRQYXJlbnRdKCk7InJvdyI9PT1hLmxheW91dCYmKGEuYXNzaXN0JiYiVEgiPT09YS5hc3Npc3Qucm9sZT90LnJvbGU9ImNvbHVtbmhlYWRlciI6dC5yb2xlPSJjZWxsIil9fWZ1bmN0aW9uIGFyaWFMYWJlbChlKXtpZighZS5hc3Npc3QpcmV0dXJuIG51bGw7Y29uc3QgdD1lLmFzc2lzdDtyZXR1cm4gdC5zcGVhayYmIiIhPT10LnNwZWFrW3IuJGNvbnRlbnRdP3Quc3BlYWtbci4kY29udGVudF06dC50b29sVGlwP3QudG9vbFRpcFtyLiRjb250ZW50XTpudWxsfWZ1bmN0aW9uIHZhbHVlVG9IdG1sKGUpe3JldHVybiBvLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixhdHRyaWJ1dGVzOntjbGFzczpbInhmYVJpY2giXSxzdHlsZTpPYmplY3QuY3JlYXRlKG51bGwpfSxjaGlsZHJlbjpbe25hbWU6InNwYW4iLGF0dHJpYnV0ZXM6e3N0eWxlOk9iamVjdC5jcmVhdGUobnVsbCl9LHZhbHVlOmV9XX0pfWZ1bmN0aW9uIHNldEZpcnN0VW5zcGxpdHRhYmxlKGUpe2NvbnN0IHQ9ZVtyLiRnZXRUZW1wbGF0ZVJvb3RdKCk7aWYobnVsbD09PXRbci4kZXh0cmFdLmZpcnN0VW5zcGxpdHRhYmxlKXt0W3IuJGV4dHJhXS5maXJzdFVuc3BsaXR0YWJsZT1lO3Rbci4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT0hMH19ZnVuY3Rpb24gdW5zZXRGaXJzdFVuc3BsaXR0YWJsZShlKXtjb25zdCB0PWVbci4kZ2V0VGVtcGxhdGVSb290XSgpO3Rbci4kZXh0cmFdLmZpcnN0VW5zcGxpdHRhYmxlPT09ZSYmKHRbci4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT0hMSl9ZnVuY3Rpb24gaGFuZGxlQnJlYWsoZSl7aWYoZVtyLiRleHRyYV0pcmV0dXJuITE7ZVtyLiRleHRyYV09T2JqZWN0LmNyZWF0ZShudWxsKTtpZigiYXV0byI9PT1lLnRhcmdldFR5cGUpcmV0dXJuITE7Y29uc3QgdD1lW3IuJGdldFRlbXBsYXRlUm9vdF0oKTtsZXQgYT1udWxsO2lmKGUudGFyZ2V0KXthPXRbci4kc2VhcmNoTm9kZV0oZS50YXJnZXQsZVtyLiRnZXRQYXJlbnRdKCkpO2lmKCFhKXJldHVybiExO2E9YVswXX1jb25zdHtjdXJyZW50UGFnZUFyZWE6bixjdXJyZW50Q29udGVudEFyZWE6aX09dFtyLiRleHRyYV07aWYoInBhZ2VBcmVhIj09PWUudGFyZ2V0VHlwZSl7YSBpbnN0YW5jZW9mIFBhZ2VBcmVhfHwoYT1udWxsKTtpZihlLnN0YXJ0TmV3KXtlW3IuJGV4dHJhXS50YXJnZXQ9YXx8bjtyZXR1cm4hMH1pZihhJiZhIT09bil7ZVtyLiRleHRyYV0udGFyZ2V0PWE7cmV0dXJuITB9cmV0dXJuITF9YSBpbnN0YW5jZW9mIENvbnRlbnRBcmVhfHwoYT1udWxsKTtjb25zdCBzPWEmJmFbci4kZ2V0UGFyZW50XSgpO2xldCBvLGM9cztpZihlLnN0YXJ0TmV3KWlmKGEpe2NvbnN0IGU9cy5jb250ZW50QXJlYS5jaGlsZHJlbix0PWUuaW5kZXhPZihpKSxyPWUuaW5kZXhPZihhKTstMSE9PXQmJnQ8ciYmKGM9bnVsbCk7bz1yLTF9ZWxzZSBvPW4uY29udGVudEFyZWEuY2hpbGRyZW4uaW5kZXhPZihpKTtlbHNle2lmKCFhfHxhPT09aSlyZXR1cm4hMTtvPXMuY29udGVudEFyZWEuY2hpbGRyZW4uaW5kZXhPZihhKS0xO2M9cz09PW4/bnVsbDpzfWVbci4kZXh0cmFdLnRhcmdldD1jO2Vbci4kZXh0cmFdLmluZGV4PW87cmV0dXJuITB9ZnVuY3Rpb24gaGFuZGxlT3ZlcmZsb3coZSx0LGEpe2NvbnN0IG49ZVtyLiRnZXRUZW1wbGF0ZVJvb3RdKCksaT1uW3IuJGV4dHJhXS5ub0xheW91dEZhaWx1cmUscz10W3IuJGdldFN1YmZvcm1QYXJlbnRdO3Rbci4kZ2V0U3ViZm9ybVBhcmVudF09KCk9PmU7bltyLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlPSEwO2NvbnN0IG89dFtyLiR0b0hUTUxdKGEpO2Vbci4kYWRkSFRNTF0oby5odG1sLG8uYmJveCk7bltyLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlPWk7dFtyLiRnZXRTdWJmb3JtUGFyZW50XT1zfWNsYXNzIEFwcGVhcmFuY2VGaWx0ZXIgZXh0ZW5kcyByLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJhcHBlYXJhbmNlRmlsdGVyIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBBcmMgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJhcmMiLCEwKTt0aGlzLmNpcmN1bGFyPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5jaXJjdWxhcixkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMuaGFuZD0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5oYW5kLFsiZXZlbiIsImxlZnQiLCJyaWdodCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMuc3RhcnRBbmdsZT0oMCxvLmdldEZsb2F0KSh7ZGF0YTplLnN0YXJ0QW5nbGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+ITB9KTt0aGlzLnN3ZWVwQW5nbGU9KDAsby5nZXRGbG9hdCkoe2RhdGE6ZS5zd2VlcEFuZ2xlLGRlZmF1bHRWYWx1ZTozNjAsdmFsaWRhdGU6ZT0+ITB9KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5lZGdlPW51bGw7dGhpcy5maWxsPW51bGx9W3IuJHRvSFRNTF0oKXtjb25zdCBlPXRoaXMuZWRnZXx8bmV3IEVkZ2Uoe30pLHQ9ZVtyLiR0b1N0eWxlXSgpLGE9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLmZpbGwmJiJ2aXNpYmxlIj09PXRoaXMuZmlsbC5wcmVzZW5jZT9PYmplY3QuYXNzaWduKGEsdGhpcy5maWxsW3IuJHRvU3R5bGVdKCkpOmEuZmlsbD0idHJhbnNwYXJlbnQiO2Euc3Ryb2tlV2lkdGg9KDAscy5tZWFzdXJlVG9TdHJpbmcpKCJ2aXNpYmxlIj09PWUucHJlc2VuY2U/ZS50aGlja25lc3M6MCk7YS5zdHJva2U9dC5jb2xvcjtsZXQgbjtjb25zdCBpPXt4bWxuczpmLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixvdmVyZmxvdzoidmlzaWJsZSJ9fTtpZigzNjA9PT10aGlzLnN3ZWVwQW5nbGUpbj17bmFtZToiZWxsaXBzZSIsYXR0cmlidXRlczp7eG1sbnM6ZixjeDoiNTAlIixjeToiNTAlIixyeDoiNTAlIixyeToiNTAlIixzdHlsZTphfX07ZWxzZXtjb25zdCBlPXRoaXMuc3RhcnRBbmdsZSpNYXRoLlBJLzE4MCx0PXRoaXMuc3dlZXBBbmdsZSpNYXRoLlBJLzE4MCxyPXRoaXMuc3dlZXBBbmdsZT4xODA/MTowLFtzLG8sYyxsXT1bNTAqKDErTWF0aC5jb3MoZSkpLDUwKigxLU1hdGguc2luKGUpKSw1MCooMStNYXRoLmNvcyhlK3QpKSw1MCooMS1NYXRoLnNpbihlK3QpKV07bj17bmFtZToicGF0aCIsYXR0cmlidXRlczp7eG1sbnM6ZixkOmBNICR7c30gJHtvfSBBIDUwIDUwIDAgJHtyfSAwICR7Y30gJHtsfWAsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOmF9fTtPYmplY3QuYXNzaWduKGkse3ZpZXdCb3g6IjAgMCAxMDAgMTAwIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn0pfWNvbnN0IGM9e25hbWU6InN2ZyIsY2hpbGRyZW46W25dLGF0dHJpYnV0ZXM6aX07aWYoaGFzTWFyZ2luKHRoaXNbci4kZ2V0UGFyZW50XSgpW3IuJGdldFBhcmVudF0oKSkpcmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e3N0eWxlOntkaXNwbGF5OiJpbmxpbmUiLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifX0sY2hpbGRyZW46W2NdfSk7Yy5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI7cmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKGMpfX1jbGFzcyBBcmVhIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiYXJlYSIsITApO3RoaXMuY29sU3Bhbj0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUuY29sU3BhbixkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTplPT5lPj0xfHwtMT09PWV9KTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucmVsZXZhbnQ9KDAsby5nZXRSZWxldmFudCkoZS5yZWxldmFudCk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMueD0oMCxvLmdldE1lYXN1cmVtZW50KShlLngsIjBwdCIpO3RoaXMueT0oMCxvLmdldE1lYXN1cmVtZW50KShlLnksIjBwdCIpO3RoaXMuZGVzYz1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5hcmVhPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZHJhdz1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmV4T2JqZWN0PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZXhjbEdyb3VwPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZmllbGQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJmb3JtPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuc3ViZm9ybVNldD1uZXcgci5YRkFPYmplY3RBcnJheX0qW3IuJGdldENvbnRhaW5lZENoaWxkcmVuXSgpe3lpZWxkKmdldENvbnRhaW5lZENoaWxkcmVuKHRoaXMpfVtyLiRpc1RyYW5zcGFyZW50XSgpe3JldHVybiEwfVtyLiRpc0JpbmRhYmxlXSgpe3JldHVybiEwfVtyLiRhZGRIVE1MXShlLHQpe2NvbnN0W2EsbixpLHNdPXQ7dGhpc1tyLiRleHRyYV0ud2lkdGg9TWF0aC5tYXgodGhpc1tyLiRleHRyYV0ud2lkdGgsYStpKTt0aGlzW3IuJGV4dHJhXS5oZWlnaHQ9TWF0aC5tYXgodGhpc1tyLiRleHRyYV0uaGVpZ2h0LG4rcyk7dGhpc1tyLiRleHRyYV0uY2hpbGRyZW4ucHVzaChlKX1bci4kZ2V0QXZhaWxhYmxlU3BhY2VdKCl7cmV0dXJuIHRoaXNbci4kZXh0cmFdLmF2YWlsYWJsZVNwYWNlfVtyLiR0b0hUTUxdKGUpe2NvbnN0IHQ9KDAscy50b1N0eWxlKSh0aGlzLCJwb3NpdGlvbiIpLGE9e3N0eWxlOnQsaWQ6dGhpc1tyLiR1aWRdLGNsYXNzOlsieGZhQXJlYSJdfTsoMCxzLmlzUHJpbnRPbmx5KSh0aGlzKSYmYS5jbGFzcy5wdXNoKCJ4ZmFQcmludE9ubHkiKTt0aGlzLm5hbWUmJihhLnhmYU5hbWU9dGhpcy5uYW1lKTtjb25zdCBuPVtdO3RoaXNbci4kZXh0cmFdPXtjaGlsZHJlbjpuLHdpZHRoOjAsaGVpZ2h0OjAsYXZhaWxhYmxlU3BhY2U6ZX07Y29uc3QgaT10aGlzW3IuJGNoaWxkcmVuVG9IVE1MXSh7ZmlsdGVyOm5ldyBTZXQoWyJhcmVhIiwiZHJhdyIsImZpZWxkIiwiZXhjbEdyb3VwIiwic3ViZm9ybSIsInN1YmZvcm1TZXQiXSksaW5jbHVkZTohMH0pO2lmKCFpLnN1Y2Nlc3Mpe2lmKGkuaXNCcmVhaygpKXJldHVybiBpO2RlbGV0ZSB0aGlzW3IuJGV4dHJhXTtyZXR1cm4gby5IVE1MUmVzdWx0LkZBSUxVUkV9dC53aWR0aD0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpc1tyLiRleHRyYV0ud2lkdGgpO3QuaGVpZ2h0PSgwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzW3IuJGV4dHJhXS5oZWlnaHQpO2NvbnN0IGM9e25hbWU6ImRpdiIsYXR0cmlidXRlczphLGNoaWxkcmVuOm59LGw9W3RoaXMueCx0aGlzLnksdGhpc1tyLiRleHRyYV0ud2lkdGgsdGhpc1tyLiRleHRyYV0uaGVpZ2h0XTtkZWxldGUgdGhpc1tyLiRleHRyYV07cmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKGMsbCl9fWNsYXNzIEFzc2lzdCBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImFzc2lzdCIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5yb2xlPWUucm9sZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuc3BlYWs9bnVsbDt0aGlzLnRvb2xUaXA9bnVsbH1bci4kdG9IVE1MXSgpe3JldHVybiB0aGlzLnRvb2xUaXAmJnRoaXMudG9vbFRpcFtyLiRjb250ZW50XT90aGlzLnRvb2xUaXBbci4kY29udGVudF06bnVsbH19Y2xhc3MgQmFyY29kZSBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImJhcmNvZGUiLCEwKTt0aGlzLmNoYXJFbmNvZGluZz0oMCxvLmdldEtleXdvcmQpKHtkYXRhOmUuY2hhckVuY29kaW5nP2UuY2hhckVuY29kaW5nLnRvTG93ZXJDYXNlKCk6IiIsZGVmYXVsdFZhbHVlOiIiLHZhbGlkYXRlOmU9PlsidXRmLTgiLCJiaWctZml2ZSIsImZvbnRzcGVjaWZpYyIsImdiayIsImdiLTE4MDMwIiwiZ2ItMjMxMiIsImtzYy01NjAxIiwibm9uZSIsInNoaWZ0LWppcyIsInVjcy0yIiwidXRmLTE2Il0uaW5jbHVkZXMoZSl8fGUubWF0Y2goL2lzby04ODU5LVxkezJ9Lyl9KTt0aGlzLmNoZWNrc3VtPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmNoZWNrc3VtLFsibm9uZSIsIjFtb2QxMCIsIjFtb2QxMF8xbW9kMTEiLCIybW9kMTAiLCJhdXRvIl0pO3RoaXMuZGF0YUNvbHVtbkNvdW50PSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5kYXRhQ29sdW1uQ291bnQsZGVmYXVsdFZhbHVlOi0xLHZhbGlkYXRlOmU9PmU+PTB9KTt0aGlzLmRhdGFMZW5ndGg9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLmRhdGFMZW5ndGgsZGVmYXVsdFZhbHVlOi0xLHZhbGlkYXRlOmU9PmU+PTB9KTt0aGlzLmRhdGFQcmVwPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmRhdGFQcmVwLFsibm9uZSIsImZsYXRlQ29tcHJlc3MiXSk7dGhpcy5kYXRhUm93Q291bnQ9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLmRhdGFSb3dDb3VudCxkZWZhdWx0VmFsdWU6LTEsdmFsaWRhdGU6ZT0+ZT49MH0pO3RoaXMuZW5kQ2hhcj1lLmVuZENoYXJ8fCIiO3RoaXMuZXJyb3JDb3JyZWN0aW9uTGV2ZWw9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLmVycm9yQ29ycmVjdGlvbkxldmVsLGRlZmF1bHRWYWx1ZTotMSx2YWxpZGF0ZTplPT5lPj0wJiZlPD04fSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm1vZHVsZUhlaWdodD0oMCxvLmdldE1lYXN1cmVtZW50KShlLm1vZHVsZUhlaWdodCwiNW1tIik7dGhpcy5tb2R1bGVXaWR0aD0oMCxvLmdldE1lYXN1cmVtZW50KShlLm1vZHVsZVdpZHRoLCIwLjI1bW0iKTt0aGlzLnByaW50Q2hlY2tEaWdpdD0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUucHJpbnRDaGVja0RpZ2l0LGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy5yb3dDb2x1bW5SYXRpbz0oMCxvLmdldFJhdGlvKShlLnJvd0NvbHVtblJhdGlvKTt0aGlzLnN0YXJ0Q2hhcj1lLnN0YXJ0Q2hhcnx8IiI7dGhpcy50ZXh0TG9jYXRpb249KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudGV4dExvY2F0aW9uLFsiYmVsb3ciLCJhYm92ZSIsImFib3ZlRW1iZWRkZWQiLCJiZWxvd0VtYmVkZGVkIiwibm9uZSJdKTt0aGlzLnRydW5jYXRlPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS50cnVuY2F0ZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMudHlwZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS50eXBlP2UudHlwZS50b0xvd2VyQ2FzZSgpOiIiLFsiYXp0ZWMiLCJjb2RhYmFyIiwiY29kZTJvZjVpbmR1c3RyaWFsIiwiY29kZTJvZjVpbnRlcmxlYXZlZCIsImNvZGUyb2Y1bWF0cml4IiwiY29kZTJvZjVzdGFuZGFyZCIsImNvZGUzb2Y5IiwiY29kZTNvZjlleHRlbmRlZCIsImNvZGUxMSIsImNvZGU0OSIsImNvZGU5MyIsImNvZGUxMjgiLCJjb2RlMTI4YSIsImNvZGUxMjhiIiwiY29kZTEyOGMiLCJjb2RlMTI4c3NjYyIsImRhdGFtYXRyaXgiLCJlYW44IiwiZWFuOGFkZDIiLCJlYW44YWRkNSIsImVhbjEzIiwiZWFuMTNhZGQyIiwiZWFuMTNhZGQ1IiwiZWFuMTNwd2NkIiwiZmltIiwibG9nbWFycyIsIm1heGljb2RlIiwibXNpIiwicGRmNDE3IiwicGRmNDE3bWFjcm8iLCJwbGVzc2V5IiwicG9zdGF1c2N1c3QyIiwicG9zdGF1c2N1c3QzIiwicG9zdGF1c3JlcGx5cGFpZCIsInBvc3RhdXNzdGFuZGFyZCIsInBvc3R1a3JtNHNjYyIsInBvc3R1c2RwYmMiLCJwb3N0dXNpbWIiLCJwb3N0dXNzdGFuZGFyZCIsInBvc3R1czV6aXAiLCJxcmNvZGUiLCJyZmlkIiwicnNzMTQiLCJyc3MxNGV4cGFuZGVkIiwicnNzMTRsaW1pdGVkIiwicnNzMTRzdGFja2VkIiwicnNzMTRzdGFja2Vkb21uaSIsInJzczE0dHJ1bmNhdGVkIiwidGVsZXBlbiIsInVjYzEyOCIsInVjYzEyOHJhbmRvbSIsInVjYzEyOHNzY2MiLCJ1cGNhIiwidXBjYWFkZDIiLCJ1cGNhYWRkNSIsInVwY2Fwd2NkIiwidXBjZSIsInVwY2VhZGQyIiwidXBjZWFkZDUiLCJ1cGNlYW4yIiwidXBjZWFuNSIsInVwc21heGljb2RlIl0pO3RoaXMudXBzTW9kZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS51cHNNb2RlLFsidXNDYXJyaWVyIiwiaW50ZXJuYXRpb25hbENhcnJpZXIiLCJzZWN1cmVTeW1ib2wiLCJzdGFuZGFyZFN5bWJvbCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy53aWRlTmFycm93UmF0aW89KDAsby5nZXRSYXRpbykoZS53aWRlTmFycm93UmF0aW8pO3RoaXMuZW5jcnlwdD1udWxsO3RoaXMuZXh0cmFzPW51bGx9fWNsYXNzIEJpbmQgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJiaW5kIiwhMCk7dGhpcy5tYXRjaD0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5tYXRjaCxbIm9uY2UiLCJkYXRhUmVmIiwiZ2xvYmFsIiwibm9uZSJdKTt0aGlzLnJlZj1lLnJlZnx8IiI7dGhpcy5waWN0dXJlPW51bGx9fWNsYXNzIEJpbmRJdGVtcyBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImJpbmRJdGVtcyIpO3RoaXMuY29ubmVjdGlvbj1lLmNvbm5lY3Rpb258fCIiO3RoaXMubGFiZWxSZWY9ZS5sYWJlbFJlZnx8IiI7dGhpcy5yZWY9ZS5yZWZ8fCIiO3RoaXMudmFsdWVSZWY9ZS52YWx1ZVJlZnx8IiJ9fXQuQmluZEl0ZW1zPUJpbmRJdGVtcztjbGFzcyBCb29rZW5kIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiYm9va2VuZCIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5sZWFkZXI9ZS5sZWFkZXJ8fCIiO3RoaXMudHJhaWxlcj1lLnRyYWlsZXJ8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgQm9vbGVhbkVsZW1lbnQgZXh0ZW5kcyByLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImJvb2xlYW4iKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bci4kdG9IVE1MXShlKXtyZXR1cm4gdmFsdWVUb0h0bWwoMT09PXRoaXNbci4kY29udGVudF0/IjEiOiIwIil9fWNsYXNzIEJvcmRlciBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImJvcmRlciIsITApO3RoaXMuYnJlYWs9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuYnJlYWssWyJjbG9zZSIsIm9wZW4iXSk7dGhpcy5oYW5kPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmhhbmQsWyJldmVuIiwibGVmdCIsInJpZ2h0Il0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5wcmVzZW5jZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKTt0aGlzLnJlbGV2YW50PSgwLG8uZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNvcm5lcj1uZXcgci5YRkFPYmplY3RBcnJheSg0KTt0aGlzLmVkZ2U9bmV3IHIuWEZBT2JqZWN0QXJyYXkoNCk7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmZpbGw9bnVsbDt0aGlzLm1hcmdpbj1udWxsfVtyLiRnZXRFeHRyYV0oKXtpZighdGhpc1tyLiRleHRyYV0pe2NvbnN0IGU9dGhpcy5lZGdlLmNoaWxkcmVuLnNsaWNlKCk7aWYoZS5sZW5ndGg8NCl7Y29uc3QgdD1lLmF0KC0xKXx8bmV3IEVkZ2Uoe30pO2ZvcihsZXQgYT1lLmxlbmd0aDthPDQ7YSsrKWUucHVzaCh0KX1jb25zdCB0PWUubWFwKChlPT5lLnRoaWNrbmVzcykpLGE9WzAsMCwwLDBdO2lmKHRoaXMubWFyZ2luKXthWzBdPXRoaXMubWFyZ2luLnRvcEluc2V0O2FbMV09dGhpcy5tYXJnaW4ucmlnaHRJbnNldDthWzJdPXRoaXMubWFyZ2luLmJvdHRvbUluc2V0O2FbM109dGhpcy5tYXJnaW4ubGVmdEluc2V0fXRoaXNbci4kZXh0cmFdPXt3aWR0aHM6dCxpbnNldHM6YSxlZGdlczplfX1yZXR1cm4gdGhpc1tyLiRleHRyYV19W3IuJHRvU3R5bGVdKCl7Y29uc3R7ZWRnZXM6ZX09dGhpc1tyLiRnZXRFeHRyYV0oKSx0PWUubWFwKChlPT57Y29uc3QgdD1lW3IuJHRvU3R5bGVdKCk7dC5jb2xvcj10LmNvbG9yfHwiIzAwMDAwMCI7cmV0dXJuIHR9KSksYT1PYmplY3QuY3JlYXRlKG51bGwpO3RoaXMubWFyZ2luJiZPYmplY3QuYXNzaWduKGEsdGhpcy5tYXJnaW5bci4kdG9TdHlsZV0oKSk7dGhpcy5maWxsJiYidmlzaWJsZSI9PT10aGlzLmZpbGwucHJlc2VuY2UmJk9iamVjdC5hc3NpZ24oYSx0aGlzLmZpbGxbci4kdG9TdHlsZV0oKSk7aWYodGhpcy5jb3JuZXIuY2hpbGRyZW4uc29tZSgoZT0+MCE9PWUucmFkaXVzKSkpe2NvbnN0IGU9dGhpcy5jb3JuZXIuY2hpbGRyZW4ubWFwKChlPT5lW3IuJHRvU3R5bGVdKCkpKTtpZigyPT09ZS5sZW5ndGh8fDM9PT1lLmxlbmd0aCl7Y29uc3QgdD1lLmF0KC0xKTtmb3IobGV0IGE9ZS5sZW5ndGg7YTw0O2ErKyllLnB1c2godCl9YS5ib3JkZXJSYWRpdXM9ZS5tYXAoKGU9PmUucmFkaXVzKSkuam9pbigiICIpfXN3aXRjaCh0aGlzLnByZXNlbmNlKXtjYXNlImludmlzaWJsZSI6Y2FzZSJoaWRkZW4iOmEuYm9yZGVyU3R5bGU9IiI7YnJlYWs7Y2FzZSJpbmFjdGl2ZSI6YS5ib3JkZXJTdHlsZT0ibm9uZSI7YnJlYWs7ZGVmYXVsdDphLmJvcmRlclN0eWxlPXQubWFwKChlPT5lLnN0eWxlKSkuam9pbigiICIpfWEuYm9yZGVyV2lkdGg9dC5tYXAoKGU9PmUud2lkdGgpKS5qb2luKCIgIik7YS5ib3JkZXJDb2xvcj10Lm1hcCgoZT0+ZS5jb2xvcikpLmpvaW4oIiAiKTtyZXR1cm4gYX19Y2xhc3MgQnJlYWsgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJicmVhayIsITApO3RoaXMuYWZ0ZXI9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuYWZ0ZXIsWyJhdXRvIiwiY29udGVudEFyZWEiLCJwYWdlQXJlYSIsInBhZ2VFdmVuIiwicGFnZU9kZCJdKTt0aGlzLmFmdGVyVGFyZ2V0PWUuYWZ0ZXJUYXJnZXR8fCIiO3RoaXMuYmVmb3JlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmJlZm9yZSxbImF1dG8iLCJjb250ZW50QXJlYSIsInBhZ2VBcmVhIiwicGFnZUV2ZW4iLCJwYWdlT2RkIl0pO3RoaXMuYmVmb3JlVGFyZ2V0PWUuYmVmb3JlVGFyZ2V0fHwiIjt0aGlzLmJvb2tlbmRMZWFkZXI9ZS5ib29rZW5kTGVhZGVyfHwiIjt0aGlzLmJvb2tlbmRUcmFpbGVyPWUuYm9va2VuZFRyYWlsZXJ8fCIiO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5vdmVyZmxvd0xlYWRlcj1lLm92ZXJmbG93TGVhZGVyfHwiIjt0aGlzLm92ZXJmbG93VGFyZ2V0PWUub3ZlcmZsb3dUYXJnZXR8fCIiO3RoaXMub3ZlcmZsb3dUcmFpbGVyPWUub3ZlcmZsb3dUcmFpbGVyfHwiIjt0aGlzLnN0YXJ0TmV3PSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5zdGFydE5ldyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsfX1jbGFzcyBCcmVha0FmdGVyIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiYnJlYWtBZnRlciIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5sZWFkZXI9ZS5sZWFkZXJ8fCIiO3RoaXMuc3RhcnROZXc9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLnN0YXJ0TmV3LGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy50YXJnZXQ9ZS50YXJnZXR8fCIiO3RoaXMudGFyZ2V0VHlwZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS50YXJnZXRUeXBlLFsiYXV0byIsImNvbnRlbnRBcmVhIiwicGFnZUFyZWEiXSk7dGhpcy50cmFpbGVyPWUudHJhaWxlcnx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuc2NyaXB0PW51bGx9fWNsYXNzIEJyZWFrQmVmb3JlIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiYnJlYWtCZWZvcmUiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubGVhZGVyPWUubGVhZGVyfHwiIjt0aGlzLnN0YXJ0TmV3PSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5zdGFydE5ldyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMudGFyZ2V0PWUudGFyZ2V0fHwiIjt0aGlzLnRhcmdldFR5cGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudGFyZ2V0VHlwZSxbImF1dG8iLCJjb250ZW50QXJlYSIsInBhZ2VBcmVhIl0pO3RoaXMudHJhaWxlcj1lLnRyYWlsZXJ8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnNjcmlwdD1udWxsfVtyLiR0b0hUTUxdKGUpe3RoaXNbci4kZXh0cmFdPXt9O3JldHVybiBvLkhUTUxSZXN1bHQuRkFJTFVSRX19Y2xhc3MgQnV0dG9uIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiYnV0dG9uIiwhMCk7dGhpcy5oaWdobGlnaHQ9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuaGlnaGxpZ2h0LFsiaW52ZXJ0ZWQiLCJub25lIiwib3V0bGluZSIsInB1c2giXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbH1bci4kdG9IVE1MXShlKXtjb25zdCB0PXRoaXNbci4kZ2V0UGFyZW50XSgpW3IuJGdldFBhcmVudF0oKSxhPXtuYW1lOiJidXR0b24iLGF0dHJpYnV0ZXM6e2lkOnRoaXNbci4kdWlkXSxjbGFzczpbInhmYUJ1dHRvbiJdLHN0eWxlOnt9fSxjaGlsZHJlbjpbXX07Zm9yKGNvbnN0IGUgb2YgdC5ldmVudC5jaGlsZHJlbil7aWYoImNsaWNrIiE9PWUuYWN0aXZpdHl8fCFlLnNjcmlwdCljb250aW51ZTtjb25zdCB0PSgwLGgucmVjb3ZlckpzVVJMKShlLnNjcmlwdFtyLiRjb250ZW50XSk7aWYoIXQpY29udGludWU7Y29uc3Qgbj0oMCxzLmZpeFVSTCkodC51cmwpO24mJmEuY2hpbGRyZW4ucHVzaCh7bmFtZToiYSIsYXR0cmlidXRlczp7aWQ6ImxpbmsiK3RoaXNbci4kdWlkXSxocmVmOm4sbmV3V2luZG93OnQubmV3V2luZG93LGNsYXNzOlsieGZhTGluayJdLHN0eWxlOnt9fSxjaGlsZHJlbjpbXX0pfXJldHVybiBvLkhUTUxSZXN1bHQuc3VjY2VzcyhhKX19Y2xhc3MgQ2FsY3VsYXRlIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiY2FsY3VsYXRlIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm92ZXJyaWRlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLm92ZXJyaWRlLFsiZGlzYWJsZWQiLCJlcnJvciIsImlnbm9yZSIsIndhcm5pbmciXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5tZXNzYWdlPW51bGw7dGhpcy5zY3JpcHQ9bnVsbH19Y2xhc3MgQ2FwdGlvbiBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImNhcHRpb24iLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucGxhY2VtZW50PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnBsYWNlbWVudCxbImxlZnQiLCJib3R0b20iLCJpbmxpbmUiLCJyaWdodCIsInRvcCJdKTt0aGlzLnByZXNlbmNlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pO3RoaXMucmVzZXJ2ZT1NYXRoLmNlaWwoKDAsby5nZXRNZWFzdXJlbWVudCkoZS5yZXNlcnZlKSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5mb250PW51bGw7dGhpcy5tYXJnaW49bnVsbDt0aGlzLnBhcmE9bnVsbDt0aGlzLnZhbHVlPW51bGx9W3IuJHNldFZhbHVlXShlKXtfc2V0VmFsdWUodGhpcyxlKX1bci4kZ2V0RXh0cmFdKGUpe2lmKCF0aGlzW3IuJGV4dHJhXSl7bGV0e3dpZHRoOnQsaGVpZ2h0OmF9PWU7c3dpdGNoKHRoaXMucGxhY2VtZW50KXtjYXNlImxlZnQiOmNhc2UicmlnaHQiOmNhc2UiaW5saW5lIjp0PXRoaXMucmVzZXJ2ZTw9MD90OnRoaXMucmVzZXJ2ZTticmVhaztjYXNlInRvcCI6Y2FzZSJib3R0b20iOmE9dGhpcy5yZXNlcnZlPD0wP2E6dGhpcy5yZXNlcnZlfXRoaXNbci4kZXh0cmFdPSgwLHMubGF5b3V0Tm9kZSkodGhpcyx7d2lkdGg6dCxoZWlnaHQ6YX0pfXJldHVybiB0aGlzW3IuJGV4dHJhXX1bci4kdG9IVE1MXShlKXtpZighdGhpcy52YWx1ZSlyZXR1cm4gby5IVE1MUmVzdWx0LkVNUFRZO3RoaXNbci4kcHVzaFBhcmFdKCk7Y29uc3QgdD10aGlzLnZhbHVlW3IuJHRvSFRNTF0oZSkuaHRtbDtpZighdCl7dGhpc1tyLiRwb3BQYXJhXSgpO3JldHVybiBvLkhUTUxSZXN1bHQuRU1QVFl9Y29uc3QgYT10aGlzLnJlc2VydmU7aWYodGhpcy5yZXNlcnZlPD0wKXtjb25zdHt3OnQsaDphfT10aGlzW3IuJGdldEV4dHJhXShlKTtzd2l0Y2godGhpcy5wbGFjZW1lbnQpe2Nhc2UibGVmdCI6Y2FzZSJyaWdodCI6Y2FzZSJpbmxpbmUiOnRoaXMucmVzZXJ2ZT10O2JyZWFrO2Nhc2UidG9wIjpjYXNlImJvdHRvbSI6dGhpcy5yZXNlcnZlPWF9fWNvbnN0IG49W107InN0cmluZyI9PXR5cGVvZiB0P24ucHVzaCh7bmFtZToiI3RleHQiLHZhbHVlOnR9KTpuLnB1c2godCk7Y29uc3QgaT0oMCxzLnRvU3R5bGUpKHRoaXMsImZvbnQiLCJtYXJnaW4iLCJ2aXNpYmlsaXR5Iik7c3dpdGNoKHRoaXMucGxhY2VtZW50KXtjYXNlImxlZnQiOmNhc2UicmlnaHQiOnRoaXMucmVzZXJ2ZT4wJiYoaS53aWR0aD0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5yZXNlcnZlKSk7YnJlYWs7Y2FzZSJ0b3AiOmNhc2UiYm90dG9tIjp0aGlzLnJlc2VydmU+MCYmKGkuaGVpZ2h0PSgwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnJlc2VydmUpKX0oMCxzLnNldFBhcmEpKHRoaXMsbnVsbCx0KTt0aGlzW3IuJHBvcFBhcmFdKCk7dGhpcy5yZXNlcnZlPWE7cmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e3N0eWxlOmksY2xhc3M6WyJ4ZmFDYXB0aW9uIl19LGNoaWxkcmVuOm59KX19Y2xhc3MgQ2VydGlmaWNhdGUgZXh0ZW5kcyByLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJjZXJ0aWZpY2F0ZSIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBDZXJ0aWZpY2F0ZXMgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJjZXJ0aWZpY2F0ZXMiLCEwKTt0aGlzLmNyZWRlbnRpYWxTZXJ2ZXJQb2xpY3k9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuY3JlZGVudGlhbFNlcnZlclBvbGljeSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVybD1lLnVybHx8IiI7dGhpcy51cmxQb2xpY3k9ZS51cmxQb2xpY3l8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmVuY3J5cHRpb249bnVsbDt0aGlzLmlzc3VlcnM9bnVsbDt0aGlzLmtleVVzYWdlPW51bGw7dGhpcy5vaWRzPW51bGw7dGhpcy5zaWduaW5nPW51bGw7dGhpcy5zdWJqZWN0RE5zPW51bGx9fWNsYXNzIENoZWNrQnV0dG9uIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiY2hlY2tCdXR0b24iLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubWFyaz0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5tYXJrLFsiZGVmYXVsdCIsImNoZWNrIiwiY2lyY2xlIiwiY3Jvc3MiLCJkaWFtb25kIiwic3F1YXJlIiwic3RhciJdKTt0aGlzLnNoYXBlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnNoYXBlLFsic3F1YXJlIiwicm91bmQiXSk7dGhpcy5zaXplPSgwLG8uZ2V0TWVhc3VyZW1lbnQpKGUuc2l6ZSwiMTBwdCIpO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmJvcmRlcj1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5tYXJnaW49bnVsbH1bci4kdG9IVE1MXShlKXtjb25zdCB0PSgwLHMudG9TdHlsZSkoIm1hcmdpbiIpLGE9KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMuc2l6ZSk7dC53aWR0aD10LmhlaWdodD1hO2xldCBuLGksYztjb25zdCBsPXRoaXNbci4kZ2V0UGFyZW50XSgpW3IuJGdldFBhcmVudF0oKSxoPWwuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoJiZsLml0ZW1zLmNoaWxkcmVuWzBdW3IuJHRvSFRNTF0oKS5odG1sfHxbXSx1PXtvbjoodm9pZCAwIT09aFswXT9oWzBdOiJvbiIpLnRvU3RyaW5nKCksb2ZmOih2b2lkIDAhPT1oWzFdP2hbMV06Im9mZiIpLnRvU3RyaW5nKCl9LGQ9KGwudmFsdWUmJmwudmFsdWVbci4kdGV4dF0oKXx8Im9mZiIpPT09dS5vbnx8dm9pZCAwLGY9bFtyLiRnZXRTdWJmb3JtUGFyZW50XSgpLGc9bFtyLiR1aWRdO2xldCBwO2lmKGYgaW5zdGFuY2VvZiBFeGNsR3JvdXApe2M9ZltyLiR1aWRdO249InJhZGlvIjtpPSJ4ZmFSYWRpbyI7cD1mW3IuJGRhdGFdJiZmW3IuJGRhdGFdW3IuJHVpZF18fGZbci4kdWlkXX1lbHNle249ImNoZWNrYm94IjtpPSJ4ZmFDaGVja2JveCI7cD1sW3IuJGRhdGFdJiZsW3IuJGRhdGFdW3IuJHVpZF18fGxbci4kdWlkXX1jb25zdCBtPXtuYW1lOiJpbnB1dCIsYXR0cmlidXRlczp7Y2xhc3M6W2ldLHN0eWxlOnQsZmllbGRJZDpnLGRhdGFJZDpwLHR5cGU6bixjaGVja2VkOmQseGZhT246dS5vbix4ZmFPZmY6dS5vZmYsImFyaWEtbGFiZWwiOmFyaWFMYWJlbChsKSwiYXJpYS1yZXF1aXJlZCI6ITF9fTtjJiYobS5hdHRyaWJ1dGVzLm5hbWU9Yyk7aWYoaXNSZXF1aXJlZChsKSl7bS5hdHRyaWJ1dGVzWyJhcmlhLXJlcXVpcmVkIl09ITA7bS5hdHRyaWJ1dGVzLnJlcXVpcmVkPSEwfXJldHVybiBvLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToibGFiZWwiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhTGFiZWwiXX0sY2hpbGRyZW46W21dfSl9fWNsYXNzIENob2ljZUxpc3QgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJjaG9pY2VMaXN0IiwhMCk7dGhpcy5jb21taXRPbj0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5jb21taXRPbixbInNlbGVjdCIsImV4aXQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm9wZW49KDAsby5nZXRTdHJpbmdPcHRpb24pKGUub3BlbixbInVzZXJDb250cm9sIiwiYWx3YXlzIiwibXVsdGlTZWxlY3QiLCJvbkVudHJ5Il0pO3RoaXMudGV4dEVudHJ5PSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS50ZXh0RW50cnksZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib3JkZXI9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMubWFyZ2luPW51bGx9W3IuJHRvSFRNTF0oZSl7Y29uc3QgdD0oMCxzLnRvU3R5bGUpKHRoaXMsImJvcmRlciIsIm1hcmdpbiIpLGE9dGhpc1tyLiRnZXRQYXJlbnRdKClbci4kZ2V0UGFyZW50XSgpLG49e2ZvbnRTaXplOmBjYWxjKCR7YS5mb250JiZhLmZvbnQuc2l6ZXx8MTB9cHggKiB2YXIoLS1zY2FsZS1mYWN0b3IpKWB9LGk9W107aWYoYS5pdGVtcy5jaGlsZHJlbi5sZW5ndGg+MCl7Y29uc3QgZT1hLml0ZW1zO2xldCB0PTAscz0wO2lmKDI9PT1lLmNoaWxkcmVuLmxlbmd0aCl7dD1lLmNoaWxkcmVuWzBdLnNhdmU7cz0xLXR9Y29uc3Qgbz1lLmNoaWxkcmVuW3RdW3IuJHRvSFRNTF0oKS5odG1sLGM9ZS5jaGlsZHJlbltzXVtyLiR0b0hUTUxdKCkuaHRtbDtsZXQgbD0hMTtjb25zdCBoPWEudmFsdWUmJmEudmFsdWVbci4kdGV4dF0oKXx8IiI7Zm9yKGxldCBlPTAsdD1vLmxlbmd0aDtlPHQ7ZSsrKXtjb25zdCB0PXtuYW1lOiJvcHRpb24iLGF0dHJpYnV0ZXM6e3ZhbHVlOmNbZV18fG9bZV0sc3R5bGU6bn0sdmFsdWU6b1tlXX07Y1tlXT09PWgmJih0LmF0dHJpYnV0ZXMuc2VsZWN0ZWQ9bD0hMCk7aS5wdXNoKHQpfWx8fGkuc3BsaWNlKDAsMCx7bmFtZToib3B0aW9uIixhdHRyaWJ1dGVzOntoaWRkZW46ITAsc2VsZWN0ZWQ6ITB9LHZhbHVlOiIgIn0pfWNvbnN0IGM9e2NsYXNzOlsieGZhU2VsZWN0Il0sZmllbGRJZDphW3IuJHVpZF0sZGF0YUlkOmFbci4kZGF0YV0mJmFbci4kZGF0YV1bci4kdWlkXXx8YVtyLiR1aWRdLHN0eWxlOnQsImFyaWEtbGFiZWwiOmFyaWFMYWJlbChhKSwiYXJpYS1yZXF1aXJlZCI6ITF9O2lmKGlzUmVxdWlyZWQoYSkpe2NbImFyaWEtcmVxdWlyZWQiXT0hMDtjLnJlcXVpcmVkPSEwfSJtdWx0aVNlbGVjdCI9PT10aGlzLm9wZW4mJihjLm11bHRpcGxlPSEwKTtyZXR1cm4gby5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImxhYmVsIixhdHRyaWJ1dGVzOntjbGFzczpbInhmYUxhYmVsIl19LGNoaWxkcmVuOlt7bmFtZToic2VsZWN0IixjaGlsZHJlbjppLGF0dHJpYnV0ZXM6Y31dfSl9fWNsYXNzIENvbG9yIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiY29sb3IiLCEwKTt0aGlzLmNTcGFjZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5jU3BhY2UsWyJTUkdCIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMudmFsdWU9ZS52YWx1ZT8oMCxvLmdldENvbG9yKShlLnZhbHVlKToiIjt0aGlzLmV4dHJhcz1udWxsfVtyLiRoYXNTZXR0YWJsZVZhbHVlXSgpe3JldHVybiExfVtyLiR0b1N0eWxlXSgpe3JldHVybiB0aGlzLnZhbHVlP2MuVXRpbC5tYWtlSGV4Q29sb3IodGhpcy52YWx1ZS5yLHRoaXMudmFsdWUuZyx0aGlzLnZhbHVlLmIpOm51bGx9fWNsYXNzIENvbWIgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJjb21iIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm51bWJlck9mQ2VsbHM9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLm51bWJlck9mQ2VsbHMsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+ZT49MH0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgQ29ubmVjdCBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImNvbm5lY3QiLCEwKTt0aGlzLmNvbm5lY3Rpb249ZS5jb25uZWN0aW9ufHwiIjt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucmVmPWUucmVmfHwiIjt0aGlzLnVzYWdlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnVzYWdlLFsiZXhwb3J0QW5kSW1wb3J0IiwiZXhwb3J0T25seSIsImltcG9ydE9ubHkiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMucGljdHVyZT1udWxsfX1jbGFzcyBDb250ZW50QXJlYSBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImNvbnRlbnRBcmVhIiwhMCk7dGhpcy5oPSgwLG8uZ2V0TWVhc3VyZW1lbnQpKGUuaCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnJlbGV2YW50PSgwLG8uZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnc9KDAsby5nZXRNZWFzdXJlbWVudCkoZS53KTt0aGlzLng9KDAsby5nZXRNZWFzdXJlbWVudCkoZS54LCIwcHQiKTt0aGlzLnk9KDAsby5nZXRNZWFzdXJlbWVudCkoZS55LCIwcHQiKTt0aGlzLmRlc2M9bnVsbDt0aGlzLmV4dHJhcz1udWxsfVtyLiR0b0hUTUxdKGUpe2NvbnN0IHQ9e2xlZnQ6KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMueCksdG9wOigwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnkpLHdpZHRoOigwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLncpLGhlaWdodDooMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5oKX0sYT1bInhmYUNvbnRlbnRhcmVhIl07KDAscy5pc1ByaW50T25seSkodGhpcykmJmEucHVzaCgieGZhUHJpbnRPbmx5Iik7cmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGNoaWxkcmVuOltdLGF0dHJpYnV0ZXM6e3N0eWxlOnQsY2xhc3M6YSxpZDp0aGlzW3IuJHVpZF19fSl9fWNsYXNzIENvcm5lciBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImNvcm5lciIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5pbnZlcnRlZD0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUuaW52ZXJ0ZWQsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLmpvaW49KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuam9pbixbInNxdWFyZSIsInJvdW5kIl0pO3RoaXMucHJlc2VuY2U9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSk7dGhpcy5yYWRpdXM9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5yYWRpdXMpO3RoaXMuc3Ryb2tlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnN0cm9rZSxbInNvbGlkIiwiZGFzaERvdCIsImRhc2hEb3REb3QiLCJkYXNoZWQiLCJkb3R0ZWQiLCJlbWJvc3NlZCIsImV0Y2hlZCIsImxvd2VyZWQiLCJyYWlzZWQiXSk7dGhpcy50aGlja25lc3M9KDAsby5nZXRNZWFzdXJlbWVudCkoZS50aGlja25lc3MsIjAuNXB0Iik7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY29sb3I9bnVsbDt0aGlzLmV4dHJhcz1udWxsfVtyLiR0b1N0eWxlXSgpe2NvbnN0IGU9KDAscy50b1N0eWxlKSh0aGlzLCJ2aXNpYmlsaXR5Iik7ZS5yYWRpdXM9KDAscy5tZWFzdXJlVG9TdHJpbmcpKCJzcXVhcmUiPT09dGhpcy5qb2luPzA6dGhpcy5yYWRpdXMpO3JldHVybiBlfX1jbGFzcyBEYXRlRWxlbWVudCBleHRlbmRzIHIuQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJkYXRlIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W3IuJGZpbmFsaXplXSgpe2NvbnN0IGU9dGhpc1tyLiRjb250ZW50XS50cmltKCk7dGhpc1tyLiRjb250ZW50XT1lP25ldyBEYXRlKGUpOm51bGx9W3IuJHRvSFRNTF0oZSl7cmV0dXJuIHZhbHVlVG9IdG1sKHRoaXNbci4kY29udGVudF0/dGhpc1tyLiRjb250ZW50XS50b1N0cmluZygpOiIiKX19Y2xhc3MgRGF0ZVRpbWUgZXh0ZW5kcyByLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZGF0ZVRpbWUiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bci4kZmluYWxpemVdKCl7Y29uc3QgZT10aGlzW3IuJGNvbnRlbnRdLnRyaW0oKTt0aGlzW3IuJGNvbnRlbnRdPWU/bmV3IERhdGUoZSk6bnVsbH1bci4kdG9IVE1MXShlKXtyZXR1cm4gdmFsdWVUb0h0bWwodGhpc1tyLiRjb250ZW50XT90aGlzW3IuJGNvbnRlbnRdLnRvU3RyaW5nKCk6IiIpfX1jbGFzcyBEYXRlVGltZUVkaXQgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJkYXRlVGltZUVkaXQiLCEwKTt0aGlzLmhTY3JvbGxQb2xpY3k9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuaFNjcm9sbFBvbGljeSxbImF1dG8iLCJvZmYiLCJvbiJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucGlja2VyPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnBpY2tlcixbImhvc3QiLCJub25lIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmJvcmRlcj1udWxsO3RoaXMuY29tYj1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5tYXJnaW49bnVsbH1bci4kdG9IVE1MXShlKXtjb25zdCB0PSgwLHMudG9TdHlsZSkodGhpcywiYm9yZGVyIiwiZm9udCIsIm1hcmdpbiIpLGE9dGhpc1tyLiRnZXRQYXJlbnRdKClbci4kZ2V0UGFyZW50XSgpLG49e25hbWU6ImlucHV0IixhdHRyaWJ1dGVzOnt0eXBlOiJ0ZXh0IixmaWVsZElkOmFbci4kdWlkXSxkYXRhSWQ6YVtyLiRkYXRhXSYmYVtyLiRkYXRhXVtyLiR1aWRdfHxhW3IuJHVpZF0sY2xhc3M6WyJ4ZmFUZXh0ZmllbGQiXSxzdHlsZTp0LCJhcmlhLWxhYmVsIjphcmlhTGFiZWwoYSksImFyaWEtcmVxdWlyZWQiOiExfX07aWYoaXNSZXF1aXJlZChhKSl7bi5hdHRyaWJ1dGVzWyJhcmlhLXJlcXVpcmVkIl09ITA7bi5hdHRyaWJ1dGVzLnJlcXVpcmVkPSEwfXJldHVybiBvLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToibGFiZWwiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhTGFiZWwiXX0sY2hpbGRyZW46W25dfSl9fWNsYXNzIERlY2ltYWwgZXh0ZW5kcyByLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZGVjaW1hbCIpO3RoaXMuZnJhY0RpZ2l0cz0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUuZnJhY0RpZ2l0cyxkZWZhdWx0VmFsdWU6Mix2YWxpZGF0ZTplPT4hMH0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5sZWFkRGlnaXRzPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5sZWFkRGlnaXRzLGRlZmF1bHRWYWx1ZTotMSx2YWxpZGF0ZTplPT4hMH0pO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bci4kZmluYWxpemVdKCl7Y29uc3QgZT1wYXJzZUZsb2F0KHRoaXNbci4kY29udGVudF0udHJpbSgpKTt0aGlzW3IuJGNvbnRlbnRdPWlzTmFOKGUpP251bGw6ZX1bci4kdG9IVE1MXShlKXtyZXR1cm4gdmFsdWVUb0h0bWwobnVsbCE9PXRoaXNbci4kY29udGVudF0/dGhpc1tyLiRjb250ZW50XS50b1N0cmluZygpOiIiKX19Y2xhc3MgRGVmYXVsdFVpIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZGVmYXVsdFVpIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbH19Y2xhc3MgRGVzYyBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImRlc2MiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmJvb2xlYW49bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZGF0ZVRpbWU9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5kZWNpbWFsPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZXhEYXRhPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZmxvYXQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5pbWFnZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmludGVnZXI9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy50ZXh0PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMudGltZT1uZXcgci5YRkFPYmplY3RBcnJheX19Y2xhc3MgRGlnZXN0TWV0aG9kIGV4dGVuZHMgci5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZGlnZXN0TWV0aG9kIixbIiIsIlNIQTEiLCJTSEEyNTYiLCJTSEE1MTIiLCJSSVBFTUQxNjAiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIERpZ2VzdE1ldGhvZHMgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJkaWdlc3RNZXRob2RzIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZGlnZXN0TWV0aG9kPW5ldyByLlhGQU9iamVjdEFycmF5fX1jbGFzcyBEcmF3IGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZHJhdyIsITApO3RoaXMuYW5jaG9yVHlwZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5hbmNob3JUeXBlLFsidG9wTGVmdCIsImJvdHRvbUNlbnRlciIsImJvdHRvbUxlZnQiLCJib3R0b21SaWdodCIsIm1pZGRsZUNlbnRlciIsIm1pZGRsZUxlZnQiLCJtaWRkbGVSaWdodCIsInRvcENlbnRlciIsInRvcFJpZ2h0Il0pO3RoaXMuY29sU3Bhbj0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUuY29sU3BhbixkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTplPT5lPj0xfHwtMT09PWV9KTt0aGlzLmg9ZS5oPygwLG8uZ2V0TWVhc3VyZW1lbnQpKGUuaCk6IiI7dGhpcy5oQWxpZ249KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuaEFsaWduLFsibGVmdCIsImNlbnRlciIsImp1c3RpZnkiLCJqdXN0aWZ5QWxsIiwicmFkaXgiLCJyaWdodCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubG9jYWxlPWUubG9jYWxlfHwiIjt0aGlzLm1heEg9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5tYXhILCIwcHQiKTt0aGlzLm1heFc9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5tYXhXLCIwcHQiKTt0aGlzLm1pbkg9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5taW5ILCIwcHQiKTt0aGlzLm1pblc9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5taW5XLCIwcHQiKTt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnByZXNlbmNlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pO3RoaXMucmVsZXZhbnQ9KDAsby5nZXRSZWxldmFudCkoZS5yZWxldmFudCk7dGhpcy5yb3RhdGU9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLnJvdGF0ZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT5lJTkwPT0wfSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMudz1lLnc/KDAsby5nZXRNZWFzdXJlbWVudCkoZS53KToiIjt0aGlzLng9KDAsby5nZXRNZWFzdXJlbWVudCkoZS54LCIwcHQiKTt0aGlzLnk9KDAsby5nZXRNZWFzdXJlbWVudCkoZS55LCIwcHQiKTt0aGlzLmFzc2lzdD1udWxsO3RoaXMuYm9yZGVyPW51bGw7dGhpcy5jYXB0aW9uPW51bGw7dGhpcy5kZXNjPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmZvbnQ9bnVsbDt0aGlzLmtlZXA9bnVsbDt0aGlzLm1hcmdpbj1udWxsO3RoaXMucGFyYT1udWxsO3RoaXMudHJhdmVyc2FsPW51bGw7dGhpcy51aT1udWxsO3RoaXMudmFsdWU9bnVsbDt0aGlzLnNldFByb3BlcnR5PW5ldyByLlhGQU9iamVjdEFycmF5fVtyLiRzZXRWYWx1ZV0oZSl7X3NldFZhbHVlKHRoaXMsZSl9W3IuJHRvSFRNTF0oZSl7c2V0VGFiSW5kZXgodGhpcyk7aWYoImhpZGRlbiI9PT10aGlzLnByZXNlbmNlfHwiaW5hY3RpdmUiPT09dGhpcy5wcmVzZW5jZSlyZXR1cm4gby5IVE1MUmVzdWx0LkVNUFRZOygwLHMuZml4RGltZW5zaW9ucykodGhpcyk7dGhpc1tyLiRwdXNoUGFyYV0oKTtjb25zdCB0PXRoaXMudyxhPXRoaXMuaCx7dzpuLGg6Yyxpc0Jyb2tlbjpsfT0oMCxzLmxheW91dE5vZGUpKHRoaXMsZSk7aWYobiYmIiI9PT10aGlzLncpe2lmKGwmJnRoaXNbci4kZ2V0U3ViZm9ybVBhcmVudF0oKVtyLiRpc1RoZXJlTW9yZVdpZHRoXSgpKXt0aGlzW3IuJHBvcFBhcmFdKCk7cmV0dXJuIG8uSFRNTFJlc3VsdC5GQUlMVVJFfXRoaXMudz1ufWMmJiIiPT09dGhpcy5oJiYodGhpcy5oPWMpO3NldEZpcnN0VW5zcGxpdHRhYmxlKHRoaXMpO2lmKCEoMCxpLmNoZWNrRGltZW5zaW9ucykodGhpcyxlKSl7dGhpcy53PXQ7dGhpcy5oPWE7dGhpc1tyLiRwb3BQYXJhXSgpO3JldHVybiBvLkhUTUxSZXN1bHQuRkFJTFVSRX11bnNldEZpcnN0VW5zcGxpdHRhYmxlKHRoaXMpO2NvbnN0IGg9KDAscy50b1N0eWxlKSh0aGlzLCJmb250IiwiaEFsaWduIiwiZGltZW5zaW9ucyIsInBvc2l0aW9uIiwicHJlc2VuY2UiLCJyb3RhdGUiLCJhbmNob3JUeXBlIiwiYm9yZGVyIiwibWFyZ2luIik7KDAscy5zZXRNaW5NYXhEaW1lbnNpb25zKSh0aGlzLGgpO2lmKGgubWFyZ2luKXtoLnBhZGRpbmc9aC5tYXJnaW47ZGVsZXRlIGgubWFyZ2lufWNvbnN0IHU9WyJ4ZmFEcmF3Il07dGhpcy5mb250JiZ1LnB1c2goInhmYUZvbnQiKTsoMCxzLmlzUHJpbnRPbmx5KSh0aGlzKSYmdS5wdXNoKCJ4ZmFQcmludE9ubHkiKTtjb25zdCBkPXtzdHlsZTpoLGlkOnRoaXNbci4kdWlkXSxjbGFzczp1fTt0aGlzLm5hbWUmJihkLnhmYU5hbWU9dGhpcy5uYW1lKTtjb25zdCBmPXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6ZCxjaGlsZHJlbjpbXX07YXBwbHlBc3Npc3QodGhpcyxkKTtjb25zdCBnPSgwLHMuY29tcHV0ZUJib3gpKHRoaXMsZixlKSxwPXRoaXMudmFsdWU/dGhpcy52YWx1ZVtyLiR0b0hUTUxdKGUpLmh0bWw6bnVsbDtpZihudWxsPT09cCl7dGhpcy53PXQ7dGhpcy5oPWE7dGhpc1tyLiRwb3BQYXJhXSgpO3JldHVybiBvLkhUTUxSZXN1bHQuc3VjY2VzcygoMCxzLmNyZWF0ZVdyYXBwZXIpKHRoaXMsZiksZyl9Zi5jaGlsZHJlbi5wdXNoKHApOygwLHMuc2V0UGFyYSkodGhpcyxoLHApO3RoaXMudz10O3RoaXMuaD1hO3RoaXNbci4kcG9wUGFyYV0oKTtyZXR1cm4gby5IVE1MUmVzdWx0LnN1Y2Nlc3MoKDAscy5jcmVhdGVXcmFwcGVyKSh0aGlzLGYpLGcpfX1jbGFzcyBFZGdlIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZWRnZSIsITApO3RoaXMuY2FwPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmNhcCxbInNxdWFyZSIsImJ1dHQiLCJyb3VuZCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucHJlc2VuY2U9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSk7dGhpcy5zdHJva2U9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuc3Ryb2tlLFsic29saWQiLCJkYXNoRG90IiwiZGFzaERvdERvdCIsImRhc2hlZCIsImRvdHRlZCIsImVtYm9zc2VkIiwiZXRjaGVkIiwibG93ZXJlZCIsInJhaXNlZCJdKTt0aGlzLnRoaWNrbmVzcz0oMCxvLmdldE1lYXN1cmVtZW50KShlLnRoaWNrbmVzcywiMC41cHQiKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5jb2xvcj1udWxsO3RoaXMuZXh0cmFzPW51bGx9W3IuJHRvU3R5bGVdKCl7Y29uc3QgZT0oMCxzLnRvU3R5bGUpKHRoaXMsInZpc2liaWxpdHkiKTtPYmplY3QuYXNzaWduKGUse2xpbmVjYXA6dGhpcy5jYXAsd2lkdGg6KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMudGhpY2tuZXNzKSxjb2xvcjp0aGlzLmNvbG9yP3RoaXMuY29sb3Jbci4kdG9TdHlsZV0oKToiIzAwMDAwMCIsc3R5bGU6IiJ9KTtpZigidmlzaWJsZSIhPT10aGlzLnByZXNlbmNlKWUuc3R5bGU9Im5vbmUiO2Vsc2Ugc3dpdGNoKHRoaXMuc3Ryb2tlKXtjYXNlInNvbGlkIjplLnN0eWxlPSJzb2xpZCI7YnJlYWs7Y2FzZSJkYXNoRG90IjpjYXNlImRhc2hEb3REb3QiOmNhc2UiZGFzaGVkIjplLnN0eWxlPSJkYXNoZWQiO2JyZWFrO2Nhc2UiZG90dGVkIjplLnN0eWxlPSJkb3R0ZWQiO2JyZWFrO2Nhc2UiZW1ib3NzZWQiOmUuc3R5bGU9InJpZGdlIjticmVhaztjYXNlImV0Y2hlZCI6ZS5zdHlsZT0iZ3Jvb3ZlIjticmVhaztjYXNlImxvd2VyZWQiOmUuc3R5bGU9Imluc2V0IjticmVhaztjYXNlInJhaXNlZCI6ZS5zdHlsZT0ib3V0c2V0In1yZXR1cm4gZX19Y2xhc3MgRW5jb2RpbmcgZXh0ZW5kcyByLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJlbmNvZGluZyIsWyJhZGJlLng1MDkucnNhX3NoYTEiLCJhZGJlLnBrY3M3LmRldGFjaGVkIiwiYWRiZS5wa2NzNy5zaGExIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBFbmNvZGluZ3MgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJlbmNvZGluZ3MiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5lbmNvZGluZz1uZXcgci5YRkFPYmplY3RBcnJheX19Y2xhc3MgRW5jcnlwdCBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImVuY3J5cHQiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNlcnRpZmljYXRlPW51bGx9fWNsYXNzIEVuY3J5cHREYXRhIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZW5jcnlwdERhdGEiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMub3BlcmF0aW9uPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLm9wZXJhdGlvbixbImVuY3J5cHQiLCJkZWNyeXB0Il0pO3RoaXMudGFyZ2V0PWUudGFyZ2V0fHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5maWx0ZXI9bnVsbDt0aGlzLm1hbmlmZXN0PW51bGx9fWNsYXNzIEVuY3J5cHRpb24gZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJlbmNyeXB0aW9uIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY2VydGlmaWNhdGU9bmV3IHIuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIEVuY3J5cHRpb25NZXRob2QgZXh0ZW5kcyByLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJlbmNyeXB0aW9uTWV0aG9kIixbIiIsIkFFUzI1Ni1DQkMiLCJUUklQTEVERVMtQ0JDIiwiQUVTMTI4LUNCQyIsIkFFUzE5Mi1DQkMiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIEVuY3J5cHRpb25NZXRob2RzIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZW5jcnlwdGlvbk1ldGhvZHMiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5lbmNyeXB0aW9uTWV0aG9kPW5ldyByLlhGQU9iamVjdEFycmF5fX1jbGFzcyBFdmVudCBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImV2ZW50IiwhMCk7dGhpcy5hY3Rpdml0eT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5hY3Rpdml0eSxbImNsaWNrIiwiY2hhbmdlIiwiZG9jQ2xvc2UiLCJkb2NSZWFkeSIsImVudGVyIiwiZXhpdCIsImZ1bGwiLCJpbmRleENoYW5nZSIsImluaXRpYWxpemUiLCJtb3VzZURvd24iLCJtb3VzZUVudGVyIiwibW91c2VFeGl0IiwibW91c2VVcCIsInBvc3RFeGVjdXRlIiwicG9zdE9wZW4iLCJwb3N0UHJpbnQiLCJwb3N0U2F2ZSIsInBvc3RTaWduIiwicG9zdFN1Ym1pdCIsInByZUV4ZWN1dGUiLCJwcmVPcGVuIiwicHJlUHJpbnQiLCJwcmVTYXZlIiwicHJlU2lnbiIsInByZVN1Ym1pdCIsInJlYWR5IiwidmFsaWRhdGlvblN0YXRlIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5saXN0ZW49KDAsby5nZXRTdHJpbmdPcHRpb24pKGUubGlzdGVuLFsicmVmT25seSIsInJlZkFuZERlc2NlbmRlbnRzIl0pO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucmVmPWUucmVmfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmVuY3J5cHREYXRhPW51bGw7dGhpcy5leGVjdXRlPW51bGw7dGhpcy5zY3JpcHQ9bnVsbDt0aGlzLnNpZ25EYXRhPW51bGw7dGhpcy5zdWJtaXQ9bnVsbH19Y2xhc3MgRXhEYXRhIGV4dGVuZHMgci5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImV4RGF0YSIpO3RoaXMuY29udGVudFR5cGU9ZS5jb250ZW50VHlwZXx8IiI7dGhpcy5ocmVmPWUuaHJlZnx8IiI7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm1heExlbmd0aD0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUubWF4TGVuZ3RoLGRlZmF1bHRWYWx1ZTotMSx2YWxpZGF0ZTplPT5lPj0tMX0pO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucmlkPWUucmlkfHwiIjt0aGlzLnRyYW5zZmVyRW5jb2Rpbmc9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudHJhbnNmZXJFbmNvZGluZyxbIm5vbmUiLCJiYXNlNjQiLCJwYWNrYWdlIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bci4kaXNDREFUQVhtbF0oKXtyZXR1cm4idGV4dC9odG1sIj09PXRoaXMuY29udGVudFR5cGV9W3IuJG9uQ2hpbGRdKGUpe2lmKCJ0ZXh0L2h0bWwiPT09dGhpcy5jb250ZW50VHlwZSYmZVtyLiRuYW1lc3BhY2VJZF09PT1uLk5hbWVzcGFjZUlkcy54aHRtbC5pZCl7dGhpc1tyLiRjb250ZW50XT1lO3JldHVybiEwfWlmKCJ0ZXh0L3htbCI9PT10aGlzLmNvbnRlbnRUeXBlKXt0aGlzW3IuJGNvbnRlbnRdPWU7cmV0dXJuITB9cmV0dXJuITF9W3IuJHRvSFRNTF0oZSl7cmV0dXJuInRleHQvaHRtbCI9PT10aGlzLmNvbnRlbnRUeXBlJiZ0aGlzW3IuJGNvbnRlbnRdP3RoaXNbci4kY29udGVudF1bci4kdG9IVE1MXShlKTpvLkhUTUxSZXN1bHQuRU1QVFl9fWNsYXNzIEV4T2JqZWN0IGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZXhPYmplY3QiLCEwKTt0aGlzLmFyY2hpdmU9ZS5hcmNoaXZlfHwiIjt0aGlzLmNsYXNzSWQ9ZS5jbGFzc0lkfHwiIjt0aGlzLmNvZGVCYXNlPWUuY29kZUJhc2V8fCIiO3RoaXMuY29kZVR5cGU9ZS5jb2RlVHlwZXx8IiI7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmJvb2xlYW49bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZGF0ZVRpbWU9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5kZWNpbWFsPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZXhEYXRhPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZXhPYmplY3Q9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5mbG9hdD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmltYWdlPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuaW50ZWdlcj1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnRleHQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy50aW1lPW5ldyByLlhGQU9iamVjdEFycmF5fX1jbGFzcyBFeGNsR3JvdXAgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJleGNsR3JvdXAiLCEwKTt0aGlzLmFjY2Vzcz0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5hY2Nlc3MsWyJvcGVuIiwibm9uSW50ZXJhY3RpdmUiLCJwcm90ZWN0ZWQiLCJyZWFkT25seSJdKTt0aGlzLmFjY2Vzc0tleT1lLmFjY2Vzc0tleXx8IiI7dGhpcy5hbmNob3JUeXBlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmFuY2hvclR5cGUsWyJ0b3BMZWZ0IiwiYm90dG9tQ2VudGVyIiwiYm90dG9tTGVmdCIsImJvdHRvbVJpZ2h0IiwibWlkZGxlQ2VudGVyIiwibWlkZGxlTGVmdCIsIm1pZGRsZVJpZ2h0IiwidG9wQ2VudGVyIiwidG9wUmlnaHQiXSk7dGhpcy5jb2xTcGFuPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5jb2xTcGFuLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmU9PmU+PTF8fC0xPT09ZX0pO3RoaXMuaD1lLmg/KDAsby5nZXRNZWFzdXJlbWVudCkoZS5oKToiIjt0aGlzLmhBbGlnbj0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5oQWxpZ24sWyJsZWZ0IiwiY2VudGVyIiwianVzdGlmeSIsImp1c3RpZnlBbGwiLCJyYWRpeCIsInJpZ2h0Il0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5sYXlvdXQ9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUubGF5b3V0LFsicG9zaXRpb24iLCJsci10YiIsInJsLXJvdyIsInJsLXRiIiwicm93IiwidGFibGUiLCJ0YiJdKTt0aGlzLm1heEg9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5tYXhILCIwcHQiKTt0aGlzLm1heFc9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5tYXhXLCIwcHQiKTt0aGlzLm1pbkg9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5taW5ILCIwcHQiKTt0aGlzLm1pblc9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5taW5XLCIwcHQiKTt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnByZXNlbmNlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pO3RoaXMucmVsZXZhbnQ9KDAsby5nZXRSZWxldmFudCkoZS5yZWxldmFudCk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMudz1lLnc/KDAsby5nZXRNZWFzdXJlbWVudCkoZS53KToiIjt0aGlzLng9KDAsby5nZXRNZWFzdXJlbWVudCkoZS54LCIwcHQiKTt0aGlzLnk9KDAsby5nZXRNZWFzdXJlbWVudCkoZS55LCIwcHQiKTt0aGlzLmFzc2lzdD1udWxsO3RoaXMuYmluZD1udWxsO3RoaXMuYm9yZGVyPW51bGw7dGhpcy5jYWxjdWxhdGU9bnVsbDt0aGlzLmNhcHRpb249bnVsbDt0aGlzLmRlc2M9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMubWFyZ2luPW51bGw7dGhpcy5wYXJhPW51bGw7dGhpcy50cmF2ZXJzYWw9bnVsbDt0aGlzLnZhbGlkYXRlPW51bGw7dGhpcy5jb25uZWN0PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZXZlbnQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5maWVsZD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnNldFByb3BlcnR5PW5ldyByLlhGQU9iamVjdEFycmF5fVtyLiRpc0JpbmRhYmxlXSgpe3JldHVybiEwfVtyLiRoYXNTZXR0YWJsZVZhbHVlXSgpe3JldHVybiEwfVtyLiRzZXRWYWx1ZV0oZSl7Zm9yKGNvbnN0IHQgb2YgdGhpcy5maWVsZC5jaGlsZHJlbil7aWYoIXQudmFsdWUpe2NvbnN0IGU9bmV3IFZhbHVlKHt9KTt0W3IuJGFwcGVuZENoaWxkXShlKTt0LnZhbHVlPWV9dC52YWx1ZVtyLiRzZXRWYWx1ZV0oZSl9fVtyLiRpc1RoZXJlTW9yZVdpZHRoXSgpe3JldHVybiB0aGlzLmxheW91dC5lbmRzV2l0aCgiLXRiIikmJjA9PT10aGlzW3IuJGV4dHJhXS5hdHRlbXB0JiZ0aGlzW3IuJGV4dHJhXS5udW1iZXJJbkxpbmU+MHx8dGhpc1tyLiRnZXRQYXJlbnRdKClbci4kaXNUaGVyZU1vcmVXaWR0aF0oKX1bci4kaXNTcGxpdHRhYmxlXSgpe2NvbnN0IGU9dGhpc1tyLiRnZXRTdWJmb3JtUGFyZW50XSgpO2lmKCFlW3IuJGlzU3BsaXR0YWJsZV0oKSlyZXR1cm4hMTtpZih2b2lkIDAhPT10aGlzW3IuJGV4dHJhXS5faXNTcGxpdHRhYmxlKXJldHVybiB0aGlzW3IuJGV4dHJhXS5faXNTcGxpdHRhYmxlO2lmKCJwb3NpdGlvbiI9PT10aGlzLmxheW91dHx8dGhpcy5sYXlvdXQuaW5jbHVkZXMoInJvdyIpKXt0aGlzW3IuJGV4dHJhXS5faXNTcGxpdHRhYmxlPSExO3JldHVybiExfWlmKGUubGF5b3V0JiZlLmxheW91dC5lbmRzV2l0aCgiLXRiIikmJjAhPT1lW3IuJGV4dHJhXS5udW1iZXJJbkxpbmUpcmV0dXJuITE7dGhpc1tyLiRleHRyYV0uX2lzU3BsaXR0YWJsZT0hMDtyZXR1cm4hMH1bci4kZmx1c2hIVE1MXSgpe3JldHVybigwLGkuZmx1c2hIVE1MKSh0aGlzKX1bci4kYWRkSFRNTF0oZSx0KXsoMCxpLmFkZEhUTUwpKHRoaXMsZSx0KX1bci4kZ2V0QXZhaWxhYmxlU3BhY2VdKCl7cmV0dXJuKDAsaS5nZXRBdmFpbGFibGVTcGFjZSkodGhpcyl9W3IuJHRvSFRNTF0oZSl7c2V0VGFiSW5kZXgodGhpcyk7aWYoImhpZGRlbiI9PT10aGlzLnByZXNlbmNlfHwiaW5hY3RpdmUiPT09dGhpcy5wcmVzZW5jZXx8MD09PXRoaXMuaHx8MD09PXRoaXMudylyZXR1cm4gby5IVE1MUmVzdWx0LkVNUFRZOygwLHMuZml4RGltZW5zaW9ucykodGhpcyk7Y29uc3QgdD1bXSxhPXtpZDp0aGlzW3IuJHVpZF0sY2xhc3M6W119OygwLHMuc2V0QWNjZXNzKSh0aGlzLGEuY2xhc3MpO3RoaXNbci4kZXh0cmFdfHwodGhpc1tyLiRleHRyYV09T2JqZWN0LmNyZWF0ZShudWxsKSk7T2JqZWN0LmFzc2lnbih0aGlzW3IuJGV4dHJhXSx7Y2hpbGRyZW46dCxhdHRyaWJ1dGVzOmEsYXR0ZW1wdDowLGxpbmU6bnVsbCxudW1iZXJJbkxpbmU6MCxhdmFpbGFibGVTcGFjZTp7d2lkdGg6TWF0aC5taW4odGhpcy53fHwxLzAsZS53aWR0aCksaGVpZ2h0Ok1hdGgubWluKHRoaXMuaHx8MS8wLGUuaGVpZ2h0KX0sd2lkdGg6MCxoZWlnaHQ6MCxwcmV2SGVpZ2h0OjAsY3VycmVudFdpZHRoOjB9KTtjb25zdCBuPXRoaXNbci4kaXNTcGxpdHRhYmxlXSgpO258fHNldEZpcnN0VW5zcGxpdHRhYmxlKHRoaXMpO2lmKCEoMCxpLmNoZWNrRGltZW5zaW9ucykodGhpcyxlKSlyZXR1cm4gby5IVE1MUmVzdWx0LkZBSUxVUkU7Y29uc3QgYz1uZXcgU2V0KFsiZmllbGQiXSk7aWYodGhpcy5sYXlvdXQuaW5jbHVkZXMoInJvdyIpKXtjb25zdCBlPXRoaXNbci4kZ2V0U3ViZm9ybVBhcmVudF0oKS5jb2x1bW5XaWR0aHM7aWYoQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGg+MCl7dGhpc1tyLiRleHRyYV0uY29sdW1uV2lkdGhzPWU7dGhpc1tyLiRleHRyYV0uY3VycmVudENvbHVtbj0wfX1jb25zdCBsPSgwLHMudG9TdHlsZSkodGhpcywiYW5jaG9yVHlwZSIsImRpbWVuc2lvbnMiLCJwb3NpdGlvbiIsInByZXNlbmNlIiwiYm9yZGVyIiwibWFyZ2luIiwiaEFsaWduIiksaD1bInhmYUV4Y2xncm91cCJdLHU9KDAscy5sYXlvdXRDbGFzcykodGhpcyk7dSYmaC5wdXNoKHUpOygwLHMuaXNQcmludE9ubHkpKHRoaXMpJiZoLnB1c2goInhmYVByaW50T25seSIpO2Euc3R5bGU9bDthLmNsYXNzPWg7dGhpcy5uYW1lJiYoYS54ZmFOYW1lPXRoaXMubmFtZSk7dGhpc1tyLiRwdXNoUGFyYV0oKTtjb25zdCBkPSJsci10YiI9PT10aGlzLmxheW91dHx8InJsLXRiIj09PXRoaXMubGF5b3V0LGY9ZD8yOjE7Zm9yKDt0aGlzW3IuJGV4dHJhXS5hdHRlbXB0PGY7dGhpc1tyLiRleHRyYV0uYXR0ZW1wdCsrKXtkJiYxPT09dGhpc1tyLiRleHRyYV0uYXR0ZW1wdCYmKHRoaXNbci4kZXh0cmFdLm51bWJlckluTGluZT0wKTtjb25zdCBlPXRoaXNbci4kY2hpbGRyZW5Ub0hUTUxdKHtmaWx0ZXI6YyxpbmNsdWRlOiEwfSk7aWYoZS5zdWNjZXNzKWJyZWFrO2lmKGUuaXNCcmVhaygpKXt0aGlzW3IuJHBvcFBhcmFdKCk7cmV0dXJuIGV9aWYoZCYmMD09PXRoaXNbci4kZXh0cmFdLmF0dGVtcHQmJjA9PT10aGlzW3IuJGV4dHJhXS5udW1iZXJJbkxpbmUmJiF0aGlzW3IuJGdldFRlbXBsYXRlUm9vdF0oKVtyLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlKXt0aGlzW3IuJGV4dHJhXS5hdHRlbXB0PWY7YnJlYWt9fXRoaXNbci4kcG9wUGFyYV0oKTtufHx1bnNldEZpcnN0VW5zcGxpdHRhYmxlKHRoaXMpO2lmKHRoaXNbci4kZXh0cmFdLmF0dGVtcHQ9PT1mKXtufHxkZWxldGUgdGhpc1tyLiRleHRyYV07cmV0dXJuIG8uSFRNTFJlc3VsdC5GQUlMVVJFfWxldCBnPTAscD0wO2lmKHRoaXMubWFyZ2luKXtnPXRoaXMubWFyZ2luLmxlZnRJbnNldCt0aGlzLm1hcmdpbi5yaWdodEluc2V0O3A9dGhpcy5tYXJnaW4udG9wSW5zZXQrdGhpcy5tYXJnaW4uYm90dG9tSW5zZXR9Y29uc3QgbT1NYXRoLm1heCh0aGlzW3IuJGV4dHJhXS53aWR0aCtnLHRoaXMud3x8MCksYj1NYXRoLm1heCh0aGlzW3IuJGV4dHJhXS5oZWlnaHQrcCx0aGlzLmh8fDApLHk9W3RoaXMueCx0aGlzLnksbSxiXTsiIj09PXRoaXMudyYmKGwud2lkdGg9KDAscy5tZWFzdXJlVG9TdHJpbmcpKG0pKTsiIj09PXRoaXMuaCYmKGwuaGVpZ2h0PSgwLHMubWVhc3VyZVRvU3RyaW5nKShiKSk7Y29uc3Qgdz17bmFtZToiZGl2IixhdHRyaWJ1dGVzOmEsY2hpbGRyZW46dH07YXBwbHlBc3Npc3QodGhpcyxhKTtkZWxldGUgdGhpc1tyLiRleHRyYV07cmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKCgwLHMuY3JlYXRlV3JhcHBlcikodGhpcyx3KSx5KX19Y2xhc3MgRXhlY3V0ZSBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImV4ZWN1dGUiKTt0aGlzLmNvbm5lY3Rpb249ZS5jb25uZWN0aW9ufHwiIjt0aGlzLmV4ZWN1dGVUeXBlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmV4ZWN1dGVUeXBlLFsiaW1wb3J0IiwicmVtZXJnZSJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucnVuQXQ9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUucnVuQXQsWyJjbGllbnQiLCJib3RoIiwic2VydmVyIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgRXh0cmFzIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZXh0cmFzIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib29sZWFuPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZGF0ZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmRhdGVUaW1lPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZGVjaW1hbD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmV4RGF0YT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmV4dHJhcz1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmZsb2F0PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuaW1hZ2U9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5pbnRlZ2VyPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMudGV4dD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnRpbWU9bmV3IHIuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIEZpZWxkIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZmllbGQiLCEwKTt0aGlzLmFjY2Vzcz0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5hY2Nlc3MsWyJvcGVuIiwibm9uSW50ZXJhY3RpdmUiLCJwcm90ZWN0ZWQiLCJyZWFkT25seSJdKTt0aGlzLmFjY2Vzc0tleT1lLmFjY2Vzc0tleXx8IiI7dGhpcy5hbmNob3JUeXBlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmFuY2hvclR5cGUsWyJ0b3BMZWZ0IiwiYm90dG9tQ2VudGVyIiwiYm90dG9tTGVmdCIsImJvdHRvbVJpZ2h0IiwibWlkZGxlQ2VudGVyIiwibWlkZGxlTGVmdCIsIm1pZGRsZVJpZ2h0IiwidG9wQ2VudGVyIiwidG9wUmlnaHQiXSk7dGhpcy5jb2xTcGFuPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5jb2xTcGFuLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmU9PmU+PTF8fC0xPT09ZX0pO3RoaXMuaD1lLmg/KDAsby5nZXRNZWFzdXJlbWVudCkoZS5oKToiIjt0aGlzLmhBbGlnbj0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5oQWxpZ24sWyJsZWZ0IiwiY2VudGVyIiwianVzdGlmeSIsImp1c3RpZnlBbGwiLCJyYWRpeCIsInJpZ2h0Il0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5sb2NhbGU9ZS5sb2NhbGV8fCIiO3RoaXMubWF4SD0oMCxvLmdldE1lYXN1cmVtZW50KShlLm1heEgsIjBwdCIpO3RoaXMubWF4Vz0oMCxvLmdldE1lYXN1cmVtZW50KShlLm1heFcsIjBwdCIpO3RoaXMubWluSD0oMCxvLmdldE1lYXN1cmVtZW50KShlLm1pbkgsIjBwdCIpO3RoaXMubWluVz0oMCxvLmdldE1lYXN1cmVtZW50KShlLm1pblcsIjBwdCIpO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucHJlc2VuY2U9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSk7dGhpcy5yZWxldmFudD0oMCxvLmdldFJlbGV2YW50KShlLnJlbGV2YW50KTt0aGlzLnJvdGF0ZT0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUucm90YXRlLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PmUlOTA9PTB9KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy53PWUudz8oMCxvLmdldE1lYXN1cmVtZW50KShlLncpOiIiO3RoaXMueD0oMCxvLmdldE1lYXN1cmVtZW50KShlLngsIjBwdCIpO3RoaXMueT0oMCxvLmdldE1lYXN1cmVtZW50KShlLnksIjBwdCIpO3RoaXMuYXNzaXN0PW51bGw7dGhpcy5iaW5kPW51bGw7dGhpcy5ib3JkZXI9bnVsbDt0aGlzLmNhbGN1bGF0ZT1udWxsO3RoaXMuY2FwdGlvbj1udWxsO3RoaXMuZGVzYz1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5mb250PW51bGw7dGhpcy5mb3JtYXQ9bnVsbDt0aGlzLml0ZW1zPW5ldyByLlhGQU9iamVjdEFycmF5KDIpO3RoaXMua2VlcD1udWxsO3RoaXMubWFyZ2luPW51bGw7dGhpcy5wYXJhPW51bGw7dGhpcy50cmF2ZXJzYWw9bnVsbDt0aGlzLnVpPW51bGw7dGhpcy52YWxpZGF0ZT1udWxsO3RoaXMudmFsdWU9bnVsbDt0aGlzLmJpbmRJdGVtcz1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmNvbm5lY3Q9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5ldmVudD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnNldFByb3BlcnR5PW5ldyByLlhGQU9iamVjdEFycmF5fVtyLiRpc0JpbmRhYmxlXSgpe3JldHVybiEwfVtyLiRzZXRWYWx1ZV0oZSl7X3NldFZhbHVlKHRoaXMsZSl9W3IuJHRvSFRNTF0oZSl7c2V0VGFiSW5kZXgodGhpcyk7aWYoIXRoaXMudWkpe3RoaXMudWk9bmV3IFVpKHt9KTt0aGlzLnVpW3IuJGdsb2JhbERhdGFdPXRoaXNbci4kZ2xvYmFsRGF0YV07dGhpc1tyLiRhcHBlbmRDaGlsZF0odGhpcy51aSk7bGV0IGU7c3dpdGNoKHRoaXMuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoKXtjYXNlIDA6ZT1uZXcgVGV4dEVkaXQoe30pO3RoaXMudWkudGV4dEVkaXQ9ZTticmVhaztjYXNlIDE6ZT1uZXcgQ2hlY2tCdXR0b24oe30pO3RoaXMudWkuY2hlY2tCdXR0b249ZTticmVhaztjYXNlIDI6ZT1uZXcgQ2hvaWNlTGlzdCh7fSk7dGhpcy51aS5jaG9pY2VMaXN0PWV9dGhpcy51aVtyLiRhcHBlbmRDaGlsZF0oZSl9aWYoIXRoaXMudWl8fCJoaWRkZW4iPT09dGhpcy5wcmVzZW5jZXx8ImluYWN0aXZlIj09PXRoaXMucHJlc2VuY2V8fDA9PT10aGlzLmh8fDA9PT10aGlzLncpcmV0dXJuIG8uSFRNTFJlc3VsdC5FTVBUWTt0aGlzLmNhcHRpb24mJmRlbGV0ZSB0aGlzLmNhcHRpb25bci4kZXh0cmFdO3RoaXNbci4kcHVzaFBhcmFdKCk7Y29uc3QgdD10aGlzLmNhcHRpb24/dGhpcy5jYXB0aW9uW3IuJHRvSFRNTF0oZSkuaHRtbDpudWxsLGE9dGhpcy53LG49dGhpcy5oO2xldCBjPTAsaD0wO2lmKHRoaXMubWFyZ2luKXtjPXRoaXMubWFyZ2luLmxlZnRJbnNldCt0aGlzLm1hcmdpbi5yaWdodEluc2V0O2g9dGhpcy5tYXJnaW4udG9wSW5zZXQrdGhpcy5tYXJnaW4uYm90dG9tSW5zZXR9bGV0IHU9bnVsbDtpZigiIj09PXRoaXMud3x8IiI9PT10aGlzLmgpe2xldCB0PW51bGwsYT1udWxsLG49MCxpPTA7aWYodGhpcy51aS5jaGVja0J1dHRvbiluPWk9dGhpcy51aS5jaGVja0J1dHRvbi5zaXplO2Vsc2V7Y29uc3R7dzp0LGg6YX09KDAscy5sYXlvdXROb2RlKSh0aGlzLGUpO2lmKG51bGwhPT10KXtuPXQ7aT1hfWVsc2UgaT0oMCxsLmdldE1ldHJpY3MpKHRoaXMuZm9udCwhMCkubGluZU5vR2FwfXU9Z2V0Qm9yZGVyRGltcyh0aGlzLnVpW3IuJGdldEV4dHJhXSgpKTtuKz11Lnc7aSs9dS5oO2lmKHRoaXMuY2FwdGlvbil7Y29uc3R7dzpzLGg6Yyxpc0Jyb2tlbjpsfT10aGlzLmNhcHRpb25bci4kZ2V0RXh0cmFdKGUpO2lmKGwmJnRoaXNbci4kZ2V0U3ViZm9ybVBhcmVudF0oKVtyLiRpc1RoZXJlTW9yZVdpZHRoXSgpKXt0aGlzW3IuJHBvcFBhcmFdKCk7cmV0dXJuIG8uSFRNTFJlc3VsdC5GQUlMVVJFfXQ9czthPWM7c3dpdGNoKHRoaXMuY2FwdGlvbi5wbGFjZW1lbnQpe2Nhc2UibGVmdCI6Y2FzZSJyaWdodCI6Y2FzZSJpbmxpbmUiOnQrPW47YnJlYWs7Y2FzZSJ0b3AiOmNhc2UiYm90dG9tIjphKz1pfX1lbHNle3Q9bjthPWl9aWYodCYmIiI9PT10aGlzLncpe3QrPWM7dGhpcy53PU1hdGgubWluKHRoaXMubWF4Vzw9MD8xLzA6dGhpcy5tYXhXLHRoaXMubWluVysxPHQ/dDp0aGlzLm1pblcpfWlmKGEmJiIiPT09dGhpcy5oKXthKz1oO3RoaXMuaD1NYXRoLm1pbih0aGlzLm1heEg8PTA/MS8wOnRoaXMubWF4SCx0aGlzLm1pbkgrMTxhP2E6dGhpcy5taW5IKX19dGhpc1tyLiRwb3BQYXJhXSgpOygwLHMuZml4RGltZW5zaW9ucykodGhpcyk7c2V0Rmlyc3RVbnNwbGl0dGFibGUodGhpcyk7aWYoISgwLGkuY2hlY2tEaW1lbnNpb25zKSh0aGlzLGUpKXt0aGlzLnc9YTt0aGlzLmg9bjt0aGlzW3IuJHBvcFBhcmFdKCk7cmV0dXJuIG8uSFRNTFJlc3VsdC5GQUlMVVJFfXVuc2V0Rmlyc3RVbnNwbGl0dGFibGUodGhpcyk7Y29uc3QgZD0oMCxzLnRvU3R5bGUpKHRoaXMsImZvbnQiLCJkaW1lbnNpb25zIiwicG9zaXRpb24iLCJyb3RhdGUiLCJhbmNob3JUeXBlIiwicHJlc2VuY2UiLCJtYXJnaW4iLCJoQWxpZ24iKTsoMCxzLnNldE1pbk1heERpbWVuc2lvbnMpKHRoaXMsZCk7Y29uc3QgZj1bInhmYUZpZWxkIl07dGhpcy5mb250JiZmLnB1c2goInhmYUZvbnQiKTsoMCxzLmlzUHJpbnRPbmx5KSh0aGlzKSYmZi5wdXNoKCJ4ZmFQcmludE9ubHkiKTtjb25zdCBnPXtzdHlsZTpkLGlkOnRoaXNbci4kdWlkXSxjbGFzczpmfTtpZihkLm1hcmdpbil7ZC5wYWRkaW5nPWQubWFyZ2luO2RlbGV0ZSBkLm1hcmdpbn0oMCxzLnNldEFjY2VzcykodGhpcyxmKTt0aGlzLm5hbWUmJihnLnhmYU5hbWU9dGhpcy5uYW1lKTtjb25zdCBwPVtdLG09e25hbWU6ImRpdiIsYXR0cmlidXRlczpnLGNoaWxkcmVuOnB9O2FwcGx5QXNzaXN0KHRoaXMsZyk7Y29uc3QgYj10aGlzLmJvcmRlcj90aGlzLmJvcmRlcltyLiR0b1N0eWxlXSgpOm51bGwseT0oMCxzLmNvbXB1dGVCYm94KSh0aGlzLG0sZSksdz10aGlzLnVpW3IuJHRvSFRNTF0oKS5odG1sO2lmKCF3KXtPYmplY3QuYXNzaWduKGQsYik7cmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKCgwLHMuY3JlYXRlV3JhcHBlcikodGhpcyxtKSx5KX10aGlzW3IuJHRhYkluZGV4XSYmKHcuY2hpbGRyZW4mJncuY2hpbGRyZW5bMF0/dy5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLnRhYmluZGV4PXRoaXNbci4kdGFiSW5kZXhdOncuYXR0cmlidXRlcy50YWJpbmRleD10aGlzW3IuJHRhYkluZGV4XSk7dy5hdHRyaWJ1dGVzLnN0eWxlfHwody5hdHRyaWJ1dGVzLnN0eWxlPU9iamVjdC5jcmVhdGUobnVsbCkpO2xldCBTPW51bGw7aWYodGhpcy51aS5idXR0b24pezE9PT13LmNoaWxkcmVuLmxlbmd0aCYmKFtTXT13LmNoaWxkcmVuLnNwbGljZSgwLDEpKTtPYmplY3QuYXNzaWduKHcuYXR0cmlidXRlcy5zdHlsZSxiKX1lbHNlIE9iamVjdC5hc3NpZ24oZCxiKTtwLnB1c2godyk7aWYodGhpcy52YWx1ZSlpZih0aGlzLnVpLmltYWdlRWRpdCl3LmNoaWxkcmVuLnB1c2godGhpcy52YWx1ZVtyLiR0b0hUTUxdKCkuaHRtbCk7ZWxzZSBpZighdGhpcy51aS5idXR0b24pe2xldCBlPSIiO2lmKHRoaXMudmFsdWUuZXhEYXRhKWU9dGhpcy52YWx1ZS5leERhdGFbci4kdGV4dF0oKTtlbHNlIGlmKHRoaXMudmFsdWUudGV4dCllPXRoaXMudmFsdWUudGV4dFtyLiRnZXRFeHRyYV0oKTtlbHNle2NvbnN0IHQ9dGhpcy52YWx1ZVtyLiR0b0hUTUxdKCkuaHRtbDtudWxsIT09dCYmKGU9dC5jaGlsZHJlblswXS52YWx1ZSl9dGhpcy51aS50ZXh0RWRpdCYmdGhpcy52YWx1ZS50ZXh0JiZ0aGlzLnZhbHVlLnRleHQubWF4Q2hhcnMmJih3LmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMubWF4TGVuZ3RoPXRoaXMudmFsdWUudGV4dC5tYXhDaGFycyk7aWYoZSl7aWYodGhpcy51aS5udW1lcmljRWRpdCl7ZT1wYXJzZUZsb2F0KGUpO2U9aXNOYU4oZSk/IiI6ZS50b1N0cmluZygpfSJ0ZXh0YXJlYSI9PT13LmNoaWxkcmVuWzBdLm5hbWU/dy5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLnRleHRDb250ZW50PWU6dy5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLnZhbHVlPWV9fWlmKCF0aGlzLnVpLmltYWdlRWRpdCYmdy5jaGlsZHJlbiYmdy5jaGlsZHJlblswXSYmdGhpcy5oKXt1PXV8fGdldEJvcmRlckRpbXModGhpcy51aVtyLiRnZXRFeHRyYV0oKSk7bGV0IHQ9MDtpZih0aGlzLmNhcHRpb24mJlsidG9wIiwiYm90dG9tIl0uaW5jbHVkZXModGhpcy5jYXB0aW9uLnBsYWNlbWVudCkpe3Q9dGhpcy5jYXB0aW9uLnJlc2VydmU7dDw9MCYmKHQ9dGhpcy5jYXB0aW9uW3IuJGdldEV4dHJhXShlKS5oKTtjb25zdCBhPXRoaXMuaC10LWgtdS5oO3cuY2hpbGRyZW5bMF0uYXR0cmlidXRlcy5zdHlsZS5oZWlnaHQ9KDAscy5tZWFzdXJlVG9TdHJpbmcpKGEpfWVsc2Ugdy5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLnN0eWxlLmhlaWdodD0iMTAwJSJ9UyYmdy5jaGlsZHJlbi5wdXNoKFMpO2lmKCF0KXt3LmF0dHJpYnV0ZXMuY2xhc3MmJncuYXR0cmlidXRlcy5jbGFzcy5wdXNoKCJ4ZmFMZWZ0Iik7dGhpcy53PWE7dGhpcy5oPW47cmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKCgwLHMuY3JlYXRlV3JhcHBlcikodGhpcyxtKSx5KX1pZih0aGlzLnVpLmJ1dHRvbil7ZC5wYWRkaW5nJiZkZWxldGUgZC5wYWRkaW5nOyJkaXYiPT09dC5uYW1lJiYodC5uYW1lPSJzcGFuIik7dy5jaGlsZHJlbi5wdXNoKHQpO3JldHVybiBvLkhUTUxSZXN1bHQuc3VjY2VzcyhtLHkpfXRoaXMudWkuY2hlY2tCdXR0b24mJih0LmF0dHJpYnV0ZXMuY2xhc3NbMF09InhmYUNhcHRpb25Gb3JDaGVja0J1dHRvbiIpO3cuYXR0cmlidXRlcy5jbGFzc3x8KHcuYXR0cmlidXRlcy5jbGFzcz1bXSk7dy5jaGlsZHJlbi5zcGxpY2UoMCwwLHQpO3N3aXRjaCh0aGlzLmNhcHRpb24ucGxhY2VtZW50KXtjYXNlImxlZnQiOmNhc2UiaW5saW5lIjp3LmF0dHJpYnV0ZXMuY2xhc3MucHVzaCgieGZhTGVmdCIpO2JyZWFrO2Nhc2UicmlnaHQiOncuYXR0cmlidXRlcy5jbGFzcy5wdXNoKCJ4ZmFSaWdodCIpO2JyZWFrO2Nhc2UidG9wIjp3LmF0dHJpYnV0ZXMuY2xhc3MucHVzaCgieGZhVG9wIik7YnJlYWs7Y2FzZSJib3R0b20iOncuYXR0cmlidXRlcy5jbGFzcy5wdXNoKCJ4ZmFCb3R0b20iKX10aGlzLnc9YTt0aGlzLmg9bjtyZXR1cm4gby5IVE1MUmVzdWx0LnN1Y2Nlc3MoKDAscy5jcmVhdGVXcmFwcGVyKSh0aGlzLG0pLHkpfX10LkZpZWxkPUZpZWxkO2NsYXNzIEZpbGwgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJmaWxsIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnByZXNlbmNlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNvbG9yPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmxpbmVhcj1udWxsO3RoaXMucGF0dGVybj1udWxsO3RoaXMucmFkaWFsPW51bGw7dGhpcy5zb2xpZD1udWxsO3RoaXMuc3RpcHBsZT1udWxsfVtyLiR0b1N0eWxlXSgpe2NvbnN0IGU9dGhpc1tyLiRnZXRQYXJlbnRdKCksdD1lW3IuJGdldFBhcmVudF0oKVtyLiRnZXRQYXJlbnRdKCksYT1PYmplY3QuY3JlYXRlKG51bGwpO2xldCBuPSJjb2xvciIsaT1uO2lmKGUgaW5zdGFuY2VvZiBCb3JkZXIpe249ImJhY2tncm91bmQtY29sb3IiO2k9ImJhY2tncm91bmQiO3QgaW5zdGFuY2VvZiBVaSYmKGEuYmFja2dyb3VuZENvbG9yPSJ3aGl0ZSIpfWlmKGUgaW5zdGFuY2VvZiBSZWN0YW5nbGV8fGUgaW5zdGFuY2VvZiBBcmMpe249aT0iZmlsbCI7YS5maWxsPSJ3aGl0ZSJ9Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2lmKCJleHRyYXMiPT09ZXx8ImNvbG9yIj09PWUpY29udGludWU7Y29uc3QgdD10aGlzW2VdO2lmKCEodCBpbnN0YW5jZW9mIHIuWEZBT2JqZWN0KSljb250aW51ZTtjb25zdCBzPXRbci4kdG9TdHlsZV0odGhpcy5jb2xvcik7cyYmKGFbcy5zdGFydHNXaXRoKCIjIik/bjppXT1zKTtyZXR1cm4gYX1pZih0aGlzLmNvbG9yJiZ0aGlzLmNvbG9yLnZhbHVlKXtjb25zdCBlPXRoaXMuY29sb3Jbci4kdG9TdHlsZV0oKTthW2Uuc3RhcnRzV2l0aCgiIyIpP246aV09ZX1yZXR1cm4gYX19Y2xhc3MgRmlsdGVyIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZmlsdGVyIiwhMCk7dGhpcy5hZGRSZXZvY2F0aW9uSW5mbz0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5hZGRSZXZvY2F0aW9uSW5mbyxbIiIsInJlcXVpcmVkIiwib3B0aW9uYWwiLCJub25lIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMudmVyc2lvbj0oMCxvLmdldEludGVnZXIpKHtkYXRhOnRoaXMudmVyc2lvbixkZWZhdWx0VmFsdWU6NSx2YWxpZGF0ZTplPT5lPj0xJiZlPD01fSk7dGhpcy5hcHBlYXJhbmNlRmlsdGVyPW51bGw7dGhpcy5jZXJ0aWZpY2F0ZXM9bnVsbDt0aGlzLmRpZ2VzdE1ldGhvZHM9bnVsbDt0aGlzLmVuY29kaW5ncz1udWxsO3RoaXMuZW5jcnlwdGlvbk1ldGhvZHM9bnVsbDt0aGlzLmhhbmRsZXI9bnVsbDt0aGlzLmxvY2tEb2N1bWVudD1udWxsO3RoaXMubWRwPW51bGw7dGhpcy5yZWFzb25zPW51bGw7dGhpcy50aW1lU3RhbXA9bnVsbH19Y2xhc3MgRmxvYXQgZXh0ZW5kcyByLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZmxvYXQiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bci4kZmluYWxpemVdKCl7Y29uc3QgZT1wYXJzZUZsb2F0KHRoaXNbci4kY29udGVudF0udHJpbSgpKTt0aGlzW3IuJGNvbnRlbnRdPWlzTmFOKGUpP251bGw6ZX1bci4kdG9IVE1MXShlKXtyZXR1cm4gdmFsdWVUb0h0bWwobnVsbCE9PXRoaXNbci4kY29udGVudF0/dGhpc1tyLiRjb250ZW50XS50b1N0cmluZygpOiIiKX19Y2xhc3MgRm9udCBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImZvbnQiLCEwKTt0aGlzLmJhc2VsaW5lU2hpZnQ9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5iYXNlbGluZVNoaWZ0KTt0aGlzLmZvbnRIb3Jpem9udGFsU2NhbGU9KDAsby5nZXRGbG9hdCkoe2RhdGE6ZS5mb250SG9yaXpvbnRhbFNjYWxlLGRlZmF1bHRWYWx1ZToxMDAsdmFsaWRhdGU6ZT0+ZT49MH0pO3RoaXMuZm9udFZlcnRpY2FsU2NhbGU9KDAsby5nZXRGbG9hdCkoe2RhdGE6ZS5mb250VmVydGljYWxTY2FsZSxkZWZhdWx0VmFsdWU6MTAwLHZhbGlkYXRlOmU9PmU+PTB9KTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMua2VybmluZ01vZGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUua2VybmluZ01vZGUsWyJub25lIiwicGFpciJdKTt0aGlzLmxldHRlclNwYWNpbmc9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5sZXR0ZXJTcGFjaW5nLCIwIik7dGhpcy5saW5lVGhyb3VnaD0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUubGluZVRocm91Z2gsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV8fDI9PT1lfSk7dGhpcy5saW5lVGhyb3VnaFBlcmlvZD0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5saW5lVGhyb3VnaFBlcmlvZCxbImFsbCIsIndvcmQiXSk7dGhpcy5vdmVybGluZT0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUub3ZlcmxpbmUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV8fDI9PT1lfSk7dGhpcy5vdmVybGluZVBlcmlvZD0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5vdmVybGluZVBlcmlvZCxbImFsbCIsIndvcmQiXSk7dGhpcy5wb3N0dXJlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnBvc3R1cmUsWyJub3JtYWwiLCJpdGFsaWMiXSk7dGhpcy5zaXplPSgwLG8uZ2V0TWVhc3VyZW1lbnQpKGUuc2l6ZSwiMTBwdCIpO3RoaXMudHlwZWZhY2U9ZS50eXBlZmFjZXx8IkNvdXJpZXIiO3RoaXMudW5kZXJsaW5lPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS51bmRlcmxpbmUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV8fDI9PT1lfSk7dGhpcy51bmRlcmxpbmVQZXJpb2Q9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudW5kZXJsaW5lUGVyaW9kLFsiYWxsIiwid29yZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy53ZWlnaHQ9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUud2VpZ2h0LFsibm9ybWFsIiwiYm9sZCJdKTt0aGlzLmV4dHJhcz1udWxsO3RoaXMuZmlsbD1udWxsfVtyLiRjbGVhbl0oZSl7c3VwZXJbci4kY2xlYW5dKGUpO3RoaXNbci4kZ2xvYmFsRGF0YV0udXNlZFR5cGVmYWNlcy5hZGQodGhpcy50eXBlZmFjZSl9W3IuJHRvU3R5bGVdKCl7Y29uc3QgZT0oMCxzLnRvU3R5bGUpKHRoaXMsImZpbGwiKSx0PWUuY29sb3I7aWYodClpZigiIzAwMDAwMCI9PT10KWRlbGV0ZSBlLmNvbG9yO2Vsc2UgaWYoIXQuc3RhcnRzV2l0aCgiIyIpKXtlLmJhY2tncm91bmQ9dDtlLmJhY2tncm91bmRDbGlwPSJ0ZXh0IjtlLmNvbG9yPSJ0cmFuc3BhcmVudCJ9dGhpcy5iYXNlbGluZVNoaWZ0JiYoZS52ZXJ0aWNhbEFsaWduPSgwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLmJhc2VsaW5lU2hpZnQpKTtlLmZvbnRLZXJuaW5nPSJub25lIj09PXRoaXMua2VybmluZ01vZGU/Im5vbmUiOiJub3JtYWwiO2UubGV0dGVyU3BhY2luZz0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5sZXR0ZXJTcGFjaW5nKTtpZigwIT09dGhpcy5saW5lVGhyb3VnaCl7ZS50ZXh0RGVjb3JhdGlvbj0ibGluZS10aHJvdWdoIjsyPT09dGhpcy5saW5lVGhyb3VnaCYmKGUudGV4dERlY29yYXRpb25TdHlsZT0iZG91YmxlIil9aWYoMCE9PXRoaXMub3ZlcmxpbmUpe2UudGV4dERlY29yYXRpb249Im92ZXJsaW5lIjsyPT09dGhpcy5vdmVybGluZSYmKGUudGV4dERlY29yYXRpb25TdHlsZT0iZG91YmxlIil9ZS5mb250U3R5bGU9dGhpcy5wb3N0dXJlO2UuZm9udFNpemU9KDAscy5tZWFzdXJlVG9TdHJpbmcpKC45OSp0aGlzLnNpemUpOygwLHMuc2V0Rm9udEZhbWlseSkodGhpcyx0aGlzLHRoaXNbci4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlcixlKTtpZigwIT09dGhpcy51bmRlcmxpbmUpe2UudGV4dERlY29yYXRpb249InVuZGVybGluZSI7Mj09PXRoaXMudW5kZXJsaW5lJiYoZS50ZXh0RGVjb3JhdGlvblN0eWxlPSJkb3VibGUiKX1lLmZvbnRXZWlnaHQ9dGhpcy53ZWlnaHQ7cmV0dXJuIGV9fWNsYXNzIEZvcm1hdCBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImZvcm1hdCIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5waWN0dXJlPW51bGx9fWNsYXNzIEhhbmRsZXIgZXh0ZW5kcyByLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJoYW5kbGVyIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBIeXBoZW5hdGlvbiBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImh5cGhlbmF0aW9uIik7dGhpcy5leGNsdWRlQWxsQ2Fwcz0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUuZXhjbHVkZUFsbENhcHMsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLmV4Y2x1ZGVJbml0aWFsQ2FwPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5leGNsdWRlSW5pdGlhbENhcCxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMuaHlwaGVuYXRlPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5oeXBoZW5hdGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucHVzaENoYXJhY3RlckNvdW50PSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5wdXNoQ2hhcmFjdGVyQ291bnQsZGVmYXVsdFZhbHVlOjMsdmFsaWRhdGU6ZT0+ZT49MH0pO3RoaXMucmVtYWluQ2hhcmFjdGVyQ291bnQ9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLnJlbWFpbkNoYXJhY3RlckNvdW50LGRlZmF1bHRWYWx1ZTozLHZhbGlkYXRlOmU9PmU+PTB9KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy53b3JkQ2hhcmFjdGVyQ291bnQ9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLndvcmRDaGFyYWN0ZXJDb3VudCxkZWZhdWx0VmFsdWU6Nyx2YWxpZGF0ZTplPT5lPj0wfSl9fWNsYXNzIEltYWdlIGV4dGVuZHMgci5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiaW1hZ2UiKTt0aGlzLmFzcGVjdD0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5hc3BlY3QsWyJmaXQiLCJhY3R1YWwiLCJoZWlnaHQiLCJub25lIiwid2lkdGgiXSk7dGhpcy5jb250ZW50VHlwZT1lLmNvbnRlbnRUeXBlfHwiIjt0aGlzLmhyZWY9ZS5ocmVmfHwiIjt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudHJhbnNmZXJFbmNvZGluZz0oMCxvLmdldFN0cmluZ09wdGlvbikoZS50cmFuc2ZlckVuY29kaW5nLFsiYmFzZTY0Iiwibm9uZSIsInBhY2thZ2UiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtyLiR0b0hUTUxdKCl7aWYodGhpcy5jb250ZW50VHlwZSYmIXAuaGFzKHRoaXMuY29udGVudFR5cGUudG9Mb3dlckNhc2UoKSkpcmV0dXJuIG8uSFRNTFJlc3VsdC5FTVBUWTtsZXQgZT10aGlzW3IuJGdsb2JhbERhdGFdLmltYWdlcyYmdGhpc1tyLiRnbG9iYWxEYXRhXS5pbWFnZXMuZ2V0KHRoaXMuaHJlZik7aWYoIWUmJih0aGlzLmhyZWZ8fCF0aGlzW3IuJGNvbnRlbnRdKSlyZXR1cm4gby5IVE1MUmVzdWx0LkVNUFRZO2V8fCJiYXNlNjQiIT09dGhpcy50cmFuc2ZlckVuY29kaW5nfHwoZT0oMCxjLnN0cmluZ1RvQnl0ZXMpKGF0b2IodGhpc1tyLiRjb250ZW50XSkpKTtpZighZSlyZXR1cm4gby5IVE1MUmVzdWx0LkVNUFRZO2lmKCF0aGlzLmNvbnRlbnRUeXBlKXtmb3IoY29uc3RbdCxhXW9mIG0paWYoZS5sZW5ndGg+dC5sZW5ndGgmJnQuZXZlcnkoKCh0LGEpPT50PT09ZVthXSkpKXt0aGlzLmNvbnRlbnRUeXBlPWE7YnJlYWt9aWYoIXRoaXMuY29udGVudFR5cGUpcmV0dXJuIG8uSFRNTFJlc3VsdC5FTVBUWX1jb25zdCB0PW5ldyBCbG9iKFtlXSx7dHlwZTp0aGlzLmNvbnRlbnRUeXBlfSk7bGV0IGE7c3dpdGNoKHRoaXMuYXNwZWN0KXtjYXNlImZpdCI6Y2FzZSJhY3R1YWwiOmJyZWFrO2Nhc2UiaGVpZ2h0IjphPXtoZWlnaHQ6IjEwMCUiLG9iamVjdEZpdDoiZmlsbCJ9O2JyZWFrO2Nhc2Uibm9uZSI6YT17d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIsb2JqZWN0Rml0OiJmaWxsIn07YnJlYWs7Y2FzZSJ3aWR0aCI6YT17d2lkdGg6IjEwMCUiLG9iamVjdEZpdDoiZmlsbCJ9fWNvbnN0IG49dGhpc1tyLiRnZXRQYXJlbnRdKCk7cmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJpbWciLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhSW1hZ2UiXSxzdHlsZTphLHNyYzpVUkwuY3JlYXRlT2JqZWN0VVJMKHQpLGFsdDpuP2FyaWFMYWJlbChuW3IuJGdldFBhcmVudF0oKSk6bnVsbH19KX19Y2xhc3MgSW1hZ2VFZGl0IGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiaW1hZ2VFZGl0IiwhMCk7dGhpcy5kYXRhPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmRhdGEsWyJsaW5rIiwiZW1iZWQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib3JkZXI9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMubWFyZ2luPW51bGx9W3IuJHRvSFRNTF0oZSl7cmV0dXJuImVtYmVkIj09PXRoaXMuZGF0YT9vLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixjaGlsZHJlbjpbXSxhdHRyaWJ1dGVzOnt9fSk6by5IVE1MUmVzdWx0LkVNUFRZfX1jbGFzcyBJbnRlZ2VyIGV4dGVuZHMgci5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImludGVnZXIiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bci4kZmluYWxpemVdKCl7Y29uc3QgZT1wYXJzZUludCh0aGlzW3IuJGNvbnRlbnRdLnRyaW0oKSwxMCk7dGhpc1tyLiRjb250ZW50XT1pc05hTihlKT9udWxsOmV9W3IuJHRvSFRNTF0oZSl7cmV0dXJuIHZhbHVlVG9IdG1sKG51bGwhPT10aGlzW3IuJGNvbnRlbnRdP3RoaXNbci4kY29udGVudF0udG9TdHJpbmcoKToiIil9fWNsYXNzIElzc3VlcnMgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJpc3N1ZXJzIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY2VydGlmaWNhdGU9bmV3IHIuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIEl0ZW1zIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiaXRlbXMiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucHJlc2VuY2U9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSk7dGhpcy5yZWY9ZS5yZWZ8fCIiO3RoaXMuc2F2ZT0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUuc2F2ZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmJvb2xlYW49bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZGF0ZVRpbWU9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5kZWNpbWFsPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZXhEYXRhPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZmxvYXQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5pbWFnZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmludGVnZXI9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy50ZXh0PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMudGltZT1uZXcgci5YRkFPYmplY3RBcnJheX1bci4kdG9IVE1MXSgpe2NvbnN0IGU9W107Zm9yKGNvbnN0IHQgb2YgdGhpc1tyLiRnZXRDaGlsZHJlbl0oKSllLnB1c2godFtyLiR0ZXh0XSgpKTtyZXR1cm4gby5IVE1MUmVzdWx0LnN1Y2Nlc3MoZSl9fXQuSXRlbXM9SXRlbXM7Y2xhc3MgS2VlcCBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImtlZXAiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO2NvbnN0IHQ9WyJub25lIiwiY29udGVudEFyZWEiLCJwYWdlQXJlYSJdO3RoaXMuaW50YWN0PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmludGFjdCx0KTt0aGlzLm5leHQ9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUubmV4dCx0KTt0aGlzLnByZXZpb3VzPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnByZXZpb3VzLHQpO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsfX1jbGFzcyBLZXlVc2FnZSBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImtleVVzYWdlIik7Y29uc3QgdD1bIiIsInllcyIsIm5vIl07dGhpcy5jcmxTaWduPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmNybFNpZ24sdCk7dGhpcy5kYXRhRW5jaXBoZXJtZW50PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmRhdGFFbmNpcGhlcm1lbnQsdCk7dGhpcy5kZWNpcGhlck9ubHk9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuZGVjaXBoZXJPbmx5LHQpO3RoaXMuZGlnaXRhbFNpZ25hdHVyZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5kaWdpdGFsU2lnbmF0dXJlLHQpO3RoaXMuZW5jaXBoZXJPbmx5PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmVuY2lwaGVyT25seSx0KTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMua2V5QWdyZWVtZW50PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmtleUFncmVlbWVudCx0KTt0aGlzLmtleUNlcnRTaWduPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmtleUNlcnRTaWduLHQpO3RoaXMua2V5RW5jaXBoZXJtZW50PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmtleUVuY2lwaGVybWVudCx0KTt0aGlzLm5vblJlcHVkaWF0aW9uPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLm5vblJlcHVkaWF0aW9uLHQpO3RoaXMudHlwZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIExpbmUgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJsaW5lIiwhMCk7dGhpcy5oYW5kPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmhhbmQsWyJldmVuIiwibGVmdCIsInJpZ2h0Il0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5zbG9wZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5zbG9wZSxbIlxcIiwiLyJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5lZGdlPW51bGx9W3IuJHRvSFRNTF0oKXtjb25zdCBlPXRoaXNbci4kZ2V0UGFyZW50XSgpW3IuJGdldFBhcmVudF0oKSx0PXRoaXMuZWRnZXx8bmV3IEVkZ2Uoe30pLGE9dFtyLiR0b1N0eWxlXSgpLG49T2JqZWN0LmNyZWF0ZShudWxsKSxpPSJ2aXNpYmxlIj09PXQucHJlc2VuY2U/dC50aGlja25lc3M6MDtuLnN0cm9rZVdpZHRoPSgwLHMubWVhc3VyZVRvU3RyaW5nKShpKTtuLnN0cm9rZT1hLmNvbG9yO2xldCBjLGwsaCx1LGQ9IjEwMCUiLGc9IjEwMCUiO2lmKGUudzw9aSl7W2MsbCxoLHVdPVsiNTAlIiwwLCI1MCUiLCIxMDAlIl07ZD1uLnN0cm9rZVdpZHRofWVsc2UgaWYoZS5oPD1pKXtbYyxsLGgsdV09WzAsIjUwJSIsIjEwMCUiLCI1MCUiXTtnPW4uc3Ryb2tlV2lkdGh9ZWxzZSJcXCI9PT10aGlzLnNsb3BlP1tjLGwsaCx1XT1bMCwwLCIxMDAlIiwiMTAwJSJdOltjLGwsaCx1XT1bMCwiMTAwJSIsIjEwMCUiLDBdO2NvbnN0IHA9e25hbWU6InN2ZyIsY2hpbGRyZW46W3tuYW1lOiJsaW5lIixhdHRyaWJ1dGVzOnt4bWxuczpmLHgxOmMseTE6bCx4MjpoLHkyOnUsc3R5bGU6bn19XSxhdHRyaWJ1dGVzOnt4bWxuczpmLHdpZHRoOmQsaGVpZ2h0Omcsc3R5bGU6e292ZXJmbG93OiJ2aXNpYmxlIn19fTtpZihoYXNNYXJnaW4oZSkpcmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e3N0eWxlOntkaXNwbGF5OiJpbmxpbmUiLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifX0sY2hpbGRyZW46W3BdfSk7cC5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI7cmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKHApfX1jbGFzcyBMaW5lYXIgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJsaW5lYXIiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsidG9SaWdodCIsInRvQm90dG9tIiwidG9MZWZ0IiwidG9Ub3AiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY29sb3I9bnVsbDt0aGlzLmV4dHJhcz1udWxsfVtyLiR0b1N0eWxlXShlKXtlPWU/ZVtyLiR0b1N0eWxlXSgpOiIjRkZGRkZGIjtyZXR1cm5gbGluZWFyLWdyYWRpZW50KCR7dGhpcy50eXBlLnJlcGxhY2UoLyhbUkJMVF0pLywiICQxIikudG9Mb3dlckNhc2UoKX0sICR7ZX0sICR7dGhpcy5jb2xvcj90aGlzLmNvbG9yW3IuJHRvU3R5bGVdKCk6IiMwMDAwMDAifSlgfX1jbGFzcyBMb2NrRG9jdW1lbnQgZXh0ZW5kcyByLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwibG9ja0RvY3VtZW50Iik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtyLiRmaW5hbGl6ZV0oKXt0aGlzW3IuJGNvbnRlbnRdPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKSh0aGlzW3IuJGNvbnRlbnRdLFsiYXV0byIsIjAiLCIxIl0pfX1jbGFzcyBNYW5pZmVzdCBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsIm1hbmlmZXN0IiwhMCk7dGhpcy5hY3Rpb249KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuYWN0aW9uLFsiaW5jbHVkZSIsImFsbCIsImV4Y2x1ZGUiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbDt0aGlzLnJlZj1uZXcgci5YRkFPYmplY3RBcnJheX19Y2xhc3MgTWFyZ2luIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwibWFyZ2luIiwhMCk7dGhpcy5ib3R0b21JbnNldD0oMCxvLmdldE1lYXN1cmVtZW50KShlLmJvdHRvbUluc2V0LCIwIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmxlZnRJbnNldD0oMCxvLmdldE1lYXN1cmVtZW50KShlLmxlZnRJbnNldCwiMCIpO3RoaXMucmlnaHRJbnNldD0oMCxvLmdldE1lYXN1cmVtZW50KShlLnJpZ2h0SW5zZXQsIjAiKTt0aGlzLnRvcEluc2V0PSgwLG8uZ2V0TWVhc3VyZW1lbnQpKGUudG9wSW5zZXQsIjAiKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbH1bci4kdG9TdHlsZV0oKXtyZXR1cm57bWFyZ2luOigwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnRvcEluc2V0KSsiICIrKDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMucmlnaHRJbnNldCkrIiAiKygwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLmJvdHRvbUluc2V0KSsiICIrKDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMubGVmdEluc2V0KX19fWNsYXNzIE1kcCBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsIm1kcCIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5wZXJtaXNzaW9ucz0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUucGVybWlzc2lvbnMsZGVmYXVsdFZhbHVlOjIsdmFsaWRhdGU6ZT0+MT09PWV8fDM9PT1lfSk7dGhpcy5zaWduYXR1cmVUeXBlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnNpZ25hdHVyZVR5cGUsWyJmaWxsZXIiLCJhdXRob3IiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBNZWRpdW0gZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJtZWRpdW0iKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMuaW1hZ2luZ0JCb3g9KDAsby5nZXRCQm94KShlLmltYWdpbmdCQm94KTt0aGlzLmxvbmc9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5sb25nKTt0aGlzLm9yaWVudGF0aW9uPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLm9yaWVudGF0aW9uLFsicG9ydHJhaXQiLCJsYW5kc2NhcGUiXSk7dGhpcy5zaG9ydD0oMCxvLmdldE1lYXN1cmVtZW50KShlLnNob3J0KTt0aGlzLnN0b2NrPWUuc3RvY2t8fCIiO3RoaXMudHJheUluPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnRyYXlJbixbImF1dG8iLCJkZWxlZ2F0ZSIsInBhZ2VGcm9udCJdKTt0aGlzLnRyYXlPdXQ9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudHJheU91dCxbImF1dG8iLCJkZWxlZ2F0ZSJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIE1lc3NhZ2UgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJtZXNzYWdlIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy50ZXh0PW5ldyByLlhGQU9iamVjdEFycmF5fX1jbGFzcyBOdW1lcmljRWRpdCBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsIm51bWVyaWNFZGl0IiwhMCk7dGhpcy5oU2Nyb2xsUG9saWN5PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmhTY3JvbGxQb2xpY3ksWyJhdXRvIiwib2ZmIiwib24iXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib3JkZXI9bnVsbDt0aGlzLmNvbWI9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMubWFyZ2luPW51bGx9W3IuJHRvSFRNTF0oZSl7Y29uc3QgdD0oMCxzLnRvU3R5bGUpKHRoaXMsImJvcmRlciIsImZvbnQiLCJtYXJnaW4iKSxhPXRoaXNbci4kZ2V0UGFyZW50XSgpW3IuJGdldFBhcmVudF0oKSxuPXtuYW1lOiJpbnB1dCIsYXR0cmlidXRlczp7dHlwZToidGV4dCIsZmllbGRJZDphW3IuJHVpZF0sZGF0YUlkOmFbci4kZGF0YV0mJmFbci4kZGF0YV1bci4kdWlkXXx8YVtyLiR1aWRdLGNsYXNzOlsieGZhVGV4dGZpZWxkIl0sc3R5bGU6dCwiYXJpYS1sYWJlbCI6YXJpYUxhYmVsKGEpLCJhcmlhLXJlcXVpcmVkIjohMX19O2lmKGlzUmVxdWlyZWQoYSkpe24uYXR0cmlidXRlc1siYXJpYS1yZXF1aXJlZCJdPSEwO24uYXR0cmlidXRlcy5yZXF1aXJlZD0hMH1yZXR1cm4gby5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImxhYmVsIixhdHRyaWJ1dGVzOntjbGFzczpbInhmYUxhYmVsIl19LGNoaWxkcmVuOltuXX0pfX1jbGFzcyBPY2N1ciBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsIm9jY3VyIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmluaXRpYWw9IiIhPT1lLmluaXRpYWw/KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLmluaXRpYWwsZGVmYXVsdFZhbHVlOiIiLHZhbGlkYXRlOmU9PiEwfSk6IiI7dGhpcy5tYXg9IiIhPT1lLm1heD8oMCxvLmdldEludGVnZXIpKHtkYXRhOmUubWF4LGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmU9PiEwfSk6IiI7dGhpcy5taW49IiIhPT1lLm1pbj8oMCxvLmdldEludGVnZXIpKHtkYXRhOmUubWluLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmU9PiEwfSk6IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGx9W3IuJGNsZWFuXSgpe2NvbnN0IGU9dGhpc1tyLiRnZXRQYXJlbnRdKCksdD10aGlzLm1pbjsiIj09PXRoaXMubWluJiYodGhpcy5taW49ZSBpbnN0YW5jZW9mIFBhZ2VBcmVhfHxlIGluc3RhbmNlb2YgUGFnZVNldD8wOjEpOyIiPT09dGhpcy5tYXgmJih0aGlzLm1heD0iIj09PXQ/ZSBpbnN0YW5jZW9mIFBhZ2VBcmVhfHxlIGluc3RhbmNlb2YgUGFnZVNldD8tMToxOnRoaXMubWluKTstMSE9PXRoaXMubWF4JiZ0aGlzLm1heDx0aGlzLm1pbiYmKHRoaXMubWF4PXRoaXMubWluKTsiIj09PXRoaXMuaW5pdGlhbCYmKHRoaXMuaW5pdGlhbD1lIGluc3RhbmNlb2YgVGVtcGxhdGU/MTp0aGlzLm1pbil9fWNsYXNzIE9pZCBleHRlbmRzIHIuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsIm9pZCIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBPaWRzIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwib2lkcyIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLm9pZD1uZXcgci5YRkFPYmplY3RBcnJheX19Y2xhc3MgT3ZlcmZsb3cgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJvdmVyZmxvdyIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5sZWFkZXI9ZS5sZWFkZXJ8fCIiO3RoaXMudGFyZ2V0PWUudGFyZ2V0fHwiIjt0aGlzLnRyYWlsZXI9ZS50cmFpbGVyfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W3IuJGdldEV4dHJhXSgpe2lmKCF0aGlzW3IuJGV4dHJhXSl7Y29uc3QgZT10aGlzW3IuJGdldFBhcmVudF0oKSx0PXRoaXNbci4kZ2V0VGVtcGxhdGVSb290XSgpLGE9dFtyLiRzZWFyY2hOb2RlXSh0aGlzLnRhcmdldCxlKSxuPXRbci4kc2VhcmNoTm9kZV0odGhpcy5sZWFkZXIsZSksaT10W3IuJHNlYXJjaE5vZGVdKHRoaXMudHJhaWxlcixlKTt0aGlzW3IuJGV4dHJhXT17dGFyZ2V0OmEmJmFbMF18fG51bGwsbGVhZGVyOm4mJm5bMF18fG51bGwsdHJhaWxlcjppJiZpWzBdfHxudWxsLGFkZExlYWRlcjohMSxhZGRUcmFpbGVyOiExfX1yZXR1cm4gdGhpc1tyLiRleHRyYV19fWNsYXNzIFBhZ2VBcmVhIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwicGFnZUFyZWEiLCEwKTt0aGlzLmJsYW5rT3JOb3RCbGFuaz0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5ibGFua09yTm90QmxhbmssWyJhbnkiLCJibGFuayIsIm5vdEJsYW5rIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5pbml0aWFsTnVtYmVyPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5pbml0aWFsTnVtYmVyLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmU9PiEwfSk7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5udW1iZXJlZD0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUubnVtYmVyZWQsZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZT0+ITB9KTt0aGlzLm9kZE9yRXZlbj0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5vZGRPckV2ZW4sWyJhbnkiLCJldmVuIiwib2RkIl0pO3RoaXMucGFnZVBvc2l0aW9uPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnBhZ2VQb3NpdGlvbixbImFueSIsImZpcnN0IiwibGFzdCIsIm9ubHkiLCJyZXN0Il0pO3RoaXMucmVsZXZhbnQ9KDAsby5nZXRSZWxldmFudCkoZS5yZWxldmFudCk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZGVzYz1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5tZWRpdW09bnVsbDt0aGlzLm9jY3VyPW51bGw7dGhpcy5hcmVhPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuY29udGVudEFyZWE9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5kcmF3PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZXhjbEdyb3VwPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZmllbGQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJmb3JtPW5ldyByLlhGQU9iamVjdEFycmF5fVtyLiRpc1VzYWJsZV0oKXtpZighdGhpc1tyLiRleHRyYV0pe3RoaXNbci4kZXh0cmFdPXtudW1iZXJPZlVzZTowfTtyZXR1cm4hMH1yZXR1cm4hdGhpcy5vY2N1cnx8LTE9PT10aGlzLm9jY3VyLm1heHx8dGhpc1tyLiRleHRyYV0ubnVtYmVyT2ZVc2U8dGhpcy5vY2N1ci5tYXh9W3IuJGNsZWFuUGFnZV0oKXtkZWxldGUgdGhpc1tyLiRleHRyYV19W3IuJGdldE5leHRQYWdlXSgpe3RoaXNbci4kZXh0cmFdfHwodGhpc1tyLiRleHRyYV09e251bWJlck9mVXNlOjB9KTtjb25zdCBlPXRoaXNbci4kZ2V0UGFyZW50XSgpO2lmKCJvcmRlcmVkT2NjdXJyZW5jZSI9PT1lLnJlbGF0aW9uJiZ0aGlzW3IuJGlzVXNhYmxlXSgpKXt0aGlzW3IuJGV4dHJhXS5udW1iZXJPZlVzZSs9MTtyZXR1cm4gdGhpc31yZXR1cm4gZVtyLiRnZXROZXh0UGFnZV0oKX1bci4kZ2V0QXZhaWxhYmxlU3BhY2VdKCl7cmV0dXJuIHRoaXNbci4kZXh0cmFdLnNwYWNlfHx7d2lkdGg6MCxoZWlnaHQ6MH19W3IuJHRvSFRNTF0oKXt0aGlzW3IuJGV4dHJhXXx8KHRoaXNbci4kZXh0cmFdPXtudW1iZXJPZlVzZToxfSk7Y29uc3QgZT1bXTt0aGlzW3IuJGV4dHJhXS5jaGlsZHJlbj1lO2NvbnN0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtpZih0aGlzLm1lZGl1bSYmdGhpcy5tZWRpdW0uc2hvcnQmJnRoaXMubWVkaXVtLmxvbmcpe3Qud2lkdGg9KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMubWVkaXVtLnNob3J0KTt0LmhlaWdodD0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5tZWRpdW0ubG9uZyk7dGhpc1tyLiRleHRyYV0uc3BhY2U9e3dpZHRoOnRoaXMubWVkaXVtLnNob3J0LGhlaWdodDp0aGlzLm1lZGl1bS5sb25nfTtpZigibGFuZHNjYXBlIj09PXRoaXMubWVkaXVtLm9yaWVudGF0aW9uKXtjb25zdCBlPXQud2lkdGg7dC53aWR0aD10LmhlaWdodDt0LmhlaWdodD1lO3RoaXNbci4kZXh0cmFdLnNwYWNlPXt3aWR0aDp0aGlzLm1lZGl1bS5sb25nLGhlaWdodDp0aGlzLm1lZGl1bS5zaG9ydH19fWVsc2UoMCxjLndhcm4pKCJYRkEgLSBObyBtZWRpdW0gc3BlY2lmaWVkIGluIHBhZ2VBcmVhOiBwbGVhc2UgZmlsZSBhIGJ1Zy4iKTt0aGlzW3IuJGNoaWxkcmVuVG9IVE1MXSh7ZmlsdGVyOm5ldyBTZXQoWyJhcmVhIiwiZHJhdyIsImZpZWxkIiwic3ViZm9ybSJdKSxpbmNsdWRlOiEwfSk7dGhpc1tyLiRjaGlsZHJlblRvSFRNTF0oe2ZpbHRlcjpuZXcgU2V0KFsiY29udGVudEFyZWEiXSksaW5jbHVkZTohMH0pO3JldHVybiBvLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixjaGlsZHJlbjplLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhUGFnZSJdLGlkOnRoaXNbci4kdWlkXSxzdHlsZTp0LHhmYU5hbWU6dGhpcy5uYW1lfX0pfX1jbGFzcyBQYWdlU2V0IGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwicGFnZVNldCIsITApO3RoaXMuZHVwbGV4SW1wb3NpdGlvbj0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5kdXBsZXhJbXBvc2l0aW9uLFsibG9uZ0VkZ2UiLCJzaG9ydEVkZ2UiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnJlbGF0aW9uPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnJlbGF0aW9uLFsib3JkZXJlZE9jY3VycmVuY2UiLCJkdXBsZXhQYWdpbmF0ZWQiLCJzaW1wbGV4UGFnaW5hdGVkIl0pO3RoaXMucmVsZXZhbnQ9KDAsby5nZXRSZWxldmFudCkoZS5yZWxldmFudCk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5vY2N1cj1udWxsO3RoaXMucGFnZUFyZWE9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5wYWdlU2V0PW5ldyByLlhGQU9iamVjdEFycmF5fVtyLiRjbGVhblBhZ2VdKCl7Zm9yKGNvbnN0IGUgb2YgdGhpcy5wYWdlQXJlYS5jaGlsZHJlbillW3IuJGNsZWFuUGFnZV0oKTtmb3IoY29uc3QgZSBvZiB0aGlzLnBhZ2VTZXQuY2hpbGRyZW4pZVtyLiRjbGVhblBhZ2VdKCl9W3IuJGlzVXNhYmxlXSgpe3JldHVybiF0aGlzLm9jY3VyfHwtMT09PXRoaXMub2NjdXIubWF4fHx0aGlzW3IuJGV4dHJhXS5udW1iZXJPZlVzZTx0aGlzLm9jY3VyLm1heH1bci4kZ2V0TmV4dFBhZ2VdKCl7dGhpc1tyLiRleHRyYV18fCh0aGlzW3IuJGV4dHJhXT17bnVtYmVyT2ZVc2U6MSxwYWdlSW5kZXg6LTEscGFnZVNldEluZGV4Oi0xfSk7aWYoIm9yZGVyZWRPY2N1cnJlbmNlIj09PXRoaXMucmVsYXRpb24pe2lmKHRoaXNbci4kZXh0cmFdLnBhZ2VJbmRleCsxPHRoaXMucGFnZUFyZWEuY2hpbGRyZW4ubGVuZ3RoKXt0aGlzW3IuJGV4dHJhXS5wYWdlSW5kZXgrPTE7cmV0dXJuIHRoaXMucGFnZUFyZWEuY2hpbGRyZW5bdGhpc1tyLiRleHRyYV0ucGFnZUluZGV4XVtyLiRnZXROZXh0UGFnZV0oKX1pZih0aGlzW3IuJGV4dHJhXS5wYWdlU2V0SW5kZXgrMTx0aGlzLnBhZ2VTZXQuY2hpbGRyZW4ubGVuZ3RoKXt0aGlzW3IuJGV4dHJhXS5wYWdlU2V0SW5kZXgrPTE7cmV0dXJuIHRoaXMucGFnZVNldC5jaGlsZHJlblt0aGlzW3IuJGV4dHJhXS5wYWdlU2V0SW5kZXhdW3IuJGdldE5leHRQYWdlXSgpfWlmKHRoaXNbci4kaXNVc2FibGVdKCkpe3RoaXNbci4kZXh0cmFdLm51bWJlck9mVXNlKz0xO3RoaXNbci4kZXh0cmFdLnBhZ2VJbmRleD0tMTt0aGlzW3IuJGV4dHJhXS5wYWdlU2V0SW5kZXg9LTE7cmV0dXJuIHRoaXNbci4kZ2V0TmV4dFBhZ2VdKCl9Y29uc3QgZT10aGlzW3IuJGdldFBhcmVudF0oKTtpZihlIGluc3RhbmNlb2YgUGFnZVNldClyZXR1cm4gZVtyLiRnZXROZXh0UGFnZV0oKTt0aGlzW3IuJGNsZWFuUGFnZV0oKTtyZXR1cm4gdGhpc1tyLiRnZXROZXh0UGFnZV0oKX1jb25zdCBlPXRoaXNbci4kZ2V0VGVtcGxhdGVSb290XSgpW3IuJGV4dHJhXS5wYWdlTnVtYmVyLHQ9ZSUyPT0wPyJldmVuIjoib2RkIixhPTA9PT1lPyJmaXJzdCI6InJlc3QiO2xldCBuPXRoaXMucGFnZUFyZWEuY2hpbGRyZW4uZmluZCgoZT0+ZS5vZGRPckV2ZW49PT10JiZlLnBhZ2VQb3NpdGlvbj09PWEpKTtpZihuKXJldHVybiBuO249dGhpcy5wYWdlQXJlYS5jaGlsZHJlbi5maW5kKChlPT4iYW55Ij09PWUub2RkT3JFdmVuJiZlLnBhZ2VQb3NpdGlvbj09PWEpKTtpZihuKXJldHVybiBuO249dGhpcy5wYWdlQXJlYS5jaGlsZHJlbi5maW5kKChlPT4iYW55Ij09PWUub2RkT3JFdmVuJiYiYW55Ij09PWUucGFnZVBvc2l0aW9uKSk7cmV0dXJuIG58fHRoaXMucGFnZUFyZWEuY2hpbGRyZW5bMF19fWNsYXNzIFBhcmEgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJwYXJhIiwhMCk7dGhpcy5oQWxpZ249KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuaEFsaWduLFsibGVmdCIsImNlbnRlciIsImp1c3RpZnkiLCJqdXN0aWZ5QWxsIiwicmFkaXgiLCJyaWdodCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubGluZUhlaWdodD1lLmxpbmVIZWlnaHQ/KDAsby5nZXRNZWFzdXJlbWVudCkoZS5saW5lSGVpZ2h0LCIwcHQiKToiIjt0aGlzLm1hcmdpbkxlZnQ9ZS5tYXJnaW5MZWZ0PygwLG8uZ2V0TWVhc3VyZW1lbnQpKGUubWFyZ2luTGVmdCwiMHB0Iik6IiI7dGhpcy5tYXJnaW5SaWdodD1lLm1hcmdpblJpZ2h0PygwLG8uZ2V0TWVhc3VyZW1lbnQpKGUubWFyZ2luUmlnaHQsIjBwdCIpOiIiO3RoaXMub3JwaGFucz0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUub3JwaGFucyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT5lPj0wfSk7dGhpcy5wcmVzZXJ2ZT1lLnByZXNlcnZlfHwiIjt0aGlzLnJhZGl4T2Zmc2V0PWUucmFkaXhPZmZzZXQ/KDAsby5nZXRNZWFzdXJlbWVudCkoZS5yYWRpeE9mZnNldCwiMHB0Iik6IiI7dGhpcy5zcGFjZUFib3ZlPWUuc3BhY2VBYm92ZT8oMCxvLmdldE1lYXN1cmVtZW50KShlLnNwYWNlQWJvdmUsIjBwdCIpOiIiO3RoaXMuc3BhY2VCZWxvdz1lLnNwYWNlQmVsb3c/KDAsby5nZXRNZWFzdXJlbWVudCkoZS5zcGFjZUJlbG93LCIwcHQiKToiIjt0aGlzLnRhYkRlZmF1bHQ9ZS50YWJEZWZhdWx0PygwLG8uZ2V0TWVhc3VyZW1lbnQpKHRoaXMudGFiRGVmYXVsdCk6IiI7dGhpcy50YWJTdG9wcz0oZS50YWJTdG9wc3x8IiIpLnRyaW0oKS5zcGxpdCgvXHMrLykubWFwKCgoZSx0KT0+dCUyPT0xPygwLG8uZ2V0TWVhc3VyZW1lbnQpKGUpOmUpKTt0aGlzLnRleHRJbmRlbnQ9ZS50ZXh0SW5kZW50PygwLG8uZ2V0TWVhc3VyZW1lbnQpKGUudGV4dEluZGVudCwiMHB0Iik6IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMudkFsaWduPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnZBbGlnbixbInRvcCIsImJvdHRvbSIsIm1pZGRsZSJdKTt0aGlzLndpZG93cz0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUud2lkb3dzLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PmU+PTB9KTt0aGlzLmh5cGhlbmF0aW9uPW51bGx9W3IuJHRvU3R5bGVdKCl7Y29uc3QgZT0oMCxzLnRvU3R5bGUpKHRoaXMsImhBbGlnbiIpOyIiIT09dGhpcy5tYXJnaW5MZWZ0JiYoZS5wYWRkaW5nTGVmdD0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5tYXJnaW5MZWZ0KSk7IiIhPT10aGlzLm1hcmdpblJpZ2h0JiYoZS5wYWRkaW5naWdodD0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5tYXJnaW5SaWdodCkpOyIiIT09dGhpcy5zcGFjZUFib3ZlJiYoZS5wYWRkaW5nVG9wPSgwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnNwYWNlQWJvdmUpKTsiIiE9PXRoaXMuc3BhY2VCZWxvdyYmKGUucGFkZGluZ0JvdHRvbT0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5zcGFjZUJlbG93KSk7aWYoIiIhPT10aGlzLnRleHRJbmRlbnQpe2UudGV4dEluZGVudD0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy50ZXh0SW5kZW50KTsoMCxzLmZpeFRleHRJbmRlbnQpKGUpfXRoaXMubGluZUhlaWdodD4wJiYoZS5saW5lSGVpZ2h0PSgwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLmxpbmVIZWlnaHQpKTsiIiE9PXRoaXMudGFiRGVmYXVsdCYmKGUudGFiU2l6ZT0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy50YWJEZWZhdWx0KSk7dGhpcy50YWJTdG9wcy5sZW5ndGg7dGhpcy5oeXBoZW5hdGF0aW9uJiZPYmplY3QuYXNzaWduKGUsdGhpcy5oeXBoZW5hdGF0aW9uW3IuJHRvU3R5bGVdKCkpO3JldHVybiBlfX1jbGFzcyBQYXNzd29yZEVkaXQgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJwYXNzd29yZEVkaXQiLCEwKTt0aGlzLmhTY3JvbGxQb2xpY3k9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuaFNjcm9sbFBvbGljeSxbImF1dG8iLCJvZmYiLCJvbiJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucGFzc3dvcmRDaGFyPWUucGFzc3dvcmRDaGFyfHwiKiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuYm9yZGVyPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm1hcmdpbj1udWxsfX1jbGFzcyBQYXR0ZXJuIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwicGF0dGVybiIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJjcm9zc0hhdGNoIiwiY3Jvc3NEaWFnb25hbCIsImRpYWdvbmFsTGVmdCIsImRpYWdvbmFsUmlnaHQiLCJob3Jpem9udGFsIiwidmVydGljYWwiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY29sb3I9bnVsbDt0aGlzLmV4dHJhcz1udWxsfVtyLiR0b1N0eWxlXShlKXtlPWU/ZVtyLiR0b1N0eWxlXSgpOiIjRkZGRkZGIjtjb25zdCB0PXRoaXMuY29sb3I/dGhpcy5jb2xvcltyLiR0b1N0eWxlXSgpOiIjMDAwMDAwIixhPSJyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50IixuPWAke2V9LCR7ZX0gNXB4LCR7dH0gNXB4LCR7dH0gMTBweGA7c3dpdGNoKHRoaXMudHlwZSl7Y2FzZSJjcm9zc0hhdGNoIjpyZXR1cm5gJHthfSh0byB0b3AsJHtufSkgJHthfSh0byByaWdodCwke259KWA7Y2FzZSJjcm9zc0RpYWdvbmFsIjpyZXR1cm5gJHthfSg0NWRlZywke259KSAke2F9KC00NWRlZywke259KWA7Y2FzZSJkaWFnb25hbExlZnQiOnJldHVybmAke2F9KDQ1ZGVnLCR7bn0pYDtjYXNlImRpYWdvbmFsUmlnaHQiOnJldHVybmAke2F9KC00NWRlZywke259KWA7Y2FzZSJob3Jpem9udGFsIjpyZXR1cm5gJHthfSh0byB0b3AsJHtufSlgO2Nhc2UidmVydGljYWwiOnJldHVybmAke2F9KHRvIHJpZ2h0LCR7bn0pYH1yZXR1cm4iIn19Y2xhc3MgUGljdHVyZSBleHRlbmRzIHIuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInBpY3R1cmUiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgUHJvdG8gZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJwcm90byIsITApO3RoaXMuYXBwZWFyYW5jZUZpbHRlcj1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmFyYz1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmFyZWE9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5hc3Npc3Q9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5iYXJjb2RlPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuYmluZEl0ZW1zPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuYm9va2VuZD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmJvb2xlYW49bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5ib3JkZXI9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5icmVhaz1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmJyZWFrQWZ0ZXI9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5icmVha0JlZm9yZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmJ1dHRvbj1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmNhbGN1bGF0ZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmNhcHRpb249bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5jZXJ0aWZpY2F0ZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmNlcnRpZmljYXRlcz1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmNoZWNrQnV0dG9uPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuY2hvaWNlTGlzdD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmNvbG9yPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuY29tYj1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmNvbm5lY3Q9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5jb250ZW50QXJlYT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmNvcm5lcj1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmRhdGU9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlVGltZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmRhdGVUaW1lRWRpdD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmRlY2ltYWw9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5kZWZhdWx0VWk9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5kZXNjPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZGlnZXN0TWV0aG9kPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZGlnZXN0TWV0aG9kcz1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmRyYXc9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5lZGdlPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZW5jb2Rpbmc9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5lbmNvZGluZ3M9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5lbmNyeXB0PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZW5jcnlwdERhdGE9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5lbmNyeXB0aW9uPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZW5jcnlwdGlvbk1ldGhvZD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmVuY3J5cHRpb25NZXRob2RzPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZXZlbnQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5leERhdGE9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5leE9iamVjdD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmV4Y2xHcm91cD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmV4ZWN1dGU9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5leHRyYXM9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5maWVsZD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmZpbGw9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5maWx0ZXI9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5mbG9hdD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmZvbnQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5mb3JtYXQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5oYW5kbGVyPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuaHlwaGVuYXRpb249bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5pbWFnZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmltYWdlRWRpdD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmludGVnZXI9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5pc3N1ZXJzPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuaXRlbXM9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5rZWVwPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMua2V5VXNhZ2U9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5saW5lPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMubGluZWFyPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMubG9ja0RvY3VtZW50PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMubWFuaWZlc3Q9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5tYXJnaW49bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5tZHA9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5tZWRpdW09bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5tZXNzYWdlPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMubnVtZXJpY0VkaXQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5vY2N1cj1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLm9pZD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLm9pZHM9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5vdmVyZmxvdz1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnBhZ2VBcmVhPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMucGFnZVNldD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnBhcmE9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5wYXNzd29yZEVkaXQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5wYXR0ZXJuPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMucGljdHVyZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnJhZGlhbD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnJlYXNvbj1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnJlYXNvbnM9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5yZWN0YW5nbGU9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5yZWY9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5zY3JpcHQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5zZXRQcm9wZXJ0eT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnNpZ25EYXRhPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuc2lnbmF0dXJlPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuc2lnbmluZz1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnNvbGlkPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuc3BlYWs9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5zdGlwcGxlPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuc3ViZm9ybT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnN1YmZvcm1TZXQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJqZWN0RE49bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJqZWN0RE5zPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuc3VibWl0PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMudGV4dD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnRleHRFZGl0PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMudGltZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnRpbWVTdGFtcD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnRvb2xUaXA9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy50cmF2ZXJzYWw9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy50cmF2ZXJzZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnVpPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMudmFsaWRhdGU9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy52YWx1ZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnZhcmlhYmxlcz1uZXcgci5YRkFPYmplY3RBcnJheX19Y2xhc3MgUmFkaWFsIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwicmFkaWFsIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbInRvRWRnZSIsInRvQ2VudGVyIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNvbG9yPW51bGw7dGhpcy5leHRyYXM9bnVsbH1bci4kdG9TdHlsZV0oZSl7ZT1lP2Vbci4kdG9TdHlsZV0oKToiI0ZGRkZGRiI7Y29uc3QgdD10aGlzLmNvbG9yP3RoaXMuY29sb3Jbci4kdG9TdHlsZV0oKToiIzAwMDAwMCI7cmV0dXJuYHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgY2VudGVyLCAkeyJ0b0VkZ2UiPT09dGhpcy50eXBlP2Ake2V9LCR7dH1gOmAke3R9LCR7ZX1gfSlgfX1jbGFzcyBSZWFzb24gZXh0ZW5kcyByLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJyZWFzb24iKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgUmVhc29ucyBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInJlYXNvbnMiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5yZWFzb249bmV3IHIuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIFJlY3RhbmdsZSBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInJlY3RhbmdsZSIsITApO3RoaXMuaGFuZD0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5oYW5kLFsiZXZlbiIsImxlZnQiLCJyaWdodCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNvcm5lcj1uZXcgci5YRkFPYmplY3RBcnJheSg0KTt0aGlzLmVkZ2U9bmV3IHIuWEZBT2JqZWN0QXJyYXkoNCk7dGhpcy5maWxsPW51bGx9W3IuJHRvSFRNTF0oKXtjb25zdCBlPXRoaXMuZWRnZS5jaGlsZHJlbi5sZW5ndGg/dGhpcy5lZGdlLmNoaWxkcmVuWzBdOm5ldyBFZGdlKHt9KSx0PWVbci4kdG9TdHlsZV0oKSxhPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy5maWxsJiYidmlzaWJsZSI9PT10aGlzLmZpbGwucHJlc2VuY2U/T2JqZWN0LmFzc2lnbihhLHRoaXMuZmlsbFtyLiR0b1N0eWxlXSgpKTphLmZpbGw9InRyYW5zcGFyZW50IjthLnN0cm9rZVdpZHRoPSgwLHMubWVhc3VyZVRvU3RyaW5nKSgidmlzaWJsZSI9PT1lLnByZXNlbmNlP2UudGhpY2tuZXNzOjApO2Euc3Ryb2tlPXQuY29sb3I7Y29uc3Qgbj0odGhpcy5jb3JuZXIuY2hpbGRyZW4ubGVuZ3RoP3RoaXMuY29ybmVyLmNoaWxkcmVuWzBdOm5ldyBDb3JuZXIoe30pKVtyLiR0b1N0eWxlXSgpLGk9e25hbWU6InN2ZyIsY2hpbGRyZW46W3tuYW1lOiJyZWN0IixhdHRyaWJ1dGVzOnt4bWxuczpmLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLHg6MCx5OjAscng6bi5yYWRpdXMscnk6bi5yYWRpdXMsc3R5bGU6YX19XSxhdHRyaWJ1dGVzOnt4bWxuczpmLHN0eWxlOntvdmVyZmxvdzoidmlzaWJsZSJ9LHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifX07aWYoaGFzTWFyZ2luKHRoaXNbci4kZ2V0UGFyZW50XSgpW3IuJGdldFBhcmVudF0oKSkpcmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e3N0eWxlOntkaXNwbGF5OiJpbmxpbmUiLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifX0sY2hpbGRyZW46W2ldfSk7aS5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI7cmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKGkpfX1jbGFzcyBSZWZFbGVtZW50IGV4dGVuZHMgci5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwicmVmIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFNjcmlwdCBleHRlbmRzIHIuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInNjcmlwdCIpO3RoaXMuYmluZGluZz1lLmJpbmRpbmd8fCIiO3RoaXMuY29udGVudFR5cGU9ZS5jb250ZW50VHlwZXx8IiI7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnJ1bkF0PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnJ1bkF0LFsiY2xpZW50IiwiYm90aCIsInNlcnZlciJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFNldFByb3BlcnR5IGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwic2V0UHJvcGVydHkiKTt0aGlzLmNvbm5lY3Rpb249ZS5jb25uZWN0aW9ufHwiIjt0aGlzLnJlZj1lLnJlZnx8IiI7dGhpcy50YXJnZXQ9ZS50YXJnZXR8fCIifX10LlNldFByb3BlcnR5PVNldFByb3BlcnR5O2NsYXNzIFNpZ25EYXRhIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwic2lnbkRhdGEiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMub3BlcmF0aW9uPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLm9wZXJhdGlvbixbInNpZ24iLCJjbGVhciIsInZlcmlmeSJdKTt0aGlzLnJlZj1lLnJlZnx8IiI7dGhpcy50YXJnZXQ9ZS50YXJnZXR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmZpbHRlcj1udWxsO3RoaXMubWFuaWZlc3Q9bnVsbH19Y2xhc3MgU2lnbmF0dXJlIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwic2lnbmF0dXJlIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIlBERjEuMyIsIlBERjEuNiJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib3JkZXI9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMuZmlsdGVyPW51bGw7dGhpcy5tYW5pZmVzdD1udWxsO3RoaXMubWFyZ2luPW51bGx9fWNsYXNzIFNpZ25pbmcgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJzaWduaW5nIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY2VydGlmaWNhdGU9bmV3IHIuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIFNvbGlkIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwic29saWQiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsfVtyLiR0b1N0eWxlXShlKXtyZXR1cm4gZT9lW3IuJHRvU3R5bGVdKCk6IiNGRkZGRkYifX1jbGFzcyBTcGVhayBleHRlbmRzIHIuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInNwZWFrIik7dGhpcy5kaXNhYmxlPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5kaXNhYmxlLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnByaW9yaXR5PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnByaW9yaXR5LFsiY3VzdG9tIiwiY2FwdGlvbiIsIm5hbWUiLCJ0b29sVGlwIl0pO3RoaXMucmlkPWUucmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFN0aXBwbGUgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJzdGlwcGxlIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnJhdGU9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLnJhdGUsZGVmYXVsdFZhbHVlOjUwLHZhbGlkYXRlOmU9PmU+PTAmJmU8PTEwMH0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNvbG9yPW51bGw7dGhpcy5leHRyYXM9bnVsbH1bci4kdG9TdHlsZV0oZSl7Y29uc3QgdD10aGlzLnJhdGUvMTAwO3JldHVybiBjLlV0aWwubWFrZUhleENvbG9yKE1hdGgucm91bmQoZS52YWx1ZS5yKigxLXQpK3RoaXMudmFsdWUucip0KSxNYXRoLnJvdW5kKGUudmFsdWUuZyooMS10KSt0aGlzLnZhbHVlLmcqdCksTWF0aC5yb3VuZChlLnZhbHVlLmIqKDEtdCkrdGhpcy52YWx1ZS5iKnQpKX19Y2xhc3MgU3ViZm9ybSBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInN1YmZvcm0iLCEwKTt0aGlzLmFjY2Vzcz0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5hY2Nlc3MsWyJvcGVuIiwibm9uSW50ZXJhY3RpdmUiLCJwcm90ZWN0ZWQiLCJyZWFkT25seSJdKTt0aGlzLmFsbG93TWFjcm89KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLmFsbG93TWFjcm8sZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLmFuY2hvclR5cGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuYW5jaG9yVHlwZSxbInRvcExlZnQiLCJib3R0b21DZW50ZXIiLCJib3R0b21MZWZ0IiwiYm90dG9tUmlnaHQiLCJtaWRkbGVDZW50ZXIiLCJtaWRkbGVMZWZ0IiwibWlkZGxlUmlnaHQiLCJ0b3BDZW50ZXIiLCJ0b3BSaWdodCJdKTt0aGlzLmNvbFNwYW49KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLmNvbFNwYW4sZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZT0+ZT49MXx8LTE9PT1lfSk7dGhpcy5jb2x1bW5XaWR0aHM9KGUuY29sdW1uV2lkdGhzfHwiIikudHJpbSgpLnNwbGl0KC9ccysvKS5tYXAoKGU9PiItMSI9PT1lPy0xOigwLG8uZ2V0TWVhc3VyZW1lbnQpKGUpKSk7dGhpcy5oPWUuaD8oMCxvLmdldE1lYXN1cmVtZW50KShlLmgpOiIiO3RoaXMuaEFsaWduPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmhBbGlnbixbImxlZnQiLCJjZW50ZXIiLCJqdXN0aWZ5IiwianVzdGlmeUFsbCIsInJhZGl4IiwicmlnaHQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmxheW91dD0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5sYXlvdXQsWyJwb3NpdGlvbiIsImxyLXRiIiwicmwtcm93IiwicmwtdGIiLCJyb3ciLCJ0YWJsZSIsInRiIl0pO3RoaXMubG9jYWxlPWUubG9jYWxlfHwiIjt0aGlzLm1heEg9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5tYXhILCIwcHQiKTt0aGlzLm1heFc9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5tYXhXLCIwcHQiKTt0aGlzLm1lcmdlTW9kZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5tZXJnZU1vZGUsWyJjb25zdW1lRGF0YSIsIm1hdGNoVGVtcGxhdGUiXSk7dGhpcy5taW5IPSgwLG8uZ2V0TWVhc3VyZW1lbnQpKGUubWluSCwiMHB0Iik7dGhpcy5taW5XPSgwLG8uZ2V0TWVhc3VyZW1lbnQpKGUubWluVywiMHB0Iik7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5wcmVzZW5jZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKTt0aGlzLnJlbGV2YW50PSgwLG8uZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpO3RoaXMucmVzdG9yZVN0YXRlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnJlc3RvcmVTdGF0ZSxbIm1hbnVhbCIsImF1dG8iXSk7dGhpcy5zY29wZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5zY29wZSxbIm5hbWUiLCJub25lIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnc9ZS53PygwLG8uZ2V0TWVhc3VyZW1lbnQpKGUudyk6IiI7dGhpcy54PSgwLG8uZ2V0TWVhc3VyZW1lbnQpKGUueCwiMHB0Iik7dGhpcy55PSgwLG8uZ2V0TWVhc3VyZW1lbnQpKGUueSwiMHB0Iik7dGhpcy5hc3Npc3Q9bnVsbDt0aGlzLmJpbmQ9bnVsbDt0aGlzLmJvb2tlbmQ9bnVsbDt0aGlzLmJvcmRlcj1udWxsO3RoaXMuYnJlYWs9bnVsbDt0aGlzLmNhbGN1bGF0ZT1udWxsO3RoaXMuZGVzYz1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5rZWVwPW51bGw7dGhpcy5tYXJnaW49bnVsbDt0aGlzLm9jY3VyPW51bGw7dGhpcy5vdmVyZmxvdz1udWxsO3RoaXMucGFnZVNldD1udWxsO3RoaXMucGFyYT1udWxsO3RoaXMudHJhdmVyc2FsPW51bGw7dGhpcy52YWxpZGF0ZT1udWxsO3RoaXMudmFyaWFibGVzPW51bGw7dGhpcy5hcmVhPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuYnJlYWtBZnRlcj1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmJyZWFrQmVmb3JlPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuY29ubmVjdD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmRyYXc9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5ldmVudD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmV4T2JqZWN0PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZXhjbEdyb3VwPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZmllbGQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5wcm90bz1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnNldFByb3BlcnR5PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuc3ViZm9ybT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnN1YmZvcm1TZXQ9bmV3IHIuWEZBT2JqZWN0QXJyYXl9W3IuJGdldFN1YmZvcm1QYXJlbnRdKCl7Y29uc3QgZT10aGlzW3IuJGdldFBhcmVudF0oKTtyZXR1cm4gZSBpbnN0YW5jZW9mIFN1YmZvcm1TZXQ/ZVtyLiRnZXRTdWJmb3JtUGFyZW50XSgpOmV9W3IuJGlzQmluZGFibGVdKCl7cmV0dXJuITB9W3IuJGlzVGhlcmVNb3JlV2lkdGhdKCl7cmV0dXJuIHRoaXMubGF5b3V0LmVuZHNXaXRoKCItdGIiKSYmMD09PXRoaXNbci4kZXh0cmFdLmF0dGVtcHQmJnRoaXNbci4kZXh0cmFdLm51bWJlckluTGluZT4wfHx0aGlzW3IuJGdldFBhcmVudF0oKVtyLiRpc1RoZXJlTW9yZVdpZHRoXSgpfSpbci4kZ2V0Q29udGFpbmVkQ2hpbGRyZW5dKCl7eWllbGQqZ2V0Q29udGFpbmVkQ2hpbGRyZW4odGhpcyl9W3IuJGZsdXNoSFRNTF0oKXtyZXR1cm4oMCxpLmZsdXNoSFRNTCkodGhpcyl9W3IuJGFkZEhUTUxdKGUsdCl7KDAsaS5hZGRIVE1MKSh0aGlzLGUsdCl9W3IuJGdldEF2YWlsYWJsZVNwYWNlXSgpe3JldHVybigwLGkuZ2V0QXZhaWxhYmxlU3BhY2UpKHRoaXMpfVtyLiRpc1NwbGl0dGFibGVdKCl7Y29uc3QgZT10aGlzW3IuJGdldFN1YmZvcm1QYXJlbnRdKCk7aWYoIWVbci4kaXNTcGxpdHRhYmxlXSgpKXJldHVybiExO2lmKHZvaWQgMCE9PXRoaXNbci4kZXh0cmFdLl9pc1NwbGl0dGFibGUpcmV0dXJuIHRoaXNbci4kZXh0cmFdLl9pc1NwbGl0dGFibGU7aWYoInBvc2l0aW9uIj09PXRoaXMubGF5b3V0fHx0aGlzLmxheW91dC5pbmNsdWRlcygicm93Iikpe3RoaXNbci4kZXh0cmFdLl9pc1NwbGl0dGFibGU9ITE7cmV0dXJuITF9aWYodGhpcy5rZWVwJiYibm9uZSIhPT10aGlzLmtlZXAuaW50YWN0KXt0aGlzW3IuJGV4dHJhXS5faXNTcGxpdHRhYmxlPSExO3JldHVybiExfWlmKGUubGF5b3V0JiZlLmxheW91dC5lbmRzV2l0aCgiLXRiIikmJjAhPT1lW3IuJGV4dHJhXS5udW1iZXJJbkxpbmUpcmV0dXJuITE7dGhpc1tyLiRleHRyYV0uX2lzU3BsaXR0YWJsZT0hMDtyZXR1cm4hMH1bci4kdG9IVE1MXShlKXtzZXRUYWJJbmRleCh0aGlzKTtpZih0aGlzLmJyZWFrKXtpZigiYXV0byIhPT10aGlzLmJyZWFrLmFmdGVyfHwiIiE9PXRoaXMuYnJlYWsuYWZ0ZXJUYXJnZXQpe2NvbnN0IGU9bmV3IEJyZWFrQWZ0ZXIoe3RhcmdldFR5cGU6dGhpcy5icmVhay5hZnRlcix0YXJnZXQ6dGhpcy5icmVhay5hZnRlclRhcmdldCxzdGFydE5ldzp0aGlzLmJyZWFrLnN0YXJ0TmV3LnRvU3RyaW5nKCl9KTtlW3IuJGdsb2JhbERhdGFdPXRoaXNbci4kZ2xvYmFsRGF0YV07dGhpc1tyLiRhcHBlbmRDaGlsZF0oZSk7dGhpcy5icmVha0FmdGVyLnB1c2goZSl9aWYoImF1dG8iIT09dGhpcy5icmVhay5iZWZvcmV8fCIiIT09dGhpcy5icmVhay5iZWZvcmVUYXJnZXQpe2NvbnN0IGU9bmV3IEJyZWFrQmVmb3JlKHt0YXJnZXRUeXBlOnRoaXMuYnJlYWsuYmVmb3JlLHRhcmdldDp0aGlzLmJyZWFrLmJlZm9yZVRhcmdldCxzdGFydE5ldzp0aGlzLmJyZWFrLnN0YXJ0TmV3LnRvU3RyaW5nKCl9KTtlW3IuJGdsb2JhbERhdGFdPXRoaXNbci4kZ2xvYmFsRGF0YV07dGhpc1tyLiRhcHBlbmRDaGlsZF0oZSk7dGhpcy5icmVha0JlZm9yZS5wdXNoKGUpfWlmKCIiIT09dGhpcy5icmVhay5vdmVyZmxvd1RhcmdldCl7Y29uc3QgZT1uZXcgT3ZlcmZsb3coe3RhcmdldDp0aGlzLmJyZWFrLm92ZXJmbG93VGFyZ2V0LGxlYWRlcjp0aGlzLmJyZWFrLm92ZXJmbG93TGVhZGVyLHRyYWlsZXI6dGhpcy5icmVhay5vdmVyZmxvd1RyYWlsZXJ9KTtlW3IuJGdsb2JhbERhdGFdPXRoaXNbci4kZ2xvYmFsRGF0YV07dGhpc1tyLiRhcHBlbmRDaGlsZF0oZSk7dGhpcy5vdmVyZmxvdy5wdXNoKGUpfXRoaXNbci4kcmVtb3ZlQ2hpbGRdKHRoaXMuYnJlYWspO3RoaXMuYnJlYWs9bnVsbH1pZigiaGlkZGVuIj09PXRoaXMucHJlc2VuY2V8fCJpbmFjdGl2ZSI9PT10aGlzLnByZXNlbmNlKXJldHVybiBvLkhUTUxSZXN1bHQuRU1QVFk7KHRoaXMuYnJlYWtCZWZvcmUuY2hpbGRyZW4ubGVuZ3RoPjF8fHRoaXMuYnJlYWtBZnRlci5jaGlsZHJlbi5sZW5ndGg+MSkmJigwLGMud2FybikoIlhGQSAtIFNldmVyYWwgYnJlYWtCZWZvcmUgb3IgYnJlYWtBZnRlciBpbiBzdWJmb3JtczogcGxlYXNlIGZpbGUgYSBidWcuIik7aWYodGhpcy5icmVha0JlZm9yZS5jaGlsZHJlbi5sZW5ndGg+PTEpe2NvbnN0IGU9dGhpcy5icmVha0JlZm9yZS5jaGlsZHJlblswXTtpZihoYW5kbGVCcmVhayhlKSlyZXR1cm4gby5IVE1MUmVzdWx0LmJyZWFrTm9kZShlKX1pZih0aGlzW3IuJGV4dHJhXSYmdGhpc1tyLiRleHRyYV0uYWZ0ZXJCcmVha0FmdGVyKXJldHVybiBvLkhUTUxSZXN1bHQuRU1QVFk7KDAscy5maXhEaW1lbnNpb25zKSh0aGlzKTtjb25zdCB0PVtdLGE9e2lkOnRoaXNbci4kdWlkXSxjbGFzczpbXX07KDAscy5zZXRBY2Nlc3MpKHRoaXMsYS5jbGFzcyk7dGhpc1tyLiRleHRyYV18fCh0aGlzW3IuJGV4dHJhXT1PYmplY3QuY3JlYXRlKG51bGwpKTtPYmplY3QuYXNzaWduKHRoaXNbci4kZXh0cmFdLHtjaGlsZHJlbjp0LGxpbmU6bnVsbCxhdHRyaWJ1dGVzOmEsYXR0ZW1wdDowLG51bWJlckluTGluZTowLGF2YWlsYWJsZVNwYWNlOnt3aWR0aDpNYXRoLm1pbih0aGlzLnd8fDEvMCxlLndpZHRoKSxoZWlnaHQ6TWF0aC5taW4odGhpcy5ofHwxLzAsZS5oZWlnaHQpfSx3aWR0aDowLGhlaWdodDowLHByZXZIZWlnaHQ6MCxjdXJyZW50V2lkdGg6MH0pO2NvbnN0IG49dGhpc1tyLiRnZXRUZW1wbGF0ZVJvb3RdKCksbD1uW3IuJGV4dHJhXS5ub0xheW91dEZhaWx1cmUsaD10aGlzW3IuJGlzU3BsaXR0YWJsZV0oKTtofHxzZXRGaXJzdFVuc3BsaXR0YWJsZSh0aGlzKTtpZighKDAsaS5jaGVja0RpbWVuc2lvbnMpKHRoaXMsZSkpcmV0dXJuIG8uSFRNTFJlc3VsdC5GQUlMVVJFO2NvbnN0IHU9bmV3IFNldChbImFyZWEiLCJkcmF3IiwiZXhjbEdyb3VwIiwiZmllbGQiLCJzdWJmb3JtIiwic3ViZm9ybVNldCJdKTtpZih0aGlzLmxheW91dC5pbmNsdWRlcygicm93Iikpe2NvbnN0IGU9dGhpc1tyLiRnZXRTdWJmb3JtUGFyZW50XSgpLmNvbHVtbldpZHRocztpZihBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aD4wKXt0aGlzW3IuJGV4dHJhXS5jb2x1bW5XaWR0aHM9ZTt0aGlzW3IuJGV4dHJhXS5jdXJyZW50Q29sdW1uPTB9fWNvbnN0IGQ9KDAscy50b1N0eWxlKSh0aGlzLCJhbmNob3JUeXBlIiwiZGltZW5zaW9ucyIsInBvc2l0aW9uIiwicHJlc2VuY2UiLCJib3JkZXIiLCJtYXJnaW4iLCJoQWxpZ24iKSxmPVsieGZhU3ViZm9ybSJdLGc9KDAscy5sYXlvdXRDbGFzcykodGhpcyk7ZyYmZi5wdXNoKGcpO2Euc3R5bGU9ZDthLmNsYXNzPWY7dGhpcy5uYW1lJiYoYS54ZmFOYW1lPXRoaXMubmFtZSk7aWYodGhpcy5vdmVyZmxvdyl7Y29uc3QgdD10aGlzLm92ZXJmbG93W3IuJGdldEV4dHJhXSgpO2lmKHQuYWRkTGVhZGVyKXt0LmFkZExlYWRlcj0hMTtoYW5kbGVPdmVyZmxvdyh0aGlzLHQubGVhZGVyLGUpfX10aGlzW3IuJHB1c2hQYXJhXSgpO2NvbnN0IHA9ImxyLXRiIj09PXRoaXMubGF5b3V0fHwicmwtdGIiPT09dGhpcy5sYXlvdXQsbT1wPzI6MTtmb3IoO3RoaXNbci4kZXh0cmFdLmF0dGVtcHQ8bTt0aGlzW3IuJGV4dHJhXS5hdHRlbXB0Kyspe3AmJjE9PT10aGlzW3IuJGV4dHJhXS5hdHRlbXB0JiYodGhpc1tyLiRleHRyYV0ubnVtYmVySW5MaW5lPTApO2NvbnN0IGU9dGhpc1tyLiRjaGlsZHJlblRvSFRNTF0oe2ZpbHRlcjp1LGluY2x1ZGU6ITB9KTtpZihlLnN1Y2Nlc3MpYnJlYWs7aWYoZS5pc0JyZWFrKCkpe3RoaXNbci4kcG9wUGFyYV0oKTtyZXR1cm4gZX1pZihwJiYwPT09dGhpc1tyLiRleHRyYV0uYXR0ZW1wdCYmMD09PXRoaXNbci4kZXh0cmFdLm51bWJlckluTGluZSYmIW5bci4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZSl7dGhpc1tyLiRleHRyYV0uYXR0ZW1wdD1tO2JyZWFrfX10aGlzW3IuJHBvcFBhcmFdKCk7aHx8dW5zZXRGaXJzdFVuc3BsaXR0YWJsZSh0aGlzKTtuW3IuJGV4dHJhXS5ub0xheW91dEZhaWx1cmU9bDtpZih0aGlzW3IuJGV4dHJhXS5hdHRlbXB0PT09bSl7dGhpcy5vdmVyZmxvdyYmKHRoaXNbci4kZ2V0VGVtcGxhdGVSb290XSgpW3IuJGV4dHJhXS5vdmVyZmxvd05vZGU9dGhpcy5vdmVyZmxvdyk7aHx8ZGVsZXRlIHRoaXNbci4kZXh0cmFdO3JldHVybiBvLkhUTUxSZXN1bHQuRkFJTFVSRX1pZih0aGlzLm92ZXJmbG93KXtjb25zdCB0PXRoaXMub3ZlcmZsb3dbci4kZ2V0RXh0cmFdKCk7aWYodC5hZGRUcmFpbGVyKXt0LmFkZFRyYWlsZXI9ITE7aGFuZGxlT3ZlcmZsb3codGhpcyx0LnRyYWlsZXIsZSl9fWxldCBiPTAseT0wO2lmKHRoaXMubWFyZ2luKXtiPXRoaXMubWFyZ2luLmxlZnRJbnNldCt0aGlzLm1hcmdpbi5yaWdodEluc2V0O3k9dGhpcy5tYXJnaW4udG9wSW5zZXQrdGhpcy5tYXJnaW4uYm90dG9tSW5zZXR9Y29uc3Qgdz1NYXRoLm1heCh0aGlzW3IuJGV4dHJhXS53aWR0aCtiLHRoaXMud3x8MCksUz1NYXRoLm1heCh0aGlzW3IuJGV4dHJhXS5oZWlnaHQreSx0aGlzLmh8fDApLHg9W3RoaXMueCx0aGlzLnksdyxTXTsiIj09PXRoaXMudyYmKGQud2lkdGg9KDAscy5tZWFzdXJlVG9TdHJpbmcpKHcpKTsiIj09PXRoaXMuaCYmKGQuaGVpZ2h0PSgwLHMubWVhc3VyZVRvU3RyaW5nKShTKSk7aWYoKCIwcHgiPT09ZC53aWR0aHx8IjBweCI9PT1kLmhlaWdodCkmJjA9PT10Lmxlbmd0aClyZXR1cm4gby5IVE1MUmVzdWx0LkVNUFRZO2NvbnN0IGs9e25hbWU6ImRpdiIsYXR0cmlidXRlczphLGNoaWxkcmVuOnR9O2FwcGx5QXNzaXN0KHRoaXMsYSk7Y29uc3QgQz1vLkhUTUxSZXN1bHQuc3VjY2VzcygoMCxzLmNyZWF0ZVdyYXBwZXIpKHRoaXMsaykseCk7aWYodGhpcy5icmVha0FmdGVyLmNoaWxkcmVuLmxlbmd0aD49MSl7Y29uc3QgZT10aGlzLmJyZWFrQWZ0ZXIuY2hpbGRyZW5bMF07aWYoaGFuZGxlQnJlYWsoZSkpe3RoaXNbci4kZXh0cmFdLmFmdGVyQnJlYWtBZnRlcj1DO3JldHVybiBvLkhUTUxSZXN1bHQuYnJlYWtOb2RlKGUpfX1kZWxldGUgdGhpc1tyLiRleHRyYV07cmV0dXJuIEN9fWNsYXNzIFN1YmZvcm1TZXQgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJzdWJmb3JtU2V0IiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnJlbGF0aW9uPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnJlbGF0aW9uLFsib3JkZXJlZCIsImNob2ljZSIsInVub3JkZXJlZCJdKTt0aGlzLnJlbGV2YW50PSgwLG8uZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmJvb2tlbmQ9bnVsbDt0aGlzLmJyZWFrPW51bGw7dGhpcy5kZXNjPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm9jY3VyPW51bGw7dGhpcy5vdmVyZmxvdz1udWxsO3RoaXMuYnJlYWtBZnRlcj1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmJyZWFrQmVmb3JlPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuc3ViZm9ybT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnN1YmZvcm1TZXQ9bmV3IHIuWEZBT2JqZWN0QXJyYXl9KltyLiRnZXRDb250YWluZWRDaGlsZHJlbl0oKXt5aWVsZCpnZXRDb250YWluZWRDaGlsZHJlbih0aGlzKX1bci4kZ2V0U3ViZm9ybVBhcmVudF0oKXtsZXQgZT10aGlzW3IuJGdldFBhcmVudF0oKTtmb3IoOyEoZSBpbnN0YW5jZW9mIFN1YmZvcm0pOyllPWVbci4kZ2V0UGFyZW50XSgpO3JldHVybiBlfVtyLiRpc0JpbmRhYmxlXSgpe3JldHVybiEwfX1jbGFzcyBTdWJqZWN0RE4gZXh0ZW5kcyByLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwic3ViamVjdEROIik7dGhpcy5kZWxpbWl0ZXI9ZS5kZWxpbWl0ZXJ8fCIsIjt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bci4kZmluYWxpemVdKCl7dGhpc1tyLiRjb250ZW50XT1uZXcgTWFwKHRoaXNbci4kY29udGVudF0uc3BsaXQodGhpcy5kZWxpbWl0ZXIpLm1hcCgoZT0+eyhlPWUuc3BsaXQoIj0iLDIpKVswXT1lWzBdLnRyaW0oKTtyZXR1cm4gZX0pKSl9fWNsYXNzIFN1YmplY3RETnMgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJzdWJqZWN0RE5zIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuc3ViamVjdEROPW5ldyByLlhGQU9iamVjdEFycmF5fX1jbGFzcyBTdWJtaXQgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJzdWJtaXQiLCEwKTt0aGlzLmVtYmVkUERGPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5lbWJlZFBERixkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMuZm9ybWF0PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmZvcm1hdCxbInhkcCIsImZvcm1kYXRhIiwicGRmIiwidXJsZW5jb2RlZCIsInhmZCIsInhtbCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudGFyZ2V0PWUudGFyZ2V0fHwiIjt0aGlzLnRleHRFbmNvZGluZz0oMCxvLmdldEtleXdvcmQpKHtkYXRhOmUudGV4dEVuY29kaW5nP2UudGV4dEVuY29kaW5nLnRvTG93ZXJDYXNlKCk6IiIsZGVmYXVsdFZhbHVlOiIiLHZhbGlkYXRlOmU9PlsidXRmLTgiLCJiaWctZml2ZSIsImZvbnRzcGVjaWZpYyIsImdiayIsImdiLTE4MDMwIiwiZ2ItMjMxMiIsImtzYy01NjAxIiwibm9uZSIsInNoaWZ0LWppcyIsInVjcy0yIiwidXRmLTE2Il0uaW5jbHVkZXMoZSl8fGUubWF0Y2goL2lzby04ODU5LVxkezJ9Lyl9KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy54ZHBDb250ZW50PWUueGRwQ29udGVudHx8IiI7dGhpcy5lbmNyeXB0PW51bGw7dGhpcy5lbmNyeXB0RGF0YT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnNpZ25EYXRhPW5ldyByLlhGQU9iamVjdEFycmF5fX1jbGFzcyBUZW1wbGF0ZSBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInRlbXBsYXRlIiwhMCk7dGhpcy5iYXNlUHJvZmlsZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5iYXNlUHJvZmlsZSxbImZ1bGwiLCJpbnRlcmFjdGl2ZUZvcm1zIl0pO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5zdWJmb3JtPW5ldyByLlhGQU9iamVjdEFycmF5fVtyLiRmaW5hbGl6ZV0oKXswPT09dGhpcy5zdWJmb3JtLmNoaWxkcmVuLmxlbmd0aCYmKDAsYy53YXJuKSgiWEZBIC0gTm8gc3ViZm9ybXMgaW4gdGVtcGxhdGUgbm9kZS4iKTt0aGlzLnN1YmZvcm0uY2hpbGRyZW4ubGVuZ3RoPj0yJiYoMCxjLndhcm4pKCJYRkEgLSBTZXZlcmFsIHN1YmZvcm1zIGluIHRlbXBsYXRlIG5vZGU6IHBsZWFzZSBmaWxlIGEgYnVnLiIpO3RoaXNbci4kdGFiSW5kZXhdPTVlM31bci4kaXNTcGxpdHRhYmxlXSgpe3JldHVybiEwfVtyLiRzZWFyY2hOb2RlXShlLHQpe3JldHVybiBlLnN0YXJ0c1dpdGgoIiMiKT9bdGhpc1tyLiRpZHNdLmdldChlLnNsaWNlKDEpKV06KDAsdS5zZWFyY2hOb2RlKSh0aGlzLHQsZSwhMCwhMCl9KltyLiR0b1BhZ2VzXSgpe2lmKCF0aGlzLnN1YmZvcm0uY2hpbGRyZW4ubGVuZ3RoKXJldHVybiBvLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixjaGlsZHJlbjpbXX0pO3RoaXNbci4kZXh0cmFdPXtvdmVyZmxvd05vZGU6bnVsbCxmaXJzdFVuc3BsaXR0YWJsZTpudWxsLGN1cnJlbnRDb250ZW50QXJlYTpudWxsLGN1cnJlbnRQYWdlQXJlYTpudWxsLG5vTGF5b3V0RmFpbHVyZTohMSxwYWdlTnVtYmVyOjEscGFnZVBvc2l0aW9uOiJmaXJzdCIsb2RkT3JFdmVuOiJvZGQiLGJsYW5rT3JOb3RCbGFuazoibm9uQmxhbmsiLHBhcmFTdGFjazpbXX07Y29uc3QgZT10aGlzLnN1YmZvcm0uY2hpbGRyZW5bMF07ZS5wYWdlU2V0W3IuJGNsZWFuUGFnZV0oKTtjb25zdCB0PWUucGFnZVNldC5wYWdlQXJlYS5jaGlsZHJlbixhPXtuYW1lOiJkaXYiLGNoaWxkcmVuOltdfTtsZXQgbj1udWxsLGk9bnVsbCxzPW51bGw7aWYoZS5icmVha0JlZm9yZS5jaGlsZHJlbi5sZW5ndGg+PTEpe2k9ZS5icmVha0JlZm9yZS5jaGlsZHJlblswXTtzPWkudGFyZ2V0fWVsc2UgaWYoZS5zdWJmb3JtLmNoaWxkcmVuLmxlbmd0aD49MSYmZS5zdWJmb3JtLmNoaWxkcmVuWzBdLmJyZWFrQmVmb3JlLmNoaWxkcmVuLmxlbmd0aD49MSl7aT1lLnN1YmZvcm0uY2hpbGRyZW5bMF0uYnJlYWtCZWZvcmUuY2hpbGRyZW5bMF07cz1pLnRhcmdldH1lbHNlIGlmKGUuYnJlYWsmJmUuYnJlYWsuYmVmb3JlVGFyZ2V0KXtpPWUuYnJlYWs7cz1pLmJlZm9yZVRhcmdldH1lbHNlIGlmKGUuc3ViZm9ybS5jaGlsZHJlbi5sZW5ndGg+PTEmJmUuc3ViZm9ybS5jaGlsZHJlblswXS5icmVhayYmZS5zdWJmb3JtLmNoaWxkcmVuWzBdLmJyZWFrLmJlZm9yZVRhcmdldCl7aT1lLnN1YmZvcm0uY2hpbGRyZW5bMF0uYnJlYWs7cz1pLmJlZm9yZVRhcmdldH1pZihpKXtjb25zdCBlPXRoaXNbci4kc2VhcmNoTm9kZV0ocyxpW3IuJGdldFBhcmVudF0oKSk7aWYoZSBpbnN0YW5jZW9mIFBhZ2VBcmVhKXtuPWU7aVtyLiRleHRyYV09e319fW58fChuPXRbMF0pO25bci4kZXh0cmFdPXtudW1iZXJPZlVzZToxfTtjb25zdCBsPW5bci4kZ2V0UGFyZW50XSgpO2xbci4kZXh0cmFdPXtudW1iZXJPZlVzZToxLHBhZ2VJbmRleDpsLnBhZ2VBcmVhLmNoaWxkcmVuLmluZGV4T2YobikscGFnZVNldEluZGV4OjB9O2xldCBoLHU9bnVsbCxkPW51bGwsZj0hMCxnPTAscD0wO2Zvcig7Oyl7aWYoZilnPTA7ZWxzZXthLmNoaWxkcmVuLnBvcCgpO2lmKDM9PSsrZyl7KDAsYy53YXJuKSgiWEZBIC0gU29tZXRoaW5nIGdvZXMgd3Jvbmc6IHBsZWFzZSBmaWxlIGEgYnVnLiIpO3JldHVybiBhfX1oPW51bGw7dGhpc1tyLiRleHRyYV0uY3VycmVudFBhZ2VBcmVhPW47Y29uc3QgdD1uW3IuJHRvSFRNTF0oKS5odG1sO2EuY2hpbGRyZW4ucHVzaCh0KTtpZih1KXt0aGlzW3IuJGV4dHJhXS5ub0xheW91dEZhaWx1cmU9ITA7dC5jaGlsZHJlbi5wdXNoKHVbci4kdG9IVE1MXShuW3IuJGV4dHJhXS5zcGFjZSkuaHRtbCk7dT1udWxsfWlmKGQpe3RoaXNbci4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT0hMDt0LmNoaWxkcmVuLnB1c2goZFtyLiR0b0hUTUxdKG5bci4kZXh0cmFdLnNwYWNlKS5odG1sKTtkPW51bGx9Y29uc3QgaT1uLmNvbnRlbnRBcmVhLmNoaWxkcmVuLHM9dC5jaGlsZHJlbi5maWx0ZXIoKGU9PmUuYXR0cmlidXRlcy5jbGFzcy5pbmNsdWRlcygieGZhQ29udGVudGFyZWEiKSkpO2Y9ITE7dGhpc1tyLiRleHRyYV0uZmlyc3RVbnNwbGl0dGFibGU9bnVsbDt0aGlzW3IuJGV4dHJhXS5ub0xheW91dEZhaWx1cmU9ITE7Y29uc3QgZmx1c2g9dD0+e2NvbnN0IGE9ZVtyLiRmbHVzaEhUTUxdKCk7aWYoYSl7Zj1mfHxhLmNoaWxkcmVuJiYwIT09YS5jaGlsZHJlbi5sZW5ndGg7c1t0XS5jaGlsZHJlbi5wdXNoKGEpfX07Zm9yKGxldCB0PXAsbj1pLmxlbmd0aDt0PG47dCsrKXtjb25zdCBuPXRoaXNbci4kZXh0cmFdLmN1cnJlbnRDb250ZW50QXJlYT1pW3RdLG89e3dpZHRoOm4udyxoZWlnaHQ6bi5ofTtwPTA7aWYodSl7c1t0XS5jaGlsZHJlbi5wdXNoKHVbci4kdG9IVE1MXShvKS5odG1sKTt1PW51bGx9aWYoZCl7c1t0XS5jaGlsZHJlbi5wdXNoKGRbci4kdG9IVE1MXShvKS5odG1sKTtkPW51bGx9Y29uc3QgYz1lW3IuJHRvSFRNTF0obyk7aWYoYy5zdWNjZXNzKXtpZihjLmh0bWwpe2Y9Znx8Yy5odG1sLmNoaWxkcmVuJiYwIT09Yy5odG1sLmNoaWxkcmVuLmxlbmd0aDtzW3RdLmNoaWxkcmVuLnB1c2goYy5odG1sKX1lbHNlIWYmJmEuY2hpbGRyZW4ubGVuZ3RoPjEmJmEuY2hpbGRyZW4ucG9wKCk7cmV0dXJuIGF9aWYoYy5pc0JyZWFrKCkpe2NvbnN0IGU9Yy5icmVha05vZGU7Zmx1c2godCk7aWYoImF1dG8iPT09ZS50YXJnZXRUeXBlKWNvbnRpbnVlO2lmKGUubGVhZGVyKXt1PXRoaXNbci4kc2VhcmNoTm9kZV0oZS5sZWFkZXIsZVtyLiRnZXRQYXJlbnRdKCkpO3U9dT91WzBdOm51bGx9aWYoZS50cmFpbGVyKXtkPXRoaXNbci4kc2VhcmNoTm9kZV0oZS50cmFpbGVyLGVbci4kZ2V0UGFyZW50XSgpKTtkPWQ/ZFswXTpudWxsfWlmKCJwYWdlQXJlYSI9PT1lLnRhcmdldFR5cGUpe2g9ZVtyLiRleHRyYV0udGFyZ2V0O3Q9MS8wfWVsc2UgaWYoZVtyLiRleHRyYV0udGFyZ2V0KXtoPWVbci4kZXh0cmFdLnRhcmdldDtwPWVbci4kZXh0cmFdLmluZGV4KzE7dD0xLzB9ZWxzZSB0PWVbci4kZXh0cmFdLmluZGV4fWVsc2UgaWYodGhpc1tyLiRleHRyYV0ub3ZlcmZsb3dOb2RlKXtjb25zdCBlPXRoaXNbci4kZXh0cmFdLm92ZXJmbG93Tm9kZTt0aGlzW3IuJGV4dHJhXS5vdmVyZmxvd05vZGU9bnVsbDtjb25zdCBhPWVbci4kZ2V0RXh0cmFdKCksbj1hLnRhcmdldDthLmFkZExlYWRlcj1udWxsIT09YS5sZWFkZXI7YS5hZGRUcmFpbGVyPW51bGwhPT1hLnRyYWlsZXI7Zmx1c2godCk7Y29uc3Qgcz10O3Q9MS8wO2lmKG4gaW5zdGFuY2VvZiBQYWdlQXJlYSloPW47ZWxzZSBpZihuIGluc3RhbmNlb2YgQ29udGVudEFyZWEpe2NvbnN0IGU9aS5pbmRleE9mKG4pO2lmKC0xIT09ZSllPnM/dD1lLTE6cD1lO2Vsc2V7aD1uW3IuJGdldFBhcmVudF0oKTtwPWguY29udGVudEFyZWEuY2hpbGRyZW4uaW5kZXhPZihuKX19fWVsc2UgZmx1c2godCl9dGhpc1tyLiRleHRyYV0ucGFnZU51bWJlcis9MTtoJiYoaFtyLiRpc1VzYWJsZV0oKT9oW3IuJGV4dHJhXS5udW1iZXJPZlVzZSs9MTpoPW51bGwpO249aHx8bltyLiRnZXROZXh0UGFnZV0oKTt5aWVsZCBudWxsfX19dC5UZW1wbGF0ZT1UZW1wbGF0ZTtjbGFzcyBUZXh0IGV4dGVuZHMgci5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInRleHQiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubWF4Q2hhcnM9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLm1heENoYXJzLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PmU+PTB9KTt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnJpZD1lLnJpZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtyLiRhY2NlcHRXaGl0ZXNwYWNlXSgpe3JldHVybiEwfVtyLiRvbkNoaWxkXShlKXtpZihlW3IuJG5hbWVzcGFjZUlkXT09PW4uTmFtZXNwYWNlSWRzLnhodG1sLmlkKXt0aGlzW3IuJGNvbnRlbnRdPWU7cmV0dXJuITB9KDAsYy53YXJuKShgWEZBIC0gSW52YWxpZCBjb250ZW50IGluIFRleHQ6ICR7ZVtyLiRub2RlTmFtZV19LmApO3JldHVybiExfVtyLiRvblRleHRdKGUpe3RoaXNbci4kY29udGVudF1pbnN0YW5jZW9mIHIuWEZBT2JqZWN0fHxzdXBlcltyLiRvblRleHRdKGUpfVtyLiRmaW5hbGl6ZV0oKXsic3RyaW5nIj09dHlwZW9mIHRoaXNbci4kY29udGVudF0mJih0aGlzW3IuJGNvbnRlbnRdPXRoaXNbci4kY29udGVudF0ucmVwbGFjZSgvXHJcbi9nLCJcbiIpKX1bci4kZ2V0RXh0cmFdKCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0aGlzW3IuJGNvbnRlbnRdP3RoaXNbci4kY29udGVudF0uc3BsaXQoL1tcdTIwMjlcdTIwMjhcbl0vKS5yZWR1Y2UoKChlLHQpPT57dCYmZS5wdXNoKHQpO3JldHVybiBlfSksW10pLmpvaW4oIlxuIik6dGhpc1tyLiRjb250ZW50XVtyLiR0ZXh0XSgpfVtyLiR0b0hUTUxdKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdGhpc1tyLiRjb250ZW50XSl7Y29uc3QgZT12YWx1ZVRvSHRtbCh0aGlzW3IuJGNvbnRlbnRdKS5odG1sO2lmKHRoaXNbci4kY29udGVudF0uaW5jbHVkZXMoIlx1MjAyOSIpKXtlLm5hbWU9ImRpdiI7ZS5jaGlsZHJlbj1bXTt0aGlzW3IuJGNvbnRlbnRdLnNwbGl0KCJcdTIwMjkiKS5tYXAoKGU9PmUuc3BsaXQoL1tcdTIwMjhcbl0vKS5yZWR1Y2UoKChlLHQpPT57ZS5wdXNoKHtuYW1lOiJzcGFuIix2YWx1ZTp0fSx7bmFtZToiYnIifSk7cmV0dXJuIGV9KSxbXSkpKS5mb3JFYWNoKCh0PT57ZS5jaGlsZHJlbi5wdXNoKHtuYW1lOiJwIixjaGlsZHJlbjp0fSl9KSl9ZWxzZSBpZigvW1x1MjAyOFxuXS8udGVzdCh0aGlzW3IuJGNvbnRlbnRdKSl7ZS5uYW1lPSJkaXYiO2UuY2hpbGRyZW49W107dGhpc1tyLiRjb250ZW50XS5zcGxpdCgvW1x1MjAyOFxuXS8pLmZvckVhY2goKHQ9PntlLmNoaWxkcmVuLnB1c2goe25hbWU6InNwYW4iLHZhbHVlOnR9LHtuYW1lOiJiciJ9KX0pKX1yZXR1cm4gby5IVE1MUmVzdWx0LnN1Y2Nlc3MoZSl9cmV0dXJuIHRoaXNbci4kY29udGVudF1bci4kdG9IVE1MXShlKX19dC5UZXh0PVRleHQ7Y2xhc3MgVGV4dEVkaXQgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJ0ZXh0RWRpdCIsITApO3RoaXMuYWxsb3dSaWNoVGV4dD0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUuYWxsb3dSaWNoVGV4dCxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMuaFNjcm9sbFBvbGljeT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5oU2Nyb2xsUG9saWN5LFsiYXV0byIsIm9mZiIsIm9uIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5tdWx0aUxpbmU9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLm11bHRpTGluZSxkZWZhdWx0VmFsdWU6IiIsdmFsaWRhdGU6ZT0+MD09PWV8fDE9PT1lfSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMudlNjcm9sbFBvbGljeT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS52U2Nyb2xsUG9saWN5LFsiYXV0byIsIm9mZiIsIm9uIl0pO3RoaXMuYm9yZGVyPW51bGw7dGhpcy5jb21iPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm1hcmdpbj1udWxsfVtyLiR0b0hUTUxdKGUpe2NvbnN0IHQ9KDAscy50b1N0eWxlKSh0aGlzLCJib3JkZXIiLCJmb250IiwibWFyZ2luIik7bGV0IGE7Y29uc3Qgbj10aGlzW3IuJGdldFBhcmVudF0oKVtyLiRnZXRQYXJlbnRdKCk7IiI9PT10aGlzLm11bHRpTGluZSYmKHRoaXMubXVsdGlMaW5lPW4gaW5zdGFuY2VvZiBEcmF3PzE6MCk7YT0xPT09dGhpcy5tdWx0aUxpbmU/e25hbWU6InRleHRhcmVhIixhdHRyaWJ1dGVzOntkYXRhSWQ6bltyLiRkYXRhXSYmbltyLiRkYXRhXVtyLiR1aWRdfHxuW3IuJHVpZF0sZmllbGRJZDpuW3IuJHVpZF0sY2xhc3M6WyJ4ZmFUZXh0ZmllbGQiXSxzdHlsZTp0LCJhcmlhLWxhYmVsIjphcmlhTGFiZWwobiksImFyaWEtcmVxdWlyZWQiOiExfX06e25hbWU6ImlucHV0IixhdHRyaWJ1dGVzOnt0eXBlOiJ0ZXh0IixkYXRhSWQ6bltyLiRkYXRhXSYmbltyLiRkYXRhXVtyLiR1aWRdfHxuW3IuJHVpZF0sZmllbGRJZDpuW3IuJHVpZF0sY2xhc3M6WyJ4ZmFUZXh0ZmllbGQiXSxzdHlsZTp0LCJhcmlhLWxhYmVsIjphcmlhTGFiZWwobiksImFyaWEtcmVxdWlyZWQiOiExfX07aWYoaXNSZXF1aXJlZChuKSl7YS5hdHRyaWJ1dGVzWyJhcmlhLXJlcXVpcmVkIl09ITA7YS5hdHRyaWJ1dGVzLnJlcXVpcmVkPSEwfXJldHVybiBvLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToibGFiZWwiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhTGFiZWwiXX0sY2hpbGRyZW46W2FdfSl9fWNsYXNzIFRpbWUgZXh0ZW5kcyByLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJ0aW1lIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W3IuJGZpbmFsaXplXSgpe2NvbnN0IGU9dGhpc1tyLiRjb250ZW50XS50cmltKCk7dGhpc1tyLiRjb250ZW50XT1lP25ldyBEYXRlKGUpOm51bGx9W3IuJHRvSFRNTF0oZSl7cmV0dXJuIHZhbHVlVG9IdG1sKHRoaXNbci4kY29udGVudF0/dGhpc1tyLiRjb250ZW50XS50b1N0cmluZygpOiIiKX19Y2xhc3MgVGltZVN0YW1wIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwidGltZVN0YW1wIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnNlcnZlcj1lLnNlcnZlcnx8IiI7dGhpcy50eXBlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgVG9vbFRpcCBleHRlbmRzIHIuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInRvb2xUaXAiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucmlkPWUucmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFRyYXZlcnNhbCBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInRyYXZlcnNhbCIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy50cmF2ZXJzZT1uZXcgci5YRkFPYmplY3RBcnJheX19Y2xhc3MgVHJhdmVyc2UgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJ0cmF2ZXJzZSIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5vcGVyYXRpb249KDAsby5nZXRTdHJpbmdPcHRpb24pKGUub3BlcmF0aW9uLFsibmV4dCIsImJhY2siLCJkb3duIiwiZmlyc3QiLCJsZWZ0IiwicmlnaHQiLCJ1cCJdKTt0aGlzLnJlZj1lLnJlZnx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5zY3JpcHQ9bnVsbH1nZXQgbmFtZSgpe3JldHVybiB0aGlzLm9wZXJhdGlvbn1bci4kaXNUcmFuc3BhcmVudF0oKXtyZXR1cm4hMX19Y2xhc3MgVWkgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJ1aSIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5waWN0dXJlPW51bGw7dGhpcy5iYXJjb2RlPW51bGw7dGhpcy5idXR0b249bnVsbDt0aGlzLmNoZWNrQnV0dG9uPW51bGw7dGhpcy5jaG9pY2VMaXN0PW51bGw7dGhpcy5kYXRlVGltZUVkaXQ9bnVsbDt0aGlzLmRlZmF1bHRVaT1udWxsO3RoaXMuaW1hZ2VFZGl0PW51bGw7dGhpcy5udW1lcmljRWRpdD1udWxsO3RoaXMucGFzc3dvcmRFZGl0PW51bGw7dGhpcy5zaWduYXR1cmU9bnVsbDt0aGlzLnRleHRFZGl0PW51bGx9W3IuJGdldEV4dHJhXSgpe2lmKHZvaWQgMD09PXRoaXNbci4kZXh0cmFdKXtmb3IoY29uc3QgZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSl7aWYoImV4dHJhcyI9PT1lfHwicGljdHVyZSI9PT1lKWNvbnRpbnVlO2NvbnN0IHQ9dGhpc1tlXTtpZih0IGluc3RhbmNlb2Ygci5YRkFPYmplY3Qpe3RoaXNbci4kZXh0cmFdPXQ7cmV0dXJuIHR9fXRoaXNbci4kZXh0cmFdPW51bGx9cmV0dXJuIHRoaXNbci4kZXh0cmFdfVtyLiR0b0hUTUxdKGUpe2NvbnN0IHQ9dGhpc1tyLiRnZXRFeHRyYV0oKTtyZXR1cm4gdD90W3IuJHRvSFRNTF0oZSk6by5IVE1MUmVzdWx0LkVNUFRZfX1jbGFzcyBWYWxpZGF0ZSBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInZhbGlkYXRlIiwhMCk7dGhpcy5mb3JtYXRUZXN0PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmZvcm1hdFRlc3QsWyJ3YXJuaW5nIiwiZGlzYWJsZWQiLCJlcnJvciJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubnVsbFRlc3Q9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUubnVsbFRlc3QsWyJkaXNhYmxlZCIsImVycm9yIiwid2FybmluZyJdKTt0aGlzLnNjcmlwdFRlc3Q9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuc2NyaXB0VGVzdCxbImVycm9yIiwiZGlzYWJsZWQiLCJ3YXJuaW5nIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsO3RoaXMubWVzc2FnZT1udWxsO3RoaXMucGljdHVyZT1udWxsO3RoaXMuc2NyaXB0PW51bGx9fWNsYXNzIFZhbHVlIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwidmFsdWUiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMub3ZlcnJpZGU9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLm92ZXJyaWRlLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy5yZWxldmFudD0oMCxvLmdldFJlbGV2YW50KShlLnJlbGV2YW50KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5hcmM9bnVsbDt0aGlzLmJvb2xlYW49bnVsbDt0aGlzLmRhdGU9bnVsbDt0aGlzLmRhdGVUaW1lPW51bGw7dGhpcy5kZWNpbWFsPW51bGw7dGhpcy5leERhdGE9bnVsbDt0aGlzLmZsb2F0PW51bGw7dGhpcy5pbWFnZT1udWxsO3RoaXMuaW50ZWdlcj1udWxsO3RoaXMubGluZT1udWxsO3RoaXMucmVjdGFuZ2xlPW51bGw7dGhpcy50ZXh0PW51bGw7dGhpcy50aW1lPW51bGx9W3IuJHNldFZhbHVlXShlKXtjb25zdCB0PXRoaXNbci4kZ2V0UGFyZW50XSgpO2lmKHQgaW5zdGFuY2VvZiBGaWVsZCYmdC51aSYmdC51aS5pbWFnZUVkaXQpe2lmKCF0aGlzLmltYWdlKXt0aGlzLmltYWdlPW5ldyBJbWFnZSh7fSk7dGhpc1tyLiRhcHBlbmRDaGlsZF0odGhpcy5pbWFnZSl9dGhpcy5pbWFnZVtyLiRjb250ZW50XT1lW3IuJGNvbnRlbnRdO3JldHVybn1jb25zdCBhPWVbci4kbm9kZU5hbWVdO2lmKG51bGw9PT10aGlzW2FdKXtmb3IoY29uc3QgZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSl7Y29uc3QgdD10aGlzW2VdO2lmKHQgaW5zdGFuY2VvZiByLlhGQU9iamVjdCl7dGhpc1tlXT1udWxsO3RoaXNbci4kcmVtb3ZlQ2hpbGRdKHQpfX10aGlzW2Vbci4kbm9kZU5hbWVdXT1lO3RoaXNbci4kYXBwZW5kQ2hpbGRdKGUpfWVsc2UgdGhpc1thXVtyLiRjb250ZW50XT1lW3IuJGNvbnRlbnRdfVtyLiR0ZXh0XSgpe2lmKHRoaXMuZXhEYXRhKXJldHVybiJzdHJpbmciPT10eXBlb2YgdGhpcy5leERhdGFbci4kY29udGVudF0/dGhpcy5leERhdGFbci4kY29udGVudF0udHJpbSgpOnRoaXMuZXhEYXRhW3IuJGNvbnRlbnRdW3IuJHRleHRdKCkudHJpbSgpO2Zvcihjb25zdCBlIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKXtpZigiaW1hZ2UiPT09ZSljb250aW51ZTtjb25zdCB0PXRoaXNbZV07aWYodCBpbnN0YW5jZW9mIHIuWEZBT2JqZWN0KXJldHVybih0W3IuJGNvbnRlbnRdfHwiIikudG9TdHJpbmcoKS50cmltKCl9cmV0dXJuIG51bGx9W3IuJHRvSFRNTF0oZSl7Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2NvbnN0IGE9dGhpc1t0XTtpZihhIGluc3RhbmNlb2Ygci5YRkFPYmplY3QpcmV0dXJuIGFbci4kdG9IVE1MXShlKX1yZXR1cm4gby5IVE1MUmVzdWx0LkVNUFRZfX10LlZhbHVlPVZhbHVlO2NsYXNzIFZhcmlhYmxlcyBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInZhcmlhYmxlcyIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuYm9vbGVhbj1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmRhdGU9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlVGltZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmRlY2ltYWw9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5leERhdGE9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5mbG9hdD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmltYWdlPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuaW50ZWdlcj1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLm1hbmlmZXN0PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuc2NyaXB0PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMudGV4dD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnRpbWU9bmV3IHIuWEZBT2JqZWN0QXJyYXl9W3IuJGlzVHJhbnNwYXJlbnRdKCl7cmV0dXJuITB9fWNsYXNzIFRlbXBsYXRlTmFtZXNwYWNle3N0YXRpY1tuLiRidWlsZFhGQU9iamVjdF0oZSx0KXtpZihUZW1wbGF0ZU5hbWVzcGFjZS5oYXNPd25Qcm9wZXJ0eShlKSl7Y29uc3QgYT1UZW1wbGF0ZU5hbWVzcGFjZVtlXSh0KTthW3IuJHNldFNldEF0dHJpYnV0ZXNdKHQpO3JldHVybiBhfX1zdGF0aWMgYXBwZWFyYW5jZUZpbHRlcihlKXtyZXR1cm4gbmV3IEFwcGVhcmFuY2VGaWx0ZXIoZSl9c3RhdGljIGFyYyhlKXtyZXR1cm4gbmV3IEFyYyhlKX1zdGF0aWMgYXJlYShlKXtyZXR1cm4gbmV3IEFyZWEoZSl9c3RhdGljIGFzc2lzdChlKXtyZXR1cm4gbmV3IEFzc2lzdChlKX1zdGF0aWMgYmFyY29kZShlKXtyZXR1cm4gbmV3IEJhcmNvZGUoZSl9c3RhdGljIGJpbmQoZSl7cmV0dXJuIG5ldyBCaW5kKGUpfXN0YXRpYyBiaW5kSXRlbXMoZSl7cmV0dXJuIG5ldyBCaW5kSXRlbXMoZSl9c3RhdGljIGJvb2tlbmQoZSl7cmV0dXJuIG5ldyBCb29rZW5kKGUpfXN0YXRpYyBib29sZWFuKGUpe3JldHVybiBuZXcgQm9vbGVhbkVsZW1lbnQoZSl9c3RhdGljIGJvcmRlcihlKXtyZXR1cm4gbmV3IEJvcmRlcihlKX1zdGF0aWMgYnJlYWsoZSl7cmV0dXJuIG5ldyBCcmVhayhlKX1zdGF0aWMgYnJlYWtBZnRlcihlKXtyZXR1cm4gbmV3IEJyZWFrQWZ0ZXIoZSl9c3RhdGljIGJyZWFrQmVmb3JlKGUpe3JldHVybiBuZXcgQnJlYWtCZWZvcmUoZSl9c3RhdGljIGJ1dHRvbihlKXtyZXR1cm4gbmV3IEJ1dHRvbihlKX1zdGF0aWMgY2FsY3VsYXRlKGUpe3JldHVybiBuZXcgQ2FsY3VsYXRlKGUpfXN0YXRpYyBjYXB0aW9uKGUpe3JldHVybiBuZXcgQ2FwdGlvbihlKX1zdGF0aWMgY2VydGlmaWNhdGUoZSl7cmV0dXJuIG5ldyBDZXJ0aWZpY2F0ZShlKX1zdGF0aWMgY2VydGlmaWNhdGVzKGUpe3JldHVybiBuZXcgQ2VydGlmaWNhdGVzKGUpfXN0YXRpYyBjaGVja0J1dHRvbihlKXtyZXR1cm4gbmV3IENoZWNrQnV0dG9uKGUpfXN0YXRpYyBjaG9pY2VMaXN0KGUpe3JldHVybiBuZXcgQ2hvaWNlTGlzdChlKX1zdGF0aWMgY29sb3IoZSl7cmV0dXJuIG5ldyBDb2xvcihlKX1zdGF0aWMgY29tYihlKXtyZXR1cm4gbmV3IENvbWIoZSl9c3RhdGljIGNvbm5lY3QoZSl7cmV0dXJuIG5ldyBDb25uZWN0KGUpfXN0YXRpYyBjb250ZW50QXJlYShlKXtyZXR1cm4gbmV3IENvbnRlbnRBcmVhKGUpfXN0YXRpYyBjb3JuZXIoZSl7cmV0dXJuIG5ldyBDb3JuZXIoZSl9c3RhdGljIGRhdGUoZSl7cmV0dXJuIG5ldyBEYXRlRWxlbWVudChlKX1zdGF0aWMgZGF0ZVRpbWUoZSl7cmV0dXJuIG5ldyBEYXRlVGltZShlKX1zdGF0aWMgZGF0ZVRpbWVFZGl0KGUpe3JldHVybiBuZXcgRGF0ZVRpbWVFZGl0KGUpfXN0YXRpYyBkZWNpbWFsKGUpe3JldHVybiBuZXcgRGVjaW1hbChlKX1zdGF0aWMgZGVmYXVsdFVpKGUpe3JldHVybiBuZXcgRGVmYXVsdFVpKGUpfXN0YXRpYyBkZXNjKGUpe3JldHVybiBuZXcgRGVzYyhlKX1zdGF0aWMgZGlnZXN0TWV0aG9kKGUpe3JldHVybiBuZXcgRGlnZXN0TWV0aG9kKGUpfXN0YXRpYyBkaWdlc3RNZXRob2RzKGUpe3JldHVybiBuZXcgRGlnZXN0TWV0aG9kcyhlKX1zdGF0aWMgZHJhdyhlKXtyZXR1cm4gbmV3IERyYXcoZSl9c3RhdGljIGVkZ2UoZSl7cmV0dXJuIG5ldyBFZGdlKGUpfXN0YXRpYyBlbmNvZGluZyhlKXtyZXR1cm4gbmV3IEVuY29kaW5nKGUpfXN0YXRpYyBlbmNvZGluZ3MoZSl7cmV0dXJuIG5ldyBFbmNvZGluZ3MoZSl9c3RhdGljIGVuY3J5cHQoZSl7cmV0dXJuIG5ldyBFbmNyeXB0KGUpfXN0YXRpYyBlbmNyeXB0RGF0YShlKXtyZXR1cm4gbmV3IEVuY3J5cHREYXRhKGUpfXN0YXRpYyBlbmNyeXB0aW9uKGUpe3JldHVybiBuZXcgRW5jcnlwdGlvbihlKX1zdGF0aWMgZW5jcnlwdGlvbk1ldGhvZChlKXtyZXR1cm4gbmV3IEVuY3J5cHRpb25NZXRob2QoZSl9c3RhdGljIGVuY3J5cHRpb25NZXRob2RzKGUpe3JldHVybiBuZXcgRW5jcnlwdGlvbk1ldGhvZHMoZSl9c3RhdGljIGV2ZW50KGUpe3JldHVybiBuZXcgRXZlbnQoZSl9c3RhdGljIGV4RGF0YShlKXtyZXR1cm4gbmV3IEV4RGF0YShlKX1zdGF0aWMgZXhPYmplY3QoZSl7cmV0dXJuIG5ldyBFeE9iamVjdChlKX1zdGF0aWMgZXhjbEdyb3VwKGUpe3JldHVybiBuZXcgRXhjbEdyb3VwKGUpfXN0YXRpYyBleGVjdXRlKGUpe3JldHVybiBuZXcgRXhlY3V0ZShlKX1zdGF0aWMgZXh0cmFzKGUpe3JldHVybiBuZXcgRXh0cmFzKGUpfXN0YXRpYyBmaWVsZChlKXtyZXR1cm4gbmV3IEZpZWxkKGUpfXN0YXRpYyBmaWxsKGUpe3JldHVybiBuZXcgRmlsbChlKX1zdGF0aWMgZmlsdGVyKGUpe3JldHVybiBuZXcgRmlsdGVyKGUpfXN0YXRpYyBmbG9hdChlKXtyZXR1cm4gbmV3IEZsb2F0KGUpfXN0YXRpYyBmb250KGUpe3JldHVybiBuZXcgRm9udChlKX1zdGF0aWMgZm9ybWF0KGUpe3JldHVybiBuZXcgRm9ybWF0KGUpfXN0YXRpYyBoYW5kbGVyKGUpe3JldHVybiBuZXcgSGFuZGxlcihlKX1zdGF0aWMgaHlwaGVuYXRpb24oZSl7cmV0dXJuIG5ldyBIeXBoZW5hdGlvbihlKX1zdGF0aWMgaW1hZ2UoZSl7cmV0dXJuIG5ldyBJbWFnZShlKX1zdGF0aWMgaW1hZ2VFZGl0KGUpe3JldHVybiBuZXcgSW1hZ2VFZGl0KGUpfXN0YXRpYyBpbnRlZ2VyKGUpe3JldHVybiBuZXcgSW50ZWdlcihlKX1zdGF0aWMgaXNzdWVycyhlKXtyZXR1cm4gbmV3IElzc3VlcnMoZSl9c3RhdGljIGl0ZW1zKGUpe3JldHVybiBuZXcgSXRlbXMoZSl9c3RhdGljIGtlZXAoZSl7cmV0dXJuIG5ldyBLZWVwKGUpfXN0YXRpYyBrZXlVc2FnZShlKXtyZXR1cm4gbmV3IEtleVVzYWdlKGUpfXN0YXRpYyBsaW5lKGUpe3JldHVybiBuZXcgTGluZShlKX1zdGF0aWMgbGluZWFyKGUpe3JldHVybiBuZXcgTGluZWFyKGUpfXN0YXRpYyBsb2NrRG9jdW1lbnQoZSl7cmV0dXJuIG5ldyBMb2NrRG9jdW1lbnQoZSl9c3RhdGljIG1hbmlmZXN0KGUpe3JldHVybiBuZXcgTWFuaWZlc3QoZSl9c3RhdGljIG1hcmdpbihlKXtyZXR1cm4gbmV3IE1hcmdpbihlKX1zdGF0aWMgbWRwKGUpe3JldHVybiBuZXcgTWRwKGUpfXN0YXRpYyBtZWRpdW0oZSl7cmV0dXJuIG5ldyBNZWRpdW0oZSl9c3RhdGljIG1lc3NhZ2UoZSl7cmV0dXJuIG5ldyBNZXNzYWdlKGUpfXN0YXRpYyBudW1lcmljRWRpdChlKXtyZXR1cm4gbmV3IE51bWVyaWNFZGl0KGUpfXN0YXRpYyBvY2N1cihlKXtyZXR1cm4gbmV3IE9jY3VyKGUpfXN0YXRpYyBvaWQoZSl7cmV0dXJuIG5ldyBPaWQoZSl9c3RhdGljIG9pZHMoZSl7cmV0dXJuIG5ldyBPaWRzKGUpfXN0YXRpYyBvdmVyZmxvdyhlKXtyZXR1cm4gbmV3IE92ZXJmbG93KGUpfXN0YXRpYyBwYWdlQXJlYShlKXtyZXR1cm4gbmV3IFBhZ2VBcmVhKGUpfXN0YXRpYyBwYWdlU2V0KGUpe3JldHVybiBuZXcgUGFnZVNldChlKX1zdGF0aWMgcGFyYShlKXtyZXR1cm4gbmV3IFBhcmEoZSl9c3RhdGljIHBhc3N3b3JkRWRpdChlKXtyZXR1cm4gbmV3IFBhc3N3b3JkRWRpdChlKX1zdGF0aWMgcGF0dGVybihlKXtyZXR1cm4gbmV3IFBhdHRlcm4oZSl9c3RhdGljIHBpY3R1cmUoZSl7cmV0dXJuIG5ldyBQaWN0dXJlKGUpfXN0YXRpYyBwcm90byhlKXtyZXR1cm4gbmV3IFByb3RvKGUpfXN0YXRpYyByYWRpYWwoZSl7cmV0dXJuIG5ldyBSYWRpYWwoZSl9c3RhdGljIHJlYXNvbihlKXtyZXR1cm4gbmV3IFJlYXNvbihlKX1zdGF0aWMgcmVhc29ucyhlKXtyZXR1cm4gbmV3IFJlYXNvbnMoZSl9c3RhdGljIHJlY3RhbmdsZShlKXtyZXR1cm4gbmV3IFJlY3RhbmdsZShlKX1zdGF0aWMgcmVmKGUpe3JldHVybiBuZXcgUmVmRWxlbWVudChlKX1zdGF0aWMgc2NyaXB0KGUpe3JldHVybiBuZXcgU2NyaXB0KGUpfXN0YXRpYyBzZXRQcm9wZXJ0eShlKXtyZXR1cm4gbmV3IFNldFByb3BlcnR5KGUpfXN0YXRpYyBzaWduRGF0YShlKXtyZXR1cm4gbmV3IFNpZ25EYXRhKGUpfXN0YXRpYyBzaWduYXR1cmUoZSl7cmV0dXJuIG5ldyBTaWduYXR1cmUoZSl9c3RhdGljIHNpZ25pbmcoZSl7cmV0dXJuIG5ldyBTaWduaW5nKGUpfXN0YXRpYyBzb2xpZChlKXtyZXR1cm4gbmV3IFNvbGlkKGUpfXN0YXRpYyBzcGVhayhlKXtyZXR1cm4gbmV3IFNwZWFrKGUpfXN0YXRpYyBzdGlwcGxlKGUpe3JldHVybiBuZXcgU3RpcHBsZShlKX1zdGF0aWMgc3ViZm9ybShlKXtyZXR1cm4gbmV3IFN1YmZvcm0oZSl9c3RhdGljIHN1YmZvcm1TZXQoZSl7cmV0dXJuIG5ldyBTdWJmb3JtU2V0KGUpfXN0YXRpYyBzdWJqZWN0RE4oZSl7cmV0dXJuIG5ldyBTdWJqZWN0RE4oZSl9c3RhdGljIHN1YmplY3RETnMoZSl7cmV0dXJuIG5ldyBTdWJqZWN0RE5zKGUpfXN0YXRpYyBzdWJtaXQoZSl7cmV0dXJuIG5ldyBTdWJtaXQoZSl9c3RhdGljIHRlbXBsYXRlKGUpe3JldHVybiBuZXcgVGVtcGxhdGUoZSl9c3RhdGljIHRleHQoZSl7cmV0dXJuIG5ldyBUZXh0KGUpfXN0YXRpYyB0ZXh0RWRpdChlKXtyZXR1cm4gbmV3IFRleHRFZGl0KGUpfXN0YXRpYyB0aW1lKGUpe3JldHVybiBuZXcgVGltZShlKX1zdGF0aWMgdGltZVN0YW1wKGUpe3JldHVybiBuZXcgVGltZVN0YW1wKGUpfXN0YXRpYyB0b29sVGlwKGUpe3JldHVybiBuZXcgVG9vbFRpcChlKX1zdGF0aWMgdHJhdmVyc2FsKGUpe3JldHVybiBuZXcgVHJhdmVyc2FsKGUpfXN0YXRpYyB0cmF2ZXJzZShlKXtyZXR1cm4gbmV3IFRyYXZlcnNlKGUpfXN0YXRpYyB1aShlKXtyZXR1cm4gbmV3IFVpKGUpfXN0YXRpYyB2YWxpZGF0ZShlKXtyZXR1cm4gbmV3IFZhbGlkYXRlKGUpfXN0YXRpYyB2YWx1ZShlKXtyZXR1cm4gbmV3IFZhbHVlKGUpfXN0YXRpYyB2YXJpYWJsZXMoZSl7cmV0dXJuIG5ldyBWYXJpYWJsZXMoZSl9fXQuVGVtcGxhdGVOYW1lc3BhY2U9VGVtcGxhdGVOYW1lc3BhY2V9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5hZGRIVE1MPWZ1bmN0aW9uIGFkZEhUTUwoZSx0LGEpe2NvbnN0IGk9ZVtyLiRleHRyYV0scz1pLmF2YWlsYWJsZVNwYWNlLFtvLGMsbCxoXT1hO3N3aXRjaChlLmxheW91dCl7Y2FzZSJwb3NpdGlvbiI6aS53aWR0aD1NYXRoLm1heChpLndpZHRoLG8rbCk7aS5oZWlnaHQ9TWF0aC5tYXgoaS5oZWlnaHQsYytoKTtpLmNoaWxkcmVuLnB1c2godCk7YnJlYWs7Y2FzZSJsci10YiI6Y2FzZSJybC10YiI6aWYoIWkubGluZXx8MT09PWkuYXR0ZW1wdCl7aS5saW5lPWNyZWF0ZUxpbmUoZSxbXSk7aS5jaGlsZHJlbi5wdXNoKGkubGluZSk7aS5udW1iZXJJbkxpbmU9MH1pLm51bWJlckluTGluZSs9MTtpLmxpbmUuY2hpbGRyZW4ucHVzaCh0KTtpZigwPT09aS5hdHRlbXB0KXtpLmN1cnJlbnRXaWR0aCs9bDtpLmhlaWdodD1NYXRoLm1heChpLmhlaWdodCxpLnByZXZIZWlnaHQraCl9ZWxzZXtpLmN1cnJlbnRXaWR0aD1sO2kucHJldkhlaWdodD1pLmhlaWdodDtpLmhlaWdodCs9aDtpLmF0dGVtcHQ9MH1pLndpZHRoPU1hdGgubWF4KGkud2lkdGgsaS5jdXJyZW50V2lkdGgpO2JyZWFrO2Nhc2Uicmwtcm93IjpjYXNlInJvdyI6e2kuY2hpbGRyZW4ucHVzaCh0KTtpLndpZHRoKz1sO2kuaGVpZ2h0PU1hdGgubWF4KGkuaGVpZ2h0LGgpO2NvbnN0IGU9KDAsbi5tZWFzdXJlVG9TdHJpbmcpKGkuaGVpZ2h0KTtmb3IoY29uc3QgdCBvZiBpLmNoaWxkcmVuKXQuYXR0cmlidXRlcy5zdHlsZS5oZWlnaHQ9ZTticmVha31jYXNlInRhYmxlIjpjYXNlInRiIjppLndpZHRoPU1hdGgubWluKHMud2lkdGgsTWF0aC5tYXgoaS53aWR0aCxsKSk7aS5oZWlnaHQrPWg7aS5jaGlsZHJlbi5wdXNoKHQpfX07dC5jaGVja0RpbWVuc2lvbnM9ZnVuY3Rpb24gY2hlY2tEaW1lbnNpb25zKGUsdCl7aWYobnVsbD09PWVbci4kZ2V0VGVtcGxhdGVSb290XSgpW3IuJGV4dHJhXS5maXJzdFVuc3BsaXR0YWJsZSlyZXR1cm4hMDtpZigwPT09ZS53fHwwPT09ZS5oKXJldHVybiEwO2NvbnN0IGE9ZVtyLiRnZXRTdWJmb3JtUGFyZW50XSgpLG49YVtyLiRleHRyYV0mJmFbci4kZXh0cmFdLmF0dGVtcHR8fDAsWyxpLHMsb109ZnVuY3Rpb24gZ2V0VHJhbnNmb3JtZWRCQm94KGUpe2xldCB0LGEscj0iIj09PWUudz9OYU46ZS53LG49IiI9PT1lLmg/TmFOOmUuaCxbaSxzXT1bMCwwXTtzd2l0Y2goZS5hbmNob3JUeXBlfHwiIil7Y2FzZSJib3R0b21DZW50ZXIiOltpLHNdPVtyLzIsbl07YnJlYWs7Y2FzZSJib3R0b21MZWZ0IjpbaSxzXT1bMCxuXTticmVhaztjYXNlImJvdHRvbVJpZ2h0IjpbaSxzXT1bcixuXTticmVhaztjYXNlIm1pZGRsZUNlbnRlciI6W2ksc109W3IvMixuLzJdO2JyZWFrO2Nhc2UibWlkZGxlTGVmdCI6W2ksc109WzAsbi8yXTticmVhaztjYXNlIm1pZGRsZVJpZ2h0IjpbaSxzXT1bcixuLzJdO2JyZWFrO2Nhc2UidG9wQ2VudGVyIjpbaSxzXT1bci8yLDBdO2JyZWFrO2Nhc2UidG9wUmlnaHQiOltpLHNdPVtyLDBdfXN3aXRjaChlLnJvdGF0ZXx8MCl7Y2FzZSAwOlt0LGFdPVstaSwtc107YnJlYWs7Y2FzZSA5MDpbdCxhXT1bLXMsaV07W3Isbl09W24sLXJdO2JyZWFrO2Nhc2UgMTgwOlt0LGFdPVtpLHNdO1tyLG5dPVstciwtbl07YnJlYWs7Y2FzZSAyNzA6W3QsYV09W3MsLWldO1tyLG5dPVstbixyXX1yZXR1cm5bZS54K3QrTWF0aC5taW4oMCxyKSxlLnkrYStNYXRoLm1pbigwLG4pLE1hdGguYWJzKHIpLE1hdGguYWJzKG4pXX0oZSk7c3dpdGNoKGEubGF5b3V0KXtjYXNlImxyLXRiIjpjYXNlInJsLXRiIjpyZXR1cm4gMD09PW4/ZVtyLiRnZXRUZW1wbGF0ZVJvb3RdKClbci4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT8iIiE9PWUudz9NYXRoLnJvdW5kKHMtdC53aWR0aCk8PTI6dC53aWR0aD4yOiEoIiIhPT1lLmgmJk1hdGgucm91bmQoby10LmhlaWdodCk+MikmJigiIiE9PWUudz9NYXRoLnJvdW5kKHMtdC53aWR0aCk8PTJ8fDA9PT1hW3IuJGV4dHJhXS5udW1iZXJJbkxpbmUmJnQuaGVpZ2h0PjI6dC53aWR0aD4yKTohIWVbci4kZ2V0VGVtcGxhdGVSb290XSgpW3IuJGV4dHJhXS5ub0xheW91dEZhaWx1cmV8fCEoIiIhPT1lLmgmJk1hdGgucm91bmQoby10LmhlaWdodCk+MikmJigoIiI9PT1lLnd8fE1hdGgucm91bmQocy10LndpZHRoKTw9Mnx8IWFbci4kaXNUaGVyZU1vcmVXaWR0aF0oKSkmJnQuaGVpZ2h0PjIpO2Nhc2UidGFibGUiOmNhc2UidGIiOnJldHVybiEhZVtyLiRnZXRUZW1wbGF0ZVJvb3RdKClbci4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZXx8KCIiPT09ZS5ofHxlW3IuJGlzU3BsaXR0YWJsZV0oKT8oIiI9PT1lLnd8fE1hdGgucm91bmQocy10LndpZHRoKTw9Mnx8IWFbci4kaXNUaGVyZU1vcmVXaWR0aF0oKSkmJnQuaGVpZ2h0PjI6TWF0aC5yb3VuZChvLXQuaGVpZ2h0KTw9Mik7Y2FzZSJwb3NpdGlvbiI6aWYoZVtyLiRnZXRUZW1wbGF0ZVJvb3RdKClbci4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZSlyZXR1cm4hMDtpZigiIj09PWUuaHx8TWF0aC5yb3VuZChvK2ktdC5oZWlnaHQpPD0yKXJldHVybiEwO2NvbnN0IGM9ZVtyLiRnZXRUZW1wbGF0ZVJvb3RdKClbci4kZXh0cmFdLmN1cnJlbnRDb250ZW50QXJlYTtyZXR1cm4gbytpPmMuaDtjYXNlInJsLXJvdyI6Y2FzZSJyb3ciOnJldHVybiEhZVtyLiRnZXRUZW1wbGF0ZVJvb3RdKClbci4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZXx8KCIiPT09ZS5ofHxNYXRoLnJvdW5kKG8tdC5oZWlnaHQpPD0yKTtkZWZhdWx0OnJldHVybiEwfX07dC5mbHVzaEhUTUw9ZnVuY3Rpb24gZmx1c2hIVE1MKGUpe2lmKCFlW3IuJGV4dHJhXSlyZXR1cm4gbnVsbDtjb25zdCB0PXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6ZVtyLiRleHRyYV0uYXR0cmlidXRlcyxjaGlsZHJlbjplW3IuJGV4dHJhXS5jaGlsZHJlbn07aWYoZVtyLiRleHRyYV0uZmFpbGluZ05vZGUpe2NvbnN0IGE9ZVtyLiRleHRyYV0uZmFpbGluZ05vZGVbci4kZmx1c2hIVE1MXSgpO2EmJihlLmxheW91dC5lbmRzV2l0aCgiLXRiIik/dC5jaGlsZHJlbi5wdXNoKGNyZWF0ZUxpbmUoZSxbYV0pKTp0LmNoaWxkcmVuLnB1c2goYSkpfWlmKDA9PT10LmNoaWxkcmVuLmxlbmd0aClyZXR1cm4gbnVsbDtyZXR1cm4gdH07dC5nZXRBdmFpbGFibGVTcGFjZT1mdW5jdGlvbiBnZXRBdmFpbGFibGVTcGFjZShlKXtjb25zdCB0PWVbci4kZXh0cmFdLmF2YWlsYWJsZVNwYWNlLGE9ZS5tYXJnaW4/ZS5tYXJnaW4udG9wSW5zZXQrZS5tYXJnaW4uYm90dG9tSW5zZXQ6MCxuPWUubWFyZ2luP2UubWFyZ2luLmxlZnRJbnNldCtlLm1hcmdpbi5yaWdodEluc2V0OjA7c3dpdGNoKGUubGF5b3V0KXtjYXNlImxyLXRiIjpjYXNlInJsLXRiIjpyZXR1cm4gMD09PWVbci4kZXh0cmFdLmF0dGVtcHQ/e3dpZHRoOnQud2lkdGgtbi1lW3IuJGV4dHJhXS5jdXJyZW50V2lkdGgsaGVpZ2h0OnQuaGVpZ2h0LWEtZVtyLiRleHRyYV0ucHJldkhlaWdodH06e3dpZHRoOnQud2lkdGgtbixoZWlnaHQ6dC5oZWlnaHQtYS1lW3IuJGV4dHJhXS5oZWlnaHR9O2Nhc2Uicmwtcm93IjpjYXNlInJvdyI6cmV0dXJue3dpZHRoOmVbci4kZXh0cmFdLmNvbHVtbldpZHRocy5zbGljZShlW3IuJGV4dHJhXS5jdXJyZW50Q29sdW1uKS5yZWR1Y2UoKChlLHQpPT5lK3QpKSxoZWlnaHQ6dC5oZWlnaHQtbn07Y2FzZSJ0YWJsZSI6Y2FzZSJ0YiI6cmV0dXJue3dpZHRoOnQud2lkdGgtbixoZWlnaHQ6dC5oZWlnaHQtYS1lW3IuJGV4dHJhXS5oZWlnaHR9O2RlZmF1bHQ6cmV0dXJuIHR9fTt2YXIgcj1hKDc1KSxuPWEoODIpO2Z1bmN0aW9uIGNyZWF0ZUxpbmUoZSx0KXtyZXR1cm57bmFtZToiZGl2IixhdHRyaWJ1dGVzOntjbGFzczpbImxyLXRiIj09PWUubGF5b3V0PyJ4ZmFMciI6InhmYVJsIl19LGNoaWxkcmVuOnR9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LmNvbXB1dGVCYm94PWZ1bmN0aW9uIGNvbXB1dGVCYm94KGUsdCxhKXtsZXQgbjtpZigiIiE9PWUudyYmIiIhPT1lLmgpbj1bZS54LGUueSxlLncsZS5oXTtlbHNle2lmKCFhKXJldHVybiBudWxsO2xldCBpPWUudztpZigiIj09PWkpe2lmKDA9PT1lLm1heFcpe2NvbnN0IHQ9ZVtyLiRnZXRTdWJmb3JtUGFyZW50XSgpO2k9InBvc2l0aW9uIj09PXQubGF5b3V0JiYiIiE9PXQudz8wOmUubWluV31lbHNlIGk9TWF0aC5taW4oZS5tYXhXLGEud2lkdGgpO3QuYXR0cmlidXRlcy5zdHlsZS53aWR0aD1tZWFzdXJlVG9TdHJpbmcoaSl9bGV0IHM9ZS5oO2lmKCIiPT09cyl7aWYoMD09PWUubWF4SCl7Y29uc3QgdD1lW3IuJGdldFN1YmZvcm1QYXJlbnRdKCk7cz0icG9zaXRpb24iPT09dC5sYXlvdXQmJiIiIT09dC5oPzA6ZS5taW5IfWVsc2Ugcz1NYXRoLm1pbihlLm1heEgsYS5oZWlnaHQpO3QuYXR0cmlidXRlcy5zdHlsZS5oZWlnaHQ9bWVhc3VyZVRvU3RyaW5nKHMpfW49W2UueCxlLnksaSxzXX1yZXR1cm4gbn07dC5jcmVhdGVXcmFwcGVyPWZ1bmN0aW9uIGNyZWF0ZVdyYXBwZXIoZSx0KXtjb25zdHthdHRyaWJ1dGVzOmF9PXQse3N0eWxlOm59PWEsaT17bmFtZToiZGl2IixhdHRyaWJ1dGVzOntjbGFzczpbInhmYVdyYXBwZXIiXSxzdHlsZTpPYmplY3QuY3JlYXRlKG51bGwpfSxjaGlsZHJlbjpbXX07YS5jbGFzcy5wdXNoKCJ4ZmFXcmFwcGVkIik7aWYoZS5ib3JkZXIpe2NvbnN0e3dpZHRoczphLGluc2V0czpzfT1lLmJvcmRlcltyLiRleHRyYV07bGV0IG8sYyxsPXNbMF0saD1zWzNdO2NvbnN0IHU9c1swXStzWzJdLGQ9c1sxXStzWzNdO3N3aXRjaChlLmJvcmRlci5oYW5kKXtjYXNlImV2ZW4iOmwtPWFbMF0vMjtoLT1hWzNdLzI7bz1gY2FsYygxMDAlICsgJHsoYVsxXSthWzNdKS8yLWR9cHgpYDtjPWBjYWxjKDEwMCUgKyAkeyhhWzBdK2FbMl0pLzItdX1weClgO2JyZWFrO2Nhc2UibGVmdCI6bC09YVswXTtoLT1hWzNdO289YGNhbGMoMTAwJSArICR7YVsxXSthWzNdLWR9cHgpYDtjPWBjYWxjKDEwMCUgKyAke2FbMF0rYVsyXS11fXB4KWA7YnJlYWs7Y2FzZSJyaWdodCI6bz1kP2BjYWxjKDEwMCUgLSAke2R9cHgpYDoiMTAwJSI7Yz11P2BjYWxjKDEwMCUgLSAke3V9cHgpYDoiMTAwJSJ9Y29uc3QgZj1bInhmYUJvcmRlciJdO2lzUHJpbnRPbmx5KGUuYm9yZGVyKSYmZi5wdXNoKCJ4ZmFQcmludE9ubHkiKTtjb25zdCBnPXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOmYsc3R5bGU6e3RvcDpgJHtsfXB4YCxsZWZ0OmAke2h9cHhgLHdpZHRoOm8saGVpZ2h0OmN9fSxjaGlsZHJlbjpbXX07Zm9yKGNvbnN0IGUgb2ZbImJvcmRlciIsImJvcmRlcldpZHRoIiwiYm9yZGVyQ29sb3IiLCJib3JkZXJSYWRpdXMiLCJib3JkZXJTdHlsZSJdKWlmKHZvaWQgMCE9PW5bZV0pe2cuYXR0cmlidXRlcy5zdHlsZVtlXT1uW2VdO2RlbGV0ZSBuW2VdfWkuY2hpbGRyZW4ucHVzaChnLHQpfWVsc2UgaS5jaGlsZHJlbi5wdXNoKHQpO2Zvcihjb25zdCBlIG9mWyJiYWNrZ3JvdW5kIiwiYmFja2dyb3VuZENsaXAiLCJ0b3AiLCJsZWZ0Iiwid2lkdGgiLCJoZWlnaHQiLCJtaW5XaWR0aCIsIm1pbkhlaWdodCIsIm1heFdpZHRoIiwibWF4SGVpZ2h0IiwidHJhbnNmb3JtIiwidHJhbnNmb3JtT3JpZ2luIiwidmlzaWJpbGl0eSJdKWlmKHZvaWQgMCE9PW5bZV0pe2kuYXR0cmlidXRlcy5zdHlsZVtlXT1uW2VdO2RlbGV0ZSBuW2VdfSJhYnNvbHV0ZSI9PT1uLnBvc2l0aW9uP2kuYXR0cmlidXRlcy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiOmkuYXR0cmlidXRlcy5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiO2RlbGV0ZSBuLnBvc2l0aW9uO2lmKG4uYWxpZ25TZWxmKXtpLmF0dHJpYnV0ZXMuc3R5bGUuYWxpZ25TZWxmPW4uYWxpZ25TZWxmO2RlbGV0ZSBuLmFsaWduU2VsZn1yZXR1cm4gaX07dC5maXhEaW1lbnNpb25zPWZ1bmN0aW9uIGZpeERpbWVuc2lvbnMoZSl7Y29uc3QgdD1lW3IuJGdldFN1YmZvcm1QYXJlbnRdKCk7aWYodC5sYXlvdXQmJnQubGF5b3V0LmluY2x1ZGVzKCJyb3ciKSl7Y29uc3QgYT10W3IuJGV4dHJhXSxuPWUuY29sU3BhbjtsZXQgaTtpPS0xPT09bj9hLmNvbHVtbldpZHRocy5zbGljZShhLmN1cnJlbnRDb2x1bW4pLnJlZHVjZSgoKGUsdCk9PmUrdCksMCk6YS5jb2x1bW5XaWR0aHMuc2xpY2UoYS5jdXJyZW50Q29sdW1uLGEuY3VycmVudENvbHVtbituKS5yZWR1Y2UoKChlLHQpPT5lK3QpLDApO2lzTmFOKGkpfHwoZS53PWkpfXQubGF5b3V0JiYicG9zaXRpb24iIT09dC5sYXlvdXQmJihlLng9ZS55PTApOyJ0YWJsZSI9PT1lLmxheW91dCYmIiI9PT1lLncmJkFycmF5LmlzQXJyYXkoZS5jb2x1bW5XaWR0aHMpJiYoZS53PWUuY29sdW1uV2lkdGhzLnJlZHVjZSgoKGUsdCk9PmUrdCksMCkpfTt0LmZpeFRleHRJbmRlbnQ9ZnVuY3Rpb24gZml4VGV4dEluZGVudChlKXtjb25zdCB0PSgwLGkuZ2V0TWVhc3VyZW1lbnQpKGUudGV4dEluZGVudCwiMHB4Iik7aWYodD49MClyZXR1cm47Y29uc3QgYT0icGFkZGluZyIrKCJsZWZ0Ij09KCJyaWdodCI9PT1lLnRleHRBbGlnbj8icmlnaHQiOiJsZWZ0Iik/IkxlZnQiOiJSaWdodCIpLHI9KDAsaS5nZXRNZWFzdXJlbWVudCkoZVthXSwiMHB4Iik7ZVthXT1yLXQrInB4In07dC5maXhVUkw9ZnVuY3Rpb24gZml4VVJMKGUpe2NvbnN0IHQ9KDAsbi5jcmVhdGVWYWxpZEFic29sdXRlVXJsKShlLG51bGwse2FkZERlZmF1bHRQcm90b2NvbDohMCx0cnlDb252ZXJ0RW5jb2Rpbmc6ITB9KTtyZXR1cm4gdD90LmhyZWY6bnVsbH07dC5pc1ByaW50T25seT1pc1ByaW50T25seTt0LmxheW91dENsYXNzPWZ1bmN0aW9uIGxheW91dENsYXNzKGUpe3N3aXRjaChlLmxheW91dCl7Y2FzZSJwb3NpdGlvbiI6ZGVmYXVsdDpyZXR1cm4ieGZhUG9zaXRpb24iO2Nhc2UibHItdGIiOnJldHVybiJ4ZmFMclRiIjtjYXNlInJsLXJvdyI6cmV0dXJuInhmYVJsUm93IjtjYXNlInJsLXRiIjpyZXR1cm4ieGZhUmxUYiI7Y2FzZSJyb3ciOnJldHVybiJ4ZmFSb3ciO2Nhc2UidGFibGUiOnJldHVybiJ4ZmFUYWJsZSI7Y2FzZSJ0YiI6cmV0dXJuInhmYVRiIn19O3QubGF5b3V0Tm9kZT1mdW5jdGlvbiBsYXlvdXROb2RlKGUsdCl7bGV0IGE9bnVsbCxuPW51bGwsaT0hMTtpZigoIWUud3x8IWUuaCkmJmUudmFsdWUpe2xldCBzPTAsbz0wO2lmKGUubWFyZ2luKXtzPWUubWFyZ2luLmxlZnRJbnNldCtlLm1hcmdpbi5yaWdodEluc2V0O289ZS5tYXJnaW4udG9wSW5zZXQrZS5tYXJnaW4uYm90dG9tSW5zZXR9bGV0IGM9bnVsbCxsPW51bGw7aWYoZS5wYXJhKXtsPU9iamVjdC5jcmVhdGUobnVsbCk7Yz0iIj09PWUucGFyYS5saW5lSGVpZ2h0P251bGw6ZS5wYXJhLmxpbmVIZWlnaHQ7bC50b3A9IiI9PT1lLnBhcmEuc3BhY2VBYm92ZT8wOmUucGFyYS5zcGFjZUFib3ZlO2wuYm90dG9tPSIiPT09ZS5wYXJhLnNwYWNlQmVsb3c/MDplLnBhcmEuc3BhY2VCZWxvdztsLmxlZnQ9IiI9PT1lLnBhcmEubWFyZ2luTGVmdD8wOmUucGFyYS5tYXJnaW5MZWZ0O2wucmlnaHQ9IiI9PT1lLnBhcmEubWFyZ2luUmlnaHQ/MDplLnBhcmEubWFyZ2luUmlnaHR9bGV0IGg9ZS5mb250O2lmKCFoKXtjb25zdCB0PWVbci4kZ2V0VGVtcGxhdGVSb290XSgpO2xldCBhPWVbci4kZ2V0UGFyZW50XSgpO2Zvcig7YSYmYSE9PXQ7KXtpZihhLmZvbnQpe2g9YS5mb250O2JyZWFrfWE9YVtyLiRnZXRQYXJlbnRdKCl9fWNvbnN0IHU9KGUud3x8dC53aWR0aCktcyxkPWVbci4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlcjtpZihlLnZhbHVlLmV4RGF0YSYmZS52YWx1ZS5leERhdGFbci4kY29udGVudF0mJiJ0ZXh0L2h0bWwiPT09ZS52YWx1ZS5leERhdGEuY29udGVudFR5cGUpe2NvbnN0IHQ9bGF5b3V0VGV4dChlLnZhbHVlLmV4RGF0YVtyLiRjb250ZW50XSxoLGwsYyxkLHUpO249dC53aWR0aDthPXQuaGVpZ2h0O2k9dC5pc0Jyb2tlbn1lbHNle2NvbnN0IHQ9ZS52YWx1ZVtyLiR0ZXh0XSgpO2lmKHQpe2NvbnN0IGU9bGF5b3V0VGV4dCh0LGgsbCxjLGQsdSk7bj1lLndpZHRoO2E9ZS5oZWlnaHQ7aT1lLmlzQnJva2VufX1udWxsPT09bnx8ZS53fHwobis9cyk7bnVsbD09PWF8fGUuaHx8KGErPW8pfXJldHVybnt3Om4saDphLGlzQnJva2VuOml9fTt0Lm1lYXN1cmVUb1N0cmluZz1tZWFzdXJlVG9TdHJpbmc7dC5zZXRBY2Nlc3M9ZnVuY3Rpb24gc2V0QWNjZXNzKGUsdCl7c3dpdGNoKGUuYWNjZXNzKXtjYXNlIm5vbkludGVyYWN0aXZlIjp0LnB1c2goInhmYU5vbkludGVyYWN0aXZlIik7YnJlYWs7Y2FzZSJyZWFkT25seSI6dC5wdXNoKCJ4ZmFSZWFkT25seSIpO2JyZWFrO2Nhc2UicHJvdGVjdGVkIjp0LnB1c2goInhmYURpc2FibGVkIil9fTt0LnNldEZvbnRGYW1pbHk9ZnVuY3Rpb24gc2V0Rm9udEZhbWlseShlLHQsYSxyKXtpZighYSl7ZGVsZXRlIHIuZm9udEZhbWlseTtyZXR1cm59Y29uc3Qgbj0oMCxpLnN0cmlwUXVvdGVzKShlLnR5cGVmYWNlKTtyLmZvbnRGYW1pbHk9YCIke259ImA7Y29uc3Qgbz1hLmZpbmQobik7aWYobyl7Y29uc3R7Zm9udEZhbWlseTphfT1vLnJlZ3VsYXIuY3NzRm9udEluZm87YSE9PW4mJihyLmZvbnRGYW1pbHk9YCIke2F9ImApO2NvbnN0IGk9Z2V0Q3VycmVudFBhcmEodCk7aWYoaSYmIiIhPT1pLmxpbmVIZWlnaHQpcmV0dXJuO2lmKHIubGluZUhlaWdodClyZXR1cm47Y29uc3QgYz0oMCxzLnNlbGVjdEZvbnQpKGUsbyk7YyYmKHIubGluZUhlaWdodD1NYXRoLm1heCgxLjIsYy5saW5lSGVpZ2h0KSl9fTt0LnNldE1pbk1heERpbWVuc2lvbnM9ZnVuY3Rpb24gc2V0TWluTWF4RGltZW5zaW9ucyhlLHQpe2lmKCJwb3NpdGlvbiI9PT1lW3IuJGdldFN1YmZvcm1QYXJlbnRdKCkubGF5b3V0KXtlLm1pblc+MCYmKHQubWluV2lkdGg9bWVhc3VyZVRvU3RyaW5nKGUubWluVykpO2UubWF4Vz4wJiYodC5tYXhXaWR0aD1tZWFzdXJlVG9TdHJpbmcoZS5tYXhXKSk7ZS5taW5IPjAmJih0Lm1pbkhlaWdodD1tZWFzdXJlVG9TdHJpbmcoZS5taW5IKSk7ZS5tYXhIPjAmJih0Lm1heEhlaWdodD1tZWFzdXJlVG9TdHJpbmcoZS5tYXhIKSl9fTt0LnNldFBhcmE9ZnVuY3Rpb24gc2V0UGFyYShlLHQsYSl7aWYoYS5hdHRyaWJ1dGVzLmNsYXNzJiZhLmF0dHJpYnV0ZXMuY2xhc3MuaW5jbHVkZXMoInhmYVJpY2giKSl7aWYodCl7IiI9PT1lLmgmJih0LmhlaWdodD0iYXV0byIpOyIiPT09ZS53JiYodC53aWR0aD0iYXV0byIpfWNvbnN0IG49Z2V0Q3VycmVudFBhcmEoZSk7aWYobil7Y29uc3QgZT1hLmF0dHJpYnV0ZXMuc3R5bGU7ZS5kaXNwbGF5PSJmbGV4IjtlLmZsZXhEaXJlY3Rpb249ImNvbHVtbiI7c3dpdGNoKG4udkFsaWduKXtjYXNlInRvcCI6ZS5qdXN0aWZ5Q29udGVudD0ic3RhcnQiO2JyZWFrO2Nhc2UiYm90dG9tIjplLmp1c3RpZnlDb250ZW50PSJlbmQiO2JyZWFrO2Nhc2UibWlkZGxlIjplLmp1c3RpZnlDb250ZW50PSJjZW50ZXIifWNvbnN0IHQ9bltyLiR0b1N0eWxlXSgpO2Zvcihjb25zdFthLHJdb2YgT2JqZWN0LmVudHJpZXModCkpYSBpbiBlfHwoZVthXT1yKX19fTt0LnRvU3R5bGU9ZnVuY3Rpb24gdG9TdHlsZShlLC4uLnQpe2NvbnN0IGE9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IoY29uc3QgaSBvZiB0KXtjb25zdCB0PWVbaV07aWYobnVsbCE9PXQpaWYoYy5oYXNPd25Qcm9wZXJ0eShpKSljW2ldKGUsYSk7ZWxzZSBpZih0IGluc3RhbmNlb2Ygci5YRkFPYmplY3Qpe2NvbnN0IGU9dFtyLiR0b1N0eWxlXSgpO2U/T2JqZWN0LmFzc2lnbihhLGUpOigwLG4ud2FybikoYChERUJVRykgLSBYRkEgLSBzdHlsZSBmb3IgJHtpfSBub3QgaW1wbGVtZW50ZWQgeWV0YCl9fXJldHVybiBhfTt2YXIgcj1hKDc1KSxuPWEoMiksaT1hKDc2KSxzPWEoODMpLG89YSg4NCk7ZnVuY3Rpb24gbWVhc3VyZVRvU3RyaW5nKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZT8iMHB4IjpOdW1iZXIuaXNJbnRlZ2VyKGUpP2Ake2V9cHhgOmAke2UudG9GaXhlZCgyKX1weGB9Y29uc3QgYz17YW5jaG9yVHlwZShlLHQpe2NvbnN0IGE9ZVtyLiRnZXRTdWJmb3JtUGFyZW50XSgpO2lmKGEmJighYS5sYXlvdXR8fCJwb3NpdGlvbiI9PT1hLmxheW91dCkpeyJ0cmFuc2Zvcm0iaW4gdHx8KHQudHJhbnNmb3JtPSIiKTtzd2l0Y2goZS5hbmNob3JUeXBlKXtjYXNlImJvdHRvbUNlbnRlciI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoLTUwJSwgLTEwMCUpIjticmVhaztjYXNlImJvdHRvbUxlZnQiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKDAsLTEwMCUpIjticmVhaztjYXNlImJvdHRvbVJpZ2h0Ijp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgtMTAwJSwtMTAwJSkiO2JyZWFrO2Nhc2UibWlkZGxlQ2VudGVyIjp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgtNTAlLC01MCUpIjticmVhaztjYXNlIm1pZGRsZUxlZnQiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKDAsLTUwJSkiO2JyZWFrO2Nhc2UibWlkZGxlUmlnaHQiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKC0xMDAlLC01MCUpIjticmVhaztjYXNlInRvcENlbnRlciI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoLTUwJSwwKSI7YnJlYWs7Y2FzZSJ0b3BSaWdodCI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoLTEwMCUsMCkifX19LGRpbWVuc2lvbnMoZSx0KXtjb25zdCBhPWVbci4kZ2V0U3ViZm9ybVBhcmVudF0oKTtsZXQgbj1lLnc7Y29uc3QgaT1lLmg7aWYoYS5sYXlvdXQmJmEubGF5b3V0LmluY2x1ZGVzKCJyb3ciKSl7Y29uc3QgdD1hW3IuJGV4dHJhXSxpPWUuY29sU3BhbjtsZXQgcztpZigtMT09PWkpe3M9dC5jb2x1bW5XaWR0aHMuc2xpY2UodC5jdXJyZW50Q29sdW1uKS5yZWR1Y2UoKChlLHQpPT5lK3QpLDApO3QuY3VycmVudENvbHVtbj0wfWVsc2V7cz10LmNvbHVtbldpZHRocy5zbGljZSh0LmN1cnJlbnRDb2x1bW4sdC5jdXJyZW50Q29sdW1uK2kpLnJlZHVjZSgoKGUsdCk9PmUrdCksMCk7dC5jdXJyZW50Q29sdW1uPSh0LmN1cnJlbnRDb2x1bW4rZS5jb2xTcGFuKSV0LmNvbHVtbldpZHRocy5sZW5ndGh9aXNOYU4ocyl8fChuPWUudz1zKX10LndpZHRoPSIiIT09bj9tZWFzdXJlVG9TdHJpbmcobik6ImF1dG8iO3QuaGVpZ2h0PSIiIT09aT9tZWFzdXJlVG9TdHJpbmcoaSk6ImF1dG8ifSxwb3NpdGlvbihlLHQpe2NvbnN0IGE9ZVtyLiRnZXRTdWJmb3JtUGFyZW50XSgpO2lmKCFhfHwhYS5sYXlvdXR8fCJwb3NpdGlvbiI9PT1hLmxheW91dCl7dC5wb3NpdGlvbj0iYWJzb2x1dGUiO3QubGVmdD1tZWFzdXJlVG9TdHJpbmcoZS54KTt0LnRvcD1tZWFzdXJlVG9TdHJpbmcoZS55KX19LHJvdGF0ZShlLHQpe2lmKGUucm90YXRlKXsidHJhbnNmb3JtImluIHR8fCh0LnRyYW5zZm9ybT0iIik7dC50cmFuc2Zvcm0rPWByb3RhdGUoLSR7ZS5yb3RhdGV9ZGVnKWA7dC50cmFuc2Zvcm1PcmlnaW49InRvcCBsZWZ0In19LHByZXNlbmNlKGUsdCl7c3dpdGNoKGUucHJlc2VuY2Upe2Nhc2UiaW52aXNpYmxlIjp0LnZpc2liaWxpdHk9ImhpZGRlbiI7YnJlYWs7Y2FzZSJoaWRkZW4iOmNhc2UiaW5hY3RpdmUiOnQuZGlzcGxheT0ibm9uZSJ9fSxoQWxpZ24oZSx0KXtpZigicGFyYSI9PT1lW3IuJG5vZGVOYW1lXSlzd2l0Y2goZS5oQWxpZ24pe2Nhc2UianVzdGlmeUFsbCI6dC50ZXh0QWxpZ249Imp1c3RpZnktYWxsIjticmVhaztjYXNlInJhZGl4Ijp0LnRleHRBbGlnbj0ibGVmdCI7YnJlYWs7ZGVmYXVsdDp0LnRleHRBbGlnbj1lLmhBbGlnbn1lbHNlIHN3aXRjaChlLmhBbGlnbil7Y2FzZSJsZWZ0Ijp0LmFsaWduU2VsZj0ic3RhcnQiO2JyZWFrO2Nhc2UiY2VudGVyIjp0LmFsaWduU2VsZj0iY2VudGVyIjticmVhaztjYXNlInJpZ2h0Ijp0LmFsaWduU2VsZj0iZW5kIn19LG1hcmdpbihlLHQpe2UubWFyZ2luJiYodC5tYXJnaW49ZS5tYXJnaW5bci4kdG9TdHlsZV0oKS5tYXJnaW4pfX07ZnVuY3Rpb24gbGF5b3V0VGV4dChlLHQsYSxuLGkscyl7Y29uc3QgYz1uZXcgby5UZXh0TWVhc3VyZSh0LGEsbixpKTsic3RyaW5nIj09dHlwZW9mIGU/Yy5hZGRTdHJpbmcoZSk6ZVtyLiRwdXNoR2x5cGhzXShjKTtyZXR1cm4gYy5jb21wdXRlKHMpfWZ1bmN0aW9uIGlzUHJpbnRPbmx5KGUpe3JldHVybiBlLnJlbGV2YW50Lmxlbmd0aD4wJiYhZS5yZWxldmFudFswXS5leGNsdWRlZCYmInByaW50Ij09PWUucmVsZXZhbnRbMF0udmlld25hbWV9ZnVuY3Rpb24gZ2V0Q3VycmVudFBhcmEoZSl7Y29uc3QgdD1lW3IuJGdldFRlbXBsYXRlUm9vdF0oKVtyLiRleHRyYV0ucGFyYVN0YWNrO3JldHVybiB0Lmxlbmd0aD90LmF0KC0xKTpudWxsfX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkZvbnRGaW5kZXI9dm9pZCAwO3QuZ2V0TWV0cmljcz1mdW5jdGlvbiBnZXRNZXRyaWNzKGUsdD0hMSl7bGV0IGE9bnVsbDtpZihlKXtjb25zdCB0PSgwLG4uc3RyaXBRdW90ZXMpKGUudHlwZWZhY2UpLGk9ZVtyLiRnbG9iYWxEYXRhXS5mb250RmluZGVyLmZpbmQodCk7YT1zZWxlY3RGb250KGUsaSl9aWYoIWEpcmV0dXJue2xpbmVIZWlnaHQ6MTIsbGluZUdhcDoyLGxpbmVOb0dhcDoxMH07Y29uc3QgaT1lLnNpemV8fDEwLHM9YS5saW5lSGVpZ2h0P01hdGgubWF4KHQ/MDoxLjIsYS5saW5lSGVpZ2h0KToxLjIsbz12b2lkIDA9PT1hLmxpbmVHYXA/LjI6YS5saW5lR2FwO3JldHVybntsaW5lSGVpZ2h0OnMqaSxsaW5lR2FwOm8qaSxsaW5lTm9HYXA6TWF0aC5tYXgoMSxzLW8pKml9fTt0LnNlbGVjdEZvbnQ9c2VsZWN0Rm9udDt2YXIgcj1hKDc1KSxuPWEoNzYpLGk9YSgyKTt0LkZvbnRGaW5kZXI9Y2xhc3MgRm9udEZpbmRlcntjb25zdHJ1Y3RvcihlKXt0aGlzLmZvbnRzPW5ldyBNYXA7dGhpcy5jYWNoZT1uZXcgTWFwO3RoaXMud2FybmVkPW5ldyBTZXQ7dGhpcy5kZWZhdWx0Rm9udD1udWxsO3RoaXMuYWRkKGUpfWFkZChlLHQ9bnVsbCl7Zm9yKGNvbnN0IHQgb2YgZSl0aGlzLmFkZFBkZkZvbnQodCk7Zm9yKGNvbnN0IGUgb2YgdGhpcy5mb250cy52YWx1ZXMoKSllLnJlZ3VsYXJ8fChlLnJlZ3VsYXI9ZS5pdGFsaWN8fGUuYm9sZHx8ZS5ib2xkaXRhbGljKTtpZighdHx8MD09PXQuc2l6ZSlyZXR1cm47Y29uc3QgYT10aGlzLmZvbnRzLmdldCgiUGRmSlMtRmFsbGJhY2stUGRmSlMtWEZBIik7Zm9yKGNvbnN0IGUgb2YgdCl0aGlzLmZvbnRzLnNldChlLGEpfWFkZFBkZkZvbnQoZSl7Y29uc3QgdD1lLmNzc0ZvbnRJbmZvLGE9dC5mb250RmFtaWx5O2xldCByPXRoaXMuZm9udHMuZ2V0KGEpO2lmKCFyKXtyPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy5mb250cy5zZXQoYSxyKTt0aGlzLmRlZmF1bHRGb250fHwodGhpcy5kZWZhdWx0Rm9udD1yKX1sZXQgbj0iIjtjb25zdCBpPXBhcnNlRmxvYXQodC5mb250V2VpZ2h0KTswIT09cGFyc2VGbG9hdCh0Lml0YWxpY0FuZ2xlKT9uPWk+PTcwMD8iYm9sZGl0YWxpYyI6Iml0YWxpYyI6aT49NzAwJiYobj0iYm9sZCIpO2lmKCFuKXsoZS5uYW1lLmluY2x1ZGVzKCJCb2xkIil8fGUucHNOYW1lJiZlLnBzTmFtZS5pbmNsdWRlcygiQm9sZCIpKSYmKG49ImJvbGQiKTsoZS5uYW1lLmluY2x1ZGVzKCJJdGFsaWMiKXx8ZS5uYW1lLmVuZHNXaXRoKCJJdCIpfHxlLnBzTmFtZSYmKGUucHNOYW1lLmluY2x1ZGVzKCJJdGFsaWMiKXx8ZS5wc05hbWUuZW5kc1dpdGgoIkl0IikpKSYmKG4rPSJpdGFsaWMiKX1ufHwobj0icmVndWxhciIpO3Jbbl09ZX1nZXREZWZhdWx0KCl7cmV0dXJuIHRoaXMuZGVmYXVsdEZvbnR9ZmluZChlLHQ9ITApe2xldCBhPXRoaXMuZm9udHMuZ2V0KGUpfHx0aGlzLmNhY2hlLmdldChlKTtpZihhKXJldHVybiBhO2NvbnN0IHI9Lyx8LXxffCB8Ym9sZGl0YWxpY3xib2xkfGl0YWxpY3xyZWd1bGFyfGl0L2dpO2xldCBuPWUucmVwbGFjZShyLCIiKTthPXRoaXMuZm9udHMuZ2V0KG4pO2lmKGEpe3RoaXMuY2FjaGUuc2V0KGUsYSk7cmV0dXJuIGF9bj1uLnRvTG93ZXJDYXNlKCk7Y29uc3Qgcz1bXTtmb3IoY29uc3RbZSx0XW9mIHRoaXMuZm9udHMuZW50cmllcygpKWUucmVwbGFjZShyLCIiKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgobikmJnMucHVzaCh0KTtpZigwPT09cy5sZW5ndGgpZm9yKGNvbnN0WyxlXW9mIHRoaXMuZm9udHMuZW50cmllcygpKWUucmVndWxhci5uYW1lJiZlLnJlZ3VsYXIubmFtZS5yZXBsYWNlKHIsIiIpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChuKSYmcy5wdXNoKGUpO2lmKDA9PT1zLmxlbmd0aCl7bj1uLnJlcGxhY2UoL3BzbXR8bXQvZ2ksIiIpO2Zvcihjb25zdFtlLHRdb2YgdGhpcy5mb250cy5lbnRyaWVzKCkpZS5yZXBsYWNlKHIsIiIpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChuKSYmcy5wdXNoKHQpfWlmKDA9PT1zLmxlbmd0aClmb3IoY29uc3QgZSBvZiB0aGlzLmZvbnRzLnZhbHVlcygpKWUucmVndWxhci5uYW1lJiZlLnJlZ3VsYXIubmFtZS5yZXBsYWNlKHIsIiIpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChuKSYmcy5wdXNoKGUpO2lmKHMubGVuZ3RoPj0xKXsxIT09cy5sZW5ndGgmJnQmJigwLGkud2FybikoYFhGQSAtIFRvbyBtYW55IGNob2ljZXMgdG8gZ3Vlc3MgdGhlIGNvcnJlY3QgZm9udDogJHtlfWApO3RoaXMuY2FjaGUuc2V0KGUsc1swXSk7cmV0dXJuIHNbMF19aWYodCYmIXRoaXMud2FybmVkLmhhcyhlKSl7dGhpcy53YXJuZWQuYWRkKGUpOygwLGkud2FybikoYFhGQSAtIENhbm5vdCBmaW5kIHRoZSBmb250OiAke2V9YCl9cmV0dXJuIG51bGx9fTtmdW5jdGlvbiBzZWxlY3RGb250KGUsdCl7cmV0dXJuIml0YWxpYyI9PT1lLnBvc3R1cmU/ImJvbGQiPT09ZS53ZWlnaHQ/dC5ib2xkaXRhbGljOnQuaXRhbGljOiJib2xkIj09PWUud2VpZ2h0P3QuYm9sZDp0LnJlZ3VsYXJ9fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuVGV4dE1lYXN1cmU9dm9pZCAwO3ZhciByPWEoODMpO2NsYXNzIEZvbnRJbmZve2NvbnN0cnVjdG9yKGUsdCxhLG4pe3RoaXMubGluZUhlaWdodD1hO3RoaXMucGFyYU1hcmdpbj10fHx7dG9wOjAsYm90dG9tOjAsbGVmdDowLHJpZ2h0OjB9O2lmKCFlKXtbdGhpcy5wZGZGb250LHRoaXMueGZhRm9udF09dGhpcy5kZWZhdWx0Rm9udChuKTtyZXR1cm59dGhpcy54ZmFGb250PXt0eXBlZmFjZTplLnR5cGVmYWNlLHBvc3R1cmU6ZS5wb3N0dXJlLHdlaWdodDplLndlaWdodCxzaXplOmUuc2l6ZSxsZXR0ZXJTcGFjaW5nOmUubGV0dGVyU3BhY2luZ307Y29uc3QgaT1uLmZpbmQoZS50eXBlZmFjZSk7aWYoaSl7dGhpcy5wZGZGb250PSgwLHIuc2VsZWN0Rm9udCkoZSxpKTt0aGlzLnBkZkZvbnR8fChbdGhpcy5wZGZGb250LHRoaXMueGZhRm9udF09dGhpcy5kZWZhdWx0Rm9udChuKSl9ZWxzZVt0aGlzLnBkZkZvbnQsdGhpcy54ZmFGb250XT10aGlzLmRlZmF1bHRGb250KG4pfWRlZmF1bHRGb250KGUpe2NvbnN0IHQ9ZS5maW5kKCJIZWx2ZXRpY2EiLCExKXx8ZS5maW5kKCJNeXJpYWQgUHJvIiwhMSl8fGUuZmluZCgiQXJpYWwiLCExKXx8ZS5nZXREZWZhdWx0KCk7aWYodCYmdC5yZWd1bGFyKXtjb25zdCBlPXQucmVndWxhcjtyZXR1cm5bZSx7dHlwZWZhY2U6ZS5jc3NGb250SW5mby5mb250RmFtaWx5LHBvc3R1cmU6Im5vcm1hbCIsd2VpZ2h0OiJub3JtYWwiLHNpemU6MTAsbGV0dGVyU3BhY2luZzowfV19cmV0dXJuW251bGwse3R5cGVmYWNlOiJDb3VyaWVyIixwb3N0dXJlOiJub3JtYWwiLHdlaWdodDoibm9ybWFsIixzaXplOjEwLGxldHRlclNwYWNpbmc6MH1dfX1jbGFzcyBGb250U2VsZWN0b3J7Y29uc3RydWN0b3IoZSx0LGEscil7dGhpcy5mb250RmluZGVyPXI7dGhpcy5zdGFjaz1bbmV3IEZvbnRJbmZvKGUsdCxhLHIpXX1wdXNoRGF0YShlLHQsYSl7Y29uc3Qgcj10aGlzLnN0YWNrLmF0KC0xKTtmb3IoY29uc3QgdCBvZlsidHlwZWZhY2UiLCJwb3N0dXJlIiwid2VpZ2h0Iiwic2l6ZSIsImxldHRlclNwYWNpbmciXSllW3RdfHwoZVt0XT1yLnhmYUZvbnRbdF0pO2Zvcihjb25zdCBlIG9mWyJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiXSlpc05hTih0W2VdKSYmKHRbZV09ci5wYXJhTWFyZ2luW2VdKTtjb25zdCBuPW5ldyBGb250SW5mbyhlLHQsYXx8ci5saW5lSGVpZ2h0LHRoaXMuZm9udEZpbmRlcik7bi5wZGZGb250fHwobi5wZGZGb250PXIucGRmRm9udCk7dGhpcy5zdGFjay5wdXNoKG4pfXBvcEZvbnQoKXt0aGlzLnN0YWNrLnBvcCgpfXRvcEZvbnQoKXtyZXR1cm4gdGhpcy5zdGFjay5hdCgtMSl9fXQuVGV4dE1lYXN1cmU9Y2xhc3MgVGV4dE1lYXN1cmV7Y29uc3RydWN0b3IoZSx0LGEscil7dGhpcy5nbHlwaHM9W107dGhpcy5mb250U2VsZWN0b3I9bmV3IEZvbnRTZWxlY3RvcihlLHQsYSxyKTt0aGlzLmV4dHJhSGVpZ2h0PTB9cHVzaERhdGEoZSx0LGEpe3RoaXMuZm9udFNlbGVjdG9yLnB1c2hEYXRhKGUsdCxhKX1wb3BGb250KGUpe3JldHVybiB0aGlzLmZvbnRTZWxlY3Rvci5wb3BGb250KCl9YWRkUGFyYSgpe2NvbnN0IGU9dGhpcy5mb250U2VsZWN0b3IudG9wRm9udCgpO3RoaXMuZXh0cmFIZWlnaHQrPWUucGFyYU1hcmdpbi50b3ArZS5wYXJhTWFyZ2luLmJvdHRvbX1hZGRTdHJpbmcoZSl7aWYoIWUpcmV0dXJuO2NvbnN0IHQ9dGhpcy5mb250U2VsZWN0b3IudG9wRm9udCgpLGE9dC54ZmFGb250LnNpemU7aWYodC5wZGZGb250KXtjb25zdCByPXQueGZhRm9udC5sZXR0ZXJTcGFjaW5nLG49dC5wZGZGb250LGk9bi5saW5lSGVpZ2h0fHwxLjIscz10LmxpbmVIZWlnaHR8fE1hdGgubWF4KDEuMixpKSphLG89aS0odm9pZCAwPT09bi5saW5lR2FwPy4yOm4ubGluZUdhcCksYz1NYXRoLm1heCgxLG8pKmEsbD1hLzFlMyxoPW4uZGVmYXVsdFdpZHRofHxuLmNoYXJzVG9HbHlwaHMoIiAiKVswXS53aWR0aDtmb3IoY29uc3QgdCBvZiBlLnNwbGl0KC9bXHUyMDI5XG5dLykpe2NvbnN0IGU9bi5lbmNvZGVTdHJpbmcodCkuam9pbigiIiksYT1uLmNoYXJzVG9HbHlwaHMoZSk7Zm9yKGNvbnN0IGUgb2YgYSl7Y29uc3QgdD1lLndpZHRofHxoO3RoaXMuZ2x5cGhzLnB1c2goW3QqbCtyLHMsYyxlLnVuaWNvZGUsITFdKX10aGlzLmdseXBocy5wdXNoKFswLDAsMCwiXG4iLCEwXSl9dGhpcy5nbHlwaHMucG9wKCl9ZWxzZXtmb3IoY29uc3QgdCBvZiBlLnNwbGl0KC9bXHUyMDI5XG5dLykpe2Zvcihjb25zdCBlIG9mIHQuc3BsaXQoIiIpKXRoaXMuZ2x5cGhzLnB1c2goW2EsMS4yKmEsYSxlLCExXSk7dGhpcy5nbHlwaHMucHVzaChbMCwwLDAsIlxuIiwhMF0pfXRoaXMuZ2x5cGhzLnBvcCgpfX1jb21wdXRlKGUpe2xldCB0PS0xLGE9MCxyPTAsbj0wLGk9MCxzPTAsbz0hMSxjPSEwO2ZvcihsZXQgbD0wLGg9dGhpcy5nbHlwaHMubGVuZ3RoO2w8aDtsKyspe2NvbnN0W2gsdSxkLGYsZ109dGhpcy5nbHlwaHNbbF0scD0iICI9PT1mLG09Yz9kOnU7aWYoZyl7cj1NYXRoLm1heChyLGkpO2k9MDtuKz1zO3M9bTt0PS0xO2E9MDtjPSExfWVsc2UgaWYocClpZihpK2g+ZSl7cj1NYXRoLm1heChyLGkpO2k9MDtuKz1zO3M9bTt0PS0xO2E9MDtvPSEwO2M9ITF9ZWxzZXtzPU1hdGgubWF4KG0scyk7YT1pO2krPWg7dD1sfWVsc2UgaWYoaStoPmUpe24rPXM7cz1tO2lmKC0xIT09dCl7bD10O3I9TWF0aC5tYXgocixhKTtpPTA7dD0tMTthPTB9ZWxzZXtyPU1hdGgubWF4KHIsaSk7aT1ofW89ITA7Yz0hMX1lbHNle2krPWg7cz1NYXRoLm1heChtLHMpfX1yPU1hdGgubWF4KHIsaSk7bis9cyt0aGlzLmV4dHJhSGVpZ2h0O3JldHVybnt3aWR0aDoxLjAyKnIsaGVpZ2h0Om4saXNCcm9rZW46b319fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkRhdGFIYW5kbGVyPXZvaWQgMDt2YXIgcj1hKDc1KTt0LkRhdGFIYW5kbGVyPWNsYXNzIERhdGFIYW5kbGVye2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5kYXRhPXQ7dGhpcy5kYXRhc2V0PWUuZGF0YXNldHN8fG51bGx9c2VyaWFsaXplKGUpe2NvbnN0IHQ9W1stMSx0aGlzLmRhdGFbci4kZ2V0Q2hpbGRyZW5dKCldXTtmb3IoO3QubGVuZ3RoPjA7KXtjb25zdCBhPXQuYXQoLTEpLFtuLGldPWE7aWYobisxPT09aS5sZW5ndGgpe3QucG9wKCk7Y29udGludWV9Y29uc3Qgcz1pWysrYVswXV0sbz1lLmdldChzW3IuJHVpZF0pO2lmKG8pc1tyLiRzZXRWYWx1ZV0obyk7ZWxzZXtjb25zdCB0PXNbci4kZ2V0QXR0cmlidXRlc10oKTtmb3IoY29uc3QgYSBvZiB0LnZhbHVlcygpKXtjb25zdCB0PWUuZ2V0KGFbci4kdWlkXSk7aWYodCl7YVtyLiRzZXRWYWx1ZV0odCk7YnJlYWt9fX1jb25zdCBjPXNbci4kZ2V0Q2hpbGRyZW5dKCk7Yy5sZW5ndGg+MCYmdC5wdXNoKFstMSxjXSl9Y29uc3QgYT1bJzx4ZmE6ZGF0YXNldHMgeG1sbnM6eGZhPSJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hmYS1kYXRhLzEuMC8iPiddO2lmKHRoaXMuZGF0YXNldClmb3IoY29uc3QgZSBvZiB0aGlzLmRhdGFzZXRbci4kZ2V0Q2hpbGRyZW5dKCkpImRhdGEiIT09ZVtyLiRub2RlTmFtZV0mJmVbci4kdG9TdHJpbmddKGEpO3RoaXMuZGF0YVtyLiR0b1N0cmluZ10oYSk7YS5wdXNoKCI8L3hmYTpkYXRhc2V0cz4iKTtyZXR1cm4gYS5qb2luKCIiKX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuWEZBUGFyc2VyPXZvaWQgMDt2YXIgcj1hKDc1KSxuPWEoNjQpLGk9YSg4Nykscz1hKDIpO2NsYXNzIFhGQVBhcnNlciBleHRlbmRzIG4uWE1MUGFyc2VyQmFzZXtjb25zdHJ1Y3RvcihlPW51bGwsdD0hMSl7c3VwZXIoKTt0aGlzLl9idWlsZGVyPW5ldyBpLkJ1aWxkZXIoZSk7dGhpcy5fc3RhY2s9W107dGhpcy5fZ2xvYmFsRGF0YT17dXNlZFR5cGVmYWNlczpuZXcgU2V0fTt0aGlzLl9pZHM9bmV3IE1hcDt0aGlzLl9jdXJyZW50PXRoaXMuX2J1aWxkZXIuYnVpbGRSb290KHRoaXMuX2lkcyk7dGhpcy5fZXJyb3JDb2RlPW4uWE1MUGFyc2VyRXJyb3JDb2RlLk5vRXJyb3I7dGhpcy5fd2hpdGVSZWdleD0vXlxzKyQvO3RoaXMuX25ic3BzPS9ceGEwKy9nO3RoaXMuX3JpY2hUZXh0PXR9cGFyc2UoZSl7dGhpcy5wYXJzZVhtbChlKTtpZih0aGlzLl9lcnJvckNvZGU9PT1uLlhNTFBhcnNlckVycm9yQ29kZS5Ob0Vycm9yKXt0aGlzLl9jdXJyZW50W3IuJGZpbmFsaXplXSgpO3JldHVybiB0aGlzLl9jdXJyZW50LmVsZW1lbnR9fW9uVGV4dChlKXtlPWUucmVwbGFjZSh0aGlzLl9uYnNwcywoZT0+ZS5zbGljZSgxKSsiICIpKTt0aGlzLl9yaWNoVGV4dHx8dGhpcy5fY3VycmVudFtyLiRhY2NlcHRXaGl0ZXNwYWNlXSgpP3RoaXMuX2N1cnJlbnRbci4kb25UZXh0XShlLHRoaXMuX3JpY2hUZXh0KTp0aGlzLl93aGl0ZVJlZ2V4LnRlc3QoZSl8fHRoaXMuX2N1cnJlbnRbci4kb25UZXh0XShlLnRyaW0oKSl9b25DZGF0YShlKXt0aGlzLl9jdXJyZW50W3IuJG9uVGV4dF0oZSl9X21rQXR0cmlidXRlcyhlLHQpe2xldCBhPW51bGwsbj1udWxsO2NvbnN0IGk9T2JqZWN0LmNyZWF0ZSh7fSk7Zm9yKGNvbnN0e25hbWU6byx2YWx1ZTpjfW9mIGUpaWYoInhtbG5zIj09PW8pYT8oMCxzLndhcm4pKGBYRkEgLSBtdWx0aXBsZSBuYW1lc3BhY2UgZGVmaW5pdGlvbiBpbiA8JHt0fT5gKTphPWM7ZWxzZSBpZihvLnN0YXJ0c1dpdGgoInhtbG5zOiIpKXtjb25zdCBlPW8uc3Vic3RyaW5nKCJ4bWxuczoiLmxlbmd0aCk7bnx8KG49W10pO24ucHVzaCh7cHJlZml4OmUsdmFsdWU6Y30pfWVsc2V7Y29uc3QgZT1vLmluZGV4T2YoIjoiKTtpZigtMT09PWUpaVtvXT1jO2Vsc2V7bGV0IHQ9aVtyLiRuc0F0dHJpYnV0ZXNdO3R8fCh0PWlbci4kbnNBdHRyaWJ1dGVzXT1PYmplY3QuY3JlYXRlKG51bGwpKTtjb25zdFthLG5dPVtvLnNsaWNlKDAsZSksby5zbGljZShlKzEpXTtsZXQgcz10W2FdO3N8fChzPXRbYV09T2JqZWN0LmNyZWF0ZShudWxsKSk7c1tuXT1jfX1yZXR1cm5bYSxuLGldfV9nZXROYW1lQW5kUHJlZml4KGUsdCl7Y29uc3QgYT1lLmluZGV4T2YoIjoiKTtyZXR1cm4tMT09PWE/W2UsbnVsbF06W2Uuc3Vic3RyaW5nKGErMSksdD8iIjplLnN1YnN0cmluZygwLGEpXX1vbkJlZ2luRWxlbWVudChlLHQsYSl7Y29uc3RbbixpLHNdPXRoaXMuX21rQXR0cmlidXRlcyh0LGUpLFtvLGNdPXRoaXMuX2dldE5hbWVBbmRQcmVmaXgoZSx0aGlzLl9idWlsZGVyLmlzTnNBZ25vc3RpYygpKSxsPXRoaXMuX2J1aWxkZXIuYnVpbGQoe25zUHJlZml4OmMsbmFtZTpvLGF0dHJpYnV0ZXM6cyxuYW1lc3BhY2U6bixwcmVmaXhlczppfSk7bFtyLiRnbG9iYWxEYXRhXT10aGlzLl9nbG9iYWxEYXRhO2lmKGEpe2xbci4kZmluYWxpemVdKCk7dGhpcy5fY3VycmVudFtyLiRvbkNoaWxkXShsKSYmbFtyLiRzZXRJZF0odGhpcy5faWRzKTtsW3IuJGNsZWFuXSh0aGlzLl9idWlsZGVyKX1lbHNle3RoaXMuX3N0YWNrLnB1c2godGhpcy5fY3VycmVudCk7dGhpcy5fY3VycmVudD1sfX1vbkVuZEVsZW1lbnQoZSl7Y29uc3QgdD10aGlzLl9jdXJyZW50O2lmKHRbci4kaXNDREFUQVhtbF0oKSYmInN0cmluZyI9PXR5cGVvZiB0W3IuJGNvbnRlbnRdKXtjb25zdCBlPW5ldyBYRkFQYXJzZXI7ZS5fZ2xvYmFsRGF0YT10aGlzLl9nbG9iYWxEYXRhO2NvbnN0IGE9ZS5wYXJzZSh0W3IuJGNvbnRlbnRdKTt0W3IuJGNvbnRlbnRdPW51bGw7dFtyLiRvbkNoaWxkXShhKX10W3IuJGZpbmFsaXplXSgpO3RoaXMuX2N1cnJlbnQ9dGhpcy5fc3RhY2sucG9wKCk7dGhpcy5fY3VycmVudFtyLiRvbkNoaWxkXSh0KSYmdFtyLiRzZXRJZF0odGhpcy5faWRzKTt0W3IuJGNsZWFuXSh0aGlzLl9idWlsZGVyKX1vbkVycm9yKGUpe3RoaXMuX2Vycm9yQ29kZT1lfX10LlhGQVBhcnNlcj1YRkFQYXJzZXJ9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5CdWlsZGVyPXZvaWQgMDt2YXIgcj1hKDc3KSxuPWEoNzUpLGk9YSg4OCkscz1hKDgwKSxvPWEoOTcpLGM9YSgyKTtjbGFzcyBSb290IGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoLTEsInJvb3QiLE9iamVjdC5jcmVhdGUobnVsbCkpO3RoaXMuZWxlbWVudD1udWxsO3RoaXNbbi4kaWRzXT1lfVtuLiRvbkNoaWxkXShlKXt0aGlzLmVsZW1lbnQ9ZTtyZXR1cm4hMH1bbi4kZmluYWxpemVdKCl7c3VwZXJbbi4kZmluYWxpemVdKCk7aWYodGhpcy5lbGVtZW50LnRlbXBsYXRlIGluc3RhbmNlb2Ygcy5UZW1wbGF0ZSl7dGhpc1tuLiRpZHNdLnNldChuLiRyb290LHRoaXMuZWxlbWVudCk7dGhpcy5lbGVtZW50LnRlbXBsYXRlW24uJHJlc29sdmVQcm90b3R5cGVzXSh0aGlzW24uJGlkc10pO3RoaXMuZWxlbWVudC50ZW1wbGF0ZVtuLiRpZHNdPXRoaXNbbi4kaWRzXX19fWNsYXNzIEVtcHR5IGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoKXtzdXBlcigtMSwiIixPYmplY3QuY3JlYXRlKG51bGwpKX1bbi4kb25DaGlsZF0oZSl7cmV0dXJuITF9fXQuQnVpbGRlcj1jbGFzcyBCdWlsZGVye2NvbnN0cnVjdG9yKGU9bnVsbCl7dGhpcy5fbmFtZXNwYWNlU3RhY2s9W107dGhpcy5fbnNBZ25vc3RpY0xldmVsPTA7dGhpcy5fbmFtZXNwYWNlUHJlZml4ZXM9bmV3IE1hcDt0aGlzLl9uYW1lc3BhY2VzPW5ldyBNYXA7dGhpcy5fbmV4dE5zSWQ9TWF0aC5tYXgoLi4uT2JqZWN0LnZhbHVlcyhyLk5hbWVzcGFjZUlkcykubWFwKCgoe2lkOmV9KT0+ZSkpKTt0aGlzLl9jdXJyZW50TmFtZXNwYWNlPWV8fG5ldyBvLlVua25vd25OYW1lc3BhY2UoKyt0aGlzLl9uZXh0TnNJZCl9YnVpbGRSb290KGUpe3JldHVybiBuZXcgUm9vdChlKX1idWlsZCh7bnNQcmVmaXg6ZSxuYW1lOnQsYXR0cmlidXRlczphLG5hbWVzcGFjZTpzLHByZWZpeGVzOm99KXtjb25zdCBjPW51bGwhPT1zO2lmKGMpe3RoaXMuX25hbWVzcGFjZVN0YWNrLnB1c2godGhpcy5fY3VycmVudE5hbWVzcGFjZSk7dGhpcy5fY3VycmVudE5hbWVzcGFjZT10aGlzLl9zZWFyY2hOYW1lc3BhY2Uocyl9byYmdGhpcy5fYWRkTmFtZXNwYWNlUHJlZml4KG8pO2lmKGEuaGFzT3duUHJvcGVydHkobi4kbnNBdHRyaWJ1dGVzKSl7Y29uc3QgZT1pLk5hbWVzcGFjZVNldFVwLmRhdGFzZXRzLHQ9YVtuLiRuc0F0dHJpYnV0ZXNdO2xldCByPW51bGw7Zm9yKGNvbnN0W2Esbl1vZiBPYmplY3QuZW50cmllcyh0KSl7aWYodGhpcy5fZ2V0TmFtZXNwYWNlVG9Vc2UoYSk9PT1lKXtyPXt4ZmE6bn07YnJlYWt9fXI/YVtuLiRuc0F0dHJpYnV0ZXNdPXI6ZGVsZXRlIGFbbi4kbnNBdHRyaWJ1dGVzXX1jb25zdCBsPXRoaXMuX2dldE5hbWVzcGFjZVRvVXNlKGUpLGg9bCYmbFtyLiRidWlsZFhGQU9iamVjdF0odCxhKXx8bmV3IEVtcHR5O2hbbi4kaXNOc0Fnbm9zdGljXSgpJiZ0aGlzLl9uc0Fnbm9zdGljTGV2ZWwrKzsoY3x8b3x8aFtuLiRpc05zQWdub3N0aWNdKCkpJiYoaFtuLiRjbGVhbnVwXT17aGFzTmFtZXNwYWNlOmMscHJlZml4ZXM6byxuc0Fnbm9zdGljOmhbbi4kaXNOc0Fnbm9zdGljXSgpfSk7cmV0dXJuIGh9aXNOc0Fnbm9zdGljKCl7cmV0dXJuIHRoaXMuX25zQWdub3N0aWNMZXZlbD4wfV9zZWFyY2hOYW1lc3BhY2UoZSl7bGV0IHQ9dGhpcy5fbmFtZXNwYWNlcy5nZXQoZSk7aWYodClyZXR1cm4gdDtmb3IoY29uc3RbYSx7Y2hlY2s6bn1db2YgT2JqZWN0LmVudHJpZXMoci5OYW1lc3BhY2VJZHMpKWlmKG4oZSkpe3Q9aS5OYW1lc3BhY2VTZXRVcFthXTtpZih0KXt0aGlzLl9uYW1lc3BhY2VzLnNldChlLHQpO3JldHVybiB0fWJyZWFrfXQ9bmV3IG8uVW5rbm93bk5hbWVzcGFjZSgrK3RoaXMuX25leHROc0lkKTt0aGlzLl9uYW1lc3BhY2VzLnNldChlLHQpO3JldHVybiB0fV9hZGROYW1lc3BhY2VQcmVmaXgoZSl7Zm9yKGNvbnN0e3ByZWZpeDp0LHZhbHVlOmF9b2YgZSl7Y29uc3QgZT10aGlzLl9zZWFyY2hOYW1lc3BhY2UoYSk7bGV0IHI9dGhpcy5fbmFtZXNwYWNlUHJlZml4ZXMuZ2V0KHQpO2lmKCFyKXtyPVtdO3RoaXMuX25hbWVzcGFjZVByZWZpeGVzLnNldCh0LHIpfXIucHVzaChlKX19X2dldE5hbWVzcGFjZVRvVXNlKGUpe2lmKCFlKXJldHVybiB0aGlzLl9jdXJyZW50TmFtZXNwYWNlO2NvbnN0IHQ9dGhpcy5fbmFtZXNwYWNlUHJlZml4ZXMuZ2V0KGUpO2lmKHQmJnQubGVuZ3RoPjApcmV0dXJuIHQuYXQoLTEpOygwLGMud2FybikoYFVua25vd24gbmFtZXNwYWNlIHByZWZpeDogJHtlfS5gKTtyZXR1cm4gbnVsbH1jbGVhbihlKXtjb25zdHtoYXNOYW1lc3BhY2U6dCxwcmVmaXhlczphLG5zQWdub3N0aWM6cn09ZTt0JiYodGhpcy5fY3VycmVudE5hbWVzcGFjZT10aGlzLl9uYW1lc3BhY2VTdGFjay5wb3AoKSk7YSYmYS5mb3JFYWNoKCgoe3ByZWZpeDplfSk9Pnt0aGlzLl9uYW1lc3BhY2VQcmVmaXhlcy5nZXQoZSkucG9wKCl9KSk7ciYmdGhpcy5fbnNBZ25vc3RpY0xldmVsLS19fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0Lk5hbWVzcGFjZVNldFVwPXZvaWQgMDt2YXIgcj1hKDg5KSxuPWEoOTApLGk9YSg5MSkscz1hKDkyKSxvPWEoOTMpLGM9YSg5NCksbD1hKDgwKSxoPWEoOTUpLHU9YSg5Nik7Y29uc3QgZD17Y29uZmlnOnIuQ29uZmlnTmFtZXNwYWNlLGNvbm5lY3Rpb246bi5Db25uZWN0aW9uU2V0TmFtZXNwYWNlLGRhdGFzZXRzOmkuRGF0YXNldHNOYW1lc3BhY2UsbG9jYWxlU2V0OnMuTG9jYWxlU2V0TmFtZXNwYWNlLHNpZ25hdHVyZTpvLlNpZ25hdHVyZU5hbWVzcGFjZSxzdHlsZXNoZWV0OmMuU3R5bGVzaGVldE5hbWVzcGFjZSx0ZW1wbGF0ZTpsLlRlbXBsYXRlTmFtZXNwYWNlLHhkcDpoLlhkcE5hbWVzcGFjZSx4aHRtbDp1LlhodG1sTmFtZXNwYWNlfTt0Lk5hbWVzcGFjZVNldFVwPWR9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Db25maWdOYW1lc3BhY2U9dm9pZCAwO3ZhciByPWEoNzcpLG49YSg3NSksaT1hKDc2KSxzPWEoMik7Y29uc3Qgbz1yLk5hbWVzcGFjZUlkcy5jb25maWcuaWQ7Y2xhc3MgQWNyb2JhdCBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImFjcm9iYXQiLCEwKTt0aGlzLmFjcm9iYXQ3PW51bGw7dGhpcy5hdXRvU2F2ZT1udWxsO3RoaXMuY29tbW9uPW51bGw7dGhpcy52YWxpZGF0ZT1udWxsO3RoaXMudmFsaWRhdGVBcHByb3ZhbFNpZ25hdHVyZXM9bnVsbDt0aGlzLnN1Ym1pdFVybD1uZXcgbi5YRkFPYmplY3RBcnJheX19Y2xhc3MgQWNyb2JhdDcgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJhY3JvYmF0NyIsITApO3RoaXMuZHluYW1pY1JlbmRlcj1udWxsfX1jbGFzcyBBREJFX0pTQ29uc29sZSBleHRlbmRzIG4uT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sIkFEQkVfSlNDb25zb2xlIixbImRlbGVnYXRlIiwiRW5hYmxlIiwiRGlzYWJsZSJdKX19Y2xhc3MgQURCRV9KU0RlYnVnZ2VyIGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiQURCRV9KU0RlYnVnZ2VyIixbImRlbGVnYXRlIiwiRW5hYmxlIiwiRGlzYWJsZSJdKX19Y2xhc3MgQWRkU2lsZW50UHJpbnQgZXh0ZW5kcyBuLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImFkZFNpbGVudFByaW50Iil9fWNsYXNzIEFkZFZpZXdlclByZWZlcmVuY2VzIGV4dGVuZHMgbi5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJhZGRWaWV3ZXJQcmVmZXJlbmNlcyIpfX1jbGFzcyBBZGp1c3REYXRhIGV4dGVuZHMgbi5PcHRpb24xMHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJhZGp1c3REYXRhIil9fWNsYXNzIEFkb2JlRXh0ZW5zaW9uTGV2ZWwgZXh0ZW5kcyBuLkludGVnZXJPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiYWRvYmVFeHRlbnNpb25MZXZlbCIsMCwoZT0+ZT49MSYmZTw9OCkpfX1jbGFzcyBBZ2VudCBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImFnZW50IiwhMCk7dGhpcy5uYW1lPWUubmFtZT9lLm5hbWUudHJpbSgpOiIiO3RoaXMuY29tbW9uPW5ldyBuLlhGQU9iamVjdEFycmF5fX1jbGFzcyBBbHdheXNFbWJlZCBleHRlbmRzIG4uQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJhbHdheXNFbWJlZCIpfX1jbGFzcyBBbWQgZXh0ZW5kcyBuLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJhbWQiKX19Y2xhc3MgQXJlYSBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImFyZWEiKTt0aGlzLmxldmVsPSgwLGkuZ2V0SW50ZWdlcikoe2RhdGE6ZS5sZXZlbCxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT5lPj0xJiZlPD0zfSk7dGhpcy5uYW1lPSgwLGkuZ2V0U3RyaW5nT3B0aW9uKShlLm5hbWUsWyIiLCJiYXJjb2RlIiwiY29yZWluaXQiLCJkZXZpY2VEcml2ZXIiLCJmb250IiwiZ2VuZXJhbCIsImxheW91dCIsIm1lcmdlIiwic2NyaXB0Iiwic2lnbmF0dXJlIiwic291cmNlU2V0IiwidGVtcGxhdGVDYWNoZSJdKX19Y2xhc3MgQXR0cmlidXRlcyBleHRlbmRzIG4uT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImF0dHJpYnV0ZXMiLFsicHJlc2VydmUiLCJkZWxlZ2F0ZSIsImlnbm9yZSJdKX19Y2xhc3MgQXV0b1NhdmUgZXh0ZW5kcyBuLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJhdXRvU2F2ZSIsWyJkaXNhYmxlZCIsImVuYWJsZWQiXSl9fWNsYXNzIEJhc2UgZXh0ZW5kcyBuLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJiYXNlIil9fWNsYXNzIEJhdGNoT3V0cHV0IGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiYmF0Y2hPdXRwdXQiKTt0aGlzLmZvcm1hdD0oMCxpLmdldFN0cmluZ09wdGlvbikoZS5mb3JtYXQsWyJub25lIiwiY29uY2F0IiwiemlwIiwiemlwQ29tcHJlc3MiXSl9fWNsYXNzIEJlaGF2aW9yT3ZlcnJpZGUgZXh0ZW5kcyBuLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiYmVoYXZpb3JPdmVycmlkZSIpfVtuLiRmaW5hbGl6ZV0oKXt0aGlzW24uJGNvbnRlbnRdPW5ldyBNYXAodGhpc1tuLiRjb250ZW50XS50cmltKCkuc3BsaXQoL1xzKy8pLmZpbHRlcigoZT0+ZS5pbmNsdWRlcygiOiIpKSkubWFwKChlPT5lLnNwbGl0KCI6IiwyKSkpKX19Y2xhc3MgQ2FjaGUgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJjYWNoZSIsITApO3RoaXMudGVtcGxhdGVDYWNoZT1udWxsfX1jbGFzcyBDaGFuZ2UgZXh0ZW5kcyBuLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImNoYW5nZSIpfX1jbGFzcyBDb21tb24gZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJjb21tb24iLCEwKTt0aGlzLmRhdGE9bnVsbDt0aGlzLmxvY2FsZT1udWxsO3RoaXMubG9jYWxlU2V0PW51bGw7dGhpcy5tZXNzYWdpbmc9bnVsbDt0aGlzLnN1cHByZXNzQmFubmVyPW51bGw7dGhpcy50ZW1wbGF0ZT1udWxsO3RoaXMudmFsaWRhdGlvbk1lc3NhZ2luZz1udWxsO3RoaXMudmVyc2lvbkNvbnRyb2w9bnVsbDt0aGlzLmxvZz1uZXcgbi5YRkFPYmplY3RBcnJheX19Y2xhc3MgQ29tcHJlc3MgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJjb21wcmVzcyIpO3RoaXMuc2NvcGU9KDAsaS5nZXRTdHJpbmdPcHRpb24pKGUuc2NvcGUsWyJpbWFnZU9ubHkiLCJkb2N1bWVudCJdKX19Y2xhc3MgQ29tcHJlc3NMb2dpY2FsU3RydWN0dXJlIGV4dGVuZHMgbi5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJjb21wcmVzc0xvZ2ljYWxTdHJ1Y3R1cmUiKX19Y2xhc3MgQ29tcHJlc3NPYmplY3RTdHJlYW0gZXh0ZW5kcyBuLk9wdGlvbjEwe2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImNvbXByZXNzT2JqZWN0U3RyZWFtIil9fWNsYXNzIENvbXByZXNzaW9uIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiY29tcHJlc3Npb24iLCEwKTt0aGlzLmNvbXByZXNzTG9naWNhbFN0cnVjdHVyZT1udWxsO3RoaXMuY29tcHJlc3NPYmplY3RTdHJlYW09bnVsbDt0aGlzLmxldmVsPW51bGw7dGhpcy50eXBlPW51bGx9fWNsYXNzIENvbmZpZyBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImNvbmZpZyIsITApO3RoaXMuYWNyb2JhdD1udWxsO3RoaXMucHJlc2VudD1udWxsO3RoaXMudHJhY2U9bnVsbDt0aGlzLmFnZW50PW5ldyBuLlhGQU9iamVjdEFycmF5fX1jbGFzcyBDb25mb3JtYW5jZSBleHRlbmRzIG4uT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImNvbmZvcm1hbmNlIixbIkEiLCJCIl0pfX1jbGFzcyBDb250ZW50Q29weSBleHRlbmRzIG4uT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiY29udGVudENvcHkiKX19Y2xhc3MgQ29waWVzIGV4dGVuZHMgbi5JbnRlZ2VyT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImNvcGllcyIsMSwoZT0+ZT49MSkpfX1jbGFzcyBDcmVhdG9yIGV4dGVuZHMgbi5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiY3JlYXRvciIpfX1jbGFzcyBDdXJyZW50UGFnZSBleHRlbmRzIG4uSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJjdXJyZW50UGFnZSIsMCwoZT0+ZT49MCkpfX1jbGFzcyBEYXRhIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiZGF0YSIsITApO3RoaXMuYWRqdXN0RGF0YT1udWxsO3RoaXMuYXR0cmlidXRlcz1udWxsO3RoaXMuaW5jcmVtZW50YWxMb2FkPW51bGw7dGhpcy5vdXRwdXRYU0w9bnVsbDt0aGlzLnJhbmdlPW51bGw7dGhpcy5yZWNvcmQ9bnVsbDt0aGlzLnN0YXJ0Tm9kZT1udWxsO3RoaXMudXJpPW51bGw7dGhpcy53aW5kb3c9bnVsbDt0aGlzLnhzbD1udWxsO3RoaXMuZXhjbHVkZU5TPW5ldyBuLlhGQU9iamVjdEFycmF5O3RoaXMudHJhbnNmb3JtPW5ldyBuLlhGQU9iamVjdEFycmF5fX1jbGFzcyBEZWJ1ZyBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImRlYnVnIiwhMCk7dGhpcy51cmk9bnVsbH19Y2xhc3MgRGVmYXVsdFR5cGVmYWNlIGV4dGVuZHMgbi5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImRlZmF1bHRUeXBlZmFjZSIpO3RoaXMud3JpdGluZ1NjcmlwdD0oMCxpLmdldFN0cmluZ09wdGlvbikoZS53cml0aW5nU2NyaXB0LFsiKiIsIkFyYWJpYyIsIkN5cmlsbGljIiwiRWFzdEV1cm9wZWFuUm9tYW4iLCJHcmVlayIsIkhlYnJldyIsIkphcGFuZXNlIiwiS29yZWFuIiwiUm9tYW4iLCJTaW1wbGlmaWVkQ2hpbmVzZSIsIlRoYWkiLCJUcmFkaXRpb25hbENoaW5lc2UiLCJWaWV0bmFtZXNlIl0pfX1jbGFzcyBEZXN0aW5hdGlvbiBleHRlbmRzIG4uT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImRlc3RpbmF0aW9uIixbInBkZiIsInBjbCIsInBzIiwid2ViQ2xpZW50IiwienBsIl0pfX1jbGFzcyBEb2N1bWVudEFzc2VtYmx5IGV4dGVuZHMgbi5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJkb2N1bWVudEFzc2VtYmx5Iil9fWNsYXNzIERyaXZlciBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImRyaXZlciIsITApO3RoaXMubmFtZT1lLm5hbWU/ZS5uYW1lLnRyaW0oKToiIjt0aGlzLmZvbnRJbmZvPW51bGw7dGhpcy54ZGM9bnVsbH19Y2xhc3MgRHVwbGV4T3B0aW9uIGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiZHVwbGV4T3B0aW9uIixbInNpbXBsZXgiLCJkdXBsZXhGbGlwTG9uZ0VkZ2UiLCJkdXBsZXhGbGlwU2hvcnRFZGdlIl0pfX1jbGFzcyBEeW5hbWljUmVuZGVyIGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiZHluYW1pY1JlbmRlciIsWyJmb3JiaWRkZW4iLCJyZXF1aXJlZCJdKX19Y2xhc3MgRW1iZWQgZXh0ZW5kcyBuLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImVtYmVkIil9fWNsYXNzIEVuY3J5cHQgZXh0ZW5kcyBuLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImVuY3J5cHQiKX19Y2xhc3MgRW5jcnlwdGlvbiBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImVuY3J5cHRpb24iLCEwKTt0aGlzLmVuY3J5cHQ9bnVsbDt0aGlzLmVuY3J5cHRpb25MZXZlbD1udWxsO3RoaXMucGVybWlzc2lvbnM9bnVsbH19Y2xhc3MgRW5jcnlwdGlvbkxldmVsIGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiZW5jcnlwdGlvbkxldmVsIixbIjQwYml0IiwiMTI4Yml0Il0pfX1jbGFzcyBFbmZvcmNlIGV4dGVuZHMgbi5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiZW5mb3JjZSIpfX1jbGFzcyBFcXVhdGUgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJlcXVhdGUiKTt0aGlzLmZvcmNlPSgwLGkuZ2V0SW50ZWdlcikoe2RhdGE6ZS5mb3JjZSxkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTplPT4wPT09ZX0pO3RoaXMuZnJvbT1lLmZyb218fCIiO3RoaXMudG89ZS50b3x8IiJ9fWNsYXNzIEVxdWF0ZVJhbmdlIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiZXF1YXRlUmFuZ2UiKTt0aGlzLmZyb209ZS5mcm9tfHwiIjt0aGlzLnRvPWUudG98fCIiO3RoaXMuX3VuaWNvZGVSYW5nZT1lLnVuaWNvZGVSYW5nZXx8IiJ9Z2V0IHVuaWNvZGVSYW5nZSgpe2NvbnN0IGU9W10sdD0vVVwrKFswLTlhLWZBLUZdKykvLGE9dGhpcy5fdW5pY29kZVJhbmdlO2ZvcihsZXQgciBvZiBhLnNwbGl0KCIsIikubWFwKChlPT5lLnRyaW0oKSkpLmZpbHRlcigoZT0+ISFlKSkpe3I9ci5zcGxpdCgiLSIsMikubWFwKChlPT57Y29uc3QgYT1lLm1hdGNoKHQpO3JldHVybiBhP3BhcnNlSW50KGFbMV0sMTYpOjB9KSk7MT09PXIubGVuZ3RoJiZyLnB1c2goclswXSk7ZS5wdXNoKHIpfXJldHVybigwLHMuc2hhZG93KSh0aGlzLCJ1bmljb2RlUmFuZ2UiLGUpfX1jbGFzcyBFeGNsdWRlIGV4dGVuZHMgbi5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImV4Y2x1ZGUiKX1bbi4kZmluYWxpemVdKCl7dGhpc1tuLiRjb250ZW50XT10aGlzW24uJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMrLykuZmlsdGVyKChlPT5lJiZbImNhbGN1bGF0ZSIsImNsb3NlIiwiZW50ZXIiLCJleGl0IiwiaW5pdGlhbGl6ZSIsInJlYWR5IiwidmFsaWRhdGUiXS5pbmNsdWRlcyhlKSkpfX1jbGFzcyBFeGNsdWRlTlMgZXh0ZW5kcyBuLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJleGNsdWRlTlMiKX19Y2xhc3MgRmxpcExhYmVsIGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiZmxpcExhYmVsIixbInVzZVByaW50ZXJTZXR0aW5nIiwib24iLCJvZmYiXSl9fWNsYXNzIEZvbnRJbmZvIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiZm9udEluZm8iLCEwKTt0aGlzLmVtYmVkPW51bGw7dGhpcy5tYXA9bnVsbDt0aGlzLnN1YnNldEJlbG93PW51bGw7dGhpcy5hbHdheXNFbWJlZD1uZXcgbi5YRkFPYmplY3RBcnJheTt0aGlzLmRlZmF1bHRUeXBlZmFjZT1uZXcgbi5YRkFPYmplY3RBcnJheTt0aGlzLm5ldmVyRW1iZWQ9bmV3IG4uWEZBT2JqZWN0QXJyYXl9fWNsYXNzIEZvcm1GaWVsZEZpbGxpbmcgZXh0ZW5kcyBuLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImZvcm1GaWVsZEZpbGxpbmciKX19Y2xhc3MgR3JvdXBQYXJlbnQgZXh0ZW5kcyBuLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJncm91cFBhcmVudCIpfX1jbGFzcyBJZkVtcHR5IGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiaWZFbXB0eSIsWyJkYXRhVmFsdWUiLCJkYXRhR3JvdXAiLCJpZ25vcmUiLCJyZW1vdmUiXSl9fWNsYXNzIEluY2x1ZGVYRFBDb250ZW50IGV4dGVuZHMgbi5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiaW5jbHVkZVhEUENvbnRlbnQiKX19Y2xhc3MgSW5jcmVtZW50YWxMb2FkIGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiaW5jcmVtZW50YWxMb2FkIixbIm5vbmUiLCJmb3J3YXJkT25seSJdKX19Y2xhc3MgSW5jcmVtZW50YWxNZXJnZSBleHRlbmRzIG4uT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiaW5jcmVtZW50YWxNZXJnZSIpfX1jbGFzcyBJbnRlcmFjdGl2ZSBleHRlbmRzIG4uT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiaW50ZXJhY3RpdmUiKX19Y2xhc3MgSm9nIGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiam9nIixbInVzZVByaW50ZXJTZXR0aW5nIiwibm9uZSIsInBhZ2VTZXQiXSl9fWNsYXNzIExhYmVsUHJpbnRlciBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImxhYmVsUHJpbnRlciIsITApO3RoaXMubmFtZT0oMCxpLmdldFN0cmluZ09wdGlvbikoZS5uYW1lLFsienBsIiwiZHBsIiwiaXBsIiwidGNwbCJdKTt0aGlzLmJhdGNoT3V0cHV0PW51bGw7dGhpcy5mbGlwTGFiZWw9bnVsbDt0aGlzLmZvbnRJbmZvPW51bGw7dGhpcy54ZGM9bnVsbH19Y2xhc3MgTGF5b3V0IGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywibGF5b3V0IixbInBhZ2luYXRlIiwicGFuZWwiXSl9fWNsYXNzIExldmVsIGV4dGVuZHMgbi5JbnRlZ2VyT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImxldmVsIiwwLChlPT5lPjApKX19Y2xhc3MgTGluZWFyaXplZCBleHRlbmRzIG4uT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIobywibGluZWFyaXplZCIpfX1jbGFzcyBMb2NhbGUgZXh0ZW5kcyBuLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJsb2NhbGUiKX19Y2xhc3MgTG9jYWxlU2V0IGV4dGVuZHMgbi5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywibG9jYWxlU2V0Iil9fWNsYXNzIExvZyBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImxvZyIsITApO3RoaXMubW9kZT1udWxsO3RoaXMudGhyZXNob2xkPW51bGw7dGhpcy50bz1udWxsO3RoaXMudXJpPW51bGx9fWNsYXNzIE1hcEVsZW1lbnQgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJtYXAiLCEwKTt0aGlzLmVxdWF0ZT1uZXcgbi5YRkFPYmplY3RBcnJheTt0aGlzLmVxdWF0ZVJhbmdlPW5ldyBuLlhGQU9iamVjdEFycmF5fX1jbGFzcyBNZWRpdW1JbmZvIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywibWVkaXVtSW5mbyIsITApO3RoaXMubWFwPW51bGx9fWNsYXNzIE1lc3NhZ2UgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJtZXNzYWdlIiwhMCk7dGhpcy5tc2dJZD1udWxsO3RoaXMuc2V2ZXJpdHk9bnVsbH19Y2xhc3MgTWVzc2FnaW5nIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywibWVzc2FnaW5nIiwhMCk7dGhpcy5tZXNzYWdlPW5ldyBuLlhGQU9iamVjdEFycmF5fX1jbGFzcyBNb2RlIGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywibW9kZSIsWyJhcHBlbmQiLCJvdmVyd3JpdGUiXSl9fWNsYXNzIE1vZGlmeUFubm90cyBleHRlbmRzIG4uT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIobywibW9kaWZ5QW5ub3RzIil9fWNsYXNzIE1zZ0lkIGV4dGVuZHMgbi5JbnRlZ2VyT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sIm1zZ0lkIiwxLChlPT5lPj0xKSl9fWNsYXNzIE5hbWVBdHRyIGV4dGVuZHMgbi5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywibmFtZUF0dHIiKX19Y2xhc3MgTmV2ZXJFbWJlZCBleHRlbmRzIG4uQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJuZXZlckVtYmVkIil9fWNsYXNzIE51bWJlck9mQ29waWVzIGV4dGVuZHMgbi5JbnRlZ2VyT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sIm51bWJlck9mQ29waWVzIixudWxsLChlPT5lPj0yJiZlPD01KSl9fWNsYXNzIE9wZW5BY3Rpb24gZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJvcGVuQWN0aW9uIiwhMCk7dGhpcy5kZXN0aW5hdGlvbj1udWxsfX1jbGFzcyBPdXRwdXQgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJvdXRwdXQiLCEwKTt0aGlzLnRvPW51bGw7dGhpcy50eXBlPW51bGw7dGhpcy51cmk9bnVsbH19Y2xhc3MgT3V0cHV0QmluIGV4dGVuZHMgbi5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywib3V0cHV0QmluIil9fWNsYXNzIE91dHB1dFhTTCBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sIm91dHB1dFhTTCIsITApO3RoaXMudXJpPW51bGx9fWNsYXNzIE92ZXJwcmludCBleHRlbmRzIG4uT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sIm92ZXJwcmludCIsWyJub25lIiwiYm90aCIsImRyYXciLCJmaWVsZCJdKX19Y2xhc3MgUGFja2V0cyBleHRlbmRzIG4uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInBhY2tldHMiKX1bbi4kZmluYWxpemVdKCl7IioiIT09dGhpc1tuLiRjb250ZW50XSYmKHRoaXNbbi4kY29udGVudF09dGhpc1tuLiRjb250ZW50XS50cmltKCkuc3BsaXQoL1xzKy8pLmZpbHRlcigoZT0+WyJjb25maWciLCJkYXRhc2V0cyIsInRlbXBsYXRlIiwieGZkZiIsInhzbHQiXS5pbmNsdWRlcyhlKSkpKX19Y2xhc3MgUGFnZU9mZnNldCBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInBhZ2VPZmZzZXQiKTt0aGlzLng9KDAsaS5nZXRJbnRlZ2VyKSh7ZGF0YTplLngsZGVmYXVsdFZhbHVlOiJ1c2VYRENTZXR0aW5nIix2YWxpZGF0ZTplPT4hMH0pO3RoaXMueT0oMCxpLmdldEludGVnZXIpKHtkYXRhOmUueSxkZWZhdWx0VmFsdWU6InVzZVhEQ1NldHRpbmciLHZhbGlkYXRlOmU9PiEwfSl9fWNsYXNzIFBhZ2VSYW5nZSBleHRlbmRzIG4uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInBhZ2VSYW5nZSIpfVtuLiRmaW5hbGl6ZV0oKXtjb25zdCBlPXRoaXNbbi4kY29udGVudF0udHJpbSgpLnNwbGl0KC9ccysvKS5tYXAoKGU9PnBhcnNlSW50KGUsMTApKSksdD1bXTtmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjthKz0yKXQucHVzaChlLnNsaWNlKGEsYSsyKSk7dGhpc1tuLiRjb250ZW50XT10fX1jbGFzcyBQYWdpbmF0aW9uIGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywicGFnaW5hdGlvbiIsWyJzaW1wbGV4IiwiZHVwbGV4U2hvcnRFZGdlIiwiZHVwbGV4TG9uZ0VkZ2UiXSl9fWNsYXNzIFBhZ2luYXRpb25PdmVycmlkZSBleHRlbmRzIG4uT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInBhZ2luYXRpb25PdmVycmlkZSIsWyJub25lIiwiZm9yY2VEdXBsZXgiLCJmb3JjZUR1cGxleExvbmdFZGdlIiwiZm9yY2VEdXBsZXhTaG9ydEVkZ2UiLCJmb3JjZVNpbXBsZXgiXSl9fWNsYXNzIFBhcnQgZXh0ZW5kcyBuLkludGVnZXJPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywicGFydCIsMSwoZT0+ITEpKX19Y2xhc3MgUGNsIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywicGNsIiwhMCk7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5iYXRjaE91dHB1dD1udWxsO3RoaXMuZm9udEluZm89bnVsbDt0aGlzLmpvZz1udWxsO3RoaXMubWVkaXVtSW5mbz1udWxsO3RoaXMub3V0cHV0QmluPW51bGw7dGhpcy5wYWdlT2Zmc2V0PW51bGw7dGhpcy5zdGFwbGU9bnVsbDt0aGlzLnhkYz1udWxsfX1jbGFzcyBQZGYgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJwZGYiLCEwKTt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLmFkb2JlRXh0ZW5zaW9uTGV2ZWw9bnVsbDt0aGlzLmJhdGNoT3V0cHV0PW51bGw7dGhpcy5jb21wcmVzc2lvbj1udWxsO3RoaXMuY3JlYXRvcj1udWxsO3RoaXMuZW5jcnlwdGlvbj1udWxsO3RoaXMuZm9udEluZm89bnVsbDt0aGlzLmludGVyYWN0aXZlPW51bGw7dGhpcy5saW5lYXJpemVkPW51bGw7dGhpcy5vcGVuQWN0aW9uPW51bGw7dGhpcy5wZGZhPW51bGw7dGhpcy5wcm9kdWNlcj1udWxsO3RoaXMucmVuZGVyUG9saWN5PW51bGw7dGhpcy5zY3JpcHRNb2RlbD1udWxsO3RoaXMuc2lsZW50UHJpbnQ9bnVsbDt0aGlzLnN1Ym1pdEZvcm1hdD1udWxsO3RoaXMudGFnZ2VkPW51bGw7dGhpcy52ZXJzaW9uPW51bGw7dGhpcy52aWV3ZXJQcmVmZXJlbmNlcz1udWxsO3RoaXMueGRjPW51bGx9fWNsYXNzIFBkZmEgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJwZGZhIiwhMCk7dGhpcy5hbWQ9bnVsbDt0aGlzLmNvbmZvcm1hbmNlPW51bGw7dGhpcy5pbmNsdWRlWERQQ29udGVudD1udWxsO3RoaXMucGFydD1udWxsfX1jbGFzcyBQZXJtaXNzaW9ucyBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInBlcm1pc3Npb25zIiwhMCk7dGhpcy5hY2Nlc3NpYmxlQ29udGVudD1udWxsO3RoaXMuY2hhbmdlPW51bGw7dGhpcy5jb250ZW50Q29weT1udWxsO3RoaXMuZG9jdW1lbnRBc3NlbWJseT1udWxsO3RoaXMuZm9ybUZpZWxkRmlsbGluZz1udWxsO3RoaXMubW9kaWZ5QW5ub3RzPW51bGw7dGhpcy5wbGFpbnRleHRNZXRhZGF0YT1udWxsO3RoaXMucHJpbnQ9bnVsbDt0aGlzLnByaW50SGlnaFF1YWxpdHk9bnVsbH19Y2xhc3MgUGlja1RyYXlCeVBERlNpemUgZXh0ZW5kcyBuLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInBpY2tUcmF5QnlQREZTaXplIil9fWNsYXNzIFBpY3R1cmUgZXh0ZW5kcyBuLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJwaWN0dXJlIil9fWNsYXNzIFBsYWludGV4dE1ldGFkYXRhIGV4dGVuZHMgbi5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJwbGFpbnRleHRNZXRhZGF0YSIpfX1jbGFzcyBQcmVzZW5jZSBleHRlbmRzIG4uT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInByZXNlbmNlIixbInByZXNlcnZlIiwiZGlzc29sdmUiLCJkaXNzb2x2ZVN0cnVjdHVyZSIsImlnbm9yZSIsInJlbW92ZSJdKX19Y2xhc3MgUHJlc2VudCBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInByZXNlbnQiLCEwKTt0aGlzLmJlaGF2aW9yT3ZlcnJpZGU9bnVsbDt0aGlzLmNhY2hlPW51bGw7dGhpcy5jb21tb249bnVsbDt0aGlzLmNvcGllcz1udWxsO3RoaXMuZGVzdGluYXRpb249bnVsbDt0aGlzLmluY3JlbWVudGFsTWVyZ2U9bnVsbDt0aGlzLmxheW91dD1udWxsO3RoaXMub3V0cHV0PW51bGw7dGhpcy5vdmVycHJpbnQ9bnVsbDt0aGlzLnBhZ2luYXRpb249bnVsbDt0aGlzLnBhZ2luYXRpb25PdmVycmlkZT1udWxsO3RoaXMuc2NyaXB0PW51bGw7dGhpcy52YWxpZGF0ZT1udWxsO3RoaXMueGRwPW51bGw7dGhpcy5kcml2ZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXk7dGhpcy5sYWJlbFByaW50ZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXk7dGhpcy5wY2w9bmV3IG4uWEZBT2JqZWN0QXJyYXk7dGhpcy5wZGY9bmV3IG4uWEZBT2JqZWN0QXJyYXk7dGhpcy5wcz1uZXcgbi5YRkFPYmplY3RBcnJheTt0aGlzLnN1Ym1pdFVybD1uZXcgbi5YRkFPYmplY3RBcnJheTt0aGlzLndlYkNsaWVudD1uZXcgbi5YRkFPYmplY3RBcnJheTt0aGlzLnpwbD1uZXcgbi5YRkFPYmplY3RBcnJheX19Y2xhc3MgUHJpbnQgZXh0ZW5kcyBuLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInByaW50Iil9fWNsYXNzIFByaW50SGlnaFF1YWxpdHkgZXh0ZW5kcyBuLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInByaW50SGlnaFF1YWxpdHkiKX19Y2xhc3MgUHJpbnRTY2FsaW5nIGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywicHJpbnRTY2FsaW5nIixbImFwcGRlZmF1bHQiLCJub1NjYWxpbmciXSl9fWNsYXNzIFByaW50ZXJOYW1lIGV4dGVuZHMgbi5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywicHJpbnRlck5hbWUiKX19Y2xhc3MgUHJvZHVjZXIgZXh0ZW5kcyBuLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJwcm9kdWNlciIpfX1jbGFzcyBQcyBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInBzIiwhMCk7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5iYXRjaE91dHB1dD1udWxsO3RoaXMuZm9udEluZm89bnVsbDt0aGlzLmpvZz1udWxsO3RoaXMubWVkaXVtSW5mbz1udWxsO3RoaXMub3V0cHV0QmluPW51bGw7dGhpcy5zdGFwbGU9bnVsbDt0aGlzLnhkYz1udWxsfX1jbGFzcyBSYW5nZSBleHRlbmRzIG4uQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJyYW5nZSIpfVtuLiRmaW5hbGl6ZV0oKXt0aGlzW24uJGNvbnRlbnRdPXRoaXNbbi4kY29udGVudF0udHJpbSgpLnNwbGl0KC9ccyosXHMqLywyKS5tYXAoKGU9PmUuc3BsaXQoIi0iKS5tYXAoKGU9PnBhcnNlSW50KGUudHJpbSgpLDEwKSkpKSkuZmlsdGVyKChlPT5lLmV2ZXJ5KChlPT4haXNOYU4oZSkpKSkpLm1hcCgoZT0+ezE9PT1lLmxlbmd0aCYmZS5wdXNoKGVbMF0pO3JldHVybiBlfSkpfX1jbGFzcyBSZWNvcmQgZXh0ZW5kcyBuLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywicmVjb3JkIil9W24uJGZpbmFsaXplXSgpe3RoaXNbbi4kY29udGVudF09dGhpc1tuLiRjb250ZW50XS50cmltKCk7Y29uc3QgZT1wYXJzZUludCh0aGlzW24uJGNvbnRlbnRdLDEwKTshaXNOYU4oZSkmJmU+PTAmJih0aGlzW24uJGNvbnRlbnRdPWUpfX1jbGFzcyBSZWxldmFudCBleHRlbmRzIG4uQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJyZWxldmFudCIpfVtuLiRmaW5hbGl6ZV0oKXt0aGlzW24uJGNvbnRlbnRdPXRoaXNbbi4kY29udGVudF0udHJpbSgpLnNwbGl0KC9ccysvKX19Y2xhc3MgUmVuYW1lIGV4dGVuZHMgbi5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInJlbmFtZSIpfVtuLiRmaW5hbGl6ZV0oKXt0aGlzW24uJGNvbnRlbnRdPXRoaXNbbi4kY29udGVudF0udHJpbSgpOyh0aGlzW24uJGNvbnRlbnRdLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgieG1sIil8fG5ldyBSZWdFeHAoIltcXHB7TH1fXVtcXHB7TH1cXGQuX1xccHtNfS1dKiIsInUiKS50ZXN0KHRoaXNbbi4kY29udGVudF0pKSYmKDAscy53YXJuKSgiWEZBIC0gUmVuYW1lOiBpbnZhbGlkIFhGQSBuYW1lIil9fWNsYXNzIFJlbmRlclBvbGljeSBleHRlbmRzIG4uT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInJlbmRlclBvbGljeSIsWyJzZXJ2ZXIiLCJjbGllbnQiXSl9fWNsYXNzIFJ1blNjcmlwdHMgZXh0ZW5kcyBuLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJydW5TY3JpcHRzIixbImJvdGgiLCJjbGllbnQiLCJub25lIiwic2VydmVyIl0pfX1jbGFzcyBTY3JpcHQgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJzY3JpcHQiLCEwKTt0aGlzLmN1cnJlbnRQYWdlPW51bGw7dGhpcy5leGNsdWRlPW51bGw7dGhpcy5ydW5TY3JpcHRzPW51bGx9fWNsYXNzIFNjcmlwdE1vZGVsIGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywic2NyaXB0TW9kZWwiLFsiWEZBIiwibm9uZSJdKX19Y2xhc3MgU2V2ZXJpdHkgZXh0ZW5kcyBuLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJzZXZlcml0eSIsWyJpZ25vcmUiLCJlcnJvciIsImluZm9ybWF0aW9uIiwidHJhY2UiLCJ3YXJuaW5nIl0pfX1jbGFzcyBTaWxlbnRQcmludCBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInNpbGVudFByaW50IiwhMCk7dGhpcy5hZGRTaWxlbnRQcmludD1udWxsO3RoaXMucHJpbnRlck5hbWU9bnVsbH19Y2xhc3MgU3RhcGxlIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywic3RhcGxlIik7dGhpcy5tb2RlPSgwLGkuZ2V0U3RyaW5nT3B0aW9uKShlLm1vZGUsWyJ1c2VQcmludGVyU2V0dGluZyIsIm9uIiwib2ZmIl0pfX1jbGFzcyBTdGFydE5vZGUgZXh0ZW5kcyBuLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJzdGFydE5vZGUiKX19Y2xhc3MgU3RhcnRQYWdlIGV4dGVuZHMgbi5JbnRlZ2VyT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInN0YXJ0UGFnZSIsMCwoZT0+ITApKX19Y2xhc3MgU3VibWl0Rm9ybWF0IGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywic3VibWl0Rm9ybWF0IixbImh0bWwiLCJkZWxlZ2F0ZSIsImZkZiIsInhtbCIsInBkZiJdKX19Y2xhc3MgU3VibWl0VXJsIGV4dGVuZHMgbi5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywic3VibWl0VXJsIil9fWNsYXNzIFN1YnNldEJlbG93IGV4dGVuZHMgbi5JbnRlZ2VyT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInN1YnNldEJlbG93IiwxMDAsKGU9PmU+PTAmJmU8PTEwMCkpfX1jbGFzcyBTdXBwcmVzc0Jhbm5lciBleHRlbmRzIG4uT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIobywic3VwcHJlc3NCYW5uZXIiKX19Y2xhc3MgVGFnZ2VkIGV4dGVuZHMgbi5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJ0YWdnZWQiKX19Y2xhc3MgVGVtcGxhdGUgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJ0ZW1wbGF0ZSIsITApO3RoaXMuYmFzZT1udWxsO3RoaXMucmVsZXZhbnQ9bnVsbDt0aGlzLnN0YXJ0UGFnZT1udWxsO3RoaXMudXJpPW51bGw7dGhpcy54c2w9bnVsbH19Y2xhc3MgVGhyZXNob2xkIGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywidGhyZXNob2xkIixbInRyYWNlIiwiZXJyb3IiLCJpbmZvcm1hdGlvbiIsIndhcm5pbmciXSl9fWNsYXNzIFRvIGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywidG8iLFsibnVsbCIsIm1lbW9yeSIsInN0ZGVyciIsInN0ZG91dCIsInN5c3RlbSIsInVyaSJdKX19Y2xhc3MgVGVtcGxhdGVDYWNoZSBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInRlbXBsYXRlQ2FjaGUiKTt0aGlzLm1heEVudHJpZXM9KDAsaS5nZXRJbnRlZ2VyKSh7ZGF0YTplLm1heEVudHJpZXMsZGVmYXVsdFZhbHVlOjUsdmFsaWRhdGU6ZT0+ZT49MH0pfX1jbGFzcyBUcmFjZSBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInRyYWNlIiwhMCk7dGhpcy5hcmVhPW5ldyBuLlhGQU9iamVjdEFycmF5fX1jbGFzcyBUcmFuc2Zvcm0gZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJ0cmFuc2Zvcm0iLCEwKTt0aGlzLmdyb3VwUGFyZW50PW51bGw7dGhpcy5pZkVtcHR5PW51bGw7dGhpcy5uYW1lQXR0cj1udWxsO3RoaXMucGljdHVyZT1udWxsO3RoaXMucHJlc2VuY2U9bnVsbDt0aGlzLnJlbmFtZT1udWxsO3RoaXMud2hpdGVzcGFjZT1udWxsfX1jbGFzcyBUeXBlIGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywidHlwZSIsWyJub25lIiwiYXNjaWk4NSIsImFzY2lpSGV4IiwiY2NpdHRmYXgiLCJmbGF0ZSIsImx6dyIsInJ1bkxlbmd0aCIsIm5hdGl2ZSIsInhkcCIsIm1lcmdlZFhEUCJdKX19Y2xhc3MgVXJpIGV4dGVuZHMgbi5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywidXJpIil9fWNsYXNzIFZhbGlkYXRlIGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywidmFsaWRhdGUiLFsicHJlU3VibWl0IiwicHJlUHJpbnQiLCJwcmVFeGVjdXRlIiwicHJlU2F2ZSJdKX19Y2xhc3MgVmFsaWRhdGVBcHByb3ZhbFNpZ25hdHVyZXMgZXh0ZW5kcyBuLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywidmFsaWRhdGVBcHByb3ZhbFNpZ25hdHVyZXMiKX1bbi4kZmluYWxpemVdKCl7dGhpc1tuLiRjb250ZW50XT10aGlzW24uJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMrLykuZmlsdGVyKChlPT5bImRvY1JlYWR5IiwicG9zdFNpZ24iXS5pbmNsdWRlcyhlKSkpfX1jbGFzcyBWYWxpZGF0aW9uTWVzc2FnaW5nIGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywidmFsaWRhdGlvbk1lc3NhZ2luZyIsWyJhbGxNZXNzYWdlc0luZGl2aWR1YWxseSIsImFsbE1lc3NhZ2VzVG9nZXRoZXIiLCJmaXJzdE1lc3NhZ2VPbmx5Iiwibm9NZXNzYWdlcyJdKX19Y2xhc3MgVmVyc2lvbiBleHRlbmRzIG4uT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInZlcnNpb24iLFsiMS43IiwiMS42IiwiMS41IiwiMS40IiwiMS4zIiwiMS4yIl0pfX1jbGFzcyBWZXJzaW9uQ29udHJvbCBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sIlZlcnNpb25Db250cm9sIik7dGhpcy5vdXRwdXRCZWxvdz0oMCxpLmdldFN0cmluZ09wdGlvbikoZS5vdXRwdXRCZWxvdyxbIndhcm4iLCJlcnJvciIsInVwZGF0ZSJdKTt0aGlzLnNvdXJjZUFib3ZlPSgwLGkuZ2V0U3RyaW5nT3B0aW9uKShlLnNvdXJjZUFib3ZlLFsid2FybiIsImVycm9yIl0pO3RoaXMuc291cmNlQmVsb3c9KDAsaS5nZXRTdHJpbmdPcHRpb24pKGUuc291cmNlQmVsb3csWyJ1cGRhdGUiLCJtYWludGFpbiJdKX19Y2xhc3MgVmlld2VyUHJlZmVyZW5jZXMgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJ2aWV3ZXJQcmVmZXJlbmNlcyIsITApO3RoaXMuQURCRV9KU0NvbnNvbGU9bnVsbDt0aGlzLkFEQkVfSlNEZWJ1Z2dlcj1udWxsO3RoaXMuYWRkVmlld2VyUHJlZmVyZW5jZXM9bnVsbDt0aGlzLmR1cGxleE9wdGlvbj1udWxsO3RoaXMuZW5mb3JjZT1udWxsO3RoaXMubnVtYmVyT2ZDb3BpZXM9bnVsbDt0aGlzLnBhZ2VSYW5nZT1udWxsO3RoaXMucGlja1RyYXlCeVBERlNpemU9bnVsbDt0aGlzLnByaW50U2NhbGluZz1udWxsfX1jbGFzcyBXZWJDbGllbnQgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJ3ZWJDbGllbnQiLCEwKTt0aGlzLm5hbWU9ZS5uYW1lP2UubmFtZS50cmltKCk6IiI7dGhpcy5mb250SW5mbz1udWxsO3RoaXMueGRjPW51bGx9fWNsYXNzIFdoaXRlc3BhY2UgZXh0ZW5kcyBuLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJ3aGl0ZXNwYWNlIixbInByZXNlcnZlIiwibHRyaW0iLCJub3JtYWxpemUiLCJydHJpbSIsInRyaW0iXSl9fWNsYXNzIFdpbmRvdyBleHRlbmRzIG4uQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJ3aW5kb3ciKX1bbi4kZmluYWxpemVdKCl7Y29uc3QgZT10aGlzW24uJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8sMikubWFwKChlPT5wYXJzZUludChlLDEwKSkpO2lmKGUuc29tZSgoZT0+aXNOYU4oZSkpKSl0aGlzW24uJGNvbnRlbnRdPVswLDBdO2Vsc2V7MT09PWUubGVuZ3RoJiZlLnB1c2goZVswXSk7dGhpc1tuLiRjb250ZW50XT1lfX19Y2xhc3MgWGRjIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywieGRjIiwhMCk7dGhpcy51cmk9bmV3IG4uWEZBT2JqZWN0QXJyYXk7dGhpcy54c2w9bmV3IG4uWEZBT2JqZWN0QXJyYXl9fWNsYXNzIFhkcCBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInhkcCIsITApO3RoaXMucGFja2V0cz1udWxsfX1jbGFzcyBYc2wgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJ4c2wiLCEwKTt0aGlzLmRlYnVnPW51bGw7dGhpcy51cmk9bnVsbH19Y2xhc3MgWnBsIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywienBsIiwhMCk7dGhpcy5uYW1lPWUubmFtZT9lLm5hbWUudHJpbSgpOiIiO3RoaXMuYmF0Y2hPdXRwdXQ9bnVsbDt0aGlzLmZsaXBMYWJlbD1udWxsO3RoaXMuZm9udEluZm89bnVsbDt0aGlzLnhkYz1udWxsfX1jbGFzcyBDb25maWdOYW1lc3BhY2V7c3RhdGljW3IuJGJ1aWxkWEZBT2JqZWN0XShlLHQpe2lmKENvbmZpZ05hbWVzcGFjZS5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gQ29uZmlnTmFtZXNwYWNlW2VdKHQpfXN0YXRpYyBhY3JvYmF0KGUpe3JldHVybiBuZXcgQWNyb2JhdChlKX1zdGF0aWMgYWNyb2JhdDcoZSl7cmV0dXJuIG5ldyBBY3JvYmF0NyhlKX1zdGF0aWMgQURCRV9KU0NvbnNvbGUoZSl7cmV0dXJuIG5ldyBBREJFX0pTQ29uc29sZShlKX1zdGF0aWMgQURCRV9KU0RlYnVnZ2VyKGUpe3JldHVybiBuZXcgQURCRV9KU0RlYnVnZ2VyKGUpfXN0YXRpYyBhZGRTaWxlbnRQcmludChlKXtyZXR1cm4gbmV3IEFkZFNpbGVudFByaW50KGUpfXN0YXRpYyBhZGRWaWV3ZXJQcmVmZXJlbmNlcyhlKXtyZXR1cm4gbmV3IEFkZFZpZXdlclByZWZlcmVuY2VzKGUpfXN0YXRpYyBhZGp1c3REYXRhKGUpe3JldHVybiBuZXcgQWRqdXN0RGF0YShlKX1zdGF0aWMgYWRvYmVFeHRlbnNpb25MZXZlbChlKXtyZXR1cm4gbmV3IEFkb2JlRXh0ZW5zaW9uTGV2ZWwoZSl9c3RhdGljIGFnZW50KGUpe3JldHVybiBuZXcgQWdlbnQoZSl9c3RhdGljIGFsd2F5c0VtYmVkKGUpe3JldHVybiBuZXcgQWx3YXlzRW1iZWQoZSl9c3RhdGljIGFtZChlKXtyZXR1cm4gbmV3IEFtZChlKX1zdGF0aWMgYXJlYShlKXtyZXR1cm4gbmV3IEFyZWEoZSl9c3RhdGljIGF0dHJpYnV0ZXMoZSl7cmV0dXJuIG5ldyBBdHRyaWJ1dGVzKGUpfXN0YXRpYyBhdXRvU2F2ZShlKXtyZXR1cm4gbmV3IEF1dG9TYXZlKGUpfXN0YXRpYyBiYXNlKGUpe3JldHVybiBuZXcgQmFzZShlKX1zdGF0aWMgYmF0Y2hPdXRwdXQoZSl7cmV0dXJuIG5ldyBCYXRjaE91dHB1dChlKX1zdGF0aWMgYmVoYXZpb3JPdmVycmlkZShlKXtyZXR1cm4gbmV3IEJlaGF2aW9yT3ZlcnJpZGUoZSl9c3RhdGljIGNhY2hlKGUpe3JldHVybiBuZXcgQ2FjaGUoZSl9c3RhdGljIGNoYW5nZShlKXtyZXR1cm4gbmV3IENoYW5nZShlKX1zdGF0aWMgY29tbW9uKGUpe3JldHVybiBuZXcgQ29tbW9uKGUpfXN0YXRpYyBjb21wcmVzcyhlKXtyZXR1cm4gbmV3IENvbXByZXNzKGUpfXN0YXRpYyBjb21wcmVzc0xvZ2ljYWxTdHJ1Y3R1cmUoZSl7cmV0dXJuIG5ldyBDb21wcmVzc0xvZ2ljYWxTdHJ1Y3R1cmUoZSl9c3RhdGljIGNvbXByZXNzT2JqZWN0U3RyZWFtKGUpe3JldHVybiBuZXcgQ29tcHJlc3NPYmplY3RTdHJlYW0oZSl9c3RhdGljIGNvbXByZXNzaW9uKGUpe3JldHVybiBuZXcgQ29tcHJlc3Npb24oZSl9c3RhdGljIGNvbmZpZyhlKXtyZXR1cm4gbmV3IENvbmZpZyhlKX1zdGF0aWMgY29uZm9ybWFuY2UoZSl7cmV0dXJuIG5ldyBDb25mb3JtYW5jZShlKX1zdGF0aWMgY29udGVudENvcHkoZSl7cmV0dXJuIG5ldyBDb250ZW50Q29weShlKX1zdGF0aWMgY29waWVzKGUpe3JldHVybiBuZXcgQ29waWVzKGUpfXN0YXRpYyBjcmVhdG9yKGUpe3JldHVybiBuZXcgQ3JlYXRvcihlKX1zdGF0aWMgY3VycmVudFBhZ2UoZSl7cmV0dXJuIG5ldyBDdXJyZW50UGFnZShlKX1zdGF0aWMgZGF0YShlKXtyZXR1cm4gbmV3IERhdGEoZSl9c3RhdGljIGRlYnVnKGUpe3JldHVybiBuZXcgRGVidWcoZSl9c3RhdGljIGRlZmF1bHRUeXBlZmFjZShlKXtyZXR1cm4gbmV3IERlZmF1bHRUeXBlZmFjZShlKX1zdGF0aWMgZGVzdGluYXRpb24oZSl7cmV0dXJuIG5ldyBEZXN0aW5hdGlvbihlKX1zdGF0aWMgZG9jdW1lbnRBc3NlbWJseShlKXtyZXR1cm4gbmV3IERvY3VtZW50QXNzZW1ibHkoZSl9c3RhdGljIGRyaXZlcihlKXtyZXR1cm4gbmV3IERyaXZlcihlKX1zdGF0aWMgZHVwbGV4T3B0aW9uKGUpe3JldHVybiBuZXcgRHVwbGV4T3B0aW9uKGUpfXN0YXRpYyBkeW5hbWljUmVuZGVyKGUpe3JldHVybiBuZXcgRHluYW1pY1JlbmRlcihlKX1zdGF0aWMgZW1iZWQoZSl7cmV0dXJuIG5ldyBFbWJlZChlKX1zdGF0aWMgZW5jcnlwdChlKXtyZXR1cm4gbmV3IEVuY3J5cHQoZSl9c3RhdGljIGVuY3J5cHRpb24oZSl7cmV0dXJuIG5ldyBFbmNyeXB0aW9uKGUpfXN0YXRpYyBlbmNyeXB0aW9uTGV2ZWwoZSl7cmV0dXJuIG5ldyBFbmNyeXB0aW9uTGV2ZWwoZSl9c3RhdGljIGVuZm9yY2UoZSl7cmV0dXJuIG5ldyBFbmZvcmNlKGUpfXN0YXRpYyBlcXVhdGUoZSl7cmV0dXJuIG5ldyBFcXVhdGUoZSl9c3RhdGljIGVxdWF0ZVJhbmdlKGUpe3JldHVybiBuZXcgRXF1YXRlUmFuZ2UoZSl9c3RhdGljIGV4Y2x1ZGUoZSl7cmV0dXJuIG5ldyBFeGNsdWRlKGUpfXN0YXRpYyBleGNsdWRlTlMoZSl7cmV0dXJuIG5ldyBFeGNsdWRlTlMoZSl9c3RhdGljIGZsaXBMYWJlbChlKXtyZXR1cm4gbmV3IEZsaXBMYWJlbChlKX1zdGF0aWMgZm9udEluZm8oZSl7cmV0dXJuIG5ldyBGb250SW5mbyhlKX1zdGF0aWMgZm9ybUZpZWxkRmlsbGluZyhlKXtyZXR1cm4gbmV3IEZvcm1GaWVsZEZpbGxpbmcoZSl9c3RhdGljIGdyb3VwUGFyZW50KGUpe3JldHVybiBuZXcgR3JvdXBQYXJlbnQoZSl9c3RhdGljIGlmRW1wdHkoZSl7cmV0dXJuIG5ldyBJZkVtcHR5KGUpfXN0YXRpYyBpbmNsdWRlWERQQ29udGVudChlKXtyZXR1cm4gbmV3IEluY2x1ZGVYRFBDb250ZW50KGUpfXN0YXRpYyBpbmNyZW1lbnRhbExvYWQoZSl7cmV0dXJuIG5ldyBJbmNyZW1lbnRhbExvYWQoZSl9c3RhdGljIGluY3JlbWVudGFsTWVyZ2UoZSl7cmV0dXJuIG5ldyBJbmNyZW1lbnRhbE1lcmdlKGUpfXN0YXRpYyBpbnRlcmFjdGl2ZShlKXtyZXR1cm4gbmV3IEludGVyYWN0aXZlKGUpfXN0YXRpYyBqb2coZSl7cmV0dXJuIG5ldyBKb2coZSl9c3RhdGljIGxhYmVsUHJpbnRlcihlKXtyZXR1cm4gbmV3IExhYmVsUHJpbnRlcihlKX1zdGF0aWMgbGF5b3V0KGUpe3JldHVybiBuZXcgTGF5b3V0KGUpfXN0YXRpYyBsZXZlbChlKXtyZXR1cm4gbmV3IExldmVsKGUpfXN0YXRpYyBsaW5lYXJpemVkKGUpe3JldHVybiBuZXcgTGluZWFyaXplZChlKX1zdGF0aWMgbG9jYWxlKGUpe3JldHVybiBuZXcgTG9jYWxlKGUpfXN0YXRpYyBsb2NhbGVTZXQoZSl7cmV0dXJuIG5ldyBMb2NhbGVTZXQoZSl9c3RhdGljIGxvZyhlKXtyZXR1cm4gbmV3IExvZyhlKX1zdGF0aWMgbWFwKGUpe3JldHVybiBuZXcgTWFwRWxlbWVudChlKX1zdGF0aWMgbWVkaXVtSW5mbyhlKXtyZXR1cm4gbmV3IE1lZGl1bUluZm8oZSl9c3RhdGljIG1lc3NhZ2UoZSl7cmV0dXJuIG5ldyBNZXNzYWdlKGUpfXN0YXRpYyBtZXNzYWdpbmcoZSl7cmV0dXJuIG5ldyBNZXNzYWdpbmcoZSl9c3RhdGljIG1vZGUoZSl7cmV0dXJuIG5ldyBNb2RlKGUpfXN0YXRpYyBtb2RpZnlBbm5vdHMoZSl7cmV0dXJuIG5ldyBNb2RpZnlBbm5vdHMoZSl9c3RhdGljIG1zZ0lkKGUpe3JldHVybiBuZXcgTXNnSWQoZSl9c3RhdGljIG5hbWVBdHRyKGUpe3JldHVybiBuZXcgTmFtZUF0dHIoZSl9c3RhdGljIG5ldmVyRW1iZWQoZSl7cmV0dXJuIG5ldyBOZXZlckVtYmVkKGUpfXN0YXRpYyBudW1iZXJPZkNvcGllcyhlKXtyZXR1cm4gbmV3IE51bWJlck9mQ29waWVzKGUpfXN0YXRpYyBvcGVuQWN0aW9uKGUpe3JldHVybiBuZXcgT3BlbkFjdGlvbihlKX1zdGF0aWMgb3V0cHV0KGUpe3JldHVybiBuZXcgT3V0cHV0KGUpfXN0YXRpYyBvdXRwdXRCaW4oZSl7cmV0dXJuIG5ldyBPdXRwdXRCaW4oZSl9c3RhdGljIG91dHB1dFhTTChlKXtyZXR1cm4gbmV3IE91dHB1dFhTTChlKX1zdGF0aWMgb3ZlcnByaW50KGUpe3JldHVybiBuZXcgT3ZlcnByaW50KGUpfXN0YXRpYyBwYWNrZXRzKGUpe3JldHVybiBuZXcgUGFja2V0cyhlKX1zdGF0aWMgcGFnZU9mZnNldChlKXtyZXR1cm4gbmV3IFBhZ2VPZmZzZXQoZSl9c3RhdGljIHBhZ2VSYW5nZShlKXtyZXR1cm4gbmV3IFBhZ2VSYW5nZShlKX1zdGF0aWMgcGFnaW5hdGlvbihlKXtyZXR1cm4gbmV3IFBhZ2luYXRpb24oZSl9c3RhdGljIHBhZ2luYXRpb25PdmVycmlkZShlKXtyZXR1cm4gbmV3IFBhZ2luYXRpb25PdmVycmlkZShlKX1zdGF0aWMgcGFydChlKXtyZXR1cm4gbmV3IFBhcnQoZSl9c3RhdGljIHBjbChlKXtyZXR1cm4gbmV3IFBjbChlKX1zdGF0aWMgcGRmKGUpe3JldHVybiBuZXcgUGRmKGUpfXN0YXRpYyBwZGZhKGUpe3JldHVybiBuZXcgUGRmYShlKX1zdGF0aWMgcGVybWlzc2lvbnMoZSl7cmV0dXJuIG5ldyBQZXJtaXNzaW9ucyhlKX1zdGF0aWMgcGlja1RyYXlCeVBERlNpemUoZSl7cmV0dXJuIG5ldyBQaWNrVHJheUJ5UERGU2l6ZShlKX1zdGF0aWMgcGljdHVyZShlKXtyZXR1cm4gbmV3IFBpY3R1cmUoZSl9c3RhdGljIHBsYWludGV4dE1ldGFkYXRhKGUpe3JldHVybiBuZXcgUGxhaW50ZXh0TWV0YWRhdGEoZSl9c3RhdGljIHByZXNlbmNlKGUpe3JldHVybiBuZXcgUHJlc2VuY2UoZSl9c3RhdGljIHByZXNlbnQoZSl7cmV0dXJuIG5ldyBQcmVzZW50KGUpfXN0YXRpYyBwcmludChlKXtyZXR1cm4gbmV3IFByaW50KGUpfXN0YXRpYyBwcmludEhpZ2hRdWFsaXR5KGUpe3JldHVybiBuZXcgUHJpbnRIaWdoUXVhbGl0eShlKX1zdGF0aWMgcHJpbnRTY2FsaW5nKGUpe3JldHVybiBuZXcgUHJpbnRTY2FsaW5nKGUpfXN0YXRpYyBwcmludGVyTmFtZShlKXtyZXR1cm4gbmV3IFByaW50ZXJOYW1lKGUpfXN0YXRpYyBwcm9kdWNlcihlKXtyZXR1cm4gbmV3IFByb2R1Y2VyKGUpfXN0YXRpYyBwcyhlKXtyZXR1cm4gbmV3IFBzKGUpfXN0YXRpYyByYW5nZShlKXtyZXR1cm4gbmV3IFJhbmdlKGUpfXN0YXRpYyByZWNvcmQoZSl7cmV0dXJuIG5ldyBSZWNvcmQoZSl9c3RhdGljIHJlbGV2YW50KGUpe3JldHVybiBuZXcgUmVsZXZhbnQoZSl9c3RhdGljIHJlbmFtZShlKXtyZXR1cm4gbmV3IFJlbmFtZShlKX1zdGF0aWMgcmVuZGVyUG9saWN5KGUpe3JldHVybiBuZXcgUmVuZGVyUG9saWN5KGUpfXN0YXRpYyBydW5TY3JpcHRzKGUpe3JldHVybiBuZXcgUnVuU2NyaXB0cyhlKX1zdGF0aWMgc2NyaXB0KGUpe3JldHVybiBuZXcgU2NyaXB0KGUpfXN0YXRpYyBzY3JpcHRNb2RlbChlKXtyZXR1cm4gbmV3IFNjcmlwdE1vZGVsKGUpfXN0YXRpYyBzZXZlcml0eShlKXtyZXR1cm4gbmV3IFNldmVyaXR5KGUpfXN0YXRpYyBzaWxlbnRQcmludChlKXtyZXR1cm4gbmV3IFNpbGVudFByaW50KGUpfXN0YXRpYyBzdGFwbGUoZSl7cmV0dXJuIG5ldyBTdGFwbGUoZSl9c3RhdGljIHN0YXJ0Tm9kZShlKXtyZXR1cm4gbmV3IFN0YXJ0Tm9kZShlKX1zdGF0aWMgc3RhcnRQYWdlKGUpe3JldHVybiBuZXcgU3RhcnRQYWdlKGUpfXN0YXRpYyBzdWJtaXRGb3JtYXQoZSl7cmV0dXJuIG5ldyBTdWJtaXRGb3JtYXQoZSl9c3RhdGljIHN1Ym1pdFVybChlKXtyZXR1cm4gbmV3IFN1Ym1pdFVybChlKX1zdGF0aWMgc3Vic2V0QmVsb3coZSl7cmV0dXJuIG5ldyBTdWJzZXRCZWxvdyhlKX1zdGF0aWMgc3VwcHJlc3NCYW5uZXIoZSl7cmV0dXJuIG5ldyBTdXBwcmVzc0Jhbm5lcihlKX1zdGF0aWMgdGFnZ2VkKGUpe3JldHVybiBuZXcgVGFnZ2VkKGUpfXN0YXRpYyB0ZW1wbGF0ZShlKXtyZXR1cm4gbmV3IFRlbXBsYXRlKGUpfXN0YXRpYyB0ZW1wbGF0ZUNhY2hlKGUpe3JldHVybiBuZXcgVGVtcGxhdGVDYWNoZShlKX1zdGF0aWMgdGhyZXNob2xkKGUpe3JldHVybiBuZXcgVGhyZXNob2xkKGUpfXN0YXRpYyB0byhlKXtyZXR1cm4gbmV3IFRvKGUpfXN0YXRpYyB0cmFjZShlKXtyZXR1cm4gbmV3IFRyYWNlKGUpfXN0YXRpYyB0cmFuc2Zvcm0oZSl7cmV0dXJuIG5ldyBUcmFuc2Zvcm0oZSl9c3RhdGljIHR5cGUoZSl7cmV0dXJuIG5ldyBUeXBlKGUpfXN0YXRpYyB1cmkoZSl7cmV0dXJuIG5ldyBVcmkoZSl9c3RhdGljIHZhbGlkYXRlKGUpe3JldHVybiBuZXcgVmFsaWRhdGUoZSl9c3RhdGljIHZhbGlkYXRlQXBwcm92YWxTaWduYXR1cmVzKGUpe3JldHVybiBuZXcgVmFsaWRhdGVBcHByb3ZhbFNpZ25hdHVyZXMoZSl9c3RhdGljIHZhbGlkYXRpb25NZXNzYWdpbmcoZSl7cmV0dXJuIG5ldyBWYWxpZGF0aW9uTWVzc2FnaW5nKGUpfXN0YXRpYyB2ZXJzaW9uKGUpe3JldHVybiBuZXcgVmVyc2lvbihlKX1zdGF0aWMgdmVyc2lvbkNvbnRyb2woZSl7cmV0dXJuIG5ldyBWZXJzaW9uQ29udHJvbChlKX1zdGF0aWMgdmlld2VyUHJlZmVyZW5jZXMoZSl7cmV0dXJuIG5ldyBWaWV3ZXJQcmVmZXJlbmNlcyhlKX1zdGF0aWMgd2ViQ2xpZW50KGUpe3JldHVybiBuZXcgV2ViQ2xpZW50KGUpfXN0YXRpYyB3aGl0ZXNwYWNlKGUpe3JldHVybiBuZXcgV2hpdGVzcGFjZShlKX1zdGF0aWMgd2luZG93KGUpe3JldHVybiBuZXcgV2luZG93KGUpfXN0YXRpYyB4ZGMoZSl7cmV0dXJuIG5ldyBYZGMoZSl9c3RhdGljIHhkcChlKXtyZXR1cm4gbmV3IFhkcChlKX1zdGF0aWMgeHNsKGUpe3JldHVybiBuZXcgWHNsKGUpfXN0YXRpYyB6cGwoZSl7cmV0dXJuIG5ldyBacGwoZSl9fXQuQ29uZmlnTmFtZXNwYWNlPUNvbmZpZ05hbWVzcGFjZX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkNvbm5lY3Rpb25TZXROYW1lc3BhY2U9dm9pZCAwO3ZhciByPWEoNzcpLG49YSg3NSk7Y29uc3QgaT1yLk5hbWVzcGFjZUlkcy5jb25uZWN0aW9uU2V0LmlkO2NsYXNzIENvbm5lY3Rpb25TZXQgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihpLCJjb25uZWN0aW9uU2V0IiwhMCk7dGhpcy53c2RsQ29ubmVjdGlvbj1uZXcgbi5YRkFPYmplY3RBcnJheTt0aGlzLnhtbENvbm5lY3Rpb249bmV3IG4uWEZBT2JqZWN0QXJyYXk7dGhpcy54c2RDb25uZWN0aW9uPW5ldyBuLlhGQU9iamVjdEFycmF5fX1jbGFzcyBFZmZlY3RpdmVJbnB1dFBvbGljeSBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGksImVmZmVjdGl2ZUlucHV0UG9saWN5Iik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIEVmZmVjdGl2ZU91dHB1dFBvbGljeSBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGksImVmZmVjdGl2ZU91dHB1dFBvbGljeSIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBPcGVyYXRpb24gZXh0ZW5kcyBuLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihpLCJvcGVyYXRpb24iKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMuaW5wdXQ9ZS5pbnB1dHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5vdXRwdXQ9ZS5vdXRwdXR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgUm9vdEVsZW1lbnQgZXh0ZW5kcyBuLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihpLCJyb290RWxlbWVudCIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBTb2FwQWN0aW9uIGV4dGVuZHMgbi5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoaSwic29hcEFjdGlvbiIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBTb2FwQWRkcmVzcyBleHRlbmRzIG4uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGksInNvYXBBZGRyZXNzIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFVyaSBleHRlbmRzIG4uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGksInVyaSIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBXc2RsQWRkcmVzcyBleHRlbmRzIG4uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGksIndzZGxBZGRyZXNzIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFdzZGxDb25uZWN0aW9uIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoaSwid3NkbENvbm5lY3Rpb24iLCEwKTt0aGlzLmRhdGFEZXNjcmlwdGlvbj1lLmRhdGFEZXNjcmlwdGlvbnx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5lZmZlY3RpdmVJbnB1dFBvbGljeT1udWxsO3RoaXMuZWZmZWN0aXZlT3V0cHV0UG9saWN5PW51bGw7dGhpcy5vcGVyYXRpb249bnVsbDt0aGlzLnNvYXBBY3Rpb249bnVsbDt0aGlzLnNvYXBBZGRyZXNzPW51bGw7dGhpcy53c2RsQWRkcmVzcz1udWxsfX1jbGFzcyBYbWxDb25uZWN0aW9uIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoaSwieG1sQ29ubmVjdGlvbiIsITApO3RoaXMuZGF0YURlc2NyaXB0aW9uPWUuZGF0YURlc2NyaXB0aW9ufHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVyaT1udWxsfX1jbGFzcyBYc2RDb25uZWN0aW9uIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoaSwieHNkQ29ubmVjdGlvbiIsITApO3RoaXMuZGF0YURlc2NyaXB0aW9uPWUuZGF0YURlc2NyaXB0aW9ufHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnJvb3RFbGVtZW50PW51bGw7dGhpcy51cmk9bnVsbH19Y2xhc3MgQ29ubmVjdGlvblNldE5hbWVzcGFjZXtzdGF0aWNbci4kYnVpbGRYRkFPYmplY3RdKGUsdCl7aWYoQ29ubmVjdGlvblNldE5hbWVzcGFjZS5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gQ29ubmVjdGlvblNldE5hbWVzcGFjZVtlXSh0KX1zdGF0aWMgY29ubmVjdGlvblNldChlKXtyZXR1cm4gbmV3IENvbm5lY3Rpb25TZXQoZSl9c3RhdGljIGVmZmVjdGl2ZUlucHV0UG9saWN5KGUpe3JldHVybiBuZXcgRWZmZWN0aXZlSW5wdXRQb2xpY3koZSl9c3RhdGljIGVmZmVjdGl2ZU91dHB1dFBvbGljeShlKXtyZXR1cm4gbmV3IEVmZmVjdGl2ZU91dHB1dFBvbGljeShlKX1zdGF0aWMgb3BlcmF0aW9uKGUpe3JldHVybiBuZXcgT3BlcmF0aW9uKGUpfXN0YXRpYyByb290RWxlbWVudChlKXtyZXR1cm4gbmV3IFJvb3RFbGVtZW50KGUpfXN0YXRpYyBzb2FwQWN0aW9uKGUpe3JldHVybiBuZXcgU29hcEFjdGlvbihlKX1zdGF0aWMgc29hcEFkZHJlc3MoZSl7cmV0dXJuIG5ldyBTb2FwQWRkcmVzcyhlKX1zdGF0aWMgdXJpKGUpe3JldHVybiBuZXcgVXJpKGUpfXN0YXRpYyB3c2RsQWRkcmVzcyhlKXtyZXR1cm4gbmV3IFdzZGxBZGRyZXNzKGUpfXN0YXRpYyB3c2RsQ29ubmVjdGlvbihlKXtyZXR1cm4gbmV3IFdzZGxDb25uZWN0aW9uKGUpfXN0YXRpYyB4bWxDb25uZWN0aW9uKGUpe3JldHVybiBuZXcgWG1sQ29ubmVjdGlvbihlKX1zdGF0aWMgeHNkQ29ubmVjdGlvbihlKXtyZXR1cm4gbmV3IFhzZENvbm5lY3Rpb24oZSl9fXQuQ29ubmVjdGlvblNldE5hbWVzcGFjZT1Db25uZWN0aW9uU2V0TmFtZXNwYWNlfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuRGF0YXNldHNOYW1lc3BhY2U9dm9pZCAwO3ZhciByPWEoNzUpLG49YSg3Nyk7Y29uc3QgaT1uLk5hbWVzcGFjZUlkcy5kYXRhc2V0cy5pZDtjbGFzcyBEYXRhIGV4dGVuZHMgci5YbWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoaSwiZGF0YSIsZSl9W3IuJGlzTnNBZ25vc3RpY10oKXtyZXR1cm4hMH19Y2xhc3MgRGF0YXNldHMgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihpLCJkYXRhc2V0cyIsITApO3RoaXMuZGF0YT1udWxsO3RoaXMuU2lnbmF0dXJlPW51bGx9W3IuJG9uQ2hpbGRdKGUpe2NvbnN0IHQ9ZVtyLiRub2RlTmFtZV07KCJkYXRhIj09PXQmJmVbci4kbmFtZXNwYWNlSWRdPT09aXx8IlNpZ25hdHVyZSI9PT10JiZlW3IuJG5hbWVzcGFjZUlkXT09PW4uTmFtZXNwYWNlSWRzLnNpZ25hdHVyZS5pZCkmJih0aGlzW3RdPWUpO3RoaXNbci4kYXBwZW5kQ2hpbGRdKGUpfX1jbGFzcyBEYXRhc2V0c05hbWVzcGFjZXtzdGF0aWNbbi4kYnVpbGRYRkFPYmplY3RdKGUsdCl7aWYoRGF0YXNldHNOYW1lc3BhY2UuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIERhdGFzZXRzTmFtZXNwYWNlW2VdKHQpfXN0YXRpYyBkYXRhc2V0cyhlKXtyZXR1cm4gbmV3IERhdGFzZXRzKGUpfXN0YXRpYyBkYXRhKGUpe3JldHVybiBuZXcgRGF0YShlKX19dC5EYXRhc2V0c05hbWVzcGFjZT1EYXRhc2V0c05hbWVzcGFjZX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkxvY2FsZVNldE5hbWVzcGFjZT12b2lkIDA7dmFyIHI9YSg3Nyksbj1hKDc1KSxpPWEoNzYpO2NvbnN0IHM9ci5OYW1lc3BhY2VJZHMubG9jYWxlU2V0LmlkO2NsYXNzIENhbGVuZGFyU3ltYm9scyBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsImNhbGVuZGFyU3ltYm9scyIsITApO3RoaXMubmFtZT0iZ3JlZ29yaWFuIjt0aGlzLmRheU5hbWVzPW5ldyBuLlhGQU9iamVjdEFycmF5KDIpO3RoaXMuZXJhTmFtZXM9bnVsbDt0aGlzLm1lcmlkaWVtTmFtZXM9bnVsbDt0aGlzLm1vbnRoTmFtZXM9bmV3IG4uWEZBT2JqZWN0QXJyYXkoMil9fWNsYXNzIEN1cnJlbmN5U3ltYm9sIGV4dGVuZHMgbi5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywiY3VycmVuY3lTeW1ib2wiKTt0aGlzLm5hbWU9KDAsaS5nZXRTdHJpbmdPcHRpb24pKGUubmFtZSxbInN5bWJvbCIsImlzb25hbWUiLCJkZWNpbWFsIl0pfX1jbGFzcyBDdXJyZW5jeVN5bWJvbHMgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJjdXJyZW5jeVN5bWJvbHMiLCEwKTt0aGlzLmN1cnJlbmN5U3ltYm9sPW5ldyBuLlhGQU9iamVjdEFycmF5KDMpfX1jbGFzcyBEYXRlUGF0dGVybiBleHRlbmRzIG4uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsImRhdGVQYXR0ZXJuIik7dGhpcy5uYW1lPSgwLGkuZ2V0U3RyaW5nT3B0aW9uKShlLm5hbWUsWyJmdWxsIiwibG9uZyIsIm1lZCIsInNob3J0Il0pfX1jbGFzcyBEYXRlUGF0dGVybnMgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJkYXRlUGF0dGVybnMiLCEwKTt0aGlzLmRhdGVQYXR0ZXJuPW5ldyBuLlhGQU9iamVjdEFycmF5KDQpfX1jbGFzcyBEYXRlVGltZVN5bWJvbHMgZXh0ZW5kcyBuLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywiZGF0ZVRpbWVTeW1ib2xzIil9fWNsYXNzIERheSBleHRlbmRzIG4uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsImRheSIpfX1jbGFzcyBEYXlOYW1lcyBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsImRheU5hbWVzIiwhMCk7dGhpcy5hYmJyPSgwLGkuZ2V0SW50ZWdlcikoe2RhdGE6ZS5hYmJyLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy5kYXk9bmV3IG4uWEZBT2JqZWN0QXJyYXkoNyl9fWNsYXNzIEVyYSBleHRlbmRzIG4uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsImVyYSIpfX1jbGFzcyBFcmFOYW1lcyBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsImVyYU5hbWVzIiwhMCk7dGhpcy5lcmE9bmV3IG4uWEZBT2JqZWN0QXJyYXkoMil9fWNsYXNzIExvY2FsZSBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsImxvY2FsZSIsITApO3RoaXMuZGVzYz1lLmRlc2N8fCIiO3RoaXMubmFtZT0iaXNvbmFtZSI7dGhpcy5jYWxlbmRhclN5bWJvbHM9bnVsbDt0aGlzLmN1cnJlbmN5U3ltYm9scz1udWxsO3RoaXMuZGF0ZVBhdHRlcm5zPW51bGw7dGhpcy5kYXRlVGltZVN5bWJvbHM9bnVsbDt0aGlzLm51bWJlclBhdHRlcm5zPW51bGw7dGhpcy5udW1iZXJTeW1ib2xzPW51bGw7dGhpcy50aW1lUGF0dGVybnM9bnVsbDt0aGlzLnR5cGVGYWNlcz1udWxsfX1jbGFzcyBMb2NhbGVTZXQgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJsb2NhbGVTZXQiLCEwKTt0aGlzLmxvY2FsZT1uZXcgbi5YRkFPYmplY3RBcnJheX19Y2xhc3MgTWVyaWRpZW0gZXh0ZW5kcyBuLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJtZXJpZGllbSIpfX1jbGFzcyBNZXJpZGllbU5hbWVzIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywibWVyaWRpZW1OYW1lcyIsITApO3RoaXMubWVyaWRpZW09bmV3IG4uWEZBT2JqZWN0QXJyYXkoMil9fWNsYXNzIE1vbnRoIGV4dGVuZHMgbi5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywibW9udGgiKX19Y2xhc3MgTW9udGhOYW1lcyBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsIm1vbnRoTmFtZXMiLCEwKTt0aGlzLmFiYnI9KDAsaS5nZXRJbnRlZ2VyKSh7ZGF0YTplLmFiYnIsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLm1vbnRoPW5ldyBuLlhGQU9iamVjdEFycmF5KDEyKX19Y2xhc3MgTnVtYmVyUGF0dGVybiBleHRlbmRzIG4uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsIm51bWJlclBhdHRlcm4iKTt0aGlzLm5hbWU9KDAsaS5nZXRTdHJpbmdPcHRpb24pKGUubmFtZSxbImZ1bGwiLCJsb25nIiwibWVkIiwic2hvcnQiXSl9fWNsYXNzIE51bWJlclBhdHRlcm5zIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywibnVtYmVyUGF0dGVybnMiLCEwKTt0aGlzLm51bWJlclBhdHRlcm49bmV3IG4uWEZBT2JqZWN0QXJyYXkoNCl9fWNsYXNzIE51bWJlclN5bWJvbCBleHRlbmRzIG4uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsIm51bWJlclN5bWJvbCIpO3RoaXMubmFtZT0oMCxpLmdldFN0cmluZ09wdGlvbikoZS5uYW1lLFsiZGVjaW1hbCIsImdyb3VwaW5nIiwicGVyY2VudCIsIm1pbnVzIiwiemVybyJdKX19Y2xhc3MgTnVtYmVyU3ltYm9scyBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsIm51bWJlclN5bWJvbHMiLCEwKTt0aGlzLm51bWJlclN5bWJvbD1uZXcgbi5YRkFPYmplY3RBcnJheSg1KX19Y2xhc3MgVGltZVBhdHRlcm4gZXh0ZW5kcyBuLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJ0aW1lUGF0dGVybiIpO3RoaXMubmFtZT0oMCxpLmdldFN0cmluZ09wdGlvbikoZS5uYW1lLFsiZnVsbCIsImxvbmciLCJtZWQiLCJzaG9ydCJdKX19Y2xhc3MgVGltZVBhdHRlcm5zIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywidGltZVBhdHRlcm5zIiwhMCk7dGhpcy50aW1lUGF0dGVybj1uZXcgbi5YRkFPYmplY3RBcnJheSg0KX19Y2xhc3MgVHlwZUZhY2UgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJ0eXBlRmFjZSIsITApO3RoaXMubmFtZT0iInxlLm5hbWV9fWNsYXNzIFR5cGVGYWNlcyBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsInR5cGVGYWNlcyIsITApO3RoaXMudHlwZUZhY2U9bmV3IG4uWEZBT2JqZWN0QXJyYXl9fWNsYXNzIExvY2FsZVNldE5hbWVzcGFjZXtzdGF0aWNbci4kYnVpbGRYRkFPYmplY3RdKGUsdCl7aWYoTG9jYWxlU2V0TmFtZXNwYWNlLmhhc093blByb3BlcnR5KGUpKXJldHVybiBMb2NhbGVTZXROYW1lc3BhY2VbZV0odCl9c3RhdGljIGNhbGVuZGFyU3ltYm9scyhlKXtyZXR1cm4gbmV3IENhbGVuZGFyU3ltYm9scyhlKX1zdGF0aWMgY3VycmVuY3lTeW1ib2woZSl7cmV0dXJuIG5ldyBDdXJyZW5jeVN5bWJvbChlKX1zdGF0aWMgY3VycmVuY3lTeW1ib2xzKGUpe3JldHVybiBuZXcgQ3VycmVuY3lTeW1ib2xzKGUpfXN0YXRpYyBkYXRlUGF0dGVybihlKXtyZXR1cm4gbmV3IERhdGVQYXR0ZXJuKGUpfXN0YXRpYyBkYXRlUGF0dGVybnMoZSl7cmV0dXJuIG5ldyBEYXRlUGF0dGVybnMoZSl9c3RhdGljIGRhdGVUaW1lU3ltYm9scyhlKXtyZXR1cm4gbmV3IERhdGVUaW1lU3ltYm9scyhlKX1zdGF0aWMgZGF5KGUpe3JldHVybiBuZXcgRGF5KGUpfXN0YXRpYyBkYXlOYW1lcyhlKXtyZXR1cm4gbmV3IERheU5hbWVzKGUpfXN0YXRpYyBlcmEoZSl7cmV0dXJuIG5ldyBFcmEoZSl9c3RhdGljIGVyYU5hbWVzKGUpe3JldHVybiBuZXcgRXJhTmFtZXMoZSl9c3RhdGljIGxvY2FsZShlKXtyZXR1cm4gbmV3IExvY2FsZShlKX1zdGF0aWMgbG9jYWxlU2V0KGUpe3JldHVybiBuZXcgTG9jYWxlU2V0KGUpfXN0YXRpYyBtZXJpZGllbShlKXtyZXR1cm4gbmV3IE1lcmlkaWVtKGUpfXN0YXRpYyBtZXJpZGllbU5hbWVzKGUpe3JldHVybiBuZXcgTWVyaWRpZW1OYW1lcyhlKX1zdGF0aWMgbW9udGgoZSl7cmV0dXJuIG5ldyBNb250aChlKX1zdGF0aWMgbW9udGhOYW1lcyhlKXtyZXR1cm4gbmV3IE1vbnRoTmFtZXMoZSl9c3RhdGljIG51bWJlclBhdHRlcm4oZSl7cmV0dXJuIG5ldyBOdW1iZXJQYXR0ZXJuKGUpfXN0YXRpYyBudW1iZXJQYXR0ZXJucyhlKXtyZXR1cm4gbmV3IE51bWJlclBhdHRlcm5zKGUpfXN0YXRpYyBudW1iZXJTeW1ib2woZSl7cmV0dXJuIG5ldyBOdW1iZXJTeW1ib2woZSl9c3RhdGljIG51bWJlclN5bWJvbHMoZSl7cmV0dXJuIG5ldyBOdW1iZXJTeW1ib2xzKGUpfXN0YXRpYyB0aW1lUGF0dGVybihlKXtyZXR1cm4gbmV3IFRpbWVQYXR0ZXJuKGUpfXN0YXRpYyB0aW1lUGF0dGVybnMoZSl7cmV0dXJuIG5ldyBUaW1lUGF0dGVybnMoZSl9c3RhdGljIHR5cGVGYWNlKGUpe3JldHVybiBuZXcgVHlwZUZhY2UoZSl9c3RhdGljIHR5cGVGYWNlcyhlKXtyZXR1cm4gbmV3IFR5cGVGYWNlcyhlKX19dC5Mb2NhbGVTZXROYW1lc3BhY2U9TG9jYWxlU2V0TmFtZXNwYWNlfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuU2lnbmF0dXJlTmFtZXNwYWNlPXZvaWQgMDt2YXIgcj1hKDc3KSxuPWEoNzUpO2NvbnN0IGk9ci5OYW1lc3BhY2VJZHMuc2lnbmF0dXJlLmlkO2NsYXNzIFNpZ25hdHVyZSBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGksInNpZ25hdHVyZSIsITApfX1jbGFzcyBTaWduYXR1cmVOYW1lc3BhY2V7c3RhdGljW3IuJGJ1aWxkWEZBT2JqZWN0XShlLHQpe2lmKFNpZ25hdHVyZU5hbWVzcGFjZS5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gU2lnbmF0dXJlTmFtZXNwYWNlW2VdKHQpfXN0YXRpYyBzaWduYXR1cmUoZSl7cmV0dXJuIG5ldyBTaWduYXR1cmUoZSl9fXQuU2lnbmF0dXJlTmFtZXNwYWNlPVNpZ25hdHVyZU5hbWVzcGFjZX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlN0eWxlc2hlZXROYW1lc3BhY2U9dm9pZCAwO3ZhciByPWEoNzcpLG49YSg3NSk7Y29uc3QgaT1yLk5hbWVzcGFjZUlkcy5zdHlsZXNoZWV0LmlkO2NsYXNzIFN0eWxlc2hlZXQgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihpLCJzdHlsZXNoZWV0IiwhMCl9fWNsYXNzIFN0eWxlc2hlZXROYW1lc3BhY2V7c3RhdGljW3IuJGJ1aWxkWEZBT2JqZWN0XShlLHQpe2lmKFN0eWxlc2hlZXROYW1lc3BhY2UuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIFN0eWxlc2hlZXROYW1lc3BhY2VbZV0odCl9c3RhdGljIHN0eWxlc2hlZXQoZSl7cmV0dXJuIG5ldyBTdHlsZXNoZWV0KGUpfX10LlN0eWxlc2hlZXROYW1lc3BhY2U9U3R5bGVzaGVldE5hbWVzcGFjZX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlhkcE5hbWVzcGFjZT12b2lkIDA7dmFyIHI9YSg3Nyksbj1hKDc1KTtjb25zdCBpPXIuTmFtZXNwYWNlSWRzLnhkcC5pZDtjbGFzcyBYZHAgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihpLCJ4ZHAiLCEwKTt0aGlzLnV1aWQ9ZS51dWlkfHwiIjt0aGlzLnRpbWVTdGFtcD1lLnRpbWVTdGFtcHx8IiI7dGhpcy5jb25maWc9bnVsbDt0aGlzLmNvbm5lY3Rpb25TZXQ9bnVsbDt0aGlzLmRhdGFzZXRzPW51bGw7dGhpcy5sb2NhbGVTZXQ9bnVsbDt0aGlzLnN0eWxlc2hlZXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXk7dGhpcy50ZW1wbGF0ZT1udWxsfVtuLiRvbkNoaWxkQ2hlY2tdKGUpe2NvbnN0IHQ9ci5OYW1lc3BhY2VJZHNbZVtuLiRub2RlTmFtZV1dO3JldHVybiB0JiZlW24uJG5hbWVzcGFjZUlkXT09PXQuaWR9fWNsYXNzIFhkcE5hbWVzcGFjZXtzdGF0aWNbci4kYnVpbGRYRkFPYmplY3RdKGUsdCl7aWYoWGRwTmFtZXNwYWNlLmhhc093blByb3BlcnR5KGUpKXJldHVybiBYZHBOYW1lc3BhY2VbZV0odCl9c3RhdGljIHhkcChlKXtyZXR1cm4gbmV3IFhkcChlKX19dC5YZHBOYW1lc3BhY2U9WGRwTmFtZXNwYWNlfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuWGh0bWxOYW1lc3BhY2U9dm9pZCAwO3ZhciByPWEoNzUpLG49YSg3NyksaT1hKDgyKSxzPWEoNzYpO2NvbnN0IG89bi5OYW1lc3BhY2VJZHMueGh0bWwuaWQsYz1TeW1ib2woKSxsPW5ldyBTZXQoWyJjb2xvciIsImZvbnQiLCJmb250LWZhbWlseSIsImZvbnQtc2l6ZSIsImZvbnQtc3RyZXRjaCIsImZvbnQtc3R5bGUiLCJmb250LXdlaWdodCIsIm1hcmdpbiIsIm1hcmdpbi1ib3R0b20iLCJtYXJnaW4tbGVmdCIsIm1hcmdpbi1yaWdodCIsIm1hcmdpbi10b3AiLCJsZXR0ZXItc3BhY2luZyIsImxpbmUtaGVpZ2h0Iiwib3JwaGFucyIsInBhZ2UtYnJlYWstYWZ0ZXIiLCJwYWdlLWJyZWFrLWJlZm9yZSIsInBhZ2UtYnJlYWstaW5zaWRlIiwidGFiLWludGVydmFsIiwidGFiLXN0b3AiLCJ0ZXh0LWFsaWduIiwidGV4dC1kZWNvcmF0aW9uIiwidGV4dC1pbmRlbnQiLCJ2ZXJ0aWNhbC1hbGlnbiIsIndpZG93cyIsImtlcm5pbmctbW9kZSIsInhmYS1mb250LWhvcml6b250YWwtc2NhbGUiLCJ4ZmEtZm9udC12ZXJ0aWNhbC1zY2FsZSIsInhmYS1zcGFjZXJ1biIsInhmYS10YWItc3RvcHMiXSksaD1uZXcgTWFwKFtbInBhZ2UtYnJlYWstYWZ0ZXIiLCJicmVha0FmdGVyIl0sWyJwYWdlLWJyZWFrLWJlZm9yZSIsImJyZWFrQmVmb3JlIl0sWyJwYWdlLWJyZWFrLWluc2lkZSIsImJyZWFrSW5zaWRlIl0sWyJrZXJuaW5nLW1vZGUiLGU9PiJub25lIj09PWU/Im5vbmUiOiJub3JtYWwiXSxbInhmYS1mb250LWhvcml6b250YWwtc2NhbGUiLGU9PmBzY2FsZVgoJHtNYXRoLm1heCgwLE1hdGgubWluKHBhcnNlSW50KGUpLzEwMCkpLnRvRml4ZWQoMil9KWBdLFsieGZhLWZvbnQtdmVydGljYWwtc2NhbGUiLGU9PmBzY2FsZVkoJHtNYXRoLm1heCgwLE1hdGgubWluKHBhcnNlSW50KGUpLzEwMCkpLnRvRml4ZWQoMil9KWBdLFsieGZhLXNwYWNlcnVuIiwiIl0sWyJ4ZmEtdGFiLXN0b3BzIiwiIl0sWyJmb250LXNpemUiLChlLHQpPT57ZT10LmZvbnRTaXplPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpO3JldHVybigwLGkubWVhc3VyZVRvU3RyaW5nKSguOTkqZSl9XSxbImxldHRlci1zcGFjaW5nIixlPT4oMCxpLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpXSxbImxpbmUtaGVpZ2h0IixlPT4oMCxpLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpXSxbIm1hcmdpbiIsZT0+KDAsaS5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKV0sWyJtYXJnaW4tYm90dG9tIixlPT4oMCxpLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpXSxbIm1hcmdpbi1sZWZ0IixlPT4oMCxpLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpXSxbIm1hcmdpbi1yaWdodCIsZT0+KDAsaS5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKV0sWyJtYXJnaW4tdG9wIixlPT4oMCxpLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpXSxbInRleHQtaW5kZW50IixlPT4oMCxpLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpXSxbImZvbnQtZmFtaWx5IixlPT5lXSxbInZlcnRpY2FsLWFsaWduIixlPT4oMCxpLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpXV0pLHU9L1xzKy9nLGQ9L1tcclxuXSsvZyxmPS9cclxuPy9nO2Z1bmN0aW9uIG1hcFN0eWxlKGUsdCxhKXtjb25zdCBuPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoIWUpcmV0dXJuIG47Y29uc3Qgbz1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcihjb25zdFt0LGFdb2YgZS5zcGxpdCgiOyIpLm1hcCgoZT0+ZS5zcGxpdCgiOiIsMikpKSl7Y29uc3QgZT1oLmdldCh0KTtpZigiIj09PWUpY29udGludWU7bGV0IHI9YTtlJiYocj0ic3RyaW5nIj09dHlwZW9mIGU/ZTplKGEsbykpO3QuZW5kc1dpdGgoInNjYWxlIik/bi50cmFuc2Zvcm0/bi50cmFuc2Zvcm09YCR7blt0XX0gJHtyfWA6bi50cmFuc2Zvcm09cjpuW3QucmVwbGFjZUFsbCgvLShbYS16QS1aXSkvZywoKGUsdCk9PnQudG9VcHBlckNhc2UoKSkpXT1yfW4uZm9udEZhbWlseSYmKDAsaS5zZXRGb250RmFtaWx5KSh7dHlwZWZhY2U6bi5mb250RmFtaWx5LHdlaWdodDpuLmZvbnRXZWlnaHR8fCJub3JtYWwiLHBvc3R1cmU6bi5mb250U3R5bGV8fCJub3JtYWwiLHNpemU6by5mb250U2l6ZXx8MH0sdCx0W3IuJGdsb2JhbERhdGFdLmZvbnRGaW5kZXIsbik7aWYoYSYmbi52ZXJ0aWNhbEFsaWduJiYiMHB4IiE9PW4udmVydGljYWxBbGlnbiYmbi5mb250U2l6ZSl7Y29uc3QgZT0uNTgzLHQ9LjMzMyxhPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKG4uZm9udFNpemUpO24uZm9udFNpemU9KDAsaS5tZWFzdXJlVG9TdHJpbmcpKGEqZSk7bi52ZXJ0aWNhbEFsaWduPSgwLGkubWVhc3VyZVRvU3RyaW5nKShNYXRoLnNpZ24oKDAscy5nZXRNZWFzdXJlbWVudCkobi52ZXJ0aWNhbEFsaWduKSkqYSp0KX1hJiZuLmZvbnRTaXplJiYobi5mb250U2l6ZT1gY2FsYygke24uZm9udFNpemV9ICogdmFyKC0tc2NhbGUtZmFjdG9yKSlgKTsoMCxpLmZpeFRleHRJbmRlbnQpKG4pO3JldHVybiBufWNvbnN0IGc9bmV3IFNldChbImJvZHkiLCJodG1sIl0pO2NsYXNzIFhodG1sT2JqZWN0IGV4dGVuZHMgci5YbWxPYmplY3R7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihvLHQpO3RoaXNbY109ITE7dGhpcy5zdHlsZT1lLnN0eWxlfHwiIn1bci4kY2xlYW5dKGUpe3N1cGVyW3IuJGNsZWFuXShlKTt0aGlzLnN0eWxlPWZ1bmN0aW9uIGNoZWNrU3R5bGUoZSl7cmV0dXJuIGUuc3R5bGU/ZS5zdHlsZS50cmltKCkuc3BsaXQoL1xzKjtccyovKS5maWx0ZXIoKGU9PiEhZSkpLm1hcCgoZT0+ZS5zcGxpdCgvXHMqOlxzKi8sMikpKS5maWx0ZXIoKChbdCxhXSk9PnsiZm9udC1mYW1pbHkiPT09dCYmZVtyLiRnbG9iYWxEYXRhXS51c2VkVHlwZWZhY2VzLmFkZChhKTtyZXR1cm4gbC5oYXModCl9KSkubWFwKChlPT5lLmpvaW4oIjoiKSkpLmpvaW4oIjsiKToiIn0odGhpcyl9W3IuJGFjY2VwdFdoaXRlc3BhY2VdKCl7cmV0dXJuIWcuaGFzKHRoaXNbci4kbm9kZU5hbWVdKX1bci4kb25UZXh0XShlLHQ9ITEpe2lmKHQpdGhpc1tjXT0hMDtlbHNle2U9ZS5yZXBsYWNlKGQsIiIpO3RoaXMuc3R5bGUuaW5jbHVkZXMoInhmYS1zcGFjZXJ1bjp5ZXMiKXx8KGU9ZS5yZXBsYWNlKHUsIiAiKSl9ZSYmKHRoaXNbci4kY29udGVudF0rPWUpfVtyLiRwdXNoR2x5cGhzXShlLHQ9ITApe2NvbnN0IGE9T2JqZWN0LmNyZWF0ZShudWxsKSxuPXt0b3A6TmFOLGJvdHRvbTpOYU4sbGVmdDpOYU4scmlnaHQ6TmFOfTtsZXQgaT1udWxsO2Zvcihjb25zdFtlLHRdb2YgdGhpcy5zdHlsZS5zcGxpdCgiOyIpLm1hcCgoZT0+ZS5zcGxpdCgiOiIsMikpKSlzd2l0Y2goZSl7Y2FzZSJmb250LWZhbWlseSI6YS50eXBlZmFjZT0oMCxzLnN0cmlwUXVvdGVzKSh0KTticmVhaztjYXNlImZvbnQtc2l6ZSI6YS5zaXplPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKHQpO2JyZWFrO2Nhc2UiZm9udC13ZWlnaHQiOmEud2VpZ2h0PXQ7YnJlYWs7Y2FzZSJmb250LXN0eWxlIjphLnBvc3R1cmU9dDticmVhaztjYXNlImxldHRlci1zcGFjaW5nIjphLmxldHRlclNwYWNpbmc9KDAscy5nZXRNZWFzdXJlbWVudCkodCk7YnJlYWs7Y2FzZSJtYXJnaW4iOmNvbnN0IGU9dC5zcGxpdCgvIFx0LykubWFwKChlPT4oMCxzLmdldE1lYXN1cmVtZW50KShlKSkpO3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAxOm4udG9wPW4uYm90dG9tPW4ubGVmdD1uLnJpZ2h0PWVbMF07YnJlYWs7Y2FzZSAyOm4udG9wPW4uYm90dG9tPWVbMF07bi5sZWZ0PW4ucmlnaHQ9ZVsxXTticmVhaztjYXNlIDM6bi50b3A9ZVswXTtuLmJvdHRvbT1lWzJdO24ubGVmdD1uLnJpZ2h0PWVbMV07YnJlYWs7Y2FzZSA0Om4udG9wPWVbMF07bi5sZWZ0PWVbMV07bi5ib3R0b209ZVsyXTtuLnJpZ2h0PWVbM119YnJlYWs7Y2FzZSJtYXJnaW4tdG9wIjpuLnRvcD0oMCxzLmdldE1lYXN1cmVtZW50KSh0KTticmVhaztjYXNlIm1hcmdpbi1ib3R0b20iOm4uYm90dG9tPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKHQpO2JyZWFrO2Nhc2UibWFyZ2luLWxlZnQiOm4ubGVmdD0oMCxzLmdldE1lYXN1cmVtZW50KSh0KTticmVhaztjYXNlIm1hcmdpbi1yaWdodCI6bi5yaWdodD0oMCxzLmdldE1lYXN1cmVtZW50KSh0KTticmVhaztjYXNlImxpbmUtaGVpZ2h0IjppPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKHQpfWUucHVzaERhdGEoYSxuLGkpO2lmKHRoaXNbci4kY29udGVudF0pZS5hZGRTdHJpbmcodGhpc1tyLiRjb250ZW50XSk7ZWxzZSBmb3IoY29uc3QgdCBvZiB0aGlzW3IuJGdldENoaWxkcmVuXSgpKSIjdGV4dCIhPT10W3IuJG5vZGVOYW1lXT90W3IuJHB1c2hHbHlwaHNdKGUpOmUuYWRkU3RyaW5nKHRbci4kY29udGVudF0pO3QmJmUucG9wRm9udCgpfVtyLiR0b0hUTUxdKGUpe2NvbnN0IHQ9W107dGhpc1tyLiRleHRyYV09e2NoaWxkcmVuOnR9O3RoaXNbci4kY2hpbGRyZW5Ub0hUTUxdKHt9KTtpZigwPT09dC5sZW5ndGgmJiF0aGlzW3IuJGNvbnRlbnRdKXJldHVybiBzLkhUTUxSZXN1bHQuRU1QVFk7bGV0IGE7YT10aGlzW2NdP3RoaXNbci4kY29udGVudF0/dGhpc1tyLiRjb250ZW50XS5yZXBsYWNlKGYsIlxuIik6dm9pZCAwOnRoaXNbci4kY29udGVudF18fHZvaWQgMDtyZXR1cm4gcy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6dGhpc1tyLiRub2RlTmFtZV0sYXR0cmlidXRlczp7aHJlZjp0aGlzLmhyZWYsc3R5bGU6bWFwU3R5bGUodGhpcy5zdHlsZSx0aGlzLHRoaXNbY10pfSxjaGlsZHJlbjp0LHZhbHVlOmF9KX19Y2xhc3MgQSBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsImEiKTt0aGlzLmhyZWY9KDAsaS5maXhVUkwpKGUuaHJlZil8fCIifX1jbGFzcyBCIGV4dGVuZHMgWGh0bWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiYiIpfVtyLiRwdXNoR2x5cGhzXShlKXtlLnB1c2hGb250KHt3ZWlnaHQ6ImJvbGQifSk7c3VwZXJbci4kcHVzaEdseXBoc10oZSk7ZS5wb3BGb250KCl9fWNsYXNzIEJvZHkgZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJib2R5Iil9W3IuJHRvSFRNTF0oZSl7Y29uc3QgdD1zdXBlcltyLiR0b0hUTUxdKGUpLHtodG1sOmF9PXQ7aWYoIWEpcmV0dXJuIHMuSFRNTFJlc3VsdC5FTVBUWTthLm5hbWU9ImRpdiI7YS5hdHRyaWJ1dGVzLmNsYXNzPVsieGZhUmljaCJdO3JldHVybiB0fX1jbGFzcyBCciBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsImJyIil9W3IuJHRleHRdKCl7cmV0dXJuIlxuIn1bci4kcHVzaEdseXBoc10oZSl7ZS5hZGRTdHJpbmcoIlxuIil9W3IuJHRvSFRNTF0oZSl7cmV0dXJuIHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJiciJ9KX19Y2xhc3MgSHRtbCBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsImh0bWwiKX1bci4kdG9IVE1MXShlKXtjb25zdCB0PVtdO3RoaXNbci4kZXh0cmFdPXtjaGlsZHJlbjp0fTt0aGlzW3IuJGNoaWxkcmVuVG9IVE1MXSh7fSk7aWYoMD09PXQubGVuZ3RoKXJldHVybiBzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixhdHRyaWJ1dGVzOntjbGFzczpbInhmYVJpY2giXSxzdHlsZTp7fX0sdmFsdWU6dGhpc1tyLiRjb250ZW50XXx8IiJ9KTtpZigxPT09dC5sZW5ndGgpe2NvbnN0IGU9dFswXTtpZihlLmF0dHJpYnV0ZXMmJmUuYXR0cmlidXRlcy5jbGFzcy5pbmNsdWRlcygieGZhUmljaCIpKXJldHVybiBzLkhUTUxSZXN1bHQuc3VjY2VzcyhlKX1yZXR1cm4gcy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFSaWNoIl0sc3R5bGU6e319LGNoaWxkcmVuOnR9KX19Y2xhc3MgSSBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsImkiKX1bci4kcHVzaEdseXBoc10oZSl7ZS5wdXNoRm9udCh7cG9zdHVyZToiaXRhbGljIn0pO3N1cGVyW3IuJHB1c2hHbHlwaHNdKGUpO2UucG9wRm9udCgpfX1jbGFzcyBMaSBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsImxpIil9fWNsYXNzIE9sIGV4dGVuZHMgWGh0bWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwib2wiKX19Y2xhc3MgUCBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsInAiKX1bci4kcHVzaEdseXBoc10oZSl7c3VwZXJbci4kcHVzaEdseXBoc10oZSwhMSk7ZS5hZGRTdHJpbmcoIlxuIik7ZS5hZGRQYXJhKCk7ZS5wb3BGb250KCl9W3IuJHRleHRdKCl7cmV0dXJuIHRoaXNbci4kZ2V0UGFyZW50XSgpW3IuJGdldENoaWxkcmVuXSgpLmF0KC0xKT09PXRoaXM/c3VwZXJbci4kdGV4dF0oKTpzdXBlcltyLiR0ZXh0XSgpKyJcbiJ9fWNsYXNzIFNwYW4gZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJzcGFuIil9fWNsYXNzIFN1YiBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsInN1YiIpfX1jbGFzcyBTdXAgZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJzdXAiKX19Y2xhc3MgVWwgZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJ1bCIpfX1jbGFzcyBYaHRtbE5hbWVzcGFjZXtzdGF0aWNbbi4kYnVpbGRYRkFPYmplY3RdKGUsdCl7aWYoWGh0bWxOYW1lc3BhY2UuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIFhodG1sTmFtZXNwYWNlW2VdKHQpfXN0YXRpYyBhKGUpe3JldHVybiBuZXcgQShlKX1zdGF0aWMgYihlKXtyZXR1cm4gbmV3IEIoZSl9c3RhdGljIGJvZHkoZSl7cmV0dXJuIG5ldyBCb2R5KGUpfXN0YXRpYyBicihlKXtyZXR1cm4gbmV3IEJyKGUpfXN0YXRpYyBodG1sKGUpe3JldHVybiBuZXcgSHRtbChlKX1zdGF0aWMgaShlKXtyZXR1cm4gbmV3IEkoZSl9c3RhdGljIGxpKGUpe3JldHVybiBuZXcgTGkoZSl9c3RhdGljIG9sKGUpe3JldHVybiBuZXcgT2woZSl9c3RhdGljIHAoZSl7cmV0dXJuIG5ldyBQKGUpfXN0YXRpYyBzcGFuKGUpe3JldHVybiBuZXcgU3BhbihlKX1zdGF0aWMgc3ViKGUpe3JldHVybiBuZXcgU3ViKGUpfXN0YXRpYyBzdXAoZSl7cmV0dXJuIG5ldyBTdXAoZSl9c3RhdGljIHVsKGUpe3JldHVybiBuZXcgVWwoZSl9fXQuWGh0bWxOYW1lc3BhY2U9WGh0bWxOYW1lc3BhY2V9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Vbmtub3duTmFtZXNwYWNlPXZvaWQgMDt2YXIgcj1hKDc3KSxuPWEoNzUpO2NsYXNzIFVua25vd25OYW1lc3BhY2V7Y29uc3RydWN0b3IoZSl7dGhpcy5uYW1lc3BhY2VJZD1lfVtyLiRidWlsZFhGQU9iamVjdF0oZSx0KXtyZXR1cm4gbmV3IG4uWG1sT2JqZWN0KHRoaXMubmFtZXNwYWNlSWQsZSx0KX19dC5Vbmtub3duTmFtZXNwYWNlPVVua25vd25OYW1lc3BhY2V9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5EYXRhc2V0UmVhZGVyPXZvaWQgMDt2YXIgcj1hKDIpLG49YSg0KSxpPWEoNjQpO2Z1bmN0aW9uIGRlY29kZVN0cmluZyhlKXt0cnl7cmV0dXJuKDAsci5zdHJpbmdUb1VURjhTdHJpbmcpKGUpfWNhdGNoKHQpeygwLHIud2FybikoYFVURi04IGRlY29kaW5nIGZhaWxlZDogIiR7dH0iLmApO3JldHVybiBlfX1jbGFzcyBEYXRhc2V0WE1MUGFyc2VyIGV4dGVuZHMgaS5TaW1wbGVYTUxQYXJzZXJ7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5ub2RlPW51bGx9b25FbmRFbGVtZW50KGUpe2NvbnN0IHQ9c3VwZXIub25FbmRFbGVtZW50KGUpO2lmKHQmJiJ4ZmE6ZGF0YXNldHMiPT09ZSl7dGhpcy5ub2RlPXQ7dGhyb3cgbmV3IEVycm9yKCJBYm9ydGluZyBEYXRhc2V0WE1MUGFyc2VyLiIpfX19dC5EYXRhc2V0UmVhZGVyPWNsYXNzIERhdGFzZXRSZWFkZXJ7Y29uc3RydWN0b3IoZSl7aWYoZS5kYXRhc2V0cyl0aGlzLm5vZGU9bmV3IGkuU2ltcGxlWE1MUGFyc2VyKHtoYXNBdHRyaWJ1dGVzOiEwfSkucGFyc2VGcm9tU3RyaW5nKGUuZGF0YXNldHMpLmRvY3VtZW50RWxlbWVudDtlbHNle2NvbnN0IHQ9bmV3IERhdGFzZXRYTUxQYXJzZXIoe2hhc0F0dHJpYnV0ZXM6ITB9KTt0cnl7dC5wYXJzZUZyb21TdHJpbmcoZVsieGRwOnhkcCJdKX1jYXRjaChlKXt9dGhpcy5ub2RlPXQubm9kZX19Z2V0VmFsdWUoZSl7aWYoIXRoaXMubm9kZXx8IWUpcmV0dXJuIiI7Y29uc3QgdD10aGlzLm5vZGUuc2VhcmNoTm9kZSgoMCxuLnBhcnNlWEZBUGF0aCkoZSksMCk7aWYoIXQpcmV0dXJuIiI7Y29uc3QgYT10LmZpcnN0Q2hpbGQ7cmV0dXJuIGEmJiJ2YWx1ZSI9PT1hLm5vZGVOYW1lP3QuY2hpbGRyZW4ubWFwKChlPT5kZWNvZGVTdHJpbmcoZS50ZXh0Q29udGVudCkpKTpkZWNvZGVTdHJpbmcodC50ZXh0Q29udGVudCl9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlhSZWY9dm9pZCAwO3ZhciByPWEoMiksbj1hKDMpLGk9YSg0KSxzPWEoMTUpLG89YSg1KSxjPWEoNjUpO3QuWFJlZj1jbGFzcyBYUmVme2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5zdHJlYW09ZTt0aGlzLnBkZk1hbmFnZXI9dDt0aGlzLmVudHJpZXM9W107dGhpcy54cmVmc3Rtcz1PYmplY3QuY3JlYXRlKG51bGwpO3RoaXMuX2NhY2hlTWFwPW5ldyBNYXA7dGhpcy5fcGVuZGluZ1JlZnM9bmV3IG4uUmVmU2V0O3RoaXMuc3RhdHM9bmV3IGkuRG9jU3RhdHModC5tc2dIYW5kbGVyKTt0aGlzLl9uZXdSZWZOdW09bnVsbH1nZXROZXdSZWYoKXtudWxsPT09dGhpcy5fbmV3UmVmTnVtJiYodGhpcy5fbmV3UmVmTnVtPXRoaXMuZW50cmllcy5sZW5ndGh8fDEpO3JldHVybiBuLlJlZi5nZXQodGhpcy5fbmV3UmVmTnVtKyssMCl9cmVzZXROZXdSZWYoKXt0aGlzLl9uZXdSZWZOdW09bnVsbH1zZXRTdGFydFhSZWYoZSl7dGhpcy5zdGFydFhSZWZRdWV1ZT1bZV19cGFyc2UoZT0hMSl7bGV0IHQsYSxzO2lmKGUpeygwLHIud2FybikoIkluZGV4aW5nIGFsbCBQREYgb2JqZWN0cyIpO3Q9dGhpcy5pbmRleE9iamVjdHMoKX1lbHNlIHQ9dGhpcy5yZWFkWFJlZigpO3QuYXNzaWduWHJlZih0aGlzKTt0aGlzLnRyYWlsZXI9dDt0cnl7YT10LmdldCgiRW5jcnlwdCIpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsci53YXJuKShgWFJlZi5wYXJzZSAtIEludmFsaWQgIkVuY3J5cHQiIHJlZmVyZW5jZTogIiR7ZX0iLmApfWlmKGEgaW5zdGFuY2VvZiBuLkRpY3Qpe2NvbnN0IGU9dC5nZXQoIklEIikscj1lJiZlLmxlbmd0aD9lWzBdOiIiO2Euc3VwcHJlc3NFbmNyeXB0aW9uPSEwO3RoaXMuZW5jcnlwdD1uZXcgYy5DaXBoZXJUcmFuc2Zvcm1GYWN0b3J5KGEscix0aGlzLnBkZk1hbmFnZXIucGFzc3dvcmQpfXRyeXtzPXQuZ2V0KCJSb290Iil9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIGkuTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxyLndhcm4pKGBYUmVmLnBhcnNlIC0gSW52YWxpZCAiUm9vdCIgcmVmZXJlbmNlOiAiJHtlfSIuYCl9aWYocyBpbnN0YW5jZW9mIG4uRGljdCl0cnl7aWYocy5nZXQoIlBhZ2VzIilpbnN0YW5jZW9mIG4uRGljdCl7dGhpcy5yb290PXM7cmV0dXJufX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLHIud2FybikoYFhSZWYucGFyc2UgLSBJbnZhbGlkICJQYWdlcyIgcmVmZXJlbmNlOiAiJHtlfSIuYCl9aWYoIWUpdGhyb3cgbmV3IGkuWFJlZlBhcnNlRXhjZXB0aW9uO3Rocm93IG5ldyByLkludmFsaWRQREZFeGNlcHRpb24oIkludmFsaWQgUm9vdCByZWZlcmVuY2UuIil9cHJvY2Vzc1hSZWZUYWJsZShlKXsidGFibGVTdGF0ZSJpbiB0aGlzfHwodGhpcy50YWJsZVN0YXRlPXtlbnRyeU51bTowLHN0cmVhbVBvczplLmxleGVyLnN0cmVhbS5wb3MscGFyc2VyQnVmMTplLmJ1ZjEscGFyc2VyQnVmMjplLmJ1ZjJ9KTtjb25zdCB0PXRoaXMucmVhZFhSZWZUYWJsZShlKTtpZighKDAsbi5pc0NtZCkodCwidHJhaWxlciIpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgdGFibGU6IGNvdWxkIG5vdCBmaW5kIHRyYWlsZXIgZGljdGlvbmFyeSIpO2xldCBhPWUuZ2V0T2JqKCk7YSBpbnN0YW5jZW9mIG4uRGljdHx8IWEuZGljdHx8KGE9YS5kaWN0KTtpZighKGEgaW5zdGFuY2VvZiBuLkRpY3QpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgdGFibGU6IGNvdWxkIG5vdCBwYXJzZSB0cmFpbGVyIGRpY3Rpb25hcnkiKTtkZWxldGUgdGhpcy50YWJsZVN0YXRlO3JldHVybiBhfXJlYWRYUmVmVGFibGUoZSl7Y29uc3QgdD1lLmxleGVyLnN0cmVhbSxhPXRoaXMudGFibGVTdGF0ZTt0LnBvcz1hLnN0cmVhbVBvcztlLmJ1ZjE9YS5wYXJzZXJCdWYxO2UuYnVmMj1hLnBhcnNlckJ1ZjI7bGV0IGk7Zm9yKDs7KXtpZighKCJmaXJzdEVudHJ5TnVtImluIGEpfHwhKCJlbnRyeUNvdW50ImluIGEpKXtpZigoMCxuLmlzQ21kKShpPWUuZ2V0T2JqKCksInRyYWlsZXIiKSlicmVhazthLmZpcnN0RW50cnlOdW09aTthLmVudHJ5Q291bnQ9ZS5nZXRPYmooKX1sZXQgcz1hLmZpcnN0RW50cnlOdW07Y29uc3Qgbz1hLmVudHJ5Q291bnQ7aWYoIU51bWJlci5pc0ludGVnZXIocyl8fCFOdW1iZXIuaXNJbnRlZ2VyKG8pKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgdGFibGU6IHdyb25nIHR5cGVzIGluIHN1YnNlY3Rpb24gaGVhZGVyIik7Zm9yKGxldCBpPWEuZW50cnlOdW07aTxvO2krKyl7YS5zdHJlYW1Qb3M9dC5wb3M7YS5lbnRyeU51bT1pO2EucGFyc2VyQnVmMT1lLmJ1ZjE7YS5wYXJzZXJCdWYyPWUuYnVmMjtjb25zdCBjPXt9O2Mub2Zmc2V0PWUuZ2V0T2JqKCk7Yy5nZW49ZS5nZXRPYmooKTtjb25zdCBsPWUuZ2V0T2JqKCk7aWYobCBpbnN0YW5jZW9mIG4uQ21kKXN3aXRjaChsLmNtZCl7Y2FzZSJmIjpjLmZyZWU9ITA7YnJlYWs7Y2FzZSJuIjpjLnVuY29tcHJlc3NlZD0hMH1pZighTnVtYmVyLmlzSW50ZWdlcihjLm9mZnNldCl8fCFOdW1iZXIuaXNJbnRlZ2VyKGMuZ2VuKXx8IWMuZnJlZSYmIWMudW5jb21wcmVzc2VkKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBJbnZhbGlkIGVudHJ5IGluIFhSZWYgc3Vic2VjdGlvbjogJHtzfSwgJHtvfWApOzA9PT1pJiZjLmZyZWUmJjE9PT1zJiYocz0wKTt0aGlzLmVudHJpZXNbaStzXXx8KHRoaXMuZW50cmllc1tpK3NdPWMpfWEuZW50cnlOdW09MDthLnN0cmVhbVBvcz10LnBvczthLnBhcnNlckJ1ZjE9ZS5idWYxO2EucGFyc2VyQnVmMj1lLmJ1ZjI7ZGVsZXRlIGEuZmlyc3RFbnRyeU51bTtkZWxldGUgYS5lbnRyeUNvdW50fWlmKHRoaXMuZW50cmllc1swXSYmIXRoaXMuZW50cmllc1swXS5mcmVlKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgdGFibGU6IHVuZXhwZWN0ZWQgZmlyc3Qgb2JqZWN0Iik7cmV0dXJuIGl9cHJvY2Vzc1hSZWZTdHJlYW0oZSl7aWYoISgic3RyZWFtU3RhdGUiaW4gdGhpcykpe2NvbnN0IHQ9ZS5kaWN0LGE9dC5nZXQoIlciKTtsZXQgcj10LmdldCgiSW5kZXgiKTtyfHwocj1bMCx0LmdldCgiU2l6ZSIpXSk7dGhpcy5zdHJlYW1TdGF0ZT17ZW50cnlSYW5nZXM6cixieXRlV2lkdGhzOmEsZW50cnlOdW06MCxzdHJlYW1Qb3M6ZS5wb3N9fXRoaXMucmVhZFhSZWZTdHJlYW0oZSk7ZGVsZXRlIHRoaXMuc3RyZWFtU3RhdGU7cmV0dXJuIGUuZGljdH1yZWFkWFJlZlN0cmVhbShlKXtjb25zdCB0PXRoaXMuc3RyZWFtU3RhdGU7ZS5wb3M9dC5zdHJlYW1Qb3M7Y29uc3RbYSxuLGldPXQuYnl0ZVdpZHRocyxzPXQuZW50cnlSYW5nZXM7Zm9yKDtzLmxlbmd0aD4wOyl7Y29uc3RbbyxjXT1zO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKG8pfHwhTnVtYmVyLmlzSW50ZWdlcihjKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgSW52YWxpZCBYUmVmIHJhbmdlIGZpZWxkczogJHtvfSwgJHtjfWApO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGEpfHwhTnVtYmVyLmlzSW50ZWdlcihuKXx8IU51bWJlci5pc0ludGVnZXIoaSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYEludmFsaWQgWFJlZiBlbnRyeSBmaWVsZHMgbGVuZ3RoOiAke299LCAke2N9YCk7Zm9yKGxldCBzPXQuZW50cnlOdW07czxjOysrcyl7dC5lbnRyeU51bT1zO3Quc3RyZWFtUG9zPWUucG9zO2xldCBjPTAsbD0wLGg9MDtmb3IobGV0IHQ9MDt0PGE7Kyt0KXtjb25zdCB0PWUuZ2V0Qnl0ZSgpO2lmKC0xPT09dCl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIGJ5dGVXaWR0aHMgJ3R5cGUnLiIpO2M9Yzw8OHx0fTA9PT1hJiYoYz0xKTtmb3IobGV0IHQ9MDt0PG47Kyt0KXtjb25zdCB0PWUuZ2V0Qnl0ZSgpO2lmKC0xPT09dCl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIGJ5dGVXaWR0aHMgJ29mZnNldCcuIik7bD1sPDw4fHR9Zm9yKGxldCB0PTA7dDxpOysrdCl7Y29uc3QgdD1lLmdldEJ5dGUoKTtpZigtMT09PXQpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiBieXRlV2lkdGhzICdnZW5lcmF0aW9uJy4iKTtoPWg8PDh8dH1jb25zdCB1PXt9O3Uub2Zmc2V0PWw7dS5nZW49aDtzd2l0Y2goYyl7Y2FzZSAwOnUuZnJlZT0hMDticmVhaztjYXNlIDE6dS51bmNvbXByZXNzZWQ9ITA7YnJlYWs7Y2FzZSAyOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYEludmFsaWQgWFJlZiBlbnRyeSB0eXBlOiAke2N9YCl9dGhpcy5lbnRyaWVzW28rc118fCh0aGlzLmVudHJpZXNbbytzXT11KX10LmVudHJ5TnVtPTA7dC5zdHJlYW1Qb3M9ZS5wb3M7cy5zcGxpY2UoMCwyKX19aW5kZXhPYmplY3RzKCl7ZnVuY3Rpb24gcmVhZFRva2VuKGUsdCl7bGV0IGE9IiIscj1lW3RdO2Zvcig7MTAhPT1yJiYxMyE9PXImJjYwIT09ciYmISgrK3Q+PWUubGVuZ3RoKTspe2ErPVN0cmluZy5mcm9tQ2hhckNvZGUocik7cj1lW3RdfXJldHVybiBhfWZ1bmN0aW9uIHNraXBVbnRpbChlLHQsYSl7Y29uc3Qgcj1hLmxlbmd0aCxuPWUubGVuZ3RoO2xldCBpPTA7Zm9yKDt0PG47KXtsZXQgbj0wO2Zvcig7bjxyJiZlW3Qrbl09PT1hW25dOykrK247aWYobj49cilicmVhazt0Kys7aSsrfXJldHVybiBpfWNvbnN0IGU9L14oXGQrKVxzKyhcZCspXHMrb2JqXGIvLHQ9L1xiZW5kb2JqW1xiXHNdJC8sYT0vXHMrKFxkK1xzK1xkK1xzK29ialtcYlxzPF0pJC8sbz1uZXcgVWludDhBcnJheShbMTE2LDExNCw5NywxMDUsMTA4LDEwMSwxMTRdKSxjPW5ldyBVaW50OEFycmF5KFsxMTUsMTE2LDk3LDExNCwxMTYsMTIwLDExNCwxMDEsMTAyXSksbD1uZXcgVWludDhBcnJheShbMTExLDk4LDEwNl0pLGg9bmV3IFVpbnQ4QXJyYXkoWzQ3LDg4LDgyLDEwMSwxMDJdKTt0aGlzLmVudHJpZXMubGVuZ3RoPTA7dGhpcy5fY2FjaGVNYXAuY2xlYXIoKTtjb25zdCB1PXRoaXMuc3RyZWFtO3UucG9zPTA7Y29uc3QgZD11LmdldEJ5dGVzKCksZj1kLmxlbmd0aDtsZXQgZz11LnN0YXJ0O2NvbnN0IHA9W10sbT1bXTtmb3IoO2c8Zjspe2xldCBuPWRbZ107aWYoOT09PW58fDEwPT09bnx8MTM9PT1ufHwzMj09PW4peysrZztjb250aW51ZX1pZigzNz09PW4pe2RveysrZztpZihnPj1mKWJyZWFrO249ZFtnXX13aGlsZSgxMCE9PW4mJjEzIT09bik7Y29udGludWV9Y29uc3QgYj1yZWFkVG9rZW4oZCxnKTtsZXQgeTtpZihiLnN0YXJ0c1dpdGgoInhyZWYiKSYmKDQ9PT1iLmxlbmd0aHx8L1xzLy50ZXN0KGJbNF0pKSl7Zys9c2tpcFVudGlsKGQsZyxvKTtwLnB1c2goZyk7Zys9c2tpcFVudGlsKGQsZyxjKX1lbHNlIGlmKHk9ZS5leGVjKGIpKXtjb25zdCBlPTB8eVsxXSxuPTB8eVsyXTtsZXQgbyxjPWcrYi5sZW5ndGgsZj0hMTtpZih0aGlzLmVudHJpZXNbZV0pe2lmKHRoaXMuZW50cmllc1tlXS5nZW49PT1uKXRyeXtuZXcgcy5QYXJzZXIoe2xleGVyOm5ldyBzLkxleGVyKHUubWFrZVN1YlN0cmVhbShjKSl9KS5nZXRPYmooKTtmPSEwfWNhdGNoKGUpe2UgaW5zdGFuY2VvZiBpLlBhcnNlckVPRkV4Y2VwdGlvbj8oMCxyLndhcm4pKGBpbmRleE9iamVjdHMgLS0gY2hlY2tpbmcgb2JqZWN0ICgke2J9KTogIiR7ZX0iLmApOmY9ITB9fWVsc2UgZj0hMDtmJiYodGhpcy5lbnRyaWVzW2VdPXtvZmZzZXQ6Zy11LnN0YXJ0LGdlbjpuLHVuY29tcHJlc3NlZDohMH0pO2Zvcig7YzxkLmxlbmd0aDspe2NvbnN0IGU9Yytza2lwVW50aWwoZCxjLGwpKzQ7bz1lLWc7Y29uc3Qgbj1NYXRoLm1heChlLTI1LGMpLGk9KDAsci5ieXRlc1RvU3RyaW5nKShkLnN1YmFycmF5KG4sZSkpO2lmKHQudGVzdChpKSlicmVhazt7Y29uc3QgZT1hLmV4ZWMoaSk7aWYoZSYmZVsxXSl7KDAsci53YXJuKSgnaW5kZXhPYmplY3RzOiBGb3VuZCBuZXcgIm9iaiIgaW5zaWRlIG9mIGFub3RoZXIgIm9iaiIsIGNhdXNlZCBieSBtaXNzaW5nICJlbmRvYmoiIC0tIHRyeWluZyB0byByZWNvdmVyLicpO28tPWVbMV0ubGVuZ3RoO2JyZWFrfX1jPWV9Y29uc3QgcD1kLnN1YmFycmF5KGcsZytvKSx3PXNraXBVbnRpbChwLDAsaCk7aWYodzxvJiZwW3crNV08NjQpe20ucHVzaChnLXUuc3RhcnQpO3RoaXMueHJlZnN0bXNbZy11LnN0YXJ0XT0xfWcrPW99ZWxzZSBpZihiLnN0YXJ0c1dpdGgoInRyYWlsZXIiKSYmKDc9PT1iLmxlbmd0aHx8L1xzLy50ZXN0KGJbN10pKSl7cC5wdXNoKGcpO2crPXNraXBVbnRpbChkLGcsYyl9ZWxzZSBnKz1iLmxlbmd0aCsxfWZvcihjb25zdCBlIG9mIG0pe3RoaXMuc3RhcnRYUmVmUXVldWUucHVzaChlKTt0aGlzLnJlYWRYUmVmKCEwKX1sZXQgYix5O2Zvcihjb25zdCBlIG9mWy4uLnAsImdlbmVyYXRpb25GYWxsYmFjayIsLi4ucF0pe2lmKCJnZW5lcmF0aW9uRmFsbGJhY2siPT09ZSl7aWYoIXkpYnJlYWs7dGhpcy5fZ2VuZXJhdGlvbkZhbGxiYWNrPSEwO2NvbnRpbnVlfXUucG9zPWU7Y29uc3QgdD1uZXcgcy5QYXJzZXIoe2xleGVyOm5ldyBzLkxleGVyKHUpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITAscmVjb3ZlcnlNb2RlOiEwfSksYT10LmdldE9iaigpO2lmKCEoMCxuLmlzQ21kKShhLCJ0cmFpbGVyIikpY29udGludWU7Y29uc3Qgcj10LmdldE9iaigpO2lmKCEociBpbnN0YW5jZW9mIG4uRGljdCkpY29udGludWU7bGV0IGk9ITE7dHJ5e2NvbnN0IGU9ci5nZXQoIlJvb3QiKTtpZighKGUgaW5zdGFuY2VvZiBuLkRpY3QpKWNvbnRpbnVlO2NvbnN0IHQ9ZS5nZXQoIlBhZ2VzIik7aWYoISh0IGluc3RhbmNlb2Ygbi5EaWN0KSljb250aW51ZTtjb25zdCBhPXQuZ2V0KCJDb3VudCIpO051bWJlci5pc0ludGVnZXIoYSkmJihpPSEwKX1jYXRjaChlKXt5PWU7Y29udGludWV9aWYoaSYmci5oYXMoIklEIikpcmV0dXJuIHI7Yj1yfWlmKGIpcmV0dXJuIGI7aWYodGhpcy50b3BEaWN0KXJldHVybiB0aGlzLnRvcERpY3Q7dGhyb3cgbmV3IHIuSW52YWxpZFBERkV4Y2VwdGlvbigiSW52YWxpZCBQREYgc3RydWN0dXJlLiIpfXJlYWRYUmVmKGU9ITEpe2NvbnN0IHQ9dGhpcy5zdHJlYW0sYT1uZXcgU2V0O3RyeXtmb3IoO3RoaXMuc3RhcnRYUmVmUXVldWUubGVuZ3RoOyl7Y29uc3QgZT10aGlzLnN0YXJ0WFJlZlF1ZXVlWzBdO2lmKGEuaGFzKGUpKXsoMCxyLndhcm4pKCJyZWFkWFJlZiAtIHNraXBwaW5nIFhSZWYgdGFibGUgc2luY2UgaXQgd2FzIGFscmVhZHkgcGFyc2VkLiIpO3RoaXMuc3RhcnRYUmVmUXVldWUuc2hpZnQoKTtjb250aW51ZX1hLmFkZChlKTt0LnBvcz1lK3Quc3RhcnQ7Y29uc3QgaT1uZXcgcy5QYXJzZXIoe2xleGVyOm5ldyBzLkxleGVyKHQpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITB9KTtsZXQgYyxsPWkuZ2V0T2JqKCk7aWYoKDAsbi5pc0NtZCkobCwieHJlZiIpKXtjPXRoaXMucHJvY2Vzc1hSZWZUYWJsZShpKTt0aGlzLnRvcERpY3R8fCh0aGlzLnRvcERpY3Q9Yyk7bD1jLmdldCgiWFJlZlN0bSIpO2lmKE51bWJlci5pc0ludGVnZXIobCkpe2NvbnN0IGU9bDtpZighKGUgaW4gdGhpcy54cmVmc3Rtcykpe3RoaXMueHJlZnN0bXNbZV09MTt0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2goZSl9fX1lbHNle2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGwpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgc3RyZWFtIGhlYWRlciIpO2lmKCEoTnVtYmVyLmlzSW50ZWdlcihpLmdldE9iaigpKSYmKDAsbi5pc0NtZCkoaS5nZXRPYmooKSwib2JqIikmJihsPWkuZ2V0T2JqKCkpaW5zdGFuY2VvZiBvLkJhc2VTdHJlYW0pKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgc3RyZWFtIik7Yz10aGlzLnByb2Nlc3NYUmVmU3RyZWFtKGwpO3RoaXMudG9wRGljdHx8KHRoaXMudG9wRGljdD1jKTtpZighYyl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiRmFpbGVkIHRvIHJlYWQgWFJlZiBzdHJlYW0iKX1sPWMuZ2V0KCJQcmV2Iik7TnVtYmVyLmlzSW50ZWdlcihsKT90aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2gobCk6bCBpbnN0YW5jZW9mIG4uUmVmJiZ0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2gobC5udW0pO3RoaXMuc3RhcnRYUmVmUXVldWUuc2hpZnQoKX1yZXR1cm4gdGhpcy50b3BEaWN0fWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsci5pbmZvKSgiKHdoaWxlIHJlYWRpbmcgWFJlZik6ICIrZSk7dGhpcy5zdGFydFhSZWZRdWV1ZS5zaGlmdCgpfWlmKCFlKXRocm93IG5ldyBpLlhSZWZQYXJzZUV4Y2VwdGlvbn1nZXRFbnRyeShlKXtjb25zdCB0PXRoaXMuZW50cmllc1tlXTtyZXR1cm4gdCYmIXQuZnJlZSYmdC5vZmZzZXQ/dDpudWxsfWZldGNoSWZSZWYoZSx0PSExKXtyZXR1cm4gZSBpbnN0YW5jZW9mIG4uUmVmP3RoaXMuZmV0Y2goZSx0KTplfWZldGNoKGUsdD0hMSl7aWYoIShlIGluc3RhbmNlb2Ygbi5SZWYpKXRocm93IG5ldyBFcnJvcigicmVmIG9iamVjdCBpcyBub3QgYSByZWZlcmVuY2UiKTtjb25zdCBhPWUubnVtLGk9dGhpcy5fY2FjaGVNYXAuZ2V0KGEpO2lmKHZvaWQgMCE9PWkpe2kgaW5zdGFuY2VvZiBuLkRpY3QmJiFpLm9iaklkJiYoaS5vYmpJZD1lLnRvU3RyaW5nKCkpO3JldHVybiBpfWxldCBzPXRoaXMuZ2V0RW50cnkoYSk7aWYobnVsbD09PXMpe3RoaXMuX2NhY2hlTWFwLnNldChhLHMpO3JldHVybiBzfWlmKHRoaXMuX3BlbmRpbmdSZWZzLmhhcyhlKSl7dGhpcy5fcGVuZGluZ1JlZnMucmVtb3ZlKGUpOygwLHIud2FybikoYElnbm9yaW5nIGNpcmN1bGFyIHJlZmVyZW5jZTogJHtlfS5gKTtyZXR1cm4gbi5DSVJDVUxBUl9SRUZ9dGhpcy5fcGVuZGluZ1JlZnMucHV0KGUpO3RyeXtzPXMudW5jb21wcmVzc2VkP3RoaXMuZmV0Y2hVbmNvbXByZXNzZWQoZSxzLHQpOnRoaXMuZmV0Y2hDb21wcmVzc2VkKGUscyx0KTt0aGlzLl9wZW5kaW5nUmVmcy5yZW1vdmUoZSl9Y2F0Y2godCl7dGhpcy5fcGVuZGluZ1JlZnMucmVtb3ZlKGUpO3Rocm93IHR9cyBpbnN0YW5jZW9mIG4uRGljdD9zLm9iaklkPWUudG9TdHJpbmcoKTpzIGluc3RhbmNlb2Ygby5CYXNlU3RyZWFtJiYocy5kaWN0Lm9iaklkPWUudG9TdHJpbmcoKSk7cmV0dXJuIHN9ZmV0Y2hVbmNvbXByZXNzZWQoZSx0LGE9ITEpe2NvbnN0IGM9ZS5nZW47bGV0IGw9ZS5udW07aWYodC5nZW4hPT1jKXtjb25zdCBzPWBJbmNvbnNpc3RlbnQgZ2VuZXJhdGlvbiBpbiBYUmVmOiAke2V9YDtpZih0aGlzLl9nZW5lcmF0aW9uRmFsbGJhY2smJnQuZ2VuPGMpeygwLHIud2Fybikocyk7cmV0dXJuIHRoaXMuZmV0Y2hVbmNvbXByZXNzZWQobi5SZWYuZ2V0KGwsdC5nZW4pLHQsYSl9dGhyb3cgbmV3IGkuWFJlZkVudHJ5RXhjZXB0aW9uKHMpfWNvbnN0IGg9dGhpcy5zdHJlYW0ubWFrZVN1YlN0cmVhbSh0Lm9mZnNldCt0aGlzLnN0cmVhbS5zdGFydCksdT1uZXcgcy5QYXJzZXIoe2xleGVyOm5ldyBzLkxleGVyKGgpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITB9KSxkPXUuZ2V0T2JqKCksZj11LmdldE9iaigpLGc9dS5nZXRPYmooKTtpZihkIT09bHx8ZiE9PWN8fCEoZyBpbnN0YW5jZW9mIG4uQ21kKSl0aHJvdyBuZXcgaS5YUmVmRW50cnlFeGNlcHRpb24oYEJhZCAodW5jb21wcmVzc2VkKSBYUmVmIGVudHJ5OiAke2V9YCk7aWYoIm9iaiIhPT1nLmNtZCl7aWYoZy5jbWQuc3RhcnRzV2l0aCgib2JqIikpe2w9cGFyc2VJbnQoZy5jbWQuc3Vic3RyaW5nKDMpLDEwKTtpZighTnVtYmVyLmlzTmFOKGwpKXJldHVybiBsfXRocm93IG5ldyBpLlhSZWZFbnRyeUV4Y2VwdGlvbihgQmFkICh1bmNvbXByZXNzZWQpIFhSZWYgZW50cnk6ICR7ZX1gKX0odD10aGlzLmVuY3J5cHQmJiFhP3UuZ2V0T2JqKHRoaXMuZW5jcnlwdC5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0obCxjKSk6dS5nZXRPYmooKSlpbnN0YW5jZW9mIG8uQmFzZVN0cmVhbXx8dGhpcy5fY2FjaGVNYXAuc2V0KGwsdCk7cmV0dXJuIHR9ZmV0Y2hDb21wcmVzc2VkKGUsdCxhPSExKXtjb25zdCBjPXQub2Zmc2V0LGw9dGhpcy5mZXRjaChuLlJlZi5nZXQoYywwKSk7aWYoIShsIGluc3RhbmNlb2Ygby5CYXNlU3RyZWFtKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiYmFkIE9ialN0bSBzdHJlYW0iKTtjb25zdCBoPWwuZGljdC5nZXQoIkZpcnN0IiksdT1sLmRpY3QuZ2V0KCJOIik7aWYoIU51bWJlci5pc0ludGVnZXIoaCl8fCFOdW1iZXIuaXNJbnRlZ2VyKHUpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJpbnZhbGlkIGZpcnN0IGFuZCBuIHBhcmFtZXRlcnMgZm9yIE9ialN0bSBzdHJlYW0iKTtsZXQgZD1uZXcgcy5QYXJzZXIoe2xleGVyOm5ldyBzLkxleGVyKGwpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITB9KTtjb25zdCBmPW5ldyBBcnJheSh1KSxnPW5ldyBBcnJheSh1KTtmb3IobGV0IGU9MDtlPHU7KytlKXtjb25zdCB0PWQuZ2V0T2JqKCk7aWYoIU51bWJlci5pc0ludGVnZXIodCkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYGludmFsaWQgb2JqZWN0IG51bWJlciBpbiB0aGUgT2JqU3RtIHN0cmVhbTogJHt0fWApO2NvbnN0IGE9ZC5nZXRPYmooKTtpZighTnVtYmVyLmlzSW50ZWdlcihhKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgaW52YWxpZCBvYmplY3Qgb2Zmc2V0IGluIHRoZSBPYmpTdG0gc3RyZWFtOiAke2F9YCk7ZltlXT10O2dbZV09YX1jb25zdCBwPShsLnN0YXJ0fHwwKStoLG09bmV3IEFycmF5KHUpO2ZvcihsZXQgZT0wO2U8dTsrK2Upe2NvbnN0IHQ9ZTx1LTE/Z1tlKzFdLWdbZV06dm9pZCAwO2lmKHQ8MCl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiSW52YWxpZCBvZmZzZXQgaW4gdGhlIE9ialN0bSBzdHJlYW0uIik7ZD1uZXcgcy5QYXJzZXIoe2xleGVyOm5ldyBzLkxleGVyKGwubWFrZVN1YlN0cmVhbShwK2dbZV0sdCxsLmRpY3QpKSx4cmVmOnRoaXMsYWxsb3dTdHJlYW1zOiEwfSk7Y29uc3QgYT1kLmdldE9iaigpO21bZV09YTtpZihhIGluc3RhbmNlb2Ygby5CYXNlU3RyZWFtKWNvbnRpbnVlO2NvbnN0IG49ZltlXSxpPXRoaXMuZW50cmllc1tuXTtpJiZpLm9mZnNldD09PWMmJmkuZ2VuPT09ZSYmdGhpcy5fY2FjaGVNYXAuc2V0KG4sYSl9aWYodm9pZCAwPT09KHQ9bVt0Lmdlbl0pKXRocm93IG5ldyBpLlhSZWZFbnRyeUV4Y2VwdGlvbihgQmFkIChjb21wcmVzc2VkKSBYUmVmIGVudHJ5OiAke2V9YCk7cmV0dXJuIHR9YXN5bmMgZmV0Y2hJZlJlZkFzeW5jKGUsdCl7cmV0dXJuIGUgaW5zdGFuY2VvZiBuLlJlZj90aGlzLmZldGNoQXN5bmMoZSx0KTplfWFzeW5jIGZldGNoQXN5bmMoZSx0KXt0cnl7cmV0dXJuIHRoaXMuZmV0Y2goZSx0KX1jYXRjaChhKXtpZighKGEgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSl0aHJvdyBhO2F3YWl0IHRoaXMucGRmTWFuYWdlci5yZXF1ZXN0UmFuZ2UoYS5iZWdpbixhLmVuZCk7cmV0dXJuIHRoaXMuZmV0Y2hBc3luYyhlLHQpfX1nZXRDYXRhbG9nT2JqKCl7cmV0dXJuIHRoaXMucm9vdH19fSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LmlzTm9kZUpTPXZvaWQgMDtjb25zdCBhPSEoIm9iamVjdCIhPXR5cGVvZiBwcm9jZXNzfHxwcm9jZXNzKyIiIT0iW29iamVjdCBwcm9jZXNzXSJ8fHByb2Nlc3MudmVyc2lvbnMubnd8fHByb2Nlc3MudmVyc2lvbnMuZWxlY3Ryb24mJnByb2Nlc3MudHlwZSYmImJyb3dzZXIiIT09cHJvY2Vzcy50eXBlKTt0LmlzTm9kZUpTPWF9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5NZXNzYWdlSGFuZGxlcj12b2lkIDA7dmFyIHI9YSgyKTtjb25zdCBuPTEsaT0yLHM9MSxvPTIsYz0zLGw9NCxoPTUsdT02LGQ9NyxmPTg7ZnVuY3Rpb24gd3JhcFJlYXNvbihlKXtlIGluc3RhbmNlb2YgRXJyb3J8fCJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWV8fCgwLHIudW5yZWFjaGFibGUpKCd3cmFwUmVhc29uOiBFeHBlY3RlZCAicmVhc29uIiB0byBiZSBhIChwb3NzaWJseSBjbG9uZWQpIEVycm9yLicpO3N3aXRjaChlLm5hbWUpe2Nhc2UiQWJvcnRFeGNlcHRpb24iOnJldHVybiBuZXcgci5BYm9ydEV4Y2VwdGlvbihlLm1lc3NhZ2UpO2Nhc2UiTWlzc2luZ1BERkV4Y2VwdGlvbiI6cmV0dXJuIG5ldyByLk1pc3NpbmdQREZFeGNlcHRpb24oZS5tZXNzYWdlKTtjYXNlIlBhc3N3b3JkRXhjZXB0aW9uIjpyZXR1cm4gbmV3IHIuUGFzc3dvcmRFeGNlcHRpb24oZS5tZXNzYWdlLGUuY29kZSk7Y2FzZSJVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24iOnJldHVybiBuZXcgci5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24oZS5tZXNzYWdlLGUuc3RhdHVzKTtjYXNlIlVua25vd25FcnJvckV4Y2VwdGlvbiI6cmV0dXJuIG5ldyByLlVua25vd25FcnJvckV4Y2VwdGlvbihlLm1lc3NhZ2UsZS5kZXRhaWxzKTtkZWZhdWx0OnJldHVybiBuZXcgci5Vbmtub3duRXJyb3JFeGNlcHRpb24oZS5tZXNzYWdlLGUudG9TdHJpbmcoKSl9fXQuTWVzc2FnZUhhbmRsZXI9Y2xhc3MgTWVzc2FnZUhhbmRsZXJ7Y29uc3RydWN0b3IoZSx0LGEpe3RoaXMuc291cmNlTmFtZT1lO3RoaXMudGFyZ2V0TmFtZT10O3RoaXMuY29tT2JqPWE7dGhpcy5jYWxsYmFja0lkPTE7dGhpcy5zdHJlYW1JZD0xO3RoaXMuc3RyZWFtU2lua3M9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLnN0cmVhbUNvbnRyb2xsZXJzPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy5jYWxsYmFja0NhcGFiaWxpdGllcz1PYmplY3QuY3JlYXRlKG51bGwpO3RoaXMuYWN0aW9uSGFuZGxlcj1PYmplY3QuY3JlYXRlKG51bGwpO3RoaXMuX29uQ29tT2JqT25NZXNzYWdlPWU9Pntjb25zdCB0PWUuZGF0YTtpZih0LnRhcmdldE5hbWUhPT10aGlzLnNvdXJjZU5hbWUpcmV0dXJuO2lmKHQuc3RyZWFtKXt0aGlzLl9wcm9jZXNzU3RyZWFtTWVzc2FnZSh0KTtyZXR1cm59aWYodC5jYWxsYmFjayl7Y29uc3QgZT10LmNhbGxiYWNrSWQsYT10aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzW2VdO2lmKCFhKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlc29sdmUgY2FsbGJhY2sgJHtlfWApO2RlbGV0ZSB0aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzW2VdO2lmKHQuY2FsbGJhY2s9PT1uKWEucmVzb2x2ZSh0LmRhdGEpO2Vsc2V7aWYodC5jYWxsYmFjayE9PWkpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGNhbGxiYWNrIGNhc2UiKTthLnJlamVjdCh3cmFwUmVhc29uKHQucmVhc29uKSl9cmV0dXJufWNvbnN0IHI9dGhpcy5hY3Rpb25IYW5kbGVyW3QuYWN0aW9uXTtpZighcil0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gYWN0aW9uIGZyb20gd29ya2VyOiAke3QuYWN0aW9ufWApO2lmKHQuY2FsbGJhY2tJZCl7Y29uc3QgZT10aGlzLnNvdXJjZU5hbWUscz10LnNvdXJjZU5hbWU7bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe2Uocih0LmRhdGEpKX0pKS50aGVuKChmdW5jdGlvbihyKXthLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmUsdGFyZ2V0TmFtZTpzLGNhbGxiYWNrOm4sY2FsbGJhY2tJZDp0LmNhbGxiYWNrSWQsZGF0YTpyfSl9KSwoZnVuY3Rpb24ocil7YS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTplLHRhcmdldE5hbWU6cyxjYWxsYmFjazppLGNhbGxiYWNrSWQ6dC5jYWxsYmFja0lkLHJlYXNvbjp3cmFwUmVhc29uKHIpfSl9KSl9ZWxzZSB0LnN0cmVhbUlkP3RoaXMuX2NyZWF0ZVN0cmVhbVNpbmsodCk6cih0LmRhdGEpfTthLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMuX29uQ29tT2JqT25NZXNzYWdlKX1vbihlLHQpe2NvbnN0IGE9dGhpcy5hY3Rpb25IYW5kbGVyO2lmKGFbZV0pdGhyb3cgbmV3IEVycm9yKGBUaGVyZSBpcyBhbHJlYWR5IGFuIGFjdGlvbk5hbWUgY2FsbGVkICIke2V9ImApO2FbZV09dH1zZW5kKGUsdCxhKXt0aGlzLmNvbU9iai5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTp0aGlzLnNvdXJjZU5hbWUsdGFyZ2V0TmFtZTp0aGlzLnRhcmdldE5hbWUsYWN0aW9uOmUsZGF0YTp0fSxhKX1zZW5kV2l0aFByb21pc2UoZSx0LGEpe2NvbnN0IG49dGhpcy5jYWxsYmFja0lkKyssaT0oMCxyLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3RoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXNbbl09aTt0cnl7dGhpcy5jb21PYmoucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6dGhpcy5zb3VyY2VOYW1lLHRhcmdldE5hbWU6dGhpcy50YXJnZXROYW1lLGFjdGlvbjplLGNhbGxiYWNrSWQ6bixkYXRhOnR9LGEpfWNhdGNoKGUpe2kucmVqZWN0KGUpfXJldHVybiBpLnByb21pc2V9c2VuZFdpdGhTdHJlYW0oZSx0LGEsbil7Y29uc3QgaT10aGlzLnN0cmVhbUlkKyssbz10aGlzLnNvdXJjZU5hbWUsYz10aGlzLnRhcmdldE5hbWUsbD10aGlzLmNvbU9iajtyZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtzdGFydDphPT57Y29uc3Qgcz0oMCxyLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3RoaXMuc3RyZWFtQ29udHJvbGxlcnNbaV09e2NvbnRyb2xsZXI6YSxzdGFydENhbGw6cyxwdWxsQ2FsbDpudWxsLGNhbmNlbENhbGw6bnVsbCxpc0Nsb3NlZDohMX07bC5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpvLHRhcmdldE5hbWU6YyxhY3Rpb246ZSxzdHJlYW1JZDppLGRhdGE6dCxkZXNpcmVkU2l6ZTphLmRlc2lyZWRTaXplfSxuKTtyZXR1cm4gcy5wcm9taXNlfSxwdWxsOmU9Pntjb25zdCB0PSgwLHIuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7dGhpcy5zdHJlYW1Db250cm9sbGVyc1tpXS5wdWxsQ2FsbD10O2wucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6byx0YXJnZXROYW1lOmMsc3RyZWFtOnUsc3RyZWFtSWQ6aSxkZXNpcmVkU2l6ZTplLmRlc2lyZWRTaXplfSk7cmV0dXJuIHQucHJvbWlzZX0sY2FuY2VsOmU9PnsoMCxyLmFzc2VydCkoZSBpbnN0YW5jZW9mIEVycm9yLCJjYW5jZWwgbXVzdCBoYXZlIGEgdmFsaWQgcmVhc29uIik7Y29uc3QgdD0oMCxyLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3RoaXMuc3RyZWFtQ29udHJvbGxlcnNbaV0uY2FuY2VsQ2FsbD10O3RoaXMuc3RyZWFtQ29udHJvbGxlcnNbaV0uaXNDbG9zZWQ9ITA7bC5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpvLHRhcmdldE5hbWU6YyxzdHJlYW06cyxzdHJlYW1JZDppLHJlYXNvbjp3cmFwUmVhc29uKGUpfSk7cmV0dXJuIHQucHJvbWlzZX19LGEpfV9jcmVhdGVTdHJlYW1TaW5rKGUpe2NvbnN0IHQ9ZS5zdHJlYW1JZCxhPXRoaXMuc291cmNlTmFtZSxuPWUuc291cmNlTmFtZSxpPXRoaXMuY29tT2JqLHM9dGhpcyxvPXRoaXMuYWN0aW9uSGFuZGxlcltlLmFjdGlvbl0sdT17ZW5xdWV1ZShlLHM9MSxvKXtpZih0aGlzLmlzQ2FuY2VsbGVkKXJldHVybjtjb25zdCBjPXRoaXMuZGVzaXJlZFNpemU7dGhpcy5kZXNpcmVkU2l6ZS09cztpZihjPjAmJnRoaXMuZGVzaXJlZFNpemU8PTApe3RoaXMuc2lua0NhcGFiaWxpdHk9KDAsci5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTt0aGlzLnJlYWR5PXRoaXMuc2lua0NhcGFiaWxpdHkucHJvbWlzZX1pLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmEsdGFyZ2V0TmFtZTpuLHN0cmVhbTpsLHN0cmVhbUlkOnQsY2h1bms6ZX0sbyl9LGNsb3NlKCl7aWYoIXRoaXMuaXNDYW5jZWxsZWQpe3RoaXMuaXNDYW5jZWxsZWQ9ITA7aS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTphLHRhcmdldE5hbWU6bixzdHJlYW06YyxzdHJlYW1JZDp0fSk7ZGVsZXRlIHMuc3RyZWFtU2lua3NbdF19fSxlcnJvcihlKXsoMCxyLmFzc2VydCkoZSBpbnN0YW5jZW9mIEVycm9yLCJlcnJvciBtdXN0IGhhdmUgYSB2YWxpZCByZWFzb24iKTtpZighdGhpcy5pc0NhbmNlbGxlZCl7dGhpcy5pc0NhbmNlbGxlZD0hMDtpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmEsdGFyZ2V0TmFtZTpuLHN0cmVhbTpoLHN0cmVhbUlkOnQscmVhc29uOndyYXBSZWFzb24oZSl9KX19LHNpbmtDYXBhYmlsaXR5OigwLHIuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksb25QdWxsOm51bGwsb25DYW5jZWw6bnVsbCxpc0NhbmNlbGxlZDohMSxkZXNpcmVkU2l6ZTplLmRlc2lyZWRTaXplLHJlYWR5Om51bGx9O3Uuc2lua0NhcGFiaWxpdHkucmVzb2x2ZSgpO3UucmVhZHk9dS5zaW5rQ2FwYWJpbGl0eS5wcm9taXNlO3RoaXMuc3RyZWFtU2lua3NbdF09dTtuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7dChvKGUuZGF0YSx1KSl9KSkudGhlbigoZnVuY3Rpb24oKXtpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmEsdGFyZ2V0TmFtZTpuLHN0cmVhbTpmLHN0cmVhbUlkOnQsc3VjY2VzczohMH0pfSksKGZ1bmN0aW9uKGUpe2kucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6YSx0YXJnZXROYW1lOm4sc3RyZWFtOmYsc3RyZWFtSWQ6dCxyZWFzb246d3JhcFJlYXNvbihlKX0pfSkpfV9wcm9jZXNzU3RyZWFtTWVzc2FnZShlKXtjb25zdCB0PWUuc3RyZWFtSWQsYT10aGlzLnNvdXJjZU5hbWUsbj1lLnNvdXJjZU5hbWUsaT10aGlzLmNvbU9iaixnPXRoaXMuc3RyZWFtQ29udHJvbGxlcnNbdF0scD10aGlzLnN0cmVhbVNpbmtzW3RdO3N3aXRjaChlLnN0cmVhbSl7Y2FzZSBmOmUuc3VjY2Vzcz9nLnN0YXJ0Q2FsbC5yZXNvbHZlKCk6Zy5zdGFydENhbGwucmVqZWN0KHdyYXBSZWFzb24oZS5yZWFzb24pKTticmVhaztjYXNlIGQ6ZS5zdWNjZXNzP2cucHVsbENhbGwucmVzb2x2ZSgpOmcucHVsbENhbGwucmVqZWN0KHdyYXBSZWFzb24oZS5yZWFzb24pKTticmVhaztjYXNlIHU6aWYoIXApe2kucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6YSx0YXJnZXROYW1lOm4sc3RyZWFtOmQsc3RyZWFtSWQ6dCxzdWNjZXNzOiEwfSk7YnJlYWt9cC5kZXNpcmVkU2l6ZTw9MCYmZS5kZXNpcmVkU2l6ZT4wJiZwLnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKTtwLmRlc2lyZWRTaXplPWUuZGVzaXJlZFNpemU7bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe2UocC5vblB1bGwmJnAub25QdWxsKCkpfSkpLnRoZW4oKGZ1bmN0aW9uKCl7aS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTphLHRhcmdldE5hbWU6bixzdHJlYW06ZCxzdHJlYW1JZDp0LHN1Y2Nlc3M6ITB9KX0pLChmdW5jdGlvbihlKXtpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmEsdGFyZ2V0TmFtZTpuLHN0cmVhbTpkLHN0cmVhbUlkOnQscmVhc29uOndyYXBSZWFzb24oZSl9KX0pKTticmVhaztjYXNlIGw6KDAsci5hc3NlcnQpKGcsImVucXVldWUgc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXIiKTtpZihnLmlzQ2xvc2VkKWJyZWFrO2cuY29udHJvbGxlci5lbnF1ZXVlKGUuY2h1bmspO2JyZWFrO2Nhc2UgYzooMCxyLmFzc2VydCkoZywiY2xvc2Ugc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXIiKTtpZihnLmlzQ2xvc2VkKWJyZWFrO2cuaXNDbG9zZWQ9ITA7Zy5jb250cm9sbGVyLmNsb3NlKCk7dGhpcy5fZGVsZXRlU3RyZWFtQ29udHJvbGxlcihnLHQpO2JyZWFrO2Nhc2UgaDooMCxyLmFzc2VydCkoZywiZXJyb3Igc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXIiKTtnLmNvbnRyb2xsZXIuZXJyb3Iod3JhcFJlYXNvbihlLnJlYXNvbikpO3RoaXMuX2RlbGV0ZVN0cmVhbUNvbnRyb2xsZXIoZyx0KTticmVhaztjYXNlIG86ZS5zdWNjZXNzP2cuY2FuY2VsQ2FsbC5yZXNvbHZlKCk6Zy5jYW5jZWxDYWxsLnJlamVjdCh3cmFwUmVhc29uKGUucmVhc29uKSk7dGhpcy5fZGVsZXRlU3RyZWFtQ29udHJvbGxlcihnLHQpO2JyZWFrO2Nhc2UgczppZighcClicmVhaztuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7dChwLm9uQ2FuY2VsJiZwLm9uQ2FuY2VsKHdyYXBSZWFzb24oZS5yZWFzb24pKSl9KSkudGhlbigoZnVuY3Rpb24oKXtpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmEsdGFyZ2V0TmFtZTpuLHN0cmVhbTpvLHN0cmVhbUlkOnQsc3VjY2VzczohMH0pfSksKGZ1bmN0aW9uKGUpe2kucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6YSx0YXJnZXROYW1lOm4sc3RyZWFtOm8sc3RyZWFtSWQ6dCxyZWFzb246d3JhcFJlYXNvbihlKX0pfSkpO3Auc2lua0NhcGFiaWxpdHkucmVqZWN0KHdyYXBSZWFzb24oZS5yZWFzb24pKTtwLmlzQ2FuY2VsbGVkPSEwO2RlbGV0ZSB0aGlzLnN0cmVhbVNpbmtzW3RdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHN0cmVhbSBjYXNlIil9fWFzeW5jIF9kZWxldGVTdHJlYW1Db250cm9sbGVyKGUsdCl7YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFtlLnN0YXJ0Q2FsbCYmZS5zdGFydENhbGwucHJvbWlzZSxlLnB1bGxDYWxsJiZlLnB1bGxDYWxsLnByb21pc2UsZS5jYW5jZWxDYWxsJiZlLmNhbmNlbENhbGwucHJvbWlzZV0pO2RlbGV0ZSB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3RdfWRlc3Ryb3koKXt0aGlzLmNvbU9iai5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLl9vbkNvbU9iak9uTWVzc2FnZSl9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlBERldvcmtlclN0cmVhbT12b2lkIDA7dmFyIHI9YSgyKTt0LlBERldvcmtlclN0cmVhbT1jbGFzcyBQREZXb3JrZXJTdHJlYW17Y29uc3RydWN0b3IoZSl7dGhpcy5fbXNnSGFuZGxlcj1lO3RoaXMuX2NvbnRlbnRMZW5ndGg9bnVsbDt0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1udWxsO3RoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnM9W119Z2V0RnVsbFJlYWRlcigpeygwLHIuYXNzZXJ0KSghdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIsIlBERldvcmtlclN0cmVhbS5nZXRGdWxsUmVhZGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlLiIpO3RoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyPW5ldyBQREZXb3JrZXJTdHJlYW1SZWFkZXIodGhpcy5fbXNnSGFuZGxlcik7cmV0dXJuIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyfWdldFJhbmdlUmVhZGVyKGUsdCl7Y29uc3QgYT1uZXcgUERGV29ya2VyU3RyZWFtUmFuZ2VSZWFkZXIoZSx0LHRoaXMuX21zZ0hhbmRsZXIpO3RoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMucHVzaChhKTtyZXR1cm4gYX1jYW5jZWxBbGxSZXF1ZXN0cyhlKXt0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciYmdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIuY2FuY2VsKGUpO2Zvcihjb25zdCB0IG9mIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc2xpY2UoMCkpdC5jYW5jZWwoZSl9fTtjbGFzcyBQREZXb3JrZXJTdHJlYW1SZWFkZXJ7Y29uc3RydWN0b3IoZSl7dGhpcy5fbXNnSGFuZGxlcj1lO3RoaXMub25Qcm9ncmVzcz1udWxsO3RoaXMuX2NvbnRlbnRMZW5ndGg9bnVsbDt0aGlzLl9pc1JhbmdlU3VwcG9ydGVkPSExO3RoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkPSExO2NvbnN0IHQ9dGhpcy5fbXNnSGFuZGxlci5zZW5kV2l0aFN0cmVhbSgiR2V0UmVhZGVyIik7dGhpcy5fcmVhZGVyPXQuZ2V0UmVhZGVyKCk7dGhpcy5faGVhZGVyc1JlYWR5PXRoaXMuX21zZ0hhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJSZWFkZXJIZWFkZXJzUmVhZHkiKS50aGVuKChlPT57dGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ9ZS5pc1N0cmVhbWluZ1N1cHBvcnRlZDt0aGlzLl9pc1JhbmdlU3VwcG9ydGVkPWUuaXNSYW5nZVN1cHBvcnRlZDt0aGlzLl9jb250ZW50TGVuZ3RoPWUuY29udGVudExlbmd0aH0pKX1nZXQgaGVhZGVyc1JlYWR5KCl7cmV0dXJuIHRoaXMuX2hlYWRlcnNSZWFkeX1nZXQgY29udGVudExlbmd0aCgpe3JldHVybiB0aGlzLl9jb250ZW50TGVuZ3RofWdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpe3JldHVybiB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZH1nZXQgaXNSYW5nZVN1cHBvcnRlZCgpe3JldHVybiB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkfWFzeW5jIHJlYWQoKXtjb25zdHt2YWx1ZTplLGRvbmU6dH09YXdhaXQgdGhpcy5fcmVhZGVyLnJlYWQoKTtyZXR1cm4gdD97dmFsdWU6dm9pZCAwLGRvbmU6ITB9Ont2YWx1ZTplLmJ1ZmZlcixkb25lOiExfX1jYW5jZWwoZSl7dGhpcy5fcmVhZGVyLmNhbmNlbChlKX19Y2xhc3MgUERGV29ya2VyU3RyZWFtUmFuZ2VSZWFkZXJ7Y29uc3RydWN0b3IoZSx0LGEpe3RoaXMuX21zZ0hhbmRsZXI9YTt0aGlzLm9uUHJvZ3Jlc3M9bnVsbDtjb25zdCByPXRoaXMuX21zZ0hhbmRsZXIuc2VuZFdpdGhTdHJlYW0oIkdldFJhbmdlUmVhZGVyIix7YmVnaW46ZSxlbmQ6dH0pO3RoaXMuX3JlYWRlcj1yLmdldFJlYWRlcigpfWdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpe3JldHVybiExfWFzeW5jIHJlYWQoKXtjb25zdHt2YWx1ZTplLGRvbmU6dH09YXdhaXQgdGhpcy5fcmVhZGVyLnJlYWQoKTtyZXR1cm4gdD97dmFsdWU6dm9pZCAwLGRvbmU6ITB9Ont2YWx1ZTplLmJ1ZmZlcixkb25lOiExfX1jYW5jZWwoZSl7dGhpcy5fcmVhZGVyLmNhbmNlbChlKX19fV0sdD17fTtmdW5jdGlvbiBfX3dfcGRmanNfcmVxdWlyZV9fKGEpe3ZhciByPXRbYV07aWYodm9pZCAwIT09cilyZXR1cm4gci5leHBvcnRzO3ZhciBuPXRbYV09e2V4cG9ydHM6e319O2VbYV0obixuLmV4cG9ydHMsX193X3BkZmpzX3JlcXVpcmVfXyk7cmV0dXJuIG4uZXhwb3J0c31fX3dfcGRmanNfcmVxdWlyZV9fLmQ9KGUsdCk9Pntmb3IodmFyIGEgaW4gdClfX3dfcGRmanNfcmVxdWlyZV9fLm8odCxhKSYmIV9fd19wZGZqc19yZXF1aXJlX18ubyhlLGEpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxhLHtlbnVtZXJhYmxlOiEwLGdldDp0W2FdfSl9O19fd19wZGZqc19yZXF1aXJlX18ubz0oZSx0KT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCk7X193X3BkZmpzX3JlcXVpcmVfXy5yPWU9PnsidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfTt2YXIgYT17fTsoKCk9Pnt2YXIgZT1hO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiV29ya2VyTWVzc2FnZUhhbmRsZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0Lldvcmtlck1lc3NhZ2VIYW5kbGVyfX0pO3ZhciB0PV9fd19wZGZqc19yZXF1aXJlX18oMSl9KSgpO3JldHVybiBhfSkoKSkpOw==",I=__webpack_require__(501),Y=`data:text/javascript;base64,${M}`;I.GlobalWorkerOptions.workerSrc=Y;var X={name:"VueOfficePdf",props:{src:{type:[String]}},data(){return{document:"",numPages:0}},watch:{src(){this.init()}},mounted(){this.src&&this.init()},methods:{init(){if(!this.src)return void(this.numPages=0);const l=I.getDocument(this.src);l.promise.then((l=>{this.document=l,this.numPages=l.numPages,this.renderPage(1)}))},renderPage(l){this.document.getPage(l).then((i=>{const s=i.getViewport({scale:window.devicePixelRatio}),t=this.$refs["canvas"+l][0];t.width=s.width,t.height=s.height;const c=t.getContext("2d"),d=i.render({canvasContext:c,viewport:s});d.promise.then((()=>{this.numPages>l&&this.renderPage(l+1)})).catch((()=>{}))})).catch((()=>{}))}}},L=X,y=W(L,u,N,!1,null,"83be3f9e",null),o=y.exports;o.install=function(l){l.component(o.name,o)};var V=o;const p=[G,V],T=function(l){p.map((i=>l.component(i.name,i)))};"undefined"!==typeof window&&window.Vue&&T(window.Vue);const w=G,z=V;var R={install:T,VueOfficeDocx:G,VueOfficePdf:V},r=R}(),__webpack_exports__}()}));
|
||
//# sourceMappingURL=vue-office.umd.min.js.map |