| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- "use strict";var Tng=Object.defineProperty;var y6=t=>{throw TypeError(t)};var xng=(t,I,g)=>I in t?Tng(t,I,{enumerable:!0,configurable:!0,writable:!0,value:g}):t[I]=g;var CI=(t,I,g)=>xng(t,typeof I!="symbol"?I+"":I,g),wH=(t,I,g)=>I.has(t)||y6("Cannot "+g);var M=(t,I,g)=>(wH(t,I,"read from private field"),g?g.call(t):I.get(t)),ig=(t,I,g)=>I.has(t)?y6("Cannot add the same private member more than once"):I instanceof WeakSet?I.add(t):I.set(t,g),$=(t,I,g,C)=>(wH(t,I,"write to private field"),C?C.call(t,g):I.set(t,g),g),eg=(t,I,g)=>(wH(t,I,"access private method"),g);var ui=(t,I,g,C)=>({set _(i){$(t,I,i,g)},get _(){return M(t,I,C)}});Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const gg=require("vue");var gh=typeof document<"u"?document.currentScript:null,FI=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function qq(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}function Ka(t){throw new Error('Could not dynamically require "'+t+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var pH={exports:{}};/*!
- 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
- */var Y6;function jng(){return Y6||(Y6=1,function(t,I){(function(g){t.exports=g()})(function(){return function g(C,i,e){function A(n,a){if(!i[n]){if(!C[n]){var d=typeof Ka=="function"&&Ka;if(!a&&d)return d(n,!0);if(s)return s(n,!0);var o=new Error("Cannot find module '"+n+"'");throw o.code="MODULE_NOT_FOUND",o}var c=i[n]={exports:{}};C[n][0].call(c.exports,function(r){var h=C[n][1][r];return A(h||r)},c,c.exports,g,C,i,e)}return i[n].exports}for(var s=typeof Ka=="function"&&Ka,l=0;l<e.length;l++)A(e[l]);return A}({1:[function(g,C,i){var e=g("./utils"),A=g("./support"),s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";i.encode=function(l){for(var n,a,d,o,c,r,h,b=[],u=0,m=l.length,Z=m,p=e.getTypeOf(l)!=="string";u<l.length;)Z=m-u,d=p?(n=l[u++],a=u<m?l[u++]:0,u<m?l[u++]:0):(n=l.charCodeAt(u++),a=u<m?l.charCodeAt(u++):0,u<m?l.charCodeAt(u++):0),o=n>>2,c=(3&n)<<4|a>>4,r=1<Z?(15&a)<<2|d>>6:64,h=2<Z?63&d:64,b.push(s.charAt(o)+s.charAt(c)+s.charAt(r)+s.charAt(h));return b.join("")},i.decode=function(l){var n,a,d,o,c,r,h=0,b=0,u="data:";if(l.substr(0,u.length)===u)throw new Error("Invalid base64 input, it looks like a data url.");var m,Z=3*(l=l.replace(/[^A-Za-z0-9+/=]/g,"")).length/4;if(l.charAt(l.length-1)===s.charAt(64)&&Z--,l.charAt(l.length-2)===s.charAt(64)&&Z--,Z%1!=0)throw new Error("Invalid base64 input, bad content length.");for(m=A.uint8array?new Uint8Array(0|Z):new Array(0|Z);h<l.length;)n=s.indexOf(l.charAt(h++))<<2|(o=s.indexOf(l.charAt(h++)))>>4,a=(15&o)<<4|(c=s.indexOf(l.charAt(h++)))>>2,d=(3&c)<<6|(r=s.indexOf(l.charAt(h++))),m[b++]=n,c!==64&&(m[b++]=a),r!==64&&(m[b++]=d);return m}},{"./support":30,"./utils":32}],2:[function(g,C,i){var e=g("./external"),A=g("./stream/DataWorker"),s=g("./stream/Crc32Probe"),l=g("./stream/DataLengthProbe");function n(a,d,o,c,r){this.compressedSize=a,this.uncompressedSize=d,this.crc32=o,this.compression=c,this.compressedContent=r}n.prototype={getContentWorker:function(){var a=new A(e.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new l("data_length")),d=this;return a.on("end",function(){if(this.streamInfo.data_length!==d.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),a},getCompressedWorker:function(){return new A(e.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},n.createWorkerFrom=function(a,d,o){return a.pipe(new s).pipe(new l("uncompressedSize")).pipe(d.compressWorker(o)).pipe(new l("compressedSize")).withStreamInfo("compression",d)},C.exports=n},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(g,C,i){var e=g("./stream/GenericWorker");i.STORE={magic:"\0\0",compressWorker:function(){return new e("STORE compression")},uncompressWorker:function(){return new e("STORE decompression")}},i.DEFLATE=g("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(g,C,i){var e=g("./utils"),A=function(){for(var s,l=[],n=0;n<256;n++){s=n;for(var a=0;a<8;a++)s=1&s?3988292384^s>>>1:s>>>1;l[n]=s}return l}();C.exports=function(s,l){return s!==void 0&&s.length?e.getTypeOf(s)!=="string"?function(n,a,d,o){var c=A,r=o+d;n^=-1;for(var h=o;h<r;h++)n=n>>>8^c[255&(n^a[h])];return-1^n}(0|l,s,s.length,0):function(n,a,d,o){var c=A,r=o+d;n^=-1;for(var h=o;h<r;h++)n=n>>>8^c[255&(n^a.charCodeAt(h))];return-1^n}(0|l,s,s.length,0):0}},{"./utils":32}],5:[function(g,C,i){i.base64=!1,i.binary=!1,i.dir=!1,i.createFolders=!0,i.date=null,i.compression=null,i.compressionOptions=null,i.comment=null,i.unixPermissions=null,i.dosPermissions=null},{}],6:[function(g,C,i){var e=null;e=typeof Promise<"u"?Promise:g("lie"),C.exports={Promise:e}},{lie:37}],7:[function(g,C,i){var e=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Uint32Array<"u",A=g("pako"),s=g("./utils"),l=g("./stream/GenericWorker"),n=e?"uint8array":"array";function a(d,o){l.call(this,"FlateWorker/"+d),this._pako=null,this._pakoAction=d,this._pakoOptions=o,this.meta={}}i.magic="\b\0",s.inherits(a,l),a.prototype.processChunk=function(d){this.meta=d.meta,this._pako===null&&this._createPako(),this._pako.push(s.transformTo(n,d.data),!1)},a.prototype.flush=function(){l.prototype.flush.call(this),this._pako===null&&this._createPako(),this._pako.push([],!0)},a.prototype.cleanUp=function(){l.prototype.cleanUp.call(this),this._pako=null},a.prototype._createPako=function(){this._pako=new A[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var d=this;this._pako.onData=function(o){d.push({data:o,meta:d.meta})}},i.compressWorker=function(d){return new a("Deflate",d)},i.uncompressWorker=function(){return new a("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(g,C,i){function e(c,r){var h,b="";for(h=0;h<r;h++)b+=String.fromCharCode(255&c),c>>>=8;return b}function A(c,r,h,b,u,m){var Z,p,Y=c.file,R=c.compression,X=m!==n.utf8encode,H=s.transformTo("string",m(Y.name)),S=s.transformTo("string",n.utf8encode(Y.name)),z=Y.comment,v=s.transformTo("string",m(z)),K=s.transformTo("string",n.utf8encode(z)),V=S.length!==Y.name.length,N=K.length!==z.length,B="",G="",w="",W=Y.dir,y=Y.date,f={crc32:0,compressedSize:0,uncompressedSize:0};r&&!h||(f.crc32=c.crc32,f.compressedSize=c.compressedSize,f.uncompressedSize=c.uncompressedSize);var D=0;r&&(D|=8),X||!V&&!N||(D|=2048);var F=0,T=0;W&&(F|=16),u==="UNIX"?(T=798,F|=function(P,L){var E=P;return P||(E=L?16893:33204),(65535&E)<<16}(Y.unixPermissions,W)):(T=20,F|=function(P){return 63&(P||0)}(Y.dosPermissions)),Z=y.getUTCHours(),Z<<=6,Z|=y.getUTCMinutes(),Z<<=5,Z|=y.getUTCSeconds()/2,p=y.getUTCFullYear()-1980,p<<=4,p|=y.getUTCMonth()+1,p<<=5,p|=y.getUTCDate(),V&&(G=e(1,1)+e(a(H),4)+S,B+="up"+e(G.length,2)+G),N&&(w=e(1,1)+e(a(v),4)+K,B+="uc"+e(w.length,2)+w);var Q="";return Q+=`
- \0`,Q+=e(D,2),Q+=R.magic,Q+=e(Z,2),Q+=e(p,2),Q+=e(f.crc32,4),Q+=e(f.compressedSize,4),Q+=e(f.uncompressedSize,4),Q+=e(H.length,2),Q+=e(B.length,2),{fileRecord:d.LOCAL_FILE_HEADER+Q+H+B,dirRecord:d.CENTRAL_FILE_HEADER+e(T,2)+Q+e(v.length,2)+"\0\0\0\0"+e(F,4)+e(b,4)+H+B+v}}var s=g("../utils"),l=g("../stream/GenericWorker"),n=g("../utf8"),a=g("../crc32"),d=g("../signature");function o(c,r,h,b){l.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=r,this.zipPlatform=h,this.encodeFileName=b,this.streamFiles=c,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}s.inherits(o,l),o.prototype.push=function(c){var r=c.meta.percent||0,h=this.entriesCount,b=this._sources.length;this.accumulate?this.contentBuffer.push(c):(this.bytesWritten+=c.data.length,l.prototype.push.call(this,{data:c.data,meta:{currentFile:this.currentFile,percent:h?(r+100*(h-b-1))/h:100}}))},o.prototype.openedSource=function(c){this.currentSourceOffset=this.bytesWritten,this.currentFile=c.file.name;var r=this.streamFiles&&!c.file.dir;if(r){var h=A(c,r,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:h.fileRecord,meta:{percent:0}})}else this.accumulate=!0},o.prototype.closedSource=function(c){this.accumulate=!1;var r=this.streamFiles&&!c.file.dir,h=A(c,r,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(h.dirRecord),r)this.push({data:function(b){return d.DATA_DESCRIPTOR+e(b.crc32,4)+e(b.compressedSize,4)+e(b.uncompressedSize,4)}(c),meta:{percent:100}});else for(this.push({data:h.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},o.prototype.flush=function(){for(var c=this.bytesWritten,r=0;r<this.dirRecords.length;r++)this.push({data:this.dirRecords[r],meta:{percent:100}});var h=this.bytesWritten-c,b=function(u,m,Z,p,Y){var R=s.transformTo("string",Y(p));return d.CENTRAL_DIRECTORY_END+"\0\0\0\0"+e(u,2)+e(u,2)+e(m,4)+e(Z,4)+e(R.length,2)+R}(this.dirRecords.length,h,c,this.zipComment,this.encodeFileName);this.push({data:b,meta:{percent:100}})},o.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},o.prototype.registerPrevious=function(c){this._sources.push(c);var r=this;return c.on("data",function(h){r.processChunk(h)}),c.on("end",function(){r.closedSource(r.previous.streamInfo),r._sources.length?r.prepareNextSource():r.end()}),c.on("error",function(h){r.error(h)}),this},o.prototype.resume=function(){return!!l.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},o.prototype.error=function(c){var r=this._sources;if(!l.prototype.error.call(this,c))return!1;for(var h=0;h<r.length;h++)try{r[h].error(c)}catch{}return!0},o.prototype.lock=function(){l.prototype.lock.call(this);for(var c=this._sources,r=0;r<c.length;r++)c[r].lock()},C.exports=o},{"../crc32":4,"../signature":23,"../stream/GenericWorker":28,"../utf8":31,"../utils":32}],9:[function(g,C,i){var e=g("../compressions"),A=g("./ZipFileWorker");i.generateWorker=function(s,l,n){var a=new A(l.streamFiles,n,l.platform,l.encodeFileName),d=0;try{s.forEach(function(o,c){d++;var r=function(m,Z){var p=m||Z,Y=e[p];if(!Y)throw new Error(p+" is not a valid compression method !");return Y}(c.options.compression,l.compression),h=c.options.compressionOptions||l.compressionOptions||{},b=c.dir,u=c.date;c._compressWorker(r,h).withStreamInfo("file",{name:o,dir:b,date:u,comment:c.comment||"",unixPermissions:c.unixPermissions,dosPermissions:c.dosPermissions}).pipe(a)}),a.entriesCount=d}catch(o){a.error(o)}return a}},{"../compressions":3,"./ZipFileWorker":8}],10:[function(g,C,i){function e(){if(!(this instanceof e))return new e;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 A=new e;for(var s in this)typeof this[s]!="function"&&(A[s]=this[s]);return A}}(e.prototype=g("./object")).loadAsync=g("./load"),e.support=g("./support"),e.defaults=g("./defaults"),e.version="3.10.1",e.loadAsync=function(A,s){return new e().loadAsync(A,s)},e.external=g("./external"),C.exports=e},{"./defaults":5,"./external":6,"./load":11,"./object":15,"./support":30}],11:[function(g,C,i){var e=g("./utils"),A=g("./external"),s=g("./utf8"),l=g("./zipEntries"),n=g("./stream/Crc32Probe"),a=g("./nodejsUtils");function d(o){return new A.Promise(function(c,r){var h=o.decompressed.getContentWorker().pipe(new n);h.on("error",function(b){r(b)}).on("end",function(){h.streamInfo.crc32!==o.decompressed.crc32?r(new Error("Corrupted zip : CRC32 mismatch")):c()}).resume()})}C.exports=function(o,c){var r=this;return c=e.extend(c||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:s.utf8decode}),a.isNode&&a.isStream(o)?A.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")):e.prepareContent("the loaded zip file",o,!0,c.optimizedBinaryString,c.base64).then(function(h){var b=new l(c);return b.load(h),b}).then(function(h){var b=[A.Promise.resolve(h)],u=h.files;if(c.checkCRC32)for(var m=0;m<u.length;m++)b.push(d(u[m]));return A.Promise.all(b)}).then(function(h){for(var b=h.shift(),u=b.files,m=0;m<u.length;m++){var Z=u[m],p=Z.fileNameStr,Y=e.resolve(Z.fileNameStr);r.file(Y,Z.decompressed,{binary:!0,optimizedBinaryString:!0,date:Z.date,dir:Z.dir,comment:Z.fileCommentStr.length?Z.fileCommentStr:null,unixPermissions:Z.unixPermissions,dosPermissions:Z.dosPermissions,createFolders:c.createFolders}),Z.dir||(r.file(Y).unsafeOriginalName=p)}return b.zipComment.length&&(r.comment=b.zipComment),r})}},{"./external":6,"./nodejsUtils":14,"./stream/Crc32Probe":25,"./utf8":31,"./utils":32,"./zipEntries":33}],12:[function(g,C,i){var e=g("../utils"),A=g("../stream/GenericWorker");function s(l,n){A.call(this,"Nodejs stream input adapter for "+l),this._upstreamEnded=!1,this._bindStream(n)}e.inherits(s,A),s.prototype._bindStream=function(l){var n=this;(this._stream=l).pause(),l.on("data",function(a){n.push({data:a,meta:{percent:0}})}).on("error",function(a){n.isPaused?this.generatedError=a:n.error(a)}).on("end",function(){n.isPaused?n._upstreamEnded=!0:n.end()})},s.prototype.pause=function(){return!!A.prototype.pause.call(this)&&(this._stream.pause(),!0)},s.prototype.resume=function(){return!!A.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)},C.exports=s},{"../stream/GenericWorker":28,"../utils":32}],13:[function(g,C,i){var e=g("readable-stream").Readable;function A(s,l,n){e.call(this,l),this._helper=s;var a=this;s.on("data",function(d,o){a.push(d)||a._helper.pause(),n&&n(o)}).on("error",function(d){a.emit("error",d)}).on("end",function(){a.push(null)})}g("../utils").inherits(A,e),A.prototype._read=function(){this._helper.resume()},C.exports=A},{"../utils":32,"readable-stream":16}],14:[function(g,C,i){C.exports={isNode:typeof Buffer<"u",newBufferFrom:function(e,A){if(Buffer.from&&Buffer.from!==Uint8Array.from)return Buffer.from(e,A);if(typeof e=="number")throw new Error('The "data" argument must not be a number');return new Buffer(e,A)},allocBuffer:function(e){if(Buffer.alloc)return Buffer.alloc(e);var A=new Buffer(e);return A.fill(0),A},isBuffer:function(e){return Buffer.isBuffer(e)},isStream:function(e){return e&&typeof e.on=="function"&&typeof e.pause=="function"&&typeof e.resume=="function"}}},{}],15:[function(g,C,i){function e(Y,R,X){var H,S=s.getTypeOf(R),z=s.extend(X||{},a);z.date=z.date||new Date,z.compression!==null&&(z.compression=z.compression.toUpperCase()),typeof z.unixPermissions=="string"&&(z.unixPermissions=parseInt(z.unixPermissions,8)),z.unixPermissions&&16384&z.unixPermissions&&(z.dir=!0),z.dosPermissions&&16&z.dosPermissions&&(z.dir=!0),z.dir&&(Y=u(Y)),z.createFolders&&(H=b(Y))&&m.call(this,H,!0);var v=S==="string"&&z.binary===!1&&z.base64===!1;X&&X.binary!==void 0||(z.binary=!v),(R instanceof d&&R.uncompressedSize===0||z.dir||!R||R.length===0)&&(z.base64=!1,z.binary=!0,R="",z.compression="STORE",S="string");var K=null;K=R instanceof d||R instanceof l?R:r.isNode&&r.isStream(R)?new h(Y,R):s.prepareContent(Y,R,z.binary,z.optimizedBinaryString,z.base64);var V=new o(Y,K,z);this.files[Y]=V}var A=g("./utf8"),s=g("./utils"),l=g("./stream/GenericWorker"),n=g("./stream/StreamHelper"),a=g("./defaults"),d=g("./compressedObject"),o=g("./zipObject"),c=g("./generate"),r=g("./nodejsUtils"),h=g("./nodejs/NodejsStreamInputAdapter"),b=function(Y){Y.slice(-1)==="/"&&(Y=Y.substring(0,Y.length-1));var R=Y.lastIndexOf("/");return 0<R?Y.substring(0,R):""},u=function(Y){return Y.slice(-1)!=="/"&&(Y+="/"),Y},m=function(Y,R){return R=R!==void 0?R:a.createFolders,Y=u(Y),this.files[Y]||e.call(this,Y,null,{dir:!0,createFolders:R}),this.files[Y]};function Z(Y){return Object.prototype.toString.call(Y)==="[object RegExp]"}var p={load:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},forEach:function(Y){var R,X,H;for(R in this.files)H=this.files[R],(X=R.slice(this.root.length,R.length))&&R.slice(0,this.root.length)===this.root&&Y(X,H)},filter:function(Y){var R=[];return this.forEach(function(X,H){Y(X,H)&&R.push(H)}),R},file:function(Y,R,X){if(arguments.length!==1)return Y=this.root+Y,e.call(this,Y,R,X),this;if(Z(Y)){var H=Y;return this.filter(function(z,v){return!v.dir&&H.test(z)})}var S=this.files[this.root+Y];return S&&!S.dir?S:null},folder:function(Y){if(!Y)return this;if(Z(Y))return this.filter(function(S,z){return z.dir&&Y.test(S)});var R=this.root+Y,X=m.call(this,R),H=this.clone();return H.root=X.name,H},remove:function(Y){Y=this.root+Y;var R=this.files[Y];if(R||(Y.slice(-1)!=="/"&&(Y+="/"),R=this.files[Y]),R&&!R.dir)delete this.files[Y];else for(var X=this.filter(function(S,z){return z.name.slice(0,Y.length)===Y}),H=0;H<X.length;H++)delete this.files[X[H].name];return this},generate:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},generateInternalStream:function(Y){var R,X={};try{if((X=s.extend(Y||{},{streamFiles:!1,compression:"STORE",compressionOptions:null,type:"",platform:"DOS",comment:null,mimeType:"application/zip",encodeFileName:A.utf8encode})).type=X.type.toLowerCase(),X.compression=X.compression.toUpperCase(),X.type==="binarystring"&&(X.type="string"),!X.type)throw new Error("No output type specified.");s.checkSupport(X.type),X.platform!=="darwin"&&X.platform!=="freebsd"&&X.platform!=="linux"&&X.platform!=="sunos"||(X.platform="UNIX"),X.platform==="win32"&&(X.platform="DOS");var H=X.comment||this.comment||"";R=c.generateWorker(this,X,H)}catch(S){(R=new l("error")).error(S)}return new n(R,X.type||"string",X.mimeType)},generateAsync:function(Y,R){return this.generateInternalStream(Y).accumulate(R)},generateNodeStream:function(Y,R){return(Y=Y||{}).type||(Y.type="nodebuffer"),this.generateInternalStream(Y).toNodejsStream(R)}};C.exports=p},{"./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(g,C,i){C.exports=g("stream")},{stream:void 0}],17:[function(g,C,i){var e=g("./DataReader");function A(s){e.call(this,s);for(var l=0;l<this.data.length;l++)s[l]=255&s[l]}g("../utils").inherits(A,e),A.prototype.byteAt=function(s){return this.data[this.zero+s]},A.prototype.lastIndexOfSignature=function(s){for(var l=s.charCodeAt(0),n=s.charCodeAt(1),a=s.charCodeAt(2),d=s.charCodeAt(3),o=this.length-4;0<=o;--o)if(this.data[o]===l&&this.data[o+1]===n&&this.data[o+2]===a&&this.data[o+3]===d)return o-this.zero;return-1},A.prototype.readAndCheckSignature=function(s){var l=s.charCodeAt(0),n=s.charCodeAt(1),a=s.charCodeAt(2),d=s.charCodeAt(3),o=this.readData(4);return l===o[0]&&n===o[1]&&a===o[2]&&d===o[3]},A.prototype.readData=function(s){if(this.checkOffset(s),s===0)return[];var l=this.data.slice(this.zero+this.index,this.zero+this.index+s);return this.index+=s,l},C.exports=A},{"../utils":32,"./DataReader":18}],18:[function(g,C,i){var e=g("../utils");function A(s){this.data=s,this.length=s.length,this.index=0,this.zero=0}A.prototype={checkOffset:function(s){this.checkIndex(this.index+s)},checkIndex:function(s){if(this.length<this.zero+s||s<0)throw new Error("End of data reached (data length = "+this.length+", asked index = "+s+"). Corrupted zip ?")},setIndex:function(s){this.checkIndex(s),this.index=s},skip:function(s){this.setIndex(this.index+s)},byteAt:function(){},readInt:function(s){var l,n=0;for(this.checkOffset(s),l=this.index+s-1;l>=this.index;l--)n=(n<<8)+this.byteAt(l);return this.index+=s,n},readString:function(s){return e.transformTo("string",this.readData(s))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var s=this.readInt(4);return new Date(Date.UTC(1980+(s>>25&127),(s>>21&15)-1,s>>16&31,s>>11&31,s>>5&63,(31&s)<<1))}},C.exports=A},{"../utils":32}],19:[function(g,C,i){var e=g("./Uint8ArrayReader");function A(s){e.call(this,s)}g("../utils").inherits(A,e),A.prototype.readData=function(s){this.checkOffset(s);var l=this.data.slice(this.zero+this.index,this.zero+this.index+s);return this.index+=s,l},C.exports=A},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(g,C,i){var e=g("./DataReader");function A(s){e.call(this,s)}g("../utils").inherits(A,e),A.prototype.byteAt=function(s){return this.data.charCodeAt(this.zero+s)},A.prototype.lastIndexOfSignature=function(s){return this.data.lastIndexOf(s)-this.zero},A.prototype.readAndCheckSignature=function(s){return s===this.readData(4)},A.prototype.readData=function(s){this.checkOffset(s);var l=this.data.slice(this.zero+this.index,this.zero+this.index+s);return this.index+=s,l},C.exports=A},{"../utils":32,"./DataReader":18}],21:[function(g,C,i){var e=g("./ArrayReader");function A(s){e.call(this,s)}g("../utils").inherits(A,e),A.prototype.readData=function(s){if(this.checkOffset(s),s===0)return new Uint8Array(0);var l=this.data.subarray(this.zero+this.index,this.zero+this.index+s);return this.index+=s,l},C.exports=A},{"../utils":32,"./ArrayReader":17}],22:[function(g,C,i){var e=g("../utils"),A=g("../support"),s=g("./ArrayReader"),l=g("./StringReader"),n=g("./NodeBufferReader"),a=g("./Uint8ArrayReader");C.exports=function(d){var o=e.getTypeOf(d);return e.checkSupport(o),o!=="string"||A.uint8array?o==="nodebuffer"?new n(d):A.uint8array?new a(e.transformTo("uint8array",d)):new s(e.transformTo("array",d)):new l(d)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(g,C,i){i.LOCAL_FILE_HEADER="PK",i.CENTRAL_FILE_HEADER="PK",i.CENTRAL_DIRECTORY_END="PK",i.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK\x07",i.ZIP64_CENTRAL_DIRECTORY_END="PK",i.DATA_DESCRIPTOR="PK\x07\b"},{}],24:[function(g,C,i){var e=g("./GenericWorker"),A=g("../utils");function s(l){e.call(this,"ConvertWorker to "+l),this.destType=l}A.inherits(s,e),s.prototype.processChunk=function(l){this.push({data:A.transformTo(this.destType,l.data),meta:l.meta})},C.exports=s},{"../utils":32,"./GenericWorker":28}],25:[function(g,C,i){var e=g("./GenericWorker"),A=g("../crc32");function s(){e.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}g("../utils").inherits(s,e),s.prototype.processChunk=function(l){this.streamInfo.crc32=A(l.data,this.streamInfo.crc32||0),this.push(l)},C.exports=s},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(g,C,i){var e=g("../utils"),A=g("./GenericWorker");function s(l){A.call(this,"DataLengthProbe for "+l),this.propName=l,this.withStreamInfo(l,0)}e.inherits(s,A),s.prototype.processChunk=function(l){if(l){var n=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=n+l.data.length}A.prototype.processChunk.call(this,l)},C.exports=s},{"../utils":32,"./GenericWorker":28}],27:[function(g,C,i){var e=g("../utils"),A=g("./GenericWorker");function s(l){A.call(this,"DataWorker");var n=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,l.then(function(a){n.dataIsReady=!0,n.data=a,n.max=a&&a.length||0,n.type=e.getTypeOf(a),n.isPaused||n._tickAndRepeat()},function(a){n.error(a)})}e.inherits(s,A),s.prototype.cleanUp=function(){A.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!A.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,e.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(e.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var l=null,n=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,n);break;case"uint8array":l=this.data.subarray(this.index,n);break;case"array":case"nodebuffer":l=this.data.slice(this.index,n)}return this.index=n,this.push({data:l,meta:{percent:this.max?this.index/this.max*100:0}})},C.exports=s},{"../utils":32,"./GenericWorker":28}],28:[function(g,C,i){function e(A){this.name=A||"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}e.prototype={push:function(A){this.emit("data",A)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(A){this.emit("error",A)}return!0},error:function(A){return!this.isFinished&&(this.isPaused?this.generatedError=A:(this.isFinished=!0,this.emit("error",A),this.previous&&this.previous.error(A),this.cleanUp()),!0)},on:function(A,s){return this._listeners[A].push(s),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(A,s){if(this._listeners[A])for(var l=0;l<this._listeners[A].length;l++)this._listeners[A][l].call(this,s)},pipe:function(A){return A.registerPrevious(this)},registerPrevious:function(A){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.streamInfo=A.streamInfo,this.mergeStreamInfo(),this.previous=A;var s=this;return A.on("data",function(l){s.processChunk(l)}),A.on("end",function(){s.end()}),A.on("error",function(l){s.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 A=this.isPaused=!1;return this.generatedError&&(this.error(this.generatedError),A=!0),this.previous&&this.previous.resume(),!A},flush:function(){},processChunk:function(A){this.push(A)},withStreamInfo:function(A,s){return this.extraStreamInfo[A]=s,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var A in this.extraStreamInfo)Object.prototype.hasOwnProperty.call(this.extraStreamInfo,A)&&(this.streamInfo[A]=this.extraStreamInfo[A])},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 A="Worker "+this.name;return this.previous?this.previous+" -> "+A:A}},C.exports=e},{}],29:[function(g,C,i){var e=g("../utils"),A=g("./ConvertWorker"),s=g("./GenericWorker"),l=g("../base64"),n=g("../support"),a=g("../external"),d=null;if(n.nodestream)try{d=g("../nodejs/NodejsStreamOutputAdapter")}catch{}function o(r,h){return new a.Promise(function(b,u){var m=[],Z=r._internalType,p=r._outputType,Y=r._mimeType;r.on("data",function(R,X){m.push(R),h&&h(X)}).on("error",function(R){m=[],u(R)}).on("end",function(){try{var R=function(X,H,S){switch(X){case"blob":return e.newBlob(e.transformTo("arraybuffer",H),S);case"base64":return l.encode(H);default:return e.transformTo(X,H)}}(p,function(X,H){var S,z=0,v=null,K=0;for(S=0;S<H.length;S++)K+=H[S].length;switch(X){case"string":return H.join("");case"array":return Array.prototype.concat.apply([],H);case"uint8array":for(v=new Uint8Array(K),S=0;S<H.length;S++)v.set(H[S],z),z+=H[S].length;return v;case"nodebuffer":return Buffer.concat(H);default:throw new Error("concat : unsupported type '"+X+"'")}}(Z,m),Y);b(R)}catch(X){u(X)}m=[]}).resume()})}function c(r,h,b){var u=h;switch(h){case"blob":case"arraybuffer":u="uint8array";break;case"base64":u="string"}try{this._internalType=u,this._outputType=h,this._mimeType=b,e.checkSupport(u),this._worker=r.pipe(new A(u)),r.lock()}catch(m){this._worker=new s("error"),this._worker.error(m)}}c.prototype={accumulate:function(r){return o(this,r)},on:function(r,h){var b=this;return r==="data"?this._worker.on(r,function(u){h.call(b,u.data,u.meta)}):this._worker.on(r,function(){e.delay(h,arguments,b)}),this},resume:function(){return e.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(r){if(e.checkSupport("nodestream"),this._outputType!=="nodebuffer")throw new Error(this._outputType+" is not supported by this method");return new d(this,{objectMode:this._outputType!=="nodebuffer"},r)}},C.exports=c},{"../base64":1,"../external":6,"../nodejs/NodejsStreamOutputAdapter":13,"../support":30,"../utils":32,"./ConvertWorker":24,"./GenericWorker":28}],30:[function(g,C,i){if(i.base64=!0,i.array=!0,i.string=!0,i.arraybuffer=typeof ArrayBuffer<"u"&&typeof Uint8Array<"u",i.nodebuffer=typeof Buffer<"u",i.uint8array=typeof Uint8Array<"u",typeof ArrayBuffer>"u")i.blob=!1;else{var e=new ArrayBuffer(0);try{i.blob=new Blob([e],{type:"application/zip"}).size===0}catch{try{var A=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);A.append(e),i.blob=A.getBlob("application/zip").size===0}catch{i.blob=!1}}}try{i.nodestream=!!g("readable-stream").Readable}catch{i.nodestream=!1}},{"readable-stream":16}],31:[function(g,C,i){for(var e=g("./utils"),A=g("./support"),s=g("./nodejsUtils"),l=g("./stream/GenericWorker"),n=new Array(256),a=0;a<256;a++)n[a]=252<=a?6:248<=a?5:240<=a?4:224<=a?3:192<=a?2:1;n[254]=n[254]=1;function d(){l.call(this,"utf-8 decode"),this.leftOver=null}function o(){l.call(this,"utf-8 encode")}i.utf8encode=function(c){return A.nodebuffer?s.newBufferFrom(c,"utf-8"):function(r){var h,b,u,m,Z,p=r.length,Y=0;for(m=0;m<p;m++)(64512&(b=r.charCodeAt(m)))==55296&&m+1<p&&(64512&(u=r.charCodeAt(m+1)))==56320&&(b=65536+(b-55296<<10)+(u-56320),m++),Y+=b<128?1:b<2048?2:b<65536?3:4;for(h=A.uint8array?new Uint8Array(Y):new Array(Y),m=Z=0;Z<Y;m++)(64512&(b=r.charCodeAt(m)))==55296&&m+1<p&&(64512&(u=r.charCodeAt(m+1)))==56320&&(b=65536+(b-55296<<10)+(u-56320),m++),b<128?h[Z++]=b:(b<2048?h[Z++]=192|b>>>6:(b<65536?h[Z++]=224|b>>>12:(h[Z++]=240|b>>>18,h[Z++]=128|b>>>12&63),h[Z++]=128|b>>>6&63),h[Z++]=128|63&b);return h}(c)},i.utf8decode=function(c){return A.nodebuffer?e.transformTo("nodebuffer",c).toString("utf-8"):function(r){var h,b,u,m,Z=r.length,p=new Array(2*Z);for(h=b=0;h<Z;)if((u=r[h++])<128)p[b++]=u;else if(4<(m=n[u]))p[b++]=65533,h+=m-1;else{for(u&=m===2?31:m===3?15:7;1<m&&h<Z;)u=u<<6|63&r[h++],m--;1<m?p[b++]=65533:u<65536?p[b++]=u:(u-=65536,p[b++]=55296|u>>10&1023,p[b++]=56320|1023&u)}return p.length!==b&&(p.subarray?p=p.subarray(0,b):p.length=b),e.applyFromCharCode(p)}(c=e.transformTo(A.uint8array?"uint8array":"array",c))},e.inherits(d,l),d.prototype.processChunk=function(c){var r=e.transformTo(A.uint8array?"uint8array":"array",c.data);if(this.leftOver&&this.leftOver.length){if(A.uint8array){var h=r;(r=new Uint8Array(h.length+this.leftOver.length)).set(this.leftOver,0),r.set(h,this.leftOver.length)}else r=this.leftOver.concat(r);this.leftOver=null}var b=function(m,Z){var p;for((Z=Z||m.length)>m.length&&(Z=m.length),p=Z-1;0<=p&&(192&m[p])==128;)p--;return p<0||p===0?Z:p+n[m[p]]>Z?p:Z}(r),u=r;b!==r.length&&(A.uint8array?(u=r.subarray(0,b),this.leftOver=r.subarray(b,r.length)):(u=r.slice(0,b),this.leftOver=r.slice(b,r.length))),this.push({data:i.utf8decode(u),meta:c.meta})},d.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:i.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},i.Utf8DecodeWorker=d,e.inherits(o,l),o.prototype.processChunk=function(c){this.push({data:i.utf8encode(c.data),meta:c.meta})},i.Utf8EncodeWorker=o},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(g,C,i){var e=g("./support"),A=g("./base64"),s=g("./nodejsUtils"),l=g("./external");function n(h){return h}function a(h,b){for(var u=0;u<h.length;++u)b[u]=255&h.charCodeAt(u);return b}g("setimmediate"),i.newBlob=function(h,b){i.checkSupport("blob");try{return new Blob([h],{type:b})}catch{try{var u=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);return u.append(h),u.getBlob(b)}catch{throw new Error("Bug : can't construct the Blob.")}}};var d={stringifyByChunk:function(h,b,u){var m=[],Z=0,p=h.length;if(p<=u)return String.fromCharCode.apply(null,h);for(;Z<p;)b==="array"||b==="nodebuffer"?m.push(String.fromCharCode.apply(null,h.slice(Z,Math.min(Z+u,p)))):m.push(String.fromCharCode.apply(null,h.subarray(Z,Math.min(Z+u,p)))),Z+=u;return m.join("")},stringifyByChar:function(h){for(var b="",u=0;u<h.length;u++)b+=String.fromCharCode(h[u]);return b},applyCanBeUsed:{uint8array:function(){try{return e.uint8array&&String.fromCharCode.apply(null,new Uint8Array(1)).length===1}catch{return!1}}(),nodebuffer:function(){try{return e.nodebuffer&&String.fromCharCode.apply(null,s.allocBuffer(1)).length===1}catch{return!1}}()}};function o(h){var b=65536,u=i.getTypeOf(h),m=!0;if(u==="uint8array"?m=d.applyCanBeUsed.uint8array:u==="nodebuffer"&&(m=d.applyCanBeUsed.nodebuffer),m)for(;1<b;)try{return d.stringifyByChunk(h,u,b)}catch{b=Math.floor(b/2)}return d.stringifyByChar(h)}function c(h,b){for(var u=0;u<h.length;u++)b[u]=h[u];return b}i.applyFromCharCode=o;var r={};r.string={string:n,array:function(h){return a(h,new Array(h.length))},arraybuffer:function(h){return r.string.uint8array(h).buffer},uint8array:function(h){return a(h,new Uint8Array(h.length))},nodebuffer:function(h){return a(h,s.allocBuffer(h.length))}},r.array={string:o,array:n,arraybuffer:function(h){return new Uint8Array(h).buffer},uint8array:function(h){return new Uint8Array(h)},nodebuffer:function(h){return s.newBufferFrom(h)}},r.arraybuffer={string:function(h){return o(new Uint8Array(h))},array:function(h){return c(new Uint8Array(h),new Array(h.byteLength))},arraybuffer:n,uint8array:function(h){return new Uint8Array(h)},nodebuffer:function(h){return s.newBufferFrom(new Uint8Array(h))}},r.uint8array={string:o,array:function(h){return c(h,new Array(h.length))},arraybuffer:function(h){return h.buffer},uint8array:n,nodebuffer:function(h){return s.newBufferFrom(h)}},r.nodebuffer={string:o,array:function(h){return c(h,new Array(h.length))},arraybuffer:function(h){return r.nodebuffer.uint8array(h).buffer},uint8array:function(h){return c(h,new Uint8Array(h.length))},nodebuffer:n},i.transformTo=function(h,b){if(b=b||"",!h)return b;i.checkSupport(h);var u=i.getTypeOf(b);return r[u][h](b)},i.resolve=function(h){for(var b=h.split("/"),u=[],m=0;m<b.length;m++){var Z=b[m];Z==="."||Z===""&&m!==0&&m!==b.length-1||(Z===".."?u.pop():u.push(Z))}return u.join("/")},i.getTypeOf=function(h){return typeof h=="string"?"string":Object.prototype.toString.call(h)==="[object Array]"?"array":e.nodebuffer&&s.isBuffer(h)?"nodebuffer":e.uint8array&&h instanceof Uint8Array?"uint8array":e.arraybuffer&&h instanceof ArrayBuffer?"arraybuffer":void 0},i.checkSupport=function(h){if(!e[h.toLowerCase()])throw new Error(h+" is not supported by this platform")},i.MAX_VALUE_16BITS=65535,i.MAX_VALUE_32BITS=-1,i.pretty=function(h){var b,u,m="";for(u=0;u<(h||"").length;u++)m+="\\x"+((b=h.charCodeAt(u))<16?"0":"")+b.toString(16).toUpperCase();return m},i.delay=function(h,b,u){setImmediate(function(){h.apply(u||null,b||[])})},i.inherits=function(h,b){function u(){}u.prototype=b.prototype,h.prototype=new u},i.extend=function(){var h,b,u={};for(h=0;h<arguments.length;h++)for(b in arguments[h])Object.prototype.hasOwnProperty.call(arguments[h],b)&&u[b]===void 0&&(u[b]=arguments[h][b]);return u},i.prepareContent=function(h,b,u,m,Z){return l.Promise.resolve(b).then(function(p){return e.blob&&(p instanceof Blob||["[object File]","[object Blob]"].indexOf(Object.prototype.toString.call(p))!==-1)&&typeof FileReader<"u"?new l.Promise(function(Y,R){var X=new FileReader;X.onload=function(H){Y(H.target.result)},X.onerror=function(H){R(H.target.error)},X.readAsArrayBuffer(p)}):p}).then(function(p){var Y=i.getTypeOf(p);return Y?(Y==="arraybuffer"?p=i.transformTo("uint8array",p):Y==="string"&&(Z?p=A.decode(p):u&&m!==!0&&(p=function(R){return a(R,e.uint8array?new Uint8Array(R.length):new Array(R.length))}(p))),p):l.Promise.reject(new Error("Can't read the data of '"+h+"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?"))})}},{"./base64":1,"./external":6,"./nodejsUtils":14,"./support":30,setimmediate:54}],33:[function(g,C,i){var e=g("./reader/readerFor"),A=g("./utils"),s=g("./signature"),l=g("./zipEntry"),n=g("./support");function a(d){this.files=[],this.loadOptions=d}a.prototype={checkSignature:function(d){if(!this.reader.readAndCheckSignature(d)){this.reader.index-=4;var o=this.reader.readString(4);throw new Error("Corrupted zip or bug: unexpected signature ("+A.pretty(o)+", expected "+A.pretty(d)+")")}},isSignature:function(d,o){var c=this.reader.index;this.reader.setIndex(d);var r=this.reader.readString(4)===o;return this.reader.setIndex(c),r},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 d=this.reader.readData(this.zipCommentLength),o=n.uint8array?"uint8array":"array",c=A.transformTo(o,d);this.zipComment=this.loadOptions.decodeFileName(c)},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 d,o,c,r=this.zip64EndOfCentralSize-44;0<r;)d=this.reader.readInt(2),o=this.reader.readInt(4),c=this.reader.readData(o),this.zip64ExtensibleData[d]={id:d,length:o,value:c}},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 d,o;for(d=0;d<this.files.length;d++)o=this.files[d],this.reader.setIndex(o.localHeaderOffset),this.checkSignature(s.LOCAL_FILE_HEADER),o.readLocalPart(this.reader),o.handleUTF8(),o.processAttributes()},readCentralDir:function(){var d;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(s.CENTRAL_FILE_HEADER);)(d=new l({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(d);if(this.centralDirRecords!==this.files.length&&this.centralDirRecords!==0&&this.files.length===0)throw new Error("Corrupted zip or bug: expected "+this.centralDirRecords+" records in central dir, got "+this.files.length)},readEndOfCentral:function(){var d=this.reader.lastIndexOfSignature(s.CENTRAL_DIRECTORY_END);if(d<0)throw this.isSignature(0,s.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(d);var o=d;if(this.checkSignature(s.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===A.MAX_VALUE_16BITS||this.diskWithCentralDirStart===A.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===A.MAX_VALUE_16BITS||this.centralDirRecords===A.MAX_VALUE_16BITS||this.centralDirSize===A.MAX_VALUE_32BITS||this.centralDirOffset===A.MAX_VALUE_32BITS){if(this.zip64=!0,(d=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR))<0)throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator");if(this.reader.setIndex(d),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,s.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(s.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(s.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var c=this.centralDirOffset+this.centralDirSize;this.zip64&&(c+=20,c+=12+this.zip64EndOfCentralSize);var r=o-c;if(0<r)this.isSignature(o,s.CENTRAL_FILE_HEADER)||(this.reader.zero=r);else if(r<0)throw new Error("Corrupted zip: missing "+Math.abs(r)+" bytes.")},prepareReader:function(d){this.reader=e(d)},load:function(d){this.prepareReader(d),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},C.exports=a},{"./reader/readerFor":22,"./signature":23,"./support":30,"./utils":32,"./zipEntry":34}],34:[function(g,C,i){var e=g("./reader/readerFor"),A=g("./utils"),s=g("./compressedObject"),l=g("./crc32"),n=g("./utf8"),a=g("./compressions"),d=g("./support");function o(c,r){this.options=c,this.loadOptions=r}o.prototype={isEncrypted:function(){return(1&this.bitFlag)==1},useUTF8:function(){return(2048&this.bitFlag)==2048},readLocalPart:function(c){var r,h;if(c.skip(22),this.fileNameLength=c.readInt(2),h=c.readInt(2),this.fileName=c.readData(this.fileNameLength),c.skip(h),this.compressedSize===-1||this.uncompressedSize===-1)throw new Error("Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)");if((r=function(b){for(var u in a)if(Object.prototype.hasOwnProperty.call(a,u)&&a[u].magic===b)return a[u];return null}(this.compressionMethod))===null)throw new Error("Corrupted zip : compression "+A.pretty(this.compressionMethod)+" unknown (inner file : "+A.transformTo("string",this.fileName)+")");this.decompressed=new s(this.compressedSize,this.uncompressedSize,this.crc32,r,c.readData(this.compressedSize))},readCentralPart:function(c){this.versionMadeBy=c.readInt(2),c.skip(2),this.bitFlag=c.readInt(2),this.compressionMethod=c.readString(2),this.date=c.readDate(),this.crc32=c.readInt(4),this.compressedSize=c.readInt(4),this.uncompressedSize=c.readInt(4);var r=c.readInt(2);if(this.extraFieldsLength=c.readInt(2),this.fileCommentLength=c.readInt(2),this.diskNumberStart=c.readInt(2),this.internalFileAttributes=c.readInt(2),this.externalFileAttributes=c.readInt(4),this.localHeaderOffset=c.readInt(4),this.isEncrypted())throw new Error("Encrypted zip are not supported");c.skip(r),this.readExtraFields(c),this.parseZIP64ExtraField(c),this.fileComment=c.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var c=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),c==0&&(this.dosPermissions=63&this.externalFileAttributes),c==3&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||this.fileNameStr.slice(-1)!=="/"||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var c=e(this.extraFields[1].value);this.uncompressedSize===A.MAX_VALUE_32BITS&&(this.uncompressedSize=c.readInt(8)),this.compressedSize===A.MAX_VALUE_32BITS&&(this.compressedSize=c.readInt(8)),this.localHeaderOffset===A.MAX_VALUE_32BITS&&(this.localHeaderOffset=c.readInt(8)),this.diskNumberStart===A.MAX_VALUE_32BITS&&(this.diskNumberStart=c.readInt(4))}},readExtraFields:function(c){var r,h,b,u=c.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});c.index+4<u;)r=c.readInt(2),h=c.readInt(2),b=c.readData(h),this.extraFields[r]={id:r,length:h,value:b};c.setIndex(u)},handleUTF8:function(){var c=d.uint8array?"uint8array":"array";if(this.useUTF8())this.fileNameStr=n.utf8decode(this.fileName),this.fileCommentStr=n.utf8decode(this.fileComment);else{var r=this.findExtraFieldUnicodePath();if(r!==null)this.fileNameStr=r;else{var h=A.transformTo(c,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(h)}var b=this.findExtraFieldUnicodeComment();if(b!==null)this.fileCommentStr=b;else{var u=A.transformTo(c,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(u)}}},findExtraFieldUnicodePath:function(){var c=this.extraFields[28789];if(c){var r=e(c.value);return r.readInt(1)!==1||l(this.fileName)!==r.readInt(4)?null:n.utf8decode(r.readData(c.length-5))}return null},findExtraFieldUnicodeComment:function(){var c=this.extraFields[25461];if(c){var r=e(c.value);return r.readInt(1)!==1||l(this.fileComment)!==r.readInt(4)?null:n.utf8decode(r.readData(c.length-5))}return null}},C.exports=o},{"./compressedObject":2,"./compressions":3,"./crc32":4,"./reader/readerFor":22,"./support":30,"./utf8":31,"./utils":32}],35:[function(g,C,i){function e(r,h,b){this.name=r,this.dir=b.dir,this.date=b.date,this.comment=b.comment,this.unixPermissions=b.unixPermissions,this.dosPermissions=b.dosPermissions,this._data=h,this._dataBinary=b.binary,this.options={compression:b.compression,compressionOptions:b.compressionOptions}}var A=g("./stream/StreamHelper"),s=g("./stream/DataWorker"),l=g("./utf8"),n=g("./compressedObject"),a=g("./stream/GenericWorker");e.prototype={internalStream:function(r){var h=null,b="string";try{if(!r)throw new Error("No output type specified.");var u=(b=r.toLowerCase())==="string"||b==="text";b!=="binarystring"&&b!=="text"||(b="string"),h=this._decompressWorker();var m=!this._dataBinary;m&&!u&&(h=h.pipe(new l.Utf8EncodeWorker)),!m&&u&&(h=h.pipe(new l.Utf8DecodeWorker))}catch(Z){(h=new a("error")).error(Z)}return new A(h,b,"")},async:function(r,h){return this.internalStream(r).accumulate(h)},nodeStream:function(r,h){return this.internalStream(r||"nodebuffer").toNodejsStream(h)},_compressWorker:function(r,h){if(this._data instanceof n&&this._data.compression.magic===r.magic)return this._data.getCompressedWorker();var b=this._decompressWorker();return this._dataBinary||(b=b.pipe(new l.Utf8EncodeWorker)),n.createWorkerFrom(b,r,h)},_decompressWorker:function(){return this._data instanceof n?this._data.getContentWorker():this._data instanceof a?this._data:new s(this._data)}};for(var d=["asText","asBinary","asNodeBuffer","asUint8Array","asArrayBuffer"],o=function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},c=0;c<d.length;c++)e.prototype[d[c]]=o;C.exports=e},{"./compressedObject":2,"./stream/DataWorker":27,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31}],36:[function(g,C,i){(function(e){var A,s,l=e.MutationObserver||e.WebKitMutationObserver;if(l){var n=0,a=new l(r),d=e.document.createTextNode("");a.observe(d,{characterData:!0}),A=function(){d.data=n=++n%2}}else if(e.setImmediate||e.MessageChannel===void 0)A="document"in e&&"onreadystatechange"in e.document.createElement("script")?function(){var h=e.document.createElement("script");h.onreadystatechange=function(){r(),h.onreadystatechange=null,h.parentNode.removeChild(h),h=null},e.document.documentElement.appendChild(h)}:function(){setTimeout(r,0)};else{var o=new e.MessageChannel;o.port1.onmessage=r,A=function(){o.port2.postMessage(0)}}var c=[];function r(){var h,b;s=!0;for(var u=c.length;u;){for(b=c,c=[],h=-1;++h<u;)b[h]();u=c.length}s=!1}C.exports=function(h){c.push(h)!==1||s||A()}}).call(this,typeof FI<"u"?FI:typeof self<"u"?self:typeof window<"u"?window:{})},{}],37:[function(g,C,i){var e=g("immediate");function A(){}var s={},l=["REJECTED"],n=["FULFILLED"],a=["PENDING"];function d(u){if(typeof u!="function")throw new TypeError("resolver must be a function");this.state=a,this.queue=[],this.outcome=void 0,u!==A&&h(this,u)}function o(u,m,Z){this.promise=u,typeof m=="function"&&(this.onFulfilled=m,this.callFulfilled=this.otherCallFulfilled),typeof Z=="function"&&(this.onRejected=Z,this.callRejected=this.otherCallRejected)}function c(u,m,Z){e(function(){var p;try{p=m(Z)}catch(Y){return s.reject(u,Y)}p===u?s.reject(u,new TypeError("Cannot resolve promise with itself")):s.resolve(u,p)})}function r(u){var m=u&&u.then;if(u&&(typeof u=="object"||typeof u=="function")&&typeof m=="function")return function(){m.apply(u,arguments)}}function h(u,m){var Z=!1;function p(X){Z||(Z=!0,s.reject(u,X))}function Y(X){Z||(Z=!0,s.resolve(u,X))}var R=b(function(){m(Y,p)});R.status==="error"&&p(R.value)}function b(u,m){var Z={};try{Z.value=u(m),Z.status="success"}catch(p){Z.status="error",Z.value=p}return Z}(C.exports=d).prototype.finally=function(u){if(typeof u!="function")return this;var m=this.constructor;return this.then(function(Z){return m.resolve(u()).then(function(){return Z})},function(Z){return m.resolve(u()).then(function(){throw Z})})},d.prototype.catch=function(u){return this.then(null,u)},d.prototype.then=function(u,m){if(typeof u!="function"&&this.state===n||typeof m!="function"&&this.state===l)return this;var Z=new this.constructor(A);return this.state!==a?c(Z,this.state===n?u:m,this.outcome):this.queue.push(new o(Z,u,m)),Z},o.prototype.callFulfilled=function(u){s.resolve(this.promise,u)},o.prototype.otherCallFulfilled=function(u){c(this.promise,this.onFulfilled,u)},o.prototype.callRejected=function(u){s.reject(this.promise,u)},o.prototype.otherCallRejected=function(u){c(this.promise,this.onRejected,u)},s.resolve=function(u,m){var Z=b(r,m);if(Z.status==="error")return s.reject(u,Z.value);var p=Z.value;if(p)h(u,p);else{u.state=n,u.outcome=m;for(var Y=-1,R=u.queue.length;++Y<R;)u.queue[Y].callFulfilled(m)}return u},s.reject=function(u,m){u.state=l,u.outcome=m;for(var Z=-1,p=u.queue.length;++Z<p;)u.queue[Z].callRejected(m);return u},d.resolve=function(u){return u instanceof this?u:s.resolve(new this(A),u)},d.reject=function(u){var m=new this(A);return s.reject(m,u)},d.all=function(u){var m=this;if(Object.prototype.toString.call(u)!=="[object Array]")return this.reject(new TypeError("must be an array"));var Z=u.length,p=!1;if(!Z)return this.resolve([]);for(var Y=new Array(Z),R=0,X=-1,H=new this(A);++X<Z;)S(u[X],X);return H;function S(z,v){m.resolve(z).then(function(K){Y[v]=K,++R!==Z||p||(p=!0,s.resolve(H,Y))},function(K){p||(p=!0,s.reject(H,K))})}},d.race=function(u){var m=this;if(Object.prototype.toString.call(u)!=="[object Array]")return this.reject(new TypeError("must be an array"));var Z=u.length,p=!1;if(!Z)return this.resolve([]);for(var Y=-1,R=new this(A);++Y<Z;)X=u[Y],m.resolve(X).then(function(H){p||(p=!0,s.resolve(R,H))},function(H){p||(p=!0,s.reject(R,H))});var X;return R}},{immediate:36}],38:[function(g,C,i){var e={};(0,g("./lib/utils/common").assign)(e,g("./lib/deflate"),g("./lib/inflate"),g("./lib/zlib/constants")),C.exports=e},{"./lib/deflate":39,"./lib/inflate":40,"./lib/utils/common":41,"./lib/zlib/constants":44}],39:[function(g,C,i){var e=g("./zlib/deflate"),A=g("./utils/common"),s=g("./utils/strings"),l=g("./zlib/messages"),n=g("./zlib/zstream"),a=Object.prototype.toString,d=0,o=-1,c=0,r=8;function h(u){if(!(this instanceof h))return new h(u);this.options=A.assign({level:o,method:r,chunkSize:16384,windowBits:15,memLevel:8,strategy:c,to:""},u||{});var m=this.options;m.raw&&0<m.windowBits?m.windowBits=-m.windowBits:m.gzip&&0<m.windowBits&&m.windowBits<16&&(m.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new n,this.strm.avail_out=0;var Z=e.deflateInit2(this.strm,m.level,m.method,m.windowBits,m.memLevel,m.strategy);if(Z!==d)throw new Error(l[Z]);if(m.header&&e.deflateSetHeader(this.strm,m.header),m.dictionary){var p;if(p=typeof m.dictionary=="string"?s.string2buf(m.dictionary):a.call(m.dictionary)==="[object ArrayBuffer]"?new Uint8Array(m.dictionary):m.dictionary,(Z=e.deflateSetDictionary(this.strm,p))!==d)throw new Error(l[Z]);this._dict_set=!0}}function b(u,m){var Z=new h(m);if(Z.push(u,!0),Z.err)throw Z.msg||l[Z.err];return Z.result}h.prototype.push=function(u,m){var Z,p,Y=this.strm,R=this.options.chunkSize;if(this.ended)return!1;p=m===~~m?m:m===!0?4:0,typeof u=="string"?Y.input=s.string2buf(u):a.call(u)==="[object ArrayBuffer]"?Y.input=new Uint8Array(u):Y.input=u,Y.next_in=0,Y.avail_in=Y.input.length;do{if(Y.avail_out===0&&(Y.output=new A.Buf8(R),Y.next_out=0,Y.avail_out=R),(Z=e.deflate(Y,p))!==1&&Z!==d)return this.onEnd(Z),!(this.ended=!0);Y.avail_out!==0&&(Y.avail_in!==0||p!==4&&p!==2)||(this.options.to==="string"?this.onData(s.buf2binstring(A.shrinkBuf(Y.output,Y.next_out))):this.onData(A.shrinkBuf(Y.output,Y.next_out)))}while((0<Y.avail_in||Y.avail_out===0)&&Z!==1);return p===4?(Z=e.deflateEnd(this.strm),this.onEnd(Z),this.ended=!0,Z===d):p!==2||(this.onEnd(d),!(Y.avail_out=0))},h.prototype.onData=function(u){this.chunks.push(u)},h.prototype.onEnd=function(u){u===d&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=A.flattenChunks(this.chunks)),this.chunks=[],this.err=u,this.msg=this.strm.msg},i.Deflate=h,i.deflate=b,i.deflateRaw=function(u,m){return(m=m||{}).raw=!0,b(u,m)},i.gzip=function(u,m){return(m=m||{}).gzip=!0,b(u,m)}},{"./utils/common":41,"./utils/strings":42,"./zlib/deflate":46,"./zlib/messages":51,"./zlib/zstream":53}],40:[function(g,C,i){var e=g("./zlib/inflate"),A=g("./utils/common"),s=g("./utils/strings"),l=g("./zlib/constants"),n=g("./zlib/messages"),a=g("./zlib/zstream"),d=g("./zlib/gzheader"),o=Object.prototype.toString;function c(h){if(!(this instanceof c))return new c(h);this.options=A.assign({chunkSize:16384,windowBits:0,to:""},h||{});var b=this.options;b.raw&&0<=b.windowBits&&b.windowBits<16&&(b.windowBits=-b.windowBits,b.windowBits===0&&(b.windowBits=-15)),!(0<=b.windowBits&&b.windowBits<16)||h&&h.windowBits||(b.windowBits+=32),15<b.windowBits&&b.windowBits<48&&(15&b.windowBits)==0&&(b.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new a,this.strm.avail_out=0;var u=e.inflateInit2(this.strm,b.windowBits);if(u!==l.Z_OK)throw new Error(n[u]);this.header=new d,e.inflateGetHeader(this.strm,this.header)}function r(h,b){var u=new c(b);if(u.push(h,!0),u.err)throw u.msg||n[u.err];return u.result}c.prototype.push=function(h,b){var u,m,Z,p,Y,R,X=this.strm,H=this.options.chunkSize,S=this.options.dictionary,z=!1;if(this.ended)return!1;m=b===~~b?b:b===!0?l.Z_FINISH:l.Z_NO_FLUSH,typeof h=="string"?X.input=s.binstring2buf(h):o.call(h)==="[object ArrayBuffer]"?X.input=new Uint8Array(h):X.input=h,X.next_in=0,X.avail_in=X.input.length;do{if(X.avail_out===0&&(X.output=new A.Buf8(H),X.next_out=0,X.avail_out=H),(u=e.inflate(X,l.Z_NO_FLUSH))===l.Z_NEED_DICT&&S&&(R=typeof S=="string"?s.string2buf(S):o.call(S)==="[object ArrayBuffer]"?new Uint8Array(S):S,u=e.inflateSetDictionary(this.strm,R)),u===l.Z_BUF_ERROR&&z===!0&&(u=l.Z_OK,z=!1),u!==l.Z_STREAM_END&&u!==l.Z_OK)return this.onEnd(u),!(this.ended=!0);X.next_out&&(X.avail_out!==0&&u!==l.Z_STREAM_END&&(X.avail_in!==0||m!==l.Z_FINISH&&m!==l.Z_SYNC_FLUSH)||(this.options.to==="string"?(Z=s.utf8border(X.output,X.next_out),p=X.next_out-Z,Y=s.buf2string(X.output,Z),X.next_out=p,X.avail_out=H-p,p&&A.arraySet(X.output,X.output,Z,p,0),this.onData(Y)):this.onData(A.shrinkBuf(X.output,X.next_out)))),X.avail_in===0&&X.avail_out===0&&(z=!0)}while((0<X.avail_in||X.avail_out===0)&&u!==l.Z_STREAM_END);return u===l.Z_STREAM_END&&(m=l.Z_FINISH),m===l.Z_FINISH?(u=e.inflateEnd(this.strm),this.onEnd(u),this.ended=!0,u===l.Z_OK):m!==l.Z_SYNC_FLUSH||(this.onEnd(l.Z_OK),!(X.avail_out=0))},c.prototype.onData=function(h){this.chunks.push(h)},c.prototype.onEnd=function(h){h===l.Z_OK&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=A.flattenChunks(this.chunks)),this.chunks=[],this.err=h,this.msg=this.strm.msg},i.Inflate=c,i.inflate=r,i.inflateRaw=function(h,b){return(b=b||{}).raw=!0,r(h,b)},i.ungzip=r},{"./utils/common":41,"./utils/strings":42,"./zlib/constants":44,"./zlib/gzheader":47,"./zlib/inflate":49,"./zlib/messages":51,"./zlib/zstream":53}],41:[function(g,C,i){var e=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Int32Array<"u";i.assign=function(l){for(var n=Array.prototype.slice.call(arguments,1);n.length;){var a=n.shift();if(a){if(typeof a!="object")throw new TypeError(a+"must be non-object");for(var d in a)a.hasOwnProperty(d)&&(l[d]=a[d])}}return l},i.shrinkBuf=function(l,n){return l.length===n?l:l.subarray?l.subarray(0,n):(l.length=n,l)};var A={arraySet:function(l,n,a,d,o){if(n.subarray&&l.subarray)l.set(n.subarray(a,a+d),o);else for(var c=0;c<d;c++)l[o+c]=n[a+c]},flattenChunks:function(l){var n,a,d,o,c,r;for(n=d=0,a=l.length;n<a;n++)d+=l[n].length;for(r=new Uint8Array(d),n=o=0,a=l.length;n<a;n++)c=l[n],r.set(c,o),o+=c.length;return r}},s={arraySet:function(l,n,a,d,o){for(var c=0;c<d;c++)l[o+c]=n[a+c]},flattenChunks:function(l){return[].concat.apply([],l)}};i.setTyped=function(l){l?(i.Buf8=Uint8Array,i.Buf16=Uint16Array,i.Buf32=Int32Array,i.assign(i,A)):(i.Buf8=Array,i.Buf16=Array,i.Buf32=Array,i.assign(i,s))},i.setTyped(e)},{}],42:[function(g,C,i){var e=g("./common"),A=!0,s=!0;try{String.fromCharCode.apply(null,[0])}catch{A=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch{s=!1}for(var l=new e.Buf8(256),n=0;n<256;n++)l[n]=252<=n?6:248<=n?5:240<=n?4:224<=n?3:192<=n?2:1;function a(d,o){if(o<65537&&(d.subarray&&s||!d.subarray&&A))return String.fromCharCode.apply(null,e.shrinkBuf(d,o));for(var c="",r=0;r<o;r++)c+=String.fromCharCode(d[r]);return c}l[254]=l[254]=1,i.string2buf=function(d){var o,c,r,h,b,u=d.length,m=0;for(h=0;h<u;h++)(64512&(c=d.charCodeAt(h)))==55296&&h+1<u&&(64512&(r=d.charCodeAt(h+1)))==56320&&(c=65536+(c-55296<<10)+(r-56320),h++),m+=c<128?1:c<2048?2:c<65536?3:4;for(o=new e.Buf8(m),h=b=0;b<m;h++)(64512&(c=d.charCodeAt(h)))==55296&&h+1<u&&(64512&(r=d.charCodeAt(h+1)))==56320&&(c=65536+(c-55296<<10)+(r-56320),h++),c<128?o[b++]=c:(c<2048?o[b++]=192|c>>>6:(c<65536?o[b++]=224|c>>>12:(o[b++]=240|c>>>18,o[b++]=128|c>>>12&63),o[b++]=128|c>>>6&63),o[b++]=128|63&c);return o},i.buf2binstring=function(d){return a(d,d.length)},i.binstring2buf=function(d){for(var o=new e.Buf8(d.length),c=0,r=o.length;c<r;c++)o[c]=d.charCodeAt(c);return o},i.buf2string=function(d,o){var c,r,h,b,u=o||d.length,m=new Array(2*u);for(c=r=0;c<u;)if((h=d[c++])<128)m[r++]=h;else if(4<(b=l[h]))m[r++]=65533,c+=b-1;else{for(h&=b===2?31:b===3?15:7;1<b&&c<u;)h=h<<6|63&d[c++],b--;1<b?m[r++]=65533:h<65536?m[r++]=h:(h-=65536,m[r++]=55296|h>>10&1023,m[r++]=56320|1023&h)}return a(m,r)},i.utf8border=function(d,o){var c;for((o=o||d.length)>d.length&&(o=d.length),c=o-1;0<=c&&(192&d[c])==128;)c--;return c<0||c===0?o:c+l[d[c]]>o?c:o}},{"./common":41}],43:[function(g,C,i){C.exports=function(e,A,s,l){for(var n=65535&e|0,a=e>>>16&65535|0,d=0;s!==0;){for(s-=d=2e3<s?2e3:s;a=a+(n=n+A[l++]|0)|0,--d;);n%=65521,a%=65521}return n|a<<16|0}},{}],44:[function(g,C,i){C.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(g,C,i){var e=function(){for(var A,s=[],l=0;l<256;l++){A=l;for(var n=0;n<8;n++)A=1&A?3988292384^A>>>1:A>>>1;s[l]=A}return s}();C.exports=function(A,s,l,n){var a=e,d=n+l;A^=-1;for(var o=n;o<d;o++)A=A>>>8^a[255&(A^s[o])];return-1^A}},{}],46:[function(g,C,i){var e,A=g("../utils/common"),s=g("./trees"),l=g("./adler32"),n=g("./crc32"),a=g("./messages"),d=0,o=4,c=0,r=-2,h=-1,b=4,u=2,m=8,Z=9,p=286,Y=30,R=19,X=2*p+1,H=15,S=3,z=258,v=z+S+1,K=42,V=113,N=1,B=2,G=3,w=4;function W(x,sg){return x.msg=a[sg],sg}function y(x){return(x<<1)-(4<x?9:0)}function f(x){for(var sg=x.length;0<=--sg;)x[sg]=0}function D(x){var sg=x.state,Ag=sg.pending;Ag>x.avail_out&&(Ag=x.avail_out),Ag!==0&&(A.arraySet(x.output,sg.pending_buf,sg.pending_out,Ag,x.next_out),x.next_out+=Ag,sg.pending_out+=Ag,x.total_out+=Ag,x.avail_out-=Ag,sg.pending-=Ag,sg.pending===0&&(sg.pending_out=0))}function F(x,sg){s._tr_flush_block(x,0<=x.block_start?x.block_start:-1,x.strstart-x.block_start,sg),x.block_start=x.strstart,D(x.strm)}function T(x,sg){x.pending_buf[x.pending++]=sg}function Q(x,sg){x.pending_buf[x.pending++]=sg>>>8&255,x.pending_buf[x.pending++]=255&sg}function P(x,sg){var Ag,O,_=x.max_chain_length,Ig=x.strstart,ng=x.prev_length,ag=x.nice_match,lg=x.strstart>x.w_size-v?x.strstart-(x.w_size-v):0,cg=x.window,dg=x.w_mask,hg=x.prev,rg=x.strstart+z,Wg=cg[Ig+ng-1],Gg=cg[Ig+ng];x.prev_length>=x.good_match&&(_>>=2),ag>x.lookahead&&(ag=x.lookahead);do if(cg[(Ag=sg)+ng]===Gg&&cg[Ag+ng-1]===Wg&&cg[Ag]===cg[Ig]&&cg[++Ag]===cg[Ig+1]){Ig+=2,Ag++;do;while(cg[++Ig]===cg[++Ag]&&cg[++Ig]===cg[++Ag]&&cg[++Ig]===cg[++Ag]&&cg[++Ig]===cg[++Ag]&&cg[++Ig]===cg[++Ag]&&cg[++Ig]===cg[++Ag]&&cg[++Ig]===cg[++Ag]&&cg[++Ig]===cg[++Ag]&&Ig<rg);if(O=z-(rg-Ig),Ig=rg-z,ng<O){if(x.match_start=sg,ag<=(ng=O))break;Wg=cg[Ig+ng-1],Gg=cg[Ig+ng]}}while((sg=hg[sg&dg])>lg&&--_!=0);return ng<=x.lookahead?ng:x.lookahead}function L(x){var sg,Ag,O,_,Ig,ng,ag,lg,cg,dg,hg=x.w_size;do{if(_=x.window_size-x.lookahead-x.strstart,x.strstart>=hg+(hg-v)){for(A.arraySet(x.window,x.window,hg,hg,0),x.match_start-=hg,x.strstart-=hg,x.block_start-=hg,sg=Ag=x.hash_size;O=x.head[--sg],x.head[sg]=hg<=O?O-hg:0,--Ag;);for(sg=Ag=hg;O=x.prev[--sg],x.prev[sg]=hg<=O?O-hg:0,--Ag;);_+=hg}if(x.strm.avail_in===0)break;if(ng=x.strm,ag=x.window,lg=x.strstart+x.lookahead,cg=_,dg=void 0,dg=ng.avail_in,cg<dg&&(dg=cg),Ag=dg===0?0:(ng.avail_in-=dg,A.arraySet(ag,ng.input,ng.next_in,dg,lg),ng.state.wrap===1?ng.adler=l(ng.adler,ag,dg,lg):ng.state.wrap===2&&(ng.adler=n(ng.adler,ag,dg,lg)),ng.next_in+=dg,ng.total_in+=dg,dg),x.lookahead+=Ag,x.lookahead+x.insert>=S)for(Ig=x.strstart-x.insert,x.ins_h=x.window[Ig],x.ins_h=(x.ins_h<<x.hash_shift^x.window[Ig+1])&x.hash_mask;x.insert&&(x.ins_h=(x.ins_h<<x.hash_shift^x.window[Ig+S-1])&x.hash_mask,x.prev[Ig&x.w_mask]=x.head[x.ins_h],x.head[x.ins_h]=Ig,Ig++,x.insert--,!(x.lookahead+x.insert<S)););}while(x.lookahead<v&&x.strm.avail_in!==0)}function E(x,sg){for(var Ag,O;;){if(x.lookahead<v){if(L(x),x.lookahead<v&&sg===d)return N;if(x.lookahead===0)break}if(Ag=0,x.lookahead>=S&&(x.ins_h=(x.ins_h<<x.hash_shift^x.window[x.strstart+S-1])&x.hash_mask,Ag=x.prev[x.strstart&x.w_mask]=x.head[x.ins_h],x.head[x.ins_h]=x.strstart),Ag!==0&&x.strstart-Ag<=x.w_size-v&&(x.match_length=P(x,Ag)),x.match_length>=S)if(O=s._tr_tally(x,x.strstart-x.match_start,x.match_length-S),x.lookahead-=x.match_length,x.match_length<=x.max_lazy_match&&x.lookahead>=S){for(x.match_length--;x.strstart++,x.ins_h=(x.ins_h<<x.hash_shift^x.window[x.strstart+S-1])&x.hash_mask,Ag=x.prev[x.strstart&x.w_mask]=x.head[x.ins_h],x.head[x.ins_h]=x.strstart,--x.match_length!=0;);x.strstart++}else x.strstart+=x.match_length,x.match_length=0,x.ins_h=x.window[x.strstart],x.ins_h=(x.ins_h<<x.hash_shift^x.window[x.strstart+1])&x.hash_mask;else O=s._tr_tally(x,0,x.window[x.strstart]),x.lookahead--,x.strstart++;if(O&&(F(x,!1),x.strm.avail_out===0))return N}return x.insert=x.strstart<S-1?x.strstart:S-1,sg===o?(F(x,!0),x.strm.avail_out===0?G:w):x.last_lit&&(F(x,!1),x.strm.avail_out===0)?N:B}function J(x,sg){for(var Ag,O,_;;){if(x.lookahead<v){if(L(x),x.lookahead<v&&sg===d)return N;if(x.lookahead===0)break}if(Ag=0,x.lookahead>=S&&(x.ins_h=(x.ins_h<<x.hash_shift^x.window[x.strstart+S-1])&x.hash_mask,Ag=x.prev[x.strstart&x.w_mask]=x.head[x.ins_h],x.head[x.ins_h]=x.strstart),x.prev_length=x.match_length,x.prev_match=x.match_start,x.match_length=S-1,Ag!==0&&x.prev_length<x.max_lazy_match&&x.strstart-Ag<=x.w_size-v&&(x.match_length=P(x,Ag),x.match_length<=5&&(x.strategy===1||x.match_length===S&&4096<x.strstart-x.match_start)&&(x.match_length=S-1)),x.prev_length>=S&&x.match_length<=x.prev_length){for(_=x.strstart+x.lookahead-S,O=s._tr_tally(x,x.strstart-1-x.prev_match,x.prev_length-S),x.lookahead-=x.prev_length-1,x.prev_length-=2;++x.strstart<=_&&(x.ins_h=(x.ins_h<<x.hash_shift^x.window[x.strstart+S-1])&x.hash_mask,Ag=x.prev[x.strstart&x.w_mask]=x.head[x.ins_h],x.head[x.ins_h]=x.strstart),--x.prev_length!=0;);if(x.match_available=0,x.match_length=S-1,x.strstart++,O&&(F(x,!1),x.strm.avail_out===0))return N}else if(x.match_available){if((O=s._tr_tally(x,0,x.window[x.strstart-1]))&&F(x,!1),x.strstart++,x.lookahead--,x.strm.avail_out===0)return N}else x.match_available=1,x.strstart++,x.lookahead--}return x.match_available&&(O=s._tr_tally(x,0,x.window[x.strstart-1]),x.match_available=0),x.insert=x.strstart<S-1?x.strstart:S-1,sg===o?(F(x,!0),x.strm.avail_out===0?G:w):x.last_lit&&(F(x,!1),x.strm.avail_out===0)?N:B}function k(x,sg,Ag,O,_){this.good_length=x,this.max_lazy=sg,this.nice_length=Ag,this.max_chain=O,this.func=_}function j(){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=m,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 A.Buf16(2*X),this.dyn_dtree=new A.Buf16(2*(2*Y+1)),this.bl_tree=new A.Buf16(2*(2*R+1)),f(this.dyn_ltree),f(this.dyn_dtree),f(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new A.Buf16(H+1),this.heap=new A.Buf16(2*p+1),f(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new A.Buf16(2*p+1),f(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 q(x){var sg;return x&&x.state?(x.total_in=x.total_out=0,x.data_type=u,(sg=x.state).pending=0,sg.pending_out=0,sg.wrap<0&&(sg.wrap=-sg.wrap),sg.status=sg.wrap?K:V,x.adler=sg.wrap===2?0:1,sg.last_flush=d,s._tr_init(sg),c):W(x,r)}function tg(x){var sg=q(x);return sg===c&&function(Ag){Ag.window_size=2*Ag.w_size,f(Ag.head),Ag.max_lazy_match=e[Ag.level].max_lazy,Ag.good_match=e[Ag.level].good_length,Ag.nice_match=e[Ag.level].nice_length,Ag.max_chain_length=e[Ag.level].max_chain,Ag.strstart=0,Ag.block_start=0,Ag.lookahead=0,Ag.insert=0,Ag.match_length=Ag.prev_length=S-1,Ag.match_available=0,Ag.ins_h=0}(x.state),sg}function Cg(x,sg,Ag,O,_,Ig){if(!x)return r;var ng=1;if(sg===h&&(sg=6),O<0?(ng=0,O=-O):15<O&&(ng=2,O-=16),_<1||Z<_||Ag!==m||O<8||15<O||sg<0||9<sg||Ig<0||b<Ig)return W(x,r);O===8&&(O=9);var ag=new j;return(x.state=ag).strm=x,ag.wrap=ng,ag.gzhead=null,ag.w_bits=O,ag.w_size=1<<ag.w_bits,ag.w_mask=ag.w_size-1,ag.hash_bits=_+7,ag.hash_size=1<<ag.hash_bits,ag.hash_mask=ag.hash_size-1,ag.hash_shift=~~((ag.hash_bits+S-1)/S),ag.window=new A.Buf8(2*ag.w_size),ag.head=new A.Buf16(ag.hash_size),ag.prev=new A.Buf16(ag.w_size),ag.lit_bufsize=1<<_+6,ag.pending_buf_size=4*ag.lit_bufsize,ag.pending_buf=new A.Buf8(ag.pending_buf_size),ag.d_buf=1*ag.lit_bufsize,ag.l_buf=3*ag.lit_bufsize,ag.level=sg,ag.strategy=Ig,ag.method=Ag,tg(x)}e=[new k(0,0,0,0,function(x,sg){var Ag=65535;for(Ag>x.pending_buf_size-5&&(Ag=x.pending_buf_size-5);;){if(x.lookahead<=1){if(L(x),x.lookahead===0&&sg===d)return N;if(x.lookahead===0)break}x.strstart+=x.lookahead,x.lookahead=0;var O=x.block_start+Ag;if((x.strstart===0||x.strstart>=O)&&(x.lookahead=x.strstart-O,x.strstart=O,F(x,!1),x.strm.avail_out===0)||x.strstart-x.block_start>=x.w_size-v&&(F(x,!1),x.strm.avail_out===0))return N}return x.insert=0,sg===o?(F(x,!0),x.strm.avail_out===0?G:w):(x.strstart>x.block_start&&(F(x,!1),x.strm.avail_out),N)}),new k(4,4,8,4,E),new k(4,5,16,8,E),new k(4,6,32,32,E),new k(4,4,16,16,J),new k(8,16,32,32,J),new k(8,16,128,128,J),new k(8,32,128,256,J),new k(32,128,258,1024,J),new k(32,258,258,4096,J)],i.deflateInit=function(x,sg){return Cg(x,sg,m,15,8,0)},i.deflateInit2=Cg,i.deflateReset=tg,i.deflateResetKeep=q,i.deflateSetHeader=function(x,sg){return x&&x.state?x.state.wrap!==2?r:(x.state.gzhead=sg,c):r},i.deflate=function(x,sg){var Ag,O,_,Ig;if(!x||!x.state||5<sg||sg<0)return x?W(x,r):r;if(O=x.state,!x.output||!x.input&&x.avail_in!==0||O.status===666&&sg!==o)return W(x,x.avail_out===0?-5:r);if(O.strm=x,Ag=O.last_flush,O.last_flush=sg,O.status===K)if(O.wrap===2)x.adler=0,T(O,31),T(O,139),T(O,8),O.gzhead?(T(O,(O.gzhead.text?1:0)+(O.gzhead.hcrc?2:0)+(O.gzhead.extra?4:0)+(O.gzhead.name?8:0)+(O.gzhead.comment?16:0)),T(O,255&O.gzhead.time),T(O,O.gzhead.time>>8&255),T(O,O.gzhead.time>>16&255),T(O,O.gzhead.time>>24&255),T(O,O.level===9?2:2<=O.strategy||O.level<2?4:0),T(O,255&O.gzhead.os),O.gzhead.extra&&O.gzhead.extra.length&&(T(O,255&O.gzhead.extra.length),T(O,O.gzhead.extra.length>>8&255)),O.gzhead.hcrc&&(x.adler=n(x.adler,O.pending_buf,O.pending,0)),O.gzindex=0,O.status=69):(T(O,0),T(O,0),T(O,0),T(O,0),T(O,0),T(O,O.level===9?2:2<=O.strategy||O.level<2?4:0),T(O,3),O.status=V);else{var ng=m+(O.w_bits-8<<4)<<8;ng|=(2<=O.strategy||O.level<2?0:O.level<6?1:O.level===6?2:3)<<6,O.strstart!==0&&(ng|=32),ng+=31-ng%31,O.status=V,Q(O,ng),O.strstart!==0&&(Q(O,x.adler>>>16),Q(O,65535&x.adler)),x.adler=1}if(O.status===69)if(O.gzhead.extra){for(_=O.pending;O.gzindex<(65535&O.gzhead.extra.length)&&(O.pending!==O.pending_buf_size||(O.gzhead.hcrc&&O.pending>_&&(x.adler=n(x.adler,O.pending_buf,O.pending-_,_)),D(x),_=O.pending,O.pending!==O.pending_buf_size));)T(O,255&O.gzhead.extra[O.gzindex]),O.gzindex++;O.gzhead.hcrc&&O.pending>_&&(x.adler=n(x.adler,O.pending_buf,O.pending-_,_)),O.gzindex===O.gzhead.extra.length&&(O.gzindex=0,O.status=73)}else O.status=73;if(O.status===73)if(O.gzhead.name){_=O.pending;do{if(O.pending===O.pending_buf_size&&(O.gzhead.hcrc&&O.pending>_&&(x.adler=n(x.adler,O.pending_buf,O.pending-_,_)),D(x),_=O.pending,O.pending===O.pending_buf_size)){Ig=1;break}Ig=O.gzindex<O.gzhead.name.length?255&O.gzhead.name.charCodeAt(O.gzindex++):0,T(O,Ig)}while(Ig!==0);O.gzhead.hcrc&&O.pending>_&&(x.adler=n(x.adler,O.pending_buf,O.pending-_,_)),Ig===0&&(O.gzindex=0,O.status=91)}else O.status=91;if(O.status===91)if(O.gzhead.comment){_=O.pending;do{if(O.pending===O.pending_buf_size&&(O.gzhead.hcrc&&O.pending>_&&(x.adler=n(x.adler,O.pending_buf,O.pending-_,_)),D(x),_=O.pending,O.pending===O.pending_buf_size)){Ig=1;break}Ig=O.gzindex<O.gzhead.comment.length?255&O.gzhead.comment.charCodeAt(O.gzindex++):0,T(O,Ig)}while(Ig!==0);O.gzhead.hcrc&&O.pending>_&&(x.adler=n(x.adler,O.pending_buf,O.pending-_,_)),Ig===0&&(O.status=103)}else O.status=103;if(O.status===103&&(O.gzhead.hcrc?(O.pending+2>O.pending_buf_size&&D(x),O.pending+2<=O.pending_buf_size&&(T(O,255&x.adler),T(O,x.adler>>8&255),x.adler=0,O.status=V)):O.status=V),O.pending!==0){if(D(x),x.avail_out===0)return O.last_flush=-1,c}else if(x.avail_in===0&&y(sg)<=y(Ag)&&sg!==o)return W(x,-5);if(O.status===666&&x.avail_in!==0)return W(x,-5);if(x.avail_in!==0||O.lookahead!==0||sg!==d&&O.status!==666){var ag=O.strategy===2?function(lg,cg){for(var dg;;){if(lg.lookahead===0&&(L(lg),lg.lookahead===0)){if(cg===d)return N;break}if(lg.match_length=0,dg=s._tr_tally(lg,0,lg.window[lg.strstart]),lg.lookahead--,lg.strstart++,dg&&(F(lg,!1),lg.strm.avail_out===0))return N}return lg.insert=0,cg===o?(F(lg,!0),lg.strm.avail_out===0?G:w):lg.last_lit&&(F(lg,!1),lg.strm.avail_out===0)?N:B}(O,sg):O.strategy===3?function(lg,cg){for(var dg,hg,rg,Wg,Gg=lg.window;;){if(lg.lookahead<=z){if(L(lg),lg.lookahead<=z&&cg===d)return N;if(lg.lookahead===0)break}if(lg.match_length=0,lg.lookahead>=S&&0<lg.strstart&&(hg=Gg[rg=lg.strstart-1])===Gg[++rg]&&hg===Gg[++rg]&&hg===Gg[++rg]){Wg=lg.strstart+z;do;while(hg===Gg[++rg]&&hg===Gg[++rg]&&hg===Gg[++rg]&&hg===Gg[++rg]&&hg===Gg[++rg]&&hg===Gg[++rg]&&hg===Gg[++rg]&&hg===Gg[++rg]&&rg<Wg);lg.match_length=z-(Wg-rg),lg.match_length>lg.lookahead&&(lg.match_length=lg.lookahead)}if(lg.match_length>=S?(dg=s._tr_tally(lg,1,lg.match_length-S),lg.lookahead-=lg.match_length,lg.strstart+=lg.match_length,lg.match_length=0):(dg=s._tr_tally(lg,0,lg.window[lg.strstart]),lg.lookahead--,lg.strstart++),dg&&(F(lg,!1),lg.strm.avail_out===0))return N}return lg.insert=0,cg===o?(F(lg,!0),lg.strm.avail_out===0?G:w):lg.last_lit&&(F(lg,!1),lg.strm.avail_out===0)?N:B}(O,sg):e[O.level].func(O,sg);if(ag!==G&&ag!==w||(O.status=666),ag===N||ag===G)return x.avail_out===0&&(O.last_flush=-1),c;if(ag===B&&(sg===1?s._tr_align(O):sg!==5&&(s._tr_stored_block(O,0,0,!1),sg===3&&(f(O.head),O.lookahead===0&&(O.strstart=0,O.block_start=0,O.insert=0))),D(x),x.avail_out===0))return O.last_flush=-1,c}return sg!==o?c:O.wrap<=0?1:(O.wrap===2?(T(O,255&x.adler),T(O,x.adler>>8&255),T(O,x.adler>>16&255),T(O,x.adler>>24&255),T(O,255&x.total_in),T(O,x.total_in>>8&255),T(O,x.total_in>>16&255),T(O,x.total_in>>24&255)):(Q(O,x.adler>>>16),Q(O,65535&x.adler)),D(x),0<O.wrap&&(O.wrap=-O.wrap),O.pending!==0?c:1)},i.deflateEnd=function(x){var sg;return x&&x.state?(sg=x.state.status)!==K&&sg!==69&&sg!==73&&sg!==91&&sg!==103&&sg!==V&&sg!==666?W(x,r):(x.state=null,sg===V?W(x,-3):c):r},i.deflateSetDictionary=function(x,sg){var Ag,O,_,Ig,ng,ag,lg,cg,dg=sg.length;if(!x||!x.state||(Ig=(Ag=x.state).wrap)===2||Ig===1&&Ag.status!==K||Ag.lookahead)return r;for(Ig===1&&(x.adler=l(x.adler,sg,dg,0)),Ag.wrap=0,dg>=Ag.w_size&&(Ig===0&&(f(Ag.head),Ag.strstart=0,Ag.block_start=0,Ag.insert=0),cg=new A.Buf8(Ag.w_size),A.arraySet(cg,sg,dg-Ag.w_size,Ag.w_size,0),sg=cg,dg=Ag.w_size),ng=x.avail_in,ag=x.next_in,lg=x.input,x.avail_in=dg,x.next_in=0,x.input=sg,L(Ag);Ag.lookahead>=S;){for(O=Ag.strstart,_=Ag.lookahead-(S-1);Ag.ins_h=(Ag.ins_h<<Ag.hash_shift^Ag.window[O+S-1])&Ag.hash_mask,Ag.prev[O&Ag.w_mask]=Ag.head[Ag.ins_h],Ag.head[Ag.ins_h]=O,O++,--_;);Ag.strstart=O,Ag.lookahead=S-1,L(Ag)}return Ag.strstart+=Ag.lookahead,Ag.block_start=Ag.strstart,Ag.insert=Ag.lookahead,Ag.lookahead=0,Ag.match_length=Ag.prev_length=S-1,Ag.match_available=0,x.next_in=ag,x.input=lg,x.avail_in=ng,Ag.wrap=Ig,c},i.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./messages":51,"./trees":52}],47:[function(g,C,i){C.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(g,C,i){C.exports=function(e,A){var s,l,n,a,d,o,c,r,h,b,u,m,Z,p,Y,R,X,H,S,z,v,K,V,N,B;s=e.state,l=e.next_in,N=e.input,n=l+(e.avail_in-5),a=e.next_out,B=e.output,d=a-(A-e.avail_out),o=a+(e.avail_out-257),c=s.dmax,r=s.wsize,h=s.whave,b=s.wnext,u=s.window,m=s.hold,Z=s.bits,p=s.lencode,Y=s.distcode,R=(1<<s.lenbits)-1,X=(1<<s.distbits)-1;g:do{Z<15&&(m+=N[l++]<<Z,Z+=8,m+=N[l++]<<Z,Z+=8),H=p[m&R];I:for(;;){if(m>>>=S=H>>>24,Z-=S,(S=H>>>16&255)===0)B[a++]=65535&H;else{if(!(16&S)){if((64&S)==0){H=p[(65535&H)+(m&(1<<S)-1)];continue I}if(32&S){s.mode=12;break g}e.msg="invalid literal/length code",s.mode=30;break g}z=65535&H,(S&=15)&&(Z<S&&(m+=N[l++]<<Z,Z+=8),z+=m&(1<<S)-1,m>>>=S,Z-=S),Z<15&&(m+=N[l++]<<Z,Z+=8,m+=N[l++]<<Z,Z+=8),H=Y[m&X];C:for(;;){if(m>>>=S=H>>>24,Z-=S,!(16&(S=H>>>16&255))){if((64&S)==0){H=Y[(65535&H)+(m&(1<<S)-1)];continue C}e.msg="invalid distance code",s.mode=30;break g}if(v=65535&H,Z<(S&=15)&&(m+=N[l++]<<Z,(Z+=8)<S&&(m+=N[l++]<<Z,Z+=8)),c<(v+=m&(1<<S)-1)){e.msg="invalid distance too far back",s.mode=30;break g}if(m>>>=S,Z-=S,(S=a-d)<v){if(h<(S=v-S)&&s.sane){e.msg="invalid distance too far back",s.mode=30;break g}if(V=u,(K=0)===b){if(K+=r-S,S<z){for(z-=S;B[a++]=u[K++],--S;);K=a-v,V=B}}else if(b<S){if(K+=r+b-S,(S-=b)<z){for(z-=S;B[a++]=u[K++],--S;);if(K=0,b<z){for(z-=S=b;B[a++]=u[K++],--S;);K=a-v,V=B}}}else if(K+=b-S,S<z){for(z-=S;B[a++]=u[K++],--S;);K=a-v,V=B}for(;2<z;)B[a++]=V[K++],B[a++]=V[K++],B[a++]=V[K++],z-=3;z&&(B[a++]=V[K++],1<z&&(B[a++]=V[K++]))}else{for(K=a-v;B[a++]=B[K++],B[a++]=B[K++],B[a++]=B[K++],2<(z-=3););z&&(B[a++]=B[K++],1<z&&(B[a++]=B[K++]))}break}}break}}while(l<n&&a<o);l-=z=Z>>3,m&=(1<<(Z-=z<<3))-1,e.next_in=l,e.next_out=a,e.avail_in=l<n?n-l+5:5-(l-n),e.avail_out=a<o?o-a+257:257-(a-o),s.hold=m,s.bits=Z}},{}],49:[function(g,C,i){var e=g("../utils/common"),A=g("./adler32"),s=g("./crc32"),l=g("./inffast"),n=g("./inftrees"),a=1,d=2,o=0,c=-2,r=1,h=852,b=592;function u(K){return(K>>>24&255)+(K>>>8&65280)+((65280&K)<<8)+((255&K)<<24)}function m(){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 e.Buf16(320),this.work=new e.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function Z(K){var V;return K&&K.state?(V=K.state,K.total_in=K.total_out=V.total=0,K.msg="",V.wrap&&(K.adler=1&V.wrap),V.mode=r,V.last=0,V.havedict=0,V.dmax=32768,V.head=null,V.hold=0,V.bits=0,V.lencode=V.lendyn=new e.Buf32(h),V.distcode=V.distdyn=new e.Buf32(b),V.sane=1,V.back=-1,o):c}function p(K){var V;return K&&K.state?((V=K.state).wsize=0,V.whave=0,V.wnext=0,Z(K)):c}function Y(K,V){var N,B;return K&&K.state?(B=K.state,V<0?(N=0,V=-V):(N=1+(V>>4),V<48&&(V&=15)),V&&(V<8||15<V)?c:(B.window!==null&&B.wbits!==V&&(B.window=null),B.wrap=N,B.wbits=V,p(K))):c}function R(K,V){var N,B;return K?(B=new m,(K.state=B).window=null,(N=Y(K,V))!==o&&(K.state=null),N):c}var X,H,S=!0;function z(K){if(S){var V;for(X=new e.Buf32(512),H=new e.Buf32(32),V=0;V<144;)K.lens[V++]=8;for(;V<256;)K.lens[V++]=9;for(;V<280;)K.lens[V++]=7;for(;V<288;)K.lens[V++]=8;for(n(a,K.lens,0,288,X,0,K.work,{bits:9}),V=0;V<32;)K.lens[V++]=5;n(d,K.lens,0,32,H,0,K.work,{bits:5}),S=!1}K.lencode=X,K.lenbits=9,K.distcode=H,K.distbits=5}function v(K,V,N,B){var G,w=K.state;return w.window===null&&(w.wsize=1<<w.wbits,w.wnext=0,w.whave=0,w.window=new e.Buf8(w.wsize)),B>=w.wsize?(e.arraySet(w.window,V,N-w.wsize,w.wsize,0),w.wnext=0,w.whave=w.wsize):(B<(G=w.wsize-w.wnext)&&(G=B),e.arraySet(w.window,V,N-B,G,w.wnext),(B-=G)?(e.arraySet(w.window,V,N-B,B,0),w.wnext=B,w.whave=w.wsize):(w.wnext+=G,w.wnext===w.wsize&&(w.wnext=0),w.whave<w.wsize&&(w.whave+=G))),0}i.inflateReset=p,i.inflateReset2=Y,i.inflateResetKeep=Z,i.inflateInit=function(K){return R(K,15)},i.inflateInit2=R,i.inflate=function(K,V){var N,B,G,w,W,y,f,D,F,T,Q,P,L,E,J,k,j,q,tg,Cg,x,sg,Ag,O,_=0,Ig=new e.Buf8(4),ng=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!K||!K.state||!K.output||!K.input&&K.avail_in!==0)return c;(N=K.state).mode===12&&(N.mode=13),W=K.next_out,G=K.output,f=K.avail_out,w=K.next_in,B=K.input,y=K.avail_in,D=N.hold,F=N.bits,T=y,Q=f,sg=o;g:for(;;)switch(N.mode){case r:if(N.wrap===0){N.mode=13;break}for(;F<16;){if(y===0)break g;y--,D+=B[w++]<<F,F+=8}if(2&N.wrap&&D===35615){Ig[N.check=0]=255&D,Ig[1]=D>>>8&255,N.check=s(N.check,Ig,2,0),F=D=0,N.mode=2;break}if(N.flags=0,N.head&&(N.head.done=!1),!(1&N.wrap)||(((255&D)<<8)+(D>>8))%31){K.msg="incorrect header check",N.mode=30;break}if((15&D)!=8){K.msg="unknown compression method",N.mode=30;break}if(F-=4,x=8+(15&(D>>>=4)),N.wbits===0)N.wbits=x;else if(x>N.wbits){K.msg="invalid window size",N.mode=30;break}N.dmax=1<<x,K.adler=N.check=1,N.mode=512&D?10:12,F=D=0;break;case 2:for(;F<16;){if(y===0)break g;y--,D+=B[w++]<<F,F+=8}if(N.flags=D,(255&N.flags)!=8){K.msg="unknown compression method",N.mode=30;break}if(57344&N.flags){K.msg="unknown header flags set",N.mode=30;break}N.head&&(N.head.text=D>>8&1),512&N.flags&&(Ig[0]=255&D,Ig[1]=D>>>8&255,N.check=s(N.check,Ig,2,0)),F=D=0,N.mode=3;case 3:for(;F<32;){if(y===0)break g;y--,D+=B[w++]<<F,F+=8}N.head&&(N.head.time=D),512&N.flags&&(Ig[0]=255&D,Ig[1]=D>>>8&255,Ig[2]=D>>>16&255,Ig[3]=D>>>24&255,N.check=s(N.check,Ig,4,0)),F=D=0,N.mode=4;case 4:for(;F<16;){if(y===0)break g;y--,D+=B[w++]<<F,F+=8}N.head&&(N.head.xflags=255&D,N.head.os=D>>8),512&N.flags&&(Ig[0]=255&D,Ig[1]=D>>>8&255,N.check=s(N.check,Ig,2,0)),F=D=0,N.mode=5;case 5:if(1024&N.flags){for(;F<16;){if(y===0)break g;y--,D+=B[w++]<<F,F+=8}N.length=D,N.head&&(N.head.extra_len=D),512&N.flags&&(Ig[0]=255&D,Ig[1]=D>>>8&255,N.check=s(N.check,Ig,2,0)),F=D=0}else N.head&&(N.head.extra=null);N.mode=6;case 6:if(1024&N.flags&&(y<(P=N.length)&&(P=y),P&&(N.head&&(x=N.head.extra_len-N.length,N.head.extra||(N.head.extra=new Array(N.head.extra_len)),e.arraySet(N.head.extra,B,w,P,x)),512&N.flags&&(N.check=s(N.check,B,P,w)),y-=P,w+=P,N.length-=P),N.length))break g;N.length=0,N.mode=7;case 7:if(2048&N.flags){if(y===0)break g;for(P=0;x=B[w+P++],N.head&&x&&N.length<65536&&(N.head.name+=String.fromCharCode(x)),x&&P<y;);if(512&N.flags&&(N.check=s(N.check,B,P,w)),y-=P,w+=P,x)break g}else N.head&&(N.head.name=null);N.length=0,N.mode=8;case 8:if(4096&N.flags){if(y===0)break g;for(P=0;x=B[w+P++],N.head&&x&&N.length<65536&&(N.head.comment+=String.fromCharCode(x)),x&&P<y;);if(512&N.flags&&(N.check=s(N.check,B,P,w)),y-=P,w+=P,x)break g}else N.head&&(N.head.comment=null);N.mode=9;case 9:if(512&N.flags){for(;F<16;){if(y===0)break g;y--,D+=B[w++]<<F,F+=8}if(D!==(65535&N.check)){K.msg="header crc mismatch",N.mode=30;break}F=D=0}N.head&&(N.head.hcrc=N.flags>>9&1,N.head.done=!0),K.adler=N.check=0,N.mode=12;break;case 10:for(;F<32;){if(y===0)break g;y--,D+=B[w++]<<F,F+=8}K.adler=N.check=u(D),F=D=0,N.mode=11;case 11:if(N.havedict===0)return K.next_out=W,K.avail_out=f,K.next_in=w,K.avail_in=y,N.hold=D,N.bits=F,2;K.adler=N.check=1,N.mode=12;case 12:if(V===5||V===6)break g;case 13:if(N.last){D>>>=7&F,F-=7&F,N.mode=27;break}for(;F<3;){if(y===0)break g;y--,D+=B[w++]<<F,F+=8}switch(N.last=1&D,F-=1,3&(D>>>=1)){case 0:N.mode=14;break;case 1:if(z(N),N.mode=20,V!==6)break;D>>>=2,F-=2;break g;case 2:N.mode=17;break;case 3:K.msg="invalid block type",N.mode=30}D>>>=2,F-=2;break;case 14:for(D>>>=7&F,F-=7&F;F<32;){if(y===0)break g;y--,D+=B[w++]<<F,F+=8}if((65535&D)!=(D>>>16^65535)){K.msg="invalid stored block lengths",N.mode=30;break}if(N.length=65535&D,F=D=0,N.mode=15,V===6)break g;case 15:N.mode=16;case 16:if(P=N.length){if(y<P&&(P=y),f<P&&(P=f),P===0)break g;e.arraySet(G,B,w,P,W),y-=P,w+=P,f-=P,W+=P,N.length-=P;break}N.mode=12;break;case 17:for(;F<14;){if(y===0)break g;y--,D+=B[w++]<<F,F+=8}if(N.nlen=257+(31&D),D>>>=5,F-=5,N.ndist=1+(31&D),D>>>=5,F-=5,N.ncode=4+(15&D),D>>>=4,F-=4,286<N.nlen||30<N.ndist){K.msg="too many length or distance symbols",N.mode=30;break}N.have=0,N.mode=18;case 18:for(;N.have<N.ncode;){for(;F<3;){if(y===0)break g;y--,D+=B[w++]<<F,F+=8}N.lens[ng[N.have++]]=7&D,D>>>=3,F-=3}for(;N.have<19;)N.lens[ng[N.have++]]=0;if(N.lencode=N.lendyn,N.lenbits=7,Ag={bits:N.lenbits},sg=n(0,N.lens,0,19,N.lencode,0,N.work,Ag),N.lenbits=Ag.bits,sg){K.msg="invalid code lengths set",N.mode=30;break}N.have=0,N.mode=19;case 19:for(;N.have<N.nlen+N.ndist;){for(;k=(_=N.lencode[D&(1<<N.lenbits)-1])>>>16&255,j=65535&_,!((J=_>>>24)<=F);){if(y===0)break g;y--,D+=B[w++]<<F,F+=8}if(j<16)D>>>=J,F-=J,N.lens[N.have++]=j;else{if(j===16){for(O=J+2;F<O;){if(y===0)break g;y--,D+=B[w++]<<F,F+=8}if(D>>>=J,F-=J,N.have===0){K.msg="invalid bit length repeat",N.mode=30;break}x=N.lens[N.have-1],P=3+(3&D),D>>>=2,F-=2}else if(j===17){for(O=J+3;F<O;){if(y===0)break g;y--,D+=B[w++]<<F,F+=8}F-=J,x=0,P=3+(7&(D>>>=J)),D>>>=3,F-=3}else{for(O=J+7;F<O;){if(y===0)break g;y--,D+=B[w++]<<F,F+=8}F-=J,x=0,P=11+(127&(D>>>=J)),D>>>=7,F-=7}if(N.have+P>N.nlen+N.ndist){K.msg="invalid bit length repeat",N.mode=30;break}for(;P--;)N.lens[N.have++]=x}}if(N.mode===30)break;if(N.lens[256]===0){K.msg="invalid code -- missing end-of-block",N.mode=30;break}if(N.lenbits=9,Ag={bits:N.lenbits},sg=n(a,N.lens,0,N.nlen,N.lencode,0,N.work,Ag),N.lenbits=Ag.bits,sg){K.msg="invalid literal/lengths set",N.mode=30;break}if(N.distbits=6,N.distcode=N.distdyn,Ag={bits:N.distbits},sg=n(d,N.lens,N.nlen,N.ndist,N.distcode,0,N.work,Ag),N.distbits=Ag.bits,sg){K.msg="invalid distances set",N.mode=30;break}if(N.mode=20,V===6)break g;case 20:N.mode=21;case 21:if(6<=y&&258<=f){K.next_out=W,K.avail_out=f,K.next_in=w,K.avail_in=y,N.hold=D,N.bits=F,l(K,Q),W=K.next_out,G=K.output,f=K.avail_out,w=K.next_in,B=K.input,y=K.avail_in,D=N.hold,F=N.bits,N.mode===12&&(N.back=-1);break}for(N.back=0;k=(_=N.lencode[D&(1<<N.lenbits)-1])>>>16&255,j=65535&_,!((J=_>>>24)<=F);){if(y===0)break g;y--,D+=B[w++]<<F,F+=8}if(k&&(240&k)==0){for(q=J,tg=k,Cg=j;k=(_=N.lencode[Cg+((D&(1<<q+tg)-1)>>q)])>>>16&255,j=65535&_,!(q+(J=_>>>24)<=F);){if(y===0)break g;y--,D+=B[w++]<<F,F+=8}D>>>=q,F-=q,N.back+=q}if(D>>>=J,F-=J,N.back+=J,N.length=j,k===0){N.mode=26;break}if(32&k){N.back=-1,N.mode=12;break}if(64&k){K.msg="invalid literal/length code",N.mode=30;break}N.extra=15&k,N.mode=22;case 22:if(N.extra){for(O=N.extra;F<O;){if(y===0)break g;y--,D+=B[w++]<<F,F+=8}N.length+=D&(1<<N.extra)-1,D>>>=N.extra,F-=N.extra,N.back+=N.extra}N.was=N.length,N.mode=23;case 23:for(;k=(_=N.distcode[D&(1<<N.distbits)-1])>>>16&255,j=65535&_,!((J=_>>>24)<=F);){if(y===0)break g;y--,D+=B[w++]<<F,F+=8}if((240&k)==0){for(q=J,tg=k,Cg=j;k=(_=N.distcode[Cg+((D&(1<<q+tg)-1)>>q)])>>>16&255,j=65535&_,!(q+(J=_>>>24)<=F);){if(y===0)break g;y--,D+=B[w++]<<F,F+=8}D>>>=q,F-=q,N.back+=q}if(D>>>=J,F-=J,N.back+=J,64&k){K.msg="invalid distance code",N.mode=30;break}N.offset=j,N.extra=15&k,N.mode=24;case 24:if(N.extra){for(O=N.extra;F<O;){if(y===0)break g;y--,D+=B[w++]<<F,F+=8}N.offset+=D&(1<<N.extra)-1,D>>>=N.extra,F-=N.extra,N.back+=N.extra}if(N.offset>N.dmax){K.msg="invalid distance too far back",N.mode=30;break}N.mode=25;case 25:if(f===0)break g;if(P=Q-f,N.offset>P){if((P=N.offset-P)>N.whave&&N.sane){K.msg="invalid distance too far back",N.mode=30;break}L=P>N.wnext?(P-=N.wnext,N.wsize-P):N.wnext-P,P>N.length&&(P=N.length),E=N.window}else E=G,L=W-N.offset,P=N.length;for(f<P&&(P=f),f-=P,N.length-=P;G[W++]=E[L++],--P;);N.length===0&&(N.mode=21);break;case 26:if(f===0)break g;G[W++]=N.length,f--,N.mode=21;break;case 27:if(N.wrap){for(;F<32;){if(y===0)break g;y--,D|=B[w++]<<F,F+=8}if(Q-=f,K.total_out+=Q,N.total+=Q,Q&&(K.adler=N.check=N.flags?s(N.check,G,Q,W-Q):A(N.check,G,Q,W-Q)),Q=f,(N.flags?D:u(D))!==N.check){K.msg="incorrect data check",N.mode=30;break}F=D=0}N.mode=28;case 28:if(N.wrap&&N.flags){for(;F<32;){if(y===0)break g;y--,D+=B[w++]<<F,F+=8}if(D!==(4294967295&N.total)){K.msg="incorrect length check",N.mode=30;break}F=D=0}N.mode=29;case 29:sg=1;break g;case 30:sg=-3;break g;case 31:return-4;case 32:default:return c}return K.next_out=W,K.avail_out=f,K.next_in=w,K.avail_in=y,N.hold=D,N.bits=F,(N.wsize||Q!==K.avail_out&&N.mode<30&&(N.mode<27||V!==4))&&v(K,K.output,K.next_out,Q-K.avail_out)?(N.mode=31,-4):(T-=K.avail_in,Q-=K.avail_out,K.total_in+=T,K.total_out+=Q,N.total+=Q,N.wrap&&Q&&(K.adler=N.check=N.flags?s(N.check,G,Q,K.next_out-Q):A(N.check,G,Q,K.next_out-Q)),K.data_type=N.bits+(N.last?64:0)+(N.mode===12?128:0)+(N.mode===20||N.mode===15?256:0),(T==0&&Q===0||V===4)&&sg===o&&(sg=-5),sg)},i.inflateEnd=function(K){if(!K||!K.state)return c;var V=K.state;return V.window&&(V.window=null),K.state=null,o},i.inflateGetHeader=function(K,V){var N;return K&&K.state?(2&(N=K.state).wrap)==0?c:((N.head=V).done=!1,o):c},i.inflateSetDictionary=function(K,V){var N,B=V.length;return K&&K.state?(N=K.state).wrap!==0&&N.mode!==11?c:N.mode===11&&A(1,V,B,0)!==N.check?-3:v(K,V,B,B)?(N.mode=31,-4):(N.havedict=1,o):c},i.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./inffast":48,"./inftrees":50}],50:[function(g,C,i){var e=g("../utils/common"),A=[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],s=[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],l=[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],n=[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];C.exports=function(a,d,o,c,r,h,b,u){var m,Z,p,Y,R,X,H,S,z,v=u.bits,K=0,V=0,N=0,B=0,G=0,w=0,W=0,y=0,f=0,D=0,F=null,T=0,Q=new e.Buf16(16),P=new e.Buf16(16),L=null,E=0;for(K=0;K<=15;K++)Q[K]=0;for(V=0;V<c;V++)Q[d[o+V]]++;for(G=v,B=15;1<=B&&Q[B]===0;B--);if(B<G&&(G=B),B===0)return r[h++]=20971520,r[h++]=20971520,u.bits=1,0;for(N=1;N<B&&Q[N]===0;N++);for(G<N&&(G=N),K=y=1;K<=15;K++)if(y<<=1,(y-=Q[K])<0)return-1;if(0<y&&(a===0||B!==1))return-1;for(P[1]=0,K=1;K<15;K++)P[K+1]=P[K]+Q[K];for(V=0;V<c;V++)d[o+V]!==0&&(b[P[d[o+V]]++]=V);if(X=a===0?(F=L=b,19):a===1?(F=A,T-=257,L=s,E-=257,256):(F=l,L=n,-1),K=N,R=h,W=V=D=0,p=-1,Y=(f=1<<(w=G))-1,a===1&&852<f||a===2&&592<f)return 1;for(;;){for(H=K-W,z=b[V]<X?(S=0,b[V]):b[V]>X?(S=L[E+b[V]],F[T+b[V]]):(S=96,0),m=1<<K-W,N=Z=1<<w;r[R+(D>>W)+(Z-=m)]=H<<24|S<<16|z|0,Z!==0;);for(m=1<<K-1;D&m;)m>>=1;if(m!==0?(D&=m-1,D+=m):D=0,V++,--Q[K]==0){if(K===B)break;K=d[o+b[V]]}if(G<K&&(D&Y)!==p){for(W===0&&(W=G),R+=N,y=1<<(w=K-W);w+W<B&&!((y-=Q[w+W])<=0);)w++,y<<=1;if(f+=1<<w,a===1&&852<f||a===2&&592<f)return 1;r[p=D&Y]=G<<24|w<<16|R-h|0}}return D!==0&&(r[R+D]=K-W<<24|64<<16|0),u.bits=G,0}},{"../utils/common":41}],51:[function(g,C,i){C.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(g,C,i){var e=g("../utils/common"),A=0,s=1;function l(_){for(var Ig=_.length;0<=--Ig;)_[Ig]=0}var n=0,a=29,d=256,o=d+1+a,c=30,r=19,h=2*o+1,b=15,u=16,m=7,Z=256,p=16,Y=17,R=18,X=[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],H=[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],S=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],z=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],v=new Array(2*(o+2));l(v);var K=new Array(2*c);l(K);var V=new Array(512);l(V);var N=new Array(256);l(N);var B=new Array(a);l(B);var G,w,W,y=new Array(c);function f(_,Ig,ng,ag,lg){this.static_tree=_,this.extra_bits=Ig,this.extra_base=ng,this.elems=ag,this.max_length=lg,this.has_stree=_&&_.length}function D(_,Ig){this.dyn_tree=_,this.max_code=0,this.stat_desc=Ig}function F(_){return _<256?V[_]:V[256+(_>>>7)]}function T(_,Ig){_.pending_buf[_.pending++]=255&Ig,_.pending_buf[_.pending++]=Ig>>>8&255}function Q(_,Ig,ng){_.bi_valid>u-ng?(_.bi_buf|=Ig<<_.bi_valid&65535,T(_,_.bi_buf),_.bi_buf=Ig>>u-_.bi_valid,_.bi_valid+=ng-u):(_.bi_buf|=Ig<<_.bi_valid&65535,_.bi_valid+=ng)}function P(_,Ig,ng){Q(_,ng[2*Ig],ng[2*Ig+1])}function L(_,Ig){for(var ng=0;ng|=1&_,_>>>=1,ng<<=1,0<--Ig;);return ng>>>1}function E(_,Ig,ng){var ag,lg,cg=new Array(b+1),dg=0;for(ag=1;ag<=b;ag++)cg[ag]=dg=dg+ng[ag-1]<<1;for(lg=0;lg<=Ig;lg++){var hg=_[2*lg+1];hg!==0&&(_[2*lg]=L(cg[hg]++,hg))}}function J(_){var Ig;for(Ig=0;Ig<o;Ig++)_.dyn_ltree[2*Ig]=0;for(Ig=0;Ig<c;Ig++)_.dyn_dtree[2*Ig]=0;for(Ig=0;Ig<r;Ig++)_.bl_tree[2*Ig]=0;_.dyn_ltree[2*Z]=1,_.opt_len=_.static_len=0,_.last_lit=_.matches=0}function k(_){8<_.bi_valid?T(_,_.bi_buf):0<_.bi_valid&&(_.pending_buf[_.pending++]=_.bi_buf),_.bi_buf=0,_.bi_valid=0}function j(_,Ig,ng,ag){var lg=2*Ig,cg=2*ng;return _[lg]<_[cg]||_[lg]===_[cg]&&ag[Ig]<=ag[ng]}function q(_,Ig,ng){for(var ag=_.heap[ng],lg=ng<<1;lg<=_.heap_len&&(lg<_.heap_len&&j(Ig,_.heap[lg+1],_.heap[lg],_.depth)&&lg++,!j(Ig,ag,_.heap[lg],_.depth));)_.heap[ng]=_.heap[lg],ng=lg,lg<<=1;_.heap[ng]=ag}function tg(_,Ig,ng){var ag,lg,cg,dg,hg=0;if(_.last_lit!==0)for(;ag=_.pending_buf[_.d_buf+2*hg]<<8|_.pending_buf[_.d_buf+2*hg+1],lg=_.pending_buf[_.l_buf+hg],hg++,ag===0?P(_,lg,Ig):(P(_,(cg=N[lg])+d+1,Ig),(dg=X[cg])!==0&&Q(_,lg-=B[cg],dg),P(_,cg=F(--ag),ng),(dg=H[cg])!==0&&Q(_,ag-=y[cg],dg)),hg<_.last_lit;);P(_,Z,Ig)}function Cg(_,Ig){var ng,ag,lg,cg=Ig.dyn_tree,dg=Ig.stat_desc.static_tree,hg=Ig.stat_desc.has_stree,rg=Ig.stat_desc.elems,Wg=-1;for(_.heap_len=0,_.heap_max=h,ng=0;ng<rg;ng++)cg[2*ng]!==0?(_.heap[++_.heap_len]=Wg=ng,_.depth[ng]=0):cg[2*ng+1]=0;for(;_.heap_len<2;)cg[2*(lg=_.heap[++_.heap_len]=Wg<2?++Wg:0)]=1,_.depth[lg]=0,_.opt_len--,hg&&(_.static_len-=dg[2*lg+1]);for(Ig.max_code=Wg,ng=_.heap_len>>1;1<=ng;ng--)q(_,cg,ng);for(lg=rg;ng=_.heap[1],_.heap[1]=_.heap[_.heap_len--],q(_,cg,1),ag=_.heap[1],_.heap[--_.heap_max]=ng,_.heap[--_.heap_max]=ag,cg[2*lg]=cg[2*ng]+cg[2*ag],_.depth[lg]=(_.depth[ng]>=_.depth[ag]?_.depth[ng]:_.depth[ag])+1,cg[2*ng+1]=cg[2*ag+1]=lg,_.heap[1]=lg++,q(_,cg,1),2<=_.heap_len;);_.heap[--_.heap_max]=_.heap[1],function(Gg,Sg){var Kg,kg,yg,Vg,pg,Hg,Jg=Sg.dyn_tree,zg=Sg.max_code,aI=Sg.stat_desc.static_tree,BI=Sg.stat_desc.has_stree,Ug=Sg.stat_desc.extra_bits,lI=Sg.stat_desc.extra_base,oI=Sg.stat_desc.max_length,Eg=0;for(Vg=0;Vg<=b;Vg++)Gg.bl_count[Vg]=0;for(Jg[2*Gg.heap[Gg.heap_max]+1]=0,Kg=Gg.heap_max+1;Kg<h;Kg++)oI<(Vg=Jg[2*Jg[2*(kg=Gg.heap[Kg])+1]+1]+1)&&(Vg=oI,Eg++),Jg[2*kg+1]=Vg,zg<kg||(Gg.bl_count[Vg]++,pg=0,lI<=kg&&(pg=Ug[kg-lI]),Hg=Jg[2*kg],Gg.opt_len+=Hg*(Vg+pg),BI&&(Gg.static_len+=Hg*(aI[2*kg+1]+pg)));if(Eg!==0){do{for(Vg=oI-1;Gg.bl_count[Vg]===0;)Vg--;Gg.bl_count[Vg]--,Gg.bl_count[Vg+1]+=2,Gg.bl_count[oI]--,Eg-=2}while(0<Eg);for(Vg=oI;Vg!==0;Vg--)for(kg=Gg.bl_count[Vg];kg!==0;)zg<(yg=Gg.heap[--Kg])||(Jg[2*yg+1]!==Vg&&(Gg.opt_len+=(Vg-Jg[2*yg+1])*Jg[2*yg],Jg[2*yg+1]=Vg),kg--)}}(_,Ig),E(cg,Wg,_.bl_count)}function x(_,Ig,ng){var ag,lg,cg=-1,dg=Ig[1],hg=0,rg=7,Wg=4;for(dg===0&&(rg=138,Wg=3),Ig[2*(ng+1)+1]=65535,ag=0;ag<=ng;ag++)lg=dg,dg=Ig[2*(ag+1)+1],++hg<rg&&lg===dg||(hg<Wg?_.bl_tree[2*lg]+=hg:lg!==0?(lg!==cg&&_.bl_tree[2*lg]++,_.bl_tree[2*p]++):hg<=10?_.bl_tree[2*Y]++:_.bl_tree[2*R]++,cg=lg,Wg=(hg=0)===dg?(rg=138,3):lg===dg?(rg=6,3):(rg=7,4))}function sg(_,Ig,ng){var ag,lg,cg=-1,dg=Ig[1],hg=0,rg=7,Wg=4;for(dg===0&&(rg=138,Wg=3),ag=0;ag<=ng;ag++)if(lg=dg,dg=Ig[2*(ag+1)+1],!(++hg<rg&&lg===dg)){if(hg<Wg)for(;P(_,lg,_.bl_tree),--hg!=0;);else lg!==0?(lg!==cg&&(P(_,lg,_.bl_tree),hg--),P(_,p,_.bl_tree),Q(_,hg-3,2)):hg<=10?(P(_,Y,_.bl_tree),Q(_,hg-3,3)):(P(_,R,_.bl_tree),Q(_,hg-11,7));cg=lg,Wg=(hg=0)===dg?(rg=138,3):lg===dg?(rg=6,3):(rg=7,4)}}l(y);var Ag=!1;function O(_,Ig,ng,ag){Q(_,(n<<1)+(ag?1:0),3),function(lg,cg,dg,hg){k(lg),T(lg,dg),T(lg,~dg),e.arraySet(lg.pending_buf,lg.window,cg,dg,lg.pending),lg.pending+=dg}(_,Ig,ng)}i._tr_init=function(_){Ag||(function(){var Ig,ng,ag,lg,cg,dg=new Array(b+1);for(lg=ag=0;lg<a-1;lg++)for(B[lg]=ag,Ig=0;Ig<1<<X[lg];Ig++)N[ag++]=lg;for(N[ag-1]=lg,lg=cg=0;lg<16;lg++)for(y[lg]=cg,Ig=0;Ig<1<<H[lg];Ig++)V[cg++]=lg;for(cg>>=7;lg<c;lg++)for(y[lg]=cg<<7,Ig=0;Ig<1<<H[lg]-7;Ig++)V[256+cg++]=lg;for(ng=0;ng<=b;ng++)dg[ng]=0;for(Ig=0;Ig<=143;)v[2*Ig+1]=8,Ig++,dg[8]++;for(;Ig<=255;)v[2*Ig+1]=9,Ig++,dg[9]++;for(;Ig<=279;)v[2*Ig+1]=7,Ig++,dg[7]++;for(;Ig<=287;)v[2*Ig+1]=8,Ig++,dg[8]++;for(E(v,o+1,dg),Ig=0;Ig<c;Ig++)K[2*Ig+1]=5,K[2*Ig]=L(Ig,5);G=new f(v,X,d+1,o,b),w=new f(K,H,0,c,b),W=new f(new Array(0),S,0,r,m)}(),Ag=!0),_.l_desc=new D(_.dyn_ltree,G),_.d_desc=new D(_.dyn_dtree,w),_.bl_desc=new D(_.bl_tree,W),_.bi_buf=0,_.bi_valid=0,J(_)},i._tr_stored_block=O,i._tr_flush_block=function(_,Ig,ng,ag){var lg,cg,dg=0;0<_.level?(_.strm.data_type===2&&(_.strm.data_type=function(hg){var rg,Wg=4093624447;for(rg=0;rg<=31;rg++,Wg>>>=1)if(1&Wg&&hg.dyn_ltree[2*rg]!==0)return A;if(hg.dyn_ltree[18]!==0||hg.dyn_ltree[20]!==0||hg.dyn_ltree[26]!==0)return s;for(rg=32;rg<d;rg++)if(hg.dyn_ltree[2*rg]!==0)return s;return A}(_)),Cg(_,_.l_desc),Cg(_,_.d_desc),dg=function(hg){var rg;for(x(hg,hg.dyn_ltree,hg.l_desc.max_code),x(hg,hg.dyn_dtree,hg.d_desc.max_code),Cg(hg,hg.bl_desc),rg=r-1;3<=rg&&hg.bl_tree[2*z[rg]+1]===0;rg--);return hg.opt_len+=3*(rg+1)+5+5+4,rg}(_),lg=_.opt_len+3+7>>>3,(cg=_.static_len+3+7>>>3)<=lg&&(lg=cg)):lg=cg=ng+5,ng+4<=lg&&Ig!==-1?O(_,Ig,ng,ag):_.strategy===4||cg===lg?(Q(_,2+(ag?1:0),3),tg(_,v,K)):(Q(_,4+(ag?1:0),3),function(hg,rg,Wg,Gg){var Sg;for(Q(hg,rg-257,5),Q(hg,Wg-1,5),Q(hg,Gg-4,4),Sg=0;Sg<Gg;Sg++)Q(hg,hg.bl_tree[2*z[Sg]+1],3);sg(hg,hg.dyn_ltree,rg-1),sg(hg,hg.dyn_dtree,Wg-1)}(_,_.l_desc.max_code+1,_.d_desc.max_code+1,dg+1),tg(_,_.dyn_ltree,_.dyn_dtree)),J(_),ag&&k(_)},i._tr_tally=function(_,Ig,ng){return _.pending_buf[_.d_buf+2*_.last_lit]=Ig>>>8&255,_.pending_buf[_.d_buf+2*_.last_lit+1]=255&Ig,_.pending_buf[_.l_buf+_.last_lit]=255&ng,_.last_lit++,Ig===0?_.dyn_ltree[2*ng]++:(_.matches++,Ig--,_.dyn_ltree[2*(N[ng]+d+1)]++,_.dyn_dtree[2*F(Ig)]++),_.last_lit===_.lit_bufsize-1},i._tr_align=function(_){Q(_,2,3),P(_,Z,v),function(Ig){Ig.bi_valid===16?(T(Ig,Ig.bi_buf),Ig.bi_buf=0,Ig.bi_valid=0):8<=Ig.bi_valid&&(Ig.pending_buf[Ig.pending++]=255&Ig.bi_buf,Ig.bi_buf>>=8,Ig.bi_valid-=8)}(_)}},{"../utils/common":41}],53:[function(g,C,i){C.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(g,C,i){(function(e){(function(A,s){if(!A.setImmediate){var l,n,a,d,o=1,c={},r=!1,h=A.document,b=Object.getPrototypeOf&&Object.getPrototypeOf(A);b=b&&b.setTimeout?b:A,l={}.toString.call(A.process)==="[object process]"?function(p){process.nextTick(function(){m(p)})}:function(){if(A.postMessage&&!A.importScripts){var p=!0,Y=A.onmessage;return A.onmessage=function(){p=!1},A.postMessage("","*"),A.onmessage=Y,p}}()?(d="setImmediate$"+Math.random()+"$",A.addEventListener?A.addEventListener("message",Z,!1):A.attachEvent("onmessage",Z),function(p){A.postMessage(d+p,"*")}):A.MessageChannel?((a=new MessageChannel).port1.onmessage=function(p){m(p.data)},function(p){a.port2.postMessage(p)}):h&&"onreadystatechange"in h.createElement("script")?(n=h.documentElement,function(p){var Y=h.createElement("script");Y.onreadystatechange=function(){m(p),Y.onreadystatechange=null,n.removeChild(Y),Y=null},n.appendChild(Y)}):function(p){setTimeout(m,0,p)},b.setImmediate=function(p){typeof p!="function"&&(p=new Function(""+p));for(var Y=new Array(arguments.length-1),R=0;R<Y.length;R++)Y[R]=arguments[R+1];var X={callback:p,args:Y};return c[o]=X,l(o),o++},b.clearImmediate=u}function u(p){delete c[p]}function m(p){if(r)setTimeout(m,0,p);else{var Y=c[p];if(Y){r=!0;try{(function(R){var X=R.callback,H=R.args;switch(H.length){case 0:X();break;case 1:X(H[0]);break;case 2:X(H[0],H[1]);break;case 3:X(H[0],H[1],H[2]);break;default:X.apply(s,H)}})(Y)}finally{u(p),r=!1}}}}function Z(p){p.source===A&&typeof p.data=="string"&&p.data.indexOf(d)===0&&m(+p.data.slice(d.length))}})(typeof self>"u"?e===void 0?this:e:self)}).call(this,typeof FI<"u"?FI:typeof self<"u"?self:typeof window<"u"?window:{})},{}]},{},[10])(10)})}(pH)),pH.exports}var Qng=jng();const Ong=qq(Qng);var Ct;(function(t){t.OfficeDocument="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",t.FontTable="http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable",t.Image="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",t.Numbering="http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering",t.Styles="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles",t.StylesWithEffects="http://schemas.microsoft.com/office/2007/relationships/stylesWithEffects",t.Theme="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",t.Settings="http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings",t.WebSettings="http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings",t.Hyperlink="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",t.Footnotes="http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes",t.Endnotes="http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes",t.Footer="http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer",t.Header="http://schemas.openxmlformats.org/officeDocument/2006/relationships/header",t.ExtendedProperties="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties",t.CoreProperties="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties",t.CustomProperties="http://schemas.openxmlformats.org/package/2006/relationships/metadata/custom-properties",t.Comments="http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments",t.CommentsExtended="http://schemas.microsoft.com/office/2011/relationships/commentsExtended",t.AltChunk="http://schemas.openxmlformats.org/officeDocument/2006/relationships/aFChunk"})(Ct||(Ct={}));function Ung(t,I){return I.elements(t).map(g=>({id:I.attr(g,"Id"),type:I.attr(g,"Type"),target:I.attr(g,"Target"),targetMode:I.attr(g,"TargetMode")}))}function Eng(t){return t==null?void 0:t.replace(/[ .]+/g,"-").replace(/[&]+/g,"and").toLowerCase()}function MX(t){return/^[^"'].*\s.*[^"']$/.test(t)?`'${t}'`:t}function OY(t){let I=t.lastIndexOf("/")+1,g=I==0?"":t.substring(0,I),C=I==0?t:t.substring(I);return[g,C]}function BH(t,I){try{const g="http://docx/";return new URL(t,g+I).toString().substring(g.length)}catch{return`${I}${t}`}}function En(t,I){return t.reduce((g,C)=>(g[I(C)]=C,g),{})}function Png(t){return new Promise((I,g)=>{const C=new FileReader;C.onloadend=()=>I(C.result),C.onerror=()=>g(),C.readAsDataURL(t)})}function WH(t){return t&&typeof t=="object"&&!Array.isArray(t)}function _ng(t){return typeof t=="string"||t instanceof String}function zN(t,...I){if(!I.length)return t;const g=I.shift();if(WH(t)&&WH(g))for(const C in g)if(WH(g[C])){const i=t[C]??(t[C]={});zN(i,g[C])}else t[C]=g[C];return zN(t,...I)}function Gu(t){return Array.isArray(t)?t:[t]}function qng(t,I,g){return I>t?I:g<t?g:t}const $q={wordml:"http://schemas.openxmlformats.org/wordprocessingml/2006/main"},tt={Dxa:{mul:.05,unit:"pt"},Emu:{mul:1/12700,unit:"pt"},FontSize:{mul:.5,unit:"pt"},Border:{mul:.125,unit:"pt",min:.25,max:12},Point:{mul:1,unit:"pt"},Percent:{mul:.02,unit:"%"}};function g$(t,I=tt.Dxa){if(t==null||/.+(p[xt]|[%])$/.test(t))return t;var g=parseInt(t)*I.mul;return I.min&&I.max&&(g=qng(g,I.min,I.max)),`${g.toFixed(2)}${I.unit}`}function $ng(t,I=!1){switch(t){case"1":return!0;case"0":return!1;case"on":return!0;case"off":return!1;case"true":return!0;case"false":return!1;default:return I}}function I$(t,I,g){if(t.namespaceURI!=$q.wordml)return!1;switch(t.localName){case"color":I.color=g.attr(t,"val");break;case"sz":I.fontSize=g.lengthAttr(t,"val",tt.FontSize);break;default:return!1}return!0}function gag(t,I=!1){I&&(t=t.replace(/<[?].*[?]>/,"")),t=Cag(t);const g=new DOMParser().parseFromString(t,"application/xml"),C=Iag(g);if(C)throw new Error(C);return g}function Iag(t){var I;return(I=t.getElementsByTagName("parsererror")[0])==null?void 0:I.textContent}function Cag(t){return t.charCodeAt(0)===65279?t.substring(1):t}function tag(t){return new XMLSerializer().serializeToString(t)}class C${elements(I,g=null){const C=[];for(let i=0,e=I.childNodes.length;i<e;i++){let A=I.childNodes.item(i);A.nodeType==1&&(g==null||A.localName==g)&&C.push(A)}return C}element(I,g){for(let C=0,i=I.childNodes.length;C<i;C++){let e=I.childNodes.item(C);if(e.nodeType==1&&e.localName==g)return e}return null}elementAttr(I,g,C){var i=this.element(I,g);return i?this.attr(i,C):void 0}attrs(I){return Array.from(I.attributes)}attr(I,g){for(let C=0,i=I.attributes.length;C<i;C++){let e=I.attributes.item(C);if(e.localName==g)return e.value}return null}intAttr(I,g,C=null){var i=this.attr(I,g);return i?parseInt(i):C}hexAttr(I,g,C=null){var i=this.attr(I,g);return i?parseInt(i,16):C}floatAttr(I,g,C=null){var i=this.attr(I,g);return i?parseFloat(i):C}boolAttr(I,g,C=null){return $ng(this.attr(I,g),C)}lengthAttr(I,g,C=tt.Dxa){return g$(this.attr(I,g),C)}}const mg=new C$;class we{constructor(I,g){this._package=I,this.path=g}async load(){this.rels=await this._package.loadRelationships(this.path);const I=await this._package.load(this.path),g=this._package.parseXmlDocument(I);this._package.options.keepOrigin&&(this._xmlDocument=g),this.parseXml(g.firstElementChild)}save(){this._package.update(this.path,tag(this._xmlDocument))}parseXml(I){}}const iag={embedRegular:"regular",embedBold:"bold",embedItalic:"italic",embedBoldItalic:"boldItalic"};function eag(t,I){return I.elements(t).map(g=>Aag(g,I))}function Aag(t,I){let g={name:I.attr(t,"name"),embedFontRefs:[]};for(let C of I.elements(t))switch(C.localName){case"family":g.family=I.attr(C,"val");break;case"altName":g.altName=I.attr(C,"val");break;case"embedRegular":case"embedBold":case"embedItalic":case"embedBoldItalic":g.embedFontRefs.push(sag(C,I));break}return g}function sag(t,I){return{id:I.attr(t,"id"),key:I.attr(t,"fontKey"),type:iag[t.localName]}}class lag extends we{parseXml(I){this.fonts=eag(I,this._package.xmlParser)}}class QD{constructor(I,g){this._zip=I,this.options=g,this.xmlParser=new C$}get(I){const g=nag(I);return this._zip.files[g]??this._zip.files[g.replace(/\//g,"\\")]}update(I,g){this._zip.file(I,g)}static async load(I,g){const C=await Ong.loadAsync(I);return new QD(C,g)}save(I="blob"){return this._zip.generateAsync({type:I})}load(I,g="string"){var C;return((C=this.get(I))==null?void 0:C.async(g))??Promise.resolve(null)}async loadRelationships(I=null){let g="_rels/.rels";if(I!=null){const[i,e]=OY(I);g=`${i}_rels/${e}.rels`}const C=await this.load(g);return C?Ung(this.parseXmlDocument(C).firstElementChild,this.xmlParser):null}parseXmlDocument(I){return gag(I,this.options.trimXmlDeclaration)}}function nag(t){return t.startsWith("/")?t.substr(1):t}class aag extends we{constructor(I,g,C){super(I,g),this._documentParser=C}parseXml(I){this.body=this._documentParser.parseDocumentFile(I)}}function wY(t,I){return{type:I.attr(t,"val"),color:I.attr(t,"color"),size:I.lengthAttr(t,"sz",tt.Border),offset:I.lengthAttr(t,"space",tt.Point),frame:I.boolAttr(t,"frame"),shadow:I.boolAttr(t,"shadow")}}function oag(t,I){var g={};for(let C of I.elements(t))switch(C.localName){case"left":g.left=wY(C,I);break;case"top":g.top=wY(C,I);break;case"right":g.right=wY(C,I);break;case"bottom":g.bottom=wY(C,I);break}return g}var N6;(function(t){t.Continuous="continuous",t.NextPage="nextPage",t.NextColumn="nextColumn",t.EvenPage="evenPage",t.OddPage="oddPage"})(N6||(N6={}));function t$(t,I=mg){var g={};for(let C of I.elements(t))switch(C.localName){case"pgSz":g.pageSize={width:I.lengthAttr(C,"w"),height:I.lengthAttr(C,"h"),orientation:I.attr(C,"orient")};break;case"type":g.type=I.attr(C,"val");break;case"pgMar":g.pageMargins={left:I.lengthAttr(C,"left"),right:I.lengthAttr(C,"right"),top:I.lengthAttr(C,"top"),bottom:I.lengthAttr(C,"bottom"),header:I.lengthAttr(C,"header"),footer:I.lengthAttr(C,"footer"),gutter:I.lengthAttr(C,"gutter")};break;case"cols":g.columns=cag(C,I);break;case"headerReference":(g.headerRefs??(g.headerRefs=[])).push(V6(C,I));break;case"footerReference":(g.footerRefs??(g.footerRefs=[])).push(V6(C,I));break;case"titlePg":g.titlePage=I.boolAttr(C,"val",!0);break;case"pgBorders":g.pageBorders=oag(C,I);break;case"pgNumType":g.pageNumber=dag(C,I);break}return g}function cag(t,I){return{numberOfColumns:I.intAttr(t,"num"),space:I.lengthAttr(t,"space"),separator:I.boolAttr(t,"sep"),equalWidth:I.boolAttr(t,"equalWidth",!0),columns:I.elements(t,"col").map(g=>({width:I.lengthAttr(g,"w"),space:I.lengthAttr(g,"space")}))}}function dag(t,I){return{chapSep:I.attr(t,"chapSep"),chapStyle:I.attr(t,"chapStyle"),format:I.attr(t,"fmt"),start:I.intAttr(t,"start")}}function V6(t,I){return{id:I.attr(t,"id"),type:I.attr(t,"type")}}function rag(t,I){return{before:I.lengthAttr(t,"before"),after:I.lengthAttr(t,"after"),line:I.intAttr(t,"line"),lineRule:I.attr(t,"lineRule")}}function OD(t,I){let g={};for(let C of I.elements(t))hag(C,g,I);return g}function hag(t,I,g){return!!I$(t,I,g)}function i$(t,I){let g={};for(let C of I.elements(t))e$(C,g,I);return g}function e$(t,I,g){if(t.namespaceURI!=$q.wordml)return!1;if(I$(t,I,g))return!0;switch(t.localName){case"tabs":I.tabs=bag(t,g);break;case"sectPr":I.sectionProps=t$(t,g);break;case"numPr":I.numbering=uag(t,g);break;case"spacing":return I.lineSpacing=rag(t,g),!1;case"textAlignment":return I.textAlignment=g.attr(t,"val"),!1;case"keepLines":I.keepLines=g.boolAttr(t,"val",!0);break;case"keepNext":I.keepNext=g.boolAttr(t,"val",!0);break;case"pageBreakBefore":I.pageBreakBefore=g.boolAttr(t,"val",!0);break;case"outlineLvl":I.outlineLevel=g.intAttr(t,"val");break;case"pStyle":I.styleName=g.attr(t,"val");break;case"rPr":I.runProps=OD(t,g);break;default:return!1}return!0}function bag(t,I){return I.elements(t,"tab").map(g=>({position:I.lengthAttr(g,"pos"),leader:I.attr(g,"leader"),style:I.attr(g,"val")}))}function uag(t,I){var g={};for(let C of I.elements(t))switch(C.localName){case"numId":g.id=I.attr(C,"val");break;case"ilvl":g.level=I.intAttr(C,"val");break}return g}function mag(t,I){let g={numberings:[],abstractNumberings:[],bulletPictures:[]};for(let C of I.elements(t))switch(C.localName){case"num":g.numberings.push(Zag(C,I));break;case"abstractNum":g.abstractNumberings.push(Gag(C,I));break;case"numPicBullet":g.bulletPictures.push(pag(C,I));break}return g}function Zag(t,I){let g={id:I.attr(t,"numId"),overrides:[]};for(let C of I.elements(t))switch(C.localName){case"abstractNumId":g.abstractId=I.attr(C,"val");break;case"lvlOverride":g.overrides.push(wag(C,I));break}return g}function Gag(t,I){let g={id:I.attr(t,"abstractNumId"),levels:[]};for(let C of I.elements(t))switch(C.localName){case"name":g.name=I.attr(C,"val");break;case"multiLevelType":g.multiLevelType=I.attr(C,"val");break;case"numStyleLink":g.numberingStyleLink=I.attr(C,"val");break;case"styleLink":g.styleLink=I.attr(C,"val");break;case"lvl":g.levels.push(A$(C,I));break}return g}function A$(t,I){let g={level:I.intAttr(t,"ilvl")};for(let C of I.elements(t))switch(C.localName){case"start":g.start=I.attr(C,"val");break;case"lvlRestart":g.restart=I.intAttr(C,"val");break;case"numFmt":g.format=I.attr(C,"val");break;case"lvlText":g.text=I.attr(C,"val");break;case"lvlJc":g.justification=I.attr(C,"val");break;case"lvlPicBulletId":g.bulletPictureId=I.attr(C,"val");break;case"pStyle":g.paragraphStyle=I.attr(C,"val");break;case"pPr":g.paragraphProps=i$(C,I);break;case"rPr":g.runProps=OD(C,I);break}return g}function wag(t,I){let g={level:I.intAttr(t,"ilvl")};for(let C of I.elements(t))switch(C.localName){case"startOverride":g.start=I.intAttr(C,"val");break;case"lvl":g.numberingLevel=A$(C,I);break}return g}function pag(t,I){var g=I.element(t,"pict"),C=g&&I.element(g,"shape"),i=C&&I.element(C,"imagedata");return i?{id:I.attr(t,"numPicBulletId"),referenceId:I.attr(i,"id"),style:I.attr(C,"style")}:null}class Bag extends we{constructor(I,g,C){super(I,g),this._documentParser=C}parseXml(I){Object.assign(this,mag(I,this._package.xmlParser)),this.domNumberings=this._documentParser.parseNumberingFile(I)}}class Wag extends we{constructor(I,g,C){super(I,g),this._documentParser=C}parseXml(I){this.styles=this._documentParser.parseStylesFile(I)}}var Ng;(function(t){t.Document="document",t.Paragraph="paragraph",t.Run="run",t.Break="break",t.NoBreakHyphen="noBreakHyphen",t.Table="table",t.Row="row",t.Cell="cell",t.Hyperlink="hyperlink",t.SmartTag="smartTag",t.Drawing="drawing",t.Image="image",t.Text="text",t.Tab="tab",t.Symbol="symbol",t.BookmarkStart="bookmarkStart",t.BookmarkEnd="bookmarkEnd",t.Footer="footer",t.Header="header",t.FootnoteReference="footnoteReference",t.EndnoteReference="endnoteReference",t.Footnote="footnote",t.Endnote="endnote",t.SimpleField="simpleField",t.ComplexField="complexField",t.Instruction="instruction",t.VmlPicture="vmlPicture",t.MmlMath="mmlMath",t.MmlMathParagraph="mmlMathParagraph",t.MmlFraction="mmlFraction",t.MmlFunction="mmlFunction",t.MmlFunctionName="mmlFunctionName",t.MmlNumerator="mmlNumerator",t.MmlDenominator="mmlDenominator",t.MmlRadical="mmlRadical",t.MmlBase="mmlBase",t.MmlDegree="mmlDegree",t.MmlSuperscript="mmlSuperscript",t.MmlSubscript="mmlSubscript",t.MmlPreSubSuper="mmlPreSubSuper",t.MmlSubArgument="mmlSubArgument",t.MmlSuperArgument="mmlSuperArgument",t.MmlNary="mmlNary",t.MmlDelimiter="mmlDelimiter",t.MmlRun="mmlRun",t.MmlEquationArray="mmlEquationArray",t.MmlLimit="mmlLimit",t.MmlLimitLower="mmlLimitLower",t.MmlMatrix="mmlMatrix",t.MmlMatrixRow="mmlMatrixRow",t.MmlBox="mmlBox",t.MmlBar="mmlBar",t.MmlGroupChar="mmlGroupChar",t.VmlElement="vmlElement",t.Inserted="inserted",t.Deleted="deleted",t.DeletedText="deletedText",t.Comment="comment",t.CommentReference="commentReference",t.CommentRangeStart="commentRangeStart",t.CommentRangeEnd="commentRangeEnd",t.AltChunk="altChunk"})(Ng||(Ng={}));class Ad{constructor(){this.children=[],this.cssStyle={}}}class yag extends Ad{constructor(){super(...arguments),this.type=Ng.Header}}class Yag extends Ad{constructor(){super(...arguments),this.type=Ng.Footer}}class s$ extends we{constructor(I,g,C){super(I,g),this._documentParser=C}parseXml(I){this.rootElement=this.createRootElement(),this.rootElement.children=this._documentParser.parseBodyElements(I)}}class Nag extends s${createRootElement(){return new yag}}class Vag extends s${createRootElement(){return new Yag}}function Mag(t,I){const g={};for(let C of I.elements(t))switch(C.localName){case"Template":g.template=C.textContent;break;case"Pages":g.pages=wu(C.textContent);break;case"Words":g.words=wu(C.textContent);break;case"Characters":g.characters=wu(C.textContent);break;case"Application":g.application=C.textContent;break;case"Lines":g.lines=wu(C.textContent);break;case"Paragraphs":g.paragraphs=wu(C.textContent);break;case"Company":g.company=C.textContent;break;case"AppVersion":g.appVersion=C.textContent;break}return g}function wu(t){if(!(typeof t>"u"))return parseInt(t)}class Rag extends we{parseXml(I){this.props=Mag(I,this._package.xmlParser)}}function fag(t,I){const g={};for(let C of I.elements(t))switch(C.localName){case"title":g.title=C.textContent;break;case"description":g.description=C.textContent;break;case"subject":g.subject=C.textContent;break;case"creator":g.creator=C.textContent;break;case"keywords":g.keywords=C.textContent;break;case"language":g.language=C.textContent;break;case"lastModifiedBy":g.lastModifiedBy=C.textContent;break;case"revision":C.textContent&&(g.revision=parseInt(C.textContent));break}return g}class Hag extends we{parseXml(I){this.props=fag(I,this._package.xmlParser)}}class Xag{}function Sag(t,I){var g=new Xag,C=I.element(t,"themeElements");for(let i of I.elements(C))switch(i.localName){case"clrScheme":g.colorScheme=Dag(i,I);break;case"fontScheme":g.fontScheme=Kag(i,I);break}return g}function Dag(t,I){var g={name:I.attr(t,"name"),colors:{}};for(let e of I.elements(t)){var C=I.element(e,"srgbClr"),i=I.element(e,"sysClr");C?g.colors[e.localName]=I.attr(C,"val"):i&&(g.colors[e.localName]=I.attr(i,"lastClr"))}return g}function Kag(t,I){var g={name:I.attr(t,"name")};for(let C of I.elements(t))switch(C.localName){case"majorFont":g.majorFont=M6(C,I);break;case"minorFont":g.minorFont=M6(C,I);break}return g}function M6(t,I){return{latinTypeface:I.elementAttr(t,"latin","typeface"),eaTypeface:I.elementAttr(t,"ea","typeface"),csTypeface:I.elementAttr(t,"cs","typeface")}}class Fag extends we{constructor(I,g){super(I,g)}parseXml(I){this.theme=Sag(I,this._package.xmlParser)}}class l${}class kag extends l${constructor(){super(...arguments),this.type=Ng.Footnote}}class zag extends l${constructor(){super(...arguments),this.type=Ng.Endnote}}class n$ extends we{constructor(I,g,C){super(I,g),this._documentParser=C}}class Jag extends n${constructor(I,g,C){super(I,g,C)}parseXml(I){this.notes=this._documentParser.parseNotes(I,"footnote",kag)}}class Lag extends n${constructor(I,g,C){super(I,g,C)}parseXml(I){this.notes=this._documentParser.parseNotes(I,"endnote",zag)}}function vag(t,I){var g={};for(let C of I.elements(t))switch(C.localName){case"defaultTabStop":g.defaultTabStop=I.lengthAttr(C,"val");break;case"footnotePr":g.footnoteProps=R6(C,I);break;case"endnotePr":g.endnoteProps=R6(C,I);break;case"autoHyphenation":g.autoHyphenation=I.boolAttr(C,"val");break}return g}function R6(t,I){var g={defaultNoteIds:[]};for(let C of I.elements(t))switch(C.localName){case"numFmt":g.nummeringFormat=I.attr(C,"val");break;case"footnote":case"endnote":g.defaultNoteIds.push(I.attr(C,"id"));break}return g}class Tag extends we{constructor(I,g){super(I,g)}parseXml(I){this.settings=vag(I,this._package.xmlParser)}}function xag(t,I){return I.elements(t,"property").map(g=>{const C=g.firstChild;return{formatId:I.attr(g,"fmtid"),name:I.attr(g,"name"),type:C.nodeName,value:C.textContent}})}class jag extends we{parseXml(I){this.props=xag(I,this._package.xmlParser)}}class Qag extends we{constructor(I,g,C){super(I,g),this._documentParser=C}parseXml(I){this.comments=this._documentParser.parseComments(I),this.commentMap=En(this.comments,g=>g.id)}}class Oag extends we{constructor(I,g){super(I,g),this.comments=[]}parseXml(I){const g=this._package.xmlParser;for(let C of g.elements(I,"commentEx"))this.comments.push({paraId:g.attr(C,"paraId"),paraIdParent:g.attr(C,"paraIdParent"),done:g.boolAttr(C,"done")});this.commentMap=En(this.comments,C=>C.paraId)}}const Uag=[{type:Ct.OfficeDocument,target:"word/document.xml"},{type:Ct.ExtendedProperties,target:"docProps/app.xml"},{type:Ct.CoreProperties,target:"docProps/core.xml"},{type:Ct.CustomProperties,target:"docProps/custom.xml"}];class UD{constructor(){this.parts=[],this.partsMap={}}static async load(I,g,C){var i=new UD;return i._options=C,i._parser=g,i._package=await QD.load(I,C),i.rels=await i._package.loadRelationships(),await Promise.all(Uag.map(e=>{const A=i.rels.find(s=>s.type===e.type)??e;return i.loadRelationshipPart(A.target,A.type)})),i}save(I="blob"){return this._package.save(I)}async loadRelationshipPart(I,g){var i;if(this.partsMap[I])return this.partsMap[I];if(!this._package.get(I))return null;let C=null;switch(g){case Ct.OfficeDocument:this.documentPart=C=new aag(this._package,I,this._parser);break;case Ct.FontTable:this.fontTablePart=C=new lag(this._package,I);break;case Ct.Numbering:this.numberingPart=C=new Bag(this._package,I,this._parser);break;case Ct.Styles:this.stylesPart=C=new Wag(this._package,I,this._parser);break;case Ct.Theme:this.themePart=C=new Fag(this._package,I);break;case Ct.Footnotes:this.footnotesPart=C=new Jag(this._package,I,this._parser);break;case Ct.Endnotes:this.endnotesPart=C=new Lag(this._package,I,this._parser);break;case Ct.Footer:C=new Vag(this._package,I,this._parser);break;case Ct.Header:C=new Nag(this._package,I,this._parser);break;case Ct.CoreProperties:this.corePropsPart=C=new Hag(this._package,I);break;case Ct.ExtendedProperties:this.extendedPropsPart=C=new Rag(this._package,I);break;case Ct.CustomProperties:C=new jag(this._package,I);break;case Ct.Settings:this.settingsPart=C=new Tag(this._package,I);break;case Ct.Comments:this.commentsPart=C=new Qag(this._package,I,this._parser);break;case Ct.CommentsExtended:this.commentsExtendedPart=C=new Oag(this._package,I);break}if(C==null)return Promise.resolve(null);if(this.partsMap[I]=C,this.parts.push(C),await C.load(),((i=C.rels)==null?void 0:i.length)>0){const[e]=OY(C.path);await Promise.all(C.rels.map(A=>this.loadRelationshipPart(BH(A.target,e),A.type)))}return C}async loadDocumentImage(I,g){const C=await this.loadResource(g??this.documentPart,I,"blob");return this.blobToURL(C)}async loadNumberingImage(I){const g=await this.loadResource(this.numberingPart,I,"blob");return this.blobToURL(g)}async loadFont(I,g){const C=await this.loadResource(this.fontTablePart,I,"uint8array");return C&&this.blobToURL(new Blob([Eag(C,g)]))}async loadAltChunk(I,g){return await this.loadResource(g??this.documentPart,I,"string")}blobToURL(I){return I?this._options.useBase64URL?Png(I):URL.createObjectURL(I):null}findPartByRelId(I,g=null){var C=(g.rels??this.rels).find(e=>e.id==I);const i=g?OY(g.path)[0]:"";return C?this.partsMap[BH(C.target,i)]:null}getPathById(I,g){const C=I.rels.find(e=>e.id==g),[i]=OY(I.path);return C?BH(C.target,i):null}loadResource(I,g,C){const i=this.getPathById(I,g);return i?this._package.load(i,C):Promise.resolve(null)}}function Eag(t,I){const C=I.replace(/{|}|-/g,""),i=new Array(16);for(let e=0;e<16;e++)i[16-e-1]=parseInt(C.substr(e*2,2),16);for(let e=0;e<32;e++)t[e]=t[e]^i[e%16];return t}function Pag(t,I){return{type:Ng.BookmarkStart,id:I.attr(t,"id"),name:I.attr(t,"name"),colFirst:I.intAttr(t,"colFirst"),colLast:I.intAttr(t,"colLast")}}function _ag(t,I){return{type:Ng.BookmarkEnd,id:I.attr(t,"id")}}class qag extends Ad{constructor(){super(...arguments),this.type=Ng.VmlElement,this.attrs={}}}function a$(t,I){var g=new qag;switch(t.localName){case"rect":g.tagName="rect",Object.assign(g.attrs,{width:"100%",height:"100%"});break;case"oval":g.tagName="ellipse",Object.assign(g.attrs,{cx:"50%",cy:"50%",rx:"50%",ry:"50%"});break;case"line":g.tagName="line";break;case"shape":g.tagName="g";break;case"textbox":g.tagName="foreignObject",Object.assign(g.attrs,{width:"100%",height:"100%"});break;default:return null}for(const C of mg.attrs(t))switch(C.localName){case"style":g.cssStyleText=C.value;break;case"fillcolor":g.attrs.fill=C.value;break;case"from":const[i,e]=f6(C.value);Object.assign(g.attrs,{x1:i,y1:e});break;case"to":const[A,s]=f6(C.value);Object.assign(g.attrs,{x2:A,y2:s});break}for(const C of mg.elements(t))switch(C.localName){case"stroke":Object.assign(g.attrs,$ag(C));break;case"fill":Object.assign(g.attrs,gog());break;case"imagedata":g.tagName="image",Object.assign(g.attrs,{width:"100%",height:"100%"}),g.imageHref={id:mg.attr(C,"id"),title:mg.attr(C,"title")};break;case"txbxContent":g.children.push(...I.parseBodyElements(C));break;default:const i=a$(C,I);i&&g.children.push(i);break}return g}function $ag(t){return{stroke:mg.attr(t,"color"),"stroke-width":mg.lengthAttr(t,"weight",tt.Emu)??"1px"}}function gog(t){return{}}function f6(t){return t.split(",")}class Iog extends Ad{constructor(){super(...arguments),this.type=Ng.Comment}}class Cog extends Ad{constructor(I){super(),this.id=I,this.type=Ng.CommentReference}}class tog extends Ad{constructor(I){super(),this.id=I,this.type=Ng.CommentRangeStart}}class iog extends Ad{constructor(I){super(),this.id=I,this.type=Ng.CommentRangeEnd}}var UY={shd:"inherit",color:"black",borderColor:"black",highlight:"transparent"};const eog=[],H6={oMath:Ng.MmlMath,oMathPara:Ng.MmlMathParagraph,f:Ng.MmlFraction,func:Ng.MmlFunction,fName:Ng.MmlFunctionName,num:Ng.MmlNumerator,den:Ng.MmlDenominator,rad:Ng.MmlRadical,deg:Ng.MmlDegree,e:Ng.MmlBase,sSup:Ng.MmlSuperscript,sSub:Ng.MmlSubscript,sPre:Ng.MmlPreSubSuper,sup:Ng.MmlSuperArgument,sub:Ng.MmlSubArgument,d:Ng.MmlDelimiter,nary:Ng.MmlNary,eqArr:Ng.MmlEquationArray,lim:Ng.MmlLimit,limLow:Ng.MmlLimitLower,m:Ng.MmlMatrix,mr:Ng.MmlMatrixRow,box:Ng.MmlBox,bar:Ng.MmlBar,groupChr:Ng.MmlGroupChar};class Aog{constructor(I){this.options={ignoreWidth:!1,debug:!1,...I}}parseNotes(I,g,C){var i=[];for(let e of mg.elements(I,g)){const A=new C;A.id=mg.attr(e,"id"),A.noteType=mg.attr(e,"type"),A.children=this.parseBodyElements(e),i.push(A)}return i}parseComments(I){var g=[];for(let C of mg.elements(I,"comment")){const i=new Iog;i.id=mg.attr(C,"id"),i.author=mg.attr(C,"author"),i.initials=mg.attr(C,"initials"),i.date=mg.attr(C,"date"),i.children=this.parseBodyElements(C),g.push(i)}return g}parseDocumentFile(I){var g=mg.element(I,"body"),C=mg.element(I,"background"),i=mg.element(g,"sectPr");return{type:Ng.Document,children:this.parseBodyElements(g),props:i?t$(i,mg):{},cssStyle:C?this.parseBackground(C):{}}}parseBackground(I){var g={},C=NC.colorAttr(I,"color");return C&&(g["background-color"]=C),g}parseBodyElements(I){var g=[];for(let C of mg.elements(I))switch(C.localName){case"p":g.push(this.parseParagraph(C));break;case"altChunk":g.push(this.parseAltChunk(C));break;case"tbl":g.push(this.parseTable(C));break;case"sdt":g.push(...this.parseSdt(C,i=>this.parseBodyElements(i)));break}return g}parseStylesFile(I){var g=[];return NC.foreach(I,C=>{switch(C.localName){case"style":g.push(this.parseStyle(C));break;case"docDefaults":g.push(this.parseDefaultStyles(C));break}}),g}parseDefaultStyles(I){var g={id:null,name:null,target:null,basedOn:null,styles:[]};return NC.foreach(I,C=>{switch(C.localName){case"rPrDefault":var i=mg.element(C,"rPr");i&&g.styles.push({target:"span",values:this.parseDefaultProperties(i,{})});break;case"pPrDefault":var e=mg.element(C,"pPr");e&&g.styles.push({target:"p",values:this.parseDefaultProperties(e,{})});break}}),g}parseStyle(I){var g={id:mg.attr(I,"styleId"),isDefault:mg.boolAttr(I,"default"),name:null,target:null,basedOn:null,styles:[],linked:null};switch(mg.attr(I,"type")){case"paragraph":g.target="p";break;case"table":g.target="table";break;case"character":g.target="span";break}return NC.foreach(I,C=>{switch(C.localName){case"basedOn":g.basedOn=mg.attr(C,"val");break;case"name":g.name=mg.attr(C,"val");break;case"link":g.linked=mg.attr(C,"val");break;case"next":g.next=mg.attr(C,"val");break;case"aliases":g.aliases=mg.attr(C,"val").split(",");break;case"pPr":g.styles.push({target:"p",values:this.parseDefaultProperties(C,{})}),g.paragraphProps=i$(C,mg);break;case"rPr":g.styles.push({target:"span",values:this.parseDefaultProperties(C,{})}),g.runProps=OD(C,mg);break;case"tblPr":case"tcPr":g.styles.push({target:"td",values:this.parseDefaultProperties(C,{})});break;case"tblStylePr":for(let i of this.parseTableStyle(C))g.styles.push(i);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: ${C.localName}`)}}),g}parseTableStyle(I){var g=[],C=mg.attr(I,"type"),i="",e="";switch(C){case"firstRow":e=".first-row",i="tr.first-row td";break;case"lastRow":e=".last-row",i="tr.last-row td";break;case"firstCol":e=".first-col",i="td.first-col";break;case"lastCol":e=".last-col",i="td.last-col";break;case"band1Vert":e=":not(.no-vband)",i="td.odd-col";break;case"band2Vert":e=":not(.no-vband)",i="td.even-col";break;case"band1Horz":e=":not(.no-hband)",i="tr.odd-row";break;case"band2Horz":e=":not(.no-hband)",i="tr.even-row";break;default:return[]}return NC.foreach(I,A=>{switch(A.localName){case"pPr":g.push({target:`${i} p`,mod:e,values:this.parseDefaultProperties(A,{})});break;case"rPr":g.push({target:`${i} span`,mod:e,values:this.parseDefaultProperties(A,{})});break;case"tblPr":case"tcPr":g.push({target:i,mod:e,values:this.parseDefaultProperties(A,{})});break}}),g}parseNumberingFile(I){var g=[],C={},i=[];return NC.foreach(I,e=>{switch(e.localName){case"abstractNum":this.parseAbstractNumbering(e,i).forEach(l=>g.push(l));break;case"numPicBullet":i.push(this.parseNumberingPicBullet(e));break;case"num":var A=mg.attr(e,"numId"),s=mg.elementAttr(e,"abstractNumId","val");C[s]=A;break}}),g.forEach(e=>e.id=C[e.id]),g}parseNumberingPicBullet(I){var g=mg.element(I,"pict"),C=g&&mg.element(g,"shape"),i=C&&mg.element(C,"imagedata");return i?{id:mg.intAttr(I,"numPicBulletId"),src:mg.attr(i,"id"),style:mg.attr(C,"style")}:null}parseAbstractNumbering(I,g){var C=[],i=mg.attr(I,"abstractNumId");return NC.foreach(I,e=>{switch(e.localName){case"lvl":C.push(this.parseNumberingLevel(i,e,g));break}}),C}parseNumberingLevel(I,g,C){var i={id:I,level:mg.intAttr(g,"ilvl"),start:1,pStyleName:void 0,pStyle:{},rStyle:{},suff:"tab"};return NC.foreach(g,e=>{switch(e.localName){case"start":i.start=mg.intAttr(e,"val");break;case"pPr":this.parseDefaultProperties(e,i.pStyle);break;case"rPr":this.parseDefaultProperties(e,i.rStyle);break;case"lvlPicBulletId":var A=mg.intAttr(e,"val");i.bullet=C.find(s=>(s==null?void 0:s.id)==A);break;case"lvlText":i.levelText=mg.attr(e,"val");break;case"pStyle":i.pStyleName=mg.attr(e,"val");break;case"numFmt":i.format=mg.attr(e,"val");break;case"suff":i.suff=mg.attr(e,"val");break}}),i}parseSdt(I,g){const C=mg.element(I,"sdtContent");return C?g(C):[]}parseInserted(I,g){var C;return{type:Ng.Inserted,children:((C=g(I))==null?void 0:C.children)??[]}}parseDeleted(I,g){var C;return{type:Ng.Deleted,children:((C=g(I))==null?void 0:C.children)??[]}}parseAltChunk(I){return{type:Ng.AltChunk,children:[],id:mg.attr(I,"id")}}parseParagraph(I){var g={type:Ng.Paragraph,children:[]};for(let C of mg.elements(I))switch(C.localName){case"pPr":this.parseParagraphProperties(C,g);break;case"r":g.children.push(this.parseRun(C,g));break;case"hyperlink":g.children.push(this.parseHyperlink(C,g));break;case"smartTag":g.children.push(this.parseSmartTag(C,g));break;case"bookmarkStart":g.children.push(Pag(C,mg));break;case"bookmarkEnd":g.children.push(_ag(C,mg));break;case"commentRangeStart":g.children.push(new tog(mg.attr(C,"id")));break;case"commentRangeEnd":g.children.push(new iog(mg.attr(C,"id")));break;case"oMath":case"oMathPara":g.children.push(this.parseMathElement(C));break;case"sdt":g.children.push(...this.parseSdt(C,i=>this.parseParagraph(i).children));break;case"ins":g.children.push(this.parseInserted(C,i=>this.parseParagraph(i)));break;case"del":g.children.push(this.parseDeleted(C,i=>this.parseParagraph(i)));break}return g}parseParagraphProperties(I,g){this.parseDefaultProperties(I,g.cssStyle={},null,C=>{if(e$(C,g,mg))return!0;switch(C.localName){case"pStyle":g.styleName=mg.attr(C,"val");break;case"cnfStyle":g.className=YC.classNameOfCnfStyle(C);break;case"framePr":this.parseFrame(C,g);break;case"rPr":break;default:return!1}return!0})}parseFrame(I,g){var C=mg.attr(I,"dropCap");C=="drop"&&(g.cssStyle.float="left")}parseHyperlink(I,g){var C={type:Ng.Hyperlink,parent:g,children:[]};return C.anchor=mg.attr(I,"anchor"),C.id=mg.attr(I,"id"),NC.foreach(I,i=>{switch(i.localName){case"r":C.children.push(this.parseRun(i,C));break}}),C}parseSmartTag(I,g){var C={type:Ng.SmartTag,parent:g,children:[]},i=mg.attr(I,"uri"),e=mg.attr(I,"element");return i&&(C.uri=i),e&&(C.element=e),NC.foreach(I,A=>{switch(A.localName){case"r":C.children.push(this.parseRun(A,C));break}}),C}parseRun(I,g){var C={type:Ng.Run,parent:g,children:[]};return NC.foreach(I,i=>{switch(i=this.checkAlternateContent(i),i.localName){case"t":C.children.push({type:Ng.Text,text:i.textContent});break;case"delText":C.children.push({type:Ng.DeletedText,text:i.textContent});break;case"commentReference":C.children.push(new Cog(mg.attr(i,"id")));break;case"fldSimple":C.children.push({type:Ng.SimpleField,instruction:mg.attr(i,"instr"),lock:mg.boolAttr(i,"lock",!1),dirty:mg.boolAttr(i,"dirty",!1)});break;case"instrText":C.fieldRun=!0,C.children.push({type:Ng.Instruction,text:i.textContent});break;case"fldChar":C.fieldRun=!0,C.children.push({type:Ng.ComplexField,charType:mg.attr(i,"fldCharType"),lock:mg.boolAttr(i,"lock",!1),dirty:mg.boolAttr(i,"dirty",!1)});break;case"noBreakHyphen":C.children.push({type:Ng.NoBreakHyphen});break;case"br":C.children.push({type:Ng.Break,break:mg.attr(i,"type")||"textWrapping"});break;case"lastRenderedPageBreak":C.children.push({type:Ng.Break,break:"lastRenderedPageBreak"});break;case"sym":C.children.push({type:Ng.Symbol,font:MX(mg.attr(i,"font")),char:mg.attr(i,"char")});break;case"tab":C.children.push({type:Ng.Tab});break;case"footnoteReference":C.children.push({type:Ng.FootnoteReference,id:mg.attr(i,"id")});break;case"endnoteReference":C.children.push({type:Ng.EndnoteReference,id:mg.attr(i,"id")});break;case"drawing":let e=this.parseDrawing(i);e&&(C.children=[e]);break;case"pict":C.children.push(this.parseVmlPicture(i));break;case"rPr":this.parseRunProperties(i,C);break}}),C}parseMathElement(I){const g=`${I.localName}Pr`,C={type:H6[I.localName],children:[]};for(const e of mg.elements(I))if(H6[e.localName])C.children.push(this.parseMathElement(e));else if(e.localName=="r"){var i=this.parseRun(e);i.type=Ng.MmlRun,C.children.push(i)}else e.localName==g&&(C.props=this.parseMathProperies(e));return C}parseMathProperies(I){const g={};for(const C of mg.elements(I))switch(C.localName){case"chr":g.char=mg.attr(C,"val");break;case"vertJc":g.verticalJustification=mg.attr(C,"val");break;case"pos":g.position=mg.attr(C,"val");break;case"degHide":g.hideDegree=mg.boolAttr(C,"val");break;case"begChr":g.beginChar=mg.attr(C,"val");break;case"endChr":g.endChar=mg.attr(C,"val");break}return g}parseRunProperties(I,g){this.parseDefaultProperties(I,g.cssStyle={},null,C=>{switch(C.localName){case"rStyle":g.styleName=mg.attr(C,"val");break;case"vertAlign":g.verticalAlign=YC.valueOfVertAlign(C,!0);break;default:return!1}return!0})}parseVmlPicture(I){const g={type:Ng.VmlPicture,children:[]};for(const C of mg.elements(I)){const i=a$(C,this);i&&g.children.push(i)}return g}checkAlternateContent(I){var e;if(I.localName!="AlternateContent")return I;var g=mg.element(I,"Choice");if(g){var C=mg.attr(g,"Requires"),i=I.lookupNamespaceURI(C);if(eog.includes(i))return g.firstElementChild}return(e=mg.element(I,"Fallback"))==null?void 0:e.firstElementChild}parseDrawing(I){for(var g of mg.elements(I))switch(g.localName){case"inline":case"anchor":return this.parseDrawingWrapper(g)}}parseDrawingWrapper(I){var g={type:Ng.Drawing,children:[],cssStyle:{}},C=I.localName=="anchor";let i=null,e=mg.boolAttr(I,"simplePos");mg.boolAttr(I,"behindDoc");let A={relative:"page",align:"left",offset:"0"},s={relative:"page",align:"top",offset:"0"};for(var l of mg.elements(I))switch(l.localName){case"simplePos":e&&(A.offset=mg.lengthAttr(l,"x",tt.Emu),s.offset=mg.lengthAttr(l,"y",tt.Emu));break;case"extent":g.cssStyle.width=mg.lengthAttr(l,"cx",tt.Emu),g.cssStyle.height=mg.lengthAttr(l,"cy",tt.Emu);break;case"positionH":case"positionV":if(!e){let o=l.localName=="positionH"?A:s;var n=mg.element(l,"align"),a=mg.element(l,"posOffset");o.relative=mg.attr(l,"relativeFrom")??o.relative,n&&(o.align=n.textContent),a&&(o.offset=NC.sizeValue(a,tt.Emu))}break;case"wrapTopAndBottom":i="wrapTopAndBottom";break;case"wrapNone":i="wrapNone";break;case"graphic":var d=this.parseGraphic(l);d&&g.children.push(d);break}return i=="wrapTopAndBottom"?(g.cssStyle.display="block",A.align&&(g.cssStyle["text-align"]=A.align,g.cssStyle.width="100%")):i=="wrapNone"?(g.cssStyle.display="block",g.cssStyle.position="relative",g.cssStyle.width="0px",g.cssStyle.height="0px",A.offset&&(g.cssStyle.left=A.offset),s.offset&&(g.cssStyle.top=s.offset)):C&&(A.align=="left"||A.align=="right")&&(g.cssStyle.float=A.align),g}parseGraphic(I){var g=mg.element(I,"graphicData");for(let C of mg.elements(g))switch(C.localName){case"pic":return this.parsePicture(C)}return null}parsePicture(I){var g={type:Ng.Image,src:"",cssStyle:{}},C=mg.element(I,"blipFill"),i=mg.element(C,"blip");g.src=mg.attr(i,"embed");var e=mg.element(I,"spPr"),A=mg.element(e,"xfrm");g.cssStyle.position="relative";for(var s of mg.elements(A))switch(s.localName){case"ext":g.cssStyle.width=mg.lengthAttr(s,"cx",tt.Emu),g.cssStyle.height=mg.lengthAttr(s,"cy",tt.Emu);break;case"off":g.cssStyle.left=mg.lengthAttr(s,"x",tt.Emu),g.cssStyle.top=mg.lengthAttr(s,"y",tt.Emu);break}return g}parseTable(I){var g={type:Ng.Table,children:[]};return NC.foreach(I,C=>{switch(C.localName){case"tr":g.children.push(this.parseTableRow(C));break;case"tblGrid":g.columns=this.parseTableColumns(C);break;case"tblPr":this.parseTableProperties(C,g);break}}),g}parseTableColumns(I){var g=[];return NC.foreach(I,C=>{switch(C.localName){case"gridCol":g.push({width:mg.lengthAttr(C,"w")});break}}),g}parseTableProperties(I,g){switch(g.cssStyle={},g.cellStyle={},this.parseDefaultProperties(I,g.cssStyle,g.cellStyle,C=>{switch(C.localName){case"tblStyle":g.styleName=mg.attr(C,"val");break;case"tblLook":g.className=YC.classNameOftblLook(C);break;case"tblpPr":this.parseTablePosition(C,g);break;case"tblStyleColBandSize":g.colBandSize=mg.intAttr(C,"val");break;case"tblStyleRowBandSize":g.rowBandSize=mg.intAttr(C,"val");break;default:return!1}return!0}),g.cssStyle["text-align"]){case"center":delete g.cssStyle["text-align"],g.cssStyle["margin-left"]="auto",g.cssStyle["margin-right"]="auto";break;case"right":delete g.cssStyle["text-align"],g.cssStyle["margin-left"]="auto";break}}parseTablePosition(I,g){var C=mg.lengthAttr(I,"topFromText"),i=mg.lengthAttr(I,"bottomFromText"),e=mg.lengthAttr(I,"rightFromText"),A=mg.lengthAttr(I,"leftFromText");g.cssStyle.float="left",g.cssStyle["margin-bottom"]=YC.addSize(g.cssStyle["margin-bottom"],i),g.cssStyle["margin-left"]=YC.addSize(g.cssStyle["margin-left"],A),g.cssStyle["margin-right"]=YC.addSize(g.cssStyle["margin-right"],e),g.cssStyle["margin-top"]=YC.addSize(g.cssStyle["margin-top"],C)}parseTableRow(I){var g={type:Ng.Row,children:[]};return NC.foreach(I,C=>{switch(C.localName){case"tc":g.children.push(this.parseTableCell(C));break;case"trPr":this.parseTableRowProperties(C,g);break}}),g}parseTableRowProperties(I,g){g.cssStyle=this.parseDefaultProperties(I,{},null,C=>{switch(C.localName){case"cnfStyle":g.className=YC.classNameOfCnfStyle(C);break;case"tblHeader":g.isHeader=mg.boolAttr(C,"val");break;default:return!1}return!0})}parseTableCell(I){var g={type:Ng.Cell,children:[]};return NC.foreach(I,C=>{switch(C.localName){case"tbl":g.children.push(this.parseTable(C));break;case"p":g.children.push(this.parseParagraph(C));break;case"tcPr":this.parseTableCellProperties(C,g);break}}),g}parseTableCellProperties(I,g){g.cssStyle=this.parseDefaultProperties(I,{},null,C=>{switch(C.localName){case"gridSpan":g.span=mg.intAttr(C,"val",null);break;case"vMerge":g.verticalMerge=mg.attr(C,"val")??"continue";break;case"cnfStyle":g.className=YC.classNameOfCnfStyle(C);break;default:return!1}return!0}),this.parseTableCellVerticalText(I,g)}parseTableCellVerticalText(I,g){const C={btLr:{writingMode:"vertical-rl",transform:"rotate(180deg)"},lrTb:{writingMode:"vertical-lr",transform:"none"},tbRl:{writingMode:"vertical-rl",transform:"none"}};NC.foreach(I,i=>{if(i.localName==="textDirection"){const e=mg.attr(i,"val"),A=C[e]||{writingMode:"horizontal-tb"};g.cssStyle["writing-mode"]=A.writingMode,g.cssStyle.transform=A.transform}})}parseDefaultProperties(I,g=null,C=null,i=null){return g=g||{},NC.foreach(I,e=>{if(!(i!=null&&i(e)))switch(e.localName){case"jc":g["text-align"]=YC.valueOfJc(e);break;case"textAlignment":g["vertical-align"]=YC.valueOfTextAlignment(e);break;case"color":g.color=NC.colorAttr(e,"val",null,UY.color);break;case"sz":g["font-size"]=g["min-height"]=mg.lengthAttr(e,"val",tt.FontSize);break;case"shd":g["background-color"]=NC.colorAttr(e,"fill",null,UY.shd);break;case"highlight":g["background-color"]=NC.colorAttr(e,"val",null,UY.highlight);break;case"vertAlign":break;case"position":g.verticalAlign=mg.lengthAttr(e,"val",tt.FontSize);break;case"tcW":if(this.options.ignoreWidth)break;case"tblW":g.width=YC.valueOfSize(e,"w");break;case"trHeight":this.parseTrHeight(e,g);break;case"strike":g["text-decoration"]=mg.boolAttr(e,"val",!0)?"line-through":"none";break;case"b":g["font-weight"]=mg.boolAttr(e,"val",!0)?"bold":"normal";break;case"i":g["font-style"]=mg.boolAttr(e,"val",!0)?"italic":"normal";break;case"caps":g["text-transform"]=mg.boolAttr(e,"val",!0)?"uppercase":"none";break;case"smallCaps":g["font-variant"]=mg.boolAttr(e,"val",!0)?"small-caps":"none";break;case"u":this.parseUnderline(e,g);break;case"ind":case"tblInd":this.parseIndentation(e,g);break;case"rFonts":this.parseFont(e,g);break;case"tblBorders":this.parseBorderProperties(e,C||g);break;case"tblCellSpacing":g["border-spacing"]=YC.valueOfMargin(e),g["border-collapse"]="separate";break;case"pBdr":this.parseBorderProperties(e,g);break;case"bdr":g.border=YC.valueOfBorder(e);break;case"tcBorders":this.parseBorderProperties(e,g);break;case"vanish":mg.boolAttr(e,"val",!0)&&(g.display="none");break;case"kern":break;case"noWrap":break;case"tblCellMar":case"tcMar":this.parseMarginProperties(e,C||g);break;case"tblLayout":g["table-layout"]=YC.valueOfTblLayout(e);break;case"vAlign":g["vertical-align"]=YC.valueOfTextAlignment(e);break;case"spacing":I.localName=="pPr"&&this.parseSpacing(e,g);break;case"wordWrap":mg.boolAttr(e,"val")&&(g["overflow-wrap"]="break-word");break;case"suppressAutoHyphens":g.hyphens=mg.boolAttr(e,"val",!0)?"none":"auto";break;case"lang":g.$lang=mg.attr(e,"val");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"widowControl":case"bidi":case"rtl":case"noProof":break;default:this.options.debug&&console.warn(`DOCX: Unknown document element: ${I.localName}.${e.localName}`);break}}),g}parseUnderline(I,g){var C=mg.attr(I,"val");if(C!=null){switch(C){case"dash":case"dashDotDotHeavy":case"dashDotHeavy":case"dashedHeavy":case"dashLong":case"dashLongHeavy":case"dotDash":case"dotDotDash":g["text-decoration"]="underline dashed";break;case"dotted":case"dottedHeavy":g["text-decoration"]="underline dotted";break;case"double":g["text-decoration"]="underline double";break;case"single":case"thick":g["text-decoration"]="underline";break;case"wave":case"wavyDouble":case"wavyHeavy":g["text-decoration"]="underline wavy";break;case"words":g["text-decoration"]="underline";break;case"none":g["text-decoration"]="none";break}var i=NC.colorAttr(I,"color");i&&(g["text-decoration-color"]=i)}}parseFont(I,g){var C=mg.attr(I,"ascii"),i=YC.themeValue(I,"asciiTheme"),e=mg.attr(I,"eastAsia"),A=[C,i,e].filter(s=>s).map(s=>MX(s));A.length>0&&(g["font-family"]=[...new Set(A)].join(", "))}parseIndentation(I,g){var C=mg.lengthAttr(I,"firstLine"),i=mg.lengthAttr(I,"hanging"),e=mg.lengthAttr(I,"left"),A=mg.lengthAttr(I,"start"),s=mg.lengthAttr(I,"right"),l=mg.lengthAttr(I,"end");C&&(g["text-indent"]=C),i&&(g["text-indent"]=`-${i}`),(e||A)&&(g["margin-left"]=e||A),(s||l)&&(g["margin-right"]=s||l)}parseSpacing(I,g){var C=mg.lengthAttr(I,"before"),i=mg.lengthAttr(I,"after"),e=mg.intAttr(I,"line",null),A=mg.attr(I,"lineRule");if(C&&(g["margin-top"]=C),i&&(g["margin-bottom"]=i),e!==null)switch(A){case"auto":g["line-height"]=`${(e/240).toFixed(2)}`;break;case"atLeast":g["line-height"]=`calc(100% + ${e/20}pt)`;break;default:g["line-height"]=g["min-height"]=`${e/20}pt`;break}}parseMarginProperties(I,g){NC.foreach(I,C=>{switch(C.localName){case"left":g["padding-left"]=YC.valueOfMargin(C);break;case"right":g["padding-right"]=YC.valueOfMargin(C);break;case"top":g["padding-top"]=YC.valueOfMargin(C);break;case"bottom":g["padding-bottom"]=YC.valueOfMargin(C);break}})}parseTrHeight(I,g){switch(mg.attr(I,"hRule")){case"exact":g.height=mg.lengthAttr(I,"val");break;case"atLeast":default:g.height=mg.lengthAttr(I,"val");break}}parseBorderProperties(I,g){NC.foreach(I,C=>{switch(C.localName){case"start":case"left":g["border-left"]=YC.valueOfBorder(C);break;case"end":case"right":g["border-right"]=YC.valueOfBorder(C);break;case"top":g["border-top"]=YC.valueOfBorder(C);break;case"bottom":g["border-bottom"]=YC.valueOfBorder(C);break}})}}const sog=["black","blue","cyan","darkBlue","darkCyan","darkGray","darkGreen","darkMagenta","darkRed","darkYellow","green","lightGray","magenta","none","red","white","yellow"];class NC{static foreach(I,g){for(var C=0;C<I.childNodes.length;C++){let i=I.childNodes[C];i.nodeType==Node.ELEMENT_NODE&&g(i)}}static colorAttr(I,g,C=null,i="black"){var e=mg.attr(I,g);if(e)return e=="auto"?i:sog.includes(e)?e:`#${e}`;var A=mg.attr(I,"themeColor");return A?`var(--docx-${A}-color)`:C}static sizeValue(I,g=tt.Dxa){return g$(I.textContent,g)}}class YC{static themeValue(I,g){var C=mg.attr(I,g);return C?`var(--docx-${C}-font)`:null}static valueOfSize(I,g){var C=tt.Dxa;switch(mg.attr(I,"type")){case"dxa":break;case"pct":C=tt.Percent;break;case"auto":return"auto"}return mg.lengthAttr(I,g,C)}static valueOfMargin(I){return mg.lengthAttr(I,"w")}static valueOfBorder(I){var g=mg.attr(I,"val");if(g=="nil")return"none";var C=NC.colorAttr(I,"color"),i=mg.lengthAttr(I,"sz",tt.Border);return`${i} solid ${C=="auto"?UY.borderColor:C}`}static valueOfTblLayout(I){var g=mg.attr(I,"val");return g=="fixed"?"fixed":"auto"}static classNameOfCnfStyle(I){const g=mg.attr(I,"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((i,e)=>g[e]=="1").join(" ")}static valueOfJc(I){var g=mg.attr(I,"val");switch(g){case"start":case"left":return"left";case"center":return"center";case"end":case"right":return"right";case"both":return"justify"}return g}static valueOfVertAlign(I,g=!1){var C=mg.attr(I,"val");switch(C){case"subscript":return"sub";case"superscript":return g?"sup":"super"}return g?null:C}static valueOfTextAlignment(I){var g=mg.attr(I,"val");switch(g){case"auto":case"baseline":return"baseline";case"top":return"top";case"center":return"middle";case"bottom":return"bottom"}return g}static addSize(I,g){return I==null?g:g==null?I:`calc(${I} + ${g})`}static classNameOftblLook(I){const g=mg.hexAttr(I,"val",0);let C="";return(mg.boolAttr(I,"firstRow")||g&32)&&(C+=" first-row"),(mg.boolAttr(I,"lastRow")||g&64)&&(C+=" last-row"),(mg.boolAttr(I,"firstColumn")||g&128)&&(C+=" first-col"),(mg.boolAttr(I,"lastColumn")||g&256)&&(C+=" last-col"),(mg.boolAttr(I,"noHBand")||g&512)&&(C+=" no-hband"),(mg.boolAttr(I,"noVBand")||g&1024)&&(C+=" no-vband"),C.trim()}}const X6={pos:0,leader:"none",style:"left"},log=50;function nog(t=document.body){const I=document.createElement("div");I.style.width="100pt",t.appendChild(I);const g=100/I.offsetWidth;return t.removeChild(I),g}function aog(t,I,g,C=72/96){const i=t.closest("p"),e=t.getBoundingClientRect(),A=i.getBoundingClientRect(),s=getComputedStyle(i),l=(I==null?void 0:I.length)>0?I.map(m=>({pos:S6(m.position),leader:m.leader,style:m.style})).sort((m,Z)=>m.pos-Z.pos):[X6],n=l[l.length-1],a=A.width*C,d=S6(g);let o=n.pos+d;if(o<a)for(;o<a&&l.length<log;o+=d)l.push({...X6,pos:o});const c=parseFloat(s.marginLeft),r=A.left+c,h=(e.left-r)*C,b=l.find(m=>m.style!="clear"&&m.pos>h);if(b==null)return;let u=1;if(b.style=="right"||b.style=="center"){const m=Array.from(i.querySelectorAll(`.${t.className}`)),Z=m.indexOf(t)+1,p=document.createRange();p.setStart(t,1),Z<m.length?p.setEndBefore(m[Z]):p.setEndAfter(i);const Y=b.style=="center"?.5:1,R=p.getBoundingClientRect(),X=R.left+Y*R.width-(A.left-c);u=b.pos-X*C}else u=b.pos-h;switch(t.innerHTML=" ",t.style.textDecoration="inherit",t.style.wordSpacing=`${u.toFixed(0)}pt`,b.leader){case"dot":case"middleDot":t.style.textDecoration="underline",t.style.textDecorationStyle="dotted";break;case"hyphen":case"heavy":case"underscore":t.style.textDecoration="underline";break}}function S6(t){return parseFloat(t)}const xI={svg:"http://www.w3.org/2000/svg",mathML:"http://www.w3.org/1998/Math/MathML"};class oog{constructor(I){this.htmlDocument=I,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.commentMap={},this.tasks=[],this.postRenderTasks=[]}async render(I,g,C=null,i){var A;this.document=I,this.options=i,this.className=i.className,this.rootSelector=i.inWrapper?`.${this.className}-wrapper`:":root",this.styleMap=null,this.tasks=[],this.options.renderComments&&globalThis.Highlight&&(this.commentHighlight=new Highlight),C=C||g,D6(C),D6(g),C.appendChild(this.createComment("docxjs library predefined styles")),C.appendChild(this.renderDefaultStyle()),I.themePart&&(C.appendChild(this.createComment("docxjs document theme values")),this.renderTheme(I.themePart,C)),I.stylesPart!=null&&(this.styleMap=this.processStyles(I.stylesPart.styles),C.appendChild(this.createComment("docxjs document styles")),C.appendChild(this.renderStyles(I.stylesPart.styles))),I.numberingPart&&(this.prodessNumberings(I.numberingPart.domNumberings),C.appendChild(this.createComment("docxjs document numbering styles")),C.appendChild(this.renderNumbering(I.numberingPart.domNumberings,C))),I.footnotesPart&&(this.footnoteMap=En(I.footnotesPart.notes,s=>s.id)),I.endnotesPart&&(this.endnoteMap=En(I.endnotesPart.notes,s=>s.id)),I.settingsPart&&(this.defaultTabSize=(A=I.settingsPart.settings)==null?void 0:A.defaultTabStop),!i.ignoreFonts&&I.fontTablePart&&this.renderFontTable(I.fontTablePart,C);var e=this.renderSections(I.documentPart.body);this.options.inWrapper?g.appendChild(this.renderWrapper(e)):yH(g,e),this.commentHighlight&&i.renderComments&&CSS.highlights.set(`${this.className}-comments`,this.commentHighlight),this.postRenderTasks.forEach(s=>s()),await Promise.allSettled(this.tasks),this.refreshTabStops()}renderTheme(I,g){var s,l;const C={},i=(s=I.theme)==null?void 0:s.fontScheme;i&&(i.majorFont&&(C["--docx-majorHAnsi-font"]=i.majorFont.latinTypeface),i.minorFont&&(C["--docx-minorHAnsi-font"]=i.minorFont.latinTypeface));const e=(l=I.theme)==null?void 0:l.colorScheme;if(e)for(let[n,a]of Object.entries(e.colors))C[`--docx-${n}-color`]=`#${a}`;const A=this.styleToString(`.${this.className}`,C);g.appendChild(this.createStyleElement(A))}renderFontTable(I,g){for(let C of I.fonts)for(let i of C.embedFontRefs)this.tasks.push(this.document.loadFont(i.id,i.key).then(e=>{const A={"font-family":MX(C.name),src:`url(${e})`};(i.type=="bold"||i.type=="boldItalic")&&(A["font-weight"]="bold"),(i.type=="italic"||i.type=="boldItalic")&&(A["font-style"]="italic");const s=this.styleToString("@font-face",A);g.appendChild(this.createComment(`docxjs ${C.name} font`)),g.appendChild(this.createStyleElement(s))}))}processStyleName(I){return I?`${this.className}_${Eng(I)}`:this.className}processStyles(I){const g=En(I.filter(i=>i.id!=null),i=>i.id);for(const i of I.filter(e=>e.basedOn)){var C=g[i.basedOn];if(C){i.paragraphProps=zN(i.paragraphProps,C.paragraphProps),i.runProps=zN(i.runProps,C.runProps);for(const e of C.styles){const A=i.styles.find(s=>s.target==e.target);A?this.copyStyleProperties(e.values,A.values):i.styles.push({...e,values:{...e.values}})}}else this.options.debug&&console.warn(`Can't find base style ${i.basedOn}`)}for(let i of I)i.cssName=this.processStyleName(i.id);return g}prodessNumberings(I){var g;for(let C of I.filter(i=>i.pStyleName)){const i=this.findStyle(C.pStyleName);(g=i==null?void 0:i.paragraphProps)!=null&&g.numbering&&(i.paragraphProps.numbering.level=C.level)}}processElement(I){if(I.children)for(var g of I.children)g.parent=I,g.type==Ng.Table?this.processTable(g):this.processElement(g)}processTable(I){for(var g of I.children)for(var C of g.children)C.cssStyle=this.copyStyleProperties(I.cellStyle,C.cssStyle,["border-left","border-right","border-top","border-bottom","padding-left","padding-right","padding-top","padding-bottom"]),this.processElement(C)}copyStyleProperties(I,g,C=null){if(!I)return g;g==null&&(g={}),C==null&&(C=Object.getOwnPropertyNames(I));for(var i of C)I.hasOwnProperty(i)&&!g.hasOwnProperty(i)&&(g[i]=I[i]);return g}createPageElement(I,g){var C=this.createElement("section",{className:I});return g&&(g.pageMargins&&(C.style.paddingLeft=g.pageMargins.left,C.style.paddingRight=g.pageMargins.right,C.style.paddingTop=g.pageMargins.top,C.style.paddingBottom=g.pageMargins.bottom),g.pageSize&&(this.options.ignoreWidth||(C.style.width=g.pageSize.width),this.options.ignoreHeight||(C.style.minHeight=g.pageSize.height))),C}createSectionContent(I){var g=this.createElement("article");return I.columns&&I.columns.numberOfColumns&&(g.style.columnCount=`${I.columns.numberOfColumns}`,g.style.columnGap=I.columns.space,I.columns.separator&&(g.style.columnRule="1px solid black")),g}renderSections(I){const g=[];this.processElement(I);const C=this.splitBySection(I.children,I.props),i=this.groupByPageBreaks(C);let e=null;for(let s=0,l=i.length;s<l;s++){this.currentFootnoteIds=[];let a=i[s][0].sectProps;const d=this.createPageElement(this.className,a);this.renderStyleValues(I.cssStyle,d),this.options.renderHeaders&&this.renderHeaderFooter(a.headerRefs,a,g.length,e!=a,d);for(const o of i[s]){var A=this.createSectionContent(o.sectProps);this.renderElements(o.elements,A),d.appendChild(A),a=o.sectProps}this.options.renderFootnotes&&this.renderNotes(this.currentFootnoteIds,this.footnoteMap,d),this.options.renderEndnotes&&s==l-1&&this.renderNotes(this.currentEndnoteIds,this.endnoteMap,d),this.options.renderFooters&&this.renderHeaderFooter(a.footerRefs,a,g.length,e!=a,d),g.push(d),e=a}return g}renderHeaderFooter(I,g,C,i,e){if(I){var A=(g.titlePage&&i?I.find(l=>l.type=="first"):null)??(C%2==1?I.find(l=>l.type=="even"):null)??I.find(l=>l.type=="default"),s=A&&this.document.findPartByRelId(A.id,this.document.documentPart);if(s){this.currentPart=s,this.usedHederFooterParts.includes(s.path)||(this.processElement(s.rootElement),this.usedHederFooterParts.push(s.path));const[l]=this.renderElements([s.rootElement],e);g!=null&&g.pageMargins&&(s.rootElement.type===Ng.Header?(l.style.marginTop=`calc(${g.pageMargins.header} - ${g.pageMargins.top})`,l.style.minHeight=`calc(${g.pageMargins.top} - ${g.pageMargins.header})`):s.rootElement.type===Ng.Footer&&(l.style.marginBottom=`calc(${g.pageMargins.footer} - ${g.pageMargins.bottom})`,l.style.minHeight=`calc(${g.pageMargins.bottom} - ${g.pageMargins.footer})`)),this.currentPart=null}}}isPageBreakElement(I){return I.type!=Ng.Break?!1:I.break=="lastRenderedPageBreak"?!this.options.ignoreLastRenderedPageBreak:I.break=="page"}isPageBreakSection(I,g){var C,i,e,A,s,l;return!I||!g?!1:((C=I.pageSize)==null?void 0:C.orientation)!=((i=g.pageSize)==null?void 0:i.orientation)||((e=I.pageSize)==null?void 0:e.width)!=((A=g.pageSize)==null?void 0:A.width)||((s=I.pageSize)==null?void 0:s.height)!=((l=g.pageSize)==null?void 0:l.height)}splitBySection(I,g){var d;var C={sectProps:null,elements:[],pageBreak:!1},i=[C];for(let o of I){if(o.type==Ng.Paragraph){const c=this.findStyle(o.styleName);(d=c==null?void 0:c.paragraphProps)!=null&&d.pageBreakBefore&&(C.sectProps=e,C.pageBreak=!0,C={sectProps:null,elements:[],pageBreak:!1},i.push(C))}if(C.elements.push(o),o.type==Ng.Paragraph){const c=o;var e=c.sectionProps,A=-1,s=-1;if(this.options.breakPages&&c.children&&(A=c.children.findIndex(r=>{var h;return s=((h=r.children)==null?void 0:h.findIndex(this.isPageBreakElement.bind(this)))??-1,s!=-1})),(e||A!=-1)&&(C.sectProps=e,C.pageBreak=A!=-1,C={sectProps:null,elements:[],pageBreak:!1},i.push(C)),A!=-1){let r=c.children[A],h=s<r.children.length-1;if(A<c.children.length-1||h){var l=o.children,n={...o,children:l.slice(A)};if(o.children=l.slice(0,A),C.elements.push(n),h){let b=r.children,u={...r,children:b.slice(0,s)};o.children.push(u),r.children=b.slice(s)}}}}}let a=null;for(let o=i.length-1;o>=0;o--)i[o].sectProps==null?i[o].sectProps=a??g:a=i[o].sectProps;return i}groupByPageBreaks(I){let g=[],C;const i=[g];for(let e of I)g.push(e),(this.options.ignoreLastRenderedPageBreak||e.pageBreak||this.isPageBreakSection(C,e.sectProps))&&i.push(g=[]),C=e.sectProps;return i.filter(e=>e.length>0)}renderWrapper(I){return this.createElement("div",{className:`${this.className}-wrapper`},I)}renderDefaultStyle(){var I=this.className,g=`
- .${I}-wrapper { background: gray; padding: 30px; padding-bottom: 0px; display: flex; flex-flow: column; align-items: center; }
- .${I}-wrapper>section.${I} { background: white; box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); margin-bottom: 30px; }`;this.options.hideWrapperOnPrint&&(g=`@media not print { ${g} }`);var C=`${g}
- .${I} { color: black; hyphens: auto; text-underline-position: from-font; }
- section.${I} { box-sizing: border-box; display: flex; flex-flow: column nowrap; position: relative; overflow: hidden; }
- section.${I}>article { margin-bottom: auto; z-index: 1; }
- section.${I}>footer { z-index: 1; }
- .${I} table { border-collapse: collapse; }
- .${I} table td, .${I} table th { vertical-align: top; }
- .${I} p { margin: 0pt; min-height: 1em; }
- .${I} span { white-space: pre-wrap; overflow-wrap: break-word; }
- .${I} a { color: inherit; text-decoration: inherit; }
- .${I} svg { fill: transparent; }
- `;return this.options.renderComments&&(C+=`
- .${I}-comment-ref { cursor: default; }
- .${I}-comment-popover { display: none; z-index: 1000; padding: 0.5rem; background: white; position: absolute; box-shadow: 0 0 0.25rem rgba(0, 0, 0, 0.25); width: 30ch; }
- .${I}-comment-ref:hover~.${I}-comment-popover { display: block; }
- .${I}-comment-author,.${I}-comment-date { font-size: 0.875rem; color: #888; }
- `),this.createStyleElement(C)}renderNumbering(I,g){var C="",i=[];for(var e of I){var A=`p.${this.numberingClass(e.id,e.level)}`,s="none";if(e.bullet){let l=`--${this.className}-${e.bullet.src}`.toLowerCase();C+=this.styleToString(`${A}:before`,{content:"' '",display:"inline-block",background:`var(${l})`},e.bullet.style),this.tasks.push(this.document.loadNumberingImage(e.bullet.src).then(n=>{var a=`${this.rootSelector} { ${l}: url(${n}) }`;g.appendChild(this.createStyleElement(a))}))}else if(e.levelText){let l=this.numberingCounter(e.id,e.level);const n=l+" "+(e.start-1);e.level>0&&(C+=this.styleToString(`p.${this.numberingClass(e.id,e.level-1)}`,{"counter-set":n})),i.push(n),C+=this.styleToString(`${A}:before`,{content:this.levelTextToContent(e.levelText,e.suff,e.id,this.numFormatToCssValue(e.format)),"counter-increment":l,...e.rStyle})}else s=this.numFormatToCssValue(e.format);C+=this.styleToString(A,{display:"list-item","list-style-position":"inside","list-style-type":s,...e.pStyle})}return i.length>0&&(C+=this.styleToString(this.rootSelector,{"counter-reset":i.join(" ")})),this.createStyleElement(C)}renderStyles(I){var g="";const C=this.styleMap,i=En(I.filter(l=>l.isDefault),l=>l.target);for(const l of I){var e=l.styles;if(l.linked){var A=l.linked&&C[l.linked];A?e=e.concat(A.styles):this.options.debug&&console.warn(`Can't find linked style ${l.linked}`)}for(const n of e){var s=`${l.target??""}.${l.cssName}`;l.target!=n.target&&(s+=` ${n.target}`),i[l.target]==l&&(s=`.${this.className} ${l.target}, `+s),g+=this.styleToString(s,n.values)}}return this.createStyleElement(g)}renderNotes(I,g,C){var i=I.map(A=>g[A]).filter(A=>A);if(i.length>0){var e=this.createElement("ol",null,this.renderElements(i));C.appendChild(e)}}renderElement(I){switch(I.type){case Ng.Paragraph:return this.renderParagraph(I);case Ng.BookmarkStart:return this.renderBookmarkStart(I);case Ng.BookmarkEnd:return null;case Ng.Run:return this.renderRun(I);case Ng.Table:return this.renderTable(I);case Ng.Row:return this.renderTableRow(I);case Ng.Cell:return this.renderTableCell(I);case Ng.Hyperlink:return this.renderHyperlink(I);case Ng.SmartTag:return this.renderSmartTag(I);case Ng.Drawing:return this.renderDrawing(I);case Ng.Image:return this.renderImage(I);case Ng.Text:return this.renderText(I);case Ng.Text:return this.renderText(I);case Ng.DeletedText:return this.renderDeletedText(I);case Ng.Tab:return this.renderTab(I);case Ng.Symbol:return this.renderSymbol(I);case Ng.Break:return this.renderBreak(I);case Ng.Footer:return this.renderContainer(I,"footer");case Ng.Header:return this.renderContainer(I,"header");case Ng.Footnote:case Ng.Endnote:return this.renderContainer(I,"li");case Ng.FootnoteReference:return this.renderFootnoteReference(I);case Ng.EndnoteReference:return this.renderEndnoteReference(I);case Ng.NoBreakHyphen:return this.createElement("wbr");case Ng.VmlPicture:return this.renderVmlPicture(I);case Ng.VmlElement:return this.renderVmlElement(I);case Ng.MmlMath:return this.renderContainerNS(I,xI.mathML,"math",{xmlns:xI.mathML});case Ng.MmlMathParagraph:return this.renderContainer(I,"span");case Ng.MmlFraction:return this.renderContainerNS(I,xI.mathML,"mfrac");case Ng.MmlBase:return this.renderContainerNS(I,xI.mathML,I.parent.type==Ng.MmlMatrixRow?"mtd":"mrow");case Ng.MmlNumerator:case Ng.MmlDenominator:case Ng.MmlFunction:case Ng.MmlLimit:case Ng.MmlBox:return this.renderContainerNS(I,xI.mathML,"mrow");case Ng.MmlGroupChar:return this.renderMmlGroupChar(I);case Ng.MmlLimitLower:return this.renderContainerNS(I,xI.mathML,"munder");case Ng.MmlMatrix:return this.renderContainerNS(I,xI.mathML,"mtable");case Ng.MmlMatrixRow:return this.renderContainerNS(I,xI.mathML,"mtr");case Ng.MmlRadical:return this.renderMmlRadical(I);case Ng.MmlSuperscript:return this.renderContainerNS(I,xI.mathML,"msup");case Ng.MmlSubscript:return this.renderContainerNS(I,xI.mathML,"msub");case Ng.MmlDegree:case Ng.MmlSuperArgument:case Ng.MmlSubArgument:return this.renderContainerNS(I,xI.mathML,"mn");case Ng.MmlFunctionName:return this.renderContainerNS(I,xI.mathML,"ms");case Ng.MmlDelimiter:return this.renderMmlDelimiter(I);case Ng.MmlRun:return this.renderMmlRun(I);case Ng.MmlNary:return this.renderMmlNary(I);case Ng.MmlPreSubSuper:return this.renderMmlPreSubSuper(I);case Ng.MmlBar:return this.renderMmlBar(I);case Ng.MmlEquationArray:return this.renderMllList(I);case Ng.Inserted:return this.renderInserted(I);case Ng.Deleted:return this.renderDeleted(I);case Ng.CommentRangeStart:return this.renderCommentRangeStart(I);case Ng.CommentRangeEnd:return this.renderCommentRangeEnd(I);case Ng.CommentReference:return this.renderCommentReference(I);case Ng.AltChunk:return this.renderAltChunk(I)}return null}renderElements(I,g){if(I==null)return null;var C=I.flatMap(i=>this.renderElement(i)).filter(i=>i!=null);return g&&yH(g,C),C}renderContainer(I,g,C){return this.createElement(g,C,this.renderElements(I.children))}renderContainerNS(I,g,C,i){return this.createElementNS(g,C,i,this.renderElements(I.children))}renderParagraph(I){var e,A;var g=this.renderContainer(I,"p");const C=this.findStyle(I.styleName);I.tabs??(I.tabs=(e=C==null?void 0:C.paragraphProps)==null?void 0:e.tabs),this.renderClass(I,g),this.renderStyleValues(I.cssStyle,g),this.renderCommonProperties(g.style,I);const i=I.numbering??((A=C==null?void 0:C.paragraphProps)==null?void 0:A.numbering);return i&&g.classList.add(this.numberingClass(i.id,i.level)),g}renderRunProperties(I,g){this.renderCommonProperties(I,g)}renderCommonProperties(I,g){g!=null&&(g.color&&(I.color=g.color),g.fontSize&&(I["font-size"]=g.fontSize))}renderHyperlink(I){var g=this.renderContainer(I,"a");this.renderStyleValues(I.cssStyle,g);let C="";if(I.id){const i=this.document.documentPart.rels.find(e=>e.id==I.id&&e.targetMode==="External");C=(i==null?void 0:i.target)??C}return I.anchor&&(C+=`#${I.anchor}`),g.href=C,g}renderSmartTag(I){return this.renderContainer(I,"span")}renderCommentRangeStart(I){var i;if(!this.options.renderComments)return null;const g=new Range;(i=this.commentHighlight)==null||i.add(g);const C=this.htmlDocument.createComment(`start of comment #${I.id}`);return this.later(()=>g.setStart(C,0)),this.commentMap[I.id]=g,C}renderCommentRangeEnd(I){if(!this.options.renderComments)return null;const g=this.commentMap[I.id],C=this.htmlDocument.createComment(`end of comment #${I.id}`);return this.later(()=>g==null?void 0:g.setEnd(C,0)),C}renderCommentReference(I){var A;if(!this.options.renderComments)return null;var g=(A=this.document.commentsPart)==null?void 0:A.commentMap[I.id];if(!g)return null;const C=new DocumentFragment,i=this.createElement("span",{className:`${this.className}-comment-ref`},["💬"]),e=this.createElement("div",{className:`${this.className}-comment-popover`});return this.renderCommentContent(g,e),C.appendChild(this.htmlDocument.createComment(`comment #${g.id} by ${g.author} on ${g.date}`)),C.appendChild(i),C.appendChild(e),C}renderAltChunk(I){if(!this.options.renderAltChunks)return null;var g=this.createElement("iframe");return this.tasks.push(this.document.loadAltChunk(I.id,this.currentPart).then(C=>{g.srcdoc=C})),g}renderCommentContent(I,g){g.appendChild(this.createElement("div",{className:`${this.className}-comment-author`},[I.author])),g.appendChild(this.createElement("div",{className:`${this.className}-comment-date`},[new Date(I.date).toLocaleString()])),this.renderElements(I.children,g)}renderDrawing(I){var g=this.renderContainer(I,"div");return g.style.display="inline-block",g.style.position="relative",g.style.textIndent="0px",this.renderStyleValues(I.cssStyle,g),g}renderImage(I){let g=this.createElement("img");return this.renderStyleValues(I.cssStyle,g),this.document&&this.tasks.push(this.document.loadDocumentImage(I.src,this.currentPart).then(C=>{g.src=C})),g}renderText(I){return this.htmlDocument.createTextNode(I.text)}renderDeletedText(I){return this.options.renderEndnotes?this.htmlDocument.createTextNode(I.text):null}renderBreak(I){return I.break=="textWrapping"?this.createElement("br"):null}renderInserted(I){return this.options.renderChanges?this.renderContainer(I,"ins"):this.renderElements(I.children)}renderDeleted(I){return this.options.renderChanges?this.renderContainer(I,"del"):null}renderSymbol(I){var g=this.createElement("span");return g.style.fontFamily=I.font,g.innerHTML=`&#x${I.char};`,g}renderFootnoteReference(I){var g=this.createElement("sup");return this.currentFootnoteIds.push(I.id),g.textContent=`${this.currentFootnoteIds.length}`,g}renderEndnoteReference(I){var g=this.createElement("sup");return this.currentEndnoteIds.push(I.id),g.textContent=`${this.currentEndnoteIds.length}`,g}renderTab(I){var i;var g=this.createElement("span");if(g.innerHTML=" ",this.options.experimental){g.className=this.tabStopClass();var C=(i=cog(I,Ng.Paragraph))==null?void 0:i.tabs;this.currentTabs.push({stops:C,span:g})}return g}renderBookmarkStart(I){return this.createElement("span",{id:I.name})}renderRun(I){if(I.fieldRun)return null;const g=this.createElement("span");if(I.id&&(g.id=I.id),this.renderClass(I,g),this.renderStyleValues(I.cssStyle,g),I.verticalAlign){const C=this.createElement(I.verticalAlign);this.renderElements(I.children,C),g.appendChild(C)}else this.renderElements(I.children,g);return g}renderTable(I){let g=this.createElement("table");return this.tableCellPositions.push(this.currentCellPosition),this.tableVerticalMerges.push(this.currentVerticalMerge),this.currentVerticalMerge={},this.currentCellPosition={col:0,row:0},I.columns&&g.appendChild(this.renderTableColumns(I.columns)),this.renderClass(I,g),this.renderElements(I.children,g),this.renderStyleValues(I.cssStyle,g),this.currentVerticalMerge=this.tableVerticalMerges.pop(),this.currentCellPosition=this.tableCellPositions.pop(),g}renderTableColumns(I){let g=this.createElement("colgroup");for(let C of I){let i=this.createElement("col");C.width&&(i.style.width=C.width),g.appendChild(i)}return g}renderTableRow(I){let g=this.renderContainer(I,"tr");return this.currentCellPosition.col=0,this.renderClass(I,g),this.renderStyleValues(I.cssStyle,g),this.currentCellPosition.row++,g}renderTableCell(I){let g=this.renderContainer(I,"td");const C=this.currentCellPosition.col;return I.verticalMerge?I.verticalMerge=="restart"?(this.currentVerticalMerge[C]=g,g.rowSpan=1):this.currentVerticalMerge[C]&&(this.currentVerticalMerge[C].rowSpan+=1,g.style.display="none"):this.currentVerticalMerge[C]=null,this.renderClass(I,g),this.renderStyleValues(I.cssStyle,g),I.span&&(g.colSpan=I.span),this.currentCellPosition.col+=g.colSpan,g}renderVmlPicture(I){return this.renderContainer(I,"div")}renderVmlElement(I){var i,e;var g=this.createSvgElement("svg");g.setAttribute("style",I.cssStyleText);const C=this.renderVmlChildElement(I);return(i=I.imageHref)!=null&&i.id&&this.tasks.push((e=this.document)==null?void 0:e.loadDocumentImage(I.imageHref.id,this.currentPart).then(A=>C.setAttribute("href",A))),g.appendChild(C),requestAnimationFrame(()=>{const A=g.firstElementChild.getBBox();g.setAttribute("width",`${Math.ceil(A.x+A.width)}`),g.setAttribute("height",`${Math.ceil(A.y+A.height)}`)}),g}renderVmlChildElement(I){const g=this.createSvgElement(I.tagName);Object.entries(I.attrs).forEach(([C,i])=>g.setAttribute(C,i));for(let C of I.children)C.type==Ng.VmlElement?g.appendChild(this.renderVmlChildElement(C)):g.appendChild(...Gu(this.renderElement(C)));return g}renderMmlRadical(I){var i;const g=I.children.find(e=>e.type==Ng.MmlBase);if((i=I.props)!=null&&i.hideDegree)return this.createElementNS(xI.mathML,"msqrt",null,this.renderElements([g]));const C=I.children.find(e=>e.type==Ng.MmlDegree);return this.createElementNS(xI.mathML,"mroot",null,this.renderElements([g,C]))}renderMmlDelimiter(I){const g=[];return g.push(this.createElementNS(xI.mathML,"mo",null,[I.props.beginChar??"("])),g.push(...this.renderElements(I.children)),g.push(this.createElementNS(xI.mathML,"mo",null,[I.props.endChar??")"])),this.createElementNS(xI.mathML,"mrow",null,g)}renderMmlNary(I){var n;const g=[],C=En(I.children,a=>a.type),i=C[Ng.MmlSuperArgument],e=C[Ng.MmlSubArgument],A=i?this.createElementNS(xI.mathML,"mo",null,Gu(this.renderElement(i))):null,s=e?this.createElementNS(xI.mathML,"mo",null,Gu(this.renderElement(e))):null,l=this.createElementNS(xI.mathML,"mo",null,[((n=I.props)==null?void 0:n.char)??"∫"]);return A||s?g.push(this.createElementNS(xI.mathML,"munderover",null,[l,s,A])):A?g.push(this.createElementNS(xI.mathML,"mover",null,[l,A])):s?g.push(this.createElementNS(xI.mathML,"munder",null,[l,s])):g.push(l),g.push(...this.renderElements(C[Ng.MmlBase].children)),this.createElementNS(xI.mathML,"mrow",null,g)}renderMmlPreSubSuper(I){const g=[],C=En(I.children,n=>n.type),i=C[Ng.MmlSuperArgument],e=C[Ng.MmlSubArgument],A=i?this.createElementNS(xI.mathML,"mo",null,Gu(this.renderElement(i))):null,s=e?this.createElementNS(xI.mathML,"mo",null,Gu(this.renderElement(e))):null,l=this.createElementNS(xI.mathML,"mo",null);return g.push(this.createElementNS(xI.mathML,"msubsup",null,[l,s,A])),g.push(...this.renderElements(C[Ng.MmlBase].children)),this.createElementNS(xI.mathML,"mrow",null,g)}renderMmlGroupChar(I){const g=I.props.verticalJustification==="bot"?"mover":"munder",C=this.renderContainerNS(I,xI.mathML,g);return I.props.char&&C.appendChild(this.createElementNS(xI.mathML,"mo",null,[I.props.char])),C}renderMmlBar(I){const g=this.renderContainerNS(I,xI.mathML,"mrow");switch(I.props.position){case"top":g.style.textDecoration="overline";break;case"bottom":g.style.textDecoration="underline";break}return g}renderMmlRun(I){const g=this.createElementNS(xI.mathML,"ms",null,this.renderElements(I.children));return this.renderClass(I,g),this.renderStyleValues(I.cssStyle,g),g}renderMllList(I){const g=this.createElementNS(xI.mathML,"mtable");this.renderClass(I,g),this.renderStyleValues(I.cssStyle,g);for(let C of this.renderElements(I.children))g.appendChild(this.createElementNS(xI.mathML,"mtr",null,[this.createElementNS(xI.mathML,"mtd",null,[C])]));return g}renderStyleValues(I,g){for(let C in I)C.startsWith("$")?g.setAttribute(C.slice(1),I[C]):g.style[C]=I[C]}renderClass(I,g){I.className&&(g.className=I.className),I.styleName&&g.classList.add(this.processStyleName(I.styleName))}findStyle(I){var g;return I&&((g=this.styleMap)==null?void 0:g[I])}numberingClass(I,g){return`${this.className}-num-${I}-${g}`}tabStopClass(){return`${this.className}-tab-stop`}styleToString(I,g,C=null){let i=`${I} {\r
- `;for(const e in g)e.startsWith("$")||(i+=` ${e}: ${g[e]};\r
- `);return C&&(i+=C),i+`}\r
- `}numberingCounter(I,g){return`${this.className}-num-${I}-${g}`}levelTextToContent(I,g,C,i){const e={tab:"\\9",space:"\\a0"};var A=I.replace(/%\d*/g,s=>{let l=parseInt(s.substring(1),10)-1;return`"counter(${this.numberingCounter(C,l)}, ${i})"`});return`"${A}${e[g]??""}"`}numFormatToCssValue(I){var g={none:"none",bullet:"disc",decimal:"decimal",lowerLetter:"lower-alpha",upperLetter:"upper-alpha",lowerRoman:"lower-roman",upperRoman:"upper-roman",decimalZero:"decimal-leading-zero",aiueo:"katakana",aiueoFullWidth:"katakana",chineseCounting:"simp-chinese-informal",chineseCountingThousand:"simp-chinese-informal",chineseLegalSimplified:"simp-chinese-formal",chosung:"hangul-consonant",ideographDigital:"cjk-ideographic",ideographTraditional:"cjk-heavenly-stem",ideographLegalTraditional:"trad-chinese-formal",ideographZodiac:"cjk-earthly-branch",iroha:"katakana-iroha",irohaFullWidth:"katakana-iroha",japaneseCounting:"japanese-informal",japaneseDigitalTenThousand:"cjk-decimal",japaneseLegal:"japanese-formal",thaiNumbers:"thai",koreanCounting:"korean-hangul-formal",koreanDigital:"korean-hangul-formal",koreanDigital2:"korean-hanja-informal",hebrew1:"hebrew",hebrew2:"hebrew",hindiNumbers:"devanagari",ganada:"hangul",taiwaneseCounting:"cjk-ideographic",taiwaneseCountingThousand:"cjk-ideographic",taiwaneseDigital:"cjk-decimal"};return g[I]??I}refreshTabStops(){this.options.experimental&&setTimeout(()=>{const I=nog();for(let g of this.currentTabs)aog(g.span,g.stops,this.defaultTabSize,I)},500)}createElementNS(I,g,C,i){var e=I?this.htmlDocument.createElementNS(I,g):this.htmlDocument.createElement(g);return Object.assign(e,C),i&&yH(e,i),e}createElement(I,g,C){return this.createElementNS(void 0,I,g,C)}createSvgElement(I,g,C){return this.createElementNS(xI.svg,I,g,C)}createStyleElement(I){return this.createElement("style",{innerHTML:I})}createComment(I){return this.htmlDocument.createComment(I)}later(I){this.postRenderTasks.push(I)}}function D6(t){t.innerHTML=""}function yH(t,I){I.forEach(g=>t.appendChild(_ng(g)?document.createTextNode(g):g))}function cog(t,I){for(var g=t.parent;g!=null&&g.type!=I;)g=g.parent;return g}const ED={ignoreHeight:!1,ignoreWidth:!1,ignoreFonts:!1,breakPages:!0,debug:!1,experimental:!1,className:"docx",inWrapper:!0,hideWrapperOnPrint:!1,trimXmlDeclaration:!0,ignoreLastRenderedPageBreak:!0,renderHeaders:!0,renderFooters:!0,renderFootnotes:!0,renderEndnotes:!0,useBase64URL:!1,renderChanges:!1,renderComments:!1,renderAltChunks:!0};function dog(t,I){const g={...ED,...I};return UD.load(t,new Aog(g),g)}async function rog(t,I,g,C){const i={...ED,...C};return await new oog(window.document).render(t,I,g,i)}async function hog(t,I,g,C){const i=await dog(t,C);return await rog(i,I,g,C),i}var sm={};sm.d=(t,I)=>{for(var g in I)sm.o(I,g)&&!sm.o(t,g)&&Object.defineProperty(t,g,{enumerable:!0,get:I[g]})};sm.o=(t,I)=>Object.prototype.hasOwnProperty.call(t,I);var GI=globalThis.pdfjsLib={};sm.d(GI,{AbortException:()=>za,AnnotationEditorLayer:()=>vS,AnnotationEditorParamsType:()=>gC,AnnotationEditorType:()=>RI,AnnotationEditorUIManager:()=>td,AnnotationLayer:()=>uS,AnnotationMode:()=>qn,AnnotationType:()=>lt,ColorPicker:()=>QN,DOMSVGFactory:()=>xN,DrawLayer:()=>jS,FeatureTest:()=>gi,GlobalWorkerOptions:()=>Kl,ImageKind:()=>EY,InvalidPDFException:()=>fX,MathClamp:()=>Wi,OPS:()=>JN,OutputScale:()=>jl,PDFDataRangeTransport:()=>dgg,PDFDateString:()=>g9,PDFWorker:()=>Ch,PasswordResponses:()=>mog,PermissionFlag:()=>uog,PixelsPerInch:()=>Ja,RenderingCancelledException:()=>qD,ResponseException:()=>LN,SignatureExtractor:()=>Fl,SupportedImageMimeTypes:()=>XX,TextLayer:()=>mm,TouchManager:()=>TN,Util:()=>iI,VerbosityLevel:()=>DV,XfaLayer:()=>hgg,build:()=>Jcg,createValidAbsoluteUrl:()=>pog,fetchData:()=>OZ,getDocument:()=>Mcg,getFilenameFromUrl:()=>fog,getPdfFilenameFromUrl:()=>Hog,getUuid:()=>d$,getXfaPageViewport:()=>Xog,isDataScheme:()=>kV,isPdfFile:()=>$D,isValidExplicitDest:()=>Xcg,noContextMenu:()=>MA,normalizeUnicode:()=>Vog,setLayerDimensions:()=>Cd,shadow:()=>jI,stopEvent:()=>at,version:()=>zcg});const Ot=typeof process=="object"&&process+""=="[object process]"&&!process.versions.nw&&!(process.versions.electron&&process.type&&process.type!=="browser"),o$=[1,0,0,1,0,0],RX=[.001,0,0,.001,0,0],YH=1.35,be={ANY:1,DISPLAY:2,PRINT:4,ANNOTATIONS_FORMS:16,ANNOTATIONS_STORAGE:32,ANNOTATIONS_DISABLE:64,IS_EDITING:128,OPLIST:256},qn={DISABLE:0,ENABLE:1,ENABLE_FORMS:2,ENABLE_STORAGE:3},bog="pdfjs_internal_editor_",RI={DISABLE:-1,NONE:0,FREETEXT:3,HIGHLIGHT:9,STAMP:13,INK:15,SIGNATURE:101},gC={RESIZE:1,CREATE:2,FREETEXT_SIZE:11,FREETEXT_COLOR:12,FREETEXT_OPACITY:13,INK_COLOR:21,INK_THICKNESS:22,INK_OPACITY:23,HIGHLIGHT_COLOR:31,HIGHLIGHT_DEFAULT_COLOR:32,HIGHLIGHT_THICKNESS:33,HIGHLIGHT_FREE:34,HIGHLIGHT_SHOW_ALL:35,DRAW_STEP:41},uog={PRINT:4,MODIFY_CONTENTS:8,COPY:16,MODIFY_ANNOTATIONS:32,FILL_INTERACTIVE_FORMS:256,COPY_FOR_ACCESSIBILITY:512,ASSEMBLE:1024,PRINT_HIGH_QUALITY:2048},ni={FILL:0,STROKE:1,FILL_STROKE:2,INVISIBLE:3,FILL_STROKE_MASK:3,ADD_TO_PATH_FLAG:4},EY={GRAYSCALE_1BPP:1,RGB_24BPP:2,RGBA_32BPP:3},lt={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},Kr={SOLID:1,DASHED:2,BEVELED:3,INSET:4,UNDERLINE:5},DV={ERRORS:0,WARNINGS:1,INFOS:5},JN={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,setStrokeTransparent:92,setFillTransparent:93},pY={moveTo:0,lineTo:1,curveTo:2,closePath:3},mog={NEED_PASSWORD:1,INCORRECT_PASSWORD:2};let KV=DV.WARNINGS;function Zog(t){Number.isInteger(t)&&(KV=t)}function Gog(){return KV}function FV(t){KV>=DV.INFOS&&console.log(`Info: ${t}`)}function HI(t){KV>=DV.WARNINGS&&console.log(`Warning: ${t}`)}function ZC(t){throw new Error(t)}function ct(t,I){t||ZC(I)}function wog(t){switch(t==null?void 0:t.protocol){case"http:":case"https:":case"ftp:":case"mailto:":case"tel:":return!0;default:return!1}}function pog(t,I=null,g=null){if(!t)return null;if(g&&typeof t=="string"){if(g.addDefaultProtocol&&t.startsWith("www.")){const i=t.match(/\./g);(i==null?void 0:i.length)>=2&&(t=`http://${t}`)}if(g.tryConvertEncoding)try{t=Nog(t)}catch{}}const C=I?URL.parse(t,I):URL.parse(t);return wog(C)?C:null}function jI(t,I,g,C=!1){return Object.defineProperty(t,I,{value:g,enumerable:!C,configurable:!0,writable:!1}),g}const sd=function(){function I(g,C){this.message=g,this.name=C}return I.prototype=new Error,I.constructor=I,I}();class K6 extends sd{constructor(I,g){super(I,"PasswordException"),this.code=g}}class NH extends sd{constructor(I,g){super(I,"UnknownErrorException"),this.details=g}}class fX extends sd{constructor(I){super(I,"InvalidPDFException")}}class LN extends sd{constructor(I,g,C){super(I,"ResponseException"),this.status=g,this.missing=C}}class Bog extends sd{constructor(I){super(I,"FormatError")}}class za extends sd{constructor(I){super(I,"AbortException")}}function c$(t){(typeof t!="object"||(t==null?void 0:t.length)===void 0)&&ZC("Invalid argument for bytesToString");const I=t.length,g=8192;if(I<g)return String.fromCharCode.apply(null,t);const C=[];for(let i=0;i<I;i+=g){const e=Math.min(i+g,I),A=t.subarray(i,e);C.push(String.fromCharCode.apply(null,A))}return C.join("")}function QZ(t){typeof t!="string"&&ZC("Invalid argument for stringToBytes");const I=t.length,g=new Uint8Array(I);for(let C=0;C<I;++C)g[C]=t.charCodeAt(C)&255;return g}function Wog(t){return String.fromCharCode(t>>24&255,t>>16&255,t>>8&255,t&255)}function PD(t){const I=Object.create(null);for(const[g,C]of t)I[g]=C;return I}function yog(){const t=new Uint8Array(4);return t[0]=1,new Uint32Array(t.buffer,0,1)[0]===1}function Yog(){try{return new Function(""),!0}catch{return!1}}class gi{static get isLittleEndian(){return jI(this,"isLittleEndian",yog())}static get isEvalSupported(){return jI(this,"isEvalSupported",Yog())}static get isOffscreenCanvasSupported(){return jI(this,"isOffscreenCanvasSupported",typeof OffscreenCanvas<"u")}static get isImageDecoderSupported(){return jI(this,"isImageDecoderSupported",typeof ImageDecoder<"u")}static get platform(){if(typeof navigator<"u"&&typeof(navigator==null?void 0:navigator.platform)=="string"&&typeof(navigator==null?void 0:navigator.userAgent)=="string"){const{platform:I,userAgent:g}=navigator;return jI(this,"platform",{isAndroid:g.includes("Android"),isLinux:I.includes("Linux"),isMac:I.includes("Mac"),isWindows:I.includes("Win"),isFirefox:g.includes("Firefox")})}return jI(this,"platform",{isAndroid:!1,isLinux:!1,isMac:!1,isWindows:!1,isFirefox:!1})}static get isCSSRoundSupported(){var I,g;return jI(this,"isCSSRoundSupported",(g=(I=globalThis.CSS)==null?void 0:I.supports)==null?void 0:g.call(I,"width: round(1.5px, 1px)"))}}const VH=Array.from(Array(256).keys(),t=>t.toString(16).padStart(2,"0"));var Tl,PY,HX;class iI{static makeHexColor(I,g,C){return`#${VH[I]}${VH[g]}${VH[C]}`}static transform(I,g){return[I[0]*g[0]+I[2]*g[1],I[1]*g[0]+I[3]*g[1],I[0]*g[2]+I[2]*g[3],I[1]*g[2]+I[3]*g[3],I[0]*g[4]+I[2]*g[5]+I[4],I[1]*g[4]+I[3]*g[5]+I[5]]}static applyTransform(I,g){const C=I[0]*g[0]+I[1]*g[2]+g[4],i=I[0]*g[1]+I[1]*g[3]+g[5];return[C,i]}static applyInverseTransform(I,g){const C=g[0]*g[3]-g[1]*g[2],i=(I[0]*g[3]-I[1]*g[2]+g[2]*g[5]-g[4]*g[3])/C,e=(-I[0]*g[1]+I[1]*g[0]+g[4]*g[1]-g[5]*g[0])/C;return[i,e]}static getAxialAlignedBoundingBox(I,g){const C=this.applyTransform(I,g),i=this.applyTransform(I.slice(2,4),g),e=this.applyTransform([I[0],I[3]],g),A=this.applyTransform([I[2],I[1]],g);return[Math.min(C[0],i[0],e[0],A[0]),Math.min(C[1],i[1],e[1],A[1]),Math.max(C[0],i[0],e[0],A[0]),Math.max(C[1],i[1],e[1],A[1])]}static inverseTransform(I){const g=I[0]*I[3]-I[1]*I[2];return[I[3]/g,-I[1]/g,-I[2]/g,I[0]/g,(I[2]*I[5]-I[4]*I[3])/g,(I[4]*I[1]-I[5]*I[0])/g]}static singularValueDecompose2dScale(I){const g=[I[0],I[2],I[1],I[3]],C=I[0]*g[0]+I[1]*g[2],i=I[0]*g[1]+I[1]*g[3],e=I[2]*g[0]+I[3]*g[2],A=I[2]*g[1]+I[3]*g[3],s=(C+A)/2,l=Math.sqrt((C+A)**2-4*(C*A-e*i))/2,n=s+l||1,a=s-l||1;return[Math.sqrt(n),Math.sqrt(a)]}static normalizeRect(I){const g=I.slice(0);return I[0]>I[2]&&(g[0]=I[2],g[2]=I[0]),I[1]>I[3]&&(g[1]=I[3],g[3]=I[1]),g}static intersect(I,g){const C=Math.max(Math.min(I[0],I[2]),Math.min(g[0],g[2])),i=Math.min(Math.max(I[0],I[2]),Math.max(g[0],g[2]));if(C>i)return null;const e=Math.max(Math.min(I[1],I[3]),Math.min(g[1],g[3])),A=Math.min(Math.max(I[1],I[3]),Math.max(g[1],g[3]));return e>A?null:[C,e,i,A]}static pointBoundingBox(I,g,C){C[0]=Math.min(C[0],I),C[1]=Math.min(C[1],g),C[2]=Math.max(C[2],I),C[3]=Math.max(C[3],g)}static rectBoundingBox(I,g,C,i,e){e[0]=Math.min(e[0],I,C),e[1]=Math.min(e[1],g,i),e[2]=Math.max(e[2],I,C),e[3]=Math.max(e[3],g,i)}static bezierBoundingBox(I,g,C,i,e,A,s,l,n){n[0]=Math.min(n[0],I,s),n[1]=Math.min(n[1],g,l),n[2]=Math.max(n[2],I,s),n[3]=Math.max(n[3],g,l),eg(this,Tl,HX).call(this,I,C,e,s,g,i,A,l,3*(-I+3*(C-e)+s),6*(I-2*C+e),3*(C-I),n),eg(this,Tl,HX).call(this,I,C,e,s,g,i,A,l,3*(-g+3*(i-A)+l),6*(g-2*i+A),3*(i-g),n)}}Tl=new WeakSet,PY=function(I,g,C,i,e,A,s,l,n,a){if(n<=0||n>=1)return;const d=1-n,o=n*n,c=o*n,r=d*(d*(d*I+3*n*g)+3*o*C)+c*i,h=d*(d*(d*e+3*n*A)+3*o*s)+c*l;a[0]=Math.min(a[0],r),a[1]=Math.min(a[1],h),a[2]=Math.max(a[2],r),a[3]=Math.max(a[3],h)},HX=function(I,g,C,i,e,A,s,l,n,a,d,o){if(Math.abs(n)<1e-12){Math.abs(a)>=1e-12&&eg(this,Tl,PY).call(this,I,g,C,i,e,A,s,l,-d/a,o);return}const c=a**2-4*d*n;if(c<0)return;const r=Math.sqrt(c),h=2*n;eg(this,Tl,PY).call(this,I,g,C,i,e,A,s,l,(-a+r)/h,o),eg(this,Tl,PY).call(this,I,g,C,i,e,A,s,l,(-a-r)/h,o)},ig(iI,Tl);function Nog(t){return decodeURIComponent(escape(t))}let MH=null,F6=null;function Vog(t){return MH||(MH=/([\u00a0\u00b5\u037e\u0eb3\u2000-\u200a\u202f\u2126\ufb00-\ufb04\ufb06\ufb20-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufba1\ufba4-\ufba9\ufbae-\ufbb1\ufbd3-\ufbdc\ufbde-\ufbe7\ufbea-\ufbf8\ufbfc-\ufbfd\ufc00-\ufc5d\ufc64-\ufcf1\ufcf5-\ufd3d\ufd88\ufdf4\ufdfa-\ufdfb\ufe71\ufe77\ufe79\ufe7b\ufe7d]+)|(\ufb05+)/gu,F6=new Map([["ſt","ſt"]])),t.replaceAll(MH,(I,g,C)=>g?g.normalize("NFKC"):F6.get(C))}function d$(){if(typeof crypto.randomUUID=="function")return crypto.randomUUID();const t=new Uint8Array(32);return crypto.getRandomValues(t),c$(t)}const _D="pdfjs_internal_id_";function Mog(t,I,g){if(!Array.isArray(g)||g.length<2)return!1;const[C,i,...e]=g;if(!t(C)&&!Number.isInteger(C)||!I(i))return!1;const A=e.length;let s=!0;switch(i.name){case"XYZ":if(A<2||A>3)return!1;break;case"Fit":case"FitB":return A===0;case"FitH":case"FitBH":case"FitV":case"FitBV":if(A>1)return!1;break;case"FitR":if(A!==4)return!1;s=!1;break;default:return!1}for(const l of e)if(!(typeof l=="number"||s&&l===null))return!1;return!0}function Wi(t,I,g){return Math.min(Math.max(t,I),g)}function r$(t){return Uint8Array.prototype.toBase64?t.toBase64():btoa(c$(t))}function Rog(t){return Uint8Array.fromBase64?Uint8Array.fromBase64(t):QZ(atob(t))}typeof Promise.try!="function"&&(Promise.try=function(t,...I){return new Promise(g=>{g(t(...I))})});typeof Math.sumPrecise!="function"&&(Math.sumPrecise=function(t){return t.reduce((I,g)=>I+g,0)});const tl="http://www.w3.org/2000/svg",Lo=class Lo{};CI(Lo,"CSS",96),CI(Lo,"PDF",72),CI(Lo,"PDF_TO_CSS_UNITS",Lo.CSS/Lo.PDF);let Ja=Lo;async function OZ(t,I="text"){if(Fr(t,document.baseURI)){const g=await fetch(t);if(!g.ok)throw new Error(g.statusText);switch(I){case"arraybuffer":return g.arrayBuffer();case"blob":return g.blob();case"json":return g.json()}return g.text()}return new Promise((g,C)=>{const i=new XMLHttpRequest;i.open("GET",t,!0),i.responseType=I,i.onreadystatechange=()=>{if(i.readyState===XMLHttpRequest.DONE){if(i.status===200||i.status===0){switch(I){case"arraybuffer":case"blob":case"json":g(i.response);return}g(i.responseText);return}C(new Error(i.statusText))}},i.send(null)})}class UZ{constructor({viewBox:I,userUnit:g,scale:C,rotation:i,offsetX:e=0,offsetY:A=0,dontFlip:s=!1}){this.viewBox=I,this.userUnit=g,this.scale=C,this.rotation=i,this.offsetX=e,this.offsetY=A,C*=g;const l=(I[2]+I[0])/2,n=(I[3]+I[1])/2;let a,d,o,c;switch(i%=360,i<0&&(i+=360),i){case 180:a=-1,d=0,o=0,c=1;break;case 90:a=0,d=1,o=1,c=0;break;case 270:a=0,d=-1,o=-1,c=0;break;case 0:a=1,d=0,o=0,c=-1;break;default:throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees.")}s&&(o=-o,c=-c);let r,h,b,u;a===0?(r=Math.abs(n-I[1])*C+e,h=Math.abs(l-I[0])*C+A,b=(I[3]-I[1])*C,u=(I[2]-I[0])*C):(r=Math.abs(l-I[0])*C+e,h=Math.abs(n-I[1])*C+A,b=(I[2]-I[0])*C,u=(I[3]-I[1])*C),this.transform=[a*C,d*C,o*C,c*C,r-a*C*l-o*C*n,h-d*C*l-c*C*n],this.width=b,this.height=u}get rawDims(){const I=this.viewBox;return jI(this,"rawDims",{pageWidth:I[2]-I[0],pageHeight:I[3]-I[1],pageX:I[0],pageY:I[1]})}clone({scale:I=this.scale,rotation:g=this.rotation,offsetX:C=this.offsetX,offsetY:i=this.offsetY,dontFlip:e=!1}={}){return new UZ({viewBox:this.viewBox.slice(),userUnit:this.userUnit,scale:I,rotation:g,offsetX:C,offsetY:i,dontFlip:e})}convertToViewportPoint(I,g){return iI.applyTransform([I,g],this.transform)}convertToViewportRectangle(I){const g=iI.applyTransform([I[0],I[1]],this.transform),C=iI.applyTransform([I[2],I[3]],this.transform);return[g[0],g[1],C[0],C[1]]}convertToPdfPoint(I,g){return iI.applyInverseTransform([I,g],this.transform)}}class qD extends sd{constructor(I,g=0){super(I,"RenderingCancelledException"),this.extraDelay=g}}function kV(t){const I=t.length;let g=0;for(;g<I&&t[g].trim()==="";)g++;return t.substring(g,g+5).toLowerCase()==="data:"}function $D(t){return typeof t=="string"&&/\.pdf$/i.test(t)}function fog(t){return[t]=t.split(/[#?]/,1),t.substring(t.lastIndexOf("/")+1)}function Hog(t,I="document.pdf"){if(typeof t!="string")return I;if(kV(t))return HI('getPdfFilenameFromUrl: ignore "data:"-URL for performance reasons.'),I;const g=/^(?:(?:[^:]+:)?\/\/[^/]+)?([^?#]*)(\?[^#]*)?(#.*)?$/,C=/[^/?#=]+\.pdf\b(?!.*\.pdf\b)/i,i=g.exec(t);let e=C.exec(i[1])||C.exec(i[2])||C.exec(i[3]);if(e&&(e=e[0],e.includes("%")))try{e=C.exec(decodeURIComponent(e))[0]}catch{}return e||I}class k6{constructor(){CI(this,"started",Object.create(null));CI(this,"times",[])}time(I){I in this.started&&HI(`Timer is already running for ${I}`),this.started[I]=Date.now()}timeEnd(I){I in this.started||HI(`Timer has not been started for ${I}`),this.times.push({name:I,start:this.started[I],end:Date.now()}),delete this.started[I]}toString(){const I=[];let g=0;for(const{name:C}of this.times)g=Math.max(C.length,g);for(const{name:C,start:i,end:e}of this.times)I.push(`${C.padEnd(g)} ${e-i}ms
- `);return I.join("")}}function Fr(t,I){const g=I?URL.parse(t,I):URL.parse(t);return(g==null?void 0:g.protocol)==="http:"||(g==null?void 0:g.protocol)==="https:"}function MA(t){t.preventDefault()}function at(t){t.preventDefault(),t.stopPropagation()}var Bm;class g9{static toDateObject(I){if(!I||typeof I!="string")return null;M(this,Bm)||$(this,Bm,new RegExp("^D:(\\d{4})(\\d{2})?(\\d{2})?(\\d{2})?(\\d{2})?(\\d{2})?([Z|+|-])?(\\d{2})?'?(\\d{2})?'?"));const g=M(this,Bm).exec(I);if(!g)return null;const C=parseInt(g[1],10);let i=parseInt(g[2],10);i=i>=1&&i<=12?i-1:0;let e=parseInt(g[3],10);e=e>=1&&e<=31?e:1;let A=parseInt(g[4],10);A=A>=0&&A<=23?A:0;let s=parseInt(g[5],10);s=s>=0&&s<=59?s:0;let l=parseInt(g[6],10);l=l>=0&&l<=59?l:0;const n=g[7]||"Z";let a=parseInt(g[8],10);a=a>=0&&a<=23?a:0;let d=parseInt(g[9],10)||0;return d=d>=0&&d<=59?d:0,n==="-"?(A+=a,s+=d):n==="+"&&(A-=a,s-=d),new Date(Date.UTC(C,i,e,A,s,l))}}Bm=new WeakMap,ig(g9,Bm);function Xog(t,{scale:I=1,rotation:g=0}){const{width:C,height:i}=t.attributes.style,e=[0,0,parseInt(C),parseInt(i)];return new UZ({viewBox:e,userUnit:1,scale:I,rotation:g})}function I9(t){if(t.startsWith("#")){const I=parseInt(t.slice(1),16);return[(I&16711680)>>16,(I&65280)>>8,I&255]}return t.startsWith("rgb(")?t.slice(4,-1).split(",").map(I=>parseInt(I)):t.startsWith("rgba(")?t.slice(5,-1).split(",").map(I=>parseInt(I)).slice(0,3):(HI(`Not a valid color format: "${t}"`),[0,0,0])}function Sog(t){const I=document.createElement("span");I.style.visibility="hidden",document.body.append(I);for(const g of t.keys()){I.style.color=g;const C=window.getComputedStyle(I).color;t.set(g,I9(C))}I.remove()}function DC(t){const{a:I,b:g,c:C,d:i,e,f:A}=t.getTransform();return[I,g,C,i,e,A]}function _A(t){const{a:I,b:g,c:C,d:i,e,f:A}=t.getTransform().invertSelf();return[I,g,C,i,e,A]}function Cd(t,I,g=!1,C=!0){if(I instanceof UZ){const{pageWidth:i,pageHeight:e}=I.rawDims,{style:A}=t,s=gi.isCSSRoundSupported,l=`var(--total-scale-factor) * ${i}px`,n=`var(--total-scale-factor) * ${e}px`,a=s?`round(down, ${l}, var(--scale-round-x))`:`calc(${l})`,d=s?`round(down, ${n}, var(--scale-round-y))`:`calc(${n})`;!g||I.rotation%180===0?(A.width=a,A.height=d):(A.width=d,A.height=a)}C&&t.setAttribute("data-main-rotation",I.rotation)}class jl{constructor(){const{pixelRatio:I}=jl;this.sx=I,this.sy=I}get scaled(){return this.sx!==1||this.sy!==1}get symmetric(){return this.sx===this.sy}limitCanvas(I,g,C,i){let e=1/0,A=1/0,s=1/0;C>0&&(e=Math.sqrt(C/(I*g))),i!==-1&&(A=i/I,s=i/g);const l=Math.min(e,A,s);return this.sx>l||this.sy>l?(this.sx=l,this.sy=l,!0):!1}static get pixelRatio(){return globalThis.devicePixelRatio||1}}const XX=["image/apng","image/avif","image/bmp","image/gif","image/jpeg","image/png","image/svg+xml","image/webp","image/x-icon"];var ga,Qo,Ke,Ia,Wm,lh,ym,bV,h$,$t,b$,u$,Hu,m$,_Y;const sl=class sl{constructor(I){ig(this,$t);ig(this,ga,null);ig(this,Qo,null);ig(this,Ke);ig(this,Ia,null);ig(this,Wm,null);ig(this,lh,null);$(this,Ke,I),M(sl,ym)||$(sl,ym,Object.freeze({freetext:"pdfjs-editor-remove-freetext-button",highlight:"pdfjs-editor-remove-highlight-button",ink:"pdfjs-editor-remove-ink-button",stamp:"pdfjs-editor-remove-stamp-button",signature:"pdfjs-editor-remove-signature-button"}))}render(){const I=$(this,ga,document.createElement("div"));I.classList.add("editToolbar","hidden"),I.setAttribute("role","toolbar");const g=M(this,Ke)._uiManager._signal;I.addEventListener("contextmenu",MA,{signal:g}),I.addEventListener("pointerdown",eg(sl,bV,h$),{signal:g});const C=$(this,Ia,document.createElement("div"));C.className="buttons",I.append(C);const i=M(this,Ke).toolbarPosition;if(i){const{style:e}=I,A=M(this,Ke)._uiManager.direction==="ltr"?1-i[0]:i[0];e.insetInlineEnd=`${100*A}%`,e.top=`calc(${100*i[1]}% + var(--editor-toolbar-vert-offset))`}return eg(this,$t,m$).call(this),I}get div(){return M(this,ga)}hide(){var I;M(this,ga).classList.add("hidden"),(I=M(this,Qo))==null||I.hideDropdown()}show(){var I;M(this,ga).classList.remove("hidden"),(I=M(this,Wm))==null||I.shown()}async addAltText(I){const g=await I.render();eg(this,$t,Hu).call(this,g),M(this,Ia).prepend(g,M(this,$t,_Y)),$(this,Wm,I)}addColorPicker(I){$(this,Qo,I);const g=I.renderButton();eg(this,$t,Hu).call(this,g),M(this,Ia).prepend(g,M(this,$t,_Y))}async addEditSignatureButton(I){const g=$(this,lh,await I.renderEditButton(M(this,Ke)));eg(this,$t,Hu).call(this,g),M(this,Ia).prepend(g,M(this,$t,_Y))}updateEditSignatureButton(I){M(this,lh)&&(M(this,lh).title=I)}remove(){var I;M(this,ga).remove(),(I=M(this,Qo))==null||I.destroy(),$(this,Qo,null)}};ga=new WeakMap,Qo=new WeakMap,Ke=new WeakMap,Ia=new WeakMap,Wm=new WeakMap,lh=new WeakMap,ym=new WeakMap,bV=new WeakSet,h$=function(I){I.stopPropagation()},$t=new WeakSet,b$=function(I){M(this,Ke)._focusEventsAllowed=!1,at(I)},u$=function(I){M(this,Ke)._focusEventsAllowed=!0,at(I)},Hu=function(I){const g=M(this,Ke)._uiManager._signal;I.addEventListener("focusin",eg(this,$t,b$).bind(this),{capture:!0,signal:g}),I.addEventListener("focusout",eg(this,$t,u$).bind(this),{capture:!0,signal:g}),I.addEventListener("contextmenu",MA,{signal:g})},m$=function(){const{editorType:I,_uiManager:g}=M(this,Ke),C=document.createElement("button");C.className="delete",C.tabIndex=0,C.setAttribute("data-l10n-id",M(sl,ym)[I]),eg(this,$t,Hu).call(this,C),C.addEventListener("click",i=>{g.delete()},{signal:g._signal}),M(this,Ia).append(C)},_Y=function(){const I=document.createElement("div");return I.className="divider",I},ig(sl,bV),ig(sl,ym,null);let SX=sl;var Ym,Oo,Uo,va,Z$,G$,w$;class Dog{constructor(I){ig(this,va);ig(this,Ym,null);ig(this,Oo,null);ig(this,Uo);$(this,Uo,I)}show(I,g,C){const[i,e]=eg(this,va,G$).call(this,g,C),{style:A}=M(this,Oo)||$(this,Oo,eg(this,va,Z$).call(this));I.append(M(this,Oo)),A.insetInlineEnd=`${100*i}%`,A.top=`calc(${100*e}% + var(--editor-toolbar-vert-offset))`}hide(){M(this,Oo).remove()}}Ym=new WeakMap,Oo=new WeakMap,Uo=new WeakMap,va=new WeakSet,Z$=function(){const I=$(this,Oo,document.createElement("div"));I.className="editToolbar",I.setAttribute("role","toolbar"),I.addEventListener("contextmenu",MA,{signal:M(this,Uo)._signal});const g=$(this,Ym,document.createElement("div"));return g.className="buttons",I.append(g),eg(this,va,w$).call(this),I},G$=function(I,g){let C=0,i=0;for(const e of I){const A=e.y+e.height;if(A<C)continue;const s=e.x+(g?e.width:0);if(A>C){i=s,C=A;continue}g?s>i&&(i=s):s<i&&(i=s)}return[g?1-i:i,C]},w$=function(){const I=document.createElement("button");I.className="highlightButton",I.tabIndex=0,I.setAttribute("data-l10n-id","pdfjs-highlight-floating-button1");const g=document.createElement("span");I.append(g),g.className="visuallyHidden",g.setAttribute("data-l10n-id","pdfjs-highlight-floating-button-label");const C=M(this,Uo)._signal;I.addEventListener("contextmenu",MA,{signal:C}),I.addEventListener("click",()=>{M(this,Uo).highlightSelection("floating_button")},{signal:C}),M(this,Ym).append(I)};function C9(t,I,g){for(const C of g)I.addEventListener(C,t[C].bind(t))}var uV;class Kog{constructor(){ig(this,uV,0)}get id(){return`${bog}${ui(this,uV)._++}`}}uV=new WeakMap;var nh,Nm,oi,ah,qY;const L9=class L9{constructor(){ig(this,ah);ig(this,nh,d$());ig(this,Nm,0);ig(this,oi,null)}static get _isSVGFittingCanvas(){const I='data:image/svg+xml;charset=UTF-8,<svg viewBox="0 0 1 1" width="1" height="1" xmlns="http://www.w3.org/2000/svg"><rect width="1" height="1" style="fill:red;"/></svg>',C=new OffscreenCanvas(1,3).getContext("2d",{willReadFrequently:!0}),i=new Image;i.src=I;const e=i.decode().then(()=>(C.drawImage(i,0,0,1,1,0,0,1,3),new Uint32Array(C.getImageData(0,0,1,1).data.buffer)[0]===0));return jI(this,"_isSVGFittingCanvas",e)}async getFromFile(I){const{lastModified:g,name:C,size:i,type:e}=I;return eg(this,ah,qY).call(this,`${g}_${C}_${i}_${e}`,I)}async getFromUrl(I){return eg(this,ah,qY).call(this,I,I)}async getFromBlob(I,g){const C=await g;return eg(this,ah,qY).call(this,I,C)}async getFromId(I){M(this,oi)||$(this,oi,new Map);const g=M(this,oi).get(I);if(!g)return null;if(g.bitmap)return g.refCounter+=1,g;if(g.file)return this.getFromFile(g.file);if(g.blobPromise){const{blobPromise:C}=g;return delete g.blobPromise,this.getFromBlob(g.id,C)}return this.getFromUrl(g.url)}getFromCanvas(I,g){M(this,oi)||$(this,oi,new Map);let C=M(this,oi).get(I);if(C!=null&&C.bitmap)return C.refCounter+=1,C;const i=new OffscreenCanvas(g.width,g.height);return i.getContext("2d").drawImage(g,0,0),C={bitmap:i.transferToImageBitmap(),id:`image_${M(this,nh)}_${ui(this,Nm)._++}`,refCounter:1,isSvg:!1},M(this,oi).set(I,C),M(this,oi).set(C.id,C),C}getSvgUrl(I){const g=M(this,oi).get(I);return g!=null&&g.isSvg?g.svgUrl:null}deleteId(I){var i;M(this,oi)||$(this,oi,new Map);const g=M(this,oi).get(I);if(!g||(g.refCounter-=1,g.refCounter!==0))return;const{bitmap:C}=g;if(!g.url&&!g.file){const e=new OffscreenCanvas(C.width,C.height);e.getContext("bitmaprenderer").transferFromImageBitmap(C),g.blobPromise=e.convertToBlob()}(i=C.close)==null||i.call(C),g.bitmap=null}isValidId(I){return I.startsWith(`image_${M(this,nh)}_`)}};nh=new WeakMap,Nm=new WeakMap,oi=new WeakMap,ah=new WeakSet,qY=async function(I,g){M(this,oi)||$(this,oi,new Map);let C=M(this,oi).get(I);if(C===null)return null;if(C!=null&&C.bitmap)return C.refCounter+=1,C;try{C||(C={bitmap:null,id:`image_${M(this,nh)}_${ui(this,Nm)._++}`,refCounter:0,isSvg:!1});let i;if(typeof g=="string"?(C.url=g,i=await OZ(g,"blob")):g instanceof File?i=C.file=g:g instanceof Blob&&(i=g),i.type==="image/svg+xml"){const e=L9._isSVGFittingCanvas,A=new FileReader,s=new Image,l=new Promise((n,a)=>{s.onload=()=>{C.bitmap=s,C.isSvg=!0,n()},A.onload=async()=>{const d=C.svgUrl=A.result;s.src=await e?`${d}#svgView(preserveAspectRatio(none))`:d},s.onerror=A.onerror=a});A.readAsDataURL(i),await l}else C.bitmap=await createImageBitmap(i);C.refCounter=1}catch(i){HI(i),C=null}return M(this,oi).set(I,C),C&&M(this,oi).set(C.id,C),C};let DX=L9;var gt,Ca,Vm,jC;class Fog{constructor(I=128){ig(this,gt,[]);ig(this,Ca,!1);ig(this,Vm);ig(this,jC,-1);$(this,Vm,I)}add({cmd:I,undo:g,post:C,mustExec:i,type:e=NaN,overwriteIfSameType:A=!1,keepUndo:s=!1}){if(i&&I(),M(this,Ca))return;const l={cmd:I,undo:g,post:C,type:e};if(M(this,jC)===-1){M(this,gt).length>0&&(M(this,gt).length=0),$(this,jC,0),M(this,gt).push(l);return}if(A&&M(this,gt)[M(this,jC)].type===e){s&&(l.undo=M(this,gt)[M(this,jC)].undo),M(this,gt)[M(this,jC)]=l;return}const n=M(this,jC)+1;n===M(this,Vm)?M(this,gt).splice(0,1):($(this,jC,n),n<M(this,gt).length&&M(this,gt).splice(n)),M(this,gt).push(l)}undo(){if(M(this,jC)===-1)return;$(this,Ca,!0);const{undo:I,post:g}=M(this,gt)[M(this,jC)];I(),g==null||g(),$(this,Ca,!1),$(this,jC,M(this,jC)-1)}redo(){if(M(this,jC)<M(this,gt).length-1){$(this,jC,M(this,jC)+1),$(this,Ca,!0);const{cmd:I,post:g}=M(this,gt)[M(this,jC)];I(),g==null||g(),$(this,Ca,!1)}}hasSomethingToUndo(){return M(this,jC)!==-1}hasSomethingToRedo(){return M(this,jC)<M(this,gt).length-1}cleanType(I){if(M(this,jC)!==-1){for(let g=M(this,jC);g>=0;g--)if(M(this,gt)[g].type!==I){M(this,gt).splice(g+1,M(this,jC)-g),$(this,jC,g);return}M(this,gt).length=0,$(this,jC,-1)}}destroy(){$(this,gt,null)}}gt=new WeakMap,Ca=new WeakMap,Vm=new WeakMap,jC=new WeakMap;var mV,p$;class EZ{constructor(I){ig(this,mV);this.buffer=[],this.callbacks=new Map,this.allKeys=new Set;const{isMac:g}=gi.platform;for(const[C,i,e={}]of I)for(const A of C){const s=A.startsWith("mac+");g&&s?(this.callbacks.set(A.slice(4),{callback:i,options:e}),this.allKeys.add(A.split("+").at(-1))):!g&&!s&&(this.callbacks.set(A,{callback:i,options:e}),this.allKeys.add(A.split("+").at(-1)))}}exec(I,g){if(!this.allKeys.has(g.key))return;const C=this.callbacks.get(eg(this,mV,p$).call(this,g));if(!C)return;const{callback:i,options:{bubbles:e=!1,args:A=[],checker:s=null}}=C;s&&!s(I,g)||(i.bind(I,...A,g)(),e||at(g))}}mV=new WeakSet,p$=function(I){I.altKey&&this.buffer.push("alt"),I.ctrlKey&&this.buffer.push("ctrl"),I.metaKey&&this.buffer.push("meta"),I.shiftKey&&this.buffer.push("shift"),this.buffer.push(I.key);const g=this.buffer.join("+");return this.buffer.length=0,g};const ZV=class ZV{get _colors(){const I=new Map([["CanvasText",null],["Canvas",null]]);return Sog(I),jI(this,"_colors",I)}convert(I){const g=I9(I);if(!window.matchMedia("(forced-colors: active)").matches)return g;for(const[C,i]of this._colors)if(i.every((e,A)=>e===g[A]))return ZV._colorsMapping.get(C);return g}getHexCode(I){const g=this._colors.get(I);return g?iI.makeHexColor(...g):I}};CI(ZV,"_colorsMapping",new Map([["CanvasText",[0,0,0]],["Canvas",[255,255,255]]]));let KX=ZV;var oh,te,mt,Tt,ch,nl,dh,Fe,ta,Eo,rh,Po,As,dA,_o,Mm,Rm,hh,fm,ss,ia,bh,ea,ls,GV,Aa,Hm,sa,qo,$o,la,Xm,Vt,oC,al,na,gc,Sm,Dm,aa,ns,ol,Km,ke,Og,$Y,FX,B$,W$,gN,y$,Y$,N$,kX,V$,zX,JX,M$,Zi,il,R$,f$,LX,H$,Xu,vX;const qr=class qr{constructor(I,g,C,i,e,A,s,l,n,a,d,o,c,r){ig(this,Og);ig(this,oh,new AbortController);ig(this,te,null);ig(this,mt,new Map);ig(this,Tt,new Map);ig(this,ch,null);ig(this,nl,null);ig(this,dh,null);ig(this,Fe,new Fog);ig(this,ta,null);ig(this,Eo,null);ig(this,rh,0);ig(this,Po,new Set);ig(this,As,null);ig(this,dA,null);ig(this,_o,new Set);CI(this,"_editorUndoBar",null);ig(this,Mm,!1);ig(this,Rm,!1);ig(this,hh,!1);ig(this,fm,null);ig(this,ss,null);ig(this,ia,null);ig(this,bh,null);ig(this,ea,!1);ig(this,ls,null);ig(this,GV,new Kog);ig(this,Aa,!1);ig(this,Hm,!1);ig(this,sa,null);ig(this,qo,null);ig(this,$o,null);ig(this,la,null);ig(this,Xm,null);ig(this,Vt,RI.NONE);ig(this,oC,new Set);ig(this,al,null);ig(this,na,null);ig(this,gc,null);ig(this,Sm,null);ig(this,Dm,{isEditing:!1,isEmpty:!0,hasSomethingToUndo:!1,hasSomethingToRedo:!1,hasSelectedEditor:!1,hasSelectedText:!1});ig(this,aa,[0,0]);ig(this,ns,null);ig(this,ol,null);ig(this,Km,null);ig(this,ke,null);const h=this._signal=M(this,oh).signal;$(this,ol,I),$(this,Km,g),$(this,ch,C),$(this,na,i),this._eventBus=e,e._on("editingaction",this.onEditingAction.bind(this),{signal:h}),e._on("pagechanging",this.onPageChanging.bind(this),{signal:h}),e._on("scalechanging",this.onScaleChanging.bind(this),{signal:h}),e._on("rotationchanging",this.onRotationChanging.bind(this),{signal:h}),e._on("setpreference",this.onSetPreference.bind(this),{signal:h}),e._on("switchannotationeditorparams",b=>this.updateParams(b.type,b.value),{signal:h}),eg(this,Og,y$).call(this),eg(this,Og,M$).call(this),eg(this,Og,kX).call(this),$(this,nl,A.annotationStorage),$(this,fm,A.filterFactory),$(this,gc,s),$(this,bh,l||null),$(this,Mm,n),$(this,Rm,a),$(this,hh,d),$(this,Xm,o||null),this.viewParameters={realScale:Ja.PDF_TO_CSS_UNITS,rotation:0},this.isShiftKeyDown=!1,this._editorUndoBar=c||null,this._supportsPinchToZoom=r!==!1}static get _keyboardManager(){const I=qr.prototype,g=A=>M(A,ol).contains(document.activeElement)&&document.activeElement.tagName!=="BUTTON"&&A.hasSomethingToControl(),C=(A,{target:s})=>{if(s instanceof HTMLInputElement){const{type:l}=s;return l!=="text"&&l!=="number"}return!0},i=this.TRANSLATE_SMALL,e=this.TRANSLATE_BIG;return jI(this,"_keyboardManager",new EZ([[["ctrl+a","mac+meta+a"],I.selectAll,{checker:C}],[["ctrl+z","mac+meta+z"],I.undo,{checker:C}],[["ctrl+y","ctrl+shift+z","mac+meta+shift+z","ctrl+shift+Z","mac+meta+shift+Z"],I.redo,{checker:C}],[["Backspace","alt+Backspace","ctrl+Backspace","shift+Backspace","mac+Backspace","mac+alt+Backspace","mac+ctrl+Backspace","Delete","ctrl+Delete","shift+Delete","mac+Delete"],I.delete,{checker:C}],[["Enter","mac+Enter"],I.addNewEditorFromKeyboard,{checker:(A,{target:s})=>!(s instanceof HTMLButtonElement)&&M(A,ol).contains(s)&&!A.isEnterHandled}],[[" ","mac+ "],I.addNewEditorFromKeyboard,{checker:(A,{target:s})=>!(s instanceof HTMLButtonElement)&&M(A,ol).contains(document.activeElement)}],[["Escape","mac+Escape"],I.unselectAll],[["ArrowLeft","mac+ArrowLeft"],I.translateSelectedEditors,{args:[-i,0],checker:g}],[["ctrl+ArrowLeft","mac+shift+ArrowLeft"],I.translateSelectedEditors,{args:[-e,0],checker:g}],[["ArrowRight","mac+ArrowRight"],I.translateSelectedEditors,{args:[i,0],checker:g}],[["ctrl+ArrowRight","mac+shift+ArrowRight"],I.translateSelectedEditors,{args:[e,0],checker:g}],[["ArrowUp","mac+ArrowUp"],I.translateSelectedEditors,{args:[0,-i],checker:g}],[["ctrl+ArrowUp","mac+shift+ArrowUp"],I.translateSelectedEditors,{args:[0,-e],checker:g}],[["ArrowDown","mac+ArrowDown"],I.translateSelectedEditors,{args:[0,i],checker:g}],[["ctrl+ArrowDown","mac+shift+ArrowDown"],I.translateSelectedEditors,{args:[0,e],checker:g}]]))}destroy(){var I,g,C,i,e,A,s,l;(I=M(this,ke))==null||I.resolve(),$(this,ke,null),(g=M(this,oh))==null||g.abort(),$(this,oh,null),this._signal=null;for(const n of M(this,Tt).values())n.destroy();M(this,Tt).clear(),M(this,mt).clear(),M(this,_o).clear(),(C=M(this,la))==null||C.clear(),$(this,te,null),M(this,oC).clear(),M(this,Fe).destroy(),(i=M(this,ch))==null||i.destroy(),(e=M(this,na))==null||e.destroy(),(A=M(this,ls))==null||A.hide(),$(this,ls,null),(s=M(this,$o))==null||s.destroy(),$(this,$o,null),M(this,ss)&&(clearTimeout(M(this,ss)),$(this,ss,null)),M(this,ns)&&(clearTimeout(M(this,ns)),$(this,ns,null)),(l=this._editorUndoBar)==null||l.destroy()}combinedSignal(I){return AbortSignal.any([this._signal,I.signal])}get mlManager(){return M(this,Xm)}get useNewAltTextFlow(){return M(this,Rm)}get useNewAltTextWhenAddingImage(){return M(this,hh)}get hcmFilter(){return jI(this,"hcmFilter",M(this,gc)?M(this,fm).addHCMFilter(M(this,gc).foreground,M(this,gc).background):"none")}get direction(){return jI(this,"direction",getComputedStyle(M(this,ol)).direction)}get highlightColors(){return jI(this,"highlightColors",M(this,bh)?new Map(M(this,bh).split(",").map(I=>I.split("=").map(g=>g.trim()))):null)}get highlightColorNames(){return jI(this,"highlightColorNames",this.highlightColors?new Map(Array.from(this.highlightColors,I=>I.reverse())):null)}setCurrentDrawingSession(I){I?(this.unselectAll(),this.disableUserSelect(!0)):this.disableUserSelect(!1),$(this,Eo,I)}setMainHighlightColorPicker(I){$(this,$o,I)}editAltText(I,g=!1){var C;(C=M(this,ch))==null||C.editAltText(this,I,g)}getSignature(I){var g;(g=M(this,na))==null||g.getSignature({uiManager:this,editor:I})}get signatureManager(){return M(this,na)}switchToMode(I,g){this._eventBus.on("annotationeditormodechanged",g,{once:!0,signal:this._signal}),this._eventBus.dispatch("showannotationeditorui",{source:this,mode:I})}setPreference(I,g){this._eventBus.dispatch("setpreference",{source:this,name:I,value:g})}onSetPreference({name:I,value:g}){switch(I){case"enableNewAltTextWhenAddingImage":$(this,hh,g);break}}onPageChanging({pageNumber:I}){$(this,rh,I-1)}focusMainContainer(){M(this,ol).focus()}findParent(I,g){for(const C of M(this,Tt).values()){const{x:i,y:e,width:A,height:s}=C.div.getBoundingClientRect();if(I>=i&&I<=i+A&&g>=e&&g<=e+s)return C}return null}disableUserSelect(I=!1){M(this,Km).classList.toggle("noUserSelect",I)}addShouldRescale(I){M(this,_o).add(I)}removeShouldRescale(I){M(this,_o).delete(I)}onScaleChanging({scale:I}){var g;this.commitOrRemove(),this.viewParameters.realScale=I*Ja.PDF_TO_CSS_UNITS;for(const C of M(this,_o))C.onScaleChanging();(g=M(this,Eo))==null||g.onScaleChanging()}onRotationChanging({pagesRotation:I}){this.commitOrRemove(),this.viewParameters.rotation=I}highlightSelection(I=""){const g=document.getSelection();if(!g||g.isCollapsed)return;const{anchorNode:C,anchorOffset:i,focusNode:e,focusOffset:A}=g,s=g.toString(),n=eg(this,Og,$Y).call(this,g).closest(".textLayer"),a=this.getSelectionBoxes(n);if(!a)return;g.empty();const d=eg(this,Og,FX).call(this,n),o=M(this,Vt)===RI.NONE,c=()=>{d==null||d.createAndAddNewEditor({x:0,y:0},!1,{methodOfCreation:I,boxes:a,anchorNode:C,anchorOffset:i,focusNode:e,focusOffset:A,text:s}),o&&this.showAllEditors("highlight",!0,!0)};if(o){this.switchToMode(RI.HIGHLIGHT,c);return}c()}addToAnnotationStorage(I){!I.isEmpty()&&M(this,nl)&&!M(this,nl).has(I.id)&&M(this,nl).setValue(I.id,I)}blur(){if(this.isShiftKeyDown=!1,M(this,ea)&&($(this,ea,!1),eg(this,Og,gN).call(this,"main_toolbar")),!this.hasSelection)return;const{activeElement:I}=document;for(const g of M(this,oC))if(g.div.contains(I)){$(this,qo,[g,I]),g._focusEventsAllowed=!1;break}}focus(){if(!M(this,qo))return;const[I,g]=M(this,qo);$(this,qo,null),g.addEventListener("focusin",()=>{I._focusEventsAllowed=!0},{once:!0,signal:this._signal}),g.focus()}addEditListeners(){eg(this,Og,kX).call(this),eg(this,Og,zX).call(this)}removeEditListeners(){eg(this,Og,V$).call(this),eg(this,Og,JX).call(this)}dragOver(I){for(const{type:g}of I.dataTransfer.items)for(const C of M(this,dA))if(C.isHandlingMimeForPasting(g)){I.dataTransfer.dropEffect="copy",I.preventDefault();return}}drop(I){for(const g of I.dataTransfer.items)for(const C of M(this,dA))if(C.isHandlingMimeForPasting(g.type)){C.paste(g,this.currentLayer),I.preventDefault();return}}copy(I){var C;if(I.preventDefault(),(C=M(this,te))==null||C.commitOrRemove(),!this.hasSelection)return;const g=[];for(const i of M(this,oC)){const e=i.serialize(!0);e&&g.push(e)}g.length!==0&&I.clipboardData.setData("application/pdfjs",JSON.stringify(g))}cut(I){this.copy(I),this.delete()}async paste(I){I.preventDefault();const{clipboardData:g}=I;for(const e of g.items)for(const A of M(this,dA))if(A.isHandlingMimeForPasting(e.type)){A.paste(e,this.currentLayer);return}let C=g.getData("application/pdfjs");if(!C)return;try{C=JSON.parse(C)}catch(e){HI(`paste: "${e.message}".`);return}if(!Array.isArray(C))return;this.unselectAll();const i=this.currentLayer;try{const e=[];for(const l of C){const n=await i.deserialize(l);if(!n)return;e.push(n)}const A=()=>{for(const l of e)eg(this,Og,LX).call(this,l);eg(this,Og,vX).call(this,e)},s=()=>{for(const l of e)l.remove()};this.addCommands({cmd:A,undo:s,mustExec:!0})}catch(e){HI(`paste: "${e.message}".`)}}keydown(I){!this.isShiftKeyDown&&I.key==="Shift"&&(this.isShiftKeyDown=!0),M(this,Vt)!==RI.NONE&&!this.isEditorHandlingKeyboard&&qr._keyboardManager.exec(this,I)}keyup(I){this.isShiftKeyDown&&I.key==="Shift"&&(this.isShiftKeyDown=!1,M(this,ea)&&($(this,ea,!1),eg(this,Og,gN).call(this,"main_toolbar")))}onEditingAction({name:I}){switch(I){case"undo":case"redo":case"delete":case"selectAll":this[I]();break;case"highlightSelection":this.highlightSelection("context_menu");break}}setEditingState(I){I?(eg(this,Og,Y$).call(this),eg(this,Og,zX).call(this),eg(this,Og,Zi).call(this,{isEditing:M(this,Vt)!==RI.NONE,isEmpty:eg(this,Og,Xu).call(this),hasSomethingToUndo:M(this,Fe).hasSomethingToUndo(),hasSomethingToRedo:M(this,Fe).hasSomethingToRedo(),hasSelectedEditor:!1})):(eg(this,Og,N$).call(this),eg(this,Og,JX).call(this),eg(this,Og,Zi).call(this,{isEditing:!1}),this.disableUserSelect(!1))}registerEditorTypes(I){if(!M(this,dA)){$(this,dA,I);for(const g of M(this,dA))eg(this,Og,il).call(this,g.defaultPropertiesToUpdate)}}getId(){return M(this,GV).id}get currentLayer(){return M(this,Tt).get(M(this,rh))}getLayer(I){return M(this,Tt).get(I)}get currentPageIndex(){return M(this,rh)}addLayer(I){M(this,Tt).set(I.pageIndex,I),M(this,Aa)?I.enable():I.disable()}removeLayer(I){M(this,Tt).delete(I.pageIndex)}async updateMode(I,g=null,C=!1){var i,e;if(M(this,Vt)!==I&&!(M(this,ke)&&(await M(this,ke).promise,!M(this,ke)))){if($(this,ke,Promise.withResolvers()),$(this,Vt,I),I===RI.NONE){this.setEditingState(!1),eg(this,Og,f$).call(this),(i=this._editorUndoBar)==null||i.hide(),M(this,ke).resolve();return}I===RI.SIGNATURE&&await((e=M(this,na))==null?void 0:e.loadSignatures()),this.setEditingState(!0),await eg(this,Og,R$).call(this),this.unselectAll();for(const A of M(this,Tt).values())A.updateMode(I);if(!g){C&&this.addNewEditorFromKeyboard(),M(this,ke).resolve();return}for(const A of M(this,mt).values())A.annotationElementId===g?(this.setSelected(A),A.enterInEditMode()):A.unselect();M(this,ke).resolve()}}addNewEditorFromKeyboard(){this.currentLayer.canCreateNewEmptyEditor()&&this.currentLayer.addNewEditor()}updateToolbar(I){I!==M(this,Vt)&&this._eventBus.dispatch("switchannotationeditormode",{source:this,mode:I})}updateParams(I,g){var C;if(M(this,dA)){switch(I){case gC.CREATE:this.currentLayer.addNewEditor(g);return;case gC.HIGHLIGHT_DEFAULT_COLOR:(C=M(this,$o))==null||C.updateColor(g);break;case gC.HIGHLIGHT_SHOW_ALL:this._eventBus.dispatch("reporttelemetry",{source:this,details:{type:"editing",data:{type:"highlight",action:"toggle_visibility"}}}),(M(this,Sm)||$(this,Sm,new Map)).set(I,g),this.showAllEditors("highlight",g);break}for(const i of M(this,oC))i.updateParams(I,g);for(const i of M(this,dA))i.updateDefaultParams(I,g)}}showAllEditors(I,g,C=!1){var e;for(const A of M(this,mt).values())A.editorType===I&&A.show(g);(((e=M(this,Sm))==null?void 0:e.get(gC.HIGHLIGHT_SHOW_ALL))??!0)!==g&&eg(this,Og,il).call(this,[[gC.HIGHLIGHT_SHOW_ALL,g]])}enableWaiting(I=!1){if(M(this,Hm)!==I){$(this,Hm,I);for(const g of M(this,Tt).values())I?g.disableClick():g.enableClick(),g.div.classList.toggle("waiting",I)}}getEditors(I){const g=[];for(const C of M(this,mt).values())C.pageIndex===I&&g.push(C);return g}getEditor(I){return M(this,mt).get(I)}addEditor(I){M(this,mt).set(I.id,I)}removeEditor(I){var g,C;I.div.contains(document.activeElement)&&(M(this,ss)&&clearTimeout(M(this,ss)),$(this,ss,setTimeout(()=>{this.focusMainContainer(),$(this,ss,null)},0))),M(this,mt).delete(I.id),I.annotationElementId&&((g=M(this,la))==null||g.delete(I.annotationElementId)),this.unselect(I),(!I.annotationElementId||!M(this,Po).has(I.annotationElementId))&&((C=M(this,nl))==null||C.remove(I.id))}addDeletedAnnotationElement(I){M(this,Po).add(I.annotationElementId),this.addChangedExistingAnnotation(I),I.deleted=!0}isDeletedAnnotationElement(I){return M(this,Po).has(I)}removeDeletedAnnotationElement(I){M(this,Po).delete(I.annotationElementId),this.removeChangedExistingAnnotation(I),I.deleted=!1}setActiveEditor(I){M(this,te)!==I&&($(this,te,I),I&&eg(this,Og,il).call(this,I.propertiesToUpdate))}updateUI(I){M(this,Og,H$)===I&&eg(this,Og,il).call(this,I.propertiesToUpdate)}updateUIForDefaultProperties(I){eg(this,Og,il).call(this,I.defaultPropertiesToUpdate)}toggleSelected(I){if(M(this,oC).has(I)){M(this,oC).delete(I),I.unselect(),eg(this,Og,Zi).call(this,{hasSelectedEditor:this.hasSelection});return}M(this,oC).add(I),I.select(),eg(this,Og,il).call(this,I.propertiesToUpdate),eg(this,Og,Zi).call(this,{hasSelectedEditor:!0})}setSelected(I){var g;(g=M(this,Eo))==null||g.commitOrRemove();for(const C of M(this,oC))C!==I&&C.unselect();M(this,oC).clear(),M(this,oC).add(I),I.select(),eg(this,Og,il).call(this,I.propertiesToUpdate),eg(this,Og,Zi).call(this,{hasSelectedEditor:!0})}isSelected(I){return M(this,oC).has(I)}get firstSelectedEditor(){return M(this,oC).values().next().value}unselect(I){I.unselect(),M(this,oC).delete(I),eg(this,Og,Zi).call(this,{hasSelectedEditor:this.hasSelection})}get hasSelection(){return M(this,oC).size!==0}get isEnterHandled(){return M(this,oC).size===1&&this.firstSelectedEditor.isEnterHandled}undo(){var I;M(this,Fe).undo(),eg(this,Og,Zi).call(this,{hasSomethingToUndo:M(this,Fe).hasSomethingToUndo(),hasSomethingToRedo:!0,isEmpty:eg(this,Og,Xu).call(this)}),(I=this._editorUndoBar)==null||I.hide()}redo(){M(this,Fe).redo(),eg(this,Og,Zi).call(this,{hasSomethingToUndo:!0,hasSomethingToRedo:M(this,Fe).hasSomethingToRedo(),isEmpty:eg(this,Og,Xu).call(this)})}addCommands(I){M(this,Fe).add(I),eg(this,Og,Zi).call(this,{hasSomethingToUndo:!0,hasSomethingToRedo:!1,isEmpty:eg(this,Og,Xu).call(this)})}cleanUndoStack(I){M(this,Fe).cleanType(I)}delete(){var e;this.commitOrRemove();const I=(e=this.currentLayer)==null?void 0:e.endDrawingSession(!0);if(!this.hasSelection&&!I)return;const g=I?[I]:[...M(this,oC)],C=()=>{var A;(A=this._editorUndoBar)==null||A.show(i,g.length===1?g[0].editorType:g.length);for(const s of g)s.remove()},i=()=>{for(const A of g)eg(this,Og,LX).call(this,A)};this.addCommands({cmd:C,undo:i,mustExec:!0})}commitOrRemove(){var I;(I=M(this,te))==null||I.commitOrRemove()}hasSomethingToControl(){return M(this,te)||this.hasSelection}selectAll(){for(const I of M(this,oC))I.commit();eg(this,Og,vX).call(this,M(this,mt).values())}unselectAll(){var I;if(!(M(this,te)&&(M(this,te).commitOrRemove(),M(this,Vt)!==RI.NONE))&&!((I=M(this,Eo))!=null&&I.commitOrRemove())&&this.hasSelection){for(const g of M(this,oC))g.unselect();M(this,oC).clear(),eg(this,Og,Zi).call(this,{hasSelectedEditor:!1})}}translateSelectedEditors(I,g,C=!1){if(C||this.commitOrRemove(),!this.hasSelection)return;M(this,aa)[0]+=I,M(this,aa)[1]+=g;const[i,e]=M(this,aa),A=[...M(this,oC)],s=1e3;M(this,ns)&&clearTimeout(M(this,ns)),$(this,ns,setTimeout(()=>{$(this,ns,null),M(this,aa)[0]=M(this,aa)[1]=0,this.addCommands({cmd:()=>{for(const l of A)M(this,mt).has(l.id)&&(l.translateInPage(i,e),l.translationDone())},undo:()=>{for(const l of A)M(this,mt).has(l.id)&&(l.translateInPage(-i,-e),l.translationDone())},mustExec:!1})},s));for(const l of A)l.translateInPage(I,g),l.translationDone()}setUpDragSession(){if(this.hasSelection){this.disableUserSelect(!0),$(this,As,new Map);for(const I of M(this,oC))M(this,As).set(I,{savedX:I.x,savedY:I.y,savedPageIndex:I.pageIndex,newX:0,newY:0,newPageIndex:-1})}}endDragSession(){if(!M(this,As))return!1;this.disableUserSelect(!1);const I=M(this,As);$(this,As,null);let g=!1;for(const[{x:i,y:e,pageIndex:A},s]of I)s.newX=i,s.newY=e,s.newPageIndex=A,g||(g=i!==s.savedX||e!==s.savedY||A!==s.savedPageIndex);if(!g)return!1;const C=(i,e,A,s)=>{if(M(this,mt).has(i.id)){const l=M(this,Tt).get(s);l?i._setParentAndPosition(l,e,A):(i.pageIndex=s,i.x=e,i.y=A)}};return this.addCommands({cmd:()=>{for(const[i,{newX:e,newY:A,newPageIndex:s}]of I)C(i,e,A,s)},undo:()=>{for(const[i,{savedX:e,savedY:A,savedPageIndex:s}]of I)C(i,e,A,s)},mustExec:!0}),!0}dragSelectedEditors(I,g){if(M(this,As))for(const C of M(this,As).keys())C.drag(I,g)}rebuild(I){if(I.parent===null){const g=this.getLayer(I.pageIndex);g?(g.changeParent(I),g.addOrRebuild(I)):(this.addEditor(I),this.addToAnnotationStorage(I),I.rebuild())}else I.parent.addOrRebuild(I)}get isEditorHandlingKeyboard(){var I;return((I=this.getActive())==null?void 0:I.shouldGetKeyboardEvents())||M(this,oC).size===1&&this.firstSelectedEditor.shouldGetKeyboardEvents()}isActive(I){return M(this,te)===I}getActive(){return M(this,te)}getMode(){return M(this,Vt)}get imageManager(){return jI(this,"imageManager",new DX)}getSelectionBoxes(I){if(!I)return null;const g=document.getSelection();for(let n=0,a=g.rangeCount;n<a;n++)if(!I.contains(g.getRangeAt(n).commonAncestorContainer))return null;const{x:C,y:i,width:e,height:A}=I.getBoundingClientRect();let s;switch(I.getAttribute("data-main-rotation")){case"90":s=(n,a,d,o)=>({x:(a-i)/A,y:1-(n+d-C)/e,width:o/A,height:d/e});break;case"180":s=(n,a,d,o)=>({x:1-(n+d-C)/e,y:1-(a+o-i)/A,width:d/e,height:o/A});break;case"270":s=(n,a,d,o)=>({x:1-(a+o-i)/A,y:(n-C)/e,width:o/A,height:d/e});break;default:s=(n,a,d,o)=>({x:(n-C)/e,y:(a-i)/A,width:d/e,height:o/A});break}const l=[];for(let n=0,a=g.rangeCount;n<a;n++){const d=g.getRangeAt(n);if(!d.collapsed)for(const{x:o,y:c,width:r,height:h}of d.getClientRects())r===0||h===0||l.push(s(o,c,r,h))}return l.length===0?null:l}addChangedExistingAnnotation({annotationElementId:I,id:g}){(M(this,dh)||$(this,dh,new Map)).set(I,g)}removeChangedExistingAnnotation({annotationElementId:I}){var g;(g=M(this,dh))==null||g.delete(I)}renderAnnotationElement(I){var i;const g=(i=M(this,dh))==null?void 0:i.get(I.data.id);if(!g)return;const C=M(this,nl).getRawValue(g);C&&(M(this,Vt)===RI.NONE&&!C.hasBeenModified||C.renderAnnotationElement(I))}setMissingCanvas(I,g,C){var e;const i=(e=M(this,la))==null?void 0:e.get(I);i&&(i.setCanvas(g,C),M(this,la).delete(I))}addMissingCanvas(I,g){(M(this,la)||$(this,la,new Map)).set(I,g)}};oh=new WeakMap,te=new WeakMap,mt=new WeakMap,Tt=new WeakMap,ch=new WeakMap,nl=new WeakMap,dh=new WeakMap,Fe=new WeakMap,ta=new WeakMap,Eo=new WeakMap,rh=new WeakMap,Po=new WeakMap,As=new WeakMap,dA=new WeakMap,_o=new WeakMap,Mm=new WeakMap,Rm=new WeakMap,hh=new WeakMap,fm=new WeakMap,ss=new WeakMap,ia=new WeakMap,bh=new WeakMap,ea=new WeakMap,ls=new WeakMap,GV=new WeakMap,Aa=new WeakMap,Hm=new WeakMap,sa=new WeakMap,qo=new WeakMap,$o=new WeakMap,la=new WeakMap,Xm=new WeakMap,Vt=new WeakMap,oC=new WeakMap,al=new WeakMap,na=new WeakMap,gc=new WeakMap,Sm=new WeakMap,Dm=new WeakMap,aa=new WeakMap,ns=new WeakMap,ol=new WeakMap,Km=new WeakMap,ke=new WeakMap,Og=new WeakSet,$Y=function({anchorNode:I}){return I.nodeType===Node.TEXT_NODE?I.parentElement:I},FX=function(I){const{currentLayer:g}=this;if(g.hasTextLayer(I))return g;for(const C of M(this,Tt).values())if(C.hasTextLayer(I))return C;return null},B$=function(){const I=document.getSelection();if(!I||I.isCollapsed)return;const C=eg(this,Og,$Y).call(this,I).closest(".textLayer"),i=this.getSelectionBoxes(C);i&&(M(this,ls)||$(this,ls,new Dog(this)),M(this,ls).show(C,i,this.direction==="ltr"))},W$=function(){var e,A,s;const I=document.getSelection();if(!I||I.isCollapsed){M(this,al)&&((e=M(this,ls))==null||e.hide(),$(this,al,null),eg(this,Og,Zi).call(this,{hasSelectedText:!1}));return}const{anchorNode:g}=I;if(g===M(this,al))return;const i=eg(this,Og,$Y).call(this,I).closest(".textLayer");if(!i){M(this,al)&&((A=M(this,ls))==null||A.hide(),$(this,al,null),eg(this,Og,Zi).call(this,{hasSelectedText:!1}));return}if((s=M(this,ls))==null||s.hide(),$(this,al,g),eg(this,Og,Zi).call(this,{hasSelectedText:!0}),!(M(this,Vt)!==RI.HIGHLIGHT&&M(this,Vt)!==RI.NONE)&&(M(this,Vt)===RI.HIGHLIGHT&&this.showAllEditors("highlight",!0,!0),$(this,ea,this.isShiftKeyDown),!this.isShiftKeyDown)){const l=M(this,Vt)===RI.HIGHLIGHT?eg(this,Og,FX).call(this,i):null;l==null||l.toggleDrawing();const n=new AbortController,a=this.combinedSignal(n),d=o=>{o.type==="pointerup"&&o.button!==0||(n.abort(),l==null||l.toggleDrawing(!0),o.type==="pointerup"&&eg(this,Og,gN).call(this,"main_toolbar"))};window.addEventListener("pointerup",d,{signal:a}),window.addEventListener("blur",d,{signal:a})}},gN=function(I=""){M(this,Vt)===RI.HIGHLIGHT?this.highlightSelection(I):M(this,Mm)&&eg(this,Og,B$).call(this)},y$=function(){document.addEventListener("selectionchange",eg(this,Og,W$).bind(this),{signal:this._signal})},Y$=function(){if(M(this,ia))return;$(this,ia,new AbortController);const I=this.combinedSignal(M(this,ia));window.addEventListener("focus",this.focus.bind(this),{signal:I}),window.addEventListener("blur",this.blur.bind(this),{signal:I})},N$=function(){var I;(I=M(this,ia))==null||I.abort(),$(this,ia,null)},kX=function(){if(M(this,sa))return;$(this,sa,new AbortController);const I=this.combinedSignal(M(this,sa));window.addEventListener("keydown",this.keydown.bind(this),{signal:I}),window.addEventListener("keyup",this.keyup.bind(this),{signal:I})},V$=function(){var I;(I=M(this,sa))==null||I.abort(),$(this,sa,null)},zX=function(){if(M(this,ta))return;$(this,ta,new AbortController);const I=this.combinedSignal(M(this,ta));document.addEventListener("copy",this.copy.bind(this),{signal:I}),document.addEventListener("cut",this.cut.bind(this),{signal:I}),document.addEventListener("paste",this.paste.bind(this),{signal:I})},JX=function(){var I;(I=M(this,ta))==null||I.abort(),$(this,ta,null)},M$=function(){const I=this._signal;document.addEventListener("dragover",this.dragOver.bind(this),{signal:I}),document.addEventListener("drop",this.drop.bind(this),{signal:I})},Zi=function(I){Object.entries(I).some(([C,i])=>M(this,Dm)[C]!==i)&&(this._eventBus.dispatch("annotationeditorstateschanged",{source:this,details:Object.assign(M(this,Dm),I)}),M(this,Vt)===RI.HIGHLIGHT&&I.hasSelectedEditor===!1&&eg(this,Og,il).call(this,[[gC.HIGHLIGHT_FREE,!0]]))},il=function(I){this._eventBus.dispatch("annotationeditorparamschanged",{source:this,details:I})},R$=async function(){if(!M(this,Aa)){$(this,Aa,!0);const I=[];for(const g of M(this,Tt).values())I.push(g.enable());await Promise.all(I);for(const g of M(this,mt).values())g.enable()}},f$=function(){if(this.unselectAll(),M(this,Aa)){$(this,Aa,!1);for(const I of M(this,Tt).values())I.disable();for(const I of M(this,mt).values())I.disable()}},LX=function(I){const g=M(this,Tt).get(I.pageIndex);g?g.addOrRebuild(I):(this.addEditor(I),this.addToAnnotationStorage(I))},H$=function(){let I=null;for(I of M(this,oC));return I},Xu=function(){if(M(this,mt).size===0)return!0;if(M(this,mt).size===1)for(const I of M(this,mt).values())return I.isEmpty();return!1},vX=function(I){for(const g of M(this,oC))g.unselect();M(this,oC).clear();for(const g of I)g.isEmpty()||(M(this,oC).add(g),g.select());eg(this,Og,Zi).call(this,{hasSelectedEditor:this.hasSelection})},CI(qr,"TRANSLATE_SMALL",1),CI(qr,"TRANSLATE_BIG",10);let td=qr;var Mt,as,rA,uh,os,ie,mh,cs,ki,cl,Ic,ds,oa,VA,Su,IN;const Gi=class Gi{constructor(I){ig(this,VA);ig(this,Mt,null);ig(this,as,!1);ig(this,rA,null);ig(this,uh,null);ig(this,os,null);ig(this,ie,null);ig(this,mh,!1);ig(this,cs,null);ig(this,ki,null);ig(this,cl,null);ig(this,Ic,null);ig(this,ds,!1);$(this,ki,I),$(this,ds,I._uiManager.useNewAltTextFlow),M(Gi,oa)||$(Gi,oa,Object.freeze({added:"pdfjs-editor-new-alt-text-added-button","added-label":"pdfjs-editor-new-alt-text-added-button-label",missing:"pdfjs-editor-new-alt-text-missing-button","missing-label":"pdfjs-editor-new-alt-text-missing-button-label",review:"pdfjs-editor-new-alt-text-to-review-button","review-label":"pdfjs-editor-new-alt-text-to-review-button-label"}))}static initialize(I){Gi._l10n??(Gi._l10n=I)}async render(){const I=$(this,rA,document.createElement("button"));I.className="altText",I.tabIndex="0";const g=$(this,uh,document.createElement("span"));I.append(g),M(this,ds)?(I.classList.add("new"),I.setAttribute("data-l10n-id",M(Gi,oa).missing),g.setAttribute("data-l10n-id",M(Gi,oa)["missing-label"])):(I.setAttribute("data-l10n-id","pdfjs-editor-alt-text-button"),g.setAttribute("data-l10n-id","pdfjs-editor-alt-text-button-label"));const C=M(this,ki)._uiManager._signal;I.addEventListener("contextmenu",MA,{signal:C}),I.addEventListener("pointerdown",e=>e.stopPropagation(),{signal:C});const i=e=>{e.preventDefault(),M(this,ki)._uiManager.editAltText(M(this,ki)),M(this,ds)&&M(this,ki)._reportTelemetry({action:"pdfjs.image.alt_text.image_status_label_clicked",data:{label:M(this,VA,Su)}})};return I.addEventListener("click",i,{capture:!0,signal:C}),I.addEventListener("keydown",e=>{e.target===I&&e.key==="Enter"&&($(this,mh,!0),i(e))},{signal:C}),await eg(this,VA,IN).call(this),I}finish(){M(this,rA)&&(M(this,rA).focus({focusVisible:M(this,mh)}),$(this,mh,!1))}isEmpty(){return M(this,ds)?M(this,Mt)===null:!M(this,Mt)&&!M(this,as)}hasData(){return M(this,ds)?M(this,Mt)!==null||!!M(this,cl):this.isEmpty()}get guessedText(){return M(this,cl)}async setGuessedText(I){M(this,Mt)===null&&($(this,cl,I),$(this,Ic,await Gi._l10n.get("pdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer",{generatedAltText:I})),eg(this,VA,IN).call(this))}toggleAltTextBadge(I=!1){var g;if(!M(this,ds)||M(this,Mt)){(g=M(this,cs))==null||g.remove(),$(this,cs,null);return}if(!M(this,cs)){const C=$(this,cs,document.createElement("div"));C.className="noAltTextBadge",M(this,ki).div.append(C)}M(this,cs).classList.toggle("hidden",!I)}serialize(I){let g=M(this,Mt);return!I&&M(this,cl)===g&&(g=M(this,Ic)),{altText:g,decorative:M(this,as),guessedText:M(this,cl),textWithDisclaimer:M(this,Ic)}}get data(){return{altText:M(this,Mt),decorative:M(this,as)}}set data({altText:I,decorative:g,guessedText:C,textWithDisclaimer:i,cancel:e=!1}){C&&($(this,cl,C),$(this,Ic,i)),!(M(this,Mt)===I&&M(this,as)===g)&&(e||($(this,Mt,I),$(this,as,g)),eg(this,VA,IN).call(this))}toggle(I=!1){M(this,rA)&&(!I&&M(this,ie)&&(clearTimeout(M(this,ie)),$(this,ie,null)),M(this,rA).disabled=!I)}shown(){M(this,ki)._reportTelemetry({action:"pdfjs.image.alt_text.image_status_label_displayed",data:{label:M(this,VA,Su)}})}destroy(){var I,g;(I=M(this,rA))==null||I.remove(),$(this,rA,null),$(this,uh,null),$(this,os,null),(g=M(this,cs))==null||g.remove(),$(this,cs,null)}};Mt=new WeakMap,as=new WeakMap,rA=new WeakMap,uh=new WeakMap,os=new WeakMap,ie=new WeakMap,mh=new WeakMap,cs=new WeakMap,ki=new WeakMap,cl=new WeakMap,Ic=new WeakMap,ds=new WeakMap,oa=new WeakMap,VA=new WeakSet,Su=function(){return M(this,Mt)&&"added"||M(this,Mt)===null&&this.guessedText&&"review"||"missing"},IN=async function(){var i,e,A;const I=M(this,rA);if(!I)return;if(M(this,ds)){if(I.classList.toggle("done",!!M(this,Mt)),I.setAttribute("data-l10n-id",M(Gi,oa)[M(this,VA,Su)]),(i=M(this,uh))==null||i.setAttribute("data-l10n-id",M(Gi,oa)[`${M(this,VA,Su)}-label`]),!M(this,Mt)){(e=M(this,os))==null||e.remove();return}}else{if(!M(this,Mt)&&!M(this,as)){I.classList.remove("done"),(A=M(this,os))==null||A.remove();return}I.classList.add("done"),I.setAttribute("data-l10n-id","pdfjs-editor-alt-text-edit-button")}let g=M(this,os);if(!g){$(this,os,g=document.createElement("span")),g.className="tooltip",g.setAttribute("role","tooltip"),g.id=`alt-text-tooltip-${M(this,ki).id}`;const s=100,l=M(this,ki)._uiManager._signal;l.addEventListener("abort",()=>{clearTimeout(M(this,ie)),$(this,ie,null)},{once:!0}),I.addEventListener("mouseenter",()=>{$(this,ie,setTimeout(()=>{$(this,ie,null),M(this,os).classList.add("show"),M(this,ki)._reportTelemetry({action:"alt_text_tooltip"})},s))},{signal:l}),I.addEventListener("mouseleave",()=>{var n;M(this,ie)&&(clearTimeout(M(this,ie)),$(this,ie,null)),(n=M(this,os))==null||n.classList.remove("show")},{signal:l})}M(this,as)?g.setAttribute("data-l10n-id","pdfjs-editor-alt-text-decorative-tooltip"):(g.removeAttribute("data-l10n-id"),g.textContent=M(this,Mt)),g.parentNode||I.append(g);const C=M(this,ki).getElementForAltText();C==null||C.setAttribute("aria-describedby",g.id)},ig(Gi,oa,null),CI(Gi,"_l10n",null);let vN=Gi;var Zh,Cc,Fm,km,zm,Jm,Lm,dl,tc,rl,ic,ca,Ta,X$,S$,D$;const v9=class v9{constructor({container:I,isPinchingDisabled:g=null,isPinchingStopped:C=null,onPinchStart:i=null,onPinching:e=null,onPinchEnd:A=null,signal:s}){ig(this,Ta);ig(this,Zh);ig(this,Cc,!1);ig(this,Fm,null);ig(this,km);ig(this,zm);ig(this,Jm);ig(this,Lm);ig(this,dl,null);ig(this,tc);ig(this,rl,null);ig(this,ic);ig(this,ca,null);$(this,Zh,I),$(this,Fm,C),$(this,km,g),$(this,zm,i),$(this,Jm,e),$(this,Lm,A),$(this,ic,new AbortController),$(this,tc,AbortSignal.any([s,M(this,ic).signal])),I.addEventListener("touchstart",eg(this,Ta,X$).bind(this),{passive:!1,signal:M(this,tc)})}get MIN_TOUCH_DISTANCE_TO_PINCH(){return 35/jl.pixelRatio}destroy(){var I,g;(I=M(this,ic))==null||I.abort(),$(this,ic,null),(g=M(this,dl))==null||g.abort(),$(this,dl,null)}};Zh=new WeakMap,Cc=new WeakMap,Fm=new WeakMap,km=new WeakMap,zm=new WeakMap,Jm=new WeakMap,Lm=new WeakMap,dl=new WeakMap,tc=new WeakMap,rl=new WeakMap,ic=new WeakMap,ca=new WeakMap,Ta=new WeakSet,X$=function(I){var i,e,A;if((i=M(this,km))!=null&&i.call(this))return;if(I.touches.length===1){if(M(this,dl))return;const s=$(this,dl,new AbortController),l=AbortSignal.any([M(this,tc),s.signal]),n=M(this,Zh),a={capture:!0,signal:l,passive:!1},d=o=>{var c;o.pointerType==="touch"&&((c=M(this,dl))==null||c.abort(),$(this,dl,null))};n.addEventListener("pointerdown",o=>{o.pointerType==="touch"&&(at(o),d(o))},a),n.addEventListener("pointerup",d,a),n.addEventListener("pointercancel",d,a);return}if(!M(this,ca)){$(this,ca,new AbortController);const s=AbortSignal.any([M(this,tc),M(this,ca).signal]),l=M(this,Zh),n={signal:s,capture:!1,passive:!1};l.addEventListener("touchmove",eg(this,Ta,S$).bind(this),n);const a=eg(this,Ta,D$).bind(this);l.addEventListener("touchend",a,n),l.addEventListener("touchcancel",a,n),n.capture=!0,l.addEventListener("pointerdown",at,n),l.addEventListener("pointermove",at,n),l.addEventListener("pointercancel",at,n),l.addEventListener("pointerup",at,n),(e=M(this,zm))==null||e.call(this)}if(at(I),I.touches.length!==2||(A=M(this,Fm))!=null&&A.call(this)){$(this,rl,null);return}let[g,C]=I.touches;g.identifier>C.identifier&&([g,C]=[C,g]),$(this,rl,{touch0X:g.screenX,touch0Y:g.screenY,touch1X:C.screenX,touch1Y:C.screenY})},S$=function(I){var p;if(!M(this,rl)||I.touches.length!==2)return;at(I);let[g,C]=I.touches;g.identifier>C.identifier&&([g,C]=[C,g]);const{screenX:i,screenY:e}=g,{screenX:A,screenY:s}=C,l=M(this,rl),{touch0X:n,touch0Y:a,touch1X:d,touch1Y:o}=l,c=d-n,r=o-a,h=A-i,b=s-e,u=Math.hypot(h,b)||1,m=Math.hypot(c,r)||1;if(!M(this,Cc)&&Math.abs(m-u)<=v9.MIN_TOUCH_DISTANCE_TO_PINCH)return;if(l.touch0X=i,l.touch0Y=e,l.touch1X=A,l.touch1Y=s,!M(this,Cc)){$(this,Cc,!0);return}const Z=[(i+A)/2,(e+s)/2];(p=M(this,Jm))==null||p.call(this,Z,m,u)},D$=function(I){var g;I.touches.length>=2||(M(this,ca).abort(),$(this,ca,null),(g=M(this,Lm))==null||g.call(this),M(this,rl)&&(at(I),$(this,rl,null),$(this,Cc,!1)))};let TN=v9;var ec,hA,MC,Gh,da,vm,Ac,xt,sc,hl,ra,Tm,lc,ee,xm,nc,bl,rs,wh,ph,ze,ac,jm,wV,ZI,TX,Qm,xX,CN,K$,F$,jX,tN,QX,k$,z$,J$,OX,L$,UX,v$,T$,x$,EX,Du;const KI=class KI{constructor(I){ig(this,ZI);ig(this,ec,null);ig(this,hA,null);ig(this,MC,null);ig(this,Gh,!1);ig(this,da,null);ig(this,vm,"");ig(this,Ac,!1);ig(this,xt,null);ig(this,sc,null);ig(this,hl,null);ig(this,ra,null);ig(this,Tm,"");ig(this,lc,!1);ig(this,ee,null);ig(this,xm,!1);ig(this,nc,!1);ig(this,bl,!1);ig(this,rs,null);ig(this,wh,0);ig(this,ph,0);ig(this,ze,null);ig(this,ac,null);CI(this,"_isCopy",!1);CI(this,"_editToolbar",null);CI(this,"_initialOptions",Object.create(null));CI(this,"_initialData",null);CI(this,"_isVisible",!0);CI(this,"_uiManager",null);CI(this,"_focusEventsAllowed",!0);ig(this,jm,!1);ig(this,wV,KI._zIndex++);this.parent=I.parent,this.id=I.id,this.width=this.height=null,this.pageIndex=I.parent.pageIndex,this.name=I.name,this.div=null,this._uiManager=I.uiManager,this.annotationElementId=null,this._willKeepAspectRatio=!1,this._initialOptions.isCentered=I.isCentered,this._structTreeParentId=null;const{rotation:g,rawDims:{pageWidth:C,pageHeight:i,pageX:e,pageY:A}}=this.parent.viewport;this.rotation=g,this.pageRotation=(360+g-this._uiManager.viewParameters.rotation)%360,this.pageDimensions=[C,i],this.pageTranslation=[e,A];const[s,l]=this.parentDimensions;this.x=I.x/s,this.y=I.y/l,this.isAttachedToDOM=!1,this.deleted=!1}static get _resizerKeyboardManager(){const I=KI.prototype._resizeWithKeyboard,g=td.TRANSLATE_SMALL,C=td.TRANSLATE_BIG;return jI(this,"_resizerKeyboardManager",new EZ([[["ArrowLeft","mac+ArrowLeft"],I,{args:[-g,0]}],[["ctrl+ArrowLeft","mac+shift+ArrowLeft"],I,{args:[-C,0]}],[["ArrowRight","mac+ArrowRight"],I,{args:[g,0]}],[["ctrl+ArrowRight","mac+shift+ArrowRight"],I,{args:[C,0]}],[["ArrowUp","mac+ArrowUp"],I,{args:[0,-g]}],[["ctrl+ArrowUp","mac+shift+ArrowUp"],I,{args:[0,-C]}],[["ArrowDown","mac+ArrowDown"],I,{args:[0,g]}],[["ctrl+ArrowDown","mac+shift+ArrowDown"],I,{args:[0,C]}],[["Escape","mac+Escape"],KI.prototype._stopResizingWithKeyboard]]))}get editorType(){return Object.getPrototypeOf(this).constructor._type}static get isDrawer(){return!1}static get _defaultLineColor(){return jI(this,"_defaultLineColor",this._colorManager.getHexCode("CanvasText"))}static deleteAnnotationElement(I){const g=new kog({id:I.parent.getNextId(),parent:I.parent,uiManager:I._uiManager});g.annotationElementId=I.annotationElementId,g.deleted=!0,g._uiManager.addToAnnotationStorage(g)}static initialize(I,g){if(KI._l10n??(KI._l10n=I),KI._l10nResizer||(KI._l10nResizer=Object.freeze({topLeft:"pdfjs-editor-resizer-top-left",topMiddle:"pdfjs-editor-resizer-top-middle",topRight:"pdfjs-editor-resizer-top-right",middleRight:"pdfjs-editor-resizer-middle-right",bottomRight:"pdfjs-editor-resizer-bottom-right",bottomMiddle:"pdfjs-editor-resizer-bottom-middle",bottomLeft:"pdfjs-editor-resizer-bottom-left",middleLeft:"pdfjs-editor-resizer-middle-left"})),KI._borderLineWidth!==-1)return;const C=getComputedStyle(document.documentElement);KI._borderLineWidth=parseFloat(C.getPropertyValue("--outline-width"))||0}static updateDefaultParams(I,g){}static get defaultPropertiesToUpdate(){return[]}static isHandlingMimeForPasting(I){return!1}static paste(I,g){ZC("Not implemented")}get propertiesToUpdate(){return[]}get _isDraggable(){return M(this,jm)}set _isDraggable(I){var g;$(this,jm,I),(g=this.div)==null||g.classList.toggle("draggable",I)}get isEnterHandled(){return!0}center(){const[I,g]=this.pageDimensions;switch(this.parentRotation){case 90:this.x-=this.height*g/(I*2),this.y+=this.width*I/(g*2);break;case 180:this.x+=this.width/2,this.y+=this.height/2;break;case 270:this.x+=this.height*g/(I*2),this.y-=this.width*I/(g*2);break;default:this.x-=this.width/2,this.y-=this.height/2;break}this.fixAndSetPosition()}addCommands(I){this._uiManager.addCommands(I)}get currentLayer(){return this._uiManager.currentLayer}setInBackground(){this.div.style.zIndex=0}setInForeground(){this.div.style.zIndex=M(this,wV)}setParent(I){I!==null?(this.pageIndex=I.pageIndex,this.pageDimensions=I.pageDimensions):eg(this,ZI,Du).call(this),this.parent=I}focusin(I){this._focusEventsAllowed&&(M(this,lc)?$(this,lc,!1):this.parent.setSelected(this))}focusout(I){var C;if(!this._focusEventsAllowed||!this.isAttachedToDOM)return;const g=I.relatedTarget;g!=null&&g.closest(`#${this.id}`)||(I.preventDefault(),(C=this.parent)!=null&&C.isMultipleSelection||this.commitOrRemove())}commitOrRemove(){this.isEmpty()?this.remove():this.commit()}commit(){this.addToAnnotationStorage()}addToAnnotationStorage(){this._uiManager.addToAnnotationStorage(this)}setAt(I,g,C,i){const[e,A]=this.parentDimensions;[C,i]=this.screenToPageTranslation(C,i),this.x=(I+C)/e,this.y=(g+i)/A,this.fixAndSetPosition()}_moveAfterPaste(I,g){const[C,i]=this.parentDimensions;this.setAt(I*C,g*i,this.width*C,this.height*i),this._onTranslated()}translate(I,g){eg(this,ZI,TX).call(this,this.parentDimensions,I,g)}translateInPage(I,g){M(this,ee)||$(this,ee,[this.x,this.y,this.width,this.height]),eg(this,ZI,TX).call(this,this.pageDimensions,I,g),this.div.scrollIntoView({block:"nearest"})}translationDone(){this._onTranslated(this.x,this.y)}drag(I,g){M(this,ee)||$(this,ee,[this.x,this.y,this.width,this.height]);const{div:C,parentDimensions:[i,e]}=this;if(this.x+=I/i,this.y+=g/e,this.parent&&(this.x<0||this.x>1||this.y<0||this.y>1)){const{x:d,y:o}=this.div.getBoundingClientRect();this.parent.findNewParent(this,d,o)&&(this.x-=Math.floor(this.x),this.y-=Math.floor(this.y))}let{x:A,y:s}=this;const[l,n]=this.getBaseTranslation();A+=l,s+=n;const{style:a}=C;a.left=`${(100*A).toFixed(2)}%`,a.top=`${(100*s).toFixed(2)}%`,this._onTranslating(A,s),C.scrollIntoView({block:"nearest"})}_onTranslating(I,g){}_onTranslated(I,g){}get _hasBeenMoved(){return!!M(this,ee)&&(M(this,ee)[0]!==this.x||M(this,ee)[1]!==this.y)}get _hasBeenResized(){return!!M(this,ee)&&(M(this,ee)[2]!==this.width||M(this,ee)[3]!==this.height)}getBaseTranslation(){const[I,g]=this.parentDimensions,{_borderLineWidth:C}=KI,i=C/I,e=C/g;switch(this.rotation){case 90:return[-i,e];case 180:return[i,e];case 270:return[i,-e];default:return[-i,-e]}}get _mustFixPosition(){return!0}fixAndSetPosition(I=this.rotation){const{div:{style:g},pageDimensions:[C,i]}=this;let{x:e,y:A,width:s,height:l}=this;if(s*=C,l*=i,e*=C,A*=i,this._mustFixPosition)switch(I){case 0:e=Wi(e,0,C-s),A=Wi(A,0,i-l);break;case 90:e=Wi(e,0,C-l),A=Wi(A,s,i);break;case 180:e=Wi(e,s,C),A=Wi(A,l,i);break;case 270:e=Wi(e,l,C),A=Wi(A,0,i-s);break}this.x=e/=C,this.y=A/=i;const[n,a]=this.getBaseTranslation();e+=n,A+=a,g.left=`${(100*e).toFixed(2)}%`,g.top=`${(100*A).toFixed(2)}%`,this.moveInDOM()}screenToPageTranslation(I,g){var C;return eg(C=KI,Qm,xX).call(C,I,g,this.parentRotation)}pageTranslationToScreen(I,g){var C;return eg(C=KI,Qm,xX).call(C,I,g,360-this.parentRotation)}get parentScale(){return this._uiManager.viewParameters.realScale}get parentRotation(){return(this._uiManager.viewParameters.rotation+this.pageRotation)%360}get parentDimensions(){const{parentScale:I,pageDimensions:[g,C]}=this;return[g*I,C*I]}setDims(I,g){const[C,i]=this.parentDimensions,{style:e}=this.div;e.width=`${(100*I/C).toFixed(2)}%`,M(this,Ac)||(e.height=`${(100*g/i).toFixed(2)}%`)}fixDims(){const{style:I}=this.div,{height:g,width:C}=I,i=C.endsWith("%"),e=!M(this,Ac)&&g.endsWith("%");if(i&&e)return;const[A,s]=this.parentDimensions;i||(I.width=`${(100*parseFloat(C)/A).toFixed(2)}%`),!M(this,Ac)&&!e&&(I.height=`${(100*parseFloat(g)/s).toFixed(2)}%`)}getInitialTranslation(){return[0,0]}_onResized(){}static _round(I){return Math.round(I*1e4)/1e4}_onResizing(){}altTextFinish(){var I;(I=M(this,MC))==null||I.finish()}async addEditToolbar(){return this._editToolbar||M(this,nc)?this._editToolbar:(this._editToolbar=new SX(this),this.div.append(this._editToolbar.render()),M(this,MC)&&await this._editToolbar.addAltText(M(this,MC)),this._editToolbar)}removeEditToolbar(){var I;this._editToolbar&&(this._editToolbar.remove(),this._editToolbar=null,(I=M(this,MC))==null||I.destroy())}addContainer(I){var C;const g=(C=this._editToolbar)==null?void 0:C.div;g?g.before(I):this.div.append(I)}getClientDimensions(){return this.div.getBoundingClientRect()}async addAltTextButton(){M(this,MC)||(vN.initialize(KI._l10n),$(this,MC,new vN(this)),M(this,ec)&&(M(this,MC).data=M(this,ec),$(this,ec,null)),await this.addEditToolbar())}get altTextData(){var I;return(I=M(this,MC))==null?void 0:I.data}set altTextData(I){M(this,MC)&&(M(this,MC).data=I)}get guessedAltText(){var I;return(I=M(this,MC))==null?void 0:I.guessedText}async setGuessedAltText(I){var g;await((g=M(this,MC))==null?void 0:g.setGuessedText(I))}serializeAltText(I){var g;return(g=M(this,MC))==null?void 0:g.serialize(I)}hasAltText(){return!!M(this,MC)&&!M(this,MC).isEmpty()}hasAltTextData(){var I;return((I=M(this,MC))==null?void 0:I.hasData())??!1}render(){var A;const I=this.div=document.createElement("div");I.setAttribute("data-editor-rotation",(360-this.rotation)%360),I.className=this.name,I.setAttribute("id",this.id),I.tabIndex=M(this,Gh)?-1:0,I.setAttribute("role","application"),this.defaultL10nId&&I.setAttribute("data-l10n-id",this.defaultL10nId),this._isVisible||I.classList.add("hidden"),this.setInForeground(),eg(this,ZI,UX).call(this);const[g,C]=this.parentDimensions;this.parentRotation%180!==0&&(I.style.maxWidth=`${(100*C/g).toFixed(2)}%`,I.style.maxHeight=`${(100*g/C).toFixed(2)}%`);const[i,e]=this.getInitialTranslation();return this.translate(i,e),C9(this,I,["keydown","pointerdown"]),this.isResizable&&this._uiManager._supportsPinchToZoom&&(M(this,ac)||$(this,ac,new TN({container:I,isPinchingDisabled:()=>!this.isSelected,onPinchStart:eg(this,ZI,k$).bind(this),onPinching:eg(this,ZI,z$).bind(this),onPinchEnd:eg(this,ZI,J$).bind(this),signal:this._uiManager._signal}))),(A=this._uiManager._editorUndoBar)==null||A.hide(),I}pointerdown(I){const{isMac:g}=gi.platform;if(I.button!==0||I.ctrlKey&&g){I.preventDefault();return}if($(this,lc,!0),this._isDraggable){eg(this,ZI,L$).call(this,I);return}eg(this,ZI,OX).call(this,I)}get isSelected(){return this._uiManager.isSelected(this)}_onStartDragging(){}_onStopDragging(){}moveInDOM(){M(this,rs)&&clearTimeout(M(this,rs)),$(this,rs,setTimeout(()=>{var I;$(this,rs,null),(I=this.parent)==null||I.moveEditorInDOM(this)},0))}_setParentAndPosition(I,g,C){I.changeParent(this),this.x=g,this.y=C,this.fixAndSetPosition(),this._onTranslated()}getRect(I,g,C=this.rotation){const i=this.parentScale,[e,A]=this.pageDimensions,[s,l]=this.pageTranslation,n=I/i,a=g/i,d=this.x*e,o=this.y*A,c=this.width*e,r=this.height*A;switch(C){case 0:return[d+n+s,A-o-a-r+l,d+n+c+s,A-o-a+l];case 90:return[d+a+s,A-o+n+l,d+a+r+s,A-o+n+c+l];case 180:return[d-n-c+s,A-o+a+l,d-n+s,A-o+a+r+l];case 270:return[d-a-r+s,A-o-n-c+l,d-a+s,A-o-n+l];default:throw new Error("Invalid rotation")}}getRectInCurrentCoords(I,g){const[C,i,e,A]=I,s=e-C,l=A-i;switch(this.rotation){case 0:return[C,g-A,s,l];case 90:return[C,g-i,l,s];case 180:return[e,g-i,s,l];case 270:return[e,g-A,l,s];default:throw new Error("Invalid rotation")}}onceAdded(I){}isEmpty(){return!1}enableEditMode(){$(this,nc,!0)}disableEditMode(){$(this,nc,!1)}isInEditMode(){return M(this,nc)}shouldGetKeyboardEvents(){return M(this,bl)}needsToBeRebuilt(){return this.div&&!this.isAttachedToDOM}get isOnScreen(){const{top:I,left:g,bottom:C,right:i}=this.getClientDimensions(),{innerHeight:e,innerWidth:A}=window;return g<A&&i>0&&I<e&&C>0}rebuild(){eg(this,ZI,UX).call(this)}rotate(I){}resize(){}serializeDeleted(){var I;return{id:this.annotationElementId,deleted:!0,pageIndex:this.pageIndex,popupRef:((I=this._initialData)==null?void 0:I.popupRef)||""}}serialize(I=!1,g=null){ZC("An editor must be serializable")}static async deserialize(I,g,C){const i=new this.prototype.constructor({parent:g,id:g.getNextId(),uiManager:C});i.rotation=I.rotation,$(i,ec,I.accessibilityData),i._isCopy=I.isCopy||!1;const[e,A]=i.pageDimensions,[s,l,n,a]=i.getRectInCurrentCoords(I.rect,A);return i.x=s/e,i.y=l/A,i.width=n/e,i.height=a/A,i}get hasBeenModified(){return!!this.annotationElementId&&(this.deleted||this.serialize()!==null)}remove(){var I,g;if((I=M(this,ra))==null||I.abort(),$(this,ra,null),this.isEmpty()||this.commit(),this.parent?this.parent.remove(this):this._uiManager.removeEditor(this),M(this,rs)&&(clearTimeout(M(this,rs)),$(this,rs,null)),eg(this,ZI,Du).call(this),this.removeEditToolbar(),M(this,ze)){for(const C of M(this,ze).values())clearTimeout(C);$(this,ze,null)}this.parent=null,(g=M(this,ac))==null||g.destroy(),$(this,ac,null)}get isResizable(){return!1}makeResizable(){this.isResizable&&(eg(this,ZI,K$).call(this),M(this,xt).classList.remove("hidden"))}get toolbarPosition(){return null}keydown(I){if(!this.isResizable||I.target!==this.div||I.key!=="Enter")return;this._uiManager.setSelected(this),$(this,hl,{savedX:this.x,savedY:this.y,savedWidth:this.width,savedHeight:this.height});const g=M(this,xt).children;if(!M(this,hA)){$(this,hA,Array.from(g));const A=eg(this,ZI,v$).bind(this),s=eg(this,ZI,T$).bind(this),l=this._uiManager._signal;for(const n of M(this,hA)){const a=n.getAttribute("data-resizer-name");n.setAttribute("role","spinbutton"),n.addEventListener("keydown",A,{signal:l}),n.addEventListener("blur",s,{signal:l}),n.addEventListener("focus",eg(this,ZI,x$).bind(this,a),{signal:l}),n.setAttribute("data-l10n-id",KI._l10nResizer[a])}}const C=M(this,hA)[0];let i=0;for(const A of g){if(A===C)break;i++}const e=(360-this.rotation+this.parentRotation)%360/90*(M(this,hA).length/4);if(e!==i){if(e<i)for(let s=0;s<i-e;s++)M(this,xt).append(M(this,xt).firstChild);else if(e>i)for(let s=0;s<e-i;s++)M(this,xt).firstChild.before(M(this,xt).lastChild);let A=0;for(const s of g){const n=M(this,hA)[A++].getAttribute("data-resizer-name");s.setAttribute("data-l10n-id",KI._l10nResizer[n])}}eg(this,ZI,EX).call(this,0),$(this,bl,!0),M(this,xt).firstChild.focus({focusVisible:!0}),I.preventDefault(),I.stopImmediatePropagation()}_resizeWithKeyboard(I,g){M(this,bl)&&eg(this,ZI,QX).call(this,M(this,Tm),{deltaX:I,deltaY:g,fromKeyboard:!0})}_stopResizingWithKeyboard(){eg(this,ZI,Du).call(this),this.div.focus()}select(){var I,g,C;if(this.makeResizable(),(I=this.div)==null||I.classList.add("selectedEditor"),!this._editToolbar){this.addEditToolbar().then(()=>{var i,e;(i=this.div)!=null&&i.classList.contains("selectedEditor")&&((e=this._editToolbar)==null||e.show())});return}(g=this._editToolbar)==null||g.show(),(C=M(this,MC))==null||C.toggleAltTextBadge(!1)}unselect(){var I,g,C,i,e;(I=M(this,xt))==null||I.classList.add("hidden"),(g=this.div)==null||g.classList.remove("selectedEditor"),(C=this.div)!=null&&C.contains(document.activeElement)&&this._uiManager.currentLayer.div.focus({preventScroll:!0}),(i=this._editToolbar)==null||i.hide(),(e=M(this,MC))==null||e.toggleAltTextBadge(!0)}updateParams(I,g){}disableEditing(){}enableEditing(){}enterInEditMode(){}getElementForAltText(){return this.div}get contentDiv(){return this.div}get isEditing(){return M(this,xm)}set isEditing(I){$(this,xm,I),this.parent&&(I?(this.parent.setSelected(this),this.parent.setActiveEditor(this)):this.parent.setActiveEditor(null))}setAspectRatio(I,g){$(this,Ac,!0);const C=I/g,{style:i}=this.div;i.aspectRatio=C,i.height="auto"}static get MIN_SIZE(){return 16}static canCreateNewEmptyEditor(){return!0}get telemetryInitialData(){return{action:"added"}}get telemetryFinalData(){return null}_reportTelemetry(I,g=!1){if(g){M(this,ze)||$(this,ze,new Map);const{action:C}=I;let i=M(this,ze).get(C);i&&clearTimeout(i),i=setTimeout(()=>{this._reportTelemetry(I),M(this,ze).delete(C),M(this,ze).size===0&&$(this,ze,null)},KI._telemetryTimeout),M(this,ze).set(C,i);return}I.type||(I.type=this.editorType),this._uiManager._eventBus.dispatch("reporttelemetry",{source:this,details:{type:"editing",data:I}})}show(I=this._isVisible){this.div.classList.toggle("hidden",!I),this._isVisible=I}enable(){this.div&&(this.div.tabIndex=0),$(this,Gh,!1)}disable(){this.div&&(this.div.tabIndex=-1),$(this,Gh,!0)}renderAnnotationElement(I){let g=I.container.querySelector(".annotationContent");if(!g)g=document.createElement("div"),g.classList.add("annotationContent",this.editorType),I.container.prepend(g);else if(g.nodeName==="CANVAS"){const C=g;g=document.createElement("div"),g.classList.add("annotationContent",this.editorType),C.before(g)}return g}resetAnnotationElement(I){const{firstChild:g}=I.container;(g==null?void 0:g.nodeName)==="DIV"&&g.classList.contains("annotationContent")&&g.remove()}};ec=new WeakMap,hA=new WeakMap,MC=new WeakMap,Gh=new WeakMap,da=new WeakMap,vm=new WeakMap,Ac=new WeakMap,xt=new WeakMap,sc=new WeakMap,hl=new WeakMap,ra=new WeakMap,Tm=new WeakMap,lc=new WeakMap,ee=new WeakMap,xm=new WeakMap,nc=new WeakMap,bl=new WeakMap,rs=new WeakMap,wh=new WeakMap,ph=new WeakMap,ze=new WeakMap,ac=new WeakMap,jm=new WeakMap,wV=new WeakMap,ZI=new WeakSet,TX=function([I,g],C,i){[C,i]=this.screenToPageTranslation(C,i),this.x+=C/I,this.y+=i/g,this._onTranslating(this.x,this.y),this.fixAndSetPosition()},Qm=new WeakSet,xX=function(I,g,C){switch(C){case 90:return[g,-I];case 180:return[-I,-g];case 270:return[-g,I];default:return[I,g]}},CN=function(I){switch(I){case 90:{const[g,C]=this.pageDimensions;return[0,-g/C,C/g,0]}case 180:return[-1,0,0,-1];case 270:{const[g,C]=this.pageDimensions;return[0,g/C,-C/g,0]}default:return[1,0,0,1]}},K$=function(){if(M(this,xt))return;$(this,xt,document.createElement("div")),M(this,xt).classList.add("resizers");const I=this._willKeepAspectRatio?["topLeft","topRight","bottomRight","bottomLeft"]:["topLeft","topMiddle","topRight","middleRight","bottomRight","bottomMiddle","bottomLeft","middleLeft"],g=this._uiManager._signal;for(const C of I){const i=document.createElement("div");M(this,xt).append(i),i.classList.add("resizer",C),i.setAttribute("data-resizer-name",C),i.addEventListener("pointerdown",eg(this,ZI,F$).bind(this,C),{signal:g}),i.addEventListener("contextmenu",MA,{signal:g}),i.tabIndex=-1}this.div.prepend(M(this,xt))},F$=function(I,g){var a;g.preventDefault();const{isMac:C}=gi.platform;if(g.button!==0||g.ctrlKey&&C)return;(a=M(this,MC))==null||a.toggle(!1);const i=this._isDraggable;this._isDraggable=!1,$(this,sc,[g.screenX,g.screenY]);const e=new AbortController,A=this._uiManager.combinedSignal(e);this.parent.togglePointerEvents(!1),window.addEventListener("pointermove",eg(this,ZI,QX).bind(this,I),{passive:!0,capture:!0,signal:A}),window.addEventListener("touchmove",at,{passive:!1,signal:A}),window.addEventListener("contextmenu",MA,{signal:A}),$(this,hl,{savedX:this.x,savedY:this.y,savedWidth:this.width,savedHeight:this.height});const s=this.parent.div.style.cursor,l=this.div.style.cursor;this.div.style.cursor=this.parent.div.style.cursor=window.getComputedStyle(g.target).cursor;const n=()=>{var d;e.abort(),this.parent.togglePointerEvents(!0),(d=M(this,MC))==null||d.toggle(!0),this._isDraggable=i,this.parent.div.style.cursor=s,this.div.style.cursor=l,eg(this,ZI,tN).call(this)};window.addEventListener("pointerup",n,{signal:A}),window.addEventListener("blur",n,{signal:A})},jX=function(I,g,C,i){this.width=C,this.height=i,this.x=I,this.y=g;const[e,A]=this.parentDimensions;this.setDims(e*C,A*i),this.fixAndSetPosition(),this._onResized()},tN=function(){if(!M(this,hl))return;const{savedX:I,savedY:g,savedWidth:C,savedHeight:i}=M(this,hl);$(this,hl,null);const e=this.x,A=this.y,s=this.width,l=this.height;e===I&&A===g&&s===C&&l===i||this.addCommands({cmd:eg(this,ZI,jX).bind(this,e,A,s,l),undo:eg(this,ZI,jX).bind(this,I,g,C,i),mustExec:!0})},QX=function(I,g){const[C,i]=this.parentDimensions,e=this.x,A=this.y,s=this.width,l=this.height,n=KI.MIN_SIZE/C,a=KI.MIN_SIZE/i,d=eg(this,ZI,CN).call(this,this.rotation),o=(G,w)=>[d[0]*G+d[2]*w,d[1]*G+d[3]*w],c=eg(this,ZI,CN).call(this,360-this.rotation),r=(G,w)=>[c[0]*G+c[2]*w,c[1]*G+c[3]*w];let h,b,u=!1,m=!1;switch(I){case"topLeft":u=!0,h=(G,w)=>[0,0],b=(G,w)=>[G,w];break;case"topMiddle":h=(G,w)=>[G/2,0],b=(G,w)=>[G/2,w];break;case"topRight":u=!0,h=(G,w)=>[G,0],b=(G,w)=>[0,w];break;case"middleRight":m=!0,h=(G,w)=>[G,w/2],b=(G,w)=>[0,w/2];break;case"bottomRight":u=!0,h=(G,w)=>[G,w],b=(G,w)=>[0,0];break;case"bottomMiddle":h=(G,w)=>[G/2,w],b=(G,w)=>[G/2,0];break;case"bottomLeft":u=!0,h=(G,w)=>[0,w],b=(G,w)=>[G,0];break;case"middleLeft":m=!0,h=(G,w)=>[0,w/2],b=(G,w)=>[G,w/2];break}const Z=h(s,l),p=b(s,l);let Y=o(...p);const R=KI._round(e+Y[0]),X=KI._round(A+Y[1]);let H=1,S=1,z,v;if(g.fromKeyboard)({deltaX:z,deltaY:v}=g);else{const{screenX:G,screenY:w}=g,[W,y]=M(this,sc);[z,v]=this.screenToPageTranslation(G-W,w-y),M(this,sc)[0]=G,M(this,sc)[1]=w}if([z,v]=r(z/C,v/i),u){const G=Math.hypot(s,l);H=S=Math.max(Math.min(Math.hypot(p[0]-Z[0]-z,p[1]-Z[1]-v)/G,1/s,1/l),n/s,a/l)}else m?H=Wi(Math.abs(p[0]-Z[0]-z),n,1)/s:S=Wi(Math.abs(p[1]-Z[1]-v),a,1)/l;const K=KI._round(s*H),V=KI._round(l*S);Y=o(...b(K,V));const N=R-Y[0],B=X-Y[1];M(this,ee)||$(this,ee,[this.x,this.y,this.width,this.height]),this.width=K,this.height=V,this.x=N,this.y=B,this.setDims(C*K,i*V),this.fixAndSetPosition(),this._onResizing()},k$=function(){var I;$(this,hl,{savedX:this.x,savedY:this.y,savedWidth:this.width,savedHeight:this.height}),(I=M(this,MC))==null||I.toggle(!1),this.parent.togglePointerEvents(!1)},z$=function(I,g,C){let e=.7*(C/g)+1-.7;if(e===1)return;const A=eg(this,ZI,CN).call(this,this.rotation),s=(R,X)=>[A[0]*R+A[2]*X,A[1]*R+A[3]*X],[l,n]=this.parentDimensions,a=this.x,d=this.y,o=this.width,c=this.height,r=KI.MIN_SIZE/l,h=KI.MIN_SIZE/n;e=Math.max(Math.min(e,1/o,1/c),r/o,h/c);const b=KI._round(o*e),u=KI._round(c*e);if(b===o&&u===c)return;M(this,ee)||$(this,ee,[a,d,o,c]);const m=s(o/2,c/2),Z=KI._round(a+m[0]),p=KI._round(d+m[1]),Y=s(b/2,u/2);this.x=Z-Y[0],this.y=p-Y[1],this.width=b,this.height=u,this.setDims(l*b,n*u),this.fixAndSetPosition(),this._onResizing()},J$=function(){var I;(I=M(this,MC))==null||I.toggle(!0),this.parent.togglePointerEvents(!0),eg(this,ZI,tN).call(this)},OX=function(I){const{isMac:g}=gi.platform;I.ctrlKey&&!g||I.shiftKey||I.metaKey&&g?this.parent.toggleSelected(this):this.parent.setSelected(this)},L$=function(I){const{isSelected:g}=this;this._uiManager.setUpDragSession();let C=!1;const i=new AbortController,e=this._uiManager.combinedSignal(i),A={capture:!0,passive:!1,signal:e},s=n=>{i.abort(),$(this,da,null),$(this,lc,!1),this._uiManager.endDragSession()||eg(this,ZI,OX).call(this,n),C&&this._onStopDragging()};g&&($(this,wh,I.clientX),$(this,ph,I.clientY),$(this,da,I.pointerId),$(this,vm,I.pointerType),window.addEventListener("pointermove",n=>{C||(C=!0,this._onStartDragging());const{clientX:a,clientY:d,pointerId:o}=n;if(o!==M(this,da)){at(n);return}const[c,r]=this.screenToPageTranslation(a-M(this,wh),d-M(this,ph));$(this,wh,a),$(this,ph,d),this._uiManager.dragSelectedEditors(c,r)},A),window.addEventListener("touchmove",at,A),window.addEventListener("pointerdown",n=>{n.pointerType===M(this,vm)&&(M(this,ac)||n.isPrimary)&&s(n),at(n)},A));const l=n=>{if(!M(this,da)||M(this,da)===n.pointerId){s(n);return}at(n)};window.addEventListener("pointerup",l,{signal:e}),window.addEventListener("blur",l,{signal:e})},UX=function(){if(M(this,ra)||!this.div)return;$(this,ra,new AbortController);const I=this._uiManager.combinedSignal(M(this,ra));this.div.addEventListener("focusin",this.focusin.bind(this),{signal:I}),this.div.addEventListener("focusout",this.focusout.bind(this),{signal:I})},v$=function(I){KI._resizerKeyboardManager.exec(this,I)},T$=function(I){var g;M(this,bl)&&((g=I.relatedTarget)==null?void 0:g.parentNode)!==M(this,xt)&&eg(this,ZI,Du).call(this)},x$=function(I){$(this,Tm,M(this,bl)?I:"")},EX=function(I){if(M(this,hA))for(const g of M(this,hA))g.tabIndex=I},Du=function(){$(this,bl,!1),eg(this,ZI,EX).call(this,-1),eg(this,ZI,tN).call(this)},ig(KI,Qm),CI(KI,"_l10n",null),CI(KI,"_l10nResizer",null),CI(KI,"_borderLineWidth",-1),CI(KI,"_colorManager",new KX),CI(KI,"_zIndex",1),CI(KI,"_telemetryTimeout",1e3);let zC=KI;class kog extends zC{constructor(I){super(I),this.annotationElementId=I.annotationElementId,this.deleted=!0}serialize(){return this.serializeDeleted()}}const z6=3285377520,Se=4294901760,qA=65535;class j${constructor(I){this.h1=I?I&4294967295:z6,this.h2=I?I&4294967295:z6}update(I){let g,C;if(typeof I=="string"){g=new Uint8Array(I.length*2),C=0;for(let h=0,b=I.length;h<b;h++){const u=I.charCodeAt(h);u<=255?g[C++]=u:(g[C++]=u>>>8,g[C++]=u&255)}}else if(ArrayBuffer.isView(I))g=I.slice(),C=g.byteLength;else throw new Error("Invalid data format, must be a string or TypedArray.");const i=C>>2,e=C-i*4,A=new Uint32Array(g.buffer,0,i);let s=0,l=0,n=this.h1,a=this.h2;const d=3432918353,o=461845907,c=d&qA,r=o&qA;for(let h=0;h<i;h++)h&1?(s=A[h],s=s*d&Se|s*c&qA,s=s<<15|s>>>17,s=s*o&Se|s*r&qA,n^=s,n=n<<13|n>>>19,n=n*5+3864292196):(l=A[h],l=l*d&Se|l*c&qA,l=l<<15|l>>>17,l=l*o&Se|l*r&qA,a^=l,a=a<<13|a>>>19,a=a*5+3864292196);switch(s=0,e){case 3:s^=g[i*4+2]<<16;case 2:s^=g[i*4+1]<<8;case 1:s^=g[i*4],s=s*d&Se|s*c&qA,s=s<<15|s>>>17,s=s*o&Se|s*r&qA,i&1?n^=s:a^=s}this.h1=n,this.h2=a}hexdigest(){let I=this.h1,g=this.h2;return I^=g>>>1,I=I*3981806797&Se|I*36045&qA,g=g*4283543511&Se|((g<<16|I>>>16)*2950163797&Se)>>>16,I^=g>>>1,I=I*444984403&Se|I*60499&qA,g=g*3301882366&Se|((g<<16|I>>>16)*3120437893&Se)>>>16,I^=g>>>1,(I>>>0).toString(16).padStart(8,"0")+(g>>>0).toString(16).padStart(8,"0")}}const PX=Object.freeze({map:null,hash:"",transfer:void 0});var oc,cc,Rt,pV,Q$;class t9{constructor(){ig(this,pV);ig(this,oc,!1);ig(this,cc,null);ig(this,Rt,new Map);this.onSetModified=null,this.onResetModified=null,this.onAnnotationEditor=null}getValue(I,g){const C=M(this,Rt).get(I);return C===void 0?g:Object.assign(g,C)}getRawValue(I){return M(this,Rt).get(I)}remove(I){if(M(this,Rt).delete(I),M(this,Rt).size===0&&this.resetModified(),typeof this.onAnnotationEditor=="function"){for(const g of M(this,Rt).values())if(g instanceof zC)return;this.onAnnotationEditor(null)}}setValue(I,g){const C=M(this,Rt).get(I);let i=!1;if(C!==void 0)for(const[e,A]of Object.entries(g))C[e]!==A&&(i=!0,C[e]=A);else i=!0,M(this,Rt).set(I,g);i&&eg(this,pV,Q$).call(this),g instanceof zC&&typeof this.onAnnotationEditor=="function"&&this.onAnnotationEditor(g.constructor._type)}has(I){return M(this,Rt).has(I)}getAll(){return M(this,Rt).size>0?PD(M(this,Rt)):null}setAll(I){for(const[g,C]of Object.entries(I))this.setValue(g,C)}get size(){return M(this,Rt).size}resetModified(){M(this,oc)&&($(this,oc,!1),typeof this.onResetModified=="function"&&this.onResetModified())}get print(){return new O$(this)}get serializable(){if(M(this,Rt).size===0)return PX;const I=new Map,g=new j$,C=[],i=Object.create(null);let e=!1;for(const[A,s]of M(this,Rt)){const l=s instanceof zC?s.serialize(!1,i):s;l&&(I.set(A,l),g.update(`${A}:${JSON.stringify(l)}`),e||(e=!!l.bitmap))}if(e)for(const A of I.values())A.bitmap&&C.push(A.bitmap);return I.size>0?{map:I,hash:g.hexdigest(),transfer:C}:PX}get editorStats(){let I=null;const g=new Map;for(const C of M(this,Rt).values()){if(!(C instanceof zC))continue;const i=C.telemetryFinalData;if(!i)continue;const{type:e}=i;g.has(e)||g.set(e,Object.getPrototypeOf(C).constructor),I||(I=Object.create(null));const A=I[e]||(I[e]=new Map);for(const[s,l]of Object.entries(i)){if(s==="type")continue;let n=A.get(s);n||(n=new Map,A.set(s,n));const a=n.get(l)??0;n.set(l,a+1)}}for(const[C,i]of g)I[C]=i.computeTelemetryFinalData(I[C]);return I}resetModifiedIds(){$(this,cc,null)}get modifiedIds(){if(M(this,cc))return M(this,cc);const I=[];for(const g of M(this,Rt).values())!(g instanceof zC)||!g.annotationElementId||!g.serialize()||I.push(g.annotationElementId);return $(this,cc,{ids:new Set(I),hash:I.join(",")})}}oc=new WeakMap,cc=new WeakMap,Rt=new WeakMap,pV=new WeakSet,Q$=function(){M(this,oc)||($(this,oc,!0),typeof this.onSetModified=="function"&&this.onSetModified())};var Om;class O$ extends t9{constructor(g){super();ig(this,Om);const{map:C,hash:i,transfer:e}=g.serializable,A=structuredClone(C,e?{transfer:e}:null);$(this,Om,{map:A,hash:i,transfer:e})}get print(){ZC("Should not call PrintAnnotationStorage.print")}get serializable(){return M(this,Om)}get modifiedIds(){return jI(this,"modifiedIds",{ids:new Set,hash:""})}}Om=new WeakMap;var Bh;class zog{constructor({ownerDocument:I=globalThis.document,styleElement:g=null}){ig(this,Bh,new Set);this._document=I,this.nativeFontFaces=new Set,this.styleElement=null,this.loadingRequests=[],this.loadTestFontId=0}addNativeFontFace(I){this.nativeFontFaces.add(I),this._document.fonts.add(I)}removeNativeFontFace(I){this.nativeFontFaces.delete(I),this._document.fonts.delete(I)}insertRule(I){this.styleElement||(this.styleElement=this._document.createElement("style"),this._document.documentElement.getElementsByTagName("head")[0].append(this.styleElement));const g=this.styleElement.sheet;g.insertRule(I,g.cssRules.length)}clear(){for(const I of this.nativeFontFaces)this._document.fonts.delete(I);this.nativeFontFaces.clear(),M(this,Bh).clear(),this.styleElement&&(this.styleElement.remove(),this.styleElement=null)}async loadSystemFont({systemFontInfo:I,disableFontFace:g,_inspectFont:C}){if(!(!I||M(this,Bh).has(I.loadedName))){if(ct(!g,"loadSystemFont shouldn't be called when `disableFontFace` is set."),this.isFontLoadingAPISupported){const{loadedName:i,src:e,style:A}=I,s=new FontFace(i,e,A);this.addNativeFontFace(s);try{await s.load(),M(this,Bh).add(i),C==null||C(I)}catch{HI(`Cannot load system font: ${I.baseFontName}, installing it could help to improve PDF rendering.`),this.removeNativeFontFace(s)}return}ZC("Not implemented: loadSystemFont without the Font Loading API.")}}async bind(I){if(I.attached||I.missingFile&&!I.systemFontInfo)return;if(I.attached=!0,I.systemFontInfo){await this.loadSystemFont(I);return}if(this.isFontLoadingAPISupported){const C=I.createNativeFontFace();if(C){this.addNativeFontFace(C);try{await C.loaded}catch(i){throw HI(`Failed to load font '${C.family}': '${i}'.`),I.disableFontFace=!0,i}}return}const g=I.createFontFaceRule();if(g){if(this.insertRule(g),this.isSyncFontLoadingSupported)return;await new Promise(C=>{const i=this._queueLoadingCallback(C);this._prepareFontLoadEvent(I,i)})}}get isFontLoadingAPISupported(){var g;const I=!!((g=this._document)!=null&&g.fonts);return jI(this,"isFontLoadingAPISupported",I)}get isSyncFontLoadingSupported(){return jI(this,"isSyncFontLoadingSupported",Ot||gi.platform.isFirefox)}_queueLoadingCallback(I){function g(){for(ct(!i.done,"completeRequest() cannot be called twice."),i.done=!0;C.length>0&&C[0].done;){const e=C.shift();setTimeout(e.callback,0)}}const{loadingRequests:C}=this,i={done:!1,complete:g,callback:I};return C.push(i),i}get _loadTestFont(){const I=atob("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQAFQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAAALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgAAAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACMAooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4DIP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAAAAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUAAQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgABAAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABYAAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAAAC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAAAAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQACAQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTjFQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==");return jI(this,"_loadTestFont",I)}_prepareFontLoadEvent(I,g){function C(p,Y){return p.charCodeAt(Y)<<24|p.charCodeAt(Y+1)<<16|p.charCodeAt(Y+2)<<8|p.charCodeAt(Y+3)&255}function i(p,Y,R,X){const H=p.substring(0,Y),S=p.substring(Y+R);return H+X+S}let e,A;const s=this._document.createElement("canvas");s.width=1,s.height=1;const l=s.getContext("2d");let n=0;function a(p,Y){if(++n>30){HI("Load test font never loaded."),Y();return}if(l.font="30px "+p,l.fillText(".",0,20),l.getImageData(0,0,1,1).data[3]>0){Y();return}setTimeout(a.bind(null,p,Y))}const d=`lt${Date.now()}${this.loadTestFontId++}`;let o=this._loadTestFont;o=i(o,976,d.length,d);const r=16,h=1482184792;let b=C(o,r);for(e=0,A=d.length-3;e<A;e+=4)b=b-h+C(d,e)|0;e<d.length&&(b=b-h+C(d+"XXX",e)|0),o=i(o,r,4,Wog(b));const u=`url(data:font/opentype;base64,${btoa(o)});`,m=`@font-face {font-family:"${d}";src:${u}}`;this.insertRule(m);const Z=this._document.createElement("div");Z.style.visibility="hidden",Z.style.width=Z.style.height="10px",Z.style.position="absolute",Z.style.top=Z.style.left="0px";for(const p of[I.loadedName,d]){const Y=this._document.createElement("span");Y.textContent="Hi",Y.style.fontFamily=p,Z.append(Y)}this._document.body.append(Z),a(d,()=>{Z.remove(),g.complete()})}}Bh=new WeakMap;class Jog{constructor(I,g=null){this.compiledGlyphs=Object.create(null);for(const C in I)this[C]=I[C];this._inspectFont=g}createNativeFontFace(){var g;if(!this.data||this.disableFontFace)return null;let I;if(!this.cssFontInfo)I=new FontFace(this.loadedName,this.data,{});else{const C={weight:this.cssFontInfo.fontWeight};this.cssFontInfo.italicAngle&&(C.style=`oblique ${this.cssFontInfo.italicAngle}deg`),I=new FontFace(this.cssFontInfo.fontFamily,this.data,C)}return(g=this._inspectFont)==null||g.call(this,this),I}createFontFaceRule(){var C;if(!this.data||this.disableFontFace)return null;const I=`url(data:${this.mimetype};base64,${r$(this.data)});`;let g;if(!this.cssFontInfo)g=`@font-face {font-family:"${this.loadedName}";src:${I}}`;else{let i=`font-weight: ${this.cssFontInfo.fontWeight};`;this.cssFontInfo.italicAngle&&(i+=`font-style: oblique ${this.cssFontInfo.italicAngle}deg;`),g=`@font-face {font-family:"${this.cssFontInfo.fontFamily}";${i}src:${I}}`}return(C=this._inspectFont)==null||C.call(this,this,I),g}getPathGenerator(I,g){if(this.compiledGlyphs[g]!==void 0)return this.compiledGlyphs[g];const C=this.loadedName+"_path_"+g;let i;try{i=I.get(C)}catch(A){HI(`getPathGenerator - ignoring character: "${A}".`)}const e=new Path2D(i||"");return this.fontExtraProperties||I.delete(C),this.compiledGlyphs[g]=e}}const BY={DATA:1,ERROR:2},st={CANCEL:1,CANCEL_COMPLETE:2,CLOSE:3,ENQUEUE:4,ERROR:5,PULL:6,PULL_COMPLETE:7,START_COMPLETE:8};function J6(){}function Ki(t){if(t instanceof za||t instanceof fX||t instanceof K6||t instanceof LN||t instanceof NH)return t;switch(t instanceof Error||typeof t=="object"&&t!==null||ZC('wrapReason: Expected "reason" to be a (possibly cloned) Error.'),t.name){case"AbortException":return new za(t.message);case"InvalidPDFException":return new fX(t.message);case"PasswordException":return new K6(t.message,t.code);case"ResponseException":return new LN(t.message,t.status,t.missing);case"UnknownErrorException":return new NH(t.message,t.details)}return new NH(t.message,t.toString())}var Wh,Ee,U$,E$,P$,iN;class Ku{constructor(I,g,C){ig(this,Ee);ig(this,Wh,new AbortController);this.sourceName=I,this.targetName=g,this.comObj=C,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),C.addEventListener("message",eg(this,Ee,U$).bind(this),{signal:M(this,Wh).signal})}on(I,g){const C=this.actionHandler;if(C[I])throw new Error(`There is already an actionName called "${I}"`);C[I]=g}send(I,g,C){this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:I,data:g},C)}sendWithPromise(I,g,C){const i=this.callbackId++,e=Promise.withResolvers();this.callbackCapabilities[i]=e;try{this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:I,callbackId:i,data:g},C)}catch(A){e.reject(A)}return e.promise}sendWithStream(I,g,C,i){const e=this.streamId++,A=this.sourceName,s=this.targetName,l=this.comObj;return new ReadableStream({start:n=>{const a=Promise.withResolvers();return this.streamControllers[e]={controller:n,startCall:a,pullCall:null,cancelCall:null,isClosed:!1},l.postMessage({sourceName:A,targetName:s,action:I,streamId:e,data:g,desiredSize:n.desiredSize},i),a.promise},pull:n=>{const a=Promise.withResolvers();return this.streamControllers[e].pullCall=a,l.postMessage({sourceName:A,targetName:s,stream:st.PULL,streamId:e,desiredSize:n.desiredSize}),a.promise},cancel:n=>{ct(n instanceof Error,"cancel must have a valid reason");const a=Promise.withResolvers();return this.streamControllers[e].cancelCall=a,this.streamControllers[e].isClosed=!0,l.postMessage({sourceName:A,targetName:s,stream:st.CANCEL,streamId:e,reason:Ki(n)}),a.promise}},C)}destroy(){var I;(I=M(this,Wh))==null||I.abort(),$(this,Wh,null)}}Wh=new WeakMap,Ee=new WeakSet,U$=function({data:I}){if(I.targetName!==this.sourceName)return;if(I.stream){eg(this,Ee,P$).call(this,I);return}if(I.callback){const C=I.callbackId,i=this.callbackCapabilities[C];if(!i)throw new Error(`Cannot resolve callback ${C}`);if(delete this.callbackCapabilities[C],I.callback===BY.DATA)i.resolve(I.data);else if(I.callback===BY.ERROR)i.reject(Ki(I.reason));else throw new Error("Unexpected callback case");return}const g=this.actionHandler[I.action];if(!g)throw new Error(`Unknown action from worker: ${I.action}`);if(I.callbackId){const C=this.sourceName,i=I.sourceName,e=this.comObj;Promise.try(g,I.data).then(function(A){e.postMessage({sourceName:C,targetName:i,callback:BY.DATA,callbackId:I.callbackId,data:A})},function(A){e.postMessage({sourceName:C,targetName:i,callback:BY.ERROR,callbackId:I.callbackId,reason:Ki(A)})});return}if(I.streamId){eg(this,Ee,E$).call(this,I);return}g(I.data)},E$=function(I){const g=I.streamId,C=this.sourceName,i=I.sourceName,e=this.comObj,A=this,s=this.actionHandler[I.action],l={enqueue(n,a=1,d){if(this.isCancelled)return;const o=this.desiredSize;this.desiredSize-=a,o>0&&this.desiredSize<=0&&(this.sinkCapability=Promise.withResolvers(),this.ready=this.sinkCapability.promise),e.postMessage({sourceName:C,targetName:i,stream:st.ENQUEUE,streamId:g,chunk:n},d)},close(){this.isCancelled||(this.isCancelled=!0,e.postMessage({sourceName:C,targetName:i,stream:st.CLOSE,streamId:g}),delete A.streamSinks[g])},error(n){ct(n instanceof Error,"error must have a valid reason"),!this.isCancelled&&(this.isCancelled=!0,e.postMessage({sourceName:C,targetName:i,stream:st.ERROR,streamId:g,reason:Ki(n)}))},sinkCapability:Promise.withResolvers(),onPull:null,onCancel:null,isCancelled:!1,desiredSize:I.desiredSize,ready:null};l.sinkCapability.resolve(),l.ready=l.sinkCapability.promise,this.streamSinks[g]=l,Promise.try(s,I.data,l).then(function(){e.postMessage({sourceName:C,targetName:i,stream:st.START_COMPLETE,streamId:g,success:!0})},function(n){e.postMessage({sourceName:C,targetName:i,stream:st.START_COMPLETE,streamId:g,reason:Ki(n)})})},P$=function(I){const g=I.streamId,C=this.sourceName,i=I.sourceName,e=this.comObj,A=this.streamControllers[g],s=this.streamSinks[g];switch(I.stream){case st.START_COMPLETE:I.success?A.startCall.resolve():A.startCall.reject(Ki(I.reason));break;case st.PULL_COMPLETE:I.success?A.pullCall.resolve():A.pullCall.reject(Ki(I.reason));break;case st.PULL:if(!s){e.postMessage({sourceName:C,targetName:i,stream:st.PULL_COMPLETE,streamId:g,success:!0});break}s.desiredSize<=0&&I.desiredSize>0&&s.sinkCapability.resolve(),s.desiredSize=I.desiredSize,Promise.try(s.onPull||J6).then(function(){e.postMessage({sourceName:C,targetName:i,stream:st.PULL_COMPLETE,streamId:g,success:!0})},function(n){e.postMessage({sourceName:C,targetName:i,stream:st.PULL_COMPLETE,streamId:g,reason:Ki(n)})});break;case st.ENQUEUE:if(ct(A,"enqueue should have stream controller"),A.isClosed)break;A.controller.enqueue(I.chunk);break;case st.CLOSE:if(ct(A,"close should have stream controller"),A.isClosed)break;A.isClosed=!0,A.controller.close(),eg(this,Ee,iN).call(this,A,g);break;case st.ERROR:ct(A,"error should have stream controller"),A.controller.error(Ki(I.reason)),eg(this,Ee,iN).call(this,A,g);break;case st.CANCEL_COMPLETE:I.success?A.cancelCall.resolve():A.cancelCall.reject(Ki(I.reason)),eg(this,Ee,iN).call(this,A,g);break;case st.CANCEL:if(!s)break;const l=Ki(I.reason);Promise.try(s.onCancel||J6,l).then(function(){e.postMessage({sourceName:C,targetName:i,stream:st.CANCEL_COMPLETE,streamId:g,success:!0})},function(n){e.postMessage({sourceName:C,targetName:i,stream:st.CANCEL_COMPLETE,streamId:g,reason:Ki(n)})}),s.sinkCapability.reject(l),s.isCancelled=!0,delete this.streamSinks[g];break;default:throw new Error("Unexpected stream case")}},iN=async function(I,g){var C,i,e;await Promise.allSettled([(C=I.startCall)==null?void 0:C.promise,(i=I.pullCall)==null?void 0:i.promise,(e=I.cancelCall)==null?void 0:e.promise]),delete this.streamControllers[g]};var Um;class _${constructor({enableHWA:I=!1}){ig(this,Um,!1);$(this,Um,I)}create(I,g){if(I<=0||g<=0)throw new Error("Invalid canvas size");const C=this._createCanvas(I,g);return{canvas:C,context:C.getContext("2d",{willReadFrequently:!M(this,Um)})}}reset(I,g,C){if(!I.canvas)throw new Error("Canvas is not specified");if(g<=0||C<=0)throw new Error("Invalid canvas size");I.canvas.width=g,I.canvas.height=C}destroy(I){if(!I.canvas)throw new Error("Canvas is not specified");I.canvas.width=0,I.canvas.height=0,I.canvas=null,I.context=null}_createCanvas(I,g){ZC("Abstract method `_createCanvas` called.")}}Um=new WeakMap;class Log extends _${constructor({ownerDocument:I=globalThis.document,enableHWA:g=!1}){super({enableHWA:g}),this._document=I}_createCanvas(I,g){const C=this._document.createElement("canvas");return C.width=I,C.height=g,C}}class q${constructor({baseUrl:I=null,isCompressed:g=!0}){this.baseUrl=I,this.isCompressed=g}async fetch({name:I}){if(!this.baseUrl)throw new Error("Ensure that the `cMapUrl` and `cMapPacked` API parameters are provided.");if(!I)throw new Error("CMap name must be specified.");const g=this.baseUrl+I+(this.isCompressed?".bcmap":"");return this._fetch(g).then(C=>({cMapData:C,isCompressed:this.isCompressed})).catch(C=>{throw new Error(`Unable to load ${this.isCompressed?"binary ":""}CMap at: ${g}`)})}async _fetch(I){ZC("Abstract method `_fetch` called.")}}class L6 extends q${async _fetch(I){const g=await OZ(I,this.isCompressed?"arraybuffer":"text");return g instanceof ArrayBuffer?new Uint8Array(g):QZ(g)}}class $${addFilter(I){return"none"}addHCMFilter(I,g){return"none"}addAlphaFilter(I){return"none"}addLuminosityFilter(I){return"none"}addHighlightHCMFilter(I,g,C,i,e){return"none"}destroy(I=!1){}}var dc,yh,ul,ml,ci,rc,hc,Pg,ai,Fu,kr,eN,zr,ggg,_X,Jr,ku,zu,qX,Ju;class vog extends $${constructor({docId:g,ownerDocument:C=globalThis.document}){super();ig(this,Pg);ig(this,dc);ig(this,yh);ig(this,ul);ig(this,ml);ig(this,ci);ig(this,rc);ig(this,hc,0);$(this,ml,g),$(this,ci,C)}addFilter(g){if(!g)return"none";let C=M(this,Pg,ai).get(g);if(C)return C;const[i,e,A]=eg(this,Pg,eN).call(this,g),s=g.length===1?i:`${i}${e}${A}`;if(C=M(this,Pg,ai).get(s),C)return M(this,Pg,ai).set(g,C),C;const l=`g_${M(this,ml)}_transfer_map_${ui(this,hc)._++}`,n=eg(this,Pg,zr).call(this,l);M(this,Pg,ai).set(g,n),M(this,Pg,ai).set(s,n);const a=eg(this,Pg,Jr).call(this,l);return eg(this,Pg,zu).call(this,i,e,A,a),n}addHCMFilter(g,C){var r;const i=`${g}-${C}`,e="base";let A=M(this,Pg,Fu).get(e);if((A==null?void 0:A.key)===i||(A?((r=A.filter)==null||r.remove(),A.key=i,A.url="none",A.filter=null):(A={key:i,url:"none",filter:null},M(this,Pg,Fu).set(e,A)),!g||!C))return A.url;const s=eg(this,Pg,Ju).call(this,g);g=iI.makeHexColor(...s);const l=eg(this,Pg,Ju).call(this,C);if(C=iI.makeHexColor(...l),M(this,Pg,kr).style.color="",g==="#000000"&&C==="#ffffff"||g===C)return A.url;const n=new Array(256);for(let h=0;h<=255;h++){const b=h/255;n[h]=b<=.03928?b/12.92:((b+.055)/1.055)**2.4}const a=n.join(","),d=`g_${M(this,ml)}_hcm_filter`,o=A.filter=eg(this,Pg,Jr).call(this,d);eg(this,Pg,zu).call(this,a,a,a,o),eg(this,Pg,_X).call(this,o);const c=(h,b)=>{const u=s[h]/255,m=l[h]/255,Z=new Array(b+1);for(let p=0;p<=b;p++)Z[p]=u+p/b*(m-u);return Z.join(",")};return eg(this,Pg,zu).call(this,c(0,5),c(1,5),c(2,5),o),A.url=eg(this,Pg,zr).call(this,d),A.url}addAlphaFilter(g){let C=M(this,Pg,ai).get(g);if(C)return C;const[i]=eg(this,Pg,eN).call(this,[g]),e=`alpha_${i}`;if(C=M(this,Pg,ai).get(e),C)return M(this,Pg,ai).set(g,C),C;const A=`g_${M(this,ml)}_alpha_map_${ui(this,hc)._++}`,s=eg(this,Pg,zr).call(this,A);M(this,Pg,ai).set(g,s),M(this,Pg,ai).set(e,s);const l=eg(this,Pg,Jr).call(this,A);return eg(this,Pg,qX).call(this,i,l),s}addLuminosityFilter(g){let C=M(this,Pg,ai).get(g||"luminosity");if(C)return C;let i,e;if(g?([i]=eg(this,Pg,eN).call(this,[g]),e=`luminosity_${i}`):e="luminosity",C=M(this,Pg,ai).get(e),C)return M(this,Pg,ai).set(g,C),C;const A=`g_${M(this,ml)}_luminosity_map_${ui(this,hc)._++}`,s=eg(this,Pg,zr).call(this,A);M(this,Pg,ai).set(g,s),M(this,Pg,ai).set(e,s);const l=eg(this,Pg,Jr).call(this,A);return eg(this,Pg,ggg).call(this,l),g&&eg(this,Pg,qX).call(this,i,l),s}addHighlightHCMFilter(g,C,i,e,A){var m;const s=`${C}-${i}-${e}-${A}`;let l=M(this,Pg,Fu).get(g);if((l==null?void 0:l.key)===s||(l?((m=l.filter)==null||m.remove(),l.key=s,l.url="none",l.filter=null):(l={key:s,url:"none",filter:null},M(this,Pg,Fu).set(g,l)),!C||!i))return l.url;const[n,a]=[C,i].map(eg(this,Pg,Ju).bind(this));let d=Math.round(.2126*n[0]+.7152*n[1]+.0722*n[2]),o=Math.round(.2126*a[0]+.7152*a[1]+.0722*a[2]),[c,r]=[e,A].map(eg(this,Pg,Ju).bind(this));o<d&&([d,o,c,r]=[o,d,r,c]),M(this,Pg,kr).style.color="";const h=(Z,p,Y)=>{const R=new Array(256),X=(o-d)/Y,H=Z/255,S=(p-Z)/(255*Y);let z=0;for(let v=0;v<=Y;v++){const K=Math.round(d+v*X),V=H+v*S;for(let N=z;N<=K;N++)R[N]=V;z=K+1}for(let v=z;v<256;v++)R[v]=R[z-1];return R.join(",")},b=`g_${M(this,ml)}_hcm_${g}_filter`,u=l.filter=eg(this,Pg,Jr).call(this,b);return eg(this,Pg,_X).call(this,u),eg(this,Pg,zu).call(this,h(c[0],r[0],5),h(c[1],r[1],5),h(c[2],r[2],5),u),l.url=eg(this,Pg,zr).call(this,b),l.url}destroy(g=!1){var C,i,e,A;g&&((C=M(this,rc))!=null&&C.size)||((i=M(this,ul))==null||i.parentNode.parentNode.remove(),$(this,ul,null),(e=M(this,yh))==null||e.clear(),$(this,yh,null),(A=M(this,rc))==null||A.clear(),$(this,rc,null),$(this,hc,0))}}dc=new WeakMap,yh=new WeakMap,ul=new WeakMap,ml=new WeakMap,ci=new WeakMap,rc=new WeakMap,hc=new WeakMap,Pg=new WeakSet,ai=function(){return M(this,yh)||$(this,yh,new Map)},Fu=function(){return M(this,rc)||$(this,rc,new Map)},kr=function(){if(!M(this,ul)){const g=M(this,ci).createElement("div"),{style:C}=g;C.visibility="hidden",C.contain="strict",C.width=C.height=0,C.position="absolute",C.top=C.left=0,C.zIndex=-1;const i=M(this,ci).createElementNS(tl,"svg");i.setAttribute("width",0),i.setAttribute("height",0),$(this,ul,M(this,ci).createElementNS(tl,"defs")),g.append(i),i.append(M(this,ul)),M(this,ci).body.append(g)}return M(this,ul)},eN=function(g){if(g.length===1){const n=g[0],a=new Array(256);for(let o=0;o<256;o++)a[o]=n[o]/255;const d=a.join(",");return[d,d,d]}const[C,i,e]=g,A=new Array(256),s=new Array(256),l=new Array(256);for(let n=0;n<256;n++)A[n]=C[n]/255,s[n]=i[n]/255,l[n]=e[n]/255;return[A.join(","),s.join(","),l.join(",")]},zr=function(g){if(M(this,dc)===void 0){$(this,dc,"");const C=M(this,ci).URL;C!==M(this,ci).baseURI&&(kV(C)?HI('#createUrl: ignore "data:"-URL for performance reasons.'):$(this,dc,C.split("#",1)[0]))}return`url(${M(this,dc)}#${g})`},ggg=function(g){const C=M(this,ci).createElementNS(tl,"feColorMatrix");C.setAttribute("type","matrix"),C.setAttribute("values","0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.59 0.11 0 0"),g.append(C)},_X=function(g){const C=M(this,ci).createElementNS(tl,"feColorMatrix");C.setAttribute("type","matrix"),C.setAttribute("values","0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0"),g.append(C)},Jr=function(g){const C=M(this,ci).createElementNS(tl,"filter");return C.setAttribute("color-interpolation-filters","sRGB"),C.setAttribute("id",g),M(this,Pg,kr).append(C),C},ku=function(g,C,i){const e=M(this,ci).createElementNS(tl,C);e.setAttribute("type","discrete"),e.setAttribute("tableValues",i),g.append(e)},zu=function(g,C,i,e){const A=M(this,ci).createElementNS(tl,"feComponentTransfer");e.append(A),eg(this,Pg,ku).call(this,A,"feFuncR",g),eg(this,Pg,ku).call(this,A,"feFuncG",C),eg(this,Pg,ku).call(this,A,"feFuncB",i)},qX=function(g,C){const i=M(this,ci).createElementNS(tl,"feComponentTransfer");C.append(i),eg(this,Pg,ku).call(this,i,"feFuncA",g)},Ju=function(g){return M(this,Pg,kr).style.color=g,I9(getComputedStyle(M(this,Pg,kr)).getPropertyValue("color"))};class Igg{constructor({baseUrl:I=null}){this.baseUrl=I}async fetch({filename:I}){if(!this.baseUrl)throw new Error("Ensure that the `standardFontDataUrl` API parameter is provided.");if(!I)throw new Error("Font filename must be specified.");const g=`${this.baseUrl}${I}`;return this._fetch(g).catch(C=>{throw new Error(`Unable to load font data at: ${g}`)})}async _fetch(I){ZC("Abstract method `_fetch` called.")}}class v6 extends Igg{async _fetch(I){const g=await OZ(I,"arraybuffer");return new Uint8Array(g)}}class Cgg{constructor({baseUrl:I=null}){this.baseUrl=I}async fetch({filename:I}){if(!this.baseUrl)throw new Error("Ensure that the `wasmUrl` API parameter is provided.");if(!I)throw new Error("Wasm filename must be specified.");const g=`${this.baseUrl}${I}`;return this._fetch(g).catch(C=>{throw new Error(`Unable to load wasm data at: ${g}`)})}async _fetch(I){ZC("Abstract method `_fetch` called.")}}class T6 extends Cgg{async _fetch(I){const g=await OZ(I,"arraybuffer");return new Uint8Array(g)}}Ot&&HI("Please use the `legacy` build in Node.js environments.");async function i9(t){const g=await process.getBuiltinModule("fs").promises.readFile(t);return new Uint8Array(g)}class Tog extends $${}class xog extends _${_createCanvas(I,g){return process.getBuiltinModule("module").createRequire(typeof document>"u"?require("url").pathToFileURL(__filename).href:gh&&gh.tagName.toUpperCase()==="SCRIPT"&&gh.src||new URL("index.cjs",document.baseURI).href)("@napi-rs/canvas").createCanvas(I,g)}}class jog extends q${async _fetch(I){return i9(I)}}class Qog extends Igg{async _fetch(I){return i9(I)}}class Oog extends Cgg{async _fetch(I){return i9(I)}}const Pt={FILL:"Fill",STROKE:"Stroke",SHADING:"Shading"};function $X(t,I){if(!I)return;const g=I[2]-I[0],C=I[3]-I[1],i=new Path2D;i.rect(I[0],I[1],g,C),t.clip(i)}class e9{isModifyingCurrentTransform(){return!1}getPattern(){ZC("Abstract method `getPattern` called.")}}class Uog extends e9{constructor(I){super(),this._type=I[1],this._bbox=I[2],this._colorStops=I[3],this._p0=I[4],this._p1=I[5],this._r0=I[6],this._r1=I[7],this.matrix=null}_createGradient(I){let g;this._type==="axial"?g=I.createLinearGradient(this._p0[0],this._p0[1],this._p1[0],this._p1[1]):this._type==="radial"&&(g=I.createRadialGradient(this._p0[0],this._p0[1],this._r0,this._p1[0],this._p1[1],this._r1));for(const C of this._colorStops)g.addColorStop(C[0],C[1]);return g}getPattern(I,g,C,i){let e;if(i===Pt.STROKE||i===Pt.FILL){const A=g.current.getClippedPathBoundingBox(i,DC(I))||[0,0,0,0],s=Math.ceil(A[2]-A[0])||1,l=Math.ceil(A[3]-A[1])||1,n=g.cachedCanvases.getCanvas("pattern",s,l),a=n.context;a.clearRect(0,0,a.canvas.width,a.canvas.height),a.beginPath(),a.rect(0,0,a.canvas.width,a.canvas.height),a.translate(-A[0],-A[1]),C=iI.transform(C,[1,0,0,1,A[0],A[1]]),a.transform(...g.baseTransform),this.matrix&&a.transform(...this.matrix),$X(a,this._bbox),a.fillStyle=this._createGradient(a),a.fill(),e=I.createPattern(n.canvas,"no-repeat");const d=new DOMMatrix(C);e.setTransform(d)}else $X(I,this._bbox),e=this._createGradient(I);return e}}function RH(t,I,g,C,i,e,A,s){const l=I.coords,n=I.colors,a=t.data,d=t.width*4;let o;l[g+1]>l[C+1]&&(o=g,g=C,C=o,o=e,e=A,A=o),l[C+1]>l[i+1]&&(o=C,C=i,i=o,o=A,A=s,s=o),l[g+1]>l[C+1]&&(o=g,g=C,C=o,o=e,e=A,A=o);const c=(l[g]+I.offsetX)*I.scaleX,r=(l[g+1]+I.offsetY)*I.scaleY,h=(l[C]+I.offsetX)*I.scaleX,b=(l[C+1]+I.offsetY)*I.scaleY,u=(l[i]+I.offsetX)*I.scaleX,m=(l[i+1]+I.offsetY)*I.scaleY;if(r>=m)return;const Z=n[e],p=n[e+1],Y=n[e+2],R=n[A],X=n[A+1],H=n[A+2],S=n[s],z=n[s+1],v=n[s+2],K=Math.round(r),V=Math.round(m);let N,B,G,w,W,y,f,D;for(let F=K;F<=V;F++){if(F<b){const E=F<r?0:(r-F)/(r-b);N=c-(c-h)*E,B=Z-(Z-R)*E,G=p-(p-X)*E,w=Y-(Y-H)*E}else{let E;F>m?E=1:b===m?E=0:E=(b-F)/(b-m),N=h-(h-u)*E,B=R-(R-S)*E,G=X-(X-z)*E,w=H-(H-v)*E}let T;F<r?T=0:F>m?T=1:T=(r-F)/(r-m),W=c-(c-u)*T,y=Z-(Z-S)*T,f=p-(p-z)*T,D=Y-(Y-v)*T;const Q=Math.round(Math.min(N,W)),P=Math.round(Math.max(N,W));let L=d*F+Q*4;for(let E=Q;E<=P;E++)T=(N-E)/(N-W),T<0?T=0:T>1&&(T=1),a[L++]=B-(B-y)*T|0,a[L++]=G-(G-f)*T|0,a[L++]=w-(w-D)*T|0,a[L++]=255}}function Eog(t,I,g){const C=I.coords,i=I.colors;let e,A;switch(I.type){case"lattice":const s=I.verticesPerRow,l=Math.floor(C.length/s)-1,n=s-1;for(e=0;e<l;e++){let a=e*s;for(let d=0;d<n;d++,a++)RH(t,g,C[a],C[a+1],C[a+s],i[a],i[a+1],i[a+s]),RH(t,g,C[a+s+1],C[a+1],C[a+s],i[a+s+1],i[a+1],i[a+s])}break;case"triangles":for(e=0,A=C.length;e<A;e+=3)RH(t,g,C[e],C[e+1],C[e+2],i[e],i[e+1],i[e+2]);break;default:throw new Error("illegal figure")}}class Pog extends e9{constructor(I){super(),this._coords=I[2],this._colors=I[3],this._figures=I[4],this._bounds=I[5],this._bbox=I[6],this._background=I[7],this.matrix=null}_createMeshCanvas(I,g,C){const s=Math.floor(this._bounds[0]),l=Math.floor(this._bounds[1]),n=Math.ceil(this._bounds[2])-s,a=Math.ceil(this._bounds[3])-l,d=Math.min(Math.ceil(Math.abs(n*I[0]*1.1)),3e3),o=Math.min(Math.ceil(Math.abs(a*I[1]*1.1)),3e3),c=n/d,r=a/o,h={coords:this._coords,colors:this._colors,offsetX:-s,offsetY:-l,scaleX:1/c,scaleY:1/r},b=d+2*2,u=o+2*2,m=C.getCanvas("mesh",b,u),Z=m.context,p=Z.createImageData(d,o);if(g){const R=p.data;for(let X=0,H=R.length;X<H;X+=4)R[X]=g[0],R[X+1]=g[1],R[X+2]=g[2],R[X+3]=255}for(const R of this._figures)Eog(p,R,h);return Z.putImageData(p,2,2),{canvas:m.canvas,offsetX:s-2*c,offsetY:l-2*r,scaleX:c,scaleY:r}}isModifyingCurrentTransform(){return!0}getPattern(I,g,C,i){$X(I,this._bbox);let e;if(i===Pt.SHADING)e=iI.singularValueDecompose2dScale(DC(I));else if(e=iI.singularValueDecompose2dScale(g.baseTransform),this.matrix){const s=iI.singularValueDecompose2dScale(this.matrix);e=[e[0]*s[0],e[1]*s[1]]}const A=this._createMeshCanvas(e,i===Pt.SHADING?null:this._background,g.cachedCanvases);return i!==Pt.SHADING&&(I.setTransform(...g.baseTransform),this.matrix&&I.transform(...this.matrix)),I.translate(A.offsetX,A.offsetY),I.scale(A.scaleX,A.scaleY),I.createPattern(A.canvas,"no-repeat")}}class _og extends e9{getPattern(){return"hotpink"}}function qog(t){switch(t[0]){case"RadialAxial":return new Uog(t);case"Mesh":return new Pog(t);case"Dummy":return new _og}throw new Error(`Unknown IR type: ${t[0]}`)}const x6={COLORED:1,UNCOLORED:2},BV=class BV{constructor(I,g,C,i){this.color=I[1],this.operatorList=I[2],this.matrix=I[3],this.bbox=I[4],this.xstep=I[5],this.ystep=I[6],this.paintType=I[7],this.tilingType=I[8],this.ctx=g,this.canvasGraphicsFactory=C,this.baseTransform=i}createPatternCanvas(I){const{bbox:g,operatorList:C,paintType:i,tilingType:e,color:A,canvasGraphicsFactory:s}=this;let{xstep:l,ystep:n}=this;l=Math.abs(l),n=Math.abs(n),FV("TilingType: "+e);const a=g[0],d=g[1],o=g[2],c=g[3],r=o-a,h=c-d,b=iI.singularValueDecompose2dScale(this.matrix),u=iI.singularValueDecompose2dScale(this.baseTransform),m=b[0]*u[0],Z=b[1]*u[1];let p=r,Y=h,R=!1,X=!1;const H=Math.ceil(l*m),S=Math.ceil(n*Z),z=Math.ceil(r*m),v=Math.ceil(h*Z);H>=z?p=l:R=!0,S>=v?Y=n:X=!0;const K=this.getSizeAndScale(p,this.ctx.canvas.width,m),V=this.getSizeAndScale(Y,this.ctx.canvas.height,Z),N=I.cachedCanvases.getCanvas("pattern",K.size,V.size),B=N.context,G=s.createCanvasGraphics(B);if(G.groupLevel=I.groupLevel,this.setFillAndStrokeStyleToContext(G,i,A),B.translate(-K.scale*a,-V.scale*d),G.transform(K.scale,0,0,V.scale,0,0),B.save(),this.clipBbox(G,a,d,o,c),G.baseTransform=DC(G.ctx),G.executeOperatorList(C),G.endDrawing(),B.restore(),R||X){const w=N.canvas;R&&(p=l),X&&(Y=n);const W=this.getSizeAndScale(p,this.ctx.canvas.width,m),y=this.getSizeAndScale(Y,this.ctx.canvas.height,Z),f=W.size,D=y.size,F=I.cachedCanvases.getCanvas("pattern-workaround",f,D),T=F.context,Q=R?Math.floor(r/l):0,P=X?Math.floor(h/n):0;for(let L=0;L<=Q;L++)for(let E=0;E<=P;E++)T.drawImage(w,f*L,D*E,f,D,0,0,f,D);return{canvas:F.canvas,scaleX:W.scale,scaleY:y.scale,offsetX:a,offsetY:d}}return{canvas:N.canvas,scaleX:K.scale,scaleY:V.scale,offsetX:a,offsetY:d}}getSizeAndScale(I,g,C){const i=Math.max(BV.MAX_PATTERN_SIZE,g);let e=Math.ceil(I*C);return e>=i?e=i:C=e/I,{scale:C,size:e}}clipBbox(I,g,C,i,e){const A=i-g,s=e-C;I.ctx.rect(g,C,A,s),I.current.updateRectMinMax(DC(I.ctx),[g,C,i,e]),I.clip(),I.endPath()}setFillAndStrokeStyleToContext(I,g,C){const i=I.ctx,e=I.current;switch(g){case x6.COLORED:const A=this.ctx;i.fillStyle=A.fillStyle,i.strokeStyle=A.strokeStyle,e.fillColor=A.fillStyle,e.strokeColor=A.strokeStyle;break;case x6.UNCOLORED:const s=iI.makeHexColor(C[0],C[1],C[2]);i.fillStyle=s,i.strokeStyle=s,e.fillColor=s,e.strokeColor=s;break;default:throw new Bog(`Unsupported paint type: ${g}`)}}isModifyingCurrentTransform(){return!1}getPattern(I,g,C,i){let e=C;i!==Pt.SHADING&&(e=iI.transform(e,g.baseTransform),this.matrix&&(e=iI.transform(e,this.matrix)));const A=this.createPatternCanvas(g);let s=new DOMMatrix(e);s=s.translate(A.offsetX,A.offsetY),s=s.scale(1/A.scaleX,1/A.scaleY);const l=I.createPattern(A.canvas,"repeat");return l.setTransform(s),l}};CI(BV,"MAX_PATTERN_SIZE",3e3);let gS=BV;function $og({src:t,srcPos:I=0,dest:g,width:C,height:i,nonBlackColor:e=4294967295,inverseDecode:A=!1}){const s=gi.isLittleEndian?4278190080:255,[l,n]=A?[e,s]:[s,e],a=C>>3,d=C&7,o=t.length;g=new Uint32Array(g.buffer);let c=0;for(let r=0;r<i;r++){for(const b=I+a;I<b;I++){const u=I<o?t[I]:255;g[c++]=u&128?n:l,g[c++]=u&64?n:l,g[c++]=u&32?n:l,g[c++]=u&16?n:l,g[c++]=u&8?n:l,g[c++]=u&4?n:l,g[c++]=u&2?n:l,g[c++]=u&1?n:l}if(d===0)continue;const h=I<o?t[I++]:255;for(let b=0;b<d;b++)g[c++]=h&1<<7-b?n:l}return{srcPos:I,destPos:c}}const j6=16,Q6=100,gcg=15,O6=10,U6=1e3,Li=16,fH=new DOMMatrix;function Icg(t,I){if(t._removeMirroring)throw new Error("Context is already forwarding operations.");t.__originalSave=t.save,t.__originalRestore=t.restore,t.__originalRotate=t.rotate,t.__originalScale=t.scale,t.__originalTranslate=t.translate,t.__originalTransform=t.transform,t.__originalSetTransform=t.setTransform,t.__originalResetTransform=t.resetTransform,t.__originalClip=t.clip,t.__originalMoveTo=t.moveTo,t.__originalLineTo=t.lineTo,t.__originalBezierCurveTo=t.bezierCurveTo,t.__originalRect=t.rect,t.__originalClosePath=t.closePath,t.__originalBeginPath=t.beginPath,t._removeMirroring=()=>{t.save=t.__originalSave,t.restore=t.__originalRestore,t.rotate=t.__originalRotate,t.scale=t.__originalScale,t.translate=t.__originalTranslate,t.transform=t.__originalTransform,t.setTransform=t.__originalSetTransform,t.resetTransform=t.__originalResetTransform,t.clip=t.__originalClip,t.moveTo=t.__originalMoveTo,t.lineTo=t.__originalLineTo,t.bezierCurveTo=t.__originalBezierCurveTo,t.rect=t.__originalRect,t.closePath=t.__originalClosePath,t.beginPath=t.__originalBeginPath,delete t._removeMirroring},t.save=function(){I.save(),this.__originalSave()},t.restore=function(){I.restore(),this.__originalRestore()},t.translate=function(C,i){I.translate(C,i),this.__originalTranslate(C,i)},t.scale=function(C,i){I.scale(C,i),this.__originalScale(C,i)},t.transform=function(C,i,e,A,s,l){I.transform(C,i,e,A,s,l),this.__originalTransform(C,i,e,A,s,l)},t.setTransform=function(C,i,e,A,s,l){I.setTransform(C,i,e,A,s,l),this.__originalSetTransform(C,i,e,A,s,l)},t.resetTransform=function(){I.resetTransform(),this.__originalResetTransform()},t.rotate=function(C){I.rotate(C),this.__originalRotate(C)},t.clip=function(C){I.clip(C),this.__originalClip(C)},t.moveTo=function(g,C){I.moveTo(g,C),this.__originalMoveTo(g,C)},t.lineTo=function(g,C){I.lineTo(g,C),this.__originalLineTo(g,C)},t.bezierCurveTo=function(g,C,i,e,A,s){I.bezierCurveTo(g,C,i,e,A,s),this.__originalBezierCurveTo(g,C,i,e,A,s)},t.rect=function(g,C,i,e){I.rect(g,C,i,e),this.__originalRect(g,C,i,e)},t.closePath=function(){I.closePath(),this.__originalClosePath()},t.beginPath=function(){I.beginPath(),this.__originalBeginPath()}}class Ccg{constructor(I){this.canvasFactory=I,this.cache=Object.create(null)}getCanvas(I,g,C){let i;return this.cache[I]!==void 0?(i=this.cache[I],this.canvasFactory.reset(i,g,C)):(i=this.canvasFactory.create(g,C),this.cache[I]=i),i}delete(I){delete this.cache[I]}clear(){for(const I in this.cache){const g=this.cache[I];this.canvasFactory.destroy(g),delete this.cache[I]}}}function WY(t,I,g,C,i,e,A,s,l,n){const[a,d,o,c,r,h]=DC(t);if(d===0&&o===0){const m=A*a+r,Z=Math.round(m),p=s*c+h,Y=Math.round(p),R=(A+l)*a+r,X=Math.abs(Math.round(R)-Z)||1,H=(s+n)*c+h,S=Math.abs(Math.round(H)-Y)||1;return t.setTransform(Math.sign(a),0,0,Math.sign(c),Z,Y),t.drawImage(I,g,C,i,e,0,0,X,S),t.setTransform(a,d,o,c,r,h),[X,S]}if(a===0&&c===0){const m=s*o+r,Z=Math.round(m),p=A*d+h,Y=Math.round(p),R=(s+n)*o+r,X=Math.abs(Math.round(R)-Z)||1,H=(A+l)*d+h,S=Math.abs(Math.round(H)-Y)||1;return t.setTransform(0,Math.sign(d),Math.sign(o),0,Z,Y),t.drawImage(I,g,C,i,e,0,0,S,X),t.setTransform(a,d,o,c,r,h),[S,X]}t.drawImage(I,g,C,i,e,A,s,l,n);const b=Math.hypot(a,d),u=Math.hypot(o,c);return[b*l,u*n]}function tcg(t){const{width:I,height:g}=t;if(I>U6||g>U6)return null;const C=1e3,i=new Uint8Array([0,2,4,0,1,0,5,4,8,10,0,8,0,2,1,0]),e=I+1,A=new Uint8Array(e*(g+1));let s,l,n;const a=I+7&-8,d=new Uint8Array(a*g);let o=0;for(const R of t.data){let X=128;for(;X>0;)d[o++]=R&X?0:255,X>>=1}let c=0;for(o=0,d[o]!==0&&(A[0]=1,++c),l=1;l<I;l++)d[o]!==d[o+1]&&(A[l]=d[o]?2:1,++c),o++;for(d[o]!==0&&(A[l]=2,++c),s=1;s<g;s++){o=s*a,n=s*e,d[o-a]!==d[o]&&(A[n]=d[o]?1:8,++c);let R=(d[o]?4:0)+(d[o-a]?8:0);for(l=1;l<I;l++)R=(R>>2)+(d[o+1]?4:0)+(d[o-a+1]?8:0),i[R]&&(A[n+l]=i[R],++c),o++;if(d[o-a]!==d[o]&&(A[n+l]=d[o]?2:4,++c),c>C)return null}for(o=a*(g-1),n=s*e,d[o]!==0&&(A[n]=8,++c),l=1;l<I;l++)d[o]!==d[o+1]&&(A[n+l]=d[o]?4:8,++c),o++;if(d[o]!==0&&(A[n+l]=4,++c),c>C)return null;const r=new Int32Array([0,e,-1,0,-e,0,0,0,1]),h=new Path2D,{a:b,b:u,c:m,d:Z,e:p,f:Y}=new DOMMatrix().scaleSelf(1/I,-1/g).translateSelf(0,-g);for(s=0;c&&s<=g;s++){let R=s*e;const X=R+I;for(;R<X&&!A[R];)R++;if(R===X)continue;let H=R%e,S=s;h.moveTo(b*H+m*S+p,u*H+Z*S+Y);const z=R;let v=A[R];do{const K=r[v];do R+=K;while(!A[R]);const V=A[R];V!==5&&V!==10?(v=V,A[R]=0):(v=V&51*v>>4,A[R]&=v>>2|v<<2),H=R%e,S=R/e|0,h.lineTo(b*H+m*S+p,u*H+Z*S+Y),A[R]||--c}while(z!==R);--s}return h}class E6{constructor(I,g){this.alphaIsShape=!1,this.fontSize=0,this.fontSizeScale=1,this.textMatrix=o$,this.textMatrixScale=1,this.fontMatrix=RX,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=ni.FILL,this.textRise=0,this.fillColor="#000000",this.strokeColor="#000000",this.patternFill=!1,this.patternStroke=!1,this.fillAlpha=1,this.strokeAlpha=1,this.lineWidth=1,this.activeSMask=null,this.transferMaps="none",this.startNewPathAndClipBox([0,0,I,g])}clone(){const I=Object.create(this);return I.clipBox=this.clipBox.slice(),I}updateRectMinMax(I,g){const C=iI.applyTransform(g,I),i=iI.applyTransform(g.slice(2),I),e=iI.applyTransform([g[0],g[3]],I),A=iI.applyTransform([g[2],g[1]],I);this.minX=Math.min(this.minX,C[0],i[0],e[0],A[0]),this.minY=Math.min(this.minY,C[1],i[1],e[1],A[1]),this.maxX=Math.max(this.maxX,C[0],i[0],e[0],A[0]),this.maxY=Math.max(this.maxY,C[1],i[1],e[1],A[1])}getPathBoundingBox(I=Pt.FILL,g=null){const C=[this.minX,this.minY,this.maxX,this.maxY];if(I===Pt.STROKE){g||ZC("Stroke bounding box must include transform.");const i=iI.singularValueDecompose2dScale(g),e=i[0]*this.lineWidth/2,A=i[1]*this.lineWidth/2;C[0]-=e,C[1]-=A,C[2]+=e,C[3]+=A}return C}updateClipFromPath(){const I=iI.intersect(this.clipBox,this.getPathBoundingBox());this.startNewPathAndClipBox(I||[0,0,0,0])}isEmptyClip(){return this.minX===1/0}startNewPathAndClipBox(I){this.clipBox=I,this.minX=1/0,this.minY=1/0,this.maxX=0,this.maxY=0}getClippedPathBoundingBox(I=Pt.FILL,g=null){return iI.intersect(this.clipBox,this.getPathBoundingBox(I,g))}}function P6(t,I){if(I instanceof ImageData){t.putImageData(I,0,0);return}const g=I.height,C=I.width,i=g%Li,e=(g-i)/Li,A=i===0?e:e+1,s=t.createImageData(C,Li);let l=0,n;const a=I.data,d=s.data;let o,c,r,h;if(I.kind===EY.GRAYSCALE_1BPP){const b=a.byteLength,u=new Uint32Array(d.buffer,0,d.byteLength>>2),m=u.length,Z=C+7>>3,p=4294967295,Y=gi.isLittleEndian?4278190080:255;for(o=0;o<A;o++){for(r=o<e?Li:i,n=0,c=0;c<r;c++){const R=b-l;let X=0;const H=R>Z?C:R*8-7,S=H&-8;let z=0,v=0;for(;X<S;X+=8)v=a[l++],u[n++]=v&128?p:Y,u[n++]=v&64?p:Y,u[n++]=v&32?p:Y,u[n++]=v&16?p:Y,u[n++]=v&8?p:Y,u[n++]=v&4?p:Y,u[n++]=v&2?p:Y,u[n++]=v&1?p:Y;for(;X<H;X++)z===0&&(v=a[l++],z=128),u[n++]=v&z?p:Y,z>>=1}for(;n<m;)u[n++]=0;t.putImageData(s,0,o*Li)}}else if(I.kind===EY.RGBA_32BPP){for(c=0,h=C*Li*4,o=0;o<e;o++)d.set(a.subarray(l,l+h)),l+=h,t.putImageData(s,0,c),c+=Li;o<A&&(h=C*i*4,d.set(a.subarray(l,l+h)),t.putImageData(s,0,c))}else if(I.kind===EY.RGB_24BPP)for(r=Li,h=C*r,o=0;o<A;o++){for(o>=e&&(r=i,h=C*r),n=0,c=h;c--;)d[n++]=a[l++],d[n++]=a[l++],d[n++]=a[l++],d[n++]=255;t.putImageData(s,0,o*Li)}else throw new Error(`bad image kind: ${I.kind}`)}function _6(t,I){if(I.bitmap){t.drawImage(I.bitmap,0,0);return}const g=I.height,C=I.width,i=g%Li,e=(g-i)/Li,A=i===0?e:e+1,s=t.createImageData(C,Li);let l=0;const n=I.data,a=s.data;for(let d=0;d<A;d++){const o=d<e?Li:i;({srcPos:l}=$og({src:n,srcPos:l,dest:a,width:C,height:o,nonBlackColor:0})),t.putImageData(s,0,d*Li)}}function pu(t,I){const g=["strokeStyle","fillStyle","fillRule","globalAlpha","lineWidth","lineCap","lineJoin","miterLimit","globalCompositeOperation","font","filter"];for(const C of g)t[C]!==void 0&&(I[C]=t[C]);t.setLineDash!==void 0&&(I.setLineDash(t.getLineDash()),I.lineDashOffset=t.lineDashOffset)}function yY(t){if(t.strokeStyle=t.fillStyle="#000000",t.fillRule="nonzero",t.globalAlpha=1,t.lineWidth=1,t.lineCap="butt",t.lineJoin="miter",t.miterLimit=10,t.globalCompositeOperation="source-over",t.font="10px sans-serif",t.setLineDash!==void 0&&(t.setLineDash([]),t.lineDashOffset=0),!Ot){const{filter:I}=t;I!=="none"&&I!==""&&(t.filter="none")}}function q6(t,I){if(I)return!0;const g=iI.singularValueDecompose2dScale(t);g[0]=Math.fround(g[0]),g[1]=Math.fround(g[1]);const C=Math.fround(jl.pixelRatio*Ja.PDF_TO_CSS_UNITS);return g[0]<=C&&g[1]<=C}const icg=["butt","round","square"],ecg=["miter","round","bevel"],Acg={},$6={};var RA,IS,CS,tS;const T9=class T9{constructor(I,g,C,i,e,{optionalContentConfig:A,markedContentStack:s=null},l,n){ig(this,RA);this.ctx=I,this.current=new E6(this.ctx.canvas.width,this.ctx.canvas.height),this.stateStack=[],this.pendingClip=null,this.pendingEOFill=!1,this.res=null,this.xobjs=null,this.commonObjs=g,this.objs=C,this.canvasFactory=i,this.filterFactory=e,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=s||[],this.optionalContentConfig=A,this.cachedCanvases=new Ccg(this.canvasFactory),this.cachedPatterns=new Map,this.annotationCanvasMap=l,this.viewportScale=1,this.outputScaleX=1,this.outputScaleY=1,this.pageColors=n,this._cachedScaleForStroking=[-1,0],this._cachedGetSinglePixelWidth=null,this._cachedBitmapsMap=new Map}getObject(I,g=null){return typeof I=="string"?I.startsWith("g_")?this.commonObjs.get(I):this.objs.get(I):g}beginDrawing({transform:I,viewport:g,transparency:C=!1,background:i=null}){const e=this.ctx.canvas.width,A=this.ctx.canvas.height,s=this.ctx.fillStyle;if(this.ctx.fillStyle=i||"#ffffff",this.ctx.fillRect(0,0,e,A),this.ctx.fillStyle=s,C){const l=this.cachedCanvases.getCanvas("transparent",e,A);this.compositeCtx=this.ctx,this.transparentCanvas=l.canvas,this.ctx=l.context,this.ctx.save(),this.ctx.transform(...DC(this.compositeCtx))}this.ctx.save(),yY(this.ctx),I&&(this.ctx.transform(...I),this.outputScaleX=I[0],this.outputScaleY=I[0]),this.ctx.transform(...g.transform),this.viewportScale=g.scale,this.baseTransform=DC(this.ctx)}executeOperatorList(I,g,C,i){const e=I.argsArray,A=I.fnArray;let s=g||0;const l=e.length;if(l===s)return s;const n=l-s>O6&&typeof C=="function",a=n?Date.now()+gcg:0;let d=0;const o=this.commonObjs,c=this.objs;let r;for(;;){if(i!==void 0&&s===i.nextBreakPoint)return i.breakIt(s,C),s;if(r=A[s],r!==JN.dependency)this[r].apply(this,e[s]);else for(const h of e[s]){const b=h.startsWith("g_")?o:c;if(!b.has(h))return b.get(h,C),s}if(s++,s===l)return s;if(n&&++d>O6){if(Date.now()>a)return C(),s;d=0}}}endDrawing(){eg(this,RA,IS).call(this),this.cachedCanvases.clear(),this.cachedPatterns.clear();for(const I of this._cachedBitmapsMap.values()){for(const g of I.values())typeof HTMLCanvasElement<"u"&&g instanceof HTMLCanvasElement&&(g.width=g.height=0);I.clear()}this._cachedBitmapsMap.clear(),eg(this,RA,CS).call(this)}_scaleImage(I,g){const C=I.width??I.displayWidth,i=I.height??I.displayHeight;let e=Math.max(Math.hypot(g[0],g[1]),1),A=Math.max(Math.hypot(g[2],g[3]),1),s=C,l=i,n="prescale1",a,d;for(;e>2&&s>1||A>2&&l>1;){let o=s,c=l;e>2&&s>1&&(o=s>=16384?Math.floor(s/2)-1||1:Math.ceil(s/2),e/=s/o),A>2&&l>1&&(c=l>=16384?Math.floor(l/2)-1||1:Math.ceil(l)/2,A/=l/c),a=this.cachedCanvases.getCanvas(n,o,c),d=a.context,d.clearRect(0,0,o,c),d.drawImage(I,0,0,s,l,0,0,o,c),I=a.canvas,s=o,l=c,n=n==="prescale1"?"prescale2":"prescale1"}return{img:I,paintWidth:s,paintHeight:l}}_createMaskCanvas(I){const g=this.ctx,{width:C,height:i}=I,e=this.current.fillColor,A=this.current.patternFill,s=DC(g);let l,n,a,d;if((I.bitmap||I.data)&&I.count>1){const H=I.bitmap||I.data.buffer;n=JSON.stringify(A?s:[s.slice(0,4),e]),l=this._cachedBitmapsMap.get(H),l||(l=new Map,this._cachedBitmapsMap.set(H,l));const S=l.get(n);if(S&&!A){const z=Math.round(Math.min(s[0],s[2])+s[4]),v=Math.round(Math.min(s[1],s[3])+s[5]);return{canvas:S,offsetX:z,offsetY:v}}a=S}a||(d=this.cachedCanvases.getCanvas("maskCanvas",C,i),_6(d.context,I));let o=iI.transform(s,[1/C,0,0,-1/i,0,0]);o=iI.transform(o,[1,0,0,1,0,-i]);const[c,r,h,b]=iI.getAxialAlignedBoundingBox([0,0,C,i],o),u=Math.round(h-c)||1,m=Math.round(b-r)||1,Z=this.cachedCanvases.getCanvas("fillCanvas",u,m),p=Z.context,Y=c,R=r;p.translate(-Y,-R),p.transform(...o),a||(a=this._scaleImage(d.canvas,_A(p)),a=a.img,l&&A&&l.set(n,a)),p.imageSmoothingEnabled=q6(DC(p),I.interpolate),WY(p,a,0,0,a.width,a.height,0,0,C,i),p.globalCompositeOperation="source-in";const X=iI.transform(_A(p),[1,0,0,1,-Y,-R]);return p.fillStyle=A?e.getPattern(g,this,X,Pt.FILL):e,p.fillRect(0,0,C,i),l&&!A&&(this.cachedCanvases.delete("fillCanvas"),l.set(n,Z.canvas)),{canvas:Z.canvas,offsetX:Math.round(Y),offsetY:Math.round(R)}}setLineWidth(I){I!==this.current.lineWidth&&(this._cachedScaleForStroking[0]=-1),this.current.lineWidth=I,this.ctx.lineWidth=I}setLineCap(I){this.ctx.lineCap=icg[I]}setLineJoin(I){this.ctx.lineJoin=ecg[I]}setMiterLimit(I){this.ctx.miterLimit=I}setDash(I,g){const C=this.ctx;C.setLineDash!==void 0&&(C.setLineDash(I),C.lineDashOffset=g)}setRenderingIntent(I){}setFlatness(I){}setGState(I){for(const[g,C]of I)switch(g){case"LW":this.setLineWidth(C);break;case"LC":this.setLineCap(C);break;case"LJ":this.setLineJoin(C);break;case"ML":this.setMiterLimit(C);break;case"D":this.setDash(C[0],C[1]);break;case"RI":this.setRenderingIntent(C);break;case"FL":this.setFlatness(C);break;case"Font":this.setFont(C[0],C[1]);break;case"CA":this.current.strokeAlpha=C;break;case"ca":this.ctx.globalAlpha=this.current.fillAlpha=C;break;case"BM":this.ctx.globalCompositeOperation=C;break;case"SMask":this.current.activeSMask=C?this.tempSMask:null,this.tempSMask=null,this.checkSMaskState();break;case"TR":this.ctx.filter=this.current.transferMaps=this.filterFactory.addFilter(C);break}}get inSMaskMode(){return!!this.suspendedCtx}checkSMaskState(){const I=this.inSMaskMode;this.current.activeSMask&&!I?this.beginSMaskMode():!this.current.activeSMask&&I&&this.endSMaskMode()}beginSMaskMode(){if(this.inSMaskMode)throw new Error("beginSMaskMode called while already in smask mode");const I=this.ctx.canvas.width,g=this.ctx.canvas.height,C="smaskGroupAt"+this.groupLevel,i=this.cachedCanvases.getCanvas(C,I,g);this.suspendedCtx=this.ctx;const e=this.ctx=i.context;e.setTransform(this.suspendedCtx.getTransform()),pu(this.suspendedCtx,e),Icg(e,this.suspendedCtx),this.setGState([["BM","source-over"]])}endSMaskMode(){if(!this.inSMaskMode)throw new Error("endSMaskMode called while not in smask mode");this.ctx._removeMirroring(),pu(this.ctx,this.suspendedCtx),this.ctx=this.suspendedCtx,this.suspendedCtx=null}compose(I){if(!this.current.activeSMask)return;I?(I[0]=Math.floor(I[0]),I[1]=Math.floor(I[1]),I[2]=Math.ceil(I[2]),I[3]=Math.ceil(I[3])):I=[0,0,this.ctx.canvas.width,this.ctx.canvas.height];const g=this.current.activeSMask,C=this.suspendedCtx;this.composeSMask(C,g,this.ctx,I),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()}composeSMask(I,g,C,i){const e=i[0],A=i[1],s=i[2]-e,l=i[3]-A;s===0||l===0||(this.genericComposeSMask(g.context,C,s,l,g.subtype,g.backdrop,g.transferMap,e,A,g.offsetX,g.offsetY),I.save(),I.globalAlpha=1,I.globalCompositeOperation="source-over",I.setTransform(1,0,0,1,0,0),I.drawImage(C.canvas,0,0),I.restore())}genericComposeSMask(I,g,C,i,e,A,s,l,n,a,d){let o=I.canvas,c=l-a,r=n-d;if(A){const b=iI.makeHexColor(...A);if(c<0||r<0||c+C>o.width||r+i>o.height){const u=this.cachedCanvases.getCanvas("maskExtension",C,i),m=u.context;m.drawImage(o,-c,-r),m.globalCompositeOperation="destination-atop",m.fillStyle=b,m.fillRect(0,0,C,i),m.globalCompositeOperation="source-over",o=u.canvas,c=r=0}else{I.save(),I.globalAlpha=1,I.setTransform(1,0,0,1,0,0);const u=new Path2D;u.rect(c,r,C,i),I.clip(u),I.globalCompositeOperation="destination-atop",I.fillStyle=b,I.fillRect(c,r,C,i),I.restore()}}g.save(),g.globalAlpha=1,g.setTransform(1,0,0,1,0,0),e==="Alpha"&&s?g.filter=this.filterFactory.addAlphaFilter(s):e==="Luminosity"&&(g.filter=this.filterFactory.addLuminosityFilter(s));const h=new Path2D;h.rect(l,n,C,i),g.clip(h),g.globalCompositeOperation="destination-in",g.drawImage(o,c,r,C,i,l,n,C,i),g.restore()}save(){this.inSMaskMode&&pu(this.ctx,this.suspendedCtx),this.ctx.save();const I=this.current;this.stateStack.push(I),this.current=I.clone()}restore(){if(this.stateStack.length===0){this.inSMaskMode&&this.endSMaskMode();return}this.current=this.stateStack.pop(),this.ctx.restore(),this.inSMaskMode&&pu(this.suspendedCtx,this.ctx),this.checkSMaskState(),this.pendingClip=null,this._cachedScaleForStroking[0]=-1,this._cachedGetSinglePixelWidth=null}transform(I,g,C,i,e,A){this.ctx.transform(I,g,C,i,e,A),this._cachedScaleForStroking[0]=-1,this._cachedGetSinglePixelWidth=null}constructPath(I,g,C){let[i]=g;if(!C){i||(i=g[0]=new Path2D),this[I](i);return}if(!(i instanceof Path2D)){const e=g[0]=new Path2D;for(let A=0,s=i.length;A<s;)switch(i[A++]){case pY.moveTo:e.moveTo(i[A++],i[A++]);break;case pY.lineTo:e.lineTo(i[A++],i[A++]);break;case pY.curveTo:e.bezierCurveTo(i[A++],i[A++],i[A++],i[A++],i[A++],i[A++]);break;case pY.closePath:e.closePath();break;default:HI(`Unrecognized drawing path operator: ${i[A-1]}`);break}i=e}this.current.updateRectMinMax(DC(this.ctx),C),this[I](i)}closePath(){this.ctx.closePath()}stroke(I,g=!0){const C=this.ctx,i=this.current.strokeColor;if(C.globalAlpha=this.current.strokeAlpha,this.contentVisible)if(typeof i=="object"&&(i!=null&&i.getPattern)){const e=i.isModifyingCurrentTransform()?C.getTransform():null;if(C.save(),C.strokeStyle=i.getPattern(C,this,_A(C),Pt.STROKE),e){const A=new Path2D;A.addPath(I,C.getTransform().invertSelf().multiplySelf(e)),I=A}this.rescaleAndStroke(I,!1),C.restore()}else this.rescaleAndStroke(I,!0);g&&this.consumePath(I,this.current.getClippedPathBoundingBox(Pt.STROKE,DC(this.ctx))),C.globalAlpha=this.current.fillAlpha}closeStroke(I){this.stroke(I)}fill(I,g=!0){const C=this.ctx,i=this.current.fillColor,e=this.current.patternFill;let A=!1;if(e){const l=i.isModifyingCurrentTransform()?C.getTransform():null;if(C.save(),C.fillStyle=i.getPattern(C,this,_A(C),Pt.FILL),l){const n=new Path2D;n.addPath(I,C.getTransform().invertSelf().multiplySelf(l)),I=n}A=!0}const s=this.current.getClippedPathBoundingBox();this.contentVisible&&s!==null&&(this.pendingEOFill?(C.fill(I,"evenodd"),this.pendingEOFill=!1):C.fill(I)),A&&C.restore(),g&&this.consumePath(I,s)}eoFill(I){this.pendingEOFill=!0,this.fill(I)}fillStroke(I){this.fill(I,!1),this.stroke(I,!1),this.consumePath(I)}eoFillStroke(I){this.pendingEOFill=!0,this.fillStroke(I)}closeFillStroke(I){this.fillStroke(I)}closeEOFillStroke(I){this.pendingEOFill=!0,this.fillStroke(I)}endPath(I){this.consumePath(I)}clip(){this.pendingClip=Acg}eoClip(){this.pendingClip=$6}beginText(){this.current.textMatrix=o$,this.current.textMatrixScale=1,this.current.x=this.current.lineX=0,this.current.y=this.current.lineY=0}endText(){const I=this.pendingTextPaths,g=this.ctx;if(I===void 0){g.beginPath();return}const C=new Path2D,i=g.getTransform().invertSelf();for(const{transform:e,x:A,y:s,fontSize:l,path:n}of I)C.addPath(n,new DOMMatrix(e).preMultiplySelf(i).translate(A,s).scale(l,-l));g.clip(C),g.beginPath(),delete this.pendingTextPaths}setCharSpacing(I){this.current.charSpacing=I}setWordSpacing(I){this.current.wordSpacing=I}setHScale(I){this.current.textHScale=I/100}setLeading(I){this.current.leading=-I}setFont(I,g){var a;const C=this.commonObjs.get(I),i=this.current;if(!C)throw new Error(`Can't find font for ${I}`);if(i.fontMatrix=C.fontMatrix||RX,(i.fontMatrix[0]===0||i.fontMatrix[3]===0)&&HI("Invalid font matrix for font "+I),g<0?(g=-g,i.fontDirection=-1):i.fontDirection=1,this.current.font=C,this.current.fontSize=g,C.isType3Font)return;const e=C.loadedName||"sans-serif",A=((a=C.systemFontInfo)==null?void 0:a.css)||`"${e}", ${C.fallbackName}`;let s="normal";C.black?s="900":C.bold&&(s="bold");const l=C.italic?"italic":"normal";let n=g;g<j6?n=j6:g>Q6&&(n=Q6),this.current.fontSizeScale=g/n,this.ctx.font=`${l} ${s} ${n}px ${A}`}setTextRenderingMode(I){this.current.textRenderingMode=I}setTextRise(I){this.current.textRise=I}moveText(I,g){this.current.x=this.current.lineX+=I,this.current.y=this.current.lineY+=g}setLeadingMoveText(I,g){this.setLeading(-g),this.moveText(I,g)}setTextMatrix(I,g,C,i,e,A){this.current.textMatrix=[I,g,C,i,e,A],this.current.textMatrixScale=Math.hypot(I,g),this.current.x=this.current.lineX=0,this.current.y=this.current.lineY=0}nextLine(){this.moveText(0,this.current.leading)}paintChar(I,g,C,i,e){const A=this.ctx,s=this.current,l=s.font,n=s.textRenderingMode,a=s.fontSize/s.fontSizeScale,d=n&ni.FILL_STROKE_MASK,o=!!(n&ni.ADD_TO_PATH_FLAG),c=s.patternFill&&!l.missingFile,r=s.patternStroke&&!l.missingFile;let h;if((l.disableFontFace||o||c||r)&&(h=l.getPathGenerator(this.commonObjs,I)),l.disableFontFace||c||r){A.save(),A.translate(g,C),A.scale(a,-a);let b;if((d===ni.FILL||d===ni.FILL_STROKE)&&(i?(b=A.getTransform(),A.setTransform(...i),A.fill(eg(this,RA,tS).call(this,h,b,i))):A.fill(h)),d===ni.STROKE||d===ni.FILL_STROKE)if(e){b||(b=A.getTransform()),A.setTransform(...e);const{a:u,b:m,c:Z,d:p}=b,Y=iI.inverseTransform(e),R=iI.transform([u,m,Z,p,0,0],Y),[X,H]=iI.singularValueDecompose2dScale(R);A.lineWidth*=Math.max(X,H)/a,A.stroke(eg(this,RA,tS).call(this,h,b,e))}else A.lineWidth/=a,A.stroke(h);A.restore()}else(d===ni.FILL||d===ni.FILL_STROKE)&&A.fillText(I,g,C),(d===ni.STROKE||d===ni.FILL_STROKE)&&A.strokeText(I,g,C);o&&(this.pendingTextPaths||(this.pendingTextPaths=[])).push({transform:DC(A),x:g,y:C,fontSize:a,path:h})}get isFontSubpixelAAEnabled(){const{context:I}=this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled",10,10);I.scale(1.5,1),I.fillText("I",0,10);const g=I.getImageData(0,0,10,10).data;let C=!1;for(let i=3;i<g.length;i+=4)if(g[i]>0&&g[i]<255){C=!0;break}return jI(this,"isFontSubpixelAAEnabled",C)}showText(I){const g=this.current,C=g.font;if(C.isType3Font)return this.showType3Text(I);const i=g.fontSize;if(i===0)return;const e=this.ctx,A=g.fontSizeScale,s=g.charSpacing,l=g.wordSpacing,n=g.fontDirection,a=g.textHScale*n,d=I.length,o=C.vertical,c=o?1:-1,r=C.defaultVMetrics,h=i*g.fontMatrix[0],b=g.textRenderingMode===ni.FILL&&!C.disableFontFace&&!g.patternFill;e.save(),e.transform(...g.textMatrix),e.translate(g.x,g.y+g.textRise),n>0?e.scale(a,-1):e.scale(a,1);let u,m;if(g.patternFill){e.save();const X=g.fillColor.getPattern(e,this,_A(e),Pt.FILL);u=DC(e),e.restore(),e.fillStyle=X}if(g.patternStroke){e.save();const X=g.strokeColor.getPattern(e,this,_A(e),Pt.STROKE);m=DC(e),e.restore(),e.strokeStyle=X}let Z=g.lineWidth;const p=g.textMatrixScale;if(p===0||Z===0){const X=g.textRenderingMode&ni.FILL_STROKE_MASK;(X===ni.STROKE||X===ni.FILL_STROKE)&&(Z=this.getSinglePixelWidth())}else Z/=p;if(A!==1&&(e.scale(A,A),Z/=A),e.lineWidth=Z,C.isInvalidPDFjsFont){const X=[];let H=0;for(const S of I)X.push(S.unicode),H+=S.width;e.fillText(X.join(""),0,0),g.x+=H*h*a,e.restore(),this.compose();return}let Y=0,R;for(R=0;R<d;++R){const X=I[R];if(typeof X=="number"){Y+=c*X*i/1e3;continue}let H=!1;const S=(X.isSpace?l:0)+s,z=X.fontChar,v=X.accent;let K,V,N=X.width;if(o){const G=X.vmetric||r,w=-(X.vmetric?G[1]:N*.5)*h,W=G[2]*h;N=G?-G[0]:N,K=w/A,V=(Y+W)/A}else K=Y/A,V=0;if(C.remeasure&&N>0){const G=e.measureText(z).width*1e3/i*A;if(N<G&&this.isFontSubpixelAAEnabled){const w=N/G;H=!0,e.save(),e.scale(w,1),K/=w}else N!==G&&(K+=(N-G)/2e3*i/A)}if(this.contentVisible&&(X.isInFont||C.missingFile)){if(b&&!v)e.fillText(z,K,V);else if(this.paintChar(z,K,V,u,m),v){const G=K+i*v.offset.x/A,w=V-i*v.offset.y/A;this.paintChar(v.fontChar,G,w,u,m)}}const B=o?N*h-S*n:N*h+S*n;Y+=B,H&&e.restore()}o?g.y-=Y:g.x+=Y*a,e.restore(),this.compose()}showType3Text(I){const g=this.ctx,C=this.current,i=C.font,e=C.fontSize,A=C.fontDirection,s=i.vertical?1:-1,l=C.charSpacing,n=C.wordSpacing,a=C.textHScale*A,d=C.fontMatrix||RX,o=I.length,c=C.textRenderingMode===ni.INVISIBLE;let r,h,b,u;if(!(c||e===0)){for(this._cachedScaleForStroking[0]=-1,this._cachedGetSinglePixelWidth=null,g.save(),g.transform(...C.textMatrix),g.translate(C.x,C.y+C.textRise),g.scale(a,A),r=0;r<o;++r){if(h=I[r],typeof h=="number"){u=s*h*e/1e3,this.ctx.translate(u,0),C.x+=u*a;continue}const m=(h.isSpace?n:0)+l,Z=i.charProcOperatorList[h.operatorListId];Z?this.contentVisible&&(this.processingType3=h,this.save(),g.scale(e,e),g.transform(...d),this.executeOperatorList(Z),this.restore()):HI(`Type3 character "${h.operatorListId}" is not available.`),b=iI.applyTransform([h.width,0],d)[0]*e+m,g.translate(b,0),C.x+=b*a}g.restore(),this.processingType3=null}}setCharWidth(I,g){}setCharWidthAndBounds(I,g,C,i,e,A){this.ctx.rect(C,i,e-C,A-i),this.ctx.clip(),this.endPath()}getColorN_Pattern(I){let g;if(I[0]==="TilingPattern"){const C=this.baseTransform||DC(this.ctx),i={createCanvasGraphics:e=>new T9(e,this.commonObjs,this.objs,this.canvasFactory,this.filterFactory,{optionalContentConfig:this.optionalContentConfig,markedContentStack:this.markedContentStack})};g=new gS(I,this.ctx,i,C)}else g=this._getPattern(I[1],I[2]);return g}setStrokeColorN(){this.current.strokeColor=this.getColorN_Pattern(arguments),this.current.patternStroke=!0}setFillColorN(){this.current.fillColor=this.getColorN_Pattern(arguments),this.current.patternFill=!0}setStrokeRGBColor(I,g,C){this.ctx.strokeStyle=this.current.strokeColor=iI.makeHexColor(I,g,C),this.current.patternStroke=!1}setStrokeTransparent(){this.ctx.strokeStyle=this.current.strokeColor="transparent",this.current.patternStroke=!1}setFillRGBColor(I,g,C){this.ctx.fillStyle=this.current.fillColor=iI.makeHexColor(I,g,C),this.current.patternFill=!1}setFillTransparent(){this.ctx.fillStyle=this.current.fillColor="transparent",this.current.patternFill=!1}_getPattern(I,g=null){let C;return this.cachedPatterns.has(I)?C=this.cachedPatterns.get(I):(C=qog(this.getObject(I)),this.cachedPatterns.set(I,C)),g&&(C.matrix=g),C}shadingFill(I){if(!this.contentVisible)return;const g=this.ctx;this.save();const C=this._getPattern(I);g.fillStyle=C.getPattern(g,this,_A(g),Pt.SHADING);const i=_A(g);if(i){const{width:e,height:A}=g.canvas,[s,l,n,a]=iI.getAxialAlignedBoundingBox([0,0,e,A],i);this.ctx.fillRect(s,l,n-s,a-l)}else this.ctx.fillRect(-1e10,-1e10,2e10,2e10);this.compose(this.current.getClippedPathBoundingBox()),this.restore()}beginInlineImage(){ZC("Should not call beginInlineImage")}beginImageData(){ZC("Should not call beginImageData")}paintFormXObjectBegin(I,g){if(this.contentVisible&&(this.save(),this.baseTransformStack.push(this.baseTransform),I&&this.transform(...I),this.baseTransform=DC(this.ctx),g)){const C=g[2]-g[0],i=g[3]-g[1];this.ctx.rect(g[0],g[1],C,i),this.current.updateRectMinMax(DC(this.ctx),g),this.clip(),this.endPath()}}paintFormXObjectEnd(){this.contentVisible&&(this.restore(),this.baseTransform=this.baseTransformStack.pop())}beginGroup(I){if(!this.contentVisible)return;this.save(),this.inSMaskMode&&(this.endSMaskMode(),this.current.activeSMask=null);const g=this.ctx;I.isolated||FV("TODO: Support non-isolated groups."),I.knockout&&HI("Knockout groups not supported.");const C=DC(g);if(I.matrix&&g.transform(...I.matrix),!I.bbox)throw new Error("Bounding box is required.");let i=iI.getAxialAlignedBoundingBox(I.bbox,DC(g));const e=[0,0,g.canvas.width,g.canvas.height];i=iI.intersect(i,e)||[0,0,0,0];const A=Math.floor(i[0]),s=Math.floor(i[1]),l=Math.max(Math.ceil(i[2])-A,1),n=Math.max(Math.ceil(i[3])-s,1);this.current.startNewPathAndClipBox([0,0,l,n]);let a="groupAt"+this.groupLevel;I.smask&&(a+="_smask_"+this.smaskCounter++%2);const d=this.cachedCanvases.getCanvas(a,l,n),o=d.context;o.translate(-A,-s),o.transform(...C);let c=new Path2D;const[r,h,b,u]=I.bbox;if(c.rect(r,h,b-r,u-h),I.matrix){const m=new Path2D;m.addPath(c,new DOMMatrix(I.matrix)),c=m}o.clip(c),I.smask?this.smaskStack.push({canvas:d.canvas,context:o,offsetX:A,offsetY:s,subtype:I.smask.subtype,backdrop:I.smask.backdrop,transferMap:I.smask.transferMap||null,startTransformInverse:null}):(g.setTransform(1,0,0,1,0,0),g.translate(A,s),g.save()),pu(g,o),this.ctx=o,this.setGState([["BM","source-over"],["ca",1],["CA",1]]),this.groupStack.push(g),this.groupLevel++}endGroup(I){if(!this.contentVisible)return;this.groupLevel--;const g=this.ctx,C=this.groupStack.pop();if(this.ctx=C,this.ctx.imageSmoothingEnabled=!1,I.smask)this.tempSMask=this.smaskStack.pop(),this.restore();else{this.ctx.restore();const i=DC(this.ctx);this.restore(),this.ctx.save(),this.ctx.setTransform(...i);const e=iI.getAxialAlignedBoundingBox([0,0,g.canvas.width,g.canvas.height],i);this.ctx.drawImage(g.canvas,0,0),this.ctx.restore(),this.compose(e)}}beginAnnotation(I,g,C,i,e){if(eg(this,RA,IS).call(this),yY(this.ctx),this.ctx.save(),this.save(),this.baseTransform&&this.ctx.setTransform(...this.baseTransform),g){const A=g[2]-g[0],s=g[3]-g[1];if(e&&this.annotationCanvasMap){C=C.slice(),C[4]-=g[0],C[5]-=g[1],g=g.slice(),g[0]=g[1]=0,g[2]=A,g[3]=s;const[l,n]=iI.singularValueDecompose2dScale(DC(this.ctx)),{viewportScale:a}=this,d=Math.ceil(A*this.outputScaleX*a),o=Math.ceil(s*this.outputScaleY*a);this.annotationCanvas=this.canvasFactory.create(d,o);const{canvas:c,context:r}=this.annotationCanvas;this.annotationCanvasMap.set(I,c),this.annotationCanvas.savedCtx=this.ctx,this.ctx=r,this.ctx.save(),this.ctx.setTransform(l,0,0,-n,0,s*n),yY(this.ctx)}else yY(this.ctx),this.endPath(),this.ctx.rect(g[0],g[1],A,s),this.ctx.clip(),this.ctx.beginPath()}this.current=new E6(this.ctx.canvas.width,this.ctx.canvas.height),this.transform(...C),this.transform(...i)}endAnnotation(){this.annotationCanvas&&(this.ctx.restore(),eg(this,RA,CS).call(this),this.ctx=this.annotationCanvas.savedCtx,delete this.annotationCanvas.savedCtx,delete this.annotationCanvas)}paintImageMaskXObject(I){if(!this.contentVisible)return;const g=I.count;I=this.getObject(I.data,I),I.count=g;const C=this.ctx,i=this.processingType3;if(i&&(i.compiled===void 0&&(i.compiled=tcg(I)),i.compiled)){C.fill(i.compiled);return}const e=this._createMaskCanvas(I),A=e.canvas;C.save(),C.setTransform(1,0,0,1,0,0),C.drawImage(A,e.offsetX,e.offsetY),C.restore(),this.compose()}paintImageMaskXObjectRepeat(I,g,C=0,i=0,e,A){if(!this.contentVisible)return;I=this.getObject(I.data,I);const s=this.ctx;s.save();const l=DC(s);s.transform(g,C,i,e,0,0);const n=this._createMaskCanvas(I);s.setTransform(1,0,0,1,n.offsetX-l[4],n.offsetY-l[5]);for(let a=0,d=A.length;a<d;a+=2){const o=iI.transform(l,[g,C,i,e,A[a],A[a+1]]),[c,r]=iI.applyTransform([0,0],o);s.drawImage(n.canvas,c,r)}s.restore(),this.compose()}paintImageMaskXObjectGroup(I){if(!this.contentVisible)return;const g=this.ctx,C=this.current.fillColor,i=this.current.patternFill;for(const e of I){const{data:A,width:s,height:l,transform:n}=e,a=this.cachedCanvases.getCanvas("maskCanvas",s,l),d=a.context;d.save();const o=this.getObject(A,e);_6(d,o),d.globalCompositeOperation="source-in",d.fillStyle=i?C.getPattern(d,this,_A(g),Pt.FILL):C,d.fillRect(0,0,s,l),d.restore(),g.save(),g.transform(...n),g.scale(1,-1),WY(g,a.canvas,0,0,s,l,0,-1,1,1),g.restore()}this.compose()}paintImageXObject(I){if(!this.contentVisible)return;const g=this.getObject(I);if(!g){HI("Dependent image isn't ready yet");return}this.paintInlineImageXObject(g)}paintImageXObjectRepeat(I,g,C,i){if(!this.contentVisible)return;const e=this.getObject(I);if(!e){HI("Dependent image isn't ready yet");return}const A=e.width,s=e.height,l=[];for(let n=0,a=i.length;n<a;n+=2)l.push({transform:[g,0,0,C,i[n],i[n+1]],x:0,y:0,w:A,h:s});this.paintInlineImageXObjectGroup(e,l)}applyTransferMapsToCanvas(I){return this.current.transferMaps!=="none"&&(I.filter=this.current.transferMaps,I.drawImage(I.canvas,0,0),I.filter="none"),I.canvas}applyTransferMapsToBitmap(I){if(this.current.transferMaps==="none")return I.bitmap;const{bitmap:g,width:C,height:i}=I,e=this.cachedCanvases.getCanvas("inlineImage",C,i),A=e.context;return A.filter=this.current.transferMaps,A.drawImage(g,0,0),A.filter="none",e.canvas}paintInlineImageXObject(I){if(!this.contentVisible)return;const g=I.width,C=I.height,i=this.ctx;if(this.save(),!Ot){const{filter:s}=i;s!=="none"&&s!==""&&(i.filter="none")}i.scale(1/g,-1/C);let e;if(I.bitmap)e=this.applyTransferMapsToBitmap(I);else if(typeof HTMLElement=="function"&&I instanceof HTMLElement||!I.data)e=I;else{const l=this.cachedCanvases.getCanvas("inlineImage",g,C).context;P6(l,I),e=this.applyTransferMapsToCanvas(l)}const A=this._scaleImage(e,_A(i));i.imageSmoothingEnabled=q6(DC(i),I.interpolate),WY(i,A.img,0,0,A.paintWidth,A.paintHeight,0,-C,g,C),this.compose(),this.restore()}paintInlineImageXObjectGroup(I,g){if(!this.contentVisible)return;const C=this.ctx;let i;if(I.bitmap)i=I.bitmap;else{const e=I.width,A=I.height,l=this.cachedCanvases.getCanvas("inlineImage",e,A).context;P6(l,I),i=this.applyTransferMapsToCanvas(l)}for(const e of g)C.save(),C.transform(...e.transform),C.scale(1,-1),WY(C,i,e.x,e.y,e.w,e.h,0,-1,1,1),C.restore();this.compose()}paintSolidColorImageMask(){this.contentVisible&&(this.ctx.fillRect(0,0,1,1),this.compose())}markPoint(I){}markPointProps(I,g){}beginMarkedContent(I){this.markedContentStack.push({visible:!0})}beginMarkedContentProps(I,g){I==="OC"?this.markedContentStack.push({visible:this.optionalContentConfig.isVisible(g)}):this.markedContentStack.push({visible:!0}),this.contentVisible=this.isContentVisible()}endMarkedContent(){this.markedContentStack.pop(),this.contentVisible=this.isContentVisible()}beginCompat(){}endCompat(){}consumePath(I,g){const C=this.current.isEmptyClip();this.pendingClip&&this.current.updateClipFromPath(),this.pendingClip||this.compose(g);const i=this.ctx;this.pendingClip&&(C||(this.pendingClip===$6?i.clip(I,"evenodd"):i.clip(I)),this.pendingClip=null),this.current.startNewPathAndClipBox(this.current.clipBox),i.beginPath()}getSinglePixelWidth(){if(!this._cachedGetSinglePixelWidth){const I=DC(this.ctx);if(I[1]===0&&I[2]===0)this._cachedGetSinglePixelWidth=1/Math.min(Math.abs(I[0]),Math.abs(I[3]));else{const g=Math.abs(I[0]*I[3]-I[2]*I[1]),C=Math.hypot(I[0],I[2]),i=Math.hypot(I[1],I[3]);this._cachedGetSinglePixelWidth=Math.max(C,i)/g}}return this._cachedGetSinglePixelWidth}getScaleForStroking(){if(this._cachedScaleForStroking[0]===-1){const{lineWidth:I}=this.current,{a:g,b:C,c:i,d:e}=this.ctx.getTransform();let A,s;if(C===0&&i===0){const l=Math.abs(g),n=Math.abs(e);if(l===n)if(I===0)A=s=1/l;else{const a=l*I;A=s=a<1?1/a:1}else if(I===0)A=1/l,s=1/n;else{const a=l*I,d=n*I;A=a<1?1/a:1,s=d<1?1/d:1}}else{const l=Math.abs(g*e-C*i),n=Math.hypot(g,C),a=Math.hypot(i,e);if(I===0)A=a/l,s=n/l;else{const d=I*l;A=a>d?a/d:1,s=n>d?n/d:1}}this._cachedScaleForStroking[0]=A,this._cachedScaleForStroking[1]=s}return this._cachedScaleForStroking}rescaleAndStroke(I,g){const{ctx:C,current:{lineWidth:i}}=this,[e,A]=this.getScaleForStroking();if(e===A){C.lineWidth=(i||1)*e,C.stroke(I);return}const s=C.getLineDash();g&&C.save(),C.scale(e,A),fH.a=1/e,fH.d=1/A;const l=new Path2D;if(l.addPath(I,fH),s.length>0){const n=Math.max(e,A);C.setLineDash(s.map(a=>a/n)),C.lineDashOffset/=n}C.lineWidth=i||1,C.stroke(l),g&&C.restore()}isContentVisible(){for(let I=this.markedContentStack.length-1;I>=0;I--)if(!this.markedContentStack[I].visible)return!1;return!0}};RA=new WeakSet,IS=function(){for(;this.stateStack.length||this.inSMaskMode;)this.restore();this.current.activeSMask=null,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)},CS=function(){if(this.pageColors){const I=this.filterFactory.addHCMFilter(this.pageColors.foreground,this.pageColors.background);if(I!=="none"){const g=this.ctx.filter;this.ctx.filter=I,this.ctx.drawImage(this.ctx.canvas,0,0),this.ctx.filter=g}}},tS=function(I,g,C){const i=new Path2D;return i.addPath(I,new DOMMatrix(C).invertSelf().multiplySelf(g)),i};let Ih=T9;for(const t in JN)Ih.prototype[t]!==void 0&&(Ih.prototype[JN[t]]=Ih.prototype[t]);var Em,Pm;class Kl{static get workerPort(){return M(this,Em)}static set workerPort(I){if(!(typeof Worker<"u"&&I instanceof Worker)&&I!==null)throw new Error("Invalid `workerPort` type.");$(this,Em,I)}static get workerSrc(){return M(this,Pm)}static set workerSrc(I){if(typeof I!="string")throw new Error("Invalid `workerSrc` type.");$(this,Pm,I)}}Em=new WeakMap,Pm=new WeakMap,ig(Kl,Em,null),ig(Kl,Pm,"");var bc,_m;class scg{constructor({parsedData:I,rawData:g}){ig(this,bc);ig(this,_m);$(this,bc,I),$(this,_m,g)}getRaw(){return M(this,_m)}get(I){return M(this,bc).get(I)??null}getAll(){return PD(M(this,bc))}has(I){return M(this,bc).has(I)}}bc=new WeakMap,_m=new WeakMap;const Lr=Symbol("INTERNAL");var qm,$m,gZ,Yh;class lcg{constructor(I,{name:g,intent:C,usage:i,rbGroups:e}){ig(this,qm,!1);ig(this,$m,!1);ig(this,gZ,!1);ig(this,Yh,!0);$(this,qm,!!(I&be.DISPLAY)),$(this,$m,!!(I&be.PRINT)),this.name=g,this.intent=C,this.usage=i,this.rbGroups=e}get visible(){if(M(this,gZ))return M(this,Yh);if(!M(this,Yh))return!1;const{print:I,view:g}=this.usage;return M(this,qm)?(g==null?void 0:g.viewState)!=="OFF":M(this,$m)?(I==null?void 0:I.printState)!=="OFF":!0}_setVisible(I,g,C=!1){I!==Lr&&ZC("Internal method `_setVisible` called."),$(this,gZ,C),$(this,Yh,g)}}qm=new WeakMap,$m=new WeakMap,gZ=new WeakMap,Yh=new WeakMap;var ha,cC,Nh,Vh,IZ,iS;class ncg{constructor(I,g=be.DISPLAY){ig(this,IZ);ig(this,ha,null);ig(this,cC,new Map);ig(this,Nh,null);ig(this,Vh,null);if(this.renderingIntent=g,this.name=null,this.creator=null,I!==null){this.name=I.name,this.creator=I.creator,$(this,Vh,I.order);for(const C of I.groups)M(this,cC).set(C.id,new lcg(g,C));if(I.baseState==="OFF")for(const C of M(this,cC).values())C._setVisible(Lr,!1);for(const C of I.on)M(this,cC).get(C)._setVisible(Lr,!0);for(const C of I.off)M(this,cC).get(C)._setVisible(Lr,!1);$(this,Nh,this.getHash())}}isVisible(I){if(M(this,cC).size===0)return!0;if(!I)return FV("Optional content group not defined."),!0;if(I.type==="OCG")return M(this,cC).has(I.id)?M(this,cC).get(I.id).visible:(HI(`Optional content group not found: ${I.id}`),!0);if(I.type==="OCMD"){if(I.expression)return eg(this,IZ,iS).call(this,I.expression);if(!I.policy||I.policy==="AnyOn"){for(const g of I.ids){if(!M(this,cC).has(g))return HI(`Optional content group not found: ${g}`),!0;if(M(this,cC).get(g).visible)return!0}return!1}else if(I.policy==="AllOn"){for(const g of I.ids){if(!M(this,cC).has(g))return HI(`Optional content group not found: ${g}`),!0;if(!M(this,cC).get(g).visible)return!1}return!0}else if(I.policy==="AnyOff"){for(const g of I.ids){if(!M(this,cC).has(g))return HI(`Optional content group not found: ${g}`),!0;if(!M(this,cC).get(g).visible)return!0}return!1}else if(I.policy==="AllOff"){for(const g of I.ids){if(!M(this,cC).has(g))return HI(`Optional content group not found: ${g}`),!0;if(M(this,cC).get(g).visible)return!1}return!0}return HI(`Unknown optional content policy ${I.policy}.`),!0}return HI(`Unknown group type ${I.type}.`),!0}setVisibility(I,g=!0,C=!0){var e;const i=M(this,cC).get(I);if(!i){HI(`Optional content group not found: ${I}`);return}if(C&&g&&i.rbGroups.length)for(const A of i.rbGroups)for(const s of A)s!==I&&((e=M(this,cC).get(s))==null||e._setVisible(Lr,!1,!0));i._setVisible(Lr,!!g,!0),$(this,ha,null)}setOCGState({state:I,preserveRB:g}){let C;for(const i of I){switch(i){case"ON":case"OFF":case"Toggle":C=i;continue}const e=M(this,cC).get(i);if(e)switch(C){case"ON":this.setVisibility(i,!0,g);break;case"OFF":this.setVisibility(i,!1,g);break;case"Toggle":this.setVisibility(i,!e.visible,g);break}}$(this,ha,null)}get hasInitialVisibility(){return M(this,Nh)===null||this.getHash()===M(this,Nh)}getOrder(){return M(this,cC).size?M(this,Vh)?M(this,Vh).slice():[...M(this,cC).keys()]:null}getGroups(){return M(this,cC).size>0?PD(M(this,cC)):null}getGroup(I){return M(this,cC).get(I)||null}getHash(){if(M(this,ha)!==null)return M(this,ha);const I=new j$;for(const[g,C]of M(this,cC))I.update(`${g}:${C.visible}`);return $(this,ha,I.hexdigest())}}ha=new WeakMap,cC=new WeakMap,Nh=new WeakMap,Vh=new WeakMap,IZ=new WeakSet,iS=function(I){const g=I.length;if(g<2)return!0;const C=I[0];for(let i=1;i<g;i++){const e=I[i];let A;if(Array.isArray(e))A=eg(this,IZ,iS).call(this,e);else if(M(this,cC).has(e))A=M(this,cC).get(e).visible;else return HI(`Optional content group not found: ${e}`),!0;switch(C){case"And":if(!A)return!1;break;case"Or":if(A)return!0;break;case"Not":return!A;default:return!0}}return C==="And"};class acg{constructor(I,{disableRange:g=!1,disableStream:C=!1}){ct(I,'PDFDataTransportStream - missing required "pdfDataRangeTransport" argument.');const{length:i,initialData:e,progressiveDone:A,contentDispositionFilename:s}=I;if(this._queuedChunks=[],this._progressiveDone=A,this._contentDispositionFilename=s,(e==null?void 0:e.length)>0){const l=e instanceof Uint8Array&&e.byteLength===e.buffer.byteLength?e.buffer:new Uint8Array(e).buffer;this._queuedChunks.push(l)}this._pdfDataRangeTransport=I,this._isStreamingSupported=!C,this._isRangeSupported=!g,this._contentLength=i,this._fullRequestReader=null,this._rangeReaders=[],I.addRangeListener((l,n)=>{this._onReceiveData({begin:l,chunk:n})}),I.addProgressListener((l,n)=>{this._onProgress({loaded:l,total:n})}),I.addProgressiveReadListener(l=>{this._onReceiveData({chunk:l})}),I.addProgressiveDoneListener(()=>{this._onProgressiveDone()}),I.transportReady()}_onReceiveData({begin:I,chunk:g}){const C=g instanceof Uint8Array&&g.byteLength===g.buffer.byteLength?g.buffer:new Uint8Array(g).buffer;if(I===void 0)this._fullRequestReader?this._fullRequestReader._enqueue(C):this._queuedChunks.push(C);else{const i=this._rangeReaders.some(function(e){return e._begin!==I?!1:(e._enqueue(C),!0)});ct(i,"_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found.")}}get _progressiveDataLength(){var I;return((I=this._fullRequestReader)==null?void 0:I._loaded)??0}_onProgress(I){var g,C,i,e;I.total===void 0?(C=(g=this._rangeReaders[0])==null?void 0:g.onProgress)==null||C.call(g,{loaded:I.loaded}):(e=(i=this._fullRequestReader)==null?void 0:i.onProgress)==null||e.call(i,{loaded:I.loaded,total:I.total})}_onProgressiveDone(){var I;(I=this._fullRequestReader)==null||I.progressiveDone(),this._progressiveDone=!0}_removeRangeReader(I){const g=this._rangeReaders.indexOf(I);g>=0&&this._rangeReaders.splice(g,1)}getFullReader(){ct(!this._fullRequestReader,"PDFDataTransportStream.getFullReader can only be called once.");const I=this._queuedChunks;return this._queuedChunks=null,new ocg(this,I,this._progressiveDone,this._contentDispositionFilename)}getRangeReader(I,g){if(g<=this._progressiveDataLength)return null;const C=new ccg(this,I,g);return this._pdfDataRangeTransport.requestDataRange(I,g),this._rangeReaders.push(C),C}cancelAllRequests(I){var g;(g=this._fullRequestReader)==null||g.cancel(I);for(const C of this._rangeReaders.slice(0))C.cancel(I);this._pdfDataRangeTransport.abort()}}class ocg{constructor(I,g,C=!1,i=null){this._stream=I,this._done=C||!1,this._filename=$D(i)?i:null,this._queuedChunks=g||[],this._loaded=0;for(const e of this._queuedChunks)this._loaded+=e.byteLength;this._requests=[],this._headersReady=Promise.resolve(),I._fullRequestReader=this,this.onProgress=null}_enqueue(I){this._done||(this._requests.length>0?this._requests.shift().resolve({value:I,done:!1}):this._queuedChunks.push(I),this._loaded+=I.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)return{value:this._queuedChunks.shift(),done:!1};if(this._done)return{value:void 0,done:!0};const I=Promise.withResolvers();return this._requests.push(I),I.promise}cancel(I){this._done=!0;for(const g of this._requests)g.resolve({value:void 0,done:!0});this._requests.length=0}progressiveDone(){this._done||(this._done=!0)}}class ccg{constructor(I,g,C){this._stream=I,this._begin=g,this._end=C,this._queuedChunk=null,this._requests=[],this._done=!1,this.onProgress=null}_enqueue(I){if(!this._done){if(this._requests.length===0)this._queuedChunk=I;else{this._requests.shift().resolve({value:I,done:!1});for(const C of this._requests)C.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 g=this._queuedChunk;return this._queuedChunk=null,{value:g,done:!1}}if(this._done)return{value:void 0,done:!0};const I=Promise.withResolvers();return this._requests.push(I),I.promise}cancel(I){this._done=!0;for(const g of this._requests)g.resolve({value:void 0,done:!0});this._requests.length=0,this._stream._removeRangeReader(this)}}function dcg(t){let I=!0,g=C("filename\\*","i").exec(t);if(g){g=g[1];let a=s(g);return a=unescape(a),a=l(a),a=n(a),e(a)}if(g=A(t),g){const a=n(g);return e(a)}if(g=C("filename","i").exec(t),g){g=g[1];let a=s(g);return a=n(a),e(a)}function C(a,d){return new RegExp("(?:^|;)\\s*"+a+'\\s*=\\s*([^";\\s][^;\\s]*|"(?:[^"\\\\]|\\\\"?)+"?)',d)}function i(a,d){if(a){if(!/^[\x00-\xFF]+$/.test(d))return d;try{const o=new TextDecoder(a,{fatal:!0}),c=QZ(d);d=o.decode(c),I=!1}catch{}}return d}function e(a){return I&&/[\x80-\xff]/.test(a)&&(a=i("utf-8",a),I&&(a=i("iso-8859-1",a))),a}function A(a){const d=[];let o;const c=C("filename\\*((?!0\\d)\\d+)(\\*?)","ig");for(;(o=c.exec(a))!==null;){let[,h,b,u]=o;if(h=parseInt(h,10),h in d){if(h===0)break;continue}d[h]=[b,u]}const r=[];for(let h=0;h<d.length&&h in d;++h){let[b,u]=d[h];u=s(u),b&&(u=unescape(u),h===0&&(u=l(u))),r.push(u)}return r.join("")}function s(a){if(a.startsWith('"')){const d=a.slice(1).split('\\"');for(let o=0;o<d.length;++o){const c=d[o].indexOf('"');c!==-1&&(d[o]=d[o].slice(0,c),d.length=o+1),d[o]=d[o].replaceAll(/\\(.)/g,"$1")}a=d.join('"')}return a}function l(a){const d=a.indexOf("'");if(d===-1)return a;const o=a.slice(0,d),r=a.slice(d+1).replace(/^[^']*'/,"");return i(o,r)}function n(a){return!a.startsWith("=?")||/[\x00-\x19\x80-\xff]/.test(a)?a:a.replaceAll(/=\?([\w-]*)\?([QqBb])\?((?:[^?]|\?(?!=))*)\?=/g,function(d,o,c,r){if(c==="q"||c==="Q")return r=r.replaceAll("_"," "),r=r.replaceAll(/=([0-9a-fA-F]{2})/g,function(h,b){return String.fromCharCode(parseInt(b,16))}),i(o,r);try{r=atob(r)}catch{}return i(o,r)})}return""}function tgg(t,I){const g=new Headers;if(!t||!I||typeof I!="object")return g;for(const C in I){const i=I[C];i!==void 0&&g.append(C,i)}return g}function zV(t){var I;return((I=URL.parse(t))==null?void 0:I.origin)??null}function igg({responseHeaders:t,isHttp:I,rangeChunkSize:g,disableRange:C}){const i={allowRangeRequests:!1,suggestedLength:void 0},e=parseInt(t.get("Content-Length"),10);return!Number.isInteger(e)||(i.suggestedLength=e,e<=2*g)||C||!I||t.get("Accept-Ranges")!=="bytes"||(t.get("Content-Encoding")||"identity")!=="identity"||(i.allowRangeRequests=!0),i}function egg(t){const I=t.get("Content-Disposition");if(I){let g=dcg(I);if(g.includes("%"))try{g=decodeURIComponent(g)}catch{}if($D(g))return g}return null}function PZ(t,I){return new LN(`Unexpected server response (${t}) while retrieving PDF "${I}".`,t,t===404||t===0&&I.startsWith("file:"))}function Agg(t){return t===200||t===206}function sgg(t,I,g){return{method:"GET",headers:t,signal:g.signal,mode:"cors",credentials:I?"include":"same-origin",redirect:"follow"}}function lgg(t){return t instanceof Uint8Array?t.buffer:t instanceof ArrayBuffer?t:(HI(`getArrayBuffer - unexpected data format: ${t}`),new Uint8Array(t).buffer)}class g8{constructor(I){CI(this,"_responseOrigin",null);this.source=I,this.isHttp=/^https?:/i.test(I.url),this.headers=tgg(this.isHttp,I.httpHeaders),this._fullRequestReader=null,this._rangeRequestReaders=[]}get _progressiveDataLength(){var I;return((I=this._fullRequestReader)==null?void 0:I._loaded)??0}getFullReader(){return ct(!this._fullRequestReader,"PDFFetchStream.getFullReader can only be called once."),this._fullRequestReader=new rcg(this),this._fullRequestReader}getRangeReader(I,g){if(g<=this._progressiveDataLength)return null;const C=new hcg(this,I,g);return this._rangeRequestReaders.push(C),C}cancelAllRequests(I){var g;(g=this._fullRequestReader)==null||g.cancel(I);for(const C of this._rangeRequestReaders.slice(0))C.cancel(I)}}class rcg{constructor(I){this._stream=I,this._reader=null,this._loaded=0,this._filename=null;const g=I.source;this._withCredentials=g.withCredentials||!1,this._contentLength=g.length,this._headersCapability=Promise.withResolvers(),this._disableRange=g.disableRange||!1,this._rangeChunkSize=g.rangeChunkSize,!this._rangeChunkSize&&!this._disableRange&&(this._disableRange=!0),this._abortController=new AbortController,this._isStreamingSupported=!g.disableStream,this._isRangeSupported=!g.disableRange;const C=new Headers(I.headers),i=g.url;fetch(i,sgg(C,this._withCredentials,this._abortController)).then(e=>{if(I._responseOrigin=zV(e.url),!Agg(e.status))throw PZ(e.status,i);this._reader=e.body.getReader(),this._headersCapability.resolve();const A=e.headers,{allowRangeRequests:s,suggestedLength:l}=igg({responseHeaders:A,isHttp:I.isHttp,rangeChunkSize:this._rangeChunkSize,disableRange:this._disableRange});this._isRangeSupported=s,this._contentLength=l||this._contentLength,this._filename=egg(A),!this._isStreamingSupported&&this._isRangeSupported&&this.cancel(new za("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(){var C;await this._headersCapability.promise;const{value:I,done:g}=await this._reader.read();return g?{value:I,done:g}:(this._loaded+=I.byteLength,(C=this.onProgress)==null||C.call(this,{loaded:this._loaded,total:this._contentLength}),{value:lgg(I),done:!1})}cancel(I){var g;(g=this._reader)==null||g.cancel(I),this._abortController.abort()}}class hcg{constructor(I,g,C){this._stream=I,this._reader=null,this._loaded=0;const i=I.source;this._withCredentials=i.withCredentials||!1,this._readCapability=Promise.withResolvers(),this._isStreamingSupported=!i.disableStream,this._abortController=new AbortController;const e=new Headers(I.headers);e.append("Range",`bytes=${g}-${C-1}`);const A=i.url;fetch(A,sgg(e,this._withCredentials,this._abortController)).then(s=>{const l=zV(s.url);if(l!==I._responseOrigin)throw new Error(`Expected range response-origin "${l}" to match "${I._responseOrigin}".`);if(!Agg(s.status))throw PZ(s.status,A);this._readCapability.resolve(),this._reader=s.body.getReader()}).catch(this._readCapability.reject),this.onProgress=null}get isStreamingSupported(){return this._isStreamingSupported}async read(){var C;await this._readCapability.promise;const{value:I,done:g}=await this._reader.read();return g?{value:I,done:g}:(this._loaded+=I.byteLength,(C=this.onProgress)==null||C.call(this,{loaded:this._loaded}),{value:lgg(I),done:!1})}cancel(I){var g;(g=this._reader)==null||g.cancel(I),this._abortController.abort()}}const HH=200,XH=206;function bcg(t){const I=t.response;return typeof I!="string"?I:QZ(I).buffer}class ucg{constructor({url:I,httpHeaders:g,withCredentials:C}){CI(this,"_responseOrigin",null);this.url=I,this.isHttp=/^https?:/i.test(I),this.headers=tgg(this.isHttp,g),this.withCredentials=C||!1,this.currXhrId=0,this.pendingRequests=Object.create(null)}request(I){const g=new XMLHttpRequest,C=this.currXhrId++,i=this.pendingRequests[C]={xhr:g};g.open("GET",this.url),g.withCredentials=this.withCredentials;for(const[e,A]of this.headers)g.setRequestHeader(e,A);return this.isHttp&&"begin"in I&&"end"in I?(g.setRequestHeader("Range",`bytes=${I.begin}-${I.end-1}`),i.expectedStatus=XH):i.expectedStatus=HH,g.responseType="arraybuffer",ct(I.onError,"Expected `onError` callback to be provided."),g.onerror=()=>{I.onError(g.status)},g.onreadystatechange=this.onStateChange.bind(this,C),g.onprogress=this.onProgress.bind(this,C),i.onHeadersReceived=I.onHeadersReceived,i.onDone=I.onDone,i.onError=I.onError,i.onProgress=I.onProgress,g.send(null),C}onProgress(I,g){var i;const C=this.pendingRequests[I];C&&((i=C.onProgress)==null||i.call(C,g))}onStateChange(I,g){const C=this.pendingRequests[I];if(!C)return;const i=C.xhr;if(i.readyState>=2&&C.onHeadersReceived&&(C.onHeadersReceived(),delete C.onHeadersReceived),i.readyState!==4||!(I in this.pendingRequests))return;if(delete this.pendingRequests[I],i.status===0&&this.isHttp){C.onError(i.status);return}const e=i.status||HH;if(!(e===HH&&C.expectedStatus===XH)&&e!==C.expectedStatus){C.onError(i.status);return}const s=bcg(i);if(e===XH){const l=i.getResponseHeader("Content-Range"),n=/bytes (\d+)-(\d+)\/(\d+)/.exec(l);n?C.onDone({begin:parseInt(n[1],10),chunk:s}):(HI('Missing or invalid "Content-Range" header.'),C.onError(0))}else s?C.onDone({begin:0,chunk:s}):C.onError(i.status)}getRequestXhr(I){return this.pendingRequests[I].xhr}isPendingRequest(I){return I in this.pendingRequests}abortRequest(I){const g=this.pendingRequests[I].xhr;delete this.pendingRequests[I],g.abort()}}class mcg{constructor(I){this._source=I,this._manager=new ucg(I),this._rangeChunkSize=I.rangeChunkSize,this._fullRequestReader=null,this._rangeRequestReaders=[]}_onRangeRequestReaderClosed(I){const g=this._rangeRequestReaders.indexOf(I);g>=0&&this._rangeRequestReaders.splice(g,1)}getFullReader(){return ct(!this._fullRequestReader,"PDFNetworkStream.getFullReader can only be called once."),this._fullRequestReader=new Zcg(this._manager,this._source),this._fullRequestReader}getRangeReader(I,g){const C=new Gcg(this._manager,I,g);return C.onClosed=this._onRangeRequestReaderClosed.bind(this),this._rangeRequestReaders.push(C),C}cancelAllRequests(I){var g;(g=this._fullRequestReader)==null||g.cancel(I);for(const C of this._rangeRequestReaders.slice(0))C.cancel(I)}}class Zcg{constructor(I,g){this._manager=I,this._url=g.url,this._fullRequestId=I.request({onHeadersReceived:this._onHeadersReceived.bind(this),onDone:this._onDone.bind(this),onError:this._onError.bind(this),onProgress:this._onProgress.bind(this)}),this._headersCapability=Promise.withResolvers(),this._disableRange=g.disableRange||!1,this._contentLength=g.length,this._rangeChunkSize=g.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 I=this._fullRequestId,g=this._manager.getRequestXhr(I);this._manager._responseOrigin=zV(g.responseURL);const C=g.getAllResponseHeaders(),i=new Headers(C?C.trimStart().replace(/[^\S ]+$/,"").split(/[\r\n]+/).map(s=>{const[l,...n]=s.split(": ");return[l,n.join(": ")]}):[]),{allowRangeRequests:e,suggestedLength:A}=igg({responseHeaders:i,isHttp:this._manager.isHttp,rangeChunkSize:this._rangeChunkSize,disableRange:this._disableRange});e&&(this._isRangeSupported=!0),this._contentLength=A||this._contentLength,this._filename=egg(i),this._isRangeSupported&&this._manager.abortRequest(I),this._headersCapability.resolve()}_onDone(I){if(I&&(this._requests.length>0?this._requests.shift().resolve({value:I.chunk,done:!1}):this._cachedChunks.push(I.chunk)),this._done=!0,!(this._cachedChunks.length>0)){for(const g of this._requests)g.resolve({value:void 0,done:!0});this._requests.length=0}}_onError(I){this._storedError=PZ(I,this._url),this._headersCapability.reject(this._storedError);for(const g of this._requests)g.reject(this._storedError);this._requests.length=0,this._cachedChunks.length=0}_onProgress(I){var g;(g=this.onProgress)==null||g.call(this,{loaded:I.loaded,total:I.lengthComputable?I.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._headersCapability.promise}async read(){if(await this._headersCapability.promise,this._storedError)throw this._storedError;if(this._cachedChunks.length>0)return{value:this._cachedChunks.shift(),done:!1};if(this._done)return{value:void 0,done:!0};const I=Promise.withResolvers();return this._requests.push(I),I.promise}cancel(I){this._done=!0,this._headersCapability.reject(I);for(const g of this._requests)g.resolve({value:void 0,done:!0});this._requests.length=0,this._manager.isPendingRequest(this._fullRequestId)&&this._manager.abortRequest(this._fullRequestId),this._fullRequestReader=null}}class Gcg{constructor(I,g,C){this._manager=I,this._url=I.url,this._requestId=I.request({begin:g,end:C,onHeadersReceived:this._onHeadersReceived.bind(this),onDone:this._onDone.bind(this),onError:this._onError.bind(this),onProgress:this._onProgress.bind(this)}),this._requests=[],this._queuedChunk=null,this._done=!1,this._storedError=void 0,this.onProgress=null,this.onClosed=null}_onHeadersReceived(){var g;const I=zV((g=this._manager.getRequestXhr(this._requestId))==null?void 0:g.responseURL);I!==this._manager._responseOrigin&&(this._storedError=new Error(`Expected range response-origin "${I}" to match "${this._manager._responseOrigin}".`),this._onError(0))}_close(){var I;(I=this.onClosed)==null||I.call(this,this)}_onDone(I){const g=I.chunk;this._requests.length>0?this._requests.shift().resolve({value:g,done:!1}):this._queuedChunk=g,this._done=!0;for(const C of this._requests)C.resolve({value:void 0,done:!0});this._requests.length=0,this._close()}_onError(I){this._storedError??(this._storedError=PZ(I,this._url));for(const g of this._requests)g.reject(this._storedError);this._requests.length=0,this._queuedChunk=null}_onProgress(I){var g;this.isStreamingSupported||(g=this.onProgress)==null||g.call(this,{loaded:I.loaded})}get isStreamingSupported(){return!1}async read(){if(this._storedError)throw this._storedError;if(this._queuedChunk!==null){const g=this._queuedChunk;return this._queuedChunk=null,{value:g,done:!1}}if(this._done)return{value:void 0,done:!0};const I=Promise.withResolvers();return this._requests.push(I),I.promise}cancel(I){this._done=!0;for(const g of this._requests)g.resolve({value:void 0,done:!0});this._requests.length=0,this._manager.isPendingRequest(this._requestId)&&this._manager.abortRequest(this._requestId),this._close()}}const wcg=/^[a-z][a-z0-9\-+.]+:/i;function pcg(t){if(wcg.test(t))return new URL(t);const I=process.getBuiltinModule("url");return new URL(I.pathToFileURL(t))}class Bcg{constructor(I){this.source=I,this.url=pcg(I.url),ct(this.url.protocol==="file:","PDFNodeStream only supports file:// URLs."),this._fullRequestReader=null,this._rangeRequestReaders=[]}get _progressiveDataLength(){var I;return((I=this._fullRequestReader)==null?void 0:I._loaded)??0}getFullReader(){return ct(!this._fullRequestReader,"PDFNodeStream.getFullReader can only be called once."),this._fullRequestReader=new Wcg(this),this._fullRequestReader}getRangeReader(I,g){if(g<=this._progressiveDataLength)return null;const C=new ycg(this,I,g);return this._rangeRequestReaders.push(C),C}cancelAllRequests(I){var g;(g=this._fullRequestReader)==null||g.cancel(I);for(const C of this._rangeRequestReaders.slice(0))C.cancel(I)}}class Wcg{constructor(I){this._url=I.url,this._done=!1,this._storedError=null,this.onProgress=null;const g=I.source;this._contentLength=g.length,this._loaded=0,this._filename=null,this._disableRange=g.disableRange||!1,this._rangeChunkSize=g.rangeChunkSize,!this._rangeChunkSize&&!this._disableRange&&(this._disableRange=!0),this._isStreamingSupported=!g.disableStream,this._isRangeSupported=!g.disableRange,this._readableStream=null,this._readCapability=Promise.withResolvers(),this._headersCapability=Promise.withResolvers();const C=process.getBuiltinModule("fs");C.promises.lstat(this._url).then(i=>{this._contentLength=i.size,this._setReadableStream(C.createReadStream(this._url)),this._headersCapability.resolve()},i=>{i.code==="ENOENT"&&(i=PZ(0,this._url.href)),this._storedError=i,this._headersCapability.reject(i)})}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(){var C;if(await this._readCapability.promise,this._done)return{value:void 0,done:!0};if(this._storedError)throw this._storedError;const I=this._readableStream.read();return I===null?(this._readCapability=Promise.withResolvers(),this.read()):(this._loaded+=I.length,(C=this.onProgress)==null||C.call(this,{loaded:this._loaded,total:this._contentLength}),{value:new Uint8Array(I).buffer,done:!1})}cancel(I){if(!this._readableStream){this._error(I);return}this._readableStream.destroy(I)}_error(I){this._storedError=I,this._readCapability.resolve()}_setReadableStream(I){this._readableStream=I,I.on("readable",()=>{this._readCapability.resolve()}),I.on("end",()=>{I.destroy(),this._done=!0,this._readCapability.resolve()}),I.on("error",g=>{this._error(g)}),!this._isStreamingSupported&&this._isRangeSupported&&this._error(new za("streaming is disabled")),this._storedError&&this._readableStream.destroy(this._storedError)}}class ycg{constructor(I,g,C){this._url=I.url,this._done=!1,this._storedError=null,this.onProgress=null,this._loaded=0,this._readableStream=null,this._readCapability=Promise.withResolvers();const i=I.source;this._isStreamingSupported=!i.disableStream;const e=process.getBuiltinModule("fs");this._setReadableStream(e.createReadStream(this._url,{start:g,end:C-1}))}get isStreamingSupported(){return this._isStreamingSupported}async read(){var C;if(await this._readCapability.promise,this._done)return{value:void 0,done:!0};if(this._storedError)throw this._storedError;const I=this._readableStream.read();return I===null?(this._readCapability=Promise.withResolvers(),this.read()):(this._loaded+=I.length,(C=this.onProgress)==null||C.call(this,{loaded:this._loaded}),{value:new Uint8Array(I).buffer,done:!1})}cancel(I){if(!this._readableStream){this._error(I);return}this._readableStream.destroy(I)}_error(I){this._storedError=I,this._readCapability.resolve()}_setReadableStream(I){this._readableStream=I,I.on("readable",()=>{this._readCapability.resolve()}),I.on("end",()=>{I.destroy(),this._done=!0,this._readCapability.resolve()}),I.on("error",g=>{this._error(g)}),this._storedError&&this._readableStream.destroy(this._storedError)}}const Ycg=1e5,I8=30;var _q,ba,zi,CZ,tZ,uc,Zl,iZ,eZ,mc,Mh,Rh,ua,fh,AZ,Hh,Zc,sZ,lZ,Xh,Gc,nZ,ma,Sh,Ql,ngg,agg,eS,Ge,AN,AS,ogg,cgg;const bt=class bt{constructor({textContentSource:I,container:g,viewport:C}){ig(this,Ql);ig(this,ba,Promise.withResolvers());ig(this,zi,null);ig(this,CZ,!1);ig(this,tZ,!!((_q=globalThis.FontInspector)!=null&&_q.enabled));ig(this,uc,null);ig(this,Zl,null);ig(this,iZ,0);ig(this,eZ,0);ig(this,mc,null);ig(this,Mh,null);ig(this,Rh,0);ig(this,ua,0);ig(this,fh,Object.create(null));ig(this,AZ,[]);ig(this,Hh,null);ig(this,Zc,[]);ig(this,sZ,new WeakMap);ig(this,lZ,null);var l;if(I instanceof ReadableStream)$(this,Hh,I);else if(typeof I=="object")$(this,Hh,new ReadableStream({start(n){n.enqueue(I),n.close()}}));else throw new Error('No "textContentSource" parameter specified.');$(this,zi,$(this,Mh,g)),$(this,ua,C.scale*jl.pixelRatio),$(this,Rh,C.rotation),$(this,Zl,{div:null,properties:null,ctx:null});const{pageWidth:i,pageHeight:e,pageX:A,pageY:s}=C.rawDims;$(this,lZ,[1,0,0,-1,-A,s+e]),$(this,eZ,i),$(this,iZ,e),eg(l=bt,Ge,ogg).call(l),Cd(g,C),M(this,ba).promise.finally(()=>{M(bt,Sh).delete(this),$(this,Zl,null),$(this,fh,null)}).catch(()=>{})}static get fontFamilyMap(){const{isWindows:I,isFirefox:g}=gi.platform;return jI(this,"fontFamilyMap",new Map([["sans-serif",`${I&&g?"Calibri, ":""}sans-serif`],["monospace",`${I&&g?"Lucida Console, ":""}monospace`]]))}render(){const I=()=>{M(this,mc).read().then(({value:g,done:C})=>{if(C){M(this,ba).resolve();return}M(this,uc)??$(this,uc,g.lang),Object.assign(M(this,fh),g.styles),eg(this,Ql,ngg).call(this,g.items),I()},M(this,ba).reject)};return $(this,mc,M(this,Hh).getReader()),M(bt,Sh).add(this),I(),M(this,ba).promise}update({viewport:I,onBefore:g=null}){var e;const C=I.scale*jl.pixelRatio,i=I.rotation;if(i!==M(this,Rh)&&(g==null||g(),$(this,Rh,i),Cd(M(this,Mh),{rotation:i})),C!==M(this,ua)){g==null||g(),$(this,ua,C);const A={div:null,properties:null,ctx:eg(e=bt,Ge,AN).call(e,M(this,uc))};for(const s of M(this,Zc))A.properties=M(this,sZ).get(s),A.div=s,eg(this,Ql,eS).call(this,A)}}cancel(){var g;const I=new za("TextLayer task cancelled.");(g=M(this,mc))==null||g.cancel(I).catch(()=>{}),$(this,mc,null),M(this,ba).reject(I)}get textDivs(){return M(this,Zc)}get textContentItemsStr(){return M(this,AZ)}static cleanup(){if(!(M(this,Sh).size>0)){M(this,Xh).clear();for(const{canvas:I}of M(this,Gc).values())I.remove();M(this,Gc).clear()}}};ba=new WeakMap,zi=new WeakMap,CZ=new WeakMap,tZ=new WeakMap,uc=new WeakMap,Zl=new WeakMap,iZ=new WeakMap,eZ=new WeakMap,mc=new WeakMap,Mh=new WeakMap,Rh=new WeakMap,ua=new WeakMap,fh=new WeakMap,AZ=new WeakMap,Hh=new WeakMap,Zc=new WeakMap,sZ=new WeakMap,lZ=new WeakMap,Xh=new WeakMap,Gc=new WeakMap,nZ=new WeakMap,ma=new WeakMap,Sh=new WeakMap,Ql=new WeakSet,ngg=function(I){var i,e;if(M(this,CZ))return;(e=M(this,Zl)).ctx??(e.ctx=eg(i=bt,Ge,AN).call(i,M(this,uc)));const g=M(this,Zc),C=M(this,AZ);for(const A of I){if(g.length>Ycg){HI("Ignoring additional textDivs for performance reasons."),$(this,CZ,!0);return}if(A.str===void 0){if(A.type==="beginMarkedContentProps"||A.type==="beginMarkedContent"){const s=M(this,zi);$(this,zi,document.createElement("span")),M(this,zi).classList.add("markedContent"),A.id!==null&&M(this,zi).setAttribute("id",`${A.id}`),s.append(M(this,zi))}else A.type==="endMarkedContent"&&$(this,zi,M(this,zi).parentNode);continue}C.push(A.str),eg(this,Ql,agg).call(this,A)}},agg=function(I){var h;const g=document.createElement("span"),C={angle:0,canvasWidth:0,hasText:I.str!=="",hasEOL:I.hasEOL,fontSize:0};M(this,Zc).push(g);const i=iI.transform(M(this,lZ),I.transform);let e=Math.atan2(i[1],i[0]);const A=M(this,fh)[I.fontName];A.vertical&&(e+=Math.PI/2);let s=M(this,tZ)&&A.fontSubstitution||A.fontFamily;s=bt.fontFamilyMap.get(s)||s;const l=Math.hypot(i[2],i[3]),n=l*eg(h=bt,Ge,cgg).call(h,s,A,M(this,uc));let a,d;e===0?(a=i[4],d=i[5]-n):(a=i[4]+n*Math.sin(e),d=i[5]-n*Math.cos(e));const o="calc(var(--total-scale-factor) *",c=g.style;M(this,zi)===M(this,Mh)?(c.left=`${(100*a/M(this,eZ)).toFixed(2)}%`,c.top=`${(100*d/M(this,iZ)).toFixed(2)}%`):(c.left=`${o}${a.toFixed(2)}px)`,c.top=`${o}${d.toFixed(2)}px)`),c.fontSize=`${o}${(M(bt,ma)*l).toFixed(2)}px)`,c.fontFamily=s,C.fontSize=l,g.setAttribute("role","presentation"),g.textContent=I.str,g.dir=I.dir,M(this,tZ)&&(g.dataset.fontName=A.fontSubstitutionLoadedName||I.fontName),e!==0&&(C.angle=e*(180/Math.PI));let r=!1;if(I.str.length>1)r=!0;else if(I.str!==" "&&I.transform[0]!==I.transform[3]){const b=Math.abs(I.transform[0]),u=Math.abs(I.transform[3]);b!==u&&Math.max(b,u)/Math.min(b,u)>1.5&&(r=!0)}if(r&&(C.canvasWidth=A.vertical?I.height:I.width),M(this,sZ).set(g,C),M(this,Zl).div=g,M(this,Zl).properties=C,eg(this,Ql,eS).call(this,M(this,Zl)),C.hasText&&M(this,zi).append(g),C.hasEOL){const b=document.createElement("br");b.setAttribute("role","presentation"),M(this,zi).append(b)}},eS=function(I){var s;const{div:g,properties:C,ctx:i}=I,{style:e}=g;let A="";if(M(bt,ma)>1&&(A=`scale(${1/M(bt,ma)})`),C.canvasWidth!==0&&C.hasText){const{fontFamily:l}=e,{canvasWidth:n,fontSize:a}=C;eg(s=bt,Ge,AS).call(s,i,a*M(this,ua),l);const{width:d}=i.measureText(g.textContent);d>0&&(A=`scaleX(${n*M(this,ua)/d}) ${A}`)}C.angle!==0&&(A=`rotate(${C.angle}deg) ${A}`),A.length>0&&(e.transform=A)},Ge=new WeakSet,AN=function(I=null){let g=M(this,Gc).get(I||(I=""));if(!g){const C=document.createElement("canvas");C.className="hiddenCanvasElement",C.lang=I,document.body.append(C),g=C.getContext("2d",{alpha:!1,willReadFrequently:!0}),M(this,Gc).set(I,g),M(this,nZ).set(g,{size:0,family:""})}return g},AS=function(I,g,C){const i=M(this,nZ).get(I);g===i.size&&C===i.family||(I.font=`${g}px ${C}`,i.size=g,i.family=C)},ogg=function(){if(M(this,ma)!==null)return;const I=document.createElement("div");I.style.opacity=0,I.style.lineHeight=1,I.style.fontSize="1px",I.style.position="absolute",I.textContent="X",document.body.append(I),$(this,ma,I.getBoundingClientRect().height),I.remove()},cgg=function(I,g,C){const i=M(this,Xh).get(I);if(i)return i;const e=eg(this,Ge,AN).call(this,C);e.canvas.width=e.canvas.height=I8,eg(this,Ge,AS).call(this,e,I8,I);const A=e.measureText(""),s=A.fontBoundingBoxAscent,l=Math.abs(A.fontBoundingBoxDescent);e.canvas.width=e.canvas.height=0;let n=.8;return s?n=s/(s+l):(gi.platform.isFirefox&&HI("Enable the `dom.textMetrics.fontBoundingBox.enabled` preference in `about:config` to improve TextLayer rendering."),g.ascent?n=g.ascent:g.descent&&(n=1+g.descent)),M(this,Xh).set(I,n),n},ig(bt,Ge),ig(bt,Xh,new Map),ig(bt,Gc,new Map),ig(bt,nZ,new WeakMap),ig(bt,ma,null),ig(bt,Sh,new Set);let mm=bt;class Zm{static textContent(I){const g=[],C={items:g,styles:Object.create(null)};function i(e){var l;if(!e)return;let A=null;const s=e.name;if(s==="#text")A=e.value;else if(Zm.shouldBuildText(s))(l=e==null?void 0:e.attributes)!=null&&l.textContent?A=e.attributes.textContent:e.value&&(A=e.value);else return;if(A!==null&&g.push({str:A}),!!e.children)for(const n of e.children)i(n)}return i(I),C}static shouldBuildText(I){return!(I==="textarea"||I==="input"||I==="option"||I==="select")}}const Ncg=65536,Vcg=100;function Mcg(t={}){typeof t=="string"||t instanceof URL?t={url:t}:(t instanceof ArrayBuffer||ArrayBuffer.isView(t))&&(t={data:t});const I=new lS,{docId:g}=I,C=t.url?Rcg(t.url):null,i=t.data?fcg(t.data):null,e=t.httpHeaders||null,A=t.withCredentials===!0,s=t.password??null,l=t.range instanceof dgg?t.range:null,n=Number.isInteger(t.rangeChunkSize)&&t.rangeChunkSize>0?t.rangeChunkSize:Ncg;let a=t.worker instanceof Ch?t.worker:null;const d=t.verbosity,o=typeof t.docBaseUrl=="string"&&!kV(t.docBaseUrl)?t.docBaseUrl:null,c=YY(t.cMapUrl),r=t.cMapPacked!==!1,h=t.CMapReaderFactory||(Ot?jog:L6),b=YY(t.iccUrl),u=YY(t.standardFontDataUrl),m=t.StandardFontDataFactory||(Ot?Qog:v6),Z=YY(t.wasmUrl),p=t.WasmFactory||(Ot?Oog:T6),Y=t.stopAtErrors!==!0,R=Number.isInteger(t.maxImageSize)&&t.maxImageSize>-1?t.maxImageSize:-1,X=t.isEvalSupported!==!1,H=typeof t.isOffscreenCanvasSupported=="boolean"?t.isOffscreenCanvasSupported:!Ot,S=typeof t.isImageDecoderSupported=="boolean"?t.isImageDecoderSupported:!Ot&&(gi.platform.isFirefox||!globalThis.chrome),z=Number.isInteger(t.canvasMaxAreaInBytes)?t.canvasMaxAreaInBytes:-1,v=typeof t.disableFontFace=="boolean"?t.disableFontFace:Ot,K=t.fontExtraProperties===!0,V=t.enableXfa===!0,N=t.ownerDocument||globalThis.document,B=t.disableRange===!0,G=t.disableStream===!0,w=t.disableAutoFetch===!0,W=t.pdfBug===!0,y=t.CanvasFactory||(Ot?xog:Log),f=t.FilterFactory||(Ot?Tog:vog),D=t.enableHWA===!0,F=t.useWasm!==!1,T=l?l.length:t.length??NaN,Q=typeof t.useSystemFonts=="boolean"?t.useSystemFonts:!Ot&&!v,P=typeof t.useWorkerFetch=="boolean"?t.useWorkerFetch:!!(h===L6&&m===v6&&p===T6&&c&&u&&Z&&Fr(c,document.baseURI)&&Fr(u,document.baseURI)&&Fr(Z,document.baseURI)),L=null;Zog(d);const E={canvasFactory:new y({ownerDocument:N,enableHWA:D}),filterFactory:new f({docId:g,ownerDocument:N}),cMapReaderFactory:P?null:new h({baseUrl:c,isCompressed:r}),standardFontDataFactory:P?null:new m({baseUrl:u}),wasmFactory:P?null:new p({baseUrl:Z})};if(!a){const j={verbosity:d,port:Kl.workerPort};a=j.port?Ch.fromPort(j):new Ch(j),I._worker=a}const J={docId:g,apiVersion:"5.1.91",data:i,password:s,disableAutoFetch:w,rangeChunkSize:n,length:T,docBaseUrl:o,enableXfa:V,evaluatorOptions:{maxImageSize:R,disableFontFace:v,ignoreErrors:Y,isEvalSupported:X,isOffscreenCanvasSupported:H,isImageDecoderSupported:S,canvasMaxAreaInBytes:z,fontExtraProperties:K,useSystemFonts:Q,useWasm:F,useWorkerFetch:P,cMapUrl:c,iccUrl:b,standardFontDataUrl:u,wasmUrl:Z}},k={ownerDocument:N,pdfBug:W,styleElement:L,loadingParams:{disableAutoFetch:w,enableXfa:V}};return a.promise.then(function(){if(I.destroyed)throw new Error("Loading aborted");if(a.destroyed)throw new Error("Worker was destroyed");const j=a.messageHandler.sendWithPromise("GetDocRequest",J,i?[i.buffer]:null);let q;if(l)q=new acg(l,{disableRange:B,disableStream:G});else if(!i){if(!C)throw new Error("getDocument - no `url` parameter provided.");let tg;if(Ot)if(Fr(C)){if(typeof fetch>"u"||typeof Response>"u"||!("body"in Response.prototype))throw new Error("getDocument - the Fetch API was disabled in Node.js, see `--no-experimental-fetch`.");tg=g8}else tg=Bcg;else tg=Fr(C)?g8:mcg;q=new tg({url:C,length:T,httpHeaders:e,withCredentials:A,rangeChunkSize:n,disableRange:B,disableStream:G})}return j.then(tg=>{if(I.destroyed)throw new Error("Loading aborted");if(a.destroyed)throw new Error("Worker was destroyed");const Cg=new Ku(g,tg,a.port),x=new Fcg(Cg,I,q,k,E);I._transport=x,Cg.send("Ready",null)})}).catch(I._capability.reject),I}function Rcg(t){if(t instanceof URL)return t.href;if(typeof t=="string"){if(Ot)return t;const I=URL.parse(t,window.location);if(I)return I.href}throw new Error("Invalid PDF url data: either string or URL-object is expected in the url property.")}function fcg(t){if(Ot&&typeof Buffer<"u"&&t instanceof Buffer)throw new Error("Please provide binary data as `Uint8Array`, rather than `Buffer`.");if(t instanceof Uint8Array&&t.byteLength===t.buffer.byteLength)return t;if(typeof t=="string")return QZ(t);if(t instanceof ArrayBuffer||ArrayBuffer.isView(t)||typeof t=="object"&&!isNaN(t==null?void 0:t.length))return new Uint8Array(t);throw new Error("Invalid PDF binary data: either TypedArray, string, or array-like object is expected in the data property.")}function YY(t){if(typeof t!="string")return null;if(t.endsWith("/"))return t;throw new Error(`Invalid factory url: "${t}" must include trailing slash.`)}const sS=t=>typeof t=="object"&&Number.isInteger(t==null?void 0:t.num)&&t.num>=0&&Number.isInteger(t==null?void 0:t.gen)&&t.gen>=0,Hcg=t=>typeof t=="object"&&typeof(t==null?void 0:t.name)=="string",Xcg=Mog.bind(null,sS,Hcg);var WV;const yV=class yV{constructor(){CI(this,"_capability",Promise.withResolvers());CI(this,"_transport",null);CI(this,"_worker",null);CI(this,"docId",`d${ui(yV,WV)._++}`);CI(this,"destroyed",!1);CI(this,"onPassword",null);CI(this,"onProgress",null)}get promise(){return this._capability.promise}async destroy(){var I,g,C,i;this.destroyed=!0;try{(I=this._worker)!=null&&I.port&&(this._worker._pendingDestroy=!0),await((g=this._transport)==null?void 0:g.destroy())}catch(e){throw(C=this._worker)!=null&&C.port&&delete this._worker._pendingDestroy,e}this._transport=null,(i=this._worker)==null||i.destroy(),this._worker=null}async getData(){return this._transport.getData()}};WV=new WeakMap,ig(yV,WV,0);let lS=yV;class dgg{constructor(I,g,C=!1,i=null){this.length=I,this.initialData=g,this.progressiveDone=C,this.contentDispositionFilename=i,this._rangeListeners=[],this._progressListeners=[],this._progressiveReadListeners=[],this._progressiveDoneListeners=[],this._readyCapability=Promise.withResolvers()}addRangeListener(I){this._rangeListeners.push(I)}addProgressListener(I){this._progressListeners.push(I)}addProgressiveReadListener(I){this._progressiveReadListeners.push(I)}addProgressiveDoneListener(I){this._progressiveDoneListeners.push(I)}onDataRange(I,g){for(const C of this._rangeListeners)C(I,g)}onDataProgress(I,g){this._readyCapability.promise.then(()=>{for(const C of this._progressListeners)C(I,g)})}onDataProgressiveRead(I){this._readyCapability.promise.then(()=>{for(const g of this._progressiveReadListeners)g(I)})}onDataProgressiveDone(){this._readyCapability.promise.then(()=>{for(const I of this._progressiveDoneListeners)I()})}transportReady(){this._readyCapability.resolve()}requestDataRange(I,g){ZC("Abstract method PDFDataRangeTransport.requestDataRange")}abort(){}}class Scg{constructor(I,g){this._pdfInfo=I,this._transport=g}get annotationStorage(){return this._transport.annotationStorage}get canvasFactory(){return this._transport.canvasFactory}get filterFactory(){return this._transport.filterFactory}get numPages(){return this._pdfInfo.numPages}get fingerprints(){return this._pdfInfo.fingerprints}get isPureXfa(){return jI(this,"isPureXfa",!!this._transport._htmlForXfa)}get allXfaHtml(){return this._transport._htmlForXfa}getPage(I){return this._transport.getPage(I)}getPageIndex(I){return this._transport.getPageIndex(I)}getDestinations(){return this._transport.getDestinations()}getDestination(I){return this._transport.getDestination(I)}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()}getJSActions(){return this._transport.getDocJSActions()}getOutline(){return this._transport.getOutline()}getOptionalContentConfig({intent:I="display"}={}){const{renderingIntent:g}=this._transport.getRenderingIntent(I);return this._transport.getOptionalContentConfig(g)}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(I=!1){return this._transport.startCleanup(I||this.isPureXfa)}destroy(){return this.loadingTask.destroy()}cachedPageNumber(I){return this._transport.cachedPageNumber(I)}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()}}var Gl,wc,Lu;class Dcg{constructor(I,g,C,i=!1){ig(this,wc);ig(this,Gl,!1);this._pageIndex=I,this._pageInfo=g,this._transport=C,this._stats=i?new k6:null,this._pdfBug=i,this.commonObjs=C.commonObjs,this.objs=new rgg,this._intentStates=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:I,rotation:g=this.rotate,offsetX:C=0,offsetY:i=0,dontFlip:e=!1}={}){return new UZ({viewBox:this.view,userUnit:this.userUnit,scale:I,rotation:g,offsetX:C,offsetY:i,dontFlip:e})}getAnnotations({intent:I="display"}={}){const{renderingIntent:g}=this._transport.getRenderingIntent(I);return this._transport.getAnnotations(this._pageIndex,g)}getJSActions(){return this._transport.getPageJSActions(this._pageIndex)}get filterFactory(){return this._transport.filterFactory}get isPureXfa(){return jI(this,"isPureXfa",!!this._transport._htmlForXfa)}async getXfa(){var I;return((I=this._transport._htmlForXfa)==null?void 0:I.children[this._pageIndex])||null}render({canvasContext:I,viewport:g,intent:C="display",annotationMode:i=qn.ENABLE,transform:e=null,background:A=null,optionalContentConfigPromise:s=null,annotationCanvasMap:l=null,pageColors:n=null,printAnnotationStorage:a=null,isEditing:d=!1}){var p,Y;(p=this._stats)==null||p.time("Overall");const o=this._transport.getRenderingIntent(C,i,a,d),{renderingIntent:c,cacheKey:r}=o;$(this,Gl,!1),s||(s=this._transport.getOptionalContentConfig(c));let h=this._intentStates.get(r);h||(h=Object.create(null),this._intentStates.set(r,h)),h.streamReaderCancelTimeout&&(clearTimeout(h.streamReaderCancelTimeout),h.streamReaderCancelTimeout=null);const b=!!(c&be.PRINT);h.displayReadyCapability||(h.displayReadyCapability=Promise.withResolvers(),h.operatorList={fnArray:[],argsArray:[],lastChunk:!1,separateAnnots:null},(Y=this._stats)==null||Y.time("Page Request"),this._pumpOperatorList(o));const u=R=>{var X;h.renderTasks.delete(m),b&&$(this,Gl,!0),eg(this,wc,Lu).call(this),R?(m.capability.reject(R),this._abortOperatorList({intentState:h,reason:R instanceof Error?R:new Error(R)})):m.capability.resolve(),this._stats&&(this._stats.timeEnd("Rendering"),this._stats.timeEnd("Overall"),(X=globalThis.Stats)!=null&&X.enabled&&globalThis.Stats.add(this.pageNumber,this._stats))},m=new aS({callback:u,params:{canvasContext:I,viewport:g,transform:e,background:A},objs:this.objs,commonObjs:this.commonObjs,annotationCanvasMap:l,operatorList:h.operatorList,pageIndex:this._pageIndex,canvasFactory:this._transport.canvasFactory,filterFactory:this._transport.filterFactory,useRequestAnimationFrame:!b,pdfBug:this._pdfBug,pageColors:n});(h.renderTasks||(h.renderTasks=new Set)).add(m);const Z=m.task;return Promise.all([h.displayReadyCapability.promise,s]).then(([R,X])=>{var H;if(this.destroyed){u();return}if((H=this._stats)==null||H.time("Rendering"),!(X.renderingIntent&c))throw new Error("Must use the same `intent`-argument when calling the `PDFPageProxy.render` and `PDFDocumentProxy.getOptionalContentConfig` methods.");m.initializeGraphics({transparency:R,optionalContentConfig:X}),m.operatorListChanged()}).catch(u),Z}getOperatorList({intent:I="display",annotationMode:g=qn.ENABLE,printAnnotationStorage:C=null,isEditing:i=!1}={}){var n;function e(){s.operatorList.lastChunk&&(s.opListReadCapability.resolve(s.operatorList),s.renderTasks.delete(l))}const A=this._transport.getRenderingIntent(I,g,C,i,!0);let s=this._intentStates.get(A.cacheKey);s||(s=Object.create(null),this._intentStates.set(A.cacheKey,s));let l;return s.opListReadCapability||(l=Object.create(null),l.operatorListChanged=e,s.opListReadCapability=Promise.withResolvers(),(s.renderTasks||(s.renderTasks=new Set)).add(l),s.operatorList={fnArray:[],argsArray:[],lastChunk:!1,separateAnnots:null},(n=this._stats)==null||n.time("Page Request"),this._pumpOperatorList(A)),s.opListReadCapability.promise}streamTextContent({includeMarkedContent:I=!1,disableNormalization:g=!1}={}){return this._transport.messageHandler.sendWithStream("GetTextContent",{pageIndex:this._pageIndex,includeMarkedContent:I===!0,disableNormalization:g===!0},{highWaterMark:100,size(i){return i.items.length}})}getTextContent(I={}){if(this._transport._htmlForXfa)return this.getXfa().then(C=>Zm.textContent(C));const g=this.streamTextContent(I);return new Promise(function(C,i){function e(){A.read().then(function({value:l,done:n}){if(n){C(s);return}s.lang??(s.lang=l.lang),Object.assign(s.styles,l.styles),s.items.push(...l.items),e()},i)}const A=g.getReader(),s={items:[],styles:Object.create(null),lang:null};e()})}getStructTree(){return this._transport.getStructTree(this._pageIndex)}_destroy(){this.destroyed=!0;const I=[];for(const g of this._intentStates.values())if(this._abortOperatorList({intentState:g,reason:new Error("Page was destroyed."),force:!0}),!g.opListReadCapability)for(const C of g.renderTasks)I.push(C.completed),C.cancel();return this.objs.clear(),$(this,Gl,!1),Promise.all(I)}cleanup(I=!1){$(this,Gl,!0);const g=eg(this,wc,Lu).call(this);return I&&g&&this._stats&&(this._stats=new k6),g}_startRenderPage(I,g){var i,e;const C=this._intentStates.get(g);C&&((i=this._stats)==null||i.timeEnd("Page Request"),(e=C.displayReadyCapability)==null||e.resolve(I))}_renderPageChunk(I,g){for(let C=0,i=I.length;C<i;C++)g.operatorList.fnArray.push(I.fnArray[C]),g.operatorList.argsArray.push(I.argsArray[C]);g.operatorList.lastChunk=I.lastChunk,g.operatorList.separateAnnots=I.separateAnnots;for(const C of g.renderTasks)C.operatorListChanged();I.lastChunk&&eg(this,wc,Lu).call(this)}_pumpOperatorList({renderingIntent:I,cacheKey:g,annotationStorageSerializable:C,modifiedIds:i}){const{map:e,transfer:A}=C,l=this._transport.messageHandler.sendWithStream("GetOperatorList",{pageIndex:this._pageIndex,intent:I,cacheKey:g,annotationStorage:e,modifiedIds:i},A).getReader(),n=this._intentStates.get(g);n.streamReader=l;const a=()=>{l.read().then(({value:d,done:o})=>{if(o){n.streamReader=null;return}this._transport.destroyed||(this._renderPageChunk(d,n),a())},d=>{if(n.streamReader=null,!this._transport.destroyed){if(n.operatorList){n.operatorList.lastChunk=!0;for(const o of n.renderTasks)o.operatorListChanged();eg(this,wc,Lu).call(this)}if(n.displayReadyCapability)n.displayReadyCapability.reject(d);else if(n.opListReadCapability)n.opListReadCapability.reject(d);else throw d}})};a()}_abortOperatorList({intentState:I,reason:g,force:C=!1}){if(I.streamReader){if(I.streamReaderCancelTimeout&&(clearTimeout(I.streamReaderCancelTimeout),I.streamReaderCancelTimeout=null),!C){if(I.renderTasks.size>0)return;if(g instanceof qD){let i=Vcg;g.extraDelay>0&&g.extraDelay<1e3&&(i+=g.extraDelay),I.streamReaderCancelTimeout=setTimeout(()=>{I.streamReaderCancelTimeout=null,this._abortOperatorList({intentState:I,reason:g,force:!0})},i);return}}if(I.streamReader.cancel(new za(g.message)).catch(()=>{}),I.streamReader=null,!this._transport.destroyed){for(const[i,e]of this._intentStates)if(e===I){this._intentStates.delete(i);break}this.cleanup()}}}get stats(){return this._stats}}Gl=new WeakMap,wc=new WeakSet,Lu=function(){if(!M(this,Gl)||this.destroyed)return!1;for(const{renderTasks:I,operatorList:g}of this._intentStates.values())if(I.size>0||!g.lastChunk)return!1;return this._intentStates.clear(),this.objs.clear(),$(this,Gl,!1),!0};var wl,YV;class Kcg{constructor(){ig(this,wl,new Map);ig(this,YV,Promise.resolve())}postMessage(I,g){const C={data:structuredClone(I,g?{transfer:g}:null)};M(this,YV).then(()=>{for(const[i]of M(this,wl))i.call(this,C)})}addEventListener(I,g,C=null){let i=null;if((C==null?void 0:C.signal)instanceof AbortSignal){const{signal:e}=C;if(e.aborted){HI("LoopbackPort - cannot use an `aborted` signal.");return}const A=()=>this.removeEventListener(I,g);i=()=>e.removeEventListener("abort",A),e.addEventListener("abort",A)}M(this,wl).set(g,i)}removeEventListener(I,g){const C=M(this,wl).get(g);C==null||C(),M(this,wl).delete(g)}terminate(){for(const[,I]of M(this,wl))I==null||I();M(this,wl).clear()}}wl=new WeakMap,YV=new WeakMap;var NV,pc,Bc,Dh,sN,Kh,lN;const XC=class XC{constructor({name:I=null,port:g=null,verbosity:C=Gog()}={}){ig(this,Dh);var i;if(this.name=I,this.destroyed=!1,this.verbosity=C,this._readyCapability=Promise.withResolvers(),this._port=null,this._webWorker=null,this._messageHandler=null,g){if((i=M(XC,Bc))!=null&&i.has(g))throw new Error("Cannot use more than one PDFWorker per port.");(M(XC,Bc)||$(XC,Bc,new WeakMap)).set(g,this),this._initializeFromPort(g);return}this._initialize()}get promise(){return this._readyCapability.promise}get port(){return this._port}get messageHandler(){return this._messageHandler}_initializeFromPort(I){this._port=I,this._messageHandler=new Ku("main","worker",I),this._messageHandler.on("ready",function(){}),eg(this,Dh,sN).call(this)}_initialize(){if(M(XC,pc)||M(XC,Kh,lN)){this._setupFakeWorker();return}let{workerSrc:I}=XC;try{XC._isSameOrigin(window.location,I)||(I=XC._createCDNWrapper(new URL(I,window.location).href));const g=new Worker(I,{type:"module"}),C=new Ku("main","worker",g),i=()=>{e.abort(),C.destroy(),g.terminate(),this.destroyed?this._readyCapability.reject(new Error("Worker was destroyed")):this._setupFakeWorker()},e=new AbortController;g.addEventListener("error",()=>{this._webWorker||i()},{signal:e.signal}),C.on("test",s=>{if(e.abort(),this.destroyed||!s){i();return}this._messageHandler=C,this._port=g,this._webWorker=g,eg(this,Dh,sN).call(this)}),C.on("ready",s=>{if(e.abort(),this.destroyed){i();return}try{A()}catch{this._setupFakeWorker()}});const A=()=>{const s=new Uint8Array;C.send("test",s,[s.buffer])};A();return}catch{FV("The worker has been disabled.")}this._setupFakeWorker()}_setupFakeWorker(){M(XC,pc)||(HI("Setting up fake worker."),$(XC,pc,!0)),XC._setupFakeWorkerGlobal.then(I=>{if(this.destroyed){this._readyCapability.reject(new Error("Worker was destroyed"));return}const g=new Kcg;this._port=g;const C=`fake${ui(XC,NV)._++}`,i=new Ku(C+"_worker",C,g);I.setup(i,g),this._messageHandler=new Ku(C,C+"_worker",g),eg(this,Dh,sN).call(this)}).catch(I=>{this._readyCapability.reject(new Error(`Setting up fake worker failed: "${I.message}".`))})}destroy(){var I,g,C;this.destroyed=!0,(I=this._webWorker)==null||I.terminate(),this._webWorker=null,(g=M(XC,Bc))==null||g.delete(this._port),this._port=null,(C=this._messageHandler)==null||C.destroy(),this._messageHandler=null}static fromPort(I){var C;if(!(I!=null&&I.port))throw new Error("PDFWorker.fromPort - invalid method signature.");const g=(C=M(this,Bc))==null?void 0:C.get(I.port);if(g){if(g._pendingDestroy)throw new Error("PDFWorker.fromPort - the worker is being destroyed.\nPlease remember to await `PDFDocumentLoadingTask.destroy()`-calls.");return g}return new XC(I)}static get workerSrc(){if(Kl.workerSrc)return Kl.workerSrc;throw new Error('No "GlobalWorkerOptions.workerSrc" specified.')}static get _setupFakeWorkerGlobal(){return jI(this,"_setupFakeWorkerGlobal",(async()=>M(this,Kh,lN)?M(this,Kh,lN):(await import(this.workerSrc)).WorkerMessageHandler)())}};NV=new WeakMap,pc=new WeakMap,Bc=new WeakMap,Dh=new WeakSet,sN=function(){this._readyCapability.resolve(),this._messageHandler.send("configure",{verbosity:this.verbosity})},Kh=new WeakSet,lN=function(){var I;try{return((I=globalThis.pdfjsWorker)==null?void 0:I.WorkerMessageHandler)||null}catch{return null}},ig(XC,Kh),ig(XC,NV,0),ig(XC,pc,!1),ig(XC,Bc),Ot&&($(XC,pc,!0),Kl.workerSrc||(Kl.workerSrc="./pdf.worker.mjs")),XC._isSameOrigin=(I,g)=>{const C=URL.parse(I);if(!(C!=null&&C.origin)||C.origin==="null")return!1;const i=new URL(g,C);return C.origin===i.origin},XC._createCDNWrapper=I=>{const g=`await import("${I}");`;return URL.createObjectURL(new Blob([g],{type:"text/javascript"}))};let Ch=XC;var pl,hs,Fh,kh,Bl,Wc,vu;class Fcg{constructor(I,g,C,i,e){ig(this,Wc);ig(this,pl,new Map);ig(this,hs,new Map);ig(this,Fh,new Map);ig(this,kh,new Map);ig(this,Bl,null);this.messageHandler=I,this.loadingTask=g,this.commonObjs=new rgg,this.fontLoader=new zog({ownerDocument:i.ownerDocument,styleElement:i.styleElement}),this.loadingParams=i.loadingParams,this._params=i,this.canvasFactory=e.canvasFactory,this.filterFactory=e.filterFactory,this.cMapReaderFactory=e.cMapReaderFactory,this.standardFontDataFactory=e.standardFontDataFactory,this.wasmFactory=e.wasmFactory,this.destroyed=!1,this.destroyCapability=null,this._networkStream=C,this._fullReader=null,this._lastProgress=null,this.downloadInfoCapability=Promise.withResolvers(),this.setupMessageHandler()}get annotationStorage(){return jI(this,"annotationStorage",new t9)}getRenderingIntent(I,g=qn.ENABLE,C=null,i=!1,e=!1){let A=be.DISPLAY,s=PX;switch(I){case"any":A=be.ANY;break;case"display":break;case"print":A=be.PRINT;break;default:HI(`getRenderingIntent - invalid intent: ${I}`)}const l=A&be.PRINT&&C instanceof O$?C:this.annotationStorage;switch(g){case qn.DISABLE:A+=be.ANNOTATIONS_DISABLE;break;case qn.ENABLE:break;case qn.ENABLE_FORMS:A+=be.ANNOTATIONS_FORMS;break;case qn.ENABLE_STORAGE:A+=be.ANNOTATIONS_STORAGE,s=l.serializable;break;default:HI(`getRenderingIntent - invalid annotationMode: ${g}`)}i&&(A+=be.IS_EDITING),e&&(A+=be.OPLIST);const{ids:n,hash:a}=l.modifiedIds,d=[A,s.hash,a];return{renderingIntent:A,cacheKey:d.join("_"),annotationStorageSerializable:s,modifiedIds:n}}destroy(){var C;if(this.destroyCapability)return this.destroyCapability.promise;this.destroyed=!0,this.destroyCapability=Promise.withResolvers(),(C=M(this,Bl))==null||C.reject(new Error("Worker was destroyed during onPassword callback"));const I=[];for(const i of M(this,hs).values())I.push(i._destroy());M(this,hs).clear(),M(this,Fh).clear(),M(this,kh).clear(),this.hasOwnProperty("annotationStorage")&&this.annotationStorage.resetModified();const g=this.messageHandler.sendWithPromise("Terminate",null);return I.push(g),Promise.all(I).then(()=>{var i,e;this.commonObjs.clear(),this.fontLoader.clear(),M(this,pl).clear(),this.filterFactory.destroy(),mm.cleanup(),(i=this._networkStream)==null||i.cancelAllRequests(new za("Worker was terminated.")),(e=this.messageHandler)==null||e.destroy(),this.messageHandler=null,this.destroyCapability.resolve()},this.destroyCapability.reject),this.destroyCapability.promise}setupMessageHandler(){const{messageHandler:I,loadingTask:g}=this;I.on("GetReader",(C,i)=>{ct(this._networkStream,"GetReader - no `IPDFStream` instance available."),this._fullReader=this._networkStream.getFullReader(),this._fullReader.onProgress=e=>{this._lastProgress={loaded:e.loaded,total:e.total}},i.onPull=()=>{this._fullReader.read().then(function({value:e,done:A}){if(A){i.close();return}ct(e instanceof ArrayBuffer,"GetReader - expected an ArrayBuffer."),i.enqueue(new Uint8Array(e),1,[e])}).catch(e=>{i.error(e)})},i.onCancel=e=>{this._fullReader.cancel(e),i.ready.catch(A=>{if(!this.destroyed)throw A})}}),I.on("ReaderHeadersReady",async C=>{var s;await this._fullReader.headersReady;const{isStreamingSupported:i,isRangeSupported:e,contentLength:A}=this._fullReader;return(!i||!e)&&(this._lastProgress&&((s=g.onProgress)==null||s.call(g,this._lastProgress)),this._fullReader.onProgress=l=>{var n;(n=g.onProgress)==null||n.call(g,{loaded:l.loaded,total:l.total})}),{isStreamingSupported:i,isRangeSupported:e,contentLength:A}}),I.on("GetRangeReader",(C,i)=>{ct(this._networkStream,"GetRangeReader - no `IPDFStream` instance available.");const e=this._networkStream.getRangeReader(C.begin,C.end);if(!e){i.close();return}i.onPull=()=>{e.read().then(function({value:A,done:s}){if(s){i.close();return}ct(A instanceof ArrayBuffer,"GetRangeReader - expected an ArrayBuffer."),i.enqueue(new Uint8Array(A),1,[A])}).catch(A=>{i.error(A)})},i.onCancel=A=>{e.cancel(A),i.ready.catch(s=>{if(!this.destroyed)throw s})}}),I.on("GetDoc",({pdfInfo:C})=>{this._numPages=C.numPages,this._htmlForXfa=C.htmlForXfa,delete C.htmlForXfa,g._capability.resolve(new Scg(C,this))}),I.on("DocException",C=>{g._capability.reject(Ki(C))}),I.on("PasswordRequest",C=>{$(this,Bl,Promise.withResolvers());try{if(!g.onPassword)throw Ki(C);const i=e=>{e instanceof Error?M(this,Bl).reject(e):M(this,Bl).resolve({password:e})};g.onPassword(i,C.code)}catch(i){M(this,Bl).reject(i)}return M(this,Bl).promise}),I.on("DataLoaded",C=>{var i;(i=g.onProgress)==null||i.call(g,{loaded:C.length,total:C.length}),this.downloadInfoCapability.resolve(C)}),I.on("StartRenderPage",C=>{if(this.destroyed)return;M(this,hs).get(C.pageIndex)._startRenderPage(C.transparency,C.cacheKey)}),I.on("commonobj",([C,i,e])=>{var A;if(this.destroyed||this.commonObjs.has(C))return null;switch(i){case"Font":if("error"in e){const a=e.error;HI(`Error during font loading: ${a}`),this.commonObjs.resolve(C,a);break}const s=this._params.pdfBug&&((A=globalThis.FontInspector)!=null&&A.enabled)?(a,d)=>globalThis.FontInspector.fontAdded(a,d):null,l=new Jog(e,s);this.fontLoader.bind(l).catch(()=>I.sendWithPromise("FontFallback",{id:C})).finally(()=>{!l.fontExtraProperties&&l.data&&(l.data=null),this.commonObjs.resolve(C,l)});break;case"CopyLocalImage":const{imageRef:n}=e;ct(n,"The imageRef must be defined.");for(const a of M(this,hs).values())for(const[,d]of a.objs)if((d==null?void 0:d.ref)===n)return d.dataLen?(this.commonObjs.resolve(C,structuredClone(d)),d.dataLen):null;break;case"FontPath":case"Image":case"Pattern":this.commonObjs.resolve(C,e);break;default:throw new Error(`Got unknown common object type ${i}`)}return null}),I.on("obj",([C,i,e,A])=>{var l;if(this.destroyed)return;const s=M(this,hs).get(i);if(!s.objs.has(C)){if(s._intentStates.size===0){(l=A==null?void 0:A.bitmap)==null||l.close();return}switch(e){case"Image":case"Pattern":s.objs.resolve(C,A);break;default:throw new Error(`Got unknown object type ${e}`)}}}),I.on("DocProgress",C=>{var i;this.destroyed||(i=g.onProgress)==null||i.call(g,{loaded:C.loaded,total:C.total})}),I.on("FetchBinaryData",async C=>{if(this.destroyed)throw new Error("Worker was destroyed.");const i=this[C.type];if(!i)throw new Error(`${C.type} not initialized, see the \`useWorkerFetch\` parameter.`);return i.fetch(C)})}getData(){return this.messageHandler.sendWithPromise("GetData",null)}saveDocument(){var C;this.annotationStorage.size<=0&&HI("saveDocument called while `annotationStorage` is empty, please use the getData-method instead.");const{map:I,transfer:g}=this.annotationStorage.serializable;return this.messageHandler.sendWithPromise("SaveDocument",{isPureXfa:!!this._htmlForXfa,numPages:this._numPages,annotationStorage:I,filename:((C=this._fullReader)==null?void 0:C.filename)??null},g).finally(()=>{this.annotationStorage.resetModified()})}getPage(I){if(!Number.isInteger(I)||I<=0||I>this._numPages)return Promise.reject(new Error("Invalid page request."));const g=I-1,C=M(this,Fh).get(g);if(C)return C;const i=this.messageHandler.sendWithPromise("GetPage",{pageIndex:g}).then(e=>{if(this.destroyed)throw new Error("Transport destroyed");e.refStr&&M(this,kh).set(e.refStr,I);const A=new Dcg(g,e,this,this._params.pdfBug);return M(this,hs).set(g,A),A});return M(this,Fh).set(g,i),i}getPageIndex(I){return sS(I)?this.messageHandler.sendWithPromise("GetPageIndex",{num:I.num,gen:I.gen}):Promise.reject(new Error("Invalid pageIndex request."))}getAnnotations(I,g){return this.messageHandler.sendWithPromise("GetAnnotations",{pageIndex:I,intent:g})}getFieldObjects(){return eg(this,Wc,vu).call(this,"GetFieldObjects")}hasJSActions(){return eg(this,Wc,vu).call(this,"HasJSActions")}getCalculationOrderIds(){return this.messageHandler.sendWithPromise("GetCalculationOrderIds",null)}getDestinations(){return this.messageHandler.sendWithPromise("GetDestinations",null)}getDestination(I){return typeof I!="string"?Promise.reject(new Error("Invalid destination request.")):this.messageHandler.sendWithPromise("GetDestination",{id:I})}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)}getDocJSActions(){return eg(this,Wc,vu).call(this,"GetDocJSActions")}getPageJSActions(I){return this.messageHandler.sendWithPromise("GetPageJSActions",{pageIndex:I})}getStructTree(I){return this.messageHandler.sendWithPromise("GetStructTree",{pageIndex:I})}getOutline(){return this.messageHandler.sendWithPromise("GetOutline",null)}getOptionalContentConfig(I){return eg(this,Wc,vu).call(this,"GetOptionalContentConfig").then(g=>new ncg(g,I))}getPermissions(){return this.messageHandler.sendWithPromise("GetPermissions",null)}getMetadata(){const I="GetMetadata",g=M(this,pl).get(I);if(g)return g;const C=this.messageHandler.sendWithPromise(I,null).then(i=>{var e,A;return{info:i[0],metadata:i[1]?new scg(i[1]):null,contentDispositionFilename:((e=this._fullReader)==null?void 0:e.filename)??null,contentLength:((A=this._fullReader)==null?void 0:A.contentLength)??null}});return M(this,pl).set(I,C),C}getMarkInfo(){return this.messageHandler.sendWithPromise("GetMarkInfo",null)}async startCleanup(I=!1){if(!this.destroyed){await this.messageHandler.sendWithPromise("Cleanup",null);for(const g of M(this,hs).values())if(!g.cleanup())throw new Error(`startCleanup: Page ${g.pageNumber} is currently rendering.`);this.commonObjs.clear(),I||this.fontLoader.clear(),M(this,pl).clear(),this.filterFactory.destroy(!0),mm.cleanup()}}cachedPageNumber(I){if(!sS(I))return null;const g=I.gen===0?`${I.num}R`:`${I.num}R${I.gen}`;return M(this,kh).get(g)??null}}pl=new WeakMap,hs=new WeakMap,Fh=new WeakMap,kh=new WeakMap,Bl=new WeakMap,Wc=new WeakSet,vu=function(I,g=null){const C=M(this,pl).get(I);if(C)return C;const i=this.messageHandler.sendWithPromise(I,g);return M(this,pl).set(I,i),i};const Bu=Symbol("INITIAL_DATA");var Ae,aZ,nS;class rgg{constructor(){ig(this,aZ);ig(this,Ae,Object.create(null))}get(I,g=null){if(g){const i=eg(this,aZ,nS).call(this,I);return i.promise.then(()=>g(i.data)),null}const C=M(this,Ae)[I];if(!C||C.data===Bu)throw new Error(`Requesting object that isn't resolved yet ${I}.`);return C.data}has(I){const g=M(this,Ae)[I];return!!g&&g.data!==Bu}delete(I){const g=M(this,Ae)[I];return!g||g.data===Bu?!1:(delete M(this,Ae)[I],!0)}resolve(I,g=null){const C=eg(this,aZ,nS).call(this,I);C.data=g,C.resolve()}clear(){var I;for(const g in M(this,Ae)){const{data:C}=M(this,Ae)[g];(I=C==null?void 0:C.bitmap)==null||I.close()}$(this,Ae,Object.create(null))}*[Symbol.iterator](){for(const I in M(this,Ae)){const{data:g}=M(this,Ae)[I];g!==Bu&&(yield[I,g])}}}Ae=new WeakMap,aZ=new WeakSet,nS=function(I){var g;return(g=M(this,Ae))[I]||(g[I]={...Promise.withResolvers(),data:Bu})};var Za;class kcg{constructor(I){ig(this,Za,null);CI(this,"onContinue",null);CI(this,"onError",null);$(this,Za,I)}get promise(){return M(this,Za).capability.promise}cancel(I=0){M(this,Za).cancel(null,I)}get separateAnnots(){const{separateAnnots:I}=M(this,Za).operatorList;if(!I)return!1;const{annotationCanvasMap:g}=M(this,Za);return I.form||I.canvas&&(g==null?void 0:g.size)>0}}Za=new WeakMap;var Ga,yc;const vo=class vo{constructor({callback:I,params:g,objs:C,commonObjs:i,annotationCanvasMap:e,operatorList:A,pageIndex:s,canvasFactory:l,filterFactory:n,useRequestAnimationFrame:a=!1,pdfBug:d=!1,pageColors:o=null}){ig(this,Ga,null);this.callback=I,this.params=g,this.objs=C,this.commonObjs=i,this.annotationCanvasMap=e,this.operatorListIdx=null,this.operatorList=A,this._pageIndex=s,this.canvasFactory=l,this.filterFactory=n,this._pdfBug=d,this.pageColors=o,this.running=!1,this.graphicsReadyCallback=null,this.graphicsReady=!1,this._useRequestAnimationFrame=a===!0&&typeof window<"u",this.cancelled=!1,this.capability=Promise.withResolvers(),this.task=new kcg(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=g.canvasContext.canvas}get completed(){return this.capability.promise.catch(function(){})}initializeGraphics({transparency:I=!1,optionalContentConfig:g}){var s,l;if(this.cancelled)return;if(this._canvas){if(M(vo,yc).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.");M(vo,yc).add(this._canvas)}this._pdfBug&&((s=globalThis.StepperManager)!=null&&s.enabled)&&(this.stepper=globalThis.StepperManager.create(this._pageIndex),this.stepper.init(this.operatorList),this.stepper.nextBreakPoint=this.stepper.getNextBreakPoint());const{canvasContext:C,viewport:i,transform:e,background:A}=this.params;this.gfx=new Ih(C,this.commonObjs,this.objs,this.canvasFactory,this.filterFactory,{optionalContentConfig:g},this.annotationCanvasMap,this.pageColors),this.gfx.beginDrawing({transform:e,viewport:i,transparency:I,background:A}),this.operatorListIdx=0,this.graphicsReady=!0,(l=this.graphicsReadyCallback)==null||l.call(this)}cancel(I=null,g=0){var C,i,e;this.running=!1,this.cancelled=!0,(C=this.gfx)==null||C.endDrawing(),M(this,Ga)&&(window.cancelAnimationFrame(M(this,Ga)),$(this,Ga,null)),M(vo,yc).delete(this._canvas),I||(I=new qD(`Rendering cancelled, page ${this._pageIndex+1}`,g)),this.callback(I),(e=(i=this.task).onError)==null||e.call(i,I)}operatorListChanged(){var I;if(!this.graphicsReady){this.graphicsReadyCallback||(this.graphicsReadyCallback=this._continueBound);return}(I=this.stepper)==null||I.updateOperatorList(this.operatorList),!this.running&&this._continue()}_continue(){this.running=!0,!this.cancelled&&(this.task.onContinue?this.task.onContinue(this._scheduleNextBound):this._scheduleNext())}_scheduleNext(){this._useRequestAnimationFrame?$(this,Ga,window.requestAnimationFrame(()=>{$(this,Ga,null),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(),M(vo,yc).delete(this._canvas),this.callback())))}};Ga=new WeakMap,yc=new WeakMap,ig(vo,yc,new WeakSet);let aS=vo;const zcg="5.1.91",Jcg="45cbe8bb0";function C8(t){return Math.floor(Math.max(0,Math.min(1,t))*255).toString(16).padStart(2,"0")}function Wu(t){return Math.max(0,Math.min(255,255*t))}class t8{static CMYK_G([I,g,C,i]){return["G",1-Math.min(1,.3*I+.59*C+.11*g+i)]}static G_CMYK([I]){return["CMYK",0,0,0,1-I]}static G_RGB([I]){return["RGB",I,I,I]}static G_rgb([I]){return I=Wu(I),[I,I,I]}static G_HTML([I]){const g=C8(I);return`#${g}${g}${g}`}static RGB_G([I,g,C]){return["G",.3*I+.59*g+.11*C]}static RGB_rgb(I){return I.map(Wu)}static RGB_HTML(I){return`#${I.map(C8).join("")}`}static T_HTML(){return"#00000000"}static T_rgb(){return[null]}static CMYK_RGB([I,g,C,i]){return["RGB",1-Math.min(1,I+i),1-Math.min(1,C+i),1-Math.min(1,g+i)]}static CMYK_rgb([I,g,C,i]){return[Wu(1-Math.min(1,I+i)),Wu(1-Math.min(1,C+i)),Wu(1-Math.min(1,g+i))]}static CMYK_HTML(I){const g=this.CMYK_RGB(I).slice(1);return this.RGB_HTML(g)}static RGB_CMYK([I,g,C]){const i=1-I,e=1-g,A=1-C,s=Math.min(i,e,A);return["CMYK",i,e,A,s]}}class Lcg{create(I,g,C=!1){if(I<=0||g<=0)throw new Error("Invalid SVG dimensions");const i=this._createSVG("svg:svg");return i.setAttribute("version","1.1"),C||(i.setAttribute("width",`${I}px`),i.setAttribute("height",`${g}px`)),i.setAttribute("preserveAspectRatio","none"),i.setAttribute("viewBox",`0 0 ${I} ${g}`),i}createElement(I){if(typeof I!="string")throw new Error("Invalid SVG element type");return this._createSVG(I)}_createSVG(I){ZC("Abstract method `_createSVG` called.")}}class xN extends Lcg{_createSVG(I){return document.createElementNS(tl,I)}}class hgg{static setupStorage(I,g,C,i,e){const A=i.getValue(g,{value:null});switch(C.name){case"textarea":if(A.value!==null&&(I.textContent=A.value),e==="print")break;I.addEventListener("input",s=>{i.setValue(g,{value:s.target.value})});break;case"input":if(C.attributes.type==="radio"||C.attributes.type==="checkbox"){if(A.value===C.attributes.xfaOn?I.setAttribute("checked",!0):A.value===C.attributes.xfaOff&&I.removeAttribute("checked"),e==="print")break;I.addEventListener("change",s=>{i.setValue(g,{value:s.target.checked?s.target.getAttribute("xfaOn"):s.target.getAttribute("xfaOff")})})}else{if(A.value!==null&&I.setAttribute("value",A.value),e==="print")break;I.addEventListener("input",s=>{i.setValue(g,{value:s.target.value})})}break;case"select":if(A.value!==null){I.setAttribute("value",A.value);for(const s of C.children)s.attributes.value===A.value?s.attributes.selected=!0:s.attributes.hasOwnProperty("selected")&&delete s.attributes.selected}I.addEventListener("input",s=>{const l=s.target.options,n=l.selectedIndex===-1?"":l[l.selectedIndex].value;i.setValue(g,{value:n})});break}}static setAttributes({html:I,element:g,storage:C=null,intent:i,linkService:e}){const{attributes:A}=g,s=I instanceof HTMLAnchorElement;A.type==="radio"&&(A.name=`${A.name}-${i}`);for(const[l,n]of Object.entries(A))if(n!=null)switch(l){case"class":n.length&&I.setAttribute(l,n.join(" "));break;case"dataId":break;case"id":I.setAttribute("data-element-id",n);break;case"style":Object.assign(I.style,n);break;case"textContent":I.textContent=n;break;default:(!s||l!=="href"&&l!=="newWindow")&&I.setAttribute(l,n)}s&&e.addLinkAttributes(I,A.href,A.newWindow),C&&A.dataId&&this.setupStorage(I,A.dataId,g,C)}static render(I){var d,o;const g=I.annotationStorage,C=I.linkService,i=I.xfaHtml,e=I.intent||"display",A=document.createElement(i.name);i.attributes&&this.setAttributes({html:A,element:i,intent:e,linkService:C});const s=e!=="richText",l=I.div;if(l.append(A),I.viewport){const c=`matrix(${I.viewport.transform.join(",")})`;l.style.transform=c}s&&l.setAttribute("class","xfaLayer xfaFont");const n=[];if(i.children.length===0){if(i.value){const c=document.createTextNode(i.value);A.append(c),s&&Zm.shouldBuildText(i.name)&&n.push(c)}return{textDivs:n}}const a=[[i,-1,A]];for(;a.length>0;){const[c,r,h]=a.at(-1);if(r+1===c.children.length){a.pop();continue}const b=c.children[++a.at(-1)[1]];if(b===null)continue;const{name:u}=b;if(u==="#text"){const Z=document.createTextNode(b.value);n.push(Z),h.append(Z);continue}const m=(d=b==null?void 0:b.attributes)!=null&&d.xmlns?document.createElementNS(b.attributes.xmlns,u):document.createElement(u);if(h.append(m),b.attributes&&this.setAttributes({html:m,element:b,storage:g,intent:e,linkService:C}),((o=b.children)==null?void 0:o.length)>0)a.push([b,-1,m]);else if(b.value){const Z=document.createTextNode(b.value);s&&Zm.shouldBuildText(u)&&n.push(Z),m.append(Z)}}for(const c of l.querySelectorAll(".xfaNonInteractive input, .xfaNonInteractive textarea"))c.setAttribute("readOnly",!0);return{textDivs:n}}static update(I){const g=`matrix(${I.viewport.transform.join(",")})`;I.div.style.transform=g,I.div.hidden=!1}}const _Z=1e3,vcg=9,id=new WeakSet;class i8{static create(I){switch(I.data.annotationType){case lt.LINK:return new bgg(I);case lt.TEXT:return new Tcg(I);case lt.WIDGET:switch(I.data.fieldType){case"Tx":return new xcg(I);case"Btn":return I.data.radioButton?new Zgg(I):I.data.checkBox?new Qcg(I):new Ocg(I);case"Ch":return new Ucg(I);case"Sig":return new jcg(I)}return new ld(I);case lt.POPUP:return new cS(I);case lt.FREETEXT:return new Wgg(I);case lt.LINE:return new Pcg(I);case lt.SQUARE:return new _cg(I);case lt.CIRCLE:return new qcg(I);case lt.POLYLINE:return new ygg(I);case lt.CARET:return new gdg(I);case lt.INK:return new A9(I);case lt.POLYGON:return new $cg(I);case lt.HIGHLIGHT:return new Ygg(I);case lt.UNDERLINE:return new Idg(I);case lt.SQUIGGLY:return new Cdg(I);case lt.STRIKEOUT:return new tdg(I);case lt.STAMP:return new Ngg(I);case lt.FILEATTACHMENT:return new idg(I);default:return new et(I)}}}var Yc,zh,Jh,oZ,oS;const x9=class x9{constructor(I,{isRenderable:g=!1,ignoreBorder:C=!1,createQuadrilaterals:i=!1}={}){ig(this,oZ);ig(this,Yc,null);ig(this,zh,!1);ig(this,Jh,null);this.isRenderable=g,this.data=I.data,this.layer=I.layer,this.linkService=I.linkService,this.downloadManager=I.downloadManager,this.imageResourcesPath=I.imageResourcesPath,this.renderForms=I.renderForms,this.svgFactory=I.svgFactory,this.annotationStorage=I.annotationStorage,this.enableScripting=I.enableScripting,this.hasJSActions=I.hasJSActions,this._fieldObjects=I.fieldObjects,this.parent=I.parent,g&&(this.container=this._createContainer(C)),i&&this._createQuadrilaterals()}static _hasPopupData({titleObj:I,contentsObj:g,richText:C}){return!!(I!=null&&I.str||g!=null&&g.str||C!=null&&C.str)}get _isEditable(){return this.data.isEditable}get hasPopupData(){return x9._hasPopupData(this.data)}updateEdited(I){var C;if(!this.container)return;M(this,Yc)||$(this,Yc,{rect:this.data.rect.slice(0)});const{rect:g}=I;g&&eg(this,oZ,oS).call(this,g),(C=M(this,Jh))==null||C.popup.updateEdited(I)}resetEdited(){var I;M(this,Yc)&&(eg(this,oZ,oS).call(this,M(this,Yc).rect),(I=M(this,Jh))==null||I.popup.resetEdited(),$(this,Yc,null))}_createContainer(I){const{data:g,parent:{page:C,viewport:i}}=this,e=document.createElement("section");e.setAttribute("data-annotation-id",g.id),this instanceof ld||(e.tabIndex=_Z);const{style:A}=e;if(A.zIndex=this.parent.zIndex++,g.alternativeText&&(e.title=g.alternativeText),g.noRotate&&e.classList.add("norotate"),!g.rect||this instanceof cS){const{rotation:h}=g;return!g.hasOwnCanvas&&h!==0&&this.setRotation(h,e),e}const{width:s,height:l}=this;if(!I&&g.borderStyle.width>0){A.borderWidth=`${g.borderStyle.width}px`;const h=g.borderStyle.horizontalCornerRadius,b=g.borderStyle.verticalCornerRadius;if(h>0||b>0){const m=`calc(${h}px * var(--total-scale-factor)) / calc(${b}px * var(--total-scale-factor))`;A.borderRadius=m}else if(this instanceof Zgg){const m=`calc(${s}px * var(--total-scale-factor)) / calc(${l}px * var(--total-scale-factor))`;A.borderRadius=m}switch(g.borderStyle.style){case Kr.SOLID:A.borderStyle="solid";break;case Kr.DASHED:A.borderStyle="dashed";break;case Kr.BEVELED:HI("Unimplemented border style: beveled");break;case Kr.INSET:HI("Unimplemented border style: inset");break;case Kr.UNDERLINE:A.borderBottomStyle="solid";break}const u=g.borderColor||null;u?($(this,zh,!0),A.borderColor=iI.makeHexColor(u[0]|0,u[1]|0,u[2]|0)):A.borderWidth=0}const n=iI.normalizeRect([g.rect[0],C.view[3]-g.rect[1]+C.view[1],g.rect[2],C.view[3]-g.rect[3]+C.view[1]]),{pageWidth:a,pageHeight:d,pageX:o,pageY:c}=i.rawDims;A.left=`${100*(n[0]-o)/a}%`,A.top=`${100*(n[1]-c)/d}%`;const{rotation:r}=g;return g.hasOwnCanvas||r===0?(A.width=`${100*s/a}%`,A.height=`${100*l/d}%`):this.setRotation(r,e),e}setRotation(I,g=this.container){if(!this.data.rect)return;const{pageWidth:C,pageHeight:i}=this.parent.viewport.rawDims;let{width:e,height:A}=this;I%180!==0&&([e,A]=[A,e]),g.style.width=`${100*e/C}%`,g.style.height=`${100*A/i}%`,g.setAttribute("data-main-rotation",(360-I)%360)}get _commonActions(){const I=(g,C,i)=>{const e=i.detail[g],A=e[0],s=e.slice(1);i.target.style[C]=t8[`${A}_HTML`](s),this.annotationStorage.setValue(this.data.id,{[C]:t8[`${A}_rgb`](s)})};return jI(this,"_commonActions",{display:g=>{const{display:C}=g.detail,i=C%2===1;this.container.style.visibility=i?"hidden":"visible",this.annotationStorage.setValue(this.data.id,{noView:i,noPrint:C===1||C===2})},print:g=>{this.annotationStorage.setValue(this.data.id,{noPrint:!g.detail.print})},hidden:g=>{const{hidden:C}=g.detail;this.container.style.visibility=C?"hidden":"visible",this.annotationStorage.setValue(this.data.id,{noPrint:C,noView:C})},focus:g=>{setTimeout(()=>g.target.focus({preventScroll:!1}),0)},userName:g=>{g.target.title=g.detail.userName},readonly:g=>{g.target.disabled=g.detail.readonly},required:g=>{this._setRequired(g.target,g.detail.required)},bgColor:g=>{I("bgColor","backgroundColor",g)},fillColor:g=>{I("fillColor","backgroundColor",g)},fgColor:g=>{I("fgColor","color",g)},textColor:g=>{I("textColor","color",g)},borderColor:g=>{I("borderColor","borderColor",g)},strokeColor:g=>{I("strokeColor","borderColor",g)},rotation:g=>{const C=g.detail.rotation;this.setRotation(C),this.annotationStorage.setValue(this.data.id,{rotation:C})}})}_dispatchEventFromSandbox(I,g){const C=this._commonActions;for(const i of Object.keys(g.detail)){const e=I[i]||C[i];e==null||e(g)}}_setDefaultPropertiesFromJS(I){if(!this.enableScripting)return;const g=this.annotationStorage.getRawValue(this.data.id);if(!g)return;const C=this._commonActions;for(const[i,e]of Object.entries(g)){const A=C[i];if(A){const s={detail:{[i]:e},target:I};A(s),delete g[i]}}}_createQuadrilaterals(){if(!this.container)return;const{quadPoints:I}=this.data;if(!I)return;const[g,C,i,e]=this.data.rect.map(h=>Math.fround(h));if(I.length===8){const[h,b,u,m]=I.subarray(2,6);if(i===h&&e===b&&g===u&&C===m)return}const{style:A}=this.container;let s;if(M(this,zh)){const{borderColor:h,borderWidth:b}=A;A.borderWidth=0,s=["url('data:image/svg+xml;utf8,",'<svg xmlns="http://www.w3.org/2000/svg"',' preserveAspectRatio="none" viewBox="0 0 1 1">',`<g fill="transparent" stroke="${h}" stroke-width="${b}">`],this.container.classList.add("hasBorder")}const l=i-g,n=e-C,{svgFactory:a}=this,d=a.createElement("svg");d.classList.add("quadrilateralsContainer"),d.setAttribute("width",0),d.setAttribute("height",0);const o=a.createElement("defs");d.append(o);const c=a.createElement("clipPath"),r=`clippath_${this.data.id}`;c.setAttribute("id",r),c.setAttribute("clipPathUnits","objectBoundingBox"),o.append(c);for(let h=2,b=I.length;h<b;h+=8){const u=I[h],m=I[h+1],Z=I[h+2],p=I[h+3],Y=a.createElement("rect"),R=(Z-g)/l,X=(e-m)/n,H=(u-Z)/l,S=(m-p)/n;Y.setAttribute("x",R),Y.setAttribute("y",X),Y.setAttribute("width",H),Y.setAttribute("height",S),c.append(Y),s==null||s.push(`<rect vector-effect="non-scaling-stroke" x="${R}" y="${X}" width="${H}" height="${S}"/>`)}M(this,zh)&&(s.push("</g></svg>')"),A.backgroundImage=s.join("")),this.container.append(d),this.container.style.clipPath=`url(#${r})`}_createPopup(){const{data:I}=this,g=$(this,Jh,new cS({data:{color:I.color,titleObj:I.titleObj,modificationDate:I.modificationDate,contentsObj:I.contentsObj,richText:I.richText,parentRect:I.rect,borderStyle:0,id:`popup_${I.id}`,rotation:I.rotation},parent:this.parent,elements:[this]}));this.parent.div.append(g.render())}render(){ZC("Abstract method `AnnotationElement.render` called")}_getElementsByName(I,g=null){const C=[];if(this._fieldObjects){const i=this._fieldObjects[I];if(i)for(const{page:e,id:A,exportValues:s}of i){if(e===-1||A===g)continue;const l=typeof s=="string"?s:null,n=document.querySelector(`[data-element-id="${A}"]`);if(n&&!id.has(n)){HI(`_getElementsByName - element not allowed: ${A}`);continue}C.push({id:A,exportValue:l,domElement:n})}return C}for(const i of document.getElementsByName(I)){const{exportValue:e}=i,A=i.getAttribute("data-element-id");A!==g&&id.has(i)&&C.push({id:A,exportValue:e,domElement:i})}return C}show(){var I;this.container&&(this.container.hidden=!1),(I=this.popup)==null||I.maybeShow()}hide(){var I;this.container&&(this.container.hidden=!0),(I=this.popup)==null||I.forceHide()}getElementsToTriggerPopup(){return this.container}addHighlightArea(){const I=this.getElementsToTriggerPopup();if(Array.isArray(I))for(const g of I)g.classList.add("highlightArea");else I.classList.add("highlightArea")}_editOnDoubleClick(){if(!this._isEditable)return;const{annotationEditorType:I,data:{id:g}}=this;this.container.addEventListener("dblclick",()=>{var C;(C=this.linkService.eventBus)==null||C.dispatch("switchannotationeditormode",{source:this,mode:I,editId:g})})}get width(){return this.data.rect[2]-this.data.rect[0]}get height(){return this.data.rect[3]-this.data.rect[1]}};Yc=new WeakMap,zh=new WeakMap,Jh=new WeakMap,oZ=new WeakSet,oS=function(I){const{container:{style:g},data:{rect:C,rotation:i},parent:{viewport:{rawDims:{pageWidth:e,pageHeight:A,pageX:s,pageY:l}}}}=this;C==null||C.splice(0,4,...I),g.left=`${100*(I[0]-s)/e}%`,g.top=`${100*(A-I[3]+l)/A}%`,i===0?(g.width=`${100*(I[2]-I[0])/e}%`,g.height=`${100*(I[3]-I[1])/A}%`):this.setRotation(i)};let et=x9;var ue,Xo,ugg,mgg;class bgg extends et{constructor(g,C=null){super(g,{isRenderable:!0,ignoreBorder:!!(C!=null&&C.ignoreBorder),createQuadrilaterals:!0});ig(this,ue);this.isTooltipOnly=g.data.isTooltipOnly}render(){const{data:g,linkService:C}=this,i=document.createElement("a");i.setAttribute("data-element-id",g.id);let e=!1;return g.url?(C.addLinkAttributes(i,g.url,g.newWindow),e=!0):g.action?(this._bindNamedAction(i,g.action),e=!0):g.attachment?(eg(this,ue,ugg).call(this,i,g.attachment,g.attachmentDest),e=!0):g.setOCGState?(eg(this,ue,mgg).call(this,i,g.setOCGState),e=!0):g.dest?(this._bindLink(i,g.dest),e=!0):(g.actions&&(g.actions.Action||g.actions["Mouse Up"]||g.actions["Mouse Down"])&&this.enableScripting&&this.hasJSActions&&(this._bindJSAction(i,g),e=!0),g.resetForm?(this._bindResetFormAction(i,g.resetForm),e=!0):this.isTooltipOnly&&!e&&(this._bindLink(i,""),e=!0)),this.container.classList.add("linkAnnotation"),e&&this.container.append(i),this.container}_bindLink(g,C){g.href=this.linkService.getDestinationHash(C),g.onclick=()=>(C&&this.linkService.goToDestination(C),!1),(C||C==="")&&eg(this,ue,Xo).call(this)}_bindNamedAction(g,C){g.href=this.linkService.getAnchorUrl(""),g.onclick=()=>(this.linkService.executeNamedAction(C),!1),eg(this,ue,Xo).call(this)}_bindJSAction(g,C){g.href=this.linkService.getAnchorUrl("");const i=new Map([["Action","onclick"],["Mouse Up","onmouseup"],["Mouse Down","onmousedown"]]);for(const e of Object.keys(C.actions)){const A=i.get(e);A&&(g[A]=()=>{var s;return(s=this.linkService.eventBus)==null||s.dispatch("dispatcheventinsandbox",{source:this,detail:{id:C.id,name:e}}),!1})}g.onclick||(g.onclick=()=>!1),eg(this,ue,Xo).call(this)}_bindResetFormAction(g,C){const i=g.onclick;if(i||(g.href=this.linkService.getAnchorUrl("")),eg(this,ue,Xo).call(this),!this._fieldObjects){HI('_bindResetFormAction - "resetForm" action not supported, ensure that the `fieldObjects` parameter is provided.'),i||(g.onclick=()=>!1);return}g.onclick=()=>{var d;i==null||i();const{fields:e,refs:A,include:s}=C,l=[];if(e.length!==0||A.length!==0){const o=new Set(A);for(const c of e){const r=this._fieldObjects[c]||[];for(const{id:h}of r)o.add(h)}for(const c of Object.values(this._fieldObjects))for(const r of c)o.has(r.id)===s&&l.push(r)}else for(const o of Object.values(this._fieldObjects))l.push(...o);const n=this.annotationStorage,a=[];for(const o of l){const{id:c}=o;switch(a.push(c),o.type){case"text":{const h=o.defaultValue||"";n.setValue(c,{value:h});break}case"checkbox":case"radiobutton":{const h=o.defaultValue===o.exportValues;n.setValue(c,{value:h});break}case"combobox":case"listbox":{const h=o.defaultValue||"";n.setValue(c,{value:h});break}default:continue}const r=document.querySelector(`[data-element-id="${c}"]`);if(r){if(!id.has(r)){HI(`_bindResetFormAction - element not allowed: ${c}`);continue}}else continue;r.dispatchEvent(new Event("resetform"))}return this.enableScripting&&((d=this.linkService.eventBus)==null||d.dispatch("dispatcheventinsandbox",{source:this,detail:{id:"app",ids:a,name:"ResetForm"}})),!1}}}ue=new WeakSet,Xo=function(){this.container.setAttribute("data-internal-link","")},ugg=function(g,C,i=null){g.href=this.linkService.getAnchorUrl(""),C.description&&(g.title=C.description),g.onclick=()=>{var e;return(e=this.downloadManager)==null||e.openOrDownloadData(C.content,C.filename,i),!1},eg(this,ue,Xo).call(this)},mgg=function(g,C){g.href=this.linkService.getAnchorUrl(""),g.onclick=()=>(this.linkService.executeSetOCGState(C),!1),eg(this,ue,Xo).call(this)};class Tcg extends et{constructor(I){super(I,{isRenderable:!0})}render(){this.container.classList.add("textAnnotation");const I=document.createElement("img");return I.src=this.imageResourcesPath+"annotation-"+this.data.name.toLowerCase()+".svg",I.setAttribute("data-l10n-id","pdfjs-text-annotation-type"),I.setAttribute("data-l10n-args",JSON.stringify({type:this.data.name})),!this.data.popupRef&&this.hasPopupData&&this._createPopup(),this.container.append(I),this.container}}class ld extends et{render(){return this.container}showElementAndHideCanvas(I){var g;this.data.hasOwnCanvas&&(((g=I.previousSibling)==null?void 0:g.nodeName)==="CANVAS"&&(I.previousSibling.hidden=!0),I.hidden=!1)}_getKeyModifier(I){return gi.platform.isMac?I.metaKey:I.ctrlKey}_setEventListener(I,g,C,i,e){C.includes("mouse")?I.addEventListener(C,A=>{var s;(s=this.linkService.eventBus)==null||s.dispatch("dispatcheventinsandbox",{source:this,detail:{id:this.data.id,name:i,value:e(A),shift:A.shiftKey,modifier:this._getKeyModifier(A)}})}):I.addEventListener(C,A=>{var s;if(C==="blur"){if(!g.focused||!A.relatedTarget)return;g.focused=!1}else if(C==="focus"){if(g.focused)return;g.focused=!0}e&&((s=this.linkService.eventBus)==null||s.dispatch("dispatcheventinsandbox",{source:this,detail:{id:this.data.id,name:i,value:e(A)}}))})}_setEventListeners(I,g,C,i){var e,A,s;for(const[l,n]of C)(n==="Action"||(e=this.data.actions)!=null&&e[n])&&((n==="Focus"||n==="Blur")&&(g||(g={focused:!1})),this._setEventListener(I,g,l,n,i),n==="Focus"&&!((A=this.data.actions)!=null&&A.Blur)?this._setEventListener(I,g,"blur","Blur",null):n==="Blur"&&!((s=this.data.actions)!=null&&s.Focus)&&this._setEventListener(I,g,"focus","Focus",null))}_setBackgroundColor(I){const g=this.data.backgroundColor||null;I.style.backgroundColor=g===null?"transparent":iI.makeHexColor(g[0],g[1],g[2])}_setTextStyle(I){const g=["left","center","right"],{fontColor:C}=this.data.defaultAppearanceData,i=this.data.defaultAppearanceData.fontSize||vcg,e=I.style;let A;const s=2,l=n=>Math.round(10*n)/10;if(this.data.multiLine){const n=Math.abs(this.data.rect[3]-this.data.rect[1]-s),a=Math.round(n/(YH*i))||1,d=n/a;A=Math.min(i,l(d/YH))}else{const n=Math.abs(this.data.rect[3]-this.data.rect[1]-s);A=Math.min(i,l(n/YH))}e.fontSize=`calc(${A}px * var(--total-scale-factor))`,e.color=iI.makeHexColor(C[0],C[1],C[2]),this.data.textAlignment!==null&&(e.textAlign=g[this.data.textAlignment])}_setRequired(I,g){g?I.setAttribute("required",!0):I.removeAttribute("required"),I.setAttribute("aria-required",g)}}class xcg extends ld{constructor(I){const g=I.renderForms||I.data.hasOwnCanvas||!I.data.hasAppearance&&!!I.data.fieldValue;super(I,{isRenderable:g})}setPropertyOnSiblings(I,g,C,i){const e=this.annotationStorage;for(const A of this._getElementsByName(I.name,I.id))A.domElement&&(A.domElement[g]=C),e.setValue(A.id,{[i]:C})}render(){var i,e;const I=this.annotationStorage,g=this.data.id;this.container.classList.add("textWidgetAnnotation");let C=null;if(this.renderForms){const A=I.getValue(g,{value:this.data.fieldValue});let s=A.value||"";const l=I.getValue(g,{charLimit:this.data.maxLen}).charLimit;l&&s.length>l&&(s=s.slice(0,l));let n=A.formattedValue||((i=this.data.textContent)==null?void 0:i.join(`
- `))||null;n&&this.data.comb&&(n=n.replaceAll(/\s+/g,""));const a={userValue:s,formattedValue:n,lastCommittedValue:null,commitKey:1,focused:!1};this.data.multiLine?(C=document.createElement("textarea"),C.textContent=n??s,this.data.doNotScroll&&(C.style.overflowY="hidden")):(C=document.createElement("input"),C.type=this.data.password?"password":"text",C.setAttribute("value",n??s),this.data.doNotScroll&&(C.style.overflowX="hidden")),this.data.hasOwnCanvas&&(C.hidden=!0),id.add(C),C.setAttribute("data-element-id",g),C.disabled=this.data.readOnly,C.name=this.data.fieldName,C.tabIndex=_Z,this._setRequired(C,this.data.required),l&&(C.maxLength=l),C.addEventListener("input",o=>{I.setValue(g,{value:o.target.value}),this.setPropertyOnSiblings(C,"value",o.target.value,"value"),a.formattedValue=null}),C.addEventListener("resetform",o=>{const c=this.data.defaultFieldValue??"";C.value=a.userValue=c,a.formattedValue=null});let d=o=>{const{formattedValue:c}=a;c!=null&&(o.target.value=c),o.target.scrollLeft=0};if(this.enableScripting&&this.hasJSActions){C.addEventListener("focus",c=>{var h;if(a.focused)return;const{target:r}=c;a.userValue&&(r.value=a.userValue),a.lastCommittedValue=r.value,a.commitKey=1,(h=this.data.actions)!=null&&h.Focus||(a.focused=!0)}),C.addEventListener("updatefromsandbox",c=>{this.showElementAndHideCanvas(c.target);const r={value(h){a.userValue=h.detail.value??"",I.setValue(g,{value:a.userValue.toString()}),h.target.value=a.userValue},formattedValue(h){const{formattedValue:b}=h.detail;a.formattedValue=b,b!=null&&h.target!==document.activeElement&&(h.target.value=b),I.setValue(g,{formattedValue:b})},selRange(h){h.target.setSelectionRange(...h.detail.selRange)},charLimit:h=>{var Z;const{charLimit:b}=h.detail,{target:u}=h;if(b===0){u.removeAttribute("maxLength");return}u.setAttribute("maxLength",b);let m=a.userValue;!m||m.length<=b||(m=m.slice(0,b),u.value=a.userValue=m,I.setValue(g,{value:m}),(Z=this.linkService.eventBus)==null||Z.dispatch("dispatcheventinsandbox",{source:this,detail:{id:g,name:"Keystroke",value:m,willCommit:!0,commitKey:1,selStart:u.selectionStart,selEnd:u.selectionEnd}}))}};this._dispatchEventFromSandbox(r,c)}),C.addEventListener("keydown",c=>{var b;a.commitKey=1;let r=-1;if(c.key==="Escape"?r=0:c.key==="Enter"&&!this.data.multiLine?r=2:c.key==="Tab"&&(a.commitKey=3),r===-1)return;const{value:h}=c.target;a.lastCommittedValue!==h&&(a.lastCommittedValue=h,a.userValue=h,(b=this.linkService.eventBus)==null||b.dispatch("dispatcheventinsandbox",{source:this,detail:{id:g,name:"Keystroke",value:h,willCommit:!0,commitKey:r,selStart:c.target.selectionStart,selEnd:c.target.selectionEnd}}))});const o=d;d=null,C.addEventListener("blur",c=>{var h,b;if(!a.focused||!c.relatedTarget)return;(h=this.data.actions)!=null&&h.Blur||(a.focused=!1);const{value:r}=c.target;a.userValue=r,a.lastCommittedValue!==r&&((b=this.linkService.eventBus)==null||b.dispatch("dispatcheventinsandbox",{source:this,detail:{id:g,name:"Keystroke",value:r,willCommit:!0,commitKey:a.commitKey,selStart:c.target.selectionStart,selEnd:c.target.selectionEnd}})),o(c)}),(e=this.data.actions)!=null&&e.Keystroke&&C.addEventListener("beforeinput",c=>{var Y;a.lastCommittedValue=null;const{data:r,target:h}=c,{value:b,selectionStart:u,selectionEnd:m}=h;let Z=u,p=m;switch(c.inputType){case"deleteWordBackward":{const R=b.substring(0,u).match(/\w*[^\w]*$/);R&&(Z-=R[0].length);break}case"deleteWordForward":{const R=b.substring(u).match(/^[^\w]*\w*/);R&&(p+=R[0].length);break}case"deleteContentBackward":u===m&&(Z-=1);break;case"deleteContentForward":u===m&&(p+=1);break}c.preventDefault(),(Y=this.linkService.eventBus)==null||Y.dispatch("dispatcheventinsandbox",{source:this,detail:{id:g,name:"Keystroke",value:b,change:r||"",willCommit:!1,selStart:Z,selEnd:p}})}),this._setEventListeners(C,a,[["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"]],c=>c.target.value)}if(d&&C.addEventListener("blur",d),this.data.comb){const c=(this.data.rect[2]-this.data.rect[0])/l;C.classList.add("comb"),C.style.letterSpacing=`calc(${c}px * var(--total-scale-factor) - 1ch)`}}else C=document.createElement("div"),C.textContent=this.data.fieldValue,C.style.verticalAlign="middle",C.style.display="table-cell",this.data.hasOwnCanvas&&(C.hidden=!0);return this._setTextStyle(C),this._setBackgroundColor(C),this._setDefaultPropertiesFromJS(C),this.container.append(C),this.container}}class jcg extends ld{constructor(I){super(I,{isRenderable:!!I.data.hasOwnCanvas})}}class Qcg extends ld{constructor(I){super(I,{isRenderable:I.renderForms})}render(){const I=this.annotationStorage,g=this.data,C=g.id;let i=I.getValue(C,{value:g.exportValue===g.fieldValue}).value;typeof i=="string"&&(i=i!=="Off",I.setValue(C,{value:i})),this.container.classList.add("buttonWidgetAnnotation","checkBox");const e=document.createElement("input");return id.add(e),e.setAttribute("data-element-id",C),e.disabled=g.readOnly,this._setRequired(e,this.data.required),e.type="checkbox",e.name=g.fieldName,i&&e.setAttribute("checked",!0),e.setAttribute("exportValue",g.exportValue),e.tabIndex=_Z,e.addEventListener("change",A=>{const{name:s,checked:l}=A.target;for(const n of this._getElementsByName(s,C)){const a=l&&n.exportValue===g.exportValue;n.domElement&&(n.domElement.checked=a),I.setValue(n.id,{value:a})}I.setValue(C,{value:l})}),e.addEventListener("resetform",A=>{const s=g.defaultFieldValue||"Off";A.target.checked=s===g.exportValue}),this.enableScripting&&this.hasJSActions&&(e.addEventListener("updatefromsandbox",A=>{const s={value(l){l.target.checked=l.detail.value!=="Off",I.setValue(C,{value:l.target.checked})}};this._dispatchEventFromSandbox(s,A)}),this._setEventListeners(e,null,[["change","Validate"],["change","Action"],["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"]],A=>A.target.checked)),this._setBackgroundColor(e),this._setDefaultPropertiesFromJS(e),this.container.append(e),this.container}}class Zgg extends ld{constructor(I){super(I,{isRenderable:I.renderForms})}render(){this.container.classList.add("buttonWidgetAnnotation","radioButton");const I=this.annotationStorage,g=this.data,C=g.id;let i=I.getValue(C,{value:g.fieldValue===g.buttonValue}).value;if(typeof i=="string"&&(i=i!==g.buttonValue,I.setValue(C,{value:i})),i)for(const A of this._getElementsByName(g.fieldName,C))I.setValue(A.id,{value:!1});const e=document.createElement("input");if(id.add(e),e.setAttribute("data-element-id",C),e.disabled=g.readOnly,this._setRequired(e,this.data.required),e.type="radio",e.name=g.fieldName,i&&e.setAttribute("checked",!0),e.tabIndex=_Z,e.addEventListener("change",A=>{const{name:s,checked:l}=A.target;for(const n of this._getElementsByName(s,C))I.setValue(n.id,{value:!1});I.setValue(C,{value:l})}),e.addEventListener("resetform",A=>{const s=g.defaultFieldValue;A.target.checked=s!=null&&s===g.buttonValue}),this.enableScripting&&this.hasJSActions){const A=g.buttonValue;e.addEventListener("updatefromsandbox",s=>{const l={value:n=>{const a=A===n.detail.value;for(const d of this._getElementsByName(n.target.name)){const o=a&&d.id===C;d.domElement&&(d.domElement.checked=o),I.setValue(d.id,{value:o})}}};this._dispatchEventFromSandbox(l,s)}),this._setEventListeners(e,null,[["change","Validate"],["change","Action"],["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"]],s=>s.target.checked)}return this._setBackgroundColor(e),this._setDefaultPropertiesFromJS(e),this.container.append(e),this.container}}class Ocg extends bgg{constructor(I){super(I,{ignoreBorder:I.data.hasAppearance})}render(){const I=super.render();I.classList.add("buttonWidgetAnnotation","pushButton");const g=I.lastChild;return this.enableScripting&&this.hasJSActions&&g&&(this._setDefaultPropertiesFromJS(g),g.addEventListener("updatefromsandbox",C=>{this._dispatchEventFromSandbox({},C)})),I}}class Ucg extends ld{constructor(I){super(I,{isRenderable:I.renderForms})}render(){this.container.classList.add("choiceWidgetAnnotation");const I=this.annotationStorage,g=this.data.id,C=I.getValue(g,{value:this.data.fieldValue}),i=document.createElement("select");id.add(i),i.setAttribute("data-element-id",g),i.disabled=this.data.readOnly,this._setRequired(i,this.data.required),i.name=this.data.fieldName,i.tabIndex=_Z;let e=this.data.combo&&this.data.options.length>0;this.data.combo||(i.size=this.data.options.length,this.data.multiSelect&&(i.multiple=!0)),i.addEventListener("resetform",a=>{const d=this.data.defaultFieldValue;for(const o of i.options)o.selected=o.value===d});for(const a of this.data.options){const d=document.createElement("option");d.textContent=a.displayValue,d.value=a.exportValue,C.value.includes(a.exportValue)&&(d.setAttribute("selected",!0),e=!1),i.append(d)}let A=null;if(e){const a=document.createElement("option");a.value=" ",a.setAttribute("hidden",!0),a.setAttribute("selected",!0),i.prepend(a),A=()=>{a.remove(),i.removeEventListener("input",A),A=null},i.addEventListener("input",A)}const s=a=>{const d=a?"value":"textContent",{options:o,multiple:c}=i;return c?Array.prototype.filter.call(o,r=>r.selected).map(r=>r[d]):o.selectedIndex===-1?null:o[o.selectedIndex][d]};let l=s(!1);const n=a=>{const d=a.target.options;return Array.prototype.map.call(d,o=>({displayValue:o.textContent,exportValue:o.value}))};return this.enableScripting&&this.hasJSActions?(i.addEventListener("updatefromsandbox",a=>{const d={value(o){A==null||A();const c=o.detail.value,r=new Set(Array.isArray(c)?c:[c]);for(const h of i.options)h.selected=r.has(h.value);I.setValue(g,{value:s(!0)}),l=s(!1)},multipleSelection(o){i.multiple=!0},remove(o){const c=i.options,r=o.detail.remove;c[r].selected=!1,i.remove(r),c.length>0&&Array.prototype.findIndex.call(c,b=>b.selected)===-1&&(c[0].selected=!0),I.setValue(g,{value:s(!0),items:n(o)}),l=s(!1)},clear(o){for(;i.length!==0;)i.remove(0);I.setValue(g,{value:null,items:[]}),l=s(!1)},insert(o){const{index:c,displayValue:r,exportValue:h}=o.detail.insert,b=i.children[c],u=document.createElement("option");u.textContent=r,u.value=h,b?b.before(u):i.append(u),I.setValue(g,{value:s(!0),items:n(o)}),l=s(!1)},items(o){const{items:c}=o.detail;for(;i.length!==0;)i.remove(0);for(const r of c){const{displayValue:h,exportValue:b}=r,u=document.createElement("option");u.textContent=h,u.value=b,i.append(u)}i.options.length>0&&(i.options[0].selected=!0),I.setValue(g,{value:s(!0),items:n(o)}),l=s(!1)},indices(o){const c=new Set(o.detail.indices);for(const r of o.target.options)r.selected=c.has(r.index);I.setValue(g,{value:s(!0)}),l=s(!1)},editable(o){o.target.disabled=!o.detail.editable}};this._dispatchEventFromSandbox(d,a)}),i.addEventListener("input",a=>{var c;const d=s(!0),o=s(!1);I.setValue(g,{value:d}),a.preventDefault(),(c=this.linkService.eventBus)==null||c.dispatch("dispatcheventinsandbox",{source:this,detail:{id:g,name:"Keystroke",value:l,change:o,changeEx:d,willCommit:!1,commitKey:1,keyDown:!1}})}),this._setEventListeners(i,null,[["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"],["input","Action"],["input","Validate"]],a=>a.target.value)):i.addEventListener("input",function(a){I.setValue(g,{value:s(!0)})}),this.data.combo&&this._setTextStyle(i),this._setBackgroundColor(i),this._setDefaultPropertiesFromJS(i),this.container.append(i),this.container}}class cS extends et{constructor(I){const{data:g,elements:C}=I;super(I,{isRenderable:et._hasPopupData(g)}),this.elements=C,this.popup=null}render(){this.container.classList.add("popupAnnotation");const I=this.popup=new Ecg({container:this.container,color:this.data.color,titleObj:this.data.titleObj,modificationDate:this.data.modificationDate,contentsObj:this.data.contentsObj,richText:this.data.richText,rect:this.data.rect,parentRect:this.data.parentRect||null,parent:this.parent,elements:this.elements,open:this.data.open}),g=[];for(const C of this.elements)C.popup=I,C.container.ariaHasPopup="dialog",g.push(C.data.id),C.addHighlightArea();return this.container.setAttribute("aria-controls",g.map(C=>`${_D}${C}`).join(",")),this.container}}var Lh,VV,MV,vh,Th,EC,Wl,xh,cZ,dZ,jh,yl,bA,Yl,rZ,Nl,hZ,Nc,Vc,GC,nN,dS,Ggg,wgg,pgg,Bgg,aN,oN,rS;class Ecg{constructor({container:I,color:g,elements:C,titleObj:i,modificationDate:e,contentsObj:A,richText:s,parent:l,rect:n,parentRect:a,open:d}){ig(this,GC);ig(this,Lh,eg(this,GC,pgg).bind(this));ig(this,VV,eg(this,GC,rS).bind(this));ig(this,MV,eg(this,GC,oN).bind(this));ig(this,vh,eg(this,GC,aN).bind(this));ig(this,Th,null);ig(this,EC,null);ig(this,Wl,null);ig(this,xh,null);ig(this,cZ,null);ig(this,dZ,null);ig(this,jh,null);ig(this,yl,!1);ig(this,bA,null);ig(this,Yl,null);ig(this,rZ,null);ig(this,Nl,null);ig(this,hZ,null);ig(this,Nc,null);ig(this,Vc,!1);var o;$(this,EC,I),$(this,hZ,i),$(this,Wl,A),$(this,Nl,s),$(this,dZ,l),$(this,Th,g),$(this,rZ,n),$(this,jh,a),$(this,cZ,C),$(this,xh,g9.toDateObject(e)),this.trigger=C.flatMap(c=>c.getElementsToTriggerPopup());for(const c of this.trigger)c.addEventListener("click",M(this,vh)),c.addEventListener("mouseenter",M(this,MV)),c.addEventListener("mouseleave",M(this,VV)),c.classList.add("popupTriggerArea");for(const c of C)(o=c.container)==null||o.addEventListener("keydown",M(this,Lh));M(this,EC).hidden=!0,d&&eg(this,GC,aN).call(this)}render(){if(M(this,bA))return;const I=$(this,bA,document.createElement("div"));if(I.className="popup",M(this,Th)){const e=I.style.outlineColor=iI.makeHexColor(...M(this,Th));I.style.backgroundColor=`color-mix(in srgb, ${e} 30%, white)`}const g=document.createElement("span");g.className="header";const C=document.createElement("h1");if(g.append(C),{dir:C.dir,str:C.textContent}=M(this,hZ),I.append(g),M(this,xh)){const e=document.createElement("span");e.classList.add("popupDate"),e.setAttribute("data-l10n-id","pdfjs-annotation-date-time-string"),e.setAttribute("data-l10n-args",JSON.stringify({dateObj:M(this,xh).valueOf()})),g.append(e)}const i=M(this,GC,nN);if(i)hgg.render({xfaHtml:i,intent:"richText",div:I}),I.lastChild.classList.add("richText","popupContent");else{const e=this._formatContents(M(this,Wl));I.append(e)}M(this,EC).append(I)}_formatContents({str:I,dir:g}){const C=document.createElement("p");C.classList.add("popupContent"),C.dir=g;const i=I.split(/(?:\r\n?|\n)/);for(let e=0,A=i.length;e<A;++e){const s=i[e];C.append(document.createTextNode(s)),e<A-1&&C.append(document.createElement("br"))}return C}updateEdited({rect:I,popupContent:g}){var C;M(this,Nc)||$(this,Nc,{contentsObj:M(this,Wl),richText:M(this,Nl)}),I&&$(this,Yl,null),g&&($(this,Nl,eg(this,GC,wgg).call(this,g)),$(this,Wl,null)),(C=M(this,bA))==null||C.remove(),$(this,bA,null)}resetEdited(){var I;M(this,Nc)&&({contentsObj:ui(this,Wl)._,richText:ui(this,Nl)._}=M(this,Nc),$(this,Nc,null),(I=M(this,bA))==null||I.remove(),$(this,bA,null),$(this,Yl,null))}forceHide(){$(this,Vc,this.isVisible),M(this,Vc)&&(M(this,EC).hidden=!0)}maybeShow(){M(this,Vc)&&(M(this,bA)||eg(this,GC,oN).call(this),$(this,Vc,!1),M(this,EC).hidden=!1)}get isVisible(){return M(this,EC).hidden===!1}}Lh=new WeakMap,VV=new WeakMap,MV=new WeakMap,vh=new WeakMap,Th=new WeakMap,EC=new WeakMap,Wl=new WeakMap,xh=new WeakMap,cZ=new WeakMap,dZ=new WeakMap,jh=new WeakMap,yl=new WeakMap,bA=new WeakMap,Yl=new WeakMap,rZ=new WeakMap,Nl=new WeakMap,hZ=new WeakMap,Nc=new WeakMap,Vc=new WeakMap,GC=new WeakSet,nN=function(){const I=M(this,Nl),g=M(this,Wl);return I!=null&&I.str&&(!(g!=null&&g.str)||g.str===I.str)&&M(this,Nl).html||null},dS=function(){var I,g,C;return((C=(g=(I=M(this,GC,nN))==null?void 0:I.attributes)==null?void 0:g.style)==null?void 0:C.fontSize)||0},Ggg=function(){var I,g,C;return((C=(g=(I=M(this,GC,nN))==null?void 0:I.attributes)==null?void 0:g.style)==null?void 0:C.color)||null},wgg=function(I){const g=[],C={str:I,html:{name:"div",attributes:{dir:"auto"},children:[{name:"p",children:g}]}},i={style:{color:M(this,GC,Ggg),fontSize:M(this,GC,dS)?`calc(${M(this,GC,dS)}px * var(--total-scale-factor))`:""}};for(const e of I.split(`
- `))g.push({name:"span",value:e,attributes:i});return C},pgg=function(I){I.altKey||I.shiftKey||I.ctrlKey||I.metaKey||(I.key==="Enter"||I.key==="Escape"&&M(this,yl))&&eg(this,GC,aN).call(this)},Bgg=function(){if(M(this,Yl)!==null)return;const{page:{view:I},viewport:{rawDims:{pageWidth:g,pageHeight:C,pageX:i,pageY:e}}}=M(this,dZ);let A=!!M(this,jh),s=A?M(this,jh):M(this,rZ);for(const r of M(this,cZ))if(!s||iI.intersect(r.data.rect,s)!==null){s=r.data.rect,A=!0;break}const l=iI.normalizeRect([s[0],I[3]-s[1]+I[1],s[2],I[3]-s[3]+I[1]]),a=A?s[2]-s[0]+5:0,d=l[0]+a,o=l[1];$(this,Yl,[100*(d-i)/g,100*(o-e)/C]);const{style:c}=M(this,EC);c.left=`${M(this,Yl)[0]}%`,c.top=`${M(this,Yl)[1]}%`},aN=function(){$(this,yl,!M(this,yl)),M(this,yl)?(eg(this,GC,oN).call(this),M(this,EC).addEventListener("click",M(this,vh)),M(this,EC).addEventListener("keydown",M(this,Lh))):(eg(this,GC,rS).call(this),M(this,EC).removeEventListener("click",M(this,vh)),M(this,EC).removeEventListener("keydown",M(this,Lh)))},oN=function(){M(this,bA)||this.render(),this.isVisible?M(this,yl)&&M(this,EC).classList.add("focused"):(eg(this,GC,Bgg).call(this),M(this,EC).hidden=!1,M(this,EC).style.zIndex=parseInt(M(this,EC).style.zIndex)+1e3)},rS=function(){M(this,EC).classList.remove("focused"),!(M(this,yl)||!this.isVisible)&&(M(this,EC).hidden=!0,M(this,EC).style.zIndex=parseInt(M(this,EC).style.zIndex)-1e3)};class Wgg extends et{constructor(I){super(I,{isRenderable:!0,ignoreBorder:!0}),this.textContent=I.data.textContent,this.textPosition=I.data.textPosition,this.annotationEditorType=RI.FREETEXT}render(){if(this.container.classList.add("freeTextAnnotation"),this.textContent){const I=document.createElement("div");I.classList.add("annotationTextContent"),I.setAttribute("role","comment");for(const g of this.textContent){const C=document.createElement("span");C.textContent=g,I.append(C)}this.container.append(I)}return!this.data.popupRef&&this.hasPopupData&&this._createPopup(),this._editOnDoubleClick(),this.container}}var bZ;class Pcg extends et{constructor(g){super(g,{isRenderable:!0,ignoreBorder:!0});ig(this,bZ,null)}render(){this.container.classList.add("lineAnnotation");const{data:g,width:C,height:i}=this,e=this.svgFactory.create(C,i,!0),A=$(this,bZ,this.svgFactory.createElement("svg:line"));return A.setAttribute("x1",g.rect[2]-g.lineCoordinates[0]),A.setAttribute("y1",g.rect[3]-g.lineCoordinates[1]),A.setAttribute("x2",g.rect[2]-g.lineCoordinates[2]),A.setAttribute("y2",g.rect[3]-g.lineCoordinates[3]),A.setAttribute("stroke-width",g.borderStyle.width||1),A.setAttribute("stroke","transparent"),A.setAttribute("fill","transparent"),e.append(A),this.container.append(e),!g.popupRef&&this.hasPopupData&&this._createPopup(),this.container}getElementsToTriggerPopup(){return M(this,bZ)}addHighlightArea(){this.container.classList.add("highlightArea")}}bZ=new WeakMap;var uZ;class _cg extends et{constructor(g){super(g,{isRenderable:!0,ignoreBorder:!0});ig(this,uZ,null)}render(){this.container.classList.add("squareAnnotation");const{data:g,width:C,height:i}=this,e=this.svgFactory.create(C,i,!0),A=g.borderStyle.width,s=$(this,uZ,this.svgFactory.createElement("svg:rect"));return s.setAttribute("x",A/2),s.setAttribute("y",A/2),s.setAttribute("width",C-A),s.setAttribute("height",i-A),s.setAttribute("stroke-width",A||1),s.setAttribute("stroke","transparent"),s.setAttribute("fill","transparent"),e.append(s),this.container.append(e),!g.popupRef&&this.hasPopupData&&this._createPopup(),this.container}getElementsToTriggerPopup(){return M(this,uZ)}addHighlightArea(){this.container.classList.add("highlightArea")}}uZ=new WeakMap;var mZ;class qcg extends et{constructor(g){super(g,{isRenderable:!0,ignoreBorder:!0});ig(this,mZ,null)}render(){this.container.classList.add("circleAnnotation");const{data:g,width:C,height:i}=this,e=this.svgFactory.create(C,i,!0),A=g.borderStyle.width,s=$(this,mZ,this.svgFactory.createElement("svg:ellipse"));return s.setAttribute("cx",C/2),s.setAttribute("cy",i/2),s.setAttribute("rx",C/2-A/2),s.setAttribute("ry",i/2-A/2),s.setAttribute("stroke-width",A||1),s.setAttribute("stroke","transparent"),s.setAttribute("fill","transparent"),e.append(s),this.container.append(e),!g.popupRef&&this.hasPopupData&&this._createPopup(),this.container}getElementsToTriggerPopup(){return M(this,mZ)}addHighlightArea(){this.container.classList.add("highlightArea")}}mZ=new WeakMap;var ZZ;class ygg extends et{constructor(g){super(g,{isRenderable:!0,ignoreBorder:!0});ig(this,ZZ,null);this.containerClassName="polylineAnnotation",this.svgElementName="svg:polyline"}render(){this.container.classList.add(this.containerClassName);const{data:{rect:g,vertices:C,borderStyle:i,popupRef:e},width:A,height:s}=this;if(!C)return this.container;const l=this.svgFactory.create(A,s,!0);let n=[];for(let d=0,o=C.length;d<o;d+=2){const c=C[d]-g[0],r=g[3]-C[d+1];n.push(`${c},${r}`)}n=n.join(" ");const a=$(this,ZZ,this.svgFactory.createElement(this.svgElementName));return a.setAttribute("points",n),a.setAttribute("stroke-width",i.width||1),a.setAttribute("stroke","transparent"),a.setAttribute("fill","transparent"),l.append(a),this.container.append(l),!e&&this.hasPopupData&&this._createPopup(),this.container}getElementsToTriggerPopup(){return M(this,ZZ)}addHighlightArea(){this.container.classList.add("highlightArea")}}ZZ=new WeakMap;class $cg extends ygg{constructor(I){super(I),this.containerClassName="polygonAnnotation",this.svgElementName="svg:polygon"}}class gdg extends et{constructor(I){super(I,{isRenderable:!0,ignoreBorder:!0})}render(){return this.container.classList.add("caretAnnotation"),!this.data.popupRef&&this.hasPopupData&&this._createPopup(),this.container}}var GZ,Mc,wZ,hS;class A9 extends et{constructor(g){super(g,{isRenderable:!0,ignoreBorder:!0});ig(this,wZ);ig(this,GZ,null);ig(this,Mc,[]);this.containerClassName="inkAnnotation",this.svgElementName="svg:polyline",this.annotationEditorType=this.data.it==="InkHighlight"?RI.HIGHLIGHT:RI.INK}render(){this.container.classList.add(this.containerClassName);const{data:{rect:g,rotation:C,inkLists:i,borderStyle:e,popupRef:A}}=this,{transform:s,width:l,height:n}=eg(this,wZ,hS).call(this,C,g),a=this.svgFactory.create(l,n,!0),d=$(this,GZ,this.svgFactory.createElement("svg:g"));a.append(d),d.setAttribute("stroke-width",e.width||1),d.setAttribute("stroke-linecap","round"),d.setAttribute("stroke-linejoin","round"),d.setAttribute("stroke-miterlimit",10),d.setAttribute("stroke","transparent"),d.setAttribute("fill","transparent"),d.setAttribute("transform",s);for(let o=0,c=i.length;o<c;o++){const r=this.svgFactory.createElement(this.svgElementName);M(this,Mc).push(r),r.setAttribute("points",i[o].join(",")),d.append(r)}return!A&&this.hasPopupData&&this._createPopup(),this.container.append(a),this._editOnDoubleClick(),this.container}updateEdited(g){super.updateEdited(g);const{thickness:C,points:i,rect:e}=g,A=M(this,GZ);if(C>=0&&A.setAttribute("stroke-width",C||1),i)for(let s=0,l=M(this,Mc).length;s<l;s++)M(this,Mc)[s].setAttribute("points",i[s].join(","));if(e){const{transform:s,width:l,height:n}=eg(this,wZ,hS).call(this,this.data.rotation,e);A.parentElement.setAttribute("viewBox",`0 0 ${l} ${n}`),A.setAttribute("transform",s)}}getElementsToTriggerPopup(){return M(this,Mc)}addHighlightArea(){this.container.classList.add("highlightArea")}}GZ=new WeakMap,Mc=new WeakMap,wZ=new WeakSet,hS=function(g,C){switch(g){case 90:return{transform:`rotate(90) translate(${-C[0]},${C[1]}) scale(1,-1)`,width:C[3]-C[1],height:C[2]-C[0]};case 180:return{transform:`rotate(180) translate(${-C[2]},${C[1]}) scale(1,-1)`,width:C[2]-C[0],height:C[3]-C[1]};case 270:return{transform:`rotate(270) translate(${-C[2]},${C[3]}) scale(1,-1)`,width:C[3]-C[1],height:C[2]-C[0]};default:return{transform:`translate(${-C[0]},${C[3]}) scale(1,-1)`,width:C[2]-C[0],height:C[3]-C[1]}}};class Ygg extends et{constructor(I){super(I,{isRenderable:!0,ignoreBorder:!0,createQuadrilaterals:!0}),this.annotationEditorType=RI.HIGHLIGHT}render(){return!this.data.popupRef&&this.hasPopupData&&this._createPopup(),this.container.classList.add("highlightAnnotation"),this._editOnDoubleClick(),this.container}}class Idg extends et{constructor(I){super(I,{isRenderable:!0,ignoreBorder:!0,createQuadrilaterals:!0})}render(){return!this.data.popupRef&&this.hasPopupData&&this._createPopup(),this.container.classList.add("underlineAnnotation"),this.container}}class Cdg extends et{constructor(I){super(I,{isRenderable:!0,ignoreBorder:!0,createQuadrilaterals:!0})}render(){return!this.data.popupRef&&this.hasPopupData&&this._createPopup(),this.container.classList.add("squigglyAnnotation"),this.container}}class tdg extends et{constructor(I){super(I,{isRenderable:!0,ignoreBorder:!0,createQuadrilaterals:!0})}render(){return!this.data.popupRef&&this.hasPopupData&&this._createPopup(),this.container.classList.add("strikeoutAnnotation"),this.container}}class Ngg extends et{constructor(I){super(I,{isRenderable:!0,ignoreBorder:!0}),this.annotationEditorType=RI.STAMP}render(){return this.container.classList.add("stampAnnotation"),this.container.setAttribute("role","img"),!this.data.popupRef&&this.hasPopupData&&this._createPopup(),this._editOnDoubleClick(),this.container}}var pZ,BZ,bS;class idg extends et{constructor(g){var i;super(g,{isRenderable:!0});ig(this,BZ);ig(this,pZ,null);const{file:C}=this.data;this.filename=C.filename,this.content=C.content,(i=this.linkService.eventBus)==null||i.dispatch("fileattachmentannotation",{source:this,...C})}render(){this.container.classList.add("fileAttachmentAnnotation");const{container:g,data:C}=this;let i;C.hasAppearance||C.fillAlpha===0?i=document.createElement("div"):(i=document.createElement("img"),i.src=`${this.imageResourcesPath}annotation-${/paperclip/i.test(C.name)?"paperclip":"pushpin"}.svg`,C.fillAlpha&&C.fillAlpha<1&&(i.style=`filter: opacity(${Math.round(C.fillAlpha*100)}%);`)),i.addEventListener("dblclick",eg(this,BZ,bS).bind(this)),$(this,pZ,i);const{isMac:e}=gi.platform;return g.addEventListener("keydown",A=>{A.key==="Enter"&&(e?A.metaKey:A.ctrlKey)&&eg(this,BZ,bS).call(this)}),!C.popupRef&&this.hasPopupData?this._createPopup():i.classList.add("popupTriggerArea"),g.append(i),g}getElementsToTriggerPopup(){return M(this,pZ)}addHighlightArea(){this.container.classList.add("highlightArea")}}pZ=new WeakMap,BZ=new WeakSet,bS=function(){var g;(g=this.downloadManager)==null||g.openOrDownloadData(this.content,this.filename)};var WZ,Rc,wa,yZ,xa,mS,ZS;const j9=class j9{constructor({div:I,accessibilityManager:g,annotationCanvasMap:C,annotationEditorUIManager:i,page:e,viewport:A,structTreeLayer:s}){ig(this,xa);ig(this,WZ,null);ig(this,Rc,null);ig(this,wa,new Map);ig(this,yZ,null);this.div=I,$(this,WZ,g),$(this,Rc,C),$(this,yZ,s||null),this.page=e,this.viewport=A,this.zIndex=0,this._annotationEditorUIManager=i}hasEditableAnnotations(){return M(this,wa).size>0}async render(I){var A;const{annotations:g}=I,C=this.div;Cd(C,this.viewport);const i=new Map,e={data:null,layer:C,linkService:I.linkService,downloadManager:I.downloadManager,imageResourcesPath:I.imageResourcesPath||"",renderForms:I.renderForms!==!1,svgFactory:new xN,annotationStorage:I.annotationStorage||new t9,enableScripting:I.enableScripting===!0,hasJSActions:I.hasJSActions,fieldObjects:I.fieldObjects,parent:this,elements:null};for(const s of g){if(s.noHTML)continue;const l=s.annotationType===lt.POPUP;if(l){const d=i.get(s.id);if(!d)continue;e.elements=d}else if(s.rect[2]===s.rect[0]||s.rect[3]===s.rect[1])continue;e.data=s;const n=i8.create(e);if(!n.isRenderable)continue;if(!l&&s.popupRef){const d=i.get(s.popupRef);d?d.push(n):i.set(s.popupRef,[n])}const a=n.render();s.hidden&&(a.style.visibility="hidden"),await eg(this,xa,mS).call(this,a,s.id),n._isEditable&&(M(this,wa).set(n.data.id,n),(A=this._annotationEditorUIManager)==null||A.renderAnnotationElement(n))}eg(this,xa,ZS).call(this)}async addLinkAnnotations(I,g){const C={data:null,layer:this.div,linkService:g,svgFactory:new xN,parent:this};for(const i of I){i.borderStyle||(i.borderStyle=j9._defaultBorderStyle),C.data=i;const e=i8.create(C);if(!e.isRenderable)continue;const A=e.render();await eg(this,xa,mS).call(this,A,i.id)}}update({viewport:I}){const g=this.div;this.viewport=I,Cd(g,{rotation:I.rotation}),eg(this,xa,ZS).call(this),g.hidden=!1}getEditableAnnotations(){return Array.from(M(this,wa).values())}getEditableAnnotation(I){return M(this,wa).get(I)}static get _defaultBorderStyle(){return jI(this,"_defaultBorderStyle",Object.freeze({width:1,rawWidth:1,style:Kr.SOLID,dashArray:[3],horizontalCornerRadius:0,verticalCornerRadius:0}))}};WZ=new WeakMap,Rc=new WeakMap,wa=new WeakMap,yZ=new WeakMap,xa=new WeakSet,mS=async function(I,g){var A,s;const C=I.firstChild||I,i=C.id=`${_D}${g}`,e=await((A=M(this,yZ))==null?void 0:A.getAriaAttributes(i));if(e)for(const[l,n]of e)C.setAttribute(l,n);this.div.append(I),(s=M(this,WZ))==null||s.moveElementInDOM(this.div,I,C,!1)},ZS=function(){var g;if(!M(this,Rc))return;const I=this.div;for(const[C,i]of M(this,Rc)){const e=I.querySelector(`[data-annotation-id="${C}"]`);if(!e)continue;i.className="annotationContent";const{firstChild:A}=e;A?A.nodeName==="CANVAS"?A.replaceWith(i):A.classList.contains("annotationContent")?A.after(i):A.before(i):e.append(i);const s=M(this,wa).get(C);s&&(s._hasNoCanvas?((g=this._annotationEditorUIManager)==null||g.setMissingCanvas(C,e.id,i),s._hasNoCanvas=!1):s.canvas=i)}M(this,Rc).clear()};let uS=j9;const NY=/\r\n?|\n/g;var uA,se,YZ,fc,le,dt,Vgg,Mgg,Rgg,cN,xl,dN,rN,fgg,wS,Hgg;const BC=class BC extends zC{constructor(g){super({...g,name:"freeTextEditor"});ig(this,dt);ig(this,uA);ig(this,se,"");ig(this,YZ,`${this.id}-editor`);ig(this,fc,null);ig(this,le);$(this,uA,g.color||BC._defaultColor||zC._defaultLineColor),$(this,le,g.fontSize||BC._defaultFontSize)}static get _keyboardManager(){const g=BC.prototype,C=A=>A.isEmpty(),i=td.TRANSLATE_SMALL,e=td.TRANSLATE_BIG;return jI(this,"_keyboardManager",new EZ([[["ctrl+s","mac+meta+s","ctrl+p","mac+meta+p"],g.commitOrRemove,{bubbles:!0}],[["ctrl+Enter","mac+meta+Enter","Escape","mac+Escape"],g.commitOrRemove],[["ArrowLeft","mac+ArrowLeft"],g._translateEmpty,{args:[-i,0],checker:C}],[["ctrl+ArrowLeft","mac+shift+ArrowLeft"],g._translateEmpty,{args:[-e,0],checker:C}],[["ArrowRight","mac+ArrowRight"],g._translateEmpty,{args:[i,0],checker:C}],[["ctrl+ArrowRight","mac+shift+ArrowRight"],g._translateEmpty,{args:[e,0],checker:C}],[["ArrowUp","mac+ArrowUp"],g._translateEmpty,{args:[0,-i],checker:C}],[["ctrl+ArrowUp","mac+shift+ArrowUp"],g._translateEmpty,{args:[0,-e],checker:C}],[["ArrowDown","mac+ArrowDown"],g._translateEmpty,{args:[0,i],checker:C}],[["ctrl+ArrowDown","mac+shift+ArrowDown"],g._translateEmpty,{args:[0,e],checker:C}]]))}static initialize(g,C){zC.initialize(g,C);const i=getComputedStyle(document.documentElement);this._internalPadding=parseFloat(i.getPropertyValue("--freetext-padding"))}static updateDefaultParams(g,C){switch(g){case gC.FREETEXT_SIZE:BC._defaultFontSize=C;break;case gC.FREETEXT_COLOR:BC._defaultColor=C;break}}updateParams(g,C){switch(g){case gC.FREETEXT_SIZE:eg(this,dt,Vgg).call(this,C);break;case gC.FREETEXT_COLOR:eg(this,dt,Mgg).call(this,C);break}}static get defaultPropertiesToUpdate(){return[[gC.FREETEXT_SIZE,BC._defaultFontSize],[gC.FREETEXT_COLOR,BC._defaultColor||zC._defaultLineColor]]}get propertiesToUpdate(){return[[gC.FREETEXT_SIZE,M(this,le)],[gC.FREETEXT_COLOR,M(this,uA)]]}_translateEmpty(g,C){this._uiManager.translateSelectedEditors(g,C,!0)}getInitialTranslation(){const g=this.parentScale;return[-BC._internalPadding*g,-(BC._internalPadding+M(this,le))*g]}rebuild(){this.parent&&(super.rebuild(),this.div!==null&&(this.isAttachedToDOM||this.parent.add(this)))}enableEditMode(){if(this.isInEditMode())return;this.parent.setEditingState(!1),this.parent.updateToolbar(RI.FREETEXT),super.enableEditMode(),this.overlayDiv.classList.remove("enabled"),this.editorDiv.contentEditable=!0,this._isDraggable=!1,this.div.removeAttribute("aria-activedescendant"),$(this,fc,new AbortController);const g=this._uiManager.combinedSignal(M(this,fc));this.editorDiv.addEventListener("keydown",this.editorDivKeydown.bind(this),{signal:g}),this.editorDiv.addEventListener("focus",this.editorDivFocus.bind(this),{signal:g}),this.editorDiv.addEventListener("blur",this.editorDivBlur.bind(this),{signal:g}),this.editorDiv.addEventListener("input",this.editorDivInput.bind(this),{signal:g}),this.editorDiv.addEventListener("paste",this.editorDivPaste.bind(this),{signal:g})}disableEditMode(){var g;this.isInEditMode()&&(this.parent.setEditingState(!0),super.disableEditMode(),this.overlayDiv.classList.add("enabled"),this.editorDiv.contentEditable=!1,this.div.setAttribute("aria-activedescendant",M(this,YZ)),this._isDraggable=!0,(g=M(this,fc))==null||g.abort(),$(this,fc,null),this.div.focus({preventScroll:!0}),this.isEditing=!1,this.parent.div.classList.add("freetextEditing"))}focusin(g){this._focusEventsAllowed&&(super.focusin(g),g.target!==this.editorDiv&&this.editorDiv.focus())}onceAdded(g){var C;this.width||(this.enableEditMode(),g&&this.editorDiv.focus(),(C=this._initialOptions)!=null&&C.isCentered&&this.center(),this._initialOptions=null)}isEmpty(){return!this.editorDiv||this.editorDiv.innerText.trim()===""}remove(){this.isEditing=!1,this.parent&&(this.parent.setEditingState(!0),this.parent.div.classList.add("freetextEditing")),super.remove()}commit(){if(!this.isInEditMode())return;super.commit(),this.disableEditMode();const g=M(this,se),C=$(this,se,eg(this,dt,Rgg).call(this).trimEnd());if(g===C)return;const i=e=>{if($(this,se,e),!e){this.remove();return}eg(this,dt,rN).call(this),this._uiManager.rebuild(this),eg(this,dt,cN).call(this)};this.addCommands({cmd:()=>{i(C)},undo:()=>{i(g)},mustExec:!1}),eg(this,dt,cN).call(this)}shouldGetKeyboardEvents(){return this.isInEditMode()}enterInEditMode(){this.enableEditMode(),this.editorDiv.focus()}dblclick(g){this.enterInEditMode()}keydown(g){g.target===this.div&&g.key==="Enter"&&(this.enterInEditMode(),g.preventDefault())}editorDivKeydown(g){BC._keyboardManager.exec(this,g)}editorDivFocus(g){this.isEditing=!0}editorDivBlur(g){this.isEditing=!1}editorDivInput(g){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 g,C;(this._isCopy||this.annotationElementId)&&(g=this.x,C=this.y),super.render(),this.editorDiv=document.createElement("div"),this.editorDiv.className="internal",this.editorDiv.setAttribute("id",M(this,YZ)),this.editorDiv.setAttribute("data-l10n-id","pdfjs-free-text2"),this.editorDiv.setAttribute("data-l10n-attrs","default-content"),this.enableEditing(),this.editorDiv.contentEditable=!0;const{style:i}=this.editorDiv;if(i.fontSize=`calc(${M(this,le)}px * var(--total-scale-factor))`,i.color=M(this,uA),this.div.append(this.editorDiv),this.overlayDiv=document.createElement("div"),this.overlayDiv.classList.add("overlay","enabled"),this.div.append(this.overlayDiv),C9(this,this.div,["dblclick","keydown"]),this._isCopy||this.annotationElementId){const[e,A]=this.parentDimensions;if(this.annotationElementId){const{position:s}=this._initialData;let[l,n]=this.getInitialTranslation();[l,n]=this.pageTranslationToScreen(l,n);const[a,d]=this.pageDimensions,[o,c]=this.pageTranslation;let r,h;switch(this.rotation){case 0:r=g+(s[0]-o)/a,h=C+this.height-(s[1]-c)/d;break;case 90:r=g+(s[0]-o)/a,h=C-(s[1]-c)/d,[l,n]=[n,-l];break;case 180:r=g-this.width+(s[0]-o)/a,h=C-(s[1]-c)/d,[l,n]=[-l,-n];break;case 270:r=g+(s[0]-o-this.height*d)/a,h=C+(s[1]-c-this.width*a)/d,[l,n]=[-n,l];break}this.setAt(r*e,h*A,l,n)}else this._moveAfterPaste(g,C);eg(this,dt,rN).call(this),this._isDraggable=!0,this.editorDiv.contentEditable=!1}else this._isDraggable=!1,this.editorDiv.contentEditable=!0;return this.div}editorDivPaste(g){var r,h,b;const C=g.clipboardData||window.clipboardData,{types:i}=C;if(i.length===1&&i[0]==="text/plain")return;g.preventDefault();const e=eg(r=BC,xl,wS).call(r,C.getData("text")||"").replaceAll(NY,`
- `);if(!e)return;const A=window.getSelection();if(!A.rangeCount)return;this.editorDiv.normalize(),A.deleteFromDocument();const s=A.getRangeAt(0);if(!e.includes(`
- `)){s.insertNode(document.createTextNode(e)),this.editorDiv.normalize(),A.collapseToStart();return}const{startContainer:l,startOffset:n}=s,a=[],d=[];if(l.nodeType===Node.TEXT_NODE){const u=l.parentElement;if(d.push(l.nodeValue.slice(n).replaceAll(NY,"")),u!==this.editorDiv){let m=a;for(const Z of this.editorDiv.childNodes){if(Z===u){m=d;continue}m.push(eg(h=BC,xl,dN).call(h,Z))}}a.push(l.nodeValue.slice(0,n).replaceAll(NY,""))}else if(l===this.editorDiv){let u=a,m=0;for(const Z of this.editorDiv.childNodes)m++===n&&(u=d),u.push(eg(b=BC,xl,dN).call(b,Z))}$(this,se,`${a.join(`
- `)}${e}${d.join(`
- `)}`),eg(this,dt,rN).call(this);const o=new Range;let c=Math.sumPrecise(a.map(u=>u.length));for(const{firstChild:u}of this.editorDiv.childNodes)if(u.nodeType===Node.TEXT_NODE){const m=u.nodeValue.length;if(c<=m){o.setStart(u,c),o.setEnd(u,c);break}c-=m}A.removeAllRanges(),A.addRange(o)}get contentDiv(){return this.editorDiv}static async deserialize(g,C,i){var s;let e=null;if(g instanceof Wgg){const{data:{defaultAppearanceData:{fontSize:l,fontColor:n},rect:a,rotation:d,id:o,popupRef:c},textContent:r,textPosition:h,parent:{page:{pageNumber:b}}}=g;if(!r||r.length===0)return null;e=g={annotationType:RI.FREETEXT,color:Array.from(n),fontSize:l,value:r.join(`
- `),position:h,pageIndex:b-1,rect:a.slice(0),rotation:d,id:o,deleted:!1,popupRef:c}}const A=await super.deserialize(g,C,i);return $(A,le,g.fontSize),$(A,uA,iI.makeHexColor(...g.color)),$(A,se,eg(s=BC,xl,wS).call(s,g.value)),A.annotationElementId=g.id||null,A._initialData=e,A}serialize(g=!1){if(this.isEmpty())return null;if(this.deleted)return this.serializeDeleted();const C=BC._internalPadding*this.parentScale,i=this.getRect(C,C),e=zC._colorManager.convert(this.isAttachedToDOM?getComputedStyle(this.editorDiv).color:M(this,uA)),A={annotationType:RI.FREETEXT,color:e,fontSize:M(this,le),value:eg(this,dt,fgg).call(this),pageIndex:this.pageIndex,rect:i,rotation:this.rotation,structTreeParentId:this._structTreeParentId};return g?(A.isCopy=!0,A):this.annotationElementId&&!eg(this,dt,Hgg).call(this,A)?null:(A.id=this.annotationElementId,A)}renderAnnotationElement(g){const C=super.renderAnnotationElement(g);if(this.deleted)return C;const{style:i}=C;i.fontSize=`calc(${M(this,le)}px * var(--total-scale-factor))`,i.color=M(this,uA),C.replaceChildren();for(const A of M(this,se).split(`
- `)){const s=document.createElement("div");s.append(A?document.createTextNode(A):document.createElement("br")),C.append(s)}const e=BC._internalPadding*this.parentScale;return g.updateEdited({rect:this.getRect(e,e),popupContent:M(this,se)}),C}resetAnnotationElement(g){super.resetAnnotationElement(g),g.resetEdited()}};uA=new WeakMap,se=new WeakMap,YZ=new WeakMap,fc=new WeakMap,le=new WeakMap,dt=new WeakSet,Vgg=function(g){const C=e=>{this.editorDiv.style.fontSize=`calc(${e}px * var(--total-scale-factor))`,this.translate(0,-(e-M(this,le))*this.parentScale),$(this,le,e),eg(this,dt,cN).call(this)},i=M(this,le);this.addCommands({cmd:C.bind(this,g),undo:C.bind(this,i),post:this._uiManager.updateUI.bind(this._uiManager,this),mustExec:!0,type:gC.FREETEXT_SIZE,overwriteIfSameType:!0,keepUndo:!0})},Mgg=function(g){const C=e=>{$(this,uA,this.editorDiv.style.color=e)},i=M(this,uA);this.addCommands({cmd:C.bind(this,g),undo:C.bind(this,i),post:this._uiManager.updateUI.bind(this._uiManager,this),mustExec:!0,type:gC.FREETEXT_COLOR,overwriteIfSameType:!0,keepUndo:!0})},Rgg=function(){var i;const g=[];this.editorDiv.normalize();let C=null;for(const e of this.editorDiv.childNodes)(C==null?void 0:C.nodeType)===Node.TEXT_NODE&&e.nodeName==="BR"||(g.push(eg(i=BC,xl,dN).call(i,e)),C=e);return g.join(`
- `)},cN=function(){const[g,C]=this.parentDimensions;let i;if(this.isAttachedToDOM)i=this.div.getBoundingClientRect();else{const{currentLayer:e,div:A}=this,s=A.style.display,l=A.classList.contains("hidden");A.classList.remove("hidden"),A.style.display="hidden",e.div.append(this.div),i=A.getBoundingClientRect(),A.remove(),A.style.display=s,A.classList.toggle("hidden",l)}this.rotation%180===this.parentRotation%180?(this.width=i.width/g,this.height=i.height/C):(this.width=i.height/g,this.height=i.width/C),this.fixAndSetPosition()},xl=new WeakSet,dN=function(g){return(g.nodeType===Node.TEXT_NODE?g.nodeValue:g.innerText).replaceAll(NY,"")},rN=function(){if(this.editorDiv.replaceChildren(),!!M(this,se))for(const g of M(this,se).split(`
- `)){const C=document.createElement("div");C.append(g?document.createTextNode(g):document.createElement("br")),this.editorDiv.append(C)}},fgg=function(){return M(this,se).replaceAll(" "," ")},wS=function(g){return g.replaceAll(" "," ")},Hgg=function(g){const{value:C,fontSize:i,color:e,pageIndex:A}=this._initialData;return this._hasBeenMoved||g.value!==C||g.fontSize!==i||g.color.some((s,l)=>s!==e[l])||g.pageIndex!==A},ig(BC,xl),CI(BC,"_freeTextDefaultContent",""),CI(BC,"_internalPadding",0),CI(BC,"_defaultColor",null),CI(BC,"_defaultFontSize",10),CI(BC,"_type","freetext"),CI(BC,"_editorType",RI.FREETEXT);let GS=BC;class _g{toSVGPath(){ZC("Abstract method `toSVGPath` must be implemented.")}get box(){ZC("Abstract getter `box` must be implemented.")}serialize(I,g){ZC("Abstract method `serialize` must be implemented.")}static _rescale(I,g,C,i,e,A){A||(A=new Float32Array(I.length));for(let s=0,l=I.length;s<l;s+=2)A[s]=g+I[s]*i,A[s+1]=C+I[s+1]*e;return A}static _rescaleAndSwap(I,g,C,i,e,A){A||(A=new Float32Array(I.length));for(let s=0,l=I.length;s<l;s+=2)A[s]=g+I[s+1]*i,A[s+1]=C+I[s]*e;return A}static _translate(I,g,C,i){i||(i=new Float32Array(I.length));for(let e=0,A=I.length;e<A;e+=2)i[e]=g+I[e],i[e+1]=C+I[e+1];return i}static svgRound(I){return Math.round(I*1e4)}static _normalizePoint(I,g,C,i,e){switch(e){case 90:return[1-g/C,I/i];case 180:return[1-I/C,1-g/i];case 270:return[g/C,1-I/i];default:return[I/C,g/i]}}static _normalizePagePoint(I,g,C){switch(C){case 90:return[1-g,I];case 180:return[1-I,1-g];case 270:return[g,1-I];default:return[I,g]}}static createBezierPoints(I,g,C,i,e,A){return[(I+5*C)/6,(g+5*i)/6,(5*C+e)/6,(5*i+A)/6,(C+e)/2,(i+A)/2]}}CI(_g,"PRECISION",1e-4);var ne,mA,Qh,Oh,bs,JI,Hc,Xc,NZ,VZ,Uh,Eh,pa,MZ,RV,fV,wt,Tu,Xgg,Sgg,Dgg,Kgg,Fgg,kgg;const ll=class ll{constructor({x:I,y:g},C,i,e,A,s=0){ig(this,wt);ig(this,ne);ig(this,mA,[]);ig(this,Qh);ig(this,Oh);ig(this,bs,[]);ig(this,JI,new Float32Array(18));ig(this,Hc);ig(this,Xc);ig(this,NZ);ig(this,VZ);ig(this,Uh);ig(this,Eh);ig(this,pa,[]);$(this,ne,C),$(this,Eh,e*i),$(this,Oh,A),M(this,JI).set([NaN,NaN,NaN,NaN,I,g],6),$(this,Qh,s),$(this,VZ,M(ll,MZ)*i),$(this,NZ,M(ll,fV)*i),$(this,Uh,i),M(this,pa).push(I,g)}isEmpty(){return isNaN(M(this,JI)[8])}add({x:I,y:g}){var S;$(this,Hc,I),$(this,Xc,g);const[C,i,e,A]=M(this,ne);let[s,l,n,a]=M(this,JI).subarray(8,12);const d=I-n,o=g-a,c=Math.hypot(d,o);if(c<M(this,NZ))return!1;const r=c-M(this,VZ),h=r/c,b=h*d,u=h*o;let m=s,Z=l;s=n,l=a,n+=b,a+=u,(S=M(this,pa))==null||S.push(I,g);const p=-u/r,Y=b/r,R=p*M(this,Eh),X=Y*M(this,Eh);return M(this,JI).set(M(this,JI).subarray(2,8),0),M(this,JI).set([n+R,a+X],4),M(this,JI).set(M(this,JI).subarray(14,18),12),M(this,JI).set([n-R,a-X],16),isNaN(M(this,JI)[6])?(M(this,bs).length===0&&(M(this,JI).set([s+R,l+X],2),M(this,bs).push(NaN,NaN,NaN,NaN,(s+R-C)/e,(l+X-i)/A),M(this,JI).set([s-R,l-X],14),M(this,mA).push(NaN,NaN,NaN,NaN,(s-R-C)/e,(l-X-i)/A)),M(this,JI).set([m,Z,s,l,n,a],6),!this.isEmpty()):(M(this,JI).set([m,Z,s,l,n,a],6),Math.abs(Math.atan2(Z-l,m-s)-Math.atan2(u,b))<Math.PI/2?([s,l,n,a]=M(this,JI).subarray(2,6),M(this,bs).push(NaN,NaN,NaN,NaN,((s+n)/2-C)/e,((l+a)/2-i)/A),[s,l,m,Z]=M(this,JI).subarray(14,18),M(this,mA).push(NaN,NaN,NaN,NaN,((m+s)/2-C)/e,((Z+l)/2-i)/A),!0):([m,Z,s,l,n,a]=M(this,JI).subarray(0,6),M(this,bs).push(((m+5*s)/6-C)/e,((Z+5*l)/6-i)/A,((5*s+n)/6-C)/e,((5*l+a)/6-i)/A,((s+n)/2-C)/e,((l+a)/2-i)/A),[n,a,s,l,m,Z]=M(this,JI).subarray(12,18),M(this,mA).push(((m+5*s)/6-C)/e,((Z+5*l)/6-i)/A,((5*s+n)/6-C)/e,((5*l+a)/6-i)/A,((s+n)/2-C)/e,((l+a)/2-i)/A),!0))}toSVGPath(){if(this.isEmpty())return"";const I=M(this,bs),g=M(this,mA);if(isNaN(M(this,JI)[6])&&!this.isEmpty())return eg(this,wt,Xgg).call(this);const C=[];C.push(`M${I[4]} ${I[5]}`);for(let i=6;i<I.length;i+=6)isNaN(I[i])?C.push(`L${I[i+4]} ${I[i+5]}`):C.push(`C${I[i]} ${I[i+1]} ${I[i+2]} ${I[i+3]} ${I[i+4]} ${I[i+5]}`);eg(this,wt,Dgg).call(this,C);for(let i=g.length-6;i>=6;i-=6)isNaN(g[i])?C.push(`L${g[i+4]} ${g[i+5]}`):C.push(`C${g[i]} ${g[i+1]} ${g[i+2]} ${g[i+3]} ${g[i+4]} ${g[i+5]}`);return eg(this,wt,Sgg).call(this,C),C.join(" ")}newFreeDrawOutline(I,g,C,i,e,A){return new zgg(I,g,C,i,e,A)}getOutlines(){var d;const I=M(this,bs),g=M(this,mA),C=M(this,JI),[i,e,A,s]=M(this,ne),l=new Float32Array((((d=M(this,pa))==null?void 0:d.length)??0)+2);for(let o=0,c=l.length-2;o<c;o+=2)l[o]=(M(this,pa)[o]-i)/A,l[o+1]=(M(this,pa)[o+1]-e)/s;if(l[l.length-2]=(M(this,Hc)-i)/A,l[l.length-1]=(M(this,Xc)-e)/s,isNaN(C[6])&&!this.isEmpty())return eg(this,wt,Kgg).call(this,l);const n=new Float32Array(M(this,bs).length+24+M(this,mA).length);let a=I.length;for(let o=0;o<a;o+=2){if(isNaN(I[o])){n[o]=n[o+1]=NaN;continue}n[o]=I[o],n[o+1]=I[o+1]}a=eg(this,wt,kgg).call(this,n,a);for(let o=g.length-6;o>=6;o-=6)for(let c=0;c<6;c+=2){if(isNaN(g[o+c])){n[a]=n[a+1]=NaN,a+=2;continue}n[a]=g[o+c],n[a+1]=g[o+c+1],a+=2}return eg(this,wt,Fgg).call(this,n,a),this.newFreeDrawOutline(n,l,M(this,ne),M(this,Uh),M(this,Qh),M(this,Oh))}};ne=new WeakMap,mA=new WeakMap,Qh=new WeakMap,Oh=new WeakMap,bs=new WeakMap,JI=new WeakMap,Hc=new WeakMap,Xc=new WeakMap,NZ=new WeakMap,VZ=new WeakMap,Uh=new WeakMap,Eh=new WeakMap,pa=new WeakMap,MZ=new WeakMap,RV=new WeakMap,fV=new WeakMap,wt=new WeakSet,Tu=function(){const I=M(this,JI).subarray(4,6),g=M(this,JI).subarray(16,18),[C,i,e,A]=M(this,ne);return[(M(this,Hc)+(I[0]-g[0])/2-C)/e,(M(this,Xc)+(I[1]-g[1])/2-i)/A,(M(this,Hc)+(g[0]-I[0])/2-C)/e,(M(this,Xc)+(g[1]-I[1])/2-i)/A]},Xgg=function(){const[I,g,C,i]=M(this,ne),[e,A,s,l]=eg(this,wt,Tu).call(this);return`M${(M(this,JI)[2]-I)/C} ${(M(this,JI)[3]-g)/i} L${(M(this,JI)[4]-I)/C} ${(M(this,JI)[5]-g)/i} L${e} ${A} L${s} ${l} L${(M(this,JI)[16]-I)/C} ${(M(this,JI)[17]-g)/i} L${(M(this,JI)[14]-I)/C} ${(M(this,JI)[15]-g)/i} Z`},Sgg=function(I){const g=M(this,mA);I.push(`L${g[4]} ${g[5]} Z`)},Dgg=function(I){const[g,C,i,e]=M(this,ne),A=M(this,JI).subarray(4,6),s=M(this,JI).subarray(16,18),[l,n,a,d]=eg(this,wt,Tu).call(this);I.push(`L${(A[0]-g)/i} ${(A[1]-C)/e} L${l} ${n} L${a} ${d} L${(s[0]-g)/i} ${(s[1]-C)/e}`)},Kgg=function(I){const g=M(this,JI),[C,i,e,A]=M(this,ne),[s,l,n,a]=eg(this,wt,Tu).call(this),d=new Float32Array(36);return d.set([NaN,NaN,NaN,NaN,(g[2]-C)/e,(g[3]-i)/A,NaN,NaN,NaN,NaN,(g[4]-C)/e,(g[5]-i)/A,NaN,NaN,NaN,NaN,s,l,NaN,NaN,NaN,NaN,n,a,NaN,NaN,NaN,NaN,(g[16]-C)/e,(g[17]-i)/A,NaN,NaN,NaN,NaN,(g[14]-C)/e,(g[15]-i)/A],0),this.newFreeDrawOutline(d,I,M(this,ne),M(this,Uh),M(this,Qh),M(this,Oh))},Fgg=function(I,g){const C=M(this,mA);return I.set([NaN,NaN,NaN,NaN,C[4],C[5]],g),g+=6},kgg=function(I,g){const C=M(this,JI).subarray(4,6),i=M(this,JI).subarray(16,18),[e,A,s,l]=M(this,ne),[n,a,d,o]=eg(this,wt,Tu).call(this);return I.set([NaN,NaN,NaN,NaN,(C[0]-e)/s,(C[1]-A)/l,NaN,NaN,NaN,NaN,n,a,NaN,NaN,NaN,NaN,d,o,NaN,NaN,NaN,NaN,(i[0]-e)/s,(i[1]-A)/l],g),g+=24},ig(ll,MZ,8),ig(ll,RV,2),ig(ll,fV,M(ll,MZ)+M(ll,RV));let jN=ll;var Ph,Sc,Vl,RZ,ae,fZ,It,HV,Jgg;class zgg extends _g{constructor(g,C,i,e,A,s){super();ig(this,HV);ig(this,Ph);ig(this,Sc,new Float32Array(4));ig(this,Vl);ig(this,RZ);ig(this,ae);ig(this,fZ);ig(this,It);$(this,It,g),$(this,ae,C),$(this,Ph,i),$(this,fZ,e),$(this,Vl,A),$(this,RZ,s),this.lastPoint=[NaN,NaN],eg(this,HV,Jgg).call(this,s);const[l,n,a,d]=M(this,Sc);for(let o=0,c=g.length;o<c;o+=2)g[o]=(g[o]-l)/a,g[o+1]=(g[o+1]-n)/d;for(let o=0,c=C.length;o<c;o+=2)C[o]=(C[o]-l)/a,C[o+1]=(C[o+1]-n)/d}toSVGPath(){const g=[`M${M(this,It)[4]} ${M(this,It)[5]}`];for(let C=6,i=M(this,It).length;C<i;C+=6){if(isNaN(M(this,It)[C])){g.push(`L${M(this,It)[C+4]} ${M(this,It)[C+5]}`);continue}g.push(`C${M(this,It)[C]} ${M(this,It)[C+1]} ${M(this,It)[C+2]} ${M(this,It)[C+3]} ${M(this,It)[C+4]} ${M(this,It)[C+5]}`)}return g.push("Z"),g.join(" ")}serialize([g,C,i,e],A){const s=i-g,l=e-C;let n,a;switch(A){case 0:n=_g._rescale(M(this,It),g,e,s,-l),a=_g._rescale(M(this,ae),g,e,s,-l);break;case 90:n=_g._rescaleAndSwap(M(this,It),g,C,s,l),a=_g._rescaleAndSwap(M(this,ae),g,C,s,l);break;case 180:n=_g._rescale(M(this,It),i,C,-s,l),a=_g._rescale(M(this,ae),i,C,-s,l);break;case 270:n=_g._rescaleAndSwap(M(this,It),i,e,-s,-l),a=_g._rescaleAndSwap(M(this,ae),i,e,-s,-l);break}return{outline:Array.from(n),points:[Array.from(a)]}}get box(){return M(this,Sc)}newOutliner(g,C,i,e,A,s=0){return new jN(g,C,i,e,A,s)}getNewOutline(g,C){const[i,e,A,s]=M(this,Sc),[l,n,a,d]=M(this,Ph),o=A*a,c=s*d,r=i*a+l,h=e*d+n,b=this.newOutliner({x:M(this,ae)[0]*o+r,y:M(this,ae)[1]*c+h},M(this,Ph),M(this,fZ),g,M(this,RZ),C??M(this,Vl));for(let u=2;u<M(this,ae).length;u+=2)b.add({x:M(this,ae)[u]*o+r,y:M(this,ae)[u+1]*c+h});return b.getOutlines()}}Ph=new WeakMap,Sc=new WeakMap,Vl=new WeakMap,RZ=new WeakMap,ae=new WeakMap,fZ=new WeakMap,It=new WeakMap,HV=new WeakSet,Jgg=function(g){const C=M(this,It);let i=C[4],e=C[5];const A=[i,e,i,e];let s=i,l=e;const n=g?Math.max:Math.min;for(let d=6,o=C.length;d<o;d+=6){const c=C[d+4],r=C[d+5];if(isNaN(C[d]))iI.pointBoundingBox(c,r,A),l<r?(s=c,l=r):l===r&&(s=n(s,c));else{const h=[1/0,1/0,-1/0,-1/0];iI.bezierBoundingBox(i,e,...C.slice(d,d+6),h),iI.rectBoundingBox(...h,A),l<h[3]?(s=h[2],l=h[3]):l===h[3]&&(s=n(s,h[2]))}i=c,e=r}const a=M(this,Sc);a[0]=A[0]-M(this,Vl),a[1]=A[1]-M(this,Vl),a[2]=A[2]-A[0]+2*M(this,Vl),a[3]=A[3]-A[1]+2*M(this,Vl),this.lastPoint=[s,l]};var HZ,XZ,Ba,ZA,Yi,Lgg,hN,vgg,Tgg,BS;class pS{constructor(I,g=0,C=0,i=!0){ig(this,Yi);ig(this,HZ);ig(this,XZ);ig(this,Ba,[]);ig(this,ZA,[]);const e=[1/0,1/0,-1/0,-1/0],A=10**-4;for(const{x:c,y:r,width:h,height:b}of I){const u=Math.floor((c-g)/A)*A,m=Math.ceil((c+h+g)/A)*A,Z=Math.floor((r-g)/A)*A,p=Math.ceil((r+b+g)/A)*A,Y=[u,Z,p,!0],R=[m,Z,p,!1];M(this,Ba).push(Y,R),iI.rectBoundingBox(u,Z,m,p,e)}const s=e[2]-e[0]+2*C,l=e[3]-e[1]+2*C,n=e[0]-C,a=e[1]-C,d=M(this,Ba).at(i?-1:-2),o=[d[0],d[2]];for(const c of M(this,Ba)){const[r,h,b]=c;c[0]=(r-n)/s,c[1]=(h-a)/l,c[2]=(b-a)/l}$(this,HZ,new Float32Array([n,a,s,l])),$(this,XZ,o)}getOutlines(){M(this,Ba).sort((g,C)=>g[0]-C[0]||g[1]-C[1]||g[2]-C[2]);const I=[];for(const g of M(this,Ba))g[3]?(I.push(...eg(this,Yi,BS).call(this,g)),eg(this,Yi,vgg).call(this,g)):(eg(this,Yi,Tgg).call(this,g),I.push(...eg(this,Yi,BS).call(this,g)));return eg(this,Yi,Lgg).call(this,I)}}HZ=new WeakMap,XZ=new WeakMap,Ba=new WeakMap,ZA=new WeakMap,Yi=new WeakSet,Lgg=function(I){const g=[],C=new Set;for(const A of I){const[s,l,n]=A;g.push([s,l,A],[s,n,A])}g.sort((A,s)=>A[1]-s[1]||A[0]-s[0]);for(let A=0,s=g.length;A<s;A+=2){const l=g[A][2],n=g[A+1][2];l.push(n),n.push(l),C.add(l),C.add(n)}const i=[];let e;for(;C.size>0;){const A=C.values().next().value;let[s,l,n,a,d]=A;C.delete(A);let o=s,c=l;for(e=[s,n],i.push(e);;){let r;if(C.has(a))r=a;else if(C.has(d))r=d;else break;C.delete(r),[s,l,n,a,d]=r,o!==s&&(e.push(o,c,s,c===l?l:n),o=s),c=c===l?n:l}e.push(o,c)}return new edg(i,M(this,HZ),M(this,XZ))},hN=function(I){const g=M(this,ZA);let C=0,i=g.length-1;for(;C<=i;){const e=C+i>>1,A=g[e][0];if(A===I)return e;A<I?C=e+1:i=e-1}return i+1},vgg=function([,I,g]){const C=eg(this,Yi,hN).call(this,I);M(this,ZA).splice(C,0,[I,g])},Tgg=function([,I,g]){const C=eg(this,Yi,hN).call(this,I);for(let i=C;i<M(this,ZA).length;i++){const[e,A]=M(this,ZA)[i];if(e!==I)break;if(e===I&&A===g){M(this,ZA).splice(i,1);return}}for(let i=C-1;i>=0;i--){const[e,A]=M(this,ZA)[i];if(e!==I)break;if(e===I&&A===g){M(this,ZA).splice(i,1);return}}},BS=function(I){const[g,C,i]=I,e=[[g,C,i]],A=eg(this,Yi,hN).call(this,i);for(let s=0;s<A;s++){const[l,n]=M(this,ZA)[s];for(let a=0,d=e.length;a<d;a++){const[,o,c]=e[a];if(!(n<=o||c<=l)){if(o>=l){if(c>n)e[a][1]=n;else{if(d===1)return[];e.splice(a,1),a--,d--}continue}e[a][2]=l,c>n&&e.push([g,n,c])}}}return e};var SZ,_h;class edg extends _g{constructor(g,C,i){super();ig(this,SZ);ig(this,_h);$(this,_h,g),$(this,SZ,C),this.lastPoint=i}toSVGPath(){const g=[];for(const C of M(this,_h)){let[i,e]=C;g.push(`M${i} ${e}`);for(let A=2;A<C.length;A+=2){const s=C[A],l=C[A+1];s===i?(g.push(`V${l}`),e=l):l===e&&(g.push(`H${s}`),i=s)}g.push("Z")}return g.join(" ")}serialize([g,C,i,e],A){const s=[],l=i-g,n=e-C;for(const a of M(this,_h)){const d=new Array(a.length);for(let o=0;o<a.length;o+=2)d[o]=g+a[o]*l,d[o+1]=e-a[o+1]*n;s.push(d)}return s}get box(){return M(this,SZ)}get classNamesForOutlining(){return["highlightOutline"]}}SZ=new WeakMap,_h=new WeakMap;class WS extends jN{newFreeDrawOutline(I,g,C,i,e,A){return new Adg(I,g,C,i,e,A)}}class Adg extends zgg{newOutliner(I,g,C,i,e,A=0){return new WS(I,g,C,i,e,A)}}var GA,Dc,qh,Zt,DZ,$h,KZ,FZ,Wa,wA,g0,kZ,mC,yS,YS,NS,So,xgg,Tn;const Fi=class Fi{constructor({editor:I=null,uiManager:g=null}){ig(this,mC);ig(this,GA,null);ig(this,Dc,null);ig(this,qh);ig(this,Zt,null);ig(this,DZ,!1);ig(this,$h,!1);ig(this,KZ,null);ig(this,FZ);ig(this,Wa,null);ig(this,wA,null);ig(this,g0);var C;I?($(this,$h,!1),$(this,g0,gC.HIGHLIGHT_COLOR),$(this,KZ,I)):($(this,$h,!0),$(this,g0,gC.HIGHLIGHT_DEFAULT_COLOR)),$(this,wA,(I==null?void 0:I._uiManager)||g),$(this,FZ,M(this,wA)._eventBus),$(this,qh,(I==null?void 0:I.color)||((C=M(this,wA))==null?void 0:C.highlightColors.values().next().value)||"#FFFF98"),M(Fi,kZ)||$(Fi,kZ,Object.freeze({blue:"pdfjs-editor-colorpicker-blue",green:"pdfjs-editor-colorpicker-green",pink:"pdfjs-editor-colorpicker-pink",red:"pdfjs-editor-colorpicker-red",yellow:"pdfjs-editor-colorpicker-yellow"}))}static get _keyboardManager(){return jI(this,"_keyboardManager",new EZ([[["Escape","mac+Escape"],Fi.prototype._hideDropdownFromKeyboard],[[" ","mac+ "],Fi.prototype._colorSelectFromKeyboard],[["ArrowDown","ArrowRight","mac+ArrowDown","mac+ArrowRight"],Fi.prototype._moveToNext],[["ArrowUp","ArrowLeft","mac+ArrowUp","mac+ArrowLeft"],Fi.prototype._moveToPrevious],[["Home","mac+Home"],Fi.prototype._moveToBeginning],[["End","mac+End"],Fi.prototype._moveToEnd]]))}renderButton(){const I=$(this,GA,document.createElement("button"));I.className="colorPicker",I.tabIndex="0",I.setAttribute("data-l10n-id","pdfjs-editor-colorpicker-button"),I.setAttribute("aria-haspopup",!0);const g=M(this,wA)._signal;I.addEventListener("click",eg(this,mC,So).bind(this),{signal:g}),I.addEventListener("keydown",eg(this,mC,NS).bind(this),{signal:g});const C=$(this,Dc,document.createElement("span"));return C.className="swatch",C.setAttribute("aria-hidden",!0),C.style.backgroundColor=M(this,qh),I.append(C),I}renderMainDropdown(){const I=$(this,Zt,eg(this,mC,yS).call(this));return I.setAttribute("aria-orientation","horizontal"),I.setAttribute("aria-labelledby","highlightColorPickerLabel"),I}_colorSelectFromKeyboard(I){if(I.target===M(this,GA)){eg(this,mC,So).call(this,I);return}const g=I.target.getAttribute("data-color");g&&eg(this,mC,YS).call(this,g,I)}_moveToNext(I){var g,C;if(!M(this,mC,Tn)){eg(this,mC,So).call(this,I);return}if(I.target===M(this,GA)){(g=M(this,Zt).firstChild)==null||g.focus();return}(C=I.target.nextSibling)==null||C.focus()}_moveToPrevious(I){var g,C;if(I.target===((g=M(this,Zt))==null?void 0:g.firstChild)||I.target===M(this,GA)){M(this,mC,Tn)&&this._hideDropdownFromKeyboard();return}M(this,mC,Tn)||eg(this,mC,So).call(this,I),(C=I.target.previousSibling)==null||C.focus()}_moveToBeginning(I){var g;if(!M(this,mC,Tn)){eg(this,mC,So).call(this,I);return}(g=M(this,Zt).firstChild)==null||g.focus()}_moveToEnd(I){var g;if(!M(this,mC,Tn)){eg(this,mC,So).call(this,I);return}(g=M(this,Zt).lastChild)==null||g.focus()}hideDropdown(){var I,g;(I=M(this,Zt))==null||I.classList.add("hidden"),(g=M(this,Wa))==null||g.abort(),$(this,Wa,null)}_hideDropdownFromKeyboard(){var I;if(!M(this,$h)){if(!M(this,mC,Tn)){(I=M(this,KZ))==null||I.unselect();return}this.hideDropdown(),M(this,GA).focus({preventScroll:!0,focusVisible:M(this,DZ)})}}updateColor(I){if(M(this,Dc)&&(M(this,Dc).style.backgroundColor=I),!M(this,Zt))return;const g=M(this,wA).highlightColors.values();for(const C of M(this,Zt).children)C.setAttribute("aria-selected",g.next().value===I)}destroy(){var I,g;(I=M(this,GA))==null||I.remove(),$(this,GA,null),$(this,Dc,null),(g=M(this,Zt))==null||g.remove(),$(this,Zt,null)}};GA=new WeakMap,Dc=new WeakMap,qh=new WeakMap,Zt=new WeakMap,DZ=new WeakMap,$h=new WeakMap,KZ=new WeakMap,FZ=new WeakMap,Wa=new WeakMap,wA=new WeakMap,g0=new WeakMap,kZ=new WeakMap,mC=new WeakSet,yS=function(){const I=document.createElement("div"),g=M(this,wA)._signal;I.addEventListener("contextmenu",MA,{signal:g}),I.className="dropdown",I.role="listbox",I.setAttribute("aria-multiselectable",!1),I.setAttribute("aria-orientation","vertical"),I.setAttribute("data-l10n-id","pdfjs-editor-colorpicker-dropdown");for(const[C,i]of M(this,wA).highlightColors){const e=document.createElement("button");e.tabIndex="0",e.role="option",e.setAttribute("data-color",i),e.title=C,e.setAttribute("data-l10n-id",M(Fi,kZ)[C]);const A=document.createElement("span");e.append(A),A.className="swatch",A.style.backgroundColor=i,e.setAttribute("aria-selected",i===M(this,qh)),e.addEventListener("click",eg(this,mC,YS).bind(this,i),{signal:g}),I.append(e)}return I.addEventListener("keydown",eg(this,mC,NS).bind(this),{signal:g}),I},YS=function(I,g){g.stopPropagation(),M(this,FZ).dispatch("switchannotationeditorparams",{source:this,type:M(this,g0),value:I})},NS=function(I){Fi._keyboardManager.exec(this,I)},So=function(I){if(M(this,mC,Tn)){this.hideDropdown();return}if($(this,DZ,I.detail===0),M(this,Wa)||($(this,Wa,new AbortController),window.addEventListener("pointerdown",eg(this,mC,xgg).bind(this),{signal:M(this,wA).combinedSignal(M(this,Wa))})),M(this,Zt)){M(this,Zt).classList.remove("hidden");return}const g=$(this,Zt,eg(this,mC,yS).call(this));M(this,GA).append(g)},xgg=function(I){var g;(g=M(this,Zt))!=null&&g.contains(I.target)||this.hideDropdown()},Tn=function(){return M(this,Zt)&&!M(this,Zt).classList.contains("hidden")},ig(Fi,kZ,null);let QN=Fi;var I0,zZ,Ml,Kc,C0,Ji,JZ,LZ,Fc,Je,oe,jt,t0,Rl,di,i0,Le,vZ,DI,VS,bN,jgg,Qgg,Ogg,MS,Do,Oe,vr,Ugg,uN,xu,Egg,Pgg,_gg,qgg,$gg;const lC=class lC extends zC{constructor(g){super({...g,name:"highlightEditor"});ig(this,DI);ig(this,I0,null);ig(this,zZ,0);ig(this,Ml);ig(this,Kc,null);ig(this,C0,null);ig(this,Ji,null);ig(this,JZ,null);ig(this,LZ,0);ig(this,Fc,null);ig(this,Je,null);ig(this,oe,null);ig(this,jt,!1);ig(this,t0,null);ig(this,Rl);ig(this,di,null);ig(this,i0,"");ig(this,Le);ig(this,vZ,"");this.color=g.color||lC._defaultColor,$(this,Le,g.thickness||lC._defaultThickness),$(this,Rl,g.opacity||lC._defaultOpacity),$(this,Ml,g.boxes||null),$(this,vZ,g.methodOfCreation||""),$(this,i0,g.text||""),this._isDraggable=!1,this.defaultL10nId="pdfjs-editor-highlight-editor",g.highlightId>-1?($(this,jt,!0),eg(this,DI,bN).call(this,g),eg(this,DI,Do).call(this)):M(this,Ml)&&($(this,I0,g.anchorNode),$(this,zZ,g.anchorOffset),$(this,JZ,g.focusNode),$(this,LZ,g.focusOffset),eg(this,DI,VS).call(this),eg(this,DI,Do).call(this),this.rotate(this.rotation))}static get _keyboardManager(){const g=lC.prototype;return jI(this,"_keyboardManager",new EZ([[["ArrowLeft","mac+ArrowLeft"],g._moveCaret,{args:[0]}],[["ArrowRight","mac+ArrowRight"],g._moveCaret,{args:[1]}],[["ArrowUp","mac+ArrowUp"],g._moveCaret,{args:[2]}],[["ArrowDown","mac+ArrowDown"],g._moveCaret,{args:[3]}]]))}get telemetryInitialData(){return{action:"added",type:M(this,jt)?"free_highlight":"highlight",color:this._uiManager.highlightColorNames.get(this.color),thickness:M(this,Le),methodOfCreation:M(this,vZ)}}get telemetryFinalData(){return{type:"highlight",color:this._uiManager.highlightColorNames.get(this.color)}}static computeTelemetryFinalData(g){return{numberOfColors:g.get("color").size}}static initialize(g,C){var i;zC.initialize(g,C),lC._defaultColor||(lC._defaultColor=((i=C.highlightColors)==null?void 0:i.values().next().value)||"#fff066")}static updateDefaultParams(g,C){switch(g){case gC.HIGHLIGHT_DEFAULT_COLOR:lC._defaultColor=C;break;case gC.HIGHLIGHT_THICKNESS:lC._defaultThickness=C;break}}translateInPage(g,C){}get toolbarPosition(){return M(this,t0)}updateParams(g,C){switch(g){case gC.HIGHLIGHT_COLOR:eg(this,DI,jgg).call(this,C);break;case gC.HIGHLIGHT_THICKNESS:eg(this,DI,Qgg).call(this,C);break}}static get defaultPropertiesToUpdate(){return[[gC.HIGHLIGHT_DEFAULT_COLOR,lC._defaultColor],[gC.HIGHLIGHT_THICKNESS,lC._defaultThickness]]}get propertiesToUpdate(){return[[gC.HIGHLIGHT_COLOR,this.color||lC._defaultColor],[gC.HIGHLIGHT_THICKNESS,M(this,Le)||lC._defaultThickness],[gC.HIGHLIGHT_FREE,M(this,jt)]]}async addEditToolbar(){const g=await super.addEditToolbar();return g?(this._uiManager.highlightColors&&($(this,C0,new QN({editor:this})),g.addColorPicker(M(this,C0))),g):null}disableEditing(){super.disableEditing(),this.div.classList.toggle("disabled",!0)}enableEditing(){super.enableEditing(),this.div.classList.toggle("disabled",!1)}fixAndSetPosition(){return super.fixAndSetPosition(eg(this,DI,xu).call(this))}getBaseTranslation(){return[0,0]}getRect(g,C){return super.getRect(g,C,eg(this,DI,xu).call(this))}onceAdded(g){this.annotationElementId||this.parent.addUndoableEditor(this),g&&this.div.focus()}remove(){eg(this,DI,MS).call(this),this._reportTelemetry({action:"deleted"}),super.remove()}rebuild(){this.parent&&(super.rebuild(),this.div!==null&&(eg(this,DI,Do).call(this),this.isAttachedToDOM||this.parent.add(this)))}setParent(g){var i;let C=!1;this.parent&&!g?eg(this,DI,MS).call(this):g&&(eg(this,DI,Do).call(this,g),C=!this.parent&&((i=this.div)==null?void 0:i.classList.contains("selectedEditor"))),super.setParent(g),this.show(this._isVisible),C&&this.select()}rotate(g){var e,A,s;const{drawLayer:C}=this.parent;let i;M(this,jt)?(g=(g-this.rotation+360)%360,i=eg(e=lC,Oe,vr).call(e,M(this,Je).box,g)):i=eg(A=lC,Oe,vr).call(A,[this.x,this.y,this.width,this.height],g),C.updateProperties(M(this,oe),{bbox:i,root:{"data-main-rotation":g}}),C.updateProperties(M(this,di),{bbox:eg(s=lC,Oe,vr).call(s,M(this,Ji).box,g),root:{"data-main-rotation":g}})}render(){if(this.div)return this.div;const g=super.render();M(this,i0)&&(g.setAttribute("aria-label",M(this,i0)),g.setAttribute("role","mark")),M(this,jt)?g.classList.add("free"):this.div.addEventListener("keydown",eg(this,DI,Ugg).bind(this),{signal:this._uiManager._signal});const C=$(this,Fc,document.createElement("div"));g.append(C),C.setAttribute("aria-hidden","true"),C.className="internal",C.style.clipPath=M(this,Kc);const[i,e]=this.parentDimensions;return this.setDims(this.width*i,this.height*e),C9(this,M(this,Fc),["pointerover","pointerleave"]),this.enableEditing(),g}pointerover(){var g;this.isSelected||(g=this.parent)==null||g.drawLayer.updateProperties(M(this,di),{rootClass:{hovered:!0}})}pointerleave(){var g;this.isSelected||(g=this.parent)==null||g.drawLayer.updateProperties(M(this,di),{rootClass:{hovered:!1}})}_moveCaret(g){switch(this.parent.unselect(this),g){case 0:case 2:eg(this,DI,uN).call(this,!0);break;case 1:case 3:eg(this,DI,uN).call(this,!1);break}}select(){var g;super.select(),M(this,di)&&((g=this.parent)==null||g.drawLayer.updateProperties(M(this,di),{rootClass:{hovered:!1,selected:!0}}))}unselect(){var g;super.unselect(),M(this,di)&&((g=this.parent)==null||g.drawLayer.updateProperties(M(this,di),{rootClass:{selected:!1}}),M(this,jt)||eg(this,DI,uN).call(this,!1))}get _mustFixPosition(){return!M(this,jt)}show(g=this._isVisible){super.show(g),this.parent&&(this.parent.drawLayer.updateProperties(M(this,oe),{rootClass:{hidden:!g}}),this.parent.drawLayer.updateProperties(M(this,di),{rootClass:{hidden:!g}}))}static startHighlighting(g,C,{target:i,x:e,y:A}){const{x:s,y:l,width:n,height:a}=i.getBoundingClientRect(),d=new AbortController,o=g.combinedSignal(d),c=r=>{d.abort(),eg(this,Oe,qgg).call(this,g,r)};window.addEventListener("blur",c,{signal:o}),window.addEventListener("pointerup",c,{signal:o}),window.addEventListener("pointerdown",at,{capture:!0,passive:!1,signal:o}),window.addEventListener("contextmenu",MA,{signal:o}),i.addEventListener("pointermove",eg(this,Oe,_gg).bind(this,g),{signal:o}),this._freeHighlight=new WS({x:e,y:A},[s,l,n,a],g.scale,this._defaultThickness/2,C,.001),{id:this._freeHighlightId,clipPathId:this._freeHighlightClipId}=g.drawLayer.draw({bbox:[0,0,1,1],root:{viewBox:"0 0 1 1",fill:this._defaultColor,"fill-opacity":this._defaultOpacity},rootClass:{highlight:!0,free:!0},path:{d:this._freeHighlight.toSVGPath()}},!0,!0)}static async deserialize(g,C,i){var h,b,u,m;let e=null;if(g instanceof Ygg){const{data:{quadPoints:Z,rect:p,rotation:Y,id:R,color:X,opacity:H,popupRef:S},parent:{page:{pageNumber:z}}}=g;e=g={annotationType:RI.HIGHLIGHT,color:Array.from(X),opacity:H,quadPoints:Z,boxes:null,pageIndex:z-1,rect:p.slice(0),rotation:Y,id:R,deleted:!1,popupRef:S}}else if(g instanceof A9){const{data:{inkLists:Z,rect:p,rotation:Y,id:R,color:X,borderStyle:{rawWidth:H},popupRef:S},parent:{page:{pageNumber:z}}}=g;e=g={annotationType:RI.HIGHLIGHT,color:Array.from(X),thickness:H,inkLists:Z,boxes:null,pageIndex:z-1,rect:p.slice(0),rotation:Y,id:R,deleted:!1,popupRef:S}}const{color:A,quadPoints:s,inkLists:l,opacity:n}=g,a=await super.deserialize(g,C,i);a.color=iI.makeHexColor(...A),$(a,Rl,n||1),l&&$(a,Le,g.thickness),a.annotationElementId=g.id||null,a._initialData=e;const[d,o]=a.pageDimensions,[c,r]=a.pageTranslation;if(s){const Z=$(a,Ml,[]);for(let p=0;p<s.length;p+=8)Z.push({x:(s[p]-c)/d,y:1-(s[p+1]-r)/o,width:(s[p+2]-s[p])/d,height:(s[p+1]-s[p+5])/o});eg(h=a,DI,VS).call(h),eg(b=a,DI,Do).call(b),a.rotate(a.rotation)}else if(l){$(a,jt,!0);const Z=l[0],p={x:Z[0]-c,y:o-(Z[1]-r)},Y=new WS(p,[0,0,d,o],1,M(a,Le)/2,!0,.001);for(let H=0,S=Z.length;H<S;H+=2)p.x=Z[H]-c,p.y=o-(Z[H+1]-r),Y.add(p);const{id:R,clipPathId:X}=C.drawLayer.draw({bbox:[0,0,1,1],root:{viewBox:"0 0 1 1",fill:a.color,"fill-opacity":a._defaultOpacity},rootClass:{highlight:!0,free:!0},path:{d:Y.toSVGPath()}},!0,!0);eg(u=a,DI,bN).call(u,{highlightOutlines:Y.getOutlines(),highlightId:R,clipPathId:X}),eg(m=a,DI,Do).call(m),a.rotate(a.parentRotation)}return a}serialize(g=!1){if(this.isEmpty()||g)return null;if(this.deleted)return this.serializeDeleted();const C=this.getRect(0,0),i=zC._colorManager.convert(this.color),e={annotationType:RI.HIGHLIGHT,color:i,opacity:M(this,Rl),thickness:M(this,Le),quadPoints:eg(this,DI,Egg).call(this),outlines:eg(this,DI,Pgg).call(this,C),pageIndex:this.pageIndex,rect:C,rotation:eg(this,DI,xu).call(this),structTreeParentId:this._structTreeParentId};return this.annotationElementId&&!eg(this,DI,$gg).call(this,e)?null:(e.id=this.annotationElementId,e)}renderAnnotationElement(g){return g.updateEdited({rect:this.getRect(0,0)}),null}static canCreateNewEmptyEditor(){return!1}};I0=new WeakMap,zZ=new WeakMap,Ml=new WeakMap,Kc=new WeakMap,C0=new WeakMap,Ji=new WeakMap,JZ=new WeakMap,LZ=new WeakMap,Fc=new WeakMap,Je=new WeakMap,oe=new WeakMap,jt=new WeakMap,t0=new WeakMap,Rl=new WeakMap,di=new WeakMap,i0=new WeakMap,Le=new WeakMap,vZ=new WeakMap,DI=new WeakSet,VS=function(){const g=new pS(M(this,Ml),.001);$(this,Je,g.getOutlines()),[this.x,this.y,this.width,this.height]=M(this,Je).box;const C=new pS(M(this,Ml),.0025,.001,this._uiManager.direction==="ltr");$(this,Ji,C.getOutlines());const{lastPoint:i}=M(this,Ji);$(this,t0,[(i[0]-this.x)/this.width,(i[1]-this.y)/this.height])},bN=function({highlightOutlines:g,highlightId:C,clipPathId:i}){var d,o;if($(this,Je,g),$(this,Ji,g.getNewOutline(M(this,Le)/2+1.5,.0025)),C>=0)$(this,oe,C),$(this,Kc,i),this.parent.drawLayer.finalizeDraw(C,{bbox:g.box,path:{d:g.toSVGPath()}}),$(this,di,this.parent.drawLayer.drawOutline({rootClass:{highlightOutline:!0,free:!0},bbox:M(this,Ji).box,path:{d:M(this,Ji).toSVGPath()}},!0));else if(this.parent){const c=this.parent.viewport.rotation;this.parent.drawLayer.updateProperties(M(this,oe),{bbox:eg(d=lC,Oe,vr).call(d,M(this,Je).box,(c-this.rotation+360)%360),path:{d:g.toSVGPath()}}),this.parent.drawLayer.updateProperties(M(this,di),{bbox:eg(o=lC,Oe,vr).call(o,M(this,Ji).box,c),path:{d:M(this,Ji).toSVGPath()}})}const[A,s,l,n]=g.box;switch(this.rotation){case 0:this.x=A,this.y=s,this.width=l,this.height=n;break;case 90:{const[c,r]=this.parentDimensions;this.x=s,this.y=1-A,this.width=l*r/c,this.height=n*c/r;break}case 180:this.x=1-A,this.y=1-s,this.width=l,this.height=n;break;case 270:{const[c,r]=this.parentDimensions;this.x=1-s,this.y=A,this.width=l*r/c,this.height=n*c/r;break}}const{lastPoint:a}=M(this,Ji);$(this,t0,[(a[0]-A)/l,(a[1]-s)/n])},jgg=function(g){const C=(A,s)=>{var l,n;this.color=A,$(this,Rl,s),(l=this.parent)==null||l.drawLayer.updateProperties(M(this,oe),{root:{fill:A,"fill-opacity":s}}),(n=M(this,C0))==null||n.updateColor(A)},i=this.color,e=M(this,Rl);this.addCommands({cmd:C.bind(this,g,lC._defaultOpacity),undo:C.bind(this,i,e),post:this._uiManager.updateUI.bind(this._uiManager,this),mustExec:!0,type:gC.HIGHLIGHT_COLOR,overwriteIfSameType:!0,keepUndo:!0}),this._reportTelemetry({action:"color_changed",color:this._uiManager.highlightColorNames.get(g)},!0)},Qgg=function(g){const C=M(this,Le),i=e=>{$(this,Le,e),eg(this,DI,Ogg).call(this,e)};this.addCommands({cmd:i.bind(this,g),undo:i.bind(this,C),post:this._uiManager.updateUI.bind(this._uiManager,this),mustExec:!0,type:gC.INK_THICKNESS,overwriteIfSameType:!0,keepUndo:!0}),this._reportTelemetry({action:"thickness_changed",thickness:g},!0)},Ogg=function(g){if(!M(this,jt))return;eg(this,DI,bN).call(this,{highlightOutlines:M(this,Je).getNewOutline(g/2)}),this.fixAndSetPosition();const[C,i]=this.parentDimensions;this.setDims(this.width*C,this.height*i)},MS=function(){M(this,oe)===null||!this.parent||(this.parent.drawLayer.remove(M(this,oe)),$(this,oe,null),this.parent.drawLayer.remove(M(this,di)),$(this,di,null))},Do=function(g=this.parent){M(this,oe)===null&&({id:ui(this,oe)._,clipPathId:ui(this,Kc)._}=g.drawLayer.draw({bbox:M(this,Je).box,root:{viewBox:"0 0 1 1",fill:this.color,"fill-opacity":M(this,Rl)},rootClass:{highlight:!0,free:M(this,jt)},path:{d:M(this,Je).toSVGPath()}},!1,!0),$(this,di,g.drawLayer.drawOutline({rootClass:{highlightOutline:!0,free:M(this,jt)},bbox:M(this,Ji).box,path:{d:M(this,Ji).toSVGPath()}},M(this,jt))),M(this,Fc)&&(M(this,Fc).style.clipPath=M(this,Kc)))},Oe=new WeakSet,vr=function([g,C,i,e],A){switch(A){case 90:return[1-C-e,g,e,i];case 180:return[1-g-i,1-C-e,i,e];case 270:return[C,1-g-i,e,i]}return[g,C,i,e]},Ugg=function(g){lC._keyboardManager.exec(this,g)},uN=function(g){if(!M(this,I0))return;const C=window.getSelection();g?C.setPosition(M(this,I0),M(this,zZ)):C.setPosition(M(this,JZ),M(this,LZ))},xu=function(){return M(this,jt)?this.rotation:0},Egg=function(){if(M(this,jt))return null;const[g,C]=this.pageDimensions,[i,e]=this.pageTranslation,A=M(this,Ml),s=new Float32Array(A.length*8);let l=0;for(const{x:n,y:a,width:d,height:o}of A){const c=n*g+i,r=(1-a)*C+e;s[l]=s[l+4]=c,s[l+1]=s[l+3]=r,s[l+2]=s[l+6]=c+d*g,s[l+5]=s[l+7]=r-o*C,l+=8}return s},Pgg=function(g){return M(this,Je).serialize(g,eg(this,DI,xu).call(this))},_gg=function(g,C){this._freeHighlight.add(C)&&g.drawLayer.updateProperties(this._freeHighlightId,{path:{d:this._freeHighlight.toSVGPath()}})},qgg=function(g,C){this._freeHighlight.isEmpty()?g.drawLayer.remove(this._freeHighlightId):g.createAndAddNewEditor(C,!1,{highlightId:this._freeHighlightId,highlightOutlines:this._freeHighlight.getOutlines(),clipPathId:this._freeHighlightClipId,methodOfCreation:"main_toolbar"}),this._freeHighlightId=-1,this._freeHighlight=null,this._freeHighlightClipId=""},$gg=function(g){const{color:C}=this._initialData;return g.color.some((i,e)=>i!==C[e])},ig(lC,Oe),CI(lC,"_defaultColor",null),CI(lC,"_defaultOpacity",1),CI(lC,"_defaultThickness",12),CI(lC,"_type","highlight"),CI(lC,"_editorType",RI.HIGHLIGHT),CI(lC,"_freeHighlightId",-1),CI(lC,"_freeHighlight",null),CI(lC,"_freeHighlightClipId","");let ON=lC;var kc;class gIg{constructor(){ig(this,kc,Object.create(null))}updateProperty(I,g){this[I]=g,this.updateSVGProperty(I,g)}updateProperties(I){if(I)for(const[g,C]of Object.entries(I))g.startsWith("_")||this.updateProperty(g,C)}updateSVGProperty(I,g){M(this,kc)[I]=g}toSVGProperties(){const I=M(this,kc);return $(this,kc,Object.create(null)),{root:I}}reset(){$(this,kc,Object.create(null))}updateAll(I=this){this.updateProperties(I)}clone(){ZC("Not implemented")}}kc=new WeakMap;var ce,e0,ft,zc,Jc,ya,Ya,Na,Lc,tC,RS,fS,HS,ju,IIg,mN,Qu,Tr;const $g=class $g extends zC{constructor(g){super(g);ig(this,tC);ig(this,ce,null);ig(this,e0);CI(this,"_drawId",null);$(this,e0,g.mustBeCommitted||!1),this._addOutlines(g)}_addOutlines(g){g.drawOutlines&&(eg(this,tC,RS).call(this,g),eg(this,tC,ju).call(this))}static _mergeSVGProperties(g,C){const i=new Set(Object.keys(g));for(const[e,A]of Object.entries(C))i.has(e)?Object.assign(g[e],A):g[e]=A;return g}static getDefaultDrawingOptions(g){ZC("Not implemented")}static get typesMap(){ZC("Not implemented")}static get isDrawer(){return!0}static get supportMultipleDrawings(){return!1}static updateDefaultParams(g,C){const i=this.typesMap.get(g);i&&this._defaultDrawingOptions.updateProperty(i,C),this._currentParent&&(M($g,ft).updateProperty(i,C),this._currentParent.drawLayer.updateProperties(this._currentDrawId,this._defaultDrawingOptions.toSVGProperties()))}updateParams(g,C){const i=this.constructor.typesMap.get(g);i&&this._updateProperty(g,i,C)}static get defaultPropertiesToUpdate(){const g=[],C=this._defaultDrawingOptions;for(const[i,e]of this.typesMap)g.push([i,C[e]]);return g}get propertiesToUpdate(){const g=[],{_drawingOptions:C}=this;for(const[i,e]of this.constructor.typesMap)g.push([i,C[e]]);return g}_updateProperty(g,C,i){const e=this._drawingOptions,A=e[C],s=l=>{var a;e.updateProperty(C,l);const n=M(this,ce).updateProperty(C,l);n&&eg(this,tC,Qu).call(this,n),(a=this.parent)==null||a.drawLayer.updateProperties(this._drawId,e.toSVGProperties())};this.addCommands({cmd:s.bind(this,i),undo:s.bind(this,A),post:this._uiManager.updateUI.bind(this._uiManager,this),mustExec:!0,type:g,overwriteIfSameType:!0,keepUndo:!0})}_onResizing(){var g;(g=this.parent)==null||g.drawLayer.updateProperties(this._drawId,$g._mergeSVGProperties(M(this,ce).getPathResizingSVGProperties(eg(this,tC,mN).call(this)),{bbox:eg(this,tC,Tr).call(this)}))}_onResized(){var g;(g=this.parent)==null||g.drawLayer.updateProperties(this._drawId,$g._mergeSVGProperties(M(this,ce).getPathResizedSVGProperties(eg(this,tC,mN).call(this)),{bbox:eg(this,tC,Tr).call(this)}))}_onTranslating(g,C){var i;(i=this.parent)==null||i.drawLayer.updateProperties(this._drawId,{bbox:eg(this,tC,Tr).call(this)})}_onTranslated(){var g;(g=this.parent)==null||g.drawLayer.updateProperties(this._drawId,$g._mergeSVGProperties(M(this,ce).getPathTranslatedSVGProperties(eg(this,tC,mN).call(this),this.parentDimensions),{bbox:eg(this,tC,Tr).call(this)}))}_onStartDragging(){var g;(g=this.parent)==null||g.drawLayer.updateProperties(this._drawId,{rootClass:{moving:!0}})}_onStopDragging(){var g;(g=this.parent)==null||g.drawLayer.updateProperties(this._drawId,{rootClass:{moving:!1}})}commit(){super.commit(),this.disableEditMode(),this.disableEditing()}disableEditing(){super.disableEditing(),this.div.classList.toggle("disabled",!0)}enableEditing(){super.enableEditing(),this.div.classList.toggle("disabled",!1)}getBaseTranslation(){return[0,0]}get isResizable(){return!0}onceAdded(g){this.annotationElementId||this.parent.addUndoableEditor(this),this._isDraggable=!0,M(this,e0)&&($(this,e0,!1),this.commit(),this.parent.setSelected(this),g&&this.isOnScreen&&this.div.focus())}remove(){eg(this,tC,HS).call(this),super.remove()}rebuild(){this.parent&&(super.rebuild(),this.div!==null&&(eg(this,tC,ju).call(this),eg(this,tC,Qu).call(this,M(this,ce).box),this.isAttachedToDOM||this.parent.add(this)))}setParent(g){var i;let C=!1;this.parent&&!g?(this._uiManager.removeShouldRescale(this),eg(this,tC,HS).call(this)):g&&(this._uiManager.addShouldRescale(this),eg(this,tC,ju).call(this,g),C=!this.parent&&((i=this.div)==null?void 0:i.classList.contains("selectedEditor"))),super.setParent(g),C&&this.select()}rotate(){this.parent&&this.parent.drawLayer.updateProperties(this._drawId,$g._mergeSVGProperties({bbox:eg(this,tC,Tr).call(this)},M(this,ce).updateRotation((this.parentRotation-this.rotation+360)%360)))}onScaleChanging(){this.parent&&eg(this,tC,Qu).call(this,M(this,ce).updateParentDimensions(this.parentDimensions,this.parent.scale))}static onScaleChangingWhenDrawing(){}render(){if(this.div)return this.div;let g,C;this._isCopy&&(g=this.x,C=this.y);const i=super.render();i.classList.add("draw");const e=document.createElement("div");i.append(e),e.setAttribute("aria-hidden","true"),e.className="internal";const[A,s]=this.parentDimensions;return this.setDims(this.width*A,this.height*s),this._uiManager.addShouldRescale(this),this.disableEditing(),this._isCopy&&this._moveAfterPaste(g,C),i}static createDrawerInstance(g,C,i,e,A){ZC("Not implemented")}static startDrawing(g,C,i,e){var b;const{target:A,offsetX:s,offsetY:l,pointerId:n,pointerType:a}=e;if(M($g,Ya)&&M($g,Ya)!==a)return;const{viewport:{rotation:d}}=g,{width:o,height:c}=A.getBoundingClientRect(),r=$($g,zc,new AbortController),h=g.combinedSignal(r);if(M($g,ya)||$($g,ya,n),M($g,Ya)??$($g,Ya,a),window.addEventListener("pointerup",u=>{var m;M($g,ya)===u.pointerId?this._endDraw(u):(m=M($g,Na))==null||m.delete(u.pointerId)},{signal:h}),window.addEventListener("pointercancel",u=>{var m;M($g,ya)===u.pointerId?this._currentParent.endDrawingSession():(m=M($g,Na))==null||m.delete(u.pointerId)},{signal:h}),window.addEventListener("pointerdown",u=>{M($g,Ya)===u.pointerType&&((M($g,Na)||$($g,Na,new Set)).add(u.pointerId),M($g,ft).isCancellable()&&(M($g,ft).removeLastElement(),M($g,ft).isEmpty()?this._currentParent.endDrawingSession(!0):this._endDraw(null)))},{capture:!0,passive:!1,signal:h}),window.addEventListener("contextmenu",MA,{signal:h}),A.addEventListener("pointermove",this._drawMove.bind(this),{signal:h}),A.addEventListener("touchmove",u=>{u.timeStamp===M($g,Lc)&&at(u)},{signal:h}),g.toggleDrawing(),(b=C._editorUndoBar)==null||b.hide(),M($g,ft)){g.drawLayer.updateProperties(this._currentDrawId,M($g,ft).startNew(s,l,o,c,d));return}C.updateUIForDefaultProperties(this),$($g,ft,this.createDrawerInstance(s,l,o,c,d)),$($g,Jc,this.getDefaultDrawingOptions()),this._currentParent=g,{id:this._currentDrawId}=g.drawLayer.draw(this._mergeSVGProperties(M($g,Jc).toSVGProperties(),M($g,ft).defaultSVGProperties),!0,!1)}static _drawMove(g){var A;if($($g,Lc,-1),!M($g,ft))return;const{offsetX:C,offsetY:i,pointerId:e}=g;if(M($g,ya)===e){if(((A=M($g,Na))==null?void 0:A.size)>=1){this._endDraw(g);return}this._currentParent.drawLayer.updateProperties(this._currentDrawId,M($g,ft).add(C,i)),$($g,Lc,g.timeStamp),at(g)}}static _cleanup(g){g&&(this._currentDrawId=-1,this._currentParent=null,$($g,ft,null),$($g,Jc,null),$($g,Ya,null),$($g,Lc,NaN)),M($g,zc)&&(M($g,zc).abort(),$($g,zc,null),$($g,ya,NaN),$($g,Na,null))}static _endDraw(g){const C=this._currentParent;if(C){if(C.toggleDrawing(!0),this._cleanup(!1),(g==null?void 0:g.target)===C.div&&C.drawLayer.updateProperties(this._currentDrawId,M($g,ft).end(g.offsetX,g.offsetY)),this.supportMultipleDrawings){const i=M($g,ft),e=this._currentDrawId,A=i.getLastElement();C.addCommands({cmd:()=>{C.drawLayer.updateProperties(e,i.setLastElement(A))},undo:()=>{C.drawLayer.updateProperties(e,i.removeLastElement())},mustExec:!1,type:gC.DRAW_STEP});return}this.endDrawing(!1)}}static endDrawing(g){const C=this._currentParent;if(!C)return null;if(C.toggleDrawing(!0),C.cleanUndoStack(gC.DRAW_STEP),!M($g,ft).isEmpty()){const{pageDimensions:[i,e],scale:A}=C,s=C.createAndAddNewEditor({offsetX:0,offsetY:0},!1,{drawId:this._currentDrawId,drawOutlines:M($g,ft).getOutlines(i*A,e*A,A,this._INNER_MARGIN),drawingOptions:M($g,Jc),mustBeCommitted:!g});return this._cleanup(!0),s}return C.drawLayer.remove(this._currentDrawId),this._cleanup(!0),null}createDrawingOptions(g){}static deserializeDraw(g,C,i,e,A,s){ZC("Not implemented")}static async deserialize(g,C,i){var d,o;const{rawDims:{pageWidth:e,pageHeight:A,pageX:s,pageY:l}}=C.viewport,n=this.deserializeDraw(s,l,e,A,this._INNER_MARGIN,g),a=await super.deserialize(g,C,i);return a.createDrawingOptions(g),eg(d=a,tC,RS).call(d,{drawOutlines:n}),eg(o=a,tC,ju).call(o),a.onScaleChanging(),a.rotate(),a}serializeDraw(g){const[C,i]=this.pageTranslation,[e,A]=this.pageDimensions;return M(this,ce).serialize([C,i,e,A],g)}renderAnnotationElement(g){return g.updateEdited({rect:this.getRect(0,0)}),null}static canCreateNewEmptyEditor(){return!1}};ce=new WeakMap,e0=new WeakMap,ft=new WeakMap,zc=new WeakMap,Jc=new WeakMap,ya=new WeakMap,Ya=new WeakMap,Na=new WeakMap,Lc=new WeakMap,tC=new WeakSet,RS=function({drawOutlines:g,drawId:C,drawingOptions:i}){$(this,ce,g),this._drawingOptions||(this._drawingOptions=i),C>=0?(this._drawId=C,this.parent.drawLayer.finalizeDraw(C,g.defaultProperties)):this._drawId=eg(this,tC,fS).call(this,g,this.parent),eg(this,tC,Qu).call(this,g.box)},fS=function(g,C){const{id:i}=C.drawLayer.draw($g._mergeSVGProperties(this._drawingOptions.toSVGProperties(),g.defaultSVGProperties),!1,!1);return i},HS=function(){this._drawId===null||!this.parent||(this.parent.drawLayer.remove(this._drawId),this._drawId=null,this._drawingOptions.reset())},ju=function(g=this.parent){if(!(this._drawId!==null&&this.parent===g)){if(this._drawId!==null){this.parent.drawLayer.updateParent(this._drawId,g.drawLayer);return}this._drawingOptions.updateAll(),this._drawId=eg(this,tC,fS).call(this,M(this,ce),g)}},IIg=function([g,C,i,e]){const{parentDimensions:[A,s],rotation:l}=this;switch(l){case 90:return[C,1-g,i*(s/A),e*(A/s)];case 180:return[1-g,1-C,i,e];case 270:return[1-C,g,i*(s/A),e*(A/s)];default:return[g,C,i,e]}},mN=function(){const{x:g,y:C,width:i,height:e,parentDimensions:[A,s],rotation:l}=this;switch(l){case 90:return[1-C,g,i*(A/s),e*(s/A)];case 180:return[1-g,1-C,i,e];case 270:return[C,1-g,i*(A/s),e*(s/A)];default:return[g,C,i,e]}},Qu=function(g){if([this.x,this.y,this.width,this.height]=eg(this,tC,IIg).call(this,g),this.div){this.fixAndSetPosition();const[C,i]=this.parentDimensions;this.setDims(this.width*C,this.height*i)}this._onResized()},Tr=function(){const{x:g,y:C,width:i,height:e,rotation:A,parentRotation:s,parentDimensions:[l,n]}=this;switch((A*4+s)/90){case 1:return[1-C-e,g,e,i];case 2:return[1-g-i,1-C-e,i,e];case 3:return[C,1-g-i,e,i];case 4:return[g,C-i*(l/n),e*(n/l),i*(l/n)];case 5:return[1-C,g,i*(l/n),e*(n/l)];case 6:return[1-g-e*(n/l),1-C,e*(n/l),i*(l/n)];case 7:return[C-i*(l/n),1-g-e*(n/l),i*(l/n),e*(n/l)];case 8:return[g-i,C-e,i,e];case 9:return[1-C,g-i,e,i];case 10:return[1-g,1-C,i,e];case 11:return[C-e,1-g,e,i];case 12:return[g-e*(n/l),C,e*(n/l),i*(l/n)];case 13:return[1-C-i*(l/n),g-e*(n/l),i*(l/n),e*(n/l)];case 14:return[1-g,1-C-i*(l/n),e*(n/l),i*(l/n)];case 15:return[C,1-g,i*(l/n),e*(n/l)];default:return[g,C,i,e]}},CI($g,"_currentDrawId",-1),CI($g,"_currentParent",null),ig($g,ft,null),ig($g,zc,null),ig($g,Jc,null),ig($g,ya,NaN),ig($g,Ya,null),ig($g,Na,null),ig($g,Lc,NaN),CI($g,"_INNER_MARGIN",3);let UN=$g;var us,Ht,Xt,vc,A0,wi,Qt,ve,Tc,xc,jc,s0,ZN;class sdg{constructor(I,g,C,i,e,A){ig(this,s0);ig(this,us,new Float64Array(6));ig(this,Ht);ig(this,Xt);ig(this,vc);ig(this,A0);ig(this,wi);ig(this,Qt,"");ig(this,ve,0);ig(this,Tc,new qZ);ig(this,xc);ig(this,jc);$(this,xc,C),$(this,jc,i),$(this,vc,e),$(this,A0,A),[I,g]=eg(this,s0,ZN).call(this,I,g);const s=$(this,Ht,[NaN,NaN,NaN,NaN,I,g]);$(this,wi,[I,g]),$(this,Xt,[{line:s,points:M(this,wi)}]),M(this,us).set(s,0)}updateProperty(I,g){I==="stroke-width"&&$(this,A0,g)}isEmpty(){return!M(this,Xt)||M(this,Xt).length===0}isCancellable(){return M(this,wi).length<=10}add(I,g){[I,g]=eg(this,s0,ZN).call(this,I,g);const[C,i,e,A]=M(this,us).subarray(2,6),s=I-e,l=g-A;return Math.hypot(M(this,xc)*s,M(this,jc)*l)<=2?null:(M(this,wi).push(I,g),isNaN(C)?(M(this,us).set([e,A,I,g],2),M(this,Ht).push(NaN,NaN,NaN,NaN,I,g),{path:{d:this.toSVGPath()}}):(isNaN(M(this,us)[0])&&M(this,Ht).splice(6,6),M(this,us).set([C,i,e,A,I,g],0),M(this,Ht).push(..._g.createBezierPoints(C,i,e,A,I,g)),{path:{d:this.toSVGPath()}}))}end(I,g){const C=this.add(I,g);return C||(M(this,wi).length===2?{path:{d:this.toSVGPath()}}:null)}startNew(I,g,C,i,e){$(this,xc,C),$(this,jc,i),$(this,vc,e),[I,g]=eg(this,s0,ZN).call(this,I,g);const A=$(this,Ht,[NaN,NaN,NaN,NaN,I,g]);$(this,wi,[I,g]);const s=M(this,Xt).at(-1);return s&&(s.line=new Float32Array(s.line),s.points=new Float32Array(s.points)),M(this,Xt).push({line:A,points:M(this,wi)}),M(this,us).set(A,0),$(this,ve,0),this.toSVGPath(),null}getLastElement(){return M(this,Xt).at(-1)}setLastElement(I){return M(this,Xt)?(M(this,Xt).push(I),$(this,Ht,I.line),$(this,wi,I.points),$(this,ve,0),{path:{d:this.toSVGPath()}}):M(this,Tc).setLastElement(I)}removeLastElement(){if(!M(this,Xt))return M(this,Tc).removeLastElement();M(this,Xt).pop(),$(this,Qt,"");for(let I=0,g=M(this,Xt).length;I<g;I++){const{line:C,points:i}=M(this,Xt)[I];$(this,Ht,C),$(this,wi,i),$(this,ve,0),this.toSVGPath()}return{path:{d:M(this,Qt)}}}toSVGPath(){const I=_g.svgRound(M(this,Ht)[4]),g=_g.svgRound(M(this,Ht)[5]);if(M(this,wi).length===2)return $(this,Qt,`${M(this,Qt)} M ${I} ${g} Z`),M(this,Qt);if(M(this,wi).length<=6){const i=M(this,Qt).lastIndexOf("M");$(this,Qt,`${M(this,Qt).slice(0,i)} M ${I} ${g}`),$(this,ve,6)}if(M(this,wi).length===4){const i=_g.svgRound(M(this,Ht)[10]),e=_g.svgRound(M(this,Ht)[11]);return $(this,Qt,`${M(this,Qt)} L ${i} ${e}`),$(this,ve,12),M(this,Qt)}const C=[];M(this,ve)===0&&(C.push(`M ${I} ${g}`),$(this,ve,6));for(let i=M(this,ve),e=M(this,Ht).length;i<e;i+=6){const[A,s,l,n,a,d]=M(this,Ht).slice(i,i+6).map(_g.svgRound);C.push(`C${A} ${s} ${l} ${n} ${a} ${d}`)}return $(this,Qt,M(this,Qt)+C.join(" ")),$(this,ve,M(this,Ht).length),M(this,Qt)}getOutlines(I,g,C,i){const e=M(this,Xt).at(-1);return e.line=new Float32Array(e.line),e.points=new Float32Array(e.points),M(this,Tc).build(M(this,Xt),I,g,C,M(this,vc),M(this,A0),i),$(this,us,null),$(this,Ht,null),$(this,Xt,null),$(this,Qt,null),M(this,Tc)}get defaultSVGProperties(){return{root:{viewBox:"0 0 10000 10000"},rootClass:{draw:!0},bbox:[0,0,1,1]}}}us=new WeakMap,Ht=new WeakMap,Xt=new WeakMap,vc=new WeakMap,A0=new WeakMap,wi=new WeakMap,Qt=new WeakMap,ve=new WeakMap,Tc=new WeakMap,xc=new WeakMap,jc=new WeakMap,s0=new WeakSet,ZN=function(I,g){return _g._normalizePoint(I,g,M(this,xc),M(this,jc),M(this,vc))};var pi,TZ,xZ,de,ms,Zs,l0,n0,Qc,qt,el,CIg,tIg,iIg;class qZ extends _g{constructor(){super(...arguments);ig(this,qt);ig(this,pi);ig(this,TZ,0);ig(this,xZ);ig(this,de);ig(this,ms);ig(this,Zs);ig(this,l0);ig(this,n0);ig(this,Qc)}build(g,C,i,e,A,s,l){$(this,ms,C),$(this,Zs,i),$(this,l0,e),$(this,n0,A),$(this,Qc,s),$(this,xZ,l??0),$(this,de,g),eg(this,qt,tIg).call(this)}get thickness(){return M(this,Qc)}setLastElement(g){return M(this,de).push(g),{path:{d:this.toSVGPath()}}}removeLastElement(){return M(this,de).pop(),{path:{d:this.toSVGPath()}}}toSVGPath(){const g=[];for(const{line:C}of M(this,de)){if(g.push(`M${_g.svgRound(C[4])} ${_g.svgRound(C[5])}`),C.length===6){g.push("Z");continue}if(C.length===12&&isNaN(C[6])){g.push(`L${_g.svgRound(C[10])} ${_g.svgRound(C[11])}`);continue}for(let i=6,e=C.length;i<e;i+=6){const[A,s,l,n,a,d]=C.subarray(i,i+6).map(_g.svgRound);g.push(`C${A} ${s} ${l} ${n} ${a} ${d}`)}}return g.join("")}serialize([g,C,i,e],A){const s=[],l=[],[n,a,d,o]=eg(this,qt,CIg).call(this);let c,r,h,b,u,m,Z,p,Y;switch(M(this,n0)){case 0:Y=_g._rescale,c=g,r=C+e,h=i,b=-e,u=g+n*i,m=C+(1-a-o)*e,Z=g+(n+d)*i,p=C+(1-a)*e;break;case 90:Y=_g._rescaleAndSwap,c=g,r=C,h=i,b=e,u=g+a*i,m=C+n*e,Z=g+(a+o)*i,p=C+(n+d)*e;break;case 180:Y=_g._rescale,c=g+i,r=C,h=-i,b=e,u=g+(1-n-d)*i,m=C+a*e,Z=g+(1-n)*i,p=C+(a+o)*e;break;case 270:Y=_g._rescaleAndSwap,c=g+i,r=C+e,h=-i,b=-e,u=g+(1-a-o)*i,m=C+(1-n-d)*e,Z=g+(1-a)*i,p=C+(1-n)*e;break}for(const{line:R,points:X}of M(this,de))s.push(Y(R,c,r,h,b,A?new Array(R.length):null)),l.push(Y(X,c,r,h,b,A?new Array(X.length):null));return{lines:s,points:l,rect:[u,m,Z,p]}}static deserialize(g,C,i,e,A,{paths:{lines:s,points:l},rotation:n,thickness:a}){const d=[];let o,c,r,h,b;switch(n){case 0:b=_g._rescale,o=-g/i,c=C/e+1,r=1/i,h=-1/e;break;case 90:b=_g._rescaleAndSwap,o=-C/e,c=-g/i,r=1/e,h=1/i;break;case 180:b=_g._rescale,o=g/i+1,c=-C/e,r=-1/i,h=1/e;break;case 270:b=_g._rescaleAndSwap,o=C/e+1,c=g/i+1,r=-1/e,h=-1/i;break}if(!s){s=[];for(const m of l){const Z=m.length;if(Z===2){s.push(new Float32Array([NaN,NaN,NaN,NaN,m[0],m[1]]));continue}if(Z===4){s.push(new Float32Array([NaN,NaN,NaN,NaN,m[0],m[1],NaN,NaN,NaN,NaN,m[2],m[3]]));continue}const p=new Float32Array(3*(Z-2));s.push(p);let[Y,R,X,H]=m.subarray(0,4);p.set([NaN,NaN,NaN,NaN,Y,R],0);for(let S=4;S<Z;S+=2){const z=m[S],v=m[S+1];p.set(_g.createBezierPoints(Y,R,X,H,z,v),(S-2)*3),[Y,R,X,H]=[X,H,z,v]}}}for(let m=0,Z=s.length;m<Z;m++)d.push({line:b(s[m].map(p=>p??NaN),o,c,r,h),points:b(l[m].map(p=>p??NaN),o,c,r,h)});const u=new this.prototype.constructor;return u.build(d,i,e,1,n,a,A),u}get box(){return M(this,pi)}updateProperty(g,C){return g==="stroke-width"?eg(this,qt,iIg).call(this,C):null}updateParentDimensions([g,C],i){const[e,A]=eg(this,qt,el).call(this);$(this,ms,g),$(this,Zs,C),$(this,l0,i);const[s,l]=eg(this,qt,el).call(this),n=s-e,a=l-A,d=M(this,pi);return d[0]-=n,d[1]-=a,d[2]+=2*n,d[3]+=2*a,d}updateRotation(g){return $(this,TZ,g),{path:{transform:this.rotationTransform}}}get viewBox(){return M(this,pi).map(_g.svgRound).join(" ")}get defaultProperties(){const[g,C]=M(this,pi);return{root:{viewBox:this.viewBox},path:{"transform-origin":`${_g.svgRound(g)} ${_g.svgRound(C)}`}}}get rotationTransform(){const[,,g,C]=M(this,pi);let i=0,e=0,A=0,s=0,l=0,n=0;switch(M(this,TZ)){case 90:e=C/g,A=-g/C,l=g;break;case 180:i=-1,s=-1,l=g,n=C;break;case 270:e=-C/g,A=g/C,n=C;break;default:return""}return`matrix(${i} ${e} ${A} ${s} ${_g.svgRound(l)} ${_g.svgRound(n)})`}getPathResizingSVGProperties([g,C,i,e]){const[A,s]=eg(this,qt,el).call(this),[l,n,a,d]=M(this,pi);if(Math.abs(a-A)<=_g.PRECISION||Math.abs(d-s)<=_g.PRECISION){const b=g+i/2-(l+a/2),u=C+e/2-(n+d/2);return{path:{"transform-origin":`${_g.svgRound(g)} ${_g.svgRound(C)}`,transform:`${this.rotationTransform} translate(${b} ${u})`}}}const o=(i-2*A)/(a-2*A),c=(e-2*s)/(d-2*s),r=a/i,h=d/e;return{path:{"transform-origin":`${_g.svgRound(l)} ${_g.svgRound(n)}`,transform:`${this.rotationTransform} scale(${r} ${h}) translate(${_g.svgRound(A)} ${_g.svgRound(s)}) scale(${o} ${c}) translate(${_g.svgRound(-A)} ${_g.svgRound(-s)})`}}}getPathResizedSVGProperties([g,C,i,e]){const[A,s]=eg(this,qt,el).call(this),l=M(this,pi),[n,a,d,o]=l;if(l[0]=g,l[1]=C,l[2]=i,l[3]=e,Math.abs(d-A)<=_g.PRECISION||Math.abs(o-s)<=_g.PRECISION){const u=g+i/2-(n+d/2),m=C+e/2-(a+o/2);for(const{line:Z,points:p}of M(this,de))_g._translate(Z,u,m,Z),_g._translate(p,u,m,p);return{root:{viewBox:this.viewBox},path:{"transform-origin":`${_g.svgRound(g)} ${_g.svgRound(C)}`,transform:this.rotationTransform||null,d:this.toSVGPath()}}}const c=(i-2*A)/(d-2*A),r=(e-2*s)/(o-2*s),h=-c*(n+A)+g+A,b=-r*(a+s)+C+s;if(c!==1||r!==1||h!==0||b!==0)for(const{line:u,points:m}of M(this,de))_g._rescale(u,h,b,c,r,u),_g._rescale(m,h,b,c,r,m);return{root:{viewBox:this.viewBox},path:{"transform-origin":`${_g.svgRound(g)} ${_g.svgRound(C)}`,transform:this.rotationTransform||null,d:this.toSVGPath()}}}getPathTranslatedSVGProperties([g,C],i){const[e,A]=i,s=M(this,pi),l=g-s[0],n=C-s[1];if(M(this,ms)===e&&M(this,Zs)===A)for(const{line:a,points:d}of M(this,de))_g._translate(a,l,n,a),_g._translate(d,l,n,d);else{const a=M(this,ms)/e,d=M(this,Zs)/A;$(this,ms,e),$(this,Zs,A);for(const{line:o,points:c}of M(this,de))_g._rescale(o,l,n,a,d,o),_g._rescale(c,l,n,a,d,c);s[2]*=a,s[3]*=d}return s[0]=g,s[1]=C,{root:{viewBox:this.viewBox},path:{d:this.toSVGPath(),"transform-origin":`${_g.svgRound(g)} ${_g.svgRound(C)}`}}}get defaultSVGProperties(){const g=M(this,pi);return{root:{viewBox:this.viewBox},rootClass:{draw:!0},path:{d:this.toSVGPath(),"transform-origin":`${_g.svgRound(g[0])} ${_g.svgRound(g[1])}`,transform:this.rotationTransform||null},bbox:g}}}pi=new WeakMap,TZ=new WeakMap,xZ=new WeakMap,de=new WeakMap,ms=new WeakMap,Zs=new WeakMap,l0=new WeakMap,n0=new WeakMap,Qc=new WeakMap,qt=new WeakSet,el=function(g=M(this,Qc)){const C=M(this,xZ)+g/2*M(this,l0);return M(this,n0)%180===0?[C/M(this,ms),C/M(this,Zs)]:[C/M(this,Zs),C/M(this,ms)]},CIg=function(){const[g,C,i,e]=M(this,pi),[A,s]=eg(this,qt,el).call(this,0);return[g+A,C+s,i-2*A,e-2*s]},tIg=function(){const g=$(this,pi,new Float32Array([1/0,1/0,-1/0,-1/0]));for(const{line:e}of M(this,de)){if(e.length<=12){for(let l=4,n=e.length;l<n;l+=6)iI.pointBoundingBox(e[l],e[l+1],g);continue}let A=e[4],s=e[5];for(let l=6,n=e.length;l<n;l+=6){const[a,d,o,c,r,h]=e.subarray(l,l+6);iI.bezierBoundingBox(A,s,a,d,o,c,r,h,g),A=r,s=h}}const[C,i]=eg(this,qt,el).call(this);g[0]=Wi(g[0]-C,0,1),g[1]=Wi(g[1]-i,0,1),g[2]=Wi(g[2]+C,0,1),g[3]=Wi(g[3]+i,0,1),g[2]-=g[0],g[3]-=g[1]},iIg=function(g){const[C,i]=eg(this,qt,el).call(this);$(this,Qc,g);const[e,A]=eg(this,qt,el).call(this),[s,l]=[e-C,A-i],n=M(this,pi);return n[0]-=s,n[1]-=l,n[2]+=2*s,n[3]+=2*l,n};class JV extends gIg{constructor(I){super(),this._viewParameters=I,super.updateProperties({fill:"none",stroke:zC._defaultLineColor,"stroke-opacity":1,"stroke-width":1,"stroke-linecap":"round","stroke-linejoin":"round","stroke-miterlimit":10})}updateSVGProperty(I,g){I==="stroke-width"&&(g??(g=this["stroke-width"]),g*=this._viewParameters.realScale),super.updateSVGProperty(I,g)}clone(){const I=new JV(this._viewParameters);return I.updateAll(this),I}}var XV,eIg;const $r=class $r extends UN{constructor(g){super({...g,name:"inkEditor"});ig(this,XV);this._willKeepAspectRatio=!0,this.defaultL10nId="pdfjs-editor-ink-editor"}static initialize(g,C){zC.initialize(g,C),this._defaultDrawingOptions=new JV(C.viewParameters)}static getDefaultDrawingOptions(g){const C=this._defaultDrawingOptions.clone();return C.updateProperties(g),C}static get supportMultipleDrawings(){return!0}static get typesMap(){return jI(this,"typesMap",new Map([[gC.INK_THICKNESS,"stroke-width"],[gC.INK_COLOR,"stroke"],[gC.INK_OPACITY,"stroke-opacity"]]))}static createDrawerInstance(g,C,i,e,A){return new sdg(g,C,i,e,A,this._defaultDrawingOptions["stroke-width"])}static deserializeDraw(g,C,i,e,A,s){return qZ.deserialize(g,C,i,e,A,s)}static async deserialize(g,C,i){let e=null;if(g instanceof A9){const{data:{inkLists:s,rect:l,rotation:n,id:a,color:d,opacity:o,borderStyle:{rawWidth:c},popupRef:r},parent:{page:{pageNumber:h}}}=g;e=g={annotationType:RI.INK,color:Array.from(d),thickness:c,opacity:o,paths:{points:s},boxes:null,pageIndex:h-1,rect:l.slice(0),rotation:n,id:a,deleted:!1,popupRef:r}}const A=await super.deserialize(g,C,i);return A.annotationElementId=g.id||null,A._initialData=e,A}onScaleChanging(){if(!this.parent)return;super.onScaleChanging();const{_drawId:g,_drawingOptions:C,parent:i}=this;C.updateSVGProperty("stroke-width"),i.drawLayer.updateProperties(g,C.toSVGProperties())}static onScaleChangingWhenDrawing(){const g=this._currentParent;g&&(super.onScaleChangingWhenDrawing(),this._defaultDrawingOptions.updateSVGProperty("stroke-width"),g.drawLayer.updateProperties(this._currentDrawId,this._defaultDrawingOptions.toSVGProperties()))}createDrawingOptions({color:g,thickness:C,opacity:i}){this._drawingOptions=$r.getDefaultDrawingOptions({stroke:iI.makeHexColor(...g),"stroke-width":C,"stroke-opacity":i})}serialize(g=!1){if(this.isEmpty())return null;if(this.deleted)return this.serializeDeleted();const{lines:C,points:i,rect:e}=this.serializeDraw(g),{_drawingOptions:{stroke:A,"stroke-opacity":s,"stroke-width":l}}=this,n={annotationType:RI.INK,color:zC._colorManager.convert(A),opacity:s,thickness:l,paths:{lines:C,points:i},pageIndex:this.pageIndex,rect:e,rotation:this.rotation,structTreeParentId:this._structTreeParentId};return g?(n.isCopy=!0,n):this.annotationElementId&&!eg(this,XV,eIg).call(this,n)?null:(n.id=this.annotationElementId,n)}renderAnnotationElement(g){const{points:C,rect:i}=this.serializeDraw(!1);return g.updateEdited({rect:i,thickness:this._drawingOptions["stroke-width"],points:C}),null}};XV=new WeakSet,eIg=function(g){const{color:C,thickness:i,opacity:e,pageIndex:A}=this._initialData;return this._hasBeenMoved||this._hasBeenResized||g.color.some((s,l)=>s!==C[l])||g.thickness!==i||g.opacity!==e||g.pageIndex!==A},CI($r,"_type","ink"),CI($r,"_editorType",RI.INK),CI($r,"_defaultDrawingOptions",null);let XS=$r;class SS extends qZ{toSVGPath(){let I=super.toSVGPath();return I.endsWith("Z")||(I+="Z"),I}}const VY=8,yu=3;var Oc,aC,DS,pA,AIg,sIg,KS,GN,lIg,nIg,aIg,FS,kS,oIg;class Fl{static extractContoursFromText(I,{fontFamily:g,fontStyle:C,fontWeight:i},e,A,s,l){let n=new OffscreenCanvas(1,1),a=n.getContext("2d",{alpha:!1});const d=200,o=a.font=`${C} ${i} ${d}px ${g}`,{actualBoundingBoxLeft:c,actualBoundingBoxRight:r,actualBoundingBoxAscent:h,actualBoundingBoxDescent:b,fontBoundingBoxAscent:u,fontBoundingBoxDescent:m,width:Z}=a.measureText(I),p=1.5,Y=Math.ceil(Math.max(Math.abs(c)+Math.abs(r)||0,Z)*p),R=Math.ceil(Math.max(Math.abs(h)+Math.abs(b)||d,Math.abs(u)+Math.abs(m)||d)*p);n=new OffscreenCanvas(Y,R),a=n.getContext("2d",{alpha:!0,willReadFrequently:!0}),a.font=o,a.filter="grayscale(1)",a.fillStyle="white",a.fillRect(0,0,Y,R),a.fillStyle="black",a.fillText(I,Y*(p-1)/2,R*(3-p)/2);const X=eg(this,aC,FS).call(this,a.getImageData(0,0,Y,R).data),H=eg(this,aC,aIg).call(this,X),S=eg(this,aC,kS).call(this,H),z=eg(this,aC,KS).call(this,X,Y,R,S);return this.processDrawnLines({lines:{curves:z,width:Y,height:R},pageWidth:e,pageHeight:A,rotation:s,innerMargin:l,mustSmooth:!0,areContours:!0})}static process(I,g,C,i,e){const[A,s,l]=eg(this,aC,oIg).call(this,I),[n,a]=eg(this,aC,nIg).call(this,A,s,l,Math.hypot(s,l)*M(this,Oc).sigmaSFactor,M(this,Oc).sigmaR,M(this,Oc).kernelSize),d=eg(this,aC,kS).call(this,a),o=eg(this,aC,KS).call(this,n,s,l,d);return this.processDrawnLines({lines:{curves:o,width:s,height:l},pageWidth:g,pageHeight:C,rotation:i,innerMargin:e,mustSmooth:!0,areContours:!0})}static processDrawnLines({lines:I,pageWidth:g,pageHeight:C,rotation:i,innerMargin:e,mustSmooth:A,areContours:s}){i%180!==0&&([g,C]=[C,g]);const{curves:l,width:n,height:a}=I,d=I.thickness??0,o=[],c=Math.min(g/n,C/a),r=c/g,h=c/C,b=[];for(const{points:m}of l){const Z=A?eg(this,aC,lIg).call(this,m):m;if(!Z)continue;b.push(Z);const p=Z.length,Y=new Float32Array(p),R=new Float32Array(3*(p===2?2:p-2));if(o.push({line:R,points:Y}),p===2){Y[0]=Z[0]*r,Y[1]=Z[1]*h,R.set([NaN,NaN,NaN,NaN,Y[0],Y[1]],0);continue}let[X,H,S,z]=Z;X*=r,H*=h,S*=r,z*=h,Y.set([X,H,S,z],0),R.set([NaN,NaN,NaN,NaN,X,H],0);for(let v=4;v<p;v+=2){const K=Y[v]=Z[v]*r,V=Y[v+1]=Z[v+1]*h;R.set(_g.createBezierPoints(X,H,S,z,K,V),(v-2)*3),[X,H,S,z]=[S,z,K,V]}}if(o.length===0)return null;const u=s?new SS:new qZ;return u.build(o,g,C,1,i,s?0:d,e),{outline:u,newCurves:b,areContours:s,thickness:d,width:n,height:a}}static async compressSignature({outlines:I,areContours:g,thickness:C,width:i,height:e}){let A=1/0,s=-1/0,l=0;for(const Z of I){l+=Z.length;for(let p=2,Y=Z.length;p<Y;p++){const R=Z[p]-Z[p-2];A=Math.min(A,R),s=Math.max(s,R)}}let n;A>=-128&&s<=127?n=Int8Array:A>=-32768&&s<=32767?n=Int16Array:n=Int32Array;const a=I.length,d=VY+yu*a,o=new Uint32Array(d);let c=0;o[c++]=d*Uint32Array.BYTES_PER_ELEMENT+(l-2*a)*n.BYTES_PER_ELEMENT,o[c++]=0,o[c++]=i,o[c++]=e,o[c++]=g?0:1,o[c++]=Math.max(0,Math.floor(C??0)),o[c++]=a,o[c++]=n.BYTES_PER_ELEMENT;for(const Z of I)o[c++]=Z.length-2,o[c++]=Z[0],o[c++]=Z[1];const r=new CompressionStream("deflate-raw"),h=r.writable.getWriter();await h.ready,h.write(o);const b=n.prototype.constructor;for(const Z of I){const p=new b(Z.length-2);for(let Y=2,R=Z.length;Y<R;Y++)p[Y-2]=Z[Y]-Z[Y-2];h.write(p)}h.close();const u=await new Response(r.readable).arrayBuffer(),m=new Uint8Array(u);return r$(m)}static async decompressSignature(I){try{const g=Rog(I),{readable:C,writable:i}=new DecompressionStream("deflate-raw"),e=i.getWriter();await e.ready,e.write(g).then(async()=>{await e.ready,await e.close()}).catch(()=>{});let A=null,s=0;for await(const Z of C)A||(A=new Uint8Array(new Uint32Array(Z.buffer,0,4)[0])),A.set(Z,s),s+=Z.length;const l=new Uint32Array(A.buffer,0,A.length>>2),n=l[1];if(n!==0)throw new Error(`Invalid version: ${n}`);const a=l[2],d=l[3],o=l[4]===0,c=l[5],r=l[6],h=l[7],b=[],u=(VY+yu*r)*Uint32Array.BYTES_PER_ELEMENT;let m;switch(h){case Int8Array.BYTES_PER_ELEMENT:m=new Int8Array(A.buffer,u);break;case Int16Array.BYTES_PER_ELEMENT:m=new Int16Array(A.buffer,u);break;case Int32Array.BYTES_PER_ELEMENT:m=new Int32Array(A.buffer,u);break}s=0;for(let Z=0;Z<r;Z++){const p=l[yu*Z+VY],Y=new Float32Array(p+2);b.push(Y);for(let R=0;R<yu-1;R++)Y[R]=l[yu*Z+VY+R+1];for(let R=0;R<p;R++)Y[R+2]=Y[R]+m[s++]}return{areContours:o,thickness:c,outlines:b,width:a,height:d}}catch(g){return HI(`decompressSignature: ${g}`),null}}}Oc=new WeakMap,aC=new WeakSet,DS=function(I,g,C,i){return C-=I,i-=g,C===0?i>0?0:4:C===1?i+6:2-i},pA=new WeakMap,AIg=function(I,g,C,i,e,A,s){const l=eg(this,aC,DS).call(this,C,i,e,A);for(let n=0;n<8;n++){const a=(-n+l-s+16)%8,d=M(this,pA)[2*a],o=M(this,pA)[2*a+1];if(I[(C+d)*g+(i+o)]!==0)return a}return-1},sIg=function(I,g,C,i,e,A,s){const l=eg(this,aC,DS).call(this,C,i,e,A);for(let n=0;n<8;n++){const a=(n+l+s+16)%8,d=M(this,pA)[2*a],o=M(this,pA)[2*a+1];if(I[(C+d)*g+(i+o)]!==0)return a}return-1},KS=function(I,g,C,i){const e=I.length,A=new Int32Array(e);for(let a=0;a<e;a++)A[a]=I[a]<=i?1:0;for(let a=1;a<C-1;a++)A[a*g]=A[a*g+g-1]=0;for(let a=0;a<g;a++)A[a]=A[g*C-1-a]=0;let s=1,l;const n=[];for(let a=1;a<C-1;a++){l=1;for(let d=1;d<g-1;d++){const o=a*g+d,c=A[o];if(c===0)continue;let r=a,h=d;if(c===1&&A[o-1]===0)s+=1,h-=1;else if(c>=1&&A[o+1]===0)s+=1,h+=1,c>1&&(l=c);else{c!==1&&(l=Math.abs(c));continue}const b=[d,a],u=h===d+1,m={isHole:u,points:b,id:s,parent:0};n.push(m);let Z;for(const v of n)if(v.id===l){Z=v;break}Z?Z.isHole?m.parent=u?Z.parent:l:m.parent=u?l:Z.parent:m.parent=u?l:0;const p=eg(this,aC,AIg).call(this,A,g,a,d,r,h,0);if(p===-1){A[o]=-s,A[o]!==1&&(l=Math.abs(A[o]));continue}let Y=M(this,pA)[2*p],R=M(this,pA)[2*p+1];const X=a+Y,H=d+R;r=X,h=H;let S=a,z=d;for(;;){const v=eg(this,aC,sIg).call(this,A,g,S,z,r,h,1);Y=M(this,pA)[2*v],R=M(this,pA)[2*v+1];const K=S+Y,V=z+R;b.push(V,K);const N=S*g+z;if(A[N+1]===0?A[N]=-s:A[N]===1&&(A[N]=s),K===a&&V===d&&S===X&&z===H){A[o]!==1&&(l=Math.abs(A[o]));break}else r=S,h=z,S=K,z=V}}}return n},GN=function(I,g,C,i){if(C-g<=4){for(let X=g;X<C-2;X+=2)i.push(I[X],I[X+1]);return}const e=I[g],A=I[g+1],s=I[C-4]-e,l=I[C-3]-A,n=Math.hypot(s,l),a=s/n,d=l/n,o=a*A-d*e,c=l/s,r=1/n,h=Math.atan(c),b=Math.cos(h),u=Math.sin(h),m=r*(Math.abs(b)+Math.abs(u)),Z=r*(1-m+m**2),p=Math.max(Math.atan(Math.abs(u+b)*Z),Math.atan(Math.abs(u-b)*Z));let Y=0,R=g;for(let X=g+2;X<C-2;X+=2){const H=Math.abs(o-a*I[X+1]+d*I[X]);H>Y&&(R=X,Y=H)}Y>(n*p)**2?(eg(this,aC,GN).call(this,I,g,R+2,i),eg(this,aC,GN).call(this,I,R,C,i)):i.push(e,A)},lIg=function(I){const g=[],C=I.length;return eg(this,aC,GN).call(this,I,0,C,g),g.push(I[C-2],I[C-1]),g.length<=4?null:g},nIg=function(I,g,C,i,e,A){const s=new Float32Array(A**2),l=-2*i**2,n=A>>1;for(let h=0;h<A;h++){const b=(h-n)**2;for(let u=0;u<A;u++)s[h*A+u]=Math.exp((b+(u-n)**2)/l)}const a=new Float32Array(256),d=-2*e**2;for(let h=0;h<256;h++)a[h]=Math.exp(h**2/d);const o=I.length,c=new Uint8Array(o),r=new Uint32Array(256);for(let h=0;h<C;h++)for(let b=0;b<g;b++){const u=h*g+b,m=I[u];let Z=0,p=0;for(let R=0;R<A;R++){const X=h+R-n;if(!(X<0||X>=C))for(let H=0;H<A;H++){const S=b+H-n;if(S<0||S>=g)continue;const z=I[X*g+S],v=s[R*A+H]*a[Math.abs(z-m)];Z+=z*v,p+=v}}const Y=c[u]=Math.round(Z/p);r[Y]++}return[c,r]},aIg=function(I){const g=new Uint32Array(256);for(const C of I)g[C]++;return g},FS=function(I){const g=I.length,C=new Uint8ClampedArray(g>>2);let i=-1/0,e=1/0;for(let s=0,l=C.length;s<l;s++){if(I[(s<<2)+3]===0){i=C[s]=255;continue}const a=C[s]=I[s<<2];a>i&&(i=a),a<e&&(e=a)}const A=255/(i-e);for(let s=0;s<g;s++)C[s]=(C[s]-e)*A;return C},kS=function(I){let g,C=-1/0,i=-1/0;const e=I.findIndex(l=>l!==0);let A=e,s=e;for(g=e;g<256;g++){const l=I[g];l>C&&(g-A>i&&(i=g-A,s=g-1),C=l,A=g)}for(g=s-1;g>=0&&!(I[g]>I[g+1]);g--);return g},oIg=function(I){const g=I,{width:C,height:i}=I,{maxDim:e}=M(this,Oc);let A=C,s=i;if(C>e||i>e){let o=C,c=i,r=Math.log2(Math.max(C,i)/e);const h=Math.floor(r);r=r===h?h-1:h;for(let u=0;u<r;u++){A=o,s=c,A>e&&(A=Math.ceil(A/2)),s>e&&(s=Math.ceil(s/2));const m=new OffscreenCanvas(A,s);m.getContext("2d").drawImage(I,0,0,o,c,0,0,A,s),o=A,c=s,I!==g&&I.close(),I=m.transferToImageBitmap()}const b=Math.min(e/A,e/s);A=Math.round(A*b),s=Math.round(s*b)}const n=new OffscreenCanvas(A,s).getContext("2d",{willReadFrequently:!0});n.filter="grayscale(1)",n.drawImage(I,0,0,I.width,I.height,0,0,A,s);const a=n.getImageData(0,0,A,s).data;return[eg(this,aC,FS).call(this,a),A,s]},ig(Fl,aC),ig(Fl,Oc,{maxDim:512,sigmaSFactor:.02,sigmaR:25,kernelSize:16}),ig(Fl,pA,new Int32Array([0,1,-1,1,-1,0,-1,-1,0,-1,1,-1,1,0,1,1]));class s9 extends gIg{constructor(){super(),super.updateProperties({fill:"CanvasText","stroke-width":0})}clone(){const I=new s9;return I.updateAll(this),I}}class l9 extends JV{constructor(I){super(I),super.updateProperties({stroke:"CanvasText","stroke-width":1})}clone(){const I=new l9(this._viewParameters);return I.updateAll(this),I}}var Va,re,Ma,Ra;const ge=class ge extends UN{constructor(g){super({...g,mustBeCommitted:!0,name:"signatureEditor"});ig(this,Va,!1);ig(this,re,null);ig(this,Ma,null);ig(this,Ra,null);this._willKeepAspectRatio=!0,$(this,Ma,g.signatureData||null),$(this,re,null),this.defaultL10nId="pdfjs-editor-signature-editor1"}static initialize(g,C){zC.initialize(g,C),this._defaultDrawingOptions=new s9,this._defaultDrawnSignatureOptions=new l9(C.viewParameters)}static getDefaultDrawingOptions(g){const C=this._defaultDrawingOptions.clone();return C.updateProperties(g),C}static get supportMultipleDrawings(){return!1}static get typesMap(){return jI(this,"typesMap",new Map)}static get isDrawer(){return!1}get telemetryFinalData(){return{type:"signature",hasDescription:!!M(this,re)}}static computeTelemetryFinalData(g){const C=g.get("hasDescription");return{hasAltText:C.get(!0)??0,hasNoAltText:C.get(!1)??0}}get isResizable(){return!0}onScaleChanging(){this._drawId!==null&&super.onScaleChanging()}render(){if(this.div)return this.div;let g,C;const{_isCopy:i}=this;if(i&&(this._isCopy=!1,g=this.x,C=this.y),super.render(),this._drawId===null)if(M(this,Ma)){const{lines:e,mustSmooth:A,areContours:s,description:l,uuid:n,heightInPage:a}=M(this,Ma),{rawDims:{pageWidth:d,pageHeight:o},rotation:c}=this.parent.viewport,r=Fl.processDrawnLines({lines:e,pageWidth:d,pageHeight:o,rotation:c,innerMargin:ge._INNER_MARGIN,mustSmooth:A,areContours:s});this.addSignature(r,a,l,n)}else this.div.setAttribute("data-l10n-args",JSON.stringify({description:""})),this.div.hidden=!0,this._uiManager.getSignature(this);return i&&(this._isCopy=!0,this._moveAfterPaste(g,C)),this.div}setUuid(g){$(this,Ra,g),this.addEditToolbar()}getUuid(){return M(this,Ra)}get description(){return M(this,re)}set description(g){$(this,re,g),super.addEditToolbar().then(C=>{C==null||C.updateEditSignatureButton(g)})}getSignaturePreview(){const{newCurves:g,areContours:C,thickness:i,width:e,height:A}=M(this,Ma),s=Math.max(e,A),l=Fl.processDrawnLines({lines:{curves:g.map(n=>({points:n})),thickness:i,width:e,height:A},pageWidth:s,pageHeight:s,rotation:0,innerMargin:0,mustSmooth:!1,areContours:C});return{areContours:C,outline:l.outline}}async addEditToolbar(){const g=await super.addEditToolbar();return g?(this._uiManager.signatureManager&&M(this,re)!==null&&(await g.addEditSignatureButton(this._uiManager.signatureManager,M(this,Ra),M(this,re)),g.show()),g):null}addSignature(g,C,i,e){const{x:A,y:s}=this,{outline:l}=$(this,Ma,g);$(this,Va,l instanceof SS),$(this,re,i),this.div.setAttribute("data-l10n-args",JSON.stringify({description:i}));let n;M(this,Va)?n=ge.getDefaultDrawingOptions():(n=ge._defaultDrawnSignatureOptions.clone(),n.updateProperties({"stroke-width":l.thickness})),this._addOutlines({drawOutlines:l,drawingOptions:n});const[a,d]=this.parentDimensions,[,o]=this.pageDimensions;let c=C/o;c=c>=1?.5:c,this.width*=c/this.height,this.width>=1&&(c*=.9/this.width,this.width=.9),this.height=c,this.setDims(a*this.width,d*this.height),this.x=A,this.y=s,this.center(),this._onResized(),this.onScaleChanging(),this.rotate(),this._uiManager.addToAnnotationStorage(this),this.setUuid(e),this._reportTelemetry({action:"pdfjs.signature.inserted",data:{hasBeenSaved:!!e,hasDescription:!!i}}),this.div.hidden=!1}getFromImage(g){const{rawDims:{pageWidth:C,pageHeight:i},rotation:e}=this.parent.viewport;return Fl.process(g,C,i,e,ge._INNER_MARGIN)}getFromText(g,C){const{rawDims:{pageWidth:i,pageHeight:e},rotation:A}=this.parent.viewport;return Fl.extractContoursFromText(g,C,i,e,A,ge._INNER_MARGIN)}getDrawnSignature(g){const{rawDims:{pageWidth:C,pageHeight:i},rotation:e}=this.parent.viewport;return Fl.processDrawnLines({lines:g,pageWidth:C,pageHeight:i,rotation:e,innerMargin:ge._INNER_MARGIN,mustSmooth:!1,areContours:!1})}createDrawingOptions({areContours:g,thickness:C}){g?this._drawingOptions=ge.getDefaultDrawingOptions():(this._drawingOptions=ge._defaultDrawnSignatureOptions.clone(),this._drawingOptions.updateProperties({"stroke-width":C}))}serialize(g=!1){if(this.isEmpty())return null;const{lines:C,points:i,rect:e}=this.serializeDraw(g),{_drawingOptions:{"stroke-width":A}}=this,s={annotationType:RI.SIGNATURE,isSignature:!0,areContours:M(this,Va),color:[0,0,0],thickness:M(this,Va)?0:A,pageIndex:this.pageIndex,rect:e,rotation:this.rotation,structTreeParentId:this._structTreeParentId};return g?(s.paths={lines:C,points:i},s.uuid=M(this,Ra),s.isCopy=!0):s.lines=C,M(this,re)&&(s.accessibilityData={type:"Figure",alt:M(this,re)}),s}static deserializeDraw(g,C,i,e,A,s){return s.areContours?SS.deserialize(g,C,i,e,A,s):qZ.deserialize(g,C,i,e,A,s)}static async deserialize(g,C,i){var A;const e=await super.deserialize(g,C,i);return $(e,Va,g.areContours),$(e,re,((A=g.accessibilityData)==null?void 0:A.alt)||""),$(e,Ra,g.uuid),e}};Va=new WeakMap,re=new WeakMap,Ma=new WeakMap,Ra=new WeakMap,CI(ge,"_type","signature"),CI(ge,"_editorType",RI.SIGNATURE),CI(ge,"_defaultDrawingOptions",null);let zS=ge;var SC,St,fa,fl,Ha,a0,Hl,Uc,Gs,he,o0,iC,Ou,Uu,wN,pN,BN,LS,WN,cIg;class JS extends zC{constructor(g){super({...g,name:"stampEditor"});ig(this,iC);ig(this,SC,null);ig(this,St,null);ig(this,fa,null);ig(this,fl,null);ig(this,Ha,null);ig(this,a0,"");ig(this,Hl,null);ig(this,Uc,!1);ig(this,Gs,null);ig(this,he,!1);ig(this,o0,!1);$(this,fl,g.bitmapUrl),$(this,Ha,g.bitmapFile),this.defaultL10nId="pdfjs-editor-stamp-editor"}static initialize(g,C){zC.initialize(g,C)}static isHandlingMimeForPasting(g){return XX.includes(g)}static paste(g,C){C.pasteEditor(RI.STAMP,{bitmapFile:g.getAsFile()})}altTextFinish(){this._uiManager.useNewAltTextFlow&&(this.div.hidden=!1),super.altTextFinish()}get telemetryFinalData(){var g;return{type:"stamp",hasAltText:!!((g=this.altTextData)!=null&&g.altText)}}static computeTelemetryFinalData(g){const C=g.get("hasAltText");return{hasAltText:C.get(!0)??0,hasNoAltText:C.get(!1)??0}}async mlGuessAltText(g=null,C=!0){if(this.hasAltTextData())return null;const{mlManager:i}=this._uiManager;if(!i)throw new Error("No ML.");if(!await i.isEnabledFor("altText"))throw new Error("ML isn't enabled for alt text.");const{data:e,width:A,height:s}=g||this.copyCanvas(null,null,!0).imageData,l=await i.guess({name:"altText",request:{data:e,width:A,height:s,channels:e.length/(A*s)}});if(!l)throw new Error("No response from the AI service.");if(l.error)throw new Error("Error from the AI service.");if(l.cancel)return null;if(!l.output)throw new Error("No valid response from the AI service.");const n=l.output;return await this.setGuessedAltText(n),C&&!this.hasAltTextData()&&(this.altTextData={alt:n,decorative:!1}),n}remove(){var g;M(this,St)&&($(this,SC,null),this._uiManager.imageManager.deleteId(M(this,St)),(g=M(this,Hl))==null||g.remove(),$(this,Hl,null),M(this,Gs)&&(clearTimeout(M(this,Gs)),$(this,Gs,null))),super.remove()}rebuild(){if(!this.parent){M(this,St)&&eg(this,iC,wN).call(this);return}super.rebuild(),this.div!==null&&(M(this,St)&&M(this,Hl)===null&&eg(this,iC,wN).call(this),this.isAttachedToDOM||this.parent.add(this))}onceAdded(g){this._isDraggable=!0,g&&this.div.focus()}isEmpty(){return!(M(this,fa)||M(this,SC)||M(this,fl)||M(this,Ha)||M(this,St)||M(this,Uc))}get isResizable(){return!0}render(){if(this.div)return this.div;let g,C;return this._isCopy&&(g=this.x,C=this.y),super.render(),this.div.hidden=!0,this.addAltTextButton(),M(this,Uc)||(M(this,SC)?eg(this,iC,pN).call(this):eg(this,iC,wN).call(this)),this._isCopy&&this._moveAfterPaste(g,C),this._uiManager.addShouldRescale(this),this.div}setCanvas(g,C){const{id:i,bitmap:e}=this._uiManager.imageManager.getFromCanvas(g,C);C.remove(),i&&this._uiManager.imageManager.isValidId(i)&&($(this,St,i),e&&$(this,SC,e),$(this,Uc,!1),eg(this,iC,pN).call(this))}_onResized(){this.onScaleChanging()}onScaleChanging(){if(!this.parent)return;M(this,Gs)!==null&&clearTimeout(M(this,Gs)),$(this,Gs,setTimeout(()=>{$(this,Gs,null),eg(this,iC,LS).call(this)},200))}copyCanvas(g,C,i=!1){var c;g||(g=224);const{width:e,height:A}=M(this,SC),s=new jl;let l=M(this,SC),n=e,a=A,d=null;if(C){if(e>C||A>C){const H=Math.min(C/e,C/A);n=Math.floor(e*H),a=Math.floor(A*H)}d=document.createElement("canvas");const r=d.width=Math.ceil(n*s.sx),h=d.height=Math.ceil(a*s.sy);M(this,he)||(l=eg(this,iC,BN).call(this,r,h));const b=d.getContext("2d");b.filter=this._uiManager.hcmFilter;let u="white",m="#cfcfd8";this._uiManager.hcmFilter!=="none"?m="black":(c=window.matchMedia)!=null&&c.call(window,"(prefers-color-scheme: dark)").matches&&(u="#8f8f9d",m="#42414d");const Z=15,p=Z*s.sx,Y=Z*s.sy,R=new OffscreenCanvas(p*2,Y*2),X=R.getContext("2d");X.fillStyle=u,X.fillRect(0,0,p*2,Y*2),X.fillStyle=m,X.fillRect(0,0,p,Y),X.fillRect(p,Y,p,Y),b.fillStyle=b.createPattern(R,"repeat"),b.fillRect(0,0,r,h),b.drawImage(l,0,0,l.width,l.height,0,0,r,h)}let o=null;if(i){let r,h;if(s.symmetric&&l.width<g&&l.height<g)r=l.width,h=l.height;else if(l=M(this,SC),e>g||A>g){const m=Math.min(g/e,g/A);r=Math.floor(e*m),h=Math.floor(A*m),M(this,he)||(l=eg(this,iC,BN).call(this,r,h))}const u=new OffscreenCanvas(r,h).getContext("2d",{willReadFrequently:!0});u.drawImage(l,0,0,l.width,l.height,0,0,r,h),o={width:r,height:h,data:u.getImageData(0,0,r,h).data}}return{canvas:d,width:n,height:a,imageData:o}}static async deserialize(g,C,i){var b;let e=null,A=!1;if(g instanceof Ngg){const{data:{rect:u,rotation:m,id:Z,structParent:p,popupRef:Y},container:R,parent:{page:{pageNumber:X}},canvas:H}=g;let S,z;H?(delete g.canvas,{id:S,bitmap:z}=i.imageManager.getFromCanvas(R.id,H),H.remove()):(A=!0,g._hasNoCanvas=!0);const v=((b=await C._structTree.getAriaAttributes(`${_D}${Z}`))==null?void 0:b.get("aria-label"))||"";e=g={annotationType:RI.STAMP,bitmapId:S,bitmap:z,pageIndex:X-1,rect:u.slice(0),rotation:m,id:Z,deleted:!1,accessibilityData:{decorative:!1,altText:v},isSvg:!1,structParent:p,popupRef:Y}}const s=await super.deserialize(g,C,i),{rect:l,bitmap:n,bitmapUrl:a,bitmapId:d,isSvg:o,accessibilityData:c}=g;A?(i.addMissingCanvas(g.id,s),$(s,Uc,!0)):d&&i.imageManager.isValidId(d)?($(s,St,d),n&&$(s,SC,n)):$(s,fl,a),$(s,he,o);const[r,h]=s.pageDimensions;return s.width=(l[2]-l[0])/r,s.height=(l[3]-l[1])/h,s.annotationElementId=g.id||null,c&&(s.altTextData=c),s._initialData=e,$(s,o0,!!e),s}serialize(g=!1,C=null){if(this.isEmpty())return null;if(this.deleted)return this.serializeDeleted();const i={annotationType:RI.STAMP,bitmapId:M(this,St),pageIndex:this.pageIndex,rect:this.getRect(0,0),rotation:this.rotation,isSvg:M(this,he),structTreeParentId:this._structTreeParentId};if(g)return i.bitmapUrl=eg(this,iC,WN).call(this,!0),i.accessibilityData=this.serializeAltText(!0),i.isCopy=!0,i;const{decorative:e,altText:A}=this.serializeAltText(!1);if(!e&&A&&(i.accessibilityData={type:"Figure",alt:A}),this.annotationElementId){const l=eg(this,iC,cIg).call(this,i);if(l.isSame)return null;l.isSameAltText?delete i.accessibilityData:i.accessibilityData.structParent=this._initialData.structParent??-1}if(i.id=this.annotationElementId,C===null)return i;C.stamps||(C.stamps=new Map);const s=M(this,he)?(i.rect[2]-i.rect[0])*(i.rect[3]-i.rect[1]):null;if(!C.stamps.has(M(this,St)))C.stamps.set(M(this,St),{area:s,serialized:i}),i.bitmap=eg(this,iC,WN).call(this,!1);else if(M(this,he)){const l=C.stamps.get(M(this,St));s>l.area&&(l.area=s,l.serialized.bitmap.close(),l.serialized.bitmap=eg(this,iC,WN).call(this,!1))}return i}renderAnnotationElement(g){return g.updateEdited({rect:this.getRect(0,0)}),null}}SC=new WeakMap,St=new WeakMap,fa=new WeakMap,fl=new WeakMap,Ha=new WeakMap,a0=new WeakMap,Hl=new WeakMap,Uc=new WeakMap,Gs=new WeakMap,he=new WeakMap,o0=new WeakMap,iC=new WeakSet,Ou=function(g,C=!1){if(!g){this.remove();return}$(this,SC,g.bitmap),C||($(this,St,g.id),$(this,he,g.isSvg)),g.file&&$(this,a0,g.file.name),eg(this,iC,pN).call(this)},Uu=function(){if($(this,fa,null),this._uiManager.enableWaiting(!1),!!M(this,Hl)){if(this._uiManager.useNewAltTextWhenAddingImage&&this._uiManager.useNewAltTextFlow&&M(this,SC)){this._editToolbar.hide(),this._uiManager.editAltText(this,!0);return}if(!this._uiManager.useNewAltTextWhenAddingImage&&this._uiManager.useNewAltTextFlow&&M(this,SC)){this._reportTelemetry({action:"pdfjs.image.image_added",data:{alt_text_modal:!1,alt_text_type:"empty"}});try{this.mlGuessAltText()}catch{}}this.div.focus()}},wN=function(){if(M(this,St)){this._uiManager.enableWaiting(!0),this._uiManager.imageManager.getFromId(M(this,St)).then(i=>eg(this,iC,Ou).call(this,i,!0)).finally(()=>eg(this,iC,Uu).call(this));return}if(M(this,fl)){const i=M(this,fl);$(this,fl,null),this._uiManager.enableWaiting(!0),$(this,fa,this._uiManager.imageManager.getFromUrl(i).then(e=>eg(this,iC,Ou).call(this,e)).finally(()=>eg(this,iC,Uu).call(this)));return}if(M(this,Ha)){const i=M(this,Ha);$(this,Ha,null),this._uiManager.enableWaiting(!0),$(this,fa,this._uiManager.imageManager.getFromFile(i).then(e=>eg(this,iC,Ou).call(this,e)).finally(()=>eg(this,iC,Uu).call(this)));return}const g=document.createElement("input");g.type="file",g.accept=XX.join(",");const C=this._uiManager._signal;$(this,fa,new Promise(i=>{g.addEventListener("change",async()=>{if(!g.files||g.files.length===0)this.remove();else{this._uiManager.enableWaiting(!0);const e=await this._uiManager.imageManager.getFromFile(g.files[0]);this._reportTelemetry({action:"pdfjs.image.image_selected",data:{alt_text_modal:this._uiManager.useNewAltTextFlow}}),eg(this,iC,Ou).call(this,e)}i()},{signal:C}),g.addEventListener("cancel",()=>{this.remove(),i()},{signal:C})}).finally(()=>eg(this,iC,Uu).call(this))),g.click()},pN=function(){var d;const{div:g}=this;let{width:C,height:i}=M(this,SC);const[e,A]=this.pageDimensions,s=.75;if(this.width)C=this.width*e,i=this.height*A;else if(C>s*e||i>s*A){const o=Math.min(s*e/C,s*A/i);C*=o,i*=o}const[l,n]=this.parentDimensions;this.setDims(C*l/e,i*n/A),this._uiManager.enableWaiting(!1);const a=$(this,Hl,document.createElement("canvas"));a.setAttribute("role","img"),this.addContainer(a),this.width=C/e,this.height=i/A,(d=this._initialOptions)!=null&&d.isCentered?this.center():this.fixAndSetPosition(),this._initialOptions=null,(!this._uiManager.useNewAltTextWhenAddingImage||!this._uiManager.useNewAltTextFlow||this.annotationElementId)&&(g.hidden=!1),eg(this,iC,LS).call(this),M(this,o0)||(this.parent.addUndoableEditor(this),$(this,o0,!0)),this._reportTelemetry({action:"inserted_image"}),M(this,a0)&&this.div.setAttribute("aria-description",M(this,a0))},BN=function(g,C){const{width:i,height:e}=M(this,SC);let A=i,s=e,l=M(this,SC);for(;A>2*g||s>2*C;){const n=A,a=s;A>2*g&&(A=A>=16384?Math.floor(A/2)-1:Math.ceil(A/2)),s>2*C&&(s=s>=16384?Math.floor(s/2)-1:Math.ceil(s/2));const d=new OffscreenCanvas(A,s);d.getContext("2d").drawImage(l,0,0,n,a,0,0,A,s),l=d.transferToImageBitmap()}return l},LS=function(){const[g,C]=this.parentDimensions,{width:i,height:e}=this,A=new jl,s=Math.ceil(i*g*A.sx),l=Math.ceil(e*C*A.sy),n=M(this,Hl);if(!n||n.width===s&&n.height===l)return;n.width=s,n.height=l;const a=M(this,he)?M(this,SC):eg(this,iC,BN).call(this,s,l),d=n.getContext("2d");d.filter=this._uiManager.hcmFilter,d.drawImage(a,0,0,a.width,a.height,0,0,s,l)},WN=function(g){if(g){if(M(this,he)){const e=this._uiManager.imageManager.getSvgUrl(M(this,St));if(e)return e}const C=document.createElement("canvas");return{width:C.width,height:C.height}=M(this,SC),C.getContext("2d").drawImage(M(this,SC),0,0),C.toDataURL()}if(M(this,he)){const[C,i]=this.pageDimensions,e=Math.round(this.width*C*Ja.PDF_TO_CSS_UNITS),A=Math.round(this.height*i*Ja.PDF_TO_CSS_UNITS),s=new OffscreenCanvas(e,A);return s.getContext("2d").drawImage(M(this,SC),0,0,M(this,SC).width,M(this,SC).height,0,0,e,A),s.transferToImageBitmap()}return structuredClone(M(this,SC))},cIg=function(g){var s;const{pageIndex:C,accessibilityData:{altText:i}}=this._initialData,e=g.pageIndex===C,A=(((s=g.accessibilityData)==null?void 0:s.alt)||"")===i;return{isSame:!this._hasBeenMoved&&!this._hasBeenResized&&e&&A,isSameAltText:A}},CI(JS,"_type","stamp"),CI(JS,"_editorType",RI.STAMP);var Ec,c0,ws,Xa,Xl,Te,Sa,d0,Pc,BA,Sl,ri,Dl,eI,Da,kC,dIg,ts,TS,xS,yN;const cA=class cA{constructor({uiManager:I,pageIndex:g,div:C,structTreeLayer:i,accessibilityManager:e,annotationLayer:A,drawLayer:s,textLayer:l,viewport:n,l10n:a}){ig(this,kC);ig(this,Ec);ig(this,c0,!1);ig(this,ws,null);ig(this,Xa,null);ig(this,Xl,null);ig(this,Te,new Map);ig(this,Sa,!1);ig(this,d0,!1);ig(this,Pc,!1);ig(this,BA,null);ig(this,Sl,null);ig(this,ri,null);ig(this,Dl,null);ig(this,eI);const d=[...M(cA,Da).values()];if(!cA._initialized){cA._initialized=!0;for(const o of d)o.initialize(a,I)}I.registerEditorTypes(d),$(this,eI,I),this.pageIndex=g,this.div=C,$(this,Ec,e),$(this,ws,A),this.viewport=n,$(this,ri,l),this.drawLayer=s,this._structTree=i,M(this,eI).addLayer(this)}get isEmpty(){return M(this,Te).size===0}get isInvisible(){return this.isEmpty&&M(this,eI).getMode()===RI.NONE}updateToolbar(I){M(this,eI).updateToolbar(I)}updateMode(I=M(this,eI).getMode()){switch(eg(this,kC,yN).call(this),I){case RI.NONE:this.disableTextSelection(),this.togglePointerEvents(!1),this.toggleAnnotationLayerPointerEvents(!0),this.disableClick();return;case RI.INK:this.disableTextSelection(),this.togglePointerEvents(!0),this.enableClick();break;case RI.HIGHLIGHT:this.enableTextSelection(),this.togglePointerEvents(!1),this.disableClick();break;default:this.disableTextSelection(),this.togglePointerEvents(!0),this.enableClick()}this.toggleAnnotationLayerPointerEvents(!1);const{classList:g}=this.div;for(const C of M(cA,Da).values())g.toggle(`${C._type}Editing`,I===C._editorType);this.div.hidden=!1}hasTextLayer(I){var g;return I===((g=M(this,ri))==null?void 0:g.div)}setEditingState(I){M(this,eI).setEditingState(I)}addCommands(I){M(this,eI).addCommands(I)}cleanUndoStack(I){M(this,eI).cleanUndoStack(I)}toggleDrawing(I=!1){this.div.classList.toggle("drawing",!I)}togglePointerEvents(I=!1){this.div.classList.toggle("disabled",!I)}toggleAnnotationLayerPointerEvents(I=!1){var g;(g=M(this,ws))==null||g.div.classList.toggle("disabled",!I)}async enable(){$(this,Pc,!0),this.div.tabIndex=0,this.togglePointerEvents(!0);const I=new Set;for(const C of M(this,Te).values())C.enableEditing(),C.show(!0),C.annotationElementId&&(M(this,eI).removeChangedExistingAnnotation(C),I.add(C.annotationElementId));if(!M(this,ws)){$(this,Pc,!1);return}const g=M(this,ws).getEditableAnnotations();for(const C of g){if(C.hide(),M(this,eI).isDeletedAnnotationElement(C.data.id)||I.has(C.data.id))continue;const i=await this.deserialize(C);i&&(this.addOrRebuild(i),i.enableEditing())}$(this,Pc,!1)}disable(){var i;$(this,d0,!0),this.div.tabIndex=-1,this.togglePointerEvents(!1);const I=new Map,g=new Map;for(const e of M(this,Te).values())if(e.disableEditing(),!!e.annotationElementId){if(e.serialize()!==null){I.set(e.annotationElementId,e);continue}else g.set(e.annotationElementId,e);(i=this.getEditableAnnotation(e.annotationElementId))==null||i.show(),e.remove()}if(M(this,ws)){const e=M(this,ws).getEditableAnnotations();for(const A of e){const{id:s}=A.data;if(M(this,eI).isDeletedAnnotationElement(s))continue;let l=g.get(s);if(l){l.resetAnnotationElement(A),l.show(!1),A.show();continue}l=I.get(s),l&&(M(this,eI).addChangedExistingAnnotation(l),l.renderAnnotationElement(A)&&l.show(!1)),A.show()}}eg(this,kC,yN).call(this),this.isEmpty&&(this.div.hidden=!0);const{classList:C}=this.div;for(const e of M(cA,Da).values())C.remove(`${e._type}Editing`);this.disableTextSelection(),this.toggleAnnotationLayerPointerEvents(!0),$(this,d0,!1)}getEditableAnnotation(I){var g;return((g=M(this,ws))==null?void 0:g.getEditableAnnotation(I))||null}setActiveEditor(I){M(this,eI).getActive()!==I&&M(this,eI).setActiveEditor(I)}enableTextSelection(){var I;if(this.div.tabIndex=-1,(I=M(this,ri))!=null&&I.div&&!M(this,Dl)){$(this,Dl,new AbortController);const g=M(this,eI).combinedSignal(M(this,Dl));M(this,ri).div.addEventListener("pointerdown",eg(this,kC,dIg).bind(this),{signal:g}),M(this,ri).div.classList.add("highlighting")}}disableTextSelection(){var I;this.div.tabIndex=0,(I=M(this,ri))!=null&&I.div&&M(this,Dl)&&(M(this,Dl).abort(),$(this,Dl,null),M(this,ri).div.classList.remove("highlighting"))}enableClick(){if(M(this,Xa))return;$(this,Xa,new AbortController);const I=M(this,eI).combinedSignal(M(this,Xa));this.div.addEventListener("pointerdown",this.pointerdown.bind(this),{signal:I});const g=this.pointerup.bind(this);this.div.addEventListener("pointerup",g,{signal:I}),this.div.addEventListener("pointercancel",g,{signal:I})}disableClick(){var I;(I=M(this,Xa))==null||I.abort(),$(this,Xa,null)}attach(I){M(this,Te).set(I.id,I);const{annotationElementId:g}=I;g&&M(this,eI).isDeletedAnnotationElement(g)&&M(this,eI).removeDeletedAnnotationElement(I)}detach(I){var g;M(this,Te).delete(I.id),(g=M(this,Ec))==null||g.removePointerInTextLayer(I.contentDiv),!M(this,d0)&&I.annotationElementId&&M(this,eI).addDeletedAnnotationElement(I)}remove(I){this.detach(I),M(this,eI).removeEditor(I),I.div.remove(),I.isAttachedToDOM=!1}changeParent(I){var g;I.parent!==this&&(I.parent&&I.annotationElementId&&(M(this,eI).addDeletedAnnotationElement(I.annotationElementId),zC.deleteAnnotationElement(I),I.annotationElementId=null),this.attach(I),(g=I.parent)==null||g.detach(I),I.setParent(this),I.div&&I.isAttachedToDOM&&(I.div.remove(),this.div.append(I.div)))}add(I){if(!(I.parent===this&&I.isAttachedToDOM)){if(this.changeParent(I),M(this,eI).addEditor(I),this.attach(I),!I.isAttachedToDOM){const g=I.render();this.div.append(g),I.isAttachedToDOM=!0}I.fixAndSetPosition(),I.onceAdded(!M(this,Pc)),M(this,eI).addToAnnotationStorage(I),I._reportTelemetry(I.telemetryInitialData)}}moveEditorInDOM(I){var C;if(!I.isAttachedToDOM)return;const{activeElement:g}=document;I.div.contains(g)&&!M(this,Xl)&&(I._focusEventsAllowed=!1,$(this,Xl,setTimeout(()=>{$(this,Xl,null),I.div.contains(document.activeElement)?I._focusEventsAllowed=!0:(I.div.addEventListener("focusin",()=>{I._focusEventsAllowed=!0},{once:!0,signal:M(this,eI)._signal}),g.focus())},0))),I._structTreeParentId=(C=M(this,Ec))==null?void 0:C.moveElementInDOM(this.div,I.div,I.contentDiv,!0)}addOrRebuild(I){I.needsToBeRebuilt()?(I.parent||(I.parent=this),I.rebuild(),I.show()):this.add(I)}addUndoableEditor(I){const g=()=>I._uiManager.rebuild(I),C=()=>{I.remove()};this.addCommands({cmd:g,undo:C,mustExec:!1})}getNextId(){return M(this,eI).getId()}combinedSignal(I){return M(this,eI).combinedSignal(I)}canCreateNewEmptyEditor(){var I;return(I=M(this,kC,ts))==null?void 0:I.canCreateNewEmptyEditor()}async pasteEditor(I,g){M(this,eI).updateToolbar(I),await M(this,eI).updateMode(I);const{offsetX:C,offsetY:i}=eg(this,kC,xS).call(this),e=this.getNextId(),A=eg(this,kC,TS).call(this,{parent:this,id:e,x:C,y:i,uiManager:M(this,eI),isCentered:!0,...g});A&&this.add(A)}async deserialize(I){var g;return await((g=M(cA,Da).get(I.annotationType??I.annotationEditorType))==null?void 0:g.deserialize(I,this,M(this,eI)))||null}createAndAddNewEditor(I,g,C={}){const i=this.getNextId(),e=eg(this,kC,TS).call(this,{parent:this,id:i,x:I.offsetX,y:I.offsetY,uiManager:M(this,eI),isCentered:g,...C});return e&&this.add(e),e}addNewEditor(I={}){this.createAndAddNewEditor(eg(this,kC,xS).call(this),!0,I)}setSelected(I){M(this,eI).setSelected(I)}toggleSelected(I){M(this,eI).toggleSelected(I)}unselect(I){M(this,eI).unselect(I)}pointerup(I){var i;const{isMac:g}=gi.platform;if(I.button!==0||I.ctrlKey&&g||I.target!==this.div||!M(this,Sa)||($(this,Sa,!1),(i=M(this,kC,ts))!=null&&i.isDrawer&&M(this,kC,ts).supportMultipleDrawings))return;if(!M(this,c0)){$(this,c0,!0);return}const C=M(this,eI).getMode();if(C===RI.STAMP||C===RI.SIGNATURE){M(this,eI).unselectAll();return}this.createAndAddNewEditor(I,!1)}pointerdown(I){var i;if(M(this,eI).getMode()===RI.HIGHLIGHT&&this.enableTextSelection(),M(this,Sa)){$(this,Sa,!1);return}const{isMac:g}=gi.platform;if(I.button!==0||I.ctrlKey&&g||I.target!==this.div)return;if($(this,Sa,!0),(i=M(this,kC,ts))!=null&&i.isDrawer){this.startDrawingSession(I);return}const C=M(this,eI).getActive();$(this,c0,!C||C.isEmpty())}startDrawingSession(I){if(this.div.focus({preventScroll:!0}),M(this,BA)){M(this,kC,ts).startDrawing(this,M(this,eI),!1,I);return}M(this,eI).setCurrentDrawingSession(this),$(this,BA,new AbortController);const g=M(this,eI).combinedSignal(M(this,BA));this.div.addEventListener("blur",({relatedTarget:C})=>{C&&!this.div.contains(C)&&($(this,Sl,null),this.commitOrRemove())},{signal:g}),M(this,kC,ts).startDrawing(this,M(this,eI),!1,I)}pause(I){if(I){const{activeElement:g}=document;this.div.contains(g)&&$(this,Sl,g);return}M(this,Sl)&&setTimeout(()=>{var g;(g=M(this,Sl))==null||g.focus(),$(this,Sl,null)},0)}endDrawingSession(I=!1){return M(this,BA)?(M(this,eI).setCurrentDrawingSession(null),M(this,BA).abort(),$(this,BA,null),$(this,Sl,null),M(this,kC,ts).endDrawing(I)):null}findNewParent(I,g,C){const i=M(this,eI).findParent(g,C);return i===null||i===this?!1:(i.changeParent(I),!0)}commitOrRemove(){return M(this,BA)?(this.endDrawingSession(),!0):!1}onScaleChanging(){M(this,BA)&&M(this,kC,ts).onScaleChangingWhenDrawing(this)}destroy(){var I,g;this.commitOrRemove(),((I=M(this,eI).getActive())==null?void 0:I.parent)===this&&(M(this,eI).commitOrRemove(),M(this,eI).setActiveEditor(null)),M(this,Xl)&&(clearTimeout(M(this,Xl)),$(this,Xl,null));for(const C of M(this,Te).values())(g=M(this,Ec))==null||g.removePointerInTextLayer(C.contentDiv),C.setParent(null),C.isAttachedToDOM=!1,C.div.remove();this.div=null,M(this,Te).clear(),M(this,eI).removeLayer(this)}render({viewport:I}){this.viewport=I,Cd(this.div,I);for(const g of M(this,eI).getEditors(this.pageIndex))this.add(g),g.rebuild();this.updateMode()}update({viewport:I}){M(this,eI).commitOrRemove(),eg(this,kC,yN).call(this);const g=this.viewport.rotation,C=I.rotation;if(this.viewport=I,Cd(this.div,{rotation:C}),g!==C)for(const i of M(this,Te).values())i.rotate(C)}get pageDimensions(){const{pageWidth:I,pageHeight:g}=this.viewport.rawDims;return[I,g]}get scale(){return M(this,eI).viewParameters.realScale}};Ec=new WeakMap,c0=new WeakMap,ws=new WeakMap,Xa=new WeakMap,Xl=new WeakMap,Te=new WeakMap,Sa=new WeakMap,d0=new WeakMap,Pc=new WeakMap,BA=new WeakMap,Sl=new WeakMap,ri=new WeakMap,Dl=new WeakMap,eI=new WeakMap,Da=new WeakMap,kC=new WeakSet,dIg=function(I){M(this,eI).unselectAll();const{target:g}=I;if(g===M(this,ri).div||(g.getAttribute("role")==="img"||g.classList.contains("endOfContent"))&&M(this,ri).div.contains(g)){const{isMac:C}=gi.platform;if(I.button!==0||I.ctrlKey&&C)return;M(this,eI).showAllEditors("highlight",!0,!0),M(this,ri).div.classList.add("free"),this.toggleDrawing(),ON.startHighlighting(this,M(this,eI).direction==="ltr",{target:M(this,ri).div,x:I.x,y:I.y}),M(this,ri).div.addEventListener("pointerup",()=>{M(this,ri).div.classList.remove("free"),this.toggleDrawing(!0)},{once:!0,signal:M(this,eI)._signal}),I.preventDefault()}},ts=function(){return M(cA,Da).get(M(this,eI).getMode())},TS=function(I){const g=M(this,kC,ts);return g?new g.prototype.constructor(I):null},xS=function(){const{x:I,y:g,width:C,height:i}=this.div.getBoundingClientRect(),e=Math.max(0,I),A=Math.max(0,g),s=Math.min(window.innerWidth,I+C),l=Math.min(window.innerHeight,g+i),n=(e+s)/2-I,a=(A+l)/2-g,[d,o]=this.viewport.rotation%180===0?[n,a]:[a,n];return{offsetX:d,offsetY:o}},yN=function(){for(const I of M(this,Te).values())I.isEmpty()&&I.remove()},CI(cA,"_initialized",!1),ig(cA,Da,new Map([GS,XS,JS,ON,zS].map(I=>[I._editorType,I])));let vS=cA;var WA,Bi,_c,jZ,SV,rIg,Ms,QS,hIg,OS;const ut=class ut{constructor({pageIndex:I}){ig(this,Ms);ig(this,WA,null);ig(this,Bi,new Map);ig(this,_c,new Map);this.pageIndex=I}setParent(I){if(!M(this,WA)){$(this,WA,I);return}if(M(this,WA)!==I){if(M(this,Bi).size>0)for(const g of M(this,Bi).values())g.remove(),I.append(g);$(this,WA,I)}}static get _svgFactory(){return jI(this,"_svgFactory",new xN)}draw(I,g=!1,C=!1){const i=ui(ut,jZ)._++,e=eg(this,Ms,QS).call(this),A=ut._svgFactory.createElement("defs");e.append(A);const s=ut._svgFactory.createElement("path");A.append(s);const l=`path_p${this.pageIndex}_${i}`;s.setAttribute("id",l),s.setAttribute("vector-effect","non-scaling-stroke"),g&&M(this,_c).set(i,s);const n=C?eg(this,Ms,hIg).call(this,A,l):null,a=ut._svgFactory.createElement("use");return e.append(a),a.setAttribute("href",`#${l}`),this.updateProperties(e,I),M(this,Bi).set(i,e),{id:i,clipPathId:`url(#${n})`}}drawOutline(I,g){const C=ui(ut,jZ)._++,i=eg(this,Ms,QS).call(this),e=ut._svgFactory.createElement("defs");i.append(e);const A=ut._svgFactory.createElement("path");e.append(A);const s=`path_p${this.pageIndex}_${C}`;A.setAttribute("id",s),A.setAttribute("vector-effect","non-scaling-stroke");let l;if(g){const d=ut._svgFactory.createElement("mask");e.append(d),l=`mask_p${this.pageIndex}_${C}`,d.setAttribute("id",l),d.setAttribute("maskUnits","objectBoundingBox");const o=ut._svgFactory.createElement("rect");d.append(o),o.setAttribute("width","1"),o.setAttribute("height","1"),o.setAttribute("fill","white");const c=ut._svgFactory.createElement("use");d.append(c),c.setAttribute("href",`#${s}`),c.setAttribute("stroke","none"),c.setAttribute("fill","black"),c.setAttribute("fill-rule","nonzero"),c.classList.add("mask")}const n=ut._svgFactory.createElement("use");i.append(n),n.setAttribute("href",`#${s}`),l&&n.setAttribute("mask",`url(#${l})`);const a=n.cloneNode();return i.append(a),n.classList.add("mainOutline"),a.classList.add("secondaryOutline"),this.updateProperties(i,I),M(this,Bi).set(C,i),C}finalizeDraw(I,g){M(this,_c).delete(I),this.updateProperties(I,g)}updateProperties(I,g){var l;if(!g)return;const{root:C,bbox:i,rootClass:e,path:A}=g,s=typeof I=="number"?M(this,Bi).get(I):I;if(s){if(C&&eg(this,Ms,OS).call(this,s,C),i&&eg(l=ut,SV,rIg).call(l,s,i),e){const{classList:n}=s;for(const[a,d]of Object.entries(e))n.toggle(a,d)}if(A){const a=s.firstChild.firstChild;eg(this,Ms,OS).call(this,a,A)}}}updateParent(I,g){if(g===this)return;const C=M(this,Bi).get(I);C&&(M(g,WA).append(C),M(this,Bi).delete(I),M(g,Bi).set(I,C))}remove(I){M(this,_c).delete(I),M(this,WA)!==null&&(M(this,Bi).get(I).remove(),M(this,Bi).delete(I))}destroy(){$(this,WA,null);for(const I of M(this,Bi).values())I.remove();M(this,Bi).clear(),M(this,_c).clear()}};WA=new WeakMap,Bi=new WeakMap,_c=new WeakMap,jZ=new WeakMap,SV=new WeakSet,rIg=function(I,[g,C,i,e]){const{style:A}=I;A.top=`${100*C}%`,A.left=`${100*g}%`,A.width=`${100*i}%`,A.height=`${100*e}%`},Ms=new WeakSet,QS=function(){const I=ut._svgFactory.create(1,1,!0);return M(this,WA).append(I),I.setAttribute("aria-hidden",!0),I},hIg=function(I,g){const C=ut._svgFactory.createElement("clipPath");I.append(C);const i=`clip_${g}`;C.setAttribute("id",i),C.setAttribute("clipPathUnits","objectBoundingBox");const e=ut._svgFactory.createElement("use");return C.append(e),e.setAttribute("href",`#${g}`),e.classList.add("clip"),i},OS=function(I,g){for(const[C,i]of Object.entries(g))i===null?I.removeAttribute(C):I.setAttribute(C,i)},ig(ut,SV),ig(ut,jZ,0);let jS=ut;globalThis.pdfjsTestingUtils={HighlightOutliner:pS};GI.AbortException;GI.AnnotationEditorLayer;GI.AnnotationEditorParamsType;GI.AnnotationEditorType;GI.AnnotationEditorUIManager;GI.AnnotationLayer;GI.AnnotationMode;GI.AnnotationType;GI.ColorPicker;GI.DOMSVGFactory;GI.DrawLayer;GI.FeatureTest;var ldg=GI.GlobalWorkerOptions;GI.ImageKind;GI.InvalidPDFException;GI.MathClamp;GI.OPS;GI.OutputScale;GI.PDFDataRangeTransport;GI.PDFDateString;GI.PDFWorker;GI.PasswordResponses;GI.PermissionFlag;GI.PixelsPerInch;GI.RenderingCancelledException;GI.ResponseException;GI.SignatureExtractor;GI.SupportedImageMimeTypes;GI.TextLayer;GI.TouchManager;GI.Util;GI.VerbosityLevel;GI.XfaLayer;GI.build;GI.createValidAbsoluteUrl;GI.fetchData;var ndg=GI.getDocument;GI.getFilenameFromUrl;GI.getPdfFilenameFromUrl;GI.getUuid;GI.getXfaPageViewport;GI.isDataScheme;GI.isPdfFile;GI.isValidExplicitDest;GI.noContextMenu;GI.normalizeUnicode;GI.setLayerDimensions;GI.shadow;GI.stopEvent;GI.version;const m0=(t,I)=>{const g=t.__vccOpts||t;for(const[C,i]of I)g[C]=i;return g},adg={class:"home_wrap"},odg=["id"],cdg={__name:"PdfView",props:{data:Array},setup(t){ldg.workerSrc=new URL("data:text/javascript;base64,LyoqCiAqIEBsaWNzdGFydCBUaGUgZm9sbG93aW5nIGlzIHRoZSBlbnRpcmUgbGljZW5zZSBub3RpY2UgZm9yIHRoZQogKiBKYXZhU2NyaXB0IGNvZGUgaW4gdGhpcyBwYWdlCiAqCiAqIENvcHlyaWdodCAyMDI0IE1vemlsbGEgRm91bmRhdGlvbgogKgogKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICoKICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKgogKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKiBAbGljZW5kIFRoZSBhYm92ZSBpcyB0aGUgZW50aXJlIGxpY2Vuc2Ugbm90aWNlIGZvciB0aGUKICogSmF2YVNjcmlwdCBjb2RlIGluIHRoaXMgcGFnZQogKi8KCi8qKioqKiovIC8vIFRoZSByZXF1aXJlIHNjb3BlCi8qKioqKiovIHZhciBfX3dlYnBhY2tfcmVxdWlyZV9fID0ge307Ci8qKioqKiovIAovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqLyAvKiB3ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMgKi8KLyoqKioqKi8gKCgpID0+IHsKLyoqKioqKi8gCS8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHMKLyoqKioqKi8gCV9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7Ci8qKioqKiovIAkJZm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikgewovKioqKioqLyAJCQlpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHsKLyoqKioqKi8gCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7Ci8qKioqKiovIAkJCX0KLyoqKioqKi8gCQl9Ci8qKioqKiovIAl9OwovKioqKioqLyB9KSgpOwovKioqKioqLyAKLyoqKioqKi8gLyogd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCAqLwovKioqKioqLyAoKCkgPT4gewovKioqKioqLyAJX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKQovKioqKioqLyB9KSgpOwovKioqKioqLyAKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdmFyIF9fd2VicGFja19leHBvcnRzX18gPSBnbG9iYWxUaGlzLnBkZmpzV29ya2VyID0ge307CgovLyBFWFBPUlRTCl9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCB7CiAgV29ya2VyTWVzc2FnZUhhbmRsZXI6ICgpID0+ICgvKiByZWV4cG9ydCAqLyBXb3JrZXJNZXNzYWdlSGFuZGxlcikKfSk7Cgo7Ly8gLi9zcmMvc2hhcmVkL3V0aWwuanMKY29uc3QgaXNOb2RlSlMgPSB0eXBlb2YgcHJvY2VzcyA9PT0gIm9iamVjdCIgJiYgcHJvY2VzcyArICIiID09PSAiW29iamVjdCBwcm9jZXNzXSIgJiYgIXByb2Nlc3MudmVyc2lvbnMubncgJiYgIShwcm9jZXNzLnZlcnNpb25zLmVsZWN0cm9uICYmIHByb2Nlc3MudHlwZSAmJiBwcm9jZXNzLnR5cGUgIT09ICJicm93c2VyIik7CmNvbnN0IElERU5USVRZX01BVFJJWCA9IFsxLCAwLCAwLCAxLCAwLCAwXTsKY29uc3QgRk9OVF9JREVOVElUWV9NQVRSSVggPSBbMC4wMDEsIDAsIDAsIDAuMDAxLCAwLCAwXTsKY29uc3QgTElORV9GQUNUT1IgPSAxLjM1Owpjb25zdCBMSU5FX0RFU0NFTlRfRkFDVE9SID0gMC4zNTsKY29uc3QgQkFTRUxJTkVfRkFDVE9SID0gTElORV9ERVNDRU5UX0ZBQ1RPUiAvIExJTkVfRkFDVE9SOwpjb25zdCBSZW5kZXJpbmdJbnRlbnRGbGFnID0gewogIEFOWTogMHgwMSwKICBESVNQTEFZOiAweDAyLAogIFBSSU5UOiAweDA0LAogIFNBVkU6IDB4MDgsCiAgQU5OT1RBVElPTlNfRk9STVM6IDB4MTAsCiAgQU5OT1RBVElPTlNfU1RPUkFHRTogMHgyMCwKICBBTk5PVEFUSU9OU19ESVNBQkxFOiAweDQwLAogIElTX0VESVRJTkc6IDB4ODAsCiAgT1BMSVNUOiAweDEwMAp9Owpjb25zdCBBbm5vdGF0aW9uTW9kZSA9IHsKICBESVNBQkxFOiAwLAogIEVOQUJMRTogMSwKICBFTkFCTEVfRk9STVM6IDIsCiAgRU5BQkxFX1NUT1JBR0U6IDMKfTsKY29uc3QgQW5ub3RhdGlvbkVkaXRvclByZWZpeCA9ICJwZGZqc19pbnRlcm5hbF9lZGl0b3JfIjsKY29uc3QgQW5ub3RhdGlvbkVkaXRvclR5cGUgPSB7CiAgRElTQUJMRTogLTEsCiAgTk9ORTogMCwKICBGUkVFVEVYVDogMywKICBISUdITElHSFQ6IDksCiAgU1RBTVA6IDEzLAogIElOSzogMTUsCiAgU0lHTkFUVVJFOiAxMDEKfTsKY29uc3QgQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUgPSB7CiAgUkVTSVpFOiAxLAogIENSRUFURTogMiwKICBGUkVFVEVYVF9TSVpFOiAxMSwKICBGUkVFVEVYVF9DT0xPUjogMTIsCiAgRlJFRVRFWFRfT1BBQ0lUWTogMTMsCiAgSU5LX0NPTE9SOiAyMSwKICBJTktfVEhJQ0tORVNTOiAyMiwKICBJTktfT1BBQ0lUWTogMjMsCiAgSElHSExJR0hUX0NPTE9SOiAzMSwKICBISUdITElHSFRfREVGQVVMVF9DT0xPUjogMzIsCiAgSElHSExJR0hUX1RISUNLTkVTUzogMzMsCiAgSElHSExJR0hUX0ZSRUU6IDM0LAogIEhJR0hMSUdIVF9TSE9XX0FMTDogMzUsCiAgRFJBV19TVEVQOiA0MQp9Owpjb25zdCBQZXJtaXNzaW9uRmxhZyA9IHsKICBQUklOVDogMHgwNCwKICBNT0RJRllfQ09OVEVOVFM6IDB4MDgsCiAgQ09QWTogMHgxMCwKICBNT0RJRllfQU5OT1RBVElPTlM6IDB4MjAsCiAgRklMTF9JTlRFUkFDVElWRV9GT1JNUzogMHgxMDAsCiAgQ09QWV9GT1JfQUNDRVNTSUJJTElUWTogMHgyMDAsCiAgQVNTRU1CTEU6IDB4NDAwLAogIFBSSU5UX0hJR0hfUVVBTElUWTogMHg4MDAKfTsKY29uc3QgVGV4dFJlbmRlcmluZ01vZGUgPSB7CiAgRklMTDogMCwKICBTVFJPS0U6IDEsCiAgRklMTF9TVFJPS0U6IDIsCiAgSU5WSVNJQkxFOiAzLAogIEZJTExfQUREX1RPX1BBVEg6IDQsCiAgU1RST0tFX0FERF9UT19QQVRIOiA1LAogIEZJTExfU1RST0tFX0FERF9UT19QQVRIOiA2LAogIEFERF9UT19QQVRIOiA3LAogIEZJTExfU1RST0tFX01BU0s6IDMsCiAgQUREX1RPX1BBVEhfRkxBRzogNAp9Owpjb25zdCBJbWFnZUtpbmQgPSB7CiAgR1JBWVNDQUxFXzFCUFA6IDEsCiAgUkdCXzI0QlBQOiAyLAogIFJHQkFfMzJCUFA6IDMKfTsKY29uc3QgQW5ub3RhdGlvblR5cGUgPSB7CiAgVEVYVDogMSwKICBMSU5LOiAyLAogIEZSRUVURVhUOiAzLAogIExJTkU6IDQsCiAgU1FVQVJFOiA1LAogIENJUkNMRTogNiwKICBQT0xZR09OOiA3LAogIFBPTFlMSU5FOiA4LAogIEhJR0hMSUdIVDogOSwKICBVTkRFUkxJTkU6IDEwLAogIFNRVUlHR0xZOiAxMSwKICBTVFJJS0VPVVQ6IDEyLAogIFNUQU1QOiAxMywKICBDQVJFVDogMTQsCiAgSU5LOiAxNSwKICBQT1BVUDogMTYsCiAgRklMRUFUVEFDSE1FTlQ6IDE3LAogIFNPVU5EOiAxOCwKICBNT1ZJRTogMTksCiAgV0lER0VUOiAyMCwKICBTQ1JFRU46IDIxLAogIFBSSU5URVJNQVJLOiAyMiwKICBUUkFQTkVUOiAyMywKICBXQVRFUk1BUks6IDI0LAogIFRIUkVFRDogMjUsCiAgUkVEQUNUOiAyNgp9Owpjb25zdCBBbm5vdGF0aW9uUmVwbHlUeXBlID0gewogIEdST1VQOiAiR3JvdXAiLAogIFJFUExZOiAiUiIKfTsKY29uc3QgQW5ub3RhdGlvbkZsYWcgPSB7CiAgSU5WSVNJQkxFOiAweDAxLAogIEhJRERFTjogMHgwMiwKICBQUklOVDogMHgwNCwKICBOT1pPT006IDB4MDgsCiAgTk9ST1RBVEU6IDB4MTAsCiAgTk9WSUVXOiAweDIwLAogIFJFQURPTkxZOiAweDQwLAogIExPQ0tFRDogMHg4MCwKICBUT0dHTEVOT1ZJRVc6IDB4MTAwLAogIExPQ0tFRENPTlRFTlRTOiAweDIwMAp9Owpjb25zdCBBbm5vdGF0aW9uRmllbGRGbGFnID0gewogIFJFQURPTkxZOiAweDAwMDAwMDEsCiAgUkVRVUlSRUQ6IDB4MDAwMDAwMiwKICBOT0VYUE9SVDogMHgwMDAwMDA0LAogIE1VTFRJTElORTogMHgwMDAxMDAwLAogIFBBU1NXT1JEOiAweDAwMDIwMDAsCiAgTk9UT0dHTEVUT09GRjogMHgwMDA0MDAwLAogIFJBRElPOiAweDAwMDgwMDAsCiAgUFVTSEJVVFRPTjogMHgwMDEwMDAwLAogIENPTUJPOiAweDAwMjAwMDAsCiAgRURJVDogMHgwMDQwMDAwLAogIFNPUlQ6IDB4MDA4MDAwMCwKICBGSUxFU0VMRUNUOiAweDAxMDAwMDAsCiAgTVVMVElTRUxFQ1Q6IDB4MDIwMDAwMCwKICBET05PVFNQRUxMQ0hFQ0s6IDB4MDQwMDAwMCwKICBET05PVFNDUk9MTDogMHgwODAwMDAwLAogIENPTUI6IDB4MTAwMDAwMCwKICBSSUNIVEVYVDogMHgyMDAwMDAwLAogIFJBRElPU0lOVU5JU09OOiAweDIwMDAwMDAsCiAgQ09NTUlUT05TRUxDSEFOR0U6IDB4NDAwMDAwMAp9Owpjb25zdCBBbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlID0gewogIFNPTElEOiAxLAogIERBU0hFRDogMiwKICBCRVZFTEVEOiAzLAogIElOU0VUOiA0LAogIFVOREVSTElORTogNQp9Owpjb25zdCBBbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlID0gewogIEU6ICJNb3VzZSBFbnRlciIsCiAgWDogIk1vdXNlIEV4aXQiLAogIEQ6ICJNb3VzZSBEb3duIiwKICBVOiAiTW91c2UgVXAiLAogIEZvOiAiRm9jdXMiLAogIEJsOiAiQmx1ciIsCiAgUE86ICJQYWdlT3BlbiIsCiAgUEM6ICJQYWdlQ2xvc2UiLAogIFBWOiAiUGFnZVZpc2libGUiLAogIFBJOiAiUGFnZUludmlzaWJsZSIsCiAgSzogIktleXN0cm9rZSIsCiAgRjogIkZvcm1hdCIsCiAgVjogIlZhbGlkYXRlIiwKICBDOiAiQ2FsY3VsYXRlIgp9Owpjb25zdCBEb2N1bWVudEFjdGlvbkV2ZW50VHlwZSA9IHsKICBXQzogIldpbGxDbG9zZSIsCiAgV1M6ICJXaWxsU2F2ZSIsCiAgRFM6ICJEaWRTYXZlIiwKICBXUDogIldpbGxQcmludCIsCiAgRFA6ICJEaWRQcmludCIKfTsKY29uc3QgUGFnZUFjdGlvbkV2ZW50VHlwZSA9IHsKICBPOiAiUGFnZU9wZW4iLAogIEM6ICJQYWdlQ2xvc2UiCn07CmNvbnN0IFZlcmJvc2l0eUxldmVsID0gewogIEVSUk9SUzogMCwKICBXQVJOSU5HUzogMSwKICBJTkZPUzogNQp9Owpjb25zdCBPUFMgPSB7CiAgZGVwZW5kZW5jeTogMSwKICBzZXRMaW5lV2lkdGg6IDIsCiAgc2V0TGluZUNhcDogMywKICBzZXRMaW5lSm9pbjogNCwKICBzZXRNaXRlckxpbWl0OiA1LAogIHNldERhc2g6IDYsCiAgc2V0UmVuZGVyaW5nSW50ZW50OiA3LAogIHNldEZsYXRuZXNzOiA4LAogIHNldEdTdGF0ZTogOSwKICBzYXZlOiAxMCwKICByZXN0b3JlOiAxMSwKICB0cmFuc2Zvcm06IDEyLAogIG1vdmVUbzogMTMsCiAgbGluZVRvOiAxNCwKICBjdXJ2ZVRvOiAxNSwKICBjdXJ2ZVRvMjogMTYsCiAgY3VydmVUbzM6IDE3LAogIGNsb3NlUGF0aDogMTgsCiAgcmVjdGFuZ2xlOiAxOSwKICBzdHJva2U6IDIwLAogIGNsb3NlU3Ryb2tlOiAyMSwKICBmaWxsOiAyMiwKICBlb0ZpbGw6IDIzLAogIGZpbGxTdHJva2U6IDI0LAogIGVvRmlsbFN0cm9rZTogMjUsCiAgY2xvc2VGaWxsU3Ryb2tlOiAyNiwKICBjbG9zZUVPRmlsbFN0cm9rZTogMjcsCiAgZW5kUGF0aDogMjgsCiAgY2xpcDogMjksCiAgZW9DbGlwOiAzMCwKICBiZWdpblRleHQ6IDMxLAogIGVuZFRleHQ6IDMyLAogIHNldENoYXJTcGFjaW5nOiAzMywKICBzZXRXb3JkU3BhY2luZzogMzQsCiAgc2V0SFNjYWxlOiAzNSwKICBzZXRMZWFkaW5nOiAzNiwKICBzZXRGb250OiAzNywKICBzZXRUZXh0UmVuZGVyaW5nTW9kZTogMzgsCiAgc2V0VGV4dFJpc2U6IDM5LAogIG1vdmVUZXh0OiA0MCwKICBzZXRMZWFkaW5nTW92ZVRleHQ6IDQxLAogIHNldFRleHRNYXRyaXg6IDQyLAogIG5leHRMaW5lOiA0MywKICBzaG93VGV4dDogNDQsCiAgc2hvd1NwYWNlZFRleHQ6IDQ1LAogIG5leHRMaW5lU2hvd1RleHQ6IDQ2LAogIG5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0OiA0NywKICBzZXRDaGFyV2lkdGg6IDQ4LAogIHNldENoYXJXaWR0aEFuZEJvdW5kczogNDksCiAgc2V0U3Ryb2tlQ29sb3JTcGFjZTogNTAsCiAgc2V0RmlsbENvbG9yU3BhY2U6IDUxLAogIHNldFN0cm9rZUNvbG9yOiA1MiwKICBzZXRTdHJva2VDb2xvck46IDUzLAogIHNldEZpbGxDb2xvcjogNTQsCiAgc2V0RmlsbENvbG9yTjogNTUsCiAgc2V0U3Ryb2tlR3JheTogNTYsCiAgc2V0RmlsbEdyYXk6IDU3LAogIHNldFN0cm9rZVJHQkNvbG9yOiA1OCwKICBzZXRGaWxsUkdCQ29sb3I6IDU5LAogIHNldFN0cm9rZUNNWUtDb2xvcjogNjAsCiAgc2V0RmlsbENNWUtDb2xvcjogNjEsCiAgc2hhZGluZ0ZpbGw6IDYyLAogIGJlZ2luSW5saW5lSW1hZ2U6IDYzLAogIGJlZ2luSW1hZ2VEYXRhOiA2NCwKICBlbmRJbmxpbmVJbWFnZTogNjUsCiAgcGFpbnRYT2JqZWN0OiA2NiwKICBtYXJrUG9pbnQ6IDY3LAogIG1hcmtQb2ludFByb3BzOiA2OCwKICBiZWdpbk1hcmtlZENvbnRlbnQ6IDY5LAogIGJlZ2luTWFya2VkQ29udGVudFByb3BzOiA3MCwKICBlbmRNYXJrZWRDb250ZW50OiA3MSwKICBiZWdpbkNvbXBhdDogNzIsCiAgZW5kQ29tcGF0OiA3MywKICBwYWludEZvcm1YT2JqZWN0QmVnaW46IDc0LAogIHBhaW50Rm9ybVhPYmplY3RFbmQ6IDc1LAogIGJlZ2luR3JvdXA6IDc2LAogIGVuZEdyb3VwOiA3NywKICBiZWdpbkFubm90YXRpb246IDgwLAogIGVuZEFubm90YXRpb246IDgxLAogIHBhaW50SW1hZ2VNYXNrWE9iamVjdDogODMsCiAgcGFpbnRJbWFnZU1hc2tYT2JqZWN0R3JvdXA6IDg0LAogIHBhaW50SW1hZ2VYT2JqZWN0OiA4NSwKICBwYWludElubGluZUltYWdlWE9iamVjdDogODYsCiAgcGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cDogODcsCiAgcGFpbnRJbWFnZVhPYmplY3RSZXBlYXQ6IDg4LAogIHBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdDogODksCiAgcGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrOiA5MCwKICBjb25zdHJ1Y3RQYXRoOiA5MSwKICBzZXRTdHJva2VUcmFuc3BhcmVudDogOTIsCiAgc2V0RmlsbFRyYW5zcGFyZW50OiA5Mwp9Owpjb25zdCBEcmF3T1BTID0gewogIG1vdmVUbzogMCwKICBsaW5lVG86IDEsCiAgY3VydmVUbzogMiwKICBjbG9zZVBhdGg6IDMKfTsKY29uc3QgUGFzc3dvcmRSZXNwb25zZXMgPSB7CiAgTkVFRF9QQVNTV09SRDogMSwKICBJTkNPUlJFQ1RfUEFTU1dPUkQ6IDIKfTsKbGV0IHZlcmJvc2l0eSA9IFZlcmJvc2l0eUxldmVsLldBUk5JTkdTOwpmdW5jdGlvbiBzZXRWZXJib3NpdHlMZXZlbChsZXZlbCkgewogIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGxldmVsKSkgewogICAgdmVyYm9zaXR5ID0gbGV2ZWw7CiAgfQp9CmZ1bmN0aW9uIGdldFZlcmJvc2l0eUxldmVsKCkgewogIHJldHVybiB2ZXJib3NpdHk7Cn0KZnVuY3Rpb24gaW5mbyhtc2cpIHsKICBpZiAodmVyYm9zaXR5ID49IFZlcmJvc2l0eUxldmVsLklORk9TKSB7CiAgICBjb25zb2xlLmxvZyhgSW5mbzogJHttc2d9YCk7CiAgfQp9CmZ1bmN0aW9uIHdhcm4obXNnKSB7CiAgaWYgKHZlcmJvc2l0eSA+PSBWZXJib3NpdHlMZXZlbC5XQVJOSU5HUykgewogICAgY29uc29sZS5sb2coYFdhcm5pbmc6ICR7bXNnfWApOwogIH0KfQpmdW5jdGlvbiB1bnJlYWNoYWJsZShtc2cpIHsKICB0aHJvdyBuZXcgRXJyb3IobXNnKTsKfQpmdW5jdGlvbiBhc3NlcnQoY29uZCwgbXNnKSB7CiAgaWYgKCFjb25kKSB7CiAgICB1bnJlYWNoYWJsZShtc2cpOwogIH0KfQpmdW5jdGlvbiBfaXNWYWxpZFByb3RvY29sKHVybCkgewogIHN3aXRjaCAodXJsPy5wcm90b2NvbCkgewogICAgY2FzZSAiaHR0cDoiOgogICAgY2FzZSAiaHR0cHM6IjoKICAgIGNhc2UgImZ0cDoiOgogICAgY2FzZSAibWFpbHRvOiI6CiAgICBjYXNlICJ0ZWw6IjoKICAgICAgcmV0dXJuIHRydWU7CiAgICBkZWZhdWx0OgogICAgICByZXR1cm4gZmFsc2U7CiAgfQp9CmZ1bmN0aW9uIGNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwodXJsLCBiYXNlVXJsID0gbnVsbCwgb3B0aW9ucyA9IG51bGwpIHsKICBpZiAoIXVybCkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIGlmIChvcHRpb25zICYmIHR5cGVvZiB1cmwgPT09ICJzdHJpbmciKSB7CiAgICBpZiAob3B0aW9ucy5hZGREZWZhdWx0UHJvdG9jb2wgJiYgdXJsLnN0YXJ0c1dpdGgoInd3dy4iKSkgewogICAgICBjb25zdCBkb3RzID0gdXJsLm1hdGNoKC9cLi9nKTsKICAgICAgaWYgKGRvdHM/Lmxlbmd0aCA+PSAyKSB7CiAgICAgICAgdXJsID0gYGh0dHA6Ly8ke3VybH1gOwogICAgICB9CiAgICB9CiAgICBpZiAob3B0aW9ucy50cnlDb252ZXJ0RW5jb2RpbmcpIHsKICAgICAgdHJ5IHsKICAgICAgICB1cmwgPSBzdHJpbmdUb1VURjhTdHJpbmcodXJsKTsKICAgICAgfSBjYXRjaCB7fQogICAgfQogIH0KICBjb25zdCBhYnNvbHV0ZVVybCA9IGJhc2VVcmwgPyBVUkwucGFyc2UodXJsLCBiYXNlVXJsKSA6IFVSTC5wYXJzZSh1cmwpOwogIHJldHVybiBfaXNWYWxpZFByb3RvY29sKGFic29sdXRlVXJsKSA/IGFic29sdXRlVXJsIDogbnVsbDsKfQpmdW5jdGlvbiBzaGFkb3cob2JqLCBwcm9wLCB2YWx1ZSwgbm9uU2VyaWFsaXphYmxlID0gZmFsc2UpIHsKICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBwcm9wLCB7CiAgICB2YWx1ZSwKICAgIGVudW1lcmFibGU6ICFub25TZXJpYWxpemFibGUsCiAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICB3cml0YWJsZTogZmFsc2UKICB9KTsKICByZXR1cm4gdmFsdWU7Cn0KY29uc3QgQmFzZUV4Y2VwdGlvbiA9IGZ1bmN0aW9uIEJhc2VFeGNlcHRpb25DbG9zdXJlKCkgewogIGZ1bmN0aW9uIEJhc2VFeGNlcHRpb24obWVzc2FnZSwgbmFtZSkgewogICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgfQogIEJhc2VFeGNlcHRpb24ucHJvdG90eXBlID0gbmV3IEVycm9yKCk7CiAgQmFzZUV4Y2VwdGlvbi5jb25zdHJ1Y3RvciA9IEJhc2VFeGNlcHRpb247CiAgcmV0dXJuIEJhc2VFeGNlcHRpb247Cn0oKTsKY2xhc3MgUGFzc3dvcmRFeGNlcHRpb24gZXh0ZW5kcyBCYXNlRXhjZXB0aW9uIHsKICBjb25zdHJ1Y3Rvcihtc2csIGNvZGUpIHsKICAgIHN1cGVyKG1zZywgIlBhc3N3b3JkRXhjZXB0aW9uIik7CiAgICB0aGlzLmNvZGUgPSBjb2RlOwogIH0KfQpjbGFzcyBVbmtub3duRXJyb3JFeGNlcHRpb24gZXh0ZW5kcyBCYXNlRXhjZXB0aW9uIHsKICBjb25zdHJ1Y3Rvcihtc2csIGRldGFpbHMpIHsKICAgIHN1cGVyKG1zZywgIlVua25vd25FcnJvckV4Y2VwdGlvbiIpOwogICAgdGhpcy5kZXRhaWxzID0gZGV0YWlsczsKICB9Cn0KY2xhc3MgSW52YWxpZFBERkV4Y2VwdGlvbiBleHRlbmRzIEJhc2VFeGNlcHRpb24gewogIGNvbnN0cnVjdG9yKG1zZykgewogICAgc3VwZXIobXNnLCAiSW52YWxpZFBERkV4Y2VwdGlvbiIpOwogIH0KfQpjbGFzcyBSZXNwb25zZUV4Y2VwdGlvbiBleHRlbmRzIEJhc2VFeGNlcHRpb24gewogIGNvbnN0cnVjdG9yKG1zZywgc3RhdHVzLCBtaXNzaW5nKSB7CiAgICBzdXBlcihtc2csICJSZXNwb25zZUV4Y2VwdGlvbiIpOwogICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7CiAgICB0aGlzLm1pc3NpbmcgPSBtaXNzaW5nOwogIH0KfQpjbGFzcyBGb3JtYXRFcnJvciBleHRlbmRzIEJhc2VFeGNlcHRpb24gewogIGNvbnN0cnVjdG9yKG1zZykgewogICAgc3VwZXIobXNnLCAiRm9ybWF0RXJyb3IiKTsKICB9Cn0KY2xhc3MgQWJvcnRFeGNlcHRpb24gZXh0ZW5kcyBCYXNlRXhjZXB0aW9uIHsKICBjb25zdHJ1Y3Rvcihtc2cpIHsKICAgIHN1cGVyKG1zZywgIkFib3J0RXhjZXB0aW9uIik7CiAgfQp9CmZ1bmN0aW9uIGJ5dGVzVG9TdHJpbmcoYnl0ZXMpIHsKICBpZiAodHlwZW9mIGJ5dGVzICE9PSAib2JqZWN0IiB8fCBieXRlcz8ubGVuZ3RoID09PSB1bmRlZmluZWQpIHsKICAgIHVucmVhY2hhYmxlKCJJbnZhbGlkIGFyZ3VtZW50IGZvciBieXRlc1RvU3RyaW5nIik7CiAgfQogIGNvbnN0IGxlbmd0aCA9IGJ5dGVzLmxlbmd0aDsKICBjb25zdCBNQVhfQVJHVU1FTlRfQ09VTlQgPSA4MTkyOwogIGlmIChsZW5ndGggPCBNQVhfQVJHVU1FTlRfQ09VTlQpIHsKICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGJ5dGVzKTsKICB9CiAgY29uc3Qgc3RyQnVmID0gW107CiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gTUFYX0FSR1VNRU5UX0NPVU5UKSB7CiAgICBjb25zdCBjaHVua0VuZCA9IE1hdGgubWluKGkgKyBNQVhfQVJHVU1FTlRfQ09VTlQsIGxlbmd0aCk7CiAgICBjb25zdCBjaHVuayA9IGJ5dGVzLnN1YmFycmF5KGksIGNodW5rRW5kKTsKICAgIHN0ckJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgY2h1bmspKTsKICB9CiAgcmV0dXJuIHN0ckJ1Zi5qb2luKCIiKTsKfQpmdW5jdGlvbiBzdHJpbmdUb0J5dGVzKHN0cikgewogIGlmICh0eXBlb2Ygc3RyICE9PSAic3RyaW5nIikgewogICAgdW5yZWFjaGFibGUoIkludmFsaWQgYXJndW1lbnQgZm9yIHN0cmluZ1RvQnl0ZXMiKTsKICB9CiAgY29uc3QgbGVuZ3RoID0gc3RyLmxlbmd0aDsKICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7CiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgYnl0ZXNbaV0gPSBzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmY7CiAgfQogIHJldHVybiBieXRlczsKfQpmdW5jdGlvbiBzdHJpbmczMih2YWx1ZSkgewogIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHZhbHVlID4+IDI0ICYgMHhmZiwgdmFsdWUgPj4gMTYgJiAweGZmLCB2YWx1ZSA+PiA4ICYgMHhmZiwgdmFsdWUgJiAweGZmKTsKfQpmdW5jdGlvbiBvYmplY3RTaXplKG9iaikgewogIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aDsKfQpmdW5jdGlvbiBvYmplY3RGcm9tTWFwKG1hcCkgewogIGNvbnN0IG9iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgbWFwKSB7CiAgICBvYmpba2V5XSA9IHZhbHVlOwogIH0KICByZXR1cm4gb2JqOwp9CmZ1bmN0aW9uIGlzTGl0dGxlRW5kaWFuKCkgewogIGNvbnN0IGJ1ZmZlcjggPSBuZXcgVWludDhBcnJheSg0KTsKICBidWZmZXI4WzBdID0gMTsKICBjb25zdCB2aWV3MzIgPSBuZXcgVWludDMyQXJyYXkoYnVmZmVyOC5idWZmZXIsIDAsIDEpOwogIHJldHVybiB2aWV3MzJbMF0gPT09IDE7Cn0KZnVuY3Rpb24gaXNFdmFsU3VwcG9ydGVkKCkgewogIHRyeSB7CiAgICBuZXcgRnVuY3Rpb24oIiIpOwogICAgcmV0dXJuIHRydWU7CiAgfSBjYXRjaCB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9CmNsYXNzIEZlYXR1cmVUZXN0IHsKICBzdGF0aWMgZ2V0IGlzTGl0dGxlRW5kaWFuKCkgewogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAiaXNMaXR0bGVFbmRpYW4iLCBpc0xpdHRsZUVuZGlhbigpKTsKICB9CiAgc3RhdGljIGdldCBpc0V2YWxTdXBwb3J0ZWQoKSB7CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJpc0V2YWxTdXBwb3J0ZWQiLCBpc0V2YWxTdXBwb3J0ZWQoKSk7CiAgfQogIHN0YXRpYyBnZXQgaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQoKSB7CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCIsIHR5cGVvZiBPZmZzY3JlZW5DYW52YXMgIT09ICJ1bmRlZmluZWQiKTsKICB9CiAgc3RhdGljIGdldCBpc0ltYWdlRGVjb2RlclN1cHBvcnRlZCgpIHsKICAgIHJldHVybiBzaGFkb3codGhpcywgImlzSW1hZ2VEZWNvZGVyU3VwcG9ydGVkIiwgdHlwZW9mIEltYWdlRGVjb2RlciAhPT0gInVuZGVmaW5lZCIpOwogIH0KICBzdGF0aWMgZ2V0IHBsYXRmb3JtKCkgewogICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICJ1bmRlZmluZWQiICYmIHR5cGVvZiBuYXZpZ2F0b3I/LnBsYXRmb3JtID09PSAic3RyaW5nIiAmJiB0eXBlb2YgbmF2aWdhdG9yPy51c2VyQWdlbnQgPT09ICJzdHJpbmciKSB7CiAgICAgIGNvbnN0IHsKICAgICAgICBwbGF0Zm9ybSwKICAgICAgICB1c2VyQWdlbnQKICAgICAgfSA9IG5hdmlnYXRvcjsKICAgICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAicGxhdGZvcm0iLCB7CiAgICAgICAgaXNBbmRyb2lkOiB1c2VyQWdlbnQuaW5jbHVkZXMoIkFuZHJvaWQiKSwKICAgICAgICBpc0xpbnV4OiBwbGF0Zm9ybS5pbmNsdWRlcygiTGludXgiKSwKICAgICAgICBpc01hYzogcGxhdGZvcm0uaW5jbHVkZXMoIk1hYyIpLAogICAgICAgIGlzV2luZG93czogcGxhdGZvcm0uaW5jbHVkZXMoIldpbiIpLAogICAgICAgIGlzRmlyZWZveDogdXNlckFnZW50LmluY2x1ZGVzKCJGaXJlZm94IikKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJwbGF0Zm9ybSIsIHsKICAgICAgaXNBbmRyb2lkOiBmYWxzZSwKICAgICAgaXNMaW51eDogZmFsc2UsCiAgICAgIGlzTWFjOiBmYWxzZSwKICAgICAgaXNXaW5kb3dzOiBmYWxzZSwKICAgICAgaXNGaXJlZm94OiBmYWxzZQogICAgfSk7CiAgfQogIHN0YXRpYyBnZXQgaXNDU1NSb3VuZFN1cHBvcnRlZCgpIHsKICAgIHJldHVybiBzaGFkb3codGhpcywgImlzQ1NTUm91bmRTdXBwb3J0ZWQiLCBnbG9iYWxUaGlzLkNTUz8uc3VwcG9ydHM/Ligid2lkdGg6IHJvdW5kKDEuNXB4LCAxcHgpIikpOwogIH0KfQpjb25zdCBoZXhOdW1iZXJzID0gQXJyYXkuZnJvbShBcnJheSgyNTYpLmtleXMoKSwgbiA9PiBuLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAiMCIpKTsKY2xhc3MgVXRpbCB7CiAgc3RhdGljIG1ha2VIZXhDb2xvcihyLCBnLCBiKSB7CiAgICByZXR1cm4gYCMke2hleE51bWJlcnNbcl19JHtoZXhOdW1iZXJzW2ddfSR7aGV4TnVtYmVyc1tiXX1gOwogIH0KICBzdGF0aWMgdHJhbnNmb3JtKG0xLCBtMikgewogICAgcmV0dXJuIFttMVswXSAqIG0yWzBdICsgbTFbMl0gKiBtMlsxXSwgbTFbMV0gKiBtMlswXSArIG0xWzNdICogbTJbMV0sIG0xWzBdICogbTJbMl0gKyBtMVsyXSAqIG0yWzNdLCBtMVsxXSAqIG0yWzJdICsgbTFbM10gKiBtMlszXSwgbTFbMF0gKiBtMls0XSArIG0xWzJdICogbTJbNV0gKyBtMVs0XSwgbTFbMV0gKiBtMls0XSArIG0xWzNdICogbTJbNV0gKyBtMVs1XV07CiAgfQogIHN0YXRpYyBhcHBseVRyYW5zZm9ybShwLCBtKSB7CiAgICBjb25zdCB4dCA9IHBbMF0gKiBtWzBdICsgcFsxXSAqIG1bMl0gKyBtWzRdOwogICAgY29uc3QgeXQgPSBwWzBdICogbVsxXSArIHBbMV0gKiBtWzNdICsgbVs1XTsKICAgIHJldHVybiBbeHQsIHl0XTsKICB9CiAgc3RhdGljIGFwcGx5SW52ZXJzZVRyYW5zZm9ybShwLCBtKSB7CiAgICBjb25zdCBkID0gbVswXSAqIG1bM10gLSBtWzFdICogbVsyXTsKICAgIGNvbnN0IHh0ID0gKHBbMF0gKiBtWzNdIC0gcFsxXSAqIG1bMl0gKyBtWzJdICogbVs1XSAtIG1bNF0gKiBtWzNdKSAvIGQ7CiAgICBjb25zdCB5dCA9ICgtcFswXSAqIG1bMV0gKyBwWzFdICogbVswXSArIG1bNF0gKiBtWzFdIC0gbVs1XSAqIG1bMF0pIC8gZDsKICAgIHJldHVybiBbeHQsIHl0XTsKICB9CiAgc3RhdGljIGdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KHIsIG0pIHsKICAgIGNvbnN0IHAxID0gdGhpcy5hcHBseVRyYW5zZm9ybShyLCBtKTsKICAgIGNvbnN0IHAyID0gdGhpcy5hcHBseVRyYW5zZm9ybShyLnNsaWNlKDIsIDQpLCBtKTsKICAgIGNvbnN0IHAzID0gdGhpcy5hcHBseVRyYW5zZm9ybShbclswXSwgclszXV0sIG0pOwogICAgY29uc3QgcDQgPSB0aGlzLmFwcGx5VHJhbnNmb3JtKFtyWzJdLCByWzFdXSwgbSk7CiAgICByZXR1cm4gW01hdGgubWluKHAxWzBdLCBwMlswXSwgcDNbMF0sIHA0WzBdKSwgTWF0aC5taW4ocDFbMV0sIHAyWzFdLCBwM1sxXSwgcDRbMV0pLCBNYXRoLm1heChwMVswXSwgcDJbMF0sIHAzWzBdLCBwNFswXSksIE1hdGgubWF4KHAxWzFdLCBwMlsxXSwgcDNbMV0sIHA0WzFdKV07CiAgfQogIHN0YXRpYyBpbnZlcnNlVHJhbnNmb3JtKG0pIHsKICAgIGNvbnN0IGQgPSBtWzBdICogbVszXSAtIG1bMV0gKiBtWzJdOwogICAgcmV0dXJuIFttWzNdIC8gZCwgLW1bMV0gLyBkLCAtbVsyXSAvIGQsIG1bMF0gLyBkLCAobVsyXSAqIG1bNV0gLSBtWzRdICogbVszXSkgLyBkLCAobVs0XSAqIG1bMV0gLSBtWzVdICogbVswXSkgLyBkXTsKICB9CiAgc3RhdGljIHNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKG0pIHsKICAgIGNvbnN0IHRyYW5zcG9zZSA9IFttWzBdLCBtWzJdLCBtWzFdLCBtWzNdXTsKICAgIGNvbnN0IGEgPSBtWzBdICogdHJhbnNwb3NlWzBdICsgbVsxXSAqIHRyYW5zcG9zZVsyXTsKICAgIGNvbnN0IGIgPSBtWzBdICogdHJhbnNwb3NlWzFdICsgbVsxXSAqIHRyYW5zcG9zZVszXTsKICAgIGNvbnN0IGMgPSBtWzJdICogdHJhbnNwb3NlWzBdICsgbVszXSAqIHRyYW5zcG9zZVsyXTsKICAgIGNvbnN0IGQgPSBtWzJdICogdHJhbnNwb3NlWzFdICsgbVszXSAqIHRyYW5zcG9zZVszXTsKICAgIGNvbnN0IGZpcnN0ID0gKGEgKyBkKSAvIDI7CiAgICBjb25zdCBzZWNvbmQgPSBNYXRoLnNxcnQoKGEgKyBkKSAqKiAyIC0gNCAqIChhICogZCAtIGMgKiBiKSkgLyAyOwogICAgY29uc3Qgc3ggPSBmaXJzdCArIHNlY29uZCB8fCAxOwogICAgY29uc3Qgc3kgPSBmaXJzdCAtIHNlY29uZCB8fCAxOwogICAgcmV0dXJuIFtNYXRoLnNxcnQoc3gpLCBNYXRoLnNxcnQoc3kpXTsKICB9CiAgc3RhdGljIG5vcm1hbGl6ZVJlY3QocmVjdCkgewogICAgY29uc3QgciA9IHJlY3Quc2xpY2UoMCk7CiAgICBpZiAocmVjdFswXSA+IHJlY3RbMl0pIHsKICAgICAgclswXSA9IHJlY3RbMl07CiAgICAgIHJbMl0gPSByZWN0WzBdOwogICAgfQogICAgaWYgKHJlY3RbMV0gPiByZWN0WzNdKSB7CiAgICAgIHJbMV0gPSByZWN0WzNdOwogICAgICByWzNdID0gcmVjdFsxXTsKICAgIH0KICAgIHJldHVybiByOwogIH0KICBzdGF0aWMgaW50ZXJzZWN0KHJlY3QxLCByZWN0MikgewogICAgY29uc3QgeExvdyA9IE1hdGgubWF4KE1hdGgubWluKHJlY3QxWzBdLCByZWN0MVsyXSksIE1hdGgubWluKHJlY3QyWzBdLCByZWN0MlsyXSkpOwogICAgY29uc3QgeEhpZ2ggPSBNYXRoLm1pbihNYXRoLm1heChyZWN0MVswXSwgcmVjdDFbMl0pLCBNYXRoLm1heChyZWN0MlswXSwgcmVjdDJbMl0pKTsKICAgIGlmICh4TG93ID4geEhpZ2gpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb25zdCB5TG93ID0gTWF0aC5tYXgoTWF0aC5taW4ocmVjdDFbMV0sIHJlY3QxWzNdKSwgTWF0aC5taW4ocmVjdDJbMV0sIHJlY3QyWzNdKSk7CiAgICBjb25zdCB5SGlnaCA9IE1hdGgubWluKE1hdGgubWF4KHJlY3QxWzFdLCByZWN0MVszXSksIE1hdGgubWF4KHJlY3QyWzFdLCByZWN0MlszXSkpOwogICAgaWYgKHlMb3cgPiB5SGlnaCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHJldHVybiBbeExvdywgeUxvdywgeEhpZ2gsIHlIaWdoXTsKICB9CiAgc3RhdGljIHBvaW50Qm91bmRpbmdCb3goeCwgeSwgbWluTWF4KSB7CiAgICBtaW5NYXhbMF0gPSBNYXRoLm1pbihtaW5NYXhbMF0sIHgpOwogICAgbWluTWF4WzFdID0gTWF0aC5taW4obWluTWF4WzFdLCB5KTsKICAgIG1pbk1heFsyXSA9IE1hdGgubWF4KG1pbk1heFsyXSwgeCk7CiAgICBtaW5NYXhbM10gPSBNYXRoLm1heChtaW5NYXhbM10sIHkpOwogIH0KICBzdGF0aWMgcmVjdEJvdW5kaW5nQm94KHgwLCB5MCwgeDEsIHkxLCBtaW5NYXgpIHsKICAgIG1pbk1heFswXSA9IE1hdGgubWluKG1pbk1heFswXSwgeDAsIHgxKTsKICAgIG1pbk1heFsxXSA9IE1hdGgubWluKG1pbk1heFsxXSwgeTAsIHkxKTsKICAgIG1pbk1heFsyXSA9IE1hdGgubWF4KG1pbk1heFsyXSwgeDAsIHgxKTsKICAgIG1pbk1heFszXSA9IE1hdGgubWF4KG1pbk1heFszXSwgeTAsIHkxKTsKICB9CiAgc3RhdGljICNnZXRFeHRyZW11bU9uQ3VydmUoeDAsIHgxLCB4MiwgeDMsIHkwLCB5MSwgeTIsIHkzLCB0LCBtaW5NYXgpIHsKICAgIGlmICh0IDw9IDAgfHwgdCA+PSAxKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IG10ID0gMSAtIHQ7CiAgICBjb25zdCB0dCA9IHQgKiB0OwogICAgY29uc3QgdHR0ID0gdHQgKiB0OwogICAgY29uc3QgeCA9IG10ICogKG10ICogKG10ICogeDAgKyAzICogdCAqIHgxKSArIDMgKiB0dCAqIHgyKSArIHR0dCAqIHgzOwogICAgY29uc3QgeSA9IG10ICogKG10ICogKG10ICogeTAgKyAzICogdCAqIHkxKSArIDMgKiB0dCAqIHkyKSArIHR0dCAqIHkzOwogICAgbWluTWF4WzBdID0gTWF0aC5taW4obWluTWF4WzBdLCB4KTsKICAgIG1pbk1heFsxXSA9IE1hdGgubWluKG1pbk1heFsxXSwgeSk7CiAgICBtaW5NYXhbMl0gPSBNYXRoLm1heChtaW5NYXhbMl0sIHgpOwogICAgbWluTWF4WzNdID0gTWF0aC5tYXgobWluTWF4WzNdLCB5KTsKICB9CiAgc3RhdGljICNnZXRFeHRyZW11bSh4MCwgeDEsIHgyLCB4MywgeTAsIHkxLCB5MiwgeTMsIGEsIGIsIGMsIG1pbk1heCkgewogICAgaWYgKE1hdGguYWJzKGEpIDwgMWUtMTIpIHsKICAgICAgaWYgKE1hdGguYWJzKGIpID49IDFlLTEyKSB7CiAgICAgICAgdGhpcy4jZ2V0RXh0cmVtdW1PbkN1cnZlKHgwLCB4MSwgeDIsIHgzLCB5MCwgeTEsIHkyLCB5MywgLWMgLyBiLCBtaW5NYXgpOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IGRlbHRhID0gYiAqKiAyIC0gNCAqIGMgKiBhOwogICAgaWYgKGRlbHRhIDwgMCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBzcXJ0RGVsdGEgPSBNYXRoLnNxcnQoZGVsdGEpOwogICAgY29uc3QgYTIgPSAyICogYTsKICAgIHRoaXMuI2dldEV4dHJlbXVtT25DdXJ2ZSh4MCwgeDEsIHgyLCB4MywgeTAsIHkxLCB5MiwgeTMsICgtYiArIHNxcnREZWx0YSkgLyBhMiwgbWluTWF4KTsKICAgIHRoaXMuI2dldEV4dHJlbXVtT25DdXJ2ZSh4MCwgeDEsIHgyLCB4MywgeTAsIHkxLCB5MiwgeTMsICgtYiAtIHNxcnREZWx0YSkgLyBhMiwgbWluTWF4KTsKICB9CiAgc3RhdGljIGJlemllckJvdW5kaW5nQm94KHgwLCB5MCwgeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgbWluTWF4KSB7CiAgICBtaW5NYXhbMF0gPSBNYXRoLm1pbihtaW5NYXhbMF0sIHgwLCB4Myk7CiAgICBtaW5NYXhbMV0gPSBNYXRoLm1pbihtaW5NYXhbMV0sIHkwLCB5Myk7CiAgICBtaW5NYXhbMl0gPSBNYXRoLm1heChtaW5NYXhbMl0sIHgwLCB4Myk7CiAgICBtaW5NYXhbM10gPSBNYXRoLm1heChtaW5NYXhbM10sIHkwLCB5Myk7CiAgICB0aGlzLiNnZXRFeHRyZW11bSh4MCwgeDEsIHgyLCB4MywgeTAsIHkxLCB5MiwgeTMsIDMgKiAoLXgwICsgMyAqICh4MSAtIHgyKSArIHgzKSwgNiAqICh4MCAtIDIgKiB4MSArIHgyKSwgMyAqICh4MSAtIHgwKSwgbWluTWF4KTsKICAgIHRoaXMuI2dldEV4dHJlbXVtKHgwLCB4MSwgeDIsIHgzLCB5MCwgeTEsIHkyLCB5MywgMyAqICgteTAgKyAzICogKHkxIC0geTIpICsgeTMpLCA2ICogKHkwIC0gMiAqIHkxICsgeTIpLCAzICogKHkxIC0geTApLCBtaW5NYXgpOwogIH0KfQpjb25zdCBQREZTdHJpbmdUcmFuc2xhdGVUYWJsZSA9IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAweDJkOCwgMHgyYzcsIDB4MmM2LCAweDJkOSwgMHgyZGQsIDB4MmRiLCAweDJkYSwgMHgyZGMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB4MjAyMiwgMHgyMDIwLCAweDIwMjEsIDB4MjAyNiwgMHgyMDE0LCAweDIwMTMsIDB4MTkyLCAweDIwNDQsIDB4MjAzOSwgMHgyMDNhLCAweDIyMTIsIDB4MjAzMCwgMHgyMDFlLCAweDIwMWMsIDB4MjAxZCwgMHgyMDE4LCAweDIwMTksIDB4MjAxYSwgMHgyMTIyLCAweGZiMDEsIDB4ZmIwMiwgMHgxNDEsIDB4MTUyLCAweDE2MCwgMHgxNzgsIDB4MTdkLCAweDEzMSwgMHgxNDIsIDB4MTUzLCAweDE2MSwgMHgxN2UsIDAsIDB4MjBhY107CmZ1bmN0aW9uIHN0cmluZ1RvUERGU3RyaW5nKHN0cikgewogIGlmIChzdHJbMF0gPj0gIlx4RUYiKSB7CiAgICBsZXQgZW5jb2Rpbmc7CiAgICBpZiAoc3RyWzBdID09PSAiXHhGRSIgJiYgc3RyWzFdID09PSAiXHhGRiIpIHsKICAgICAgZW5jb2RpbmcgPSAidXRmLTE2YmUiOwogICAgICBpZiAoc3RyLmxlbmd0aCAlIDIgPT09IDEpIHsKICAgICAgICBzdHIgPSBzdHIuc2xpY2UoMCwgLTEpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHN0clswXSA9PT0gIlx4RkYiICYmIHN0clsxXSA9PT0gIlx4RkUiKSB7CiAgICAgIGVuY29kaW5nID0gInV0Zi0xNmxlIjsKICAgICAgaWYgKHN0ci5sZW5ndGggJSAyID09PSAxKSB7CiAgICAgICAgc3RyID0gc3RyLnNsaWNlKDAsIC0xKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChzdHJbMF0gPT09ICJceEVGIiAmJiBzdHJbMV0gPT09ICJceEJCIiAmJiBzdHJbMl0gPT09ICJceEJGIikgewogICAgICBlbmNvZGluZyA9ICJ1dGYtOCI7CiAgICB9CiAgICBpZiAoZW5jb2RpbmcpIHsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKGVuY29kaW5nLCB7CiAgICAgICAgICBmYXRhbDogdHJ1ZQogICAgICAgIH0pOwogICAgICAgIGNvbnN0IGJ1ZmZlciA9IHN0cmluZ1RvQnl0ZXMoc3RyKTsKICAgICAgICBjb25zdCBkZWNvZGVkID0gZGVjb2Rlci5kZWNvZGUoYnVmZmVyKTsKICAgICAgICBpZiAoIWRlY29kZWQuaW5jbHVkZXMoIlx4MWIiKSkgewogICAgICAgICAgcmV0dXJuIGRlY29kZWQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiBkZWNvZGVkLnJlcGxhY2VBbGwoL1x4MWJbXlx4MWJdKig/Olx4MWJ8JCkvZywgIiIpOwogICAgICB9IGNhdGNoIChleCkgewogICAgICAgIHdhcm4oYHN0cmluZ1RvUERGU3RyaW5nOiAiJHtleH0iLmApOwogICAgICB9CiAgICB9CiAgfQogIGNvbnN0IHN0ckJ1ZiA9IFtdOwogIGZvciAobGV0IGkgPSAwLCBpaSA9IHN0ci5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CiAgICBjb25zdCBjaGFyQ29kZSA9IHN0ci5jaGFyQ29kZUF0KGkpOwogICAgaWYgKGNoYXJDb2RlID09PSAweDFiKSB7CiAgICAgIHdoaWxlICgrK2kgPCBpaSAmJiBzdHIuY2hhckNvZGVBdChpKSAhPT0gMHgxYikge30KICAgICAgY29udGludWU7CiAgICB9CiAgICBjb25zdCBjb2RlID0gUERGU3RyaW5nVHJhbnNsYXRlVGFibGVbY2hhckNvZGVdOwogICAgc3RyQnVmLnB1c2goY29kZSA/IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSkgOiBzdHIuY2hhckF0KGkpKTsKICB9CiAgcmV0dXJuIHN0ckJ1Zi5qb2luKCIiKTsKfQpmdW5jdGlvbiBzdHJpbmdUb1VURjhTdHJpbmcoc3RyKSB7CiAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoc3RyKSk7Cn0KZnVuY3Rpb24gdXRmOFN0cmluZ1RvU3RyaW5nKHN0cikgewogIHJldHVybiB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc3RyKSk7Cn0KZnVuY3Rpb24gaXNBcnJheUVxdWFsKGFycjEsIGFycjIpIHsKICBpZiAoYXJyMS5sZW5ndGggIT09IGFycjIubGVuZ3RoKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGZvciAobGV0IGkgPSAwLCBpaSA9IGFycjEubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgaWYgKGFycjFbaV0gIT09IGFycjJbaV0pIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KICByZXR1cm4gdHJ1ZTsKfQpmdW5jdGlvbiBnZXRNb2RpZmljYXRpb25EYXRlKGRhdGUgPSBuZXcgRGF0ZSgpKSB7CiAgY29uc3QgYnVmZmVyID0gW2RhdGUuZ2V0VVRDRnVsbFllYXIoKS50b1N0cmluZygpLCAoZGF0ZS5nZXRVVENNb250aCgpICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpLCBkYXRlLmdldFVUQ0RhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIiksIGRhdGUuZ2V0VVRDSG91cnMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIiksIGRhdGUuZ2V0VVRDTWludXRlcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgIjAiKSwgZGF0ZS5nZXRVVENTZWNvbmRzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpXTsKICByZXR1cm4gYnVmZmVyLmpvaW4oIiIpOwp9CmxldCBOb3JtYWxpemVSZWdleCA9IG51bGw7CmxldCBOb3JtYWxpemF0aW9uTWFwID0gbnVsbDsKZnVuY3Rpb24gbm9ybWFsaXplVW5pY29kZShzdHIpIHsKICBpZiAoIU5vcm1hbGl6ZVJlZ2V4KSB7CiAgICBOb3JtYWxpemVSZWdleCA9IC8oW1x1MDBhMFx1MDBiNVx1MDM3ZVx1MGViM1x1MjAwMC1cdTIwMGFcdTIwMmZcdTIxMjZcdWZiMDAtXHVmYjA0XHVmYjA2XHVmYjIwLVx1ZmIzNlx1ZmIzOC1cdWZiM2NcdWZiM2VcdWZiNDAtXHVmYjQxXHVmYjQzLVx1ZmI0NFx1ZmI0Ni1cdWZiYTFcdWZiYTQtXHVmYmE5XHVmYmFlLVx1ZmJiMVx1ZmJkMy1cdWZiZGNcdWZiZGUtXHVmYmU3XHVmYmVhLVx1ZmJmOFx1ZmJmYy1cdWZiZmRcdWZjMDAtXHVmYzVkXHVmYzY0LVx1ZmNmMVx1ZmNmNS1cdWZkM2RcdWZkODhcdWZkZjRcdWZkZmEtXHVmZGZiXHVmZTcxXHVmZTc3XHVmZTc5XHVmZTdiXHVmZTdkXSspfChcdWZiMDUrKS9ndTsKICAgIE5vcm1hbGl6YXRpb25NYXAgPSBuZXcgTWFwKFtbIu+shSIsICLFv3QiXV0pOwogIH0KICByZXR1cm4gc3RyLnJlcGxhY2VBbGwoTm9ybWFsaXplUmVnZXgsIChfLCBwMSwgcDIpID0+IHAxID8gcDEubm9ybWFsaXplKCJORktDIikgOiBOb3JtYWxpemF0aW9uTWFwLmdldChwMikpOwp9CmZ1bmN0aW9uIGdldFV1aWQoKSB7CiAgaWYgKHR5cGVvZiBjcnlwdG8ucmFuZG9tVVVJRCA9PT0gImZ1bmN0aW9uIikgewogICAgcmV0dXJuIGNyeXB0by5yYW5kb21VVUlEKCk7CiAgfQogIGNvbnN0IGJ1ZiA9IG5ldyBVaW50OEFycmF5KDMyKTsKICBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGJ1Zik7CiAgcmV0dXJuIGJ5dGVzVG9TdHJpbmcoYnVmKTsKfQpjb25zdCBBbm5vdGF0aW9uUHJlZml4ID0gInBkZmpzX2ludGVybmFsX2lkXyI7CmZ1bmN0aW9uIF9pc1ZhbGlkRXhwbGljaXREZXN0KHZhbGlkUmVmLCB2YWxpZE5hbWUsIGRlc3QpIHsKICBpZiAoIUFycmF5LmlzQXJyYXkoZGVzdCkgfHwgZGVzdC5sZW5ndGggPCAyKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGNvbnN0IFtwYWdlLCB6b29tLCAuLi5hcmdzXSA9IGRlc3Q7CiAgaWYgKCF2YWxpZFJlZihwYWdlKSAmJiAhTnVtYmVyLmlzSW50ZWdlcihwYWdlKSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICBpZiAoIXZhbGlkTmFtZSh6b29tKSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICBjb25zdCBhcmdzTGVuID0gYXJncy5sZW5ndGg7CiAgbGV0IGFsbG93TnVsbCA9IHRydWU7CiAgc3dpdGNoICh6b29tLm5hbWUpIHsKICAgIGNhc2UgIlhZWiI6CiAgICAgIGlmIChhcmdzTGVuIDwgMiB8fCBhcmdzTGVuID4gMykgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBicmVhazsKICAgIGNhc2UgIkZpdCI6CiAgICBjYXNlICJGaXRCIjoKICAgICAgcmV0dXJuIGFyZ3NMZW4gPT09IDA7CiAgICBjYXNlICJGaXRIIjoKICAgIGNhc2UgIkZpdEJIIjoKICAgIGNhc2UgIkZpdFYiOgogICAgY2FzZSAiRml0QlYiOgogICAgICBpZiAoYXJnc0xlbiA+IDEpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgYnJlYWs7CiAgICBjYXNlICJGaXRSIjoKICAgICAgaWYgKGFyZ3NMZW4gIT09IDQpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgYWxsb3dOdWxsID0gZmFsc2U7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KICBmb3IgKGNvbnN0IGFyZyBvZiBhcmdzKSB7CiAgICBpZiAodHlwZW9mIGFyZyA9PT0gIm51bWJlciIgfHwgYWxsb3dOdWxsICYmIGFyZyA9PT0gbnVsbCkgewogICAgICBjb250aW51ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIHRydWU7Cn0KZnVuY3Rpb24gTWF0aENsYW1wKHYsIG1pbiwgbWF4KSB7CiAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KHYsIG1pbiksIG1heCk7Cn0KZnVuY3Rpb24gdG9IZXhVdGlsKGFycikgewogIGlmIChVaW50OEFycmF5LnByb3RvdHlwZS50b0hleCkgewogICAgcmV0dXJuIGFyci50b0hleCgpOwogIH0KICByZXR1cm4gQXJyYXkuZnJvbShhcnIsIG51bSA9PiBoZXhOdW1iZXJzW251bV0pLmpvaW4oIiIpOwp9CmZ1bmN0aW9uIHRvQmFzZTY0VXRpbChhcnIpIHsKICBpZiAoVWludDhBcnJheS5wcm90b3R5cGUudG9CYXNlNjQpIHsKICAgIHJldHVybiBhcnIudG9CYXNlNjQoKTsKICB9CiAgcmV0dXJuIGJ0b2EoYnl0ZXNUb1N0cmluZyhhcnIpKTsKfQpmdW5jdGlvbiBmcm9tQmFzZTY0VXRpbChzdHIpIHsKICBpZiAoVWludDhBcnJheS5mcm9tQmFzZTY0KSB7CiAgICByZXR1cm4gVWludDhBcnJheS5mcm9tQmFzZTY0KHN0cik7CiAgfQogIHJldHVybiBzdHJpbmdUb0J5dGVzKGF0b2Ioc3RyKSk7Cn0KaWYgKHR5cGVvZiBQcm9taXNlLnRyeSAhPT0gImZ1bmN0aW9uIikgewogIFByb21pc2UudHJ5ID0gZnVuY3Rpb24gKGZuLCAuLi5hcmdzKSB7CiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7CiAgICAgIHJlc29sdmUoZm4oLi4uYXJncykpOwogICAgfSk7CiAgfTsKfQppZiAodHlwZW9mIE1hdGguc3VtUHJlY2lzZSAhPT0gImZ1bmN0aW9uIikgewogIE1hdGguc3VtUHJlY2lzZSA9IGZ1bmN0aW9uIChudW1iZXJzKSB7CiAgICByZXR1cm4gbnVtYmVycy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTsKICB9Owp9Cgo7Ly8gLi9zcmMvY29yZS9wcmltaXRpdmVzLmpzCgpjb25zdCBDSVJDVUxBUl9SRUYgPSBTeW1ib2woIkNJUkNVTEFSX1JFRiIpOwpjb25zdCBFT0YgPSBTeW1ib2woIkVPRiIpOwpsZXQgQ21kQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpOwpsZXQgTmFtZUNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKbGV0IFJlZkNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKZnVuY3Rpb24gY2xlYXJQcmltaXRpdmVDYWNoZXMoKSB7CiAgQ21kQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogIE5hbWVDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgUmVmQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpOwp9CmNsYXNzIE5hbWUgewogIGNvbnN0cnVjdG9yKG5hbWUpIHsKICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgfQogIHN0YXRpYyBnZXQobmFtZSkgewogICAgcmV0dXJuIE5hbWVDYWNoZVtuYW1lXSB8fD0gbmV3IE5hbWUobmFtZSk7CiAgfQp9CmNsYXNzIENtZCB7CiAgY29uc3RydWN0b3IoY21kKSB7CiAgICB0aGlzLmNtZCA9IGNtZDsKICB9CiAgc3RhdGljIGdldChjbWQpIHsKICAgIHJldHVybiBDbWRDYWNoZVtjbWRdIHx8PSBuZXcgQ21kKGNtZCk7CiAgfQp9CmNvbnN0IG5vblNlcmlhbGl6YWJsZSA9IGZ1bmN0aW9uIG5vblNlcmlhbGl6YWJsZUNsb3N1cmUoKSB7CiAgcmV0dXJuIG5vblNlcmlhbGl6YWJsZTsKfTsKY2xhc3MgRGljdCB7CiAgY29uc3RydWN0b3IoeHJlZiA9IG51bGwpIHsKICAgIHRoaXMuX21hcCA9IG5ldyBNYXAoKTsKICAgIHRoaXMueHJlZiA9IHhyZWY7CiAgICB0aGlzLm9iaklkID0gbnVsbDsKICAgIHRoaXMuc3VwcHJlc3NFbmNyeXB0aW9uID0gZmFsc2U7CiAgICB0aGlzLl9fbm9uU2VyaWFsaXphYmxlX18gPSBub25TZXJpYWxpemFibGU7CiAgfQogIGFzc2lnblhyZWYobmV3WHJlZikgewogICAgdGhpcy54cmVmID0gbmV3WHJlZjsKICB9CiAgZ2V0IHNpemUoKSB7CiAgICByZXR1cm4gdGhpcy5fbWFwLnNpemU7CiAgfQogIGdldChrZXkxLCBrZXkyLCBrZXkzKSB7CiAgICBsZXQgdmFsdWUgPSB0aGlzLl9tYXAuZ2V0KGtleTEpOwogICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYga2V5MiAhPT0gdW5kZWZpbmVkKSB7CiAgICAgIHZhbHVlID0gdGhpcy5fbWFwLmdldChrZXkyKTsKICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYga2V5MyAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgdmFsdWUgPSB0aGlzLl9tYXAuZ2V0KGtleTMpOwogICAgICB9CiAgICB9CiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBSZWYgJiYgdGhpcy54cmVmKSB7CiAgICAgIHJldHVybiB0aGlzLnhyZWYuZmV0Y2godmFsdWUsIHRoaXMuc3VwcHJlc3NFbmNyeXB0aW9uKTsKICAgIH0KICAgIHJldHVybiB2YWx1ZTsKICB9CiAgYXN5bmMgZ2V0QXN5bmMoa2V5MSwga2V5Miwga2V5MykgewogICAgbGV0IHZhbHVlID0gdGhpcy5fbWFwLmdldChrZXkxKTsKICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGtleTIgIT09IHVuZGVmaW5lZCkgewogICAgICB2YWx1ZSA9IHRoaXMuX21hcC5nZXQoa2V5Mik7CiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGtleTMgIT09IHVuZGVmaW5lZCkgewogICAgICAgIHZhbHVlID0gdGhpcy5fbWFwLmdldChrZXkzKTsKICAgICAgfQogICAgfQogICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgUmVmICYmIHRoaXMueHJlZikgewogICAgICByZXR1cm4gdGhpcy54cmVmLmZldGNoQXN5bmModmFsdWUsIHRoaXMuc3VwcHJlc3NFbmNyeXB0aW9uKTsKICAgIH0KICAgIHJldHVybiB2YWx1ZTsKICB9CiAgZ2V0QXJyYXkoa2V5MSwga2V5Miwga2V5MykgewogICAgbGV0IHZhbHVlID0gdGhpcy5fbWFwLmdldChrZXkxKTsKICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGtleTIgIT09IHVuZGVmaW5lZCkgewogICAgICB2YWx1ZSA9IHRoaXMuX21hcC5nZXQoa2V5Mik7CiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGtleTMgIT09IHVuZGVmaW5lZCkgewogICAgICAgIHZhbHVlID0gdGhpcy5fbWFwLmdldChrZXkzKTsKICAgICAgfQogICAgfQogICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgUmVmICYmIHRoaXMueHJlZikgewogICAgICB2YWx1ZSA9IHRoaXMueHJlZi5mZXRjaCh2YWx1ZSwgdGhpcy5zdXBwcmVzc0VuY3J5cHRpb24pOwogICAgfQogICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7CiAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoKTsKICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gdmFsdWUubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICAgIGlmICh2YWx1ZVtpXSBpbnN0YW5jZW9mIFJlZiAmJiB0aGlzLnhyZWYpIHsKICAgICAgICAgIHZhbHVlW2ldID0gdGhpcy54cmVmLmZldGNoKHZhbHVlW2ldLCB0aGlzLnN1cHByZXNzRW5jcnlwdGlvbik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQogIGdldFJhdyhrZXkpIHsKICAgIHJldHVybiB0aGlzLl9tYXAuZ2V0KGtleSk7CiAgfQogIGdldEtleXMoKSB7CiAgICByZXR1cm4gWy4uLnRoaXMuX21hcC5rZXlzKCldOwogIH0KICBnZXRSYXdWYWx1ZXMoKSB7CiAgICByZXR1cm4gWy4uLnRoaXMuX21hcC52YWx1ZXMoKV07CiAgfQogIHNldChrZXksIHZhbHVlKSB7CiAgICB0aGlzLl9tYXAuc2V0KGtleSwgdmFsdWUpOwogIH0KICBoYXMoa2V5KSB7CiAgICByZXR1cm4gdGhpcy5fbWFwLmhhcyhrZXkpOwogIH0KICAqW1N5bWJvbC5pdGVyYXRvcl0oKSB7CiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB0aGlzLl9tYXApIHsKICAgICAgeWllbGQgW2tleSwgdmFsdWUgaW5zdGFuY2VvZiBSZWYgJiYgdGhpcy54cmVmID8gdGhpcy54cmVmLmZldGNoKHZhbHVlLCB0aGlzLnN1cHByZXNzRW5jcnlwdGlvbikgOiB2YWx1ZV07CiAgICB9CiAgfQogIHN0YXRpYyBnZXQgZW1wdHkoKSB7CiAgICBjb25zdCBlbXB0eURpY3QgPSBuZXcgRGljdChudWxsKTsKICAgIGVtcHR5RGljdC5zZXQgPSAoa2V5LCB2YWx1ZSkgPT4gewogICAgICB1bnJlYWNoYWJsZSgiU2hvdWxkIG5vdCBjYWxsIGBzZXRgIG9uIHRoZSBlbXB0eSBkaWN0aW9uYXJ5LiIpOwogICAgfTsKICAgIHJldHVybiBzaGFkb3codGhpcywgImVtcHR5IiwgZW1wdHlEaWN0KTsKICB9CiAgc3RhdGljIG1lcmdlKHsKICAgIHhyZWYsCiAgICBkaWN0QXJyYXksCiAgICBtZXJnZVN1YkRpY3RzID0gZmFsc2UKICB9KSB7CiAgICBjb25zdCBtZXJnZWREaWN0ID0gbmV3IERpY3QoeHJlZiksCiAgICAgIHByb3BlcnRpZXMgPSBuZXcgTWFwKCk7CiAgICBmb3IgKGNvbnN0IGRpY3Qgb2YgZGljdEFycmF5KSB7CiAgICAgIGlmICghKGRpY3QgaW5zdGFuY2VvZiBEaWN0KSkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGRpY3QuX21hcCkgewogICAgICAgIGxldCBwcm9wZXJ0eSA9IHByb3BlcnRpZXMuZ2V0KGtleSk7CiAgICAgICAgaWYgKHByb3BlcnR5ID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgIHByb3BlcnR5ID0gW107CiAgICAgICAgICBwcm9wZXJ0aWVzLnNldChrZXksIHByb3BlcnR5KTsKICAgICAgICB9IGVsc2UgaWYgKCFtZXJnZVN1YkRpY3RzIHx8ICEodmFsdWUgaW5zdGFuY2VvZiBEaWN0KSkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIHByb3BlcnR5LnB1c2godmFsdWUpOwogICAgICB9CiAgICB9CiAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZXNdIG9mIHByb3BlcnRpZXMpIHsKICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDEgfHwgISh2YWx1ZXNbMF0gaW5zdGFuY2VvZiBEaWN0KSkgewogICAgICAgIG1lcmdlZERpY3QuX21hcC5zZXQobmFtZSwgdmFsdWVzWzBdKTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBjb25zdCBzdWJEaWN0ID0gbmV3IERpY3QoeHJlZik7CiAgICAgIGZvciAoY29uc3QgZGljdCBvZiB2YWx1ZXMpIHsKICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBkaWN0Ll9tYXApIHsKICAgICAgICAgIGlmICghc3ViRGljdC5fbWFwLmhhcyhrZXkpKSB7CiAgICAgICAgICAgIHN1YkRpY3QuX21hcC5zZXQoa2V5LCB2YWx1ZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChzdWJEaWN0LnNpemUgPiAwKSB7CiAgICAgICAgbWVyZ2VkRGljdC5fbWFwLnNldChuYW1lLCBzdWJEaWN0KTsKICAgICAgfQogICAgfQogICAgcHJvcGVydGllcy5jbGVhcigpOwogICAgcmV0dXJuIG1lcmdlZERpY3Quc2l6ZSA+IDAgPyBtZXJnZWREaWN0IDogRGljdC5lbXB0eTsKICB9CiAgY2xvbmUoKSB7CiAgICBjb25zdCBkaWN0ID0gbmV3IERpY3QodGhpcy54cmVmKTsKICAgIGZvciAoY29uc3Qga2V5IG9mIHRoaXMuZ2V0S2V5cygpKSB7CiAgICAgIGRpY3Quc2V0KGtleSwgdGhpcy5nZXRSYXcoa2V5KSk7CiAgICB9CiAgICByZXR1cm4gZGljdDsKICB9CiAgZGVsZXRlKGtleSkgewogICAgZGVsZXRlIHRoaXMuX21hcFtrZXldOwogIH0KfQpjbGFzcyBSZWYgewogIGNvbnN0cnVjdG9yKG51bSwgZ2VuKSB7CiAgICB0aGlzLm51bSA9IG51bTsKICAgIHRoaXMuZ2VuID0gZ2VuOwogIH0KICB0b1N0cmluZygpIHsKICAgIGlmICh0aGlzLmdlbiA9PT0gMCkgewogICAgICByZXR1cm4gYCR7dGhpcy5udW19UmA7CiAgICB9CiAgICByZXR1cm4gYCR7dGhpcy5udW19UiR7dGhpcy5nZW59YDsKICB9CiAgc3RhdGljIGZyb21TdHJpbmcoc3RyKSB7CiAgICBjb25zdCByZWYgPSBSZWZDYWNoZVtzdHJdOwogICAgaWYgKHJlZikgewogICAgICByZXR1cm4gcmVmOwogICAgfQogICAgY29uc3QgbSA9IC9eKFxkKylSKFxkKikkLy5leGVjKHN0cik7CiAgICBpZiAoIW0gfHwgbVsxXSA9PT0gIjAiKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcmV0dXJuIFJlZkNhY2hlW3N0cl0gPSBuZXcgUmVmKHBhcnNlSW50KG1bMV0pLCAhbVsyXSA/IDAgOiBwYXJzZUludChtWzJdKSk7CiAgfQogIHN0YXRpYyBnZXQobnVtLCBnZW4pIHsKICAgIGNvbnN0IGtleSA9IGdlbiA9PT0gMCA/IGAke251bX1SYCA6IGAke251bX1SJHtnZW59YDsKICAgIHJldHVybiBSZWZDYWNoZVtrZXldIHx8PSBuZXcgUmVmKG51bSwgZ2VuKTsKICB9Cn0KY2xhc3MgUmVmU2V0IHsKICBjb25zdHJ1Y3RvcihwYXJlbnQgPSBudWxsKSB7CiAgICB0aGlzLl9zZXQgPSBuZXcgU2V0KHBhcmVudD8uX3NldCk7CiAgfQogIGhhcyhyZWYpIHsKICAgIHJldHVybiB0aGlzLl9zZXQuaGFzKHJlZi50b1N0cmluZygpKTsKICB9CiAgcHV0KHJlZikgewogICAgdGhpcy5fc2V0LmFkZChyZWYudG9TdHJpbmcoKSk7CiAgfQogIHJlbW92ZShyZWYpIHsKICAgIHRoaXMuX3NldC5kZWxldGUocmVmLnRvU3RyaW5nKCkpOwogIH0KICBbU3ltYm9sLml0ZXJhdG9yXSgpIHsKICAgIHJldHVybiB0aGlzLl9zZXQudmFsdWVzKCk7CiAgfQogIGNsZWFyKCkgewogICAgdGhpcy5fc2V0LmNsZWFyKCk7CiAgfQp9CmNsYXNzIFJlZlNldENhY2hlIHsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHRoaXMuX21hcCA9IG5ldyBNYXAoKTsKICB9CiAgZ2V0IHNpemUoKSB7CiAgICByZXR1cm4gdGhpcy5fbWFwLnNpemU7CiAgfQogIGdldChyZWYpIHsKICAgIHJldHVybiB0aGlzLl9tYXAuZ2V0KHJlZi50b1N0cmluZygpKTsKICB9CiAgaGFzKHJlZikgewogICAgcmV0dXJuIHRoaXMuX21hcC5oYXMocmVmLnRvU3RyaW5nKCkpOwogIH0KICBwdXQocmVmLCBvYmopIHsKICAgIHRoaXMuX21hcC5zZXQocmVmLnRvU3RyaW5nKCksIG9iaik7CiAgfQogIHB1dEFsaWFzKHJlZiwgYWxpYXNSZWYpIHsKICAgIHRoaXMuX21hcC5zZXQocmVmLnRvU3RyaW5nKCksIHRoaXMuZ2V0KGFsaWFzUmVmKSk7CiAgfQogIFtTeW1ib2wuaXRlcmF0b3JdKCkgewogICAgcmV0dXJuIHRoaXMuX21hcC52YWx1ZXMoKTsKICB9CiAgY2xlYXIoKSB7CiAgICB0aGlzLl9tYXAuY2xlYXIoKTsKICB9CiAgKnZhbHVlcygpIHsKICAgIHlpZWxkKiB0aGlzLl9tYXAudmFsdWVzKCk7CiAgfQogICppdGVtcygpIHsKICAgIGZvciAoY29uc3QgW3JlZiwgdmFsdWVdIG9mIHRoaXMuX21hcCkgewogICAgICB5aWVsZCBbUmVmLmZyb21TdHJpbmcocmVmKSwgdmFsdWVdOwogICAgfQogIH0KfQpmdW5jdGlvbiBpc05hbWUodiwgbmFtZSkgewogIHJldHVybiB2IGluc3RhbmNlb2YgTmFtZSAmJiAobmFtZSA9PT0gdW5kZWZpbmVkIHx8IHYubmFtZSA9PT0gbmFtZSk7Cn0KZnVuY3Rpb24gaXNDbWQodiwgY21kKSB7CiAgcmV0dXJuIHYgaW5zdGFuY2VvZiBDbWQgJiYgKGNtZCA9PT0gdW5kZWZpbmVkIHx8IHYuY21kID09PSBjbWQpOwp9CmZ1bmN0aW9uIGlzRGljdCh2LCB0eXBlKSB7CiAgcmV0dXJuIHYgaW5zdGFuY2VvZiBEaWN0ICYmICh0eXBlID09PSB1bmRlZmluZWQgfHwgaXNOYW1lKHYuZ2V0KCJUeXBlIiksIHR5cGUpKTsKfQpmdW5jdGlvbiBpc1JlZnNFcXVhbCh2MSwgdjIpIHsKICByZXR1cm4gdjEubnVtID09PSB2Mi5udW0gJiYgdjEuZ2VuID09PSB2Mi5nZW47Cn0KCjsvLyAuL3NyYy9jb3JlL2Jhc2Vfc3RyZWFtLmpzCgpjbGFzcyBCYXNlU3RyZWFtIHsKICBnZXQgbGVuZ3RoKCkgewogICAgdW5yZWFjaGFibGUoIkFic3RyYWN0IGdldHRlciBgbGVuZ3RoYCBhY2Nlc3NlZCIpOwogIH0KICBnZXQgaXNFbXB0eSgpIHsKICAgIHVucmVhY2hhYmxlKCJBYnN0cmFjdCBnZXR0ZXIgYGlzRW1wdHlgIGFjY2Vzc2VkIik7CiAgfQogIGdldCBpc0RhdGFMb2FkZWQoKSB7CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJpc0RhdGFMb2FkZWQiLCB0cnVlKTsKICB9CiAgZ2V0Qnl0ZSgpIHsKICAgIHVucmVhY2hhYmxlKCJBYnN0cmFjdCBtZXRob2QgYGdldEJ5dGVgIGNhbGxlZCIpOwogIH0KICBnZXRCeXRlcyhsZW5ndGgpIHsKICAgIHVucmVhY2hhYmxlKCJBYnN0cmFjdCBtZXRob2QgYGdldEJ5dGVzYCBjYWxsZWQiKTsKICB9CiAgYXN5bmMgZ2V0SW1hZ2VEYXRhKGxlbmd0aCwgZGVjb2Rlck9wdGlvbnMpIHsKICAgIHJldHVybiB0aGlzLmdldEJ5dGVzKGxlbmd0aCwgZGVjb2Rlck9wdGlvbnMpOwogIH0KICBhc3luYyBhc3luY0dldEJ5dGVzKCkgewogICAgdW5yZWFjaGFibGUoIkFic3RyYWN0IG1ldGhvZCBgYXN5bmNHZXRCeXRlc2AgY2FsbGVkIik7CiAgfQogIGdldCBpc0FzeW5jKCkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICBnZXQgaXNBc3luY0RlY29kZXIoKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGdldCBjYW5Bc3luY0RlY29kZUltYWdlRnJvbUJ1ZmZlcigpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgYXN5bmMgZ2V0VHJhbnNmZXJhYmxlSW1hZ2UoKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgcGVla0J5dGUoKSB7CiAgICBjb25zdCBwZWVrZWRCeXRlID0gdGhpcy5nZXRCeXRlKCk7CiAgICBpZiAocGVla2VkQnl0ZSAhPT0gLTEpIHsKICAgICAgdGhpcy5wb3MtLTsKICAgIH0KICAgIHJldHVybiBwZWVrZWRCeXRlOwogIH0KICBwZWVrQnl0ZXMobGVuZ3RoKSB7CiAgICBjb25zdCBieXRlcyA9IHRoaXMuZ2V0Qnl0ZXMobGVuZ3RoKTsKICAgIHRoaXMucG9zIC09IGJ5dGVzLmxlbmd0aDsKICAgIHJldHVybiBieXRlczsKICB9CiAgZ2V0VWludDE2KCkgewogICAgY29uc3QgYjAgPSB0aGlzLmdldEJ5dGUoKTsKICAgIGNvbnN0IGIxID0gdGhpcy5nZXRCeXRlKCk7CiAgICBpZiAoYjAgPT09IC0xIHx8IGIxID09PSAtMSkgewogICAgICByZXR1cm4gLTE7CiAgICB9CiAgICByZXR1cm4gKGIwIDw8IDgpICsgYjE7CiAgfQogIGdldEludDMyKCkgewogICAgY29uc3QgYjAgPSB0aGlzLmdldEJ5dGUoKTsKICAgIGNvbnN0IGIxID0gdGhpcy5nZXRCeXRlKCk7CiAgICBjb25zdCBiMiA9IHRoaXMuZ2V0Qnl0ZSgpOwogICAgY29uc3QgYjMgPSB0aGlzLmdldEJ5dGUoKTsKICAgIHJldHVybiAoYjAgPDwgMjQpICsgKGIxIDw8IDE2KSArIChiMiA8PCA4KSArIGIzOwogIH0KICBnZXRCeXRlUmFuZ2UoYmVnaW4sIGVuZCkgewogICAgdW5yZWFjaGFibGUoIkFic3RyYWN0IG1ldGhvZCBgZ2V0Qnl0ZVJhbmdlYCBjYWxsZWQiKTsKICB9CiAgZ2V0U3RyaW5nKGxlbmd0aCkgewogICAgcmV0dXJuIGJ5dGVzVG9TdHJpbmcodGhpcy5nZXRCeXRlcyhsZW5ndGgpKTsKICB9CiAgc2tpcChuKSB7CiAgICB0aGlzLnBvcyArPSBuIHx8IDE7CiAgfQogIHJlc2V0KCkgewogICAgdW5yZWFjaGFibGUoIkFic3RyYWN0IG1ldGhvZCBgcmVzZXRgIGNhbGxlZCIpOwogIH0KICBtb3ZlU3RhcnQoKSB7CiAgICB1bnJlYWNoYWJsZSgiQWJzdHJhY3QgbWV0aG9kIGBtb3ZlU3RhcnRgIGNhbGxlZCIpOwogIH0KICBtYWtlU3ViU3RyZWFtKHN0YXJ0LCBsZW5ndGgsIGRpY3QgPSBudWxsKSB7CiAgICB1bnJlYWNoYWJsZSgiQWJzdHJhY3QgbWV0aG9kIGBtYWtlU3ViU3RyZWFtYCBjYWxsZWQiKTsKICB9CiAgZ2V0QmFzZVN0cmVhbXMoKSB7CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCjsvLyAuL3NyYy9jb3JlL2NvcmVfdXRpbHMuanMKCgoKY29uc3QgUERGX1ZFUlNJT05fUkVHRVhQID0gL15bMS05XVwuXGQkLzsKY29uc3QgTUFYX0lOVF8zMiA9IDIgKiogMzEgLSAxOwpjb25zdCBNSU5fSU5UXzMyID0gLSgyICoqIDMxKTsKZnVuY3Rpb24gZ2V0TG9va3VwVGFibGVGYWN0b3J5KGluaXRpYWxpemVyKSB7CiAgbGV0IGxvb2t1cDsKICByZXR1cm4gZnVuY3Rpb24gKCkgewogICAgaWYgKGluaXRpYWxpemVyKSB7CiAgICAgIGxvb2t1cCA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICAgIGluaXRpYWxpemVyKGxvb2t1cCk7CiAgICAgIGluaXRpYWxpemVyID0gbnVsbDsKICAgIH0KICAgIHJldHVybiBsb29rdXA7CiAgfTsKfQpjbGFzcyBNaXNzaW5nRGF0YUV4Y2VwdGlvbiBleHRlbmRzIEJhc2VFeGNlcHRpb24gewogIGNvbnN0cnVjdG9yKGJlZ2luLCBlbmQpIHsKICAgIHN1cGVyKGBNaXNzaW5nIGRhdGEgWyR7YmVnaW59LCAke2VuZH0pYCwgIk1pc3NpbmdEYXRhRXhjZXB0aW9uIik7CiAgICB0aGlzLmJlZ2luID0gYmVnaW47CiAgICB0aGlzLmVuZCA9IGVuZDsKICB9Cn0KY2xhc3MgUGFyc2VyRU9GRXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiB7CiAgY29uc3RydWN0b3IobXNnKSB7CiAgICBzdXBlcihtc2csICJQYXJzZXJFT0ZFeGNlcHRpb24iKTsKICB9Cn0KY2xhc3MgWFJlZkVudHJ5RXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiB7CiAgY29uc3RydWN0b3IobXNnKSB7CiAgICBzdXBlcihtc2csICJYUmVmRW50cnlFeGNlcHRpb24iKTsKICB9Cn0KY2xhc3MgWFJlZlBhcnNlRXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiB7CiAgY29uc3RydWN0b3IobXNnKSB7CiAgICBzdXBlcihtc2csICJYUmVmUGFyc2VFeGNlcHRpb24iKTsKICB9Cn0KZnVuY3Rpb24gYXJyYXlCdWZmZXJzVG9CeXRlcyhhcnIpIHsKICBjb25zdCBsZW5ndGggPSBhcnIubGVuZ3RoOwogIGlmIChsZW5ndGggPT09IDApIHsKICAgIHJldHVybiBuZXcgVWludDhBcnJheSgwKTsKICB9CiAgaWYgKGxlbmd0aCA9PT0gMSkgewogICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGFyclswXSk7CiAgfQogIGxldCBkYXRhTGVuZ3RoID0gMDsKICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICBkYXRhTGVuZ3RoICs9IGFycltpXS5ieXRlTGVuZ3RoOwogIH0KICBjb25zdCBkYXRhID0gbmV3IFVpbnQ4QXJyYXkoZGF0YUxlbmd0aCk7CiAgbGV0IHBvcyA9IDA7CiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgY29uc3QgaXRlbSA9IG5ldyBVaW50OEFycmF5KGFycltpXSk7CiAgICBkYXRhLnNldChpdGVtLCBwb3MpOwogICAgcG9zICs9IGl0ZW0uYnl0ZUxlbmd0aDsKICB9CiAgcmV0dXJuIGRhdGE7Cn0KYXN5bmMgZnVuY3Rpb24gZmV0Y2hCaW5hcnlEYXRhKHVybCkgewogIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsKTsKICBpZiAoIXJlc3BvbnNlLm9rKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBmZXRjaCBmaWxlICIke3VybH0iIHdpdGggIiR7cmVzcG9uc2Uuc3RhdHVzVGV4dH0iLmApOwogIH0KICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKSk7Cn0KZnVuY3Rpb24gZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSh7CiAgZGljdCwKICBrZXksCiAgZ2V0QXJyYXkgPSBmYWxzZSwKICBzdG9wV2hlbkZvdW5kID0gdHJ1ZQp9KSB7CiAgbGV0IHZhbHVlczsKICBjb25zdCB2aXNpdGVkID0gbmV3IFJlZlNldCgpOwogIHdoaWxlIChkaWN0IGluc3RhbmNlb2YgRGljdCAmJiAhKGRpY3Qub2JqSWQgJiYgdmlzaXRlZC5oYXMoZGljdC5vYmpJZCkpKSB7CiAgICBpZiAoZGljdC5vYmpJZCkgewogICAgICB2aXNpdGVkLnB1dChkaWN0Lm9iaklkKTsKICAgIH0KICAgIGNvbnN0IHZhbHVlID0gZ2V0QXJyYXkgPyBkaWN0LmdldEFycmF5KGtleSkgOiBkaWN0LmdldChrZXkpOwogICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHsKICAgICAgaWYgKHN0b3BXaGVuRm91bmQpIHsKICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgIH0KICAgICAgKHZhbHVlcyB8fD0gW10pLnB1c2godmFsdWUpOwogICAgfQogICAgZGljdCA9IGRpY3QuZ2V0KCJQYXJlbnQiKTsKICB9CiAgcmV0dXJuIHZhbHVlczsKfQpmdW5jdGlvbiBnZXRQYXJlbnRUb1VwZGF0ZShkaWN0LCByZWYsIHhyZWYpIHsKICBjb25zdCB2aXNpdGVkID0gbmV3IFJlZlNldCgpOwogIGNvbnN0IGZpcnN0RGljdCA9IGRpY3Q7CiAgY29uc3QgcmVzdWx0ID0gewogICAgZGljdDogbnVsbCwKICAgIHJlZjogbnVsbAogIH07CiAgd2hpbGUgKGRpY3QgaW5zdGFuY2VvZiBEaWN0ICYmICF2aXNpdGVkLmhhcyhyZWYpKSB7CiAgICB2aXNpdGVkLnB1dChyZWYpOwogICAgaWYgKGRpY3QuaGFzKCJUIikpIHsKICAgICAgYnJlYWs7CiAgICB9CiAgICByZWYgPSBkaWN0LmdldFJhdygiUGFyZW50Iik7CiAgICBpZiAoIShyZWYgaW5zdGFuY2VvZiBSZWYpKSB7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBkaWN0ID0geHJlZi5mZXRjaChyZWYpOwogIH0KICBpZiAoZGljdCBpbnN0YW5jZW9mIERpY3QgJiYgZGljdCAhPT0gZmlyc3REaWN0KSB7CiAgICByZXN1bHQuZGljdCA9IGRpY3Q7CiAgICByZXN1bHQucmVmID0gcmVmOwogIH0KICByZXR1cm4gcmVzdWx0Owp9CmNvbnN0IFJPTUFOX05VTUJFUl9NQVAgPSBbIiIsICJDIiwgIkNDIiwgIkNDQyIsICJDRCIsICJEIiwgIkRDIiwgIkRDQyIsICJEQ0NDIiwgIkNNIiwgIiIsICJYIiwgIlhYIiwgIlhYWCIsICJYTCIsICJMIiwgIkxYIiwgIkxYWCIsICJMWFhYIiwgIlhDIiwgIiIsICJJIiwgIklJIiwgIklJSSIsICJJViIsICJWIiwgIlZJIiwgIlZJSSIsICJWSUlJIiwgIklYIl07CmZ1bmN0aW9uIHRvUm9tYW5OdW1lcmFscyhudW1iZXIsIGxvd2VyQ2FzZSA9IGZhbHNlKSB7CiAgYXNzZXJ0KE51bWJlci5pc0ludGVnZXIobnVtYmVyKSAmJiBudW1iZXIgPiAwLCAiVGhlIG51bWJlciBzaG91bGQgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLiIpOwogIGNvbnN0IHJvbWFuID0gIk0iLnJlcGVhdChudW1iZXIgLyAxMDAwIHwgMCkgKyBST01BTl9OVU1CRVJfTUFQW251bWJlciAlIDEwMDAgLyAxMDAgfCAwXSArIFJPTUFOX05VTUJFUl9NQVBbMTAgKyAobnVtYmVyICUgMTAwIC8gMTAgfCAwKV0gKyBST01BTl9OVU1CRVJfTUFQWzIwICsgbnVtYmVyICUgMTBdOwogIHJldHVybiBsb3dlckNhc2UgPyByb21hbi50b0xvd2VyQ2FzZSgpIDogcm9tYW47Cn0KZnVuY3Rpb24gbG9nMih4KSB7CiAgcmV0dXJuIHggPiAwID8gTWF0aC5jZWlsKE1hdGgubG9nMih4KSkgOiAwOwp9CmZ1bmN0aW9uIHJlYWRJbnQ4KGRhdGEsIG9mZnNldCkgewogIHJldHVybiBkYXRhW29mZnNldF0gPDwgMjQgPj4gMjQ7Cn0KZnVuY3Rpb24gcmVhZEludDE2KGRhdGEsIG9mZnNldCkgewogIHJldHVybiAoZGF0YVtvZmZzZXRdIDw8IDI0IHwgZGF0YVtvZmZzZXQgKyAxXSA8PCAxNikgPj4gMTY7Cn0KZnVuY3Rpb24gcmVhZFVpbnQxNihkYXRhLCBvZmZzZXQpIHsKICByZXR1cm4gZGF0YVtvZmZzZXRdIDw8IDggfCBkYXRhW29mZnNldCArIDFdOwp9CmZ1bmN0aW9uIHJlYWRVaW50MzIoZGF0YSwgb2Zmc2V0KSB7CiAgcmV0dXJuIChkYXRhW29mZnNldF0gPDwgMjQgfCBkYXRhW29mZnNldCArIDFdIDw8IDE2IHwgZGF0YVtvZmZzZXQgKyAyXSA8PCA4IHwgZGF0YVtvZmZzZXQgKyAzXSkgPj4+IDA7Cn0KZnVuY3Rpb24gaXNXaGl0ZVNwYWNlKGNoKSB7CiAgcmV0dXJuIGNoID09PSAweDIwIHx8IGNoID09PSAweDA5IHx8IGNoID09PSAweDBkIHx8IGNoID09PSAweDBhOwp9CmZ1bmN0aW9uIGlzQm9vbGVhbkFycmF5KGFyciwgbGVuKSB7CiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXJyKSAmJiAobGVuID09PSBudWxsIHx8IGFyci5sZW5ndGggPT09IGxlbikgJiYgYXJyLmV2ZXJ5KHggPT4gdHlwZW9mIHggPT09ICJib29sZWFuIik7Cn0KZnVuY3Rpb24gaXNOdW1iZXJBcnJheShhcnIsIGxlbikgewogIGlmIChBcnJheS5pc0FycmF5KGFycikpIHsKICAgIHJldHVybiAobGVuID09PSBudWxsIHx8IGFyci5sZW5ndGggPT09IGxlbikgJiYgYXJyLmV2ZXJ5KHggPT4gdHlwZW9mIHggPT09ICJudW1iZXIiKTsKICB9CiAgcmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhhcnIpICYmICEoYXJyIGluc3RhbmNlb2YgQmlnSW50NjRBcnJheSB8fCBhcnIgaW5zdGFuY2VvZiBCaWdVaW50NjRBcnJheSkgJiYgKGxlbiA9PT0gbnVsbCB8fCBhcnIubGVuZ3RoID09PSBsZW4pOwp9CmZ1bmN0aW9uIGxvb2t1cE1hdHJpeChhcnIsIGZhbGxiYWNrKSB7CiAgcmV0dXJuIGlzTnVtYmVyQXJyYXkoYXJyLCA2KSA/IGFyciA6IGZhbGxiYWNrOwp9CmZ1bmN0aW9uIGxvb2t1cFJlY3QoYXJyLCBmYWxsYmFjaykgewogIHJldHVybiBpc051bWJlckFycmF5KGFyciwgNCkgPyBhcnIgOiBmYWxsYmFjazsKfQpmdW5jdGlvbiBsb29rdXBOb3JtYWxSZWN0KGFyciwgZmFsbGJhY2spIHsKICByZXR1cm4gaXNOdW1iZXJBcnJheShhcnIsIDQpID8gVXRpbC5ub3JtYWxpemVSZWN0KGFycikgOiBmYWxsYmFjazsKfQpmdW5jdGlvbiBwYXJzZVhGQVBhdGgocGF0aCkgewogIGNvbnN0IHBvc2l0aW9uUGF0dGVybiA9IC8oLispXFsoXGQrKVxdJC87CiAgcmV0dXJuIHBhdGguc3BsaXQoIi4iKS5tYXAoY29tcG9uZW50ID0+IHsKICAgIGNvbnN0IG0gPSBjb21wb25lbnQubWF0Y2gocG9zaXRpb25QYXR0ZXJuKTsKICAgIGlmIChtKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgbmFtZTogbVsxXSwKICAgICAgICBwb3M6IHBhcnNlSW50KG1bMl0sIDEwKQogICAgICB9OwogICAgfQogICAgcmV0dXJuIHsKICAgICAgbmFtZTogY29tcG9uZW50LAogICAgICBwb3M6IDAKICAgIH07CiAgfSk7Cn0KZnVuY3Rpb24gZXNjYXBlUERGTmFtZShzdHIpIHsKICBjb25zdCBidWZmZXIgPSBbXTsKICBsZXQgc3RhcnQgPSAwOwogIGZvciAobGV0IGkgPSAwLCBpaSA9IHN0ci5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CiAgICBjb25zdCBjaGFyID0gc3RyLmNoYXJDb2RlQXQoaSk7CiAgICBpZiAoY2hhciA8IDB4MjEgfHwgY2hhciA+IDB4N2UgfHwgY2hhciA9PT0gMHgyMyB8fCBjaGFyID09PSAweDI4IHx8IGNoYXIgPT09IDB4MjkgfHwgY2hhciA9PT0gMHgzYyB8fCBjaGFyID09PSAweDNlIHx8IGNoYXIgPT09IDB4NWIgfHwgY2hhciA9PT0gMHg1ZCB8fCBjaGFyID09PSAweDdiIHx8IGNoYXIgPT09IDB4N2QgfHwgY2hhciA9PT0gMHgyZiB8fCBjaGFyID09PSAweDI1KSB7CiAgICAgIGlmIChzdGFydCA8IGkpIHsKICAgICAgICBidWZmZXIucHVzaChzdHIuc3Vic3RyaW5nKHN0YXJ0LCBpKSk7CiAgICAgIH0KICAgICAgYnVmZmVyLnB1c2goYCMke2NoYXIudG9TdHJpbmcoMTYpfWApOwogICAgICBzdGFydCA9IGkgKyAxOwogICAgfQogIH0KICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkgewogICAgcmV0dXJuIHN0cjsKICB9CiAgaWYgKHN0YXJ0IDwgc3RyLmxlbmd0aCkgewogICAgYnVmZmVyLnB1c2goc3RyLnN1YnN0cmluZyhzdGFydCwgc3RyLmxlbmd0aCkpOwogIH0KICByZXR1cm4gYnVmZmVyLmpvaW4oIiIpOwp9CmZ1bmN0aW9uIGVzY2FwZVN0cmluZyhzdHIpIHsKICByZXR1cm4gc3RyLnJlcGxhY2VBbGwoLyhbKClcXFxuXHJdKS9nLCBtYXRjaCA9PiB7CiAgICBpZiAobWF0Y2ggPT09ICJcbiIpIHsKICAgICAgcmV0dXJuICJcXG4iOwogICAgfSBlbHNlIGlmIChtYXRjaCA9PT0gIlxyIikgewogICAgICByZXR1cm4gIlxcciI7CiAgICB9CiAgICByZXR1cm4gYFxcJHttYXRjaH1gOwogIH0pOwp9CmZ1bmN0aW9uIF9jb2xsZWN0SlMoZW50cnksIHhyZWYsIGxpc3QsIHBhcmVudHMpIHsKICBpZiAoIWVudHJ5KSB7CiAgICByZXR1cm47CiAgfQogIGxldCBwYXJlbnQgPSBudWxsOwogIGlmIChlbnRyeSBpbnN0YW5jZW9mIFJlZikgewogICAgaWYgKHBhcmVudHMuaGFzKGVudHJ5KSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBwYXJlbnQgPSBlbnRyeTsKICAgIHBhcmVudHMucHV0KHBhcmVudCk7CiAgICBlbnRyeSA9IHhyZWYuZmV0Y2goZW50cnkpOwogIH0KICBpZiAoQXJyYXkuaXNBcnJheShlbnRyeSkpIHsKICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBlbnRyeSkgewogICAgICBfY29sbGVjdEpTKGVsZW1lbnQsIHhyZWYsIGxpc3QsIHBhcmVudHMpOwogICAgfQogIH0gZWxzZSBpZiAoZW50cnkgaW5zdGFuY2VvZiBEaWN0KSB7CiAgICBpZiAoaXNOYW1lKGVudHJ5LmdldCgiUyIpLCAiSmF2YVNjcmlwdCIpKSB7CiAgICAgIGNvbnN0IGpzID0gZW50cnkuZ2V0KCJKUyIpOwogICAgICBsZXQgY29kZTsKICAgICAgaWYgKGpzIGluc3RhbmNlb2YgQmFzZVN0cmVhbSkgewogICAgICAgIGNvZGUgPSBqcy5nZXRTdHJpbmcoKTsKICAgICAgfSBlbHNlIGlmICh0eXBlb2YganMgPT09ICJzdHJpbmciKSB7CiAgICAgICAgY29kZSA9IGpzOwogICAgICB9CiAgICAgIGNvZGUgJiY9IHN0cmluZ1RvUERGU3RyaW5nKGNvZGUpLnJlcGxhY2VBbGwoIlx4MDAiLCAiIik7CiAgICAgIGlmIChjb2RlKSB7CiAgICAgICAgbGlzdC5wdXNoKGNvZGUpOwogICAgICB9CiAgICB9CiAgICBfY29sbGVjdEpTKGVudHJ5LmdldFJhdygiTmV4dCIpLCB4cmVmLCBsaXN0LCBwYXJlbnRzKTsKICB9CiAgaWYgKHBhcmVudCkgewogICAgcGFyZW50cy5yZW1vdmUocGFyZW50KTsKICB9Cn0KZnVuY3Rpb24gY29sbGVjdEFjdGlvbnMoeHJlZiwgZGljdCwgZXZlbnRUeXBlKSB7CiAgY29uc3QgYWN0aW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgY29uc3QgYWRkaXRpb25hbEFjdGlvbnNEaWN0cyA9IGdldEluaGVyaXRhYmxlUHJvcGVydHkoewogICAgZGljdCwKICAgIGtleTogIkFBIiwKICAgIHN0b3BXaGVuRm91bmQ6IGZhbHNlCiAgfSk7CiAgaWYgKGFkZGl0aW9uYWxBY3Rpb25zRGljdHMpIHsKICAgIGZvciAobGV0IGkgPSBhZGRpdGlvbmFsQWN0aW9uc0RpY3RzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgIGNvbnN0IGFkZGl0aW9uYWxBY3Rpb25zID0gYWRkaXRpb25hbEFjdGlvbnNEaWN0c1tpXTsKICAgICAgaWYgKCEoYWRkaXRpb25hbEFjdGlvbnMgaW5zdGFuY2VvZiBEaWN0KSkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGFkZGl0aW9uYWxBY3Rpb25zLmdldEtleXMoKSkgewogICAgICAgIGNvbnN0IGFjdGlvbiA9IGV2ZW50VHlwZVtrZXldOwogICAgICAgIGlmICghYWN0aW9uKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgY29uc3QgYWN0aW9uRGljdCA9IGFkZGl0aW9uYWxBY3Rpb25zLmdldFJhdyhrZXkpOwogICAgICAgIGNvbnN0IHBhcmVudHMgPSBuZXcgUmVmU2V0KCk7CiAgICAgICAgY29uc3QgbGlzdCA9IFtdOwogICAgICAgIF9jb2xsZWN0SlMoYWN0aW9uRGljdCwgeHJlZiwgbGlzdCwgcGFyZW50cyk7CiAgICAgICAgaWYgKGxpc3QubGVuZ3RoID4gMCkgewogICAgICAgICAgYWN0aW9uc1thY3Rpb25dID0gbGlzdDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgaWYgKGRpY3QuaGFzKCJBIikpIHsKICAgIGNvbnN0IGFjdGlvbkRpY3QgPSBkaWN0LmdldCgiQSIpOwogICAgY29uc3QgcGFyZW50cyA9IG5ldyBSZWZTZXQoKTsKICAgIGNvbnN0IGxpc3QgPSBbXTsKICAgIF9jb2xsZWN0SlMoYWN0aW9uRGljdCwgeHJlZiwgbGlzdCwgcGFyZW50cyk7CiAgICBpZiAobGlzdC5sZW5ndGggPiAwKSB7CiAgICAgIGFjdGlvbnMuQWN0aW9uID0gbGlzdDsKICAgIH0KICB9CiAgcmV0dXJuIG9iamVjdFNpemUoYWN0aW9ucykgPiAwID8gYWN0aW9ucyA6IG51bGw7Cn0KY29uc3QgWE1MRW50aXRpZXMgPSB7CiAgMHgzYzogIiZsdDsiLAogIDB4M2U6ICImZ3Q7IiwKICAweDI2OiAiJmFtcDsiLAogIDB4MjI6ICImcXVvdDsiLAogIDB4Mjc6ICImYXBvczsiCn07CmZ1bmN0aW9uKiBjb2RlUG9pbnRJdGVyKHN0cikgewogIGZvciAobGV0IGkgPSAwLCBpaSA9IHN0ci5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CiAgICBjb25zdCBjaGFyID0gc3RyLmNvZGVQb2ludEF0KGkpOwogICAgaWYgKGNoYXIgPiAweGQ3ZmYgJiYgKGNoYXIgPCAweGUwMDAgfHwgY2hhciA+IDB4ZmZmZCkpIHsKICAgICAgaSsrOwogICAgfQogICAgeWllbGQgY2hhcjsKICB9Cn0KZnVuY3Rpb24gZW5jb2RlVG9YbWxTdHJpbmcoc3RyKSB7CiAgY29uc3QgYnVmZmVyID0gW107CiAgbGV0IHN0YXJ0ID0gMDsKICBmb3IgKGxldCBpID0gMCwgaWkgPSBzdHIubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgY29uc3QgY2hhciA9IHN0ci5jb2RlUG9pbnRBdChpKTsKICAgIGlmICgweDIwIDw9IGNoYXIgJiYgY2hhciA8PSAweDdlKSB7CiAgICAgIGNvbnN0IGVudGl0eSA9IFhNTEVudGl0aWVzW2NoYXJdOwogICAgICBpZiAoZW50aXR5KSB7CiAgICAgICAgaWYgKHN0YXJ0IDwgaSkgewogICAgICAgICAgYnVmZmVyLnB1c2goc3RyLnN1YnN0cmluZyhzdGFydCwgaSkpOwogICAgICAgIH0KICAgICAgICBidWZmZXIucHVzaChlbnRpdHkpOwogICAgICAgIHN0YXJ0ID0gaSArIDE7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGlmIChzdGFydCA8IGkpIHsKICAgICAgICBidWZmZXIucHVzaChzdHIuc3Vic3RyaW5nKHN0YXJ0LCBpKSk7CiAgICAgIH0KICAgICAgYnVmZmVyLnB1c2goYCYjeCR7Y2hhci50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX07YCk7CiAgICAgIGlmIChjaGFyID4gMHhkN2ZmICYmIChjaGFyIDwgMHhlMDAwIHx8IGNoYXIgPiAweGZmZmQpKSB7CiAgICAgICAgaSsrOwogICAgICB9CiAgICAgIHN0YXJ0ID0gaSArIDE7CiAgICB9CiAgfQogIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSB7CiAgICByZXR1cm4gc3RyOwogIH0KICBpZiAoc3RhcnQgPCBzdHIubGVuZ3RoKSB7CiAgICBidWZmZXIucHVzaChzdHIuc3Vic3RyaW5nKHN0YXJ0LCBzdHIubGVuZ3RoKSk7CiAgfQogIHJldHVybiBidWZmZXIuam9pbigiIik7Cn0KZnVuY3Rpb24gdmFsaWRhdGVGb250TmFtZShmb250RmFtaWx5LCBtdXN0V2FybiA9IGZhbHNlKSB7CiAgY29uc3QgbSA9IC9eKCJ8JykuKigifCcpJC8uZXhlYyhmb250RmFtaWx5KTsKICBpZiAobSAmJiBtWzFdID09PSBtWzJdKSB7CiAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAoYFteXFxcXF0ke21bMV19YCk7CiAgICBpZiAocmUudGVzdChmb250RmFtaWx5LnNsaWNlKDEsIC0xKSkpIHsKICAgICAgaWYgKG11c3RXYXJuKSB7CiAgICAgICAgd2FybihgRm9udEZhbWlseSBjb250YWlucyB1bmVzY2FwZWQgJHttWzFdfTogJHtmb250RmFtaWx5fS5gKTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfSBlbHNlIHsKICAgIGZvciAoY29uc3QgaWRlbnQgb2YgZm9udEZhbWlseS5zcGxpdCgvWyBcdF0rLykpIHsKICAgICAgaWYgKC9eKFxkfCgtKFxkfC0pKSkvLnRlc3QoaWRlbnQpIHx8ICEvXltcdy1cXF0rJC8udGVzdChpZGVudCkpIHsKICAgICAgICBpZiAobXVzdFdhcm4pIHsKICAgICAgICAgIHdhcm4oYEZvbnRGYW1pbHkgY29udGFpbnMgaW52YWxpZCA8Y3VzdG9tLWlkZW50PjogJHtmb250RmFtaWx5fS5gKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgfQogIHJldHVybiB0cnVlOwp9CmZ1bmN0aW9uIHZhbGlkYXRlQ1NTRm9udChjc3NGb250SW5mbykgewogIGNvbnN0IERFRkFVTFRfQ1NTX0ZPTlRfT0JMSVFVRSA9ICIxNCI7CiAgY29uc3QgREVGQVVMVF9DU1NfRk9OVF9XRUlHSFQgPSAiNDAwIjsKICBjb25zdCBDU1NfRk9OVF9XRUlHSFRfVkFMVUVTID0gbmV3IFNldChbIjEwMCIsICIyMDAiLCAiMzAwIiwgIjQwMCIsICI1MDAiLCAiNjAwIiwgIjcwMCIsICI4MDAiLCAiOTAwIiwgIjEwMDAiLCAibm9ybWFsIiwgImJvbGQiLCAiYm9sZGVyIiwgImxpZ2h0ZXIiXSk7CiAgY29uc3QgewogICAgZm9udEZhbWlseSwKICAgIGZvbnRXZWlnaHQsCiAgICBpdGFsaWNBbmdsZQogIH0gPSBjc3NGb250SW5mbzsKICBpZiAoIXZhbGlkYXRlRm9udE5hbWUoZm9udEZhbWlseSwgdHJ1ZSkpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgY29uc3Qgd2VpZ2h0ID0gZm9udFdlaWdodCA/IGZvbnRXZWlnaHQudG9TdHJpbmcoKSA6ICIiOwogIGNzc0ZvbnRJbmZvLmZvbnRXZWlnaHQgPSBDU1NfRk9OVF9XRUlHSFRfVkFMVUVTLmhhcyh3ZWlnaHQpID8gd2VpZ2h0IDogREVGQVVMVF9DU1NfRk9OVF9XRUlHSFQ7CiAgY29uc3QgYW5nbGUgPSBwYXJzZUZsb2F0KGl0YWxpY0FuZ2xlKTsKICBjc3NGb250SW5mby5pdGFsaWNBbmdsZSA9IGlzTmFOKGFuZ2xlKSB8fCBhbmdsZSA8IC05MCB8fCBhbmdsZSA+IDkwID8gREVGQVVMVF9DU1NfRk9OVF9PQkxJUVVFIDogaXRhbGljQW5nbGUudG9TdHJpbmcoKTsKICByZXR1cm4gdHJ1ZTsKfQpmdW5jdGlvbiByZWNvdmVySnNVUkwoc3RyKSB7CiAgY29uc3QgVVJMX09QRU5fTUVUSE9EUyA9IFsiYXBwLmxhdW5jaFVSTCIsICJ3aW5kb3cub3BlbiIsICJ4ZmEuaG9zdC5nb3RvVVJMIl07CiAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKCJeXFxzKigiICsgVVJMX09QRU5fTUVUSE9EUy5qb2luKCJ8IikucmVwbGFjZUFsbCgiLiIsICJcXC4iKSArICIpXFwoKD86J3xcIikoW14nXCJdKikoPzonfFwiKSg/OixcXHMqKFxcdyspXFwpfFxcKSkiLCAiaSIpOwogIGNvbnN0IGpzVXJsID0gcmVnZXguZXhlYyhzdHIpOwogIGlmIChqc1VybD8uWzJdKSB7CiAgICByZXR1cm4gewogICAgICB1cmw6IGpzVXJsWzJdLAogICAgICBuZXdXaW5kb3c6IGpzVXJsWzFdID09PSAiYXBwLmxhdW5jaFVSTCIgJiYganNVcmxbM10gPT09ICJ0cnVlIgogICAgfTsKICB9CiAgcmV0dXJuIG51bGw7Cn0KZnVuY3Rpb24gbnVtYmVyVG9TdHJpbmcodmFsdWUpIHsKICBpZiAoTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkpIHsKICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpOwogIH0KICBjb25zdCByb3VuZGVkVmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlICogMTAwKTsKICBpZiAocm91bmRlZFZhbHVlICUgMTAwID09PSAwKSB7CiAgICByZXR1cm4gKHJvdW5kZWRWYWx1ZSAvIDEwMCkudG9TdHJpbmcoKTsKICB9CiAgaWYgKHJvdW5kZWRWYWx1ZSAlIDEwID09PSAwKSB7CiAgICByZXR1cm4gdmFsdWUudG9GaXhlZCgxKTsKICB9CiAgcmV0dXJuIHZhbHVlLnRvRml4ZWQoMik7Cn0KZnVuY3Rpb24gZ2V0TmV3QW5ub3RhdGlvbnNNYXAoYW5ub3RhdGlvblN0b3JhZ2UpIHsKICBpZiAoIWFubm90YXRpb25TdG9yYWdlKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgY29uc3QgbmV3QW5ub3RhdGlvbnNCeVBhZ2UgPSBuZXcgTWFwKCk7CiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgYW5ub3RhdGlvblN0b3JhZ2UpIHsKICAgIGlmICgha2V5LnN0YXJ0c1dpdGgoQW5ub3RhdGlvbkVkaXRvclByZWZpeCkpIHsKICAgICAgY29udGludWU7CiAgICB9CiAgICBsZXQgYW5ub3RhdGlvbnMgPSBuZXdBbm5vdGF0aW9uc0J5UGFnZS5nZXQodmFsdWUucGFnZUluZGV4KTsKICAgIGlmICghYW5ub3RhdGlvbnMpIHsKICAgICAgYW5ub3RhdGlvbnMgPSBbXTsKICAgICAgbmV3QW5ub3RhdGlvbnNCeVBhZ2Uuc2V0KHZhbHVlLnBhZ2VJbmRleCwgYW5ub3RhdGlvbnMpOwogICAgfQogICAgYW5ub3RhdGlvbnMucHVzaCh2YWx1ZSk7CiAgfQogIHJldHVybiBuZXdBbm5vdGF0aW9uc0J5UGFnZS5zaXplID4gMCA/IG5ld0Fubm90YXRpb25zQnlQYWdlIDogbnVsbDsKfQpmdW5jdGlvbiBzdHJpbmdUb0FzY2lpT3JVVEYxNkJFKHN0cikgewogIHJldHVybiBpc0FzY2lpKHN0cikgPyBzdHIgOiBzdHJpbmdUb1VURjE2U3RyaW5nKHN0ciwgdHJ1ZSk7Cn0KZnVuY3Rpb24gaXNBc2NpaShzdHIpIHsKICByZXR1cm4gL15bXHgwMC1ceDdGXSokLy50ZXN0KHN0cik7Cn0KZnVuY3Rpb24gc3RyaW5nVG9VVEYxNkhleFN0cmluZyhzdHIpIHsKICBjb25zdCBidWYgPSBbXTsKICBmb3IgKGxldCBpID0gMCwgaWkgPSBzdHIubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgY29uc3QgY2hhciA9IHN0ci5jaGFyQ29kZUF0KGkpOwogICAgYnVmLnB1c2goaGV4TnVtYmVyc1tjaGFyID4+IDggJiAweGZmXSwgaGV4TnVtYmVyc1tjaGFyICYgMHhmZl0pOwogIH0KICByZXR1cm4gYnVmLmpvaW4oIiIpOwp9CmZ1bmN0aW9uIHN0cmluZ1RvVVRGMTZTdHJpbmcoc3RyLCBiaWdFbmRpYW4gPSBmYWxzZSkgewogIGNvbnN0IGJ1ZiA9IFtdOwogIGlmIChiaWdFbmRpYW4pIHsKICAgIGJ1Zi5wdXNoKCJceEZFXHhGRiIpOwogIH0KICBmb3IgKGxldCBpID0gMCwgaWkgPSBzdHIubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgY29uc3QgY2hhciA9IHN0ci5jaGFyQ29kZUF0KGkpOwogICAgYnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyID4+IDggJiAweGZmKSwgU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyICYgMHhmZikpOwogIH0KICByZXR1cm4gYnVmLmpvaW4oIiIpOwp9CmZ1bmN0aW9uIGdldFJvdGF0aW9uTWF0cml4KHJvdGF0aW9uLCB3aWR0aCwgaGVpZ2h0KSB7CiAgc3dpdGNoIChyb3RhdGlvbikgewogICAgY2FzZSA5MDoKICAgICAgcmV0dXJuIFswLCAxLCAtMSwgMCwgd2lkdGgsIDBdOwogICAgY2FzZSAxODA6CiAgICAgIHJldHVybiBbLTEsIDAsIDAsIC0xLCB3aWR0aCwgaGVpZ2h0XTsKICAgIGNhc2UgMjcwOgogICAgICByZXR1cm4gWzAsIC0xLCAxLCAwLCAwLCBoZWlnaHRdOwogICAgZGVmYXVsdDoKICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHJvdGF0aW9uIik7CiAgfQp9CmZ1bmN0aW9uIGdldFNpemVJbkJ5dGVzKHgpIHsKICByZXR1cm4gTWF0aC5jZWlsKE1hdGguY2VpbChNYXRoLmxvZzIoMSArIHgpKSAvIDgpOwp9Cgo7Ly8gLi9leHRlcm5hbC9xY21zL3FjbXNfdXRpbHMuanMKY2xhc3MgUUNNUyB7CiAgc3RhdGljIF9tb2R1bGUgPSBudWxsOwogIHN0YXRpYyBfbXVzdEFkZEFscGhhID0gZmFsc2U7CiAgc3RhdGljIF9kZXN0QnVmZmVyID0gbnVsbDsKfQpmdW5jdGlvbiBjb3B5X3Jlc3VsdChwdHIsIGxlbikgewogIGNvbnN0IHsKICAgIF9tb2R1bGUsCiAgICBfbXVzdEFkZEFscGhhLAogICAgX2Rlc3RCdWZmZXIKICB9ID0gUUNNUzsKICBjb25zdCByZXN1bHQgPSBuZXcgVWludDhBcnJheShfbW9kdWxlLm1lbW9yeS5idWZmZXIsIHB0ciwgbGVuKTsKICBpZiAocmVzdWx0Lmxlbmd0aCA9PT0gX2Rlc3RCdWZmZXIubGVuZ3RoKSB7CiAgICBfZGVzdEJ1ZmZlci5zZXQocmVzdWx0KTsKICAgIHJldHVybjsKICB9CiAgaWYgKF9tdXN0QWRkQWxwaGEpIHsKICAgIGZvciAobGV0IGkgPSAwLCBqID0gMCwgaWkgPSByZXN1bHQubGVuZ3RoOyBpIDwgaWk7IGkgKz0gMywgaiArPSA0KSB7CiAgICAgIF9kZXN0QnVmZmVyW2pdID0gcmVzdWx0W2ldOwogICAgICBfZGVzdEJ1ZmZlcltqICsgMV0gPSByZXN1bHRbaSArIDFdOwogICAgICBfZGVzdEJ1ZmZlcltqICsgMl0gPSByZXN1bHRbaSArIDJdOwogICAgICBfZGVzdEJ1ZmZlcltqICsgM10gPSAyNTU7CiAgICB9CiAgfSBlbHNlIHsKICAgIGZvciAobGV0IGkgPSAwLCBqID0gMCwgaWkgPSByZXN1bHQubGVuZ3RoOyBpIDwgaWk7IGkgKz0gMywgaiArPSA0KSB7CiAgICAgIF9kZXN0QnVmZmVyW2pdID0gcmVzdWx0W2ldOwogICAgICBfZGVzdEJ1ZmZlcltqICsgMV0gPSByZXN1bHRbaSArIDFdOwogICAgICBfZGVzdEJ1ZmZlcltqICsgMl0gPSByZXN1bHRbaSArIDJdOwogICAgfQogIH0KfQpmdW5jdGlvbiBjb3B5X3JnYihwdHIpIHsKICBRQ01TLl9kZXN0QnVmZmVyLnNldChuZXcgVWludDhBcnJheShRQ01TLl9tb2R1bGUubWVtb3J5LmJ1ZmZlciwgcHRyLCAzKSk7Cn0KCjsvLyAuL2V4dGVybmFsL3FjbXMvcWNtcy5qcwoKbGV0IHdhc207CmNvbnN0IGNhY2hlZFRleHREZWNvZGVyID0gdHlwZW9mIFRleHREZWNvZGVyICE9PSAndW5kZWZpbmVkJyA/IG5ldyBUZXh0RGVjb2RlcigndXRmLTgnLCB7CiAgaWdub3JlQk9NOiB0cnVlLAogIGZhdGFsOiB0cnVlCn0pIDogewogIGRlY29kZTogKCkgPT4gewogICAgdGhyb3cgRXJyb3IoJ1RleHREZWNvZGVyIG5vdCBhdmFpbGFibGUnKTsKICB9Cn07CmlmICh0eXBlb2YgVGV4dERlY29kZXIgIT09ICd1bmRlZmluZWQnKSB7CiAgY2FjaGVkVGV4dERlY29kZXIuZGVjb2RlKCk7Cn0KOwpsZXQgY2FjaGVkVWludDhBcnJheU1lbW9yeTAgPSBudWxsOwpmdW5jdGlvbiBnZXRVaW50OEFycmF5TWVtb3J5MCgpIHsKICBpZiAoY2FjaGVkVWludDhBcnJheU1lbW9yeTAgPT09IG51bGwgfHwgY2FjaGVkVWludDhBcnJheU1lbW9yeTAuYnl0ZUxlbmd0aCA9PT0gMCkgewogICAgY2FjaGVkVWludDhBcnJheU1lbW9yeTAgPSBuZXcgVWludDhBcnJheSh3YXNtLm1lbW9yeS5idWZmZXIpOwogIH0KICByZXR1cm4gY2FjaGVkVWludDhBcnJheU1lbW9yeTA7Cn0KZnVuY3Rpb24gZ2V0U3RyaW5nRnJvbVdhc20wKHB0ciwgbGVuKSB7CiAgcHRyID0gcHRyID4+PiAwOwogIHJldHVybiBjYWNoZWRUZXh0RGVjb2Rlci5kZWNvZGUoZ2V0VWludDhBcnJheU1lbW9yeTAoKS5zdWJhcnJheShwdHIsIHB0ciArIGxlbikpOwp9CmxldCBXQVNNX1ZFQ1RPUl9MRU4gPSAwOwpmdW5jdGlvbiBwYXNzQXJyYXk4VG9XYXNtMChhcmcsIG1hbGxvYykgewogIGNvbnN0IHB0ciA9IG1hbGxvYyhhcmcubGVuZ3RoICogMSwgMSkgPj4+IDA7CiAgZ2V0VWludDhBcnJheU1lbW9yeTAoKS5zZXQoYXJnLCBwdHIgLyAxKTsKICBXQVNNX1ZFQ1RPUl9MRU4gPSBhcmcubGVuZ3RoOwogIHJldHVybiBwdHI7Cn0KZnVuY3Rpb24gcWNtc19jb252ZXJ0X2FycmF5KHRyYW5zZm9ybWVyLCBzcmMpIHsKICBjb25zdCBwdHIwID0gcGFzc0FycmF5OFRvV2FzbTAoc3JjLCB3YXNtLl9fd2JpbmRnZW5fbWFsbG9jKTsKICBjb25zdCBsZW4wID0gV0FTTV9WRUNUT1JfTEVOOwogIHdhc20ucWNtc19jb252ZXJ0X2FycmF5KHRyYW5zZm9ybWVyLCBwdHIwLCBsZW4wKTsKfQpmdW5jdGlvbiBxY21zX2NvbnZlcnRfb25lKHRyYW5zZm9ybWVyLCBzcmMpIHsKICB3YXNtLnFjbXNfY29udmVydF9vbmUodHJhbnNmb3JtZXIsIHNyYyk7Cn0KZnVuY3Rpb24gcWNtc19jb252ZXJ0X3RocmVlKHRyYW5zZm9ybWVyLCBzcmMxLCBzcmMyLCBzcmMzKSB7CiAgd2FzbS5xY21zX2NvbnZlcnRfdGhyZWUodHJhbnNmb3JtZXIsIHNyYzEsIHNyYzIsIHNyYzMpOwp9CmZ1bmN0aW9uIHFjbXNfY29udmVydF9mb3VyKHRyYW5zZm9ybWVyLCBzcmMxLCBzcmMyLCBzcmMzLCBzcmM0KSB7CiAgd2FzbS5xY21zX2NvbnZlcnRfZm91cih0cmFuc2Zvcm1lciwgc3JjMSwgc3JjMiwgc3JjMywgc3JjNCk7Cn0KZnVuY3Rpb24gcWNtc190cmFuc2Zvcm1lcl9mcm9tX21lbW9yeShtZW0sIGluX3R5cGUsIGludGVudCkgewogIGNvbnN0IHB0cjAgPSBwYXNzQXJyYXk4VG9XYXNtMChtZW0sIHdhc20uX193YmluZGdlbl9tYWxsb2MpOwogIGNvbnN0IGxlbjAgPSBXQVNNX1ZFQ1RPUl9MRU47CiAgY29uc3QgcmV0ID0gd2FzbS5xY21zX3RyYW5zZm9ybWVyX2Zyb21fbWVtb3J5KHB0cjAsIGxlbjAsIGluX3R5cGUsIGludGVudCk7CiAgcmV0dXJuIHJldCA+Pj4gMDsKfQpmdW5jdGlvbiBxY21zX2Ryb3BfdHJhbnNmb3JtZXIodHJhbnNmb3JtZXIpIHsKICB3YXNtLnFjbXNfZHJvcF90cmFuc2Zvcm1lcih0cmFuc2Zvcm1lcik7Cn0KY29uc3QgRGF0YVR5cGUgPSBPYmplY3QuZnJlZXplKHsKICBSR0I4OiAwLAogICIwIjogIlJHQjgiLAogIFJHQkE4OiAxLAogICIxIjogIlJHQkE4IiwKICBCR1JBODogMiwKICAiMiI6ICJCR1JBOCIsCiAgR3JheTg6IDMsCiAgIjMiOiAiR3JheTgiLAogIEdyYXlBODogNCwKICAiNCI6ICJHcmF5QTgiLAogIENNWUs6IDUsCiAgIjUiOiAiQ01ZSyIKfSk7CmNvbnN0IEludGVudCA9IE9iamVjdC5mcmVlemUoewogIFBlcmNlcHR1YWw6IDAsCiAgIjAiOiAiUGVyY2VwdHVhbCIsCiAgUmVsYXRpdmVDb2xvcmltZXRyaWM6IDEsCiAgIjEiOiAiUmVsYXRpdmVDb2xvcmltZXRyaWMiLAogIFNhdHVyYXRpb246IDIsCiAgIjIiOiAiU2F0dXJhdGlvbiIsCiAgQWJzb2x1dGVDb2xvcmltZXRyaWM6IDMsCiAgIjMiOiAiQWJzb2x1dGVDb2xvcmltZXRyaWMiCn0pOwphc3luYyBmdW5jdGlvbiBfX3diZ19sb2FkKG1vZHVsZSwgaW1wb3J0cykgewogIGlmICh0eXBlb2YgUmVzcG9uc2UgPT09ICdmdW5jdGlvbicgJiYgbW9kdWxlIGluc3RhbmNlb2YgUmVzcG9uc2UpIHsKICAgIGlmICh0eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcgPT09ICdmdW5jdGlvbicpIHsKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm4gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcobW9kdWxlLCBpbXBvcnRzKTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIGlmIChtb2R1bGUuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpICE9ICdhcHBsaWNhdGlvbi93YXNtJykgewogICAgICAgICAgY29uc29sZS53YXJuKCJgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmdgIGZhaWxlZCBiZWNhdXNlIHlvdXIgc2VydmVyIGRvZXMgbm90IHNlcnZlIFdhc20gd2l0aCBgYXBwbGljYXRpb24vd2FzbWAgTUlNRSB0eXBlLiBGYWxsaW5nIGJhY2sgdG8gYFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlYCB3aGljaCBpcyBzbG93ZXIuIE9yaWdpbmFsIGVycm9yOlxuIiwgZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IGU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBjb25zdCBieXRlcyA9IGF3YWl0IG1vZHVsZS5hcnJheUJ1ZmZlcigpOwogICAgcmV0dXJuIGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKGJ5dGVzLCBpbXBvcnRzKTsKICB9IGVsc2UgewogICAgY29uc3QgaW5zdGFuY2UgPSBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShtb2R1bGUsIGltcG9ydHMpOwogICAgaWYgKGluc3RhbmNlIGluc3RhbmNlb2YgV2ViQXNzZW1ibHkuSW5zdGFuY2UpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBpbnN0YW5jZSwKICAgICAgICBtb2R1bGUKICAgICAgfTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgIH0KICB9Cn0KZnVuY3Rpb24gX193YmdfZ2V0X2ltcG9ydHMoKSB7CiAgY29uc3QgaW1wb3J0cyA9IHt9OwogIGltcG9ydHMud2JnID0ge307CiAgaW1wb3J0cy53YmcuX193YmdfY29weXJlc3VsdF9iMDhlZTdkMjczZjI5NWRkID0gZnVuY3Rpb24gKGFyZzAsIGFyZzEpIHsKICAgIGNvcHlfcmVzdWx0KGFyZzAgPj4+IDAsIGFyZzEgPj4+IDApOwogIH07CiAgaW1wb3J0cy53YmcuX193YmdfY29weXJnYl9kNjBjZTE3YmIwNWQ5YjY3ID0gZnVuY3Rpb24gKGFyZzApIHsKICAgIGNvcHlfcmdiKGFyZzAgPj4+IDApOwogIH07CiAgaW1wb3J0cy53YmcuX193YmluZGdlbl9pbml0X2V4dGVybnJlZl90YWJsZSA9IGZ1bmN0aW9uICgpIHsKICAgIGNvbnN0IHRhYmxlID0gd2FzbS5fX3diaW5kZ2VuX2V4cG9ydF8wOwogICAgY29uc3Qgb2Zmc2V0ID0gdGFibGUuZ3Jvdyg0KTsKICAgIHRhYmxlLnNldCgwLCB1bmRlZmluZWQpOwogICAgdGFibGUuc2V0KG9mZnNldCArIDAsIHVuZGVmaW5lZCk7CiAgICB0YWJsZS5zZXQob2Zmc2V0ICsgMSwgbnVsbCk7CiAgICB0YWJsZS5zZXQob2Zmc2V0ICsgMiwgdHJ1ZSk7CiAgICB0YWJsZS5zZXQob2Zmc2V0ICsgMywgZmFsc2UpOwogIH07CiAgaW1wb3J0cy53YmcuX193YmluZGdlbl90aHJvdyA9IGZ1bmN0aW9uIChhcmcwLCBhcmcxKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoZ2V0U3RyaW5nRnJvbVdhc20wKGFyZzAsIGFyZzEpKTsKICB9OwogIHJldHVybiBpbXBvcnRzOwp9CmZ1bmN0aW9uIF9fd2JnX2luaXRfbWVtb3J5KGltcG9ydHMsIG1lbW9yeSkge30KZnVuY3Rpb24gX193YmdfZmluYWxpemVfaW5pdChpbnN0YW5jZSwgbW9kdWxlKSB7CiAgd2FzbSA9IGluc3RhbmNlLmV4cG9ydHM7CiAgX193YmdfaW5pdC5fX3diaW5kZ2VuX3dhc21fbW9kdWxlID0gbW9kdWxlOwogIGNhY2hlZFVpbnQ4QXJyYXlNZW1vcnkwID0gbnVsbDsKICB3YXNtLl9fd2JpbmRnZW5fc3RhcnQoKTsKICByZXR1cm4gd2FzbTsKfQpmdW5jdGlvbiBpbml0U3luYyhtb2R1bGUpIHsKICBpZiAod2FzbSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gd2FzbTsKICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgIGlmIChPYmplY3QuZ2V0UHJvdG90eXBlT2YobW9kdWxlKSA9PT0gT2JqZWN0LnByb3RvdHlwZSkgewogICAgICAoewogICAgICAgIG1vZHVsZQogICAgICB9ID0gbW9kdWxlKTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnNvbGUud2FybigndXNpbmcgZGVwcmVjYXRlZCBwYXJhbWV0ZXJzIGZvciBgaW5pdFN5bmMoKWA7IHBhc3MgYSBzaW5nbGUgb2JqZWN0IGluc3RlYWQnKTsKICAgIH0KICB9CiAgY29uc3QgaW1wb3J0cyA9IF9fd2JnX2dldF9pbXBvcnRzKCk7CiAgX193YmdfaW5pdF9tZW1vcnkoaW1wb3J0cyk7CiAgaWYgKCEobW9kdWxlIGluc3RhbmNlb2YgV2ViQXNzZW1ibHkuTW9kdWxlKSkgewogICAgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShtb2R1bGUpOwogIH0KICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIGltcG9ydHMpOwogIHJldHVybiBfX3diZ19maW5hbGl6ZV9pbml0KGluc3RhbmNlLCBtb2R1bGUpOwp9CmFzeW5jIGZ1bmN0aW9uIF9fd2JnX2luaXQobW9kdWxlX29yX3BhdGgpIHsKICBpZiAod2FzbSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gd2FzbTsKICBpZiAodHlwZW9mIG1vZHVsZV9vcl9wYXRoICE9PSAndW5kZWZpbmVkJykgewogICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZihtb2R1bGVfb3JfcGF0aCkgPT09IE9iamVjdC5wcm90b3R5cGUpIHsKICAgICAgKHsKICAgICAgICBtb2R1bGVfb3JfcGF0aAogICAgICB9ID0gbW9kdWxlX29yX3BhdGgpOwogICAgfSBlbHNlIHsKICAgICAgY29uc29sZS53YXJuKCd1c2luZyBkZXByZWNhdGVkIHBhcmFtZXRlcnMgZm9yIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbjsgcGFzcyBhIHNpbmdsZSBvYmplY3QgaW5zdGVhZCcpOwogICAgfQogIH0KICBpZiAodHlwZW9mIG1vZHVsZV9vcl9wYXRoID09PSAndW5kZWZpbmVkJykgewogICAgbW9kdWxlX29yX3BhdGggPSBuZXcgVVJMKCdxY21zX2JnLndhc20nLCBpbXBvcnQubWV0YS51cmwpOwogIH0KICBjb25zdCBpbXBvcnRzID0gX193YmdfZ2V0X2ltcG9ydHMoKTsKICBpZiAodHlwZW9mIG1vZHVsZV9vcl9wYXRoID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgUmVxdWVzdCA9PT0gJ2Z1bmN0aW9uJyAmJiBtb2R1bGVfb3JfcGF0aCBpbnN0YW5jZW9mIFJlcXVlc3QgfHwgdHlwZW9mIFVSTCA9PT0gJ2Z1bmN0aW9uJyAmJiBtb2R1bGVfb3JfcGF0aCBpbnN0YW5jZW9mIFVSTCkgewogICAgbW9kdWxlX29yX3BhdGggPSBmZXRjaChtb2R1bGVfb3JfcGF0aCk7CiAgfQogIF9fd2JnX2luaXRfbWVtb3J5KGltcG9ydHMpOwogIGNvbnN0IHsKICAgIGluc3RhbmNlLAogICAgbW9kdWxlCiAgfSA9IGF3YWl0IF9fd2JnX2xvYWQoYXdhaXQgbW9kdWxlX29yX3BhdGgsIGltcG9ydHMpOwogIHJldHVybiBfX3diZ19maW5hbGl6ZV9pbml0KGluc3RhbmNlLCBtb2R1bGUpOwp9CgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIGNvbnN0IHFjbXMgPSAoKC8qIHVudXNlZCBwdXJlIGV4cHJlc3Npb24gb3Igc3VwZXIgKi8gbnVsbCAmJiAoX193YmdfaW5pdCkpKTsKOy8vIC4vc3JjL2NvcmUvY29sb3JzcGFjZS5qcwoKCmZ1bmN0aW9uIHJlc2l6ZVJnYkltYWdlKHNyYywgZGVzdCwgdzEsIGgxLCB3MiwgaDIsIGFscGhhMDEpIHsKICBjb25zdCBDT01QT05FTlRTID0gMzsKICBhbHBoYTAxID0gYWxwaGEwMSAhPT0gMSA/IDAgOiBhbHBoYTAxOwogIGNvbnN0IHhSYXRpbyA9IHcxIC8gdzI7CiAgY29uc3QgeVJhdGlvID0gaDEgLyBoMjsKICBsZXQgbmV3SW5kZXggPSAwLAogICAgb2xkSW5kZXg7CiAgY29uc3QgeFNjYWxlZCA9IG5ldyBVaW50MTZBcnJheSh3Mik7CiAgY29uc3QgdzFTY2FubGluZSA9IHcxICogQ09NUE9ORU5UUzsKICBmb3IgKGxldCBpID0gMDsgaSA8IHcyOyBpKyspIHsKICAgIHhTY2FsZWRbaV0gPSBNYXRoLmZsb29yKGkgKiB4UmF0aW8pICogQ09NUE9ORU5UUzsKICB9CiAgZm9yIChsZXQgaSA9IDA7IGkgPCBoMjsgaSsrKSB7CiAgICBjb25zdCBweSA9IE1hdGguZmxvb3IoaSAqIHlSYXRpbykgKiB3MVNjYW5saW5lOwogICAgZm9yIChsZXQgaiA9IDA7IGogPCB3MjsgaisrKSB7CiAgICAgIG9sZEluZGV4ID0gcHkgKyB4U2NhbGVkW2pdOwogICAgICBkZXN0W25ld0luZGV4KytdID0gc3JjW29sZEluZGV4KytdOwogICAgICBkZXN0W25ld0luZGV4KytdID0gc3JjW29sZEluZGV4KytdOwogICAgICBkZXN0W25ld0luZGV4KytdID0gc3JjW29sZEluZGV4KytdOwogICAgICBuZXdJbmRleCArPSBhbHBoYTAxOwogICAgfQogIH0KfQpmdW5jdGlvbiByZXNpemVSZ2JhSW1hZ2Uoc3JjLCBkZXN0LCB3MSwgaDEsIHcyLCBoMiwgYWxwaGEwMSkgewogIGNvbnN0IHhSYXRpbyA9IHcxIC8gdzI7CiAgY29uc3QgeVJhdGlvID0gaDEgLyBoMjsKICBsZXQgbmV3SW5kZXggPSAwOwogIGNvbnN0IHhTY2FsZWQgPSBuZXcgVWludDE2QXJyYXkodzIpOwogIGlmIChhbHBoYTAxID09PSAxKSB7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHcyOyBpKyspIHsKICAgICAgeFNjYWxlZFtpXSA9IE1hdGguZmxvb3IoaSAqIHhSYXRpbyk7CiAgICB9CiAgICBjb25zdCBzcmMzMiA9IG5ldyBVaW50MzJBcnJheShzcmMuYnVmZmVyKTsKICAgIGNvbnN0IGRlc3QzMiA9IG5ldyBVaW50MzJBcnJheShkZXN0LmJ1ZmZlcik7CiAgICBjb25zdCByZ2JNYXNrID0gRmVhdHVyZVRlc3QuaXNMaXR0bGVFbmRpYW4gPyAweDAwZmZmZmZmIDogMHhmZmZmZmYwMDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaDI7IGkrKykgewogICAgICBjb25zdCBidWYgPSBzcmMzMi5zdWJhcnJheShNYXRoLmZsb29yKGkgKiB5UmF0aW8pICogdzEpOwogICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHcyOyBqKyspIHsKICAgICAgICBkZXN0MzJbbmV3SW5kZXgrK10gfD0gYnVmW3hTY2FsZWRbal1dICYgcmdiTWFzazsKICAgICAgfQogICAgfQogIH0gZWxzZSB7CiAgICBjb25zdCBDT01QT05FTlRTID0gNDsKICAgIGNvbnN0IHcxU2NhbmxpbmUgPSB3MSAqIENPTVBPTkVOVFM7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHcyOyBpKyspIHsKICAgICAgeFNjYWxlZFtpXSA9IE1hdGguZmxvb3IoaSAqIHhSYXRpbykgKiBDT01QT05FTlRTOwogICAgfQogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoMjsgaSsrKSB7CiAgICAgIGNvbnN0IGJ1ZiA9IHNyYy5zdWJhcnJheShNYXRoLmZsb29yKGkgKiB5UmF0aW8pICogdzFTY2FubGluZSk7CiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdzI7IGorKykgewogICAgICAgIGNvbnN0IG9sZEluZGV4ID0geFNjYWxlZFtqXTsKICAgICAgICBkZXN0W25ld0luZGV4KytdID0gYnVmW29sZEluZGV4XTsKICAgICAgICBkZXN0W25ld0luZGV4KytdID0gYnVmW29sZEluZGV4ICsgMV07CiAgICAgICAgZGVzdFtuZXdJbmRleCsrXSA9IGJ1ZltvbGRJbmRleCArIDJdOwogICAgICB9CiAgICB9CiAgfQp9CmZ1bmN0aW9uIGNvcHlSZ2JhSW1hZ2Uoc3JjLCBkZXN0LCBhbHBoYTAxKSB7CiAgaWYgKGFscGhhMDEgPT09IDEpIHsKICAgIGNvbnN0IHNyYzMyID0gbmV3IFVpbnQzMkFycmF5KHNyYy5idWZmZXIpOwogICAgY29uc3QgZGVzdDMyID0gbmV3IFVpbnQzMkFycmF5KGRlc3QuYnVmZmVyKTsKICAgIGNvbnN0IHJnYk1hc2sgPSBGZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbiA/IDB4MDBmZmZmZmYgOiAweGZmZmZmZjAwOwogICAgZm9yIChsZXQgaSA9IDAsIGlpID0gc3JjMzIubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICBkZXN0MzJbaV0gfD0gc3JjMzJbaV0gJiByZ2JNYXNrOwogICAgfQogIH0gZWxzZSB7CiAgICBsZXQgaiA9IDA7CiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBzcmMubGVuZ3RoOyBpIDwgaWk7IGkgKz0gNCkgewogICAgICBkZXN0W2orK10gPSBzcmNbaV07CiAgICAgIGRlc3RbaisrXSA9IHNyY1tpICsgMV07CiAgICAgIGRlc3RbaisrXSA9IHNyY1tpICsgMl07CiAgICB9CiAgfQp9CmNsYXNzIENvbG9yU3BhY2UgewogIGNvbnN0cnVjdG9yKG5hbWUsIG51bUNvbXBzKSB7CiAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgdGhpcy5udW1Db21wcyA9IG51bUNvbXBzOwogIH0KICBnZXRSZ2Ioc3JjLCBzcmNPZmZzZXQpIHsKICAgIGNvbnN0IHJnYiA9IG5ldyBVaW50OENsYW1wZWRBcnJheSgzKTsKICAgIHRoaXMuZ2V0UmdiSXRlbShzcmMsIHNyY09mZnNldCwgcmdiLCAwKTsKICAgIHJldHVybiByZ2I7CiAgfQogIGdldFJnYkl0ZW0oc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHsKICAgIHVucmVhY2hhYmxlKCJTaG91bGQgbm90IGNhbGwgQ29sb3JTcGFjZS5nZXRSZ2JJdGVtIik7CiAgfQogIGdldFJnYkJ1ZmZlcihzcmMsIHNyY09mZnNldCwgY291bnQsIGRlc3QsIGRlc3RPZmZzZXQsIGJpdHMsIGFscGhhMDEpIHsKICAgIHVucmVhY2hhYmxlKCJTaG91bGQgbm90IGNhbGwgQ29sb3JTcGFjZS5nZXRSZ2JCdWZmZXIiKTsKICB9CiAgZ2V0T3V0cHV0TGVuZ3RoKGlucHV0TGVuZ3RoLCBhbHBoYTAxKSB7CiAgICB1bnJlYWNoYWJsZSgiU2hvdWxkIG5vdCBjYWxsIENvbG9yU3BhY2UuZ2V0T3V0cHV0TGVuZ3RoIik7CiAgfQogIGlzUGFzc3Rocm91Z2goYml0cykgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICBpc0RlZmF1bHREZWNvZGUoZGVjb2RlTWFwLCBicGMpIHsKICAgIHJldHVybiBDb2xvclNwYWNlLmlzRGVmYXVsdERlY29kZShkZWNvZGVNYXAsIHRoaXMubnVtQ29tcHMpOwogIH0KICBmaWxsUmdiKGRlc3QsIG9yaWdpbmFsV2lkdGgsIG9yaWdpbmFsSGVpZ2h0LCB3aWR0aCwgaGVpZ2h0LCBhY3R1YWxIZWlnaHQsIGJwYywgY29tcHMsIGFscGhhMDEpIHsKICAgIGNvbnN0IGNvdW50ID0gb3JpZ2luYWxXaWR0aCAqIG9yaWdpbmFsSGVpZ2h0OwogICAgbGV0IHJnYkJ1ZiA9IG51bGw7CiAgICBjb25zdCBudW1Db21wb25lbnRDb2xvcnMgPSAxIDw8IGJwYzsKICAgIGNvbnN0IG5lZWRzUmVzaXppbmcgPSBvcmlnaW5hbEhlaWdodCAhPT0gaGVpZ2h0IHx8IG9yaWdpbmFsV2lkdGggIT09IHdpZHRoOwogICAgaWYgKHRoaXMuaXNQYXNzdGhyb3VnaChicGMpKSB7CiAgICAgIHJnYkJ1ZiA9IGNvbXBzOwogICAgfSBlbHNlIGlmICh0aGlzLm51bUNvbXBzID09PSAxICYmIGNvdW50ID4gbnVtQ29tcG9uZW50Q29sb3JzICYmIHRoaXMubmFtZSAhPT0gIkRldmljZUdyYXkiICYmIHRoaXMubmFtZSAhPT0gIkRldmljZVJHQiIpIHsKICAgICAgY29uc3QgYWxsQ29sb3JzID0gYnBjIDw9IDggPyBuZXcgVWludDhBcnJheShudW1Db21wb25lbnRDb2xvcnMpIDogbmV3IFVpbnQxNkFycmF5KG51bUNvbXBvbmVudENvbG9ycyk7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtQ29tcG9uZW50Q29sb3JzOyBpKyspIHsKICAgICAgICBhbGxDb2xvcnNbaV0gPSBpOwogICAgICB9CiAgICAgIGNvbnN0IGNvbG9yTWFwID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KG51bUNvbXBvbmVudENvbG9ycyAqIDMpOwogICAgICB0aGlzLmdldFJnYkJ1ZmZlcihhbGxDb2xvcnMsIDAsIG51bUNvbXBvbmVudENvbG9ycywgY29sb3JNYXAsIDAsIGJwYywgMCk7CiAgICAgIGlmICghbmVlZHNSZXNpemluZykgewogICAgICAgIGxldCBkZXN0UG9zID0gMDsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgIGNvbnN0IGtleSA9IGNvbXBzW2ldICogMzsKICAgICAgICAgIGRlc3RbZGVzdFBvcysrXSA9IGNvbG9yTWFwW2tleV07CiAgICAgICAgICBkZXN0W2Rlc3RQb3MrK10gPSBjb2xvck1hcFtrZXkgKyAxXTsKICAgICAgICAgIGRlc3RbZGVzdFBvcysrXSA9IGNvbG9yTWFwW2tleSArIDJdOwogICAgICAgICAgZGVzdFBvcyArPSBhbHBoYTAxOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICByZ2JCdWYgPSBuZXcgVWludDhBcnJheShjb3VudCAqIDMpOwogICAgICAgIGxldCByZ2JQb3MgPSAwOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICAgY29uc3Qga2V5ID0gY29tcHNbaV0gKiAzOwogICAgICAgICAgcmdiQnVmW3JnYlBvcysrXSA9IGNvbG9yTWFwW2tleV07CiAgICAgICAgICByZ2JCdWZbcmdiUG9zKytdID0gY29sb3JNYXBba2V5ICsgMV07CiAgICAgICAgICByZ2JCdWZbcmdiUG9zKytdID0gY29sb3JNYXBba2V5ICsgMl07CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgaWYgKCFuZWVkc1Jlc2l6aW5nKSB7CiAgICAgIHRoaXMuZ2V0UmdiQnVmZmVyKGNvbXBzLCAwLCB3aWR0aCAqIGFjdHVhbEhlaWdodCwgZGVzdCwgMCwgYnBjLCBhbHBoYTAxKTsKICAgIH0gZWxzZSB7CiAgICAgIHJnYkJ1ZiA9IG5ldyBVaW50OENsYW1wZWRBcnJheShjb3VudCAqIDMpOwogICAgICB0aGlzLmdldFJnYkJ1ZmZlcihjb21wcywgMCwgY291bnQsIHJnYkJ1ZiwgMCwgYnBjLCAwKTsKICAgIH0KICAgIGlmIChyZ2JCdWYpIHsKICAgICAgaWYgKG5lZWRzUmVzaXppbmcpIHsKICAgICAgICByZXNpemVSZ2JJbWFnZShyZ2JCdWYsIGRlc3QsIG9yaWdpbmFsV2lkdGgsIG9yaWdpbmFsSGVpZ2h0LCB3aWR0aCwgaGVpZ2h0LCBhbHBoYTAxKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBsZXQgZGVzdFBvcyA9IDAsCiAgICAgICAgICByZ2JQb3MgPSAwOwogICAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHdpZHRoICogYWN0dWFsSGVpZ2h0OyBpIDwgaWk7IGkrKykgewogICAgICAgICAgZGVzdFtkZXN0UG9zKytdID0gcmdiQnVmW3JnYlBvcysrXTsKICAgICAgICAgIGRlc3RbZGVzdFBvcysrXSA9IHJnYkJ1ZltyZ2JQb3MrK107CiAgICAgICAgICBkZXN0W2Rlc3RQb3MrK10gPSByZ2JCdWZbcmdiUG9zKytdOwogICAgICAgICAgZGVzdFBvcyArPSBhbHBoYTAxOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICBnZXQgdXNlc1plcm9Ub09uZVJhbmdlKCkgewogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAidXNlc1plcm9Ub09uZVJhbmdlIiwgdHJ1ZSk7CiAgfQogIHN0YXRpYyBpc0RlZmF1bHREZWNvZGUoZGVjb2RlLCBudW1Db21wcykgewogICAgaWYgKCFBcnJheS5pc0FycmF5KGRlY29kZSkpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAobnVtQ29tcHMgKiAyICE9PSBkZWNvZGUubGVuZ3RoKSB7CiAgICAgIHdhcm4oIlRoZSBkZWNvZGUgbWFwIGlzIG5vdCB0aGUgY29ycmVjdCBsZW5ndGgiKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBkZWNvZGUubGVuZ3RoOyBpIDwgaWk7IGkgKz0gMikgewogICAgICBpZiAoZGVjb2RlW2ldICE9PSAwIHx8IGRlY29kZVtpICsgMV0gIT09IDEpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KfQpjbGFzcyBBbHRlcm5hdGVDUyBleHRlbmRzIENvbG9yU3BhY2UgewogIGNvbnN0cnVjdG9yKG51bUNvbXBzLCBiYXNlLCB0aW50Rm4pIHsKICAgIHN1cGVyKCJBbHRlcm5hdGUiLCBudW1Db21wcyk7CiAgICB0aGlzLmJhc2UgPSBiYXNlOwogICAgdGhpcy50aW50Rm4gPSB0aW50Rm47CiAgICB0aGlzLnRtcEJ1ZiA9IG5ldyBGbG9hdDMyQXJyYXkoYmFzZS5udW1Db21wcyk7CiAgfQogIGdldFJnYkl0ZW0oc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHsKICAgIGNvbnN0IHRtcEJ1ZiA9IHRoaXMudG1wQnVmOwogICAgdGhpcy50aW50Rm4oc3JjLCBzcmNPZmZzZXQsIHRtcEJ1ZiwgMCk7CiAgICB0aGlzLmJhc2UuZ2V0UmdiSXRlbSh0bXBCdWYsIDAsIGRlc3QsIGRlc3RPZmZzZXQpOwogIH0KICBnZXRSZ2JCdWZmZXIoc3JjLCBzcmNPZmZzZXQsIGNvdW50LCBkZXN0LCBkZXN0T2Zmc2V0LCBiaXRzLCBhbHBoYTAxKSB7CiAgICBjb25zdCB0aW50Rm4gPSB0aGlzLnRpbnRGbjsKICAgIGNvbnN0IGJhc2UgPSB0aGlzLmJhc2U7CiAgICBjb25zdCBzY2FsZSA9IDEgLyAoKDEgPDwgYml0cykgLSAxKTsKICAgIGNvbnN0IGJhc2VOdW1Db21wcyA9IGJhc2UubnVtQ29tcHM7CiAgICBjb25zdCB1c2VzWmVyb1RvT25lUmFuZ2UgPSBiYXNlLnVzZXNaZXJvVG9PbmVSYW5nZTsKICAgIGNvbnN0IGlzUGFzc3Rocm91Z2ggPSAoYmFzZS5pc1Bhc3N0aHJvdWdoKDgpIHx8ICF1c2VzWmVyb1RvT25lUmFuZ2UpICYmIGFscGhhMDEgPT09IDA7CiAgICBsZXQgcG9zID0gaXNQYXNzdGhyb3VnaCA/IGRlc3RPZmZzZXQgOiAwOwogICAgY29uc3QgYmFzZUJ1ZiA9IGlzUGFzc3Rocm91Z2ggPyBkZXN0IDogbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGJhc2VOdW1Db21wcyAqIGNvdW50KTsKICAgIGNvbnN0IG51bUNvbXBzID0gdGhpcy5udW1Db21wczsKICAgIGNvbnN0IHNjYWxlZCA9IG5ldyBGbG9hdDMyQXJyYXkobnVtQ29tcHMpOwogICAgY29uc3QgdGludGVkID0gbmV3IEZsb2F0MzJBcnJheShiYXNlTnVtQ29tcHMpOwogICAgbGV0IGksIGo7CiAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICBmb3IgKGogPSAwOyBqIDwgbnVtQ29tcHM7IGorKykgewogICAgICAgIHNjYWxlZFtqXSA9IHNyY1tzcmNPZmZzZXQrK10gKiBzY2FsZTsKICAgICAgfQogICAgICB0aW50Rm4oc2NhbGVkLCAwLCB0aW50ZWQsIDApOwogICAgICBpZiAodXNlc1plcm9Ub09uZVJhbmdlKSB7CiAgICAgICAgZm9yIChqID0gMDsgaiA8IGJhc2VOdW1Db21wczsgaisrKSB7CiAgICAgICAgICBiYXNlQnVmW3BvcysrXSA9IHRpbnRlZFtqXSAqIDI1NTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYmFzZS5nZXRSZ2JJdGVtKHRpbnRlZCwgMCwgYmFzZUJ1ZiwgcG9zKTsKICAgICAgICBwb3MgKz0gYmFzZU51bUNvbXBzOwogICAgICB9CiAgICB9CiAgICBpZiAoIWlzUGFzc3Rocm91Z2gpIHsKICAgICAgYmFzZS5nZXRSZ2JCdWZmZXIoYmFzZUJ1ZiwgMCwgY291bnQsIGRlc3QsIGRlc3RPZmZzZXQsIDgsIGFscGhhMDEpOwogICAgfQogIH0KICBnZXRPdXRwdXRMZW5ndGgoaW5wdXRMZW5ndGgsIGFscGhhMDEpIHsKICAgIHJldHVybiB0aGlzLmJhc2UuZ2V0T3V0cHV0TGVuZ3RoKGlucHV0TGVuZ3RoICogdGhpcy5iYXNlLm51bUNvbXBzIC8gdGhpcy5udW1Db21wcywgYWxwaGEwMSk7CiAgfQp9CmNsYXNzIFBhdHRlcm5DUyBleHRlbmRzIENvbG9yU3BhY2UgewogIGNvbnN0cnVjdG9yKGJhc2VDUykgewogICAgc3VwZXIoIlBhdHRlcm4iLCBudWxsKTsKICAgIHRoaXMuYmFzZSA9IGJhc2VDUzsKICB9CiAgaXNEZWZhdWx0RGVjb2RlKGRlY29kZU1hcCwgYnBjKSB7CiAgICB1bnJlYWNoYWJsZSgiU2hvdWxkIG5vdCBjYWxsIFBhdHRlcm5DUy5pc0RlZmF1bHREZWNvZGUiKTsKICB9Cn0KY2xhc3MgSW5kZXhlZENTIGV4dGVuZHMgQ29sb3JTcGFjZSB7CiAgY29uc3RydWN0b3IoYmFzZSwgaGlnaFZhbCwgbG9va3VwKSB7CiAgICBzdXBlcigiSW5kZXhlZCIsIDEpOwogICAgdGhpcy5iYXNlID0gYmFzZTsKICAgIGNvbnN0IGxlbmd0aCA9IGJhc2UubnVtQ29tcHMgKiAoaGlnaFZhbCArIDEpOwogICAgdGhpcy5sb29rdXAgPSBuZXcgVWludDhBcnJheShsZW5ndGgpOwogICAgaWYgKGxvb2t1cCBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pIHsKICAgICAgY29uc3QgYnl0ZXMgPSBsb29rdXAuZ2V0Qnl0ZXMobGVuZ3RoKTsKICAgICAgdGhpcy5sb29rdXAuc2V0KGJ5dGVzKTsKICAgIH0gZWxzZSBpZiAodHlwZW9mIGxvb2t1cCA9PT0gInN0cmluZyIpIHsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgIHRoaXMubG9va3VwW2ldID0gbG9va3VwLmNoYXJDb2RlQXQoaSkgJiAweGZmOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEluZGV4ZWRDUyAtIHVucmVjb2duaXplZCBsb29rdXAgdGFibGU6ICR7bG9va3VwfWApOwogICAgfQogIH0KICBnZXRSZ2JJdGVtKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0KSB7CiAgICBjb25zdCBudW1Db21wcyA9IHRoaXMuYmFzZS5udW1Db21wczsKICAgIGNvbnN0IHN0YXJ0ID0gc3JjW3NyY09mZnNldF0gKiBudW1Db21wczsKICAgIHRoaXMuYmFzZS5nZXRSZ2JCdWZmZXIodGhpcy5sb29rdXAsIHN0YXJ0LCAxLCBkZXN0LCBkZXN0T2Zmc2V0LCA4LCAwKTsKICB9CiAgZ2V0UmdiQnVmZmVyKHNyYywgc3JjT2Zmc2V0LCBjb3VudCwgZGVzdCwgZGVzdE9mZnNldCwgYml0cywgYWxwaGEwMSkgewogICAgY29uc3QgYmFzZSA9IHRoaXMuYmFzZTsKICAgIGNvbnN0IG51bUNvbXBzID0gYmFzZS5udW1Db21wczsKICAgIGNvbnN0IG91dHB1dERlbHRhID0gYmFzZS5nZXRPdXRwdXRMZW5ndGgobnVtQ29tcHMsIGFscGhhMDEpOwogICAgY29uc3QgbG9va3VwID0gdGhpcy5sb29rdXA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgY29uc3QgbG9va3VwUG9zID0gc3JjW3NyY09mZnNldCsrXSAqIG51bUNvbXBzOwogICAgICBiYXNlLmdldFJnYkJ1ZmZlcihsb29rdXAsIGxvb2t1cFBvcywgMSwgZGVzdCwgZGVzdE9mZnNldCwgOCwgYWxwaGEwMSk7CiAgICAgIGRlc3RPZmZzZXQgKz0gb3V0cHV0RGVsdGE7CiAgICB9CiAgfQogIGdldE91dHB1dExlbmd0aChpbnB1dExlbmd0aCwgYWxwaGEwMSkgewogICAgcmV0dXJuIHRoaXMuYmFzZS5nZXRPdXRwdXRMZW5ndGgoaW5wdXRMZW5ndGggKiB0aGlzLmJhc2UubnVtQ29tcHMsIGFscGhhMDEpOwogIH0KICBpc0RlZmF1bHREZWNvZGUoZGVjb2RlTWFwLCBicGMpIHsKICAgIGlmICghQXJyYXkuaXNBcnJheShkZWNvZGVNYXApKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKGRlY29kZU1hcC5sZW5ndGggIT09IDIpIHsKICAgICAgd2FybigiRGVjb2RlIG1hcCBsZW5ndGggaXMgbm90IGNvcnJlY3QiKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoYnBjKSB8fCBicGMgPCAxKSB7CiAgICAgIHdhcm4oIkJpdHMgcGVyIGNvbXBvbmVudCBpcyBub3QgY29ycmVjdCIpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBkZWNvZGVNYXBbMF0gPT09IDAgJiYgZGVjb2RlTWFwWzFdID09PSAoMSA8PCBicGMpIC0gMTsKICB9Cn0KY2xhc3MgRGV2aWNlR3JheUNTIGV4dGVuZHMgQ29sb3JTcGFjZSB7CiAgY29uc3RydWN0b3IoKSB7CiAgICBzdXBlcigiRGV2aWNlR3JheSIsIDEpOwogIH0KICBnZXRSZ2JJdGVtKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0KSB7CiAgICBjb25zdCBjID0gc3JjW3NyY09mZnNldF0gKiAyNTU7CiAgICBkZXN0W2Rlc3RPZmZzZXRdID0gZGVzdFtkZXN0T2Zmc2V0ICsgMV0gPSBkZXN0W2Rlc3RPZmZzZXQgKyAyXSA9IGM7CiAgfQogIGdldFJnYkJ1ZmZlcihzcmMsIHNyY09mZnNldCwgY291bnQsIGRlc3QsIGRlc3RPZmZzZXQsIGJpdHMsIGFscGhhMDEpIHsKICAgIGNvbnN0IHNjYWxlID0gMjU1IC8gKCgxIDw8IGJpdHMpIC0gMSk7CiAgICBsZXQgaiA9IHNyY09mZnNldCwKICAgICAgcSA9IGRlc3RPZmZzZXQ7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgY29uc3QgYyA9IHNjYWxlICogc3JjW2orK107CiAgICAgIGRlc3RbcSsrXSA9IGM7CiAgICAgIGRlc3RbcSsrXSA9IGM7CiAgICAgIGRlc3RbcSsrXSA9IGM7CiAgICAgIHEgKz0gYWxwaGEwMTsKICAgIH0KICB9CiAgZ2V0T3V0cHV0TGVuZ3RoKGlucHV0TGVuZ3RoLCBhbHBoYTAxKSB7CiAgICByZXR1cm4gaW5wdXRMZW5ndGggKiAoMyArIGFscGhhMDEpOwogIH0KfQpjbGFzcyBEZXZpY2VSZ2JDUyBleHRlbmRzIENvbG9yU3BhY2UgewogIGNvbnN0cnVjdG9yKCkgewogICAgc3VwZXIoIkRldmljZVJHQiIsIDMpOwogIH0KICBnZXRSZ2JJdGVtKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0KSB7CiAgICBkZXN0W2Rlc3RPZmZzZXRdID0gc3JjW3NyY09mZnNldF0gKiAyNTU7CiAgICBkZXN0W2Rlc3RPZmZzZXQgKyAxXSA9IHNyY1tzcmNPZmZzZXQgKyAxXSAqIDI1NTsKICAgIGRlc3RbZGVzdE9mZnNldCArIDJdID0gc3JjW3NyY09mZnNldCArIDJdICogMjU1OwogIH0KICBnZXRSZ2JCdWZmZXIoc3JjLCBzcmNPZmZzZXQsIGNvdW50LCBkZXN0LCBkZXN0T2Zmc2V0LCBiaXRzLCBhbHBoYTAxKSB7CiAgICBpZiAoYml0cyA9PT0gOCAmJiBhbHBoYTAxID09PSAwKSB7CiAgICAgIGRlc3Quc2V0KHNyYy5zdWJhcnJheShzcmNPZmZzZXQsIHNyY09mZnNldCArIGNvdW50ICogMyksIGRlc3RPZmZzZXQpOwogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBzY2FsZSA9IDI1NSAvICgoMSA8PCBiaXRzKSAtIDEpOwogICAgbGV0IGogPSBzcmNPZmZzZXQsCiAgICAgIHEgPSBkZXN0T2Zmc2V0OwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgIGRlc3RbcSsrXSA9IHNjYWxlICogc3JjW2orK107CiAgICAgIGRlc3RbcSsrXSA9IHNjYWxlICogc3JjW2orK107CiAgICAgIGRlc3RbcSsrXSA9IHNjYWxlICogc3JjW2orK107CiAgICAgIHEgKz0gYWxwaGEwMTsKICAgIH0KICB9CiAgZ2V0T3V0cHV0TGVuZ3RoKGlucHV0TGVuZ3RoLCBhbHBoYTAxKSB7CiAgICByZXR1cm4gaW5wdXRMZW5ndGggKiAoMyArIGFscGhhMDEpIC8gMyB8IDA7CiAgfQogIGlzUGFzc3Rocm91Z2goYml0cykgewogICAgcmV0dXJuIGJpdHMgPT09IDg7CiAgfQp9CmNsYXNzIERldmljZVJnYmFDUyBleHRlbmRzIENvbG9yU3BhY2UgewogIGNvbnN0cnVjdG9yKCkgewogICAgc3VwZXIoIkRldmljZVJHQkEiLCA0KTsKICB9CiAgZ2V0T3V0cHV0TGVuZ3RoKGlucHV0TGVuZ3RoLCBfYWxwaGEwMSkgewogICAgcmV0dXJuIGlucHV0TGVuZ3RoICogNDsKICB9CiAgaXNQYXNzdGhyb3VnaChiaXRzKSB7CiAgICByZXR1cm4gYml0cyA9PT0gODsKICB9CiAgZmlsbFJnYihkZXN0LCBvcmlnaW5hbFdpZHRoLCBvcmlnaW5hbEhlaWdodCwgd2lkdGgsIGhlaWdodCwgYWN0dWFsSGVpZ2h0LCBicGMsIGNvbXBzLCBhbHBoYTAxKSB7CiAgICBpZiAob3JpZ2luYWxIZWlnaHQgIT09IGhlaWdodCB8fCBvcmlnaW5hbFdpZHRoICE9PSB3aWR0aCkgewogICAgICByZXNpemVSZ2JhSW1hZ2UoY29tcHMsIGRlc3QsIG9yaWdpbmFsV2lkdGgsIG9yaWdpbmFsSGVpZ2h0LCB3aWR0aCwgaGVpZ2h0LCBhbHBoYTAxKTsKICAgIH0gZWxzZSB7CiAgICAgIGNvcHlSZ2JhSW1hZ2UoY29tcHMsIGRlc3QsIGFscGhhMDEpOwogICAgfQogIH0KfQpjbGFzcyBEZXZpY2VDbXlrQ1MgZXh0ZW5kcyBDb2xvclNwYWNlIHsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHN1cGVyKCJEZXZpY2VDTVlLIiwgNCk7CiAgfQogICN0b1JnYihzcmMsIHNyY09mZnNldCwgc3JjU2NhbGUsIGRlc3QsIGRlc3RPZmZzZXQpIHsKICAgIGNvbnN0IGMgPSBzcmNbc3JjT2Zmc2V0XSAqIHNyY1NjYWxlOwogICAgY29uc3QgbSA9IHNyY1tzcmNPZmZzZXQgKyAxXSAqIHNyY1NjYWxlOwogICAgY29uc3QgeSA9IHNyY1tzcmNPZmZzZXQgKyAyXSAqIHNyY1NjYWxlOwogICAgY29uc3QgayA9IHNyY1tzcmNPZmZzZXQgKyAzXSAqIHNyY1NjYWxlOwogICAgZGVzdFtkZXN0T2Zmc2V0XSA9IDI1NSArIGMgKiAoLTQuMzg3MzMyMzg0NjA5OTg4ICogYyArIDU0LjQ4NjE1MTk0MTg5MTc2ICogbSArIDE4LjgyMjkwNTAyMTY1MzAyICogeSArIDIxMi4yNTY2MjQ1MTYzOTU4NSAqIGsgKyAtMjg1LjIzMzEwMjYxMzcwMDQpICsgbSAqICgxLjcxNDk3NjM0NzczNjIxMzQgKiBtIC0gNS42MDk2NzM2OTA0MDQ3MzE1ICogeSArIC0xNy44NzM4NzA4NjE0MTU0NDQgKiBrIC0gNS40OTcwMDY0MjcxOTYzNjYpICsgeSAqICgtMi41MjE3MzQwMTMxNjgzMDMzICogeSAtIDIxLjI0ODkyMzMzNzM1MzA3MyAqIGsgKyAxNy41MTE5MjcwODQxODEzKSArIGsgKiAoLTIxLjg2MTIyMTQ3NDYzNjA1ICogayAtIDE4OS40ODE4MDgzNTkyMjc0Nyk7CiAgICBkZXN0W2Rlc3RPZmZzZXQgKyAxXSA9IDI1NSArIGMgKiAoOC44NDEwNDE0MjIwMzYxNDkgKiBjICsgNjAuMTE4MDI3MDQ1NTk3MzY2ICogbSArIDYuODcxNDI1NTkyMDQ5MDA3ICogeSArIDMxLjE1OTEwMDEzMDA1NTkyMiAqIGsgKyAtNzkuMjk3MDg0NDgxNjU0OCkgKyBtICogKC0xNS4zMTAzNjEzMDY5Njc4MTcgKiBtICsgMTcuNTc1MjUxMjYxMTA5NDgyICogeSArIDEzMS4zNTI1MDkxMjQ5Mzk3NiAqIGsgLSAxOTAuOTQ1MzMwMjU4ODk1MSkgKyB5ICogKDQuNDQ0MzM5MTAyODUyNzM5ICogeSArIDkuODYzMjg2MTQ5MzQwNSAqIGsgLSAyNC44Njc0MTU4MjU1NTg3OCkgKyBrICogKC0yMC43MzczMjU0NzExODEwMzQgKiBrIC0gMTg3LjgwNDUzNzA5NzE5NTc4KTsKICAgIGRlc3RbZGVzdE9mZnNldCArIDJdID0gMjU1ICsgYyAqICgwLjg4NDI1MjI0MzAwMDMyOTYgKiBjICsgOC4wNzg2Nzc1MDMxMTI5MjggKiBtICsgMzAuODk5NzgzMDk3MDM3MjkgKiB5IC0gMC4yMzg4MzIzODY4OTE3ODkzNCAqIGsgKyAtMTQuMTgzNTc2Nzk5NjczMjg2KSArIG0gKiAoMTAuNDk1OTMyNzM0MzIwNzIgKiBtICsgNjMuMDIzNzg0OTQ3NTQwNTIgKiB5ICsgNTAuNjA2OTU3NjU2MzYwNzM0ICogayAtIDExMi4yMzg4NDI1MzcxOTI0OCkgKyB5ICogKDAuMDMyOTYwNDExMTQ4NzMyMTcgKiB5ICsgMTE1LjYwMzg0NDQ5NjQ2NjQxICogayArIC0xOTMuNTgyMDkzNTY4NjE1MDUpICsgayAqICgtMjIuMzM4MTY4MDczMDk4ODYgKiBrIC0gMTgwLjEyNjEzOTc0NzA4MzY3KTsKICB9CiAgZ2V0UmdiSXRlbShzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCkgewogICAgdGhpcy4jdG9SZ2Ioc3JjLCBzcmNPZmZzZXQsIDEsIGRlc3QsIGRlc3RPZmZzZXQpOwogIH0KICBnZXRSZ2JCdWZmZXIoc3JjLCBzcmNPZmZzZXQsIGNvdW50LCBkZXN0LCBkZXN0T2Zmc2V0LCBiaXRzLCBhbHBoYTAxKSB7CiAgICBjb25zdCBzY2FsZSA9IDEgLyAoKDEgPDwgYml0cykgLSAxKTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICB0aGlzLiN0b1JnYihzcmMsIHNyY09mZnNldCwgc2NhbGUsIGRlc3QsIGRlc3RPZmZzZXQpOwogICAgICBzcmNPZmZzZXQgKz0gNDsKICAgICAgZGVzdE9mZnNldCArPSAzICsgYWxwaGEwMTsKICAgIH0KICB9CiAgZ2V0T3V0cHV0TGVuZ3RoKGlucHV0TGVuZ3RoLCBhbHBoYTAxKSB7CiAgICByZXR1cm4gaW5wdXRMZW5ndGggLyA0ICogKDMgKyBhbHBoYTAxKSB8IDA7CiAgfQp9CmNsYXNzIENhbEdyYXlDUyBleHRlbmRzIENvbG9yU3BhY2UgewogIGNvbnN0cnVjdG9yKHdoaXRlUG9pbnQsIGJsYWNrUG9pbnQsIGdhbW1hKSB7CiAgICBzdXBlcigiQ2FsR3JheSIsIDEpOwogICAgaWYgKCF3aGl0ZVBvaW50KSB7CiAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiV2hpdGVQb2ludCBtaXNzaW5nIC0gcmVxdWlyZWQgZm9yIGNvbG9yIHNwYWNlIENhbEdyYXkiKTsKICAgIH0KICAgIFt0aGlzLlhXLCB0aGlzLllXLCB0aGlzLlpXXSA9IHdoaXRlUG9pbnQ7CiAgICBbdGhpcy5YQiwgdGhpcy5ZQiwgdGhpcy5aQl0gPSBibGFja1BvaW50IHx8IFswLCAwLCAwXTsKICAgIHRoaXMuRyA9IGdhbW1hIHx8IDE7CiAgICBpZiAodGhpcy5YVyA8IDAgfHwgdGhpcy5aVyA8IDAgfHwgdGhpcy5ZVyAhPT0gMSkgewogICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEludmFsaWQgV2hpdGVQb2ludCBjb21wb25lbnRzIGZvciAke3RoaXMubmFtZX0sIG5vIGZhbGxiYWNrIGF2YWlsYWJsZWApOwogICAgfQogICAgaWYgKHRoaXMuWEIgPCAwIHx8IHRoaXMuWUIgPCAwIHx8IHRoaXMuWkIgPCAwKSB7CiAgICAgIGluZm8oYEludmFsaWQgQmxhY2tQb2ludCBmb3IgJHt0aGlzLm5hbWV9LCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC5gKTsKICAgICAgdGhpcy5YQiA9IHRoaXMuWUIgPSB0aGlzLlpCID0gMDsKICAgIH0KICAgIGlmICh0aGlzLlhCICE9PSAwIHx8IHRoaXMuWUIgIT09IDAgfHwgdGhpcy5aQiAhPT0gMCkgewogICAgICB3YXJuKGAke3RoaXMubmFtZX0sIEJsYWNrUG9pbnQ6IFhCOiAke3RoaXMuWEJ9LCBZQjogJHt0aGlzLllCfSwgYCArIGBaQjogJHt0aGlzLlpCfSwgb25seSBkZWZhdWx0IHZhbHVlcyBhcmUgc3VwcG9ydGVkLmApOwogICAgfQogICAgaWYgKHRoaXMuRyA8IDEpIHsKICAgICAgaW5mbyhgSW52YWxpZCBHYW1tYTogJHt0aGlzLkd9IGZvciAke3RoaXMubmFtZX0sIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0LmApOwogICAgICB0aGlzLkcgPSAxOwogICAgfQogIH0KICAjdG9SZ2Ioc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQsIHNjYWxlKSB7CiAgICBjb25zdCBBID0gc3JjW3NyY09mZnNldF0gKiBzY2FsZTsKICAgIGNvbnN0IEFHID0gQSAqKiB0aGlzLkc7CiAgICBjb25zdCBMID0gdGhpcy5ZVyAqIEFHOwogICAgY29uc3QgdmFsID0gTWF0aC5tYXgoMjk1LjggKiBMICoqIDAuMzMzMzMzMzMzMzMzMzMzMyAtIDQwLjgsIDApOwogICAgZGVzdFtkZXN0T2Zmc2V0XSA9IHZhbDsKICAgIGRlc3RbZGVzdE9mZnNldCArIDFdID0gdmFsOwogICAgZGVzdFtkZXN0T2Zmc2V0ICsgMl0gPSB2YWw7CiAgfQogIGdldFJnYkl0ZW0oc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHsKICAgIHRoaXMuI3RvUmdiKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0LCAxKTsKICB9CiAgZ2V0UmdiQnVmZmVyKHNyYywgc3JjT2Zmc2V0LCBjb3VudCwgZGVzdCwgZGVzdE9mZnNldCwgYml0cywgYWxwaGEwMSkgewogICAgY29uc3Qgc2NhbGUgPSAxIC8gKCgxIDw8IGJpdHMpIC0gMSk7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgdGhpcy4jdG9SZ2Ioc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQsIHNjYWxlKTsKICAgICAgc3JjT2Zmc2V0ICs9IDE7CiAgICAgIGRlc3RPZmZzZXQgKz0gMyArIGFscGhhMDE7CiAgICB9CiAgfQogIGdldE91dHB1dExlbmd0aChpbnB1dExlbmd0aCwgYWxwaGEwMSkgewogICAgcmV0dXJuIGlucHV0TGVuZ3RoICogKDMgKyBhbHBoYTAxKTsKICB9Cn0KY2xhc3MgQ2FsUkdCQ1MgZXh0ZW5kcyBDb2xvclNwYWNlIHsKICBzdGF0aWMgI0JSQURGT1JEX1NDQUxFX01BVFJJWCA9IG5ldyBGbG9hdDMyQXJyYXkoWzAuODk1MSwgMC4yNjY0LCAtMC4xNjE0LCAtMC43NTAyLCAxLjcxMzUsIDAuMDM2NywgMC4wMzg5LCAtMC4wNjg1LCAxLjAyOTZdKTsKICBzdGF0aWMgI0JSQURGT1JEX1NDQUxFX0lOVkVSU0VfTUFUUklYID0gbmV3IEZsb2F0MzJBcnJheShbMC45ODY5OTI5LCAtMC4xNDcwNTQzLCAwLjE1OTk2MjcsIDAuNDMyMzA1MywgMC41MTgzNjAzLCAwLjA0OTI5MTIsIC0wLjAwODUyODcsIDAuMDQwMDQyOCwgMC45Njg0ODY3XSk7CiAgc3RhdGljICNTUkdCX0Q2NV9YWVpfVE9fUkdCX01BVFJJWCA9IG5ldyBGbG9hdDMyQXJyYXkoWzMuMjQwNDU0MiwgLTEuNTM3MTM4NSwgLTAuNDk4NTMxNCwgLTAuOTY5MjY2MCwgMS44NzYwMTA4LCAwLjA0MTU1NjAsIDAuMDU1NjQzNCwgLTAuMjA0MDI1OSwgMS4wNTcyMjUyXSk7CiAgc3RhdGljICNGTEFUX1dISVRFUE9JTlRfTUFUUklYID0gbmV3IEZsb2F0MzJBcnJheShbMSwgMSwgMV0pOwogIHN0YXRpYyAjdGVtcE5vcm1hbGl6ZU1hdHJpeCA9IG5ldyBGbG9hdDMyQXJyYXkoMyk7CiAgc3RhdGljICN0ZW1wQ29udmVydE1hdHJpeDEgPSBuZXcgRmxvYXQzMkFycmF5KDMpOwogIHN0YXRpYyAjdGVtcENvbnZlcnRNYXRyaXgyID0gbmV3IEZsb2F0MzJBcnJheSgzKTsKICBzdGF0aWMgI0RFQ09ERV9MX0NPTlNUQU5UID0gKCg4ICsgMTYpIC8gMTE2KSAqKiAzIC8gOC4wOwogIGNvbnN0cnVjdG9yKHdoaXRlUG9pbnQsIGJsYWNrUG9pbnQsIGdhbW1hLCBtYXRyaXgpIHsKICAgIHN1cGVyKCJDYWxSR0IiLCAzKTsKICAgIGlmICghd2hpdGVQb2ludCkgewogICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIldoaXRlUG9pbnQgbWlzc2luZyAtIHJlcXVpcmVkIGZvciBjb2xvciBzcGFjZSBDYWxSR0IiKTsKICAgIH0KICAgIGNvbnN0IFtYVywgWVcsIFpXXSA9IHRoaXMud2hpdGVQb2ludCA9IHdoaXRlUG9pbnQ7CiAgICBjb25zdCBbWEIsIFlCLCBaQl0gPSB0aGlzLmJsYWNrUG9pbnQgPSBibGFja1BvaW50IHx8IG5ldyBGbG9hdDMyQXJyYXkoMyk7CiAgICBbdGhpcy5HUiwgdGhpcy5HRywgdGhpcy5HQl0gPSBnYW1tYSB8fCBuZXcgRmxvYXQzMkFycmF5KFsxLCAxLCAxXSk7CiAgICBbdGhpcy5NWEEsIHRoaXMuTVlBLCB0aGlzLk1aQSwgdGhpcy5NWEIsIHRoaXMuTVlCLCB0aGlzLk1aQiwgdGhpcy5NWEMsIHRoaXMuTVlDLCB0aGlzLk1aQ10gPSBtYXRyaXggfHwgbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMV0pOwogICAgaWYgKFhXIDwgMCB8fCBaVyA8IDAgfHwgWVcgIT09IDEpIHsKICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBJbnZhbGlkIFdoaXRlUG9pbnQgY29tcG9uZW50cyBmb3IgJHt0aGlzLm5hbWV9LCBubyBmYWxsYmFjayBhdmFpbGFibGVgKTsKICAgIH0KICAgIGlmIChYQiA8IDAgfHwgWUIgPCAwIHx8IFpCIDwgMCkgewogICAgICBpbmZvKGBJbnZhbGlkIEJsYWNrUG9pbnQgZm9yICR7dGhpcy5uYW1lfSBbJHtYQn0sICR7WUJ9LCAke1pCfV0sIGAgKyAiZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuIik7CiAgICAgIHRoaXMuYmxhY2tQb2ludCA9IG5ldyBGbG9hdDMyQXJyYXkoMyk7CiAgICB9CiAgICBpZiAodGhpcy5HUiA8IDAgfHwgdGhpcy5HRyA8IDAgfHwgdGhpcy5HQiA8IDApIHsKICAgICAgaW5mbyhgSW52YWxpZCBHYW1tYSBbJHt0aGlzLkdSfSwgJHt0aGlzLkdHfSwgJHt0aGlzLkdCfV0gZm9yIGAgKyBgJHt0aGlzLm5hbWV9LCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC5gKTsKICAgICAgdGhpcy5HUiA9IHRoaXMuR0cgPSB0aGlzLkdCID0gMTsKICAgIH0KICB9CiAgI21hdHJpeFByb2R1Y3QoYSwgYiwgcmVzdWx0KSB7CiAgICByZXN1bHRbMF0gPSBhWzBdICogYlswXSArIGFbMV0gKiBiWzFdICsgYVsyXSAqIGJbMl07CiAgICByZXN1bHRbMV0gPSBhWzNdICogYlswXSArIGFbNF0gKiBiWzFdICsgYVs1XSAqIGJbMl07CiAgICByZXN1bHRbMl0gPSBhWzZdICogYlswXSArIGFbN10gKiBiWzFdICsgYVs4XSAqIGJbMl07CiAgfQogICN0b0ZsYXQoc291cmNlV2hpdGVQb2ludCwgTE1TLCByZXN1bHQpIHsKICAgIHJlc3VsdFswXSA9IExNU1swXSAqIDEgLyBzb3VyY2VXaGl0ZVBvaW50WzBdOwogICAgcmVzdWx0WzFdID0gTE1TWzFdICogMSAvIHNvdXJjZVdoaXRlUG9pbnRbMV07CiAgICByZXN1bHRbMl0gPSBMTVNbMl0gKiAxIC8gc291cmNlV2hpdGVQb2ludFsyXTsKICB9CiAgI3RvRDY1KHNvdXJjZVdoaXRlUG9pbnQsIExNUywgcmVzdWx0KSB7CiAgICBjb25zdCBENjVYID0gMC45NTA0NzsKICAgIGNvbnN0IEQ2NVkgPSAxOwogICAgY29uc3QgRDY1WiA9IDEuMDg4ODM7CiAgICByZXN1bHRbMF0gPSBMTVNbMF0gKiBENjVYIC8gc291cmNlV2hpdGVQb2ludFswXTsKICAgIHJlc3VsdFsxXSA9IExNU1sxXSAqIEQ2NVkgLyBzb3VyY2VXaGl0ZVBvaW50WzFdOwogICAgcmVzdWx0WzJdID0gTE1TWzJdICogRDY1WiAvIHNvdXJjZVdoaXRlUG9pbnRbMl07CiAgfQogICNzUkdCVHJhbnNmZXJGdW5jdGlvbihjb2xvcikgewogICAgaWYgKGNvbG9yIDw9IDAuMDAzMTMwOCkgewogICAgICByZXR1cm4gTWF0aENsYW1wKDEyLjkyICogY29sb3IsIDAsIDEpOwogICAgfQogICAgaWYgKGNvbG9yID49IDAuOTk1NTQ1MjUpIHsKICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICByZXR1cm4gTWF0aENsYW1wKCgxICsgMC4wNTUpICogY29sb3IgKiogKDEgLyAyLjQpIC0gMC4wNTUsIDAsIDEpOwogIH0KICAjZGVjb2RlTChMKSB7CiAgICBpZiAoTCA8IDApIHsKICAgICAgcmV0dXJuIC10aGlzLiNkZWNvZGVMKC1MKTsKICAgIH0KICAgIGlmIChMID4gOC4wKSB7CiAgICAgIHJldHVybiAoKEwgKyAxNikgLyAxMTYpICoqIDM7CiAgICB9CiAgICByZXR1cm4gTCAqIENhbFJHQkNTLiNERUNPREVfTF9DT05TVEFOVDsKICB9CiAgI2NvbXBlbnNhdGVCbGFja1BvaW50KHNvdXJjZUJsYWNrUG9pbnQsIFhZWl9GbGF0LCByZXN1bHQpIHsKICAgIGlmIChzb3VyY2VCbGFja1BvaW50WzBdID09PSAwICYmIHNvdXJjZUJsYWNrUG9pbnRbMV0gPT09IDAgJiYgc291cmNlQmxhY2tQb2ludFsyXSA9PT0gMCkgewogICAgICByZXN1bHRbMF0gPSBYWVpfRmxhdFswXTsKICAgICAgcmVzdWx0WzFdID0gWFlaX0ZsYXRbMV07CiAgICAgIHJlc3VsdFsyXSA9IFhZWl9GbGF0WzJdOwogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCB6ZXJvRGVjb2RlTCA9IHRoaXMuI2RlY29kZUwoMCk7CiAgICBjb25zdCBYX0RTVCA9IHplcm9EZWNvZGVMOwogICAgY29uc3QgWF9TUkMgPSB0aGlzLiNkZWNvZGVMKHNvdXJjZUJsYWNrUG9pbnRbMF0pOwogICAgY29uc3QgWV9EU1QgPSB6ZXJvRGVjb2RlTDsKICAgIGNvbnN0IFlfU1JDID0gdGhpcy4jZGVjb2RlTChzb3VyY2VCbGFja1BvaW50WzFdKTsKICAgIGNvbnN0IFpfRFNUID0gemVyb0RlY29kZUw7CiAgICBjb25zdCBaX1NSQyA9IHRoaXMuI2RlY29kZUwoc291cmNlQmxhY2tQb2ludFsyXSk7CiAgICBjb25zdCBYX1NjYWxlID0gKDEgLSBYX0RTVCkgLyAoMSAtIFhfU1JDKTsKICAgIGNvbnN0IFhfT2Zmc2V0ID0gMSAtIFhfU2NhbGU7CiAgICBjb25zdCBZX1NjYWxlID0gKDEgLSBZX0RTVCkgLyAoMSAtIFlfU1JDKTsKICAgIGNvbnN0IFlfT2Zmc2V0ID0gMSAtIFlfU2NhbGU7CiAgICBjb25zdCBaX1NjYWxlID0gKDEgLSBaX0RTVCkgLyAoMSAtIFpfU1JDKTsKICAgIGNvbnN0IFpfT2Zmc2V0ID0gMSAtIFpfU2NhbGU7CiAgICByZXN1bHRbMF0gPSBYWVpfRmxhdFswXSAqIFhfU2NhbGUgKyBYX09mZnNldDsKICAgIHJlc3VsdFsxXSA9IFhZWl9GbGF0WzFdICogWV9TY2FsZSArIFlfT2Zmc2V0OwogICAgcmVzdWx0WzJdID0gWFlaX0ZsYXRbMl0gKiBaX1NjYWxlICsgWl9PZmZzZXQ7CiAgfQogICNub3JtYWxpemVXaGl0ZVBvaW50VG9GbGF0KHNvdXJjZVdoaXRlUG9pbnQsIFhZWl9JbiwgcmVzdWx0KSB7CiAgICBpZiAoc291cmNlV2hpdGVQb2ludFswXSA9PT0gMSAmJiBzb3VyY2VXaGl0ZVBvaW50WzJdID09PSAxKSB7CiAgICAgIHJlc3VsdFswXSA9IFhZWl9JblswXTsKICAgICAgcmVzdWx0WzFdID0gWFlaX0luWzFdOwogICAgICByZXN1bHRbMl0gPSBYWVpfSW5bMl07CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IExNUyA9IHJlc3VsdDsKICAgIHRoaXMuI21hdHJpeFByb2R1Y3QoQ2FsUkdCQ1MuI0JSQURGT1JEX1NDQUxFX01BVFJJWCwgWFlaX0luLCBMTVMpOwogICAgY29uc3QgTE1TX0ZsYXQgPSBDYWxSR0JDUy4jdGVtcE5vcm1hbGl6ZU1hdHJpeDsKICAgIHRoaXMuI3RvRmxhdChzb3VyY2VXaGl0ZVBvaW50LCBMTVMsIExNU19GbGF0KTsKICAgIHRoaXMuI21hdHJpeFByb2R1Y3QoQ2FsUkdCQ1MuI0JSQURGT1JEX1NDQUxFX0lOVkVSU0VfTUFUUklYLCBMTVNfRmxhdCwgcmVzdWx0KTsKICB9CiAgI25vcm1hbGl6ZVdoaXRlUG9pbnRUb0Q2NShzb3VyY2VXaGl0ZVBvaW50LCBYWVpfSW4sIHJlc3VsdCkgewogICAgY29uc3QgTE1TID0gcmVzdWx0OwogICAgdGhpcy4jbWF0cml4UHJvZHVjdChDYWxSR0JDUy4jQlJBREZPUkRfU0NBTEVfTUFUUklYLCBYWVpfSW4sIExNUyk7CiAgICBjb25zdCBMTVNfRDY1ID0gQ2FsUkdCQ1MuI3RlbXBOb3JtYWxpemVNYXRyaXg7CiAgICB0aGlzLiN0b0Q2NShzb3VyY2VXaGl0ZVBvaW50LCBMTVMsIExNU19ENjUpOwogICAgdGhpcy4jbWF0cml4UHJvZHVjdChDYWxSR0JDUy4jQlJBREZPUkRfU0NBTEVfSU5WRVJTRV9NQVRSSVgsIExNU19ENjUsIHJlc3VsdCk7CiAgfQogICN0b1JnYihzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCwgc2NhbGUpIHsKICAgIGNvbnN0IEEgPSBNYXRoQ2xhbXAoc3JjW3NyY09mZnNldF0gKiBzY2FsZSwgMCwgMSk7CiAgICBjb25zdCBCID0gTWF0aENsYW1wKHNyY1tzcmNPZmZzZXQgKyAxXSAqIHNjYWxlLCAwLCAxKTsKICAgIGNvbnN0IEMgPSBNYXRoQ2xhbXAoc3JjW3NyY09mZnNldCArIDJdICogc2NhbGUsIDAsIDEpOwogICAgY29uc3QgQUdSID0gQSA9PT0gMSA/IDEgOiBBICoqIHRoaXMuR1I7CiAgICBjb25zdCBCR0cgPSBCID09PSAxID8gMSA6IEIgKiogdGhpcy5HRzsKICAgIGNvbnN0IENHQiA9IEMgPT09IDEgPyAxIDogQyAqKiB0aGlzLkdCOwogICAgY29uc3QgWCA9IHRoaXMuTVhBICogQUdSICsgdGhpcy5NWEIgKiBCR0cgKyB0aGlzLk1YQyAqIENHQjsKICAgIGNvbnN0IFkgPSB0aGlzLk1ZQSAqIEFHUiArIHRoaXMuTVlCICogQkdHICsgdGhpcy5NWUMgKiBDR0I7CiAgICBjb25zdCBaID0gdGhpcy5NWkEgKiBBR1IgKyB0aGlzLk1aQiAqIEJHRyArIHRoaXMuTVpDICogQ0dCOwogICAgY29uc3QgWFlaID0gQ2FsUkdCQ1MuI3RlbXBDb252ZXJ0TWF0cml4MTsKICAgIFhZWlswXSA9IFg7CiAgICBYWVpbMV0gPSBZOwogICAgWFlaWzJdID0gWjsKICAgIGNvbnN0IFhZWl9GbGF0ID0gQ2FsUkdCQ1MuI3RlbXBDb252ZXJ0TWF0cml4MjsKICAgIHRoaXMuI25vcm1hbGl6ZVdoaXRlUG9pbnRUb0ZsYXQodGhpcy53aGl0ZVBvaW50LCBYWVosIFhZWl9GbGF0KTsKICAgIGNvbnN0IFhZWl9CbGFjayA9IENhbFJHQkNTLiN0ZW1wQ29udmVydE1hdHJpeDE7CiAgICB0aGlzLiNjb21wZW5zYXRlQmxhY2tQb2ludCh0aGlzLmJsYWNrUG9pbnQsIFhZWl9GbGF0LCBYWVpfQmxhY2spOwogICAgY29uc3QgWFlaX0Q2NSA9IENhbFJHQkNTLiN0ZW1wQ29udmVydE1hdHJpeDI7CiAgICB0aGlzLiNub3JtYWxpemVXaGl0ZVBvaW50VG9ENjUoQ2FsUkdCQ1MuI0ZMQVRfV0hJVEVQT0lOVF9NQVRSSVgsIFhZWl9CbGFjaywgWFlaX0Q2NSk7CiAgICBjb25zdCBTUkdCID0gQ2FsUkdCQ1MuI3RlbXBDb252ZXJ0TWF0cml4MTsKICAgIHRoaXMuI21hdHJpeFByb2R1Y3QoQ2FsUkdCQ1MuI1NSR0JfRDY1X1hZWl9UT19SR0JfTUFUUklYLCBYWVpfRDY1LCBTUkdCKTsKICAgIGRlc3RbZGVzdE9mZnNldF0gPSB0aGlzLiNzUkdCVHJhbnNmZXJGdW5jdGlvbihTUkdCWzBdKSAqIDI1NTsKICAgIGRlc3RbZGVzdE9mZnNldCArIDFdID0gdGhpcy4jc1JHQlRyYW5zZmVyRnVuY3Rpb24oU1JHQlsxXSkgKiAyNTU7CiAgICBkZXN0W2Rlc3RPZmZzZXQgKyAyXSA9IHRoaXMuI3NSR0JUcmFuc2ZlckZ1bmN0aW9uKFNSR0JbMl0pICogMjU1OwogIH0KICBnZXRSZ2JJdGVtKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0KSB7CiAgICB0aGlzLiN0b1JnYihzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCwgMSk7CiAgfQogIGdldFJnYkJ1ZmZlcihzcmMsIHNyY09mZnNldCwgY291bnQsIGRlc3QsIGRlc3RPZmZzZXQsIGJpdHMsIGFscGhhMDEpIHsKICAgIGNvbnN0IHNjYWxlID0gMSAvICgoMSA8PCBiaXRzKSAtIDEpOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgIHRoaXMuI3RvUmdiKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0LCBzY2FsZSk7CiAgICAgIHNyY09mZnNldCArPSAzOwogICAgICBkZXN0T2Zmc2V0ICs9IDMgKyBhbHBoYTAxOwogICAgfQogIH0KICBnZXRPdXRwdXRMZW5ndGgoaW5wdXRMZW5ndGgsIGFscGhhMDEpIHsKICAgIHJldHVybiBpbnB1dExlbmd0aCAqICgzICsgYWxwaGEwMSkgLyAzIHwgMDsKICB9Cn0KY2xhc3MgTGFiQ1MgZXh0ZW5kcyBDb2xvclNwYWNlIHsKICBjb25zdHJ1Y3Rvcih3aGl0ZVBvaW50LCBibGFja1BvaW50LCByYW5nZSkgewogICAgc3VwZXIoIkxhYiIsIDMpOwogICAgaWYgKCF3aGl0ZVBvaW50KSB7CiAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiV2hpdGVQb2ludCBtaXNzaW5nIC0gcmVxdWlyZWQgZm9yIGNvbG9yIHNwYWNlIExhYiIpOwogICAgfQogICAgW3RoaXMuWFcsIHRoaXMuWVcsIHRoaXMuWlddID0gd2hpdGVQb2ludDsKICAgIFt0aGlzLmFtaW4sIHRoaXMuYW1heCwgdGhpcy5ibWluLCB0aGlzLmJtYXhdID0gcmFuZ2UgfHwgWy0xMDAsIDEwMCwgLTEwMCwgMTAwXTsKICAgIFt0aGlzLlhCLCB0aGlzLllCLCB0aGlzLlpCXSA9IGJsYWNrUG9pbnQgfHwgWzAsIDAsIDBdOwogICAgaWYgKHRoaXMuWFcgPCAwIHx8IHRoaXMuWlcgPCAwIHx8IHRoaXMuWVcgIT09IDEpIHsKICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIFdoaXRlUG9pbnQgY29tcG9uZW50cywgbm8gZmFsbGJhY2sgYXZhaWxhYmxlIik7CiAgICB9CiAgICBpZiAodGhpcy5YQiA8IDAgfHwgdGhpcy5ZQiA8IDAgfHwgdGhpcy5aQiA8IDApIHsKICAgICAgaW5mbygiSW52YWxpZCBCbGFja1BvaW50LCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdCIpOwogICAgICB0aGlzLlhCID0gdGhpcy5ZQiA9IHRoaXMuWkIgPSAwOwogICAgfQogICAgaWYgKHRoaXMuYW1pbiA+IHRoaXMuYW1heCB8fCB0aGlzLmJtaW4gPiB0aGlzLmJtYXgpIHsKICAgICAgaW5mbygiSW52YWxpZCBSYW5nZSwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHRzIik7CiAgICAgIHRoaXMuYW1pbiA9IC0xMDA7CiAgICAgIHRoaXMuYW1heCA9IDEwMDsKICAgICAgdGhpcy5ibWluID0gLTEwMDsKICAgICAgdGhpcy5ibWF4ID0gMTAwOwogICAgfQogIH0KICAjZm5fZyh4KSB7CiAgICByZXR1cm4geCA+PSA2IC8gMjkgPyB4ICoqIDMgOiAxMDggLyA4NDEgKiAoeCAtIDQgLyAyOSk7CiAgfQogICNkZWNvZGUodmFsdWUsIGhpZ2gxLCBsb3cyLCBoaWdoMikgewogICAgcmV0dXJuIGxvdzIgKyB2YWx1ZSAqIChoaWdoMiAtIGxvdzIpIC8gaGlnaDE7CiAgfQogICN0b1JnYihzcmMsIHNyY09mZnNldCwgbWF4VmFsLCBkZXN0LCBkZXN0T2Zmc2V0KSB7CiAgICBsZXQgTHMgPSBzcmNbc3JjT2Zmc2V0XTsKICAgIGxldCBhcyA9IHNyY1tzcmNPZmZzZXQgKyAxXTsKICAgIGxldCBicyA9IHNyY1tzcmNPZmZzZXQgKyAyXTsKICAgIGlmIChtYXhWYWwgIT09IGZhbHNlKSB7CiAgICAgIExzID0gdGhpcy4jZGVjb2RlKExzLCBtYXhWYWwsIDAsIDEwMCk7CiAgICAgIGFzID0gdGhpcy4jZGVjb2RlKGFzLCBtYXhWYWwsIHRoaXMuYW1pbiwgdGhpcy5hbWF4KTsKICAgICAgYnMgPSB0aGlzLiNkZWNvZGUoYnMsIG1heFZhbCwgdGhpcy5ibWluLCB0aGlzLmJtYXgpOwogICAgfQogICAgaWYgKGFzID4gdGhpcy5hbWF4KSB7CiAgICAgIGFzID0gdGhpcy5hbWF4OwogICAgfSBlbHNlIGlmIChhcyA8IHRoaXMuYW1pbikgewogICAgICBhcyA9IHRoaXMuYW1pbjsKICAgIH0KICAgIGlmIChicyA+IHRoaXMuYm1heCkgewogICAgICBicyA9IHRoaXMuYm1heDsKICAgIH0gZWxzZSBpZiAoYnMgPCB0aGlzLmJtaW4pIHsKICAgICAgYnMgPSB0aGlzLmJtaW47CiAgICB9CiAgICBjb25zdCBNID0gKExzICsgMTYpIC8gMTE2OwogICAgY29uc3QgTCA9IE0gKyBhcyAvIDUwMDsKICAgIGNvbnN0IE4gPSBNIC0gYnMgLyAyMDA7CiAgICBjb25zdCBYID0gdGhpcy5YVyAqIHRoaXMuI2ZuX2coTCk7CiAgICBjb25zdCBZID0gdGhpcy5ZVyAqIHRoaXMuI2ZuX2coTSk7CiAgICBjb25zdCBaID0gdGhpcy5aVyAqIHRoaXMuI2ZuX2coTik7CiAgICBsZXQgciwgZywgYjsKICAgIGlmICh0aGlzLlpXIDwgMSkgewogICAgICByID0gWCAqIDMuMTMzOSArIFkgKiAtMS42MTcgKyBaICogLTAuNDkwNjsKICAgICAgZyA9IFggKiAtMC45Nzg1ICsgWSAqIDEuOTE2ICsgWiAqIDAuMDMzMzsKICAgICAgYiA9IFggKiAwLjA3MiArIFkgKiAtMC4yMjkgKyBaICogMS40MDU3OwogICAgfSBlbHNlIHsKICAgICAgciA9IFggKiAzLjI0MDYgKyBZICogLTEuNTM3MiArIFogKiAtMC40OTg2OwogICAgICBnID0gWCAqIC0wLjk2ODkgKyBZICogMS44NzU4ICsgWiAqIDAuMDQxNTsKICAgICAgYiA9IFggKiAwLjA1NTcgKyBZICogLTAuMjA0ICsgWiAqIDEuMDU3OwogICAgfQogICAgZGVzdFtkZXN0T2Zmc2V0XSA9IE1hdGguc3FydChyKSAqIDI1NTsKICAgIGRlc3RbZGVzdE9mZnNldCArIDFdID0gTWF0aC5zcXJ0KGcpICogMjU1OwogICAgZGVzdFtkZXN0T2Zmc2V0ICsgMl0gPSBNYXRoLnNxcnQoYikgKiAyNTU7CiAgfQogIGdldFJnYkl0ZW0oc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHsKICAgIHRoaXMuI3RvUmdiKHNyYywgc3JjT2Zmc2V0LCBmYWxzZSwgZGVzdCwgZGVzdE9mZnNldCk7CiAgfQogIGdldFJnYkJ1ZmZlcihzcmMsIHNyY09mZnNldCwgY291bnQsIGRlc3QsIGRlc3RPZmZzZXQsIGJpdHMsIGFscGhhMDEpIHsKICAgIGNvbnN0IG1heFZhbCA9ICgxIDw8IGJpdHMpIC0gMTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICB0aGlzLiN0b1JnYihzcmMsIHNyY09mZnNldCwgbWF4VmFsLCBkZXN0LCBkZXN0T2Zmc2V0KTsKICAgICAgc3JjT2Zmc2V0ICs9IDM7CiAgICAgIGRlc3RPZmZzZXQgKz0gMyArIGFscGhhMDE7CiAgICB9CiAgfQogIGdldE91dHB1dExlbmd0aChpbnB1dExlbmd0aCwgYWxwaGEwMSkgewogICAgcmV0dXJuIGlucHV0TGVuZ3RoICogKDMgKyBhbHBoYTAxKSAvIDMgfCAwOwogIH0KICBpc0RlZmF1bHREZWNvZGUoZGVjb2RlTWFwLCBicGMpIHsKICAgIHJldHVybiB0cnVlOwogIH0KICBnZXQgdXNlc1plcm9Ub09uZVJhbmdlKCkgewogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAidXNlc1plcm9Ub09uZVJhbmdlIiwgZmFsc2UpOwogIH0KfQoKOy8vIC4vc3JjL2NvcmUvaWNjX2NvbG9yc3BhY2UuanMKCgoKCmZ1bmN0aW9uIGZldGNoU3luYyh1cmwpIHsKICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICB4aHIub3BlbigiR0VUIiwgdXJsLCBmYWxzZSk7CiAgeGhyLnJlc3BvbnNlVHlwZSA9ICJhcnJheWJ1ZmZlciI7CiAgeGhyLnNlbmQobnVsbCk7CiAgcmV0dXJuIHhoci5yZXNwb25zZTsKfQpjbGFzcyBJY2NDb2xvclNwYWNlIGV4dGVuZHMgQ29sb3JTcGFjZSB7CiAgI3RyYW5zZm9ybWVyOwogICNjb252ZXJ0UGl4ZWw7CiAgc3RhdGljICN1c2VXYXNtID0gdHJ1ZTsKICBzdGF0aWMgI3dhc21VcmwgPSBudWxsOwogIHN0YXRpYyAjZmluYWxpemVyID0gbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHRyYW5zZm9ybWVyID0+IHsKICAgIHFjbXNfZHJvcF90cmFuc2Zvcm1lcih0cmFuc2Zvcm1lcik7CiAgfSk7CiAgY29uc3RydWN0b3IoaWNjUHJvZmlsZSwgbmFtZSwgbnVtQ29tcHMpIHsKICAgIGlmICghSWNjQ29sb3JTcGFjZS5pc1VzYWJsZSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vIElDQyBjb2xvciBzcGFjZSBzdXBwb3J0Iik7CiAgICB9CiAgICBzdXBlcihuYW1lLCBudW1Db21wcyk7CiAgICBsZXQgaW5UeXBlOwogICAgc3dpdGNoIChudW1Db21wcykgewogICAgICBjYXNlIDE6CiAgICAgICAgaW5UeXBlID0gRGF0YVR5cGUuR3JheTg7CiAgICAgICAgdGhpcy4jY29udmVydFBpeGVsID0gKHNyYywgc3JjT2Zmc2V0KSA9PiBxY21zX2NvbnZlcnRfb25lKHRoaXMuI3RyYW5zZm9ybWVyLCBzcmNbc3JjT2Zmc2V0XSAqIDI1NSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMzoKICAgICAgICBpblR5cGUgPSBEYXRhVHlwZS5SR0I4OwogICAgICAgIHRoaXMuI2NvbnZlcnRQaXhlbCA9IChzcmMsIHNyY09mZnNldCkgPT4gcWNtc19jb252ZXJ0X3RocmVlKHRoaXMuI3RyYW5zZm9ybWVyLCBzcmNbc3JjT2Zmc2V0XSAqIDI1NSwgc3JjW3NyY09mZnNldCArIDFdICogMjU1LCBzcmNbc3JjT2Zmc2V0ICsgMl0gKiAyNTUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDQ6CiAgICAgICAgaW5UeXBlID0gRGF0YVR5cGUuQ01ZSzsKICAgICAgICB0aGlzLiNjb252ZXJ0UGl4ZWwgPSAoc3JjLCBzcmNPZmZzZXQpID0+IHFjbXNfY29udmVydF9mb3VyKHRoaXMuI3RyYW5zZm9ybWVyLCBzcmNbc3JjT2Zmc2V0XSAqIDI1NSwgc3JjW3NyY09mZnNldCArIDFdICogMjU1LCBzcmNbc3JjT2Zmc2V0ICsgMl0gKiAyNTUsIHNyY1tzcmNPZmZzZXQgKyAzXSAqIDI1NSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBudW1iZXIgb2YgY29tcG9uZW50czogJHtudW1Db21wc31gKTsKICAgIH0KICAgIHRoaXMuI3RyYW5zZm9ybWVyID0gcWNtc190cmFuc2Zvcm1lcl9mcm9tX21lbW9yeShpY2NQcm9maWxlLCBpblR5cGUsIEludGVudC5QZXJjZXB0dWFsKTsKICAgIGlmICghdGhpcy4jdHJhbnNmb3JtZXIpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gY3JlYXRlIElDQyBjb2xvciBzcGFjZSIpOwogICAgfQogICAgSWNjQ29sb3JTcGFjZS4jZmluYWxpemVyLnJlZ2lzdGVyKHRoaXMsIHRoaXMuI3RyYW5zZm9ybWVyKTsKICB9CiAgZ2V0UmdiSXRlbShzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCkgewogICAgUUNNUy5fZGVzdEJ1ZmZlciA9IGRlc3Quc3ViYXJyYXkoZGVzdE9mZnNldCwgZGVzdE9mZnNldCArIDMpOwogICAgdGhpcy4jY29udmVydFBpeGVsKHNyYywgc3JjT2Zmc2V0KTsKICAgIFFDTVMuX2Rlc3RCdWZmZXIgPSBudWxsOwogIH0KICBnZXRSZ2JCdWZmZXIoc3JjLCBzcmNPZmZzZXQsIGNvdW50LCBkZXN0LCBkZXN0T2Zmc2V0LCBiaXRzLCBhbHBoYTAxKSB7CiAgICBzcmMgPSBzcmMuc3ViYXJyYXkoc3JjT2Zmc2V0LCBzcmNPZmZzZXQgKyBjb3VudCAqIHRoaXMubnVtQ29tcHMpOwogICAgaWYgKGJpdHMgIT09IDgpIHsKICAgICAgY29uc3Qgc2NhbGUgPSAyNTUgLyAoKDEgPDwgYml0cykgLSAxKTsKICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gc3JjLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgICBzcmNbaV0gKj0gc2NhbGU7CiAgICAgIH0KICAgIH0KICAgIFFDTVMuX211c3RBZGRBbHBoYSA9IGFscGhhMDEgJiYgZGVzdC5idWZmZXIgPT09IHNyYy5idWZmZXI7CiAgICBRQ01TLl9kZXN0QnVmZmVyID0gZGVzdC5zdWJhcnJheShkZXN0T2Zmc2V0LCBkZXN0T2Zmc2V0ICsgY291bnQgKiAoMyArIGFscGhhMDEpKTsKICAgIHFjbXNfY29udmVydF9hcnJheSh0aGlzLiN0cmFuc2Zvcm1lciwgc3JjKTsKICAgIFFDTVMuX211c3RBZGRBbHBoYSA9IGZhbHNlOwogICAgUUNNUy5fZGVzdEJ1ZmZlciA9IG51bGw7CiAgfQogIGdldE91dHB1dExlbmd0aChpbnB1dExlbmd0aCwgYWxwaGEwMSkgewogICAgcmV0dXJuIGlucHV0TGVuZ3RoIC8gdGhpcy5udW1Db21wcyAqICgzICsgYWxwaGEwMSkgfCAwOwogIH0KICBzdGF0aWMgc2V0T3B0aW9ucyh7CiAgICB1c2VXYXNtLAogICAgdXNlV29ya2VyRmV0Y2gsCiAgICB3YXNtVXJsCiAgfSkgewogICAgaWYgKCF1c2VXb3JrZXJGZXRjaCkgewogICAgICB0aGlzLiN1c2VXYXNtID0gZmFsc2U7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuI3VzZVdhc20gPSB1c2VXYXNtOwogICAgdGhpcy4jd2FzbVVybCA9IHdhc21Vcmw7CiAgfQogIHN0YXRpYyBnZXQgaXNVc2FibGUoKSB7CiAgICBsZXQgaXNVc2FibGUgPSBmYWxzZTsKICAgIGlmICh0aGlzLiN1c2VXYXNtKSB7CiAgICAgIGlmICh0aGlzLiN3YXNtVXJsKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHRoaXMuX21vZHVsZSA9IFFDTVMuX21vZHVsZSA9IGluaXRTeW5jKHsKICAgICAgICAgICAgbW9kdWxlOiBmZXRjaFN5bmMoYCR7dGhpcy4jd2FzbVVybH1xY21zX2JnLndhc21gKQogICAgICAgICAgfSk7CiAgICAgICAgICBpc1VzYWJsZSA9ICEhdGhpcy5fbW9kdWxlOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIHdhcm4oYElDQ0Jhc2VkIGNvbG9yIHNwYWNlOiAiJHtlfSIuYCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHdhcm4oIk5vIElDQyBjb2xvciBzcGFjZSBzdXBwb3J0IGR1ZSB0byBtaXNzaW5nIGB3YXNtVXJsYCBBUEkgb3B0aW9uIik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBzaGFkb3codGhpcywgImlzVXNhYmxlIiwgaXNVc2FibGUpOwogIH0KfQpjbGFzcyBDbXlrSUNDQmFzZWRDUyBleHRlbmRzIEljY0NvbG9yU3BhY2UgewogIHN0YXRpYyAjaWNjVXJsOwogIGNvbnN0cnVjdG9yKCkgewogICAgY29uc3QgaWNjUHJvZmlsZSA9IG5ldyBVaW50OEFycmF5KGZldGNoU3luYyhgJHtDbXlrSUNDQmFzZWRDUy4jaWNjVXJsfUNHQVRTMDAxQ29tcGF0LXYyLW1pY3JvLmljY2ApKTsKICAgIHN1cGVyKGljY1Byb2ZpbGUsICJEZXZpY2VDTVlLIiwgNCk7CiAgfQogIHN0YXRpYyBzZXRPcHRpb25zKHsKICAgIGljY1VybAogIH0pIHsKICAgIHRoaXMuI2ljY1VybCA9IGljY1VybDsKICB9CiAgc3RhdGljIGdldCBpc1VzYWJsZSgpIHsKICAgIGxldCBpc1VzYWJsZSA9IGZhbHNlOwogICAgaWYgKEljY0NvbG9yU3BhY2UuaXNVc2FibGUpIHsKICAgICAgaWYgKHRoaXMuI2ljY1VybCkgewogICAgICAgIGlzVXNhYmxlID0gdHJ1ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICB3YXJuKCJObyBDTVlLIElDQyBwcm9maWxlIHN1cHBvcnQgZHVlIHRvIG1pc3NpbmcgYGljY1VybGAgQVBJIG9wdGlvbiIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJpc1VzYWJsZSIsIGlzVXNhYmxlKTsKICB9Cn0KCjsvLyAuL3NyYy9jb3JlL3N0cmVhbS5qcwoKCmNsYXNzIFN0cmVhbSBleHRlbmRzIEJhc2VTdHJlYW0gewogIGNvbnN0cnVjdG9yKGFycmF5QnVmZmVyLCBzdGFydCwgbGVuZ3RoLCBkaWN0KSB7CiAgICBzdXBlcigpOwogICAgdGhpcy5ieXRlcyA9IGFycmF5QnVmZmVyIGluc3RhbmNlb2YgVWludDhBcnJheSA/IGFycmF5QnVmZmVyIDogbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpOwogICAgdGhpcy5zdGFydCA9IHN0YXJ0IHx8IDA7CiAgICB0aGlzLnBvcyA9IHRoaXMuc3RhcnQ7CiAgICB0aGlzLmVuZCA9IHN0YXJ0ICsgbGVuZ3RoIHx8IHRoaXMuYnl0ZXMubGVuZ3RoOwogICAgdGhpcy5kaWN0ID0gZGljdDsKICB9CiAgZ2V0IGxlbmd0aCgpIHsKICAgIHJldHVybiB0aGlzLmVuZCAtIHRoaXMuc3RhcnQ7CiAgfQogIGdldCBpc0VtcHR5KCkgewogICAgcmV0dXJuIHRoaXMubGVuZ3RoID09PSAwOwogIH0KICBnZXRCeXRlKCkgewogICAgaWYgKHRoaXMucG9zID49IHRoaXMuZW5kKSB7CiAgICAgIHJldHVybiAtMTsKICAgIH0KICAgIHJldHVybiB0aGlzLmJ5dGVzW3RoaXMucG9zKytdOwogIH0KICBnZXRCeXRlcyhsZW5ndGgpIHsKICAgIGNvbnN0IGJ5dGVzID0gdGhpcy5ieXRlczsKICAgIGNvbnN0IHBvcyA9IHRoaXMucG9zOwogICAgY29uc3Qgc3RyRW5kID0gdGhpcy5lbmQ7CiAgICBpZiAoIWxlbmd0aCkgewogICAgICByZXR1cm4gYnl0ZXMuc3ViYXJyYXkocG9zLCBzdHJFbmQpOwogICAgfQogICAgbGV0IGVuZCA9IHBvcyArIGxlbmd0aDsKICAgIGlmIChlbmQgPiBzdHJFbmQpIHsKICAgICAgZW5kID0gc3RyRW5kOwogICAgfQogICAgdGhpcy5wb3MgPSBlbmQ7CiAgICByZXR1cm4gYnl0ZXMuc3ViYXJyYXkocG9zLCBlbmQpOwogIH0KICBnZXRCeXRlUmFuZ2UoYmVnaW4sIGVuZCkgewogICAgaWYgKGJlZ2luIDwgMCkgewogICAgICBiZWdpbiA9IDA7CiAgICB9CiAgICBpZiAoZW5kID4gdGhpcy5lbmQpIHsKICAgICAgZW5kID0gdGhpcy5lbmQ7CiAgICB9CiAgICByZXR1cm4gdGhpcy5ieXRlcy5zdWJhcnJheShiZWdpbiwgZW5kKTsKICB9CiAgcmVzZXQoKSB7CiAgICB0aGlzLnBvcyA9IHRoaXMuc3RhcnQ7CiAgfQogIG1vdmVTdGFydCgpIHsKICAgIHRoaXMuc3RhcnQgPSB0aGlzLnBvczsKICB9CiAgbWFrZVN1YlN0cmVhbShzdGFydCwgbGVuZ3RoLCBkaWN0ID0gbnVsbCkgewogICAgcmV0dXJuIG5ldyBTdHJlYW0odGhpcy5ieXRlcy5idWZmZXIsIHN0YXJ0LCBsZW5ndGgsIGRpY3QpOwogIH0KfQpjbGFzcyBTdHJpbmdTdHJlYW0gZXh0ZW5kcyBTdHJlYW0gewogIGNvbnN0cnVjdG9yKHN0cikgewogICAgc3VwZXIoc3RyaW5nVG9CeXRlcyhzdHIpKTsKICB9Cn0KY2xhc3MgTnVsbFN0cmVhbSBleHRlbmRzIFN0cmVhbSB7CiAgY29uc3RydWN0b3IoKSB7CiAgICBzdXBlcihuZXcgVWludDhBcnJheSgwKSk7CiAgfQp9Cgo7Ly8gLi9zcmMvY29yZS9jaHVua2VkX3N0cmVhbS5qcwoKCgpjbGFzcyBDaHVua2VkU3RyZWFtIGV4dGVuZHMgU3RyZWFtIHsKICBjb25zdHJ1Y3RvcihsZW5ndGgsIGNodW5rU2l6ZSwgbWFuYWdlcikgewogICAgc3VwZXIobmV3IFVpbnQ4QXJyYXkobGVuZ3RoKSwgMCwgbGVuZ3RoLCBudWxsKTsKICAgIHRoaXMuY2h1bmtTaXplID0gY2h1bmtTaXplOwogICAgdGhpcy5fbG9hZGVkQ2h1bmtzID0gbmV3IFNldCgpOwogICAgdGhpcy5udW1DaHVua3MgPSBNYXRoLmNlaWwobGVuZ3RoIC8gY2h1bmtTaXplKTsKICAgIHRoaXMubWFuYWdlciA9IG1hbmFnZXI7CiAgICB0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCA9IDA7CiAgICB0aGlzLmxhc3RTdWNjZXNzZnVsRW5zdXJlQnl0ZUNodW5rID0gLTE7CiAgfQogIGdldE1pc3NpbmdDaHVua3MoKSB7CiAgICBjb25zdCBjaHVua3MgPSBbXTsKICAgIGZvciAobGV0IGNodW5rID0gMCwgbiA9IHRoaXMubnVtQ2h1bmtzOyBjaHVuayA8IG47ICsrY2h1bmspIHsKICAgICAgaWYgKCF0aGlzLl9sb2FkZWRDaHVua3MuaGFzKGNodW5rKSkgewogICAgICAgIGNodW5rcy5wdXNoKGNodW5rKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGNodW5rczsKICB9CiAgZ2V0IG51bUNodW5rc0xvYWRlZCgpIHsKICAgIHJldHVybiB0aGlzLl9sb2FkZWRDaHVua3Muc2l6ZTsKICB9CiAgZ2V0IGlzRGF0YUxvYWRlZCgpIHsKICAgIHJldHVybiB0aGlzLm51bUNodW5rc0xvYWRlZCA9PT0gdGhpcy5udW1DaHVua3M7CiAgfQogIG9uUmVjZWl2ZURhdGEoYmVnaW4sIGNodW5rKSB7CiAgICBjb25zdCBjaHVua1NpemUgPSB0aGlzLmNodW5rU2l6ZTsKICAgIGlmIChiZWdpbiAlIGNodW5rU2l6ZSAhPT0gMCkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCBiZWdpbiBvZmZzZXQ6ICR7YmVnaW59YCk7CiAgICB9CiAgICBjb25zdCBlbmQgPSBiZWdpbiArIGNodW5rLmJ5dGVMZW5ndGg7CiAgICBpZiAoZW5kICUgY2h1bmtTaXplICE9PSAwICYmIGVuZCAhPT0gdGhpcy5ieXRlcy5sZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgZW5kIG9mZnNldDogJHtlbmR9YCk7CiAgICB9CiAgICB0aGlzLmJ5dGVzLnNldChuZXcgVWludDhBcnJheShjaHVuayksIGJlZ2luKTsKICAgIGNvbnN0IGJlZ2luQ2h1bmsgPSBNYXRoLmZsb29yKGJlZ2luIC8gY2h1bmtTaXplKTsKICAgIGNvbnN0IGVuZENodW5rID0gTWF0aC5mbG9vcigoZW5kIC0gMSkgLyBjaHVua1NpemUpICsgMTsKICAgIGZvciAobGV0IGN1ckNodW5rID0gYmVnaW5DaHVuazsgY3VyQ2h1bmsgPCBlbmRDaHVuazsgKytjdXJDaHVuaykgewogICAgICB0aGlzLl9sb2FkZWRDaHVua3MuYWRkKGN1ckNodW5rKTsKICAgIH0KICB9CiAgb25SZWNlaXZlUHJvZ3Jlc3NpdmVEYXRhKGRhdGEpIHsKICAgIGxldCBwb3NpdGlvbiA9IHRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoOwogICAgY29uc3QgYmVnaW5DaHVuayA9IE1hdGguZmxvb3IocG9zaXRpb24gLyB0aGlzLmNodW5rU2l6ZSk7CiAgICB0aGlzLmJ5dGVzLnNldChuZXcgVWludDhBcnJheShkYXRhKSwgcG9zaXRpb24pOwogICAgcG9zaXRpb24gKz0gZGF0YS5ieXRlTGVuZ3RoOwogICAgdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGggPSBwb3NpdGlvbjsKICAgIGNvbnN0IGVuZENodW5rID0gcG9zaXRpb24gPj0gdGhpcy5lbmQgPyB0aGlzLm51bUNodW5rcyA6IE1hdGguZmxvb3IocG9zaXRpb24gLyB0aGlzLmNodW5rU2l6ZSk7CiAgICBmb3IgKGxldCBjdXJDaHVuayA9IGJlZ2luQ2h1bms7IGN1ckNodW5rIDwgZW5kQ2h1bms7ICsrY3VyQ2h1bmspIHsKICAgICAgdGhpcy5fbG9hZGVkQ2h1bmtzLmFkZChjdXJDaHVuayk7CiAgICB9CiAgfQogIGVuc3VyZUJ5dGUocG9zKSB7CiAgICBpZiAocG9zIDwgdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgY2h1bmsgPSBNYXRoLmZsb29yKHBvcyAvIHRoaXMuY2h1bmtTaXplKTsKICAgIGlmIChjaHVuayA+IHRoaXMubnVtQ2h1bmtzKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChjaHVuayA9PT0gdGhpcy5sYXN0U3VjY2Vzc2Z1bEVuc3VyZUJ5dGVDaHVuaykgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoIXRoaXMuX2xvYWRlZENodW5rcy5oYXMoY2h1bmspKSB7CiAgICAgIHRocm93IG5ldyBNaXNzaW5nRGF0YUV4Y2VwdGlvbihwb3MsIHBvcyArIDEpOwogICAgfQogICAgdGhpcy5sYXN0U3VjY2Vzc2Z1bEVuc3VyZUJ5dGVDaHVuayA9IGNodW5rOwogIH0KICBlbnN1cmVSYW5nZShiZWdpbiwgZW5kKSB7CiAgICBpZiAoYmVnaW4gPj0gZW5kKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChlbmQgPD0gdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgYmVnaW5DaHVuayA9IE1hdGguZmxvb3IoYmVnaW4gLyB0aGlzLmNodW5rU2l6ZSk7CiAgICBpZiAoYmVnaW5DaHVuayA+IHRoaXMubnVtQ2h1bmtzKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IGVuZENodW5rID0gTWF0aC5taW4oTWF0aC5mbG9vcigoZW5kIC0gMSkgLyB0aGlzLmNodW5rU2l6ZSkgKyAxLCB0aGlzLm51bUNodW5rcyk7CiAgICBmb3IgKGxldCBjaHVuayA9IGJlZ2luQ2h1bms7IGNodW5rIDwgZW5kQ2h1bms7ICsrY2h1bmspIHsKICAgICAgaWYgKCF0aGlzLl9sb2FkZWRDaHVua3MuaGFzKGNodW5rKSkgewogICAgICAgIHRocm93IG5ldyBNaXNzaW5nRGF0YUV4Y2VwdGlvbihiZWdpbiwgZW5kKTsKICAgICAgfQogICAgfQogIH0KICBuZXh0RW1wdHlDaHVuayhiZWdpbkNodW5rKSB7CiAgICBjb25zdCBudW1DaHVua3MgPSB0aGlzLm51bUNodW5rczsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtQ2h1bmtzOyArK2kpIHsKICAgICAgY29uc3QgY2h1bmsgPSAoYmVnaW5DaHVuayArIGkpICUgbnVtQ2h1bmtzOwogICAgICBpZiAoIXRoaXMuX2xvYWRlZENodW5rcy5oYXMoY2h1bmspKSB7CiAgICAgICAgcmV0dXJuIGNodW5rOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CiAgaGFzQ2h1bmsoY2h1bmspIHsKICAgIHJldHVybiB0aGlzLl9sb2FkZWRDaHVua3MuaGFzKGNodW5rKTsKICB9CiAgZ2V0Qnl0ZSgpIHsKICAgIGNvbnN0IHBvcyA9IHRoaXMucG9zOwogICAgaWYgKHBvcyA+PSB0aGlzLmVuZCkgewogICAgICByZXR1cm4gLTE7CiAgICB9CiAgICBpZiAocG9zID49IHRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoKSB7CiAgICAgIHRoaXMuZW5zdXJlQnl0ZShwb3MpOwogICAgfQogICAgcmV0dXJuIHRoaXMuYnl0ZXNbdGhpcy5wb3MrK107CiAgfQogIGdldEJ5dGVzKGxlbmd0aCkgewogICAgY29uc3QgYnl0ZXMgPSB0aGlzLmJ5dGVzOwogICAgY29uc3QgcG9zID0gdGhpcy5wb3M7CiAgICBjb25zdCBzdHJFbmQgPSB0aGlzLmVuZDsKICAgIGlmICghbGVuZ3RoKSB7CiAgICAgIGlmIChzdHJFbmQgPiB0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCkgewogICAgICAgIHRoaXMuZW5zdXJlUmFuZ2UocG9zLCBzdHJFbmQpOwogICAgICB9CiAgICAgIHJldHVybiBieXRlcy5zdWJhcnJheShwb3MsIHN0ckVuZCk7CiAgICB9CiAgICBsZXQgZW5kID0gcG9zICsgbGVuZ3RoOwogICAgaWYgKGVuZCA+IHN0ckVuZCkgewogICAgICBlbmQgPSBzdHJFbmQ7CiAgICB9CiAgICBpZiAoZW5kID4gdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgpIHsKICAgICAgdGhpcy5lbnN1cmVSYW5nZShwb3MsIGVuZCk7CiAgICB9CiAgICB0aGlzLnBvcyA9IGVuZDsKICAgIHJldHVybiBieXRlcy5zdWJhcnJheShwb3MsIGVuZCk7CiAgfQogIGdldEJ5dGVSYW5nZShiZWdpbiwgZW5kKSB7CiAgICBpZiAoYmVnaW4gPCAwKSB7CiAgICAgIGJlZ2luID0gMDsKICAgIH0KICAgIGlmIChlbmQgPiB0aGlzLmVuZCkgewogICAgICBlbmQgPSB0aGlzLmVuZDsKICAgIH0KICAgIGlmIChlbmQgPiB0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCkgewogICAgICB0aGlzLmVuc3VyZVJhbmdlKGJlZ2luLCBlbmQpOwogICAgfQogICAgcmV0dXJuIHRoaXMuYnl0ZXMuc3ViYXJyYXkoYmVnaW4sIGVuZCk7CiAgfQogIG1ha2VTdWJTdHJlYW0oc3RhcnQsIGxlbmd0aCwgZGljdCA9IG51bGwpIHsKICAgIGlmIChsZW5ndGgpIHsKICAgICAgaWYgKHN0YXJ0ICsgbGVuZ3RoID4gdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgpIHsKICAgICAgICB0aGlzLmVuc3VyZVJhbmdlKHN0YXJ0LCBzdGFydCArIGxlbmd0aCk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoc3RhcnQgPj0gdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgpIHsKICAgICAgdGhpcy5lbnN1cmVCeXRlKHN0YXJ0KTsKICAgIH0KICAgIGZ1bmN0aW9uIENodW5rZWRTdHJlYW1TdWJzdHJlYW0oKSB7fQogICAgQ2h1bmtlZFN0cmVhbVN1YnN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHRoaXMpOwogICAgQ2h1bmtlZFN0cmVhbVN1YnN0cmVhbS5wcm90b3R5cGUuZ2V0TWlzc2luZ0NodW5rcyA9IGZ1bmN0aW9uICgpIHsKICAgICAgY29uc3QgY2h1bmtTaXplID0gdGhpcy5jaHVua1NpemU7CiAgICAgIGNvbnN0IGJlZ2luQ2h1bmsgPSBNYXRoLmZsb29yKHRoaXMuc3RhcnQgLyBjaHVua1NpemUpOwogICAgICBjb25zdCBlbmRDaHVuayA9IE1hdGguZmxvb3IoKHRoaXMuZW5kIC0gMSkgLyBjaHVua1NpemUpICsgMTsKICAgICAgY29uc3QgbWlzc2luZ0NodW5rcyA9IFtdOwogICAgICBmb3IgKGxldCBjaHVuayA9IGJlZ2luQ2h1bms7IGNodW5rIDwgZW5kQ2h1bms7ICsrY2h1bmspIHsKICAgICAgICBpZiAoIXRoaXMuX2xvYWRlZENodW5rcy5oYXMoY2h1bmspKSB7CiAgICAgICAgICBtaXNzaW5nQ2h1bmtzLnB1c2goY2h1bmspOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbWlzc2luZ0NodW5rczsKICAgIH07CiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2h1bmtlZFN0cmVhbVN1YnN0cmVhbS5wcm90b3R5cGUsICJpc0RhdGFMb2FkZWQiLCB7CiAgICAgIGdldCgpIHsKICAgICAgICBpZiAodGhpcy5udW1DaHVua3NMb2FkZWQgPT09IHRoaXMubnVtQ2h1bmtzKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWlzc2luZ0NodW5rcygpLmxlbmd0aCA9PT0gMDsKICAgICAgfSwKICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICB9KTsKICAgIGNvbnN0IHN1YlN0cmVhbSA9IG5ldyBDaHVua2VkU3RyZWFtU3Vic3RyZWFtKCk7CiAgICBzdWJTdHJlYW0ucG9zID0gc3ViU3RyZWFtLnN0YXJ0ID0gc3RhcnQ7CiAgICBzdWJTdHJlYW0uZW5kID0gc3RhcnQgKyBsZW5ndGggfHwgdGhpcy5lbmQ7CiAgICBzdWJTdHJlYW0uZGljdCA9IGRpY3Q7CiAgICByZXR1cm4gc3ViU3RyZWFtOwogIH0KICBnZXRCYXNlU3RyZWFtcygpIHsKICAgIHJldHVybiBbdGhpc107CiAgfQp9CmNsYXNzIENodW5rZWRTdHJlYW1NYW5hZ2VyIHsKICBjb25zdHJ1Y3RvcihwZGZOZXR3b3JrU3RyZWFtLCBhcmdzKSB7CiAgICB0aGlzLmxlbmd0aCA9IGFyZ3MubGVuZ3RoOwogICAgdGhpcy5jaHVua1NpemUgPSBhcmdzLnJhbmdlQ2h1bmtTaXplOwogICAgdGhpcy5zdHJlYW0gPSBuZXcgQ2h1bmtlZFN0cmVhbSh0aGlzLmxlbmd0aCwgdGhpcy5jaHVua1NpemUsIHRoaXMpOwogICAgdGhpcy5wZGZOZXR3b3JrU3RyZWFtID0gcGRmTmV0d29ya1N0cmVhbTsKICAgIHRoaXMuZGlzYWJsZUF1dG9GZXRjaCA9IGFyZ3MuZGlzYWJsZUF1dG9GZXRjaDsKICAgIHRoaXMubXNnSGFuZGxlciA9IGFyZ3MubXNnSGFuZGxlcjsKICAgIHRoaXMuY3VyclJlcXVlc3RJZCA9IDA7CiAgICB0aGlzLl9jaHVua3NOZWVkZWRCeVJlcXVlc3QgPSBuZXcgTWFwKCk7CiAgICB0aGlzLl9yZXF1ZXN0c0J5Q2h1bmsgPSBuZXcgTWFwKCk7CiAgICB0aGlzLl9wcm9taXNlc0J5UmVxdWVzdCA9IG5ldyBNYXAoKTsKICAgIHRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoID0gMDsKICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlOwogICAgdGhpcy5fbG9hZGVkU3RyZWFtQ2FwYWJpbGl0eSA9IFByb21pc2Uud2l0aFJlc29sdmVycygpOwogIH0KICBzZW5kUmVxdWVzdChiZWdpbiwgZW5kKSB7CiAgICBjb25zdCByYW5nZVJlYWRlciA9IHRoaXMucGRmTmV0d29ya1N0cmVhbS5nZXRSYW5nZVJlYWRlcihiZWdpbiwgZW5kKTsKICAgIGlmICghcmFuZ2VSZWFkZXIuaXNTdHJlYW1pbmdTdXBwb3J0ZWQpIHsKICAgICAgcmFuZ2VSZWFkZXIub25Qcm9ncmVzcyA9IHRoaXMub25Qcm9ncmVzcy5iaW5kKHRoaXMpOwogICAgfQogICAgbGV0IGNodW5rcyA9IFtdLAogICAgICBsb2FkZWQgPSAwOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgICAgY29uc3QgcmVhZENodW5rID0gKHsKICAgICAgICB2YWx1ZSwKICAgICAgICBkb25lCiAgICAgIH0pID0+IHsKICAgICAgICB0cnkgewogICAgICAgICAgaWYgKGRvbmUpIHsKICAgICAgICAgICAgY29uc3QgY2h1bmtEYXRhID0gYXJyYXlCdWZmZXJzVG9CeXRlcyhjaHVua3MpOwogICAgICAgICAgICBjaHVua3MgPSBudWxsOwogICAgICAgICAgICByZXNvbHZlKGNodW5rRGF0YSk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGxvYWRlZCArPSB2YWx1ZS5ieXRlTGVuZ3RoOwogICAgICAgICAgaWYgKHJhbmdlUmVhZGVyLmlzU3RyZWFtaW5nU3VwcG9ydGVkKSB7CiAgICAgICAgICAgIHRoaXMub25Qcm9ncmVzcyh7CiAgICAgICAgICAgICAgbG9hZGVkCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgICAgY2h1bmtzLnB1c2godmFsdWUpOwogICAgICAgICAgcmFuZ2VSZWFkZXIucmVhZCgpLnRoZW4ocmVhZENodW5rLCByZWplY3QpOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIHJlamVjdChlKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJhbmdlUmVhZGVyLnJlYWQoKS50aGVuKHJlYWRDaHVuaywgcmVqZWN0KTsKICAgIH0pLnRoZW4oZGF0YSA9PiB7CiAgICAgIGlmICh0aGlzLmFib3J0ZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy5vblJlY2VpdmVEYXRhKHsKICAgICAgICBjaHVuazogZGF0YSwKICAgICAgICBiZWdpbgogICAgICB9KTsKICAgIH0pOwogIH0KICByZXF1ZXN0QWxsQ2h1bmtzKG5vRmV0Y2ggPSBmYWxzZSkgewogICAgaWYgKCFub0ZldGNoKSB7CiAgICAgIGNvbnN0IG1pc3NpbmdDaHVua3MgPSB0aGlzLnN0cmVhbS5nZXRNaXNzaW5nQ2h1bmtzKCk7CiAgICAgIHRoaXMuX3JlcXVlc3RDaHVua3MobWlzc2luZ0NodW5rcyk7CiAgICB9CiAgICByZXR1cm4gdGhpcy5fbG9hZGVkU3RyZWFtQ2FwYWJpbGl0eS5wcm9taXNlOwogIH0KICBfcmVxdWVzdENodW5rcyhjaHVua3MpIHsKICAgIGNvbnN0IHJlcXVlc3RJZCA9IHRoaXMuY3VyclJlcXVlc3RJZCsrOwogICAgY29uc3QgY2h1bmtzTmVlZGVkID0gbmV3IFNldCgpOwogICAgdGhpcy5fY2h1bmtzTmVlZGVkQnlSZXF1ZXN0LnNldChyZXF1ZXN0SWQsIGNodW5rc05lZWRlZCk7CiAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGNodW5rcykgewogICAgICBpZiAoIXRoaXMuc3RyZWFtLmhhc0NodW5rKGNodW5rKSkgewogICAgICAgIGNodW5rc05lZWRlZC5hZGQoY2h1bmspOwogICAgICB9CiAgICB9CiAgICBpZiAoY2h1bmtzTmVlZGVkLnNpemUgPT09IDApIHsKICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOwogICAgfQogICAgY29uc3QgY2FwYWJpbGl0eSA9IFByb21pc2Uud2l0aFJlc29sdmVycygpOwogICAgdGhpcy5fcHJvbWlzZXNCeVJlcXVlc3Quc2V0KHJlcXVlc3RJZCwgY2FwYWJpbGl0eSk7CiAgICBjb25zdCBjaHVua3NUb1JlcXVlc3QgPSBbXTsKICAgIGZvciAoY29uc3QgY2h1bmsgb2YgY2h1bmtzTmVlZGVkKSB7CiAgICAgIGxldCByZXF1ZXN0SWRzID0gdGhpcy5fcmVxdWVzdHNCeUNodW5rLmdldChjaHVuayk7CiAgICAgIGlmICghcmVxdWVzdElkcykgewogICAgICAgIHJlcXVlc3RJZHMgPSBbXTsKICAgICAgICB0aGlzLl9yZXF1ZXN0c0J5Q2h1bmsuc2V0KGNodW5rLCByZXF1ZXN0SWRzKTsKICAgICAgICBjaHVua3NUb1JlcXVlc3QucHVzaChjaHVuayk7CiAgICAgIH0KICAgICAgcmVxdWVzdElkcy5wdXNoKHJlcXVlc3RJZCk7CiAgICB9CiAgICBpZiAoY2h1bmtzVG9SZXF1ZXN0Lmxlbmd0aCA+IDApIHsKICAgICAgY29uc3QgZ3JvdXBlZENodW5rc1RvUmVxdWVzdCA9IHRoaXMuZ3JvdXBDaHVua3MoY2h1bmtzVG9SZXF1ZXN0KTsKICAgICAgZm9yIChjb25zdCBncm91cGVkQ2h1bmsgb2YgZ3JvdXBlZENodW5rc1RvUmVxdWVzdCkgewogICAgICAgIGNvbnN0IGJlZ2luID0gZ3JvdXBlZENodW5rLmJlZ2luQ2h1bmsgKiB0aGlzLmNodW5rU2l6ZTsKICAgICAgICBjb25zdCBlbmQgPSBNYXRoLm1pbihncm91cGVkQ2h1bmsuZW5kQ2h1bmsgKiB0aGlzLmNodW5rU2l6ZSwgdGhpcy5sZW5ndGgpOwogICAgICAgIHRoaXMuc2VuZFJlcXVlc3QoYmVnaW4sIGVuZCkuY2F0Y2goY2FwYWJpbGl0eS5yZWplY3QpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlLmNhdGNoKHJlYXNvbiA9PiB7CiAgICAgIGlmICh0aGlzLmFib3J0ZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhyb3cgcmVhc29uOwogICAgfSk7CiAgfQogIGdldFN0cmVhbSgpIHsKICAgIHJldHVybiB0aGlzLnN0cmVhbTsKICB9CiAgcmVxdWVzdFJhbmdlKGJlZ2luLCBlbmQpIHsKICAgIGVuZCA9IE1hdGgubWluKGVuZCwgdGhpcy5sZW5ndGgpOwogICAgY29uc3QgYmVnaW5DaHVuayA9IHRoaXMuZ2V0QmVnaW5DaHVuayhiZWdpbik7CiAgICBjb25zdCBlbmRDaHVuayA9IHRoaXMuZ2V0RW5kQ2h1bmsoZW5kKTsKICAgIGNvbnN0IGNodW5rcyA9IFtdOwogICAgZm9yIChsZXQgY2h1bmsgPSBiZWdpbkNodW5rOyBjaHVuayA8IGVuZENodW5rOyArK2NodW5rKSB7CiAgICAgIGNodW5rcy5wdXNoKGNodW5rKTsKICAgIH0KICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0Q2h1bmtzKGNodW5rcyk7CiAgfQogIHJlcXVlc3RSYW5nZXMocmFuZ2VzID0gW10pIHsKICAgIGNvbnN0IGNodW5rc1RvUmVxdWVzdCA9IFtdOwogICAgZm9yIChjb25zdCByYW5nZSBvZiByYW5nZXMpIHsKICAgICAgY29uc3QgYmVnaW5DaHVuayA9IHRoaXMuZ2V0QmVnaW5DaHVuayhyYW5nZS5iZWdpbik7CiAgICAgIGNvbnN0IGVuZENodW5rID0gdGhpcy5nZXRFbmRDaHVuayhyYW5nZS5lbmQpOwogICAgICBmb3IgKGxldCBjaHVuayA9IGJlZ2luQ2h1bms7IGNodW5rIDwgZW5kQ2h1bms7ICsrY2h1bmspIHsKICAgICAgICBpZiAoIWNodW5rc1RvUmVxdWVzdC5pbmNsdWRlcyhjaHVuaykpIHsKICAgICAgICAgIGNodW5rc1RvUmVxdWVzdC5wdXNoKGNodW5rKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGNodW5rc1RvUmVxdWVzdC5zb3J0KChhLCBiKSA9PiBhIC0gYik7CiAgICByZXR1cm4gdGhpcy5fcmVxdWVzdENodW5rcyhjaHVua3NUb1JlcXVlc3QpOwogIH0KICBncm91cENodW5rcyhjaHVua3MpIHsKICAgIGNvbnN0IGdyb3VwZWRDaHVua3MgPSBbXTsKICAgIGxldCBiZWdpbkNodW5rID0gLTE7CiAgICBsZXQgcHJldkNodW5rID0gLTE7CiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBjaHVua3MubGVuZ3RoOyBpIDwgaWk7ICsraSkgewogICAgICBjb25zdCBjaHVuayA9IGNodW5rc1tpXTsKICAgICAgaWYgKGJlZ2luQ2h1bmsgPCAwKSB7CiAgICAgICAgYmVnaW5DaHVuayA9IGNodW5rOwogICAgICB9CiAgICAgIGlmIChwcmV2Q2h1bmsgPj0gMCAmJiBwcmV2Q2h1bmsgKyAxICE9PSBjaHVuaykgewogICAgICAgIGdyb3VwZWRDaHVua3MucHVzaCh7CiAgICAgICAgICBiZWdpbkNodW5rLAogICAgICAgICAgZW5kQ2h1bms6IHByZXZDaHVuayArIDEKICAgICAgICB9KTsKICAgICAgICBiZWdpbkNodW5rID0gY2h1bms7CiAgICAgIH0KICAgICAgaWYgKGkgKyAxID09PSBjaHVua3MubGVuZ3RoKSB7CiAgICAgICAgZ3JvdXBlZENodW5rcy5wdXNoKHsKICAgICAgICAgIGJlZ2luQ2h1bmssCiAgICAgICAgICBlbmRDaHVuazogY2h1bmsgKyAxCiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgcHJldkNodW5rID0gY2h1bms7CiAgICB9CiAgICByZXR1cm4gZ3JvdXBlZENodW5rczsKICB9CiAgb25Qcm9ncmVzcyhhcmdzKSB7CiAgICB0aGlzLm1zZ0hhbmRsZXIuc2VuZCgiRG9jUHJvZ3Jlc3MiLCB7CiAgICAgIGxvYWRlZDogdGhpcy5zdHJlYW0ubnVtQ2h1bmtzTG9hZGVkICogdGhpcy5jaHVua1NpemUgKyBhcmdzLmxvYWRlZCwKICAgICAgdG90YWw6IHRoaXMubGVuZ3RoCiAgICB9KTsKICB9CiAgb25SZWNlaXZlRGF0YShhcmdzKSB7CiAgICBjb25zdCBjaHVuayA9IGFyZ3MuY2h1bms7CiAgICBjb25zdCBpc1Byb2dyZXNzaXZlID0gYXJncy5iZWdpbiA9PT0gdW5kZWZpbmVkOwogICAgY29uc3QgYmVnaW4gPSBpc1Byb2dyZXNzaXZlID8gdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGggOiBhcmdzLmJlZ2luOwogICAgY29uc3QgZW5kID0gYmVnaW4gKyBjaHVuay5ieXRlTGVuZ3RoOwogICAgY29uc3QgYmVnaW5DaHVuayA9IE1hdGguZmxvb3IoYmVnaW4gLyB0aGlzLmNodW5rU2l6ZSk7CiAgICBjb25zdCBlbmRDaHVuayA9IGVuZCA8IHRoaXMubGVuZ3RoID8gTWF0aC5mbG9vcihlbmQgLyB0aGlzLmNodW5rU2l6ZSkgOiBNYXRoLmNlaWwoZW5kIC8gdGhpcy5jaHVua1NpemUpOwogICAgaWYgKGlzUHJvZ3Jlc3NpdmUpIHsKICAgICAgdGhpcy5zdHJlYW0ub25SZWNlaXZlUHJvZ3Jlc3NpdmVEYXRhKGNodW5rKTsKICAgICAgdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGggPSBlbmQ7CiAgICB9IGVsc2UgewogICAgICB0aGlzLnN0cmVhbS5vblJlY2VpdmVEYXRhKGJlZ2luLCBjaHVuayk7CiAgICB9CiAgICBpZiAodGhpcy5zdHJlYW0uaXNEYXRhTG9hZGVkKSB7CiAgICAgIHRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucmVzb2x2ZSh0aGlzLnN0cmVhbSk7CiAgICB9CiAgICBjb25zdCBsb2FkZWRSZXF1ZXN0cyA9IFtdOwogICAgZm9yIChsZXQgY3VyQ2h1bmsgPSBiZWdpbkNodW5rOyBjdXJDaHVuayA8IGVuZENodW5rOyArK2N1ckNodW5rKSB7CiAgICAgIGNvbnN0IHJlcXVlc3RJZHMgPSB0aGlzLl9yZXF1ZXN0c0J5Q2h1bmsuZ2V0KGN1ckNodW5rKTsKICAgICAgaWYgKCFyZXF1ZXN0SWRzKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgdGhpcy5fcmVxdWVzdHNCeUNodW5rLmRlbGV0ZShjdXJDaHVuayk7CiAgICAgIGZvciAoY29uc3QgcmVxdWVzdElkIG9mIHJlcXVlc3RJZHMpIHsKICAgICAgICBjb25zdCBjaHVua3NOZWVkZWQgPSB0aGlzLl9jaHVua3NOZWVkZWRCeVJlcXVlc3QuZ2V0KHJlcXVlc3RJZCk7CiAgICAgICAgaWYgKGNodW5rc05lZWRlZC5oYXMoY3VyQ2h1bmspKSB7CiAgICAgICAgICBjaHVua3NOZWVkZWQuZGVsZXRlKGN1ckNodW5rKTsKICAgICAgICB9CiAgICAgICAgaWYgKGNodW5rc05lZWRlZC5zaXplID4gMCkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGxvYWRlZFJlcXVlc3RzLnB1c2gocmVxdWVzdElkKTsKICAgICAgfQogICAgfQogICAgaWYgKCF0aGlzLmRpc2FibGVBdXRvRmV0Y2ggJiYgdGhpcy5fcmVxdWVzdHNCeUNodW5rLnNpemUgPT09IDApIHsKICAgICAgbGV0IG5leHRFbXB0eUNodW5rOwogICAgICBpZiAodGhpcy5zdHJlYW0ubnVtQ2h1bmtzTG9hZGVkID09PSAxKSB7CiAgICAgICAgY29uc3QgbGFzdENodW5rID0gdGhpcy5zdHJlYW0ubnVtQ2h1bmtzIC0gMTsKICAgICAgICBpZiAoIXRoaXMuc3RyZWFtLmhhc0NodW5rKGxhc3RDaHVuaykpIHsKICAgICAgICAgIG5leHRFbXB0eUNodW5rID0gbGFzdENodW5rOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBuZXh0RW1wdHlDaHVuayA9IHRoaXMuc3RyZWFtLm5leHRFbXB0eUNodW5rKGVuZENodW5rKTsKICAgICAgfQogICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihuZXh0RW1wdHlDaHVuaykpIHsKICAgICAgICB0aGlzLl9yZXF1ZXN0Q2h1bmtzKFtuZXh0RW1wdHlDaHVua10pOwogICAgICB9CiAgICB9CiAgICBmb3IgKGNvbnN0IHJlcXVlc3RJZCBvZiBsb2FkZWRSZXF1ZXN0cykgewogICAgICBjb25zdCBjYXBhYmlsaXR5ID0gdGhpcy5fcHJvbWlzZXNCeVJlcXVlc3QuZ2V0KHJlcXVlc3RJZCk7CiAgICAgIHRoaXMuX3Byb21pc2VzQnlSZXF1ZXN0LmRlbGV0ZShyZXF1ZXN0SWQpOwogICAgICBjYXBhYmlsaXR5LnJlc29sdmUoKTsKICAgIH0KICAgIHRoaXMubXNnSGFuZGxlci5zZW5kKCJEb2NQcm9ncmVzcyIsIHsKICAgICAgbG9hZGVkOiB0aGlzLnN0cmVhbS5udW1DaHVua3NMb2FkZWQgKiB0aGlzLmNodW5rU2l6ZSwKICAgICAgdG90YWw6IHRoaXMubGVuZ3RoCiAgICB9KTsKICB9CiAgb25FcnJvcihlcnIpIHsKICAgIHRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucmVqZWN0KGVycik7CiAgfQogIGdldEJlZ2luQ2h1bmsoYmVnaW4pIHsKICAgIHJldHVybiBNYXRoLmZsb29yKGJlZ2luIC8gdGhpcy5jaHVua1NpemUpOwogIH0KICBnZXRFbmRDaHVuayhlbmQpIHsKICAgIHJldHVybiBNYXRoLmZsb29yKChlbmQgLSAxKSAvIHRoaXMuY2h1bmtTaXplKSArIDE7CiAgfQogIGFib3J0KHJlYXNvbikgewogICAgdGhpcy5hYm9ydGVkID0gdHJ1ZTsKICAgIHRoaXMucGRmTmV0d29ya1N0cmVhbT8uY2FuY2VsQWxsUmVxdWVzdHMocmVhc29uKTsKICAgIGZvciAoY29uc3QgY2FwYWJpbGl0eSBvZiB0aGlzLl9wcm9taXNlc0J5UmVxdWVzdC52YWx1ZXMoKSkgewogICAgICBjYXBhYmlsaXR5LnJlamVjdChyZWFzb24pOwogICAgfQogIH0KfQoKOy8vIC4vc3JjL3NoYXJlZC9pbWFnZV91dGlscy5qcwoKZnVuY3Rpb24gY29udmVydFRvUkdCQShwYXJhbXMpIHsKICBzd2l0Y2ggKHBhcmFtcy5raW5kKSB7CiAgICBjYXNlIEltYWdlS2luZC5HUkFZU0NBTEVfMUJQUDoKICAgICAgcmV0dXJuIGNvbnZlcnRCbGFja0FuZFdoaXRlVG9SR0JBKHBhcmFtcyk7CiAgICBjYXNlIEltYWdlS2luZC5SR0JfMjRCUFA6CiAgICAgIHJldHVybiBjb252ZXJ0UkdCVG9SR0JBKHBhcmFtcyk7CiAgfQogIHJldHVybiBudWxsOwp9CmZ1bmN0aW9uIGNvbnZlcnRCbGFja0FuZFdoaXRlVG9SR0JBKHsKICBzcmMsCiAgc3JjUG9zID0gMCwKICBkZXN0LAogIHdpZHRoLAogIGhlaWdodCwKICBub25CbGFja0NvbG9yID0gMHhmZmZmZmZmZiwKICBpbnZlcnNlRGVjb2RlID0gZmFsc2UKfSkgewogIGNvbnN0IGJsYWNrID0gRmVhdHVyZVRlc3QuaXNMaXR0bGVFbmRpYW4gPyAweGZmMDAwMDAwIDogMHgwMDAwMDBmZjsKICBjb25zdCBbemVyb01hcHBpbmcsIG9uZU1hcHBpbmddID0gaW52ZXJzZURlY29kZSA/IFtub25CbGFja0NvbG9yLCBibGFja10gOiBbYmxhY2ssIG5vbkJsYWNrQ29sb3JdOwogIGNvbnN0IHdpZHRoSW5Tb3VyY2UgPSB3aWR0aCA+PiAzOwogIGNvbnN0IHdpZHRoUmVtYWluZGVyID0gd2lkdGggJiA3OwogIGNvbnN0IHNyY0xlbmd0aCA9IHNyYy5sZW5ndGg7CiAgZGVzdCA9IG5ldyBVaW50MzJBcnJheShkZXN0LmJ1ZmZlcik7CiAgbGV0IGRlc3RQb3MgPSAwOwogIGZvciAobGV0IGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsKICAgIGZvciAoY29uc3QgbWF4ID0gc3JjUG9zICsgd2lkdGhJblNvdXJjZTsgc3JjUG9zIDwgbWF4OyBzcmNQb3MrKykgewogICAgICBjb25zdCBlbGVtID0gc3JjUG9zIDwgc3JjTGVuZ3RoID8gc3JjW3NyY1Bvc10gOiAyNTU7CiAgICAgIGRlc3RbZGVzdFBvcysrXSA9IGVsZW0gJiAwYjEwMDAwMDAwID8gb25lTWFwcGluZyA6IHplcm9NYXBwaW5nOwogICAgICBkZXN0W2Rlc3RQb3MrK10gPSBlbGVtICYgMGIxMDAwMDAwID8gb25lTWFwcGluZyA6IHplcm9NYXBwaW5nOwogICAgICBkZXN0W2Rlc3RQb3MrK10gPSBlbGVtICYgMGIxMDAwMDAgPyBvbmVNYXBwaW5nIDogemVyb01hcHBpbmc7CiAgICAgIGRlc3RbZGVzdFBvcysrXSA9IGVsZW0gJiAwYjEwMDAwID8gb25lTWFwcGluZyA6IHplcm9NYXBwaW5nOwogICAgICBkZXN0W2Rlc3RQb3MrK10gPSBlbGVtICYgMGIxMDAwID8gb25lTWFwcGluZyA6IHplcm9NYXBwaW5nOwogICAgICBkZXN0W2Rlc3RQb3MrK10gPSBlbGVtICYgMGIxMDAgPyBvbmVNYXBwaW5nIDogemVyb01hcHBpbmc7CiAgICAgIGRlc3RbZGVzdFBvcysrXSA9IGVsZW0gJiAwYjEwID8gb25lTWFwcGluZyA6IHplcm9NYXBwaW5nOwogICAgICBkZXN0W2Rlc3RQb3MrK10gPSBlbGVtICYgMGIxID8gb25lTWFwcGluZyA6IHplcm9NYXBwaW5nOwogICAgfQogICAgaWYgKHdpZHRoUmVtYWluZGVyID09PSAwKSB7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgY29uc3QgZWxlbSA9IHNyY1BvcyA8IHNyY0xlbmd0aCA/IHNyY1tzcmNQb3MrK10gOiAyNTU7CiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHdpZHRoUmVtYWluZGVyOyBqKyspIHsKICAgICAgZGVzdFtkZXN0UG9zKytdID0gZWxlbSAmIDEgPDwgNyAtIGogPyBvbmVNYXBwaW5nIDogemVyb01hcHBpbmc7CiAgICB9CiAgfQogIHJldHVybiB7CiAgICBzcmNQb3MsCiAgICBkZXN0UG9zCiAgfTsKfQpmdW5jdGlvbiBjb252ZXJ0UkdCVG9SR0JBKHsKICBzcmMsCiAgc3JjUG9zID0gMCwKICBkZXN0LAogIGRlc3RQb3MgPSAwLAogIHdpZHRoLAogIGhlaWdodAp9KSB7CiAgbGV0IGkgPSAwOwogIGNvbnN0IGxlbiA9IHdpZHRoICogaGVpZ2h0ICogMzsKICBjb25zdCBsZW4zMiA9IGxlbiA+PiAyOwogIGNvbnN0IHNyYzMyID0gbmV3IFVpbnQzMkFycmF5KHNyYy5idWZmZXIsIHNyY1BvcywgbGVuMzIpOwogIGlmIChGZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbikgewogICAgZm9yICg7IGkgPCBsZW4zMiAtIDI7IGkgKz0gMywgZGVzdFBvcyArPSA0KSB7CiAgICAgIGNvbnN0IHMxID0gc3JjMzJbaV07CiAgICAgIGNvbnN0IHMyID0gc3JjMzJbaSArIDFdOwogICAgICBjb25zdCBzMyA9IHNyYzMyW2kgKyAyXTsKICAgICAgZGVzdFtkZXN0UG9zXSA9IHMxIHwgMHhmZjAwMDAwMDsKICAgICAgZGVzdFtkZXN0UG9zICsgMV0gPSBzMSA+Pj4gMjQgfCBzMiA8PCA4IHwgMHhmZjAwMDAwMDsKICAgICAgZGVzdFtkZXN0UG9zICsgMl0gPSBzMiA+Pj4gMTYgfCBzMyA8PCAxNiB8IDB4ZmYwMDAwMDA7CiAgICAgIGRlc3RbZGVzdFBvcyArIDNdID0gczMgPj4+IDggfCAweGZmMDAwMDAwOwogICAgfQogICAgZm9yIChsZXQgaiA9IGkgKiA0LCBqaiA9IHNyY1BvcyArIGxlbjsgaiA8IGpqOyBqICs9IDMpIHsKICAgICAgZGVzdFtkZXN0UG9zKytdID0gc3JjW2pdIHwgc3JjW2ogKyAxXSA8PCA4IHwgc3JjW2ogKyAyXSA8PCAxNiB8IDB4ZmYwMDAwMDA7CiAgICB9CiAgfSBlbHNlIHsKICAgIGZvciAoOyBpIDwgbGVuMzIgLSAyOyBpICs9IDMsIGRlc3RQb3MgKz0gNCkgewogICAgICBjb25zdCBzMSA9IHNyYzMyW2ldOwogICAgICBjb25zdCBzMiA9IHNyYzMyW2kgKyAxXTsKICAgICAgY29uc3QgczMgPSBzcmMzMltpICsgMl07CiAgICAgIGRlc3RbZGVzdFBvc10gPSBzMSB8IDB4ZmY7CiAgICAgIGRlc3RbZGVzdFBvcyArIDFdID0gczEgPDwgMjQgfCBzMiA+Pj4gOCB8IDB4ZmY7CiAgICAgIGRlc3RbZGVzdFBvcyArIDJdID0gczIgPDwgMTYgfCBzMyA+Pj4gMTYgfCAweGZmOwogICAgICBkZXN0W2Rlc3RQb3MgKyAzXSA9IHMzIDw8IDggfCAweGZmOwogICAgfQogICAgZm9yIChsZXQgaiA9IGkgKiA0LCBqaiA9IHNyY1BvcyArIGxlbjsgaiA8IGpqOyBqICs9IDMpIHsKICAgICAgZGVzdFtkZXN0UG9zKytdID0gc3JjW2pdIDw8IDI0IHwgc3JjW2ogKyAxXSA8PCAxNiB8IHNyY1tqICsgMl0gPDwgOCB8IDB4ZmY7CiAgICB9CiAgfQogIHJldHVybiB7CiAgICBzcmNQb3M6IHNyY1BvcyArIGxlbiwKICAgIGRlc3RQb3MKICB9Owp9CmZ1bmN0aW9uIGdyYXlUb1JHQkEoc3JjLCBkZXN0KSB7CiAgaWYgKEZlYXR1cmVUZXN0LmlzTGl0dGxlRW5kaWFuKSB7CiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBzcmMubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICBkZXN0W2ldID0gc3JjW2ldICogMHgxMDEwMSB8IDB4ZmYwMDAwMDA7CiAgICB9CiAgfSBlbHNlIHsKICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHNyYy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CiAgICAgIGRlc3RbaV0gPSBzcmNbaV0gKiAweDEwMTAxMDAgfCAweDAwMDAwMGZmOwogICAgfQogIH0KfQoKOy8vIC4vc3JjL2NvcmUvaW1hZ2VfcmVzaXplci5qcwoKCgpjb25zdCBNSU5fSU1BR0VfRElNID0gMjA0ODsKY29uc3QgTUFYX0lNQUdFX0RJTSA9IDY1NTM3Owpjb25zdCBNQVhfRVJST1IgPSAxMjg7CmNsYXNzIEltYWdlUmVzaXplciB7CiAgc3RhdGljICNnb29kU3F1YXJlTGVuZ3RoID0gTUlOX0lNQUdFX0RJTTsKICBzdGF0aWMgI2lzSW1hZ2VEZWNvZGVyU3VwcG9ydGVkID0gRmVhdHVyZVRlc3QuaXNJbWFnZURlY29kZXJTdXBwb3J0ZWQ7CiAgY29uc3RydWN0b3IoaW1nRGF0YSwgaXNNYXNrKSB7CiAgICB0aGlzLl9pbWdEYXRhID0gaW1nRGF0YTsKICAgIHRoaXMuX2lzTWFzayA9IGlzTWFzazsKICB9CiAgc3RhdGljIGdldCBjYW5Vc2VJbWFnZURlY29kZXIoKSB7CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJjYW5Vc2VJbWFnZURlY29kZXIiLCB0aGlzLiNpc0ltYWdlRGVjb2RlclN1cHBvcnRlZCA/IEltYWdlRGVjb2Rlci5pc1R5cGVTdXBwb3J0ZWQoImltYWdlL2JtcCIpIDogUHJvbWlzZS5yZXNvbHZlKGZhbHNlKSk7CiAgfQogIHN0YXRpYyBuZWVkc1RvQmVSZXNpemVkKHdpZHRoLCBoZWlnaHQpIHsKICAgIGlmICh3aWR0aCA8PSB0aGlzLiNnb29kU3F1YXJlTGVuZ3RoICYmIGhlaWdodCA8PSB0aGlzLiNnb29kU3F1YXJlTGVuZ3RoKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGNvbnN0IHsKICAgICAgTUFYX0RJTQogICAgfSA9IHRoaXM7CiAgICBpZiAod2lkdGggPiBNQVhfRElNIHx8IGhlaWdodCA+IE1BWF9ESU0pIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBjb25zdCBhcmVhID0gd2lkdGggKiBoZWlnaHQ7CiAgICBpZiAodGhpcy5faGFzTWF4QXJlYSkgewogICAgICByZXR1cm4gYXJlYSA+IHRoaXMuTUFYX0FSRUE7CiAgICB9CiAgICBpZiAoYXJlYSA8IHRoaXMuI2dvb2RTcXVhcmVMZW5ndGggKiogMikgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAodGhpcy5fYXJlR29vZERpbXMod2lkdGgsIGhlaWdodCkpIHsKICAgICAgdGhpcy4jZ29vZFNxdWFyZUxlbmd0aCA9IE1hdGgubWF4KHRoaXMuI2dvb2RTcXVhcmVMZW5ndGgsIE1hdGguZmxvb3IoTWF0aC5zcXJ0KHdpZHRoICogaGVpZ2h0KSkpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICB0aGlzLiNnb29kU3F1YXJlTGVuZ3RoID0gdGhpcy5fZ3Vlc3NNYXgodGhpcy4jZ29vZFNxdWFyZUxlbmd0aCwgTUFYX0RJTSwgTUFYX0VSUk9SLCAwKTsKICAgIGNvbnN0IG1heEFyZWEgPSB0aGlzLk1BWF9BUkVBID0gdGhpcy4jZ29vZFNxdWFyZUxlbmd0aCAqKiAyOwogICAgcmV0dXJuIGFyZWEgPiBtYXhBcmVhOwogIH0KICBzdGF0aWMgZ2V0IE1BWF9ESU0oKSB7CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJNQVhfRElNIiwgdGhpcy5fZ3Vlc3NNYXgoTUlOX0lNQUdFX0RJTSwgTUFYX0lNQUdFX0RJTSwgMCwgMSkpOwogIH0KICBzdGF0aWMgZ2V0IE1BWF9BUkVBKCkgewogICAgdGhpcy5faGFzTWF4QXJlYSA9IHRydWU7CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJNQVhfQVJFQSIsIHRoaXMuX2d1ZXNzTWF4KHRoaXMuI2dvb2RTcXVhcmVMZW5ndGgsIHRoaXMuTUFYX0RJTSwgTUFYX0VSUk9SLCAwKSAqKiAyKTsKICB9CiAgc3RhdGljIHNldCBNQVhfQVJFQShhcmVhKSB7CiAgICBpZiAoYXJlYSA+PSAwKSB7CiAgICAgIHRoaXMuX2hhc01heEFyZWEgPSB0cnVlOwogICAgICBzaGFkb3codGhpcywgIk1BWF9BUkVBIiwgYXJlYSk7CiAgICB9CiAgfQogIHN0YXRpYyBzZXRPcHRpb25zKHsKICAgIGNhbnZhc01heEFyZWFJbkJ5dGVzID0gLTEsCiAgICBpc0ltYWdlRGVjb2RlclN1cHBvcnRlZCA9IGZhbHNlCiAgfSkgewogICAgaWYgKCF0aGlzLl9oYXNNYXhBcmVhKSB7CiAgICAgIHRoaXMuTUFYX0FSRUEgPSBjYW52YXNNYXhBcmVhSW5CeXRlcyA+PiAyOwogICAgfQogICAgdGhpcy4jaXNJbWFnZURlY29kZXJTdXBwb3J0ZWQgPSBpc0ltYWdlRGVjb2RlclN1cHBvcnRlZDsKICB9CiAgc3RhdGljIF9hcmVHb29kRGltcyh3aWR0aCwgaGVpZ2h0KSB7CiAgICB0cnkgewogICAgICBjb25zdCBjYW52YXMgPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKHdpZHRoLCBoZWlnaHQpOwogICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIDEsIDEpOwogICAgICBjb25zdCBvcGFjaXR5ID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCAxLCAxKS5kYXRhWzNdOwogICAgICBjYW52YXMud2lkdGggPSBjYW52YXMuaGVpZ2h0ID0gMTsKICAgICAgcmV0dXJuIG9wYWNpdHkgIT09IDA7CiAgICB9IGNhdGNoIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KICBzdGF0aWMgX2d1ZXNzTWF4KHN0YXJ0LCBlbmQsIHRvbGVyYW5jZSwgZGVmYXVsdEhlaWdodCkgewogICAgd2hpbGUgKHN0YXJ0ICsgdG9sZXJhbmNlICsgMSA8IGVuZCkgewogICAgICBjb25zdCBtaWRkbGUgPSBNYXRoLmZsb29yKChzdGFydCArIGVuZCkgLyAyKTsKICAgICAgY29uc3QgaGVpZ2h0ID0gZGVmYXVsdEhlaWdodCB8fCBtaWRkbGU7CiAgICAgIGlmICh0aGlzLl9hcmVHb29kRGltcyhtaWRkbGUsIGhlaWdodCkpIHsKICAgICAgICBzdGFydCA9IG1pZGRsZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBlbmQgPSBtaWRkbGU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBzdGFydDsKICB9CiAgc3RhdGljIGFzeW5jIGNyZWF0ZUltYWdlKGltZ0RhdGEsIGlzTWFzayA9IGZhbHNlKSB7CiAgICByZXR1cm4gbmV3IEltYWdlUmVzaXplcihpbWdEYXRhLCBpc01hc2spLl9jcmVhdGVJbWFnZSgpOwogIH0KICBhc3luYyBfY3JlYXRlSW1hZ2UoKSB7CiAgICBjb25zdCB7CiAgICAgIF9pbWdEYXRhOiBpbWdEYXRhCiAgICB9ID0gdGhpczsKICAgIGNvbnN0IHsKICAgICAgd2lkdGgsCiAgICAgIGhlaWdodAogICAgfSA9IGltZ0RhdGE7CiAgICBpZiAod2lkdGggKiBoZWlnaHQgKiA0ID4gTUFYX0lOVF8zMikgewogICAgICBjb25zdCByZXN1bHQgPSB0aGlzLiNyZXNjYWxlSW1hZ2VEYXRhKCk7CiAgICAgIGlmIChyZXN1bHQpIHsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICB9CiAgICBjb25zdCBkYXRhID0gdGhpcy5fZW5jb2RlQk1QKCk7CiAgICBsZXQgZGVjb2RlciwgaW1hZ2VQcm9taXNlOwogICAgaWYgKGF3YWl0IEltYWdlUmVzaXplci5jYW5Vc2VJbWFnZURlY29kZXIpIHsKICAgICAgZGVjb2RlciA9IG5ldyBJbWFnZURlY29kZXIoewogICAgICAgIGRhdGEsCiAgICAgICAgdHlwZTogImltYWdlL2JtcCIsCiAgICAgICAgcHJlZmVyQW5pbWF0aW9uOiBmYWxzZSwKICAgICAgICB0cmFuc2ZlcjogW2RhdGEuYnVmZmVyXQogICAgICB9KTsKICAgICAgaW1hZ2VQcm9taXNlID0gZGVjb2Rlci5kZWNvZGUoKS5jYXRjaChyZWFzb24gPT4gewogICAgICAgIHdhcm4oYEJNUCBpbWFnZSBkZWNvZGluZyBmYWlsZWQ6ICR7cmVhc29ufWApOwogICAgICAgIHJldHVybiBjcmVhdGVJbWFnZUJpdG1hcChuZXcgQmxvYihbdGhpcy5fZW5jb2RlQk1QKCkuYnVmZmVyXSwgewogICAgICAgICAgdHlwZTogImltYWdlL2JtcCIKICAgICAgICB9KSk7CiAgICAgIH0pLmZpbmFsbHkoKCkgPT4gewogICAgICAgIGRlY29kZXIuY2xvc2UoKTsKICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICBpbWFnZVByb21pc2UgPSBjcmVhdGVJbWFnZUJpdG1hcChuZXcgQmxvYihbZGF0YS5idWZmZXJdLCB7CiAgICAgICAgdHlwZTogImltYWdlL2JtcCIKICAgICAgfSkpOwogICAgfQogICAgY29uc3QgewogICAgICBNQVhfQVJFQSwKICAgICAgTUFYX0RJTQogICAgfSA9IEltYWdlUmVzaXplcjsKICAgIGNvbnN0IG1pbkZhY3RvciA9IE1hdGgubWF4KHdpZHRoIC8gTUFYX0RJTSwgaGVpZ2h0IC8gTUFYX0RJTSwgTWF0aC5zcXJ0KHdpZHRoICogaGVpZ2h0IC8gTUFYX0FSRUEpKTsKICAgIGNvbnN0IGZpcnN0RmFjdG9yID0gTWF0aC5tYXgobWluRmFjdG9yLCAyKTsKICAgIGNvbnN0IGZhY3RvciA9IE1hdGgucm91bmQoMTAgKiAobWluRmFjdG9yICsgMS4yNSkpIC8gMTAgLyBmaXJzdEZhY3RvcjsKICAgIGNvbnN0IE4gPSBNYXRoLmZsb29yKE1hdGgubG9nMihmYWN0b3IpKTsKICAgIGNvbnN0IHN0ZXBzID0gbmV3IEFycmF5KE4gKyAyKS5maWxsKDIpOwogICAgc3RlcHNbMF0gPSBmaXJzdEZhY3RvcjsKICAgIHN0ZXBzLnNwbGljZSgtMSwgMSwgZmFjdG9yIC8gKDEgPDwgTikpOwogICAgbGV0IG5ld1dpZHRoID0gd2lkdGg7CiAgICBsZXQgbmV3SGVpZ2h0ID0gaGVpZ2h0OwogICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaW1hZ2VQcm9taXNlOwogICAgbGV0IGJpdG1hcCA9IHJlc3VsdC5pbWFnZSB8fCByZXN1bHQ7CiAgICBmb3IgKGNvbnN0IHN0ZXAgb2Ygc3RlcHMpIHsKICAgICAgY29uc3QgcHJldldpZHRoID0gbmV3V2lkdGg7CiAgICAgIGNvbnN0IHByZXZIZWlnaHQgPSBuZXdIZWlnaHQ7CiAgICAgIG5ld1dpZHRoID0gTWF0aC5mbG9vcihuZXdXaWR0aCAvIHN0ZXApIC0gMTsKICAgICAgbmV3SGVpZ2h0ID0gTWF0aC5mbG9vcihuZXdIZWlnaHQgLyBzdGVwKSAtIDE7CiAgICAgIGNvbnN0IGNhbnZhcyA9IG5ldyBPZmZzY3JlZW5DYW52YXMobmV3V2lkdGgsIG5ld0hlaWdodCk7CiAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwogICAgICBjdHguZHJhd0ltYWdlKGJpdG1hcCwgMCwgMCwgcHJldldpZHRoLCBwcmV2SGVpZ2h0LCAwLCAwLCBuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKICAgICAgYml0bWFwLmNsb3NlKCk7CiAgICAgIGJpdG1hcCA9IGNhbnZhcy50cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKTsKICAgIH0KICAgIGltZ0RhdGEuZGF0YSA9IG51bGw7CiAgICBpbWdEYXRhLmJpdG1hcCA9IGJpdG1hcDsKICAgIGltZ0RhdGEud2lkdGggPSBuZXdXaWR0aDsKICAgIGltZ0RhdGEuaGVpZ2h0ID0gbmV3SGVpZ2h0OwogICAgcmV0dXJuIGltZ0RhdGE7CiAgfQogICNyZXNjYWxlSW1hZ2VEYXRhKCkgewogICAgY29uc3QgewogICAgICBfaW1nRGF0YTogaW1nRGF0YQogICAgfSA9IHRoaXM7CiAgICBjb25zdCB7CiAgICAgIGRhdGEsCiAgICAgIHdpZHRoLAogICAgICBoZWlnaHQsCiAgICAgIGtpbmQKICAgIH0gPSBpbWdEYXRhOwogICAgY29uc3QgcmdiYVNpemUgPSB3aWR0aCAqIGhlaWdodCAqIDQ7CiAgICBjb25zdCBLID0gTWF0aC5jZWlsKE1hdGgubG9nMihyZ2JhU2l6ZSAvIE1BWF9JTlRfMzIpKTsKICAgIGNvbnN0IG5ld1dpZHRoID0gd2lkdGggPj4gSzsKICAgIGNvbnN0IG5ld0hlaWdodCA9IGhlaWdodCA+PiBLOwogICAgbGV0IHJnYmFEYXRhOwogICAgbGV0IG1heEhlaWdodCA9IGhlaWdodDsKICAgIHRyeSB7CiAgICAgIHJnYmFEYXRhID0gbmV3IFVpbnQ4QXJyYXkocmdiYVNpemUpOwogICAgfSBjYXRjaCB7CiAgICAgIGxldCBuID0gTWF0aC5mbG9vcihNYXRoLmxvZzIocmdiYVNpemUgKyAxKSk7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHJnYmFEYXRhID0gbmV3IFVpbnQ4QXJyYXkoMiAqKiBuIC0gMSk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgIG4gLT0gMTsKICAgICAgICB9CiAgICAgIH0KICAgICAgbWF4SGVpZ2h0ID0gTWF0aC5mbG9vcigoMiAqKiBuIC0gMSkgLyAod2lkdGggKiA0KSk7CiAgICAgIGNvbnN0IG5ld1NpemUgPSB3aWR0aCAqIG1heEhlaWdodCAqIDQ7CiAgICAgIGlmIChuZXdTaXplIDwgcmdiYURhdGEubGVuZ3RoKSB7CiAgICAgICAgcmdiYURhdGEgPSBuZXcgVWludDhBcnJheShuZXdTaXplKTsKICAgICAgfQogICAgfQogICAgY29uc3Qgc3JjMzIgPSBuZXcgVWludDMyQXJyYXkocmdiYURhdGEuYnVmZmVyKTsKICAgIGNvbnN0IGRlc3QzMiA9IG5ldyBVaW50MzJBcnJheShuZXdXaWR0aCAqIG5ld0hlaWdodCk7CiAgICBsZXQgc3JjUG9zID0gMDsKICAgIGxldCBuZXdJbmRleCA9IDA7CiAgICBjb25zdCBzdGVwID0gTWF0aC5jZWlsKGhlaWdodCAvIG1heEhlaWdodCk7CiAgICBjb25zdCByZW1haW5kZXIgPSBoZWlnaHQgJSBtYXhIZWlnaHQgPT09IDAgPyBoZWlnaHQgOiBoZWlnaHQgJSBtYXhIZWlnaHQ7CiAgICBmb3IgKGxldCBrID0gMDsgayA8IHN0ZXA7IGsrKykgewogICAgICBjb25zdCBoID0gayA8IHN0ZXAgLSAxID8gbWF4SGVpZ2h0IDogcmVtYWluZGVyOwogICAgICAoewogICAgICAgIHNyY1BvcwogICAgICB9ID0gY29udmVydFRvUkdCQSh7CiAgICAgICAga2luZCwKICAgICAgICBzcmM6IGRhdGEsCiAgICAgICAgZGVzdDogc3JjMzIsCiAgICAgICAgd2lkdGgsCiAgICAgICAgaGVpZ2h0OiBoLAogICAgICAgIGludmVyc2VEZWNvZGU6IHRoaXMuX2lzTWFzaywKICAgICAgICBzcmNQb3MKICAgICAgfSkpOwogICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBoID4+IEs7IGkgPCBpaTsgaSsrKSB7CiAgICAgICAgY29uc3QgYnVmID0gc3JjMzIuc3ViYXJyYXkoKGkgPDwgSykgKiB3aWR0aCk7CiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBuZXdXaWR0aDsgaisrKSB7CiAgICAgICAgICBkZXN0MzJbbmV3SW5kZXgrK10gPSBidWZbaiA8PCBLXTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChJbWFnZVJlc2l6ZXIubmVlZHNUb0JlUmVzaXplZChuZXdXaWR0aCwgbmV3SGVpZ2h0KSkgewogICAgICBpbWdEYXRhLmRhdGEgPSBkZXN0MzI7CiAgICAgIGltZ0RhdGEud2lkdGggPSBuZXdXaWR0aDsKICAgICAgaW1nRGF0YS5oZWlnaHQgPSBuZXdIZWlnaHQ7CiAgICAgIGltZ0RhdGEua2luZCA9IEltYWdlS2luZC5SR0JBXzMyQlBQOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IGNhbnZhcyA9IG5ldyBPZmZzY3JlZW5DYW52YXMobmV3V2lkdGgsIG5ld0hlaWdodCk7CiAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiLCB7CiAgICAgIHdpbGxSZWFkRnJlcXVlbnRseTogdHJ1ZQogICAgfSk7CiAgICBjdHgucHV0SW1hZ2VEYXRhKG5ldyBJbWFnZURhdGEobmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGRlc3QzMi5idWZmZXIpLCBuZXdXaWR0aCwgbmV3SGVpZ2h0KSwgMCwgMCk7CiAgICBpbWdEYXRhLmRhdGEgPSBudWxsOwogICAgaW1nRGF0YS5iaXRtYXAgPSBjYW52YXMudHJhbnNmZXJUb0ltYWdlQml0bWFwKCk7CiAgICBpbWdEYXRhLndpZHRoID0gbmV3V2lkdGg7CiAgICBpbWdEYXRhLmhlaWdodCA9IG5ld0hlaWdodDsKICAgIHJldHVybiBpbWdEYXRhOwogIH0KICBfZW5jb2RlQk1QKCkgewogICAgY29uc3QgewogICAgICB3aWR0aCwKICAgICAgaGVpZ2h0LAogICAgICBraW5kCiAgICB9ID0gdGhpcy5faW1nRGF0YTsKICAgIGxldCBkYXRhID0gdGhpcy5faW1nRGF0YS5kYXRhOwogICAgbGV0IGJpdFBlclBpeGVsOwogICAgbGV0IGNvbG9yVGFibGUgPSBuZXcgVWludDhBcnJheSgwKTsKICAgIGxldCBtYXNrVGFibGUgPSBjb2xvclRhYmxlOwogICAgbGV0IGNvbXByZXNzaW9uID0gMDsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIEltYWdlS2luZC5HUkFZU0NBTEVfMUJQUDoKICAgICAgICB7CiAgICAgICAgICBiaXRQZXJQaXhlbCA9IDE7CiAgICAgICAgICBjb2xvclRhYmxlID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5faXNNYXNrID8gWzI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgMCwgMCwgMF0gOiBbMCwgMCwgMCwgMCwgMjU1LCAyNTUsIDI1NSwgMjU1XSk7CiAgICAgICAgICBjb25zdCByb3dMZW4gPSB3aWR0aCArIDcgPj4gMzsKICAgICAgICAgIGNvbnN0IHJvd1NpemUgPSByb3dMZW4gKyAzICYgLTQ7CiAgICAgICAgICBpZiAocm93TGVuICE9PSByb3dTaXplKSB7CiAgICAgICAgICAgIGNvbnN0IG5ld0RhdGEgPSBuZXcgVWludDhBcnJheShyb3dTaXplICogaGVpZ2h0KTsKICAgICAgICAgICAgbGV0IGsgPSAwOwogICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBoZWlnaHQgKiByb3dMZW47IGkgPCBpaTsgaSArPSByb3dMZW4sIGsgKz0gcm93U2l6ZSkgewogICAgICAgICAgICAgIG5ld0RhdGEuc2V0KGRhdGEuc3ViYXJyYXkoaSwgaSArIHJvd0xlbiksIGspOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRhdGEgPSBuZXdEYXRhOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICBjYXNlIEltYWdlS2luZC5SR0JfMjRCUFA6CiAgICAgICAgewogICAgICAgICAgYml0UGVyUGl4ZWwgPSAyNDsKICAgICAgICAgIGlmICh3aWR0aCAmIDMpIHsKICAgICAgICAgICAgY29uc3Qgcm93TGVuID0gMyAqIHdpZHRoOwogICAgICAgICAgICBjb25zdCByb3dTaXplID0gcm93TGVuICsgMyAmIC00OwogICAgICAgICAgICBjb25zdCBleHRyYUxlbiA9IHJvd1NpemUgLSByb3dMZW47CiAgICAgICAgICAgIGNvbnN0IG5ld0RhdGEgPSBuZXcgVWludDhBcnJheShyb3dTaXplICogaGVpZ2h0KTsKICAgICAgICAgICAgbGV0IGsgPSAwOwogICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBoZWlnaHQgKiByb3dMZW47IGkgPCBpaTsgaSArPSByb3dMZW4pIHsKICAgICAgICAgICAgICBjb25zdCByb3cgPSBkYXRhLnN1YmFycmF5KGksIGkgKyByb3dMZW4pOwogICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcm93TGVuOyBqICs9IDMpIHsKICAgICAgICAgICAgICAgIG5ld0RhdGFbaysrXSA9IHJvd1tqICsgMl07CiAgICAgICAgICAgICAgICBuZXdEYXRhW2srK10gPSByb3dbaiArIDFdOwogICAgICAgICAgICAgICAgbmV3RGF0YVtrKytdID0gcm93W2pdOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBrICs9IGV4dHJhTGVuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRhdGEgPSBuZXdEYXRhOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gZGF0YS5sZW5ndGg7IGkgPCBpaTsgaSArPSAzKSB7CiAgICAgICAgICAgICAgY29uc3QgdG1wID0gZGF0YVtpXTsKICAgICAgICAgICAgICBkYXRhW2ldID0gZGF0YVtpICsgMl07CiAgICAgICAgICAgICAgZGF0YVtpICsgMl0gPSB0bXA7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgY2FzZSBJbWFnZUtpbmQuUkdCQV8zMkJQUDoKICAgICAgICBiaXRQZXJQaXhlbCA9IDMyOwogICAgICAgIGNvbXByZXNzaW9uID0gMzsKICAgICAgICBtYXNrVGFibGUgPSBuZXcgVWludDhBcnJheSg0ICsgNCArIDQgKyA0ICsgNTIpOwogICAgICAgIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcobWFza1RhYmxlLmJ1ZmZlcik7CiAgICAgICAgaWYgKEZlYXR1cmVUZXN0LmlzTGl0dGxlRW5kaWFuKSB7CiAgICAgICAgICB2aWV3LnNldFVpbnQzMigwLCAweDAwMDAwMGZmLCB0cnVlKTsKICAgICAgICAgIHZpZXcuc2V0VWludDMyKDQsIDB4MDAwMGZmMDAsIHRydWUpOwogICAgICAgICAgdmlldy5zZXRVaW50MzIoOCwgMHgwMGZmMDAwMCwgdHJ1ZSk7CiAgICAgICAgICB2aWV3LnNldFVpbnQzMigxMiwgMHhmZjAwMDAwMCwgdHJ1ZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHZpZXcuc2V0VWludDMyKDAsIDB4ZmYwMDAwMDAsIHRydWUpOwogICAgICAgICAgdmlldy5zZXRVaW50MzIoNCwgMHgwMGZmMDAwMCwgdHJ1ZSk7CiAgICAgICAgICB2aWV3LnNldFVpbnQzMig4LCAweDAwMDBmZjAwLCB0cnVlKTsKICAgICAgICAgIHZpZXcuc2V0VWludDMyKDEyLCAweDAwMDAwMGZmLCB0cnVlKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdCIpOwogICAgfQogICAgbGV0IGkgPSAwOwogICAgY29uc3QgaGVhZGVyTGVuZ3RoID0gNDAgKyBtYXNrVGFibGUubGVuZ3RoOwogICAgY29uc3QgZmlsZUxlbmd0aCA9IDE0ICsgaGVhZGVyTGVuZ3RoICsgY29sb3JUYWJsZS5sZW5ndGggKyBkYXRhLmxlbmd0aDsKICAgIGNvbnN0IGJtcERhdGEgPSBuZXcgVWludDhBcnJheShmaWxlTGVuZ3RoKTsKICAgIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcoYm1wRGF0YS5idWZmZXIpOwogICAgdmlldy5zZXRVaW50MTYoaSwgMHg0ZDQyLCB0cnVlKTsKICAgIGkgKz0gMjsKICAgIHZpZXcuc2V0VWludDMyKGksIGZpbGVMZW5ndGgsIHRydWUpOwogICAgaSArPSA0OwogICAgdmlldy5zZXRVaW50MzIoaSwgMCwgdHJ1ZSk7CiAgICBpICs9IDQ7CiAgICB2aWV3LnNldFVpbnQzMihpLCAxNCArIGhlYWRlckxlbmd0aCArIGNvbG9yVGFibGUubGVuZ3RoLCB0cnVlKTsKICAgIGkgKz0gNDsKICAgIHZpZXcuc2V0VWludDMyKGksIGhlYWRlckxlbmd0aCwgdHJ1ZSk7CiAgICBpICs9IDQ7CiAgICB2aWV3LnNldEludDMyKGksIHdpZHRoLCB0cnVlKTsKICAgIGkgKz0gNDsKICAgIHZpZXcuc2V0SW50MzIoaSwgLWhlaWdodCwgdHJ1ZSk7CiAgICBpICs9IDQ7CiAgICB2aWV3LnNldFVpbnQxNihpLCAxLCB0cnVlKTsKICAgIGkgKz0gMjsKICAgIHZpZXcuc2V0VWludDE2KGksIGJpdFBlclBpeGVsLCB0cnVlKTsKICAgIGkgKz0gMjsKICAgIHZpZXcuc2V0VWludDMyKGksIGNvbXByZXNzaW9uLCB0cnVlKTsKICAgIGkgKz0gNDsKICAgIHZpZXcuc2V0VWludDMyKGksIDAsIHRydWUpOwogICAgaSArPSA0OwogICAgdmlldy5zZXRJbnQzMihpLCAwLCB0cnVlKTsKICAgIGkgKz0gNDsKICAgIHZpZXcuc2V0SW50MzIoaSwgMCwgdHJ1ZSk7CiAgICBpICs9IDQ7CiAgICB2aWV3LnNldFVpbnQzMihpLCBjb2xvclRhYmxlLmxlbmd0aCAvIDQsIHRydWUpOwogICAgaSArPSA0OwogICAgdmlldy5zZXRVaW50MzIoaSwgMCwgdHJ1ZSk7CiAgICBpICs9IDQ7CiAgICBibXBEYXRhLnNldChtYXNrVGFibGUsIGkpOwogICAgaSArPSBtYXNrVGFibGUubGVuZ3RoOwogICAgYm1wRGF0YS5zZXQoY29sb3JUYWJsZSwgaSk7CiAgICBpICs9IGNvbG9yVGFibGUubGVuZ3RoOwogICAgYm1wRGF0YS5zZXQoZGF0YSwgaSk7CiAgICByZXR1cm4gYm1wRGF0YTsKICB9Cn0KCjsvLyAuL3NyYy9jb3JlL2RlY29kZV9zdHJlYW0uanMKCgpjb25zdCBlbXB0eUJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDApOwpjbGFzcyBEZWNvZGVTdHJlYW0gZXh0ZW5kcyBCYXNlU3RyZWFtIHsKICBjb25zdHJ1Y3RvcihtYXliZU1pbkJ1ZmZlckxlbmd0aCkgewogICAgc3VwZXIoKTsKICAgIHRoaXMuX3Jhd01pbkJ1ZmZlckxlbmd0aCA9IG1heWJlTWluQnVmZmVyTGVuZ3RoIHx8IDA7CiAgICB0aGlzLnBvcyA9IDA7CiAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IDA7CiAgICB0aGlzLmVvZiA9IGZhbHNlOwogICAgdGhpcy5idWZmZXIgPSBlbXB0eUJ1ZmZlcjsKICAgIHRoaXMubWluQnVmZmVyTGVuZ3RoID0gNTEyOwogICAgaWYgKG1heWJlTWluQnVmZmVyTGVuZ3RoKSB7CiAgICAgIHdoaWxlICh0aGlzLm1pbkJ1ZmZlckxlbmd0aCA8IG1heWJlTWluQnVmZmVyTGVuZ3RoKSB7CiAgICAgICAgdGhpcy5taW5CdWZmZXJMZW5ndGggKj0gMjsKICAgICAgfQogICAgfQogIH0KICBnZXQgaXNFbXB0eSgpIHsKICAgIHdoaWxlICghdGhpcy5lb2YgJiYgdGhpcy5idWZmZXJMZW5ndGggPT09IDApIHsKICAgICAgdGhpcy5yZWFkQmxvY2soKTsKICAgIH0KICAgIHJldHVybiB0aGlzLmJ1ZmZlckxlbmd0aCA9PT0gMDsKICB9CiAgZW5zdXJlQnVmZmVyKHJlcXVlc3RlZCkgewogICAgY29uc3QgYnVmZmVyID0gdGhpcy5idWZmZXI7CiAgICBpZiAocmVxdWVzdGVkIDw9IGJ1ZmZlci5ieXRlTGVuZ3RoKSB7CiAgICAgIHJldHVybiBidWZmZXI7CiAgICB9CiAgICBsZXQgc2l6ZSA9IHRoaXMubWluQnVmZmVyTGVuZ3RoOwogICAgd2hpbGUgKHNpemUgPCByZXF1ZXN0ZWQpIHsKICAgICAgc2l6ZSAqPSAyOwogICAgfQogICAgY29uc3QgYnVmZmVyMiA9IG5ldyBVaW50OEFycmF5KHNpemUpOwogICAgYnVmZmVyMi5zZXQoYnVmZmVyKTsKICAgIHJldHVybiB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjI7CiAgfQogIGdldEJ5dGUoKSB7CiAgICBjb25zdCBwb3MgPSB0aGlzLnBvczsKICAgIHdoaWxlICh0aGlzLmJ1ZmZlckxlbmd0aCA8PSBwb3MpIHsKICAgICAgaWYgKHRoaXMuZW9mKSB7CiAgICAgICAgcmV0dXJuIC0xOwogICAgICB9CiAgICAgIHRoaXMucmVhZEJsb2NrKCk7CiAgICB9CiAgICByZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5wb3MrK107CiAgfQogIGdldEJ5dGVzKGxlbmd0aCwgZGVjb2Rlck9wdGlvbnMgPSBudWxsKSB7CiAgICBjb25zdCBwb3MgPSB0aGlzLnBvczsKICAgIGxldCBlbmQ7CiAgICBpZiAobGVuZ3RoKSB7CiAgICAgIHRoaXMuZW5zdXJlQnVmZmVyKHBvcyArIGxlbmd0aCk7CiAgICAgIGVuZCA9IHBvcyArIGxlbmd0aDsKICAgICAgd2hpbGUgKCF0aGlzLmVvZiAmJiB0aGlzLmJ1ZmZlckxlbmd0aCA8IGVuZCkgewogICAgICAgIHRoaXMucmVhZEJsb2NrKGRlY29kZXJPcHRpb25zKTsKICAgICAgfQogICAgICBjb25zdCBidWZFbmQgPSB0aGlzLmJ1ZmZlckxlbmd0aDsKICAgICAgaWYgKGVuZCA+IGJ1ZkVuZCkgewogICAgICAgIGVuZCA9IGJ1ZkVuZDsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgd2hpbGUgKCF0aGlzLmVvZikgewogICAgICAgIHRoaXMucmVhZEJsb2NrKGRlY29kZXJPcHRpb25zKTsKICAgICAgfQogICAgICBlbmQgPSB0aGlzLmJ1ZmZlckxlbmd0aDsKICAgIH0KICAgIHRoaXMucG9zID0gZW5kOwogICAgcmV0dXJuIHRoaXMuYnVmZmVyLnN1YmFycmF5KHBvcywgZW5kKTsKICB9CiAgYXN5bmMgZ2V0SW1hZ2VEYXRhKGxlbmd0aCwgZGVjb2Rlck9wdGlvbnMpIHsKICAgIGlmICghdGhpcy5jYW5Bc3luY0RlY29kZUltYWdlRnJvbUJ1ZmZlcikgewogICAgICBpZiAodGhpcy5pc0FzeW5jRGVjb2RlcikgewogICAgICAgIHJldHVybiB0aGlzLmRlY29kZUltYWdlKG51bGwsIGRlY29kZXJPcHRpb25zKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5nZXRCeXRlcyhsZW5ndGgsIGRlY29kZXJPcHRpb25zKTsKICAgIH0KICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLnN0cmVhbS5hc3luY0dldEJ5dGVzKCk7CiAgICByZXR1cm4gdGhpcy5kZWNvZGVJbWFnZShkYXRhLCBkZWNvZGVyT3B0aW9ucyk7CiAgfQogIHJlc2V0KCkgewogICAgdGhpcy5wb3MgPSAwOwogIH0KICBtYWtlU3ViU3RyZWFtKHN0YXJ0LCBsZW5ndGgsIGRpY3QgPSBudWxsKSB7CiAgICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHsKICAgICAgd2hpbGUgKCF0aGlzLmVvZikgewogICAgICAgIHRoaXMucmVhZEJsb2NrKCk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgbGVuZ3RoOwogICAgICB3aGlsZSAodGhpcy5idWZmZXJMZW5ndGggPD0gZW5kICYmICF0aGlzLmVvZikgewogICAgICAgIHRoaXMucmVhZEJsb2NrKCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgU3RyZWFtKHRoaXMuYnVmZmVyLCBzdGFydCwgbGVuZ3RoLCBkaWN0KTsKICB9CiAgZ2V0QmFzZVN0cmVhbXMoKSB7CiAgICByZXR1cm4gdGhpcy5zdHIgPyB0aGlzLnN0ci5nZXRCYXNlU3RyZWFtcygpIDogbnVsbDsKICB9Cn0KY2xhc3MgU3RyZWFtc1NlcXVlbmNlU3RyZWFtIGV4dGVuZHMgRGVjb2RlU3RyZWFtIHsKICBjb25zdHJ1Y3RvcihzdHJlYW1zLCBvbkVycm9yID0gbnVsbCkgewogICAgc3RyZWFtcyA9IHN0cmVhbXMuZmlsdGVyKHMgPT4gcyBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pOwogICAgbGV0IG1heWJlTGVuZ3RoID0gMDsKICAgIGZvciAoY29uc3Qgc3RyZWFtIG9mIHN0cmVhbXMpIHsKICAgICAgbWF5YmVMZW5ndGggKz0gc3RyZWFtIGluc3RhbmNlb2YgRGVjb2RlU3RyZWFtID8gc3RyZWFtLl9yYXdNaW5CdWZmZXJMZW5ndGggOiBzdHJlYW0ubGVuZ3RoOwogICAgfQogICAgc3VwZXIobWF5YmVMZW5ndGgpOwogICAgdGhpcy5zdHJlYW1zID0gc3RyZWFtczsKICAgIHRoaXMuX29uRXJyb3IgPSBvbkVycm9yOwogIH0KICByZWFkQmxvY2soKSB7CiAgICBjb25zdCBzdHJlYW1zID0gdGhpcy5zdHJlYW1zOwogICAgaWYgKHN0cmVhbXMubGVuZ3RoID09PSAwKSB7CiAgICAgIHRoaXMuZW9mID0gdHJ1ZTsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3Qgc3RyZWFtID0gc3RyZWFtcy5zaGlmdCgpOwogICAgbGV0IGNodW5rOwogICAgdHJ5IHsKICAgICAgY2h1bmsgPSBzdHJlYW0uZ2V0Qnl0ZXMoKTsKICAgIH0gY2F0Y2ggKHJlYXNvbikgewogICAgICBpZiAodGhpcy5fb25FcnJvcikgewogICAgICAgIHRoaXMuX29uRXJyb3IocmVhc29uLCBzdHJlYW0uZGljdD8ub2JqSWQpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0aHJvdyByZWFzb247CiAgICB9CiAgICBjb25zdCBidWZmZXJMZW5ndGggPSB0aGlzLmJ1ZmZlckxlbmd0aDsKICAgIGNvbnN0IG5ld0xlbmd0aCA9IGJ1ZmZlckxlbmd0aCArIGNodW5rLmxlbmd0aDsKICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKG5ld0xlbmd0aCk7CiAgICBidWZmZXIuc2V0KGNodW5rLCBidWZmZXJMZW5ndGgpOwogICAgdGhpcy5idWZmZXJMZW5ndGggPSBuZXdMZW5ndGg7CiAgfQogIGdldEJhc2VTdHJlYW1zKCkgewogICAgY29uc3QgYmFzZVN0cmVhbXNCdWYgPSBbXTsKICAgIGZvciAoY29uc3Qgc3RyZWFtIG9mIHRoaXMuc3RyZWFtcykgewogICAgICBjb25zdCBiYXNlU3RyZWFtcyA9IHN0cmVhbS5nZXRCYXNlU3RyZWFtcygpOwogICAgICBpZiAoYmFzZVN0cmVhbXMpIHsKICAgICAgICBiYXNlU3RyZWFtc0J1Zi5wdXNoKC4uLmJhc2VTdHJlYW1zKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGJhc2VTdHJlYW1zQnVmLmxlbmd0aCA+IDAgPyBiYXNlU3RyZWFtc0J1ZiA6IG51bGw7CiAgfQp9Cgo7Ly8gLi9zcmMvY29yZS9jb2xvcnNwYWNlX3V0aWxzLmpzCgoKCgoKY2xhc3MgQ29sb3JTcGFjZVV0aWxzIHsKICBzdGF0aWMgcGFyc2UoewogICAgY3MsCiAgICB4cmVmLAogICAgcmVzb3VyY2VzID0gbnVsbCwKICAgIHBkZkZ1bmN0aW9uRmFjdG9yeSwKICAgIGdsb2JhbENvbG9yU3BhY2VDYWNoZSwKICAgIGxvY2FsQ29sb3JTcGFjZUNhY2hlLAogICAgYXN5bmNJZk5vdENhY2hlZCA9IGZhbHNlCiAgfSkgewogICAgY29uc3Qgb3B0aW9ucyA9IHsKICAgICAgeHJlZiwKICAgICAgcmVzb3VyY2VzLAogICAgICBwZGZGdW5jdGlvbkZhY3RvcnksCiAgICAgIGdsb2JhbENvbG9yU3BhY2VDYWNoZSwKICAgICAgbG9jYWxDb2xvclNwYWNlQ2FjaGUKICAgIH07CiAgICBsZXQgY3NOYW1lLCBjc1JlZiwgcGFyc2VkQ1M7CiAgICBpZiAoY3MgaW5zdGFuY2VvZiBSZWYpIHsKICAgICAgY3NSZWYgPSBjczsKICAgICAgY29uc3QgY2FjaGVkQ1MgPSBnbG9iYWxDb2xvclNwYWNlQ2FjaGUuZ2V0QnlSZWYoY3NSZWYpIHx8IGxvY2FsQ29sb3JTcGFjZUNhY2hlLmdldEJ5UmVmKGNzUmVmKTsKICAgICAgaWYgKGNhY2hlZENTKSB7CiAgICAgICAgcmV0dXJuIGNhY2hlZENTOwogICAgICB9CiAgICAgIGNzID0geHJlZi5mZXRjaChjcyk7CiAgICB9CiAgICBpZiAoY3MgaW5zdGFuY2VvZiBOYW1lKSB7CiAgICAgIGNzTmFtZSA9IGNzLm5hbWU7CiAgICAgIGNvbnN0IGNhY2hlZENTID0gbG9jYWxDb2xvclNwYWNlQ2FjaGUuZ2V0QnlOYW1lKGNzTmFtZSk7CiAgICAgIGlmIChjYWNoZWRDUykgewogICAgICAgIHJldHVybiBjYWNoZWRDUzsKICAgICAgfQogICAgfQogICAgdHJ5IHsKICAgICAgcGFyc2VkQ1MgPSB0aGlzLiNwYXJzZShjcywgb3B0aW9ucyk7CiAgICB9IGNhdGNoIChleCkgewogICAgICBpZiAoYXN5bmNJZk5vdENhY2hlZCAmJiAhKGV4IGluc3RhbmNlb2YgTWlzc2luZ0RhdGFFeGNlcHRpb24pKSB7CiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGV4KTsKICAgICAgfQogICAgICB0aHJvdyBleDsKICAgIH0KICAgIGlmIChjc05hbWUgfHwgY3NSZWYpIHsKICAgICAgbG9jYWxDb2xvclNwYWNlQ2FjaGUuc2V0KGNzTmFtZSwgY3NSZWYsIHBhcnNlZENTKTsKICAgICAgaWYgKGNzUmVmKSB7CiAgICAgICAgZ2xvYmFsQ29sb3JTcGFjZUNhY2hlLnNldChudWxsLCBjc1JlZiwgcGFyc2VkQ1MpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gYXN5bmNJZk5vdENhY2hlZCA/IFByb21pc2UucmVzb2x2ZShwYXJzZWRDUykgOiBwYXJzZWRDUzsKICB9CiAgc3RhdGljICNzdWJQYXJzZShjcywgb3B0aW9ucykgewogICAgY29uc3QgewogICAgICBnbG9iYWxDb2xvclNwYWNlQ2FjaGUKICAgIH0gPSBvcHRpb25zOwogICAgbGV0IGNzUmVmOwogICAgaWYgKGNzIGluc3RhbmNlb2YgUmVmKSB7CiAgICAgIGNzUmVmID0gY3M7CiAgICAgIGNvbnN0IGNhY2hlZENTID0gZ2xvYmFsQ29sb3JTcGFjZUNhY2hlLmdldEJ5UmVmKGNzUmVmKTsKICAgICAgaWYgKGNhY2hlZENTKSB7CiAgICAgICAgcmV0dXJuIGNhY2hlZENTOwogICAgICB9CiAgICB9CiAgICBjb25zdCBwYXJzZWRDUyA9IHRoaXMuI3BhcnNlKGNzLCBvcHRpb25zKTsKICAgIGlmIChjc1JlZikgewogICAgICBnbG9iYWxDb2xvclNwYWNlQ2FjaGUuc2V0KG51bGwsIGNzUmVmLCBwYXJzZWRDUyk7CiAgICB9CiAgICByZXR1cm4gcGFyc2VkQ1M7CiAgfQogIHN0YXRpYyAjcGFyc2UoY3MsIG9wdGlvbnMpIHsKICAgIGNvbnN0IHsKICAgICAgeHJlZiwKICAgICAgcmVzb3VyY2VzLAogICAgICBwZGZGdW5jdGlvbkZhY3RvcnksCiAgICAgIGdsb2JhbENvbG9yU3BhY2VDYWNoZQogICAgfSA9IG9wdGlvbnM7CiAgICBjcyA9IHhyZWYuZmV0Y2hJZlJlZihjcyk7CiAgICBpZiAoY3MgaW5zdGFuY2VvZiBOYW1lKSB7CiAgICAgIHN3aXRjaCAoY3MubmFtZSkgewogICAgICAgIGNhc2UgIkciOgogICAgICAgIGNhc2UgIkRldmljZUdyYXkiOgogICAgICAgICAgcmV0dXJuIHRoaXMuZ3JheTsKICAgICAgICBjYXNlICJSR0IiOgogICAgICAgIGNhc2UgIkRldmljZVJHQiI6CiAgICAgICAgICByZXR1cm4gdGhpcy5yZ2I7CiAgICAgICAgY2FzZSAiRGV2aWNlUkdCQSI6CiAgICAgICAgICByZXR1cm4gdGhpcy5yZ2JhOwogICAgICAgIGNhc2UgIkNNWUsiOgogICAgICAgIGNhc2UgIkRldmljZUNNWUsiOgogICAgICAgICAgcmV0dXJuIHRoaXMuY215azsKICAgICAgICBjYXNlICJQYXR0ZXJuIjoKICAgICAgICAgIHJldHVybiBuZXcgUGF0dGVybkNTKG51bGwpOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBpZiAocmVzb3VyY2VzIGluc3RhbmNlb2YgRGljdCkgewogICAgICAgICAgICBjb25zdCBjb2xvclNwYWNlcyA9IHJlc291cmNlcy5nZXQoIkNvbG9yU3BhY2UiKTsKICAgICAgICAgICAgaWYgKGNvbG9yU3BhY2VzIGluc3RhbmNlb2YgRGljdCkgewogICAgICAgICAgICAgIGNvbnN0IHJlc291cmNlc0NTID0gY29sb3JTcGFjZXMuZ2V0KGNzLm5hbWUpOwogICAgICAgICAgICAgIGlmIChyZXNvdXJjZXNDUykgewogICAgICAgICAgICAgICAgaWYgKHJlc291cmNlc0NTIGluc3RhbmNlb2YgTmFtZSkgewogICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4jcGFyc2UocmVzb3VyY2VzQ1MsIG9wdGlvbnMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY3MgPSByZXNvdXJjZXNDUzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgd2FybihgVW5yZWNvZ25pemVkIENvbG9yU3BhY2U6ICR7Y3MubmFtZX1gKTsKICAgICAgICAgIHJldHVybiB0aGlzLmdyYXk7CiAgICAgIH0KICAgIH0KICAgIGlmIChBcnJheS5pc0FycmF5KGNzKSkgewogICAgICBjb25zdCBtb2RlID0geHJlZi5mZXRjaElmUmVmKGNzWzBdKS5uYW1lOwogICAgICBsZXQgcGFyYW1zLCBudW1Db21wcywgYmFzZUNTLCB3aGl0ZVBvaW50LCBibGFja1BvaW50LCBnYW1tYTsKICAgICAgc3dpdGNoIChtb2RlKSB7CiAgICAgICAgY2FzZSAiRyI6CiAgICAgICAgY2FzZSAiRGV2aWNlR3JheSI6CiAgICAgICAgICByZXR1cm4gdGhpcy5ncmF5OwogICAgICAgIGNhc2UgIlJHQiI6CiAgICAgICAgY2FzZSAiRGV2aWNlUkdCIjoKICAgICAgICAgIHJldHVybiB0aGlzLnJnYjsKICAgICAgICBjYXNlICJDTVlLIjoKICAgICAgICBjYXNlICJEZXZpY2VDTVlLIjoKICAgICAgICAgIHJldHVybiB0aGlzLmNteWs7CiAgICAgICAgY2FzZSAiQ2FsR3JheSI6CiAgICAgICAgICBwYXJhbXMgPSB4cmVmLmZldGNoSWZSZWYoY3NbMV0pOwogICAgICAgICAgd2hpdGVQb2ludCA9IHBhcmFtcy5nZXRBcnJheSgiV2hpdGVQb2ludCIpOwogICAgICAgICAgYmxhY2tQb2ludCA9IHBhcmFtcy5nZXRBcnJheSgiQmxhY2tQb2ludCIpOwogICAgICAgICAgZ2FtbWEgPSBwYXJhbXMuZ2V0KCJHYW1tYSIpOwogICAgICAgICAgcmV0dXJuIG5ldyBDYWxHcmF5Q1Mod2hpdGVQb2ludCwgYmxhY2tQb2ludCwgZ2FtbWEpOwogICAgICAgIGNhc2UgIkNhbFJHQiI6CiAgICAgICAgICBwYXJhbXMgPSB4cmVmLmZldGNoSWZSZWYoY3NbMV0pOwogICAgICAgICAgd2hpdGVQb2ludCA9IHBhcmFtcy5nZXRBcnJheSgiV2hpdGVQb2ludCIpOwogICAgICAgICAgYmxhY2tQb2ludCA9IHBhcmFtcy5nZXRBcnJheSgiQmxhY2tQb2ludCIpOwogICAgICAgICAgZ2FtbWEgPSBwYXJhbXMuZ2V0QXJyYXkoIkdhbW1hIik7CiAgICAgICAgICBjb25zdCBtYXRyaXggPSBwYXJhbXMuZ2V0QXJyYXkoIk1hdHJpeCIpOwogICAgICAgICAgcmV0dXJuIG5ldyBDYWxSR0JDUyh3aGl0ZVBvaW50LCBibGFja1BvaW50LCBnYW1tYSwgbWF0cml4KTsKICAgICAgICBjYXNlICJJQ0NCYXNlZCI6CiAgICAgICAgICBjb25zdCBpc1JlZiA9IGNzWzFdIGluc3RhbmNlb2YgUmVmOwogICAgICAgICAgaWYgKGlzUmVmKSB7CiAgICAgICAgICAgIGNvbnN0IGNhY2hlZENTID0gZ2xvYmFsQ29sb3JTcGFjZUNhY2hlLmdldEJ5UmVmKGNzWzFdKTsKICAgICAgICAgICAgaWYgKGNhY2hlZENTKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENTOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBzdHJlYW0gPSB4cmVmLmZldGNoSWZSZWYoY3NbMV0pOwogICAgICAgICAgY29uc3QgZGljdCA9IHN0cmVhbS5kaWN0OwogICAgICAgICAgbnVtQ29tcHMgPSBkaWN0LmdldCgiTiIpOwogICAgICAgICAgaWYgKEljY0NvbG9yU3BhY2UuaXNVc2FibGUpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBjb25zdCBpY2NDUyA9IG5ldyBJY2NDb2xvclNwYWNlKHN0cmVhbS5nZXRCeXRlcygpLCAiSUNDQmFzZWQiLCBudW1Db21wcyk7CiAgICAgICAgICAgICAgaWYgKGlzUmVmKSB7CiAgICAgICAgICAgICAgICBnbG9iYWxDb2xvclNwYWNlQ2FjaGUuc2V0KG51bGwsIGNzWzFdLCBpY2NDUyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBpY2NDUzsKICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHsKICAgICAgICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBNaXNzaW5nRGF0YUV4Y2VwdGlvbikgewogICAgICAgICAgICAgICAgdGhyb3cgZXg7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHdhcm4oYElDQ0Jhc2VkIGNvbG9yIHNwYWNlICgke2NzWzFdfSk6ICIke2V4fSIuYCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IGFsdFJhdyA9IGRpY3QuZ2V0UmF3KCJBbHRlcm5hdGUiKTsKICAgICAgICAgIGlmIChhbHRSYXcpIHsKICAgICAgICAgICAgY29uc3QgYWx0Q1MgPSB0aGlzLiNzdWJQYXJzZShhbHRSYXcsIG9wdGlvbnMpOwogICAgICAgICAgICBpZiAoYWx0Q1MubnVtQ29tcHMgPT09IG51bUNvbXBzKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGFsdENTOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHdhcm4oIklDQ0Jhc2VkIGNvbG9yIHNwYWNlOiBJZ25vcmluZyBpbmNvcnJlY3QgL0FsdGVybmF0ZSBlbnRyeS4iKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChudW1Db21wcyA9PT0gMSkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5ncmF5OwogICAgICAgICAgfSBlbHNlIGlmIChudW1Db21wcyA9PT0gMykgewogICAgICAgICAgICByZXR1cm4gdGhpcy5yZ2I7CiAgICAgICAgICB9IGVsc2UgaWYgKG51bUNvbXBzID09PSA0KSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmNteWs7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJQYXR0ZXJuIjoKICAgICAgICAgIGJhc2VDUyA9IGNzWzFdIHx8IG51bGw7CiAgICAgICAgICBpZiAoYmFzZUNTKSB7CiAgICAgICAgICAgIGJhc2VDUyA9IHRoaXMuI3N1YlBhcnNlKGJhc2VDUywgb3B0aW9ucyk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gbmV3IFBhdHRlcm5DUyhiYXNlQ1MpOwogICAgICAgIGNhc2UgIkkiOgogICAgICAgIGNhc2UgIkluZGV4ZWQiOgogICAgICAgICAgYmFzZUNTID0gdGhpcy4jc3ViUGFyc2UoY3NbMV0sIG9wdGlvbnMpOwogICAgICAgICAgY29uc3QgaGlWYWwgPSBNYXRoQ2xhbXAoeHJlZi5mZXRjaElmUmVmKGNzWzJdKSwgMCwgMjU1KTsKICAgICAgICAgIGNvbnN0IGxvb2t1cCA9IHhyZWYuZmV0Y2hJZlJlZihjc1szXSk7CiAgICAgICAgICByZXR1cm4gbmV3IEluZGV4ZWRDUyhiYXNlQ1MsIGhpVmFsLCBsb29rdXApOwogICAgICAgIGNhc2UgIlNlcGFyYXRpb24iOgogICAgICAgIGNhc2UgIkRldmljZU4iOgogICAgICAgICAgY29uc3QgbmFtZSA9IHhyZWYuZmV0Y2hJZlJlZihjc1sxXSk7CiAgICAgICAgICBudW1Db21wcyA9IEFycmF5LmlzQXJyYXkobmFtZSkgPyBuYW1lLmxlbmd0aCA6IDE7CiAgICAgICAgICBiYXNlQ1MgPSB0aGlzLiNzdWJQYXJzZShjc1syXSwgb3B0aW9ucyk7CiAgICAgICAgICBjb25zdCB0aW50Rm4gPSBwZGZGdW5jdGlvbkZhY3RvcnkuY3JlYXRlKGNzWzNdKTsKICAgICAgICAgIHJldHVybiBuZXcgQWx0ZXJuYXRlQ1MobnVtQ29tcHMsIGJhc2VDUywgdGludEZuKTsKICAgICAgICBjYXNlICJMYWIiOgogICAgICAgICAgcGFyYW1zID0geHJlZi5mZXRjaElmUmVmKGNzWzFdKTsKICAgICAgICAgIHdoaXRlUG9pbnQgPSBwYXJhbXMuZ2V0QXJyYXkoIldoaXRlUG9pbnQiKTsKICAgICAgICAgIGJsYWNrUG9pbnQgPSBwYXJhbXMuZ2V0QXJyYXkoIkJsYWNrUG9pbnQiKTsKICAgICAgICAgIGNvbnN0IHJhbmdlID0gcGFyYW1zLmdldEFycmF5KCJSYW5nZSIpOwogICAgICAgICAgcmV0dXJuIG5ldyBMYWJDUyh3aGl0ZVBvaW50LCBibGFja1BvaW50LCByYW5nZSk7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHdhcm4oYFVuaW1wbGVtZW50ZWQgQ29sb3JTcGFjZSBvYmplY3Q6ICR7bW9kZX1gKTsKICAgICAgICAgIHJldHVybiB0aGlzLmdyYXk7CiAgICAgIH0KICAgIH0KICAgIHdhcm4oYFVucmVjb2duaXplZCBDb2xvclNwYWNlIG9iamVjdDogJHtjc31gKTsKICAgIHJldHVybiB0aGlzLmdyYXk7CiAgfQogIHN0YXRpYyBnZXQgZ3JheSgpIHsKICAgIHJldHVybiBzaGFkb3codGhpcywgImdyYXkiLCBuZXcgRGV2aWNlR3JheUNTKCkpOwogIH0KICBzdGF0aWMgZ2V0IHJnYigpIHsKICAgIHJldHVybiBzaGFkb3codGhpcywgInJnYiIsIG5ldyBEZXZpY2VSZ2JDUygpKTsKICB9CiAgc3RhdGljIGdldCByZ2JhKCkgewogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAicmdiYSIsIG5ldyBEZXZpY2VSZ2JhQ1MoKSk7CiAgfQogIHN0YXRpYyBnZXQgY215aygpIHsKICAgIGlmIChDbXlrSUNDQmFzZWRDUy5pc1VzYWJsZSkgewogICAgICB0cnkgewogICAgICAgIHJldHVybiBzaGFkb3codGhpcywgImNteWsiLCBuZXcgQ215a0lDQ0Jhc2VkQ1MoKSk7CiAgICAgIH0gY2F0Y2ggewogICAgICAgIHdhcm4oIkNNWUsgZmFsbGJhY2s6IERldmljZUNNWUsiKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAiY215ayIsIG5ldyBEZXZpY2VDbXlrQ1MoKSk7CiAgfQp9Cgo7Ly8gLi9zcmMvY29yZS9qcGcuanMKCgoKCgpjbGFzcyBKcGVnRXJyb3IgZXh0ZW5kcyBCYXNlRXhjZXB0aW9uIHsKICBjb25zdHJ1Y3Rvcihtc2cpIHsKICAgIHN1cGVyKG1zZywgIkpwZWdFcnJvciIpOwogIH0KfQpjbGFzcyBETkxNYXJrZXJFcnJvciBleHRlbmRzIEJhc2VFeGNlcHRpb24gewogIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIHNjYW5MaW5lcykgewogICAgc3VwZXIobWVzc2FnZSwgIkROTE1hcmtlckVycm9yIik7CiAgICB0aGlzLnNjYW5MaW5lcyA9IHNjYW5MaW5lczsKICB9Cn0KY2xhc3MgRU9JTWFya2VyRXJyb3IgZXh0ZW5kcyBCYXNlRXhjZXB0aW9uIHsKICBjb25zdHJ1Y3Rvcihtc2cpIHsKICAgIHN1cGVyKG1zZywgIkVPSU1hcmtlckVycm9yIik7CiAgfQp9CmNvbnN0IGRjdFppZ1phZyA9IG5ldyBVaW50OEFycmF5KFswLCAxLCA4LCAxNiwgOSwgMiwgMywgMTAsIDE3LCAyNCwgMzIsIDI1LCAxOCwgMTEsIDQsIDUsIDEyLCAxOSwgMjYsIDMzLCA0MCwgNDgsIDQxLCAzNCwgMjcsIDIwLCAxMywgNiwgNywgMTQsIDIxLCAyOCwgMzUsIDQyLCA0OSwgNTYsIDU3LCA1MCwgNDMsIDM2LCAyOSwgMjIsIDE1LCAyMywgMzAsIDM3LCA0NCwgNTEsIDU4LCA1OSwgNTIsIDQ1LCAzOCwgMzEsIDM5LCA0NiwgNTMsIDYwLCA2MSwgNTQsIDQ3LCA1NSwgNjIsIDYzXSk7CmNvbnN0IGRjdENvczEgPSA0MDE3Owpjb25zdCBkY3RTaW4xID0gNzk5Owpjb25zdCBkY3RDb3MzID0gMzQwNjsKY29uc3QgZGN0U2luMyA9IDIyNzY7CmNvbnN0IGRjdENvczYgPSAxNTY3Owpjb25zdCBkY3RTaW42ID0gMzc4NDsKY29uc3QgZGN0U3FydDIgPSA1NzkzOwpjb25zdCBkY3RTcXJ0MWQyID0gMjg5NjsKZnVuY3Rpb24gYnVpbGRIdWZmbWFuVGFibGUoY29kZUxlbmd0aHMsIHZhbHVlcykgewogIGxldCBrID0gMCwKICAgIGksCiAgICBqLAogICAgbGVuZ3RoID0gMTY7CiAgd2hpbGUgKGxlbmd0aCA+IDAgJiYgIWNvZGVMZW5ndGhzW2xlbmd0aCAtIDFdKSB7CiAgICBsZW5ndGgtLTsKICB9CiAgY29uc3QgY29kZSA9IFt7CiAgICBjaGlsZHJlbjogW10sCiAgICBpbmRleDogMAogIH1dOwogIGxldCBwID0gY29kZVswXSwKICAgIHE7CiAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICBmb3IgKGogPSAwOyBqIDwgY29kZUxlbmd0aHNbaV07IGorKykgewogICAgICBwID0gY29kZS5wb3AoKTsKICAgICAgcC5jaGlsZHJlbltwLmluZGV4XSA9IHZhbHVlc1trXTsKICAgICAgd2hpbGUgKHAuaW5kZXggPiAwKSB7CiAgICAgICAgcCA9IGNvZGUucG9wKCk7CiAgICAgIH0KICAgICAgcC5pbmRleCsrOwogICAgICBjb2RlLnB1c2gocCk7CiAgICAgIHdoaWxlIChjb2RlLmxlbmd0aCA8PSBpKSB7CiAgICAgICAgY29kZS5wdXNoKHEgPSB7CiAgICAgICAgICBjaGlsZHJlbjogW10sCiAgICAgICAgICBpbmRleDogMAogICAgICAgIH0pOwogICAgICAgIHAuY2hpbGRyZW5bcC5pbmRleF0gPSBxLmNoaWxkcmVuOwogICAgICAgIHAgPSBxOwogICAgICB9CiAgICAgIGsrKzsKICAgIH0KICAgIGlmIChpICsgMSA8IGxlbmd0aCkgewogICAgICBjb2RlLnB1c2gocSA9IHsKICAgICAgICBjaGlsZHJlbjogW10sCiAgICAgICAgaW5kZXg6IDAKICAgICAgfSk7CiAgICAgIHAuY2hpbGRyZW5bcC5pbmRleF0gPSBxLmNoaWxkcmVuOwogICAgICBwID0gcTsKICAgIH0KICB9CiAgcmV0dXJuIGNvZGVbMF0uY2hpbGRyZW47Cn0KZnVuY3Rpb24gZ2V0QmxvY2tCdWZmZXJPZmZzZXQoY29tcG9uZW50LCByb3csIGNvbCkgewogIHJldHVybiA2NCAqICgoY29tcG9uZW50LmJsb2Nrc1BlckxpbmUgKyAxKSAqIHJvdyArIGNvbCk7Cn0KZnVuY3Rpb24gZGVjb2RlU2NhbihkYXRhLCBvZmZzZXQsIGZyYW1lLCBjb21wb25lbnRzLCByZXNldEludGVydmFsLCBzcGVjdHJhbFN0YXJ0LCBzcGVjdHJhbEVuZCwgc3VjY2Vzc2l2ZVByZXYsIHN1Y2Nlc3NpdmUsIHBhcnNlRE5MTWFya2VyID0gZmFsc2UpIHsKICBjb25zdCBtY3VzUGVyTGluZSA9IGZyYW1lLm1jdXNQZXJMaW5lOwogIGNvbnN0IHByb2dyZXNzaXZlID0gZnJhbWUucHJvZ3Jlc3NpdmU7CiAgY29uc3Qgc3RhcnRPZmZzZXQgPSBvZmZzZXQ7CiAgbGV0IGJpdHNEYXRhID0gMCwKICAgIGJpdHNDb3VudCA9IDA7CiAgZnVuY3Rpb24gcmVhZEJpdCgpIHsKICAgIGlmIChiaXRzQ291bnQgPiAwKSB7CiAgICAgIGJpdHNDb3VudC0tOwogICAgICByZXR1cm4gYml0c0RhdGEgPj4gYml0c0NvdW50ICYgMTsKICAgIH0KICAgIGJpdHNEYXRhID0gZGF0YVtvZmZzZXQrK107CiAgICBpZiAoYml0c0RhdGEgPT09IDB4ZmYpIHsKICAgICAgY29uc3QgbmV4dEJ5dGUgPSBkYXRhW29mZnNldCsrXTsKICAgICAgaWYgKG5leHRCeXRlKSB7CiAgICAgICAgaWYgKG5leHRCeXRlID09PSAweGRjICYmIHBhcnNlRE5MTWFya2VyKSB7CiAgICAgICAgICBvZmZzZXQgKz0gMjsKICAgICAgICAgIGNvbnN0IHNjYW5MaW5lcyA9IHJlYWRVaW50MTYoZGF0YSwgb2Zmc2V0KTsKICAgICAgICAgIG9mZnNldCArPSAyOwogICAgICAgICAgaWYgKHNjYW5MaW5lcyA+IDAgJiYgc2NhbkxpbmVzICE9PSBmcmFtZS5zY2FuTGluZXMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEROTE1hcmtlckVycm9yKCJGb3VuZCBETkwgbWFya2VyICgweEZGREMpIHdoaWxlIHBhcnNpbmcgc2NhbiBkYXRhIiwgc2NhbkxpbmVzKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKG5leHRCeXRlID09PSAweGQ5KSB7CiAgICAgICAgICBpZiAocGFyc2VETkxNYXJrZXIpIHsKICAgICAgICAgICAgY29uc3QgbWF5YmVTY2FuTGluZXMgPSBibG9ja1JvdyAqIChmcmFtZS5wcmVjaXNpb24gPT09IDggPyA4IDogMCk7CiAgICAgICAgICAgIGlmIChtYXliZVNjYW5MaW5lcyA+IDAgJiYgTWF0aC5yb3VuZChmcmFtZS5zY2FuTGluZXMgLyBtYXliZVNjYW5MaW5lcykgPj0gNSkgewogICAgICAgICAgICAgIHRocm93IG5ldyBETkxNYXJrZXJFcnJvcigiRm91bmQgRU9JIG1hcmtlciAoMHhGRkQ5KSB3aGlsZSBwYXJzaW5nIHNjYW4gZGF0YSwgIiArICJwb3NzaWJseSBjYXVzZWQgYnkgaW5jb3JyZWN0IGBzY2FuTGluZXNgIHBhcmFtZXRlciIsIG1heWJlU2NhbkxpbmVzKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgdGhyb3cgbmV3IEVPSU1hcmtlckVycm9yKCJGb3VuZCBFT0kgbWFya2VyICgweEZGRDkpIHdoaWxlIHBhcnNpbmcgc2NhbiBkYXRhIik7CiAgICAgICAgfQogICAgICAgIHRocm93IG5ldyBKcGVnRXJyb3IoYHVuZXhwZWN0ZWQgbWFya2VyICR7KGJpdHNEYXRhIDw8IDggfCBuZXh0Qnl0ZSkudG9TdHJpbmcoMTYpfWApOwogICAgICB9CiAgICB9CiAgICBiaXRzQ291bnQgPSA3OwogICAgcmV0dXJuIGJpdHNEYXRhID4+PiA3OwogIH0KICBmdW5jdGlvbiBkZWNvZGVIdWZmbWFuKHRyZWUpIHsKICAgIGxldCBub2RlID0gdHJlZTsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIG5vZGUgPSBub2RlW3JlYWRCaXQoKV07CiAgICAgIHN3aXRjaCAodHlwZW9mIG5vZGUpIHsKICAgICAgICBjYXNlICJudW1iZXIiOgogICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgY2FzZSAib2JqZWN0IjoKICAgICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIHRocm93IG5ldyBKcGVnRXJyb3IoImludmFsaWQgaHVmZm1hbiBzZXF1ZW5jZSIpOwogICAgfQogIH0KICBmdW5jdGlvbiByZWNlaXZlKGxlbmd0aCkgewogICAgbGV0IG4gPSAwOwogICAgd2hpbGUgKGxlbmd0aCA+IDApIHsKICAgICAgbiA9IG4gPDwgMSB8IHJlYWRCaXQoKTsKICAgICAgbGVuZ3RoLS07CiAgICB9CiAgICByZXR1cm4gbjsKICB9CiAgZnVuY3Rpb24gcmVjZWl2ZUFuZEV4dGVuZChsZW5ndGgpIHsKICAgIGlmIChsZW5ndGggPT09IDEpIHsKICAgICAgcmV0dXJuIHJlYWRCaXQoKSA9PT0gMSA/IDEgOiAtMTsKICAgIH0KICAgIGNvbnN0IG4gPSByZWNlaXZlKGxlbmd0aCk7CiAgICBpZiAobiA+PSAxIDw8IGxlbmd0aCAtIDEpIHsKICAgICAgcmV0dXJuIG47CiAgICB9CiAgICByZXR1cm4gbiArICgtMSA8PCBsZW5ndGgpICsgMTsKICB9CiAgZnVuY3Rpb24gZGVjb2RlQmFzZWxpbmUoY29tcG9uZW50LCBibG9ja09mZnNldCkgewogICAgY29uc3QgdCA9IGRlY29kZUh1ZmZtYW4oY29tcG9uZW50Lmh1ZmZtYW5UYWJsZURDKTsKICAgIGNvbnN0IGRpZmYgPSB0ID09PSAwID8gMCA6IHJlY2VpdmVBbmRFeHRlbmQodCk7CiAgICBjb21wb25lbnQuYmxvY2tEYXRhW2Jsb2NrT2Zmc2V0XSA9IGNvbXBvbmVudC5wcmVkICs9IGRpZmY7CiAgICBsZXQgayA9IDE7CiAgICB3aGlsZSAoayA8IDY0KSB7CiAgICAgIGNvbnN0IHJzID0gZGVjb2RlSHVmZm1hbihjb21wb25lbnQuaHVmZm1hblRhYmxlQUMpOwogICAgICBjb25zdCBzID0gcnMgJiAxNSwKICAgICAgICByID0gcnMgPj4gNDsKICAgICAgaWYgKHMgPT09IDApIHsKICAgICAgICBpZiAociA8IDE1KSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgayArPSAxNjsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBrICs9IHI7CiAgICAgIGNvbnN0IHogPSBkY3RaaWdaYWdba107CiAgICAgIGNvbXBvbmVudC5ibG9ja0RhdGFbYmxvY2tPZmZzZXQgKyB6XSA9IHJlY2VpdmVBbmRFeHRlbmQocyk7CiAgICAgIGsrKzsKICAgIH0KICB9CiAgZnVuY3Rpb24gZGVjb2RlRENGaXJzdChjb21wb25lbnQsIGJsb2NrT2Zmc2V0KSB7CiAgICBjb25zdCB0ID0gZGVjb2RlSHVmZm1hbihjb21wb25lbnQuaHVmZm1hblRhYmxlREMpOwogICAgY29uc3QgZGlmZiA9IHQgPT09IDAgPyAwIDogcmVjZWl2ZUFuZEV4dGVuZCh0KSA8PCBzdWNjZXNzaXZlOwogICAgY29tcG9uZW50LmJsb2NrRGF0YVtibG9ja09mZnNldF0gPSBjb21wb25lbnQucHJlZCArPSBkaWZmOwogIH0KICBmdW5jdGlvbiBkZWNvZGVEQ1N1Y2Nlc3NpdmUoY29tcG9uZW50LCBibG9ja09mZnNldCkgewogICAgY29tcG9uZW50LmJsb2NrRGF0YVtibG9ja09mZnNldF0gfD0gcmVhZEJpdCgpIDw8IHN1Y2Nlc3NpdmU7CiAgfQogIGxldCBlb2JydW4gPSAwOwogIGZ1bmN0aW9uIGRlY29kZUFDRmlyc3QoY29tcG9uZW50LCBibG9ja09mZnNldCkgewogICAgaWYgKGVvYnJ1biA+IDApIHsKICAgICAgZW9icnVuLS07CiAgICAgIHJldHVybjsKICAgIH0KICAgIGxldCBrID0gc3BlY3RyYWxTdGFydDsKICAgIGNvbnN0IGUgPSBzcGVjdHJhbEVuZDsKICAgIHdoaWxlIChrIDw9IGUpIHsKICAgICAgY29uc3QgcnMgPSBkZWNvZGVIdWZmbWFuKGNvbXBvbmVudC5odWZmbWFuVGFibGVBQyk7CiAgICAgIGNvbnN0IHMgPSBycyAmIDE1LAogICAgICAgIHIgPSBycyA+PiA0OwogICAgICBpZiAocyA9PT0gMCkgewogICAgICAgIGlmIChyIDwgMTUpIHsKICAgICAgICAgIGVvYnJ1biA9IHJlY2VpdmUocikgKyAoMSA8PCByKSAtIDE7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgayArPSAxNjsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBrICs9IHI7CiAgICAgIGNvbnN0IHogPSBkY3RaaWdaYWdba107CiAgICAgIGNvbXBvbmVudC5ibG9ja0RhdGFbYmxvY2tPZmZzZXQgKyB6XSA9IHJlY2VpdmVBbmRFeHRlbmQocykgKiAoMSA8PCBzdWNjZXNzaXZlKTsKICAgICAgaysrOwogICAgfQogIH0KICBsZXQgc3VjY2Vzc2l2ZUFDU3RhdGUgPSAwLAogICAgc3VjY2Vzc2l2ZUFDTmV4dFZhbHVlOwogIGZ1bmN0aW9uIGRlY29kZUFDU3VjY2Vzc2l2ZShjb21wb25lbnQsIGJsb2NrT2Zmc2V0KSB7CiAgICBsZXQgayA9IHNwZWN0cmFsU3RhcnQ7CiAgICBjb25zdCBlID0gc3BlY3RyYWxFbmQ7CiAgICBsZXQgciA9IDA7CiAgICBsZXQgczsKICAgIGxldCByczsKICAgIHdoaWxlIChrIDw9IGUpIHsKICAgICAgY29uc3Qgb2Zmc2V0WiA9IGJsb2NrT2Zmc2V0ICsgZGN0WmlnWmFnW2tdOwogICAgICBjb25zdCBzaWduID0gY29tcG9uZW50LmJsb2NrRGF0YVtvZmZzZXRaXSA8IDAgPyAtMSA6IDE7CiAgICAgIHN3aXRjaCAoc3VjY2Vzc2l2ZUFDU3RhdGUpIHsKICAgICAgICBjYXNlIDA6CiAgICAgICAgICBycyA9IGRlY29kZUh1ZmZtYW4oY29tcG9uZW50Lmh1ZmZtYW5UYWJsZUFDKTsKICAgICAgICAgIHMgPSBycyAmIDE1OwogICAgICAgICAgciA9IHJzID4+IDQ7CiAgICAgICAgICBpZiAocyA9PT0gMCkgewogICAgICAgICAgICBpZiAociA8IDE1KSB7CiAgICAgICAgICAgICAgZW9icnVuID0gcmVjZWl2ZShyKSArICgxIDw8IHIpOwogICAgICAgICAgICAgIHN1Y2Nlc3NpdmVBQ1N0YXRlID0gNDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICByID0gMTY7CiAgICAgICAgICAgICAgc3VjY2Vzc2l2ZUFDU3RhdGUgPSAxOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAocyAhPT0gMSkgewogICAgICAgICAgICAgIHRocm93IG5ldyBKcGVnRXJyb3IoImludmFsaWQgQUNuIGVuY29kaW5nIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3VjY2Vzc2l2ZUFDTmV4dFZhbHVlID0gcmVjZWl2ZUFuZEV4dGVuZChzKTsKICAgICAgICAgICAgc3VjY2Vzc2l2ZUFDU3RhdGUgPSByID8gMiA6IDM7CiAgICAgICAgICB9CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICBjYXNlIDE6CiAgICAgICAgY2FzZSAyOgogICAgICAgICAgaWYgKGNvbXBvbmVudC5ibG9ja0RhdGFbb2Zmc2V0Wl0pIHsKICAgICAgICAgICAgY29tcG9uZW50LmJsb2NrRGF0YVtvZmZzZXRaXSArPSBzaWduICogKHJlYWRCaXQoKSA8PCBzdWNjZXNzaXZlKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHItLTsKICAgICAgICAgICAgaWYgKHIgPT09IDApIHsKICAgICAgICAgICAgICBzdWNjZXNzaXZlQUNTdGF0ZSA9IHN1Y2Nlc3NpdmVBQ1N0YXRlID09PSAyID8gMyA6IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMzoKICAgICAgICAgIGlmIChjb21wb25lbnQuYmxvY2tEYXRhW29mZnNldFpdKSB7CiAgICAgICAgICAgIGNvbXBvbmVudC5ibG9ja0RhdGFbb2Zmc2V0Wl0gKz0gc2lnbiAqIChyZWFkQml0KCkgPDwgc3VjY2Vzc2l2ZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb21wb25lbnQuYmxvY2tEYXRhW29mZnNldFpdID0gc3VjY2Vzc2l2ZUFDTmV4dFZhbHVlIDw8IHN1Y2Nlc3NpdmU7CiAgICAgICAgICAgIHN1Y2Nlc3NpdmVBQ1N0YXRlID0gMDsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgNDoKICAgICAgICAgIGlmIChjb21wb25lbnQuYmxvY2tEYXRhW29mZnNldFpdKSB7CiAgICAgICAgICAgIGNvbXBvbmVudC5ibG9ja0RhdGFbb2Zmc2V0Wl0gKz0gc2lnbiAqIChyZWFkQml0KCkgPDwgc3VjY2Vzc2l2ZSk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgICBrKys7CiAgICB9CiAgICBpZiAoc3VjY2Vzc2l2ZUFDU3RhdGUgPT09IDQpIHsKICAgICAgZW9icnVuLS07CiAgICAgIGlmIChlb2JydW4gPT09IDApIHsKICAgICAgICBzdWNjZXNzaXZlQUNTdGF0ZSA9IDA7CiAgICAgIH0KICAgIH0KICB9CiAgbGV0IGJsb2NrUm93ID0gMDsKICBmdW5jdGlvbiBkZWNvZGVNY3UoY29tcG9uZW50LCBkZWNvZGUsIG1jdSwgcm93LCBjb2wpIHsKICAgIGNvbnN0IG1jdVJvdyA9IG1jdSAvIG1jdXNQZXJMaW5lIHwgMDsKICAgIGNvbnN0IG1jdUNvbCA9IG1jdSAlIG1jdXNQZXJMaW5lOwogICAgYmxvY2tSb3cgPSBtY3VSb3cgKiBjb21wb25lbnQudiArIHJvdzsKICAgIGNvbnN0IGJsb2NrQ29sID0gbWN1Q29sICogY29tcG9uZW50LmggKyBjb2w7CiAgICBjb25zdCBibG9ja09mZnNldCA9IGdldEJsb2NrQnVmZmVyT2Zmc2V0KGNvbXBvbmVudCwgYmxvY2tSb3csIGJsb2NrQ29sKTsKICAgIGRlY29kZShjb21wb25lbnQsIGJsb2NrT2Zmc2V0KTsKICB9CiAgZnVuY3Rpb24gZGVjb2RlQmxvY2soY29tcG9uZW50LCBkZWNvZGUsIG1jdSkgewogICAgYmxvY2tSb3cgPSBtY3UgLyBjb21wb25lbnQuYmxvY2tzUGVyTGluZSB8IDA7CiAgICBjb25zdCBibG9ja0NvbCA9IG1jdSAlIGNvbXBvbmVudC5ibG9ja3NQZXJMaW5lOwogICAgY29uc3QgYmxvY2tPZmZzZXQgPSBnZXRCbG9ja0J1ZmZlck9mZnNldChjb21wb25lbnQsIGJsb2NrUm93LCBibG9ja0NvbCk7CiAgICBkZWNvZGUoY29tcG9uZW50LCBibG9ja09mZnNldCk7CiAgfQogIGNvbnN0IGNvbXBvbmVudHNMZW5ndGggPSBjb21wb25lbnRzLmxlbmd0aDsKICBsZXQgY29tcG9uZW50LCBpLCBqLCBrLCBuOwogIGxldCBkZWNvZGVGbjsKICBpZiAocHJvZ3Jlc3NpdmUpIHsKICAgIGlmIChzcGVjdHJhbFN0YXJ0ID09PSAwKSB7CiAgICAgIGRlY29kZUZuID0gc3VjY2Vzc2l2ZVByZXYgPT09IDAgPyBkZWNvZGVEQ0ZpcnN0IDogZGVjb2RlRENTdWNjZXNzaXZlOwogICAgfSBlbHNlIHsKICAgICAgZGVjb2RlRm4gPSBzdWNjZXNzaXZlUHJldiA9PT0gMCA/IGRlY29kZUFDRmlyc3QgOiBkZWNvZGVBQ1N1Y2Nlc3NpdmU7CiAgICB9CiAgfSBlbHNlIHsKICAgIGRlY29kZUZuID0gZGVjb2RlQmFzZWxpbmU7CiAgfQogIGxldCBtY3UgPSAwLAogICAgZmlsZU1hcmtlcjsKICBjb25zdCBtY3VFeHBlY3RlZCA9IGNvbXBvbmVudHNMZW5ndGggPT09IDEgPyBjb21wb25lbnRzWzBdLmJsb2Nrc1BlckxpbmUgKiBjb21wb25lbnRzWzBdLmJsb2Nrc1BlckNvbHVtbiA6IG1jdXNQZXJMaW5lICogZnJhbWUubWN1c1BlckNvbHVtbjsKICBsZXQgaCwgdjsKICB3aGlsZSAobWN1IDw9IG1jdUV4cGVjdGVkKSB7CiAgICBjb25zdCBtY3VUb1JlYWQgPSByZXNldEludGVydmFsID8gTWF0aC5taW4obWN1RXhwZWN0ZWQgLSBtY3UsIHJlc2V0SW50ZXJ2YWwpIDogbWN1RXhwZWN0ZWQ7CiAgICBpZiAobWN1VG9SZWFkID4gMCkgewogICAgICBmb3IgKGkgPSAwOyBpIDwgY29tcG9uZW50c0xlbmd0aDsgaSsrKSB7CiAgICAgICAgY29tcG9uZW50c1tpXS5wcmVkID0gMDsKICAgICAgfQogICAgICBlb2JydW4gPSAwOwogICAgICBpZiAoY29tcG9uZW50c0xlbmd0aCA9PT0gMSkgewogICAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudHNbMF07CiAgICAgICAgZm9yIChuID0gMDsgbiA8IG1jdVRvUmVhZDsgbisrKSB7CiAgICAgICAgICBkZWNvZGVCbG9jayhjb21wb25lbnQsIGRlY29kZUZuLCBtY3UpOwogICAgICAgICAgbWN1Kys7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGZvciAobiA9IDA7IG4gPCBtY3VUb1JlYWQ7IG4rKykgewogICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbXBvbmVudHNMZW5ndGg7IGkrKykgewogICAgICAgICAgICBjb21wb25lbnQgPSBjb21wb25lbnRzW2ldOwogICAgICAgICAgICBoID0gY29tcG9uZW50Lmg7CiAgICAgICAgICAgIHYgPSBjb21wb25lbnQudjsKICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHY7IGorKykgewogICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBoOyBrKyspIHsKICAgICAgICAgICAgICAgIGRlY29kZU1jdShjb21wb25lbnQsIGRlY29kZUZuLCBtY3UsIGosIGspOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgbWN1Kys7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBiaXRzQ291bnQgPSAwOwogICAgZmlsZU1hcmtlciA9IGZpbmROZXh0RmlsZU1hcmtlcihkYXRhLCBvZmZzZXQpOwogICAgaWYgKCFmaWxlTWFya2VyKSB7CiAgICAgIGJyZWFrOwogICAgfQogICAgaWYgKGZpbGVNYXJrZXIuaW52YWxpZCkgewogICAgICBjb25zdCBwYXJ0aWFsTXNnID0gbWN1VG9SZWFkID4gMCA/ICJ1bmV4cGVjdGVkIiA6ICJleGNlc3NpdmUiOwogICAgICB3YXJuKGBkZWNvZGVTY2FuIC0gJHtwYXJ0aWFsTXNnfSBNQ1UgZGF0YSwgY3VycmVudCBtYXJrZXIgaXM6ICR7ZmlsZU1hcmtlci5pbnZhbGlkfWApOwogICAgICBvZmZzZXQgPSBmaWxlTWFya2VyLm9mZnNldDsKICAgIH0KICAgIGlmIChmaWxlTWFya2VyLm1hcmtlciA+PSAweGZmZDAgJiYgZmlsZU1hcmtlci5tYXJrZXIgPD0gMHhmZmQ3KSB7CiAgICAgIG9mZnNldCArPSAyOwogICAgfSBlbHNlIHsKICAgICAgYnJlYWs7CiAgICB9CiAgfQogIHJldHVybiBvZmZzZXQgLSBzdGFydE9mZnNldDsKfQpmdW5jdGlvbiBxdWFudGl6ZUFuZEludmVyc2UoY29tcG9uZW50LCBibG9ja0J1ZmZlck9mZnNldCwgcCkgewogIGNvbnN0IHF0ID0gY29tcG9uZW50LnF1YW50aXphdGlvblRhYmxlLAogICAgYmxvY2tEYXRhID0gY29tcG9uZW50LmJsb2NrRGF0YTsKICBsZXQgdjAsIHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3OwogIGxldCBwMCwgcDEsIHAyLCBwMywgcDQsIHA1LCBwNiwgcDc7CiAgbGV0IHQ7CiAgaWYgKCFxdCkgewogICAgdGhyb3cgbmV3IEpwZWdFcnJvcigibWlzc2luZyByZXF1aXJlZCBRdWFudGl6YXRpb24gVGFibGUuIik7CiAgfQogIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IDY0OyByb3cgKz0gOCkgewogICAgcDAgPSBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyByb3ddOwogICAgcDEgPSBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyByb3cgKyAxXTsKICAgIHAyID0gYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgcm93ICsgMl07CiAgICBwMyA9IGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIHJvdyArIDNdOwogICAgcDQgPSBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyByb3cgKyA0XTsKICAgIHA1ID0gYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgcm93ICsgNV07CiAgICBwNiA9IGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIHJvdyArIDZdOwogICAgcDcgPSBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyByb3cgKyA3XTsKICAgIHAwICo9IHF0W3Jvd107CiAgICBpZiAoKHAxIHwgcDIgfCBwMyB8IHA0IHwgcDUgfCBwNiB8IHA3KSA9PT0gMCkgewogICAgICB0ID0gZGN0U3FydDIgKiBwMCArIDUxMiA+PiAxMDsKICAgICAgcFtyb3ddID0gdDsKICAgICAgcFtyb3cgKyAxXSA9IHQ7CiAgICAgIHBbcm93ICsgMl0gPSB0OwogICAgICBwW3JvdyArIDNdID0gdDsKICAgICAgcFtyb3cgKyA0XSA9IHQ7CiAgICAgIHBbcm93ICsgNV0gPSB0OwogICAgICBwW3JvdyArIDZdID0gdDsKICAgICAgcFtyb3cgKyA3XSA9IHQ7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgcDEgKj0gcXRbcm93ICsgMV07CiAgICBwMiAqPSBxdFtyb3cgKyAyXTsKICAgIHAzICo9IHF0W3JvdyArIDNdOwogICAgcDQgKj0gcXRbcm93ICsgNF07CiAgICBwNSAqPSBxdFtyb3cgKyA1XTsKICAgIHA2ICo9IHF0W3JvdyArIDZdOwogICAgcDcgKj0gcXRbcm93ICsgN107CiAgICB2MCA9IGRjdFNxcnQyICogcDAgKyAxMjggPj4gODsKICAgIHYxID0gZGN0U3FydDIgKiBwNCArIDEyOCA+PiA4OwogICAgdjIgPSBwMjsKICAgIHYzID0gcDY7CiAgICB2NCA9IGRjdFNxcnQxZDIgKiAocDEgLSBwNykgKyAxMjggPj4gODsKICAgIHY3ID0gZGN0U3FydDFkMiAqIChwMSArIHA3KSArIDEyOCA+PiA4OwogICAgdjUgPSBwMyA8PCA0OwogICAgdjYgPSBwNSA8PCA0OwogICAgdjAgPSB2MCArIHYxICsgMSA+PiAxOwogICAgdjEgPSB2MCAtIHYxOwogICAgdCA9IHYyICogZGN0U2luNiArIHYzICogZGN0Q29zNiArIDEyOCA+PiA4OwogICAgdjIgPSB2MiAqIGRjdENvczYgLSB2MyAqIGRjdFNpbjYgKyAxMjggPj4gODsKICAgIHYzID0gdDsKICAgIHY0ID0gdjQgKyB2NiArIDEgPj4gMTsKICAgIHY2ID0gdjQgLSB2NjsKICAgIHY3ID0gdjcgKyB2NSArIDEgPj4gMTsKICAgIHY1ID0gdjcgLSB2NTsKICAgIHYwID0gdjAgKyB2MyArIDEgPj4gMTsKICAgIHYzID0gdjAgLSB2MzsKICAgIHYxID0gdjEgKyB2MiArIDEgPj4gMTsKICAgIHYyID0gdjEgLSB2MjsKICAgIHQgPSB2NCAqIGRjdFNpbjMgKyB2NyAqIGRjdENvczMgKyAyMDQ4ID4+IDEyOwogICAgdjQgPSB2NCAqIGRjdENvczMgLSB2NyAqIGRjdFNpbjMgKyAyMDQ4ID4+IDEyOwogICAgdjcgPSB0OwogICAgdCA9IHY1ICogZGN0U2luMSArIHY2ICogZGN0Q29zMSArIDIwNDggPj4gMTI7CiAgICB2NSA9IHY1ICogZGN0Q29zMSAtIHY2ICogZGN0U2luMSArIDIwNDggPj4gMTI7CiAgICB2NiA9IHQ7CiAgICBwW3Jvd10gPSB2MCArIHY3OwogICAgcFtyb3cgKyA3XSA9IHYwIC0gdjc7CiAgICBwW3JvdyArIDFdID0gdjEgKyB2NjsKICAgIHBbcm93ICsgNl0gPSB2MSAtIHY2OwogICAgcFtyb3cgKyAyXSA9IHYyICsgdjU7CiAgICBwW3JvdyArIDVdID0gdjIgLSB2NTsKICAgIHBbcm93ICsgM10gPSB2MyArIHY0OwogICAgcFtyb3cgKyA0XSA9IHYzIC0gdjQ7CiAgfQogIGZvciAobGV0IGNvbCA9IDA7IGNvbCA8IDg7ICsrY29sKSB7CiAgICBwMCA9IHBbY29sXTsKICAgIHAxID0gcFtjb2wgKyA4XTsKICAgIHAyID0gcFtjb2wgKyAxNl07CiAgICBwMyA9IHBbY29sICsgMjRdOwogICAgcDQgPSBwW2NvbCArIDMyXTsKICAgIHA1ID0gcFtjb2wgKyA0MF07CiAgICBwNiA9IHBbY29sICsgNDhdOwogICAgcDcgPSBwW2NvbCArIDU2XTsKICAgIGlmICgocDEgfCBwMiB8IHAzIHwgcDQgfCBwNSB8IHA2IHwgcDcpID09PSAwKSB7CiAgICAgIHQgPSBkY3RTcXJ0MiAqIHAwICsgODE5MiA+PiAxNDsKICAgICAgaWYgKHQgPCAtMjA0MCkgewogICAgICAgIHQgPSAwOwogICAgICB9IGVsc2UgaWYgKHQgPj0gMjAyNCkgewogICAgICAgIHQgPSAyNTU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdCA9IHQgKyAyMDU2ID4+IDQ7CiAgICAgIH0KICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sXSA9IHQ7CiAgICAgIGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIGNvbCArIDhdID0gdDsKICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgMTZdID0gdDsKICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgMjRdID0gdDsKICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgMzJdID0gdDsKICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgNDBdID0gdDsKICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgNDhdID0gdDsKICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgNTZdID0gdDsKICAgICAgY29udGludWU7CiAgICB9CiAgICB2MCA9IGRjdFNxcnQyICogcDAgKyAyMDQ4ID4+IDEyOwogICAgdjEgPSBkY3RTcXJ0MiAqIHA0ICsgMjA0OCA+PiAxMjsKICAgIHYyID0gcDI7CiAgICB2MyA9IHA2OwogICAgdjQgPSBkY3RTcXJ0MWQyICogKHAxIC0gcDcpICsgMjA0OCA+PiAxMjsKICAgIHY3ID0gZGN0U3FydDFkMiAqIChwMSArIHA3KSArIDIwNDggPj4gMTI7CiAgICB2NSA9IHAzOwogICAgdjYgPSBwNTsKICAgIHYwID0gKHYwICsgdjEgKyAxID4+IDEpICsgNDExMjsKICAgIHYxID0gdjAgLSB2MTsKICAgIHQgPSB2MiAqIGRjdFNpbjYgKyB2MyAqIGRjdENvczYgKyAyMDQ4ID4+IDEyOwogICAgdjIgPSB2MiAqIGRjdENvczYgLSB2MyAqIGRjdFNpbjYgKyAyMDQ4ID4+IDEyOwogICAgdjMgPSB0OwogICAgdjQgPSB2NCArIHY2ICsgMSA+PiAxOwogICAgdjYgPSB2NCAtIHY2OwogICAgdjcgPSB2NyArIHY1ICsgMSA+PiAxOwogICAgdjUgPSB2NyAtIHY1OwogICAgdjAgPSB2MCArIHYzICsgMSA+PiAxOwogICAgdjMgPSB2MCAtIHYzOwogICAgdjEgPSB2MSArIHYyICsgMSA+PiAxOwogICAgdjIgPSB2MSAtIHYyOwogICAgdCA9IHY0ICogZGN0U2luMyArIHY3ICogZGN0Q29zMyArIDIwNDggPj4gMTI7CiAgICB2NCA9IHY0ICogZGN0Q29zMyAtIHY3ICogZGN0U2luMyArIDIwNDggPj4gMTI7CiAgICB2NyA9IHQ7CiAgICB0ID0gdjUgKiBkY3RTaW4xICsgdjYgKiBkY3RDb3MxICsgMjA0OCA+PiAxMjsKICAgIHY1ID0gdjUgKiBkY3RDb3MxIC0gdjYgKiBkY3RTaW4xICsgMjA0OCA+PiAxMjsKICAgIHY2ID0gdDsKICAgIHAwID0gdjAgKyB2NzsKICAgIHA3ID0gdjAgLSB2NzsKICAgIHAxID0gdjEgKyB2NjsKICAgIHA2ID0gdjEgLSB2NjsKICAgIHAyID0gdjIgKyB2NTsKICAgIHA1ID0gdjIgLSB2NTsKICAgIHAzID0gdjMgKyB2NDsKICAgIHA0ID0gdjMgLSB2NDsKICAgIGlmIChwMCA8IDE2KSB7CiAgICAgIHAwID0gMDsKICAgIH0gZWxzZSBpZiAocDAgPj0gNDA4MCkgewogICAgICBwMCA9IDI1NTsKICAgIH0gZWxzZSB7CiAgICAgIHAwID4+PSA0OwogICAgfQogICAgaWYgKHAxIDwgMTYpIHsKICAgICAgcDEgPSAwOwogICAgfSBlbHNlIGlmIChwMSA+PSA0MDgwKSB7CiAgICAgIHAxID0gMjU1OwogICAgfSBlbHNlIHsKICAgICAgcDEgPj49IDQ7CiAgICB9CiAgICBpZiAocDIgPCAxNikgewogICAgICBwMiA9IDA7CiAgICB9IGVsc2UgaWYgKHAyID49IDQwODApIHsKICAgICAgcDIgPSAyNTU7CiAgICB9IGVsc2UgewogICAgICBwMiA+Pj0gNDsKICAgIH0KICAgIGlmIChwMyA8IDE2KSB7CiAgICAgIHAzID0gMDsKICAgIH0gZWxzZSBpZiAocDMgPj0gNDA4MCkgewogICAgICBwMyA9IDI1NTsKICAgIH0gZWxzZSB7CiAgICAgIHAzID4+PSA0OwogICAgfQogICAgaWYgKHA0IDwgMTYpIHsKICAgICAgcDQgPSAwOwogICAgfSBlbHNlIGlmIChwNCA+PSA0MDgwKSB7CiAgICAgIHA0ID0gMjU1OwogICAgfSBlbHNlIHsKICAgICAgcDQgPj49IDQ7CiAgICB9CiAgICBpZiAocDUgPCAxNikgewogICAgICBwNSA9IDA7CiAgICB9IGVsc2UgaWYgKHA1ID49IDQwODApIHsKICAgICAgcDUgPSAyNTU7CiAgICB9IGVsc2UgewogICAgICBwNSA+Pj0gNDsKICAgIH0KICAgIGlmIChwNiA8IDE2KSB7CiAgICAgIHA2ID0gMDsKICAgIH0gZWxzZSBpZiAocDYgPj0gNDA4MCkgewogICAgICBwNiA9IDI1NTsKICAgIH0gZWxzZSB7CiAgICAgIHA2ID4+PSA0OwogICAgfQogICAgaWYgKHA3IDwgMTYpIHsKICAgICAgcDcgPSAwOwogICAgfSBlbHNlIGlmIChwNyA+PSA0MDgwKSB7CiAgICAgIHA3ID0gMjU1OwogICAgfSBlbHNlIHsKICAgICAgcDcgPj49IDQ7CiAgICB9CiAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2xdID0gcDA7CiAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2wgKyA4XSA9IHAxOwogICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgMTZdID0gcDI7CiAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2wgKyAyNF0gPSBwMzsKICAgIGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIGNvbCArIDMyXSA9IHA0OwogICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgNDBdID0gcDU7CiAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2wgKyA0OF0gPSBwNjsKICAgIGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIGNvbCArIDU2XSA9IHA3OwogIH0KfQpmdW5jdGlvbiBidWlsZENvbXBvbmVudERhdGEoZnJhbWUsIGNvbXBvbmVudCkgewogIGNvbnN0IGJsb2Nrc1BlckxpbmUgPSBjb21wb25lbnQuYmxvY2tzUGVyTGluZTsKICBjb25zdCBibG9ja3NQZXJDb2x1bW4gPSBjb21wb25lbnQuYmxvY2tzUGVyQ29sdW1uOwogIGNvbnN0IGNvbXB1dGF0aW9uQnVmZmVyID0gbmV3IEludDE2QXJyYXkoNjQpOwogIGZvciAobGV0IGJsb2NrUm93ID0gMDsgYmxvY2tSb3cgPCBibG9ja3NQZXJDb2x1bW47IGJsb2NrUm93KyspIHsKICAgIGZvciAobGV0IGJsb2NrQ29sID0gMDsgYmxvY2tDb2wgPCBibG9ja3NQZXJMaW5lOyBibG9ja0NvbCsrKSB7CiAgICAgIGNvbnN0IG9mZnNldCA9IGdldEJsb2NrQnVmZmVyT2Zmc2V0KGNvbXBvbmVudCwgYmxvY2tSb3csIGJsb2NrQ29sKTsKICAgICAgcXVhbnRpemVBbmRJbnZlcnNlKGNvbXBvbmVudCwgb2Zmc2V0LCBjb21wdXRhdGlvbkJ1ZmZlcik7CiAgICB9CiAgfQogIHJldHVybiBjb21wb25lbnQuYmxvY2tEYXRhOwp9CmZ1bmN0aW9uIGZpbmROZXh0RmlsZU1hcmtlcihkYXRhLCBjdXJyZW50UG9zLCBzdGFydFBvcyA9IGN1cnJlbnRQb3MpIHsKICBjb25zdCBtYXhQb3MgPSBkYXRhLmxlbmd0aCAtIDE7CiAgbGV0IG5ld1BvcyA9IHN0YXJ0UG9zIDwgY3VycmVudFBvcyA/IHN0YXJ0UG9zIDogY3VycmVudFBvczsKICBpZiAoY3VycmVudFBvcyA+PSBtYXhQb3MpIHsKICAgIHJldHVybiBudWxsOwogIH0KICBjb25zdCBjdXJyZW50TWFya2VyID0gcmVhZFVpbnQxNihkYXRhLCBjdXJyZW50UG9zKTsKICBpZiAoY3VycmVudE1hcmtlciA+PSAweGZmYzAgJiYgY3VycmVudE1hcmtlciA8PSAweGZmZmUpIHsKICAgIHJldHVybiB7CiAgICAgIGludmFsaWQ6IG51bGwsCiAgICAgIG1hcmtlcjogY3VycmVudE1hcmtlciwKICAgICAgb2Zmc2V0OiBjdXJyZW50UG9zCiAgICB9OwogIH0KICBsZXQgbmV3TWFya2VyID0gcmVhZFVpbnQxNihkYXRhLCBuZXdQb3MpOwogIHdoaWxlICghKG5ld01hcmtlciA+PSAweGZmYzAgJiYgbmV3TWFya2VyIDw9IDB4ZmZmZSkpIHsKICAgIGlmICgrK25ld1BvcyA+PSBtYXhQb3MpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBuZXdNYXJrZXIgPSByZWFkVWludDE2KGRhdGEsIG5ld1Bvcyk7CiAgfQogIHJldHVybiB7CiAgICBpbnZhbGlkOiBjdXJyZW50TWFya2VyLnRvU3RyaW5nKDE2KSwKICAgIG1hcmtlcjogbmV3TWFya2VyLAogICAgb2Zmc2V0OiBuZXdQb3MKICB9Owp9CmZ1bmN0aW9uIHByZXBhcmVDb21wb25lbnRzKGZyYW1lKSB7CiAgY29uc3QgbWN1c1BlckxpbmUgPSBNYXRoLmNlaWwoZnJhbWUuc2FtcGxlc1BlckxpbmUgLyA4IC8gZnJhbWUubWF4SCk7CiAgY29uc3QgbWN1c1BlckNvbHVtbiA9IE1hdGguY2VpbChmcmFtZS5zY2FuTGluZXMgLyA4IC8gZnJhbWUubWF4Vik7CiAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgZnJhbWUuY29tcG9uZW50cykgewogICAgY29uc3QgYmxvY2tzUGVyTGluZSA9IE1hdGguY2VpbChNYXRoLmNlaWwoZnJhbWUuc2FtcGxlc1BlckxpbmUgLyA4KSAqIGNvbXBvbmVudC5oIC8gZnJhbWUubWF4SCk7CiAgICBjb25zdCBibG9ja3NQZXJDb2x1bW4gPSBNYXRoLmNlaWwoTWF0aC5jZWlsKGZyYW1lLnNjYW5MaW5lcyAvIDgpICogY29tcG9uZW50LnYgLyBmcmFtZS5tYXhWKTsKICAgIGNvbnN0IGJsb2Nrc1BlckxpbmVGb3JNY3UgPSBtY3VzUGVyTGluZSAqIGNvbXBvbmVudC5oOwogICAgY29uc3QgYmxvY2tzUGVyQ29sdW1uRm9yTWN1ID0gbWN1c1BlckNvbHVtbiAqIGNvbXBvbmVudC52OwogICAgY29uc3QgYmxvY2tzQnVmZmVyU2l6ZSA9IDY0ICogYmxvY2tzUGVyQ29sdW1uRm9yTWN1ICogKGJsb2Nrc1BlckxpbmVGb3JNY3UgKyAxKTsKICAgIGNvbXBvbmVudC5ibG9ja0RhdGEgPSBuZXcgSW50MTZBcnJheShibG9ja3NCdWZmZXJTaXplKTsKICAgIGNvbXBvbmVudC5ibG9ja3NQZXJMaW5lID0gYmxvY2tzUGVyTGluZTsKICAgIGNvbXBvbmVudC5ibG9ja3NQZXJDb2x1bW4gPSBibG9ja3NQZXJDb2x1bW47CiAgfQogIGZyYW1lLm1jdXNQZXJMaW5lID0gbWN1c1BlckxpbmU7CiAgZnJhbWUubWN1c1BlckNvbHVtbiA9IG1jdXNQZXJDb2x1bW47Cn0KZnVuY3Rpb24gcmVhZERhdGFCbG9jayhkYXRhLCBvZmZzZXQpIHsKICBjb25zdCBsZW5ndGggPSByZWFkVWludDE2KGRhdGEsIG9mZnNldCk7CiAgb2Zmc2V0ICs9IDI7CiAgbGV0IGVuZE9mZnNldCA9IG9mZnNldCArIGxlbmd0aCAtIDI7CiAgY29uc3QgZmlsZU1hcmtlciA9IGZpbmROZXh0RmlsZU1hcmtlcihkYXRhLCBlbmRPZmZzZXQsIG9mZnNldCk7CiAgaWYgKGZpbGVNYXJrZXI/LmludmFsaWQpIHsKICAgIHdhcm4oInJlYWREYXRhQmxvY2sgLSBpbmNvcnJlY3QgbGVuZ3RoLCBjdXJyZW50IG1hcmtlciBpczogIiArIGZpbGVNYXJrZXIuaW52YWxpZCk7CiAgICBlbmRPZmZzZXQgPSBmaWxlTWFya2VyLm9mZnNldDsKICB9CiAgY29uc3QgYXJyYXkgPSBkYXRhLnN1YmFycmF5KG9mZnNldCwgZW5kT2Zmc2V0KTsKICByZXR1cm4gewogICAgYXBwRGF0YTogYXJyYXksCiAgICBvbGRPZmZzZXQ6IG9mZnNldCwKICAgIG5ld09mZnNldDogb2Zmc2V0ICsgYXJyYXkubGVuZ3RoCiAgfTsKfQpmdW5jdGlvbiBza2lwRGF0YShkYXRhLCBvZmZzZXQpIHsKICBjb25zdCBsZW5ndGggPSByZWFkVWludDE2KGRhdGEsIG9mZnNldCk7CiAgb2Zmc2V0ICs9IDI7CiAgY29uc3QgZW5kT2Zmc2V0ID0gb2Zmc2V0ICsgbGVuZ3RoIC0gMjsKICBjb25zdCBmaWxlTWFya2VyID0gZmluZE5leHRGaWxlTWFya2VyKGRhdGEsIGVuZE9mZnNldCwgb2Zmc2V0KTsKICBpZiAoZmlsZU1hcmtlcj8uaW52YWxpZCkgewogICAgcmV0dXJuIGZpbGVNYXJrZXIub2Zmc2V0OwogIH0KICByZXR1cm4gZW5kT2Zmc2V0Owp9CmNsYXNzIEpwZWdJbWFnZSB7CiAgY29uc3RydWN0b3IoewogICAgZGVjb2RlVHJhbnNmb3JtID0gbnVsbCwKICAgIGNvbG9yVHJhbnNmb3JtID0gLTEKICB9ID0ge30pIHsKICAgIHRoaXMuX2RlY29kZVRyYW5zZm9ybSA9IGRlY29kZVRyYW5zZm9ybTsKICAgIHRoaXMuX2NvbG9yVHJhbnNmb3JtID0gY29sb3JUcmFuc2Zvcm07CiAgfQogIHN0YXRpYyBjYW5Vc2VJbWFnZURlY29kZXIoZGF0YSwgY29sb3JUcmFuc2Zvcm0gPSAtMSkgewogICAgbGV0IGV4aWZPZmZzZXRzID0gbnVsbDsKICAgIGxldCBvZmZzZXQgPSAwOwogICAgbGV0IG51bUNvbXBvbmVudHMgPSBudWxsOwogICAgbGV0IGZpbGVNYXJrZXIgPSByZWFkVWludDE2KGRhdGEsIG9mZnNldCk7CiAgICBvZmZzZXQgKz0gMjsKICAgIGlmIChmaWxlTWFya2VyICE9PSAweGZmZDgpIHsKICAgICAgdGhyb3cgbmV3IEpwZWdFcnJvcigiU09JIG5vdCBmb3VuZCIpOwogICAgfQogICAgZmlsZU1hcmtlciA9IHJlYWRVaW50MTYoZGF0YSwgb2Zmc2V0KTsKICAgIG9mZnNldCArPSAyOwogICAgbWFya2VyTG9vcDogd2hpbGUgKGZpbGVNYXJrZXIgIT09IDB4ZmZkOSkgewogICAgICBzd2l0Y2ggKGZpbGVNYXJrZXIpIHsKICAgICAgICBjYXNlIDB4ZmZlMToKICAgICAgICAgIGNvbnN0IHsKICAgICAgICAgICAgYXBwRGF0YSwKICAgICAgICAgICAgb2xkT2Zmc2V0LAogICAgICAgICAgICBuZXdPZmZzZXQKICAgICAgICAgIH0gPSByZWFkRGF0YUJsb2NrKGRhdGEsIG9mZnNldCk7CiAgICAgICAgICBvZmZzZXQgPSBuZXdPZmZzZXQ7CiAgICAgICAgICBpZiAoYXBwRGF0YVswXSA9PT0gMHg0NSAmJiBhcHBEYXRhWzFdID09PSAweDc4ICYmIGFwcERhdGFbMl0gPT09IDB4NjkgJiYgYXBwRGF0YVszXSA9PT0gMHg2NiAmJiBhcHBEYXRhWzRdID09PSAwICYmIGFwcERhdGFbNV0gPT09IDApIHsKICAgICAgICAgICAgaWYgKGV4aWZPZmZzZXRzKSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEpwZWdFcnJvcigiRHVwbGljYXRlIEVYSUYtYmxvY2tzIGZvdW5kLiIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGV4aWZPZmZzZXRzID0gewogICAgICAgICAgICAgIGV4aWZTdGFydDogb2xkT2Zmc2V0ICsgNiwKICAgICAgICAgICAgICBleGlmRW5kOiBuZXdPZmZzZXQKICAgICAgICAgICAgfTsKICAgICAgICAgIH0KICAgICAgICAgIGZpbGVNYXJrZXIgPSByZWFkVWludDE2KGRhdGEsIG9mZnNldCk7CiAgICAgICAgICBvZmZzZXQgKz0gMjsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIGNhc2UgMHhmZmMwOgogICAgICAgIGNhc2UgMHhmZmMxOgogICAgICAgIGNhc2UgMHhmZmMyOgogICAgICAgICAgbnVtQ29tcG9uZW50cyA9IGRhdGFbb2Zmc2V0ICsgKDIgKyAxICsgMiArIDIpXTsKICAgICAgICAgIGJyZWFrIG1hcmtlckxvb3A7CiAgICAgICAgY2FzZSAweGZmZmY6CiAgICAgICAgICBpZiAoZGF0YVtvZmZzZXRdICE9PSAweGZmKSB7CiAgICAgICAgICAgIG9mZnNldC0tOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgb2Zmc2V0ID0gc2tpcERhdGEoZGF0YSwgb2Zmc2V0KTsKICAgICAgZmlsZU1hcmtlciA9IHJlYWRVaW50MTYoZGF0YSwgb2Zmc2V0KTsKICAgICAgb2Zmc2V0ICs9IDI7CiAgICB9CiAgICBpZiAobnVtQ29tcG9uZW50cyA9PT0gNCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmIChudW1Db21wb25lbnRzID09PSAzICYmIGNvbG9yVHJhbnNmb3JtID09PSAwKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcmV0dXJuIGV4aWZPZmZzZXRzIHx8IHt9OwogIH0KICBwYXJzZShkYXRhLCB7CiAgICBkbmxTY2FuTGluZXMgPSBudWxsCiAgfSA9IHt9KSB7CiAgICBsZXQgb2Zmc2V0ID0gMDsKICAgIGxldCBqZmlmID0gbnVsbDsKICAgIGxldCBhZG9iZSA9IG51bGw7CiAgICBsZXQgZnJhbWUsIHJlc2V0SW50ZXJ2YWw7CiAgICBsZXQgbnVtU09TTWFya2VycyA9IDA7CiAgICBjb25zdCBxdWFudGl6YXRpb25UYWJsZXMgPSBbXTsKICAgIGNvbnN0IGh1ZmZtYW5UYWJsZXNBQyA9IFtdLAogICAgICBodWZmbWFuVGFibGVzREMgPSBbXTsKICAgIGxldCBmaWxlTWFya2VyID0gcmVhZFVpbnQxNihkYXRhLCBvZmZzZXQpOwogICAgb2Zmc2V0ICs9IDI7CiAgICBpZiAoZmlsZU1hcmtlciAhPT0gMHhmZmQ4KSB7CiAgICAgIHRocm93IG5ldyBKcGVnRXJyb3IoIlNPSSBub3QgZm91bmQiKTsKICAgIH0KICAgIGZpbGVNYXJrZXIgPSByZWFkVWludDE2KGRhdGEsIG9mZnNldCk7CiAgICBvZmZzZXQgKz0gMjsKICAgIG1hcmtlckxvb3A6IHdoaWxlIChmaWxlTWFya2VyICE9PSAweGZmZDkpIHsKICAgICAgbGV0IGksIGosIGw7CiAgICAgIHN3aXRjaCAoZmlsZU1hcmtlcikgewogICAgICAgIGNhc2UgMHhmZmUwOgogICAgICAgIGNhc2UgMHhmZmUxOgogICAgICAgIGNhc2UgMHhmZmUyOgogICAgICAgIGNhc2UgMHhmZmUzOgogICAgICAgIGNhc2UgMHhmZmU0OgogICAgICAgIGNhc2UgMHhmZmU1OgogICAgICAgIGNhc2UgMHhmZmU2OgogICAgICAgIGNhc2UgMHhmZmU3OgogICAgICAgIGNhc2UgMHhmZmU4OgogICAgICAgIGNhc2UgMHhmZmU5OgogICAgICAgIGNhc2UgMHhmZmVhOgogICAgICAgIGNhc2UgMHhmZmViOgogICAgICAgIGNhc2UgMHhmZmVjOgogICAgICAgIGNhc2UgMHhmZmVkOgogICAgICAgIGNhc2UgMHhmZmVlOgogICAgICAgIGNhc2UgMHhmZmVmOgogICAgICAgIGNhc2UgMHhmZmZlOgogICAgICAgICAgY29uc3QgewogICAgICAgICAgICBhcHBEYXRhLAogICAgICAgICAgICBuZXdPZmZzZXQKICAgICAgICAgIH0gPSByZWFkRGF0YUJsb2NrKGRhdGEsIG9mZnNldCk7CiAgICAgICAgICBvZmZzZXQgPSBuZXdPZmZzZXQ7CiAgICAgICAgICBpZiAoZmlsZU1hcmtlciA9PT0gMHhmZmUwKSB7CiAgICAgICAgICAgIGlmIChhcHBEYXRhWzBdID09PSAweDRhICYmIGFwcERhdGFbMV0gPT09IDB4NDYgJiYgYXBwRGF0YVsyXSA9PT0gMHg0OSAmJiBhcHBEYXRhWzNdID09PSAweDQ2ICYmIGFwcERhdGFbNF0gPT09IDApIHsKICAgICAgICAgICAgICBqZmlmID0gewogICAgICAgICAgICAgICAgdmVyc2lvbjogewogICAgICAgICAgICAgICAgICBtYWpvcjogYXBwRGF0YVs1XSwKICAgICAgICAgICAgICAgICAgbWlub3I6IGFwcERhdGFbNl0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBkZW5zaXR5VW5pdHM6IGFwcERhdGFbN10sCiAgICAgICAgICAgICAgICB4RGVuc2l0eTogYXBwRGF0YVs4XSA8PCA4IHwgYXBwRGF0YVs5XSwKICAgICAgICAgICAgICAgIHlEZW5zaXR5OiBhcHBEYXRhWzEwXSA8PCA4IHwgYXBwRGF0YVsxMV0sCiAgICAgICAgICAgICAgICB0aHVtYldpZHRoOiBhcHBEYXRhWzEyXSwKICAgICAgICAgICAgICAgIHRodW1iSGVpZ2h0OiBhcHBEYXRhWzEzXSwKICAgICAgICAgICAgICAgIHRodW1iRGF0YTogYXBwRGF0YS5zdWJhcnJheSgxNCwgMTQgKyAzICogYXBwRGF0YVsxMl0gKiBhcHBEYXRhWzEzXSkKICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZmlsZU1hcmtlciA9PT0gMHhmZmVlKSB7CiAgICAgICAgICAgIGlmIChhcHBEYXRhWzBdID09PSAweDQxICYmIGFwcERhdGFbMV0gPT09IDB4NjQgJiYgYXBwRGF0YVsyXSA9PT0gMHg2ZiAmJiBhcHBEYXRhWzNdID09PSAweDYyICYmIGFwcERhdGFbNF0gPT09IDB4NjUpIHsKICAgICAgICAgICAgICBhZG9iZSA9IHsKICAgICAgICAgICAgICAgIHZlcnNpb246IGFwcERhdGFbNV0gPDwgOCB8IGFwcERhdGFbNl0sCiAgICAgICAgICAgICAgICBmbGFnczA6IGFwcERhdGFbN10gPDwgOCB8IGFwcERhdGFbOF0sCiAgICAgICAgICAgICAgICBmbGFnczE6IGFwcERhdGFbOV0gPDwgOCB8IGFwcERhdGFbMTBdLAogICAgICAgICAgICAgICAgdHJhbnNmb3JtQ29kZTogYXBwRGF0YVsxMV0KICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDB4ZmZkYjoKICAgICAgICAgIGNvbnN0IHF1YW50aXphdGlvblRhYmxlc0xlbmd0aCA9IHJlYWRVaW50MTYoZGF0YSwgb2Zmc2V0KTsKICAgICAgICAgIG9mZnNldCArPSAyOwogICAgICAgICAgY29uc3QgcXVhbnRpemF0aW9uVGFibGVzRW5kID0gcXVhbnRpemF0aW9uVGFibGVzTGVuZ3RoICsgb2Zmc2V0IC0gMjsKICAgICAgICAgIGxldCB6OwogICAgICAgICAgd2hpbGUgKG9mZnNldCA8IHF1YW50aXphdGlvblRhYmxlc0VuZCkgewogICAgICAgICAgICBjb25zdCBxdWFudGl6YXRpb25UYWJsZVNwZWMgPSBkYXRhW29mZnNldCsrXTsKICAgICAgICAgICAgY29uc3QgdGFibGVEYXRhID0gbmV3IFVpbnQxNkFycmF5KDY0KTsKICAgICAgICAgICAgaWYgKHF1YW50aXphdGlvblRhYmxlU3BlYyA+PiA0ID09PSAwKSB7CiAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IDY0OyBqKyspIHsKICAgICAgICAgICAgICAgIHogPSBkY3RaaWdaYWdbal07CiAgICAgICAgICAgICAgICB0YWJsZURhdGFbel0gPSBkYXRhW29mZnNldCsrXTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAocXVhbnRpemF0aW9uVGFibGVTcGVjID4+IDQgPT09IDEpIHsKICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgNjQ7IGorKykgewogICAgICAgICAgICAgICAgeiA9IGRjdFppZ1phZ1tqXTsKICAgICAgICAgICAgICAgIHRhYmxlRGF0YVt6XSA9IHJlYWRVaW50MTYoZGF0YSwgb2Zmc2V0KTsKICAgICAgICAgICAgICAgIG9mZnNldCArPSAyOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgSnBlZ0Vycm9yKCJEUVQgLSBpbnZhbGlkIHRhYmxlIHNwZWMiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBxdWFudGl6YXRpb25UYWJsZXNbcXVhbnRpemF0aW9uVGFibGVTcGVjICYgMTVdID0gdGFibGVEYXRhOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAweGZmYzA6CiAgICAgICAgY2FzZSAweGZmYzE6CiAgICAgICAgY2FzZSAweGZmYzI6CiAgICAgICAgICBpZiAoZnJhbWUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEpwZWdFcnJvcigiT25seSBzaW5nbGUgZnJhbWUgSlBFR3Mgc3VwcG9ydGVkIik7CiAgICAgICAgICB9CiAgICAgICAgICBvZmZzZXQgKz0gMjsKICAgICAgICAgIGZyYW1lID0ge307CiAgICAgICAgICBmcmFtZS5leHRlbmRlZCA9IGZpbGVNYXJrZXIgPT09IDB4ZmZjMTsKICAgICAgICAgIGZyYW1lLnByb2dyZXNzaXZlID0gZmlsZU1hcmtlciA9PT0gMHhmZmMyOwogICAgICAgICAgZnJhbWUucHJlY2lzaW9uID0gZGF0YVtvZmZzZXQrK107CiAgICAgICAgICBjb25zdCBzb2ZTY2FuTGluZXMgPSByZWFkVWludDE2KGRhdGEsIG9mZnNldCk7CiAgICAgICAgICBvZmZzZXQgKz0gMjsKICAgICAgICAgIGZyYW1lLnNjYW5MaW5lcyA9IGRubFNjYW5MaW5lcyB8fCBzb2ZTY2FuTGluZXM7CiAgICAgICAgICBmcmFtZS5zYW1wbGVzUGVyTGluZSA9IHJlYWRVaW50MTYoZGF0YSwgb2Zmc2V0KTsKICAgICAgICAgIG9mZnNldCArPSAyOwogICAgICAgICAgZnJhbWUuY29tcG9uZW50cyA9IFtdOwogICAgICAgICAgZnJhbWUuY29tcG9uZW50SWRzID0ge307CiAgICAgICAgICBjb25zdCBjb21wb25lbnRzQ291bnQgPSBkYXRhW29mZnNldCsrXTsKICAgICAgICAgIGxldCBtYXhIID0gMCwKICAgICAgICAgICAgbWF4ViA9IDA7CiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29tcG9uZW50c0NvdW50OyBpKyspIHsKICAgICAgICAgICAgY29uc3QgY29tcG9uZW50SWQgPSBkYXRhW29mZnNldF07CiAgICAgICAgICAgIGNvbnN0IGggPSBkYXRhW29mZnNldCArIDFdID4+IDQ7CiAgICAgICAgICAgIGNvbnN0IHYgPSBkYXRhW29mZnNldCArIDFdICYgMTU7CiAgICAgICAgICAgIGlmIChtYXhIIDwgaCkgewogICAgICAgICAgICAgIG1heEggPSBoOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChtYXhWIDwgdikgewogICAgICAgICAgICAgIG1heFYgPSB2OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbnN0IHFJZCA9IGRhdGFbb2Zmc2V0ICsgMl07CiAgICAgICAgICAgIGwgPSBmcmFtZS5jb21wb25lbnRzLnB1c2goewogICAgICAgICAgICAgIGgsCiAgICAgICAgICAgICAgdiwKICAgICAgICAgICAgICBxdWFudGl6YXRpb25JZDogcUlkLAogICAgICAgICAgICAgIHF1YW50aXphdGlvblRhYmxlOiBudWxsCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBmcmFtZS5jb21wb25lbnRJZHNbY29tcG9uZW50SWRdID0gbCAtIDE7CiAgICAgICAgICAgIG9mZnNldCArPSAzOwogICAgICAgICAgfQogICAgICAgICAgZnJhbWUubWF4SCA9IG1heEg7CiAgICAgICAgICBmcmFtZS5tYXhWID0gbWF4VjsKICAgICAgICAgIHByZXBhcmVDb21wb25lbnRzKGZyYW1lKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMHhmZmM0OgogICAgICAgICAgY29uc3QgaHVmZm1hbkxlbmd0aCA9IHJlYWRVaW50MTYoZGF0YSwgb2Zmc2V0KTsKICAgICAgICAgIG9mZnNldCArPSAyOwogICAgICAgICAgZm9yIChpID0gMjsgaSA8IGh1ZmZtYW5MZW5ndGg7KSB7CiAgICAgICAgICAgIGNvbnN0IGh1ZmZtYW5UYWJsZVNwZWMgPSBkYXRhW29mZnNldCsrXTsKICAgICAgICAgICAgY29uc3QgY29kZUxlbmd0aHMgPSBuZXcgVWludDhBcnJheSgxNik7CiAgICAgICAgICAgIGxldCBjb2RlTGVuZ3RoU3VtID0gMDsKICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IDE2OyBqKyssIG9mZnNldCsrKSB7CiAgICAgICAgICAgICAgY29kZUxlbmd0aFN1bSArPSBjb2RlTGVuZ3Roc1tqXSA9IGRhdGFbb2Zmc2V0XTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCBodWZmbWFuVmFsdWVzID0gbmV3IFVpbnQ4QXJyYXkoY29kZUxlbmd0aFN1bSk7CiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBjb2RlTGVuZ3RoU3VtOyBqKyssIG9mZnNldCsrKSB7CiAgICAgICAgICAgICAgaHVmZm1hblZhbHVlc1tqXSA9IGRhdGFbb2Zmc2V0XTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpICs9IDE3ICsgY29kZUxlbmd0aFN1bTsKICAgICAgICAgICAgKGh1ZmZtYW5UYWJsZVNwZWMgPj4gNCA9PT0gMCA/IGh1ZmZtYW5UYWJsZXNEQyA6IGh1ZmZtYW5UYWJsZXNBQylbaHVmZm1hblRhYmxlU3BlYyAmIDE1XSA9IGJ1aWxkSHVmZm1hblRhYmxlKGNvZGVMZW5ndGhzLCBodWZmbWFuVmFsdWVzKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMHhmZmRkOgogICAgICAgICAgb2Zmc2V0ICs9IDI7CiAgICAgICAgICByZXNldEludGVydmFsID0gcmVhZFVpbnQxNihkYXRhLCBvZmZzZXQpOwogICAgICAgICAgb2Zmc2V0ICs9IDI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDB4ZmZkYToKICAgICAgICAgIGNvbnN0IHBhcnNlRE5MTWFya2VyID0gKytudW1TT1NNYXJrZXJzID09PSAxICYmICFkbmxTY2FuTGluZXM7CiAgICAgICAgICBvZmZzZXQgKz0gMjsKICAgICAgICAgIGNvbnN0IHNlbGVjdG9yc0NvdW50ID0gZGF0YVtvZmZzZXQrK10sCiAgICAgICAgICAgIGNvbXBvbmVudHMgPSBbXTsKICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzZWxlY3RvcnNDb3VudDsgaSsrKSB7CiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZGF0YVtvZmZzZXQrK107CiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudEluZGV4ID0gZnJhbWUuY29tcG9uZW50SWRzW2luZGV4XTsKICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gZnJhbWUuY29tcG9uZW50c1tjb21wb25lbnRJbmRleF07CiAgICAgICAgICAgIGNvbXBvbmVudC5pbmRleCA9IGluZGV4OwogICAgICAgICAgICBjb25zdCB0YWJsZVNwZWMgPSBkYXRhW29mZnNldCsrXTsKICAgICAgICAgICAgY29tcG9uZW50Lmh1ZmZtYW5UYWJsZURDID0gaHVmZm1hblRhYmxlc0RDW3RhYmxlU3BlYyA+PiA0XTsKICAgICAgICAgICAgY29tcG9uZW50Lmh1ZmZtYW5UYWJsZUFDID0gaHVmZm1hblRhYmxlc0FDW3RhYmxlU3BlYyAmIDE1XTsKICAgICAgICAgICAgY29tcG9uZW50cy5wdXNoKGNvbXBvbmVudCk7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBzcGVjdHJhbFN0YXJ0ID0gZGF0YVtvZmZzZXQrK10sCiAgICAgICAgICAgIHNwZWN0cmFsRW5kID0gZGF0YVtvZmZzZXQrK10sCiAgICAgICAgICAgIHN1Y2Nlc3NpdmVBcHByb3hpbWF0aW9uID0gZGF0YVtvZmZzZXQrK107CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCBwcm9jZXNzZWQgPSBkZWNvZGVTY2FuKGRhdGEsIG9mZnNldCwgZnJhbWUsIGNvbXBvbmVudHMsIHJlc2V0SW50ZXJ2YWwsIHNwZWN0cmFsU3RhcnQsIHNwZWN0cmFsRW5kLCBzdWNjZXNzaXZlQXBwcm94aW1hdGlvbiA+PiA0LCBzdWNjZXNzaXZlQXBwcm94aW1hdGlvbiAmIDE1LCBwYXJzZUROTE1hcmtlcik7CiAgICAgICAgICAgIG9mZnNldCArPSBwcm9jZXNzZWQ7CiAgICAgICAgICB9IGNhdGNoIChleCkgewogICAgICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBETkxNYXJrZXJFcnJvcikgewogICAgICAgICAgICAgIHdhcm4oYCR7ZXgubWVzc2FnZX0gLS0gYXR0ZW1wdGluZyB0byByZS1wYXJzZSB0aGUgSlBFRyBpbWFnZS5gKTsKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZShkYXRhLCB7CiAgICAgICAgICAgICAgICBkbmxTY2FuTGluZXM6IGV4LnNjYW5MaW5lcwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9IGVsc2UgaWYgKGV4IGluc3RhbmNlb2YgRU9JTWFya2VyRXJyb3IpIHsKICAgICAgICAgICAgICB3YXJuKGAke2V4Lm1lc3NhZ2V9IC0tIGlnbm9yaW5nIHRoZSByZXN0IG9mIHRoZSBpbWFnZSBkYXRhLmApOwogICAgICAgICAgICAgIGJyZWFrIG1hcmtlckxvb3A7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhyb3cgZXg7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDB4ZmZkYzoKICAgICAgICAgIG9mZnNldCArPSA0OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAweGZmZmY6CiAgICAgICAgICBpZiAoZGF0YVtvZmZzZXRdICE9PSAweGZmKSB7CiAgICAgICAgICAgIG9mZnNldC0tOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGNvbnN0IG5leHRGaWxlTWFya2VyID0gZmluZE5leHRGaWxlTWFya2VyKGRhdGEsIG9mZnNldCAtIDIsIG9mZnNldCAtIDMpOwogICAgICAgICAgaWYgKG5leHRGaWxlTWFya2VyPy5pbnZhbGlkKSB7CiAgICAgICAgICAgIHdhcm4oIkpwZWdJbWFnZS5wYXJzZSAtIHVuZXhwZWN0ZWQgZGF0YSwgY3VycmVudCBtYXJrZXIgaXM6ICIgKyBuZXh0RmlsZU1hcmtlci5pbnZhbGlkKTsKICAgICAgICAgICAgb2Zmc2V0ID0gbmV4dEZpbGVNYXJrZXIub2Zmc2V0OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghbmV4dEZpbGVNYXJrZXIgfHwgb2Zmc2V0ID49IGRhdGEubGVuZ3RoIC0gMSkgewogICAgICAgICAgICB3YXJuKCJKcGVnSW1hZ2UucGFyc2UgLSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGltYWdlIGRhdGEgIiArICJ3aXRob3V0IGZpbmRpbmcgYW4gRU9JIG1hcmtlciAoMHhGRkQ5KS4iKTsKICAgICAgICAgICAgYnJlYWsgbWFya2VyTG9vcDsKICAgICAgICAgIH0KICAgICAgICAgIHRocm93IG5ldyBKcGVnRXJyb3IoIkpwZWdJbWFnZS5wYXJzZSAtIHVua25vd24gbWFya2VyOiAiICsgZmlsZU1hcmtlci50b1N0cmluZygxNikpOwogICAgICB9CiAgICAgIGZpbGVNYXJrZXIgPSByZWFkVWludDE2KGRhdGEsIG9mZnNldCk7CiAgICAgIG9mZnNldCArPSAyOwogICAgfQogICAgaWYgKCFmcmFtZSkgewogICAgICB0aHJvdyBuZXcgSnBlZ0Vycm9yKCJKcGVnSW1hZ2UucGFyc2UgLSBubyBmcmFtZSBkYXRhIGZvdW5kLiIpOwogICAgfQogICAgdGhpcy53aWR0aCA9IGZyYW1lLnNhbXBsZXNQZXJMaW5lOwogICAgdGhpcy5oZWlnaHQgPSBmcmFtZS5zY2FuTGluZXM7CiAgICB0aGlzLmpmaWYgPSBqZmlmOwogICAgdGhpcy5hZG9iZSA9IGFkb2JlOwogICAgdGhpcy5jb21wb25lbnRzID0gW107CiAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBmcmFtZS5jb21wb25lbnRzKSB7CiAgICAgIGNvbnN0IHF1YW50aXphdGlvblRhYmxlID0gcXVhbnRpemF0aW9uVGFibGVzW2NvbXBvbmVudC5xdWFudGl6YXRpb25JZF07CiAgICAgIGlmIChxdWFudGl6YXRpb25UYWJsZSkgewogICAgICAgIGNvbXBvbmVudC5xdWFudGl6YXRpb25UYWJsZSA9IHF1YW50aXphdGlvblRhYmxlOwogICAgICB9CiAgICAgIHRoaXMuY29tcG9uZW50cy5wdXNoKHsKICAgICAgICBpbmRleDogY29tcG9uZW50LmluZGV4LAogICAgICAgIG91dHB1dDogYnVpbGRDb21wb25lbnREYXRhKGZyYW1lLCBjb21wb25lbnQpLAogICAgICAgIHNjYWxlWDogY29tcG9uZW50LmggLyBmcmFtZS5tYXhILAogICAgICAgIHNjYWxlWTogY29tcG9uZW50LnYgLyBmcmFtZS5tYXhWLAogICAgICAgIGJsb2Nrc1BlckxpbmU6IGNvbXBvbmVudC5ibG9ja3NQZXJMaW5lLAogICAgICAgIGJsb2Nrc1BlckNvbHVtbjogY29tcG9uZW50LmJsb2Nrc1BlckNvbHVtbgogICAgICB9KTsKICAgIH0KICAgIHRoaXMubnVtQ29tcG9uZW50cyA9IHRoaXMuY29tcG9uZW50cy5sZW5ndGg7CiAgICByZXR1cm4gdW5kZWZpbmVkOwogIH0KICBfZ2V0TGluZWFyaXplZEJsb2NrRGF0YSh3aWR0aCwgaGVpZ2h0LCBpc1NvdXJjZVBERiA9IGZhbHNlKSB7CiAgICBjb25zdCBzY2FsZVggPSB0aGlzLndpZHRoIC8gd2lkdGgsCiAgICAgIHNjYWxlWSA9IHRoaXMuaGVpZ2h0IC8gaGVpZ2h0OwogICAgbGV0IGNvbXBvbmVudCwgY29tcG9uZW50U2NhbGVYLCBjb21wb25lbnRTY2FsZVksIGJsb2Nrc1BlclNjYW5saW5lOwogICAgbGV0IHgsIHksIGksIGosIGs7CiAgICBsZXQgaW5kZXg7CiAgICBsZXQgb2Zmc2V0ID0gMDsKICAgIGxldCBvdXRwdXQ7CiAgICBjb25zdCBudW1Db21wb25lbnRzID0gdGhpcy5jb21wb25lbnRzLmxlbmd0aDsKICAgIGNvbnN0IGRhdGFMZW5ndGggPSB3aWR0aCAqIGhlaWdodCAqIG51bUNvbXBvbmVudHM7CiAgICBjb25zdCBkYXRhID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGRhdGFMZW5ndGgpOwogICAgY29uc3QgeFNjYWxlQmxvY2tPZmZzZXQgPSBuZXcgVWludDMyQXJyYXkod2lkdGgpOwogICAgY29uc3QgbWFzazNMU0IgPSAweGZmZmZmZmY4OwogICAgbGV0IGxhc3RDb21wb25lbnRTY2FsZVg7CiAgICBmb3IgKGkgPSAwOyBpIDwgbnVtQ29tcG9uZW50czsgaSsrKSB7CiAgICAgIGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50c1tpXTsKICAgICAgY29tcG9uZW50U2NhbGVYID0gY29tcG9uZW50LnNjYWxlWCAqIHNjYWxlWDsKICAgICAgY29tcG9uZW50U2NhbGVZID0gY29tcG9uZW50LnNjYWxlWSAqIHNjYWxlWTsKICAgICAgb2Zmc2V0ID0gaTsKICAgICAgb3V0cHV0ID0gY29tcG9uZW50Lm91dHB1dDsKICAgICAgYmxvY2tzUGVyU2NhbmxpbmUgPSBjb21wb25lbnQuYmxvY2tzUGVyTGluZSArIDEgPDwgMzsKICAgICAgaWYgKGNvbXBvbmVudFNjYWxlWCAhPT0gbGFzdENvbXBvbmVudFNjYWxlWCkgewogICAgICAgIGZvciAoeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7CiAgICAgICAgICBqID0gMCB8IHggKiBjb21wb25lbnRTY2FsZVg7CiAgICAgICAgICB4U2NhbGVCbG9ja09mZnNldFt4XSA9IChqICYgbWFzazNMU0IpIDw8IDMgfCBqICYgNzsKICAgICAgICB9CiAgICAgICAgbGFzdENvbXBvbmVudFNjYWxlWCA9IGNvbXBvbmVudFNjYWxlWDsKICAgICAgfQogICAgICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKICAgICAgICBqID0gMCB8IHkgKiBjb21wb25lbnRTY2FsZVk7CiAgICAgICAgaW5kZXggPSBibG9ja3NQZXJTY2FubGluZSAqIChqICYgbWFzazNMU0IpIHwgKGogJiA3KSA8PCAzOwogICAgICAgIGZvciAoeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7CiAgICAgICAgICBkYXRhW29mZnNldF0gPSBvdXRwdXRbaW5kZXggKyB4U2NhbGVCbG9ja09mZnNldFt4XV07CiAgICAgICAgICBvZmZzZXQgKz0gbnVtQ29tcG9uZW50czsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGxldCB0cmFuc2Zvcm0gPSB0aGlzLl9kZWNvZGVUcmFuc2Zvcm07CiAgICBpZiAoIWlzU291cmNlUERGICYmIG51bUNvbXBvbmVudHMgPT09IDQgJiYgIXRyYW5zZm9ybSkgewogICAgICB0cmFuc2Zvcm0gPSBuZXcgSW50MzJBcnJheShbLTI1NiwgMjU1LCAtMjU2LCAyNTUsIC0yNTYsIDI1NSwgLTI1NiwgMjU1XSk7CiAgICB9CiAgICBpZiAodHJhbnNmb3JtKSB7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBkYXRhTGVuZ3RoOykgewogICAgICAgIGZvciAoaiA9IDAsIGsgPSAwOyBqIDwgbnVtQ29tcG9uZW50czsgaisrLCBpKyssIGsgKz0gMikgewogICAgICAgICAgZGF0YVtpXSA9IChkYXRhW2ldICogdHJhbnNmb3JtW2tdID4+IDgpICsgdHJhbnNmb3JtW2sgKyAxXTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBkYXRhOwogIH0KICBnZXQgX2lzQ29sb3JDb252ZXJzaW9uTmVlZGVkKCkgewogICAgaWYgKHRoaXMuYWRvYmUpIHsKICAgICAgcmV0dXJuICEhdGhpcy5hZG9iZS50cmFuc2Zvcm1Db2RlOwogICAgfQogICAgaWYgKHRoaXMubnVtQ29tcG9uZW50cyA9PT0gMykgewogICAgICBpZiAodGhpcy5fY29sb3JUcmFuc2Zvcm0gPT09IDApIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb21wb25lbnRzWzBdLmluZGV4ID09PSAweDUyICYmIHRoaXMuY29tcG9uZW50c1sxXS5pbmRleCA9PT0gMHg0NyAmJiB0aGlzLmNvbXBvbmVudHNbMl0uaW5kZXggPT09IDB4NDIpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAodGhpcy5fY29sb3JUcmFuc2Zvcm0gPT09IDEpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIF9jb252ZXJ0WWNjVG9SZ2IoZGF0YSkgewogICAgbGV0IFksIENiLCBDcjsKICAgIGZvciAobGV0IGkgPSAwLCBsZW5ndGggPSBkYXRhLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSArPSAzKSB7CiAgICAgIFkgPSBkYXRhW2ldOwogICAgICBDYiA9IGRhdGFbaSArIDFdOwogICAgICBDciA9IGRhdGFbaSArIDJdOwogICAgICBkYXRhW2ldID0gWSAtIDE3OS40NTYgKyAxLjQwMiAqIENyOwogICAgICBkYXRhW2kgKyAxXSA9IFkgKyAxMzUuNDU5IC0gMC4zNDQgKiBDYiAtIDAuNzE0ICogQ3I7CiAgICAgIGRhdGFbaSArIDJdID0gWSAtIDIyNi44MTYgKyAxLjc3MiAqIENiOwogICAgfQogICAgcmV0dXJuIGRhdGE7CiAgfQogIF9jb252ZXJ0WWNjVG9SZ2JhKGRhdGEsIG91dCkgewogICAgZm9yIChsZXQgaSA9IDAsIGogPSAwLCBsZW5ndGggPSBkYXRhLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSArPSAzLCBqICs9IDQpIHsKICAgICAgY29uc3QgWSA9IGRhdGFbaV07CiAgICAgIGNvbnN0IENiID0gZGF0YVtpICsgMV07CiAgICAgIGNvbnN0IENyID0gZGF0YVtpICsgMl07CiAgICAgIG91dFtqXSA9IFkgLSAxNzkuNDU2ICsgMS40MDIgKiBDcjsKICAgICAgb3V0W2ogKyAxXSA9IFkgKyAxMzUuNDU5IC0gMC4zNDQgKiBDYiAtIDAuNzE0ICogQ3I7CiAgICAgIG91dFtqICsgMl0gPSBZIC0gMjI2LjgxNiArIDEuNzcyICogQ2I7CiAgICAgIG91dFtqICsgM10gPSAyNTU7CiAgICB9CiAgICByZXR1cm4gb3V0OwogIH0KICBfY29udmVydFljY2tUb1JnYihkYXRhKSB7CiAgICB0aGlzLl9jb252ZXJ0WWNja1RvQ215ayhkYXRhKTsKICAgIHJldHVybiB0aGlzLl9jb252ZXJ0Q215a1RvUmdiKGRhdGEpOwogIH0KICBfY29udmVydFljY2tUb1JnYmEoZGF0YSkgewogICAgdGhpcy5fY29udmVydFljY2tUb0NteWsoZGF0YSk7CiAgICByZXR1cm4gdGhpcy5fY29udmVydENteWtUb1JnYmEoZGF0YSk7CiAgfQogIF9jb252ZXJ0WWNja1RvQ215ayhkYXRhKSB7CiAgICBsZXQgWSwgQ2IsIENyOwogICAgZm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IGRhdGEubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpICs9IDQpIHsKICAgICAgWSA9IGRhdGFbaV07CiAgICAgIENiID0gZGF0YVtpICsgMV07CiAgICAgIENyID0gZGF0YVtpICsgMl07CiAgICAgIGRhdGFbaV0gPSA0MzQuNDU2IC0gWSAtIDEuNDAyICogQ3I7CiAgICAgIGRhdGFbaSArIDFdID0gMTE5LjU0MSAtIFkgKyAwLjM0NCAqIENiICsgMC43MTQgKiBDcjsKICAgICAgZGF0YVtpICsgMl0gPSA0ODEuODE2IC0gWSAtIDEuNzcyICogQ2I7CiAgICB9CiAgICByZXR1cm4gZGF0YTsKICB9CiAgX2NvbnZlcnRDbXlrVG9SZ2IoZGF0YSkgewogICAgY29uc3QgY291bnQgPSBkYXRhLmxlbmd0aCAvIDQ7CiAgICBDb2xvclNwYWNlVXRpbHMuY215ay5nZXRSZ2JCdWZmZXIoZGF0YSwgMCwgY291bnQsIGRhdGEsIDAsIDgsIDApOwogICAgcmV0dXJuIGRhdGEuc3ViYXJyYXkoMCwgY291bnQgKiAzKTsKICB9CiAgX2NvbnZlcnRDbXlrVG9SZ2JhKGRhdGEpIHsKICAgIENvbG9yU3BhY2VVdGlscy5jbXlrLmdldFJnYkJ1ZmZlcihkYXRhLCAwLCBkYXRhLmxlbmd0aCAvIDQsIGRhdGEsIDAsIDgsIDEpOwogICAgaWYgKENvbG9yU3BhY2VVdGlscy5jbXlrIGluc3RhbmNlb2YgRGV2aWNlQ215a0NTKSB7CiAgICAgIGZvciAobGV0IGkgPSAzLCBpaSA9IGRhdGEubGVuZ3RoOyBpIDwgaWk7IGkgKz0gNCkgewogICAgICAgIGRhdGFbaV0gPSAyNTU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBkYXRhOwogIH0KICBnZXREYXRhKHsKICAgIHdpZHRoLAogICAgaGVpZ2h0LAogICAgZm9yY2VSR0JBID0gZmFsc2UsCiAgICBmb3JjZVJHQiA9IGZhbHNlLAogICAgaXNTb3VyY2VQREYgPSBmYWxzZQogIH0pIHsKICAgIGlmICh0aGlzLm51bUNvbXBvbmVudHMgPiA0KSB7CiAgICAgIHRocm93IG5ldyBKcGVnRXJyb3IoIlVuc3VwcG9ydGVkIGNvbG9yIG1vZGUiKTsKICAgIH0KICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9nZXRMaW5lYXJpemVkQmxvY2tEYXRhKHdpZHRoLCBoZWlnaHQsIGlzU291cmNlUERGKTsKICAgIGlmICh0aGlzLm51bUNvbXBvbmVudHMgPT09IDEgJiYgKGZvcmNlUkdCQSB8fCBmb3JjZVJHQikpIHsKICAgICAgY29uc3QgbGVuID0gZGF0YS5sZW5ndGggKiAoZm9yY2VSR0JBID8gNCA6IDMpOwogICAgICBjb25zdCByZ2JhRGF0YSA9IG5ldyBVaW50OENsYW1wZWRBcnJheShsZW4pOwogICAgICBsZXQgb2Zmc2V0ID0gMDsKICAgICAgaWYgKGZvcmNlUkdCQSkgewogICAgICAgIGdyYXlUb1JHQkEoZGF0YSwgbmV3IFVpbnQzMkFycmF5KHJnYmFEYXRhLmJ1ZmZlcikpOwogICAgICB9IGVsc2UgewogICAgICAgIGZvciAoY29uc3QgZ3JheUNvbG9yIG9mIGRhdGEpIHsKICAgICAgICAgIHJnYmFEYXRhW29mZnNldCsrXSA9IGdyYXlDb2xvcjsKICAgICAgICAgIHJnYmFEYXRhW29mZnNldCsrXSA9IGdyYXlDb2xvcjsKICAgICAgICAgIHJnYmFEYXRhW29mZnNldCsrXSA9IGdyYXlDb2xvcjsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHJnYmFEYXRhOwogICAgfSBlbHNlIGlmICh0aGlzLm51bUNvbXBvbmVudHMgPT09IDMgJiYgdGhpcy5faXNDb2xvckNvbnZlcnNpb25OZWVkZWQpIHsKICAgICAgaWYgKGZvcmNlUkdCQSkgewogICAgICAgIGNvbnN0IHJnYmFEYXRhID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGRhdGEubGVuZ3RoIC8gMyAqIDQpOwogICAgICAgIHJldHVybiB0aGlzLl9jb252ZXJ0WWNjVG9SZ2JhKGRhdGEsIHJnYmFEYXRhKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5fY29udmVydFljY1RvUmdiKGRhdGEpOwogICAgfSBlbHNlIGlmICh0aGlzLm51bUNvbXBvbmVudHMgPT09IDQpIHsKICAgICAgaWYgKHRoaXMuX2lzQ29sb3JDb252ZXJzaW9uTmVlZGVkKSB7CiAgICAgICAgaWYgKGZvcmNlUkdCQSkgewogICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnZlcnRZY2NrVG9SZ2JhKGRhdGEpOwogICAgICAgIH0KICAgICAgICBpZiAoZm9yY2VSR0IpIHsKICAgICAgICAgIHJldHVybiB0aGlzLl9jb252ZXJ0WWNja1RvUmdiKGRhdGEpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpcy5fY29udmVydFljY2tUb0NteWsoZGF0YSk7CiAgICAgIH0gZWxzZSBpZiAoZm9yY2VSR0JBKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnZlcnRDbXlrVG9SZ2JhKGRhdGEpOwogICAgICB9IGVsc2UgaWYgKGZvcmNlUkdCKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnZlcnRDbXlrVG9SZ2IoZGF0YSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBkYXRhOwogIH0KfQoKOy8vIC4vc3JjL2NvcmUvanBlZ19zdHJlYW0uanMKCgoKCmNsYXNzIEpwZWdTdHJlYW0gZXh0ZW5kcyBEZWNvZGVTdHJlYW0gewogIHN0YXRpYyAjaXNJbWFnZURlY29kZXJTdXBwb3J0ZWQgPSBGZWF0dXJlVGVzdC5pc0ltYWdlRGVjb2RlclN1cHBvcnRlZDsKICBjb25zdHJ1Y3RvcihzdHJlYW0sIG1heWJlTGVuZ3RoLCBwYXJhbXMpIHsKICAgIHN1cGVyKG1heWJlTGVuZ3RoKTsKICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtOwogICAgdGhpcy5kaWN0ID0gc3RyZWFtLmRpY3Q7CiAgICB0aGlzLm1heWJlTGVuZ3RoID0gbWF5YmVMZW5ndGg7CiAgICB0aGlzLnBhcmFtcyA9IHBhcmFtczsKICB9CiAgc3RhdGljIGdldCBjYW5Vc2VJbWFnZURlY29kZXIoKSB7CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJjYW5Vc2VJbWFnZURlY29kZXIiLCB0aGlzLiNpc0ltYWdlRGVjb2RlclN1cHBvcnRlZCA/IEltYWdlRGVjb2Rlci5pc1R5cGVTdXBwb3J0ZWQoImltYWdlL2pwZWciKSA6IFByb21pc2UucmVzb2x2ZShmYWxzZSkpOwogIH0KICBzdGF0aWMgc2V0T3B0aW9ucyh7CiAgICBpc0ltYWdlRGVjb2RlclN1cHBvcnRlZCA9IGZhbHNlCiAgfSkgewogICAgdGhpcy4jaXNJbWFnZURlY29kZXJTdXBwb3J0ZWQgPSBpc0ltYWdlRGVjb2RlclN1cHBvcnRlZDsKICB9CiAgZ2V0IGJ5dGVzKCkgewogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAiYnl0ZXMiLCB0aGlzLnN0cmVhbS5nZXRCeXRlcyh0aGlzLm1heWJlTGVuZ3RoKSk7CiAgfQogIGVuc3VyZUJ1ZmZlcihyZXF1ZXN0ZWQpIHt9CiAgcmVhZEJsb2NrKCkgewogICAgdGhpcy5kZWNvZGVJbWFnZSgpOwogIH0KICBnZXQganBlZ09wdGlvbnMoKSB7CiAgICBjb25zdCBqcGVnT3B0aW9ucyA9IHsKICAgICAgZGVjb2RlVHJhbnNmb3JtOiB1bmRlZmluZWQsCiAgICAgIGNvbG9yVHJhbnNmb3JtOiB1bmRlZmluZWQKICAgIH07CiAgICBjb25zdCBkZWNvZGVBcnIgPSB0aGlzLmRpY3QuZ2V0QXJyYXkoIkQiLCAiRGVjb2RlIik7CiAgICBpZiAoKHRoaXMuZm9yY2VSR0JBIHx8IHRoaXMuZm9yY2VSR0IpICYmIEFycmF5LmlzQXJyYXkoZGVjb2RlQXJyKSkgewogICAgICBjb25zdCBiaXRzUGVyQ29tcG9uZW50ID0gdGhpcy5kaWN0LmdldCgiQlBDIiwgIkJpdHNQZXJDb21wb25lbnQiKSB8fCA4OwogICAgICBjb25zdCBkZWNvZGVBcnJMZW5ndGggPSBkZWNvZGVBcnIubGVuZ3RoOwogICAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgSW50MzJBcnJheShkZWNvZGVBcnJMZW5ndGgpOwogICAgICBsZXQgdHJhbnNmb3JtTmVlZGVkID0gZmFsc2U7CiAgICAgIGNvbnN0IG1heFZhbHVlID0gKDEgPDwgYml0c1BlckNvbXBvbmVudCkgLSAxOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRlY29kZUFyckxlbmd0aDsgaSArPSAyKSB7CiAgICAgICAgdHJhbnNmb3JtW2ldID0gKGRlY29kZUFycltpICsgMV0gLSBkZWNvZGVBcnJbaV0pICogMjU2IHwgMDsKICAgICAgICB0cmFuc2Zvcm1baSArIDFdID0gZGVjb2RlQXJyW2ldICogbWF4VmFsdWUgfCAwOwogICAgICAgIGlmICh0cmFuc2Zvcm1baV0gIT09IDI1NiB8fCB0cmFuc2Zvcm1baSArIDFdICE9PSAwKSB7CiAgICAgICAgICB0cmFuc2Zvcm1OZWVkZWQgPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodHJhbnNmb3JtTmVlZGVkKSB7CiAgICAgICAganBlZ09wdGlvbnMuZGVjb2RlVHJhbnNmb3JtID0gdHJhbnNmb3JtOwogICAgICB9CiAgICB9CiAgICBpZiAodGhpcy5wYXJhbXMgaW5zdGFuY2VvZiBEaWN0KSB7CiAgICAgIGNvbnN0IGNvbG9yVHJhbnNmb3JtID0gdGhpcy5wYXJhbXMuZ2V0KCJDb2xvclRyYW5zZm9ybSIpOwogICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihjb2xvclRyYW5zZm9ybSkpIHsKICAgICAgICBqcGVnT3B0aW9ucy5jb2xvclRyYW5zZm9ybSA9IGNvbG9yVHJhbnNmb3JtOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJqcGVnT3B0aW9ucyIsIGpwZWdPcHRpb25zKTsKICB9CiAgI3NraXBVc2VsZXNzQnl0ZXMoZGF0YSkgewogICAgZm9yIChsZXQgaSA9IDAsIGlpID0gZGF0YS5sZW5ndGggLSAxOyBpIDwgaWk7IGkrKykgewogICAgICBpZiAoZGF0YVtpXSA9PT0gMHhmZiAmJiBkYXRhW2kgKyAxXSA9PT0gMHhkOCkgewogICAgICAgIGlmIChpID4gMCkgewogICAgICAgICAgZGF0YSA9IGRhdGEuc3ViYXJyYXkoaSk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZGF0YTsKICB9CiAgZGVjb2RlSW1hZ2UoYnl0ZXMpIHsKICAgIGlmICh0aGlzLmVvZikgewogICAgICByZXR1cm4gdGhpcy5idWZmZXI7CiAgICB9CiAgICBieXRlcyA9IHRoaXMuI3NraXBVc2VsZXNzQnl0ZXMoYnl0ZXMgfHwgdGhpcy5ieXRlcyk7CiAgICBjb25zdCBqcGVnSW1hZ2UgPSBuZXcgSnBlZ0ltYWdlKHRoaXMuanBlZ09wdGlvbnMpOwogICAganBlZ0ltYWdlLnBhcnNlKGJ5dGVzKTsKICAgIGNvbnN0IGRhdGEgPSBqcGVnSW1hZ2UuZ2V0RGF0YSh7CiAgICAgIHdpZHRoOiB0aGlzLmRyYXdXaWR0aCwKICAgICAgaGVpZ2h0OiB0aGlzLmRyYXdIZWlnaHQsCiAgICAgIGZvcmNlUkdCQTogdGhpcy5mb3JjZVJHQkEsCiAgICAgIGZvcmNlUkdCOiB0aGlzLmZvcmNlUkdCLAogICAgICBpc1NvdXJjZVBERjogdHJ1ZQogICAgfSk7CiAgICB0aGlzLmJ1ZmZlciA9IGRhdGE7CiAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IGRhdGEubGVuZ3RoOwogICAgdGhpcy5lb2YgPSB0cnVlOwogICAgcmV0dXJuIHRoaXMuYnVmZmVyOwogIH0KICBnZXQgY2FuQXN5bmNEZWNvZGVJbWFnZUZyb21CdWZmZXIoKSB7CiAgICByZXR1cm4gdGhpcy5zdHJlYW0uaXNBc3luYzsKICB9CiAgYXN5bmMgZ2V0VHJhbnNmZXJhYmxlSW1hZ2UoKSB7CiAgICBpZiAoIShhd2FpdCBKcGVnU3RyZWFtLmNhblVzZUltYWdlRGVjb2RlcikpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb25zdCBqcGVnT3B0aW9ucyA9IHRoaXMuanBlZ09wdGlvbnM7CiAgICBpZiAoanBlZ09wdGlvbnMuZGVjb2RlVHJhbnNmb3JtKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgbGV0IGRlY29kZXI7CiAgICB0cnkgewogICAgICBjb25zdCBieXRlcyA9IHRoaXMuY2FuQXN5bmNEZWNvZGVJbWFnZUZyb21CdWZmZXIgJiYgKGF3YWl0IHRoaXMuc3RyZWFtLmFzeW5jR2V0Qnl0ZXMoKSkgfHwgdGhpcy5ieXRlczsKICAgICAgaWYgKCFieXRlcykgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGxldCBkYXRhID0gdGhpcy4jc2tpcFVzZWxlc3NCeXRlcyhieXRlcyk7CiAgICAgIGNvbnN0IHVzZUltYWdlRGVjb2RlciA9IEpwZWdJbWFnZS5jYW5Vc2VJbWFnZURlY29kZXIoZGF0YSwganBlZ09wdGlvbnMuY29sb3JUcmFuc2Zvcm0pOwogICAgICBpZiAoIXVzZUltYWdlRGVjb2RlcikgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGlmICh1c2VJbWFnZURlY29kZXIuZXhpZlN0YXJ0KSB7CiAgICAgICAgZGF0YSA9IGRhdGEuc2xpY2UoKTsKICAgICAgICBkYXRhLmZpbGwoMHgwMCwgdXNlSW1hZ2VEZWNvZGVyLmV4aWZTdGFydCwgdXNlSW1hZ2VEZWNvZGVyLmV4aWZFbmQpOwogICAgICB9CiAgICAgIGRlY29kZXIgPSBuZXcgSW1hZ2VEZWNvZGVyKHsKICAgICAgICBkYXRhLAogICAgICAgIHR5cGU6ICJpbWFnZS9qcGVnIiwKICAgICAgICBwcmVmZXJBbmltYXRpb246IGZhbHNlCiAgICAgIH0pOwogICAgICByZXR1cm4gKGF3YWl0IGRlY29kZXIuZGVjb2RlKCkpLmltYWdlOwogICAgfSBjYXRjaCAocmVhc29uKSB7CiAgICAgIHdhcm4oYGdldFRyYW5zZmVyYWJsZUltYWdlIC0gZmFpbGVkOiAiJHtyZWFzb259Ii5gKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9IGZpbmFsbHkgewogICAgICBkZWNvZGVyPy5jbG9zZSgpOwogICAgfQogIH0KfQoKOy8vIC4vZXh0ZXJuYWwvb3BlbmpwZWcvb3BlbmpwZWcuanMKdmFyIE9wZW5KUEVHID0gKCgpID0+IHsKICB2YXIgX3NjcmlwdE5hbWUgPSBpbXBvcnQubWV0YS51cmw7CiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIChtb2R1bGVBcmcgPSB7fSkgewogICAgdmFyIG1vZHVsZVJ0bjsKICAgIHZhciBNb2R1bGUgPSBtb2R1bGVBcmc7CiAgICB2YXIgcmVhZHlQcm9taXNlUmVzb2x2ZSwgcmVhZHlQcm9taXNlUmVqZWN0OwogICAgdmFyIHJlYWR5UHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgICAgcmVhZHlQcm9taXNlUmVzb2x2ZSA9IHJlc29sdmU7CiAgICAgIHJlYWR5UHJvbWlzZVJlamVjdCA9IHJlamVjdDsKICAgIH0pOwogICAgdmFyIEVOVklST05NRU5UX0lTX1dFQiA9IHRydWU7CiAgICB2YXIgRU5WSVJPTk1FTlRfSVNfV09SS0VSID0gZmFsc2U7CiAgICB2YXIgbW9kdWxlT3ZlcnJpZGVzID0gT2JqZWN0LmFzc2lnbih7fSwgTW9kdWxlKTsKICAgIHZhciBhcmd1bWVudHNfID0gW107CiAgICB2YXIgdGhpc1Byb2dyYW0gPSAiLi90aGlzLnByb2dyYW0iOwogICAgdmFyIHF1aXRfID0gKHN0YXR1cywgdG9UaHJvdykgPT4gewogICAgICB0aHJvdyB0b1Rocm93OwogICAgfTsKICAgIHZhciBzY3JpcHREaXJlY3RvcnkgPSAiIjsKICAgIGZ1bmN0aW9uIGxvY2F0ZUZpbGUocGF0aCkgewogICAgICBpZiAoTW9kdWxlWyJsb2NhdGVGaWxlIl0pIHsKICAgICAgICByZXR1cm4gTW9kdWxlWyJsb2NhdGVGaWxlIl0ocGF0aCwgc2NyaXB0RGlyZWN0b3J5KTsKICAgICAgfQogICAgICByZXR1cm4gc2NyaXB0RGlyZWN0b3J5ICsgcGF0aDsKICAgIH0KICAgIHZhciByZWFkQXN5bmMsIHJlYWRCaW5hcnk7CiAgICBpZiAoRU5WSVJPTk1FTlRfSVNfV0VCIHx8IEVOVklST05NRU5UX0lTX1dPUktFUikgewogICAgICBpZiAoRU5WSVJPTk1FTlRfSVNfV09SS0VSKSB7CiAgICAgICAgc2NyaXB0RGlyZWN0b3J5ID0gc2VsZi5sb2NhdGlvbi5ocmVmOwogICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkb2N1bWVudCAhPSAidW5kZWZpbmVkIiAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0KSB7CiAgICAgICAgc2NyaXB0RGlyZWN0b3J5ID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM7CiAgICAgIH0KICAgICAgaWYgKF9zY3JpcHROYW1lKSB7CiAgICAgICAgc2NyaXB0RGlyZWN0b3J5ID0gX3NjcmlwdE5hbWU7CiAgICAgIH0KICAgICAgaWYgKHNjcmlwdERpcmVjdG9yeS5zdGFydHNXaXRoKCJibG9iOiIpKSB7CiAgICAgICAgc2NyaXB0RGlyZWN0b3J5ID0gIiI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc2NyaXB0RGlyZWN0b3J5ID0gc2NyaXB0RGlyZWN0b3J5LnNsaWNlKDAsIHNjcmlwdERpcmVjdG9yeS5yZXBsYWNlKC9bPyNdLiovLCAiIikubGFzdEluZGV4T2YoIi8iKSArIDEpOwogICAgICB9CiAgICAgIHJlYWRBc3luYyA9IGFzeW5jIHVybCA9PiB7CiAgICAgICAgdmFyIHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7CiAgICAgICAgICBjcmVkZW50aWFsczogInNhbWUtb3JpZ2luIgogICAgICAgIH0pOwogICAgICAgIGlmIChyZXNwb25zZS5vaykgewogICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmFycmF5QnVmZmVyKCk7CiAgICAgICAgfQogICAgICAgIHRocm93IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXMgKyAiIDogIiArIHJlc3BvbnNlLnVybCk7CiAgICAgIH07CiAgICB9IGVsc2Uge30KICAgIHZhciBvdXQgPSBNb2R1bGVbInByaW50Il0gfHwgY29uc29sZS5sb2cuYmluZChjb25zb2xlKTsKICAgIHZhciBlcnIgPSBNb2R1bGVbInByaW50RXJyIl0gfHwgY29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpOwogICAgT2JqZWN0LmFzc2lnbihNb2R1bGUsIG1vZHVsZU92ZXJyaWRlcyk7CiAgICBtb2R1bGVPdmVycmlkZXMgPSBudWxsOwogICAgaWYgKE1vZHVsZVsiYXJndW1lbnRzIl0pIGFyZ3VtZW50c18gPSBNb2R1bGVbImFyZ3VtZW50cyJdOwogICAgaWYgKE1vZHVsZVsidGhpc1Byb2dyYW0iXSkgdGhpc1Byb2dyYW0gPSBNb2R1bGVbInRoaXNQcm9ncmFtIl07CiAgICB2YXIgd2FzbUJpbmFyeSA9IE1vZHVsZVsid2FzbUJpbmFyeSJdOwogICAgdmFyIHdhc21NZW1vcnk7CiAgICB2YXIgQUJPUlQgPSBmYWxzZTsKICAgIHZhciBFWElUU1RBVFVTOwogICAgdmFyIEhFQVA4LCBIRUFQVTgsIEhFQVAxNiwgSEVBUFUxNiwgSEVBUDMyLCBIRUFQVTMyLCBIRUFQRjMyLCBIRUFQNjQsIEhFQVBVNjQsIEhFQVBGNjQ7CiAgICB2YXIgcnVudGltZUluaXRpYWxpemVkID0gZmFsc2U7CiAgICBmdW5jdGlvbiB1cGRhdGVNZW1vcnlWaWV3cygpIHsKICAgICAgdmFyIGIgPSB3YXNtTWVtb3J5LmJ1ZmZlcjsKICAgICAgTW9kdWxlWyJIRUFQOCJdID0gSEVBUDggPSBuZXcgSW50OEFycmF5KGIpOwogICAgICBNb2R1bGVbIkhFQVAxNiJdID0gSEVBUDE2ID0gbmV3IEludDE2QXJyYXkoYik7CiAgICAgIE1vZHVsZVsiSEVBUFU4Il0gPSBIRUFQVTggPSBuZXcgVWludDhBcnJheShiKTsKICAgICAgTW9kdWxlWyJIRUFQVTE2Il0gPSBIRUFQVTE2ID0gbmV3IFVpbnQxNkFycmF5KGIpOwogICAgICBNb2R1bGVbIkhFQVAzMiJdID0gSEVBUDMyID0gbmV3IEludDMyQXJyYXkoYik7CiAgICAgIE1vZHVsZVsiSEVBUFUzMiJdID0gSEVBUFUzMiA9IG5ldyBVaW50MzJBcnJheShiKTsKICAgICAgTW9kdWxlWyJIRUFQRjMyIl0gPSBIRUFQRjMyID0gbmV3IEZsb2F0MzJBcnJheShiKTsKICAgICAgTW9kdWxlWyJIRUFQRjY0Il0gPSBIRUFQRjY0ID0gbmV3IEZsb2F0NjRBcnJheShiKTsKICAgICAgTW9kdWxlWyJIRUFQNjQiXSA9IEhFQVA2NCA9IG5ldyBCaWdJbnQ2NEFycmF5KGIpOwogICAgICBNb2R1bGVbIkhFQVBVNjQiXSA9IEhFQVBVNjQgPSBuZXcgQmlnVWludDY0QXJyYXkoYik7CiAgICB9CiAgICBmdW5jdGlvbiBwcmVSdW4oKSB7CiAgICAgIGlmIChNb2R1bGVbInByZVJ1biJdKSB7CiAgICAgICAgaWYgKHR5cGVvZiBNb2R1bGVbInByZVJ1biJdID09ICJmdW5jdGlvbiIpIE1vZHVsZVsicHJlUnVuIl0gPSBbTW9kdWxlWyJwcmVSdW4iXV07CiAgICAgICAgd2hpbGUgKE1vZHVsZVsicHJlUnVuIl0ubGVuZ3RoKSB7CiAgICAgICAgICBhZGRPblByZVJ1bihNb2R1bGVbInByZVJ1biJdLnNoaWZ0KCkpOwogICAgICAgIH0KICAgICAgfQogICAgICBjYWxsUnVudGltZUNhbGxiYWNrcyhvblByZVJ1bnMpOwogICAgfQogICAgZnVuY3Rpb24gaW5pdFJ1bnRpbWUoKSB7CiAgICAgIHJ1bnRpbWVJbml0aWFsaXplZCA9IHRydWU7CiAgICAgIHdhc21FeHBvcnRzWyJ0Il0oKTsKICAgIH0KICAgIGZ1bmN0aW9uIHBvc3RSdW4oKSB7CiAgICAgIGlmIChNb2R1bGVbInBvc3RSdW4iXSkgewogICAgICAgIGlmICh0eXBlb2YgTW9kdWxlWyJwb3N0UnVuIl0gPT0gImZ1bmN0aW9uIikgTW9kdWxlWyJwb3N0UnVuIl0gPSBbTW9kdWxlWyJwb3N0UnVuIl1dOwogICAgICAgIHdoaWxlIChNb2R1bGVbInBvc3RSdW4iXS5sZW5ndGgpIHsKICAgICAgICAgIGFkZE9uUG9zdFJ1bihNb2R1bGVbInBvc3RSdW4iXS5zaGlmdCgpKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgY2FsbFJ1bnRpbWVDYWxsYmFja3Mob25Qb3N0UnVucyk7CiAgICB9CiAgICB2YXIgcnVuRGVwZW5kZW5jaWVzID0gMDsKICAgIHZhciBkZXBlbmRlbmNpZXNGdWxmaWxsZWQgPSBudWxsOwogICAgZnVuY3Rpb24gYWRkUnVuRGVwZW5kZW5jeShpZCkgewogICAgICBydW5EZXBlbmRlbmNpZXMrKzsKICAgICAgTW9kdWxlWyJtb25pdG9yUnVuRGVwZW5kZW5jaWVzIl0/LihydW5EZXBlbmRlbmNpZXMpOwogICAgfQogICAgZnVuY3Rpb24gcmVtb3ZlUnVuRGVwZW5kZW5jeShpZCkgewogICAgICBydW5EZXBlbmRlbmNpZXMtLTsKICAgICAgTW9kdWxlWyJtb25pdG9yUnVuRGVwZW5kZW5jaWVzIl0/LihydW5EZXBlbmRlbmNpZXMpOwogICAgICBpZiAocnVuRGVwZW5kZW5jaWVzID09IDApIHsKICAgICAgICBpZiAoZGVwZW5kZW5jaWVzRnVsZmlsbGVkKSB7CiAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBkZXBlbmRlbmNpZXNGdWxmaWxsZWQ7CiAgICAgICAgICBkZXBlbmRlbmNpZXNGdWxmaWxsZWQgPSBudWxsOwogICAgICAgICAgY2FsbGJhY2soKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGFib3J0KHdoYXQpIHsKICAgICAgTW9kdWxlWyJvbkFib3J0Il0/Lih3aGF0KTsKICAgICAgd2hhdCA9ICJBYm9ydGVkKCIgKyB3aGF0ICsgIikiOwogICAgICBlcnIod2hhdCk7CiAgICAgIEFCT1JUID0gdHJ1ZTsKICAgICAgd2hhdCArPSAiLiBCdWlsZCB3aXRoIC1zQVNTRVJUSU9OUyBmb3IgbW9yZSBpbmZvLiI7CiAgICAgIHZhciBlID0gbmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcih3aGF0KTsKICAgICAgcmVhZHlQcm9taXNlUmVqZWN0KGUpOwogICAgICB0aHJvdyBlOwogICAgfQogICAgdmFyIHdhc21CaW5hcnlGaWxlOwogICAgZnVuY3Rpb24gZmluZFdhc21CaW5hcnkoKSB7CiAgICAgIGlmIChNb2R1bGVbImxvY2F0ZUZpbGUiXSkgewogICAgICAgIHJldHVybiBsb2NhdGVGaWxlKCJvcGVuanBlZy53YXNtIik7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBVUkwoIm9wZW5qcGVnLndhc20iLCBpbXBvcnQubWV0YS51cmwpLmhyZWY7CiAgICB9CiAgICBmdW5jdGlvbiBnZXRCaW5hcnlTeW5jKGZpbGUpIHsKICAgICAgaWYgKGZpbGUgPT0gd2FzbUJpbmFyeUZpbGUgJiYgd2FzbUJpbmFyeSkgewogICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSh3YXNtQmluYXJ5KTsKICAgICAgfQogICAgICBpZiAocmVhZEJpbmFyeSkgewogICAgICAgIHJldHVybiByZWFkQmluYXJ5KGZpbGUpOwogICAgICB9CiAgICAgIHRocm93ICJib3RoIGFzeW5jIGFuZCBzeW5jIGZldGNoaW5nIG9mIHRoZSB3YXNtIGZhaWxlZCI7CiAgICB9CiAgICBhc3luYyBmdW5jdGlvbiBnZXRXYXNtQmluYXJ5KGJpbmFyeUZpbGUpIHsKICAgICAgaWYgKCF3YXNtQmluYXJ5KSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHZhciByZXNwb25zZSA9IGF3YWl0IHJlYWRBc3luYyhiaW5hcnlGaWxlKTsKICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShyZXNwb25zZSk7CiAgICAgICAgfSBjYXRjaCB7fQogICAgICB9CiAgICAgIHJldHVybiBnZXRCaW5hcnlTeW5jKGJpbmFyeUZpbGUpOwogICAgfQogICAgYXN5bmMgZnVuY3Rpb24gaW5zdGFudGlhdGVBcnJheUJ1ZmZlcihiaW5hcnlGaWxlLCBpbXBvcnRzKSB7CiAgICAgIHRyeSB7CiAgICAgICAgdmFyIGJpbmFyeSA9IGF3YWl0IGdldFdhc21CaW5hcnkoYmluYXJ5RmlsZSk7CiAgICAgICAgdmFyIGluc3RhbmNlID0gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluYXJ5LCBpbXBvcnRzKTsKICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgIH0gY2F0Y2ggKHJlYXNvbikgewogICAgICAgIGVycihgZmFpbGVkIHRvIGFzeW5jaHJvbm91c2x5IHByZXBhcmUgd2FzbTogJHtyZWFzb259YCk7CiAgICAgICAgYWJvcnQocmVhc29uKTsKICAgICAgfQogICAgfQogICAgYXN5bmMgZnVuY3Rpb24gaW5zdGFudGlhdGVBc3luYyhiaW5hcnksIGJpbmFyeUZpbGUsIGltcG9ydHMpIHsKICAgICAgaWYgKCFiaW5hcnkgJiYgdHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nID09ICJmdW5jdGlvbiIpIHsKICAgICAgICB0cnkgewogICAgICAgICAgdmFyIHJlc3BvbnNlID0gZmV0Y2goYmluYXJ5RmlsZSwgewogICAgICAgICAgICBjcmVkZW50aWFsczogInNhbWUtb3JpZ2luIgogICAgICAgICAgfSk7CiAgICAgICAgICB2YXIgaW5zdGFudGlhdGlvblJlc3VsdCA9IGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKHJlc3BvbnNlLCBpbXBvcnRzKTsKICAgICAgICAgIHJldHVybiBpbnN0YW50aWF0aW9uUmVzdWx0OwogICAgICAgIH0gY2F0Y2ggKHJlYXNvbikgewogICAgICAgICAgZXJyKGB3YXNtIHN0cmVhbWluZyBjb21waWxlIGZhaWxlZDogJHtyZWFzb259YCk7CiAgICAgICAgICBlcnIoImZhbGxpbmcgYmFjayB0byBBcnJheUJ1ZmZlciBpbnN0YW50aWF0aW9uIik7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBpbnN0YW50aWF0ZUFycmF5QnVmZmVyKGJpbmFyeUZpbGUsIGltcG9ydHMpOwogICAgfQogICAgZnVuY3Rpb24gZ2V0V2FzbUltcG9ydHMoKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgYTogd2FzbUltcG9ydHMKICAgICAgfTsKICAgIH0KICAgIGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVdhc20oKSB7CiAgICAgIGZ1bmN0aW9uIHJlY2VpdmVJbnN0YW5jZShpbnN0YW5jZSwgbW9kdWxlKSB7CiAgICAgICAgd2FzbUV4cG9ydHMgPSBpbnN0YW5jZS5leHBvcnRzOwogICAgICAgIHdhc21NZW1vcnkgPSB3YXNtRXhwb3J0c1sicyJdOwogICAgICAgIHVwZGF0ZU1lbW9yeVZpZXdzKCk7CiAgICAgICAgcmVtb3ZlUnVuRGVwZW5kZW5jeSgid2FzbS1pbnN0YW50aWF0ZSIpOwogICAgICAgIHJldHVybiB3YXNtRXhwb3J0czsKICAgICAgfQogICAgICBhZGRSdW5EZXBlbmRlbmN5KCJ3YXNtLWluc3RhbnRpYXRlIik7CiAgICAgIGZ1bmN0aW9uIHJlY2VpdmVJbnN0YW50aWF0aW9uUmVzdWx0KHJlc3VsdCkgewogICAgICAgIHJldHVybiByZWNlaXZlSW5zdGFuY2UocmVzdWx0WyJpbnN0YW5jZSJdKTsKICAgICAgfQogICAgICB2YXIgaW5mbyA9IGdldFdhc21JbXBvcnRzKCk7CiAgICAgIGlmIChNb2R1bGVbImluc3RhbnRpYXRlV2FzbSJdKSB7CiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgICAgICAgIE1vZHVsZVsiaW5zdGFudGlhdGVXYXNtIl0oaW5mbywgKG1vZCwgaW5zdCkgPT4gewogICAgICAgICAgICByZWNlaXZlSW5zdGFuY2UobW9kLCBpbnN0KTsKICAgICAgICAgICAgcmVzb2x2ZShtb2QuZXhwb3J0cyk7CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfQogICAgICB3YXNtQmluYXJ5RmlsZSA/Pz0gZmluZFdhc21CaW5hcnkoKTsKICAgICAgdHJ5IHsKICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgaW5zdGFudGlhdGVBc3luYyh3YXNtQmluYXJ5LCB3YXNtQmluYXJ5RmlsZSwgaW5mbyk7CiAgICAgICAgdmFyIGV4cG9ydHMgPSByZWNlaXZlSW5zdGFudGlhdGlvblJlc3VsdChyZXN1bHQpOwogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgcmVhZHlQcm9taXNlUmVqZWN0KGUpOwogICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlKTsKICAgICAgfQogICAgfQogICAgY2xhc3MgRXhpdFN0YXR1cyB7CiAgICAgIG5hbWUgPSAiRXhpdFN0YXR1cyI7CiAgICAgIGNvbnN0cnVjdG9yKHN0YXR1cykgewogICAgICAgIHRoaXMubWVzc2FnZSA9IGBQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCBleGl0KCR7c3RhdHVzfSlgOwogICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzOwogICAgICB9CiAgICB9CiAgICB2YXIgY2FsbFJ1bnRpbWVDYWxsYmFja3MgPSBjYWxsYmFja3MgPT4gewogICAgICB3aGlsZSAoY2FsbGJhY2tzLmxlbmd0aCA+IDApIHsKICAgICAgICBjYWxsYmFja3Muc2hpZnQoKShNb2R1bGUpOwogICAgICB9CiAgICB9OwogICAgdmFyIG9uUG9zdFJ1bnMgPSBbXTsKICAgIHZhciBhZGRPblBvc3RSdW4gPSBjYiA9PiBvblBvc3RSdW5zLnVuc2hpZnQoY2IpOwogICAgdmFyIG9uUHJlUnVucyA9IFtdOwogICAgdmFyIGFkZE9uUHJlUnVuID0gY2IgPT4gb25QcmVSdW5zLnVuc2hpZnQoY2IpOwogICAgdmFyIG5vRXhpdFJ1bnRpbWUgPSBNb2R1bGVbIm5vRXhpdFJ1bnRpbWUiXSB8fCB0cnVlOwogICAgdmFyIF9fYWJvcnRfanMgPSAoKSA9PiBhYm9ydCgiIik7CiAgICB2YXIgcnVudGltZUtlZXBhbGl2ZUNvdW50ZXIgPSAwOwogICAgdmFyIF9fZW1zY3JpcHRlbl9ydW50aW1lX2tlZXBhbGl2ZV9jbGVhciA9ICgpID0+IHsKICAgICAgbm9FeGl0UnVudGltZSA9IGZhbHNlOwogICAgICBydW50aW1lS2VlcGFsaXZlQ291bnRlciA9IDA7CiAgICB9OwogICAgdmFyIHRpbWVycyA9IHt9OwogICAgdmFyIGhhbmRsZUV4Y2VwdGlvbiA9IGUgPT4gewogICAgICBpZiAoZSBpbnN0YW5jZW9mIEV4aXRTdGF0dXMgfHwgZSA9PSAidW53aW5kIikgewogICAgICAgIHJldHVybiBFWElUU1RBVFVTOwogICAgICB9CiAgICAgIHF1aXRfKDEsIGUpOwogICAgfTsKICAgIHZhciBrZWVwUnVudGltZUFsaXZlID0gKCkgPT4gbm9FeGl0UnVudGltZSB8fCBydW50aW1lS2VlcGFsaXZlQ291bnRlciA+IDA7CiAgICB2YXIgX3Byb2NfZXhpdCA9IGNvZGUgPT4gewogICAgICBFWElUU1RBVFVTID0gY29kZTsKICAgICAgaWYgKCFrZWVwUnVudGltZUFsaXZlKCkpIHsKICAgICAgICBNb2R1bGVbIm9uRXhpdCJdPy4oY29kZSk7CiAgICAgICAgQUJPUlQgPSB0cnVlOwogICAgICB9CiAgICAgIHF1aXRfKGNvZGUsIG5ldyBFeGl0U3RhdHVzKGNvZGUpKTsKICAgIH07CiAgICB2YXIgZXhpdEpTID0gKHN0YXR1cywgaW1wbGljaXQpID0+IHsKICAgICAgRVhJVFNUQVRVUyA9IHN0YXR1czsKICAgICAgX3Byb2NfZXhpdChzdGF0dXMpOwogICAgfTsKICAgIHZhciBfZXhpdCA9IGV4aXRKUzsKICAgIHZhciBtYXliZUV4aXQgPSAoKSA9PiB7CiAgICAgIGlmICgha2VlcFJ1bnRpbWVBbGl2ZSgpKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIF9leGl0KEVYSVRTVEFUVVMpOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIGhhbmRsZUV4Y2VwdGlvbihlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICB2YXIgY2FsbFVzZXJDYWxsYmFjayA9IGZ1bmMgPT4gewogICAgICBpZiAoQUJPUlQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdHJ5IHsKICAgICAgICBmdW5jKCk7CiAgICAgICAgbWF5YmVFeGl0KCk7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICBoYW5kbGVFeGNlcHRpb24oZSk7CiAgICAgIH0KICAgIH07CiAgICB2YXIgX2Vtc2NyaXB0ZW5fZ2V0X25vdyA9ICgpID0+IHBlcmZvcm1hbmNlLm5vdygpOwogICAgdmFyIF9fc2V0aXRpbWVyX2pzID0gKHdoaWNoLCB0aW1lb3V0X21zKSA9PiB7CiAgICAgIGlmICh0aW1lcnNbd2hpY2hdKSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyc1t3aGljaF0uaWQpOwogICAgICAgIGRlbGV0ZSB0aW1lcnNbd2hpY2hdOwogICAgICB9CiAgICAgIGlmICghdGltZW91dF9tcykgcmV0dXJuIDA7CiAgICAgIHZhciBpZCA9IHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIGRlbGV0ZSB0aW1lcnNbd2hpY2hdOwogICAgICAgIGNhbGxVc2VyQ2FsbGJhY2soKCkgPT4gX19lbXNjcmlwdGVuX3RpbWVvdXQod2hpY2gsIF9lbXNjcmlwdGVuX2dldF9ub3coKSkpOwogICAgICB9LCB0aW1lb3V0X21zKTsKICAgICAgdGltZXJzW3doaWNoXSA9IHsKICAgICAgICBpZCwKICAgICAgICB0aW1lb3V0X21zCiAgICAgIH07CiAgICAgIHJldHVybiAwOwogICAgfTsKICAgIGZ1bmN0aW9uIF9jb3B5X3BpeGVsc18xKGNvbXBHX3B0ciwgbmJfcGl4ZWxzKSB7CiAgICAgIGNvbXBHX3B0ciA+Pj0gMjsKICAgICAgY29uc3QgaW1hZ2VEYXRhID0gTW9kdWxlLmltYWdlRGF0YSA9IG5ldyBVaW50OENsYW1wZWRBcnJheShuYl9waXhlbHMpOwogICAgICBjb25zdCBjb21wRyA9IEhFQVAzMi5zdWJhcnJheShjb21wR19wdHIsIGNvbXBHX3B0ciArIG5iX3BpeGVscyk7CiAgICAgIGltYWdlRGF0YS5zZXQoY29tcEcpOwogICAgfQogICAgZnVuY3Rpb24gX2NvcHlfcGl4ZWxzXzMoY29tcFJfcHRyLCBjb21wR19wdHIsIGNvbXBCX3B0ciwgbmJfcGl4ZWxzKSB7CiAgICAgIGNvbXBSX3B0ciA+Pj0gMjsKICAgICAgY29tcEdfcHRyID4+PSAyOwogICAgICBjb21wQl9wdHIgPj49IDI7CiAgICAgIGNvbnN0IGltYWdlRGF0YSA9IE1vZHVsZS5pbWFnZURhdGEgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkobmJfcGl4ZWxzICogMyk7CiAgICAgIGNvbnN0IGNvbXBSID0gSEVBUDMyLnN1YmFycmF5KGNvbXBSX3B0ciwgY29tcFJfcHRyICsgbmJfcGl4ZWxzKTsKICAgICAgY29uc3QgY29tcEcgPSBIRUFQMzIuc3ViYXJyYXkoY29tcEdfcHRyLCBjb21wR19wdHIgKyBuYl9waXhlbHMpOwogICAgICBjb25zdCBjb21wQiA9IEhFQVAzMi5zdWJhcnJheShjb21wQl9wdHIsIGNvbXBCX3B0ciArIG5iX3BpeGVscyk7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmJfcGl4ZWxzOyBpKyspIHsKICAgICAgICBpbWFnZURhdGFbMyAqIGldID0gY29tcFJbaV07CiAgICAgICAgaW1hZ2VEYXRhWzMgKiBpICsgMV0gPSBjb21wR1tpXTsKICAgICAgICBpbWFnZURhdGFbMyAqIGkgKyAyXSA9IGNvbXBCW2ldOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBfY29weV9waXhlbHNfNChjb21wUl9wdHIsIGNvbXBHX3B0ciwgY29tcEJfcHRyLCBjb21wQV9wdHIsIG5iX3BpeGVscykgewogICAgICBjb21wUl9wdHIgPj49IDI7CiAgICAgIGNvbXBHX3B0ciA+Pj0gMjsKICAgICAgY29tcEJfcHRyID4+PSAyOwogICAgICBjb21wQV9wdHIgPj49IDI7CiAgICAgIGNvbnN0IGltYWdlRGF0YSA9IE1vZHVsZS5pbWFnZURhdGEgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkobmJfcGl4ZWxzICogNCk7CiAgICAgIGNvbnN0IGNvbXBSID0gSEVBUDMyLnN1YmFycmF5KGNvbXBSX3B0ciwgY29tcFJfcHRyICsgbmJfcGl4ZWxzKTsKICAgICAgY29uc3QgY29tcEcgPSBIRUFQMzIuc3ViYXJyYXkoY29tcEdfcHRyLCBjb21wR19wdHIgKyBuYl9waXhlbHMpOwogICAgICBjb25zdCBjb21wQiA9IEhFQVAzMi5zdWJhcnJheShjb21wQl9wdHIsIGNvbXBCX3B0ciArIG5iX3BpeGVscyk7CiAgICAgIGNvbnN0IGNvbXBBID0gSEVBUDMyLnN1YmFycmF5KGNvbXBBX3B0ciwgY29tcEFfcHRyICsgbmJfcGl4ZWxzKTsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYl9waXhlbHM7IGkrKykgewogICAgICAgIGltYWdlRGF0YVs0ICogaV0gPSBjb21wUltpXTsKICAgICAgICBpbWFnZURhdGFbNCAqIGkgKyAxXSA9IGNvbXBHW2ldOwogICAgICAgIGltYWdlRGF0YVs0ICogaSArIDJdID0gY29tcEJbaV07CiAgICAgICAgaW1hZ2VEYXRhWzQgKiBpICsgM10gPSBjb21wQVtpXTsKICAgICAgfQogICAgfQogICAgdmFyIGdldEhlYXBNYXggPSAoKSA9PiAyMTQ3NDgzNjQ4OwogICAgdmFyIGFsaWduTWVtb3J5ID0gKHNpemUsIGFsaWdubWVudCkgPT4gTWF0aC5jZWlsKHNpemUgLyBhbGlnbm1lbnQpICogYWxpZ25tZW50OwogICAgdmFyIGdyb3dNZW1vcnkgPSBzaXplID0+IHsKICAgICAgdmFyIGIgPSB3YXNtTWVtb3J5LmJ1ZmZlcjsKICAgICAgdmFyIHBhZ2VzID0gKHNpemUgLSBiLmJ5dGVMZW5ndGggKyA2NTUzNSkgLyA2NTUzNiB8IDA7CiAgICAgIHRyeSB7CiAgICAgICAgd2FzbU1lbW9yeS5ncm93KHBhZ2VzKTsKICAgICAgICB1cGRhdGVNZW1vcnlWaWV3cygpOwogICAgICAgIHJldHVybiAxOwogICAgICB9IGNhdGNoIChlKSB7fQogICAgfTsKICAgIHZhciBfZW1zY3JpcHRlbl9yZXNpemVfaGVhcCA9IHJlcXVlc3RlZFNpemUgPT4gewogICAgICB2YXIgb2xkU2l6ZSA9IEhFQVBVOC5sZW5ndGg7CiAgICAgIHJlcXVlc3RlZFNpemUgPj4+PSAwOwogICAgICB2YXIgbWF4SGVhcFNpemUgPSBnZXRIZWFwTWF4KCk7CiAgICAgIGlmIChyZXF1ZXN0ZWRTaXplID4gbWF4SGVhcFNpemUpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgZm9yICh2YXIgY3V0RG93biA9IDE7IGN1dERvd24gPD0gNDsgY3V0RG93biAqPSAyKSB7CiAgICAgICAgdmFyIG92ZXJHcm93bkhlYXBTaXplID0gb2xkU2l6ZSAqICgxICsgLjIgLyBjdXREb3duKTsKICAgICAgICBvdmVyR3Jvd25IZWFwU2l6ZSA9IE1hdGgubWluKG92ZXJHcm93bkhlYXBTaXplLCByZXF1ZXN0ZWRTaXplICsgMTAwNjYzMjk2KTsKICAgICAgICB2YXIgbmV3U2l6ZSA9IE1hdGgubWluKG1heEhlYXBTaXplLCBhbGlnbk1lbW9yeShNYXRoLm1heChyZXF1ZXN0ZWRTaXplLCBvdmVyR3Jvd25IZWFwU2l6ZSksIDY1NTM2KSk7CiAgICAgICAgdmFyIHJlcGxhY2VtZW50ID0gZ3Jvd01lbW9yeShuZXdTaXplKTsKICAgICAgICBpZiAocmVwbGFjZW1lbnQpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwogICAgdmFyIEVOViA9IHt9OwogICAgdmFyIGdldEV4ZWN1dGFibGVOYW1lID0gKCkgPT4gdGhpc1Byb2dyYW0gfHwgIi4vdGhpcy5wcm9ncmFtIjsKICAgIHZhciBnZXRFbnZTdHJpbmdzID0gKCkgPT4gewogICAgICBpZiAoIWdldEVudlN0cmluZ3Muc3RyaW5ncykgewogICAgICAgIHZhciBsYW5nID0gKHR5cGVvZiBuYXZpZ2F0b3IgPT0gIm9iamVjdCIgJiYgbmF2aWdhdG9yLmxhbmd1YWdlcyAmJiBuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdIHx8ICJDIikucmVwbGFjZSgiLSIsICJfIikgKyAiLlVURi04IjsKICAgICAgICB2YXIgZW52ID0gewogICAgICAgICAgVVNFUjogIndlYl91c2VyIiwKICAgICAgICAgIExPR05BTUU6ICJ3ZWJfdXNlciIsCiAgICAgICAgICBQQVRIOiAiLyIsCiAgICAgICAgICBQV0Q6ICIvIiwKICAgICAgICAgIEhPTUU6ICIvaG9tZS93ZWJfdXNlciIsCiAgICAgICAgICBMQU5HOiBsYW5nLAogICAgICAgICAgXzogZ2V0RXhlY3V0YWJsZU5hbWUoKQogICAgICAgIH07CiAgICAgICAgZm9yICh2YXIgeCBpbiBFTlYpIHsKICAgICAgICAgIGlmIChFTlZbeF0gPT09IHVuZGVmaW5lZCkgZGVsZXRlIGVudlt4XTtlbHNlIGVudlt4XSA9IEVOVlt4XTsKICAgICAgICB9CiAgICAgICAgdmFyIHN0cmluZ3MgPSBbXTsKICAgICAgICBmb3IgKHZhciB4IGluIGVudikgewogICAgICAgICAgc3RyaW5ncy5wdXNoKGAke3h9PSR7ZW52W3hdfWApOwogICAgICAgIH0KICAgICAgICBnZXRFbnZTdHJpbmdzLnN0cmluZ3MgPSBzdHJpbmdzOwogICAgICB9CiAgICAgIHJldHVybiBnZXRFbnZTdHJpbmdzLnN0cmluZ3M7CiAgICB9OwogICAgdmFyIHN0cmluZ1RvQXNjaWkgPSAoc3RyLCBidWZmZXIpID0+IHsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHsKICAgICAgICBIRUFQOFtidWZmZXIrK10gPSBzdHIuY2hhckNvZGVBdChpKTsKICAgICAgfQogICAgICBIRUFQOFtidWZmZXJdID0gMDsKICAgIH07CiAgICB2YXIgX2Vudmlyb25fZ2V0ID0gKF9fZW52aXJvbiwgZW52aXJvbl9idWYpID0+IHsKICAgICAgdmFyIGJ1ZlNpemUgPSAwOwogICAgICBnZXRFbnZTdHJpbmdzKCkuZm9yRWFjaCgoc3RyaW5nLCBpKSA9PiB7CiAgICAgICAgdmFyIHB0ciA9IGVudmlyb25fYnVmICsgYnVmU2l6ZTsKICAgICAgICBIRUFQVTMyW19fZW52aXJvbiArIGkgKiA0ID4+IDJdID0gcHRyOwogICAgICAgIHN0cmluZ1RvQXNjaWkoc3RyaW5nLCBwdHIpOwogICAgICAgIGJ1ZlNpemUgKz0gc3RyaW5nLmxlbmd0aCArIDE7CiAgICAgIH0pOwogICAgICByZXR1cm4gMDsKICAgIH07CiAgICB2YXIgX2Vudmlyb25fc2l6ZXNfZ2V0ID0gKHBlbnZpcm9uX2NvdW50LCBwZW52aXJvbl9idWZfc2l6ZSkgPT4gewogICAgICB2YXIgc3RyaW5ncyA9IGdldEVudlN0cmluZ3MoKTsKICAgICAgSEVBUFUzMltwZW52aXJvbl9jb3VudCA+PiAyXSA9IHN0cmluZ3MubGVuZ3RoOwogICAgICB2YXIgYnVmU2l6ZSA9IDA7CiAgICAgIHN0cmluZ3MuZm9yRWFjaChzdHJpbmcgPT4gYnVmU2l6ZSArPSBzdHJpbmcubGVuZ3RoICsgMSk7CiAgICAgIEhFQVBVMzJbcGVudmlyb25fYnVmX3NpemUgPj4gMl0gPSBidWZTaXplOwogICAgICByZXR1cm4gMDsKICAgIH07CiAgICB2YXIgX2ZkX2Nsb3NlID0gZmQgPT4gNTI7CiAgICB2YXIgSU5UNTNfTUFYID0gOTAwNzE5OTI1NDc0MDk5MjsKICAgIHZhciBJTlQ1M19NSU4gPSAtOTAwNzE5OTI1NDc0MDk5MjsKICAgIHZhciBiaWdpbnRUb0k1M0NoZWNrZWQgPSBudW0gPT4gbnVtIDwgSU5UNTNfTUlOIHx8IG51bSA+IElOVDUzX01BWCA/IE5hTiA6IE51bWJlcihudW0pOwogICAgZnVuY3Rpb24gX2ZkX3NlZWsoZmQsIG9mZnNldCwgd2hlbmNlLCBuZXdPZmZzZXQpIHsKICAgICAgb2Zmc2V0ID0gYmlnaW50VG9JNTNDaGVja2VkKG9mZnNldCk7CiAgICAgIHJldHVybiA3MDsKICAgIH0KICAgIHZhciBwcmludENoYXJCdWZmZXJzID0gW251bGwsIFtdLCBbXV07CiAgICB2YXIgVVRGOERlY29kZXIgPSB0eXBlb2YgVGV4dERlY29kZXIgIT0gInVuZGVmaW5lZCIgPyBuZXcgVGV4dERlY29kZXIoKSA6IHVuZGVmaW5lZDsKICAgIHZhciBVVEY4QXJyYXlUb1N0cmluZyA9IChoZWFwT3JBcnJheSwgaWR4ID0gMCwgbWF4Qnl0ZXNUb1JlYWQgPSBOYU4pID0+IHsKICAgICAgdmFyIGVuZElkeCA9IGlkeCArIG1heEJ5dGVzVG9SZWFkOwogICAgICB2YXIgZW5kUHRyID0gaWR4OwogICAgICB3aGlsZSAoaGVhcE9yQXJyYXlbZW5kUHRyXSAmJiAhKGVuZFB0ciA+PSBlbmRJZHgpKSArK2VuZFB0cjsKICAgICAgaWYgKGVuZFB0ciAtIGlkeCA+IDE2ICYmIGhlYXBPckFycmF5LmJ1ZmZlciAmJiBVVEY4RGVjb2RlcikgewogICAgICAgIHJldHVybiBVVEY4RGVjb2Rlci5kZWNvZGUoaGVhcE9yQXJyYXkuc3ViYXJyYXkoaWR4LCBlbmRQdHIpKTsKICAgICAgfQogICAgICB2YXIgc3RyID0gIiI7CiAgICAgIHdoaWxlIChpZHggPCBlbmRQdHIpIHsKICAgICAgICB2YXIgdTAgPSBoZWFwT3JBcnJheVtpZHgrK107CiAgICAgICAgaWYgKCEodTAgJiAxMjgpKSB7CiAgICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh1MCk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgdmFyIHUxID0gaGVhcE9yQXJyYXlbaWR4KytdICYgNjM7CiAgICAgICAgaWYgKCh1MCAmIDIyNCkgPT0gMTkyKSB7CiAgICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgodTAgJiAzMSkgPDwgNiB8IHUxKTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICB2YXIgdTIgPSBoZWFwT3JBcnJheVtpZHgrK10gJiA2MzsKICAgICAgICBpZiAoKHUwICYgMjQwKSA9PSAyMjQpIHsKICAgICAgICAgIHUwID0gKHUwICYgMTUpIDw8IDEyIHwgdTEgPDwgNiB8IHUyOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB1MCA9ICh1MCAmIDcpIDw8IDE4IHwgdTEgPDwgMTIgfCB1MiA8PCA2IHwgaGVhcE9yQXJyYXlbaWR4KytdICYgNjM7CiAgICAgICAgfQogICAgICAgIGlmICh1MCA8IDY1NTM2KSB7CiAgICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh1MCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHZhciBjaCA9IHUwIC0gNjU1MzY7CiAgICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NiB8IGNoID4+IDEwLCA1NjMyMCB8IGNoICYgMTAyMyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBzdHI7CiAgICB9OwogICAgdmFyIHByaW50Q2hhciA9IChzdHJlYW0sIGN1cnIpID0+IHsKICAgICAgdmFyIGJ1ZmZlciA9IHByaW50Q2hhckJ1ZmZlcnNbc3RyZWFtXTsKICAgICAgaWYgKGN1cnIgPT09IDAgfHwgY3VyciA9PT0gMTApIHsKICAgICAgICAoc3RyZWFtID09PSAxID8gb3V0IDogZXJyKShVVEY4QXJyYXlUb1N0cmluZyhidWZmZXIpKTsKICAgICAgICBidWZmZXIubGVuZ3RoID0gMDsKICAgICAgfSBlbHNlIHsKICAgICAgICBidWZmZXIucHVzaChjdXJyKTsKICAgICAgfQogICAgfTsKICAgIHZhciBVVEY4VG9TdHJpbmcgPSAocHRyLCBtYXhCeXRlc1RvUmVhZCkgPT4gcHRyID8gVVRGOEFycmF5VG9TdHJpbmcoSEVBUFU4LCBwdHIsIG1heEJ5dGVzVG9SZWFkKSA6ICIiOwogICAgdmFyIF9mZF93cml0ZSA9IChmZCwgaW92LCBpb3ZjbnQsIHBudW0pID0+IHsKICAgICAgdmFyIG51bSA9IDA7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW92Y250OyBpKyspIHsKICAgICAgICB2YXIgcHRyID0gSEVBUFUzMltpb3YgPj4gMl07CiAgICAgICAgdmFyIGxlbiA9IEhFQVBVMzJbaW92ICsgNCA+PiAyXTsKICAgICAgICBpb3YgKz0gODsKICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjsgaisrKSB7CiAgICAgICAgICBwcmludENoYXIoZmQsIEhFQVBVOFtwdHIgKyBqXSk7CiAgICAgICAgfQogICAgICAgIG51bSArPSBsZW47CiAgICAgIH0KICAgICAgSEVBUFUzMltwbnVtID4+IDJdID0gbnVtOwogICAgICByZXR1cm4gMDsKICAgIH07CiAgICBmdW5jdGlvbiBfZ3JheV90b19yZ2JhKGNvbXBHX3B0ciwgbmJfcGl4ZWxzKSB7CiAgICAgIGNvbXBHX3B0ciA+Pj0gMjsKICAgICAgY29uc3QgaW1hZ2VEYXRhID0gTW9kdWxlLmltYWdlRGF0YSA9IG5ldyBVaW50OENsYW1wZWRBcnJheShuYl9waXhlbHMgKiA0KTsKICAgICAgY29uc3QgY29tcEcgPSBIRUFQMzIuc3ViYXJyYXkoY29tcEdfcHRyLCBjb21wR19wdHIgKyBuYl9waXhlbHMpOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5iX3BpeGVsczsgaSsrKSB7CiAgICAgICAgaW1hZ2VEYXRhWzQgKiBpXSA9IGltYWdlRGF0YVs0ICogaSArIDFdID0gaW1hZ2VEYXRhWzQgKiBpICsgMl0gPSBjb21wR1tpXTsKICAgICAgICBpbWFnZURhdGFbNCAqIGkgKyAzXSA9IDI1NTsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gX2dyYXlhX3RvX3JnYmEoY29tcEdfcHRyLCBjb21wQV9wdHIsIG5iX3BpeGVscykgewogICAgICBjb21wR19wdHIgPj49IDI7CiAgICAgIGNvbXBBX3B0ciA+Pj0gMjsKICAgICAgY29uc3QgaW1hZ2VEYXRhID0gTW9kdWxlLmltYWdlRGF0YSA9IG5ldyBVaW50OENsYW1wZWRBcnJheShuYl9waXhlbHMgKiA0KTsKICAgICAgY29uc3QgY29tcEcgPSBIRUFQMzIuc3ViYXJyYXkoY29tcEdfcHRyLCBjb21wR19wdHIgKyBuYl9waXhlbHMpOwogICAgICBjb25zdCBjb21wQSA9IEhFQVAzMi5zdWJhcnJheShjb21wQV9wdHIsIGNvbXBBX3B0ciArIG5iX3BpeGVscyk7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmJfcGl4ZWxzOyBpKyspIHsKICAgICAgICBpbWFnZURhdGFbNCAqIGldID0gaW1hZ2VEYXRhWzQgKiBpICsgMV0gPSBpbWFnZURhdGFbNCAqIGkgKyAyXSA9IGNvbXBHW2ldOwogICAgICAgIGltYWdlRGF0YVs0ICogaSArIDNdID0gY29tcEFbaV07CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIF9qc1ByaW50V2FybmluZyhtZXNzYWdlX3B0cikgewogICAgICBjb25zdCBtZXNzYWdlID0gVVRGOFRvU3RyaW5nKG1lc3NhZ2VfcHRyKTsKICAgICAgKE1vZHVsZS53YXJuIHx8IGNvbnNvbGUud2FybikoYE9wZW5KUEVHOiAke21lc3NhZ2V9YCk7CiAgICB9CiAgICBmdW5jdGlvbiBfcmdiX3RvX3JnYmEoY29tcFJfcHRyLCBjb21wR19wdHIsIGNvbXBCX3B0ciwgbmJfcGl4ZWxzKSB7CiAgICAgIGNvbXBSX3B0ciA+Pj0gMjsKICAgICAgY29tcEdfcHRyID4+PSAyOwogICAgICBjb21wQl9wdHIgPj49IDI7CiAgICAgIGNvbnN0IGltYWdlRGF0YSA9IE1vZHVsZS5pbWFnZURhdGEgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkobmJfcGl4ZWxzICogNCk7CiAgICAgIGNvbnN0IGNvbXBSID0gSEVBUDMyLnN1YmFycmF5KGNvbXBSX3B0ciwgY29tcFJfcHRyICsgbmJfcGl4ZWxzKTsKICAgICAgY29uc3QgY29tcEcgPSBIRUFQMzIuc3ViYXJyYXkoY29tcEdfcHRyLCBjb21wR19wdHIgKyBuYl9waXhlbHMpOwogICAgICBjb25zdCBjb21wQiA9IEhFQVAzMi5zdWJhcnJheShjb21wQl9wdHIsIGNvbXBCX3B0ciArIG5iX3BpeGVscyk7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmJfcGl4ZWxzOyBpKyspIHsKICAgICAgICBpbWFnZURhdGFbNCAqIGldID0gY29tcFJbaV07CiAgICAgICAgaW1hZ2VEYXRhWzQgKiBpICsgMV0gPSBjb21wR1tpXTsKICAgICAgICBpbWFnZURhdGFbNCAqIGkgKyAyXSA9IGNvbXBCW2ldOwogICAgICAgIGltYWdlRGF0YVs0ICogaSArIDNdID0gMjU1OwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBfc3RvcmVFcnJvck1lc3NhZ2UobWVzc2FnZV9wdHIpIHsKICAgICAgY29uc3QgbWVzc2FnZSA9IFVURjhUb1N0cmluZyhtZXNzYWdlX3B0cik7CiAgICAgIGlmICghTW9kdWxlLmVycm9yTWVzc2FnZXMpIHsKICAgICAgICBNb2R1bGUuZXJyb3JNZXNzYWdlcyA9IG1lc3NhZ2U7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgTW9kdWxlLmVycm9yTWVzc2FnZXMgKz0gIlxuIiArIG1lc3NhZ2U7CiAgICAgIH0KICAgIH0KICAgIHZhciB3YXNtSW1wb3J0cyA9IHsKICAgICAgbDogX19hYm9ydF9qcywKICAgICAgazogX19lbXNjcmlwdGVuX3J1bnRpbWVfa2VlcGFsaXZlX2NsZWFyLAogICAgICBtOiBfX3NldGl0aW1lcl9qcywKICAgICAgZzogX2NvcHlfcGl4ZWxzXzEsCiAgICAgIGY6IF9jb3B5X3BpeGVsc18zLAogICAgICBlOiBfY29weV9waXhlbHNfNCwKICAgICAgbjogX2Vtc2NyaXB0ZW5fcmVzaXplX2hlYXAsCiAgICAgIHA6IF9lbnZpcm9uX2dldCwKICAgICAgcTogX2Vudmlyb25fc2l6ZXNfZ2V0LAogICAgICBiOiBfZmRfY2xvc2UsCiAgICAgIG86IF9mZF9zZWVrLAogICAgICBjOiBfZmRfd3JpdGUsCiAgICAgIHI6IF9ncmF5X3RvX3JnYmEsCiAgICAgIGk6IF9ncmF5YV90b19yZ2JhLAogICAgICBkOiBfanNQcmludFdhcm5pbmcsCiAgICAgIGo6IF9wcm9jX2V4aXQsCiAgICAgIGg6IF9yZ2JfdG9fcmdiYSwKICAgICAgYTogX3N0b3JlRXJyb3JNZXNzYWdlCiAgICB9OwogICAgdmFyIHdhc21FeHBvcnRzID0gYXdhaXQgY3JlYXRlV2FzbSgpOwogICAgdmFyIF9fX3dhc21fY2FsbF9jdG9ycyA9IHdhc21FeHBvcnRzWyJ0Il07CiAgICB2YXIgX21hbGxvYyA9IE1vZHVsZVsiX21hbGxvYyJdID0gd2FzbUV4cG9ydHNbInUiXTsKICAgIHZhciBfZnJlZSA9IE1vZHVsZVsiX2ZyZWUiXSA9IHdhc21FeHBvcnRzWyJ2Il07CiAgICB2YXIgX2pwMl9kZWNvZGUgPSBNb2R1bGVbIl9qcDJfZGVjb2RlIl0gPSB3YXNtRXhwb3J0c1sieCJdOwogICAgdmFyIF9fZW1zY3JpcHRlbl90aW1lb3V0ID0gd2FzbUV4cG9ydHNbInkiXTsKICAgIGZ1bmN0aW9uIHJ1bigpIHsKICAgICAgaWYgKHJ1bkRlcGVuZGVuY2llcyA+IDApIHsKICAgICAgICBkZXBlbmRlbmNpZXNGdWxmaWxsZWQgPSBydW47CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHByZVJ1bigpOwogICAgICBpZiAocnVuRGVwZW5kZW5jaWVzID4gMCkgewogICAgICAgIGRlcGVuZGVuY2llc0Z1bGZpbGxlZCA9IHJ1bjsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZG9SdW4oKSB7CiAgICAgICAgTW9kdWxlWyJjYWxsZWRSdW4iXSA9IHRydWU7CiAgICAgICAgaWYgKEFCT1JUKSByZXR1cm47CiAgICAgICAgaW5pdFJ1bnRpbWUoKTsKICAgICAgICByZWFkeVByb21pc2VSZXNvbHZlKE1vZHVsZSk7CiAgICAgICAgTW9kdWxlWyJvblJ1bnRpbWVJbml0aWFsaXplZCJdPy4oKTsKICAgICAgICBwb3N0UnVuKCk7CiAgICAgIH0KICAgICAgaWYgKE1vZHVsZVsic2V0U3RhdHVzIl0pIHsKICAgICAgICBNb2R1bGVbInNldFN0YXR1cyJdKCJSdW5uaW5nLi4uIik7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IE1vZHVsZVsic2V0U3RhdHVzIl0oIiIpLCAxKTsKICAgICAgICAgIGRvUnVuKCk7CiAgICAgICAgfSwgMSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZG9SdW4oKTsKICAgICAgfQogICAgfQogICAgaWYgKE1vZHVsZVsicHJlSW5pdCJdKSB7CiAgICAgIGlmICh0eXBlb2YgTW9kdWxlWyJwcmVJbml0Il0gPT0gImZ1bmN0aW9uIikgTW9kdWxlWyJwcmVJbml0Il0gPSBbTW9kdWxlWyJwcmVJbml0Il1dOwogICAgICB3aGlsZSAoTW9kdWxlWyJwcmVJbml0Il0ubGVuZ3RoID4gMCkgewogICAgICAgIE1vZHVsZVsicHJlSW5pdCJdLnBvcCgpKCk7CiAgICAgIH0KICAgIH0KICAgIHJ1bigpOwogICAgbW9kdWxlUnRuID0gcmVhZHlQcm9taXNlOwogICAgcmV0dXJuIG1vZHVsZVJ0bjsKICB9Owp9KSgpOwovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIGNvbnN0IG9wZW5qcGVnID0gKE9wZW5KUEVHKTsKOy8vIC4vc3JjL2NvcmUvanB4LmpzCgoKCgpjbGFzcyBKcHhFcnJvciBleHRlbmRzIEJhc2VFeGNlcHRpb24gewogIGNvbnN0cnVjdG9yKG1zZykgewogICAgc3VwZXIobXNnLCAiSnB4RXJyb3IiKTsKICB9Cn0KY2xhc3MgSnB4SW1hZ2UgewogIHN0YXRpYyAjYnVmZmVyID0gbnVsbDsKICBzdGF0aWMgI2hhbmRsZXIgPSBudWxsOwogIHN0YXRpYyAjbW9kdWxlUHJvbWlzZSA9IG51bGw7CiAgc3RhdGljICN1c2VXYXNtID0gdHJ1ZTsKICBzdGF0aWMgI3VzZVdvcmtlckZldGNoID0gdHJ1ZTsKICBzdGF0aWMgI3dhc21VcmwgPSBudWxsOwogIHN0YXRpYyBzZXRPcHRpb25zKHsKICAgIGhhbmRsZXIsCiAgICB1c2VXYXNtLAogICAgdXNlV29ya2VyRmV0Y2gsCiAgICB3YXNtVXJsCiAgfSkgewogICAgdGhpcy4jdXNlV2FzbSA9IHVzZVdhc207CiAgICB0aGlzLiN1c2VXb3JrZXJGZXRjaCA9IHVzZVdvcmtlckZldGNoOwogICAgdGhpcy4jd2FzbVVybCA9IHdhc21Vcmw7CiAgICBpZiAoIXVzZVdvcmtlckZldGNoKSB7CiAgICAgIHRoaXMuI2hhbmRsZXIgPSBoYW5kbGVyOwogICAgfQogIH0KICBzdGF0aWMgYXN5bmMgI2dldEpzTW9kdWxlKGZhbGxiYWNrQ2FsbGJhY2spIHsKICAgIGNvbnN0IHBhdGggPSBgJHt0aGlzLiN3YXNtVXJsfW9wZW5qcGVnX25vd2FzbV9mYWxsYmFjay5qc2A7CiAgICBsZXQgaW5zdGFuY2UgPSBudWxsOwogICAgdHJ5IHsKICAgICAgY29uc3QgbW9kID0gYXdhaXQgaW1wb3J0KAogICAgICAvKndlYnBhY2tJZ25vcmU6IHRydWUqLwogICAgICAvKkB2aXRlLWlnbm9yZSovCiAgICAgIHBhdGgpOwogICAgICBpbnN0YW5jZSA9IG1vZC5kZWZhdWx0KCk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHdhcm4oYEpweEltYWdlI2dldEpzTW9kdWxlOiAke2V9YCk7CiAgICB9CiAgICBmYWxsYmFja0NhbGxiYWNrKGluc3RhbmNlKTsKICB9CiAgc3RhdGljIGFzeW5jICNpbnN0YW50aWF0ZVdhc20oZmFsbGJhY2tDYWxsYmFjaywgaW1wb3J0cywgc3VjY2Vzc0NhbGxiYWNrKSB7CiAgICBjb25zdCBmaWxlbmFtZSA9ICJvcGVuanBlZy53YXNtIjsKICAgIHRyeSB7CiAgICAgIGlmICghdGhpcy4jYnVmZmVyKSB7CiAgICAgICAgaWYgKHRoaXMuI3VzZVdvcmtlckZldGNoKSB7CiAgICAgICAgICB0aGlzLiNidWZmZXIgPSBhd2FpdCBmZXRjaEJpbmFyeURhdGEoYCR7dGhpcy4jd2FzbVVybH0ke2ZpbGVuYW1lfWApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLiNidWZmZXIgPSBhd2FpdCB0aGlzLiNoYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiRmV0Y2hCaW5hcnlEYXRhIiwgewogICAgICAgICAgICB0eXBlOiAid2FzbUZhY3RvcnkiLAogICAgICAgICAgICBmaWxlbmFtZQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZSh0aGlzLiNidWZmZXIsIGltcG9ydHMpOwogICAgICByZXR1cm4gc3VjY2Vzc0NhbGxiYWNrKHJlc3VsdHMuaW5zdGFuY2UpOwogICAgfSBjYXRjaCAocmVhc29uKSB7CiAgICAgIHdhcm4oYEpweEltYWdlI2luc3RhbnRpYXRlV2FzbTogJHtyZWFzb259YCk7CiAgICAgIHRoaXMuI2dldEpzTW9kdWxlKGZhbGxiYWNrQ2FsbGJhY2spOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZmluYWxseSB7CiAgICAgIHRoaXMuI2hhbmRsZXIgPSBudWxsOwogICAgfQogIH0KICBzdGF0aWMgYXN5bmMgZGVjb2RlKGJ5dGVzLCB7CiAgICBudW1Db21wb25lbnRzID0gNCwKICAgIGlzSW5kZXhlZENvbG9ybWFwID0gZmFsc2UsCiAgICBzbWFza0luRGF0YSA9IGZhbHNlCiAgfSA9IHt9KSB7CiAgICBpZiAoIXRoaXMuI21vZHVsZVByb21pc2UpIHsKICAgICAgY29uc3QgewogICAgICAgIHByb21pc2UsCiAgICAgICAgcmVzb2x2ZQogICAgICB9ID0gUHJvbWlzZS53aXRoUmVzb2x2ZXJzKCk7CiAgICAgIGNvbnN0IHByb21pc2VzID0gW3Byb21pc2VdOwogICAgICBpZiAoIXRoaXMuI3VzZVdhc20pIHsKICAgICAgICB0aGlzLiNnZXRKc01vZHVsZShyZXNvbHZlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBwcm9taXNlcy5wdXNoKG9wZW5qcGVnKHsKICAgICAgICAgIHdhcm46IHdhcm4sCiAgICAgICAgICBpbnN0YW50aWF0ZVdhc206IHRoaXMuI2luc3RhbnRpYXRlV2FzbS5iaW5kKHRoaXMsIHJlc29sdmUpCiAgICAgICAgfSkpOwogICAgICB9CiAgICAgIHRoaXMuI21vZHVsZVByb21pc2UgPSBQcm9taXNlLnJhY2UocHJvbWlzZXMpOwogICAgfQogICAgY29uc3QgbW9kdWxlID0gYXdhaXQgdGhpcy4jbW9kdWxlUHJvbWlzZTsKICAgIGlmICghbW9kdWxlKSB7CiAgICAgIHRocm93IG5ldyBKcHhFcnJvcigiT3BlbkpQRUcgZmFpbGVkIHRvIGluaXRpYWxpemUiKTsKICAgIH0KICAgIGxldCBwdHI7CiAgICB0cnkgewogICAgICBjb25zdCBzaXplID0gYnl0ZXMubGVuZ3RoOwogICAgICBwdHIgPSBtb2R1bGUuX21hbGxvYyhzaXplKTsKICAgICAgbW9kdWxlLkhFQVBVOC5zZXQoYnl0ZXMsIHB0cik7CiAgICAgIGNvbnN0IHJldCA9IG1vZHVsZS5fanAyX2RlY29kZShwdHIsIHNpemUsIG51bUNvbXBvbmVudHMgPiAwID8gbnVtQ29tcG9uZW50cyA6IDAsICEhaXNJbmRleGVkQ29sb3JtYXAsICEhc21hc2tJbkRhdGEpOwogICAgICBpZiAocmV0KSB7CiAgICAgICAgY29uc3QgewogICAgICAgICAgZXJyb3JNZXNzYWdlcwogICAgICAgIH0gPSBtb2R1bGU7CiAgICAgICAgaWYgKGVycm9yTWVzc2FnZXMpIHsKICAgICAgICAgIGRlbGV0ZSBtb2R1bGUuZXJyb3JNZXNzYWdlczsKICAgICAgICAgIHRocm93IG5ldyBKcHhFcnJvcihlcnJvck1lc3NhZ2VzKTsKICAgICAgICB9CiAgICAgICAgdGhyb3cgbmV3IEpweEVycm9yKCJVbmtub3duIGVycm9yIik7CiAgICAgIH0KICAgICAgY29uc3QgewogICAgICAgIGltYWdlRGF0YQogICAgICB9ID0gbW9kdWxlOwogICAgICBtb2R1bGUuaW1hZ2VEYXRhID0gbnVsbDsKICAgICAgcmV0dXJuIGltYWdlRGF0YTsKICAgIH0gZmluYWxseSB7CiAgICAgIGlmIChwdHIpIHsKICAgICAgICBtb2R1bGUuX2ZyZWUocHRyKTsKICAgICAgfQogICAgfQogIH0KICBzdGF0aWMgY2xlYW51cCgpIHsKICAgIHRoaXMuI21vZHVsZVByb21pc2UgPSBudWxsOwogIH0KICBzdGF0aWMgcGFyc2VJbWFnZVByb3BlcnRpZXMoc3RyZWFtKSB7CiAgICBsZXQgbmV3Qnl0ZSA9IHN0cmVhbS5nZXRCeXRlKCk7CiAgICB3aGlsZSAobmV3Qnl0ZSA+PSAwKSB7CiAgICAgIGNvbnN0IG9sZEJ5dGUgPSBuZXdCeXRlOwogICAgICBuZXdCeXRlID0gc3RyZWFtLmdldEJ5dGUoKTsKICAgICAgY29uc3QgY29kZSA9IG9sZEJ5dGUgPDwgOCB8IG5ld0J5dGU7CiAgICAgIGlmIChjb2RlID09PSAweGZmNTEpIHsKICAgICAgICBzdHJlYW0uc2tpcCg0KTsKICAgICAgICBjb25zdCBYc2l6ID0gc3RyZWFtLmdldEludDMyKCkgPj4+IDA7CiAgICAgICAgY29uc3QgWXNpeiA9IHN0cmVhbS5nZXRJbnQzMigpID4+PiAwOwogICAgICAgIGNvbnN0IFhPc2l6ID0gc3RyZWFtLmdldEludDMyKCkgPj4+IDA7CiAgICAgICAgY29uc3QgWU9zaXogPSBzdHJlYW0uZ2V0SW50MzIoKSA+Pj4gMDsKICAgICAgICBzdHJlYW0uc2tpcCgxNik7CiAgICAgICAgY29uc3QgQ3NpeiA9IHN0cmVhbS5nZXRVaW50MTYoKTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgd2lkdGg6IFhzaXogLSBYT3NpeiwKICAgICAgICAgIGhlaWdodDogWXNpeiAtIFlPc2l6LAogICAgICAgICAgYml0c1BlckNvbXBvbmVudDogOCwKICAgICAgICAgIGNvbXBvbmVudHNDb3VudDogQ3NpegogICAgICAgIH07CiAgICAgIH0KICAgIH0KICAgIHRocm93IG5ldyBKcHhFcnJvcigiTm8gc2l6ZSBtYXJrZXIgZm91bmQgaW4gSlBYIHN0cmVhbSIpOwogIH0KfQoKOy8vIC4vc3JjL2NvcmUvYmluYXJ5X2NtYXAuanMKCmZ1bmN0aW9uIGhleFRvSW50KGEsIHNpemUpIHsKICBsZXQgbiA9IDA7CiAgZm9yIChsZXQgaSA9IDA7IGkgPD0gc2l6ZTsgaSsrKSB7CiAgICBuID0gbiA8PCA4IHwgYVtpXTsKICB9CiAgcmV0dXJuIG4gPj4+IDA7Cn0KZnVuY3Rpb24gaGV4VG9TdHIoYSwgc2l6ZSkgewogIGlmIChzaXplID09PSAxKSB7CiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShhWzBdLCBhWzFdKTsKICB9CiAgaWYgKHNpemUgPT09IDMpIHsKICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGFbMF0sIGFbMV0sIGFbMl0sIGFbM10pOwogIH0KICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSguLi5hLnN1YmFycmF5KDAsIHNpemUgKyAxKSk7Cn0KZnVuY3Rpb24gYWRkSGV4KGEsIGIsIHNpemUpIHsKICBsZXQgYyA9IDA7CiAgZm9yIChsZXQgaSA9IHNpemU7IGkgPj0gMDsgaS0tKSB7CiAgICBjICs9IGFbaV0gKyBiW2ldOwogICAgYVtpXSA9IGMgJiAyNTU7CiAgICBjID4+PSA4OwogIH0KfQpmdW5jdGlvbiBpbmNIZXgoYSwgc2l6ZSkgewogIGxldCBjID0gMTsKICBmb3IgKGxldCBpID0gc2l6ZTsgaSA+PSAwICYmIGMgPiAwOyBpLS0pIHsKICAgIGMgKz0gYVtpXTsKICAgIGFbaV0gPSBjICYgMjU1OwogICAgYyA+Pj0gODsKICB9Cn0KY29uc3QgTUFYX05VTV9TSVpFID0gMTY7CmNvbnN0IE1BWF9FTkNPREVEX05VTV9TSVpFID0gMTk7CmNsYXNzIEJpbmFyeUNNYXBTdHJlYW0gewogIGNvbnN0cnVjdG9yKGRhdGEpIHsKICAgIHRoaXMuYnVmZmVyID0gZGF0YTsKICAgIHRoaXMucG9zID0gMDsKICAgIHRoaXMuZW5kID0gZGF0YS5sZW5ndGg7CiAgICB0aGlzLnRtcEJ1ZiA9IG5ldyBVaW50OEFycmF5KE1BWF9FTkNPREVEX05VTV9TSVpFKTsKICB9CiAgcmVhZEJ5dGUoKSB7CiAgICBpZiAodGhpcy5wb3MgPj0gdGhpcy5lbmQpIHsKICAgICAgcmV0dXJuIC0xOwogICAgfQogICAgcmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMucG9zKytdOwogIH0KICByZWFkTnVtYmVyKCkgewogICAgbGV0IG4gPSAwOwogICAgbGV0IGxhc3Q7CiAgICBkbyB7CiAgICAgIGNvbnN0IGIgPSB0aGlzLnJlYWRCeXRlKCk7CiAgICAgIGlmIChiIDwgMCkgewogICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigidW5leHBlY3RlZCBFT0YgaW4gYmNtYXAiKTsKICAgICAgfQogICAgICBsYXN0ID0gIShiICYgMHg4MCk7CiAgICAgIG4gPSBuIDw8IDcgfCBiICYgMHg3ZjsKICAgIH0gd2hpbGUgKCFsYXN0KTsKICAgIHJldHVybiBuOwogIH0KICByZWFkU2lnbmVkKCkgewogICAgY29uc3QgbiA9IHRoaXMucmVhZE51bWJlcigpOwogICAgcmV0dXJuIG4gJiAxID8gfihuID4+PiAxKSA6IG4gPj4+IDE7CiAgfQogIHJlYWRIZXgobnVtLCBzaXplKSB7CiAgICBudW0uc2V0KHRoaXMuYnVmZmVyLnN1YmFycmF5KHRoaXMucG9zLCB0aGlzLnBvcyArIHNpemUgKyAxKSk7CiAgICB0aGlzLnBvcyArPSBzaXplICsgMTsKICB9CiAgcmVhZEhleE51bWJlcihudW0sIHNpemUpIHsKICAgIGxldCBsYXN0OwogICAgY29uc3Qgc3RhY2sgPSB0aGlzLnRtcEJ1ZjsKICAgIGxldCBzcCA9IDA7CiAgICBkbyB7CiAgICAgIGNvbnN0IGIgPSB0aGlzLnJlYWRCeXRlKCk7CiAgICAgIGlmIChiIDwgMCkgewogICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigidW5leHBlY3RlZCBFT0YgaW4gYmNtYXAiKTsKICAgICAgfQogICAgICBsYXN0ID0gIShiICYgMHg4MCk7CiAgICAgIHN0YWNrW3NwKytdID0gYiAmIDB4N2Y7CiAgICB9IHdoaWxlICghbGFzdCk7CiAgICBsZXQgaSA9IHNpemUsCiAgICAgIGJ1ZmZlciA9IDAsCiAgICAgIGJ1ZmZlclNpemUgPSAwOwogICAgd2hpbGUgKGkgPj0gMCkgewogICAgICB3aGlsZSAoYnVmZmVyU2l6ZSA8IDggJiYgc3RhY2subGVuZ3RoID4gMCkgewogICAgICAgIGJ1ZmZlciB8PSBzdGFja1stLXNwXSA8PCBidWZmZXJTaXplOwogICAgICAgIGJ1ZmZlclNpemUgKz0gNzsKICAgICAgfQogICAgICBudW1baV0gPSBidWZmZXIgJiAyNTU7CiAgICAgIGktLTsKICAgICAgYnVmZmVyID4+PSA4OwogICAgICBidWZmZXJTaXplIC09IDg7CiAgICB9CiAgfQogIHJlYWRIZXhTaWduZWQobnVtLCBzaXplKSB7CiAgICB0aGlzLnJlYWRIZXhOdW1iZXIobnVtLCBzaXplKTsKICAgIGNvbnN0IHNpZ24gPSBudW1bc2l6ZV0gJiAxID8gMjU1IDogMDsKICAgIGxldCBjID0gMDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IHNpemU7IGkrKykgewogICAgICBjID0gKGMgJiAxKSA8PCA4IHwgbnVtW2ldOwogICAgICBudW1baV0gPSBjID4+IDEgXiBzaWduOwogICAgfQogIH0KICByZWFkU3RyaW5nKCkgewogICAgY29uc3QgbGVuID0gdGhpcy5yZWFkTnVtYmVyKCksCiAgICAgIGJ1ZiA9IG5ldyBBcnJheShsZW4pOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICBidWZbaV0gPSB0aGlzLnJlYWROdW1iZXIoKTsKICAgIH0KICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKC4uLmJ1Zik7CiAgfQp9CmNsYXNzIEJpbmFyeUNNYXBSZWFkZXIgewogIGFzeW5jIHByb2Nlc3MoZGF0YSwgY01hcCwgZXh0ZW5kKSB7CiAgICBjb25zdCBzdHJlYW0gPSBuZXcgQmluYXJ5Q01hcFN0cmVhbShkYXRhKTsKICAgIGNvbnN0IGhlYWRlciA9IHN0cmVhbS5yZWFkQnl0ZSgpOwogICAgY01hcC52ZXJ0aWNhbCA9ICEhKGhlYWRlciAmIDEpOwogICAgbGV0IHVzZUNNYXAgPSBudWxsOwogICAgY29uc3Qgc3RhcnQgPSBuZXcgVWludDhBcnJheShNQVhfTlVNX1NJWkUpOwogICAgY29uc3QgZW5kID0gbmV3IFVpbnQ4QXJyYXkoTUFYX05VTV9TSVpFKTsKICAgIGNvbnN0IGNoYXIgPSBuZXcgVWludDhBcnJheShNQVhfTlVNX1NJWkUpOwogICAgY29uc3QgY2hhckNvZGUgPSBuZXcgVWludDhBcnJheShNQVhfTlVNX1NJWkUpOwogICAgY29uc3QgdG1wID0gbmV3IFVpbnQ4QXJyYXkoTUFYX05VTV9TSVpFKTsKICAgIGxldCBjb2RlOwogICAgbGV0IGI7CiAgICB3aGlsZSAoKGIgPSBzdHJlYW0ucmVhZEJ5dGUoKSkgPj0gMCkgewogICAgICBjb25zdCB0eXBlID0gYiA+PiA1OwogICAgICBpZiAodHlwZSA9PT0gNykgewogICAgICAgIHN3aXRjaCAoYiAmIDB4MWYpIHsKICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgc3RyZWFtLnJlYWRTdHJpbmcoKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgIHVzZUNNYXAgPSBzdHJlYW0ucmVhZFN0cmluZygpOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgY29uc3Qgc2VxdWVuY2UgPSAhIShiICYgMHgxMCk7CiAgICAgIGNvbnN0IGRhdGFTaXplID0gYiAmIDE1OwogICAgICBpZiAoZGF0YVNpemUgKyAxID4gTUFYX05VTV9TSVpFKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCaW5hcnlDTWFwUmVhZGVyLnByb2Nlc3M6IEludmFsaWQgZGF0YVNpemUuIik7CiAgICAgIH0KICAgICAgY29uc3QgdWNzMkRhdGFTaXplID0gMTsKICAgICAgY29uc3Qgc3ViaXRlbXNDb3VudCA9IHN0cmVhbS5yZWFkTnVtYmVyKCk7CiAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgIGNhc2UgMDoKICAgICAgICAgIHN0cmVhbS5yZWFkSGV4KHN0YXJ0LCBkYXRhU2l6ZSk7CiAgICAgICAgICBzdHJlYW0ucmVhZEhleE51bWJlcihlbmQsIGRhdGFTaXplKTsKICAgICAgICAgIGFkZEhleChlbmQsIHN0YXJ0LCBkYXRhU2l6ZSk7CiAgICAgICAgICBjTWFwLmFkZENvZGVzcGFjZVJhbmdlKGRhdGFTaXplICsgMSwgaGV4VG9JbnQoc3RhcnQsIGRhdGFTaXplKSwgaGV4VG9JbnQoZW5kLCBkYXRhU2l6ZSkpOwogICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBzdWJpdGVtc0NvdW50OyBpKyspIHsKICAgICAgICAgICAgaW5jSGV4KGVuZCwgZGF0YVNpemUpOwogICAgICAgICAgICBzdHJlYW0ucmVhZEhleE51bWJlcihzdGFydCwgZGF0YVNpemUpOwogICAgICAgICAgICBhZGRIZXgoc3RhcnQsIGVuZCwgZGF0YVNpemUpOwogICAgICAgICAgICBzdHJlYW0ucmVhZEhleE51bWJlcihlbmQsIGRhdGFTaXplKTsKICAgICAgICAgICAgYWRkSGV4KGVuZCwgc3RhcnQsIGRhdGFTaXplKTsKICAgICAgICAgICAgY01hcC5hZGRDb2Rlc3BhY2VSYW5nZShkYXRhU2l6ZSArIDEsIGhleFRvSW50KHN0YXJ0LCBkYXRhU2l6ZSksIGhleFRvSW50KGVuZCwgZGF0YVNpemUpKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMToKICAgICAgICAgIHN0cmVhbS5yZWFkSGV4KHN0YXJ0LCBkYXRhU2l6ZSk7CiAgICAgICAgICBzdHJlYW0ucmVhZEhleE51bWJlcihlbmQsIGRhdGFTaXplKTsKICAgICAgICAgIGFkZEhleChlbmQsIHN0YXJ0LCBkYXRhU2l6ZSk7CiAgICAgICAgICBzdHJlYW0ucmVhZE51bWJlcigpOwogICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBzdWJpdGVtc0NvdW50OyBpKyspIHsKICAgICAgICAgICAgaW5jSGV4KGVuZCwgZGF0YVNpemUpOwogICAgICAgICAgICBzdHJlYW0ucmVhZEhleE51bWJlcihzdGFydCwgZGF0YVNpemUpOwogICAgICAgICAgICBhZGRIZXgoc3RhcnQsIGVuZCwgZGF0YVNpemUpOwogICAgICAgICAgICBzdHJlYW0ucmVhZEhleE51bWJlcihlbmQsIGRhdGFTaXplKTsKICAgICAgICAgICAgYWRkSGV4KGVuZCwgc3RhcnQsIGRhdGFTaXplKTsKICAgICAgICAgICAgc3RyZWFtLnJlYWROdW1iZXIoKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMjoKICAgICAgICAgIHN0cmVhbS5yZWFkSGV4KGNoYXIsIGRhdGFTaXplKTsKICAgICAgICAgIGNvZGUgPSBzdHJlYW0ucmVhZE51bWJlcigpOwogICAgICAgICAgY01hcC5tYXBPbmUoaGV4VG9JbnQoY2hhciwgZGF0YVNpemUpLCBjb2RlKTsKICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgc3ViaXRlbXNDb3VudDsgaSsrKSB7CiAgICAgICAgICAgIGluY0hleChjaGFyLCBkYXRhU2l6ZSk7CiAgICAgICAgICAgIGlmICghc2VxdWVuY2UpIHsKICAgICAgICAgICAgICBzdHJlYW0ucmVhZEhleE51bWJlcih0bXAsIGRhdGFTaXplKTsKICAgICAgICAgICAgICBhZGRIZXgoY2hhciwgdG1wLCBkYXRhU2l6ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29kZSA9IHN0cmVhbS5yZWFkU2lnbmVkKCkgKyAoY29kZSArIDEpOwogICAgICAgICAgICBjTWFwLm1hcE9uZShoZXhUb0ludChjaGFyLCBkYXRhU2l6ZSksIGNvZGUpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAzOgogICAgICAgICAgc3RyZWFtLnJlYWRIZXgoc3RhcnQsIGRhdGFTaXplKTsKICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKGVuZCwgZGF0YVNpemUpOwogICAgICAgICAgYWRkSGV4KGVuZCwgc3RhcnQsIGRhdGFTaXplKTsKICAgICAgICAgIGNvZGUgPSBzdHJlYW0ucmVhZE51bWJlcigpOwogICAgICAgICAgY01hcC5tYXBDaWRSYW5nZShoZXhUb0ludChzdGFydCwgZGF0YVNpemUpLCBoZXhUb0ludChlbmQsIGRhdGFTaXplKSwgY29kZSk7CiAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHN1Yml0ZW1zQ291bnQ7IGkrKykgewogICAgICAgICAgICBpbmNIZXgoZW5kLCBkYXRhU2l6ZSk7CiAgICAgICAgICAgIGlmICghc2VxdWVuY2UpIHsKICAgICAgICAgICAgICBzdHJlYW0ucmVhZEhleE51bWJlcihzdGFydCwgZGF0YVNpemUpOwogICAgICAgICAgICAgIGFkZEhleChzdGFydCwgZW5kLCBkYXRhU2l6ZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgc3RhcnQuc2V0KGVuZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhOdW1iZXIoZW5kLCBkYXRhU2l6ZSk7CiAgICAgICAgICAgIGFkZEhleChlbmQsIHN0YXJ0LCBkYXRhU2l6ZSk7CiAgICAgICAgICAgIGNvZGUgPSBzdHJlYW0ucmVhZE51bWJlcigpOwogICAgICAgICAgICBjTWFwLm1hcENpZFJhbmdlKGhleFRvSW50KHN0YXJ0LCBkYXRhU2l6ZSksIGhleFRvSW50KGVuZCwgZGF0YVNpemUpLCBjb2RlKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgNDoKICAgICAgICAgIHN0cmVhbS5yZWFkSGV4KGNoYXIsIHVjczJEYXRhU2l6ZSk7CiAgICAgICAgICBzdHJlYW0ucmVhZEhleChjaGFyQ29kZSwgZGF0YVNpemUpOwogICAgICAgICAgY01hcC5tYXBPbmUoaGV4VG9JbnQoY2hhciwgdWNzMkRhdGFTaXplKSwgaGV4VG9TdHIoY2hhckNvZGUsIGRhdGFTaXplKSk7CiAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHN1Yml0ZW1zQ291bnQ7IGkrKykgewogICAgICAgICAgICBpbmNIZXgoY2hhciwgdWNzMkRhdGFTaXplKTsKICAgICAgICAgICAgaWYgKCFzZXF1ZW5jZSkgewogICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKHRtcCwgdWNzMkRhdGFTaXplKTsKICAgICAgICAgICAgICBhZGRIZXgoY2hhciwgdG1wLCB1Y3MyRGF0YVNpemUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGluY0hleChjaGFyQ29kZSwgZGF0YVNpemUpOwogICAgICAgICAgICBzdHJlYW0ucmVhZEhleFNpZ25lZCh0bXAsIGRhdGFTaXplKTsKICAgICAgICAgICAgYWRkSGV4KGNoYXJDb2RlLCB0bXAsIGRhdGFTaXplKTsKICAgICAgICAgICAgY01hcC5tYXBPbmUoaGV4VG9JbnQoY2hhciwgdWNzMkRhdGFTaXplKSwgaGV4VG9TdHIoY2hhckNvZGUsIGRhdGFTaXplKSk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDU6CiAgICAgICAgICBzdHJlYW0ucmVhZEhleChzdGFydCwgdWNzMkRhdGFTaXplKTsKICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKGVuZCwgdWNzMkRhdGFTaXplKTsKICAgICAgICAgIGFkZEhleChlbmQsIHN0YXJ0LCB1Y3MyRGF0YVNpemUpOwogICAgICAgICAgc3RyZWFtLnJlYWRIZXgoY2hhckNvZGUsIGRhdGFTaXplKTsKICAgICAgICAgIGNNYXAubWFwQmZSYW5nZShoZXhUb0ludChzdGFydCwgdWNzMkRhdGFTaXplKSwgaGV4VG9JbnQoZW5kLCB1Y3MyRGF0YVNpemUpLCBoZXhUb1N0cihjaGFyQ29kZSwgZGF0YVNpemUpKTsKICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgc3ViaXRlbXNDb3VudDsgaSsrKSB7CiAgICAgICAgICAgIGluY0hleChlbmQsIHVjczJEYXRhU2l6ZSk7CiAgICAgICAgICAgIGlmICghc2VxdWVuY2UpIHsKICAgICAgICAgICAgICBzdHJlYW0ucmVhZEhleE51bWJlcihzdGFydCwgdWNzMkRhdGFTaXplKTsKICAgICAgICAgICAgICBhZGRIZXgoc3RhcnQsIGVuZCwgdWNzMkRhdGFTaXplKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBzdGFydC5zZXQoZW5kKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzdHJlYW0ucmVhZEhleE51bWJlcihlbmQsIHVjczJEYXRhU2l6ZSk7CiAgICAgICAgICAgIGFkZEhleChlbmQsIHN0YXJ0LCB1Y3MyRGF0YVNpemUpOwogICAgICAgICAgICBzdHJlYW0ucmVhZEhleChjaGFyQ29kZSwgZGF0YVNpemUpOwogICAgICAgICAgICBjTWFwLm1hcEJmUmFuZ2UoaGV4VG9JbnQoc3RhcnQsIHVjczJEYXRhU2l6ZSksIGhleFRvSW50KGVuZCwgdWNzMkRhdGFTaXplKSwgaGV4VG9TdHIoY2hhckNvZGUsIGRhdGFTaXplKSk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCaW5hcnlDTWFwUmVhZGVyLnByb2Nlc3MgLSB1bmtub3duIHR5cGU6ICR7dHlwZX1gKTsKICAgICAgfQogICAgfQogICAgaWYgKHVzZUNNYXApIHsKICAgICAgcmV0dXJuIGV4dGVuZCh1c2VDTWFwKTsKICAgIH0KICAgIHJldHVybiBjTWFwOwogIH0KfQoKOy8vIC4vc3JjL2NvcmUvYXNjaWlfODVfc3RyZWFtLmpzCgoKY2xhc3MgQXNjaWk4NVN0cmVhbSBleHRlbmRzIERlY29kZVN0cmVhbSB7CiAgY29uc3RydWN0b3Ioc3RyLCBtYXliZUxlbmd0aCkgewogICAgaWYgKG1heWJlTGVuZ3RoKSB7CiAgICAgIG1heWJlTGVuZ3RoICo9IDAuODsKICAgIH0KICAgIHN1cGVyKG1heWJlTGVuZ3RoKTsKICAgIHRoaXMuc3RyID0gc3RyOwogICAgdGhpcy5kaWN0ID0gc3RyLmRpY3Q7CiAgICB0aGlzLmlucHV0ID0gbmV3IFVpbnQ4QXJyYXkoNSk7CiAgfQogIHJlYWRCbG9jaygpIHsKICAgIGNvbnN0IFRJTERBX0NIQVIgPSAweDdlOwogICAgY29uc3QgWl9MT1dFUl9DSEFSID0gMHg3YTsKICAgIGNvbnN0IEVPRiA9IC0xOwogICAgY29uc3Qgc3RyID0gdGhpcy5zdHI7CiAgICBsZXQgYyA9IHN0ci5nZXRCeXRlKCk7CiAgICB3aGlsZSAoaXNXaGl0ZVNwYWNlKGMpKSB7CiAgICAgIGMgPSBzdHIuZ2V0Qnl0ZSgpOwogICAgfQogICAgaWYgKGMgPT09IEVPRiB8fCBjID09PSBUSUxEQV9DSEFSKSB7CiAgICAgIHRoaXMuZW9mID0gdHJ1ZTsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgYnVmZmVyTGVuZ3RoID0gdGhpcy5idWZmZXJMZW5ndGg7CiAgICBsZXQgYnVmZmVyLCBpOwogICAgaWYgKGMgPT09IFpfTE9XRVJfQ0hBUikgewogICAgICBidWZmZXIgPSB0aGlzLmVuc3VyZUJ1ZmZlcihidWZmZXJMZW5ndGggKyA0KTsKICAgICAgZm9yIChpID0gMDsgaSA8IDQ7ICsraSkgewogICAgICAgIGJ1ZmZlcltidWZmZXJMZW5ndGggKyBpXSA9IDA7CiAgICAgIH0KICAgICAgdGhpcy5idWZmZXJMZW5ndGggKz0gNDsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5pbnB1dDsKICAgICAgaW5wdXRbMF0gPSBjOwogICAgICBmb3IgKGkgPSAxOyBpIDwgNTsgKytpKSB7CiAgICAgICAgYyA9IHN0ci5nZXRCeXRlKCk7CiAgICAgICAgd2hpbGUgKGlzV2hpdGVTcGFjZShjKSkgewogICAgICAgICAgYyA9IHN0ci5nZXRCeXRlKCk7CiAgICAgICAgfQogICAgICAgIGlucHV0W2ldID0gYzsKICAgICAgICBpZiAoYyA9PT0gRU9GIHx8IGMgPT09IFRJTERBX0NIQVIpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBidWZmZXIgPSB0aGlzLmVuc3VyZUJ1ZmZlcihidWZmZXJMZW5ndGggKyBpIC0gMSk7CiAgICAgIHRoaXMuYnVmZmVyTGVuZ3RoICs9IGkgLSAxOwogICAgICBpZiAoaSA8IDUpIHsKICAgICAgICBmb3IgKDsgaSA8IDU7ICsraSkgewogICAgICAgICAgaW5wdXRbaV0gPSAweDIxICsgODQ7CiAgICAgICAgfQogICAgICAgIHRoaXMuZW9mID0gdHJ1ZTsKICAgICAgfQogICAgICBsZXQgdCA9IDA7CiAgICAgIGZvciAoaSA9IDA7IGkgPCA1OyArK2kpIHsKICAgICAgICB0ID0gdCAqIDg1ICsgKGlucHV0W2ldIC0gMHgyMSk7CiAgICAgIH0KICAgICAgZm9yIChpID0gMzsgaSA+PSAwOyAtLWkpIHsKICAgICAgICBidWZmZXJbYnVmZmVyTGVuZ3RoICsgaV0gPSB0ICYgMHhmZjsKICAgICAgICB0ID4+PSA4OwogICAgICB9CiAgICB9CiAgfQp9Cgo7Ly8gLi9zcmMvY29yZS9hc2NpaV9oZXhfc3RyZWFtLmpzCgpjbGFzcyBBc2NpaUhleFN0cmVhbSBleHRlbmRzIERlY29kZVN0cmVhbSB7CiAgY29uc3RydWN0b3Ioc3RyLCBtYXliZUxlbmd0aCkgewogICAgaWYgKG1heWJlTGVuZ3RoKSB7CiAgICAgIG1heWJlTGVuZ3RoICo9IDAuNTsKICAgIH0KICAgIHN1cGVyKG1heWJlTGVuZ3RoKTsKICAgIHRoaXMuc3RyID0gc3RyOwogICAgdGhpcy5kaWN0ID0gc3RyLmRpY3Q7CiAgICB0aGlzLmZpcnN0RGlnaXQgPSAtMTsKICB9CiAgcmVhZEJsb2NrKCkgewogICAgY29uc3QgVVBTVFJFQU1fQkxPQ0tfU0laRSA9IDgwMDA7CiAgICBjb25zdCBieXRlcyA9IHRoaXMuc3RyLmdldEJ5dGVzKFVQU1RSRUFNX0JMT0NLX1NJWkUpOwogICAgaWYgKCFieXRlcy5sZW5ndGgpIHsKICAgICAgdGhpcy5lb2YgPSB0cnVlOwogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBtYXhEZWNvZGVMZW5ndGggPSBieXRlcy5sZW5ndGggKyAxID4+IDE7CiAgICBjb25zdCBidWZmZXIgPSB0aGlzLmVuc3VyZUJ1ZmZlcih0aGlzLmJ1ZmZlckxlbmd0aCArIG1heERlY29kZUxlbmd0aCk7CiAgICBsZXQgYnVmZmVyTGVuZ3RoID0gdGhpcy5idWZmZXJMZW5ndGg7CiAgICBsZXQgZmlyc3REaWdpdCA9IHRoaXMuZmlyc3REaWdpdDsKICAgIGZvciAoY29uc3QgY2ggb2YgYnl0ZXMpIHsKICAgICAgbGV0IGRpZ2l0OwogICAgICBpZiAoY2ggPj0gMHgzMCAmJiBjaCA8PSAweDM5KSB7CiAgICAgICAgZGlnaXQgPSBjaCAmIDB4MGY7CiAgICAgIH0gZWxzZSBpZiAoY2ggPj0gMHg0MSAmJiBjaCA8PSAweDQ2IHx8IGNoID49IDB4NjEgJiYgY2ggPD0gMHg2NikgewogICAgICAgIGRpZ2l0ID0gKGNoICYgMHgwZikgKyA5OwogICAgICB9IGVsc2UgaWYgKGNoID09PSAweDNlKSB7CiAgICAgICAgdGhpcy5lb2YgPSB0cnVlOwogICAgICAgIGJyZWFrOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmIChmaXJzdERpZ2l0IDwgMCkgewogICAgICAgIGZpcnN0RGlnaXQgPSBkaWdpdDsKICAgICAgfSBlbHNlIHsKICAgICAgICBidWZmZXJbYnVmZmVyTGVuZ3RoKytdID0gZmlyc3REaWdpdCA8PCA0IHwgZGlnaXQ7CiAgICAgICAgZmlyc3REaWdpdCA9IC0xOwogICAgICB9CiAgICB9CiAgICBpZiAoZmlyc3REaWdpdCA+PSAwICYmIHRoaXMuZW9mKSB7CiAgICAgIGJ1ZmZlcltidWZmZXJMZW5ndGgrK10gPSBmaXJzdERpZ2l0IDw8IDQ7CiAgICAgIGZpcnN0RGlnaXQgPSAtMTsKICAgIH0KICAgIHRoaXMuZmlyc3REaWdpdCA9IGZpcnN0RGlnaXQ7CiAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IGJ1ZmZlckxlbmd0aDsKICB9Cn0KCjsvLyAuL3NyYy9jb3JlL2NjaXR0LmpzCgpjb25zdCBjY2l0dEVPTCA9IC0yOwpjb25zdCBjY2l0dEVPRiA9IC0xOwpjb25zdCB0d29EaW1QYXNzID0gMDsKY29uc3QgdHdvRGltSG9yaXogPSAxOwpjb25zdCB0d29EaW1WZXJ0MCA9IDI7CmNvbnN0IHR3b0RpbVZlcnRSMSA9IDM7CmNvbnN0IHR3b0RpbVZlcnRMMSA9IDQ7CmNvbnN0IHR3b0RpbVZlcnRSMiA9IDU7CmNvbnN0IHR3b0RpbVZlcnRMMiA9IDY7CmNvbnN0IHR3b0RpbVZlcnRSMyA9IDc7CmNvbnN0IHR3b0RpbVZlcnRMMyA9IDg7CmNvbnN0IHR3b0RpbVRhYmxlID0gW1stMSwgLTFdLCBbLTEsIC0xXSwgWzcsIHR3b0RpbVZlcnRMM10sIFs3LCB0d29EaW1WZXJ0UjNdLCBbNiwgdHdvRGltVmVydEwyXSwgWzYsIHR3b0RpbVZlcnRMMl0sIFs2LCB0d29EaW1WZXJ0UjJdLCBbNiwgdHdvRGltVmVydFIyXSwgWzQsIHR3b0RpbVBhc3NdLCBbNCwgdHdvRGltUGFzc10sIFs0LCB0d29EaW1QYXNzXSwgWzQsIHR3b0RpbVBhc3NdLCBbNCwgdHdvRGltUGFzc10sIFs0LCB0d29EaW1QYXNzXSwgWzQsIHR3b0RpbVBhc3NdLCBbNCwgdHdvRGltUGFzc10sIFszLCB0d29EaW1Ib3Jpel0sIFszLCB0d29EaW1Ib3Jpel0sIFszLCB0d29EaW1Ib3Jpel0sIFszLCB0d29EaW1Ib3Jpel0sIFszLCB0d29EaW1Ib3Jpel0sIFszLCB0d29EaW1Ib3Jpel0sIFszLCB0d29EaW1Ib3Jpel0sIFszLCB0d29EaW1Ib3Jpel0sIFszLCB0d29EaW1Ib3Jpel0sIFszLCB0d29EaW1Ib3Jpel0sIFszLCB0d29EaW1Ib3Jpel0sIFszLCB0d29EaW1Ib3Jpel0sIFszLCB0d29EaW1Ib3Jpel0sIFszLCB0d29EaW1Ib3Jpel0sIFszLCB0d29EaW1Ib3Jpel0sIFszLCB0d29EaW1Ib3Jpel0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXSwgWzEsIHR3b0RpbVZlcnQwXV07CmNvbnN0IHdoaXRlVGFibGUxID0gW1stMSwgLTFdLCBbMTIsIGNjaXR0RU9MXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbMTEsIDE3OTJdLCBbMTEsIDE3OTJdLCBbMTIsIDE5ODRdLCBbMTIsIDIwNDhdLCBbMTIsIDIxMTJdLCBbMTIsIDIxNzZdLCBbMTIsIDIyNDBdLCBbMTIsIDIzMDRdLCBbMTEsIDE4NTZdLCBbMTEsIDE4NTZdLCBbMTEsIDE5MjBdLCBbMTEsIDE5MjBdLCBbMTIsIDIzNjhdLCBbMTIsIDI0MzJdLCBbMTIsIDI0OTZdLCBbMTIsIDI1NjBdXTsKY29uc3Qgd2hpdGVUYWJsZTIgPSBbWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFs4LCAyOV0sIFs4LCAyOV0sIFs4LCAzMF0sIFs4LCAzMF0sIFs4LCA0NV0sIFs4LCA0NV0sIFs4LCA0Nl0sIFs4LCA0Nl0sIFs3LCAyMl0sIFs3LCAyMl0sIFs3LCAyMl0sIFs3LCAyMl0sIFs3LCAyM10sIFs3LCAyM10sIFs3LCAyM10sIFs3LCAyM10sIFs4LCA0N10sIFs4LCA0N10sIFs4LCA0OF0sIFs4LCA0OF0sIFs2LCAxM10sIFs2LCAxM10sIFs2LCAxM10sIFs2LCAxM10sIFs2LCAxM10sIFs2LCAxM10sIFs2LCAxM10sIFs2LCAxM10sIFs3LCAyMF0sIFs3LCAyMF0sIFs3LCAyMF0sIFs3LCAyMF0sIFs4LCAzM10sIFs4LCAzM10sIFs4LCAzNF0sIFs4LCAzNF0sIFs4LCAzNV0sIFs4LCAzNV0sIFs4LCAzNl0sIFs4LCAzNl0sIFs4LCAzN10sIFs4LCAzN10sIFs4LCAzOF0sIFs4LCAzOF0sIFs3LCAxOV0sIFs3LCAxOV0sIFs3LCAxOV0sIFs3LCAxOV0sIFs4LCAzMV0sIFs4LCAzMV0sIFs4LCAzMl0sIFs4LCAzMl0sIFs2LCAxXSwgWzYsIDFdLCBbNiwgMV0sIFs2LCAxXSwgWzYsIDFdLCBbNiwgMV0sIFs2LCAxXSwgWzYsIDFdLCBbNiwgMTJdLCBbNiwgMTJdLCBbNiwgMTJdLCBbNiwgMTJdLCBbNiwgMTJdLCBbNiwgMTJdLCBbNiwgMTJdLCBbNiwgMTJdLCBbOCwgNTNdLCBbOCwgNTNdLCBbOCwgNTRdLCBbOCwgNTRdLCBbNywgMjZdLCBbNywgMjZdLCBbNywgMjZdLCBbNywgMjZdLCBbOCwgMzldLCBbOCwgMzldLCBbOCwgNDBdLCBbOCwgNDBdLCBbOCwgNDFdLCBbOCwgNDFdLCBbOCwgNDJdLCBbOCwgNDJdLCBbOCwgNDNdLCBbOCwgNDNdLCBbOCwgNDRdLCBbOCwgNDRdLCBbNywgMjFdLCBbNywgMjFdLCBbNywgMjFdLCBbNywgMjFdLCBbNywgMjhdLCBbNywgMjhdLCBbNywgMjhdLCBbNywgMjhdLCBbOCwgNjFdLCBbOCwgNjFdLCBbOCwgNjJdLCBbOCwgNjJdLCBbOCwgNjNdLCBbOCwgNjNdLCBbOCwgMF0sIFs4LCAwXSwgWzgsIDMyMF0sIFs4LCAzMjBdLCBbOCwgMzg0XSwgWzgsIDM4NF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs3LCAyN10sIFs3LCAyN10sIFs3LCAyN10sIFs3LCAyN10sIFs4LCA1OV0sIFs4LCA1OV0sIFs4LCA2MF0sIFs4LCA2MF0sIFs5LCAxNDcyXSwgWzksIDE1MzZdLCBbOSwgMTYwMF0sIFs5LCAxNzI4XSwgWzcsIDE4XSwgWzcsIDE4XSwgWzcsIDE4XSwgWzcsIDE4XSwgWzcsIDI0XSwgWzcsIDI0XSwgWzcsIDI0XSwgWzcsIDI0XSwgWzgsIDQ5XSwgWzgsIDQ5XSwgWzgsIDUwXSwgWzgsIDUwXSwgWzgsIDUxXSwgWzgsIDUxXSwgWzgsIDUyXSwgWzgsIDUyXSwgWzcsIDI1XSwgWzcsIDI1XSwgWzcsIDI1XSwgWzcsIDI1XSwgWzgsIDU1XSwgWzgsIDU1XSwgWzgsIDU2XSwgWzgsIDU2XSwgWzgsIDU3XSwgWzgsIDU3XSwgWzgsIDU4XSwgWzgsIDU4XSwgWzYsIDE5Ml0sIFs2LCAxOTJdLCBbNiwgMTkyXSwgWzYsIDE5Ml0sIFs2LCAxOTJdLCBbNiwgMTkyXSwgWzYsIDE5Ml0sIFs2LCAxOTJdLCBbNiwgMTY2NF0sIFs2LCAxNjY0XSwgWzYsIDE2NjRdLCBbNiwgMTY2NF0sIFs2LCAxNjY0XSwgWzYsIDE2NjRdLCBbNiwgMTY2NF0sIFs2LCAxNjY0XSwgWzgsIDQ0OF0sIFs4LCA0NDhdLCBbOCwgNTEyXSwgWzgsIDUxMl0sIFs5LCA3MDRdLCBbOSwgNzY4XSwgWzgsIDY0MF0sIFs4LCA2NDBdLCBbOCwgNTc2XSwgWzgsIDU3Nl0sIFs5LCA4MzJdLCBbOSwgODk2XSwgWzksIDk2MF0sIFs5LCAxMDI0XSwgWzksIDEwODhdLCBbOSwgMTE1Ml0sIFs5LCAxMjE2XSwgWzksIDEyODBdLCBbOSwgMTM0NF0sIFs5LCAxNDA4XSwgWzcsIDI1Nl0sIFs3LCAyNTZdLCBbNywgMjU2XSwgWzcsIDI1Nl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDldLCBbNSwgOV0sIFs1LCA5XSwgWzUsIDldLCBbNSwgOV0sIFs1LCA5XSwgWzUsIDldLCBbNSwgOV0sIFs1LCA5XSwgWzUsIDldLCBbNSwgOV0sIFs1LCA5XSwgWzUsIDldLCBbNSwgOV0sIFs1LCA5XSwgWzUsIDldLCBbNiwgMTZdLCBbNiwgMTZdLCBbNiwgMTZdLCBbNiwgMTZdLCBbNiwgMTZdLCBbNiwgMTZdLCBbNiwgMTZdLCBbNiwgMTZdLCBbNiwgMTddLCBbNiwgMTddLCBbNiwgMTddLCBbNiwgMTddLCBbNiwgMTddLCBbNiwgMTddLCBbNiwgMTddLCBbNiwgMTddLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs2LCAxNF0sIFs2LCAxNF0sIFs2LCAxNF0sIFs2LCAxNF0sIFs2LCAxNF0sIFs2LCAxNF0sIFs2LCAxNF0sIFs2LCAxNF0sIFs2LCAxNV0sIFs2LCAxNV0sIFs2LCAxNV0sIFs2LCAxNV0sIFs2LCAxNV0sIFs2LCAxNV0sIFs2LCAxNV0sIFs2LCAxNV0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XV07CmNvbnN0IGJsYWNrVGFibGUxID0gW1stMSwgLTFdLCBbLTEsIC0xXSwgWzEyLCBjY2l0dEVPTF0sIFsxMiwgY2NpdHRFT0xdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWzExLCAxNzkyXSwgWzExLCAxNzkyXSwgWzExLCAxNzkyXSwgWzExLCAxNzkyXSwgWzEyLCAxOTg0XSwgWzEyLCAxOTg0XSwgWzEyLCAyMDQ4XSwgWzEyLCAyMDQ4XSwgWzEyLCAyMTEyXSwgWzEyLCAyMTEyXSwgWzEyLCAyMTc2XSwgWzEyLCAyMTc2XSwgWzEyLCAyMjQwXSwgWzEyLCAyMjQwXSwgWzEyLCAyMzA0XSwgWzEyLCAyMzA0XSwgWzExLCAxODU2XSwgWzExLCAxODU2XSwgWzExLCAxODU2XSwgWzExLCAxODU2XSwgWzExLCAxOTIwXSwgWzExLCAxOTIwXSwgWzExLCAxOTIwXSwgWzExLCAxOTIwXSwgWzEyLCAyMzY4XSwgWzEyLCAyMzY4XSwgWzEyLCAyNDMyXSwgWzEyLCAyNDMyXSwgWzEyLCAyNDk2XSwgWzEyLCAyNDk2XSwgWzEyLCAyNTYwXSwgWzEyLCAyNTYwXSwgWzEwLCAxOF0sIFsxMCwgMThdLCBbMTAsIDE4XSwgWzEwLCAxOF0sIFsxMCwgMThdLCBbMTAsIDE4XSwgWzEwLCAxOF0sIFsxMCwgMThdLCBbMTIsIDUyXSwgWzEyLCA1Ml0sIFsxMywgNjQwXSwgWzEzLCA3MDRdLCBbMTMsIDc2OF0sIFsxMywgODMyXSwgWzEyLCA1NV0sIFsxMiwgNTVdLCBbMTIsIDU2XSwgWzEyLCA1Nl0sIFsxMywgMTI4MF0sIFsxMywgMTM0NF0sIFsxMywgMTQwOF0sIFsxMywgMTQ3Ml0sIFsxMiwgNTldLCBbMTIsIDU5XSwgWzEyLCA2MF0sIFsxMiwgNjBdLCBbMTMsIDE1MzZdLCBbMTMsIDE2MDBdLCBbMTEsIDI0XSwgWzExLCAyNF0sIFsxMSwgMjRdLCBbMTEsIDI0XSwgWzExLCAyNV0sIFsxMSwgMjVdLCBbMTEsIDI1XSwgWzExLCAyNV0sIFsxMywgMTY2NF0sIFsxMywgMTcyOF0sIFsxMiwgMzIwXSwgWzEyLCAzMjBdLCBbMTIsIDM4NF0sIFsxMiwgMzg0XSwgWzEyLCA0NDhdLCBbMTIsIDQ0OF0sIFsxMywgNTEyXSwgWzEzLCA1NzZdLCBbMTIsIDUzXSwgWzEyLCA1M10sIFsxMiwgNTRdLCBbMTIsIDU0XSwgWzEzLCA4OTZdLCBbMTMsIDk2MF0sIFsxMywgMTAyNF0sIFsxMywgMTA4OF0sIFsxMywgMTE1Ml0sIFsxMywgMTIxNl0sIFsxMCwgNjRdLCBbMTAsIDY0XSwgWzEwLCA2NF0sIFsxMCwgNjRdLCBbMTAsIDY0XSwgWzEwLCA2NF0sIFsxMCwgNjRdLCBbMTAsIDY0XV07CmNvbnN0IGJsYWNrVGFibGUyID0gW1s4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFsxMSwgMjNdLCBbMTEsIDIzXSwgWzEyLCA1MF0sIFsxMiwgNTFdLCBbMTIsIDQ0XSwgWzEyLCA0NV0sIFsxMiwgNDZdLCBbMTIsIDQ3XSwgWzEyLCA1N10sIFsxMiwgNThdLCBbMTIsIDYxXSwgWzEyLCAyNTZdLCBbMTAsIDE2XSwgWzEwLCAxNl0sIFsxMCwgMTZdLCBbMTAsIDE2XSwgWzEwLCAxN10sIFsxMCwgMTddLCBbMTAsIDE3XSwgWzEwLCAxN10sIFsxMiwgNDhdLCBbMTIsIDQ5XSwgWzEyLCA2Ml0sIFsxMiwgNjNdLCBbMTIsIDMwXSwgWzEyLCAzMV0sIFsxMiwgMzJdLCBbMTIsIDMzXSwgWzEyLCA0MF0sIFsxMiwgNDFdLCBbMTEsIDIyXSwgWzExLCAyMl0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs5LCAxNV0sIFs5LCAxNV0sIFs5LCAxNV0sIFs5LCAxNV0sIFs5LCAxNV0sIFs5LCAxNV0sIFs5LCAxNV0sIFs5LCAxNV0sIFsxMiwgMTI4XSwgWzEyLCAxOTJdLCBbMTIsIDI2XSwgWzEyLCAyN10sIFsxMiwgMjhdLCBbMTIsIDI5XSwgWzExLCAxOV0sIFsxMSwgMTldLCBbMTEsIDIwXSwgWzExLCAyMF0sIFsxMiwgMzRdLCBbMTIsIDM1XSwgWzEyLCAzNl0sIFsxMiwgMzddLCBbMTIsIDM4XSwgWzEyLCAzOV0sIFsxMSwgMjFdLCBbMTEsIDIxXSwgWzEyLCA0Ml0sIFsxMiwgNDNdLCBbMTAsIDBdLCBbMTAsIDBdLCBbMTAsIDBdLCBbMTAsIDBdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdXTsKY29uc3QgYmxhY2tUYWJsZTMgPSBbWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFs2LCA5XSwgWzYsIDhdLCBbNSwgN10sIFs1LCA3XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFszLCAxXSwgWzMsIDFdLCBbMywgMV0sIFszLCAxXSwgWzMsIDFdLCBbMywgMV0sIFszLCAxXSwgWzMsIDFdLCBbMywgNF0sIFszLCA0XSwgWzMsIDRdLCBbMywgNF0sIFszLCA0XSwgWzMsIDRdLCBbMywgNF0sIFszLCA0XSwgWzIsIDNdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDNdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDNdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDNdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDNdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDNdLCBbMiwgMl0sIFsyLCAyXSwgWzIsIDJdLCBbMiwgMl0sIFsyLCAyXSwgWzIsIDJdLCBbMiwgMl0sIFsyLCAyXSwgWzIsIDJdLCBbMiwgMl0sIFsyLCAyXSwgWzIsIDJdLCBbMiwgMl0sIFsyLCAyXSwgWzIsIDJdLCBbMiwgMl1dOwpjbGFzcyBDQ0lUVEZheERlY29kZXIgewogIGNvbnN0cnVjdG9yKHNvdXJjZSwgb3B0aW9ucyA9IHt9KSB7CiAgICBpZiAodHlwZW9mIHNvdXJjZT8ubmV4dCAhPT0gImZ1bmN0aW9uIikgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NDSVRURmF4RGVjb2RlciAtIGludmFsaWQgInNvdXJjZSIgcGFyYW1ldGVyLicpOwogICAgfQogICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7CiAgICB0aGlzLmVvZiA9IGZhbHNlOwogICAgdGhpcy5lbmNvZGluZyA9IG9wdGlvbnMuSyB8fCAwOwogICAgdGhpcy5lb2xpbmUgPSBvcHRpb25zLkVuZE9mTGluZSB8fCBmYWxzZTsKICAgIHRoaXMuYnl0ZUFsaWduID0gb3B0aW9ucy5FbmNvZGVkQnl0ZUFsaWduIHx8IGZhbHNlOwogICAgdGhpcy5jb2x1bW5zID0gb3B0aW9ucy5Db2x1bW5zIHx8IDE3Mjg7CiAgICB0aGlzLnJvd3MgPSBvcHRpb25zLlJvd3MgfHwgMDsKICAgIHRoaXMuZW9ibG9jayA9IG9wdGlvbnMuRW5kT2ZCbG9jayA/PyB0cnVlOwogICAgdGhpcy5ibGFjayA9IG9wdGlvbnMuQmxhY2tJczEgfHwgZmFsc2U7CiAgICB0aGlzLmNvZGluZ0xpbmUgPSBuZXcgVWludDMyQXJyYXkodGhpcy5jb2x1bW5zICsgMSk7CiAgICB0aGlzLnJlZkxpbmUgPSBuZXcgVWludDMyQXJyYXkodGhpcy5jb2x1bW5zICsgMik7CiAgICB0aGlzLmNvZGluZ0xpbmVbMF0gPSB0aGlzLmNvbHVtbnM7CiAgICB0aGlzLmNvZGluZ1BvcyA9IDA7CiAgICB0aGlzLnJvdyA9IDA7CiAgICB0aGlzLm5leHRMaW5lMkQgPSB0aGlzLmVuY29kaW5nIDwgMDsKICAgIHRoaXMuaW5wdXRCaXRzID0gMDsKICAgIHRoaXMuaW5wdXRCdWYgPSAwOwogICAgdGhpcy5vdXRwdXRCaXRzID0gMDsKICAgIHRoaXMucm93c0RvbmUgPSBmYWxzZTsKICAgIGxldCBjb2RlMTsKICAgIHdoaWxlICgoY29kZTEgPSB0aGlzLl9sb29rQml0cygxMikpID09PSAwKSB7CiAgICAgIHRoaXMuX2VhdEJpdHMoMSk7CiAgICB9CiAgICBpZiAoY29kZTEgPT09IDEpIHsKICAgICAgdGhpcy5fZWF0Qml0cygxMik7CiAgICB9CiAgICBpZiAodGhpcy5lbmNvZGluZyA+IDApIHsKICAgICAgdGhpcy5uZXh0TGluZTJEID0gIXRoaXMuX2xvb2tCaXRzKDEpOwogICAgICB0aGlzLl9lYXRCaXRzKDEpOwogICAgfQogIH0KICByZWFkTmV4dENoYXIoKSB7CiAgICBpZiAodGhpcy5lb2YpIHsKICAgICAgcmV0dXJuIC0xOwogICAgfQogICAgY29uc3QgcmVmTGluZSA9IHRoaXMucmVmTGluZTsKICAgIGNvbnN0IGNvZGluZ0xpbmUgPSB0aGlzLmNvZGluZ0xpbmU7CiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zOwogICAgbGV0IHJlZlBvcywgYmxhY2tQaXhlbHMsIGJpdHMsIGk7CiAgICBpZiAodGhpcy5vdXRwdXRCaXRzID09PSAwKSB7CiAgICAgIGlmICh0aGlzLnJvd3NEb25lKSB7CiAgICAgICAgdGhpcy5lb2YgPSB0cnVlOwogICAgICB9CiAgICAgIGlmICh0aGlzLmVvZikgewogICAgICAgIHJldHVybiAtMTsKICAgICAgfQogICAgICB0aGlzLmVyciA9IGZhbHNlOwogICAgICBsZXQgY29kZTEsIGNvZGUyLCBjb2RlMzsKICAgICAgaWYgKHRoaXMubmV4dExpbmUyRCkgewogICAgICAgIGZvciAoaSA9IDA7IGNvZGluZ0xpbmVbaV0gPCBjb2x1bW5zOyArK2kpIHsKICAgICAgICAgIHJlZkxpbmVbaV0gPSBjb2RpbmdMaW5lW2ldOwogICAgICAgIH0KICAgICAgICByZWZMaW5lW2krK10gPSBjb2x1bW5zOwogICAgICAgIHJlZkxpbmVbaV0gPSBjb2x1bW5zOwogICAgICAgIGNvZGluZ0xpbmVbMF0gPSAwOwogICAgICAgIHRoaXMuY29kaW5nUG9zID0gMDsKICAgICAgICByZWZQb3MgPSAwOwogICAgICAgIGJsYWNrUGl4ZWxzID0gMDsKICAgICAgICB3aGlsZSAoY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gPCBjb2x1bW5zKSB7CiAgICAgICAgICBjb2RlMSA9IHRoaXMuX2dldFR3b0RpbUNvZGUoKTsKICAgICAgICAgIHN3aXRjaCAoY29kZTEpIHsKICAgICAgICAgICAgY2FzZSB0d29EaW1QYXNzOgogICAgICAgICAgICAgIHRoaXMuX2FkZFBpeGVscyhyZWZMaW5lW3JlZlBvcyArIDFdLCBibGFja1BpeGVscyk7CiAgICAgICAgICAgICAgaWYgKHJlZkxpbmVbcmVmUG9zICsgMV0gPCBjb2x1bW5zKSB7CiAgICAgICAgICAgICAgICByZWZQb3MgKz0gMjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgdHdvRGltSG9yaXo6CiAgICAgICAgICAgICAgY29kZTEgPSBjb2RlMiA9IDA7CiAgICAgICAgICAgICAgaWYgKGJsYWNrUGl4ZWxzKSB7CiAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgIGNvZGUxICs9IGNvZGUzID0gdGhpcy5fZ2V0QmxhY2tDb2RlKCk7CiAgICAgICAgICAgICAgICB9IHdoaWxlIChjb2RlMyA+PSA2NCk7CiAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgIGNvZGUyICs9IGNvZGUzID0gdGhpcy5fZ2V0V2hpdGVDb2RlKCk7CiAgICAgICAgICAgICAgICB9IHdoaWxlIChjb2RlMyA+PSA2NCk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgY29kZTEgKz0gY29kZTMgPSB0aGlzLl9nZXRXaGl0ZUNvZGUoKTsKICAgICAgICAgICAgICAgIH0gd2hpbGUgKGNvZGUzID49IDY0KTsKICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgY29kZTIgKz0gY29kZTMgPSB0aGlzLl9nZXRCbGFja0NvZGUoKTsKICAgICAgICAgICAgICAgIH0gd2hpbGUgKGNvZGUzID49IDY0KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgdGhpcy5fYWRkUGl4ZWxzKGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdICsgY29kZTEsIGJsYWNrUGl4ZWxzKTsKICAgICAgICAgICAgICBpZiAoY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gPCBjb2x1bW5zKSB7CiAgICAgICAgICAgICAgICB0aGlzLl9hZGRQaXhlbHMoY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gKyBjb2RlMiwgYmxhY2tQaXhlbHMgXiAxKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgd2hpbGUgKHJlZkxpbmVbcmVmUG9zXSA8PSBjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSAmJiByZWZMaW5lW3JlZlBvc10gPCBjb2x1bW5zKSB7CiAgICAgICAgICAgICAgICByZWZQb3MgKz0gMjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgdHdvRGltVmVydFIzOgogICAgICAgICAgICAgIHRoaXMuX2FkZFBpeGVscyhyZWZMaW5lW3JlZlBvc10gKyAzLCBibGFja1BpeGVscyk7CiAgICAgICAgICAgICAgYmxhY2tQaXhlbHMgXj0gMTsKICAgICAgICAgICAgICBpZiAoY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gPCBjb2x1bW5zKSB7CiAgICAgICAgICAgICAgICArK3JlZlBvczsKICAgICAgICAgICAgICAgIHdoaWxlIChyZWZMaW5lW3JlZlBvc10gPD0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gJiYgcmVmTGluZVtyZWZQb3NdIDwgY29sdW1ucykgewogICAgICAgICAgICAgICAgICByZWZQb3MgKz0gMjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgdHdvRGltVmVydFIyOgogICAgICAgICAgICAgIHRoaXMuX2FkZFBpeGVscyhyZWZMaW5lW3JlZlBvc10gKyAyLCBibGFja1BpeGVscyk7CiAgICAgICAgICAgICAgYmxhY2tQaXhlbHMgXj0gMTsKICAgICAgICAgICAgICBpZiAoY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gPCBjb2x1bW5zKSB7CiAgICAgICAgICAgICAgICArK3JlZlBvczsKICAgICAgICAgICAgICAgIHdoaWxlIChyZWZMaW5lW3JlZlBvc10gPD0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gJiYgcmVmTGluZVtyZWZQb3NdIDwgY29sdW1ucykgewogICAgICAgICAgICAgICAgICByZWZQb3MgKz0gMjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgdHdvRGltVmVydFIxOgogICAgICAgICAgICAgIHRoaXMuX2FkZFBpeGVscyhyZWZMaW5lW3JlZlBvc10gKyAxLCBibGFja1BpeGVscyk7CiAgICAgICAgICAgICAgYmxhY2tQaXhlbHMgXj0gMTsKICAgICAgICAgICAgICBpZiAoY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gPCBjb2x1bW5zKSB7CiAgICAgICAgICAgICAgICArK3JlZlBvczsKICAgICAgICAgICAgICAgIHdoaWxlIChyZWZMaW5lW3JlZlBvc10gPD0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gJiYgcmVmTGluZVtyZWZQb3NdIDwgY29sdW1ucykgewogICAgICAgICAgICAgICAgICByZWZQb3MgKz0gMjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgdHdvRGltVmVydDA6CiAgICAgICAgICAgICAgdGhpcy5fYWRkUGl4ZWxzKHJlZkxpbmVbcmVmUG9zXSwgYmxhY2tQaXhlbHMpOwogICAgICAgICAgICAgIGJsYWNrUGl4ZWxzIF49IDE7CiAgICAgICAgICAgICAgaWYgKGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdIDwgY29sdW1ucykgewogICAgICAgICAgICAgICAgKytyZWZQb3M7CiAgICAgICAgICAgICAgICB3aGlsZSAocmVmTGluZVtyZWZQb3NdIDw9IGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdICYmIHJlZkxpbmVbcmVmUG9zXSA8IGNvbHVtbnMpIHsKICAgICAgICAgICAgICAgICAgcmVmUG9zICs9IDI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIHR3b0RpbVZlcnRMMzoKICAgICAgICAgICAgICB0aGlzLl9hZGRQaXhlbHNOZWcocmVmTGluZVtyZWZQb3NdIC0gMywgYmxhY2tQaXhlbHMpOwogICAgICAgICAgICAgIGJsYWNrUGl4ZWxzIF49IDE7CiAgICAgICAgICAgICAgaWYgKGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdIDwgY29sdW1ucykgewogICAgICAgICAgICAgICAgaWYgKHJlZlBvcyA+IDApIHsKICAgICAgICAgICAgICAgICAgLS1yZWZQb3M7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICArK3JlZlBvczsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHdoaWxlIChyZWZMaW5lW3JlZlBvc10gPD0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gJiYgcmVmTGluZVtyZWZQb3NdIDwgY29sdW1ucykgewogICAgICAgICAgICAgICAgICByZWZQb3MgKz0gMjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgdHdvRGltVmVydEwyOgogICAgICAgICAgICAgIHRoaXMuX2FkZFBpeGVsc05lZyhyZWZMaW5lW3JlZlBvc10gLSAyLCBibGFja1BpeGVscyk7CiAgICAgICAgICAgICAgYmxhY2tQaXhlbHMgXj0gMTsKICAgICAgICAgICAgICBpZiAoY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gPCBjb2x1bW5zKSB7CiAgICAgICAgICAgICAgICBpZiAocmVmUG9zID4gMCkgewogICAgICAgICAgICAgICAgICAtLXJlZlBvczsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICsrcmVmUG9zOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgd2hpbGUgKHJlZkxpbmVbcmVmUG9zXSA8PSBjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSAmJiByZWZMaW5lW3JlZlBvc10gPCBjb2x1bW5zKSB7CiAgICAgICAgICAgICAgICAgIHJlZlBvcyArPSAyOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSB0d29EaW1WZXJ0TDE6CiAgICAgICAgICAgICAgdGhpcy5fYWRkUGl4ZWxzTmVnKHJlZkxpbmVbcmVmUG9zXSAtIDEsIGJsYWNrUGl4ZWxzKTsKICAgICAgICAgICAgICBibGFja1BpeGVscyBePSAxOwogICAgICAgICAgICAgIGlmIChjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHsKICAgICAgICAgICAgICAgIGlmIChyZWZQb3MgPiAwKSB7CiAgICAgICAgICAgICAgICAgIC0tcmVmUG9zOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgKytyZWZQb3M7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB3aGlsZSAocmVmTGluZVtyZWZQb3NdIDw9IGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdICYmIHJlZkxpbmVbcmVmUG9zXSA8IGNvbHVtbnMpIHsKICAgICAgICAgICAgICAgICAgcmVmUG9zICs9IDI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIGNjaXR0RU9GOgogICAgICAgICAgICAgIHRoaXMuX2FkZFBpeGVscyhjb2x1bW5zLCAwKTsKICAgICAgICAgICAgICB0aGlzLmVvZiA9IHRydWU7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgaW5mbygiYmFkIDJkIGNvZGUiKTsKICAgICAgICAgICAgICB0aGlzLl9hZGRQaXhlbHMoY29sdW1ucywgMCk7CiAgICAgICAgICAgICAgdGhpcy5lcnIgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBjb2RpbmdMaW5lWzBdID0gMDsKICAgICAgICB0aGlzLmNvZGluZ1BvcyA9IDA7CiAgICAgICAgYmxhY2tQaXhlbHMgPSAwOwogICAgICAgIHdoaWxlIChjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHsKICAgICAgICAgIGNvZGUxID0gMDsKICAgICAgICAgIGlmIChibGFja1BpeGVscykgewogICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgY29kZTEgKz0gY29kZTMgPSB0aGlzLl9nZXRCbGFja0NvZGUoKTsKICAgICAgICAgICAgfSB3aGlsZSAoY29kZTMgPj0gNjQpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgIGNvZGUxICs9IGNvZGUzID0gdGhpcy5fZ2V0V2hpdGVDb2RlKCk7CiAgICAgICAgICAgIH0gd2hpbGUgKGNvZGUzID49IDY0KTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuX2FkZFBpeGVscyhjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSArIGNvZGUxLCBibGFja1BpeGVscyk7CiAgICAgICAgICBibGFja1BpeGVscyBePSAxOwogICAgICAgIH0KICAgICAgfQogICAgICBsZXQgZ290RU9MID0gZmFsc2U7CiAgICAgIGlmICh0aGlzLmJ5dGVBbGlnbikgewogICAgICAgIHRoaXMuaW5wdXRCaXRzICY9IH43OwogICAgICB9CiAgICAgIGlmICghdGhpcy5lb2Jsb2NrICYmIHRoaXMucm93ID09PSB0aGlzLnJvd3MgLSAxKSB7CiAgICAgICAgdGhpcy5yb3dzRG9uZSA9IHRydWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29kZTEgPSB0aGlzLl9sb29rQml0cygxMik7CiAgICAgICAgaWYgKHRoaXMuZW9saW5lKSB7CiAgICAgICAgICB3aGlsZSAoY29kZTEgIT09IGNjaXR0RU9GICYmIGNvZGUxICE9PSAxKSB7CiAgICAgICAgICAgIHRoaXMuX2VhdEJpdHMoMSk7CiAgICAgICAgICAgIGNvZGUxID0gdGhpcy5fbG9va0JpdHMoMTIpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB3aGlsZSAoY29kZTEgPT09IDApIHsKICAgICAgICAgICAgdGhpcy5fZWF0Qml0cygxKTsKICAgICAgICAgICAgY29kZTEgPSB0aGlzLl9sb29rQml0cygxMik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChjb2RlMSA9PT0gMSkgewogICAgICAgICAgdGhpcy5fZWF0Qml0cygxMik7CiAgICAgICAgICBnb3RFT0wgPSB0cnVlOwogICAgICAgIH0gZWxzZSBpZiAoY29kZTEgPT09IGNjaXR0RU9GKSB7CiAgICAgICAgICB0aGlzLmVvZiA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICghdGhpcy5lb2YgJiYgdGhpcy5lbmNvZGluZyA+IDAgJiYgIXRoaXMucm93c0RvbmUpIHsKICAgICAgICB0aGlzLm5leHRMaW5lMkQgPSAhdGhpcy5fbG9va0JpdHMoMSk7CiAgICAgICAgdGhpcy5fZWF0Qml0cygxKTsKICAgICAgfQogICAgICBpZiAodGhpcy5lb2Jsb2NrICYmIGdvdEVPTCAmJiB0aGlzLmJ5dGVBbGlnbikgewogICAgICAgIGNvZGUxID0gdGhpcy5fbG9va0JpdHMoMTIpOwogICAgICAgIGlmIChjb2RlMSA9PT0gMSkgewogICAgICAgICAgdGhpcy5fZWF0Qml0cygxMik7CiAgICAgICAgICBpZiAodGhpcy5lbmNvZGluZyA+IDApIHsKICAgICAgICAgICAgdGhpcy5fbG9va0JpdHMoMSk7CiAgICAgICAgICAgIHRoaXMuX2VhdEJpdHMoMSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5lbmNvZGluZyA+PSAwKSB7CiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKICAgICAgICAgICAgICBjb2RlMSA9IHRoaXMuX2xvb2tCaXRzKDEyKTsKICAgICAgICAgICAgICBpZiAoY29kZTEgIT09IDEpIHsKICAgICAgICAgICAgICAgIGluZm8oImJhZCBydGMgY29kZTogIiArIGNvZGUxKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgdGhpcy5fZWF0Qml0cygxMik7CiAgICAgICAgICAgICAgaWYgKHRoaXMuZW5jb2RpbmcgPiAwKSB7CiAgICAgICAgICAgICAgICB0aGlzLl9sb29rQml0cygxKTsKICAgICAgICAgICAgICAgIHRoaXMuX2VhdEJpdHMoMSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmVvZiA9IHRydWU7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHRoaXMuZXJyICYmIHRoaXMuZW9saW5lKSB7CiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgIGNvZGUxID0gdGhpcy5fbG9va0JpdHMoMTMpOwogICAgICAgICAgaWYgKGNvZGUxID09PSBjY2l0dEVPRikgewogICAgICAgICAgICB0aGlzLmVvZiA9IHRydWU7CiAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChjb2RlMSA+PiAxID09PSAxKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5fZWF0Qml0cygxKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5fZWF0Qml0cygxMik7CiAgICAgICAgaWYgKHRoaXMuZW5jb2RpbmcgPiAwKSB7CiAgICAgICAgICB0aGlzLl9lYXRCaXRzKDEpOwogICAgICAgICAgdGhpcy5uZXh0TGluZTJEID0gIShjb2RlMSAmIDEpOwogICAgICAgIH0KICAgICAgfQogICAgICB0aGlzLm91dHB1dEJpdHMgPSBjb2RpbmdMaW5lWzBdID4gMCA/IGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3MgPSAwXSA6IGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3MgPSAxXTsKICAgICAgdGhpcy5yb3crKzsKICAgIH0KICAgIGxldCBjOwogICAgaWYgKHRoaXMub3V0cHV0Qml0cyA+PSA4KSB7CiAgICAgIGMgPSB0aGlzLmNvZGluZ1BvcyAmIDEgPyAwIDogMHhmZjsKICAgICAgdGhpcy5vdXRwdXRCaXRzIC09IDg7CiAgICAgIGlmICh0aGlzLm91dHB1dEJpdHMgPT09IDAgJiYgY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gPCBjb2x1bW5zKSB7CiAgICAgICAgdGhpcy5jb2RpbmdQb3MrKzsKICAgICAgICB0aGlzLm91dHB1dEJpdHMgPSBjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSAtIGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3MgLSAxXTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgYml0cyA9IDg7CiAgICAgIGMgPSAwOwogICAgICBkbyB7CiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm91dHB1dEJpdHMgIT09ICJudW1iZXIiKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoJ0ludmFsaWQgL0NDSVRURmF4RGVjb2RlIGRhdGEsICJvdXRwdXRCaXRzIiBtdXN0IGJlIGEgbnVtYmVyLicpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5vdXRwdXRCaXRzID4gYml0cykgewogICAgICAgICAgYyA8PD0gYml0czsKICAgICAgICAgIGlmICghKHRoaXMuY29kaW5nUG9zICYgMSkpIHsKICAgICAgICAgICAgYyB8PSAweGZmID4+IDggLSBiaXRzOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5vdXRwdXRCaXRzIC09IGJpdHM7CiAgICAgICAgICBiaXRzID0gMDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYyA8PD0gdGhpcy5vdXRwdXRCaXRzOwogICAgICAgICAgaWYgKCEodGhpcy5jb2RpbmdQb3MgJiAxKSkgewogICAgICAgICAgICBjIHw9IDB4ZmYgPj4gOCAtIHRoaXMub3V0cHV0Qml0czsKICAgICAgICAgIH0KICAgICAgICAgIGJpdHMgLT0gdGhpcy5vdXRwdXRCaXRzOwogICAgICAgICAgdGhpcy5vdXRwdXRCaXRzID0gMDsKICAgICAgICAgIGlmIChjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHsKICAgICAgICAgICAgdGhpcy5jb2RpbmdQb3MrKzsKICAgICAgICAgICAgdGhpcy5vdXRwdXRCaXRzID0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gLSBjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zIC0gMV07CiAgICAgICAgICB9IGVsc2UgaWYgKGJpdHMgPiAwKSB7CiAgICAgICAgICAgIGMgPDw9IGJpdHM7CiAgICAgICAgICAgIGJpdHMgPSAwOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSB3aGlsZSAoYml0cyk7CiAgICB9CiAgICBpZiAodGhpcy5ibGFjaykgewogICAgICBjIF49IDB4ZmY7CiAgICB9CiAgICByZXR1cm4gYzsKICB9CiAgX2FkZFBpeGVscyhhMSwgYmxhY2tQaXhlbHMpIHsKICAgIGNvbnN0IGNvZGluZ0xpbmUgPSB0aGlzLmNvZGluZ0xpbmU7CiAgICBsZXQgY29kaW5nUG9zID0gdGhpcy5jb2RpbmdQb3M7CiAgICBpZiAoYTEgPiBjb2RpbmdMaW5lW2NvZGluZ1Bvc10pIHsKICAgICAgaWYgKGExID4gdGhpcy5jb2x1bW5zKSB7CiAgICAgICAgaW5mbygicm93IGlzIHdyb25nIGxlbmd0aCIpOwogICAgICAgIHRoaXMuZXJyID0gdHJ1ZTsKICAgICAgICBhMSA9IHRoaXMuY29sdW1uczsKICAgICAgfQogICAgICBpZiAoY29kaW5nUG9zICYgMSBeIGJsYWNrUGl4ZWxzKSB7CiAgICAgICAgKytjb2RpbmdQb3M7CiAgICAgIH0KICAgICAgY29kaW5nTGluZVtjb2RpbmdQb3NdID0gYTE7CiAgICB9CiAgICB0aGlzLmNvZGluZ1BvcyA9IGNvZGluZ1BvczsKICB9CiAgX2FkZFBpeGVsc05lZyhhMSwgYmxhY2tQaXhlbHMpIHsKICAgIGNvbnN0IGNvZGluZ0xpbmUgPSB0aGlzLmNvZGluZ0xpbmU7CiAgICBsZXQgY29kaW5nUG9zID0gdGhpcy5jb2RpbmdQb3M7CiAgICBpZiAoYTEgPiBjb2RpbmdMaW5lW2NvZGluZ1Bvc10pIHsKICAgICAgaWYgKGExID4gdGhpcy5jb2x1bW5zKSB7CiAgICAgICAgaW5mbygicm93IGlzIHdyb25nIGxlbmd0aCIpOwogICAgICAgIHRoaXMuZXJyID0gdHJ1ZTsKICAgICAgICBhMSA9IHRoaXMuY29sdW1uczsKICAgICAgfQogICAgICBpZiAoY29kaW5nUG9zICYgMSBeIGJsYWNrUGl4ZWxzKSB7CiAgICAgICAgKytjb2RpbmdQb3M7CiAgICAgIH0KICAgICAgY29kaW5nTGluZVtjb2RpbmdQb3NdID0gYTE7CiAgICB9IGVsc2UgaWYgKGExIDwgY29kaW5nTGluZVtjb2RpbmdQb3NdKSB7CiAgICAgIGlmIChhMSA8IDApIHsKICAgICAgICBpbmZvKCJpbnZhbGlkIGNvZGUiKTsKICAgICAgICB0aGlzLmVyciA9IHRydWU7CiAgICAgICAgYTEgPSAwOwogICAgICB9CiAgICAgIHdoaWxlIChjb2RpbmdQb3MgPiAwICYmIGExIDwgY29kaW5nTGluZVtjb2RpbmdQb3MgLSAxXSkgewogICAgICAgIC0tY29kaW5nUG9zOwogICAgICB9CiAgICAgIGNvZGluZ0xpbmVbY29kaW5nUG9zXSA9IGExOwogICAgfQogICAgdGhpcy5jb2RpbmdQb3MgPSBjb2RpbmdQb3M7CiAgfQogIF9maW5kVGFibGVDb2RlKHN0YXJ0LCBlbmQsIHRhYmxlLCBsaW1pdCkgewogICAgY29uc3QgbGltaXRWYWx1ZSA9IGxpbWl0IHx8IDA7CiAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyArK2kpIHsKICAgICAgbGV0IGNvZGUgPSB0aGlzLl9sb29rQml0cyhpKTsKICAgICAgaWYgKGNvZGUgPT09IGNjaXR0RU9GKSB7CiAgICAgICAgcmV0dXJuIFt0cnVlLCAxLCBmYWxzZV07CiAgICAgIH0KICAgICAgaWYgKGkgPCBlbmQpIHsKICAgICAgICBjb2RlIDw8PSBlbmQgLSBpOwogICAgICB9CiAgICAgIGlmICghbGltaXRWYWx1ZSB8fCBjb2RlID49IGxpbWl0VmFsdWUpIHsKICAgICAgICBjb25zdCBwID0gdGFibGVbY29kZSAtIGxpbWl0VmFsdWVdOwogICAgICAgIGlmIChwWzBdID09PSBpKSB7CiAgICAgICAgICB0aGlzLl9lYXRCaXRzKGkpOwogICAgICAgICAgcmV0dXJuIFt0cnVlLCBwWzFdLCB0cnVlXTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBbZmFsc2UsIDAsIGZhbHNlXTsKICB9CiAgX2dldFR3b0RpbUNvZGUoKSB7CiAgICBsZXQgY29kZSA9IDA7CiAgICBsZXQgcDsKICAgIGlmICh0aGlzLmVvYmxvY2spIHsKICAgICAgY29kZSA9IHRoaXMuX2xvb2tCaXRzKDcpOwogICAgICBwID0gdHdvRGltVGFibGVbY29kZV07CiAgICAgIGlmIChwPy5bMF0gPiAwKSB7CiAgICAgICAgdGhpcy5fZWF0Qml0cyhwWzBdKTsKICAgICAgICByZXR1cm4gcFsxXTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fZmluZFRhYmxlQ29kZSgxLCA3LCB0d29EaW1UYWJsZSk7CiAgICAgIGlmIChyZXN1bHRbMF0gJiYgcmVzdWx0WzJdKSB7CiAgICAgICAgcmV0dXJuIHJlc3VsdFsxXTsKICAgICAgfQogICAgfQogICAgaW5mbygiQmFkIHR3byBkaW0gY29kZSIpOwogICAgcmV0dXJuIGNjaXR0RU9GOwogIH0KICBfZ2V0V2hpdGVDb2RlKCkgewogICAgbGV0IGNvZGUgPSAwOwogICAgbGV0IHA7CiAgICBpZiAodGhpcy5lb2Jsb2NrKSB7CiAgICAgIGNvZGUgPSB0aGlzLl9sb29rQml0cygxMik7CiAgICAgIGlmIChjb2RlID09PSBjY2l0dEVPRikgewogICAgICAgIHJldHVybiAxOwogICAgICB9CiAgICAgIHAgPSBjb2RlID4+IDUgPT09IDAgPyB3aGl0ZVRhYmxlMVtjb2RlXSA6IHdoaXRlVGFibGUyW2NvZGUgPj4gM107CiAgICAgIGlmIChwWzBdID4gMCkgewogICAgICAgIHRoaXMuX2VhdEJpdHMocFswXSk7CiAgICAgICAgcmV0dXJuIHBbMV07CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGxldCByZXN1bHQgPSB0aGlzLl9maW5kVGFibGVDb2RlKDEsIDksIHdoaXRlVGFibGUyKTsKICAgICAgaWYgKHJlc3VsdFswXSkgewogICAgICAgIHJldHVybiByZXN1bHRbMV07CiAgICAgIH0KICAgICAgcmVzdWx0ID0gdGhpcy5fZmluZFRhYmxlQ29kZSgxMSwgMTIsIHdoaXRlVGFibGUxKTsKICAgICAgaWYgKHJlc3VsdFswXSkgewogICAgICAgIHJldHVybiByZXN1bHRbMV07CiAgICAgIH0KICAgIH0KICAgIGluZm8oImJhZCB3aGl0ZSBjb2RlIik7CiAgICB0aGlzLl9lYXRCaXRzKDEpOwogICAgcmV0dXJuIDE7CiAgfQogIF9nZXRCbGFja0NvZGUoKSB7CiAgICBsZXQgY29kZSwgcDsKICAgIGlmICh0aGlzLmVvYmxvY2spIHsKICAgICAgY29kZSA9IHRoaXMuX2xvb2tCaXRzKDEzKTsKICAgICAgaWYgKGNvZGUgPT09IGNjaXR0RU9GKSB7CiAgICAgICAgcmV0dXJuIDE7CiAgICAgIH0KICAgICAgaWYgKGNvZGUgPj4gNyA9PT0gMCkgewogICAgICAgIHAgPSBibGFja1RhYmxlMVtjb2RlXTsKICAgICAgfSBlbHNlIGlmIChjb2RlID4+IDkgPT09IDAgJiYgY29kZSA+PiA3ICE9PSAwKSB7CiAgICAgICAgcCA9IGJsYWNrVGFibGUyWyhjb2RlID4+IDEpIC0gNjRdOwogICAgICB9IGVsc2UgewogICAgICAgIHAgPSBibGFja1RhYmxlM1tjb2RlID4+IDddOwogICAgICB9CiAgICAgIGlmIChwWzBdID4gMCkgewogICAgICAgIHRoaXMuX2VhdEJpdHMocFswXSk7CiAgICAgICAgcmV0dXJuIHBbMV07CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGxldCByZXN1bHQgPSB0aGlzLl9maW5kVGFibGVDb2RlKDIsIDYsIGJsYWNrVGFibGUzKTsKICAgICAgaWYgKHJlc3VsdFswXSkgewogICAgICAgIHJldHVybiByZXN1bHRbMV07CiAgICAgIH0KICAgICAgcmVzdWx0ID0gdGhpcy5fZmluZFRhYmxlQ29kZSg3LCAxMiwgYmxhY2tUYWJsZTIsIDY0KTsKICAgICAgaWYgKHJlc3VsdFswXSkgewogICAgICAgIHJldHVybiByZXN1bHRbMV07CiAgICAgIH0KICAgICAgcmVzdWx0ID0gdGhpcy5fZmluZFRhYmxlQ29kZSgxMCwgMTMsIGJsYWNrVGFibGUxKTsKICAgICAgaWYgKHJlc3VsdFswXSkgewogICAgICAgIHJldHVybiByZXN1bHRbMV07CiAgICAgIH0KICAgIH0KICAgIGluZm8oImJhZCBibGFjayBjb2RlIik7CiAgICB0aGlzLl9lYXRCaXRzKDEpOwogICAgcmV0dXJuIDE7CiAgfQogIF9sb29rQml0cyhuKSB7CiAgICBsZXQgYzsKICAgIHdoaWxlICh0aGlzLmlucHV0Qml0cyA8IG4pIHsKICAgICAgaWYgKChjID0gdGhpcy5zb3VyY2UubmV4dCgpKSA9PT0gLTEpIHsKICAgICAgICBpZiAodGhpcy5pbnB1dEJpdHMgPT09IDApIHsKICAgICAgICAgIHJldHVybiBjY2l0dEVPRjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRCdWYgPDwgbiAtIHRoaXMuaW5wdXRCaXRzICYgMHhmZmZmID4+IDE2IC0gbjsKICAgICAgfQogICAgICB0aGlzLmlucHV0QnVmID0gdGhpcy5pbnB1dEJ1ZiA8PCA4IHwgYzsKICAgICAgdGhpcy5pbnB1dEJpdHMgKz0gODsKICAgIH0KICAgIHJldHVybiB0aGlzLmlucHV0QnVmID4+IHRoaXMuaW5wdXRCaXRzIC0gbiAmIDB4ZmZmZiA+PiAxNiAtIG47CiAgfQogIF9lYXRCaXRzKG4pIHsKICAgIGlmICgodGhpcy5pbnB1dEJpdHMgLT0gbikgPCAwKSB7CiAgICAgIHRoaXMuaW5wdXRCaXRzID0gMDsKICAgIH0KICB9Cn0KCjsvLyAuL3NyYy9jb3JlL2NjaXR0X3N0cmVhbS5qcwoKCgpjbGFzcyBDQ0lUVEZheFN0cmVhbSBleHRlbmRzIERlY29kZVN0cmVhbSB7CiAgY29uc3RydWN0b3Ioc3RyLCBtYXliZUxlbmd0aCwgcGFyYW1zKSB7CiAgICBzdXBlcihtYXliZUxlbmd0aCk7CiAgICB0aGlzLnN0ciA9IHN0cjsKICAgIHRoaXMuZGljdCA9IHN0ci5kaWN0OwogICAgaWYgKCEocGFyYW1zIGluc3RhbmNlb2YgRGljdCkpIHsKICAgICAgcGFyYW1zID0gRGljdC5lbXB0eTsKICAgIH0KICAgIGNvbnN0IHNvdXJjZSA9IHsKICAgICAgbmV4dCgpIHsKICAgICAgICByZXR1cm4gc3RyLmdldEJ5dGUoKTsKICAgICAgfQogICAgfTsKICAgIHRoaXMuY2NpdHRGYXhEZWNvZGVyID0gbmV3IENDSVRURmF4RGVjb2Rlcihzb3VyY2UsIHsKICAgICAgSzogcGFyYW1zLmdldCgiSyIpLAogICAgICBFbmRPZkxpbmU6IHBhcmFtcy5nZXQoIkVuZE9mTGluZSIpLAogICAgICBFbmNvZGVkQnl0ZUFsaWduOiBwYXJhbXMuZ2V0KCJFbmNvZGVkQnl0ZUFsaWduIiksCiAgICAgIENvbHVtbnM6IHBhcmFtcy5nZXQoIkNvbHVtbnMiKSwKICAgICAgUm93czogcGFyYW1zLmdldCgiUm93cyIpLAogICAgICBFbmRPZkJsb2NrOiBwYXJhbXMuZ2V0KCJFbmRPZkJsb2NrIiksCiAgICAgIEJsYWNrSXMxOiBwYXJhbXMuZ2V0KCJCbGFja0lzMSIpCiAgICB9KTsKICB9CiAgcmVhZEJsb2NrKCkgewogICAgd2hpbGUgKCF0aGlzLmVvZikgewogICAgICBjb25zdCBjID0gdGhpcy5jY2l0dEZheERlY29kZXIucmVhZE5leHRDaGFyKCk7CiAgICAgIGlmIChjID09PSAtMSkgewogICAgICAgIHRoaXMuZW9mID0gdHJ1ZTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy5lbnN1cmVCdWZmZXIodGhpcy5idWZmZXJMZW5ndGggKyAxKTsKICAgICAgdGhpcy5idWZmZXJbdGhpcy5idWZmZXJMZW5ndGgrK10gPSBjOwogICAgfQogIH0KfQoKOy8vIC4vc3JjL2NvcmUvZmxhdGVfc3RyZWFtLmpzCgoKCmNvbnN0IGNvZGVMZW5Db2RlTWFwID0gbmV3IEludDMyQXJyYXkoWzE2LCAxNywgMTgsIDAsIDgsIDcsIDksIDYsIDEwLCA1LCAxMSwgNCwgMTIsIDMsIDEzLCAyLCAxNCwgMSwgMTVdKTsKY29uc3QgbGVuZ3RoRGVjb2RlID0gbmV3IEludDMyQXJyYXkoWzB4MDAwMDMsIDB4MDAwMDQsIDB4MDAwMDUsIDB4MDAwMDYsIDB4MDAwMDcsIDB4MDAwMDgsIDB4MDAwMDksIDB4MDAwMGEsIDB4MTAwMGIsIDB4MTAwMGQsIDB4MTAwMGYsIDB4MTAwMTEsIDB4MjAwMTMsIDB4MjAwMTcsIDB4MjAwMWIsIDB4MjAwMWYsIDB4MzAwMjMsIDB4MzAwMmIsIDB4MzAwMzMsIDB4MzAwM2IsIDB4NDAwNDMsIDB4NDAwNTMsIDB4NDAwNjMsIDB4NDAwNzMsIDB4NTAwODMsIDB4NTAwYTMsIDB4NTAwYzMsIDB4NTAwZTMsIDB4MDAxMDIsIDB4MDAxMDIsIDB4MDAxMDJdKTsKY29uc3QgZGlzdERlY29kZSA9IG5ldyBJbnQzMkFycmF5KFsweDAwMDAxLCAweDAwMDAyLCAweDAwMDAzLCAweDAwMDA0LCAweDEwMDA1LCAweDEwMDA3LCAweDIwMDA5LCAweDIwMDBkLCAweDMwMDExLCAweDMwMDE5LCAweDQwMDIxLCAweDQwMDMxLCAweDUwMDQxLCAweDUwMDYxLCAweDYwMDgxLCAweDYwMGMxLCAweDcwMTAxLCAweDcwMTgxLCAweDgwMjAxLCAweDgwMzAxLCAweDkwNDAxLCAweDkwNjAxLCAweGEwODAxLCAweGEwYzAxLCAweGIxMDAxLCAweGIxODAxLCAweGMyMDAxLCAweGMzMDAxLCAweGQ0MDAxLCAweGQ2MDAxXSk7CmNvbnN0IGZpeGVkTGl0Q29kZVRhYiA9IFtuZXcgSW50MzJBcnJheShbMHg3MDEwMCwgMHg4MDA1MCwgMHg4MDAxMCwgMHg4MDExOCwgMHg3MDExMCwgMHg4MDA3MCwgMHg4MDAzMCwgMHg5MDBjMCwgMHg3MDEwOCwgMHg4MDA2MCwgMHg4MDAyMCwgMHg5MDBhMCwgMHg4MDAwMCwgMHg4MDA4MCwgMHg4MDA0MCwgMHg5MDBlMCwgMHg3MDEwNCwgMHg4MDA1OCwgMHg4MDAxOCwgMHg5MDA5MCwgMHg3MDExNCwgMHg4MDA3OCwgMHg4MDAzOCwgMHg5MDBkMCwgMHg3MDEwYywgMHg4MDA2OCwgMHg4MDAyOCwgMHg5MDBiMCwgMHg4MDAwOCwgMHg4MDA4OCwgMHg4MDA0OCwgMHg5MDBmMCwgMHg3MDEwMiwgMHg4MDA1NCwgMHg4MDAxNCwgMHg4MDExYywgMHg3MDExMiwgMHg4MDA3NCwgMHg4MDAzNCwgMHg5MDBjOCwgMHg3MDEwYSwgMHg4MDA2NCwgMHg4MDAyNCwgMHg5MDBhOCwgMHg4MDAwNCwgMHg4MDA4NCwgMHg4MDA0NCwgMHg5MDBlOCwgMHg3MDEwNiwgMHg4MDA1YywgMHg4MDAxYywgMHg5MDA5OCwgMHg3MDExNiwgMHg4MDA3YywgMHg4MDAzYywgMHg5MDBkOCwgMHg3MDEwZSwgMHg4MDA2YywgMHg4MDAyYywgMHg5MDBiOCwgMHg4MDAwYywgMHg4MDA4YywgMHg4MDA0YywgMHg5MDBmOCwgMHg3MDEwMSwgMHg4MDA1MiwgMHg4MDAxMiwgMHg4MDExYSwgMHg3MDExMSwgMHg4MDA3MiwgMHg4MDAzMiwgMHg5MDBjNCwgMHg3MDEwOSwgMHg4MDA2MiwgMHg4MDAyMiwgMHg5MDBhNCwgMHg4MDAwMiwgMHg4MDA4MiwgMHg4MDA0MiwgMHg5MDBlNCwgMHg3MDEwNSwgMHg4MDA1YSwgMHg4MDAxYSwgMHg5MDA5NCwgMHg3MDExNSwgMHg4MDA3YSwgMHg4MDAzYSwgMHg5MDBkNCwgMHg3MDEwZCwgMHg4MDA2YSwgMHg4MDAyYSwgMHg5MDBiNCwgMHg4MDAwYSwgMHg4MDA4YSwgMHg4MDA0YSwgMHg5MDBmNCwgMHg3MDEwMywgMHg4MDA1NiwgMHg4MDAxNiwgMHg4MDExZSwgMHg3MDExMywgMHg4MDA3NiwgMHg4MDAzNiwgMHg5MDBjYywgMHg3MDEwYiwgMHg4MDA2NiwgMHg4MDAyNiwgMHg5MDBhYywgMHg4MDAwNiwgMHg4MDA4NiwgMHg4MDA0NiwgMHg5MDBlYywgMHg3MDEwNywgMHg4MDA1ZSwgMHg4MDAxZSwgMHg5MDA5YywgMHg3MDExNywgMHg4MDA3ZSwgMHg4MDAzZSwgMHg5MDBkYywgMHg3MDEwZiwgMHg4MDA2ZSwgMHg4MDAyZSwgMHg5MDBiYywgMHg4MDAwZSwgMHg4MDA4ZSwgMHg4MDA0ZSwgMHg5MDBmYywgMHg3MDEwMCwgMHg4MDA1MSwgMHg4MDAxMSwgMHg4MDExOSwgMHg3MDExMCwgMHg4MDA3MSwgMHg4MDAzMSwgMHg5MDBjMiwgMHg3MDEwOCwgMHg4MDA2MSwgMHg4MDAyMSwgMHg5MDBhMiwgMHg4MDAwMSwgMHg4MDA4MSwgMHg4MDA0MSwgMHg5MDBlMiwgMHg3MDEwNCwgMHg4MDA1OSwgMHg4MDAxOSwgMHg5MDA5MiwgMHg3MDExNCwgMHg4MDA3OSwgMHg4MDAzOSwgMHg5MDBkMiwgMHg3MDEwYywgMHg4MDA2OSwgMHg4MDAyOSwgMHg5MDBiMiwgMHg4MDAwOSwgMHg4MDA4OSwgMHg4MDA0OSwgMHg5MDBmMiwgMHg3MDEwMiwgMHg4MDA1NSwgMHg4MDAxNSwgMHg4MDExZCwgMHg3MDExMiwgMHg4MDA3NSwgMHg4MDAzNSwgMHg5MDBjYSwgMHg3MDEwYSwgMHg4MDA2NSwgMHg4MDAyNSwgMHg5MDBhYSwgMHg4MDAwNSwgMHg4MDA4NSwgMHg4MDA0NSwgMHg5MDBlYSwgMHg3MDEwNiwgMHg4MDA1ZCwgMHg4MDAxZCwgMHg5MDA5YSwgMHg3MDExNiwgMHg4MDA3ZCwgMHg4MDAzZCwgMHg5MDBkYSwgMHg3MDEwZSwgMHg4MDA2ZCwgMHg4MDAyZCwgMHg5MDBiYSwgMHg4MDAwZCwgMHg4MDA4ZCwgMHg4MDA0ZCwgMHg5MDBmYSwgMHg3MDEwMSwgMHg4MDA1MywgMHg4MDAxMywgMHg4MDExYiwgMHg3MDExMSwgMHg4MDA3MywgMHg4MDAzMywgMHg5MDBjNiwgMHg3MDEwOSwgMHg4MDA2MywgMHg4MDAyMywgMHg5MDBhNiwgMHg4MDAwMywgMHg4MDA4MywgMHg4MDA0MywgMHg5MDBlNiwgMHg3MDEwNSwgMHg4MDA1YiwgMHg4MDAxYiwgMHg5MDA5NiwgMHg3MDExNSwgMHg4MDA3YiwgMHg4MDAzYiwgMHg5MDBkNiwgMHg3MDEwZCwgMHg4MDA2YiwgMHg4MDAyYiwgMHg5MDBiNiwgMHg4MDAwYiwgMHg4MDA4YiwgMHg4MDA0YiwgMHg5MDBmNiwgMHg3MDEwMywgMHg4MDA1NywgMHg4MDAxNywgMHg4MDExZiwgMHg3MDExMywgMHg4MDA3NywgMHg4MDAzNywgMHg5MDBjZSwgMHg3MDEwYiwgMHg4MDA2NywgMHg4MDAyNywgMHg5MDBhZSwgMHg4MDAwNywgMHg4MDA4NywgMHg4MDA0NywgMHg5MDBlZSwgMHg3MDEwNywgMHg4MDA1ZiwgMHg4MDAxZiwgMHg5MDA5ZSwgMHg3MDExNywgMHg4MDA3ZiwgMHg4MDAzZiwgMHg5MDBkZSwgMHg3MDEwZiwgMHg4MDA2ZiwgMHg4MDAyZiwgMHg5MDBiZSwgMHg4MDAwZiwgMHg4MDA4ZiwgMHg4MDA0ZiwgMHg5MDBmZSwgMHg3MDEwMCwgMHg4MDA1MCwgMHg4MDAxMCwgMHg4MDExOCwgMHg3MDExMCwgMHg4MDA3MCwgMHg4MDAzMCwgMHg5MDBjMSwgMHg3MDEwOCwgMHg4MDA2MCwgMHg4MDAyMCwgMHg5MDBhMSwgMHg4MDAwMCwgMHg4MDA4MCwgMHg4MDA0MCwgMHg5MDBlMSwgMHg3MDEwNCwgMHg4MDA1OCwgMHg4MDAxOCwgMHg5MDA5MSwgMHg3MDExNCwgMHg4MDA3OCwgMHg4MDAzOCwgMHg5MDBkMSwgMHg3MDEwYywgMHg4MDA2OCwgMHg4MDAyOCwgMHg5MDBiMSwgMHg4MDAwOCwgMHg4MDA4OCwgMHg4MDA0OCwgMHg5MDBmMSwgMHg3MDEwMiwgMHg4MDA1NCwgMHg4MDAxNCwgMHg4MDExYywgMHg3MDExMiwgMHg4MDA3NCwgMHg4MDAzNCwgMHg5MDBjOSwgMHg3MDEwYSwgMHg4MDA2NCwgMHg4MDAyNCwgMHg5MDBhOSwgMHg4MDAwNCwgMHg4MDA4NCwgMHg4MDA0NCwgMHg5MDBlOSwgMHg3MDEwNiwgMHg4MDA1YywgMHg4MDAxYywgMHg5MDA5OSwgMHg3MDExNiwgMHg4MDA3YywgMHg4MDAzYywgMHg5MDBkOSwgMHg3MDEwZSwgMHg4MDA2YywgMHg4MDAyYywgMHg5MDBiOSwgMHg4MDAwYywgMHg4MDA4YywgMHg4MDA0YywgMHg5MDBmOSwgMHg3MDEwMSwgMHg4MDA1MiwgMHg4MDAxMiwgMHg4MDExYSwgMHg3MDExMSwgMHg4MDA3MiwgMHg4MDAzMiwgMHg5MDBjNSwgMHg3MDEwOSwgMHg4MDA2MiwgMHg4MDAyMiwgMHg5MDBhNSwgMHg4MDAwMiwgMHg4MDA4MiwgMHg4MDA0MiwgMHg5MDBlNSwgMHg3MDEwNSwgMHg4MDA1YSwgMHg4MDAxYSwgMHg5MDA5NSwgMHg3MDExNSwgMHg4MDA3YSwgMHg4MDAzYSwgMHg5MDBkNSwgMHg3MDEwZCwgMHg4MDA2YSwgMHg4MDAyYSwgMHg5MDBiNSwgMHg4MDAwYSwgMHg4MDA4YSwgMHg4MDA0YSwgMHg5MDBmNSwgMHg3MDEwMywgMHg4MDA1NiwgMHg4MDAxNiwgMHg4MDExZSwgMHg3MDExMywgMHg4MDA3NiwgMHg4MDAzNiwgMHg5MDBjZCwgMHg3MDEwYiwgMHg4MDA2NiwgMHg4MDAyNiwgMHg5MDBhZCwgMHg4MDAwNiwgMHg4MDA4NiwgMHg4MDA0NiwgMHg5MDBlZCwgMHg3MDEwNywgMHg4MDA1ZSwgMHg4MDAxZSwgMHg5MDA5ZCwgMHg3MDExNywgMHg4MDA3ZSwgMHg4MDAzZSwgMHg5MDBkZCwgMHg3MDEwZiwgMHg4MDA2ZSwgMHg4MDAyZSwgMHg5MDBiZCwgMHg4MDAwZSwgMHg4MDA4ZSwgMHg4MDA0ZSwgMHg5MDBmZCwgMHg3MDEwMCwgMHg4MDA1MSwgMHg4MDAxMSwgMHg4MDExOSwgMHg3MDExMCwgMHg4MDA3MSwgMHg4MDAzMSwgMHg5MDBjMywgMHg3MDEwOCwgMHg4MDA2MSwgMHg4MDAyMSwgMHg5MDBhMywgMHg4MDAwMSwgMHg4MDA4MSwgMHg4MDA0MSwgMHg5MDBlMywgMHg3MDEwNCwgMHg4MDA1OSwgMHg4MDAxOSwgMHg5MDA5MywgMHg3MDExNCwgMHg4MDA3OSwgMHg4MDAzOSwgMHg5MDBkMywgMHg3MDEwYywgMHg4MDA2OSwgMHg4MDAyOSwgMHg5MDBiMywgMHg4MDAwOSwgMHg4MDA4OSwgMHg4MDA0OSwgMHg5MDBmMywgMHg3MDEwMiwgMHg4MDA1NSwgMHg4MDAxNSwgMHg4MDExZCwgMHg3MDExMiwgMHg4MDA3NSwgMHg4MDAzNSwgMHg5MDBjYiwgMHg3MDEwYSwgMHg4MDA2NSwgMHg4MDAyNSwgMHg5MDBhYiwgMHg4MDAwNSwgMHg4MDA4NSwgMHg4MDA0NSwgMHg5MDBlYiwgMHg3MDEwNiwgMHg4MDA1ZCwgMHg4MDAxZCwgMHg5MDA5YiwgMHg3MDExNiwgMHg4MDA3ZCwgMHg4MDAzZCwgMHg5MDBkYiwgMHg3MDEwZSwgMHg4MDA2ZCwgMHg4MDAyZCwgMHg5MDBiYiwgMHg4MDAwZCwgMHg4MDA4ZCwgMHg4MDA0ZCwgMHg5MDBmYiwgMHg3MDEwMSwgMHg4MDA1MywgMHg4MDAxMywgMHg4MDExYiwgMHg3MDExMSwgMHg4MDA3MywgMHg4MDAzMywgMHg5MDBjNywgMHg3MDEwOSwgMHg4MDA2MywgMHg4MDAyMywgMHg5MDBhNywgMHg4MDAwMywgMHg4MDA4MywgMHg4MDA0MywgMHg5MDBlNywgMHg3MDEwNSwgMHg4MDA1YiwgMHg4MDAxYiwgMHg5MDA5NywgMHg3MDExNSwgMHg4MDA3YiwgMHg4MDAzYiwgMHg5MDBkNywgMHg3MDEwZCwgMHg4MDA2YiwgMHg4MDAyYiwgMHg5MDBiNywgMHg4MDAwYiwgMHg4MDA4YiwgMHg4MDA0YiwgMHg5MDBmNywgMHg3MDEwMywgMHg4MDA1NywgMHg4MDAxNywgMHg4MDExZiwgMHg3MDExMywgMHg4MDA3NywgMHg4MDAzNywgMHg5MDBjZiwgMHg3MDEwYiwgMHg4MDA2NywgMHg4MDAyNywgMHg5MDBhZiwgMHg4MDAwNywgMHg4MDA4NywgMHg4MDA0NywgMHg5MDBlZiwgMHg3MDEwNywgMHg4MDA1ZiwgMHg4MDAxZiwgMHg5MDA5ZiwgMHg3MDExNywgMHg4MDA3ZiwgMHg4MDAzZiwgMHg5MDBkZiwgMHg3MDEwZiwgMHg4MDA2ZiwgMHg4MDAyZiwgMHg5MDBiZiwgMHg4MDAwZiwgMHg4MDA4ZiwgMHg4MDA0ZiwgMHg5MDBmZl0pLCA5XTsKY29uc3QgZml4ZWREaXN0Q29kZVRhYiA9IFtuZXcgSW50MzJBcnJheShbMHg1MDAwMCwgMHg1MDAxMCwgMHg1MDAwOCwgMHg1MDAxOCwgMHg1MDAwNCwgMHg1MDAxNCwgMHg1MDAwYywgMHg1MDAxYywgMHg1MDAwMiwgMHg1MDAxMiwgMHg1MDAwYSwgMHg1MDAxYSwgMHg1MDAwNiwgMHg1MDAxNiwgMHg1MDAwZSwgMHgwMDAwMCwgMHg1MDAwMSwgMHg1MDAxMSwgMHg1MDAwOSwgMHg1MDAxOSwgMHg1MDAwNSwgMHg1MDAxNSwgMHg1MDAwZCwgMHg1MDAxZCwgMHg1MDAwMywgMHg1MDAxMywgMHg1MDAwYiwgMHg1MDAxYiwgMHg1MDAwNywgMHg1MDAxNywgMHg1MDAwZiwgMHgwMDAwMF0pLCA1XTsKY2xhc3MgRmxhdGVTdHJlYW0gZXh0ZW5kcyBEZWNvZGVTdHJlYW0gewogIGNvbnN0cnVjdG9yKHN0ciwgbWF5YmVMZW5ndGgpIHsKICAgIHN1cGVyKG1heWJlTGVuZ3RoKTsKICAgIHRoaXMuc3RyID0gc3RyOwogICAgdGhpcy5kaWN0ID0gc3RyLmRpY3Q7CiAgICBjb25zdCBjbWYgPSBzdHIuZ2V0Qnl0ZSgpOwogICAgY29uc3QgZmxnID0gc3RyLmdldEJ5dGUoKTsKICAgIGlmIChjbWYgPT09IC0xIHx8IGZsZyA9PT0gLTEpIHsKICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBJbnZhbGlkIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW06ICR7Y21mfSwgJHtmbGd9YCk7CiAgICB9CiAgICBpZiAoKGNtZiAmIDB4MGYpICE9PSAweDA4KSB7CiAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcihgVW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QgaW4gZmxhdGUgc3RyZWFtOiAke2NtZn0sICR7ZmxnfWApOwogICAgfQogICAgaWYgKCgoY21mIDw8IDgpICsgZmxnKSAlIDMxICE9PSAwKSB7CiAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcihgQmFkIEZDSEVDSyBpbiBmbGF0ZSBzdHJlYW06ICR7Y21mfSwgJHtmbGd9YCk7CiAgICB9CiAgICBpZiAoZmxnICYgMHgyMCkgewogICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEZESUNUIGJpdCBzZXQgaW4gZmxhdGUgc3RyZWFtOiAke2NtZn0sICR7ZmxnfWApOwogICAgfQogICAgdGhpcy5jb2RlU2l6ZSA9IDA7CiAgICB0aGlzLmNvZGVCdWYgPSAwOwogIH0KICBhc3luYyBnZXRJbWFnZURhdGEobGVuZ3RoLCBfZGVjb2Rlck9wdGlvbnMpIHsKICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmFzeW5jR2V0Qnl0ZXMoKTsKICAgIHJldHVybiBkYXRhPy5zdWJhcnJheSgwLCBsZW5ndGgpIHx8IHRoaXMuZ2V0Qnl0ZXMobGVuZ3RoKTsKICB9CiAgYXN5bmMgYXN5bmNHZXRCeXRlcygpIHsKICAgIHRoaXMuc3RyLnJlc2V0KCk7CiAgICBjb25zdCBieXRlcyA9IHRoaXMuc3RyLmdldEJ5dGVzKCk7CiAgICB0cnkgewogICAgICBjb25zdCB7CiAgICAgICAgcmVhZGFibGUsCiAgICAgICAgd3JpdGFibGUKICAgICAgfSA9IG5ldyBEZWNvbXByZXNzaW9uU3RyZWFtKCJkZWZsYXRlIik7CiAgICAgIGNvbnN0IHdyaXRlciA9IHdyaXRhYmxlLmdldFdyaXRlcigpOwogICAgICBhd2FpdCB3cml0ZXIucmVhZHk7CiAgICAgIHdyaXRlci53cml0ZShieXRlcykudGhlbihhc3luYyAoKSA9PiB7CiAgICAgICAgYXdhaXQgd3JpdGVyLnJlYWR5OwogICAgICAgIGF3YWl0IHdyaXRlci5jbG9zZSgpOwogICAgICB9KS5jYXRjaCgoKSA9PiB7fSk7CiAgICAgIGNvbnN0IGNodW5rcyA9IFtdOwogICAgICBsZXQgdG90YWxMZW5ndGggPSAwOwogICAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHJlYWRhYmxlKSB7CiAgICAgICAgY2h1bmtzLnB1c2goY2h1bmspOwogICAgICAgIHRvdGFsTGVuZ3RoICs9IGNodW5rLmJ5dGVMZW5ndGg7CiAgICAgIH0KICAgICAgY29uc3QgZGF0YSA9IG5ldyBVaW50OEFycmF5KHRvdGFsTGVuZ3RoKTsKICAgICAgbGV0IG9mZnNldCA9IDA7CiAgICAgIGZvciAoY29uc3QgY2h1bmsgb2YgY2h1bmtzKSB7CiAgICAgICAgZGF0YS5zZXQoY2h1bmssIG9mZnNldCk7CiAgICAgICAgb2Zmc2V0ICs9IGNodW5rLmJ5dGVMZW5ndGg7CiAgICAgIH0KICAgICAgcmV0dXJuIGRhdGE7CiAgICB9IGNhdGNoIHsKICAgICAgdGhpcy5zdHIgPSBuZXcgU3RyZWFtKGJ5dGVzLCAyLCBieXRlcy5sZW5ndGgsIHRoaXMuc3RyLmRpY3QpOwogICAgICB0aGlzLnJlc2V0KCk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KICBnZXQgaXNBc3luYygpIHsKICAgIHJldHVybiB0cnVlOwogIH0KICBnZXRCaXRzKGJpdHMpIHsKICAgIGNvbnN0IHN0ciA9IHRoaXMuc3RyOwogICAgbGV0IGNvZGVTaXplID0gdGhpcy5jb2RlU2l6ZTsKICAgIGxldCBjb2RlQnVmID0gdGhpcy5jb2RlQnVmOwogICAgbGV0IGI7CiAgICB3aGlsZSAoY29kZVNpemUgPCBiaXRzKSB7CiAgICAgIGlmICgoYiA9IHN0ci5nZXRCeXRlKCkpID09PSAtMSkgewogICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiQmFkIGVuY29kaW5nIGluIGZsYXRlIHN0cmVhbSIpOwogICAgICB9CiAgICAgIGNvZGVCdWYgfD0gYiA8PCBjb2RlU2l6ZTsKICAgICAgY29kZVNpemUgKz0gODsKICAgIH0KICAgIGIgPSBjb2RlQnVmICYgKDEgPDwgYml0cykgLSAxOwogICAgdGhpcy5jb2RlQnVmID0gY29kZUJ1ZiA+PiBiaXRzOwogICAgdGhpcy5jb2RlU2l6ZSA9IGNvZGVTaXplIC09IGJpdHM7CiAgICByZXR1cm4gYjsKICB9CiAgZ2V0Q29kZSh0YWJsZSkgewogICAgY29uc3Qgc3RyID0gdGhpcy5zdHI7CiAgICBjb25zdCBjb2RlcyA9IHRhYmxlWzBdOwogICAgY29uc3QgbWF4TGVuID0gdGFibGVbMV07CiAgICBsZXQgY29kZVNpemUgPSB0aGlzLmNvZGVTaXplOwogICAgbGV0IGNvZGVCdWYgPSB0aGlzLmNvZGVCdWY7CiAgICBsZXQgYjsKICAgIHdoaWxlIChjb2RlU2l6ZSA8IG1heExlbikgewogICAgICBpZiAoKGIgPSBzdHIuZ2V0Qnl0ZSgpKSA9PT0gLTEpIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjb2RlQnVmIHw9IGIgPDwgY29kZVNpemU7CiAgICAgIGNvZGVTaXplICs9IDg7CiAgICB9CiAgICBjb25zdCBjb2RlID0gY29kZXNbY29kZUJ1ZiAmICgxIDw8IG1heExlbikgLSAxXTsKICAgIGNvbnN0IGNvZGVMZW4gPSBjb2RlID4+IDE2OwogICAgY29uc3QgY29kZVZhbCA9IGNvZGUgJiAweGZmZmY7CiAgICBpZiAoY29kZUxlbiA8IDEgfHwgY29kZVNpemUgPCBjb2RlTGVuKSB7CiAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiQmFkIGVuY29kaW5nIGluIGZsYXRlIHN0cmVhbSIpOwogICAgfQogICAgdGhpcy5jb2RlQnVmID0gY29kZUJ1ZiA+PiBjb2RlTGVuOwogICAgdGhpcy5jb2RlU2l6ZSA9IGNvZGVTaXplIC0gY29kZUxlbjsKICAgIHJldHVybiBjb2RlVmFsOwogIH0KICBnZW5lcmF0ZUh1ZmZtYW5UYWJsZShsZW5ndGhzKSB7CiAgICBjb25zdCBuID0gbGVuZ3Rocy5sZW5ndGg7CiAgICBsZXQgbWF4TGVuID0gMDsKICAgIGxldCBpOwogICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgewogICAgICBpZiAobGVuZ3Roc1tpXSA+IG1heExlbikgewogICAgICAgIG1heExlbiA9IGxlbmd0aHNbaV07CiAgICAgIH0KICAgIH0KICAgIGNvbnN0IHNpemUgPSAxIDw8IG1heExlbjsKICAgIGNvbnN0IGNvZGVzID0gbmV3IEludDMyQXJyYXkoc2l6ZSk7CiAgICBmb3IgKGxldCBsZW4gPSAxLCBjb2RlID0gMCwgc2tpcCA9IDI7IGxlbiA8PSBtYXhMZW47ICsrbGVuLCBjb2RlIDw8PSAxLCBza2lwIDw8PSAxKSB7CiAgICAgIGZvciAobGV0IHZhbCA9IDA7IHZhbCA8IG47ICsrdmFsKSB7CiAgICAgICAgaWYgKGxlbmd0aHNbdmFsXSA9PT0gbGVuKSB7CiAgICAgICAgICBsZXQgY29kZTIgPSAwOwogICAgICAgICAgbGV0IHQgPSBjb2RlOwogICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAgICAgIGNvZGUyID0gY29kZTIgPDwgMSB8IHQgJiAxOwogICAgICAgICAgICB0ID4+PSAxOwogICAgICAgICAgfQogICAgICAgICAgZm9yIChpID0gY29kZTI7IGkgPCBzaXplOyBpICs9IHNraXApIHsKICAgICAgICAgICAgY29kZXNbaV0gPSBsZW4gPDwgMTYgfCB2YWw7CiAgICAgICAgICB9CiAgICAgICAgICArK2NvZGU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gW2NvZGVzLCBtYXhMZW5dOwogIH0KICAjZW5kc1N0cmVhbU9uRXJyb3IoZXJyKSB7CiAgICBpbmZvKGVycik7CiAgICB0aGlzLmVvZiA9IHRydWU7CiAgfQogIHJlYWRCbG9jaygpIHsKICAgIGxldCBidWZmZXIsIGhkciwgbGVuOwogICAgY29uc3Qgc3RyID0gdGhpcy5zdHI7CiAgICB0cnkgewogICAgICBoZHIgPSB0aGlzLmdldEJpdHMoMyk7CiAgICB9IGNhdGNoIChleCkgewogICAgICB0aGlzLiNlbmRzU3RyZWFtT25FcnJvcihleC5tZXNzYWdlKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGhkciAmIDEpIHsKICAgICAgdGhpcy5lb2YgPSB0cnVlOwogICAgfQogICAgaGRyID4+PSAxOwogICAgaWYgKGhkciA9PT0gMCkgewogICAgICBsZXQgYjsKICAgICAgaWYgKChiID0gc3RyLmdldEJ5dGUoKSkgPT09IC0xKSB7CiAgICAgICAgdGhpcy4jZW5kc1N0cmVhbU9uRXJyb3IoIkJhZCBibG9jayBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtIik7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGxldCBibG9ja0xlbiA9IGI7CiAgICAgIGlmICgoYiA9IHN0ci5nZXRCeXRlKCkpID09PSAtMSkgewogICAgICAgIHRoaXMuI2VuZHNTdHJlYW1PbkVycm9yKCJCYWQgYmxvY2sgaGVhZGVyIGluIGZsYXRlIHN0cmVhbSIpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBibG9ja0xlbiB8PSBiIDw8IDg7CiAgICAgIGlmICgoYiA9IHN0ci5nZXRCeXRlKCkpID09PSAtMSkgewogICAgICAgIHRoaXMuI2VuZHNTdHJlYW1PbkVycm9yKCJCYWQgYmxvY2sgaGVhZGVyIGluIGZsYXRlIHN0cmVhbSIpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBsZXQgY2hlY2sgPSBiOwogICAgICBpZiAoKGIgPSBzdHIuZ2V0Qnl0ZSgpKSA9PT0gLTEpIHsKICAgICAgICB0aGlzLiNlbmRzU3RyZWFtT25FcnJvcigiQmFkIGJsb2NrIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW0iKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY2hlY2sgfD0gYiA8PCA4OwogICAgICBpZiAoY2hlY2sgIT09ICh+YmxvY2tMZW4gJiAweGZmZmYpICYmIChibG9ja0xlbiAhPT0gMCB8fCBjaGVjayAhPT0gMCkpIHsKICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkJhZCB1bmNvbXByZXNzZWQgYmxvY2sgbGVuZ3RoIGluIGZsYXRlIHN0cmVhbSIpOwogICAgICB9CiAgICAgIHRoaXMuY29kZUJ1ZiA9IDA7CiAgICAgIHRoaXMuY29kZVNpemUgPSAwOwogICAgICBjb25zdCBidWZmZXJMZW5ndGggPSB0aGlzLmJ1ZmZlckxlbmd0aCwKICAgICAgICBlbmQgPSBidWZmZXJMZW5ndGggKyBibG9ja0xlbjsKICAgICAgYnVmZmVyID0gdGhpcy5lbnN1cmVCdWZmZXIoZW5kKTsKICAgICAgdGhpcy5idWZmZXJMZW5ndGggPSBlbmQ7CiAgICAgIGlmIChibG9ja0xlbiA9PT0gMCkgewogICAgICAgIGlmIChzdHIucGVla0J5dGUoKSA9PT0gLTEpIHsKICAgICAgICAgIHRoaXMuZW9mID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29uc3QgYmxvY2sgPSBzdHIuZ2V0Qnl0ZXMoYmxvY2tMZW4pOwogICAgICAgIGJ1ZmZlci5zZXQoYmxvY2ssIGJ1ZmZlckxlbmd0aCk7CiAgICAgICAgaWYgKGJsb2NrLmxlbmd0aCA8IGJsb2NrTGVuKSB7CiAgICAgICAgICB0aGlzLmVvZiA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIGxldCBsaXRDb2RlVGFibGU7CiAgICBsZXQgZGlzdENvZGVUYWJsZTsKICAgIGlmIChoZHIgPT09IDEpIHsKICAgICAgbGl0Q29kZVRhYmxlID0gZml4ZWRMaXRDb2RlVGFiOwogICAgICBkaXN0Q29kZVRhYmxlID0gZml4ZWREaXN0Q29kZVRhYjsKICAgIH0gZWxzZSBpZiAoaGRyID09PSAyKSB7CiAgICAgIGNvbnN0IG51bUxpdENvZGVzID0gdGhpcy5nZXRCaXRzKDUpICsgMjU3OwogICAgICBjb25zdCBudW1EaXN0Q29kZXMgPSB0aGlzLmdldEJpdHMoNSkgKyAxOwogICAgICBjb25zdCBudW1Db2RlTGVuQ29kZXMgPSB0aGlzLmdldEJpdHMoNCkgKyA0OwogICAgICBjb25zdCBjb2RlTGVuQ29kZUxlbmd0aHMgPSBuZXcgVWludDhBcnJheShjb2RlTGVuQ29kZU1hcC5sZW5ndGgpOwogICAgICBsZXQgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IG51bUNvZGVMZW5Db2RlczsgKytpKSB7CiAgICAgICAgY29kZUxlbkNvZGVMZW5ndGhzW2NvZGVMZW5Db2RlTWFwW2ldXSA9IHRoaXMuZ2V0Qml0cygzKTsKICAgICAgfQogICAgICBjb25zdCBjb2RlTGVuQ29kZVRhYiA9IHRoaXMuZ2VuZXJhdGVIdWZmbWFuVGFibGUoY29kZUxlbkNvZGVMZW5ndGhzKTsKICAgICAgbGVuID0gMDsKICAgICAgaSA9IDA7CiAgICAgIGNvbnN0IGNvZGVzID0gbnVtTGl0Q29kZXMgKyBudW1EaXN0Q29kZXM7CiAgICAgIGNvbnN0IGNvZGVMZW5ndGhzID0gbmV3IFVpbnQ4QXJyYXkoY29kZXMpOwogICAgICBsZXQgYml0c0xlbmd0aCwgYml0c09mZnNldCwgd2hhdDsKICAgICAgd2hpbGUgKGkgPCBjb2RlcykgewogICAgICAgIGNvbnN0IGNvZGUgPSB0aGlzLmdldENvZGUoY29kZUxlbkNvZGVUYWIpOwogICAgICAgIGlmIChjb2RlID09PSAxNikgewogICAgICAgICAgYml0c0xlbmd0aCA9IDI7CiAgICAgICAgICBiaXRzT2Zmc2V0ID0gMzsKICAgICAgICAgIHdoYXQgPSBsZW47CiAgICAgICAgfSBlbHNlIGlmIChjb2RlID09PSAxNykgewogICAgICAgICAgYml0c0xlbmd0aCA9IDM7CiAgICAgICAgICBiaXRzT2Zmc2V0ID0gMzsKICAgICAgICAgIHdoYXQgPSBsZW4gPSAwOwogICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gMTgpIHsKICAgICAgICAgIGJpdHNMZW5ndGggPSA3OwogICAgICAgICAgYml0c09mZnNldCA9IDExOwogICAgICAgICAgd2hhdCA9IGxlbiA9IDA7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvZGVMZW5ndGhzW2krK10gPSBsZW4gPSBjb2RlOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGxldCByZXBlYXRMZW5ndGggPSB0aGlzLmdldEJpdHMoYml0c0xlbmd0aCkgKyBiaXRzT2Zmc2V0OwogICAgICAgIHdoaWxlIChyZXBlYXRMZW5ndGgtLSA+IDApIHsKICAgICAgICAgIGNvZGVMZW5ndGhzW2krK10gPSB3aGF0OwogICAgICAgIH0KICAgICAgfQogICAgICBsaXRDb2RlVGFibGUgPSB0aGlzLmdlbmVyYXRlSHVmZm1hblRhYmxlKGNvZGVMZW5ndGhzLnN1YmFycmF5KDAsIG51bUxpdENvZGVzKSk7CiAgICAgIGRpc3RDb2RlVGFibGUgPSB0aGlzLmdlbmVyYXRlSHVmZm1hblRhYmxlKGNvZGVMZW5ndGhzLnN1YmFycmF5KG51bUxpdENvZGVzLCBjb2RlcykpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJVbmtub3duIGJsb2NrIHR5cGUgaW4gZmxhdGUgc3RyZWFtIik7CiAgICB9CiAgICBidWZmZXIgPSB0aGlzLmJ1ZmZlcjsKICAgIGxldCBsaW1pdCA9IGJ1ZmZlciA/IGJ1ZmZlci5sZW5ndGggOiAwOwogICAgbGV0IHBvcyA9IHRoaXMuYnVmZmVyTGVuZ3RoOwogICAgd2hpbGUgKHRydWUpIHsKICAgICAgbGV0IGNvZGUxID0gdGhpcy5nZXRDb2RlKGxpdENvZGVUYWJsZSk7CiAgICAgIGlmIChjb2RlMSA8IDI1NikgewogICAgICAgIGlmIChwb3MgKyAxID49IGxpbWl0KSB7CiAgICAgICAgICBidWZmZXIgPSB0aGlzLmVuc3VyZUJ1ZmZlcihwb3MgKyAxKTsKICAgICAgICAgIGxpbWl0ID0gYnVmZmVyLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgYnVmZmVyW3BvcysrXSA9IGNvZGUxOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmIChjb2RlMSA9PT0gMjU2KSB7CiAgICAgICAgdGhpcy5idWZmZXJMZW5ndGggPSBwb3M7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvZGUxIC09IDI1NzsKICAgICAgY29kZTEgPSBsZW5ndGhEZWNvZGVbY29kZTFdOwogICAgICBsZXQgY29kZTIgPSBjb2RlMSA+PiAxNjsKICAgICAgaWYgKGNvZGUyID4gMCkgewogICAgICAgIGNvZGUyID0gdGhpcy5nZXRCaXRzKGNvZGUyKTsKICAgICAgfQogICAgICBsZW4gPSAoY29kZTEgJiAweGZmZmYpICsgY29kZTI7CiAgICAgIGNvZGUxID0gdGhpcy5nZXRDb2RlKGRpc3RDb2RlVGFibGUpOwogICAgICBjb2RlMSA9IGRpc3REZWNvZGVbY29kZTFdOwogICAgICBjb2RlMiA9IGNvZGUxID4+IDE2OwogICAgICBpZiAoY29kZTIgPiAwKSB7CiAgICAgICAgY29kZTIgPSB0aGlzLmdldEJpdHMoY29kZTIpOwogICAgICB9CiAgICAgIGNvbnN0IGRpc3QgPSAoY29kZTEgJiAweGZmZmYpICsgY29kZTI7CiAgICAgIGlmIChwb3MgKyBsZW4gPj0gbGltaXQpIHsKICAgICAgICBidWZmZXIgPSB0aGlzLmVuc3VyZUJ1ZmZlcihwb3MgKyBsZW4pOwogICAgICAgIGxpbWl0ID0gYnVmZmVyLmxlbmd0aDsKICAgICAgfQogICAgICBmb3IgKGxldCBrID0gMDsgayA8IGxlbjsgKytrLCArK3BvcykgewogICAgICAgIGJ1ZmZlcltwb3NdID0gYnVmZmVyW3BvcyAtIGRpc3RdOwogICAgICB9CiAgICB9CiAgfQp9Cgo7Ly8gLi9zcmMvY29yZS9hcml0aG1ldGljX2RlY29kZXIuanMKY29uc3QgUWVUYWJsZSA9IFt7CiAgcWU6IDB4NTYwMSwKICBubXBzOiAxLAogIG5scHM6IDEsCiAgc3dpdGNoRmxhZzogMQp9LCB7CiAgcWU6IDB4MzQwMSwKICBubXBzOiAyLAogIG5scHM6IDYsCiAgc3dpdGNoRmxhZzogMAp9LCB7CiAgcWU6IDB4MTgwMSwKICBubXBzOiAzLAogIG5scHM6IDksCiAgc3dpdGNoRmxhZzogMAp9LCB7CiAgcWU6IDB4MGFjMSwKICBubXBzOiA0LAogIG5scHM6IDEyLAogIHN3aXRjaEZsYWc6IDAKfSwgewogIHFlOiAweDA1MjEsCiAgbm1wczogNSwKICBubHBzOiAyOSwKICBzd2l0Y2hGbGFnOiAwCn0sIHsKICBxZTogMHgwMjIxLAogIG5tcHM6IDM4LAogIG5scHM6IDMzLAogIHN3aXRjaEZsYWc6IDAKfSwgewogIHFlOiAweDU2MDEsCiAgbm1wczogNywKICBubHBzOiA2LAogIHN3aXRjaEZsYWc6IDEKfSwgewogIHFlOiAweDU0MDEsCiAgbm1wczogOCwKICBubHBzOiAxNCwKICBzd2l0Y2hGbGFnOiAwCn0sIHsKICBxZTogMHg0ODAxLAogIG5tcHM6IDksCiAgbmxwczogMTQsCiAgc3dpdGNoRmxhZzogMAp9LCB7CiAgcWU6IDB4MzgwMSwKICBubXBzOiAxMCwKICBubHBzOiAxNCwKICBzd2l0Y2hGbGFnOiAwCn0sIHsKICBxZTogMHgzMDAxLAogIG5tcHM6IDExLAogIG5scHM6IDE3LAogIHN3aXRjaEZsYWc6IDAKfSwgewogIHFlOiAweDI0MDEsCiAgbm1wczogMTIsCiAgbmxwczogMTgsCiAgc3dpdGNoRmxhZzogMAp9LCB7CiAgcWU6IDB4MWMwMSwKICBubXBzOiAxMywKICBubHBzOiAyMCwKICBzd2l0Y2hGbGFnOiAwCn0sIHsKICBxZTogMHgxNjAxLAogIG5tcHM6IDI5LAogIG5scHM6IDIxLAogIHN3aXRjaEZsYWc6IDAKfSwgewogIHFlOiAweDU2MDEsCiAgbm1wczogMTUsCiAgbmxwczogMTQsCiAgc3dpdGNoRmxhZzogMQp9LCB7CiAgcWU6IDB4NTQwMSwKICBubXBzOiAxNiwKICBubHBzOiAxNCwKICBzd2l0Y2hGbGFnOiAwCn0sIHsKICBxZTogMHg1MTAxLAogIG5tcHM6IDE3LAogIG5scHM6IDE1LAogIHN3aXRjaEZsYWc6IDAKfSwgewogIHFlOiAweDQ4MDEsCiAgbm1wczogMTgsCiAgbmxwczogMTYsCiAgc3dpdGNoRmxhZzogMAp9LCB7CiAgcWU6IDB4MzgwMSwKICBubXBzOiAxOSwKICBubHBzOiAxNywKICBzd2l0Y2hGbGFnOiAwCn0sIHsKICBxZTogMHgzNDAxLAogIG5tcHM6IDIwLAogIG5scHM6IDE4LAogIHN3aXRjaEZsYWc6IDAKfSwgewogIHFlOiAweDMwMDEsCiAgbm1wczogMjEsCiAgbmxwczogMTksCiAgc3dpdGNoRmxhZzogMAp9LCB7CiAgcWU6IDB4MjgwMSwKICBubXBzOiAyMiwKICBubHBzOiAxOSwKICBzd2l0Y2hGbGFnOiAwCn0sIHsKICBxZTogMHgyNDAxLAogIG5tcHM6IDIzLAogIG5scHM6IDIwLAogIHN3aXRjaEZsYWc6IDAKfSwgewogIHFlOiAweDIyMDEsCiAgbm1wczogMjQsCiAgbmxwczogMjEsCiAgc3dpdGNoRmxhZzogMAp9LCB7CiAgcWU6IDB4MWMwMSwKICBubXBzOiAyNSwKICBubHBzOiAyMiwKICBzd2l0Y2hGbGFnOiAwCn0sIHsKICBxZTogMHgxODAxLAogIG5tcHM6IDI2LAogIG5scHM6IDIzLAogIHN3aXRjaEZsYWc6IDAKfSwgewogIHFlOiAweDE2MDEsCiAgbm1wczogMjcsCiAgbmxwczogMjQsCiAgc3dpdGNoRmxhZzogMAp9LCB7CiAgcWU6IDB4MTQwMSwKICBubXBzOiAyOCwKICBubHBzOiAyNSwKICBzd2l0Y2hGbGFnOiAwCn0sIHsKICBxZTogMHgxMjAxLAogIG5tcHM6IDI5LAogIG5scHM6IDI2LAogIHN3aXRjaEZsYWc6IDAKfSwgewogIHFlOiAweDExMDEsCiAgbm1wczogMzAsCiAgbmxwczogMjcsCiAgc3dpdGNoRmxhZzogMAp9LCB7CiAgcWU6IDB4MGFjMSwKICBubXBzOiAzMSwKICBubHBzOiAyOCwKICBzd2l0Y2hGbGFnOiAwCn0sIHsKICBxZTogMHgwOWMxLAogIG5tcHM6IDMyLAogIG5scHM6IDI5LAogIHN3aXRjaEZsYWc6IDAKfSwgewogIHFlOiAweDA4YTEsCiAgbm1wczogMzMsCiAgbmxwczogMzAsCiAgc3dpdGNoRmxhZzogMAp9LCB7CiAgcWU6IDB4MDUyMSwKICBubXBzOiAzNCwKICBubHBzOiAzMSwKICBzd2l0Y2hGbGFnOiAwCn0sIHsKICBxZTogMHgwNDQxLAogIG5tcHM6IDM1LAogIG5scHM6IDMyLAogIHN3aXRjaEZsYWc6IDAKfSwgewogIHFlOiAweDAyYTEsCiAgbm1wczogMzYsCiAgbmxwczogMzMsCiAgc3dpdGNoRmxhZzogMAp9LCB7CiAgcWU6IDB4MDIyMSwKICBubXBzOiAzNywKICBubHBzOiAzNCwKICBzd2l0Y2hGbGFnOiAwCn0sIHsKICBxZTogMHgwMTQxLAogIG5tcHM6IDM4LAogIG5scHM6IDM1LAogIHN3aXRjaEZsYWc6IDAKfSwgewogIHFlOiAweDAxMTEsCiAgbm1wczogMzksCiAgbmxwczogMzYsCiAgc3dpdGNoRmxhZzogMAp9LCB7CiAgcWU6IDB4MDA4NSwKICBubXBzOiA0MCwKICBubHBzOiAzNywKICBzd2l0Y2hGbGFnOiAwCn0sIHsKICBxZTogMHgwMDQ5LAogIG5tcHM6IDQxLAogIG5scHM6IDM4LAogIHN3aXRjaEZsYWc6IDAKfSwgewogIHFlOiAweDAwMjUsCiAgbm1wczogNDIsCiAgbmxwczogMzksCiAgc3dpdGNoRmxhZzogMAp9LCB7CiAgcWU6IDB4MDAxNSwKICBubXBzOiA0MywKICBubHBzOiA0MCwKICBzd2l0Y2hGbGFnOiAwCn0sIHsKICBxZTogMHgwMDA5LAogIG5tcHM6IDQ0LAogIG5scHM6IDQxLAogIHN3aXRjaEZsYWc6IDAKfSwgewogIHFlOiAweDAwMDUsCiAgbm1wczogNDUsCiAgbmxwczogNDIsCiAgc3dpdGNoRmxhZzogMAp9LCB7CiAgcWU6IDB4MDAwMSwKICBubXBzOiA0NSwKICBubHBzOiA0MywKICBzd2l0Y2hGbGFnOiAwCn0sIHsKICBxZTogMHg1NjAxLAogIG5tcHM6IDQ2LAogIG5scHM6IDQ2LAogIHN3aXRjaEZsYWc6IDAKfV07CmNsYXNzIEFyaXRobWV0aWNEZWNvZGVyIHsKICBjb25zdHJ1Y3RvcihkYXRhLCBzdGFydCwgZW5kKSB7CiAgICB0aGlzLmRhdGEgPSBkYXRhOwogICAgdGhpcy5icCA9IHN0YXJ0OwogICAgdGhpcy5kYXRhRW5kID0gZW5kOwogICAgdGhpcy5jaGlnaCA9IGRhdGFbc3RhcnRdOwogICAgdGhpcy5jbG93ID0gMDsKICAgIHRoaXMuYnl0ZUluKCk7CiAgICB0aGlzLmNoaWdoID0gdGhpcy5jaGlnaCA8PCA3ICYgMHhmZmZmIHwgdGhpcy5jbG93ID4+IDkgJiAweDdmOwogICAgdGhpcy5jbG93ID0gdGhpcy5jbG93IDw8IDcgJiAweGZmZmY7CiAgICB0aGlzLmN0IC09IDc7CiAgICB0aGlzLmEgPSAweDgwMDA7CiAgfQogIGJ5dGVJbigpIHsKICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGE7CiAgICBsZXQgYnAgPSB0aGlzLmJwOwogICAgaWYgKGRhdGFbYnBdID09PSAweGZmKSB7CiAgICAgIGlmIChkYXRhW2JwICsgMV0gPiAweDhmKSB7CiAgICAgICAgdGhpcy5jbG93ICs9IDB4ZmYwMDsKICAgICAgICB0aGlzLmN0ID0gODsKICAgICAgfSBlbHNlIHsKICAgICAgICBicCsrOwogICAgICAgIHRoaXMuY2xvdyArPSBkYXRhW2JwXSA8PCA5OwogICAgICAgIHRoaXMuY3QgPSA3OwogICAgICAgIHRoaXMuYnAgPSBicDsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgYnArKzsKICAgICAgdGhpcy5jbG93ICs9IGJwIDwgdGhpcy5kYXRhRW5kID8gZGF0YVticF0gPDwgOCA6IDB4ZmYwMDsKICAgICAgdGhpcy5jdCA9IDg7CiAgICAgIHRoaXMuYnAgPSBicDsKICAgIH0KICAgIGlmICh0aGlzLmNsb3cgPiAweGZmZmYpIHsKICAgICAgdGhpcy5jaGlnaCArPSB0aGlzLmNsb3cgPj4gMTY7CiAgICAgIHRoaXMuY2xvdyAmPSAweGZmZmY7CiAgICB9CiAgfQogIHJlYWRCaXQoY29udGV4dHMsIHBvcykgewogICAgbGV0IGN4X2luZGV4ID0gY29udGV4dHNbcG9zXSA+PiAxLAogICAgICBjeF9tcHMgPSBjb250ZXh0c1twb3NdICYgMTsKICAgIGNvbnN0IHFlVGFibGVJY3ggPSBRZVRhYmxlW2N4X2luZGV4XTsKICAgIGNvbnN0IHFlSWN4ID0gcWVUYWJsZUljeC5xZTsKICAgIGxldCBkOwogICAgbGV0IGEgPSB0aGlzLmEgLSBxZUljeDsKICAgIGlmICh0aGlzLmNoaWdoIDwgcWVJY3gpIHsKICAgICAgaWYgKGEgPCBxZUljeCkgewogICAgICAgIGEgPSBxZUljeDsKICAgICAgICBkID0gY3hfbXBzOwogICAgICAgIGN4X2luZGV4ID0gcWVUYWJsZUljeC5ubXBzOwogICAgICB9IGVsc2UgewogICAgICAgIGEgPSBxZUljeDsKICAgICAgICBkID0gMSBeIGN4X21wczsKICAgICAgICBpZiAocWVUYWJsZUljeC5zd2l0Y2hGbGFnID09PSAxKSB7CiAgICAgICAgICBjeF9tcHMgPSBkOwogICAgICAgIH0KICAgICAgICBjeF9pbmRleCA9IHFlVGFibGVJY3gubmxwczsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgdGhpcy5jaGlnaCAtPSBxZUljeDsKICAgICAgaWYgKChhICYgMHg4MDAwKSAhPT0gMCkgewogICAgICAgIHRoaXMuYSA9IGE7CiAgICAgICAgcmV0dXJuIGN4X21wczsKICAgICAgfQogICAgICBpZiAoYSA8IHFlSWN4KSB7CiAgICAgICAgZCA9IDEgXiBjeF9tcHM7CiAgICAgICAgaWYgKHFlVGFibGVJY3guc3dpdGNoRmxhZyA9PT0gMSkgewogICAgICAgICAgY3hfbXBzID0gZDsKICAgICAgICB9CiAgICAgICAgY3hfaW5kZXggPSBxZVRhYmxlSWN4Lm5scHM7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZCA9IGN4X21wczsKICAgICAgICBjeF9pbmRleCA9IHFlVGFibGVJY3gubm1wczsKICAgICAgfQogICAgfQogICAgZG8gewogICAgICBpZiAodGhpcy5jdCA9PT0gMCkgewogICAgICAgIHRoaXMuYnl0ZUluKCk7CiAgICAgIH0KICAgICAgYSA8PD0gMTsKICAgICAgdGhpcy5jaGlnaCA9IHRoaXMuY2hpZ2ggPDwgMSAmIDB4ZmZmZiB8IHRoaXMuY2xvdyA+PiAxNSAmIDE7CiAgICAgIHRoaXMuY2xvdyA9IHRoaXMuY2xvdyA8PCAxICYgMHhmZmZmOwogICAgICB0aGlzLmN0LS07CiAgICB9IHdoaWxlICgoYSAmIDB4ODAwMCkgPT09IDApOwogICAgdGhpcy5hID0gYTsKICAgIGNvbnRleHRzW3Bvc10gPSBjeF9pbmRleCA8PCAxIHwgY3hfbXBzOwogICAgcmV0dXJuIGQ7CiAgfQp9Cgo7Ly8gLi9zcmMvY29yZS9qYmlnMi5qcwoKCgoKY2xhc3MgSmJpZzJFcnJvciBleHRlbmRzIEJhc2VFeGNlcHRpb24gewogIGNvbnN0cnVjdG9yKG1zZykgewogICAgc3VwZXIobXNnLCAiSmJpZzJFcnJvciIpOwogIH0KfQpjbGFzcyBDb250ZXh0Q2FjaGUgewogIGdldENvbnRleHRzKGlkKSB7CiAgICBpZiAoaWQgaW4gdGhpcykgewogICAgICByZXR1cm4gdGhpc1tpZF07CiAgICB9CiAgICByZXR1cm4gdGhpc1tpZF0gPSBuZXcgSW50OEFycmF5KDEgPDwgMTYpOwogIH0KfQpjbGFzcyBEZWNvZGluZ0NvbnRleHQgewogIGNvbnN0cnVjdG9yKGRhdGEsIHN0YXJ0LCBlbmQpIHsKICAgIHRoaXMuZGF0YSA9IGRhdGE7CiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7CiAgICB0aGlzLmVuZCA9IGVuZDsKICB9CiAgZ2V0IGRlY29kZXIoKSB7CiAgICBjb25zdCBkZWNvZGVyID0gbmV3IEFyaXRobWV0aWNEZWNvZGVyKHRoaXMuZGF0YSwgdGhpcy5zdGFydCwgdGhpcy5lbmQpOwogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAiZGVjb2RlciIsIGRlY29kZXIpOwogIH0KICBnZXQgY29udGV4dENhY2hlKCkgewogICAgY29uc3QgY2FjaGUgPSBuZXcgQ29udGV4dENhY2hlKCk7CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJjb250ZXh0Q2FjaGUiLCBjYWNoZSk7CiAgfQp9CmZ1bmN0aW9uIGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCBwcm9jZWR1cmUsIGRlY29kZXIpIHsKICBjb25zdCBjb250ZXh0cyA9IGNvbnRleHRDYWNoZS5nZXRDb250ZXh0cyhwcm9jZWR1cmUpOwogIGxldCBwcmV2ID0gMTsKICBmdW5jdGlvbiByZWFkQml0cyhsZW5ndGgpIHsKICAgIGxldCB2ID0gMDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgYml0ID0gZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBwcmV2KTsKICAgICAgcHJldiA9IHByZXYgPCAyNTYgPyBwcmV2IDw8IDEgfCBiaXQgOiAocHJldiA8PCAxIHwgYml0KSAmIDUxMSB8IDI1NjsKICAgICAgdiA9IHYgPDwgMSB8IGJpdDsKICAgIH0KICAgIHJldHVybiB2ID4+PiAwOwogIH0KICBjb25zdCBzaWduID0gcmVhZEJpdHMoMSk7CiAgY29uc3QgdmFsdWUgPSByZWFkQml0cygxKSA/IHJlYWRCaXRzKDEpID8gcmVhZEJpdHMoMSkgPyByZWFkQml0cygxKSA/IHJlYWRCaXRzKDEpID8gcmVhZEJpdHMoMzIpICsgNDQzNiA6IHJlYWRCaXRzKDEyKSArIDM0MCA6IHJlYWRCaXRzKDgpICsgODQgOiByZWFkQml0cyg2KSArIDIwIDogcmVhZEJpdHMoNCkgKyA0IDogcmVhZEJpdHMoMik7CiAgbGV0IHNpZ25lZFZhbHVlOwogIGlmIChzaWduID09PSAwKSB7CiAgICBzaWduZWRWYWx1ZSA9IHZhbHVlOwogIH0gZWxzZSBpZiAodmFsdWUgPiAwKSB7CiAgICBzaWduZWRWYWx1ZSA9IC12YWx1ZTsKICB9CiAgaWYgKHNpZ25lZFZhbHVlID49IE1JTl9JTlRfMzIgJiYgc2lnbmVkVmFsdWUgPD0gTUFYX0lOVF8zMikgewogICAgcmV0dXJuIHNpZ25lZFZhbHVlOwogIH0KICByZXR1cm4gbnVsbDsKfQpmdW5jdGlvbiBkZWNvZGVJQUlEKGNvbnRleHRDYWNoZSwgZGVjb2RlciwgY29kZUxlbmd0aCkgewogIGNvbnN0IGNvbnRleHRzID0gY29udGV4dENhY2hlLmdldENvbnRleHRzKCJJQUlEIik7CiAgbGV0IHByZXYgPSAxOwogIGZvciAobGV0IGkgPSAwOyBpIDwgY29kZUxlbmd0aDsgaSsrKSB7CiAgICBjb25zdCBiaXQgPSBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIHByZXYpOwogICAgcHJldiA9IHByZXYgPDwgMSB8IGJpdDsKICB9CiAgaWYgKGNvZGVMZW5ndGggPCAzMSkgewogICAgcmV0dXJuIHByZXYgJiAoMSA8PCBjb2RlTGVuZ3RoKSAtIDE7CiAgfQogIHJldHVybiBwcmV2ICYgMHg3ZmZmZmZmZjsKfQpjb25zdCBTZWdtZW50VHlwZXMgPSBbIlN5bWJvbERpY3Rpb25hcnkiLCBudWxsLCBudWxsLCBudWxsLCAiSW50ZXJtZWRpYXRlVGV4dFJlZ2lvbiIsIG51bGwsICJJbW1lZGlhdGVUZXh0UmVnaW9uIiwgIkltbWVkaWF0ZUxvc3NsZXNzVGV4dFJlZ2lvbiIsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsICJQYXR0ZXJuRGljdGlvbmFyeSIsIG51bGwsIG51bGwsIG51bGwsICJJbnRlcm1lZGlhdGVIYWxmdG9uZVJlZ2lvbiIsIG51bGwsICJJbW1lZGlhdGVIYWxmdG9uZVJlZ2lvbiIsICJJbW1lZGlhdGVMb3NzbGVzc0hhbGZ0b25lUmVnaW9uIiwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgIkludGVybWVkaWF0ZUdlbmVyaWNSZWdpb24iLCBudWxsLCAiSW1tZWRpYXRlR2VuZXJpY1JlZ2lvbiIsICJJbW1lZGlhdGVMb3NzbGVzc0dlbmVyaWNSZWdpb24iLCAiSW50ZXJtZWRpYXRlR2VuZXJpY1JlZmluZW1lbnRSZWdpb24iLCBudWxsLCAiSW1tZWRpYXRlR2VuZXJpY1JlZmluZW1lbnRSZWdpb24iLCAiSW1tZWRpYXRlTG9zc2xlc3NHZW5lcmljUmVmaW5lbWVudFJlZ2lvbiIsIG51bGwsIG51bGwsIG51bGwsIG51bGwsICJQYWdlSW5mb3JtYXRpb24iLCAiRW5kT2ZQYWdlIiwgIkVuZE9mU3RyaXBlIiwgIkVuZE9mRmlsZSIsICJQcm9maWxlcyIsICJUYWJsZXMiLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCAiRXh0ZW5zaW9uIl07CmNvbnN0IENvZGluZ1RlbXBsYXRlcyA9IFtbewogIHg6IC0xLAogIHk6IC0yCn0sIHsKICB4OiAwLAogIHk6IC0yCn0sIHsKICB4OiAxLAogIHk6IC0yCn0sIHsKICB4OiAtMiwKICB5OiAtMQp9LCB7CiAgeDogLTEsCiAgeTogLTEKfSwgewogIHg6IDAsCiAgeTogLTEKfSwgewogIHg6IDEsCiAgeTogLTEKfSwgewogIHg6IDIsCiAgeTogLTEKfSwgewogIHg6IC00LAogIHk6IDAKfSwgewogIHg6IC0zLAogIHk6IDAKfSwgewogIHg6IC0yLAogIHk6IDAKfSwgewogIHg6IC0xLAogIHk6IDAKfV0sIFt7CiAgeDogLTEsCiAgeTogLTIKfSwgewogIHg6IDAsCiAgeTogLTIKfSwgewogIHg6IDEsCiAgeTogLTIKfSwgewogIHg6IDIsCiAgeTogLTIKfSwgewogIHg6IC0yLAogIHk6IC0xCn0sIHsKICB4OiAtMSwKICB5OiAtMQp9LCB7CiAgeDogMCwKICB5OiAtMQp9LCB7CiAgeDogMSwKICB5OiAtMQp9LCB7CiAgeDogMiwKICB5OiAtMQp9LCB7CiAgeDogLTMsCiAgeTogMAp9LCB7CiAgeDogLTIsCiAgeTogMAp9LCB7CiAgeDogLTEsCiAgeTogMAp9XSwgW3sKICB4OiAtMSwKICB5OiAtMgp9LCB7CiAgeDogMCwKICB5OiAtMgp9LCB7CiAgeDogMSwKICB5OiAtMgp9LCB7CiAgeDogLTIsCiAgeTogLTEKfSwgewogIHg6IC0xLAogIHk6IC0xCn0sIHsKICB4OiAwLAogIHk6IC0xCn0sIHsKICB4OiAxLAogIHk6IC0xCn0sIHsKICB4OiAtMiwKICB5OiAwCn0sIHsKICB4OiAtMSwKICB5OiAwCn1dLCBbewogIHg6IC0zLAogIHk6IC0xCn0sIHsKICB4OiAtMiwKICB5OiAtMQp9LCB7CiAgeDogLTEsCiAgeTogLTEKfSwgewogIHg6IDAsCiAgeTogLTEKfSwgewogIHg6IDEsCiAgeTogLTEKfSwgewogIHg6IC00LAogIHk6IDAKfSwgewogIHg6IC0zLAogIHk6IDAKfSwgewogIHg6IC0yLAogIHk6IDAKfSwgewogIHg6IC0xLAogIHk6IDAKfV1dOwpjb25zdCBSZWZpbmVtZW50VGVtcGxhdGVzID0gW3sKICBjb2Rpbmc6IFt7CiAgICB4OiAwLAogICAgeTogLTEKICB9LCB7CiAgICB4OiAxLAogICAgeTogLTEKICB9LCB7CiAgICB4OiAtMSwKICAgIHk6IDAKICB9XSwKICByZWZlcmVuY2U6IFt7CiAgICB4OiAwLAogICAgeTogLTEKICB9LCB7CiAgICB4OiAxLAogICAgeTogLTEKICB9LCB7CiAgICB4OiAtMSwKICAgIHk6IDAKICB9LCB7CiAgICB4OiAwLAogICAgeTogMAogIH0sIHsKICAgIHg6IDEsCiAgICB5OiAwCiAgfSwgewogICAgeDogLTEsCiAgICB5OiAxCiAgfSwgewogICAgeDogMCwKICAgIHk6IDEKICB9LCB7CiAgICB4OiAxLAogICAgeTogMQogIH1dCn0sIHsKICBjb2Rpbmc6IFt7CiAgICB4OiAtMSwKICAgIHk6IC0xCiAgfSwgewogICAgeDogMCwKICAgIHk6IC0xCiAgfSwgewogICAgeDogMSwKICAgIHk6IC0xCiAgfSwgewogICAgeDogLTEsCiAgICB5OiAwCiAgfV0sCiAgcmVmZXJlbmNlOiBbewogICAgeDogMCwKICAgIHk6IC0xCiAgfSwgewogICAgeDogLTEsCiAgICB5OiAwCiAgfSwgewogICAgeDogMCwKICAgIHk6IDAKICB9LCB7CiAgICB4OiAxLAogICAgeTogMAogIH0sIHsKICAgIHg6IDAsCiAgICB5OiAxCiAgfSwgewogICAgeDogMSwKICAgIHk6IDEKICB9XQp9XTsKY29uc3QgUmV1c2VkQ29udGV4dHMgPSBbMHg5YjI1LCAweDA3OTUsIDB4MDBlNSwgMHgwMTk1XTsKY29uc3QgUmVmaW5lbWVudFJldXNlZENvbnRleHRzID0gWzB4MDAyMCwgMHgwMDA4XTsKZnVuY3Rpb24gZGVjb2RlQml0bWFwVGVtcGxhdGUwKHdpZHRoLCBoZWlnaHQsIGRlY29kaW5nQ29udGV4dCkgewogIGNvbnN0IGRlY29kZXIgPSBkZWNvZGluZ0NvbnRleHQuZGVjb2RlcjsKICBjb25zdCBjb250ZXh0cyA9IGRlY29kaW5nQ29udGV4dC5jb250ZXh0Q2FjaGUuZ2V0Q29udGV4dHMoIkdCIik7CiAgY29uc3QgYml0bWFwID0gW107CiAgbGV0IGNvbnRleHRMYWJlbCwgaSwgaiwgcGl4ZWwsIHJvdywgcm93MSwgcm93MjsKICBjb25zdCBPTERfUElYRUxfTUFTSyA9IDB4N2JmNzsKICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsKICAgIHJvdyA9IGJpdG1hcFtpXSA9IG5ldyBVaW50OEFycmF5KHdpZHRoKTsKICAgIHJvdzEgPSBpIDwgMSA/IHJvdyA6IGJpdG1hcFtpIC0gMV07CiAgICByb3cyID0gaSA8IDIgPyByb3cgOiBiaXRtYXBbaSAtIDJdOwogICAgY29udGV4dExhYmVsID0gcm93MlswXSA8PCAxMyB8IHJvdzJbMV0gPDwgMTIgfCByb3cyWzJdIDw8IDExIHwgcm93MVswXSA8PCA3IHwgcm93MVsxXSA8PCA2IHwgcm93MVsyXSA8PCA1IHwgcm93MVszXSA8PCA0OwogICAgZm9yIChqID0gMDsgaiA8IHdpZHRoOyBqKyspIHsKICAgICAgcm93W2pdID0gcGl4ZWwgPSBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIGNvbnRleHRMYWJlbCk7CiAgICAgIGNvbnRleHRMYWJlbCA9IChjb250ZXh0TGFiZWwgJiBPTERfUElYRUxfTUFTSykgPDwgMSB8IChqICsgMyA8IHdpZHRoID8gcm93MltqICsgM10gPDwgMTEgOiAwKSB8IChqICsgNCA8IHdpZHRoID8gcm93MVtqICsgNF0gPDwgNCA6IDApIHwgcGl4ZWw7CiAgICB9CiAgfQogIHJldHVybiBiaXRtYXA7Cn0KZnVuY3Rpb24gZGVjb2RlQml0bWFwKG1tciwgd2lkdGgsIGhlaWdodCwgdGVtcGxhdGVJbmRleCwgcHJlZGljdGlvbiwgc2tpcCwgYXQsIGRlY29kaW5nQ29udGV4dCkgewogIGlmIChtbXIpIHsKICAgIGNvbnN0IGlucHV0ID0gbmV3IFJlYWRlcihkZWNvZGluZ0NvbnRleHQuZGF0YSwgZGVjb2RpbmdDb250ZXh0LnN0YXJ0LCBkZWNvZGluZ0NvbnRleHQuZW5kKTsKICAgIHJldHVybiBkZWNvZGVNTVJCaXRtYXAoaW5wdXQsIHdpZHRoLCBoZWlnaHQsIGZhbHNlKTsKICB9CiAgaWYgKHRlbXBsYXRlSW5kZXggPT09IDAgJiYgIXNraXAgJiYgIXByZWRpY3Rpb24gJiYgYXQubGVuZ3RoID09PSA0ICYmIGF0WzBdLnggPT09IDMgJiYgYXRbMF0ueSA9PT0gLTEgJiYgYXRbMV0ueCA9PT0gLTMgJiYgYXRbMV0ueSA9PT0gLTEgJiYgYXRbMl0ueCA9PT0gMiAmJiBhdFsyXS55ID09PSAtMiAmJiBhdFszXS54ID09PSAtMiAmJiBhdFszXS55ID09PSAtMikgewogICAgcmV0dXJuIGRlY29kZUJpdG1hcFRlbXBsYXRlMCh3aWR0aCwgaGVpZ2h0LCBkZWNvZGluZ0NvbnRleHQpOwogIH0KICBjb25zdCB1c2Vza2lwID0gISFza2lwOwogIGNvbnN0IHRlbXBsYXRlID0gQ29kaW5nVGVtcGxhdGVzW3RlbXBsYXRlSW5kZXhdLmNvbmNhdChhdCk7CiAgdGVtcGxhdGUuc29ydCgoYSwgYikgPT4gYS55IC0gYi55IHx8IGEueCAtIGIueCk7CiAgY29uc3QgdGVtcGxhdGVMZW5ndGggPSB0ZW1wbGF0ZS5sZW5ndGg7CiAgY29uc3QgdGVtcGxhdGVYID0gbmV3IEludDhBcnJheSh0ZW1wbGF0ZUxlbmd0aCk7CiAgY29uc3QgdGVtcGxhdGVZID0gbmV3IEludDhBcnJheSh0ZW1wbGF0ZUxlbmd0aCk7CiAgY29uc3QgY2hhbmdpbmdUZW1wbGF0ZUVudHJpZXMgPSBbXTsKICBsZXQgcmV1c2VNYXNrID0gMCwKICAgIG1pblggPSAwLAogICAgbWF4WCA9IDAsCiAgICBtaW5ZID0gMDsKICBsZXQgYywgazsKICBmb3IgKGsgPSAwOyBrIDwgdGVtcGxhdGVMZW5ndGg7IGsrKykgewogICAgdGVtcGxhdGVYW2tdID0gdGVtcGxhdGVba10ueDsKICAgIHRlbXBsYXRlWVtrXSA9IHRlbXBsYXRlW2tdLnk7CiAgICBtaW5YID0gTWF0aC5taW4obWluWCwgdGVtcGxhdGVba10ueCk7CiAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgdGVtcGxhdGVba10ueCk7CiAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgdGVtcGxhdGVba10ueSk7CiAgICBpZiAoayA8IHRlbXBsYXRlTGVuZ3RoIC0gMSAmJiB0ZW1wbGF0ZVtrXS55ID09PSB0ZW1wbGF0ZVtrICsgMV0ueSAmJiB0ZW1wbGF0ZVtrXS54ID09PSB0ZW1wbGF0ZVtrICsgMV0ueCAtIDEpIHsKICAgICAgcmV1c2VNYXNrIHw9IDEgPDwgdGVtcGxhdGVMZW5ndGggLSAxIC0gazsKICAgIH0gZWxzZSB7CiAgICAgIGNoYW5naW5nVGVtcGxhdGVFbnRyaWVzLnB1c2goayk7CiAgICB9CiAgfQogIGNvbnN0IGNoYW5naW5nRW50cmllc0xlbmd0aCA9IGNoYW5naW5nVGVtcGxhdGVFbnRyaWVzLmxlbmd0aDsKICBjb25zdCBjaGFuZ2luZ1RlbXBsYXRlWCA9IG5ldyBJbnQ4QXJyYXkoY2hhbmdpbmdFbnRyaWVzTGVuZ3RoKTsKICBjb25zdCBjaGFuZ2luZ1RlbXBsYXRlWSA9IG5ldyBJbnQ4QXJyYXkoY2hhbmdpbmdFbnRyaWVzTGVuZ3RoKTsKICBjb25zdCBjaGFuZ2luZ1RlbXBsYXRlQml0ID0gbmV3IFVpbnQxNkFycmF5KGNoYW5naW5nRW50cmllc0xlbmd0aCk7CiAgZm9yIChjID0gMDsgYyA8IGNoYW5naW5nRW50cmllc0xlbmd0aDsgYysrKSB7CiAgICBrID0gY2hhbmdpbmdUZW1wbGF0ZUVudHJpZXNbY107CiAgICBjaGFuZ2luZ1RlbXBsYXRlWFtjXSA9IHRlbXBsYXRlW2tdLng7CiAgICBjaGFuZ2luZ1RlbXBsYXRlWVtjXSA9IHRlbXBsYXRlW2tdLnk7CiAgICBjaGFuZ2luZ1RlbXBsYXRlQml0W2NdID0gMSA8PCB0ZW1wbGF0ZUxlbmd0aCAtIDEgLSBrOwogIH0KICBjb25zdCBzYmJfbGVmdCA9IC1taW5YOwogIGNvbnN0IHNiYl90b3AgPSAtbWluWTsKICBjb25zdCBzYmJfcmlnaHQgPSB3aWR0aCAtIG1heFg7CiAgY29uc3QgcHNldWRvUGl4ZWxDb250ZXh0ID0gUmV1c2VkQ29udGV4dHNbdGVtcGxhdGVJbmRleF07CiAgbGV0IHJvdyA9IG5ldyBVaW50OEFycmF5KHdpZHRoKTsKICBjb25zdCBiaXRtYXAgPSBbXTsKICBjb25zdCBkZWNvZGVyID0gZGVjb2RpbmdDb250ZXh0LmRlY29kZXI7CiAgY29uc3QgY29udGV4dHMgPSBkZWNvZGluZ0NvbnRleHQuY29udGV4dENhY2hlLmdldENvbnRleHRzKCJHQiIpOwogIGxldCBsdHAgPSAwLAogICAgaiwKICAgIGkwLAogICAgajAsCiAgICBjb250ZXh0TGFiZWwgPSAwLAogICAgYml0LAogICAgc2hpZnQ7CiAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgewogICAgaWYgKHByZWRpY3Rpb24pIHsKICAgICAgY29uc3Qgc2x0cCA9IGRlY29kZXIucmVhZEJpdChjb250ZXh0cywgcHNldWRvUGl4ZWxDb250ZXh0KTsKICAgICAgbHRwIF49IHNsdHA7CiAgICAgIGlmIChsdHApIHsKICAgICAgICBiaXRtYXAucHVzaChyb3cpOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICB9CiAgICByb3cgPSBuZXcgVWludDhBcnJheShyb3cpOwogICAgYml0bWFwLnB1c2gocm93KTsKICAgIGZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7CiAgICAgIGlmICh1c2Vza2lwICYmIHNraXBbaV1bal0pIHsKICAgICAgICByb3dbal0gPSAwOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmIChqID49IHNiYl9sZWZ0ICYmIGogPCBzYmJfcmlnaHQgJiYgaSA+PSBzYmJfdG9wKSB7CiAgICAgICAgY29udGV4dExhYmVsID0gY29udGV4dExhYmVsIDw8IDEgJiByZXVzZU1hc2s7CiAgICAgICAgZm9yIChrID0gMDsgayA8IGNoYW5naW5nRW50cmllc0xlbmd0aDsgaysrKSB7CiAgICAgICAgICBpMCA9IGkgKyBjaGFuZ2luZ1RlbXBsYXRlWVtrXTsKICAgICAgICAgIGowID0gaiArIGNoYW5naW5nVGVtcGxhdGVYW2tdOwogICAgICAgICAgYml0ID0gYml0bWFwW2kwXVtqMF07CiAgICAgICAgICBpZiAoYml0KSB7CiAgICAgICAgICAgIGJpdCA9IGNoYW5naW5nVGVtcGxhdGVCaXRba107CiAgICAgICAgICAgIGNvbnRleHRMYWJlbCB8PSBiaXQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGNvbnRleHRMYWJlbCA9IDA7CiAgICAgICAgc2hpZnQgPSB0ZW1wbGF0ZUxlbmd0aCAtIDE7CiAgICAgICAgZm9yIChrID0gMDsgayA8IHRlbXBsYXRlTGVuZ3RoOyBrKyssIHNoaWZ0LS0pIHsKICAgICAgICAgIGowID0gaiArIHRlbXBsYXRlWFtrXTsKICAgICAgICAgIGlmIChqMCA+PSAwICYmIGowIDwgd2lkdGgpIHsKICAgICAgICAgICAgaTAgPSBpICsgdGVtcGxhdGVZW2tdOwogICAgICAgICAgICBpZiAoaTAgPj0gMCkgewogICAgICAgICAgICAgIGJpdCA9IGJpdG1hcFtpMF1bajBdOwogICAgICAgICAgICAgIGlmIChiaXQpIHsKICAgICAgICAgICAgICAgIGNvbnRleHRMYWJlbCB8PSBiaXQgPDwgc2hpZnQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvbnN0IHBpeGVsID0gZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBjb250ZXh0TGFiZWwpOwogICAgICByb3dbal0gPSBwaXhlbDsKICAgIH0KICB9CiAgcmV0dXJuIGJpdG1hcDsKfQpmdW5jdGlvbiBkZWNvZGVSZWZpbmVtZW50KHdpZHRoLCBoZWlnaHQsIHRlbXBsYXRlSW5kZXgsIHJlZmVyZW5jZUJpdG1hcCwgb2Zmc2V0WCwgb2Zmc2V0WSwgcHJlZGljdGlvbiwgYXQsIGRlY29kaW5nQ29udGV4dCkgewogIGxldCBjb2RpbmdUZW1wbGF0ZSA9IFJlZmluZW1lbnRUZW1wbGF0ZXNbdGVtcGxhdGVJbmRleF0uY29kaW5nOwogIGlmICh0ZW1wbGF0ZUluZGV4ID09PSAwKSB7CiAgICBjb2RpbmdUZW1wbGF0ZSA9IGNvZGluZ1RlbXBsYXRlLmNvbmNhdChbYXRbMF1dKTsKICB9CiAgY29uc3QgY29kaW5nVGVtcGxhdGVMZW5ndGggPSBjb2RpbmdUZW1wbGF0ZS5sZW5ndGg7CiAgY29uc3QgY29kaW5nVGVtcGxhdGVYID0gbmV3IEludDMyQXJyYXkoY29kaW5nVGVtcGxhdGVMZW5ndGgpOwogIGNvbnN0IGNvZGluZ1RlbXBsYXRlWSA9IG5ldyBJbnQzMkFycmF5KGNvZGluZ1RlbXBsYXRlTGVuZ3RoKTsKICBsZXQgazsKICBmb3IgKGsgPSAwOyBrIDwgY29kaW5nVGVtcGxhdGVMZW5ndGg7IGsrKykgewogICAgY29kaW5nVGVtcGxhdGVYW2tdID0gY29kaW5nVGVtcGxhdGVba10ueDsKICAgIGNvZGluZ1RlbXBsYXRlWVtrXSA9IGNvZGluZ1RlbXBsYXRlW2tdLnk7CiAgfQogIGxldCByZWZlcmVuY2VUZW1wbGF0ZSA9IFJlZmluZW1lbnRUZW1wbGF0ZXNbdGVtcGxhdGVJbmRleF0ucmVmZXJlbmNlOwogIGlmICh0ZW1wbGF0ZUluZGV4ID09PSAwKSB7CiAgICByZWZlcmVuY2VUZW1wbGF0ZSA9IHJlZmVyZW5jZVRlbXBsYXRlLmNvbmNhdChbYXRbMV1dKTsKICB9CiAgY29uc3QgcmVmZXJlbmNlVGVtcGxhdGVMZW5ndGggPSByZWZlcmVuY2VUZW1wbGF0ZS5sZW5ndGg7CiAgY29uc3QgcmVmZXJlbmNlVGVtcGxhdGVYID0gbmV3IEludDMyQXJyYXkocmVmZXJlbmNlVGVtcGxhdGVMZW5ndGgpOwogIGNvbnN0IHJlZmVyZW5jZVRlbXBsYXRlWSA9IG5ldyBJbnQzMkFycmF5KHJlZmVyZW5jZVRlbXBsYXRlTGVuZ3RoKTsKICBmb3IgKGsgPSAwOyBrIDwgcmVmZXJlbmNlVGVtcGxhdGVMZW5ndGg7IGsrKykgewogICAgcmVmZXJlbmNlVGVtcGxhdGVYW2tdID0gcmVmZXJlbmNlVGVtcGxhdGVba10ueDsKICAgIHJlZmVyZW5jZVRlbXBsYXRlWVtrXSA9IHJlZmVyZW5jZVRlbXBsYXRlW2tdLnk7CiAgfQogIGNvbnN0IHJlZmVyZW5jZVdpZHRoID0gcmVmZXJlbmNlQml0bWFwWzBdLmxlbmd0aDsKICBjb25zdCByZWZlcmVuY2VIZWlnaHQgPSByZWZlcmVuY2VCaXRtYXAubGVuZ3RoOwogIGNvbnN0IHBzZXVkb1BpeGVsQ29udGV4dCA9IFJlZmluZW1lbnRSZXVzZWRDb250ZXh0c1t0ZW1wbGF0ZUluZGV4XTsKICBjb25zdCBiaXRtYXAgPSBbXTsKICBjb25zdCBkZWNvZGVyID0gZGVjb2RpbmdDb250ZXh0LmRlY29kZXI7CiAgY29uc3QgY29udGV4dHMgPSBkZWNvZGluZ0NvbnRleHQuY29udGV4dENhY2hlLmdldENvbnRleHRzKCJHUiIpOwogIGxldCBsdHAgPSAwOwogIGZvciAobGV0IGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsKICAgIGlmIChwcmVkaWN0aW9uKSB7CiAgICAgIGNvbnN0IHNsdHAgPSBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIHBzZXVkb1BpeGVsQ29udGV4dCk7CiAgICAgIGx0cCBePSBzbHRwOwogICAgICBpZiAobHRwKSB7CiAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoInByZWRpY3Rpb24gaXMgbm90IHN1cHBvcnRlZCIpOwogICAgICB9CiAgICB9CiAgICBjb25zdCByb3cgPSBuZXcgVWludDhBcnJheSh3aWR0aCk7CiAgICBiaXRtYXAucHVzaChyb3cpOwogICAgZm9yIChsZXQgaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7CiAgICAgIGxldCBpMCwgajA7CiAgICAgIGxldCBjb250ZXh0TGFiZWwgPSAwOwogICAgICBmb3IgKGsgPSAwOyBrIDwgY29kaW5nVGVtcGxhdGVMZW5ndGg7IGsrKykgewogICAgICAgIGkwID0gaSArIGNvZGluZ1RlbXBsYXRlWVtrXTsKICAgICAgICBqMCA9IGogKyBjb2RpbmdUZW1wbGF0ZVhba107CiAgICAgICAgaWYgKGkwIDwgMCB8fCBqMCA8IDAgfHwgajAgPj0gd2lkdGgpIHsKICAgICAgICAgIGNvbnRleHRMYWJlbCA8PD0gMTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29udGV4dExhYmVsID0gY29udGV4dExhYmVsIDw8IDEgfCBiaXRtYXBbaTBdW2owXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZm9yIChrID0gMDsgayA8IHJlZmVyZW5jZVRlbXBsYXRlTGVuZ3RoOyBrKyspIHsKICAgICAgICBpMCA9IGkgKyByZWZlcmVuY2VUZW1wbGF0ZVlba10gLSBvZmZzZXRZOwogICAgICAgIGowID0gaiArIHJlZmVyZW5jZVRlbXBsYXRlWFtrXSAtIG9mZnNldFg7CiAgICAgICAgaWYgKGkwIDwgMCB8fCBpMCA+PSByZWZlcmVuY2VIZWlnaHQgfHwgajAgPCAwIHx8IGowID49IHJlZmVyZW5jZVdpZHRoKSB7CiAgICAgICAgICBjb250ZXh0TGFiZWwgPDw9IDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnRleHRMYWJlbCA9IGNvbnRleHRMYWJlbCA8PCAxIHwgcmVmZXJlbmNlQml0bWFwW2kwXVtqMF07CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvbnN0IHBpeGVsID0gZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBjb250ZXh0TGFiZWwpOwogICAgICByb3dbal0gPSBwaXhlbDsKICAgIH0KICB9CiAgcmV0dXJuIGJpdG1hcDsKfQpmdW5jdGlvbiBkZWNvZGVTeW1ib2xEaWN0aW9uYXJ5KGh1ZmZtYW4sIHJlZmluZW1lbnQsIHN5bWJvbHMsIG51bWJlck9mTmV3U3ltYm9scywgbnVtYmVyT2ZFeHBvcnRlZFN5bWJvbHMsIGh1ZmZtYW5UYWJsZXMsIHRlbXBsYXRlSW5kZXgsIGF0LCByZWZpbmVtZW50VGVtcGxhdGVJbmRleCwgcmVmaW5lbWVudEF0LCBkZWNvZGluZ0NvbnRleHQsIGh1ZmZtYW5JbnB1dCkgewogIGlmIChodWZmbWFuICYmIHJlZmluZW1lbnQpIHsKICAgIHRocm93IG5ldyBKYmlnMkVycm9yKCJzeW1ib2wgcmVmaW5lbWVudCB3aXRoIEh1ZmZtYW4gaXMgbm90IHN1cHBvcnRlZCIpOwogIH0KICBjb25zdCBuZXdTeW1ib2xzID0gW107CiAgbGV0IGN1cnJlbnRIZWlnaHQgPSAwOwogIGxldCBzeW1ib2xDb2RlTGVuZ3RoID0gbG9nMihzeW1ib2xzLmxlbmd0aCArIG51bWJlck9mTmV3U3ltYm9scyk7CiAgY29uc3QgZGVjb2RlciA9IGRlY29kaW5nQ29udGV4dC5kZWNvZGVyOwogIGNvbnN0IGNvbnRleHRDYWNoZSA9IGRlY29kaW5nQ29udGV4dC5jb250ZXh0Q2FjaGU7CiAgbGV0IHRhYmxlQjEsIHN5bWJvbFdpZHRoczsKICBpZiAoaHVmZm1hbikgewogICAgdGFibGVCMSA9IGdldFN0YW5kYXJkVGFibGUoMSk7CiAgICBzeW1ib2xXaWR0aHMgPSBbXTsKICAgIHN5bWJvbENvZGVMZW5ndGggPSBNYXRoLm1heChzeW1ib2xDb2RlTGVuZ3RoLCAxKTsKICB9CiAgd2hpbGUgKG5ld1N5bWJvbHMubGVuZ3RoIDwgbnVtYmVyT2ZOZXdTeW1ib2xzKSB7CiAgICBjb25zdCBkZWx0YUhlaWdodCA9IGh1ZmZtYW4gPyBodWZmbWFuVGFibGVzLnRhYmxlRGVsdGFIZWlnaHQuZGVjb2RlKGh1ZmZtYW5JbnB1dCkgOiBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgIklBREgiLCBkZWNvZGVyKTsKICAgIGN1cnJlbnRIZWlnaHQgKz0gZGVsdGFIZWlnaHQ7CiAgICBsZXQgY3VycmVudFdpZHRoID0gMCwKICAgICAgdG90YWxXaWR0aCA9IDA7CiAgICBjb25zdCBmaXJzdFN5bWJvbCA9IGh1ZmZtYW4gPyBzeW1ib2xXaWR0aHMubGVuZ3RoIDogMDsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIGNvbnN0IGRlbHRhV2lkdGggPSBodWZmbWFuID8gaHVmZm1hblRhYmxlcy50YWJsZURlbHRhV2lkdGguZGVjb2RlKGh1ZmZtYW5JbnB1dCkgOiBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgIklBRFciLCBkZWNvZGVyKTsKICAgICAgaWYgKGRlbHRhV2lkdGggPT09IG51bGwpIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjdXJyZW50V2lkdGggKz0gZGVsdGFXaWR0aDsKICAgICAgdG90YWxXaWR0aCArPSBjdXJyZW50V2lkdGg7CiAgICAgIGxldCBiaXRtYXA7CiAgICAgIGlmIChyZWZpbmVtZW50KSB7CiAgICAgICAgY29uc3QgbnVtYmVyT2ZJbnN0YW5jZXMgPSBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgIklBQUkiLCBkZWNvZGVyKTsKICAgICAgICBpZiAobnVtYmVyT2ZJbnN0YW5jZXMgPiAxKSB7CiAgICAgICAgICBiaXRtYXAgPSBkZWNvZGVUZXh0UmVnaW9uKGh1ZmZtYW4sIHJlZmluZW1lbnQsIGN1cnJlbnRXaWR0aCwgY3VycmVudEhlaWdodCwgMCwgbnVtYmVyT2ZJbnN0YW5jZXMsIDEsIHN5bWJvbHMuY29uY2F0KG5ld1N5bWJvbHMpLCBzeW1ib2xDb2RlTGVuZ3RoLCAwLCAwLCAxLCAwLCBodWZmbWFuVGFibGVzLCByZWZpbmVtZW50VGVtcGxhdGVJbmRleCwgcmVmaW5lbWVudEF0LCBkZWNvZGluZ0NvbnRleHQsIDAsIGh1ZmZtYW5JbnB1dCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IHN5bWJvbElkID0gZGVjb2RlSUFJRChjb250ZXh0Q2FjaGUsIGRlY29kZXIsIHN5bWJvbENvZGVMZW5ndGgpOwogICAgICAgICAgY29uc3QgcmR4ID0gZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsICJJQVJEWCIsIGRlY29kZXIpOwogICAgICAgICAgY29uc3QgcmR5ID0gZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsICJJQVJEWSIsIGRlY29kZXIpOwogICAgICAgICAgY29uc3Qgc3ltYm9sID0gc3ltYm9sSWQgPCBzeW1ib2xzLmxlbmd0aCA/IHN5bWJvbHNbc3ltYm9sSWRdIDogbmV3U3ltYm9sc1tzeW1ib2xJZCAtIHN5bWJvbHMubGVuZ3RoXTsKICAgICAgICAgIGJpdG1hcCA9IGRlY29kZVJlZmluZW1lbnQoY3VycmVudFdpZHRoLCBjdXJyZW50SGVpZ2h0LCByZWZpbmVtZW50VGVtcGxhdGVJbmRleCwgc3ltYm9sLCByZHgsIHJkeSwgZmFsc2UsIHJlZmluZW1lbnRBdCwgZGVjb2RpbmdDb250ZXh0KTsKICAgICAgICB9CiAgICAgICAgbmV3U3ltYm9scy5wdXNoKGJpdG1hcCk7CiAgICAgIH0gZWxzZSBpZiAoaHVmZm1hbikgewogICAgICAgIHN5bWJvbFdpZHRocy5wdXNoKGN1cnJlbnRXaWR0aCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYml0bWFwID0gZGVjb2RlQml0bWFwKGZhbHNlLCBjdXJyZW50V2lkdGgsIGN1cnJlbnRIZWlnaHQsIHRlbXBsYXRlSW5kZXgsIGZhbHNlLCBudWxsLCBhdCwgZGVjb2RpbmdDb250ZXh0KTsKICAgICAgICBuZXdTeW1ib2xzLnB1c2goYml0bWFwKTsKICAgICAgfQogICAgfQogICAgaWYgKGh1ZmZtYW4gJiYgIXJlZmluZW1lbnQpIHsKICAgICAgY29uc3QgYml0bWFwU2l6ZSA9IGh1ZmZtYW5UYWJsZXMudGFibGVCaXRtYXBTaXplLmRlY29kZShodWZmbWFuSW5wdXQpOwogICAgICBodWZmbWFuSW5wdXQuYnl0ZUFsaWduKCk7CiAgICAgIGxldCBjb2xsZWN0aXZlQml0bWFwOwogICAgICBpZiAoYml0bWFwU2l6ZSA9PT0gMCkgewogICAgICAgIGNvbGxlY3RpdmVCaXRtYXAgPSByZWFkVW5jb21wcmVzc2VkQml0bWFwKGh1ZmZtYW5JbnB1dCwgdG90YWxXaWR0aCwgY3VycmVudEhlaWdodCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29uc3Qgb3JpZ2luYWxFbmQgPSBodWZmbWFuSW5wdXQuZW5kOwogICAgICAgIGNvbnN0IGJpdG1hcEVuZCA9IGh1ZmZtYW5JbnB1dC5wb3NpdGlvbiArIGJpdG1hcFNpemU7CiAgICAgICAgaHVmZm1hbklucHV0LmVuZCA9IGJpdG1hcEVuZDsKICAgICAgICBjb2xsZWN0aXZlQml0bWFwID0gZGVjb2RlTU1SQml0bWFwKGh1ZmZtYW5JbnB1dCwgdG90YWxXaWR0aCwgY3VycmVudEhlaWdodCwgZmFsc2UpOwogICAgICAgIGh1ZmZtYW5JbnB1dC5lbmQgPSBvcmlnaW5hbEVuZDsKICAgICAgICBodWZmbWFuSW5wdXQucG9zaXRpb24gPSBiaXRtYXBFbmQ7CiAgICAgIH0KICAgICAgY29uc3QgbnVtYmVyT2ZTeW1ib2xzRGVjb2RlZCA9IHN5bWJvbFdpZHRocy5sZW5ndGg7CiAgICAgIGlmIChmaXJzdFN5bWJvbCA9PT0gbnVtYmVyT2ZTeW1ib2xzRGVjb2RlZCAtIDEpIHsKICAgICAgICBuZXdTeW1ib2xzLnB1c2goY29sbGVjdGl2ZUJpdG1hcCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbGV0IGksCiAgICAgICAgICB5LAogICAgICAgICAgeE1pbiA9IDAsCiAgICAgICAgICB4TWF4LAogICAgICAgICAgYml0bWFwV2lkdGgsCiAgICAgICAgICBzeW1ib2xCaXRtYXA7CiAgICAgICAgZm9yIChpID0gZmlyc3RTeW1ib2w7IGkgPCBudW1iZXJPZlN5bWJvbHNEZWNvZGVkOyBpKyspIHsKICAgICAgICAgIGJpdG1hcFdpZHRoID0gc3ltYm9sV2lkdGhzW2ldOwogICAgICAgICAgeE1heCA9IHhNaW4gKyBiaXRtYXBXaWR0aDsKICAgICAgICAgIHN5bWJvbEJpdG1hcCA9IFtdOwogICAgICAgICAgZm9yICh5ID0gMDsgeSA8IGN1cnJlbnRIZWlnaHQ7IHkrKykgewogICAgICAgICAgICBzeW1ib2xCaXRtYXAucHVzaChjb2xsZWN0aXZlQml0bWFwW3ldLnN1YmFycmF5KHhNaW4sIHhNYXgpKTsKICAgICAgICAgIH0KICAgICAgICAgIG5ld1N5bWJvbHMucHVzaChzeW1ib2xCaXRtYXApOwogICAgICAgICAgeE1pbiA9IHhNYXg7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIGNvbnN0IGV4cG9ydGVkU3ltYm9scyA9IFtdLAogICAgZmxhZ3MgPSBbXTsKICBsZXQgY3VycmVudEZsYWcgPSBmYWxzZSwKICAgIGksCiAgICBpaTsKICBjb25zdCB0b3RhbFN5bWJvbHNMZW5ndGggPSBzeW1ib2xzLmxlbmd0aCArIG51bWJlck9mTmV3U3ltYm9sczsKICB3aGlsZSAoZmxhZ3MubGVuZ3RoIDwgdG90YWxTeW1ib2xzTGVuZ3RoKSB7CiAgICBsZXQgcnVuTGVuZ3RoID0gaHVmZm1hbiA/IHRhYmxlQjEuZGVjb2RlKGh1ZmZtYW5JbnB1dCkgOiBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgIklBRVgiLCBkZWNvZGVyKTsKICAgIHdoaWxlIChydW5MZW5ndGgtLSkgewogICAgICBmbGFncy5wdXNoKGN1cnJlbnRGbGFnKTsKICAgIH0KICAgIGN1cnJlbnRGbGFnID0gIWN1cnJlbnRGbGFnOwogIH0KICBmb3IgKGkgPSAwLCBpaSA9IHN5bWJvbHMubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgaWYgKGZsYWdzW2ldKSB7CiAgICAgIGV4cG9ydGVkU3ltYm9scy5wdXNoKHN5bWJvbHNbaV0pOwogICAgfQogIH0KICBmb3IgKGxldCBqID0gMDsgaiA8IG51bWJlck9mTmV3U3ltYm9sczsgaSsrLCBqKyspIHsKICAgIGlmIChmbGFnc1tpXSkgewogICAgICBleHBvcnRlZFN5bWJvbHMucHVzaChuZXdTeW1ib2xzW2pdKTsKICAgIH0KICB9CiAgcmV0dXJuIGV4cG9ydGVkU3ltYm9sczsKfQpmdW5jdGlvbiBkZWNvZGVUZXh0UmVnaW9uKGh1ZmZtYW4sIHJlZmluZW1lbnQsIHdpZHRoLCBoZWlnaHQsIGRlZmF1bHRQaXhlbFZhbHVlLCBudW1iZXJPZlN5bWJvbEluc3RhbmNlcywgc3RyaXBTaXplLCBpbnB1dFN5bWJvbHMsIHN5bWJvbENvZGVMZW5ndGgsIHRyYW5zcG9zZWQsIGRzT2Zmc2V0LCByZWZlcmVuY2VDb3JuZXIsIGNvbWJpbmF0aW9uT3BlcmF0b3IsIGh1ZmZtYW5UYWJsZXMsIHJlZmluZW1lbnRUZW1wbGF0ZUluZGV4LCByZWZpbmVtZW50QXQsIGRlY29kaW5nQ29udGV4dCwgbG9nU3RyaXBTaXplLCBodWZmbWFuSW5wdXQpIHsKICBpZiAoaHVmZm1hbiAmJiByZWZpbmVtZW50KSB7CiAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcigicmVmaW5lbWVudCB3aXRoIEh1ZmZtYW4gaXMgbm90IHN1cHBvcnRlZCIpOwogIH0KICBjb25zdCBiaXRtYXAgPSBbXTsKICBsZXQgaSwgcm93OwogIGZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgewogICAgcm93ID0gbmV3IFVpbnQ4QXJyYXkod2lkdGgpOwogICAgaWYgKGRlZmF1bHRQaXhlbFZhbHVlKSB7CiAgICAgIHJvdy5maWxsKGRlZmF1bHRQaXhlbFZhbHVlKTsKICAgIH0KICAgIGJpdG1hcC5wdXNoKHJvdyk7CiAgfQogIGNvbnN0IGRlY29kZXIgPSBkZWNvZGluZ0NvbnRleHQuZGVjb2RlcjsKICBjb25zdCBjb250ZXh0Q2FjaGUgPSBkZWNvZGluZ0NvbnRleHQuY29udGV4dENhY2hlOwogIGxldCBzdHJpcFQgPSBodWZmbWFuID8gLWh1ZmZtYW5UYWJsZXMudGFibGVEZWx0YVQuZGVjb2RlKGh1ZmZtYW5JbnB1dCkgOiAtZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsICJJQURUIiwgZGVjb2Rlcik7CiAgbGV0IGZpcnN0UyA9IDA7CiAgaSA9IDA7CiAgd2hpbGUgKGkgPCBudW1iZXJPZlN5bWJvbEluc3RhbmNlcykgewogICAgY29uc3QgZGVsdGFUID0gaHVmZm1hbiA/IGh1ZmZtYW5UYWJsZXMudGFibGVEZWx0YVQuZGVjb2RlKGh1ZmZtYW5JbnB1dCkgOiBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgIklBRFQiLCBkZWNvZGVyKTsKICAgIHN0cmlwVCArPSBkZWx0YVQ7CiAgICBjb25zdCBkZWx0YUZpcnN0UyA9IGh1ZmZtYW4gPyBodWZmbWFuVGFibGVzLnRhYmxlRmlyc3RTLmRlY29kZShodWZmbWFuSW5wdXQpIDogZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsICJJQUZTIiwgZGVjb2Rlcik7CiAgICBmaXJzdFMgKz0gZGVsdGFGaXJzdFM7CiAgICBsZXQgY3VycmVudFMgPSBmaXJzdFM7CiAgICBkbyB7CiAgICAgIGxldCBjdXJyZW50VCA9IDA7CiAgICAgIGlmIChzdHJpcFNpemUgPiAxKSB7CiAgICAgICAgY3VycmVudFQgPSBodWZmbWFuID8gaHVmZm1hbklucHV0LnJlYWRCaXRzKGxvZ1N0cmlwU2l6ZSkgOiBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgIklBSVQiLCBkZWNvZGVyKTsKICAgICAgfQogICAgICBjb25zdCB0ID0gc3RyaXBTaXplICogc3RyaXBUICsgY3VycmVudFQ7CiAgICAgIGNvbnN0IHN5bWJvbElkID0gaHVmZm1hbiA/IGh1ZmZtYW5UYWJsZXMuc3ltYm9sSURUYWJsZS5kZWNvZGUoaHVmZm1hbklucHV0KSA6IGRlY29kZUlBSUQoY29udGV4dENhY2hlLCBkZWNvZGVyLCBzeW1ib2xDb2RlTGVuZ3RoKTsKICAgICAgY29uc3QgYXBwbHlSZWZpbmVtZW50ID0gcmVmaW5lbWVudCAmJiAoaHVmZm1hbiA/IGh1ZmZtYW5JbnB1dC5yZWFkQml0KCkgOiBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgIklBUkkiLCBkZWNvZGVyKSk7CiAgICAgIGxldCBzeW1ib2xCaXRtYXAgPSBpbnB1dFN5bWJvbHNbc3ltYm9sSWRdOwogICAgICBsZXQgc3ltYm9sV2lkdGggPSBzeW1ib2xCaXRtYXBbMF0ubGVuZ3RoOwogICAgICBsZXQgc3ltYm9sSGVpZ2h0ID0gc3ltYm9sQml0bWFwLmxlbmd0aDsKICAgICAgaWYgKGFwcGx5UmVmaW5lbWVudCkgewogICAgICAgIGNvbnN0IHJkdyA9IGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCAiSUFSRFciLCBkZWNvZGVyKTsKICAgICAgICBjb25zdCByZGggPSBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgIklBUkRIIiwgZGVjb2Rlcik7CiAgICAgICAgY29uc3QgcmR4ID0gZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsICJJQVJEWCIsIGRlY29kZXIpOwogICAgICAgIGNvbnN0IHJkeSA9IGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCAiSUFSRFkiLCBkZWNvZGVyKTsKICAgICAgICBzeW1ib2xXaWR0aCArPSByZHc7CiAgICAgICAgc3ltYm9sSGVpZ2h0ICs9IHJkaDsKICAgICAgICBzeW1ib2xCaXRtYXAgPSBkZWNvZGVSZWZpbmVtZW50KHN5bWJvbFdpZHRoLCBzeW1ib2xIZWlnaHQsIHJlZmluZW1lbnRUZW1wbGF0ZUluZGV4LCBzeW1ib2xCaXRtYXAsIChyZHcgPj4gMSkgKyByZHgsIChyZGggPj4gMSkgKyByZHksIGZhbHNlLCByZWZpbmVtZW50QXQsIGRlY29kaW5nQ29udGV4dCk7CiAgICAgIH0KICAgICAgbGV0IGluY3JlbWVudCA9IDA7CiAgICAgIGlmICghdHJhbnNwb3NlZCkgewogICAgICAgIGlmIChyZWZlcmVuY2VDb3JuZXIgPiAxKSB7CiAgICAgICAgICBjdXJyZW50UyArPSBzeW1ib2xXaWR0aCAtIDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGluY3JlbWVudCA9IHN5bWJvbFdpZHRoIC0gMTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoIShyZWZlcmVuY2VDb3JuZXIgJiAxKSkgewogICAgICAgIGN1cnJlbnRTICs9IHN5bWJvbEhlaWdodCAtIDE7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW5jcmVtZW50ID0gc3ltYm9sSGVpZ2h0IC0gMTsKICAgICAgfQogICAgICBjb25zdCBvZmZzZXRUID0gdCAtIChyZWZlcmVuY2VDb3JuZXIgJiAxID8gMCA6IHN5bWJvbEhlaWdodCAtIDEpOwogICAgICBjb25zdCBvZmZzZXRTID0gY3VycmVudFMgLSAocmVmZXJlbmNlQ29ybmVyICYgMiA/IHN5bWJvbFdpZHRoIC0gMSA6IDApOwogICAgICBsZXQgczIsIHQyLCBzeW1ib2xSb3c7CiAgICAgIGlmICh0cmFuc3Bvc2VkKSB7CiAgICAgICAgZm9yIChzMiA9IDA7IHMyIDwgc3ltYm9sSGVpZ2h0OyBzMisrKSB7CiAgICAgICAgICByb3cgPSBiaXRtYXBbb2Zmc2V0UyArIHMyXTsKICAgICAgICAgIGlmICghcm93KSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgc3ltYm9sUm93ID0gc3ltYm9sQml0bWFwW3MyXTsKICAgICAgICAgIGNvbnN0IG1heFdpZHRoID0gTWF0aC5taW4od2lkdGggLSBvZmZzZXRULCBzeW1ib2xXaWR0aCk7CiAgICAgICAgICBzd2l0Y2ggKGNvbWJpbmF0aW9uT3BlcmF0b3IpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIGZvciAodDIgPSAwOyB0MiA8IG1heFdpZHRoOyB0MisrKSB7CiAgICAgICAgICAgICAgICByb3dbb2Zmc2V0VCArIHQyXSB8PSBzeW1ib2xSb3dbdDJdOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgIGZvciAodDIgPSAwOyB0MiA8IG1heFdpZHRoOyB0MisrKSB7CiAgICAgICAgICAgICAgICByb3dbb2Zmc2V0VCArIHQyXSBePSBzeW1ib2xSb3dbdDJdOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihgb3BlcmF0b3IgJHtjb21iaW5hdGlvbk9wZXJhdG9yfSBpcyBub3Qgc3VwcG9ydGVkYCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGZvciAodDIgPSAwOyB0MiA8IHN5bWJvbEhlaWdodDsgdDIrKykgewogICAgICAgICAgcm93ID0gYml0bWFwW29mZnNldFQgKyB0Ml07CiAgICAgICAgICBpZiAoIXJvdykgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIHN5bWJvbFJvdyA9IHN5bWJvbEJpdG1hcFt0Ml07CiAgICAgICAgICBzd2l0Y2ggKGNvbWJpbmF0aW9uT3BlcmF0b3IpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIGZvciAoczIgPSAwOyBzMiA8IHN5bWJvbFdpZHRoOyBzMisrKSB7CiAgICAgICAgICAgICAgICByb3dbb2Zmc2V0UyArIHMyXSB8PSBzeW1ib2xSb3dbczJdOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgIGZvciAoczIgPSAwOyBzMiA8IHN5bWJvbFdpZHRoOyBzMisrKSB7CiAgICAgICAgICAgICAgICByb3dbb2Zmc2V0UyArIHMyXSBePSBzeW1ib2xSb3dbczJdOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihgb3BlcmF0b3IgJHtjb21iaW5hdGlvbk9wZXJhdG9yfSBpcyBub3Qgc3VwcG9ydGVkYCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGkrKzsKICAgICAgY29uc3QgZGVsdGFTID0gaHVmZm1hbiA/IGh1ZmZtYW5UYWJsZXMudGFibGVEZWx0YVMuZGVjb2RlKGh1ZmZtYW5JbnB1dCkgOiBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgIklBRFMiLCBkZWNvZGVyKTsKICAgICAgaWYgKGRlbHRhUyA9PT0gbnVsbCkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGN1cnJlbnRTICs9IGluY3JlbWVudCArIGRlbHRhUyArIGRzT2Zmc2V0OwogICAgfSB3aGlsZSAodHJ1ZSk7CiAgfQogIHJldHVybiBiaXRtYXA7Cn0KZnVuY3Rpb24gZGVjb2RlUGF0dGVybkRpY3Rpb25hcnkobW1yLCBwYXR0ZXJuV2lkdGgsIHBhdHRlcm5IZWlnaHQsIG1heFBhdHRlcm5JbmRleCwgdGVtcGxhdGUsIGRlY29kaW5nQ29udGV4dCkgewogIGNvbnN0IGF0ID0gW107CiAgaWYgKCFtbXIpIHsKICAgIGF0LnB1c2goewogICAgICB4OiAtcGF0dGVybldpZHRoLAogICAgICB5OiAwCiAgICB9KTsKICAgIGlmICh0ZW1wbGF0ZSA9PT0gMCkgewogICAgICBhdC5wdXNoKHsKICAgICAgICB4OiAtMywKICAgICAgICB5OiAtMQogICAgICB9LCB7CiAgICAgICAgeDogMiwKICAgICAgICB5OiAtMgogICAgICB9LCB7CiAgICAgICAgeDogLTIsCiAgICAgICAgeTogLTIKICAgICAgfSk7CiAgICB9CiAgfQogIGNvbnN0IGNvbGxlY3RpdmVXaWR0aCA9IChtYXhQYXR0ZXJuSW5kZXggKyAxKSAqIHBhdHRlcm5XaWR0aDsKICBjb25zdCBjb2xsZWN0aXZlQml0bWFwID0gZGVjb2RlQml0bWFwKG1tciwgY29sbGVjdGl2ZVdpZHRoLCBwYXR0ZXJuSGVpZ2h0LCB0ZW1wbGF0ZSwgZmFsc2UsIG51bGwsIGF0LCBkZWNvZGluZ0NvbnRleHQpOwogIGNvbnN0IHBhdHRlcm5zID0gW107CiAgZm9yIChsZXQgaSA9IDA7IGkgPD0gbWF4UGF0dGVybkluZGV4OyBpKyspIHsKICAgIGNvbnN0IHBhdHRlcm5CaXRtYXAgPSBbXTsKICAgIGNvbnN0IHhNaW4gPSBwYXR0ZXJuV2lkdGggKiBpOwogICAgY29uc3QgeE1heCA9IHhNaW4gKyBwYXR0ZXJuV2lkdGg7CiAgICBmb3IgKGxldCB5ID0gMDsgeSA8IHBhdHRlcm5IZWlnaHQ7IHkrKykgewogICAgICBwYXR0ZXJuQml0bWFwLnB1c2goY29sbGVjdGl2ZUJpdG1hcFt5XS5zdWJhcnJheSh4TWluLCB4TWF4KSk7CiAgICB9CiAgICBwYXR0ZXJucy5wdXNoKHBhdHRlcm5CaXRtYXApOwogIH0KICByZXR1cm4gcGF0dGVybnM7Cn0KZnVuY3Rpb24gZGVjb2RlSGFsZnRvbmVSZWdpb24obW1yLCBwYXR0ZXJucywgdGVtcGxhdGUsIHJlZ2lvbldpZHRoLCByZWdpb25IZWlnaHQsIGRlZmF1bHRQaXhlbFZhbHVlLCBlbmFibGVTa2lwLCBjb21iaW5hdGlvbk9wZXJhdG9yLCBncmlkV2lkdGgsIGdyaWRIZWlnaHQsIGdyaWRPZmZzZXRYLCBncmlkT2Zmc2V0WSwgZ3JpZFZlY3RvclgsIGdyaWRWZWN0b3JZLCBkZWNvZGluZ0NvbnRleHQpIHsKICBjb25zdCBza2lwID0gbnVsbDsKICBpZiAoZW5hYmxlU2tpcCkgewogICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoInNraXAgaXMgbm90IHN1cHBvcnRlZCIpOwogIH0KICBpZiAoY29tYmluYXRpb25PcGVyYXRvciAhPT0gMCkgewogICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoYG9wZXJhdG9yICIke2NvbWJpbmF0aW9uT3BlcmF0b3J9IiBpcyBub3Qgc3VwcG9ydGVkIGluIGhhbGZ0b25lIHJlZ2lvbmApOwogIH0KICBjb25zdCByZWdpb25CaXRtYXAgPSBbXTsKICBsZXQgaSwgaiwgcm93OwogIGZvciAoaSA9IDA7IGkgPCByZWdpb25IZWlnaHQ7IGkrKykgewogICAgcm93ID0gbmV3IFVpbnQ4QXJyYXkocmVnaW9uV2lkdGgpOwogICAgaWYgKGRlZmF1bHRQaXhlbFZhbHVlKSB7CiAgICAgIHJvdy5maWxsKGRlZmF1bHRQaXhlbFZhbHVlKTsKICAgIH0KICAgIHJlZ2lvbkJpdG1hcC5wdXNoKHJvdyk7CiAgfQogIGNvbnN0IG51bWJlck9mUGF0dGVybnMgPSBwYXR0ZXJucy5sZW5ndGg7CiAgY29uc3QgcGF0dGVybjAgPSBwYXR0ZXJuc1swXTsKICBjb25zdCBwYXR0ZXJuV2lkdGggPSBwYXR0ZXJuMFswXS5sZW5ndGgsCiAgICBwYXR0ZXJuSGVpZ2h0ID0gcGF0dGVybjAubGVuZ3RoOwogIGNvbnN0IGJpdHNQZXJWYWx1ZSA9IGxvZzIobnVtYmVyT2ZQYXR0ZXJucyk7CiAgY29uc3QgYXQgPSBbXTsKICBpZiAoIW1tcikgewogICAgYXQucHVzaCh7CiAgICAgIHg6IHRlbXBsYXRlIDw9IDEgPyAzIDogMiwKICAgICAgeTogLTEKICAgIH0pOwogICAgaWYgKHRlbXBsYXRlID09PSAwKSB7CiAgICAgIGF0LnB1c2goewogICAgICAgIHg6IC0zLAogICAgICAgIHk6IC0xCiAgICAgIH0sIHsKICAgICAgICB4OiAyLAogICAgICAgIHk6IC0yCiAgICAgIH0sIHsKICAgICAgICB4OiAtMiwKICAgICAgICB5OiAtMgogICAgICB9KTsKICAgIH0KICB9CiAgY29uc3QgZ3JheVNjYWxlQml0UGxhbmVzID0gW107CiAgbGV0IG1tcklucHV0LCBiaXRtYXA7CiAgaWYgKG1tcikgewogICAgbW1ySW5wdXQgPSBuZXcgUmVhZGVyKGRlY29kaW5nQ29udGV4dC5kYXRhLCBkZWNvZGluZ0NvbnRleHQuc3RhcnQsIGRlY29kaW5nQ29udGV4dC5lbmQpOwogIH0KICBmb3IgKGkgPSBiaXRzUGVyVmFsdWUgLSAxOyBpID49IDA7IGktLSkgewogICAgaWYgKG1tcikgewogICAgICBiaXRtYXAgPSBkZWNvZGVNTVJCaXRtYXAobW1ySW5wdXQsIGdyaWRXaWR0aCwgZ3JpZEhlaWdodCwgdHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICBiaXRtYXAgPSBkZWNvZGVCaXRtYXAoZmFsc2UsIGdyaWRXaWR0aCwgZ3JpZEhlaWdodCwgdGVtcGxhdGUsIGZhbHNlLCBza2lwLCBhdCwgZGVjb2RpbmdDb250ZXh0KTsKICAgIH0KICAgIGdyYXlTY2FsZUJpdFBsYW5lc1tpXSA9IGJpdG1hcDsKICB9CiAgbGV0IG1nLCBuZywgYml0LCBwYXR0ZXJuSW5kZXgsIHBhdHRlcm5CaXRtYXAsIHgsIHksIHBhdHRlcm5Sb3csIHJlZ2lvblJvdzsKICBmb3IgKG1nID0gMDsgbWcgPCBncmlkSGVpZ2h0OyBtZysrKSB7CiAgICBmb3IgKG5nID0gMDsgbmcgPCBncmlkV2lkdGg7IG5nKyspIHsKICAgICAgYml0ID0gMDsKICAgICAgcGF0dGVybkluZGV4ID0gMDsKICAgICAgZm9yIChqID0gYml0c1BlclZhbHVlIC0gMTsgaiA+PSAwOyBqLS0pIHsKICAgICAgICBiaXQgXj0gZ3JheVNjYWxlQml0UGxhbmVzW2pdW21nXVtuZ107CiAgICAgICAgcGF0dGVybkluZGV4IHw9IGJpdCA8PCBqOwogICAgICB9CiAgICAgIHBhdHRlcm5CaXRtYXAgPSBwYXR0ZXJuc1twYXR0ZXJuSW5kZXhdOwogICAgICB4ID0gZ3JpZE9mZnNldFggKyBtZyAqIGdyaWRWZWN0b3JZICsgbmcgKiBncmlkVmVjdG9yWCA+PiA4OwogICAgICB5ID0gZ3JpZE9mZnNldFkgKyBtZyAqIGdyaWRWZWN0b3JYIC0gbmcgKiBncmlkVmVjdG9yWSA+PiA4OwogICAgICBpZiAoeCA+PSAwICYmIHggKyBwYXR0ZXJuV2lkdGggPD0gcmVnaW9uV2lkdGggJiYgeSA+PSAwICYmIHkgKyBwYXR0ZXJuSGVpZ2h0IDw9IHJlZ2lvbkhlaWdodCkgewogICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYXR0ZXJuSGVpZ2h0OyBpKyspIHsKICAgICAgICAgIHJlZ2lvblJvdyA9IHJlZ2lvbkJpdG1hcFt5ICsgaV07CiAgICAgICAgICBwYXR0ZXJuUm93ID0gcGF0dGVybkJpdG1hcFtpXTsKICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwYXR0ZXJuV2lkdGg7IGorKykgewogICAgICAgICAgICByZWdpb25Sb3dbeCArIGpdIHw9IHBhdHRlcm5Sb3dbal07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGxldCByZWdpb25YLCByZWdpb25ZOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYXR0ZXJuSGVpZ2h0OyBpKyspIHsKICAgICAgICAgIHJlZ2lvblkgPSB5ICsgaTsKICAgICAgICAgIGlmIChyZWdpb25ZIDwgMCB8fCByZWdpb25ZID49IHJlZ2lvbkhlaWdodCkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIHJlZ2lvblJvdyA9IHJlZ2lvbkJpdG1hcFtyZWdpb25ZXTsKICAgICAgICAgIHBhdHRlcm5Sb3cgPSBwYXR0ZXJuQml0bWFwW2ldOwogICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBhdHRlcm5XaWR0aDsgaisrKSB7CiAgICAgICAgICAgIHJlZ2lvblggPSB4ICsgajsKICAgICAgICAgICAgaWYgKHJlZ2lvblggPj0gMCAmJiByZWdpb25YIDwgcmVnaW9uV2lkdGgpIHsKICAgICAgICAgICAgICByZWdpb25Sb3dbcmVnaW9uWF0gfD0gcGF0dGVyblJvd1tqXTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICByZXR1cm4gcmVnaW9uQml0bWFwOwp9CmZ1bmN0aW9uIHJlYWRTZWdtZW50SGVhZGVyKGRhdGEsIHN0YXJ0KSB7CiAgY29uc3Qgc2VnbWVudEhlYWRlciA9IHt9OwogIHNlZ21lbnRIZWFkZXIubnVtYmVyID0gcmVhZFVpbnQzMihkYXRhLCBzdGFydCk7CiAgY29uc3QgZmxhZ3MgPSBkYXRhW3N0YXJ0ICsgNF07CiAgY29uc3Qgc2VnbWVudFR5cGUgPSBmbGFncyAmIDB4M2Y7CiAgaWYgKCFTZWdtZW50VHlwZXNbc2VnbWVudFR5cGVdKSB7CiAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcigiaW52YWxpZCBzZWdtZW50IHR5cGU6ICIgKyBzZWdtZW50VHlwZSk7CiAgfQogIHNlZ21lbnRIZWFkZXIudHlwZSA9IHNlZ21lbnRUeXBlOwogIHNlZ21lbnRIZWFkZXIudHlwZU5hbWUgPSBTZWdtZW50VHlwZXNbc2VnbWVudFR5cGVdOwogIHNlZ21lbnRIZWFkZXIuZGVmZXJyZWROb25SZXRhaW4gPSAhIShmbGFncyAmIDB4ODApOwogIGNvbnN0IHBhZ2VBc3NvY2lhdGlvbkZpZWxkU2l6ZSA9ICEhKGZsYWdzICYgMHg0MCk7CiAgY29uc3QgcmVmZXJyZWRGbGFncyA9IGRhdGFbc3RhcnQgKyA1XTsKICBsZXQgcmVmZXJyZWRUb0NvdW50ID0gcmVmZXJyZWRGbGFncyA+PiA1ICYgNzsKICBjb25zdCByZXRhaW5CaXRzID0gW3JlZmVycmVkRmxhZ3MgJiAzMV07CiAgbGV0IHBvc2l0aW9uID0gc3RhcnQgKyA2OwogIGlmIChyZWZlcnJlZEZsYWdzID09PSA3KSB7CiAgICByZWZlcnJlZFRvQ291bnQgPSByZWFkVWludDMyKGRhdGEsIHBvc2l0aW9uIC0gMSkgJiAweDFmZmZmZmZmOwogICAgcG9zaXRpb24gKz0gMzsKICAgIGxldCBieXRlcyA9IHJlZmVycmVkVG9Db3VudCArIDcgPj4gMzsKICAgIHJldGFpbkJpdHNbMF0gPSBkYXRhW3Bvc2l0aW9uKytdOwogICAgd2hpbGUgKC0tYnl0ZXMgPiAwKSB7CiAgICAgIHJldGFpbkJpdHMucHVzaChkYXRhW3Bvc2l0aW9uKytdKTsKICAgIH0KICB9IGVsc2UgaWYgKHJlZmVycmVkRmxhZ3MgPT09IDUgfHwgcmVmZXJyZWRGbGFncyA9PT0gNikgewogICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoImludmFsaWQgcmVmZXJyZWQtdG8gZmxhZ3MiKTsKICB9CiAgc2VnbWVudEhlYWRlci5yZXRhaW5CaXRzID0gcmV0YWluQml0czsKICBsZXQgcmVmZXJyZWRUb1NlZ21lbnROdW1iZXJTaXplID0gNDsKICBpZiAoc2VnbWVudEhlYWRlci5udW1iZXIgPD0gMjU2KSB7CiAgICByZWZlcnJlZFRvU2VnbWVudE51bWJlclNpemUgPSAxOwogIH0gZWxzZSBpZiAoc2VnbWVudEhlYWRlci5udW1iZXIgPD0gNjU1MzYpIHsKICAgIHJlZmVycmVkVG9TZWdtZW50TnVtYmVyU2l6ZSA9IDI7CiAgfQogIGNvbnN0IHJlZmVycmVkVG8gPSBbXTsKICBsZXQgaSwgaWk7CiAgZm9yIChpID0gMDsgaSA8IHJlZmVycmVkVG9Db3VudDsgaSsrKSB7CiAgICBsZXQgbnVtYmVyOwogICAgaWYgKHJlZmVycmVkVG9TZWdtZW50TnVtYmVyU2l6ZSA9PT0gMSkgewogICAgICBudW1iZXIgPSBkYXRhW3Bvc2l0aW9uXTsKICAgIH0gZWxzZSBpZiAocmVmZXJyZWRUb1NlZ21lbnROdW1iZXJTaXplID09PSAyKSB7CiAgICAgIG51bWJlciA9IHJlYWRVaW50MTYoZGF0YSwgcG9zaXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgbnVtYmVyID0gcmVhZFVpbnQzMihkYXRhLCBwb3NpdGlvbik7CiAgICB9CiAgICByZWZlcnJlZFRvLnB1c2gobnVtYmVyKTsKICAgIHBvc2l0aW9uICs9IHJlZmVycmVkVG9TZWdtZW50TnVtYmVyU2l6ZTsKICB9CiAgc2VnbWVudEhlYWRlci5yZWZlcnJlZFRvID0gcmVmZXJyZWRUbzsKICBpZiAoIXBhZ2VBc3NvY2lhdGlvbkZpZWxkU2l6ZSkgewogICAgc2VnbWVudEhlYWRlci5wYWdlQXNzb2NpYXRpb24gPSBkYXRhW3Bvc2l0aW9uKytdOwogIH0gZWxzZSB7CiAgICBzZWdtZW50SGVhZGVyLnBhZ2VBc3NvY2lhdGlvbiA9IHJlYWRVaW50MzIoZGF0YSwgcG9zaXRpb24pOwogICAgcG9zaXRpb24gKz0gNDsKICB9CiAgc2VnbWVudEhlYWRlci5sZW5ndGggPSByZWFkVWludDMyKGRhdGEsIHBvc2l0aW9uKTsKICBwb3NpdGlvbiArPSA0OwogIGlmIChzZWdtZW50SGVhZGVyLmxlbmd0aCA9PT0gMHhmZmZmZmZmZikgewogICAgaWYgKHNlZ21lbnRUeXBlID09PSAzOCkgewogICAgICBjb25zdCBnZW5lcmljUmVnaW9uSW5mbyA9IHJlYWRSZWdpb25TZWdtZW50SW5mb3JtYXRpb24oZGF0YSwgcG9zaXRpb24pOwogICAgICBjb25zdCBnZW5lcmljUmVnaW9uU2VnbWVudEZsYWdzID0gZGF0YVtwb3NpdGlvbiArIFJlZ2lvblNlZ21lbnRJbmZvcm1hdGlvbkZpZWxkTGVuZ3RoXTsKICAgICAgY29uc3QgZ2VuZXJpY1JlZ2lvbk1tciA9ICEhKGdlbmVyaWNSZWdpb25TZWdtZW50RmxhZ3MgJiAxKTsKICAgICAgY29uc3Qgc2VhcmNoUGF0dGVybkxlbmd0aCA9IDY7CiAgICAgIGNvbnN0IHNlYXJjaFBhdHRlcm4gPSBuZXcgVWludDhBcnJheShzZWFyY2hQYXR0ZXJuTGVuZ3RoKTsKICAgICAgaWYgKCFnZW5lcmljUmVnaW9uTW1yKSB7CiAgICAgICAgc2VhcmNoUGF0dGVyblswXSA9IDB4ZmY7CiAgICAgICAgc2VhcmNoUGF0dGVyblsxXSA9IDB4YWM7CiAgICAgIH0KICAgICAgc2VhcmNoUGF0dGVyblsyXSA9IGdlbmVyaWNSZWdpb25JbmZvLmhlaWdodCA+Pj4gMjQgJiAweGZmOwogICAgICBzZWFyY2hQYXR0ZXJuWzNdID0gZ2VuZXJpY1JlZ2lvbkluZm8uaGVpZ2h0ID4+IDE2ICYgMHhmZjsKICAgICAgc2VhcmNoUGF0dGVybls0XSA9IGdlbmVyaWNSZWdpb25JbmZvLmhlaWdodCA+PiA4ICYgMHhmZjsKICAgICAgc2VhcmNoUGF0dGVybls1XSA9IGdlbmVyaWNSZWdpb25JbmZvLmhlaWdodCAmIDB4ZmY7CiAgICAgIGZvciAoaSA9IHBvc2l0aW9uLCBpaSA9IGRhdGEubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICAgIGxldCBqID0gMDsKICAgICAgICB3aGlsZSAoaiA8IHNlYXJjaFBhdHRlcm5MZW5ndGggJiYgc2VhcmNoUGF0dGVybltqXSA9PT0gZGF0YVtpICsgal0pIHsKICAgICAgICAgIGorKzsKICAgICAgICB9CiAgICAgICAgaWYgKGogPT09IHNlYXJjaFBhdHRlcm5MZW5ndGgpIHsKICAgICAgICAgIHNlZ21lbnRIZWFkZXIubGVuZ3RoID0gaSArIHNlYXJjaFBhdHRlcm5MZW5ndGg7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHNlZ21lbnRIZWFkZXIubGVuZ3RoID09PSAweGZmZmZmZmZmKSB7CiAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoInNlZ21lbnQgZW5kIHdhcyBub3QgZm91bmQiKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoImludmFsaWQgdW5rbm93biBzZWdtZW50IGxlbmd0aCIpOwogICAgfQogIH0KICBzZWdtZW50SGVhZGVyLmhlYWRlckVuZCA9IHBvc2l0aW9uOwogIHJldHVybiBzZWdtZW50SGVhZGVyOwp9CmZ1bmN0aW9uIHJlYWRTZWdtZW50cyhoZWFkZXIsIGRhdGEsIHN0YXJ0LCBlbmQpIHsKICBjb25zdCBzZWdtZW50cyA9IFtdOwogIGxldCBwb3NpdGlvbiA9IHN0YXJ0OwogIHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgewogICAgY29uc3Qgc2VnbWVudEhlYWRlciA9IHJlYWRTZWdtZW50SGVhZGVyKGRhdGEsIHBvc2l0aW9uKTsKICAgIHBvc2l0aW9uID0gc2VnbWVudEhlYWRlci5oZWFkZXJFbmQ7CiAgICBjb25zdCBzZWdtZW50ID0gewogICAgICBoZWFkZXI6IHNlZ21lbnRIZWFkZXIsCiAgICAgIGRhdGEKICAgIH07CiAgICBpZiAoIWhlYWRlci5yYW5kb21BY2Nlc3MpIHsKICAgICAgc2VnbWVudC5zdGFydCA9IHBvc2l0aW9uOwogICAgICBwb3NpdGlvbiArPSBzZWdtZW50SGVhZGVyLmxlbmd0aDsKICAgICAgc2VnbWVudC5lbmQgPSBwb3NpdGlvbjsKICAgIH0KICAgIHNlZ21lbnRzLnB1c2goc2VnbWVudCk7CiAgICBpZiAoc2VnbWVudEhlYWRlci50eXBlID09PSA1MSkgewogICAgICBicmVhazsKICAgIH0KICB9CiAgaWYgKGhlYWRlci5yYW5kb21BY2Nlc3MpIHsKICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHNlZ21lbnRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgc2VnbWVudHNbaV0uc3RhcnQgPSBwb3NpdGlvbjsKICAgICAgcG9zaXRpb24gKz0gc2VnbWVudHNbaV0uaGVhZGVyLmxlbmd0aDsKICAgICAgc2VnbWVudHNbaV0uZW5kID0gcG9zaXRpb247CiAgICB9CiAgfQogIHJldHVybiBzZWdtZW50czsKfQpmdW5jdGlvbiByZWFkUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uKGRhdGEsIHN0YXJ0KSB7CiAgcmV0dXJuIHsKICAgIHdpZHRoOiByZWFkVWludDMyKGRhdGEsIHN0YXJ0KSwKICAgIGhlaWdodDogcmVhZFVpbnQzMihkYXRhLCBzdGFydCArIDQpLAogICAgeDogcmVhZFVpbnQzMihkYXRhLCBzdGFydCArIDgpLAogICAgeTogcmVhZFVpbnQzMihkYXRhLCBzdGFydCArIDEyKSwKICAgIGNvbWJpbmF0aW9uT3BlcmF0b3I6IGRhdGFbc3RhcnQgKyAxNl0gJiA3CiAgfTsKfQpjb25zdCBSZWdpb25TZWdtZW50SW5mb3JtYXRpb25GaWVsZExlbmd0aCA9IDE3OwpmdW5jdGlvbiBwcm9jZXNzU2VnbWVudChzZWdtZW50LCB2aXNpdG9yKSB7CiAgY29uc3QgaGVhZGVyID0gc2VnbWVudC5oZWFkZXI7CiAgY29uc3QgZGF0YSA9IHNlZ21lbnQuZGF0YSwKICAgIGVuZCA9IHNlZ21lbnQuZW5kOwogIGxldCBwb3NpdGlvbiA9IHNlZ21lbnQuc3RhcnQ7CiAgbGV0IGFyZ3MsIGF0LCBpLCBhdExlbmd0aDsKICBzd2l0Y2ggKGhlYWRlci50eXBlKSB7CiAgICBjYXNlIDA6CiAgICAgIGNvbnN0IGRpY3Rpb25hcnkgPSB7fTsKICAgICAgY29uc3QgZGljdGlvbmFyeUZsYWdzID0gcmVhZFVpbnQxNihkYXRhLCBwb3NpdGlvbik7CiAgICAgIGRpY3Rpb25hcnkuaHVmZm1hbiA9ICEhKGRpY3Rpb25hcnlGbGFncyAmIDEpOwogICAgICBkaWN0aW9uYXJ5LnJlZmluZW1lbnQgPSAhIShkaWN0aW9uYXJ5RmxhZ3MgJiAyKTsKICAgICAgZGljdGlvbmFyeS5odWZmbWFuREhTZWxlY3RvciA9IGRpY3Rpb25hcnlGbGFncyA+PiAyICYgMzsKICAgICAgZGljdGlvbmFyeS5odWZmbWFuRFdTZWxlY3RvciA9IGRpY3Rpb25hcnlGbGFncyA+PiA0ICYgMzsKICAgICAgZGljdGlvbmFyeS5iaXRtYXBTaXplU2VsZWN0b3IgPSBkaWN0aW9uYXJ5RmxhZ3MgPj4gNiAmIDE7CiAgICAgIGRpY3Rpb25hcnkuYWdncmVnYXRpb25JbnN0YW5jZXNTZWxlY3RvciA9IGRpY3Rpb25hcnlGbGFncyA+PiA3ICYgMTsKICAgICAgZGljdGlvbmFyeS5iaXRtYXBDb2RpbmdDb250ZXh0VXNlZCA9ICEhKGRpY3Rpb25hcnlGbGFncyAmIDI1Nik7CiAgICAgIGRpY3Rpb25hcnkuYml0bWFwQ29kaW5nQ29udGV4dFJldGFpbmVkID0gISEoZGljdGlvbmFyeUZsYWdzICYgNTEyKTsKICAgICAgZGljdGlvbmFyeS50ZW1wbGF0ZSA9IGRpY3Rpb25hcnlGbGFncyA+PiAxMCAmIDM7CiAgICAgIGRpY3Rpb25hcnkucmVmaW5lbWVudFRlbXBsYXRlID0gZGljdGlvbmFyeUZsYWdzID4+IDEyICYgMTsKICAgICAgcG9zaXRpb24gKz0gMjsKICAgICAgaWYgKCFkaWN0aW9uYXJ5Lmh1ZmZtYW4pIHsKICAgICAgICBhdExlbmd0aCA9IGRpY3Rpb25hcnkudGVtcGxhdGUgPT09IDAgPyA0IDogMTsKICAgICAgICBhdCA9IFtdOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBhdExlbmd0aDsgaSsrKSB7CiAgICAgICAgICBhdC5wdXNoKHsKICAgICAgICAgICAgeDogcmVhZEludDgoZGF0YSwgcG9zaXRpb24pLAogICAgICAgICAgICB5OiByZWFkSW50OChkYXRhLCBwb3NpdGlvbiArIDEpCiAgICAgICAgICB9KTsKICAgICAgICAgIHBvc2l0aW9uICs9IDI7CiAgICAgICAgfQogICAgICAgIGRpY3Rpb25hcnkuYXQgPSBhdDsKICAgICAgfQogICAgICBpZiAoZGljdGlvbmFyeS5yZWZpbmVtZW50ICYmICFkaWN0aW9uYXJ5LnJlZmluZW1lbnRUZW1wbGF0ZSkgewogICAgICAgIGF0ID0gW107CiAgICAgICAgZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewogICAgICAgICAgYXQucHVzaCh7CiAgICAgICAgICAgIHg6IHJlYWRJbnQ4KGRhdGEsIHBvc2l0aW9uKSwKICAgICAgICAgICAgeTogcmVhZEludDgoZGF0YSwgcG9zaXRpb24gKyAxKQogICAgICAgICAgfSk7CiAgICAgICAgICBwb3NpdGlvbiArPSAyOwogICAgICAgIH0KICAgICAgICBkaWN0aW9uYXJ5LnJlZmluZW1lbnRBdCA9IGF0OwogICAgICB9CiAgICAgIGRpY3Rpb25hcnkubnVtYmVyT2ZFeHBvcnRlZFN5bWJvbHMgPSByZWFkVWludDMyKGRhdGEsIHBvc2l0aW9uKTsKICAgICAgcG9zaXRpb24gKz0gNDsKICAgICAgZGljdGlvbmFyeS5udW1iZXJPZk5ld1N5bWJvbHMgPSByZWFkVWludDMyKGRhdGEsIHBvc2l0aW9uKTsKICAgICAgcG9zaXRpb24gKz0gNDsKICAgICAgYXJncyA9IFtkaWN0aW9uYXJ5LCBoZWFkZXIubnVtYmVyLCBoZWFkZXIucmVmZXJyZWRUbywgZGF0YSwgcG9zaXRpb24sIGVuZF07CiAgICAgIGJyZWFrOwogICAgY2FzZSA2OgogICAgY2FzZSA3OgogICAgICBjb25zdCB0ZXh0UmVnaW9uID0ge307CiAgICAgIHRleHRSZWdpb24uaW5mbyA9IHJlYWRSZWdpb25TZWdtZW50SW5mb3JtYXRpb24oZGF0YSwgcG9zaXRpb24pOwogICAgICBwb3NpdGlvbiArPSBSZWdpb25TZWdtZW50SW5mb3JtYXRpb25GaWVsZExlbmd0aDsKICAgICAgY29uc3QgdGV4dFJlZ2lvblNlZ21lbnRGbGFncyA9IHJlYWRVaW50MTYoZGF0YSwgcG9zaXRpb24pOwogICAgICBwb3NpdGlvbiArPSAyOwogICAgICB0ZXh0UmVnaW9uLmh1ZmZtYW4gPSAhISh0ZXh0UmVnaW9uU2VnbWVudEZsYWdzICYgMSk7CiAgICAgIHRleHRSZWdpb24ucmVmaW5lbWVudCA9ICEhKHRleHRSZWdpb25TZWdtZW50RmxhZ3MgJiAyKTsKICAgICAgdGV4dFJlZ2lvbi5sb2dTdHJpcFNpemUgPSB0ZXh0UmVnaW9uU2VnbWVudEZsYWdzID4+IDIgJiAzOwogICAgICB0ZXh0UmVnaW9uLnN0cmlwU2l6ZSA9IDEgPDwgdGV4dFJlZ2lvbi5sb2dTdHJpcFNpemU7CiAgICAgIHRleHRSZWdpb24ucmVmZXJlbmNlQ29ybmVyID0gdGV4dFJlZ2lvblNlZ21lbnRGbGFncyA+PiA0ICYgMzsKICAgICAgdGV4dFJlZ2lvbi50cmFuc3Bvc2VkID0gISEodGV4dFJlZ2lvblNlZ21lbnRGbGFncyAmIDY0KTsKICAgICAgdGV4dFJlZ2lvbi5jb21iaW5hdGlvbk9wZXJhdG9yID0gdGV4dFJlZ2lvblNlZ21lbnRGbGFncyA+PiA3ICYgMzsKICAgICAgdGV4dFJlZ2lvbi5kZWZhdWx0UGl4ZWxWYWx1ZSA9IHRleHRSZWdpb25TZWdtZW50RmxhZ3MgPj4gOSAmIDE7CiAgICAgIHRleHRSZWdpb24uZHNPZmZzZXQgPSB0ZXh0UmVnaW9uU2VnbWVudEZsYWdzIDw8IDE3ID4+IDI3OwogICAgICB0ZXh0UmVnaW9uLnJlZmluZW1lbnRUZW1wbGF0ZSA9IHRleHRSZWdpb25TZWdtZW50RmxhZ3MgPj4gMTUgJiAxOwogICAgICBpZiAodGV4dFJlZ2lvbi5odWZmbWFuKSB7CiAgICAgICAgY29uc3QgdGV4dFJlZ2lvbkh1ZmZtYW5GbGFncyA9IHJlYWRVaW50MTYoZGF0YSwgcG9zaXRpb24pOwogICAgICAgIHBvc2l0aW9uICs9IDI7CiAgICAgICAgdGV4dFJlZ2lvbi5odWZmbWFuRlMgPSB0ZXh0UmVnaW9uSHVmZm1hbkZsYWdzICYgMzsKICAgICAgICB0ZXh0UmVnaW9uLmh1ZmZtYW5EUyA9IHRleHRSZWdpb25IdWZmbWFuRmxhZ3MgPj4gMiAmIDM7CiAgICAgICAgdGV4dFJlZ2lvbi5odWZmbWFuRFQgPSB0ZXh0UmVnaW9uSHVmZm1hbkZsYWdzID4+IDQgJiAzOwogICAgICAgIHRleHRSZWdpb24uaHVmZm1hblJlZmluZW1lbnREVyA9IHRleHRSZWdpb25IdWZmbWFuRmxhZ3MgPj4gNiAmIDM7CiAgICAgICAgdGV4dFJlZ2lvbi5odWZmbWFuUmVmaW5lbWVudERIID0gdGV4dFJlZ2lvbkh1ZmZtYW5GbGFncyA+PiA4ICYgMzsKICAgICAgICB0ZXh0UmVnaW9uLmh1ZmZtYW5SZWZpbmVtZW50RFggPSB0ZXh0UmVnaW9uSHVmZm1hbkZsYWdzID4+IDEwICYgMzsKICAgICAgICB0ZXh0UmVnaW9uLmh1ZmZtYW5SZWZpbmVtZW50RFkgPSB0ZXh0UmVnaW9uSHVmZm1hbkZsYWdzID4+IDEyICYgMzsKICAgICAgICB0ZXh0UmVnaW9uLmh1ZmZtYW5SZWZpbmVtZW50U2l6ZVNlbGVjdG9yID0gISEodGV4dFJlZ2lvbkh1ZmZtYW5GbGFncyAmIDB4NDAwMCk7CiAgICAgIH0KICAgICAgaWYgKHRleHRSZWdpb24ucmVmaW5lbWVudCAmJiAhdGV4dFJlZ2lvbi5yZWZpbmVtZW50VGVtcGxhdGUpIHsKICAgICAgICBhdCA9IFtdOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKICAgICAgICAgIGF0LnB1c2goewogICAgICAgICAgICB4OiByZWFkSW50OChkYXRhLCBwb3NpdGlvbiksCiAgICAgICAgICAgIHk6IHJlYWRJbnQ4KGRhdGEsIHBvc2l0aW9uICsgMSkKICAgICAgICAgIH0pOwogICAgICAgICAgcG9zaXRpb24gKz0gMjsKICAgICAgICB9CiAgICAgICAgdGV4dFJlZ2lvbi5yZWZpbmVtZW50QXQgPSBhdDsKICAgICAgfQogICAgICB0ZXh0UmVnaW9uLm51bWJlck9mU3ltYm9sSW5zdGFuY2VzID0gcmVhZFVpbnQzMihkYXRhLCBwb3NpdGlvbik7CiAgICAgIHBvc2l0aW9uICs9IDQ7CiAgICAgIGFyZ3MgPSBbdGV4dFJlZ2lvbiwgaGVhZGVyLnJlZmVycmVkVG8sIGRhdGEsIHBvc2l0aW9uLCBlbmRdOwogICAgICBicmVhazsKICAgIGNhc2UgMTY6CiAgICAgIGNvbnN0IHBhdHRlcm5EaWN0aW9uYXJ5ID0ge307CiAgICAgIGNvbnN0IHBhdHRlcm5EaWN0aW9uYXJ5RmxhZ3MgPSBkYXRhW3Bvc2l0aW9uKytdOwogICAgICBwYXR0ZXJuRGljdGlvbmFyeS5tbXIgPSAhIShwYXR0ZXJuRGljdGlvbmFyeUZsYWdzICYgMSk7CiAgICAgIHBhdHRlcm5EaWN0aW9uYXJ5LnRlbXBsYXRlID0gcGF0dGVybkRpY3Rpb25hcnlGbGFncyA+PiAxICYgMzsKICAgICAgcGF0dGVybkRpY3Rpb25hcnkucGF0dGVybldpZHRoID0gZGF0YVtwb3NpdGlvbisrXTsKICAgICAgcGF0dGVybkRpY3Rpb25hcnkucGF0dGVybkhlaWdodCA9IGRhdGFbcG9zaXRpb24rK107CiAgICAgIHBhdHRlcm5EaWN0aW9uYXJ5Lm1heFBhdHRlcm5JbmRleCA9IHJlYWRVaW50MzIoZGF0YSwgcG9zaXRpb24pOwogICAgICBwb3NpdGlvbiArPSA0OwogICAgICBhcmdzID0gW3BhdHRlcm5EaWN0aW9uYXJ5LCBoZWFkZXIubnVtYmVyLCBkYXRhLCBwb3NpdGlvbiwgZW5kXTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyOgogICAgY2FzZSAyMzoKICAgICAgY29uc3QgaGFsZnRvbmVSZWdpb24gPSB7fTsKICAgICAgaGFsZnRvbmVSZWdpb24uaW5mbyA9IHJlYWRSZWdpb25TZWdtZW50SW5mb3JtYXRpb24oZGF0YSwgcG9zaXRpb24pOwogICAgICBwb3NpdGlvbiArPSBSZWdpb25TZWdtZW50SW5mb3JtYXRpb25GaWVsZExlbmd0aDsKICAgICAgY29uc3QgaGFsZnRvbmVSZWdpb25GbGFncyA9IGRhdGFbcG9zaXRpb24rK107CiAgICAgIGhhbGZ0b25lUmVnaW9uLm1tciA9ICEhKGhhbGZ0b25lUmVnaW9uRmxhZ3MgJiAxKTsKICAgICAgaGFsZnRvbmVSZWdpb24udGVtcGxhdGUgPSBoYWxmdG9uZVJlZ2lvbkZsYWdzID4+IDEgJiAzOwogICAgICBoYWxmdG9uZVJlZ2lvbi5lbmFibGVTa2lwID0gISEoaGFsZnRvbmVSZWdpb25GbGFncyAmIDgpOwogICAgICBoYWxmdG9uZVJlZ2lvbi5jb21iaW5hdGlvbk9wZXJhdG9yID0gaGFsZnRvbmVSZWdpb25GbGFncyA+PiA0ICYgNzsKICAgICAgaGFsZnRvbmVSZWdpb24uZGVmYXVsdFBpeGVsVmFsdWUgPSBoYWxmdG9uZVJlZ2lvbkZsYWdzID4+IDcgJiAxOwogICAgICBoYWxmdG9uZVJlZ2lvbi5ncmlkV2lkdGggPSByZWFkVWludDMyKGRhdGEsIHBvc2l0aW9uKTsKICAgICAgcG9zaXRpb24gKz0gNDsKICAgICAgaGFsZnRvbmVSZWdpb24uZ3JpZEhlaWdodCA9IHJlYWRVaW50MzIoZGF0YSwgcG9zaXRpb24pOwogICAgICBwb3NpdGlvbiArPSA0OwogICAgICBoYWxmdG9uZVJlZ2lvbi5ncmlkT2Zmc2V0WCA9IHJlYWRVaW50MzIoZGF0YSwgcG9zaXRpb24pICYgMHhmZmZmZmZmZjsKICAgICAgcG9zaXRpb24gKz0gNDsKICAgICAgaGFsZnRvbmVSZWdpb24uZ3JpZE9mZnNldFkgPSByZWFkVWludDMyKGRhdGEsIHBvc2l0aW9uKSAmIDB4ZmZmZmZmZmY7CiAgICAgIHBvc2l0aW9uICs9IDQ7CiAgICAgIGhhbGZ0b25lUmVnaW9uLmdyaWRWZWN0b3JYID0gcmVhZFVpbnQxNihkYXRhLCBwb3NpdGlvbik7CiAgICAgIHBvc2l0aW9uICs9IDI7CiAgICAgIGhhbGZ0b25lUmVnaW9uLmdyaWRWZWN0b3JZID0gcmVhZFVpbnQxNihkYXRhLCBwb3NpdGlvbik7CiAgICAgIHBvc2l0aW9uICs9IDI7CiAgICAgIGFyZ3MgPSBbaGFsZnRvbmVSZWdpb24sIGhlYWRlci5yZWZlcnJlZFRvLCBkYXRhLCBwb3NpdGlvbiwgZW5kXTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDM4OgogICAgY2FzZSAzOToKICAgICAgY29uc3QgZ2VuZXJpY1JlZ2lvbiA9IHt9OwogICAgICBnZW5lcmljUmVnaW9uLmluZm8gPSByZWFkUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uKGRhdGEsIHBvc2l0aW9uKTsKICAgICAgcG9zaXRpb24gKz0gUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uRmllbGRMZW5ndGg7CiAgICAgIGNvbnN0IGdlbmVyaWNSZWdpb25TZWdtZW50RmxhZ3MgPSBkYXRhW3Bvc2l0aW9uKytdOwogICAgICBnZW5lcmljUmVnaW9uLm1tciA9ICEhKGdlbmVyaWNSZWdpb25TZWdtZW50RmxhZ3MgJiAxKTsKICAgICAgZ2VuZXJpY1JlZ2lvbi50ZW1wbGF0ZSA9IGdlbmVyaWNSZWdpb25TZWdtZW50RmxhZ3MgPj4gMSAmIDM7CiAgICAgIGdlbmVyaWNSZWdpb24ucHJlZGljdGlvbiA9ICEhKGdlbmVyaWNSZWdpb25TZWdtZW50RmxhZ3MgJiA4KTsKICAgICAgaWYgKCFnZW5lcmljUmVnaW9uLm1tcikgewogICAgICAgIGF0TGVuZ3RoID0gZ2VuZXJpY1JlZ2lvbi50ZW1wbGF0ZSA9PT0gMCA/IDQgOiAxOwogICAgICAgIGF0ID0gW107CiAgICAgICAgZm9yIChpID0gMDsgaSA8IGF0TGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGF0LnB1c2goewogICAgICAgICAgICB4OiByZWFkSW50OChkYXRhLCBwb3NpdGlvbiksCiAgICAgICAgICAgIHk6IHJlYWRJbnQ4KGRhdGEsIHBvc2l0aW9uICsgMSkKICAgICAgICAgIH0pOwogICAgICAgICAgcG9zaXRpb24gKz0gMjsKICAgICAgICB9CiAgICAgICAgZ2VuZXJpY1JlZ2lvbi5hdCA9IGF0OwogICAgICB9CiAgICAgIGFyZ3MgPSBbZ2VuZXJpY1JlZ2lvbiwgZGF0YSwgcG9zaXRpb24sIGVuZF07CiAgICAgIGJyZWFrOwogICAgY2FzZSA0ODoKICAgICAgY29uc3QgcGFnZUluZm8gPSB7CiAgICAgICAgd2lkdGg6IHJlYWRVaW50MzIoZGF0YSwgcG9zaXRpb24pLAogICAgICAgIGhlaWdodDogcmVhZFVpbnQzMihkYXRhLCBwb3NpdGlvbiArIDQpLAogICAgICAgIHJlc29sdXRpb25YOiByZWFkVWludDMyKGRhdGEsIHBvc2l0aW9uICsgOCksCiAgICAgICAgcmVzb2x1dGlvblk6IHJlYWRVaW50MzIoZGF0YSwgcG9zaXRpb24gKyAxMikKICAgICAgfTsKICAgICAgaWYgKHBhZ2VJbmZvLmhlaWdodCA9PT0gMHhmZmZmZmZmZikgewogICAgICAgIGRlbGV0ZSBwYWdlSW5mby5oZWlnaHQ7CiAgICAgIH0KICAgICAgY29uc3QgcGFnZVNlZ21lbnRGbGFncyA9IGRhdGFbcG9zaXRpb24gKyAxNl07CiAgICAgIHJlYWRVaW50MTYoZGF0YSwgcG9zaXRpb24gKyAxNyk7CiAgICAgIHBhZ2VJbmZvLmxvc3NsZXNzID0gISEocGFnZVNlZ21lbnRGbGFncyAmIDEpOwogICAgICBwYWdlSW5mby5yZWZpbmVtZW50ID0gISEocGFnZVNlZ21lbnRGbGFncyAmIDIpOwogICAgICBwYWdlSW5mby5kZWZhdWx0UGl4ZWxWYWx1ZSA9IHBhZ2VTZWdtZW50RmxhZ3MgPj4gMiAmIDE7CiAgICAgIHBhZ2VJbmZvLmNvbWJpbmF0aW9uT3BlcmF0b3IgPSBwYWdlU2VnbWVudEZsYWdzID4+IDMgJiAzOwogICAgICBwYWdlSW5mby5yZXF1aXJlc0J1ZmZlciA9ICEhKHBhZ2VTZWdtZW50RmxhZ3MgJiAzMik7CiAgICAgIHBhZ2VJbmZvLmNvbWJpbmF0aW9uT3BlcmF0b3JPdmVycmlkZSA9ICEhKHBhZ2VTZWdtZW50RmxhZ3MgJiA2NCk7CiAgICAgIGFyZ3MgPSBbcGFnZUluZm9dOwogICAgICBicmVhazsKICAgIGNhc2UgNDk6CiAgICAgIGJyZWFrOwogICAgY2FzZSA1MDoKICAgICAgYnJlYWs7CiAgICBjYXNlIDUxOgogICAgICBicmVhazsKICAgIGNhc2UgNTM6CiAgICAgIGFyZ3MgPSBbaGVhZGVyLm51bWJlciwgZGF0YSwgcG9zaXRpb24sIGVuZF07CiAgICAgIGJyZWFrOwogICAgY2FzZSA2MjoKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihgc2VnbWVudCB0eXBlICR7aGVhZGVyLnR5cGVOYW1lfSgke2hlYWRlci50eXBlfSkgaXMgbm90IGltcGxlbWVudGVkYCk7CiAgfQogIGNvbnN0IGNhbGxiYWNrTmFtZSA9ICJvbiIgKyBoZWFkZXIudHlwZU5hbWU7CiAgaWYgKGNhbGxiYWNrTmFtZSBpbiB2aXNpdG9yKSB7CiAgICB2aXNpdG9yW2NhbGxiYWNrTmFtZV0uYXBwbHkodmlzaXRvciwgYXJncyk7CiAgfQp9CmZ1bmN0aW9uIHByb2Nlc3NTZWdtZW50cyhzZWdtZW50cywgdmlzaXRvcikgewogIGZvciAobGV0IGkgPSAwLCBpaSA9IHNlZ21lbnRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgIHByb2Nlc3NTZWdtZW50KHNlZ21lbnRzW2ldLCB2aXNpdG9yKTsKICB9Cn0KZnVuY3Rpb24gcGFyc2VKYmlnMkNodW5rcyhjaHVua3MpIHsKICBjb25zdCB2aXNpdG9yID0gbmV3IFNpbXBsZVNlZ21lbnRWaXNpdG9yKCk7CiAgZm9yIChsZXQgaSA9IDAsIGlpID0gY2h1bmtzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgIGNvbnN0IGNodW5rID0gY2h1bmtzW2ldOwogICAgY29uc3Qgc2VnbWVudHMgPSByZWFkU2VnbWVudHMoe30sIGNodW5rLmRhdGEsIGNodW5rLnN0YXJ0LCBjaHVuay5lbmQpOwogICAgcHJvY2Vzc1NlZ21lbnRzKHNlZ21lbnRzLCB2aXNpdG9yKTsKICB9CiAgcmV0dXJuIHZpc2l0b3IuYnVmZmVyOwp9CmZ1bmN0aW9uIHBhcnNlSmJpZzIoZGF0YSkgewogIHRocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkOiBwYXJzZUpiaWcyIik7Cn0KY2xhc3MgU2ltcGxlU2VnbWVudFZpc2l0b3IgewogIG9uUGFnZUluZm9ybWF0aW9uKGluZm8pIHsKICAgIHRoaXMuY3VycmVudFBhZ2VJbmZvID0gaW5mbzsKICAgIGNvbnN0IHJvd1NpemUgPSBpbmZvLndpZHRoICsgNyA+PiAzOwogICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHJvd1NpemUgKiBpbmZvLmhlaWdodCk7CiAgICBpZiAoaW5mby5kZWZhdWx0UGl4ZWxWYWx1ZSkgewogICAgICBidWZmZXIuZmlsbCgweGZmKTsKICAgIH0KICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyOwogIH0KICBkcmF3Qml0bWFwKHJlZ2lvbkluZm8sIGJpdG1hcCkgewogICAgY29uc3QgcGFnZUluZm8gPSB0aGlzLmN1cnJlbnRQYWdlSW5mbzsKICAgIGNvbnN0IHdpZHRoID0gcmVnaW9uSW5mby53aWR0aCwKICAgICAgaGVpZ2h0ID0gcmVnaW9uSW5mby5oZWlnaHQ7CiAgICBjb25zdCByb3dTaXplID0gcGFnZUluZm8ud2lkdGggKyA3ID4+IDM7CiAgICBjb25zdCBjb21iaW5hdGlvbk9wZXJhdG9yID0gcGFnZUluZm8uY29tYmluYXRpb25PcGVyYXRvck92ZXJyaWRlID8gcmVnaW9uSW5mby5jb21iaW5hdGlvbk9wZXJhdG9yIDogcGFnZUluZm8uY29tYmluYXRpb25PcGVyYXRvcjsKICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuYnVmZmVyOwogICAgY29uc3QgbWFzazAgPSAxMjggPj4gKHJlZ2lvbkluZm8ueCAmIDcpOwogICAgbGV0IG9mZnNldDAgPSByZWdpb25JbmZvLnkgKiByb3dTaXplICsgKHJlZ2lvbkluZm8ueCA+PiAzKTsKICAgIGxldCBpLCBqLCBtYXNrLCBvZmZzZXQ7CiAgICBzd2l0Y2ggKGNvbWJpbmF0aW9uT3BlcmF0b3IpIHsKICAgICAgY2FzZSAwOgogICAgICAgIGZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgewogICAgICAgICAgbWFzayA9IG1hc2swOwogICAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0MDsKICAgICAgICAgIGZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7CiAgICAgICAgICAgIGlmIChiaXRtYXBbaV1bal0pIHsKICAgICAgICAgICAgICBidWZmZXJbb2Zmc2V0XSB8PSBtYXNrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG1hc2sgPj49IDE7CiAgICAgICAgICAgIGlmICghbWFzaykgewogICAgICAgICAgICAgIG1hc2sgPSAxMjg7CiAgICAgICAgICAgICAgb2Zmc2V0Kys7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIG9mZnNldDAgKz0gcm93U2l6ZTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMjoKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsKICAgICAgICAgIG1hc2sgPSBtYXNrMDsKICAgICAgICAgIG9mZnNldCA9IG9mZnNldDA7CiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykgewogICAgICAgICAgICBpZiAoYml0bWFwW2ldW2pdKSB7CiAgICAgICAgICAgICAgYnVmZmVyW29mZnNldF0gXj0gbWFzazsKICAgICAgICAgICAgfQogICAgICAgICAgICBtYXNrID4+PSAxOwogICAgICAgICAgICBpZiAoIW1hc2spIHsKICAgICAgICAgICAgICBtYXNrID0gMTI4OwogICAgICAgICAgICAgIG9mZnNldCsrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBvZmZzZXQwICs9IHJvd1NpemU7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKGBvcGVyYXRvciAke2NvbWJpbmF0aW9uT3BlcmF0b3J9IGlzIG5vdCBzdXBwb3J0ZWRgKTsKICAgIH0KICB9CiAgb25JbW1lZGlhdGVHZW5lcmljUmVnaW9uKHJlZ2lvbiwgZGF0YSwgc3RhcnQsIGVuZCkgewogICAgY29uc3QgcmVnaW9uSW5mbyA9IHJlZ2lvbi5pbmZvOwogICAgY29uc3QgZGVjb2RpbmdDb250ZXh0ID0gbmV3IERlY29kaW5nQ29udGV4dChkYXRhLCBzdGFydCwgZW5kKTsKICAgIGNvbnN0IGJpdG1hcCA9IGRlY29kZUJpdG1hcChyZWdpb24ubW1yLCByZWdpb25JbmZvLndpZHRoLCByZWdpb25JbmZvLmhlaWdodCwgcmVnaW9uLnRlbXBsYXRlLCByZWdpb24ucHJlZGljdGlvbiwgbnVsbCwgcmVnaW9uLmF0LCBkZWNvZGluZ0NvbnRleHQpOwogICAgdGhpcy5kcmF3Qml0bWFwKHJlZ2lvbkluZm8sIGJpdG1hcCk7CiAgfQogIG9uSW1tZWRpYXRlTG9zc2xlc3NHZW5lcmljUmVnaW9uKCkgewogICAgdGhpcy5vbkltbWVkaWF0ZUdlbmVyaWNSZWdpb24oLi4uYXJndW1lbnRzKTsKICB9CiAgb25TeW1ib2xEaWN0aW9uYXJ5KGRpY3Rpb25hcnksIGN1cnJlbnRTZWdtZW50LCByZWZlcnJlZFNlZ21lbnRzLCBkYXRhLCBzdGFydCwgZW5kKSB7CiAgICBsZXQgaHVmZm1hblRhYmxlcywgaHVmZm1hbklucHV0OwogICAgaWYgKGRpY3Rpb25hcnkuaHVmZm1hbikgewogICAgICBodWZmbWFuVGFibGVzID0gZ2V0U3ltYm9sRGljdGlvbmFyeUh1ZmZtYW5UYWJsZXMoZGljdGlvbmFyeSwgcmVmZXJyZWRTZWdtZW50cywgdGhpcy5jdXN0b21UYWJsZXMpOwogICAgICBodWZmbWFuSW5wdXQgPSBuZXcgUmVhZGVyKGRhdGEsIHN0YXJ0LCBlbmQpOwogICAgfQogICAgbGV0IHN5bWJvbHMgPSB0aGlzLnN5bWJvbHM7CiAgICBpZiAoIXN5bWJvbHMpIHsKICAgICAgdGhpcy5zeW1ib2xzID0gc3ltYm9scyA9IHt9OwogICAgfQogICAgY29uc3QgaW5wdXRTeW1ib2xzID0gW107CiAgICBmb3IgKGNvbnN0IHJlZmVycmVkU2VnbWVudCBvZiByZWZlcnJlZFNlZ21lbnRzKSB7CiAgICAgIGNvbnN0IHJlZmVycmVkU3ltYm9scyA9IHN5bWJvbHNbcmVmZXJyZWRTZWdtZW50XTsKICAgICAgaWYgKHJlZmVycmVkU3ltYm9scykgewogICAgICAgIGlucHV0U3ltYm9scy5wdXNoKC4uLnJlZmVycmVkU3ltYm9scyk7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0IGRlY29kaW5nQ29udGV4dCA9IG5ldyBEZWNvZGluZ0NvbnRleHQoZGF0YSwgc3RhcnQsIGVuZCk7CiAgICBzeW1ib2xzW2N1cnJlbnRTZWdtZW50XSA9IGRlY29kZVN5bWJvbERpY3Rpb25hcnkoZGljdGlvbmFyeS5odWZmbWFuLCBkaWN0aW9uYXJ5LnJlZmluZW1lbnQsIGlucHV0U3ltYm9scywgZGljdGlvbmFyeS5udW1iZXJPZk5ld1N5bWJvbHMsIGRpY3Rpb25hcnkubnVtYmVyT2ZFeHBvcnRlZFN5bWJvbHMsIGh1ZmZtYW5UYWJsZXMsIGRpY3Rpb25hcnkudGVtcGxhdGUsIGRpY3Rpb25hcnkuYXQsIGRpY3Rpb25hcnkucmVmaW5lbWVudFRlbXBsYXRlLCBkaWN0aW9uYXJ5LnJlZmluZW1lbnRBdCwgZGVjb2RpbmdDb250ZXh0LCBodWZmbWFuSW5wdXQpOwogIH0KICBvbkltbWVkaWF0ZVRleHRSZWdpb24ocmVnaW9uLCByZWZlcnJlZFNlZ21lbnRzLCBkYXRhLCBzdGFydCwgZW5kKSB7CiAgICBjb25zdCByZWdpb25JbmZvID0gcmVnaW9uLmluZm87CiAgICBsZXQgaHVmZm1hblRhYmxlcywgaHVmZm1hbklucHV0OwogICAgY29uc3Qgc3ltYm9scyA9IHRoaXMuc3ltYm9sczsKICAgIGNvbnN0IGlucHV0U3ltYm9scyA9IFtdOwogICAgZm9yIChjb25zdCByZWZlcnJlZFNlZ21lbnQgb2YgcmVmZXJyZWRTZWdtZW50cykgewogICAgICBjb25zdCByZWZlcnJlZFN5bWJvbHMgPSBzeW1ib2xzW3JlZmVycmVkU2VnbWVudF07CiAgICAgIGlmIChyZWZlcnJlZFN5bWJvbHMpIHsKICAgICAgICBpbnB1dFN5bWJvbHMucHVzaCguLi5yZWZlcnJlZFN5bWJvbHMpOwogICAgICB9CiAgICB9CiAgICBjb25zdCBzeW1ib2xDb2RlTGVuZ3RoID0gbG9nMihpbnB1dFN5bWJvbHMubGVuZ3RoKTsKICAgIGlmIChyZWdpb24uaHVmZm1hbikgewogICAgICBodWZmbWFuSW5wdXQgPSBuZXcgUmVhZGVyKGRhdGEsIHN0YXJ0LCBlbmQpOwogICAgICBodWZmbWFuVGFibGVzID0gZ2V0VGV4dFJlZ2lvbkh1ZmZtYW5UYWJsZXMocmVnaW9uLCByZWZlcnJlZFNlZ21lbnRzLCB0aGlzLmN1c3RvbVRhYmxlcywgaW5wdXRTeW1ib2xzLmxlbmd0aCwgaHVmZm1hbklucHV0KTsKICAgIH0KICAgIGNvbnN0IGRlY29kaW5nQ29udGV4dCA9IG5ldyBEZWNvZGluZ0NvbnRleHQoZGF0YSwgc3RhcnQsIGVuZCk7CiAgICBjb25zdCBiaXRtYXAgPSBkZWNvZGVUZXh0UmVnaW9uKHJlZ2lvbi5odWZmbWFuLCByZWdpb24ucmVmaW5lbWVudCwgcmVnaW9uSW5mby53aWR0aCwgcmVnaW9uSW5mby5oZWlnaHQsIHJlZ2lvbi5kZWZhdWx0UGl4ZWxWYWx1ZSwgcmVnaW9uLm51bWJlck9mU3ltYm9sSW5zdGFuY2VzLCByZWdpb24uc3RyaXBTaXplLCBpbnB1dFN5bWJvbHMsIHN5bWJvbENvZGVMZW5ndGgsIHJlZ2lvbi50cmFuc3Bvc2VkLCByZWdpb24uZHNPZmZzZXQsIHJlZ2lvbi5yZWZlcmVuY2VDb3JuZXIsIHJlZ2lvbi5jb21iaW5hdGlvbk9wZXJhdG9yLCBodWZmbWFuVGFibGVzLCByZWdpb24ucmVmaW5lbWVudFRlbXBsYXRlLCByZWdpb24ucmVmaW5lbWVudEF0LCBkZWNvZGluZ0NvbnRleHQsIHJlZ2lvbi5sb2dTdHJpcFNpemUsIGh1ZmZtYW5JbnB1dCk7CiAgICB0aGlzLmRyYXdCaXRtYXAocmVnaW9uSW5mbywgYml0bWFwKTsKICB9CiAgb25JbW1lZGlhdGVMb3NzbGVzc1RleHRSZWdpb24oKSB7CiAgICB0aGlzLm9uSW1tZWRpYXRlVGV4dFJlZ2lvbiguLi5hcmd1bWVudHMpOwogIH0KICBvblBhdHRlcm5EaWN0aW9uYXJ5KGRpY3Rpb25hcnksIGN1cnJlbnRTZWdtZW50LCBkYXRhLCBzdGFydCwgZW5kKSB7CiAgICBsZXQgcGF0dGVybnMgPSB0aGlzLnBhdHRlcm5zOwogICAgaWYgKCFwYXR0ZXJucykgewogICAgICB0aGlzLnBhdHRlcm5zID0gcGF0dGVybnMgPSB7fTsKICAgIH0KICAgIGNvbnN0IGRlY29kaW5nQ29udGV4dCA9IG5ldyBEZWNvZGluZ0NvbnRleHQoZGF0YSwgc3RhcnQsIGVuZCk7CiAgICBwYXR0ZXJuc1tjdXJyZW50U2VnbWVudF0gPSBkZWNvZGVQYXR0ZXJuRGljdGlvbmFyeShkaWN0aW9uYXJ5Lm1tciwgZGljdGlvbmFyeS5wYXR0ZXJuV2lkdGgsIGRpY3Rpb25hcnkucGF0dGVybkhlaWdodCwgZGljdGlvbmFyeS5tYXhQYXR0ZXJuSW5kZXgsIGRpY3Rpb25hcnkudGVtcGxhdGUsIGRlY29kaW5nQ29udGV4dCk7CiAgfQogIG9uSW1tZWRpYXRlSGFsZnRvbmVSZWdpb24ocmVnaW9uLCByZWZlcnJlZFNlZ21lbnRzLCBkYXRhLCBzdGFydCwgZW5kKSB7CiAgICBjb25zdCBwYXR0ZXJucyA9IHRoaXMucGF0dGVybnNbcmVmZXJyZWRTZWdtZW50c1swXV07CiAgICBjb25zdCByZWdpb25JbmZvID0gcmVnaW9uLmluZm87CiAgICBjb25zdCBkZWNvZGluZ0NvbnRleHQgPSBuZXcgRGVjb2RpbmdDb250ZXh0KGRhdGEsIHN0YXJ0LCBlbmQpOwogICAgY29uc3QgYml0bWFwID0gZGVjb2RlSGFsZnRvbmVSZWdpb24ocmVnaW9uLm1tciwgcGF0dGVybnMsIHJlZ2lvbi50ZW1wbGF0ZSwgcmVnaW9uSW5mby53aWR0aCwgcmVnaW9uSW5mby5oZWlnaHQsIHJlZ2lvbi5kZWZhdWx0UGl4ZWxWYWx1ZSwgcmVnaW9uLmVuYWJsZVNraXAsIHJlZ2lvbi5jb21iaW5hdGlvbk9wZXJhdG9yLCByZWdpb24uZ3JpZFdpZHRoLCByZWdpb24uZ3JpZEhlaWdodCwgcmVnaW9uLmdyaWRPZmZzZXRYLCByZWdpb24uZ3JpZE9mZnNldFksIHJlZ2lvbi5ncmlkVmVjdG9yWCwgcmVnaW9uLmdyaWRWZWN0b3JZLCBkZWNvZGluZ0NvbnRleHQpOwogICAgdGhpcy5kcmF3Qml0bWFwKHJlZ2lvbkluZm8sIGJpdG1hcCk7CiAgfQogIG9uSW1tZWRpYXRlTG9zc2xlc3NIYWxmdG9uZVJlZ2lvbigpIHsKICAgIHRoaXMub25JbW1lZGlhdGVIYWxmdG9uZVJlZ2lvbiguLi5hcmd1bWVudHMpOwogIH0KICBvblRhYmxlcyhjdXJyZW50U2VnbWVudCwgZGF0YSwgc3RhcnQsIGVuZCkgewogICAgbGV0IGN1c3RvbVRhYmxlcyA9IHRoaXMuY3VzdG9tVGFibGVzOwogICAgaWYgKCFjdXN0b21UYWJsZXMpIHsKICAgICAgdGhpcy5jdXN0b21UYWJsZXMgPSBjdXN0b21UYWJsZXMgPSB7fTsKICAgIH0KICAgIGN1c3RvbVRhYmxlc1tjdXJyZW50U2VnbWVudF0gPSBkZWNvZGVUYWJsZXNTZWdtZW50KGRhdGEsIHN0YXJ0LCBlbmQpOwogIH0KfQpjbGFzcyBIdWZmbWFuTGluZSB7CiAgY29uc3RydWN0b3IobGluZURhdGEpIHsKICAgIGlmIChsaW5lRGF0YS5sZW5ndGggPT09IDIpIHsKICAgICAgdGhpcy5pc09PQiA9IHRydWU7CiAgICAgIHRoaXMucmFuZ2VMb3cgPSAwOwogICAgICB0aGlzLnByZWZpeExlbmd0aCA9IGxpbmVEYXRhWzBdOwogICAgICB0aGlzLnJhbmdlTGVuZ3RoID0gMDsKICAgICAgdGhpcy5wcmVmaXhDb2RlID0gbGluZURhdGFbMV07CiAgICAgIHRoaXMuaXNMb3dlclJhbmdlID0gZmFsc2U7CiAgICB9IGVsc2UgewogICAgICB0aGlzLmlzT09CID0gZmFsc2U7CiAgICAgIHRoaXMucmFuZ2VMb3cgPSBsaW5lRGF0YVswXTsKICAgICAgdGhpcy5wcmVmaXhMZW5ndGggPSBsaW5lRGF0YVsxXTsKICAgICAgdGhpcy5yYW5nZUxlbmd0aCA9IGxpbmVEYXRhWzJdOwogICAgICB0aGlzLnByZWZpeENvZGUgPSBsaW5lRGF0YVszXTsKICAgICAgdGhpcy5pc0xvd2VyUmFuZ2UgPSBsaW5lRGF0YVs0XSA9PT0gImxvd2VyIjsKICAgIH0KICB9Cn0KY2xhc3MgSHVmZm1hblRyZWVOb2RlIHsKICBjb25zdHJ1Y3RvcihsaW5lKSB7CiAgICB0aGlzLmNoaWxkcmVuID0gW107CiAgICBpZiAobGluZSkgewogICAgICB0aGlzLmlzTGVhZiA9IHRydWU7CiAgICAgIHRoaXMucmFuZ2VMZW5ndGggPSBsaW5lLnJhbmdlTGVuZ3RoOwogICAgICB0aGlzLnJhbmdlTG93ID0gbGluZS5yYW5nZUxvdzsKICAgICAgdGhpcy5pc0xvd2VyUmFuZ2UgPSBsaW5lLmlzTG93ZXJSYW5nZTsKICAgICAgdGhpcy5pc09PQiA9IGxpbmUuaXNPT0I7CiAgICB9IGVsc2UgewogICAgICB0aGlzLmlzTGVhZiA9IGZhbHNlOwogICAgfQogIH0KICBidWlsZFRyZWUobGluZSwgc2hpZnQpIHsKICAgIGNvbnN0IGJpdCA9IGxpbmUucHJlZml4Q29kZSA+PiBzaGlmdCAmIDE7CiAgICBpZiAoc2hpZnQgPD0gMCkgewogICAgICB0aGlzLmNoaWxkcmVuW2JpdF0gPSBuZXcgSHVmZm1hblRyZWVOb2RlKGxpbmUpOwogICAgfSBlbHNlIHsKICAgICAgbGV0IG5vZGUgPSB0aGlzLmNoaWxkcmVuW2JpdF07CiAgICAgIGlmICghbm9kZSkgewogICAgICAgIHRoaXMuY2hpbGRyZW5bYml0XSA9IG5vZGUgPSBuZXcgSHVmZm1hblRyZWVOb2RlKG51bGwpOwogICAgICB9CiAgICAgIG5vZGUuYnVpbGRUcmVlKGxpbmUsIHNoaWZ0IC0gMSk7CiAgICB9CiAgfQogIGRlY29kZU5vZGUocmVhZGVyKSB7CiAgICBpZiAodGhpcy5pc0xlYWYpIHsKICAgICAgaWYgKHRoaXMuaXNPT0IpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBjb25zdCBodE9mZnNldCA9IHJlYWRlci5yZWFkQml0cyh0aGlzLnJhbmdlTGVuZ3RoKTsKICAgICAgcmV0dXJuIHRoaXMucmFuZ2VMb3cgKyAodGhpcy5pc0xvd2VyUmFuZ2UgPyAtaHRPZmZzZXQgOiBodE9mZnNldCk7CiAgICB9CiAgICBjb25zdCBub2RlID0gdGhpcy5jaGlsZHJlbltyZWFkZXIucmVhZEJpdCgpXTsKICAgIGlmICghbm9kZSkgewogICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcigiaW52YWxpZCBIdWZmbWFuIGRhdGEiKTsKICAgIH0KICAgIHJldHVybiBub2RlLmRlY29kZU5vZGUocmVhZGVyKTsKICB9Cn0KY2xhc3MgSHVmZm1hblRhYmxlIHsKICBjb25zdHJ1Y3RvcihsaW5lcywgcHJlZml4Q29kZXNEb25lKSB7CiAgICBpZiAoIXByZWZpeENvZGVzRG9uZSkgewogICAgICB0aGlzLmFzc2lnblByZWZpeENvZGVzKGxpbmVzKTsKICAgIH0KICAgIHRoaXMucm9vdE5vZGUgPSBuZXcgSHVmZm1hblRyZWVOb2RlKG51bGwpOwogICAgZm9yIChsZXQgaSA9IDAsIGlpID0gbGluZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICBjb25zdCBsaW5lID0gbGluZXNbaV07CiAgICAgIGlmIChsaW5lLnByZWZpeExlbmd0aCA+IDApIHsKICAgICAgICB0aGlzLnJvb3ROb2RlLmJ1aWxkVHJlZShsaW5lLCBsaW5lLnByZWZpeExlbmd0aCAtIDEpOwogICAgICB9CiAgICB9CiAgfQogIGRlY29kZShyZWFkZXIpIHsKICAgIHJldHVybiB0aGlzLnJvb3ROb2RlLmRlY29kZU5vZGUocmVhZGVyKTsKICB9CiAgYXNzaWduUHJlZml4Q29kZXMobGluZXMpIHsKICAgIGNvbnN0IGxpbmVzTGVuZ3RoID0gbGluZXMubGVuZ3RoOwogICAgbGV0IHByZWZpeExlbmd0aE1heCA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzTGVuZ3RoOyBpKyspIHsKICAgICAgcHJlZml4TGVuZ3RoTWF4ID0gTWF0aC5tYXgocHJlZml4TGVuZ3RoTWF4LCBsaW5lc1tpXS5wcmVmaXhMZW5ndGgpOwogICAgfQogICAgY29uc3QgaGlzdG9ncmFtID0gbmV3IFVpbnQzMkFycmF5KHByZWZpeExlbmd0aE1heCArIDEpOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lc0xlbmd0aDsgaSsrKSB7CiAgICAgIGhpc3RvZ3JhbVtsaW5lc1tpXS5wcmVmaXhMZW5ndGhdKys7CiAgICB9CiAgICBsZXQgY3VycmVudExlbmd0aCA9IDEsCiAgICAgIGZpcnN0Q29kZSA9IDAsCiAgICAgIGN1cnJlbnRDb2RlLAogICAgICBjdXJyZW50VGVtcCwKICAgICAgbGluZTsKICAgIGhpc3RvZ3JhbVswXSA9IDA7CiAgICB3aGlsZSAoY3VycmVudExlbmd0aCA8PSBwcmVmaXhMZW5ndGhNYXgpIHsKICAgICAgZmlyc3RDb2RlID0gZmlyc3RDb2RlICsgaGlzdG9ncmFtW2N1cnJlbnRMZW5ndGggLSAxXSA8PCAxOwogICAgICBjdXJyZW50Q29kZSA9IGZpcnN0Q29kZTsKICAgICAgY3VycmVudFRlbXAgPSAwOwogICAgICB3aGlsZSAoY3VycmVudFRlbXAgPCBsaW5lc0xlbmd0aCkgewogICAgICAgIGxpbmUgPSBsaW5lc1tjdXJyZW50VGVtcF07CiAgICAgICAgaWYgKGxpbmUucHJlZml4TGVuZ3RoID09PSBjdXJyZW50TGVuZ3RoKSB7CiAgICAgICAgICBsaW5lLnByZWZpeENvZGUgPSBjdXJyZW50Q29kZTsKICAgICAgICAgIGN1cnJlbnRDb2RlKys7CiAgICAgICAgfQogICAgICAgIGN1cnJlbnRUZW1wKys7CiAgICAgIH0KICAgICAgY3VycmVudExlbmd0aCsrOwogICAgfQogIH0KfQpmdW5jdGlvbiBkZWNvZGVUYWJsZXNTZWdtZW50KGRhdGEsIHN0YXJ0LCBlbmQpIHsKICBjb25zdCBmbGFncyA9IGRhdGFbc3RhcnRdOwogIGNvbnN0IGxvd2VzdFZhbHVlID0gcmVhZFVpbnQzMihkYXRhLCBzdGFydCArIDEpICYgMHhmZmZmZmZmZjsKICBjb25zdCBoaWdoZXN0VmFsdWUgPSByZWFkVWludDMyKGRhdGEsIHN0YXJ0ICsgNSkgJiAweGZmZmZmZmZmOwogIGNvbnN0IHJlYWRlciA9IG5ldyBSZWFkZXIoZGF0YSwgc3RhcnQgKyA5LCBlbmQpOwogIGNvbnN0IHByZWZpeFNpemVCaXRzID0gKGZsYWdzID4+IDEgJiA3KSArIDE7CiAgY29uc3QgcmFuZ2VTaXplQml0cyA9IChmbGFncyA+PiA0ICYgNykgKyAxOwogIGNvbnN0IGxpbmVzID0gW107CiAgbGV0IHByZWZpeExlbmd0aCwKICAgIHJhbmdlTGVuZ3RoLAogICAgY3VycmVudFJhbmdlTG93ID0gbG93ZXN0VmFsdWU7CiAgZG8gewogICAgcHJlZml4TGVuZ3RoID0gcmVhZGVyLnJlYWRCaXRzKHByZWZpeFNpemVCaXRzKTsKICAgIHJhbmdlTGVuZ3RoID0gcmVhZGVyLnJlYWRCaXRzKHJhbmdlU2l6ZUJpdHMpOwogICAgbGluZXMucHVzaChuZXcgSHVmZm1hbkxpbmUoW2N1cnJlbnRSYW5nZUxvdywgcHJlZml4TGVuZ3RoLCByYW5nZUxlbmd0aCwgMF0pKTsKICAgIGN1cnJlbnRSYW5nZUxvdyArPSAxIDw8IHJhbmdlTGVuZ3RoOwogIH0gd2hpbGUgKGN1cnJlbnRSYW5nZUxvdyA8IGhpZ2hlc3RWYWx1ZSk7CiAgcHJlZml4TGVuZ3RoID0gcmVhZGVyLnJlYWRCaXRzKHByZWZpeFNpemVCaXRzKTsKICBsaW5lcy5wdXNoKG5ldyBIdWZmbWFuTGluZShbbG93ZXN0VmFsdWUgLSAxLCBwcmVmaXhMZW5ndGgsIDMyLCAwLCAibG93ZXIiXSkpOwogIHByZWZpeExlbmd0aCA9IHJlYWRlci5yZWFkQml0cyhwcmVmaXhTaXplQml0cyk7CiAgbGluZXMucHVzaChuZXcgSHVmZm1hbkxpbmUoW2hpZ2hlc3RWYWx1ZSwgcHJlZml4TGVuZ3RoLCAzMiwgMF0pKTsKICBpZiAoZmxhZ3MgJiAxKSB7CiAgICBwcmVmaXhMZW5ndGggPSByZWFkZXIucmVhZEJpdHMocHJlZml4U2l6ZUJpdHMpOwogICAgbGluZXMucHVzaChuZXcgSHVmZm1hbkxpbmUoW3ByZWZpeExlbmd0aCwgMF0pKTsKICB9CiAgcmV0dXJuIG5ldyBIdWZmbWFuVGFibGUobGluZXMsIGZhbHNlKTsKfQpjb25zdCBzdGFuZGFyZFRhYmxlc0NhY2hlID0ge307CmZ1bmN0aW9uIGdldFN0YW5kYXJkVGFibGUobnVtYmVyKSB7CiAgbGV0IHRhYmxlID0gc3RhbmRhcmRUYWJsZXNDYWNoZVtudW1iZXJdOwogIGlmICh0YWJsZSkgewogICAgcmV0dXJuIHRhYmxlOwogIH0KICBsZXQgbGluZXM7CiAgc3dpdGNoIChudW1iZXIpIHsKICAgIGNhc2UgMToKICAgICAgbGluZXMgPSBbWzAsIDEsIDQsIDB4MF0sIFsxNiwgMiwgOCwgMHgyXSwgWzI3MiwgMywgMTYsIDB4Nl0sIFs2NTgwOCwgMywgMzIsIDB4N11dOwogICAgICBicmVhazsKICAgIGNhc2UgMjoKICAgICAgbGluZXMgPSBbWzAsIDEsIDAsIDB4MF0sIFsxLCAyLCAwLCAweDJdLCBbMiwgMywgMCwgMHg2XSwgWzMsIDQsIDMsIDB4ZV0sIFsxMSwgNSwgNiwgMHgxZV0sIFs3NSwgNiwgMzIsIDB4M2VdLCBbNiwgMHgzZl1dOwogICAgICBicmVhazsKICAgIGNhc2UgMzoKICAgICAgbGluZXMgPSBbWy0yNTYsIDgsIDgsIDB4ZmVdLCBbMCwgMSwgMCwgMHgwXSwgWzEsIDIsIDAsIDB4Ml0sIFsyLCAzLCAwLCAweDZdLCBbMywgNCwgMywgMHhlXSwgWzExLCA1LCA2LCAweDFlXSwgWy0yNTcsIDgsIDMyLCAweGZmLCAibG93ZXIiXSwgWzc1LCA3LCAzMiwgMHg3ZV0sIFs2LCAweDNlXV07CiAgICAgIGJyZWFrOwogICAgY2FzZSA0OgogICAgICBsaW5lcyA9IFtbMSwgMSwgMCwgMHgwXSwgWzIsIDIsIDAsIDB4Ml0sIFszLCAzLCAwLCAweDZdLCBbNCwgNCwgMywgMHhlXSwgWzEyLCA1LCA2LCAweDFlXSwgWzc2LCA1LCAzMiwgMHgxZl1dOwogICAgICBicmVhazsKICAgIGNhc2UgNToKICAgICAgbGluZXMgPSBbWy0yNTUsIDcsIDgsIDB4N2VdLCBbMSwgMSwgMCwgMHgwXSwgWzIsIDIsIDAsIDB4Ml0sIFszLCAzLCAwLCAweDZdLCBbNCwgNCwgMywgMHhlXSwgWzEyLCA1LCA2LCAweDFlXSwgWy0yNTYsIDcsIDMyLCAweDdmLCAibG93ZXIiXSwgWzc2LCA2LCAzMiwgMHgzZV1dOwogICAgICBicmVhazsKICAgIGNhc2UgNjoKICAgICAgbGluZXMgPSBbWy0yMDQ4LCA1LCAxMCwgMHgxY10sIFstMTAyNCwgNCwgOSwgMHg4XSwgWy01MTIsIDQsIDgsIDB4OV0sIFstMjU2LCA0LCA3LCAweGFdLCBbLTEyOCwgNSwgNiwgMHgxZF0sIFstNjQsIDUsIDUsIDB4MWVdLCBbLTMyLCA0LCA1LCAweGJdLCBbMCwgMiwgNywgMHgwXSwgWzEyOCwgMywgNywgMHgyXSwgWzI1NiwgMywgOCwgMHgzXSwgWzUxMiwgNCwgOSwgMHhjXSwgWzEwMjQsIDQsIDEwLCAweGRdLCBbLTIwNDksIDYsIDMyLCAweDNlLCAibG93ZXIiXSwgWzIwNDgsIDYsIDMyLCAweDNmXV07CiAgICAgIGJyZWFrOwogICAgY2FzZSA3OgogICAgICBsaW5lcyA9IFtbLTEwMjQsIDQsIDksIDB4OF0sIFstNTEyLCAzLCA4LCAweDBdLCBbLTI1NiwgNCwgNywgMHg5XSwgWy0xMjgsIDUsIDYsIDB4MWFdLCBbLTY0LCA1LCA1LCAweDFiXSwgWy0zMiwgNCwgNSwgMHhhXSwgWzAsIDQsIDUsIDB4Yl0sIFszMiwgNSwgNSwgMHgxY10sIFs2NCwgNSwgNiwgMHgxZF0sIFsxMjgsIDQsIDcsIDB4Y10sIFsyNTYsIDMsIDgsIDB4MV0sIFs1MTIsIDMsIDksIDB4Ml0sIFsxMDI0LCAzLCAxMCwgMHgzXSwgWy0xMDI1LCA1LCAzMiwgMHgxZSwgImxvd2VyIl0sIFsyMDQ4LCA1LCAzMiwgMHgxZl1dOwogICAgICBicmVhazsKICAgIGNhc2UgODoKICAgICAgbGluZXMgPSBbWy0xNSwgOCwgMywgMHhmY10sIFstNywgOSwgMSwgMHgxZmNdLCBbLTUsIDgsIDEsIDB4ZmRdLCBbLTMsIDksIDAsIDB4MWZkXSwgWy0yLCA3LCAwLCAweDdjXSwgWy0xLCA0LCAwLCAweGFdLCBbMCwgMiwgMSwgMHgwXSwgWzIsIDUsIDAsIDB4MWFdLCBbMywgNiwgMCwgMHgzYV0sIFs0LCAzLCA0LCAweDRdLCBbMjAsIDYsIDEsIDB4M2JdLCBbMjIsIDQsIDQsIDB4Yl0sIFszOCwgNCwgNSwgMHhjXSwgWzcwLCA1LCA2LCAweDFiXSwgWzEzNCwgNSwgNywgMHgxY10sIFsyNjIsIDYsIDcsIDB4M2NdLCBbMzkwLCA3LCA4LCAweDdkXSwgWzY0NiwgNiwgMTAsIDB4M2RdLCBbLTE2LCA5LCAzMiwgMHgxZmUsICJsb3dlciJdLCBbMTY3MCwgOSwgMzIsIDB4MWZmXSwgWzIsIDB4MV1dOwogICAgICBicmVhazsKICAgIGNhc2UgOToKICAgICAgbGluZXMgPSBbWy0zMSwgOCwgNCwgMHhmY10sIFstMTUsIDksIDIsIDB4MWZjXSwgWy0xMSwgOCwgMiwgMHhmZF0sIFstNywgOSwgMSwgMHgxZmRdLCBbLTUsIDcsIDEsIDB4N2NdLCBbLTMsIDQsIDEsIDB4YV0sIFstMSwgMywgMSwgMHgyXSwgWzEsIDMsIDEsIDB4M10sIFszLCA1LCAxLCAweDFhXSwgWzUsIDYsIDEsIDB4M2FdLCBbNywgMywgNSwgMHg0XSwgWzM5LCA2LCAyLCAweDNiXSwgWzQzLCA0LCA1LCAweGJdLCBbNzUsIDQsIDYsIDB4Y10sIFsxMzksIDUsIDcsIDB4MWJdLCBbMjY3LCA1LCA4LCAweDFjXSwgWzUyMywgNiwgOCwgMHgzY10sIFs3NzksIDcsIDksIDB4N2RdLCBbMTI5MSwgNiwgMTEsIDB4M2RdLCBbLTMyLCA5LCAzMiwgMHgxZmUsICJsb3dlciJdLCBbMzMzOSwgOSwgMzIsIDB4MWZmXSwgWzIsIDB4MF1dOwogICAgICBicmVhazsKICAgIGNhc2UgMTA6CiAgICAgIGxpbmVzID0gW1stMjEsIDcsIDQsIDB4N2FdLCBbLTUsIDgsIDAsIDB4ZmNdLCBbLTQsIDcsIDAsIDB4N2JdLCBbLTMsIDUsIDAsIDB4MThdLCBbLTIsIDIsIDIsIDB4MF0sIFsyLCA1LCAwLCAweDE5XSwgWzMsIDYsIDAsIDB4MzZdLCBbNCwgNywgMCwgMHg3Y10sIFs1LCA4LCAwLCAweGZkXSwgWzYsIDIsIDYsIDB4MV0sIFs3MCwgNSwgNSwgMHgxYV0sIFsxMDIsIDYsIDUsIDB4MzddLCBbMTM0LCA2LCA2LCAweDM4XSwgWzE5OCwgNiwgNywgMHgzOV0sIFszMjYsIDYsIDgsIDB4M2FdLCBbNTgyLCA2LCA5LCAweDNiXSwgWzEwOTQsIDYsIDEwLCAweDNjXSwgWzIxMTgsIDcsIDExLCAweDdkXSwgWy0yMiwgOCwgMzIsIDB4ZmUsICJsb3dlciJdLCBbNDE2NiwgOCwgMzIsIDB4ZmZdLCBbMiwgMHgyXV07CiAgICAgIGJyZWFrOwogICAgY2FzZSAxMToKICAgICAgbGluZXMgPSBbWzEsIDEsIDAsIDB4MF0sIFsyLCAyLCAxLCAweDJdLCBbNCwgNCwgMCwgMHhjXSwgWzUsIDQsIDEsIDB4ZF0sIFs3LCA1LCAxLCAweDFjXSwgWzksIDUsIDIsIDB4MWRdLCBbMTMsIDYsIDIsIDB4M2NdLCBbMTcsIDcsIDIsIDB4N2FdLCBbMjEsIDcsIDMsIDB4N2JdLCBbMjksIDcsIDQsIDB4N2NdLCBbNDUsIDcsIDUsIDB4N2RdLCBbNzcsIDcsIDYsIDB4N2VdLCBbMTQxLCA3LCAzMiwgMHg3Zl1dOwogICAgICBicmVhazsKICAgIGNhc2UgMTI6CiAgICAgIGxpbmVzID0gW1sxLCAxLCAwLCAweDBdLCBbMiwgMiwgMCwgMHgyXSwgWzMsIDMsIDEsIDB4Nl0sIFs1LCA1LCAwLCAweDFjXSwgWzYsIDUsIDEsIDB4MWRdLCBbOCwgNiwgMSwgMHgzY10sIFsxMCwgNywgMCwgMHg3YV0sIFsxMSwgNywgMSwgMHg3Yl0sIFsxMywgNywgMiwgMHg3Y10sIFsxNywgNywgMywgMHg3ZF0sIFsyNSwgNywgNCwgMHg3ZV0sIFs0MSwgOCwgNSwgMHhmZV0sIFs3MywgOCwgMzIsIDB4ZmZdXTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzOgogICAgICBsaW5lcyA9IFtbMSwgMSwgMCwgMHgwXSwgWzIsIDMsIDAsIDB4NF0sIFszLCA0LCAwLCAweGNdLCBbNCwgNSwgMCwgMHgxY10sIFs1LCA0LCAxLCAweGRdLCBbNywgMywgMywgMHg1XSwgWzE1LCA2LCAxLCAweDNhXSwgWzE3LCA2LCAyLCAweDNiXSwgWzIxLCA2LCAzLCAweDNjXSwgWzI5LCA2LCA0LCAweDNkXSwgWzQ1LCA2LCA1LCAweDNlXSwgWzc3LCA3LCA2LCAweDdlXSwgWzE0MSwgNywgMzIsIDB4N2ZdXTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0OgogICAgICBsaW5lcyA9IFtbLTIsIDMsIDAsIDB4NF0sIFstMSwgMywgMCwgMHg1XSwgWzAsIDEsIDAsIDB4MF0sIFsxLCAzLCAwLCAweDZdLCBbMiwgMywgMCwgMHg3XV07CiAgICAgIGJyZWFrOwogICAgY2FzZSAxNToKICAgICAgbGluZXMgPSBbWy0yNCwgNywgNCwgMHg3Y10sIFstOCwgNiwgMiwgMHgzY10sIFstNCwgNSwgMSwgMHgxY10sIFstMiwgNCwgMCwgMHhjXSwgWy0xLCAzLCAwLCAweDRdLCBbMCwgMSwgMCwgMHgwXSwgWzEsIDMsIDAsIDB4NV0sIFsyLCA0LCAwLCAweGRdLCBbMywgNSwgMSwgMHgxZF0sIFs1LCA2LCAyLCAweDNkXSwgWzksIDcsIDQsIDB4N2RdLCBbLTI1LCA3LCAzMiwgMHg3ZSwgImxvd2VyIl0sIFsyNSwgNywgMzIsIDB4N2ZdXTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihgc3RhbmRhcmQgdGFibGUgQi4ke251bWJlcn0gZG9lcyBub3QgZXhpc3RgKTsKICB9CiAgZm9yIChsZXQgaSA9IDAsIGlpID0gbGluZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgbGluZXNbaV0gPSBuZXcgSHVmZm1hbkxpbmUobGluZXNbaV0pOwogIH0KICB0YWJsZSA9IG5ldyBIdWZmbWFuVGFibGUobGluZXMsIHRydWUpOwogIHN0YW5kYXJkVGFibGVzQ2FjaGVbbnVtYmVyXSA9IHRhYmxlOwogIHJldHVybiB0YWJsZTsKfQpjbGFzcyBSZWFkZXIgewogIGNvbnN0cnVjdG9yKGRhdGEsIHN0YXJ0LCBlbmQpIHsKICAgIHRoaXMuZGF0YSA9IGRhdGE7CiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7CiAgICB0aGlzLmVuZCA9IGVuZDsKICAgIHRoaXMucG9zaXRpb24gPSBzdGFydDsKICAgIHRoaXMuc2hpZnQgPSAtMTsKICAgIHRoaXMuY3VycmVudEJ5dGUgPSAwOwogIH0KICByZWFkQml0KCkgewogICAgaWYgKHRoaXMuc2hpZnQgPCAwKSB7CiAgICAgIGlmICh0aGlzLnBvc2l0aW9uID49IHRoaXMuZW5kKSB7CiAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoImVuZCBvZiBkYXRhIHdoaWxlIHJlYWRpbmcgYml0Iik7CiAgICAgIH0KICAgICAgdGhpcy5jdXJyZW50Qnl0ZSA9IHRoaXMuZGF0YVt0aGlzLnBvc2l0aW9uKytdOwogICAgICB0aGlzLnNoaWZ0ID0gNzsKICAgIH0KICAgIGNvbnN0IGJpdCA9IHRoaXMuY3VycmVudEJ5dGUgPj4gdGhpcy5zaGlmdCAmIDE7CiAgICB0aGlzLnNoaWZ0LS07CiAgICByZXR1cm4gYml0OwogIH0KICByZWFkQml0cyhudW1CaXRzKSB7CiAgICBsZXQgcmVzdWx0ID0gMCwKICAgICAgaTsKICAgIGZvciAoaSA9IG51bUJpdHMgLSAxOyBpID49IDA7IGktLSkgewogICAgICByZXN1bHQgfD0gdGhpcy5yZWFkQml0KCkgPDwgaTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQogIGJ5dGVBbGlnbigpIHsKICAgIHRoaXMuc2hpZnQgPSAtMTsKICB9CiAgbmV4dCgpIHsKICAgIGlmICh0aGlzLnBvc2l0aW9uID49IHRoaXMuZW5kKSB7CiAgICAgIHJldHVybiAtMTsKICAgIH0KICAgIHJldHVybiB0aGlzLmRhdGFbdGhpcy5wb3NpdGlvbisrXTsKICB9Cn0KZnVuY3Rpb24gZ2V0Q3VzdG9tSHVmZm1hblRhYmxlKGluZGV4LCByZWZlcnJlZFRvLCBjdXN0b21UYWJsZXMpIHsKICBsZXQgY3VycmVudEluZGV4ID0gMDsKICBmb3IgKGxldCBpID0gMCwgaWkgPSByZWZlcnJlZFRvLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgIGNvbnN0IHRhYmxlID0gY3VzdG9tVGFibGVzW3JlZmVycmVkVG9baV1dOwogICAgaWYgKHRhYmxlKSB7CiAgICAgIGlmIChpbmRleCA9PT0gY3VycmVudEluZGV4KSB7CiAgICAgICAgcmV0dXJuIHRhYmxlOwogICAgICB9CiAgICAgIGN1cnJlbnRJbmRleCsrOwogICAgfQogIH0KICB0aHJvdyBuZXcgSmJpZzJFcnJvcigiY2FuJ3QgZmluZCBjdXN0b20gSHVmZm1hbiB0YWJsZSIpOwp9CmZ1bmN0aW9uIGdldFRleHRSZWdpb25IdWZmbWFuVGFibGVzKHRleHRSZWdpb24sIHJlZmVycmVkVG8sIGN1c3RvbVRhYmxlcywgbnVtYmVyT2ZTeW1ib2xzLCByZWFkZXIpIHsKICBjb25zdCBjb2RlcyA9IFtdOwogIGZvciAobGV0IGkgPSAwOyBpIDw9IDM0OyBpKyspIHsKICAgIGNvbnN0IGNvZGVMZW5ndGggPSByZWFkZXIucmVhZEJpdHMoNCk7CiAgICBjb2Rlcy5wdXNoKG5ldyBIdWZmbWFuTGluZShbaSwgY29kZUxlbmd0aCwgMCwgMF0pKTsKICB9CiAgY29uc3QgcnVuQ29kZXNUYWJsZSA9IG5ldyBIdWZmbWFuVGFibGUoY29kZXMsIGZhbHNlKTsKICBjb2Rlcy5sZW5ndGggPSAwOwogIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyT2ZTeW1ib2xzOykgewogICAgY29uc3QgY29kZUxlbmd0aCA9IHJ1bkNvZGVzVGFibGUuZGVjb2RlKHJlYWRlcik7CiAgICBpZiAoY29kZUxlbmd0aCA+PSAzMikgewogICAgICBsZXQgcmVwZWF0ZWRMZW5ndGgsIG51bWJlck9mUmVwZWF0cywgajsKICAgICAgc3dpdGNoIChjb2RlTGVuZ3RoKSB7CiAgICAgICAgY2FzZSAzMjoKICAgICAgICAgIGlmIChpID09PSAwKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKCJubyBwcmV2aW91cyB2YWx1ZSBpbiBzeW1ib2wgSUQgdGFibGUiKTsKICAgICAgICAgIH0KICAgICAgICAgIG51bWJlck9mUmVwZWF0cyA9IHJlYWRlci5yZWFkQml0cygyKSArIDM7CiAgICAgICAgICByZXBlYXRlZExlbmd0aCA9IGNvZGVzW2kgLSAxXS5wcmVmaXhMZW5ndGg7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDMzOgogICAgICAgICAgbnVtYmVyT2ZSZXBlYXRzID0gcmVhZGVyLnJlYWRCaXRzKDMpICsgMzsKICAgICAgICAgIHJlcGVhdGVkTGVuZ3RoID0gMDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMzQ6CiAgICAgICAgICBudW1iZXJPZlJlcGVhdHMgPSByZWFkZXIucmVhZEJpdHMoNykgKyAxMTsKICAgICAgICAgIHJlcGVhdGVkTGVuZ3RoID0gMDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcigiaW52YWxpZCBjb2RlIGxlbmd0aCBpbiBzeW1ib2wgSUQgdGFibGUiKTsKICAgICAgfQogICAgICBmb3IgKGogPSAwOyBqIDwgbnVtYmVyT2ZSZXBlYXRzOyBqKyspIHsKICAgICAgICBjb2Rlcy5wdXNoKG5ldyBIdWZmbWFuTGluZShbaSwgcmVwZWF0ZWRMZW5ndGgsIDAsIDBdKSk7CiAgICAgICAgaSsrOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBjb2Rlcy5wdXNoKG5ldyBIdWZmbWFuTGluZShbaSwgY29kZUxlbmd0aCwgMCwgMF0pKTsKICAgICAgaSsrOwogICAgfQogIH0KICByZWFkZXIuYnl0ZUFsaWduKCk7CiAgY29uc3Qgc3ltYm9sSURUYWJsZSA9IG5ldyBIdWZmbWFuVGFibGUoY29kZXMsIGZhbHNlKTsKICBsZXQgY3VzdG9tSW5kZXggPSAwLAogICAgdGFibGVGaXJzdFMsCiAgICB0YWJsZURlbHRhUywKICAgIHRhYmxlRGVsdGFUOwogIHN3aXRjaCAodGV4dFJlZ2lvbi5odWZmbWFuRlMpIHsKICAgIGNhc2UgMDoKICAgIGNhc2UgMToKICAgICAgdGFibGVGaXJzdFMgPSBnZXRTdGFuZGFyZFRhYmxlKHRleHRSZWdpb24uaHVmZm1hbkZTICsgNik7CiAgICAgIGJyZWFrOwogICAgY2FzZSAzOgogICAgICB0YWJsZUZpcnN0UyA9IGdldEN1c3RvbUh1ZmZtYW5UYWJsZShjdXN0b21JbmRleCwgcmVmZXJyZWRUbywgY3VzdG9tVGFibGVzKTsKICAgICAgY3VzdG9tSW5kZXgrKzsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcigiaW52YWxpZCBIdWZmbWFuIEZTIHNlbGVjdG9yIik7CiAgfQogIHN3aXRjaCAodGV4dFJlZ2lvbi5odWZmbWFuRFMpIHsKICAgIGNhc2UgMDoKICAgIGNhc2UgMToKICAgIGNhc2UgMjoKICAgICAgdGFibGVEZWx0YVMgPSBnZXRTdGFuZGFyZFRhYmxlKHRleHRSZWdpb24uaHVmZm1hbkRTICsgOCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAzOgogICAgICB0YWJsZURlbHRhUyA9IGdldEN1c3RvbUh1ZmZtYW5UYWJsZShjdXN0b21JbmRleCwgcmVmZXJyZWRUbywgY3VzdG9tVGFibGVzKTsKICAgICAgY3VzdG9tSW5kZXgrKzsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcigiaW52YWxpZCBIdWZmbWFuIERTIHNlbGVjdG9yIik7CiAgfQogIHN3aXRjaCAodGV4dFJlZ2lvbi5odWZmbWFuRFQpIHsKICAgIGNhc2UgMDoKICAgIGNhc2UgMToKICAgIGNhc2UgMjoKICAgICAgdGFibGVEZWx0YVQgPSBnZXRTdGFuZGFyZFRhYmxlKHRleHRSZWdpb24uaHVmZm1hbkRUICsgMTEpOwogICAgICBicmVhazsKICAgIGNhc2UgMzoKICAgICAgdGFibGVEZWx0YVQgPSBnZXRDdXN0b21IdWZmbWFuVGFibGUoY3VzdG9tSW5kZXgsIHJlZmVycmVkVG8sIGN1c3RvbVRhYmxlcyk7CiAgICAgIGN1c3RvbUluZGV4Kys7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoImludmFsaWQgSHVmZm1hbiBEVCBzZWxlY3RvciIpOwogIH0KICBpZiAodGV4dFJlZ2lvbi5yZWZpbmVtZW50KSB7CiAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcigicmVmaW5lbWVudCB3aXRoIEh1ZmZtYW4gaXMgbm90IHN1cHBvcnRlZCIpOwogIH0KICByZXR1cm4gewogICAgc3ltYm9sSURUYWJsZSwKICAgIHRhYmxlRmlyc3RTLAogICAgdGFibGVEZWx0YVMsCiAgICB0YWJsZURlbHRhVAogIH07Cn0KZnVuY3Rpb24gZ2V0U3ltYm9sRGljdGlvbmFyeUh1ZmZtYW5UYWJsZXMoZGljdGlvbmFyeSwgcmVmZXJyZWRUbywgY3VzdG9tVGFibGVzKSB7CiAgbGV0IGN1c3RvbUluZGV4ID0gMCwKICAgIHRhYmxlRGVsdGFIZWlnaHQsCiAgICB0YWJsZURlbHRhV2lkdGg7CiAgc3dpdGNoIChkaWN0aW9uYXJ5Lmh1ZmZtYW5ESFNlbGVjdG9yKSB7CiAgICBjYXNlIDA6CiAgICBjYXNlIDE6CiAgICAgIHRhYmxlRGVsdGFIZWlnaHQgPSBnZXRTdGFuZGFyZFRhYmxlKGRpY3Rpb25hcnkuaHVmZm1hbkRIU2VsZWN0b3IgKyA0KTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDM6CiAgICAgIHRhYmxlRGVsdGFIZWlnaHQgPSBnZXRDdXN0b21IdWZmbWFuVGFibGUoY3VzdG9tSW5kZXgsIHJlZmVycmVkVG8sIGN1c3RvbVRhYmxlcyk7CiAgICAgIGN1c3RvbUluZGV4Kys7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoImludmFsaWQgSHVmZm1hbiBESCBzZWxlY3RvciIpOwogIH0KICBzd2l0Y2ggKGRpY3Rpb25hcnkuaHVmZm1hbkRXU2VsZWN0b3IpIHsKICAgIGNhc2UgMDoKICAgIGNhc2UgMToKICAgICAgdGFibGVEZWx0YVdpZHRoID0gZ2V0U3RhbmRhcmRUYWJsZShkaWN0aW9uYXJ5Lmh1ZmZtYW5EV1NlbGVjdG9yICsgMik7CiAgICAgIGJyZWFrOwogICAgY2FzZSAzOgogICAgICB0YWJsZURlbHRhV2lkdGggPSBnZXRDdXN0b21IdWZmbWFuVGFibGUoY3VzdG9tSW5kZXgsIHJlZmVycmVkVG8sIGN1c3RvbVRhYmxlcyk7CiAgICAgIGN1c3RvbUluZGV4Kys7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoImludmFsaWQgSHVmZm1hbiBEVyBzZWxlY3RvciIpOwogIH0KICBsZXQgdGFibGVCaXRtYXBTaXplLCB0YWJsZUFnZ3JlZ2F0ZUluc3RhbmNlczsKICBpZiAoZGljdGlvbmFyeS5iaXRtYXBTaXplU2VsZWN0b3IpIHsKICAgIHRhYmxlQml0bWFwU2l6ZSA9IGdldEN1c3RvbUh1ZmZtYW5UYWJsZShjdXN0b21JbmRleCwgcmVmZXJyZWRUbywgY3VzdG9tVGFibGVzKTsKICAgIGN1c3RvbUluZGV4Kys7CiAgfSBlbHNlIHsKICAgIHRhYmxlQml0bWFwU2l6ZSA9IGdldFN0YW5kYXJkVGFibGUoMSk7CiAgfQogIGlmIChkaWN0aW9uYXJ5LmFnZ3JlZ2F0aW9uSW5zdGFuY2VzU2VsZWN0b3IpIHsKICAgIHRhYmxlQWdncmVnYXRlSW5zdGFuY2VzID0gZ2V0Q3VzdG9tSHVmZm1hblRhYmxlKGN1c3RvbUluZGV4LCByZWZlcnJlZFRvLCBjdXN0b21UYWJsZXMpOwogIH0gZWxzZSB7CiAgICB0YWJsZUFnZ3JlZ2F0ZUluc3RhbmNlcyA9IGdldFN0YW5kYXJkVGFibGUoMSk7CiAgfQogIHJldHVybiB7CiAgICB0YWJsZURlbHRhSGVpZ2h0LAogICAgdGFibGVEZWx0YVdpZHRoLAogICAgdGFibGVCaXRtYXBTaXplLAogICAgdGFibGVBZ2dyZWdhdGVJbnN0YW5jZXMKICB9Owp9CmZ1bmN0aW9uIHJlYWRVbmNvbXByZXNzZWRCaXRtYXAocmVhZGVyLCB3aWR0aCwgaGVpZ2h0KSB7CiAgY29uc3QgYml0bWFwID0gW107CiAgZm9yIChsZXQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgewogICAgY29uc3Qgcm93ID0gbmV3IFVpbnQ4QXJyYXkod2lkdGgpOwogICAgYml0bWFwLnB1c2gocm93KTsKICAgIGZvciAobGV0IHggPSAwOyB4IDwgd2lkdGg7IHgrKykgewogICAgICByb3dbeF0gPSByZWFkZXIucmVhZEJpdCgpOwogICAgfQogICAgcmVhZGVyLmJ5dGVBbGlnbigpOwogIH0KICByZXR1cm4gYml0bWFwOwp9CmZ1bmN0aW9uIGRlY29kZU1NUkJpdG1hcChpbnB1dCwgd2lkdGgsIGhlaWdodCwgZW5kT2ZCbG9jaykgewogIGNvbnN0IHBhcmFtcyA9IHsKICAgIEs6IC0xLAogICAgQ29sdW1uczogd2lkdGgsCiAgICBSb3dzOiBoZWlnaHQsCiAgICBCbGFja0lzMTogdHJ1ZSwKICAgIEVuZE9mQmxvY2s6IGVuZE9mQmxvY2sKICB9OwogIGNvbnN0IGRlY29kZXIgPSBuZXcgQ0NJVFRGYXhEZWNvZGVyKGlucHV0LCBwYXJhbXMpOwogIGNvbnN0IGJpdG1hcCA9IFtdOwogIGxldCBjdXJyZW50Qnl0ZSwKICAgIGVvZiA9IGZhbHNlOwogIGZvciAobGV0IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKICAgIGNvbnN0IHJvdyA9IG5ldyBVaW50OEFycmF5KHdpZHRoKTsKICAgIGJpdG1hcC5wdXNoKHJvdyk7CiAgICBsZXQgc2hpZnQgPSAtMTsKICAgIGZvciAobGV0IHggPSAwOyB4IDwgd2lkdGg7IHgrKykgewogICAgICBpZiAoc2hpZnQgPCAwKSB7CiAgICAgICAgY3VycmVudEJ5dGUgPSBkZWNvZGVyLnJlYWROZXh0Q2hhcigpOwogICAgICAgIGlmIChjdXJyZW50Qnl0ZSA9PT0gLTEpIHsKICAgICAgICAgIGN1cnJlbnRCeXRlID0gMDsKICAgICAgICAgIGVvZiA9IHRydWU7CiAgICAgICAgfQogICAgICAgIHNoaWZ0ID0gNzsKICAgICAgfQogICAgICByb3dbeF0gPSBjdXJyZW50Qnl0ZSA+PiBzaGlmdCAmIDE7CiAgICAgIHNoaWZ0LS07CiAgICB9CiAgfQogIGlmIChlbmRPZkJsb2NrICYmICFlb2YpIHsKICAgIGNvbnN0IGxvb2tGb3JFT0ZMaW1pdCA9IDU7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxvb2tGb3JFT0ZMaW1pdDsgaSsrKSB7CiAgICAgIGlmIChkZWNvZGVyLnJlYWROZXh0Q2hhcigpID09PSAtMSkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgfQogIHJldHVybiBiaXRtYXA7Cn0KY2xhc3MgSmJpZzJJbWFnZSB7CiAgcGFyc2VDaHVua3MoY2h1bmtzKSB7CiAgICByZXR1cm4gcGFyc2VKYmlnMkNodW5rcyhjaHVua3MpOwogIH0KICBwYXJzZShkYXRhKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZDogSmJpZzJJbWFnZS5wYXJzZSIpOwogIH0KfQoKOy8vIC4vc3JjL2NvcmUvamJpZzJfc3RyZWFtLmpzCgoKCgoKY2xhc3MgSmJpZzJTdHJlYW0gZXh0ZW5kcyBEZWNvZGVTdHJlYW0gewogIGNvbnN0cnVjdG9yKHN0cmVhbSwgbWF5YmVMZW5ndGgsIHBhcmFtcykgewogICAgc3VwZXIobWF5YmVMZW5ndGgpOwogICAgdGhpcy5zdHJlYW0gPSBzdHJlYW07CiAgICB0aGlzLmRpY3QgPSBzdHJlYW0uZGljdDsKICAgIHRoaXMubWF5YmVMZW5ndGggPSBtYXliZUxlbmd0aDsKICAgIHRoaXMucGFyYW1zID0gcGFyYW1zOwogIH0KICBnZXQgYnl0ZXMoKSB7CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJieXRlcyIsIHRoaXMuc3RyZWFtLmdldEJ5dGVzKHRoaXMubWF5YmVMZW5ndGgpKTsKICB9CiAgZW5zdXJlQnVmZmVyKHJlcXVlc3RlZCkge30KICByZWFkQmxvY2soKSB7CiAgICB0aGlzLmRlY29kZUltYWdlKCk7CiAgfQogIGRlY29kZUltYWdlKGJ5dGVzKSB7CiAgICBpZiAodGhpcy5lb2YpIHsKICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyOwogICAgfQogICAgYnl0ZXMgfHw9IHRoaXMuYnl0ZXM7CiAgICBjb25zdCBqYmlnMkltYWdlID0gbmV3IEpiaWcySW1hZ2UoKTsKICAgIGNvbnN0IGNodW5rcyA9IFtdOwogICAgaWYgKHRoaXMucGFyYW1zIGluc3RhbmNlb2YgRGljdCkgewogICAgICBjb25zdCBnbG9iYWxzU3RyZWFtID0gdGhpcy5wYXJhbXMuZ2V0KCJKQklHMkdsb2JhbHMiKTsKICAgICAgaWYgKGdsb2JhbHNTdHJlYW0gaW5zdGFuY2VvZiBCYXNlU3RyZWFtKSB7CiAgICAgICAgY29uc3QgZ2xvYmFscyA9IGdsb2JhbHNTdHJlYW0uZ2V0Qnl0ZXMoKTsKICAgICAgICBjaHVua3MucHVzaCh7CiAgICAgICAgICBkYXRhOiBnbG9iYWxzLAogICAgICAgICAgc3RhcnQ6IDAsCiAgICAgICAgICBlbmQ6IGdsb2JhbHMubGVuZ3RoCiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIGNodW5rcy5wdXNoKHsKICAgICAgZGF0YTogYnl0ZXMsCiAgICAgIHN0YXJ0OiAwLAogICAgICBlbmQ6IGJ5dGVzLmxlbmd0aAogICAgfSk7CiAgICBjb25zdCBkYXRhID0gamJpZzJJbWFnZS5wYXJzZUNodW5rcyhjaHVua3MpOwogICAgY29uc3QgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhTGVuZ3RoOyBpKyspIHsKICAgICAgZGF0YVtpXSBePSAweGZmOwogICAgfQogICAgdGhpcy5idWZmZXIgPSBkYXRhOwogICAgdGhpcy5idWZmZXJMZW5ndGggPSBkYXRhTGVuZ3RoOwogICAgdGhpcy5lb2YgPSB0cnVlOwogICAgcmV0dXJuIHRoaXMuYnVmZmVyOwogIH0KICBnZXQgY2FuQXN5bmNEZWNvZGVJbWFnZUZyb21CdWZmZXIoKSB7CiAgICByZXR1cm4gdGhpcy5zdHJlYW0uaXNBc3luYzsKICB9Cn0KCjsvLyAuL3NyYy9jb3JlL2pweF9zdHJlYW0uanMKCgoKY2xhc3MgSnB4U3RyZWFtIGV4dGVuZHMgRGVjb2RlU3RyZWFtIHsKICBjb25zdHJ1Y3RvcihzdHJlYW0sIG1heWJlTGVuZ3RoLCBwYXJhbXMpIHsKICAgIHN1cGVyKG1heWJlTGVuZ3RoKTsKICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtOwogICAgdGhpcy5kaWN0ID0gc3RyZWFtLmRpY3Q7CiAgICB0aGlzLm1heWJlTGVuZ3RoID0gbWF5YmVMZW5ndGg7CiAgICB0aGlzLnBhcmFtcyA9IHBhcmFtczsKICB9CiAgZ2V0IGJ5dGVzKCkgewogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAiYnl0ZXMiLCB0aGlzLnN0cmVhbS5nZXRCeXRlcyh0aGlzLm1heWJlTGVuZ3RoKSk7CiAgfQogIGVuc3VyZUJ1ZmZlcihyZXF1ZXN0ZWQpIHt9CiAgcmVhZEJsb2NrKGRlY29kZXJPcHRpb25zKSB7CiAgICB1bnJlYWNoYWJsZSgiSnB4U3RyZWFtLnJlYWRCbG9jayIpOwogIH0KICBnZXQgaXNBc3luY0RlY29kZXIoKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgYXN5bmMgZGVjb2RlSW1hZ2UoYnl0ZXMsIGRlY29kZXJPcHRpb25zKSB7CiAgICBpZiAodGhpcy5lb2YpIHsKICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyOwogICAgfQogICAgYnl0ZXMgfHw9IHRoaXMuYnl0ZXM7CiAgICB0aGlzLmJ1ZmZlciA9IGF3YWl0IEpweEltYWdlLmRlY29kZShieXRlcywgZGVjb2Rlck9wdGlvbnMpOwogICAgdGhpcy5idWZmZXJMZW5ndGggPSB0aGlzLmJ1ZmZlci5sZW5ndGg7CiAgICB0aGlzLmVvZiA9IHRydWU7CiAgICByZXR1cm4gdGhpcy5idWZmZXI7CiAgfQogIGdldCBjYW5Bc3luY0RlY29kZUltYWdlRnJvbUJ1ZmZlcigpIHsKICAgIHJldHVybiB0aGlzLnN0cmVhbS5pc0FzeW5jOwogIH0KfQoKOy8vIC4vc3JjL2NvcmUvbHp3X3N0cmVhbS5qcwoKY2xhc3MgTFpXU3RyZWFtIGV4dGVuZHMgRGVjb2RlU3RyZWFtIHsKICBjb25zdHJ1Y3RvcihzdHIsIG1heWJlTGVuZ3RoLCBlYXJseUNoYW5nZSkgewogICAgc3VwZXIobWF5YmVMZW5ndGgpOwogICAgdGhpcy5zdHIgPSBzdHI7CiAgICB0aGlzLmRpY3QgPSBzdHIuZGljdDsKICAgIHRoaXMuY2FjaGVkRGF0YSA9IDA7CiAgICB0aGlzLmJpdHNDYWNoZWQgPSAwOwogICAgY29uc3QgbWF4THp3RGljdGlvbmFyeVNpemUgPSA0MDk2OwogICAgY29uc3QgbHp3U3RhdGUgPSB7CiAgICAgIGVhcmx5Q2hhbmdlLAogICAgICBjb2RlTGVuZ3RoOiA5LAogICAgICBuZXh0Q29kZTogMjU4LAogICAgICBkaWN0aW9uYXJ5VmFsdWVzOiBuZXcgVWludDhBcnJheShtYXhMendEaWN0aW9uYXJ5U2l6ZSksCiAgICAgIGRpY3Rpb25hcnlMZW5ndGhzOiBuZXcgVWludDE2QXJyYXkobWF4THp3RGljdGlvbmFyeVNpemUpLAogICAgICBkaWN0aW9uYXJ5UHJldkNvZGVzOiBuZXcgVWludDE2QXJyYXkobWF4THp3RGljdGlvbmFyeVNpemUpLAogICAgICBjdXJyZW50U2VxdWVuY2U6IG5ldyBVaW50OEFycmF5KG1heEx6d0RpY3Rpb25hcnlTaXplKSwKICAgICAgY3VycmVudFNlcXVlbmNlTGVuZ3RoOiAwCiAgICB9OwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyNTY7ICsraSkgewogICAgICBsendTdGF0ZS5kaWN0aW9uYXJ5VmFsdWVzW2ldID0gaTsKICAgICAgbHp3U3RhdGUuZGljdGlvbmFyeUxlbmd0aHNbaV0gPSAxOwogICAgfQogICAgdGhpcy5sendTdGF0ZSA9IGx6d1N0YXRlOwogIH0KICByZWFkQml0cyhuKSB7CiAgICBsZXQgYml0c0NhY2hlZCA9IHRoaXMuYml0c0NhY2hlZDsKICAgIGxldCBjYWNoZWREYXRhID0gdGhpcy5jYWNoZWREYXRhOwogICAgd2hpbGUgKGJpdHNDYWNoZWQgPCBuKSB7CiAgICAgIGNvbnN0IGMgPSB0aGlzLnN0ci5nZXRCeXRlKCk7CiAgICAgIGlmIChjID09PSAtMSkgewogICAgICAgIHRoaXMuZW9mID0gdHJ1ZTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBjYWNoZWREYXRhID0gY2FjaGVkRGF0YSA8PCA4IHwgYzsKICAgICAgYml0c0NhY2hlZCArPSA4OwogICAgfQogICAgdGhpcy5iaXRzQ2FjaGVkID0gYml0c0NhY2hlZCAtPSBuOwogICAgdGhpcy5jYWNoZWREYXRhID0gY2FjaGVkRGF0YTsKICAgIHRoaXMubGFzdENvZGUgPSBudWxsOwogICAgcmV0dXJuIGNhY2hlZERhdGEgPj4+IGJpdHNDYWNoZWQgJiAoMSA8PCBuKSAtIDE7CiAgfQogIHJlYWRCbG9jaygpIHsKICAgIGNvbnN0IGJsb2NrU2l6ZSA9IDUxMiwKICAgICAgZGVjb2RlZFNpemVEZWx0YSA9IGJsb2NrU2l6ZTsKICAgIGxldCBlc3RpbWF0ZWREZWNvZGVkU2l6ZSA9IGJsb2NrU2l6ZSAqIDI7CiAgICBsZXQgaSwgaiwgcTsKICAgIGNvbnN0IGx6d1N0YXRlID0gdGhpcy5sendTdGF0ZTsKICAgIGlmICghbHp3U3RhdGUpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgZWFybHlDaGFuZ2UgPSBsendTdGF0ZS5lYXJseUNoYW5nZTsKICAgIGxldCBuZXh0Q29kZSA9IGx6d1N0YXRlLm5leHRDb2RlOwogICAgY29uc3QgZGljdGlvbmFyeVZhbHVlcyA9IGx6d1N0YXRlLmRpY3Rpb25hcnlWYWx1ZXM7CiAgICBjb25zdCBkaWN0aW9uYXJ5TGVuZ3RocyA9IGx6d1N0YXRlLmRpY3Rpb25hcnlMZW5ndGhzOwogICAgY29uc3QgZGljdGlvbmFyeVByZXZDb2RlcyA9IGx6d1N0YXRlLmRpY3Rpb25hcnlQcmV2Q29kZXM7CiAgICBsZXQgY29kZUxlbmd0aCA9IGx6d1N0YXRlLmNvZGVMZW5ndGg7CiAgICBsZXQgcHJldkNvZGUgPSBsendTdGF0ZS5wcmV2Q29kZTsKICAgIGNvbnN0IGN1cnJlbnRTZXF1ZW5jZSA9IGx6d1N0YXRlLmN1cnJlbnRTZXF1ZW5jZTsKICAgIGxldCBjdXJyZW50U2VxdWVuY2VMZW5ndGggPSBsendTdGF0ZS5jdXJyZW50U2VxdWVuY2VMZW5ndGg7CiAgICBsZXQgZGVjb2RlZExlbmd0aCA9IDA7CiAgICBsZXQgY3VycmVudEJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyTGVuZ3RoOwogICAgbGV0IGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKHRoaXMuYnVmZmVyTGVuZ3RoICsgZXN0aW1hdGVkRGVjb2RlZFNpemUpOwogICAgZm9yIChpID0gMDsgaSA8IGJsb2NrU2l6ZTsgaSsrKSB7CiAgICAgIGNvbnN0IGNvZGUgPSB0aGlzLnJlYWRCaXRzKGNvZGVMZW5ndGgpOwogICAgICBjb25zdCBoYXNQcmV2ID0gY3VycmVudFNlcXVlbmNlTGVuZ3RoID4gMDsKICAgICAgaWYgKGNvZGUgPCAyNTYpIHsKICAgICAgICBjdXJyZW50U2VxdWVuY2VbMF0gPSBjb2RlOwogICAgICAgIGN1cnJlbnRTZXF1ZW5jZUxlbmd0aCA9IDE7CiAgICAgIH0gZWxzZSBpZiAoY29kZSA+PSAyNTgpIHsKICAgICAgICBpZiAoY29kZSA8IG5leHRDb2RlKSB7CiAgICAgICAgICBjdXJyZW50U2VxdWVuY2VMZW5ndGggPSBkaWN0aW9uYXJ5TGVuZ3Roc1tjb2RlXTsKICAgICAgICAgIGZvciAoaiA9IGN1cnJlbnRTZXF1ZW5jZUxlbmd0aCAtIDEsIHEgPSBjb2RlOyBqID49IDA7IGotLSkgewogICAgICAgICAgICBjdXJyZW50U2VxdWVuY2Vbal0gPSBkaWN0aW9uYXJ5VmFsdWVzW3FdOwogICAgICAgICAgICBxID0gZGljdGlvbmFyeVByZXZDb2Rlc1txXTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgY3VycmVudFNlcXVlbmNlW2N1cnJlbnRTZXF1ZW5jZUxlbmd0aCsrXSA9IGN1cnJlbnRTZXF1ZW5jZVswXTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gMjU2KSB7CiAgICAgICAgY29kZUxlbmd0aCA9IDk7CiAgICAgICAgbmV4dENvZGUgPSAyNTg7CiAgICAgICAgY3VycmVudFNlcXVlbmNlTGVuZ3RoID0gMDsKICAgICAgICBjb250aW51ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmVvZiA9IHRydWU7CiAgICAgICAgZGVsZXRlIHRoaXMubHp3U3RhdGU7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgaWYgKGhhc1ByZXYpIHsKICAgICAgICBkaWN0aW9uYXJ5UHJldkNvZGVzW25leHRDb2RlXSA9IHByZXZDb2RlOwogICAgICAgIGRpY3Rpb25hcnlMZW5ndGhzW25leHRDb2RlXSA9IGRpY3Rpb25hcnlMZW5ndGhzW3ByZXZDb2RlXSArIDE7CiAgICAgICAgZGljdGlvbmFyeVZhbHVlc1tuZXh0Q29kZV0gPSBjdXJyZW50U2VxdWVuY2VbMF07CiAgICAgICAgbmV4dENvZGUrKzsKICAgICAgICBjb2RlTGVuZ3RoID0gbmV4dENvZGUgKyBlYXJseUNoYW5nZSAmIG5leHRDb2RlICsgZWFybHlDaGFuZ2UgLSAxID8gY29kZUxlbmd0aCA6IE1hdGgubWluKE1hdGgubG9nKG5leHRDb2RlICsgZWFybHlDaGFuZ2UpIC8gMC42OTMxNDcxODA1NTk5NDUzICsgMSwgMTIpIHwgMDsKICAgICAgfQogICAgICBwcmV2Q29kZSA9IGNvZGU7CiAgICAgIGRlY29kZWRMZW5ndGggKz0gY3VycmVudFNlcXVlbmNlTGVuZ3RoOwogICAgICBpZiAoZXN0aW1hdGVkRGVjb2RlZFNpemUgPCBkZWNvZGVkTGVuZ3RoKSB7CiAgICAgICAgZG8gewogICAgICAgICAgZXN0aW1hdGVkRGVjb2RlZFNpemUgKz0gZGVjb2RlZFNpemVEZWx0YTsKICAgICAgICB9IHdoaWxlIChlc3RpbWF0ZWREZWNvZGVkU2l6ZSA8IGRlY29kZWRMZW5ndGgpOwogICAgICAgIGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKHRoaXMuYnVmZmVyTGVuZ3RoICsgZXN0aW1hdGVkRGVjb2RlZFNpemUpOwogICAgICB9CiAgICAgIGZvciAoaiA9IDA7IGogPCBjdXJyZW50U2VxdWVuY2VMZW5ndGg7IGorKykgewogICAgICAgIGJ1ZmZlcltjdXJyZW50QnVmZmVyTGVuZ3RoKytdID0gY3VycmVudFNlcXVlbmNlW2pdOwogICAgICB9CiAgICB9CiAgICBsendTdGF0ZS5uZXh0Q29kZSA9IG5leHRDb2RlOwogICAgbHp3U3RhdGUuY29kZUxlbmd0aCA9IGNvZGVMZW5ndGg7CiAgICBsendTdGF0ZS5wcmV2Q29kZSA9IHByZXZDb2RlOwogICAgbHp3U3RhdGUuY3VycmVudFNlcXVlbmNlTGVuZ3RoID0gY3VycmVudFNlcXVlbmNlTGVuZ3RoOwogICAgdGhpcy5idWZmZXJMZW5ndGggPSBjdXJyZW50QnVmZmVyTGVuZ3RoOwogIH0KfQoKOy8vIC4vc3JjL2NvcmUvcHJlZGljdG9yX3N0cmVhbS5qcwoKCgpjbGFzcyBQcmVkaWN0b3JTdHJlYW0gZXh0ZW5kcyBEZWNvZGVTdHJlYW0gewogIGNvbnN0cnVjdG9yKHN0ciwgbWF5YmVMZW5ndGgsIHBhcmFtcykgewogICAgc3VwZXIobWF5YmVMZW5ndGgpOwogICAgaWYgKCEocGFyYW1zIGluc3RhbmNlb2YgRGljdCkpIHsKICAgICAgcmV0dXJuIHN0cjsKICAgIH0KICAgIGNvbnN0IHByZWRpY3RvciA9IHRoaXMucHJlZGljdG9yID0gcGFyYW1zLmdldCgiUHJlZGljdG9yIikgfHwgMTsKICAgIGlmIChwcmVkaWN0b3IgPD0gMSkgewogICAgICByZXR1cm4gc3RyOwogICAgfQogICAgaWYgKHByZWRpY3RvciAhPT0gMiAmJiAocHJlZGljdG9yIDwgMTAgfHwgcHJlZGljdG9yID4gMTUpKSB7CiAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcihgVW5zdXBwb3J0ZWQgcHJlZGljdG9yOiAke3ByZWRpY3Rvcn1gKTsKICAgIH0KICAgIHRoaXMucmVhZEJsb2NrID0gcHJlZGljdG9yID09PSAyID8gdGhpcy5yZWFkQmxvY2tUaWZmIDogdGhpcy5yZWFkQmxvY2tQbmc7CiAgICB0aGlzLnN0ciA9IHN0cjsKICAgIHRoaXMuZGljdCA9IHN0ci5kaWN0OwogICAgY29uc3QgY29sb3JzID0gdGhpcy5jb2xvcnMgPSBwYXJhbXMuZ2V0KCJDb2xvcnMiKSB8fCAxOwogICAgY29uc3QgYml0cyA9IHRoaXMuYml0cyA9IHBhcmFtcy5nZXQoIkJQQyIsICJCaXRzUGVyQ29tcG9uZW50IikgfHwgODsKICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnMgPSBwYXJhbXMuZ2V0KCJDb2x1bW5zIikgfHwgMTsKICAgIHRoaXMucGl4Qnl0ZXMgPSBjb2xvcnMgKiBiaXRzICsgNyA+PiAzOwogICAgdGhpcy5yb3dCeXRlcyA9IGNvbHVtbnMgKiBjb2xvcnMgKiBiaXRzICsgNyA+PiAzOwogICAgcmV0dXJuIHRoaXM7CiAgfQogIHJlYWRCbG9ja1RpZmYoKSB7CiAgICBjb25zdCByb3dCeXRlcyA9IHRoaXMucm93Qnl0ZXM7CiAgICBjb25zdCBidWZmZXJMZW5ndGggPSB0aGlzLmJ1ZmZlckxlbmd0aDsKICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKGJ1ZmZlckxlbmd0aCArIHJvd0J5dGVzKTsKICAgIGNvbnN0IGJpdHMgPSB0aGlzLmJpdHM7CiAgICBjb25zdCBjb2xvcnMgPSB0aGlzLmNvbG9yczsKICAgIGNvbnN0IHJhd0J5dGVzID0gdGhpcy5zdHIuZ2V0Qnl0ZXMocm93Qnl0ZXMpOwogICAgdGhpcy5lb2YgPSAhcmF3Qnl0ZXMubGVuZ3RoOwogICAgaWYgKHRoaXMuZW9mKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGxldCBpbmJ1ZiA9IDAsCiAgICAgIG91dGJ1ZiA9IDA7CiAgICBsZXQgaW5iaXRzID0gMCwKICAgICAgb3V0Yml0cyA9IDA7CiAgICBsZXQgcG9zID0gYnVmZmVyTGVuZ3RoOwogICAgbGV0IGk7CiAgICBpZiAoYml0cyA9PT0gMSAmJiBjb2xvcnMgPT09IDEpIHsKICAgICAgZm9yIChpID0gMDsgaSA8IHJvd0J5dGVzOyArK2kpIHsKICAgICAgICBsZXQgYyA9IHJhd0J5dGVzW2ldIF4gaW5idWY7CiAgICAgICAgYyBePSBjID4+IDE7CiAgICAgICAgYyBePSBjID4+IDI7CiAgICAgICAgYyBePSBjID4+IDQ7CiAgICAgICAgaW5idWYgPSAoYyAmIDEpIDw8IDc7CiAgICAgICAgYnVmZmVyW3BvcysrXSA9IGM7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoYml0cyA9PT0gOCkgewogICAgICBmb3IgKGkgPSAwOyBpIDwgY29sb3JzOyArK2kpIHsKICAgICAgICBidWZmZXJbcG9zKytdID0gcmF3Qnl0ZXNbaV07CiAgICAgIH0KICAgICAgZm9yICg7IGkgPCByb3dCeXRlczsgKytpKSB7CiAgICAgICAgYnVmZmVyW3Bvc10gPSBidWZmZXJbcG9zIC0gY29sb3JzXSArIHJhd0J5dGVzW2ldOwogICAgICAgIHBvcysrOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGJpdHMgPT09IDE2KSB7CiAgICAgIGNvbnN0IGJ5dGVzUGVyUGl4ZWwgPSBjb2xvcnMgKiAyOwogICAgICBmb3IgKGkgPSAwOyBpIDwgYnl0ZXNQZXJQaXhlbDsgKytpKSB7CiAgICAgICAgYnVmZmVyW3BvcysrXSA9IHJhd0J5dGVzW2ldOwogICAgICB9CiAgICAgIGZvciAoOyBpIDwgcm93Qnl0ZXM7IGkgKz0gMikgewogICAgICAgIGNvbnN0IHN1bSA9ICgocmF3Qnl0ZXNbaV0gJiAweGZmKSA8PCA4KSArIChyYXdCeXRlc1tpICsgMV0gJiAweGZmKSArICgoYnVmZmVyW3BvcyAtIGJ5dGVzUGVyUGl4ZWxdICYgMHhmZikgPDwgOCkgKyAoYnVmZmVyW3BvcyAtIGJ5dGVzUGVyUGl4ZWwgKyAxXSAmIDB4ZmYpOwogICAgICAgIGJ1ZmZlcltwb3MrK10gPSBzdW0gPj4gOCAmIDB4ZmY7CiAgICAgICAgYnVmZmVyW3BvcysrXSA9IHN1bSAmIDB4ZmY7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0IGNvbXBBcnJheSA9IG5ldyBVaW50OEFycmF5KGNvbG9ycyArIDEpOwogICAgICBjb25zdCBiaXRNYXNrID0gKDEgPDwgYml0cykgLSAxOwogICAgICBsZXQgaiA9IDAsCiAgICAgICAgayA9IGJ1ZmZlckxlbmd0aDsKICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1uczsKICAgICAgZm9yIChpID0gMDsgaSA8IGNvbHVtbnM7ICsraSkgewogICAgICAgIGZvciAobGV0IGtrID0gMDsga2sgPCBjb2xvcnM7ICsra2spIHsKICAgICAgICAgIGlmIChpbmJpdHMgPCBiaXRzKSB7CiAgICAgICAgICAgIGluYnVmID0gaW5idWYgPDwgOCB8IHJhd0J5dGVzW2orK10gJiAweGZmOwogICAgICAgICAgICBpbmJpdHMgKz0gODsKICAgICAgICAgIH0KICAgICAgICAgIGNvbXBBcnJheVtra10gPSBjb21wQXJyYXlba2tdICsgKGluYnVmID4+IGluYml0cyAtIGJpdHMpICYgYml0TWFzazsKICAgICAgICAgIGluYml0cyAtPSBiaXRzOwogICAgICAgICAgb3V0YnVmID0gb3V0YnVmIDw8IGJpdHMgfCBjb21wQXJyYXlba2tdOwogICAgICAgICAgb3V0Yml0cyArPSBiaXRzOwogICAgICAgICAgaWYgKG91dGJpdHMgPj0gOCkgewogICAgICAgICAgICBidWZmZXJbaysrXSA9IG91dGJ1ZiA+PiBvdXRiaXRzIC0gOCAmIDB4ZmY7CiAgICAgICAgICAgIG91dGJpdHMgLT0gODsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKG91dGJpdHMgPiAwKSB7CiAgICAgICAgYnVmZmVyW2srK10gPSAob3V0YnVmIDw8IDggLSBvdXRiaXRzKSArIChpbmJ1ZiAmICgxIDw8IDggLSBvdXRiaXRzKSAtIDEpOwogICAgICB9CiAgICB9CiAgICB0aGlzLmJ1ZmZlckxlbmd0aCArPSByb3dCeXRlczsKICB9CiAgcmVhZEJsb2NrUG5nKCkgewogICAgY29uc3Qgcm93Qnl0ZXMgPSB0aGlzLnJvd0J5dGVzOwogICAgY29uc3QgcGl4Qnl0ZXMgPSB0aGlzLnBpeEJ5dGVzOwogICAgY29uc3QgcHJlZGljdG9yID0gdGhpcy5zdHIuZ2V0Qnl0ZSgpOwogICAgY29uc3QgcmF3Qnl0ZXMgPSB0aGlzLnN0ci5nZXRCeXRlcyhyb3dCeXRlcyk7CiAgICB0aGlzLmVvZiA9ICFyYXdCeXRlcy5sZW5ndGg7CiAgICBpZiAodGhpcy5lb2YpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgYnVmZmVyTGVuZ3RoID0gdGhpcy5idWZmZXJMZW5ndGg7CiAgICBjb25zdCBidWZmZXIgPSB0aGlzLmVuc3VyZUJ1ZmZlcihidWZmZXJMZW5ndGggKyByb3dCeXRlcyk7CiAgICBsZXQgcHJldlJvdyA9IGJ1ZmZlci5zdWJhcnJheShidWZmZXJMZW5ndGggLSByb3dCeXRlcywgYnVmZmVyTGVuZ3RoKTsKICAgIGlmIChwcmV2Um93Lmxlbmd0aCA9PT0gMCkgewogICAgICBwcmV2Um93ID0gbmV3IFVpbnQ4QXJyYXkocm93Qnl0ZXMpOwogICAgfQogICAgbGV0IGksCiAgICAgIGogPSBidWZmZXJMZW5ndGgsCiAgICAgIHVwLAogICAgICBjOwogICAgc3dpdGNoIChwcmVkaWN0b3IpIHsKICAgICAgY2FzZSAwOgogICAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dCeXRlczsgKytpKSB7CiAgICAgICAgICBidWZmZXJbaisrXSA9IHJhd0J5dGVzW2ldOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSAxOgogICAgICAgIGZvciAoaSA9IDA7IGkgPCBwaXhCeXRlczsgKytpKSB7CiAgICAgICAgICBidWZmZXJbaisrXSA9IHJhd0J5dGVzW2ldOwogICAgICAgIH0KICAgICAgICBmb3IgKDsgaSA8IHJvd0J5dGVzOyArK2kpIHsKICAgICAgICAgIGJ1ZmZlcltqXSA9IGJ1ZmZlcltqIC0gcGl4Qnl0ZXNdICsgcmF3Qnl0ZXNbaV0gJiAweGZmOwogICAgICAgICAgaisrOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSAyOgogICAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dCeXRlczsgKytpKSB7CiAgICAgICAgICBidWZmZXJbaisrXSA9IHByZXZSb3dbaV0gKyByYXdCeXRlc1tpXSAmIDB4ZmY7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDM6CiAgICAgICAgZm9yIChpID0gMDsgaSA8IHBpeEJ5dGVzOyArK2kpIHsKICAgICAgICAgIGJ1ZmZlcltqKytdID0gKHByZXZSb3dbaV0gPj4gMSkgKyByYXdCeXRlc1tpXTsKICAgICAgICB9CiAgICAgICAgZm9yICg7IGkgPCByb3dCeXRlczsgKytpKSB7CiAgICAgICAgICBidWZmZXJbal0gPSAocHJldlJvd1tpXSArIGJ1ZmZlcltqIC0gcGl4Qnl0ZXNdID4+IDEpICsgcmF3Qnl0ZXNbaV0gJiAweGZmOwogICAgICAgICAgaisrOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSA0OgogICAgICAgIGZvciAoaSA9IDA7IGkgPCBwaXhCeXRlczsgKytpKSB7CiAgICAgICAgICB1cCA9IHByZXZSb3dbaV07CiAgICAgICAgICBjID0gcmF3Qnl0ZXNbaV07CiAgICAgICAgICBidWZmZXJbaisrXSA9IHVwICsgYzsKICAgICAgICB9CiAgICAgICAgZm9yICg7IGkgPCByb3dCeXRlczsgKytpKSB7CiAgICAgICAgICB1cCA9IHByZXZSb3dbaV07CiAgICAgICAgICBjb25zdCB1cExlZnQgPSBwcmV2Um93W2kgLSBwaXhCeXRlc107CiAgICAgICAgICBjb25zdCBsZWZ0ID0gYnVmZmVyW2ogLSBwaXhCeXRlc107CiAgICAgICAgICBjb25zdCBwID0gbGVmdCArIHVwIC0gdXBMZWZ0OwogICAgICAgICAgbGV0IHBhID0gcCAtIGxlZnQ7CiAgICAgICAgICBpZiAocGEgPCAwKSB7CiAgICAgICAgICAgIHBhID0gLXBhOwogICAgICAgICAgfQogICAgICAgICAgbGV0IHBiID0gcCAtIHVwOwogICAgICAgICAgaWYgKHBiIDwgMCkgewogICAgICAgICAgICBwYiA9IC1wYjsKICAgICAgICAgIH0KICAgICAgICAgIGxldCBwYyA9IHAgLSB1cExlZnQ7CiAgICAgICAgICBpZiAocGMgPCAwKSB7CiAgICAgICAgICAgIHBjID0gLXBjOwogICAgICAgICAgfQogICAgICAgICAgYyA9IHJhd0J5dGVzW2ldOwogICAgICAgICAgaWYgKHBhIDw9IHBiICYmIHBhIDw9IHBjKSB7CiAgICAgICAgICAgIGJ1ZmZlcltqKytdID0gbGVmdCArIGM7CiAgICAgICAgICB9IGVsc2UgaWYgKHBiIDw9IHBjKSB7CiAgICAgICAgICAgIGJ1ZmZlcltqKytdID0gdXAgKyBjOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYnVmZmVyW2orK10gPSB1cExlZnQgKyBjOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYFVuc3VwcG9ydGVkIHByZWRpY3RvcjogJHtwcmVkaWN0b3J9YCk7CiAgICB9CiAgICB0aGlzLmJ1ZmZlckxlbmd0aCArPSByb3dCeXRlczsKICB9Cn0KCjsvLyAuL3NyYy9jb3JlL3J1bl9sZW5ndGhfc3RyZWFtLmpzCgpjbGFzcyBSdW5MZW5ndGhTdHJlYW0gZXh0ZW5kcyBEZWNvZGVTdHJlYW0gewogIGNvbnN0cnVjdG9yKHN0ciwgbWF5YmVMZW5ndGgpIHsKICAgIHN1cGVyKG1heWJlTGVuZ3RoKTsKICAgIHRoaXMuc3RyID0gc3RyOwogICAgdGhpcy5kaWN0ID0gc3RyLmRpY3Q7CiAgfQogIHJlYWRCbG9jaygpIHsKICAgIGNvbnN0IHJlcGVhdEhlYWRlciA9IHRoaXMuc3RyLmdldEJ5dGVzKDIpOwogICAgaWYgKCFyZXBlYXRIZWFkZXIgfHwgcmVwZWF0SGVhZGVyLmxlbmd0aCA8IDIgfHwgcmVwZWF0SGVhZGVyWzBdID09PSAxMjgpIHsKICAgICAgdGhpcy5lb2YgPSB0cnVlOwogICAgICByZXR1cm47CiAgICB9CiAgICBsZXQgYnVmZmVyOwogICAgbGV0IGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyTGVuZ3RoOwogICAgbGV0IG4gPSByZXBlYXRIZWFkZXJbMF07CiAgICBpZiAobiA8IDEyOCkgewogICAgICBidWZmZXIgPSB0aGlzLmVuc3VyZUJ1ZmZlcihidWZmZXJMZW5ndGggKyBuICsgMSk7CiAgICAgIGJ1ZmZlcltidWZmZXJMZW5ndGgrK10gPSByZXBlYXRIZWFkZXJbMV07CiAgICAgIGlmIChuID4gMCkgewogICAgICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuc3RyLmdldEJ5dGVzKG4pOwogICAgICAgIGJ1ZmZlci5zZXQoc291cmNlLCBidWZmZXJMZW5ndGgpOwogICAgICAgIGJ1ZmZlckxlbmd0aCArPSBuOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBuID0gMjU3IC0gbjsKICAgICAgYnVmZmVyID0gdGhpcy5lbnN1cmVCdWZmZXIoYnVmZmVyTGVuZ3RoICsgbiArIDEpOwogICAgICBidWZmZXIuZmlsbChyZXBlYXRIZWFkZXJbMV0sIGJ1ZmZlckxlbmd0aCwgYnVmZmVyTGVuZ3RoICsgbik7CiAgICAgIGJ1ZmZlckxlbmd0aCArPSBuOwogICAgfQogICAgdGhpcy5idWZmZXJMZW5ndGggPSBidWZmZXJMZW5ndGg7CiAgfQp9Cgo7Ly8gLi9zcmMvY29yZS9wYXJzZXIuanMKCgoKCgoKCgoKCgoKCgpjb25zdCBNQVhfTEVOR1RIX1RPX0NBQ0hFID0gMTAwMDsKZnVuY3Rpb24gZ2V0SW5saW5lSW1hZ2VDYWNoZUtleShieXRlcykgewogIGNvbnN0IHN0ckJ1ZiA9IFtdLAogICAgaWkgPSBieXRlcy5sZW5ndGg7CiAgbGV0IGkgPSAwOwogIHdoaWxlIChpIDwgaWkgLSAxKSB7CiAgICBzdHJCdWYucHVzaChieXRlc1tpKytdIDw8IDggfCBieXRlc1tpKytdKTsKICB9CiAgaWYgKGkgPCBpaSkgewogICAgc3RyQnVmLnB1c2goYnl0ZXNbaV0pOwogIH0KICByZXR1cm4gaWkgKyAiXyIgKyBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIHN0ckJ1Zik7Cn0KY2xhc3MgUGFyc2VyIHsKICBjb25zdHJ1Y3Rvcih7CiAgICBsZXhlciwKICAgIHhyZWYsCiAgICBhbGxvd1N0cmVhbXMgPSBmYWxzZSwKICAgIHJlY292ZXJ5TW9kZSA9IGZhbHNlCiAgfSkgewogICAgdGhpcy5sZXhlciA9IGxleGVyOwogICAgdGhpcy54cmVmID0geHJlZjsKICAgIHRoaXMuYWxsb3dTdHJlYW1zID0gYWxsb3dTdHJlYW1zOwogICAgdGhpcy5yZWNvdmVyeU1vZGUgPSByZWNvdmVyeU1vZGU7CiAgICB0aGlzLmltYWdlQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgdGhpcy5faW1hZ2VJZCA9IDA7CiAgICB0aGlzLnJlZmlsbCgpOwogIH0KICByZWZpbGwoKSB7CiAgICB0aGlzLmJ1ZjEgPSB0aGlzLmxleGVyLmdldE9iaigpOwogICAgdGhpcy5idWYyID0gdGhpcy5sZXhlci5nZXRPYmooKTsKICB9CiAgc2hpZnQoKSB7CiAgICBpZiAodGhpcy5idWYyIGluc3RhbmNlb2YgQ21kICYmIHRoaXMuYnVmMi5jbWQgPT09ICJJRCIpIHsKICAgICAgdGhpcy5idWYxID0gdGhpcy5idWYyOwogICAgICB0aGlzLmJ1ZjIgPSBudWxsOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5idWYxID0gdGhpcy5idWYyOwogICAgICB0aGlzLmJ1ZjIgPSB0aGlzLmxleGVyLmdldE9iaigpOwogICAgfQogIH0KICB0cnlTaGlmdCgpIHsKICAgIHRyeSB7CiAgICAgIHRoaXMuc2hpZnQoKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIGlmIChlIGluc3RhbmNlb2YgTWlzc2luZ0RhdGFFeGNlcHRpb24pIHsKICAgICAgICB0aHJvdyBlOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CiAgZ2V0T2JqKGNpcGhlclRyYW5zZm9ybSA9IG51bGwpIHsKICAgIGNvbnN0IGJ1ZjEgPSB0aGlzLmJ1ZjE7CiAgICB0aGlzLnNoaWZ0KCk7CiAgICBpZiAoYnVmMSBpbnN0YW5jZW9mIENtZCkgewogICAgICBzd2l0Y2ggKGJ1ZjEuY21kKSB7CiAgICAgICAgY2FzZSAiQkkiOgogICAgICAgICAgcmV0dXJuIHRoaXMubWFrZUlubGluZUltYWdlKGNpcGhlclRyYW5zZm9ybSk7CiAgICAgICAgY2FzZSAiWyI6CiAgICAgICAgICBjb25zdCBhcnJheSA9IFtdOwogICAgICAgICAgd2hpbGUgKCFpc0NtZCh0aGlzLmJ1ZjEsICJdIikgJiYgdGhpcy5idWYxICE9PSBFT0YpIHsKICAgICAgICAgICAgYXJyYXkucHVzaCh0aGlzLmdldE9iaihjaXBoZXJUcmFuc2Zvcm0pKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aGlzLmJ1ZjEgPT09IEVPRikgewogICAgICAgICAgICBpZiAodGhpcy5yZWNvdmVyeU1vZGUpIHsKICAgICAgICAgICAgICByZXR1cm4gYXJyYXk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlckVPRkV4Y2VwdGlvbigiRW5kIG9mIGZpbGUgaW5zaWRlIGFycmF5LiIpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5zaGlmdCgpOwogICAgICAgICAgcmV0dXJuIGFycmF5OwogICAgICAgIGNhc2UgIjw8IjoKICAgICAgICAgIGNvbnN0IGRpY3QgPSBuZXcgRGljdCh0aGlzLnhyZWYpOwogICAgICAgICAgd2hpbGUgKCFpc0NtZCh0aGlzLmJ1ZjEsICI+PiIpICYmIHRoaXMuYnVmMSAhPT0gRU9GKSB7CiAgICAgICAgICAgIGlmICghKHRoaXMuYnVmMSBpbnN0YW5jZW9mIE5hbWUpKSB7CiAgICAgICAgICAgICAgaW5mbygiTWFsZm9ybWVkIGRpY3Rpb25hcnk6IGtleSBtdXN0IGJlIGEgbmFtZSBvYmplY3QiKTsKICAgICAgICAgICAgICB0aGlzLnNoaWZ0KCk7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5idWYxLm5hbWU7CiAgICAgICAgICAgIHRoaXMuc2hpZnQoKTsKICAgICAgICAgICAgaWYgKHRoaXMuYnVmMSA9PT0gRU9GKSB7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGljdC5zZXQoa2V5LCB0aGlzLmdldE9iaihjaXBoZXJUcmFuc2Zvcm0pKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aGlzLmJ1ZjEgPT09IEVPRikgewogICAgICAgICAgICBpZiAodGhpcy5yZWNvdmVyeU1vZGUpIHsKICAgICAgICAgICAgICByZXR1cm4gZGljdDsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VyRU9GRXhjZXB0aW9uKCJFbmQgb2YgZmlsZSBpbnNpZGUgZGljdGlvbmFyeS4iKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChpc0NtZCh0aGlzLmJ1ZjIsICJzdHJlYW0iKSkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5hbGxvd1N0cmVhbXMgPyB0aGlzLm1ha2VTdHJlYW0oZGljdCwgY2lwaGVyVHJhbnNmb3JtKSA6IGRpY3Q7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnNoaWZ0KCk7CiAgICAgICAgICByZXR1cm4gZGljdDsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgcmV0dXJuIGJ1ZjE7CiAgICAgIH0KICAgIH0KICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGJ1ZjEpKSB7CiAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKHRoaXMuYnVmMSkgJiYgaXNDbWQodGhpcy5idWYyLCAiUiIpKSB7CiAgICAgICAgY29uc3QgcmVmID0gUmVmLmdldChidWYxLCB0aGlzLmJ1ZjEpOwogICAgICAgIHRoaXMuc2hpZnQoKTsKICAgICAgICB0aGlzLnNoaWZ0KCk7CiAgICAgICAgcmV0dXJuIHJlZjsKICAgICAgfQogICAgICByZXR1cm4gYnVmMTsKICAgIH0KICAgIGlmICh0eXBlb2YgYnVmMSA9PT0gInN0cmluZyIpIHsKICAgICAgaWYgKGNpcGhlclRyYW5zZm9ybSkgewogICAgICAgIHJldHVybiBjaXBoZXJUcmFuc2Zvcm0uZGVjcnlwdFN0cmluZyhidWYxKTsKICAgICAgfQogICAgICByZXR1cm4gYnVmMTsKICAgIH0KICAgIHJldHVybiBidWYxOwogIH0KICBmaW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChzdHJlYW0pIHsKICAgIGNvbnN0IEUgPSAweDQ1LAogICAgICBJID0gMHg0OSwKICAgICAgU1BBQ0UgPSAweDIwLAogICAgICBMRiA9IDB4YSwKICAgICAgQ1IgPSAweGQsCiAgICAgIE5VTCA9IDB4MDsKICAgIGNvbnN0IHsKICAgICAgICBrbm93bkNvbW1hbmRzCiAgICAgIH0gPSB0aGlzLmxleGVyLAogICAgICBzdGFydFBvcyA9IHN0cmVhbS5wb3MsCiAgICAgIG4gPSAxNTsKICAgIGxldCBzdGF0ZSA9IDAsCiAgICAgIGNoLAogICAgICBtYXliZUVJUG9zOwogICAgd2hpbGUgKChjaCA9IHN0cmVhbS5nZXRCeXRlKCkpICE9PSAtMSkgewogICAgICBpZiAoc3RhdGUgPT09IDApIHsKICAgICAgICBzdGF0ZSA9IGNoID09PSBFID8gMSA6IDA7CiAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IDEpIHsKICAgICAgICBzdGF0ZSA9IGNoID09PSBJID8gMiA6IDA7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGNoID09PSBTUEFDRSB8fCBjaCA9PT0gTEYgfHwgY2ggPT09IENSKSB7CiAgICAgICAgICBtYXliZUVJUG9zID0gc3RyZWFtLnBvczsKICAgICAgICAgIGNvbnN0IGZvbGxvd2luZ0J5dGVzID0gc3RyZWFtLnBlZWtCeXRlcyhuKTsKICAgICAgICAgIGNvbnN0IGlpID0gZm9sbG93aW5nQnl0ZXMubGVuZ3RoOwogICAgICAgICAgaWYgKGlpID09PSAwKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpaTsgaSsrKSB7CiAgICAgICAgICAgIGNoID0gZm9sbG93aW5nQnl0ZXNbaV07CiAgICAgICAgICAgIGlmIChjaCA9PT0gTlVMICYmIGZvbGxvd2luZ0J5dGVzW2kgKyAxXSAhPT0gTlVMKSB7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGNoICE9PSBMRiAmJiBjaCAhPT0gQ1IgJiYgKGNoIDwgU1BBQ0UgfHwgY2ggPiAweDdmKSkgewogICAgICAgICAgICAgIHN0YXRlID0gMDsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKHN0YXRlICE9PSAyKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCFrbm93bkNvbW1hbmRzKSB7CiAgICAgICAgICAgIHdhcm4oImZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kIC0gYGxleGVyLmtub3duQ29tbWFuZHNgIGlzIHVuZGVmaW5lZC4iKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCB0bXBMZXhlciA9IG5ldyBMZXhlcihuZXcgU3RyZWFtKHN0cmVhbS5wZWVrQnl0ZXMoNSAqIG4pKSwga25vd25Db21tYW5kcyk7CiAgICAgICAgICB0bXBMZXhlci5faGV4U3RyaW5nV2FybiA9ICgpID0+IHt9OwogICAgICAgICAgbGV0IG51bUFyZ3MgPSAwOwogICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgY29uc3QgbmV4dE9iaiA9IHRtcExleGVyLmdldE9iaigpOwogICAgICAgICAgICBpZiAobmV4dE9iaiA9PT0gRU9GKSB7CiAgICAgICAgICAgICAgc3RhdGUgPSAwOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChuZXh0T2JqIGluc3RhbmNlb2YgQ21kKSB7CiAgICAgICAgICAgICAgY29uc3Qga25vd25Db21tYW5kID0ga25vd25Db21tYW5kc1tuZXh0T2JqLmNtZF07CiAgICAgICAgICAgICAgaWYgKCFrbm93bkNvbW1hbmQpIHsKICAgICAgICAgICAgICAgIHN0YXRlID0gMDsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoa25vd25Db21tYW5kLnZhcmlhYmxlQXJncyA/IG51bUFyZ3MgPD0ga25vd25Db21tYW5kLm51bUFyZ3MgOiBudW1BcmdzID09PSBrbm93bkNvbW1hbmQubnVtQXJncykgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIG51bUFyZ3MgPSAwOwogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG51bUFyZ3MrKzsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChzdGF0ZSA9PT0gMikgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgc3RhdGUgPSAwOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKGNoID09PSAtMSkgewogICAgICB3YXJuKCJmaW5kRGVmYXVsdElubGluZVN0cmVhbUVuZDogIiArICJSZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHN0cmVhbSB3aXRob3V0IGZpbmRpbmcgYSB2YWxpZCBFSSBtYXJrZXIiKTsKICAgICAgaWYgKG1heWJlRUlQb3MpIHsKICAgICAgICB3YXJuKCcuLi4gdHJ5aW5nIHRvIHJlY292ZXIgYnkgdXNpbmcgdGhlIGxhc3QgIkVJIiBvY2N1cnJlbmNlLicpOwogICAgICAgIHN0cmVhbS5za2lwKC0oc3RyZWFtLnBvcyAtIG1heWJlRUlQb3MpKTsKICAgICAgfQogICAgfQogICAgbGV0IGVuZE9mZnNldCA9IDQ7CiAgICBzdHJlYW0uc2tpcCgtZW5kT2Zmc2V0KTsKICAgIGNoID0gc3RyZWFtLnBlZWtCeXRlKCk7CiAgICBzdHJlYW0uc2tpcChlbmRPZmZzZXQpOwogICAgaWYgKCFpc1doaXRlU3BhY2UoY2gpKSB7CiAgICAgIGVuZE9mZnNldC0tOwogICAgfQogICAgcmV0dXJuIHN0cmVhbS5wb3MgLSBlbmRPZmZzZXQgLSBzdGFydFBvczsKICB9CiAgZmluZERDVERlY29kZUlubGluZVN0cmVhbUVuZChzdHJlYW0pIHsKICAgIGNvbnN0IHN0YXJ0UG9zID0gc3RyZWFtLnBvczsKICAgIGxldCBmb3VuZEVPSSA9IGZhbHNlLAogICAgICBiLAogICAgICBtYXJrZXJMZW5ndGg7CiAgICB3aGlsZSAoKGIgPSBzdHJlYW0uZ2V0Qnl0ZSgpKSAhPT0gLTEpIHsKICAgICAgaWYgKGIgIT09IDB4ZmYpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBzd2l0Y2ggKHN0cmVhbS5nZXRCeXRlKCkpIHsKICAgICAgICBjYXNlIDB4MDA6CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDB4ZmY6CiAgICAgICAgICBzdHJlYW0uc2tpcCgtMSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDB4ZDk6CiAgICAgICAgICBmb3VuZEVPSSA9IHRydWU7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDB4YzA6CiAgICAgICAgY2FzZSAweGMxOgogICAgICAgIGNhc2UgMHhjMjoKICAgICAgICBjYXNlIDB4YzM6CiAgICAgICAgY2FzZSAweGM1OgogICAgICAgIGNhc2UgMHhjNjoKICAgICAgICBjYXNlIDB4Yzc6CiAgICAgICAgY2FzZSAweGM5OgogICAgICAgIGNhc2UgMHhjYToKICAgICAgICBjYXNlIDB4Y2I6CiAgICAgICAgY2FzZSAweGNkOgogICAgICAgIGNhc2UgMHhjZToKICAgICAgICBjYXNlIDB4Y2Y6CiAgICAgICAgY2FzZSAweGM0OgogICAgICAgIGNhc2UgMHhjYzoKICAgICAgICBjYXNlIDB4ZGE6CiAgICAgICAgY2FzZSAweGRiOgogICAgICAgIGNhc2UgMHhkYzoKICAgICAgICBjYXNlIDB4ZGQ6CiAgICAgICAgY2FzZSAweGRlOgogICAgICAgIGNhc2UgMHhkZjoKICAgICAgICBjYXNlIDB4ZTA6CiAgICAgICAgY2FzZSAweGUxOgogICAgICAgIGNhc2UgMHhlMjoKICAgICAgICBjYXNlIDB4ZTM6CiAgICAgICAgY2FzZSAweGU0OgogICAgICAgIGNhc2UgMHhlNToKICAgICAgICBjYXNlIDB4ZTY6CiAgICAgICAgY2FzZSAweGU3OgogICAgICAgIGNhc2UgMHhlODoKICAgICAgICBjYXNlIDB4ZTk6CiAgICAgICAgY2FzZSAweGVhOgogICAgICAgIGNhc2UgMHhlYjoKICAgICAgICBjYXNlIDB4ZWM6CiAgICAgICAgY2FzZSAweGVkOgogICAgICAgIGNhc2UgMHhlZToKICAgICAgICBjYXNlIDB4ZWY6CiAgICAgICAgY2FzZSAweGZlOgogICAgICAgICAgbWFya2VyTGVuZ3RoID0gc3RyZWFtLmdldFVpbnQxNigpOwogICAgICAgICAgaWYgKG1hcmtlckxlbmd0aCA+IDIpIHsKICAgICAgICAgICAgc3RyZWFtLnNraXAobWFya2VyTGVuZ3RoIC0gMik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdHJlYW0uc2tpcCgtMik7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgICBpZiAoZm91bmRFT0kpIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgY29uc3QgbGVuZ3RoID0gc3RyZWFtLnBvcyAtIHN0YXJ0UG9zOwogICAgaWYgKGIgPT09IC0xKSB7CiAgICAgIHdhcm4oIklubGluZSBEQ1REZWNvZGUgaW1hZ2Ugc3RyZWFtOiAiICsgIkVPSSBtYXJrZXIgbm90IGZvdW5kLCBzZWFyY2hpbmcgZm9yIC9FSS8gaW5zdGVhZC4iKTsKICAgICAgc3RyZWFtLnNraXAoLWxlbmd0aCk7CiAgICAgIHJldHVybiB0aGlzLmZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kKHN0cmVhbSk7CiAgICB9CiAgICB0aGlzLmlubGluZVN0cmVhbVNraXBFSShzdHJlYW0pOwogICAgcmV0dXJuIGxlbmd0aDsKICB9CiAgZmluZEFTQ0lJODVEZWNvZGVJbmxpbmVTdHJlYW1FbmQoc3RyZWFtKSB7CiAgICBjb25zdCBUSUxERSA9IDB4N2UsCiAgICAgIEdUID0gMHgzZTsKICAgIGNvbnN0IHN0YXJ0UG9zID0gc3RyZWFtLnBvczsKICAgIGxldCBjaDsKICAgIHdoaWxlICgoY2ggPSBzdHJlYW0uZ2V0Qnl0ZSgpKSAhPT0gLTEpIHsKICAgICAgaWYgKGNoID09PSBUSUxERSkgewogICAgICAgIGNvbnN0IHRpbGRlUG9zID0gc3RyZWFtLnBvczsKICAgICAgICBjaCA9IHN0cmVhbS5wZWVrQnl0ZSgpOwogICAgICAgIHdoaWxlIChpc1doaXRlU3BhY2UoY2gpKSB7CiAgICAgICAgICBzdHJlYW0uc2tpcCgpOwogICAgICAgICAgY2ggPSBzdHJlYW0ucGVla0J5dGUoKTsKICAgICAgICB9CiAgICAgICAgaWYgKGNoID09PSBHVCkgewogICAgICAgICAgc3RyZWFtLnNraXAoKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBpZiAoc3RyZWFtLnBvcyA+IHRpbGRlUG9zKSB7CiAgICAgICAgICBjb25zdCBtYXliZUVJID0gc3RyZWFtLnBlZWtCeXRlcygyKTsKICAgICAgICAgIGlmIChtYXliZUVJWzBdID09PSAweDQ1ICYmIG1heWJlRUlbMV0gPT09IDB4NDkpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBjb25zdCBsZW5ndGggPSBzdHJlYW0ucG9zIC0gc3RhcnRQb3M7CiAgICBpZiAoY2ggPT09IC0xKSB7CiAgICAgIHdhcm4oIklubGluZSBBU0NJSTg1RGVjb2RlIGltYWdlIHN0cmVhbTogIiArICJFT0QgbWFya2VyIG5vdCBmb3VuZCwgc2VhcmNoaW5nIGZvciAvRUkvIGluc3RlYWQuIik7CiAgICAgIHN0cmVhbS5za2lwKC1sZW5ndGgpOwogICAgICByZXR1cm4gdGhpcy5maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChzdHJlYW0pOwogICAgfQogICAgdGhpcy5pbmxpbmVTdHJlYW1Ta2lwRUkoc3RyZWFtKTsKICAgIHJldHVybiBsZW5ndGg7CiAgfQogIGZpbmRBU0NJSUhleERlY29kZUlubGluZVN0cmVhbUVuZChzdHJlYW0pIHsKICAgIGNvbnN0IEdUID0gMHgzZTsKICAgIGNvbnN0IHN0YXJ0UG9zID0gc3RyZWFtLnBvczsKICAgIGxldCBjaDsKICAgIHdoaWxlICgoY2ggPSBzdHJlYW0uZ2V0Qnl0ZSgpKSAhPT0gLTEpIHsKICAgICAgaWYgKGNoID09PSBHVCkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBjb25zdCBsZW5ndGggPSBzdHJlYW0ucG9zIC0gc3RhcnRQb3M7CiAgICBpZiAoY2ggPT09IC0xKSB7CiAgICAgIHdhcm4oIklubGluZSBBU0NJSUhleERlY29kZSBpbWFnZSBzdHJlYW06ICIgKyAiRU9EIG1hcmtlciBub3QgZm91bmQsIHNlYXJjaGluZyBmb3IgL0VJLyBpbnN0ZWFkLiIpOwogICAgICBzdHJlYW0uc2tpcCgtbGVuZ3RoKTsKICAgICAgcmV0dXJuIHRoaXMuZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQoc3RyZWFtKTsKICAgIH0KICAgIHRoaXMuaW5saW5lU3RyZWFtU2tpcEVJKHN0cmVhbSk7CiAgICByZXR1cm4gbGVuZ3RoOwogIH0KICBpbmxpbmVTdHJlYW1Ta2lwRUkoc3RyZWFtKSB7CiAgICBjb25zdCBFID0gMHg0NSwKICAgICAgSSA9IDB4NDk7CiAgICBsZXQgc3RhdGUgPSAwLAogICAgICBjaDsKICAgIHdoaWxlICgoY2ggPSBzdHJlYW0uZ2V0Qnl0ZSgpKSAhPT0gLTEpIHsKICAgICAgaWYgKHN0YXRlID09PSAwKSB7CiAgICAgICAgc3RhdGUgPSBjaCA9PT0gRSA/IDEgOiAwOwogICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSAxKSB7CiAgICAgICAgc3RhdGUgPSBjaCA9PT0gSSA/IDIgOiAwOwogICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSAyKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICB9CiAgbWFrZUlubGluZUltYWdlKGNpcGhlclRyYW5zZm9ybSkgewogICAgY29uc3QgbGV4ZXIgPSB0aGlzLmxleGVyOwogICAgY29uc3Qgc3RyZWFtID0gbGV4ZXIuc3RyZWFtOwogICAgY29uc3QgZGljdE1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICBsZXQgZGljdExlbmd0aDsKICAgIHdoaWxlICghaXNDbWQodGhpcy5idWYxLCAiSUQiKSAmJiB0aGlzLmJ1ZjEgIT09IEVPRikgewogICAgICBpZiAoISh0aGlzLmJ1ZjEgaW5zdGFuY2VvZiBOYW1lKSkgewogICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiRGljdGlvbmFyeSBrZXkgbXVzdCBiZSBhIG5hbWUgb2JqZWN0Iik7CiAgICAgIH0KICAgICAgY29uc3Qga2V5ID0gdGhpcy5idWYxLm5hbWU7CiAgICAgIHRoaXMuc2hpZnQoKTsKICAgICAgaWYgKHRoaXMuYnVmMSA9PT0gRU9GKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgZGljdE1hcFtrZXldID0gdGhpcy5nZXRPYmooY2lwaGVyVHJhbnNmb3JtKTsKICAgIH0KICAgIGlmIChsZXhlci5iZWdpbklubGluZUltYWdlUG9zICE9PSAtMSkgewogICAgICBkaWN0TGVuZ3RoID0gc3RyZWFtLnBvcyAtIGxleGVyLmJlZ2luSW5saW5lSW1hZ2VQb3M7CiAgICB9CiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLnhyZWYuZmV0Y2hJZlJlZihkaWN0TWFwLkYgfHwgZGljdE1hcC5GaWx0ZXIpOwogICAgbGV0IGZpbHRlck5hbWU7CiAgICBpZiAoZmlsdGVyIGluc3RhbmNlb2YgTmFtZSkgewogICAgICBmaWx0ZXJOYW1lID0gZmlsdGVyLm5hbWU7CiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyKSkgewogICAgICBjb25zdCBmaWx0ZXJaZXJvID0gdGhpcy54cmVmLmZldGNoSWZSZWYoZmlsdGVyWzBdKTsKICAgICAgaWYgKGZpbHRlclplcm8gaW5zdGFuY2VvZiBOYW1lKSB7CiAgICAgICAgZmlsdGVyTmFtZSA9IGZpbHRlclplcm8ubmFtZTsKICAgICAgfQogICAgfQogICAgY29uc3Qgc3RhcnRQb3MgPSBzdHJlYW0ucG9zOwogICAgbGV0IGxlbmd0aDsKICAgIHN3aXRjaCAoZmlsdGVyTmFtZSkgewogICAgICBjYXNlICJEQ1QiOgogICAgICBjYXNlICJEQ1REZWNvZGUiOgogICAgICAgIGxlbmd0aCA9IHRoaXMuZmluZERDVERlY29kZUlubGluZVN0cmVhbUVuZChzdHJlYW0pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJBODUiOgogICAgICBjYXNlICJBU0NJSTg1RGVjb2RlIjoKICAgICAgICBsZW5ndGggPSB0aGlzLmZpbmRBU0NJSTg1RGVjb2RlSW5saW5lU3RyZWFtRW5kKHN0cmVhbSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIkFIeCI6CiAgICAgIGNhc2UgIkFTQ0lJSGV4RGVjb2RlIjoKICAgICAgICBsZW5ndGggPSB0aGlzLmZpbmRBU0NJSUhleERlY29kZUlubGluZVN0cmVhbUVuZChzdHJlYW0pOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIGxlbmd0aCA9IHRoaXMuZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQoc3RyZWFtKTsKICAgIH0KICAgIGxldCBjYWNoZUtleTsKICAgIGlmIChsZW5ndGggPCBNQVhfTEVOR1RIX1RPX0NBQ0hFICYmIGRpY3RMZW5ndGggPiAwKSB7CiAgICAgIGNvbnN0IGluaXRpYWxTdHJlYW1Qb3MgPSBzdHJlYW0ucG9zOwogICAgICBzdHJlYW0ucG9zID0gbGV4ZXIuYmVnaW5JbmxpbmVJbWFnZVBvczsKICAgICAgY2FjaGVLZXkgPSBnZXRJbmxpbmVJbWFnZUNhY2hlS2V5KHN0cmVhbS5nZXRCeXRlcyhkaWN0TGVuZ3RoICsgbGVuZ3RoKSk7CiAgICAgIHN0cmVhbS5wb3MgPSBpbml0aWFsU3RyZWFtUG9zOwogICAgICBjb25zdCBjYWNoZUVudHJ5ID0gdGhpcy5pbWFnZUNhY2hlW2NhY2hlS2V5XTsKICAgICAgaWYgKGNhY2hlRW50cnkgIT09IHVuZGVmaW5lZCkgewogICAgICAgIHRoaXMuYnVmMiA9IENtZC5nZXQoIkVJIik7CiAgICAgICAgdGhpcy5zaGlmdCgpOwogICAgICAgIGNhY2hlRW50cnkucmVzZXQoKTsKICAgICAgICByZXR1cm4gY2FjaGVFbnRyeTsKICAgICAgfQogICAgfQogICAgY29uc3QgZGljdCA9IG5ldyBEaWN0KHRoaXMueHJlZik7CiAgICBmb3IgKGNvbnN0IGtleSBpbiBkaWN0TWFwKSB7CiAgICAgIGRpY3Quc2V0KGtleSwgZGljdE1hcFtrZXldKTsKICAgIH0KICAgIGxldCBpbWFnZVN0cmVhbSA9IHN0cmVhbS5tYWtlU3ViU3RyZWFtKHN0YXJ0UG9zLCBsZW5ndGgsIGRpY3QpOwogICAgaWYgKGNpcGhlclRyYW5zZm9ybSkgewogICAgICBpbWFnZVN0cmVhbSA9IGNpcGhlclRyYW5zZm9ybS5jcmVhdGVTdHJlYW0oaW1hZ2VTdHJlYW0sIGxlbmd0aCk7CiAgICB9CiAgICBpbWFnZVN0cmVhbSA9IHRoaXMuZmlsdGVyKGltYWdlU3RyZWFtLCBkaWN0LCBsZW5ndGgpOwogICAgaW1hZ2VTdHJlYW0uZGljdCA9IGRpY3Q7CiAgICBpZiAoY2FjaGVLZXkgIT09IHVuZGVmaW5lZCkgewogICAgICBpbWFnZVN0cmVhbS5jYWNoZUtleSA9IGBpbmxpbmVfaW1nXyR7Kyt0aGlzLl9pbWFnZUlkfWA7CiAgICAgIHRoaXMuaW1hZ2VDYWNoZVtjYWNoZUtleV0gPSBpbWFnZVN0cmVhbTsKICAgIH0KICAgIHRoaXMuYnVmMiA9IENtZC5nZXQoIkVJIik7CiAgICB0aGlzLnNoaWZ0KCk7CiAgICByZXR1cm4gaW1hZ2VTdHJlYW07CiAgfQogICNmaW5kU3RyZWFtTGVuZ3RoKHN0YXJ0UG9zKSB7CiAgICBjb25zdCB7CiAgICAgIHN0cmVhbQogICAgfSA9IHRoaXMubGV4ZXI7CiAgICBzdHJlYW0ucG9zID0gc3RhcnRQb3M7CiAgICBjb25zdCBTQ0FOX0JMT0NLX0xFTkdUSCA9IDIwNDg7CiAgICBjb25zdCBzaWduYXR1cmVMZW5ndGggPSAiZW5kc3RyZWFtIi5sZW5ndGg7CiAgICBjb25zdCBFTkRfU0lHTkFUVVJFID0gbmV3IFVpbnQ4QXJyYXkoWzB4NjUsIDB4NmUsIDB4NjRdKTsKICAgIGNvbnN0IGVuZExlbmd0aCA9IEVORF9TSUdOQVRVUkUubGVuZ3RoOwogICAgY29uc3QgUEFSVElBTF9TSUdOQVRVUkUgPSBbbmV3IFVpbnQ4QXJyYXkoWzB4NzMsIDB4NzQsIDB4NzIsIDB4NjUsIDB4NjEsIDB4NmRdKSwgbmV3IFVpbnQ4QXJyYXkoWzB4NzMsIDB4NzQsIDB4NjUsIDB4NjEsIDB4NmRdKSwgbmV3IFVpbnQ4QXJyYXkoWzB4NzMsIDB4NzQsIDB4NzIsIDB4NjUsIDB4NjFdKV07CiAgICBjb25zdCBub3JtYWxMZW5ndGggPSBzaWduYXR1cmVMZW5ndGggLSBlbmRMZW5ndGg7CiAgICB3aGlsZSAoc3RyZWFtLnBvcyA8IHN0cmVhbS5lbmQpIHsKICAgICAgY29uc3Qgc2NhbkJ5dGVzID0gc3RyZWFtLnBlZWtCeXRlcyhTQ0FOX0JMT0NLX0xFTkdUSCk7CiAgICAgIGNvbnN0IHNjYW5MZW5ndGggPSBzY2FuQnl0ZXMubGVuZ3RoIC0gc2lnbmF0dXJlTGVuZ3RoOwogICAgICBpZiAoc2Nhbkxlbmd0aCA8PSAwKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgbGV0IHBvcyA9IDA7CiAgICAgIHdoaWxlIChwb3MgPCBzY2FuTGVuZ3RoKSB7CiAgICAgICAgbGV0IGogPSAwOwogICAgICAgIHdoaWxlIChqIDwgZW5kTGVuZ3RoICYmIHNjYW5CeXRlc1twb3MgKyBqXSA9PT0gRU5EX1NJR05BVFVSRVtqXSkgewogICAgICAgICAgaisrOwogICAgICAgIH0KICAgICAgICBpZiAoaiA+PSBlbmRMZW5ndGgpIHsKICAgICAgICAgIGxldCBmb3VuZCA9IGZhbHNlOwogICAgICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIFBBUlRJQUxfU0lHTkFUVVJFKSB7CiAgICAgICAgICAgIGNvbnN0IHBhcnRMZW4gPSBwYXJ0Lmxlbmd0aDsKICAgICAgICAgICAgbGV0IGsgPSAwOwogICAgICAgICAgICB3aGlsZSAoayA8IHBhcnRMZW4gJiYgc2NhbkJ5dGVzW3BvcyArIGogKyBrXSA9PT0gcGFydFtrXSkgewogICAgICAgICAgICAgIGsrKzsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoayA+PSBub3JtYWxMZW5ndGgpIHsKICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGsgPj0gcGFydExlbikgewogICAgICAgICAgICAgIGNvbnN0IGxhc3RCeXRlID0gc2NhbkJ5dGVzW3BvcyArIGogKyBrXTsKICAgICAgICAgICAgICBpZiAoaXNXaGl0ZVNwYWNlKGxhc3RCeXRlKSkgewogICAgICAgICAgICAgICAgaW5mbyhgRm91bmQgIiR7Ynl0ZXNUb1N0cmluZyhbLi4uRU5EX1NJR05BVFVSRSwgLi4ucGFydF0pfSIgd2hlbiBgICsgInNlYXJjaGluZyBmb3IgZW5kc3RyZWFtIGNvbW1hbmQuIik7CiAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZm91bmQpIHsKICAgICAgICAgICAgc3RyZWFtLnBvcyArPSBwb3M7CiAgICAgICAgICAgIHJldHVybiBzdHJlYW0ucG9zIC0gc3RhcnRQb3M7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHBvcysrOwogICAgICB9CiAgICAgIHN0cmVhbS5wb3MgKz0gc2Nhbkxlbmd0aDsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CiAgbWFrZVN0cmVhbShkaWN0LCBjaXBoZXJUcmFuc2Zvcm0pIHsKICAgIGNvbnN0IGxleGVyID0gdGhpcy5sZXhlcjsKICAgIGxldCBzdHJlYW0gPSBsZXhlci5zdHJlYW07CiAgICBsZXhlci5za2lwVG9OZXh0TGluZSgpOwogICAgY29uc3Qgc3RhcnRQb3MgPSBzdHJlYW0ucG9zIC0gMTsKICAgIGxldCBsZW5ndGggPSBkaWN0LmdldCgiTGVuZ3RoIik7CiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIobGVuZ3RoKSkgewogICAgICBpbmZvKGBCYWQgbGVuZ3RoICIke2xlbmd0aCAmJiBsZW5ndGgudG9TdHJpbmcoKX0iIGluIHN0cmVhbS5gKTsKICAgICAgbGVuZ3RoID0gMDsKICAgIH0KICAgIHN0cmVhbS5wb3MgPSBzdGFydFBvcyArIGxlbmd0aDsKICAgIGxleGVyLm5leHRDaGFyKCk7CiAgICBpZiAodGhpcy50cnlTaGlmdCgpICYmIGlzQ21kKHRoaXMuYnVmMiwgImVuZHN0cmVhbSIpKSB7CiAgICAgIHRoaXMuc2hpZnQoKTsKICAgIH0gZWxzZSB7CiAgICAgIGxlbmd0aCA9IHRoaXMuI2ZpbmRTdHJlYW1MZW5ndGgoc3RhcnRQb3MpOwogICAgICBpZiAobGVuZ3RoIDwgMCkgewogICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiTWlzc2luZyBlbmRzdHJlYW0gY29tbWFuZC4iKTsKICAgICAgfQogICAgICBsZXhlci5uZXh0Q2hhcigpOwogICAgICB0aGlzLnNoaWZ0KCk7CiAgICAgIHRoaXMuc2hpZnQoKTsKICAgIH0KICAgIHRoaXMuc2hpZnQoKTsKICAgIHN0cmVhbSA9IHN0cmVhbS5tYWtlU3ViU3RyZWFtKHN0YXJ0UG9zLCBsZW5ndGgsIGRpY3QpOwogICAgaWYgKGNpcGhlclRyYW5zZm9ybSkgewogICAgICBzdHJlYW0gPSBjaXBoZXJUcmFuc2Zvcm0uY3JlYXRlU3RyZWFtKHN0cmVhbSwgbGVuZ3RoKTsKICAgIH0KICAgIHN0cmVhbSA9IHRoaXMuZmlsdGVyKHN0cmVhbSwgZGljdCwgbGVuZ3RoKTsKICAgIHN0cmVhbS5kaWN0ID0gZGljdDsKICAgIHJldHVybiBzdHJlYW07CiAgfQogIGZpbHRlcihzdHJlYW0sIGRpY3QsIGxlbmd0aCkgewogICAgbGV0IGZpbHRlciA9IGRpY3QuZ2V0KCJGIiwgIkZpbHRlciIpOwogICAgbGV0IHBhcmFtcyA9IGRpY3QuZ2V0KCJEUCIsICJEZWNvZGVQYXJtcyIpOwogICAgaWYgKGZpbHRlciBpbnN0YW5jZW9mIE5hbWUpIHsKICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW1zKSkgewogICAgICAgIHdhcm4oIi9EZWNvZGVQYXJtcyBzaG91bGQgbm90IGJlIGFuIEFycmF5LCB3aGVuIC9GaWx0ZXIgaXMgYSBOYW1lLiIpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLm1ha2VGaWx0ZXIoc3RyZWFtLCBmaWx0ZXIubmFtZSwgbGVuZ3RoLCBwYXJhbXMpOwogICAgfQogICAgbGV0IG1heWJlTGVuZ3RoID0gbGVuZ3RoOwogICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyKSkgewogICAgICBjb25zdCBmaWx0ZXJBcnJheSA9IGZpbHRlcjsKICAgICAgY29uc3QgcGFyYW1zQXJyYXkgPSBwYXJhbXM7CiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGZpbHRlckFycmF5Lmxlbmd0aDsgaSA8IGlpOyArK2kpIHsKICAgICAgICBmaWx0ZXIgPSB0aGlzLnhyZWYuZmV0Y2hJZlJlZihmaWx0ZXJBcnJheVtpXSk7CiAgICAgICAgaWYgKCEoZmlsdGVyIGluc3RhbmNlb2YgTmFtZSkpIHsKICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcihgQmFkIGZpbHRlciBuYW1lICIke2ZpbHRlcn0iYCk7CiAgICAgICAgfQogICAgICAgIHBhcmFtcyA9IG51bGw7CiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW1zQXJyYXkpICYmIGkgaW4gcGFyYW1zQXJyYXkpIHsKICAgICAgICAgIHBhcmFtcyA9IHRoaXMueHJlZi5mZXRjaElmUmVmKHBhcmFtc0FycmF5W2ldKTsKICAgICAgICB9CiAgICAgICAgc3RyZWFtID0gdGhpcy5tYWtlRmlsdGVyKHN0cmVhbSwgZmlsdGVyLm5hbWUsIG1heWJlTGVuZ3RoLCBwYXJhbXMpOwogICAgICAgIG1heWJlTGVuZ3RoID0gbnVsbDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHN0cmVhbTsKICB9CiAgbWFrZUZpbHRlcihzdHJlYW0sIG5hbWUsIG1heWJlTGVuZ3RoLCBwYXJhbXMpIHsKICAgIGlmIChtYXliZUxlbmd0aCA9PT0gMCkgewogICAgICB3YXJuKGBFbXB0eSAiJHtuYW1lfSIgc3RyZWFtLmApOwogICAgICByZXR1cm4gbmV3IE51bGxTdHJlYW0oKTsKICAgIH0KICAgIHRyeSB7CiAgICAgIHN3aXRjaCAobmFtZSkgewogICAgICAgIGNhc2UgIkZsIjoKICAgICAgICBjYXNlICJGbGF0ZURlY29kZSI6CiAgICAgICAgICBpZiAocGFyYW1zKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUHJlZGljdG9yU3RyZWFtKG5ldyBGbGF0ZVN0cmVhbShzdHJlYW0sIG1heWJlTGVuZ3RoKSwgbWF5YmVMZW5ndGgsIHBhcmFtcyk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gbmV3IEZsYXRlU3RyZWFtKHN0cmVhbSwgbWF5YmVMZW5ndGgpOwogICAgICAgIGNhc2UgIkxaVyI6CiAgICAgICAgY2FzZSAiTFpXRGVjb2RlIjoKICAgICAgICAgIGxldCBlYXJseUNoYW5nZSA9IDE7CiAgICAgICAgICBpZiAocGFyYW1zKSB7CiAgICAgICAgICAgIGlmIChwYXJhbXMuaGFzKCJFYXJseUNoYW5nZSIpKSB7CiAgICAgICAgICAgICAgZWFybHlDaGFuZ2UgPSBwYXJhbXMuZ2V0KCJFYXJseUNoYW5nZSIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBuZXcgUHJlZGljdG9yU3RyZWFtKG5ldyBMWldTdHJlYW0oc3RyZWFtLCBtYXliZUxlbmd0aCwgZWFybHlDaGFuZ2UpLCBtYXliZUxlbmd0aCwgcGFyYW1zKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBuZXcgTFpXU3RyZWFtKHN0cmVhbSwgbWF5YmVMZW5ndGgsIGVhcmx5Q2hhbmdlKTsKICAgICAgICBjYXNlICJEQ1QiOgogICAgICAgIGNhc2UgIkRDVERlY29kZSI6CiAgICAgICAgICByZXR1cm4gbmV3IEpwZWdTdHJlYW0oc3RyZWFtLCBtYXliZUxlbmd0aCwgcGFyYW1zKTsKICAgICAgICBjYXNlICJKUFgiOgogICAgICAgIGNhc2UgIkpQWERlY29kZSI6CiAgICAgICAgICByZXR1cm4gbmV3IEpweFN0cmVhbShzdHJlYW0sIG1heWJlTGVuZ3RoLCBwYXJhbXMpOwogICAgICAgIGNhc2UgIkE4NSI6CiAgICAgICAgY2FzZSAiQVNDSUk4NURlY29kZSI6CiAgICAgICAgICByZXR1cm4gbmV3IEFzY2lpODVTdHJlYW0oc3RyZWFtLCBtYXliZUxlbmd0aCk7CiAgICAgICAgY2FzZSAiQUh4IjoKICAgICAgICBjYXNlICJBU0NJSUhleERlY29kZSI6CiAgICAgICAgICByZXR1cm4gbmV3IEFzY2lpSGV4U3RyZWFtKHN0cmVhbSwgbWF5YmVMZW5ndGgpOwogICAgICAgIGNhc2UgIkNDRiI6CiAgICAgICAgY2FzZSAiQ0NJVFRGYXhEZWNvZGUiOgogICAgICAgICAgcmV0dXJuIG5ldyBDQ0lUVEZheFN0cmVhbShzdHJlYW0sIG1heWJlTGVuZ3RoLCBwYXJhbXMpOwogICAgICAgIGNhc2UgIlJMIjoKICAgICAgICBjYXNlICJSdW5MZW5ndGhEZWNvZGUiOgogICAgICAgICAgcmV0dXJuIG5ldyBSdW5MZW5ndGhTdHJlYW0oc3RyZWFtLCBtYXliZUxlbmd0aCk7CiAgICAgICAgY2FzZSAiSkJJRzJEZWNvZGUiOgogICAgICAgICAgcmV0dXJuIG5ldyBKYmlnMlN0cmVhbShzdHJlYW0sIG1heWJlTGVuZ3RoLCBwYXJhbXMpOwogICAgICB9CiAgICAgIHdhcm4oYEZpbHRlciAiJHtuYW1lfSIgaXMgbm90IHN1cHBvcnRlZC5gKTsKICAgICAgcmV0dXJuIHN0cmVhbTsKICAgIH0gY2F0Y2ggKGV4KSB7CiAgICAgIGlmIChleCBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7CiAgICAgICAgdGhyb3cgZXg7CiAgICAgIH0KICAgICAgd2FybihgSW52YWxpZCBzdHJlYW06ICIke2V4fSJgKTsKICAgICAgcmV0dXJuIG5ldyBOdWxsU3RyZWFtKCk7CiAgICB9CiAgfQp9CmNvbnN0IHNwZWNpYWxDaGFycyA9IFsxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAwLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAyLCAwLCAwLCAyLCAyLCAwLCAwLCAwLCAwLCAwLCAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyLCAwLCAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyLCAwLCAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyLCAwLCAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXTsKZnVuY3Rpb24gdG9IZXhEaWdpdChjaCkgewogIGlmIChjaCA+PSAweDMwICYmIGNoIDw9IDB4MzkpIHsKICAgIHJldHVybiBjaCAmIDB4MGY7CiAgfQogIGlmIChjaCA+PSAweDQxICYmIGNoIDw9IDB4NDYgfHwgY2ggPj0gMHg2MSAmJiBjaCA8PSAweDY2KSB7CiAgICByZXR1cm4gKGNoICYgMHgwZikgKyA5OwogIH0KICByZXR1cm4gLTE7Cn0KY2xhc3MgTGV4ZXIgewogIGNvbnN0cnVjdG9yKHN0cmVhbSwga25vd25Db21tYW5kcyA9IG51bGwpIHsKICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtOwogICAgdGhpcy5uZXh0Q2hhcigpOwogICAgdGhpcy5zdHJCdWYgPSBbXTsKICAgIHRoaXMua25vd25Db21tYW5kcyA9IGtub3duQ29tbWFuZHM7CiAgICB0aGlzLl9oZXhTdHJpbmdOdW1XYXJuID0gMDsKICAgIHRoaXMuYmVnaW5JbmxpbmVJbWFnZVBvcyA9IC0xOwogIH0KICBuZXh0Q2hhcigpIHsKICAgIHJldHVybiB0aGlzLmN1cnJlbnRDaGFyID0gdGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpOwogIH0KICBwZWVrQ2hhcigpIHsKICAgIHJldHVybiB0aGlzLnN0cmVhbS5wZWVrQnl0ZSgpOwogIH0KICBnZXROdW1iZXIoKSB7CiAgICBsZXQgY2ggPSB0aGlzLmN1cnJlbnRDaGFyOwogICAgbGV0IGVOb3RhdGlvbiA9IGZhbHNlOwogICAgbGV0IGRpdmlkZUJ5ID0gMDsKICAgIGxldCBzaWduID0gMTsKICAgIGlmIChjaCA9PT0gMHgyZCkgewogICAgICBzaWduID0gLTE7CiAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpOwogICAgICBpZiAoY2ggPT09IDB4MmQpIHsKICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyYikgewogICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTsKICAgIH0KICAgIGlmIChjaCA9PT0gMHgwYSB8fCBjaCA9PT0gMHgwZCkgewogICAgICBkbyB7CiAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7CiAgICAgIH0gd2hpbGUgKGNoID09PSAweDBhIHx8IGNoID09PSAweDBkKTsKICAgIH0KICAgIGlmIChjaCA9PT0gMHgyZSkgewogICAgICBkaXZpZGVCeSA9IDEwOwogICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTsKICAgIH0KICAgIGlmIChjaCA8IDB4MzAgfHwgY2ggPiAweDM5KSB7CiAgICAgIGNvbnN0IG1zZyA9IGBJbnZhbGlkIG51bWJlcjogJHtTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKX0gKGNoYXJDb2RlICR7Y2h9KWA7CiAgICAgIGlmIChpc1doaXRlU3BhY2UoY2gpIHx8IGNoID09PSAweDI4IHx8IGNoID09PSAweDNjIHx8IGNoID09PSAtMSkgewogICAgICAgIGluZm8oYExleGVyLmdldE51bWJlciAtICIke21zZ30iLmApOwogICAgICAgIHJldHVybiAwOwogICAgICB9CiAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcihtc2cpOwogICAgfQogICAgbGV0IGJhc2VWYWx1ZSA9IGNoIC0gMHgzMDsKICAgIGxldCBwb3dlclZhbHVlID0gMDsKICAgIGxldCBwb3dlclZhbHVlU2lnbiA9IDE7CiAgICB3aGlsZSAoKGNoID0gdGhpcy5uZXh0Q2hhcigpKSA+PSAwKSB7CiAgICAgIGlmIChjaCA+PSAweDMwICYmIGNoIDw9IDB4MzkpIHsKICAgICAgICBjb25zdCBjdXJyZW50RGlnaXQgPSBjaCAtIDB4MzA7CiAgICAgICAgaWYgKGVOb3RhdGlvbikgewogICAgICAgICAgcG93ZXJWYWx1ZSA9IHBvd2VyVmFsdWUgKiAxMCArIGN1cnJlbnREaWdpdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGRpdmlkZUJ5ICE9PSAwKSB7CiAgICAgICAgICAgIGRpdmlkZUJ5ICo9IDEwOwogICAgICAgICAgfQogICAgICAgICAgYmFzZVZhbHVlID0gYmFzZVZhbHVlICogMTAgKyBjdXJyZW50RGlnaXQ7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGNoID09PSAweDJlKSB7CiAgICAgICAgaWYgKGRpdmlkZUJ5ID09PSAwKSB7CiAgICAgICAgICBkaXZpZGVCeSA9IDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyZCkgewogICAgICAgIHdhcm4oIkJhZGx5IGZvcm1hdHRlZCBudW1iZXI6IG1pbnVzIHNpZ24gaW4gdGhlIG1pZGRsZSIpOwogICAgICB9IGVsc2UgaWYgKGNoID09PSAweDQ1IHx8IGNoID09PSAweDY1KSB7CiAgICAgICAgY2ggPSB0aGlzLnBlZWtDaGFyKCk7CiAgICAgICAgaWYgKGNoID09PSAweDJiIHx8IGNoID09PSAweDJkKSB7CiAgICAgICAgICBwb3dlclZhbHVlU2lnbiA9IGNoID09PSAweDJkID8gLTEgOiAxOwogICAgICAgICAgdGhpcy5uZXh0Q2hhcigpOwogICAgICAgIH0gZWxzZSBpZiAoY2ggPCAweDMwIHx8IGNoID4gMHgzOSkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGVOb3RhdGlvbiA9IHRydWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGlmIChkaXZpZGVCeSAhPT0gMCkgewogICAgICBiYXNlVmFsdWUgLz0gZGl2aWRlQnk7CiAgICB9CiAgICBpZiAoZU5vdGF0aW9uKSB7CiAgICAgIGJhc2VWYWx1ZSAqPSAxMCAqKiAocG93ZXJWYWx1ZVNpZ24gKiBwb3dlclZhbHVlKTsKICAgIH0KICAgIHJldHVybiBzaWduICogYmFzZVZhbHVlOwogIH0KICBnZXRTdHJpbmcoKSB7CiAgICBsZXQgbnVtUGFyZW4gPSAxOwogICAgbGV0IGRvbmUgPSBmYWxzZTsKICAgIGNvbnN0IHN0ckJ1ZiA9IHRoaXMuc3RyQnVmOwogICAgc3RyQnVmLmxlbmd0aCA9IDA7CiAgICBsZXQgY2ggPSB0aGlzLm5leHRDaGFyKCk7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBsZXQgY2hhckJ1ZmZlcmVkID0gZmFsc2U7CiAgICAgIHN3aXRjaCAoY2ggfCAwKSB7CiAgICAgICAgY2FzZSAtMToKICAgICAgICAgIHdhcm4oIlVudGVybWluYXRlZCBzdHJpbmciKTsKICAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAweDI4OgogICAgICAgICAgKytudW1QYXJlbjsKICAgICAgICAgIHN0ckJ1Zi5wdXNoKCIoIik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDB4Mjk6CiAgICAgICAgICBpZiAoLS1udW1QYXJlbiA9PT0gMCkgewogICAgICAgICAgICB0aGlzLm5leHRDaGFyKCk7CiAgICAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RyQnVmLnB1c2goIikiKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMHg1YzoKICAgICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpOwogICAgICAgICAgc3dpdGNoIChjaCkgewogICAgICAgICAgICBjYXNlIC0xOgogICAgICAgICAgICAgIHdhcm4oIlVudGVybWluYXRlZCBzdHJpbmciKTsKICAgICAgICAgICAgICBkb25lID0gdHJ1ZTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAweDZlOgogICAgICAgICAgICAgIHN0ckJ1Zi5wdXNoKCJcbiIpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDB4NzI6CiAgICAgICAgICAgICAgc3RyQnVmLnB1c2goIlxyIik7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMHg3NDoKICAgICAgICAgICAgICBzdHJCdWYucHVzaCgiXHQiKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAweDYyOgogICAgICAgICAgICAgIHN0ckJ1Zi5wdXNoKCJcYiIpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDB4NjY6CiAgICAgICAgICAgICAgc3RyQnVmLnB1c2goIlxmIik7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMHg1YzoKICAgICAgICAgICAgY2FzZSAweDI4OgogICAgICAgICAgICBjYXNlIDB4Mjk6CiAgICAgICAgICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDB4MzA6CiAgICAgICAgICAgIGNhc2UgMHgzMToKICAgICAgICAgICAgY2FzZSAweDMyOgogICAgICAgICAgICBjYXNlIDB4MzM6CiAgICAgICAgICAgIGNhc2UgMHgzNDoKICAgICAgICAgICAgY2FzZSAweDM1OgogICAgICAgICAgICBjYXNlIDB4MzY6CiAgICAgICAgICAgIGNhc2UgMHgzNzoKICAgICAgICAgICAgICBsZXQgeCA9IGNoICYgMHgwZjsKICAgICAgICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTsKICAgICAgICAgICAgICBjaGFyQnVmZmVyZWQgPSB0cnVlOwogICAgICAgICAgICAgIGlmIChjaCA+PSAweDMwICYmIGNoIDw9IDB4MzcpIHsKICAgICAgICAgICAgICAgIHggPSAoeCA8PCAzKSArIChjaCAmIDB4MGYpOwogICAgICAgICAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7CiAgICAgICAgICAgICAgICBpZiAoY2ggPj0gMHgzMCAmJiBjaCA8PSAweDM3KSB7CiAgICAgICAgICAgICAgICAgIGNoYXJCdWZmZXJlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICB4ID0gKHggPDwgMykgKyAoY2ggJiAweDBmKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh4KSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMHgwZDoKICAgICAgICAgICAgICBpZiAodGhpcy5wZWVrQ2hhcigpID09PSAweDBhKSB7CiAgICAgICAgICAgICAgICB0aGlzLm5leHRDaGFyKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDB4MGE6CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHN0ckJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGlmIChkb25lKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgaWYgKCFjaGFyQnVmZmVyZWQpIHsKICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHN0ckJ1Zi5qb2luKCIiKTsKICB9CiAgZ2V0TmFtZSgpIHsKICAgIGxldCBjaCwgcHJldmlvdXNDaDsKICAgIGNvbnN0IHN0ckJ1ZiA9IHRoaXMuc3RyQnVmOwogICAgc3RyQnVmLmxlbmd0aCA9IDA7CiAgICB3aGlsZSAoKGNoID0gdGhpcy5uZXh0Q2hhcigpKSA+PSAwICYmICFzcGVjaWFsQ2hhcnNbY2hdKSB7CiAgICAgIGlmIChjaCA9PT0gMHgyMykgewogICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpOwogICAgICAgIGlmIChzcGVjaWFsQ2hhcnNbY2hdKSB7CiAgICAgICAgICB3YXJuKCJMZXhlcl9nZXROYW1lOiAiICsgIk5VTUJFUiBTSUdOICgjKSBzaG91bGQgYmUgZm9sbG93ZWQgYnkgYSBoZXhhZGVjaW1hbCBudW1iZXIuIik7CiAgICAgICAgICBzdHJCdWYucHVzaCgiIyIpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHggPSB0b0hleERpZ2l0KGNoKTsKICAgICAgICBpZiAoeCAhPT0gLTEpIHsKICAgICAgICAgIHByZXZpb3VzQ2ggPSBjaDsKICAgICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpOwogICAgICAgICAgY29uc3QgeDIgPSB0b0hleERpZ2l0KGNoKTsKICAgICAgICAgIGlmICh4MiA9PT0gLTEpIHsKICAgICAgICAgICAgd2FybihgTGV4ZXJfZ2V0TmFtZTogSWxsZWdhbCBkaWdpdCAoJHtTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKX0pIGAgKyAiaW4gaGV4YWRlY2ltYWwgbnVtYmVyLiIpOwogICAgICAgICAgICBzdHJCdWYucHVzaCgiIyIsIFN0cmluZy5mcm9tQ2hhckNvZGUocHJldmlvdXNDaCkpOwogICAgICAgICAgICBpZiAoc3BlY2lhbENoYXJzW2NoXSkgewogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHN0ckJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHggPDwgNCB8IHgyKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHN0ckJ1Zi5wdXNoKCIjIiwgU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChzdHJCdWYubGVuZ3RoID4gMTI3KSB7CiAgICAgIHdhcm4oYE5hbWUgdG9rZW4gaXMgbG9uZ2VyIHRoYW4gYWxsb3dlZCBieSB0aGUgc3BlYzogJHtzdHJCdWYubGVuZ3RofWApOwogICAgfQogICAgcmV0dXJuIE5hbWUuZ2V0KHN0ckJ1Zi5qb2luKCIiKSk7CiAgfQogIF9oZXhTdHJpbmdXYXJuKGNoKSB7CiAgICBjb25zdCBNQVhfSEVYX1NUUklOR19OVU1fV0FSTiA9IDU7CiAgICBpZiAodGhpcy5faGV4U3RyaW5nTnVtV2FybisrID09PSBNQVhfSEVYX1NUUklOR19OVU1fV0FSTikgewogICAgICB3YXJuKCJnZXRIZXhTdHJpbmcgLSBpZ25vcmluZyBhZGRpdGlvbmFsIGludmFsaWQgY2hhcmFjdGVycy4iKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHRoaXMuX2hleFN0cmluZ051bVdhcm4gPiBNQVhfSEVYX1NUUklOR19OVU1fV0FSTikgewogICAgICByZXR1cm47CiAgICB9CiAgICB3YXJuKGBnZXRIZXhTdHJpbmcgLSBpZ25vcmluZyBpbnZhbGlkIGNoYXJhY3RlcjogJHtjaH1gKTsKICB9CiAgZ2V0SGV4U3RyaW5nKCkgewogICAgY29uc3Qgc3RyQnVmID0gdGhpcy5zdHJCdWY7CiAgICBzdHJCdWYubGVuZ3RoID0gMDsKICAgIGxldCBjaCA9IHRoaXMuY3VycmVudENoYXI7CiAgICBsZXQgZmlyc3REaWdpdCA9IC0xLAogICAgICBkaWdpdCA9IC0xOwogICAgdGhpcy5faGV4U3RyaW5nTnVtV2FybiA9IDA7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBpZiAoY2ggPCAwKSB7CiAgICAgICAgd2FybigiVW50ZXJtaW5hdGVkIGhleCBzdHJpbmciKTsKICAgICAgICBicmVhazsKICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgzZSkgewogICAgICAgIHRoaXMubmV4dENoYXIoKTsKICAgICAgICBicmVhazsKICAgICAgfSBlbHNlIGlmIChzcGVjaWFsQ2hhcnNbY2hdID09PSAxKSB7CiAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7CiAgICAgICAgY29udGludWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZGlnaXQgPSB0b0hleERpZ2l0KGNoKTsKICAgICAgICBpZiAoZGlnaXQgPT09IC0xKSB7CiAgICAgICAgICB0aGlzLl9oZXhTdHJpbmdXYXJuKGNoKTsKICAgICAgICB9IGVsc2UgaWYgKGZpcnN0RGlnaXQgPT09IC0xKSB7CiAgICAgICAgICBmaXJzdERpZ2l0ID0gZGlnaXQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHN0ckJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZmlyc3REaWdpdCA8PCA0IHwgZGlnaXQpKTsKICAgICAgICAgIGZpcnN0RGlnaXQgPSAtMTsKICAgICAgICB9CiAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7CiAgICAgIH0KICAgIH0KICAgIGlmIChmaXJzdERpZ2l0ICE9PSAtMSkgewogICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGZpcnN0RGlnaXQgPDwgNCkpOwogICAgfQogICAgcmV0dXJuIHN0ckJ1Zi5qb2luKCIiKTsKICB9CiAgZ2V0T2JqKCkgewogICAgbGV0IGNvbW1lbnQgPSBmYWxzZTsKICAgIGxldCBjaCA9IHRoaXMuY3VycmVudENoYXI7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBpZiAoY2ggPCAwKSB7CiAgICAgICAgcmV0dXJuIEVPRjsKICAgICAgfQogICAgICBpZiAoY29tbWVudCkgewogICAgICAgIGlmIChjaCA9PT0gMHgwYSB8fCBjaCA9PT0gMHgwZCkgewogICAgICAgICAgY29tbWVudCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyNSkgewogICAgICAgIGNvbW1lbnQgPSB0cnVlOwogICAgICB9IGVsc2UgaWYgKHNwZWNpYWxDaGFyc1tjaF0gIT09IDEpIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTsKICAgIH0KICAgIHN3aXRjaCAoY2ggfCAwKSB7CiAgICAgIGNhc2UgMHgzMDoKICAgICAgY2FzZSAweDMxOgogICAgICBjYXNlIDB4MzI6CiAgICAgIGNhc2UgMHgzMzoKICAgICAgY2FzZSAweDM0OgogICAgICBjYXNlIDB4MzU6CiAgICAgIGNhc2UgMHgzNjoKICAgICAgY2FzZSAweDM3OgogICAgICBjYXNlIDB4Mzg6CiAgICAgIGNhc2UgMHgzOToKICAgICAgY2FzZSAweDJiOgogICAgICBjYXNlIDB4MmQ6CiAgICAgIGNhc2UgMHgyZToKICAgICAgICByZXR1cm4gdGhpcy5nZXROdW1iZXIoKTsKICAgICAgY2FzZSAweDI4OgogICAgICAgIHJldHVybiB0aGlzLmdldFN0cmluZygpOwogICAgICBjYXNlIDB4MmY6CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TmFtZSgpOwogICAgICBjYXNlIDB4NWI6CiAgICAgICAgdGhpcy5uZXh0Q2hhcigpOwogICAgICAgIHJldHVybiBDbWQuZ2V0KCJbIik7CiAgICAgIGNhc2UgMHg1ZDoKICAgICAgICB0aGlzLm5leHRDaGFyKCk7CiAgICAgICAgcmV0dXJuIENtZC5nZXQoIl0iKTsKICAgICAgY2FzZSAweDNjOgogICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpOwogICAgICAgIGlmIChjaCA9PT0gMHgzYykgewogICAgICAgICAgdGhpcy5uZXh0Q2hhcigpOwogICAgICAgICAgcmV0dXJuIENtZC5nZXQoIjw8Iik7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLmdldEhleFN0cmluZygpOwogICAgICBjYXNlIDB4M2U6CiAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7CiAgICAgICAgaWYgKGNoID09PSAweDNlKSB7CiAgICAgICAgICB0aGlzLm5leHRDaGFyKCk7CiAgICAgICAgICByZXR1cm4gQ21kLmdldCgiPj4iKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIENtZC5nZXQoIj4iKTsKICAgICAgY2FzZSAweDdiOgogICAgICAgIHRoaXMubmV4dENoYXIoKTsKICAgICAgICByZXR1cm4gQ21kLmdldCgieyIpOwogICAgICBjYXNlIDB4N2Q6CiAgICAgICAgdGhpcy5uZXh0Q2hhcigpOwogICAgICAgIHJldHVybiBDbWQuZ2V0KCJ9Iik7CiAgICAgIGNhc2UgMHgyOToKICAgICAgICB0aGlzLm5leHRDaGFyKCk7CiAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBJbGxlZ2FsIGNoYXJhY3RlcjogJHtjaH1gKTsKICAgIH0KICAgIGxldCBzdHIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTsKICAgIGlmIChjaCA8IDB4MjAgfHwgY2ggPiAweDdmKSB7CiAgICAgIGNvbnN0IG5leHRDaCA9IHRoaXMucGVla0NoYXIoKTsKICAgICAgaWYgKG5leHRDaCA+PSAweDIwICYmIG5leHRDaCA8PSAweDdmKSB7CiAgICAgICAgdGhpcy5uZXh0Q2hhcigpOwogICAgICAgIHJldHVybiBDbWQuZ2V0KHN0cik7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0IGtub3duQ29tbWFuZHMgPSB0aGlzLmtub3duQ29tbWFuZHM7CiAgICBsZXQga25vd25Db21tYW5kRm91bmQgPSBrbm93bkNvbW1hbmRzPy5bc3RyXSAhPT0gdW5kZWZpbmVkOwogICAgd2hpbGUgKChjaCA9IHRoaXMubmV4dENoYXIoKSkgPj0gMCAmJiAhc3BlY2lhbENoYXJzW2NoXSkgewogICAgICBjb25zdCBwb3NzaWJsZUNvbW1hbmQgPSBzdHIgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTsKICAgICAgaWYgKGtub3duQ29tbWFuZEZvdW5kICYmIGtub3duQ29tbWFuZHNbcG9zc2libGVDb21tYW5kXSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgaWYgKHN0ci5sZW5ndGggPT09IDEyOCkgewogICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcihgQ29tbWFuZCB0b2tlbiB0b28gbG9uZzogJHtzdHIubGVuZ3RofWApOwogICAgICB9CiAgICAgIHN0ciA9IHBvc3NpYmxlQ29tbWFuZDsKICAgICAga25vd25Db21tYW5kRm91bmQgPSBrbm93bkNvbW1hbmRzPy5bc3RyXSAhPT0gdW5kZWZpbmVkOwogICAgfQogICAgaWYgKHN0ciA9PT0gInRydWUiKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKHN0ciA9PT0gImZhbHNlIikgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAoc3RyID09PSAibnVsbCIpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBpZiAoc3RyID09PSAiQkkiKSB7CiAgICAgIHRoaXMuYmVnaW5JbmxpbmVJbWFnZVBvcyA9IHRoaXMuc3RyZWFtLnBvczsKICAgIH0KICAgIHJldHVybiBDbWQuZ2V0KHN0cik7CiAgfQogIHNraXBUb05leHRMaW5lKCkgewogICAgbGV0IGNoID0gdGhpcy5jdXJyZW50Q2hhcjsKICAgIHdoaWxlIChjaCA+PSAwKSB7CiAgICAgIGlmIChjaCA9PT0gMHgwZCkgewogICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpOwogICAgICAgIGlmIChjaCA9PT0gMHgwYSkgewogICAgICAgICAgdGhpcy5uZXh0Q2hhcigpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgwYSkgewogICAgICAgIHRoaXMubmV4dENoYXIoKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTsKICAgIH0KICB9Cn0KY2xhc3MgTGluZWFyaXphdGlvbiB7CiAgc3RhdGljIGNyZWF0ZShzdHJlYW0pIHsKICAgIGZ1bmN0aW9uIGdldEludChsaW5EaWN0LCBuYW1lLCBhbGxvd1plcm9WYWx1ZSA9IGZhbHNlKSB7CiAgICAgIGNvbnN0IG9iaiA9IGxpbkRpY3QuZ2V0KG5hbWUpOwogICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihvYmopICYmIChhbGxvd1plcm9WYWx1ZSA/IG9iaiA+PSAwIDogb2JqID4gMCkpIHsKICAgICAgICByZXR1cm4gb2JqOwogICAgICB9CiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlICIke25hbWV9IiBwYXJhbWV0ZXIgaW4gdGhlIGxpbmVhcml6YXRpb24gYCArICJkaWN0aW9uYXJ5IGlzIGludmFsaWQuIik7CiAgICB9CiAgICBmdW5jdGlvbiBnZXRIaW50cyhsaW5EaWN0KSB7CiAgICAgIGNvbnN0IGhpbnRzID0gbGluRGljdC5nZXQoIkgiKTsKICAgICAgbGV0IGhpbnRzTGVuZ3RoOwogICAgICBpZiAoQXJyYXkuaXNBcnJheShoaW50cykgJiYgKChoaW50c0xlbmd0aCA9IGhpbnRzLmxlbmd0aCkgPT09IDIgfHwgaGludHNMZW5ndGggPT09IDQpKSB7CiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGhpbnRzTGVuZ3RoOyBpbmRleCsrKSB7CiAgICAgICAgICBjb25zdCBoaW50ID0gaGludHNbaW5kZXhdOwogICAgICAgICAgaWYgKCEoTnVtYmVyLmlzSW50ZWdlcihoaW50KSAmJiBoaW50ID4gMCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBIaW50ICgke2luZGV4fSkgaW4gdGhlIGxpbmVhcml6YXRpb24gZGljdGlvbmFyeSBpcyBpbnZhbGlkLmApOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gaGludHM7CiAgICAgIH0KICAgICAgdGhyb3cgbmV3IEVycm9yKCJIaW50IGFycmF5IGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgaXMgaW52YWxpZC4iKTsKICAgIH0KICAgIGNvbnN0IHBhcnNlciA9IG5ldyBQYXJzZXIoewogICAgICBsZXhlcjogbmV3IExleGVyKHN0cmVhbSksCiAgICAgIHhyZWY6IG51bGwKICAgIH0pOwogICAgY29uc3Qgb2JqMSA9IHBhcnNlci5nZXRPYmooKTsKICAgIGNvbnN0IG9iajIgPSBwYXJzZXIuZ2V0T2JqKCk7CiAgICBjb25zdCBvYmozID0gcGFyc2VyLmdldE9iaigpOwogICAgY29uc3QgbGluRGljdCA9IHBhcnNlci5nZXRPYmooKTsKICAgIGxldCBvYmosIGxlbmd0aDsKICAgIGlmICghKE51bWJlci5pc0ludGVnZXIob2JqMSkgJiYgTnVtYmVyLmlzSW50ZWdlcihvYmoyKSAmJiBpc0NtZChvYmozLCAib2JqIikgJiYgbGluRGljdCBpbnN0YW5jZW9mIERpY3QgJiYgdHlwZW9mIChvYmogPSBsaW5EaWN0LmdldCgiTGluZWFyaXplZCIpKSA9PT0gIm51bWJlciIgJiYgb2JqID4gMCkpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9IGVsc2UgaWYgKChsZW5ndGggPSBnZXRJbnQobGluRGljdCwgIkwiKSkgIT09IHN0cmVhbS5sZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgIkwiIHBhcmFtZXRlciBpbiB0aGUgbGluZWFyaXphdGlvbiBkaWN0aW9uYXJ5ICcgKyAiZG9lcyBub3QgZXF1YWwgdGhlIHN0cmVhbSBsZW5ndGguIik7CiAgICB9CiAgICByZXR1cm4gewogICAgICBsZW5ndGgsCiAgICAgIGhpbnRzOiBnZXRIaW50cyhsaW5EaWN0KSwKICAgICAgb2JqZWN0TnVtYmVyRmlyc3Q6IGdldEludChsaW5EaWN0LCAiTyIpLAogICAgICBlbmRGaXJzdDogZ2V0SW50KGxpbkRpY3QsICJFIiksCiAgICAgIG51bVBhZ2VzOiBnZXRJbnQobGluRGljdCwgIk4iKSwKICAgICAgbWFpblhSZWZFbnRyaWVzT2Zmc2V0OiBnZXRJbnQobGluRGljdCwgIlQiKSwKICAgICAgcGFnZUZpcnN0OiBsaW5EaWN0LmhhcygiUCIpID8gZ2V0SW50KGxpbkRpY3QsICJQIiwgdHJ1ZSkgOiAwCiAgICB9OwogIH0KfQoKOy8vIC4vc3JjL2NvcmUvY21hcC5qcwoKCgoKCgoKY29uc3QgQlVJTFRfSU5fQ01BUFMgPSBbIkFkb2JlLUdCMS1VQ1MyIiwgIkFkb2JlLUNOUzEtVUNTMiIsICJBZG9iZS1KYXBhbjEtVUNTMiIsICJBZG9iZS1Lb3JlYTEtVUNTMiIsICI3OC1FVUMtSCIsICI3OC1FVUMtViIsICI3OC1IIiwgIjc4LVJLU0otSCIsICI3OC1SS1NKLVYiLCAiNzgtViIsICI3OG1zLVJLU0otSCIsICI3OG1zLVJLU0otViIsICI4M3B2LVJLU0otSCIsICI5MG1zLVJLU0otSCIsICI5MG1zLVJLU0otViIsICI5MG1zcC1SS1NKLUgiLCAiOTBtc3AtUktTSi1WIiwgIjkwcHYtUktTSi1IIiwgIjkwcHYtUktTSi1WIiwgIkFkZC1IIiwgIkFkZC1SS1NKLUgiLCAiQWRkLVJLU0otViIsICJBZGQtViIsICJBZG9iZS1DTlMxLTAiLCAiQWRvYmUtQ05TMS0xIiwgIkFkb2JlLUNOUzEtMiIsICJBZG9iZS1DTlMxLTMiLCAiQWRvYmUtQ05TMS00IiwgIkFkb2JlLUNOUzEtNSIsICJBZG9iZS1DTlMxLTYiLCAiQWRvYmUtR0IxLTAiLCAiQWRvYmUtR0IxLTEiLCAiQWRvYmUtR0IxLTIiLCAiQWRvYmUtR0IxLTMiLCAiQWRvYmUtR0IxLTQiLCAiQWRvYmUtR0IxLTUiLCAiQWRvYmUtSmFwYW4xLTAiLCAiQWRvYmUtSmFwYW4xLTEiLCAiQWRvYmUtSmFwYW4xLTIiLCAiQWRvYmUtSmFwYW4xLTMiLCAiQWRvYmUtSmFwYW4xLTQiLCAiQWRvYmUtSmFwYW4xLTUiLCAiQWRvYmUtSmFwYW4xLTYiLCAiQWRvYmUtS29yZWExLTAiLCAiQWRvYmUtS29yZWExLTEiLCAiQWRvYmUtS29yZWExLTIiLCAiQjUtSCIsICJCNS1WIiwgIkI1cGMtSCIsICJCNXBjLVYiLCAiQ05TLUVVQy1IIiwgIkNOUy1FVUMtViIsICJDTlMxLUgiLCAiQ05TMS1WIiwgIkNOUzItSCIsICJDTlMyLVYiLCAiRVRISy1CNS1IIiwgIkVUSEstQjUtViIsICJFVGVuLUI1LUgiLCAiRVRlbi1CNS1WIiwgIkVUZW5tcy1CNS1IIiwgIkVUZW5tcy1CNS1WIiwgIkVVQy1IIiwgIkVVQy1WIiwgIkV4dC1IIiwgIkV4dC1SS1NKLUgiLCAiRXh0LVJLU0otViIsICJFeHQtViIsICJHQi1FVUMtSCIsICJHQi1FVUMtViIsICJHQi1IIiwgIkdCLVYiLCAiR0JLLUVVQy1IIiwgIkdCSy1FVUMtViIsICJHQksySy1IIiwgIkdCSzJLLVYiLCAiR0JLcC1FVUMtSCIsICJHQktwLUVVQy1WIiwgIkdCVC1FVUMtSCIsICJHQlQtRVVDLVYiLCAiR0JULUgiLCAiR0JULVYiLCAiR0JUcGMtRVVDLUgiLCAiR0JUcGMtRVVDLVYiLCAiR0JwYy1FVUMtSCIsICJHQnBjLUVVQy1WIiwgIkgiLCAiSEtkbGEtQjUtSCIsICJIS2RsYS1CNS1WIiwgIkhLZGxiLUI1LUgiLCAiSEtkbGItQjUtViIsICJIS2djY3MtQjUtSCIsICJIS2djY3MtQjUtViIsICJIS20zMTQtQjUtSCIsICJIS20zMTQtQjUtViIsICJIS200NzEtQjUtSCIsICJIS200NzEtQjUtViIsICJIS3Njcy1CNS1IIiwgIkhLc2NzLUI1LVYiLCAiSGFua2FrdSIsICJIaXJhZ2FuYSIsICJLU0MtRVVDLUgiLCAiS1NDLUVVQy1WIiwgIktTQy1IIiwgIktTQy1Kb2hhYi1IIiwgIktTQy1Kb2hhYi1WIiwgIktTQy1WIiwgIktTQ21zLVVIQy1IIiwgIktTQ21zLVVIQy1IVy1IIiwgIktTQ21zLVVIQy1IVy1WIiwgIktTQ21zLVVIQy1WIiwgIktTQ3BjLUVVQy1IIiwgIktTQ3BjLUVVQy1WIiwgIkthdGFrYW5hIiwgIk5XUC1IIiwgIk5XUC1WIiwgIlJLU0otSCIsICJSS1NKLVYiLCAiUm9tYW4iLCAiVW5pQ05TLVVDUzItSCIsICJVbmlDTlMtVUNTMi1WIiwgIlVuaUNOUy1VVEYxNi1IIiwgIlVuaUNOUy1VVEYxNi1WIiwgIlVuaUNOUy1VVEYzMi1IIiwgIlVuaUNOUy1VVEYzMi1WIiwgIlVuaUNOUy1VVEY4LUgiLCAiVW5pQ05TLVVURjgtViIsICJVbmlHQi1VQ1MyLUgiLCAiVW5pR0ItVUNTMi1WIiwgIlVuaUdCLVVURjE2LUgiLCAiVW5pR0ItVVRGMTYtViIsICJVbmlHQi1VVEYzMi1IIiwgIlVuaUdCLVVURjMyLVYiLCAiVW5pR0ItVVRGOC1IIiwgIlVuaUdCLVVURjgtViIsICJVbmlKSVMtVUNTMi1IIiwgIlVuaUpJUy1VQ1MyLUhXLUgiLCAiVW5pSklTLVVDUzItSFctViIsICJVbmlKSVMtVUNTMi1WIiwgIlVuaUpJUy1VVEYxNi1IIiwgIlVuaUpJUy1VVEYxNi1WIiwgIlVuaUpJUy1VVEYzMi1IIiwgIlVuaUpJUy1VVEYzMi1WIiwgIlVuaUpJUy1VVEY4LUgiLCAiVW5pSklTLVVURjgtViIsICJVbmlKSVMyMDA0LVVURjE2LUgiLCAiVW5pSklTMjAwNC1VVEYxNi1WIiwgIlVuaUpJUzIwMDQtVVRGMzItSCIsICJVbmlKSVMyMDA0LVVURjMyLVYiLCAiVW5pSklTMjAwNC1VVEY4LUgiLCAiVW5pSklTMjAwNC1VVEY4LVYiLCAiVW5pSklTUHJvLVVDUzItSFctViIsICJVbmlKSVNQcm8tVUNTMi1WIiwgIlVuaUpJU1Byby1VVEY4LVYiLCAiVW5pSklTWDAyMTMtVVRGMzItSCIsICJVbmlKSVNYMDIxMy1VVEYzMi1WIiwgIlVuaUpJU1gwMjEzMjAwNC1VVEYzMi1IIiwgIlVuaUpJU1gwMjEzMjAwNC1VVEYzMi1WIiwgIlVuaUtTLVVDUzItSCIsICJVbmlLUy1VQ1MyLVYiLCAiVW5pS1MtVVRGMTYtSCIsICJVbmlLUy1VVEYxNi1WIiwgIlVuaUtTLVVURjMyLUgiLCAiVW5pS1MtVVRGMzItViIsICJVbmlLUy1VVEY4LUgiLCAiVW5pS1MtVVRGOC1WIiwgIlYiLCAiV1AtU3ltYm9sIl07CmNvbnN0IE1BWF9NQVBfUkFOR0UgPSAyICoqIDI0IC0gMTsKY2xhc3MgQ01hcCB7CiAgY29uc3RydWN0b3IoYnVpbHRJbkNNYXAgPSBmYWxzZSkgewogICAgdGhpcy5jb2Rlc3BhY2VSYW5nZXMgPSBbW10sIFtdLCBbXSwgW11dOwogICAgdGhpcy5udW1Db2Rlc3BhY2VSYW5nZXMgPSAwOwogICAgdGhpcy5fbWFwID0gW107CiAgICB0aGlzLm5hbWUgPSAiIjsKICAgIHRoaXMudmVydGljYWwgPSBmYWxzZTsKICAgIHRoaXMudXNlQ01hcCA9IG51bGw7CiAgICB0aGlzLmJ1aWx0SW5DTWFwID0gYnVpbHRJbkNNYXA7CiAgfQogIGFkZENvZGVzcGFjZVJhbmdlKG4sIGxvdywgaGlnaCkgewogICAgdGhpcy5jb2Rlc3BhY2VSYW5nZXNbbiAtIDFdLnB1c2gobG93LCBoaWdoKTsKICAgIHRoaXMubnVtQ29kZXNwYWNlUmFuZ2VzKys7CiAgfQogIG1hcENpZFJhbmdlKGxvdywgaGlnaCwgZHN0TG93KSB7CiAgICBpZiAoaGlnaCAtIGxvdyA+IE1BWF9NQVBfUkFOR0UpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJtYXBDaWRSYW5nZSAtIGlnbm9yaW5nIGRhdGEgYWJvdmUgTUFYX01BUF9SQU5HRS4iKTsKICAgIH0KICAgIHdoaWxlIChsb3cgPD0gaGlnaCkgewogICAgICB0aGlzLl9tYXBbbG93KytdID0gZHN0TG93Kys7CiAgICB9CiAgfQogIG1hcEJmUmFuZ2UobG93LCBoaWdoLCBkc3RMb3cpIHsKICAgIGlmIChoaWdoIC0gbG93ID4gTUFYX01BUF9SQU5HRSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIm1hcEJmUmFuZ2UgLSBpZ25vcmluZyBkYXRhIGFib3ZlIE1BWF9NQVBfUkFOR0UuIik7CiAgICB9CiAgICBjb25zdCBsYXN0Qnl0ZSA9IGRzdExvdy5sZW5ndGggLSAxOwogICAgd2hpbGUgKGxvdyA8PSBoaWdoKSB7CiAgICAgIHRoaXMuX21hcFtsb3crK10gPSBkc3RMb3c7CiAgICAgIGNvbnN0IG5leHRDaGFyQ29kZSA9IGRzdExvdy5jaGFyQ29kZUF0KGxhc3RCeXRlKSArIDE7CiAgICAgIGlmIChuZXh0Q2hhckNvZGUgPiAweGZmKSB7CiAgICAgICAgZHN0TG93ID0gZHN0TG93LnN1YnN0cmluZygwLCBsYXN0Qnl0ZSAtIDEpICsgU3RyaW5nLmZyb21DaGFyQ29kZShkc3RMb3cuY2hhckNvZGVBdChsYXN0Qnl0ZSAtIDEpICsgMSkgKyAiXHgwMCI7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgZHN0TG93ID0gZHN0TG93LnN1YnN0cmluZygwLCBsYXN0Qnl0ZSkgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKG5leHRDaGFyQ29kZSk7CiAgICB9CiAgfQogIG1hcEJmUmFuZ2VUb0FycmF5KGxvdywgaGlnaCwgYXJyYXkpIHsKICAgIGlmIChoaWdoIC0gbG93ID4gTUFYX01BUF9SQU5HRSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIm1hcEJmUmFuZ2VUb0FycmF5IC0gaWdub3JpbmcgZGF0YSBhYm92ZSBNQVhfTUFQX1JBTkdFLiIpOwogICAgfQogICAgY29uc3QgaWkgPSBhcnJheS5sZW5ndGg7CiAgICBsZXQgaSA9IDA7CiAgICB3aGlsZSAobG93IDw9IGhpZ2ggJiYgaSA8IGlpKSB7CiAgICAgIHRoaXMuX21hcFtsb3ddID0gYXJyYXlbaSsrXTsKICAgICAgKytsb3c7CiAgICB9CiAgfQogIG1hcE9uZShzcmMsIGRzdCkgewogICAgdGhpcy5fbWFwW3NyY10gPSBkc3Q7CiAgfQogIGxvb2t1cChjb2RlKSB7CiAgICByZXR1cm4gdGhpcy5fbWFwW2NvZGVdOwogIH0KICBjb250YWlucyhjb2RlKSB7CiAgICByZXR1cm4gdGhpcy5fbWFwW2NvZGVdICE9PSB1bmRlZmluZWQ7CiAgfQogIGZvckVhY2goY2FsbGJhY2spIHsKICAgIGNvbnN0IG1hcCA9IHRoaXMuX21hcDsKICAgIGNvbnN0IGxlbmd0aCA9IG1hcC5sZW5ndGg7CiAgICBpZiAobGVuZ3RoIDw9IDB4MTAwMDApIHsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIGlmIChtYXBbaV0gIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgY2FsbGJhY2soaSwgbWFwW2ldKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGZvciAoY29uc3QgaSBpbiBtYXApIHsKICAgICAgICBjYWxsYmFjayhpLCBtYXBbaV0pOwogICAgICB9CiAgICB9CiAgfQogIGNoYXJDb2RlT2YodmFsdWUpIHsKICAgIGNvbnN0IG1hcCA9IHRoaXMuX21hcDsKICAgIGlmIChtYXAubGVuZ3RoIDw9IDB4MTAwMDApIHsKICAgICAgcmV0dXJuIG1hcC5pbmRleE9mKHZhbHVlKTsKICAgIH0KICAgIGZvciAoY29uc3QgY2hhckNvZGUgaW4gbWFwKSB7CiAgICAgIGlmIChtYXBbY2hhckNvZGVdID09PSB2YWx1ZSkgewogICAgICAgIHJldHVybiBjaGFyQ29kZSB8IDA7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAtMTsKICB9CiAgZ2V0TWFwKCkgewogICAgcmV0dXJuIHRoaXMuX21hcDsKICB9CiAgcmVhZENoYXJDb2RlKHN0ciwgb2Zmc2V0LCBvdXQpIHsKICAgIGxldCBjID0gMDsKICAgIGNvbnN0IGNvZGVzcGFjZVJhbmdlcyA9IHRoaXMuY29kZXNwYWNlUmFuZ2VzOwogICAgZm9yIChsZXQgbiA9IDAsIG5uID0gY29kZXNwYWNlUmFuZ2VzLmxlbmd0aDsgbiA8IG5uOyBuKyspIHsKICAgICAgYyA9IChjIDw8IDggfCBzdHIuY2hhckNvZGVBdChvZmZzZXQgKyBuKSkgPj4+IDA7CiAgICAgIGNvbnN0IGNvZGVzcGFjZVJhbmdlID0gY29kZXNwYWNlUmFuZ2VzW25dOwogICAgICBmb3IgKGxldCBrID0gMCwga2sgPSBjb2Rlc3BhY2VSYW5nZS5sZW5ndGg7IGsgPCBrazspIHsKICAgICAgICBjb25zdCBsb3cgPSBjb2Rlc3BhY2VSYW5nZVtrKytdOwogICAgICAgIGNvbnN0IGhpZ2ggPSBjb2Rlc3BhY2VSYW5nZVtrKytdOwogICAgICAgIGlmIChjID49IGxvdyAmJiBjIDw9IGhpZ2gpIHsKICAgICAgICAgIG91dC5jaGFyY29kZSA9IGM7CiAgICAgICAgICBvdXQubGVuZ3RoID0gbiArIDE7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBvdXQuY2hhcmNvZGUgPSAwOwogICAgb3V0Lmxlbmd0aCA9IDE7CiAgfQogIGdldENoYXJDb2RlTGVuZ3RoKGNoYXJDb2RlKSB7CiAgICBjb25zdCBjb2Rlc3BhY2VSYW5nZXMgPSB0aGlzLmNvZGVzcGFjZVJhbmdlczsKICAgIGZvciAobGV0IG4gPSAwLCBubiA9IGNvZGVzcGFjZVJhbmdlcy5sZW5ndGg7IG4gPCBubjsgbisrKSB7CiAgICAgIGNvbnN0IGNvZGVzcGFjZVJhbmdlID0gY29kZXNwYWNlUmFuZ2VzW25dOwogICAgICBmb3IgKGxldCBrID0gMCwga2sgPSBjb2Rlc3BhY2VSYW5nZS5sZW5ndGg7IGsgPCBrazspIHsKICAgICAgICBjb25zdCBsb3cgPSBjb2Rlc3BhY2VSYW5nZVtrKytdOwogICAgICAgIGNvbnN0IGhpZ2ggPSBjb2Rlc3BhY2VSYW5nZVtrKytdOwogICAgICAgIGlmIChjaGFyQ29kZSA+PSBsb3cgJiYgY2hhckNvZGUgPD0gaGlnaCkgewogICAgICAgICAgcmV0dXJuIG4gKyAxOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIDE7CiAgfQogIGdldCBsZW5ndGgoKSB7CiAgICByZXR1cm4gdGhpcy5fbWFwLmxlbmd0aDsKICB9CiAgZ2V0IGlzSWRlbnRpdHlDTWFwKCkgewogICAgaWYgKCEodGhpcy5uYW1lID09PSAiSWRlbnRpdHktSCIgfHwgdGhpcy5uYW1lID09PSAiSWRlbnRpdHktViIpKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmICh0aGlzLl9tYXAubGVuZ3RoICE9PSAweDEwMDAwKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMHgxMDAwMDsgaSsrKSB7CiAgICAgIGlmICh0aGlzLl9tYXBbaV0gIT09IGkpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KfQpjbGFzcyBJZGVudGl0eUNNYXAgZXh0ZW5kcyBDTWFwIHsKICBjb25zdHJ1Y3Rvcih2ZXJ0aWNhbCwgbikgewogICAgc3VwZXIoKTsKICAgIHRoaXMudmVydGljYWwgPSB2ZXJ0aWNhbDsKICAgIHRoaXMuYWRkQ29kZXNwYWNlUmFuZ2UobiwgMCwgMHhmZmZmKTsKICB9CiAgbWFwQ2lkUmFuZ2UobG93LCBoaWdoLCBkc3RMb3cpIHsKICAgIHVucmVhY2hhYmxlKCJzaG91bGQgbm90IGNhbGwgbWFwQ2lkUmFuZ2UiKTsKICB9CiAgbWFwQmZSYW5nZShsb3csIGhpZ2gsIGRzdExvdykgewogICAgdW5yZWFjaGFibGUoInNob3VsZCBub3QgY2FsbCBtYXBCZlJhbmdlIik7CiAgfQogIG1hcEJmUmFuZ2VUb0FycmF5KGxvdywgaGlnaCwgYXJyYXkpIHsKICAgIHVucmVhY2hhYmxlKCJzaG91bGQgbm90IGNhbGwgbWFwQmZSYW5nZVRvQXJyYXkiKTsKICB9CiAgbWFwT25lKHNyYywgZHN0KSB7CiAgICB1bnJlYWNoYWJsZSgic2hvdWxkIG5vdCBjYWxsIG1hcENpZE9uZSIpOwogIH0KICBsb29rdXAoY29kZSkgewogICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIoY29kZSkgJiYgY29kZSA8PSAweGZmZmYgPyBjb2RlIDogdW5kZWZpbmVkOwogIH0KICBjb250YWlucyhjb2RlKSB7CiAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihjb2RlKSAmJiBjb2RlIDw9IDB4ZmZmZjsKICB9CiAgZm9yRWFjaChjYWxsYmFjaykgewogICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gMHhmZmZmOyBpKyspIHsKICAgICAgY2FsbGJhY2soaSwgaSk7CiAgICB9CiAgfQogIGNoYXJDb2RlT2YodmFsdWUpIHsKICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSAmJiB2YWx1ZSA8PSAweGZmZmYgPyB2YWx1ZSA6IC0xOwogIH0KICBnZXRNYXAoKSB7CiAgICBjb25zdCBtYXAgPSBuZXcgQXJyYXkoMHgxMDAwMCk7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8PSAweGZmZmY7IGkrKykgewogICAgICBtYXBbaV0gPSBpOwogICAgfQogICAgcmV0dXJuIG1hcDsKICB9CiAgZ2V0IGxlbmd0aCgpIHsKICAgIHJldHVybiAweDEwMDAwOwogIH0KICBnZXQgaXNJZGVudGl0eUNNYXAoKSB7CiAgICB1bnJlYWNoYWJsZSgic2hvdWxkIG5vdCBhY2Nlc3MgLmlzSWRlbnRpdHlDTWFwIik7CiAgfQp9CmZ1bmN0aW9uIHN0clRvSW50KHN0cikgewogIGxldCBhID0gMDsKICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykgewogICAgYSA9IGEgPDwgOCB8IHN0ci5jaGFyQ29kZUF0KGkpOwogIH0KICByZXR1cm4gYSA+Pj4gMDsKfQpmdW5jdGlvbiBleHBlY3RTdHJpbmcob2JqKSB7CiAgaWYgKHR5cGVvZiBvYmogIT09ICJzdHJpbmciKSB7CiAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIk1hbGZvcm1lZCBDTWFwOiBleHBlY3RlZCBzdHJpbmcuIik7CiAgfQp9CmZ1bmN0aW9uIGV4cGVjdEludChvYmopIHsKICBpZiAoIU51bWJlci5pc0ludGVnZXIob2JqKSkgewogICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJNYWxmb3JtZWQgQ01hcDogZXhwZWN0ZWQgaW50LiIpOwogIH0KfQpmdW5jdGlvbiBwYXJzZUJmQ2hhcihjTWFwLCBsZXhlcikgewogIHdoaWxlICh0cnVlKSB7CiAgICBsZXQgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7CiAgICBpZiAob2JqID09PSBFT0YpIHsKICAgICAgYnJlYWs7CiAgICB9CiAgICBpZiAoaXNDbWQob2JqLCAiZW5kYmZjaGFyIikpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgZXhwZWN0U3RyaW5nKG9iaik7CiAgICBjb25zdCBzcmMgPSBzdHJUb0ludChvYmopOwogICAgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7CiAgICBleHBlY3RTdHJpbmcob2JqKTsKICAgIGNvbnN0IGRzdCA9IG9iajsKICAgIGNNYXAubWFwT25lKHNyYywgZHN0KTsKICB9Cn0KZnVuY3Rpb24gcGFyc2VCZlJhbmdlKGNNYXAsIGxleGVyKSB7CiAgd2hpbGUgKHRydWUpIHsKICAgIGxldCBvYmogPSBsZXhlci5nZXRPYmooKTsKICAgIGlmIChvYmogPT09IEVPRikgewogICAgICBicmVhazsKICAgIH0KICAgIGlmIChpc0NtZChvYmosICJlbmRiZnJhbmdlIikpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgZXhwZWN0U3RyaW5nKG9iaik7CiAgICBjb25zdCBsb3cgPSBzdHJUb0ludChvYmopOwogICAgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7CiAgICBleHBlY3RTdHJpbmcob2JqKTsKICAgIGNvbnN0IGhpZ2ggPSBzdHJUb0ludChvYmopOwogICAgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7CiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihvYmopIHx8IHR5cGVvZiBvYmogPT09ICJzdHJpbmciKSB7CiAgICAgIGNvbnN0IGRzdExvdyA9IE51bWJlci5pc0ludGVnZXIob2JqKSA/IFN0cmluZy5mcm9tQ2hhckNvZGUob2JqKSA6IG9iajsKICAgICAgY01hcC5tYXBCZlJhbmdlKGxvdywgaGlnaCwgZHN0TG93KTsKICAgIH0gZWxzZSBpZiAoaXNDbWQob2JqLCAiWyIpKSB7CiAgICAgIG9iaiA9IGxleGVyLmdldE9iaigpOwogICAgICBjb25zdCBhcnJheSA9IFtdOwogICAgICB3aGlsZSAoIWlzQ21kKG9iaiwgIl0iKSAmJiBvYmogIT09IEVPRikgewogICAgICAgIGFycmF5LnB1c2gob2JqKTsKICAgICAgICBvYmogPSBsZXhlci5nZXRPYmooKTsKICAgICAgfQogICAgICBjTWFwLm1hcEJmUmFuZ2VUb0FycmF5KGxvdywgaGlnaCwgYXJyYXkpOwogICAgfSBlbHNlIHsKICAgICAgYnJlYWs7CiAgICB9CiAgfQogIHRocm93IG5ldyBGb3JtYXRFcnJvcigiSW52YWxpZCBiZiByYW5nZS4iKTsKfQpmdW5jdGlvbiBwYXJzZUNpZENoYXIoY01hcCwgbGV4ZXIpIHsKICB3aGlsZSAodHJ1ZSkgewogICAgbGV0IG9iaiA9IGxleGVyLmdldE9iaigpOwogICAgaWYgKG9iaiA9PT0gRU9GKSB7CiAgICAgIGJyZWFrOwogICAgfQogICAgaWYgKGlzQ21kKG9iaiwgImVuZGNpZGNoYXIiKSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBleHBlY3RTdHJpbmcob2JqKTsKICAgIGNvbnN0IHNyYyA9IHN0clRvSW50KG9iaik7CiAgICBvYmogPSBsZXhlci5nZXRPYmooKTsKICAgIGV4cGVjdEludChvYmopOwogICAgY29uc3QgZHN0ID0gb2JqOwogICAgY01hcC5tYXBPbmUoc3JjLCBkc3QpOwogIH0KfQpmdW5jdGlvbiBwYXJzZUNpZFJhbmdlKGNNYXAsIGxleGVyKSB7CiAgd2hpbGUgKHRydWUpIHsKICAgIGxldCBvYmogPSBsZXhlci5nZXRPYmooKTsKICAgIGlmIChvYmogPT09IEVPRikgewogICAgICBicmVhazsKICAgIH0KICAgIGlmIChpc0NtZChvYmosICJlbmRjaWRyYW5nZSIpKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGV4cGVjdFN0cmluZyhvYmopOwogICAgY29uc3QgbG93ID0gc3RyVG9JbnQob2JqKTsKICAgIG9iaiA9IGxleGVyLmdldE9iaigpOwogICAgZXhwZWN0U3RyaW5nKG9iaik7CiAgICBjb25zdCBoaWdoID0gc3RyVG9JbnQob2JqKTsKICAgIG9iaiA9IGxleGVyLmdldE9iaigpOwogICAgZXhwZWN0SW50KG9iaik7CiAgICBjb25zdCBkc3RMb3cgPSBvYmo7CiAgICBjTWFwLm1hcENpZFJhbmdlKGxvdywgaGlnaCwgZHN0TG93KTsKICB9Cn0KZnVuY3Rpb24gcGFyc2VDb2Rlc3BhY2VSYW5nZShjTWFwLCBsZXhlcikgewogIHdoaWxlICh0cnVlKSB7CiAgICBsZXQgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7CiAgICBpZiAob2JqID09PSBFT0YpIHsKICAgICAgYnJlYWs7CiAgICB9CiAgICBpZiAoaXNDbWQob2JqLCAiZW5kY29kZXNwYWNlcmFuZ2UiKSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAodHlwZW9mIG9iaiAhPT0gInN0cmluZyIpIHsKICAgICAgYnJlYWs7CiAgICB9CiAgICBjb25zdCBsb3cgPSBzdHJUb0ludChvYmopOwogICAgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7CiAgICBpZiAodHlwZW9mIG9iaiAhPT0gInN0cmluZyIpIHsKICAgICAgYnJlYWs7CiAgICB9CiAgICBjb25zdCBoaWdoID0gc3RyVG9JbnQob2JqKTsKICAgIGNNYXAuYWRkQ29kZXNwYWNlUmFuZ2Uob2JqLmxlbmd0aCwgbG93LCBoaWdoKTsKICB9CiAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIGNvZGVzcGFjZSByYW5nZS4iKTsKfQpmdW5jdGlvbiBwYXJzZVdNb2RlKGNNYXAsIGxleGVyKSB7CiAgY29uc3Qgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7CiAgaWYgKE51bWJlci5pc0ludGVnZXIob2JqKSkgewogICAgY01hcC52ZXJ0aWNhbCA9ICEhb2JqOwogIH0KfQpmdW5jdGlvbiBwYXJzZUNNYXBOYW1lKGNNYXAsIGxleGVyKSB7CiAgY29uc3Qgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7CiAgaWYgKG9iaiBpbnN0YW5jZW9mIE5hbWUpIHsKICAgIGNNYXAubmFtZSA9IG9iai5uYW1lOwogIH0KfQphc3luYyBmdW5jdGlvbiBwYXJzZUNNYXAoY01hcCwgbGV4ZXIsIGZldGNoQnVpbHRJbkNNYXAsIHVzZUNNYXApIHsKICBsZXQgcHJldmlvdXMsIGVtYmVkZGVkVXNlQ01hcDsKICBvYmpMb29wOiB3aGlsZSAodHJ1ZSkgewogICAgdHJ5IHsKICAgICAgY29uc3Qgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7CiAgICAgIGlmIChvYmogPT09IEVPRikgewogICAgICAgIGJyZWFrOwogICAgICB9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIE5hbWUpIHsKICAgICAgICBpZiAob2JqLm5hbWUgPT09ICJXTW9kZSIpIHsKICAgICAgICAgIHBhcnNlV01vZGUoY01hcCwgbGV4ZXIpOwogICAgICAgIH0gZWxzZSBpZiAob2JqLm5hbWUgPT09ICJDTWFwTmFtZSIpIHsKICAgICAgICAgIHBhcnNlQ01hcE5hbWUoY01hcCwgbGV4ZXIpOwogICAgICAgIH0KICAgICAgICBwcmV2aW91cyA9IG9iajsKICAgICAgfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBDbWQpIHsKICAgICAgICBzd2l0Y2ggKG9iai5jbWQpIHsKICAgICAgICAgIGNhc2UgImVuZGNtYXAiOgogICAgICAgICAgICBicmVhayBvYmpMb29wOwogICAgICAgICAgY2FzZSAidXNlY21hcCI6CiAgICAgICAgICAgIGlmIChwcmV2aW91cyBpbnN0YW5jZW9mIE5hbWUpIHsKICAgICAgICAgICAgICBlbWJlZGRlZFVzZUNNYXAgPSBwcmV2aW91cy5uYW1lOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiYmVnaW5jb2Rlc3BhY2VyYW5nZSI6CiAgICAgICAgICAgIHBhcnNlQ29kZXNwYWNlUmFuZ2UoY01hcCwgbGV4ZXIpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgImJlZ2luYmZjaGFyIjoKICAgICAgICAgICAgcGFyc2VCZkNoYXIoY01hcCwgbGV4ZXIpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgImJlZ2luY2lkY2hhciI6CiAgICAgICAgICAgIHBhcnNlQ2lkQ2hhcihjTWFwLCBsZXhlcik7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiYmVnaW5iZnJhbmdlIjoKICAgICAgICAgICAgcGFyc2VCZlJhbmdlKGNNYXAsIGxleGVyKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJiZWdpbmNpZHJhbmdlIjoKICAgICAgICAgICAgcGFyc2VDaWRSYW5nZShjTWFwLCBsZXhlcik7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfSBjYXRjaCAoZXgpIHsKICAgICAgaWYgKGV4IGluc3RhbmNlb2YgTWlzc2luZ0RhdGFFeGNlcHRpb24pIHsKICAgICAgICB0aHJvdyBleDsKICAgICAgfQogICAgICB3YXJuKCJJbnZhbGlkIGNNYXAgZGF0YTogIiArIGV4KTsKICAgICAgY29udGludWU7CiAgICB9CiAgfQogIGlmICghdXNlQ01hcCAmJiBlbWJlZGRlZFVzZUNNYXApIHsKICAgIHVzZUNNYXAgPSBlbWJlZGRlZFVzZUNNYXA7CiAgfQogIGlmICh1c2VDTWFwKSB7CiAgICByZXR1cm4gZXh0ZW5kQ01hcChjTWFwLCBmZXRjaEJ1aWx0SW5DTWFwLCB1c2VDTWFwKTsKICB9CiAgcmV0dXJuIGNNYXA7Cn0KYXN5bmMgZnVuY3Rpb24gZXh0ZW5kQ01hcChjTWFwLCBmZXRjaEJ1aWx0SW5DTWFwLCB1c2VDTWFwKSB7CiAgY01hcC51c2VDTWFwID0gYXdhaXQgY3JlYXRlQnVpbHRJbkNNYXAodXNlQ01hcCwgZmV0Y2hCdWlsdEluQ01hcCk7CiAgaWYgKGNNYXAubnVtQ29kZXNwYWNlUmFuZ2VzID09PSAwKSB7CiAgICBjb25zdCB1c2VDb2Rlc3BhY2VSYW5nZXMgPSBjTWFwLnVzZUNNYXAuY29kZXNwYWNlUmFuZ2VzOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCB1c2VDb2Rlc3BhY2VSYW5nZXMubGVuZ3RoOyBpKyspIHsKICAgICAgY01hcC5jb2Rlc3BhY2VSYW5nZXNbaV0gPSB1c2VDb2Rlc3BhY2VSYW5nZXNbaV0uc2xpY2UoKTsKICAgIH0KICAgIGNNYXAubnVtQ29kZXNwYWNlUmFuZ2VzID0gY01hcC51c2VDTWFwLm51bUNvZGVzcGFjZVJhbmdlczsKICB9CiAgY01hcC51c2VDTWFwLmZvckVhY2goZnVuY3Rpb24gKGtleSwgdmFsdWUpIHsKICAgIGlmICghY01hcC5jb250YWlucyhrZXkpKSB7CiAgICAgIGNNYXAubWFwT25lKGtleSwgdmFsdWUpOwogICAgfQogIH0pOwogIHJldHVybiBjTWFwOwp9CmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUJ1aWx0SW5DTWFwKG5hbWUsIGZldGNoQnVpbHRJbkNNYXApIHsKICBpZiAobmFtZSA9PT0gIklkZW50aXR5LUgiKSB7CiAgICByZXR1cm4gbmV3IElkZW50aXR5Q01hcChmYWxzZSwgMik7CiAgfSBlbHNlIGlmIChuYW1lID09PSAiSWRlbnRpdHktViIpIHsKICAgIHJldHVybiBuZXcgSWRlbnRpdHlDTWFwKHRydWUsIDIpOwogIH0KICBpZiAoIUJVSUxUX0lOX0NNQVBTLmluY2x1ZGVzKG5hbWUpKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gQ01hcCBuYW1lOiAiICsgbmFtZSk7CiAgfQogIGlmICghZmV0Y2hCdWlsdEluQ01hcCkgewogICAgdGhyb3cgbmV3IEVycm9yKCJCdWlsdC1pbiBDTWFwIHBhcmFtZXRlcnMgYXJlIG5vdCBwcm92aWRlZC4iKTsKICB9CiAgY29uc3QgewogICAgY01hcERhdGEsCiAgICBpc0NvbXByZXNzZWQKICB9ID0gYXdhaXQgZmV0Y2hCdWlsdEluQ01hcChuYW1lKTsKICBjb25zdCBjTWFwID0gbmV3IENNYXAodHJ1ZSk7CiAgaWYgKGlzQ29tcHJlc3NlZCkgewogICAgcmV0dXJuIG5ldyBCaW5hcnlDTWFwUmVhZGVyKCkucHJvY2VzcyhjTWFwRGF0YSwgY01hcCwgdXNlQ01hcCA9PiBleHRlbmRDTWFwKGNNYXAsIGZldGNoQnVpbHRJbkNNYXAsIHVzZUNNYXApKTsKICB9CiAgY29uc3QgbGV4ZXIgPSBuZXcgTGV4ZXIobmV3IFN0cmVhbShjTWFwRGF0YSkpOwogIHJldHVybiBwYXJzZUNNYXAoY01hcCwgbGV4ZXIsIGZldGNoQnVpbHRJbkNNYXAsIG51bGwpOwp9CmNsYXNzIENNYXBGYWN0b3J5IHsKICBzdGF0aWMgYXN5bmMgY3JlYXRlKHsKICAgIGVuY29kaW5nLAogICAgZmV0Y2hCdWlsdEluQ01hcCwKICAgIHVzZUNNYXAKICB9KSB7CiAgICBpZiAoZW5jb2RpbmcgaW5zdGFuY2VvZiBOYW1lKSB7CiAgICAgIHJldHVybiBjcmVhdGVCdWlsdEluQ01hcChlbmNvZGluZy5uYW1lLCBmZXRjaEJ1aWx0SW5DTWFwKTsKICAgIH0gZWxzZSBpZiAoZW5jb2RpbmcgaW5zdGFuY2VvZiBCYXNlU3RyZWFtKSB7CiAgICAgIGNvbnN0IHBhcnNlZENNYXAgPSBhd2FpdCBwYXJzZUNNYXAobmV3IENNYXAoKSwgbmV3IExleGVyKGVuY29kaW5nKSwgZmV0Y2hCdWlsdEluQ01hcCwgdXNlQ01hcCk7CiAgICAgIGlmIChwYXJzZWRDTWFwLmlzSWRlbnRpdHlDTWFwKSB7CiAgICAgICAgcmV0dXJuIGNyZWF0ZUJ1aWx0SW5DTWFwKHBhcnNlZENNYXAubmFtZSwgZmV0Y2hCdWlsdEluQ01hcCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHBhcnNlZENNYXA7CiAgICB9CiAgICB0aHJvdyBuZXcgRXJyb3IoIkVuY29kaW5nIHJlcXVpcmVkLiIpOwogIH0KfQoKOy8vIC4vc3JjL2NvcmUvY2hhcnNldHMuanMKY29uc3QgSVNPQWRvYmVDaGFyc2V0ID0gWyIubm90ZGVmIiwgInNwYWNlIiwgImV4Y2xhbSIsICJxdW90ZWRibCIsICJudW1iZXJzaWduIiwgImRvbGxhciIsICJwZXJjZW50IiwgImFtcGVyc2FuZCIsICJxdW90ZXJpZ2h0IiwgInBhcmVubGVmdCIsICJwYXJlbnJpZ2h0IiwgImFzdGVyaXNrIiwgInBsdXMiLCAiY29tbWEiLCAiaHlwaGVuIiwgInBlcmlvZCIsICJzbGFzaCIsICJ6ZXJvIiwgIm9uZSIsICJ0d28iLCAidGhyZWUiLCAiZm91ciIsICJmaXZlIiwgInNpeCIsICJzZXZlbiIsICJlaWdodCIsICJuaW5lIiwgImNvbG9uIiwgInNlbWljb2xvbiIsICJsZXNzIiwgImVxdWFsIiwgImdyZWF0ZXIiLCAicXVlc3Rpb24iLCAiYXQiLCAiQSIsICJCIiwgIkMiLCAiRCIsICJFIiwgIkYiLCAiRyIsICJIIiwgIkkiLCAiSiIsICJLIiwgIkwiLCAiTSIsICJOIiwgIk8iLCAiUCIsICJRIiwgIlIiLCAiUyIsICJUIiwgIlUiLCAiViIsICJXIiwgIlgiLCAiWSIsICJaIiwgImJyYWNrZXRsZWZ0IiwgImJhY2tzbGFzaCIsICJicmFja2V0cmlnaHQiLCAiYXNjaWljaXJjdW0iLCAidW5kZXJzY29yZSIsICJxdW90ZWxlZnQiLCAiYSIsICJiIiwgImMiLCAiZCIsICJlIiwgImYiLCAiZyIsICJoIiwgImkiLCAiaiIsICJrIiwgImwiLCAibSIsICJuIiwgIm8iLCAicCIsICJxIiwgInIiLCAicyIsICJ0IiwgInUiLCAidiIsICJ3IiwgIngiLCAieSIsICJ6IiwgImJyYWNlbGVmdCIsICJiYXIiLCAiYnJhY2VyaWdodCIsICJhc2NpaXRpbGRlIiwgImV4Y2xhbWRvd24iLCAiY2VudCIsICJzdGVybGluZyIsICJmcmFjdGlvbiIsICJ5ZW4iLCAiZmxvcmluIiwgInNlY3Rpb24iLCAiY3VycmVuY3kiLCAicXVvdGVzaW5nbGUiLCAicXVvdGVkYmxsZWZ0IiwgImd1aWxsZW1vdGxlZnQiLCAiZ3VpbHNpbmdsbGVmdCIsICJndWlsc2luZ2xyaWdodCIsICJmaSIsICJmbCIsICJlbmRhc2giLCAiZGFnZ2VyIiwgImRhZ2dlcmRibCIsICJwZXJpb2RjZW50ZXJlZCIsICJwYXJhZ3JhcGgiLCAiYnVsbGV0IiwgInF1b3Rlc2luZ2xiYXNlIiwgInF1b3RlZGJsYmFzZSIsICJxdW90ZWRibHJpZ2h0IiwgImd1aWxsZW1vdHJpZ2h0IiwgImVsbGlwc2lzIiwgInBlcnRob3VzYW5kIiwgInF1ZXN0aW9uZG93biIsICJncmF2ZSIsICJhY3V0ZSIsICJjaXJjdW1mbGV4IiwgInRpbGRlIiwgIm1hY3JvbiIsICJicmV2ZSIsICJkb3RhY2NlbnQiLCAiZGllcmVzaXMiLCAicmluZyIsICJjZWRpbGxhIiwgImh1bmdhcnVtbGF1dCIsICJvZ29uZWsiLCAiY2Fyb24iLCAiZW1kYXNoIiwgIkFFIiwgIm9yZGZlbWluaW5lIiwgIkxzbGFzaCIsICJPc2xhc2giLCAiT0UiLCAib3JkbWFzY3VsaW5lIiwgImFlIiwgImRvdGxlc3NpIiwgImxzbGFzaCIsICJvc2xhc2giLCAib2UiLCAiZ2VybWFuZGJscyIsICJvbmVzdXBlcmlvciIsICJsb2dpY2Fsbm90IiwgIm11IiwgInRyYWRlbWFyayIsICJFdGgiLCAib25laGFsZiIsICJwbHVzbWludXMiLCAiVGhvcm4iLCAib25lcXVhcnRlciIsICJkaXZpZGUiLCAiYnJva2VuYmFyIiwgImRlZ3JlZSIsICJ0aG9ybiIsICJ0aHJlZXF1YXJ0ZXJzIiwgInR3b3N1cGVyaW9yIiwgInJlZ2lzdGVyZWQiLCAibWludXMiLCAiZXRoIiwgIm11bHRpcGx5IiwgInRocmVlc3VwZXJpb3IiLCAiY29weXJpZ2h0IiwgIkFhY3V0ZSIsICJBY2lyY3VtZmxleCIsICJBZGllcmVzaXMiLCAiQWdyYXZlIiwgIkFyaW5nIiwgIkF0aWxkZSIsICJDY2VkaWxsYSIsICJFYWN1dGUiLCAiRWNpcmN1bWZsZXgiLCAiRWRpZXJlc2lzIiwgIkVncmF2ZSIsICJJYWN1dGUiLCAiSWNpcmN1bWZsZXgiLCAiSWRpZXJlc2lzIiwgIklncmF2ZSIsICJOdGlsZGUiLCAiT2FjdXRlIiwgIk9jaXJjdW1mbGV4IiwgIk9kaWVyZXNpcyIsICJPZ3JhdmUiLCAiT3RpbGRlIiwgIlNjYXJvbiIsICJVYWN1dGUiLCAiVWNpcmN1bWZsZXgiLCAiVWRpZXJlc2lzIiwgIlVncmF2ZSIsICJZYWN1dGUiLCAiWWRpZXJlc2lzIiwgIlpjYXJvbiIsICJhYWN1dGUiLCAiYWNpcmN1bWZsZXgiLCAiYWRpZXJlc2lzIiwgImFncmF2ZSIsICJhcmluZyIsICJhdGlsZGUiLCAiY2NlZGlsbGEiLCAiZWFjdXRlIiwgImVjaXJjdW1mbGV4IiwgImVkaWVyZXNpcyIsICJlZ3JhdmUiLCAiaWFjdXRlIiwgImljaXJjdW1mbGV4IiwgImlkaWVyZXNpcyIsICJpZ3JhdmUiLCAibnRpbGRlIiwgIm9hY3V0ZSIsICJvY2lyY3VtZmxleCIsICJvZGllcmVzaXMiLCAib2dyYXZlIiwgIm90aWxkZSIsICJzY2Fyb24iLCAidWFjdXRlIiwgInVjaXJjdW1mbGV4IiwgInVkaWVyZXNpcyIsICJ1Z3JhdmUiLCAieWFjdXRlIiwgInlkaWVyZXNpcyIsICJ6Y2Fyb24iXTsKY29uc3QgRXhwZXJ0Q2hhcnNldCA9IFsiLm5vdGRlZiIsICJzcGFjZSIsICJleGNsYW1zbWFsbCIsICJIdW5nYXJ1bWxhdXRzbWFsbCIsICJkb2xsYXJvbGRzdHlsZSIsICJkb2xsYXJzdXBlcmlvciIsICJhbXBlcnNhbmRzbWFsbCIsICJBY3V0ZXNtYWxsIiwgInBhcmVubGVmdHN1cGVyaW9yIiwgInBhcmVucmlnaHRzdXBlcmlvciIsICJ0d29kb3RlbmxlYWRlciIsICJvbmVkb3RlbmxlYWRlciIsICJjb21tYSIsICJoeXBoZW4iLCAicGVyaW9kIiwgImZyYWN0aW9uIiwgInplcm9vbGRzdHlsZSIsICJvbmVvbGRzdHlsZSIsICJ0d29vbGRzdHlsZSIsICJ0aHJlZW9sZHN0eWxlIiwgImZvdXJvbGRzdHlsZSIsICJmaXZlb2xkc3R5bGUiLCAic2l4b2xkc3R5bGUiLCAic2V2ZW5vbGRzdHlsZSIsICJlaWdodG9sZHN0eWxlIiwgIm5pbmVvbGRzdHlsZSIsICJjb2xvbiIsICJzZW1pY29sb24iLCAiY29tbWFzdXBlcmlvciIsICJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwgInBlcmlvZHN1cGVyaW9yIiwgInF1ZXN0aW9uc21hbGwiLCAiYXN1cGVyaW9yIiwgImJzdXBlcmlvciIsICJjZW50c3VwZXJpb3IiLCAiZHN1cGVyaW9yIiwgImVzdXBlcmlvciIsICJpc3VwZXJpb3IiLCAibHN1cGVyaW9yIiwgIm1zdXBlcmlvciIsICJuc3VwZXJpb3IiLCAib3N1cGVyaW9yIiwgInJzdXBlcmlvciIsICJzc3VwZXJpb3IiLCAidHN1cGVyaW9yIiwgImZmIiwgImZpIiwgImZsIiwgImZmaSIsICJmZmwiLCAicGFyZW5sZWZ0aW5mZXJpb3IiLCAicGFyZW5yaWdodGluZmVyaW9yIiwgIkNpcmN1bWZsZXhzbWFsbCIsICJoeXBoZW5zdXBlcmlvciIsICJHcmF2ZXNtYWxsIiwgIkFzbWFsbCIsICJCc21hbGwiLCAiQ3NtYWxsIiwgIkRzbWFsbCIsICJFc21hbGwiLCAiRnNtYWxsIiwgIkdzbWFsbCIsICJIc21hbGwiLCAiSXNtYWxsIiwgIkpzbWFsbCIsICJLc21hbGwiLCAiTHNtYWxsIiwgIk1zbWFsbCIsICJOc21hbGwiLCAiT3NtYWxsIiwgIlBzbWFsbCIsICJRc21hbGwiLCAiUnNtYWxsIiwgIlNzbWFsbCIsICJUc21hbGwiLCAiVXNtYWxsIiwgIlZzbWFsbCIsICJXc21hbGwiLCAiWHNtYWxsIiwgIllzbWFsbCIsICJac21hbGwiLCAiY29sb25tb25ldGFyeSIsICJvbmVmaXR0ZWQiLCAicnVwaWFoIiwgIlRpbGRlc21hbGwiLCAiZXhjbGFtZG93bnNtYWxsIiwgImNlbnRvbGRzdHlsZSIsICJMc2xhc2hzbWFsbCIsICJTY2Fyb25zbWFsbCIsICJaY2Fyb25zbWFsbCIsICJEaWVyZXNpc3NtYWxsIiwgIkJyZXZlc21hbGwiLCAiQ2Fyb25zbWFsbCIsICJEb3RhY2NlbnRzbWFsbCIsICJNYWNyb25zbWFsbCIsICJmaWd1cmVkYXNoIiwgImh5cGhlbmluZmVyaW9yIiwgIk9nb25la3NtYWxsIiwgIlJpbmdzbWFsbCIsICJDZWRpbGxhc21hbGwiLCAib25lcXVhcnRlciIsICJvbmVoYWxmIiwgInRocmVlcXVhcnRlcnMiLCAicXVlc3Rpb25kb3duc21hbGwiLCAib25lZWlnaHRoIiwgInRocmVlZWlnaHRocyIsICJmaXZlZWlnaHRocyIsICJzZXZlbmVpZ2h0aHMiLCAib25ldGhpcmQiLCAidHdvdGhpcmRzIiwgInplcm9zdXBlcmlvciIsICJvbmVzdXBlcmlvciIsICJ0d29zdXBlcmlvciIsICJ0aHJlZXN1cGVyaW9yIiwgImZvdXJzdXBlcmlvciIsICJmaXZlc3VwZXJpb3IiLCAic2l4c3VwZXJpb3IiLCAic2V2ZW5zdXBlcmlvciIsICJlaWdodHN1cGVyaW9yIiwgIm5pbmVzdXBlcmlvciIsICJ6ZXJvaW5mZXJpb3IiLCAib25laW5mZXJpb3IiLCAidHdvaW5mZXJpb3IiLCAidGhyZWVpbmZlcmlvciIsICJmb3VyaW5mZXJpb3IiLCAiZml2ZWluZmVyaW9yIiwgInNpeGluZmVyaW9yIiwgInNldmVuaW5mZXJpb3IiLCAiZWlnaHRpbmZlcmlvciIsICJuaW5laW5mZXJpb3IiLCAiY2VudGluZmVyaW9yIiwgImRvbGxhcmluZmVyaW9yIiwgInBlcmlvZGluZmVyaW9yIiwgImNvbW1haW5mZXJpb3IiLCAiQWdyYXZlc21hbGwiLCAiQWFjdXRlc21hbGwiLCAiQWNpcmN1bWZsZXhzbWFsbCIsICJBdGlsZGVzbWFsbCIsICJBZGllcmVzaXNzbWFsbCIsICJBcmluZ3NtYWxsIiwgIkFFc21hbGwiLCAiQ2NlZGlsbGFzbWFsbCIsICJFZ3JhdmVzbWFsbCIsICJFYWN1dGVzbWFsbCIsICJFY2lyY3VtZmxleHNtYWxsIiwgIkVkaWVyZXNpc3NtYWxsIiwgIklncmF2ZXNtYWxsIiwgIklhY3V0ZXNtYWxsIiwgIkljaXJjdW1mbGV4c21hbGwiLCAiSWRpZXJlc2lzc21hbGwiLCAiRXRoc21hbGwiLCAiTnRpbGRlc21hbGwiLCAiT2dyYXZlc21hbGwiLCAiT2FjdXRlc21hbGwiLCAiT2NpcmN1bWZsZXhzbWFsbCIsICJPdGlsZGVzbWFsbCIsICJPZGllcmVzaXNzbWFsbCIsICJPRXNtYWxsIiwgIk9zbGFzaHNtYWxsIiwgIlVncmF2ZXNtYWxsIiwgIlVhY3V0ZXNtYWxsIiwgIlVjaXJjdW1mbGV4c21hbGwiLCAiVWRpZXJlc2lzc21hbGwiLCAiWWFjdXRlc21hbGwiLCAiVGhvcm5zbWFsbCIsICJZZGllcmVzaXNzbWFsbCJdOwpjb25zdCBFeHBlcnRTdWJzZXRDaGFyc2V0ID0gWyIubm90ZGVmIiwgInNwYWNlIiwgImRvbGxhcm9sZHN0eWxlIiwgImRvbGxhcnN1cGVyaW9yIiwgInBhcmVubGVmdHN1cGVyaW9yIiwgInBhcmVucmlnaHRzdXBlcmlvciIsICJ0d29kb3RlbmxlYWRlciIsICJvbmVkb3RlbmxlYWRlciIsICJjb21tYSIsICJoeXBoZW4iLCAicGVyaW9kIiwgImZyYWN0aW9uIiwgInplcm9vbGRzdHlsZSIsICJvbmVvbGRzdHlsZSIsICJ0d29vbGRzdHlsZSIsICJ0aHJlZW9sZHN0eWxlIiwgImZvdXJvbGRzdHlsZSIsICJmaXZlb2xkc3R5bGUiLCAic2l4b2xkc3R5bGUiLCAic2V2ZW5vbGRzdHlsZSIsICJlaWdodG9sZHN0eWxlIiwgIm5pbmVvbGRzdHlsZSIsICJjb2xvbiIsICJzZW1pY29sb24iLCAiY29tbWFzdXBlcmlvciIsICJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwgInBlcmlvZHN1cGVyaW9yIiwgImFzdXBlcmlvciIsICJic3VwZXJpb3IiLCAiY2VudHN1cGVyaW9yIiwgImRzdXBlcmlvciIsICJlc3VwZXJpb3IiLCAiaXN1cGVyaW9yIiwgImxzdXBlcmlvciIsICJtc3VwZXJpb3IiLCAibnN1cGVyaW9yIiwgIm9zdXBlcmlvciIsICJyc3VwZXJpb3IiLCAic3N1cGVyaW9yIiwgInRzdXBlcmlvciIsICJmZiIsICJmaSIsICJmbCIsICJmZmkiLCAiZmZsIiwgInBhcmVubGVmdGluZmVyaW9yIiwgInBhcmVucmlnaHRpbmZlcmlvciIsICJoeXBoZW5zdXBlcmlvciIsICJjb2xvbm1vbmV0YXJ5IiwgIm9uZWZpdHRlZCIsICJydXBpYWgiLCAiY2VudG9sZHN0eWxlIiwgImZpZ3VyZWRhc2giLCAiaHlwaGVuaW5mZXJpb3IiLCAib25lcXVhcnRlciIsICJvbmVoYWxmIiwgInRocmVlcXVhcnRlcnMiLCAib25lZWlnaHRoIiwgInRocmVlZWlnaHRocyIsICJmaXZlZWlnaHRocyIsICJzZXZlbmVpZ2h0aHMiLCAib25ldGhpcmQiLCAidHdvdGhpcmRzIiwgInplcm9zdXBlcmlvciIsICJvbmVzdXBlcmlvciIsICJ0d29zdXBlcmlvciIsICJ0aHJlZXN1cGVyaW9yIiwgImZvdXJzdXBlcmlvciIsICJmaXZlc3VwZXJpb3IiLCAic2l4c3VwZXJpb3IiLCAic2V2ZW5zdXBlcmlvciIsICJlaWdodHN1cGVyaW9yIiwgIm5pbmVzdXBlcmlvciIsICJ6ZXJvaW5mZXJpb3IiLCAib25laW5mZXJpb3IiLCAidHdvaW5mZXJpb3IiLCAidGhyZWVpbmZlcmlvciIsICJmb3VyaW5mZXJpb3IiLCAiZml2ZWluZmVyaW9yIiwgInNpeGluZmVyaW9yIiwgInNldmVuaW5mZXJpb3IiLCAiZWlnaHRpbmZlcmlvciIsICJuaW5laW5mZXJpb3IiLCAiY2VudGluZmVyaW9yIiwgImRvbGxhcmluZmVyaW9yIiwgInBlcmlvZGluZmVyaW9yIiwgImNvbW1haW5mZXJpb3IiXTsKCjsvLyAuL3NyYy9jb3JlL2VuY29kaW5ncy5qcwpjb25zdCBFeHBlcnRFbmNvZGluZyA9IFsiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICJzcGFjZSIsICJleGNsYW1zbWFsbCIsICJIdW5nYXJ1bWxhdXRzbWFsbCIsICIiLCAiZG9sbGFyb2xkc3R5bGUiLCAiZG9sbGFyc3VwZXJpb3IiLCAiYW1wZXJzYW5kc21hbGwiLCAiQWN1dGVzbWFsbCIsICJwYXJlbmxlZnRzdXBlcmlvciIsICJwYXJlbnJpZ2h0c3VwZXJpb3IiLCAidHdvZG90ZW5sZWFkZXIiLCAib25lZG90ZW5sZWFkZXIiLCAiY29tbWEiLCAiaHlwaGVuIiwgInBlcmlvZCIsICJmcmFjdGlvbiIsICJ6ZXJvb2xkc3R5bGUiLCAib25lb2xkc3R5bGUiLCAidHdvb2xkc3R5bGUiLCAidGhyZWVvbGRzdHlsZSIsICJmb3Vyb2xkc3R5bGUiLCAiZml2ZW9sZHN0eWxlIiwgInNpeG9sZHN0eWxlIiwgInNldmVub2xkc3R5bGUiLCAiZWlnaHRvbGRzdHlsZSIsICJuaW5lb2xkc3R5bGUiLCAiY29sb24iLCAic2VtaWNvbG9uIiwgImNvbW1hc3VwZXJpb3IiLCAidGhyZWVxdWFydGVyc2VtZGFzaCIsICJwZXJpb2RzdXBlcmlvciIsICJxdWVzdGlvbnNtYWxsIiwgIiIsICJhc3VwZXJpb3IiLCAiYnN1cGVyaW9yIiwgImNlbnRzdXBlcmlvciIsICJkc3VwZXJpb3IiLCAiZXN1cGVyaW9yIiwgIiIsICIiLCAiIiwgImlzdXBlcmlvciIsICIiLCAiIiwgImxzdXBlcmlvciIsICJtc3VwZXJpb3IiLCAibnN1cGVyaW9yIiwgIm9zdXBlcmlvciIsICIiLCAiIiwgInJzdXBlcmlvciIsICJzc3VwZXJpb3IiLCAidHN1cGVyaW9yIiwgIiIsICJmZiIsICJmaSIsICJmbCIsICJmZmkiLCAiZmZsIiwgInBhcmVubGVmdGluZmVyaW9yIiwgIiIsICJwYXJlbnJpZ2h0aW5mZXJpb3IiLCAiQ2lyY3VtZmxleHNtYWxsIiwgImh5cGhlbnN1cGVyaW9yIiwgIkdyYXZlc21hbGwiLCAiQXNtYWxsIiwgIkJzbWFsbCIsICJDc21hbGwiLCAiRHNtYWxsIiwgIkVzbWFsbCIsICJGc21hbGwiLCAiR3NtYWxsIiwgIkhzbWFsbCIsICJJc21hbGwiLCAiSnNtYWxsIiwgIktzbWFsbCIsICJMc21hbGwiLCAiTXNtYWxsIiwgIk5zbWFsbCIsICJPc21hbGwiLCAiUHNtYWxsIiwgIlFzbWFsbCIsICJSc21hbGwiLCAiU3NtYWxsIiwgIlRzbWFsbCIsICJVc21hbGwiLCAiVnNtYWxsIiwgIldzbWFsbCIsICJYc21hbGwiLCAiWXNtYWxsIiwgIlpzbWFsbCIsICJjb2xvbm1vbmV0YXJ5IiwgIm9uZWZpdHRlZCIsICJydXBpYWgiLCAiVGlsZGVzbWFsbCIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiZXhjbGFtZG93bnNtYWxsIiwgImNlbnRvbGRzdHlsZSIsICJMc2xhc2hzbWFsbCIsICIiLCAiIiwgIlNjYXJvbnNtYWxsIiwgIlpjYXJvbnNtYWxsIiwgIkRpZXJlc2lzc21hbGwiLCAiQnJldmVzbWFsbCIsICJDYXJvbnNtYWxsIiwgIiIsICJEb3RhY2NlbnRzbWFsbCIsICIiLCAiIiwgIk1hY3JvbnNtYWxsIiwgIiIsICIiLCAiZmlndXJlZGFzaCIsICJoeXBoZW5pbmZlcmlvciIsICIiLCAiIiwgIk9nb25la3NtYWxsIiwgIlJpbmdzbWFsbCIsICJDZWRpbGxhc21hbGwiLCAiIiwgIiIsICIiLCAib25lcXVhcnRlciIsICJvbmVoYWxmIiwgInRocmVlcXVhcnRlcnMiLCAicXVlc3Rpb25kb3duc21hbGwiLCAib25lZWlnaHRoIiwgInRocmVlZWlnaHRocyIsICJmaXZlZWlnaHRocyIsICJzZXZlbmVpZ2h0aHMiLCAib25ldGhpcmQiLCAidHdvdGhpcmRzIiwgIiIsICIiLCAiemVyb3N1cGVyaW9yIiwgIm9uZXN1cGVyaW9yIiwgInR3b3N1cGVyaW9yIiwgInRocmVlc3VwZXJpb3IiLCAiZm91cnN1cGVyaW9yIiwgImZpdmVzdXBlcmlvciIsICJzaXhzdXBlcmlvciIsICJzZXZlbnN1cGVyaW9yIiwgImVpZ2h0c3VwZXJpb3IiLCAibmluZXN1cGVyaW9yIiwgInplcm9pbmZlcmlvciIsICJvbmVpbmZlcmlvciIsICJ0d29pbmZlcmlvciIsICJ0aHJlZWluZmVyaW9yIiwgImZvdXJpbmZlcmlvciIsICJmaXZlaW5mZXJpb3IiLCAic2l4aW5mZXJpb3IiLCAic2V2ZW5pbmZlcmlvciIsICJlaWdodGluZmVyaW9yIiwgIm5pbmVpbmZlcmlvciIsICJjZW50aW5mZXJpb3IiLCAiZG9sbGFyaW5mZXJpb3IiLCAicGVyaW9kaW5mZXJpb3IiLCAiY29tbWFpbmZlcmlvciIsICJBZ3JhdmVzbWFsbCIsICJBYWN1dGVzbWFsbCIsICJBY2lyY3VtZmxleHNtYWxsIiwgIkF0aWxkZXNtYWxsIiwgIkFkaWVyZXNpc3NtYWxsIiwgIkFyaW5nc21hbGwiLCAiQUVzbWFsbCIsICJDY2VkaWxsYXNtYWxsIiwgIkVncmF2ZXNtYWxsIiwgIkVhY3V0ZXNtYWxsIiwgIkVjaXJjdW1mbGV4c21hbGwiLCAiRWRpZXJlc2lzc21hbGwiLCAiSWdyYXZlc21hbGwiLCAiSWFjdXRlc21hbGwiLCAiSWNpcmN1bWZsZXhzbWFsbCIsICJJZGllcmVzaXNzbWFsbCIsICJFdGhzbWFsbCIsICJOdGlsZGVzbWFsbCIsICJPZ3JhdmVzbWFsbCIsICJPYWN1dGVzbWFsbCIsICJPY2lyY3VtZmxleHNtYWxsIiwgIk90aWxkZXNtYWxsIiwgIk9kaWVyZXNpc3NtYWxsIiwgIk9Fc21hbGwiLCAiT3NsYXNoc21hbGwiLCAiVWdyYXZlc21hbGwiLCAiVWFjdXRlc21hbGwiLCAiVWNpcmN1bWZsZXhzbWFsbCIsICJVZGllcmVzaXNzbWFsbCIsICJZYWN1dGVzbWFsbCIsICJUaG9ybnNtYWxsIiwgIllkaWVyZXNpc3NtYWxsIl07CmNvbnN0IE1hY0V4cGVydEVuY29kaW5nID0gWyIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgInNwYWNlIiwgImV4Y2xhbXNtYWxsIiwgIkh1bmdhcnVtbGF1dHNtYWxsIiwgImNlbnRvbGRzdHlsZSIsICJkb2xsYXJvbGRzdHlsZSIsICJkb2xsYXJzdXBlcmlvciIsICJhbXBlcnNhbmRzbWFsbCIsICJBY3V0ZXNtYWxsIiwgInBhcmVubGVmdHN1cGVyaW9yIiwgInBhcmVucmlnaHRzdXBlcmlvciIsICJ0d29kb3RlbmxlYWRlciIsICJvbmVkb3RlbmxlYWRlciIsICJjb21tYSIsICJoeXBoZW4iLCAicGVyaW9kIiwgImZyYWN0aW9uIiwgInplcm9vbGRzdHlsZSIsICJvbmVvbGRzdHlsZSIsICJ0d29vbGRzdHlsZSIsICJ0aHJlZW9sZHN0eWxlIiwgImZvdXJvbGRzdHlsZSIsICJmaXZlb2xkc3R5bGUiLCAic2l4b2xkc3R5bGUiLCAic2V2ZW5vbGRzdHlsZSIsICJlaWdodG9sZHN0eWxlIiwgIm5pbmVvbGRzdHlsZSIsICJjb2xvbiIsICJzZW1pY29sb24iLCAiIiwgInRocmVlcXVhcnRlcnNlbWRhc2giLCAiIiwgInF1ZXN0aW9uc21hbGwiLCAiIiwgIiIsICIiLCAiIiwgIkV0aHNtYWxsIiwgIiIsICIiLCAib25lcXVhcnRlciIsICJvbmVoYWxmIiwgInRocmVlcXVhcnRlcnMiLCAib25lZWlnaHRoIiwgInRocmVlZWlnaHRocyIsICJmaXZlZWlnaHRocyIsICJzZXZlbmVpZ2h0aHMiLCAib25ldGhpcmQiLCAidHdvdGhpcmRzIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgImZmIiwgImZpIiwgImZsIiwgImZmaSIsICJmZmwiLCAicGFyZW5sZWZ0aW5mZXJpb3IiLCAiIiwgInBhcmVucmlnaHRpbmZlcmlvciIsICJDaXJjdW1mbGV4c21hbGwiLCAiaHlwaGVuaW5mZXJpb3IiLCAiR3JhdmVzbWFsbCIsICJBc21hbGwiLCAiQnNtYWxsIiwgIkNzbWFsbCIsICJEc21hbGwiLCAiRXNtYWxsIiwgIkZzbWFsbCIsICJHc21hbGwiLCAiSHNtYWxsIiwgIklzbWFsbCIsICJKc21hbGwiLCAiS3NtYWxsIiwgIkxzbWFsbCIsICJNc21hbGwiLCAiTnNtYWxsIiwgIk9zbWFsbCIsICJQc21hbGwiLCAiUXNtYWxsIiwgIlJzbWFsbCIsICJTc21hbGwiLCAiVHNtYWxsIiwgIlVzbWFsbCIsICJWc21hbGwiLCAiV3NtYWxsIiwgIlhzbWFsbCIsICJZc21hbGwiLCAiWnNtYWxsIiwgImNvbG9ubW9uZXRhcnkiLCAib25lZml0dGVkIiwgInJ1cGlhaCIsICJUaWxkZXNtYWxsIiwgIiIsICIiLCAiYXN1cGVyaW9yIiwgImNlbnRzdXBlcmlvciIsICIiLCAiIiwgIiIsICIiLCAiQWFjdXRlc21hbGwiLCAiQWdyYXZlc21hbGwiLCAiQWNpcmN1bWZsZXhzbWFsbCIsICJBZGllcmVzaXNzbWFsbCIsICJBdGlsZGVzbWFsbCIsICJBcmluZ3NtYWxsIiwgIkNjZWRpbGxhc21hbGwiLCAiRWFjdXRlc21hbGwiLCAiRWdyYXZlc21hbGwiLCAiRWNpcmN1bWZsZXhzbWFsbCIsICJFZGllcmVzaXNzbWFsbCIsICJJYWN1dGVzbWFsbCIsICJJZ3JhdmVzbWFsbCIsICJJY2lyY3VtZmxleHNtYWxsIiwgIklkaWVyZXNpc3NtYWxsIiwgIk50aWxkZXNtYWxsIiwgIk9hY3V0ZXNtYWxsIiwgIk9ncmF2ZXNtYWxsIiwgIk9jaXJjdW1mbGV4c21hbGwiLCAiT2RpZXJlc2lzc21hbGwiLCAiT3RpbGRlc21hbGwiLCAiVWFjdXRlc21hbGwiLCAiVWdyYXZlc21hbGwiLCAiVWNpcmN1bWZsZXhzbWFsbCIsICJVZGllcmVzaXNzbWFsbCIsICIiLCAiZWlnaHRzdXBlcmlvciIsICJmb3VyaW5mZXJpb3IiLCAidGhyZWVpbmZlcmlvciIsICJzaXhpbmZlcmlvciIsICJlaWdodGluZmVyaW9yIiwgInNldmVuaW5mZXJpb3IiLCAiU2Nhcm9uc21hbGwiLCAiIiwgImNlbnRpbmZlcmlvciIsICJ0d29pbmZlcmlvciIsICIiLCAiRGllcmVzaXNzbWFsbCIsICIiLCAiQ2Fyb25zbWFsbCIsICJvc3VwZXJpb3IiLCAiZml2ZWluZmVyaW9yIiwgIiIsICJjb21tYWluZmVyaW9yIiwgInBlcmlvZGluZmVyaW9yIiwgIllhY3V0ZXNtYWxsIiwgIiIsICJkb2xsYXJpbmZlcmlvciIsICIiLCAiIiwgIlRob3Juc21hbGwiLCAiIiwgIm5pbmVpbmZlcmlvciIsICJ6ZXJvaW5mZXJpb3IiLCAiWmNhcm9uc21hbGwiLCAiQUVzbWFsbCIsICJPc2xhc2hzbWFsbCIsICJxdWVzdGlvbmRvd25zbWFsbCIsICJvbmVpbmZlcmlvciIsICJMc2xhc2hzbWFsbCIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICJDZWRpbGxhc21hbGwiLCAiIiwgIiIsICIiLCAiIiwgIiIsICJPRXNtYWxsIiwgImZpZ3VyZWRhc2giLCAiaHlwaGVuc3VwZXJpb3IiLCAiIiwgIiIsICIiLCAiIiwgImV4Y2xhbWRvd25zbWFsbCIsICIiLCAiWWRpZXJlc2lzc21hbGwiLCAiIiwgIm9uZXN1cGVyaW9yIiwgInR3b3N1cGVyaW9yIiwgInRocmVlc3VwZXJpb3IiLCAiZm91cnN1cGVyaW9yIiwgImZpdmVzdXBlcmlvciIsICJzaXhzdXBlcmlvciIsICJzZXZlbnN1cGVyaW9yIiwgIm5pbmVzdXBlcmlvciIsICJ6ZXJvc3VwZXJpb3IiLCAiIiwgImVzdXBlcmlvciIsICJyc3VwZXJpb3IiLCAidHN1cGVyaW9yIiwgIiIsICIiLCAiaXN1cGVyaW9yIiwgInNzdXBlcmlvciIsICJkc3VwZXJpb3IiLCAiIiwgIiIsICIiLCAiIiwgIiIsICJsc3VwZXJpb3IiLCAiT2dvbmVrc21hbGwiLCAiQnJldmVzbWFsbCIsICJNYWNyb25zbWFsbCIsICJic3VwZXJpb3IiLCAibnN1cGVyaW9yIiwgIm1zdXBlcmlvciIsICJjb21tYXN1cGVyaW9yIiwgInBlcmlvZHN1cGVyaW9yIiwgIkRvdGFjY2VudHNtYWxsIiwgIlJpbmdzbWFsbCIsICIiLCAiIiwgIiIsICIiXTsKY29uc3QgTWFjUm9tYW5FbmNvZGluZyA9IFsiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICJzcGFjZSIsICJleGNsYW0iLCAicXVvdGVkYmwiLCAibnVtYmVyc2lnbiIsICJkb2xsYXIiLCAicGVyY2VudCIsICJhbXBlcnNhbmQiLCAicXVvdGVzaW5nbGUiLCAicGFyZW5sZWZ0IiwgInBhcmVucmlnaHQiLCAiYXN0ZXJpc2siLCAicGx1cyIsICJjb21tYSIsICJoeXBoZW4iLCAicGVyaW9kIiwgInNsYXNoIiwgInplcm8iLCAib25lIiwgInR3byIsICJ0aHJlZSIsICJmb3VyIiwgImZpdmUiLCAic2l4IiwgInNldmVuIiwgImVpZ2h0IiwgIm5pbmUiLCAiY29sb24iLCAic2VtaWNvbG9uIiwgImxlc3MiLCAiZXF1YWwiLCAiZ3JlYXRlciIsICJxdWVzdGlvbiIsICJhdCIsICJBIiwgIkIiLCAiQyIsICJEIiwgIkUiLCAiRiIsICJHIiwgIkgiLCAiSSIsICJKIiwgIksiLCAiTCIsICJNIiwgIk4iLCAiTyIsICJQIiwgIlEiLCAiUiIsICJTIiwgIlQiLCAiVSIsICJWIiwgIlciLCAiWCIsICJZIiwgIloiLCAiYnJhY2tldGxlZnQiLCAiYmFja3NsYXNoIiwgImJyYWNrZXRyaWdodCIsICJhc2NpaWNpcmN1bSIsICJ1bmRlcnNjb3JlIiwgImdyYXZlIiwgImEiLCAiYiIsICJjIiwgImQiLCAiZSIsICJmIiwgImciLCAiaCIsICJpIiwgImoiLCAiayIsICJsIiwgIm0iLCAibiIsICJvIiwgInAiLCAicSIsICJyIiwgInMiLCAidCIsICJ1IiwgInYiLCAidyIsICJ4IiwgInkiLCAieiIsICJicmFjZWxlZnQiLCAiYmFyIiwgImJyYWNlcmlnaHQiLCAiYXNjaWl0aWxkZSIsICIiLCAiQWRpZXJlc2lzIiwgIkFyaW5nIiwgIkNjZWRpbGxhIiwgIkVhY3V0ZSIsICJOdGlsZGUiLCAiT2RpZXJlc2lzIiwgIlVkaWVyZXNpcyIsICJhYWN1dGUiLCAiYWdyYXZlIiwgImFjaXJjdW1mbGV4IiwgImFkaWVyZXNpcyIsICJhdGlsZGUiLCAiYXJpbmciLCAiY2NlZGlsbGEiLCAiZWFjdXRlIiwgImVncmF2ZSIsICJlY2lyY3VtZmxleCIsICJlZGllcmVzaXMiLCAiaWFjdXRlIiwgImlncmF2ZSIsICJpY2lyY3VtZmxleCIsICJpZGllcmVzaXMiLCAibnRpbGRlIiwgIm9hY3V0ZSIsICJvZ3JhdmUiLCAib2NpcmN1bWZsZXgiLCAib2RpZXJlc2lzIiwgIm90aWxkZSIsICJ1YWN1dGUiLCAidWdyYXZlIiwgInVjaXJjdW1mbGV4IiwgInVkaWVyZXNpcyIsICJkYWdnZXIiLCAiZGVncmVlIiwgImNlbnQiLCAic3RlcmxpbmciLCAic2VjdGlvbiIsICJidWxsZXQiLCAicGFyYWdyYXBoIiwgImdlcm1hbmRibHMiLCAicmVnaXN0ZXJlZCIsICJjb3B5cmlnaHQiLCAidHJhZGVtYXJrIiwgImFjdXRlIiwgImRpZXJlc2lzIiwgIm5vdGVxdWFsIiwgIkFFIiwgIk9zbGFzaCIsICJpbmZpbml0eSIsICJwbHVzbWludXMiLCAibGVzc2VxdWFsIiwgImdyZWF0ZXJlcXVhbCIsICJ5ZW4iLCAibXUiLCAicGFydGlhbGRpZmYiLCAic3VtbWF0aW9uIiwgInByb2R1Y3QiLCAicGkiLCAiaW50ZWdyYWwiLCAib3JkZmVtaW5pbmUiLCAib3JkbWFzY3VsaW5lIiwgIk9tZWdhIiwgImFlIiwgIm9zbGFzaCIsICJxdWVzdGlvbmRvd24iLCAiZXhjbGFtZG93biIsICJsb2dpY2Fsbm90IiwgInJhZGljYWwiLCAiZmxvcmluIiwgImFwcHJveGVxdWFsIiwgIkRlbHRhIiwgImd1aWxsZW1vdGxlZnQiLCAiZ3VpbGxlbW90cmlnaHQiLCAiZWxsaXBzaXMiLCAic3BhY2UiLCAiQWdyYXZlIiwgIkF0aWxkZSIsICJPdGlsZGUiLCAiT0UiLCAib2UiLCAiZW5kYXNoIiwgImVtZGFzaCIsICJxdW90ZWRibGxlZnQiLCAicXVvdGVkYmxyaWdodCIsICJxdW90ZWxlZnQiLCAicXVvdGVyaWdodCIsICJkaXZpZGUiLCAibG96ZW5nZSIsICJ5ZGllcmVzaXMiLCAiWWRpZXJlc2lzIiwgImZyYWN0aW9uIiwgImN1cnJlbmN5IiwgImd1aWxzaW5nbGxlZnQiLCAiZ3VpbHNpbmdscmlnaHQiLCAiZmkiLCAiZmwiLCAiZGFnZ2VyZGJsIiwgInBlcmlvZGNlbnRlcmVkIiwgInF1b3Rlc2luZ2xiYXNlIiwgInF1b3RlZGJsYmFzZSIsICJwZXJ0aG91c2FuZCIsICJBY2lyY3VtZmxleCIsICJFY2lyY3VtZmxleCIsICJBYWN1dGUiLCAiRWRpZXJlc2lzIiwgIkVncmF2ZSIsICJJYWN1dGUiLCAiSWNpcmN1bWZsZXgiLCAiSWRpZXJlc2lzIiwgIklncmF2ZSIsICJPYWN1dGUiLCAiT2NpcmN1bWZsZXgiLCAiYXBwbGUiLCAiT2dyYXZlIiwgIlVhY3V0ZSIsICJVY2lyY3VtZmxleCIsICJVZ3JhdmUiLCAiZG90bGVzc2kiLCAiY2lyY3VtZmxleCIsICJ0aWxkZSIsICJtYWNyb24iLCAiYnJldmUiLCAiZG90YWNjZW50IiwgInJpbmciLCAiY2VkaWxsYSIsICJodW5nYXJ1bWxhdXQiLCAib2dvbmVrIiwgImNhcm9uIl07CmNvbnN0IFN0YW5kYXJkRW5jb2RpbmcgPSBbIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAic3BhY2UiLCAiZXhjbGFtIiwgInF1b3RlZGJsIiwgIm51bWJlcnNpZ24iLCAiZG9sbGFyIiwgInBlcmNlbnQiLCAiYW1wZXJzYW5kIiwgInF1b3RlcmlnaHQiLCAicGFyZW5sZWZ0IiwgInBhcmVucmlnaHQiLCAiYXN0ZXJpc2siLCAicGx1cyIsICJjb21tYSIsICJoeXBoZW4iLCAicGVyaW9kIiwgInNsYXNoIiwgInplcm8iLCAib25lIiwgInR3byIsICJ0aHJlZSIsICJmb3VyIiwgImZpdmUiLCAic2l4IiwgInNldmVuIiwgImVpZ2h0IiwgIm5pbmUiLCAiY29sb24iLCAic2VtaWNvbG9uIiwgImxlc3MiLCAiZXF1YWwiLCAiZ3JlYXRlciIsICJxdWVzdGlvbiIsICJhdCIsICJBIiwgIkIiLCAiQyIsICJEIiwgIkUiLCAiRiIsICJHIiwgIkgiLCAiSSIsICJKIiwgIksiLCAiTCIsICJNIiwgIk4iLCAiTyIsICJQIiwgIlEiLCAiUiIsICJTIiwgIlQiLCAiVSIsICJWIiwgIlciLCAiWCIsICJZIiwgIloiLCAiYnJhY2tldGxlZnQiLCAiYmFja3NsYXNoIiwgImJyYWNrZXRyaWdodCIsICJhc2NpaWNpcmN1bSIsICJ1bmRlcnNjb3JlIiwgInF1b3RlbGVmdCIsICJhIiwgImIiLCAiYyIsICJkIiwgImUiLCAiZiIsICJnIiwgImgiLCAiaSIsICJqIiwgImsiLCAibCIsICJtIiwgIm4iLCAibyIsICJwIiwgInEiLCAiciIsICJzIiwgInQiLCAidSIsICJ2IiwgInciLCAieCIsICJ5IiwgInoiLCAiYnJhY2VsZWZ0IiwgImJhciIsICJicmFjZXJpZ2h0IiwgImFzY2lpdGlsZGUiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgImV4Y2xhbWRvd24iLCAiY2VudCIsICJzdGVybGluZyIsICJmcmFjdGlvbiIsICJ5ZW4iLCAiZmxvcmluIiwgInNlY3Rpb24iLCAiY3VycmVuY3kiLCAicXVvdGVzaW5nbGUiLCAicXVvdGVkYmxsZWZ0IiwgImd1aWxsZW1vdGxlZnQiLCAiZ3VpbHNpbmdsbGVmdCIsICJndWlsc2luZ2xyaWdodCIsICJmaSIsICJmbCIsICIiLCAiZW5kYXNoIiwgImRhZ2dlciIsICJkYWdnZXJkYmwiLCAicGVyaW9kY2VudGVyZWQiLCAiIiwgInBhcmFncmFwaCIsICJidWxsZXQiLCAicXVvdGVzaW5nbGJhc2UiLCAicXVvdGVkYmxiYXNlIiwgInF1b3RlZGJscmlnaHQiLCAiZ3VpbGxlbW90cmlnaHQiLCAiZWxsaXBzaXMiLCAicGVydGhvdXNhbmQiLCAiIiwgInF1ZXN0aW9uZG93biIsICIiLCAiZ3JhdmUiLCAiYWN1dGUiLCAiY2lyY3VtZmxleCIsICJ0aWxkZSIsICJtYWNyb24iLCAiYnJldmUiLCAiZG90YWNjZW50IiwgImRpZXJlc2lzIiwgIiIsICJyaW5nIiwgImNlZGlsbGEiLCAiIiwgImh1bmdhcnVtbGF1dCIsICJvZ29uZWsiLCAiY2Fyb24iLCAiZW1kYXNoIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICJBRSIsICIiLCAib3JkZmVtaW5pbmUiLCAiIiwgIiIsICIiLCAiIiwgIkxzbGFzaCIsICJPc2xhc2giLCAiT0UiLCAib3JkbWFzY3VsaW5lIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiYWUiLCAiIiwgIiIsICIiLCAiZG90bGVzc2kiLCAiIiwgIiIsICJsc2xhc2giLCAib3NsYXNoIiwgIm9lIiwgImdlcm1hbmRibHMiLCAiIiwgIiIsICIiLCAiIl07CmNvbnN0IFdpbkFuc2lFbmNvZGluZyA9IFsiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICJzcGFjZSIsICJleGNsYW0iLCAicXVvdGVkYmwiLCAibnVtYmVyc2lnbiIsICJkb2xsYXIiLCAicGVyY2VudCIsICJhbXBlcnNhbmQiLCAicXVvdGVzaW5nbGUiLCAicGFyZW5sZWZ0IiwgInBhcmVucmlnaHQiLCAiYXN0ZXJpc2siLCAicGx1cyIsICJjb21tYSIsICJoeXBoZW4iLCAicGVyaW9kIiwgInNsYXNoIiwgInplcm8iLCAib25lIiwgInR3byIsICJ0aHJlZSIsICJmb3VyIiwgImZpdmUiLCAic2l4IiwgInNldmVuIiwgImVpZ2h0IiwgIm5pbmUiLCAiY29sb24iLCAic2VtaWNvbG9uIiwgImxlc3MiLCAiZXF1YWwiLCAiZ3JlYXRlciIsICJxdWVzdGlvbiIsICJhdCIsICJBIiwgIkIiLCAiQyIsICJEIiwgIkUiLCAiRiIsICJHIiwgIkgiLCAiSSIsICJKIiwgIksiLCAiTCIsICJNIiwgIk4iLCAiTyIsICJQIiwgIlEiLCAiUiIsICJTIiwgIlQiLCAiVSIsICJWIiwgIlciLCAiWCIsICJZIiwgIloiLCAiYnJhY2tldGxlZnQiLCAiYmFja3NsYXNoIiwgImJyYWNrZXRyaWdodCIsICJhc2NpaWNpcmN1bSIsICJ1bmRlcnNjb3JlIiwgImdyYXZlIiwgImEiLCAiYiIsICJjIiwgImQiLCAiZSIsICJmIiwgImciLCAiaCIsICJpIiwgImoiLCAiayIsICJsIiwgIm0iLCAibiIsICJvIiwgInAiLCAicSIsICJyIiwgInMiLCAidCIsICJ1IiwgInYiLCAidyIsICJ4IiwgInkiLCAieiIsICJicmFjZWxlZnQiLCAiYmFyIiwgImJyYWNlcmlnaHQiLCAiYXNjaWl0aWxkZSIsICJidWxsZXQiLCAiRXVybyIsICJidWxsZXQiLCAicXVvdGVzaW5nbGJhc2UiLCAiZmxvcmluIiwgInF1b3RlZGJsYmFzZSIsICJlbGxpcHNpcyIsICJkYWdnZXIiLCAiZGFnZ2VyZGJsIiwgImNpcmN1bWZsZXgiLCAicGVydGhvdXNhbmQiLCAiU2Nhcm9uIiwgImd1aWxzaW5nbGxlZnQiLCAiT0UiLCAiYnVsbGV0IiwgIlpjYXJvbiIsICJidWxsZXQiLCAiYnVsbGV0IiwgInF1b3RlbGVmdCIsICJxdW90ZXJpZ2h0IiwgInF1b3RlZGJsbGVmdCIsICJxdW90ZWRibHJpZ2h0IiwgImJ1bGxldCIsICJlbmRhc2giLCAiZW1kYXNoIiwgInRpbGRlIiwgInRyYWRlbWFyayIsICJzY2Fyb24iLCAiZ3VpbHNpbmdscmlnaHQiLCAib2UiLCAiYnVsbGV0IiwgInpjYXJvbiIsICJZZGllcmVzaXMiLCAic3BhY2UiLCAiZXhjbGFtZG93biIsICJjZW50IiwgInN0ZXJsaW5nIiwgImN1cnJlbmN5IiwgInllbiIsICJicm9rZW5iYXIiLCAic2VjdGlvbiIsICJkaWVyZXNpcyIsICJjb3B5cmlnaHQiLCAib3JkZmVtaW5pbmUiLCAiZ3VpbGxlbW90bGVmdCIsICJsb2dpY2Fsbm90IiwgImh5cGhlbiIsICJyZWdpc3RlcmVkIiwgIm1hY3JvbiIsICJkZWdyZWUiLCAicGx1c21pbnVzIiwgInR3b3N1cGVyaW9yIiwgInRocmVlc3VwZXJpb3IiLCAiYWN1dGUiLCAibXUiLCAicGFyYWdyYXBoIiwgInBlcmlvZGNlbnRlcmVkIiwgImNlZGlsbGEiLCAib25lc3VwZXJpb3IiLCAib3JkbWFzY3VsaW5lIiwgImd1aWxsZW1vdHJpZ2h0IiwgIm9uZXF1YXJ0ZXIiLCAib25laGFsZiIsICJ0aHJlZXF1YXJ0ZXJzIiwgInF1ZXN0aW9uZG93biIsICJBZ3JhdmUiLCAiQWFjdXRlIiwgIkFjaXJjdW1mbGV4IiwgIkF0aWxkZSIsICJBZGllcmVzaXMiLCAiQXJpbmciLCAiQUUiLCAiQ2NlZGlsbGEiLCAiRWdyYXZlIiwgIkVhY3V0ZSIsICJFY2lyY3VtZmxleCIsICJFZGllcmVzaXMiLCAiSWdyYXZlIiwgIklhY3V0ZSIsICJJY2lyY3VtZmxleCIsICJJZGllcmVzaXMiLCAiRXRoIiwgIk50aWxkZSIsICJPZ3JhdmUiLCAiT2FjdXRlIiwgIk9jaXJjdW1mbGV4IiwgIk90aWxkZSIsICJPZGllcmVzaXMiLCAibXVsdGlwbHkiLCAiT3NsYXNoIiwgIlVncmF2ZSIsICJVYWN1dGUiLCAiVWNpcmN1bWZsZXgiLCAiVWRpZXJlc2lzIiwgIllhY3V0ZSIsICJUaG9ybiIsICJnZXJtYW5kYmxzIiwgImFncmF2ZSIsICJhYWN1dGUiLCAiYWNpcmN1bWZsZXgiLCAiYXRpbGRlIiwgImFkaWVyZXNpcyIsICJhcmluZyIsICJhZSIsICJjY2VkaWxsYSIsICJlZ3JhdmUiLCAiZWFjdXRlIiwgImVjaXJjdW1mbGV4IiwgImVkaWVyZXNpcyIsICJpZ3JhdmUiLCAiaWFjdXRlIiwgImljaXJjdW1mbGV4IiwgImlkaWVyZXNpcyIsICJldGgiLCAibnRpbGRlIiwgIm9ncmF2ZSIsICJvYWN1dGUiLCAib2NpcmN1bWZsZXgiLCAib3RpbGRlIiwgIm9kaWVyZXNpcyIsICJkaXZpZGUiLCAib3NsYXNoIiwgInVncmF2ZSIsICJ1YWN1dGUiLCAidWNpcmN1bWZsZXgiLCAidWRpZXJlc2lzIiwgInlhY3V0ZSIsICJ0aG9ybiIsICJ5ZGllcmVzaXMiXTsKY29uc3QgU3ltYm9sU2V0RW5jb2RpbmcgPSBbIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAic3BhY2UiLCAiZXhjbGFtIiwgInVuaXZlcnNhbCIsICJudW1iZXJzaWduIiwgImV4aXN0ZW50aWFsIiwgInBlcmNlbnQiLCAiYW1wZXJzYW5kIiwgInN1Y2h0aGF0IiwgInBhcmVubGVmdCIsICJwYXJlbnJpZ2h0IiwgImFzdGVyaXNrbWF0aCIsICJwbHVzIiwgImNvbW1hIiwgIm1pbnVzIiwgInBlcmlvZCIsICJzbGFzaCIsICJ6ZXJvIiwgIm9uZSIsICJ0d28iLCAidGhyZWUiLCAiZm91ciIsICJmaXZlIiwgInNpeCIsICJzZXZlbiIsICJlaWdodCIsICJuaW5lIiwgImNvbG9uIiwgInNlbWljb2xvbiIsICJsZXNzIiwgImVxdWFsIiwgImdyZWF0ZXIiLCAicXVlc3Rpb24iLCAiY29uZ3J1ZW50IiwgIkFscGhhIiwgIkJldGEiLCAiQ2hpIiwgIkRlbHRhIiwgIkVwc2lsb24iLCAiUGhpIiwgIkdhbW1hIiwgIkV0YSIsICJJb3RhIiwgInRoZXRhMSIsICJLYXBwYSIsICJMYW1iZGEiLCAiTXUiLCAiTnUiLCAiT21pY3JvbiIsICJQaSIsICJUaGV0YSIsICJSaG8iLCAiU2lnbWEiLCAiVGF1IiwgIlVwc2lsb24iLCAic2lnbWExIiwgIk9tZWdhIiwgIlhpIiwgIlBzaSIsICJaZXRhIiwgImJyYWNrZXRsZWZ0IiwgInRoZXJlZm9yZSIsICJicmFja2V0cmlnaHQiLCAicGVycGVuZGljdWxhciIsICJ1bmRlcnNjb3JlIiwgInJhZGljYWxleCIsICJhbHBoYSIsICJiZXRhIiwgImNoaSIsICJkZWx0YSIsICJlcHNpbG9uIiwgInBoaSIsICJnYW1tYSIsICJldGEiLCAiaW90YSIsICJwaGkxIiwgImthcHBhIiwgImxhbWJkYSIsICJtdSIsICJudSIsICJvbWljcm9uIiwgInBpIiwgInRoZXRhIiwgInJobyIsICJzaWdtYSIsICJ0YXUiLCAidXBzaWxvbiIsICJvbWVnYTEiLCAib21lZ2EiLCAieGkiLCAicHNpIiwgInpldGEiLCAiYnJhY2VsZWZ0IiwgImJhciIsICJicmFjZXJpZ2h0IiwgInNpbWlsYXIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiRXVybyIsICJVcHNpbG9uMSIsICJtaW51dGUiLCAibGVzc2VxdWFsIiwgImZyYWN0aW9uIiwgImluZmluaXR5IiwgImZsb3JpbiIsICJjbHViIiwgImRpYW1vbmQiLCAiaGVhcnQiLCAic3BhZGUiLCAiYXJyb3dib3RoIiwgImFycm93bGVmdCIsICJhcnJvd3VwIiwgImFycm93cmlnaHQiLCAiYXJyb3dkb3duIiwgImRlZ3JlZSIsICJwbHVzbWludXMiLCAic2Vjb25kIiwgImdyZWF0ZXJlcXVhbCIsICJtdWx0aXBseSIsICJwcm9wb3J0aW9uYWwiLCAicGFydGlhbGRpZmYiLCAiYnVsbGV0IiwgImRpdmlkZSIsICJub3RlcXVhbCIsICJlcXVpdmFsZW5jZSIsICJhcHByb3hlcXVhbCIsICJlbGxpcHNpcyIsICJhcnJvd3ZlcnRleCIsICJhcnJvd2hvcml6ZXgiLCAiY2FycmlhZ2VyZXR1cm4iLCAiYWxlcGgiLCAiSWZyYWt0dXIiLCAiUmZyYWt0dXIiLCAid2VpZXJzdHJhc3MiLCAiY2lyY2xlbXVsdGlwbHkiLCAiY2lyY2xlcGx1cyIsICJlbXB0eXNldCIsICJpbnRlcnNlY3Rpb24iLCAidW5pb24iLCAicHJvcGVyc3VwZXJzZXQiLCAicmVmbGV4c3VwZXJzZXQiLCAibm90c3Vic2V0IiwgInByb3BlcnN1YnNldCIsICJyZWZsZXhzdWJzZXQiLCAiZWxlbWVudCIsICJub3RlbGVtZW50IiwgImFuZ2xlIiwgImdyYWRpZW50IiwgInJlZ2lzdGVyc2VyaWYiLCAiY29weXJpZ2h0c2VyaWYiLCAidHJhZGVtYXJrc2VyaWYiLCAicHJvZHVjdCIsICJyYWRpY2FsIiwgImRvdG1hdGgiLCAibG9naWNhbG5vdCIsICJsb2dpY2FsYW5kIiwgImxvZ2ljYWxvciIsICJhcnJvd2RibGJvdGgiLCAiYXJyb3dkYmxsZWZ0IiwgImFycm93ZGJsdXAiLCAiYXJyb3dkYmxyaWdodCIsICJhcnJvd2RibGRvd24iLCAibG96ZW5nZSIsICJhbmdsZWxlZnQiLCAicmVnaXN0ZXJzYW5zIiwgImNvcHlyaWdodHNhbnMiLCAidHJhZGVtYXJrc2FucyIsICJzdW1tYXRpb24iLCAicGFyZW5sZWZ0dHAiLCAicGFyZW5sZWZ0ZXgiLCAicGFyZW5sZWZ0YnQiLCAiYnJhY2tldGxlZnR0cCIsICJicmFja2V0bGVmdGV4IiwgImJyYWNrZXRsZWZ0YnQiLCAiYnJhY2VsZWZ0dHAiLCAiYnJhY2VsZWZ0bWlkIiwgImJyYWNlbGVmdGJ0IiwgImJyYWNlZXgiLCAiIiwgImFuZ2xlcmlnaHQiLCAiaW50ZWdyYWwiLCAiaW50ZWdyYWx0cCIsICJpbnRlZ3JhbGV4IiwgImludGVncmFsYnQiLCAicGFyZW5yaWdodHRwIiwgInBhcmVucmlnaHRleCIsICJwYXJlbnJpZ2h0YnQiLCAiYnJhY2tldHJpZ2h0dHAiLCAiYnJhY2tldHJpZ2h0ZXgiLCAiYnJhY2tldHJpZ2h0YnQiLCAiYnJhY2VyaWdodHRwIiwgImJyYWNlcmlnaHRtaWQiLCAiYnJhY2VyaWdodGJ0IiwgIiJdOwpjb25zdCBaYXBmRGluZ2JhdHNFbmNvZGluZyA9IFsiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICJzcGFjZSIsICJhMSIsICJhMiIsICJhMjAyIiwgImEzIiwgImE0IiwgImE1IiwgImExMTkiLCAiYTExOCIsICJhMTE3IiwgImExMSIsICJhMTIiLCAiYTEzIiwgImExNCIsICJhMTUiLCAiYTE2IiwgImExMDUiLCAiYTE3IiwgImExOCIsICJhMTkiLCAiYTIwIiwgImEyMSIsICJhMjIiLCAiYTIzIiwgImEyNCIsICJhMjUiLCAiYTI2IiwgImEyNyIsICJhMjgiLCAiYTYiLCAiYTciLCAiYTgiLCAiYTkiLCAiYTEwIiwgImEyOSIsICJhMzAiLCAiYTMxIiwgImEzMiIsICJhMzMiLCAiYTM0IiwgImEzNSIsICJhMzYiLCAiYTM3IiwgImEzOCIsICJhMzkiLCAiYTQwIiwgImE0MSIsICJhNDIiLCAiYTQzIiwgImE0NCIsICJhNDUiLCAiYTQ2IiwgImE0NyIsICJhNDgiLCAiYTQ5IiwgImE1MCIsICJhNTEiLCAiYTUyIiwgImE1MyIsICJhNTQiLCAiYTU1IiwgImE1NiIsICJhNTciLCAiYTU4IiwgImE1OSIsICJhNjAiLCAiYTYxIiwgImE2MiIsICJhNjMiLCAiYTY0IiwgImE2NSIsICJhNjYiLCAiYTY3IiwgImE2OCIsICJhNjkiLCAiYTcwIiwgImE3MSIsICJhNzIiLCAiYTczIiwgImE3NCIsICJhMjAzIiwgImE3NSIsICJhMjA0IiwgImE3NiIsICJhNzciLCAiYTc4IiwgImE3OSIsICJhODEiLCAiYTgyIiwgImE4MyIsICJhODQiLCAiYTk3IiwgImE5OCIsICJhOTkiLCAiYTEwMCIsICIiLCAiYTg5IiwgImE5MCIsICJhOTMiLCAiYTk0IiwgImE5MSIsICJhOTIiLCAiYTIwNSIsICJhODUiLCAiYTIwNiIsICJhODYiLCAiYTg3IiwgImE4OCIsICJhOTUiLCAiYTk2IiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICJhMTAxIiwgImExMDIiLCAiYTEwMyIsICJhMTA0IiwgImExMDYiLCAiYTEwNyIsICJhMTA4IiwgImExMTIiLCAiYTExMSIsICJhMTEwIiwgImExMDkiLCAiYTEyMCIsICJhMTIxIiwgImExMjIiLCAiYTEyMyIsICJhMTI0IiwgImExMjUiLCAiYTEyNiIsICJhMTI3IiwgImExMjgiLCAiYTEyOSIsICJhMTMwIiwgImExMzEiLCAiYTEzMiIsICJhMTMzIiwgImExMzQiLCAiYTEzNSIsICJhMTM2IiwgImExMzciLCAiYTEzOCIsICJhMTM5IiwgImExNDAiLCAiYTE0MSIsICJhMTQyIiwgImExNDMiLCAiYTE0NCIsICJhMTQ1IiwgImExNDYiLCAiYTE0NyIsICJhMTQ4IiwgImExNDkiLCAiYTE1MCIsICJhMTUxIiwgImExNTIiLCAiYTE1MyIsICJhMTU0IiwgImExNTUiLCAiYTE1NiIsICJhMTU3IiwgImExNTgiLCAiYTE1OSIsICJhMTYwIiwgImExNjEiLCAiYTE2MyIsICJhMTY0IiwgImExOTYiLCAiYTE2NSIsICJhMTkyIiwgImExNjYiLCAiYTE2NyIsICJhMTY4IiwgImExNjkiLCAiYTE3MCIsICJhMTcxIiwgImExNzIiLCAiYTE3MyIsICJhMTYyIiwgImExNzQiLCAiYTE3NSIsICJhMTc2IiwgImExNzciLCAiYTE3OCIsICJhMTc5IiwgImExOTMiLCAiYTE4MCIsICJhMTk5IiwgImExODEiLCAiYTIwMCIsICJhMTgyIiwgIiIsICJhMjAxIiwgImExODMiLCAiYTE4NCIsICJhMTk3IiwgImExODUiLCAiYTE5NCIsICJhMTk4IiwgImExODYiLCAiYTE5NSIsICJhMTg3IiwgImExODgiLCAiYTE4OSIsICJhMTkwIiwgImExOTEiLCAiIl07CmZ1bmN0aW9uIGdldEVuY29kaW5nKGVuY29kaW5nTmFtZSkgewogIHN3aXRjaCAoZW5jb2RpbmdOYW1lKSB7CiAgICBjYXNlICJXaW5BbnNpRW5jb2RpbmciOgogICAgICByZXR1cm4gV2luQW5zaUVuY29kaW5nOwogICAgY2FzZSAiU3RhbmRhcmRFbmNvZGluZyI6CiAgICAgIHJldHVybiBTdGFuZGFyZEVuY29kaW5nOwogICAgY2FzZSAiTWFjUm9tYW5FbmNvZGluZyI6CiAgICAgIHJldHVybiBNYWNSb21hbkVuY29kaW5nOwogICAgY2FzZSAiU3ltYm9sU2V0RW5jb2RpbmciOgogICAgICByZXR1cm4gU3ltYm9sU2V0RW5jb2Rpbmc7CiAgICBjYXNlICJaYXBmRGluZ2JhdHNFbmNvZGluZyI6CiAgICAgIHJldHVybiBaYXBmRGluZ2JhdHNFbmNvZGluZzsKICAgIGNhc2UgIkV4cGVydEVuY29kaW5nIjoKICAgICAgcmV0dXJuIEV4cGVydEVuY29kaW5nOwogICAgY2FzZSAiTWFjRXhwZXJ0RW5jb2RpbmciOgogICAgICByZXR1cm4gTWFjRXhwZXJ0RW5jb2Rpbmc7CiAgICBkZWZhdWx0OgogICAgICByZXR1cm4gbnVsbDsKICB9Cn0KCjsvLyAuL3NyYy9jb3JlL2NmZl9wYXJzZXIuanMKCgoKCmNvbnN0IE1BWF9TVUJSX05FU1RJTkcgPSAxMDsKY29uc3QgQ0ZGU3RhbmRhcmRTdHJpbmdzID0gWyIubm90ZGVmIiwgInNwYWNlIiwgImV4Y2xhbSIsICJxdW90ZWRibCIsICJudW1iZXJzaWduIiwgImRvbGxhciIsICJwZXJjZW50IiwgImFtcGVyc2FuZCIsICJxdW90ZXJpZ2h0IiwgInBhcmVubGVmdCIsICJwYXJlbnJpZ2h0IiwgImFzdGVyaXNrIiwgInBsdXMiLCAiY29tbWEiLCAiaHlwaGVuIiwgInBlcmlvZCIsICJzbGFzaCIsICJ6ZXJvIiwgIm9uZSIsICJ0d28iLCAidGhyZWUiLCAiZm91ciIsICJmaXZlIiwgInNpeCIsICJzZXZlbiIsICJlaWdodCIsICJuaW5lIiwgImNvbG9uIiwgInNlbWljb2xvbiIsICJsZXNzIiwgImVxdWFsIiwgImdyZWF0ZXIiLCAicXVlc3Rpb24iLCAiYXQiLCAiQSIsICJCIiwgIkMiLCAiRCIsICJFIiwgIkYiLCAiRyIsICJIIiwgIkkiLCAiSiIsICJLIiwgIkwiLCAiTSIsICJOIiwgIk8iLCAiUCIsICJRIiwgIlIiLCAiUyIsICJUIiwgIlUiLCAiViIsICJXIiwgIlgiLCAiWSIsICJaIiwgImJyYWNrZXRsZWZ0IiwgImJhY2tzbGFzaCIsICJicmFja2V0cmlnaHQiLCAiYXNjaWljaXJjdW0iLCAidW5kZXJzY29yZSIsICJxdW90ZWxlZnQiLCAiYSIsICJiIiwgImMiLCAiZCIsICJlIiwgImYiLCAiZyIsICJoIiwgImkiLCAiaiIsICJrIiwgImwiLCAibSIsICJuIiwgIm8iLCAicCIsICJxIiwgInIiLCAicyIsICJ0IiwgInUiLCAidiIsICJ3IiwgIngiLCAieSIsICJ6IiwgImJyYWNlbGVmdCIsICJiYXIiLCAiYnJhY2VyaWdodCIsICJhc2NpaXRpbGRlIiwgImV4Y2xhbWRvd24iLCAiY2VudCIsICJzdGVybGluZyIsICJmcmFjdGlvbiIsICJ5ZW4iLCAiZmxvcmluIiwgInNlY3Rpb24iLCAiY3VycmVuY3kiLCAicXVvdGVzaW5nbGUiLCAicXVvdGVkYmxsZWZ0IiwgImd1aWxsZW1vdGxlZnQiLCAiZ3VpbHNpbmdsbGVmdCIsICJndWlsc2luZ2xyaWdodCIsICJmaSIsICJmbCIsICJlbmRhc2giLCAiZGFnZ2VyIiwgImRhZ2dlcmRibCIsICJwZXJpb2RjZW50ZXJlZCIsICJwYXJhZ3JhcGgiLCAiYnVsbGV0IiwgInF1b3Rlc2luZ2xiYXNlIiwgInF1b3RlZGJsYmFzZSIsICJxdW90ZWRibHJpZ2h0IiwgImd1aWxsZW1vdHJpZ2h0IiwgImVsbGlwc2lzIiwgInBlcnRob3VzYW5kIiwgInF1ZXN0aW9uZG93biIsICJncmF2ZSIsICJhY3V0ZSIsICJjaXJjdW1mbGV4IiwgInRpbGRlIiwgIm1hY3JvbiIsICJicmV2ZSIsICJkb3RhY2NlbnQiLCAiZGllcmVzaXMiLCAicmluZyIsICJjZWRpbGxhIiwgImh1bmdhcnVtbGF1dCIsICJvZ29uZWsiLCAiY2Fyb24iLCAiZW1kYXNoIiwgIkFFIiwgIm9yZGZlbWluaW5lIiwgIkxzbGFzaCIsICJPc2xhc2giLCAiT0UiLCAib3JkbWFzY3VsaW5lIiwgImFlIiwgImRvdGxlc3NpIiwgImxzbGFzaCIsICJvc2xhc2giLCAib2UiLCAiZ2VybWFuZGJscyIsICJvbmVzdXBlcmlvciIsICJsb2dpY2Fsbm90IiwgIm11IiwgInRyYWRlbWFyayIsICJFdGgiLCAib25laGFsZiIsICJwbHVzbWludXMiLCAiVGhvcm4iLCAib25lcXVhcnRlciIsICJkaXZpZGUiLCAiYnJva2VuYmFyIiwgImRlZ3JlZSIsICJ0aG9ybiIsICJ0aHJlZXF1YXJ0ZXJzIiwgInR3b3N1cGVyaW9yIiwgInJlZ2lzdGVyZWQiLCAibWludXMiLCAiZXRoIiwgIm11bHRpcGx5IiwgInRocmVlc3VwZXJpb3IiLCAiY29weXJpZ2h0IiwgIkFhY3V0ZSIsICJBY2lyY3VtZmxleCIsICJBZGllcmVzaXMiLCAiQWdyYXZlIiwgIkFyaW5nIiwgIkF0aWxkZSIsICJDY2VkaWxsYSIsICJFYWN1dGUiLCAiRWNpcmN1bWZsZXgiLCAiRWRpZXJlc2lzIiwgIkVncmF2ZSIsICJJYWN1dGUiLCAiSWNpcmN1bWZsZXgiLCAiSWRpZXJlc2lzIiwgIklncmF2ZSIsICJOdGlsZGUiLCAiT2FjdXRlIiwgIk9jaXJjdW1mbGV4IiwgIk9kaWVyZXNpcyIsICJPZ3JhdmUiLCAiT3RpbGRlIiwgIlNjYXJvbiIsICJVYWN1dGUiLCAiVWNpcmN1bWZsZXgiLCAiVWRpZXJlc2lzIiwgIlVncmF2ZSIsICJZYWN1dGUiLCAiWWRpZXJlc2lzIiwgIlpjYXJvbiIsICJhYWN1dGUiLCAiYWNpcmN1bWZsZXgiLCAiYWRpZXJlc2lzIiwgImFncmF2ZSIsICJhcmluZyIsICJhdGlsZGUiLCAiY2NlZGlsbGEiLCAiZWFjdXRlIiwgImVjaXJjdW1mbGV4IiwgImVkaWVyZXNpcyIsICJlZ3JhdmUiLCAiaWFjdXRlIiwgImljaXJjdW1mbGV4IiwgImlkaWVyZXNpcyIsICJpZ3JhdmUiLCAibnRpbGRlIiwgIm9hY3V0ZSIsICJvY2lyY3VtZmxleCIsICJvZGllcmVzaXMiLCAib2dyYXZlIiwgIm90aWxkZSIsICJzY2Fyb24iLCAidWFjdXRlIiwgInVjaXJjdW1mbGV4IiwgInVkaWVyZXNpcyIsICJ1Z3JhdmUiLCAieWFjdXRlIiwgInlkaWVyZXNpcyIsICJ6Y2Fyb24iLCAiZXhjbGFtc21hbGwiLCAiSHVuZ2FydW1sYXV0c21hbGwiLCAiZG9sbGFyb2xkc3R5bGUiLCAiZG9sbGFyc3VwZXJpb3IiLCAiYW1wZXJzYW5kc21hbGwiLCAiQWN1dGVzbWFsbCIsICJwYXJlbmxlZnRzdXBlcmlvciIsICJwYXJlbnJpZ2h0c3VwZXJpb3IiLCAidHdvZG90ZW5sZWFkZXIiLCAib25lZG90ZW5sZWFkZXIiLCAiemVyb29sZHN0eWxlIiwgIm9uZW9sZHN0eWxlIiwgInR3b29sZHN0eWxlIiwgInRocmVlb2xkc3R5bGUiLCAiZm91cm9sZHN0eWxlIiwgImZpdmVvbGRzdHlsZSIsICJzaXhvbGRzdHlsZSIsICJzZXZlbm9sZHN0eWxlIiwgImVpZ2h0b2xkc3R5bGUiLCAibmluZW9sZHN0eWxlIiwgImNvbW1hc3VwZXJpb3IiLCAidGhyZWVxdWFydGVyc2VtZGFzaCIsICJwZXJpb2RzdXBlcmlvciIsICJxdWVzdGlvbnNtYWxsIiwgImFzdXBlcmlvciIsICJic3VwZXJpb3IiLCAiY2VudHN1cGVyaW9yIiwgImRzdXBlcmlvciIsICJlc3VwZXJpb3IiLCAiaXN1cGVyaW9yIiwgImxzdXBlcmlvciIsICJtc3VwZXJpb3IiLCAibnN1cGVyaW9yIiwgIm9zdXBlcmlvciIsICJyc3VwZXJpb3IiLCAic3N1cGVyaW9yIiwgInRzdXBlcmlvciIsICJmZiIsICJmZmkiLCAiZmZsIiwgInBhcmVubGVmdGluZmVyaW9yIiwgInBhcmVucmlnaHRpbmZlcmlvciIsICJDaXJjdW1mbGV4c21hbGwiLCAiaHlwaGVuc3VwZXJpb3IiLCAiR3JhdmVzbWFsbCIsICJBc21hbGwiLCAiQnNtYWxsIiwgIkNzbWFsbCIsICJEc21hbGwiLCAiRXNtYWxsIiwgIkZzbWFsbCIsICJHc21hbGwiLCAiSHNtYWxsIiwgIklzbWFsbCIsICJKc21hbGwiLCAiS3NtYWxsIiwgIkxzbWFsbCIsICJNc21hbGwiLCAiTnNtYWxsIiwgIk9zbWFsbCIsICJQc21hbGwiLCAiUXNtYWxsIiwgIlJzbWFsbCIsICJTc21hbGwiLCAiVHNtYWxsIiwgIlVzbWFsbCIsICJWc21hbGwiLCAiV3NtYWxsIiwgIlhzbWFsbCIsICJZc21hbGwiLCAiWnNtYWxsIiwgImNvbG9ubW9uZXRhcnkiLCAib25lZml0dGVkIiwgInJ1cGlhaCIsICJUaWxkZXNtYWxsIiwgImV4Y2xhbWRvd25zbWFsbCIsICJjZW50b2xkc3R5bGUiLCAiTHNsYXNoc21hbGwiLCAiU2Nhcm9uc21hbGwiLCAiWmNhcm9uc21hbGwiLCAiRGllcmVzaXNzbWFsbCIsICJCcmV2ZXNtYWxsIiwgIkNhcm9uc21hbGwiLCAiRG90YWNjZW50c21hbGwiLCAiTWFjcm9uc21hbGwiLCAiZmlndXJlZGFzaCIsICJoeXBoZW5pbmZlcmlvciIsICJPZ29uZWtzbWFsbCIsICJSaW5nc21hbGwiLCAiQ2VkaWxsYXNtYWxsIiwgInF1ZXN0aW9uZG93bnNtYWxsIiwgIm9uZWVpZ2h0aCIsICJ0aHJlZWVpZ2h0aHMiLCAiZml2ZWVpZ2h0aHMiLCAic2V2ZW5laWdodGhzIiwgIm9uZXRoaXJkIiwgInR3b3RoaXJkcyIsICJ6ZXJvc3VwZXJpb3IiLCAiZm91cnN1cGVyaW9yIiwgImZpdmVzdXBlcmlvciIsICJzaXhzdXBlcmlvciIsICJzZXZlbnN1cGVyaW9yIiwgImVpZ2h0c3VwZXJpb3IiLCAibmluZXN1cGVyaW9yIiwgInplcm9pbmZlcmlvciIsICJvbmVpbmZlcmlvciIsICJ0d29pbmZlcmlvciIsICJ0aHJlZWluZmVyaW9yIiwgImZvdXJpbmZlcmlvciIsICJmaXZlaW5mZXJpb3IiLCAic2l4aW5mZXJpb3IiLCAic2V2ZW5pbmZlcmlvciIsICJlaWdodGluZmVyaW9yIiwgIm5pbmVpbmZlcmlvciIsICJjZW50aW5mZXJpb3IiLCAiZG9sbGFyaW5mZXJpb3IiLCAicGVyaW9kaW5mZXJpb3IiLCAiY29tbWFpbmZlcmlvciIsICJBZ3JhdmVzbWFsbCIsICJBYWN1dGVzbWFsbCIsICJBY2lyY3VtZmxleHNtYWxsIiwgIkF0aWxkZXNtYWxsIiwgIkFkaWVyZXNpc3NtYWxsIiwgIkFyaW5nc21hbGwiLCAiQUVzbWFsbCIsICJDY2VkaWxsYXNtYWxsIiwgIkVncmF2ZXNtYWxsIiwgIkVhY3V0ZXNtYWxsIiwgIkVjaXJjdW1mbGV4c21hbGwiLCAiRWRpZXJlc2lzc21hbGwiLCAiSWdyYXZlc21hbGwiLCAiSWFjdXRlc21hbGwiLCAiSWNpcmN1bWZsZXhzbWFsbCIsICJJZGllcmVzaXNzbWFsbCIsICJFdGhzbWFsbCIsICJOdGlsZGVzbWFsbCIsICJPZ3JhdmVzbWFsbCIsICJPYWN1dGVzbWFsbCIsICJPY2lyY3VtZmxleHNtYWxsIiwgIk90aWxkZXNtYWxsIiwgIk9kaWVyZXNpc3NtYWxsIiwgIk9Fc21hbGwiLCAiT3NsYXNoc21hbGwiLCAiVWdyYXZlc21hbGwiLCAiVWFjdXRlc21hbGwiLCAiVWNpcmN1bWZsZXhzbWFsbCIsICJVZGllcmVzaXNzbWFsbCIsICJZYWN1dGVzbWFsbCIsICJUaG9ybnNtYWxsIiwgIllkaWVyZXNpc3NtYWxsIiwgIjAwMS4wMDAiLCAiMDAxLjAwMSIsICIwMDEuMDAyIiwgIjAwMS4wMDMiLCAiQmxhY2siLCAiQm9sZCIsICJCb29rIiwgIkxpZ2h0IiwgIk1lZGl1bSIsICJSZWd1bGFyIiwgIlJvbWFuIiwgIlNlbWlib2xkIl07CmNvbnN0IE5VTV9TVEFOREFSRF9DRkZfU1RSSU5HUyA9IDM5MTsKY29uc3QgQ2hhcnN0cmluZ1ZhbGlkYXRpb25EYXRhID0gW251bGwsIHsKICBpZDogImhzdGVtIiwKICBtaW46IDIsCiAgc3RhY2tDbGVhcmluZzogdHJ1ZSwKICBzdGVtOiB0cnVlCn0sIG51bGwsIHsKICBpZDogInZzdGVtIiwKICBtaW46IDIsCiAgc3RhY2tDbGVhcmluZzogdHJ1ZSwKICBzdGVtOiB0cnVlCn0sIHsKICBpZDogInZtb3ZldG8iLAogIG1pbjogMSwKICBzdGFja0NsZWFyaW5nOiB0cnVlCn0sIHsKICBpZDogInJsaW5ldG8iLAogIG1pbjogMiwKICByZXNldFN0YWNrOiB0cnVlCn0sIHsKICBpZDogImhsaW5ldG8iLAogIG1pbjogMSwKICByZXNldFN0YWNrOiB0cnVlCn0sIHsKICBpZDogInZsaW5ldG8iLAogIG1pbjogMSwKICByZXNldFN0YWNrOiB0cnVlCn0sIHsKICBpZDogInJyY3VydmV0byIsCiAgbWluOiA2LAogIHJlc2V0U3RhY2s6IHRydWUKfSwgbnVsbCwgewogIGlkOiAiY2FsbHN1YnIiLAogIG1pbjogMSwKICB1bmRlZlN0YWNrOiB0cnVlCn0sIHsKICBpZDogInJldHVybiIsCiAgbWluOiAwLAogIHVuZGVmU3RhY2s6IHRydWUKfSwgbnVsbCwgbnVsbCwgewogIGlkOiAiZW5kY2hhciIsCiAgbWluOiAwLAogIHN0YWNrQ2xlYXJpbmc6IHRydWUKfSwgbnVsbCwgbnVsbCwgbnVsbCwgewogIGlkOiAiaHN0ZW1obSIsCiAgbWluOiAyLAogIHN0YWNrQ2xlYXJpbmc6IHRydWUsCiAgc3RlbTogdHJ1ZQp9LCB7CiAgaWQ6ICJoaW50bWFzayIsCiAgbWluOiAwLAogIHN0YWNrQ2xlYXJpbmc6IHRydWUKfSwgewogIGlkOiAiY250cm1hc2siLAogIG1pbjogMCwKICBzdGFja0NsZWFyaW5nOiB0cnVlCn0sIHsKICBpZDogInJtb3ZldG8iLAogIG1pbjogMiwKICBzdGFja0NsZWFyaW5nOiB0cnVlCn0sIHsKICBpZDogImhtb3ZldG8iLAogIG1pbjogMSwKICBzdGFja0NsZWFyaW5nOiB0cnVlCn0sIHsKICBpZDogInZzdGVtaG0iLAogIG1pbjogMiwKICBzdGFja0NsZWFyaW5nOiB0cnVlLAogIHN0ZW06IHRydWUKfSwgewogIGlkOiAicmN1cnZlbGluZSIsCiAgbWluOiA4LAogIHJlc2V0U3RhY2s6IHRydWUKfSwgewogIGlkOiAicmxpbmVjdXJ2ZSIsCiAgbWluOiA4LAogIHJlc2V0U3RhY2s6IHRydWUKfSwgewogIGlkOiAidnZjdXJ2ZXRvIiwKICBtaW46IDQsCiAgcmVzZXRTdGFjazogdHJ1ZQp9LCB7CiAgaWQ6ICJoaGN1cnZldG8iLAogIG1pbjogNCwKICByZXNldFN0YWNrOiB0cnVlCn0sIG51bGwsIHsKICBpZDogImNhbGxnc3ViciIsCiAgbWluOiAxLAogIHVuZGVmU3RhY2s6IHRydWUKfSwgewogIGlkOiAidmhjdXJ2ZXRvIiwKICBtaW46IDQsCiAgcmVzZXRTdGFjazogdHJ1ZQp9LCB7CiAgaWQ6ICJodmN1cnZldG8iLAogIG1pbjogNCwKICByZXNldFN0YWNrOiB0cnVlCn1dOwpjb25zdCBDaGFyc3RyaW5nVmFsaWRhdGlvbkRhdGExMiA9IFtudWxsLCBudWxsLCBudWxsLCB7CiAgaWQ6ICJhbmQiLAogIG1pbjogMiwKICBzdGFja0RlbHRhOiAtMQp9LCB7CiAgaWQ6ICJvciIsCiAgbWluOiAyLAogIHN0YWNrRGVsdGE6IC0xCn0sIHsKICBpZDogIm5vdCIsCiAgbWluOiAxLAogIHN0YWNrRGVsdGE6IDAKfSwgbnVsbCwgbnVsbCwgbnVsbCwgewogIGlkOiAiYWJzIiwKICBtaW46IDEsCiAgc3RhY2tEZWx0YTogMAp9LCB7CiAgaWQ6ICJhZGQiLAogIG1pbjogMiwKICBzdGFja0RlbHRhOiAtMSwKICBzdGFja0ZuKHN0YWNrLCBpbmRleCkgewogICAgc3RhY2tbaW5kZXggLSAyXSA9IHN0YWNrW2luZGV4IC0gMl0gKyBzdGFja1tpbmRleCAtIDFdOwogIH0KfSwgewogIGlkOiAic3ViIiwKICBtaW46IDIsCiAgc3RhY2tEZWx0YTogLTEsCiAgc3RhY2tGbihzdGFjaywgaW5kZXgpIHsKICAgIHN0YWNrW2luZGV4IC0gMl0gPSBzdGFja1tpbmRleCAtIDJdIC0gc3RhY2tbaW5kZXggLSAxXTsKICB9Cn0sIHsKICBpZDogImRpdiIsCiAgbWluOiAyLAogIHN0YWNrRGVsdGE6IC0xLAogIHN0YWNrRm4oc3RhY2ssIGluZGV4KSB7CiAgICBzdGFja1tpbmRleCAtIDJdID0gc3RhY2tbaW5kZXggLSAyXSAvIHN0YWNrW2luZGV4IC0gMV07CiAgfQp9LCBudWxsLCB7CiAgaWQ6ICJuZWciLAogIG1pbjogMSwKICBzdGFja0RlbHRhOiAwLAogIHN0YWNrRm4oc3RhY2ssIGluZGV4KSB7CiAgICBzdGFja1tpbmRleCAtIDFdID0gLXN0YWNrW2luZGV4IC0gMV07CiAgfQp9LCB7CiAgaWQ6ICJlcSIsCiAgbWluOiAyLAogIHN0YWNrRGVsdGE6IC0xCn0sIG51bGwsIG51bGwsIHsKICBpZDogImRyb3AiLAogIG1pbjogMSwKICBzdGFja0RlbHRhOiAtMQp9LCBudWxsLCB7CiAgaWQ6ICJwdXQiLAogIG1pbjogMiwKICBzdGFja0RlbHRhOiAtMgp9LCB7CiAgaWQ6ICJnZXQiLAogIG1pbjogMSwKICBzdGFja0RlbHRhOiAwCn0sIHsKICBpZDogImlmZWxzZSIsCiAgbWluOiA0LAogIHN0YWNrRGVsdGE6IC0zCn0sIHsKICBpZDogInJhbmRvbSIsCiAgbWluOiAwLAogIHN0YWNrRGVsdGE6IDEKfSwgewogIGlkOiAibXVsIiwKICBtaW46IDIsCiAgc3RhY2tEZWx0YTogLTEsCiAgc3RhY2tGbihzdGFjaywgaW5kZXgpIHsKICAgIHN0YWNrW2luZGV4IC0gMl0gPSBzdGFja1tpbmRleCAtIDJdICogc3RhY2tbaW5kZXggLSAxXTsKICB9Cn0sIG51bGwsIHsKICBpZDogInNxcnQiLAogIG1pbjogMSwKICBzdGFja0RlbHRhOiAwCn0sIHsKICBpZDogImR1cCIsCiAgbWluOiAxLAogIHN0YWNrRGVsdGE6IDEKfSwgewogIGlkOiAiZXhjaCIsCiAgbWluOiAyLAogIHN0YWNrRGVsdGE6IDAKfSwgewogIGlkOiAiaW5kZXgiLAogIG1pbjogMiwKICBzdGFja0RlbHRhOiAwCn0sIHsKICBpZDogInJvbGwiLAogIG1pbjogMywKICBzdGFja0RlbHRhOiAtMgp9LCBudWxsLCBudWxsLCBudWxsLCB7CiAgaWQ6ICJoZmxleCIsCiAgbWluOiA3LAogIHJlc2V0U3RhY2s6IHRydWUKfSwgewogIGlkOiAiZmxleCIsCiAgbWluOiAxMywKICByZXNldFN0YWNrOiB0cnVlCn0sIHsKICBpZDogImhmbGV4MSIsCiAgbWluOiA5LAogIHJlc2V0U3RhY2s6IHRydWUKfSwgewogIGlkOiAiZmxleDEiLAogIG1pbjogMTEsCiAgcmVzZXRTdGFjazogdHJ1ZQp9XTsKY2xhc3MgQ0ZGUGFyc2VyIHsKICBjb25zdHJ1Y3RvcihmaWxlLCBwcm9wZXJ0aWVzLCBzZWFjQW5hbHlzaXNFbmFibGVkKSB7CiAgICB0aGlzLmJ5dGVzID0gZmlsZS5nZXRCeXRlcygpOwogICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllczsKICAgIHRoaXMuc2VhY0FuYWx5c2lzRW5hYmxlZCA9ICEhc2VhY0FuYWx5c2lzRW5hYmxlZDsKICB9CiAgcGFyc2UoKSB7CiAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5wcm9wZXJ0aWVzOwogICAgY29uc3QgY2ZmID0gbmV3IENGRigpOwogICAgdGhpcy5jZmYgPSBjZmY7CiAgICBjb25zdCBoZWFkZXIgPSB0aGlzLnBhcnNlSGVhZGVyKCk7CiAgICBjb25zdCBuYW1lSW5kZXggPSB0aGlzLnBhcnNlSW5kZXgoaGVhZGVyLmVuZFBvcyk7CiAgICBjb25zdCB0b3BEaWN0SW5kZXggPSB0aGlzLnBhcnNlSW5kZXgobmFtZUluZGV4LmVuZFBvcyk7CiAgICBjb25zdCBzdHJpbmdJbmRleCA9IHRoaXMucGFyc2VJbmRleCh0b3BEaWN0SW5kZXguZW5kUG9zKTsKICAgIGNvbnN0IGdsb2JhbFN1YnJJbmRleCA9IHRoaXMucGFyc2VJbmRleChzdHJpbmdJbmRleC5lbmRQb3MpOwogICAgY29uc3QgdG9wRGljdFBhcnNlZCA9IHRoaXMucGFyc2VEaWN0KHRvcERpY3RJbmRleC5vYmouZ2V0KDApKTsKICAgIGNvbnN0IHRvcERpY3QgPSB0aGlzLmNyZWF0ZURpY3QoQ0ZGVG9wRGljdCwgdG9wRGljdFBhcnNlZCwgY2ZmLnN0cmluZ3MpOwogICAgY2ZmLmhlYWRlciA9IGhlYWRlci5vYmo7CiAgICBjZmYubmFtZXMgPSB0aGlzLnBhcnNlTmFtZUluZGV4KG5hbWVJbmRleC5vYmopOwogICAgY2ZmLnN0cmluZ3MgPSB0aGlzLnBhcnNlU3RyaW5nSW5kZXgoc3RyaW5nSW5kZXgub2JqKTsKICAgIGNmZi50b3BEaWN0ID0gdG9wRGljdDsKICAgIGNmZi5nbG9iYWxTdWJySW5kZXggPSBnbG9iYWxTdWJySW5kZXgub2JqOwogICAgdGhpcy5wYXJzZVByaXZhdGVEaWN0KGNmZi50b3BEaWN0KTsKICAgIGNmZi5pc0NJREZvbnQgPSB0b3BEaWN0Lmhhc05hbWUoIlJPUyIpOwogICAgY29uc3QgY2hhclN0cmluZ09mZnNldCA9IHRvcERpY3QuZ2V0QnlOYW1lKCJDaGFyU3RyaW5ncyIpOwogICAgY29uc3QgY2hhclN0cmluZ0luZGV4ID0gdGhpcy5wYXJzZUluZGV4KGNoYXJTdHJpbmdPZmZzZXQpLm9iajsKICAgIGNvbnN0IGZvbnRNYXRyaXggPSB0b3BEaWN0LmdldEJ5TmFtZSgiRm9udE1hdHJpeCIpOwogICAgaWYgKGZvbnRNYXRyaXgpIHsKICAgICAgcHJvcGVydGllcy5mb250TWF0cml4ID0gZm9udE1hdHJpeDsKICAgIH0KICAgIGNvbnN0IGZvbnRCQm94ID0gdG9wRGljdC5nZXRCeU5hbWUoIkZvbnRCQm94Iik7CiAgICBpZiAoZm9udEJCb3gpIHsKICAgICAgcHJvcGVydGllcy5hc2NlbnQgPSBNYXRoLm1heChmb250QkJveFszXSwgZm9udEJCb3hbMV0pOwogICAgICBwcm9wZXJ0aWVzLmRlc2NlbnQgPSBNYXRoLm1pbihmb250QkJveFsxXSwgZm9udEJCb3hbM10pOwogICAgICBwcm9wZXJ0aWVzLmFzY2VudFNjYWxlZCA9IHRydWU7CiAgICB9CiAgICBsZXQgY2hhcnNldCwgZW5jb2Rpbmc7CiAgICBpZiAoY2ZmLmlzQ0lERm9udCkgewogICAgICBjb25zdCBmZEFycmF5SW5kZXggPSB0aGlzLnBhcnNlSW5kZXgodG9wRGljdC5nZXRCeU5hbWUoIkZEQXJyYXkiKSkub2JqOwogICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBmZEFycmF5SW5kZXguY291bnQ7IGkgPCBpaTsgKytpKSB7CiAgICAgICAgY29uc3QgZGljdFJhdyA9IGZkQXJyYXlJbmRleC5nZXQoaSk7CiAgICAgICAgY29uc3QgZm9udERpY3QgPSB0aGlzLmNyZWF0ZURpY3QoQ0ZGVG9wRGljdCwgdGhpcy5wYXJzZURpY3QoZGljdFJhdyksIGNmZi5zdHJpbmdzKTsKICAgICAgICB0aGlzLnBhcnNlUHJpdmF0ZURpY3QoZm9udERpY3QpOwogICAgICAgIGNmZi5mZEFycmF5LnB1c2goZm9udERpY3QpOwogICAgICB9CiAgICAgIGVuY29kaW5nID0gbnVsbDsKICAgICAgY2hhcnNldCA9IHRoaXMucGFyc2VDaGFyc2V0cyh0b3BEaWN0LmdldEJ5TmFtZSgiY2hhcnNldCIpLCBjaGFyU3RyaW5nSW5kZXguY291bnQsIGNmZi5zdHJpbmdzLCB0cnVlKTsKICAgICAgY2ZmLmZkU2VsZWN0ID0gdGhpcy5wYXJzZUZEU2VsZWN0KHRvcERpY3QuZ2V0QnlOYW1lKCJGRFNlbGVjdCIpLCBjaGFyU3RyaW5nSW5kZXguY291bnQpOwogICAgfSBlbHNlIHsKICAgICAgY2hhcnNldCA9IHRoaXMucGFyc2VDaGFyc2V0cyh0b3BEaWN0LmdldEJ5TmFtZSgiY2hhcnNldCIpLCBjaGFyU3RyaW5nSW5kZXguY291bnQsIGNmZi5zdHJpbmdzLCBmYWxzZSk7CiAgICAgIGVuY29kaW5nID0gdGhpcy5wYXJzZUVuY29kaW5nKHRvcERpY3QuZ2V0QnlOYW1lKCJFbmNvZGluZyIpLCBwcm9wZXJ0aWVzLCBjZmYuc3RyaW5ncywgY2hhcnNldC5jaGFyc2V0KTsKICAgIH0KICAgIGNmZi5jaGFyc2V0ID0gY2hhcnNldDsKICAgIGNmZi5lbmNvZGluZyA9IGVuY29kaW5nOwogICAgY29uc3QgY2hhclN0cmluZ3NBbmRTZWFjcyA9IHRoaXMucGFyc2VDaGFyU3RyaW5ncyh7CiAgICAgIGNoYXJTdHJpbmdzOiBjaGFyU3RyaW5nSW5kZXgsCiAgICAgIGxvY2FsU3VickluZGV4OiB0b3BEaWN0LnByaXZhdGVEaWN0LnN1YnJzSW5kZXgsCiAgICAgIGdsb2JhbFN1YnJJbmRleDogZ2xvYmFsU3VickluZGV4Lm9iaiwKICAgICAgZmRTZWxlY3Q6IGNmZi5mZFNlbGVjdCwKICAgICAgZmRBcnJheTogY2ZmLmZkQXJyYXksCiAgICAgIHByaXZhdGVEaWN0OiB0b3BEaWN0LnByaXZhdGVEaWN0CiAgICB9KTsKICAgIGNmZi5jaGFyU3RyaW5ncyA9IGNoYXJTdHJpbmdzQW5kU2VhY3MuY2hhclN0cmluZ3M7CiAgICBjZmYuc2VhY3MgPSBjaGFyU3RyaW5nc0FuZFNlYWNzLnNlYWNzOwogICAgY2ZmLndpZHRocyA9IGNoYXJTdHJpbmdzQW5kU2VhY3Mud2lkdGhzOwogICAgcmV0dXJuIGNmZjsKICB9CiAgcGFyc2VIZWFkZXIoKSB7CiAgICBsZXQgYnl0ZXMgPSB0aGlzLmJ5dGVzOwogICAgY29uc3QgYnl0ZXNMZW5ndGggPSBieXRlcy5sZW5ndGg7CiAgICBsZXQgb2Zmc2V0ID0gMDsKICAgIHdoaWxlIChvZmZzZXQgPCBieXRlc0xlbmd0aCAmJiBieXRlc1tvZmZzZXRdICE9PSAxKSB7CiAgICAgICsrb2Zmc2V0OwogICAgfQogICAgaWYgKG9mZnNldCA+PSBieXRlc0xlbmd0aCkgewogICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkludmFsaWQgQ0ZGIGhlYWRlciIpOwogICAgfQogICAgaWYgKG9mZnNldCAhPT0gMCkgewogICAgICBpbmZvKCJjZmYgZGF0YSBpcyBzaGlmdGVkIik7CiAgICAgIGJ5dGVzID0gYnl0ZXMuc3ViYXJyYXkob2Zmc2V0KTsKICAgICAgdGhpcy5ieXRlcyA9IGJ5dGVzOwogICAgfQogICAgY29uc3QgbWFqb3IgPSBieXRlc1swXTsKICAgIGNvbnN0IG1pbm9yID0gYnl0ZXNbMV07CiAgICBjb25zdCBoZHJTaXplID0gYnl0ZXNbMl07CiAgICBjb25zdCBvZmZTaXplID0gYnl0ZXNbM107CiAgICBjb25zdCBoZWFkZXIgPSBuZXcgQ0ZGSGVhZGVyKG1ham9yLCBtaW5vciwgaGRyU2l6ZSwgb2ZmU2l6ZSk7CiAgICByZXR1cm4gewogICAgICBvYmo6IGhlYWRlciwKICAgICAgZW5kUG9zOiBoZHJTaXplCiAgICB9OwogIH0KICBwYXJzZURpY3QoZGljdCkgewogICAgbGV0IHBvcyA9IDA7CiAgICBmdW5jdGlvbiBwYXJzZU9wZXJhbmQoKSB7CiAgICAgIGxldCB2YWx1ZSA9IGRpY3RbcG9zKytdOwogICAgICBpZiAodmFsdWUgPT09IDMwKSB7CiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXRPcGVyYW5kKCk7CiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IDI4KSB7CiAgICAgICAgdmFsdWUgPSByZWFkSW50MTYoZGljdCwgcG9zKTsKICAgICAgICBwb3MgKz0gMjsKICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IDI5KSB7CiAgICAgICAgdmFsdWUgPSBkaWN0W3BvcysrXTsKICAgICAgICB2YWx1ZSA9IHZhbHVlIDw8IDggfCBkaWN0W3BvcysrXTsKICAgICAgICB2YWx1ZSA9IHZhbHVlIDw8IDggfCBkaWN0W3BvcysrXTsKICAgICAgICB2YWx1ZSA9IHZhbHVlIDw8IDggfCBkaWN0W3BvcysrXTsKICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gMzIgJiYgdmFsdWUgPD0gMjQ2KSB7CiAgICAgICAgcmV0dXJuIHZhbHVlIC0gMTM5OwogICAgICB9IGVsc2UgaWYgKHZhbHVlID49IDI0NyAmJiB2YWx1ZSA8PSAyNTApIHsKICAgICAgICByZXR1cm4gKHZhbHVlIC0gMjQ3KSAqIDI1NiArIGRpY3RbcG9zKytdICsgMTA4OwogICAgICB9IGVsc2UgaWYgKHZhbHVlID49IDI1MSAmJiB2YWx1ZSA8PSAyNTQpIHsKICAgICAgICByZXR1cm4gLSgodmFsdWUgLSAyNTEpICogMjU2KSAtIGRpY3RbcG9zKytdIC0gMTA4OwogICAgICB9CiAgICAgIHdhcm4oJ0NGRlBhcnNlcl9wYXJzZURpY3Q6ICInICsgdmFsdWUgKyAnIiBpcyBhIHJlc2VydmVkIGNvbW1hbmQuJyk7CiAgICAgIHJldHVybiBOYU47CiAgICB9CiAgICBmdW5jdGlvbiBwYXJzZUZsb2F0T3BlcmFuZCgpIHsKICAgICAgbGV0IHN0ciA9ICIiOwogICAgICBjb25zdCBlb2YgPSAxNTsKICAgICAgY29uc3QgbG9va3VwID0gWyIwIiwgIjEiLCAiMiIsICIzIiwgIjQiLCAiNSIsICI2IiwgIjciLCAiOCIsICI5IiwgIi4iLCAiRSIsICJFLSIsIG51bGwsICItIl07CiAgICAgIGNvbnN0IGxlbmd0aCA9IGRpY3QubGVuZ3RoOwogICAgICB3aGlsZSAocG9zIDwgbGVuZ3RoKSB7CiAgICAgICAgY29uc3QgYiA9IGRpY3RbcG9zKytdOwogICAgICAgIGNvbnN0IGIxID0gYiA+PiA0OwogICAgICAgIGNvbnN0IGIyID0gYiAmIDE1OwogICAgICAgIGlmIChiMSA9PT0gZW9mKSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgc3RyICs9IGxvb2t1cFtiMV07CiAgICAgICAgaWYgKGIyID09PSBlb2YpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBzdHIgKz0gbG9va3VwW2IyXTsKICAgICAgfQogICAgICByZXR1cm4gcGFyc2VGbG9hdChzdHIpOwogICAgfQogICAgbGV0IG9wZXJhbmRzID0gW107CiAgICBjb25zdCBlbnRyaWVzID0gW107CiAgICBwb3MgPSAwOwogICAgY29uc3QgZW5kID0gZGljdC5sZW5ndGg7CiAgICB3aGlsZSAocG9zIDwgZW5kKSB7CiAgICAgIGxldCBiID0gZGljdFtwb3NdOwogICAgICBpZiAoYiA8PSAyMSkgewogICAgICAgIGlmIChiID09PSAxMikgewogICAgICAgICAgYiA9IGIgPDwgOCB8IGRpY3RbKytwb3NdOwogICAgICAgIH0KICAgICAgICBlbnRyaWVzLnB1c2goW2IsIG9wZXJhbmRzXSk7CiAgICAgICAgb3BlcmFuZHMgPSBbXTsKICAgICAgICArK3BvczsKICAgICAgfSBlbHNlIHsKICAgICAgICBvcGVyYW5kcy5wdXNoKHBhcnNlT3BlcmFuZCgpKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGVudHJpZXM7CiAgfQogIHBhcnNlSW5kZXgocG9zKSB7CiAgICBjb25zdCBjZmZJbmRleCA9IG5ldyBDRkZJbmRleCgpOwogICAgY29uc3QgYnl0ZXMgPSB0aGlzLmJ5dGVzOwogICAgY29uc3QgY291bnQgPSBieXRlc1twb3MrK10gPDwgOCB8IGJ5dGVzW3BvcysrXTsKICAgIGNvbnN0IG9mZnNldHMgPSBbXTsKICAgIGxldCBlbmQgPSBwb3M7CiAgICBsZXQgaSwgaWk7CiAgICBpZiAoY291bnQgIT09IDApIHsKICAgICAgY29uc3Qgb2Zmc2V0U2l6ZSA9IGJ5dGVzW3BvcysrXTsKICAgICAgY29uc3Qgc3RhcnRQb3MgPSBwb3MgKyAoY291bnQgKyAxKSAqIG9mZnNldFNpemUgLSAxOwogICAgICBmb3IgKGkgPSAwLCBpaSA9IGNvdW50ICsgMTsgaSA8IGlpOyArK2kpIHsKICAgICAgICBsZXQgb2Zmc2V0ID0gMDsKICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG9mZnNldFNpemU7ICsraikgewogICAgICAgICAgb2Zmc2V0IDw8PSA4OwogICAgICAgICAgb2Zmc2V0ICs9IGJ5dGVzW3BvcysrXTsKICAgICAgICB9CiAgICAgICAgb2Zmc2V0cy5wdXNoKHN0YXJ0UG9zICsgb2Zmc2V0KTsKICAgICAgfQogICAgICBlbmQgPSBvZmZzZXRzW2NvdW50XTsKICAgIH0KICAgIGZvciAoaSA9IDAsIGlpID0gb2Zmc2V0cy5sZW5ndGggLSAxOyBpIDwgaWk7ICsraSkgewogICAgICBjb25zdCBvZmZzZXRTdGFydCA9IG9mZnNldHNbaV07CiAgICAgIGNvbnN0IG9mZnNldEVuZCA9IG9mZnNldHNbaSArIDFdOwogICAgICBjZmZJbmRleC5hZGQoYnl0ZXMuc3ViYXJyYXkob2Zmc2V0U3RhcnQsIG9mZnNldEVuZCkpOwogICAgfQogICAgcmV0dXJuIHsKICAgICAgb2JqOiBjZmZJbmRleCwKICAgICAgZW5kUG9zOiBlbmQKICAgIH07CiAgfQogIHBhcnNlTmFtZUluZGV4KGluZGV4KSB7CiAgICBjb25zdCBuYW1lcyA9IFtdOwogICAgZm9yIChsZXQgaSA9IDAsIGlpID0gaW5kZXguY291bnQ7IGkgPCBpaTsgKytpKSB7CiAgICAgIGNvbnN0IG5hbWUgPSBpbmRleC5nZXQoaSk7CiAgICAgIG5hbWVzLnB1c2goYnl0ZXNUb1N0cmluZyhuYW1lKSk7CiAgICB9CiAgICByZXR1cm4gbmFtZXM7CiAgfQogIHBhcnNlU3RyaW5nSW5kZXgoaW5kZXgpIHsKICAgIGNvbnN0IHN0cmluZ3MgPSBuZXcgQ0ZGU3RyaW5ncygpOwogICAgZm9yIChsZXQgaSA9IDAsIGlpID0gaW5kZXguY291bnQ7IGkgPCBpaTsgKytpKSB7CiAgICAgIGNvbnN0IGRhdGEgPSBpbmRleC5nZXQoaSk7CiAgICAgIHN0cmluZ3MuYWRkKGJ5dGVzVG9TdHJpbmcoZGF0YSkpOwogICAgfQogICAgcmV0dXJuIHN0cmluZ3M7CiAgfQogIGNyZWF0ZURpY3QoVHlwZSwgZGljdCwgc3RyaW5ncykgewogICAgY29uc3QgY2ZmRGljdCA9IG5ldyBUeXBlKHN0cmluZ3MpOwogICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgZGljdCkgewogICAgICBjZmZEaWN0LnNldEJ5S2V5KGtleSwgdmFsdWUpOwogICAgfQogICAgcmV0dXJuIGNmZkRpY3Q7CiAgfQogIHBhcnNlQ2hhclN0cmluZyhzdGF0ZSwgZGF0YSwgbG9jYWxTdWJySW5kZXgsIGdsb2JhbFN1YnJJbmRleCkgewogICAgaWYgKCFkYXRhIHx8IHN0YXRlLmNhbGxEZXB0aCA+IE1BWF9TVUJSX05FU1RJTkcpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgbGV0IHN0YWNrU2l6ZSA9IHN0YXRlLnN0YWNrU2l6ZTsKICAgIGNvbnN0IHN0YWNrID0gc3RhdGUuc3RhY2s7CiAgICBsZXQgbGVuZ3RoID0gZGF0YS5sZW5ndGg7CiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxlbmd0aDspIHsKICAgICAgY29uc3QgdmFsdWUgPSBkYXRhW2orK107CiAgICAgIGxldCB2YWxpZGF0aW9uQ29tbWFuZCA9IG51bGw7CiAgICAgIGlmICh2YWx1ZSA9PT0gMTIpIHsKICAgICAgICBjb25zdCBxID0gZGF0YVtqKytdOwogICAgICAgIGlmIChxID09PSAwKSB7CiAgICAgICAgICBkYXRhW2ogLSAyXSA9IDEzOTsKICAgICAgICAgIGRhdGFbaiAtIDFdID0gMjI7CiAgICAgICAgICBzdGFja1NpemUgPSAwOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB2YWxpZGF0aW9uQ29tbWFuZCA9IENoYXJzdHJpbmdWYWxpZGF0aW9uRGF0YTEyW3FdOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gMjgpIHsKICAgICAgICBzdGFja1tzdGFja1NpemVdID0gcmVhZEludDE2KGRhdGEsIGopOwogICAgICAgIGogKz0gMjsKICAgICAgICBzdGFja1NpemUrKzsKICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gMTQpIHsKICAgICAgICBpZiAoc3RhY2tTaXplID49IDQpIHsKICAgICAgICAgIHN0YWNrU2l6ZSAtPSA0OwogICAgICAgICAgaWYgKHRoaXMuc2VhY0FuYWx5c2lzRW5hYmxlZCkgewogICAgICAgICAgICBzdGF0ZS5zZWFjID0gc3RhY2suc2xpY2Uoc3RhY2tTaXplLCBzdGFja1NpemUgKyA0KTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB2YWxpZGF0aW9uQ29tbWFuZCA9IENoYXJzdHJpbmdWYWxpZGF0aW9uRGF0YVt2YWx1ZV07CiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gMzIgJiYgdmFsdWUgPD0gMjQ2KSB7CiAgICAgICAgc3RhY2tbc3RhY2tTaXplXSA9IHZhbHVlIC0gMTM5OwogICAgICAgIHN0YWNrU2l6ZSsrOwogICAgICB9IGVsc2UgaWYgKHZhbHVlID49IDI0NyAmJiB2YWx1ZSA8PSAyNTQpIHsKICAgICAgICBzdGFja1tzdGFja1NpemVdID0gdmFsdWUgPCAyNTEgPyAodmFsdWUgLSAyNDcgPDwgOCkgKyBkYXRhW2pdICsgMTA4IDogLSh2YWx1ZSAtIDI1MSA8PCA4KSAtIGRhdGFbal0gLSAxMDg7CiAgICAgICAgaisrOwogICAgICAgIHN0YWNrU2l6ZSsrOwogICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAyNTUpIHsKICAgICAgICBzdGFja1tzdGFja1NpemVdID0gKGRhdGFbal0gPDwgMjQgfCBkYXRhW2ogKyAxXSA8PCAxNiB8IGRhdGFbaiArIDJdIDw8IDggfCBkYXRhW2ogKyAzXSkgLyA2NTUzNjsKICAgICAgICBqICs9IDQ7CiAgICAgICAgc3RhY2tTaXplKys7CiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IDE5IHx8IHZhbHVlID09PSAyMCkgewogICAgICAgIHN0YXRlLmhpbnRzICs9IHN0YWNrU2l6ZSA+PiAxOwogICAgICAgIGlmIChzdGF0ZS5oaW50cyA9PT0gMCkgewogICAgICAgICAgZGF0YS5jb3B5V2l0aGluKGogLSAxLCBqLCAtMSk7CiAgICAgICAgICBqIC09IDE7CiAgICAgICAgICBsZW5ndGggLT0gMTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBqICs9IHN0YXRlLmhpbnRzICsgNyA+PiAzOwogICAgICAgIHN0YWNrU2l6ZSAlPSAyOwogICAgICAgIHZhbGlkYXRpb25Db21tYW5kID0gQ2hhcnN0cmluZ1ZhbGlkYXRpb25EYXRhW3ZhbHVlXTsKICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gMTAgfHwgdmFsdWUgPT09IDI5KSB7CiAgICAgICAgY29uc3Qgc3VicnNJbmRleCA9IHZhbHVlID09PSAxMCA/IGxvY2FsU3VickluZGV4IDogZ2xvYmFsU3VickluZGV4OwogICAgICAgIGlmICghc3VicnNJbmRleCkgewogICAgICAgICAgdmFsaWRhdGlvbkNvbW1hbmQgPSBDaGFyc3RyaW5nVmFsaWRhdGlvbkRhdGFbdmFsdWVdOwogICAgICAgICAgd2FybigiTWlzc2luZyBzdWJyc0luZGV4IGZvciAiICsgdmFsaWRhdGlvbkNvbW1hbmQuaWQpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBsZXQgYmlhcyA9IDMyNzY4OwogICAgICAgIGlmIChzdWJyc0luZGV4LmNvdW50IDwgMTI0MCkgewogICAgICAgICAgYmlhcyA9IDEwNzsKICAgICAgICB9IGVsc2UgaWYgKHN1YnJzSW5kZXguY291bnQgPCAzMzkwMCkgewogICAgICAgICAgYmlhcyA9IDExMzE7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHN1YnJOdW1iZXIgPSBzdGFja1stLXN0YWNrU2l6ZV0gKyBiaWFzOwogICAgICAgIGlmIChzdWJyTnVtYmVyIDwgMCB8fCBzdWJyTnVtYmVyID49IHN1YnJzSW5kZXguY291bnQgfHwgaXNOYU4oc3Vick51bWJlcikpIHsKICAgICAgICAgIHZhbGlkYXRpb25Db21tYW5kID0gQ2hhcnN0cmluZ1ZhbGlkYXRpb25EYXRhW3ZhbHVlXTsKICAgICAgICAgIHdhcm4oIk91dCBvZiBib3VuZHMgc3VickluZGV4IGZvciAiICsgdmFsaWRhdGlvbkNvbW1hbmQuaWQpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBzdGF0ZS5zdGFja1NpemUgPSBzdGFja1NpemU7CiAgICAgICAgc3RhdGUuY2FsbERlcHRoKys7CiAgICAgICAgY29uc3QgdmFsaWQgPSB0aGlzLnBhcnNlQ2hhclN0cmluZyhzdGF0ZSwgc3VicnNJbmRleC5nZXQoc3Vick51bWJlciksIGxvY2FsU3VickluZGV4LCBnbG9iYWxTdWJySW5kZXgpOwogICAgICAgIGlmICghdmFsaWQpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgc3RhdGUuY2FsbERlcHRoLS07CiAgICAgICAgc3RhY2tTaXplID0gc3RhdGUuc3RhY2tTaXplOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAxMSkgewogICAgICAgIHN0YXRlLnN0YWNrU2l6ZSA9IHN0YWNrU2l6ZTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gMCAmJiBqID09PSBkYXRhLmxlbmd0aCkgewogICAgICAgIGRhdGFbaiAtIDFdID0gMTQ7CiAgICAgICAgdmFsaWRhdGlvbkNvbW1hbmQgPSBDaGFyc3RyaW5nVmFsaWRhdGlvbkRhdGFbMTRdOwogICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSA5KSB7CiAgICAgICAgZGF0YS5jb3B5V2l0aGluKGogLSAxLCBqLCAtMSk7CiAgICAgICAgaiAtPSAxOwogICAgICAgIGxlbmd0aCAtPSAxOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9IGVsc2UgewogICAgICAgIHZhbGlkYXRpb25Db21tYW5kID0gQ2hhcnN0cmluZ1ZhbGlkYXRpb25EYXRhW3ZhbHVlXTsKICAgICAgfQogICAgICBpZiAodmFsaWRhdGlvbkNvbW1hbmQpIHsKICAgICAgICBpZiAodmFsaWRhdGlvbkNvbW1hbmQuc3RlbSkgewogICAgICAgICAgc3RhdGUuaGludHMgKz0gc3RhY2tTaXplID4+IDE7CiAgICAgICAgICBpZiAodmFsdWUgPT09IDMgfHwgdmFsdWUgPT09IDIzKSB7CiAgICAgICAgICAgIHN0YXRlLmhhc1ZTdGVtcyA9IHRydWU7CiAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLmhhc1ZTdGVtcyAmJiAodmFsdWUgPT09IDEgfHwgdmFsdWUgPT09IDE4KSkgewogICAgICAgICAgICB3YXJuKCJDRkYgc3RlbSBoaW50cyBhcmUgaW4gd3Jvbmcgb3JkZXIiKTsKICAgICAgICAgICAgZGF0YVtqIC0gMV0gPSB2YWx1ZSA9PT0gMSA/IDMgOiAyMzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCJtaW4iIGluIHZhbGlkYXRpb25Db21tYW5kKSB7CiAgICAgICAgICBpZiAoIXN0YXRlLnVuZGVmU3RhY2sgJiYgc3RhY2tTaXplIDwgdmFsaWRhdGlvbkNvbW1hbmQubWluKSB7CiAgICAgICAgICAgIHdhcm4oIk5vdCBlbm91Z2ggcGFyYW1ldGVycyBmb3IgIiArIHZhbGlkYXRpb25Db21tYW5kLmlkICsgIjsgYWN0dWFsOiAiICsgc3RhY2tTaXplICsgIiwgZXhwZWN0ZWQ6ICIgKyB2YWxpZGF0aW9uQ29tbWFuZC5taW4pOwogICAgICAgICAgICBpZiAoc3RhY2tTaXplID09PSAwKSB7CiAgICAgICAgICAgICAgZGF0YVtqIC0gMV0gPSAxNDsKICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzdGF0ZS5maXJzdFN0YWNrQ2xlYXJpbmcgJiYgdmFsaWRhdGlvbkNvbW1hbmQuc3RhY2tDbGVhcmluZykgewogICAgICAgICAgc3RhdGUuZmlyc3RTdGFja0NsZWFyaW5nID0gZmFsc2U7CiAgICAgICAgICBzdGFja1NpemUgLT0gdmFsaWRhdGlvbkNvbW1hbmQubWluOwogICAgICAgICAgaWYgKHN0YWNrU2l6ZSA+PSAyICYmIHZhbGlkYXRpb25Db21tYW5kLnN0ZW0pIHsKICAgICAgICAgICAgc3RhY2tTaXplICU9IDI7CiAgICAgICAgICB9IGVsc2UgaWYgKHN0YWNrU2l6ZSA+IDEpIHsKICAgICAgICAgICAgd2FybigiRm91bmQgdG9vIG1hbnkgcGFyYW1ldGVycyBmb3Igc3RhY2stY2xlYXJpbmcgY29tbWFuZCIpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHN0YWNrU2l6ZSA+IDApIHsKICAgICAgICAgICAgc3RhdGUud2lkdGggPSBzdGFja1tzdGFja1NpemUgLSAxXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCJzdGFja0RlbHRhIiBpbiB2YWxpZGF0aW9uQ29tbWFuZCkgewogICAgICAgICAgaWYgKCJzdGFja0ZuIiBpbiB2YWxpZGF0aW9uQ29tbWFuZCkgewogICAgICAgICAgICB2YWxpZGF0aW9uQ29tbWFuZC5zdGFja0ZuKHN0YWNrLCBzdGFja1NpemUpOwogICAgICAgICAgfQogICAgICAgICAgc3RhY2tTaXplICs9IHZhbGlkYXRpb25Db21tYW5kLnN0YWNrRGVsdGE7CiAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uQ29tbWFuZC5zdGFja0NsZWFyaW5nKSB7CiAgICAgICAgICBzdGFja1NpemUgPSAwOwogICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbkNvbW1hbmQucmVzZXRTdGFjaykgewogICAgICAgICAgc3RhY2tTaXplID0gMDsKICAgICAgICAgIHN0YXRlLnVuZGVmU3RhY2sgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25Db21tYW5kLnVuZGVmU3RhY2spIHsKICAgICAgICAgIHN0YWNrU2l6ZSA9IDA7CiAgICAgICAgICBzdGF0ZS51bmRlZlN0YWNrID0gdHJ1ZTsKICAgICAgICAgIHN0YXRlLmZpcnN0U3RhY2tDbGVhcmluZyA9IGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKGxlbmd0aCA8IGRhdGEubGVuZ3RoKSB7CiAgICAgIGRhdGEuZmlsbCgxNCwgbGVuZ3RoKTsKICAgIH0KICAgIHN0YXRlLnN0YWNrU2l6ZSA9IHN0YWNrU2l6ZTsKICAgIHJldHVybiB0cnVlOwogIH0KICBwYXJzZUNoYXJTdHJpbmdzKHsKICAgIGNoYXJTdHJpbmdzLAogICAgbG9jYWxTdWJySW5kZXgsCiAgICBnbG9iYWxTdWJySW5kZXgsCiAgICBmZFNlbGVjdCwKICAgIGZkQXJyYXksCiAgICBwcml2YXRlRGljdAogIH0pIHsKICAgIGNvbnN0IHNlYWNzID0gW107CiAgICBjb25zdCB3aWR0aHMgPSBbXTsKICAgIGNvbnN0IGNvdW50ID0gY2hhclN0cmluZ3MuY291bnQ7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgY29uc3QgY2hhcnN0cmluZyA9IGNoYXJTdHJpbmdzLmdldChpKTsKICAgICAgY29uc3Qgc3RhdGUgPSB7CiAgICAgICAgY2FsbERlcHRoOiAwLAogICAgICAgIHN0YWNrU2l6ZTogMCwKICAgICAgICBzdGFjazogW10sCiAgICAgICAgdW5kZWZTdGFjazogdHJ1ZSwKICAgICAgICBoaW50czogMCwKICAgICAgICBmaXJzdFN0YWNrQ2xlYXJpbmc6IHRydWUsCiAgICAgICAgc2VhYzogbnVsbCwKICAgICAgICB3aWR0aDogbnVsbCwKICAgICAgICBoYXNWU3RlbXM6IGZhbHNlCiAgICAgIH07CiAgICAgIGxldCB2YWxpZCA9IHRydWU7CiAgICAgIGxldCBsb2NhbFN1YnJUb1VzZSA9IG51bGw7CiAgICAgIGxldCBwcml2YXRlRGljdFRvVXNlID0gcHJpdmF0ZURpY3Q7CiAgICAgIGlmIChmZFNlbGVjdCAmJiBmZEFycmF5Lmxlbmd0aCkgewogICAgICAgIGNvbnN0IGZkSW5kZXggPSBmZFNlbGVjdC5nZXRGREluZGV4KGkpOwogICAgICAgIGlmIChmZEluZGV4ID09PSAtMSkgewogICAgICAgICAgd2FybigiR2x5cGggaW5kZXggaXMgbm90IGluIGZkIHNlbGVjdC4iKTsKICAgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmIChmZEluZGV4ID49IGZkQXJyYXkubGVuZ3RoKSB7CiAgICAgICAgICB3YXJuKCJJbnZhbGlkIGZkIGluZGV4IGZvciBnbHlwaCBpbmRleC4iKTsKICAgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmICh2YWxpZCkgewogICAgICAgICAgcHJpdmF0ZURpY3RUb1VzZSA9IGZkQXJyYXlbZmRJbmRleF0ucHJpdmF0ZURpY3Q7CiAgICAgICAgICBsb2NhbFN1YnJUb1VzZSA9IHByaXZhdGVEaWN0VG9Vc2Uuc3VicnNJbmRleDsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAobG9jYWxTdWJySW5kZXgpIHsKICAgICAgICBsb2NhbFN1YnJUb1VzZSA9IGxvY2FsU3VickluZGV4OwogICAgICB9CiAgICAgIGlmICh2YWxpZCkgewogICAgICAgIHZhbGlkID0gdGhpcy5wYXJzZUNoYXJTdHJpbmcoc3RhdGUsIGNoYXJzdHJpbmcsIGxvY2FsU3ViclRvVXNlLCBnbG9iYWxTdWJySW5kZXgpOwogICAgICB9CiAgICAgIGlmIChzdGF0ZS53aWR0aCAhPT0gbnVsbCkgewogICAgICAgIGNvbnN0IG5vbWluYWxXaWR0aCA9IHByaXZhdGVEaWN0VG9Vc2UuZ2V0QnlOYW1lKCJub21pbmFsV2lkdGhYIik7CiAgICAgICAgd2lkdGhzW2ldID0gbm9taW5hbFdpZHRoICsgc3RhdGUud2lkdGg7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29uc3QgZGVmYXVsdFdpZHRoID0gcHJpdmF0ZURpY3RUb1VzZS5nZXRCeU5hbWUoImRlZmF1bHRXaWR0aFgiKTsKICAgICAgICB3aWR0aHNbaV0gPSBkZWZhdWx0V2lkdGg7CiAgICAgIH0KICAgICAgaWYgKHN0YXRlLnNlYWMgIT09IG51bGwpIHsKICAgICAgICBzZWFjc1tpXSA9IHN0YXRlLnNlYWM7CiAgICAgIH0KICAgICAgaWYgKCF2YWxpZCkgewogICAgICAgIGNoYXJTdHJpbmdzLnNldChpLCBuZXcgVWludDhBcnJheShbMTRdKSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB7CiAgICAgIGNoYXJTdHJpbmdzLAogICAgICBzZWFjcywKICAgICAgd2lkdGhzCiAgICB9OwogIH0KICBlbXB0eVByaXZhdGVEaWN0aW9uYXJ5KHBhcmVudERpY3QpIHsKICAgIGNvbnN0IHByaXZhdGVEaWN0ID0gdGhpcy5jcmVhdGVEaWN0KENGRlByaXZhdGVEaWN0LCBbXSwgcGFyZW50RGljdC5zdHJpbmdzKTsKICAgIHBhcmVudERpY3Quc2V0QnlLZXkoMTgsIFswLCAwXSk7CiAgICBwYXJlbnREaWN0LnByaXZhdGVEaWN0ID0gcHJpdmF0ZURpY3Q7CiAgfQogIHBhcnNlUHJpdmF0ZURpY3QocGFyZW50RGljdCkgewogICAgaWYgKCFwYXJlbnREaWN0Lmhhc05hbWUoIlByaXZhdGUiKSkgewogICAgICB0aGlzLmVtcHR5UHJpdmF0ZURpY3Rpb25hcnkocGFyZW50RGljdCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHByaXZhdGVPZmZzZXQgPSBwYXJlbnREaWN0LmdldEJ5TmFtZSgiUHJpdmF0ZSIpOwogICAgaWYgKCFBcnJheS5pc0FycmF5KHByaXZhdGVPZmZzZXQpIHx8IHByaXZhdGVPZmZzZXQubGVuZ3RoICE9PSAyKSB7CiAgICAgIHBhcmVudERpY3QucmVtb3ZlQnlOYW1lKCJQcml2YXRlIik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHNpemUgPSBwcml2YXRlT2Zmc2V0WzBdOwogICAgY29uc3Qgb2Zmc2V0ID0gcHJpdmF0ZU9mZnNldFsxXTsKICAgIGlmIChzaXplID09PSAwIHx8IG9mZnNldCA+PSB0aGlzLmJ5dGVzLmxlbmd0aCkgewogICAgICB0aGlzLmVtcHR5UHJpdmF0ZURpY3Rpb25hcnkocGFyZW50RGljdCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHByaXZhdGVEaWN0RW5kID0gb2Zmc2V0ICsgc2l6ZTsKICAgIGNvbnN0IGRpY3REYXRhID0gdGhpcy5ieXRlcy5zdWJhcnJheShvZmZzZXQsIHByaXZhdGVEaWN0RW5kKTsKICAgIGNvbnN0IGRpY3QgPSB0aGlzLnBhcnNlRGljdChkaWN0RGF0YSk7CiAgICBjb25zdCBwcml2YXRlRGljdCA9IHRoaXMuY3JlYXRlRGljdChDRkZQcml2YXRlRGljdCwgZGljdCwgcGFyZW50RGljdC5zdHJpbmdzKTsKICAgIHBhcmVudERpY3QucHJpdmF0ZURpY3QgPSBwcml2YXRlRGljdDsKICAgIGlmIChwcml2YXRlRGljdC5nZXRCeU5hbWUoIkV4cGFuc2lvbkZhY3RvciIpID09PSAwKSB7CiAgICAgIHByaXZhdGVEaWN0LnNldEJ5TmFtZSgiRXhwYW5zaW9uRmFjdG9yIiwgMC4wNik7CiAgICB9CiAgICBpZiAoIXByaXZhdGVEaWN0LmdldEJ5TmFtZSgiU3VicnMiKSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBzdWJyc09mZnNldCA9IHByaXZhdGVEaWN0LmdldEJ5TmFtZSgiU3VicnMiKTsKICAgIGNvbnN0IHJlbGF0aXZlT2Zmc2V0ID0gb2Zmc2V0ICsgc3VicnNPZmZzZXQ7CiAgICBpZiAoc3VicnNPZmZzZXQgPT09IDAgfHwgcmVsYXRpdmVPZmZzZXQgPj0gdGhpcy5ieXRlcy5sZW5ndGgpIHsKICAgICAgdGhpcy5lbXB0eVByaXZhdGVEaWN0aW9uYXJ5KHBhcmVudERpY3QpOwogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBzdWJyc0luZGV4ID0gdGhpcy5wYXJzZUluZGV4KHJlbGF0aXZlT2Zmc2V0KTsKICAgIHByaXZhdGVEaWN0LnN1YnJzSW5kZXggPSBzdWJyc0luZGV4Lm9iajsKICB9CiAgcGFyc2VDaGFyc2V0cyhwb3MsIGxlbmd0aCwgc3RyaW5ncywgY2lkKSB7CiAgICBpZiAocG9zID09PSAwKSB7CiAgICAgIHJldHVybiBuZXcgQ0ZGQ2hhcnNldCh0cnVlLCBDRkZDaGFyc2V0UHJlZGVmaW5lZFR5cGVzLklTT19BRE9CRSwgSVNPQWRvYmVDaGFyc2V0KTsKICAgIH0gZWxzZSBpZiAocG9zID09PSAxKSB7CiAgICAgIHJldHVybiBuZXcgQ0ZGQ2hhcnNldCh0cnVlLCBDRkZDaGFyc2V0UHJlZGVmaW5lZFR5cGVzLkVYUEVSVCwgRXhwZXJ0Q2hhcnNldCk7CiAgICB9IGVsc2UgaWYgKHBvcyA9PT0gMikgewogICAgICByZXR1cm4gbmV3IENGRkNoYXJzZXQodHJ1ZSwgQ0ZGQ2hhcnNldFByZWRlZmluZWRUeXBlcy5FWFBFUlRfU1VCU0VULCBFeHBlcnRTdWJzZXRDaGFyc2V0KTsKICAgIH0KICAgIGNvbnN0IGJ5dGVzID0gdGhpcy5ieXRlczsKICAgIGNvbnN0IHN0YXJ0ID0gcG9zOwogICAgY29uc3QgZm9ybWF0ID0gYnl0ZXNbcG9zKytdOwogICAgY29uc3QgY2hhcnNldCA9IFtjaWQgPyAwIDogIi5ub3RkZWYiXTsKICAgIGxldCBpZCwgY291bnQsIGk7CiAgICBsZW5ndGggLT0gMTsKICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgIGNhc2UgMDoKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGlkID0gYnl0ZXNbcG9zKytdIDw8IDggfCBieXRlc1twb3MrK107CiAgICAgICAgICBjaGFyc2V0LnB1c2goY2lkID8gaWQgOiBzdHJpbmdzLmdldChpZCkpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSAxOgogICAgICAgIHdoaWxlIChjaGFyc2V0Lmxlbmd0aCA8PSBsZW5ndGgpIHsKICAgICAgICAgIGlkID0gYnl0ZXNbcG9zKytdIDw8IDggfCBieXRlc1twb3MrK107CiAgICAgICAgICBjb3VudCA9IGJ5dGVzW3BvcysrXTsKICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gY291bnQ7IGkrKykgewogICAgICAgICAgICBjaGFyc2V0LnB1c2goY2lkID8gaWQrKyA6IHN0cmluZ3MuZ2V0KGlkKyspKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMjoKICAgICAgICB3aGlsZSAoY2hhcnNldC5sZW5ndGggPD0gbGVuZ3RoKSB7CiAgICAgICAgICBpZCA9IGJ5dGVzW3BvcysrXSA8PCA4IHwgYnl0ZXNbcG9zKytdOwogICAgICAgICAgY291bnQgPSBieXRlc1twb3MrK10gPDwgOCB8IGJ5dGVzW3BvcysrXTsKICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gY291bnQ7IGkrKykgewogICAgICAgICAgICBjaGFyc2V0LnB1c2goY2lkID8gaWQrKyA6IHN0cmluZ3MuZ2V0KGlkKyspKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJVbmtub3duIGNoYXJzZXQgZm9ybWF0Iik7CiAgICB9CiAgICBjb25zdCBlbmQgPSBwb3M7CiAgICBjb25zdCByYXcgPSBieXRlcy5zdWJhcnJheShzdGFydCwgZW5kKTsKICAgIHJldHVybiBuZXcgQ0ZGQ2hhcnNldChmYWxzZSwgZm9ybWF0LCBjaGFyc2V0LCByYXcpOwogIH0KICBwYXJzZUVuY29kaW5nKHBvcywgcHJvcGVydGllcywgc3RyaW5ncywgY2hhcnNldCkgewogICAgY29uc3QgZW5jb2RpbmcgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgY29uc3QgYnl0ZXMgPSB0aGlzLmJ5dGVzOwogICAgbGV0IHByZWRlZmluZWQgPSBmYWxzZTsKICAgIGxldCBmb3JtYXQsIGksIGlpOwogICAgbGV0IHJhdyA9IG51bGw7CiAgICBmdW5jdGlvbiByZWFkU3VwcGxlbWVudCgpIHsKICAgICAgY29uc3Qgc3VwcGxlbWVudHNDb3VudCA9IGJ5dGVzW3BvcysrXTsKICAgICAgZm9yIChpID0gMDsgaSA8IHN1cHBsZW1lbnRzQ291bnQ7IGkrKykgewogICAgICAgIGNvbnN0IGNvZGUgPSBieXRlc1twb3MrK107CiAgICAgICAgY29uc3Qgc2lkID0gKGJ5dGVzW3BvcysrXSA8PCA4KSArIChieXRlc1twb3MrK10gJiAweGZmKTsKICAgICAgICBlbmNvZGluZ1tjb2RlXSA9IGNoYXJzZXQuaW5kZXhPZihzdHJpbmdzLmdldChzaWQpKTsKICAgICAgfQogICAgfQogICAgaWYgKHBvcyA9PT0gMCB8fCBwb3MgPT09IDEpIHsKICAgICAgcHJlZGVmaW5lZCA9IHRydWU7CiAgICAgIGZvcm1hdCA9IHBvczsKICAgICAgY29uc3QgYmFzZUVuY29kaW5nID0gcG9zID8gRXhwZXJ0RW5jb2RpbmcgOiBTdGFuZGFyZEVuY29kaW5nOwogICAgICBmb3IgKGkgPSAwLCBpaSA9IGNoYXJzZXQubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICAgIGNvbnN0IGluZGV4ID0gYmFzZUVuY29kaW5nLmluZGV4T2YoY2hhcnNldFtpXSk7CiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkgewogICAgICAgICAgZW5jb2RpbmdbaW5kZXhdID0gaTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0IGRhdGFTdGFydCA9IHBvczsKICAgICAgZm9ybWF0ID0gYnl0ZXNbcG9zKytdOwogICAgICBzd2l0Y2ggKGZvcm1hdCAmIDB4N2YpIHsKICAgICAgICBjYXNlIDA6CiAgICAgICAgICBjb25zdCBnbHlwaHNDb3VudCA9IGJ5dGVzW3BvcysrXTsKICAgICAgICAgIGZvciAoaSA9IDE7IGkgPD0gZ2x5cGhzQ291bnQ7IGkrKykgewogICAgICAgICAgICBlbmNvZGluZ1tieXRlc1twb3MrK11dID0gaTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMToKICAgICAgICAgIGNvbnN0IHJhbmdlc0NvdW50ID0gYnl0ZXNbcG9zKytdOwogICAgICAgICAgbGV0IGdpZCA9IDE7CiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmFuZ2VzQ291bnQ7IGkrKykgewogICAgICAgICAgICBjb25zdCBzdGFydCA9IGJ5dGVzW3BvcysrXTsKICAgICAgICAgICAgY29uc3QgbGVmdCA9IGJ5dGVzW3BvcysrXTsKICAgICAgICAgICAgZm9yIChsZXQgaiA9IHN0YXJ0OyBqIDw9IHN0YXJ0ICsgbGVmdDsgaisrKSB7CiAgICAgICAgICAgICAgZW5jb2Rpbmdbal0gPSBnaWQrKzsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcihgVW5rbm93biBlbmNvZGluZyBmb3JtYXQ6ICR7Zm9ybWF0fSBpbiBDRkZgKTsKICAgICAgfQogICAgICBjb25zdCBkYXRhRW5kID0gcG9zOwogICAgICBpZiAoZm9ybWF0ICYgMHg4MCkgewogICAgICAgIGJ5dGVzW2RhdGFTdGFydF0gJj0gMHg3ZjsKICAgICAgICByZWFkU3VwcGxlbWVudCgpOwogICAgICB9CiAgICAgIHJhdyA9IGJ5dGVzLnN1YmFycmF5KGRhdGFTdGFydCwgZGF0YUVuZCk7CiAgICB9CiAgICBmb3JtYXQgJj0gMHg3ZjsKICAgIHJldHVybiBuZXcgQ0ZGRW5jb2RpbmcocHJlZGVmaW5lZCwgZm9ybWF0LCBlbmNvZGluZywgcmF3KTsKICB9CiAgcGFyc2VGRFNlbGVjdChwb3MsIGxlbmd0aCkgewogICAgY29uc3QgYnl0ZXMgPSB0aGlzLmJ5dGVzOwogICAgY29uc3QgZm9ybWF0ID0gYnl0ZXNbcG9zKytdOwogICAgY29uc3QgZmRTZWxlY3QgPSBbXTsKICAgIGxldCBpOwogICAgc3dpdGNoIChmb3JtYXQpIHsKICAgICAgY2FzZSAwOgogICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICAgY29uc3QgaWQgPSBieXRlc1twb3MrK107CiAgICAgICAgICBmZFNlbGVjdC5wdXNoKGlkKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMzoKICAgICAgICBjb25zdCByYW5nZXNDb3VudCA9IGJ5dGVzW3BvcysrXSA8PCA4IHwgYnl0ZXNbcG9zKytdOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCByYW5nZXNDb3VudDsgKytpKSB7CiAgICAgICAgICBsZXQgZmlyc3QgPSBieXRlc1twb3MrK10gPDwgOCB8IGJ5dGVzW3BvcysrXTsKICAgICAgICAgIGlmIChpID09PSAwICYmIGZpcnN0ICE9PSAwKSB7CiAgICAgICAgICAgIHdhcm4oInBhcnNlRkRTZWxlY3Q6IFRoZSBmaXJzdCByYW5nZSBtdXN0IGhhdmUgYSBmaXJzdCBHSUQgb2YgMCIgKyAiIC0tIHRyeWluZyB0byByZWNvdmVyLiIpOwogICAgICAgICAgICBmaXJzdCA9IDA7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBmZEluZGV4ID0gYnl0ZXNbcG9zKytdOwogICAgICAgICAgY29uc3QgbmV4dCA9IGJ5dGVzW3Bvc10gPDwgOCB8IGJ5dGVzW3BvcyArIDFdOwogICAgICAgICAgZm9yIChsZXQgaiA9IGZpcnN0OyBqIDwgbmV4dDsgKytqKSB7CiAgICAgICAgICAgIGZkU2VsZWN0LnB1c2goZmRJbmRleCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHBvcyArPSAyOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcihgcGFyc2VGRFNlbGVjdDogVW5rbm93biBmb3JtYXQgIiR7Zm9ybWF0fSIuYCk7CiAgICB9CiAgICBpZiAoZmRTZWxlY3QubGVuZ3RoICE9PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJwYXJzZUZEU2VsZWN0OiBJbnZhbGlkIGZvbnQgZGF0YS4iKTsKICAgIH0KICAgIHJldHVybiBuZXcgQ0ZGRkRTZWxlY3QoZm9ybWF0LCBmZFNlbGVjdCk7CiAgfQp9CmNsYXNzIENGRiB7CiAgY29uc3RydWN0b3IoKSB7CiAgICB0aGlzLmhlYWRlciA9IG51bGw7CiAgICB0aGlzLm5hbWVzID0gW107CiAgICB0aGlzLnRvcERpY3QgPSBudWxsOwogICAgdGhpcy5zdHJpbmdzID0gbmV3IENGRlN0cmluZ3MoKTsKICAgIHRoaXMuZ2xvYmFsU3VickluZGV4ID0gbnVsbDsKICAgIHRoaXMuZW5jb2RpbmcgPSBudWxsOwogICAgdGhpcy5jaGFyc2V0ID0gbnVsbDsKICAgIHRoaXMuY2hhclN0cmluZ3MgPSBudWxsOwogICAgdGhpcy5mZEFycmF5ID0gW107CiAgICB0aGlzLmZkU2VsZWN0ID0gbnVsbDsKICAgIHRoaXMuaXNDSURGb250ID0gZmFsc2U7CiAgfQogIGR1cGxpY2F0ZUZpcnN0R2x5cGgoKSB7CiAgICBpZiAodGhpcy5jaGFyU3RyaW5ncy5jb3VudCA+PSA2NTUzNSkgewogICAgICB3YXJuKCJOb3QgZW5vdWdoIHNwYWNlIGluIGNoYXJzdHJpbmdzIHRvIGR1cGxpY2F0ZSBmaXJzdCBnbHlwaC4iKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgZ2x5cGhaZXJvID0gdGhpcy5jaGFyU3RyaW5ncy5nZXQoMCk7CiAgICB0aGlzLmNoYXJTdHJpbmdzLmFkZChnbHlwaFplcm8pOwogICAgaWYgKHRoaXMuaXNDSURGb250KSB7CiAgICAgIHRoaXMuZmRTZWxlY3QuZmRTZWxlY3QucHVzaCh0aGlzLmZkU2VsZWN0LmZkU2VsZWN0WzBdKTsKICAgIH0KICB9CiAgaGFzR2x5cGhJZChpZCkgewogICAgaWYgKGlkIDwgMCB8fCBpZCA+PSB0aGlzLmNoYXJTdHJpbmdzLmNvdW50KSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGNvbnN0IGdseXBoID0gdGhpcy5jaGFyU3RyaW5ncy5nZXQoaWQpOwogICAgcmV0dXJuIGdseXBoLmxlbmd0aCA+IDA7CiAgfQp9CmNsYXNzIENGRkhlYWRlciB7CiAgY29uc3RydWN0b3IobWFqb3IsIG1pbm9yLCBoZHJTaXplLCBvZmZTaXplKSB7CiAgICB0aGlzLm1ham9yID0gbWFqb3I7CiAgICB0aGlzLm1pbm9yID0gbWlub3I7CiAgICB0aGlzLmhkclNpemUgPSBoZHJTaXplOwogICAgdGhpcy5vZmZTaXplID0gb2ZmU2l6ZTsKICB9Cn0KY2xhc3MgQ0ZGU3RyaW5ncyB7CiAgY29uc3RydWN0b3IoKSB7CiAgICB0aGlzLnN0cmluZ3MgPSBbXTsKICB9CiAgZ2V0KGluZGV4KSB7CiAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8PSBOVU1fU1RBTkRBUkRfQ0ZGX1NUUklOR1MgLSAxKSB7CiAgICAgIHJldHVybiBDRkZTdGFuZGFyZFN0cmluZ3NbaW5kZXhdOwogICAgfQogICAgaWYgKGluZGV4IC0gTlVNX1NUQU5EQVJEX0NGRl9TVFJJTkdTIDw9IHRoaXMuc3RyaW5ncy5sZW5ndGgpIHsKICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nc1tpbmRleCAtIE5VTV9TVEFOREFSRF9DRkZfU1RSSU5HU107CiAgICB9CiAgICByZXR1cm4gQ0ZGU3RhbmRhcmRTdHJpbmdzWzBdOwogIH0KICBnZXRTSUQoc3RyKSB7CiAgICBsZXQgaW5kZXggPSBDRkZTdGFuZGFyZFN0cmluZ3MuaW5kZXhPZihzdHIpOwogICAgaWYgKGluZGV4ICE9PSAtMSkgewogICAgICByZXR1cm4gaW5kZXg7CiAgICB9CiAgICBpbmRleCA9IHRoaXMuc3RyaW5ncy5pbmRleE9mKHN0cik7CiAgICBpZiAoaW5kZXggIT09IC0xKSB7CiAgICAgIHJldHVybiBpbmRleCArIE5VTV9TVEFOREFSRF9DRkZfU1RSSU5HUzsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CiAgYWRkKHZhbHVlKSB7CiAgICB0aGlzLnN0cmluZ3MucHVzaCh2YWx1ZSk7CiAgfQogIGdldCBjb3VudCgpIHsKICAgIHJldHVybiB0aGlzLnN0cmluZ3MubGVuZ3RoOwogIH0KfQpjbGFzcyBDRkZJbmRleCB7CiAgY29uc3RydWN0b3IoKSB7CiAgICB0aGlzLm9iamVjdHMgPSBbXTsKICAgIHRoaXMubGVuZ3RoID0gMDsKICB9CiAgYWRkKGRhdGEpIHsKICAgIHRoaXMubGVuZ3RoICs9IGRhdGEubGVuZ3RoOwogICAgdGhpcy5vYmplY3RzLnB1c2goZGF0YSk7CiAgfQogIHNldChpbmRleCwgZGF0YSkgewogICAgdGhpcy5sZW5ndGggKz0gZGF0YS5sZW5ndGggLSB0aGlzLm9iamVjdHNbaW5kZXhdLmxlbmd0aDsKICAgIHRoaXMub2JqZWN0c1tpbmRleF0gPSBkYXRhOwogIH0KICBnZXQoaW5kZXgpIHsKICAgIHJldHVybiB0aGlzLm9iamVjdHNbaW5kZXhdOwogIH0KICBnZXQgY291bnQoKSB7CiAgICByZXR1cm4gdGhpcy5vYmplY3RzLmxlbmd0aDsKICB9Cn0KY2xhc3MgQ0ZGRGljdCB7CiAgY29uc3RydWN0b3IodGFibGVzLCBzdHJpbmdzKSB7CiAgICB0aGlzLmtleVRvTmFtZU1hcCA9IHRhYmxlcy5rZXlUb05hbWVNYXA7CiAgICB0aGlzLm5hbWVUb0tleU1hcCA9IHRhYmxlcy5uYW1lVG9LZXlNYXA7CiAgICB0aGlzLmRlZmF1bHRzID0gdGFibGVzLmRlZmF1bHRzOwogICAgdGhpcy50eXBlcyA9IHRhYmxlcy50eXBlczsKICAgIHRoaXMub3Bjb2RlcyA9IHRhYmxlcy5vcGNvZGVzOwogICAgdGhpcy5vcmRlciA9IHRhYmxlcy5vcmRlcjsKICAgIHRoaXMuc3RyaW5ncyA9IHN0cmluZ3M7CiAgICB0aGlzLnZhbHVlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgfQogIHNldEJ5S2V5KGtleSwgdmFsdWUpIHsKICAgIGlmICghKGtleSBpbiB0aGlzLmtleVRvTmFtZU1hcCkpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGZvciAoY29uc3QgdmFsIG9mIHZhbHVlKSB7CiAgICAgIGlmIChpc05hTih2YWwpKSB7CiAgICAgICAgd2FybihgSW52YWxpZCBDRkZEaWN0IHZhbHVlOiAiJHt2YWx1ZX0iIGZvciBrZXkgIiR7a2V5fSIuYCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0IHR5cGUgPSB0aGlzLnR5cGVzW2tleV07CiAgICBpZiAodHlwZSA9PT0gIm51bSIgfHwgdHlwZSA9PT0gInNpZCIgfHwgdHlwZSA9PT0gIm9mZnNldCIpIHsKICAgICAgdmFsdWUgPSB2YWx1ZVswXTsKICAgIH0KICAgIHRoaXMudmFsdWVzW2tleV0gPSB2YWx1ZTsKICAgIHJldHVybiB0cnVlOwogIH0KICBzZXRCeU5hbWUobmFtZSwgdmFsdWUpIHsKICAgIGlmICghKG5hbWUgaW4gdGhpcy5uYW1lVG9LZXlNYXApKSB7CiAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcihgSW52YWxpZCBkaWN0aW9uYXJ5IG5hbWUgIiR7bmFtZX0iYCk7CiAgICB9CiAgICB0aGlzLnZhbHVlc1t0aGlzLm5hbWVUb0tleU1hcFtuYW1lXV0gPSB2YWx1ZTsKICB9CiAgaGFzTmFtZShuYW1lKSB7CiAgICByZXR1cm4gdGhpcy5uYW1lVG9LZXlNYXBbbmFtZV0gaW4gdGhpcy52YWx1ZXM7CiAgfQogIGdldEJ5TmFtZShuYW1lKSB7CiAgICBpZiAoIShuYW1lIGluIHRoaXMubmFtZVRvS2V5TWFwKSkgewogICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEludmFsaWQgZGljdGlvbmFyeSBuYW1lICR7bmFtZX0iYCk7CiAgICB9CiAgICBjb25zdCBrZXkgPSB0aGlzLm5hbWVUb0tleU1hcFtuYW1lXTsKICAgIGlmICghKGtleSBpbiB0aGlzLnZhbHVlcykpIHsKICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdHNba2V5XTsKICAgIH0KICAgIHJldHVybiB0aGlzLnZhbHVlc1trZXldOwogIH0KICByZW1vdmVCeU5hbWUobmFtZSkgewogICAgZGVsZXRlIHRoaXMudmFsdWVzW3RoaXMubmFtZVRvS2V5TWFwW25hbWVdXTsKICB9CiAgc3RhdGljIGNyZWF0ZVRhYmxlcyhsYXlvdXQpIHsKICAgIGNvbnN0IHRhYmxlcyA9IHsKICAgICAga2V5VG9OYW1lTWFwOiB7fSwKICAgICAgbmFtZVRvS2V5TWFwOiB7fSwKICAgICAgZGVmYXVsdHM6IHt9LAogICAgICB0eXBlczoge30sCiAgICAgIG9wY29kZXM6IHt9LAogICAgICBvcmRlcjogW10KICAgIH07CiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGxheW91dCkgewogICAgICBjb25zdCBrZXkgPSBBcnJheS5pc0FycmF5KGVudHJ5WzBdKSA/IChlbnRyeVswXVswXSA8PCA4KSArIGVudHJ5WzBdWzFdIDogZW50cnlbMF07CiAgICAgIHRhYmxlcy5rZXlUb05hbWVNYXBba2V5XSA9IGVudHJ5WzFdOwogICAgICB0YWJsZXMubmFtZVRvS2V5TWFwW2VudHJ5WzFdXSA9IGtleTsKICAgICAgdGFibGVzLnR5cGVzW2tleV0gPSBlbnRyeVsyXTsKICAgICAgdGFibGVzLmRlZmF1bHRzW2tleV0gPSBlbnRyeVszXTsKICAgICAgdGFibGVzLm9wY29kZXNba2V5XSA9IEFycmF5LmlzQXJyYXkoZW50cnlbMF0pID8gZW50cnlbMF0gOiBbZW50cnlbMF1dOwogICAgICB0YWJsZXMub3JkZXIucHVzaChrZXkpOwogICAgfQogICAgcmV0dXJuIHRhYmxlczsKICB9Cn0KY29uc3QgQ0ZGVG9wRGljdExheW91dCA9IFtbWzEyLCAzMF0sICJST1MiLCBbInNpZCIsICJzaWQiLCAibnVtIl0sIG51bGxdLCBbWzEyLCAyMF0sICJTeW50aGV0aWNCYXNlIiwgIm51bSIsIG51bGxdLCBbMCwgInZlcnNpb24iLCAic2lkIiwgbnVsbF0sIFsxLCAiTm90aWNlIiwgInNpZCIsIG51bGxdLCBbWzEyLCAwXSwgIkNvcHlyaWdodCIsICJzaWQiLCBudWxsXSwgWzIsICJGdWxsTmFtZSIsICJzaWQiLCBudWxsXSwgWzMsICJGYW1pbHlOYW1lIiwgInNpZCIsIG51bGxdLCBbNCwgIldlaWdodCIsICJzaWQiLCBudWxsXSwgW1sxMiwgMV0sICJpc0ZpeGVkUGl0Y2giLCAibnVtIiwgMF0sIFtbMTIsIDJdLCAiSXRhbGljQW5nbGUiLCAibnVtIiwgMF0sIFtbMTIsIDNdLCAiVW5kZXJsaW5lUG9zaXRpb24iLCAibnVtIiwgLTEwMF0sIFtbMTIsIDRdLCAiVW5kZXJsaW5lVGhpY2tuZXNzIiwgIm51bSIsIDUwXSwgW1sxMiwgNV0sICJQYWludFR5cGUiLCAibnVtIiwgMF0sIFtbMTIsIDZdLCAiQ2hhcnN0cmluZ1R5cGUiLCAibnVtIiwgMl0sIFtbMTIsIDddLCAiRm9udE1hdHJpeCIsIFsibnVtIiwgIm51bSIsICJudW0iLCAibnVtIiwgIm51bSIsICJudW0iXSwgWzAuMDAxLCAwLCAwLCAwLjAwMSwgMCwgMF1dLCBbMTMsICJVbmlxdWVJRCIsICJudW0iLCBudWxsXSwgWzUsICJGb250QkJveCIsIFsibnVtIiwgIm51bSIsICJudW0iLCAibnVtIl0sIFswLCAwLCAwLCAwXV0sIFtbMTIsIDhdLCAiU3Ryb2tlV2lkdGgiLCAibnVtIiwgMF0sIFsxNCwgIlhVSUQiLCAiYXJyYXkiLCBudWxsXSwgWzE1LCAiY2hhcnNldCIsICJvZmZzZXQiLCAwXSwgWzE2LCAiRW5jb2RpbmciLCAib2Zmc2V0IiwgMF0sIFsxNywgIkNoYXJTdHJpbmdzIiwgIm9mZnNldCIsIDBdLCBbMTgsICJQcml2YXRlIiwgWyJvZmZzZXQiLCAib2Zmc2V0Il0sIG51bGxdLCBbWzEyLCAyMV0sICJQb3N0U2NyaXB0IiwgInNpZCIsIG51bGxdLCBbWzEyLCAyMl0sICJCYXNlRm9udE5hbWUiLCAic2lkIiwgbnVsbF0sIFtbMTIsIDIzXSwgIkJhc2VGb250QmxlbmQiLCAiZGVsdGEiLCBudWxsXSwgW1sxMiwgMzFdLCAiQ0lERm9udFZlcnNpb24iLCAibnVtIiwgMF0sIFtbMTIsIDMyXSwgIkNJREZvbnRSZXZpc2lvbiIsICJudW0iLCAwXSwgW1sxMiwgMzNdLCAiQ0lERm9udFR5cGUiLCAibnVtIiwgMF0sIFtbMTIsIDM0XSwgIkNJRENvdW50IiwgIm51bSIsIDg3MjBdLCBbWzEyLCAzNV0sICJVSURCYXNlIiwgIm51bSIsIG51bGxdLCBbWzEyLCAzN10sICJGRFNlbGVjdCIsICJvZmZzZXQiLCBudWxsXSwgW1sxMiwgMzZdLCAiRkRBcnJheSIsICJvZmZzZXQiLCBudWxsXSwgW1sxMiwgMzhdLCAiRm9udE5hbWUiLCAic2lkIiwgbnVsbF1dOwpjbGFzcyBDRkZUb3BEaWN0IGV4dGVuZHMgQ0ZGRGljdCB7CiAgc3RhdGljIGdldCB0YWJsZXMoKSB7CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJ0YWJsZXMiLCB0aGlzLmNyZWF0ZVRhYmxlcyhDRkZUb3BEaWN0TGF5b3V0KSk7CiAgfQogIGNvbnN0cnVjdG9yKHN0cmluZ3MpIHsKICAgIHN1cGVyKENGRlRvcERpY3QudGFibGVzLCBzdHJpbmdzKTsKICAgIHRoaXMucHJpdmF0ZURpY3QgPSBudWxsOwogIH0KfQpjb25zdCBDRkZQcml2YXRlRGljdExheW91dCA9IFtbNiwgIkJsdWVWYWx1ZXMiLCAiZGVsdGEiLCBudWxsXSwgWzcsICJPdGhlckJsdWVzIiwgImRlbHRhIiwgbnVsbF0sIFs4LCAiRmFtaWx5Qmx1ZXMiLCAiZGVsdGEiLCBudWxsXSwgWzksICJGYW1pbHlPdGhlckJsdWVzIiwgImRlbHRhIiwgbnVsbF0sIFtbMTIsIDldLCAiQmx1ZVNjYWxlIiwgIm51bSIsIDAuMDM5NjI1XSwgW1sxMiwgMTBdLCAiQmx1ZVNoaWZ0IiwgIm51bSIsIDddLCBbWzEyLCAxMV0sICJCbHVlRnV6eiIsICJudW0iLCAxXSwgWzEwLCAiU3RkSFciLCAibnVtIiwgbnVsbF0sIFsxMSwgIlN0ZFZXIiwgIm51bSIsIG51bGxdLCBbWzEyLCAxMl0sICJTdGVtU25hcEgiLCAiZGVsdGEiLCBudWxsXSwgW1sxMiwgMTNdLCAiU3RlbVNuYXBWIiwgImRlbHRhIiwgbnVsbF0sIFtbMTIsIDE0XSwgIkZvcmNlQm9sZCIsICJudW0iLCAwXSwgW1sxMiwgMTddLCAiTGFuZ3VhZ2VHcm91cCIsICJudW0iLCAwXSwgW1sxMiwgMThdLCAiRXhwYW5zaW9uRmFjdG9yIiwgIm51bSIsIDAuMDZdLCBbWzEyLCAxOV0sICJpbml0aWFsUmFuZG9tU2VlZCIsICJudW0iLCAwXSwgWzIwLCAiZGVmYXVsdFdpZHRoWCIsICJudW0iLCAwXSwgWzIxLCAibm9taW5hbFdpZHRoWCIsICJudW0iLCAwXSwgWzE5LCAiU3VicnMiLCAib2Zmc2V0IiwgbnVsbF1dOwpjbGFzcyBDRkZQcml2YXRlRGljdCBleHRlbmRzIENGRkRpY3QgewogIHN0YXRpYyBnZXQgdGFibGVzKCkgewogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAidGFibGVzIiwgdGhpcy5jcmVhdGVUYWJsZXMoQ0ZGUHJpdmF0ZURpY3RMYXlvdXQpKTsKICB9CiAgY29uc3RydWN0b3Ioc3RyaW5ncykgewogICAgc3VwZXIoQ0ZGUHJpdmF0ZURpY3QudGFibGVzLCBzdHJpbmdzKTsKICAgIHRoaXMuc3VicnNJbmRleCA9IG51bGw7CiAgfQp9CmNvbnN0IENGRkNoYXJzZXRQcmVkZWZpbmVkVHlwZXMgPSB7CiAgSVNPX0FET0JFOiAwLAogIEVYUEVSVDogMSwKICBFWFBFUlRfU1VCU0VUOiAyCn07CmNsYXNzIENGRkNoYXJzZXQgewogIGNvbnN0cnVjdG9yKHByZWRlZmluZWQsIGZvcm1hdCwgY2hhcnNldCwgcmF3KSB7CiAgICB0aGlzLnByZWRlZmluZWQgPSBwcmVkZWZpbmVkOwogICAgdGhpcy5mb3JtYXQgPSBmb3JtYXQ7CiAgICB0aGlzLmNoYXJzZXQgPSBjaGFyc2V0OwogICAgdGhpcy5yYXcgPSByYXc7CiAgfQp9CmNsYXNzIENGRkVuY29kaW5nIHsKICBjb25zdHJ1Y3RvcihwcmVkZWZpbmVkLCBmb3JtYXQsIGVuY29kaW5nLCByYXcpIHsKICAgIHRoaXMucHJlZGVmaW5lZCA9IHByZWRlZmluZWQ7CiAgICB0aGlzLmZvcm1hdCA9IGZvcm1hdDsKICAgIHRoaXMuZW5jb2RpbmcgPSBlbmNvZGluZzsKICAgIHRoaXMucmF3ID0gcmF3OwogIH0KfQpjbGFzcyBDRkZGRFNlbGVjdCB7CiAgY29uc3RydWN0b3IoZm9ybWF0LCBmZFNlbGVjdCkgewogICAgdGhpcy5mb3JtYXQgPSBmb3JtYXQ7CiAgICB0aGlzLmZkU2VsZWN0ID0gZmRTZWxlY3Q7CiAgfQogIGdldEZESW5kZXgoZ2x5cGhJbmRleCkgewogICAgaWYgKGdseXBoSW5kZXggPCAwIHx8IGdseXBoSW5kZXggPj0gdGhpcy5mZFNlbGVjdC5sZW5ndGgpIHsKICAgICAgcmV0dXJuIC0xOwogICAgfQogICAgcmV0dXJuIHRoaXMuZmRTZWxlY3RbZ2x5cGhJbmRleF07CiAgfQp9CmNsYXNzIENGRk9mZnNldFRyYWNrZXIgewogIGNvbnN0cnVjdG9yKCkgewogICAgdGhpcy5vZmZzZXRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICB9CiAgaXNUcmFja2luZyhrZXkpIHsKICAgIHJldHVybiBrZXkgaW4gdGhpcy5vZmZzZXRzOwogIH0KICB0cmFjayhrZXksIGxvY2F0aW9uKSB7CiAgICBpZiAoa2V5IGluIHRoaXMub2Zmc2V0cykgewogICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEFscmVhZHkgdHJhY2tpbmcgbG9jYXRpb24gb2YgJHtrZXl9YCk7CiAgICB9CiAgICB0aGlzLm9mZnNldHNba2V5XSA9IGxvY2F0aW9uOwogIH0KICBvZmZzZXQodmFsdWUpIHsKICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMub2Zmc2V0cykgewogICAgICB0aGlzLm9mZnNldHNba2V5XSArPSB2YWx1ZTsKICAgIH0KICB9CiAgc2V0RW50cnlMb2NhdGlvbihrZXksIHZhbHVlcywgb3V0cHV0KSB7CiAgICBpZiAoIShrZXkgaW4gdGhpcy5vZmZzZXRzKSkgewogICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYE5vdCB0cmFja2luZyBsb2NhdGlvbiBvZiAke2tleX1gKTsKICAgIH0KICAgIGNvbnN0IGRhdGEgPSBvdXRwdXQuZGF0YTsKICAgIGNvbnN0IGRhdGFPZmZzZXQgPSB0aGlzLm9mZnNldHNba2V5XTsKICAgIGNvbnN0IHNpemUgPSA1OwogICAgZm9yIChsZXQgaSA9IDAsIGlpID0gdmFsdWVzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHsKICAgICAgY29uc3Qgb2Zmc2V0MCA9IGkgKiBzaXplICsgZGF0YU9mZnNldDsKICAgICAgY29uc3Qgb2Zmc2V0MSA9IG9mZnNldDAgKyAxOwogICAgICBjb25zdCBvZmZzZXQyID0gb2Zmc2V0MCArIDI7CiAgICAgIGNvbnN0IG9mZnNldDMgPSBvZmZzZXQwICsgMzsKICAgICAgY29uc3Qgb2Zmc2V0NCA9IG9mZnNldDAgKyA0OwogICAgICBpZiAoZGF0YVtvZmZzZXQwXSAhPT0gMHgxZCB8fCBkYXRhW29mZnNldDFdICE9PSAwIHx8IGRhdGFbb2Zmc2V0Ml0gIT09IDAgfHwgZGF0YVtvZmZzZXQzXSAhPT0gMCB8fCBkYXRhW29mZnNldDRdICE9PSAwKSB7CiAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJ3cml0aW5nIHRvIGFuIG9mZnNldCB0aGF0IGlzIG5vdCBlbXB0eSIpOwogICAgICB9CiAgICAgIGNvbnN0IHZhbHVlID0gdmFsdWVzW2ldOwogICAgICBkYXRhW29mZnNldDBdID0gMHgxZDsKICAgICAgZGF0YVtvZmZzZXQxXSA9IHZhbHVlID4+IDI0ICYgMHhmZjsKICAgICAgZGF0YVtvZmZzZXQyXSA9IHZhbHVlID4+IDE2ICYgMHhmZjsKICAgICAgZGF0YVtvZmZzZXQzXSA9IHZhbHVlID4+IDggJiAweGZmOwogICAgICBkYXRhW29mZnNldDRdID0gdmFsdWUgJiAweGZmOwogICAgfQogIH0KfQpjbGFzcyBDRkZDb21waWxlciB7CiAgY29uc3RydWN0b3IoY2ZmKSB7CiAgICB0aGlzLmNmZiA9IGNmZjsKICB9CiAgY29tcGlsZSgpIHsKICAgIGNvbnN0IGNmZiA9IHRoaXMuY2ZmOwogICAgY29uc3Qgb3V0cHV0ID0gewogICAgICBkYXRhOiBbXSwKICAgICAgbGVuZ3RoOiAwLAogICAgICBhZGQoZGF0YSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICB0aGlzLmRhdGEucHVzaCguLi5kYXRhKTsKICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5jb25jYXQoZGF0YSk7CiAgICAgICAgfQogICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5kYXRhLmxlbmd0aDsKICAgICAgfQogICAgfTsKICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuY29tcGlsZUhlYWRlcihjZmYuaGVhZGVyKTsKICAgIG91dHB1dC5hZGQoaGVhZGVyKTsKICAgIGNvbnN0IG5hbWVJbmRleCA9IHRoaXMuY29tcGlsZU5hbWVJbmRleChjZmYubmFtZXMpOwogICAgb3V0cHV0LmFkZChuYW1lSW5kZXgpOwogICAgaWYgKGNmZi5pc0NJREZvbnQpIHsKICAgICAgaWYgKGNmZi50b3BEaWN0Lmhhc05hbWUoIkZvbnRNYXRyaXgiKSkgewogICAgICAgIGNvbnN0IGJhc2UgPSBjZmYudG9wRGljdC5nZXRCeU5hbWUoIkZvbnRNYXRyaXgiKTsKICAgICAgICBjZmYudG9wRGljdC5yZW1vdmVCeU5hbWUoIkZvbnRNYXRyaXgiKTsKICAgICAgICBmb3IgKGNvbnN0IHN1YkRpY3Qgb2YgY2ZmLmZkQXJyYXkpIHsKICAgICAgICAgIGxldCBtYXRyaXggPSBiYXNlLnNsaWNlKDApOwogICAgICAgICAgaWYgKHN1YkRpY3QuaGFzTmFtZSgiRm9udE1hdHJpeCIpKSB7CiAgICAgICAgICAgIG1hdHJpeCA9IFV0aWwudHJhbnNmb3JtKG1hdHJpeCwgc3ViRGljdC5nZXRCeU5hbWUoIkZvbnRNYXRyaXgiKSk7CiAgICAgICAgICB9CiAgICAgICAgICBzdWJEaWN0LnNldEJ5TmFtZSgiRm9udE1hdHJpeCIsIG1hdHJpeCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBjb25zdCB4dWlkID0gY2ZmLnRvcERpY3QuZ2V0QnlOYW1lKCJYVUlEIik7CiAgICBpZiAoeHVpZD8ubGVuZ3RoID4gMTYpIHsKICAgICAgY2ZmLnRvcERpY3QucmVtb3ZlQnlOYW1lKCJYVUlEIik7CiAgICB9CiAgICBjZmYudG9wRGljdC5zZXRCeU5hbWUoImNoYXJzZXQiLCAwKTsKICAgIGxldCBjb21waWxlZCA9IHRoaXMuY29tcGlsZVRvcERpY3RzKFtjZmYudG9wRGljdF0sIG91dHB1dC5sZW5ndGgsIGNmZi5pc0NJREZvbnQpOwogICAgb3V0cHV0LmFkZChjb21waWxlZC5vdXRwdXQpOwogICAgY29uc3QgdG9wRGljdFRyYWNrZXIgPSBjb21waWxlZC50cmFja2Vyc1swXTsKICAgIGNvbnN0IHN0cmluZ0luZGV4ID0gdGhpcy5jb21waWxlU3RyaW5nSW5kZXgoY2ZmLnN0cmluZ3Muc3RyaW5ncyk7CiAgICBvdXRwdXQuYWRkKHN0cmluZ0luZGV4KTsKICAgIGNvbnN0IGdsb2JhbFN1YnJJbmRleCA9IHRoaXMuY29tcGlsZUluZGV4KGNmZi5nbG9iYWxTdWJySW5kZXgpOwogICAgb3V0cHV0LmFkZChnbG9iYWxTdWJySW5kZXgpOwogICAgaWYgKGNmZi5lbmNvZGluZyAmJiBjZmYudG9wRGljdC5oYXNOYW1lKCJFbmNvZGluZyIpKSB7CiAgICAgIGlmIChjZmYuZW5jb2RpbmcucHJlZGVmaW5lZCkgewogICAgICAgIHRvcERpY3RUcmFja2VyLnNldEVudHJ5TG9jYXRpb24oIkVuY29kaW5nIiwgW2NmZi5lbmNvZGluZy5mb3JtYXRdLCBvdXRwdXQpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IGVuY29kaW5nID0gdGhpcy5jb21waWxlRW5jb2RpbmcoY2ZmLmVuY29kaW5nKTsKICAgICAgICB0b3BEaWN0VHJhY2tlci5zZXRFbnRyeUxvY2F0aW9uKCJFbmNvZGluZyIsIFtvdXRwdXQubGVuZ3RoXSwgb3V0cHV0KTsKICAgICAgICBvdXRwdXQuYWRkKGVuY29kaW5nKTsKICAgICAgfQogICAgfQogICAgY29uc3QgY2hhcnNldCA9IHRoaXMuY29tcGlsZUNoYXJzZXQoY2ZmLmNoYXJzZXQsIGNmZi5jaGFyU3RyaW5ncy5jb3VudCwgY2ZmLnN0cmluZ3MsIGNmZi5pc0NJREZvbnQpOwogICAgdG9wRGljdFRyYWNrZXIuc2V0RW50cnlMb2NhdGlvbigiY2hhcnNldCIsIFtvdXRwdXQubGVuZ3RoXSwgb3V0cHV0KTsKICAgIG91dHB1dC5hZGQoY2hhcnNldCk7CiAgICBjb25zdCBjaGFyU3RyaW5ncyA9IHRoaXMuY29tcGlsZUNoYXJTdHJpbmdzKGNmZi5jaGFyU3RyaW5ncyk7CiAgICB0b3BEaWN0VHJhY2tlci5zZXRFbnRyeUxvY2F0aW9uKCJDaGFyU3RyaW5ncyIsIFtvdXRwdXQubGVuZ3RoXSwgb3V0cHV0KTsKICAgIG91dHB1dC5hZGQoY2hhclN0cmluZ3MpOwogICAgaWYgKGNmZi5pc0NJREZvbnQpIHsKICAgICAgdG9wRGljdFRyYWNrZXIuc2V0RW50cnlMb2NhdGlvbigiRkRTZWxlY3QiLCBbb3V0cHV0Lmxlbmd0aF0sIG91dHB1dCk7CiAgICAgIGNvbnN0IGZkU2VsZWN0ID0gdGhpcy5jb21waWxlRkRTZWxlY3QoY2ZmLmZkU2VsZWN0KTsKICAgICAgb3V0cHV0LmFkZChmZFNlbGVjdCk7CiAgICAgIGNvbXBpbGVkID0gdGhpcy5jb21waWxlVG9wRGljdHMoY2ZmLmZkQXJyYXksIG91dHB1dC5sZW5ndGgsIHRydWUpOwogICAgICB0b3BEaWN0VHJhY2tlci5zZXRFbnRyeUxvY2F0aW9uKCJGREFycmF5IiwgW291dHB1dC5sZW5ndGhdLCBvdXRwdXQpOwogICAgICBvdXRwdXQuYWRkKGNvbXBpbGVkLm91dHB1dCk7CiAgICAgIGNvbnN0IGZvbnREaWN0VHJhY2tlcnMgPSBjb21waWxlZC50cmFja2VyczsKICAgICAgdGhpcy5jb21waWxlUHJpdmF0ZURpY3RzKGNmZi5mZEFycmF5LCBmb250RGljdFRyYWNrZXJzLCBvdXRwdXQpOwogICAgfQogICAgdGhpcy5jb21waWxlUHJpdmF0ZURpY3RzKFtjZmYudG9wRGljdF0sIFt0b3BEaWN0VHJhY2tlcl0sIG91dHB1dCk7CiAgICBvdXRwdXQuYWRkKFswXSk7CiAgICByZXR1cm4gb3V0cHV0LmRhdGE7CiAgfQogIGVuY29kZU51bWJlcih2YWx1ZSkgewogICAgaWYgKE51bWJlci5pc0ludGVnZXIodmFsdWUpKSB7CiAgICAgIHJldHVybiB0aGlzLmVuY29kZUludGVnZXIodmFsdWUpOwogICAgfQogICAgcmV0dXJuIHRoaXMuZW5jb2RlRmxvYXQodmFsdWUpOwogIH0KICBzdGF0aWMgZ2V0IEVuY29kZUZsb2F0UmVnRXhwKCkgewogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAiRW5jb2RlRmxvYXRSZWdFeHAiLCAvXC4oXGQqPykoPzo5ezUsMjB9fDB7NSwyMH0pXGR7MCwyfSg/OmUoLispfCQpLyk7CiAgfQogIGVuY29kZUZsb2F0KG51bSkgewogICAgbGV0IHZhbHVlID0gbnVtLnRvU3RyaW5nKCk7CiAgICBjb25zdCBtID0gQ0ZGQ29tcGlsZXIuRW5jb2RlRmxvYXRSZWdFeHAuZXhlYyh2YWx1ZSk7CiAgICBpZiAobSkgewogICAgICBjb25zdCBlcHNpbG9uID0gcGFyc2VGbG9hdCgiMWUiICsgKChtWzJdID8gK21bMl0gOiAwKSArIG1bMV0ubGVuZ3RoKSk7CiAgICAgIHZhbHVlID0gKE1hdGgucm91bmQobnVtICogZXBzaWxvbikgLyBlcHNpbG9uKS50b1N0cmluZygpOwogICAgfQogICAgbGV0IG5pYmJsZXMgPSAiIjsKICAgIGxldCBpLCBpaTsKICAgIGZvciAoaSA9IDAsIGlpID0gdmFsdWUubGVuZ3RoOyBpIDwgaWk7ICsraSkgewogICAgICBjb25zdCBhID0gdmFsdWVbaV07CiAgICAgIGlmIChhID09PSAiZSIpIHsKICAgICAgICBuaWJibGVzICs9IHZhbHVlWysraV0gPT09ICItIiA/ICJjIiA6ICJiIjsKICAgICAgfSBlbHNlIGlmIChhID09PSAiLiIpIHsKICAgICAgICBuaWJibGVzICs9ICJhIjsKICAgICAgfSBlbHNlIGlmIChhID09PSAiLSIpIHsKICAgICAgICBuaWJibGVzICs9ICJlIjsKICAgICAgfSBlbHNlIHsKICAgICAgICBuaWJibGVzICs9IGE7CiAgICAgIH0KICAgIH0KICAgIG5pYmJsZXMgKz0gbmliYmxlcy5sZW5ndGggJiAxID8gImYiIDogImZmIjsKICAgIGNvbnN0IG91dCA9IFszMF07CiAgICBmb3IgKGkgPSAwLCBpaSA9IG5pYmJsZXMubGVuZ3RoOyBpIDwgaWk7IGkgKz0gMikgewogICAgICBvdXQucHVzaChwYXJzZUludChuaWJibGVzLnN1YnN0cmluZyhpLCBpICsgMiksIDE2KSk7CiAgICB9CiAgICByZXR1cm4gb3V0OwogIH0KICBlbmNvZGVJbnRlZ2VyKHZhbHVlKSB7CiAgICBsZXQgY29kZTsKICAgIGlmICh2YWx1ZSA+PSAtMTA3ICYmIHZhbHVlIDw9IDEwNykgewogICAgICBjb2RlID0gW3ZhbHVlICsgMTM5XTsKICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gMTA4ICYmIHZhbHVlIDw9IDExMzEpIHsKICAgICAgdmFsdWUgLT0gMTA4OwogICAgICBjb2RlID0gWyh2YWx1ZSA+PiA4KSArIDI0NywgdmFsdWUgJiAweGZmXTsKICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gLTExMzEgJiYgdmFsdWUgPD0gLTEwOCkgewogICAgICB2YWx1ZSA9IC12YWx1ZSAtIDEwODsKICAgICAgY29kZSA9IFsodmFsdWUgPj4gOCkgKyAyNTEsIHZhbHVlICYgMHhmZl07CiAgICB9IGVsc2UgaWYgKHZhbHVlID49IC0zMjc2OCAmJiB2YWx1ZSA8PSAzMjc2NykgewogICAgICBjb2RlID0gWzB4MWMsIHZhbHVlID4+IDggJiAweGZmLCB2YWx1ZSAmIDB4ZmZdOwogICAgfSBlbHNlIHsKICAgICAgY29kZSA9IFsweDFkLCB2YWx1ZSA+PiAyNCAmIDB4ZmYsIHZhbHVlID4+IDE2ICYgMHhmZiwgdmFsdWUgPj4gOCAmIDB4ZmYsIHZhbHVlICYgMHhmZl07CiAgICB9CiAgICByZXR1cm4gY29kZTsKICB9CiAgY29tcGlsZUhlYWRlcihoZWFkZXIpIHsKICAgIHJldHVybiBbaGVhZGVyLm1ham9yLCBoZWFkZXIubWlub3IsIDQsIGhlYWRlci5vZmZTaXplXTsKICB9CiAgY29tcGlsZU5hbWVJbmRleChuYW1lcykgewogICAgY29uc3QgbmFtZUluZGV4ID0gbmV3IENGRkluZGV4KCk7CiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgbmFtZXMpIHsKICAgICAgY29uc3QgbGVuZ3RoID0gTWF0aC5taW4obmFtZS5sZW5ndGgsIDEyNyk7CiAgICAgIGxldCBzYW5pdGl6ZWROYW1lID0gbmV3IEFycmF5KGxlbmd0aCk7CiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGVuZ3RoOyBqKyspIHsKICAgICAgICBsZXQgY2hhciA9IG5hbWVbal07CiAgICAgICAgaWYgKGNoYXIgPCAiISIgfHwgY2hhciA+ICJ+IiB8fCBjaGFyID09PSAiWyIgfHwgY2hhciA9PT0gIl0iIHx8IGNoYXIgPT09ICIoIiB8fCBjaGFyID09PSAiKSIgfHwgY2hhciA9PT0gInsiIHx8IGNoYXIgPT09ICJ9IiB8fCBjaGFyID09PSAiPCIgfHwgY2hhciA9PT0gIj4iIHx8IGNoYXIgPT09ICIvIiB8fCBjaGFyID09PSAiJSIpIHsKICAgICAgICAgIGNoYXIgPSAiXyI7CiAgICAgICAgfQogICAgICAgIHNhbml0aXplZE5hbWVbal0gPSBjaGFyOwogICAgICB9CiAgICAgIHNhbml0aXplZE5hbWUgPSBzYW5pdGl6ZWROYW1lLmpvaW4oIiIpOwogICAgICBpZiAoc2FuaXRpemVkTmFtZSA9PT0gIiIpIHsKICAgICAgICBzYW5pdGl6ZWROYW1lID0gIkJhZF9Gb250X05hbWUiOwogICAgICB9CiAgICAgIG5hbWVJbmRleC5hZGQoc3RyaW5nVG9CeXRlcyhzYW5pdGl6ZWROYW1lKSk7CiAgICB9CiAgICByZXR1cm4gdGhpcy5jb21waWxlSW5kZXgobmFtZUluZGV4KTsKICB9CiAgY29tcGlsZVRvcERpY3RzKGRpY3RzLCBsZW5ndGgsIHJlbW92ZUNpZEtleXMpIHsKICAgIGNvbnN0IGZvbnREaWN0VHJhY2tlcnMgPSBbXTsKICAgIGxldCBmZEFycmF5SW5kZXggPSBuZXcgQ0ZGSW5kZXgoKTsKICAgIGZvciAoY29uc3QgZm9udERpY3Qgb2YgZGljdHMpIHsKICAgICAgaWYgKHJlbW92ZUNpZEtleXMpIHsKICAgICAgICBmb250RGljdC5yZW1vdmVCeU5hbWUoIkNJREZvbnRWZXJzaW9uIik7CiAgICAgICAgZm9udERpY3QucmVtb3ZlQnlOYW1lKCJDSURGb250UmV2aXNpb24iKTsKICAgICAgICBmb250RGljdC5yZW1vdmVCeU5hbWUoIkNJREZvbnRUeXBlIik7CiAgICAgICAgZm9udERpY3QucmVtb3ZlQnlOYW1lKCJDSURDb3VudCIpOwogICAgICAgIGZvbnREaWN0LnJlbW92ZUJ5TmFtZSgiVUlEQmFzZSIpOwogICAgICB9CiAgICAgIGNvbnN0IGZvbnREaWN0VHJhY2tlciA9IG5ldyBDRkZPZmZzZXRUcmFja2VyKCk7CiAgICAgIGNvbnN0IGZvbnREaWN0RGF0YSA9IHRoaXMuY29tcGlsZURpY3QoZm9udERpY3QsIGZvbnREaWN0VHJhY2tlcik7CiAgICAgIGZvbnREaWN0VHJhY2tlcnMucHVzaChmb250RGljdFRyYWNrZXIpOwogICAgICBmZEFycmF5SW5kZXguYWRkKGZvbnREaWN0RGF0YSk7CiAgICAgIGZvbnREaWN0VHJhY2tlci5vZmZzZXQobGVuZ3RoKTsKICAgIH0KICAgIGZkQXJyYXlJbmRleCA9IHRoaXMuY29tcGlsZUluZGV4KGZkQXJyYXlJbmRleCwgZm9udERpY3RUcmFja2Vycyk7CiAgICByZXR1cm4gewogICAgICB0cmFja2VyczogZm9udERpY3RUcmFja2VycywKICAgICAgb3V0cHV0OiBmZEFycmF5SW5kZXgKICAgIH07CiAgfQogIGNvbXBpbGVQcml2YXRlRGljdHMoZGljdHMsIHRyYWNrZXJzLCBvdXRwdXQpIHsKICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGRpY3RzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHsKICAgICAgY29uc3QgZm9udERpY3QgPSBkaWN0c1tpXTsKICAgICAgY29uc3QgcHJpdmF0ZURpY3QgPSBmb250RGljdC5wcml2YXRlRGljdDsKICAgICAgaWYgKCFwcml2YXRlRGljdCB8fCAhZm9udERpY3QuaGFzTmFtZSgiUHJpdmF0ZSIpKSB7CiAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJUaGVyZSBtdXN0IGJlIGEgcHJpdmF0ZSBkaWN0aW9uYXJ5LiIpOwogICAgICB9CiAgICAgIGNvbnN0IHByaXZhdGVEaWN0VHJhY2tlciA9IG5ldyBDRkZPZmZzZXRUcmFja2VyKCk7CiAgICAgIGNvbnN0IHByaXZhdGVEaWN0RGF0YSA9IHRoaXMuY29tcGlsZURpY3QocHJpdmF0ZURpY3QsIHByaXZhdGVEaWN0VHJhY2tlcik7CiAgICAgIGxldCBvdXRwdXRMZW5ndGggPSBvdXRwdXQubGVuZ3RoOwogICAgICBwcml2YXRlRGljdFRyYWNrZXIub2Zmc2V0KG91dHB1dExlbmd0aCk7CiAgICAgIGlmICghcHJpdmF0ZURpY3REYXRhLmxlbmd0aCkgewogICAgICAgIG91dHB1dExlbmd0aCA9IDA7CiAgICAgIH0KICAgICAgdHJhY2tlcnNbaV0uc2V0RW50cnlMb2NhdGlvbigiUHJpdmF0ZSIsIFtwcml2YXRlRGljdERhdGEubGVuZ3RoLCBvdXRwdXRMZW5ndGhdLCBvdXRwdXQpOwogICAgICBvdXRwdXQuYWRkKHByaXZhdGVEaWN0RGF0YSk7CiAgICAgIGlmIChwcml2YXRlRGljdC5zdWJyc0luZGV4ICYmIHByaXZhdGVEaWN0Lmhhc05hbWUoIlN1YnJzIikpIHsKICAgICAgICBjb25zdCBzdWJycyA9IHRoaXMuY29tcGlsZUluZGV4KHByaXZhdGVEaWN0LnN1YnJzSW5kZXgpOwogICAgICAgIHByaXZhdGVEaWN0VHJhY2tlci5zZXRFbnRyeUxvY2F0aW9uKCJTdWJycyIsIFtwcml2YXRlRGljdERhdGEubGVuZ3RoXSwgb3V0cHV0KTsKICAgICAgICBvdXRwdXQuYWRkKHN1YnJzKTsKICAgICAgfQogICAgfQogIH0KICBjb21waWxlRGljdChkaWN0LCBvZmZzZXRUcmFja2VyKSB7CiAgICBjb25zdCBvdXQgPSBbXTsKICAgIGZvciAoY29uc3Qga2V5IG9mIGRpY3Qub3JkZXIpIHsKICAgICAgaWYgKCEoa2V5IGluIGRpY3QudmFsdWVzKSkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGxldCB2YWx1ZXMgPSBkaWN0LnZhbHVlc1trZXldOwogICAgICBsZXQgdHlwZXMgPSBkaWN0LnR5cGVzW2tleV07CiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0eXBlcykpIHsKICAgICAgICB0eXBlcyA9IFt0eXBlc107CiAgICAgIH0KICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlcykpIHsKICAgICAgICB2YWx1ZXMgPSBbdmFsdWVzXTsKICAgICAgfQogICAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGZvciAobGV0IGogPSAwLCBqaiA9IHR5cGVzLmxlbmd0aDsgaiA8IGpqOyArK2opIHsKICAgICAgICBjb25zdCB0eXBlID0gdHlwZXNbal07CiAgICAgICAgY29uc3QgdmFsdWUgPSB2YWx1ZXNbal07CiAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgICBjYXNlICJudW0iOgogICAgICAgICAgY2FzZSAic2lkIjoKICAgICAgICAgICAgb3V0LnB1c2goLi4udGhpcy5lbmNvZGVOdW1iZXIodmFsdWUpKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJvZmZzZXQiOgogICAgICAgICAgICBjb25zdCBuYW1lID0gZGljdC5rZXlUb05hbWVNYXBba2V5XTsKICAgICAgICAgICAgaWYgKCFvZmZzZXRUcmFja2VyLmlzVHJhY2tpbmcobmFtZSkpIHsKICAgICAgICAgICAgICBvZmZzZXRUcmFja2VyLnRyYWNrKG5hbWUsIG91dC5sZW5ndGgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG91dC5wdXNoKDB4MWQsIDAsIDAsIDAsIDApOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgImFycmF5IjoKICAgICAgICAgIGNhc2UgImRlbHRhIjoKICAgICAgICAgICAgb3V0LnB1c2goLi4udGhpcy5lbmNvZGVOdW1iZXIodmFsdWUpKTsKICAgICAgICAgICAgZm9yIChsZXQgayA9IDEsIGtrID0gdmFsdWVzLmxlbmd0aDsgayA8IGtrOyArK2spIHsKICAgICAgICAgICAgICBvdXQucHVzaCguLi50aGlzLmVuY29kZU51bWJlcih2YWx1ZXNba10pKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcihgVW5rbm93biBkYXRhIHR5cGUgb2YgJHt0eXBlfWApOwogICAgICAgIH0KICAgICAgfQogICAgICBvdXQucHVzaCguLi5kaWN0Lm9wY29kZXNba2V5XSk7CiAgICB9CiAgICByZXR1cm4gb3V0OwogIH0KICBjb21waWxlU3RyaW5nSW5kZXgoc3RyaW5ncykgewogICAgY29uc3Qgc3RyaW5nSW5kZXggPSBuZXcgQ0ZGSW5kZXgoKTsKICAgIGZvciAoY29uc3Qgc3RyaW5nIG9mIHN0cmluZ3MpIHsKICAgICAgc3RyaW5nSW5kZXguYWRkKHN0cmluZ1RvQnl0ZXMoc3RyaW5nKSk7CiAgICB9CiAgICByZXR1cm4gdGhpcy5jb21waWxlSW5kZXgoc3RyaW5nSW5kZXgpOwogIH0KICBjb21waWxlQ2hhclN0cmluZ3MoY2hhclN0cmluZ3MpIHsKICAgIGNvbnN0IGNoYXJTdHJpbmdzSW5kZXggPSBuZXcgQ0ZGSW5kZXgoKTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hhclN0cmluZ3MuY291bnQ7IGkrKykgewogICAgICBjb25zdCBnbHlwaCA9IGNoYXJTdHJpbmdzLmdldChpKTsKICAgICAgaWYgKGdseXBoLmxlbmd0aCA9PT0gMCkgewogICAgICAgIGNoYXJTdHJpbmdzSW5kZXguYWRkKG5ldyBVaW50OEFycmF5KFsweDhiLCAweDBlXSkpOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGNoYXJTdHJpbmdzSW5kZXguYWRkKGdseXBoKTsKICAgIH0KICAgIHJldHVybiB0aGlzLmNvbXBpbGVJbmRleChjaGFyU3RyaW5nc0luZGV4KTsKICB9CiAgY29tcGlsZUNoYXJzZXQoY2hhcnNldCwgbnVtR2x5cGhzLCBzdHJpbmdzLCBpc0NJREZvbnQpIHsKICAgIGxldCBvdXQ7CiAgICBjb25zdCBudW1HbHlwaHNMZXNzTm90RGVmID0gbnVtR2x5cGhzIC0gMTsKICAgIGlmIChpc0NJREZvbnQpIHsKICAgICAgb3V0ID0gbmV3IFVpbnQ4QXJyYXkoWzIsIDAsIDAsIG51bUdseXBoc0xlc3NOb3REZWYgPj4gOCAmIDB4ZmYsIG51bUdseXBoc0xlc3NOb3REZWYgJiAweGZmXSk7CiAgICB9IGVsc2UgewogICAgICBjb25zdCBsZW5ndGggPSAxICsgbnVtR2x5cGhzTGVzc05vdERlZiAqIDI7CiAgICAgIG91dCA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7CiAgICAgIG91dFswXSA9IDA7CiAgICAgIGxldCBjaGFyc2V0SW5kZXggPSAwOwogICAgICBjb25zdCBudW1DaGFyc2V0cyA9IGNoYXJzZXQuY2hhcnNldC5sZW5ndGg7CiAgICAgIGxldCB3YXJuZWQgPSBmYWxzZTsKICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBvdXQubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgICBsZXQgc2lkID0gMDsKICAgICAgICBpZiAoY2hhcnNldEluZGV4IDwgbnVtQ2hhcnNldHMpIHsKICAgICAgICAgIGNvbnN0IG5hbWUgPSBjaGFyc2V0LmNoYXJzZXRbY2hhcnNldEluZGV4KytdOwogICAgICAgICAgc2lkID0gc3RyaW5ncy5nZXRTSUQobmFtZSk7CiAgICAgICAgICBpZiAoc2lkID09PSAtMSkgewogICAgICAgICAgICBzaWQgPSAwOwogICAgICAgICAgICBpZiAoIXdhcm5lZCkgewogICAgICAgICAgICAgIHdhcm5lZCA9IHRydWU7CiAgICAgICAgICAgICAgd2FybihgQ291bGRuJ3QgZmluZCAke25hbWV9IGluIENGRiBzdHJpbmdzYCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgb3V0W2ldID0gc2lkID4+IDggJiAweGZmOwogICAgICAgIG91dFtpICsgMV0gPSBzaWQgJiAweGZmOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdGhpcy5jb21waWxlVHlwZWRBcnJheShvdXQpOwogIH0KICBjb21waWxlRW5jb2RpbmcoZW5jb2RpbmcpIHsKICAgIHJldHVybiB0aGlzLmNvbXBpbGVUeXBlZEFycmF5KGVuY29kaW5nLnJhdyk7CiAgfQogIGNvbXBpbGVGRFNlbGVjdChmZFNlbGVjdCkgewogICAgY29uc3QgZm9ybWF0ID0gZmRTZWxlY3QuZm9ybWF0OwogICAgbGV0IG91dCwgaTsKICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgIGNhc2UgMDoKICAgICAgICBvdXQgPSBuZXcgVWludDhBcnJheSgxICsgZmRTZWxlY3QuZmRTZWxlY3QubGVuZ3RoKTsKICAgICAgICBvdXRbMF0gPSBmb3JtYXQ7CiAgICAgICAgZm9yIChpID0gMDsgaSA8IGZkU2VsZWN0LmZkU2VsZWN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBvdXRbaSArIDFdID0gZmRTZWxlY3QuZmRTZWxlY3RbaV07CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDM6CiAgICAgICAgY29uc3Qgc3RhcnQgPSAwOwogICAgICAgIGxldCBsYXN0RkQgPSBmZFNlbGVjdC5mZFNlbGVjdFswXTsKICAgICAgICBjb25zdCByYW5nZXMgPSBbZm9ybWF0LCAwLCAwLCBzdGFydCA+PiA4ICYgMHhmZiwgc3RhcnQgJiAweGZmLCBsYXN0RkRdOwogICAgICAgIGZvciAoaSA9IDE7IGkgPCBmZFNlbGVjdC5mZFNlbGVjdC5sZW5ndGg7IGkrKykgewogICAgICAgICAgY29uc3QgY3VycmVudEZEID0gZmRTZWxlY3QuZmRTZWxlY3RbaV07CiAgICAgICAgICBpZiAoY3VycmVudEZEICE9PSBsYXN0RkQpIHsKICAgICAgICAgICAgcmFuZ2VzLnB1c2goaSA+PiA4ICYgMHhmZiwgaSAmIDB4ZmYsIGN1cnJlbnRGRCk7CiAgICAgICAgICAgIGxhc3RGRCA9IGN1cnJlbnRGRDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3QgbnVtUmFuZ2VzID0gKHJhbmdlcy5sZW5ndGggLSAzKSAvIDM7CiAgICAgICAgcmFuZ2VzWzFdID0gbnVtUmFuZ2VzID4+IDggJiAweGZmOwogICAgICAgIHJhbmdlc1syXSA9IG51bVJhbmdlcyAmIDB4ZmY7CiAgICAgICAgcmFuZ2VzLnB1c2goaSA+PiA4ICYgMHhmZiwgaSAmIDB4ZmYpOwogICAgICAgIG91dCA9IG5ldyBVaW50OEFycmF5KHJhbmdlcyk7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICByZXR1cm4gdGhpcy5jb21waWxlVHlwZWRBcnJheShvdXQpOwogIH0KICBjb21waWxlVHlwZWRBcnJheShkYXRhKSB7CiAgICByZXR1cm4gQXJyYXkuZnJvbShkYXRhKTsKICB9CiAgY29tcGlsZUluZGV4KGluZGV4LCB0cmFja2VycyA9IFtdKSB7CiAgICBjb25zdCBvYmplY3RzID0gaW5kZXgub2JqZWN0czsKICAgIGNvbnN0IGNvdW50ID0gb2JqZWN0cy5sZW5ndGg7CiAgICBpZiAoY291bnQgPT09IDApIHsKICAgICAgcmV0dXJuIFswLCAwXTsKICAgIH0KICAgIGNvbnN0IGRhdGEgPSBbY291bnQgPj4gOCAmIDB4ZmYsIGNvdW50ICYgMHhmZl07CiAgICBsZXQgbGFzdE9mZnNldCA9IDEsCiAgICAgIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICBsYXN0T2Zmc2V0ICs9IG9iamVjdHNbaV0ubGVuZ3RoOwogICAgfQogICAgbGV0IG9mZnNldFNpemU7CiAgICBpZiAobGFzdE9mZnNldCA8IDB4MTAwKSB7CiAgICAgIG9mZnNldFNpemUgPSAxOwogICAgfSBlbHNlIGlmIChsYXN0T2Zmc2V0IDwgMHgxMDAwMCkgewogICAgICBvZmZzZXRTaXplID0gMjsKICAgIH0gZWxzZSBpZiAobGFzdE9mZnNldCA8IDB4MTAwMDAwMCkgewogICAgICBvZmZzZXRTaXplID0gMzsKICAgIH0gZWxzZSB7CiAgICAgIG9mZnNldFNpemUgPSA0OwogICAgfQogICAgZGF0YS5wdXNoKG9mZnNldFNpemUpOwogICAgbGV0IHJlbGF0aXZlT2Zmc2V0ID0gMTsKICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudCArIDE7IGkrKykgewogICAgICBpZiAob2Zmc2V0U2l6ZSA9PT0gMSkgewogICAgICAgIGRhdGEucHVzaChyZWxhdGl2ZU9mZnNldCAmIDB4ZmYpOwogICAgICB9IGVsc2UgaWYgKG9mZnNldFNpemUgPT09IDIpIHsKICAgICAgICBkYXRhLnB1c2gocmVsYXRpdmVPZmZzZXQgPj4gOCAmIDB4ZmYsIHJlbGF0aXZlT2Zmc2V0ICYgMHhmZik7CiAgICAgIH0gZWxzZSBpZiAob2Zmc2V0U2l6ZSA9PT0gMykgewogICAgICAgIGRhdGEucHVzaChyZWxhdGl2ZU9mZnNldCA+PiAxNiAmIDB4ZmYsIHJlbGF0aXZlT2Zmc2V0ID4+IDggJiAweGZmLCByZWxhdGl2ZU9mZnNldCAmIDB4ZmYpOwogICAgICB9IGVsc2UgewogICAgICAgIGRhdGEucHVzaChyZWxhdGl2ZU9mZnNldCA+Pj4gMjQgJiAweGZmLCByZWxhdGl2ZU9mZnNldCA+PiAxNiAmIDB4ZmYsIHJlbGF0aXZlT2Zmc2V0ID4+IDggJiAweGZmLCByZWxhdGl2ZU9mZnNldCAmIDB4ZmYpOwogICAgICB9CiAgICAgIGlmIChvYmplY3RzW2ldKSB7CiAgICAgICAgcmVsYXRpdmVPZmZzZXQgKz0gb2JqZWN0c1tpXS5sZW5ndGg7CiAgICAgIH0KICAgIH0KICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIGlmICh0cmFja2Vyc1tpXSkgewogICAgICAgIHRyYWNrZXJzW2ldLm9mZnNldChkYXRhLmxlbmd0aCk7CiAgICAgIH0KICAgICAgZGF0YS5wdXNoKC4uLm9iamVjdHNbaV0pOwogICAgfQogICAgcmV0dXJuIGRhdGE7CiAgfQp9Cgo7Ly8gLi9zcmMvY29yZS9nbHlwaGxpc3QuanMKCmNvbnN0IGdldEdseXBoc1VuaWNvZGUgPSBnZXRMb29rdXBUYWJsZUZhY3RvcnkoZnVuY3Rpb24gKHQpIHsKICB0LkEgPSAweDAwNDE7CiAgdC5BRSA9IDB4MDBjNjsKICB0LkFFYWN1dGUgPSAweDAxZmM7CiAgdC5BRW1hY3JvbiA9IDB4MDFlMjsKICB0LkFFc21hbGwgPSAweGY3ZTY7CiAgdC5BYWN1dGUgPSAweDAwYzE7CiAgdC5BYWN1dGVzbWFsbCA9IDB4ZjdlMTsKICB0LkFicmV2ZSA9IDB4MDEwMjsKICB0LkFicmV2ZWFjdXRlID0gMHgxZWFlOwogIHQuQWJyZXZlY3lyaWxsaWMgPSAweDA0ZDA7CiAgdC5BYnJldmVkb3RiZWxvdyA9IDB4MWViNjsKICB0LkFicmV2ZWdyYXZlID0gMHgxZWIwOwogIHQuQWJyZXZlaG9va2Fib3ZlID0gMHgxZWIyOwogIHQuQWJyZXZldGlsZGUgPSAweDFlYjQ7CiAgdC5BY2Fyb24gPSAweDAxY2Q7CiAgdC5BY2lyY2xlID0gMHgyNGI2OwogIHQuQWNpcmN1bWZsZXggPSAweDAwYzI7CiAgdC5BY2lyY3VtZmxleGFjdXRlID0gMHgxZWE0OwogIHQuQWNpcmN1bWZsZXhkb3RiZWxvdyA9IDB4MWVhYzsKICB0LkFjaXJjdW1mbGV4Z3JhdmUgPSAweDFlYTY7CiAgdC5BY2lyY3VtZmxleGhvb2thYm92ZSA9IDB4MWVhODsKICB0LkFjaXJjdW1mbGV4c21hbGwgPSAweGY3ZTI7CiAgdC5BY2lyY3VtZmxleHRpbGRlID0gMHgxZWFhOwogIHQuQWN1dGUgPSAweGY2Yzk7CiAgdC5BY3V0ZXNtYWxsID0gMHhmN2I0OwogIHQuQWN5cmlsbGljID0gMHgwNDEwOwogIHQuQWRibGdyYXZlID0gMHgwMjAwOwogIHQuQWRpZXJlc2lzID0gMHgwMGM0OwogIHQuQWRpZXJlc2lzY3lyaWxsaWMgPSAweDA0ZDI7CiAgdC5BZGllcmVzaXNtYWNyb24gPSAweDAxZGU7CiAgdC5BZGllcmVzaXNzbWFsbCA9IDB4ZjdlNDsKICB0LkFkb3RiZWxvdyA9IDB4MWVhMDsKICB0LkFkb3RtYWNyb24gPSAweDAxZTA7CiAgdC5BZ3JhdmUgPSAweDAwYzA7CiAgdC5BZ3JhdmVzbWFsbCA9IDB4ZjdlMDsKICB0LkFob29rYWJvdmUgPSAweDFlYTI7CiAgdC5BaWVjeXJpbGxpYyA9IDB4MDRkNDsKICB0LkFpbnZlcnRlZGJyZXZlID0gMHgwMjAyOwogIHQuQWxwaGEgPSAweDAzOTE7CiAgdC5BbHBoYXRvbm9zID0gMHgwMzg2OwogIHQuQW1hY3JvbiA9IDB4MDEwMDsKICB0LkFtb25vc3BhY2UgPSAweGZmMjE7CiAgdC5Bb2dvbmVrID0gMHgwMTA0OwogIHQuQXJpbmcgPSAweDAwYzU7CiAgdC5BcmluZ2FjdXRlID0gMHgwMWZhOwogIHQuQXJpbmdiZWxvdyA9IDB4MWUwMDsKICB0LkFyaW5nc21hbGwgPSAweGY3ZTU7CiAgdC5Bc21hbGwgPSAweGY3NjE7CiAgdC5BdGlsZGUgPSAweDAwYzM7CiAgdC5BdGlsZGVzbWFsbCA9IDB4ZjdlMzsKICB0LkF5YmFybWVuaWFuID0gMHgwNTMxOwogIHQuQiA9IDB4MDA0MjsKICB0LkJjaXJjbGUgPSAweDI0Yjc7CiAgdC5CZG90YWNjZW50ID0gMHgxZTAyOwogIHQuQmRvdGJlbG93ID0gMHgxZTA0OwogIHQuQmVjeXJpbGxpYyA9IDB4MDQxMTsKICB0LkJlbmFybWVuaWFuID0gMHgwNTMyOwogIHQuQmV0YSA9IDB4MDM5MjsKICB0LkJob29rID0gMHgwMTgxOwogIHQuQmxpbmViZWxvdyA9IDB4MWUwNjsKICB0LkJtb25vc3BhY2UgPSAweGZmMjI7CiAgdC5CcmV2ZXNtYWxsID0gMHhmNmY0OwogIHQuQnNtYWxsID0gMHhmNzYyOwogIHQuQnRvcGJhciA9IDB4MDE4MjsKICB0LkMgPSAweDAwNDM7CiAgdC5DYWFybWVuaWFuID0gMHgwNTNlOwogIHQuQ2FjdXRlID0gMHgwMTA2OwogIHQuQ2Fyb24gPSAweGY2Y2E7CiAgdC5DYXJvbnNtYWxsID0gMHhmNmY1OwogIHQuQ2Nhcm9uID0gMHgwMTBjOwogIHQuQ2NlZGlsbGEgPSAweDAwYzc7CiAgdC5DY2VkaWxsYWFjdXRlID0gMHgxZTA4OwogIHQuQ2NlZGlsbGFzbWFsbCA9IDB4ZjdlNzsKICB0LkNjaXJjbGUgPSAweDI0Yjg7CiAgdC5DY2lyY3VtZmxleCA9IDB4MDEwODsKICB0LkNkb3QgPSAweDAxMGE7CiAgdC5DZG90YWNjZW50ID0gMHgwMTBhOwogIHQuQ2VkaWxsYXNtYWxsID0gMHhmN2I4OwogIHQuQ2hhYXJtZW5pYW4gPSAweDA1NDk7CiAgdC5DaGVhYmtoYXNpYW5jeXJpbGxpYyA9IDB4MDRiYzsKICB0LkNoZWN5cmlsbGljID0gMHgwNDI3OwogIHQuQ2hlZGVzY2VuZGVyYWJraGFzaWFuY3lyaWxsaWMgPSAweDA0YmU7CiAgdC5DaGVkZXNjZW5kZXJjeXJpbGxpYyA9IDB4MDRiNjsKICB0LkNoZWRpZXJlc2lzY3lyaWxsaWMgPSAweDA0ZjQ7CiAgdC5DaGVoYXJtZW5pYW4gPSAweDA1NDM7CiAgdC5DaGVraGFrYXNzaWFuY3lyaWxsaWMgPSAweDA0Y2I7CiAgdC5DaGV2ZXJ0aWNhbHN0cm9rZWN5cmlsbGljID0gMHgwNGI4OwogIHQuQ2hpID0gMHgwM2E3OwogIHQuQ2hvb2sgPSAweDAxODc7CiAgdC5DaXJjdW1mbGV4c21hbGwgPSAweGY2ZjY7CiAgdC5DbW9ub3NwYWNlID0gMHhmZjIzOwogIHQuQ29hcm1lbmlhbiA9IDB4MDU1MTsKICB0LkNzbWFsbCA9IDB4Zjc2MzsKICB0LkQgPSAweDAwNDQ7CiAgdC5EWiA9IDB4MDFmMTsKICB0LkRaY2Fyb24gPSAweDAxYzQ7CiAgdC5EYWFybWVuaWFuID0gMHgwNTM0OwogIHQuRGFmcmljYW4gPSAweDAxODk7CiAgdC5EY2Fyb24gPSAweDAxMGU7CiAgdC5EY2VkaWxsYSA9IDB4MWUxMDsKICB0LkRjaXJjbGUgPSAweDI0Yjk7CiAgdC5EY2lyY3VtZmxleGJlbG93ID0gMHgxZTEyOwogIHQuRGNyb2F0ID0gMHgwMTEwOwogIHQuRGRvdGFjY2VudCA9IDB4MWUwYTsKICB0LkRkb3RiZWxvdyA9IDB4MWUwYzsKICB0LkRlY3lyaWxsaWMgPSAweDA0MTQ7CiAgdC5EZWljb3B0aWMgPSAweDAzZWU7CiAgdC5EZWx0YSA9IDB4MjIwNjsKICB0LkRlbHRhZ3JlZWsgPSAweDAzOTQ7CiAgdC5EaG9vayA9IDB4MDE4YTsKICB0LkRpZXJlc2lzID0gMHhmNmNiOwogIHQuRGllcmVzaXNBY3V0ZSA9IDB4ZjZjYzsKICB0LkRpZXJlc2lzR3JhdmUgPSAweGY2Y2Q7CiAgdC5EaWVyZXNpc3NtYWxsID0gMHhmN2E4OwogIHQuRGlnYW1tYWdyZWVrID0gMHgwM2RjOwogIHQuRGplY3lyaWxsaWMgPSAweDA0MDI7CiAgdC5EbGluZWJlbG93ID0gMHgxZTBlOwogIHQuRG1vbm9zcGFjZSA9IDB4ZmYyNDsKICB0LkRvdGFjY2VudHNtYWxsID0gMHhmNmY3OwogIHQuRHNsYXNoID0gMHgwMTEwOwogIHQuRHNtYWxsID0gMHhmNzY0OwogIHQuRHRvcGJhciA9IDB4MDE4YjsKICB0LkR6ID0gMHgwMWYyOwogIHQuRHpjYXJvbiA9IDB4MDFjNTsKICB0LkR6ZWFia2hhc2lhbmN5cmlsbGljID0gMHgwNGUwOwogIHQuRHplY3lyaWxsaWMgPSAweDA0MDU7CiAgdC5EemhlY3lyaWxsaWMgPSAweDA0MGY7CiAgdC5FID0gMHgwMDQ1OwogIHQuRWFjdXRlID0gMHgwMGM5OwogIHQuRWFjdXRlc21hbGwgPSAweGY3ZTk7CiAgdC5FYnJldmUgPSAweDAxMTQ7CiAgdC5FY2Fyb24gPSAweDAxMWE7CiAgdC5FY2VkaWxsYWJyZXZlID0gMHgxZTFjOwogIHQuRWNoYXJtZW5pYW4gPSAweDA1MzU7CiAgdC5FY2lyY2xlID0gMHgyNGJhOwogIHQuRWNpcmN1bWZsZXggPSAweDAwY2E7CiAgdC5FY2lyY3VtZmxleGFjdXRlID0gMHgxZWJlOwogIHQuRWNpcmN1bWZsZXhiZWxvdyA9IDB4MWUxODsKICB0LkVjaXJjdW1mbGV4ZG90YmVsb3cgPSAweDFlYzY7CiAgdC5FY2lyY3VtZmxleGdyYXZlID0gMHgxZWMwOwogIHQuRWNpcmN1bWZsZXhob29rYWJvdmUgPSAweDFlYzI7CiAgdC5FY2lyY3VtZmxleHNtYWxsID0gMHhmN2VhOwogIHQuRWNpcmN1bWZsZXh0aWxkZSA9IDB4MWVjNDsKICB0LkVjeXJpbGxpYyA9IDB4MDQwNDsKICB0LkVkYmxncmF2ZSA9IDB4MDIwNDsKICB0LkVkaWVyZXNpcyA9IDB4MDBjYjsKICB0LkVkaWVyZXNpc3NtYWxsID0gMHhmN2ViOwogIHQuRWRvdCA9IDB4MDExNjsKICB0LkVkb3RhY2NlbnQgPSAweDAxMTY7CiAgdC5FZG90YmVsb3cgPSAweDFlYjg7CiAgdC5FZmN5cmlsbGljID0gMHgwNDI0OwogIHQuRWdyYXZlID0gMHgwMGM4OwogIHQuRWdyYXZlc21hbGwgPSAweGY3ZTg7CiAgdC5FaGFybWVuaWFuID0gMHgwNTM3OwogIHQuRWhvb2thYm92ZSA9IDB4MWViYTsKICB0LkVpZ2h0cm9tYW4gPSAweDIxNjc7CiAgdC5FaW52ZXJ0ZWRicmV2ZSA9IDB4MDIwNjsKICB0LkVpb3RpZmllZGN5cmlsbGljID0gMHgwNDY0OwogIHQuRWxjeXJpbGxpYyA9IDB4MDQxYjsKICB0LkVsZXZlbnJvbWFuID0gMHgyMTZhOwogIHQuRW1hY3JvbiA9IDB4MDExMjsKICB0LkVtYWNyb25hY3V0ZSA9IDB4MWUxNjsKICB0LkVtYWNyb25ncmF2ZSA9IDB4MWUxNDsKICB0LkVtY3lyaWxsaWMgPSAweDA0MWM7CiAgdC5FbW9ub3NwYWNlID0gMHhmZjI1OwogIHQuRW5jeXJpbGxpYyA9IDB4MDQxZDsKICB0LkVuZGVzY2VuZGVyY3lyaWxsaWMgPSAweDA0YTI7CiAgdC5FbmcgPSAweDAxNGE7CiAgdC5FbmdoZWN5cmlsbGljID0gMHgwNGE0OwogIHQuRW5ob29rY3lyaWxsaWMgPSAweDA0Yzc7CiAgdC5Fb2dvbmVrID0gMHgwMTE4OwogIHQuRW9wZW4gPSAweDAxOTA7CiAgdC5FcHNpbG9uID0gMHgwMzk1OwogIHQuRXBzaWxvbnRvbm9zID0gMHgwMzg4OwogIHQuRXJjeXJpbGxpYyA9IDB4MDQyMDsKICB0LkVyZXZlcnNlZCA9IDB4MDE4ZTsKICB0LkVyZXZlcnNlZGN5cmlsbGljID0gMHgwNDJkOwogIHQuRXNjeXJpbGxpYyA9IDB4MDQyMTsKICB0LkVzZGVzY2VuZGVyY3lyaWxsaWMgPSAweDA0YWE7CiAgdC5Fc2ggPSAweDAxYTk7CiAgdC5Fc21hbGwgPSAweGY3NjU7CiAgdC5FdGEgPSAweDAzOTc7CiAgdC5FdGFybWVuaWFuID0gMHgwNTM4OwogIHQuRXRhdG9ub3MgPSAweDAzODk7CiAgdC5FdGggPSAweDAwZDA7CiAgdC5FdGhzbWFsbCA9IDB4ZjdmMDsKICB0LkV0aWxkZSA9IDB4MWViYzsKICB0LkV0aWxkZWJlbG93ID0gMHgxZTFhOwogIHQuRXVybyA9IDB4MjBhYzsKICB0LkV6aCA9IDB4MDFiNzsKICB0LkV6aGNhcm9uID0gMHgwMWVlOwogIHQuRXpocmV2ZXJzZWQgPSAweDAxYjg7CiAgdC5GID0gMHgwMDQ2OwogIHQuRmNpcmNsZSA9IDB4MjRiYjsKICB0LkZkb3RhY2NlbnQgPSAweDFlMWU7CiAgdC5GZWhhcm1lbmlhbiA9IDB4MDU1NjsKICB0LkZlaWNvcHRpYyA9IDB4MDNlNDsKICB0LkZob29rID0gMHgwMTkxOwogIHQuRml0YWN5cmlsbGljID0gMHgwNDcyOwogIHQuRml2ZXJvbWFuID0gMHgyMTY0OwogIHQuRm1vbm9zcGFjZSA9IDB4ZmYyNjsKICB0LkZvdXJyb21hbiA9IDB4MjE2MzsKICB0LkZzbWFsbCA9IDB4Zjc2NjsKICB0LkcgPSAweDAwNDc7CiAgdC5HQnNxdWFyZSA9IDB4MzM4NzsKICB0LkdhY3V0ZSA9IDB4MDFmNDsKICB0LkdhbW1hID0gMHgwMzkzOwogIHQuR2FtbWFhZnJpY2FuID0gMHgwMTk0OwogIHQuR2FuZ2lhY29wdGljID0gMHgwM2VhOwogIHQuR2JyZXZlID0gMHgwMTFlOwogIHQuR2Nhcm9uID0gMHgwMWU2OwogIHQuR2NlZGlsbGEgPSAweDAxMjI7CiAgdC5HY2lyY2xlID0gMHgyNGJjOwogIHQuR2NpcmN1bWZsZXggPSAweDAxMWM7CiAgdC5HY29tbWFhY2NlbnQgPSAweDAxMjI7CiAgdC5HZG90ID0gMHgwMTIwOwogIHQuR2RvdGFjY2VudCA9IDB4MDEyMDsKICB0LkdlY3lyaWxsaWMgPSAweDA0MTM7CiAgdC5HaGFkYXJtZW5pYW4gPSAweDA1NDI7CiAgdC5HaGVtaWRkbGVob29rY3lyaWxsaWMgPSAweDA0OTQ7CiAgdC5HaGVzdHJva2VjeXJpbGxpYyA9IDB4MDQ5MjsKICB0LkdoZXVwdHVybmN5cmlsbGljID0gMHgwNDkwOwogIHQuR2hvb2sgPSAweDAxOTM7CiAgdC5HaW1hcm1lbmlhbiA9IDB4MDUzMzsKICB0LkdqZWN5cmlsbGljID0gMHgwNDAzOwogIHQuR21hY3JvbiA9IDB4MWUyMDsKICB0Lkdtb25vc3BhY2UgPSAweGZmMjc7CiAgdC5HcmF2ZSA9IDB4ZjZjZTsKICB0LkdyYXZlc21hbGwgPSAweGY3NjA7CiAgdC5Hc21hbGwgPSAweGY3Njc7CiAgdC5Hc21hbGxob29rID0gMHgwMjliOwogIHQuR3N0cm9rZSA9IDB4MDFlNDsKICB0LkggPSAweDAwNDg7CiAgdC5IMTg1MzMgPSAweDI1Y2Y7CiAgdC5IMTg1NDMgPSAweDI1YWE7CiAgdC5IMTg1NTEgPSAweDI1YWI7CiAgdC5IMjIwNzMgPSAweDI1YTE7CiAgdC5IUHNxdWFyZSA9IDB4MzNjYjsKICB0LkhhYWJraGFzaWFuY3lyaWxsaWMgPSAweDA0YTg7CiAgdC5IYWRlc2NlbmRlcmN5cmlsbGljID0gMHgwNGIyOwogIHQuSGFyZHNpZ25jeXJpbGxpYyA9IDB4MDQyYTsKICB0LkhiYXIgPSAweDAxMjY7CiAgdC5IYnJldmViZWxvdyA9IDB4MWUyYTsKICB0LkhjZWRpbGxhID0gMHgxZTI4OwogIHQuSGNpcmNsZSA9IDB4MjRiZDsKICB0LkhjaXJjdW1mbGV4ID0gMHgwMTI0OwogIHQuSGRpZXJlc2lzID0gMHgxZTI2OwogIHQuSGRvdGFjY2VudCA9IDB4MWUyMjsKICB0Lkhkb3RiZWxvdyA9IDB4MWUyNDsKICB0Lkhtb25vc3BhY2UgPSAweGZmMjg7CiAgdC5Ib2FybWVuaWFuID0gMHgwNTQwOwogIHQuSG9yaWNvcHRpYyA9IDB4MDNlODsKICB0LkhzbWFsbCA9IDB4Zjc2ODsKICB0Lkh1bmdhcnVtbGF1dCA9IDB4ZjZjZjsKICB0Lkh1bmdhcnVtbGF1dHNtYWxsID0gMHhmNmY4OwogIHQuSHpzcXVhcmUgPSAweDMzOTA7CiAgdC5JID0gMHgwMDQ5OwogIHQuSUFjeXJpbGxpYyA9IDB4MDQyZjsKICB0LklKID0gMHgwMTMyOwogIHQuSVVjeXJpbGxpYyA9IDB4MDQyZTsKICB0LklhY3V0ZSA9IDB4MDBjZDsKICB0LklhY3V0ZXNtYWxsID0gMHhmN2VkOwogIHQuSWJyZXZlID0gMHgwMTJjOwogIHQuSWNhcm9uID0gMHgwMWNmOwogIHQuSWNpcmNsZSA9IDB4MjRiZTsKICB0LkljaXJjdW1mbGV4ID0gMHgwMGNlOwogIHQuSWNpcmN1bWZsZXhzbWFsbCA9IDB4ZjdlZTsKICB0LkljeXJpbGxpYyA9IDB4MDQwNjsKICB0LklkYmxncmF2ZSA9IDB4MDIwODsKICB0LklkaWVyZXNpcyA9IDB4MDBjZjsKICB0LklkaWVyZXNpc2FjdXRlID0gMHgxZTJlOwogIHQuSWRpZXJlc2lzY3lyaWxsaWMgPSAweDA0ZTQ7CiAgdC5JZGllcmVzaXNzbWFsbCA9IDB4ZjdlZjsKICB0Lklkb3QgPSAweDAxMzA7CiAgdC5JZG90YWNjZW50ID0gMHgwMTMwOwogIHQuSWRvdGJlbG93ID0gMHgxZWNhOwogIHQuSWVicmV2ZWN5cmlsbGljID0gMHgwNGQ2OwogIHQuSWVjeXJpbGxpYyA9IDB4MDQxNTsKICB0LklmcmFrdHVyID0gMHgyMTExOwogIHQuSWdyYXZlID0gMHgwMGNjOwogIHQuSWdyYXZlc21hbGwgPSAweGY3ZWM7CiAgdC5JaG9va2Fib3ZlID0gMHgxZWM4OwogIHQuSWljeXJpbGxpYyA9IDB4MDQxODsKICB0LklpbnZlcnRlZGJyZXZlID0gMHgwMjBhOwogIHQuSWlzaG9ydGN5cmlsbGljID0gMHgwNDE5OwogIHQuSW1hY3JvbiA9IDB4MDEyYTsKICB0LkltYWNyb25jeXJpbGxpYyA9IDB4MDRlMjsKICB0Lkltb25vc3BhY2UgPSAweGZmMjk7CiAgdC5Jbmlhcm1lbmlhbiA9IDB4MDUzYjsKICB0LklvY3lyaWxsaWMgPSAweDA0MDE7CiAgdC5Jb2dvbmVrID0gMHgwMTJlOwogIHQuSW90YSA9IDB4MDM5OTsKICB0LklvdGFhZnJpY2FuID0gMHgwMTk2OwogIHQuSW90YWRpZXJlc2lzID0gMHgwM2FhOwogIHQuSW90YXRvbm9zID0gMHgwMzhhOwogIHQuSXNtYWxsID0gMHhmNzY5OwogIHQuSXN0cm9rZSA9IDB4MDE5NzsKICB0Lkl0aWxkZSA9IDB4MDEyODsKICB0Lkl0aWxkZWJlbG93ID0gMHgxZTJjOwogIHQuSXpoaXRzYWN5cmlsbGljID0gMHgwNDc0OwogIHQuSXpoaXRzYWRibGdyYXZlY3lyaWxsaWMgPSAweDA0NzY7CiAgdC5KID0gMHgwMDRhOwogIHQuSmFhcm1lbmlhbiA9IDB4MDU0MTsKICB0LkpjaXJjbGUgPSAweDI0YmY7CiAgdC5KY2lyY3VtZmxleCA9IDB4MDEzNDsKICB0LkplY3lyaWxsaWMgPSAweDA0MDg7CiAgdC5KaGVoYXJtZW5pYW4gPSAweDA1NGI7CiAgdC5KbW9ub3NwYWNlID0gMHhmZjJhOwogIHQuSnNtYWxsID0gMHhmNzZhOwogIHQuSyA9IDB4MDA0YjsKICB0LktCc3F1YXJlID0gMHgzMzg1OwogIHQuS0tzcXVhcmUgPSAweDMzY2Q7CiAgdC5LYWJhc2hraXJjeXJpbGxpYyA9IDB4MDRhMDsKICB0LkthY3V0ZSA9IDB4MWUzMDsKICB0LkthY3lyaWxsaWMgPSAweDA0MWE7CiAgdC5LYWRlc2NlbmRlcmN5cmlsbGljID0gMHgwNDlhOwogIHQuS2Fob29rY3lyaWxsaWMgPSAweDA0YzM7CiAgdC5LYXBwYSA9IDB4MDM5YTsKICB0Lkthc3Ryb2tlY3lyaWxsaWMgPSAweDA0OWU7CiAgdC5LYXZlcnRpY2Fsc3Ryb2tlY3lyaWxsaWMgPSAweDA0OWM7CiAgdC5LY2Fyb24gPSAweDAxZTg7CiAgdC5LY2VkaWxsYSA9IDB4MDEzNjsKICB0LktjaXJjbGUgPSAweDI0YzA7CiAgdC5LY29tbWFhY2NlbnQgPSAweDAxMzY7CiAgdC5LZG90YmVsb3cgPSAweDFlMzI7CiAgdC5LZWhhcm1lbmlhbiA9IDB4MDU1NDsKICB0LktlbmFybWVuaWFuID0gMHgwNTNmOwogIHQuS2hhY3lyaWxsaWMgPSAweDA0MjU7CiAgdC5LaGVpY29wdGljID0gMHgwM2U2OwogIHQuS2hvb2sgPSAweDAxOTg7CiAgdC5LamVjeXJpbGxpYyA9IDB4MDQwYzsKICB0LktsaW5lYmVsb3cgPSAweDFlMzQ7CiAgdC5LbW9ub3NwYWNlID0gMHhmZjJiOwogIHQuS29wcGFjeXJpbGxpYyA9IDB4MDQ4MDsKICB0LktvcHBhZ3JlZWsgPSAweDAzZGU7CiAgdC5Lc2ljeXJpbGxpYyA9IDB4MDQ2ZTsKICB0LktzbWFsbCA9IDB4Zjc2YjsKICB0LkwgPSAweDAwNGM7CiAgdC5MSiA9IDB4MDFjNzsKICB0LkxMID0gMHhmNmJmOwogIHQuTGFjdXRlID0gMHgwMTM5OwogIHQuTGFtYmRhID0gMHgwMzliOwogIHQuTGNhcm9uID0gMHgwMTNkOwogIHQuTGNlZGlsbGEgPSAweDAxM2I7CiAgdC5MY2lyY2xlID0gMHgyNGMxOwogIHQuTGNpcmN1bWZsZXhiZWxvdyA9IDB4MWUzYzsKICB0Lkxjb21tYWFjY2VudCA9IDB4MDEzYjsKICB0Lkxkb3QgPSAweDAxM2Y7CiAgdC5MZG90YWNjZW50ID0gMHgwMTNmOwogIHQuTGRvdGJlbG93ID0gMHgxZTM2OwogIHQuTGRvdGJlbG93bWFjcm9uID0gMHgxZTM4OwogIHQuTGl3bmFybWVuaWFuID0gMHgwNTNjOwogIHQuTGogPSAweDAxYzg7CiAgdC5MamVjeXJpbGxpYyA9IDB4MDQwOTsKICB0LkxsaW5lYmVsb3cgPSAweDFlM2E7CiAgdC5MbW9ub3NwYWNlID0gMHhmZjJjOwogIHQuTHNsYXNoID0gMHgwMTQxOwogIHQuTHNsYXNoc21hbGwgPSAweGY2Zjk7CiAgdC5Mc21hbGwgPSAweGY3NmM7CiAgdC5NID0gMHgwMDRkOwogIHQuTUJzcXVhcmUgPSAweDMzODY7CiAgdC5NYWNyb24gPSAweGY2ZDA7CiAgdC5NYWNyb25zbWFsbCA9IDB4ZjdhZjsKICB0Lk1hY3V0ZSA9IDB4MWUzZTsKICB0Lk1jaXJjbGUgPSAweDI0YzI7CiAgdC5NZG90YWNjZW50ID0gMHgxZTQwOwogIHQuTWRvdGJlbG93ID0gMHgxZTQyOwogIHQuTWVuYXJtZW5pYW4gPSAweDA1NDQ7CiAgdC5NbW9ub3NwYWNlID0gMHhmZjJkOwogIHQuTXNtYWxsID0gMHhmNzZkOwogIHQuTXR1cm5lZCA9IDB4MDE5YzsKICB0Lk11ID0gMHgwMzljOwogIHQuTiA9IDB4MDA0ZTsKICB0Lk5KID0gMHgwMWNhOwogIHQuTmFjdXRlID0gMHgwMTQzOwogIHQuTmNhcm9uID0gMHgwMTQ3OwogIHQuTmNlZGlsbGEgPSAweDAxNDU7CiAgdC5OY2lyY2xlID0gMHgyNGMzOwogIHQuTmNpcmN1bWZsZXhiZWxvdyA9IDB4MWU0YTsKICB0Lk5jb21tYWFjY2VudCA9IDB4MDE0NTsKICB0Lk5kb3RhY2NlbnQgPSAweDFlNDQ7CiAgdC5OZG90YmVsb3cgPSAweDFlNDY7CiAgdC5OaG9va2xlZnQgPSAweDAxOWQ7CiAgdC5OaW5lcm9tYW4gPSAweDIxNjg7CiAgdC5OaiA9IDB4MDFjYjsKICB0Lk5qZWN5cmlsbGljID0gMHgwNDBhOwogIHQuTmxpbmViZWxvdyA9IDB4MWU0ODsKICB0Lk5tb25vc3BhY2UgPSAweGZmMmU7CiAgdC5Ob3dhcm1lbmlhbiA9IDB4MDU0NjsKICB0Lk5zbWFsbCA9IDB4Zjc2ZTsKICB0Lk50aWxkZSA9IDB4MDBkMTsKICB0Lk50aWxkZXNtYWxsID0gMHhmN2YxOwogIHQuTnUgPSAweDAzOWQ7CiAgdC5PID0gMHgwMDRmOwogIHQuT0UgPSAweDAxNTI7CiAgdC5PRXNtYWxsID0gMHhmNmZhOwogIHQuT2FjdXRlID0gMHgwMGQzOwogIHQuT2FjdXRlc21hbGwgPSAweGY3ZjM7CiAgdC5PYmFycmVkY3lyaWxsaWMgPSAweDA0ZTg7CiAgdC5PYmFycmVkZGllcmVzaXNjeXJpbGxpYyA9IDB4MDRlYTsKICB0Lk9icmV2ZSA9IDB4MDE0ZTsKICB0Lk9jYXJvbiA9IDB4MDFkMTsKICB0Lk9jZW50ZXJlZHRpbGRlID0gMHgwMTlmOwogIHQuT2NpcmNsZSA9IDB4MjRjNDsKICB0Lk9jaXJjdW1mbGV4ID0gMHgwMGQ0OwogIHQuT2NpcmN1bWZsZXhhY3V0ZSA9IDB4MWVkMDsKICB0Lk9jaXJjdW1mbGV4ZG90YmVsb3cgPSAweDFlZDg7CiAgdC5PY2lyY3VtZmxleGdyYXZlID0gMHgxZWQyOwogIHQuT2NpcmN1bWZsZXhob29rYWJvdmUgPSAweDFlZDQ7CiAgdC5PY2lyY3VtZmxleHNtYWxsID0gMHhmN2Y0OwogIHQuT2NpcmN1bWZsZXh0aWxkZSA9IDB4MWVkNjsKICB0Lk9jeXJpbGxpYyA9IDB4MDQxZTsKICB0Lk9kYmxhY3V0ZSA9IDB4MDE1MDsKICB0Lk9kYmxncmF2ZSA9IDB4MDIwYzsKICB0Lk9kaWVyZXNpcyA9IDB4MDBkNjsKICB0Lk9kaWVyZXNpc2N5cmlsbGljID0gMHgwNGU2OwogIHQuT2RpZXJlc2lzc21hbGwgPSAweGY3ZjY7CiAgdC5PZG90YmVsb3cgPSAweDFlY2M7CiAgdC5PZ29uZWtzbWFsbCA9IDB4ZjZmYjsKICB0Lk9ncmF2ZSA9IDB4MDBkMjsKICB0Lk9ncmF2ZXNtYWxsID0gMHhmN2YyOwogIHQuT2hhcm1lbmlhbiA9IDB4MDU1NTsKICB0Lk9obSA9IDB4MjEyNjsKICB0Lk9ob29rYWJvdmUgPSAweDFlY2U7CiAgdC5PaG9ybiA9IDB4MDFhMDsKICB0Lk9ob3JuYWN1dGUgPSAweDFlZGE7CiAgdC5PaG9ybmRvdGJlbG93ID0gMHgxZWUyOwogIHQuT2hvcm5ncmF2ZSA9IDB4MWVkYzsKICB0Lk9ob3JuaG9va2Fib3ZlID0gMHgxZWRlOwogIHQuT2hvcm50aWxkZSA9IDB4MWVlMDsKICB0Lk9odW5nYXJ1bWxhdXQgPSAweDAxNTA7CiAgdC5PaSA9IDB4MDFhMjsKICB0Lk9pbnZlcnRlZGJyZXZlID0gMHgwMjBlOwogIHQuT21hY3JvbiA9IDB4MDE0YzsKICB0Lk9tYWNyb25hY3V0ZSA9IDB4MWU1MjsKICB0Lk9tYWNyb25ncmF2ZSA9IDB4MWU1MDsKICB0Lk9tZWdhID0gMHgyMTI2OwogIHQuT21lZ2FjeXJpbGxpYyA9IDB4MDQ2MDsKICB0Lk9tZWdhZ3JlZWsgPSAweDAzYTk7CiAgdC5PbWVnYXJvdW5kY3lyaWxsaWMgPSAweDA0N2E7CiAgdC5PbWVnYXRpdGxvY3lyaWxsaWMgPSAweDA0N2M7CiAgdC5PbWVnYXRvbm9zID0gMHgwMzhmOwogIHQuT21pY3JvbiA9IDB4MDM5ZjsKICB0Lk9taWNyb250b25vcyA9IDB4MDM4YzsKICB0Lk9tb25vc3BhY2UgPSAweGZmMmY7CiAgdC5PbmVyb21hbiA9IDB4MjE2MDsKICB0Lk9vZ29uZWsgPSAweDAxZWE7CiAgdC5Pb2dvbmVrbWFjcm9uID0gMHgwMWVjOwogIHQuT29wZW4gPSAweDAxODY7CiAgdC5Pc2xhc2ggPSAweDAwZDg7CiAgdC5Pc2xhc2hhY3V0ZSA9IDB4MDFmZTsKICB0Lk9zbGFzaHNtYWxsID0gMHhmN2Y4OwogIHQuT3NtYWxsID0gMHhmNzZmOwogIHQuT3N0cm9rZWFjdXRlID0gMHgwMWZlOwogIHQuT3RjeXJpbGxpYyA9IDB4MDQ3ZTsKICB0Lk90aWxkZSA9IDB4MDBkNTsKICB0Lk90aWxkZWFjdXRlID0gMHgxZTRjOwogIHQuT3RpbGRlZGllcmVzaXMgPSAweDFlNGU7CiAgdC5PdGlsZGVzbWFsbCA9IDB4ZjdmNTsKICB0LlAgPSAweDAwNTA7CiAgdC5QYWN1dGUgPSAweDFlNTQ7CiAgdC5QY2lyY2xlID0gMHgyNGM1OwogIHQuUGRvdGFjY2VudCA9IDB4MWU1NjsKICB0LlBlY3lyaWxsaWMgPSAweDA0MWY7CiAgdC5QZWhhcm1lbmlhbiA9IDB4MDU0YTsKICB0LlBlbWlkZGxlaG9va2N5cmlsbGljID0gMHgwNGE2OwogIHQuUGhpID0gMHgwM2E2OwogIHQuUGhvb2sgPSAweDAxYTQ7CiAgdC5QaSA9IDB4MDNhMDsKICB0LlBpd3Jhcm1lbmlhbiA9IDB4MDU1MzsKICB0LlBtb25vc3BhY2UgPSAweGZmMzA7CiAgdC5Qc2kgPSAweDAzYTg7CiAgdC5Qc2ljeXJpbGxpYyA9IDB4MDQ3MDsKICB0LlBzbWFsbCA9IDB4Zjc3MDsKICB0LlEgPSAweDAwNTE7CiAgdC5RY2lyY2xlID0gMHgyNGM2OwogIHQuUW1vbm9zcGFjZSA9IDB4ZmYzMTsKICB0LlFzbWFsbCA9IDB4Zjc3MTsKICB0LlIgPSAweDAwNTI7CiAgdC5SYWFybWVuaWFuID0gMHgwNTRjOwogIHQuUmFjdXRlID0gMHgwMTU0OwogIHQuUmNhcm9uID0gMHgwMTU4OwogIHQuUmNlZGlsbGEgPSAweDAxNTY7CiAgdC5SY2lyY2xlID0gMHgyNGM3OwogIHQuUmNvbW1hYWNjZW50ID0gMHgwMTU2OwogIHQuUmRibGdyYXZlID0gMHgwMjEwOwogIHQuUmRvdGFjY2VudCA9IDB4MWU1ODsKICB0LlJkb3RiZWxvdyA9IDB4MWU1YTsKICB0LlJkb3RiZWxvd21hY3JvbiA9IDB4MWU1YzsKICB0LlJlaGFybWVuaWFuID0gMHgwNTUwOwogIHQuUmZyYWt0dXIgPSAweDIxMWM7CiAgdC5SaG8gPSAweDAzYTE7CiAgdC5SaW5nc21hbGwgPSAweGY2ZmM7CiAgdC5SaW52ZXJ0ZWRicmV2ZSA9IDB4MDIxMjsKICB0LlJsaW5lYmVsb3cgPSAweDFlNWU7CiAgdC5SbW9ub3NwYWNlID0gMHhmZjMyOwogIHQuUnNtYWxsID0gMHhmNzcyOwogIHQuUnNtYWxsaW52ZXJ0ZWQgPSAweDAyODE7CiAgdC5Sc21hbGxpbnZlcnRlZHN1cGVyaW9yID0gMHgwMmI2OwogIHQuUyA9IDB4MDA1MzsKICB0LlNGMDEwMDAwID0gMHgyNTBjOwogIHQuU0YwMjAwMDAgPSAweDI1MTQ7CiAgdC5TRjAzMDAwMCA9IDB4MjUxMDsKICB0LlNGMDQwMDAwID0gMHgyNTE4OwogIHQuU0YwNTAwMDAgPSAweDI1M2M7CiAgdC5TRjA2MDAwMCA9IDB4MjUyYzsKICB0LlNGMDcwMDAwID0gMHgyNTM0OwogIHQuU0YwODAwMDAgPSAweDI1MWM7CiAgdC5TRjA5MDAwMCA9IDB4MjUyNDsKICB0LlNGMTAwMDAwID0gMHgyNTAwOwogIHQuU0YxMTAwMDAgPSAweDI1MDI7CiAgdC5TRjE5MDAwMCA9IDB4MjU2MTsKICB0LlNGMjAwMDAwID0gMHgyNTYyOwogIHQuU0YyMTAwMDAgPSAweDI1NTY7CiAgdC5TRjIyMDAwMCA9IDB4MjU1NTsKICB0LlNGMjMwMDAwID0gMHgyNTYzOwogIHQuU0YyNDAwMDAgPSAweDI1NTE7CiAgdC5TRjI1MDAwMCA9IDB4MjU1NzsKICB0LlNGMjYwMDAwID0gMHgyNTVkOwogIHQuU0YyNzAwMDAgPSAweDI1NWM7CiAgdC5TRjI4MDAwMCA9IDB4MjU1YjsKICB0LlNGMzYwMDAwID0gMHgyNTVlOwogIHQuU0YzNzAwMDAgPSAweDI1NWY7CiAgdC5TRjM4MDAwMCA9IDB4MjU1YTsKICB0LlNGMzkwMDAwID0gMHgyNTU0OwogIHQuU0Y0MDAwMDAgPSAweDI1Njk7CiAgdC5TRjQxMDAwMCA9IDB4MjU2NjsKICB0LlNGNDIwMDAwID0gMHgyNTYwOwogIHQuU0Y0MzAwMDAgPSAweDI1NTA7CiAgdC5TRjQ0MDAwMCA9IDB4MjU2YzsKICB0LlNGNDUwMDAwID0gMHgyNTY3OwogIHQuU0Y0NjAwMDAgPSAweDI1Njg7CiAgdC5TRjQ3MDAwMCA9IDB4MjU2NDsKICB0LlNGNDgwMDAwID0gMHgyNTY1OwogIHQuU0Y0OTAwMDAgPSAweDI1NTk7CiAgdC5TRjUwMDAwMCA9IDB4MjU1ODsKICB0LlNGNTEwMDAwID0gMHgyNTUyOwogIHQuU0Y1MjAwMDAgPSAweDI1NTM7CiAgdC5TRjUzMDAwMCA9IDB4MjU2YjsKICB0LlNGNTQwMDAwID0gMHgyNTZhOwogIHQuU2FjdXRlID0gMHgwMTVhOwogIHQuU2FjdXRlZG90YWNjZW50ID0gMHgxZTY0OwogIHQuU2FtcGlncmVlayA9IDB4MDNlMDsKICB0LlNjYXJvbiA9IDB4MDE2MDsKICB0LlNjYXJvbmRvdGFjY2VudCA9IDB4MWU2NjsKICB0LlNjYXJvbnNtYWxsID0gMHhmNmZkOwogIHQuU2NlZGlsbGEgPSAweDAxNWU7CiAgdC5TY2h3YSA9IDB4MDE4ZjsKICB0LlNjaHdhY3lyaWxsaWMgPSAweDA0ZDg7CiAgdC5TY2h3YWRpZXJlc2lzY3lyaWxsaWMgPSAweDA0ZGE7CiAgdC5TY2lyY2xlID0gMHgyNGM4OwogIHQuU2NpcmN1bWZsZXggPSAweDAxNWM7CiAgdC5TY29tbWFhY2NlbnQgPSAweDAyMTg7CiAgdC5TZG90YWNjZW50ID0gMHgxZTYwOwogIHQuU2RvdGJlbG93ID0gMHgxZTYyOwogIHQuU2RvdGJlbG93ZG90YWNjZW50ID0gMHgxZTY4OwogIHQuU2VoYXJtZW5pYW4gPSAweDA1NGQ7CiAgdC5TZXZlbnJvbWFuID0gMHgyMTY2OwogIHQuU2hhYXJtZW5pYW4gPSAweDA1NDc7CiAgdC5TaGFjeXJpbGxpYyA9IDB4MDQyODsKICB0LlNoY2hhY3lyaWxsaWMgPSAweDA0Mjk7CiAgdC5TaGVpY29wdGljID0gMHgwM2UyOwogIHQuU2hoYWN5cmlsbGljID0gMHgwNGJhOwogIHQuU2hpbWFjb3B0aWMgPSAweDAzZWM7CiAgdC5TaWdtYSA9IDB4MDNhMzsKICB0LlNpeHJvbWFuID0gMHgyMTY1OwogIHQuU21vbm9zcGFjZSA9IDB4ZmYzMzsKICB0LlNvZnRzaWduY3lyaWxsaWMgPSAweDA0MmM7CiAgdC5Tc21hbGwgPSAweGY3NzM7CiAgdC5TdGlnbWFncmVlayA9IDB4MDNkYTsKICB0LlQgPSAweDAwNTQ7CiAgdC5UYXUgPSAweDAzYTQ7CiAgdC5UYmFyID0gMHgwMTY2OwogIHQuVGNhcm9uID0gMHgwMTY0OwogIHQuVGNlZGlsbGEgPSAweDAxNjI7CiAgdC5UY2lyY2xlID0gMHgyNGM5OwogIHQuVGNpcmN1bWZsZXhiZWxvdyA9IDB4MWU3MDsKICB0LlRjb21tYWFjY2VudCA9IDB4MDE2MjsKICB0LlRkb3RhY2NlbnQgPSAweDFlNmE7CiAgdC5UZG90YmVsb3cgPSAweDFlNmM7CiAgdC5UZWN5cmlsbGljID0gMHgwNDIyOwogIHQuVGVkZXNjZW5kZXJjeXJpbGxpYyA9IDB4MDRhYzsKICB0LlRlbnJvbWFuID0gMHgyMTY5OwogIHQuVGV0c2VjeXJpbGxpYyA9IDB4MDRiNDsKICB0LlRoZXRhID0gMHgwMzk4OwogIHQuVGhvb2sgPSAweDAxYWM7CiAgdC5UaG9ybiA9IDB4MDBkZTsKICB0LlRob3Juc21hbGwgPSAweGY3ZmU7CiAgdC5UaHJlZXJvbWFuID0gMHgyMTYyOwogIHQuVGlsZGVzbWFsbCA9IDB4ZjZmZTsKICB0LlRpd25hcm1lbmlhbiA9IDB4MDU0ZjsKICB0LlRsaW5lYmVsb3cgPSAweDFlNmU7CiAgdC5UbW9ub3NwYWNlID0gMHhmZjM0OwogIHQuVG9hcm1lbmlhbiA9IDB4MDUzOTsKICB0LlRvbmVmaXZlID0gMHgwMWJjOwogIHQuVG9uZXNpeCA9IDB4MDE4NDsKICB0LlRvbmV0d28gPSAweDAxYTc7CiAgdC5UcmV0cm9mbGV4aG9vayA9IDB4MDFhZTsKICB0LlRzZWN5cmlsbGljID0gMHgwNDI2OwogIHQuVHNoZWN5cmlsbGljID0gMHgwNDBiOwogIHQuVHNtYWxsID0gMHhmNzc0OwogIHQuVHdlbHZlcm9tYW4gPSAweDIxNmI7CiAgdC5Ud29yb21hbiA9IDB4MjE2MTsKICB0LlUgPSAweDAwNTU7CiAgdC5VYWN1dGUgPSAweDAwZGE7CiAgdC5VYWN1dGVzbWFsbCA9IDB4ZjdmYTsKICB0LlVicmV2ZSA9IDB4MDE2YzsKICB0LlVjYXJvbiA9IDB4MDFkMzsKICB0LlVjaXJjbGUgPSAweDI0Y2E7CiAgdC5VY2lyY3VtZmxleCA9IDB4MDBkYjsKICB0LlVjaXJjdW1mbGV4YmVsb3cgPSAweDFlNzY7CiAgdC5VY2lyY3VtZmxleHNtYWxsID0gMHhmN2ZiOwogIHQuVWN5cmlsbGljID0gMHgwNDIzOwogIHQuVWRibGFjdXRlID0gMHgwMTcwOwogIHQuVWRibGdyYXZlID0gMHgwMjE0OwogIHQuVWRpZXJlc2lzID0gMHgwMGRjOwogIHQuVWRpZXJlc2lzYWN1dGUgPSAweDAxZDc7CiAgdC5VZGllcmVzaXNiZWxvdyA9IDB4MWU3MjsKICB0LlVkaWVyZXNpc2Nhcm9uID0gMHgwMWQ5OwogIHQuVWRpZXJlc2lzY3lyaWxsaWMgPSAweDA0ZjA7CiAgdC5VZGllcmVzaXNncmF2ZSA9IDB4MDFkYjsKICB0LlVkaWVyZXNpc21hY3JvbiA9IDB4MDFkNTsKICB0LlVkaWVyZXNpc3NtYWxsID0gMHhmN2ZjOwogIHQuVWRvdGJlbG93ID0gMHgxZWU0OwogIHQuVWdyYXZlID0gMHgwMGQ5OwogIHQuVWdyYXZlc21hbGwgPSAweGY3Zjk7CiAgdC5VaG9va2Fib3ZlID0gMHgxZWU2OwogIHQuVWhvcm4gPSAweDAxYWY7CiAgdC5VaG9ybmFjdXRlID0gMHgxZWU4OwogIHQuVWhvcm5kb3RiZWxvdyA9IDB4MWVmMDsKICB0LlVob3JuZ3JhdmUgPSAweDFlZWE7CiAgdC5VaG9ybmhvb2thYm92ZSA9IDB4MWVlYzsKICB0LlVob3JudGlsZGUgPSAweDFlZWU7CiAgdC5VaHVuZ2FydW1sYXV0ID0gMHgwMTcwOwogIHQuVWh1bmdhcnVtbGF1dGN5cmlsbGljID0gMHgwNGYyOwogIHQuVWludmVydGVkYnJldmUgPSAweDAyMTY7CiAgdC5Va2N5cmlsbGljID0gMHgwNDc4OwogIHQuVW1hY3JvbiA9IDB4MDE2YTsKICB0LlVtYWNyb25jeXJpbGxpYyA9IDB4MDRlZTsKICB0LlVtYWNyb25kaWVyZXNpcyA9IDB4MWU3YTsKICB0LlVtb25vc3BhY2UgPSAweGZmMzU7CiAgdC5Vb2dvbmVrID0gMHgwMTcyOwogIHQuVXBzaWxvbiA9IDB4MDNhNTsKICB0LlVwc2lsb24xID0gMHgwM2QyOwogIHQuVXBzaWxvbmFjdXRlaG9va3N5bWJvbGdyZWVrID0gMHgwM2QzOwogIHQuVXBzaWxvbmFmcmljYW4gPSAweDAxYjE7CiAgdC5VcHNpbG9uZGllcmVzaXMgPSAweDAzYWI7CiAgdC5VcHNpbG9uZGllcmVzaXNob29rc3ltYm9sZ3JlZWsgPSAweDAzZDQ7CiAgdC5VcHNpbG9uaG9va3N5bWJvbCA9IDB4MDNkMjsKICB0LlVwc2lsb250b25vcyA9IDB4MDM4ZTsKICB0LlVyaW5nID0gMHgwMTZlOwogIHQuVXNob3J0Y3lyaWxsaWMgPSAweDA0MGU7CiAgdC5Vc21hbGwgPSAweGY3NzU7CiAgdC5Vc3RyYWlnaHRjeXJpbGxpYyA9IDB4MDRhZTsKICB0LlVzdHJhaWdodHN0cm9rZWN5cmlsbGljID0gMHgwNGIwOwogIHQuVXRpbGRlID0gMHgwMTY4OwogIHQuVXRpbGRlYWN1dGUgPSAweDFlNzg7CiAgdC5VdGlsZGViZWxvdyA9IDB4MWU3NDsKICB0LlYgPSAweDAwNTY7CiAgdC5WY2lyY2xlID0gMHgyNGNiOwogIHQuVmRvdGJlbG93ID0gMHgxZTdlOwogIHQuVmVjeXJpbGxpYyA9IDB4MDQxMjsKICB0LlZld2FybWVuaWFuID0gMHgwNTRlOwogIHQuVmhvb2sgPSAweDAxYjI7CiAgdC5WbW9ub3NwYWNlID0gMHhmZjM2OwogIHQuVm9hcm1lbmlhbiA9IDB4MDU0ODsKICB0LlZzbWFsbCA9IDB4Zjc3NjsKICB0LlZ0aWxkZSA9IDB4MWU3YzsKICB0LlcgPSAweDAwNTc7CiAgdC5XYWN1dGUgPSAweDFlODI7CiAgdC5XY2lyY2xlID0gMHgyNGNjOwogIHQuV2NpcmN1bWZsZXggPSAweDAxNzQ7CiAgdC5XZGllcmVzaXMgPSAweDFlODQ7CiAgdC5XZG90YWNjZW50ID0gMHgxZTg2OwogIHQuV2RvdGJlbG93ID0gMHgxZTg4OwogIHQuV2dyYXZlID0gMHgxZTgwOwogIHQuV21vbm9zcGFjZSA9IDB4ZmYzNzsKICB0LldzbWFsbCA9IDB4Zjc3NzsKICB0LlggPSAweDAwNTg7CiAgdC5YY2lyY2xlID0gMHgyNGNkOwogIHQuWGRpZXJlc2lzID0gMHgxZThjOwogIHQuWGRvdGFjY2VudCA9IDB4MWU4YTsKICB0LlhlaGFybWVuaWFuID0gMHgwNTNkOwogIHQuWGkgPSAweDAzOWU7CiAgdC5YbW9ub3NwYWNlID0gMHhmZjM4OwogIHQuWHNtYWxsID0gMHhmNzc4OwogIHQuWSA9IDB4MDA1OTsKICB0LllhY3V0ZSA9IDB4MDBkZDsKICB0LllhY3V0ZXNtYWxsID0gMHhmN2ZkOwogIHQuWWF0Y3lyaWxsaWMgPSAweDA0NjI7CiAgdC5ZY2lyY2xlID0gMHgyNGNlOwogIHQuWWNpcmN1bWZsZXggPSAweDAxNzY7CiAgdC5ZZGllcmVzaXMgPSAweDAxNzg7CiAgdC5ZZGllcmVzaXNzbWFsbCA9IDB4ZjdmZjsKICB0Lllkb3RhY2NlbnQgPSAweDFlOGU7CiAgdC5ZZG90YmVsb3cgPSAweDFlZjQ7CiAgdC5ZZXJpY3lyaWxsaWMgPSAweDA0MmI7CiAgdC5ZZXJ1ZGllcmVzaXNjeXJpbGxpYyA9IDB4MDRmODsKICB0LllncmF2ZSA9IDB4MWVmMjsKICB0Lllob29rID0gMHgwMWIzOwogIHQuWWhvb2thYm92ZSA9IDB4MWVmNjsKICB0LllpYXJtZW5pYW4gPSAweDA1NDU7CiAgdC5ZaWN5cmlsbGljID0gMHgwNDA3OwogIHQuWWl3bmFybWVuaWFuID0gMHgwNTUyOwogIHQuWW1vbm9zcGFjZSA9IDB4ZmYzOTsKICB0LllzbWFsbCA9IDB4Zjc3OTsKICB0Lll0aWxkZSA9IDB4MWVmODsKICB0Lll1c2JpZ2N5cmlsbGljID0gMHgwNDZhOwogIHQuWXVzYmlnaW90aWZpZWRjeXJpbGxpYyA9IDB4MDQ2YzsKICB0Lll1c2xpdHRsZWN5cmlsbGljID0gMHgwNDY2OwogIHQuWXVzbGl0dGxlaW90aWZpZWRjeXJpbGxpYyA9IDB4MDQ2ODsKICB0LlogPSAweDAwNWE7CiAgdC5aYWFybWVuaWFuID0gMHgwNTM2OwogIHQuWmFjdXRlID0gMHgwMTc5OwogIHQuWmNhcm9uID0gMHgwMTdkOwogIHQuWmNhcm9uc21hbGwgPSAweGY2ZmY7CiAgdC5aY2lyY2xlID0gMHgyNGNmOwogIHQuWmNpcmN1bWZsZXggPSAweDFlOTA7CiAgdC5aZG90ID0gMHgwMTdiOwogIHQuWmRvdGFjY2VudCA9IDB4MDE3YjsKICB0Llpkb3RiZWxvdyA9IDB4MWU5MjsKICB0LlplY3lyaWxsaWMgPSAweDA0MTc7CiAgdC5aZWRlc2NlbmRlcmN5cmlsbGljID0gMHgwNDk4OwogIHQuWmVkaWVyZXNpc2N5cmlsbGljID0gMHgwNGRlOwogIHQuWmV0YSA9IDB4MDM5NjsKICB0LlpoZWFybWVuaWFuID0gMHgwNTNhOwogIHQuWmhlYnJldmVjeXJpbGxpYyA9IDB4MDRjMTsKICB0LlpoZWN5cmlsbGljID0gMHgwNDE2OwogIHQuWmhlZGVzY2VuZGVyY3lyaWxsaWMgPSAweDA0OTY7CiAgdC5aaGVkaWVyZXNpc2N5cmlsbGljID0gMHgwNGRjOwogIHQuWmxpbmViZWxvdyA9IDB4MWU5NDsKICB0Llptb25vc3BhY2UgPSAweGZmM2E7CiAgdC5ac21hbGwgPSAweGY3N2E7CiAgdC5ac3Ryb2tlID0gMHgwMWI1OwogIHQuYSA9IDB4MDA2MTsKICB0LmFhYmVuZ2FsaSA9IDB4MDk4NjsKICB0LmFhY3V0ZSA9IDB4MDBlMTsKICB0LmFhZGV2YSA9IDB4MDkwNjsKICB0LmFhZ3VqYXJhdGkgPSAweDBhODY7CiAgdC5hYWd1cm11a2hpID0gMHgwYTA2OwogIHQuYWFtYXRyYWd1cm11a2hpID0gMHgwYTNlOwogIHQuYWFydXNxdWFyZSA9IDB4MzMwMzsKICB0LmFhdm93ZWxzaWduYmVuZ2FsaSA9IDB4MDliZTsKICB0LmFhdm93ZWxzaWduZGV2YSA9IDB4MDkzZTsKICB0LmFhdm93ZWxzaWduZ3VqYXJhdGkgPSAweDBhYmU7CiAgdC5hYmJyZXZpYXRpb25tYXJrYXJtZW5pYW4gPSAweDA1NWY7CiAgdC5hYmJyZXZpYXRpb25zaWduZGV2YSA9IDB4MDk3MDsKICB0LmFiZW5nYWxpID0gMHgwOTg1OwogIHQuYWJvcG9tb2ZvID0gMHgzMTFhOwogIHQuYWJyZXZlID0gMHgwMTAzOwogIHQuYWJyZXZlYWN1dGUgPSAweDFlYWY7CiAgdC5hYnJldmVjeXJpbGxpYyA9IDB4MDRkMTsKICB0LmFicmV2ZWRvdGJlbG93ID0gMHgxZWI3OwogIHQuYWJyZXZlZ3JhdmUgPSAweDFlYjE7CiAgdC5hYnJldmVob29rYWJvdmUgPSAweDFlYjM7CiAgdC5hYnJldmV0aWxkZSA9IDB4MWViNTsKICB0LmFjYXJvbiA9IDB4MDFjZTsKICB0LmFjaXJjbGUgPSAweDI0ZDA7CiAgdC5hY2lyY3VtZmxleCA9IDB4MDBlMjsKICB0LmFjaXJjdW1mbGV4YWN1dGUgPSAweDFlYTU7CiAgdC5hY2lyY3VtZmxleGRvdGJlbG93ID0gMHgxZWFkOwogIHQuYWNpcmN1bWZsZXhncmF2ZSA9IDB4MWVhNzsKICB0LmFjaXJjdW1mbGV4aG9va2Fib3ZlID0gMHgxZWE5OwogIHQuYWNpcmN1bWZsZXh0aWxkZSA9IDB4MWVhYjsKICB0LmFjdXRlID0gMHgwMGI0OwogIHQuYWN1dGViZWxvd2NtYiA9IDB4MDMxNzsKICB0LmFjdXRlY21iID0gMHgwMzAxOwogIHQuYWN1dGVjb21iID0gMHgwMzAxOwogIHQuYWN1dGVkZXZhID0gMHgwOTU0OwogIHQuYWN1dGVsb3dtb2QgPSAweDAyY2Y7CiAgdC5hY3V0ZXRvbmVjbWIgPSAweDAzNDE7CiAgdC5hY3lyaWxsaWMgPSAweDA0MzA7CiAgdC5hZGJsZ3JhdmUgPSAweDAyMDE7CiAgdC5hZGRha2d1cm11a2hpID0gMHgwYTcxOwogIHQuYWRldmEgPSAweDA5MDU7CiAgdC5hZGllcmVzaXMgPSAweDAwZTQ7CiAgdC5hZGllcmVzaXNjeXJpbGxpYyA9IDB4MDRkMzsKICB0LmFkaWVyZXNpc21hY3JvbiA9IDB4MDFkZjsKICB0LmFkb3RiZWxvdyA9IDB4MWVhMTsKICB0LmFkb3RtYWNyb24gPSAweDAxZTE7CiAgdC5hZSA9IDB4MDBlNjsKICB0LmFlYWN1dGUgPSAweDAxZmQ7CiAgdC5hZWtvcmVhbiA9IDB4MzE1MDsKICB0LmFlbWFjcm9uID0gMHgwMWUzOwogIHQuYWZpaTAwMjA4ID0gMHgyMDE1OwogIHQuYWZpaTA4OTQxID0gMHgyMGE0OwogIHQuYWZpaTEwMDE3ID0gMHgwNDEwOwogIHQuYWZpaTEwMDE4ID0gMHgwNDExOwogIHQuYWZpaTEwMDE5ID0gMHgwNDEyOwogIHQuYWZpaTEwMDIwID0gMHgwNDEzOwogIHQuYWZpaTEwMDIxID0gMHgwNDE0OwogIHQuYWZpaTEwMDIyID0gMHgwNDE1OwogIHQuYWZpaTEwMDIzID0gMHgwNDAxOwogIHQuYWZpaTEwMDI0ID0gMHgwNDE2OwogIHQuYWZpaTEwMDI1ID0gMHgwNDE3OwogIHQuYWZpaTEwMDI2ID0gMHgwNDE4OwogIHQuYWZpaTEwMDI3ID0gMHgwNDE5OwogIHQuYWZpaTEwMDI4ID0gMHgwNDFhOwogIHQuYWZpaTEwMDI5ID0gMHgwNDFiOwogIHQuYWZpaTEwMDMwID0gMHgwNDFjOwogIHQuYWZpaTEwMDMxID0gMHgwNDFkOwogIHQuYWZpaTEwMDMyID0gMHgwNDFlOwogIHQuYWZpaTEwMDMzID0gMHgwNDFmOwogIHQuYWZpaTEwMDM0ID0gMHgwNDIwOwogIHQuYWZpaTEwMDM1ID0gMHgwNDIxOwogIHQuYWZpaTEwMDM2ID0gMHgwNDIyOwogIHQuYWZpaTEwMDM3ID0gMHgwNDIzOwogIHQuYWZpaTEwMDM4ID0gMHgwNDI0OwogIHQuYWZpaTEwMDM5ID0gMHgwNDI1OwogIHQuYWZpaTEwMDQwID0gMHgwNDI2OwogIHQuYWZpaTEwMDQxID0gMHgwNDI3OwogIHQuYWZpaTEwMDQyID0gMHgwNDI4OwogIHQuYWZpaTEwMDQzID0gMHgwNDI5OwogIHQuYWZpaTEwMDQ0ID0gMHgwNDJhOwogIHQuYWZpaTEwMDQ1ID0gMHgwNDJiOwogIHQuYWZpaTEwMDQ2ID0gMHgwNDJjOwogIHQuYWZpaTEwMDQ3ID0gMHgwNDJkOwogIHQuYWZpaTEwMDQ4ID0gMHgwNDJlOwogIHQuYWZpaTEwMDQ5ID0gMHgwNDJmOwogIHQuYWZpaTEwMDUwID0gMHgwNDkwOwogIHQuYWZpaTEwMDUxID0gMHgwNDAyOwogIHQuYWZpaTEwMDUyID0gMHgwNDAzOwogIHQuYWZpaTEwMDUzID0gMHgwNDA0OwogIHQuYWZpaTEwMDU0ID0gMHgwNDA1OwogIHQuYWZpaTEwMDU1ID0gMHgwNDA2OwogIHQuYWZpaTEwMDU2ID0gMHgwNDA3OwogIHQuYWZpaTEwMDU3ID0gMHgwNDA4OwogIHQuYWZpaTEwMDU4ID0gMHgwNDA5OwogIHQuYWZpaTEwMDU5ID0gMHgwNDBhOwogIHQuYWZpaTEwMDYwID0gMHgwNDBiOwogIHQuYWZpaTEwMDYxID0gMHgwNDBjOwogIHQuYWZpaTEwMDYyID0gMHgwNDBlOwogIHQuYWZpaTEwMDYzID0gMHhmNmM0OwogIHQuYWZpaTEwMDY0ID0gMHhmNmM1OwogIHQuYWZpaTEwMDY1ID0gMHgwNDMwOwogIHQuYWZpaTEwMDY2ID0gMHgwNDMxOwogIHQuYWZpaTEwMDY3ID0gMHgwNDMyOwogIHQuYWZpaTEwMDY4ID0gMHgwNDMzOwogIHQuYWZpaTEwMDY5ID0gMHgwNDM0OwogIHQuYWZpaTEwMDcwID0gMHgwNDM1OwogIHQuYWZpaTEwMDcxID0gMHgwNDUxOwogIHQuYWZpaTEwMDcyID0gMHgwNDM2OwogIHQuYWZpaTEwMDczID0gMHgwNDM3OwogIHQuYWZpaTEwMDc0ID0gMHgwNDM4OwogIHQuYWZpaTEwMDc1ID0gMHgwNDM5OwogIHQuYWZpaTEwMDc2ID0gMHgwNDNhOwogIHQuYWZpaTEwMDc3ID0gMHgwNDNiOwogIHQuYWZpaTEwMDc4ID0gMHgwNDNjOwogIHQuYWZpaTEwMDc5ID0gMHgwNDNkOwogIHQuYWZpaTEwMDgwID0gMHgwNDNlOwogIHQuYWZpaTEwMDgxID0gMHgwNDNmOwogIHQuYWZpaTEwMDgyID0gMHgwNDQwOwogIHQuYWZpaTEwMDgzID0gMHgwNDQxOwogIHQuYWZpaTEwMDg0ID0gMHgwNDQyOwogIHQuYWZpaTEwMDg1ID0gMHgwNDQzOwogIHQuYWZpaTEwMDg2ID0gMHgwNDQ0OwogIHQuYWZpaTEwMDg3ID0gMHgwNDQ1OwogIHQuYWZpaTEwMDg4ID0gMHgwNDQ2OwogIHQuYWZpaTEwMDg5ID0gMHgwNDQ3OwogIHQuYWZpaTEwMDkwID0gMHgwNDQ4OwogIHQuYWZpaTEwMDkxID0gMHgwNDQ5OwogIHQuYWZpaTEwMDkyID0gMHgwNDRhOwogIHQuYWZpaTEwMDkzID0gMHgwNDRiOwogIHQuYWZpaTEwMDk0ID0gMHgwNDRjOwogIHQuYWZpaTEwMDk1ID0gMHgwNDRkOwogIHQuYWZpaTEwMDk2ID0gMHgwNDRlOwogIHQuYWZpaTEwMDk3ID0gMHgwNDRmOwogIHQuYWZpaTEwMDk4ID0gMHgwNDkxOwogIHQuYWZpaTEwMDk5ID0gMHgwNDUyOwogIHQuYWZpaTEwMTAwID0gMHgwNDUzOwogIHQuYWZpaTEwMTAxID0gMHgwNDU0OwogIHQuYWZpaTEwMTAyID0gMHgwNDU1OwogIHQuYWZpaTEwMTAzID0gMHgwNDU2OwogIHQuYWZpaTEwMTA0ID0gMHgwNDU3OwogIHQuYWZpaTEwMTA1ID0gMHgwNDU4OwogIHQuYWZpaTEwMTA2ID0gMHgwNDU5OwogIHQuYWZpaTEwMTA3ID0gMHgwNDVhOwogIHQuYWZpaTEwMTA4ID0gMHgwNDViOwogIHQuYWZpaTEwMTA5ID0gMHgwNDVjOwogIHQuYWZpaTEwMTEwID0gMHgwNDVlOwogIHQuYWZpaTEwMTQ1ID0gMHgwNDBmOwogIHQuYWZpaTEwMTQ2ID0gMHgwNDYyOwogIHQuYWZpaTEwMTQ3ID0gMHgwNDcyOwogIHQuYWZpaTEwMTQ4ID0gMHgwNDc0OwogIHQuYWZpaTEwMTkyID0gMHhmNmM2OwogIHQuYWZpaTEwMTkzID0gMHgwNDVmOwogIHQuYWZpaTEwMTk0ID0gMHgwNDYzOwogIHQuYWZpaTEwMTk1ID0gMHgwNDczOwogIHQuYWZpaTEwMTk2ID0gMHgwNDc1OwogIHQuYWZpaTEwODMxID0gMHhmNmM3OwogIHQuYWZpaTEwODMyID0gMHhmNmM4OwogIHQuYWZpaTEwODQ2ID0gMHgwNGQ5OwogIHQuYWZpaTI5OSA9IDB4MjAwZTsKICB0LmFmaWkzMDAgPSAweDIwMGY7CiAgdC5hZmlpMzAxID0gMHgyMDBkOwogIHQuYWZpaTU3MzgxID0gMHgwNjZhOwogIHQuYWZpaTU3Mzg4ID0gMHgwNjBjOwogIHQuYWZpaTU3MzkyID0gMHgwNjYwOwogIHQuYWZpaTU3MzkzID0gMHgwNjYxOwogIHQuYWZpaTU3Mzk0ID0gMHgwNjYyOwogIHQuYWZpaTU3Mzk1ID0gMHgwNjYzOwogIHQuYWZpaTU3Mzk2ID0gMHgwNjY0OwogIHQuYWZpaTU3Mzk3ID0gMHgwNjY1OwogIHQuYWZpaTU3Mzk4ID0gMHgwNjY2OwogIHQuYWZpaTU3Mzk5ID0gMHgwNjY3OwogIHQuYWZpaTU3NDAwID0gMHgwNjY4OwogIHQuYWZpaTU3NDAxID0gMHgwNjY5OwogIHQuYWZpaTU3NDAzID0gMHgwNjFiOwogIHQuYWZpaTU3NDA3ID0gMHgwNjFmOwogIHQuYWZpaTU3NDA5ID0gMHgwNjIxOwogIHQuYWZpaTU3NDEwID0gMHgwNjIyOwogIHQuYWZpaTU3NDExID0gMHgwNjIzOwogIHQuYWZpaTU3NDEyID0gMHgwNjI0OwogIHQuYWZpaTU3NDEzID0gMHgwNjI1OwogIHQuYWZpaTU3NDE0ID0gMHgwNjI2OwogIHQuYWZpaTU3NDE1ID0gMHgwNjI3OwogIHQuYWZpaTU3NDE2ID0gMHgwNjI4OwogIHQuYWZpaTU3NDE3ID0gMHgwNjI5OwogIHQuYWZpaTU3NDE4ID0gMHgwNjJhOwogIHQuYWZpaTU3NDE5ID0gMHgwNjJiOwogIHQuYWZpaTU3NDIwID0gMHgwNjJjOwogIHQuYWZpaTU3NDIxID0gMHgwNjJkOwogIHQuYWZpaTU3NDIyID0gMHgwNjJlOwogIHQuYWZpaTU3NDIzID0gMHgwNjJmOwogIHQuYWZpaTU3NDI0ID0gMHgwNjMwOwogIHQuYWZpaTU3NDI1ID0gMHgwNjMxOwogIHQuYWZpaTU3NDI2ID0gMHgwNjMyOwogIHQuYWZpaTU3NDI3ID0gMHgwNjMzOwogIHQuYWZpaTU3NDI4ID0gMHgwNjM0OwogIHQuYWZpaTU3NDI5ID0gMHgwNjM1OwogIHQuYWZpaTU3NDMwID0gMHgwNjM2OwogIHQuYWZpaTU3NDMxID0gMHgwNjM3OwogIHQuYWZpaTU3NDMyID0gMHgwNjM4OwogIHQuYWZpaTU3NDMzID0gMHgwNjM5OwogIHQuYWZpaTU3NDM0ID0gMHgwNjNhOwogIHQuYWZpaTU3NDQwID0gMHgwNjQwOwogIHQuYWZpaTU3NDQxID0gMHgwNjQxOwogIHQuYWZpaTU3NDQyID0gMHgwNjQyOwogIHQuYWZpaTU3NDQzID0gMHgwNjQzOwogIHQuYWZpaTU3NDQ0ID0gMHgwNjQ0OwogIHQuYWZpaTU3NDQ1ID0gMHgwNjQ1OwogIHQuYWZpaTU3NDQ2ID0gMHgwNjQ2OwogIHQuYWZpaTU3NDQ4ID0gMHgwNjQ4OwogIHQuYWZpaTU3NDQ5ID0gMHgwNjQ5OwogIHQuYWZpaTU3NDUwID0gMHgwNjRhOwogIHQuYWZpaTU3NDUxID0gMHgwNjRiOwogIHQuYWZpaTU3NDUyID0gMHgwNjRjOwogIHQuYWZpaTU3NDUzID0gMHgwNjRkOwogIHQuYWZpaTU3NDU0ID0gMHgwNjRlOwogIHQuYWZpaTU3NDU1ID0gMHgwNjRmOwogIHQuYWZpaTU3NDU2ID0gMHgwNjUwOwogIHQuYWZpaTU3NDU3ID0gMHgwNjUxOwogIHQuYWZpaTU3NDU4ID0gMHgwNjUyOwogIHQuYWZpaTU3NDcwID0gMHgwNjQ3OwogIHQuYWZpaTU3NTA1ID0gMHgwNmE0OwogIHQuYWZpaTU3NTA2ID0gMHgwNjdlOwogIHQuYWZpaTU3NTA3ID0gMHgwNjg2OwogIHQuYWZpaTU3NTA4ID0gMHgwNjk4OwogIHQuYWZpaTU3NTA5ID0gMHgwNmFmOwogIHQuYWZpaTU3NTExID0gMHgwNjc5OwogIHQuYWZpaTU3NTEyID0gMHgwNjg4OwogIHQuYWZpaTU3NTEzID0gMHgwNjkxOwogIHQuYWZpaTU3NTE0ID0gMHgwNmJhOwogIHQuYWZpaTU3NTE5ID0gMHgwNmQyOwogIHQuYWZpaTU3NTM0ID0gMHgwNmQ1OwogIHQuYWZpaTU3NjM2ID0gMHgyMGFhOwogIHQuYWZpaTU3NjQ1ID0gMHgwNWJlOwogIHQuYWZpaTU3NjU4ID0gMHgwNWMzOwogIHQuYWZpaTU3NjY0ID0gMHgwNWQwOwogIHQuYWZpaTU3NjY1ID0gMHgwNWQxOwogIHQuYWZpaTU3NjY2ID0gMHgwNWQyOwogIHQuYWZpaTU3NjY3ID0gMHgwNWQzOwogIHQuYWZpaTU3NjY4ID0gMHgwNWQ0OwogIHQuYWZpaTU3NjY5ID0gMHgwNWQ1OwogIHQuYWZpaTU3NjcwID0gMHgwNWQ2OwogIHQuYWZpaTU3NjcxID0gMHgwNWQ3OwogIHQuYWZpaTU3NjcyID0gMHgwNWQ4OwogIHQuYWZpaTU3NjczID0gMHgwNWQ5OwogIHQuYWZpaTU3Njc0ID0gMHgwNWRhOwogIHQuYWZpaTU3Njc1ID0gMHgwNWRiOwogIHQuYWZpaTU3Njc2ID0gMHgwNWRjOwogIHQuYWZpaTU3Njc3ID0gMHgwNWRkOwogIHQuYWZpaTU3Njc4ID0gMHgwNWRlOwogIHQuYWZpaTU3Njc5ID0gMHgwNWRmOwogIHQuYWZpaTU3NjgwID0gMHgwNWUwOwogIHQuYWZpaTU3NjgxID0gMHgwNWUxOwogIHQuYWZpaTU3NjgyID0gMHgwNWUyOwogIHQuYWZpaTU3NjgzID0gMHgwNWUzOwogIHQuYWZpaTU3Njg0ID0gMHgwNWU0OwogIHQuYWZpaTU3Njg1ID0gMHgwNWU1OwogIHQuYWZpaTU3Njg2ID0gMHgwNWU2OwogIHQuYWZpaTU3Njg3ID0gMHgwNWU3OwogIHQuYWZpaTU3Njg4ID0gMHgwNWU4OwogIHQuYWZpaTU3Njg5ID0gMHgwNWU5OwogIHQuYWZpaTU3NjkwID0gMHgwNWVhOwogIHQuYWZpaTU3Njk0ID0gMHhmYjJhOwogIHQuYWZpaTU3Njk1ID0gMHhmYjJiOwogIHQuYWZpaTU3NzAwID0gMHhmYjRiOwogIHQuYWZpaTU3NzA1ID0gMHhmYjFmOwogIHQuYWZpaTU3NzE2ID0gMHgwNWYwOwogIHQuYWZpaTU3NzE3ID0gMHgwNWYxOwogIHQuYWZpaTU3NzE4ID0gMHgwNWYyOwogIHQuYWZpaTU3NzIzID0gMHhmYjM1OwogIHQuYWZpaTU3NzkzID0gMHgwNWI0OwogIHQuYWZpaTU3Nzk0ID0gMHgwNWI1OwogIHQuYWZpaTU3Nzk1ID0gMHgwNWI2OwogIHQuYWZpaTU3Nzk2ID0gMHgwNWJiOwogIHQuYWZpaTU3Nzk3ID0gMHgwNWI4OwogIHQuYWZpaTU3Nzk4ID0gMHgwNWI3OwogIHQuYWZpaTU3Nzk5ID0gMHgwNWIwOwogIHQuYWZpaTU3ODAwID0gMHgwNWIyOwogIHQuYWZpaTU3ODAxID0gMHgwNWIxOwogIHQuYWZpaTU3ODAyID0gMHgwNWIzOwogIHQuYWZpaTU3ODAzID0gMHgwNWMyOwogIHQuYWZpaTU3ODA0ID0gMHgwNWMxOwogIHQuYWZpaTU3ODA2ID0gMHgwNWI5OwogIHQuYWZpaTU3ODA3ID0gMHgwNWJjOwogIHQuYWZpaTU3ODM5ID0gMHgwNWJkOwogIHQuYWZpaTU3ODQxID0gMHgwNWJmOwogIHQuYWZpaTU3ODQyID0gMHgwNWMwOwogIHQuYWZpaTU3OTI5ID0gMHgwMmJjOwogIHQuYWZpaTYxMjQ4ID0gMHgyMTA1OwogIHQuYWZpaTYxMjg5ID0gMHgyMTEzOwogIHQuYWZpaTYxMzUyID0gMHgyMTE2OwogIHQuYWZpaTYxNTczID0gMHgyMDJjOwogIHQuYWZpaTYxNTc0ID0gMHgyMDJkOwogIHQuYWZpaTYxNTc1ID0gMHgyMDJlOwogIHQuYWZpaTYxNjY0ID0gMHgyMDBjOwogIHQuYWZpaTYzMTY3ID0gMHgwNjZkOwogIHQuYWZpaTY0OTM3ID0gMHgwMmJkOwogIHQuYWdyYXZlID0gMHgwMGUwOwogIHQuYWd1amFyYXRpID0gMHgwYTg1OwogIHQuYWd1cm11a2hpID0gMHgwYTA1OwogIHQuYWhpcmFnYW5hID0gMHgzMDQyOwogIHQuYWhvb2thYm92ZSA9IDB4MWVhMzsKICB0LmFpYmVuZ2FsaSA9IDB4MDk5MDsKICB0LmFpYm9wb21vZm8gPSAweDMxMWU7CiAgdC5haWRldmEgPSAweDA5MTA7CiAgdC5haWVjeXJpbGxpYyA9IDB4MDRkNTsKICB0LmFpZ3VqYXJhdGkgPSAweDBhOTA7CiAgdC5haWd1cm11a2hpID0gMHgwYTEwOwogIHQuYWltYXRyYWd1cm11a2hpID0gMHgwYTQ4OwogIHQuYWluYXJhYmljID0gMHgwNjM5OwogIHQuYWluZmluYWxhcmFiaWMgPSAweGZlY2E7CiAgdC5haW5pbml0aWFsYXJhYmljID0gMHhmZWNiOwogIHQuYWlubWVkaWFsYXJhYmljID0gMHhmZWNjOwogIHQuYWludmVydGVkYnJldmUgPSAweDAyMDM7CiAgdC5haXZvd2Vsc2lnbmJlbmdhbGkgPSAweDA5Yzg7CiAgdC5haXZvd2Vsc2lnbmRldmEgPSAweDA5NDg7CiAgdC5haXZvd2Vsc2lnbmd1amFyYXRpID0gMHgwYWM4OwogIHQuYWthdGFrYW5hID0gMHgzMGEyOwogIHQuYWthdGFrYW5haGFsZndpZHRoID0gMHhmZjcxOwogIHQuYWtvcmVhbiA9IDB4MzE0ZjsKICB0LmFsZWYgPSAweDA1ZDA7CiAgdC5hbGVmYXJhYmljID0gMHgwNjI3OwogIHQuYWxlZmRhZ2VzaGhlYnJldyA9IDB4ZmIzMDsKICB0LmFsZWZmaW5hbGFyYWJpYyA9IDB4ZmU4ZTsKICB0LmFsZWZoYW16YWFib3ZlYXJhYmljID0gMHgwNjIzOwogIHQuYWxlZmhhbXphYWJvdmVmaW5hbGFyYWJpYyA9IDB4ZmU4NDsKICB0LmFsZWZoYW16YWJlbG93YXJhYmljID0gMHgwNjI1OwogIHQuYWxlZmhhbXphYmVsb3dmaW5hbGFyYWJpYyA9IDB4ZmU4ODsKICB0LmFsZWZoZWJyZXcgPSAweDA1ZDA7CiAgdC5hbGVmbGFtZWRoZWJyZXcgPSAweGZiNGY7CiAgdC5hbGVmbWFkZGFhYm92ZWFyYWJpYyA9IDB4MDYyMjsKICB0LmFsZWZtYWRkYWFib3ZlZmluYWxhcmFiaWMgPSAweGZlODI7CiAgdC5hbGVmbWFrc3VyYWFyYWJpYyA9IDB4MDY0OTsKICB0LmFsZWZtYWtzdXJhZmluYWxhcmFiaWMgPSAweGZlZjA7CiAgdC5hbGVmbWFrc3VyYWluaXRpYWxhcmFiaWMgPSAweGZlZjM7CiAgdC5hbGVmbWFrc3VyYW1lZGlhbGFyYWJpYyA9IDB4ZmVmNDsKICB0LmFsZWZwYXRhaGhlYnJldyA9IDB4ZmIyZTsKICB0LmFsZWZxYW1hdHNoZWJyZXcgPSAweGZiMmY7CiAgdC5hbGVwaCA9IDB4MjEzNTsKICB0LmFsbGVxdWFsID0gMHgyMjRjOwogIHQuYWxwaGEgPSAweDAzYjE7CiAgdC5hbHBoYXRvbm9zID0gMHgwM2FjOwogIHQuYW1hY3JvbiA9IDB4MDEwMTsKICB0LmFtb25vc3BhY2UgPSAweGZmNDE7CiAgdC5hbXBlcnNhbmQgPSAweDAwMjY7CiAgdC5hbXBlcnNhbmRtb25vc3BhY2UgPSAweGZmMDY7CiAgdC5hbXBlcnNhbmRzbWFsbCA9IDB4ZjcyNjsKICB0LmFtc3F1YXJlID0gMHgzM2MyOwogIHQuYW5ib3BvbW9mbyA9IDB4MzEyMjsKICB0LmFuZ2JvcG9tb2ZvID0gMHgzMTI0OwogIHQuYW5nYnJhY2tldGxlZnQgPSAweDMwMDg7CiAgdC5hbmdicmFja2V0cmlnaHQgPSAweDMwMDk7CiAgdC5hbmdraGFua2h1dGhhaSA9IDB4MGU1YTsKICB0LmFuZ2xlID0gMHgyMjIwOwogIHQuYW5nbGVicmFja2V0bGVmdCA9IDB4MzAwODsKICB0LmFuZ2xlYnJhY2tldGxlZnR2ZXJ0aWNhbCA9IDB4ZmUzZjsKICB0LmFuZ2xlYnJhY2tldHJpZ2h0ID0gMHgzMDA5OwogIHQuYW5nbGVicmFja2V0cmlnaHR2ZXJ0aWNhbCA9IDB4ZmU0MDsKICB0LmFuZ2xlbGVmdCA9IDB4MjMyOTsKICB0LmFuZ2xlcmlnaHQgPSAweDIzMmE7CiAgdC5hbmdzdHJvbSA9IDB4MjEyYjsKICB0LmFub3RlbGVpYSA9IDB4MDM4NzsKICB0LmFudWRhdHRhZGV2YSA9IDB4MDk1MjsKICB0LmFudXN2YXJhYmVuZ2FsaSA9IDB4MDk4MjsKICB0LmFudXN2YXJhZGV2YSA9IDB4MDkwMjsKICB0LmFudXN2YXJhZ3VqYXJhdGkgPSAweDBhODI7CiAgdC5hb2dvbmVrID0gMHgwMTA1OwogIHQuYXBhYXRvc3F1YXJlID0gMHgzMzAwOwogIHQuYXBhcmVuID0gMHgyNDljOwogIHQuYXBvc3Ryb3BoZWFybWVuaWFuID0gMHgwNTVhOwogIHQuYXBvc3Ryb3BoZW1vZCA9IDB4MDJiYzsKICB0LmFwcGxlID0gMHhmOGZmOwogIHQuYXBwcm9hY2hlcyA9IDB4MjI1MDsKICB0LmFwcHJveGVxdWFsID0gMHgyMjQ4OwogIHQuYXBwcm94ZXF1YWxvcmltYWdlID0gMHgyMjUyOwogIHQuYXBwcm94aW1hdGVseWVxdWFsID0gMHgyMjQ1OwogIHQuYXJhZWFla29yZWFuID0gMHgzMThlOwogIHQuYXJhZWFrb3JlYW4gPSAweDMxOGQ7CiAgdC5hcmMgPSAweDIzMTI7CiAgdC5hcmlnaHRoYWxmcmluZyA9IDB4MWU5YTsKICB0LmFyaW5nID0gMHgwMGU1OwogIHQuYXJpbmdhY3V0ZSA9IDB4MDFmYjsKICB0LmFyaW5nYmVsb3cgPSAweDFlMDE7CiAgdC5hcnJvd2JvdGggPSAweDIxOTQ7CiAgdC5hcnJvd2Rhc2hkb3duID0gMHgyMWUzOwogIHQuYXJyb3dkYXNobGVmdCA9IDB4MjFlMDsKICB0LmFycm93ZGFzaHJpZ2h0ID0gMHgyMWUyOwogIHQuYXJyb3dkYXNodXAgPSAweDIxZTE7CiAgdC5hcnJvd2RibGJvdGggPSAweDIxZDQ7CiAgdC5hcnJvd2RibGRvd24gPSAweDIxZDM7CiAgdC5hcnJvd2RibGxlZnQgPSAweDIxZDA7CiAgdC5hcnJvd2RibHJpZ2h0ID0gMHgyMWQyOwogIHQuYXJyb3dkYmx1cCA9IDB4MjFkMTsKICB0LmFycm93ZG93biA9IDB4MjE5MzsKICB0LmFycm93ZG93bmxlZnQgPSAweDIxOTk7CiAgdC5hcnJvd2Rvd25yaWdodCA9IDB4MjE5ODsKICB0LmFycm93ZG93bndoaXRlID0gMHgyMWU5OwogIHQuYXJyb3doZWFkZG93bm1vZCA9IDB4MDJjNTsKICB0LmFycm93aGVhZGxlZnRtb2QgPSAweDAyYzI7CiAgdC5hcnJvd2hlYWRyaWdodG1vZCA9IDB4MDJjMzsKICB0LmFycm93aGVhZHVwbW9kID0gMHgwMmM0OwogIHQuYXJyb3dob3JpemV4ID0gMHhmOGU3OwogIHQuYXJyb3dsZWZ0ID0gMHgyMTkwOwogIHQuYXJyb3dsZWZ0ZGJsID0gMHgyMWQwOwogIHQuYXJyb3dsZWZ0ZGJsc3Ryb2tlID0gMHgyMWNkOwogIHQuYXJyb3dsZWZ0b3ZlcnJpZ2h0ID0gMHgyMWM2OwogIHQuYXJyb3dsZWZ0d2hpdGUgPSAweDIxZTY7CiAgdC5hcnJvd3JpZ2h0ID0gMHgyMTkyOwogIHQuYXJyb3dyaWdodGRibHN0cm9rZSA9IDB4MjFjZjsKICB0LmFycm93cmlnaHRoZWF2eSA9IDB4Mjc5ZTsKICB0LmFycm93cmlnaHRvdmVybGVmdCA9IDB4MjFjNDsKICB0LmFycm93cmlnaHR3aGl0ZSA9IDB4MjFlODsKICB0LmFycm93dGFibGVmdCA9IDB4MjFlNDsKICB0LmFycm93dGFicmlnaHQgPSAweDIxZTU7CiAgdC5hcnJvd3VwID0gMHgyMTkxOwogIHQuYXJyb3d1cGRuID0gMHgyMTk1OwogIHQuYXJyb3d1cGRuYnNlID0gMHgyMWE4OwogIHQuYXJyb3d1cGRvd25iYXNlID0gMHgyMWE4OwogIHQuYXJyb3d1cGxlZnQgPSAweDIxOTY7CiAgdC5hcnJvd3VwbGVmdG9mZG93biA9IDB4MjFjNTsKICB0LmFycm93dXByaWdodCA9IDB4MjE5NzsKICB0LmFycm93dXB3aGl0ZSA9IDB4MjFlNzsKICB0LmFycm93dmVydGV4ID0gMHhmOGU2OwogIHQuYXNjaWljaXJjdW0gPSAweDAwNWU7CiAgdC5hc2NpaWNpcmN1bW1vbm9zcGFjZSA9IDB4ZmYzZTsKICB0LmFzY2lpdGlsZGUgPSAweDAwN2U7CiAgdC5hc2NpaXRpbGRlbW9ub3NwYWNlID0gMHhmZjVlOwogIHQuYXNjcmlwdCA9IDB4MDI1MTsKICB0LmFzY3JpcHR0dXJuZWQgPSAweDAyNTI7CiAgdC5hc21hbGxoaXJhZ2FuYSA9IDB4MzA0MTsKICB0LmFzbWFsbGthdGFrYW5hID0gMHgzMGExOwogIHQuYXNtYWxsa2F0YWthbmFoYWxmd2lkdGggPSAweGZmNjc7CiAgdC5hc3RlcmlzayA9IDB4MDAyYTsKICB0LmFzdGVyaXNrYWx0b25lYXJhYmljID0gMHgwNjZkOwogIHQuYXN0ZXJpc2thcmFiaWMgPSAweDA2NmQ7CiAgdC5hc3Rlcmlza21hdGggPSAweDIyMTc7CiAgdC5hc3Rlcmlza21vbm9zcGFjZSA9IDB4ZmYwYTsKICB0LmFzdGVyaXNrc21hbGwgPSAweGZlNjE7CiAgdC5hc3RlcmlzbSA9IDB4MjA0MjsKICB0LmFzdXBlcmlvciA9IDB4ZjZlOTsKICB0LmFzeW1wdG90aWNhbGx5ZXF1YWwgPSAweDIyNDM7CiAgdC5hdCA9IDB4MDA0MDsKICB0LmF0aWxkZSA9IDB4MDBlMzsKICB0LmF0bW9ub3NwYWNlID0gMHhmZjIwOwogIHQuYXRzbWFsbCA9IDB4ZmU2YjsKICB0LmF0dXJuZWQgPSAweDAyNTA7CiAgdC5hdWJlbmdhbGkgPSAweDA5OTQ7CiAgdC5hdWJvcG9tb2ZvID0gMHgzMTIwOwogIHQuYXVkZXZhID0gMHgwOTE0OwogIHQuYXVndWphcmF0aSA9IDB4MGE5NDsKICB0LmF1Z3VybXVraGkgPSAweDBhMTQ7CiAgdC5hdWxlbmd0aG1hcmtiZW5nYWxpID0gMHgwOWQ3OwogIHQuYXVtYXRyYWd1cm11a2hpID0gMHgwYTRjOwogIHQuYXV2b3dlbHNpZ25iZW5nYWxpID0gMHgwOWNjOwogIHQuYXV2b3dlbHNpZ25kZXZhID0gMHgwOTRjOwogIHQuYXV2b3dlbHNpZ25ndWphcmF0aSA9IDB4MGFjYzsKICB0LmF2YWdyYWhhZGV2YSA9IDB4MDkzZDsKICB0LmF5YmFybWVuaWFuID0gMHgwNTYxOwogIHQuYXlpbiA9IDB4MDVlMjsKICB0LmF5aW5hbHRvbmVoZWJyZXcgPSAweGZiMjA7CiAgdC5heWluaGVicmV3ID0gMHgwNWUyOwogIHQuYiA9IDB4MDA2MjsKICB0LmJhYmVuZ2FsaSA9IDB4MDlhYzsKICB0LmJhY2tzbGFzaCA9IDB4MDA1YzsKICB0LmJhY2tzbGFzaG1vbm9zcGFjZSA9IDB4ZmYzYzsKICB0LmJhZGV2YSA9IDB4MDkyYzsKICB0LmJhZ3VqYXJhdGkgPSAweDBhYWM7CiAgdC5iYWd1cm11a2hpID0gMHgwYTJjOwogIHQuYmFoaXJhZ2FuYSA9IDB4MzA3MDsKICB0LmJhaHR0aGFpID0gMHgwZTNmOwogIHQuYmFrYXRha2FuYSA9IDB4MzBkMDsKICB0LmJhciA9IDB4MDA3YzsKICB0LmJhcm1vbm9zcGFjZSA9IDB4ZmY1YzsKICB0LmJib3BvbW9mbyA9IDB4MzEwNTsKICB0LmJjaXJjbGUgPSAweDI0ZDE7CiAgdC5iZG90YWNjZW50ID0gMHgxZTAzOwogIHQuYmRvdGJlbG93ID0gMHgxZTA1OwogIHQuYmVhbWVkc2l4dGVlbnRobm90ZXMgPSAweDI2NmM7CiAgdC5iZWNhdXNlID0gMHgyMjM1OwogIHQuYmVjeXJpbGxpYyA9IDB4MDQzMTsKICB0LmJlaGFyYWJpYyA9IDB4MDYyODsKICB0LmJlaGZpbmFsYXJhYmljID0gMHhmZTkwOwogIHQuYmVoaW5pdGlhbGFyYWJpYyA9IDB4ZmU5MTsKICB0LmJlaGlyYWdhbmEgPSAweDMwNzk7CiAgdC5iZWhtZWRpYWxhcmFiaWMgPSAweGZlOTI7CiAgdC5iZWhtZWVtaW5pdGlhbGFyYWJpYyA9IDB4ZmM5ZjsKICB0LmJlaG1lZW1pc29sYXRlZGFyYWJpYyA9IDB4ZmMwODsKICB0LmJlaG5vb25maW5hbGFyYWJpYyA9IDB4ZmM2ZDsKICB0LmJla2F0YWthbmEgPSAweDMwZDk7CiAgdC5iZW5hcm1lbmlhbiA9IDB4MDU2MjsKICB0LmJldCA9IDB4MDVkMTsKICB0LmJldGEgPSAweDAzYjI7CiAgdC5iZXRhc3ltYm9sZ3JlZWsgPSAweDAzZDA7CiAgdC5iZXRkYWdlc2ggPSAweGZiMzE7CiAgdC5iZXRkYWdlc2hoZWJyZXcgPSAweGZiMzE7CiAgdC5iZXRoZWJyZXcgPSAweDA1ZDE7CiAgdC5iZXRyYWZlaGVicmV3ID0gMHhmYjRjOwogIHQuYmhhYmVuZ2FsaSA9IDB4MDlhZDsKICB0LmJoYWRldmEgPSAweDA5MmQ7CiAgdC5iaGFndWphcmF0aSA9IDB4MGFhZDsKICB0LmJoYWd1cm11a2hpID0gMHgwYTJkOwogIHQuYmhvb2sgPSAweDAyNTM7CiAgdC5iaWhpcmFnYW5hID0gMHgzMDczOwogIHQuYmlrYXRha2FuYSA9IDB4MzBkMzsKICB0LmJpbGFiaWFsY2xpY2sgPSAweDAyOTg7CiAgdC5iaW5kaWd1cm11a2hpID0gMHgwYTAyOwogIHQuYmlydXNxdWFyZSA9IDB4MzMzMTsKICB0LmJsYWNrY2lyY2xlID0gMHgyNWNmOwogIHQuYmxhY2tkaWFtb25kID0gMHgyNWM2OwogIHQuYmxhY2tkb3ducG9pbnRpbmd0cmlhbmdsZSA9IDB4MjViYzsKICB0LmJsYWNrbGVmdHBvaW50aW5ncG9pbnRlciA9IDB4MjVjNDsKICB0LmJsYWNrbGVmdHBvaW50aW5ndHJpYW5nbGUgPSAweDI1YzA7CiAgdC5ibGFja2xlbnRpY3VsYXJicmFja2V0bGVmdCA9IDB4MzAxMDsKICB0LmJsYWNrbGVudGljdWxhcmJyYWNrZXRsZWZ0dmVydGljYWwgPSAweGZlM2I7CiAgdC5ibGFja2xlbnRpY3VsYXJicmFja2V0cmlnaHQgPSAweDMwMTE7CiAgdC5ibGFja2xlbnRpY3VsYXJicmFja2V0cmlnaHR2ZXJ0aWNhbCA9IDB4ZmUzYzsKICB0LmJsYWNrbG93ZXJsZWZ0dHJpYW5nbGUgPSAweDI1ZTM7CiAgdC5ibGFja2xvd2VycmlnaHR0cmlhbmdsZSA9IDB4MjVlMjsKICB0LmJsYWNrcmVjdGFuZ2xlID0gMHgyNWFjOwogIHQuYmxhY2tyaWdodHBvaW50aW5ncG9pbnRlciA9IDB4MjViYTsKICB0LmJsYWNrcmlnaHRwb2ludGluZ3RyaWFuZ2xlID0gMHgyNWI2OwogIHQuYmxhY2tzbWFsbHNxdWFyZSA9IDB4MjVhYTsKICB0LmJsYWNrc21pbGluZ2ZhY2UgPSAweDI2M2I7CiAgdC5ibGFja3NxdWFyZSA9IDB4MjVhMDsKICB0LmJsYWNrc3RhciA9IDB4MjYwNTsKICB0LmJsYWNrdXBwZXJsZWZ0dHJpYW5nbGUgPSAweDI1ZTQ7CiAgdC5ibGFja3VwcGVycmlnaHR0cmlhbmdsZSA9IDB4MjVlNTsKICB0LmJsYWNrdXBwb2ludGluZ3NtYWxsdHJpYW5nbGUgPSAweDI1YjQ7CiAgdC5ibGFja3VwcG9pbnRpbmd0cmlhbmdsZSA9IDB4MjViMjsKICB0LmJsYW5rID0gMHgyNDIzOwogIHQuYmxpbmViZWxvdyA9IDB4MWUwNzsKICB0LmJsb2NrID0gMHgyNTg4OwogIHQuYm1vbm9zcGFjZSA9IDB4ZmY0MjsKICB0LmJvYmFpbWFpdGhhaSA9IDB4MGUxYTsKICB0LmJvaGlyYWdhbmEgPSAweDMwN2M7CiAgdC5ib2thdGFrYW5hID0gMHgzMGRjOwogIHQuYnBhcmVuID0gMHgyNDlkOwogIHQuYnFzcXVhcmUgPSAweDMzYzM7CiAgdC5icmFjZWV4ID0gMHhmOGY0OwogIHQuYnJhY2VsZWZ0ID0gMHgwMDdiOwogIHQuYnJhY2VsZWZ0YnQgPSAweGY4ZjM7CiAgdC5icmFjZWxlZnRtaWQgPSAweGY4ZjI7CiAgdC5icmFjZWxlZnRtb25vc3BhY2UgPSAweGZmNWI7CiAgdC5icmFjZWxlZnRzbWFsbCA9IDB4ZmU1YjsKICB0LmJyYWNlbGVmdHRwID0gMHhmOGYxOwogIHQuYnJhY2VsZWZ0dmVydGljYWwgPSAweGZlMzc7CiAgdC5icmFjZXJpZ2h0ID0gMHgwMDdkOwogIHQuYnJhY2VyaWdodGJ0ID0gMHhmOGZlOwogIHQuYnJhY2VyaWdodG1pZCA9IDB4ZjhmZDsKICB0LmJyYWNlcmlnaHRtb25vc3BhY2UgPSAweGZmNWQ7CiAgdC5icmFjZXJpZ2h0c21hbGwgPSAweGZlNWM7CiAgdC5icmFjZXJpZ2h0dHAgPSAweGY4ZmM7CiAgdC5icmFjZXJpZ2h0dmVydGljYWwgPSAweGZlMzg7CiAgdC5icmFja2V0bGVmdCA9IDB4MDA1YjsKICB0LmJyYWNrZXRsZWZ0YnQgPSAweGY4ZjA7CiAgdC5icmFja2V0bGVmdGV4ID0gMHhmOGVmOwogIHQuYnJhY2tldGxlZnRtb25vc3BhY2UgPSAweGZmM2I7CiAgdC5icmFja2V0bGVmdHRwID0gMHhmOGVlOwogIHQuYnJhY2tldHJpZ2h0ID0gMHgwMDVkOwogIHQuYnJhY2tldHJpZ2h0YnQgPSAweGY4ZmI7CiAgdC5icmFja2V0cmlnaHRleCA9IDB4ZjhmYTsKICB0LmJyYWNrZXRyaWdodG1vbm9zcGFjZSA9IDB4ZmYzZDsKICB0LmJyYWNrZXRyaWdodHRwID0gMHhmOGY5OwogIHQuYnJldmUgPSAweDAyZDg7CiAgdC5icmV2ZWJlbG93Y21iID0gMHgwMzJlOwogIHQuYnJldmVjbWIgPSAweDAzMDY7CiAgdC5icmV2ZWludmVydGVkYmVsb3djbWIgPSAweDAzMmY7CiAgdC5icmV2ZWludmVydGVkY21iID0gMHgwMzExOwogIHQuYnJldmVpbnZlcnRlZGRvdWJsZWNtYiA9IDB4MDM2MTsKICB0LmJyaWRnZWJlbG93Y21iID0gMHgwMzJhOwogIHQuYnJpZGdlaW52ZXJ0ZWRiZWxvd2NtYiA9IDB4MDMzYTsKICB0LmJyb2tlbmJhciA9IDB4MDBhNjsKICB0LmJzdHJva2UgPSAweDAxODA7CiAgdC5ic3VwZXJpb3IgPSAweGY2ZWE7CiAgdC5idG9wYmFyID0gMHgwMTgzOwogIHQuYnVoaXJhZ2FuYSA9IDB4MzA3NjsKICB0LmJ1a2F0YWthbmEgPSAweDMwZDY7CiAgdC5idWxsZXQgPSAweDIwMjI7CiAgdC5idWxsZXRpbnZlcnNlID0gMHgyNWQ4OwogIHQuYnVsbGV0b3BlcmF0b3IgPSAweDIyMTk7CiAgdC5idWxsc2V5ZSA9IDB4MjVjZTsKICB0LmMgPSAweDAwNjM7CiAgdC5jYWFybWVuaWFuID0gMHgwNTZlOwogIHQuY2FiZW5nYWxpID0gMHgwOTlhOwogIHQuY2FjdXRlID0gMHgwMTA3OwogIHQuY2FkZXZhID0gMHgwOTFhOwogIHQuY2FndWphcmF0aSA9IDB4MGE5YTsKICB0LmNhZ3VybXVraGkgPSAweDBhMWE7CiAgdC5jYWxzcXVhcmUgPSAweDMzODg7CiAgdC5jYW5kcmFiaW5kdWJlbmdhbGkgPSAweDA5ODE7CiAgdC5jYW5kcmFiaW5kdWNtYiA9IDB4MDMxMDsKICB0LmNhbmRyYWJpbmR1ZGV2YSA9IDB4MDkwMTsKICB0LmNhbmRyYWJpbmR1Z3VqYXJhdGkgPSAweDBhODE7CiAgdC5jYXBzbG9jayA9IDB4MjFlYTsKICB0LmNhcmVvZiA9IDB4MjEwNTsKICB0LmNhcm9uID0gMHgwMmM3OwogIHQuY2Fyb25iZWxvd2NtYiA9IDB4MDMyYzsKICB0LmNhcm9uY21iID0gMHgwMzBjOwogIHQuY2FycmlhZ2VyZXR1cm4gPSAweDIxYjU7CiAgdC5jYm9wb21vZm8gPSAweDMxMTg7CiAgdC5jY2Fyb24gPSAweDAxMGQ7CiAgdC5jY2VkaWxsYSA9IDB4MDBlNzsKICB0LmNjZWRpbGxhYWN1dGUgPSAweDFlMDk7CiAgdC5jY2lyY2xlID0gMHgyNGQyOwogIHQuY2NpcmN1bWZsZXggPSAweDAxMDk7CiAgdC5jY3VybCA9IDB4MDI1NTsKICB0LmNkb3QgPSAweDAxMGI7CiAgdC5jZG90YWNjZW50ID0gMHgwMTBiOwogIHQuY2RzcXVhcmUgPSAweDMzYzU7CiAgdC5jZWRpbGxhID0gMHgwMGI4OwogIHQuY2VkaWxsYWNtYiA9IDB4MDMyNzsKICB0LmNlbnQgPSAweDAwYTI7CiAgdC5jZW50aWdyYWRlID0gMHgyMTAzOwogIHQuY2VudGluZmVyaW9yID0gMHhmNmRmOwogIHQuY2VudG1vbm9zcGFjZSA9IDB4ZmZlMDsKICB0LmNlbnRvbGRzdHlsZSA9IDB4ZjdhMjsKICB0LmNlbnRzdXBlcmlvciA9IDB4ZjZlMDsKICB0LmNoYWFybWVuaWFuID0gMHgwNTc5OwogIHQuY2hhYmVuZ2FsaSA9IDB4MDk5YjsKICB0LmNoYWRldmEgPSAweDA5MWI7CiAgdC5jaGFndWphcmF0aSA9IDB4MGE5YjsKICB0LmNoYWd1cm11a2hpID0gMHgwYTFiOwogIHQuY2hib3BvbW9mbyA9IDB4MzExNDsKICB0LmNoZWFia2hhc2lhbmN5cmlsbGljID0gMHgwNGJkOwogIHQuY2hlY2ttYXJrID0gMHgyNzEzOwogIHQuY2hlY3lyaWxsaWMgPSAweDA0NDc7CiAgdC5jaGVkZXNjZW5kZXJhYmtoYXNpYW5jeXJpbGxpYyA9IDB4MDRiZjsKICB0LmNoZWRlc2NlbmRlcmN5cmlsbGljID0gMHgwNGI3OwogIHQuY2hlZGllcmVzaXNjeXJpbGxpYyA9IDB4MDRmNTsKICB0LmNoZWhhcm1lbmlhbiA9IDB4MDU3MzsKICB0LmNoZWtoYWthc3NpYW5jeXJpbGxpYyA9IDB4MDRjYzsKICB0LmNoZXZlcnRpY2Fsc3Ryb2tlY3lyaWxsaWMgPSAweDA0Yjk7CiAgdC5jaGkgPSAweDAzYzc7CiAgdC5jaGlldWNoYWNpcmNsZWtvcmVhbiA9IDB4MzI3NzsKICB0LmNoaWV1Y2hhcGFyZW5rb3JlYW4gPSAweDMyMTc7CiAgdC5jaGlldWNoY2lyY2xla29yZWFuID0gMHgzMjY5OwogIHQuY2hpZXVjaGtvcmVhbiA9IDB4MzE0YTsKICB0LmNoaWV1Y2hwYXJlbmtvcmVhbiA9IDB4MzIwOTsKICB0LmNob2NoYW5ndGhhaSA9IDB4MGUwYTsKICB0LmNob2NoYW50aGFpID0gMHgwZTA4OwogIHQuY2hvY2hpbmd0aGFpID0gMHgwZTA5OwogIHQuY2hvY2hvZXRoYWkgPSAweDBlMGM7CiAgdC5jaG9vayA9IDB4MDE4ODsKICB0LmNpZXVjYWNpcmNsZWtvcmVhbiA9IDB4MzI3NjsKICB0LmNpZXVjYXBhcmVua29yZWFuID0gMHgzMjE2OwogIHQuY2lldWNjaXJjbGVrb3JlYW4gPSAweDMyNjg7CiAgdC5jaWV1Y2tvcmVhbiA9IDB4MzE0ODsKICB0LmNpZXVjcGFyZW5rb3JlYW4gPSAweDMyMDg7CiAgdC5jaWV1Y3VwYXJlbmtvcmVhbiA9IDB4MzIxYzsKICB0LmNpcmNsZSA9IDB4MjVjYjsKICB0LmNpcmNsZWNvcHlydCA9IDB4MDBhOTsKICB0LmNpcmNsZW11bHRpcGx5ID0gMHgyMjk3OwogIHQuY2lyY2xlb3QgPSAweDIyOTk7CiAgdC5jaXJjbGVwbHVzID0gMHgyMjk1OwogIHQuY2lyY2xlcG9zdGFsbWFyayA9IDB4MzAzNjsKICB0LmNpcmNsZXdpdGhsZWZ0aGFsZmJsYWNrID0gMHgyNWQwOwogIHQuY2lyY2xld2l0aHJpZ2h0aGFsZmJsYWNrID0gMHgyNWQxOwogIHQuY2lyY3VtZmxleCA9IDB4MDJjNjsKICB0LmNpcmN1bWZsZXhiZWxvd2NtYiA9IDB4MDMyZDsKICB0LmNpcmN1bWZsZXhjbWIgPSAweDAzMDI7CiAgdC5jbGVhciA9IDB4MjMyNzsKICB0LmNsaWNrYWx2ZW9sYXIgPSAweDAxYzI7CiAgdC5jbGlja2RlbnRhbCA9IDB4MDFjMDsKICB0LmNsaWNrbGF0ZXJhbCA9IDB4MDFjMTsKICB0LmNsaWNrcmV0cm9mbGV4ID0gMHgwMWMzOwogIHQuY2x1YiA9IDB4MjY2MzsKICB0LmNsdWJzdWl0YmxhY2sgPSAweDI2NjM7CiAgdC5jbHVic3VpdHdoaXRlID0gMHgyNjY3OwogIHQuY21jdWJlZHNxdWFyZSA9IDB4MzNhNDsKICB0LmNtb25vc3BhY2UgPSAweGZmNDM7CiAgdC5jbXNxdWFyZWRzcXVhcmUgPSAweDMzYTA7CiAgdC5jb2FybWVuaWFuID0gMHgwNTgxOwogIHQuY29sb24gPSAweDAwM2E7CiAgdC5jb2xvbm1vbmV0YXJ5ID0gMHgyMGExOwogIHQuY29sb25tb25vc3BhY2UgPSAweGZmMWE7CiAgdC5jb2xvbnNpZ24gPSAweDIwYTE7CiAgdC5jb2xvbnNtYWxsID0gMHhmZTU1OwogIHQuY29sb250cmlhbmd1bGFyaGFsZm1vZCA9IDB4MDJkMTsKICB0LmNvbG9udHJpYW5ndWxhcm1vZCA9IDB4MDJkMDsKICB0LmNvbW1hID0gMHgwMDJjOwogIHQuY29tbWFhYm92ZWNtYiA9IDB4MDMxMzsKICB0LmNvbW1hYWJvdmVyaWdodGNtYiA9IDB4MDMxNTsKICB0LmNvbW1hYWNjZW50ID0gMHhmNmMzOwogIHQuY29tbWFhcmFiaWMgPSAweDA2MGM7CiAgdC5jb21tYWFybWVuaWFuID0gMHgwNTVkOwogIHQuY29tbWFpbmZlcmlvciA9IDB4ZjZlMTsKICB0LmNvbW1hbW9ub3NwYWNlID0gMHhmZjBjOwogIHQuY29tbWFyZXZlcnNlZGFib3ZlY21iID0gMHgwMzE0OwogIHQuY29tbWFyZXZlcnNlZG1vZCA9IDB4MDJiZDsKICB0LmNvbW1hc21hbGwgPSAweGZlNTA7CiAgdC5jb21tYXN1cGVyaW9yID0gMHhmNmUyOwogIHQuY29tbWF0dXJuZWRhYm92ZWNtYiA9IDB4MDMxMjsKICB0LmNvbW1hdHVybmVkbW9kID0gMHgwMmJiOwogIHQuY29tcGFzcyA9IDB4MjYzYzsKICB0LmNvbmdydWVudCA9IDB4MjI0NTsKICB0LmNvbnRvdXJpbnRlZ3JhbCA9IDB4MjIyZTsKICB0LmNvbnRyb2wgPSAweDIzMDM7CiAgdC5jb250cm9sQUNLID0gMHgwMDA2OwogIHQuY29udHJvbEJFTCA9IDB4MDAwNzsKICB0LmNvbnRyb2xCUyA9IDB4MDAwODsKICB0LmNvbnRyb2xDQU4gPSAweDAwMTg7CiAgdC5jb250cm9sQ1IgPSAweDAwMGQ7CiAgdC5jb250cm9sREMxID0gMHgwMDExOwogIHQuY29udHJvbERDMiA9IDB4MDAxMjsKICB0LmNvbnRyb2xEQzMgPSAweDAwMTM7CiAgdC5jb250cm9sREM0ID0gMHgwMDE0OwogIHQuY29udHJvbERFTCA9IDB4MDA3ZjsKICB0LmNvbnRyb2xETEUgPSAweDAwMTA7CiAgdC5jb250cm9sRU0gPSAweDAwMTk7CiAgdC5jb250cm9sRU5RID0gMHgwMDA1OwogIHQuY29udHJvbEVPVCA9IDB4MDAwNDsKICB0LmNvbnRyb2xFU0MgPSAweDAwMWI7CiAgdC5jb250cm9sRVRCID0gMHgwMDE3OwogIHQuY29udHJvbEVUWCA9IDB4MDAwMzsKICB0LmNvbnRyb2xGRiA9IDB4MDAwYzsKICB0LmNvbnRyb2xGUyA9IDB4MDAxYzsKICB0LmNvbnRyb2xHUyA9IDB4MDAxZDsKICB0LmNvbnRyb2xIVCA9IDB4MDAwOTsKICB0LmNvbnRyb2xMRiA9IDB4MDAwYTsKICB0LmNvbnRyb2xOQUsgPSAweDAwMTU7CiAgdC5jb250cm9sTlVMTCA9IDB4MDAwMDsKICB0LmNvbnRyb2xSUyA9IDB4MDAxZTsKICB0LmNvbnRyb2xTSSA9IDB4MDAwZjsKICB0LmNvbnRyb2xTTyA9IDB4MDAwZTsKICB0LmNvbnRyb2xTT1QgPSAweDAwMDI7CiAgdC5jb250cm9sU1RYID0gMHgwMDAxOwogIHQuY29udHJvbFNVQiA9IDB4MDAxYTsKICB0LmNvbnRyb2xTWU4gPSAweDAwMTY7CiAgdC5jb250cm9sVVMgPSAweDAwMWY7CiAgdC5jb250cm9sVlQgPSAweDAwMGI7CiAgdC5jb3B5cmlnaHQgPSAweDAwYTk7CiAgdC5jb3B5cmlnaHRzYW5zID0gMHhmOGU5OwogIHQuY29weXJpZ2h0c2VyaWYgPSAweGY2ZDk7CiAgdC5jb3JuZXJicmFja2V0bGVmdCA9IDB4MzAwYzsKICB0LmNvcm5lcmJyYWNrZXRsZWZ0aGFsZndpZHRoID0gMHhmZjYyOwogIHQuY29ybmVyYnJhY2tldGxlZnR2ZXJ0aWNhbCA9IDB4ZmU0MTsKICB0LmNvcm5lcmJyYWNrZXRyaWdodCA9IDB4MzAwZDsKICB0LmNvcm5lcmJyYWNrZXRyaWdodGhhbGZ3aWR0aCA9IDB4ZmY2MzsKICB0LmNvcm5lcmJyYWNrZXRyaWdodHZlcnRpY2FsID0gMHhmZTQyOwogIHQuY29ycG9yYXRpb25zcXVhcmUgPSAweDMzN2Y7CiAgdC5jb3NxdWFyZSA9IDB4MzNjNzsKICB0LmNvdmVya2dzcXVhcmUgPSAweDMzYzY7CiAgdC5jcGFyZW4gPSAweDI0OWU7CiAgdC5jcnV6ZWlybyA9IDB4MjBhMjsKICB0LmNzdHJldGNoZWQgPSAweDAyOTc7CiAgdC5jdXJseWFuZCA9IDB4MjJjZjsKICB0LmN1cmx5b3IgPSAweDIyY2U7CiAgdC5jdXJyZW5jeSA9IDB4MDBhNDsKICB0LmN5ckJyZXZlID0gMHhmNmQxOwogIHQuY3lyRmxleCA9IDB4ZjZkMjsKICB0LmN5cmJyZXZlID0gMHhmNmQ0OwogIHQuY3lyZmxleCA9IDB4ZjZkNTsKICB0LmQgPSAweDAwNjQ7CiAgdC5kYWFybWVuaWFuID0gMHgwNTY0OwogIHQuZGFiZW5nYWxpID0gMHgwOWE2OwogIHQuZGFkYXJhYmljID0gMHgwNjM2OwogIHQuZGFkZXZhID0gMHgwOTI2OwogIHQuZGFkZmluYWxhcmFiaWMgPSAweGZlYmU7CiAgdC5kYWRpbml0aWFsYXJhYmljID0gMHhmZWJmOwogIHQuZGFkbWVkaWFsYXJhYmljID0gMHhmZWMwOwogIHQuZGFnZXNoID0gMHgwNWJjOwogIHQuZGFnZXNoaGVicmV3ID0gMHgwNWJjOwogIHQuZGFnZ2VyID0gMHgyMDIwOwogIHQuZGFnZ2VyZGJsID0gMHgyMDIxOwogIHQuZGFndWphcmF0aSA9IDB4MGFhNjsKICB0LmRhZ3VybXVraGkgPSAweDBhMjY7CiAgdC5kYWhpcmFnYW5hID0gMHgzMDYwOwogIHQuZGFrYXRha2FuYSA9IDB4MzBjMDsKICB0LmRhbGFyYWJpYyA9IDB4MDYyZjsKICB0LmRhbGV0ID0gMHgwNWQzOwogIHQuZGFsZXRkYWdlc2ggPSAweGZiMzM7CiAgdC5kYWxldGRhZ2VzaGhlYnJldyA9IDB4ZmIzMzsKICB0LmRhbGV0aGVicmV3ID0gMHgwNWQzOwogIHQuZGFsZmluYWxhcmFiaWMgPSAweGZlYWE7CiAgdC5kYW1tYWFyYWJpYyA9IDB4MDY0ZjsKICB0LmRhbW1hbG93YXJhYmljID0gMHgwNjRmOwogIHQuZGFtbWF0YW5hbHRvbmVhcmFiaWMgPSAweDA2NGM7CiAgdC5kYW1tYXRhbmFyYWJpYyA9IDB4MDY0YzsKICB0LmRhbmRhID0gMHgwOTY0OwogIHQuZGFyZ2FoZWJyZXcgPSAweDA1YTc7CiAgdC5kYXJnYWxlZnRoZWJyZXcgPSAweDA1YTc7CiAgdC5kYXNpYXBuZXVtYXRhY3lyaWxsaWNjbWIgPSAweDA0ODU7CiAgdC5kYmxHcmF2ZSA9IDB4ZjZkMzsKICB0LmRibGFuZ2xlYnJhY2tldGxlZnQgPSAweDMwMGE7CiAgdC5kYmxhbmdsZWJyYWNrZXRsZWZ0dmVydGljYWwgPSAweGZlM2Q7CiAgdC5kYmxhbmdsZWJyYWNrZXRyaWdodCA9IDB4MzAwYjsKICB0LmRibGFuZ2xlYnJhY2tldHJpZ2h0dmVydGljYWwgPSAweGZlM2U7CiAgdC5kYmxhcmNoaW52ZXJ0ZWRiZWxvd2NtYiA9IDB4MDMyYjsKICB0LmRibGFycm93bGVmdCA9IDB4MjFkNDsKICB0LmRibGFycm93cmlnaHQgPSAweDIxZDI7CiAgdC5kYmxkYW5kYSA9IDB4MDk2NTsKICB0LmRibGdyYXZlID0gMHhmNmQ2OwogIHQuZGJsZ3JhdmVjbWIgPSAweDAzMGY7CiAgdC5kYmxpbnRlZ3JhbCA9IDB4MjIyYzsKICB0LmRibGxvd2xpbmUgPSAweDIwMTc7CiAgdC5kYmxsb3dsaW5lY21iID0gMHgwMzMzOwogIHQuZGJsb3ZlcmxpbmVjbWIgPSAweDAzM2Y7CiAgdC5kYmxwcmltZW1vZCA9IDB4MDJiYTsKICB0LmRibHZlcnRpY2FsYmFyID0gMHgyMDE2OwogIHQuZGJsdmVydGljYWxsaW5lYWJvdmVjbWIgPSAweDAzMGU7CiAgdC5kYm9wb21vZm8gPSAweDMxMDk7CiAgdC5kYnNxdWFyZSA9IDB4MzNjODsKICB0LmRjYXJvbiA9IDB4MDEwZjsKICB0LmRjZWRpbGxhID0gMHgxZTExOwogIHQuZGNpcmNsZSA9IDB4MjRkMzsKICB0LmRjaXJjdW1mbGV4YmVsb3cgPSAweDFlMTM7CiAgdC5kY3JvYXQgPSAweDAxMTE7CiAgdC5kZGFiZW5nYWxpID0gMHgwOWExOwogIHQuZGRhZGV2YSA9IDB4MDkyMTsKICB0LmRkYWd1amFyYXRpID0gMHgwYWExOwogIHQuZGRhZ3VybXVraGkgPSAweDBhMjE7CiAgdC5kZGFsYXJhYmljID0gMHgwNjg4OwogIHQuZGRhbGZpbmFsYXJhYmljID0gMHhmYjg5OwogIHQuZGRkaGFkZXZhID0gMHgwOTVjOwogIHQuZGRoYWJlbmdhbGkgPSAweDA5YTI7CiAgdC5kZGhhZGV2YSA9IDB4MDkyMjsKICB0LmRkaGFndWphcmF0aSA9IDB4MGFhMjsKICB0LmRkaGFndXJtdWtoaSA9IDB4MGEyMjsKICB0LmRkb3RhY2NlbnQgPSAweDFlMGI7CiAgdC5kZG90YmVsb3cgPSAweDFlMGQ7CiAgdC5kZWNpbWFsc2VwYXJhdG9yYXJhYmljID0gMHgwNjZiOwogIHQuZGVjaW1hbHNlcGFyYXRvcnBlcnNpYW4gPSAweDA2NmI7CiAgdC5kZWN5cmlsbGljID0gMHgwNDM0OwogIHQuZGVncmVlID0gMHgwMGIwOwogIHQuZGVoaWhlYnJldyA9IDB4MDVhZDsKICB0LmRlaGlyYWdhbmEgPSAweDMwNjc7CiAgdC5kZWljb3B0aWMgPSAweDAzZWY7CiAgdC5kZWthdGFrYW5hID0gMHgzMGM3OwogIHQuZGVsZXRlbGVmdCA9IDB4MjMyYjsKICB0LmRlbGV0ZXJpZ2h0ID0gMHgyMzI2OwogIHQuZGVsdGEgPSAweDAzYjQ7CiAgdC5kZWx0YXR1cm5lZCA9IDB4MDE4ZDsKICB0LmRlbm9taW5hdG9ybWludXNvbmVudW1lcmF0b3JiZW5nYWxpID0gMHgwOWY4OwogIHQuZGV6aCA9IDB4MDJhNDsKICB0LmRoYWJlbmdhbGkgPSAweDA5YTc7CiAgdC5kaGFkZXZhID0gMHgwOTI3OwogIHQuZGhhZ3VqYXJhdGkgPSAweDBhYTc7CiAgdC5kaGFndXJtdWtoaSA9IDB4MGEyNzsKICB0LmRob29rID0gMHgwMjU3OwogIHQuZGlhbHl0aWthdG9ub3MgPSAweDAzODU7CiAgdC5kaWFseXRpa2F0b25vc2NtYiA9IDB4MDM0NDsKICB0LmRpYW1vbmQgPSAweDI2NjY7CiAgdC5kaWFtb25kc3VpdHdoaXRlID0gMHgyNjYyOwogIHQuZGllcmVzaXMgPSAweDAwYTg7CiAgdC5kaWVyZXNpc2FjdXRlID0gMHhmNmQ3OwogIHQuZGllcmVzaXNiZWxvd2NtYiA9IDB4MDMyNDsKICB0LmRpZXJlc2lzY21iID0gMHgwMzA4OwogIHQuZGllcmVzaXNncmF2ZSA9IDB4ZjZkODsKICB0LmRpZXJlc2lzdG9ub3MgPSAweDAzODU7CiAgdC5kaWhpcmFnYW5hID0gMHgzMDYyOwogIHQuZGlrYXRha2FuYSA9IDB4MzBjMjsKICB0LmRpdHRvbWFyayA9IDB4MzAwMzsKICB0LmRpdmlkZSA9IDB4MDBmNzsKICB0LmRpdmlkZXMgPSAweDIyMjM7CiAgdC5kaXZpc2lvbnNsYXNoID0gMHgyMjE1OwogIHQuZGplY3lyaWxsaWMgPSAweDA0NTI7CiAgdC5ka3NoYWRlID0gMHgyNTkzOwogIHQuZGxpbmViZWxvdyA9IDB4MWUwZjsKICB0LmRsc3F1YXJlID0gMHgzMzk3OwogIHQuZG1hY3JvbiA9IDB4MDExMTsKICB0LmRtb25vc3BhY2UgPSAweGZmNDQ7CiAgdC5kbmJsb2NrID0gMHgyNTg0OwogIHQuZG9jaGFkYXRoYWkgPSAweDBlMGU7CiAgdC5kb2Rla3RoYWkgPSAweDBlMTQ7CiAgdC5kb2hpcmFnYW5hID0gMHgzMDY5OwogIHQuZG9rYXRha2FuYSA9IDB4MzBjOTsKICB0LmRvbGxhciA9IDB4MDAyNDsKICB0LmRvbGxhcmluZmVyaW9yID0gMHhmNmUzOwogIHQuZG9sbGFybW9ub3NwYWNlID0gMHhmZjA0OwogIHQuZG9sbGFyb2xkc3R5bGUgPSAweGY3MjQ7CiAgdC5kb2xsYXJzbWFsbCA9IDB4ZmU2OTsKICB0LmRvbGxhcnN1cGVyaW9yID0gMHhmNmU0OwogIHQuZG9uZyA9IDB4MjBhYjsKICB0LmRvcnVzcXVhcmUgPSAweDMzMjY7CiAgdC5kb3RhY2NlbnQgPSAweDAyZDk7CiAgdC5kb3RhY2NlbnRjbWIgPSAweDAzMDc7CiAgdC5kb3RiZWxvd2NtYiA9IDB4MDMyMzsKICB0LmRvdGJlbG93Y29tYiA9IDB4MDMyMzsKICB0LmRvdGthdGFrYW5hID0gMHgzMGZiOwogIHQuZG90bGVzc2kgPSAweDAxMzE7CiAgdC5kb3RsZXNzaiA9IDB4ZjZiZTsKICB0LmRvdGxlc3Nqc3Ryb2tlaG9vayA9IDB4MDI4NDsKICB0LmRvdG1hdGggPSAweDIyYzU7CiAgdC5kb3R0ZWRjaXJjbGUgPSAweDI1Y2M7CiAgdC5kb3VibGV5b2RwYXRhaCA9IDB4ZmIxZjsKICB0LmRvdWJsZXlvZHBhdGFoaGVicmV3ID0gMHhmYjFmOwogIHQuZG93bnRhY2tiZWxvd2NtYiA9IDB4MDMxZTsKICB0LmRvd250YWNrbW9kID0gMHgwMmQ1OwogIHQuZHBhcmVuID0gMHgyNDlmOwogIHQuZHN1cGVyaW9yID0gMHhmNmViOwogIHQuZHRhaWwgPSAweDAyNTY7CiAgdC5kdG9wYmFyID0gMHgwMThjOwogIHQuZHVoaXJhZ2FuYSA9IDB4MzA2NTsKICB0LmR1a2F0YWthbmEgPSAweDMwYzU7CiAgdC5keiA9IDB4MDFmMzsKICB0LmR6YWx0b25lID0gMHgwMmEzOwogIHQuZHpjYXJvbiA9IDB4MDFjNjsKICB0LmR6Y3VybCA9IDB4MDJhNTsKICB0LmR6ZWFia2hhc2lhbmN5cmlsbGljID0gMHgwNGUxOwogIHQuZHplY3lyaWxsaWMgPSAweDA0NTU7CiAgdC5kemhlY3lyaWxsaWMgPSAweDA0NWY7CiAgdC5lID0gMHgwMDY1OwogIHQuZWFjdXRlID0gMHgwMGU5OwogIHQuZWFydGggPSAweDI2NDE7CiAgdC5lYmVuZ2FsaSA9IDB4MDk4ZjsKICB0LmVib3BvbW9mbyA9IDB4MzExYzsKICB0LmVicmV2ZSA9IDB4MDExNTsKICB0LmVjYW5kcmFkZXZhID0gMHgwOTBkOwogIHQuZWNhbmRyYWd1amFyYXRpID0gMHgwYThkOwogIHQuZWNhbmRyYXZvd2Vsc2lnbmRldmEgPSAweDA5NDU7CiAgdC5lY2FuZHJhdm93ZWxzaWduZ3VqYXJhdGkgPSAweDBhYzU7CiAgdC5lY2Fyb24gPSAweDAxMWI7CiAgdC5lY2VkaWxsYWJyZXZlID0gMHgxZTFkOwogIHQuZWNoYXJtZW5pYW4gPSAweDA1NjU7CiAgdC5lY2h5aXduYXJtZW5pYW4gPSAweDA1ODc7CiAgdC5lY2lyY2xlID0gMHgyNGQ0OwogIHQuZWNpcmN1bWZsZXggPSAweDAwZWE7CiAgdC5lY2lyY3VtZmxleGFjdXRlID0gMHgxZWJmOwogIHQuZWNpcmN1bWZsZXhiZWxvdyA9IDB4MWUxOTsKICB0LmVjaXJjdW1mbGV4ZG90YmVsb3cgPSAweDFlYzc7CiAgdC5lY2lyY3VtZmxleGdyYXZlID0gMHgxZWMxOwogIHQuZWNpcmN1bWZsZXhob29rYWJvdmUgPSAweDFlYzM7CiAgdC5lY2lyY3VtZmxleHRpbGRlID0gMHgxZWM1OwogIHQuZWN5cmlsbGljID0gMHgwNDU0OwogIHQuZWRibGdyYXZlID0gMHgwMjA1OwogIHQuZWRldmEgPSAweDA5MGY7CiAgdC5lZGllcmVzaXMgPSAweDAwZWI7CiAgdC5lZG90ID0gMHgwMTE3OwogIHQuZWRvdGFjY2VudCA9IDB4MDExNzsKICB0LmVkb3RiZWxvdyA9IDB4MWViOTsKICB0LmVlZ3VybXVraGkgPSAweDBhMGY7CiAgdC5lZW1hdHJhZ3VybXVraGkgPSAweDBhNDc7CiAgdC5lZmN5cmlsbGljID0gMHgwNDQ0OwogIHQuZWdyYXZlID0gMHgwMGU4OwogIHQuZWd1amFyYXRpID0gMHgwYThmOwogIHQuZWhhcm1lbmlhbiA9IDB4MDU2NzsKICB0LmVoYm9wb21vZm8gPSAweDMxMWQ7CiAgdC5laGlyYWdhbmEgPSAweDMwNDg7CiAgdC5laG9va2Fib3ZlID0gMHgxZWJiOwogIHQuZWlib3BvbW9mbyA9IDB4MzExZjsKICB0LmVpZ2h0ID0gMHgwMDM4OwogIHQuZWlnaHRhcmFiaWMgPSAweDA2Njg7CiAgdC5laWdodGJlbmdhbGkgPSAweDA5ZWU7CiAgdC5laWdodGNpcmNsZSA9IDB4MjQ2NzsKICB0LmVpZ2h0Y2lyY2xlaW52ZXJzZXNhbnNzZXJpZiA9IDB4Mjc5MTsKICB0LmVpZ2h0ZGV2YSA9IDB4MDk2ZTsKICB0LmVpZ2h0ZWVuY2lyY2xlID0gMHgyNDcxOwogIHQuZWlnaHRlZW5wYXJlbiA9IDB4MjQ4NTsKICB0LmVpZ2h0ZWVucGVyaW9kID0gMHgyNDk5OwogIHQuZWlnaHRndWphcmF0aSA9IDB4MGFlZTsKICB0LmVpZ2h0Z3VybXVraGkgPSAweDBhNmU7CiAgdC5laWdodGhhY2thcmFiaWMgPSAweDA2Njg7CiAgdC5laWdodGhhbmd6aG91ID0gMHgzMDI4OwogIHQuZWlnaHRobm90ZWJlYW1lZCA9IDB4MjY2YjsKICB0LmVpZ2h0aWRlb2dyYXBoaWNwYXJlbiA9IDB4MzIyNzsKICB0LmVpZ2h0aW5mZXJpb3IgPSAweDIwODg7CiAgdC5laWdodG1vbm9zcGFjZSA9IDB4ZmYxODsKICB0LmVpZ2h0b2xkc3R5bGUgPSAweGY3Mzg7CiAgdC5laWdodHBhcmVuID0gMHgyNDdiOwogIHQuZWlnaHRwZXJpb2QgPSAweDI0OGY7CiAgdC5laWdodHBlcnNpYW4gPSAweDA2Zjg7CiAgdC5laWdodHJvbWFuID0gMHgyMTc3OwogIHQuZWlnaHRzdXBlcmlvciA9IDB4MjA3ODsKICB0LmVpZ2h0dGhhaSA9IDB4MGU1ODsKICB0LmVpbnZlcnRlZGJyZXZlID0gMHgwMjA3OwogIHQuZWlvdGlmaWVkY3lyaWxsaWMgPSAweDA0NjU7CiAgdC5la2F0YWthbmEgPSAweDMwYTg7CiAgdC5la2F0YWthbmFoYWxmd2lkdGggPSAweGZmNzQ7CiAgdC5la29ua2FyZ3VybXVraGkgPSAweDBhNzQ7CiAgdC5la29yZWFuID0gMHgzMTU0OwogIHQuZWxjeXJpbGxpYyA9IDB4MDQzYjsKICB0LmVsZW1lbnQgPSAweDIyMDg7CiAgdC5lbGV2ZW5jaXJjbGUgPSAweDI0NmE7CiAgdC5lbGV2ZW5wYXJlbiA9IDB4MjQ3ZTsKICB0LmVsZXZlbnBlcmlvZCA9IDB4MjQ5MjsKICB0LmVsZXZlbnJvbWFuID0gMHgyMTdhOwogIHQuZWxsaXBzaXMgPSAweDIwMjY7CiAgdC5lbGxpcHNpc3ZlcnRpY2FsID0gMHgyMmVlOwogIHQuZW1hY3JvbiA9IDB4MDExMzsKICB0LmVtYWNyb25hY3V0ZSA9IDB4MWUxNzsKICB0LmVtYWNyb25ncmF2ZSA9IDB4MWUxNTsKICB0LmVtY3lyaWxsaWMgPSAweDA0M2M7CiAgdC5lbWRhc2ggPSAweDIwMTQ7CiAgdC5lbWRhc2h2ZXJ0aWNhbCA9IDB4ZmUzMTsKICB0LmVtb25vc3BhY2UgPSAweGZmNDU7CiAgdC5lbXBoYXNpc21hcmthcm1lbmlhbiA9IDB4MDU1YjsKICB0LmVtcHR5c2V0ID0gMHgyMjA1OwogIHQuZW5ib3BvbW9mbyA9IDB4MzEyMzsKICB0LmVuY3lyaWxsaWMgPSAweDA0M2Q7CiAgdC5lbmRhc2ggPSAweDIwMTM7CiAgdC5lbmRhc2h2ZXJ0aWNhbCA9IDB4ZmUzMjsKICB0LmVuZGVzY2VuZGVyY3lyaWxsaWMgPSAweDA0YTM7CiAgdC5lbmcgPSAweDAxNGI7CiAgdC5lbmdib3BvbW9mbyA9IDB4MzEyNTsKICB0LmVuZ2hlY3lyaWxsaWMgPSAweDA0YTU7CiAgdC5lbmhvb2tjeXJpbGxpYyA9IDB4MDRjODsKICB0LmVuc3BhY2UgPSAweDIwMDI7CiAgdC5lb2dvbmVrID0gMHgwMTE5OwogIHQuZW9rb3JlYW4gPSAweDMxNTM7CiAgdC5lb3BlbiA9IDB4MDI1YjsKICB0LmVvcGVuY2xvc2VkID0gMHgwMjlhOwogIHQuZW9wZW5yZXZlcnNlZCA9IDB4MDI1YzsKICB0LmVvcGVucmV2ZXJzZWRjbG9zZWQgPSAweDAyNWU7CiAgdC5lb3BlbnJldmVyc2VkaG9vayA9IDB4MDI1ZDsKICB0LmVwYXJlbiA9IDB4MjRhMDsKICB0LmVwc2lsb24gPSAweDAzYjU7CiAgdC5lcHNpbG9udG9ub3MgPSAweDAzYWQ7CiAgdC5lcXVhbCA9IDB4MDAzZDsKICB0LmVxdWFsbW9ub3NwYWNlID0gMHhmZjFkOwogIHQuZXF1YWxzbWFsbCA9IDB4ZmU2NjsKICB0LmVxdWFsc3VwZXJpb3IgPSAweDIwN2M7CiAgdC5lcXVpdmFsZW5jZSA9IDB4MjI2MTsKICB0LmVyYm9wb21vZm8gPSAweDMxMjY7CiAgdC5lcmN5cmlsbGljID0gMHgwNDQwOwogIHQuZXJldmVyc2VkID0gMHgwMjU4OwogIHQuZXJldmVyc2VkY3lyaWxsaWMgPSAweDA0NGQ7CiAgdC5lc2N5cmlsbGljID0gMHgwNDQxOwogIHQuZXNkZXNjZW5kZXJjeXJpbGxpYyA9IDB4MDRhYjsKICB0LmVzaCA9IDB4MDI4MzsKICB0LmVzaGN1cmwgPSAweDAyODY7CiAgdC5lc2hvcnRkZXZhID0gMHgwOTBlOwogIHQuZXNob3J0dm93ZWxzaWduZGV2YSA9IDB4MDk0NjsKICB0LmVzaHJldmVyc2VkbG9vcCA9IDB4MDFhYTsKICB0LmVzaHNxdWF0cmV2ZXJzZWQgPSAweDAyODU7CiAgdC5lc21hbGxoaXJhZ2FuYSA9IDB4MzA0NzsKICB0LmVzbWFsbGthdGFrYW5hID0gMHgzMGE3OwogIHQuZXNtYWxsa2F0YWthbmFoYWxmd2lkdGggPSAweGZmNmE7CiAgdC5lc3RpbWF0ZWQgPSAweDIxMmU7CiAgdC5lc3VwZXJpb3IgPSAweGY2ZWM7CiAgdC5ldGEgPSAweDAzYjc7CiAgdC5ldGFybWVuaWFuID0gMHgwNTY4OwogIHQuZXRhdG9ub3MgPSAweDAzYWU7CiAgdC5ldGggPSAweDAwZjA7CiAgdC5ldGlsZGUgPSAweDFlYmQ7CiAgdC5ldGlsZGViZWxvdyA9IDB4MWUxYjsKICB0LmV0bmFodGFmb3VraGhlYnJldyA9IDB4MDU5MTsKICB0LmV0bmFodGFmb3VraGxlZnRoZWJyZXcgPSAweDA1OTE7CiAgdC5ldG5haHRhaGVicmV3ID0gMHgwNTkxOwogIHQuZXRuYWh0YWxlZnRoZWJyZXcgPSAweDA1OTE7CiAgdC5ldHVybmVkID0gMHgwMWRkOwogIHQuZXVrb3JlYW4gPSAweDMxNjE7CiAgdC5ldXJvID0gMHgyMGFjOwogIHQuZXZvd2Vsc2lnbmJlbmdhbGkgPSAweDA5Yzc7CiAgdC5ldm93ZWxzaWduZGV2YSA9IDB4MDk0NzsKICB0LmV2b3dlbHNpZ25ndWphcmF0aSA9IDB4MGFjNzsKICB0LmV4Y2xhbSA9IDB4MDAyMTsKICB0LmV4Y2xhbWFybWVuaWFuID0gMHgwNTVjOwogIHQuZXhjbGFtZGJsID0gMHgyMDNjOwogIHQuZXhjbGFtZG93biA9IDB4MDBhMTsKICB0LmV4Y2xhbWRvd25zbWFsbCA9IDB4ZjdhMTsKICB0LmV4Y2xhbW1vbm9zcGFjZSA9IDB4ZmYwMTsKICB0LmV4Y2xhbXNtYWxsID0gMHhmNzIxOwogIHQuZXhpc3RlbnRpYWwgPSAweDIyMDM7CiAgdC5lemggPSAweDAyOTI7CiAgdC5lemhjYXJvbiA9IDB4MDFlZjsKICB0LmV6aGN1cmwgPSAweDAyOTM7CiAgdC5lemhyZXZlcnNlZCA9IDB4MDFiOTsKICB0LmV6aHRhaWwgPSAweDAxYmE7CiAgdC5mID0gMHgwMDY2OwogIHQuZmFkZXZhID0gMHgwOTVlOwogIHQuZmFndXJtdWtoaSA9IDB4MGE1ZTsKICB0LmZhaHJlbmhlaXQgPSAweDIxMDk7CiAgdC5mYXRoYWFyYWJpYyA9IDB4MDY0ZTsKICB0LmZhdGhhbG93YXJhYmljID0gMHgwNjRlOwogIHQuZmF0aGF0YW5hcmFiaWMgPSAweDA2NGI7CiAgdC5mYm9wb21vZm8gPSAweDMxMDg7CiAgdC5mY2lyY2xlID0gMHgyNGQ1OwogIHQuZmRvdGFjY2VudCA9IDB4MWUxZjsKICB0LmZlaGFyYWJpYyA9IDB4MDY0MTsKICB0LmZlaGFybWVuaWFuID0gMHgwNTg2OwogIHQuZmVoZmluYWxhcmFiaWMgPSAweGZlZDI7CiAgdC5mZWhpbml0aWFsYXJhYmljID0gMHhmZWQzOwogIHQuZmVobWVkaWFsYXJhYmljID0gMHhmZWQ0OwogIHQuZmVpY29wdGljID0gMHgwM2U1OwogIHQuZmVtYWxlID0gMHgyNjQwOwogIHQuZmYgPSAweGZiMDA7CiAgdC5mX2YgPSAweGZiMDA7CiAgdC5mZmkgPSAweGZiMDM7CiAgdC5mX2ZfaSA9IDB4ZmIwMzsKICB0LmZmbCA9IDB4ZmIwNDsKICB0LmZfZl9sID0gMHhmYjA0OwogIHQuZmkgPSAweGZiMDE7CiAgdC5mX2kgPSAweGZiMDE7CiAgdC5maWZ0ZWVuY2lyY2xlID0gMHgyNDZlOwogIHQuZmlmdGVlbnBhcmVuID0gMHgyNDgyOwogIHQuZmlmdGVlbnBlcmlvZCA9IDB4MjQ5NjsKICB0LmZpZ3VyZWRhc2ggPSAweDIwMTI7CiAgdC5maWxsZWRib3ggPSAweDI1YTA7CiAgdC5maWxsZWRyZWN0ID0gMHgyNWFjOwogIHQuZmluYWxrYWYgPSAweDA1ZGE7CiAgdC5maW5hbGthZmRhZ2VzaCA9IDB4ZmIzYTsKICB0LmZpbmFsa2FmZGFnZXNoaGVicmV3ID0gMHhmYjNhOwogIHQuZmluYWxrYWZoZWJyZXcgPSAweDA1ZGE7CiAgdC5maW5hbG1lbSA9IDB4MDVkZDsKICB0LmZpbmFsbWVtaGVicmV3ID0gMHgwNWRkOwogIHQuZmluYWxudW4gPSAweDA1ZGY7CiAgdC5maW5hbG51bmhlYnJldyA9IDB4MDVkZjsKICB0LmZpbmFscGUgPSAweDA1ZTM7CiAgdC5maW5hbHBlaGVicmV3ID0gMHgwNWUzOwogIHQuZmluYWx0c2FkaSA9IDB4MDVlNTsKICB0LmZpbmFsdHNhZGloZWJyZXcgPSAweDA1ZTU7CiAgdC5maXJzdHRvbmVjaGluZXNlID0gMHgwMmM5OwogIHQuZmlzaGV5ZSA9IDB4MjVjOTsKICB0LmZpdGFjeXJpbGxpYyA9IDB4MDQ3MzsKICB0LmZpdmUgPSAweDAwMzU7CiAgdC5maXZlYXJhYmljID0gMHgwNjY1OwogIHQuZml2ZWJlbmdhbGkgPSAweDA5ZWI7CiAgdC5maXZlY2lyY2xlID0gMHgyNDY0OwogIHQuZml2ZWNpcmNsZWludmVyc2VzYW5zc2VyaWYgPSAweDI3OGU7CiAgdC5maXZlZGV2YSA9IDB4MDk2YjsKICB0LmZpdmVlaWdodGhzID0gMHgyMTVkOwogIHQuZml2ZWd1amFyYXRpID0gMHgwYWViOwogIHQuZml2ZWd1cm11a2hpID0gMHgwYTZiOwogIHQuZml2ZWhhY2thcmFiaWMgPSAweDA2NjU7CiAgdC5maXZlaGFuZ3pob3UgPSAweDMwMjU7CiAgdC5maXZlaWRlb2dyYXBoaWNwYXJlbiA9IDB4MzIyNDsKICB0LmZpdmVpbmZlcmlvciA9IDB4MjA4NTsKICB0LmZpdmVtb25vc3BhY2UgPSAweGZmMTU7CiAgdC5maXZlb2xkc3R5bGUgPSAweGY3MzU7CiAgdC5maXZlcGFyZW4gPSAweDI0Nzg7CiAgdC5maXZlcGVyaW9kID0gMHgyNDhjOwogIHQuZml2ZXBlcnNpYW4gPSAweDA2ZjU7CiAgdC5maXZlcm9tYW4gPSAweDIxNzQ7CiAgdC5maXZlc3VwZXJpb3IgPSAweDIwNzU7CiAgdC5maXZldGhhaSA9IDB4MGU1NTsKICB0LmZsID0gMHhmYjAyOwogIHQuZl9sID0gMHhmYjAyOwogIHQuZmxvcmluID0gMHgwMTkyOwogIHQuZm1vbm9zcGFjZSA9IDB4ZmY0NjsKICB0LmZtc3F1YXJlID0gMHgzMzk5OwogIHQuZm9mYW50aGFpID0gMHgwZTFmOwogIHQuZm9mYXRoYWkgPSAweDBlMWQ7CiAgdC5mb25nbWFudGhhaSA9IDB4MGU0ZjsKICB0LmZvcmFsbCA9IDB4MjIwMDsKICB0LmZvdXIgPSAweDAwMzQ7CiAgdC5mb3VyYXJhYmljID0gMHgwNjY0OwogIHQuZm91cmJlbmdhbGkgPSAweDA5ZWE7CiAgdC5mb3VyY2lyY2xlID0gMHgyNDYzOwogIHQuZm91cmNpcmNsZWludmVyc2VzYW5zc2VyaWYgPSAweDI3OGQ7CiAgdC5mb3VyZGV2YSA9IDB4MDk2YTsKICB0LmZvdXJndWphcmF0aSA9IDB4MGFlYTsKICB0LmZvdXJndXJtdWtoaSA9IDB4MGE2YTsKICB0LmZvdXJoYWNrYXJhYmljID0gMHgwNjY0OwogIHQuZm91cmhhbmd6aG91ID0gMHgzMDI0OwogIHQuZm91cmlkZW9ncmFwaGljcGFyZW4gPSAweDMyMjM7CiAgdC5mb3VyaW5mZXJpb3IgPSAweDIwODQ7CiAgdC5mb3VybW9ub3NwYWNlID0gMHhmZjE0OwogIHQuZm91cm51bWVyYXRvcmJlbmdhbGkgPSAweDA5Zjc7CiAgdC5mb3Vyb2xkc3R5bGUgPSAweGY3MzQ7CiAgdC5mb3VycGFyZW4gPSAweDI0Nzc7CiAgdC5mb3VycGVyaW9kID0gMHgyNDhiOwogIHQuZm91cnBlcnNpYW4gPSAweDA2ZjQ7CiAgdC5mb3Vycm9tYW4gPSAweDIxNzM7CiAgdC5mb3Vyc3VwZXJpb3IgPSAweDIwNzQ7CiAgdC5mb3VydGVlbmNpcmNsZSA9IDB4MjQ2ZDsKICB0LmZvdXJ0ZWVucGFyZW4gPSAweDI0ODE7CiAgdC5mb3VydGVlbnBlcmlvZCA9IDB4MjQ5NTsKICB0LmZvdXJ0aGFpID0gMHgwZTU0OwogIHQuZm91cnRodG9uZWNoaW5lc2UgPSAweDAyY2I7CiAgdC5mcGFyZW4gPSAweDI0YTE7CiAgdC5mcmFjdGlvbiA9IDB4MjA0NDsKICB0LmZyYW5jID0gMHgyMGEzOwogIHQuZyA9IDB4MDA2NzsKICB0LmdhYmVuZ2FsaSA9IDB4MDk5NzsKICB0LmdhY3V0ZSA9IDB4MDFmNTsKICB0LmdhZGV2YSA9IDB4MDkxNzsKICB0LmdhZmFyYWJpYyA9IDB4MDZhZjsKICB0LmdhZmZpbmFsYXJhYmljID0gMHhmYjkzOwogIHQuZ2FmaW5pdGlhbGFyYWJpYyA9IDB4ZmI5NDsKICB0LmdhZm1lZGlhbGFyYWJpYyA9IDB4ZmI5NTsKICB0LmdhZ3VqYXJhdGkgPSAweDBhOTc7CiAgdC5nYWd1cm11a2hpID0gMHgwYTE3OwogIHQuZ2FoaXJhZ2FuYSA9IDB4MzA0YzsKICB0Lmdha2F0YWthbmEgPSAweDMwYWM7CiAgdC5nYW1tYSA9IDB4MDNiMzsKICB0LmdhbW1hbGF0aW5zbWFsbCA9IDB4MDI2MzsKICB0LmdhbW1hc3VwZXJpb3IgPSAweDAyZTA7CiAgdC5nYW5naWFjb3B0aWMgPSAweDAzZWI7CiAgdC5nYm9wb21vZm8gPSAweDMxMGQ7CiAgdC5nYnJldmUgPSAweDAxMWY7CiAgdC5nY2Fyb24gPSAweDAxZTc7CiAgdC5nY2VkaWxsYSA9IDB4MDEyMzsKICB0LmdjaXJjbGUgPSAweDI0ZDY7CiAgdC5nY2lyY3VtZmxleCA9IDB4MDExZDsKICB0Lmdjb21tYWFjY2VudCA9IDB4MDEyMzsKICB0Lmdkb3QgPSAweDAxMjE7CiAgdC5nZG90YWNjZW50ID0gMHgwMTIxOwogIHQuZ2VjeXJpbGxpYyA9IDB4MDQzMzsKICB0LmdlaGlyYWdhbmEgPSAweDMwNTI7CiAgdC5nZWthdGFrYW5hID0gMHgzMGIyOwogIHQuZ2VvbWV0cmljYWxseWVxdWFsID0gMHgyMjUxOwogIHQuZ2VyZXNoYWNjZW50aGVicmV3ID0gMHgwNTljOwogIHQuZ2VyZXNoaGVicmV3ID0gMHgwNWYzOwogIHQuZ2VyZXNobXVxZGFtaGVicmV3ID0gMHgwNTlkOwogIHQuZ2VybWFuZGJscyA9IDB4MDBkZjsKICB0LmdlcnNoYXlpbWFjY2VudGhlYnJldyA9IDB4MDU5ZTsKICB0LmdlcnNoYXlpbWhlYnJldyA9IDB4MDVmNDsKICB0LmdldGFtYXJrID0gMHgzMDEzOwogIHQuZ2hhYmVuZ2FsaSA9IDB4MDk5ODsKICB0LmdoYWRhcm1lbmlhbiA9IDB4MDU3MjsKICB0LmdoYWRldmEgPSAweDA5MTg7CiAgdC5naGFndWphcmF0aSA9IDB4MGE5ODsKICB0LmdoYWd1cm11a2hpID0gMHgwYTE4OwogIHQuZ2hhaW5hcmFiaWMgPSAweDA2M2E7CiAgdC5naGFpbmZpbmFsYXJhYmljID0gMHhmZWNlOwogIHQuZ2hhaW5pbml0aWFsYXJhYmljID0gMHhmZWNmOwogIHQuZ2hhaW5tZWRpYWxhcmFiaWMgPSAweGZlZDA7CiAgdC5naGVtaWRkbGVob29rY3lyaWxsaWMgPSAweDA0OTU7CiAgdC5naGVzdHJva2VjeXJpbGxpYyA9IDB4MDQ5MzsKICB0LmdoZXVwdHVybmN5cmlsbGljID0gMHgwNDkxOwogIHQuZ2hoYWRldmEgPSAweDA5NWE7CiAgdC5naGhhZ3VybXVraGkgPSAweDBhNWE7CiAgdC5naG9vayA9IDB4MDI2MDsKICB0LmdoenNxdWFyZSA9IDB4MzM5MzsKICB0LmdpaGlyYWdhbmEgPSAweDMwNGU7CiAgdC5naWthdGFrYW5hID0gMHgzMGFlOwogIHQuZ2ltYXJtZW5pYW4gPSAweDA1NjM7CiAgdC5naW1lbCA9IDB4MDVkMjsKICB0LmdpbWVsZGFnZXNoID0gMHhmYjMyOwogIHQuZ2ltZWxkYWdlc2hoZWJyZXcgPSAweGZiMzI7CiAgdC5naW1lbGhlYnJldyA9IDB4MDVkMjsKICB0LmdqZWN5cmlsbGljID0gMHgwNDUzOwogIHQuZ2xvdHRhbGludmVydGVkc3Ryb2tlID0gMHgwMWJlOwogIHQuZ2xvdHRhbHN0b3AgPSAweDAyOTQ7CiAgdC5nbG90dGFsc3RvcGludmVydGVkID0gMHgwMjk2OwogIHQuZ2xvdHRhbHN0b3Btb2QgPSAweDAyYzA7CiAgdC5nbG90dGFsc3RvcHJldmVyc2VkID0gMHgwMjk1OwogIHQuZ2xvdHRhbHN0b3ByZXZlcnNlZG1vZCA9IDB4MDJjMTsKICB0Lmdsb3R0YWxzdG9wcmV2ZXJzZWRzdXBlcmlvciA9IDB4MDJlNDsKICB0Lmdsb3R0YWxzdG9wc3Ryb2tlID0gMHgwMmExOwogIHQuZ2xvdHRhbHN0b3BzdHJva2VyZXZlcnNlZCA9IDB4MDJhMjsKICB0LmdtYWNyb24gPSAweDFlMjE7CiAgdC5nbW9ub3NwYWNlID0gMHhmZjQ3OwogIHQuZ29oaXJhZ2FuYSA9IDB4MzA1NDsKICB0Lmdva2F0YWthbmEgPSAweDMwYjQ7CiAgdC5ncGFyZW4gPSAweDI0YTI7CiAgdC5ncGFzcXVhcmUgPSAweDMzYWM7CiAgdC5ncmFkaWVudCA9IDB4MjIwNzsKICB0LmdyYXZlID0gMHgwMDYwOwogIHQuZ3JhdmViZWxvd2NtYiA9IDB4MDMxNjsKICB0LmdyYXZlY21iID0gMHgwMzAwOwogIHQuZ3JhdmVjb21iID0gMHgwMzAwOwogIHQuZ3JhdmVkZXZhID0gMHgwOTUzOwogIHQuZ3JhdmVsb3dtb2QgPSAweDAyY2U7CiAgdC5ncmF2ZW1vbm9zcGFjZSA9IDB4ZmY0MDsKICB0LmdyYXZldG9uZWNtYiA9IDB4MDM0MDsKICB0LmdyZWF0ZXIgPSAweDAwM2U7CiAgdC5ncmVhdGVyZXF1YWwgPSAweDIyNjU7CiAgdC5ncmVhdGVyZXF1YWxvcmxlc3MgPSAweDIyZGI7CiAgdC5ncmVhdGVybW9ub3NwYWNlID0gMHhmZjFlOwogIHQuZ3JlYXRlcm9yZXF1aXZhbGVudCA9IDB4MjI3MzsKICB0LmdyZWF0ZXJvcmxlc3MgPSAweDIyNzc7CiAgdC5ncmVhdGVyb3ZlcmVxdWFsID0gMHgyMjY3OwogIHQuZ3JlYXRlcnNtYWxsID0gMHhmZTY1OwogIHQuZ3NjcmlwdCA9IDB4MDI2MTsKICB0LmdzdHJva2UgPSAweDAxZTU7CiAgdC5ndWhpcmFnYW5hID0gMHgzMDUwOwogIHQuZ3VpbGxlbW90bGVmdCA9IDB4MDBhYjsKICB0Lmd1aWxsZW1vdHJpZ2h0ID0gMHgwMGJiOwogIHQuZ3VpbHNpbmdsbGVmdCA9IDB4MjAzOTsKICB0Lmd1aWxzaW5nbHJpZ2h0ID0gMHgyMDNhOwogIHQuZ3VrYXRha2FuYSA9IDB4MzBiMDsKICB0Lmd1cmFtdXNxdWFyZSA9IDB4MzMxODsKICB0Lmd5c3F1YXJlID0gMHgzM2M5OwogIHQuaCA9IDB4MDA2ODsKICB0LmhhYWJraGFzaWFuY3lyaWxsaWMgPSAweDA0YTk7CiAgdC5oYWFsdG9uZWFyYWJpYyA9IDB4MDZjMTsKICB0LmhhYmVuZ2FsaSA9IDB4MDliOTsKICB0LmhhZGVzY2VuZGVyY3lyaWxsaWMgPSAweDA0YjM7CiAgdC5oYWRldmEgPSAweDA5Mzk7CiAgdC5oYWd1amFyYXRpID0gMHgwYWI5OwogIHQuaGFndXJtdWtoaSA9IDB4MGEzOTsKICB0LmhhaGFyYWJpYyA9IDB4MDYyZDsKICB0LmhhaGZpbmFsYXJhYmljID0gMHhmZWEyOwogIHQuaGFoaW5pdGlhbGFyYWJpYyA9IDB4ZmVhMzsKICB0LmhhaGlyYWdhbmEgPSAweDMwNmY7CiAgdC5oYWhtZWRpYWxhcmFiaWMgPSAweGZlYTQ7CiAgdC5oYWl0dXNxdWFyZSA9IDB4MzMyYTsKICB0Lmhha2F0YWthbmEgPSAweDMwY2Y7CiAgdC5oYWthdGFrYW5haGFsZndpZHRoID0gMHhmZjhhOwogIHQuaGFsYW50Z3VybXVraGkgPSAweDBhNGQ7CiAgdC5oYW16YWFyYWJpYyA9IDB4MDYyMTsKICB0LmhhbXphbG93YXJhYmljID0gMHgwNjIxOwogIHQuaGFuZ3VsZmlsbGVyID0gMHgzMTY0OwogIHQuaGFyZHNpZ25jeXJpbGxpYyA9IDB4MDQ0YTsKICB0LmhhcnBvb25sZWZ0YmFyYnVwID0gMHgyMWJjOwogIHQuaGFycG9vbnJpZ2h0YmFyYnVwID0gMHgyMWMwOwogIHQuaGFzcXVhcmUgPSAweDMzY2E7CiAgdC5oYXRhZnBhdGFoID0gMHgwNWIyOwogIHQuaGF0YWZwYXRhaDE2ID0gMHgwNWIyOwogIHQuaGF0YWZwYXRhaDIzID0gMHgwNWIyOwogIHQuaGF0YWZwYXRhaDJmID0gMHgwNWIyOwogIHQuaGF0YWZwYXRhaGhlYnJldyA9IDB4MDViMjsKICB0LmhhdGFmcGF0YWhuYXJyb3doZWJyZXcgPSAweDA1YjI7CiAgdC5oYXRhZnBhdGFocXVhcnRlcmhlYnJldyA9IDB4MDViMjsKICB0LmhhdGFmcGF0YWh3aWRlaGVicmV3ID0gMHgwNWIyOwogIHQuaGF0YWZxYW1hdHMgPSAweDA1YjM7CiAgdC5oYXRhZnFhbWF0czFiID0gMHgwNWIzOwogIHQuaGF0YWZxYW1hdHMyOCA9IDB4MDViMzsKICB0LmhhdGFmcWFtYXRzMzQgPSAweDA1YjM7CiAgdC5oYXRhZnFhbWF0c2hlYnJldyA9IDB4MDViMzsKICB0LmhhdGFmcWFtYXRzbmFycm93aGVicmV3ID0gMHgwNWIzOwogIHQuaGF0YWZxYW1hdHNxdWFydGVyaGVicmV3ID0gMHgwNWIzOwogIHQuaGF0YWZxYW1hdHN3aWRlaGVicmV3ID0gMHgwNWIzOwogIHQuaGF0YWZzZWdvbCA9IDB4MDViMTsKICB0LmhhdGFmc2Vnb2wxNyA9IDB4MDViMTsKICB0LmhhdGFmc2Vnb2wyNCA9IDB4MDViMTsKICB0LmhhdGFmc2Vnb2wzMCA9IDB4MDViMTsKICB0LmhhdGFmc2Vnb2xoZWJyZXcgPSAweDA1YjE7CiAgdC5oYXRhZnNlZ29sbmFycm93aGVicmV3ID0gMHgwNWIxOwogIHQuaGF0YWZzZWdvbHF1YXJ0ZXJoZWJyZXcgPSAweDA1YjE7CiAgdC5oYXRhZnNlZ29sd2lkZWhlYnJldyA9IDB4MDViMTsKICB0LmhiYXIgPSAweDAxMjc7CiAgdC5oYm9wb21vZm8gPSAweDMxMGY7CiAgdC5oYnJldmViZWxvdyA9IDB4MWUyYjsKICB0LmhjZWRpbGxhID0gMHgxZTI5OwogIHQuaGNpcmNsZSA9IDB4MjRkNzsKICB0LmhjaXJjdW1mbGV4ID0gMHgwMTI1OwogIHQuaGRpZXJlc2lzID0gMHgxZTI3OwogIHQuaGRvdGFjY2VudCA9IDB4MWUyMzsKICB0Lmhkb3RiZWxvdyA9IDB4MWUyNTsKICB0LmhlID0gMHgwNWQ0OwogIHQuaGVhcnQgPSAweDI2NjU7CiAgdC5oZWFydHN1aXRibGFjayA9IDB4MjY2NTsKICB0LmhlYXJ0c3VpdHdoaXRlID0gMHgyNjYxOwogIHQuaGVkYWdlc2ggPSAweGZiMzQ7CiAgdC5oZWRhZ2VzaGhlYnJldyA9IDB4ZmIzNDsKICB0LmhlaGFsdG9uZWFyYWJpYyA9IDB4MDZjMTsKICB0LmhlaGFyYWJpYyA9IDB4MDY0NzsKICB0LmhlaGVicmV3ID0gMHgwNWQ0OwogIHQuaGVoZmluYWxhbHRvbmVhcmFiaWMgPSAweGZiYTc7CiAgdC5oZWhmaW5hbGFsdHR3b2FyYWJpYyA9IDB4ZmVlYTsKICB0LmhlaGZpbmFsYXJhYmljID0gMHhmZWVhOwogIHQuaGVoaGFtemFhYm92ZWZpbmFsYXJhYmljID0gMHhmYmE1OwogIHQuaGVoaGFtemFhYm92ZWlzb2xhdGVkYXJhYmljID0gMHhmYmE0OwogIHQuaGVoaW5pdGlhbGFsdG9uZWFyYWJpYyA9IDB4ZmJhODsKICB0LmhlaGluaXRpYWxhcmFiaWMgPSAweGZlZWI7CiAgdC5oZWhpcmFnYW5hID0gMHgzMDc4OwogIHQuaGVobWVkaWFsYWx0b25lYXJhYmljID0gMHhmYmE5OwogIHQuaGVobWVkaWFsYXJhYmljID0gMHhmZWVjOwogIHQuaGVpc2VpZXJhc3F1YXJlID0gMHgzMzdiOwogIHQuaGVrYXRha2FuYSA9IDB4MzBkODsKICB0Lmhla2F0YWthbmFoYWxmd2lkdGggPSAweGZmOGQ7CiAgdC5oZWt1dGFhcnVzcXVhcmUgPSAweDMzMzY7CiAgdC5oZW5naG9vayA9IDB4MDI2NzsKICB0LmhlcnV0dXNxdWFyZSA9IDB4MzMzOTsKICB0LmhldCA9IDB4MDVkNzsKICB0LmhldGhlYnJldyA9IDB4MDVkNzsKICB0Lmhob29rID0gMHgwMjY2OwogIHQuaGhvb2tzdXBlcmlvciA9IDB4MDJiMTsKICB0LmhpZXVoYWNpcmNsZWtvcmVhbiA9IDB4MzI3YjsKICB0LmhpZXVoYXBhcmVua29yZWFuID0gMHgzMjFiOwogIHQuaGlldWhjaXJjbGVrb3JlYW4gPSAweDMyNmQ7CiAgdC5oaWV1aGtvcmVhbiA9IDB4MzE0ZTsKICB0LmhpZXVocGFyZW5rb3JlYW4gPSAweDMyMGQ7CiAgdC5oaWhpcmFnYW5hID0gMHgzMDcyOwogIHQuaGlrYXRha2FuYSA9IDB4MzBkMjsKICB0Lmhpa2F0YWthbmFoYWxmd2lkdGggPSAweGZmOGI7CiAgdC5oaXJpcSA9IDB4MDViNDsKICB0LmhpcmlxMTQgPSAweDA1YjQ7CiAgdC5oaXJpcTIxID0gMHgwNWI0OwogIHQuaGlyaXEyZCA9IDB4MDViNDsKICB0LmhpcmlxaGVicmV3ID0gMHgwNWI0OwogIHQuaGlyaXFuYXJyb3doZWJyZXcgPSAweDA1YjQ7CiAgdC5oaXJpcXF1YXJ0ZXJoZWJyZXcgPSAweDA1YjQ7CiAgdC5oaXJpcXdpZGVoZWJyZXcgPSAweDA1YjQ7CiAgdC5obGluZWJlbG93ID0gMHgxZTk2OwogIHQuaG1vbm9zcGFjZSA9IDB4ZmY0ODsKICB0LmhvYXJtZW5pYW4gPSAweDA1NzA7CiAgdC5ob2hpcHRoYWkgPSAweDBlMmI7CiAgdC5ob2hpcmFnYW5hID0gMHgzMDdiOwogIHQuaG9rYXRha2FuYSA9IDB4MzBkYjsKICB0Lmhva2F0YWthbmFoYWxmd2lkdGggPSAweGZmOGU7CiAgdC5ob2xhbSA9IDB4MDViOTsKICB0LmhvbGFtMTkgPSAweDA1Yjk7CiAgdC5ob2xhbTI2ID0gMHgwNWI5OwogIHQuaG9sYW0zMiA9IDB4MDViOTsKICB0LmhvbGFtaGVicmV3ID0gMHgwNWI5OwogIHQuaG9sYW1uYXJyb3doZWJyZXcgPSAweDA1Yjk7CiAgdC5ob2xhbXF1YXJ0ZXJoZWJyZXcgPSAweDA1Yjk7CiAgdC5ob2xhbXdpZGVoZWJyZXcgPSAweDA1Yjk7CiAgdC5ob25va2h1a3RoYWkgPSAweDBlMmU7CiAgdC5ob29rYWJvdmVjb21iID0gMHgwMzA5OwogIHQuaG9va2NtYiA9IDB4MDMwOTsKICB0Lmhvb2twYWxhdGFsaXplZGJlbG93Y21iID0gMHgwMzIxOwogIHQuaG9va3JldHJvZmxleGJlbG93Y21iID0gMHgwMzIyOwogIHQuaG9vbnNxdWFyZSA9IDB4MzM0MjsKICB0Lmhvcmljb3B0aWMgPSAweDAzZTk7CiAgdC5ob3Jpem9udGFsYmFyID0gMHgyMDE1OwogIHQuaG9ybmNtYiA9IDB4MDMxYjsKICB0LmhvdHNwcmluZ3MgPSAweDI2Njg7CiAgdC5ob3VzZSA9IDB4MjMwMjsKICB0LmhwYXJlbiA9IDB4MjRhMzsKICB0LmhzdXBlcmlvciA9IDB4MDJiMDsKICB0Lmh0dXJuZWQgPSAweDAyNjU7CiAgdC5odWhpcmFnYW5hID0gMHgzMDc1OwogIHQuaHVpaXRvc3F1YXJlID0gMHgzMzMzOwogIHQuaHVrYXRha2FuYSA9IDB4MzBkNTsKICB0Lmh1a2F0YWthbmFoYWxmd2lkdGggPSAweGZmOGM7CiAgdC5odW5nYXJ1bWxhdXQgPSAweDAyZGQ7CiAgdC5odW5nYXJ1bWxhdXRjbWIgPSAweDAzMGI7CiAgdC5odiA9IDB4MDE5NTsKICB0Lmh5cGhlbiA9IDB4MDAyZDsKICB0Lmh5cGhlbmluZmVyaW9yID0gMHhmNmU1OwogIHQuaHlwaGVubW9ub3NwYWNlID0gMHhmZjBkOwogIHQuaHlwaGVuc21hbGwgPSAweGZlNjM7CiAgdC5oeXBoZW5zdXBlcmlvciA9IDB4ZjZlNjsKICB0Lmh5cGhlbnR3byA9IDB4MjAxMDsKICB0LmkgPSAweDAwNjk7CiAgdC5pYWN1dGUgPSAweDAwZWQ7CiAgdC5pYWN5cmlsbGljID0gMHgwNDRmOwogIHQuaWJlbmdhbGkgPSAweDA5ODc7CiAgdC5pYm9wb21vZm8gPSAweDMxMjc7CiAgdC5pYnJldmUgPSAweDAxMmQ7CiAgdC5pY2Fyb24gPSAweDAxZDA7CiAgdC5pY2lyY2xlID0gMHgyNGQ4OwogIHQuaWNpcmN1bWZsZXggPSAweDAwZWU7CiAgdC5pY3lyaWxsaWMgPSAweDA0NTY7CiAgdC5pZGJsZ3JhdmUgPSAweDAyMDk7CiAgdC5pZGVvZ3JhcGhlYXJ0aGNpcmNsZSA9IDB4MzI4ZjsKICB0LmlkZW9ncmFwaGZpcmVjaXJjbGUgPSAweDMyOGI7CiAgdC5pZGVvZ3JhcGhpY2FsbGlhbmNlcGFyZW4gPSAweDMyM2Y7CiAgdC5pZGVvZ3JhcGhpY2NhbGxwYXJlbiA9IDB4MzIzYTsKICB0LmlkZW9ncmFwaGljY2VudHJlY2lyY2xlID0gMHgzMmE1OwogIHQuaWRlb2dyYXBoaWNjbG9zZSA9IDB4MzAwNjsKICB0LmlkZW9ncmFwaGljY29tbWEgPSAweDMwMDE7CiAgdC5pZGVvZ3JhcGhpY2NvbW1hbGVmdCA9IDB4ZmY2NDsKICB0LmlkZW9ncmFwaGljY29uZ3JhdHVsYXRpb25wYXJlbiA9IDB4MzIzNzsKICB0LmlkZW9ncmFwaGljY29ycmVjdGNpcmNsZSA9IDB4MzJhMzsKICB0LmlkZW9ncmFwaGljZWFydGhwYXJlbiA9IDB4MzIyZjsKICB0LmlkZW9ncmFwaGljZW50ZXJwcmlzZXBhcmVuID0gMHgzMjNkOwogIHQuaWRlb2dyYXBoaWNleGNlbGxlbnRjaXJjbGUgPSAweDMyOWQ7CiAgdC5pZGVvZ3JhcGhpY2Zlc3RpdmFscGFyZW4gPSAweDMyNDA7CiAgdC5pZGVvZ3JhcGhpY2ZpbmFuY2lhbGNpcmNsZSA9IDB4MzI5NjsKICB0LmlkZW9ncmFwaGljZmluYW5jaWFscGFyZW4gPSAweDMyMzY7CiAgdC5pZGVvZ3JhcGhpY2ZpcmVwYXJlbiA9IDB4MzIyYjsKICB0LmlkZW9ncmFwaGljaGF2ZXBhcmVuID0gMHgzMjMyOwogIHQuaWRlb2dyYXBoaWNoaWdoY2lyY2xlID0gMHgzMmE0OwogIHQuaWRlb2dyYXBoaWNpdGVyYXRpb25tYXJrID0gMHgzMDA1OwogIHQuaWRlb2dyYXBoaWNsYWJvcmNpcmNsZSA9IDB4MzI5ODsKICB0LmlkZW9ncmFwaGljbGFib3JwYXJlbiA9IDB4MzIzODsKICB0LmlkZW9ncmFwaGljbGVmdGNpcmNsZSA9IDB4MzJhNzsKICB0LmlkZW9ncmFwaGljbG93Y2lyY2xlID0gMHgzMmE2OwogIHQuaWRlb2dyYXBoaWNtZWRpY2luZWNpcmNsZSA9IDB4MzJhOTsKICB0LmlkZW9ncmFwaGljbWV0YWxwYXJlbiA9IDB4MzIyZTsKICB0LmlkZW9ncmFwaGljbW9vbnBhcmVuID0gMHgzMjJhOwogIHQuaWRlb2dyYXBoaWNuYW1lcGFyZW4gPSAweDMyMzQ7CiAgdC5pZGVvZ3JhcGhpY3BlcmlvZCA9IDB4MzAwMjsKICB0LmlkZW9ncmFwaGljcHJpbnRjaXJjbGUgPSAweDMyOWU7CiAgdC5pZGVvZ3JhcGhpY3JlYWNocGFyZW4gPSAweDMyNDM7CiAgdC5pZGVvZ3JhcGhpY3JlcHJlc2VudHBhcmVuID0gMHgzMjM5OwogIHQuaWRlb2dyYXBoaWNyZXNvdXJjZXBhcmVuID0gMHgzMjNlOwogIHQuaWRlb2dyYXBoaWNyaWdodGNpcmNsZSA9IDB4MzJhODsKICB0LmlkZW9ncmFwaGljc2VjcmV0Y2lyY2xlID0gMHgzMjk5OwogIHQuaWRlb2dyYXBoaWNzZWxmcGFyZW4gPSAweDMyNDI7CiAgdC5pZGVvZ3JhcGhpY3NvY2lldHlwYXJlbiA9IDB4MzIzMzsKICB0LmlkZW9ncmFwaGljc3BhY2UgPSAweDMwMDA7CiAgdC5pZGVvZ3JhcGhpY3NwZWNpYWxwYXJlbiA9IDB4MzIzNTsKICB0LmlkZW9ncmFwaGljc3RvY2twYXJlbiA9IDB4MzIzMTsKICB0LmlkZW9ncmFwaGljc3R1ZHlwYXJlbiA9IDB4MzIzYjsKICB0LmlkZW9ncmFwaGljc3VucGFyZW4gPSAweDMyMzA7CiAgdC5pZGVvZ3JhcGhpY3N1cGVydmlzZXBhcmVuID0gMHgzMjNjOwogIHQuaWRlb2dyYXBoaWN3YXRlcnBhcmVuID0gMHgzMjJjOwogIHQuaWRlb2dyYXBoaWN3b29kcGFyZW4gPSAweDMyMmQ7CiAgdC5pZGVvZ3JhcGhpY3plcm8gPSAweDMwMDc7CiAgdC5pZGVvZ3JhcGhtZXRhbGNpcmNsZSA9IDB4MzI4ZTsKICB0LmlkZW9ncmFwaG1vb25jaXJjbGUgPSAweDMyOGE7CiAgdC5pZGVvZ3JhcGhuYW1lY2lyY2xlID0gMHgzMjk0OwogIHQuaWRlb2dyYXBoc3VuY2lyY2xlID0gMHgzMjkwOwogIHQuaWRlb2dyYXBod2F0ZXJjaXJjbGUgPSAweDMyOGM7CiAgdC5pZGVvZ3JhcGh3b29kY2lyY2xlID0gMHgzMjhkOwogIHQuaWRldmEgPSAweDA5MDc7CiAgdC5pZGllcmVzaXMgPSAweDAwZWY7CiAgdC5pZGllcmVzaXNhY3V0ZSA9IDB4MWUyZjsKICB0LmlkaWVyZXNpc2N5cmlsbGljID0gMHgwNGU1OwogIHQuaWRvdGJlbG93ID0gMHgxZWNiOwogIHQuaWVicmV2ZWN5cmlsbGljID0gMHgwNGQ3OwogIHQuaWVjeXJpbGxpYyA9IDB4MDQzNTsKICB0LmlldW5nYWNpcmNsZWtvcmVhbiA9IDB4MzI3NTsKICB0LmlldW5nYXBhcmVua29yZWFuID0gMHgzMjE1OwogIHQuaWV1bmdjaXJjbGVrb3JlYW4gPSAweDMyNjc7CiAgdC5pZXVuZ2tvcmVhbiA9IDB4MzE0NzsKICB0LmlldW5ncGFyZW5rb3JlYW4gPSAweDMyMDc7CiAgdC5pZ3JhdmUgPSAweDAwZWM7CiAgdC5pZ3VqYXJhdGkgPSAweDBhODc7CiAgdC5pZ3VybXVraGkgPSAweDBhMDc7CiAgdC5paGlyYWdhbmEgPSAweDMwNDQ7CiAgdC5paG9va2Fib3ZlID0gMHgxZWM5OwogIHQuaWliZW5nYWxpID0gMHgwOTg4OwogIHQuaWljeXJpbGxpYyA9IDB4MDQzODsKICB0LmlpZGV2YSA9IDB4MDkwODsKICB0LmlpZ3VqYXJhdGkgPSAweDBhODg7CiAgdC5paWd1cm11a2hpID0gMHgwYTA4OwogIHQuaWltYXRyYWd1cm11a2hpID0gMHgwYTQwOwogIHQuaWludmVydGVkYnJldmUgPSAweDAyMGI7CiAgdC5paXNob3J0Y3lyaWxsaWMgPSAweDA0Mzk7CiAgdC5paXZvd2Vsc2lnbmJlbmdhbGkgPSAweDA5YzA7CiAgdC5paXZvd2Vsc2lnbmRldmEgPSAweDA5NDA7CiAgdC5paXZvd2Vsc2lnbmd1amFyYXRpID0gMHgwYWMwOwogIHQuaWogPSAweDAxMzM7CiAgdC5pa2F0YWthbmEgPSAweDMwYTQ7CiAgdC5pa2F0YWthbmFoYWxmd2lkdGggPSAweGZmNzI7CiAgdC5pa29yZWFuID0gMHgzMTYzOwogIHQuaWxkZSA9IDB4MDJkYzsKICB0LmlsdXloZWJyZXcgPSAweDA1YWM7CiAgdC5pbWFjcm9uID0gMHgwMTJiOwogIHQuaW1hY3JvbmN5cmlsbGljID0gMHgwNGUzOwogIHQuaW1hZ2VvcmFwcHJveGltYXRlbHllcXVhbCA9IDB4MjI1MzsKICB0LmltYXRyYWd1cm11a2hpID0gMHgwYTNmOwogIHQuaW1vbm9zcGFjZSA9IDB4ZmY0OTsKICB0LmluY3JlbWVudCA9IDB4MjIwNjsKICB0LmluZmluaXR5ID0gMHgyMjFlOwogIHQuaW5pYXJtZW5pYW4gPSAweDA1NmI7CiAgdC5pbnRlZ3JhbCA9IDB4MjIyYjsKICB0LmludGVncmFsYm90dG9tID0gMHgyMzIxOwogIHQuaW50ZWdyYWxidCA9IDB4MjMyMTsKICB0LmludGVncmFsZXggPSAweGY4ZjU7CiAgdC5pbnRlZ3JhbHRvcCA9IDB4MjMyMDsKICB0LmludGVncmFsdHAgPSAweDIzMjA7CiAgdC5pbnRlcnNlY3Rpb24gPSAweDIyMjk7CiAgdC5pbnRpc3F1YXJlID0gMHgzMzA1OwogIHQuaW52YnVsbGV0ID0gMHgyNWQ4OwogIHQuaW52Y2lyY2xlID0gMHgyNWQ5OwogIHQuaW52c21pbGVmYWNlID0gMHgyNjNiOwogIHQuaW9jeXJpbGxpYyA9IDB4MDQ1MTsKICB0LmlvZ29uZWsgPSAweDAxMmY7CiAgdC5pb3RhID0gMHgwM2I5OwogIHQuaW90YWRpZXJlc2lzID0gMHgwM2NhOwogIHQuaW90YWRpZXJlc2lzdG9ub3MgPSAweDAzOTA7CiAgdC5pb3RhbGF0aW4gPSAweDAyNjk7CiAgdC5pb3RhdG9ub3MgPSAweDAzYWY7CiAgdC5pcGFyZW4gPSAweDI0YTQ7CiAgdC5pcmlndXJtdWtoaSA9IDB4MGE3MjsKICB0LmlzbWFsbGhpcmFnYW5hID0gMHgzMDQzOwogIHQuaXNtYWxsa2F0YWthbmEgPSAweDMwYTM7CiAgdC5pc21hbGxrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY2ODsKICB0Lmlzc2hhcmJlbmdhbGkgPSAweDA5ZmE7CiAgdC5pc3Ryb2tlID0gMHgwMjY4OwogIHQuaXN1cGVyaW9yID0gMHhmNmVkOwogIHQuaXRlcmF0aW9uaGlyYWdhbmEgPSAweDMwOWQ7CiAgdC5pdGVyYXRpb25rYXRha2FuYSA9IDB4MzBmZDsKICB0Lml0aWxkZSA9IDB4MDEyOTsKICB0Lml0aWxkZWJlbG93ID0gMHgxZTJkOwogIHQuaXVib3BvbW9mbyA9IDB4MzEyOTsKICB0Lml1Y3lyaWxsaWMgPSAweDA0NGU7CiAgdC5pdm93ZWxzaWduYmVuZ2FsaSA9IDB4MDliZjsKICB0Lml2b3dlbHNpZ25kZXZhID0gMHgwOTNmOwogIHQuaXZvd2Vsc2lnbmd1amFyYXRpID0gMHgwYWJmOwogIHQuaXpoaXRzYWN5cmlsbGljID0gMHgwNDc1OwogIHQuaXpoaXRzYWRibGdyYXZlY3lyaWxsaWMgPSAweDA0Nzc7CiAgdC5qID0gMHgwMDZhOwogIHQuamFhcm1lbmlhbiA9IDB4MDU3MTsKICB0LmphYmVuZ2FsaSA9IDB4MDk5YzsKICB0LmphZGV2YSA9IDB4MDkxYzsKICB0LmphZ3VqYXJhdGkgPSAweDBhOWM7CiAgdC5qYWd1cm11a2hpID0gMHgwYTFjOwogIHQuamJvcG9tb2ZvID0gMHgzMTEwOwogIHQuamNhcm9uID0gMHgwMWYwOwogIHQuamNpcmNsZSA9IDB4MjRkOTsKICB0LmpjaXJjdW1mbGV4ID0gMHgwMTM1OwogIHQuamNyb3NzZWR0YWlsID0gMHgwMjlkOwogIHQuamRvdGxlc3NzdHJva2UgPSAweDAyNWY7CiAgdC5qZWN5cmlsbGljID0gMHgwNDU4OwogIHQuamVlbWFyYWJpYyA9IDB4MDYyYzsKICB0LmplZW1maW5hbGFyYWJpYyA9IDB4ZmU5ZTsKICB0LmplZW1pbml0aWFsYXJhYmljID0gMHhmZTlmOwogIHQuamVlbW1lZGlhbGFyYWJpYyA9IDB4ZmVhMDsKICB0LmplaGFyYWJpYyA9IDB4MDY5ODsKICB0LmplaGZpbmFsYXJhYmljID0gMHhmYjhiOwogIHQuamhhYmVuZ2FsaSA9IDB4MDk5ZDsKICB0LmpoYWRldmEgPSAweDA5MWQ7CiAgdC5qaGFndWphcmF0aSA9IDB4MGE5ZDsKICB0LmpoYWd1cm11a2hpID0gMHgwYTFkOwogIHQuamhlaGFybWVuaWFuID0gMHgwNTdiOwogIHQuamlzID0gMHgzMDA0OwogIHQuam1vbm9zcGFjZSA9IDB4ZmY0YTsKICB0LmpwYXJlbiA9IDB4MjRhNTsKICB0LmpzdXBlcmlvciA9IDB4MDJiMjsKICB0LmsgPSAweDAwNmI7CiAgdC5rYWJhc2hraXJjeXJpbGxpYyA9IDB4MDRhMTsKICB0LmthYmVuZ2FsaSA9IDB4MDk5NTsKICB0LmthY3V0ZSA9IDB4MWUzMTsKICB0LmthY3lyaWxsaWMgPSAweDA0M2E7CiAgdC5rYWRlc2NlbmRlcmN5cmlsbGljID0gMHgwNDliOwogIHQua2FkZXZhID0gMHgwOTE1OwogIHQua2FmID0gMHgwNWRiOwogIHQua2FmYXJhYmljID0gMHgwNjQzOwogIHQua2FmZGFnZXNoID0gMHhmYjNiOwogIHQua2FmZGFnZXNoaGVicmV3ID0gMHhmYjNiOwogIHQua2FmZmluYWxhcmFiaWMgPSAweGZlZGE7CiAgdC5rYWZoZWJyZXcgPSAweDA1ZGI7CiAgdC5rYWZpbml0aWFsYXJhYmljID0gMHhmZWRiOwogIHQua2FmbWVkaWFsYXJhYmljID0gMHhmZWRjOwogIHQua2FmcmFmZWhlYnJldyA9IDB4ZmI0ZDsKICB0LmthZ3VqYXJhdGkgPSAweDBhOTU7CiAgdC5rYWd1cm11a2hpID0gMHgwYTE1OwogIHQua2FoaXJhZ2FuYSA9IDB4MzA0YjsKICB0LmthaG9va2N5cmlsbGljID0gMHgwNGM0OwogIHQua2FrYXRha2FuYSA9IDB4MzBhYjsKICB0Lmtha2F0YWthbmFoYWxmd2lkdGggPSAweGZmNzY7CiAgdC5rYXBwYSA9IDB4MDNiYTsKICB0LmthcHBhc3ltYm9sZ3JlZWsgPSAweDAzZjA7CiAgdC5rYXB5ZW91bm1pZXVta29yZWFuID0gMHgzMTcxOwogIHQua2FweWVvdW5waGlldXBoa29yZWFuID0gMHgzMTg0OwogIHQua2FweWVvdW5waWV1cGtvcmVhbiA9IDB4MzE3ODsKICB0LmthcHllb3Vuc3NhbmdwaWV1cGtvcmVhbiA9IDB4MzE3OTsKICB0Lmthcm9yaWlzcXVhcmUgPSAweDMzMGQ7CiAgdC5rYXNoaWRhYXV0b2FyYWJpYyA9IDB4MDY0MDsKICB0Lmthc2hpZGFhdXRvbm9zaWRlYmVhcmluZ2FyYWJpYyA9IDB4MDY0MDsKICB0Lmthc21hbGxrYXRha2FuYSA9IDB4MzBmNTsKICB0Lmthc3F1YXJlID0gMHgzMzg0OwogIHQua2FzcmFhcmFiaWMgPSAweDA2NTA7CiAgdC5rYXNyYXRhbmFyYWJpYyA9IDB4MDY0ZDsKICB0Lmthc3Ryb2tlY3lyaWxsaWMgPSAweDA0OWY7CiAgdC5rYXRhaGlyYXByb2xvbmdtYXJraGFsZndpZHRoID0gMHhmZjcwOwogIHQua2F2ZXJ0aWNhbHN0cm9rZWN5cmlsbGljID0gMHgwNDlkOwogIHQua2JvcG9tb2ZvID0gMHgzMTBlOwogIHQua2NhbHNxdWFyZSA9IDB4MzM4OTsKICB0LmtjYXJvbiA9IDB4MDFlOTsKICB0LmtjZWRpbGxhID0gMHgwMTM3OwogIHQua2NpcmNsZSA9IDB4MjRkYTsKICB0Lmtjb21tYWFjY2VudCA9IDB4MDEzNzsKICB0Lmtkb3RiZWxvdyA9IDB4MWUzMzsKICB0LmtlaGFybWVuaWFuID0gMHgwNTg0OwogIHQua2VoaXJhZ2FuYSA9IDB4MzA1MTsKICB0Lmtla2F0YWthbmEgPSAweDMwYjE7CiAgdC5rZWthdGFrYW5haGFsZndpZHRoID0gMHhmZjc5OwogIHQua2VuYXJtZW5pYW4gPSAweDA1NmY7CiAgdC5rZXNtYWxsa2F0YWthbmEgPSAweDMwZjY7CiAgdC5rZ3JlZW5sYW5kaWMgPSAweDAxMzg7CiAgdC5raGFiZW5nYWxpID0gMHgwOTk2OwogIHQua2hhY3lyaWxsaWMgPSAweDA0NDU7CiAgdC5raGFkZXZhID0gMHgwOTE2OwogIHQua2hhZ3VqYXJhdGkgPSAweDBhOTY7CiAgdC5raGFndXJtdWtoaSA9IDB4MGExNjsKICB0LmtoYWhhcmFiaWMgPSAweDA2MmU7CiAgdC5raGFoZmluYWxhcmFiaWMgPSAweGZlYTY7CiAgdC5raGFoaW5pdGlhbGFyYWJpYyA9IDB4ZmVhNzsKICB0LmtoYWhtZWRpYWxhcmFiaWMgPSAweGZlYTg7CiAgdC5raGVpY29wdGljID0gMHgwM2U3OwogIHQua2hoYWRldmEgPSAweDA5NTk7CiAgdC5raGhhZ3VybXVraGkgPSAweDBhNTk7CiAgdC5raGlldWtoYWNpcmNsZWtvcmVhbiA9IDB4MzI3ODsKICB0LmtoaWV1a2hhcGFyZW5rb3JlYW4gPSAweDMyMTg7CiAgdC5raGlldWtoY2lyY2xla29yZWFuID0gMHgzMjZhOwogIHQua2hpZXVraGtvcmVhbiA9IDB4MzE0YjsKICB0LmtoaWV1a2hwYXJlbmtvcmVhbiA9IDB4MzIwYTsKICB0Lmtob2toYWl0aGFpID0gMHgwZTAyOwogIHQua2hva2hvbnRoYWkgPSAweDBlMDU7CiAgdC5raG9raHVhdHRoYWkgPSAweDBlMDM7CiAgdC5raG9raHdhaXRoYWkgPSAweDBlMDQ7CiAgdC5raG9tdXR0aGFpID0gMHgwZTViOwogIHQua2hvb2sgPSAweDAxOTk7CiAgdC5raG9yYWtoYW5ndGhhaSA9IDB4MGUwNjsKICB0LmtoenNxdWFyZSA9IDB4MzM5MTsKICB0LmtpaGlyYWdhbmEgPSAweDMwNGQ7CiAgdC5raWthdGFrYW5hID0gMHgzMGFkOwogIHQua2lrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY3NzsKICB0Lmtpcm9ndXJhbXVzcXVhcmUgPSAweDMzMTU7CiAgdC5raXJvbWVldG9ydXNxdWFyZSA9IDB4MzMxNjsKICB0Lmtpcm9zcXVhcmUgPSAweDMzMTQ7CiAgdC5raXllb2thY2lyY2xla29yZWFuID0gMHgzMjZlOwogIHQua2l5ZW9rYXBhcmVua29yZWFuID0gMHgzMjBlOwogIHQua2l5ZW9rY2lyY2xla29yZWFuID0gMHgzMjYwOwogIHQua2l5ZW9ra29yZWFuID0gMHgzMTMxOwogIHQua2l5ZW9rcGFyZW5rb3JlYW4gPSAweDMyMDA7CiAgdC5raXllb2tzaW9za29yZWFuID0gMHgzMTMzOwogIHQua2plY3lyaWxsaWMgPSAweDA0NWM7CiAgdC5rbGluZWJlbG93ID0gMHgxZTM1OwogIHQua2xzcXVhcmUgPSAweDMzOTg7CiAgdC5rbWN1YmVkc3F1YXJlID0gMHgzM2E2OwogIHQua21vbm9zcGFjZSA9IDB4ZmY0YjsKICB0Lmttc3F1YXJlZHNxdWFyZSA9IDB4MzNhMjsKICB0LmtvaGlyYWdhbmEgPSAweDMwNTM7CiAgdC5rb2htc3F1YXJlID0gMHgzM2MwOwogIHQua29rYWl0aGFpID0gMHgwZTAxOwogIHQua29rYXRha2FuYSA9IDB4MzBiMzsKICB0Lmtva2F0YWthbmFoYWxmd2lkdGggPSAweGZmN2E7CiAgdC5rb29wb3NxdWFyZSA9IDB4MzMxZTsKICB0LmtvcHBhY3lyaWxsaWMgPSAweDA0ODE7CiAgdC5rb3JlYW5zdGFuZGFyZHN5bWJvbCA9IDB4MzI3ZjsKICB0Lmtvcm9uaXNjbWIgPSAweDAzNDM7CiAgdC5rcGFyZW4gPSAweDI0YTY7CiAgdC5rcGFzcXVhcmUgPSAweDMzYWE7CiAgdC5rc2ljeXJpbGxpYyA9IDB4MDQ2ZjsKICB0Lmt0c3F1YXJlID0gMHgzM2NmOwogIHQua3R1cm5lZCA9IDB4MDI5ZTsKICB0Lmt1aGlyYWdhbmEgPSAweDMwNGY7CiAgdC5rdWthdGFrYW5hID0gMHgzMGFmOwogIHQua3VrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY3ODsKICB0Lmt2c3F1YXJlID0gMHgzM2I4OwogIHQua3dzcXVhcmUgPSAweDMzYmU7CiAgdC5sID0gMHgwMDZjOwogIHQubGFiZW5nYWxpID0gMHgwOWIyOwogIHQubGFjdXRlID0gMHgwMTNhOwogIHQubGFkZXZhID0gMHgwOTMyOwogIHQubGFndWphcmF0aSA9IDB4MGFiMjsKICB0LmxhZ3VybXVraGkgPSAweDBhMzI7CiAgdC5sYWtraGFuZ3lhb3RoYWkgPSAweDBlNDU7CiAgdC5sYW1hbGVmZmluYWxhcmFiaWMgPSAweGZlZmM7CiAgdC5sYW1hbGVmaGFtemFhYm92ZWZpbmFsYXJhYmljID0gMHhmZWY4OwogIHQubGFtYWxlZmhhbXphYWJvdmVpc29sYXRlZGFyYWJpYyA9IDB4ZmVmNzsKICB0LmxhbWFsZWZoYW16YWJlbG93ZmluYWxhcmFiaWMgPSAweGZlZmE7CiAgdC5sYW1hbGVmaGFtemFiZWxvd2lzb2xhdGVkYXJhYmljID0gMHhmZWY5OwogIHQubGFtYWxlZmlzb2xhdGVkYXJhYmljID0gMHhmZWZiOwogIHQubGFtYWxlZm1hZGRhYWJvdmVmaW5hbGFyYWJpYyA9IDB4ZmVmNjsKICB0LmxhbWFsZWZtYWRkYWFib3ZlaXNvbGF0ZWRhcmFiaWMgPSAweGZlZjU7CiAgdC5sYW1hcmFiaWMgPSAweDA2NDQ7CiAgdC5sYW1iZGEgPSAweDAzYmI7CiAgdC5sYW1iZGFzdHJva2UgPSAweDAxOWI7CiAgdC5sYW1lZCA9IDB4MDVkYzsKICB0LmxhbWVkZGFnZXNoID0gMHhmYjNjOwogIHQubGFtZWRkYWdlc2hoZWJyZXcgPSAweGZiM2M7CiAgdC5sYW1lZGhlYnJldyA9IDB4MDVkYzsKICB0LmxhbWZpbmFsYXJhYmljID0gMHhmZWRlOwogIHQubGFtaGFoaW5pdGlhbGFyYWJpYyA9IDB4ZmNjYTsKICB0LmxhbWluaXRpYWxhcmFiaWMgPSAweGZlZGY7CiAgdC5sYW1qZWVtaW5pdGlhbGFyYWJpYyA9IDB4ZmNjOTsKICB0LmxhbWtoYWhpbml0aWFsYXJhYmljID0gMHhmY2NiOwogIHQubGFtbGFtaGVoaXNvbGF0ZWRhcmFiaWMgPSAweGZkZjI7CiAgdC5sYW1tZWRpYWxhcmFiaWMgPSAweGZlZTA7CiAgdC5sYW1tZWVtaGFoaW5pdGlhbGFyYWJpYyA9IDB4ZmQ4ODsKICB0LmxhbW1lZW1pbml0aWFsYXJhYmljID0gMHhmY2NjOwogIHQubGFyZ2VjaXJjbGUgPSAweDI1ZWY7CiAgdC5sYmFyID0gMHgwMTlhOwogIHQubGJlbHQgPSAweDAyNmM7CiAgdC5sYm9wb21vZm8gPSAweDMxMGM7CiAgdC5sY2Fyb24gPSAweDAxM2U7CiAgdC5sY2VkaWxsYSA9IDB4MDEzYzsKICB0LmxjaXJjbGUgPSAweDI0ZGI7CiAgdC5sY2lyY3VtZmxleGJlbG93ID0gMHgxZTNkOwogIHQubGNvbW1hYWNjZW50ID0gMHgwMTNjOwogIHQubGRvdCA9IDB4MDE0MDsKICB0Lmxkb3RhY2NlbnQgPSAweDAxNDA7CiAgdC5sZG90YmVsb3cgPSAweDFlMzc7CiAgdC5sZG90YmVsb3dtYWNyb24gPSAweDFlMzk7CiAgdC5sZWZ0YW5nbGVhYm92ZWNtYiA9IDB4MDMxYTsKICB0LmxlZnR0YWNrYmVsb3djbWIgPSAweDAzMTg7CiAgdC5sZXNzID0gMHgwMDNjOwogIHQubGVzc2VxdWFsID0gMHgyMjY0OwogIHQubGVzc2VxdWFsb3JncmVhdGVyID0gMHgyMmRhOwogIHQubGVzc21vbm9zcGFjZSA9IDB4ZmYxYzsKICB0Lmxlc3NvcmVxdWl2YWxlbnQgPSAweDIyNzI7CiAgdC5sZXNzb3JncmVhdGVyID0gMHgyMjc2OwogIHQubGVzc292ZXJlcXVhbCA9IDB4MjI2NjsKICB0Lmxlc3NzbWFsbCA9IDB4ZmU2NDsKICB0LmxlemggPSAweDAyNmU7CiAgdC5sZmJsb2NrID0gMHgyNThjOwogIHQubGhvb2tyZXRyb2ZsZXggPSAweDAyNmQ7CiAgdC5saXJhID0gMHgyMGE0OwogIHQubGl3bmFybWVuaWFuID0gMHgwNTZjOwogIHQubGogPSAweDAxYzk7CiAgdC5samVjeXJpbGxpYyA9IDB4MDQ1OTsKICB0LmxsID0gMHhmNmMwOwogIHQubGxhZGV2YSA9IDB4MDkzMzsKICB0LmxsYWd1amFyYXRpID0gMHgwYWIzOwogIHQubGxpbmViZWxvdyA9IDB4MWUzYjsKICB0LmxsbGFkZXZhID0gMHgwOTM0OwogIHQubGx2b2NhbGljYmVuZ2FsaSA9IDB4MDllMTsKICB0Lmxsdm9jYWxpY2RldmEgPSAweDA5NjE7CiAgdC5sbHZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpID0gMHgwOWUzOwogIHQubGx2b2NhbGljdm93ZWxzaWduZGV2YSA9IDB4MDk2MzsKICB0LmxtaWRkbGV0aWxkZSA9IDB4MDI2YjsKICB0Lmxtb25vc3BhY2UgPSAweGZmNGM7CiAgdC5sbXNxdWFyZSA9IDB4MzNkMDsKICB0LmxvY2h1bGF0aGFpID0gMHgwZTJjOwogIHQubG9naWNhbGFuZCA9IDB4MjIyNzsKICB0LmxvZ2ljYWxub3QgPSAweDAwYWM7CiAgdC5sb2dpY2Fsbm90cmV2ZXJzZWQgPSAweDIzMTA7CiAgdC5sb2dpY2Fsb3IgPSAweDIyMjg7CiAgdC5sb2xpbmd0aGFpID0gMHgwZTI1OwogIHQubG9uZ3MgPSAweDAxN2Y7CiAgdC5sb3dsaW5lY2VudGVybGluZSA9IDB4ZmU0ZTsKICB0Lmxvd2xpbmVjbWIgPSAweDAzMzI7CiAgdC5sb3dsaW5lZGFzaGVkID0gMHhmZTRkOwogIHQubG96ZW5nZSA9IDB4MjVjYTsKICB0LmxwYXJlbiA9IDB4MjRhNzsKICB0LmxzbGFzaCA9IDB4MDE0MjsKICB0LmxzcXVhcmUgPSAweDIxMTM7CiAgdC5sc3VwZXJpb3IgPSAweGY2ZWU7CiAgdC5sdHNoYWRlID0gMHgyNTkxOwogIHQubHV0aGFpID0gMHgwZTI2OwogIHQubHZvY2FsaWNiZW5nYWxpID0gMHgwOThjOwogIHQubHZvY2FsaWNkZXZhID0gMHgwOTBjOwogIHQubHZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpID0gMHgwOWUyOwogIHQubHZvY2FsaWN2b3dlbHNpZ25kZXZhID0gMHgwOTYyOwogIHQubHhzcXVhcmUgPSAweDMzZDM7CiAgdC5tID0gMHgwMDZkOwogIHQubWFiZW5nYWxpID0gMHgwOWFlOwogIHQubWFjcm9uID0gMHgwMGFmOwogIHQubWFjcm9uYmVsb3djbWIgPSAweDAzMzE7CiAgdC5tYWNyb25jbWIgPSAweDAzMDQ7CiAgdC5tYWNyb25sb3dtb2QgPSAweDAyY2Q7CiAgdC5tYWNyb25tb25vc3BhY2UgPSAweGZmZTM7CiAgdC5tYWN1dGUgPSAweDFlM2Y7CiAgdC5tYWRldmEgPSAweDA5MmU7CiAgdC5tYWd1amFyYXRpID0gMHgwYWFlOwogIHQubWFndXJtdWtoaSA9IDB4MGEyZTsKICB0Lm1haGFwYWtoaGVicmV3ID0gMHgwNWE0OwogIHQubWFoYXBha2hsZWZ0aGVicmV3ID0gMHgwNWE0OwogIHQubWFoaXJhZ2FuYSA9IDB4MzA3ZTsKICB0Lm1haWNoYXR0YXdhbG93bGVmdHRoYWkgPSAweGY4OTU7CiAgdC5tYWljaGF0dGF3YWxvd3JpZ2h0dGhhaSA9IDB4Zjg5NDsKICB0Lm1haWNoYXR0YXdhdGhhaSA9IDB4MGU0YjsKICB0Lm1haWNoYXR0YXdhdXBwZXJsZWZ0dGhhaSA9IDB4Zjg5MzsKICB0Lm1haWVrbG93bGVmdHRoYWkgPSAweGY4OGM7CiAgdC5tYWlla2xvd3JpZ2h0dGhhaSA9IDB4Zjg4YjsKICB0Lm1haWVrdGhhaSA9IDB4MGU0ODsKICB0Lm1haWVrdXBwZXJsZWZ0dGhhaSA9IDB4Zjg4YTsKICB0Lm1haWhhbmFrYXRsZWZ0dGhhaSA9IDB4Zjg4NDsKICB0Lm1haWhhbmFrYXR0aGFpID0gMHgwZTMxOwogIHQubWFpdGFpa2h1bGVmdHRoYWkgPSAweGY4ODk7CiAgdC5tYWl0YWlraHV0aGFpID0gMHgwZTQ3OwogIHQubWFpdGhvbG93bGVmdHRoYWkgPSAweGY4OGY7CiAgdC5tYWl0aG9sb3dyaWdodHRoYWkgPSAweGY4OGU7CiAgdC5tYWl0aG90aGFpID0gMHgwZTQ5OwogIHQubWFpdGhvdXBwZXJsZWZ0dGhhaSA9IDB4Zjg4ZDsKICB0Lm1haXRyaWxvd2xlZnR0aGFpID0gMHhmODkyOwogIHQubWFpdHJpbG93cmlnaHR0aGFpID0gMHhmODkxOwogIHQubWFpdHJpdGhhaSA9IDB4MGU0YTsKICB0Lm1haXRyaXVwcGVybGVmdHRoYWkgPSAweGY4OTA7CiAgdC5tYWl5YW1va3RoYWkgPSAweDBlNDY7CiAgdC5tYWthdGFrYW5hID0gMHgzMGRlOwogIHQubWFrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY4ZjsKICB0Lm1hbGUgPSAweDI2NDI7CiAgdC5tYW5zeW9uc3F1YXJlID0gMHgzMzQ3OwogIHQubWFxYWZoZWJyZXcgPSAweDA1YmU7CiAgdC5tYXJzID0gMHgyNjQyOwogIHQubWFzb3JhY2lyY2xlaGVicmV3ID0gMHgwNWFmOwogIHQubWFzcXVhcmUgPSAweDMzODM7CiAgdC5tYm9wb21vZm8gPSAweDMxMDc7CiAgdC5tYnNxdWFyZSA9IDB4MzNkNDsKICB0Lm1jaXJjbGUgPSAweDI0ZGM7CiAgdC5tY3ViZWRzcXVhcmUgPSAweDMzYTU7CiAgdC5tZG90YWNjZW50ID0gMHgxZTQxOwogIHQubWRvdGJlbG93ID0gMHgxZTQzOwogIHQubWVlbWFyYWJpYyA9IDB4MDY0NTsKICB0Lm1lZW1maW5hbGFyYWJpYyA9IDB4ZmVlMjsKICB0Lm1lZW1pbml0aWFsYXJhYmljID0gMHhmZWUzOwogIHQubWVlbW1lZGlhbGFyYWJpYyA9IDB4ZmVlNDsKICB0Lm1lZW1tZWVtaW5pdGlhbGFyYWJpYyA9IDB4ZmNkMTsKICB0Lm1lZW1tZWVtaXNvbGF0ZWRhcmFiaWMgPSAweGZjNDg7CiAgdC5tZWV0b3J1c3F1YXJlID0gMHgzMzRkOwogIHQubWVoaXJhZ2FuYSA9IDB4MzA4MTsKICB0Lm1laXppZXJhc3F1YXJlID0gMHgzMzdlOwogIHQubWVrYXRha2FuYSA9IDB4MzBlMTsKICB0Lm1la2F0YWthbmFoYWxmd2lkdGggPSAweGZmOTI7CiAgdC5tZW0gPSAweDA1ZGU7CiAgdC5tZW1kYWdlc2ggPSAweGZiM2U7CiAgdC5tZW1kYWdlc2hoZWJyZXcgPSAweGZiM2U7CiAgdC5tZW1oZWJyZXcgPSAweDA1ZGU7CiAgdC5tZW5hcm1lbmlhbiA9IDB4MDU3NDsKICB0Lm1lcmtoYWhlYnJldyA9IDB4MDVhNTsKICB0Lm1lcmtoYWtlZnVsYWhlYnJldyA9IDB4MDVhNjsKICB0Lm1lcmtoYWtlZnVsYWxlZnRoZWJyZXcgPSAweDA1YTY7CiAgdC5tZXJraGFsZWZ0aGVicmV3ID0gMHgwNWE1OwogIHQubWhvb2sgPSAweDAyNzE7CiAgdC5taHpzcXVhcmUgPSAweDMzOTI7CiAgdC5taWRkbGVkb3RrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY2NTsKICB0Lm1pZGRvdCA9IDB4MDBiNzsKICB0Lm1pZXVtYWNpcmNsZWtvcmVhbiA9IDB4MzI3MjsKICB0Lm1pZXVtYXBhcmVua29yZWFuID0gMHgzMjEyOwogIHQubWlldW1jaXJjbGVrb3JlYW4gPSAweDMyNjQ7CiAgdC5taWV1bWtvcmVhbiA9IDB4MzE0MTsKICB0Lm1pZXVtcGFuc2lvc2tvcmVhbiA9IDB4MzE3MDsKICB0Lm1pZXVtcGFyZW5rb3JlYW4gPSAweDMyMDQ7CiAgdC5taWV1bXBpZXVwa29yZWFuID0gMHgzMTZlOwogIHQubWlldW1zaW9za29yZWFuID0gMHgzMTZmOwogIHQubWloaXJhZ2FuYSA9IDB4MzA3ZjsKICB0Lm1pa2F0YWthbmEgPSAweDMwZGY7CiAgdC5taWthdGFrYW5haGFsZndpZHRoID0gMHhmZjkwOwogIHQubWludXMgPSAweDIyMTI7CiAgdC5taW51c2JlbG93Y21iID0gMHgwMzIwOwogIHQubWludXNjaXJjbGUgPSAweDIyOTY7CiAgdC5taW51c21vZCA9IDB4MDJkNzsKICB0Lm1pbnVzcGx1cyA9IDB4MjIxMzsKICB0Lm1pbnV0ZSA9IDB4MjAzMjsKICB0Lm1pcmliYWFydXNxdWFyZSA9IDB4MzM0YTsKICB0Lm1pcmlzcXVhcmUgPSAweDMzNDk7CiAgdC5tbG9uZ2xlZ3R1cm5lZCA9IDB4MDI3MDsKICB0Lm1sc3F1YXJlID0gMHgzMzk2OwogIHQubW1jdWJlZHNxdWFyZSA9IDB4MzNhMzsKICB0Lm1tb25vc3BhY2UgPSAweGZmNGQ7CiAgdC5tbXNxdWFyZWRzcXVhcmUgPSAweDMzOWY7CiAgdC5tb2hpcmFnYW5hID0gMHgzMDgyOwogIHQubW9obXNxdWFyZSA9IDB4MzNjMTsKICB0Lm1va2F0YWthbmEgPSAweDMwZTI7CiAgdC5tb2thdGFrYW5haGFsZndpZHRoID0gMHhmZjkzOwogIHQubW9sc3F1YXJlID0gMHgzM2Q2OwogIHQubW9tYXRoYWkgPSAweDBlMjE7CiAgdC5tb3ZlcnNzcXVhcmUgPSAweDMzYTc7CiAgdC5tb3ZlcnNzcXVhcmVkc3F1YXJlID0gMHgzM2E4OwogIHQubXBhcmVuID0gMHgyNGE4OwogIHQubXBhc3F1YXJlID0gMHgzM2FiOwogIHQubXNzcXVhcmUgPSAweDMzYjM7CiAgdC5tc3VwZXJpb3IgPSAweGY2ZWY7CiAgdC5tdHVybmVkID0gMHgwMjZmOwogIHQubXUgPSAweDAwYjU7CiAgdC5tdTEgPSAweDAwYjU7CiAgdC5tdWFzcXVhcmUgPSAweDMzODI7CiAgdC5tdWNoZ3JlYXRlciA9IDB4MjI2YjsKICB0Lm11Y2hsZXNzID0gMHgyMjZhOwogIHQubXVmc3F1YXJlID0gMHgzMzhjOwogIHQubXVncmVlayA9IDB4MDNiYzsKICB0Lm11Z3NxdWFyZSA9IDB4MzM4ZDsKICB0Lm11aGlyYWdhbmEgPSAweDMwODA7CiAgdC5tdWthdGFrYW5hID0gMHgzMGUwOwogIHQubXVrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY5MTsKICB0Lm11bHNxdWFyZSA9IDB4MzM5NTsKICB0Lm11bHRpcGx5ID0gMHgwMGQ3OwogIHQubXVtc3F1YXJlID0gMHgzMzliOwogIHQubXVuYWhoZWJyZXcgPSAweDA1YTM7CiAgdC5tdW5haGxlZnRoZWJyZXcgPSAweDA1YTM7CiAgdC5tdXNpY2Fsbm90ZSA9IDB4MjY2YTsKICB0Lm11c2ljYWxub3RlZGJsID0gMHgyNjZiOwogIHQubXVzaWNmbGF0c2lnbiA9IDB4MjY2ZDsKICB0Lm11c2ljc2hhcnBzaWduID0gMHgyNjZmOwogIHQubXVzc3F1YXJlID0gMHgzM2IyOwogIHQubXV2c3F1YXJlID0gMHgzM2I2OwogIHQubXV3c3F1YXJlID0gMHgzM2JjOwogIHQubXZtZWdhc3F1YXJlID0gMHgzM2I5OwogIHQubXZzcXVhcmUgPSAweDMzYjc7CiAgdC5td21lZ2FzcXVhcmUgPSAweDMzYmY7CiAgdC5td3NxdWFyZSA9IDB4MzNiZDsKICB0Lm4gPSAweDAwNmU7CiAgdC5uYWJlbmdhbGkgPSAweDA5YTg7CiAgdC5uYWJsYSA9IDB4MjIwNzsKICB0Lm5hY3V0ZSA9IDB4MDE0NDsKICB0Lm5hZGV2YSA9IDB4MDkyODsKICB0Lm5hZ3VqYXJhdGkgPSAweDBhYTg7CiAgdC5uYWd1cm11a2hpID0gMHgwYTI4OwogIHQubmFoaXJhZ2FuYSA9IDB4MzA2YTsKICB0Lm5ha2F0YWthbmEgPSAweDMwY2E7CiAgdC5uYWthdGFrYW5haGFsZndpZHRoID0gMHhmZjg1OwogIHQubmFwb3N0cm9waGUgPSAweDAxNDk7CiAgdC5uYXNxdWFyZSA9IDB4MzM4MTsKICB0Lm5ib3BvbW9mbyA9IDB4MzEwYjsKICB0Lm5ic3BhY2UgPSAweDAwYTA7CiAgdC5uY2Fyb24gPSAweDAxNDg7CiAgdC5uY2VkaWxsYSA9IDB4MDE0NjsKICB0Lm5jaXJjbGUgPSAweDI0ZGQ7CiAgdC5uY2lyY3VtZmxleGJlbG93ID0gMHgxZTRiOwogIHQubmNvbW1hYWNjZW50ID0gMHgwMTQ2OwogIHQubmRvdGFjY2VudCA9IDB4MWU0NTsKICB0Lm5kb3RiZWxvdyA9IDB4MWU0NzsKICB0Lm5laGlyYWdhbmEgPSAweDMwNmQ7CiAgdC5uZWthdGFrYW5hID0gMHgzMGNkOwogIHQubmVrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY4ODsKICB0Lm5ld3NoZXFlbHNpZ24gPSAweDIwYWE7CiAgdC5uZnNxdWFyZSA9IDB4MzM4YjsKICB0Lm5nYWJlbmdhbGkgPSAweDA5OTk7CiAgdC5uZ2FkZXZhID0gMHgwOTE5OwogIHQubmdhZ3VqYXJhdGkgPSAweDBhOTk7CiAgdC5uZ2FndXJtdWtoaSA9IDB4MGExOTsKICB0Lm5nb25ndXRoYWkgPSAweDBlMDc7CiAgdC5uaGlyYWdhbmEgPSAweDMwOTM7CiAgdC5uaG9va2xlZnQgPSAweDAyNzI7CiAgdC5uaG9va3JldHJvZmxleCA9IDB4MDI3MzsKICB0Lm5pZXVuYWNpcmNsZWtvcmVhbiA9IDB4MzI2ZjsKICB0Lm5pZXVuYXBhcmVua29yZWFuID0gMHgzMjBmOwogIHQubmlldW5jaWV1Y2tvcmVhbiA9IDB4MzEzNTsKICB0Lm5pZXVuY2lyY2xla29yZWFuID0gMHgzMjYxOwogIHQubmlldW5oaWV1aGtvcmVhbiA9IDB4MzEzNjsKICB0Lm5pZXVua29yZWFuID0gMHgzMTM0OwogIHQubmlldW5wYW5zaW9za29yZWFuID0gMHgzMTY4OwogIHQubmlldW5wYXJlbmtvcmVhbiA9IDB4MzIwMTsKICB0Lm5pZXVuc2lvc2tvcmVhbiA9IDB4MzE2NzsKICB0Lm5pZXVudGlrZXV0a29yZWFuID0gMHgzMTY2OwogIHQubmloaXJhZ2FuYSA9IDB4MzA2YjsKICB0Lm5pa2F0YWthbmEgPSAweDMwY2I7CiAgdC5uaWthdGFrYW5haGFsZndpZHRoID0gMHhmZjg2OwogIHQubmlraGFoaXRsZWZ0dGhhaSA9IDB4Zjg5OTsKICB0Lm5pa2hhaGl0dGhhaSA9IDB4MGU0ZDsKICB0Lm5pbmUgPSAweDAwMzk7CiAgdC5uaW5lYXJhYmljID0gMHgwNjY5OwogIHQubmluZWJlbmdhbGkgPSAweDA5ZWY7CiAgdC5uaW5lY2lyY2xlID0gMHgyNDY4OwogIHQubmluZWNpcmNsZWludmVyc2VzYW5zc2VyaWYgPSAweDI3OTI7CiAgdC5uaW5lZGV2YSA9IDB4MDk2ZjsKICB0Lm5pbmVndWphcmF0aSA9IDB4MGFlZjsKICB0Lm5pbmVndXJtdWtoaSA9IDB4MGE2ZjsKICB0Lm5pbmVoYWNrYXJhYmljID0gMHgwNjY5OwogIHQubmluZWhhbmd6aG91ID0gMHgzMDI5OwogIHQubmluZWlkZW9ncmFwaGljcGFyZW4gPSAweDMyMjg7CiAgdC5uaW5laW5mZXJpb3IgPSAweDIwODk7CiAgdC5uaW5lbW9ub3NwYWNlID0gMHhmZjE5OwogIHQubmluZW9sZHN0eWxlID0gMHhmNzM5OwogIHQubmluZXBhcmVuID0gMHgyNDdjOwogIHQubmluZXBlcmlvZCA9IDB4MjQ5MDsKICB0Lm5pbmVwZXJzaWFuID0gMHgwNmY5OwogIHQubmluZXJvbWFuID0gMHgyMTc4OwogIHQubmluZXN1cGVyaW9yID0gMHgyMDc5OwogIHQubmluZXRlZW5jaXJjbGUgPSAweDI0NzI7CiAgdC5uaW5ldGVlbnBhcmVuID0gMHgyNDg2OwogIHQubmluZXRlZW5wZXJpb2QgPSAweDI0OWE7CiAgdC5uaW5ldGhhaSA9IDB4MGU1OTsKICB0Lm5qID0gMHgwMWNjOwogIHQubmplY3lyaWxsaWMgPSAweDA0NWE7CiAgdC5ua2F0YWthbmEgPSAweDMwZjM7CiAgdC5ua2F0YWthbmFoYWxmd2lkdGggPSAweGZmOWQ7CiAgdC5ubGVncmlnaHRsb25nID0gMHgwMTllOwogIHQubmxpbmViZWxvdyA9IDB4MWU0OTsKICB0Lm5tb25vc3BhY2UgPSAweGZmNGU7CiAgdC5ubXNxdWFyZSA9IDB4MzM5YTsKICB0Lm5uYWJlbmdhbGkgPSAweDA5YTM7CiAgdC5ubmFkZXZhID0gMHgwOTIzOwogIHQubm5hZ3VqYXJhdGkgPSAweDBhYTM7CiAgdC5ubmFndXJtdWtoaSA9IDB4MGEyMzsKICB0Lm5ubmFkZXZhID0gMHgwOTI5OwogIHQubm9oaXJhZ2FuYSA9IDB4MzA2ZTsKICB0Lm5va2F0YWthbmEgPSAweDMwY2U7CiAgdC5ub2thdGFrYW5haGFsZndpZHRoID0gMHhmZjg5OwogIHQubm9uYnJlYWtpbmdzcGFjZSA9IDB4MDBhMDsKICB0Lm5vbmVudGhhaSA9IDB4MGUxMzsKICB0Lm5vbnV0aGFpID0gMHgwZTE5OwogIHQubm9vbmFyYWJpYyA9IDB4MDY0NjsKICB0Lm5vb25maW5hbGFyYWJpYyA9IDB4ZmVlNjsKICB0Lm5vb25naHVubmFhcmFiaWMgPSAweDA2YmE7CiAgdC5ub29uZ2h1bm5hZmluYWxhcmFiaWMgPSAweGZiOWY7CiAgdC5ub29uaW5pdGlhbGFyYWJpYyA9IDB4ZmVlNzsKICB0Lm5vb25qZWVtaW5pdGlhbGFyYWJpYyA9IDB4ZmNkMjsKICB0Lm5vb25qZWVtaXNvbGF0ZWRhcmFiaWMgPSAweGZjNGI7CiAgdC5ub29ubWVkaWFsYXJhYmljID0gMHhmZWU4OwogIHQubm9vbm1lZW1pbml0aWFsYXJhYmljID0gMHhmY2Q1OwogIHQubm9vbm1lZW1pc29sYXRlZGFyYWJpYyA9IDB4ZmM0ZTsKICB0Lm5vb25ub29uZmluYWxhcmFiaWMgPSAweGZjOGQ7CiAgdC5ub3Rjb250YWlucyA9IDB4MjIwYzsKICB0Lm5vdGVsZW1lbnQgPSAweDIyMDk7CiAgdC5ub3RlbGVtZW50b2YgPSAweDIyMDk7CiAgdC5ub3RlcXVhbCA9IDB4MjI2MDsKICB0Lm5vdGdyZWF0ZXIgPSAweDIyNmY7CiAgdC5ub3RncmVhdGVybm9yZXF1YWwgPSAweDIyNzE7CiAgdC5ub3RncmVhdGVybm9ybGVzcyA9IDB4MjI3OTsKICB0Lm5vdGlkZW50aWNhbCA9IDB4MjI2MjsKICB0Lm5vdGxlc3MgPSAweDIyNmU7CiAgdC5ub3RsZXNzbm9yZXF1YWwgPSAweDIyNzA7CiAgdC5ub3RwYXJhbGxlbCA9IDB4MjIyNjsKICB0Lm5vdHByZWNlZGVzID0gMHgyMjgwOwogIHQubm90c3Vic2V0ID0gMHgyMjg0OwogIHQubm90c3VjY2VlZHMgPSAweDIyODE7CiAgdC5ub3RzdXBlcnNldCA9IDB4MjI4NTsKICB0Lm5vd2FybWVuaWFuID0gMHgwNTc2OwogIHQubnBhcmVuID0gMHgyNGE5OwogIHQubnNzcXVhcmUgPSAweDMzYjE7CiAgdC5uc3VwZXJpb3IgPSAweDIwN2Y7CiAgdC5udGlsZGUgPSAweDAwZjE7CiAgdC5udSA9IDB4MDNiZDsKICB0Lm51aGlyYWdhbmEgPSAweDMwNmM7CiAgdC5udWthdGFrYW5hID0gMHgzMGNjOwogIHQubnVrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY4NzsKICB0Lm51a3RhYmVuZ2FsaSA9IDB4MDliYzsKICB0Lm51a3RhZGV2YSA9IDB4MDkzYzsKICB0Lm51a3RhZ3VqYXJhdGkgPSAweDBhYmM7CiAgdC5udWt0YWd1cm11a2hpID0gMHgwYTNjOwogIHQubnVtYmVyc2lnbiA9IDB4MDAyMzsKICB0Lm51bWJlcnNpZ25tb25vc3BhY2UgPSAweGZmMDM7CiAgdC5udW1iZXJzaWduc21hbGwgPSAweGZlNWY7CiAgdC5udW1lcmFsc2lnbmdyZWVrID0gMHgwMzc0OwogIHQubnVtZXJhbHNpZ25sb3dlcmdyZWVrID0gMHgwMzc1OwogIHQubnVtZXJvID0gMHgyMTE2OwogIHQubnVuID0gMHgwNWUwOwogIHQubnVuZGFnZXNoID0gMHhmYjQwOwogIHQubnVuZGFnZXNoaGVicmV3ID0gMHhmYjQwOwogIHQubnVuaGVicmV3ID0gMHgwNWUwOwogIHQubnZzcXVhcmUgPSAweDMzYjU7CiAgdC5ud3NxdWFyZSA9IDB4MzNiYjsKICB0Lm55YWJlbmdhbGkgPSAweDA5OWU7CiAgdC5ueWFkZXZhID0gMHgwOTFlOwogIHQubnlhZ3VqYXJhdGkgPSAweDBhOWU7CiAgdC5ueWFndXJtdWtoaSA9IDB4MGExZTsKICB0Lm8gPSAweDAwNmY7CiAgdC5vYWN1dGUgPSAweDAwZjM7CiAgdC5vYW5ndGhhaSA9IDB4MGUyZDsKICB0Lm9iYXJyZWQgPSAweDAyNzU7CiAgdC5vYmFycmVkY3lyaWxsaWMgPSAweDA0ZTk7CiAgdC5vYmFycmVkZGllcmVzaXNjeXJpbGxpYyA9IDB4MDRlYjsKICB0Lm9iZW5nYWxpID0gMHgwOTkzOwogIHQub2JvcG9tb2ZvID0gMHgzMTFiOwogIHQub2JyZXZlID0gMHgwMTRmOwogIHQub2NhbmRyYWRldmEgPSAweDA5MTE7CiAgdC5vY2FuZHJhZ3VqYXJhdGkgPSAweDBhOTE7CiAgdC5vY2FuZHJhdm93ZWxzaWduZGV2YSA9IDB4MDk0OTsKICB0Lm9jYW5kcmF2b3dlbHNpZ25ndWphcmF0aSA9IDB4MGFjOTsKICB0Lm9jYXJvbiA9IDB4MDFkMjsKICB0Lm9jaXJjbGUgPSAweDI0ZGU7CiAgdC5vY2lyY3VtZmxleCA9IDB4MDBmNDsKICB0Lm9jaXJjdW1mbGV4YWN1dGUgPSAweDFlZDE7CiAgdC5vY2lyY3VtZmxleGRvdGJlbG93ID0gMHgxZWQ5OwogIHQub2NpcmN1bWZsZXhncmF2ZSA9IDB4MWVkMzsKICB0Lm9jaXJjdW1mbGV4aG9va2Fib3ZlID0gMHgxZWQ1OwogIHQub2NpcmN1bWZsZXh0aWxkZSA9IDB4MWVkNzsKICB0Lm9jeXJpbGxpYyA9IDB4MDQzZTsKICB0Lm9kYmxhY3V0ZSA9IDB4MDE1MTsKICB0Lm9kYmxncmF2ZSA9IDB4MDIwZDsKICB0Lm9kZXZhID0gMHgwOTEzOwogIHQub2RpZXJlc2lzID0gMHgwMGY2OwogIHQub2RpZXJlc2lzY3lyaWxsaWMgPSAweDA0ZTc7CiAgdC5vZG90YmVsb3cgPSAweDFlY2Q7CiAgdC5vZSA9IDB4MDE1MzsKICB0Lm9la29yZWFuID0gMHgzMTVhOwogIHQub2dvbmVrID0gMHgwMmRiOwogIHQub2dvbmVrY21iID0gMHgwMzI4OwogIHQub2dyYXZlID0gMHgwMGYyOwogIHQub2d1amFyYXRpID0gMHgwYTkzOwogIHQub2hhcm1lbmlhbiA9IDB4MDU4NTsKICB0Lm9oaXJhZ2FuYSA9IDB4MzA0YTsKICB0Lm9ob29rYWJvdmUgPSAweDFlY2Y7CiAgdC5vaG9ybiA9IDB4MDFhMTsKICB0Lm9ob3JuYWN1dGUgPSAweDFlZGI7CiAgdC5vaG9ybmRvdGJlbG93ID0gMHgxZWUzOwogIHQub2hvcm5ncmF2ZSA9IDB4MWVkZDsKICB0Lm9ob3JuaG9va2Fib3ZlID0gMHgxZWRmOwogIHQub2hvcm50aWxkZSA9IDB4MWVlMTsKICB0Lm9odW5nYXJ1bWxhdXQgPSAweDAxNTE7CiAgdC5vaSA9IDB4MDFhMzsKICB0Lm9pbnZlcnRlZGJyZXZlID0gMHgwMjBmOwogIHQub2thdGFrYW5hID0gMHgzMGFhOwogIHQub2thdGFrYW5haGFsZndpZHRoID0gMHhmZjc1OwogIHQub2tvcmVhbiA9IDB4MzE1NzsKICB0Lm9sZWhlYnJldyA9IDB4MDVhYjsKICB0Lm9tYWNyb24gPSAweDAxNGQ7CiAgdC5vbWFjcm9uYWN1dGUgPSAweDFlNTM7CiAgdC5vbWFjcm9uZ3JhdmUgPSAweDFlNTE7CiAgdC5vbWRldmEgPSAweDA5NTA7CiAgdC5vbWVnYSA9IDB4MDNjOTsKICB0Lm9tZWdhMSA9IDB4MDNkNjsKICB0Lm9tZWdhY3lyaWxsaWMgPSAweDA0NjE7CiAgdC5vbWVnYWxhdGluY2xvc2VkID0gMHgwMjc3OwogIHQub21lZ2Fyb3VuZGN5cmlsbGljID0gMHgwNDdiOwogIHQub21lZ2F0aXRsb2N5cmlsbGljID0gMHgwNDdkOwogIHQub21lZ2F0b25vcyA9IDB4MDNjZTsKICB0Lm9tZ3VqYXJhdGkgPSAweDBhZDA7CiAgdC5vbWljcm9uID0gMHgwM2JmOwogIHQub21pY3JvbnRvbm9zID0gMHgwM2NjOwogIHQub21vbm9zcGFjZSA9IDB4ZmY0ZjsKICB0Lm9uZSA9IDB4MDAzMTsKICB0Lm9uZWFyYWJpYyA9IDB4MDY2MTsKICB0Lm9uZWJlbmdhbGkgPSAweDA5ZTc7CiAgdC5vbmVjaXJjbGUgPSAweDI0NjA7CiAgdC5vbmVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmID0gMHgyNzhhOwogIHQub25lZGV2YSA9IDB4MDk2NzsKICB0Lm9uZWRvdGVubGVhZGVyID0gMHgyMDI0OwogIHQub25lZWlnaHRoID0gMHgyMTViOwogIHQub25lZml0dGVkID0gMHhmNmRjOwogIHQub25lZ3VqYXJhdGkgPSAweDBhZTc7CiAgdC5vbmVndXJtdWtoaSA9IDB4MGE2NzsKICB0Lm9uZWhhY2thcmFiaWMgPSAweDA2NjE7CiAgdC5vbmVoYWxmID0gMHgwMGJkOwogIHQub25laGFuZ3pob3UgPSAweDMwMjE7CiAgdC5vbmVpZGVvZ3JhcGhpY3BhcmVuID0gMHgzMjIwOwogIHQub25laW5mZXJpb3IgPSAweDIwODE7CiAgdC5vbmVtb25vc3BhY2UgPSAweGZmMTE7CiAgdC5vbmVudW1lcmF0b3JiZW5nYWxpID0gMHgwOWY0OwogIHQub25lb2xkc3R5bGUgPSAweGY3MzE7CiAgdC5vbmVwYXJlbiA9IDB4MjQ3NDsKICB0Lm9uZXBlcmlvZCA9IDB4MjQ4ODsKICB0Lm9uZXBlcnNpYW4gPSAweDA2ZjE7CiAgdC5vbmVxdWFydGVyID0gMHgwMGJjOwogIHQub25lcm9tYW4gPSAweDIxNzA7CiAgdC5vbmVzdXBlcmlvciA9IDB4MDBiOTsKICB0Lm9uZXRoYWkgPSAweDBlNTE7CiAgdC5vbmV0aGlyZCA9IDB4MjE1MzsKICB0Lm9vZ29uZWsgPSAweDAxZWI7CiAgdC5vb2dvbmVrbWFjcm9uID0gMHgwMWVkOwogIHQub29ndXJtdWtoaSA9IDB4MGExMzsKICB0Lm9vbWF0cmFndXJtdWtoaSA9IDB4MGE0YjsKICB0Lm9vcGVuID0gMHgwMjU0OwogIHQub3BhcmVuID0gMHgyNGFhOwogIHQub3BlbmJ1bGxldCA9IDB4MjVlNjsKICB0Lm9wdGlvbiA9IDB4MjMyNTsKICB0Lm9yZGZlbWluaW5lID0gMHgwMGFhOwogIHQub3JkbWFzY3VsaW5lID0gMHgwMGJhOwogIHQub3J0aG9nb25hbCA9IDB4MjIxZjsKICB0Lm9zaG9ydGRldmEgPSAweDA5MTI7CiAgdC5vc2hvcnR2b3dlbHNpZ25kZXZhID0gMHgwOTRhOwogIHQub3NsYXNoID0gMHgwMGY4OwogIHQub3NsYXNoYWN1dGUgPSAweDAxZmY7CiAgdC5vc21hbGxoaXJhZ2FuYSA9IDB4MzA0OTsKICB0Lm9zbWFsbGthdGFrYW5hID0gMHgzMGE5OwogIHQub3NtYWxsa2F0YWthbmFoYWxmd2lkdGggPSAweGZmNmI7CiAgdC5vc3Ryb2tlYWN1dGUgPSAweDAxZmY7CiAgdC5vc3VwZXJpb3IgPSAweGY2ZjA7CiAgdC5vdGN5cmlsbGljID0gMHgwNDdmOwogIHQub3RpbGRlID0gMHgwMGY1OwogIHQub3RpbGRlYWN1dGUgPSAweDFlNGQ7CiAgdC5vdGlsZGVkaWVyZXNpcyA9IDB4MWU0ZjsKICB0Lm91Ym9wb21vZm8gPSAweDMxMjE7CiAgdC5vdmVybGluZSA9IDB4MjAzZTsKICB0Lm92ZXJsaW5lY2VudGVybGluZSA9IDB4ZmU0YTsKICB0Lm92ZXJsaW5lY21iID0gMHgwMzA1OwogIHQub3ZlcmxpbmVkYXNoZWQgPSAweGZlNDk7CiAgdC5vdmVybGluZWRibHdhdnkgPSAweGZlNGM7CiAgdC5vdmVybGluZXdhdnkgPSAweGZlNGI7CiAgdC5vdmVyc2NvcmUgPSAweDAwYWY7CiAgdC5vdm93ZWxzaWduYmVuZ2FsaSA9IDB4MDljYjsKICB0Lm92b3dlbHNpZ25kZXZhID0gMHgwOTRiOwogIHQub3Zvd2Vsc2lnbmd1amFyYXRpID0gMHgwYWNiOwogIHQucCA9IDB4MDA3MDsKICB0LnBhYW1wc3NxdWFyZSA9IDB4MzM4MDsKICB0LnBhYXNlbnRvc3F1YXJlID0gMHgzMzJiOwogIHQucGFiZW5nYWxpID0gMHgwOWFhOwogIHQucGFjdXRlID0gMHgxZTU1OwogIHQucGFkZXZhID0gMHgwOTJhOwogIHQucGFnZWRvd24gPSAweDIxZGY7CiAgdC5wYWdldXAgPSAweDIxZGU7CiAgdC5wYWd1amFyYXRpID0gMHgwYWFhOwogIHQucGFndXJtdWtoaSA9IDB4MGEyYTsKICB0LnBhaGlyYWdhbmEgPSAweDMwNzE7CiAgdC5wYWl5YW5ub2l0aGFpID0gMHgwZTJmOwogIHQucGFrYXRha2FuYSA9IDB4MzBkMTsKICB0LnBhbGF0YWxpemF0aW9uY3lyaWxsaWNjbWIgPSAweDA0ODQ7CiAgdC5wYWxvY2hrYWN5cmlsbGljID0gMHgwNGMwOwogIHQucGFuc2lvc2tvcmVhbiA9IDB4MzE3ZjsKICB0LnBhcmFncmFwaCA9IDB4MDBiNjsKICB0LnBhcmFsbGVsID0gMHgyMjI1OwogIHQucGFyZW5sZWZ0ID0gMHgwMDI4OwogIHQucGFyZW5sZWZ0YWx0b25lYXJhYmljID0gMHhmZDNlOwogIHQucGFyZW5sZWZ0YnQgPSAweGY4ZWQ7CiAgdC5wYXJlbmxlZnRleCA9IDB4ZjhlYzsKICB0LnBhcmVubGVmdGluZmVyaW9yID0gMHgyMDhkOwogIHQucGFyZW5sZWZ0bW9ub3NwYWNlID0gMHhmZjA4OwogIHQucGFyZW5sZWZ0c21hbGwgPSAweGZlNTk7CiAgdC5wYXJlbmxlZnRzdXBlcmlvciA9IDB4MjA3ZDsKICB0LnBhcmVubGVmdHRwID0gMHhmOGViOwogIHQucGFyZW5sZWZ0dmVydGljYWwgPSAweGZlMzU7CiAgdC5wYXJlbnJpZ2h0ID0gMHgwMDI5OwogIHQucGFyZW5yaWdodGFsdG9uZWFyYWJpYyA9IDB4ZmQzZjsKICB0LnBhcmVucmlnaHRidCA9IDB4ZjhmODsKICB0LnBhcmVucmlnaHRleCA9IDB4ZjhmNzsKICB0LnBhcmVucmlnaHRpbmZlcmlvciA9IDB4MjA4ZTsKICB0LnBhcmVucmlnaHRtb25vc3BhY2UgPSAweGZmMDk7CiAgdC5wYXJlbnJpZ2h0c21hbGwgPSAweGZlNWE7CiAgdC5wYXJlbnJpZ2h0c3VwZXJpb3IgPSAweDIwN2U7CiAgdC5wYXJlbnJpZ2h0dHAgPSAweGY4ZjY7CiAgdC5wYXJlbnJpZ2h0dmVydGljYWwgPSAweGZlMzY7CiAgdC5wYXJ0aWFsZGlmZiA9IDB4MjIwMjsKICB0LnBhc2VxaGVicmV3ID0gMHgwNWMwOwogIHQucGFzaHRhaGVicmV3ID0gMHgwNTk5OwogIHQucGFzcXVhcmUgPSAweDMzYTk7CiAgdC5wYXRhaCA9IDB4MDViNzsKICB0LnBhdGFoMTEgPSAweDA1Yjc7CiAgdC5wYXRhaDFkID0gMHgwNWI3OwogIHQucGF0YWgyYSA9IDB4MDViNzsKICB0LnBhdGFoaGVicmV3ID0gMHgwNWI3OwogIHQucGF0YWhuYXJyb3doZWJyZXcgPSAweDA1Yjc7CiAgdC5wYXRhaHF1YXJ0ZXJoZWJyZXcgPSAweDA1Yjc7CiAgdC5wYXRhaHdpZGVoZWJyZXcgPSAweDA1Yjc7CiAgdC5wYXplcmhlYnJldyA9IDB4MDVhMTsKICB0LnBib3BvbW9mbyA9IDB4MzEwNjsKICB0LnBjaXJjbGUgPSAweDI0ZGY7CiAgdC5wZG90YWNjZW50ID0gMHgxZTU3OwogIHQucGUgPSAweDA1ZTQ7CiAgdC5wZWN5cmlsbGljID0gMHgwNDNmOwogIHQucGVkYWdlc2ggPSAweGZiNDQ7CiAgdC5wZWRhZ2VzaGhlYnJldyA9IDB4ZmI0NDsKICB0LnBlZXppc3F1YXJlID0gMHgzMzNiOwogIHQucGVmaW5hbGRhZ2VzaGhlYnJldyA9IDB4ZmI0MzsKICB0LnBlaGFyYWJpYyA9IDB4MDY3ZTsKICB0LnBlaGFybWVuaWFuID0gMHgwNTdhOwogIHQucGVoZWJyZXcgPSAweDA1ZTQ7CiAgdC5wZWhmaW5hbGFyYWJpYyA9IDB4ZmI1NzsKICB0LnBlaGluaXRpYWxhcmFiaWMgPSAweGZiNTg7CiAgdC5wZWhpcmFnYW5hID0gMHgzMDdhOwogIHQucGVobWVkaWFsYXJhYmljID0gMHhmYjU5OwogIHQucGVrYXRha2FuYSA9IDB4MzBkYTsKICB0LnBlbWlkZGxlaG9va2N5cmlsbGljID0gMHgwNGE3OwogIHQucGVyYWZlaGVicmV3ID0gMHhmYjRlOwogIHQucGVyY2VudCA9IDB4MDAyNTsKICB0LnBlcmNlbnRhcmFiaWMgPSAweDA2NmE7CiAgdC5wZXJjZW50bW9ub3NwYWNlID0gMHhmZjA1OwogIHQucGVyY2VudHNtYWxsID0gMHhmZTZhOwogIHQucGVyaW9kID0gMHgwMDJlOwogIHQucGVyaW9kYXJtZW5pYW4gPSAweDA1ODk7CiAgdC5wZXJpb2RjZW50ZXJlZCA9IDB4MDBiNzsKICB0LnBlcmlvZGhhbGZ3aWR0aCA9IDB4ZmY2MTsKICB0LnBlcmlvZGluZmVyaW9yID0gMHhmNmU3OwogIHQucGVyaW9kbW9ub3NwYWNlID0gMHhmZjBlOwogIHQucGVyaW9kc21hbGwgPSAweGZlNTI7CiAgdC5wZXJpb2RzdXBlcmlvciA9IDB4ZjZlODsKICB0LnBlcmlzcG9tZW5pZ3JlZWtjbWIgPSAweDAzNDI7CiAgdC5wZXJwZW5kaWN1bGFyID0gMHgyMmE1OwogIHQucGVydGhvdXNhbmQgPSAweDIwMzA7CiAgdC5wZXNldGEgPSAweDIwYTc7CiAgdC5wZnNxdWFyZSA9IDB4MzM4YTsKICB0LnBoYWJlbmdhbGkgPSAweDA5YWI7CiAgdC5waGFkZXZhID0gMHgwOTJiOwogIHQucGhhZ3VqYXJhdGkgPSAweDBhYWI7CiAgdC5waGFndXJtdWtoaSA9IDB4MGEyYjsKICB0LnBoaSA9IDB4MDNjNjsKICB0LnBoaTEgPSAweDAzZDU7CiAgdC5waGlldXBoYWNpcmNsZWtvcmVhbiA9IDB4MzI3YTsKICB0LnBoaWV1cGhhcGFyZW5rb3JlYW4gPSAweDMyMWE7CiAgdC5waGlldXBoY2lyY2xla29yZWFuID0gMHgzMjZjOwogIHQucGhpZXVwaGtvcmVhbiA9IDB4MzE0ZDsKICB0LnBoaWV1cGhwYXJlbmtvcmVhbiA9IDB4MzIwYzsKICB0LnBoaWxhdGluID0gMHgwMjc4OwogIHQucGhpbnRodXRoYWkgPSAweDBlM2E7CiAgdC5waGlzeW1ib2xncmVlayA9IDB4MDNkNTsKICB0LnBob29rID0gMHgwMWE1OwogIHQucGhvcGhhbnRoYWkgPSAweDBlMWU7CiAgdC5waG9waHVuZ3RoYWkgPSAweDBlMWM7CiAgdC5waG9zYW1waGFvdGhhaSA9IDB4MGUyMDsKICB0LnBpID0gMHgwM2MwOwogIHQucGlldXBhY2lyY2xla29yZWFuID0gMHgzMjczOwogIHQucGlldXBhcGFyZW5rb3JlYW4gPSAweDMyMTM7CiAgdC5waWV1cGNpZXVja29yZWFuID0gMHgzMTc2OwogIHQucGlldXBjaXJjbGVrb3JlYW4gPSAweDMyNjU7CiAgdC5waWV1cGtpeWVva2tvcmVhbiA9IDB4MzE3MjsKICB0LnBpZXVwa29yZWFuID0gMHgzMTQyOwogIHQucGlldXBwYXJlbmtvcmVhbiA9IDB4MzIwNTsKICB0LnBpZXVwc2lvc2tpeWVva2tvcmVhbiA9IDB4MzE3NDsKICB0LnBpZXVwc2lvc2tvcmVhbiA9IDB4MzE0NDsKICB0LnBpZXVwc2lvc3Rpa2V1dGtvcmVhbiA9IDB4MzE3NTsKICB0LnBpZXVwdGhpZXV0aGtvcmVhbiA9IDB4MzE3NzsKICB0LnBpZXVwdGlrZXV0a29yZWFuID0gMHgzMTczOwogIHQucGloaXJhZ2FuYSA9IDB4MzA3NDsKICB0LnBpa2F0YWthbmEgPSAweDMwZDQ7CiAgdC5waXN5bWJvbGdyZWVrID0gMHgwM2Q2OwogIHQucGl3cmFybWVuaWFuID0gMHgwNTgzOwogIHQucGxhbmNrb3ZlcjJwaSA9IDB4MjEwZjsKICB0LnBsYW5ja292ZXIycGkxID0gMHgyMTBmOwogIHQucGx1cyA9IDB4MDAyYjsKICB0LnBsdXNiZWxvd2NtYiA9IDB4MDMxZjsKICB0LnBsdXNjaXJjbGUgPSAweDIyOTU7CiAgdC5wbHVzbWludXMgPSAweDAwYjE7CiAgdC5wbHVzbW9kID0gMHgwMmQ2OwogIHQucGx1c21vbm9zcGFjZSA9IDB4ZmYwYjsKICB0LnBsdXNzbWFsbCA9IDB4ZmU2MjsKICB0LnBsdXNzdXBlcmlvciA9IDB4MjA3YTsKICB0LnBtb25vc3BhY2UgPSAweGZmNTA7CiAgdC5wbXNxdWFyZSA9IDB4MzNkODsKICB0LnBvaGlyYWdhbmEgPSAweDMwN2Q7CiAgdC5wb2ludGluZ2luZGV4ZG93bndoaXRlID0gMHgyNjFmOwogIHQucG9pbnRpbmdpbmRleGxlZnR3aGl0ZSA9IDB4MjYxYzsKICB0LnBvaW50aW5naW5kZXhyaWdodHdoaXRlID0gMHgyNjFlOwogIHQucG9pbnRpbmdpbmRleHVwd2hpdGUgPSAweDI2MWQ7CiAgdC5wb2thdGFrYW5hID0gMHgzMGRkOwogIHQucG9wbGF0aGFpID0gMHgwZTFiOwogIHQucG9zdGFsbWFyayA9IDB4MzAxMjsKICB0LnBvc3RhbG1hcmtmYWNlID0gMHgzMDIwOwogIHQucHBhcmVuID0gMHgyNGFiOwogIHQucHJlY2VkZXMgPSAweDIyN2E7CiAgdC5wcmVzY3JpcHRpb24gPSAweDIxMWU7CiAgdC5wcmltZW1vZCA9IDB4MDJiOTsKICB0LnByaW1lcmV2ZXJzZWQgPSAweDIwMzU7CiAgdC5wcm9kdWN0ID0gMHgyMjBmOwogIHQucHJvamVjdGl2ZSA9IDB4MjMwNTsKICB0LnByb2xvbmdlZGthbmEgPSAweDMwZmM7CiAgdC5wcm9wZWxsb3IgPSAweDIzMTg7CiAgdC5wcm9wZXJzdWJzZXQgPSAweDIyODI7CiAgdC5wcm9wZXJzdXBlcnNldCA9IDB4MjI4MzsKICB0LnByb3BvcnRpb24gPSAweDIyMzc7CiAgdC5wcm9wb3J0aW9uYWwgPSAweDIyMWQ7CiAgdC5wc2kgPSAweDAzYzg7CiAgdC5wc2ljeXJpbGxpYyA9IDB4MDQ3MTsKICB0LnBzaWxpcG5ldW1hdGFjeXJpbGxpY2NtYiA9IDB4MDQ4NjsKICB0LnBzc3F1YXJlID0gMHgzM2IwOwogIHQucHVoaXJhZ2FuYSA9IDB4MzA3NzsKICB0LnB1a2F0YWthbmEgPSAweDMwZDc7CiAgdC5wdnNxdWFyZSA9IDB4MzNiNDsKICB0LnB3c3F1YXJlID0gMHgzM2JhOwogIHQucSA9IDB4MDA3MTsKICB0LnFhZGV2YSA9IDB4MDk1ODsKICB0LnFhZG1haGVicmV3ID0gMHgwNWE4OwogIHQucWFmYXJhYmljID0gMHgwNjQyOwogIHQucWFmZmluYWxhcmFiaWMgPSAweGZlZDY7CiAgdC5xYWZpbml0aWFsYXJhYmljID0gMHhmZWQ3OwogIHQucWFmbWVkaWFsYXJhYmljID0gMHhmZWQ4OwogIHQucWFtYXRzID0gMHgwNWI4OwogIHQucWFtYXRzMTAgPSAweDA1Yjg7CiAgdC5xYW1hdHMxYSA9IDB4MDViODsKICB0LnFhbWF0czFjID0gMHgwNWI4OwogIHQucWFtYXRzMjcgPSAweDA1Yjg7CiAgdC5xYW1hdHMyOSA9IDB4MDViODsKICB0LnFhbWF0czMzID0gMHgwNWI4OwogIHQucWFtYXRzZGUgPSAweDA1Yjg7CiAgdC5xYW1hdHNoZWJyZXcgPSAweDA1Yjg7CiAgdC5xYW1hdHNuYXJyb3doZWJyZXcgPSAweDA1Yjg7CiAgdC5xYW1hdHNxYXRhbmhlYnJldyA9IDB4MDViODsKICB0LnFhbWF0c3FhdGFubmFycm93aGVicmV3ID0gMHgwNWI4OwogIHQucWFtYXRzcWF0YW5xdWFydGVyaGVicmV3ID0gMHgwNWI4OwogIHQucWFtYXRzcWF0YW53aWRlaGVicmV3ID0gMHgwNWI4OwogIHQucWFtYXRzcXVhcnRlcmhlYnJldyA9IDB4MDViODsKICB0LnFhbWF0c3dpZGVoZWJyZXcgPSAweDA1Yjg7CiAgdC5xYXJuZXlwYXJhaGVicmV3ID0gMHgwNTlmOwogIHQucWJvcG9tb2ZvID0gMHgzMTExOwogIHQucWNpcmNsZSA9IDB4MjRlMDsKICB0LnFob29rID0gMHgwMmEwOwogIHQucW1vbm9zcGFjZSA9IDB4ZmY1MTsKICB0LnFvZiA9IDB4MDVlNzsKICB0LnFvZmRhZ2VzaCA9IDB4ZmI0NzsKICB0LnFvZmRhZ2VzaGhlYnJldyA9IDB4ZmI0NzsKICB0LnFvZmhlYnJldyA9IDB4MDVlNzsKICB0LnFwYXJlbiA9IDB4MjRhYzsKICB0LnF1YXJ0ZXJub3RlID0gMHgyNjY5OwogIHQucXVidXRzID0gMHgwNWJiOwogIHQucXVidXRzMTggPSAweDA1YmI7CiAgdC5xdWJ1dHMyNSA9IDB4MDViYjsKICB0LnF1YnV0czMxID0gMHgwNWJiOwogIHQucXVidXRzaGVicmV3ID0gMHgwNWJiOwogIHQucXVidXRzbmFycm93aGVicmV3ID0gMHgwNWJiOwogIHQucXVidXRzcXVhcnRlcmhlYnJldyA9IDB4MDViYjsKICB0LnF1YnV0c3dpZGVoZWJyZXcgPSAweDA1YmI7CiAgdC5xdWVzdGlvbiA9IDB4MDAzZjsKICB0LnF1ZXN0aW9uYXJhYmljID0gMHgwNjFmOwogIHQucXVlc3Rpb25hcm1lbmlhbiA9IDB4MDU1ZTsKICB0LnF1ZXN0aW9uZG93biA9IDB4MDBiZjsKICB0LnF1ZXN0aW9uZG93bnNtYWxsID0gMHhmN2JmOwogIHQucXVlc3Rpb25ncmVlayA9IDB4MDM3ZTsKICB0LnF1ZXN0aW9ubW9ub3NwYWNlID0gMHhmZjFmOwogIHQucXVlc3Rpb25zbWFsbCA9IDB4ZjczZjsKICB0LnF1b3RlZGJsID0gMHgwMDIyOwogIHQucXVvdGVkYmxiYXNlID0gMHgyMDFlOwogIHQucXVvdGVkYmxsZWZ0ID0gMHgyMDFjOwogIHQucXVvdGVkYmxtb25vc3BhY2UgPSAweGZmMDI7CiAgdC5xdW90ZWRibHByaW1lID0gMHgzMDFlOwogIHQucXVvdGVkYmxwcmltZXJldmVyc2VkID0gMHgzMDFkOwogIHQucXVvdGVkYmxyaWdodCA9IDB4MjAxZDsKICB0LnF1b3RlbGVmdCA9IDB4MjAxODsKICB0LnF1b3RlbGVmdHJldmVyc2VkID0gMHgyMDFiOwogIHQucXVvdGVyZXZlcnNlZCA9IDB4MjAxYjsKICB0LnF1b3RlcmlnaHQgPSAweDIwMTk7CiAgdC5xdW90ZXJpZ2h0biA9IDB4MDE0OTsKICB0LnF1b3Rlc2luZ2xiYXNlID0gMHgyMDFhOwogIHQucXVvdGVzaW5nbGUgPSAweDAwMjc7CiAgdC5xdW90ZXNpbmdsZW1vbm9zcGFjZSA9IDB4ZmYwNzsKICB0LnIgPSAweDAwNzI7CiAgdC5yYWFybWVuaWFuID0gMHgwNTdjOwogIHQucmFiZW5nYWxpID0gMHgwOWIwOwogIHQucmFjdXRlID0gMHgwMTU1OwogIHQucmFkZXZhID0gMHgwOTMwOwogIHQucmFkaWNhbCA9IDB4MjIxYTsKICB0LnJhZGljYWxleCA9IDB4ZjhlNTsKICB0LnJhZG92ZXJzc3F1YXJlID0gMHgzM2FlOwogIHQucmFkb3ZlcnNzcXVhcmVkc3F1YXJlID0gMHgzM2FmOwogIHQucmFkc3F1YXJlID0gMHgzM2FkOwogIHQucmFmZSA9IDB4MDViZjsKICB0LnJhZmVoZWJyZXcgPSAweDA1YmY7CiAgdC5yYWd1amFyYXRpID0gMHgwYWIwOwogIHQucmFndXJtdWtoaSA9IDB4MGEzMDsKICB0LnJhaGlyYWdhbmEgPSAweDMwODk7CiAgdC5yYWthdGFrYW5hID0gMHgzMGU5OwogIHQucmFrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY5NzsKICB0LnJhbG93ZXJkaWFnb25hbGJlbmdhbGkgPSAweDA5ZjE7CiAgdC5yYW1pZGRsZWRpYWdvbmFsYmVuZ2FsaSA9IDB4MDlmMDsKICB0LnJhbXNob3JuID0gMHgwMjY0OwogIHQucmF0aW8gPSAweDIyMzY7CiAgdC5yYm9wb21vZm8gPSAweDMxMTY7CiAgdC5yY2Fyb24gPSAweDAxNTk7CiAgdC5yY2VkaWxsYSA9IDB4MDE1NzsKICB0LnJjaXJjbGUgPSAweDI0ZTE7CiAgdC5yY29tbWFhY2NlbnQgPSAweDAxNTc7CiAgdC5yZGJsZ3JhdmUgPSAweDAyMTE7CiAgdC5yZG90YWNjZW50ID0gMHgxZTU5OwogIHQucmRvdGJlbG93ID0gMHgxZTViOwogIHQucmRvdGJlbG93bWFjcm9uID0gMHgxZTVkOwogIHQucmVmZXJlbmNlbWFyayA9IDB4MjAzYjsKICB0LnJlZmxleHN1YnNldCA9IDB4MjI4NjsKICB0LnJlZmxleHN1cGVyc2V0ID0gMHgyMjg3OwogIHQucmVnaXN0ZXJlZCA9IDB4MDBhZTsKICB0LnJlZ2lzdGVyc2FucyA9IDB4ZjhlODsKICB0LnJlZ2lzdGVyc2VyaWYgPSAweGY2ZGE7CiAgdC5yZWhhcmFiaWMgPSAweDA2MzE7CiAgdC5yZWhhcm1lbmlhbiA9IDB4MDU4MDsKICB0LnJlaGZpbmFsYXJhYmljID0gMHhmZWFlOwogIHQucmVoaXJhZ2FuYSA9IDB4MzA4YzsKICB0LnJla2F0YWthbmEgPSAweDMwZWM7CiAgdC5yZWthdGFrYW5haGFsZndpZHRoID0gMHhmZjlhOwogIHQucmVzaCA9IDB4MDVlODsKICB0LnJlc2hkYWdlc2hoZWJyZXcgPSAweGZiNDg7CiAgdC5yZXNoaGVicmV3ID0gMHgwNWU4OwogIHQucmV2ZXJzZWR0aWxkZSA9IDB4MjIzZDsKICB0LnJldmlhaGVicmV3ID0gMHgwNTk3OwogIHQucmV2aWFtdWdyYXNoaGVicmV3ID0gMHgwNTk3OwogIHQucmV2bG9naWNhbG5vdCA9IDB4MjMxMDsKICB0LnJmaXNoaG9vayA9IDB4MDI3ZTsKICB0LnJmaXNoaG9va3JldmVyc2VkID0gMHgwMjdmOwogIHQucmhhYmVuZ2FsaSA9IDB4MDlkZDsKICB0LnJoYWRldmEgPSAweDA5NWQ7CiAgdC5yaG8gPSAweDAzYzE7CiAgdC5yaG9vayA9IDB4MDI3ZDsKICB0LnJob29rdHVybmVkID0gMHgwMjdiOwogIHQucmhvb2t0dXJuZWRzdXBlcmlvciA9IDB4MDJiNTsKICB0LnJob3N5bWJvbGdyZWVrID0gMHgwM2YxOwogIHQucmhvdGljaG9va21vZCA9IDB4MDJkZTsKICB0LnJpZXVsYWNpcmNsZWtvcmVhbiA9IDB4MzI3MTsKICB0LnJpZXVsYXBhcmVua29yZWFuID0gMHgzMjExOwogIHQucmlldWxjaXJjbGVrb3JlYW4gPSAweDMyNjM7CiAgdC5yaWV1bGhpZXVoa29yZWFuID0gMHgzMTQwOwogIHQucmlldWxraXllb2trb3JlYW4gPSAweDMxM2E7CiAgdC5yaWV1bGtpeWVva3Npb3Nrb3JlYW4gPSAweDMxNjk7CiAgdC5yaWV1bGtvcmVhbiA9IDB4MzEzOTsKICB0LnJpZXVsbWlldW1rb3JlYW4gPSAweDMxM2I7CiAgdC5yaWV1bHBhbnNpb3Nrb3JlYW4gPSAweDMxNmM7CiAgdC5yaWV1bHBhcmVua29yZWFuID0gMHgzMjAzOwogIHQucmlldWxwaGlldXBoa29yZWFuID0gMHgzMTNmOwogIHQucmlldWxwaWV1cGtvcmVhbiA9IDB4MzEzYzsKICB0LnJpZXVscGlldXBzaW9za29yZWFuID0gMHgzMTZiOwogIHQucmlldWxzaW9za29yZWFuID0gMHgzMTNkOwogIHQucmlldWx0aGlldXRoa29yZWFuID0gMHgzMTNlOwogIHQucmlldWx0aWtldXRrb3JlYW4gPSAweDMxNmE7CiAgdC5yaWV1bHllb3JpbmhpZXVoa29yZWFuID0gMHgzMTZkOwogIHQucmlnaHRhbmdsZSA9IDB4MjIxZjsKICB0LnJpZ2h0dGFja2JlbG93Y21iID0gMHgwMzE5OwogIHQucmlnaHR0cmlhbmdsZSA9IDB4MjJiZjsKICB0LnJpaGlyYWdhbmEgPSAweDMwOGE7CiAgdC5yaWthdGFrYW5hID0gMHgzMGVhOwogIHQucmlrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY5ODsKICB0LnJpbmcgPSAweDAyZGE7CiAgdC5yaW5nYmVsb3djbWIgPSAweDAzMjU7CiAgdC5yaW5nY21iID0gMHgwMzBhOwogIHQucmluZ2hhbGZsZWZ0ID0gMHgwMmJmOwogIHQucmluZ2hhbGZsZWZ0YXJtZW5pYW4gPSAweDA1NTk7CiAgdC5yaW5naGFsZmxlZnRiZWxvd2NtYiA9IDB4MDMxYzsKICB0LnJpbmdoYWxmbGVmdGNlbnRlcmVkID0gMHgwMmQzOwogIHQucmluZ2hhbGZyaWdodCA9IDB4MDJiZTsKICB0LnJpbmdoYWxmcmlnaHRiZWxvd2NtYiA9IDB4MDMzOTsKICB0LnJpbmdoYWxmcmlnaHRjZW50ZXJlZCA9IDB4MDJkMjsKICB0LnJpbnZlcnRlZGJyZXZlID0gMHgwMjEzOwogIHQucml0dG9ydXNxdWFyZSA9IDB4MzM1MTsKICB0LnJsaW5lYmVsb3cgPSAweDFlNWY7CiAgdC5ybG9uZ2xlZyA9IDB4MDI3YzsKICB0LnJsb25nbGVndHVybmVkID0gMHgwMjdhOwogIHQucm1vbm9zcGFjZSA9IDB4ZmY1MjsKICB0LnJvaGlyYWdhbmEgPSAweDMwOGQ7CiAgdC5yb2thdGFrYW5hID0gMHgzMGVkOwogIHQucm9rYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY5YjsKICB0LnJvcnVhdGhhaSA9IDB4MGUyMzsKICB0LnJwYXJlbiA9IDB4MjRhZDsKICB0LnJyYWJlbmdhbGkgPSAweDA5ZGM7CiAgdC5ycmFkZXZhID0gMHgwOTMxOwogIHQucnJhZ3VybXVraGkgPSAweDBhNWM7CiAgdC5ycmVoYXJhYmljID0gMHgwNjkxOwogIHQucnJlaGZpbmFsYXJhYmljID0gMHhmYjhkOwogIHQucnJ2b2NhbGljYmVuZ2FsaSA9IDB4MDllMDsKICB0LnJydm9jYWxpY2RldmEgPSAweDA5NjA7CiAgdC5ycnZvY2FsaWNndWphcmF0aSA9IDB4MGFlMDsKICB0LnJydm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGkgPSAweDA5YzQ7CiAgdC5ycnZvY2FsaWN2b3dlbHNpZ25kZXZhID0gMHgwOTQ0OwogIHQucnJ2b2NhbGljdm93ZWxzaWduZ3VqYXJhdGkgPSAweDBhYzQ7CiAgdC5yc3VwZXJpb3IgPSAweGY2ZjE7CiAgdC5ydGJsb2NrID0gMHgyNTkwOwogIHQucnR1cm5lZCA9IDB4MDI3OTsKICB0LnJ0dXJuZWRzdXBlcmlvciA9IDB4MDJiNDsKICB0LnJ1aGlyYWdhbmEgPSAweDMwOGI7CiAgdC5ydWthdGFrYW5hID0gMHgzMGViOwogIHQucnVrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY5OTsKICB0LnJ1cGVlbWFya2JlbmdhbGkgPSAweDA5ZjI7CiAgdC5ydXBlZXNpZ25iZW5nYWxpID0gMHgwOWYzOwogIHQucnVwaWFoID0gMHhmNmRkOwogIHQucnV0aGFpID0gMHgwZTI0OwogIHQucnZvY2FsaWNiZW5nYWxpID0gMHgwOThiOwogIHQucnZvY2FsaWNkZXZhID0gMHgwOTBiOwogIHQucnZvY2FsaWNndWphcmF0aSA9IDB4MGE4YjsKICB0LnJ2b2NhbGljdm93ZWxzaWduYmVuZ2FsaSA9IDB4MDljMzsKICB0LnJ2b2NhbGljdm93ZWxzaWduZGV2YSA9IDB4MDk0MzsKICB0LnJ2b2NhbGljdm93ZWxzaWduZ3VqYXJhdGkgPSAweDBhYzM7CiAgdC5zID0gMHgwMDczOwogIHQuc2FiZW5nYWxpID0gMHgwOWI4OwogIHQuc2FjdXRlID0gMHgwMTViOwogIHQuc2FjdXRlZG90YWNjZW50ID0gMHgxZTY1OwogIHQuc2FkYXJhYmljID0gMHgwNjM1OwogIHQuc2FkZXZhID0gMHgwOTM4OwogIHQuc2FkZmluYWxhcmFiaWMgPSAweGZlYmE7CiAgdC5zYWRpbml0aWFsYXJhYmljID0gMHhmZWJiOwogIHQuc2FkbWVkaWFsYXJhYmljID0gMHhmZWJjOwogIHQuc2FndWphcmF0aSA9IDB4MGFiODsKICB0LnNhZ3VybXVraGkgPSAweDBhMzg7CiAgdC5zYWhpcmFnYW5hID0gMHgzMDU1OwogIHQuc2FrYXRha2FuYSA9IDB4MzBiNTsKICB0LnNha2F0YWthbmFoYWxmd2lkdGggPSAweGZmN2I7CiAgdC5zYWxsYWxsYWhvdWFsYXloZXdhc2FsbGFtYXJhYmljID0gMHhmZGZhOwogIHQuc2FtZWtoID0gMHgwNWUxOwogIHQuc2FtZWtoZGFnZXNoID0gMHhmYjQxOwogIHQuc2FtZWtoZGFnZXNoaGVicmV3ID0gMHhmYjQxOwogIHQuc2FtZWtoaGVicmV3ID0gMHgwNWUxOwogIHQuc2FyYWFhdGhhaSA9IDB4MGUzMjsKICB0LnNhcmFhZXRoYWkgPSAweDBlNDE7CiAgdC5zYXJhYWltYWltYWxhaXRoYWkgPSAweDBlNDQ7CiAgdC5zYXJhYWltYWltdWFudGhhaSA9IDB4MGU0MzsKICB0LnNhcmFhbXRoYWkgPSAweDBlMzM7CiAgdC5zYXJhYXRoYWkgPSAweDBlMzA7CiAgdC5zYXJhZXRoYWkgPSAweDBlNDA7CiAgdC5zYXJhaWlsZWZ0dGhhaSA9IDB4Zjg4NjsKICB0LnNhcmFpaXRoYWkgPSAweDBlMzU7CiAgdC5zYXJhaWxlZnR0aGFpID0gMHhmODg1OwogIHQuc2FyYWl0aGFpID0gMHgwZTM0OwogIHQuc2FyYW90aGFpID0gMHgwZTQyOwogIHQuc2FyYXVlZWxlZnR0aGFpID0gMHhmODg4OwogIHQuc2FyYXVlZXRoYWkgPSAweDBlMzc7CiAgdC5zYXJhdWVsZWZ0dGhhaSA9IDB4Zjg4NzsKICB0LnNhcmF1ZXRoYWkgPSAweDBlMzY7CiAgdC5zYXJhdXRoYWkgPSAweDBlMzg7CiAgdC5zYXJhdXV0aGFpID0gMHgwZTM5OwogIHQuc2JvcG9tb2ZvID0gMHgzMTE5OwogIHQuc2Nhcm9uID0gMHgwMTYxOwogIHQuc2Nhcm9uZG90YWNjZW50ID0gMHgxZTY3OwogIHQuc2NlZGlsbGEgPSAweDAxNWY7CiAgdC5zY2h3YSA9IDB4MDI1OTsKICB0LnNjaHdhY3lyaWxsaWMgPSAweDA0ZDk7CiAgdC5zY2h3YWRpZXJlc2lzY3lyaWxsaWMgPSAweDA0ZGI7CiAgdC5zY2h3YWhvb2sgPSAweDAyNWE7CiAgdC5zY2lyY2xlID0gMHgyNGUyOwogIHQuc2NpcmN1bWZsZXggPSAweDAxNWQ7CiAgdC5zY29tbWFhY2NlbnQgPSAweDAyMTk7CiAgdC5zZG90YWNjZW50ID0gMHgxZTYxOwogIHQuc2RvdGJlbG93ID0gMHgxZTYzOwogIHQuc2RvdGJlbG93ZG90YWNjZW50ID0gMHgxZTY5OwogIHQuc2VhZ3VsbGJlbG93Y21iID0gMHgwMzNjOwogIHQuc2Vjb25kID0gMHgyMDMzOwogIHQuc2Vjb25kdG9uZWNoaW5lc2UgPSAweDAyY2E7CiAgdC5zZWN0aW9uID0gMHgwMGE3OwogIHQuc2VlbmFyYWJpYyA9IDB4MDYzMzsKICB0LnNlZW5maW5hbGFyYWJpYyA9IDB4ZmViMjsKICB0LnNlZW5pbml0aWFsYXJhYmljID0gMHhmZWIzOwogIHQuc2Vlbm1lZGlhbGFyYWJpYyA9IDB4ZmViNDsKICB0LnNlZ29sID0gMHgwNWI2OwogIHQuc2Vnb2wxMyA9IDB4MDViNjsKICB0LnNlZ29sMWYgPSAweDA1YjY7CiAgdC5zZWdvbDJjID0gMHgwNWI2OwogIHQuc2Vnb2xoZWJyZXcgPSAweDA1YjY7CiAgdC5zZWdvbG5hcnJvd2hlYnJldyA9IDB4MDViNjsKICB0LnNlZ29scXVhcnRlcmhlYnJldyA9IDB4MDViNjsKICB0LnNlZ29sdGFoZWJyZXcgPSAweDA1OTI7CiAgdC5zZWdvbHdpZGVoZWJyZXcgPSAweDA1YjY7CiAgdC5zZWhhcm1lbmlhbiA9IDB4MDU3ZDsKICB0LnNlaGlyYWdhbmEgPSAweDMwNWI7CiAgdC5zZWthdGFrYW5hID0gMHgzMGJiOwogIHQuc2VrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY3ZTsKICB0LnNlbWljb2xvbiA9IDB4MDAzYjsKICB0LnNlbWljb2xvbmFyYWJpYyA9IDB4MDYxYjsKICB0LnNlbWljb2xvbm1vbm9zcGFjZSA9IDB4ZmYxYjsKICB0LnNlbWljb2xvbnNtYWxsID0gMHhmZTU0OwogIHQuc2VtaXZvaWNlZG1hcmtrYW5hID0gMHgzMDljOwogIHQuc2VtaXZvaWNlZG1hcmtrYW5haGFsZndpZHRoID0gMHhmZjlmOwogIHQuc2VudGlzcXVhcmUgPSAweDMzMjI7CiAgdC5zZW50b3NxdWFyZSA9IDB4MzMyMzsKICB0LnNldmVuID0gMHgwMDM3OwogIHQuc2V2ZW5hcmFiaWMgPSAweDA2Njc7CiAgdC5zZXZlbmJlbmdhbGkgPSAweDA5ZWQ7CiAgdC5zZXZlbmNpcmNsZSA9IDB4MjQ2NjsKICB0LnNldmVuY2lyY2xlaW52ZXJzZXNhbnNzZXJpZiA9IDB4Mjc5MDsKICB0LnNldmVuZGV2YSA9IDB4MDk2ZDsKICB0LnNldmVuZWlnaHRocyA9IDB4MjE1ZTsKICB0LnNldmVuZ3VqYXJhdGkgPSAweDBhZWQ7CiAgdC5zZXZlbmd1cm11a2hpID0gMHgwYTZkOwogIHQuc2V2ZW5oYWNrYXJhYmljID0gMHgwNjY3OwogIHQuc2V2ZW5oYW5nemhvdSA9IDB4MzAyNzsKICB0LnNldmVuaWRlb2dyYXBoaWNwYXJlbiA9IDB4MzIyNjsKICB0LnNldmVuaW5mZXJpb3IgPSAweDIwODc7CiAgdC5zZXZlbm1vbm9zcGFjZSA9IDB4ZmYxNzsKICB0LnNldmVub2xkc3R5bGUgPSAweGY3Mzc7CiAgdC5zZXZlbnBhcmVuID0gMHgyNDdhOwogIHQuc2V2ZW5wZXJpb2QgPSAweDI0OGU7CiAgdC5zZXZlbnBlcnNpYW4gPSAweDA2Zjc7CiAgdC5zZXZlbnJvbWFuID0gMHgyMTc2OwogIHQuc2V2ZW5zdXBlcmlvciA9IDB4MjA3NzsKICB0LnNldmVudGVlbmNpcmNsZSA9IDB4MjQ3MDsKICB0LnNldmVudGVlbnBhcmVuID0gMHgyNDg0OwogIHQuc2V2ZW50ZWVucGVyaW9kID0gMHgyNDk4OwogIHQuc2V2ZW50aGFpID0gMHgwZTU3OwogIHQuc2Z0aHlwaGVuID0gMHgwMGFkOwogIHQuc2hhYXJtZW5pYW4gPSAweDA1Nzc7CiAgdC5zaGFiZW5nYWxpID0gMHgwOWI2OwogIHQuc2hhY3lyaWxsaWMgPSAweDA0NDg7CiAgdC5zaGFkZGFhcmFiaWMgPSAweDA2NTE7CiAgdC5zaGFkZGFkYW1tYWFyYWJpYyA9IDB4ZmM2MTsKICB0LnNoYWRkYWRhbW1hdGFuYXJhYmljID0gMHhmYzVlOwogIHQuc2hhZGRhZmF0aGFhcmFiaWMgPSAweGZjNjA7CiAgdC5zaGFkZGFrYXNyYWFyYWJpYyA9IDB4ZmM2MjsKICB0LnNoYWRkYWthc3JhdGFuYXJhYmljID0gMHhmYzVmOwogIHQuc2hhZGUgPSAweDI1OTI7CiAgdC5zaGFkZWRhcmsgPSAweDI1OTM7CiAgdC5zaGFkZWxpZ2h0ID0gMHgyNTkxOwogIHQuc2hhZGVtZWRpdW0gPSAweDI1OTI7CiAgdC5zaGFkZXZhID0gMHgwOTM2OwogIHQuc2hhZ3VqYXJhdGkgPSAweDBhYjY7CiAgdC5zaGFndXJtdWtoaSA9IDB4MGEzNjsKICB0LnNoYWxzaGVsZXRoZWJyZXcgPSAweDA1OTM7CiAgdC5zaGJvcG9tb2ZvID0gMHgzMTE1OwogIHQuc2hjaGFjeXJpbGxpYyA9IDB4MDQ0OTsKICB0LnNoZWVuYXJhYmljID0gMHgwNjM0OwogIHQuc2hlZW5maW5hbGFyYWJpYyA9IDB4ZmViNjsKICB0LnNoZWVuaW5pdGlhbGFyYWJpYyA9IDB4ZmViNzsKICB0LnNoZWVubWVkaWFsYXJhYmljID0gMHhmZWI4OwogIHQuc2hlaWNvcHRpYyA9IDB4MDNlMzsKICB0LnNoZXFlbCA9IDB4MjBhYTsKICB0LnNoZXFlbGhlYnJldyA9IDB4MjBhYTsKICB0LnNoZXZhID0gMHgwNWIwOwogIHQuc2hldmExMTUgPSAweDA1YjA7CiAgdC5zaGV2YTE1ID0gMHgwNWIwOwogIHQuc2hldmEyMiA9IDB4MDViMDsKICB0LnNoZXZhMmUgPSAweDA1YjA7CiAgdC5zaGV2YWhlYnJldyA9IDB4MDViMDsKICB0LnNoZXZhbmFycm93aGVicmV3ID0gMHgwNWIwOwogIHQuc2hldmFxdWFydGVyaGVicmV3ID0gMHgwNWIwOwogIHQuc2hldmF3aWRlaGVicmV3ID0gMHgwNWIwOwogIHQuc2hoYWN5cmlsbGljID0gMHgwNGJiOwogIHQuc2hpbWFjb3B0aWMgPSAweDAzZWQ7CiAgdC5zaGluID0gMHgwNWU5OwogIHQuc2hpbmRhZ2VzaCA9IDB4ZmI0OTsKICB0LnNoaW5kYWdlc2hoZWJyZXcgPSAweGZiNDk7CiAgdC5zaGluZGFnZXNoc2hpbmRvdCA9IDB4ZmIyYzsKICB0LnNoaW5kYWdlc2hzaGluZG90aGVicmV3ID0gMHhmYjJjOwogIHQuc2hpbmRhZ2VzaHNpbmRvdCA9IDB4ZmIyZDsKICB0LnNoaW5kYWdlc2hzaW5kb3RoZWJyZXcgPSAweGZiMmQ7CiAgdC5zaGluZG90aGVicmV3ID0gMHgwNWMxOwogIHQuc2hpbmhlYnJldyA9IDB4MDVlOTsKICB0LnNoaW5zaGluZG90ID0gMHhmYjJhOwogIHQuc2hpbnNoaW5kb3RoZWJyZXcgPSAweGZiMmE7CiAgdC5zaGluc2luZG90ID0gMHhmYjJiOwogIHQuc2hpbnNpbmRvdGhlYnJldyA9IDB4ZmIyYjsKICB0LnNob29rID0gMHgwMjgyOwogIHQuc2lnbWEgPSAweDAzYzM7CiAgdC5zaWdtYTEgPSAweDAzYzI7CiAgdC5zaWdtYWZpbmFsID0gMHgwM2MyOwogIHQuc2lnbWFsdW5hdGVzeW1ib2xncmVlayA9IDB4MDNmMjsKICB0LnNpaGlyYWdhbmEgPSAweDMwNTc7CiAgdC5zaWthdGFrYW5hID0gMHgzMGI3OwogIHQuc2lrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY3YzsKICB0LnNpbHVxaGVicmV3ID0gMHgwNWJkOwogIHQuc2lsdXFsZWZ0aGVicmV3ID0gMHgwNWJkOwogIHQuc2ltaWxhciA9IDB4MjIzYzsKICB0LnNpbmRvdGhlYnJldyA9IDB4MDVjMjsKICB0LnNpb3NhY2lyY2xla29yZWFuID0gMHgzMjc0OwogIHQuc2lvc2FwYXJlbmtvcmVhbiA9IDB4MzIxNDsKICB0LnNpb3NjaWV1Y2tvcmVhbiA9IDB4MzE3ZTsKICB0LnNpb3NjaXJjbGVrb3JlYW4gPSAweDMyNjY7CiAgdC5zaW9za2l5ZW9ra29yZWFuID0gMHgzMTdhOwogIHQuc2lvc2tvcmVhbiA9IDB4MzE0NTsKICB0LnNpb3NuaWV1bmtvcmVhbiA9IDB4MzE3YjsKICB0LnNpb3NwYXJlbmtvcmVhbiA9IDB4MzIwNjsKICB0LnNpb3NwaWV1cGtvcmVhbiA9IDB4MzE3ZDsKICB0LnNpb3N0aWtldXRrb3JlYW4gPSAweDMxN2M7CiAgdC5zaXggPSAweDAwMzY7CiAgdC5zaXhhcmFiaWMgPSAweDA2NjY7CiAgdC5zaXhiZW5nYWxpID0gMHgwOWVjOwogIHQuc2l4Y2lyY2xlID0gMHgyNDY1OwogIHQuc2l4Y2lyY2xlaW52ZXJzZXNhbnNzZXJpZiA9IDB4Mjc4ZjsKICB0LnNpeGRldmEgPSAweDA5NmM7CiAgdC5zaXhndWphcmF0aSA9IDB4MGFlYzsKICB0LnNpeGd1cm11a2hpID0gMHgwYTZjOwogIHQuc2l4aGFja2FyYWJpYyA9IDB4MDY2NjsKICB0LnNpeGhhbmd6aG91ID0gMHgzMDI2OwogIHQuc2l4aWRlb2dyYXBoaWNwYXJlbiA9IDB4MzIyNTsKICB0LnNpeGluZmVyaW9yID0gMHgyMDg2OwogIHQuc2l4bW9ub3NwYWNlID0gMHhmZjE2OwogIHQuc2l4b2xkc3R5bGUgPSAweGY3MzY7CiAgdC5zaXhwYXJlbiA9IDB4MjQ3OTsKICB0LnNpeHBlcmlvZCA9IDB4MjQ4ZDsKICB0LnNpeHBlcnNpYW4gPSAweDA2ZjY7CiAgdC5zaXhyb21hbiA9IDB4MjE3NTsKICB0LnNpeHN1cGVyaW9yID0gMHgyMDc2OwogIHQuc2l4dGVlbmNpcmNsZSA9IDB4MjQ2ZjsKICB0LnNpeHRlZW5jdXJyZW5jeWRlbm9taW5hdG9yYmVuZ2FsaSA9IDB4MDlmOTsKICB0LnNpeHRlZW5wYXJlbiA9IDB4MjQ4MzsKICB0LnNpeHRlZW5wZXJpb2QgPSAweDI0OTc7CiAgdC5zaXh0aGFpID0gMHgwZTU2OwogIHQuc2xhc2ggPSAweDAwMmY7CiAgdC5zbGFzaG1vbm9zcGFjZSA9IDB4ZmYwZjsKICB0LnNsb25nID0gMHgwMTdmOwogIHQuc2xvbmdkb3RhY2NlbnQgPSAweDFlOWI7CiAgdC5zbWlsZWZhY2UgPSAweDI2M2E7CiAgdC5zbW9ub3NwYWNlID0gMHhmZjUzOwogIHQuc29mcGFzdXFoZWJyZXcgPSAweDA1YzM7CiAgdC5zb2Z0aHlwaGVuID0gMHgwMGFkOwogIHQuc29mdHNpZ25jeXJpbGxpYyA9IDB4MDQ0YzsKICB0LnNvaGlyYWdhbmEgPSAweDMwNWQ7CiAgdC5zb2thdGFrYW5hID0gMHgzMGJkOwogIHQuc29rYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY3ZjsKICB0LnNvbGlkdXNsb25nb3ZlcmxheWNtYiA9IDB4MDMzODsKICB0LnNvbGlkdXNzaG9ydG92ZXJsYXljbWIgPSAweDAzMzc7CiAgdC5zb3J1c2l0aGFpID0gMHgwZTI5OwogIHQuc29zYWxhdGhhaSA9IDB4MGUyODsKICB0LnNvc290aGFpID0gMHgwZTBiOwogIHQuc29zdWF0aGFpID0gMHgwZTJhOwogIHQuc3BhY2UgPSAweDAwMjA7CiAgdC5zcGFjZWhhY2thcmFiaWMgPSAweDAwMjA7CiAgdC5zcGFkZSA9IDB4MjY2MDsKICB0LnNwYWRlc3VpdGJsYWNrID0gMHgyNjYwOwogIHQuc3BhZGVzdWl0d2hpdGUgPSAweDI2NjQ7CiAgdC5zcGFyZW4gPSAweDI0YWU7CiAgdC5zcXVhcmViZWxvd2NtYiA9IDB4MDMzYjsKICB0LnNxdWFyZWNjID0gMHgzM2M0OwogIHQuc3F1YXJlY20gPSAweDMzOWQ7CiAgdC5zcXVhcmVkaWFnb25hbGNyb3NzaGF0Y2hmaWxsID0gMHgyNWE5OwogIHQuc3F1YXJlaG9yaXpvbnRhbGZpbGwgPSAweDI1YTQ7CiAgdC5zcXVhcmVrZyA9IDB4MzM4ZjsKICB0LnNxdWFyZWttID0gMHgzMzllOwogIHQuc3F1YXJla21jYXBpdGFsID0gMHgzM2NlOwogIHQuc3F1YXJlbG4gPSAweDMzZDE7CiAgdC5zcXVhcmVsb2cgPSAweDMzZDI7CiAgdC5zcXVhcmVtZyA9IDB4MzM4ZTsKICB0LnNxdWFyZW1pbCA9IDB4MzNkNTsKICB0LnNxdWFyZW1tID0gMHgzMzljOwogIHQuc3F1YXJlbXNxdWFyZWQgPSAweDMzYTE7CiAgdC5zcXVhcmVvcnRob2dvbmFsY3Jvc3NoYXRjaGZpbGwgPSAweDI1YTY7CiAgdC5zcXVhcmV1cHBlcmxlZnR0b2xvd2VycmlnaHRmaWxsID0gMHgyNWE3OwogIHQuc3F1YXJldXBwZXJyaWdodHRvbG93ZXJsZWZ0ZmlsbCA9IDB4MjVhODsKICB0LnNxdWFyZXZlcnRpY2FsZmlsbCA9IDB4MjVhNTsKICB0LnNxdWFyZXdoaXRld2l0aHNtYWxsYmxhY2sgPSAweDI1YTM7CiAgdC5zcnNxdWFyZSA9IDB4MzNkYjsKICB0LnNzYWJlbmdhbGkgPSAweDA5Yjc7CiAgdC5zc2FkZXZhID0gMHgwOTM3OwogIHQuc3NhZ3VqYXJhdGkgPSAweDBhYjc7CiAgdC5zc2FuZ2NpZXVja29yZWFuID0gMHgzMTQ5OwogIHQuc3NhbmdoaWV1aGtvcmVhbiA9IDB4MzE4NTsKICB0LnNzYW5naWV1bmdrb3JlYW4gPSAweDMxODA7CiAgdC5zc2FuZ2tpeWVva2tvcmVhbiA9IDB4MzEzMjsKICB0LnNzYW5nbmlldW5rb3JlYW4gPSAweDMxNjU7CiAgdC5zc2FuZ3BpZXVwa29yZWFuID0gMHgzMTQzOwogIHQuc3NhbmdzaW9za29yZWFuID0gMHgzMTQ2OwogIHQuc3Nhbmd0aWtldXRrb3JlYW4gPSAweDMxMzg7CiAgdC5zc3VwZXJpb3IgPSAweGY2ZjI7CiAgdC5zdGVybGluZyA9IDB4MDBhMzsKICB0LnN0ZXJsaW5nbW9ub3NwYWNlID0gMHhmZmUxOwogIHQuc3Ryb2tlbG9uZ292ZXJsYXljbWIgPSAweDAzMzY7CiAgdC5zdHJva2VzaG9ydG92ZXJsYXljbWIgPSAweDAzMzU7CiAgdC5zdWJzZXQgPSAweDIyODI7CiAgdC5zdWJzZXRub3RlcXVhbCA9IDB4MjI4YTsKICB0LnN1YnNldG9yZXF1YWwgPSAweDIyODY7CiAgdC5zdWNjZWVkcyA9IDB4MjI3YjsKICB0LnN1Y2h0aGF0ID0gMHgyMjBiOwogIHQuc3VoaXJhZ2FuYSA9IDB4MzA1OTsKICB0LnN1a2F0YWthbmEgPSAweDMwYjk7CiAgdC5zdWthdGFrYW5haGFsZndpZHRoID0gMHhmZjdkOwogIHQuc3VrdW5hcmFiaWMgPSAweDA2NTI7CiAgdC5zdW1tYXRpb24gPSAweDIyMTE7CiAgdC5zdW4gPSAweDI2M2M7CiAgdC5zdXBlcnNldCA9IDB4MjI4MzsKICB0LnN1cGVyc2V0bm90ZXF1YWwgPSAweDIyOGI7CiAgdC5zdXBlcnNldG9yZXF1YWwgPSAweDIyODc7CiAgdC5zdnNxdWFyZSA9IDB4MzNkYzsKICB0LnN5b3V3YWVyYXNxdWFyZSA9IDB4MzM3YzsKICB0LnQgPSAweDAwNzQ7CiAgdC50YWJlbmdhbGkgPSAweDA5YTQ7CiAgdC50YWNrZG93biA9IDB4MjJhNDsKICB0LnRhY2tsZWZ0ID0gMHgyMmEzOwogIHQudGFkZXZhID0gMHgwOTI0OwogIHQudGFndWphcmF0aSA9IDB4MGFhNDsKICB0LnRhZ3VybXVraGkgPSAweDBhMjQ7CiAgdC50YWhhcmFiaWMgPSAweDA2Mzc7CiAgdC50YWhmaW5hbGFyYWJpYyA9IDB4ZmVjMjsKICB0LnRhaGluaXRpYWxhcmFiaWMgPSAweGZlYzM7CiAgdC50YWhpcmFnYW5hID0gMHgzMDVmOwogIHQudGFobWVkaWFsYXJhYmljID0gMHhmZWM0OwogIHQudGFpc3lvdWVyYXNxdWFyZSA9IDB4MzM3ZDsKICB0LnRha2F0YWthbmEgPSAweDMwYmY7CiAgdC50YWthdGFrYW5haGFsZndpZHRoID0gMHhmZjgwOwogIHQudGF0d2VlbGFyYWJpYyA9IDB4MDY0MDsKICB0LnRhdSA9IDB4MDNjNDsKICB0LnRhdiA9IDB4MDVlYTsKICB0LnRhdmRhZ2VzID0gMHhmYjRhOwogIHQudGF2ZGFnZXNoID0gMHhmYjRhOwogIHQudGF2ZGFnZXNoaGVicmV3ID0gMHhmYjRhOwogIHQudGF2aGVicmV3ID0gMHgwNWVhOwogIHQudGJhciA9IDB4MDE2NzsKICB0LnRib3BvbW9mbyA9IDB4MzEwYTsKICB0LnRjYXJvbiA9IDB4MDE2NTsKICB0LnRjY3VybCA9IDB4MDJhODsKICB0LnRjZWRpbGxhID0gMHgwMTYzOwogIHQudGNoZWhhcmFiaWMgPSAweDA2ODY7CiAgdC50Y2hlaGZpbmFsYXJhYmljID0gMHhmYjdiOwogIHQudGNoZWhpbml0aWFsYXJhYmljID0gMHhmYjdjOwogIHQudGNoZWhtZWRpYWxhcmFiaWMgPSAweGZiN2Q7CiAgdC50Y2lyY2xlID0gMHgyNGUzOwogIHQudGNpcmN1bWZsZXhiZWxvdyA9IDB4MWU3MTsKICB0LnRjb21tYWFjY2VudCA9IDB4MDE2MzsKICB0LnRkaWVyZXNpcyA9IDB4MWU5NzsKICB0LnRkb3RhY2NlbnQgPSAweDFlNmI7CiAgdC50ZG90YmVsb3cgPSAweDFlNmQ7CiAgdC50ZWN5cmlsbGljID0gMHgwNDQyOwogIHQudGVkZXNjZW5kZXJjeXJpbGxpYyA9IDB4MDRhZDsKICB0LnRlaGFyYWJpYyA9IDB4MDYyYTsKICB0LnRlaGZpbmFsYXJhYmljID0gMHhmZTk2OwogIHQudGVoaGFoaW5pdGlhbGFyYWJpYyA9IDB4ZmNhMjsKICB0LnRlaGhhaGlzb2xhdGVkYXJhYmljID0gMHhmYzBjOwogIHQudGVoaW5pdGlhbGFyYWJpYyA9IDB4ZmU5NzsKICB0LnRlaGlyYWdhbmEgPSAweDMwNjY7CiAgdC50ZWhqZWVtaW5pdGlhbGFyYWJpYyA9IDB4ZmNhMTsKICB0LnRlaGplZW1pc29sYXRlZGFyYWJpYyA9IDB4ZmMwYjsKICB0LnRlaG1hcmJ1dGFhcmFiaWMgPSAweDA2Mjk7CiAgdC50ZWhtYXJidXRhZmluYWxhcmFiaWMgPSAweGZlOTQ7CiAgdC50ZWhtZWRpYWxhcmFiaWMgPSAweGZlOTg7CiAgdC50ZWhtZWVtaW5pdGlhbGFyYWJpYyA9IDB4ZmNhNDsKICB0LnRlaG1lZW1pc29sYXRlZGFyYWJpYyA9IDB4ZmMwZTsKICB0LnRlaG5vb25maW5hbGFyYWJpYyA9IDB4ZmM3MzsKICB0LnRla2F0YWthbmEgPSAweDMwYzY7CiAgdC50ZWthdGFrYW5haGFsZndpZHRoID0gMHhmZjgzOwogIHQudGVsZXBob25lID0gMHgyMTIxOwogIHQudGVsZXBob25lYmxhY2sgPSAweDI2MGU7CiAgdC50ZWxpc2hhZ2Vkb2xhaGVicmV3ID0gMHgwNWEwOwogIHQudGVsaXNoYXFldGFuYWhlYnJldyA9IDB4MDVhOTsKICB0LnRlbmNpcmNsZSA9IDB4MjQ2OTsKICB0LnRlbmlkZW9ncmFwaGljcGFyZW4gPSAweDMyMjk7CiAgdC50ZW5wYXJlbiA9IDB4MjQ3ZDsKICB0LnRlbnBlcmlvZCA9IDB4MjQ5MTsKICB0LnRlbnJvbWFuID0gMHgyMTc5OwogIHQudGVzaCA9IDB4MDJhNzsKICB0LnRldCA9IDB4MDVkODsKICB0LnRldGRhZ2VzaCA9IDB4ZmIzODsKICB0LnRldGRhZ2VzaGhlYnJldyA9IDB4ZmIzODsKICB0LnRldGhlYnJldyA9IDB4MDVkODsKICB0LnRldHNlY3lyaWxsaWMgPSAweDA0YjU7CiAgdC50ZXZpcmhlYnJldyA9IDB4MDU5YjsKICB0LnRldmlybGVmdGhlYnJldyA9IDB4MDU5YjsKICB0LnRoYWJlbmdhbGkgPSAweDA5YTU7CiAgdC50aGFkZXZhID0gMHgwOTI1OwogIHQudGhhZ3VqYXJhdGkgPSAweDBhYTU7CiAgdC50aGFndXJtdWtoaSA9IDB4MGEyNTsKICB0LnRoYWxhcmFiaWMgPSAweDA2MzA7CiAgdC50aGFsZmluYWxhcmFiaWMgPSAweGZlYWM7CiAgdC50aGFudGhha2hhdGxvd2xlZnR0aGFpID0gMHhmODk4OwogIHQudGhhbnRoYWtoYXRsb3dyaWdodHRoYWkgPSAweGY4OTc7CiAgdC50aGFudGhha2hhdHRoYWkgPSAweDBlNGM7CiAgdC50aGFudGhha2hhdHVwcGVybGVmdHRoYWkgPSAweGY4OTY7CiAgdC50aGVoYXJhYmljID0gMHgwNjJiOwogIHQudGhlaGZpbmFsYXJhYmljID0gMHhmZTlhOwogIHQudGhlaGluaXRpYWxhcmFiaWMgPSAweGZlOWI7CiAgdC50aGVobWVkaWFsYXJhYmljID0gMHhmZTljOwogIHQudGhlcmVleGlzdHMgPSAweDIyMDM7CiAgdC50aGVyZWZvcmUgPSAweDIyMzQ7CiAgdC50aGV0YSA9IDB4MDNiODsKICB0LnRoZXRhMSA9IDB4MDNkMTsKICB0LnRoZXRhc3ltYm9sZ3JlZWsgPSAweDAzZDE7CiAgdC50aGlldXRoYWNpcmNsZWtvcmVhbiA9IDB4MzI3OTsKICB0LnRoaWV1dGhhcGFyZW5rb3JlYW4gPSAweDMyMTk7CiAgdC50aGlldXRoY2lyY2xla29yZWFuID0gMHgzMjZiOwogIHQudGhpZXV0aGtvcmVhbiA9IDB4MzE0YzsKICB0LnRoaWV1dGhwYXJlbmtvcmVhbiA9IDB4MzIwYjsKICB0LnRoaXJ0ZWVuY2lyY2xlID0gMHgyNDZjOwogIHQudGhpcnRlZW5wYXJlbiA9IDB4MjQ4MDsKICB0LnRoaXJ0ZWVucGVyaW9kID0gMHgyNDk0OwogIHQudGhvbmFuZ21vbnRob3RoYWkgPSAweDBlMTE7CiAgdC50aG9vayA9IDB4MDFhZDsKICB0LnRob3BodXRoYW90aGFpID0gMHgwZTEyOwogIHQudGhvcm4gPSAweDAwZmU7CiAgdC50aG90aGFoYW50aGFpID0gMHgwZTE3OwogIHQudGhvdGhhbnRoYWkgPSAweDBlMTA7CiAgdC50aG90aG9uZ3RoYWkgPSAweDBlMTg7CiAgdC50aG90aHVuZ3RoYWkgPSAweDBlMTY7CiAgdC50aG91c2FuZGN5cmlsbGljID0gMHgwNDgyOwogIHQudGhvdXNhbmRzc2VwYXJhdG9yYXJhYmljID0gMHgwNjZjOwogIHQudGhvdXNhbmRzc2VwYXJhdG9ycGVyc2lhbiA9IDB4MDY2YzsKICB0LnRocmVlID0gMHgwMDMzOwogIHQudGhyZWVhcmFiaWMgPSAweDA2NjM7CiAgdC50aHJlZWJlbmdhbGkgPSAweDA5ZTk7CiAgdC50aHJlZWNpcmNsZSA9IDB4MjQ2MjsKICB0LnRocmVlY2lyY2xlaW52ZXJzZXNhbnNzZXJpZiA9IDB4Mjc4YzsKICB0LnRocmVlZGV2YSA9IDB4MDk2OTsKICB0LnRocmVlZWlnaHRocyA9IDB4MjE1YzsKICB0LnRocmVlZ3VqYXJhdGkgPSAweDBhZTk7CiAgdC50aHJlZWd1cm11a2hpID0gMHgwYTY5OwogIHQudGhyZWVoYWNrYXJhYmljID0gMHgwNjYzOwogIHQudGhyZWVoYW5nemhvdSA9IDB4MzAyMzsKICB0LnRocmVlaWRlb2dyYXBoaWNwYXJlbiA9IDB4MzIyMjsKICB0LnRocmVlaW5mZXJpb3IgPSAweDIwODM7CiAgdC50aHJlZW1vbm9zcGFjZSA9IDB4ZmYxMzsKICB0LnRocmVlbnVtZXJhdG9yYmVuZ2FsaSA9IDB4MDlmNjsKICB0LnRocmVlb2xkc3R5bGUgPSAweGY3MzM7CiAgdC50aHJlZXBhcmVuID0gMHgyNDc2OwogIHQudGhyZWVwZXJpb2QgPSAweDI0OGE7CiAgdC50aHJlZXBlcnNpYW4gPSAweDA2ZjM7CiAgdC50aHJlZXF1YXJ0ZXJzID0gMHgwMGJlOwogIHQudGhyZWVxdWFydGVyc2VtZGFzaCA9IDB4ZjZkZTsKICB0LnRocmVlcm9tYW4gPSAweDIxNzI7CiAgdC50aHJlZXN1cGVyaW9yID0gMHgwMGIzOwogIHQudGhyZWV0aGFpID0gMHgwZTUzOwogIHQudGh6c3F1YXJlID0gMHgzMzk0OwogIHQudGloaXJhZ2FuYSA9IDB4MzA2MTsKICB0LnRpa2F0YWthbmEgPSAweDMwYzE7CiAgdC50aWthdGFrYW5haGFsZndpZHRoID0gMHhmZjgxOwogIHQudGlrZXV0YWNpcmNsZWtvcmVhbiA9IDB4MzI3MDsKICB0LnRpa2V1dGFwYXJlbmtvcmVhbiA9IDB4MzIxMDsKICB0LnRpa2V1dGNpcmNsZWtvcmVhbiA9IDB4MzI2MjsKICB0LnRpa2V1dGtvcmVhbiA9IDB4MzEzNzsKICB0LnRpa2V1dHBhcmVua29yZWFuID0gMHgzMjAyOwogIHQudGlsZGUgPSAweDAyZGM7CiAgdC50aWxkZWJlbG93Y21iID0gMHgwMzMwOwogIHQudGlsZGVjbWIgPSAweDAzMDM7CiAgdC50aWxkZWNvbWIgPSAweDAzMDM7CiAgdC50aWxkZWRvdWJsZWNtYiA9IDB4MDM2MDsKICB0LnRpbGRlb3BlcmF0b3IgPSAweDIyM2M7CiAgdC50aWxkZW92ZXJsYXljbWIgPSAweDAzMzQ7CiAgdC50aWxkZXZlcnRpY2FsY21iID0gMHgwMzNlOwogIHQudGltZXNjaXJjbGUgPSAweDIyOTc7CiAgdC50aXBlaGFoZWJyZXcgPSAweDA1OTY7CiAgdC50aXBlaGFsZWZ0aGVicmV3ID0gMHgwNTk2OwogIHQudGlwcGlndXJtdWtoaSA9IDB4MGE3MDsKICB0LnRpdGxvY3lyaWxsaWNjbWIgPSAweDA0ODM7CiAgdC50aXduYXJtZW5pYW4gPSAweDA1N2Y7CiAgdC50bGluZWJlbG93ID0gMHgxZTZmOwogIHQudG1vbm9zcGFjZSA9IDB4ZmY1NDsKICB0LnRvYXJtZW5pYW4gPSAweDA1Njk7CiAgdC50b2hpcmFnYW5hID0gMHgzMDY4OwogIHQudG9rYXRha2FuYSA9IDB4MzBjODsKICB0LnRva2F0YWthbmFoYWxmd2lkdGggPSAweGZmODQ7CiAgdC50b25lYmFyZXh0cmFoaWdobW9kID0gMHgwMmU1OwogIHQudG9uZWJhcmV4dHJhbG93bW9kID0gMHgwMmU5OwogIHQudG9uZWJhcmhpZ2htb2QgPSAweDAyZTY7CiAgdC50b25lYmFybG93bW9kID0gMHgwMmU4OwogIHQudG9uZWJhcm1pZG1vZCA9IDB4MDJlNzsKICB0LnRvbmVmaXZlID0gMHgwMWJkOwogIHQudG9uZXNpeCA9IDB4MDE4NTsKICB0LnRvbmV0d28gPSAweDAxYTg7CiAgdC50b25vcyA9IDB4MDM4NDsKICB0LnRvbnNxdWFyZSA9IDB4MzMyNzsKICB0LnRvcGF0YWt0aGFpID0gMHgwZTBmOwogIHQudG9ydG9pc2VzaGVsbGJyYWNrZXRsZWZ0ID0gMHgzMDE0OwogIHQudG9ydG9pc2VzaGVsbGJyYWNrZXRsZWZ0c21hbGwgPSAweGZlNWQ7CiAgdC50b3J0b2lzZXNoZWxsYnJhY2tldGxlZnR2ZXJ0aWNhbCA9IDB4ZmUzOTsKICB0LnRvcnRvaXNlc2hlbGxicmFja2V0cmlnaHQgPSAweDMwMTU7CiAgdC50b3J0b2lzZXNoZWxsYnJhY2tldHJpZ2h0c21hbGwgPSAweGZlNWU7CiAgdC50b3J0b2lzZXNoZWxsYnJhY2tldHJpZ2h0dmVydGljYWwgPSAweGZlM2E7CiAgdC50b3Rhb3RoYWkgPSAweDBlMTU7CiAgdC50cGFsYXRhbGhvb2sgPSAweDAxYWI7CiAgdC50cGFyZW4gPSAweDI0YWY7CiAgdC50cmFkZW1hcmsgPSAweDIxMjI7CiAgdC50cmFkZW1hcmtzYW5zID0gMHhmOGVhOwogIHQudHJhZGVtYXJrc2VyaWYgPSAweGY2ZGI7CiAgdC50cmV0cm9mbGV4aG9vayA9IDB4MDI4ODsKICB0LnRyaWFnZG4gPSAweDI1YmM7CiAgdC50cmlhZ2xmID0gMHgyNWM0OwogIHQudHJpYWdydCA9IDB4MjViYTsKICB0LnRyaWFndXAgPSAweDI1YjI7CiAgdC50cyA9IDB4MDJhNjsKICB0LnRzYWRpID0gMHgwNWU2OwogIHQudHNhZGlkYWdlc2ggPSAweGZiNDY7CiAgdC50c2FkaWRhZ2VzaGhlYnJldyA9IDB4ZmI0NjsKICB0LnRzYWRpaGVicmV3ID0gMHgwNWU2OwogIHQudHNlY3lyaWxsaWMgPSAweDA0NDY7CiAgdC50c2VyZSA9IDB4MDViNTsKICB0LnRzZXJlMTIgPSAweDA1YjU7CiAgdC50c2VyZTFlID0gMHgwNWI1OwogIHQudHNlcmUyYiA9IDB4MDViNTsKICB0LnRzZXJlaGVicmV3ID0gMHgwNWI1OwogIHQudHNlcmVuYXJyb3doZWJyZXcgPSAweDA1YjU7CiAgdC50c2VyZXF1YXJ0ZXJoZWJyZXcgPSAweDA1YjU7CiAgdC50c2VyZXdpZGVoZWJyZXcgPSAweDA1YjU7CiAgdC50c2hlY3lyaWxsaWMgPSAweDA0NWI7CiAgdC50c3VwZXJpb3IgPSAweGY2ZjM7CiAgdC50dGFiZW5nYWxpID0gMHgwOTlmOwogIHQudHRhZGV2YSA9IDB4MDkxZjsKICB0LnR0YWd1amFyYXRpID0gMHgwYTlmOwogIHQudHRhZ3VybXVraGkgPSAweDBhMWY7CiAgdC50dGVoYXJhYmljID0gMHgwNjc5OwogIHQudHRlaGZpbmFsYXJhYmljID0gMHhmYjY3OwogIHQudHRlaGluaXRpYWxhcmFiaWMgPSAweGZiNjg7CiAgdC50dGVobWVkaWFsYXJhYmljID0gMHhmYjY5OwogIHQudHRoYWJlbmdhbGkgPSAweDA5YTA7CiAgdC50dGhhZGV2YSA9IDB4MDkyMDsKICB0LnR0aGFndWphcmF0aSA9IDB4MGFhMDsKICB0LnR0aGFndXJtdWtoaSA9IDB4MGEyMDsKICB0LnR0dXJuZWQgPSAweDAyODc7CiAgdC50dWhpcmFnYW5hID0gMHgzMDY0OwogIHQudHVrYXRha2FuYSA9IDB4MzBjNDsKICB0LnR1a2F0YWthbmFoYWxmd2lkdGggPSAweGZmODI7CiAgdC50dXNtYWxsaGlyYWdhbmEgPSAweDMwNjM7CiAgdC50dXNtYWxsa2F0YWthbmEgPSAweDMwYzM7CiAgdC50dXNtYWxsa2F0YWthbmFoYWxmd2lkdGggPSAweGZmNmY7CiAgdC50d2VsdmVjaXJjbGUgPSAweDI0NmI7CiAgdC50d2VsdmVwYXJlbiA9IDB4MjQ3ZjsKICB0LnR3ZWx2ZXBlcmlvZCA9IDB4MjQ5MzsKICB0LnR3ZWx2ZXJvbWFuID0gMHgyMTdiOwogIHQudHdlbnR5Y2lyY2xlID0gMHgyNDczOwogIHQudHdlbnR5aGFuZ3pob3UgPSAweDUzNDQ7CiAgdC50d2VudHlwYXJlbiA9IDB4MjQ4NzsKICB0LnR3ZW50eXBlcmlvZCA9IDB4MjQ5YjsKICB0LnR3byA9IDB4MDAzMjsKICB0LnR3b2FyYWJpYyA9IDB4MDY2MjsKICB0LnR3b2JlbmdhbGkgPSAweDA5ZTg7CiAgdC50d29jaXJjbGUgPSAweDI0NjE7CiAgdC50d29jaXJjbGVpbnZlcnNlc2Fuc3NlcmlmID0gMHgyNzhiOwogIHQudHdvZGV2YSA9IDB4MDk2ODsKICB0LnR3b2RvdGVubGVhZGVyID0gMHgyMDI1OwogIHQudHdvZG90bGVhZGVyID0gMHgyMDI1OwogIHQudHdvZG90bGVhZGVydmVydGljYWwgPSAweGZlMzA7CiAgdC50d29ndWphcmF0aSA9IDB4MGFlODsKICB0LnR3b2d1cm11a2hpID0gMHgwYTY4OwogIHQudHdvaGFja2FyYWJpYyA9IDB4MDY2MjsKICB0LnR3b2hhbmd6aG91ID0gMHgzMDIyOwogIHQudHdvaWRlb2dyYXBoaWNwYXJlbiA9IDB4MzIyMTsKICB0LnR3b2luZmVyaW9yID0gMHgyMDgyOwogIHQudHdvbW9ub3NwYWNlID0gMHhmZjEyOwogIHQudHdvbnVtZXJhdG9yYmVuZ2FsaSA9IDB4MDlmNTsKICB0LnR3b29sZHN0eWxlID0gMHhmNzMyOwogIHQudHdvcGFyZW4gPSAweDI0NzU7CiAgdC50d29wZXJpb2QgPSAweDI0ODk7CiAgdC50d29wZXJzaWFuID0gMHgwNmYyOwogIHQudHdvcm9tYW4gPSAweDIxNzE7CiAgdC50d29zdHJva2UgPSAweDAxYmI7CiAgdC50d29zdXBlcmlvciA9IDB4MDBiMjsKICB0LnR3b3RoYWkgPSAweDBlNTI7CiAgdC50d290aGlyZHMgPSAweDIxNTQ7CiAgdC51ID0gMHgwMDc1OwogIHQudWFjdXRlID0gMHgwMGZhOwogIHQudWJhciA9IDB4MDI4OTsKICB0LnViZW5nYWxpID0gMHgwOTg5OwogIHQudWJvcG9tb2ZvID0gMHgzMTI4OwogIHQudWJyZXZlID0gMHgwMTZkOwogIHQudWNhcm9uID0gMHgwMWQ0OwogIHQudWNpcmNsZSA9IDB4MjRlNDsKICB0LnVjaXJjdW1mbGV4ID0gMHgwMGZiOwogIHQudWNpcmN1bWZsZXhiZWxvdyA9IDB4MWU3NzsKICB0LnVjeXJpbGxpYyA9IDB4MDQ0MzsKICB0LnVkYXR0YWRldmEgPSAweDA5NTE7CiAgdC51ZGJsYWN1dGUgPSAweDAxNzE7CiAgdC51ZGJsZ3JhdmUgPSAweDAyMTU7CiAgdC51ZGV2YSA9IDB4MDkwOTsKICB0LnVkaWVyZXNpcyA9IDB4MDBmYzsKICB0LnVkaWVyZXNpc2FjdXRlID0gMHgwMWQ4OwogIHQudWRpZXJlc2lzYmVsb3cgPSAweDFlNzM7CiAgdC51ZGllcmVzaXNjYXJvbiA9IDB4MDFkYTsKICB0LnVkaWVyZXNpc2N5cmlsbGljID0gMHgwNGYxOwogIHQudWRpZXJlc2lzZ3JhdmUgPSAweDAxZGM7CiAgdC51ZGllcmVzaXNtYWNyb24gPSAweDAxZDY7CiAgdC51ZG90YmVsb3cgPSAweDFlZTU7CiAgdC51Z3JhdmUgPSAweDAwZjk7CiAgdC51Z3VqYXJhdGkgPSAweDBhODk7CiAgdC51Z3VybXVraGkgPSAweDBhMDk7CiAgdC51aGlyYWdhbmEgPSAweDMwNDY7CiAgdC51aG9va2Fib3ZlID0gMHgxZWU3OwogIHQudWhvcm4gPSAweDAxYjA7CiAgdC51aG9ybmFjdXRlID0gMHgxZWU5OwogIHQudWhvcm5kb3RiZWxvdyA9IDB4MWVmMTsKICB0LnVob3JuZ3JhdmUgPSAweDFlZWI7CiAgdC51aG9ybmhvb2thYm92ZSA9IDB4MWVlZDsKICB0LnVob3JudGlsZGUgPSAweDFlZWY7CiAgdC51aHVuZ2FydW1sYXV0ID0gMHgwMTcxOwogIHQudWh1bmdhcnVtbGF1dGN5cmlsbGljID0gMHgwNGYzOwogIHQudWludmVydGVkYnJldmUgPSAweDAyMTc7CiAgdC51a2F0YWthbmEgPSAweDMwYTY7CiAgdC51a2F0YWthbmFoYWxmd2lkdGggPSAweGZmNzM7CiAgdC51a2N5cmlsbGljID0gMHgwNDc5OwogIHQudWtvcmVhbiA9IDB4MzE1YzsKICB0LnVtYWNyb24gPSAweDAxNmI7CiAgdC51bWFjcm9uY3lyaWxsaWMgPSAweDA0ZWY7CiAgdC51bWFjcm9uZGllcmVzaXMgPSAweDFlN2I7CiAgdC51bWF0cmFndXJtdWtoaSA9IDB4MGE0MTsKICB0LnVtb25vc3BhY2UgPSAweGZmNTU7CiAgdC51bmRlcnNjb3JlID0gMHgwMDVmOwogIHQudW5kZXJzY29yZWRibCA9IDB4MjAxNzsKICB0LnVuZGVyc2NvcmVtb25vc3BhY2UgPSAweGZmM2Y7CiAgdC51bmRlcnNjb3JldmVydGljYWwgPSAweGZlMzM7CiAgdC51bmRlcnNjb3Jld2F2eSA9IDB4ZmU0ZjsKICB0LnVuaW9uID0gMHgyMjJhOwogIHQudW5pdmVyc2FsID0gMHgyMjAwOwogIHQudW9nb25layA9IDB4MDE3MzsKICB0LnVwYXJlbiA9IDB4MjRiMDsKICB0LnVwYmxvY2sgPSAweDI1ODA7CiAgdC51cHBlcmRvdGhlYnJldyA9IDB4MDVjNDsKICB0LnVwc2lsb24gPSAweDAzYzU7CiAgdC51cHNpbG9uZGllcmVzaXMgPSAweDAzY2I7CiAgdC51cHNpbG9uZGllcmVzaXN0b25vcyA9IDB4MDNiMDsKICB0LnVwc2lsb25sYXRpbiA9IDB4MDI4YTsKICB0LnVwc2lsb250b25vcyA9IDB4MDNjZDsKICB0LnVwdGFja2JlbG93Y21iID0gMHgwMzFkOwogIHQudXB0YWNrbW9kID0gMHgwMmQ0OwogIHQudXJhZ3VybXVraGkgPSAweDBhNzM7CiAgdC51cmluZyA9IDB4MDE2ZjsKICB0LnVzaG9ydGN5cmlsbGljID0gMHgwNDVlOwogIHQudXNtYWxsaGlyYWdhbmEgPSAweDMwNDU7CiAgdC51c21hbGxrYXRha2FuYSA9IDB4MzBhNTsKICB0LnVzbWFsbGthdGFrYW5haGFsZndpZHRoID0gMHhmZjY5OwogIHQudXN0cmFpZ2h0Y3lyaWxsaWMgPSAweDA0YWY7CiAgdC51c3RyYWlnaHRzdHJva2VjeXJpbGxpYyA9IDB4MDRiMTsKICB0LnV0aWxkZSA9IDB4MDE2OTsKICB0LnV0aWxkZWFjdXRlID0gMHgxZTc5OwogIHQudXRpbGRlYmVsb3cgPSAweDFlNzU7CiAgdC51dWJlbmdhbGkgPSAweDA5OGE7CiAgdC51dWRldmEgPSAweDA5MGE7CiAgdC51dWd1amFyYXRpID0gMHgwYThhOwogIHQudXVndXJtdWtoaSA9IDB4MGEwYTsKICB0LnV1bWF0cmFndXJtdWtoaSA9IDB4MGE0MjsKICB0LnV1dm93ZWxzaWduYmVuZ2FsaSA9IDB4MDljMjsKICB0LnV1dm93ZWxzaWduZGV2YSA9IDB4MDk0MjsKICB0LnV1dm93ZWxzaWduZ3VqYXJhdGkgPSAweDBhYzI7CiAgdC51dm93ZWxzaWduYmVuZ2FsaSA9IDB4MDljMTsKICB0LnV2b3dlbHNpZ25kZXZhID0gMHgwOTQxOwogIHQudXZvd2Vsc2lnbmd1amFyYXRpID0gMHgwYWMxOwogIHQudiA9IDB4MDA3NjsKICB0LnZhZGV2YSA9IDB4MDkzNTsKICB0LnZhZ3VqYXJhdGkgPSAweDBhYjU7CiAgdC52YWd1cm11a2hpID0gMHgwYTM1OwogIHQudmFrYXRha2FuYSA9IDB4MzBmNzsKICB0LnZhdiA9IDB4MDVkNTsKICB0LnZhdmRhZ2VzaCA9IDB4ZmIzNTsKICB0LnZhdmRhZ2VzaDY1ID0gMHhmYjM1OwogIHQudmF2ZGFnZXNoaGVicmV3ID0gMHhmYjM1OwogIHQudmF2aGVicmV3ID0gMHgwNWQ1OwogIHQudmF2aG9sYW0gPSAweGZiNGI7CiAgdC52YXZob2xhbWhlYnJldyA9IDB4ZmI0YjsKICB0LnZhdnZhdmhlYnJldyA9IDB4MDVmMDsKICB0LnZhdnlvZGhlYnJldyA9IDB4MDVmMTsKICB0LnZjaXJjbGUgPSAweDI0ZTU7CiAgdC52ZG90YmVsb3cgPSAweDFlN2Y7CiAgdC52ZWN5cmlsbGljID0gMHgwNDMyOwogIHQudmVoYXJhYmljID0gMHgwNmE0OwogIHQudmVoZmluYWxhcmFiaWMgPSAweGZiNmI7CiAgdC52ZWhpbml0aWFsYXJhYmljID0gMHhmYjZjOwogIHQudmVobWVkaWFsYXJhYmljID0gMHhmYjZkOwogIHQudmVrYXRha2FuYSA9IDB4MzBmOTsKICB0LnZlbnVzID0gMHgyNjQwOwogIHQudmVydGljYWxiYXIgPSAweDAwN2M7CiAgdC52ZXJ0aWNhbGxpbmVhYm92ZWNtYiA9IDB4MDMwZDsKICB0LnZlcnRpY2FsbGluZWJlbG93Y21iID0gMHgwMzI5OwogIHQudmVydGljYWxsaW5lbG93bW9kID0gMHgwMmNjOwogIHQudmVydGljYWxsaW5lbW9kID0gMHgwMmM4OwogIHQudmV3YXJtZW5pYW4gPSAweDA1N2U7CiAgdC52aG9vayA9IDB4MDI4YjsKICB0LnZpa2F0YWthbmEgPSAweDMwZjg7CiAgdC52aXJhbWFiZW5nYWxpID0gMHgwOWNkOwogIHQudmlyYW1hZGV2YSA9IDB4MDk0ZDsKICB0LnZpcmFtYWd1amFyYXRpID0gMHgwYWNkOwogIHQudmlzYXJnYWJlbmdhbGkgPSAweDA5ODM7CiAgdC52aXNhcmdhZGV2YSA9IDB4MDkwMzsKICB0LnZpc2FyZ2FndWphcmF0aSA9IDB4MGE4MzsKICB0LnZtb25vc3BhY2UgPSAweGZmNTY7CiAgdC52b2FybWVuaWFuID0gMHgwNTc4OwogIHQudm9pY2VkaXRlcmF0aW9uaGlyYWdhbmEgPSAweDMwOWU7CiAgdC52b2ljZWRpdGVyYXRpb25rYXRha2FuYSA9IDB4MzBmZTsKICB0LnZvaWNlZG1hcmtrYW5hID0gMHgzMDliOwogIHQudm9pY2VkbWFya2thbmFoYWxmd2lkdGggPSAweGZmOWU7CiAgdC52b2thdGFrYW5hID0gMHgzMGZhOwogIHQudnBhcmVuID0gMHgyNGIxOwogIHQudnRpbGRlID0gMHgxZTdkOwogIHQudnR1cm5lZCA9IDB4MDI4YzsKICB0LnZ1aGlyYWdhbmEgPSAweDMwOTQ7CiAgdC52dWthdGFrYW5hID0gMHgzMGY0OwogIHQudyA9IDB4MDA3NzsKICB0LndhY3V0ZSA9IDB4MWU4MzsKICB0LndhZWtvcmVhbiA9IDB4MzE1OTsKICB0LndhaGlyYWdhbmEgPSAweDMwOGY7CiAgdC53YWthdGFrYW5hID0gMHgzMGVmOwogIHQud2FrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY5YzsKICB0Lndha29yZWFuID0gMHgzMTU4OwogIHQud2FzbWFsbGhpcmFnYW5hID0gMHgzMDhlOwogIHQud2FzbWFsbGthdGFrYW5hID0gMHgzMGVlOwogIHQud2F0dG9zcXVhcmUgPSAweDMzNTc7CiAgdC53YXZlZGFzaCA9IDB4MzAxYzsKICB0Lndhdnl1bmRlcnNjb3JldmVydGljYWwgPSAweGZlMzQ7CiAgdC53YXdhcmFiaWMgPSAweDA2NDg7CiAgdC53YXdmaW5hbGFyYWJpYyA9IDB4ZmVlZTsKICB0Lndhd2hhbXphYWJvdmVhcmFiaWMgPSAweDA2MjQ7CiAgdC53YXdoYW16YWFib3ZlZmluYWxhcmFiaWMgPSAweGZlODY7CiAgdC53YnNxdWFyZSA9IDB4MzNkZDsKICB0LndjaXJjbGUgPSAweDI0ZTY7CiAgdC53Y2lyY3VtZmxleCA9IDB4MDE3NTsKICB0LndkaWVyZXNpcyA9IDB4MWU4NTsKICB0Lndkb3RhY2NlbnQgPSAweDFlODc7CiAgdC53ZG90YmVsb3cgPSAweDFlODk7CiAgdC53ZWhpcmFnYW5hID0gMHgzMDkxOwogIHQud2VpZXJzdHJhc3MgPSAweDIxMTg7CiAgdC53ZWthdGFrYW5hID0gMHgzMGYxOwogIHQud2Vrb3JlYW4gPSAweDMxNWU7CiAgdC53ZW9rb3JlYW4gPSAweDMxNWQ7CiAgdC53Z3JhdmUgPSAweDFlODE7CiAgdC53aGl0ZWJ1bGxldCA9IDB4MjVlNjsKICB0LndoaXRlY2lyY2xlID0gMHgyNWNiOwogIHQud2hpdGVjaXJjbGVpbnZlcnNlID0gMHgyNWQ5OwogIHQud2hpdGVjb3JuZXJicmFja2V0bGVmdCA9IDB4MzAwZTsKICB0LndoaXRlY29ybmVyYnJhY2tldGxlZnR2ZXJ0aWNhbCA9IDB4ZmU0MzsKICB0LndoaXRlY29ybmVyYnJhY2tldHJpZ2h0ID0gMHgzMDBmOwogIHQud2hpdGVjb3JuZXJicmFja2V0cmlnaHR2ZXJ0aWNhbCA9IDB4ZmU0NDsKICB0LndoaXRlZGlhbW9uZCA9IDB4MjVjNzsKICB0LndoaXRlZGlhbW9uZGNvbnRhaW5pbmdibGFja3NtYWxsZGlhbW9uZCA9IDB4MjVjODsKICB0LndoaXRlZG93bnBvaW50aW5nc21hbGx0cmlhbmdsZSA9IDB4MjViZjsKICB0LndoaXRlZG93bnBvaW50aW5ndHJpYW5nbGUgPSAweDI1YmQ7CiAgdC53aGl0ZWxlZnRwb2ludGluZ3NtYWxsdHJpYW5nbGUgPSAweDI1YzM7CiAgdC53aGl0ZWxlZnRwb2ludGluZ3RyaWFuZ2xlID0gMHgyNWMxOwogIHQud2hpdGVsZW50aWN1bGFyYnJhY2tldGxlZnQgPSAweDMwMTY7CiAgdC53aGl0ZWxlbnRpY3VsYXJicmFja2V0cmlnaHQgPSAweDMwMTc7CiAgdC53aGl0ZXJpZ2h0cG9pbnRpbmdzbWFsbHRyaWFuZ2xlID0gMHgyNWI5OwogIHQud2hpdGVyaWdodHBvaW50aW5ndHJpYW5nbGUgPSAweDI1Yjc7CiAgdC53aGl0ZXNtYWxsc3F1YXJlID0gMHgyNWFiOwogIHQud2hpdGVzbWlsaW5nZmFjZSA9IDB4MjYzYTsKICB0LndoaXRlc3F1YXJlID0gMHgyNWExOwogIHQud2hpdGVzdGFyID0gMHgyNjA2OwogIHQud2hpdGV0ZWxlcGhvbmUgPSAweDI2MGY7CiAgdC53aGl0ZXRvcnRvaXNlc2hlbGxicmFja2V0bGVmdCA9IDB4MzAxODsKICB0LndoaXRldG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodCA9IDB4MzAxOTsKICB0LndoaXRldXBwb2ludGluZ3NtYWxsdHJpYW5nbGUgPSAweDI1YjU7CiAgdC53aGl0ZXVwcG9pbnRpbmd0cmlhbmdsZSA9IDB4MjViMzsKICB0LndpaGlyYWdhbmEgPSAweDMwOTA7CiAgdC53aWthdGFrYW5hID0gMHgzMGYwOwogIHQud2lrb3JlYW4gPSAweDMxNWY7CiAgdC53bW9ub3NwYWNlID0gMHhmZjU3OwogIHQud29oaXJhZ2FuYSA9IDB4MzA5MjsKICB0Lndva2F0YWthbmEgPSAweDMwZjI7CiAgdC53b2thdGFrYW5haGFsZndpZHRoID0gMHhmZjY2OwogIHQud29uID0gMHgyMGE5OwogIHQud29ubW9ub3NwYWNlID0gMHhmZmU2OwogIHQud293YWVudGhhaSA9IDB4MGUyNzsKICB0LndwYXJlbiA9IDB4MjRiMjsKICB0LndyaW5nID0gMHgxZTk4OwogIHQud3N1cGVyaW9yID0gMHgwMmI3OwogIHQud3R1cm5lZCA9IDB4MDI4ZDsKICB0Lnd5bm4gPSAweDAxYmY7CiAgdC54ID0gMHgwMDc4OwogIHQueGFib3ZlY21iID0gMHgwMzNkOwogIHQueGJvcG9tb2ZvID0gMHgzMTEyOwogIHQueGNpcmNsZSA9IDB4MjRlNzsKICB0LnhkaWVyZXNpcyA9IDB4MWU4ZDsKICB0Lnhkb3RhY2NlbnQgPSAweDFlOGI7CiAgdC54ZWhhcm1lbmlhbiA9IDB4MDU2ZDsKICB0LnhpID0gMHgwM2JlOwogIHQueG1vbm9zcGFjZSA9IDB4ZmY1ODsKICB0LnhwYXJlbiA9IDB4MjRiMzsKICB0LnhzdXBlcmlvciA9IDB4MDJlMzsKICB0LnkgPSAweDAwNzk7CiAgdC55YWFkb3NxdWFyZSA9IDB4MzM0ZTsKICB0LnlhYmVuZ2FsaSA9IDB4MDlhZjsKICB0LnlhY3V0ZSA9IDB4MDBmZDsKICB0LnlhZGV2YSA9IDB4MDkyZjsKICB0LnlhZWtvcmVhbiA9IDB4MzE1MjsKICB0LnlhZ3VqYXJhdGkgPSAweDBhYWY7CiAgdC55YWd1cm11a2hpID0gMHgwYTJmOwogIHQueWFoaXJhZ2FuYSA9IDB4MzA4NDsKICB0Lnlha2F0YWthbmEgPSAweDMwZTQ7CiAgdC55YWthdGFrYW5haGFsZndpZHRoID0gMHhmZjk0OwogIHQueWFrb3JlYW4gPSAweDMxNTE7CiAgdC55YW1ha2thbnRoYWkgPSAweDBlNGU7CiAgdC55YXNtYWxsaGlyYWdhbmEgPSAweDMwODM7CiAgdC55YXNtYWxsa2F0YWthbmEgPSAweDMwZTM7CiAgdC55YXNtYWxsa2F0YWthbmFoYWxmd2lkdGggPSAweGZmNmM7CiAgdC55YXRjeXJpbGxpYyA9IDB4MDQ2MzsKICB0LnljaXJjbGUgPSAweDI0ZTg7CiAgdC55Y2lyY3VtZmxleCA9IDB4MDE3NzsKICB0LnlkaWVyZXNpcyA9IDB4MDBmZjsKICB0Lnlkb3RhY2NlbnQgPSAweDFlOGY7CiAgdC55ZG90YmVsb3cgPSAweDFlZjU7CiAgdC55ZWhhcmFiaWMgPSAweDA2NGE7CiAgdC55ZWhiYXJyZWVhcmFiaWMgPSAweDA2ZDI7CiAgdC55ZWhiYXJyZWVmaW5hbGFyYWJpYyA9IDB4ZmJhZjsKICB0LnllaGZpbmFsYXJhYmljID0gMHhmZWYyOwogIHQueWVoaGFtemFhYm92ZWFyYWJpYyA9IDB4MDYyNjsKICB0LnllaGhhbXphYWJvdmVmaW5hbGFyYWJpYyA9IDB4ZmU4YTsKICB0LnllaGhhbXphYWJvdmVpbml0aWFsYXJhYmljID0gMHhmZThiOwogIHQueWVoaGFtemFhYm92ZW1lZGlhbGFyYWJpYyA9IDB4ZmU4YzsKICB0LnllaGluaXRpYWxhcmFiaWMgPSAweGZlZjM7CiAgdC55ZWhtZWRpYWxhcmFiaWMgPSAweGZlZjQ7CiAgdC55ZWhtZWVtaW5pdGlhbGFyYWJpYyA9IDB4ZmNkZDsKICB0LnllaG1lZW1pc29sYXRlZGFyYWJpYyA9IDB4ZmM1ODsKICB0LnllaG5vb25maW5hbGFyYWJpYyA9IDB4ZmM5NDsKICB0LnllaHRocmVlZG90c2JlbG93YXJhYmljID0gMHgwNmQxOwogIHQueWVrb3JlYW4gPSAweDMxNTY7CiAgdC55ZW4gPSAweDAwYTU7CiAgdC55ZW5tb25vc3BhY2UgPSAweGZmZTU7CiAgdC55ZW9rb3JlYW4gPSAweDMxNTU7CiAgdC55ZW9yaW5oaWV1aGtvcmVhbiA9IDB4MzE4NjsKICB0LnllcmFoYmVueW9tb2hlYnJldyA9IDB4MDVhYTsKICB0LnllcmFoYmVueW9tb2xlZnRoZWJyZXcgPSAweDA1YWE7CiAgdC55ZXJpY3lyaWxsaWMgPSAweDA0NGI7CiAgdC55ZXJ1ZGllcmVzaXNjeXJpbGxpYyA9IDB4MDRmOTsKICB0Lnllc2lldW5na29yZWFuID0gMHgzMTgxOwogIHQueWVzaWV1bmdwYW5zaW9za29yZWFuID0gMHgzMTgzOwogIHQueWVzaWV1bmdzaW9za29yZWFuID0gMHgzMTgyOwogIHQueWV0aXZoZWJyZXcgPSAweDA1OWE7CiAgdC55Z3JhdmUgPSAweDFlZjM7CiAgdC55aG9vayA9IDB4MDFiNDsKICB0Lnlob29rYWJvdmUgPSAweDFlZjc7CiAgdC55aWFybWVuaWFuID0gMHgwNTc1OwogIHQueWljeXJpbGxpYyA9IDB4MDQ1NzsKICB0Lnlpa29yZWFuID0gMHgzMTYyOwogIHQueWlueWFuZyA9IDB4MjYyZjsKICB0Lnlpd25hcm1lbmlhbiA9IDB4MDU4MjsKICB0Lnltb25vc3BhY2UgPSAweGZmNTk7CiAgdC55b2QgPSAweDA1ZDk7CiAgdC55b2RkYWdlc2ggPSAweGZiMzk7CiAgdC55b2RkYWdlc2hoZWJyZXcgPSAweGZiMzk7CiAgdC55b2RoZWJyZXcgPSAweDA1ZDk7CiAgdC55b2R5b2RoZWJyZXcgPSAweDA1ZjI7CiAgdC55b2R5b2RwYXRhaGhlYnJldyA9IDB4ZmIxZjsKICB0LnlvaGlyYWdhbmEgPSAweDMwODg7CiAgdC55b2lrb3JlYW4gPSAweDMxODk7CiAgdC55b2thdGFrYW5hID0gMHgzMGU4OwogIHQueW9rYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY5NjsKICB0Lnlva29yZWFuID0gMHgzMTViOwogIHQueW9zbWFsbGhpcmFnYW5hID0gMHgzMDg3OwogIHQueW9zbWFsbGthdGFrYW5hID0gMHgzMGU3OwogIHQueW9zbWFsbGthdGFrYW5haGFsZndpZHRoID0gMHhmZjZlOwogIHQueW90Z3JlZWsgPSAweDAzZjM7CiAgdC55b3lhZWtvcmVhbiA9IDB4MzE4ODsKICB0LnlveWFrb3JlYW4gPSAweDMxODc7CiAgdC55b3lha3RoYWkgPSAweDBlMjI7CiAgdC55b3lpbmd0aGFpID0gMHgwZTBkOwogIHQueXBhcmVuID0gMHgyNGI0OwogIHQueXBvZ2VncmFtbWVuaSA9IDB4MDM3YTsKICB0Lnlwb2dlZ3JhbW1lbmlncmVla2NtYiA9IDB4MDM0NTsKICB0LnlyID0gMHgwMWE2OwogIHQueXJpbmcgPSAweDFlOTk7CiAgdC55c3VwZXJpb3IgPSAweDAyYjg7CiAgdC55dGlsZGUgPSAweDFlZjk7CiAgdC55dHVybmVkID0gMHgwMjhlOwogIHQueXVoaXJhZ2FuYSA9IDB4MzA4NjsKICB0Lnl1aWtvcmVhbiA9IDB4MzE4YzsKICB0Lnl1a2F0YWthbmEgPSAweDMwZTY7CiAgdC55dWthdGFrYW5haGFsZndpZHRoID0gMHhmZjk1OwogIHQueXVrb3JlYW4gPSAweDMxNjA7CiAgdC55dXNiaWdjeXJpbGxpYyA9IDB4MDQ2YjsKICB0Lnl1c2JpZ2lvdGlmaWVkY3lyaWxsaWMgPSAweDA0NmQ7CiAgdC55dXNsaXR0bGVjeXJpbGxpYyA9IDB4MDQ2NzsKICB0Lnl1c2xpdHRsZWlvdGlmaWVkY3lyaWxsaWMgPSAweDA0Njk7CiAgdC55dXNtYWxsaGlyYWdhbmEgPSAweDMwODU7CiAgdC55dXNtYWxsa2F0YWthbmEgPSAweDMwZTU7CiAgdC55dXNtYWxsa2F0YWthbmFoYWxmd2lkdGggPSAweGZmNmQ7CiAgdC55dXlla29yZWFuID0gMHgzMThiOwogIHQueXV5ZW9rb3JlYW4gPSAweDMxOGE7CiAgdC55eWFiZW5nYWxpID0gMHgwOWRmOwogIHQueXlhZGV2YSA9IDB4MDk1ZjsKICB0LnogPSAweDAwN2E7CiAgdC56YWFybWVuaWFuID0gMHgwNTY2OwogIHQuemFjdXRlID0gMHgwMTdhOwogIHQuemFkZXZhID0gMHgwOTViOwogIHQuemFndXJtdWtoaSA9IDB4MGE1YjsKICB0LnphaGFyYWJpYyA9IDB4MDYzODsKICB0LnphaGZpbmFsYXJhYmljID0gMHhmZWM2OwogIHQuemFoaW5pdGlhbGFyYWJpYyA9IDB4ZmVjNzsKICB0LnphaGlyYWdhbmEgPSAweDMwNTY7CiAgdC56YWhtZWRpYWxhcmFiaWMgPSAweGZlYzg7CiAgdC56YWluYXJhYmljID0gMHgwNjMyOwogIHQuemFpbmZpbmFsYXJhYmljID0gMHhmZWIwOwogIHQuemFrYXRha2FuYSA9IDB4MzBiNjsKICB0LnphcWVmZ2Fkb2xoZWJyZXcgPSAweDA1OTU7CiAgdC56YXFlZnFhdGFuaGVicmV3ID0gMHgwNTk0OwogIHQuemFycWFoZWJyZXcgPSAweDA1OTg7CiAgdC56YXlpbiA9IDB4MDVkNjsKICB0LnpheWluZGFnZXNoID0gMHhmYjM2OwogIHQuemF5aW5kYWdlc2hoZWJyZXcgPSAweGZiMzY7CiAgdC56YXlpbmhlYnJldyA9IDB4MDVkNjsKICB0Lnpib3BvbW9mbyA9IDB4MzExNzsKICB0LnpjYXJvbiA9IDB4MDE3ZTsKICB0LnpjaXJjbGUgPSAweDI0ZTk7CiAgdC56Y2lyY3VtZmxleCA9IDB4MWU5MTsKICB0LnpjdXJsID0gMHgwMjkxOwogIHQuemRvdCA9IDB4MDE3YzsKICB0Lnpkb3RhY2NlbnQgPSAweDAxN2M7CiAgdC56ZG90YmVsb3cgPSAweDFlOTM7CiAgdC56ZWN5cmlsbGljID0gMHgwNDM3OwogIHQuemVkZXNjZW5kZXJjeXJpbGxpYyA9IDB4MDQ5OTsKICB0LnplZGllcmVzaXNjeXJpbGxpYyA9IDB4MDRkZjsKICB0LnplaGlyYWdhbmEgPSAweDMwNWM7CiAgdC56ZWthdGFrYW5hID0gMHgzMGJjOwogIHQuemVybyA9IDB4MDAzMDsKICB0Lnplcm9hcmFiaWMgPSAweDA2NjA7CiAgdC56ZXJvYmVuZ2FsaSA9IDB4MDllNjsKICB0Lnplcm9kZXZhID0gMHgwOTY2OwogIHQuemVyb2d1amFyYXRpID0gMHgwYWU2OwogIHQuemVyb2d1cm11a2hpID0gMHgwYTY2OwogIHQuemVyb2hhY2thcmFiaWMgPSAweDA2NjA7CiAgdC56ZXJvaW5mZXJpb3IgPSAweDIwODA7CiAgdC56ZXJvbW9ub3NwYWNlID0gMHhmZjEwOwogIHQuemVyb29sZHN0eWxlID0gMHhmNzMwOwogIHQuemVyb3BlcnNpYW4gPSAweDA2ZjA7CiAgdC56ZXJvc3VwZXJpb3IgPSAweDIwNzA7CiAgdC56ZXJvdGhhaSA9IDB4MGU1MDsKICB0Lnplcm93aWR0aGpvaW5lciA9IDB4ZmVmZjsKICB0Lnplcm93aWR0aG5vbmpvaW5lciA9IDB4MjAwYzsKICB0Lnplcm93aWR0aHNwYWNlID0gMHgyMDBiOwogIHQuemV0YSA9IDB4MDNiNjsKICB0LnpoYm9wb21vZm8gPSAweDMxMTM7CiAgdC56aGVhcm1lbmlhbiA9IDB4MDU2YTsKICB0LnpoZWJyZXZlY3lyaWxsaWMgPSAweDA0YzI7CiAgdC56aGVjeXJpbGxpYyA9IDB4MDQzNjsKICB0LnpoZWRlc2NlbmRlcmN5cmlsbGljID0gMHgwNDk3OwogIHQuemhlZGllcmVzaXNjeXJpbGxpYyA9IDB4MDRkZDsKICB0LnppaGlyYWdhbmEgPSAweDMwNTg7CiAgdC56aWthdGFrYW5hID0gMHgzMGI4OwogIHQuemlub3JoZWJyZXcgPSAweDA1YWU7CiAgdC56bGluZWJlbG93ID0gMHgxZTk1OwogIHQuem1vbm9zcGFjZSA9IDB4ZmY1YTsKICB0LnpvaGlyYWdhbmEgPSAweDMwNWU7CiAgdC56b2thdGFrYW5hID0gMHgzMGJlOwogIHQuenBhcmVuID0gMHgyNGI1OwogIHQuenJldHJvZmxleGhvb2sgPSAweDAyOTA7CiAgdC56c3Ryb2tlID0gMHgwMWI2OwogIHQuenVoaXJhZ2FuYSA9IDB4MzA1YTsKICB0Lnp1a2F0YWthbmEgPSAweDMwYmE7CiAgdFsiLm5vdGRlZiJdID0gMHgwMDAwOwogIHQuYW5nYnJhY2tldGxlZnRiaWcgPSAweDIzMjk7CiAgdC5hbmdicmFja2V0bGVmdEJpZyA9IDB4MjMyOTsKICB0LmFuZ2JyYWNrZXRsZWZ0YmlnZyA9IDB4MjMyOTsKICB0LmFuZ2JyYWNrZXRsZWZ0QmlnZyA9IDB4MjMyOTsKICB0LmFuZ2JyYWNrZXRyaWdodEJpZyA9IDB4MjMyYTsKICB0LmFuZ2JyYWNrZXRyaWdodGJpZyA9IDB4MjMyYTsKICB0LmFuZ2JyYWNrZXRyaWdodEJpZ2cgPSAweDIzMmE7CiAgdC5hbmdicmFja2V0cmlnaHRiaWdnID0gMHgyMzJhOwogIHQuYXJyb3dob29rbGVmdCA9IDB4MjFhYTsKICB0LmFycm93aG9va3JpZ2h0ID0gMHgyMWE5OwogIHQuYXJyb3dsZWZ0dG9waGFsZiA9IDB4MjFiYzsKICB0LmFycm93bGVmdGJvdGhhbGYgPSAweDIxYmQ7CiAgdC5hcnJvd25vcnRoZWFzdCA9IDB4MjE5NzsKICB0LmFycm93bm9ydGh3ZXN0ID0gMHgyMTk2OwogIHQuYXJyb3dyaWdodHRvcGhhbGYgPSAweDIxYzA7CiAgdC5hcnJvd3JpZ2h0Ym90aGFsZiA9IDB4MjFjMTsKICB0LmFycm93c291dGhlYXN0ID0gMHgyMTk4OwogIHQuYXJyb3dzb3V0aHdlc3QgPSAweDIxOTk7CiAgdC5iYWNrc2xhc2hiaWcgPSAweDIyMTY7CiAgdC5iYWNrc2xhc2hCaWcgPSAweDIyMTY7CiAgdC5iYWNrc2xhc2hCaWdnID0gMHgyMjE2OwogIHQuYmFja3NsYXNoYmlnZyA9IDB4MjIxNjsKICB0LmJhcmRibCA9IDB4MjAxNjsKICB0LmJyYWNlaHRpcGRvd25sZWZ0ID0gMHhmZTM3OwogIHQuYnJhY2VodGlwZG93bnJpZ2h0ID0gMHhmZTM3OwogIHQuYnJhY2VodGlwdXBsZWZ0ID0gMHhmZTM4OwogIHQuYnJhY2VodGlwdXByaWdodCA9IDB4ZmUzODsKICB0LmJyYWNlbGVmdEJpZyA9IDB4MDA3YjsKICB0LmJyYWNlbGVmdGJpZyA9IDB4MDA3YjsKICB0LmJyYWNlbGVmdGJpZ2cgPSAweDAwN2I7CiAgdC5icmFjZWxlZnRCaWdnID0gMHgwMDdiOwogIHQuYnJhY2VyaWdodEJpZyA9IDB4MDA3ZDsKICB0LmJyYWNlcmlnaHRiaWcgPSAweDAwN2Q7CiAgdC5icmFjZXJpZ2h0YmlnZyA9IDB4MDA3ZDsKICB0LmJyYWNlcmlnaHRCaWdnID0gMHgwMDdkOwogIHQuYnJhY2tldGxlZnRiaWcgPSAweDAwNWI7CiAgdC5icmFja2V0bGVmdEJpZyA9IDB4MDA1YjsKICB0LmJyYWNrZXRsZWZ0YmlnZyA9IDB4MDA1YjsKICB0LmJyYWNrZXRsZWZ0QmlnZyA9IDB4MDA1YjsKICB0LmJyYWNrZXRyaWdodEJpZyA9IDB4MDA1ZDsKICB0LmJyYWNrZXRyaWdodGJpZyA9IDB4MDA1ZDsKICB0LmJyYWNrZXRyaWdodGJpZ2cgPSAweDAwNWQ7CiAgdC5icmFja2V0cmlnaHRCaWdnID0gMHgwMDVkOwogIHQuY2VpbGluZ2xlZnRiaWcgPSAweDIzMDg7CiAgdC5jZWlsaW5nbGVmdEJpZyA9IDB4MjMwODsKICB0LmNlaWxpbmdsZWZ0QmlnZyA9IDB4MjMwODsKICB0LmNlaWxpbmdsZWZ0YmlnZyA9IDB4MjMwODsKICB0LmNlaWxpbmdyaWdodGJpZyA9IDB4MjMwOTsKICB0LmNlaWxpbmdyaWdodEJpZyA9IDB4MjMwOTsKICB0LmNlaWxpbmdyaWdodGJpZ2cgPSAweDIzMDk7CiAgdC5jZWlsaW5ncmlnaHRCaWdnID0gMHgyMzA5OwogIHQuY2lyY2xlZG90ZGlzcGxheSA9IDB4MjI5OTsKICB0LmNpcmNsZWRvdHRleHQgPSAweDIyOTk7CiAgdC5jaXJjbGVtdWx0aXBseWRpc3BsYXkgPSAweDIyOTc7CiAgdC5jaXJjbGVtdWx0aXBseXRleHQgPSAweDIyOTc7CiAgdC5jaXJjbGVwbHVzZGlzcGxheSA9IDB4MjI5NTsKICB0LmNpcmNsZXBsdXN0ZXh0ID0gMHgyMjk1OwogIHQuY29udGludGVncmFsZGlzcGxheSA9IDB4MjIyZTsKICB0LmNvbnRpbnRlZ3JhbHRleHQgPSAweDIyMmU7CiAgdC5jb3Byb2R1Y3RkaXNwbGF5ID0gMHgyMjEwOwogIHQuY29wcm9kdWN0dGV4dCA9IDB4MjIxMDsKICB0LmZsb29ybGVmdEJpZyA9IDB4MjMwYTsKICB0LmZsb29ybGVmdGJpZyA9IDB4MjMwYTsKICB0LmZsb29ybGVmdGJpZ2cgPSAweDIzMGE7CiAgdC5mbG9vcmxlZnRCaWdnID0gMHgyMzBhOwogIHQuZmxvb3JyaWdodGJpZyA9IDB4MjMwYjsKICB0LmZsb29ycmlnaHRCaWcgPSAweDIzMGI7CiAgdC5mbG9vcnJpZ2h0QmlnZyA9IDB4MjMwYjsKICB0LmZsb29ycmlnaHRiaWdnID0gMHgyMzBiOwogIHQuaGF0d2lkZSA9IDB4MDMwMjsKICB0LmhhdHdpZGVyID0gMHgwMzAyOwogIHQuaGF0d2lkZXN0ID0gMHgwMzAyOwogIHQuaW50ZXJjYWwgPSAweDFkNDA7CiAgdC5pbnRlZ3JhbGRpc3BsYXkgPSAweDIyMmI7CiAgdC5pbnRlZ3JhbHRleHQgPSAweDIyMmI7CiAgdC5pbnRlcnNlY3Rpb25kaXNwbGF5ID0gMHgyMmMyOwogIHQuaW50ZXJzZWN0aW9udGV4dCA9IDB4MjJjMjsKICB0LmxvZ2ljYWxhbmRkaXNwbGF5ID0gMHgyMjI3OwogIHQubG9naWNhbGFuZHRleHQgPSAweDIyMjc7CiAgdC5sb2dpY2Fsb3JkaXNwbGF5ID0gMHgyMjI4OwogIHQubG9naWNhbG9ydGV4dCA9IDB4MjIyODsKICB0LnBhcmVubGVmdEJpZyA9IDB4MDAyODsKICB0LnBhcmVubGVmdGJpZyA9IDB4MDAyODsKICB0LnBhcmVubGVmdEJpZ2cgPSAweDAwMjg7CiAgdC5wYXJlbmxlZnRiaWdnID0gMHgwMDI4OwogIHQucGFyZW5yaWdodEJpZyA9IDB4MDAyOTsKICB0LnBhcmVucmlnaHRiaWcgPSAweDAwMjk7CiAgdC5wYXJlbnJpZ2h0QmlnZyA9IDB4MDAyOTsKICB0LnBhcmVucmlnaHRiaWdnID0gMHgwMDI5OwogIHQucHJpbWUgPSAweDIwMzI7CiAgdC5wcm9kdWN0ZGlzcGxheSA9IDB4MjIwZjsKICB0LnByb2R1Y3R0ZXh0ID0gMHgyMjBmOwogIHQucmFkaWNhbGJpZyA9IDB4MjIxYTsKICB0LnJhZGljYWxCaWcgPSAweDIyMWE7CiAgdC5yYWRpY2FsQmlnZyA9IDB4MjIxYTsKICB0LnJhZGljYWxiaWdnID0gMHgyMjFhOwogIHQucmFkaWNhbGJ0ID0gMHgyMjFhOwogIHQucmFkaWNhbHRwID0gMHgyMjFhOwogIHQucmFkaWNhbHZlcnRleCA9IDB4MjIxYTsKICB0LnNsYXNoYmlnID0gMHgwMDJmOwogIHQuc2xhc2hCaWcgPSAweDAwMmY7CiAgdC5zbGFzaEJpZ2cgPSAweDAwMmY7CiAgdC5zbGFzaGJpZ2cgPSAweDAwMmY7CiAgdC5zdW1tYXRpb25kaXNwbGF5ID0gMHgyMjExOwogIHQuc3VtbWF0aW9udGV4dCA9IDB4MjIxMTsKICB0LnRpbGRld2lkZSA9IDB4MDJkYzsKICB0LnRpbGRld2lkZXIgPSAweDAyZGM7CiAgdC50aWxkZXdpZGVzdCA9IDB4MDJkYzsKICB0LnVuaW9uZGlzcGxheSA9IDB4MjJjMzsKICB0LnVuaW9ubXVsdGlkaXNwbGF5ID0gMHgyMjhlOwogIHQudW5pb25tdWx0aXRleHQgPSAweDIyOGU7CiAgdC51bmlvbnNxZGlzcGxheSA9IDB4MjI5NDsKICB0LnVuaW9uc3F0ZXh0ID0gMHgyMjk0OwogIHQudW5pb250ZXh0ID0gMHgyMmMzOwogIHQudmV4dGVuZGRvdWJsZSA9IDB4MjIyNTsKICB0LnZleHRlbmRzaW5nbGUgPSAweDIyMjM7Cn0pOwpjb25zdCBnZXREaW5nYmF0c0dseXBoc1VuaWNvZGUgPSBnZXRMb29rdXBUYWJsZUZhY3RvcnkoZnVuY3Rpb24gKHQpIHsKICB0LnNwYWNlID0gMHgwMDIwOwogIHQuYTEgPSAweDI3MDE7CiAgdC5hMiA9IDB4MjcwMjsKICB0LmEyMDIgPSAweDI3MDM7CiAgdC5hMyA9IDB4MjcwNDsKICB0LmE0ID0gMHgyNjBlOwogIHQuYTUgPSAweDI3MDY7CiAgdC5hMTE5ID0gMHgyNzA3OwogIHQuYTExOCA9IDB4MjcwODsKICB0LmExMTcgPSAweDI3MDk7CiAgdC5hMTEgPSAweDI2MWI7CiAgdC5hMTIgPSAweDI2MWU7CiAgdC5hMTMgPSAweDI3MGM7CiAgdC5hMTQgPSAweDI3MGQ7CiAgdC5hMTUgPSAweDI3MGU7CiAgdC5hMTYgPSAweDI3MGY7CiAgdC5hMTA1ID0gMHgyNzEwOwogIHQuYTE3ID0gMHgyNzExOwogIHQuYTE4ID0gMHgyNzEyOwogIHQuYTE5ID0gMHgyNzEzOwogIHQuYTIwID0gMHgyNzE0OwogIHQuYTIxID0gMHgyNzE1OwogIHQuYTIyID0gMHgyNzE2OwogIHQuYTIzID0gMHgyNzE3OwogIHQuYTI0ID0gMHgyNzE4OwogIHQuYTI1ID0gMHgyNzE5OwogIHQuYTI2ID0gMHgyNzFhOwogIHQuYTI3ID0gMHgyNzFiOwogIHQuYTI4ID0gMHgyNzFjOwogIHQuYTYgPSAweDI3MWQ7CiAgdC5hNyA9IDB4MjcxZTsKICB0LmE4ID0gMHgyNzFmOwogIHQuYTkgPSAweDI3MjA7CiAgdC5hMTAgPSAweDI3MjE7CiAgdC5hMjkgPSAweDI3MjI7CiAgdC5hMzAgPSAweDI3MjM7CiAgdC5hMzEgPSAweDI3MjQ7CiAgdC5hMzIgPSAweDI3MjU7CiAgdC5hMzMgPSAweDI3MjY7CiAgdC5hMzQgPSAweDI3Mjc7CiAgdC5hMzUgPSAweDI2MDU7CiAgdC5hMzYgPSAweDI3Mjk7CiAgdC5hMzcgPSAweDI3MmE7CiAgdC5hMzggPSAweDI3MmI7CiAgdC5hMzkgPSAweDI3MmM7CiAgdC5hNDAgPSAweDI3MmQ7CiAgdC5hNDEgPSAweDI3MmU7CiAgdC5hNDIgPSAweDI3MmY7CiAgdC5hNDMgPSAweDI3MzA7CiAgdC5hNDQgPSAweDI3MzE7CiAgdC5hNDUgPSAweDI3MzI7CiAgdC5hNDYgPSAweDI3MzM7CiAgdC5hNDcgPSAweDI3MzQ7CiAgdC5hNDggPSAweDI3MzU7CiAgdC5hNDkgPSAweDI3MzY7CiAgdC5hNTAgPSAweDI3Mzc7CiAgdC5hNTEgPSAweDI3Mzg7CiAgdC5hNTIgPSAweDI3Mzk7CiAgdC5hNTMgPSAweDI3M2E7CiAgdC5hNTQgPSAweDI3M2I7CiAgdC5hNTUgPSAweDI3M2M7CiAgdC5hNTYgPSAweDI3M2Q7CiAgdC5hNTcgPSAweDI3M2U7CiAgdC5hNTggPSAweDI3M2Y7CiAgdC5hNTkgPSAweDI3NDA7CiAgdC5hNjAgPSAweDI3NDE7CiAgdC5hNjEgPSAweDI3NDI7CiAgdC5hNjIgPSAweDI3NDM7CiAgdC5hNjMgPSAweDI3NDQ7CiAgdC5hNjQgPSAweDI3NDU7CiAgdC5hNjUgPSAweDI3NDY7CiAgdC5hNjYgPSAweDI3NDc7CiAgdC5hNjcgPSAweDI3NDg7CiAgdC5hNjggPSAweDI3NDk7CiAgdC5hNjkgPSAweDI3NGE7CiAgdC5hNzAgPSAweDI3NGI7CiAgdC5hNzEgPSAweDI1Y2Y7CiAgdC5hNzIgPSAweDI3NGQ7CiAgdC5hNzMgPSAweDI1YTA7CiAgdC5hNzQgPSAweDI3NGY7CiAgdC5hMjAzID0gMHgyNzUwOwogIHQuYTc1ID0gMHgyNzUxOwogIHQuYTIwNCA9IDB4Mjc1MjsKICB0LmE3NiA9IDB4MjViMjsKICB0LmE3NyA9IDB4MjViYzsKICB0LmE3OCA9IDB4MjVjNjsKICB0LmE3OSA9IDB4Mjc1NjsKICB0LmE4MSA9IDB4MjVkNzsKICB0LmE4MiA9IDB4Mjc1ODsKICB0LmE4MyA9IDB4Mjc1OTsKICB0LmE4NCA9IDB4Mjc1YTsKICB0LmE5NyA9IDB4Mjc1YjsKICB0LmE5OCA9IDB4Mjc1YzsKICB0LmE5OSA9IDB4Mjc1ZDsKICB0LmExMDAgPSAweDI3NWU7CiAgdC5hMTAxID0gMHgyNzYxOwogIHQuYTEwMiA9IDB4Mjc2MjsKICB0LmExMDMgPSAweDI3NjM7CiAgdC5hMTA0ID0gMHgyNzY0OwogIHQuYTEwNiA9IDB4Mjc2NTsKICB0LmExMDcgPSAweDI3NjY7CiAgdC5hMTA4ID0gMHgyNzY3OwogIHQuYTExMiA9IDB4MjY2MzsKICB0LmExMTEgPSAweDI2NjY7CiAgdC5hMTEwID0gMHgyNjY1OwogIHQuYTEwOSA9IDB4MjY2MDsKICB0LmExMjAgPSAweDI0NjA7CiAgdC5hMTIxID0gMHgyNDYxOwogIHQuYTEyMiA9IDB4MjQ2MjsKICB0LmExMjMgPSAweDI0NjM7CiAgdC5hMTI0ID0gMHgyNDY0OwogIHQuYTEyNSA9IDB4MjQ2NTsKICB0LmExMjYgPSAweDI0NjY7CiAgdC5hMTI3ID0gMHgyNDY3OwogIHQuYTEyOCA9IDB4MjQ2ODsKICB0LmExMjkgPSAweDI0Njk7CiAgdC5hMTMwID0gMHgyNzc2OwogIHQuYTEzMSA9IDB4Mjc3NzsKICB0LmExMzIgPSAweDI3Nzg7CiAgdC5hMTMzID0gMHgyNzc5OwogIHQuYTEzNCA9IDB4Mjc3YTsKICB0LmExMzUgPSAweDI3N2I7CiAgdC5hMTM2ID0gMHgyNzdjOwogIHQuYTEzNyA9IDB4Mjc3ZDsKICB0LmExMzggPSAweDI3N2U7CiAgdC5hMTM5ID0gMHgyNzdmOwogIHQuYTE0MCA9IDB4Mjc4MDsKICB0LmExNDEgPSAweDI3ODE7CiAgdC5hMTQyID0gMHgyNzgyOwogIHQuYTE0MyA9IDB4Mjc4MzsKICB0LmExNDQgPSAweDI3ODQ7CiAgdC5hMTQ1ID0gMHgyNzg1OwogIHQuYTE0NiA9IDB4Mjc4NjsKICB0LmExNDcgPSAweDI3ODc7CiAgdC5hMTQ4ID0gMHgyNzg4OwogIHQuYTE0OSA9IDB4Mjc4OTsKICB0LmExNTAgPSAweDI3OGE7CiAgdC5hMTUxID0gMHgyNzhiOwogIHQuYTE1MiA9IDB4Mjc4YzsKICB0LmExNTMgPSAweDI3OGQ7CiAgdC5hMTU0ID0gMHgyNzhlOwogIHQuYTE1NSA9IDB4Mjc4ZjsKICB0LmExNTYgPSAweDI3OTA7CiAgdC5hMTU3ID0gMHgyNzkxOwogIHQuYTE1OCA9IDB4Mjc5MjsKICB0LmExNTkgPSAweDI3OTM7CiAgdC5hMTYwID0gMHgyNzk0OwogIHQuYTE2MSA9IDB4MjE5MjsKICB0LmExNjMgPSAweDIxOTQ7CiAgdC5hMTY0ID0gMHgyMTk1OwogIHQuYTE5NiA9IDB4Mjc5ODsKICB0LmExNjUgPSAweDI3OTk7CiAgdC5hMTkyID0gMHgyNzlhOwogIHQuYTE2NiA9IDB4Mjc5YjsKICB0LmExNjcgPSAweDI3OWM7CiAgdC5hMTY4ID0gMHgyNzlkOwogIHQuYTE2OSA9IDB4Mjc5ZTsKICB0LmExNzAgPSAweDI3OWY7CiAgdC5hMTcxID0gMHgyN2EwOwogIHQuYTE3MiA9IDB4MjdhMTsKICB0LmExNzMgPSAweDI3YTI7CiAgdC5hMTYyID0gMHgyN2EzOwogIHQuYTE3NCA9IDB4MjdhNDsKICB0LmExNzUgPSAweDI3YTU7CiAgdC5hMTc2ID0gMHgyN2E2OwogIHQuYTE3NyA9IDB4MjdhNzsKICB0LmExNzggPSAweDI3YTg7CiAgdC5hMTc5ID0gMHgyN2E5OwogIHQuYTE5MyA9IDB4MjdhYTsKICB0LmExODAgPSAweDI3YWI7CiAgdC5hMTk5ID0gMHgyN2FjOwogIHQuYTE4MSA9IDB4MjdhZDsKICB0LmEyMDAgPSAweDI3YWU7CiAgdC5hMTgyID0gMHgyN2FmOwogIHQuYTIwMSA9IDB4MjdiMTsKICB0LmExODMgPSAweDI3YjI7CiAgdC5hMTg0ID0gMHgyN2IzOwogIHQuYTE5NyA9IDB4MjdiNDsKICB0LmExODUgPSAweDI3YjU7CiAgdC5hMTk0ID0gMHgyN2I2OwogIHQuYTE5OCA9IDB4MjdiNzsKICB0LmExODYgPSAweDI3Yjg7CiAgdC5hMTk1ID0gMHgyN2I5OwogIHQuYTE4NyA9IDB4MjdiYTsKICB0LmExODggPSAweDI3YmI7CiAgdC5hMTg5ID0gMHgyN2JjOwogIHQuYTE5MCA9IDB4MjdiZDsKICB0LmExOTEgPSAweDI3YmU7CiAgdC5hODkgPSAweDI3Njg7CiAgdC5hOTAgPSAweDI3Njk7CiAgdC5hOTMgPSAweDI3NmE7CiAgdC5hOTQgPSAweDI3NmI7CiAgdC5hOTEgPSAweDI3NmM7CiAgdC5hOTIgPSAweDI3NmQ7CiAgdC5hMjA1ID0gMHgyNzZlOwogIHQuYTg1ID0gMHgyNzZmOwogIHQuYTIwNiA9IDB4Mjc3MDsKICB0LmE4NiA9IDB4Mjc3MTsKICB0LmE4NyA9IDB4Mjc3MjsKICB0LmE4OCA9IDB4Mjc3MzsKICB0LmE5NSA9IDB4Mjc3NDsKICB0LmE5NiA9IDB4Mjc3NTsKICB0WyIubm90ZGVmIl0gPSAweDAwMDA7Cn0pOwoKOy8vIC4vc3JjL2NvcmUvdW5pY29kZS5qcwoKY29uc3QgZ2V0U3BlY2lhbFBVQVN5bWJvbHMgPSBnZXRMb29rdXBUYWJsZUZhY3RvcnkoZnVuY3Rpb24gKHQpIHsKICB0WzYzNzIxXSA9IDB4MDBhOTsKICB0WzYzMTkzXSA9IDB4MDBhOTsKICB0WzYzNzIwXSA9IDB4MDBhZTsKICB0WzYzMTk0XSA9IDB4MDBhZTsKICB0WzYzNzIyXSA9IDB4MjEyMjsKICB0WzYzMTk1XSA9IDB4MjEyMjsKICB0WzYzNzI5XSA9IDB4MjNhNzsKICB0WzYzNzMwXSA9IDB4MjNhODsKICB0WzYzNzMxXSA9IDB4MjNhOTsKICB0WzYzNzQwXSA9IDB4MjNhYjsKICB0WzYzNzQxXSA9IDB4MjNhYzsKICB0WzYzNzQyXSA9IDB4MjNhZDsKICB0WzYzNzI2XSA9IDB4MjNhMTsKICB0WzYzNzI3XSA9IDB4MjNhMjsKICB0WzYzNzI4XSA9IDB4MjNhMzsKICB0WzYzNzM3XSA9IDB4MjNhNDsKICB0WzYzNzM4XSA9IDB4MjNhNTsKICB0WzYzNzM5XSA9IDB4MjNhNjsKICB0WzYzNzIzXSA9IDB4MjM5YjsKICB0WzYzNzI0XSA9IDB4MjM5YzsKICB0WzYzNzI1XSA9IDB4MjM5ZDsKICB0WzYzNzM0XSA9IDB4MjM5ZTsKICB0WzYzNzM1XSA9IDB4MjM5ZjsKICB0WzYzNzM2XSA9IDB4MjNhMDsKfSk7CmZ1bmN0aW9uIG1hcFNwZWNpYWxVbmljb2RlVmFsdWVzKGNvZGUpIHsKICBpZiAoY29kZSA+PSAweGZmZjAgJiYgY29kZSA8PSAweGZmZmYpIHsKICAgIHJldHVybiAwOwogIH0gZWxzZSBpZiAoY29kZSA+PSAweGY2MDAgJiYgY29kZSA8PSAweGY4ZmYpIHsKICAgIHJldHVybiBnZXRTcGVjaWFsUFVBU3ltYm9scygpW2NvZGVdIHx8IGNvZGU7CiAgfSBlbHNlIGlmIChjb2RlID09PSAweDAwYWQpIHsKICAgIHJldHVybiAweDAwMmQ7CiAgfQogIHJldHVybiBjb2RlOwp9CmZ1bmN0aW9uIGdldFVuaWNvZGVGb3JHbHlwaChuYW1lLCBnbHlwaHNVbmljb2RlTWFwKSB7CiAgbGV0IHVuaWNvZGUgPSBnbHlwaHNVbmljb2RlTWFwW25hbWVdOwogIGlmICh1bmljb2RlICE9PSB1bmRlZmluZWQpIHsKICAgIHJldHVybiB1bmljb2RlOwogIH0KICBpZiAoIW5hbWUpIHsKICAgIHJldHVybiAtMTsKICB9CiAgaWYgKG5hbWVbMF0gPT09ICJ1IikgewogICAgY29uc3QgbmFtZUxlbiA9IG5hbWUubGVuZ3RoOwogICAgbGV0IGhleFN0cjsKICAgIGlmIChuYW1lTGVuID09PSA3ICYmIG5hbWVbMV0gPT09ICJuIiAmJiBuYW1lWzJdID09PSAiaSIpIHsKICAgICAgaGV4U3RyID0gbmFtZS5zdWJzdHJpbmcoMyk7CiAgICB9IGVsc2UgaWYgKG5hbWVMZW4gPj0gNSAmJiBuYW1lTGVuIDw9IDcpIHsKICAgICAgaGV4U3RyID0gbmFtZS5zdWJzdHJpbmcoMSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gLTE7CiAgICB9CiAgICBpZiAoaGV4U3RyID09PSBoZXhTdHIudG9VcHBlckNhc2UoKSkgewogICAgICB1bmljb2RlID0gcGFyc2VJbnQoaGV4U3RyLCAxNik7CiAgICAgIGlmICh1bmljb2RlID49IDApIHsKICAgICAgICByZXR1cm4gdW5pY29kZTsKICAgICAgfQogICAgfQogIH0KICByZXR1cm4gLTE7Cn0KY29uc3QgVW5pY29kZVJhbmdlcyA9IFtbMHgwMDAwLCAweDAwN2ZdLCBbMHgwMDgwLCAweDAwZmZdLCBbMHgwMTAwLCAweDAxN2ZdLCBbMHgwMTgwLCAweDAyNGZdLCBbMHgwMjUwLCAweDAyYWYsIDB4MWQwMCwgMHgxZDdmLCAweDFkODAsIDB4MWRiZl0sIFsweDAyYjAsIDB4MDJmZiwgMHhhNzAwLCAweGE3MWZdLCBbMHgwMzAwLCAweDAzNmYsIDB4MWRjMCwgMHgxZGZmXSwgWzB4MDM3MCwgMHgwM2ZmXSwgWzB4MmM4MCwgMHgyY2ZmXSwgWzB4MDQwMCwgMHgwNGZmLCAweDA1MDAsIDB4MDUyZiwgMHgyZGUwLCAweDJkZmYsIDB4YTY0MCwgMHhhNjlmXSwgWzB4MDUzMCwgMHgwNThmXSwgWzB4MDU5MCwgMHgwNWZmXSwgWzB4YTUwMCwgMHhhNjNmXSwgWzB4MDYwMCwgMHgwNmZmLCAweDA3NTAsIDB4MDc3Zl0sIFsweDA3YzAsIDB4MDdmZl0sIFsweDA5MDAsIDB4MDk3Zl0sIFsweDA5ODAsIDB4MDlmZl0sIFsweDBhMDAsIDB4MGE3Zl0sIFsweDBhODAsIDB4MGFmZl0sIFsweDBiMDAsIDB4MGI3Zl0sIFsweDBiODAsIDB4MGJmZl0sIFsweDBjMDAsIDB4MGM3Zl0sIFsweDBjODAsIDB4MGNmZl0sIFsweDBkMDAsIDB4MGQ3Zl0sIFsweDBlMDAsIDB4MGU3Zl0sIFsweDBlODAsIDB4MGVmZl0sIFsweDEwYTAsIDB4MTBmZiwgMHgyZDAwLCAweDJkMmZdLCBbMHgxYjAwLCAweDFiN2ZdLCBbMHgxMTAwLCAweDExZmZdLCBbMHgxZTAwLCAweDFlZmYsIDB4MmM2MCwgMHgyYzdmLCAweGE3MjAsIDB4YTdmZl0sIFsweDFmMDAsIDB4MWZmZl0sIFsweDIwMDAsIDB4MjA2ZiwgMHgyZTAwLCAweDJlN2ZdLCBbMHgyMDcwLCAweDIwOWZdLCBbMHgyMGEwLCAweDIwY2ZdLCBbMHgyMGQwLCAweDIwZmZdLCBbMHgyMTAwLCAweDIxNGZdLCBbMHgyMTUwLCAweDIxOGZdLCBbMHgyMTkwLCAweDIxZmYsIDB4MjdmMCwgMHgyN2ZmLCAweDI5MDAsIDB4Mjk3ZiwgMHgyYjAwLCAweDJiZmZdLCBbMHgyMjAwLCAweDIyZmYsIDB4MmEwMCwgMHgyYWZmLCAweDI3YzAsIDB4MjdlZiwgMHgyOTgwLCAweDI5ZmZdLCBbMHgyMzAwLCAweDIzZmZdLCBbMHgyNDAwLCAweDI0M2ZdLCBbMHgyNDQwLCAweDI0NWZdLCBbMHgyNDYwLCAweDI0ZmZdLCBbMHgyNTAwLCAweDI1N2ZdLCBbMHgyNTgwLCAweDI1OWZdLCBbMHgyNWEwLCAweDI1ZmZdLCBbMHgyNjAwLCAweDI2ZmZdLCBbMHgyNzAwLCAweDI3YmZdLCBbMHgzMDAwLCAweDMwM2ZdLCBbMHgzMDQwLCAweDMwOWZdLCBbMHgzMGEwLCAweDMwZmYsIDB4MzFmMCwgMHgzMWZmXSwgWzB4MzEwMCwgMHgzMTJmLCAweDMxYTAsIDB4MzFiZl0sIFsweDMxMzAsIDB4MzE4Zl0sIFsweGE4NDAsIDB4YTg3Zl0sIFsweDMyMDAsIDB4MzJmZl0sIFsweDMzMDAsIDB4MzNmZl0sIFsweGFjMDAsIDB4ZDdhZl0sIFsweGQ4MDAsIDB4ZGZmZl0sIFsweDEwOTAwLCAweDEwOTFmXSwgWzB4NGUwMCwgMHg5ZmZmLCAweDJlODAsIDB4MmVmZiwgMHgyZjAwLCAweDJmZGYsIDB4MmZmMCwgMHgyZmZmLCAweDM0MDAsIDB4NGRiZiwgMHgyMDAwMCwgMHgyYTZkZiwgMHgzMTkwLCAweDMxOWZdLCBbMHhlMDAwLCAweGY4ZmZdLCBbMHgzMWMwLCAweDMxZWYsIDB4ZjkwMCwgMHhmYWZmLCAweDJmODAwLCAweDJmYTFmXSwgWzB4ZmIwMCwgMHhmYjRmXSwgWzB4ZmI1MCwgMHhmZGZmXSwgWzB4ZmUyMCwgMHhmZTJmXSwgWzB4ZmUxMCwgMHhmZTFmXSwgWzB4ZmU1MCwgMHhmZTZmXSwgWzB4ZmU3MCwgMHhmZWZmXSwgWzB4ZmYwMCwgMHhmZmVmXSwgWzB4ZmZmMCwgMHhmZmZmXSwgWzB4MGYwMCwgMHgwZmZmXSwgWzB4MDcwMCwgMHgwNzRmXSwgWzB4MDc4MCwgMHgwN2JmXSwgWzB4MGQ4MCwgMHgwZGZmXSwgWzB4MTAwMCwgMHgxMDlmXSwgWzB4MTIwMCwgMHgxMzdmLCAweDEzODAsIDB4MTM5ZiwgMHgyZDgwLCAweDJkZGZdLCBbMHgxM2EwLCAweDEzZmZdLCBbMHgxNDAwLCAweDE2N2ZdLCBbMHgxNjgwLCAweDE2OWZdLCBbMHgxNmEwLCAweDE2ZmZdLCBbMHgxNzgwLCAweDE3ZmZdLCBbMHgxODAwLCAweDE4YWZdLCBbMHgyODAwLCAweDI4ZmZdLCBbMHhhMDAwLCAweGE0OGZdLCBbMHgxNzAwLCAweDE3MWYsIDB4MTcyMCwgMHgxNzNmLCAweDE3NDAsIDB4MTc1ZiwgMHgxNzYwLCAweDE3N2ZdLCBbMHgxMDMwMCwgMHgxMDMyZl0sIFsweDEwMzMwLCAweDEwMzRmXSwgWzB4MTA0MDAsIDB4MTA0NGZdLCBbMHgxZDAwMCwgMHgxZDBmZiwgMHgxZDEwMCwgMHgxZDFmZiwgMHgxZDIwMCwgMHgxZDI0Zl0sIFsweDFkNDAwLCAweDFkN2ZmXSwgWzB4ZmYwMDAsIDB4ZmZmZmRdLCBbMHhmZTAwLCAweGZlMGYsIDB4ZTAxMDAsIDB4ZTAxZWZdLCBbMHhlMDAwMCwgMHhlMDA3Zl0sIFsweDE5MDAsIDB4MTk0Zl0sIFsweDE5NTAsIDB4MTk3Zl0sIFsweDE5ODAsIDB4MTlkZl0sIFsweDFhMDAsIDB4MWExZl0sIFsweDJjMDAsIDB4MmM1Zl0sIFsweDJkMzAsIDB4MmQ3Zl0sIFsweDRkYzAsIDB4NGRmZl0sIFsweGE4MDAsIDB4YTgyZl0sIFsweDEwMDAwLCAweDEwMDdmLCAweDEwMDgwLCAweDEwMGZmLCAweDEwMTAwLCAweDEwMTNmXSwgWzB4MTAxNDAsIDB4MTAxOGZdLCBbMHgxMDM4MCwgMHgxMDM5Zl0sIFsweDEwM2EwLCAweDEwM2RmXSwgWzB4MTA0NTAsIDB4MTA0N2ZdLCBbMHgxMDQ4MCwgMHgxMDRhZl0sIFsweDEwODAwLCAweDEwODNmXSwgWzB4MTBhMDAsIDB4MTBhNWZdLCBbMHgxZDMwMCwgMHgxZDM1Zl0sIFsweDEyMDAwLCAweDEyM2ZmLCAweDEyNDAwLCAweDEyNDdmXSwgWzB4MWQzNjAsIDB4MWQzN2ZdLCBbMHgxYjgwLCAweDFiYmZdLCBbMHgxYzAwLCAweDFjNGZdLCBbMHgxYzUwLCAweDFjN2ZdLCBbMHhhODgwLCAweGE4ZGZdLCBbMHhhOTAwLCAweGE5MmZdLCBbMHhhOTMwLCAweGE5NWZdLCBbMHhhYTAwLCAweGFhNWZdLCBbMHgxMDE5MCwgMHgxMDFjZl0sIFsweDEwMWQwLCAweDEwMWZmXSwgWzB4MTAyYTAsIDB4MTAyZGYsIDB4MTAyODAsIDB4MTAyOWYsIDB4MTA5MjAsIDB4MTA5M2ZdLCBbMHgxZjAzMCwgMHgxZjA5ZiwgMHgxZjAwMCwgMHgxZjAyZl1dOwpmdW5jdGlvbiBnZXRVbmljb2RlUmFuZ2VGb3IodmFsdWUsIGxhc3RQb3NpdGlvbiA9IC0xKSB7CiAgaWYgKGxhc3RQb3NpdGlvbiAhPT0gLTEpIHsKICAgIGNvbnN0IHJhbmdlID0gVW5pY29kZVJhbmdlc1tsYXN0UG9zaXRpb25dOwogICAgZm9yIChsZXQgaSA9IDAsIGlpID0gcmFuZ2UubGVuZ3RoOyBpIDwgaWk7IGkgKz0gMikgewogICAgICBpZiAodmFsdWUgPj0gcmFuZ2VbaV0gJiYgdmFsdWUgPD0gcmFuZ2VbaSArIDFdKSB7CiAgICAgICAgcmV0dXJuIGxhc3RQb3NpdGlvbjsKICAgICAgfQogICAgfQogIH0KICBmb3IgKGxldCBpID0gMCwgaWkgPSBVbmljb2RlUmFuZ2VzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgIGNvbnN0IHJhbmdlID0gVW5pY29kZVJhbmdlc1tpXTsKICAgIGZvciAobGV0IGogPSAwLCBqaiA9IHJhbmdlLmxlbmd0aDsgaiA8IGpqOyBqICs9IDIpIHsKICAgICAgaWYgKHZhbHVlID49IHJhbmdlW2pdICYmIHZhbHVlIDw9IHJhbmdlW2ogKyAxXSkgewogICAgICAgIHJldHVybiBpOwogICAgICB9CiAgICB9CiAgfQogIHJldHVybiAtMTsKfQpjb25zdCBTcGVjaWFsQ2hhclJlZ0V4cCA9IG5ldyBSZWdFeHAoIl4oXFxzKXwoXFxwe01ufSl8KFxccHtDZn0pJCIsICJ1Iik7CmNvbnN0IENhdGVnb3J5Q2FjaGUgPSBuZXcgTWFwKCk7CmZ1bmN0aW9uIGdldENoYXJVbmljb2RlQ2F0ZWdvcnkoY2hhcikgewogIGNvbnN0IGNhY2hlZENhdGVnb3J5ID0gQ2F0ZWdvcnlDYWNoZS5nZXQoY2hhcik7CiAgaWYgKGNhY2hlZENhdGVnb3J5KSB7CiAgICByZXR1cm4gY2FjaGVkQ2F0ZWdvcnk7CiAgfQogIGNvbnN0IGdyb3VwcyA9IGNoYXIubWF0Y2goU3BlY2lhbENoYXJSZWdFeHApOwogIGNvbnN0IGNhdGVnb3J5ID0gewogICAgaXNXaGl0ZXNwYWNlOiAhIWdyb3Vwcz8uWzFdLAogICAgaXNaZXJvV2lkdGhEaWFjcml0aWM6ICEhZ3JvdXBzPy5bMl0sCiAgICBpc0ludmlzaWJsZUZvcm1hdE1hcms6ICEhZ3JvdXBzPy5bM10KICB9OwogIENhdGVnb3J5Q2FjaGUuc2V0KGNoYXIsIGNhdGVnb3J5KTsKICByZXR1cm4gY2F0ZWdvcnk7Cn0KZnVuY3Rpb24gY2xlYXJVbmljb2RlQ2FjaGVzKCkgewogIENhdGVnb3J5Q2FjaGUuY2xlYXIoKTsKfQoKOy8vIC4vc3JjL2NvcmUvZm9udHNfdXRpbHMuanMKCgoKCgpjb25zdCBTRUFDX0FOQUxZU0lTX0VOQUJMRUQgPSB0cnVlOwpjb25zdCBGb250RmxhZ3MgPSB7CiAgRml4ZWRQaXRjaDogMSwKICBTZXJpZjogMiwKICBTeW1ib2xpYzogNCwKICBTY3JpcHQ6IDgsCiAgTm9uc3ltYm9saWM6IDMyLAogIEl0YWxpYzogNjQsCiAgQWxsQ2FwOiA2NTUzNiwKICBTbWFsbENhcDogMTMxMDcyLAogIEZvcmNlQm9sZDogMjYyMTQ0Cn07CmNvbnN0IE1hY1N0YW5kYXJkR2x5cGhPcmRlcmluZyA9IFsiLm5vdGRlZiIsICIubnVsbCIsICJub25tYXJraW5ncmV0dXJuIiwgInNwYWNlIiwgImV4Y2xhbSIsICJxdW90ZWRibCIsICJudW1iZXJzaWduIiwgImRvbGxhciIsICJwZXJjZW50IiwgImFtcGVyc2FuZCIsICJxdW90ZXNpbmdsZSIsICJwYXJlbmxlZnQiLCAicGFyZW5yaWdodCIsICJhc3RlcmlzayIsICJwbHVzIiwgImNvbW1hIiwgImh5cGhlbiIsICJwZXJpb2QiLCAic2xhc2giLCAiemVybyIsICJvbmUiLCAidHdvIiwgInRocmVlIiwgImZvdXIiLCAiZml2ZSIsICJzaXgiLCAic2V2ZW4iLCAiZWlnaHQiLCAibmluZSIsICJjb2xvbiIsICJzZW1pY29sb24iLCAibGVzcyIsICJlcXVhbCIsICJncmVhdGVyIiwgInF1ZXN0aW9uIiwgImF0IiwgIkEiLCAiQiIsICJDIiwgIkQiLCAiRSIsICJGIiwgIkciLCAiSCIsICJJIiwgIkoiLCAiSyIsICJMIiwgIk0iLCAiTiIsICJPIiwgIlAiLCAiUSIsICJSIiwgIlMiLCAiVCIsICJVIiwgIlYiLCAiVyIsICJYIiwgIlkiLCAiWiIsICJicmFja2V0bGVmdCIsICJiYWNrc2xhc2giLCAiYnJhY2tldHJpZ2h0IiwgImFzY2lpY2lyY3VtIiwgInVuZGVyc2NvcmUiLCAiZ3JhdmUiLCAiYSIsICJiIiwgImMiLCAiZCIsICJlIiwgImYiLCAiZyIsICJoIiwgImkiLCAiaiIsICJrIiwgImwiLCAibSIsICJuIiwgIm8iLCAicCIsICJxIiwgInIiLCAicyIsICJ0IiwgInUiLCAidiIsICJ3IiwgIngiLCAieSIsICJ6IiwgImJyYWNlbGVmdCIsICJiYXIiLCAiYnJhY2VyaWdodCIsICJhc2NpaXRpbGRlIiwgIkFkaWVyZXNpcyIsICJBcmluZyIsICJDY2VkaWxsYSIsICJFYWN1dGUiLCAiTnRpbGRlIiwgIk9kaWVyZXNpcyIsICJVZGllcmVzaXMiLCAiYWFjdXRlIiwgImFncmF2ZSIsICJhY2lyY3VtZmxleCIsICJhZGllcmVzaXMiLCAiYXRpbGRlIiwgImFyaW5nIiwgImNjZWRpbGxhIiwgImVhY3V0ZSIsICJlZ3JhdmUiLCAiZWNpcmN1bWZsZXgiLCAiZWRpZXJlc2lzIiwgImlhY3V0ZSIsICJpZ3JhdmUiLCAiaWNpcmN1bWZsZXgiLCAiaWRpZXJlc2lzIiwgIm50aWxkZSIsICJvYWN1dGUiLCAib2dyYXZlIiwgIm9jaXJjdW1mbGV4IiwgIm9kaWVyZXNpcyIsICJvdGlsZGUiLCAidWFjdXRlIiwgInVncmF2ZSIsICJ1Y2lyY3VtZmxleCIsICJ1ZGllcmVzaXMiLCAiZGFnZ2VyIiwgImRlZ3JlZSIsICJjZW50IiwgInN0ZXJsaW5nIiwgInNlY3Rpb24iLCAiYnVsbGV0IiwgInBhcmFncmFwaCIsICJnZXJtYW5kYmxzIiwgInJlZ2lzdGVyZWQiLCAiY29weXJpZ2h0IiwgInRyYWRlbWFyayIsICJhY3V0ZSIsICJkaWVyZXNpcyIsICJub3RlcXVhbCIsICJBRSIsICJPc2xhc2giLCAiaW5maW5pdHkiLCAicGx1c21pbnVzIiwgImxlc3NlcXVhbCIsICJncmVhdGVyZXF1YWwiLCAieWVuIiwgIm11IiwgInBhcnRpYWxkaWZmIiwgInN1bW1hdGlvbiIsICJwcm9kdWN0IiwgInBpIiwgImludGVncmFsIiwgIm9yZGZlbWluaW5lIiwgIm9yZG1hc2N1bGluZSIsICJPbWVnYSIsICJhZSIsICJvc2xhc2giLCAicXVlc3Rpb25kb3duIiwgImV4Y2xhbWRvd24iLCAibG9naWNhbG5vdCIsICJyYWRpY2FsIiwgImZsb3JpbiIsICJhcHByb3hlcXVhbCIsICJEZWx0YSIsICJndWlsbGVtb3RsZWZ0IiwgImd1aWxsZW1vdHJpZ2h0IiwgImVsbGlwc2lzIiwgIm5vbmJyZWFraW5nc3BhY2UiLCAiQWdyYXZlIiwgIkF0aWxkZSIsICJPdGlsZGUiLCAiT0UiLCAib2UiLCAiZW5kYXNoIiwgImVtZGFzaCIsICJxdW90ZWRibGxlZnQiLCAicXVvdGVkYmxyaWdodCIsICJxdW90ZWxlZnQiLCAicXVvdGVyaWdodCIsICJkaXZpZGUiLCAibG96ZW5nZSIsICJ5ZGllcmVzaXMiLCAiWWRpZXJlc2lzIiwgImZyYWN0aW9uIiwgImN1cnJlbmN5IiwgImd1aWxzaW5nbGxlZnQiLCAiZ3VpbHNpbmdscmlnaHQiLCAiZmkiLCAiZmwiLCAiZGFnZ2VyZGJsIiwgInBlcmlvZGNlbnRlcmVkIiwgInF1b3Rlc2luZ2xiYXNlIiwgInF1b3RlZGJsYmFzZSIsICJwZXJ0aG91c2FuZCIsICJBY2lyY3VtZmxleCIsICJFY2lyY3VtZmxleCIsICJBYWN1dGUiLCAiRWRpZXJlc2lzIiwgIkVncmF2ZSIsICJJYWN1dGUiLCAiSWNpcmN1bWZsZXgiLCAiSWRpZXJlc2lzIiwgIklncmF2ZSIsICJPYWN1dGUiLCAiT2NpcmN1bWZsZXgiLCAiYXBwbGUiLCAiT2dyYXZlIiwgIlVhY3V0ZSIsICJVY2lyY3VtZmxleCIsICJVZ3JhdmUiLCAiZG90bGVzc2kiLCAiY2lyY3VtZmxleCIsICJ0aWxkZSIsICJtYWNyb24iLCAiYnJldmUiLCAiZG90YWNjZW50IiwgInJpbmciLCAiY2VkaWxsYSIsICJodW5nYXJ1bWxhdXQiLCAib2dvbmVrIiwgImNhcm9uIiwgIkxzbGFzaCIsICJsc2xhc2giLCAiU2Nhcm9uIiwgInNjYXJvbiIsICJaY2Fyb24iLCAiemNhcm9uIiwgImJyb2tlbmJhciIsICJFdGgiLCAiZXRoIiwgIllhY3V0ZSIsICJ5YWN1dGUiLCAiVGhvcm4iLCAidGhvcm4iLCAibWludXMiLCAibXVsdGlwbHkiLCAib25lc3VwZXJpb3IiLCAidHdvc3VwZXJpb3IiLCAidGhyZWVzdXBlcmlvciIsICJvbmVoYWxmIiwgIm9uZXF1YXJ0ZXIiLCAidGhyZWVxdWFydGVycyIsICJmcmFuYyIsICJHYnJldmUiLCAiZ2JyZXZlIiwgIklkb3RhY2NlbnQiLCAiU2NlZGlsbGEiLCAic2NlZGlsbGEiLCAiQ2FjdXRlIiwgImNhY3V0ZSIsICJDY2Fyb24iLCAiY2Nhcm9uIiwgImRjcm9hdCJdOwpmdW5jdGlvbiByZWNvdmVyR2x5cGhOYW1lKG5hbWUsIGdseXBoc1VuaWNvZGVNYXApIHsKICBpZiAoZ2x5cGhzVW5pY29kZU1hcFtuYW1lXSAhPT0gdW5kZWZpbmVkKSB7CiAgICByZXR1cm4gbmFtZTsKICB9CiAgY29uc3QgdW5pY29kZSA9IGdldFVuaWNvZGVGb3JHbHlwaChuYW1lLCBnbHlwaHNVbmljb2RlTWFwKTsKICBpZiAodW5pY29kZSAhPT0gLTEpIHsKICAgIGZvciAoY29uc3Qga2V5IGluIGdseXBoc1VuaWNvZGVNYXApIHsKICAgICAgaWYgKGdseXBoc1VuaWNvZGVNYXBba2V5XSA9PT0gdW5pY29kZSkgewogICAgICAgIHJldHVybiBrZXk7CiAgICAgIH0KICAgIH0KICB9CiAgaW5mbygiVW5hYmxlIHRvIHJlY292ZXIgYSBzdGFuZGFyZCBnbHlwaCBuYW1lIGZvcjogIiArIG5hbWUpOwogIHJldHVybiBuYW1lOwp9CmZ1bmN0aW9uIHR5cGUxRm9udEdseXBoTWFwcGluZyhwcm9wZXJ0aWVzLCBidWlsdEluRW5jb2RpbmcsIGdseXBoTmFtZXMpIHsKICBjb25zdCBjaGFyQ29kZVRvR2x5cGhJZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgbGV0IGdseXBoSWQsIGNoYXJDb2RlLCBiYXNlRW5jb2Rpbmc7CiAgY29uc3QgaXNTeW1ib2xpY0ZvbnQgPSAhIShwcm9wZXJ0aWVzLmZsYWdzICYgRm9udEZsYWdzLlN5bWJvbGljKTsKICBpZiAocHJvcGVydGllcy5pc0ludGVybmFsRm9udCkgewogICAgYmFzZUVuY29kaW5nID0gYnVpbHRJbkVuY29kaW5nOwogICAgZm9yIChjaGFyQ29kZSA9IDA7IGNoYXJDb2RlIDwgYmFzZUVuY29kaW5nLmxlbmd0aDsgY2hhckNvZGUrKykgewogICAgICBnbHlwaElkID0gZ2x5cGhOYW1lcy5pbmRleE9mKGJhc2VFbmNvZGluZ1tjaGFyQ29kZV0pOwogICAgICBjaGFyQ29kZVRvR2x5cGhJZFtjaGFyQ29kZV0gPSBnbHlwaElkID49IDAgPyBnbHlwaElkIDogMDsKICAgIH0KICB9IGVsc2UgaWYgKHByb3BlcnRpZXMuYmFzZUVuY29kaW5nTmFtZSkgewogICAgYmFzZUVuY29kaW5nID0gZ2V0RW5jb2RpbmcocHJvcGVydGllcy5iYXNlRW5jb2RpbmdOYW1lKTsKICAgIGZvciAoY2hhckNvZGUgPSAwOyBjaGFyQ29kZSA8IGJhc2VFbmNvZGluZy5sZW5ndGg7IGNoYXJDb2RlKyspIHsKICAgICAgZ2x5cGhJZCA9IGdseXBoTmFtZXMuaW5kZXhPZihiYXNlRW5jb2RpbmdbY2hhckNvZGVdKTsKICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gZ2x5cGhJZCA+PSAwID8gZ2x5cGhJZCA6IDA7CiAgICB9CiAgfSBlbHNlIGlmIChpc1N5bWJvbGljRm9udCkgewogICAgZm9yIChjaGFyQ29kZSBpbiBidWlsdEluRW5jb2RpbmcpIHsKICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gYnVpbHRJbkVuY29kaW5nW2NoYXJDb2RlXTsKICAgIH0KICB9IGVsc2UgewogICAgYmFzZUVuY29kaW5nID0gU3RhbmRhcmRFbmNvZGluZzsKICAgIGZvciAoY2hhckNvZGUgPSAwOyBjaGFyQ29kZSA8IGJhc2VFbmNvZGluZy5sZW5ndGg7IGNoYXJDb2RlKyspIHsKICAgICAgZ2x5cGhJZCA9IGdseXBoTmFtZXMuaW5kZXhPZihiYXNlRW5jb2RpbmdbY2hhckNvZGVdKTsKICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gZ2x5cGhJZCA+PSAwID8gZ2x5cGhJZCA6IDA7CiAgICB9CiAgfQogIGNvbnN0IGRpZmZlcmVuY2VzID0gcHJvcGVydGllcy5kaWZmZXJlbmNlczsKICBsZXQgZ2x5cGhzVW5pY29kZU1hcDsKICBpZiAoZGlmZmVyZW5jZXMpIHsKICAgIGZvciAoY2hhckNvZGUgaW4gZGlmZmVyZW5jZXMpIHsKICAgICAgY29uc3QgZ2x5cGhOYW1lID0gZGlmZmVyZW5jZXNbY2hhckNvZGVdOwogICAgICBnbHlwaElkID0gZ2x5cGhOYW1lcy5pbmRleE9mKGdseXBoTmFtZSk7CiAgICAgIGlmIChnbHlwaElkID09PSAtMSkgewogICAgICAgIGlmICghZ2x5cGhzVW5pY29kZU1hcCkgewogICAgICAgICAgZ2x5cGhzVW5pY29kZU1hcCA9IGdldEdseXBoc1VuaWNvZGUoKTsKICAgICAgICB9CiAgICAgICAgY29uc3Qgc3RhbmRhcmRHbHlwaE5hbWUgPSByZWNvdmVyR2x5cGhOYW1lKGdseXBoTmFtZSwgZ2x5cGhzVW5pY29kZU1hcCk7CiAgICAgICAgaWYgKHN0YW5kYXJkR2x5cGhOYW1lICE9PSBnbHlwaE5hbWUpIHsKICAgICAgICAgIGdseXBoSWQgPSBnbHlwaE5hbWVzLmluZGV4T2Yoc3RhbmRhcmRHbHlwaE5hbWUpOwogICAgICAgIH0KICAgICAgfQogICAgICBjaGFyQ29kZVRvR2x5cGhJZFtjaGFyQ29kZV0gPSBnbHlwaElkID49IDAgPyBnbHlwaElkIDogMDsKICAgIH0KICB9CiAgcmV0dXJuIGNoYXJDb2RlVG9HbHlwaElkOwp9CmZ1bmN0aW9uIG5vcm1hbGl6ZUZvbnROYW1lKG5hbWUpIHsKICByZXR1cm4gbmFtZS5yZXBsYWNlQWxsKC9bLF9dL2csICItIikucmVwbGFjZUFsbCgvXHMvZywgIiIpOwp9CmNvbnN0IGdldFZlcnRpY2FsUHJlc2VudGF0aW9uRm9ybSA9IGdldExvb2t1cFRhYmxlRmFjdG9yeSh0ID0+IHsKICB0WzB4MjAxM10gPSAweGZlMzI7CiAgdFsweDIwMTRdID0gMHhmZTMxOwogIHRbMHgyMDI1XSA9IDB4ZmUzMDsKICB0WzB4MjAyNl0gPSAweGZlMTk7CiAgdFsweDMwMDFdID0gMHhmZTExOwogIHRbMHgzMDAyXSA9IDB4ZmUxMjsKICB0WzB4MzAwOF0gPSAweGZlM2Y7CiAgdFsweDMwMDldID0gMHhmZTQwOwogIHRbMHgzMDBhXSA9IDB4ZmUzZDsKICB0WzB4MzAwYl0gPSAweGZlM2U7CiAgdFsweDMwMGNdID0gMHhmZTQxOwogIHRbMHgzMDBkXSA9IDB4ZmU0MjsKICB0WzB4MzAwZV0gPSAweGZlNDM7CiAgdFsweDMwMGZdID0gMHhmZTQ0OwogIHRbMHgzMDEwXSA9IDB4ZmUzYjsKICB0WzB4MzAxMV0gPSAweGZlM2M7CiAgdFsweDMwMTRdID0gMHhmZTM5OwogIHRbMHgzMDE1XSA9IDB4ZmUzYTsKICB0WzB4MzAxNl0gPSAweGZlMTc7CiAgdFsweDMwMTddID0gMHhmZTE4OwogIHRbMHhmZTRmXSA9IDB4ZmUzNDsKICB0WzB4ZmYwMV0gPSAweGZlMTU7CiAgdFsweGZmMDhdID0gMHhmZTM1OwogIHRbMHhmZjA5XSA9IDB4ZmUzNjsKICB0WzB4ZmYwY10gPSAweGZlMTA7CiAgdFsweGZmMWFdID0gMHhmZTEzOwogIHRbMHhmZjFiXSA9IDB4ZmUxNDsKICB0WzB4ZmYxZl0gPSAweGZlMTY7CiAgdFsweGZmM2JdID0gMHhmZTQ3OwogIHRbMHhmZjNkXSA9IDB4ZmU0ODsKICB0WzB4ZmYzZl0gPSAweGZlMzM7CiAgdFsweGZmNWJdID0gMHhmZTM3OwogIHRbMHhmZjVkXSA9IDB4ZmUzODsKfSk7Cgo7Ly8gLi9zcmMvY29yZS9zdGFuZGFyZF9mb250cy5qcwoKCmNvbnN0IGdldFN0ZEZvbnRNYXAgPSBnZXRMb29rdXBUYWJsZUZhY3RvcnkoZnVuY3Rpb24gKHQpIHsKICB0WyJUaW1lcy1Sb21hbiJdID0gIlRpbWVzLVJvbWFuIjsKICB0LkhlbHZldGljYSA9ICJIZWx2ZXRpY2EiOwogIHQuQ291cmllciA9ICJDb3VyaWVyIjsKICB0LlN5bWJvbCA9ICJTeW1ib2wiOwogIHRbIlRpbWVzLUJvbGQiXSA9ICJUaW1lcy1Cb2xkIjsKICB0WyJIZWx2ZXRpY2EtQm9sZCJdID0gIkhlbHZldGljYS1Cb2xkIjsKICB0WyJDb3VyaWVyLUJvbGQiXSA9ICJDb3VyaWVyLUJvbGQiOwogIHQuWmFwZkRpbmdiYXRzID0gIlphcGZEaW5nYmF0cyI7CiAgdFsiVGltZXMtSXRhbGljIl0gPSAiVGltZXMtSXRhbGljIjsKICB0WyJIZWx2ZXRpY2EtT2JsaXF1ZSJdID0gIkhlbHZldGljYS1PYmxpcXVlIjsKICB0WyJDb3VyaWVyLU9ibGlxdWUiXSA9ICJDb3VyaWVyLU9ibGlxdWUiOwogIHRbIlRpbWVzLUJvbGRJdGFsaWMiXSA9ICJUaW1lcy1Cb2xkSXRhbGljIjsKICB0WyJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiXSA9ICJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiOwogIHRbIkNvdXJpZXItQm9sZE9ibGlxdWUiXSA9ICJDb3VyaWVyLUJvbGRPYmxpcXVlIjsKICB0LkFyaWFsTmFycm93ID0gIkhlbHZldGljYSI7CiAgdFsiQXJpYWxOYXJyb3ctQm9sZCJdID0gIkhlbHZldGljYS1Cb2xkIjsKICB0WyJBcmlhbE5hcnJvdy1Cb2xkSXRhbGljIl0gPSAiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIjsKICB0WyJBcmlhbE5hcnJvdy1JdGFsaWMiXSA9ICJIZWx2ZXRpY2EtT2JsaXF1ZSI7CiAgdC5BcmlhbEJsYWNrID0gIkhlbHZldGljYSI7CiAgdFsiQXJpYWxCbGFjay1Cb2xkIl0gPSAiSGVsdmV0aWNhLUJvbGQiOwogIHRbIkFyaWFsQmxhY2stQm9sZEl0YWxpYyJdID0gIkhlbHZldGljYS1Cb2xkT2JsaXF1ZSI7CiAgdFsiQXJpYWxCbGFjay1JdGFsaWMiXSA9ICJIZWx2ZXRpY2EtT2JsaXF1ZSI7CiAgdFsiQXJpYWwtQmxhY2siXSA9ICJIZWx2ZXRpY2EiOwogIHRbIkFyaWFsLUJsYWNrLUJvbGQiXSA9ICJIZWx2ZXRpY2EtQm9sZCI7CiAgdFsiQXJpYWwtQmxhY2stQm9sZEl0YWxpYyJdID0gIkhlbHZldGljYS1Cb2xkT2JsaXF1ZSI7CiAgdFsiQXJpYWwtQmxhY2stSXRhbGljIl0gPSAiSGVsdmV0aWNhLU9ibGlxdWUiOwogIHQuQXJpYWwgPSAiSGVsdmV0aWNhIjsKICB0WyJBcmlhbC1Cb2xkIl0gPSAiSGVsdmV0aWNhLUJvbGQiOwogIHRbIkFyaWFsLUJvbGRJdGFsaWMiXSA9ICJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiOwogIHRbIkFyaWFsLUl0YWxpYyJdID0gIkhlbHZldGljYS1PYmxpcXVlIjsKICB0LkFyaWFsTVQgPSAiSGVsdmV0aWNhIjsKICB0WyJBcmlhbC1Cb2xkSXRhbGljTVQiXSA9ICJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiOwogIHRbIkFyaWFsLUJvbGRNVCJdID0gIkhlbHZldGljYS1Cb2xkIjsKICB0WyJBcmlhbC1JdGFsaWNNVCJdID0gIkhlbHZldGljYS1PYmxpcXVlIjsKICB0WyJBcmlhbC1Cb2xkSXRhbGljTVQtQm9sZEl0YWxpYyJdID0gIkhlbHZldGljYS1Cb2xkT2JsaXF1ZSI7CiAgdFsiQXJpYWwtQm9sZE1ULUJvbGQiXSA9ICJIZWx2ZXRpY2EtQm9sZCI7CiAgdFsiQXJpYWwtSXRhbGljTVQtSXRhbGljIl0gPSAiSGVsdmV0aWNhLU9ibGlxdWUiOwogIHQuQXJpYWxVbmljb2RlTVMgPSAiSGVsdmV0aWNhIjsKICB0WyJBcmlhbFVuaWNvZGVNUy1Cb2xkIl0gPSAiSGVsdmV0aWNhLUJvbGQiOwogIHRbIkFyaWFsVW5pY29kZU1TLUJvbGRJdGFsaWMiXSA9ICJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiOwogIHRbIkFyaWFsVW5pY29kZU1TLUl0YWxpYyJdID0gIkhlbHZldGljYS1PYmxpcXVlIjsKICB0WyJDb3VyaWVyLUJvbGRJdGFsaWMiXSA9ICJDb3VyaWVyLUJvbGRPYmxpcXVlIjsKICB0WyJDb3VyaWVyLUl0YWxpYyJdID0gIkNvdXJpZXItT2JsaXF1ZSI7CiAgdC5Db3VyaWVyTmV3ID0gIkNvdXJpZXIiOwogIHRbIkNvdXJpZXJOZXctQm9sZCJdID0gIkNvdXJpZXItQm9sZCI7CiAgdFsiQ291cmllck5ldy1Cb2xkSXRhbGljIl0gPSAiQ291cmllci1Cb2xkT2JsaXF1ZSI7CiAgdFsiQ291cmllck5ldy1JdGFsaWMiXSA9ICJDb3VyaWVyLU9ibGlxdWUiOwogIHRbIkNvdXJpZXJOZXdQUy1Cb2xkSXRhbGljTVQiXSA9ICJDb3VyaWVyLUJvbGRPYmxpcXVlIjsKICB0WyJDb3VyaWVyTmV3UFMtQm9sZE1UIl0gPSAiQ291cmllci1Cb2xkIjsKICB0WyJDb3VyaWVyTmV3UFMtSXRhbGljTVQiXSA9ICJDb3VyaWVyLU9ibGlxdWUiOwogIHQuQ291cmllck5ld1BTTVQgPSAiQ291cmllciI7CiAgdFsiSGVsdmV0aWNhLUJvbGRJdGFsaWMiXSA9ICJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiOwogIHRbIkhlbHZldGljYS1JdGFsaWMiXSA9ICJIZWx2ZXRpY2EtT2JsaXF1ZSI7CiAgdFsiSGVsdmV0aWNhTFRTdGQtQm9sZCJdID0gIkhlbHZldGljYS1Cb2xkIjsKICB0WyJTeW1ib2wtQm9sZCJdID0gIlN5bWJvbCI7CiAgdFsiU3ltYm9sLUJvbGRJdGFsaWMiXSA9ICJTeW1ib2wiOwogIHRbIlN5bWJvbC1JdGFsaWMiXSA9ICJTeW1ib2wiOwogIHQuVGltZXNOZXdSb21hbiA9ICJUaW1lcy1Sb21hbiI7CiAgdFsiVGltZXNOZXdSb21hbi1Cb2xkIl0gPSAiVGltZXMtQm9sZCI7CiAgdFsiVGltZXNOZXdSb21hbi1Cb2xkSXRhbGljIl0gPSAiVGltZXMtQm9sZEl0YWxpYyI7CiAgdFsiVGltZXNOZXdSb21hbi1JdGFsaWMiXSA9ICJUaW1lcy1JdGFsaWMiOwogIHQuVGltZXNOZXdSb21hblBTID0gIlRpbWVzLVJvbWFuIjsKICB0WyJUaW1lc05ld1JvbWFuUFMtQm9sZCJdID0gIlRpbWVzLUJvbGQiOwogIHRbIlRpbWVzTmV3Um9tYW5QUy1Cb2xkSXRhbGljIl0gPSAiVGltZXMtQm9sZEl0YWxpYyI7CiAgdFsiVGltZXNOZXdSb21hblBTLUJvbGRJdGFsaWNNVCJdID0gIlRpbWVzLUJvbGRJdGFsaWMiOwogIHRbIlRpbWVzTmV3Um9tYW5QUy1Cb2xkTVQiXSA9ICJUaW1lcy1Cb2xkIjsKICB0WyJUaW1lc05ld1JvbWFuUFMtSXRhbGljIl0gPSAiVGltZXMtSXRhbGljIjsKICB0WyJUaW1lc05ld1JvbWFuUFMtSXRhbGljTVQiXSA9ICJUaW1lcy1JdGFsaWMiOwogIHQuVGltZXNOZXdSb21hblBTTVQgPSAiVGltZXMtUm9tYW4iOwogIHRbIlRpbWVzTmV3Um9tYW5QU01ULUJvbGQiXSA9ICJUaW1lcy1Cb2xkIjsKICB0WyJUaW1lc05ld1JvbWFuUFNNVC1Cb2xkSXRhbGljIl0gPSAiVGltZXMtQm9sZEl0YWxpYyI7CiAgdFsiVGltZXNOZXdSb21hblBTTVQtSXRhbGljIl0gPSAiVGltZXMtSXRhbGljIjsKfSk7CmNvbnN0IGdldEZvbnROYW1lVG9GaWxlTWFwID0gZ2V0TG9va3VwVGFibGVGYWN0b3J5KGZ1bmN0aW9uICh0KSB7CiAgdC5Db3VyaWVyID0gIkZveGl0Rml4ZWQucGZiIjsKICB0WyJDb3VyaWVyLUJvbGQiXSA9ICJGb3hpdEZpeGVkQm9sZC5wZmIiOwogIHRbIkNvdXJpZXItQm9sZE9ibGlxdWUiXSA9ICJGb3hpdEZpeGVkQm9sZEl0YWxpYy5wZmIiOwogIHRbIkNvdXJpZXItT2JsaXF1ZSJdID0gIkZveGl0Rml4ZWRJdGFsaWMucGZiIjsKICB0LkhlbHZldGljYSA9ICJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyLnR0ZiI7CiAgdFsiSGVsdmV0aWNhLUJvbGQiXSA9ICJMaWJlcmF0aW9uU2Fucy1Cb2xkLnR0ZiI7CiAgdFsiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIl0gPSAiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYy50dGYiOwogIHRbIkhlbHZldGljYS1PYmxpcXVlIl0gPSAiTGliZXJhdGlvblNhbnMtSXRhbGljLnR0ZiI7CiAgdFsiVGltZXMtUm9tYW4iXSA9ICJGb3hpdFNlcmlmLnBmYiI7CiAgdFsiVGltZXMtQm9sZCJdID0gIkZveGl0U2VyaWZCb2xkLnBmYiI7CiAgdFsiVGltZXMtQm9sZEl0YWxpYyJdID0gIkZveGl0U2VyaWZCb2xkSXRhbGljLnBmYiI7CiAgdFsiVGltZXMtSXRhbGljIl0gPSAiRm94aXRTZXJpZkl0YWxpYy5wZmIiOwogIHQuU3ltYm9sID0gIkZveGl0U3ltYm9sLnBmYiI7CiAgdC5aYXBmRGluZ2JhdHMgPSAiRm94aXREaW5nYmF0cy5wZmIiOwogIHRbIkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIiXSA9ICJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyLnR0ZiI7CiAgdFsiTGliZXJhdGlvblNhbnMtQm9sZCJdID0gIkxpYmVyYXRpb25TYW5zLUJvbGQudHRmIjsKICB0WyJMaWJlcmF0aW9uU2Fucy1JdGFsaWMiXSA9ICJMaWJlcmF0aW9uU2Fucy1JdGFsaWMudHRmIjsKICB0WyJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljIl0gPSAiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYy50dGYiOwp9KTsKY29uc3QgZ2V0Tm9uU3RkRm9udE1hcCA9IGdldExvb2t1cFRhYmxlRmFjdG9yeShmdW5jdGlvbiAodCkgewogIHQuQ2FsaWJyaSA9ICJIZWx2ZXRpY2EiOwogIHRbIkNhbGlicmktQm9sZCJdID0gIkhlbHZldGljYS1Cb2xkIjsKICB0WyJDYWxpYnJpLUJvbGRJdGFsaWMiXSA9ICJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiOwogIHRbIkNhbGlicmktSXRhbGljIl0gPSAiSGVsdmV0aWNhLU9ibGlxdWUiOwogIHQuQ2VudHVyeUdvdGhpYyA9ICJIZWx2ZXRpY2EiOwogIHRbIkNlbnR1cnlHb3RoaWMtQm9sZCJdID0gIkhlbHZldGljYS1Cb2xkIjsKICB0WyJDZW50dXJ5R290aGljLUJvbGRJdGFsaWMiXSA9ICJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiOwogIHRbIkNlbnR1cnlHb3RoaWMtSXRhbGljIl0gPSAiSGVsdmV0aWNhLU9ibGlxdWUiOwogIHQuQ29taWNTYW5zTVMgPSAiQ29taWMgU2FucyBNUyI7CiAgdFsiQ29taWNTYW5zTVMtQm9sZCJdID0gIkNvbWljIFNhbnMgTVMtQm9sZCI7CiAgdFsiQ29taWNTYW5zTVMtQm9sZEl0YWxpYyJdID0gIkNvbWljIFNhbnMgTVMtQm9sZEl0YWxpYyI7CiAgdFsiQ29taWNTYW5zTVMtSXRhbGljIl0gPSAiQ29taWMgU2FucyBNUy1JdGFsaWMiOwogIHQuR2lsbFNhbnNNVCA9ICJIZWx2ZXRpY2EiOwogIHRbIkdpbGxTYW5zTVQtQm9sZCJdID0gIkhlbHZldGljYS1Cb2xkIjsKICB0WyJHaWxsU2Fuc01ULUJvbGRJdGFsaWMiXSA9ICJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiOwogIHRbIkdpbGxTYW5zTVQtSXRhbGljIl0gPSAiSGVsdmV0aWNhLU9ibGlxdWUiOwogIHQuSW1wYWN0ID0gIkhlbHZldGljYSI7CiAgdFsiSXRjU3ltYm9sLUJvbGQiXSA9ICJIZWx2ZXRpY2EtQm9sZCI7CiAgdFsiSXRjU3ltYm9sLUJvbGRJdGFsaWMiXSA9ICJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiOwogIHRbIkl0Y1N5bWJvbC1Cb29rIl0gPSAiSGVsdmV0aWNhIjsKICB0WyJJdGNTeW1ib2wtQm9va0l0YWxpYyJdID0gIkhlbHZldGljYS1PYmxpcXVlIjsKICB0WyJJdGNTeW1ib2wtTWVkaXVtIl0gPSAiSGVsdmV0aWNhIjsKICB0WyJJdGNTeW1ib2wtTWVkaXVtSXRhbGljIl0gPSAiSGVsdmV0aWNhLU9ibGlxdWUiOwogIHQuTHVjaWRhQ29uc29sZSA9ICJDb3VyaWVyIjsKICB0WyJMdWNpZGFDb25zb2xlLUJvbGQiXSA9ICJDb3VyaWVyLUJvbGQiOwogIHRbIkx1Y2lkYUNvbnNvbGUtQm9sZEl0YWxpYyJdID0gIkNvdXJpZXItQm9sZE9ibGlxdWUiOwogIHRbIkx1Y2lkYUNvbnNvbGUtSXRhbGljIl0gPSAiQ291cmllci1PYmxpcXVlIjsKICB0WyJMdWNpZGFTYW5zLURlbWkiXSA9ICJIZWx2ZXRpY2EtQm9sZCI7CiAgdFsiTVMtR290aGljIl0gPSAiTVMgR290aGljIjsKICB0WyJNUy1Hb3RoaWMtQm9sZCJdID0gIk1TIEdvdGhpYy1Cb2xkIjsKICB0WyJNUy1Hb3RoaWMtQm9sZEl0YWxpYyJdID0gIk1TIEdvdGhpYy1Cb2xkSXRhbGljIjsKICB0WyJNUy1Hb3RoaWMtSXRhbGljIl0gPSAiTVMgR290aGljLUl0YWxpYyI7CiAgdFsiTVMtTWluY2hvIl0gPSAiTVMgTWluY2hvIjsKICB0WyJNUy1NaW5jaG8tQm9sZCJdID0gIk1TIE1pbmNoby1Cb2xkIjsKICB0WyJNUy1NaW5jaG8tQm9sZEl0YWxpYyJdID0gIk1TIE1pbmNoby1Cb2xkSXRhbGljIjsKICB0WyJNUy1NaW5jaG8tSXRhbGljIl0gPSAiTVMgTWluY2hvLUl0YWxpYyI7CiAgdFsiTVMtUEdvdGhpYyJdID0gIk1TIFBHb3RoaWMiOwogIHRbIk1TLVBHb3RoaWMtQm9sZCJdID0gIk1TIFBHb3RoaWMtQm9sZCI7CiAgdFsiTVMtUEdvdGhpYy1Cb2xkSXRhbGljIl0gPSAiTVMgUEdvdGhpYy1Cb2xkSXRhbGljIjsKICB0WyJNUy1QR290aGljLUl0YWxpYyJdID0gIk1TIFBHb3RoaWMtSXRhbGljIjsKICB0WyJNUy1QTWluY2hvIl0gPSAiTVMgUE1pbmNobyI7CiAgdFsiTVMtUE1pbmNoby1Cb2xkIl0gPSAiTVMgUE1pbmNoby1Cb2xkIjsKICB0WyJNUy1QTWluY2hvLUJvbGRJdGFsaWMiXSA9ICJNUyBQTWluY2hvLUJvbGRJdGFsaWMiOwogIHRbIk1TLVBNaW5jaG8tSXRhbGljIl0gPSAiTVMgUE1pbmNoby1JdGFsaWMiOwogIHQuTnVwdGlhbFNjcmlwdCA9ICJUaW1lcy1JdGFsaWMiOwogIHQuU2Vnb2VVSVN5bWJvbCA9ICJIZWx2ZXRpY2EiOwp9KTsKY29uc3QgZ2V0U2VyaWZGb250cyA9IGdldExvb2t1cFRhYmxlRmFjdG9yeShmdW5jdGlvbiAodCkgewogIHRbIkFkb2JlIEplbnNvbiJdID0gdHJ1ZTsKICB0WyJBZG9iZSBUZXh0Il0gPSB0cnVlOwogIHQuQWxiZXJ0dXMgPSB0cnVlOwogIHQuQWxkdXMgPSB0cnVlOwogIHQuQWxleGFuZHJpYSA9IHRydWU7CiAgdC5BbGdlcmlhbiA9IHRydWU7CiAgdFsiQW1lcmljYW4gVHlwZXdyaXRlciJdID0gdHJ1ZTsKICB0LkFudGlxdWEgPSB0cnVlOwogIHQuQXBleCA9IHRydWU7CiAgdC5Bcm5vID0gdHJ1ZTsKICB0LkFzdGVyID0gdHJ1ZTsKICB0LkF1cm9yYSA9IHRydWU7CiAgdC5CYXNrZXJ2aWxsZSA9IHRydWU7CiAgdC5CZWxsID0gdHJ1ZTsKICB0LkJlbWJvID0gdHJ1ZTsKICB0WyJCZW1ibyBTY2hvb2xib29rIl0gPSB0cnVlOwogIHQuQmVuZ3VpYXQgPSB0cnVlOwogIHRbIkJlcmtlbGV5IE9sZCBTdHlsZSJdID0gdHJ1ZTsKICB0WyJCZXJuaGFyZCBNb2Rlcm4iXSA9IHRydWU7CiAgdFsiQmVydGhvbGQgQ2l0eSJdID0gdHJ1ZTsKICB0LkJvZG9uaSA9IHRydWU7CiAgdFsiQmF1ZXIgQm9kb25pIl0gPSB0cnVlOwogIHRbIkJvb2sgQW50aXF1YSJdID0gdHJ1ZTsKICB0LkJvb2ttYW4gPSB0cnVlOwogIHRbIkJvcmRlYXV4IFJvbWFuIl0gPSB0cnVlOwogIHRbIkNhbGlmb3JuaWFuIEZCIl0gPSB0cnVlOwogIHQuQ2FsaXN0byA9IHRydWU7CiAgdC5DYWx2ZXJ0ID0gdHJ1ZTsKICB0LkNhcGl0YWxzID0gdHJ1ZTsKICB0LkNhbWJyaWEgPSB0cnVlOwogIHQuQ2FydGllciA9IHRydWU7CiAgdC5DYXNsb24gPSB0cnVlOwogIHQuQ2F0dWxsID0gdHJ1ZTsKICB0LkNlbnRhdXIgPSB0cnVlOwogIHRbIkNlbnR1cnkgT2xkIFN0eWxlIl0gPSB0cnVlOwogIHRbIkNlbnR1cnkgU2Nob29sYm9vayJdID0gdHJ1ZTsKICB0LkNoYXBhcnJhbCA9IHRydWU7CiAgdFsiQ2hhcmlzIFNJTCJdID0gdHJ1ZTsKICB0LkNoZWx0ZW5oYW0gPSB0cnVlOwogIHRbIkNob2xsYSBTbGFiIl0gPSB0cnVlOwogIHQuQ2xhcmVuZG9uID0gdHJ1ZTsKICB0LkNsZWFyZmFjZSA9IHRydWU7CiAgdC5Db2NoaW4gPSB0cnVlOwogIHQuQ29sb25uYSA9IHRydWU7CiAgdFsiQ29tcHV0ZXIgTW9kZXJuIl0gPSB0cnVlOwogIHRbIkNvbmNyZXRlIFJvbWFuIl0gPSB0cnVlOwogIHQuQ29uc3RhbnRpYSA9IHRydWU7CiAgdFsiQ29vcGVyIEJsYWNrIl0gPSB0cnVlOwogIHQuQ29yb25hID0gdHJ1ZTsKICB0LkVjb3R5cGUgPSB0cnVlOwogIHQuRWd5cHRpZW5uZSA9IHRydWU7CiAgdC5FbGVwaGFudCA9IHRydWU7CiAgdC5FeGNlbHNpb3IgPSB0cnVlOwogIHQuRmFpcmZpZWxkID0gdHJ1ZTsKICB0WyJGRiBTY2FsYSJdID0gdHJ1ZTsKICB0LkZvbGthcmQgPSB0cnVlOwogIHQuRm9vdGxpZ2h0ID0gdHJ1ZTsKICB0LkZyZWVTZXJpZiA9IHRydWU7CiAgdFsiRnJpeiBRdWFkcmF0YSJdID0gdHJ1ZTsKICB0LkdhcmFtb25kID0gdHJ1ZTsKICB0LkdlbnRpdW0gPSB0cnVlOwogIHQuR2VvcmdpYSA9IHRydWU7CiAgdC5HbG91Y2VzdGVyID0gdHJ1ZTsKICB0WyJHb3VkeSBPbGQgU3R5bGUiXSA9IHRydWU7CiAgdFsiR291ZHkgU2Nob29sYm9vayJdID0gdHJ1ZTsKICB0WyJHb3VkeSBQcm8gRm9udCJdID0gdHJ1ZTsKICB0LkdyYW5qb24gPSB0cnVlOwogIHRbIkd1YXJkaWFuIEVneXB0aWFuIl0gPSB0cnVlOwogIHQuSGVhdGhlciA9IHRydWU7CiAgdC5IZXJjdWxlcyA9IHRydWU7CiAgdFsiSGlnaCBUb3dlciBUZXh0Il0gPSB0cnVlOwogIHQuSGlyb3NoaWdlID0gdHJ1ZTsKICB0WyJIb2VmbGVyIFRleHQiXSA9IHRydWU7CiAgdFsiSHVtYW5hIFNlcmlmIl0gPSB0cnVlOwogIHQuSW1wcmludCA9IHRydWU7CiAgdFsiSW9uaWMgTm8uIDUiXSA9IHRydWU7CiAgdC5KYW5zb24gPSB0cnVlOwogIHQuSm9hbm5hID0gdHJ1ZTsKICB0LktvcmlubmEgPSB0cnVlOwogIHQuTGV4aWNvbiA9IHRydWU7CiAgdC5MaWJlcmF0aW9uU2VyaWYgPSB0cnVlOwogIHRbIkxpYmVyYXRpb24gU2VyaWYiXSA9IHRydWU7CiAgdFsiTGludXggTGliZXJ0aW5lIl0gPSB0cnVlOwogIHQuTGl0ZXJhdHVybmF5YSA9IHRydWU7CiAgdC5MdWNpZGEgPSB0cnVlOwogIHRbIkx1Y2lkYSBCcmlnaHQiXSA9IHRydWU7CiAgdC5NZWxpb3IgPSB0cnVlOwogIHQuTWVtcGhpcyA9IHRydWU7CiAgdC5NaWxsZXIgPSB0cnVlOwogIHQuTWluaW9uID0gdHJ1ZTsKICB0Lk1vZGVybiA9IHRydWU7CiAgdFsiTW9uYSBMaXNhIl0gPSB0cnVlOwogIHRbIk1ycyBFYXZlcyJdID0gdHJ1ZTsKICB0WyJNUyBTZXJpZiJdID0gdHJ1ZTsKICB0WyJNdXNlbyBTbGFiIl0gPSB0cnVlOwogIHRbIk5ldyBZb3JrIl0gPSB0cnVlOwogIHRbIk5pbWJ1cyBSb21hbiJdID0gdHJ1ZTsKICB0WyJOUFMgUmF3bGluc29uIFJvYWR3YXkiXSA9IHRydWU7CiAgdC5OdXB0aWFsU2NyaXB0ID0gdHJ1ZTsKICB0LlBhbGF0aW5vID0gdHJ1ZTsKICB0LlBlcnBldHVhID0gdHJ1ZTsKICB0LlBsYW50aW4gPSB0cnVlOwogIHRbIlBsYW50aW4gU2Nob29sYm9vayJdID0gdHJ1ZTsKICB0LlBsYXliaWxsID0gdHJ1ZTsKICB0WyJQb29yIFJpY2hhcmQiXSA9IHRydWU7CiAgdFsiUmF3bGluc29uIFJvYWR3YXkiXSA9IHRydWU7CiAgdC5SZW5hdWx0ID0gdHJ1ZTsKICB0LlJlcXVpZW0gPSB0cnVlOwogIHQuUm9ja3dlbGwgPSB0cnVlOwogIHQuUm9tYW4gPSB0cnVlOwogIHRbIlJvdGlzIFNlcmlmIl0gPSB0cnVlOwogIHQuU2Fib24gPSB0cnVlOwogIHQuU2NhbGEgPSB0cnVlOwogIHQuU2VhZ3VsbCA9IHRydWU7CiAgdC5TaXN0aW5hID0gdHJ1ZTsKICB0LlNvdXZlbmlyID0gdHJ1ZTsKICB0LlNUSVggPSB0cnVlOwogIHRbIlN0b25lIEluZm9ybWFsIl0gPSB0cnVlOwogIHRbIlN0b25lIFNlcmlmIl0gPSB0cnVlOwogIHQuU3lsZmFlbiA9IHRydWU7CiAgdC5UaW1lcyA9IHRydWU7CiAgdC5UcmFqYW4gPSB0cnVlOwogIHRbIlRyaW5pdMOpIl0gPSB0cnVlOwogIHRbIlRydW1wIE1lZGlhZXZhbCJdID0gdHJ1ZTsKICB0LlV0b3BpYSA9IHRydWU7CiAgdFsiVmFsZSBUeXBlIl0gPSB0cnVlOwogIHRbIkJpdHN0cmVhbSBWZXJhIl0gPSB0cnVlOwogIHRbIlZlcmEgU2VyaWYiXSA9IHRydWU7CiAgdC5WZXJzYWlsbGVzID0gdHJ1ZTsKICB0LldhbnRlZCA9IHRydWU7CiAgdC5XZWlzcyA9IHRydWU7CiAgdFsiV2lkZSBMYXRpbiJdID0gdHJ1ZTsKICB0LldpbmRzb3IgPSB0cnVlOwogIHQuWElUUyA9IHRydWU7Cn0pOwpjb25zdCBnZXRTeW1ib2xzRm9udHMgPSBnZXRMb29rdXBUYWJsZUZhY3RvcnkoZnVuY3Rpb24gKHQpIHsKICB0LkRpbmdiYXRzID0gdHJ1ZTsKICB0LlN5bWJvbCA9IHRydWU7CiAgdC5aYXBmRGluZ2JhdHMgPSB0cnVlOwogIHQuV2luZ2RpbmdzID0gdHJ1ZTsKICB0WyJXaW5nZGluZ3MtQm9sZCJdID0gdHJ1ZTsKICB0WyJXaW5nZGluZ3MtUmVndWxhciJdID0gdHJ1ZTsKfSk7CmNvbnN0IGdldEdseXBoTWFwRm9yU3RhbmRhcmRGb250cyA9IGdldExvb2t1cFRhYmxlRmFjdG9yeShmdW5jdGlvbiAodCkgewogIHRbMl0gPSAxMDsKICB0WzNdID0gMzI7CiAgdFs0XSA9IDMzOwogIHRbNV0gPSAzNDsKICB0WzZdID0gMzU7CiAgdFs3XSA9IDM2OwogIHRbOF0gPSAzNzsKICB0WzldID0gMzg7CiAgdFsxMF0gPSAzOTsKICB0WzExXSA9IDQwOwogIHRbMTJdID0gNDE7CiAgdFsxM10gPSA0MjsKICB0WzE0XSA9IDQzOwogIHRbMTVdID0gNDQ7CiAgdFsxNl0gPSA0NTsKICB0WzE3XSA9IDQ2OwogIHRbMThdID0gNDc7CiAgdFsxOV0gPSA0ODsKICB0WzIwXSA9IDQ5OwogIHRbMjFdID0gNTA7CiAgdFsyMl0gPSA1MTsKICB0WzIzXSA9IDUyOwogIHRbMjRdID0gNTM7CiAgdFsyNV0gPSA1NDsKICB0WzI2XSA9IDU1OwogIHRbMjddID0gNTY7CiAgdFsyOF0gPSA1NzsKICB0WzI5XSA9IDU4OwogIHRbMzBdID0gODk0OwogIHRbMzFdID0gNjA7CiAgdFszMl0gPSA2MTsKICB0WzMzXSA9IDYyOwogIHRbMzRdID0gNjM7CiAgdFszNV0gPSA2NDsKICB0WzM2XSA9IDY1OwogIHRbMzddID0gNjY7CiAgdFszOF0gPSA2NzsKICB0WzM5XSA9IDY4OwogIHRbNDBdID0gNjk7CiAgdFs0MV0gPSA3MDsKICB0WzQyXSA9IDcxOwogIHRbNDNdID0gNzI7CiAgdFs0NF0gPSA3MzsKICB0WzQ1XSA9IDc0OwogIHRbNDZdID0gNzU7CiAgdFs0N10gPSA3NjsKICB0WzQ4XSA9IDc3OwogIHRbNDldID0gNzg7CiAgdFs1MF0gPSA3OTsKICB0WzUxXSA9IDgwOwogIHRbNTJdID0gODE7CiAgdFs1M10gPSA4MjsKICB0WzU0XSA9IDgzOwogIHRbNTVdID0gODQ7CiAgdFs1Nl0gPSA4NTsKICB0WzU3XSA9IDg2OwogIHRbNThdID0gODc7CiAgdFs1OV0gPSA4ODsKICB0WzYwXSA9IDg5OwogIHRbNjFdID0gOTA7CiAgdFs2Ml0gPSA5MTsKICB0WzYzXSA9IDkyOwogIHRbNjRdID0gOTM7CiAgdFs2NV0gPSA5NDsKICB0WzY2XSA9IDk1OwogIHRbNjddID0gOTY7CiAgdFs2OF0gPSA5NzsKICB0WzY5XSA9IDk4OwogIHRbNzBdID0gOTk7CiAgdFs3MV0gPSAxMDA7CiAgdFs3Ml0gPSAxMDE7CiAgdFs3M10gPSAxMDI7CiAgdFs3NF0gPSAxMDM7CiAgdFs3NV0gPSAxMDQ7CiAgdFs3Nl0gPSAxMDU7CiAgdFs3N10gPSAxMDY7CiAgdFs3OF0gPSAxMDc7CiAgdFs3OV0gPSAxMDg7CiAgdFs4MF0gPSAxMDk7CiAgdFs4MV0gPSAxMTA7CiAgdFs4Ml0gPSAxMTE7CiAgdFs4M10gPSAxMTI7CiAgdFs4NF0gPSAxMTM7CiAgdFs4NV0gPSAxMTQ7CiAgdFs4Nl0gPSAxMTU7CiAgdFs4N10gPSAxMTY7CiAgdFs4OF0gPSAxMTc7CiAgdFs4OV0gPSAxMTg7CiAgdFs5MF0gPSAxMTk7CiAgdFs5MV0gPSAxMjA7CiAgdFs5Ml0gPSAxMjE7CiAgdFs5M10gPSAxMjI7CiAgdFs5NF0gPSAxMjM7CiAgdFs5NV0gPSAxMjQ7CiAgdFs5Nl0gPSAxMjU7CiAgdFs5N10gPSAxMjY7CiAgdFs5OF0gPSAxOTY7CiAgdFs5OV0gPSAxOTc7CiAgdFsxMDBdID0gMTk5OwogIHRbMTAxXSA9IDIwMTsKICB0WzEwMl0gPSAyMDk7CiAgdFsxMDNdID0gMjE0OwogIHRbMTA0XSA9IDIyMDsKICB0WzEwNV0gPSAyMjU7CiAgdFsxMDZdID0gMjI0OwogIHRbMTA3XSA9IDIyNjsKICB0WzEwOF0gPSAyMjg7CiAgdFsxMDldID0gMjI3OwogIHRbMTEwXSA9IDIyOTsKICB0WzExMV0gPSAyMzE7CiAgdFsxMTJdID0gMjMzOwogIHRbMTEzXSA9IDIzMjsKICB0WzExNF0gPSAyMzQ7CiAgdFsxMTVdID0gMjM1OwogIHRbMTE2XSA9IDIzNzsKICB0WzExN10gPSAyMzY7CiAgdFsxMThdID0gMjM4OwogIHRbMTE5XSA9IDIzOTsKICB0WzEyMF0gPSAyNDE7CiAgdFsxMjFdID0gMjQzOwogIHRbMTIyXSA9IDI0MjsKICB0WzEyM10gPSAyNDQ7CiAgdFsxMjRdID0gMjQ2OwogIHRbMTI1XSA9IDI0NTsKICB0WzEyNl0gPSAyNTA7CiAgdFsxMjddID0gMjQ5OwogIHRbMTI4XSA9IDI1MTsKICB0WzEyOV0gPSAyNTI7CiAgdFsxMzBdID0gODIyNDsKICB0WzEzMV0gPSAxNzY7CiAgdFsxMzJdID0gMTYyOwogIHRbMTMzXSA9IDE2MzsKICB0WzEzNF0gPSAxNjc7CiAgdFsxMzVdID0gODIyNjsKICB0WzEzNl0gPSAxODI7CiAgdFsxMzddID0gMjIzOwogIHRbMTM4XSA9IDE3NDsKICB0WzEzOV0gPSAxNjk7CiAgdFsxNDBdID0gODQ4MjsKICB0WzE0MV0gPSAxODA7CiAgdFsxNDJdID0gMTY4OwogIHRbMTQzXSA9IDg4MDA7CiAgdFsxNDRdID0gMTk4OwogIHRbMTQ1XSA9IDIxNjsKICB0WzE0Nl0gPSA4NzM0OwogIHRbMTQ3XSA9IDE3NzsKICB0WzE0OF0gPSA4ODA0OwogIHRbMTQ5XSA9IDg4MDU7CiAgdFsxNTBdID0gMTY1OwogIHRbMTUxXSA9IDE4MTsKICB0WzE1Ml0gPSA4NzA2OwogIHRbMTUzXSA9IDg3MjE7CiAgdFsxNTRdID0gODcxOTsKICB0WzE1Nl0gPSA4NzQ3OwogIHRbMTU3XSA9IDE3MDsKICB0WzE1OF0gPSAxODY7CiAgdFsxNTldID0gODQ4NjsKICB0WzE2MF0gPSAyMzA7CiAgdFsxNjFdID0gMjQ4OwogIHRbMTYyXSA9IDE5MTsKICB0WzE2M10gPSAxNjE7CiAgdFsxNjRdID0gMTcyOwogIHRbMTY1XSA9IDg3MzA7CiAgdFsxNjZdID0gNDAyOwogIHRbMTY3XSA9IDg3NzY7CiAgdFsxNjhdID0gODcxMDsKICB0WzE2OV0gPSAxNzE7CiAgdFsxNzBdID0gMTg3OwogIHRbMTcxXSA9IDgyMzA7CiAgdFsxNzldID0gODIyMDsKICB0WzE4MF0gPSA4MjIxOwogIHRbMTgxXSA9IDgyMTY7CiAgdFsxODJdID0gODIxNzsKICB0WzIwMF0gPSAxOTM7CiAgdFsyMDNdID0gMjA1OwogIHRbMjA3XSA9IDIxMTsKICB0WzIxMF0gPSAyMTg7CiAgdFsyMjNdID0gNzExOwogIHRbMjI0XSA9IDMyMTsKICB0WzIyNV0gPSAzMjI7CiAgdFsyMjZdID0gMzUyOwogIHRbMjI3XSA9IDM1MzsKICB0WzIyOF0gPSAzODE7CiAgdFsyMjldID0gMzgyOwogIHRbMjMzXSA9IDIyMTsKICB0WzIzNF0gPSAyNTM7CiAgdFsyNTJdID0gMjYzOwogIHRbMjUzXSA9IDI2ODsKICB0WzI1NF0gPSAyNjk7CiAgdFsyNThdID0gMjU4OwogIHRbMjYwXSA9IDI2MDsKICB0WzI2MV0gPSAyNjE7CiAgdFsyNjVdID0gMjgwOwogIHRbMjY2XSA9IDI4MTsKICB0WzI2N10gPSAyODI7CiAgdFsyNjhdID0gMjgzOwogIHRbMjY5XSA9IDMxMzsKICB0WzI3NV0gPSAzMjM7CiAgdFsyNzZdID0gMzI0OwogIHRbMjc4XSA9IDMyODsKICB0WzI4M10gPSAzNDQ7CiAgdFsyODRdID0gMzQ1OwogIHRbMjg1XSA9IDM0NjsKICB0WzI4Nl0gPSAzNDc7CiAgdFsyOTJdID0gMzY3OwogIHRbMjk1XSA9IDM3NzsKICB0WzI5Nl0gPSAzNzg7CiAgdFsyOThdID0gMzgwOwogIHRbMzA1XSA9IDk2MzsKICB0WzMwNl0gPSA5NjQ7CiAgdFszMDddID0gOTY2OwogIHRbMzA4XSA9IDgyMTU7CiAgdFszMDldID0gODI1MjsKICB0WzMxMF0gPSA4MzE5OwogIHRbMzExXSA9IDgzNTk7CiAgdFszMTJdID0gODU5MjsKICB0WzMxM10gPSA4NTkzOwogIHRbMzM3XSA9IDk1NTI7CiAgdFs0OTNdID0gMTAzOTsKICB0WzQ5NF0gPSAxMDQwOwogIHRbNTcwXSA9IDEwNDA7CiAgdFs1NzFdID0gMTA0MTsKICB0WzU3Ml0gPSAxMDQyOwogIHRbNTczXSA9IDEwNDM7CiAgdFs1NzRdID0gMTA0NDsKICB0WzU3NV0gPSAxMDQ1OwogIHRbNTc2XSA9IDEwNDY7CiAgdFs1NzddID0gMTA0NzsKICB0WzU3OF0gPSAxMDQ4OwogIHRbNTc5XSA9IDEwNDk7CiAgdFs1ODBdID0gMTA1MDsKICB0WzU4MV0gPSAxMDUxOwogIHRbNTgyXSA9IDEwNTI7CiAgdFs1ODNdID0gMTA1MzsKICB0WzU4NF0gPSAxMDU0OwogIHRbNTg1XSA9IDEwNTU7CiAgdFs1ODZdID0gMTA1NjsKICB0WzU4N10gPSAxMDU3OwogIHRbNTg4XSA9IDEwNTg7CiAgdFs1ODldID0gMTA1OTsKICB0WzU5MF0gPSAxMDYwOwogIHRbNTkxXSA9IDEwNjE7CiAgdFs1OTJdID0gMTA2MjsKICB0WzU5M10gPSAxMDYzOwogIHRbNTk0XSA9IDEwNjQ7CiAgdFs1OTVdID0gMTA2NTsKICB0WzU5Nl0gPSAxMDY2OwogIHRbNTk3XSA9IDEwNjc7CiAgdFs1OThdID0gMTA2ODsKICB0WzU5OV0gPSAxMDY5OwogIHRbNjAwXSA9IDEwNzA7CiAgdFs2NzJdID0gMTQ4ODsKICB0WzY3M10gPSAxNDg5OwogIHRbNjc0XSA9IDE0OTA7CiAgdFs2NzVdID0gMTQ5MTsKICB0WzY3Nl0gPSAxNDkyOwogIHRbNjc3XSA9IDE0OTM7CiAgdFs2NzhdID0gMTQ5NDsKICB0WzY3OV0gPSAxNDk1OwogIHRbNjgwXSA9IDE0OTY7CiAgdFs2ODFdID0gMTQ5NzsKICB0WzY4Ml0gPSAxNDk4OwogIHRbNjgzXSA9IDE0OTk7CiAgdFs2ODRdID0gMTUwMDsKICB0WzY4NV0gPSAxNTAxOwogIHRbNjg2XSA9IDE1MDI7CiAgdFs2ODddID0gMTUwMzsKICB0WzY4OF0gPSAxNTA0OwogIHRbNjg5XSA9IDE1MDU7CiAgdFs2OTBdID0gMTUwNjsKICB0WzY5MV0gPSAxNTA3OwogIHRbNjkyXSA9IDE1MDg7CiAgdFs2OTNdID0gMTUwOTsKICB0WzY5NF0gPSAxNTEwOwogIHRbNjk1XSA9IDE1MTE7CiAgdFs2OTZdID0gMTUxMjsKICB0WzY5N10gPSAxNTEzOwogIHRbNjk4XSA9IDE1MTQ7CiAgdFs3MDVdID0gMTUyNDsKICB0WzcwNl0gPSA4MzYyOwogIHRbNzEwXSA9IDY0Mjg4OwogIHRbNzExXSA9IDY0Mjk4OwogIHRbNzU5XSA9IDE2MTc7CiAgdFs3NjFdID0gMTc3NjsKICB0Wzc2M10gPSAxNzc4OwogIHRbNzc1XSA9IDE2NTI7CiAgdFs3NzddID0gMTc2NDsKICB0Wzc3OF0gPSAxNzgwOwogIHRbNzc5XSA9IDE3ODE7CiAgdFs3ODBdID0gMTc4MjsKICB0Wzc4Ml0gPSA3NzE7CiAgdFs3ODNdID0gNjQ3MjY7CiAgdFs3ODZdID0gODM2MzsKICB0Wzc4OF0gPSA4NTMyOwogIHRbNzkwXSA9IDc2ODsKICB0Wzc5MV0gPSA3Njk7CiAgdFs3OTJdID0gNzY4OwogIHRbNzk1XSA9IDgwMzsKICB0Wzc5N10gPSA2NDMzNjsKICB0Wzc5OF0gPSA2NDMzNzsKICB0Wzc5OV0gPSA2NDM0MjsKICB0WzgwMF0gPSA2NDM0MzsKICB0WzgwMV0gPSA2NDM0NDsKICB0WzgwMl0gPSA2NDM0NTsKICB0WzgwM10gPSA2NDM2MjsKICB0WzgwNF0gPSA2NDM2MzsKICB0WzgwNV0gPSA2NDM2NDsKICB0WzI0MjRdID0gNzgyMTsKICB0WzI0MjVdID0gNzgyMjsKICB0WzI0MjZdID0gNzgyMzsKICB0WzI0MjddID0gNzgyNDsKICB0WzI0MjhdID0gNzgyNTsKICB0WzI0MjldID0gNzgyNjsKICB0WzI0MzBdID0gNzgyNzsKICB0WzI0MzNdID0gNzY4MjsKICB0WzI2NzhdID0gODA0NTsKICB0WzI2NzldID0gODA0NjsKICB0WzI4MzBdID0gMTU1MjsKICB0WzI4MzhdID0gNjg2OwogIHRbMjg0MF0gPSA3NTE7CiAgdFsyODQyXSA9IDc1MzsKICB0WzI4NDNdID0gNzU0OwogIHRbMjg0NF0gPSA3NTU7CiAgdFsyODQ2XSA9IDc1NzsKICB0WzI4NTZdID0gNzY3OwogIHRbMjg1N10gPSA4NDg7CiAgdFsyODU4XSA9IDg0OTsKICB0WzI4NjJdID0gODUzOwogIHRbMjg2M10gPSA4NTQ7CiAgdFsyODY0XSA9IDg1NTsKICB0WzI4NjVdID0gODYxOwogIHRbMjg2Nl0gPSA4NjI7CiAgdFsyOTA2XSA9IDc0NjA7CiAgdFsyOTA4XSA9IDc0NjI7CiAgdFsyOTA5XSA9IDc0NjM7CiAgdFsyOTEwXSA9IDc0NjQ7CiAgdFsyOTEyXSA9IDc0NjY7CiAgdFsyOTEzXSA9IDc0Njc7CiAgdFsyOTE0XSA9IDc0Njg7CiAgdFsyOTE2XSA9IDc0NzA7CiAgdFsyOTE3XSA9IDc0NzE7CiAgdFsyOTE4XSA9IDc0NzI7CiAgdFsyOTIwXSA9IDc0NzQ7CiAgdFsyOTIxXSA9IDc0NzU7CiAgdFsyOTIyXSA9IDc0NzY7CiAgdFsyOTI0XSA9IDc0Nzg7CiAgdFsyOTI1XSA9IDc0Nzk7CiAgdFsyOTI2XSA9IDc0ODA7CiAgdFsyOTI4XSA9IDc0ODI7CiAgdFsyOTI5XSA9IDc0ODM7CiAgdFsyOTMwXSA9IDc0ODQ7CiAgdFsyOTMyXSA9IDc0ODY7CiAgdFsyOTMzXSA9IDc0ODc7CiAgdFsyOTM0XSA9IDc0ODg7CiAgdFsyOTM2XSA9IDc0OTA7CiAgdFsyOTM3XSA9IDc0OTE7CiAgdFsyOTM4XSA9IDc0OTI7CiAgdFsyOTQwXSA9IDc0OTQ7CiAgdFsyOTQxXSA9IDc0OTU7CiAgdFsyOTQyXSA9IDc0OTY7CiAgdFsyOTQ0XSA9IDc0OTg7CiAgdFsyOTQ2XSA9IDc1MDA7CiAgdFsyOTQ4XSA9IDc1MDI7CiAgdFsyOTUwXSA9IDc1MDQ7CiAgdFsyOTUxXSA9IDc1MDU7CiAgdFsyOTUyXSA9IDc1MDY7CiAgdFsyOTU0XSA9IDc1MDg7CiAgdFsyOTU1XSA9IDc1MDk7CiAgdFsyOTU2XSA9IDc1MTA7CiAgdFsyOTU4XSA9IDc1MTI7CiAgdFsyOTU5XSA9IDc1MTM7CiAgdFsyOTYwXSA9IDc1MTQ7CiAgdFsyOTYyXSA9IDc1MTY7CiAgdFsyOTYzXSA9IDc1MTc7CiAgdFsyOTY0XSA9IDc1MTg7CiAgdFsyOTY2XSA9IDc1MjA7CiAgdFsyOTY3XSA9IDc1MjE7CiAgdFsyOTY4XSA9IDc1MjI7CiAgdFsyOTcwXSA9IDc1MjQ7CiAgdFsyOTcxXSA9IDc1MjU7CiAgdFsyOTcyXSA9IDc1MjY7CiAgdFsyOTc0XSA9IDc1Mjg7CiAgdFsyOTc1XSA9IDc1Mjk7CiAgdFsyOTc2XSA9IDc1MzA7CiAgdFsyOTc4XSA9IDE1Mzc7CiAgdFsyOTc5XSA9IDE1Mzg7CiAgdFsyOTgwXSA9IDE1Mzk7CiAgdFsyOTgyXSA9IDE1NDk7CiAgdFsyOTgzXSA9IDE1NTE7CiAgdFsyOTg0XSA9IDE1NTI7CiAgdFsyOTg2XSA9IDE1NTQ7CiAgdFsyOTg3XSA9IDE1NTU7CiAgdFsyOTg4XSA9IDE1NTY7CiAgdFsyOTkwXSA9IDE2MjM7CiAgdFsyOTkxXSA9IDE2MjQ7CiAgdFsyOTk1XSA9IDE3NzU7CiAgdFsyOTk5XSA9IDE3OTE7CiAgdFszMDAyXSA9IDY0MjkwOwogIHRbMzAwM10gPSA2NDI5MTsKICB0WzMwMDRdID0gNjQyOTI7CiAgdFszMDA2XSA9IDY0Mjk0OwogIHRbMzAwN10gPSA2NDI5NTsKICB0WzMwMDhdID0gNjQyOTY7CiAgdFszMDExXSA9IDE5MDA7CiAgdFszMDE0XSA9IDgyMjM7CiAgdFszMDE1XSA9IDgyNDQ7CiAgdFszMDE3XSA9IDc1MzI7CiAgdFszMDE4XSA9IDc1MzM7CiAgdFszMDE5XSA9IDc1MzQ7CiAgdFszMDc1XSA9IDc1OTA7CiAgdFszMDc2XSA9IDc1OTE7CiAgdFszMDc5XSA9IDc1OTQ7CiAgdFszMDgwXSA9IDc1OTU7CiAgdFszMDgzXSA9IDc1OTg7CiAgdFszMDg0XSA9IDc1OTk7CiAgdFszMDg3XSA9IDc2MDI7CiAgdFszMDg4XSA9IDc2MDM7CiAgdFszMDkxXSA9IDc2MDY7CiAgdFszMDkyXSA9IDc2MDc7CiAgdFszMDk1XSA9IDc2MTA7CiAgdFszMDk2XSA9IDc2MTE7CiAgdFszMDk5XSA9IDc2MTQ7CiAgdFszMTAwXSA9IDc2MTU7CiAgdFszMTAzXSA9IDc2MTg7CiAgdFszMTA0XSA9IDc2MTk7CiAgdFszMTA3XSA9IDgzMzc7CiAgdFszMTA4XSA9IDgzMzg7CiAgdFszMTE2XSA9IDE4ODQ7CiAgdFszMTE5XSA9IDE4ODU7CiAgdFszMTIwXSA9IDE4ODU7CiAgdFszMTIzXSA9IDE4ODY7CiAgdFszMTI0XSA9IDE4ODY7CiAgdFszMTI3XSA9IDE4ODc7CiAgdFszMTI4XSA9IDE4ODc7CiAgdFszMTMxXSA9IDE4ODg7CiAgdFszMTMyXSA9IDE4ODg7CiAgdFszMTM1XSA9IDE4ODk7CiAgdFszMTM2XSA9IDE4ODk7CiAgdFszMTM5XSA9IDE4OTA7CiAgdFszMTQwXSA9IDE4OTA7CiAgdFszMTQzXSA9IDE4OTE7CiAgdFszMTQ0XSA9IDE4OTE7CiAgdFszMTQ3XSA9IDE4OTI7CiAgdFszMTQ4XSA9IDE4OTI7CiAgdFszMTUzXSA9IDU4MDsKICB0WzMxNTRdID0gNTgxOwogIHRbMzE1N10gPSA1ODQ7CiAgdFszMTU4XSA9IDU4NTsKICB0WzMxNjFdID0gNTg4OwogIHRbMzE2Ml0gPSA1ODk7CiAgdFszMTY1XSA9IDg5MTsKICB0WzMxNjZdID0gODkyOwogIHRbMzE2OV0gPSAxMjc0OwogIHRbMzE3MF0gPSAxMjc1OwogIHRbMzE3M10gPSAxMjc4OwogIHRbMzE3NF0gPSAxMjc5OwogIHRbMzE4MV0gPSA3NjIyOwogIHRbMzE4Ml0gPSA3NjIzOwogIHRbMzI4Ml0gPSAxMTc5OTsKICB0WzMzMTZdID0gNTc4OwogIHRbMzM3OV0gPSA0Mjc4NTsKICB0WzMzOTNdID0gMTE1OTsKICB0WzM0MTZdID0gODM3NzsKfSk7CmNvbnN0IGdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQXJpYWxCbGFjayA9IGdldExvb2t1cFRhYmxlRmFjdG9yeShmdW5jdGlvbiAodCkgewogIHRbMjI3XSA9IDMyMjsKICB0WzI2NF0gPSAyNjE7CiAgdFsyOTFdID0gMzQ2Owp9KTsKY29uc3QgZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JDYWxpYnJpID0gZ2V0TG9va3VwVGFibGVGYWN0b3J5KGZ1bmN0aW9uICh0KSB7CiAgdFsxXSA9IDMyOwogIHRbNF0gPSA2NTsKICB0WzVdID0gMTkyOwogIHRbNl0gPSAxOTM7CiAgdFs5XSA9IDE5NjsKICB0WzE3XSA9IDY2OwogIHRbMThdID0gNjc7CiAgdFsyMV0gPSAyNjg7CiAgdFsyNF0gPSA2ODsKICB0WzI4XSA9IDY5OwogIHRbMjldID0gMjAwOwogIHRbMzBdID0gMjAxOwogIHRbMzJdID0gMjgyOwogIHRbMzhdID0gNzA7CiAgdFszOV0gPSA3MTsKICB0WzQ0XSA9IDcyOwogIHRbNDddID0gNzM7CiAgdFs0OF0gPSAyMDQ7CiAgdFs0OV0gPSAyMDU7CiAgdFs1OF0gPSA3NDsKICB0WzYwXSA9IDc1OwogIHRbNjJdID0gNzY7CiAgdFs2OF0gPSA3NzsKICB0WzY5XSA9IDc4OwogIHRbNzVdID0gNzk7CiAgdFs3Nl0gPSAyMTA7CiAgdFs4MF0gPSAyMTQ7CiAgdFs4N10gPSA4MDsKICB0Wzg5XSA9IDgxOwogIHRbOTBdID0gODI7CiAgdFs5Ml0gPSAzNDQ7CiAgdFs5NF0gPSA4MzsKICB0Wzk3XSA9IDM1MjsKICB0WzEwMF0gPSA4NDsKICB0WzEwNF0gPSA4NTsKICB0WzEwOV0gPSAyMjA7CiAgdFsxMTVdID0gODY7CiAgdFsxMTZdID0gODc7CiAgdFsxMjFdID0gODg7CiAgdFsxMjJdID0gODk7CiAgdFsxMjRdID0gMjIxOwogIHRbMTI3XSA9IDkwOwogIHRbMTI5XSA9IDM4MTsKICB0WzI1OF0gPSA5NzsKICB0WzI1OV0gPSAyMjQ7CiAgdFsyNjBdID0gMjI1OwogIHRbMjYzXSA9IDIyODsKICB0WzI2OF0gPSAyNjE7CiAgdFsyNzFdID0gOTg7CiAgdFsyNzJdID0gOTk7CiAgdFsyNzNdID0gMjYzOwogIHRbMjc1XSA9IDI2OTsKICB0WzI4Ml0gPSAxMDA7CiAgdFsyODZdID0gMTAxOwogIHRbMjg3XSA9IDIzMjsKICB0WzI4OF0gPSAyMzM7CiAgdFsyOTBdID0gMjgzOwogIHRbMjk1XSA9IDI4MTsKICB0WzI5Nl0gPSAxMDI7CiAgdFszMzZdID0gMTAzOwogIHRbMzQ2XSA9IDEwNDsKICB0WzM0OV0gPSAxMDU7CiAgdFszNTBdID0gMjM2OwogIHRbMzUxXSA9IDIzNzsKICB0WzM2MV0gPSAxMDY7CiAgdFszNjRdID0gMTA3OwogIHRbMzY3XSA9IDEwODsKICB0WzM3MV0gPSAzMjI7CiAgdFszNzNdID0gMTA5OwogIHRbMzc0XSA9IDExMDsKICB0WzM4MV0gPSAxMTE7CiAgdFszODJdID0gMjQyOwogIHRbMzgzXSA9IDI0MzsKICB0WzM4Nl0gPSAyNDY7CiAgdFszOTNdID0gMTEyOwogIHRbMzk1XSA9IDExMzsKICB0WzM5Nl0gPSAxMTQ7CiAgdFszOThdID0gMzQ1OwogIHRbNDAwXSA9IDExNTsKICB0WzQwMV0gPSAzNDc7CiAgdFs0MDNdID0gMzUzOwogIHRbNDEwXSA9IDExNjsKICB0WzQzN10gPSAxMTc7CiAgdFs0NDJdID0gMjUyOwogIHRbNDQ4XSA9IDExODsKICB0WzQ0OV0gPSAxMTk7CiAgdFs0NTRdID0gMTIwOwogIHRbNDU1XSA9IDEyMTsKICB0WzQ1N10gPSAyNTM7CiAgdFs0NjBdID0gMTIyOwogIHRbNDYyXSA9IDM4MjsKICB0WzQ2M10gPSAzODA7CiAgdFs4NTNdID0gNDQ7CiAgdFs4NTVdID0gNTg7CiAgdFs4NTZdID0gNDY7CiAgdFs4NzZdID0gNDc7CiAgdFs4NzhdID0gNDU7CiAgdFs4ODJdID0gNDU7CiAgdFs4OTRdID0gNDA7CiAgdFs4OTVdID0gNDE7CiAgdFs4OTZdID0gOTE7CiAgdFs4OTddID0gOTM7CiAgdFs5MjNdID0gNjQ7CiAgdFs5NDBdID0gMTYzOwogIHRbMTAwNF0gPSA0ODsKICB0WzEwMDVdID0gNDk7CiAgdFsxMDA2XSA9IDUwOwogIHRbMTAwN10gPSA1MTsKICB0WzEwMDhdID0gNTI7CiAgdFsxMDA5XSA9IDUzOwogIHRbMTAxMF0gPSA1NDsKICB0WzEwMTFdID0gNTU7CiAgdFsxMDEyXSA9IDU2OwogIHRbMTAxM10gPSA1NzsKICB0WzEwODFdID0gMzc7CiAgdFsxMDg1XSA9IDQzOwogIHRbMTA4Nl0gPSA0NTsKfSk7CmZ1bmN0aW9uIGdldFN0YW5kYXJkRm9udE5hbWUobmFtZSkgewogIGNvbnN0IGZvbnROYW1lID0gbm9ybWFsaXplRm9udE5hbWUobmFtZSk7CiAgY29uc3Qgc3RkRm9udE1hcCA9IGdldFN0ZEZvbnRNYXAoKTsKICByZXR1cm4gc3RkRm9udE1hcFtmb250TmFtZV07Cn0KZnVuY3Rpb24gaXNLbm93bkZvbnROYW1lKG5hbWUpIHsKICBjb25zdCBmb250TmFtZSA9IG5vcm1hbGl6ZUZvbnROYW1lKG5hbWUpOwogIHJldHVybiAhIShnZXRTdGRGb250TWFwKClbZm9udE5hbWVdIHx8IGdldE5vblN0ZEZvbnRNYXAoKVtmb250TmFtZV0gfHwgZ2V0U2VyaWZGb250cygpW2ZvbnROYW1lXSB8fCBnZXRTeW1ib2xzRm9udHMoKVtmb250TmFtZV0pOwp9Cgo7Ly8gLi9zcmMvY29yZS90b191bmljb2RlX21hcC5qcwoKY2xhc3MgVG9Vbmljb2RlTWFwIHsKICBjb25zdHJ1Y3RvcihjbWFwID0gW10pIHsKICAgIHRoaXMuX21hcCA9IGNtYXA7CiAgfQogIGdldCBsZW5ndGgoKSB7CiAgICByZXR1cm4gdGhpcy5fbWFwLmxlbmd0aDsKICB9CiAgZm9yRWFjaChjYWxsYmFjaykgewogICAgZm9yIChjb25zdCBjaGFyQ29kZSBpbiB0aGlzLl9tYXApIHsKICAgICAgY2FsbGJhY2soY2hhckNvZGUsIHRoaXMuX21hcFtjaGFyQ29kZV0uY29kZVBvaW50QXQoMCkpOwogICAgfQogIH0KICBoYXMoaSkgewogICAgcmV0dXJuIHRoaXMuX21hcFtpXSAhPT0gdW5kZWZpbmVkOwogIH0KICBnZXQoaSkgewogICAgcmV0dXJuIHRoaXMuX21hcFtpXTsKICB9CiAgY2hhckNvZGVPZih2YWx1ZSkgewogICAgY29uc3QgbWFwID0gdGhpcy5fbWFwOwogICAgaWYgKG1hcC5sZW5ndGggPD0gMHgxMDAwMCkgewogICAgICByZXR1cm4gbWFwLmluZGV4T2YodmFsdWUpOwogICAgfQogICAgZm9yIChjb25zdCBjaGFyQ29kZSBpbiBtYXApIHsKICAgICAgaWYgKG1hcFtjaGFyQ29kZV0gPT09IHZhbHVlKSB7CiAgICAgICAgcmV0dXJuIGNoYXJDb2RlIHwgMDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIC0xOwogIH0KICBhbWVuZChtYXApIHsKICAgIGZvciAoY29uc3QgY2hhckNvZGUgaW4gbWFwKSB7CiAgICAgIHRoaXMuX21hcFtjaGFyQ29kZV0gPSBtYXBbY2hhckNvZGVdOwogICAgfQogIH0KfQpjbGFzcyBJZGVudGl0eVRvVW5pY29kZU1hcCB7CiAgY29uc3RydWN0b3IoZmlyc3RDaGFyLCBsYXN0Q2hhcikgewogICAgdGhpcy5maXJzdENoYXIgPSBmaXJzdENoYXI7CiAgICB0aGlzLmxhc3RDaGFyID0gbGFzdENoYXI7CiAgfQogIGdldCBsZW5ndGgoKSB7CiAgICByZXR1cm4gdGhpcy5sYXN0Q2hhciArIDEgLSB0aGlzLmZpcnN0Q2hhcjsKICB9CiAgZm9yRWFjaChjYWxsYmFjaykgewogICAgZm9yIChsZXQgaSA9IHRoaXMuZmlyc3RDaGFyLCBpaSA9IHRoaXMubGFzdENoYXI7IGkgPD0gaWk7IGkrKykgewogICAgICBjYWxsYmFjayhpLCBpKTsKICAgIH0KICB9CiAgaGFzKGkpIHsKICAgIHJldHVybiB0aGlzLmZpcnN0Q2hhciA8PSBpICYmIGkgPD0gdGhpcy5sYXN0Q2hhcjsKICB9CiAgZ2V0KGkpIHsKICAgIGlmICh0aGlzLmZpcnN0Q2hhciA8PSBpICYmIGkgPD0gdGhpcy5sYXN0Q2hhcikgewogICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShpKTsKICAgIH0KICAgIHJldHVybiB1bmRlZmluZWQ7CiAgfQogIGNoYXJDb2RlT2YodikgewogICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIodikgJiYgdiA+PSB0aGlzLmZpcnN0Q2hhciAmJiB2IDw9IHRoaXMubGFzdENoYXIgPyB2IDogLTE7CiAgfQogIGFtZW5kKG1hcCkgewogICAgdW5yZWFjaGFibGUoIlNob3VsZCBub3QgY2FsbCBhbWVuZCgpIik7CiAgfQp9Cgo7Ly8gLi9zcmMvY29yZS9jZmZfZm9udC5qcwoKCgpjbGFzcyBDRkZGb250IHsKICBjb25zdHJ1Y3RvcihmaWxlLCBwcm9wZXJ0aWVzKSB7CiAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzOwogICAgY29uc3QgcGFyc2VyID0gbmV3IENGRlBhcnNlcihmaWxlLCBwcm9wZXJ0aWVzLCBTRUFDX0FOQUxZU0lTX0VOQUJMRUQpOwogICAgdGhpcy5jZmYgPSBwYXJzZXIucGFyc2UoKTsKICAgIHRoaXMuY2ZmLmR1cGxpY2F0ZUZpcnN0R2x5cGgoKTsKICAgIGNvbnN0IGNvbXBpbGVyID0gbmV3IENGRkNvbXBpbGVyKHRoaXMuY2ZmKTsKICAgIHRoaXMuc2VhY3MgPSB0aGlzLmNmZi5zZWFjczsKICAgIHRyeSB7CiAgICAgIHRoaXMuZGF0YSA9IGNvbXBpbGVyLmNvbXBpbGUoKTsKICAgIH0gY2F0Y2ggewogICAgICB3YXJuKCJGYWlsZWQgdG8gY29tcGlsZSBmb250ICIgKyBwcm9wZXJ0aWVzLmxvYWRlZE5hbWUpOwogICAgICB0aGlzLmRhdGEgPSBmaWxlOwogICAgfQogICAgdGhpcy5fY3JlYXRlQnVpbHRJbkVuY29kaW5nKCk7CiAgfQogIGdldCBudW1HbHlwaHMoKSB7CiAgICByZXR1cm4gdGhpcy5jZmYuY2hhclN0cmluZ3MuY291bnQ7CiAgfQogIGdldENoYXJzZXQoKSB7CiAgICByZXR1cm4gdGhpcy5jZmYuY2hhcnNldC5jaGFyc2V0OwogIH0KICBnZXRHbHlwaE1hcHBpbmcoKSB7CiAgICBjb25zdCBjZmYgPSB0aGlzLmNmZjsKICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLnByb3BlcnRpZXM7CiAgICBjb25zdCB7CiAgICAgIGNpZFRvR2lkTWFwLAogICAgICBjTWFwCiAgICB9ID0gcHJvcGVydGllczsKICAgIGNvbnN0IGNoYXJzZXRzID0gY2ZmLmNoYXJzZXQuY2hhcnNldDsKICAgIGxldCBjaGFyQ29kZVRvR2x5cGhJZDsKICAgIGxldCBnbHlwaElkOwogICAgaWYgKHByb3BlcnRpZXMuY29tcG9zaXRlKSB7CiAgICAgIGxldCBpbnZDaWRUb0dpZE1hcDsKICAgICAgaWYgKGNpZFRvR2lkTWFwPy5sZW5ndGggPiAwKSB7CiAgICAgICAgaW52Q2lkVG9HaWRNYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGNpZFRvR2lkTWFwLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgICAgIGNvbnN0IGdpZCA9IGNpZFRvR2lkTWFwW2ldOwogICAgICAgICAgaWYgKGdpZCAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIGludkNpZFRvR2lkTWFwW2dpZF0gPSBpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBjaGFyQ29kZVRvR2x5cGhJZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICAgIGxldCBjaGFyQ29kZTsKICAgICAgaWYgKGNmZi5pc0NJREZvbnQpIHsKICAgICAgICBmb3IgKGdseXBoSWQgPSAwOyBnbHlwaElkIDwgY2hhcnNldHMubGVuZ3RoOyBnbHlwaElkKyspIHsKICAgICAgICAgIGNvbnN0IGNpZCA9IGNoYXJzZXRzW2dseXBoSWRdOwogICAgICAgICAgY2hhckNvZGUgPSBjTWFwLmNoYXJDb2RlT2YoY2lkKTsKICAgICAgICAgIGlmIChpbnZDaWRUb0dpZE1hcD8uW2NoYXJDb2RlXSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIGNoYXJDb2RlID0gaW52Q2lkVG9HaWRNYXBbY2hhckNvZGVdOwogICAgICAgICAgfQogICAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gZ2x5cGhJZDsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZm9yIChnbHlwaElkID0gMDsgZ2x5cGhJZCA8IGNmZi5jaGFyU3RyaW5ncy5jb3VudDsgZ2x5cGhJZCsrKSB7CiAgICAgICAgICBjaGFyQ29kZSA9IGNNYXAuY2hhckNvZGVPZihnbHlwaElkKTsKICAgICAgICAgIGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9IGdseXBoSWQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBjaGFyQ29kZVRvR2x5cGhJZDsKICAgIH0KICAgIGxldCBlbmNvZGluZyA9IGNmZi5lbmNvZGluZyA/IGNmZi5lbmNvZGluZy5lbmNvZGluZyA6IG51bGw7CiAgICBpZiAocHJvcGVydGllcy5pc0ludGVybmFsRm9udCkgewogICAgICBlbmNvZGluZyA9IHByb3BlcnRpZXMuZGVmYXVsdEVuY29kaW5nOwogICAgfQogICAgY2hhckNvZGVUb0dseXBoSWQgPSB0eXBlMUZvbnRHbHlwaE1hcHBpbmcocHJvcGVydGllcywgZW5jb2RpbmcsIGNoYXJzZXRzKTsKICAgIHJldHVybiBjaGFyQ29kZVRvR2x5cGhJZDsKICB9CiAgaGFzR2x5cGhJZChpZCkgewogICAgcmV0dXJuIHRoaXMuY2ZmLmhhc0dseXBoSWQoaWQpOwogIH0KICBfY3JlYXRlQnVpbHRJbkVuY29kaW5nKCkgewogICAgY29uc3QgewogICAgICBjaGFyc2V0LAogICAgICBlbmNvZGluZwogICAgfSA9IHRoaXMuY2ZmOwogICAgaWYgKCFjaGFyc2V0IHx8ICFlbmNvZGluZykgewogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBjaGFyc2V0cyA9IGNoYXJzZXQuY2hhcnNldCwKICAgICAgZW5jb2RpbmdzID0gZW5jb2RpbmcuZW5jb2Rpbmc7CiAgICBjb25zdCBtYXAgPSBbXTsKICAgIGZvciAoY29uc3QgY2hhckNvZGUgaW4gZW5jb2RpbmdzKSB7CiAgICAgIGNvbnN0IGdseXBoSWQgPSBlbmNvZGluZ3NbY2hhckNvZGVdOwogICAgICBpZiAoZ2x5cGhJZCA+PSAwKSB7CiAgICAgICAgY29uc3QgZ2x5cGhOYW1lID0gY2hhcnNldHNbZ2x5cGhJZF07CiAgICAgICAgaWYgKGdseXBoTmFtZSkgewogICAgICAgICAgbWFwW2NoYXJDb2RlXSA9IGdseXBoTmFtZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChtYXAubGVuZ3RoID4gMCkgewogICAgICB0aGlzLnByb3BlcnRpZXMuYnVpbHRJbkVuY29kaW5nID0gbWFwOwogICAgfQogIH0KfQoKOy8vIC4vc3JjL2NvcmUvZm9udF9yZW5kZXJlci5qcwoKCgoKCgpmdW5jdGlvbiBnZXRGbG9hdDIxNChkYXRhLCBvZmZzZXQpIHsKICByZXR1cm4gcmVhZEludDE2KGRhdGEsIG9mZnNldCkgLyAxNjM4NDsKfQpmdW5jdGlvbiBnZXRTdWJyb3V0aW5lQmlhcyhzdWJycykgewogIGNvbnN0IG51bVN1YnJzID0gc3VicnMubGVuZ3RoOwogIGxldCBiaWFzID0gMzI3Njg7CiAgaWYgKG51bVN1YnJzIDwgMTI0MCkgewogICAgYmlhcyA9IDEwNzsKICB9IGVsc2UgaWYgKG51bVN1YnJzIDwgMzM5MDApIHsKICAgIGJpYXMgPSAxMTMxOwogIH0KICByZXR1cm4gYmlhczsKfQpmdW5jdGlvbiBwYXJzZUNtYXAoZGF0YSwgc3RhcnQsIGVuZCkgewogIGNvbnN0IG9mZnNldCA9IHJlYWRVaW50MTYoZGF0YSwgc3RhcnQgKyAyKSA9PT0gMSA/IHJlYWRVaW50MzIoZGF0YSwgc3RhcnQgKyA4KSA6IHJlYWRVaW50MzIoZGF0YSwgc3RhcnQgKyAxNik7CiAgY29uc3QgZm9ybWF0ID0gcmVhZFVpbnQxNihkYXRhLCBzdGFydCArIG9mZnNldCk7CiAgbGV0IHJhbmdlcywgcCwgaTsKICBpZiAoZm9ybWF0ID09PSA0KSB7CiAgICByZWFkVWludDE2KGRhdGEsIHN0YXJ0ICsgb2Zmc2V0ICsgMik7CiAgICBjb25zdCBzZWdDb3VudCA9IHJlYWRVaW50MTYoZGF0YSwgc3RhcnQgKyBvZmZzZXQgKyA2KSA+PiAxOwogICAgcCA9IHN0YXJ0ICsgb2Zmc2V0ICsgMTQ7CiAgICByYW5nZXMgPSBbXTsKICAgIGZvciAoaSA9IDA7IGkgPCBzZWdDb3VudDsgaSsrLCBwICs9IDIpIHsKICAgICAgcmFuZ2VzW2ldID0gewogICAgICAgIGVuZDogcmVhZFVpbnQxNihkYXRhLCBwKQogICAgICB9OwogICAgfQogICAgcCArPSAyOwogICAgZm9yIChpID0gMDsgaSA8IHNlZ0NvdW50OyBpKyssIHAgKz0gMikgewogICAgICByYW5nZXNbaV0uc3RhcnQgPSByZWFkVWludDE2KGRhdGEsIHApOwogICAgfQogICAgZm9yIChpID0gMDsgaSA8IHNlZ0NvdW50OyBpKyssIHAgKz0gMikgewogICAgICByYW5nZXNbaV0uaWREZWx0YSA9IHJlYWRVaW50MTYoZGF0YSwgcCk7CiAgICB9CiAgICBmb3IgKGkgPSAwOyBpIDwgc2VnQ291bnQ7IGkrKywgcCArPSAyKSB7CiAgICAgIGxldCBpZE9mZnNldCA9IHJlYWRVaW50MTYoZGF0YSwgcCk7CiAgICAgIGlmIChpZE9mZnNldCA9PT0gMCkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIHJhbmdlc1tpXS5pZHMgPSBbXTsKICAgICAgZm9yIChsZXQgaiA9IDAsIGpqID0gcmFuZ2VzW2ldLmVuZCAtIHJhbmdlc1tpXS5zdGFydCArIDE7IGogPCBqajsgaisrKSB7CiAgICAgICAgcmFuZ2VzW2ldLmlkc1tqXSA9IHJlYWRVaW50MTYoZGF0YSwgcCArIGlkT2Zmc2V0KTsKICAgICAgICBpZE9mZnNldCArPSAyOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmFuZ2VzOwogIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAxMikgewogICAgY29uc3QgZ3JvdXBzID0gcmVhZFVpbnQzMihkYXRhLCBzdGFydCArIG9mZnNldCArIDEyKTsKICAgIHAgPSBzdGFydCArIG9mZnNldCArIDE2OwogICAgcmFuZ2VzID0gW107CiAgICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBzOyBpKyspIHsKICAgICAgc3RhcnQgPSByZWFkVWludDMyKGRhdGEsIHApOwogICAgICByYW5nZXMucHVzaCh7CiAgICAgICAgc3RhcnQsCiAgICAgICAgZW5kOiByZWFkVWludDMyKGRhdGEsIHAgKyA0KSwKICAgICAgICBpZERlbHRhOiByZWFkVWludDMyKGRhdGEsIHAgKyA4KSAtIHN0YXJ0CiAgICAgIH0pOwogICAgICBwICs9IDEyOwogICAgfQogICAgcmV0dXJuIHJhbmdlczsKICB9CiAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKGB1bnN1cHBvcnRlZCBjbWFwOiAke2Zvcm1hdH1gKTsKfQpmdW5jdGlvbiBwYXJzZUNmZihkYXRhLCBzdGFydCwgZW5kLCBzZWFjQW5hbHlzaXNFbmFibGVkKSB7CiAgY29uc3QgcHJvcGVydGllcyA9IHt9OwogIGNvbnN0IHBhcnNlciA9IG5ldyBDRkZQYXJzZXIobmV3IFN0cmVhbShkYXRhLCBzdGFydCwgZW5kIC0gc3RhcnQpLCBwcm9wZXJ0aWVzLCBzZWFjQW5hbHlzaXNFbmFibGVkKTsKICBjb25zdCBjZmYgPSBwYXJzZXIucGFyc2UoKTsKICByZXR1cm4gewogICAgZ2x5cGhzOiBjZmYuY2hhclN0cmluZ3Mub2JqZWN0cywKICAgIHN1YnJzOiBjZmYudG9wRGljdC5wcml2YXRlRGljdD8uc3VicnNJbmRleD8ub2JqZWN0cywKICAgIGdzdWJyczogY2ZmLmdsb2JhbFN1YnJJbmRleD8ub2JqZWN0cywKICAgIGlzQ0ZGQ0lERm9udDogY2ZmLmlzQ0lERm9udCwKICAgIGZkU2VsZWN0OiBjZmYuZmRTZWxlY3QsCiAgICBmZEFycmF5OiBjZmYuZmRBcnJheQogIH07Cn0KZnVuY3Rpb24gcGFyc2VHbHlmVGFibGUoZ2x5ZiwgbG9jYSwgaXNHbHlwaExvY2F0aW9uc0xvbmcpIHsKICBsZXQgaXRlbVNpemUsIGl0ZW1EZWNvZGU7CiAgaWYgKGlzR2x5cGhMb2NhdGlvbnNMb25nKSB7CiAgICBpdGVtU2l6ZSA9IDQ7CiAgICBpdGVtRGVjb2RlID0gcmVhZFVpbnQzMjsKICB9IGVsc2UgewogICAgaXRlbVNpemUgPSAyOwogICAgaXRlbURlY29kZSA9IChkYXRhLCBvZmZzZXQpID0+IDIgKiByZWFkVWludDE2KGRhdGEsIG9mZnNldCk7CiAgfQogIGNvbnN0IGdseXBocyA9IFtdOwogIGxldCBzdGFydE9mZnNldCA9IGl0ZW1EZWNvZGUobG9jYSwgMCk7CiAgZm9yIChsZXQgaiA9IGl0ZW1TaXplOyBqIDwgbG9jYS5sZW5ndGg7IGogKz0gaXRlbVNpemUpIHsKICAgIGNvbnN0IGVuZE9mZnNldCA9IGl0ZW1EZWNvZGUobG9jYSwgaik7CiAgICBnbHlwaHMucHVzaChnbHlmLnN1YmFycmF5KHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpKTsKICAgIHN0YXJ0T2Zmc2V0ID0gZW5kT2Zmc2V0OwogIH0KICByZXR1cm4gZ2x5cGhzOwp9CmZ1bmN0aW9uIGxvb2t1cENtYXAocmFuZ2VzLCB1bmljb2RlKSB7CiAgY29uc3QgY29kZSA9IHVuaWNvZGUuY29kZVBvaW50QXQoMCk7CiAgbGV0IGdpZCA9IDAsCiAgICBsID0gMCwKICAgIHIgPSByYW5nZXMubGVuZ3RoIC0gMTsKICB3aGlsZSAobCA8IHIpIHsKICAgIGNvbnN0IGMgPSBsICsgciArIDEgPj4gMTsKICAgIGlmIChjb2RlIDwgcmFuZ2VzW2NdLnN0YXJ0KSB7CiAgICAgIHIgPSBjIC0gMTsKICAgIH0gZWxzZSB7CiAgICAgIGwgPSBjOwogICAgfQogIH0KICBpZiAocmFuZ2VzW2xdLnN0YXJ0IDw9IGNvZGUgJiYgY29kZSA8PSByYW5nZXNbbF0uZW5kKSB7CiAgICBnaWQgPSByYW5nZXNbbF0uaWREZWx0YSArIChyYW5nZXNbbF0uaWRzID8gcmFuZ2VzW2xdLmlkc1tjb2RlIC0gcmFuZ2VzW2xdLnN0YXJ0XSA6IGNvZGUpICYgMHhmZmZmOwogIH0KICByZXR1cm4gewogICAgY2hhckNvZGU6IGNvZGUsCiAgICBnbHlwaElkOiBnaWQKICB9Owp9CmZ1bmN0aW9uIGNvbXBpbGVHbHlmKGNvZGUsIGNtZHMsIGZvbnQpIHsKICBmdW5jdGlvbiBtb3ZlVG8oeCwgeSkgewogICAgaWYgKGZpcnN0UG9pbnQpIHsKICAgICAgY21kcy5hZGQoIkwiLCBmaXJzdFBvaW50KTsKICAgIH0KICAgIGZpcnN0UG9pbnQgPSBbeCwgeV07CiAgICBjbWRzLmFkZCgiTSIsIFt4LCB5XSk7CiAgfQogIGZ1bmN0aW9uIGxpbmVUbyh4LCB5KSB7CiAgICBjbWRzLmFkZCgiTCIsIFt4LCB5XSk7CiAgfQogIGZ1bmN0aW9uIHF1YWRyYXRpY0N1cnZlVG8oeGEsIHlhLCB4LCB5KSB7CiAgICBjbWRzLmFkZCgiUSIsIFt4YSwgeWEsIHgsIHldKTsKICB9CiAgbGV0IGkgPSAwOwogIGNvbnN0IG51bWJlck9mQ29udG91cnMgPSByZWFkSW50MTYoY29kZSwgaSk7CiAgbGV0IGZsYWdzOwogIGxldCBmaXJzdFBvaW50ID0gbnVsbDsKICBsZXQgeCA9IDAsCiAgICB5ID0gMDsKICBpICs9IDEwOwogIGlmIChudW1iZXJPZkNvbnRvdXJzIDwgMCkgewogICAgZG8gewogICAgICBmbGFncyA9IHJlYWRVaW50MTYoY29kZSwgaSk7CiAgICAgIGNvbnN0IGdseXBoSW5kZXggPSByZWFkVWludDE2KGNvZGUsIGkgKyAyKTsKICAgICAgaSArPSA0OwogICAgICBsZXQgYXJnMSwgYXJnMjsKICAgICAgaWYgKGZsYWdzICYgMHgwMSkgewogICAgICAgIGlmIChmbGFncyAmIDB4MDIpIHsKICAgICAgICAgIGFyZzEgPSByZWFkSW50MTYoY29kZSwgaSk7CiAgICAgICAgICBhcmcyID0gcmVhZEludDE2KGNvZGUsIGkgKyAyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYXJnMSA9IHJlYWRVaW50MTYoY29kZSwgaSk7CiAgICAgICAgICBhcmcyID0gcmVhZFVpbnQxNihjb2RlLCBpICsgMik7CiAgICAgICAgfQogICAgICAgIGkgKz0gNDsKICAgICAgfSBlbHNlIGlmIChmbGFncyAmIDB4MDIpIHsKICAgICAgICBhcmcxID0gcmVhZEludDgoY29kZSwgaSsrKTsKICAgICAgICBhcmcyID0gcmVhZEludDgoY29kZSwgaSsrKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhcmcxID0gY29kZVtpKytdOwogICAgICAgIGFyZzIgPSBjb2RlW2krK107CiAgICAgIH0KICAgICAgaWYgKGZsYWdzICYgMHgwMikgewogICAgICAgIHggPSBhcmcxOwogICAgICAgIHkgPSBhcmcyOwogICAgICB9IGVsc2UgewogICAgICAgIHggPSAwOwogICAgICAgIHkgPSAwOwogICAgICB9CiAgICAgIGxldCBzY2FsZVggPSAxLAogICAgICAgIHNjYWxlWSA9IDEsCiAgICAgICAgc2NhbGUwMSA9IDAsCiAgICAgICAgc2NhbGUxMCA9IDA7CiAgICAgIGlmIChmbGFncyAmIDB4MDgpIHsKICAgICAgICBzY2FsZVggPSBzY2FsZVkgPSBnZXRGbG9hdDIxNChjb2RlLCBpKTsKICAgICAgICBpICs9IDI7CiAgICAgIH0gZWxzZSBpZiAoZmxhZ3MgJiAweDQwKSB7CiAgICAgICAgc2NhbGVYID0gZ2V0RmxvYXQyMTQoY29kZSwgaSk7CiAgICAgICAgc2NhbGVZID0gZ2V0RmxvYXQyMTQoY29kZSwgaSArIDIpOwogICAgICAgIGkgKz0gNDsKICAgICAgfSBlbHNlIGlmIChmbGFncyAmIDB4ODApIHsKICAgICAgICBzY2FsZVggPSBnZXRGbG9hdDIxNChjb2RlLCBpKTsKICAgICAgICBzY2FsZTAxID0gZ2V0RmxvYXQyMTQoY29kZSwgaSArIDIpOwogICAgICAgIHNjYWxlMTAgPSBnZXRGbG9hdDIxNChjb2RlLCBpICsgNCk7CiAgICAgICAgc2NhbGVZID0gZ2V0RmxvYXQyMTQoY29kZSwgaSArIDYpOwogICAgICAgIGkgKz0gODsKICAgICAgfQogICAgICBjb25zdCBzdWJnbHlwaCA9IGZvbnQuZ2x5cGhzW2dseXBoSW5kZXhdOwogICAgICBpZiAoc3ViZ2x5cGgpIHsKICAgICAgICBjbWRzLnNhdmUoKTsKICAgICAgICBjbWRzLnRyYW5zZm9ybShbc2NhbGVYLCBzY2FsZTAxLCBzY2FsZTEwLCBzY2FsZVksIHgsIHldKTsKICAgICAgICBpZiAoIShmbGFncyAmIDB4MDIpKSB7fQogICAgICAgIGNvbXBpbGVHbHlmKHN1YmdseXBoLCBjbWRzLCBmb250KTsKICAgICAgICBjbWRzLnJlc3RvcmUoKTsKICAgICAgfQogICAgfSB3aGlsZSAoZmxhZ3MgJiAweDIwKTsKICB9IGVsc2UgewogICAgY29uc3QgZW5kUHRzT2ZDb250b3VycyA9IFtdOwogICAgbGV0IGosIGpqOwogICAgZm9yIChqID0gMDsgaiA8IG51bWJlck9mQ29udG91cnM7IGorKykgewogICAgICBlbmRQdHNPZkNvbnRvdXJzLnB1c2gocmVhZFVpbnQxNihjb2RlLCBpKSk7CiAgICAgIGkgKz0gMjsKICAgIH0KICAgIGNvbnN0IGluc3RydWN0aW9uTGVuZ3RoID0gcmVhZFVpbnQxNihjb2RlLCBpKTsKICAgIGkgKz0gMiArIGluc3RydWN0aW9uTGVuZ3RoOwogICAgY29uc3QgbnVtYmVyT2ZQb2ludHMgPSBlbmRQdHNPZkNvbnRvdXJzLmF0KC0xKSArIDE7CiAgICBjb25zdCBwb2ludHMgPSBbXTsKICAgIHdoaWxlIChwb2ludHMubGVuZ3RoIDwgbnVtYmVyT2ZQb2ludHMpIHsKICAgICAgZmxhZ3MgPSBjb2RlW2krK107CiAgICAgIGxldCByZXBlYXQgPSAxOwogICAgICBpZiAoZmxhZ3MgJiAweDA4KSB7CiAgICAgICAgcmVwZWF0ICs9IGNvZGVbaSsrXTsKICAgICAgfQogICAgICB3aGlsZSAocmVwZWF0LS0gPiAwKSB7CiAgICAgICAgcG9pbnRzLnB1c2goewogICAgICAgICAgZmxhZ3MKICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgZm9yIChqID0gMDsgaiA8IG51bWJlck9mUG9pbnRzOyBqKyspIHsKICAgICAgc3dpdGNoIChwb2ludHNbal0uZmxhZ3MgJiAweDEyKSB7CiAgICAgICAgY2FzZSAweDAwOgogICAgICAgICAgeCArPSByZWFkSW50MTYoY29kZSwgaSk7CiAgICAgICAgICBpICs9IDI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDB4MDI6CiAgICAgICAgICB4IC09IGNvZGVbaSsrXTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMHgxMjoKICAgICAgICAgIHggKz0gY29kZVtpKytdOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgcG9pbnRzW2pdLnggPSB4OwogICAgfQogICAgZm9yIChqID0gMDsgaiA8IG51bWJlck9mUG9pbnRzOyBqKyspIHsKICAgICAgc3dpdGNoIChwb2ludHNbal0uZmxhZ3MgJiAweDI0KSB7CiAgICAgICAgY2FzZSAweDAwOgogICAgICAgICAgeSArPSByZWFkSW50MTYoY29kZSwgaSk7CiAgICAgICAgICBpICs9IDI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDB4MDQ6CiAgICAgICAgICB5IC09IGNvZGVbaSsrXTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMHgyNDoKICAgICAgICAgIHkgKz0gY29kZVtpKytdOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgcG9pbnRzW2pdLnkgPSB5OwogICAgfQogICAgbGV0IHN0YXJ0UG9pbnQgPSAwOwogICAgZm9yIChpID0gMDsgaSA8IG51bWJlck9mQ29udG91cnM7IGkrKykgewogICAgICBjb25zdCBlbmRQb2ludCA9IGVuZFB0c09mQ29udG91cnNbaV07CiAgICAgIGNvbnN0IGNvbnRvdXIgPSBwb2ludHMuc2xpY2Uoc3RhcnRQb2ludCwgZW5kUG9pbnQgKyAxKTsKICAgICAgaWYgKGNvbnRvdXJbMF0uZmxhZ3MgJiAxKSB7CiAgICAgICAgY29udG91ci5wdXNoKGNvbnRvdXJbMF0pOwogICAgICB9IGVsc2UgaWYgKGNvbnRvdXIuYXQoLTEpLmZsYWdzICYgMSkgewogICAgICAgIGNvbnRvdXIudW5zaGlmdChjb250b3VyLmF0KC0xKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29uc3QgcCA9IHsKICAgICAgICAgIGZsYWdzOiAxLAogICAgICAgICAgeDogKGNvbnRvdXJbMF0ueCArIGNvbnRvdXIuYXQoLTEpLngpIC8gMiwKICAgICAgICAgIHk6IChjb250b3VyWzBdLnkgKyBjb250b3VyLmF0KC0xKS55KSAvIDIKICAgICAgICB9OwogICAgICAgIGNvbnRvdXIudW5zaGlmdChwKTsKICAgICAgICBjb250b3VyLnB1c2gocCk7CiAgICAgIH0KICAgICAgbW92ZVRvKGNvbnRvdXJbMF0ueCwgY29udG91clswXS55KTsKICAgICAgZm9yIChqID0gMSwgamogPSBjb250b3VyLmxlbmd0aDsgaiA8IGpqOyBqKyspIHsKICAgICAgICBpZiAoY29udG91cltqXS5mbGFncyAmIDEpIHsKICAgICAgICAgIGxpbmVUbyhjb250b3VyW2pdLngsIGNvbnRvdXJbal0ueSk7CiAgICAgICAgfSBlbHNlIGlmIChjb250b3VyW2ogKyAxXS5mbGFncyAmIDEpIHsKICAgICAgICAgIHF1YWRyYXRpY0N1cnZlVG8oY29udG91cltqXS54LCBjb250b3VyW2pdLnksIGNvbnRvdXJbaiArIDFdLngsIGNvbnRvdXJbaiArIDFdLnkpOwogICAgICAgICAgaisrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBxdWFkcmF0aWNDdXJ2ZVRvKGNvbnRvdXJbal0ueCwgY29udG91cltqXS55LCAoY29udG91cltqXS54ICsgY29udG91cltqICsgMV0ueCkgLyAyLCAoY29udG91cltqXS55ICsgY29udG91cltqICsgMV0ueSkgLyAyKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc3RhcnRQb2ludCA9IGVuZFBvaW50ICsgMTsKICAgIH0KICB9Cn0KZnVuY3Rpb24gY29tcGlsZUNoYXJTdHJpbmcoY2hhclN0cmluZ0NvZGUsIGNtZHMsIGZvbnQsIGdseXBoSWQpIHsKICBmdW5jdGlvbiBtb3ZlVG8oeCwgeSkgewogICAgaWYgKGZpcnN0UG9pbnQpIHsKICAgICAgY21kcy5hZGQoIkwiLCBmaXJzdFBvaW50KTsKICAgIH0KICAgIGZpcnN0UG9pbnQgPSBbeCwgeV07CiAgICBjbWRzLmFkZCgiTSIsIFt4LCB5XSk7CiAgfQogIGZ1bmN0aW9uIGxpbmVUbyh4LCB5KSB7CiAgICBjbWRzLmFkZCgiTCIsIFt4LCB5XSk7CiAgfQogIGZ1bmN0aW9uIGJlemllckN1cnZlVG8oeDEsIHkxLCB4MiwgeTIsIHgsIHkpIHsKICAgIGNtZHMuYWRkKCJDIiwgW3gxLCB5MSwgeDIsIHkyLCB4LCB5XSk7CiAgfQogIGNvbnN0IHN0YWNrID0gW107CiAgbGV0IHggPSAwLAogICAgeSA9IDA7CiAgbGV0IHN0ZW1zID0gMDsKICBsZXQgZmlyc3RQb2ludCA9IG51bGw7CiAgZnVuY3Rpb24gcGFyc2UoY29kZSkgewogICAgbGV0IGkgPSAwOwogICAgd2hpbGUgKGkgPCBjb2RlLmxlbmd0aCkgewogICAgICBsZXQgc3RhY2tDbGVhbiA9IGZhbHNlOwogICAgICBsZXQgdiA9IGNvZGVbaSsrXTsKICAgICAgbGV0IHhhLCB4YiwgeWEsIHliLCB5MSwgeTIsIHkzLCBuLCBzdWJyQ29kZTsKICAgICAgc3dpdGNoICh2KSB7CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgc3RlbXMgKz0gc3RhY2subGVuZ3RoID4+IDE7CiAgICAgICAgICBzdGFja0NsZWFuID0gdHJ1ZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMzoKICAgICAgICAgIHN0ZW1zICs9IHN0YWNrLmxlbmd0aCA+PiAxOwogICAgICAgICAgc3RhY2tDbGVhbiA9IHRydWU7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDQ6CiAgICAgICAgICB5ICs9IHN0YWNrLnBvcCgpOwogICAgICAgICAgbW92ZVRvKHgsIHkpOwogICAgICAgICAgc3RhY2tDbGVhbiA9IHRydWU7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDU6CiAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkgewogICAgICAgICAgICB4ICs9IHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIHkgKz0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgbGluZVRvKHgsIHkpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSA2OgogICAgICAgICAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgeCArPSBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICBsaW5lVG8oeCwgeSk7CiAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICB5ICs9IHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIGxpbmVUbyh4LCB5KTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgNzoKICAgICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIHkgKz0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgbGluZVRvKHgsIHkpOwogICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgeCArPSBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICBsaW5lVG8oeCwgeSk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDg6CiAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkgewogICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICB5YSA9IHkgKyBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIHggPSB4YiArIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIHkgPSB5YiArIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAxMDoKICAgICAgICAgIG4gPSBzdGFjay5wb3AoKTsKICAgICAgICAgIHN1YnJDb2RlID0gbnVsbDsKICAgICAgICAgIGlmIChmb250LmlzQ0ZGQ0lERm9udCkgewogICAgICAgICAgICBjb25zdCBmZEluZGV4ID0gZm9udC5mZFNlbGVjdC5nZXRGREluZGV4KGdseXBoSWQpOwogICAgICAgICAgICBpZiAoZmRJbmRleCA+PSAwICYmIGZkSW5kZXggPCBmb250LmZkQXJyYXkubGVuZ3RoKSB7CiAgICAgICAgICAgICAgY29uc3QgZm9udERpY3QgPSBmb250LmZkQXJyYXlbZmRJbmRleF07CiAgICAgICAgICAgICAgbGV0IHN1YnJzOwogICAgICAgICAgICAgIGlmIChmb250RGljdC5wcml2YXRlRGljdD8uc3VicnNJbmRleCkgewogICAgICAgICAgICAgICAgc3VicnMgPSBmb250RGljdC5wcml2YXRlRGljdC5zdWJyc0luZGV4Lm9iamVjdHM7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChzdWJycykgewogICAgICAgICAgICAgICAgbiArPSBnZXRTdWJyb3V0aW5lQmlhcyhzdWJycyk7CiAgICAgICAgICAgICAgICBzdWJyQ29kZSA9IHN1YnJzW25dOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB3YXJuKCJJbnZhbGlkIGZkIGluZGV4IGZvciBnbHlwaCBpbmRleC4iKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3VickNvZGUgPSBmb250LnN1YnJzW24gKyBmb250LnN1YnJzQmlhc107CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoc3VickNvZGUpIHsKICAgICAgICAgICAgcGFyc2Uoc3VickNvZGUpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAxMToKICAgICAgICAgIHJldHVybjsKICAgICAgICBjYXNlIDEyOgogICAgICAgICAgdiA9IGNvZGVbaSsrXTsKICAgICAgICAgIHN3aXRjaCAodikgewogICAgICAgICAgICBjYXNlIDM0OgogICAgICAgICAgICAgIHhhID0geCArIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgeTEgPSB5ICsgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICB4ID0geGIgKyBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHksIHhiLCB5MSwgeCwgeTEpOwogICAgICAgICAgICAgIHhhID0geCArIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgeCA9IHhiICsgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5MSwgeGIsIHksIHgsIHkpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDM1OgogICAgICAgICAgICAgIHhhID0geCArIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgeWEgPSB5ICsgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICB5YiA9IHlhICsgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICB4ID0geGIgKyBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgIHkgPSB5YiArIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgYmV6aWVyQ3VydmVUbyh4YSwgeWEsIHhiLCB5YiwgeCwgeSk7CiAgICAgICAgICAgICAgeGEgPSB4ICsgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICB5YSA9IHkgKyBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgIHliID0geWEgKyBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgIHggPSB4YiArIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgeSA9IHliICsgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5YSwgeGIsIHliLCB4LCB5KTsKICAgICAgICAgICAgICBzdGFjay5wb3AoKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAzNjoKICAgICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgIHkxID0geSArIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgeTIgPSB5MSArIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgeCA9IHhiICsgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5MSwgeGIsIHkyLCB4LCB5Mik7CiAgICAgICAgICAgICAgeGEgPSB4ICsgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICB5MyA9IHkyICsgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICB4ID0geGIgKyBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHkyLCB4YiwgeTMsIHgsIHkpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDM3OgogICAgICAgICAgICAgIGNvbnN0IHgwID0geCwKICAgICAgICAgICAgICAgIHkwID0geTsKICAgICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgIHlhID0geSArIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgeCA9IHhiICsgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICB5ID0geWIgKyBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpOwogICAgICAgICAgICAgIHhhID0geCArIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgeWEgPSB5ICsgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICB5YiA9IHlhICsgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICB4ID0geGI7CiAgICAgICAgICAgICAgeSA9IHliOwogICAgICAgICAgICAgIGlmIChNYXRoLmFicyh4IC0geDApID4gTWF0aC5hYnMoeSAtIHkwKSkgewogICAgICAgICAgICAgICAgeCArPSBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB5ICs9IHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcihgdW5rbm93biBvcGVyYXRvcjogMTIgJHt2fWApOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAxNDoKICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPj0gNCkgewogICAgICAgICAgICBjb25zdCBhY2hhciA9IHN0YWNrLnBvcCgpOwogICAgICAgICAgICBjb25zdCBiY2hhciA9IHN0YWNrLnBvcCgpOwogICAgICAgICAgICB5ID0gc3RhY2sucG9wKCk7CiAgICAgICAgICAgIHggPSBzdGFjay5wb3AoKTsKICAgICAgICAgICAgY21kcy5zYXZlKCk7CiAgICAgICAgICAgIGNtZHMudHJhbnNsYXRlKHgsIHkpOwogICAgICAgICAgICBsZXQgY21hcCA9IGxvb2t1cENtYXAoZm9udC5jbWFwLCBTdHJpbmcuZnJvbUNoYXJDb2RlKGZvbnQuZ2x5cGhOYW1lTWFwW1N0YW5kYXJkRW5jb2RpbmdbYWNoYXJdXSkpOwogICAgICAgICAgICBjb21waWxlQ2hhclN0cmluZyhmb250LmdseXBoc1tjbWFwLmdseXBoSWRdLCBjbWRzLCBmb250LCBjbWFwLmdseXBoSWQpOwogICAgICAgICAgICBjbWRzLnJlc3RvcmUoKTsKICAgICAgICAgICAgY21hcCA9IGxvb2t1cENtYXAoZm9udC5jbWFwLCBTdHJpbmcuZnJvbUNoYXJDb2RlKGZvbnQuZ2x5cGhOYW1lTWFwW1N0YW5kYXJkRW5jb2RpbmdbYmNoYXJdXSkpOwogICAgICAgICAgICBjb21waWxlQ2hhclN0cmluZyhmb250LmdseXBoc1tjbWFwLmdseXBoSWRdLCBjbWRzLCBmb250LCBjbWFwLmdseXBoSWQpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGNhc2UgMTg6CiAgICAgICAgICBzdGVtcyArPSBzdGFjay5sZW5ndGggPj4gMTsKICAgICAgICAgIHN0YWNrQ2xlYW4gPSB0cnVlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAxOToKICAgICAgICAgIHN0ZW1zICs9IHN0YWNrLmxlbmd0aCA+PiAxOwogICAgICAgICAgaSArPSBzdGVtcyArIDcgPj4gMzsKICAgICAgICAgIHN0YWNrQ2xlYW4gPSB0cnVlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAyMDoKICAgICAgICAgIHN0ZW1zICs9IHN0YWNrLmxlbmd0aCA+PiAxOwogICAgICAgICAgaSArPSBzdGVtcyArIDcgPj4gMzsKICAgICAgICAgIHN0YWNrQ2xlYW4gPSB0cnVlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAyMToKICAgICAgICAgIHkgKz0gc3RhY2sucG9wKCk7CiAgICAgICAgICB4ICs9IHN0YWNrLnBvcCgpOwogICAgICAgICAgbW92ZVRvKHgsIHkpOwogICAgICAgICAgc3RhY2tDbGVhbiA9IHRydWU7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDIyOgogICAgICAgICAgeCArPSBzdGFjay5wb3AoKTsKICAgICAgICAgIG1vdmVUbyh4LCB5KTsKICAgICAgICAgIHN0YWNrQ2xlYW4gPSB0cnVlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAyMzoKICAgICAgICAgIHN0ZW1zICs9IHN0YWNrLmxlbmd0aCA+PiAxOwogICAgICAgICAgc3RhY2tDbGVhbiA9IHRydWU7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI0OgogICAgICAgICAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDIpIHsKICAgICAgICAgICAgeGEgPSB4ICsgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgeWEgPSB5ICsgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIHliID0geWEgKyBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICB4ID0geGIgKyBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICB5ID0geWIgKyBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5YSwgeGIsIHliLCB4LCB5KTsKICAgICAgICAgIH0KICAgICAgICAgIHggKz0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgIHkgKz0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgIGxpbmVUbyh4LCB5KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMjU6CiAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gNikgewogICAgICAgICAgICB4ICs9IHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIHkgKz0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgbGluZVRvKHgsIHkpOwogICAgICAgICAgfQogICAgICAgICAgeGEgPSB4ICsgc3RhY2suc2hpZnQoKTsKICAgICAgICAgIHlhID0geSArIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTsKICAgICAgICAgIHliID0geWEgKyBzdGFjay5zaGlmdCgpOwogICAgICAgICAgeCA9IHhiICsgc3RhY2suc2hpZnQoKTsKICAgICAgICAgIHkgPSB5YiArIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5YSwgeGIsIHliLCB4LCB5KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMjY6CiAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoICUgMikgewogICAgICAgICAgICB4ICs9IHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkgewogICAgICAgICAgICB4YSA9IHg7CiAgICAgICAgICAgIHlhID0geSArIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICB5YiA9IHlhICsgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgeCA9IHhiOwogICAgICAgICAgICB5ID0geWIgKyBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5YSwgeGIsIHliLCB4LCB5KTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMjc6CiAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoICUgMikgewogICAgICAgICAgICB5ICs9IHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkgewogICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICB5YSA9IHk7CiAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICB5YiA9IHlhICsgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgeCA9IHhiICsgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgeSA9IHliOwogICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5YSwgeGIsIHliLCB4LCB5KTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMjg6CiAgICAgICAgICBzdGFjay5wdXNoKHJlYWRJbnQxNihjb2RlLCBpKSk7CiAgICAgICAgICBpICs9IDI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI5OgogICAgICAgICAgbiA9IHN0YWNrLnBvcCgpICsgZm9udC5nc3VicnNCaWFzOwogICAgICAgICAgc3VickNvZGUgPSBmb250LmdzdWJyc1tuXTsKICAgICAgICAgIGlmIChzdWJyQ29kZSkgewogICAgICAgICAgICBwYXJzZShzdWJyQ29kZSk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDMwOgogICAgICAgICAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgeGEgPSB4OwogICAgICAgICAgICB5YSA9IHkgKyBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIHggPSB4YiArIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIHkgPSB5YiArIChzdGFjay5sZW5ndGggPT09IDEgPyBzdGFjay5zaGlmdCgpIDogMCk7CiAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpOwogICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgeGEgPSB4ICsgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgeWEgPSB5OwogICAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIHkgPSB5YiArIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIHggPSB4YiArIChzdGFjay5sZW5ndGggPT09IDEgPyBzdGFjay5zaGlmdCgpIDogMCk7CiAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAzMToKICAgICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIHhhID0geCArIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIHlhID0geTsKICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIHliID0geWEgKyBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICB5ID0geWIgKyBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICB4ID0geGIgKyAoc3RhY2subGVuZ3RoID09PSAxID8gc3RhY2suc2hpZnQoKSA6IDApOwogICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5YSwgeGIsIHliLCB4LCB5KTsKICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHhhID0geDsKICAgICAgICAgICAgeWEgPSB5ICsgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIHliID0geWEgKyBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICB4ID0geGIgKyBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICB5ID0geWIgKyAoc3RhY2subGVuZ3RoID09PSAxID8gc3RhY2suc2hpZnQoKSA6IDApOwogICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5YSwgeGIsIHliLCB4LCB5KTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBpZiAodiA8IDMyKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcihgdW5rbm93biBvcGVyYXRvcjogJHt2fWApOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHYgPCAyNDcpIHsKICAgICAgICAgICAgc3RhY2sucHVzaCh2IC0gMTM5KTsKICAgICAgICAgIH0gZWxzZSBpZiAodiA8IDI1MSkgewogICAgICAgICAgICBzdGFjay5wdXNoKCh2IC0gMjQ3KSAqIDI1NiArIGNvZGVbaSsrXSArIDEwOCk7CiAgICAgICAgICB9IGVsc2UgaWYgKHYgPCAyNTUpIHsKICAgICAgICAgICAgc3RhY2sucHVzaCgtKHYgLSAyNTEpICogMjU2IC0gY29kZVtpKytdIC0gMTA4KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0YWNrLnB1c2goKGNvZGVbaV0gPDwgMjQgfCBjb2RlW2kgKyAxXSA8PCAxNiB8IGNvZGVbaSArIDJdIDw8IDggfCBjb2RlW2kgKyAzXSkgLyA2NTUzNik7CiAgICAgICAgICAgIGkgKz0gNDsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGlmIChzdGFja0NsZWFuKSB7CiAgICAgICAgc3RhY2subGVuZ3RoID0gMDsKICAgICAgfQogICAgfQogIH0KICBwYXJzZShjaGFyU3RyaW5nQ29kZSk7Cn0KY29uc3QgTk9PUCA9ICIiOwpjbGFzcyBDb21tYW5kcyB7CiAgY21kcyA9IFtdOwogIHRyYW5zZm9ybVN0YWNrID0gW107CiAgY3VycmVudFRyYW5zZm9ybSA9IFsxLCAwLCAwLCAxLCAwLCAwXTsKICBhZGQoY21kLCBhcmdzKSB7CiAgICBpZiAoYXJncykgewogICAgICBjb25zdCBbYSwgYiwgYywgZCwgZSwgZl0gPSB0aGlzLmN1cnJlbnRUcmFuc2Zvcm07CiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGFyZ3MubGVuZ3RoOyBpIDwgaWk7IGkgKz0gMikgewogICAgICAgIGNvbnN0IHggPSBhcmdzW2ldOwogICAgICAgIGNvbnN0IHkgPSBhcmdzW2kgKyAxXTsKICAgICAgICBhcmdzW2ldID0gYSAqIHggKyBjICogeSArIGU7CiAgICAgICAgYXJnc1tpICsgMV0gPSBiICogeCArIGQgKiB5ICsgZjsKICAgICAgfQogICAgICB0aGlzLmNtZHMucHVzaChgJHtjbWR9JHthcmdzLmpvaW4oIiAiKX1gKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuY21kcy5wdXNoKGNtZCk7CiAgICB9CiAgfQogIHRyYW5zZm9ybSh0cmFuc2YpIHsKICAgIHRoaXMuY3VycmVudFRyYW5zZm9ybSA9IFV0aWwudHJhbnNmb3JtKHRoaXMuY3VycmVudFRyYW5zZm9ybSwgdHJhbnNmKTsKICB9CiAgdHJhbnNsYXRlKHgsIHkpIHsKICAgIHRoaXMudHJhbnNmb3JtKFsxLCAwLCAwLCAxLCB4LCB5XSk7CiAgfQogIHNhdmUoKSB7CiAgICB0aGlzLnRyYW5zZm9ybVN0YWNrLnB1c2godGhpcy5jdXJyZW50VHJhbnNmb3JtLnNsaWNlKCkpOwogIH0KICByZXN0b3JlKCkgewogICAgdGhpcy5jdXJyZW50VHJhbnNmb3JtID0gdGhpcy50cmFuc2Zvcm1TdGFjay5wb3AoKSB8fCBbMSwgMCwgMCwgMSwgMCwgMF07CiAgfQogIGdldFNWRygpIHsKICAgIHJldHVybiB0aGlzLmNtZHMuam9pbigiIik7CiAgfQp9CmNsYXNzIENvbXBpbGVkRm9udCB7CiAgY29uc3RydWN0b3IoZm9udE1hdHJpeCkgewogICAgdGhpcy5mb250TWF0cml4ID0gZm9udE1hdHJpeDsKICAgIHRoaXMuY29tcGlsZWRHbHlwaHMgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgdGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICB9CiAgZ2V0UGF0aEpzKHVuaWNvZGUpIHsKICAgIGNvbnN0IHsKICAgICAgY2hhckNvZGUsCiAgICAgIGdseXBoSWQKICAgIH0gPSBsb29rdXBDbWFwKHRoaXMuY21hcCwgdW5pY29kZSk7CiAgICBsZXQgZm4gPSB0aGlzLmNvbXBpbGVkR2x5cGhzW2dseXBoSWRdLAogICAgICBjb21waWxlRXg7CiAgICBpZiAoZm4gPT09IHVuZGVmaW5lZCkgewogICAgICB0cnkgewogICAgICAgIGZuID0gdGhpcy5jb21waWxlR2x5cGgodGhpcy5nbHlwaHNbZ2x5cGhJZF0sIGdseXBoSWQpOwogICAgICB9IGNhdGNoIChleCkgewogICAgICAgIGZuID0gTk9PUDsKICAgICAgICBjb21waWxlRXggPSBleDsKICAgICAgfQogICAgICB0aGlzLmNvbXBpbGVkR2x5cGhzW2dseXBoSWRdID0gZm47CiAgICB9CiAgICB0aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID8/PSBnbHlwaElkOwogICAgaWYgKGNvbXBpbGVFeCkgewogICAgICB0aHJvdyBjb21waWxlRXg7CiAgICB9CiAgICByZXR1cm4gZm47CiAgfQogIGNvbXBpbGVHbHlwaChjb2RlLCBnbHlwaElkKSB7CiAgICBpZiAoIWNvZGU/Lmxlbmd0aCB8fCBjb2RlWzBdID09PSAxNCkgewogICAgICByZXR1cm4gTk9PUDsKICAgIH0KICAgIGxldCBmb250TWF0cml4ID0gdGhpcy5mb250TWF0cml4OwogICAgaWYgKHRoaXMuaXNDRkZDSURGb250KSB7CiAgICAgIGNvbnN0IGZkSW5kZXggPSB0aGlzLmZkU2VsZWN0LmdldEZESW5kZXgoZ2x5cGhJZCk7CiAgICAgIGlmIChmZEluZGV4ID49IDAgJiYgZmRJbmRleCA8IHRoaXMuZmRBcnJheS5sZW5ndGgpIHsKICAgICAgICBjb25zdCBmb250RGljdCA9IHRoaXMuZmRBcnJheVtmZEluZGV4XTsKICAgICAgICBmb250TWF0cml4ID0gZm9udERpY3QuZ2V0QnlOYW1lKCJGb250TWF0cml4IikgfHwgRk9OVF9JREVOVElUWV9NQVRSSVg7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgd2FybigiSW52YWxpZCBmZCBpbmRleCBmb3IgZ2x5cGggaW5kZXguIik7CiAgICAgIH0KICAgIH0KICAgIGFzc2VydChpc051bWJlckFycmF5KGZvbnRNYXRyaXgsIDYpLCAiRXhwZWN0ZWQgYSB2YWxpZCBmb250TWF0cml4LiIpOwogICAgY29uc3QgY21kcyA9IG5ldyBDb21tYW5kcygpOwogICAgY21kcy50cmFuc2Zvcm0oZm9udE1hdHJpeC5zbGljZSgpKTsKICAgIHRoaXMuY29tcGlsZUdseXBoSW1wbChjb2RlLCBjbWRzLCBnbHlwaElkKTsKICAgIGNtZHMuYWRkKCJaIik7CiAgICByZXR1cm4gY21kcy5nZXRTVkcoKTsKICB9CiAgY29tcGlsZUdseXBoSW1wbCgpIHsKICAgIHVucmVhY2hhYmxlKCJDaGlsZHJlbiBjbGFzc2VzIHNob3VsZCBpbXBsZW1lbnQgdGhpcy4iKTsKICB9CiAgaGFzQnVpbHRQYXRoKHVuaWNvZGUpIHsKICAgIGNvbnN0IHsKICAgICAgY2hhckNvZGUsCiAgICAgIGdseXBoSWQKICAgIH0gPSBsb29rdXBDbWFwKHRoaXMuY21hcCwgdW5pY29kZSk7CiAgICByZXR1cm4gdGhpcy5jb21waWxlZEdseXBoc1tnbHlwaElkXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZFtjaGFyQ29kZV0gIT09IHVuZGVmaW5lZDsKICB9Cn0KY2xhc3MgVHJ1ZVR5cGVDb21waWxlZCBleHRlbmRzIENvbXBpbGVkRm9udCB7CiAgY29uc3RydWN0b3IoZ2x5cGhzLCBjbWFwLCBmb250TWF0cml4KSB7CiAgICBzdXBlcihmb250TWF0cml4IHx8IFswLjAwMDQ4OCwgMCwgMCwgMC4wMDA0ODgsIDAsIDBdKTsKICAgIHRoaXMuZ2x5cGhzID0gZ2x5cGhzOwogICAgdGhpcy5jbWFwID0gY21hcDsKICB9CiAgY29tcGlsZUdseXBoSW1wbChjb2RlLCBjbWRzKSB7CiAgICBjb21waWxlR2x5Zihjb2RlLCBjbWRzLCB0aGlzKTsKICB9Cn0KY2xhc3MgVHlwZTJDb21waWxlZCBleHRlbmRzIENvbXBpbGVkRm9udCB7CiAgY29uc3RydWN0b3IoY2ZmSW5mbywgY21hcCwgZm9udE1hdHJpeCkgewogICAgc3VwZXIoZm9udE1hdHJpeCB8fCBbMC4wMDEsIDAsIDAsIDAuMDAxLCAwLCAwXSk7CiAgICB0aGlzLmdseXBocyA9IGNmZkluZm8uZ2x5cGhzOwogICAgdGhpcy5nc3VicnMgPSBjZmZJbmZvLmdzdWJycyB8fCBbXTsKICAgIHRoaXMuc3VicnMgPSBjZmZJbmZvLnN1YnJzIHx8IFtdOwogICAgdGhpcy5jbWFwID0gY21hcDsKICAgIHRoaXMuZ2x5cGhOYW1lTWFwID0gZ2V0R2x5cGhzVW5pY29kZSgpOwogICAgdGhpcy5nc3VicnNCaWFzID0gZ2V0U3Vicm91dGluZUJpYXModGhpcy5nc3VicnMpOwogICAgdGhpcy5zdWJyc0JpYXMgPSBnZXRTdWJyb3V0aW5lQmlhcyh0aGlzLnN1YnJzKTsKICAgIHRoaXMuaXNDRkZDSURGb250ID0gY2ZmSW5mby5pc0NGRkNJREZvbnQ7CiAgICB0aGlzLmZkU2VsZWN0ID0gY2ZmSW5mby5mZFNlbGVjdDsKICAgIHRoaXMuZmRBcnJheSA9IGNmZkluZm8uZmRBcnJheTsKICB9CiAgY29tcGlsZUdseXBoSW1wbChjb2RlLCBjbWRzLCBnbHlwaElkKSB7CiAgICBjb21waWxlQ2hhclN0cmluZyhjb2RlLCBjbWRzLCB0aGlzLCBnbHlwaElkKTsKICB9Cn0KY2xhc3MgRm9udFJlbmRlcmVyRmFjdG9yeSB7CiAgc3RhdGljIGNyZWF0ZShmb250LCBzZWFjQW5hbHlzaXNFbmFibGVkKSB7CiAgICBjb25zdCBkYXRhID0gbmV3IFVpbnQ4QXJyYXkoZm9udC5kYXRhKTsKICAgIGxldCBjbWFwLCBnbHlmLCBsb2NhLCBjZmYsIGluZGV4VG9Mb2NGb3JtYXQsIHVuaXRzUGVyRW07CiAgICBjb25zdCBudW1UYWJsZXMgPSByZWFkVWludDE2KGRhdGEsIDQpOwogICAgZm9yIChsZXQgaSA9IDAsIHAgPSAxMjsgaSA8IG51bVRhYmxlczsgaSsrLCBwICs9IDE2KSB7CiAgICAgIGNvbnN0IHRhZyA9IGJ5dGVzVG9TdHJpbmcoZGF0YS5zdWJhcnJheShwLCBwICsgNCkpOwogICAgICBjb25zdCBvZmZzZXQgPSByZWFkVWludDMyKGRhdGEsIHAgKyA4KTsKICAgICAgY29uc3QgbGVuZ3RoID0gcmVhZFVpbnQzMihkYXRhLCBwICsgMTIpOwogICAgICBzd2l0Y2ggKHRhZykgewogICAgICAgIGNhc2UgImNtYXAiOgogICAgICAgICAgY21hcCA9IHBhcnNlQ21hcChkYXRhLCBvZmZzZXQsIG9mZnNldCArIGxlbmd0aCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJnbHlmIjoKICAgICAgICAgIGdseWYgPSBkYXRhLnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgbGVuZ3RoKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImxvY2EiOgogICAgICAgICAgbG9jYSA9IGRhdGEuc3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGgpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiaGVhZCI6CiAgICAgICAgICB1bml0c1BlckVtID0gcmVhZFVpbnQxNihkYXRhLCBvZmZzZXQgKyAxOCk7CiAgICAgICAgICBpbmRleFRvTG9jRm9ybWF0ID0gcmVhZFVpbnQxNihkYXRhLCBvZmZzZXQgKyA1MCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJDRkYgIjoKICAgICAgICAgIGNmZiA9IHBhcnNlQ2ZmKGRhdGEsIG9mZnNldCwgb2Zmc2V0ICsgbGVuZ3RoLCBzZWFjQW5hbHlzaXNFbmFibGVkKTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBpZiAoZ2x5ZikgewogICAgICBjb25zdCBmb250TWF0cml4ID0gIXVuaXRzUGVyRW0gPyBmb250LmZvbnRNYXRyaXggOiBbMSAvIHVuaXRzUGVyRW0sIDAsIDAsIDEgLyB1bml0c1BlckVtLCAwLCAwXTsKICAgICAgcmV0dXJuIG5ldyBUcnVlVHlwZUNvbXBpbGVkKHBhcnNlR2x5ZlRhYmxlKGdseWYsIGxvY2EsIGluZGV4VG9Mb2NGb3JtYXQpLCBjbWFwLCBmb250TWF0cml4KTsKICAgIH0KICAgIHJldHVybiBuZXcgVHlwZTJDb21waWxlZChjZmYsIGNtYXAsIGZvbnQuZm9udE1hdHJpeCk7CiAgfQp9Cgo7Ly8gLi9zcmMvY29yZS9tZXRyaWNzLmpzCgpjb25zdCBnZXRNZXRyaWNzID0gZ2V0TG9va3VwVGFibGVGYWN0b3J5KGZ1bmN0aW9uICh0KSB7CiAgdC5Db3VyaWVyID0gNjAwOwogIHRbIkNvdXJpZXItQm9sZCJdID0gNjAwOwogIHRbIkNvdXJpZXItQm9sZE9ibGlxdWUiXSA9IDYwMDsKICB0WyJDb3VyaWVyLU9ibGlxdWUiXSA9IDYwMDsKICB0LkhlbHZldGljYSA9IGdldExvb2t1cFRhYmxlRmFjdG9yeShmdW5jdGlvbiAodCkgewogICAgdC5zcGFjZSA9IDI3ODsKICAgIHQuZXhjbGFtID0gMjc4OwogICAgdC5xdW90ZWRibCA9IDM1NTsKICAgIHQubnVtYmVyc2lnbiA9IDU1NjsKICAgIHQuZG9sbGFyID0gNTU2OwogICAgdC5wZXJjZW50ID0gODg5OwogICAgdC5hbXBlcnNhbmQgPSA2Njc7CiAgICB0LnF1b3RlcmlnaHQgPSAyMjI7CiAgICB0LnBhcmVubGVmdCA9IDMzMzsKICAgIHQucGFyZW5yaWdodCA9IDMzMzsKICAgIHQuYXN0ZXJpc2sgPSAzODk7CiAgICB0LnBsdXMgPSA1ODQ7CiAgICB0LmNvbW1hID0gMjc4OwogICAgdC5oeXBoZW4gPSAzMzM7CiAgICB0LnBlcmlvZCA9IDI3ODsKICAgIHQuc2xhc2ggPSAyNzg7CiAgICB0Lnplcm8gPSA1NTY7CiAgICB0Lm9uZSA9IDU1NjsKICAgIHQudHdvID0gNTU2OwogICAgdC50aHJlZSA9IDU1NjsKICAgIHQuZm91ciA9IDU1NjsKICAgIHQuZml2ZSA9IDU1NjsKICAgIHQuc2l4ID0gNTU2OwogICAgdC5zZXZlbiA9IDU1NjsKICAgIHQuZWlnaHQgPSA1NTY7CiAgICB0Lm5pbmUgPSA1NTY7CiAgICB0LmNvbG9uID0gMjc4OwogICAgdC5zZW1pY29sb24gPSAyNzg7CiAgICB0Lmxlc3MgPSA1ODQ7CiAgICB0LmVxdWFsID0gNTg0OwogICAgdC5ncmVhdGVyID0gNTg0OwogICAgdC5xdWVzdGlvbiA9IDU1NjsKICAgIHQuYXQgPSAxMDE1OwogICAgdC5BID0gNjY3OwogICAgdC5CID0gNjY3OwogICAgdC5DID0gNzIyOwogICAgdC5EID0gNzIyOwogICAgdC5FID0gNjY3OwogICAgdC5GID0gNjExOwogICAgdC5HID0gNzc4OwogICAgdC5IID0gNzIyOwogICAgdC5JID0gMjc4OwogICAgdC5KID0gNTAwOwogICAgdC5LID0gNjY3OwogICAgdC5MID0gNTU2OwogICAgdC5NID0gODMzOwogICAgdC5OID0gNzIyOwogICAgdC5PID0gNzc4OwogICAgdC5QID0gNjY3OwogICAgdC5RID0gNzc4OwogICAgdC5SID0gNzIyOwogICAgdC5TID0gNjY3OwogICAgdC5UID0gNjExOwogICAgdC5VID0gNzIyOwogICAgdC5WID0gNjY3OwogICAgdC5XID0gOTQ0OwogICAgdC5YID0gNjY3OwogICAgdC5ZID0gNjY3OwogICAgdC5aID0gNjExOwogICAgdC5icmFja2V0bGVmdCA9IDI3ODsKICAgIHQuYmFja3NsYXNoID0gMjc4OwogICAgdC5icmFja2V0cmlnaHQgPSAyNzg7CiAgICB0LmFzY2lpY2lyY3VtID0gNDY5OwogICAgdC51bmRlcnNjb3JlID0gNTU2OwogICAgdC5xdW90ZWxlZnQgPSAyMjI7CiAgICB0LmEgPSA1NTY7CiAgICB0LmIgPSA1NTY7CiAgICB0LmMgPSA1MDA7CiAgICB0LmQgPSA1NTY7CiAgICB0LmUgPSA1NTY7CiAgICB0LmYgPSAyNzg7CiAgICB0LmcgPSA1NTY7CiAgICB0LmggPSA1NTY7CiAgICB0LmkgPSAyMjI7CiAgICB0LmogPSAyMjI7CiAgICB0LmsgPSA1MDA7CiAgICB0LmwgPSAyMjI7CiAgICB0Lm0gPSA4MzM7CiAgICB0Lm4gPSA1NTY7CiAgICB0Lm8gPSA1NTY7CiAgICB0LnAgPSA1NTY7CiAgICB0LnEgPSA1NTY7CiAgICB0LnIgPSAzMzM7CiAgICB0LnMgPSA1MDA7CiAgICB0LnQgPSAyNzg7CiAgICB0LnUgPSA1NTY7CiAgICB0LnYgPSA1MDA7CiAgICB0LncgPSA3MjI7CiAgICB0LnggPSA1MDA7CiAgICB0LnkgPSA1MDA7CiAgICB0LnogPSA1MDA7CiAgICB0LmJyYWNlbGVmdCA9IDMzNDsKICAgIHQuYmFyID0gMjYwOwogICAgdC5icmFjZXJpZ2h0ID0gMzM0OwogICAgdC5hc2NpaXRpbGRlID0gNTg0OwogICAgdC5leGNsYW1kb3duID0gMzMzOwogICAgdC5jZW50ID0gNTU2OwogICAgdC5zdGVybGluZyA9IDU1NjsKICAgIHQuZnJhY3Rpb24gPSAxNjc7CiAgICB0LnllbiA9IDU1NjsKICAgIHQuZmxvcmluID0gNTU2OwogICAgdC5zZWN0aW9uID0gNTU2OwogICAgdC5jdXJyZW5jeSA9IDU1NjsKICAgIHQucXVvdGVzaW5nbGUgPSAxOTE7CiAgICB0LnF1b3RlZGJsbGVmdCA9IDMzMzsKICAgIHQuZ3VpbGxlbW90bGVmdCA9IDU1NjsKICAgIHQuZ3VpbHNpbmdsbGVmdCA9IDMzMzsKICAgIHQuZ3VpbHNpbmdscmlnaHQgPSAzMzM7CiAgICB0LmZpID0gNTAwOwogICAgdC5mbCA9IDUwMDsKICAgIHQuZW5kYXNoID0gNTU2OwogICAgdC5kYWdnZXIgPSA1NTY7CiAgICB0LmRhZ2dlcmRibCA9IDU1NjsKICAgIHQucGVyaW9kY2VudGVyZWQgPSAyNzg7CiAgICB0LnBhcmFncmFwaCA9IDUzNzsKICAgIHQuYnVsbGV0ID0gMzUwOwogICAgdC5xdW90ZXNpbmdsYmFzZSA9IDIyMjsKICAgIHQucXVvdGVkYmxiYXNlID0gMzMzOwogICAgdC5xdW90ZWRibHJpZ2h0ID0gMzMzOwogICAgdC5ndWlsbGVtb3RyaWdodCA9IDU1NjsKICAgIHQuZWxsaXBzaXMgPSAxMDAwOwogICAgdC5wZXJ0aG91c2FuZCA9IDEwMDA7CiAgICB0LnF1ZXN0aW9uZG93biA9IDYxMTsKICAgIHQuZ3JhdmUgPSAzMzM7CiAgICB0LmFjdXRlID0gMzMzOwogICAgdC5jaXJjdW1mbGV4ID0gMzMzOwogICAgdC50aWxkZSA9IDMzMzsKICAgIHQubWFjcm9uID0gMzMzOwogICAgdC5icmV2ZSA9IDMzMzsKICAgIHQuZG90YWNjZW50ID0gMzMzOwogICAgdC5kaWVyZXNpcyA9IDMzMzsKICAgIHQucmluZyA9IDMzMzsKICAgIHQuY2VkaWxsYSA9IDMzMzsKICAgIHQuaHVuZ2FydW1sYXV0ID0gMzMzOwogICAgdC5vZ29uZWsgPSAzMzM7CiAgICB0LmNhcm9uID0gMzMzOwogICAgdC5lbWRhc2ggPSAxMDAwOwogICAgdC5BRSA9IDEwMDA7CiAgICB0Lm9yZGZlbWluaW5lID0gMzcwOwogICAgdC5Mc2xhc2ggPSA1NTY7CiAgICB0Lk9zbGFzaCA9IDc3ODsKICAgIHQuT0UgPSAxMDAwOwogICAgdC5vcmRtYXNjdWxpbmUgPSAzNjU7CiAgICB0LmFlID0gODg5OwogICAgdC5kb3RsZXNzaSA9IDI3ODsKICAgIHQubHNsYXNoID0gMjIyOwogICAgdC5vc2xhc2ggPSA2MTE7CiAgICB0Lm9lID0gOTQ0OwogICAgdC5nZXJtYW5kYmxzID0gNjExOwogICAgdC5JZGllcmVzaXMgPSAyNzg7CiAgICB0LmVhY3V0ZSA9IDU1NjsKICAgIHQuYWJyZXZlID0gNTU2OwogICAgdC51aHVuZ2FydW1sYXV0ID0gNTU2OwogICAgdC5lY2Fyb24gPSA1NTY7CiAgICB0LllkaWVyZXNpcyA9IDY2NzsKICAgIHQuZGl2aWRlID0gNTg0OwogICAgdC5ZYWN1dGUgPSA2Njc7CiAgICB0LkFjaXJjdW1mbGV4ID0gNjY3OwogICAgdC5hYWN1dGUgPSA1NTY7CiAgICB0LlVjaXJjdW1mbGV4ID0gNzIyOwogICAgdC55YWN1dGUgPSA1MDA7CiAgICB0LnNjb21tYWFjY2VudCA9IDUwMDsKICAgIHQuZWNpcmN1bWZsZXggPSA1NTY7CiAgICB0LlVyaW5nID0gNzIyOwogICAgdC5VZGllcmVzaXMgPSA3MjI7CiAgICB0LmFvZ29uZWsgPSA1NTY7CiAgICB0LlVhY3V0ZSA9IDcyMjsKICAgIHQudW9nb25layA9IDU1NjsKICAgIHQuRWRpZXJlc2lzID0gNjY3OwogICAgdC5EY3JvYXQgPSA3MjI7CiAgICB0LmNvbW1hYWNjZW50ID0gMjUwOwogICAgdC5jb3B5cmlnaHQgPSA3Mzc7CiAgICB0LkVtYWNyb24gPSA2Njc7CiAgICB0LmNjYXJvbiA9IDUwMDsKICAgIHQuYXJpbmcgPSA1NTY7CiAgICB0Lk5jb21tYWFjY2VudCA9IDcyMjsKICAgIHQubGFjdXRlID0gMjIyOwogICAgdC5hZ3JhdmUgPSA1NTY7CiAgICB0LlRjb21tYWFjY2VudCA9IDYxMTsKICAgIHQuQ2FjdXRlID0gNzIyOwogICAgdC5hdGlsZGUgPSA1NTY7CiAgICB0LkVkb3RhY2NlbnQgPSA2Njc7CiAgICB0LnNjYXJvbiA9IDUwMDsKICAgIHQuc2NlZGlsbGEgPSA1MDA7CiAgICB0LmlhY3V0ZSA9IDI3ODsKICAgIHQubG96ZW5nZSA9IDQ3MTsKICAgIHQuUmNhcm9uID0gNzIyOwogICAgdC5HY29tbWFhY2NlbnQgPSA3Nzg7CiAgICB0LnVjaXJjdW1mbGV4ID0gNTU2OwogICAgdC5hY2lyY3VtZmxleCA9IDU1NjsKICAgIHQuQW1hY3JvbiA9IDY2NzsKICAgIHQucmNhcm9uID0gMzMzOwogICAgdC5jY2VkaWxsYSA9IDUwMDsKICAgIHQuWmRvdGFjY2VudCA9IDYxMTsKICAgIHQuVGhvcm4gPSA2Njc7CiAgICB0Lk9tYWNyb24gPSA3Nzg7CiAgICB0LlJhY3V0ZSA9IDcyMjsKICAgIHQuU2FjdXRlID0gNjY3OwogICAgdC5kY2Fyb24gPSA2NDM7CiAgICB0LlVtYWNyb24gPSA3MjI7CiAgICB0LnVyaW5nID0gNTU2OwogICAgdC50aHJlZXN1cGVyaW9yID0gMzMzOwogICAgdC5PZ3JhdmUgPSA3Nzg7CiAgICB0LkFncmF2ZSA9IDY2NzsKICAgIHQuQWJyZXZlID0gNjY3OwogICAgdC5tdWx0aXBseSA9IDU4NDsKICAgIHQudWFjdXRlID0gNTU2OwogICAgdC5UY2Fyb24gPSA2MTE7CiAgICB0LnBhcnRpYWxkaWZmID0gNDc2OwogICAgdC55ZGllcmVzaXMgPSA1MDA7CiAgICB0Lk5hY3V0ZSA9IDcyMjsKICAgIHQuaWNpcmN1bWZsZXggPSAyNzg7CiAgICB0LkVjaXJjdW1mbGV4ID0gNjY3OwogICAgdC5hZGllcmVzaXMgPSA1NTY7CiAgICB0LmVkaWVyZXNpcyA9IDU1NjsKICAgIHQuY2FjdXRlID0gNTAwOwogICAgdC5uYWN1dGUgPSA1NTY7CiAgICB0LnVtYWNyb24gPSA1NTY7CiAgICB0Lk5jYXJvbiA9IDcyMjsKICAgIHQuSWFjdXRlID0gMjc4OwogICAgdC5wbHVzbWludXMgPSA1ODQ7CiAgICB0LmJyb2tlbmJhciA9IDI2MDsKICAgIHQucmVnaXN0ZXJlZCA9IDczNzsKICAgIHQuR2JyZXZlID0gNzc4OwogICAgdC5JZG90YWNjZW50ID0gMjc4OwogICAgdC5zdW1tYXRpb24gPSA2MDA7CiAgICB0LkVncmF2ZSA9IDY2NzsKICAgIHQucmFjdXRlID0gMzMzOwogICAgdC5vbWFjcm9uID0gNTU2OwogICAgdC5aYWN1dGUgPSA2MTE7CiAgICB0LlpjYXJvbiA9IDYxMTsKICAgIHQuZ3JlYXRlcmVxdWFsID0gNTQ5OwogICAgdC5FdGggPSA3MjI7CiAgICB0LkNjZWRpbGxhID0gNzIyOwogICAgdC5sY29tbWFhY2NlbnQgPSAyMjI7CiAgICB0LnRjYXJvbiA9IDMxNzsKICAgIHQuZW9nb25layA9IDU1NjsKICAgIHQuVW9nb25layA9IDcyMjsKICAgIHQuQWFjdXRlID0gNjY3OwogICAgdC5BZGllcmVzaXMgPSA2Njc7CiAgICB0LmVncmF2ZSA9IDU1NjsKICAgIHQuemFjdXRlID0gNTAwOwogICAgdC5pb2dvbmVrID0gMjIyOwogICAgdC5PYWN1dGUgPSA3Nzg7CiAgICB0Lm9hY3V0ZSA9IDU1NjsKICAgIHQuYW1hY3JvbiA9IDU1NjsKICAgIHQuc2FjdXRlID0gNTAwOwogICAgdC5pZGllcmVzaXMgPSAyNzg7CiAgICB0Lk9jaXJjdW1mbGV4ID0gNzc4OwogICAgdC5VZ3JhdmUgPSA3MjI7CiAgICB0LkRlbHRhID0gNjEyOwogICAgdC50aG9ybiA9IDU1NjsKICAgIHQudHdvc3VwZXJpb3IgPSAzMzM7CiAgICB0Lk9kaWVyZXNpcyA9IDc3ODsKICAgIHQubXUgPSA1NTY7CiAgICB0LmlncmF2ZSA9IDI3ODsKICAgIHQub2h1bmdhcnVtbGF1dCA9IDU1NjsKICAgIHQuRW9nb25layA9IDY2NzsKICAgIHQuZGNyb2F0ID0gNTU2OwogICAgdC50aHJlZXF1YXJ0ZXJzID0gODM0OwogICAgdC5TY2VkaWxsYSA9IDY2NzsKICAgIHQubGNhcm9uID0gMjk5OwogICAgdC5LY29tbWFhY2NlbnQgPSA2Njc7CiAgICB0LkxhY3V0ZSA9IDU1NjsKICAgIHQudHJhZGVtYXJrID0gMTAwMDsKICAgIHQuZWRvdGFjY2VudCA9IDU1NjsKICAgIHQuSWdyYXZlID0gMjc4OwogICAgdC5JbWFjcm9uID0gMjc4OwogICAgdC5MY2Fyb24gPSA1NTY7CiAgICB0Lm9uZWhhbGYgPSA4MzQ7CiAgICB0Lmxlc3NlcXVhbCA9IDU0OTsKICAgIHQub2NpcmN1bWZsZXggPSA1NTY7CiAgICB0Lm50aWxkZSA9IDU1NjsKICAgIHQuVWh1bmdhcnVtbGF1dCA9IDcyMjsKICAgIHQuRWFjdXRlID0gNjY3OwogICAgdC5lbWFjcm9uID0gNTU2OwogICAgdC5nYnJldmUgPSA1NTY7CiAgICB0Lm9uZXF1YXJ0ZXIgPSA4MzQ7CiAgICB0LlNjYXJvbiA9IDY2NzsKICAgIHQuU2NvbW1hYWNjZW50ID0gNjY3OwogICAgdC5PaHVuZ2FydW1sYXV0ID0gNzc4OwogICAgdC5kZWdyZWUgPSA0MDA7CiAgICB0Lm9ncmF2ZSA9IDU1NjsKICAgIHQuQ2Nhcm9uID0gNzIyOwogICAgdC51Z3JhdmUgPSA1NTY7CiAgICB0LnJhZGljYWwgPSA0NTM7CiAgICB0LkRjYXJvbiA9IDcyMjsKICAgIHQucmNvbW1hYWNjZW50ID0gMzMzOwogICAgdC5OdGlsZGUgPSA3MjI7CiAgICB0Lm90aWxkZSA9IDU1NjsKICAgIHQuUmNvbW1hYWNjZW50ID0gNzIyOwogICAgdC5MY29tbWFhY2NlbnQgPSA1NTY7CiAgICB0LkF0aWxkZSA9IDY2NzsKICAgIHQuQW9nb25layA9IDY2NzsKICAgIHQuQXJpbmcgPSA2Njc7CiAgICB0Lk90aWxkZSA9IDc3ODsKICAgIHQuemRvdGFjY2VudCA9IDUwMDsKICAgIHQuRWNhcm9uID0gNjY3OwogICAgdC5Jb2dvbmVrID0gMjc4OwogICAgdC5rY29tbWFhY2NlbnQgPSA1MDA7CiAgICB0Lm1pbnVzID0gNTg0OwogICAgdC5JY2lyY3VtZmxleCA9IDI3ODsKICAgIHQubmNhcm9uID0gNTU2OwogICAgdC50Y29tbWFhY2NlbnQgPSAyNzg7CiAgICB0LmxvZ2ljYWxub3QgPSA1ODQ7CiAgICB0Lm9kaWVyZXNpcyA9IDU1NjsKICAgIHQudWRpZXJlc2lzID0gNTU2OwogICAgdC5ub3RlcXVhbCA9IDU0OTsKICAgIHQuZ2NvbW1hYWNjZW50ID0gNTU2OwogICAgdC5ldGggPSA1NTY7CiAgICB0LnpjYXJvbiA9IDUwMDsKICAgIHQubmNvbW1hYWNjZW50ID0gNTU2OwogICAgdC5vbmVzdXBlcmlvciA9IDMzMzsKICAgIHQuaW1hY3JvbiA9IDI3ODsKICAgIHQuRXVybyA9IDU1NjsKICB9KTsKICB0WyJIZWx2ZXRpY2EtQm9sZCJdID0gZ2V0TG9va3VwVGFibGVGYWN0b3J5KGZ1bmN0aW9uICh0KSB7CiAgICB0LnNwYWNlID0gMjc4OwogICAgdC5leGNsYW0gPSAzMzM7CiAgICB0LnF1b3RlZGJsID0gNDc0OwogICAgdC5udW1iZXJzaWduID0gNTU2OwogICAgdC5kb2xsYXIgPSA1NTY7CiAgICB0LnBlcmNlbnQgPSA4ODk7CiAgICB0LmFtcGVyc2FuZCA9IDcyMjsKICAgIHQucXVvdGVyaWdodCA9IDI3ODsKICAgIHQucGFyZW5sZWZ0ID0gMzMzOwogICAgdC5wYXJlbnJpZ2h0ID0gMzMzOwogICAgdC5hc3RlcmlzayA9IDM4OTsKICAgIHQucGx1cyA9IDU4NDsKICAgIHQuY29tbWEgPSAyNzg7CiAgICB0Lmh5cGhlbiA9IDMzMzsKICAgIHQucGVyaW9kID0gMjc4OwogICAgdC5zbGFzaCA9IDI3ODsKICAgIHQuemVybyA9IDU1NjsKICAgIHQub25lID0gNTU2OwogICAgdC50d28gPSA1NTY7CiAgICB0LnRocmVlID0gNTU2OwogICAgdC5mb3VyID0gNTU2OwogICAgdC5maXZlID0gNTU2OwogICAgdC5zaXggPSA1NTY7CiAgICB0LnNldmVuID0gNTU2OwogICAgdC5laWdodCA9IDU1NjsKICAgIHQubmluZSA9IDU1NjsKICAgIHQuY29sb24gPSAzMzM7CiAgICB0LnNlbWljb2xvbiA9IDMzMzsKICAgIHQubGVzcyA9IDU4NDsKICAgIHQuZXF1YWwgPSA1ODQ7CiAgICB0LmdyZWF0ZXIgPSA1ODQ7CiAgICB0LnF1ZXN0aW9uID0gNjExOwogICAgdC5hdCA9IDk3NTsKICAgIHQuQSA9IDcyMjsKICAgIHQuQiA9IDcyMjsKICAgIHQuQyA9IDcyMjsKICAgIHQuRCA9IDcyMjsKICAgIHQuRSA9IDY2NzsKICAgIHQuRiA9IDYxMTsKICAgIHQuRyA9IDc3ODsKICAgIHQuSCA9IDcyMjsKICAgIHQuSSA9IDI3ODsKICAgIHQuSiA9IDU1NjsKICAgIHQuSyA9IDcyMjsKICAgIHQuTCA9IDYxMTsKICAgIHQuTSA9IDgzMzsKICAgIHQuTiA9IDcyMjsKICAgIHQuTyA9IDc3ODsKICAgIHQuUCA9IDY2NzsKICAgIHQuUSA9IDc3ODsKICAgIHQuUiA9IDcyMjsKICAgIHQuUyA9IDY2NzsKICAgIHQuVCA9IDYxMTsKICAgIHQuVSA9IDcyMjsKICAgIHQuViA9IDY2NzsKICAgIHQuVyA9IDk0NDsKICAgIHQuWCA9IDY2NzsKICAgIHQuWSA9IDY2NzsKICAgIHQuWiA9IDYxMTsKICAgIHQuYnJhY2tldGxlZnQgPSAzMzM7CiAgICB0LmJhY2tzbGFzaCA9IDI3ODsKICAgIHQuYnJhY2tldHJpZ2h0ID0gMzMzOwogICAgdC5hc2NpaWNpcmN1bSA9IDU4NDsKICAgIHQudW5kZXJzY29yZSA9IDU1NjsKICAgIHQucXVvdGVsZWZ0ID0gMjc4OwogICAgdC5hID0gNTU2OwogICAgdC5iID0gNjExOwogICAgdC5jID0gNTU2OwogICAgdC5kID0gNjExOwogICAgdC5lID0gNTU2OwogICAgdC5mID0gMzMzOwogICAgdC5nID0gNjExOwogICAgdC5oID0gNjExOwogICAgdC5pID0gMjc4OwogICAgdC5qID0gMjc4OwogICAgdC5rID0gNTU2OwogICAgdC5sID0gMjc4OwogICAgdC5tID0gODg5OwogICAgdC5uID0gNjExOwogICAgdC5vID0gNjExOwogICAgdC5wID0gNjExOwogICAgdC5xID0gNjExOwogICAgdC5yID0gMzg5OwogICAgdC5zID0gNTU2OwogICAgdC50ID0gMzMzOwogICAgdC51ID0gNjExOwogICAgdC52ID0gNTU2OwogICAgdC53ID0gNzc4OwogICAgdC54ID0gNTU2OwogICAgdC55ID0gNTU2OwogICAgdC56ID0gNTAwOwogICAgdC5icmFjZWxlZnQgPSAzODk7CiAgICB0LmJhciA9IDI4MDsKICAgIHQuYnJhY2VyaWdodCA9IDM4OTsKICAgIHQuYXNjaWl0aWxkZSA9IDU4NDsKICAgIHQuZXhjbGFtZG93biA9IDMzMzsKICAgIHQuY2VudCA9IDU1NjsKICAgIHQuc3RlcmxpbmcgPSA1NTY7CiAgICB0LmZyYWN0aW9uID0gMTY3OwogICAgdC55ZW4gPSA1NTY7CiAgICB0LmZsb3JpbiA9IDU1NjsKICAgIHQuc2VjdGlvbiA9IDU1NjsKICAgIHQuY3VycmVuY3kgPSA1NTY7CiAgICB0LnF1b3Rlc2luZ2xlID0gMjM4OwogICAgdC5xdW90ZWRibGxlZnQgPSA1MDA7CiAgICB0Lmd1aWxsZW1vdGxlZnQgPSA1NTY7CiAgICB0Lmd1aWxzaW5nbGxlZnQgPSAzMzM7CiAgICB0Lmd1aWxzaW5nbHJpZ2h0ID0gMzMzOwogICAgdC5maSA9IDYxMTsKICAgIHQuZmwgPSA2MTE7CiAgICB0LmVuZGFzaCA9IDU1NjsKICAgIHQuZGFnZ2VyID0gNTU2OwogICAgdC5kYWdnZXJkYmwgPSA1NTY7CiAgICB0LnBlcmlvZGNlbnRlcmVkID0gMjc4OwogICAgdC5wYXJhZ3JhcGggPSA1NTY7CiAgICB0LmJ1bGxldCA9IDM1MDsKICAgIHQucXVvdGVzaW5nbGJhc2UgPSAyNzg7CiAgICB0LnF1b3RlZGJsYmFzZSA9IDUwMDsKICAgIHQucXVvdGVkYmxyaWdodCA9IDUwMDsKICAgIHQuZ3VpbGxlbW90cmlnaHQgPSA1NTY7CiAgICB0LmVsbGlwc2lzID0gMTAwMDsKICAgIHQucGVydGhvdXNhbmQgPSAxMDAwOwogICAgdC5xdWVzdGlvbmRvd24gPSA2MTE7CiAgICB0LmdyYXZlID0gMzMzOwogICAgdC5hY3V0ZSA9IDMzMzsKICAgIHQuY2lyY3VtZmxleCA9IDMzMzsKICAgIHQudGlsZGUgPSAzMzM7CiAgICB0Lm1hY3JvbiA9IDMzMzsKICAgIHQuYnJldmUgPSAzMzM7CiAgICB0LmRvdGFjY2VudCA9IDMzMzsKICAgIHQuZGllcmVzaXMgPSAzMzM7CiAgICB0LnJpbmcgPSAzMzM7CiAgICB0LmNlZGlsbGEgPSAzMzM7CiAgICB0Lmh1bmdhcnVtbGF1dCA9IDMzMzsKICAgIHQub2dvbmVrID0gMzMzOwogICAgdC5jYXJvbiA9IDMzMzsKICAgIHQuZW1kYXNoID0gMTAwMDsKICAgIHQuQUUgPSAxMDAwOwogICAgdC5vcmRmZW1pbmluZSA9IDM3MDsKICAgIHQuTHNsYXNoID0gNjExOwogICAgdC5Pc2xhc2ggPSA3Nzg7CiAgICB0Lk9FID0gMTAwMDsKICAgIHQub3JkbWFzY3VsaW5lID0gMzY1OwogICAgdC5hZSA9IDg4OTsKICAgIHQuZG90bGVzc2kgPSAyNzg7CiAgICB0LmxzbGFzaCA9IDI3ODsKICAgIHQub3NsYXNoID0gNjExOwogICAgdC5vZSA9IDk0NDsKICAgIHQuZ2VybWFuZGJscyA9IDYxMTsKICAgIHQuSWRpZXJlc2lzID0gMjc4OwogICAgdC5lYWN1dGUgPSA1NTY7CiAgICB0LmFicmV2ZSA9IDU1NjsKICAgIHQudWh1bmdhcnVtbGF1dCA9IDYxMTsKICAgIHQuZWNhcm9uID0gNTU2OwogICAgdC5ZZGllcmVzaXMgPSA2Njc7CiAgICB0LmRpdmlkZSA9IDU4NDsKICAgIHQuWWFjdXRlID0gNjY3OwogICAgdC5BY2lyY3VtZmxleCA9IDcyMjsKICAgIHQuYWFjdXRlID0gNTU2OwogICAgdC5VY2lyY3VtZmxleCA9IDcyMjsKICAgIHQueWFjdXRlID0gNTU2OwogICAgdC5zY29tbWFhY2NlbnQgPSA1NTY7CiAgICB0LmVjaXJjdW1mbGV4ID0gNTU2OwogICAgdC5VcmluZyA9IDcyMjsKICAgIHQuVWRpZXJlc2lzID0gNzIyOwogICAgdC5hb2dvbmVrID0gNTU2OwogICAgdC5VYWN1dGUgPSA3MjI7CiAgICB0LnVvZ29uZWsgPSA2MTE7CiAgICB0LkVkaWVyZXNpcyA9IDY2NzsKICAgIHQuRGNyb2F0ID0gNzIyOwogICAgdC5jb21tYWFjY2VudCA9IDI1MDsKICAgIHQuY29weXJpZ2h0ID0gNzM3OwogICAgdC5FbWFjcm9uID0gNjY3OwogICAgdC5jY2Fyb24gPSA1NTY7CiAgICB0LmFyaW5nID0gNTU2OwogICAgdC5OY29tbWFhY2NlbnQgPSA3MjI7CiAgICB0LmxhY3V0ZSA9IDI3ODsKICAgIHQuYWdyYXZlID0gNTU2OwogICAgdC5UY29tbWFhY2NlbnQgPSA2MTE7CiAgICB0LkNhY3V0ZSA9IDcyMjsKICAgIHQuYXRpbGRlID0gNTU2OwogICAgdC5FZG90YWNjZW50ID0gNjY3OwogICAgdC5zY2Fyb24gPSA1NTY7CiAgICB0LnNjZWRpbGxhID0gNTU2OwogICAgdC5pYWN1dGUgPSAyNzg7CiAgICB0LmxvemVuZ2UgPSA0OTQ7CiAgICB0LlJjYXJvbiA9IDcyMjsKICAgIHQuR2NvbW1hYWNjZW50ID0gNzc4OwogICAgdC51Y2lyY3VtZmxleCA9IDYxMTsKICAgIHQuYWNpcmN1bWZsZXggPSA1NTY7CiAgICB0LkFtYWNyb24gPSA3MjI7CiAgICB0LnJjYXJvbiA9IDM4OTsKICAgIHQuY2NlZGlsbGEgPSA1NTY7CiAgICB0Llpkb3RhY2NlbnQgPSA2MTE7CiAgICB0LlRob3JuID0gNjY3OwogICAgdC5PbWFjcm9uID0gNzc4OwogICAgdC5SYWN1dGUgPSA3MjI7CiAgICB0LlNhY3V0ZSA9IDY2NzsKICAgIHQuZGNhcm9uID0gNzQzOwogICAgdC5VbWFjcm9uID0gNzIyOwogICAgdC51cmluZyA9IDYxMTsKICAgIHQudGhyZWVzdXBlcmlvciA9IDMzMzsKICAgIHQuT2dyYXZlID0gNzc4OwogICAgdC5BZ3JhdmUgPSA3MjI7CiAgICB0LkFicmV2ZSA9IDcyMjsKICAgIHQubXVsdGlwbHkgPSA1ODQ7CiAgICB0LnVhY3V0ZSA9IDYxMTsKICAgIHQuVGNhcm9uID0gNjExOwogICAgdC5wYXJ0aWFsZGlmZiA9IDQ5NDsKICAgIHQueWRpZXJlc2lzID0gNTU2OwogICAgdC5OYWN1dGUgPSA3MjI7CiAgICB0LmljaXJjdW1mbGV4ID0gMjc4OwogICAgdC5FY2lyY3VtZmxleCA9IDY2NzsKICAgIHQuYWRpZXJlc2lzID0gNTU2OwogICAgdC5lZGllcmVzaXMgPSA1NTY7CiAgICB0LmNhY3V0ZSA9IDU1NjsKICAgIHQubmFjdXRlID0gNjExOwogICAgdC51bWFjcm9uID0gNjExOwogICAgdC5OY2Fyb24gPSA3MjI7CiAgICB0LklhY3V0ZSA9IDI3ODsKICAgIHQucGx1c21pbnVzID0gNTg0OwogICAgdC5icm9rZW5iYXIgPSAyODA7CiAgICB0LnJlZ2lzdGVyZWQgPSA3Mzc7CiAgICB0LkdicmV2ZSA9IDc3ODsKICAgIHQuSWRvdGFjY2VudCA9IDI3ODsKICAgIHQuc3VtbWF0aW9uID0gNjAwOwogICAgdC5FZ3JhdmUgPSA2Njc7CiAgICB0LnJhY3V0ZSA9IDM4OTsKICAgIHQub21hY3JvbiA9IDYxMTsKICAgIHQuWmFjdXRlID0gNjExOwogICAgdC5aY2Fyb24gPSA2MTE7CiAgICB0LmdyZWF0ZXJlcXVhbCA9IDU0OTsKICAgIHQuRXRoID0gNzIyOwogICAgdC5DY2VkaWxsYSA9IDcyMjsKICAgIHQubGNvbW1hYWNjZW50ID0gMjc4OwogICAgdC50Y2Fyb24gPSAzODk7CiAgICB0LmVvZ29uZWsgPSA1NTY7CiAgICB0LlVvZ29uZWsgPSA3MjI7CiAgICB0LkFhY3V0ZSA9IDcyMjsKICAgIHQuQWRpZXJlc2lzID0gNzIyOwogICAgdC5lZ3JhdmUgPSA1NTY7CiAgICB0LnphY3V0ZSA9IDUwMDsKICAgIHQuaW9nb25layA9IDI3ODsKICAgIHQuT2FjdXRlID0gNzc4OwogICAgdC5vYWN1dGUgPSA2MTE7CiAgICB0LmFtYWNyb24gPSA1NTY7CiAgICB0LnNhY3V0ZSA9IDU1NjsKICAgIHQuaWRpZXJlc2lzID0gMjc4OwogICAgdC5PY2lyY3VtZmxleCA9IDc3ODsKICAgIHQuVWdyYXZlID0gNzIyOwogICAgdC5EZWx0YSA9IDYxMjsKICAgIHQudGhvcm4gPSA2MTE7CiAgICB0LnR3b3N1cGVyaW9yID0gMzMzOwogICAgdC5PZGllcmVzaXMgPSA3Nzg7CiAgICB0Lm11ID0gNjExOwogICAgdC5pZ3JhdmUgPSAyNzg7CiAgICB0Lm9odW5nYXJ1bWxhdXQgPSA2MTE7CiAgICB0LkVvZ29uZWsgPSA2Njc7CiAgICB0LmRjcm9hdCA9IDYxMTsKICAgIHQudGhyZWVxdWFydGVycyA9IDgzNDsKICAgIHQuU2NlZGlsbGEgPSA2Njc7CiAgICB0LmxjYXJvbiA9IDQwMDsKICAgIHQuS2NvbW1hYWNjZW50ID0gNzIyOwogICAgdC5MYWN1dGUgPSA2MTE7CiAgICB0LnRyYWRlbWFyayA9IDEwMDA7CiAgICB0LmVkb3RhY2NlbnQgPSA1NTY7CiAgICB0LklncmF2ZSA9IDI3ODsKICAgIHQuSW1hY3JvbiA9IDI3ODsKICAgIHQuTGNhcm9uID0gNjExOwogICAgdC5vbmVoYWxmID0gODM0OwogICAgdC5sZXNzZXF1YWwgPSA1NDk7CiAgICB0Lm9jaXJjdW1mbGV4ID0gNjExOwogICAgdC5udGlsZGUgPSA2MTE7CiAgICB0LlVodW5nYXJ1bWxhdXQgPSA3MjI7CiAgICB0LkVhY3V0ZSA9IDY2NzsKICAgIHQuZW1hY3JvbiA9IDU1NjsKICAgIHQuZ2JyZXZlID0gNjExOwogICAgdC5vbmVxdWFydGVyID0gODM0OwogICAgdC5TY2Fyb24gPSA2Njc7CiAgICB0LlNjb21tYWFjY2VudCA9IDY2NzsKICAgIHQuT2h1bmdhcnVtbGF1dCA9IDc3ODsKICAgIHQuZGVncmVlID0gNDAwOwogICAgdC5vZ3JhdmUgPSA2MTE7CiAgICB0LkNjYXJvbiA9IDcyMjsKICAgIHQudWdyYXZlID0gNjExOwogICAgdC5yYWRpY2FsID0gNTQ5OwogICAgdC5EY2Fyb24gPSA3MjI7CiAgICB0LnJjb21tYWFjY2VudCA9IDM4OTsKICAgIHQuTnRpbGRlID0gNzIyOwogICAgdC5vdGlsZGUgPSA2MTE7CiAgICB0LlJjb21tYWFjY2VudCA9IDcyMjsKICAgIHQuTGNvbW1hYWNjZW50ID0gNjExOwogICAgdC5BdGlsZGUgPSA3MjI7CiAgICB0LkFvZ29uZWsgPSA3MjI7CiAgICB0LkFyaW5nID0gNzIyOwogICAgdC5PdGlsZGUgPSA3Nzg7CiAgICB0Lnpkb3RhY2NlbnQgPSA1MDA7CiAgICB0LkVjYXJvbiA9IDY2NzsKICAgIHQuSW9nb25layA9IDI3ODsKICAgIHQua2NvbW1hYWNjZW50ID0gNTU2OwogICAgdC5taW51cyA9IDU4NDsKICAgIHQuSWNpcmN1bWZsZXggPSAyNzg7CiAgICB0Lm5jYXJvbiA9IDYxMTsKICAgIHQudGNvbW1hYWNjZW50ID0gMzMzOwogICAgdC5sb2dpY2Fsbm90ID0gNTg0OwogICAgdC5vZGllcmVzaXMgPSA2MTE7CiAgICB0LnVkaWVyZXNpcyA9IDYxMTsKICAgIHQubm90ZXF1YWwgPSA1NDk7CiAgICB0Lmdjb21tYWFjY2VudCA9IDYxMTsKICAgIHQuZXRoID0gNjExOwogICAgdC56Y2Fyb24gPSA1MDA7CiAgICB0Lm5jb21tYWFjY2VudCA9IDYxMTsKICAgIHQub25lc3VwZXJpb3IgPSAzMzM7CiAgICB0LmltYWNyb24gPSAyNzg7CiAgICB0LkV1cm8gPSA1NTY7CiAgfSk7CiAgdFsiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIl0gPSBnZXRMb29rdXBUYWJsZUZhY3RvcnkoZnVuY3Rpb24gKHQpIHsKICAgIHQuc3BhY2UgPSAyNzg7CiAgICB0LmV4Y2xhbSA9IDMzMzsKICAgIHQucXVvdGVkYmwgPSA0NzQ7CiAgICB0Lm51bWJlcnNpZ24gPSA1NTY7CiAgICB0LmRvbGxhciA9IDU1NjsKICAgIHQucGVyY2VudCA9IDg4OTsKICAgIHQuYW1wZXJzYW5kID0gNzIyOwogICAgdC5xdW90ZXJpZ2h0ID0gMjc4OwogICAgdC5wYXJlbmxlZnQgPSAzMzM7CiAgICB0LnBhcmVucmlnaHQgPSAzMzM7CiAgICB0LmFzdGVyaXNrID0gMzg5OwogICAgdC5wbHVzID0gNTg0OwogICAgdC5jb21tYSA9IDI3ODsKICAgIHQuaHlwaGVuID0gMzMzOwogICAgdC5wZXJpb2QgPSAyNzg7CiAgICB0LnNsYXNoID0gMjc4OwogICAgdC56ZXJvID0gNTU2OwogICAgdC5vbmUgPSA1NTY7CiAgICB0LnR3byA9IDU1NjsKICAgIHQudGhyZWUgPSA1NTY7CiAgICB0LmZvdXIgPSA1NTY7CiAgICB0LmZpdmUgPSA1NTY7CiAgICB0LnNpeCA9IDU1NjsKICAgIHQuc2V2ZW4gPSA1NTY7CiAgICB0LmVpZ2h0ID0gNTU2OwogICAgdC5uaW5lID0gNTU2OwogICAgdC5jb2xvbiA9IDMzMzsKICAgIHQuc2VtaWNvbG9uID0gMzMzOwogICAgdC5sZXNzID0gNTg0OwogICAgdC5lcXVhbCA9IDU4NDsKICAgIHQuZ3JlYXRlciA9IDU4NDsKICAgIHQucXVlc3Rpb24gPSA2MTE7CiAgICB0LmF0ID0gOTc1OwogICAgdC5BID0gNzIyOwogICAgdC5CID0gNzIyOwogICAgdC5DID0gNzIyOwogICAgdC5EID0gNzIyOwogICAgdC5FID0gNjY3OwogICAgdC5GID0gNjExOwogICAgdC5HID0gNzc4OwogICAgdC5IID0gNzIyOwogICAgdC5JID0gMjc4OwogICAgdC5KID0gNTU2OwogICAgdC5LID0gNzIyOwogICAgdC5MID0gNjExOwogICAgdC5NID0gODMzOwogICAgdC5OID0gNzIyOwogICAgdC5PID0gNzc4OwogICAgdC5QID0gNjY3OwogICAgdC5RID0gNzc4OwogICAgdC5SID0gNzIyOwogICAgdC5TID0gNjY3OwogICAgdC5UID0gNjExOwogICAgdC5VID0gNzIyOwogICAgdC5WID0gNjY3OwogICAgdC5XID0gOTQ0OwogICAgdC5YID0gNjY3OwogICAgdC5ZID0gNjY3OwogICAgdC5aID0gNjExOwogICAgdC5icmFja2V0bGVmdCA9IDMzMzsKICAgIHQuYmFja3NsYXNoID0gMjc4OwogICAgdC5icmFja2V0cmlnaHQgPSAzMzM7CiAgICB0LmFzY2lpY2lyY3VtID0gNTg0OwogICAgdC51bmRlcnNjb3JlID0gNTU2OwogICAgdC5xdW90ZWxlZnQgPSAyNzg7CiAgICB0LmEgPSA1NTY7CiAgICB0LmIgPSA2MTE7CiAgICB0LmMgPSA1NTY7CiAgICB0LmQgPSA2MTE7CiAgICB0LmUgPSA1NTY7CiAgICB0LmYgPSAzMzM7CiAgICB0LmcgPSA2MTE7CiAgICB0LmggPSA2MTE7CiAgICB0LmkgPSAyNzg7CiAgICB0LmogPSAyNzg7CiAgICB0LmsgPSA1NTY7CiAgICB0LmwgPSAyNzg7CiAgICB0Lm0gPSA4ODk7CiAgICB0Lm4gPSA2MTE7CiAgICB0Lm8gPSA2MTE7CiAgICB0LnAgPSA2MTE7CiAgICB0LnEgPSA2MTE7CiAgICB0LnIgPSAzODk7CiAgICB0LnMgPSA1NTY7CiAgICB0LnQgPSAzMzM7CiAgICB0LnUgPSA2MTE7CiAgICB0LnYgPSA1NTY7CiAgICB0LncgPSA3Nzg7CiAgICB0LnggPSA1NTY7CiAgICB0LnkgPSA1NTY7CiAgICB0LnogPSA1MDA7CiAgICB0LmJyYWNlbGVmdCA9IDM4OTsKICAgIHQuYmFyID0gMjgwOwogICAgdC5icmFjZXJpZ2h0ID0gMzg5OwogICAgdC5hc2NpaXRpbGRlID0gNTg0OwogICAgdC5leGNsYW1kb3duID0gMzMzOwogICAgdC5jZW50ID0gNTU2OwogICAgdC5zdGVybGluZyA9IDU1NjsKICAgIHQuZnJhY3Rpb24gPSAxNjc7CiAgICB0LnllbiA9IDU1NjsKICAgIHQuZmxvcmluID0gNTU2OwogICAgdC5zZWN0aW9uID0gNTU2OwogICAgdC5jdXJyZW5jeSA9IDU1NjsKICAgIHQucXVvdGVzaW5nbGUgPSAyMzg7CiAgICB0LnF1b3RlZGJsbGVmdCA9IDUwMDsKICAgIHQuZ3VpbGxlbW90bGVmdCA9IDU1NjsKICAgIHQuZ3VpbHNpbmdsbGVmdCA9IDMzMzsKICAgIHQuZ3VpbHNpbmdscmlnaHQgPSAzMzM7CiAgICB0LmZpID0gNjExOwogICAgdC5mbCA9IDYxMTsKICAgIHQuZW5kYXNoID0gNTU2OwogICAgdC5kYWdnZXIgPSA1NTY7CiAgICB0LmRhZ2dlcmRibCA9IDU1NjsKICAgIHQucGVyaW9kY2VudGVyZWQgPSAyNzg7CiAgICB0LnBhcmFncmFwaCA9IDU1NjsKICAgIHQuYnVsbGV0ID0gMzUwOwogICAgdC5xdW90ZXNpbmdsYmFzZSA9IDI3ODsKICAgIHQucXVvdGVkYmxiYXNlID0gNTAwOwogICAgdC5xdW90ZWRibHJpZ2h0ID0gNTAwOwogICAgdC5ndWlsbGVtb3RyaWdodCA9IDU1NjsKICAgIHQuZWxsaXBzaXMgPSAxMDAwOwogICAgdC5wZXJ0aG91c2FuZCA9IDEwMDA7CiAgICB0LnF1ZXN0aW9uZG93biA9IDYxMTsKICAgIHQuZ3JhdmUgPSAzMzM7CiAgICB0LmFjdXRlID0gMzMzOwogICAgdC5jaXJjdW1mbGV4ID0gMzMzOwogICAgdC50aWxkZSA9IDMzMzsKICAgIHQubWFjcm9uID0gMzMzOwogICAgdC5icmV2ZSA9IDMzMzsKICAgIHQuZG90YWNjZW50ID0gMzMzOwogICAgdC5kaWVyZXNpcyA9IDMzMzsKICAgIHQucmluZyA9IDMzMzsKICAgIHQuY2VkaWxsYSA9IDMzMzsKICAgIHQuaHVuZ2FydW1sYXV0ID0gMzMzOwogICAgdC5vZ29uZWsgPSAzMzM7CiAgICB0LmNhcm9uID0gMzMzOwogICAgdC5lbWRhc2ggPSAxMDAwOwogICAgdC5BRSA9IDEwMDA7CiAgICB0Lm9yZGZlbWluaW5lID0gMzcwOwogICAgdC5Mc2xhc2ggPSA2MTE7CiAgICB0Lk9zbGFzaCA9IDc3ODsKICAgIHQuT0UgPSAxMDAwOwogICAgdC5vcmRtYXNjdWxpbmUgPSAzNjU7CiAgICB0LmFlID0gODg5OwogICAgdC5kb3RsZXNzaSA9IDI3ODsKICAgIHQubHNsYXNoID0gMjc4OwogICAgdC5vc2xhc2ggPSA2MTE7CiAgICB0Lm9lID0gOTQ0OwogICAgdC5nZXJtYW5kYmxzID0gNjExOwogICAgdC5JZGllcmVzaXMgPSAyNzg7CiAgICB0LmVhY3V0ZSA9IDU1NjsKICAgIHQuYWJyZXZlID0gNTU2OwogICAgdC51aHVuZ2FydW1sYXV0ID0gNjExOwogICAgdC5lY2Fyb24gPSA1NTY7CiAgICB0LllkaWVyZXNpcyA9IDY2NzsKICAgIHQuZGl2aWRlID0gNTg0OwogICAgdC5ZYWN1dGUgPSA2Njc7CiAgICB0LkFjaXJjdW1mbGV4ID0gNzIyOwogICAgdC5hYWN1dGUgPSA1NTY7CiAgICB0LlVjaXJjdW1mbGV4ID0gNzIyOwogICAgdC55YWN1dGUgPSA1NTY7CiAgICB0LnNjb21tYWFjY2VudCA9IDU1NjsKICAgIHQuZWNpcmN1bWZsZXggPSA1NTY7CiAgICB0LlVyaW5nID0gNzIyOwogICAgdC5VZGllcmVzaXMgPSA3MjI7CiAgICB0LmFvZ29uZWsgPSA1NTY7CiAgICB0LlVhY3V0ZSA9IDcyMjsKICAgIHQudW9nb25layA9IDYxMTsKICAgIHQuRWRpZXJlc2lzID0gNjY3OwogICAgdC5EY3JvYXQgPSA3MjI7CiAgICB0LmNvbW1hYWNjZW50ID0gMjUwOwogICAgdC5jb3B5cmlnaHQgPSA3Mzc7CiAgICB0LkVtYWNyb24gPSA2Njc7CiAgICB0LmNjYXJvbiA9IDU1NjsKICAgIHQuYXJpbmcgPSA1NTY7CiAgICB0Lk5jb21tYWFjY2VudCA9IDcyMjsKICAgIHQubGFjdXRlID0gMjc4OwogICAgdC5hZ3JhdmUgPSA1NTY7CiAgICB0LlRjb21tYWFjY2VudCA9IDYxMTsKICAgIHQuQ2FjdXRlID0gNzIyOwogICAgdC5hdGlsZGUgPSA1NTY7CiAgICB0LkVkb3RhY2NlbnQgPSA2Njc7CiAgICB0LnNjYXJvbiA9IDU1NjsKICAgIHQuc2NlZGlsbGEgPSA1NTY7CiAgICB0LmlhY3V0ZSA9IDI3ODsKICAgIHQubG96ZW5nZSA9IDQ5NDsKICAgIHQuUmNhcm9uID0gNzIyOwogICAgdC5HY29tbWFhY2NlbnQgPSA3Nzg7CiAgICB0LnVjaXJjdW1mbGV4ID0gNjExOwogICAgdC5hY2lyY3VtZmxleCA9IDU1NjsKICAgIHQuQW1hY3JvbiA9IDcyMjsKICAgIHQucmNhcm9uID0gMzg5OwogICAgdC5jY2VkaWxsYSA9IDU1NjsKICAgIHQuWmRvdGFjY2VudCA9IDYxMTsKICAgIHQuVGhvcm4gPSA2Njc7CiAgICB0Lk9tYWNyb24gPSA3Nzg7CiAgICB0LlJhY3V0ZSA9IDcyMjsKICAgIHQuU2FjdXRlID0gNjY3OwogICAgdC5kY2Fyb24gPSA3NDM7CiAgICB0LlVtYWNyb24gPSA3MjI7CiAgICB0LnVyaW5nID0gNjExOwogICAgdC50aHJlZXN1cGVyaW9yID0gMzMzOwogICAgdC5PZ3JhdmUgPSA3Nzg7CiAgICB0LkFncmF2ZSA9IDcyMjsKICAgIHQuQWJyZXZlID0gNzIyOwogICAgdC5tdWx0aXBseSA9IDU4NDsKICAgIHQudWFjdXRlID0gNjExOwogICAgdC5UY2Fyb24gPSA2MTE7CiAgICB0LnBhcnRpYWxkaWZmID0gNDk0OwogICAgdC55ZGllcmVzaXMgPSA1NTY7CiAgICB0Lk5hY3V0ZSA9IDcyMjsKICAgIHQuaWNpcmN1bWZsZXggPSAyNzg7CiAgICB0LkVjaXJjdW1mbGV4ID0gNjY3OwogICAgdC5hZGllcmVzaXMgPSA1NTY7CiAgICB0LmVkaWVyZXNpcyA9IDU1NjsKICAgIHQuY2FjdXRlID0gNTU2OwogICAgdC5uYWN1dGUgPSA2MTE7CiAgICB0LnVtYWNyb24gPSA2MTE7CiAgICB0Lk5jYXJvbiA9IDcyMjsKICAgIHQuSWFjdXRlID0gMjc4OwogICAgdC5wbHVzbWludXMgPSA1ODQ7CiAgICB0LmJyb2tlbmJhciA9IDI4MDsKICAgIHQucmVnaXN0ZXJlZCA9IDczNzsKICAgIHQuR2JyZXZlID0gNzc4OwogICAgdC5JZG90YWNjZW50ID0gMjc4OwogICAgdC5zdW1tYXRpb24gPSA2MDA7CiAgICB0LkVncmF2ZSA9IDY2NzsKICAgIHQucmFjdXRlID0gMzg5OwogICAgdC5vbWFjcm9uID0gNjExOwogICAgdC5aYWN1dGUgPSA2MTE7CiAgICB0LlpjYXJvbiA9IDYxMTsKICAgIHQuZ3JlYXRlcmVxdWFsID0gNTQ5OwogICAgdC5FdGggPSA3MjI7CiAgICB0LkNjZWRpbGxhID0gNzIyOwogICAgdC5sY29tbWFhY2NlbnQgPSAyNzg7CiAgICB0LnRjYXJvbiA9IDM4OTsKICAgIHQuZW9nb25layA9IDU1NjsKICAgIHQuVW9nb25layA9IDcyMjsKICAgIHQuQWFjdXRlID0gNzIyOwogICAgdC5BZGllcmVzaXMgPSA3MjI7CiAgICB0LmVncmF2ZSA9IDU1NjsKICAgIHQuemFjdXRlID0gNTAwOwogICAgdC5pb2dvbmVrID0gMjc4OwogICAgdC5PYWN1dGUgPSA3Nzg7CiAgICB0Lm9hY3V0ZSA9IDYxMTsKICAgIHQuYW1hY3JvbiA9IDU1NjsKICAgIHQuc2FjdXRlID0gNTU2OwogICAgdC5pZGllcmVzaXMgPSAyNzg7CiAgICB0Lk9jaXJjdW1mbGV4ID0gNzc4OwogICAgdC5VZ3JhdmUgPSA3MjI7CiAgICB0LkRlbHRhID0gNjEyOwogICAgdC50aG9ybiA9IDYxMTsKICAgIHQudHdvc3VwZXJpb3IgPSAzMzM7CiAgICB0Lk9kaWVyZXNpcyA9IDc3ODsKICAgIHQubXUgPSA2MTE7CiAgICB0LmlncmF2ZSA9IDI3ODsKICAgIHQub2h1bmdhcnVtbGF1dCA9IDYxMTsKICAgIHQuRW9nb25layA9IDY2NzsKICAgIHQuZGNyb2F0ID0gNjExOwogICAgdC50aHJlZXF1YXJ0ZXJzID0gODM0OwogICAgdC5TY2VkaWxsYSA9IDY2NzsKICAgIHQubGNhcm9uID0gNDAwOwogICAgdC5LY29tbWFhY2NlbnQgPSA3MjI7CiAgICB0LkxhY3V0ZSA9IDYxMTsKICAgIHQudHJhZGVtYXJrID0gMTAwMDsKICAgIHQuZWRvdGFjY2VudCA9IDU1NjsKICAgIHQuSWdyYXZlID0gMjc4OwogICAgdC5JbWFjcm9uID0gMjc4OwogICAgdC5MY2Fyb24gPSA2MTE7CiAgICB0Lm9uZWhhbGYgPSA4MzQ7CiAgICB0Lmxlc3NlcXVhbCA9IDU0OTsKICAgIHQub2NpcmN1bWZsZXggPSA2MTE7CiAgICB0Lm50aWxkZSA9IDYxMTsKICAgIHQuVWh1bmdhcnVtbGF1dCA9IDcyMjsKICAgIHQuRWFjdXRlID0gNjY3OwogICAgdC5lbWFjcm9uID0gNTU2OwogICAgdC5nYnJldmUgPSA2MTE7CiAgICB0Lm9uZXF1YXJ0ZXIgPSA4MzQ7CiAgICB0LlNjYXJvbiA9IDY2NzsKICAgIHQuU2NvbW1hYWNjZW50ID0gNjY3OwogICAgdC5PaHVuZ2FydW1sYXV0ID0gNzc4OwogICAgdC5kZWdyZWUgPSA0MDA7CiAgICB0Lm9ncmF2ZSA9IDYxMTsKICAgIHQuQ2Nhcm9uID0gNzIyOwogICAgdC51Z3JhdmUgPSA2MTE7CiAgICB0LnJhZGljYWwgPSA1NDk7CiAgICB0LkRjYXJvbiA9IDcyMjsKICAgIHQucmNvbW1hYWNjZW50ID0gMzg5OwogICAgdC5OdGlsZGUgPSA3MjI7CiAgICB0Lm90aWxkZSA9IDYxMTsKICAgIHQuUmNvbW1hYWNjZW50ID0gNzIyOwogICAgdC5MY29tbWFhY2NlbnQgPSA2MTE7CiAgICB0LkF0aWxkZSA9IDcyMjsKICAgIHQuQW9nb25layA9IDcyMjsKICAgIHQuQXJpbmcgPSA3MjI7CiAgICB0Lk90aWxkZSA9IDc3ODsKICAgIHQuemRvdGFjY2VudCA9IDUwMDsKICAgIHQuRWNhcm9uID0gNjY3OwogICAgdC5Jb2dvbmVrID0gMjc4OwogICAgdC5rY29tbWFhY2NlbnQgPSA1NTY7CiAgICB0Lm1pbnVzID0gNTg0OwogICAgdC5JY2lyY3VtZmxleCA9IDI3ODsKICAgIHQubmNhcm9uID0gNjExOwogICAgdC50Y29tbWFhY2NlbnQgPSAzMzM7CiAgICB0LmxvZ2ljYWxub3QgPSA1ODQ7CiAgICB0Lm9kaWVyZXNpcyA9IDYxMTsKICAgIHQudWRpZXJlc2lzID0gNjExOwogICAgdC5ub3RlcXVhbCA9IDU0OTsKICAgIHQuZ2NvbW1hYWNjZW50ID0gNjExOwogICAgdC5ldGggPSA2MTE7CiAgICB0LnpjYXJvbiA9IDUwMDsKICAgIHQubmNvbW1hYWNjZW50ID0gNjExOwogICAgdC5vbmVzdXBlcmlvciA9IDMzMzsKICAgIHQuaW1hY3JvbiA9IDI3ODsKICAgIHQuRXVybyA9IDU1NjsKICB9KTsKICB0WyJIZWx2ZXRpY2EtT2JsaXF1ZSJdID0gZ2V0TG9va3VwVGFibGVGYWN0b3J5KGZ1bmN0aW9uICh0KSB7CiAgICB0LnNwYWNlID0gMjc4OwogICAgdC5leGNsYW0gPSAyNzg7CiAgICB0LnF1b3RlZGJsID0gMzU1OwogICAgdC5udW1iZXJzaWduID0gNTU2OwogICAgdC5kb2xsYXIgPSA1NTY7CiAgICB0LnBlcmNlbnQgPSA4ODk7CiAgICB0LmFtcGVyc2FuZCA9IDY2NzsKICAgIHQucXVvdGVyaWdodCA9IDIyMjsKICAgIHQucGFyZW5sZWZ0ID0gMzMzOwogICAgdC5wYXJlbnJpZ2h0ID0gMzMzOwogICAgdC5hc3RlcmlzayA9IDM4OTsKICAgIHQucGx1cyA9IDU4NDsKICAgIHQuY29tbWEgPSAyNzg7CiAgICB0Lmh5cGhlbiA9IDMzMzsKICAgIHQucGVyaW9kID0gMjc4OwogICAgdC5zbGFzaCA9IDI3ODsKICAgIHQuemVybyA9IDU1NjsKICAgIHQub25lID0gNTU2OwogICAgdC50d28gPSA1NTY7CiAgICB0LnRocmVlID0gNTU2OwogICAgdC5mb3VyID0gNTU2OwogICAgdC5maXZlID0gNTU2OwogICAgdC5zaXggPSA1NTY7CiAgICB0LnNldmVuID0gNTU2OwogICAgdC5laWdodCA9IDU1NjsKICAgIHQubmluZSA9IDU1NjsKICAgIHQuY29sb24gPSAyNzg7CiAgICB0LnNlbWljb2xvbiA9IDI3ODsKICAgIHQubGVzcyA9IDU4NDsKICAgIHQuZXF1YWwgPSA1ODQ7CiAgICB0LmdyZWF0ZXIgPSA1ODQ7CiAgICB0LnF1ZXN0aW9uID0gNTU2OwogICAgdC5hdCA9IDEwMTU7CiAgICB0LkEgPSA2Njc7CiAgICB0LkIgPSA2Njc7CiAgICB0LkMgPSA3MjI7CiAgICB0LkQgPSA3MjI7CiAgICB0LkUgPSA2Njc7CiAgICB0LkYgPSA2MTE7CiAgICB0LkcgPSA3Nzg7CiAgICB0LkggPSA3MjI7CiAgICB0LkkgPSAyNzg7CiAgICB0LkogPSA1MDA7CiAgICB0LksgPSA2Njc7CiAgICB0LkwgPSA1NTY7CiAgICB0Lk0gPSA4MzM7CiAgICB0Lk4gPSA3MjI7CiAgICB0Lk8gPSA3Nzg7CiAgICB0LlAgPSA2Njc7CiAgICB0LlEgPSA3Nzg7CiAgICB0LlIgPSA3MjI7CiAgICB0LlMgPSA2Njc7CiAgICB0LlQgPSA2MTE7CiAgICB0LlUgPSA3MjI7CiAgICB0LlYgPSA2Njc7CiAgICB0LlcgPSA5NDQ7CiAgICB0LlggPSA2Njc7CiAgICB0LlkgPSA2Njc7CiAgICB0LlogPSA2MTE7CiAgICB0LmJyYWNrZXRsZWZ0ID0gMjc4OwogICAgdC5iYWNrc2xhc2ggPSAyNzg7CiAgICB0LmJyYWNrZXRyaWdodCA9IDI3ODsKICAgIHQuYXNjaWljaXJjdW0gPSA0Njk7CiAgICB0LnVuZGVyc2NvcmUgPSA1NTY7CiAgICB0LnF1b3RlbGVmdCA9IDIyMjsKICAgIHQuYSA9IDU1NjsKICAgIHQuYiA9IDU1NjsKICAgIHQuYyA9IDUwMDsKICAgIHQuZCA9IDU1NjsKICAgIHQuZSA9IDU1NjsKICAgIHQuZiA9IDI3ODsKICAgIHQuZyA9IDU1NjsKICAgIHQuaCA9IDU1NjsKICAgIHQuaSA9IDIyMjsKICAgIHQuaiA9IDIyMjsKICAgIHQuayA9IDUwMDsKICAgIHQubCA9IDIyMjsKICAgIHQubSA9IDgzMzsKICAgIHQubiA9IDU1NjsKICAgIHQubyA9IDU1NjsKICAgIHQucCA9IDU1NjsKICAgIHQucSA9IDU1NjsKICAgIHQuciA9IDMzMzsKICAgIHQucyA9IDUwMDsKICAgIHQudCA9IDI3ODsKICAgIHQudSA9IDU1NjsKICAgIHQudiA9IDUwMDsKICAgIHQudyA9IDcyMjsKICAgIHQueCA9IDUwMDsKICAgIHQueSA9IDUwMDsKICAgIHQueiA9IDUwMDsKICAgIHQuYnJhY2VsZWZ0ID0gMzM0OwogICAgdC5iYXIgPSAyNjA7CiAgICB0LmJyYWNlcmlnaHQgPSAzMzQ7CiAgICB0LmFzY2lpdGlsZGUgPSA1ODQ7CiAgICB0LmV4Y2xhbWRvd24gPSAzMzM7CiAgICB0LmNlbnQgPSA1NTY7CiAgICB0LnN0ZXJsaW5nID0gNTU2OwogICAgdC5mcmFjdGlvbiA9IDE2NzsKICAgIHQueWVuID0gNTU2OwogICAgdC5mbG9yaW4gPSA1NTY7CiAgICB0LnNlY3Rpb24gPSA1NTY7CiAgICB0LmN1cnJlbmN5ID0gNTU2OwogICAgdC5xdW90ZXNpbmdsZSA9IDE5MTsKICAgIHQucXVvdGVkYmxsZWZ0ID0gMzMzOwogICAgdC5ndWlsbGVtb3RsZWZ0ID0gNTU2OwogICAgdC5ndWlsc2luZ2xsZWZ0ID0gMzMzOwogICAgdC5ndWlsc2luZ2xyaWdodCA9IDMzMzsKICAgIHQuZmkgPSA1MDA7CiAgICB0LmZsID0gNTAwOwogICAgdC5lbmRhc2ggPSA1NTY7CiAgICB0LmRhZ2dlciA9IDU1NjsKICAgIHQuZGFnZ2VyZGJsID0gNTU2OwogICAgdC5wZXJpb2RjZW50ZXJlZCA9IDI3ODsKICAgIHQucGFyYWdyYXBoID0gNTM3OwogICAgdC5idWxsZXQgPSAzNTA7CiAgICB0LnF1b3Rlc2luZ2xiYXNlID0gMjIyOwogICAgdC5xdW90ZWRibGJhc2UgPSAzMzM7CiAgICB0LnF1b3RlZGJscmlnaHQgPSAzMzM7CiAgICB0Lmd1aWxsZW1vdHJpZ2h0ID0gNTU2OwogICAgdC5lbGxpcHNpcyA9IDEwMDA7CiAgICB0LnBlcnRob3VzYW5kID0gMTAwMDsKICAgIHQucXVlc3Rpb25kb3duID0gNjExOwogICAgdC5ncmF2ZSA9IDMzMzsKICAgIHQuYWN1dGUgPSAzMzM7CiAgICB0LmNpcmN1bWZsZXggPSAzMzM7CiAgICB0LnRpbGRlID0gMzMzOwogICAgdC5tYWNyb24gPSAzMzM7CiAgICB0LmJyZXZlID0gMzMzOwogICAgdC5kb3RhY2NlbnQgPSAzMzM7CiAgICB0LmRpZXJlc2lzID0gMzMzOwogICAgdC5yaW5nID0gMzMzOwogICAgdC5jZWRpbGxhID0gMzMzOwogICAgdC5odW5nYXJ1bWxhdXQgPSAzMzM7CiAgICB0Lm9nb25layA9IDMzMzsKICAgIHQuY2Fyb24gPSAzMzM7CiAgICB0LmVtZGFzaCA9IDEwMDA7CiAgICB0LkFFID0gMTAwMDsKICAgIHQub3JkZmVtaW5pbmUgPSAzNzA7CiAgICB0LkxzbGFzaCA9IDU1NjsKICAgIHQuT3NsYXNoID0gNzc4OwogICAgdC5PRSA9IDEwMDA7CiAgICB0Lm9yZG1hc2N1bGluZSA9IDM2NTsKICAgIHQuYWUgPSA4ODk7CiAgICB0LmRvdGxlc3NpID0gMjc4OwogICAgdC5sc2xhc2ggPSAyMjI7CiAgICB0Lm9zbGFzaCA9IDYxMTsKICAgIHQub2UgPSA5NDQ7CiAgICB0Lmdlcm1hbmRibHMgPSA2MTE7CiAgICB0LklkaWVyZXNpcyA9IDI3ODsKICAgIHQuZWFjdXRlID0gNTU2OwogICAgdC5hYnJldmUgPSA1NTY7CiAgICB0LnVodW5nYXJ1bWxhdXQgPSA1NTY7CiAgICB0LmVjYXJvbiA9IDU1NjsKICAgIHQuWWRpZXJlc2lzID0gNjY3OwogICAgdC5kaXZpZGUgPSA1ODQ7CiAgICB0LllhY3V0ZSA9IDY2NzsKICAgIHQuQWNpcmN1bWZsZXggPSA2Njc7CiAgICB0LmFhY3V0ZSA9IDU1NjsKICAgIHQuVWNpcmN1bWZsZXggPSA3MjI7CiAgICB0LnlhY3V0ZSA9IDUwMDsKICAgIHQuc2NvbW1hYWNjZW50ID0gNTAwOwogICAgdC5lY2lyY3VtZmxleCA9IDU1NjsKICAgIHQuVXJpbmcgPSA3MjI7CiAgICB0LlVkaWVyZXNpcyA9IDcyMjsKICAgIHQuYW9nb25layA9IDU1NjsKICAgIHQuVWFjdXRlID0gNzIyOwogICAgdC51b2dvbmVrID0gNTU2OwogICAgdC5FZGllcmVzaXMgPSA2Njc7CiAgICB0LkRjcm9hdCA9IDcyMjsKICAgIHQuY29tbWFhY2NlbnQgPSAyNTA7CiAgICB0LmNvcHlyaWdodCA9IDczNzsKICAgIHQuRW1hY3JvbiA9IDY2NzsKICAgIHQuY2Nhcm9uID0gNTAwOwogICAgdC5hcmluZyA9IDU1NjsKICAgIHQuTmNvbW1hYWNjZW50ID0gNzIyOwogICAgdC5sYWN1dGUgPSAyMjI7CiAgICB0LmFncmF2ZSA9IDU1NjsKICAgIHQuVGNvbW1hYWNjZW50ID0gNjExOwogICAgdC5DYWN1dGUgPSA3MjI7CiAgICB0LmF0aWxkZSA9IDU1NjsKICAgIHQuRWRvdGFjY2VudCA9IDY2NzsKICAgIHQuc2Nhcm9uID0gNTAwOwogICAgdC5zY2VkaWxsYSA9IDUwMDsKICAgIHQuaWFjdXRlID0gMjc4OwogICAgdC5sb3plbmdlID0gNDcxOwogICAgdC5SY2Fyb24gPSA3MjI7CiAgICB0Lkdjb21tYWFjY2VudCA9IDc3ODsKICAgIHQudWNpcmN1bWZsZXggPSA1NTY7CiAgICB0LmFjaXJjdW1mbGV4ID0gNTU2OwogICAgdC5BbWFjcm9uID0gNjY3OwogICAgdC5yY2Fyb24gPSAzMzM7CiAgICB0LmNjZWRpbGxhID0gNTAwOwogICAgdC5aZG90YWNjZW50ID0gNjExOwogICAgdC5UaG9ybiA9IDY2NzsKICAgIHQuT21hY3JvbiA9IDc3ODsKICAgIHQuUmFjdXRlID0gNzIyOwogICAgdC5TYWN1dGUgPSA2Njc7CiAgICB0LmRjYXJvbiA9IDY0MzsKICAgIHQuVW1hY3JvbiA9IDcyMjsKICAgIHQudXJpbmcgPSA1NTY7CiAgICB0LnRocmVlc3VwZXJpb3IgPSAzMzM7CiAgICB0Lk9ncmF2ZSA9IDc3ODsKICAgIHQuQWdyYXZlID0gNjY3OwogICAgdC5BYnJldmUgPSA2Njc7CiAgICB0Lm11bHRpcGx5ID0gNTg0OwogICAgdC51YWN1dGUgPSA1NTY7CiAgICB0LlRjYXJvbiA9IDYxMTsKICAgIHQucGFydGlhbGRpZmYgPSA0NzY7CiAgICB0LnlkaWVyZXNpcyA9IDUwMDsKICAgIHQuTmFjdXRlID0gNzIyOwogICAgdC5pY2lyY3VtZmxleCA9IDI3ODsKICAgIHQuRWNpcmN1bWZsZXggPSA2Njc7CiAgICB0LmFkaWVyZXNpcyA9IDU1NjsKICAgIHQuZWRpZXJlc2lzID0gNTU2OwogICAgdC5jYWN1dGUgPSA1MDA7CiAgICB0Lm5hY3V0ZSA9IDU1NjsKICAgIHQudW1hY3JvbiA9IDU1NjsKICAgIHQuTmNhcm9uID0gNzIyOwogICAgdC5JYWN1dGUgPSAyNzg7CiAgICB0LnBsdXNtaW51cyA9IDU4NDsKICAgIHQuYnJva2VuYmFyID0gMjYwOwogICAgdC5yZWdpc3RlcmVkID0gNzM3OwogICAgdC5HYnJldmUgPSA3Nzg7CiAgICB0Lklkb3RhY2NlbnQgPSAyNzg7CiAgICB0LnN1bW1hdGlvbiA9IDYwMDsKICAgIHQuRWdyYXZlID0gNjY3OwogICAgdC5yYWN1dGUgPSAzMzM7CiAgICB0Lm9tYWNyb24gPSA1NTY7CiAgICB0LlphY3V0ZSA9IDYxMTsKICAgIHQuWmNhcm9uID0gNjExOwogICAgdC5ncmVhdGVyZXF1YWwgPSA1NDk7CiAgICB0LkV0aCA9IDcyMjsKICAgIHQuQ2NlZGlsbGEgPSA3MjI7CiAgICB0Lmxjb21tYWFjY2VudCA9IDIyMjsKICAgIHQudGNhcm9uID0gMzE3OwogICAgdC5lb2dvbmVrID0gNTU2OwogICAgdC5Vb2dvbmVrID0gNzIyOwogICAgdC5BYWN1dGUgPSA2Njc7CiAgICB0LkFkaWVyZXNpcyA9IDY2NzsKICAgIHQuZWdyYXZlID0gNTU2OwogICAgdC56YWN1dGUgPSA1MDA7CiAgICB0LmlvZ29uZWsgPSAyMjI7CiAgICB0Lk9hY3V0ZSA9IDc3ODsKICAgIHQub2FjdXRlID0gNTU2OwogICAgdC5hbWFjcm9uID0gNTU2OwogICAgdC5zYWN1dGUgPSA1MDA7CiAgICB0LmlkaWVyZXNpcyA9IDI3ODsKICAgIHQuT2NpcmN1bWZsZXggPSA3Nzg7CiAgICB0LlVncmF2ZSA9IDcyMjsKICAgIHQuRGVsdGEgPSA2MTI7CiAgICB0LnRob3JuID0gNTU2OwogICAgdC50d29zdXBlcmlvciA9IDMzMzsKICAgIHQuT2RpZXJlc2lzID0gNzc4OwogICAgdC5tdSA9IDU1NjsKICAgIHQuaWdyYXZlID0gMjc4OwogICAgdC5vaHVuZ2FydW1sYXV0ID0gNTU2OwogICAgdC5Fb2dvbmVrID0gNjY3OwogICAgdC5kY3JvYXQgPSA1NTY7CiAgICB0LnRocmVlcXVhcnRlcnMgPSA4MzQ7CiAgICB0LlNjZWRpbGxhID0gNjY3OwogICAgdC5sY2Fyb24gPSAyOTk7CiAgICB0Lktjb21tYWFjY2VudCA9IDY2NzsKICAgIHQuTGFjdXRlID0gNTU2OwogICAgdC50cmFkZW1hcmsgPSAxMDAwOwogICAgdC5lZG90YWNjZW50ID0gNTU2OwogICAgdC5JZ3JhdmUgPSAyNzg7CiAgICB0LkltYWNyb24gPSAyNzg7CiAgICB0LkxjYXJvbiA9IDU1NjsKICAgIHQub25laGFsZiA9IDgzNDsKICAgIHQubGVzc2VxdWFsID0gNTQ5OwogICAgdC5vY2lyY3VtZmxleCA9IDU1NjsKICAgIHQubnRpbGRlID0gNTU2OwogICAgdC5VaHVuZ2FydW1sYXV0ID0gNzIyOwogICAgdC5FYWN1dGUgPSA2Njc7CiAgICB0LmVtYWNyb24gPSA1NTY7CiAgICB0LmdicmV2ZSA9IDU1NjsKICAgIHQub25lcXVhcnRlciA9IDgzNDsKICAgIHQuU2Nhcm9uID0gNjY3OwogICAgdC5TY29tbWFhY2NlbnQgPSA2Njc7CiAgICB0Lk9odW5nYXJ1bWxhdXQgPSA3Nzg7CiAgICB0LmRlZ3JlZSA9IDQwMDsKICAgIHQub2dyYXZlID0gNTU2OwogICAgdC5DY2Fyb24gPSA3MjI7CiAgICB0LnVncmF2ZSA9IDU1NjsKICAgIHQucmFkaWNhbCA9IDQ1MzsKICAgIHQuRGNhcm9uID0gNzIyOwogICAgdC5yY29tbWFhY2NlbnQgPSAzMzM7CiAgICB0Lk50aWxkZSA9IDcyMjsKICAgIHQub3RpbGRlID0gNTU2OwogICAgdC5SY29tbWFhY2NlbnQgPSA3MjI7CiAgICB0Lkxjb21tYWFjY2VudCA9IDU1NjsKICAgIHQuQXRpbGRlID0gNjY3OwogICAgdC5Bb2dvbmVrID0gNjY3OwogICAgdC5BcmluZyA9IDY2NzsKICAgIHQuT3RpbGRlID0gNzc4OwogICAgdC56ZG90YWNjZW50ID0gNTAwOwogICAgdC5FY2Fyb24gPSA2Njc7CiAgICB0LklvZ29uZWsgPSAyNzg7CiAgICB0Lmtjb21tYWFjY2VudCA9IDUwMDsKICAgIHQubWludXMgPSA1ODQ7CiAgICB0LkljaXJjdW1mbGV4ID0gMjc4OwogICAgdC5uY2Fyb24gPSA1NTY7CiAgICB0LnRjb21tYWFjY2VudCA9IDI3ODsKICAgIHQubG9naWNhbG5vdCA9IDU4NDsKICAgIHQub2RpZXJlc2lzID0gNTU2OwogICAgdC51ZGllcmVzaXMgPSA1NTY7CiAgICB0Lm5vdGVxdWFsID0gNTQ5OwogICAgdC5nY29tbWFhY2NlbnQgPSA1NTY7CiAgICB0LmV0aCA9IDU1NjsKICAgIHQuemNhcm9uID0gNTAwOwogICAgdC5uY29tbWFhY2NlbnQgPSA1NTY7CiAgICB0Lm9uZXN1cGVyaW9yID0gMzMzOwogICAgdC5pbWFjcm9uID0gMjc4OwogICAgdC5FdXJvID0gNTU2OwogIH0pOwogIHQuU3ltYm9sID0gZ2V0TG9va3VwVGFibGVGYWN0b3J5KGZ1bmN0aW9uICh0KSB7CiAgICB0LnNwYWNlID0gMjUwOwogICAgdC5leGNsYW0gPSAzMzM7CiAgICB0LnVuaXZlcnNhbCA9IDcxMzsKICAgIHQubnVtYmVyc2lnbiA9IDUwMDsKICAgIHQuZXhpc3RlbnRpYWwgPSA1NDk7CiAgICB0LnBlcmNlbnQgPSA4MzM7CiAgICB0LmFtcGVyc2FuZCA9IDc3ODsKICAgIHQuc3VjaHRoYXQgPSA0Mzk7CiAgICB0LnBhcmVubGVmdCA9IDMzMzsKICAgIHQucGFyZW5yaWdodCA9IDMzMzsKICAgIHQuYXN0ZXJpc2ttYXRoID0gNTAwOwogICAgdC5wbHVzID0gNTQ5OwogICAgdC5jb21tYSA9IDI1MDsKICAgIHQubWludXMgPSA1NDk7CiAgICB0LnBlcmlvZCA9IDI1MDsKICAgIHQuc2xhc2ggPSAyNzg7CiAgICB0Lnplcm8gPSA1MDA7CiAgICB0Lm9uZSA9IDUwMDsKICAgIHQudHdvID0gNTAwOwogICAgdC50aHJlZSA9IDUwMDsKICAgIHQuZm91ciA9IDUwMDsKICAgIHQuZml2ZSA9IDUwMDsKICAgIHQuc2l4ID0gNTAwOwogICAgdC5zZXZlbiA9IDUwMDsKICAgIHQuZWlnaHQgPSA1MDA7CiAgICB0Lm5pbmUgPSA1MDA7CiAgICB0LmNvbG9uID0gMjc4OwogICAgdC5zZW1pY29sb24gPSAyNzg7CiAgICB0Lmxlc3MgPSA1NDk7CiAgICB0LmVxdWFsID0gNTQ5OwogICAgdC5ncmVhdGVyID0gNTQ5OwogICAgdC5xdWVzdGlvbiA9IDQ0NDsKICAgIHQuY29uZ3J1ZW50ID0gNTQ5OwogICAgdC5BbHBoYSA9IDcyMjsKICAgIHQuQmV0YSA9IDY2NzsKICAgIHQuQ2hpID0gNzIyOwogICAgdC5EZWx0YSA9IDYxMjsKICAgIHQuRXBzaWxvbiA9IDYxMTsKICAgIHQuUGhpID0gNzYzOwogICAgdC5HYW1tYSA9IDYwMzsKICAgIHQuRXRhID0gNzIyOwogICAgdC5Jb3RhID0gMzMzOwogICAgdC50aGV0YTEgPSA2MzE7CiAgICB0LkthcHBhID0gNzIyOwogICAgdC5MYW1iZGEgPSA2ODY7CiAgICB0Lk11ID0gODg5OwogICAgdC5OdSA9IDcyMjsKICAgIHQuT21pY3JvbiA9IDcyMjsKICAgIHQuUGkgPSA3Njg7CiAgICB0LlRoZXRhID0gNzQxOwogICAgdC5SaG8gPSA1NTY7CiAgICB0LlNpZ21hID0gNTkyOwogICAgdC5UYXUgPSA2MTE7CiAgICB0LlVwc2lsb24gPSA2OTA7CiAgICB0LnNpZ21hMSA9IDQzOTsKICAgIHQuT21lZ2EgPSA3Njg7CiAgICB0LlhpID0gNjQ1OwogICAgdC5Qc2kgPSA3OTU7CiAgICB0LlpldGEgPSA2MTE7CiAgICB0LmJyYWNrZXRsZWZ0ID0gMzMzOwogICAgdC50aGVyZWZvcmUgPSA4NjM7CiAgICB0LmJyYWNrZXRyaWdodCA9IDMzMzsKICAgIHQucGVycGVuZGljdWxhciA9IDY1ODsKICAgIHQudW5kZXJzY29yZSA9IDUwMDsKICAgIHQucmFkaWNhbGV4ID0gNTAwOwogICAgdC5hbHBoYSA9IDYzMTsKICAgIHQuYmV0YSA9IDU0OTsKICAgIHQuY2hpID0gNTQ5OwogICAgdC5kZWx0YSA9IDQ5NDsKICAgIHQuZXBzaWxvbiA9IDQzOTsKICAgIHQucGhpID0gNTIxOwogICAgdC5nYW1tYSA9IDQxMTsKICAgIHQuZXRhID0gNjAzOwogICAgdC5pb3RhID0gMzI5OwogICAgdC5waGkxID0gNjAzOwogICAgdC5rYXBwYSA9IDU0OTsKICAgIHQubGFtYmRhID0gNTQ5OwogICAgdC5tdSA9IDU3NjsKICAgIHQubnUgPSA1MjE7CiAgICB0Lm9taWNyb24gPSA1NDk7CiAgICB0LnBpID0gNTQ5OwogICAgdC50aGV0YSA9IDUyMTsKICAgIHQucmhvID0gNTQ5OwogICAgdC5zaWdtYSA9IDYwMzsKICAgIHQudGF1ID0gNDM5OwogICAgdC51cHNpbG9uID0gNTc2OwogICAgdC5vbWVnYTEgPSA3MTM7CiAgICB0Lm9tZWdhID0gNjg2OwogICAgdC54aSA9IDQ5MzsKICAgIHQucHNpID0gNjg2OwogICAgdC56ZXRhID0gNDk0OwogICAgdC5icmFjZWxlZnQgPSA0ODA7CiAgICB0LmJhciA9IDIwMDsKICAgIHQuYnJhY2VyaWdodCA9IDQ4MDsKICAgIHQuc2ltaWxhciA9IDU0OTsKICAgIHQuRXVybyA9IDc1MDsKICAgIHQuVXBzaWxvbjEgPSA2MjA7CiAgICB0Lm1pbnV0ZSA9IDI0NzsKICAgIHQubGVzc2VxdWFsID0gNTQ5OwogICAgdC5mcmFjdGlvbiA9IDE2NzsKICAgIHQuaW5maW5pdHkgPSA3MTM7CiAgICB0LmZsb3JpbiA9IDUwMDsKICAgIHQuY2x1YiA9IDc1MzsKICAgIHQuZGlhbW9uZCA9IDc1MzsKICAgIHQuaGVhcnQgPSA3NTM7CiAgICB0LnNwYWRlID0gNzUzOwogICAgdC5hcnJvd2JvdGggPSAxMDQyOwogICAgdC5hcnJvd2xlZnQgPSA5ODc7CiAgICB0LmFycm93dXAgPSA2MDM7CiAgICB0LmFycm93cmlnaHQgPSA5ODc7CiAgICB0LmFycm93ZG93biA9IDYwMzsKICAgIHQuZGVncmVlID0gNDAwOwogICAgdC5wbHVzbWludXMgPSA1NDk7CiAgICB0LnNlY29uZCA9IDQxMTsKICAgIHQuZ3JlYXRlcmVxdWFsID0gNTQ5OwogICAgdC5tdWx0aXBseSA9IDU0OTsKICAgIHQucHJvcG9ydGlvbmFsID0gNzEzOwogICAgdC5wYXJ0aWFsZGlmZiA9IDQ5NDsKICAgIHQuYnVsbGV0ID0gNDYwOwogICAgdC5kaXZpZGUgPSA1NDk7CiAgICB0Lm5vdGVxdWFsID0gNTQ5OwogICAgdC5lcXVpdmFsZW5jZSA9IDU0OTsKICAgIHQuYXBwcm94ZXF1YWwgPSA1NDk7CiAgICB0LmVsbGlwc2lzID0gMTAwMDsKICAgIHQuYXJyb3d2ZXJ0ZXggPSA2MDM7CiAgICB0LmFycm93aG9yaXpleCA9IDEwMDA7CiAgICB0LmNhcnJpYWdlcmV0dXJuID0gNjU4OwogICAgdC5hbGVwaCA9IDgyMzsKICAgIHQuSWZyYWt0dXIgPSA2ODY7CiAgICB0LlJmcmFrdHVyID0gNzk1OwogICAgdC53ZWllcnN0cmFzcyA9IDk4NzsKICAgIHQuY2lyY2xlbXVsdGlwbHkgPSA3Njg7CiAgICB0LmNpcmNsZXBsdXMgPSA3Njg7CiAgICB0LmVtcHR5c2V0ID0gODIzOwogICAgdC5pbnRlcnNlY3Rpb24gPSA3Njg7CiAgICB0LnVuaW9uID0gNzY4OwogICAgdC5wcm9wZXJzdXBlcnNldCA9IDcxMzsKICAgIHQucmVmbGV4c3VwZXJzZXQgPSA3MTM7CiAgICB0Lm5vdHN1YnNldCA9IDcxMzsKICAgIHQucHJvcGVyc3Vic2V0ID0gNzEzOwogICAgdC5yZWZsZXhzdWJzZXQgPSA3MTM7CiAgICB0LmVsZW1lbnQgPSA3MTM7CiAgICB0Lm5vdGVsZW1lbnQgPSA3MTM7CiAgICB0LmFuZ2xlID0gNzY4OwogICAgdC5ncmFkaWVudCA9IDcxMzsKICAgIHQucmVnaXN0ZXJzZXJpZiA9IDc5MDsKICAgIHQuY29weXJpZ2h0c2VyaWYgPSA3OTA7CiAgICB0LnRyYWRlbWFya3NlcmlmID0gODkwOwogICAgdC5wcm9kdWN0ID0gODIzOwogICAgdC5yYWRpY2FsID0gNTQ5OwogICAgdC5kb3RtYXRoID0gMjUwOwogICAgdC5sb2dpY2Fsbm90ID0gNzEzOwogICAgdC5sb2dpY2FsYW5kID0gNjAzOwogICAgdC5sb2dpY2Fsb3IgPSA2MDM7CiAgICB0LmFycm93ZGJsYm90aCA9IDEwNDI7CiAgICB0LmFycm93ZGJsbGVmdCA9IDk4NzsKICAgIHQuYXJyb3dkYmx1cCA9IDYwMzsKICAgIHQuYXJyb3dkYmxyaWdodCA9IDk4NzsKICAgIHQuYXJyb3dkYmxkb3duID0gNjAzOwogICAgdC5sb3plbmdlID0gNDk0OwogICAgdC5hbmdsZWxlZnQgPSAzMjk7CiAgICB0LnJlZ2lzdGVyc2FucyA9IDc5MDsKICAgIHQuY29weXJpZ2h0c2FucyA9IDc5MDsKICAgIHQudHJhZGVtYXJrc2FucyA9IDc4NjsKICAgIHQuc3VtbWF0aW9uID0gNzEzOwogICAgdC5wYXJlbmxlZnR0cCA9IDM4NDsKICAgIHQucGFyZW5sZWZ0ZXggPSAzODQ7CiAgICB0LnBhcmVubGVmdGJ0ID0gMzg0OwogICAgdC5icmFja2V0bGVmdHRwID0gMzg0OwogICAgdC5icmFja2V0bGVmdGV4ID0gMzg0OwogICAgdC5icmFja2V0bGVmdGJ0ID0gMzg0OwogICAgdC5icmFjZWxlZnR0cCA9IDQ5NDsKICAgIHQuYnJhY2VsZWZ0bWlkID0gNDk0OwogICAgdC5icmFjZWxlZnRidCA9IDQ5NDsKICAgIHQuYnJhY2VleCA9IDQ5NDsKICAgIHQuYW5nbGVyaWdodCA9IDMyOTsKICAgIHQuaW50ZWdyYWwgPSAyNzQ7CiAgICB0LmludGVncmFsdHAgPSA2ODY7CiAgICB0LmludGVncmFsZXggPSA2ODY7CiAgICB0LmludGVncmFsYnQgPSA2ODY7CiAgICB0LnBhcmVucmlnaHR0cCA9IDM4NDsKICAgIHQucGFyZW5yaWdodGV4ID0gMzg0OwogICAgdC5wYXJlbnJpZ2h0YnQgPSAzODQ7CiAgICB0LmJyYWNrZXRyaWdodHRwID0gMzg0OwogICAgdC5icmFja2V0cmlnaHRleCA9IDM4NDsKICAgIHQuYnJhY2tldHJpZ2h0YnQgPSAzODQ7CiAgICB0LmJyYWNlcmlnaHR0cCA9IDQ5NDsKICAgIHQuYnJhY2VyaWdodG1pZCA9IDQ5NDsKICAgIHQuYnJhY2VyaWdodGJ0ID0gNDk0OwogICAgdC5hcHBsZSA9IDc5MDsKICB9KTsKICB0WyJUaW1lcy1Sb21hbiJdID0gZ2V0TG9va3VwVGFibGVGYWN0b3J5KGZ1bmN0aW9uICh0KSB7CiAgICB0LnNwYWNlID0gMjUwOwogICAgdC5leGNsYW0gPSAzMzM7CiAgICB0LnF1b3RlZGJsID0gNDA4OwogICAgdC5udW1iZXJzaWduID0gNTAwOwogICAgdC5kb2xsYXIgPSA1MDA7CiAgICB0LnBlcmNlbnQgPSA4MzM7CiAgICB0LmFtcGVyc2FuZCA9IDc3ODsKICAgIHQucXVvdGVyaWdodCA9IDMzMzsKICAgIHQucGFyZW5sZWZ0ID0gMzMzOwogICAgdC5wYXJlbnJpZ2h0ID0gMzMzOwogICAgdC5hc3RlcmlzayA9IDUwMDsKICAgIHQucGx1cyA9IDU2NDsKICAgIHQuY29tbWEgPSAyNTA7CiAgICB0Lmh5cGhlbiA9IDMzMzsKICAgIHQucGVyaW9kID0gMjUwOwogICAgdC5zbGFzaCA9IDI3ODsKICAgIHQuemVybyA9IDUwMDsKICAgIHQub25lID0gNTAwOwogICAgdC50d28gPSA1MDA7CiAgICB0LnRocmVlID0gNTAwOwogICAgdC5mb3VyID0gNTAwOwogICAgdC5maXZlID0gNTAwOwogICAgdC5zaXggPSA1MDA7CiAgICB0LnNldmVuID0gNTAwOwogICAgdC5laWdodCA9IDUwMDsKICAgIHQubmluZSA9IDUwMDsKICAgIHQuY29sb24gPSAyNzg7CiAgICB0LnNlbWljb2xvbiA9IDI3ODsKICAgIHQubGVzcyA9IDU2NDsKICAgIHQuZXF1YWwgPSA1NjQ7CiAgICB0LmdyZWF0ZXIgPSA1NjQ7CiAgICB0LnF1ZXN0aW9uID0gNDQ0OwogICAgdC5hdCA9IDkyMTsKICAgIHQuQSA9IDcyMjsKICAgIHQuQiA9IDY2NzsKICAgIHQuQyA9IDY2NzsKICAgIHQuRCA9IDcyMjsKICAgIHQuRSA9IDYxMTsKICAgIHQuRiA9IDU1NjsKICAgIHQuRyA9IDcyMjsKICAgIHQuSCA9IDcyMjsKICAgIHQuSSA9IDMzMzsKICAgIHQuSiA9IDM4OTsKICAgIHQuSyA9IDcyMjsKICAgIHQuTCA9IDYxMTsKICAgIHQuTSA9IDg4OTsKICAgIHQuTiA9IDcyMjsKICAgIHQuTyA9IDcyMjsKICAgIHQuUCA9IDU1NjsKICAgIHQuUSA9IDcyMjsKICAgIHQuUiA9IDY2NzsKICAgIHQuUyA9IDU1NjsKICAgIHQuVCA9IDYxMTsKICAgIHQuVSA9IDcyMjsKICAgIHQuViA9IDcyMjsKICAgIHQuVyA9IDk0NDsKICAgIHQuWCA9IDcyMjsKICAgIHQuWSA9IDcyMjsKICAgIHQuWiA9IDYxMTsKICAgIHQuYnJhY2tldGxlZnQgPSAzMzM7CiAgICB0LmJhY2tzbGFzaCA9IDI3ODsKICAgIHQuYnJhY2tldHJpZ2h0ID0gMzMzOwogICAgdC5hc2NpaWNpcmN1bSA9IDQ2OTsKICAgIHQudW5kZXJzY29yZSA9IDUwMDsKICAgIHQucXVvdGVsZWZ0ID0gMzMzOwogICAgdC5hID0gNDQ0OwogICAgdC5iID0gNTAwOwogICAgdC5jID0gNDQ0OwogICAgdC5kID0gNTAwOwogICAgdC5lID0gNDQ0OwogICAgdC5mID0gMzMzOwogICAgdC5nID0gNTAwOwogICAgdC5oID0gNTAwOwogICAgdC5pID0gMjc4OwogICAgdC5qID0gMjc4OwogICAgdC5rID0gNTAwOwogICAgdC5sID0gMjc4OwogICAgdC5tID0gNzc4OwogICAgdC5uID0gNTAwOwogICAgdC5vID0gNTAwOwogICAgdC5wID0gNTAwOwogICAgdC5xID0gNTAwOwogICAgdC5yID0gMzMzOwogICAgdC5zID0gMzg5OwogICAgdC50ID0gMjc4OwogICAgdC51ID0gNTAwOwogICAgdC52ID0gNTAwOwogICAgdC53ID0gNzIyOwogICAgdC54ID0gNTAwOwogICAgdC55ID0gNTAwOwogICAgdC56ID0gNDQ0OwogICAgdC5icmFjZWxlZnQgPSA0ODA7CiAgICB0LmJhciA9IDIwMDsKICAgIHQuYnJhY2VyaWdodCA9IDQ4MDsKICAgIHQuYXNjaWl0aWxkZSA9IDU0MTsKICAgIHQuZXhjbGFtZG93biA9IDMzMzsKICAgIHQuY2VudCA9IDUwMDsKICAgIHQuc3RlcmxpbmcgPSA1MDA7CiAgICB0LmZyYWN0aW9uID0gMTY3OwogICAgdC55ZW4gPSA1MDA7CiAgICB0LmZsb3JpbiA9IDUwMDsKICAgIHQuc2VjdGlvbiA9IDUwMDsKICAgIHQuY3VycmVuY3kgPSA1MDA7CiAgICB0LnF1b3Rlc2luZ2xlID0gMTgwOwogICAgdC5xdW90ZWRibGxlZnQgPSA0NDQ7CiAgICB0Lmd1aWxsZW1vdGxlZnQgPSA1MDA7CiAgICB0Lmd1aWxzaW5nbGxlZnQgPSAzMzM7CiAgICB0Lmd1aWxzaW5nbHJpZ2h0ID0gMzMzOwogICAgdC5maSA9IDU1NjsKICAgIHQuZmwgPSA1NTY7CiAgICB0LmVuZGFzaCA9IDUwMDsKICAgIHQuZGFnZ2VyID0gNTAwOwogICAgdC5kYWdnZXJkYmwgPSA1MDA7CiAgICB0LnBlcmlvZGNlbnRlcmVkID0gMjUwOwogICAgdC5wYXJhZ3JhcGggPSA0NTM7CiAgICB0LmJ1bGxldCA9IDM1MDsKICAgIHQucXVvdGVzaW5nbGJhc2UgPSAzMzM7CiAgICB0LnF1b3RlZGJsYmFzZSA9IDQ0NDsKICAgIHQucXVvdGVkYmxyaWdodCA9IDQ0NDsKICAgIHQuZ3VpbGxlbW90cmlnaHQgPSA1MDA7CiAgICB0LmVsbGlwc2lzID0gMTAwMDsKICAgIHQucGVydGhvdXNhbmQgPSAxMDAwOwogICAgdC5xdWVzdGlvbmRvd24gPSA0NDQ7CiAgICB0LmdyYXZlID0gMzMzOwogICAgdC5hY3V0ZSA9IDMzMzsKICAgIHQuY2lyY3VtZmxleCA9IDMzMzsKICAgIHQudGlsZGUgPSAzMzM7CiAgICB0Lm1hY3JvbiA9IDMzMzsKICAgIHQuYnJldmUgPSAzMzM7CiAgICB0LmRvdGFjY2VudCA9IDMzMzsKICAgIHQuZGllcmVzaXMgPSAzMzM7CiAgICB0LnJpbmcgPSAzMzM7CiAgICB0LmNlZGlsbGEgPSAzMzM7CiAgICB0Lmh1bmdhcnVtbGF1dCA9IDMzMzsKICAgIHQub2dvbmVrID0gMzMzOwogICAgdC5jYXJvbiA9IDMzMzsKICAgIHQuZW1kYXNoID0gMTAwMDsKICAgIHQuQUUgPSA4ODk7CiAgICB0Lm9yZGZlbWluaW5lID0gMjc2OwogICAgdC5Mc2xhc2ggPSA2MTE7CiAgICB0Lk9zbGFzaCA9IDcyMjsKICAgIHQuT0UgPSA4ODk7CiAgICB0Lm9yZG1hc2N1bGluZSA9IDMxMDsKICAgIHQuYWUgPSA2Njc7CiAgICB0LmRvdGxlc3NpID0gMjc4OwogICAgdC5sc2xhc2ggPSAyNzg7CiAgICB0Lm9zbGFzaCA9IDUwMDsKICAgIHQub2UgPSA3MjI7CiAgICB0Lmdlcm1hbmRibHMgPSA1MDA7CiAgICB0LklkaWVyZXNpcyA9IDMzMzsKICAgIHQuZWFjdXRlID0gNDQ0OwogICAgdC5hYnJldmUgPSA0NDQ7CiAgICB0LnVodW5nYXJ1bWxhdXQgPSA1MDA7CiAgICB0LmVjYXJvbiA9IDQ0NDsKICAgIHQuWWRpZXJlc2lzID0gNzIyOwogICAgdC5kaXZpZGUgPSA1NjQ7CiAgICB0LllhY3V0ZSA9IDcyMjsKICAgIHQuQWNpcmN1bWZsZXggPSA3MjI7CiAgICB0LmFhY3V0ZSA9IDQ0NDsKICAgIHQuVWNpcmN1bWZsZXggPSA3MjI7CiAgICB0LnlhY3V0ZSA9IDUwMDsKICAgIHQuc2NvbW1hYWNjZW50ID0gMzg5OwogICAgdC5lY2lyY3VtZmxleCA9IDQ0NDsKICAgIHQuVXJpbmcgPSA3MjI7CiAgICB0LlVkaWVyZXNpcyA9IDcyMjsKICAgIHQuYW9nb25layA9IDQ0NDsKICAgIHQuVWFjdXRlID0gNzIyOwogICAgdC51b2dvbmVrID0gNTAwOwogICAgdC5FZGllcmVzaXMgPSA2MTE7CiAgICB0LkRjcm9hdCA9IDcyMjsKICAgIHQuY29tbWFhY2NlbnQgPSAyNTA7CiAgICB0LmNvcHlyaWdodCA9IDc2MDsKICAgIHQuRW1hY3JvbiA9IDYxMTsKICAgIHQuY2Nhcm9uID0gNDQ0OwogICAgdC5hcmluZyA9IDQ0NDsKICAgIHQuTmNvbW1hYWNjZW50ID0gNzIyOwogICAgdC5sYWN1dGUgPSAyNzg7CiAgICB0LmFncmF2ZSA9IDQ0NDsKICAgIHQuVGNvbW1hYWNjZW50ID0gNjExOwogICAgdC5DYWN1dGUgPSA2Njc7CiAgICB0LmF0aWxkZSA9IDQ0NDsKICAgIHQuRWRvdGFjY2VudCA9IDYxMTsKICAgIHQuc2Nhcm9uID0gMzg5OwogICAgdC5zY2VkaWxsYSA9IDM4OTsKICAgIHQuaWFjdXRlID0gMjc4OwogICAgdC5sb3plbmdlID0gNDcxOwogICAgdC5SY2Fyb24gPSA2Njc7CiAgICB0Lkdjb21tYWFjY2VudCA9IDcyMjsKICAgIHQudWNpcmN1bWZsZXggPSA1MDA7CiAgICB0LmFjaXJjdW1mbGV4ID0gNDQ0OwogICAgdC5BbWFjcm9uID0gNzIyOwogICAgdC5yY2Fyb24gPSAzMzM7CiAgICB0LmNjZWRpbGxhID0gNDQ0OwogICAgdC5aZG90YWNjZW50ID0gNjExOwogICAgdC5UaG9ybiA9IDU1NjsKICAgIHQuT21hY3JvbiA9IDcyMjsKICAgIHQuUmFjdXRlID0gNjY3OwogICAgdC5TYWN1dGUgPSA1NTY7CiAgICB0LmRjYXJvbiA9IDU4ODsKICAgIHQuVW1hY3JvbiA9IDcyMjsKICAgIHQudXJpbmcgPSA1MDA7CiAgICB0LnRocmVlc3VwZXJpb3IgPSAzMDA7CiAgICB0Lk9ncmF2ZSA9IDcyMjsKICAgIHQuQWdyYXZlID0gNzIyOwogICAgdC5BYnJldmUgPSA3MjI7CiAgICB0Lm11bHRpcGx5ID0gNTY0OwogICAgdC51YWN1dGUgPSA1MDA7CiAgICB0LlRjYXJvbiA9IDYxMTsKICAgIHQucGFydGlhbGRpZmYgPSA0NzY7CiAgICB0LnlkaWVyZXNpcyA9IDUwMDsKICAgIHQuTmFjdXRlID0gNzIyOwogICAgdC5pY2lyY3VtZmxleCA9IDI3ODsKICAgIHQuRWNpcmN1bWZsZXggPSA2MTE7CiAgICB0LmFkaWVyZXNpcyA9IDQ0NDsKICAgIHQuZWRpZXJlc2lzID0gNDQ0OwogICAgdC5jYWN1dGUgPSA0NDQ7CiAgICB0Lm5hY3V0ZSA9IDUwMDsKICAgIHQudW1hY3JvbiA9IDUwMDsKICAgIHQuTmNhcm9uID0gNzIyOwogICAgdC5JYWN1dGUgPSAzMzM7CiAgICB0LnBsdXNtaW51cyA9IDU2NDsKICAgIHQuYnJva2VuYmFyID0gMjAwOwogICAgdC5yZWdpc3RlcmVkID0gNzYwOwogICAgdC5HYnJldmUgPSA3MjI7CiAgICB0Lklkb3RhY2NlbnQgPSAzMzM7CiAgICB0LnN1bW1hdGlvbiA9IDYwMDsKICAgIHQuRWdyYXZlID0gNjExOwogICAgdC5yYWN1dGUgPSAzMzM7CiAgICB0Lm9tYWNyb24gPSA1MDA7CiAgICB0LlphY3V0ZSA9IDYxMTsKICAgIHQuWmNhcm9uID0gNjExOwogICAgdC5ncmVhdGVyZXF1YWwgPSA1NDk7CiAgICB0LkV0aCA9IDcyMjsKICAgIHQuQ2NlZGlsbGEgPSA2Njc7CiAgICB0Lmxjb21tYWFjY2VudCA9IDI3ODsKICAgIHQudGNhcm9uID0gMzI2OwogICAgdC5lb2dvbmVrID0gNDQ0OwogICAgdC5Vb2dvbmVrID0gNzIyOwogICAgdC5BYWN1dGUgPSA3MjI7CiAgICB0LkFkaWVyZXNpcyA9IDcyMjsKICAgIHQuZWdyYXZlID0gNDQ0OwogICAgdC56YWN1dGUgPSA0NDQ7CiAgICB0LmlvZ29uZWsgPSAyNzg7CiAgICB0Lk9hY3V0ZSA9IDcyMjsKICAgIHQub2FjdXRlID0gNTAwOwogICAgdC5hbWFjcm9uID0gNDQ0OwogICAgdC5zYWN1dGUgPSAzODk7CiAgICB0LmlkaWVyZXNpcyA9IDI3ODsKICAgIHQuT2NpcmN1bWZsZXggPSA3MjI7CiAgICB0LlVncmF2ZSA9IDcyMjsKICAgIHQuRGVsdGEgPSA2MTI7CiAgICB0LnRob3JuID0gNTAwOwogICAgdC50d29zdXBlcmlvciA9IDMwMDsKICAgIHQuT2RpZXJlc2lzID0gNzIyOwogICAgdC5tdSA9IDUwMDsKICAgIHQuaWdyYXZlID0gMjc4OwogICAgdC5vaHVuZ2FydW1sYXV0ID0gNTAwOwogICAgdC5Fb2dvbmVrID0gNjExOwogICAgdC5kY3JvYXQgPSA1MDA7CiAgICB0LnRocmVlcXVhcnRlcnMgPSA3NTA7CiAgICB0LlNjZWRpbGxhID0gNTU2OwogICAgdC5sY2Fyb24gPSAzNDQ7CiAgICB0Lktjb21tYWFjY2VudCA9IDcyMjsKICAgIHQuTGFjdXRlID0gNjExOwogICAgdC50cmFkZW1hcmsgPSA5ODA7CiAgICB0LmVkb3RhY2NlbnQgPSA0NDQ7CiAgICB0LklncmF2ZSA9IDMzMzsKICAgIHQuSW1hY3JvbiA9IDMzMzsKICAgIHQuTGNhcm9uID0gNjExOwogICAgdC5vbmVoYWxmID0gNzUwOwogICAgdC5sZXNzZXF1YWwgPSA1NDk7CiAgICB0Lm9jaXJjdW1mbGV4ID0gNTAwOwogICAgdC5udGlsZGUgPSA1MDA7CiAgICB0LlVodW5nYXJ1bWxhdXQgPSA3MjI7CiAgICB0LkVhY3V0ZSA9IDYxMTsKICAgIHQuZW1hY3JvbiA9IDQ0NDsKICAgIHQuZ2JyZXZlID0gNTAwOwogICAgdC5vbmVxdWFydGVyID0gNzUwOwogICAgdC5TY2Fyb24gPSA1NTY7CiAgICB0LlNjb21tYWFjY2VudCA9IDU1NjsKICAgIHQuT2h1bmdhcnVtbGF1dCA9IDcyMjsKICAgIHQuZGVncmVlID0gNDAwOwogICAgdC5vZ3JhdmUgPSA1MDA7CiAgICB0LkNjYXJvbiA9IDY2NzsKICAgIHQudWdyYXZlID0gNTAwOwogICAgdC5yYWRpY2FsID0gNDUzOwogICAgdC5EY2Fyb24gPSA3MjI7CiAgICB0LnJjb21tYWFjY2VudCA9IDMzMzsKICAgIHQuTnRpbGRlID0gNzIyOwogICAgdC5vdGlsZGUgPSA1MDA7CiAgICB0LlJjb21tYWFjY2VudCA9IDY2NzsKICAgIHQuTGNvbW1hYWNjZW50ID0gNjExOwogICAgdC5BdGlsZGUgPSA3MjI7CiAgICB0LkFvZ29uZWsgPSA3MjI7CiAgICB0LkFyaW5nID0gNzIyOwogICAgdC5PdGlsZGUgPSA3MjI7CiAgICB0Lnpkb3RhY2NlbnQgPSA0NDQ7CiAgICB0LkVjYXJvbiA9IDYxMTsKICAgIHQuSW9nb25layA9IDMzMzsKICAgIHQua2NvbW1hYWNjZW50ID0gNTAwOwogICAgdC5taW51cyA9IDU2NDsKICAgIHQuSWNpcmN1bWZsZXggPSAzMzM7CiAgICB0Lm5jYXJvbiA9IDUwMDsKICAgIHQudGNvbW1hYWNjZW50ID0gMjc4OwogICAgdC5sb2dpY2Fsbm90ID0gNTY0OwogICAgdC5vZGllcmVzaXMgPSA1MDA7CiAgICB0LnVkaWVyZXNpcyA9IDUwMDsKICAgIHQubm90ZXF1YWwgPSA1NDk7CiAgICB0Lmdjb21tYWFjY2VudCA9IDUwMDsKICAgIHQuZXRoID0gNTAwOwogICAgdC56Y2Fyb24gPSA0NDQ7CiAgICB0Lm5jb21tYWFjY2VudCA9IDUwMDsKICAgIHQub25lc3VwZXJpb3IgPSAzMDA7CiAgICB0LmltYWNyb24gPSAyNzg7CiAgICB0LkV1cm8gPSA1MDA7CiAgfSk7CiAgdFsiVGltZXMtQm9sZCJdID0gZ2V0TG9va3VwVGFibGVGYWN0b3J5KGZ1bmN0aW9uICh0KSB7CiAgICB0LnNwYWNlID0gMjUwOwogICAgdC5leGNsYW0gPSAzMzM7CiAgICB0LnF1b3RlZGJsID0gNTU1OwogICAgdC5udW1iZXJzaWduID0gNTAwOwogICAgdC5kb2xsYXIgPSA1MDA7CiAgICB0LnBlcmNlbnQgPSAxMDAwOwogICAgdC5hbXBlcnNhbmQgPSA4MzM7CiAgICB0LnF1b3RlcmlnaHQgPSAzMzM7CiAgICB0LnBhcmVubGVmdCA9IDMzMzsKICAgIHQucGFyZW5yaWdodCA9IDMzMzsKICAgIHQuYXN0ZXJpc2sgPSA1MDA7CiAgICB0LnBsdXMgPSA1NzA7CiAgICB0LmNvbW1hID0gMjUwOwogICAgdC5oeXBoZW4gPSAzMzM7CiAgICB0LnBlcmlvZCA9IDI1MDsKICAgIHQuc2xhc2ggPSAyNzg7CiAgICB0Lnplcm8gPSA1MDA7CiAgICB0Lm9uZSA9IDUwMDsKICAgIHQudHdvID0gNTAwOwogICAgdC50aHJlZSA9IDUwMDsKICAgIHQuZm91ciA9IDUwMDsKICAgIHQuZml2ZSA9IDUwMDsKICAgIHQuc2l4ID0gNTAwOwogICAgdC5zZXZlbiA9IDUwMDsKICAgIHQuZWlnaHQgPSA1MDA7CiAgICB0Lm5pbmUgPSA1MDA7CiAgICB0LmNvbG9uID0gMzMzOwogICAgdC5zZW1pY29sb24gPSAzMzM7CiAgICB0Lmxlc3MgPSA1NzA7CiAgICB0LmVxdWFsID0gNTcwOwogICAgdC5ncmVhdGVyID0gNTcwOwogICAgdC5xdWVzdGlvbiA9IDUwMDsKICAgIHQuYXQgPSA5MzA7CiAgICB0LkEgPSA3MjI7CiAgICB0LkIgPSA2Njc7CiAgICB0LkMgPSA3MjI7CiAgICB0LkQgPSA3MjI7CiAgICB0LkUgPSA2Njc7CiAgICB0LkYgPSA2MTE7CiAgICB0LkcgPSA3Nzg7CiAgICB0LkggPSA3Nzg7CiAgICB0LkkgPSAzODk7CiAgICB0LkogPSA1MDA7CiAgICB0LksgPSA3Nzg7CiAgICB0LkwgPSA2Njc7CiAgICB0Lk0gPSA5NDQ7CiAgICB0Lk4gPSA3MjI7CiAgICB0Lk8gPSA3Nzg7CiAgICB0LlAgPSA2MTE7CiAgICB0LlEgPSA3Nzg7CiAgICB0LlIgPSA3MjI7CiAgICB0LlMgPSA1NTY7CiAgICB0LlQgPSA2Njc7CiAgICB0LlUgPSA3MjI7CiAgICB0LlYgPSA3MjI7CiAgICB0LlcgPSAxMDAwOwogICAgdC5YID0gNzIyOwogICAgdC5ZID0gNzIyOwogICAgdC5aID0gNjY3OwogICAgdC5icmFja2V0bGVmdCA9IDMzMzsKICAgIHQuYmFja3NsYXNoID0gMjc4OwogICAgdC5icmFja2V0cmlnaHQgPSAzMzM7CiAgICB0LmFzY2lpY2lyY3VtID0gNTgxOwogICAgdC51bmRlcnNjb3JlID0gNTAwOwogICAgdC5xdW90ZWxlZnQgPSAzMzM7CiAgICB0LmEgPSA1MDA7CiAgICB0LmIgPSA1NTY7CiAgICB0LmMgPSA0NDQ7CiAgICB0LmQgPSA1NTY7CiAgICB0LmUgPSA0NDQ7CiAgICB0LmYgPSAzMzM7CiAgICB0LmcgPSA1MDA7CiAgICB0LmggPSA1NTY7CiAgICB0LmkgPSAyNzg7CiAgICB0LmogPSAzMzM7CiAgICB0LmsgPSA1NTY7CiAgICB0LmwgPSAyNzg7CiAgICB0Lm0gPSA4MzM7CiAgICB0Lm4gPSA1NTY7CiAgICB0Lm8gPSA1MDA7CiAgICB0LnAgPSA1NTY7CiAgICB0LnEgPSA1NTY7CiAgICB0LnIgPSA0NDQ7CiAgICB0LnMgPSAzODk7CiAgICB0LnQgPSAzMzM7CiAgICB0LnUgPSA1NTY7CiAgICB0LnYgPSA1MDA7CiAgICB0LncgPSA3MjI7CiAgICB0LnggPSA1MDA7CiAgICB0LnkgPSA1MDA7CiAgICB0LnogPSA0NDQ7CiAgICB0LmJyYWNlbGVmdCA9IDM5NDsKICAgIHQuYmFyID0gMjIwOwogICAgdC5icmFjZXJpZ2h0ID0gMzk0OwogICAgdC5hc2NpaXRpbGRlID0gNTIwOwogICAgdC5leGNsYW1kb3duID0gMzMzOwogICAgdC5jZW50ID0gNTAwOwogICAgdC5zdGVybGluZyA9IDUwMDsKICAgIHQuZnJhY3Rpb24gPSAxNjc7CiAgICB0LnllbiA9IDUwMDsKICAgIHQuZmxvcmluID0gNTAwOwogICAgdC5zZWN0aW9uID0gNTAwOwogICAgdC5jdXJyZW5jeSA9IDUwMDsKICAgIHQucXVvdGVzaW5nbGUgPSAyNzg7CiAgICB0LnF1b3RlZGJsbGVmdCA9IDUwMDsKICAgIHQuZ3VpbGxlbW90bGVmdCA9IDUwMDsKICAgIHQuZ3VpbHNpbmdsbGVmdCA9IDMzMzsKICAgIHQuZ3VpbHNpbmdscmlnaHQgPSAzMzM7CiAgICB0LmZpID0gNTU2OwogICAgdC5mbCA9IDU1NjsKICAgIHQuZW5kYXNoID0gNTAwOwogICAgdC5kYWdnZXIgPSA1MDA7CiAgICB0LmRhZ2dlcmRibCA9IDUwMDsKICAgIHQucGVyaW9kY2VudGVyZWQgPSAyNTA7CiAgICB0LnBhcmFncmFwaCA9IDU0MDsKICAgIHQuYnVsbGV0ID0gMzUwOwogICAgdC5xdW90ZXNpbmdsYmFzZSA9IDMzMzsKICAgIHQucXVvdGVkYmxiYXNlID0gNTAwOwogICAgdC5xdW90ZWRibHJpZ2h0ID0gNTAwOwogICAgdC5ndWlsbGVtb3RyaWdodCA9IDUwMDsKICAgIHQuZWxsaXBzaXMgPSAxMDAwOwogICAgdC5wZXJ0aG91c2FuZCA9IDEwMDA7CiAgICB0LnF1ZXN0aW9uZG93biA9IDUwMDsKICAgIHQuZ3JhdmUgPSAzMzM7CiAgICB0LmFjdXRlID0gMzMzOwogICAgdC5jaXJjdW1mbGV4ID0gMzMzOwogICAgdC50aWxkZSA9IDMzMzsKICAgIHQubWFjcm9uID0gMzMzOwogICAgdC5icmV2ZSA9IDMzMzsKICAgIHQuZG90YWNjZW50ID0gMzMzOwogICAgdC5kaWVyZXNpcyA9IDMzMzsKICAgIHQucmluZyA9IDMzMzsKICAgIHQuY2VkaWxsYSA9IDMzMzsKICAgIHQuaHVuZ2FydW1sYXV0ID0gMzMzOwogICAgdC5vZ29uZWsgPSAzMzM7CiAgICB0LmNhcm9uID0gMzMzOwogICAgdC5lbWRhc2ggPSAxMDAwOwogICAgdC5BRSA9IDEwMDA7CiAgICB0Lm9yZGZlbWluaW5lID0gMzAwOwogICAgdC5Mc2xhc2ggPSA2Njc7CiAgICB0Lk9zbGFzaCA9IDc3ODsKICAgIHQuT0UgPSAxMDAwOwogICAgdC5vcmRtYXNjdWxpbmUgPSAzMzA7CiAgICB0LmFlID0gNzIyOwogICAgdC5kb3RsZXNzaSA9IDI3ODsKICAgIHQubHNsYXNoID0gMjc4OwogICAgdC5vc2xhc2ggPSA1MDA7CiAgICB0Lm9lID0gNzIyOwogICAgdC5nZXJtYW5kYmxzID0gNTU2OwogICAgdC5JZGllcmVzaXMgPSAzODk7CiAgICB0LmVhY3V0ZSA9IDQ0NDsKICAgIHQuYWJyZXZlID0gNTAwOwogICAgdC51aHVuZ2FydW1sYXV0ID0gNTU2OwogICAgdC5lY2Fyb24gPSA0NDQ7CiAgICB0LllkaWVyZXNpcyA9IDcyMjsKICAgIHQuZGl2aWRlID0gNTcwOwogICAgdC5ZYWN1dGUgPSA3MjI7CiAgICB0LkFjaXJjdW1mbGV4ID0gNzIyOwogICAgdC5hYWN1dGUgPSA1MDA7CiAgICB0LlVjaXJjdW1mbGV4ID0gNzIyOwogICAgdC55YWN1dGUgPSA1MDA7CiAgICB0LnNjb21tYWFjY2VudCA9IDM4OTsKICAgIHQuZWNpcmN1bWZsZXggPSA0NDQ7CiAgICB0LlVyaW5nID0gNzIyOwogICAgdC5VZGllcmVzaXMgPSA3MjI7CiAgICB0LmFvZ29uZWsgPSA1MDA7CiAgICB0LlVhY3V0ZSA9IDcyMjsKICAgIHQudW9nb25layA9IDU1NjsKICAgIHQuRWRpZXJlc2lzID0gNjY3OwogICAgdC5EY3JvYXQgPSA3MjI7CiAgICB0LmNvbW1hYWNjZW50ID0gMjUwOwogICAgdC5jb3B5cmlnaHQgPSA3NDc7CiAgICB0LkVtYWNyb24gPSA2Njc7CiAgICB0LmNjYXJvbiA9IDQ0NDsKICAgIHQuYXJpbmcgPSA1MDA7CiAgICB0Lk5jb21tYWFjY2VudCA9IDcyMjsKICAgIHQubGFjdXRlID0gMjc4OwogICAgdC5hZ3JhdmUgPSA1MDA7CiAgICB0LlRjb21tYWFjY2VudCA9IDY2NzsKICAgIHQuQ2FjdXRlID0gNzIyOwogICAgdC5hdGlsZGUgPSA1MDA7CiAgICB0LkVkb3RhY2NlbnQgPSA2Njc7CiAgICB0LnNjYXJvbiA9IDM4OTsKICAgIHQuc2NlZGlsbGEgPSAzODk7CiAgICB0LmlhY3V0ZSA9IDI3ODsKICAgIHQubG96ZW5nZSA9IDQ5NDsKICAgIHQuUmNhcm9uID0gNzIyOwogICAgdC5HY29tbWFhY2NlbnQgPSA3Nzg7CiAgICB0LnVjaXJjdW1mbGV4ID0gNTU2OwogICAgdC5hY2lyY3VtZmxleCA9IDUwMDsKICAgIHQuQW1hY3JvbiA9IDcyMjsKICAgIHQucmNhcm9uID0gNDQ0OwogICAgdC5jY2VkaWxsYSA9IDQ0NDsKICAgIHQuWmRvdGFjY2VudCA9IDY2NzsKICAgIHQuVGhvcm4gPSA2MTE7CiAgICB0Lk9tYWNyb24gPSA3Nzg7CiAgICB0LlJhY3V0ZSA9IDcyMjsKICAgIHQuU2FjdXRlID0gNTU2OwogICAgdC5kY2Fyb24gPSA2NzI7CiAgICB0LlVtYWNyb24gPSA3MjI7CiAgICB0LnVyaW5nID0gNTU2OwogICAgdC50aHJlZXN1cGVyaW9yID0gMzAwOwogICAgdC5PZ3JhdmUgPSA3Nzg7CiAgICB0LkFncmF2ZSA9IDcyMjsKICAgIHQuQWJyZXZlID0gNzIyOwogICAgdC5tdWx0aXBseSA9IDU3MDsKICAgIHQudWFjdXRlID0gNTU2OwogICAgdC5UY2Fyb24gPSA2Njc7CiAgICB0LnBhcnRpYWxkaWZmID0gNDk0OwogICAgdC55ZGllcmVzaXMgPSA1MDA7CiAgICB0Lk5hY3V0ZSA9IDcyMjsKICAgIHQuaWNpcmN1bWZsZXggPSAyNzg7CiAgICB0LkVjaXJjdW1mbGV4ID0gNjY3OwogICAgdC5hZGllcmVzaXMgPSA1MDA7CiAgICB0LmVkaWVyZXNpcyA9IDQ0NDsKICAgIHQuY2FjdXRlID0gNDQ0OwogICAgdC5uYWN1dGUgPSA1NTY7CiAgICB0LnVtYWNyb24gPSA1NTY7CiAgICB0Lk5jYXJvbiA9IDcyMjsKICAgIHQuSWFjdXRlID0gMzg5OwogICAgdC5wbHVzbWludXMgPSA1NzA7CiAgICB0LmJyb2tlbmJhciA9IDIyMDsKICAgIHQucmVnaXN0ZXJlZCA9IDc0NzsKICAgIHQuR2JyZXZlID0gNzc4OwogICAgdC5JZG90YWNjZW50ID0gMzg5OwogICAgdC5zdW1tYXRpb24gPSA2MDA7CiAgICB0LkVncmF2ZSA9IDY2NzsKICAgIHQucmFjdXRlID0gNDQ0OwogICAgdC5vbWFjcm9uID0gNTAwOwogICAgdC5aYWN1dGUgPSA2Njc7CiAgICB0LlpjYXJvbiA9IDY2NzsKICAgIHQuZ3JlYXRlcmVxdWFsID0gNTQ5OwogICAgdC5FdGggPSA3MjI7CiAgICB0LkNjZWRpbGxhID0gNzIyOwogICAgdC5sY29tbWFhY2NlbnQgPSAyNzg7CiAgICB0LnRjYXJvbiA9IDQxNjsKICAgIHQuZW9nb25layA9IDQ0NDsKICAgIHQuVW9nb25layA9IDcyMjsKICAgIHQuQWFjdXRlID0gNzIyOwogICAgdC5BZGllcmVzaXMgPSA3MjI7CiAgICB0LmVncmF2ZSA9IDQ0NDsKICAgIHQuemFjdXRlID0gNDQ0OwogICAgdC5pb2dvbmVrID0gMjc4OwogICAgdC5PYWN1dGUgPSA3Nzg7CiAgICB0Lm9hY3V0ZSA9IDUwMDsKICAgIHQuYW1hY3JvbiA9IDUwMDsKICAgIHQuc2FjdXRlID0gMzg5OwogICAgdC5pZGllcmVzaXMgPSAyNzg7CiAgICB0Lk9jaXJjdW1mbGV4ID0gNzc4OwogICAgdC5VZ3JhdmUgPSA3MjI7CiAgICB0LkRlbHRhID0gNjEyOwogICAgdC50aG9ybiA9IDU1NjsKICAgIHQudHdvc3VwZXJpb3IgPSAzMDA7CiAgICB0Lk9kaWVyZXNpcyA9IDc3ODsKICAgIHQubXUgPSA1NTY7CiAgICB0LmlncmF2ZSA9IDI3ODsKICAgIHQub2h1bmdhcnVtbGF1dCA9IDUwMDsKICAgIHQuRW9nb25layA9IDY2NzsKICAgIHQuZGNyb2F0ID0gNTU2OwogICAgdC50aHJlZXF1YXJ0ZXJzID0gNzUwOwogICAgdC5TY2VkaWxsYSA9IDU1NjsKICAgIHQubGNhcm9uID0gMzk0OwogICAgdC5LY29tbWFhY2NlbnQgPSA3Nzg7CiAgICB0LkxhY3V0ZSA9IDY2NzsKICAgIHQudHJhZGVtYXJrID0gMTAwMDsKICAgIHQuZWRvdGFjY2VudCA9IDQ0NDsKICAgIHQuSWdyYXZlID0gMzg5OwogICAgdC5JbWFjcm9uID0gMzg5OwogICAgdC5MY2Fyb24gPSA2Njc7CiAgICB0Lm9uZWhhbGYgPSA3NTA7CiAgICB0Lmxlc3NlcXVhbCA9IDU0OTsKICAgIHQub2NpcmN1bWZsZXggPSA1MDA7CiAgICB0Lm50aWxkZSA9IDU1NjsKICAgIHQuVWh1bmdhcnVtbGF1dCA9IDcyMjsKICAgIHQuRWFjdXRlID0gNjY3OwogICAgdC5lbWFjcm9uID0gNDQ0OwogICAgdC5nYnJldmUgPSA1MDA7CiAgICB0Lm9uZXF1YXJ0ZXIgPSA3NTA7CiAgICB0LlNjYXJvbiA9IDU1NjsKICAgIHQuU2NvbW1hYWNjZW50ID0gNTU2OwogICAgdC5PaHVuZ2FydW1sYXV0ID0gNzc4OwogICAgdC5kZWdyZWUgPSA0MDA7CiAgICB0Lm9ncmF2ZSA9IDUwMDsKICAgIHQuQ2Nhcm9uID0gNzIyOwogICAgdC51Z3JhdmUgPSA1NTY7CiAgICB0LnJhZGljYWwgPSA1NDk7CiAgICB0LkRjYXJvbiA9IDcyMjsKICAgIHQucmNvbW1hYWNjZW50ID0gNDQ0OwogICAgdC5OdGlsZGUgPSA3MjI7CiAgICB0Lm90aWxkZSA9IDUwMDsKICAgIHQuUmNvbW1hYWNjZW50ID0gNzIyOwogICAgdC5MY29tbWFhY2NlbnQgPSA2Njc7CiAgICB0LkF0aWxkZSA9IDcyMjsKICAgIHQuQW9nb25layA9IDcyMjsKICAgIHQuQXJpbmcgPSA3MjI7CiAgICB0Lk90aWxkZSA9IDc3ODsKICAgIHQuemRvdGFjY2VudCA9IDQ0NDsKICAgIHQuRWNhcm9uID0gNjY3OwogICAgdC5Jb2dvbmVrID0gMzg5OwogICAgdC5rY29tbWFhY2NlbnQgPSA1NTY7CiAgICB0Lm1pbnVzID0gNTcwOwogICAgdC5JY2lyY3VtZmxleCA9IDM4OTsKICAgIHQubmNhcm9uID0gNTU2OwogICAgdC50Y29tbWFhY2NlbnQgPSAzMzM7CiAgICB0LmxvZ2ljYWxub3QgPSA1NzA7CiAgICB0Lm9kaWVyZXNpcyA9IDUwMDsKICAgIHQudWRpZXJlc2lzID0gNTU2OwogICAgdC5ub3RlcXVhbCA9IDU0OTsKICAgIHQuZ2NvbW1hYWNjZW50ID0gNTAwOwogICAgdC5ldGggPSA1MDA7CiAgICB0LnpjYXJvbiA9IDQ0NDsKICAgIHQubmNvbW1hYWNjZW50ID0gNTU2OwogICAgdC5vbmVzdXBlcmlvciA9IDMwMDsKICAgIHQuaW1hY3JvbiA9IDI3ODsKICAgIHQuRXVybyA9IDUwMDsKICB9KTsKICB0WyJUaW1lcy1Cb2xkSXRhbGljIl0gPSBnZXRMb29rdXBUYWJsZUZhY3RvcnkoZnVuY3Rpb24gKHQpIHsKICAgIHQuc3BhY2UgPSAyNTA7CiAgICB0LmV4Y2xhbSA9IDM4OTsKICAgIHQucXVvdGVkYmwgPSA1NTU7CiAgICB0Lm51bWJlcnNpZ24gPSA1MDA7CiAgICB0LmRvbGxhciA9IDUwMDsKICAgIHQucGVyY2VudCA9IDgzMzsKICAgIHQuYW1wZXJzYW5kID0gNzc4OwogICAgdC5xdW90ZXJpZ2h0ID0gMzMzOwogICAgdC5wYXJlbmxlZnQgPSAzMzM7CiAgICB0LnBhcmVucmlnaHQgPSAzMzM7CiAgICB0LmFzdGVyaXNrID0gNTAwOwogICAgdC5wbHVzID0gNTcwOwogICAgdC5jb21tYSA9IDI1MDsKICAgIHQuaHlwaGVuID0gMzMzOwogICAgdC5wZXJpb2QgPSAyNTA7CiAgICB0LnNsYXNoID0gMjc4OwogICAgdC56ZXJvID0gNTAwOwogICAgdC5vbmUgPSA1MDA7CiAgICB0LnR3byA9IDUwMDsKICAgIHQudGhyZWUgPSA1MDA7CiAgICB0LmZvdXIgPSA1MDA7CiAgICB0LmZpdmUgPSA1MDA7CiAgICB0LnNpeCA9IDUwMDsKICAgIHQuc2V2ZW4gPSA1MDA7CiAgICB0LmVpZ2h0ID0gNTAwOwogICAgdC5uaW5lID0gNTAwOwogICAgdC5jb2xvbiA9IDMzMzsKICAgIHQuc2VtaWNvbG9uID0gMzMzOwogICAgdC5sZXNzID0gNTcwOwogICAgdC5lcXVhbCA9IDU3MDsKICAgIHQuZ3JlYXRlciA9IDU3MDsKICAgIHQucXVlc3Rpb24gPSA1MDA7CiAgICB0LmF0ID0gODMyOwogICAgdC5BID0gNjY3OwogICAgdC5CID0gNjY3OwogICAgdC5DID0gNjY3OwogICAgdC5EID0gNzIyOwogICAgdC5FID0gNjY3OwogICAgdC5GID0gNjY3OwogICAgdC5HID0gNzIyOwogICAgdC5IID0gNzc4OwogICAgdC5JID0gMzg5OwogICAgdC5KID0gNTAwOwogICAgdC5LID0gNjY3OwogICAgdC5MID0gNjExOwogICAgdC5NID0gODg5OwogICAgdC5OID0gNzIyOwogICAgdC5PID0gNzIyOwogICAgdC5QID0gNjExOwogICAgdC5RID0gNzIyOwogICAgdC5SID0gNjY3OwogICAgdC5TID0gNTU2OwogICAgdC5UID0gNjExOwogICAgdC5VID0gNzIyOwogICAgdC5WID0gNjY3OwogICAgdC5XID0gODg5OwogICAgdC5YID0gNjY3OwogICAgdC5ZID0gNjExOwogICAgdC5aID0gNjExOwogICAgdC5icmFja2V0bGVmdCA9IDMzMzsKICAgIHQuYmFja3NsYXNoID0gMjc4OwogICAgdC5icmFja2V0cmlnaHQgPSAzMzM7CiAgICB0LmFzY2lpY2lyY3VtID0gNTcwOwogICAgdC51bmRlcnNjb3JlID0gNTAwOwogICAgdC5xdW90ZWxlZnQgPSAzMzM7CiAgICB0LmEgPSA1MDA7CiAgICB0LmIgPSA1MDA7CiAgICB0LmMgPSA0NDQ7CiAgICB0LmQgPSA1MDA7CiAgICB0LmUgPSA0NDQ7CiAgICB0LmYgPSAzMzM7CiAgICB0LmcgPSA1MDA7CiAgICB0LmggPSA1NTY7CiAgICB0LmkgPSAyNzg7CiAgICB0LmogPSAyNzg7CiAgICB0LmsgPSA1MDA7CiAgICB0LmwgPSAyNzg7CiAgICB0Lm0gPSA3Nzg7CiAgICB0Lm4gPSA1NTY7CiAgICB0Lm8gPSA1MDA7CiAgICB0LnAgPSA1MDA7CiAgICB0LnEgPSA1MDA7CiAgICB0LnIgPSAzODk7CiAgICB0LnMgPSAzODk7CiAgICB0LnQgPSAyNzg7CiAgICB0LnUgPSA1NTY7CiAgICB0LnYgPSA0NDQ7CiAgICB0LncgPSA2Njc7CiAgICB0LnggPSA1MDA7CiAgICB0LnkgPSA0NDQ7CiAgICB0LnogPSAzODk7CiAgICB0LmJyYWNlbGVmdCA9IDM0ODsKICAgIHQuYmFyID0gMjIwOwogICAgdC5icmFjZXJpZ2h0ID0gMzQ4OwogICAgdC5hc2NpaXRpbGRlID0gNTcwOwogICAgdC5leGNsYW1kb3duID0gMzg5OwogICAgdC5jZW50ID0gNTAwOwogICAgdC5zdGVybGluZyA9IDUwMDsKICAgIHQuZnJhY3Rpb24gPSAxNjc7CiAgICB0LnllbiA9IDUwMDsKICAgIHQuZmxvcmluID0gNTAwOwogICAgdC5zZWN0aW9uID0gNTAwOwogICAgdC5jdXJyZW5jeSA9IDUwMDsKICAgIHQucXVvdGVzaW5nbGUgPSAyNzg7CiAgICB0LnF1b3RlZGJsbGVmdCA9IDUwMDsKICAgIHQuZ3VpbGxlbW90bGVmdCA9IDUwMDsKICAgIHQuZ3VpbHNpbmdsbGVmdCA9IDMzMzsKICAgIHQuZ3VpbHNpbmdscmlnaHQgPSAzMzM7CiAgICB0LmZpID0gNTU2OwogICAgdC5mbCA9IDU1NjsKICAgIHQuZW5kYXNoID0gNTAwOwogICAgdC5kYWdnZXIgPSA1MDA7CiAgICB0LmRhZ2dlcmRibCA9IDUwMDsKICAgIHQucGVyaW9kY2VudGVyZWQgPSAyNTA7CiAgICB0LnBhcmFncmFwaCA9IDUwMDsKICAgIHQuYnVsbGV0ID0gMzUwOwogICAgdC5xdW90ZXNpbmdsYmFzZSA9IDMzMzsKICAgIHQucXVvdGVkYmxiYXNlID0gNTAwOwogICAgdC5xdW90ZWRibHJpZ2h0ID0gNTAwOwogICAgdC5ndWlsbGVtb3RyaWdodCA9IDUwMDsKICAgIHQuZWxsaXBzaXMgPSAxMDAwOwogICAgdC5wZXJ0aG91c2FuZCA9IDEwMDA7CiAgICB0LnF1ZXN0aW9uZG93biA9IDUwMDsKICAgIHQuZ3JhdmUgPSAzMzM7CiAgICB0LmFjdXRlID0gMzMzOwogICAgdC5jaXJjdW1mbGV4ID0gMzMzOwogICAgdC50aWxkZSA9IDMzMzsKICAgIHQubWFjcm9uID0gMzMzOwogICAgdC5icmV2ZSA9IDMzMzsKICAgIHQuZG90YWNjZW50ID0gMzMzOwogICAgdC5kaWVyZXNpcyA9IDMzMzsKICAgIHQucmluZyA9IDMzMzsKICAgIHQuY2VkaWxsYSA9IDMzMzsKICAgIHQuaHVuZ2FydW1sYXV0ID0gMzMzOwogICAgdC5vZ29uZWsgPSAzMzM7CiAgICB0LmNhcm9uID0gMzMzOwogICAgdC5lbWRhc2ggPSAxMDAwOwogICAgdC5BRSA9IDk0NDsKICAgIHQub3JkZmVtaW5pbmUgPSAyNjY7CiAgICB0LkxzbGFzaCA9IDYxMTsKICAgIHQuT3NsYXNoID0gNzIyOwogICAgdC5PRSA9IDk0NDsKICAgIHQub3JkbWFzY3VsaW5lID0gMzAwOwogICAgdC5hZSA9IDcyMjsKICAgIHQuZG90bGVzc2kgPSAyNzg7CiAgICB0LmxzbGFzaCA9IDI3ODsKICAgIHQub3NsYXNoID0gNTAwOwogICAgdC5vZSA9IDcyMjsKICAgIHQuZ2VybWFuZGJscyA9IDUwMDsKICAgIHQuSWRpZXJlc2lzID0gMzg5OwogICAgdC5lYWN1dGUgPSA0NDQ7CiAgICB0LmFicmV2ZSA9IDUwMDsKICAgIHQudWh1bmdhcnVtbGF1dCA9IDU1NjsKICAgIHQuZWNhcm9uID0gNDQ0OwogICAgdC5ZZGllcmVzaXMgPSA2MTE7CiAgICB0LmRpdmlkZSA9IDU3MDsKICAgIHQuWWFjdXRlID0gNjExOwogICAgdC5BY2lyY3VtZmxleCA9IDY2NzsKICAgIHQuYWFjdXRlID0gNTAwOwogICAgdC5VY2lyY3VtZmxleCA9IDcyMjsKICAgIHQueWFjdXRlID0gNDQ0OwogICAgdC5zY29tbWFhY2NlbnQgPSAzODk7CiAgICB0LmVjaXJjdW1mbGV4ID0gNDQ0OwogICAgdC5VcmluZyA9IDcyMjsKICAgIHQuVWRpZXJlc2lzID0gNzIyOwogICAgdC5hb2dvbmVrID0gNTAwOwogICAgdC5VYWN1dGUgPSA3MjI7CiAgICB0LnVvZ29uZWsgPSA1NTY7CiAgICB0LkVkaWVyZXNpcyA9IDY2NzsKICAgIHQuRGNyb2F0ID0gNzIyOwogICAgdC5jb21tYWFjY2VudCA9IDI1MDsKICAgIHQuY29weXJpZ2h0ID0gNzQ3OwogICAgdC5FbWFjcm9uID0gNjY3OwogICAgdC5jY2Fyb24gPSA0NDQ7CiAgICB0LmFyaW5nID0gNTAwOwogICAgdC5OY29tbWFhY2NlbnQgPSA3MjI7CiAgICB0LmxhY3V0ZSA9IDI3ODsKICAgIHQuYWdyYXZlID0gNTAwOwogICAgdC5UY29tbWFhY2NlbnQgPSA2MTE7CiAgICB0LkNhY3V0ZSA9IDY2NzsKICAgIHQuYXRpbGRlID0gNTAwOwogICAgdC5FZG90YWNjZW50ID0gNjY3OwogICAgdC5zY2Fyb24gPSAzODk7CiAgICB0LnNjZWRpbGxhID0gMzg5OwogICAgdC5pYWN1dGUgPSAyNzg7CiAgICB0LmxvemVuZ2UgPSA0OTQ7CiAgICB0LlJjYXJvbiA9IDY2NzsKICAgIHQuR2NvbW1hYWNjZW50ID0gNzIyOwogICAgdC51Y2lyY3VtZmxleCA9IDU1NjsKICAgIHQuYWNpcmN1bWZsZXggPSA1MDA7CiAgICB0LkFtYWNyb24gPSA2Njc7CiAgICB0LnJjYXJvbiA9IDM4OTsKICAgIHQuY2NlZGlsbGEgPSA0NDQ7CiAgICB0Llpkb3RhY2NlbnQgPSA2MTE7CiAgICB0LlRob3JuID0gNjExOwogICAgdC5PbWFjcm9uID0gNzIyOwogICAgdC5SYWN1dGUgPSA2Njc7CiAgICB0LlNhY3V0ZSA9IDU1NjsKICAgIHQuZGNhcm9uID0gNjA4OwogICAgdC5VbWFjcm9uID0gNzIyOwogICAgdC51cmluZyA9IDU1NjsKICAgIHQudGhyZWVzdXBlcmlvciA9IDMwMDsKICAgIHQuT2dyYXZlID0gNzIyOwogICAgdC5BZ3JhdmUgPSA2Njc7CiAgICB0LkFicmV2ZSA9IDY2NzsKICAgIHQubXVsdGlwbHkgPSA1NzA7CiAgICB0LnVhY3V0ZSA9IDU1NjsKICAgIHQuVGNhcm9uID0gNjExOwogICAgdC5wYXJ0aWFsZGlmZiA9IDQ5NDsKICAgIHQueWRpZXJlc2lzID0gNDQ0OwogICAgdC5OYWN1dGUgPSA3MjI7CiAgICB0LmljaXJjdW1mbGV4ID0gMjc4OwogICAgdC5FY2lyY3VtZmxleCA9IDY2NzsKICAgIHQuYWRpZXJlc2lzID0gNTAwOwogICAgdC5lZGllcmVzaXMgPSA0NDQ7CiAgICB0LmNhY3V0ZSA9IDQ0NDsKICAgIHQubmFjdXRlID0gNTU2OwogICAgdC51bWFjcm9uID0gNTU2OwogICAgdC5OY2Fyb24gPSA3MjI7CiAgICB0LklhY3V0ZSA9IDM4OTsKICAgIHQucGx1c21pbnVzID0gNTcwOwogICAgdC5icm9rZW5iYXIgPSAyMjA7CiAgICB0LnJlZ2lzdGVyZWQgPSA3NDc7CiAgICB0LkdicmV2ZSA9IDcyMjsKICAgIHQuSWRvdGFjY2VudCA9IDM4OTsKICAgIHQuc3VtbWF0aW9uID0gNjAwOwogICAgdC5FZ3JhdmUgPSA2Njc7CiAgICB0LnJhY3V0ZSA9IDM4OTsKICAgIHQub21hY3JvbiA9IDUwMDsKICAgIHQuWmFjdXRlID0gNjExOwogICAgdC5aY2Fyb24gPSA2MTE7CiAgICB0LmdyZWF0ZXJlcXVhbCA9IDU0OTsKICAgIHQuRXRoID0gNzIyOwogICAgdC5DY2VkaWxsYSA9IDY2NzsKICAgIHQubGNvbW1hYWNjZW50ID0gMjc4OwogICAgdC50Y2Fyb24gPSAzNjY7CiAgICB0LmVvZ29uZWsgPSA0NDQ7CiAgICB0LlVvZ29uZWsgPSA3MjI7CiAgICB0LkFhY3V0ZSA9IDY2NzsKICAgIHQuQWRpZXJlc2lzID0gNjY3OwogICAgdC5lZ3JhdmUgPSA0NDQ7CiAgICB0LnphY3V0ZSA9IDM4OTsKICAgIHQuaW9nb25layA9IDI3ODsKICAgIHQuT2FjdXRlID0gNzIyOwogICAgdC5vYWN1dGUgPSA1MDA7CiAgICB0LmFtYWNyb24gPSA1MDA7CiAgICB0LnNhY3V0ZSA9IDM4OTsKICAgIHQuaWRpZXJlc2lzID0gMjc4OwogICAgdC5PY2lyY3VtZmxleCA9IDcyMjsKICAgIHQuVWdyYXZlID0gNzIyOwogICAgdC5EZWx0YSA9IDYxMjsKICAgIHQudGhvcm4gPSA1MDA7CiAgICB0LnR3b3N1cGVyaW9yID0gMzAwOwogICAgdC5PZGllcmVzaXMgPSA3MjI7CiAgICB0Lm11ID0gNTc2OwogICAgdC5pZ3JhdmUgPSAyNzg7CiAgICB0Lm9odW5nYXJ1bWxhdXQgPSA1MDA7CiAgICB0LkVvZ29uZWsgPSA2Njc7CiAgICB0LmRjcm9hdCA9IDUwMDsKICAgIHQudGhyZWVxdWFydGVycyA9IDc1MDsKICAgIHQuU2NlZGlsbGEgPSA1NTY7CiAgICB0LmxjYXJvbiA9IDM4MjsKICAgIHQuS2NvbW1hYWNjZW50ID0gNjY3OwogICAgdC5MYWN1dGUgPSA2MTE7CiAgICB0LnRyYWRlbWFyayA9IDEwMDA7CiAgICB0LmVkb3RhY2NlbnQgPSA0NDQ7CiAgICB0LklncmF2ZSA9IDM4OTsKICAgIHQuSW1hY3JvbiA9IDM4OTsKICAgIHQuTGNhcm9uID0gNjExOwogICAgdC5vbmVoYWxmID0gNzUwOwogICAgdC5sZXNzZXF1YWwgPSA1NDk7CiAgICB0Lm9jaXJjdW1mbGV4ID0gNTAwOwogICAgdC5udGlsZGUgPSA1NTY7CiAgICB0LlVodW5nYXJ1bWxhdXQgPSA3MjI7CiAgICB0LkVhY3V0ZSA9IDY2NzsKICAgIHQuZW1hY3JvbiA9IDQ0NDsKICAgIHQuZ2JyZXZlID0gNTAwOwogICAgdC5vbmVxdWFydGVyID0gNzUwOwogICAgdC5TY2Fyb24gPSA1NTY7CiAgICB0LlNjb21tYWFjY2VudCA9IDU1NjsKICAgIHQuT2h1bmdhcnVtbGF1dCA9IDcyMjsKICAgIHQuZGVncmVlID0gNDAwOwogICAgdC5vZ3JhdmUgPSA1MDA7CiAgICB0LkNjYXJvbiA9IDY2NzsKICAgIHQudWdyYXZlID0gNTU2OwogICAgdC5yYWRpY2FsID0gNTQ5OwogICAgdC5EY2Fyb24gPSA3MjI7CiAgICB0LnJjb21tYWFjY2VudCA9IDM4OTsKICAgIHQuTnRpbGRlID0gNzIyOwogICAgdC5vdGlsZGUgPSA1MDA7CiAgICB0LlJjb21tYWFjY2VudCA9IDY2NzsKICAgIHQuTGNvbW1hYWNjZW50ID0gNjExOwogICAgdC5BdGlsZGUgPSA2Njc7CiAgICB0LkFvZ29uZWsgPSA2Njc7CiAgICB0LkFyaW5nID0gNjY3OwogICAgdC5PdGlsZGUgPSA3MjI7CiAgICB0Lnpkb3RhY2NlbnQgPSAzODk7CiAgICB0LkVjYXJvbiA9IDY2NzsKICAgIHQuSW9nb25layA9IDM4OTsKICAgIHQua2NvbW1hYWNjZW50ID0gNTAwOwogICAgdC5taW51cyA9IDYwNjsKICAgIHQuSWNpcmN1bWZsZXggPSAzODk7CiAgICB0Lm5jYXJvbiA9IDU1NjsKICAgIHQudGNvbW1hYWNjZW50ID0gMjc4OwogICAgdC5sb2dpY2Fsbm90ID0gNjA2OwogICAgdC5vZGllcmVzaXMgPSA1MDA7CiAgICB0LnVkaWVyZXNpcyA9IDU1NjsKICAgIHQubm90ZXF1YWwgPSA1NDk7CiAgICB0Lmdjb21tYWFjY2VudCA9IDUwMDsKICAgIHQuZXRoID0gNTAwOwogICAgdC56Y2Fyb24gPSAzODk7CiAgICB0Lm5jb21tYWFjY2VudCA9IDU1NjsKICAgIHQub25lc3VwZXJpb3IgPSAzMDA7CiAgICB0LmltYWNyb24gPSAyNzg7CiAgICB0LkV1cm8gPSA1MDA7CiAgfSk7CiAgdFsiVGltZXMtSXRhbGljIl0gPSBnZXRMb29rdXBUYWJsZUZhY3RvcnkoZnVuY3Rpb24gKHQpIHsKICAgIHQuc3BhY2UgPSAyNTA7CiAgICB0LmV4Y2xhbSA9IDMzMzsKICAgIHQucXVvdGVkYmwgPSA0MjA7CiAgICB0Lm51bWJlcnNpZ24gPSA1MDA7CiAgICB0LmRvbGxhciA9IDUwMDsKICAgIHQucGVyY2VudCA9IDgzMzsKICAgIHQuYW1wZXJzYW5kID0gNzc4OwogICAgdC5xdW90ZXJpZ2h0ID0gMzMzOwogICAgdC5wYXJlbmxlZnQgPSAzMzM7CiAgICB0LnBhcmVucmlnaHQgPSAzMzM7CiAgICB0LmFzdGVyaXNrID0gNTAwOwogICAgdC5wbHVzID0gNjc1OwogICAgdC5jb21tYSA9IDI1MDsKICAgIHQuaHlwaGVuID0gMzMzOwogICAgdC5wZXJpb2QgPSAyNTA7CiAgICB0LnNsYXNoID0gMjc4OwogICAgdC56ZXJvID0gNTAwOwogICAgdC5vbmUgPSA1MDA7CiAgICB0LnR3byA9IDUwMDsKICAgIHQudGhyZWUgPSA1MDA7CiAgICB0LmZvdXIgPSA1MDA7CiAgICB0LmZpdmUgPSA1MDA7CiAgICB0LnNpeCA9IDUwMDsKICAgIHQuc2V2ZW4gPSA1MDA7CiAgICB0LmVpZ2h0ID0gNTAwOwogICAgdC5uaW5lID0gNTAwOwogICAgdC5jb2xvbiA9IDMzMzsKICAgIHQuc2VtaWNvbG9uID0gMzMzOwogICAgdC5sZXNzID0gNjc1OwogICAgdC5lcXVhbCA9IDY3NTsKICAgIHQuZ3JlYXRlciA9IDY3NTsKICAgIHQucXVlc3Rpb24gPSA1MDA7CiAgICB0LmF0ID0gOTIwOwogICAgdC5BID0gNjExOwogICAgdC5CID0gNjExOwogICAgdC5DID0gNjY3OwogICAgdC5EID0gNzIyOwogICAgdC5FID0gNjExOwogICAgdC5GID0gNjExOwogICAgdC5HID0gNzIyOwogICAgdC5IID0gNzIyOwogICAgdC5JID0gMzMzOwogICAgdC5KID0gNDQ0OwogICAgdC5LID0gNjY3OwogICAgdC5MID0gNTU2OwogICAgdC5NID0gODMzOwogICAgdC5OID0gNjY3OwogICAgdC5PID0gNzIyOwogICAgdC5QID0gNjExOwogICAgdC5RID0gNzIyOwogICAgdC5SID0gNjExOwogICAgdC5TID0gNTAwOwogICAgdC5UID0gNTU2OwogICAgdC5VID0gNzIyOwogICAgdC5WID0gNjExOwogICAgdC5XID0gODMzOwogICAgdC5YID0gNjExOwogICAgdC5ZID0gNTU2OwogICAgdC5aID0gNTU2OwogICAgdC5icmFja2V0bGVmdCA9IDM4OTsKICAgIHQuYmFja3NsYXNoID0gMjc4OwogICAgdC5icmFja2V0cmlnaHQgPSAzODk7CiAgICB0LmFzY2lpY2lyY3VtID0gNDIyOwogICAgdC51bmRlcnNjb3JlID0gNTAwOwogICAgdC5xdW90ZWxlZnQgPSAzMzM7CiAgICB0LmEgPSA1MDA7CiAgICB0LmIgPSA1MDA7CiAgICB0LmMgPSA0NDQ7CiAgICB0LmQgPSA1MDA7CiAgICB0LmUgPSA0NDQ7CiAgICB0LmYgPSAyNzg7CiAgICB0LmcgPSA1MDA7CiAgICB0LmggPSA1MDA7CiAgICB0LmkgPSAyNzg7CiAgICB0LmogPSAyNzg7CiAgICB0LmsgPSA0NDQ7CiAgICB0LmwgPSAyNzg7CiAgICB0Lm0gPSA3MjI7CiAgICB0Lm4gPSA1MDA7CiAgICB0Lm8gPSA1MDA7CiAgICB0LnAgPSA1MDA7CiAgICB0LnEgPSA1MDA7CiAgICB0LnIgPSAzODk7CiAgICB0LnMgPSAzODk7CiAgICB0LnQgPSAyNzg7CiAgICB0LnUgPSA1MDA7CiAgICB0LnYgPSA0NDQ7CiAgICB0LncgPSA2Njc7CiAgICB0LnggPSA0NDQ7CiAgICB0LnkgPSA0NDQ7CiAgICB0LnogPSAzODk7CiAgICB0LmJyYWNlbGVmdCA9IDQwMDsKICAgIHQuYmFyID0gMjc1OwogICAgdC5icmFjZXJpZ2h0ID0gNDAwOwogICAgdC5hc2NpaXRpbGRlID0gNTQxOwogICAgdC5leGNsYW1kb3duID0gMzg5OwogICAgdC5jZW50ID0gNTAwOwogICAgdC5zdGVybGluZyA9IDUwMDsKICAgIHQuZnJhY3Rpb24gPSAxNjc7CiAgICB0LnllbiA9IDUwMDsKICAgIHQuZmxvcmluID0gNTAwOwogICAgdC5zZWN0aW9uID0gNTAwOwogICAgdC5jdXJyZW5jeSA9IDUwMDsKICAgIHQucXVvdGVzaW5nbGUgPSAyMTQ7CiAgICB0LnF1b3RlZGJsbGVmdCA9IDU1NjsKICAgIHQuZ3VpbGxlbW90bGVmdCA9IDUwMDsKICAgIHQuZ3VpbHNpbmdsbGVmdCA9IDMzMzsKICAgIHQuZ3VpbHNpbmdscmlnaHQgPSAzMzM7CiAgICB0LmZpID0gNTAwOwogICAgdC5mbCA9IDUwMDsKICAgIHQuZW5kYXNoID0gNTAwOwogICAgdC5kYWdnZXIgPSA1MDA7CiAgICB0LmRhZ2dlcmRibCA9IDUwMDsKICAgIHQucGVyaW9kY2VudGVyZWQgPSAyNTA7CiAgICB0LnBhcmFncmFwaCA9IDUyMzsKICAgIHQuYnVsbGV0ID0gMzUwOwogICAgdC5xdW90ZXNpbmdsYmFzZSA9IDMzMzsKICAgIHQucXVvdGVkYmxiYXNlID0gNTU2OwogICAgdC5xdW90ZWRibHJpZ2h0ID0gNTU2OwogICAgdC5ndWlsbGVtb3RyaWdodCA9IDUwMDsKICAgIHQuZWxsaXBzaXMgPSA4ODk7CiAgICB0LnBlcnRob3VzYW5kID0gMTAwMDsKICAgIHQucXVlc3Rpb25kb3duID0gNTAwOwogICAgdC5ncmF2ZSA9IDMzMzsKICAgIHQuYWN1dGUgPSAzMzM7CiAgICB0LmNpcmN1bWZsZXggPSAzMzM7CiAgICB0LnRpbGRlID0gMzMzOwogICAgdC5tYWNyb24gPSAzMzM7CiAgICB0LmJyZXZlID0gMzMzOwogICAgdC5kb3RhY2NlbnQgPSAzMzM7CiAgICB0LmRpZXJlc2lzID0gMzMzOwogICAgdC5yaW5nID0gMzMzOwogICAgdC5jZWRpbGxhID0gMzMzOwogICAgdC5odW5nYXJ1bWxhdXQgPSAzMzM7CiAgICB0Lm9nb25layA9IDMzMzsKICAgIHQuY2Fyb24gPSAzMzM7CiAgICB0LmVtZGFzaCA9IDg4OTsKICAgIHQuQUUgPSA4ODk7CiAgICB0Lm9yZGZlbWluaW5lID0gMjc2OwogICAgdC5Mc2xhc2ggPSA1NTY7CiAgICB0Lk9zbGFzaCA9IDcyMjsKICAgIHQuT0UgPSA5NDQ7CiAgICB0Lm9yZG1hc2N1bGluZSA9IDMxMDsKICAgIHQuYWUgPSA2Njc7CiAgICB0LmRvdGxlc3NpID0gMjc4OwogICAgdC5sc2xhc2ggPSAyNzg7CiAgICB0Lm9zbGFzaCA9IDUwMDsKICAgIHQub2UgPSA2Njc7CiAgICB0Lmdlcm1hbmRibHMgPSA1MDA7CiAgICB0LklkaWVyZXNpcyA9IDMzMzsKICAgIHQuZWFjdXRlID0gNDQ0OwogICAgdC5hYnJldmUgPSA1MDA7CiAgICB0LnVodW5nYXJ1bWxhdXQgPSA1MDA7CiAgICB0LmVjYXJvbiA9IDQ0NDsKICAgIHQuWWRpZXJlc2lzID0gNTU2OwogICAgdC5kaXZpZGUgPSA2NzU7CiAgICB0LllhY3V0ZSA9IDU1NjsKICAgIHQuQWNpcmN1bWZsZXggPSA2MTE7CiAgICB0LmFhY3V0ZSA9IDUwMDsKICAgIHQuVWNpcmN1bWZsZXggPSA3MjI7CiAgICB0LnlhY3V0ZSA9IDQ0NDsKICAgIHQuc2NvbW1hYWNjZW50ID0gMzg5OwogICAgdC5lY2lyY3VtZmxleCA9IDQ0NDsKICAgIHQuVXJpbmcgPSA3MjI7CiAgICB0LlVkaWVyZXNpcyA9IDcyMjsKICAgIHQuYW9nb25layA9IDUwMDsKICAgIHQuVWFjdXRlID0gNzIyOwogICAgdC51b2dvbmVrID0gNTAwOwogICAgdC5FZGllcmVzaXMgPSA2MTE7CiAgICB0LkRjcm9hdCA9IDcyMjsKICAgIHQuY29tbWFhY2NlbnQgPSAyNTA7CiAgICB0LmNvcHlyaWdodCA9IDc2MDsKICAgIHQuRW1hY3JvbiA9IDYxMTsKICAgIHQuY2Nhcm9uID0gNDQ0OwogICAgdC5hcmluZyA9IDUwMDsKICAgIHQuTmNvbW1hYWNjZW50ID0gNjY3OwogICAgdC5sYWN1dGUgPSAyNzg7CiAgICB0LmFncmF2ZSA9IDUwMDsKICAgIHQuVGNvbW1hYWNjZW50ID0gNTU2OwogICAgdC5DYWN1dGUgPSA2Njc7CiAgICB0LmF0aWxkZSA9IDUwMDsKICAgIHQuRWRvdGFjY2VudCA9IDYxMTsKICAgIHQuc2Nhcm9uID0gMzg5OwogICAgdC5zY2VkaWxsYSA9IDM4OTsKICAgIHQuaWFjdXRlID0gMjc4OwogICAgdC5sb3plbmdlID0gNDcxOwogICAgdC5SY2Fyb24gPSA2MTE7CiAgICB0Lkdjb21tYWFjY2VudCA9IDcyMjsKICAgIHQudWNpcmN1bWZsZXggPSA1MDA7CiAgICB0LmFjaXJjdW1mbGV4ID0gNTAwOwogICAgdC5BbWFjcm9uID0gNjExOwogICAgdC5yY2Fyb24gPSAzODk7CiAgICB0LmNjZWRpbGxhID0gNDQ0OwogICAgdC5aZG90YWNjZW50ID0gNTU2OwogICAgdC5UaG9ybiA9IDYxMTsKICAgIHQuT21hY3JvbiA9IDcyMjsKICAgIHQuUmFjdXRlID0gNjExOwogICAgdC5TYWN1dGUgPSA1MDA7CiAgICB0LmRjYXJvbiA9IDU0NDsKICAgIHQuVW1hY3JvbiA9IDcyMjsKICAgIHQudXJpbmcgPSA1MDA7CiAgICB0LnRocmVlc3VwZXJpb3IgPSAzMDA7CiAgICB0Lk9ncmF2ZSA9IDcyMjsKICAgIHQuQWdyYXZlID0gNjExOwogICAgdC5BYnJldmUgPSA2MTE7CiAgICB0Lm11bHRpcGx5ID0gNjc1OwogICAgdC51YWN1dGUgPSA1MDA7CiAgICB0LlRjYXJvbiA9IDU1NjsKICAgIHQucGFydGlhbGRpZmYgPSA0NzY7CiAgICB0LnlkaWVyZXNpcyA9IDQ0NDsKICAgIHQuTmFjdXRlID0gNjY3OwogICAgdC5pY2lyY3VtZmxleCA9IDI3ODsKICAgIHQuRWNpcmN1bWZsZXggPSA2MTE7CiAgICB0LmFkaWVyZXNpcyA9IDUwMDsKICAgIHQuZWRpZXJlc2lzID0gNDQ0OwogICAgdC5jYWN1dGUgPSA0NDQ7CiAgICB0Lm5hY3V0ZSA9IDUwMDsKICAgIHQudW1hY3JvbiA9IDUwMDsKICAgIHQuTmNhcm9uID0gNjY3OwogICAgdC5JYWN1dGUgPSAzMzM7CiAgICB0LnBsdXNtaW51cyA9IDY3NTsKICAgIHQuYnJva2VuYmFyID0gMjc1OwogICAgdC5yZWdpc3RlcmVkID0gNzYwOwogICAgdC5HYnJldmUgPSA3MjI7CiAgICB0Lklkb3RhY2NlbnQgPSAzMzM7CiAgICB0LnN1bW1hdGlvbiA9IDYwMDsKICAgIHQuRWdyYXZlID0gNjExOwogICAgdC5yYWN1dGUgPSAzODk7CiAgICB0Lm9tYWNyb24gPSA1MDA7CiAgICB0LlphY3V0ZSA9IDU1NjsKICAgIHQuWmNhcm9uID0gNTU2OwogICAgdC5ncmVhdGVyZXF1YWwgPSA1NDk7CiAgICB0LkV0aCA9IDcyMjsKICAgIHQuQ2NlZGlsbGEgPSA2Njc7CiAgICB0Lmxjb21tYWFjY2VudCA9IDI3ODsKICAgIHQudGNhcm9uID0gMzAwOwogICAgdC5lb2dvbmVrID0gNDQ0OwogICAgdC5Vb2dvbmVrID0gNzIyOwogICAgdC5BYWN1dGUgPSA2MTE7CiAgICB0LkFkaWVyZXNpcyA9IDYxMTsKICAgIHQuZWdyYXZlID0gNDQ0OwogICAgdC56YWN1dGUgPSAzODk7CiAgICB0LmlvZ29uZWsgPSAyNzg7CiAgICB0Lk9hY3V0ZSA9IDcyMjsKICAgIHQub2FjdXRlID0gNTAwOwogICAgdC5hbWFjcm9uID0gNTAwOwogICAgdC5zYWN1dGUgPSAzODk7CiAgICB0LmlkaWVyZXNpcyA9IDI3ODsKICAgIHQuT2NpcmN1bWZsZXggPSA3MjI7CiAgICB0LlVncmF2ZSA9IDcyMjsKICAgIHQuRGVsdGEgPSA2MTI7CiAgICB0LnRob3JuID0gNTAwOwogICAgdC50d29zdXBlcmlvciA9IDMwMDsKICAgIHQuT2RpZXJlc2lzID0gNzIyOwogICAgdC5tdSA9IDUwMDsKICAgIHQuaWdyYXZlID0gMjc4OwogICAgdC5vaHVuZ2FydW1sYXV0ID0gNTAwOwogICAgdC5Fb2dvbmVrID0gNjExOwogICAgdC5kY3JvYXQgPSA1MDA7CiAgICB0LnRocmVlcXVhcnRlcnMgPSA3NTA7CiAgICB0LlNjZWRpbGxhID0gNTAwOwogICAgdC5sY2Fyb24gPSAzMDA7CiAgICB0Lktjb21tYWFjY2VudCA9IDY2NzsKICAgIHQuTGFjdXRlID0gNTU2OwogICAgdC50cmFkZW1hcmsgPSA5ODA7CiAgICB0LmVkb3RhY2NlbnQgPSA0NDQ7CiAgICB0LklncmF2ZSA9IDMzMzsKICAgIHQuSW1hY3JvbiA9IDMzMzsKICAgIHQuTGNhcm9uID0gNjExOwogICAgdC5vbmVoYWxmID0gNzUwOwogICAgdC5sZXNzZXF1YWwgPSA1NDk7CiAgICB0Lm9jaXJjdW1mbGV4ID0gNTAwOwogICAgdC5udGlsZGUgPSA1MDA7CiAgICB0LlVodW5nYXJ1bWxhdXQgPSA3MjI7CiAgICB0LkVhY3V0ZSA9IDYxMTsKICAgIHQuZW1hY3JvbiA9IDQ0NDsKICAgIHQuZ2JyZXZlID0gNTAwOwogICAgdC5vbmVxdWFydGVyID0gNzUwOwogICAgdC5TY2Fyb24gPSA1MDA7CiAgICB0LlNjb21tYWFjY2VudCA9IDUwMDsKICAgIHQuT2h1bmdhcnVtbGF1dCA9IDcyMjsKICAgIHQuZGVncmVlID0gNDAwOwogICAgdC5vZ3JhdmUgPSA1MDA7CiAgICB0LkNjYXJvbiA9IDY2NzsKICAgIHQudWdyYXZlID0gNTAwOwogICAgdC5yYWRpY2FsID0gNDUzOwogICAgdC5EY2Fyb24gPSA3MjI7CiAgICB0LnJjb21tYWFjY2VudCA9IDM4OTsKICAgIHQuTnRpbGRlID0gNjY3OwogICAgdC5vdGlsZGUgPSA1MDA7CiAgICB0LlJjb21tYWFjY2VudCA9IDYxMTsKICAgIHQuTGNvbW1hYWNjZW50ID0gNTU2OwogICAgdC5BdGlsZGUgPSA2MTE7CiAgICB0LkFvZ29uZWsgPSA2MTE7CiAgICB0LkFyaW5nID0gNjExOwogICAgdC5PdGlsZGUgPSA3MjI7CiAgICB0Lnpkb3RhY2NlbnQgPSAzODk7CiAgICB0LkVjYXJvbiA9IDYxMTsKICAgIHQuSW9nb25layA9IDMzMzsKICAgIHQua2NvbW1hYWNjZW50ID0gNDQ0OwogICAgdC5taW51cyA9IDY3NTsKICAgIHQuSWNpcmN1bWZsZXggPSAzMzM7CiAgICB0Lm5jYXJvbiA9IDUwMDsKICAgIHQudGNvbW1hYWNjZW50ID0gMjc4OwogICAgdC5sb2dpY2Fsbm90ID0gNjc1OwogICAgdC5vZGllcmVzaXMgPSA1MDA7CiAgICB0LnVkaWVyZXNpcyA9IDUwMDsKICAgIHQubm90ZXF1YWwgPSA1NDk7CiAgICB0Lmdjb21tYWFjY2VudCA9IDUwMDsKICAgIHQuZXRoID0gNTAwOwogICAgdC56Y2Fyb24gPSAzODk7CiAgICB0Lm5jb21tYWFjY2VudCA9IDUwMDsKICAgIHQub25lc3VwZXJpb3IgPSAzMDA7CiAgICB0LmltYWNyb24gPSAyNzg7CiAgICB0LkV1cm8gPSA1MDA7CiAgfSk7CiAgdC5aYXBmRGluZ2JhdHMgPSBnZXRMb29rdXBUYWJsZUZhY3RvcnkoZnVuY3Rpb24gKHQpIHsKICAgIHQuc3BhY2UgPSAyNzg7CiAgICB0LmExID0gOTc0OwogICAgdC5hMiA9IDk2MTsKICAgIHQuYTIwMiA9IDk3NDsKICAgIHQuYTMgPSA5ODA7CiAgICB0LmE0ID0gNzE5OwogICAgdC5hNSA9IDc4OTsKICAgIHQuYTExOSA9IDc5MDsKICAgIHQuYTExOCA9IDc5MTsKICAgIHQuYTExNyA9IDY5MDsKICAgIHQuYTExID0gOTYwOwogICAgdC5hMTIgPSA5Mzk7CiAgICB0LmExMyA9IDU0OTsKICAgIHQuYTE0ID0gODU1OwogICAgdC5hMTUgPSA5MTE7CiAgICB0LmExNiA9IDkzMzsKICAgIHQuYTEwNSA9IDkxMTsKICAgIHQuYTE3ID0gOTQ1OwogICAgdC5hMTggPSA5NzQ7CiAgICB0LmExOSA9IDc1NTsKICAgIHQuYTIwID0gODQ2OwogICAgdC5hMjEgPSA3NjI7CiAgICB0LmEyMiA9IDc2MTsKICAgIHQuYTIzID0gNTcxOwogICAgdC5hMjQgPSA2Nzc7CiAgICB0LmEyNSA9IDc2MzsKICAgIHQuYTI2ID0gNzYwOwogICAgdC5hMjcgPSA3NTk7CiAgICB0LmEyOCA9IDc1NDsKICAgIHQuYTYgPSA0OTQ7CiAgICB0LmE3ID0gNTUyOwogICAgdC5hOCA9IDUzNzsKICAgIHQuYTkgPSA1Nzc7CiAgICB0LmExMCA9IDY5MjsKICAgIHQuYTI5ID0gNzg2OwogICAgdC5hMzAgPSA3ODg7CiAgICB0LmEzMSA9IDc4ODsKICAgIHQuYTMyID0gNzkwOwogICAgdC5hMzMgPSA3OTM7CiAgICB0LmEzNCA9IDc5NDsKICAgIHQuYTM1ID0gODE2OwogICAgdC5hMzYgPSA4MjM7CiAgICB0LmEzNyA9IDc4OTsKICAgIHQuYTM4ID0gODQxOwogICAgdC5hMzkgPSA4MjM7CiAgICB0LmE0MCA9IDgzMzsKICAgIHQuYTQxID0gODE2OwogICAgdC5hNDIgPSA4MzE7CiAgICB0LmE0MyA9IDkyMzsKICAgIHQuYTQ0ID0gNzQ0OwogICAgdC5hNDUgPSA3MjM7CiAgICB0LmE0NiA9IDc0OTsKICAgIHQuYTQ3ID0gNzkwOwogICAgdC5hNDggPSA3OTI7CiAgICB0LmE0OSA9IDY5NTsKICAgIHQuYTUwID0gNzc2OwogICAgdC5hNTEgPSA3Njg7CiAgICB0LmE1MiA9IDc5MjsKICAgIHQuYTUzID0gNzU5OwogICAgdC5hNTQgPSA3MDc7CiAgICB0LmE1NSA9IDcwODsKICAgIHQuYTU2ID0gNjgyOwogICAgdC5hNTcgPSA3MDE7CiAgICB0LmE1OCA9IDgyNjsKICAgIHQuYTU5ID0gODE1OwogICAgdC5hNjAgPSA3ODk7CiAgICB0LmE2MSA9IDc4OTsKICAgIHQuYTYyID0gNzA3OwogICAgdC5hNjMgPSA2ODc7CiAgICB0LmE2NCA9IDY5NjsKICAgIHQuYTY1ID0gNjg5OwogICAgdC5hNjYgPSA3ODY7CiAgICB0LmE2NyA9IDc4NzsKICAgIHQuYTY4ID0gNzEzOwogICAgdC5hNjkgPSA3OTE7CiAgICB0LmE3MCA9IDc4NTsKICAgIHQuYTcxID0gNzkxOwogICAgdC5hNzIgPSA4NzM7CiAgICB0LmE3MyA9IDc2MTsKICAgIHQuYTc0ID0gNzYyOwogICAgdC5hMjAzID0gNzYyOwogICAgdC5hNzUgPSA3NTk7CiAgICB0LmEyMDQgPSA3NTk7CiAgICB0LmE3NiA9IDg5MjsKICAgIHQuYTc3ID0gODkyOwogICAgdC5hNzggPSA3ODg7CiAgICB0LmE3OSA9IDc4NDsKICAgIHQuYTgxID0gNDM4OwogICAgdC5hODIgPSAxMzg7CiAgICB0LmE4MyA9IDI3NzsKICAgIHQuYTg0ID0gNDE1OwogICAgdC5hOTcgPSAzOTI7CiAgICB0LmE5OCA9IDM5MjsKICAgIHQuYTk5ID0gNjY4OwogICAgdC5hMTAwID0gNjY4OwogICAgdC5hODkgPSAzOTA7CiAgICB0LmE5MCA9IDM5MDsKICAgIHQuYTkzID0gMzE3OwogICAgdC5hOTQgPSAzMTc7CiAgICB0LmE5MSA9IDI3NjsKICAgIHQuYTkyID0gMjc2OwogICAgdC5hMjA1ID0gNTA5OwogICAgdC5hODUgPSA1MDk7CiAgICB0LmEyMDYgPSA0MTA7CiAgICB0LmE4NiA9IDQxMDsKICAgIHQuYTg3ID0gMjM0OwogICAgdC5hODggPSAyMzQ7CiAgICB0LmE5NSA9IDMzNDsKICAgIHQuYTk2ID0gMzM0OwogICAgdC5hMTAxID0gNzMyOwogICAgdC5hMTAyID0gNTQ0OwogICAgdC5hMTAzID0gNTQ0OwogICAgdC5hMTA0ID0gOTEwOwogICAgdC5hMTA2ID0gNjY3OwogICAgdC5hMTA3ID0gNzYwOwogICAgdC5hMTA4ID0gNzYwOwogICAgdC5hMTEyID0gNzc2OwogICAgdC5hMTExID0gNTk1OwogICAgdC5hMTEwID0gNjk0OwogICAgdC5hMTA5ID0gNjI2OwogICAgdC5hMTIwID0gNzg4OwogICAgdC5hMTIxID0gNzg4OwogICAgdC5hMTIyID0gNzg4OwogICAgdC5hMTIzID0gNzg4OwogICAgdC5hMTI0ID0gNzg4OwogICAgdC5hMTI1ID0gNzg4OwogICAgdC5hMTI2ID0gNzg4OwogICAgdC5hMTI3ID0gNzg4OwogICAgdC5hMTI4ID0gNzg4OwogICAgdC5hMTI5ID0gNzg4OwogICAgdC5hMTMwID0gNzg4OwogICAgdC5hMTMxID0gNzg4OwogICAgdC5hMTMyID0gNzg4OwogICAgdC5hMTMzID0gNzg4OwogICAgdC5hMTM0ID0gNzg4OwogICAgdC5hMTM1ID0gNzg4OwogICAgdC5hMTM2ID0gNzg4OwogICAgdC5hMTM3ID0gNzg4OwogICAgdC5hMTM4ID0gNzg4OwogICAgdC5hMTM5ID0gNzg4OwogICAgdC5hMTQwID0gNzg4OwogICAgdC5hMTQxID0gNzg4OwogICAgdC5hMTQyID0gNzg4OwogICAgdC5hMTQzID0gNzg4OwogICAgdC5hMTQ0ID0gNzg4OwogICAgdC5hMTQ1ID0gNzg4OwogICAgdC5hMTQ2ID0gNzg4OwogICAgdC5hMTQ3ID0gNzg4OwogICAgdC5hMTQ4ID0gNzg4OwogICAgdC5hMTQ5ID0gNzg4OwogICAgdC5hMTUwID0gNzg4OwogICAgdC5hMTUxID0gNzg4OwogICAgdC5hMTUyID0gNzg4OwogICAgdC5hMTUzID0gNzg4OwogICAgdC5hMTU0ID0gNzg4OwogICAgdC5hMTU1ID0gNzg4OwogICAgdC5hMTU2ID0gNzg4OwogICAgdC5hMTU3ID0gNzg4OwogICAgdC5hMTU4ID0gNzg4OwogICAgdC5hMTU5ID0gNzg4OwogICAgdC5hMTYwID0gODk0OwogICAgdC5hMTYxID0gODM4OwogICAgdC5hMTYzID0gMTAxNjsKICAgIHQuYTE2NCA9IDQ1ODsKICAgIHQuYTE5NiA9IDc0ODsKICAgIHQuYTE2NSA9IDkyNDsKICAgIHQuYTE5MiA9IDc0ODsKICAgIHQuYTE2NiA9IDkxODsKICAgIHQuYTE2NyA9IDkyNzsKICAgIHQuYTE2OCA9IDkyODsKICAgIHQuYTE2OSA9IDkyODsKICAgIHQuYTE3MCA9IDgzNDsKICAgIHQuYTE3MSA9IDg3MzsKICAgIHQuYTE3MiA9IDgyODsKICAgIHQuYTE3MyA9IDkyNDsKICAgIHQuYTE2MiA9IDkyNDsKICAgIHQuYTE3NCA9IDkxNzsKICAgIHQuYTE3NSA9IDkzMDsKICAgIHQuYTE3NiA9IDkzMTsKICAgIHQuYTE3NyA9IDQ2MzsKICAgIHQuYTE3OCA9IDg4MzsKICAgIHQuYTE3OSA9IDgzNjsKICAgIHQuYTE5MyA9IDgzNjsKICAgIHQuYTE4MCA9IDg2NzsKICAgIHQuYTE5OSA9IDg2NzsKICAgIHQuYTE4MSA9IDY5NjsKICAgIHQuYTIwMCA9IDY5NjsKICAgIHQuYTE4MiA9IDg3NDsKICAgIHQuYTIwMSA9IDg3NDsKICAgIHQuYTE4MyA9IDc2MDsKICAgIHQuYTE4NCA9IDk0NjsKICAgIHQuYTE5NyA9IDc3MTsKICAgIHQuYTE4NSA9IDg2NTsKICAgIHQuYTE5NCA9IDc3MTsKICAgIHQuYTE5OCA9IDg4ODsKICAgIHQuYTE4NiA9IDk2NzsKICAgIHQuYTE5NSA9IDg4ODsKICAgIHQuYTE4NyA9IDgzMTsKICAgIHQuYTE4OCA9IDg3MzsKICAgIHQuYTE4OSA9IDkyNzsKICAgIHQuYTE5MCA9IDk3MDsKICAgIHQuYTE5MSA9IDkxODsKICB9KTsKfSk7CmNvbnN0IGdldEZvbnRCYXNpY01ldHJpY3MgPSBnZXRMb29rdXBUYWJsZUZhY3RvcnkoZnVuY3Rpb24gKHQpIHsKICB0LkNvdXJpZXIgPSB7CiAgICBhc2NlbnQ6IDYyOSwKICAgIGRlc2NlbnQ6IC0xNTcsCiAgICBjYXBIZWlnaHQ6IDU2MiwKICAgIHhIZWlnaHQ6IC00MjYKICB9OwogIHRbIkNvdXJpZXItQm9sZCJdID0gewogICAgYXNjZW50OiA2MjksCiAgICBkZXNjZW50OiAtMTU3LAogICAgY2FwSGVpZ2h0OiA1NjIsCiAgICB4SGVpZ2h0OiA0MzkKICB9OwogIHRbIkNvdXJpZXItT2JsaXF1ZSJdID0gewogICAgYXNjZW50OiA2MjksCiAgICBkZXNjZW50OiAtMTU3LAogICAgY2FwSGVpZ2h0OiA1NjIsCiAgICB4SGVpZ2h0OiA0MjYKICB9OwogIHRbIkNvdXJpZXItQm9sZE9ibGlxdWUiXSA9IHsKICAgIGFzY2VudDogNjI5LAogICAgZGVzY2VudDogLTE1NywKICAgIGNhcEhlaWdodDogNTYyLAogICAgeEhlaWdodDogNDI2CiAgfTsKICB0LkhlbHZldGljYSA9IHsKICAgIGFzY2VudDogNzE4LAogICAgZGVzY2VudDogLTIwNywKICAgIGNhcEhlaWdodDogNzE4LAogICAgeEhlaWdodDogNTIzCiAgfTsKICB0WyJIZWx2ZXRpY2EtQm9sZCJdID0gewogICAgYXNjZW50OiA3MTgsCiAgICBkZXNjZW50OiAtMjA3LAogICAgY2FwSGVpZ2h0OiA3MTgsCiAgICB4SGVpZ2h0OiA1MzIKICB9OwogIHRbIkhlbHZldGljYS1PYmxpcXVlIl0gPSB7CiAgICBhc2NlbnQ6IDcxOCwKICAgIGRlc2NlbnQ6IC0yMDcsCiAgICBjYXBIZWlnaHQ6IDcxOCwKICAgIHhIZWlnaHQ6IDUyMwogIH07CiAgdFsiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIl0gPSB7CiAgICBhc2NlbnQ6IDcxOCwKICAgIGRlc2NlbnQ6IC0yMDcsCiAgICBjYXBIZWlnaHQ6IDcxOCwKICAgIHhIZWlnaHQ6IDUzMgogIH07CiAgdFsiVGltZXMtUm9tYW4iXSA9IHsKICAgIGFzY2VudDogNjgzLAogICAgZGVzY2VudDogLTIxNywKICAgIGNhcEhlaWdodDogNjYyLAogICAgeEhlaWdodDogNDUwCiAgfTsKICB0WyJUaW1lcy1Cb2xkIl0gPSB7CiAgICBhc2NlbnQ6IDY4MywKICAgIGRlc2NlbnQ6IC0yMTcsCiAgICBjYXBIZWlnaHQ6IDY3NiwKICAgIHhIZWlnaHQ6IDQ2MQogIH07CiAgdFsiVGltZXMtSXRhbGljIl0gPSB7CiAgICBhc2NlbnQ6IDY4MywKICAgIGRlc2NlbnQ6IC0yMTcsCiAgICBjYXBIZWlnaHQ6IDY1MywKICAgIHhIZWlnaHQ6IDQ0MQogIH07CiAgdFsiVGltZXMtQm9sZEl0YWxpYyJdID0gewogICAgYXNjZW50OiA2ODMsCiAgICBkZXNjZW50OiAtMjE3LAogICAgY2FwSGVpZ2h0OiA2NjksCiAgICB4SGVpZ2h0OiA0NjIKICB9OwogIHQuU3ltYm9sID0gewogICAgYXNjZW50OiBNYXRoLk5hTiwKICAgIGRlc2NlbnQ6IE1hdGguTmFOLAogICAgY2FwSGVpZ2h0OiBNYXRoLk5hTiwKICAgIHhIZWlnaHQ6IE1hdGguTmFOCiAgfTsKICB0LlphcGZEaW5nYmF0cyA9IHsKICAgIGFzY2VudDogTWF0aC5OYU4sCiAgICBkZXNjZW50OiBNYXRoLk5hTiwKICAgIGNhcEhlaWdodDogTWF0aC5OYU4sCiAgICB4SGVpZ2h0OiBNYXRoLk5hTgogIH07Cn0pOwoKOy8vIC4vc3JjL2NvcmUvZ2x5Zi5qcwpjb25zdCBPTl9DVVJWRV9QT0lOVCA9IDEgPDwgMDsKY29uc3QgWF9TSE9SVF9WRUNUT1IgPSAxIDw8IDE7CmNvbnN0IFlfU0hPUlRfVkVDVE9SID0gMSA8PCAyOwpjb25zdCBSRVBFQVRfRkxBRyA9IDEgPDwgMzsKY29uc3QgWF9JU19TQU1FX09SX1BPU0lUSVZFX1hfU0hPUlRfVkVDVE9SID0gMSA8PCA0Owpjb25zdCBZX0lTX1NBTUVfT1JfUE9TSVRJVkVfWV9TSE9SVF9WRUNUT1IgPSAxIDw8IDU7CmNvbnN0IE9WRVJMQVBfU0lNUExFID0gMSA8PCA2Owpjb25zdCBBUkdfMV9BTkRfMl9BUkVfV09SRFMgPSAxIDw8IDA7CmNvbnN0IEFSR1NfQVJFX1hZX1ZBTFVFUyA9IDEgPDwgMTsKY29uc3QgV0VfSEFWRV9BX1NDQUxFID0gMSA8PCAzOwpjb25zdCBNT1JFX0NPTVBPTkVOVFMgPSAxIDw8IDU7CmNvbnN0IFdFX0hBVkVfQU5fWF9BTkRfWV9TQ0FMRSA9IDEgPDwgNjsKY29uc3QgV0VfSEFWRV9BX1RXT19CWV9UV08gPSAxIDw8IDc7CmNvbnN0IFdFX0hBVkVfSU5TVFJVQ1RJT05TID0gMSA8PCA4OwpjbGFzcyBHbHlmVGFibGUgewogIGNvbnN0cnVjdG9yKHsKICAgIGdseWZUYWJsZSwKICAgIGlzR2x5cGhMb2NhdGlvbnNMb25nLAogICAgbG9jYVRhYmxlLAogICAgbnVtR2x5cGhzCiAgfSkgewogICAgdGhpcy5nbHlwaHMgPSBbXTsKICAgIGNvbnN0IGxvY2EgPSBuZXcgRGF0YVZpZXcobG9jYVRhYmxlLmJ1ZmZlciwgbG9jYVRhYmxlLmJ5dGVPZmZzZXQsIGxvY2FUYWJsZS5ieXRlTGVuZ3RoKTsKICAgIGNvbnN0IGdseWYgPSBuZXcgRGF0YVZpZXcoZ2x5ZlRhYmxlLmJ1ZmZlciwgZ2x5ZlRhYmxlLmJ5dGVPZmZzZXQsIGdseWZUYWJsZS5ieXRlTGVuZ3RoKTsKICAgIGNvbnN0IG9mZnNldFNpemUgPSBpc0dseXBoTG9jYXRpb25zTG9uZyA/IDQgOiAyOwogICAgbGV0IHByZXYgPSBpc0dseXBoTG9jYXRpb25zTG9uZyA/IGxvY2EuZ2V0VWludDMyKDApIDogMiAqIGxvY2EuZ2V0VWludDE2KDApOwogICAgbGV0IHBvcyA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUdseXBoczsgaSsrKSB7CiAgICAgIHBvcyArPSBvZmZzZXRTaXplOwogICAgICBjb25zdCBuZXh0ID0gaXNHbHlwaExvY2F0aW9uc0xvbmcgPyBsb2NhLmdldFVpbnQzMihwb3MpIDogMiAqIGxvY2EuZ2V0VWludDE2KHBvcyk7CiAgICAgIGlmIChuZXh0ID09PSBwcmV2KSB7CiAgICAgICAgdGhpcy5nbHlwaHMucHVzaChuZXcgR2x5cGgoe30pKTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBjb25zdCBnbHlwaCA9IEdseXBoLnBhcnNlKHByZXYsIGdseWYpOwogICAgICB0aGlzLmdseXBocy5wdXNoKGdseXBoKTsKICAgICAgcHJldiA9IG5leHQ7CiAgICB9CiAgfQogIGdldFNpemUoKSB7CiAgICByZXR1cm4gTWF0aC5zdW1QcmVjaXNlKHRoaXMuZ2x5cGhzLm1hcChnID0+IGcuZ2V0U2l6ZSgpICsgMyAmIH4zKSk7CiAgfQogIHdyaXRlKCkgewogICAgY29uc3QgdG90YWxTaXplID0gdGhpcy5nZXRTaXplKCk7CiAgICBjb25zdCBnbHlmVGFibGUgPSBuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKHRvdGFsU2l6ZSkpOwogICAgY29uc3QgaXNMb2NhdGlvbkxvbmcgPSB0b3RhbFNpemUgPiAweDFmZmZlOwogICAgY29uc3Qgb2Zmc2V0U2l6ZSA9IGlzTG9jYXRpb25Mb25nID8gNCA6IDI7CiAgICBjb25zdCBsb2NhVGFibGUgPSBuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKCh0aGlzLmdseXBocy5sZW5ndGggKyAxKSAqIG9mZnNldFNpemUpKTsKICAgIGlmIChpc0xvY2F0aW9uTG9uZykgewogICAgICBsb2NhVGFibGUuc2V0VWludDMyKDAsIDApOwogICAgfSBlbHNlIHsKICAgICAgbG9jYVRhYmxlLnNldFVpbnQxNigwLCAwKTsKICAgIH0KICAgIGxldCBwb3MgPSAwOwogICAgbGV0IGxvY2FJbmRleCA9IDA7CiAgICBmb3IgKGNvbnN0IGdseXBoIG9mIHRoaXMuZ2x5cGhzKSB7CiAgICAgIHBvcyArPSBnbHlwaC53cml0ZShwb3MsIGdseWZUYWJsZSk7CiAgICAgIHBvcyA9IHBvcyArIDMgJiB+MzsKICAgICAgbG9jYUluZGV4ICs9IG9mZnNldFNpemU7CiAgICAgIGlmIChpc0xvY2F0aW9uTG9uZykgewogICAgICAgIGxvY2FUYWJsZS5zZXRVaW50MzIobG9jYUluZGV4LCBwb3MpOwogICAgICB9IGVsc2UgewogICAgICAgIGxvY2FUYWJsZS5zZXRVaW50MTYobG9jYUluZGV4LCBwb3MgPj4gMSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB7CiAgICAgIGlzTG9jYXRpb25Mb25nLAogICAgICBsb2NhOiBuZXcgVWludDhBcnJheShsb2NhVGFibGUuYnVmZmVyKSwKICAgICAgZ2x5ZjogbmV3IFVpbnQ4QXJyYXkoZ2x5ZlRhYmxlLmJ1ZmZlcikKICAgIH07CiAgfQogIHNjYWxlKGZhY3RvcnMpIHsKICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHRoaXMuZ2x5cGhzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgdGhpcy5nbHlwaHNbaV0uc2NhbGUoZmFjdG9yc1tpXSk7CiAgICB9CiAgfQp9CmNsYXNzIEdseXBoIHsKICBjb25zdHJ1Y3Rvcih7CiAgICBoZWFkZXIgPSBudWxsLAogICAgc2ltcGxlID0gbnVsbCwKICAgIGNvbXBvc2l0ZXMgPSBudWxsCiAgfSkgewogICAgdGhpcy5oZWFkZXIgPSBoZWFkZXI7CiAgICB0aGlzLnNpbXBsZSA9IHNpbXBsZTsKICAgIHRoaXMuY29tcG9zaXRlcyA9IGNvbXBvc2l0ZXM7CiAgfQogIHN0YXRpYyBwYXJzZShwb3MsIGdseWYpIHsKICAgIGNvbnN0IFtyZWFkLCBoZWFkZXJdID0gR2x5cGhIZWFkZXIucGFyc2UocG9zLCBnbHlmKTsKICAgIHBvcyArPSByZWFkOwogICAgaWYgKGhlYWRlci5udW1iZXJPZkNvbnRvdXJzIDwgMCkgewogICAgICBjb25zdCBjb21wb3NpdGVzID0gW107CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgY29uc3QgW24sIGNvbXBvc2l0ZV0gPSBDb21wb3NpdGVHbHlwaC5wYXJzZShwb3MsIGdseWYpOwogICAgICAgIHBvcyArPSBuOwogICAgICAgIGNvbXBvc2l0ZXMucHVzaChjb21wb3NpdGUpOwogICAgICAgIGlmICghKGNvbXBvc2l0ZS5mbGFncyAmIE1PUkVfQ09NUE9ORU5UUykpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbmV3IEdseXBoKHsKICAgICAgICBoZWFkZXIsCiAgICAgICAgY29tcG9zaXRlcwogICAgICB9KTsKICAgIH0KICAgIGNvbnN0IHNpbXBsZSA9IFNpbXBsZUdseXBoLnBhcnNlKHBvcywgZ2x5ZiwgaGVhZGVyLm51bWJlck9mQ29udG91cnMpOwogICAgcmV0dXJuIG5ldyBHbHlwaCh7CiAgICAgIGhlYWRlciwKICAgICAgc2ltcGxlCiAgICB9KTsKICB9CiAgZ2V0U2l6ZSgpIHsKICAgIGlmICghdGhpcy5oZWFkZXIpIHsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBjb25zdCBzaXplID0gdGhpcy5zaW1wbGUgPyB0aGlzLnNpbXBsZS5nZXRTaXplKCkgOiBNYXRoLnN1bVByZWNpc2UodGhpcy5jb21wb3NpdGVzLm1hcChjID0+IGMuZ2V0U2l6ZSgpKSk7CiAgICByZXR1cm4gdGhpcy5oZWFkZXIuZ2V0U2l6ZSgpICsgc2l6ZTsKICB9CiAgd3JpdGUocG9zLCBidWYpIHsKICAgIGlmICghdGhpcy5oZWFkZXIpIHsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBjb25zdCBzcG9zID0gcG9zOwogICAgcG9zICs9IHRoaXMuaGVhZGVyLndyaXRlKHBvcywgYnVmKTsKICAgIGlmICh0aGlzLnNpbXBsZSkgewogICAgICBwb3MgKz0gdGhpcy5zaW1wbGUud3JpdGUocG9zLCBidWYpOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChjb25zdCBjb21wb3NpdGUgb2YgdGhpcy5jb21wb3NpdGVzKSB7CiAgICAgICAgcG9zICs9IGNvbXBvc2l0ZS53cml0ZShwb3MsIGJ1Zik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBwb3MgLSBzcG9zOwogIH0KICBzY2FsZShmYWN0b3IpIHsKICAgIGlmICghdGhpcy5oZWFkZXIpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgeE1pZGRsZSA9ICh0aGlzLmhlYWRlci54TWluICsgdGhpcy5oZWFkZXIueE1heCkgLyAyOwogICAgdGhpcy5oZWFkZXIuc2NhbGUoeE1pZGRsZSwgZmFjdG9yKTsKICAgIGlmICh0aGlzLnNpbXBsZSkgewogICAgICB0aGlzLnNpbXBsZS5zY2FsZSh4TWlkZGxlLCBmYWN0b3IpOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChjb25zdCBjb21wb3NpdGUgb2YgdGhpcy5jb21wb3NpdGVzKSB7CiAgICAgICAgY29tcG9zaXRlLnNjYWxlKHhNaWRkbGUsIGZhY3Rvcik7CiAgICAgIH0KICAgIH0KICB9Cn0KY2xhc3MgR2x5cGhIZWFkZXIgewogIGNvbnN0cnVjdG9yKHsKICAgIG51bWJlck9mQ29udG91cnMsCiAgICB4TWluLAogICAgeU1pbiwKICAgIHhNYXgsCiAgICB5TWF4CiAgfSkgewogICAgdGhpcy5udW1iZXJPZkNvbnRvdXJzID0gbnVtYmVyT2ZDb250b3VyczsKICAgIHRoaXMueE1pbiA9IHhNaW47CiAgICB0aGlzLnlNaW4gPSB5TWluOwogICAgdGhpcy54TWF4ID0geE1heDsKICAgIHRoaXMueU1heCA9IHlNYXg7CiAgfQogIHN0YXRpYyBwYXJzZShwb3MsIGdseWYpIHsKICAgIHJldHVybiBbMTAsIG5ldyBHbHlwaEhlYWRlcih7CiAgICAgIG51bWJlck9mQ29udG91cnM6IGdseWYuZ2V0SW50MTYocG9zKSwKICAgICAgeE1pbjogZ2x5Zi5nZXRJbnQxNihwb3MgKyAyKSwKICAgICAgeU1pbjogZ2x5Zi5nZXRJbnQxNihwb3MgKyA0KSwKICAgICAgeE1heDogZ2x5Zi5nZXRJbnQxNihwb3MgKyA2KSwKICAgICAgeU1heDogZ2x5Zi5nZXRJbnQxNihwb3MgKyA4KQogICAgfSldOwogIH0KICBnZXRTaXplKCkgewogICAgcmV0dXJuIDEwOwogIH0KICB3cml0ZShwb3MsIGJ1ZikgewogICAgYnVmLnNldEludDE2KHBvcywgdGhpcy5udW1iZXJPZkNvbnRvdXJzKTsKICAgIGJ1Zi5zZXRJbnQxNihwb3MgKyAyLCB0aGlzLnhNaW4pOwogICAgYnVmLnNldEludDE2KHBvcyArIDQsIHRoaXMueU1pbik7CiAgICBidWYuc2V0SW50MTYocG9zICsgNiwgdGhpcy54TWF4KTsKICAgIGJ1Zi5zZXRJbnQxNihwb3MgKyA4LCB0aGlzLnlNYXgpOwogICAgcmV0dXJuIDEwOwogIH0KICBzY2FsZSh4LCBmYWN0b3IpIHsKICAgIHRoaXMueE1pbiA9IE1hdGgucm91bmQoeCArICh0aGlzLnhNaW4gLSB4KSAqIGZhY3Rvcik7CiAgICB0aGlzLnhNYXggPSBNYXRoLnJvdW5kKHggKyAodGhpcy54TWF4IC0geCkgKiBmYWN0b3IpOwogIH0KfQpjbGFzcyBDb250b3VyIHsKICBjb25zdHJ1Y3Rvcih7CiAgICBmbGFncywKICAgIHhDb29yZGluYXRlcywKICAgIHlDb29yZGluYXRlcwogIH0pIHsKICAgIHRoaXMueENvb3JkaW5hdGVzID0geENvb3JkaW5hdGVzOwogICAgdGhpcy55Q29vcmRpbmF0ZXMgPSB5Q29vcmRpbmF0ZXM7CiAgICB0aGlzLmZsYWdzID0gZmxhZ3M7CiAgfQp9CmNsYXNzIFNpbXBsZUdseXBoIHsKICBjb25zdHJ1Y3Rvcih7CiAgICBjb250b3VycywKICAgIGluc3RydWN0aW9ucwogIH0pIHsKICAgIHRoaXMuY29udG91cnMgPSBjb250b3VyczsKICAgIHRoaXMuaW5zdHJ1Y3Rpb25zID0gaW5zdHJ1Y3Rpb25zOwogIH0KICBzdGF0aWMgcGFyc2UocG9zLCBnbHlmLCBudW1iZXJPZkNvbnRvdXJzKSB7CiAgICBjb25zdCBlbmRQdHNPZkNvbnRvdXJzID0gW107CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bWJlck9mQ29udG91cnM7IGkrKykgewogICAgICBjb25zdCBlbmRQdCA9IGdseWYuZ2V0VWludDE2KHBvcyk7CiAgICAgIHBvcyArPSAyOwogICAgICBlbmRQdHNPZkNvbnRvdXJzLnB1c2goZW5kUHQpOwogICAgfQogICAgY29uc3QgbnVtYmVyT2ZQdCA9IGVuZFB0c09mQ29udG91cnNbbnVtYmVyT2ZDb250b3VycyAtIDFdICsgMTsKICAgIGNvbnN0IGluc3RydWN0aW9uTGVuZ3RoID0gZ2x5Zi5nZXRVaW50MTYocG9zKTsKICAgIHBvcyArPSAyOwogICAgY29uc3QgaW5zdHJ1Y3Rpb25zID0gbmV3IFVpbnQ4QXJyYXkoZ2x5Zikuc2xpY2UocG9zLCBwb3MgKyBpbnN0cnVjdGlvbkxlbmd0aCk7CiAgICBwb3MgKz0gaW5zdHJ1Y3Rpb25MZW5ndGg7CiAgICBjb25zdCBmbGFncyA9IFtdOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1iZXJPZlB0OyBwb3MrKywgaSsrKSB7CiAgICAgIGxldCBmbGFnID0gZ2x5Zi5nZXRVaW50OChwb3MpOwogICAgICBmbGFncy5wdXNoKGZsYWcpOwogICAgICBpZiAoZmxhZyAmIFJFUEVBVF9GTEFHKSB7CiAgICAgICAgY29uc3QgY291bnQgPSBnbHlmLmdldFVpbnQ4KCsrcG9zKTsKICAgICAgICBmbGFnIF49IFJFUEVBVF9GTEFHOwogICAgICAgIGZvciAobGV0IG0gPSAwOyBtIDwgY291bnQ7IG0rKykgewogICAgICAgICAgZmxhZ3MucHVzaChmbGFnKTsKICAgICAgICB9CiAgICAgICAgaSArPSBjb3VudDsKICAgICAgfQogICAgfQogICAgY29uc3QgYWxsWENvb3JkaW5hdGVzID0gW107CiAgICBsZXQgeENvb3JkaW5hdGVzID0gW107CiAgICBsZXQgeUNvb3JkaW5hdGVzID0gW107CiAgICBsZXQgcG9pbnRGbGFncyA9IFtdOwogICAgY29uc3QgY29udG91cnMgPSBbXTsKICAgIGxldCBlbmRQdHNPZkNvbnRvdXJzSW5kZXggPSAwOwogICAgbGV0IGxhc3RDb29yZGluYXRlID0gMDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyT2ZQdDsgaSsrKSB7CiAgICAgIGNvbnN0IGZsYWcgPSBmbGFnc1tpXTsKICAgICAgaWYgKGZsYWcgJiBYX1NIT1JUX1ZFQ1RPUikgewogICAgICAgIGNvbnN0IHggPSBnbHlmLmdldFVpbnQ4KHBvcysrKTsKICAgICAgICBsYXN0Q29vcmRpbmF0ZSArPSBmbGFnICYgWF9JU19TQU1FX09SX1BPU0lUSVZFX1hfU0hPUlRfVkVDVE9SID8geCA6IC14OwogICAgICAgIHhDb29yZGluYXRlcy5wdXNoKGxhc3RDb29yZGluYXRlKTsKICAgICAgfSBlbHNlIGlmIChmbGFnICYgWF9JU19TQU1FX09SX1BPU0lUSVZFX1hfU0hPUlRfVkVDVE9SKSB7CiAgICAgICAgeENvb3JkaW5hdGVzLnB1c2gobGFzdENvb3JkaW5hdGUpOwogICAgICB9IGVsc2UgewogICAgICAgIGxhc3RDb29yZGluYXRlICs9IGdseWYuZ2V0SW50MTYocG9zKTsKICAgICAgICBwb3MgKz0gMjsKICAgICAgICB4Q29vcmRpbmF0ZXMucHVzaChsYXN0Q29vcmRpbmF0ZSk7CiAgICAgIH0KICAgICAgaWYgKGVuZFB0c09mQ29udG91cnNbZW5kUHRzT2ZDb250b3Vyc0luZGV4XSA9PT0gaSkgewogICAgICAgIGVuZFB0c09mQ29udG91cnNJbmRleCsrOwogICAgICAgIGFsbFhDb29yZGluYXRlcy5wdXNoKHhDb29yZGluYXRlcyk7CiAgICAgICAgeENvb3JkaW5hdGVzID0gW107CiAgICAgIH0KICAgIH0KICAgIGxhc3RDb29yZGluYXRlID0gMDsKICAgIGVuZFB0c09mQ29udG91cnNJbmRleCA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bWJlck9mUHQ7IGkrKykgewogICAgICBjb25zdCBmbGFnID0gZmxhZ3NbaV07CiAgICAgIGlmIChmbGFnICYgWV9TSE9SVF9WRUNUT1IpIHsKICAgICAgICBjb25zdCB5ID0gZ2x5Zi5nZXRVaW50OChwb3MrKyk7CiAgICAgICAgbGFzdENvb3JkaW5hdGUgKz0gZmxhZyAmIFlfSVNfU0FNRV9PUl9QT1NJVElWRV9ZX1NIT1JUX1ZFQ1RPUiA/IHkgOiAteTsKICAgICAgICB5Q29vcmRpbmF0ZXMucHVzaChsYXN0Q29vcmRpbmF0ZSk7CiAgICAgIH0gZWxzZSBpZiAoZmxhZyAmIFlfSVNfU0FNRV9PUl9QT1NJVElWRV9ZX1NIT1JUX1ZFQ1RPUikgewogICAgICAgIHlDb29yZGluYXRlcy5wdXNoKGxhc3RDb29yZGluYXRlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBsYXN0Q29vcmRpbmF0ZSArPSBnbHlmLmdldEludDE2KHBvcyk7CiAgICAgICAgcG9zICs9IDI7CiAgICAgICAgeUNvb3JkaW5hdGVzLnB1c2gobGFzdENvb3JkaW5hdGUpOwogICAgICB9CiAgICAgIHBvaW50RmxhZ3MucHVzaChmbGFnICYgT05fQ1VSVkVfUE9JTlQgfCBmbGFnICYgT1ZFUkxBUF9TSU1QTEUpOwogICAgICBpZiAoZW5kUHRzT2ZDb250b3Vyc1tlbmRQdHNPZkNvbnRvdXJzSW5kZXhdID09PSBpKSB7CiAgICAgICAgeENvb3JkaW5hdGVzID0gYWxsWENvb3JkaW5hdGVzW2VuZFB0c09mQ29udG91cnNJbmRleF07CiAgICAgICAgZW5kUHRzT2ZDb250b3Vyc0luZGV4Kys7CiAgICAgICAgY29udG91cnMucHVzaChuZXcgQ29udG91cih7CiAgICAgICAgICBmbGFnczogcG9pbnRGbGFncywKICAgICAgICAgIHhDb29yZGluYXRlcywKICAgICAgICAgIHlDb29yZGluYXRlcwogICAgICAgIH0pKTsKICAgICAgICB5Q29vcmRpbmF0ZXMgPSBbXTsKICAgICAgICBwb2ludEZsYWdzID0gW107CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgU2ltcGxlR2x5cGgoewogICAgICBjb250b3VycywKICAgICAgaW5zdHJ1Y3Rpb25zCiAgICB9KTsKICB9CiAgZ2V0U2l6ZSgpIHsKICAgIGxldCBzaXplID0gdGhpcy5jb250b3Vycy5sZW5ndGggKiAyICsgMiArIHRoaXMuaW5zdHJ1Y3Rpb25zLmxlbmd0aDsKICAgIGxldCBsYXN0WCA9IDA7CiAgICBsZXQgbGFzdFkgPSAwOwogICAgZm9yIChjb25zdCBjb250b3VyIG9mIHRoaXMuY29udG91cnMpIHsKICAgICAgc2l6ZSArPSBjb250b3VyLmZsYWdzLmxlbmd0aDsKICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gY29udG91ci54Q29vcmRpbmF0ZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICAgIGNvbnN0IHggPSBjb250b3VyLnhDb29yZGluYXRlc1tpXTsKICAgICAgICBjb25zdCB5ID0gY29udG91ci55Q29vcmRpbmF0ZXNbaV07CiAgICAgICAgbGV0IGFicyA9IE1hdGguYWJzKHggLSBsYXN0WCk7CiAgICAgICAgaWYgKGFicyA+IDI1NSkgewogICAgICAgICAgc2l6ZSArPSAyOwogICAgICAgIH0gZWxzZSBpZiAoYWJzID4gMCkgewogICAgICAgICAgc2l6ZSArPSAxOwogICAgICAgIH0KICAgICAgICBsYXN0WCA9IHg7CiAgICAgICAgYWJzID0gTWF0aC5hYnMoeSAtIGxhc3RZKTsKICAgICAgICBpZiAoYWJzID4gMjU1KSB7CiAgICAgICAgICBzaXplICs9IDI7CiAgICAgICAgfSBlbHNlIGlmIChhYnMgPiAwKSB7CiAgICAgICAgICBzaXplICs9IDE7CiAgICAgICAgfQogICAgICAgIGxhc3RZID0geTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHNpemU7CiAgfQogIHdyaXRlKHBvcywgYnVmKSB7CiAgICBjb25zdCBzcG9zID0gcG9zOwogICAgY29uc3QgeENvb3JkaW5hdGVzID0gW107CiAgICBjb25zdCB5Q29vcmRpbmF0ZXMgPSBbXTsKICAgIGNvbnN0IGZsYWdzID0gW107CiAgICBsZXQgbGFzdFggPSAwOwogICAgbGV0IGxhc3RZID0gMDsKICAgIGZvciAoY29uc3QgY29udG91ciBvZiB0aGlzLmNvbnRvdXJzKSB7CiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGNvbnRvdXIueENvb3JkaW5hdGVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgICBsZXQgZmxhZyA9IGNvbnRvdXIuZmxhZ3NbaV07CiAgICAgICAgY29uc3QgeCA9IGNvbnRvdXIueENvb3JkaW5hdGVzW2ldOwogICAgICAgIGxldCBkZWx0YSA9IHggLSBsYXN0WDsKICAgICAgICBpZiAoZGVsdGEgPT09IDApIHsKICAgICAgICAgIGZsYWcgfD0gWF9JU19TQU1FX09SX1BPU0lUSVZFX1hfU0hPUlRfVkVDVE9SOwogICAgICAgICAgeENvb3JkaW5hdGVzLnB1c2goMCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IGFicyA9IE1hdGguYWJzKGRlbHRhKTsKICAgICAgICAgIGlmIChhYnMgPD0gMjU1KSB7CiAgICAgICAgICAgIGZsYWcgfD0gZGVsdGEgPj0gMCA/IFhfU0hPUlRfVkVDVE9SIHwgWF9JU19TQU1FX09SX1BPU0lUSVZFX1hfU0hPUlRfVkVDVE9SIDogWF9TSE9SVF9WRUNUT1I7CiAgICAgICAgICAgIHhDb29yZGluYXRlcy5wdXNoKGFicyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB4Q29vcmRpbmF0ZXMucHVzaChkZWx0YSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGxhc3RYID0geDsKICAgICAgICBjb25zdCB5ID0gY29udG91ci55Q29vcmRpbmF0ZXNbaV07CiAgICAgICAgZGVsdGEgPSB5IC0gbGFzdFk7CiAgICAgICAgaWYgKGRlbHRhID09PSAwKSB7CiAgICAgICAgICBmbGFnIHw9IFlfSVNfU0FNRV9PUl9QT1NJVElWRV9ZX1NIT1JUX1ZFQ1RPUjsKICAgICAgICAgIHlDb29yZGluYXRlcy5wdXNoKDApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBhYnMgPSBNYXRoLmFicyhkZWx0YSk7CiAgICAgICAgICBpZiAoYWJzIDw9IDI1NSkgewogICAgICAgICAgICBmbGFnIHw9IGRlbHRhID49IDAgPyBZX1NIT1JUX1ZFQ1RPUiB8IFlfSVNfU0FNRV9PUl9QT1NJVElWRV9ZX1NIT1JUX1ZFQ1RPUiA6IFlfU0hPUlRfVkVDVE9SOwogICAgICAgICAgICB5Q29vcmRpbmF0ZXMucHVzaChhYnMpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgeUNvb3JkaW5hdGVzLnB1c2goZGVsdGEpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBsYXN0WSA9IHk7CiAgICAgICAgZmxhZ3MucHVzaChmbGFnKTsKICAgICAgfQogICAgICBidWYuc2V0VWludDE2KHBvcywgeENvb3JkaW5hdGVzLmxlbmd0aCAtIDEpOwogICAgICBwb3MgKz0gMjsKICAgIH0KICAgIGJ1Zi5zZXRVaW50MTYocG9zLCB0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgpOwogICAgcG9zICs9IDI7CiAgICBpZiAodGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoKSB7CiAgICAgIG5ldyBVaW50OEFycmF5KGJ1Zi5idWZmZXIsIDAsIGJ1Zi5idWZmZXIuYnl0ZUxlbmd0aCkuc2V0KHRoaXMuaW5zdHJ1Y3Rpb25zLCBwb3MpOwogICAgICBwb3MgKz0gdGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoOwogICAgfQogICAgZm9yIChjb25zdCBmbGFnIG9mIGZsYWdzKSB7CiAgICAgIGJ1Zi5zZXRVaW50OChwb3MrKywgZmxhZyk7CiAgICB9CiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSB4Q29vcmRpbmF0ZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICBjb25zdCB4ID0geENvb3JkaW5hdGVzW2ldOwogICAgICBjb25zdCBmbGFnID0gZmxhZ3NbaV07CiAgICAgIGlmIChmbGFnICYgWF9TSE9SVF9WRUNUT1IpIHsKICAgICAgICBidWYuc2V0VWludDgocG9zKyssIHgpOwogICAgICB9IGVsc2UgaWYgKCEoZmxhZyAmIFhfSVNfU0FNRV9PUl9QT1NJVElWRV9YX1NIT1JUX1ZFQ1RPUikpIHsKICAgICAgICBidWYuc2V0SW50MTYocG9zLCB4KTsKICAgICAgICBwb3MgKz0gMjsKICAgICAgfQogICAgfQogICAgZm9yIChsZXQgaSA9IDAsIGlpID0geUNvb3JkaW5hdGVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgY29uc3QgeSA9IHlDb29yZGluYXRlc1tpXTsKICAgICAgY29uc3QgZmxhZyA9IGZsYWdzW2ldOwogICAgICBpZiAoZmxhZyAmIFlfU0hPUlRfVkVDVE9SKSB7CiAgICAgICAgYnVmLnNldFVpbnQ4KHBvcysrLCB5KTsKICAgICAgfSBlbHNlIGlmICghKGZsYWcgJiBZX0lTX1NBTUVfT1JfUE9TSVRJVkVfWV9TSE9SVF9WRUNUT1IpKSB7CiAgICAgICAgYnVmLnNldEludDE2KHBvcywgeSk7CiAgICAgICAgcG9zICs9IDI7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBwb3MgLSBzcG9zOwogIH0KICBzY2FsZSh4LCBmYWN0b3IpIHsKICAgIGZvciAoY29uc3QgY29udG91ciBvZiB0aGlzLmNvbnRvdXJzKSB7CiAgICAgIGlmIChjb250b3VyLnhDb29yZGluYXRlcy5sZW5ndGggPT09IDApIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBjb250b3VyLnhDb29yZGluYXRlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CiAgICAgICAgY29udG91ci54Q29vcmRpbmF0ZXNbaV0gPSBNYXRoLnJvdW5kKHggKyAoY29udG91ci54Q29vcmRpbmF0ZXNbaV0gLSB4KSAqIGZhY3Rvcik7CiAgICAgIH0KICAgIH0KICB9Cn0KY2xhc3MgQ29tcG9zaXRlR2x5cGggewogIGNvbnN0cnVjdG9yKHsKICAgIGZsYWdzLAogICAgZ2x5cGhJbmRleCwKICAgIGFyZ3VtZW50MSwKICAgIGFyZ3VtZW50MiwKICAgIHRyYW5zZiwKICAgIGluc3RydWN0aW9ucwogIH0pIHsKICAgIHRoaXMuZmxhZ3MgPSBmbGFnczsKICAgIHRoaXMuZ2x5cGhJbmRleCA9IGdseXBoSW5kZXg7CiAgICB0aGlzLmFyZ3VtZW50MSA9IGFyZ3VtZW50MTsKICAgIHRoaXMuYXJndW1lbnQyID0gYXJndW1lbnQyOwogICAgdGhpcy50cmFuc2YgPSB0cmFuc2Y7CiAgICB0aGlzLmluc3RydWN0aW9ucyA9IGluc3RydWN0aW9uczsKICB9CiAgc3RhdGljIHBhcnNlKHBvcywgZ2x5ZikgewogICAgY29uc3Qgc3BvcyA9IHBvczsKICAgIGNvbnN0IHRyYW5zZiA9IFtdOwogICAgbGV0IGZsYWdzID0gZ2x5Zi5nZXRVaW50MTYocG9zKTsKICAgIGNvbnN0IGdseXBoSW5kZXggPSBnbHlmLmdldFVpbnQxNihwb3MgKyAyKTsKICAgIHBvcyArPSA0OwogICAgbGV0IGFyZ3VtZW50MSwgYXJndW1lbnQyOwogICAgaWYgKGZsYWdzICYgQVJHXzFfQU5EXzJfQVJFX1dPUkRTKSB7CiAgICAgIGlmIChmbGFncyAmIEFSR1NfQVJFX1hZX1ZBTFVFUykgewogICAgICAgIGFyZ3VtZW50MSA9IGdseWYuZ2V0SW50MTYocG9zKTsKICAgICAgICBhcmd1bWVudDIgPSBnbHlmLmdldEludDE2KHBvcyArIDIpOwogICAgICB9IGVsc2UgewogICAgICAgIGFyZ3VtZW50MSA9IGdseWYuZ2V0VWludDE2KHBvcyk7CiAgICAgICAgYXJndW1lbnQyID0gZ2x5Zi5nZXRVaW50MTYocG9zICsgMik7CiAgICAgIH0KICAgICAgcG9zICs9IDQ7CiAgICAgIGZsYWdzIF49IEFSR18xX0FORF8yX0FSRV9XT1JEUzsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChmbGFncyAmIEFSR1NfQVJFX1hZX1ZBTFVFUykgewogICAgICAgIGFyZ3VtZW50MSA9IGdseWYuZ2V0SW50OChwb3MpOwogICAgICAgIGFyZ3VtZW50MiA9IGdseWYuZ2V0SW50OChwb3MgKyAxKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhcmd1bWVudDEgPSBnbHlmLmdldFVpbnQ4KHBvcyk7CiAgICAgICAgYXJndW1lbnQyID0gZ2x5Zi5nZXRVaW50OChwb3MgKyAxKTsKICAgICAgfQogICAgICBwb3MgKz0gMjsKICAgIH0KICAgIGlmIChmbGFncyAmIFdFX0hBVkVfQV9TQ0FMRSkgewogICAgICB0cmFuc2YucHVzaChnbHlmLmdldFVpbnQxNihwb3MpKTsKICAgICAgcG9zICs9IDI7CiAgICB9IGVsc2UgaWYgKGZsYWdzICYgV0VfSEFWRV9BTl9YX0FORF9ZX1NDQUxFKSB7CiAgICAgIHRyYW5zZi5wdXNoKGdseWYuZ2V0VWludDE2KHBvcyksIGdseWYuZ2V0VWludDE2KHBvcyArIDIpKTsKICAgICAgcG9zICs9IDQ7CiAgICB9IGVsc2UgaWYgKGZsYWdzICYgV0VfSEFWRV9BX1RXT19CWV9UV08pIHsKICAgICAgdHJhbnNmLnB1c2goZ2x5Zi5nZXRVaW50MTYocG9zKSwgZ2x5Zi5nZXRVaW50MTYocG9zICsgMiksIGdseWYuZ2V0VWludDE2KHBvcyArIDQpLCBnbHlmLmdldFVpbnQxNihwb3MgKyA2KSk7CiAgICAgIHBvcyArPSA4OwogICAgfQogICAgbGV0IGluc3RydWN0aW9ucyA9IG51bGw7CiAgICBpZiAoZmxhZ3MgJiBXRV9IQVZFX0lOU1RSVUNUSU9OUykgewogICAgICBjb25zdCBpbnN0cnVjdGlvbkxlbmd0aCA9IGdseWYuZ2V0VWludDE2KHBvcyk7CiAgICAgIHBvcyArPSAyOwogICAgICBpbnN0cnVjdGlvbnMgPSBuZXcgVWludDhBcnJheShnbHlmKS5zbGljZShwb3MsIHBvcyArIGluc3RydWN0aW9uTGVuZ3RoKTsKICAgICAgcG9zICs9IGluc3RydWN0aW9uTGVuZ3RoOwogICAgfQogICAgcmV0dXJuIFtwb3MgLSBzcG9zLCBuZXcgQ29tcG9zaXRlR2x5cGgoewogICAgICBmbGFncywKICAgICAgZ2x5cGhJbmRleCwKICAgICAgYXJndW1lbnQxLAogICAgICBhcmd1bWVudDIsCiAgICAgIHRyYW5zZiwKICAgICAgaW5zdHJ1Y3Rpb25zCiAgICB9KV07CiAgfQogIGdldFNpemUoKSB7CiAgICBsZXQgc2l6ZSA9IDIgKyAyICsgdGhpcy50cmFuc2YubGVuZ3RoICogMjsKICAgIGlmICh0aGlzLmZsYWdzICYgV0VfSEFWRV9JTlNUUlVDVElPTlMpIHsKICAgICAgc2l6ZSArPSAyICsgdGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoOwogICAgfQogICAgc2l6ZSArPSAyOwogICAgaWYgKHRoaXMuZmxhZ3MgJiAyKSB7CiAgICAgIGlmICghKHRoaXMuYXJndW1lbnQxID49IC0xMjggJiYgdGhpcy5hcmd1bWVudDEgPD0gMTI3ICYmIHRoaXMuYXJndW1lbnQyID49IC0xMjggJiYgdGhpcy5hcmd1bWVudDIgPD0gMTI3KSkgewogICAgICAgIHNpemUgKz0gMjsKICAgICAgfQogICAgfSBlbHNlIGlmICghKHRoaXMuYXJndW1lbnQxID49IDAgJiYgdGhpcy5hcmd1bWVudDEgPD0gMjU1ICYmIHRoaXMuYXJndW1lbnQyID49IDAgJiYgdGhpcy5hcmd1bWVudDIgPD0gMjU1KSkgewogICAgICBzaXplICs9IDI7CiAgICB9CiAgICByZXR1cm4gc2l6ZTsKICB9CiAgd3JpdGUocG9zLCBidWYpIHsKICAgIGNvbnN0IHNwb3MgPSBwb3M7CiAgICBpZiAodGhpcy5mbGFncyAmIEFSR1NfQVJFX1hZX1ZBTFVFUykgewogICAgICBpZiAoISh0aGlzLmFyZ3VtZW50MSA+PSAtMTI4ICYmIHRoaXMuYXJndW1lbnQxIDw9IDEyNyAmJiB0aGlzLmFyZ3VtZW50MiA+PSAtMTI4ICYmIHRoaXMuYXJndW1lbnQyIDw9IDEyNykpIHsKICAgICAgICB0aGlzLmZsYWdzIHw9IEFSR18xX0FORF8yX0FSRV9XT1JEUzsKICAgICAgfQogICAgfSBlbHNlIGlmICghKHRoaXMuYXJndW1lbnQxID49IDAgJiYgdGhpcy5hcmd1bWVudDEgPD0gMjU1ICYmIHRoaXMuYXJndW1lbnQyID49IDAgJiYgdGhpcy5hcmd1bWVudDIgPD0gMjU1KSkgewogICAgICB0aGlzLmZsYWdzIHw9IEFSR18xX0FORF8yX0FSRV9XT1JEUzsKICAgIH0KICAgIGJ1Zi5zZXRVaW50MTYocG9zLCB0aGlzLmZsYWdzKTsKICAgIGJ1Zi5zZXRVaW50MTYocG9zICsgMiwgdGhpcy5nbHlwaEluZGV4KTsKICAgIHBvcyArPSA0OwogICAgaWYgKHRoaXMuZmxhZ3MgJiBBUkdfMV9BTkRfMl9BUkVfV09SRFMpIHsKICAgICAgaWYgKHRoaXMuZmxhZ3MgJiBBUkdTX0FSRV9YWV9WQUxVRVMpIHsKICAgICAgICBidWYuc2V0SW50MTYocG9zLCB0aGlzLmFyZ3VtZW50MSk7CiAgICAgICAgYnVmLnNldEludDE2KHBvcyArIDIsIHRoaXMuYXJndW1lbnQyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBidWYuc2V0VWludDE2KHBvcywgdGhpcy5hcmd1bWVudDEpOwogICAgICAgIGJ1Zi5zZXRVaW50MTYocG9zICsgMiwgdGhpcy5hcmd1bWVudDIpOwogICAgICB9CiAgICAgIHBvcyArPSA0OwogICAgfSBlbHNlIHsKICAgICAgYnVmLnNldFVpbnQ4KHBvcywgdGhpcy5hcmd1bWVudDEpOwogICAgICBidWYuc2V0VWludDgocG9zICsgMSwgdGhpcy5hcmd1bWVudDIpOwogICAgICBwb3MgKz0gMjsKICAgIH0KICAgIGlmICh0aGlzLmZsYWdzICYgV0VfSEFWRV9JTlNUUlVDVElPTlMpIHsKICAgICAgYnVmLnNldFVpbnQxNihwb3MsIHRoaXMuaW5zdHJ1Y3Rpb25zLmxlbmd0aCk7CiAgICAgIHBvcyArPSAyOwogICAgICBpZiAodGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoKSB7CiAgICAgICAgbmV3IFVpbnQ4QXJyYXkoYnVmLmJ1ZmZlciwgMCwgYnVmLmJ1ZmZlci5ieXRlTGVuZ3RoKS5zZXQodGhpcy5pbnN0cnVjdGlvbnMsIHBvcyk7CiAgICAgICAgcG9zICs9IHRoaXMuaW5zdHJ1Y3Rpb25zLmxlbmd0aDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHBvcyAtIHNwb3M7CiAgfQogIHNjYWxlKHgsIGZhY3Rvcikge30KfQoKOy8vIC4vc3JjL2NvcmUvb3BlbnR5cGVfZmlsZV9idWlsZGVyLmpzCgoKZnVuY3Rpb24gd3JpdGVJbnQxNihkZXN0LCBvZmZzZXQsIG51bSkgewogIGRlc3Rbb2Zmc2V0XSA9IG51bSA+PiA4ICYgMHhmZjsKICBkZXN0W29mZnNldCArIDFdID0gbnVtICYgMHhmZjsKfQpmdW5jdGlvbiB3cml0ZUludDMyKGRlc3QsIG9mZnNldCwgbnVtKSB7CiAgZGVzdFtvZmZzZXRdID0gbnVtID4+IDI0ICYgMHhmZjsKICBkZXN0W29mZnNldCArIDFdID0gbnVtID4+IDE2ICYgMHhmZjsKICBkZXN0W29mZnNldCArIDJdID0gbnVtID4+IDggJiAweGZmOwogIGRlc3Rbb2Zmc2V0ICsgM10gPSBudW0gJiAweGZmOwp9CmZ1bmN0aW9uIHdyaXRlRGF0YShkZXN0LCBvZmZzZXQsIGRhdGEpIHsKICBpZiAoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHsKICAgIGRlc3Quc2V0KGRhdGEsIG9mZnNldCk7CiAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIpIHsKICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGRhdGEubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICBkZXN0W29mZnNldCsrXSA9IGRhdGEuY2hhckNvZGVBdChpKSAmIDB4ZmY7CiAgICB9CiAgfSBlbHNlIHsKICAgIGZvciAoY29uc3QgbnVtIG9mIGRhdGEpIHsKICAgICAgZGVzdFtvZmZzZXQrK10gPSBudW0gJiAweGZmOwogICAgfQogIH0KfQpjb25zdCBPVEZfSEVBREVSX1NJWkUgPSAxMjsKY29uc3QgT1RGX1RBQkxFX0VOVFJZX1NJWkUgPSAxNjsKY2xhc3MgT3BlblR5cGVGaWxlQnVpbGRlciB7CiAgY29uc3RydWN0b3Ioc2ZudCkgewogICAgdGhpcy5zZm50ID0gc2ZudDsKICAgIHRoaXMudGFibGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICB9CiAgc3RhdGljIGdldFNlYXJjaFBhcmFtcyhlbnRyaWVzQ291bnQsIGVudHJ5U2l6ZSkgewogICAgbGV0IG1heFBvd2VyMiA9IDEsCiAgICAgIGxvZzIgPSAwOwogICAgd2hpbGUgKChtYXhQb3dlcjIgXiBlbnRyaWVzQ291bnQpID4gbWF4UG93ZXIyKSB7CiAgICAgIG1heFBvd2VyMiA8PD0gMTsKICAgICAgbG9nMisrOwogICAgfQogICAgY29uc3Qgc2VhcmNoUmFuZ2UgPSBtYXhQb3dlcjIgKiBlbnRyeVNpemU7CiAgICByZXR1cm4gewogICAgICByYW5nZTogc2VhcmNoUmFuZ2UsCiAgICAgIGVudHJ5OiBsb2cyLAogICAgICByYW5nZVNoaWZ0OiBlbnRyeVNpemUgKiBlbnRyaWVzQ291bnQgLSBzZWFyY2hSYW5nZQogICAgfTsKICB9CiAgdG9BcnJheSgpIHsKICAgIGxldCBzZm50ID0gdGhpcy5zZm50OwogICAgY29uc3QgdGFibGVzID0gdGhpcy50YWJsZXM7CiAgICBjb25zdCB0YWJsZXNOYW1lcyA9IE9iamVjdC5rZXlzKHRhYmxlcyk7CiAgICB0YWJsZXNOYW1lcy5zb3J0KCk7CiAgICBjb25zdCBudW1UYWJsZXMgPSB0YWJsZXNOYW1lcy5sZW5ndGg7CiAgICBsZXQgaSwgaiwgamosIHRhYmxlLCB0YWJsZU5hbWU7CiAgICBsZXQgb2Zmc2V0ID0gT1RGX0hFQURFUl9TSVpFICsgbnVtVGFibGVzICogT1RGX1RBQkxFX0VOVFJZX1NJWkU7CiAgICBjb25zdCB0YWJsZU9mZnNldHMgPSBbb2Zmc2V0XTsKICAgIGZvciAoaSA9IDA7IGkgPCBudW1UYWJsZXM7IGkrKykgewogICAgICB0YWJsZSA9IHRhYmxlc1t0YWJsZXNOYW1lc1tpXV07CiAgICAgIGNvbnN0IHBhZGRlZExlbmd0aCA9ICh0YWJsZS5sZW5ndGggKyAzICYgfjMpID4+PiAwOwogICAgICBvZmZzZXQgKz0gcGFkZGVkTGVuZ3RoOwogICAgICB0YWJsZU9mZnNldHMucHVzaChvZmZzZXQpOwogICAgfQogICAgY29uc3QgZmlsZSA9IG5ldyBVaW50OEFycmF5KG9mZnNldCk7CiAgICBmb3IgKGkgPSAwOyBpIDwgbnVtVGFibGVzOyBpKyspIHsKICAgICAgdGFibGUgPSB0YWJsZXNbdGFibGVzTmFtZXNbaV1dOwogICAgICB3cml0ZURhdGEoZmlsZSwgdGFibGVPZmZzZXRzW2ldLCB0YWJsZSk7CiAgICB9CiAgICBpZiAoc2ZudCA9PT0gInRydWUiKSB7CiAgICAgIHNmbnQgPSBzdHJpbmczMigweDAwMDEwMDAwKTsKICAgIH0KICAgIGZpbGVbMF0gPSBzZm50LmNoYXJDb2RlQXQoMCkgJiAweGZmOwogICAgZmlsZVsxXSA9IHNmbnQuY2hhckNvZGVBdCgxKSAmIDB4ZmY7CiAgICBmaWxlWzJdID0gc2ZudC5jaGFyQ29kZUF0KDIpICYgMHhmZjsKICAgIGZpbGVbM10gPSBzZm50LmNoYXJDb2RlQXQoMykgJiAweGZmOwogICAgd3JpdGVJbnQxNihmaWxlLCA0LCBudW1UYWJsZXMpOwogICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gT3BlblR5cGVGaWxlQnVpbGRlci5nZXRTZWFyY2hQYXJhbXMobnVtVGFibGVzLCAxNik7CiAgICB3cml0ZUludDE2KGZpbGUsIDYsIHNlYXJjaFBhcmFtcy5yYW5nZSk7CiAgICB3cml0ZUludDE2KGZpbGUsIDgsIHNlYXJjaFBhcmFtcy5lbnRyeSk7CiAgICB3cml0ZUludDE2KGZpbGUsIDEwLCBzZWFyY2hQYXJhbXMucmFuZ2VTaGlmdCk7CiAgICBvZmZzZXQgPSBPVEZfSEVBREVSX1NJWkU7CiAgICBmb3IgKGkgPSAwOyBpIDwgbnVtVGFibGVzOyBpKyspIHsKICAgICAgdGFibGVOYW1lID0gdGFibGVzTmFtZXNbaV07CiAgICAgIGZpbGVbb2Zmc2V0XSA9IHRhYmxlTmFtZS5jaGFyQ29kZUF0KDApICYgMHhmZjsKICAgICAgZmlsZVtvZmZzZXQgKyAxXSA9IHRhYmxlTmFtZS5jaGFyQ29kZUF0KDEpICYgMHhmZjsKICAgICAgZmlsZVtvZmZzZXQgKyAyXSA9IHRhYmxlTmFtZS5jaGFyQ29kZUF0KDIpICYgMHhmZjsKICAgICAgZmlsZVtvZmZzZXQgKyAzXSA9IHRhYmxlTmFtZS5jaGFyQ29kZUF0KDMpICYgMHhmZjsKICAgICAgbGV0IGNoZWNrc3VtID0gMDsKICAgICAgZm9yIChqID0gdGFibGVPZmZzZXRzW2ldLCBqaiA9IHRhYmxlT2Zmc2V0c1tpICsgMV07IGogPCBqajsgaiArPSA0KSB7CiAgICAgICAgY29uc3QgcXVhZCA9IHJlYWRVaW50MzIoZmlsZSwgaik7CiAgICAgICAgY2hlY2tzdW0gPSBjaGVja3N1bSArIHF1YWQgPj4+IDA7CiAgICAgIH0KICAgICAgd3JpdGVJbnQzMihmaWxlLCBvZmZzZXQgKyA0LCBjaGVja3N1bSk7CiAgICAgIHdyaXRlSW50MzIoZmlsZSwgb2Zmc2V0ICsgOCwgdGFibGVPZmZzZXRzW2ldKTsKICAgICAgd3JpdGVJbnQzMihmaWxlLCBvZmZzZXQgKyAxMiwgdGFibGVzW3RhYmxlTmFtZV0ubGVuZ3RoKTsKICAgICAgb2Zmc2V0ICs9IE9URl9UQUJMRV9FTlRSWV9TSVpFOwogICAgfQogICAgcmV0dXJuIGZpbGU7CiAgfQogIGFkZFRhYmxlKHRhZywgZGF0YSkgewogICAgaWYgKHRhZyBpbiB0aGlzLnRhYmxlcykgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIlRhYmxlICIgKyB0YWcgKyAiIGFscmVhZHkgZXhpc3RzIik7CiAgICB9CiAgICB0aGlzLnRhYmxlc1t0YWddID0gZGF0YTsKICB9Cn0KCjsvLyAuL3NyYy9jb3JlL3R5cGUxX3BhcnNlci5qcwoKCgoKY29uc3QgSElOVElOR19FTkFCTEVEID0gZmFsc2U7CmNvbnN0IENPTU1BTkRfTUFQID0gewogIGhzdGVtOiBbMV0sCiAgdnN0ZW06IFszXSwKICB2bW92ZXRvOiBbNF0sCiAgcmxpbmV0bzogWzVdLAogIGhsaW5ldG86IFs2XSwKICB2bGluZXRvOiBbN10sCiAgcnJjdXJ2ZXRvOiBbOF0sCiAgY2FsbHN1YnI6IFsxMF0sCiAgZmxleDogWzEyLCAzNV0sCiAgZHJvcDogWzEyLCAxOF0sCiAgZW5kY2hhcjogWzE0XSwKICBybW92ZXRvOiBbMjFdLAogIGhtb3ZldG86IFsyMl0sCiAgdmhjdXJ2ZXRvOiBbMzBdLAogIGh2Y3VydmV0bzogWzMxXQp9OwpjbGFzcyBUeXBlMUNoYXJTdHJpbmcgewogIGNvbnN0cnVjdG9yKCkgewogICAgdGhpcy53aWR0aCA9IDA7CiAgICB0aGlzLmxzYiA9IDA7CiAgICB0aGlzLmZsZXhpbmcgPSBmYWxzZTsKICAgIHRoaXMub3V0cHV0ID0gW107CiAgICB0aGlzLnN0YWNrID0gW107CiAgfQogIGNvbnZlcnQoZW5jb2RlZCwgc3VicnMsIHNlYWNBbmFseXNpc0VuYWJsZWQpIHsKICAgIGNvbnN0IGNvdW50ID0gZW5jb2RlZC5sZW5ndGg7CiAgICBsZXQgZXJyb3IgPSBmYWxzZTsKICAgIGxldCB3eCwgc2J4LCBzdWJyTnVtYmVyOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIGxldCB2YWx1ZSA9IGVuY29kZWRbaV07CiAgICAgIGlmICh2YWx1ZSA8IDMyKSB7CiAgICAgICAgaWYgKHZhbHVlID09PSAxMikgewogICAgICAgICAgdmFsdWUgPSAodmFsdWUgPDwgOCkgKyBlbmNvZGVkWysraV07CiAgICAgICAgfQogICAgICAgIHN3aXRjaCAodmFsdWUpIHsKICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgaWYgKCFISU5USU5HX0VOQUJMRUQpIHsKICAgICAgICAgICAgICB0aGlzLnN0YWNrID0gW107CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDIsIENPTU1BTkRfTUFQLmhzdGVtKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgIGlmICghSElOVElOR19FTkFCTEVEKSB7CiAgICAgICAgICAgICAgdGhpcy5zdGFjayA9IFtdOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCgyLCBDT01NQU5EX01BUC52c3RlbSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICBpZiAodGhpcy5mbGV4aW5nKSB7CiAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoIDwgMSkgewogICAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGNvbnN0IGR5ID0gdGhpcy5zdGFjay5wb3AoKTsKICAgICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2goMCwgZHkpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCgxLCBDT01NQU5EX01BUC52bW92ZXRvKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIDU6CiAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCgyLCBDT01NQU5EX01BUC5ybGluZXRvKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIDY6CiAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCgxLCBDT01NQU5EX01BUC5obGluZXRvKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIDc6CiAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCgxLCBDT01NQU5EX01BUC52bGluZXRvKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIDg6CiAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCg2LCBDT01NQU5EX01BUC5ycmN1cnZldG8pOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgOToKICAgICAgICAgICAgdGhpcy5zdGFjayA9IFtdOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgMTA6CiAgICAgICAgICAgIGlmICh0aGlzLnN0YWNrLmxlbmd0aCA8IDEpIHsKICAgICAgICAgICAgICBlcnJvciA9IHRydWU7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3Vick51bWJlciA9IHRoaXMuc3RhY2sucG9wKCk7CiAgICAgICAgICAgIGlmICghc3VicnNbc3Vick51bWJlcl0pIHsKICAgICAgICAgICAgICBlcnJvciA9IHRydWU7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmNvbnZlcnQoc3VicnNbc3Vick51bWJlcl0sIHN1YnJzLCBzZWFjQW5hbHlzaXNFbmFibGVkKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIDExOgogICAgICAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgICAgICBjYXNlIDEzOgogICAgICAgICAgICBpZiAodGhpcy5zdGFjay5sZW5ndGggPCAyKSB7CiAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHd4ID0gdGhpcy5zdGFjay5wb3AoKTsKICAgICAgICAgICAgc2J4ID0gdGhpcy5zdGFjay5wb3AoKTsKICAgICAgICAgICAgdGhpcy5sc2IgPSBzYng7CiAgICAgICAgICAgIHRoaXMud2lkdGggPSB3eDsKICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKHd4LCBzYngpOwogICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoMiwgQ09NTUFORF9NQVAuaG1vdmV0byk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAxNDoKICAgICAgICAgICAgdGhpcy5vdXRwdXQucHVzaChDT01NQU5EX01BUC5lbmRjaGFyWzBdKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIDIxOgogICAgICAgICAgICBpZiAodGhpcy5mbGV4aW5nKSB7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDIsIENPTU1BTkRfTUFQLnJtb3ZldG8pOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgMjI6CiAgICAgICAgICAgIGlmICh0aGlzLmZsZXhpbmcpIHsKICAgICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2goMCk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDEsIENPTU1BTkRfTUFQLmhtb3ZldG8pOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgMzA6CiAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCg0LCBDT01NQU5EX01BUC52aGN1cnZldG8pOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgMzE6CiAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCg0LCBDT01NQU5EX01BUC5odmN1cnZldG8pOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgKDEyIDw8IDgpICsgMDoKICAgICAgICAgICAgdGhpcy5zdGFjayA9IFtdOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgKDEyIDw8IDgpICsgMToKICAgICAgICAgICAgaWYgKCFISU5USU5HX0VOQUJMRUQpIHsKICAgICAgICAgICAgICB0aGlzLnN0YWNrID0gW107CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDIsIENPTU1BTkRfTUFQLnZzdGVtKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICgxMiA8PCA4KSArIDI6CiAgICAgICAgICAgIGlmICghSElOVElOR19FTkFCTEVEKSB7CiAgICAgICAgICAgICAgdGhpcy5zdGFjayA9IFtdOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCgyLCBDT01NQU5EX01BUC5oc3RlbSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAoMTIgPDwgOCkgKyA2OgogICAgICAgICAgICBpZiAoc2VhY0FuYWx5c2lzRW5hYmxlZCkgewogICAgICAgICAgICAgIGNvbnN0IGFzYiA9IHRoaXMuc3RhY2suYXQoLTUpOwogICAgICAgICAgICAgIHRoaXMuc2VhYyA9IHRoaXMuc3RhY2suc3BsaWNlKC00LCA0KTsKICAgICAgICAgICAgICB0aGlzLnNlYWNbMF0gKz0gdGhpcy5sc2IgLSBhc2I7CiAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDAsIENPTU1BTkRfTUFQLmVuZGNoYXIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCg0LCBDT01NQU5EX01BUC5lbmRjaGFyKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgKDEyIDw8IDgpICsgNzoKICAgICAgICAgICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoIDwgNCkgewogICAgICAgICAgICAgIGVycm9yID0gdHJ1ZTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLnN0YWNrLnBvcCgpOwogICAgICAgICAgICB3eCA9IHRoaXMuc3RhY2sucG9wKCk7CiAgICAgICAgICAgIGNvbnN0IHNieSA9IHRoaXMuc3RhY2sucG9wKCk7CiAgICAgICAgICAgIHNieCA9IHRoaXMuc3RhY2sucG9wKCk7CiAgICAgICAgICAgIHRoaXMubHNiID0gc2J4OwogICAgICAgICAgICB0aGlzLndpZHRoID0gd3g7CiAgICAgICAgICAgIHRoaXMuc3RhY2sucHVzaCh3eCwgc2J4LCBzYnkpOwogICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoMywgQ09NTUFORF9NQVAucm1vdmV0byk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAoMTIgPDwgOCkgKyAxMjoKICAgICAgICAgICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoIDwgMikgewogICAgICAgICAgICAgIGVycm9yID0gdHJ1ZTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCBudW0yID0gdGhpcy5zdGFjay5wb3AoKTsKICAgICAgICAgICAgY29uc3QgbnVtMSA9IHRoaXMuc3RhY2sucG9wKCk7CiAgICAgICAgICAgIHRoaXMuc3RhY2sucHVzaChudW0xIC8gbnVtMik7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAoMTIgPDwgOCkgKyAxNjoKICAgICAgICAgICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoIDwgMikgewogICAgICAgICAgICAgIGVycm9yID0gdHJ1ZTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBzdWJyTnVtYmVyID0gdGhpcy5zdGFjay5wb3AoKTsKICAgICAgICAgICAgY29uc3QgbnVtQXJncyA9IHRoaXMuc3RhY2sucG9wKCk7CiAgICAgICAgICAgIGlmIChzdWJyTnVtYmVyID09PSAwICYmIG51bUFyZ3MgPT09IDMpIHsKICAgICAgICAgICAgICBjb25zdCBmbGV4QXJncyA9IHRoaXMuc3RhY2suc3BsaWNlKC0xNywgMTcpOwogICAgICAgICAgICAgIHRoaXMuc3RhY2sucHVzaChmbGV4QXJnc1syXSArIGZsZXhBcmdzWzBdLCBmbGV4QXJnc1szXSArIGZsZXhBcmdzWzFdLCBmbGV4QXJnc1s0XSwgZmxleEFyZ3NbNV0sIGZsZXhBcmdzWzZdLCBmbGV4QXJnc1s3XSwgZmxleEFyZ3NbOF0sIGZsZXhBcmdzWzldLCBmbGV4QXJnc1sxMF0sIGZsZXhBcmdzWzExXSwgZmxleEFyZ3NbMTJdLCBmbGV4QXJnc1sxM10sIGZsZXhBcmdzWzE0XSk7CiAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDEzLCBDT01NQU5EX01BUC5mbGV4LCB0cnVlKTsKICAgICAgICAgICAgICB0aGlzLmZsZXhpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2goZmxleEFyZ3NbMTVdLCBmbGV4QXJnc1sxNl0pOwogICAgICAgICAgICB9IGVsc2UgaWYgKHN1YnJOdW1iZXIgPT09IDEgJiYgbnVtQXJncyA9PT0gMCkgewogICAgICAgICAgICAgIHRoaXMuZmxleGluZyA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICgxMiA8PCA4KSArIDE3OgogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgKDEyIDw8IDgpICsgMzM6CiAgICAgICAgICAgIHRoaXMuc3RhY2sgPSBbXTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICB3YXJuKCdVbmtub3duIHR5cGUgMSBjaGFyc3RyaW5nIGNvbW1hbmQgb2YgIicgKyB2YWx1ZSArICciJyk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBjb250aW51ZTsKICAgICAgfSBlbHNlIGlmICh2YWx1ZSA8PSAyNDYpIHsKICAgICAgICB2YWx1ZSAtPSAxMzk7CiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPD0gMjUwKSB7CiAgICAgICAgdmFsdWUgPSAodmFsdWUgLSAyNDcpICogMjU2ICsgZW5jb2RlZFsrK2ldICsgMTA4OwogICAgICB9IGVsc2UgaWYgKHZhbHVlIDw9IDI1NCkgewogICAgICAgIHZhbHVlID0gLSgodmFsdWUgLSAyNTEpICogMjU2KSAtIGVuY29kZWRbKytpXSAtIDEwODsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YWx1ZSA9IChlbmNvZGVkWysraV0gJiAweGZmKSA8PCAyNCB8IChlbmNvZGVkWysraV0gJiAweGZmKSA8PCAxNiB8IChlbmNvZGVkWysraV0gJiAweGZmKSA8PCA4IHwgKGVuY29kZWRbKytpXSAmIDB4ZmYpIDw8IDA7CiAgICAgIH0KICAgICAgdGhpcy5zdGFjay5wdXNoKHZhbHVlKTsKICAgIH0KICAgIHJldHVybiBlcnJvcjsKICB9CiAgZXhlY3V0ZUNvbW1hbmQoaG93TWFueUFyZ3MsIGNvbW1hbmQsIGtlZXBTdGFjaykgewogICAgY29uc3Qgc3RhY2tMZW5ndGggPSB0aGlzLnN0YWNrLmxlbmd0aDsKICAgIGlmIChob3dNYW55QXJncyA+IHN0YWNrTGVuZ3RoKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgY29uc3Qgc3RhcnQgPSBzdGFja0xlbmd0aCAtIGhvd01hbnlBcmdzOwogICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgc3RhY2tMZW5ndGg7IGkrKykgewogICAgICBsZXQgdmFsdWUgPSB0aGlzLnN0YWNrW2ldOwogICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkpIHsKICAgICAgICB0aGlzLm91dHB1dC5wdXNoKDI4LCB2YWx1ZSA+PiA4ICYgMHhmZiwgdmFsdWUgJiAweGZmKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YWx1ZSA9IDY1NTM2ICogdmFsdWUgfCAwOwogICAgICAgIHRoaXMub3V0cHV0LnB1c2goMjU1LCB2YWx1ZSA+PiAyNCAmIDB4ZmYsIHZhbHVlID4+IDE2ICYgMHhmZiwgdmFsdWUgPj4gOCAmIDB4ZmYsIHZhbHVlICYgMHhmZik7CiAgICAgIH0KICAgIH0KICAgIHRoaXMub3V0cHV0LnB1c2goLi4uY29tbWFuZCk7CiAgICBpZiAoa2VlcFN0YWNrKSB7CiAgICAgIHRoaXMuc3RhY2suc3BsaWNlKHN0YXJ0LCBob3dNYW55QXJncyk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLnN0YWNrLmxlbmd0aCA9IDA7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9CmNvbnN0IEVFWEVDX0VOQ1JZUFRfS0VZID0gNTU2NjU7CmNvbnN0IENIQVJfU1RSU19FTkNSWVBUX0tFWSA9IDQzMzA7CmZ1bmN0aW9uIGlzSGV4RGlnaXQoY29kZSkgewogIHJldHVybiBjb2RlID49IDQ4ICYmIGNvZGUgPD0gNTcgfHwgY29kZSA+PSA2NSAmJiBjb2RlIDw9IDcwIHx8IGNvZGUgPj0gOTcgJiYgY29kZSA8PSAxMDI7Cn0KZnVuY3Rpb24gZGVjcnlwdChkYXRhLCBrZXksIGRpc2NhcmROdW1iZXIpIHsKICBpZiAoZGlzY2FyZE51bWJlciA+PSBkYXRhLmxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KDApOwogIH0KICBjb25zdCBjMSA9IDUyODQ1LAogICAgYzIgPSAyMjcxOTsKICBsZXQgciA9IGtleSB8IDAsCiAgICBpLAogICAgajsKICBmb3IgKGkgPSAwOyBpIDwgZGlzY2FyZE51bWJlcjsgaSsrKSB7CiAgICByID0gKGRhdGFbaV0gKyByKSAqIGMxICsgYzIgJiAoMSA8PCAxNikgLSAxOwogIH0KICBjb25zdCBjb3VudCA9IGRhdGEubGVuZ3RoIC0gZGlzY2FyZE51bWJlcjsKICBjb25zdCBkZWNyeXB0ZWQgPSBuZXcgVWludDhBcnJheShjb3VudCk7CiAgZm9yIChpID0gZGlzY2FyZE51bWJlciwgaiA9IDA7IGogPCBjb3VudDsgaSsrLCBqKyspIHsKICAgIGNvbnN0IHZhbHVlID0gZGF0YVtpXTsKICAgIGRlY3J5cHRlZFtqXSA9IHZhbHVlIF4gciA+PiA4OwogICAgciA9ICh2YWx1ZSArIHIpICogYzEgKyBjMiAmICgxIDw8IDE2KSAtIDE7CiAgfQogIHJldHVybiBkZWNyeXB0ZWQ7Cn0KZnVuY3Rpb24gZGVjcnlwdEFzY2lpKGRhdGEsIGtleSwgZGlzY2FyZE51bWJlcikgewogIGNvbnN0IGMxID0gNTI4NDUsCiAgICBjMiA9IDIyNzE5OwogIGxldCByID0ga2V5IHwgMDsKICBjb25zdCBjb3VudCA9IGRhdGEubGVuZ3RoLAogICAgbWF5YmVMZW5ndGggPSBjb3VudCA+Pj4gMTsKICBjb25zdCBkZWNyeXB0ZWQgPSBuZXcgVWludDhBcnJheShtYXliZUxlbmd0aCk7CiAgbGV0IGksIGo7CiAgZm9yIChpID0gMCwgaiA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICBjb25zdCBkaWdpdDEgPSBkYXRhW2ldOwogICAgaWYgKCFpc0hleERpZ2l0KGRpZ2l0MSkpIHsKICAgICAgY29udGludWU7CiAgICB9CiAgICBpKys7CiAgICBsZXQgZGlnaXQyOwogICAgd2hpbGUgKGkgPCBjb3VudCAmJiAhaXNIZXhEaWdpdChkaWdpdDIgPSBkYXRhW2ldKSkgewogICAgICBpKys7CiAgICB9CiAgICBpZiAoaSA8IGNvdW50KSB7CiAgICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQoU3RyaW5nLmZyb21DaGFyQ29kZShkaWdpdDEsIGRpZ2l0MiksIDE2KTsKICAgICAgZGVjcnlwdGVkW2orK10gPSB2YWx1ZSBeIHIgPj4gODsKICAgICAgciA9ICh2YWx1ZSArIHIpICogYzEgKyBjMiAmICgxIDw8IDE2KSAtIDE7CiAgICB9CiAgfQogIHJldHVybiBkZWNyeXB0ZWQuc2xpY2UoZGlzY2FyZE51bWJlciwgaik7Cn0KZnVuY3Rpb24gaXNTcGVjaWFsKGMpIHsKICByZXR1cm4gYyA9PT0gMHgyZiB8fCBjID09PSAweDViIHx8IGMgPT09IDB4NWQgfHwgYyA9PT0gMHg3YiB8fCBjID09PSAweDdkIHx8IGMgPT09IDB4MjggfHwgYyA9PT0gMHgyOTsKfQpjbGFzcyBUeXBlMVBhcnNlciB7CiAgY29uc3RydWN0b3Ioc3RyZWFtLCBlbmNyeXB0ZWQsIHNlYWNBbmFseXNpc0VuYWJsZWQpIHsKICAgIGlmIChlbmNyeXB0ZWQpIHsKICAgICAgY29uc3QgZGF0YSA9IHN0cmVhbS5nZXRCeXRlcygpOwogICAgICBjb25zdCBpc0JpbmFyeSA9ICEoKGlzSGV4RGlnaXQoZGF0YVswXSkgfHwgaXNXaGl0ZVNwYWNlKGRhdGFbMF0pKSAmJiBpc0hleERpZ2l0KGRhdGFbMV0pICYmIGlzSGV4RGlnaXQoZGF0YVsyXSkgJiYgaXNIZXhEaWdpdChkYXRhWzNdKSAmJiBpc0hleERpZ2l0KGRhdGFbNF0pICYmIGlzSGV4RGlnaXQoZGF0YVs1XSkgJiYgaXNIZXhEaWdpdChkYXRhWzZdKSAmJiBpc0hleERpZ2l0KGRhdGFbN10pKTsKICAgICAgc3RyZWFtID0gbmV3IFN0cmVhbShpc0JpbmFyeSA/IGRlY3J5cHQoZGF0YSwgRUVYRUNfRU5DUllQVF9LRVksIDQpIDogZGVjcnlwdEFzY2lpKGRhdGEsIEVFWEVDX0VOQ1JZUFRfS0VZLCA0KSk7CiAgICB9CiAgICB0aGlzLnNlYWNBbmFseXNpc0VuYWJsZWQgPSAhIXNlYWNBbmFseXNpc0VuYWJsZWQ7CiAgICB0aGlzLnN0cmVhbSA9IHN0cmVhbTsKICAgIHRoaXMubmV4dENoYXIoKTsKICB9CiAgcmVhZE51bWJlckFycmF5KCkgewogICAgdGhpcy5nZXRUb2tlbigpOwogICAgY29uc3QgYXJyYXkgPSBbXTsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRUb2tlbigpOwogICAgICBpZiAodG9rZW4gPT09IG51bGwgfHwgdG9rZW4gPT09ICJdIiB8fCB0b2tlbiA9PT0gIn0iKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgYXJyYXkucHVzaChwYXJzZUZsb2F0KHRva2VuIHx8IDApKTsKICAgIH0KICAgIHJldHVybiBhcnJheTsKICB9CiAgcmVhZE51bWJlcigpIHsKICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRUb2tlbigpOwogICAgcmV0dXJuIHBhcnNlRmxvYXQodG9rZW4gfHwgMCk7CiAgfQogIHJlYWRJbnQoKSB7CiAgICBjb25zdCB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTsKICAgIHJldHVybiBwYXJzZUludCh0b2tlbiB8fCAwLCAxMCkgfCAwOwogIH0KICByZWFkQm9vbGVhbigpIHsKICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRUb2tlbigpOwogICAgcmV0dXJuIHRva2VuID09PSAidHJ1ZSIgPyAxIDogMDsKICB9CiAgbmV4dENoYXIoKSB7CiAgICByZXR1cm4gdGhpcy5jdXJyZW50Q2hhciA9IHRoaXMuc3RyZWFtLmdldEJ5dGUoKTsKICB9CiAgcHJldkNoYXIoKSB7CiAgICB0aGlzLnN0cmVhbS5za2lwKC0yKTsKICAgIHJldHVybiB0aGlzLmN1cnJlbnRDaGFyID0gdGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpOwogIH0KICBnZXRUb2tlbigpIHsKICAgIGxldCBjb21tZW50ID0gZmFsc2U7CiAgICBsZXQgY2ggPSB0aGlzLmN1cnJlbnRDaGFyOwogICAgd2hpbGUgKHRydWUpIHsKICAgICAgaWYgKGNoID09PSAtMSkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGlmIChjb21tZW50KSB7CiAgICAgICAgaWYgKGNoID09PSAweDBhIHx8IGNoID09PSAweDBkKSB7CiAgICAgICAgICBjb21tZW50ID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGNoID09PSAweDI1KSB7CiAgICAgICAgY29tbWVudCA9IHRydWU7CiAgICAgIH0gZWxzZSBpZiAoIWlzV2hpdGVTcGFjZShjaCkpIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTsKICAgIH0KICAgIGlmIChpc1NwZWNpYWwoY2gpKSB7CiAgICAgIHRoaXMubmV4dENoYXIoKTsKICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpOwogICAgfQogICAgbGV0IHRva2VuID0gIiI7CiAgICBkbyB7CiAgICAgIHRva2VuICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpOwogICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTsKICAgIH0gd2hpbGUgKGNoID49IDAgJiYgIWlzV2hpdGVTcGFjZShjaCkgJiYgIWlzU3BlY2lhbChjaCkpOwogICAgcmV0dXJuIHRva2VuOwogIH0KICByZWFkQ2hhclN0cmluZ3MoYnl0ZXMsIGxlbklWKSB7CiAgICBpZiAobGVuSVYgPT09IC0xKSB7CiAgICAgIHJldHVybiBieXRlczsKICAgIH0KICAgIHJldHVybiBkZWNyeXB0KGJ5dGVzLCBDSEFSX1NUUlNfRU5DUllQVF9LRVksIGxlbklWKTsKICB9CiAgZXh0cmFjdEZvbnRQcm9ncmFtKHByb3BlcnRpZXMpIHsKICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtOwogICAgY29uc3Qgc3VicnMgPSBbXSwKICAgICAgY2hhcnN0cmluZ3MgPSBbXTsKICAgIGNvbnN0IHByaXZhdGVEYXRhID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgIHByaXZhdGVEYXRhLmxlbklWID0gNDsKICAgIGNvbnN0IHByb2dyYW0gPSB7CiAgICAgIHN1YnJzOiBbXSwKICAgICAgY2hhcnN0cmluZ3M6IFtdLAogICAgICBwcm9wZXJ0aWVzOiB7CiAgICAgICAgcHJpdmF0ZURhdGEKICAgICAgfQogICAgfTsKICAgIGxldCB0b2tlbiwgbGVuZ3RoLCBkYXRhLCBsZW5JVjsKICAgIHdoaWxlICgodG9rZW4gPSB0aGlzLmdldFRva2VuKCkpICE9PSBudWxsKSB7CiAgICAgIGlmICh0b2tlbiAhPT0gIi8iKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7CiAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICBjYXNlICJDaGFyU3RyaW5ncyI6CiAgICAgICAgICB0aGlzLmdldFRva2VuKCk7CiAgICAgICAgICB0aGlzLmdldFRva2VuKCk7CiAgICAgICAgICB0aGlzLmdldFRva2VuKCk7CiAgICAgICAgICB0aGlzLmdldFRva2VuKCk7CiAgICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTsKICAgICAgICAgICAgaWYgKHRva2VuID09PSBudWxsIHx8IHRva2VuID09PSAiZW5kIikgewogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gIi8iKSB7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgZ2x5cGggPSB0aGlzLmdldFRva2VuKCk7CiAgICAgICAgICAgIGxlbmd0aCA9IHRoaXMucmVhZEludCgpOwogICAgICAgICAgICB0aGlzLmdldFRva2VuKCk7CiAgICAgICAgICAgIGRhdGEgPSBsZW5ndGggPiAwID8gc3RyZWFtLmdldEJ5dGVzKGxlbmd0aCkgOiBuZXcgVWludDhBcnJheSgwKTsKICAgICAgICAgICAgbGVuSVYgPSBwcm9ncmFtLnByb3BlcnRpZXMucHJpdmF0ZURhdGEubGVuSVY7CiAgICAgICAgICAgIGNvbnN0IGVuY29kZWQgPSB0aGlzLnJlYWRDaGFyU3RyaW5ncyhkYXRhLCBsZW5JVik7CiAgICAgICAgICAgIHRoaXMubmV4dENoYXIoKTsKICAgICAgICAgICAgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7CiAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gIm5vYWNjZXNzIikgewogICAgICAgICAgICAgIHRoaXMuZ2V0VG9rZW4oKTsKICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlbiA9PT0gIi8iKSB7CiAgICAgICAgICAgICAgdGhpcy5wcmV2Q2hhcigpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNoYXJzdHJpbmdzLnB1c2goewogICAgICAgICAgICAgIGdseXBoLAogICAgICAgICAgICAgIGVuY29kZWQKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJTdWJycyI6CiAgICAgICAgICB0aGlzLnJlYWRJbnQoKTsKICAgICAgICAgIHRoaXMuZ2V0VG9rZW4oKTsKICAgICAgICAgIHdoaWxlICh0aGlzLmdldFRva2VuKCkgPT09ICJkdXAiKSB7CiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yZWFkSW50KCk7CiAgICAgICAgICAgIGxlbmd0aCA9IHRoaXMucmVhZEludCgpOwogICAgICAgICAgICB0aGlzLmdldFRva2VuKCk7CiAgICAgICAgICAgIGRhdGEgPSBsZW5ndGggPiAwID8gc3RyZWFtLmdldEJ5dGVzKGxlbmd0aCkgOiBuZXcgVWludDhBcnJheSgwKTsKICAgICAgICAgICAgbGVuSVYgPSBwcm9ncmFtLnByb3BlcnRpZXMucHJpdmF0ZURhdGEubGVuSVY7CiAgICAgICAgICAgIGNvbnN0IGVuY29kZWQgPSB0aGlzLnJlYWRDaGFyU3RyaW5ncyhkYXRhLCBsZW5JVik7CiAgICAgICAgICAgIHRoaXMubmV4dENoYXIoKTsKICAgICAgICAgICAgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7CiAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gIm5vYWNjZXNzIikgewogICAgICAgICAgICAgIHRoaXMuZ2V0VG9rZW4oKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzdWJyc1tpbmRleF0gPSBlbmNvZGVkOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiQmx1ZVZhbHVlcyI6CiAgICAgICAgY2FzZSAiT3RoZXJCbHVlcyI6CiAgICAgICAgY2FzZSAiRmFtaWx5Qmx1ZXMiOgogICAgICAgIGNhc2UgIkZhbWlseU90aGVyQmx1ZXMiOgogICAgICAgICAgY29uc3QgYmx1ZUFycmF5ID0gdGhpcy5yZWFkTnVtYmVyQXJyYXkoKTsKICAgICAgICAgIGlmIChibHVlQXJyYXkubGVuZ3RoID4gMCAmJiBibHVlQXJyYXkubGVuZ3RoICUgMiA9PT0gMCAmJiBISU5USU5HX0VOQUJMRUQpIHsKICAgICAgICAgICAgcHJvZ3JhbS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW3Rva2VuXSA9IGJsdWVBcnJheTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIlN0ZW1TbmFwSCI6CiAgICAgICAgY2FzZSAiU3RlbVNuYXBWIjoKICAgICAgICAgIHByb2dyYW0ucHJvcGVydGllcy5wcml2YXRlRGF0YVt0b2tlbl0gPSB0aGlzLnJlYWROdW1iZXJBcnJheSgpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiU3RkSFciOgogICAgICAgIGNhc2UgIlN0ZFZXIjoKICAgICAgICAgIHByb2dyYW0ucHJvcGVydGllcy5wcml2YXRlRGF0YVt0b2tlbl0gPSB0aGlzLnJlYWROdW1iZXJBcnJheSgpWzBdOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiQmx1ZVNoaWZ0IjoKICAgICAgICBjYXNlICJsZW5JViI6CiAgICAgICAgY2FzZSAiQmx1ZUZ1enoiOgogICAgICAgIGNhc2UgIkJsdWVTY2FsZSI6CiAgICAgICAgY2FzZSAiTGFuZ3VhZ2VHcm91cCI6CiAgICAgICAgICBwcm9ncmFtLnByb3BlcnRpZXMucHJpdmF0ZURhdGFbdG9rZW5dID0gdGhpcy5yZWFkTnVtYmVyKCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJFeHBhbnNpb25GYWN0b3IiOgogICAgICAgICAgcHJvZ3JhbS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW3Rva2VuXSA9IHRoaXMucmVhZE51bWJlcigpIHx8IDAuMDY7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJGb3JjZUJvbGQiOgogICAgICAgICAgcHJvZ3JhbS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW3Rva2VuXSA9IHRoaXMucmVhZEJvb2xlYW4oKTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBmb3IgKGNvbnN0IHsKICAgICAgZW5jb2RlZCwKICAgICAgZ2x5cGgKICAgIH0gb2YgY2hhcnN0cmluZ3MpIHsKICAgICAgY29uc3QgY2hhclN0cmluZyA9IG5ldyBUeXBlMUNoYXJTdHJpbmcoKTsKICAgICAgY29uc3QgZXJyb3IgPSBjaGFyU3RyaW5nLmNvbnZlcnQoZW5jb2RlZCwgc3VicnMsIHRoaXMuc2VhY0FuYWx5c2lzRW5hYmxlZCk7CiAgICAgIGxldCBvdXRwdXQgPSBjaGFyU3RyaW5nLm91dHB1dDsKICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgb3V0cHV0ID0gWzE0XTsKICAgICAgfQogICAgICBjb25zdCBjaGFyU3RyaW5nT2JqZWN0ID0gewogICAgICAgIGdseXBoTmFtZTogZ2x5cGgsCiAgICAgICAgY2hhcnN0cmluZzogb3V0cHV0LAogICAgICAgIHdpZHRoOiBjaGFyU3RyaW5nLndpZHRoLAogICAgICAgIGxzYjogY2hhclN0cmluZy5sc2IsCiAgICAgICAgc2VhYzogY2hhclN0cmluZy5zZWFjCiAgICAgIH07CiAgICAgIGlmIChnbHlwaCA9PT0gIi5ub3RkZWYiKSB7CiAgICAgICAgcHJvZ3JhbS5jaGFyc3RyaW5ncy51bnNoaWZ0KGNoYXJTdHJpbmdPYmplY3QpOwogICAgICB9IGVsc2UgewogICAgICAgIHByb2dyYW0uY2hhcnN0cmluZ3MucHVzaChjaGFyU3RyaW5nT2JqZWN0KTsKICAgICAgfQogICAgICBpZiAocHJvcGVydGllcy5idWlsdEluRW5jb2RpbmcpIHsKICAgICAgICBjb25zdCBpbmRleCA9IHByb3BlcnRpZXMuYnVpbHRJbkVuY29kaW5nLmluZGV4T2YoZ2x5cGgpOwogICAgICAgIGlmIChpbmRleCA+IC0xICYmIHByb3BlcnRpZXMud2lkdGhzW2luZGV4XSA9PT0gdW5kZWZpbmVkICYmIGluZGV4ID49IHByb3BlcnRpZXMuZmlyc3RDaGFyICYmIGluZGV4IDw9IHByb3BlcnRpZXMubGFzdENoYXIpIHsKICAgICAgICAgIHByb3BlcnRpZXMud2lkdGhzW2luZGV4XSA9IGNoYXJTdHJpbmcud2lkdGg7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gcHJvZ3JhbTsKICB9CiAgZXh0cmFjdEZvbnRIZWFkZXIocHJvcGVydGllcykgewogICAgbGV0IHRva2VuOwogICAgd2hpbGUgKCh0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKSkgIT09IG51bGwpIHsKICAgICAgaWYgKHRva2VuICE9PSAiLyIpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTsKICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgIGNhc2UgIkZvbnRNYXRyaXgiOgogICAgICAgICAgY29uc3QgbWF0cml4ID0gdGhpcy5yZWFkTnVtYmVyQXJyYXkoKTsKICAgICAgICAgIHByb3BlcnRpZXMuZm9udE1hdHJpeCA9IG1hdHJpeDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkVuY29kaW5nIjoKICAgICAgICAgIGNvbnN0IGVuY29kaW5nQXJnID0gdGhpcy5nZXRUb2tlbigpOwogICAgICAgICAgbGV0IGVuY29kaW5nOwogICAgICAgICAgaWYgKCEvXlxkKyQvLnRlc3QoZW5jb2RpbmdBcmcpKSB7CiAgICAgICAgICAgIGVuY29kaW5nID0gZ2V0RW5jb2RpbmcoZW5jb2RpbmdBcmcpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZW5jb2RpbmcgPSBbXTsKICAgICAgICAgICAgY29uc3Qgc2l6ZSA9IHBhcnNlSW50KGVuY29kaW5nQXJnLCAxMCkgfCAwOwogICAgICAgICAgICB0aGlzLmdldFRva2VuKCk7CiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgc2l6ZTsgaisrKSB7CiAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7CiAgICAgICAgICAgICAgd2hpbGUgKHRva2VuICE9PSAiZHVwIiAmJiB0b2tlbiAhPT0gImRlZiIpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5nZXRUb2tlbigpOwogICAgICAgICAgICAgICAgaWYgKHRva2VuID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHRva2VuID09PSAiZGVmIikgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yZWFkSW50KCk7CiAgICAgICAgICAgICAgdGhpcy5nZXRUb2tlbigpOwogICAgICAgICAgICAgIGNvbnN0IGdseXBoID0gdGhpcy5nZXRUb2tlbigpOwogICAgICAgICAgICAgIGVuY29kaW5nW2luZGV4XSA9IGdseXBoOwogICAgICAgICAgICAgIHRoaXMuZ2V0VG9rZW4oKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcHJvcGVydGllcy5idWlsdEluRW5jb2RpbmcgPSBlbmNvZGluZzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkZvbnRCQm94IjoKICAgICAgICAgIGNvbnN0IGZvbnRCQm94ID0gdGhpcy5yZWFkTnVtYmVyQXJyYXkoKTsKICAgICAgICAgIHByb3BlcnRpZXMuYXNjZW50ID0gTWF0aC5tYXgoZm9udEJCb3hbM10sIGZvbnRCQm94WzFdKTsKICAgICAgICAgIHByb3BlcnRpZXMuZGVzY2VudCA9IE1hdGgubWluKGZvbnRCQm94WzFdLCBmb250QkJveFszXSk7CiAgICAgICAgICBwcm9wZXJ0aWVzLmFzY2VudFNjYWxlZCA9IHRydWU7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogIH0KfQoKOy8vIC4vc3JjL2NvcmUvdHlwZTFfZm9udC5qcwoKCgoKCgpmdW5jdGlvbiBmaW5kQmxvY2soc3RyZWFtQnl0ZXMsIHNpZ25hdHVyZSwgc3RhcnRJbmRleCkgewogIGNvbnN0IHN0cmVhbUJ5dGVzTGVuZ3RoID0gc3RyZWFtQnl0ZXMubGVuZ3RoOwogIGNvbnN0IHNpZ25hdHVyZUxlbmd0aCA9IHNpZ25hdHVyZS5sZW5ndGg7CiAgY29uc3Qgc2Nhbkxlbmd0aCA9IHN0cmVhbUJ5dGVzTGVuZ3RoIC0gc2lnbmF0dXJlTGVuZ3RoOwogIGxldCBpID0gc3RhcnRJbmRleCwKICAgIGZvdW5kID0gZmFsc2U7CiAgd2hpbGUgKGkgPCBzY2FuTGVuZ3RoKSB7CiAgICBsZXQgaiA9IDA7CiAgICB3aGlsZSAoaiA8IHNpZ25hdHVyZUxlbmd0aCAmJiBzdHJlYW1CeXRlc1tpICsgal0gPT09IHNpZ25hdHVyZVtqXSkgewogICAgICBqKys7CiAgICB9CiAgICBpZiAoaiA+PSBzaWduYXR1cmVMZW5ndGgpIHsKICAgICAgaSArPSBqOwogICAgICB3aGlsZSAoaSA8IHN0cmVhbUJ5dGVzTGVuZ3RoICYmIGlzV2hpdGVTcGFjZShzdHJlYW1CeXRlc1tpXSkpIHsKICAgICAgICBpKys7CiAgICAgIH0KICAgICAgZm91bmQgPSB0cnVlOwogICAgICBicmVhazsKICAgIH0KICAgIGkrKzsKICB9CiAgcmV0dXJuIHsKICAgIGZvdW5kLAogICAgbGVuZ3RoOiBpCiAgfTsKfQpmdW5jdGlvbiBnZXRIZWFkZXJCbG9jayhzdHJlYW0sIHN1Z2dlc3RlZExlbmd0aCkgewogIGNvbnN0IEVFWEVDX1NJR05BVFVSRSA9IFsweDY1LCAweDY1LCAweDc4LCAweDY1LCAweDYzXTsKICBjb25zdCBzdHJlYW1TdGFydFBvcyA9IHN0cmVhbS5wb3M7CiAgbGV0IGhlYWRlckJ5dGVzLCBoZWFkZXJCeXRlc0xlbmd0aCwgYmxvY2s7CiAgdHJ5IHsKICAgIGhlYWRlckJ5dGVzID0gc3RyZWFtLmdldEJ5dGVzKHN1Z2dlc3RlZExlbmd0aCk7CiAgICBoZWFkZXJCeXRlc0xlbmd0aCA9IGhlYWRlckJ5dGVzLmxlbmd0aDsKICB9IGNhdGNoIHt9CiAgaWYgKGhlYWRlckJ5dGVzTGVuZ3RoID09PSBzdWdnZXN0ZWRMZW5ndGgpIHsKICAgIGJsb2NrID0gZmluZEJsb2NrKGhlYWRlckJ5dGVzLCBFRVhFQ19TSUdOQVRVUkUsIHN1Z2dlc3RlZExlbmd0aCAtIDIgKiBFRVhFQ19TSUdOQVRVUkUubGVuZ3RoKTsKICAgIGlmIChibG9jay5mb3VuZCAmJiBibG9jay5sZW5ndGggPT09IHN1Z2dlc3RlZExlbmd0aCkgewogICAgICByZXR1cm4gewogICAgICAgIHN0cmVhbTogbmV3IFN0cmVhbShoZWFkZXJCeXRlcyksCiAgICAgICAgbGVuZ3RoOiBzdWdnZXN0ZWRMZW5ndGgKICAgICAgfTsKICAgIH0KICB9CiAgd2FybignSW52YWxpZCAiTGVuZ3RoMSIgcHJvcGVydHkgaW4gVHlwZTEgZm9udCAtLSB0cnlpbmcgdG8gcmVjb3Zlci4nKTsKICBzdHJlYW0ucG9zID0gc3RyZWFtU3RhcnRQb3M7CiAgY29uc3QgU0NBTl9CTE9DS19MRU5HVEggPSAyMDQ4OwogIGxldCBhY3R1YWxMZW5ndGg7CiAgd2hpbGUgKHRydWUpIHsKICAgIGNvbnN0IHNjYW5CeXRlcyA9IHN0cmVhbS5wZWVrQnl0ZXMoU0NBTl9CTE9DS19MRU5HVEgpOwogICAgYmxvY2sgPSBmaW5kQmxvY2soc2NhbkJ5dGVzLCBFRVhFQ19TSUdOQVRVUkUsIDApOwogICAgaWYgKGJsb2NrLmxlbmd0aCA9PT0gMCkgewogICAgICBicmVhazsKICAgIH0KICAgIHN0cmVhbS5wb3MgKz0gYmxvY2subGVuZ3RoOwogICAgaWYgKGJsb2NrLmZvdW5kKSB7CiAgICAgIGFjdHVhbExlbmd0aCA9IHN0cmVhbS5wb3MgLSBzdHJlYW1TdGFydFBvczsKICAgICAgYnJlYWs7CiAgICB9CiAgfQogIHN0cmVhbS5wb3MgPSBzdHJlYW1TdGFydFBvczsKICBpZiAoYWN0dWFsTGVuZ3RoKSB7CiAgICByZXR1cm4gewogICAgICBzdHJlYW06IG5ldyBTdHJlYW0oc3RyZWFtLmdldEJ5dGVzKGFjdHVhbExlbmd0aCkpLAogICAgICBsZW5ndGg6IGFjdHVhbExlbmd0aAogICAgfTsKICB9CiAgd2FybignVW5hYmxlIHRvIHJlY292ZXIgIkxlbmd0aDEiIHByb3BlcnR5IGluIFR5cGUxIGZvbnQgLS0gdXNpbmcgYXMgaXMuJyk7CiAgcmV0dXJuIHsKICAgIHN0cmVhbTogbmV3IFN0cmVhbShzdHJlYW0uZ2V0Qnl0ZXMoc3VnZ2VzdGVkTGVuZ3RoKSksCiAgICBsZW5ndGg6IHN1Z2dlc3RlZExlbmd0aAogIH07Cn0KZnVuY3Rpb24gZ2V0RWV4ZWNCbG9jayhzdHJlYW0sIHN1Z2dlc3RlZExlbmd0aCkgewogIGNvbnN0IGVleGVjQnl0ZXMgPSBzdHJlYW0uZ2V0Qnl0ZXMoKTsKICBpZiAoZWV4ZWNCeXRlcy5sZW5ndGggPT09IDApIHsKICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiZ2V0RWV4ZWNCbG9jayAtIG5vIGZvbnQgcHJvZ3JhbSBmb3VuZC4iKTsKICB9CiAgcmV0dXJuIHsKICAgIHN0cmVhbTogbmV3IFN0cmVhbShlZXhlY0J5dGVzKSwKICAgIGxlbmd0aDogZWV4ZWNCeXRlcy5sZW5ndGgKICB9Owp9CmNsYXNzIFR5cGUxRm9udCB7CiAgY29uc3RydWN0b3IobmFtZSwgZmlsZSwgcHJvcGVydGllcykgewogICAgY29uc3QgUEZCX0hFQURFUl9TSVpFID0gNjsKICAgIGxldCBoZWFkZXJCbG9ja0xlbmd0aCA9IHByb3BlcnRpZXMubGVuZ3RoMTsKICAgIGxldCBlZXhlY0Jsb2NrTGVuZ3RoID0gcHJvcGVydGllcy5sZW5ndGgyOwogICAgbGV0IHBmYkhlYWRlciA9IGZpbGUucGVla0J5dGVzKFBGQl9IRUFERVJfU0laRSk7CiAgICBjb25zdCBwZmJIZWFkZXJQcmVzZW50ID0gcGZiSGVhZGVyWzBdID09PSAweDgwICYmIHBmYkhlYWRlclsxXSA9PT0gMHgwMTsKICAgIGlmIChwZmJIZWFkZXJQcmVzZW50KSB7CiAgICAgIGZpbGUuc2tpcChQRkJfSEVBREVSX1NJWkUpOwogICAgICBoZWFkZXJCbG9ja0xlbmd0aCA9IHBmYkhlYWRlcls1XSA8PCAyNCB8IHBmYkhlYWRlcls0XSA8PCAxNiB8IHBmYkhlYWRlclszXSA8PCA4IHwgcGZiSGVhZGVyWzJdOwogICAgfQogICAgY29uc3QgaGVhZGVyQmxvY2sgPSBnZXRIZWFkZXJCbG9jayhmaWxlLCBoZWFkZXJCbG9ja0xlbmd0aCk7CiAgICBjb25zdCBoZWFkZXJCbG9ja1BhcnNlciA9IG5ldyBUeXBlMVBhcnNlcihoZWFkZXJCbG9jay5zdHJlYW0sIGZhbHNlLCBTRUFDX0FOQUxZU0lTX0VOQUJMRUQpOwogICAgaGVhZGVyQmxvY2tQYXJzZXIuZXh0cmFjdEZvbnRIZWFkZXIocHJvcGVydGllcyk7CiAgICBpZiAocGZiSGVhZGVyUHJlc2VudCkgewogICAgICBwZmJIZWFkZXIgPSBmaWxlLmdldEJ5dGVzKFBGQl9IRUFERVJfU0laRSk7CiAgICAgIGVleGVjQmxvY2tMZW5ndGggPSBwZmJIZWFkZXJbNV0gPDwgMjQgfCBwZmJIZWFkZXJbNF0gPDwgMTYgfCBwZmJIZWFkZXJbM10gPDwgOCB8IHBmYkhlYWRlclsyXTsKICAgIH0KICAgIGNvbnN0IGVleGVjQmxvY2sgPSBnZXRFZXhlY0Jsb2NrKGZpbGUsIGVleGVjQmxvY2tMZW5ndGgpOwogICAgY29uc3QgZWV4ZWNCbG9ja1BhcnNlciA9IG5ldyBUeXBlMVBhcnNlcihlZXhlY0Jsb2NrLnN0cmVhbSwgdHJ1ZSwgU0VBQ19BTkFMWVNJU19FTkFCTEVEKTsKICAgIGNvbnN0IGRhdGEgPSBlZXhlY0Jsb2NrUGFyc2VyLmV4dHJhY3RGb250UHJvZ3JhbShwcm9wZXJ0aWVzKTsKICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGEucHJvcGVydGllcykgewogICAgICBwcm9wZXJ0aWVzW2tleV0gPSBkYXRhLnByb3BlcnRpZXNba2V5XTsKICAgIH0KICAgIGNvbnN0IGNoYXJzdHJpbmdzID0gZGF0YS5jaGFyc3RyaW5nczsKICAgIGNvbnN0IHR5cGUyQ2hhcnN0cmluZ3MgPSB0aGlzLmdldFR5cGUyQ2hhcnN0cmluZ3MoY2hhcnN0cmluZ3MpOwogICAgY29uc3Qgc3VicnMgPSB0aGlzLmdldFR5cGUyU3VicnMoZGF0YS5zdWJycyk7CiAgICB0aGlzLmNoYXJzdHJpbmdzID0gY2hhcnN0cmluZ3M7CiAgICB0aGlzLmRhdGEgPSB0aGlzLndyYXAobmFtZSwgdHlwZTJDaGFyc3RyaW5ncywgdGhpcy5jaGFyc3RyaW5ncywgc3VicnMsIHByb3BlcnRpZXMpOwogICAgdGhpcy5zZWFjcyA9IHRoaXMuZ2V0U2VhY3MoZGF0YS5jaGFyc3RyaW5ncyk7CiAgfQogIGdldCBudW1HbHlwaHMoKSB7CiAgICByZXR1cm4gdGhpcy5jaGFyc3RyaW5ncy5sZW5ndGggKyAxOwogIH0KICBnZXRDaGFyc2V0KCkgewogICAgY29uc3QgY2hhcnNldCA9IFsiLm5vdGRlZiJdOwogICAgZm9yIChjb25zdCB7CiAgICAgIGdseXBoTmFtZQogICAgfSBvZiB0aGlzLmNoYXJzdHJpbmdzKSB7CiAgICAgIGNoYXJzZXQucHVzaChnbHlwaE5hbWUpOwogICAgfQogICAgcmV0dXJuIGNoYXJzZXQ7CiAgfQogIGdldEdseXBoTWFwcGluZyhwcm9wZXJ0aWVzKSB7CiAgICBjb25zdCBjaGFyc3RyaW5ncyA9IHRoaXMuY2hhcnN0cmluZ3M7CiAgICBpZiAocHJvcGVydGllcy5jb21wb3NpdGUpIHsKICAgICAgY29uc3QgY2hhckNvZGVUb0dseXBoSWQgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgICBmb3IgKGxldCBnbHlwaElkID0gMCwgY2hhcnN0cmluZ3NMZW4gPSBjaGFyc3RyaW5ncy5sZW5ndGg7IGdseXBoSWQgPCBjaGFyc3RyaW5nc0xlbjsgZ2x5cGhJZCsrKSB7CiAgICAgICAgY29uc3QgY2hhckNvZGUgPSBwcm9wZXJ0aWVzLmNNYXAuY2hhckNvZGVPZihnbHlwaElkKTsKICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZFtjaGFyQ29kZV0gPSBnbHlwaElkICsgMTsKICAgICAgfQogICAgICByZXR1cm4gY2hhckNvZGVUb0dseXBoSWQ7CiAgICB9CiAgICBjb25zdCBnbHlwaE5hbWVzID0gWyIubm90ZGVmIl07CiAgICBsZXQgYnVpbHRJbkVuY29kaW5nLCBnbHlwaElkOwogICAgZm9yIChnbHlwaElkID0gMDsgZ2x5cGhJZCA8IGNoYXJzdHJpbmdzLmxlbmd0aDsgZ2x5cGhJZCsrKSB7CiAgICAgIGdseXBoTmFtZXMucHVzaChjaGFyc3RyaW5nc1tnbHlwaElkXS5nbHlwaE5hbWUpOwogICAgfQogICAgY29uc3QgZW5jb2RpbmcgPSBwcm9wZXJ0aWVzLmJ1aWx0SW5FbmNvZGluZzsKICAgIGlmIChlbmNvZGluZykgewogICAgICBidWlsdEluRW5jb2RpbmcgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgICBmb3IgKGNvbnN0IGNoYXJDb2RlIGluIGVuY29kaW5nKSB7CiAgICAgICAgZ2x5cGhJZCA9IGdseXBoTmFtZXMuaW5kZXhPZihlbmNvZGluZ1tjaGFyQ29kZV0pOwogICAgICAgIGlmIChnbHlwaElkID49IDApIHsKICAgICAgICAgIGJ1aWx0SW5FbmNvZGluZ1tjaGFyQ29kZV0gPSBnbHlwaElkOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHR5cGUxRm9udEdseXBoTWFwcGluZyhwcm9wZXJ0aWVzLCBidWlsdEluRW5jb2RpbmcsIGdseXBoTmFtZXMpOwogIH0KICBoYXNHbHlwaElkKGlkKSB7CiAgICBpZiAoaWQgPCAwIHx8IGlkID49IHRoaXMubnVtR2x5cGhzKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmIChpZCA9PT0gMCkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGNvbnN0IGdseXBoID0gdGhpcy5jaGFyc3RyaW5nc1tpZCAtIDFdOwogICAgcmV0dXJuIGdseXBoLmNoYXJzdHJpbmcubGVuZ3RoID4gMDsKICB9CiAgZ2V0U2VhY3MoY2hhcnN0cmluZ3MpIHsKICAgIGNvbnN0IHNlYWNNYXAgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGNoYXJzdHJpbmdzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgY29uc3QgY2hhcnN0cmluZyA9IGNoYXJzdHJpbmdzW2ldOwogICAgICBpZiAoY2hhcnN0cmluZy5zZWFjKSB7CiAgICAgICAgc2VhY01hcFtpICsgMV0gPSBjaGFyc3RyaW5nLnNlYWM7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBzZWFjTWFwOwogIH0KICBnZXRUeXBlMkNoYXJzdHJpbmdzKHR5cGUxQ2hhcnN0cmluZ3MpIHsKICAgIGNvbnN0IHR5cGUyQ2hhcnN0cmluZ3MgPSBbXTsKICAgIGZvciAoY29uc3QgdHlwZTFDaGFyc3RyaW5nIG9mIHR5cGUxQ2hhcnN0cmluZ3MpIHsKICAgICAgdHlwZTJDaGFyc3RyaW5ncy5wdXNoKHR5cGUxQ2hhcnN0cmluZy5jaGFyc3RyaW5nKTsKICAgIH0KICAgIHJldHVybiB0eXBlMkNoYXJzdHJpbmdzOwogIH0KICBnZXRUeXBlMlN1YnJzKHR5cGUxU3VicnMpIHsKICAgIGxldCBiaWFzID0gMDsKICAgIGNvbnN0IGNvdW50ID0gdHlwZTFTdWJycy5sZW5ndGg7CiAgICBpZiAoY291bnQgPCAxMTMzKSB7CiAgICAgIGJpYXMgPSAxMDc7CiAgICB9IGVsc2UgaWYgKGNvdW50IDwgMzM3NjkpIHsKICAgICAgYmlhcyA9IDExMzE7CiAgICB9IGVsc2UgewogICAgICBiaWFzID0gMzI3Njg7CiAgICB9CiAgICBjb25zdCB0eXBlMlN1YnJzID0gW107CiAgICBsZXQgaTsKICAgIGZvciAoaSA9IDA7IGkgPCBiaWFzOyBpKyspIHsKICAgICAgdHlwZTJTdWJycy5wdXNoKFsweDBiXSk7CiAgICB9CiAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICB0eXBlMlN1YnJzLnB1c2godHlwZTFTdWJyc1tpXSk7CiAgICB9CiAgICByZXR1cm4gdHlwZTJTdWJyczsKICB9CiAgd3JhcChuYW1lLCBnbHlwaHMsIGNoYXJzdHJpbmdzLCBzdWJycywgcHJvcGVydGllcykgewogICAgY29uc3QgY2ZmID0gbmV3IENGRigpOwogICAgY2ZmLmhlYWRlciA9IG5ldyBDRkZIZWFkZXIoMSwgMCwgNCwgNCk7CiAgICBjZmYubmFtZXMgPSBbbmFtZV07CiAgICBjb25zdCB0b3BEaWN0ID0gbmV3IENGRlRvcERpY3QoKTsKICAgIHRvcERpY3Quc2V0QnlOYW1lKCJ2ZXJzaW9uIiwgMzkxKTsKICAgIHRvcERpY3Quc2V0QnlOYW1lKCJOb3RpY2UiLCAzOTIpOwogICAgdG9wRGljdC5zZXRCeU5hbWUoIkZ1bGxOYW1lIiwgMzkzKTsKICAgIHRvcERpY3Quc2V0QnlOYW1lKCJGYW1pbHlOYW1lIiwgMzk0KTsKICAgIHRvcERpY3Quc2V0QnlOYW1lKCJXZWlnaHQiLCAzOTUpOwogICAgdG9wRGljdC5zZXRCeU5hbWUoIkVuY29kaW5nIiwgbnVsbCk7CiAgICB0b3BEaWN0LnNldEJ5TmFtZSgiRm9udE1hdHJpeCIsIHByb3BlcnRpZXMuZm9udE1hdHJpeCk7CiAgICB0b3BEaWN0LnNldEJ5TmFtZSgiRm9udEJCb3giLCBwcm9wZXJ0aWVzLmJib3gpOwogICAgdG9wRGljdC5zZXRCeU5hbWUoImNoYXJzZXQiLCBudWxsKTsKICAgIHRvcERpY3Quc2V0QnlOYW1lKCJDaGFyU3RyaW5ncyIsIG51bGwpOwogICAgdG9wRGljdC5zZXRCeU5hbWUoIlByaXZhdGUiLCBudWxsKTsKICAgIGNmZi50b3BEaWN0ID0gdG9wRGljdDsKICAgIGNvbnN0IHN0cmluZ3MgPSBuZXcgQ0ZGU3RyaW5ncygpOwogICAgc3RyaW5ncy5hZGQoIlZlcnNpb24gMC4xMSIpOwogICAgc3RyaW5ncy5hZGQoIlNlZSBvcmlnaW5hbCBub3RpY2UiKTsKICAgIHN0cmluZ3MuYWRkKG5hbWUpOwogICAgc3RyaW5ncy5hZGQobmFtZSk7CiAgICBzdHJpbmdzLmFkZCgiTWVkaXVtIik7CiAgICBjZmYuc3RyaW5ncyA9IHN0cmluZ3M7CiAgICBjZmYuZ2xvYmFsU3VickluZGV4ID0gbmV3IENGRkluZGV4KCk7CiAgICBjb25zdCBjb3VudCA9IGdseXBocy5sZW5ndGg7CiAgICBjb25zdCBjaGFyc2V0QXJyYXkgPSBbIi5ub3RkZWYiXTsKICAgIGxldCBpLCBpaTsKICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIGNvbnN0IGdseXBoTmFtZSA9IGNoYXJzdHJpbmdzW2ldLmdseXBoTmFtZTsKICAgICAgY29uc3QgaW5kZXggPSBDRkZTdGFuZGFyZFN0cmluZ3MuaW5kZXhPZihnbHlwaE5hbWUpOwogICAgICBpZiAoaW5kZXggPT09IC0xKSB7CiAgICAgICAgc3RyaW5ncy5hZGQoZ2x5cGhOYW1lKTsKICAgICAgfQogICAgICBjaGFyc2V0QXJyYXkucHVzaChnbHlwaE5hbWUpOwogICAgfQogICAgY2ZmLmNoYXJzZXQgPSBuZXcgQ0ZGQ2hhcnNldChmYWxzZSwgMCwgY2hhcnNldEFycmF5KTsKICAgIGNvbnN0IGNoYXJTdHJpbmdzSW5kZXggPSBuZXcgQ0ZGSW5kZXgoKTsKICAgIGNoYXJTdHJpbmdzSW5kZXguYWRkKFsweDhiLCAweDBlXSk7CiAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICBjaGFyU3RyaW5nc0luZGV4LmFkZChnbHlwaHNbaV0pOwogICAgfQogICAgY2ZmLmNoYXJTdHJpbmdzID0gY2hhclN0cmluZ3NJbmRleDsKICAgIGNvbnN0IHByaXZhdGVEaWN0ID0gbmV3IENGRlByaXZhdGVEaWN0KCk7CiAgICBwcml2YXRlRGljdC5zZXRCeU5hbWUoIlN1YnJzIiwgbnVsbCk7CiAgICBjb25zdCBmaWVsZHMgPSBbIkJsdWVWYWx1ZXMiLCAiT3RoZXJCbHVlcyIsICJGYW1pbHlCbHVlcyIsICJGYW1pbHlPdGhlckJsdWVzIiwgIlN0ZW1TbmFwSCIsICJTdGVtU25hcFYiLCAiQmx1ZVNoaWZ0IiwgIkJsdWVGdXp6IiwgIkJsdWVTY2FsZSIsICJMYW5ndWFnZUdyb3VwIiwgIkV4cGFuc2lvbkZhY3RvciIsICJGb3JjZUJvbGQiLCAiU3RkSFciLCAiU3RkVlciXTsKICAgIGZvciAoaSA9IDAsIGlpID0gZmllbGRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgY29uc3QgZmllbGQgPSBmaWVsZHNbaV07CiAgICAgIGlmICghKGZpZWxkIGluIHByb3BlcnRpZXMucHJpdmF0ZURhdGEpKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgY29uc3QgdmFsdWUgPSBwcm9wZXJ0aWVzLnByaXZhdGVEYXRhW2ZpZWxkXTsKICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7CiAgICAgICAgZm9yIChsZXQgaiA9IHZhbHVlLmxlbmd0aCAtIDE7IGogPiAwOyBqLS0pIHsKICAgICAgICAgIHZhbHVlW2pdIC09IHZhbHVlW2ogLSAxXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcHJpdmF0ZURpY3Quc2V0QnlOYW1lKGZpZWxkLCB2YWx1ZSk7CiAgICB9CiAgICBjZmYudG9wRGljdC5wcml2YXRlRGljdCA9IHByaXZhdGVEaWN0OwogICAgY29uc3Qgc3VickluZGV4ID0gbmV3IENGRkluZGV4KCk7CiAgICBmb3IgKGkgPSAwLCBpaSA9IHN1YnJzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgc3VickluZGV4LmFkZChzdWJyc1tpXSk7CiAgICB9CiAgICBwcml2YXRlRGljdC5zdWJyc0luZGV4ID0gc3VickluZGV4OwogICAgY29uc3QgY29tcGlsZXIgPSBuZXcgQ0ZGQ29tcGlsZXIoY2ZmKTsKICAgIHJldHVybiBjb21waWxlci5jb21waWxlKCk7CiAgfQp9Cgo7Ly8gLi9zcmMvY29yZS9mb250cy5qcwoKCgoKCgoKCgoKCgoKCgoKCmNvbnN0IFBSSVZBVEVfVVNFX0FSRUFTID0gW1sweGUwMDAsIDB4ZjhmZl0sIFsweDEwMDAwMCwgMHgxMGZmZmRdXTsKY29uc3QgUERGX0dMWVBIX1NQQUNFX1VOSVRTID0gMTAwMDsKY29uc3QgRVhQT1JUX0RBVEFfUFJPUEVSVElFUyA9IFsiYXNjZW50IiwgImJib3giLCAiYmxhY2siLCAiYm9sZCIsICJjaGFyUHJvY09wZXJhdG9yTGlzdCIsICJjc3NGb250SW5mbyIsICJkYXRhIiwgImRlZmF1bHRWTWV0cmljcyIsICJkZWZhdWx0V2lkdGgiLCAiZGVzY2VudCIsICJkaXNhYmxlRm9udEZhY2UiLCAiZmFsbGJhY2tOYW1lIiwgImZvbnRFeHRyYVByb3BlcnRpZXMiLCAiZm9udE1hdHJpeCIsICJpc0ludmFsaWRQREZqc0ZvbnQiLCAiaXNUeXBlM0ZvbnQiLCAiaXRhbGljIiwgImxvYWRlZE5hbWUiLCAibWltZXR5cGUiLCAibWlzc2luZ0ZpbGUiLCAibmFtZSIsICJyZW1lYXN1cmUiLCAic3lzdGVtRm9udEluZm8iLCAidmVydGljYWwiXTsKY29uc3QgRVhQT1JUX0RBVEFfRVhUUkFfUFJPUEVSVElFUyA9IFsiY01hcCIsICJjb21wb3NpdGUiLCAiZGVmYXVsdEVuY29kaW5nIiwgImRpZmZlcmVuY2VzIiwgImlzTW9ub3NwYWNlIiwgImlzU2VyaWZGb250IiwgImlzU3ltYm9saWNGb250IiwgInNlYWNNYXAiLCAic3VidHlwZSIsICJ0b0ZvbnRDaGFyIiwgInRvVW5pY29kZSIsICJ0eXBlIiwgInZtZXRyaWNzIiwgIndpZHRocyJdOwpmdW5jdGlvbiBhZGp1c3RXaWR0aHMocHJvcGVydGllcykgewogIGlmICghcHJvcGVydGllcy5mb250TWF0cml4KSB7CiAgICByZXR1cm47CiAgfQogIGlmIChwcm9wZXJ0aWVzLmZvbnRNYXRyaXhbMF0gPT09IEZPTlRfSURFTlRJVFlfTUFUUklYWzBdKSB7CiAgICByZXR1cm47CiAgfQogIGNvbnN0IHNjYWxlID0gMC4wMDEgLyBwcm9wZXJ0aWVzLmZvbnRNYXRyaXhbMF07CiAgY29uc3QgZ2x5cGhzV2lkdGhzID0gcHJvcGVydGllcy53aWR0aHM7CiAgZm9yIChjb25zdCBnbHlwaCBpbiBnbHlwaHNXaWR0aHMpIHsKICAgIGdseXBoc1dpZHRoc1tnbHlwaF0gKj0gc2NhbGU7CiAgfQogIHByb3BlcnRpZXMuZGVmYXVsdFdpZHRoICo9IHNjYWxlOwp9CmZ1bmN0aW9uIGFkanVzdFRydWVUeXBlVG9Vbmljb2RlKHByb3BlcnRpZXMsIGlzU3ltYm9saWNGb250LCBuYW1lUmVjb3JkcykgewogIGlmIChwcm9wZXJ0aWVzLmlzSW50ZXJuYWxGb250KSB7CiAgICByZXR1cm47CiAgfQogIGlmIChwcm9wZXJ0aWVzLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwKSB7CiAgICByZXR1cm47CiAgfQogIGlmIChwcm9wZXJ0aWVzLmhhc0VuY29kaW5nKSB7CiAgICByZXR1cm47CiAgfQogIGlmIChwcm9wZXJ0aWVzLnRvVW5pY29kZSBpbnN0YW5jZW9mIElkZW50aXR5VG9Vbmljb2RlTWFwKSB7CiAgICByZXR1cm47CiAgfQogIGlmICghaXNTeW1ib2xpY0ZvbnQpIHsKICAgIHJldHVybjsKICB9CiAgaWYgKG5hbWVSZWNvcmRzLmxlbmd0aCA9PT0gMCkgewogICAgcmV0dXJuOwogIH0KICBpZiAocHJvcGVydGllcy5kZWZhdWx0RW5jb2RpbmcgPT09IFdpbkFuc2lFbmNvZGluZykgewogICAgcmV0dXJuOwogIH0KICBmb3IgKGNvbnN0IHIgb2YgbmFtZVJlY29yZHMpIHsKICAgIGlmICghaXNXaW5OYW1lUmVjb3JkKHIpKSB7CiAgICAgIHJldHVybjsKICAgIH0KICB9CiAgY29uc3QgZW5jb2RpbmcgPSBXaW5BbnNpRW5jb2Rpbmc7CiAgY29uc3QgdG9Vbmljb2RlID0gW10sCiAgICBnbHlwaHNVbmljb2RlTWFwID0gZ2V0R2x5cGhzVW5pY29kZSgpOwogIGZvciAoY29uc3QgY2hhckNvZGUgaW4gZW5jb2RpbmcpIHsKICAgIGNvbnN0IGdseXBoTmFtZSA9IGVuY29kaW5nW2NoYXJDb2RlXTsKICAgIGlmIChnbHlwaE5hbWUgPT09ICIiKSB7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgY29uc3QgdW5pY29kZSA9IGdseXBoc1VuaWNvZGVNYXBbZ2x5cGhOYW1lXTsKICAgIGlmICh1bmljb2RlID09PSB1bmRlZmluZWQpIHsKICAgICAgY29udGludWU7CiAgICB9CiAgICB0b1VuaWNvZGVbY2hhckNvZGVdID0gU3RyaW5nLmZyb21DaGFyQ29kZSh1bmljb2RlKTsKICB9CiAgaWYgKHRvVW5pY29kZS5sZW5ndGggPiAwKSB7CiAgICBwcm9wZXJ0aWVzLnRvVW5pY29kZS5hbWVuZCh0b1VuaWNvZGUpOwogIH0KfQpmdW5jdGlvbiBhZGp1c3RUeXBlMVRvVW5pY29kZShwcm9wZXJ0aWVzLCBidWlsdEluRW5jb2RpbmcpIHsKICBpZiAocHJvcGVydGllcy5pc0ludGVybmFsRm9udCkgewogICAgcmV0dXJuOwogIH0KICBpZiAocHJvcGVydGllcy5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcCkgewogICAgcmV0dXJuOwogIH0KICBpZiAoYnVpbHRJbkVuY29kaW5nID09PSBwcm9wZXJ0aWVzLmRlZmF1bHRFbmNvZGluZykgewogICAgcmV0dXJuOwogIH0KICBpZiAocHJvcGVydGllcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBJZGVudGl0eVRvVW5pY29kZU1hcCkgewogICAgcmV0dXJuOwogIH0KICBjb25zdCB0b1VuaWNvZGUgPSBbXSwKICAgIGdseXBoc1VuaWNvZGVNYXAgPSBnZXRHbHlwaHNVbmljb2RlKCk7CiAgZm9yIChjb25zdCBjaGFyQ29kZSBpbiBidWlsdEluRW5jb2RpbmcpIHsKICAgIGlmIChwcm9wZXJ0aWVzLmhhc0VuY29kaW5nKSB7CiAgICAgIGlmIChwcm9wZXJ0aWVzLmJhc2VFbmNvZGluZ05hbWUgfHwgcHJvcGVydGllcy5kaWZmZXJlbmNlc1tjaGFyQ29kZV0gIT09IHVuZGVmaW5lZCkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICB9CiAgICBjb25zdCBnbHlwaE5hbWUgPSBidWlsdEluRW5jb2RpbmdbY2hhckNvZGVdOwogICAgY29uc3QgdW5pY29kZSA9IGdldFVuaWNvZGVGb3JHbHlwaChnbHlwaE5hbWUsIGdseXBoc1VuaWNvZGVNYXApOwogICAgaWYgKHVuaWNvZGUgIT09IC0xKSB7CiAgICAgIHRvVW5pY29kZVtjaGFyQ29kZV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHVuaWNvZGUpOwogICAgfQogIH0KICBpZiAodG9Vbmljb2RlLmxlbmd0aCA+IDApIHsKICAgIHByb3BlcnRpZXMudG9Vbmljb2RlLmFtZW5kKHRvVW5pY29kZSk7CiAgfQp9CmZ1bmN0aW9uIGFtZW5kRmFsbGJhY2tUb1VuaWNvZGUocHJvcGVydGllcykgewogIGlmICghcHJvcGVydGllcy5mYWxsYmFja1RvVW5pY29kZSkgewogICAgcmV0dXJuOwogIH0KICBpZiAocHJvcGVydGllcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBJZGVudGl0eVRvVW5pY29kZU1hcCkgewogICAgcmV0dXJuOwogIH0KICBjb25zdCB0b1VuaWNvZGUgPSBbXTsKICBmb3IgKGNvbnN0IGNoYXJDb2RlIGluIHByb3BlcnRpZXMuZmFsbGJhY2tUb1VuaWNvZGUpIHsKICAgIGlmIChwcm9wZXJ0aWVzLnRvVW5pY29kZS5oYXMoY2hhckNvZGUpKSB7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgdG9Vbmljb2RlW2NoYXJDb2RlXSA9IHByb3BlcnRpZXMuZmFsbGJhY2tUb1VuaWNvZGVbY2hhckNvZGVdOwogIH0KICBpZiAodG9Vbmljb2RlLmxlbmd0aCA+IDApIHsKICAgIHByb3BlcnRpZXMudG9Vbmljb2RlLmFtZW5kKHRvVW5pY29kZSk7CiAgfQp9CmNsYXNzIGZvbnRzX0dseXBoIHsKICBjb25zdHJ1Y3RvcihvcmlnaW5hbENoYXJDb2RlLCBmb250Q2hhciwgdW5pY29kZSwgYWNjZW50LCB3aWR0aCwgdm1ldHJpYywgb3BlcmF0b3JMaXN0SWQsIGlzU3BhY2UsIGlzSW5Gb250KSB7CiAgICB0aGlzLm9yaWdpbmFsQ2hhckNvZGUgPSBvcmlnaW5hbENoYXJDb2RlOwogICAgdGhpcy5mb250Q2hhciA9IGZvbnRDaGFyOwogICAgdGhpcy51bmljb2RlID0gdW5pY29kZTsKICAgIHRoaXMuYWNjZW50ID0gYWNjZW50OwogICAgdGhpcy53aWR0aCA9IHdpZHRoOwogICAgdGhpcy52bWV0cmljID0gdm1ldHJpYzsKICAgIHRoaXMub3BlcmF0b3JMaXN0SWQgPSBvcGVyYXRvckxpc3RJZDsKICAgIHRoaXMuaXNTcGFjZSA9IGlzU3BhY2U7CiAgICB0aGlzLmlzSW5Gb250ID0gaXNJbkZvbnQ7CiAgfQogIGdldCBjYXRlZ29yeSgpIHsKICAgIHJldHVybiBzaGFkb3codGhpcywgImNhdGVnb3J5IiwgZ2V0Q2hhclVuaWNvZGVDYXRlZ29yeSh0aGlzLnVuaWNvZGUpLCB0cnVlKTsKICB9Cn0KZnVuY3Rpb24gaW50MTYoYjAsIGIxKSB7CiAgcmV0dXJuIChiMCA8PCA4KSArIGIxOwp9CmZ1bmN0aW9uIHdyaXRlU2lnbmVkSW50MTYoYnl0ZXMsIGluZGV4LCB2YWx1ZSkgewogIGJ5dGVzW2luZGV4ICsgMV0gPSB2YWx1ZTsKICBieXRlc1tpbmRleF0gPSB2YWx1ZSA+Pj4gODsKfQpmdW5jdGlvbiBzaWduZWRJbnQxNihiMCwgYjEpIHsKICBjb25zdCB2YWx1ZSA9IChiMCA8PCA4KSArIGIxOwogIHJldHVybiB2YWx1ZSAmIDEgPDwgMTUgPyB2YWx1ZSAtIDB4MTAwMDAgOiB2YWx1ZTsKfQpmdW5jdGlvbiB3cml0ZVVpbnQzMihieXRlcywgaW5kZXgsIHZhbHVlKSB7CiAgYnl0ZXNbaW5kZXggKyAzXSA9IHZhbHVlICYgMHhmZjsKICBieXRlc1tpbmRleCArIDJdID0gdmFsdWUgPj4+IDg7CiAgYnl0ZXNbaW5kZXggKyAxXSA9IHZhbHVlID4+PiAxNjsKICBieXRlc1tpbmRleF0gPSB2YWx1ZSA+Pj4gMjQ7Cn0KZnVuY3Rpb24gaW50MzIoYjAsIGIxLCBiMiwgYjMpIHsKICByZXR1cm4gKGIwIDw8IDI0KSArIChiMSA8PCAxNikgKyAoYjIgPDwgOCkgKyBiMzsKfQpmdW5jdGlvbiBzdHJpbmcxNih2YWx1ZSkgewogIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHZhbHVlID4+IDggJiAweGZmLCB2YWx1ZSAmIDB4ZmYpOwp9CmZ1bmN0aW9uIHNhZmVTdHJpbmcxNih2YWx1ZSkgewogIGlmICh2YWx1ZSA+IDB4N2ZmZikgewogICAgdmFsdWUgPSAweDdmZmY7CiAgfSBlbHNlIGlmICh2YWx1ZSA8IC0weDgwMDApIHsKICAgIHZhbHVlID0gLTB4ODAwMDsKICB9CiAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodmFsdWUgPj4gOCAmIDB4ZmYsIHZhbHVlICYgMHhmZik7Cn0KZnVuY3Rpb24gaXNUcnVlVHlwZUZpbGUoZmlsZSkgewogIGNvbnN0IGhlYWRlciA9IGZpbGUucGVla0J5dGVzKDQpOwogIHJldHVybiByZWFkVWludDMyKGhlYWRlciwgMCkgPT09IDB4MDAwMTAwMDAgfHwgYnl0ZXNUb1N0cmluZyhoZWFkZXIpID09PSAidHJ1ZSI7Cn0KZnVuY3Rpb24gaXNUcnVlVHlwZUNvbGxlY3Rpb25GaWxlKGZpbGUpIHsKICBjb25zdCBoZWFkZXIgPSBmaWxlLnBlZWtCeXRlcyg0KTsKICByZXR1cm4gYnl0ZXNUb1N0cmluZyhoZWFkZXIpID09PSAidHRjZiI7Cn0KZnVuY3Rpb24gaXNPcGVuVHlwZUZpbGUoZmlsZSkgewogIGNvbnN0IGhlYWRlciA9IGZpbGUucGVla0J5dGVzKDQpOwogIHJldHVybiBieXRlc1RvU3RyaW5nKGhlYWRlcikgPT09ICJPVFRPIjsKfQpmdW5jdGlvbiBpc1R5cGUxRmlsZShmaWxlKSB7CiAgY29uc3QgaGVhZGVyID0gZmlsZS5wZWVrQnl0ZXMoMik7CiAgaWYgKGhlYWRlclswXSA9PT0gMHgyNSAmJiBoZWFkZXJbMV0gPT09IDB4MjEpIHsKICAgIHJldHVybiB0cnVlOwogIH0KICBpZiAoaGVhZGVyWzBdID09PSAweDgwICYmIGhlYWRlclsxXSA9PT0gMHgwMSkgewogICAgcmV0dXJuIHRydWU7CiAgfQogIHJldHVybiBmYWxzZTsKfQpmdW5jdGlvbiBpc0NGRkZpbGUoZmlsZSkgewogIGNvbnN0IGhlYWRlciA9IGZpbGUucGVla0J5dGVzKDQpOwogIGlmIChoZWFkZXJbMF0gPj0gMSAmJiBoZWFkZXJbM10gPj0gMSAmJiBoZWFkZXJbM10gPD0gNCkgewogICAgcmV0dXJuIHRydWU7CiAgfQogIHJldHVybiBmYWxzZTsKfQpmdW5jdGlvbiBnZXRGb250RmlsZVR5cGUoZmlsZSwgewogIHR5cGUsCiAgc3VidHlwZSwKICBjb21wb3NpdGUKfSkgewogIGxldCBmaWxlVHlwZSwgZmlsZVN1YnR5cGU7CiAgaWYgKGlzVHJ1ZVR5cGVGaWxlKGZpbGUpIHx8IGlzVHJ1ZVR5cGVDb2xsZWN0aW9uRmlsZShmaWxlKSkgewogICAgZmlsZVR5cGUgPSBjb21wb3NpdGUgPyAiQ0lERm9udFR5cGUyIiA6ICJUcnVlVHlwZSI7CiAgfSBlbHNlIGlmIChpc09wZW5UeXBlRmlsZShmaWxlKSkgewogICAgZmlsZVR5cGUgPSBjb21wb3NpdGUgPyAiQ0lERm9udFR5cGUyIiA6ICJPcGVuVHlwZSI7CiAgfSBlbHNlIGlmIChpc1R5cGUxRmlsZShmaWxlKSkgewogICAgaWYgKGNvbXBvc2l0ZSkgewogICAgICBmaWxlVHlwZSA9ICJDSURGb250VHlwZTAiOwogICAgfSBlbHNlIHsKICAgICAgZmlsZVR5cGUgPSB0eXBlID09PSAiTU1UeXBlMSIgPyAiTU1UeXBlMSIgOiAiVHlwZTEiOwogICAgfQogIH0gZWxzZSBpZiAoaXNDRkZGaWxlKGZpbGUpKSB7CiAgICBpZiAoY29tcG9zaXRlKSB7CiAgICAgIGZpbGVUeXBlID0gIkNJREZvbnRUeXBlMCI7CiAgICAgIGZpbGVTdWJ0eXBlID0gIkNJREZvbnRUeXBlMEMiOwogICAgfSBlbHNlIHsKICAgICAgZmlsZVR5cGUgPSB0eXBlID09PSAiTU1UeXBlMSIgPyAiTU1UeXBlMSIgOiAiVHlwZTEiOwogICAgICBmaWxlU3VidHlwZSA9ICJUeXBlMUMiOwogICAgfQogIH0gZWxzZSB7CiAgICB3YXJuKCJnZXRGb250RmlsZVR5cGU6IFVuYWJsZSB0byBkZXRlY3QgY29ycmVjdCBmb250IGZpbGUgVHlwZS9TdWJ0eXBlLiIpOwogICAgZmlsZVR5cGUgPSB0eXBlOwogICAgZmlsZVN1YnR5cGUgPSBzdWJ0eXBlOwogIH0KICByZXR1cm4gW2ZpbGVUeXBlLCBmaWxlU3VidHlwZV07Cn0KZnVuY3Rpb24gYXBwbHlTdGFuZGFyZEZvbnRHbHlwaE1hcChtYXAsIGdseXBoTWFwKSB7CiAgZm9yIChjb25zdCBjaGFyQ29kZSBpbiBnbHlwaE1hcCkgewogICAgbWFwWytjaGFyQ29kZV0gPSBnbHlwaE1hcFtjaGFyQ29kZV07CiAgfQp9CmZ1bmN0aW9uIGJ1aWxkVG9Gb250Q2hhcihlbmNvZGluZywgZ2x5cGhzVW5pY29kZU1hcCwgZGlmZmVyZW5jZXMpIHsKICBjb25zdCB0b0ZvbnRDaGFyID0gW107CiAgbGV0IHVuaWNvZGU7CiAgZm9yIChsZXQgaSA9IDAsIGlpID0gZW5jb2RpbmcubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgdW5pY29kZSA9IGdldFVuaWNvZGVGb3JHbHlwaChlbmNvZGluZ1tpXSwgZ2x5cGhzVW5pY29kZU1hcCk7CiAgICBpZiAodW5pY29kZSAhPT0gLTEpIHsKICAgICAgdG9Gb250Q2hhcltpXSA9IHVuaWNvZGU7CiAgICB9CiAgfQogIGZvciAoY29uc3QgY2hhckNvZGUgaW4gZGlmZmVyZW5jZXMpIHsKICAgIHVuaWNvZGUgPSBnZXRVbmljb2RlRm9yR2x5cGgoZGlmZmVyZW5jZXNbY2hhckNvZGVdLCBnbHlwaHNVbmljb2RlTWFwKTsKICAgIGlmICh1bmljb2RlICE9PSAtMSkgewogICAgICB0b0ZvbnRDaGFyWytjaGFyQ29kZV0gPSB1bmljb2RlOwogICAgfQogIH0KICByZXR1cm4gdG9Gb250Q2hhcjsKfQpmdW5jdGlvbiBpc01hY05hbWVSZWNvcmQocikgewogIHJldHVybiByLnBsYXRmb3JtID09PSAxICYmIHIuZW5jb2RpbmcgPT09IDAgJiYgci5sYW5ndWFnZSA9PT0gMDsKfQpmdW5jdGlvbiBpc1dpbk5hbWVSZWNvcmQocikgewogIHJldHVybiByLnBsYXRmb3JtID09PSAzICYmIHIuZW5jb2RpbmcgPT09IDEgJiYgci5sYW5ndWFnZSA9PT0gMHg0MDk7Cn0KZnVuY3Rpb24gY29udmVydENpZFN0cmluZyhjaGFyQ29kZSwgY2lkLCBzaG91bGRUaHJvdyA9IGZhbHNlKSB7CiAgc3dpdGNoIChjaWQubGVuZ3RoKSB7CiAgICBjYXNlIDE6CiAgICAgIHJldHVybiBjaWQuY2hhckNvZGVBdCgwKTsKICAgIGNhc2UgMjoKICAgICAgcmV0dXJuIGNpZC5jaGFyQ29kZUF0KDApIDw8IDggfCBjaWQuY2hhckNvZGVBdCgxKTsKICB9CiAgY29uc3QgbXNnID0gYFVuc3VwcG9ydGVkIENJRCBzdHJpbmcgKGNoYXJDb2RlICR7Y2hhckNvZGV9KTogIiR7Y2lkfSIuYDsKICBpZiAoc2hvdWxkVGhyb3cpIHsKICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcihtc2cpOwogIH0KICB3YXJuKG1zZyk7CiAgcmV0dXJuIGNpZDsKfQpmdW5jdGlvbiBhZGp1c3RNYXBwaW5nKGNoYXJDb2RlVG9HbHlwaElkLCBoYXNHbHlwaCwgbmV3R2x5cGhaZXJvSWQsIHRvVW5pY29kZSkgewogIGNvbnN0IG5ld01hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgY29uc3QgdG9Vbmljb2RlRXh0cmFNYXAgPSBuZXcgTWFwKCk7CiAgY29uc3QgdG9Gb250Q2hhciA9IFtdOwogIGNvbnN0IHVzZWRHbHlwaElkcyA9IG5ldyBTZXQoKTsKICBsZXQgcHJpdmF0ZVVzZUFyZWFJbmRleCA9IDA7CiAgY29uc3QgcHJpdmF0ZVVzZU9mZmV0U3RhcnQgPSBQUklWQVRFX1VTRV9BUkVBU1twcml2YXRlVXNlQXJlYUluZGV4XVswXTsKICBsZXQgbmV4dEF2YWlsYWJsZUZvbnRDaGFyQ29kZSA9IHByaXZhdGVVc2VPZmZldFN0YXJ0OwogIGxldCBwcml2YXRlVXNlT2ZmZXRFbmQgPSBQUklWQVRFX1VTRV9BUkVBU1twcml2YXRlVXNlQXJlYUluZGV4XVsxXTsKICBjb25zdCBpc0luUHJpdmF0ZUFyZWEgPSBjb2RlID0+IFBSSVZBVEVfVVNFX0FSRUFTWzBdWzBdIDw9IGNvZGUgJiYgY29kZSA8PSBQUklWQVRFX1VTRV9BUkVBU1swXVsxXSB8fCBQUklWQVRFX1VTRV9BUkVBU1sxXVswXSA8PSBjb2RlICYmIGNvZGUgPD0gUFJJVkFURV9VU0VfQVJFQVNbMV1bMV07CiAgbGV0IExJR0FUVVJFX1RPX1VOSUNPREUgPSBudWxsOwogIGZvciAoY29uc3Qgb3JpZ2luYWxDaGFyQ29kZSBpbiBjaGFyQ29kZVRvR2x5cGhJZCkgewogICAgbGV0IGdseXBoSWQgPSBjaGFyQ29kZVRvR2x5cGhJZFtvcmlnaW5hbENoYXJDb2RlXTsKICAgIGlmICghaGFzR2x5cGgoZ2x5cGhJZCkpIHsKICAgICAgY29udGludWU7CiAgICB9CiAgICBpZiAobmV4dEF2YWlsYWJsZUZvbnRDaGFyQ29kZSA+IHByaXZhdGVVc2VPZmZldEVuZCkgewogICAgICBwcml2YXRlVXNlQXJlYUluZGV4Kys7CiAgICAgIGlmIChwcml2YXRlVXNlQXJlYUluZGV4ID49IFBSSVZBVEVfVVNFX0FSRUFTLmxlbmd0aCkgewogICAgICAgIHdhcm4oIlJhbiBvdXQgb2Ygc3BhY2UgaW4gZm9udCBwcml2YXRlIHVzZSBhcmVhLiIpOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIG5leHRBdmFpbGFibGVGb250Q2hhckNvZGUgPSBQUklWQVRFX1VTRV9BUkVBU1twcml2YXRlVXNlQXJlYUluZGV4XVswXTsKICAgICAgcHJpdmF0ZVVzZU9mZmV0RW5kID0gUFJJVkFURV9VU0VfQVJFQVNbcHJpdmF0ZVVzZUFyZWFJbmRleF1bMV07CiAgICB9CiAgICBjb25zdCBmb250Q2hhckNvZGUgPSBuZXh0QXZhaWxhYmxlRm9udENoYXJDb2RlKys7CiAgICBpZiAoZ2x5cGhJZCA9PT0gMCkgewogICAgICBnbHlwaElkID0gbmV3R2x5cGhaZXJvSWQ7CiAgICB9CiAgICBsZXQgdW5pY29kZSA9IHRvVW5pY29kZS5nZXQob3JpZ2luYWxDaGFyQ29kZSk7CiAgICBpZiAodHlwZW9mIHVuaWNvZGUgPT09ICJzdHJpbmciKSB7CiAgICAgIGlmICh1bmljb2RlLmxlbmd0aCA9PT0gMSkgewogICAgICAgIHVuaWNvZGUgPSB1bmljb2RlLmNvZGVQb2ludEF0KDApOwogICAgICB9IGVsc2UgewogICAgICAgIGlmICghTElHQVRVUkVfVE9fVU5JQ09ERSkgewogICAgICAgICAgTElHQVRVUkVfVE9fVU5JQ09ERSA9IG5ldyBNYXAoKTsKICAgICAgICAgIGZvciAobGV0IGkgPSAweGZiMDA7IGkgPD0gMHhmYjRmOyBpKyspIHsKICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoaSkubm9ybWFsaXplKCJORktEIik7CiAgICAgICAgICAgIGlmIChub3JtYWxpemVkLmxlbmd0aCA+IDEpIHsKICAgICAgICAgICAgICBMSUdBVFVSRV9UT19VTklDT0RFLnNldChub3JtYWxpemVkLCBpKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB1bmljb2RlID0gTElHQVRVUkVfVE9fVU5JQ09ERS5nZXQodW5pY29kZSkgfHwgdW5pY29kZS5jb2RlUG9pbnRBdCgwKTsKICAgICAgfQogICAgfQogICAgaWYgKHVuaWNvZGUgJiYgIWlzSW5Qcml2YXRlQXJlYSh1bmljb2RlKSAmJiAhdXNlZEdseXBoSWRzLmhhcyhnbHlwaElkKSkgewogICAgICB0b1VuaWNvZGVFeHRyYU1hcC5zZXQodW5pY29kZSwgZ2x5cGhJZCk7CiAgICAgIHVzZWRHbHlwaElkcy5hZGQoZ2x5cGhJZCk7CiAgICB9CiAgICBuZXdNYXBbZm9udENoYXJDb2RlXSA9IGdseXBoSWQ7CiAgICB0b0ZvbnRDaGFyW29yaWdpbmFsQ2hhckNvZGVdID0gZm9udENoYXJDb2RlOwogIH0KICByZXR1cm4gewogICAgdG9Gb250Q2hhciwKICAgIGNoYXJDb2RlVG9HbHlwaElkOiBuZXdNYXAsCiAgICB0b1VuaWNvZGVFeHRyYU1hcCwKICAgIG5leHRBdmFpbGFibGVGb250Q2hhckNvZGUKICB9Owp9CmZ1bmN0aW9uIGdldFJhbmdlcyhnbHlwaHMsIHRvVW5pY29kZUV4dHJhTWFwLCBudW1HbHlwaHMpIHsKICBjb25zdCBjb2RlcyA9IFtdOwogIGZvciAoY29uc3QgY2hhckNvZGUgaW4gZ2x5cGhzKSB7CiAgICBpZiAoZ2x5cGhzW2NoYXJDb2RlXSA+PSBudW1HbHlwaHMpIHsKICAgICAgY29udGludWU7CiAgICB9CiAgICBjb2Rlcy5wdXNoKHsKICAgICAgZm9udENoYXJDb2RlOiBjaGFyQ29kZSB8IDAsCiAgICAgIGdseXBoSWQ6IGdseXBoc1tjaGFyQ29kZV0KICAgIH0pOwogIH0KICBpZiAodG9Vbmljb2RlRXh0cmFNYXApIHsKICAgIGZvciAoY29uc3QgW3VuaWNvZGUsIGdseXBoSWRdIG9mIHRvVW5pY29kZUV4dHJhTWFwKSB7CiAgICAgIGlmIChnbHlwaElkID49IG51bUdseXBocykgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGNvZGVzLnB1c2goewogICAgICAgIGZvbnRDaGFyQ29kZTogdW5pY29kZSwKICAgICAgICBnbHlwaElkCiAgICAgIH0pOwogICAgfQogIH0KICBpZiAoY29kZXMubGVuZ3RoID09PSAwKSB7CiAgICBjb2Rlcy5wdXNoKHsKICAgICAgZm9udENoYXJDb2RlOiAwLAogICAgICBnbHlwaElkOiAwCiAgICB9KTsKICB9CiAgY29kZXMuc29ydCgoYSwgYikgPT4gYS5mb250Q2hhckNvZGUgLSBiLmZvbnRDaGFyQ29kZSk7CiAgY29uc3QgcmFuZ2VzID0gW107CiAgY29uc3QgbGVuZ3RoID0gY29kZXMubGVuZ3RoOwogIGZvciAobGV0IG4gPSAwOyBuIDwgbGVuZ3RoOykgewogICAgY29uc3Qgc3RhcnQgPSBjb2Rlc1tuXS5mb250Q2hhckNvZGU7CiAgICBjb25zdCBjb2RlSW5kaWNlcyA9IFtjb2Rlc1tuXS5nbHlwaElkXTsKICAgICsrbjsKICAgIGxldCBlbmQgPSBzdGFydDsKICAgIHdoaWxlIChuIDwgbGVuZ3RoICYmIGVuZCArIDEgPT09IGNvZGVzW25dLmZvbnRDaGFyQ29kZSkgewogICAgICBjb2RlSW5kaWNlcy5wdXNoKGNvZGVzW25dLmdseXBoSWQpOwogICAgICArK2VuZDsKICAgICAgKytuOwogICAgICBpZiAoZW5kID09PSAweGZmZmYpIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgcmFuZ2VzLnB1c2goW3N0YXJ0LCBlbmQsIGNvZGVJbmRpY2VzXSk7CiAgfQogIHJldHVybiByYW5nZXM7Cn0KZnVuY3Rpb24gY3JlYXRlQ21hcFRhYmxlKGdseXBocywgdG9Vbmljb2RlRXh0cmFNYXAsIG51bUdseXBocykgewogIGNvbnN0IHJhbmdlcyA9IGdldFJhbmdlcyhnbHlwaHMsIHRvVW5pY29kZUV4dHJhTWFwLCBudW1HbHlwaHMpOwogIGNvbnN0IG51bVRhYmxlcyA9IHJhbmdlcy5hdCgtMSlbMV0gPiAweGZmZmYgPyAyIDogMTsKICBsZXQgY21hcCA9ICJceDAwXHgwMCIgKyBzdHJpbmcxNihudW1UYWJsZXMpICsgIlx4MDBceDAzIiArICJceDAwXHgwMSIgKyBzdHJpbmczMig0ICsgbnVtVGFibGVzICogOCk7CiAgbGV0IGksIGlpLCBqLCBqajsKICBmb3IgKGkgPSByYW5nZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgIGlmIChyYW5nZXNbaV1bMF0gPD0gMHhmZmZmKSB7CiAgICAgIGJyZWFrOwogICAgfQogIH0KICBjb25zdCBibXBMZW5ndGggPSBpICsgMTsKICBpZiAocmFuZ2VzW2ldWzBdIDwgMHhmZmZmICYmIHJhbmdlc1tpXVsxXSA9PT0gMHhmZmZmKSB7CiAgICByYW5nZXNbaV1bMV0gPSAweGZmZmU7CiAgfQogIGNvbnN0IHRyYWlsaW5nUmFuZ2VzQ291bnQgPSByYW5nZXNbaV1bMV0gPCAweGZmZmYgPyAxIDogMDsKICBjb25zdCBzZWdDb3VudCA9IGJtcExlbmd0aCArIHRyYWlsaW5nUmFuZ2VzQ291bnQ7CiAgY29uc3Qgc2VhcmNoUGFyYW1zID0gT3BlblR5cGVGaWxlQnVpbGRlci5nZXRTZWFyY2hQYXJhbXMoc2VnQ291bnQsIDIpOwogIGxldCBzdGFydENvdW50ID0gIiI7CiAgbGV0IGVuZENvdW50ID0gIiI7CiAgbGV0IGlkRGVsdGFzID0gIiI7CiAgbGV0IGlkUmFuZ2VPZmZzZXRzID0gIiI7CiAgbGV0IGdseXBoc0lkcyA9ICIiOwogIGxldCBiaWFzID0gMDsKICBsZXQgcmFuZ2UsIHN0YXJ0LCBlbmQsIGNvZGVzOwogIGZvciAoaSA9IDAsIGlpID0gYm1wTGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgcmFuZ2UgPSByYW5nZXNbaV07CiAgICBzdGFydCA9IHJhbmdlWzBdOwogICAgZW5kID0gcmFuZ2VbMV07CiAgICBzdGFydENvdW50ICs9IHN0cmluZzE2KHN0YXJ0KTsKICAgIGVuZENvdW50ICs9IHN0cmluZzE2KGVuZCk7CiAgICBjb2RlcyA9IHJhbmdlWzJdOwogICAgbGV0IGNvbnRpZ3VvdXMgPSB0cnVlOwogICAgZm9yIChqID0gMSwgamogPSBjb2Rlcy5sZW5ndGg7IGogPCBqajsgKytqKSB7CiAgICAgIGlmIChjb2Rlc1tqXSAhPT0gY29kZXNbaiAtIDFdICsgMSkgewogICAgICAgIGNvbnRpZ3VvdXMgPSBmYWxzZTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgaWYgKCFjb250aWd1b3VzKSB7CiAgICAgIGNvbnN0IG9mZnNldCA9IChzZWdDb3VudCAtIGkpICogMiArIGJpYXMgKiAyOwogICAgICBiaWFzICs9IGVuZCAtIHN0YXJ0ICsgMTsKICAgICAgaWREZWx0YXMgKz0gc3RyaW5nMTYoMCk7CiAgICAgIGlkUmFuZ2VPZmZzZXRzICs9IHN0cmluZzE2KG9mZnNldCk7CiAgICAgIGZvciAoaiA9IDAsIGpqID0gY29kZXMubGVuZ3RoOyBqIDwgamo7ICsraikgewogICAgICAgIGdseXBoc0lkcyArPSBzdHJpbmcxNihjb2Rlc1tqXSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0IHN0YXJ0Q29kZSA9IGNvZGVzWzBdOwogICAgICBpZERlbHRhcyArPSBzdHJpbmcxNihzdGFydENvZGUgLSBzdGFydCAmIDB4ZmZmZik7CiAgICAgIGlkUmFuZ2VPZmZzZXRzICs9IHN0cmluZzE2KDApOwogICAgfQogIH0KICBpZiAodHJhaWxpbmdSYW5nZXNDb3VudCA+IDApIHsKICAgIGVuZENvdW50ICs9ICJceEZGXHhGRiI7CiAgICBzdGFydENvdW50ICs9ICJceEZGXHhGRiI7CiAgICBpZERlbHRhcyArPSAiXHgwMFx4MDEiOwogICAgaWRSYW5nZU9mZnNldHMgKz0gIlx4MDBceDAwIjsKICB9CiAgY29uc3QgZm9ybWF0MzE0ID0gIlx4MDBceDAwIiArIHN0cmluZzE2KDIgKiBzZWdDb3VudCkgKyBzdHJpbmcxNihzZWFyY2hQYXJhbXMucmFuZ2UpICsgc3RyaW5nMTYoc2VhcmNoUGFyYW1zLmVudHJ5KSArIHN0cmluZzE2KHNlYXJjaFBhcmFtcy5yYW5nZVNoaWZ0KSArIGVuZENvdW50ICsgIlx4MDBceDAwIiArIHN0YXJ0Q291bnQgKyBpZERlbHRhcyArIGlkUmFuZ2VPZmZzZXRzICsgZ2x5cGhzSWRzOwogIGxldCBmb3JtYXQzMTAxMiA9ICIiOwogIGxldCBoZWFkZXIzMTAxMiA9ICIiOwogIGlmIChudW1UYWJsZXMgPiAxKSB7CiAgICBjbWFwICs9ICJceDAwXHgwMyIgKyAiXHgwMFx4MEEiICsgc3RyaW5nMzIoNCArIG51bVRhYmxlcyAqIDggKyA0ICsgZm9ybWF0MzE0Lmxlbmd0aCk7CiAgICBmb3JtYXQzMTAxMiA9ICIiOwogICAgZm9yIChpID0gMCwgaWkgPSByYW5nZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICByYW5nZSA9IHJhbmdlc1tpXTsKICAgICAgc3RhcnQgPSByYW5nZVswXTsKICAgICAgY29kZXMgPSByYW5nZVsyXTsKICAgICAgbGV0IGNvZGUgPSBjb2Rlc1swXTsKICAgICAgZm9yIChqID0gMSwgamogPSBjb2Rlcy5sZW5ndGg7IGogPCBqajsgKytqKSB7CiAgICAgICAgaWYgKGNvZGVzW2pdICE9PSBjb2Rlc1tqIC0gMV0gKyAxKSB7CiAgICAgICAgICBlbmQgPSByYW5nZVswXSArIGogLSAxOwogICAgICAgICAgZm9ybWF0MzEwMTIgKz0gc3RyaW5nMzIoc3RhcnQpICsgc3RyaW5nMzIoZW5kKSArIHN0cmluZzMyKGNvZGUpOwogICAgICAgICAgc3RhcnQgPSBlbmQgKyAxOwogICAgICAgICAgY29kZSA9IGNvZGVzW2pdOwogICAgICAgIH0KICAgICAgfQogICAgICBmb3JtYXQzMTAxMiArPSBzdHJpbmczMihzdGFydCkgKyBzdHJpbmczMihyYW5nZVsxXSkgKyBzdHJpbmczMihjb2RlKTsKICAgIH0KICAgIGhlYWRlcjMxMDEyID0gIlx4MDBceDBDIiArICJceDAwXHgwMCIgKyBzdHJpbmczMihmb3JtYXQzMTAxMi5sZW5ndGggKyAxNikgKyAiXHgwMFx4MDBceDAwXHgwMCIgKyBzdHJpbmczMihmb3JtYXQzMTAxMi5sZW5ndGggLyAxMik7CiAgfQogIHJldHVybiBjbWFwICsgIlx4MDBceDA0IiArIHN0cmluZzE2KGZvcm1hdDMxNC5sZW5ndGggKyA0KSArIGZvcm1hdDMxNCArIGhlYWRlcjMxMDEyICsgZm9ybWF0MzEwMTI7Cn0KZnVuY3Rpb24gdmFsaWRhdGVPUzJUYWJsZShvczIsIGZpbGUpIHsKICBmaWxlLnBvcyA9IChmaWxlLnN0YXJ0IHx8IDApICsgb3MyLm9mZnNldDsKICBjb25zdCB2ZXJzaW9uID0gZmlsZS5nZXRVaW50MTYoKTsKICBmaWxlLnNraXAoNjApOwogIGNvbnN0IHNlbGVjdGlvbiA9IGZpbGUuZ2V0VWludDE2KCk7CiAgaWYgKHZlcnNpb24gPCA0ICYmIHNlbGVjdGlvbiAmIDB4MDMwMCkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICBjb25zdCBmaXJzdENoYXIgPSBmaWxlLmdldFVpbnQxNigpOwogIGNvbnN0IGxhc3RDaGFyID0gZmlsZS5nZXRVaW50MTYoKTsKICBpZiAoZmlyc3RDaGFyID4gbGFzdENoYXIpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgZmlsZS5za2lwKDYpOwogIGNvbnN0IHVzV2luQXNjZW50ID0gZmlsZS5nZXRVaW50MTYoKTsKICBpZiAodXNXaW5Bc2NlbnQgPT09IDApIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgb3MyLmRhdGFbOF0gPSBvczIuZGF0YVs5XSA9IDA7CiAgcmV0dXJuIHRydWU7Cn0KZnVuY3Rpb24gY3JlYXRlT1MyVGFibGUocHJvcGVydGllcywgY2hhcnN0cmluZ3MsIG92ZXJyaWRlKSB7CiAgb3ZlcnJpZGUgfHw9IHsKICAgIHVuaXRzUGVyRW06IDAsCiAgICB5TWF4OiAwLAogICAgeU1pbjogMCwKICAgIGFzY2VudDogMCwKICAgIGRlc2NlbnQ6IDAKICB9OwogIGxldCB1bFVuaWNvZGVSYW5nZTEgPSAwOwogIGxldCB1bFVuaWNvZGVSYW5nZTIgPSAwOwogIGxldCB1bFVuaWNvZGVSYW5nZTMgPSAwOwogIGxldCB1bFVuaWNvZGVSYW5nZTQgPSAwOwogIGxldCBmaXJzdENoYXJJbmRleCA9IG51bGw7CiAgbGV0IGxhc3RDaGFySW5kZXggPSAwOwogIGxldCBwb3NpdGlvbiA9IC0xOwogIGlmIChjaGFyc3RyaW5ncykgewogICAgZm9yIChsZXQgY29kZSBpbiBjaGFyc3RyaW5ncykgewogICAgICBjb2RlIHw9IDA7CiAgICAgIGlmIChmaXJzdENoYXJJbmRleCA+IGNvZGUgfHwgIWZpcnN0Q2hhckluZGV4KSB7CiAgICAgICAgZmlyc3RDaGFySW5kZXggPSBjb2RlOwogICAgICB9CiAgICAgIGlmIChsYXN0Q2hhckluZGV4IDwgY29kZSkgewogICAgICAgIGxhc3RDaGFySW5kZXggPSBjb2RlOwogICAgICB9CiAgICAgIHBvc2l0aW9uID0gZ2V0VW5pY29kZVJhbmdlRm9yKGNvZGUsIHBvc2l0aW9uKTsKICAgICAgaWYgKHBvc2l0aW9uIDwgMzIpIHsKICAgICAgICB1bFVuaWNvZGVSYW5nZTEgfD0gMSA8PCBwb3NpdGlvbjsKICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbiA8IDY0KSB7CiAgICAgICAgdWxVbmljb2RlUmFuZ2UyIHw9IDEgPDwgcG9zaXRpb24gLSAzMjsKICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbiA8IDk2KSB7CiAgICAgICAgdWxVbmljb2RlUmFuZ2UzIHw9IDEgPDwgcG9zaXRpb24gLSA2NDsKICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbiA8IDEyMykgewogICAgICAgIHVsVW5pY29kZVJhbmdlNCB8PSAxIDw8IHBvc2l0aW9uIC0gOTY7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJVbmljb2RlIHJhbmdlcyBCaXRzID4gMTIzIGFyZSByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNhZ2UiKTsKICAgICAgfQogICAgfQogICAgaWYgKGxhc3RDaGFySW5kZXggPiAweGZmZmYpIHsKICAgICAgbGFzdENoYXJJbmRleCA9IDB4ZmZmZjsKICAgIH0KICB9IGVsc2UgewogICAgZmlyc3RDaGFySW5kZXggPSAwOwogICAgbGFzdENoYXJJbmRleCA9IDI1NTsKICB9CiAgY29uc3QgYmJveCA9IHByb3BlcnRpZXMuYmJveCB8fCBbMCwgMCwgMCwgMF07CiAgY29uc3QgdW5pdHNQZXJFbSA9IG92ZXJyaWRlLnVuaXRzUGVyRW0gfHwgKHByb3BlcnRpZXMuZm9udE1hdHJpeCA/IDEgLyBNYXRoLm1heCguLi5wcm9wZXJ0aWVzLmZvbnRNYXRyaXguc2xpY2UoMCwgNCkubWFwKE1hdGguYWJzKSkgOiAxMDAwKTsKICBjb25zdCBzY2FsZSA9IHByb3BlcnRpZXMuYXNjZW50U2NhbGVkID8gMS4wIDogdW5pdHNQZXJFbSAvIFBERl9HTFlQSF9TUEFDRV9VTklUUzsKICBjb25zdCB0eXBvQXNjZW50ID0gb3ZlcnJpZGUuYXNjZW50IHx8IE1hdGgucm91bmQoc2NhbGUgKiAocHJvcGVydGllcy5hc2NlbnQgfHwgYmJveFszXSkpOwogIGxldCB0eXBvRGVzY2VudCA9IG92ZXJyaWRlLmRlc2NlbnQgfHwgTWF0aC5yb3VuZChzY2FsZSAqIChwcm9wZXJ0aWVzLmRlc2NlbnQgfHwgYmJveFsxXSkpOwogIGlmICh0eXBvRGVzY2VudCA+IDAgJiYgcHJvcGVydGllcy5kZXNjZW50ID4gMCAmJiBiYm94WzFdIDwgMCkgewogICAgdHlwb0Rlc2NlbnQgPSAtdHlwb0Rlc2NlbnQ7CiAgfQogIGNvbnN0IHdpbkFzY2VudCA9IG92ZXJyaWRlLnlNYXggfHwgdHlwb0FzY2VudDsKICBjb25zdCB3aW5EZXNjZW50ID0gLW92ZXJyaWRlLnlNaW4gfHwgLXR5cG9EZXNjZW50OwogIHJldHVybiAiXHgwMFx4MDMiICsgIlx4MDJceDI0IiArICJceDAxXHhGNCIgKyAiXHgwMFx4MDUiICsgIlx4MDBceDAwIiArICJceDAyXHg4QSIgKyAiXHgwMlx4QkIiICsgIlx4MDBceDAwIiArICJceDAwXHg4QyIgKyAiXHgwMlx4OEEiICsgIlx4MDJceEJCIiArICJceDAwXHgwMCIgKyAiXHgwMVx4REYiICsgIlx4MDBceDMxIiArICJceDAxXHgwMiIgKyAiXHgwMFx4MDAiICsgIlx4MDBceDAwXHgwNiIgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKHByb3BlcnRpZXMuZml4ZWRQaXRjaCA/IDB4MDkgOiAweDAwKSArICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiICsgc3RyaW5nMzIodWxVbmljb2RlUmFuZ2UxKSArIHN0cmluZzMyKHVsVW5pY29kZVJhbmdlMikgKyBzdHJpbmczMih1bFVuaWNvZGVSYW5nZTMpICsgc3RyaW5nMzIodWxVbmljb2RlUmFuZ2U0KSArICJceDJBXHgzMlx4MzFceDJBIiArIHN0cmluZzE2KHByb3BlcnRpZXMuaXRhbGljQW5nbGUgPyAxIDogMCkgKyBzdHJpbmcxNihmaXJzdENoYXJJbmRleCB8fCBwcm9wZXJ0aWVzLmZpcnN0Q2hhcikgKyBzdHJpbmcxNihsYXN0Q2hhckluZGV4IHx8IHByb3BlcnRpZXMubGFzdENoYXIpICsgc3RyaW5nMTYodHlwb0FzY2VudCkgKyBzdHJpbmcxNih0eXBvRGVzY2VudCkgKyAiXHgwMFx4NjQiICsgc3RyaW5nMTYod2luQXNjZW50KSArIHN0cmluZzE2KHdpbkRlc2NlbnQpICsgIlx4MDBceDAwXHgwMFx4MDAiICsgIlx4MDBceDAwXHgwMFx4MDAiICsgc3RyaW5nMTYocHJvcGVydGllcy54SGVpZ2h0KSArIHN0cmluZzE2KHByb3BlcnRpZXMuY2FwSGVpZ2h0KSArIHN0cmluZzE2KDApICsgc3RyaW5nMTYoZmlyc3RDaGFySW5kZXggfHwgcHJvcGVydGllcy5maXJzdENoYXIpICsgIlx4MDBceDAzIjsKfQpmdW5jdGlvbiBjcmVhdGVQb3N0VGFibGUocHJvcGVydGllcykgewogIGNvbnN0IGFuZ2xlID0gTWF0aC5mbG9vcihwcm9wZXJ0aWVzLml0YWxpY0FuZ2xlICogMiAqKiAxNik7CiAgcmV0dXJuICJceDAwXHgwM1x4MDBceDAwIiArIHN0cmluZzMyKGFuZ2xlKSArICJceDAwXHgwMCIgKyAiXHgwMFx4MDAiICsgc3RyaW5nMzIocHJvcGVydGllcy5maXhlZFBpdGNoID8gMSA6IDApICsgIlx4MDBceDAwXHgwMFx4MDAiICsgIlx4MDBceDAwXHgwMFx4MDAiICsgIlx4MDBceDAwXHgwMFx4MDAiICsgIlx4MDBceDAwXHgwMFx4MDAiOwp9CmZ1bmN0aW9uIGNyZWF0ZVBvc3RzY3JpcHROYW1lKG5hbWUpIHsKICByZXR1cm4gbmFtZS5yZXBsYWNlQWxsKC9bXlx4MjEtXHg3RV18W1tcXSgpe308Pi8lXS9nLCAiIikuc2xpY2UoMCwgNjMpOwp9CmZ1bmN0aW9uIGNyZWF0ZU5hbWVUYWJsZShuYW1lLCBwcm90bykgewogIGlmICghcHJvdG8pIHsKICAgIHByb3RvID0gW1tdLCBbXV07CiAgfQogIGNvbnN0IHN0cmluZ3MgPSBbcHJvdG9bMF1bMF0gfHwgIk9yaWdpbmFsIGxpY2VuY2UiLCBwcm90b1swXVsxXSB8fCBuYW1lLCBwcm90b1swXVsyXSB8fCAiVW5rbm93biIsIHByb3RvWzBdWzNdIHx8ICJ1bmlxdWVJRCIsIHByb3RvWzBdWzRdIHx8IG5hbWUsIHByb3RvWzBdWzVdIHx8ICJWZXJzaW9uIDAuMTEiLCBwcm90b1swXVs2XSB8fCBjcmVhdGVQb3N0c2NyaXB0TmFtZShuYW1lKSwgcHJvdG9bMF1bN10gfHwgIlVua25vd24iLCBwcm90b1swXVs4XSB8fCAiVW5rbm93biIsIHByb3RvWzBdWzldIHx8ICJVbmtub3duIl07CiAgY29uc3Qgc3RyaW5nc1VuaWNvZGUgPSBbXTsKICBsZXQgaSwgaWksIGosIGpqLCBzdHI7CiAgZm9yIChpID0gMCwgaWkgPSBzdHJpbmdzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgIHN0ciA9IHByb3RvWzFdW2ldIHx8IHN0cmluZ3NbaV07CiAgICBjb25zdCBzdHJCdWZVbmljb2RlID0gW107CiAgICBmb3IgKGogPSAwLCBqaiA9IHN0ci5sZW5ndGg7IGogPCBqajsgaisrKSB7CiAgICAgIHN0ckJ1ZlVuaWNvZGUucHVzaChzdHJpbmcxNihzdHIuY2hhckNvZGVBdChqKSkpOwogICAgfQogICAgc3RyaW5nc1VuaWNvZGUucHVzaChzdHJCdWZVbmljb2RlLmpvaW4oIiIpKTsKICB9CiAgY29uc3QgbmFtZXMgPSBbc3RyaW5ncywgc3RyaW5nc1VuaWNvZGVdOwogIGNvbnN0IHBsYXRmb3JtcyA9IFsiXHgwMFx4MDEiLCAiXHgwMFx4MDMiXTsKICBjb25zdCBlbmNvZGluZ3MgPSBbIlx4MDBceDAwIiwgIlx4MDBceDAxIl07CiAgY29uc3QgbGFuZ3VhZ2VzID0gWyJceDAwXHgwMCIsICJceDA0XHgwOSJdOwogIGNvbnN0IG5hbWVzUmVjb3JkQ291bnQgPSBzdHJpbmdzLmxlbmd0aCAqIHBsYXRmb3Jtcy5sZW5ndGg7CiAgbGV0IG5hbWVUYWJsZSA9ICJceDAwXHgwMCIgKyBzdHJpbmcxNihuYW1lc1JlY29yZENvdW50KSArIHN0cmluZzE2KG5hbWVzUmVjb3JkQ291bnQgKiAxMiArIDYpOwogIGxldCBzdHJPZmZzZXQgPSAwOwogIGZvciAoaSA9IDAsIGlpID0gcGxhdGZvcm1zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgIGNvbnN0IHN0cnMgPSBuYW1lc1tpXTsKICAgIGZvciAoaiA9IDAsIGpqID0gc3Rycy5sZW5ndGg7IGogPCBqajsgaisrKSB7CiAgICAgIHN0ciA9IHN0cnNbal07CiAgICAgIGNvbnN0IG5hbWVSZWNvcmQgPSBwbGF0Zm9ybXNbaV0gKyBlbmNvZGluZ3NbaV0gKyBsYW5ndWFnZXNbaV0gKyBzdHJpbmcxNihqKSArIHN0cmluZzE2KHN0ci5sZW5ndGgpICsgc3RyaW5nMTYoc3RyT2Zmc2V0KTsKICAgICAgbmFtZVRhYmxlICs9IG5hbWVSZWNvcmQ7CiAgICAgIHN0ck9mZnNldCArPSBzdHIubGVuZ3RoOwogICAgfQogIH0KICBuYW1lVGFibGUgKz0gc3RyaW5ncy5qb2luKCIiKSArIHN0cmluZ3NVbmljb2RlLmpvaW4oIiIpOwogIHJldHVybiBuYW1lVGFibGU7Cn0KY2xhc3MgRm9udCB7CiAgY29uc3RydWN0b3IobmFtZSwgZmlsZSwgcHJvcGVydGllcywgZXZhbHVhdG9yT3B0aW9ucykgewogICAgdGhpcy5uYW1lID0gbmFtZTsKICAgIHRoaXMucHNOYW1lID0gbnVsbDsKICAgIHRoaXMubWltZXR5cGUgPSBudWxsOwogICAgdGhpcy5kaXNhYmxlRm9udEZhY2UgPSBldmFsdWF0b3JPcHRpb25zLmRpc2FibGVGb250RmFjZTsKICAgIHRoaXMuZm9udEV4dHJhUHJvcGVydGllcyA9IGV2YWx1YXRvck9wdGlvbnMuZm9udEV4dHJhUHJvcGVydGllczsKICAgIHRoaXMubG9hZGVkTmFtZSA9IHByb3BlcnRpZXMubG9hZGVkTmFtZTsKICAgIHRoaXMuaXNUeXBlM0ZvbnQgPSBwcm9wZXJ0aWVzLmlzVHlwZTNGb250OwogICAgdGhpcy5taXNzaW5nRmlsZSA9IGZhbHNlOwogICAgdGhpcy5jc3NGb250SW5mbyA9IHByb3BlcnRpZXMuY3NzRm9udEluZm87CiAgICB0aGlzLl9jaGFyc0NhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgIHRoaXMuX2dseXBoQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgbGV0IGlzU2VyaWZGb250ID0gISEocHJvcGVydGllcy5mbGFncyAmIEZvbnRGbGFncy5TZXJpZik7CiAgICBpZiAoIWlzU2VyaWZGb250ICYmICFwcm9wZXJ0aWVzLmlzU2ltdWxhdGVkRmxhZ3MpIHsKICAgICAgY29uc3QgYmFzZU5hbWUgPSBuYW1lLnJlcGxhY2VBbGwoL1ssX10vZywgIi0iKS5zcGxpdCgiLSIsIDEpWzBdLAogICAgICAgIHNlcmlmRm9udHMgPSBnZXRTZXJpZkZvbnRzKCk7CiAgICAgIGZvciAoY29uc3QgbmFtZVBhcnQgb2YgYmFzZU5hbWUuc3BsaXQoIisiKSkgewogICAgICAgIGlmIChzZXJpZkZvbnRzW25hbWVQYXJ0XSkgewogICAgICAgICAgaXNTZXJpZkZvbnQgPSB0cnVlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICB0aGlzLmlzU2VyaWZGb250ID0gaXNTZXJpZkZvbnQ7CiAgICB0aGlzLmlzU3ltYm9saWNGb250ID0gISEocHJvcGVydGllcy5mbGFncyAmIEZvbnRGbGFncy5TeW1ib2xpYyk7CiAgICB0aGlzLmlzTW9ub3NwYWNlID0gISEocHJvcGVydGllcy5mbGFncyAmIEZvbnRGbGFncy5GaXhlZFBpdGNoKTsKICAgIGxldCB7CiAgICAgIHR5cGUsCiAgICAgIHN1YnR5cGUKICAgIH0gPSBwcm9wZXJ0aWVzOwogICAgdGhpcy50eXBlID0gdHlwZTsKICAgIHRoaXMuc3VidHlwZSA9IHN1YnR5cGU7CiAgICB0aGlzLnN5c3RlbUZvbnRJbmZvID0gcHJvcGVydGllcy5zeXN0ZW1Gb250SW5mbzsKICAgIGNvbnN0IG1hdGNoZXMgPSBuYW1lLm1hdGNoKC9eSW52YWxpZFBERmpzRm9udF8oLiopX1xkKyQvKTsKICAgIHRoaXMuaXNJbnZhbGlkUERGanNGb250ID0gISFtYXRjaGVzOwogICAgaWYgKHRoaXMuaXNJbnZhbGlkUERGanNGb250KSB7CiAgICAgIHRoaXMuZmFsbGJhY2tOYW1lID0gbWF0Y2hlc1sxXTsKICAgIH0gZWxzZSBpZiAodGhpcy5pc01vbm9zcGFjZSkgewogICAgICB0aGlzLmZhbGxiYWNrTmFtZSA9ICJtb25vc3BhY2UiOwogICAgfSBlbHNlIGlmICh0aGlzLmlzU2VyaWZGb250KSB7CiAgICAgIHRoaXMuZmFsbGJhY2tOYW1lID0gInNlcmlmIjsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuZmFsbGJhY2tOYW1lID0gInNhbnMtc2VyaWYiOwogICAgfQogICAgaWYgKHRoaXMuc3lzdGVtRm9udEluZm8/Lmd1ZXNzRmFsbGJhY2spIHsKICAgICAgdGhpcy5zeXN0ZW1Gb250SW5mby5ndWVzc0ZhbGxiYWNrID0gZmFsc2U7CiAgICAgIHRoaXMuc3lzdGVtRm9udEluZm8uY3NzICs9IGAsJHt0aGlzLmZhbGxiYWNrTmFtZX1gOwogICAgfQogICAgdGhpcy5kaWZmZXJlbmNlcyA9IHByb3BlcnRpZXMuZGlmZmVyZW5jZXM7CiAgICB0aGlzLndpZHRocyA9IHByb3BlcnRpZXMud2lkdGhzOwogICAgdGhpcy5kZWZhdWx0V2lkdGggPSBwcm9wZXJ0aWVzLmRlZmF1bHRXaWR0aDsKICAgIHRoaXMuY29tcG9zaXRlID0gcHJvcGVydGllcy5jb21wb3NpdGU7CiAgICB0aGlzLmNNYXAgPSBwcm9wZXJ0aWVzLmNNYXA7CiAgICB0aGlzLmNhcEhlaWdodCA9IHByb3BlcnRpZXMuY2FwSGVpZ2h0IC8gUERGX0dMWVBIX1NQQUNFX1VOSVRTOwogICAgdGhpcy5hc2NlbnQgPSBwcm9wZXJ0aWVzLmFzY2VudCAvIFBERl9HTFlQSF9TUEFDRV9VTklUUzsKICAgIHRoaXMuZGVzY2VudCA9IHByb3BlcnRpZXMuZGVzY2VudCAvIFBERl9HTFlQSF9TUEFDRV9VTklUUzsKICAgIHRoaXMubGluZUhlaWdodCA9IHRoaXMuYXNjZW50IC0gdGhpcy5kZXNjZW50OwogICAgdGhpcy5mb250TWF0cml4ID0gcHJvcGVydGllcy5mb250TWF0cml4OwogICAgdGhpcy5iYm94ID0gcHJvcGVydGllcy5iYm94OwogICAgdGhpcy5kZWZhdWx0RW5jb2RpbmcgPSBwcm9wZXJ0aWVzLmRlZmF1bHRFbmNvZGluZzsKICAgIHRoaXMudG9Vbmljb2RlID0gcHJvcGVydGllcy50b1VuaWNvZGU7CiAgICB0aGlzLnRvRm9udENoYXIgPSBbXTsKICAgIGlmIChwcm9wZXJ0aWVzLnR5cGUgPT09ICJUeXBlMyIpIHsKICAgICAgZm9yIChsZXQgY2hhckNvZGUgPSAwOyBjaGFyQ29kZSA8IDI1NjsgY2hhckNvZGUrKykgewogICAgICAgIHRoaXMudG9Gb250Q2hhcltjaGFyQ29kZV0gPSB0aGlzLmRpZmZlcmVuY2VzW2NoYXJDb2RlXSB8fCBwcm9wZXJ0aWVzLmRlZmF1bHRFbmNvZGluZ1tjaGFyQ29kZV07CiAgICAgIH0KICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy5jaWRFbmNvZGluZyA9IHByb3BlcnRpZXMuY2lkRW5jb2RpbmcgfHwgIiI7CiAgICB0aGlzLnZlcnRpY2FsID0gISFwcm9wZXJ0aWVzLnZlcnRpY2FsOwogICAgaWYgKHRoaXMudmVydGljYWwpIHsKICAgICAgdGhpcy52bWV0cmljcyA9IHByb3BlcnRpZXMudm1ldHJpY3M7CiAgICAgIHRoaXMuZGVmYXVsdFZNZXRyaWNzID0gcHJvcGVydGllcy5kZWZhdWx0Vk1ldHJpY3M7CiAgICB9CiAgICBpZiAoIWZpbGUgfHwgZmlsZS5pc0VtcHR5KSB7CiAgICAgIGlmIChmaWxlKSB7CiAgICAgICAgd2FybignRm9udCBmaWxlIGlzIGVtcHR5IGluICInICsgbmFtZSArICciICgnICsgdGhpcy5sb2FkZWROYW1lICsgIikiKTsKICAgICAgfQogICAgICB0aGlzLmZhbGxiYWNrVG9TeXN0ZW1Gb250KHByb3BlcnRpZXMpOwogICAgICByZXR1cm47CiAgICB9CiAgICBbdHlwZSwgc3VidHlwZV0gPSBnZXRGb250RmlsZVR5cGUoZmlsZSwgcHJvcGVydGllcyk7CiAgICBpZiAodHlwZSAhPT0gdGhpcy50eXBlIHx8IHN1YnR5cGUgIT09IHRoaXMuc3VidHlwZSkgewogICAgICBpbmZvKCJJbmNvbnNpc3RlbnQgZm9udCBmaWxlIFR5cGUvU3ViVHlwZSwgZXhwZWN0ZWQ6ICIgKyBgJHt0aGlzLnR5cGV9LyR7dGhpcy5zdWJ0eXBlfSBidXQgZm91bmQ6ICR7dHlwZX0vJHtzdWJ0eXBlfS5gKTsKICAgIH0KICAgIGxldCBkYXRhOwogICAgdHJ5IHsKICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgY2FzZSAiTU1UeXBlMSI6CiAgICAgICAgICBpbmZvKCJNTVR5cGUxIGZvbnQgKCIgKyBuYW1lICsgIiksIGZhbGxpbmcgYmFjayB0byBUeXBlMS4iKTsKICAgICAgICBjYXNlICJUeXBlMSI6CiAgICAgICAgY2FzZSAiQ0lERm9udFR5cGUwIjoKICAgICAgICAgIHRoaXMubWltZXR5cGUgPSAiZm9udC9vcGVudHlwZSI7CiAgICAgICAgICBjb25zdCBjZmYgPSBzdWJ0eXBlID09PSAiVHlwZTFDIiB8fCBzdWJ0eXBlID09PSAiQ0lERm9udFR5cGUwQyIgPyBuZXcgQ0ZGRm9udChmaWxlLCBwcm9wZXJ0aWVzKSA6IG5ldyBUeXBlMUZvbnQobmFtZSwgZmlsZSwgcHJvcGVydGllcyk7CiAgICAgICAgICBhZGp1c3RXaWR0aHMocHJvcGVydGllcyk7CiAgICAgICAgICBkYXRhID0gdGhpcy5jb252ZXJ0KG5hbWUsIGNmZiwgcHJvcGVydGllcyk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJPcGVuVHlwZSI6CiAgICAgICAgY2FzZSAiVHJ1ZVR5cGUiOgogICAgICAgIGNhc2UgIkNJREZvbnRUeXBlMiI6CiAgICAgICAgICB0aGlzLm1pbWV0eXBlID0gImZvbnQvb3BlbnR5cGUiOwogICAgICAgICAgZGF0YSA9IHRoaXMuY2hlY2tBbmRSZXBhaXIobmFtZSwgZmlsZSwgcHJvcGVydGllcyk7CiAgICAgICAgICBpZiAodGhpcy5pc09wZW5UeXBlKSB7CiAgICAgICAgICAgIGFkanVzdFdpZHRocyhwcm9wZXJ0aWVzKTsKICAgICAgICAgICAgdHlwZSA9ICJPcGVuVHlwZSI7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBGb250ICR7dHlwZX0gaXMgbm90IHN1cHBvcnRlZGApOwogICAgICB9CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHdhcm4oZSk7CiAgICAgIHRoaXMuZmFsbGJhY2tUb1N5c3RlbUZvbnQocHJvcGVydGllcyk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGFtZW5kRmFsbGJhY2tUb1VuaWNvZGUocHJvcGVydGllcyk7CiAgICB0aGlzLmRhdGEgPSBkYXRhOwogICAgdGhpcy50eXBlID0gdHlwZTsKICAgIHRoaXMuc3VidHlwZSA9IHN1YnR5cGU7CiAgICB0aGlzLmZvbnRNYXRyaXggPSBwcm9wZXJ0aWVzLmZvbnRNYXRyaXg7CiAgICB0aGlzLndpZHRocyA9IHByb3BlcnRpZXMud2lkdGhzOwogICAgdGhpcy5kZWZhdWx0V2lkdGggPSBwcm9wZXJ0aWVzLmRlZmF1bHRXaWR0aDsKICAgIHRoaXMudG9Vbmljb2RlID0gcHJvcGVydGllcy50b1VuaWNvZGU7CiAgICB0aGlzLnNlYWNNYXAgPSBwcm9wZXJ0aWVzLnNlYWNNYXA7CiAgfQogIGdldCByZW5kZXJlcigpIHsKICAgIGNvbnN0IHJlbmRlcmVyID0gRm9udFJlbmRlcmVyRmFjdG9yeS5jcmVhdGUodGhpcywgU0VBQ19BTkFMWVNJU19FTkFCTEVEKTsKICAgIHJldHVybiBzaGFkb3codGhpcywgInJlbmRlcmVyIiwgcmVuZGVyZXIpOwogIH0KICBleHBvcnREYXRhKCkgewogICAgY29uc3QgZXhwb3J0RGF0YVByb3BzID0gdGhpcy5mb250RXh0cmFQcm9wZXJ0aWVzID8gWy4uLkVYUE9SVF9EQVRBX1BST1BFUlRJRVMsIC4uLkVYUE9SVF9EQVRBX0VYVFJBX1BST1BFUlRJRVNdIDogRVhQT1JUX0RBVEFfUFJPUEVSVElFUzsKICAgIGNvbnN0IGRhdGEgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgZm9yIChjb25zdCBwcm9wIG9mIGV4cG9ydERhdGFQcm9wcykgewogICAgICBjb25zdCB2YWx1ZSA9IHRoaXNbcHJvcF07CiAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgZGF0YVtwcm9wXSA9IHZhbHVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZGF0YTsKICB9CiAgZmFsbGJhY2tUb1N5c3RlbUZvbnQocHJvcGVydGllcykgewogICAgdGhpcy5taXNzaW5nRmlsZSA9IHRydWU7CiAgICBjb25zdCB7CiAgICAgIG5hbWUsCiAgICAgIHR5cGUKICAgIH0gPSB0aGlzOwogICAgbGV0IGZvbnROYW1lID0gbm9ybWFsaXplRm9udE5hbWUobmFtZSk7CiAgICBjb25zdCBzdGRGb250TWFwID0gZ2V0U3RkRm9udE1hcCgpLAogICAgICBub25TdGRGb250TWFwID0gZ2V0Tm9uU3RkRm9udE1hcCgpOwogICAgY29uc3QgaXNTdGFuZGFyZEZvbnQgPSAhIXN0ZEZvbnRNYXBbZm9udE5hbWVdOwogICAgY29uc3QgaXNNYXBwZWRUb1N0YW5kYXJkRm9udCA9ICEhKG5vblN0ZEZvbnRNYXBbZm9udE5hbWVdICYmIHN0ZEZvbnRNYXBbbm9uU3RkRm9udE1hcFtmb250TmFtZV1dKTsKICAgIGZvbnROYW1lID0gc3RkRm9udE1hcFtmb250TmFtZV0gfHwgbm9uU3RkRm9udE1hcFtmb250TmFtZV0gfHwgZm9udE5hbWU7CiAgICBjb25zdCBmb250QmFzaWNNZXRyaWNzTWFwID0gZ2V0Rm9udEJhc2ljTWV0cmljcygpOwogICAgY29uc3QgbWV0cmljcyA9IGZvbnRCYXNpY01ldHJpY3NNYXBbZm9udE5hbWVdOwogICAgaWYgKG1ldHJpY3MpIHsKICAgICAgaWYgKGlzTmFOKHRoaXMuYXNjZW50KSkgewogICAgICAgIHRoaXMuYXNjZW50ID0gbWV0cmljcy5hc2NlbnQgLyBQREZfR0xZUEhfU1BBQ0VfVU5JVFM7CiAgICAgIH0KICAgICAgaWYgKGlzTmFOKHRoaXMuZGVzY2VudCkpIHsKICAgICAgICB0aGlzLmRlc2NlbnQgPSBtZXRyaWNzLmRlc2NlbnQgLyBQREZfR0xZUEhfU1BBQ0VfVU5JVFM7CiAgICAgIH0KICAgICAgaWYgKGlzTmFOKHRoaXMuY2FwSGVpZ2h0KSkgewogICAgICAgIHRoaXMuY2FwSGVpZ2h0ID0gbWV0cmljcy5jYXBIZWlnaHQgLyBQREZfR0xZUEhfU1BBQ0VfVU5JVFM7CiAgICAgIH0KICAgIH0KICAgIHRoaXMuYm9sZCA9IC9ib2xkL2dpLnRlc3QoZm9udE5hbWUpOwogICAgdGhpcy5pdGFsaWMgPSAvb2JsaXF1ZXxpdGFsaWMvZ2kudGVzdChmb250TmFtZSk7CiAgICB0aGlzLmJsYWNrID0gL0JsYWNrL2cudGVzdChuYW1lKTsKICAgIGNvbnN0IGlzTmFycm93ID0gL05hcnJvdy9nLnRlc3QobmFtZSk7CiAgICB0aGlzLnJlbWVhc3VyZSA9ICghaXNTdGFuZGFyZEZvbnQgfHwgaXNOYXJyb3cpICYmIE9iamVjdC5rZXlzKHRoaXMud2lkdGhzKS5sZW5ndGggPiAwOwogICAgaWYgKChpc1N0YW5kYXJkRm9udCB8fCBpc01hcHBlZFRvU3RhbmRhcmRGb250KSAmJiB0eXBlID09PSAiQ0lERm9udFR5cGUyIiAmJiB0aGlzLmNpZEVuY29kaW5nLnN0YXJ0c1dpdGgoIklkZW50aXR5LSIpKSB7CiAgICAgIGNvbnN0IGNpZFRvR2lkTWFwID0gcHJvcGVydGllcy5jaWRUb0dpZE1hcDsKICAgICAgY29uc3QgbWFwID0gW107CiAgICAgIGFwcGx5U3RhbmRhcmRGb250R2x5cGhNYXAobWFwLCBnZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHMoKSk7CiAgICAgIGlmICgvQXJpYWwtP0JsYWNrL2kudGVzdChuYW1lKSkgewogICAgICAgIGFwcGx5U3RhbmRhcmRGb250R2x5cGhNYXAobWFwLCBnZXRTdXBwbGVtZW50YWxHbHlwaE1hcEZvckFyaWFsQmxhY2soKSk7CiAgICAgIH0gZWxzZSBpZiAoL0NhbGlicmkvaS50ZXN0KG5hbWUpKSB7CiAgICAgICAgYXBwbHlTdGFuZGFyZEZvbnRHbHlwaE1hcChtYXAsIGdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaSgpKTsKICAgICAgfQogICAgICBpZiAoY2lkVG9HaWRNYXApIHsKICAgICAgICBmb3IgKGNvbnN0IGNoYXJDb2RlIGluIG1hcCkgewogICAgICAgICAgY29uc3QgY2lkID0gbWFwW2NoYXJDb2RlXTsKICAgICAgICAgIGlmIChjaWRUb0dpZE1hcFtjaWRdICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgbWFwWytjaGFyQ29kZV0gPSBjaWRUb0dpZE1hcFtjaWRdOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoY2lkVG9HaWRNYXAubGVuZ3RoICE9PSB0aGlzLnRvVW5pY29kZS5sZW5ndGggJiYgcHJvcGVydGllcy5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcCAmJiB0aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIElkZW50aXR5VG9Vbmljb2RlTWFwKSB7CiAgICAgICAgICB0aGlzLnRvVW5pY29kZS5mb3JFYWNoKGZ1bmN0aW9uIChjaGFyQ29kZSwgdW5pY29kZUNoYXJDb2RlKSB7CiAgICAgICAgICAgIGNvbnN0IGNpZCA9IG1hcFtjaGFyQ29kZV07CiAgICAgICAgICAgIGlmIChjaWRUb0dpZE1hcFtjaWRdID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICBtYXBbK2NoYXJDb2RlXSA9IHVuaWNvZGVDaGFyQ29kZTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICghKHRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgSWRlbnRpdHlUb1VuaWNvZGVNYXApKSB7CiAgICAgICAgdGhpcy50b1VuaWNvZGUuZm9yRWFjaChmdW5jdGlvbiAoY2hhckNvZGUsIHVuaWNvZGVDaGFyQ29kZSkgewogICAgICAgICAgbWFwWytjaGFyQ29kZV0gPSB1bmljb2RlQ2hhckNvZGU7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgdGhpcy50b0ZvbnRDaGFyID0gbWFwOwogICAgICB0aGlzLnRvVW5pY29kZSA9IG5ldyBUb1VuaWNvZGVNYXAobWFwKTsKICAgIH0gZWxzZSBpZiAoL1N5bWJvbC9pLnRlc3QoZm9udE5hbWUpKSB7CiAgICAgIHRoaXMudG9Gb250Q2hhciA9IGJ1aWxkVG9Gb250Q2hhcihTeW1ib2xTZXRFbmNvZGluZywgZ2V0R2x5cGhzVW5pY29kZSgpLCB0aGlzLmRpZmZlcmVuY2VzKTsKICAgIH0gZWxzZSBpZiAoL0RpbmdiYXRzL2kudGVzdChmb250TmFtZSkpIHsKICAgICAgdGhpcy50b0ZvbnRDaGFyID0gYnVpbGRUb0ZvbnRDaGFyKFphcGZEaW5nYmF0c0VuY29kaW5nLCBnZXREaW5nYmF0c0dseXBoc1VuaWNvZGUoKSwgdGhpcy5kaWZmZXJlbmNlcyk7CiAgICB9IGVsc2UgaWYgKGlzU3RhbmRhcmRGb250IHx8IGlzTWFwcGVkVG9TdGFuZGFyZEZvbnQpIHsKICAgICAgY29uc3QgbWFwID0gYnVpbGRUb0ZvbnRDaGFyKHRoaXMuZGVmYXVsdEVuY29kaW5nLCBnZXRHbHlwaHNVbmljb2RlKCksIHRoaXMuZGlmZmVyZW5jZXMpOwogICAgICBpZiAodHlwZSA9PT0gIkNJREZvbnRUeXBlMiIgJiYgIXRoaXMuY2lkRW5jb2Rpbmcuc3RhcnRzV2l0aCgiSWRlbnRpdHktIikgJiYgISh0aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIElkZW50aXR5VG9Vbmljb2RlTWFwKSkgewogICAgICAgIHRoaXMudG9Vbmljb2RlLmZvckVhY2goZnVuY3Rpb24gKGNoYXJDb2RlLCB1bmljb2RlQ2hhckNvZGUpIHsKICAgICAgICAgIG1hcFsrY2hhckNvZGVdID0gdW5pY29kZUNoYXJDb2RlOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIHRoaXMudG9Gb250Q2hhciA9IG1hcDsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0IGdseXBoc1VuaWNvZGVNYXAgPSBnZXRHbHlwaHNVbmljb2RlKCk7CiAgICAgIGNvbnN0IG1hcCA9IFtdOwogICAgICB0aGlzLnRvVW5pY29kZS5mb3JFYWNoKChjaGFyQ29kZSwgdW5pY29kZUNoYXJDb2RlKSA9PiB7CiAgICAgICAgaWYgKCF0aGlzLmNvbXBvc2l0ZSkgewogICAgICAgICAgY29uc3QgZ2x5cGhOYW1lID0gdGhpcy5kaWZmZXJlbmNlc1tjaGFyQ29kZV0gfHwgdGhpcy5kZWZhdWx0RW5jb2RpbmdbY2hhckNvZGVdOwogICAgICAgICAgY29uc3QgdW5pY29kZSA9IGdldFVuaWNvZGVGb3JHbHlwaChnbHlwaE5hbWUsIGdseXBoc1VuaWNvZGVNYXApOwogICAgICAgICAgaWYgKHVuaWNvZGUgIT09IC0xKSB7CiAgICAgICAgICAgIHVuaWNvZGVDaGFyQ29kZSA9IHVuaWNvZGU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIG1hcFsrY2hhckNvZGVdID0gdW5pY29kZUNoYXJDb2RlOwogICAgICB9KTsKICAgICAgaWYgKHRoaXMuY29tcG9zaXRlICYmIHRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgSWRlbnRpdHlUb1VuaWNvZGVNYXApIHsKICAgICAgICBpZiAoL1RhaG9tYXxWZXJkYW5hL2kudGVzdChuYW1lKSkgewogICAgICAgICAgYXBwbHlTdGFuZGFyZEZvbnRHbHlwaE1hcChtYXAsIGdldEdseXBoTWFwRm9yU3RhbmRhcmRGb250cygpKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhpcy50b0ZvbnRDaGFyID0gbWFwOwogICAgfQogICAgYW1lbmRGYWxsYmFja1RvVW5pY29kZShwcm9wZXJ0aWVzKTsKICAgIHRoaXMubG9hZGVkTmFtZSA9IGZvbnROYW1lLnNwbGl0KCItIiwgMSlbMF07CiAgfQogIGNoZWNrQW5kUmVwYWlyKG5hbWUsIGZvbnQsIHByb3BlcnRpZXMpIHsKICAgIGNvbnN0IFZBTElEX1RBQkxFUyA9IFsiT1MvMiIsICJjbWFwIiwgImhlYWQiLCAiaGhlYSIsICJobXR4IiwgIm1heHAiLCAibmFtZSIsICJwb3N0IiwgImxvY2EiLCAiZ2x5ZiIsICJmcGdtIiwgInByZXAiLCAiY3Z0ICIsICJDRkYgIl07CiAgICBmdW5jdGlvbiByZWFkVGFibGVzKGZpbGUsIG51bVRhYmxlcykgewogICAgICBjb25zdCB0YWJsZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgICB0YWJsZXNbIk9TLzIiXSA9IG51bGw7CiAgICAgIHRhYmxlcy5jbWFwID0gbnVsbDsKICAgICAgdGFibGVzLmhlYWQgPSBudWxsOwogICAgICB0YWJsZXMuaGhlYSA9IG51bGw7CiAgICAgIHRhYmxlcy5obXR4ID0gbnVsbDsKICAgICAgdGFibGVzLm1heHAgPSBudWxsOwogICAgICB0YWJsZXMubmFtZSA9IG51bGw7CiAgICAgIHRhYmxlcy5wb3N0ID0gbnVsbDsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1UYWJsZXM7IGkrKykgewogICAgICAgIGNvbnN0IHRhYmxlID0gcmVhZFRhYmxlRW50cnkoZmlsZSk7CiAgICAgICAgaWYgKCFWQUxJRF9UQUJMRVMuaW5jbHVkZXModGFibGUudGFnKSkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmICh0YWJsZS5sZW5ndGggPT09IDApIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICB0YWJsZXNbdGFibGUudGFnXSA9IHRhYmxlOwogICAgICB9CiAgICAgIHJldHVybiB0YWJsZXM7CiAgICB9CiAgICBmdW5jdGlvbiByZWFkVGFibGVFbnRyeShmaWxlKSB7CiAgICAgIGNvbnN0IHRhZyA9IGZpbGUuZ2V0U3RyaW5nKDQpOwogICAgICBjb25zdCBjaGVja3N1bSA9IGZpbGUuZ2V0SW50MzIoKSA+Pj4gMDsKICAgICAgY29uc3Qgb2Zmc2V0ID0gZmlsZS5nZXRJbnQzMigpID4+PiAwOwogICAgICBjb25zdCBsZW5ndGggPSBmaWxlLmdldEludDMyKCkgPj4+IDA7CiAgICAgIGNvbnN0IHByZXZpb3VzUG9zaXRpb24gPSBmaWxlLnBvczsKICAgICAgZmlsZS5wb3MgPSBmaWxlLnN0YXJ0IHx8IDA7CiAgICAgIGZpbGUuc2tpcChvZmZzZXQpOwogICAgICBjb25zdCBkYXRhID0gZmlsZS5nZXRCeXRlcyhsZW5ndGgpOwogICAgICBmaWxlLnBvcyA9IHByZXZpb3VzUG9zaXRpb247CiAgICAgIGlmICh0YWcgPT09ICJoZWFkIikgewogICAgICAgIGRhdGFbOF0gPSBkYXRhWzldID0gZGF0YVsxMF0gPSBkYXRhWzExXSA9IDA7CiAgICAgICAgZGF0YVsxN10gfD0gMHgyMDsKICAgICAgfQogICAgICByZXR1cm4gewogICAgICAgIHRhZywKICAgICAgICBjaGVja3N1bSwKICAgICAgICBsZW5ndGgsCiAgICAgICAgb2Zmc2V0LAogICAgICAgIGRhdGEKICAgICAgfTsKICAgIH0KICAgIGZ1bmN0aW9uIHJlYWRPcGVuVHlwZUhlYWRlcih0dGYpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICB2ZXJzaW9uOiB0dGYuZ2V0U3RyaW5nKDQpLAogICAgICAgIG51bVRhYmxlczogdHRmLmdldFVpbnQxNigpLAogICAgICAgIHNlYXJjaFJhbmdlOiB0dGYuZ2V0VWludDE2KCksCiAgICAgICAgZW50cnlTZWxlY3RvcjogdHRmLmdldFVpbnQxNigpLAogICAgICAgIHJhbmdlU2hpZnQ6IHR0Zi5nZXRVaW50MTYoKQogICAgICB9OwogICAgfQogICAgZnVuY3Rpb24gcmVhZFRydWVUeXBlQ29sbGVjdGlvbkhlYWRlcih0dGMpIHsKICAgICAgY29uc3QgdHRjVGFnID0gdHRjLmdldFN0cmluZyg0KTsKICAgICAgYXNzZXJ0KHR0Y1RhZyA9PT0gInR0Y2YiLCAiTXVzdCBiZSBhIFRydWVUeXBlIENvbGxlY3Rpb24gZm9udC4iKTsKICAgICAgY29uc3QgbWFqb3JWZXJzaW9uID0gdHRjLmdldFVpbnQxNigpOwogICAgICBjb25zdCBtaW5vclZlcnNpb24gPSB0dGMuZ2V0VWludDE2KCk7CiAgICAgIGNvbnN0IG51bUZvbnRzID0gdHRjLmdldEludDMyKCkgPj4+IDA7CiAgICAgIGNvbnN0IG9mZnNldFRhYmxlID0gW107CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtRm9udHM7IGkrKykgewogICAgICAgIG9mZnNldFRhYmxlLnB1c2godHRjLmdldEludDMyKCkgPj4+IDApOwogICAgICB9CiAgICAgIGNvbnN0IGhlYWRlciA9IHsKICAgICAgICB0dGNUYWcsCiAgICAgICAgbWFqb3JWZXJzaW9uLAogICAgICAgIG1pbm9yVmVyc2lvbiwKICAgICAgICBudW1Gb250cywKICAgICAgICBvZmZzZXRUYWJsZQogICAgICB9OwogICAgICBzd2l0Y2ggKG1ham9yVmVyc2lvbikgewogICAgICAgIGNhc2UgMToKICAgICAgICAgIHJldHVybiBoZWFkZXI7CiAgICAgICAgY2FzZSAyOgogICAgICAgICAgaGVhZGVyLmRzaWdUYWcgPSB0dGMuZ2V0SW50MzIoKSA+Pj4gMDsKICAgICAgICAgIGhlYWRlci5kc2lnTGVuZ3RoID0gdHRjLmdldEludDMyKCkgPj4+IDA7CiAgICAgICAgICBoZWFkZXIuZHNpZ09mZnNldCA9IHR0Yy5nZXRJbnQzMigpID4+PiAwOwogICAgICAgICAgcmV0dXJuIGhlYWRlcjsKICAgICAgfQogICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEludmFsaWQgVHJ1ZVR5cGUgQ29sbGVjdGlvbiBtYWpvclZlcnNpb246ICR7bWFqb3JWZXJzaW9ufS5gKTsKICAgIH0KICAgIGZ1bmN0aW9uIHJlYWRUcnVlVHlwZUNvbGxlY3Rpb25EYXRhKHR0YywgZm9udE5hbWUpIHsKICAgICAgY29uc3QgewogICAgICAgIG51bUZvbnRzLAogICAgICAgIG9mZnNldFRhYmxlCiAgICAgIH0gPSByZWFkVHJ1ZVR5cGVDb2xsZWN0aW9uSGVhZGVyKHR0Yyk7CiAgICAgIGNvbnN0IGZvbnROYW1lUGFydHMgPSBmb250TmFtZS5zcGxpdCgiKyIpOwogICAgICBsZXQgZmFsbGJhY2tEYXRhOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUZvbnRzOyBpKyspIHsKICAgICAgICB0dGMucG9zID0gKHR0Yy5zdGFydCB8fCAwKSArIG9mZnNldFRhYmxlW2ldOwogICAgICAgIGNvbnN0IHBvdGVudGlhbEhlYWRlciA9IHJlYWRPcGVuVHlwZUhlYWRlcih0dGMpOwogICAgICAgIGNvbnN0IHBvdGVudGlhbFRhYmxlcyA9IHJlYWRUYWJsZXModHRjLCBwb3RlbnRpYWxIZWFkZXIubnVtVGFibGVzKTsKICAgICAgICBpZiAoIXBvdGVudGlhbFRhYmxlcy5uYW1lKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoJ1RydWVUeXBlIENvbGxlY3Rpb24gZm9udCBtdXN0IGNvbnRhaW4gYSAibmFtZSIgdGFibGUuJyk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IFtuYW1lVGFibGVdID0gcmVhZE5hbWVUYWJsZShwb3RlbnRpYWxUYWJsZXMubmFtZSk7CiAgICAgICAgZm9yIChsZXQgaiA9IDAsIGpqID0gbmFtZVRhYmxlLmxlbmd0aDsgaiA8IGpqOyBqKyspIHsKICAgICAgICAgIGZvciAobGV0IGsgPSAwLCBrayA9IG5hbWVUYWJsZVtqXS5sZW5ndGg7IGsgPCBrazsgaysrKSB7CiAgICAgICAgICAgIGNvbnN0IG5hbWVFbnRyeSA9IG5hbWVUYWJsZVtqXVtrXT8ucmVwbGFjZUFsbCgvXHMvZywgIiIpOwogICAgICAgICAgICBpZiAoIW5hbWVFbnRyeSkgewogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChuYW1lRW50cnkgPT09IGZvbnROYW1lKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGhlYWRlcjogcG90ZW50aWFsSGVhZGVyLAogICAgICAgICAgICAgICAgdGFibGVzOiBwb3RlbnRpYWxUYWJsZXMKICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChmb250TmFtZVBhcnRzLmxlbmd0aCA8IDIpIHsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgZm9udE5hbWVQYXJ0cykgewogICAgICAgICAgICAgIGlmIChuYW1lRW50cnkgPT09IHBhcnQpIHsKICAgICAgICAgICAgICAgIGZhbGxiYWNrRGF0YSA9IHsKICAgICAgICAgICAgICAgICAgbmFtZTogcGFydCwKICAgICAgICAgICAgICAgICAgaGVhZGVyOiBwb3RlbnRpYWxIZWFkZXIsCiAgICAgICAgICAgICAgICAgIHRhYmxlczogcG90ZW50aWFsVGFibGVzCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoZmFsbGJhY2tEYXRhKSB7CiAgICAgICAgd2FybihgVHJ1ZVR5cGUgQ29sbGVjdGlvbiBkb2VzIG5vdCBjb250YWluICIke2ZvbnROYW1lfSIgZm9udCwgYCArIGBmYWxsaW5nIGJhY2sgdG8gIiR7ZmFsbGJhY2tEYXRhLm5hbWV9IiBmb250IGluc3RlYWQuYCk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGhlYWRlcjogZmFsbGJhY2tEYXRhLmhlYWRlciwKICAgICAgICAgIHRhYmxlczogZmFsbGJhY2tEYXRhLnRhYmxlcwogICAgICAgIH07CiAgICAgIH0KICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBUcnVlVHlwZSBDb2xsZWN0aW9uIGRvZXMgbm90IGNvbnRhaW4gIiR7Zm9udE5hbWV9IiBmb250LmApOwogICAgfQogICAgZnVuY3Rpb24gcmVhZENtYXBUYWJsZShjbWFwLCBmaWxlLCBpc1N5bWJvbGljRm9udCwgaGFzRW5jb2RpbmcpIHsKICAgICAgaWYgKCFjbWFwKSB7CiAgICAgICAgd2FybigiTm8gY21hcCB0YWJsZSBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHBsYXRmb3JtSWQ6IC0xLAogICAgICAgICAgZW5jb2RpbmdJZDogLTEsCiAgICAgICAgICBtYXBwaW5nczogW10sCiAgICAgICAgICBoYXNTaG9ydENtYXA6IGZhbHNlCiAgICAgICAgfTsKICAgICAgfQogICAgICBsZXQgc2VnbWVudDsKICAgICAgbGV0IHN0YXJ0ID0gKGZpbGUuc3RhcnQgfHwgMCkgKyBjbWFwLm9mZnNldDsKICAgICAgZmlsZS5wb3MgPSBzdGFydDsKICAgICAgZmlsZS5za2lwKDIpOwogICAgICBjb25zdCBudW1UYWJsZXMgPSBmaWxlLmdldFVpbnQxNigpOwogICAgICBsZXQgcG90ZW50aWFsVGFibGU7CiAgICAgIGxldCBjYW5CcmVhayA9IGZhbHNlOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVRhYmxlczsgaSsrKSB7CiAgICAgICAgY29uc3QgcGxhdGZvcm1JZCA9IGZpbGUuZ2V0VWludDE2KCk7CiAgICAgICAgY29uc3QgZW5jb2RpbmdJZCA9IGZpbGUuZ2V0VWludDE2KCk7CiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gZmlsZS5nZXRJbnQzMigpID4+PiAwOwogICAgICAgIGxldCB1c2VUYWJsZSA9IGZhbHNlOwogICAgICAgIGlmIChwb3RlbnRpYWxUYWJsZT8ucGxhdGZvcm1JZCA9PT0gcGxhdGZvcm1JZCAmJiBwb3RlbnRpYWxUYWJsZT8uZW5jb2RpbmdJZCA9PT0gZW5jb2RpbmdJZCkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmIChwbGF0Zm9ybUlkID09PSAwICYmIChlbmNvZGluZ0lkID09PSAwIHx8IGVuY29kaW5nSWQgPT09IDEgfHwgZW5jb2RpbmdJZCA9PT0gMykpIHsKICAgICAgICAgIHVzZVRhYmxlID0gdHJ1ZTsKICAgICAgICB9IGVsc2UgaWYgKHBsYXRmb3JtSWQgPT09IDEgJiYgZW5jb2RpbmdJZCA9PT0gMCkgewogICAgICAgICAgdXNlVGFibGUgPSB0cnVlOwogICAgICAgIH0gZWxzZSBpZiAocGxhdGZvcm1JZCA9PT0gMyAmJiBlbmNvZGluZ0lkID09PSAxICYmIChoYXNFbmNvZGluZyB8fCAhcG90ZW50aWFsVGFibGUpKSB7CiAgICAgICAgICB1c2VUYWJsZSA9IHRydWU7CiAgICAgICAgICBpZiAoIWlzU3ltYm9saWNGb250KSB7CiAgICAgICAgICAgIGNhbkJyZWFrID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGlzU3ltYm9saWNGb250ICYmIHBsYXRmb3JtSWQgPT09IDMgJiYgZW5jb2RpbmdJZCA9PT0gMCkgewogICAgICAgICAgdXNlVGFibGUgPSB0cnVlOwogICAgICAgICAgbGV0IGNvcnJlY3RseVNvcnRlZCA9IHRydWU7CiAgICAgICAgICBpZiAoaSA8IG51bVRhYmxlcyAtIDEpIHsKICAgICAgICAgICAgY29uc3QgbmV4dEJ5dGVzID0gZmlsZS5wZWVrQnl0ZXMoMiksCiAgICAgICAgICAgICAgbmV4dFBsYXRmb3JtSWQgPSBpbnQxNihuZXh0Qnl0ZXNbMF0sIG5leHRCeXRlc1sxXSk7CiAgICAgICAgICAgIGlmIChuZXh0UGxhdGZvcm1JZCA8IHBsYXRmb3JtSWQpIHsKICAgICAgICAgICAgICBjb3JyZWN0bHlTb3J0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKGNvcnJlY3RseVNvcnRlZCkgewogICAgICAgICAgICBjYW5CcmVhayA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh1c2VUYWJsZSkgewogICAgICAgICAgcG90ZW50aWFsVGFibGUgPSB7CiAgICAgICAgICAgIHBsYXRmb3JtSWQsCiAgICAgICAgICAgIGVuY29kaW5nSWQsCiAgICAgICAgICAgIG9mZnNldAogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgaWYgKGNhbkJyZWFrKSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHBvdGVudGlhbFRhYmxlKSB7CiAgICAgICAgZmlsZS5wb3MgPSBzdGFydCArIHBvdGVudGlhbFRhYmxlLm9mZnNldDsKICAgICAgfQogICAgICBpZiAoIXBvdGVudGlhbFRhYmxlIHx8IGZpbGUucGVla0J5dGUoKSA9PT0gLTEpIHsKICAgICAgICB3YXJuKCJDb3VsZCBub3QgZmluZCBhIHByZWZlcnJlZCBjbWFwIHRhYmxlLiIpOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICBwbGF0Zm9ybUlkOiAtMSwKICAgICAgICAgIGVuY29kaW5nSWQ6IC0xLAogICAgICAgICAgbWFwcGluZ3M6IFtdLAogICAgICAgICAgaGFzU2hvcnRDbWFwOiBmYWxzZQogICAgICAgIH07CiAgICAgIH0KICAgICAgY29uc3QgZm9ybWF0ID0gZmlsZS5nZXRVaW50MTYoKTsKICAgICAgbGV0IGhhc1Nob3J0Q21hcCA9IGZhbHNlOwogICAgICBjb25zdCBtYXBwaW5ncyA9IFtdOwogICAgICBsZXQgaiwgZ2x5cGhJZDsKICAgICAgaWYgKGZvcm1hdCA9PT0gMCkgewogICAgICAgIGZpbGUuc2tpcCgyICsgMik7CiAgICAgICAgZm9yIChqID0gMDsgaiA8IDI1NjsgaisrKSB7CiAgICAgICAgICBjb25zdCBpbmRleCA9IGZpbGUuZ2V0Qnl0ZSgpOwogICAgICAgICAgaWYgKCFpbmRleCkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIG1hcHBpbmdzLnB1c2goewogICAgICAgICAgICBjaGFyQ29kZTogaiwKICAgICAgICAgICAgZ2x5cGhJZDogaW5kZXgKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBoYXNTaG9ydENtYXAgPSB0cnVlOwogICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gMikgewogICAgICAgIGZpbGUuc2tpcCgyICsgMik7CiAgICAgICAgY29uc3Qgc3ViSGVhZGVyS2V5cyA9IFtdOwogICAgICAgIGxldCBtYXhTdWJIZWFkZXJLZXkgPSAwOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKICAgICAgICAgIGNvbnN0IHN1YkhlYWRlcktleSA9IGZpbGUuZ2V0VWludDE2KCkgPj4gMzsKICAgICAgICAgIHN1YkhlYWRlcktleXMucHVzaChzdWJIZWFkZXJLZXkpOwogICAgICAgICAgbWF4U3ViSGVhZGVyS2V5ID0gTWF0aC5tYXgoc3ViSGVhZGVyS2V5LCBtYXhTdWJIZWFkZXJLZXkpOwogICAgICAgIH0KICAgICAgICBjb25zdCBzdWJIZWFkZXJzID0gW107CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gbWF4U3ViSGVhZGVyS2V5OyBpKyspIHsKICAgICAgICAgIHN1YkhlYWRlcnMucHVzaCh7CiAgICAgICAgICAgIGZpcnN0Q29kZTogZmlsZS5nZXRVaW50MTYoKSwKICAgICAgICAgICAgZW50cnlDb3VudDogZmlsZS5nZXRVaW50MTYoKSwKICAgICAgICAgICAgaWREZWx0YTogc2lnbmVkSW50MTYoZmlsZS5nZXRCeXRlKCksIGZpbGUuZ2V0Qnl0ZSgpKSwKICAgICAgICAgICAgaWRSYW5nZVBvczogZmlsZS5wb3MgKyBmaWxlLmdldFVpbnQxNigpCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewogICAgICAgICAgaWYgKHN1YkhlYWRlcktleXNbaV0gPT09IDApIHsKICAgICAgICAgICAgZmlsZS5wb3MgPSBzdWJIZWFkZXJzWzBdLmlkUmFuZ2VQb3MgKyAyICogaTsKICAgICAgICAgICAgZ2x5cGhJZCA9IGZpbGUuZ2V0VWludDE2KCk7CiAgICAgICAgICAgIG1hcHBpbmdzLnB1c2goewogICAgICAgICAgICAgIGNoYXJDb2RlOiBpLAogICAgICAgICAgICAgIGdseXBoSWQKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zdCBzID0gc3ViSGVhZGVyc1tzdWJIZWFkZXJLZXlzW2ldXTsKICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHMuZW50cnlDb3VudDsgaisrKSB7CiAgICAgICAgICAgICAgY29uc3QgY2hhckNvZGUgPSAoaSA8PCA4KSArIGogKyBzLmZpcnN0Q29kZTsKICAgICAgICAgICAgICBmaWxlLnBvcyA9IHMuaWRSYW5nZVBvcyArIDIgKiBqOwogICAgICAgICAgICAgIGdseXBoSWQgPSBmaWxlLmdldFVpbnQxNigpOwogICAgICAgICAgICAgIGlmIChnbHlwaElkICE9PSAwKSB7CiAgICAgICAgICAgICAgICBnbHlwaElkID0gKGdseXBoSWQgKyBzLmlkRGVsdGEpICUgNjU1MzY7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIG1hcHBpbmdzLnB1c2goewogICAgICAgICAgICAgICAgY2hhckNvZGUsCiAgICAgICAgICAgICAgICBnbHlwaElkCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSA0KSB7CiAgICAgICAgZmlsZS5za2lwKDIgKyAyKTsKICAgICAgICBjb25zdCBzZWdDb3VudCA9IGZpbGUuZ2V0VWludDE2KCkgPj4gMTsKICAgICAgICBmaWxlLnNraXAoNik7CiAgICAgICAgY29uc3Qgc2VnbWVudHMgPSBbXTsKICAgICAgICBsZXQgc2VnSW5kZXg7CiAgICAgICAgZm9yIChzZWdJbmRleCA9IDA7IHNlZ0luZGV4IDwgc2VnQ291bnQ7IHNlZ0luZGV4KyspIHsKICAgICAgICAgIHNlZ21lbnRzLnB1c2goewogICAgICAgICAgICBlbmQ6IGZpbGUuZ2V0VWludDE2KCkKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBmaWxlLnNraXAoMik7CiAgICAgICAgZm9yIChzZWdJbmRleCA9IDA7IHNlZ0luZGV4IDwgc2VnQ291bnQ7IHNlZ0luZGV4KyspIHsKICAgICAgICAgIHNlZ21lbnRzW3NlZ0luZGV4XS5zdGFydCA9IGZpbGUuZ2V0VWludDE2KCk7CiAgICAgICAgfQogICAgICAgIGZvciAoc2VnSW5kZXggPSAwOyBzZWdJbmRleCA8IHNlZ0NvdW50OyBzZWdJbmRleCsrKSB7CiAgICAgICAgICBzZWdtZW50c1tzZWdJbmRleF0uZGVsdGEgPSBmaWxlLmdldFVpbnQxNigpOwogICAgICAgIH0KICAgICAgICBsZXQgb2Zmc2V0c0NvdW50ID0gMCwKICAgICAgICAgIG9mZnNldEluZGV4OwogICAgICAgIGZvciAoc2VnSW5kZXggPSAwOyBzZWdJbmRleCA8IHNlZ0NvdW50OyBzZWdJbmRleCsrKSB7CiAgICAgICAgICBzZWdtZW50ID0gc2VnbWVudHNbc2VnSW5kZXhdOwogICAgICAgICAgY29uc3QgcmFuZ2VPZmZzZXQgPSBmaWxlLmdldFVpbnQxNigpOwogICAgICAgICAgaWYgKCFyYW5nZU9mZnNldCkgewogICAgICAgICAgICBzZWdtZW50Lm9mZnNldEluZGV4ID0gLTE7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgb2Zmc2V0SW5kZXggPSAocmFuZ2VPZmZzZXQgPj4gMSkgLSAoc2VnQ291bnQgLSBzZWdJbmRleCk7CiAgICAgICAgICBzZWdtZW50Lm9mZnNldEluZGV4ID0gb2Zmc2V0SW5kZXg7CiAgICAgICAgICBvZmZzZXRzQ291bnQgPSBNYXRoLm1heChvZmZzZXRzQ291bnQsIG9mZnNldEluZGV4ICsgc2VnbWVudC5lbmQgLSBzZWdtZW50LnN0YXJ0ICsgMSk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IG9mZnNldHMgPSBbXTsKICAgICAgICBmb3IgKGogPSAwOyBqIDwgb2Zmc2V0c0NvdW50OyBqKyspIHsKICAgICAgICAgIG9mZnNldHMucHVzaChmaWxlLmdldFVpbnQxNigpKTsKICAgICAgICB9CiAgICAgICAgZm9yIChzZWdJbmRleCA9IDA7IHNlZ0luZGV4IDwgc2VnQ291bnQ7IHNlZ0luZGV4KyspIHsKICAgICAgICAgIHNlZ21lbnQgPSBzZWdtZW50c1tzZWdJbmRleF07CiAgICAgICAgICBzdGFydCA9IHNlZ21lbnQuc3RhcnQ7CiAgICAgICAgICBjb25zdCBlbmQgPSBzZWdtZW50LmVuZDsKICAgICAgICAgIGNvbnN0IGRlbHRhID0gc2VnbWVudC5kZWx0YTsKICAgICAgICAgIG9mZnNldEluZGV4ID0gc2VnbWVudC5vZmZzZXRJbmRleDsKICAgICAgICAgIGZvciAoaiA9IHN0YXJ0OyBqIDw9IGVuZDsgaisrKSB7CiAgICAgICAgICAgIGlmIChqID09PSAweGZmZmYpIHsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBnbHlwaElkID0gb2Zmc2V0SW5kZXggPCAwID8gaiA6IG9mZnNldHNbb2Zmc2V0SW5kZXggKyBqIC0gc3RhcnRdOwogICAgICAgICAgICBnbHlwaElkID0gZ2x5cGhJZCArIGRlbHRhICYgMHhmZmZmOwogICAgICAgICAgICBtYXBwaW5ncy5wdXNoKHsKICAgICAgICAgICAgICBjaGFyQ29kZTogaiwKICAgICAgICAgICAgICBnbHlwaElkCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09IDYpIHsKICAgICAgICBmaWxlLnNraXAoMiArIDIpOwogICAgICAgIGNvbnN0IGZpcnN0Q29kZSA9IGZpbGUuZ2V0VWludDE2KCk7CiAgICAgICAgY29uc3QgZW50cnlDb3VudCA9IGZpbGUuZ2V0VWludDE2KCk7CiAgICAgICAgZm9yIChqID0gMDsgaiA8IGVudHJ5Q291bnQ7IGorKykgewogICAgICAgICAgZ2x5cGhJZCA9IGZpbGUuZ2V0VWludDE2KCk7CiAgICAgICAgICBjb25zdCBjaGFyQ29kZSA9IGZpcnN0Q29kZSArIGo7CiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHsKICAgICAgICAgICAgY2hhckNvZGUsCiAgICAgICAgICAgIGdseXBoSWQKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09IDEyKSB7CiAgICAgICAgZmlsZS5za2lwKDIgKyA0ICsgNCk7CiAgICAgICAgY29uc3Qgbkdyb3VwcyA9IGZpbGUuZ2V0SW50MzIoKSA+Pj4gMDsKICAgICAgICBmb3IgKGogPSAwOyBqIDwgbkdyb3VwczsgaisrKSB7CiAgICAgICAgICBjb25zdCBzdGFydENoYXJDb2RlID0gZmlsZS5nZXRJbnQzMigpID4+PiAwOwogICAgICAgICAgY29uc3QgZW5kQ2hhckNvZGUgPSBmaWxlLmdldEludDMyKCkgPj4+IDA7CiAgICAgICAgICBsZXQgZ2x5cGhDb2RlID0gZmlsZS5nZXRJbnQzMigpID4+PiAwOwogICAgICAgICAgZm9yIChsZXQgY2hhckNvZGUgPSBzdGFydENoYXJDb2RlOyBjaGFyQ29kZSA8PSBlbmRDaGFyQ29kZTsgY2hhckNvZGUrKykgewogICAgICAgICAgICBtYXBwaW5ncy5wdXNoKHsKICAgICAgICAgICAgICBjaGFyQ29kZSwKICAgICAgICAgICAgICBnbHlwaElkOiBnbHlwaENvZGUrKwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgd2FybigiY21hcCB0YWJsZSBoYXMgdW5zdXBwb3J0ZWQgZm9ybWF0OiAiICsgZm9ybWF0KTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgcGxhdGZvcm1JZDogLTEsCiAgICAgICAgICBlbmNvZGluZ0lkOiAtMSwKICAgICAgICAgIG1hcHBpbmdzOiBbXSwKICAgICAgICAgIGhhc1Nob3J0Q21hcDogZmFsc2UKICAgICAgICB9OwogICAgICB9CiAgICAgIG1hcHBpbmdzLnNvcnQoKGEsIGIpID0+IGEuY2hhckNvZGUgLSBiLmNoYXJDb2RlKTsKICAgICAgY29uc3QgZmluYWxNYXBwaW5ncyA9IFtdLAogICAgICAgIHNlZW5DaGFyQ29kZXMgPSBuZXcgU2V0KCk7CiAgICAgIGZvciAoY29uc3QgbWFwIG9mIG1hcHBpbmdzKSB7CiAgICAgICAgY29uc3QgewogICAgICAgICAgY2hhckNvZGUKICAgICAgICB9ID0gbWFwOwogICAgICAgIGlmIChzZWVuQ2hhckNvZGVzLmhhcyhjaGFyQ29kZSkpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBzZWVuQ2hhckNvZGVzLmFkZChjaGFyQ29kZSk7CiAgICAgICAgZmluYWxNYXBwaW5ncy5wdXNoKG1hcCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHsKICAgICAgICBwbGF0Zm9ybUlkOiBwb3RlbnRpYWxUYWJsZS5wbGF0Zm9ybUlkLAogICAgICAgIGVuY29kaW5nSWQ6IHBvdGVudGlhbFRhYmxlLmVuY29kaW5nSWQsCiAgICAgICAgbWFwcGluZ3M6IGZpbmFsTWFwcGluZ3MsCiAgICAgICAgaGFzU2hvcnRDbWFwCiAgICAgIH07CiAgICB9CiAgICBmdW5jdGlvbiBzYW5pdGl6ZU1ldHJpY3MoZmlsZSwgaGVhZGVyLCBtZXRyaWNzLCBoZWFkVGFibGUsIG51bUdseXBocywgZHVwRmlyc3RFbnRyeSkgewogICAgICBpZiAoIWhlYWRlcikgewogICAgICAgIGlmIChtZXRyaWNzKSB7CiAgICAgICAgICBtZXRyaWNzLmRhdGEgPSBudWxsOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgZmlsZS5wb3MgPSAoZmlsZS5zdGFydCB8fCAwKSArIGhlYWRlci5vZmZzZXQ7CiAgICAgIGZpbGUucG9zICs9IDQ7CiAgICAgIGZpbGUucG9zICs9IDI7CiAgICAgIGZpbGUucG9zICs9IDI7CiAgICAgIGZpbGUucG9zICs9IDI7CiAgICAgIGZpbGUucG9zICs9IDI7CiAgICAgIGZpbGUucG9zICs9IDI7CiAgICAgIGZpbGUucG9zICs9IDI7CiAgICAgIGZpbGUucG9zICs9IDI7CiAgICAgIGZpbGUucG9zICs9IDI7CiAgICAgIGZpbGUucG9zICs9IDI7CiAgICAgIGNvbnN0IGNhcmV0T2Zmc2V0ID0gZmlsZS5nZXRVaW50MTYoKTsKICAgICAgZmlsZS5wb3MgKz0gODsKICAgICAgZmlsZS5wb3MgKz0gMjsKICAgICAgbGV0IG51bU9mTWV0cmljcyA9IGZpbGUuZ2V0VWludDE2KCk7CiAgICAgIGlmIChjYXJldE9mZnNldCAhPT0gMCkgewogICAgICAgIGNvbnN0IG1hY1N0eWxlID0gaW50MTYoaGVhZFRhYmxlLmRhdGFbNDRdLCBoZWFkVGFibGUuZGF0YVs0NV0pOwogICAgICAgIGlmICghKG1hY1N0eWxlICYgMikpIHsKICAgICAgICAgIGhlYWRlci5kYXRhWzIyXSA9IDA7CiAgICAgICAgICBoZWFkZXIuZGF0YVsyM10gPSAwOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAobnVtT2ZNZXRyaWNzID4gbnVtR2x5cGhzKSB7CiAgICAgICAgaW5mbyhgVGhlIG51bU9mTWV0cmljcyAoJHtudW1PZk1ldHJpY3N9KSBzaG91bGQgbm90IGJlIGAgKyBgZ3JlYXRlciB0aGFuIHRoZSBudW1HbHlwaHMgKCR7bnVtR2x5cGhzfSkuYCk7CiAgICAgICAgbnVtT2ZNZXRyaWNzID0gbnVtR2x5cGhzOwogICAgICAgIGhlYWRlci5kYXRhWzM0XSA9IChudW1PZk1ldHJpY3MgJiAweGZmMDApID4+IDg7CiAgICAgICAgaGVhZGVyLmRhdGFbMzVdID0gbnVtT2ZNZXRyaWNzICYgMHgwMGZmOwogICAgICB9CiAgICAgIGNvbnN0IG51bU9mU2lkZWJlYXJpbmdzID0gbnVtR2x5cGhzIC0gbnVtT2ZNZXRyaWNzOwogICAgICBjb25zdCBudW1NaXNzaW5nID0gbnVtT2ZTaWRlYmVhcmluZ3MgLSAobWV0cmljcy5sZW5ndGggLSBudW1PZk1ldHJpY3MgKiA0ID4+IDEpOwogICAgICBpZiAobnVtTWlzc2luZyA+IDApIHsKICAgICAgICBjb25zdCBlbnRyaWVzID0gbmV3IFVpbnQ4QXJyYXkobWV0cmljcy5sZW5ndGggKyBudW1NaXNzaW5nICogMik7CiAgICAgICAgZW50cmllcy5zZXQobWV0cmljcy5kYXRhKTsKICAgICAgICBpZiAoZHVwRmlyc3RFbnRyeSkgewogICAgICAgICAgZW50cmllc1ttZXRyaWNzLmxlbmd0aF0gPSBtZXRyaWNzLmRhdGFbMl07CiAgICAgICAgICBlbnRyaWVzW21ldHJpY3MubGVuZ3RoICsgMV0gPSBtZXRyaWNzLmRhdGFbM107CiAgICAgICAgfQogICAgICAgIG1ldHJpY3MuZGF0YSA9IGVudHJpZXM7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIHNhbml0aXplR2x5cGgoc291cmNlLCBzb3VyY2VTdGFydCwgc291cmNlRW5kLCBkZXN0LCBkZXN0U3RhcnQsIGhpbnRzVmFsaWQpIHsKICAgICAgY29uc3QgZ2x5cGhQcm9maWxlID0gewogICAgICAgIGxlbmd0aDogMCwKICAgICAgICBzaXplT2ZJbnN0cnVjdGlvbnM6IDAKICAgICAgfTsKICAgICAgaWYgKHNvdXJjZVN0YXJ0IDwgMCB8fCBzb3VyY2VTdGFydCA+PSBzb3VyY2UubGVuZ3RoIHx8IHNvdXJjZUVuZCA+IHNvdXJjZS5sZW5ndGggfHwgc291cmNlRW5kIC0gc291cmNlU3RhcnQgPD0gMTIpIHsKICAgICAgICByZXR1cm4gZ2x5cGhQcm9maWxlOwogICAgICB9CiAgICAgIGNvbnN0IGdseWYgPSBzb3VyY2Uuc3ViYXJyYXkoc291cmNlU3RhcnQsIHNvdXJjZUVuZCk7CiAgICAgIGNvbnN0IHhNaW4gPSBzaWduZWRJbnQxNihnbHlmWzJdLCBnbHlmWzNdKTsKICAgICAgY29uc3QgeU1pbiA9IHNpZ25lZEludDE2KGdseWZbNF0sIGdseWZbNV0pOwogICAgICBjb25zdCB4TWF4ID0gc2lnbmVkSW50MTYoZ2x5Zls2XSwgZ2x5Zls3XSk7CiAgICAgIGNvbnN0IHlNYXggPSBzaWduZWRJbnQxNihnbHlmWzhdLCBnbHlmWzldKTsKICAgICAgaWYgKHhNaW4gPiB4TWF4KSB7CiAgICAgICAgd3JpdGVTaWduZWRJbnQxNihnbHlmLCAyLCB4TWF4KTsKICAgICAgICB3cml0ZVNpZ25lZEludDE2KGdseWYsIDYsIHhNaW4pOwogICAgICB9CiAgICAgIGlmICh5TWluID4geU1heCkgewogICAgICAgIHdyaXRlU2lnbmVkSW50MTYoZ2x5ZiwgNCwgeU1heCk7CiAgICAgICAgd3JpdGVTaWduZWRJbnQxNihnbHlmLCA4LCB5TWluKTsKICAgICAgfQogICAgICBjb25zdCBjb250b3Vyc0NvdW50ID0gc2lnbmVkSW50MTYoZ2x5ZlswXSwgZ2x5ZlsxXSk7CiAgICAgIGlmIChjb250b3Vyc0NvdW50IDwgMCkgewogICAgICAgIGlmIChjb250b3Vyc0NvdW50IDwgLTEpIHsKICAgICAgICAgIHJldHVybiBnbHlwaFByb2ZpbGU7CiAgICAgICAgfQogICAgICAgIGRlc3Quc2V0KGdseWYsIGRlc3RTdGFydCk7CiAgICAgICAgZ2x5cGhQcm9maWxlLmxlbmd0aCA9IGdseWYubGVuZ3RoOwogICAgICAgIHJldHVybiBnbHlwaFByb2ZpbGU7CiAgICAgIH0KICAgICAgbGV0IGksCiAgICAgICAgaiA9IDEwLAogICAgICAgIGZsYWdzQ291bnQgPSAwOwogICAgICBmb3IgKGkgPSAwOyBpIDwgY29udG91cnNDb3VudDsgaSsrKSB7CiAgICAgICAgY29uc3QgZW5kUG9pbnQgPSBnbHlmW2pdIDw8IDggfCBnbHlmW2ogKyAxXTsKICAgICAgICBmbGFnc0NvdW50ID0gZW5kUG9pbnQgKyAxOwogICAgICAgIGogKz0gMjsKICAgICAgfQogICAgICBjb25zdCBpbnN0cnVjdGlvbnNTdGFydCA9IGo7CiAgICAgIGNvbnN0IGluc3RydWN0aW9uc0xlbmd0aCA9IGdseWZbal0gPDwgOCB8IGdseWZbaiArIDFdOwogICAgICBnbHlwaFByb2ZpbGUuc2l6ZU9mSW5zdHJ1Y3Rpb25zID0gaW5zdHJ1Y3Rpb25zTGVuZ3RoOwogICAgICBqICs9IDIgKyBpbnN0cnVjdGlvbnNMZW5ndGg7CiAgICAgIGNvbnN0IGluc3RydWN0aW9uc0VuZCA9IGo7CiAgICAgIGxldCBjb29yZGluYXRlc0xlbmd0aCA9IDA7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBmbGFnc0NvdW50OyBpKyspIHsKICAgICAgICBjb25zdCBmbGFnID0gZ2x5ZltqKytdOwogICAgICAgIGlmIChmbGFnICYgMHhjMCkgewogICAgICAgICAgZ2x5ZltqIC0gMV0gPSBmbGFnICYgMHgzZjsKICAgICAgICB9CiAgICAgICAgbGV0IHhMZW5ndGggPSAyOwogICAgICAgIGlmIChmbGFnICYgMikgewogICAgICAgICAgeExlbmd0aCA9IDE7CiAgICAgICAgfSBlbHNlIGlmIChmbGFnICYgMTYpIHsKICAgICAgICAgIHhMZW5ndGggPSAwOwogICAgICAgIH0KICAgICAgICBsZXQgeUxlbmd0aCA9IDI7CiAgICAgICAgaWYgKGZsYWcgJiA0KSB7CiAgICAgICAgICB5TGVuZ3RoID0gMTsKICAgICAgICB9IGVsc2UgaWYgKGZsYWcgJiAzMikgewogICAgICAgICAgeUxlbmd0aCA9IDA7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHh5TGVuZ3RoID0geExlbmd0aCArIHlMZW5ndGg7CiAgICAgICAgY29vcmRpbmF0ZXNMZW5ndGggKz0geHlMZW5ndGg7CiAgICAgICAgaWYgKGZsYWcgJiA4KSB7CiAgICAgICAgICBjb25zdCByZXBlYXQgPSBnbHlmW2orK107CiAgICAgICAgICBpZiAocmVwZWF0ID09PSAwKSB7CiAgICAgICAgICAgIGdseWZbaiAtIDFdIF49IDg7CiAgICAgICAgICB9CiAgICAgICAgICBpICs9IHJlcGVhdDsKICAgICAgICAgIGNvb3JkaW5hdGVzTGVuZ3RoICs9IHJlcGVhdCAqIHh5TGVuZ3RoOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoY29vcmRpbmF0ZXNMZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gZ2x5cGhQcm9maWxlOwogICAgICB9CiAgICAgIGxldCBnbHlwaERhdGFMZW5ndGggPSBqICsgY29vcmRpbmF0ZXNMZW5ndGg7CiAgICAgIGlmIChnbHlwaERhdGFMZW5ndGggPiBnbHlmLmxlbmd0aCkgewogICAgICAgIHJldHVybiBnbHlwaFByb2ZpbGU7CiAgICAgIH0KICAgICAgaWYgKCFoaW50c1ZhbGlkICYmIGluc3RydWN0aW9uc0xlbmd0aCA+IDApIHsKICAgICAgICBkZXN0LnNldChnbHlmLnN1YmFycmF5KDAsIGluc3RydWN0aW9uc1N0YXJ0KSwgZGVzdFN0YXJ0KTsKICAgICAgICBkZXN0LnNldChbMCwgMF0sIGRlc3RTdGFydCArIGluc3RydWN0aW9uc1N0YXJ0KTsKICAgICAgICBkZXN0LnNldChnbHlmLnN1YmFycmF5KGluc3RydWN0aW9uc0VuZCwgZ2x5cGhEYXRhTGVuZ3RoKSwgZGVzdFN0YXJ0ICsgaW5zdHJ1Y3Rpb25zU3RhcnQgKyAyKTsKICAgICAgICBnbHlwaERhdGFMZW5ndGggLT0gaW5zdHJ1Y3Rpb25zTGVuZ3RoOwogICAgICAgIGlmIChnbHlmLmxlbmd0aCAtIGdseXBoRGF0YUxlbmd0aCA+IDMpIHsKICAgICAgICAgIGdseXBoRGF0YUxlbmd0aCA9IGdseXBoRGF0YUxlbmd0aCArIDMgJiB+MzsKICAgICAgICB9CiAgICAgICAgZ2x5cGhQcm9maWxlLmxlbmd0aCA9IGdseXBoRGF0YUxlbmd0aDsKICAgICAgICByZXR1cm4gZ2x5cGhQcm9maWxlOwogICAgICB9CiAgICAgIGlmIChnbHlmLmxlbmd0aCAtIGdseXBoRGF0YUxlbmd0aCA+IDMpIHsKICAgICAgICBnbHlwaERhdGFMZW5ndGggPSBnbHlwaERhdGFMZW5ndGggKyAzICYgfjM7CiAgICAgICAgZGVzdC5zZXQoZ2x5Zi5zdWJhcnJheSgwLCBnbHlwaERhdGFMZW5ndGgpLCBkZXN0U3RhcnQpOwogICAgICAgIGdseXBoUHJvZmlsZS5sZW5ndGggPSBnbHlwaERhdGFMZW5ndGg7CiAgICAgICAgcmV0dXJuIGdseXBoUHJvZmlsZTsKICAgICAgfQogICAgICBkZXN0LnNldChnbHlmLCBkZXN0U3RhcnQpOwogICAgICBnbHlwaFByb2ZpbGUubGVuZ3RoID0gZ2x5Zi5sZW5ndGg7CiAgICAgIHJldHVybiBnbHlwaFByb2ZpbGU7CiAgICB9CiAgICBmdW5jdGlvbiBzYW5pdGl6ZUhlYWQoaGVhZCwgbnVtR2x5cGhzLCBsb2NhTGVuZ3RoKSB7CiAgICAgIGNvbnN0IGRhdGEgPSBoZWFkLmRhdGE7CiAgICAgIGNvbnN0IHZlcnNpb24gPSBpbnQzMihkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdLCBkYXRhWzNdKTsKICAgICAgaWYgKHZlcnNpb24gPj4gMTYgIT09IDEpIHsKICAgICAgICBpbmZvKCJBdHRlbXB0aW5nIHRvIGZpeCBpbnZhbGlkIHZlcnNpb24gaW4gaGVhZCB0YWJsZTogIiArIHZlcnNpb24pOwogICAgICAgIGRhdGFbMF0gPSAwOwogICAgICAgIGRhdGFbMV0gPSAxOwogICAgICAgIGRhdGFbMl0gPSAwOwogICAgICAgIGRhdGFbM10gPSAwOwogICAgICB9CiAgICAgIGNvbnN0IGluZGV4VG9Mb2NGb3JtYXQgPSBpbnQxNihkYXRhWzUwXSwgZGF0YVs1MV0pOwogICAgICBpZiAoaW5kZXhUb0xvY0Zvcm1hdCA8IDAgfHwgaW5kZXhUb0xvY0Zvcm1hdCA+IDEpIHsKICAgICAgICBpbmZvKCJBdHRlbXB0aW5nIHRvIGZpeCBpbnZhbGlkIGluZGV4VG9Mb2NGb3JtYXQgaW4gaGVhZCB0YWJsZTogIiArIGluZGV4VG9Mb2NGb3JtYXQpOwogICAgICAgIGNvbnN0IG51bUdseXBoc1BsdXNPbmUgPSBudW1HbHlwaHMgKyAxOwogICAgICAgIGlmIChsb2NhTGVuZ3RoID09PSBudW1HbHlwaHNQbHVzT25lIDw8IDEpIHsKICAgICAgICAgIGRhdGFbNTBdID0gMDsKICAgICAgICAgIGRhdGFbNTFdID0gMDsKICAgICAgICB9IGVsc2UgaWYgKGxvY2FMZW5ndGggPT09IG51bUdseXBoc1BsdXNPbmUgPDwgMikgewogICAgICAgICAgZGF0YVs1MF0gPSAwOwogICAgICAgICAgZGF0YVs1MV0gPSAxOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkNvdWxkIG5vdCBmaXggaW5kZXhUb0xvY0Zvcm1hdDogIiArIGluZGV4VG9Mb2NGb3JtYXQpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gc2FuaXRpemVHbHlwaExvY2F0aW9ucyhsb2NhLCBnbHlmLCBudW1HbHlwaHMsIGlzR2x5cGhMb2NhdGlvbnNMb25nLCBoaW50c1ZhbGlkLCBkdXBGaXJzdEVudHJ5LCBtYXhTaXplT2ZJbnN0cnVjdGlvbnMpIHsKICAgICAgbGV0IGl0ZW1TaXplLCBpdGVtRGVjb2RlLCBpdGVtRW5jb2RlOwogICAgICBpZiAoaXNHbHlwaExvY2F0aW9uc0xvbmcpIHsKICAgICAgICBpdGVtU2l6ZSA9IDQ7CiAgICAgICAgaXRlbURlY29kZSA9IGZ1bmN0aW9uIGZvbnRJdGVtRGVjb2RlTG9uZyhkYXRhLCBvZmZzZXQpIHsKICAgICAgICAgIHJldHVybiBkYXRhW29mZnNldF0gPDwgMjQgfCBkYXRhW29mZnNldCArIDFdIDw8IDE2IHwgZGF0YVtvZmZzZXQgKyAyXSA8PCA4IHwgZGF0YVtvZmZzZXQgKyAzXTsKICAgICAgICB9OwogICAgICAgIGl0ZW1FbmNvZGUgPSBmdW5jdGlvbiBmb250SXRlbUVuY29kZUxvbmcoZGF0YSwgb2Zmc2V0LCB2YWx1ZSkgewogICAgICAgICAgZGF0YVtvZmZzZXRdID0gdmFsdWUgPj4+IDI0ICYgMHhmZjsKICAgICAgICAgIGRhdGFbb2Zmc2V0ICsgMV0gPSB2YWx1ZSA+PiAxNiAmIDB4ZmY7CiAgICAgICAgICBkYXRhW29mZnNldCArIDJdID0gdmFsdWUgPj4gOCAmIDB4ZmY7CiAgICAgICAgICBkYXRhW29mZnNldCArIDNdID0gdmFsdWUgJiAweGZmOwogICAgICAgIH07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaXRlbVNpemUgPSAyOwogICAgICAgIGl0ZW1EZWNvZGUgPSBmdW5jdGlvbiBmb250SXRlbURlY29kZShkYXRhLCBvZmZzZXQpIHsKICAgICAgICAgIHJldHVybiBkYXRhW29mZnNldF0gPDwgOSB8IGRhdGFbb2Zmc2V0ICsgMV0gPDwgMTsKICAgICAgICB9OwogICAgICAgIGl0ZW1FbmNvZGUgPSBmdW5jdGlvbiBmb250SXRlbUVuY29kZShkYXRhLCBvZmZzZXQsIHZhbHVlKSB7CiAgICAgICAgICBkYXRhW29mZnNldF0gPSB2YWx1ZSA+PiA5ICYgMHhmZjsKICAgICAgICAgIGRhdGFbb2Zmc2V0ICsgMV0gPSB2YWx1ZSA+PiAxICYgMHhmZjsKICAgICAgICB9OwogICAgICB9CiAgICAgIGNvbnN0IG51bUdseXBoc091dCA9IGR1cEZpcnN0RW50cnkgPyBudW1HbHlwaHMgKyAxIDogbnVtR2x5cGhzOwogICAgICBjb25zdCBsb2NhRGF0YVNpemUgPSBpdGVtU2l6ZSAqICgxICsgbnVtR2x5cGhzT3V0KTsKICAgICAgY29uc3QgbG9jYURhdGEgPSBuZXcgVWludDhBcnJheShsb2NhRGF0YVNpemUpOwogICAgICBsb2NhRGF0YS5zZXQobG9jYS5kYXRhLnN1YmFycmF5KDAsIGxvY2FEYXRhU2l6ZSkpOwogICAgICBsb2NhLmRhdGEgPSBsb2NhRGF0YTsKICAgICAgY29uc3Qgb2xkR2x5ZkRhdGEgPSBnbHlmLmRhdGE7CiAgICAgIGNvbnN0IG9sZEdseWZEYXRhTGVuZ3RoID0gb2xkR2x5ZkRhdGEubGVuZ3RoOwogICAgICBjb25zdCBuZXdHbHlmRGF0YSA9IG5ldyBVaW50OEFycmF5KG9sZEdseWZEYXRhTGVuZ3RoKTsKICAgICAgbGV0IGksIGo7CiAgICAgIGNvbnN0IGxvY2FFbnRyaWVzID0gW107CiAgICAgIGZvciAoaSA9IDAsIGogPSAwOyBpIDwgbnVtR2x5cGhzICsgMTsgaSsrLCBqICs9IGl0ZW1TaXplKSB7CiAgICAgICAgbGV0IG9mZnNldCA9IGl0ZW1EZWNvZGUobG9jYURhdGEsIGopOwogICAgICAgIGlmIChvZmZzZXQgPiBvbGRHbHlmRGF0YUxlbmd0aCkgewogICAgICAgICAgb2Zmc2V0ID0gb2xkR2x5ZkRhdGFMZW5ndGg7CiAgICAgICAgfQogICAgICAgIGxvY2FFbnRyaWVzLnB1c2goewogICAgICAgICAgaW5kZXg6IGksCiAgICAgICAgICBvZmZzZXQsCiAgICAgICAgICBlbmRPZmZzZXQ6IDAKICAgICAgICB9KTsKICAgICAgfQogICAgICBsb2NhRW50cmllcy5zb3J0KChhLCBiKSA9PiBhLm9mZnNldCAtIGIub2Zmc2V0KTsKICAgICAgZm9yIChpID0gMDsgaSA8IG51bUdseXBoczsgaSsrKSB7CiAgICAgICAgbG9jYUVudHJpZXNbaV0uZW5kT2Zmc2V0ID0gbG9jYUVudHJpZXNbaSArIDFdLm9mZnNldDsKICAgICAgfQogICAgICBsb2NhRW50cmllcy5zb3J0KChhLCBiKSA9PiBhLmluZGV4IC0gYi5pbmRleCk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1HbHlwaHM7IGkrKykgewogICAgICAgIGNvbnN0IHsKICAgICAgICAgIG9mZnNldCwKICAgICAgICAgIGVuZE9mZnNldAogICAgICAgIH0gPSBsb2NhRW50cmllc1tpXTsKICAgICAgICBpZiAob2Zmc2V0ICE9PSAwIHx8IGVuZE9mZnNldCAhPT0gMCkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNvbnN0IG5leHRPZmZzZXQgPSBsb2NhRW50cmllc1tpICsgMV0ub2Zmc2V0OwogICAgICAgIGlmIChuZXh0T2Zmc2V0ID09PSAwKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgbG9jYUVudHJpZXNbaV0uZW5kT2Zmc2V0ID0gbmV4dE9mZnNldDsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjb25zdCBsYXN0ID0gbG9jYUVudHJpZXMuYXQoLTIpOwogICAgICBpZiAobGFzdC5vZmZzZXQgIT09IDAgJiYgbGFzdC5lbmRPZmZzZXQgPT09IDApIHsKICAgICAgICBsYXN0LmVuZE9mZnNldCA9IG9sZEdseWZEYXRhTGVuZ3RoOwogICAgICB9CiAgICAgIGNvbnN0IG1pc3NpbmdHbHlwaHMgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgICBsZXQgd3JpdGVPZmZzZXQgPSAwOwogICAgICBpdGVtRW5jb2RlKGxvY2FEYXRhLCAwLCB3cml0ZU9mZnNldCk7CiAgICAgIGZvciAoaSA9IDAsIGogPSBpdGVtU2l6ZTsgaSA8IG51bUdseXBoczsgaSsrLCBqICs9IGl0ZW1TaXplKSB7CiAgICAgICAgY29uc3QgZ2x5cGhQcm9maWxlID0gc2FuaXRpemVHbHlwaChvbGRHbHlmRGF0YSwgbG9jYUVudHJpZXNbaV0ub2Zmc2V0LCBsb2NhRW50cmllc1tpXS5lbmRPZmZzZXQsIG5ld0dseWZEYXRhLCB3cml0ZU9mZnNldCwgaGludHNWYWxpZCk7CiAgICAgICAgY29uc3QgbmV3TGVuZ3RoID0gZ2x5cGhQcm9maWxlLmxlbmd0aDsKICAgICAgICBpZiAobmV3TGVuZ3RoID09PSAwKSB7CiAgICAgICAgICBtaXNzaW5nR2x5cGhzW2ldID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKGdseXBoUHJvZmlsZS5zaXplT2ZJbnN0cnVjdGlvbnMgPiBtYXhTaXplT2ZJbnN0cnVjdGlvbnMpIHsKICAgICAgICAgIG1heFNpemVPZkluc3RydWN0aW9ucyA9IGdseXBoUHJvZmlsZS5zaXplT2ZJbnN0cnVjdGlvbnM7CiAgICAgICAgfQogICAgICAgIHdyaXRlT2Zmc2V0ICs9IG5ld0xlbmd0aDsKICAgICAgICBpdGVtRW5jb2RlKGxvY2FEYXRhLCBqLCB3cml0ZU9mZnNldCk7CiAgICAgIH0KICAgICAgaWYgKHdyaXRlT2Zmc2V0ID09PSAwKSB7CiAgICAgICAgY29uc3Qgc2ltcGxlR2x5cGggPSBuZXcgVWludDhBcnJheShbMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDksIDBdKTsKICAgICAgICBmb3IgKGkgPSAwLCBqID0gaXRlbVNpemU7IGkgPCBudW1HbHlwaHNPdXQ7IGkrKywgaiArPSBpdGVtU2l6ZSkgewogICAgICAgICAgaXRlbUVuY29kZShsb2NhRGF0YSwgaiwgc2ltcGxlR2x5cGgubGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgZ2x5Zi5kYXRhID0gc2ltcGxlR2x5cGg7CiAgICAgIH0gZWxzZSBpZiAoZHVwRmlyc3RFbnRyeSkgewogICAgICAgIGNvbnN0IGZpcnN0RW50cnlMZW5ndGggPSBpdGVtRGVjb2RlKGxvY2FEYXRhLCBpdGVtU2l6ZSk7CiAgICAgICAgaWYgKG5ld0dseWZEYXRhLmxlbmd0aCA+IGZpcnN0RW50cnlMZW5ndGggKyB3cml0ZU9mZnNldCkgewogICAgICAgICAgZ2x5Zi5kYXRhID0gbmV3R2x5ZkRhdGEuc3ViYXJyYXkoMCwgZmlyc3RFbnRyeUxlbmd0aCArIHdyaXRlT2Zmc2V0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZ2x5Zi5kYXRhID0gbmV3IFVpbnQ4QXJyYXkoZmlyc3RFbnRyeUxlbmd0aCArIHdyaXRlT2Zmc2V0KTsKICAgICAgICAgIGdseWYuZGF0YS5zZXQobmV3R2x5ZkRhdGEuc3ViYXJyYXkoMCwgd3JpdGVPZmZzZXQpKTsKICAgICAgICB9CiAgICAgICAgZ2x5Zi5kYXRhLnNldChuZXdHbHlmRGF0YS5zdWJhcnJheSgwLCBmaXJzdEVudHJ5TGVuZ3RoKSwgd3JpdGVPZmZzZXQpOwogICAgICAgIGl0ZW1FbmNvZGUobG9jYS5kYXRhLCBsb2NhRGF0YS5sZW5ndGggLSBpdGVtU2l6ZSwgd3JpdGVPZmZzZXQgKyBmaXJzdEVudHJ5TGVuZ3RoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBnbHlmLmRhdGEgPSBuZXdHbHlmRGF0YS5zdWJhcnJheSgwLCB3cml0ZU9mZnNldCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHsKICAgICAgICBtaXNzaW5nR2x5cGhzLAogICAgICAgIG1heFNpemVPZkluc3RydWN0aW9ucwogICAgICB9OwogICAgfQogICAgZnVuY3Rpb24gcmVhZFBvc3RTY3JpcHRUYWJsZShwb3N0LCBwcm9wZXJ0aWVzT2JqLCBtYXhwTnVtR2x5cGhzKSB7CiAgICAgIGNvbnN0IHN0YXJ0ID0gKGZvbnQuc3RhcnQgfHwgMCkgKyBwb3N0Lm9mZnNldDsKICAgICAgZm9udC5wb3MgPSBzdGFydDsKICAgICAgY29uc3QgbGVuZ3RoID0gcG9zdC5sZW5ndGgsCiAgICAgICAgZW5kID0gc3RhcnQgKyBsZW5ndGg7CiAgICAgIGNvbnN0IHZlcnNpb24gPSBmb250LmdldEludDMyKCk7CiAgICAgIGZvbnQuc2tpcCgyOCk7CiAgICAgIGxldCBnbHlwaE5hbWVzOwogICAgICBsZXQgdmFsaWQgPSB0cnVlOwogICAgICBsZXQgaTsKICAgICAgc3dpdGNoICh2ZXJzaW9uKSB7CiAgICAgICAgY2FzZSAweDAwMDEwMDAwOgogICAgICAgICAgZ2x5cGhOYW1lcyA9IE1hY1N0YW5kYXJkR2x5cGhPcmRlcmluZzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMHgwMDAyMDAwMDoKICAgICAgICAgIGNvbnN0IG51bUdseXBocyA9IGZvbnQuZ2V0VWludDE2KCk7CiAgICAgICAgICBpZiAobnVtR2x5cGhzICE9PSBtYXhwTnVtR2x5cGhzKSB7CiAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgZ2x5cGhOYW1lSW5kZXhlcyA9IFtdOwogICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bUdseXBoczsgKytpKSB7CiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZm9udC5nZXRVaW50MTYoKTsKICAgICAgICAgICAgaWYgKGluZGV4ID49IDMyNzY4KSB7CiAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBnbHlwaE5hbWVJbmRleGVzLnB1c2goaW5kZXgpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCF2YWxpZCkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IGN1c3RvbU5hbWVzID0gW10sCiAgICAgICAgICAgIHN0ckJ1ZiA9IFtdOwogICAgICAgICAgd2hpbGUgKGZvbnQucG9zIDwgZW5kKSB7CiAgICAgICAgICAgIGNvbnN0IHN0cmluZ0xlbmd0aCA9IGZvbnQuZ2V0Qnl0ZSgpOwogICAgICAgICAgICBzdHJCdWYubGVuZ3RoID0gc3RyaW5nTGVuZ3RoOwogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3RyaW5nTGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgICBzdHJCdWZbaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGZvbnQuZ2V0Qnl0ZSgpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjdXN0b21OYW1lcy5wdXNoKHN0ckJ1Zi5qb2luKCIiKSk7CiAgICAgICAgICB9CiAgICAgICAgICBnbHlwaE5hbWVzID0gW107CiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKICAgICAgICAgICAgY29uc3QgaiA9IGdseXBoTmFtZUluZGV4ZXNbaV07CiAgICAgICAgICAgIGlmIChqIDwgMjU4KSB7CiAgICAgICAgICAgICAgZ2x5cGhOYW1lcy5wdXNoKE1hY1N0YW5kYXJkR2x5cGhPcmRlcmluZ1tqXSk7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZ2x5cGhOYW1lcy5wdXNoKGN1c3RvbU5hbWVzW2ogLSAyNThdKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMHgwMDAzMDAwMDoKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICB3YXJuKCJVbmtub3duL3Vuc3VwcG9ydGVkIHBvc3QgdGFibGUgdmVyc2lvbiAiICsgdmVyc2lvbik7CiAgICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgICAgICAgaWYgKHByb3BlcnRpZXNPYmouZGVmYXVsdEVuY29kaW5nKSB7CiAgICAgICAgICAgIGdseXBoTmFtZXMgPSBwcm9wZXJ0aWVzT2JqLmRlZmF1bHRFbmNvZGluZzsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHByb3BlcnRpZXNPYmouZ2x5cGhOYW1lcyA9IGdseXBoTmFtZXM7CiAgICAgIHJldHVybiB2YWxpZDsKICAgIH0KICAgIGZ1bmN0aW9uIHJlYWROYW1lVGFibGUobmFtZVRhYmxlKSB7CiAgICAgIGNvbnN0IHN0YXJ0ID0gKGZvbnQuc3RhcnQgfHwgMCkgKyBuYW1lVGFibGUub2Zmc2V0OwogICAgICBmb250LnBvcyA9IHN0YXJ0OwogICAgICBjb25zdCBuYW1lcyA9IFtbXSwgW11dLAogICAgICAgIHJlY29yZHMgPSBbXTsKICAgICAgY29uc3QgbGVuZ3RoID0gbmFtZVRhYmxlLmxlbmd0aCwKICAgICAgICBlbmQgPSBzdGFydCArIGxlbmd0aDsKICAgICAgY29uc3QgZm9ybWF0ID0gZm9udC5nZXRVaW50MTYoKTsKICAgICAgY29uc3QgRk9STUFUXzBfSEVBREVSX0xFTkdUSCA9IDY7CiAgICAgIGlmIChmb3JtYXQgIT09IDAgfHwgbGVuZ3RoIDwgRk9STUFUXzBfSEVBREVSX0xFTkdUSCkgewogICAgICAgIHJldHVybiBbbmFtZXMsIHJlY29yZHNdOwogICAgICB9CiAgICAgIGNvbnN0IG51bVJlY29yZHMgPSBmb250LmdldFVpbnQxNigpOwogICAgICBjb25zdCBzdHJpbmdzU3RhcnQgPSBmb250LmdldFVpbnQxNigpOwogICAgICBjb25zdCBOQU1FX1JFQ09SRF9MRU5HVEggPSAxMjsKICAgICAgbGV0IGksIGlpOwogICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtUmVjb3JkcyAmJiBmb250LnBvcyArIE5BTUVfUkVDT1JEX0xFTkdUSCA8PSBlbmQ7IGkrKykgewogICAgICAgIGNvbnN0IHIgPSB7CiAgICAgICAgICBwbGF0Zm9ybTogZm9udC5nZXRVaW50MTYoKSwKICAgICAgICAgIGVuY29kaW5nOiBmb250LmdldFVpbnQxNigpLAogICAgICAgICAgbGFuZ3VhZ2U6IGZvbnQuZ2V0VWludDE2KCksCiAgICAgICAgICBuYW1lOiBmb250LmdldFVpbnQxNigpLAogICAgICAgICAgbGVuZ3RoOiBmb250LmdldFVpbnQxNigpLAogICAgICAgICAgb2Zmc2V0OiBmb250LmdldFVpbnQxNigpCiAgICAgICAgfTsKICAgICAgICBpZiAoaXNNYWNOYW1lUmVjb3JkKHIpIHx8IGlzV2luTmFtZVJlY29yZChyKSkgewogICAgICAgICAgcmVjb3Jkcy5wdXNoKHIpOwogICAgICAgIH0KICAgICAgfQogICAgICBmb3IgKGkgPSAwLCBpaSA9IHJlY29yZHMubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICAgIGNvbnN0IHJlY29yZCA9IHJlY29yZHNbaV07CiAgICAgICAgaWYgKHJlY29yZC5sZW5ndGggPD0gMCkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHBvcyA9IHN0YXJ0ICsgc3RyaW5nc1N0YXJ0ICsgcmVjb3JkLm9mZnNldDsKICAgICAgICBpZiAocG9zICsgcmVjb3JkLmxlbmd0aCA+IGVuZCkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGZvbnQucG9zID0gcG9zOwogICAgICAgIGNvbnN0IG5hbWVJbmRleCA9IHJlY29yZC5uYW1lOwogICAgICAgIGlmIChyZWNvcmQuZW5jb2RpbmcpIHsKICAgICAgICAgIGxldCBzdHIgPSAiIjsKICAgICAgICAgIGZvciAobGV0IGogPSAwLCBqaiA9IHJlY29yZC5sZW5ndGg7IGogPCBqajsgaiArPSAyKSB7CiAgICAgICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGZvbnQuZ2V0VWludDE2KCkpOwogICAgICAgICAgfQogICAgICAgICAgbmFtZXNbMV1bbmFtZUluZGV4XSA9IHN0cjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbmFtZXNbMF1bbmFtZUluZGV4XSA9IGZvbnQuZ2V0U3RyaW5nKHJlY29yZC5sZW5ndGgpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gW25hbWVzLCByZWNvcmRzXTsKICAgIH0KICAgIGNvbnN0IFRUT3BzU3RhY2tEZWx0YXMgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgLTIsIC0yLCAtMiwgLTIsIDAsIDAsIC0yLCAtNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAwLCAwLCAtMSwgMCwgLTEsIC0xLCAtMSwgLTEsIDEsIC0xLCAtOTk5LCAwLCAxLCAwLCAtMSwgLTIsIDAsIC0xLCAtMiwgLTEsIC0xLCAwLCAtMSwgLTEsIDAsIDAsIC05OTksIC05OTksIC0xLCAtMSwgLTEsIC0xLCAtMiwgLTk5OSwgLTIsIC0yLCAtOTk5LCAwLCAtMiwgLTIsIDAsIDAsIC0yLCAwLCAtMiwgMCwgMCwgMCwgLTIsIC0xLCAtMSwgMSwgMSwgMCwgMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDAsIDAsIC0xLCAwLCAtMSwgLTEsIDAsIC05OTksIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIC0yLCAtOTk5LCAtOTk5LCAtOTk5LCAtOTk5LCAtOTk5LCAtMSwgLTEsIC0yLCAtMiwgMCwgMCwgMCwgMCwgLTEsIC0xLCAtOTk5LCAtMiwgLTIsIDAsIDAsIC0xLCAtMiwgLTIsIDAsIDAsIDAsIC0xLCAtMSwgLTEsIC0yXTsKICAgIGZ1bmN0aW9uIHNhbml0aXplVFRQcm9ncmFtKHRhYmxlLCB0dENvbnRleHQpIHsKICAgICAgbGV0IGRhdGEgPSB0YWJsZS5kYXRhOwogICAgICBsZXQgaSA9IDAsCiAgICAgICAgaiwKICAgICAgICBuLAogICAgICAgIGIsCiAgICAgICAgZnVuY0lkLAogICAgICAgIHBjLAogICAgICAgIGxhc3RFbmRmID0gMCwKICAgICAgICBsYXN0RGVmZiA9IDA7CiAgICAgIGNvbnN0IHN0YWNrID0gW107CiAgICAgIGNvbnN0IGNhbGxzdGFjayA9IFtdOwogICAgICBjb25zdCBmdW5jdGlvbnNDYWxsZWQgPSBbXTsKICAgICAgbGV0IHRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucyA9IHR0Q29udGV4dC50b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnM7CiAgICAgIGxldCBpbkZERUYgPSBmYWxzZSwKICAgICAgICBpZkxldmVsID0gMCwKICAgICAgICBpbkVMU0UgPSAwOwogICAgICBmb3IgKGxldCBpaSA9IGRhdGEubGVuZ3RoOyBpIDwgaWk7KSB7CiAgICAgICAgY29uc3Qgb3AgPSBkYXRhW2krK107CiAgICAgICAgaWYgKG9wID09PSAweDQwKSB7CiAgICAgICAgICBuID0gZGF0YVtpKytdOwogICAgICAgICAgaWYgKGluRkRFRiB8fCBpbkVMU0UpIHsKICAgICAgICAgICAgaSArPSBuOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG47IGorKykgewogICAgICAgICAgICAgIHN0YWNrLnB1c2goZGF0YVtpKytdKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAob3AgPT09IDB4NDEpIHsKICAgICAgICAgIG4gPSBkYXRhW2krK107CiAgICAgICAgICBpZiAoaW5GREVGIHx8IGluRUxTRSkgewogICAgICAgICAgICBpICs9IG4gKiAyOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG47IGorKykgewogICAgICAgICAgICAgIGIgPSBkYXRhW2krK107CiAgICAgICAgICAgICAgc3RhY2sucHVzaChiIDw8IDggfCBkYXRhW2krK10pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICgob3AgJiAweGY4KSA9PT0gMHhiMCkgewogICAgICAgICAgbiA9IG9wIC0gMHhiMCArIDE7CiAgICAgICAgICBpZiAoaW5GREVGIHx8IGluRUxTRSkgewogICAgICAgICAgICBpICs9IG47CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbjsgaisrKSB7CiAgICAgICAgICAgICAgc3RhY2sucHVzaChkYXRhW2krK10pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICgob3AgJiAweGY4KSA9PT0gMHhiOCkgewogICAgICAgICAgbiA9IG9wIC0gMHhiOCArIDE7CiAgICAgICAgICBpZiAoaW5GREVGIHx8IGluRUxTRSkgewogICAgICAgICAgICBpICs9IG4gKiAyOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG47IGorKykgewogICAgICAgICAgICAgIGIgPSBkYXRhW2krK107CiAgICAgICAgICAgICAgc3RhY2sucHVzaChzaWduZWRJbnQxNihiLCBkYXRhW2krK10pKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAob3AgPT09IDB4MmIgJiYgIXRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucykgewogICAgICAgICAgaWYgKCFpbkZERUYgJiYgIWluRUxTRSkgewogICAgICAgICAgICBmdW5jSWQgPSBzdGFjay5hdCgtMSk7CiAgICAgICAgICAgIGlmIChpc05hTihmdW5jSWQpKSB7CiAgICAgICAgICAgICAgaW5mbygiVFQ6IENBTEwgZW1wdHkgc3RhY2sgKG9yIGludmFsaWQgZW50cnkpLiIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHR0Q29udGV4dC5mdW5jdGlvbnNVc2VkW2Z1bmNJZF0gPSB0cnVlOwogICAgICAgICAgICAgIGlmIChmdW5jSWQgaW4gdHRDb250ZXh0LmZ1bmN0aW9uc1N0YWNrRGVsdGFzKSB7CiAgICAgICAgICAgICAgICBjb25zdCBuZXdTdGFja0xlbmd0aCA9IHN0YWNrLmxlbmd0aCArIHR0Q29udGV4dC5mdW5jdGlvbnNTdGFja0RlbHRhc1tmdW5jSWRdOwogICAgICAgICAgICAgICAgaWYgKG5ld1N0YWNrTGVuZ3RoIDwgMCkgewogICAgICAgICAgICAgICAgICB3YXJuKCJUVDogQ0FMTCBpbnZhbGlkIGZ1bmN0aW9ucyBzdGFjayBkZWx0YS4iKTsKICAgICAgICAgICAgICAgICAgdHRDb250ZXh0LmhpbnRzVmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhY2subGVuZ3RoID0gbmV3U3RhY2tMZW5ndGg7CiAgICAgICAgICAgICAgfSBlbHNlIGlmIChmdW5jSWQgaW4gdHRDb250ZXh0LmZ1bmN0aW9uc0RlZmluZWQgJiYgIWZ1bmN0aW9uc0NhbGxlZC5pbmNsdWRlcyhmdW5jSWQpKSB7CiAgICAgICAgICAgICAgICBjYWxsc3RhY2sucHVzaCh7CiAgICAgICAgICAgICAgICAgIGRhdGEsCiAgICAgICAgICAgICAgICAgIGksCiAgICAgICAgICAgICAgICAgIHN0YWNrVG9wOiBzdGFjay5sZW5ndGggLSAxCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGZ1bmN0aW9uc0NhbGxlZC5wdXNoKGZ1bmNJZCk7CiAgICAgICAgICAgICAgICBwYyA9IHR0Q29udGV4dC5mdW5jdGlvbnNEZWZpbmVkW2Z1bmNJZF07CiAgICAgICAgICAgICAgICBpZiAoIXBjKSB7CiAgICAgICAgICAgICAgICAgIHdhcm4oIlRUOiBDQUxMIG5vbi1leGlzdGVudCBmdW5jdGlvbiIpOwogICAgICAgICAgICAgICAgICB0dENvbnRleHQuaGludHNWYWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkYXRhID0gcGMuZGF0YTsKICAgICAgICAgICAgICAgIGkgPSBwYy5pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAob3AgPT09IDB4MmMgJiYgIXRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucykgewogICAgICAgICAgaWYgKGluRkRFRiB8fCBpbkVMU0UpIHsKICAgICAgICAgICAgd2FybigiVFQ6IG5lc3RlZCBGREVGcyBub3QgYWxsb3dlZCIpOwogICAgICAgICAgICB0b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnMgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgaW5GREVGID0gdHJ1ZTsKICAgICAgICAgIGxhc3REZWZmID0gaTsKICAgICAgICAgIGZ1bmNJZCA9IHN0YWNrLnBvcCgpOwogICAgICAgICAgdHRDb250ZXh0LmZ1bmN0aW9uc0RlZmluZWRbZnVuY0lkXSA9IHsKICAgICAgICAgICAgZGF0YSwKICAgICAgICAgICAgaQogICAgICAgICAgfTsKICAgICAgICB9IGVsc2UgaWYgKG9wID09PSAweDJkKSB7CiAgICAgICAgICBpZiAoaW5GREVGKSB7CiAgICAgICAgICAgIGluRkRFRiA9IGZhbHNlOwogICAgICAgICAgICBsYXN0RW5kZiA9IGk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwYyA9IGNhbGxzdGFjay5wb3AoKTsKICAgICAgICAgICAgaWYgKCFwYykgewogICAgICAgICAgICAgIHdhcm4oIlRUOiBFTkRGIGJhZCBzdGFjayIpOwogICAgICAgICAgICAgIHR0Q29udGV4dC5oaW50c1ZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmNJZCA9IGZ1bmN0aW9uc0NhbGxlZC5wb3AoKTsKICAgICAgICAgICAgZGF0YSA9IHBjLmRhdGE7CiAgICAgICAgICAgIGkgPSBwYy5pOwogICAgICAgICAgICB0dENvbnRleHQuZnVuY3Rpb25zU3RhY2tEZWx0YXNbZnVuY0lkXSA9IHN0YWNrLmxlbmd0aCAtIHBjLnN0YWNrVG9wOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAob3AgPT09IDB4ODkpIHsKICAgICAgICAgIGlmIChpbkZERUYgfHwgaW5FTFNFKSB7CiAgICAgICAgICAgIHdhcm4oIlRUOiBuZXN0ZWQgSURFRnMgbm90IGFsbG93ZWQiKTsKICAgICAgICAgICAgdG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGluRkRFRiA9IHRydWU7CiAgICAgICAgICBsYXN0RGVmZiA9IGk7CiAgICAgICAgfSBlbHNlIGlmIChvcCA9PT0gMHg1OCkgewogICAgICAgICAgKytpZkxldmVsOwogICAgICAgIH0gZWxzZSBpZiAob3AgPT09IDB4MWIpIHsKICAgICAgICAgIGluRUxTRSA9IGlmTGV2ZWw7CiAgICAgICAgfSBlbHNlIGlmIChvcCA9PT0gMHg1OSkgewogICAgICAgICAgaWYgKGluRUxTRSA9PT0gaWZMZXZlbCkgewogICAgICAgICAgICBpbkVMU0UgPSAwOwogICAgICAgICAgfQogICAgICAgICAgLS1pZkxldmVsOwogICAgICAgIH0gZWxzZSBpZiAob3AgPT09IDB4MWMpIHsKICAgICAgICAgIGlmICghaW5GREVGICYmICFpbkVMU0UpIHsKICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gc3RhY2suYXQoLTEpOwogICAgICAgICAgICBpZiAob2Zmc2V0ID4gMCkgewogICAgICAgICAgICAgIGkgKz0gb2Zmc2V0IC0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIWluRkRFRiAmJiAhaW5FTFNFKSB7CiAgICAgICAgICBsZXQgc3RhY2tEZWx0YSA9IDA7CiAgICAgICAgICBpZiAob3AgPD0gMHg4ZSkgewogICAgICAgICAgICBzdGFja0RlbHRhID0gVFRPcHNTdGFja0RlbHRhc1tvcF07CiAgICAgICAgICB9IGVsc2UgaWYgKG9wID49IDB4YzAgJiYgb3AgPD0gMHhkZikgewogICAgICAgICAgICBzdGFja0RlbHRhID0gLTE7CiAgICAgICAgICB9IGVsc2UgaWYgKG9wID49IDB4ZTApIHsKICAgICAgICAgICAgc3RhY2tEZWx0YSA9IC0yOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG9wID49IDB4NzEgJiYgb3AgPD0gMHg3NSkgewogICAgICAgICAgICBuID0gc3RhY2sucG9wKCk7CiAgICAgICAgICAgIGlmICghaXNOYU4obikpIHsKICAgICAgICAgICAgICBzdGFja0RlbHRhID0gLW4gKiAyOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoc3RhY2tEZWx0YSA8IDAgJiYgc3RhY2subGVuZ3RoID4gMCkgewogICAgICAgICAgICBzdGFjay5wb3AoKTsKICAgICAgICAgICAgc3RhY2tEZWx0YSsrOwogICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKHN0YWNrRGVsdGEgPiAwKSB7CiAgICAgICAgICAgIHN0YWNrLnB1c2goTmFOKTsKICAgICAgICAgICAgc3RhY2tEZWx0YS0tOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICB0dENvbnRleHQudG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zID0gdG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zOwogICAgICBjb25zdCBjb250ZW50ID0gW2RhdGFdOwogICAgICBpZiAoaSA+IGRhdGEubGVuZ3RoKSB7CiAgICAgICAgY29udGVudC5wdXNoKG5ldyBVaW50OEFycmF5KGkgLSBkYXRhLmxlbmd0aCkpOwogICAgICB9CiAgICAgIGlmIChsYXN0RGVmZiA+IGxhc3RFbmRmKSB7CiAgICAgICAgd2FybigiVFQ6IGNvbXBsZW1lbnRpbmcgYSBtaXNzaW5nIGZ1bmN0aW9uIHRhaWwiKTsKICAgICAgICBjb250ZW50LnB1c2gobmV3IFVpbnQ4QXJyYXkoWzB4MjIsIDB4MmRdKSk7CiAgICAgIH0KICAgICAgZm9sZFRUVGFibGUodGFibGUsIGNvbnRlbnQpOwogICAgfQogICAgZnVuY3Rpb24gY2hlY2tJbnZhbGlkRnVuY3Rpb25zKHR0Q29udGV4dCwgbWF4RnVuY3Rpb25EZWZzKSB7CiAgICAgIGlmICh0dENvbnRleHQudG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICh0dENvbnRleHQuZnVuY3Rpb25zRGVmaW5lZC5sZW5ndGggPiBtYXhGdW5jdGlvbkRlZnMpIHsKICAgICAgICB3YXJuKCJUVDogbW9yZSBmdW5jdGlvbnMgZGVmaW5lZCB0aGFuIGV4cGVjdGVkIik7CiAgICAgICAgdHRDb250ZXh0LmhpbnRzVmFsaWQgPSBmYWxzZTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgZm9yIChsZXQgaiA9IDAsIGpqID0gdHRDb250ZXh0LmZ1bmN0aW9uc1VzZWQubGVuZ3RoOyBqIDwgamo7IGorKykgewogICAgICAgIGlmIChqID4gbWF4RnVuY3Rpb25EZWZzKSB7CiAgICAgICAgICB3YXJuKCJUVDogaW52YWxpZCBmdW5jdGlvbiBpZDogIiArIGopOwogICAgICAgICAgdHRDb250ZXh0LmhpbnRzVmFsaWQgPSBmYWxzZTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKHR0Q29udGV4dC5mdW5jdGlvbnNVc2VkW2pdICYmICF0dENvbnRleHQuZnVuY3Rpb25zRGVmaW5lZFtqXSkgewogICAgICAgICAgd2FybigiVFQ6IHVuZGVmaW5lZCBmdW5jdGlvbjogIiArIGopOwogICAgICAgICAgdHRDb250ZXh0LmhpbnRzVmFsaWQgPSBmYWxzZTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGZvbGRUVFRhYmxlKHRhYmxlLCBjb250ZW50KSB7CiAgICAgIGlmIChjb250ZW50Lmxlbmd0aCA+IDEpIHsKICAgICAgICBsZXQgbmV3TGVuZ3RoID0gMDsKICAgICAgICBsZXQgaiwgamo7CiAgICAgICAgZm9yIChqID0gMCwgamogPSBjb250ZW50Lmxlbmd0aDsgaiA8IGpqOyBqKyspIHsKICAgICAgICAgIG5ld0xlbmd0aCArPSBjb250ZW50W2pdLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgbmV3TGVuZ3RoID0gbmV3TGVuZ3RoICsgMyAmIH4zOwogICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KG5ld0xlbmd0aCk7CiAgICAgICAgbGV0IHBvcyA9IDA7CiAgICAgICAgZm9yIChqID0gMCwgamogPSBjb250ZW50Lmxlbmd0aDsgaiA8IGpqOyBqKyspIHsKICAgICAgICAgIHJlc3VsdC5zZXQoY29udGVudFtqXSwgcG9zKTsKICAgICAgICAgIHBvcyArPSBjb250ZW50W2pdLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgdGFibGUuZGF0YSA9IHJlc3VsdDsKICAgICAgICB0YWJsZS5sZW5ndGggPSBuZXdMZW5ndGg7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIHNhbml0aXplVFRQcm9ncmFtcyhmcGdtLCBwcmVwLCBjdnQsIG1heEZ1bmN0aW9uRGVmcykgewogICAgICBjb25zdCB0dENvbnRleHQgPSB7CiAgICAgICAgZnVuY3Rpb25zRGVmaW5lZDogW10sCiAgICAgICAgZnVuY3Rpb25zVXNlZDogW10sCiAgICAgICAgZnVuY3Rpb25zU3RhY2tEZWx0YXM6IFtdLAogICAgICAgIHRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9uczogZmFsc2UsCiAgICAgICAgaGludHNWYWxpZDogdHJ1ZQogICAgICB9OwogICAgICBpZiAoZnBnbSkgewogICAgICAgIHNhbml0aXplVFRQcm9ncmFtKGZwZ20sIHR0Q29udGV4dCk7CiAgICAgIH0KICAgICAgaWYgKHByZXApIHsKICAgICAgICBzYW5pdGl6ZVRUUHJvZ3JhbShwcmVwLCB0dENvbnRleHQpOwogICAgICB9CiAgICAgIGlmIChmcGdtKSB7CiAgICAgICAgY2hlY2tJbnZhbGlkRnVuY3Rpb25zKHR0Q29udGV4dCwgbWF4RnVuY3Rpb25EZWZzKTsKICAgICAgfQogICAgICBpZiAoY3Z0ICYmIGN2dC5sZW5ndGggJiAxKSB7CiAgICAgICAgY29uc3QgY3Z0RGF0YSA9IG5ldyBVaW50OEFycmF5KGN2dC5sZW5ndGggKyAxKTsKICAgICAgICBjdnREYXRhLnNldChjdnQuZGF0YSk7CiAgICAgICAgY3Z0LmRhdGEgPSBjdnREYXRhOwogICAgICB9CiAgICAgIHJldHVybiB0dENvbnRleHQuaGludHNWYWxpZDsKICAgIH0KICAgIGZvbnQgPSBuZXcgU3RyZWFtKG5ldyBVaW50OEFycmF5KGZvbnQuZ2V0Qnl0ZXMoKSkpOwogICAgbGV0IGhlYWRlciwgdGFibGVzOwogICAgaWYgKGlzVHJ1ZVR5cGVDb2xsZWN0aW9uRmlsZShmb250KSkgewogICAgICBjb25zdCB0dGNEYXRhID0gcmVhZFRydWVUeXBlQ29sbGVjdGlvbkRhdGEoZm9udCwgdGhpcy5uYW1lKTsKICAgICAgaGVhZGVyID0gdHRjRGF0YS5oZWFkZXI7CiAgICAgIHRhYmxlcyA9IHR0Y0RhdGEudGFibGVzOwogICAgfSBlbHNlIHsKICAgICAgaGVhZGVyID0gcmVhZE9wZW5UeXBlSGVhZGVyKGZvbnQpOwogICAgICB0YWJsZXMgPSByZWFkVGFibGVzKGZvbnQsIGhlYWRlci5udW1UYWJsZXMpOwogICAgfQogICAgbGV0IGNmZiwgY2ZmRmlsZTsKICAgIGNvbnN0IGlzVHJ1ZVR5cGUgPSAhdGFibGVzWyJDRkYgIl07CiAgICBpZiAoIWlzVHJ1ZVR5cGUpIHsKICAgICAgY29uc3QgaXNDb21wb3NpdGUgPSBwcm9wZXJ0aWVzLmNvbXBvc2l0ZSAmJiAocHJvcGVydGllcy5jaWRUb0dpZE1hcD8ubGVuZ3RoID4gMCB8fCAhKHByb3BlcnRpZXMuY01hcCBpbnN0YW5jZW9mIElkZW50aXR5Q01hcCkpOwogICAgICBpZiAoaGVhZGVyLnZlcnNpb24gPT09ICJPVFRPIiAmJiAhaXNDb21wb3NpdGUgfHwgIXRhYmxlcy5oZWFkIHx8ICF0YWJsZXMuaGhlYSB8fCAhdGFibGVzLm1heHAgfHwgIXRhYmxlcy5wb3N0KSB7CiAgICAgICAgY2ZmRmlsZSA9IG5ldyBTdHJlYW0odGFibGVzWyJDRkYgIl0uZGF0YSk7CiAgICAgICAgY2ZmID0gbmV3IENGRkZvbnQoY2ZmRmlsZSwgcHJvcGVydGllcyk7CiAgICAgICAgYWRqdXN0V2lkdGhzKHByb3BlcnRpZXMpOwogICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnQobmFtZSwgY2ZmLCBwcm9wZXJ0aWVzKTsKICAgICAgfQogICAgICBkZWxldGUgdGFibGVzLmdseWY7CiAgICAgIGRlbGV0ZSB0YWJsZXMubG9jYTsKICAgICAgZGVsZXRlIHRhYmxlcy5mcGdtOwogICAgICBkZWxldGUgdGFibGVzLnByZXA7CiAgICAgIGRlbGV0ZSB0YWJsZXNbImN2dCAiXTsKICAgICAgdGhpcy5pc09wZW5UeXBlID0gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIGlmICghdGFibGVzLmxvY2EpIHsKICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoJ1JlcXVpcmVkICJsb2NhIiB0YWJsZSBpcyBub3QgZm91bmQnKTsKICAgICAgfQogICAgICBpZiAoIXRhYmxlcy5nbHlmKSB7CiAgICAgICAgd2FybignUmVxdWlyZWQgImdseWYiIHRhYmxlIGlzIG5vdCBmb3VuZCAtLSB0cnlpbmcgdG8gcmVjb3Zlci4nKTsKICAgICAgICB0YWJsZXMuZ2x5ZiA9IHsKICAgICAgICAgIHRhZzogImdseWYiLAogICAgICAgICAgZGF0YTogbmV3IFVpbnQ4QXJyYXkoMCkKICAgICAgICB9OwogICAgICB9CiAgICAgIHRoaXMuaXNPcGVuVHlwZSA9IGZhbHNlOwogICAgfQogICAgaWYgKCF0YWJsZXMubWF4cCkgewogICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoJ1JlcXVpcmVkICJtYXhwIiB0YWJsZSBpcyBub3QgZm91bmQnKTsKICAgIH0KICAgIGZvbnQucG9zID0gKGZvbnQuc3RhcnQgfHwgMCkgKyB0YWJsZXMubWF4cC5vZmZzZXQ7CiAgICBsZXQgdmVyc2lvbiA9IGZvbnQuZ2V0SW50MzIoKTsKICAgIGNvbnN0IG51bUdseXBocyA9IGZvbnQuZ2V0VWludDE2KCk7CiAgICBpZiAodmVyc2lvbiAhPT0gMHgwMDAxMDAwMCAmJiB2ZXJzaW9uICE9PSAweDAwMDA1MDAwKSB7CiAgICAgIGlmICh0YWJsZXMubWF4cC5sZW5ndGggPT09IDYpIHsKICAgICAgICB2ZXJzaW9uID0gMHgwMDA1MDAwOwogICAgICB9IGVsc2UgaWYgKHRhYmxlcy5tYXhwLmxlbmd0aCA+PSAzMikgewogICAgICAgIHZlcnNpb24gPSAweDAwMDEwMDAwOwogICAgICB9IGVsc2UgewogICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcihgIm1heHAiIHRhYmxlIGhhcyBhIHdyb25nIHZlcnNpb24gbnVtYmVyYCk7CiAgICAgIH0KICAgICAgd3JpdGVVaW50MzIodGFibGVzLm1heHAuZGF0YSwgMCwgdmVyc2lvbik7CiAgICB9CiAgICBpZiAocHJvcGVydGllcy5zY2FsZUZhY3RvcnM/Lmxlbmd0aCA9PT0gbnVtR2x5cGhzICYmIGlzVHJ1ZVR5cGUpIHsKICAgICAgY29uc3QgewogICAgICAgIHNjYWxlRmFjdG9ycwogICAgICB9ID0gcHJvcGVydGllczsKICAgICAgY29uc3QgaXNHbHlwaExvY2F0aW9uc0xvbmcgPSBpbnQxNih0YWJsZXMuaGVhZC5kYXRhWzUwXSwgdGFibGVzLmhlYWQuZGF0YVs1MV0pOwogICAgICBjb25zdCBnbHlwaHMgPSBuZXcgR2x5ZlRhYmxlKHsKICAgICAgICBnbHlmVGFibGU6IHRhYmxlcy5nbHlmLmRhdGEsCiAgICAgICAgaXNHbHlwaExvY2F0aW9uc0xvbmcsCiAgICAgICAgbG9jYVRhYmxlOiB0YWJsZXMubG9jYS5kYXRhLAogICAgICAgIG51bUdseXBocwogICAgICB9KTsKICAgICAgZ2x5cGhzLnNjYWxlKHNjYWxlRmFjdG9ycyk7CiAgICAgIGNvbnN0IHsKICAgICAgICBnbHlmLAogICAgICAgIGxvY2EsCiAgICAgICAgaXNMb2NhdGlvbkxvbmcKICAgICAgfSA9IGdseXBocy53cml0ZSgpOwogICAgICB0YWJsZXMuZ2x5Zi5kYXRhID0gZ2x5ZjsKICAgICAgdGFibGVzLmxvY2EuZGF0YSA9IGxvY2E7CiAgICAgIGlmIChpc0xvY2F0aW9uTG9uZyAhPT0gISFpc0dseXBoTG9jYXRpb25zTG9uZykgewogICAgICAgIHRhYmxlcy5oZWFkLmRhdGFbNTBdID0gMDsKICAgICAgICB0YWJsZXMuaGVhZC5kYXRhWzUxXSA9IGlzTG9jYXRpb25Mb25nID8gMSA6IDA7CiAgICAgIH0KICAgICAgY29uc3QgbWV0cmljcyA9IHRhYmxlcy5obXR4LmRhdGE7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyBpKyspIHsKICAgICAgICBjb25zdCBqID0gNCAqIGk7CiAgICAgICAgY29uc3QgYWR2YW5jZVdpZHRoID0gTWF0aC5yb3VuZChzY2FsZUZhY3RvcnNbaV0gKiBpbnQxNihtZXRyaWNzW2pdLCBtZXRyaWNzW2ogKyAxXSkpOwogICAgICAgIG1ldHJpY3Nbal0gPSBhZHZhbmNlV2lkdGggPj4gOCAmIDB4ZmY7CiAgICAgICAgbWV0cmljc1tqICsgMV0gPSBhZHZhbmNlV2lkdGggJiAweGZmOwogICAgICAgIGNvbnN0IGxzYiA9IE1hdGgucm91bmQoc2NhbGVGYWN0b3JzW2ldICogc2lnbmVkSW50MTYobWV0cmljc1tqICsgMl0sIG1ldHJpY3NbaiArIDNdKSk7CiAgICAgICAgd3JpdGVTaWduZWRJbnQxNihtZXRyaWNzLCBqICsgMiwgbHNiKTsKICAgICAgfQogICAgfQogICAgbGV0IG51bUdseXBoc091dCA9IG51bUdseXBocyArIDE7CiAgICBsZXQgZHVwRmlyc3RFbnRyeSA9IHRydWU7CiAgICBpZiAobnVtR2x5cGhzT3V0ID4gMHhmZmZmKSB7CiAgICAgIGR1cEZpcnN0RW50cnkgPSBmYWxzZTsKICAgICAgbnVtR2x5cGhzT3V0ID0gbnVtR2x5cGhzOwogICAgICB3YXJuKCJOb3QgZW5vdWdoIHNwYWNlIGluIGdseWZzIHRvIGR1cGxpY2F0ZSBmaXJzdCBnbHlwaC4iKTsKICAgIH0KICAgIGxldCBtYXhGdW5jdGlvbkRlZnMgPSAwOwogICAgbGV0IG1heFNpemVPZkluc3RydWN0aW9ucyA9IDA7CiAgICBpZiAodmVyc2lvbiA+PSAweDAwMDEwMDAwICYmIHRhYmxlcy5tYXhwLmxlbmd0aCA+PSAzMikgewogICAgICBmb250LnBvcyArPSA4OwogICAgICBjb25zdCBtYXhab25lcyA9IGZvbnQuZ2V0VWludDE2KCk7CiAgICAgIGlmIChtYXhab25lcyA+IDIpIHsKICAgICAgICB0YWJsZXMubWF4cC5kYXRhWzE0XSA9IDA7CiAgICAgICAgdGFibGVzLm1heHAuZGF0YVsxNV0gPSAyOwogICAgICB9CiAgICAgIGZvbnQucG9zICs9IDQ7CiAgICAgIG1heEZ1bmN0aW9uRGVmcyA9IGZvbnQuZ2V0VWludDE2KCk7CiAgICAgIGZvbnQucG9zICs9IDQ7CiAgICAgIG1heFNpemVPZkluc3RydWN0aW9ucyA9IGZvbnQuZ2V0VWludDE2KCk7CiAgICB9CiAgICB0YWJsZXMubWF4cC5kYXRhWzRdID0gbnVtR2x5cGhzT3V0ID4+IDg7CiAgICB0YWJsZXMubWF4cC5kYXRhWzVdID0gbnVtR2x5cGhzT3V0ICYgMjU1OwogICAgY29uc3QgaGludHNWYWxpZCA9IHNhbml0aXplVFRQcm9ncmFtcyh0YWJsZXMuZnBnbSwgdGFibGVzLnByZXAsIHRhYmxlc1siY3Z0ICJdLCBtYXhGdW5jdGlvbkRlZnMpOwogICAgaWYgKCFoaW50c1ZhbGlkKSB7CiAgICAgIGRlbGV0ZSB0YWJsZXMuZnBnbTsKICAgICAgZGVsZXRlIHRhYmxlcy5wcmVwOwogICAgICBkZWxldGUgdGFibGVzWyJjdnQgIl07CiAgICB9CiAgICBzYW5pdGl6ZU1ldHJpY3MoZm9udCwgdGFibGVzLmhoZWEsIHRhYmxlcy5obXR4LCB0YWJsZXMuaGVhZCwgbnVtR2x5cGhzT3V0LCBkdXBGaXJzdEVudHJ5KTsKICAgIGlmICghdGFibGVzLmhlYWQpIHsKICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKCdSZXF1aXJlZCAiaGVhZCIgdGFibGUgaXMgbm90IGZvdW5kJyk7CiAgICB9CiAgICBzYW5pdGl6ZUhlYWQodGFibGVzLmhlYWQsIG51bUdseXBocywgaXNUcnVlVHlwZSA/IHRhYmxlcy5sb2NhLmxlbmd0aCA6IDApOwogICAgbGV0IG1pc3NpbmdHbHlwaHMgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgaWYgKGlzVHJ1ZVR5cGUpIHsKICAgICAgY29uc3QgaXNHbHlwaExvY2F0aW9uc0xvbmcgPSBpbnQxNih0YWJsZXMuaGVhZC5kYXRhWzUwXSwgdGFibGVzLmhlYWQuZGF0YVs1MV0pOwogICAgICBjb25zdCBnbHlwaHNJbmZvID0gc2FuaXRpemVHbHlwaExvY2F0aW9ucyh0YWJsZXMubG9jYSwgdGFibGVzLmdseWYsIG51bUdseXBocywgaXNHbHlwaExvY2F0aW9uc0xvbmcsIGhpbnRzVmFsaWQsIGR1cEZpcnN0RW50cnksIG1heFNpemVPZkluc3RydWN0aW9ucyk7CiAgICAgIG1pc3NpbmdHbHlwaHMgPSBnbHlwaHNJbmZvLm1pc3NpbmdHbHlwaHM7CiAgICAgIGlmICh2ZXJzaW9uID49IDB4MDAwMTAwMDAgJiYgdGFibGVzLm1heHAubGVuZ3RoID49IDMyKSB7CiAgICAgICAgdGFibGVzLm1heHAuZGF0YVsyNl0gPSBnbHlwaHNJbmZvLm1heFNpemVPZkluc3RydWN0aW9ucyA+PiA4OwogICAgICAgIHRhYmxlcy5tYXhwLmRhdGFbMjddID0gZ2x5cGhzSW5mby5tYXhTaXplT2ZJbnN0cnVjdGlvbnMgJiAyNTU7CiAgICAgIH0KICAgIH0KICAgIGlmICghdGFibGVzLmhoZWEpIHsKICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKCdSZXF1aXJlZCAiaGhlYSIgdGFibGUgaXMgbm90IGZvdW5kJyk7CiAgICB9CiAgICBpZiAodGFibGVzLmhoZWEuZGF0YVsxMF0gPT09IDAgJiYgdGFibGVzLmhoZWEuZGF0YVsxMV0gPT09IDApIHsKICAgICAgdGFibGVzLmhoZWEuZGF0YVsxMF0gPSAweGZmOwogICAgICB0YWJsZXMuaGhlYS5kYXRhWzExXSA9IDB4ZmY7CiAgICB9CiAgICBjb25zdCBtZXRyaWNzT3ZlcnJpZGUgPSB7CiAgICAgIHVuaXRzUGVyRW06IGludDE2KHRhYmxlcy5oZWFkLmRhdGFbMThdLCB0YWJsZXMuaGVhZC5kYXRhWzE5XSksCiAgICAgIHlNYXg6IHNpZ25lZEludDE2KHRhYmxlcy5oZWFkLmRhdGFbNDJdLCB0YWJsZXMuaGVhZC5kYXRhWzQzXSksCiAgICAgIHlNaW46IHNpZ25lZEludDE2KHRhYmxlcy5oZWFkLmRhdGFbMzhdLCB0YWJsZXMuaGVhZC5kYXRhWzM5XSksCiAgICAgIGFzY2VudDogc2lnbmVkSW50MTYodGFibGVzLmhoZWEuZGF0YVs0XSwgdGFibGVzLmhoZWEuZGF0YVs1XSksCiAgICAgIGRlc2NlbnQ6IHNpZ25lZEludDE2KHRhYmxlcy5oaGVhLmRhdGFbNl0sIHRhYmxlcy5oaGVhLmRhdGFbN10pLAogICAgICBsaW5lR2FwOiBzaWduZWRJbnQxNih0YWJsZXMuaGhlYS5kYXRhWzhdLCB0YWJsZXMuaGhlYS5kYXRhWzldKQogICAgfTsKICAgIHRoaXMuYXNjZW50ID0gbWV0cmljc092ZXJyaWRlLmFzY2VudCAvIG1ldHJpY3NPdmVycmlkZS51bml0c1BlckVtOwogICAgdGhpcy5kZXNjZW50ID0gbWV0cmljc092ZXJyaWRlLmRlc2NlbnQgLyBtZXRyaWNzT3ZlcnJpZGUudW5pdHNQZXJFbTsKICAgIHRoaXMubGluZUdhcCA9IG1ldHJpY3NPdmVycmlkZS5saW5lR2FwIC8gbWV0cmljc092ZXJyaWRlLnVuaXRzUGVyRW07CiAgICBpZiAodGhpcy5jc3NGb250SW5mbz8ubGluZUhlaWdodCkgewogICAgICB0aGlzLmxpbmVIZWlnaHQgPSB0aGlzLmNzc0ZvbnRJbmZvLm1ldHJpY3MubGluZUhlaWdodDsKICAgICAgdGhpcy5saW5lR2FwID0gdGhpcy5jc3NGb250SW5mby5tZXRyaWNzLmxpbmVHYXA7CiAgICB9IGVsc2UgewogICAgICB0aGlzLmxpbmVIZWlnaHQgPSB0aGlzLmFzY2VudCAtIHRoaXMuZGVzY2VudCArIHRoaXMubGluZUdhcDsKICAgIH0KICAgIGlmICh0YWJsZXMucG9zdCkgewogICAgICByZWFkUG9zdFNjcmlwdFRhYmxlKHRhYmxlcy5wb3N0LCBwcm9wZXJ0aWVzLCBudW1HbHlwaHMpOwogICAgfQogICAgdGFibGVzLnBvc3QgPSB7CiAgICAgIHRhZzogInBvc3QiLAogICAgICBkYXRhOiBjcmVhdGVQb3N0VGFibGUocHJvcGVydGllcykKICAgIH07CiAgICBjb25zdCBjaGFyQ29kZVRvR2x5cGhJZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICBmdW5jdGlvbiBoYXNHbHlwaChnbHlwaElkKSB7CiAgICAgIHJldHVybiAhbWlzc2luZ0dseXBoc1tnbHlwaElkXTsKICAgIH0KICAgIGlmIChwcm9wZXJ0aWVzLmNvbXBvc2l0ZSkgewogICAgICBjb25zdCBjaWRUb0dpZE1hcCA9IHByb3BlcnRpZXMuY2lkVG9HaWRNYXAgfHwgW107CiAgICAgIGNvbnN0IGlzQ2lkVG9HaWRNYXBFbXB0eSA9IGNpZFRvR2lkTWFwLmxlbmd0aCA9PT0gMDsKICAgICAgcHJvcGVydGllcy5jTWFwLmZvckVhY2goZnVuY3Rpb24gKGNoYXJDb2RlLCBjaWQpIHsKICAgICAgICBpZiAodHlwZW9mIGNpZCA9PT0gInN0cmluZyIpIHsKICAgICAgICAgIGNpZCA9IGNvbnZlcnRDaWRTdHJpbmcoY2hhckNvZGUsIGNpZCwgdHJ1ZSk7CiAgICAgICAgfQogICAgICAgIGlmIChjaWQgPiAweGZmZmYpIHsKICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiTWF4IHNpemUgb2YgQ0lEIGlzIDY1LDUzNSIpOwogICAgICAgIH0KICAgICAgICBsZXQgZ2x5cGhJZCA9IC0xOwogICAgICAgIGlmIChpc0NpZFRvR2lkTWFwRW1wdHkpIHsKICAgICAgICAgIGdseXBoSWQgPSBjaWQ7CiAgICAgICAgfSBlbHNlIGlmIChjaWRUb0dpZE1hcFtjaWRdICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgIGdseXBoSWQgPSBjaWRUb0dpZE1hcFtjaWRdOwogICAgICAgIH0KICAgICAgICBpZiAoZ2x5cGhJZCA+PSAwICYmIGdseXBoSWQgPCBudW1HbHlwaHMgJiYgaGFzR2x5cGgoZ2x5cGhJZCkpIHsKICAgICAgICAgIGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9IGdseXBoSWQ7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0IGNtYXBUYWJsZSA9IHJlYWRDbWFwVGFibGUodGFibGVzLmNtYXAsIGZvbnQsIHRoaXMuaXNTeW1ib2xpY0ZvbnQsIHByb3BlcnRpZXMuaGFzRW5jb2RpbmcpOwogICAgICBjb25zdCBjbWFwUGxhdGZvcm1JZCA9IGNtYXBUYWJsZS5wbGF0Zm9ybUlkOwogICAgICBjb25zdCBjbWFwRW5jb2RpbmdJZCA9IGNtYXBUYWJsZS5lbmNvZGluZ0lkOwogICAgICBjb25zdCBjbWFwTWFwcGluZ3MgPSBjbWFwVGFibGUubWFwcGluZ3M7CiAgICAgIGxldCBiYXNlRW5jb2RpbmcgPSBbXSwKICAgICAgICBmb3JjZVBvc3RUYWJsZSA9IGZhbHNlOwogICAgICBpZiAocHJvcGVydGllcy5oYXNFbmNvZGluZyAmJiAocHJvcGVydGllcy5iYXNlRW5jb2RpbmdOYW1lID09PSAiTWFjUm9tYW5FbmNvZGluZyIgfHwgcHJvcGVydGllcy5iYXNlRW5jb2RpbmdOYW1lID09PSAiV2luQW5zaUVuY29kaW5nIikpIHsKICAgICAgICBiYXNlRW5jb2RpbmcgPSBnZXRFbmNvZGluZyhwcm9wZXJ0aWVzLmJhc2VFbmNvZGluZ05hbWUpOwogICAgICB9CiAgICAgIGlmIChwcm9wZXJ0aWVzLmhhc0VuY29kaW5nICYmICF0aGlzLmlzU3ltYm9saWNGb250ICYmIChjbWFwUGxhdGZvcm1JZCA9PT0gMyAmJiBjbWFwRW5jb2RpbmdJZCA9PT0gMSB8fCBjbWFwUGxhdGZvcm1JZCA9PT0gMSAmJiBjbWFwRW5jb2RpbmdJZCA9PT0gMCkpIHsKICAgICAgICBjb25zdCBnbHlwaHNVbmljb2RlTWFwID0gZ2V0R2x5cGhzVW5pY29kZSgpOwogICAgICAgIGZvciAobGV0IGNoYXJDb2RlID0gMDsgY2hhckNvZGUgPCAyNTY7IGNoYXJDb2RlKyspIHsKICAgICAgICAgIGxldCBnbHlwaE5hbWU7CiAgICAgICAgICBpZiAodGhpcy5kaWZmZXJlbmNlc1tjaGFyQ29kZV0gIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBnbHlwaE5hbWUgPSB0aGlzLmRpZmZlcmVuY2VzW2NoYXJDb2RlXTsKICAgICAgICAgIH0gZWxzZSBpZiAoYmFzZUVuY29kaW5nLmxlbmd0aCAmJiBiYXNlRW5jb2RpbmdbY2hhckNvZGVdICE9PSAiIikgewogICAgICAgICAgICBnbHlwaE5hbWUgPSBiYXNlRW5jb2RpbmdbY2hhckNvZGVdOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZ2x5cGhOYW1lID0gU3RhbmRhcmRFbmNvZGluZ1tjaGFyQ29kZV07CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIWdseXBoTmFtZSkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHN0YW5kYXJkR2x5cGhOYW1lID0gcmVjb3ZlckdseXBoTmFtZShnbHlwaE5hbWUsIGdseXBoc1VuaWNvZGVNYXApOwogICAgICAgICAgbGV0IHVuaWNvZGVPckNoYXJDb2RlOwogICAgICAgICAgaWYgKGNtYXBQbGF0Zm9ybUlkID09PSAzICYmIGNtYXBFbmNvZGluZ0lkID09PSAxKSB7CiAgICAgICAgICAgIHVuaWNvZGVPckNoYXJDb2RlID0gZ2x5cGhzVW5pY29kZU1hcFtzdGFuZGFyZEdseXBoTmFtZV07CiAgICAgICAgICB9IGVsc2UgaWYgKGNtYXBQbGF0Zm9ybUlkID09PSAxICYmIGNtYXBFbmNvZGluZ0lkID09PSAwKSB7CiAgICAgICAgICAgIHVuaWNvZGVPckNoYXJDb2RlID0gTWFjUm9tYW5FbmNvZGluZy5pbmRleE9mKHN0YW5kYXJkR2x5cGhOYW1lKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh1bmljb2RlT3JDaGFyQ29kZSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIGlmICghcHJvcGVydGllcy5nbHlwaE5hbWVzICYmIHByb3BlcnRpZXMuaGFzSW5jbHVkZWRUb1VuaWNvZGVNYXAgJiYgISh0aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIElkZW50aXR5VG9Vbmljb2RlTWFwKSkgewogICAgICAgICAgICAgIGNvbnN0IHVuaWNvZGUgPSB0aGlzLnRvVW5pY29kZS5nZXQoY2hhckNvZGUpOwogICAgICAgICAgICAgIGlmICh1bmljb2RlKSB7CiAgICAgICAgICAgICAgICB1bmljb2RlT3JDaGFyQ29kZSA9IHVuaWNvZGUuY29kZVBvaW50QXQoMCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh1bmljb2RlT3JDaGFyQ29kZSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGZvciAoY29uc3QgbWFwcGluZyBvZiBjbWFwTWFwcGluZ3MpIHsKICAgICAgICAgICAgaWYgKG1hcHBpbmcuY2hhckNvZGUgIT09IHVuaWNvZGVPckNoYXJDb2RlKSB7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gbWFwcGluZy5nbHlwaElkOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoY21hcFBsYXRmb3JtSWQgPT09IDApIHsKICAgICAgICBmb3IgKGNvbnN0IG1hcHBpbmcgb2YgY21hcE1hcHBpbmdzKSB7CiAgICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZFttYXBwaW5nLmNoYXJDb2RlXSA9IG1hcHBpbmcuZ2x5cGhJZDsKICAgICAgICB9CiAgICAgICAgZm9yY2VQb3N0VGFibGUgPSB0cnVlOwogICAgICB9IGVsc2UgaWYgKGNtYXBQbGF0Zm9ybUlkID09PSAzICYmIGNtYXBFbmNvZGluZ0lkID09PSAwKSB7CiAgICAgICAgZm9yIChjb25zdCBtYXBwaW5nIG9mIGNtYXBNYXBwaW5ncykgewogICAgICAgICAgbGV0IGNoYXJDb2RlID0gbWFwcGluZy5jaGFyQ29kZTsKICAgICAgICAgIGlmIChjaGFyQ29kZSA+PSAweGYwMDAgJiYgY2hhckNvZGUgPD0gMHhmMGZmKSB7CiAgICAgICAgICAgIGNoYXJDb2RlICY9IDB4ZmY7CiAgICAgICAgICB9CiAgICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZFtjaGFyQ29kZV0gPSBtYXBwaW5nLmdseXBoSWQ7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGZvciAoY29uc3QgbWFwcGluZyBvZiBjbWFwTWFwcGluZ3MpIHsKICAgICAgICAgIGNoYXJDb2RlVG9HbHlwaElkW21hcHBpbmcuY2hhckNvZGVdID0gbWFwcGluZy5nbHlwaElkOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAocHJvcGVydGllcy5nbHlwaE5hbWVzICYmIChiYXNlRW5jb2RpbmcubGVuZ3RoIHx8IHRoaXMuZGlmZmVyZW5jZXMubGVuZ3RoKSkgewogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyArK2kpIHsKICAgICAgICAgIGlmICghZm9yY2VQb3N0VGFibGUgJiYgY2hhckNvZGVUb0dseXBoSWRbaV0gIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IGdseXBoTmFtZSA9IHRoaXMuZGlmZmVyZW5jZXNbaV0gfHwgYmFzZUVuY29kaW5nW2ldOwogICAgICAgICAgaWYgKCFnbHlwaE5hbWUpIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBnbHlwaElkID0gcHJvcGVydGllcy5nbHlwaE5hbWVzLmluZGV4T2YoZ2x5cGhOYW1lKTsKICAgICAgICAgIGlmIChnbHlwaElkID4gMCAmJiBoYXNHbHlwaChnbHlwaElkKSkgewogICAgICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZFtpXSA9IGdseXBoSWQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoY2hhckNvZGVUb0dseXBoSWQubGVuZ3RoID09PSAwKSB7CiAgICAgIGNoYXJDb2RlVG9HbHlwaElkWzBdID0gMDsKICAgIH0KICAgIGxldCBnbHlwaFplcm9JZCA9IG51bUdseXBoc091dCAtIDE7CiAgICBpZiAoIWR1cEZpcnN0RW50cnkpIHsKICAgICAgZ2x5cGhaZXJvSWQgPSAwOwogICAgfQogICAgaWYgKCFwcm9wZXJ0aWVzLmNzc0ZvbnRJbmZvKSB7CiAgICAgIGNvbnN0IG5ld01hcHBpbmcgPSBhZGp1c3RNYXBwaW5nKGNoYXJDb2RlVG9HbHlwaElkLCBoYXNHbHlwaCwgZ2x5cGhaZXJvSWQsIHRoaXMudG9Vbmljb2RlKTsKICAgICAgdGhpcy50b0ZvbnRDaGFyID0gbmV3TWFwcGluZy50b0ZvbnRDaGFyOwogICAgICB0YWJsZXMuY21hcCA9IHsKICAgICAgICB0YWc6ICJjbWFwIiwKICAgICAgICBkYXRhOiBjcmVhdGVDbWFwVGFibGUobmV3TWFwcGluZy5jaGFyQ29kZVRvR2x5cGhJZCwgbmV3TWFwcGluZy50b1VuaWNvZGVFeHRyYU1hcCwgbnVtR2x5cGhzT3V0KQogICAgICB9OwogICAgICBpZiAoIXRhYmxlc1siT1MvMiJdIHx8ICF2YWxpZGF0ZU9TMlRhYmxlKHRhYmxlc1siT1MvMiJdLCBmb250KSkgewogICAgICAgIHRhYmxlc1siT1MvMiJdID0gewogICAgICAgICAgdGFnOiAiT1MvMiIsCiAgICAgICAgICBkYXRhOiBjcmVhdGVPUzJUYWJsZShwcm9wZXJ0aWVzLCBuZXdNYXBwaW5nLmNoYXJDb2RlVG9HbHlwaElkLCBtZXRyaWNzT3ZlcnJpZGUpCiAgICAgICAgfTsKICAgICAgfQogICAgfQogICAgaWYgKCFpc1RydWVUeXBlKSB7CiAgICAgIHRyeSB7CiAgICAgICAgY2ZmRmlsZSA9IG5ldyBTdHJlYW0odGFibGVzWyJDRkYgIl0uZGF0YSk7CiAgICAgICAgY29uc3QgcGFyc2VyID0gbmV3IENGRlBhcnNlcihjZmZGaWxlLCBwcm9wZXJ0aWVzLCBTRUFDX0FOQUxZU0lTX0VOQUJMRUQpOwogICAgICAgIGNmZiA9IHBhcnNlci5wYXJzZSgpOwogICAgICAgIGNmZi5kdXBsaWNhdGVGaXJzdEdseXBoKCk7CiAgICAgICAgY29uc3QgY29tcGlsZXIgPSBuZXcgQ0ZGQ29tcGlsZXIoY2ZmKTsKICAgICAgICB0YWJsZXNbIkNGRiAiXS5kYXRhID0gY29tcGlsZXIuY29tcGlsZSgpOwogICAgICB9IGNhdGNoIHsKICAgICAgICB3YXJuKCJGYWlsZWQgdG8gY29tcGlsZSBmb250ICIgKyBwcm9wZXJ0aWVzLmxvYWRlZE5hbWUpOwogICAgICB9CiAgICB9CiAgICBpZiAoIXRhYmxlcy5uYW1lKSB7CiAgICAgIHRhYmxlcy5uYW1lID0gewogICAgICAgIHRhZzogIm5hbWUiLAogICAgICAgIGRhdGE6IGNyZWF0ZU5hbWVUYWJsZSh0aGlzLm5hbWUpCiAgICAgIH07CiAgICB9IGVsc2UgewogICAgICBjb25zdCBbbmFtZVByb3RvdHlwZSwgbmFtZVJlY29yZHNdID0gcmVhZE5hbWVUYWJsZSh0YWJsZXMubmFtZSk7CiAgICAgIHRhYmxlcy5uYW1lLmRhdGEgPSBjcmVhdGVOYW1lVGFibGUobmFtZSwgbmFtZVByb3RvdHlwZSk7CiAgICAgIHRoaXMucHNOYW1lID0gbmFtZVByb3RvdHlwZVswXVs2XSB8fCBudWxsOwogICAgICBpZiAoIXByb3BlcnRpZXMuY29tcG9zaXRlKSB7CiAgICAgICAgYWRqdXN0VHJ1ZVR5cGVUb1VuaWNvZGUocHJvcGVydGllcywgdGhpcy5pc1N5bWJvbGljRm9udCwgbmFtZVJlY29yZHMpOwogICAgICB9CiAgICB9CiAgICBjb25zdCBidWlsZGVyID0gbmV3IE9wZW5UeXBlRmlsZUJ1aWxkZXIoaGVhZGVyLnZlcnNpb24pOwogICAgZm9yIChjb25zdCB0YWJsZVRhZyBpbiB0YWJsZXMpIHsKICAgICAgYnVpbGRlci5hZGRUYWJsZSh0YWJsZVRhZywgdGFibGVzW3RhYmxlVGFnXS5kYXRhKTsKICAgIH0KICAgIHJldHVybiBidWlsZGVyLnRvQXJyYXkoKTsKICB9CiAgY29udmVydChmb250TmFtZSwgZm9udCwgcHJvcGVydGllcykgewogICAgcHJvcGVydGllcy5maXhlZFBpdGNoID0gZmFsc2U7CiAgICBpZiAocHJvcGVydGllcy5idWlsdEluRW5jb2RpbmcpIHsKICAgICAgYWRqdXN0VHlwZTFUb1VuaWNvZGUocHJvcGVydGllcywgcHJvcGVydGllcy5idWlsdEluRW5jb2RpbmcpOwogICAgfQogICAgbGV0IGdseXBoWmVyb0lkID0gMTsKICAgIGlmIChmb250IGluc3RhbmNlb2YgQ0ZGRm9udCkgewogICAgICBnbHlwaFplcm9JZCA9IGZvbnQubnVtR2x5cGhzIC0gMTsKICAgIH0KICAgIGNvbnN0IG1hcHBpbmcgPSBmb250LmdldEdseXBoTWFwcGluZyhwcm9wZXJ0aWVzKTsKICAgIGxldCBuZXdNYXBwaW5nID0gbnVsbDsKICAgIGxldCBuZXdDaGFyQ29kZVRvR2x5cGhJZCA9IG1hcHBpbmc7CiAgICBsZXQgdG9Vbmljb2RlRXh0cmFNYXAgPSBudWxsOwogICAgaWYgKCFwcm9wZXJ0aWVzLmNzc0ZvbnRJbmZvKSB7CiAgICAgIG5ld01hcHBpbmcgPSBhZGp1c3RNYXBwaW5nKG1hcHBpbmcsIGZvbnQuaGFzR2x5cGhJZC5iaW5kKGZvbnQpLCBnbHlwaFplcm9JZCwgdGhpcy50b1VuaWNvZGUpOwogICAgICB0aGlzLnRvRm9udENoYXIgPSBuZXdNYXBwaW5nLnRvRm9udENoYXI7CiAgICAgIG5ld0NoYXJDb2RlVG9HbHlwaElkID0gbmV3TWFwcGluZy5jaGFyQ29kZVRvR2x5cGhJZDsKICAgICAgdG9Vbmljb2RlRXh0cmFNYXAgPSBuZXdNYXBwaW5nLnRvVW5pY29kZUV4dHJhTWFwOwogICAgfQogICAgY29uc3QgbnVtR2x5cGhzID0gZm9udC5udW1HbHlwaHM7CiAgICBmdW5jdGlvbiBnZXRDaGFyQ29kZXMoY2hhckNvZGVUb0dseXBoSWQsIGdseXBoSWQpIHsKICAgICAgbGV0IGNoYXJDb2RlcyA9IG51bGw7CiAgICAgIGZvciAoY29uc3QgY2hhckNvZGUgaW4gY2hhckNvZGVUb0dseXBoSWQpIHsKICAgICAgICBpZiAoZ2x5cGhJZCA9PT0gY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdKSB7CiAgICAgICAgICAoY2hhckNvZGVzIHx8PSBbXSkucHVzaChjaGFyQ29kZSB8IDApOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gY2hhckNvZGVzOwogICAgfQogICAgZnVuY3Rpb24gY3JlYXRlQ2hhckNvZGUoY2hhckNvZGVUb0dseXBoSWQsIGdseXBoSWQpIHsKICAgICAgZm9yIChjb25zdCBjaGFyQ29kZSBpbiBjaGFyQ29kZVRvR2x5cGhJZCkgewogICAgICAgIGlmIChnbHlwaElkID09PSBjaGFyQ29kZVRvR2x5cGhJZFtjaGFyQ29kZV0pIHsKICAgICAgICAgIHJldHVybiBjaGFyQ29kZSB8IDA7CiAgICAgICAgfQogICAgICB9CiAgICAgIG5ld01hcHBpbmcuY2hhckNvZGVUb0dseXBoSWRbbmV3TWFwcGluZy5uZXh0QXZhaWxhYmxlRm9udENoYXJDb2RlXSA9IGdseXBoSWQ7CiAgICAgIHJldHVybiBuZXdNYXBwaW5nLm5leHRBdmFpbGFibGVGb250Q2hhckNvZGUrKzsKICAgIH0KICAgIGNvbnN0IHNlYWNzID0gZm9udC5zZWFjczsKICAgIGlmIChuZXdNYXBwaW5nICYmIFNFQUNfQU5BTFlTSVNfRU5BQkxFRCAmJiBzZWFjcz8ubGVuZ3RoKSB7CiAgICAgIGNvbnN0IG1hdHJpeCA9IHByb3BlcnRpZXMuZm9udE1hdHJpeCB8fCBGT05UX0lERU5USVRZX01BVFJJWDsKICAgICAgY29uc3QgY2hhcnNldCA9IGZvbnQuZ2V0Q2hhcnNldCgpOwogICAgICBjb25zdCBzZWFjTWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgICAgZm9yIChsZXQgZ2x5cGhJZCBpbiBzZWFjcykgewogICAgICAgIGdseXBoSWQgfD0gMDsKICAgICAgICBjb25zdCBzZWFjID0gc2VhY3NbZ2x5cGhJZF07CiAgICAgICAgY29uc3QgYmFzZUdseXBoTmFtZSA9IFN0YW5kYXJkRW5jb2Rpbmdbc2VhY1syXV07CiAgICAgICAgY29uc3QgYWNjZW50R2x5cGhOYW1lID0gU3RhbmRhcmRFbmNvZGluZ1tzZWFjWzNdXTsKICAgICAgICBjb25zdCBiYXNlR2x5cGhJZCA9IGNoYXJzZXQuaW5kZXhPZihiYXNlR2x5cGhOYW1lKTsKICAgICAgICBjb25zdCBhY2NlbnRHbHlwaElkID0gY2hhcnNldC5pbmRleE9mKGFjY2VudEdseXBoTmFtZSk7CiAgICAgICAgaWYgKGJhc2VHbHlwaElkIDwgMCB8fCBhY2NlbnRHbHlwaElkIDwgMCkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGFjY2VudE9mZnNldCA9IHsKICAgICAgICAgIHg6IHNlYWNbMF0gKiBtYXRyaXhbMF0gKyBzZWFjWzFdICogbWF0cml4WzJdICsgbWF0cml4WzRdLAogICAgICAgICAgeTogc2VhY1swXSAqIG1hdHJpeFsxXSArIHNlYWNbMV0gKiBtYXRyaXhbM10gKyBtYXRyaXhbNV0KICAgICAgICB9OwogICAgICAgIGNvbnN0IGNoYXJDb2RlcyA9IGdldENoYXJDb2RlcyhtYXBwaW5nLCBnbHlwaElkKTsKICAgICAgICBpZiAoIWNoYXJDb2RlcykgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGZvciAoY29uc3QgY2hhckNvZGUgb2YgY2hhckNvZGVzKSB7CiAgICAgICAgICBjb25zdCBjaGFyQ29kZVRvR2x5cGhJZCA9IG5ld01hcHBpbmcuY2hhckNvZGVUb0dseXBoSWQ7CiAgICAgICAgICBjb25zdCBiYXNlRm9udENoYXJDb2RlID0gY3JlYXRlQ2hhckNvZGUoY2hhckNvZGVUb0dseXBoSWQsIGJhc2VHbHlwaElkKTsKICAgICAgICAgIGNvbnN0IGFjY2VudEZvbnRDaGFyQ29kZSA9IGNyZWF0ZUNoYXJDb2RlKGNoYXJDb2RlVG9HbHlwaElkLCBhY2NlbnRHbHlwaElkKTsKICAgICAgICAgIHNlYWNNYXBbY2hhckNvZGVdID0gewogICAgICAgICAgICBiYXNlRm9udENoYXJDb2RlLAogICAgICAgICAgICBhY2NlbnRGb250Q2hhckNvZGUsCiAgICAgICAgICAgIGFjY2VudE9mZnNldAogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcHJvcGVydGllcy5zZWFjTWFwID0gc2VhY01hcDsKICAgIH0KICAgIGNvbnN0IHVuaXRzUGVyRW0gPSBwcm9wZXJ0aWVzLmZvbnRNYXRyaXggPyAxIC8gTWF0aC5tYXgoLi4ucHJvcGVydGllcy5mb250TWF0cml4LnNsaWNlKDAsIDQpLm1hcChNYXRoLmFicykpIDogMTAwMDsKICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgT3BlblR5cGVGaWxlQnVpbGRlcigiXHg0Rlx4NTRceDU0XHg0RiIpOwogICAgYnVpbGRlci5hZGRUYWJsZSgiQ0ZGICIsIGZvbnQuZGF0YSk7CiAgICBidWlsZGVyLmFkZFRhYmxlKCJPUy8yIiwgY3JlYXRlT1MyVGFibGUocHJvcGVydGllcywgbmV3Q2hhckNvZGVUb0dseXBoSWQpKTsKICAgIGJ1aWxkZXIuYWRkVGFibGUoImNtYXAiLCBjcmVhdGVDbWFwVGFibGUobmV3Q2hhckNvZGVUb0dseXBoSWQsIHRvVW5pY29kZUV4dHJhTWFwLCBudW1HbHlwaHMpKTsKICAgIGJ1aWxkZXIuYWRkVGFibGUoImhlYWQiLCAiXHgwMFx4MDFceDAwXHgwMCIgKyAiXHgwMFx4MDBceDEwXHgwMCIgKyAiXHgwMFx4MDBceDAwXHgwMCIgKyAiXHg1Rlx4MEZceDNDXHhGNSIgKyAiXHgwMFx4MDAiICsgc2FmZVN0cmluZzE2KHVuaXRzUGVyRW0pICsgIlx4MDBceDAwXHgwMFx4MDBceDllXHgwYlx4N2VceDI3IiArICJceDAwXHgwMFx4MDBceDAwXHg5ZVx4MGJceDdlXHgyNyIgKyAiXHgwMFx4MDAiICsgc2FmZVN0cmluZzE2KHByb3BlcnRpZXMuZGVzY2VudCkgKyAiXHgwRlx4RkYiICsgc2FmZVN0cmluZzE2KHByb3BlcnRpZXMuYXNjZW50KSArIHN0cmluZzE2KHByb3BlcnRpZXMuaXRhbGljQW5nbGUgPyAyIDogMCkgKyAiXHgwMFx4MTEiICsgIlx4MDBceDAwIiArICJceDAwXHgwMCIgKyAiXHgwMFx4MDAiKTsKICAgIGJ1aWxkZXIuYWRkVGFibGUoImhoZWEiLCAiXHgwMFx4MDFceDAwXHgwMCIgKyBzYWZlU3RyaW5nMTYocHJvcGVydGllcy5hc2NlbnQpICsgc2FmZVN0cmluZzE2KHByb3BlcnRpZXMuZGVzY2VudCkgKyAiXHgwMFx4MDAiICsgIlx4RkZceEZGIiArICJceDAwXHgwMCIgKyAiXHgwMFx4MDAiICsgIlx4MDBceDAwIiArIHNhZmVTdHJpbmcxNihwcm9wZXJ0aWVzLmNhcEhlaWdodCkgKyBzYWZlU3RyaW5nMTYoTWF0aC50YW4ocHJvcGVydGllcy5pdGFsaWNBbmdsZSkgKiBwcm9wZXJ0aWVzLnhIZWlnaHQpICsgIlx4MDBceDAwIiArICJceDAwXHgwMCIgKyAiXHgwMFx4MDAiICsgIlx4MDBceDAwIiArICJceDAwXHgwMCIgKyAiXHgwMFx4MDAiICsgc3RyaW5nMTYobnVtR2x5cGhzKSk7CiAgICBidWlsZGVyLmFkZFRhYmxlKCJobXR4IiwgZnVuY3Rpb24gZm9udEZpZWxkc0htdHgoKSB7CiAgICAgIGNvbnN0IGNoYXJzdHJpbmdzID0gZm9udC5jaGFyc3RyaW5nczsKICAgICAgY29uc3QgY2ZmV2lkdGhzID0gZm9udC5jZmYgPyBmb250LmNmZi53aWR0aHMgOiBudWxsOwogICAgICBsZXQgaG10eCA9ICJceDAwXHgwMFx4MDBceDAwIjsKICAgICAgZm9yIChsZXQgaSA9IDEsIGlpID0gbnVtR2x5cGhzOyBpIDwgaWk7IGkrKykgewogICAgICAgIGxldCB3aWR0aCA9IDA7CiAgICAgICAgaWYgKGNoYXJzdHJpbmdzKSB7CiAgICAgICAgICBjb25zdCBjaGFyc3RyaW5nID0gY2hhcnN0cmluZ3NbaSAtIDFdOwogICAgICAgICAgd2lkdGggPSAid2lkdGgiIGluIGNoYXJzdHJpbmcgPyBjaGFyc3RyaW5nLndpZHRoIDogMDsKICAgICAgICB9IGVsc2UgaWYgKGNmZldpZHRocykgewogICAgICAgICAgd2lkdGggPSBNYXRoLmNlaWwoY2ZmV2lkdGhzW2ldIHx8IDApOwogICAgICAgIH0KICAgICAgICBobXR4ICs9IHN0cmluZzE2KHdpZHRoKSArIHN0cmluZzE2KDApOwogICAgICB9CiAgICAgIHJldHVybiBobXR4OwogICAgfSgpKTsKICAgIGJ1aWxkZXIuYWRkVGFibGUoIm1heHAiLCAiXHgwMFx4MDBceDUwXHgwMCIgKyBzdHJpbmcxNihudW1HbHlwaHMpKTsKICAgIGJ1aWxkZXIuYWRkVGFibGUoIm5hbWUiLCBjcmVhdGVOYW1lVGFibGUoZm9udE5hbWUpKTsKICAgIGJ1aWxkZXIuYWRkVGFibGUoInBvc3QiLCBjcmVhdGVQb3N0VGFibGUocHJvcGVydGllcykpOwogICAgcmV0dXJuIGJ1aWxkZXIudG9BcnJheSgpOwogIH0KICBnZXQgX3NwYWNlV2lkdGgoKSB7CiAgICBjb25zdCBwb3NzaWJsZVNwYWNlUmVwbGFjZW1lbnRzID0gWyJzcGFjZSIsICJtaW51cyIsICJvbmUiLCAiaSIsICJJIl07CiAgICBsZXQgd2lkdGg7CiAgICBmb3IgKGNvbnN0IGdseXBoTmFtZSBvZiBwb3NzaWJsZVNwYWNlUmVwbGFjZW1lbnRzKSB7CiAgICAgIGlmIChnbHlwaE5hbWUgaW4gdGhpcy53aWR0aHMpIHsKICAgICAgICB3aWR0aCA9IHRoaXMud2lkdGhzW2dseXBoTmFtZV07CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgY29uc3QgZ2x5cGhzVW5pY29kZU1hcCA9IGdldEdseXBoc1VuaWNvZGUoKTsKICAgICAgY29uc3QgZ2x5cGhVbmljb2RlID0gZ2x5cGhzVW5pY29kZU1hcFtnbHlwaE5hbWVdOwogICAgICBsZXQgY2hhcmNvZGUgPSAwOwogICAgICBpZiAodGhpcy5jb21wb3NpdGUgJiYgdGhpcy5jTWFwLmNvbnRhaW5zKGdseXBoVW5pY29kZSkpIHsKICAgICAgICBjaGFyY29kZSA9IHRoaXMuY01hcC5sb29rdXAoZ2x5cGhVbmljb2RlKTsKICAgICAgICBpZiAodHlwZW9mIGNoYXJjb2RlID09PSAic3RyaW5nIikgewogICAgICAgICAgY2hhcmNvZGUgPSBjb252ZXJ0Q2lkU3RyaW5nKGdseXBoVW5pY29kZSwgY2hhcmNvZGUpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoIWNoYXJjb2RlICYmIHRoaXMudG9Vbmljb2RlKSB7CiAgICAgICAgY2hhcmNvZGUgPSB0aGlzLnRvVW5pY29kZS5jaGFyQ29kZU9mKGdseXBoVW5pY29kZSk7CiAgICAgIH0KICAgICAgaWYgKGNoYXJjb2RlIDw9IDApIHsKICAgICAgICBjaGFyY29kZSA9IGdseXBoVW5pY29kZTsKICAgICAgfQogICAgICB3aWR0aCA9IHRoaXMud2lkdGhzW2NoYXJjb2RlXTsKICAgICAgaWYgKHdpZHRoKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBzaGFkb3codGhpcywgIl9zcGFjZVdpZHRoIiwgd2lkdGggfHwgdGhpcy5kZWZhdWx0V2lkdGgpOwogIH0KICBfY2hhclRvR2x5cGgoY2hhcmNvZGUsIGlzU3BhY2UgPSBmYWxzZSkgewogICAgbGV0IGdseXBoID0gdGhpcy5fZ2x5cGhDYWNoZVtjaGFyY29kZV07CiAgICBpZiAoZ2x5cGg/LmlzU3BhY2UgPT09IGlzU3BhY2UpIHsKICAgICAgcmV0dXJuIGdseXBoOwogICAgfQogICAgbGV0IGZvbnRDaGFyQ29kZSwgd2lkdGgsIG9wZXJhdG9yTGlzdElkOwogICAgbGV0IHdpZHRoQ29kZSA9IGNoYXJjb2RlOwogICAgaWYgKHRoaXMuY01hcD8uY29udGFpbnMoY2hhcmNvZGUpKSB7CiAgICAgIHdpZHRoQ29kZSA9IHRoaXMuY01hcC5sb29rdXAoY2hhcmNvZGUpOwogICAgICBpZiAodHlwZW9mIHdpZHRoQ29kZSA9PT0gInN0cmluZyIpIHsKICAgICAgICB3aWR0aENvZGUgPSBjb252ZXJ0Q2lkU3RyaW5nKGNoYXJjb2RlLCB3aWR0aENvZGUpOwogICAgICB9CiAgICB9CiAgICB3aWR0aCA9IHRoaXMud2lkdGhzW3dpZHRoQ29kZV07CiAgICBpZiAodHlwZW9mIHdpZHRoICE9PSAibnVtYmVyIikgewogICAgICB3aWR0aCA9IHRoaXMuZGVmYXVsdFdpZHRoOwogICAgfQogICAgY29uc3Qgdm1ldHJpYyA9IHRoaXMudm1ldHJpY3M/Llt3aWR0aENvZGVdOwogICAgbGV0IHVuaWNvZGUgPSB0aGlzLnRvVW5pY29kZS5nZXQoY2hhcmNvZGUpIHx8IGNoYXJjb2RlOwogICAgaWYgKHR5cGVvZiB1bmljb2RlID09PSAibnVtYmVyIikgewogICAgICB1bmljb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZSh1bmljb2RlKTsKICAgIH0KICAgIGxldCBpc0luRm9udCA9IHRoaXMudG9Gb250Q2hhcltjaGFyY29kZV0gIT09IHVuZGVmaW5lZDsKICAgIGZvbnRDaGFyQ29kZSA9IHRoaXMudG9Gb250Q2hhcltjaGFyY29kZV0gfHwgY2hhcmNvZGU7CiAgICBpZiAodGhpcy5taXNzaW5nRmlsZSkgewogICAgICBjb25zdCBnbHlwaE5hbWUgPSB0aGlzLmRpZmZlcmVuY2VzW2NoYXJjb2RlXSB8fCB0aGlzLmRlZmF1bHRFbmNvZGluZ1tjaGFyY29kZV07CiAgICAgIGlmICgoZ2x5cGhOYW1lID09PSAiLm5vdGRlZiIgfHwgZ2x5cGhOYW1lID09PSAiIikgJiYgdGhpcy50eXBlID09PSAiVHlwZTEiKSB7CiAgICAgICAgZm9udENoYXJDb2RlID0gMHgyMDsKICAgICAgICBpZiAoZ2x5cGhOYW1lID09PSAiIikgewogICAgICAgICAgd2lkdGggfHw9IHRoaXMuX3NwYWNlV2lkdGg7CiAgICAgICAgICB1bmljb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZShmb250Q2hhckNvZGUpOwogICAgICAgIH0KICAgICAgfQogICAgICBmb250Q2hhckNvZGUgPSBtYXBTcGVjaWFsVW5pY29kZVZhbHVlcyhmb250Q2hhckNvZGUpOwogICAgfQogICAgaWYgKHRoaXMuaXNUeXBlM0ZvbnQpIHsKICAgICAgb3BlcmF0b3JMaXN0SWQgPSBmb250Q2hhckNvZGU7CiAgICB9CiAgICBsZXQgYWNjZW50ID0gbnVsbDsKICAgIGlmICh0aGlzLnNlYWNNYXA/LltjaGFyY29kZV0pIHsKICAgICAgaXNJbkZvbnQgPSB0cnVlOwogICAgICBjb25zdCBzZWFjID0gdGhpcy5zZWFjTWFwW2NoYXJjb2RlXTsKICAgICAgZm9udENoYXJDb2RlID0gc2VhYy5iYXNlRm9udENoYXJDb2RlOwogICAgICBhY2NlbnQgPSB7CiAgICAgICAgZm9udENoYXI6IFN0cmluZy5mcm9tQ29kZVBvaW50KHNlYWMuYWNjZW50Rm9udENoYXJDb2RlKSwKICAgICAgICBvZmZzZXQ6IHNlYWMuYWNjZW50T2Zmc2V0CiAgICAgIH07CiAgICB9CiAgICBsZXQgZm9udENoYXIgPSAiIjsKICAgIGlmICh0eXBlb2YgZm9udENoYXJDb2RlID09PSAibnVtYmVyIikgewogICAgICBpZiAoZm9udENoYXJDb2RlIDw9IDB4MTBmZmZmKSB7CiAgICAgICAgZm9udENoYXIgPSBTdHJpbmcuZnJvbUNvZGVQb2ludChmb250Q2hhckNvZGUpOwogICAgICB9IGVsc2UgewogICAgICAgIHdhcm4oYGNoYXJUb0dseXBoIC0gaW52YWxpZCBmb250Q2hhckNvZGU6ICR7Zm9udENoYXJDb2RlfWApOwogICAgICB9CiAgICB9CiAgICBpZiAodGhpcy5taXNzaW5nRmlsZSAmJiB0aGlzLnZlcnRpY2FsICYmIGZvbnRDaGFyLmxlbmd0aCA9PT0gMSkgewogICAgICBjb25zdCB2ZXJ0aWNhbCA9IGdldFZlcnRpY2FsUHJlc2VudGF0aW9uRm9ybSgpW2ZvbnRDaGFyLmNoYXJDb2RlQXQoMCldOwogICAgICBpZiAodmVydGljYWwpIHsKICAgICAgICBmb250Q2hhciA9IHVuaWNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHZlcnRpY2FsKTsKICAgICAgfQogICAgfQogICAgZ2x5cGggPSBuZXcgZm9udHNfR2x5cGgoY2hhcmNvZGUsIGZvbnRDaGFyLCB1bmljb2RlLCBhY2NlbnQsIHdpZHRoLCB2bWV0cmljLCBvcGVyYXRvckxpc3RJZCwgaXNTcGFjZSwgaXNJbkZvbnQpOwogICAgcmV0dXJuIHRoaXMuX2dseXBoQ2FjaGVbY2hhcmNvZGVdID0gZ2x5cGg7CiAgfQogIGNoYXJzVG9HbHlwaHMoY2hhcnMpIHsKICAgIGxldCBnbHlwaHMgPSB0aGlzLl9jaGFyc0NhY2hlW2NoYXJzXTsKICAgIGlmIChnbHlwaHMpIHsKICAgICAgcmV0dXJuIGdseXBoczsKICAgIH0KICAgIGdseXBocyA9IFtdOwogICAgaWYgKHRoaXMuY01hcCkgewogICAgICBjb25zdCBjID0gT2JqZWN0LmNyZWF0ZShudWxsKSwKICAgICAgICBpaSA9IGNoYXJzLmxlbmd0aDsKICAgICAgbGV0IGkgPSAwOwogICAgICB3aGlsZSAoaSA8IGlpKSB7CiAgICAgICAgdGhpcy5jTWFwLnJlYWRDaGFyQ29kZShjaGFycywgaSwgYyk7CiAgICAgICAgY29uc3QgewogICAgICAgICAgY2hhcmNvZGUsCiAgICAgICAgICBsZW5ndGgKICAgICAgICB9ID0gYzsKICAgICAgICBpICs9IGxlbmd0aDsKICAgICAgICBjb25zdCBnbHlwaCA9IHRoaXMuX2NoYXJUb0dseXBoKGNoYXJjb2RlLCBsZW5ndGggPT09IDEgJiYgY2hhcnMuY2hhckNvZGVBdChpIC0gMSkgPT09IDB4MjApOwogICAgICAgIGdseXBocy5wdXNoKGdseXBoKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gY2hhcnMubGVuZ3RoOyBpIDwgaWk7ICsraSkgewogICAgICAgIGNvbnN0IGNoYXJjb2RlID0gY2hhcnMuY2hhckNvZGVBdChpKTsKICAgICAgICBjb25zdCBnbHlwaCA9IHRoaXMuX2NoYXJUb0dseXBoKGNoYXJjb2RlLCBjaGFyY29kZSA9PT0gMHgyMCk7CiAgICAgICAgZ2x5cGhzLnB1c2goZ2x5cGgpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdGhpcy5fY2hhcnNDYWNoZVtjaGFyc10gPSBnbHlwaHM7CiAgfQogIGdldENoYXJQb3NpdGlvbnMoY2hhcnMpIHsKICAgIGNvbnN0IHBvc2l0aW9ucyA9IFtdOwogICAgaWYgKHRoaXMuY01hcCkgewogICAgICBjb25zdCBjID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgICAgbGV0IGkgPSAwOwogICAgICB3aGlsZSAoaSA8IGNoYXJzLmxlbmd0aCkgewogICAgICAgIHRoaXMuY01hcC5yZWFkQ2hhckNvZGUoY2hhcnMsIGksIGMpOwogICAgICAgIGNvbnN0IGxlbmd0aCA9IGMubGVuZ3RoOwogICAgICAgIHBvc2l0aW9ucy5wdXNoKFtpLCBpICsgbGVuZ3RoXSk7CiAgICAgICAgaSArPSBsZW5ndGg7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGNoYXJzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHsKICAgICAgICBwb3NpdGlvbnMucHVzaChbaSwgaSArIDFdKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHBvc2l0aW9uczsKICB9CiAgZ2V0IGdseXBoQ2FjaGVWYWx1ZXMoKSB7CiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLl9nbHlwaENhY2hlKTsKICB9CiAgZW5jb2RlU3RyaW5nKHN0cikgewogICAgY29uc3QgYnVmZmVycyA9IFtdOwogICAgY29uc3QgY3VycmVudEJ1ZiA9IFtdOwogICAgY29uc3QgaGFzQ3VycmVudEJ1ZkVycm9ycyA9ICgpID0+IGJ1ZmZlcnMubGVuZ3RoICUgMiA9PT0gMTsKICAgIGNvbnN0IGdldENoYXJDb2RlID0gdGhpcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBJZGVudGl0eVRvVW5pY29kZU1hcCA/IHVuaWNvZGUgPT4gdGhpcy50b1VuaWNvZGUuY2hhckNvZGVPZih1bmljb2RlKSA6IHVuaWNvZGUgPT4gdGhpcy50b1VuaWNvZGUuY2hhckNvZGVPZihTdHJpbmcuZnJvbUNvZGVQb2ludCh1bmljb2RlKSk7CiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBzdHIubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICBjb25zdCB1bmljb2RlID0gc3RyLmNvZGVQb2ludEF0KGkpOwogICAgICBpZiAodW5pY29kZSA+IDB4ZDdmZiAmJiAodW5pY29kZSA8IDB4ZTAwMCB8fCB1bmljb2RlID4gMHhmZmZkKSkgewogICAgICAgIGkrKzsKICAgICAgfQogICAgICBpZiAodGhpcy50b1VuaWNvZGUpIHsKICAgICAgICBjb25zdCBjaGFyQ29kZSA9IGdldENoYXJDb2RlKHVuaWNvZGUpOwogICAgICAgIGlmIChjaGFyQ29kZSAhPT0gLTEpIHsKICAgICAgICAgIGlmIChoYXNDdXJyZW50QnVmRXJyb3JzKCkpIHsKICAgICAgICAgICAgYnVmZmVycy5wdXNoKGN1cnJlbnRCdWYuam9pbigiIikpOwogICAgICAgICAgICBjdXJyZW50QnVmLmxlbmd0aCA9IDA7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBjaGFyQ29kZUxlbmd0aCA9IHRoaXMuY01hcCA/IHRoaXMuY01hcC5nZXRDaGFyQ29kZUxlbmd0aChjaGFyQ29kZSkgOiAxOwogICAgICAgICAgZm9yIChsZXQgaiA9IGNoYXJDb2RlTGVuZ3RoIC0gMTsgaiA+PSAwOyBqLS0pIHsKICAgICAgICAgICAgY3VycmVudEJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUgPj4gOCAqIGogJiAweGZmKSk7CiAgICAgICAgICB9CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCFoYXNDdXJyZW50QnVmRXJyb3JzKCkpIHsKICAgICAgICBidWZmZXJzLnB1c2goY3VycmVudEJ1Zi5qb2luKCIiKSk7CiAgICAgICAgY3VycmVudEJ1Zi5sZW5ndGggPSAwOwogICAgICB9CiAgICAgIGN1cnJlbnRCdWYucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludCh1bmljb2RlKSk7CiAgICB9CiAgICBidWZmZXJzLnB1c2goY3VycmVudEJ1Zi5qb2luKCIiKSk7CiAgICByZXR1cm4gYnVmZmVyczsKICB9Cn0KY2xhc3MgRXJyb3JGb250IHsKICBjb25zdHJ1Y3RvcihlcnJvcikgewogICAgdGhpcy5lcnJvciA9IGVycm9yOwogICAgdGhpcy5sb2FkZWROYW1lID0gImdfZm9udF9lcnJvciI7CiAgICB0aGlzLm1pc3NpbmdGaWxlID0gdHJ1ZTsKICB9CiAgY2hhcnNUb0dseXBocygpIHsKICAgIHJldHVybiBbXTsKICB9CiAgZW5jb2RlU3RyaW5nKGNoYXJzKSB7CiAgICByZXR1cm4gW2NoYXJzXTsKICB9CiAgZXhwb3J0RGF0YSgpIHsKICAgIHJldHVybiB7CiAgICAgIGVycm9yOiB0aGlzLmVycm9yCiAgICB9OwogIH0KfQoKOy8vIC4vc3JjL2NvcmUvcGF0dGVybi5qcwoKCgoKY29uc3QgU2hhZGluZ1R5cGUgPSB7CiAgRlVOQ1RJT05fQkFTRUQ6IDEsCiAgQVhJQUw6IDIsCiAgUkFESUFMOiAzLAogIEZSRUVfRk9STV9NRVNIOiA0LAogIExBVFRJQ0VfRk9STV9NRVNIOiA1LAogIENPT05TX1BBVENIX01FU0g6IDYsCiAgVEVOU09SX1BBVENIX01FU0g6IDcKfTsKY2xhc3MgUGF0dGVybiB7CiAgY29uc3RydWN0b3IoKSB7CiAgICB1bnJlYWNoYWJsZSgiQ2Fubm90IGluaXRpYWxpemUgUGF0dGVybi4iKTsKICB9CiAgc3RhdGljIHBhcnNlU2hhZGluZyhzaGFkaW5nLCB4cmVmLCByZXMsIHBkZkZ1bmN0aW9uRmFjdG9yeSwgZ2xvYmFsQ29sb3JTcGFjZUNhY2hlLCBsb2NhbENvbG9yU3BhY2VDYWNoZSkgewogICAgY29uc3QgZGljdCA9IHNoYWRpbmcgaW5zdGFuY2VvZiBCYXNlU3RyZWFtID8gc2hhZGluZy5kaWN0IDogc2hhZGluZzsKICAgIGNvbnN0IHR5cGUgPSBkaWN0LmdldCgiU2hhZGluZ1R5cGUiKTsKICAgIHRyeSB7CiAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgIGNhc2UgU2hhZGluZ1R5cGUuQVhJQUw6CiAgICAgICAgY2FzZSBTaGFkaW5nVHlwZS5SQURJQUw6CiAgICAgICAgICByZXR1cm4gbmV3IFJhZGlhbEF4aWFsU2hhZGluZyhkaWN0LCB4cmVmLCByZXMsIHBkZkZ1bmN0aW9uRmFjdG9yeSwgZ2xvYmFsQ29sb3JTcGFjZUNhY2hlLCBsb2NhbENvbG9yU3BhY2VDYWNoZSk7CiAgICAgICAgY2FzZSBTaGFkaW5nVHlwZS5GUkVFX0ZPUk1fTUVTSDoKICAgICAgICBjYXNlIFNoYWRpbmdUeXBlLkxBVFRJQ0VfRk9STV9NRVNIOgogICAgICAgIGNhc2UgU2hhZGluZ1R5cGUuQ09PTlNfUEFUQ0hfTUVTSDoKICAgICAgICBjYXNlIFNoYWRpbmdUeXBlLlRFTlNPUl9QQVRDSF9NRVNIOgogICAgICAgICAgcmV0dXJuIG5ldyBNZXNoU2hhZGluZyhzaGFkaW5nLCB4cmVmLCByZXMsIHBkZkZ1bmN0aW9uRmFjdG9yeSwgZ2xvYmFsQ29sb3JTcGFjZUNhY2hlLCBsb2NhbENvbG9yU3BhY2VDYWNoZSk7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiVW5zdXBwb3J0ZWQgU2hhZGluZ1R5cGU6ICIgKyB0eXBlKTsKICAgICAgfQogICAgfSBjYXRjaCAoZXgpIHsKICAgICAgaWYgKGV4IGluc3RhbmNlb2YgTWlzc2luZ0RhdGFFeGNlcHRpb24pIHsKICAgICAgICB0aHJvdyBleDsKICAgICAgfQogICAgICB3YXJuKGV4KTsKICAgICAgcmV0dXJuIG5ldyBEdW1teVNoYWRpbmcoKTsKICAgIH0KICB9Cn0KY2xhc3MgQmFzZVNoYWRpbmcgewogIHN0YXRpYyBTTUFMTF9OVU1CRVIgPSAxZS02OwogIGdldElSKCkgewogICAgdW5yZWFjaGFibGUoIkFic3RyYWN0IG1ldGhvZCBgZ2V0SVJgIGNhbGxlZC4iKTsKICB9Cn0KY2xhc3MgUmFkaWFsQXhpYWxTaGFkaW5nIGV4dGVuZHMgQmFzZVNoYWRpbmcgewogIGNvbnN0cnVjdG9yKGRpY3QsIHhyZWYsIHJlc291cmNlcywgcGRmRnVuY3Rpb25GYWN0b3J5LCBnbG9iYWxDb2xvclNwYWNlQ2FjaGUsIGxvY2FsQ29sb3JTcGFjZUNhY2hlKSB7CiAgICBzdXBlcigpOwogICAgdGhpcy5zaGFkaW5nVHlwZSA9IGRpY3QuZ2V0KCJTaGFkaW5nVHlwZSIpOwogICAgbGV0IGNvb3Jkc0xlbiA9IDA7CiAgICBpZiAodGhpcy5zaGFkaW5nVHlwZSA9PT0gU2hhZGluZ1R5cGUuQVhJQUwpIHsKICAgICAgY29vcmRzTGVuID0gNDsKICAgIH0gZWxzZSBpZiAodGhpcy5zaGFkaW5nVHlwZSA9PT0gU2hhZGluZ1R5cGUuUkFESUFMKSB7CiAgICAgIGNvb3Jkc0xlbiA9IDY7CiAgICB9CiAgICB0aGlzLmNvb3Jkc0FyciA9IGRpY3QuZ2V0QXJyYXkoIkNvb3JkcyIpOwogICAgaWYgKCFpc051bWJlckFycmF5KHRoaXMuY29vcmRzQXJyLCBjb29yZHNMZW4pKSB7CiAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiUmFkaWFsQXhpYWxTaGFkaW5nOiBJbnZhbGlkIC9Db29yZHMgYXJyYXkuIik7CiAgICB9CiAgICBjb25zdCBjcyA9IENvbG9yU3BhY2VVdGlscy5wYXJzZSh7CiAgICAgIGNzOiBkaWN0LmdldFJhdygiQ1MiKSB8fCBkaWN0LmdldFJhdygiQ29sb3JTcGFjZSIpLAogICAgICB4cmVmLAogICAgICByZXNvdXJjZXMsCiAgICAgIHBkZkZ1bmN0aW9uRmFjdG9yeSwKICAgICAgZ2xvYmFsQ29sb3JTcGFjZUNhY2hlLAogICAgICBsb2NhbENvbG9yU3BhY2VDYWNoZQogICAgfSk7CiAgICB0aGlzLmJib3ggPSBsb29rdXBOb3JtYWxSZWN0KGRpY3QuZ2V0QXJyYXkoIkJCb3giKSwgbnVsbCk7CiAgICBsZXQgdDAgPSAwLjAsCiAgICAgIHQxID0gMS4wOwogICAgY29uc3QgZG9tYWluQXJyID0gZGljdC5nZXRBcnJheSgiRG9tYWluIik7CiAgICBpZiAoaXNOdW1iZXJBcnJheShkb21haW5BcnIsIDIpKSB7CiAgICAgIFt0MCwgdDFdID0gZG9tYWluQXJyOwogICAgfQogICAgbGV0IGV4dGVuZFN0YXJ0ID0gZmFsc2UsCiAgICAgIGV4dGVuZEVuZCA9IGZhbHNlOwogICAgY29uc3QgZXh0ZW5kQXJyID0gZGljdC5nZXRBcnJheSgiRXh0ZW5kIik7CiAgICBpZiAoaXNCb29sZWFuQXJyYXkoZXh0ZW5kQXJyLCAyKSkgewogICAgICBbZXh0ZW5kU3RhcnQsIGV4dGVuZEVuZF0gPSBleHRlbmRBcnI7CiAgICB9CiAgICBpZiAodGhpcy5zaGFkaW5nVHlwZSA9PT0gU2hhZGluZ1R5cGUuUkFESUFMICYmICghZXh0ZW5kU3RhcnQgfHwgIWV4dGVuZEVuZCkpIHsKICAgICAgY29uc3QgW3gxLCB5MSwgcjEsIHgyLCB5MiwgcjJdID0gdGhpcy5jb29yZHNBcnI7CiAgICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5oeXBvdCh4MSAtIHgyLCB5MSAtIHkyKTsKICAgICAgaWYgKHIxIDw9IHIyICsgZGlzdGFuY2UgJiYgcjIgPD0gcjEgKyBkaXN0YW5jZSkgewogICAgICAgIHdhcm4oIlVuc3VwcG9ydGVkIHJhZGlhbCBncmFkaWVudC4iKTsKICAgICAgfQogICAgfQogICAgdGhpcy5leHRlbmRTdGFydCA9IGV4dGVuZFN0YXJ0OwogICAgdGhpcy5leHRlbmRFbmQgPSBleHRlbmRFbmQ7CiAgICBjb25zdCBmbk9iaiA9IGRpY3QuZ2V0UmF3KCJGdW5jdGlvbiIpOwogICAgY29uc3QgZm4gPSBwZGZGdW5jdGlvbkZhY3RvcnkuY3JlYXRlKGZuT2JqLCB0cnVlKTsKICAgIGNvbnN0IE5VTUJFUl9PRl9TQU1QTEVTID0gODQwOwogICAgY29uc3Qgc3RlcCA9ICh0MSAtIHQwKSAvIE5VTUJFUl9PRl9TQU1QTEVTOwogICAgY29uc3QgY29sb3JTdG9wcyA9IHRoaXMuY29sb3JTdG9wcyA9IFtdOwogICAgaWYgKHQwID49IHQxIHx8IHN0ZXAgPD0gMCkgewogICAgICBpbmZvKCJCYWQgc2hhZGluZyBkb21haW4uIik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IGNvbG9yID0gbmV3IEZsb2F0MzJBcnJheShjcy5udW1Db21wcyksCiAgICAgIHJhdGlvID0gbmV3IEZsb2F0MzJBcnJheSgxKTsKICAgIGxldCByZ2JDb2xvcjsKICAgIGxldCBpQmFzZSA9IDA7CiAgICByYXRpb1swXSA9IHQwOwogICAgZm4ocmF0aW8sIDAsIGNvbG9yLCAwKTsKICAgIGxldCByZ2JCYXNlID0gY3MuZ2V0UmdiKGNvbG9yLCAwKTsKICAgIGNvbnN0IGNzc0NvbG9yQmFzZSA9IFV0aWwubWFrZUhleENvbG9yKHJnYkJhc2VbMF0sIHJnYkJhc2VbMV0sIHJnYkJhc2VbMl0pOwogICAgY29sb3JTdG9wcy5wdXNoKFswLCBjc3NDb2xvckJhc2VdKTsKICAgIGxldCBpUHJldiA9IDE7CiAgICByYXRpb1swXSA9IHQwICsgc3RlcDsKICAgIGZuKHJhdGlvLCAwLCBjb2xvciwgMCk7CiAgICBsZXQgcmdiUHJldiA9IGNzLmdldFJnYihjb2xvciwgMCk7CiAgICBsZXQgbWF4U2xvcGVSID0gcmdiUHJldlswXSAtIHJnYkJhc2VbMF0gKyAxOwogICAgbGV0IG1heFNsb3BlRyA9IHJnYlByZXZbMV0gLSByZ2JCYXNlWzFdICsgMTsKICAgIGxldCBtYXhTbG9wZUIgPSByZ2JQcmV2WzJdIC0gcmdiQmFzZVsyXSArIDE7CiAgICBsZXQgbWluU2xvcGVSID0gcmdiUHJldlswXSAtIHJnYkJhc2VbMF0gLSAxOwogICAgbGV0IG1pblNsb3BlRyA9IHJnYlByZXZbMV0gLSByZ2JCYXNlWzFdIC0gMTsKICAgIGxldCBtaW5TbG9wZUIgPSByZ2JQcmV2WzJdIC0gcmdiQmFzZVsyXSAtIDE7CiAgICBmb3IgKGxldCBpID0gMjsgaSA8IE5VTUJFUl9PRl9TQU1QTEVTOyBpKyspIHsKICAgICAgcmF0aW9bMF0gPSB0MCArIGkgKiBzdGVwOwogICAgICBmbihyYXRpbywgMCwgY29sb3IsIDApOwogICAgICByZ2JDb2xvciA9IGNzLmdldFJnYihjb2xvciwgMCk7CiAgICAgIGNvbnN0IHJ1biA9IGkgLSBpQmFzZTsKICAgICAgbWF4U2xvcGVSID0gTWF0aC5taW4obWF4U2xvcGVSLCAocmdiQ29sb3JbMF0gLSByZ2JCYXNlWzBdICsgMSkgLyBydW4pOwogICAgICBtYXhTbG9wZUcgPSBNYXRoLm1pbihtYXhTbG9wZUcsIChyZ2JDb2xvclsxXSAtIHJnYkJhc2VbMV0gKyAxKSAvIHJ1bik7CiAgICAgIG1heFNsb3BlQiA9IE1hdGgubWluKG1heFNsb3BlQiwgKHJnYkNvbG9yWzJdIC0gcmdiQmFzZVsyXSArIDEpIC8gcnVuKTsKICAgICAgbWluU2xvcGVSID0gTWF0aC5tYXgobWluU2xvcGVSLCAocmdiQ29sb3JbMF0gLSByZ2JCYXNlWzBdIC0gMSkgLyBydW4pOwogICAgICBtaW5TbG9wZUcgPSBNYXRoLm1heChtaW5TbG9wZUcsIChyZ2JDb2xvclsxXSAtIHJnYkJhc2VbMV0gLSAxKSAvIHJ1bik7CiAgICAgIG1pblNsb3BlQiA9IE1hdGgubWF4KG1pblNsb3BlQiwgKHJnYkNvbG9yWzJdIC0gcmdiQmFzZVsyXSAtIDEpIC8gcnVuKTsKICAgICAgY29uc3Qgc2xvcGVzRXhpc3QgPSBtaW5TbG9wZVIgPD0gbWF4U2xvcGVSICYmIG1pblNsb3BlRyA8PSBtYXhTbG9wZUcgJiYgbWluU2xvcGVCIDw9IG1heFNsb3BlQjsKICAgICAgaWYgKCFzbG9wZXNFeGlzdCkgewogICAgICAgIGNvbnN0IGNzc0NvbG9yID0gVXRpbC5tYWtlSGV4Q29sb3IocmdiUHJldlswXSwgcmdiUHJldlsxXSwgcmdiUHJldlsyXSk7CiAgICAgICAgY29sb3JTdG9wcy5wdXNoKFtpUHJldiAvIE5VTUJFUl9PRl9TQU1QTEVTLCBjc3NDb2xvcl0pOwogICAgICAgIG1heFNsb3BlUiA9IHJnYkNvbG9yWzBdIC0gcmdiUHJldlswXSArIDE7CiAgICAgICAgbWF4U2xvcGVHID0gcmdiQ29sb3JbMV0gLSByZ2JQcmV2WzFdICsgMTsKICAgICAgICBtYXhTbG9wZUIgPSByZ2JDb2xvclsyXSAtIHJnYlByZXZbMl0gKyAxOwogICAgICAgIG1pblNsb3BlUiA9IHJnYkNvbG9yWzBdIC0gcmdiUHJldlswXSAtIDE7CiAgICAgICAgbWluU2xvcGVHID0gcmdiQ29sb3JbMV0gLSByZ2JQcmV2WzFdIC0gMTsKICAgICAgICBtaW5TbG9wZUIgPSByZ2JDb2xvclsyXSAtIHJnYlByZXZbMl0gLSAxOwogICAgICAgIGlCYXNlID0gaVByZXY7CiAgICAgICAgcmdiQmFzZSA9IHJnYlByZXY7CiAgICAgIH0KICAgICAgaVByZXYgPSBpOwogICAgICByZ2JQcmV2ID0gcmdiQ29sb3I7CiAgICB9CiAgICBjb25zdCBjc3NDb2xvciA9IFV0aWwubWFrZUhleENvbG9yKHJnYlByZXZbMF0sIHJnYlByZXZbMV0sIHJnYlByZXZbMl0pOwogICAgY29sb3JTdG9wcy5wdXNoKFsxLCBjc3NDb2xvcl0pOwogICAgbGV0IGJhY2tncm91bmQgPSAidHJhbnNwYXJlbnQiOwogICAgaWYgKGRpY3QuaGFzKCJCYWNrZ3JvdW5kIikpIHsKICAgICAgcmdiQ29sb3IgPSBjcy5nZXRSZ2IoZGljdC5nZXQoIkJhY2tncm91bmQiKSwgMCk7CiAgICAgIGJhY2tncm91bmQgPSBVdGlsLm1ha2VIZXhDb2xvcihyZ2JDb2xvclswXSwgcmdiQ29sb3JbMV0sIHJnYkNvbG9yWzJdKTsKICAgIH0KICAgIGlmICghZXh0ZW5kU3RhcnQpIHsKICAgICAgY29sb3JTdG9wcy51bnNoaWZ0KFswLCBiYWNrZ3JvdW5kXSk7CiAgICAgIGNvbG9yU3RvcHNbMV1bMF0gKz0gQmFzZVNoYWRpbmcuU01BTExfTlVNQkVSOwogICAgfQogICAgaWYgKCFleHRlbmRFbmQpIHsKICAgICAgY29sb3JTdG9wcy5hdCgtMSlbMF0gLT0gQmFzZVNoYWRpbmcuU01BTExfTlVNQkVSOwogICAgICBjb2xvclN0b3BzLnB1c2goWzEsIGJhY2tncm91bmRdKTsKICAgIH0KICAgIHRoaXMuY29sb3JTdG9wcyA9IGNvbG9yU3RvcHM7CiAgfQogIGdldElSKCkgewogICAgY29uc3QgewogICAgICBjb29yZHNBcnIsCiAgICAgIHNoYWRpbmdUeXBlCiAgICB9ID0gdGhpczsKICAgIGxldCB0eXBlLCBwMCwgcDEsIHIwLCByMTsKICAgIGlmIChzaGFkaW5nVHlwZSA9PT0gU2hhZGluZ1R5cGUuQVhJQUwpIHsKICAgICAgcDAgPSBbY29vcmRzQXJyWzBdLCBjb29yZHNBcnJbMV1dOwogICAgICBwMSA9IFtjb29yZHNBcnJbMl0sIGNvb3Jkc0FyclszXV07CiAgICAgIHIwID0gbnVsbDsKICAgICAgcjEgPSBudWxsOwogICAgICB0eXBlID0gImF4aWFsIjsKICAgIH0gZWxzZSBpZiAoc2hhZGluZ1R5cGUgPT09IFNoYWRpbmdUeXBlLlJBRElBTCkgewogICAgICBwMCA9IFtjb29yZHNBcnJbMF0sIGNvb3Jkc0FyclsxXV07CiAgICAgIHAxID0gW2Nvb3Jkc0FyclszXSwgY29vcmRzQXJyWzRdXTsKICAgICAgcjAgPSBjb29yZHNBcnJbMl07CiAgICAgIHIxID0gY29vcmRzQXJyWzVdOwogICAgICB0eXBlID0gInJhZGlhbCI7CiAgICB9IGVsc2UgewogICAgICB1bnJlYWNoYWJsZShgZ2V0UGF0dGVybiB0eXBlIHVua25vd246ICR7c2hhZGluZ1R5cGV9YCk7CiAgICB9CiAgICByZXR1cm4gWyJSYWRpYWxBeGlhbCIsIHR5cGUsIHRoaXMuYmJveCwgdGhpcy5jb2xvclN0b3BzLCBwMCwgcDEsIHIwLCByMV07CiAgfQp9CmNsYXNzIE1lc2hTdHJlYW1SZWFkZXIgewogIGNvbnN0cnVjdG9yKHN0cmVhbSwgY29udGV4dCkgewogICAgdGhpcy5zdHJlYW0gPSBzdHJlYW07CiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0OwogICAgdGhpcy5idWZmZXIgPSAwOwogICAgdGhpcy5idWZmZXJMZW5ndGggPSAwOwogICAgY29uc3QgbnVtQ29tcHMgPSBjb250ZXh0Lm51bUNvbXBzOwogICAgdGhpcy50bXBDb21wc0J1ZiA9IG5ldyBGbG9hdDMyQXJyYXkobnVtQ29tcHMpOwogICAgY29uc3QgY3NOdW1Db21wcyA9IGNvbnRleHQuY29sb3JTcGFjZS5udW1Db21wczsKICAgIHRoaXMudG1wQ3NDb21wc0J1ZiA9IGNvbnRleHQuY29sb3JGbiA/IG5ldyBGbG9hdDMyQXJyYXkoY3NOdW1Db21wcykgOiB0aGlzLnRtcENvbXBzQnVmOwogIH0KICBnZXQgaGFzRGF0YSgpIHsKICAgIGlmICh0aGlzLnN0cmVhbS5lbmQpIHsKICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtLnBvcyA8IHRoaXMuc3RyZWFtLmVuZDsKICAgIH0KICAgIGlmICh0aGlzLmJ1ZmZlckxlbmd0aCA+IDApIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBjb25zdCBuZXh0Qnl0ZSA9IHRoaXMuc3RyZWFtLmdldEJ5dGUoKTsKICAgIGlmIChuZXh0Qnl0ZSA8IDApIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdGhpcy5idWZmZXIgPSBuZXh0Qnl0ZTsKICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gODsKICAgIHJldHVybiB0cnVlOwogIH0KICByZWFkQml0cyhuKSB7CiAgICBjb25zdCB7CiAgICAgIHN0cmVhbQogICAgfSA9IHRoaXM7CiAgICBsZXQgewogICAgICBidWZmZXIsCiAgICAgIGJ1ZmZlckxlbmd0aAogICAgfSA9IHRoaXM7CiAgICBpZiAobiA9PT0gMzIpIHsKICAgICAgaWYgKGJ1ZmZlckxlbmd0aCA9PT0gMCkgewogICAgICAgIHJldHVybiBzdHJlYW0uZ2V0SW50MzIoKSA+Pj4gMDsKICAgICAgfQogICAgICBidWZmZXIgPSBidWZmZXIgPDwgMjQgfCBzdHJlYW0uZ2V0Qnl0ZSgpIDw8IDE2IHwgc3RyZWFtLmdldEJ5dGUoKSA8PCA4IHwgc3RyZWFtLmdldEJ5dGUoKTsKICAgICAgY29uc3QgbmV4dEJ5dGUgPSBzdHJlYW0uZ2V0Qnl0ZSgpOwogICAgICB0aGlzLmJ1ZmZlciA9IG5leHRCeXRlICYgKDEgPDwgYnVmZmVyTGVuZ3RoKSAtIDE7CiAgICAgIHJldHVybiAoYnVmZmVyIDw8IDggLSBidWZmZXJMZW5ndGggfCAobmV4dEJ5dGUgJiAweGZmKSA+PiBidWZmZXJMZW5ndGgpID4+PiAwOwogICAgfQogICAgaWYgKG4gPT09IDggJiYgYnVmZmVyTGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiBzdHJlYW0uZ2V0Qnl0ZSgpOwogICAgfQogICAgd2hpbGUgKGJ1ZmZlckxlbmd0aCA8IG4pIHsKICAgICAgYnVmZmVyID0gYnVmZmVyIDw8IDggfCBzdHJlYW0uZ2V0Qnl0ZSgpOwogICAgICBidWZmZXJMZW5ndGggKz0gODsKICAgIH0KICAgIGJ1ZmZlckxlbmd0aCAtPSBuOwogICAgdGhpcy5idWZmZXJMZW5ndGggPSBidWZmZXJMZW5ndGg7CiAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlciAmICgxIDw8IGJ1ZmZlckxlbmd0aCkgLSAxOwogICAgcmV0dXJuIGJ1ZmZlciA+PiBidWZmZXJMZW5ndGg7CiAgfQogIGFsaWduKCkgewogICAgdGhpcy5idWZmZXIgPSAwOwogICAgdGhpcy5idWZmZXJMZW5ndGggPSAwOwogIH0KICByZWFkRmxhZygpIHsKICAgIHJldHVybiB0aGlzLnJlYWRCaXRzKHRoaXMuY29udGV4dC5iaXRzUGVyRmxhZyk7CiAgfQogIHJlYWRDb29yZGluYXRlKCkgewogICAgY29uc3QgewogICAgICBiaXRzUGVyQ29vcmRpbmF0ZSwKICAgICAgZGVjb2RlCiAgICB9ID0gdGhpcy5jb250ZXh0OwogICAgY29uc3QgeGkgPSB0aGlzLnJlYWRCaXRzKGJpdHNQZXJDb29yZGluYXRlKTsKICAgIGNvbnN0IHlpID0gdGhpcy5yZWFkQml0cyhiaXRzUGVyQ29vcmRpbmF0ZSk7CiAgICBjb25zdCBzY2FsZSA9IGJpdHNQZXJDb29yZGluYXRlIDwgMzIgPyAxIC8gKCgxIDw8IGJpdHNQZXJDb29yZGluYXRlKSAtIDEpIDogMi4zMjgzMDY0MzY1Mzg2OTYzZS0xMDsKICAgIHJldHVybiBbeGkgKiBzY2FsZSAqIChkZWNvZGVbMV0gLSBkZWNvZGVbMF0pICsgZGVjb2RlWzBdLCB5aSAqIHNjYWxlICogKGRlY29kZVszXSAtIGRlY29kZVsyXSkgKyBkZWNvZGVbMl1dOwogIH0KICByZWFkQ29tcG9uZW50cygpIHsKICAgIGNvbnN0IHsKICAgICAgYml0c1BlckNvbXBvbmVudCwKICAgICAgY29sb3JGbiwKICAgICAgY29sb3JTcGFjZSwKICAgICAgZGVjb2RlLAogICAgICBudW1Db21wcwogICAgfSA9IHRoaXMuY29udGV4dDsKICAgIGNvbnN0IHNjYWxlID0gYml0c1BlckNvbXBvbmVudCA8IDMyID8gMSAvICgoMSA8PCBiaXRzUGVyQ29tcG9uZW50KSAtIDEpIDogMi4zMjgzMDY0MzY1Mzg2OTYzZS0xMDsKICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLnRtcENvbXBzQnVmOwogICAgZm9yIChsZXQgaSA9IDAsIGogPSA0OyBpIDwgbnVtQ29tcHM7IGkrKywgaiArPSAyKSB7CiAgICAgIGNvbnN0IGNpID0gdGhpcy5yZWFkQml0cyhiaXRzUGVyQ29tcG9uZW50KTsKICAgICAgY29tcG9uZW50c1tpXSA9IGNpICogc2NhbGUgKiAoZGVjb2RlW2ogKyAxXSAtIGRlY29kZVtqXSkgKyBkZWNvZGVbal07CiAgICB9CiAgICBjb25zdCBjb2xvciA9IHRoaXMudG1wQ3NDb21wc0J1ZjsKICAgIGNvbG9yRm4/Lihjb21wb25lbnRzLCAwLCBjb2xvciwgMCk7CiAgICByZXR1cm4gY29sb3JTcGFjZS5nZXRSZ2IoY29sb3IsIDApOwogIH0KfQpsZXQgYkNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKZnVuY3Rpb24gYnVpbGRCKGNvdW50KSB7CiAgY29uc3QgbHV0ID0gW107CiAgZm9yIChsZXQgaSA9IDA7IGkgPD0gY291bnQ7IGkrKykgewogICAgY29uc3QgdCA9IGkgLyBjb3VudCwKICAgICAgdF8gPSAxIC0gdDsKICAgIGx1dC5wdXNoKG5ldyBGbG9hdDMyQXJyYXkoW3RfICoqIDMsIDMgKiB0ICogdF8gKiogMiwgMyAqIHQgKiogMiAqIHRfLCB0ICoqIDNdKSk7CiAgfQogIHJldHVybiBsdXQ7Cn0KZnVuY3Rpb24gZ2V0Qihjb3VudCkgewogIHJldHVybiBiQ2FjaGVbY291bnRdIHx8PSBidWlsZEIoY291bnQpOwp9CmZ1bmN0aW9uIGNsZWFyUGF0dGVybkNhY2hlcygpIHsKICBiQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpOwp9CmNsYXNzIE1lc2hTaGFkaW5nIGV4dGVuZHMgQmFzZVNoYWRpbmcgewogIHN0YXRpYyBNSU5fU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCA9IDM7CiAgc3RhdGljIE1BWF9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5UID0gMjA7CiAgc3RhdGljIFRSSUFOR0xFX0RFTlNJVFkgPSAyMDsKICBjb25zdHJ1Y3RvcihzdHJlYW0sIHhyZWYsIHJlc291cmNlcywgcGRmRnVuY3Rpb25GYWN0b3J5LCBnbG9iYWxDb2xvclNwYWNlQ2FjaGUsIGxvY2FsQ29sb3JTcGFjZUNhY2hlKSB7CiAgICBzdXBlcigpOwogICAgaWYgKCEoc3RyZWFtIGluc3RhbmNlb2YgQmFzZVN0cmVhbSkpIHsKICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJNZXNoIGRhdGEgaXMgbm90IGEgc3RyZWFtIik7CiAgICB9CiAgICBjb25zdCBkaWN0ID0gc3RyZWFtLmRpY3Q7CiAgICB0aGlzLnNoYWRpbmdUeXBlID0gZGljdC5nZXQoIlNoYWRpbmdUeXBlIik7CiAgICB0aGlzLmJib3ggPSBsb29rdXBOb3JtYWxSZWN0KGRpY3QuZ2V0QXJyYXkoIkJCb3giKSwgbnVsbCk7CiAgICBjb25zdCBjcyA9IENvbG9yU3BhY2VVdGlscy5wYXJzZSh7CiAgICAgIGNzOiBkaWN0LmdldFJhdygiQ1MiKSB8fCBkaWN0LmdldFJhdygiQ29sb3JTcGFjZSIpLAogICAgICB4cmVmLAogICAgICByZXNvdXJjZXMsCiAgICAgIHBkZkZ1bmN0aW9uRmFjdG9yeSwKICAgICAgZ2xvYmFsQ29sb3JTcGFjZUNhY2hlLAogICAgICBsb2NhbENvbG9yU3BhY2VDYWNoZQogICAgfSk7CiAgICB0aGlzLmJhY2tncm91bmQgPSBkaWN0LmhhcygiQmFja2dyb3VuZCIpID8gY3MuZ2V0UmdiKGRpY3QuZ2V0KCJCYWNrZ3JvdW5kIiksIDApIDogbnVsbDsKICAgIGNvbnN0IGZuT2JqID0gZGljdC5nZXRSYXcoIkZ1bmN0aW9uIik7CiAgICBjb25zdCBmbiA9IGZuT2JqID8gcGRmRnVuY3Rpb25GYWN0b3J5LmNyZWF0ZShmbk9iaiwgdHJ1ZSkgOiBudWxsOwogICAgdGhpcy5jb29yZHMgPSBbXTsKICAgIHRoaXMuY29sb3JzID0gW107CiAgICB0aGlzLmZpZ3VyZXMgPSBbXTsKICAgIGNvbnN0IGRlY29kZUNvbnRleHQgPSB7CiAgICAgIGJpdHNQZXJDb29yZGluYXRlOiBkaWN0LmdldCgiQml0c1BlckNvb3JkaW5hdGUiKSwKICAgICAgYml0c1BlckNvbXBvbmVudDogZGljdC5nZXQoIkJpdHNQZXJDb21wb25lbnQiKSwKICAgICAgYml0c1BlckZsYWc6IGRpY3QuZ2V0KCJCaXRzUGVyRmxhZyIpLAogICAgICBkZWNvZGU6IGRpY3QuZ2V0QXJyYXkoIkRlY29kZSIpLAogICAgICBjb2xvckZuOiBmbiwKICAgICAgY29sb3JTcGFjZTogY3MsCiAgICAgIG51bUNvbXBzOiBmbiA/IDEgOiBjcy5udW1Db21wcwogICAgfTsKICAgIGNvbnN0IHJlYWRlciA9IG5ldyBNZXNoU3RyZWFtUmVhZGVyKHN0cmVhbSwgZGVjb2RlQ29udGV4dCk7CiAgICBsZXQgcGF0Y2hNZXNoID0gZmFsc2U7CiAgICBzd2l0Y2ggKHRoaXMuc2hhZGluZ1R5cGUpIHsKICAgICAgY2FzZSBTaGFkaW5nVHlwZS5GUkVFX0ZPUk1fTUVTSDoKICAgICAgICB0aGlzLl9kZWNvZGVUeXBlNFNoYWRpbmcocmVhZGVyKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTaGFkaW5nVHlwZS5MQVRUSUNFX0ZPUk1fTUVTSDoKICAgICAgICBjb25zdCB2ZXJ0aWNlc1BlclJvdyA9IGRpY3QuZ2V0KCJWZXJ0aWNlc1BlclJvdyIpIHwgMDsKICAgICAgICBpZiAodmVydGljZXNQZXJSb3cgPCAyKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkludmFsaWQgVmVydGljZXNQZXJSb3ciKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5fZGVjb2RlVHlwZTVTaGFkaW5nKHJlYWRlciwgdmVydGljZXNQZXJSb3cpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFNoYWRpbmdUeXBlLkNPT05TX1BBVENIX01FU0g6CiAgICAgICAgdGhpcy5fZGVjb2RlVHlwZTZTaGFkaW5nKHJlYWRlcik7CiAgICAgICAgcGF0Y2hNZXNoID0gdHJ1ZTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTaGFkaW5nVHlwZS5URU5TT1JfUEFUQ0hfTUVTSDoKICAgICAgICB0aGlzLl9kZWNvZGVUeXBlN1NoYWRpbmcocmVhZGVyKTsKICAgICAgICBwYXRjaE1lc2ggPSB0cnVlOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHVucmVhY2hhYmxlKCJVbnN1cHBvcnRlZCBtZXNoIHR5cGUuIik7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBpZiAocGF0Y2hNZXNoKSB7CiAgICAgIHRoaXMuX3VwZGF0ZUJvdW5kcygpOwogICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSB0aGlzLmZpZ3VyZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICAgIHRoaXMuX2J1aWxkRmlndXJlRnJvbVBhdGNoKGkpOwogICAgICB9CiAgICB9CiAgICB0aGlzLl91cGRhdGVCb3VuZHMoKTsKICAgIHRoaXMuX3BhY2tEYXRhKCk7CiAgfQogIF9kZWNvZGVUeXBlNFNoYWRpbmcocmVhZGVyKSB7CiAgICBjb25zdCBjb29yZHMgPSB0aGlzLmNvb3JkczsKICAgIGNvbnN0IGNvbG9ycyA9IHRoaXMuY29sb3JzOwogICAgY29uc3Qgb3BlcmF0b3JzID0gW107CiAgICBjb25zdCBwcyA9IFtdOwogICAgbGV0IHZlcnRpY2VzTGVmdCA9IDA7CiAgICB3aGlsZSAocmVhZGVyLmhhc0RhdGEpIHsKICAgICAgY29uc3QgZiA9IHJlYWRlci5yZWFkRmxhZygpOwogICAgICBjb25zdCBjb29yZCA9IHJlYWRlci5yZWFkQ29vcmRpbmF0ZSgpOwogICAgICBjb25zdCBjb2xvciA9IHJlYWRlci5yZWFkQ29tcG9uZW50cygpOwogICAgICBpZiAodmVydGljZXNMZWZ0ID09PSAwKSB7CiAgICAgICAgaWYgKCEoMCA8PSBmICYmIGYgPD0gMikpIHsKICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiVW5rbm93biB0eXBlNCBmbGFnIik7CiAgICAgICAgfQogICAgICAgIHN3aXRjaCAoZikgewogICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICB2ZXJ0aWNlc0xlZnQgPSAzOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgcHMucHVzaChwcy5hdCgtMiksIHBzLmF0KC0xKSk7CiAgICAgICAgICAgIHZlcnRpY2VzTGVmdCA9IDE7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICBwcy5wdXNoKHBzLmF0KC0zKSwgcHMuYXQoLTEpKTsKICAgICAgICAgICAgdmVydGljZXNMZWZ0ID0gMTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIG9wZXJhdG9ycy5wdXNoKGYpOwogICAgICB9CiAgICAgIHBzLnB1c2goY29vcmRzLmxlbmd0aCk7CiAgICAgIGNvb3Jkcy5wdXNoKGNvb3JkKTsKICAgICAgY29sb3JzLnB1c2goY29sb3IpOwogICAgICB2ZXJ0aWNlc0xlZnQtLTsKICAgICAgcmVhZGVyLmFsaWduKCk7CiAgICB9CiAgICB0aGlzLmZpZ3VyZXMucHVzaCh7CiAgICAgIHR5cGU6ICJ0cmlhbmdsZXMiLAogICAgICBjb29yZHM6IG5ldyBJbnQzMkFycmF5KHBzKSwKICAgICAgY29sb3JzOiBuZXcgSW50MzJBcnJheShwcykKICAgIH0pOwogIH0KICBfZGVjb2RlVHlwZTVTaGFkaW5nKHJlYWRlciwgdmVydGljZXNQZXJSb3cpIHsKICAgIGNvbnN0IGNvb3JkcyA9IHRoaXMuY29vcmRzOwogICAgY29uc3QgY29sb3JzID0gdGhpcy5jb2xvcnM7CiAgICBjb25zdCBwcyA9IFtdOwogICAgd2hpbGUgKHJlYWRlci5oYXNEYXRhKSB7CiAgICAgIGNvbnN0IGNvb3JkID0gcmVhZGVyLnJlYWRDb29yZGluYXRlKCk7CiAgICAgIGNvbnN0IGNvbG9yID0gcmVhZGVyLnJlYWRDb21wb25lbnRzKCk7CiAgICAgIHBzLnB1c2goY29vcmRzLmxlbmd0aCk7CiAgICAgIGNvb3Jkcy5wdXNoKGNvb3JkKTsKICAgICAgY29sb3JzLnB1c2goY29sb3IpOwogICAgfQogICAgdGhpcy5maWd1cmVzLnB1c2goewogICAgICB0eXBlOiAibGF0dGljZSIsCiAgICAgIGNvb3JkczogbmV3IEludDMyQXJyYXkocHMpLAogICAgICBjb2xvcnM6IG5ldyBJbnQzMkFycmF5KHBzKSwKICAgICAgdmVydGljZXNQZXJSb3cKICAgIH0pOwogIH0KICBfZGVjb2RlVHlwZTZTaGFkaW5nKHJlYWRlcikgewogICAgY29uc3QgY29vcmRzID0gdGhpcy5jb29yZHM7CiAgICBjb25zdCBjb2xvcnMgPSB0aGlzLmNvbG9yczsKICAgIGNvbnN0IHBzID0gbmV3IEludDMyQXJyYXkoMTYpOwogICAgY29uc3QgY3MgPSBuZXcgSW50MzJBcnJheSg0KTsKICAgIHdoaWxlIChyZWFkZXIuaGFzRGF0YSkgewogICAgICBjb25zdCBmID0gcmVhZGVyLnJlYWRGbGFnKCk7CiAgICAgIGlmICghKDAgPD0gZiAmJiBmIDw9IDMpKSB7CiAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJVbmtub3duIHR5cGU2IGZsYWciKTsKICAgICAgfQogICAgICBjb25zdCBwaSA9IGNvb3Jkcy5sZW5ndGg7CiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGYgIT09IDAgPyA4IDogMTI7IGkgPCBpaTsgaSsrKSB7CiAgICAgICAgY29vcmRzLnB1c2gocmVhZGVyLnJlYWRDb29yZGluYXRlKCkpOwogICAgICB9CiAgICAgIGNvbnN0IGNpID0gY29sb3JzLmxlbmd0aDsKICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gZiAhPT0gMCA/IDIgOiA0OyBpIDwgaWk7IGkrKykgewogICAgICAgIGNvbG9ycy5wdXNoKHJlYWRlci5yZWFkQ29tcG9uZW50cygpKTsKICAgICAgfQogICAgICBsZXQgdG1wMSwgdG1wMiwgdG1wMywgdG1wNDsKICAgICAgc3dpdGNoIChmKSB7CiAgICAgICAgY2FzZSAwOgogICAgICAgICAgcHNbMTJdID0gcGkgKyAzOwogICAgICAgICAgcHNbMTNdID0gcGkgKyA0OwogICAgICAgICAgcHNbMTRdID0gcGkgKyA1OwogICAgICAgICAgcHNbMTVdID0gcGkgKyA2OwogICAgICAgICAgcHNbOF0gPSBwaSArIDI7CiAgICAgICAgICBwc1sxMV0gPSBwaSArIDc7CiAgICAgICAgICBwc1s0XSA9IHBpICsgMTsKICAgICAgICAgIHBzWzddID0gcGkgKyA4OwogICAgICAgICAgcHNbMF0gPSBwaTsKICAgICAgICAgIHBzWzFdID0gcGkgKyAxMTsKICAgICAgICAgIHBzWzJdID0gcGkgKyAxMDsKICAgICAgICAgIHBzWzNdID0gcGkgKyA5OwogICAgICAgICAgY3NbMl0gPSBjaSArIDE7CiAgICAgICAgICBjc1szXSA9IGNpICsgMjsKICAgICAgICAgIGNzWzBdID0gY2k7CiAgICAgICAgICBjc1sxXSA9IGNpICsgMzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMToKICAgICAgICAgIHRtcDEgPSBwc1sxMl07CiAgICAgICAgICB0bXAyID0gcHNbMTNdOwogICAgICAgICAgdG1wMyA9IHBzWzE0XTsKICAgICAgICAgIHRtcDQgPSBwc1sxNV07CiAgICAgICAgICBwc1sxMl0gPSB0bXA0OwogICAgICAgICAgcHNbMTNdID0gcGkgKyAwOwogICAgICAgICAgcHNbMTRdID0gcGkgKyAxOwogICAgICAgICAgcHNbMTVdID0gcGkgKyAyOwogICAgICAgICAgcHNbOF0gPSB0bXAzOwogICAgICAgICAgcHNbMTFdID0gcGkgKyAzOwogICAgICAgICAgcHNbNF0gPSB0bXAyOwogICAgICAgICAgcHNbN10gPSBwaSArIDQ7CiAgICAgICAgICBwc1swXSA9IHRtcDE7CiAgICAgICAgICBwc1sxXSA9IHBpICsgNzsKICAgICAgICAgIHBzWzJdID0gcGkgKyA2OwogICAgICAgICAgcHNbM10gPSBwaSArIDU7CiAgICAgICAgICB0bXAxID0gY3NbMl07CiAgICAgICAgICB0bXAyID0gY3NbM107CiAgICAgICAgICBjc1syXSA9IHRtcDI7CiAgICAgICAgICBjc1szXSA9IGNpOwogICAgICAgICAgY3NbMF0gPSB0bXAxOwogICAgICAgICAgY3NbMV0gPSBjaSArIDE7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICB0bXAxID0gcHNbMTVdOwogICAgICAgICAgdG1wMiA9IHBzWzExXTsKICAgICAgICAgIHBzWzEyXSA9IHBzWzNdOwogICAgICAgICAgcHNbMTNdID0gcGkgKyAwOwogICAgICAgICAgcHNbMTRdID0gcGkgKyAxOwogICAgICAgICAgcHNbMTVdID0gcGkgKyAyOwogICAgICAgICAgcHNbOF0gPSBwc1s3XTsKICAgICAgICAgIHBzWzExXSA9IHBpICsgMzsKICAgICAgICAgIHBzWzRdID0gdG1wMjsKICAgICAgICAgIHBzWzddID0gcGkgKyA0OwogICAgICAgICAgcHNbMF0gPSB0bXAxOwogICAgICAgICAgcHNbMV0gPSBwaSArIDc7CiAgICAgICAgICBwc1syXSA9IHBpICsgNjsKICAgICAgICAgIHBzWzNdID0gcGkgKyA1OwogICAgICAgICAgdG1wMSA9IGNzWzNdOwogICAgICAgICAgY3NbMl0gPSBjc1sxXTsKICAgICAgICAgIGNzWzNdID0gY2k7CiAgICAgICAgICBjc1swXSA9IHRtcDE7CiAgICAgICAgICBjc1sxXSA9IGNpICsgMTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMzoKICAgICAgICAgIHBzWzEyXSA9IHBzWzBdOwogICAgICAgICAgcHNbMTNdID0gcGkgKyAwOwogICAgICAgICAgcHNbMTRdID0gcGkgKyAxOwogICAgICAgICAgcHNbMTVdID0gcGkgKyAyOwogICAgICAgICAgcHNbOF0gPSBwc1sxXTsKICAgICAgICAgIHBzWzExXSA9IHBpICsgMzsKICAgICAgICAgIHBzWzRdID0gcHNbMl07CiAgICAgICAgICBwc1s3XSA9IHBpICsgNDsKICAgICAgICAgIHBzWzBdID0gcHNbM107CiAgICAgICAgICBwc1sxXSA9IHBpICsgNzsKICAgICAgICAgIHBzWzJdID0gcGkgKyA2OwogICAgICAgICAgcHNbM10gPSBwaSArIDU7CiAgICAgICAgICBjc1syXSA9IGNzWzBdOwogICAgICAgICAgY3NbM10gPSBjaTsKICAgICAgICAgIGNzWzBdID0gY3NbMV07CiAgICAgICAgICBjc1sxXSA9IGNpICsgMTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHBzWzVdID0gY29vcmRzLmxlbmd0aDsKICAgICAgY29vcmRzLnB1c2goWygtNCAqIGNvb3Jkc1twc1swXV1bMF0gLSBjb29yZHNbcHNbMTVdXVswXSArIDYgKiAoY29vcmRzW3BzWzRdXVswXSArIGNvb3Jkc1twc1sxXV1bMF0pIC0gMiAqIChjb29yZHNbcHNbMTJdXVswXSArIGNvb3Jkc1twc1szXV1bMF0pICsgMyAqIChjb29yZHNbcHNbMTNdXVswXSArIGNvb3Jkc1twc1s3XV1bMF0pKSAvIDksICgtNCAqIGNvb3Jkc1twc1swXV1bMV0gLSBjb29yZHNbcHNbMTVdXVsxXSArIDYgKiAoY29vcmRzW3BzWzRdXVsxXSArIGNvb3Jkc1twc1sxXV1bMV0pIC0gMiAqIChjb29yZHNbcHNbMTJdXVsxXSArIGNvb3Jkc1twc1szXV1bMV0pICsgMyAqIChjb29yZHNbcHNbMTNdXVsxXSArIGNvb3Jkc1twc1s3XV1bMV0pKSAvIDldKTsKICAgICAgcHNbNl0gPSBjb29yZHMubGVuZ3RoOwogICAgICBjb29yZHMucHVzaChbKC00ICogY29vcmRzW3BzWzNdXVswXSAtIGNvb3Jkc1twc1sxMl1dWzBdICsgNiAqIChjb29yZHNbcHNbMl1dWzBdICsgY29vcmRzW3BzWzddXVswXSkgLSAyICogKGNvb3Jkc1twc1swXV1bMF0gKyBjb29yZHNbcHNbMTVdXVswXSkgKyAzICogKGNvb3Jkc1twc1s0XV1bMF0gKyBjb29yZHNbcHNbMTRdXVswXSkpIC8gOSwgKC00ICogY29vcmRzW3BzWzNdXVsxXSAtIGNvb3Jkc1twc1sxMl1dWzFdICsgNiAqIChjb29yZHNbcHNbMl1dWzFdICsgY29vcmRzW3BzWzddXVsxXSkgLSAyICogKGNvb3Jkc1twc1swXV1bMV0gKyBjb29yZHNbcHNbMTVdXVsxXSkgKyAzICogKGNvb3Jkc1twc1s0XV1bMV0gKyBjb29yZHNbcHNbMTRdXVsxXSkpIC8gOV0pOwogICAgICBwc1s5XSA9IGNvb3Jkcy5sZW5ndGg7CiAgICAgIGNvb3Jkcy5wdXNoKFsoLTQgKiBjb29yZHNbcHNbMTJdXVswXSAtIGNvb3Jkc1twc1szXV1bMF0gKyA2ICogKGNvb3Jkc1twc1s4XV1bMF0gKyBjb29yZHNbcHNbMTNdXVswXSkgLSAyICogKGNvb3Jkc1twc1swXV1bMF0gKyBjb29yZHNbcHNbMTVdXVswXSkgKyAzICogKGNvb3Jkc1twc1sxMV1dWzBdICsgY29vcmRzW3BzWzFdXVswXSkpIC8gOSwgKC00ICogY29vcmRzW3BzWzEyXV1bMV0gLSBjb29yZHNbcHNbM11dWzFdICsgNiAqIChjb29yZHNbcHNbOF1dWzFdICsgY29vcmRzW3BzWzEzXV1bMV0pIC0gMiAqIChjb29yZHNbcHNbMF1dWzFdICsgY29vcmRzW3BzWzE1XV1bMV0pICsgMyAqIChjb29yZHNbcHNbMTFdXVsxXSArIGNvb3Jkc1twc1sxXV1bMV0pKSAvIDldKTsKICAgICAgcHNbMTBdID0gY29vcmRzLmxlbmd0aDsKICAgICAgY29vcmRzLnB1c2goWygtNCAqIGNvb3Jkc1twc1sxNV1dWzBdIC0gY29vcmRzW3BzWzBdXVswXSArIDYgKiAoY29vcmRzW3BzWzExXV1bMF0gKyBjb29yZHNbcHNbMTRdXVswXSkgLSAyICogKGNvb3Jkc1twc1sxMl1dWzBdICsgY29vcmRzW3BzWzNdXVswXSkgKyAzICogKGNvb3Jkc1twc1syXV1bMF0gKyBjb29yZHNbcHNbOF1dWzBdKSkgLyA5LCAoLTQgKiBjb29yZHNbcHNbMTVdXVsxXSAtIGNvb3Jkc1twc1swXV1bMV0gKyA2ICogKGNvb3Jkc1twc1sxMV1dWzFdICsgY29vcmRzW3BzWzE0XV1bMV0pIC0gMiAqIChjb29yZHNbcHNbMTJdXVsxXSArIGNvb3Jkc1twc1szXV1bMV0pICsgMyAqIChjb29yZHNbcHNbMl1dWzFdICsgY29vcmRzW3BzWzhdXVsxXSkpIC8gOV0pOwogICAgICB0aGlzLmZpZ3VyZXMucHVzaCh7CiAgICAgICAgdHlwZTogInBhdGNoIiwKICAgICAgICBjb29yZHM6IG5ldyBJbnQzMkFycmF5KHBzKSwKICAgICAgICBjb2xvcnM6IG5ldyBJbnQzMkFycmF5KGNzKQogICAgICB9KTsKICAgIH0KICB9CiAgX2RlY29kZVR5cGU3U2hhZGluZyhyZWFkZXIpIHsKICAgIGNvbnN0IGNvb3JkcyA9IHRoaXMuY29vcmRzOwogICAgY29uc3QgY29sb3JzID0gdGhpcy5jb2xvcnM7CiAgICBjb25zdCBwcyA9IG5ldyBJbnQzMkFycmF5KDE2KTsKICAgIGNvbnN0IGNzID0gbmV3IEludDMyQXJyYXkoNCk7CiAgICB3aGlsZSAocmVhZGVyLmhhc0RhdGEpIHsKICAgICAgY29uc3QgZiA9IHJlYWRlci5yZWFkRmxhZygpOwogICAgICBpZiAoISgwIDw9IGYgJiYgZiA8PSAzKSkgewogICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiVW5rbm93biB0eXBlNyBmbGFnIik7CiAgICAgIH0KICAgICAgY29uc3QgcGkgPSBjb29yZHMubGVuZ3RoOwogICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBmICE9PSAwID8gMTIgOiAxNjsgaSA8IGlpOyBpKyspIHsKICAgICAgICBjb29yZHMucHVzaChyZWFkZXIucmVhZENvb3JkaW5hdGUoKSk7CiAgICAgIH0KICAgICAgY29uc3QgY2kgPSBjb2xvcnMubGVuZ3RoOwogICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBmICE9PSAwID8gMiA6IDQ7IGkgPCBpaTsgaSsrKSB7CiAgICAgICAgY29sb3JzLnB1c2gocmVhZGVyLnJlYWRDb21wb25lbnRzKCkpOwogICAgICB9CiAgICAgIGxldCB0bXAxLCB0bXAyLCB0bXAzLCB0bXA0OwogICAgICBzd2l0Y2ggKGYpIHsKICAgICAgICBjYXNlIDA6CiAgICAgICAgICBwc1sxMl0gPSBwaSArIDM7CiAgICAgICAgICBwc1sxM10gPSBwaSArIDQ7CiAgICAgICAgICBwc1sxNF0gPSBwaSArIDU7CiAgICAgICAgICBwc1sxNV0gPSBwaSArIDY7CiAgICAgICAgICBwc1s4XSA9IHBpICsgMjsKICAgICAgICAgIHBzWzldID0gcGkgKyAxMzsKICAgICAgICAgIHBzWzEwXSA9IHBpICsgMTQ7CiAgICAgICAgICBwc1sxMV0gPSBwaSArIDc7CiAgICAgICAgICBwc1s0XSA9IHBpICsgMTsKICAgICAgICAgIHBzWzVdID0gcGkgKyAxMjsKICAgICAgICAgIHBzWzZdID0gcGkgKyAxNTsKICAgICAgICAgIHBzWzddID0gcGkgKyA4OwogICAgICAgICAgcHNbMF0gPSBwaTsKICAgICAgICAgIHBzWzFdID0gcGkgKyAxMTsKICAgICAgICAgIHBzWzJdID0gcGkgKyAxMDsKICAgICAgICAgIHBzWzNdID0gcGkgKyA5OwogICAgICAgICAgY3NbMl0gPSBjaSArIDE7CiAgICAgICAgICBjc1szXSA9IGNpICsgMjsKICAgICAgICAgIGNzWzBdID0gY2k7CiAgICAgICAgICBjc1sxXSA9IGNpICsgMzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMToKICAgICAgICAgIHRtcDEgPSBwc1sxMl07CiAgICAgICAgICB0bXAyID0gcHNbMTNdOwogICAgICAgICAgdG1wMyA9IHBzWzE0XTsKICAgICAgICAgIHRtcDQgPSBwc1sxNV07CiAgICAgICAgICBwc1sxMl0gPSB0bXA0OwogICAgICAgICAgcHNbMTNdID0gcGkgKyAwOwogICAgICAgICAgcHNbMTRdID0gcGkgKyAxOwogICAgICAgICAgcHNbMTVdID0gcGkgKyAyOwogICAgICAgICAgcHNbOF0gPSB0bXAzOwogICAgICAgICAgcHNbOV0gPSBwaSArIDk7CiAgICAgICAgICBwc1sxMF0gPSBwaSArIDEwOwogICAgICAgICAgcHNbMTFdID0gcGkgKyAzOwogICAgICAgICAgcHNbNF0gPSB0bXAyOwogICAgICAgICAgcHNbNV0gPSBwaSArIDg7CiAgICAgICAgICBwc1s2XSA9IHBpICsgMTE7CiAgICAgICAgICBwc1s3XSA9IHBpICsgNDsKICAgICAgICAgIHBzWzBdID0gdG1wMTsKICAgICAgICAgIHBzWzFdID0gcGkgKyA3OwogICAgICAgICAgcHNbMl0gPSBwaSArIDY7CiAgICAgICAgICBwc1szXSA9IHBpICsgNTsKICAgICAgICAgIHRtcDEgPSBjc1syXTsKICAgICAgICAgIHRtcDIgPSBjc1szXTsKICAgICAgICAgIGNzWzJdID0gdG1wMjsKICAgICAgICAgIGNzWzNdID0gY2k7CiAgICAgICAgICBjc1swXSA9IHRtcDE7CiAgICAgICAgICBjc1sxXSA9IGNpICsgMTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMjoKICAgICAgICAgIHRtcDEgPSBwc1sxNV07CiAgICAgICAgICB0bXAyID0gcHNbMTFdOwogICAgICAgICAgcHNbMTJdID0gcHNbM107CiAgICAgICAgICBwc1sxM10gPSBwaSArIDA7CiAgICAgICAgICBwc1sxNF0gPSBwaSArIDE7CiAgICAgICAgICBwc1sxNV0gPSBwaSArIDI7CiAgICAgICAgICBwc1s4XSA9IHBzWzddOwogICAgICAgICAgcHNbOV0gPSBwaSArIDk7CiAgICAgICAgICBwc1sxMF0gPSBwaSArIDEwOwogICAgICAgICAgcHNbMTFdID0gcGkgKyAzOwogICAgICAgICAgcHNbNF0gPSB0bXAyOwogICAgICAgICAgcHNbNV0gPSBwaSArIDg7CiAgICAgICAgICBwc1s2XSA9IHBpICsgMTE7CiAgICAgICAgICBwc1s3XSA9IHBpICsgNDsKICAgICAgICAgIHBzWzBdID0gdG1wMTsKICAgICAgICAgIHBzWzFdID0gcGkgKyA3OwogICAgICAgICAgcHNbMl0gPSBwaSArIDY7CiAgICAgICAgICBwc1szXSA9IHBpICsgNTsKICAgICAgICAgIHRtcDEgPSBjc1szXTsKICAgICAgICAgIGNzWzJdID0gY3NbMV07CiAgICAgICAgICBjc1szXSA9IGNpOwogICAgICAgICAgY3NbMF0gPSB0bXAxOwogICAgICAgICAgY3NbMV0gPSBjaSArIDE7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDM6CiAgICAgICAgICBwc1sxMl0gPSBwc1swXTsKICAgICAgICAgIHBzWzEzXSA9IHBpICsgMDsKICAgICAgICAgIHBzWzE0XSA9IHBpICsgMTsKICAgICAgICAgIHBzWzE1XSA9IHBpICsgMjsKICAgICAgICAgIHBzWzhdID0gcHNbMV07CiAgICAgICAgICBwc1s5XSA9IHBpICsgOTsKICAgICAgICAgIHBzWzEwXSA9IHBpICsgMTA7CiAgICAgICAgICBwc1sxMV0gPSBwaSArIDM7CiAgICAgICAgICBwc1s0XSA9IHBzWzJdOwogICAgICAgICAgcHNbNV0gPSBwaSArIDg7CiAgICAgICAgICBwc1s2XSA9IHBpICsgMTE7CiAgICAgICAgICBwc1s3XSA9IHBpICsgNDsKICAgICAgICAgIHBzWzBdID0gcHNbM107CiAgICAgICAgICBwc1sxXSA9IHBpICsgNzsKICAgICAgICAgIHBzWzJdID0gcGkgKyA2OwogICAgICAgICAgcHNbM10gPSBwaSArIDU7CiAgICAgICAgICBjc1syXSA9IGNzWzBdOwogICAgICAgICAgY3NbM10gPSBjaTsKICAgICAgICAgIGNzWzBdID0gY3NbMV07CiAgICAgICAgICBjc1sxXSA9IGNpICsgMTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHRoaXMuZmlndXJlcy5wdXNoKHsKICAgICAgICB0eXBlOiAicGF0Y2giLAogICAgICAgIGNvb3JkczogbmV3IEludDMyQXJyYXkocHMpLAogICAgICAgIGNvbG9yczogbmV3IEludDMyQXJyYXkoY3MpCiAgICAgIH0pOwogICAgfQogIH0KICBfYnVpbGRGaWd1cmVGcm9tUGF0Y2goaW5kZXgpIHsKICAgIGNvbnN0IGZpZ3VyZSA9IHRoaXMuZmlndXJlc1tpbmRleF07CiAgICBhc3NlcnQoZmlndXJlLnR5cGUgPT09ICJwYXRjaCIsICJVbmV4cGVjdGVkIHBhdGNoIG1lc2ggZmlndXJlIik7CiAgICBjb25zdCBjb29yZHMgPSB0aGlzLmNvb3JkcywKICAgICAgY29sb3JzID0gdGhpcy5jb2xvcnM7CiAgICBjb25zdCBwaSA9IGZpZ3VyZS5jb29yZHM7CiAgICBjb25zdCBjaSA9IGZpZ3VyZS5jb2xvcnM7CiAgICBjb25zdCBmaWd1cmVNaW5YID0gTWF0aC5taW4oY29vcmRzW3BpWzBdXVswXSwgY29vcmRzW3BpWzNdXVswXSwgY29vcmRzW3BpWzEyXV1bMF0sIGNvb3Jkc1twaVsxNV1dWzBdKTsKICAgIGNvbnN0IGZpZ3VyZU1pblkgPSBNYXRoLm1pbihjb29yZHNbcGlbMF1dWzFdLCBjb29yZHNbcGlbM11dWzFdLCBjb29yZHNbcGlbMTJdXVsxXSwgY29vcmRzW3BpWzE1XV1bMV0pOwogICAgY29uc3QgZmlndXJlTWF4WCA9IE1hdGgubWF4KGNvb3Jkc1twaVswXV1bMF0sIGNvb3Jkc1twaVszXV1bMF0sIGNvb3Jkc1twaVsxMl1dWzBdLCBjb29yZHNbcGlbMTVdXVswXSk7CiAgICBjb25zdCBmaWd1cmVNYXhZID0gTWF0aC5tYXgoY29vcmRzW3BpWzBdXVsxXSwgY29vcmRzW3BpWzNdXVsxXSwgY29vcmRzW3BpWzEyXV1bMV0sIGNvb3Jkc1twaVsxNV1dWzFdKTsKICAgIGxldCBzcGxpdFhCeSA9IE1hdGguY2VpbCgoZmlndXJlTWF4WCAtIGZpZ3VyZU1pblgpICogTWVzaFNoYWRpbmcuVFJJQU5HTEVfREVOU0lUWSAvICh0aGlzLmJvdW5kc1syXSAtIHRoaXMuYm91bmRzWzBdKSk7CiAgICBzcGxpdFhCeSA9IE1hdGhDbGFtcChzcGxpdFhCeSwgTWVzaFNoYWRpbmcuTUlOX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQsIE1lc2hTaGFkaW5nLk1BWF9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5UKTsKICAgIGxldCBzcGxpdFlCeSA9IE1hdGguY2VpbCgoZmlndXJlTWF4WSAtIGZpZ3VyZU1pblkpICogTWVzaFNoYWRpbmcuVFJJQU5HTEVfREVOU0lUWSAvICh0aGlzLmJvdW5kc1szXSAtIHRoaXMuYm91bmRzWzFdKSk7CiAgICBzcGxpdFlCeSA9IE1hdGhDbGFtcChzcGxpdFlCeSwgTWVzaFNoYWRpbmcuTUlOX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQsIE1lc2hTaGFkaW5nLk1BWF9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5UKTsKICAgIGNvbnN0IHZlcnRpY2VzUGVyUm93ID0gc3BsaXRYQnkgKyAxOwogICAgY29uc3QgZmlndXJlQ29vcmRzID0gbmV3IEludDMyQXJyYXkoKHNwbGl0WUJ5ICsgMSkgKiB2ZXJ0aWNlc1BlclJvdyk7CiAgICBjb25zdCBmaWd1cmVDb2xvcnMgPSBuZXcgSW50MzJBcnJheSgoc3BsaXRZQnkgKyAxKSAqIHZlcnRpY2VzUGVyUm93KTsKICAgIGxldCBrID0gMDsKICAgIGNvbnN0IGNsID0gbmV3IFVpbnQ4QXJyYXkoMyksCiAgICAgIGNyID0gbmV3IFVpbnQ4QXJyYXkoMyk7CiAgICBjb25zdCBjMCA9IGNvbG9yc1tjaVswXV0sCiAgICAgIGMxID0gY29sb3JzW2NpWzFdXSwKICAgICAgYzIgPSBjb2xvcnNbY2lbMl1dLAogICAgICBjMyA9IGNvbG9yc1tjaVszXV07CiAgICBjb25zdCBiUm93ID0gZ2V0QihzcGxpdFlCeSksCiAgICAgIGJDb2wgPSBnZXRCKHNwbGl0WEJ5KTsKICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8PSBzcGxpdFlCeTsgcm93KyspIHsKICAgICAgY2xbMF0gPSAoYzBbMF0gKiAoc3BsaXRZQnkgLSByb3cpICsgYzJbMF0gKiByb3cpIC8gc3BsaXRZQnkgfCAwOwogICAgICBjbFsxXSA9IChjMFsxXSAqIChzcGxpdFlCeSAtIHJvdykgKyBjMlsxXSAqIHJvdykgLyBzcGxpdFlCeSB8IDA7CiAgICAgIGNsWzJdID0gKGMwWzJdICogKHNwbGl0WUJ5IC0gcm93KSArIGMyWzJdICogcm93KSAvIHNwbGl0WUJ5IHwgMDsKICAgICAgY3JbMF0gPSAoYzFbMF0gKiAoc3BsaXRZQnkgLSByb3cpICsgYzNbMF0gKiByb3cpIC8gc3BsaXRZQnkgfCAwOwogICAgICBjclsxXSA9IChjMVsxXSAqIChzcGxpdFlCeSAtIHJvdykgKyBjM1sxXSAqIHJvdykgLyBzcGxpdFlCeSB8IDA7CiAgICAgIGNyWzJdID0gKGMxWzJdICogKHNwbGl0WUJ5IC0gcm93KSArIGMzWzJdICogcm93KSAvIHNwbGl0WUJ5IHwgMDsKICAgICAgZm9yIChsZXQgY29sID0gMDsgY29sIDw9IHNwbGl0WEJ5OyBjb2wrKywgaysrKSB7CiAgICAgICAgaWYgKChyb3cgPT09IDAgfHwgcm93ID09PSBzcGxpdFlCeSkgJiYgKGNvbCA9PT0gMCB8fCBjb2wgPT09IHNwbGl0WEJ5KSkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGxldCB4ID0gMCwKICAgICAgICAgIHkgPSAwOwogICAgICAgIGxldCBxID0gMDsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSAzOyBpKyspIHsKICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDw9IDM7IGorKywgcSsrKSB7CiAgICAgICAgICAgIGNvbnN0IG0gPSBiUm93W3Jvd11baV0gKiBiQ29sW2NvbF1bal07CiAgICAgICAgICAgIHggKz0gY29vcmRzW3BpW3FdXVswXSAqIG07CiAgICAgICAgICAgIHkgKz0gY29vcmRzW3BpW3FdXVsxXSAqIG07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZpZ3VyZUNvb3Jkc1trXSA9IGNvb3Jkcy5sZW5ndGg7CiAgICAgICAgY29vcmRzLnB1c2goW3gsIHldKTsKICAgICAgICBmaWd1cmVDb2xvcnNba10gPSBjb2xvcnMubGVuZ3RoOwogICAgICAgIGNvbnN0IG5ld0NvbG9yID0gbmV3IFVpbnQ4QXJyYXkoMyk7CiAgICAgICAgbmV3Q29sb3JbMF0gPSAoY2xbMF0gKiAoc3BsaXRYQnkgLSBjb2wpICsgY3JbMF0gKiBjb2wpIC8gc3BsaXRYQnkgfCAwOwogICAgICAgIG5ld0NvbG9yWzFdID0gKGNsWzFdICogKHNwbGl0WEJ5IC0gY29sKSArIGNyWzFdICogY29sKSAvIHNwbGl0WEJ5IHwgMDsKICAgICAgICBuZXdDb2xvclsyXSA9IChjbFsyXSAqIChzcGxpdFhCeSAtIGNvbCkgKyBjclsyXSAqIGNvbCkgLyBzcGxpdFhCeSB8IDA7CiAgICAgICAgY29sb3JzLnB1c2gobmV3Q29sb3IpOwogICAgICB9CiAgICB9CiAgICBmaWd1cmVDb29yZHNbMF0gPSBwaVswXTsKICAgIGZpZ3VyZUNvbG9yc1swXSA9IGNpWzBdOwogICAgZmlndXJlQ29vcmRzW3NwbGl0WEJ5XSA9IHBpWzNdOwogICAgZmlndXJlQ29sb3JzW3NwbGl0WEJ5XSA9IGNpWzFdOwogICAgZmlndXJlQ29vcmRzW3ZlcnRpY2VzUGVyUm93ICogc3BsaXRZQnldID0gcGlbMTJdOwogICAgZmlndXJlQ29sb3JzW3ZlcnRpY2VzUGVyUm93ICogc3BsaXRZQnldID0gY2lbMl07CiAgICBmaWd1cmVDb29yZHNbdmVydGljZXNQZXJSb3cgKiBzcGxpdFlCeSArIHNwbGl0WEJ5XSA9IHBpWzE1XTsKICAgIGZpZ3VyZUNvbG9yc1t2ZXJ0aWNlc1BlclJvdyAqIHNwbGl0WUJ5ICsgc3BsaXRYQnldID0gY2lbM107CiAgICB0aGlzLmZpZ3VyZXNbaW5kZXhdID0gewogICAgICB0eXBlOiAibGF0dGljZSIsCiAgICAgIGNvb3JkczogZmlndXJlQ29vcmRzLAogICAgICBjb2xvcnM6IGZpZ3VyZUNvbG9ycywKICAgICAgdmVydGljZXNQZXJSb3cKICAgIH07CiAgfQogIF91cGRhdGVCb3VuZHMoKSB7CiAgICBsZXQgbWluWCA9IHRoaXMuY29vcmRzWzBdWzBdLAogICAgICBtaW5ZID0gdGhpcy5jb29yZHNbMF1bMV0sCiAgICAgIG1heFggPSBtaW5YLAogICAgICBtYXhZID0gbWluWTsKICAgIGZvciAobGV0IGkgPSAxLCBpaSA9IHRoaXMuY29vcmRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgY29uc3QgeCA9IHRoaXMuY29vcmRzW2ldWzBdLAogICAgICAgIHkgPSB0aGlzLmNvb3Jkc1tpXVsxXTsKICAgICAgbWluWCA9IG1pblggPiB4ID8geCA6IG1pblg7CiAgICAgIG1pblkgPSBtaW5ZID4geSA/IHkgOiBtaW5ZOwogICAgICBtYXhYID0gbWF4WCA8IHggPyB4IDogbWF4WDsKICAgICAgbWF4WSA9IG1heFkgPCB5ID8geSA6IG1heFk7CiAgICB9CiAgICB0aGlzLmJvdW5kcyA9IFttaW5YLCBtaW5ZLCBtYXhYLCBtYXhZXTsKICB9CiAgX3BhY2tEYXRhKCkgewogICAgbGV0IGksIGlpLCBqLCBqajsKICAgIGNvbnN0IGNvb3JkcyA9IHRoaXMuY29vcmRzOwogICAgY29uc3QgY29vcmRzUGFja2VkID0gbmV3IEZsb2F0MzJBcnJheShjb29yZHMubGVuZ3RoICogMik7CiAgICBmb3IgKGkgPSAwLCBqID0gMCwgaWkgPSBjb29yZHMubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICBjb25zdCB4eSA9IGNvb3Jkc1tpXTsKICAgICAgY29vcmRzUGFja2VkW2orK10gPSB4eVswXTsKICAgICAgY29vcmRzUGFja2VkW2orK10gPSB4eVsxXTsKICAgIH0KICAgIHRoaXMuY29vcmRzID0gY29vcmRzUGFja2VkOwogICAgY29uc3QgY29sb3JzID0gdGhpcy5jb2xvcnM7CiAgICBjb25zdCBjb2xvcnNQYWNrZWQgPSBuZXcgVWludDhBcnJheShjb2xvcnMubGVuZ3RoICogMyk7CiAgICBmb3IgKGkgPSAwLCBqID0gMCwgaWkgPSBjb2xvcnMubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICBjb25zdCBjID0gY29sb3JzW2ldOwogICAgICBjb2xvcnNQYWNrZWRbaisrXSA9IGNbMF07CiAgICAgIGNvbG9yc1BhY2tlZFtqKytdID0gY1sxXTsKICAgICAgY29sb3JzUGFja2VkW2orK10gPSBjWzJdOwogICAgfQogICAgdGhpcy5jb2xvcnMgPSBjb2xvcnNQYWNrZWQ7CiAgICBjb25zdCBmaWd1cmVzID0gdGhpcy5maWd1cmVzOwogICAgZm9yIChpID0gMCwgaWkgPSBmaWd1cmVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgY29uc3QgZmlndXJlID0gZmlndXJlc1tpXSwKICAgICAgICBwcyA9IGZpZ3VyZS5jb29yZHMsCiAgICAgICAgY3MgPSBmaWd1cmUuY29sb3JzOwogICAgICBmb3IgKGogPSAwLCBqaiA9IHBzLmxlbmd0aDsgaiA8IGpqOyBqKyspIHsKICAgICAgICBwc1tqXSAqPSAyOwogICAgICAgIGNzW2pdICo9IDM7CiAgICAgIH0KICAgIH0KICB9CiAgZ2V0SVIoKSB7CiAgICBjb25zdCB7CiAgICAgIGJvdW5kcwogICAgfSA9IHRoaXM7CiAgICBpZiAoYm91bmRzWzJdIC0gYm91bmRzWzBdID09PSAwIHx8IGJvdW5kc1szXSAtIGJvdW5kc1sxXSA9PT0gMCkgewogICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEludmFsaWQgTWVzaFNoYWRpbmcgYm91bmRzOiBbJHtib3VuZHN9XS5gKTsKICAgIH0KICAgIHJldHVybiBbIk1lc2giLCB0aGlzLnNoYWRpbmdUeXBlLCB0aGlzLmNvb3JkcywgdGhpcy5jb2xvcnMsIHRoaXMuZmlndXJlcywgYm91bmRzLCB0aGlzLmJib3gsIHRoaXMuYmFja2dyb3VuZF07CiAgfQp9CmNsYXNzIER1bW15U2hhZGluZyBleHRlbmRzIEJhc2VTaGFkaW5nIHsKICBnZXRJUigpIHsKICAgIHJldHVybiBbIkR1bW15Il07CiAgfQp9CmZ1bmN0aW9uIGdldFRpbGluZ1BhdHRlcm5JUihvcGVyYXRvckxpc3QsIGRpY3QsIGNvbG9yKSB7CiAgY29uc3QgbWF0cml4ID0gbG9va3VwTWF0cml4KGRpY3QuZ2V0QXJyYXkoIk1hdHJpeCIpLCBJREVOVElUWV9NQVRSSVgpOwogIGNvbnN0IGJib3ggPSBsb29rdXBOb3JtYWxSZWN0KGRpY3QuZ2V0QXJyYXkoIkJCb3giKSwgbnVsbCk7CiAgaWYgKCFiYm94IHx8IGJib3hbMl0gLSBiYm94WzBdID09PSAwIHx8IGJib3hbM10gLSBiYm94WzFdID09PSAwKSB7CiAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEludmFsaWQgZ2V0VGlsaW5nUGF0dGVybklSIC9CQm94IGFycmF5LmApOwogIH0KICBjb25zdCB4c3RlcCA9IGRpY3QuZ2V0KCJYU3RlcCIpOwogIGlmICh0eXBlb2YgeHN0ZXAgIT09ICJudW1iZXIiKSB7CiAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEludmFsaWQgZ2V0VGlsaW5nUGF0dGVybklSIC9YU3RlcCB2YWx1ZS5gKTsKICB9CiAgY29uc3QgeXN0ZXAgPSBkaWN0LmdldCgiWVN0ZXAiKTsKICBpZiAodHlwZW9mIHlzdGVwICE9PSAibnVtYmVyIikgewogICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBJbnZhbGlkIGdldFRpbGluZ1BhdHRlcm5JUiAvWVN0ZXAgdmFsdWUuYCk7CiAgfQogIGNvbnN0IHBhaW50VHlwZSA9IGRpY3QuZ2V0KCJQYWludFR5cGUiKTsKICBpZiAoIU51bWJlci5pc0ludGVnZXIocGFpbnRUeXBlKSkgewogICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBJbnZhbGlkIGdldFRpbGluZ1BhdHRlcm5JUiAvUGFpbnRUeXBlIHZhbHVlLmApOwogIH0KICBjb25zdCB0aWxpbmdUeXBlID0gZGljdC5nZXQoIlRpbGluZ1R5cGUiKTsKICBpZiAoIU51bWJlci5pc0ludGVnZXIodGlsaW5nVHlwZSkpIHsKICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcihgSW52YWxpZCBnZXRUaWxpbmdQYXR0ZXJuSVIgL1RpbGluZ1R5cGUgdmFsdWUuYCk7CiAgfQogIHJldHVybiBbIlRpbGluZ1BhdHRlcm4iLCBjb2xvciwgb3BlcmF0b3JMaXN0LCBtYXRyaXgsIGJib3gsIHhzdGVwLCB5c3RlcCwgcGFpbnRUeXBlLCB0aWxpbmdUeXBlXTsKfQoKOy8vIC4vc3JjL2NvcmUvY2FsaWJyaV9mYWN0b3JzLmpzCmNvbnN0IENhbGlicmlCb2xkRmFjdG9ycyA9IFsxLjM4NzcsIDEsIDEsIDEsIDAuOTc4MDEsIDAuOTI0ODIsIDAuODk1NTIsIDAuOTExMzMsIDAuODE5ODgsIDAuOTc1NjYsIDAuOTgxNTIsIDAuOTM1NDgsIDAuOTM1NDgsIDEuMjc5OCwgMC44NTI4NCwgMC45Mjc5NCwgMSwgMC45NjEzNCwgMS41NDY1NywgMC45MTEzMywgMC45MTEzMywgMC45MTEzMywgMC45MTEzMywgMC45MTEzMywgMC45MTEzMywgMC45MTEzMywgMC45MTEzMywgMC45MTEzMywgMC45MTEzMywgMC44Mjg0NSwgMC44Mjg0NSwgMC44NTI4NCwgMC44NTI4NCwgMC44NTI4NCwgMC43NTg1OSwgMC45MjEzOCwgMC44MzkwOCwgMC43NzYyLCAwLjczMjkzLCAwLjg3Mjg5LCAwLjczMTMzLCAwLjc1MTQsIDAuODE5MjEsIDAuODczNTYsIDAuOTU5NTgsIDAuNTk1MjYsIDAuNzU3MjcsIDAuNjkyMjUsIDEuMDQ5MjQsIDAuOTEyMSwgMC44Njk0MywgMC43OTc5NSwgMC44ODE5OCwgMC43Nzk1OCwgMC43MDg2NCwgMC44MTA1NSwgMC45MDM5OSwgMC44ODY1MywgMC45NjAxNywgMC44MjU3NywgMC43Nzg5MiwgMC43ODI1NywgMC45NzUwNywgMS41NDY1NywgMC45NzUwNywgMC44NTI4NCwgMC44OTU1MiwgMC45MDE3NiwgMC44ODc2MiwgMC44Nzg1LCAwLjc1MjQxLCAwLjg3ODUsIDAuOTA1MTgsIDAuOTUwMTUsIDAuNzc2MTgsIDAuODc4NSwgMC44ODQwMSwgMC45MTkxNiwgMC44NjMwNCwgMC44ODQwMSwgMC45MTQ4OCwgMC44Nzg1LCAwLjg4MDEsIDAuODc4NSwgMC44Nzg1LCAwLjkxMzQzLCAwLjcxNzMsIDEuMDQxMDYsIDAuODc4NSwgMC44NTA3NSwgMC45NTc5NCwgMC44MjYxNiwgMC44NTE2MiwgMC43OTQ5MiwgMC44ODMzMSwgMS42OTgwOCwgMC44ODMzMSwgMC44NTI4NCwgMC45NzgwMSwgMC44OTU1MiwgMC45MTEzMywgMC44OTU1MiwgMC45MTEzMywgMS43ODAxLCAwLjg5NTUyLCAxLjI0NDg3LCAxLjEzMjU0LCAxLjEyNDAxLCAwLjk2ODM5LCAwLjg1Mjg0LCAwLjY4Nzg3LCAwLjcwNjQ1LCAwLjg1NTkyLCAwLjkwNzQ3LCAxLjAxNDY2LCAxLjAwODgsIDAuOTAzMjMsIDEsIDEuMDc0NjMsIDEsIDAuOTEwNTYsIDAuNzU4MDYsIDEuMTkxMTgsIDAuOTY4MzksIDAuNzg4NjQsIDAuODI4NDUsIDAuODQxMzMsIDAuNzU4NTksIDAuODM5MDgsIDAuODM5MDgsIDAuODM5MDgsIDAuODM5MDgsIDAuODM5MDgsIDAuODM5MDgsIDAuNzc1MzksIDAuNzMyOTMsIDAuNzMxMzMsIDAuNzMxMzMsIDAuNzMxMzMsIDAuNzMxMzMsIDAuOTU5NTgsIDAuOTU5NTgsIDAuOTU5NTgsIDAuOTU5NTgsIDAuODg1MDYsIDAuOTEyMSwgMC44Njk0MywgMC44Njk0MywgMC44Njk0MywgMC44Njk0MywgMC44Njk0MywgMC44NTI4NCwgMC44NzUwOCwgMC45MDM5OSwgMC45MDM5OSwgMC45MDM5OSwgMC45MDM5OSwgMC43Nzg5MiwgMC43OTc5NSwgMC45MDgwNywgMC44ODc2MiwgMC44ODc2MiwgMC44ODc2MiwgMC44ODc2MiwgMC44ODc2MiwgMC44ODc2MiwgMC44NzE1LCAwLjc1MjQxLCAwLjkwNTE4LCAwLjkwNTE4LCAwLjkwNTE4LCAwLjkwNTE4LCAwLjg4NDAxLCAwLjg4NDAxLCAwLjg4NDAxLCAwLjg4NDAxLCAwLjg3ODUsIDAuODc4NSwgMC44ODAxLCAwLjg4MDEsIDAuODgwMSwgMC44ODAxLCAwLjg4MDEsIDAuOTA3NDcsIDAuODkwNDksIDAuODc4NSwgMC44Nzg1LCAwLjg3ODUsIDAuODc4NSwgMC44NTE2MiwgMC44Nzg1LCAwLjg1MTYyLCAwLjgzOTA4LCAwLjg4NzYyLCAwLjgzOTA4LCAwLjg4NzYyLCAwLjgzOTA4LCAwLjg4NzYyLCAwLjczMjkzLCAwLjc1MjQxLCAwLjczMjkzLCAwLjc1MjQxLCAwLjczMjkzLCAwLjc1MjQxLCAwLjczMjkzLCAwLjc1MjQxLCAwLjg3Mjg5LCAwLjgzMDE2LCAwLjg4NTA2LCAwLjkzMTI1LCAwLjczMTMzLCAwLjkwNTE4LCAwLjczMTMzLCAwLjkwNTE4LCAwLjczMTMzLCAwLjkwNTE4LCAwLjczMTMzLCAwLjkwNTE4LCAwLjczMTMzLCAwLjkwNTE4LCAwLjgxOTIxLCAwLjc3NjE4LCAwLjgxOTIxLCAwLjc3NjE4LCAwLjgxOTIxLCAwLjc3NjE4LCAxLCAxLCAwLjg3MzU2LCAwLjg3ODUsIDAuOTEwNzUsIDAuODk2MDgsIDAuOTU5NTgsIDAuODg0MDEsIDAuOTU5NTgsIDAuODg0MDEsIDAuOTU5NTgsIDAuODg0MDEsIDAuOTU5NTgsIDAuODg0MDEsIDAuOTU5NTgsIDAuODg0MDEsIDAuNzYyMjksIDAuOTAxNjcsIDAuNTk1MjYsIDAuOTE5MTYsIDEsIDEsIDAuODYzMDQsIDAuNjkyMjUsIDAuODg0MDEsIDEsIDEsIDAuNzA0MjQsIDAuNzk0NjgsIDAuOTE5MjYsIDAuODgxNzUsIDAuNzA4MjMsIDAuOTQ5MDMsIDAuOTEyMSwgMC44Nzg1LCAxLCAxLCAwLjkxMjEsIDAuODc4NSwgMC44NzgwMiwgMC44ODY1NiwgMC44Nzg1LCAwLjg2OTQzLCAwLjg4MDEsIDAuODY5NDMsIDAuODgwMSwgMC44Njk0MywgMC44ODAxLCAwLjg3NDAyLCAwLjg5MjkxLCAwLjc3OTU4LCAwLjkxMzQzLCAxLCAxLCAwLjc3OTU4LCAwLjkxMzQzLCAwLjcwODY0LCAwLjcxNzMsIDAuNzA4NjQsIDAuNzE3MywgMC43MDg2NCwgMC43MTczLCAwLjcwODY0LCAwLjcxNzMsIDEsIDEsIDAuODEwNTUsIDAuNzU4NDEsIDAuODEwNTUsIDEuMDY0NTIsIDAuOTAzOTksIDAuODc4NSwgMC45MDM5OSwgMC44Nzg1LCAwLjkwMzk5LCAwLjg3ODUsIDAuOTAzOTksIDAuODc4NSwgMC45MDM5OSwgMC44Nzg1LCAwLjkwMzk5LCAwLjg3ODUsIDAuOTYwMTcsIDAuOTU3OTQsIDAuNzc4OTIsIDAuODUxNjIsIDAuNzc4OTIsIDAuNzgyNTcsIDAuNzk0OTIsIDAuNzgyNTcsIDAuNzk0OTIsIDAuNzgyNTcsIDAuNzk0OTIsIDAuOTI5NywgMC41Njg5MiwgMC44MzkwOCwgMC44ODc2MiwgMC43NzUzOSwgMC44NzE1LCAwLjg3NTA4LCAwLjg5MDQ5LCAxLCAxLCAwLjgxMDU1LCAxLjA0MTA2LCAxLjIwNTI4LCAxLjIwNTI4LCAxLCAxLjE1NTQzLCAwLjcwNjc0LCAwLjk4Mzg3LCAwLjk0NzIxLCAxLjMzNDMxLCAxLjQ1ODk0LCAwLjk1MTYxLCAxLjA2MzAzLCAwLjgzOTA4LCAwLjgwMzUyLCAwLjU3MTg0LCAwLjY5NjUsIDAuNTYyODksIDAuODIwMDEsIDAuNTYwMjksIDAuODEyMzUsIDEuMDI5ODgsIDAuODM5MDgsIDAuNzc2MiwgMC42ODE1NiwgMC44MDM2NywgMC43MzEzMywgMC43ODI1NywgMC44NzM1NiwgMC44Njk0MywgMC45NTk1OCwgMC43NTcyNywgMC44OTAxOSwgMS4wNDkyNCwgMC45MTIxLCAwLjc2NDgsIDAuODY5NDMsIDAuODczNTYsIDAuNzk3OTUsIDAuNzgyNzUsIDAuODEwNTUsIDAuNzc4OTIsIDAuOTc2MiwgMC44MjU3NywgMC45OTgxOSwgMC44NDg5NiwgMC45NTk1OCwgMC43Nzg5MiwgMC45NjEwOCwgMS4wMTQwNywgMC44OTA0OSwgMS4wMjk4OCwgMC45NDIxMSwgMC45NjEwOCwgMC44OTM2LCAwLjg0MDIxLCAwLjg3ODQyLCAwLjk2Mzk5LCAwLjc5MTA5LCAwLjg5MDQ5LCAxLjAwODEzLCAxLjAyOTg4LCAwLjg2MDc3LCAwLjg3NDQ1LCAwLjkyMDk5LCAwLjg0NzIzLCAwLjg2NTEzLCAwLjg4MDEsIDAuNzU2MzgsIDAuODU3MTQsIDAuNzgyMTYsIDAuNzk1ODYsIDAuODc5NjUsIDAuOTQyMTEsIDAuOTc3NDcsIDAuNzgyODcsIDAuOTc5MjYsIDAuODQ5NzEsIDEuMDI5ODgsIDAuOTQyMTEsIDAuODgwMSwgMC45NDIxMSwgMC44NDk3MSwgMC43MzEzMywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMC45MDI2NCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMC45MDUxOCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMC45MDU0OCwgMSwgMSwgMSwgMSwgMSwgMSwgMC45NjAxNywgMC45NTc5NCwgMC45NjAxNywgMC45NTc5NCwgMC45NjAxNywgMC45NTc5NCwgMC43Nzg5MiwgMC44NTE2MiwgMSwgMSwgMC44OTU1MiwgMC45MDUyNywgMSwgMC45MDM2MywgMC45Mjc5NCwgMC45Mjc5NCwgMC45Mjc5NCwgMC45Mjc5NCwgMC44NzAxMiwgMC44NzAxMiwgMC44NzAxMiwgMC44OTU1MiwgMC44OTU1MiwgMS40MjI1OSwgMC43MTE0MywgMS4wNjE1MiwgMSwgMSwgMS4wMzM3MiwgMS4wMzM3MiwgMC45NzE3MSwgMS40OTU2LCAyLjI4MDcsIDAuOTM4MzUsIDAuODM0MDYsIDAuOTExMzMsIDAuODQxMDcsIDAuOTExMzMsIDEsIDEsIDEsIDAuNzIwMjEsIDEsIDEuMjMxMDgsIDAuODM0ODksIDAuODg1MjUsIDAuODg1MjUsIDAuODE0OTksIDAuOTA1MjcsIDEuODEwNTUsIDAuOTA1MjcsIDEuODEwNTUsIDEuMzEwMDYsIDEuNTM3MTEsIDAuOTQ0MzQsIDEuMDg2OTYsIDEsIDAuOTUwMTgsIDAuNzcxOTIsIDAuODUyODQsIDAuOTA3NDcsIDEuMTc1MzQsIDAuNjk4MjUsIDAuOTcxNiwgMS4zNzA3NywgMC45MDc0NywgMC45MDc0NywgMC44NTM1NiwgMC45MDc0NywgMC45MDc0NywgMS40NDk0NywgMC44NTI4NCwgMC44OTQxLCAwLjg5NDEsIDAuNzA1NzIsIDAuOCwgMC43MDU3MiwgMC43MDU3MiwgMC43MDU3MiwgMC43MDU3MiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMC45OTg2MiwgMC45OTg2MiwgMSwgMSwgMSwgMSwgMSwgMS4wODAwNCwgMC45MTAyNywgMSwgMSwgMSwgMC45OTg2MiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMC45MDcyNywgMC45MDcyNywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMV07CmNvbnN0IENhbGlicmlCb2xkTWV0cmljcyA9IHsKICBsaW5lSGVpZ2h0OiAxLjIyMDcsCiAgbGluZUdhcDogMC4yMjA3Cn07CmNvbnN0IENhbGlicmlCb2xkSXRhbGljRmFjdG9ycyA9IFsxLjM4NzcsIDEsIDEsIDEsIDAuOTc4MDEsIDAuOTI0ODIsIDAuODk1NTIsIDAuOTExMzMsIDAuODE5ODgsIDAuOTc1NjYsIDAuOTgxNTIsIDAuOTM1NDgsIDAuOTM1NDgsIDEuMjc5OCwgMC44NTI4NCwgMC45Mjc5NCwgMSwgMC45NjEzNCwgMS41NjIzOSwgMC45MTEzMywgMC45MTEzMywgMC45MTEzMywgMC45MTEzMywgMC45MTEzMywgMC45MTEzMywgMC45MTEzMywgMC45MTEzMywgMC45MTEzMywgMC45MTEzMywgMC44Mjg0NSwgMC44Mjg0NSwgMC44NTI4NCwgMC44NTI4NCwgMC44NTI4NCwgMC43NTg1OSwgMC45MjEzOCwgMC44MzkwOCwgMC43NzYyLCAwLjcxODA1LCAwLjg3Mjg5LCAwLjczMTMzLCAwLjc1MTQsIDAuODE5MjEsIDAuODczNTYsIDAuOTU5NTgsIDAuNTk1MjYsIDAuNzU3MjcsIDAuNjkyMjUsIDEuMDQ5MjQsIDAuOTA4NzIsIDAuODU5MzgsIDAuNzk3OTUsIDAuODcwNjgsIDAuNzc5NTgsIDAuNjk3NjYsIDAuODEwNTUsIDAuOTAzOTksIDAuODg2NTMsIDAuOTYwNjgsIDAuODI1NzcsIDAuNzc4OTIsIDAuNzgyNTcsIDAuOTc1MDcsIDEuNTI5LCAwLjk3NTA3LCAwLjg1Mjg0LCAwLjg5NTUyLCAwLjkwMTc2LCAwLjk0OTA4LCAwLjg2NDExLCAwLjc0MDEyLCAwLjg2NDExLCAwLjg4MzIzLCAwLjk1MDE1LCAwLjg2NDExLCAwLjg2MzMxLCAwLjg4NDAxLCAwLjkxOTE2LCAwLjg2MzA0LCAwLjg4NDAxLCAwLjkwMzksIDAuODYzMzEsIDAuODYzMzEsIDAuODY0MTEsIDAuODY0MTEsIDAuOTA0NjQsIDAuNzA4NTIsIDEuMDQxMDYsIDAuODYzMzEsIDAuODQzNzIsIDAuOTU3OTQsIDAuODI2MTYsIDAuODQ1NDgsIDAuNzk0OTIsIDAuODgzMzEsIDEuNjk4MDgsIDAuODgzMzEsIDAuODUyODQsIDAuOTc4MDEsIDAuODk1NTIsIDAuOTExMzMsIDAuODk1NTIsIDAuOTExMzMsIDEuNzgwMSwgMC44OTU1MiwgMS4yNDQ4NywgMS4xMzI1NCwgMS4xOTEyOSwgMC45NjgzOSwgMC44NTI4NCwgMC42ODc4NywgMC43MDY0NSwgMC44NTU5MiwgMC45MDc0NywgMS4wMTQ2NiwgMS4wMDg4LCAwLjkwMzIzLCAxLCAxLjA3NDYzLCAxLCAwLjkxMDU2LCAwLjc1ODA2LCAxLjE5MTE4LCAwLjk2ODM5LCAwLjc4ODY0LCAwLjgyODQ1LCAwLjg0MTMzLCAwLjc1ODU5LCAwLjgzOTA4LCAwLjgzOTA4LCAwLjgzOTA4LCAwLjgzOTA4LCAwLjgzOTA4LCAwLjgzOTA4LCAwLjc3NTM5LCAwLjcxODA1LCAwLjczMTMzLCAwLjczMTMzLCAwLjczMTMzLCAwLjczMTMzLCAwLjk1OTU4LCAwLjk1OTU4LCAwLjk1OTU4LCAwLjk1OTU4LCAwLjg4NTA2LCAwLjkwODcyLCAwLjg1OTM4LCAwLjg1OTM4LCAwLjg1OTM4LCAwLjg1OTM4LCAwLjg1OTM4LCAwLjg1Mjg0LCAwLjg3MDY4LCAwLjkwMzk5LCAwLjkwMzk5LCAwLjkwMzk5LCAwLjkwMzk5LCAwLjc3ODkyLCAwLjc5Nzk1LCAwLjkwODA3LCAwLjk0OTA4LCAwLjk0OTA4LCAwLjk0OTA4LCAwLjk0OTA4LCAwLjk0OTA4LCAwLjk0OTA4LCAwLjg1ODg3LCAwLjc0MDEyLCAwLjg4MzIzLCAwLjg4MzIzLCAwLjg4MzIzLCAwLjg4MzIzLCAwLjg4NDAxLCAwLjg4NDAxLCAwLjg4NDAxLCAwLjg4NDAxLCAwLjg3ODUsIDAuODYzMzEsIDAuODYzMzEsIDAuODYzMzEsIDAuODYzMzEsIDAuODYzMzEsIDAuODYzMzEsIDAuOTA3NDcsIDAuODkwNDksIDAuODYzMzEsIDAuODYzMzEsIDAuODYzMzEsIDAuODYzMzEsIDAuODQ1NDgsIDAuODY0MTEsIDAuODQ1NDgsIDAuODM5MDgsIDAuOTQ5MDgsIDAuODM5MDgsIDAuOTQ5MDgsIDAuODM5MDgsIDAuOTQ5MDgsIDAuNzE4MDUsIDAuNzQwMTIsIDAuNzE4MDUsIDAuNzQwMTIsIDAuNzE4MDUsIDAuNzQwMTIsIDAuNzE4MDUsIDAuNzQwMTIsIDAuODcyODksIDAuNzk1MzgsIDAuODg1MDYsIDAuOTI3MjYsIDAuNzMxMzMsIDAuODgzMjMsIDAuNzMxMzMsIDAuODgzMjMsIDAuNzMxMzMsIDAuODgzMjMsIDAuNzMxMzMsIDAuODgzMjMsIDAuNzMxMzMsIDAuODgzMjMsIDAuODE5MjEsIDAuODY0MTEsIDAuODE5MjEsIDAuODY0MTEsIDAuODE5MjEsIDAuODY0MTEsIDEsIDEsIDAuODczNTYsIDAuODYzMzEsIDAuOTEwNzUsIDAuODc3NywgMC45NTk1OCwgMC44ODQwMSwgMC45NTk1OCwgMC44ODQwMSwgMC45NTk1OCwgMC44ODQwMSwgMC45NTk1OCwgMC44ODQwMSwgMC45NTk1OCwgMC44ODQwMSwgMC43NjQ2NywgMC45MDE2NywgMC41OTUyNiwgMC45MTkxNiwgMSwgMSwgMC44NjMwNCwgMC42OTIyNSwgMC44ODQwMSwgMSwgMSwgMC43MDQyNCwgMC43NzMxMiwgMC45MTkyNiwgMC44ODE3NSwgMC43MDgyMywgMC45NDkwMywgMC45MDg3MiwgMC44NjMzMSwgMSwgMSwgMC45MDg3MiwgMC44NjMzMSwgMC44NjkwNiwgMC44ODExNiwgMC44NjMzMSwgMC44NTkzOCwgMC44NjMzMSwgMC44NTkzOCwgMC44NjMzMSwgMC44NTkzOCwgMC44NjMzMSwgMC44NzQwMiwgMC44NjU0OSwgMC43Nzk1OCwgMC45MDQ2NCwgMSwgMSwgMC43Nzk1OCwgMC45MDQ2NCwgMC42OTc2NiwgMC43MDg1MiwgMC42OTc2NiwgMC43MDg1MiwgMC42OTc2NiwgMC43MDg1MiwgMC42OTc2NiwgMC43MDg1MiwgMSwgMSwgMC44MTA1NSwgMC43NTg0MSwgMC44MTA1NSwgMS4wNjQ1MiwgMC45MDM5OSwgMC44NjMzMSwgMC45MDM5OSwgMC44NjMzMSwgMC45MDM5OSwgMC44NjMzMSwgMC45MDM5OSwgMC44NjMzMSwgMC45MDM5OSwgMC44NjMzMSwgMC45MDM5OSwgMC44NjMzMSwgMC45NjA2OCwgMC45NTc5NCwgMC43Nzg5MiwgMC44NDU0OCwgMC43Nzg5MiwgMC43ODI1NywgMC43OTQ5MiwgMC43ODI1NywgMC43OTQ5MiwgMC43ODI1NywgMC43OTQ5MiwgMC45Mjk3LCAwLjU2ODkyLCAwLjgzOTA4LCAwLjk0OTA4LCAwLjc3NTM5LCAwLjg1ODg3LCAwLjg3MDY4LCAwLjg5MDQ5LCAxLCAxLCAwLjgxMDU1LCAxLjA0MTA2LCAxLjIwNTI4LCAxLjIwNTI4LCAxLCAxLjE1NTQzLCAwLjcwMDg4LCAwLjk4Mzg3LCAwLjk0NzIxLCAxLjMzNDMxLCAxLjQ1ODk0LCAwLjk1MTYxLCAxLjQ4Mzg3LCAwLjgzOTA4LCAwLjgwMzUyLCAwLjU3MTE4LCAwLjY5NjUsIDAuNTYzNDcsIDAuNzkxNzksIDAuNTU4NTMsIDAuODAzNDYsIDEuMDI5ODgsIDAuODM5MDgsIDAuNzc2MiwgMC42NzE3NCwgMC44NjAzNiwgMC43MzEzMywgMC43ODI1NywgMC44NzM1NiwgMC44NjQ0MSwgMC45NTk1OCwgMC43NTcyNywgMC44OTAxOSwgMS4wNDkyNCwgMC45MDg3MiwgMC43NDg4OSwgMC44NTkzOCwgMC44Nzg5MSwgMC43OTc5NSwgMC43OTU3LCAwLjgxMDU1LCAwLjc3ODkyLCAwLjk3NDQ3LCAwLjgyNTc3LCAwLjk3NDY2LCAwLjg3MTc5LCAwLjk1OTU4LCAwLjc3ODkyLCAwLjk0MjUyLCAwLjk1NjEyLCAwLjg3NTMsIDEuMDI5ODgsIDAuOTI3MzMsIDAuOTQyNTIsIDAuODc0MTEsIDAuODQwMjEsIDAuODcyOCwgMC45NTYxMiwgMC43NDA4MSwgMC44NzUzLCAxLjAyMTg5LCAxLjAyOTg4LCAwLjg0ODE0LCAwLjg3NDQ1LCAwLjkxODIyLCAwLjg0NzIzLCAwLjg1NjY4LCAwLjg2MzMxLCAwLjgxMzQ0LCAwLjg3NTgxLCAwLjc2NDIyLCAwLjgyMDQ2LCAwLjk2MDU3LCAwLjkyNzMzLCAwLjk5Mzc1LCAwLjc4MDIyLCAwLjk1NDUyLCAwLjg2MDE1LCAxLjAyOTg4LCAwLjkyNzMzLCAwLjg2MzMxLCAwLjkyNzMzLCAwLjg2MDE1LCAwLjczMTMzLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjkwNjMxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjg4MzIzLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjg1MTc0LCAxLCAxLCAxLCAxLCAxLCAxLCAwLjk2MDY4LCAwLjk1Nzk0LCAwLjk2MDY4LCAwLjk1Nzk0LCAwLjk2MDY4LCAwLjk1Nzk0LCAwLjc3ODkyLCAwLjg0NTQ4LCAxLCAxLCAwLjg5NTUyLCAwLjkwNTI3LCAxLCAwLjkwMzYzLCAwLjkyNzk0LCAwLjkyNzk0LCAwLjkyNzk0LCAwLjg5ODA3LCAwLjg3MDEyLCAwLjg3MDEyLCAwLjg3MDEyLCAwLjg5NTUyLCAwLjg5NTUyLCAxLjQyMjU5LCAwLjcxMDk0LCAxLjA2MTUyLCAxLCAxLCAxLjAzMzcyLCAxLjAzMzcyLCAwLjk3MTcxLCAxLjQ5NTYsIDIuMjgwNywgMC45Mjk3MiwgMC44MzQwNiwgMC45MTEzMywgMC44MzMyNiwgMC45MTEzMywgMSwgMSwgMSwgMC43MjAyMSwgMSwgMS4yMzEwOCwgMC44MzQ4OSwgMC44ODUyNSwgMC44ODUyNSwgMC44MTQ5OSwgMC45MDYxNiwgMS44MTA1NSwgMC45MDUyNywgMS44MTA1NSwgMS4zMTA3LCAxLjUzNzExLCAwLjk0NDM0LCAxLjA4Njk2LCAxLCAwLjk1MDE4LCAwLjc3MTkyLCAwLjg1Mjg0LCAwLjkwNzQ3LCAxLjE3NTM0LCAwLjY5ODI1LCAwLjk3MTYsIDEuMzcwNzcsIDAuOTA3NDcsIDAuOTA3NDcsIDAuODUzNTYsIDAuOTA3NDcsIDAuOTA3NDcsIDEuNDQ5NDcsIDAuODUyODQsIDAuODk0MSwgMC44OTQxLCAwLjcwNTcyLCAwLjgsIDAuNzA1NzIsIDAuNzA1NzIsIDAuNzA1NzIsIDAuNzA1NzIsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAuOTk4NjIsIDAuOTk4NjIsIDEsIDEsIDEsIDEsIDEsIDEuMDgwMDQsIDAuOTEwMjcsIDEsIDEsIDEsIDAuOTk4NjIsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAuOTA3MjcsIDAuOTA3MjcsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDFdOwpjb25zdCBDYWxpYnJpQm9sZEl0YWxpY01ldHJpY3MgPSB7CiAgbGluZUhlaWdodDogMS4yMjA3LAogIGxpbmVHYXA6IDAuMjIwNwp9Owpjb25zdCBDYWxpYnJpSXRhbGljRmFjdG9ycyA9IFsxLjM4NzcsIDEsIDEsIDEsIDEuMTcyMjMsIDEuMTI5MywgMC44OTU1MiwgMC45MTEzMywgMC44MDM5NSwgMS4wMjI2OSwgMS4xNTYwMSwgMC45MTA1NiwgMC45MTA1NiwgMS4yNzk4LCAwLjg1Mjg0LCAwLjg5ODA3LCAxLCAwLjkwODYxLCAxLjM5NTQzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjk2MzA5LCAwLjk2MzA5LCAwLjg1Mjg0LCAwLjg1Mjg0LCAwLjg1Mjg0LCAwLjgzMzE5LCAwLjg4MDcxLCAwLjg2NzUsIDAuODE1NTIsIDAuNzIzNDYsIDAuODUxOTMsIDAuNzMyMDYsIDAuNzUyMiwgMC44MTEwNSwgMC44NjI3NSwgMC45MDY4NSwgMC42Mzc3LCAwLjc3ODkyLCAwLjc1NTkzLCAxLjAyNjM4LCAwLjg5MjQ5LCAwLjg0MTE4LCAwLjc3NDUyLCAwLjg1Mzc0LCAwLjc1MTg2LCAwLjY3Nzg5LCAwLjc5Nzc2LCAwLjg4ODQ0LCAwLjg1MDY2LCAwLjk0MzA5LCAwLjc3ODE4LCAwLjczMDYsIDAuNzY2NTksIDEuMTAzNjksIDEuMzgzMTMsIDEuMTAzNjksIDEuMDYxMzksIDAuODk1NTIsIDAuODczOSwgMC45MjQ1LCAwLjkyNDUsIDAuODMyMDMsIDAuOTI0NSwgMC44NTg2NSwgMS4wOTg0MiwgMC45MjQ1LCAwLjkyNDUsIDEuMDMyOTcsIDEuMDc2OTIsIDAuOTA5MTgsIDEuMDMyOTcsIDAuOTQ5NTksIDAuOTI0NSwgMC45MjI3NCwgMC45MjQ1LCAwLjkyNDUsIDEuMDI5MzMsIDAuNzc4MzIsIDEuMjA1NjIsIDAuOTI0NSwgMC44OTE2LCAwLjk4OTg2LCAwLjg2NjIxLCAwLjg5NDUzLCAwLjc5MDA0LCAwLjk0MTUyLCAxLjc3MjU2LCAwLjk0MTUyLCAwLjg1Mjg0LCAwLjk3ODAxLCAwLjg5NTUyLCAwLjkxMTMzLCAwLjg5NTUyLCAwLjkxMTMzLCAxLjkxNzI5LCAwLjg5NTUyLCAxLjE3ODg5LCAxLjEzMjU0LCAxLjE2MzU5LCAwLjkyMDk4LCAwLjg1Mjg0LCAwLjY4Nzg3LCAwLjcxMzUzLCAwLjg0NzM3LCAwLjkwNzQ3LCAxLjAwODgsIDEuMDA0NCwgMC44NzY4MywgMSwgMS4wOTA5MSwgMSwgMC45MjIyOSwgMC43MzksIDEuMTU2NDIsIDAuOTIwOTgsIDAuNzYyODgsIDAuODA1MDQsIDAuODA5NzIsIDAuNzU4NTksIDAuODY3NSwgMC44Njc1LCAwLjg2NzUsIDAuODY3NSwgMC44Njc1LCAwLjg2NzUsIDAuNzYzMTgsIDAuNzIzNDYsIDAuNzMyMDYsIDAuNzMyMDYsIDAuNzMyMDYsIDAuNzMyMDYsIDAuOTA2ODUsIDAuOTA2ODUsIDAuOTA2ODUsIDAuOTA2ODUsIDAuODY0NzcsIDAuODkyNDksIDAuODQxMTgsIDAuODQxMTgsIDAuODQxMTgsIDAuODQxMTgsIDAuODQxMTgsIDAuODUyODQsIDAuODQ1NTcsIDAuODg4NDQsIDAuODg4NDQsIDAuODg4NDQsIDAuODg4NDQsIDAuNzMwNiwgMC43NzQ1MiwgMC44NjMzMSwgMC45MjQ1LCAwLjkyNDUsIDAuOTI0NSwgMC45MjQ1LCAwLjkyNDUsIDAuOTI0NSwgMC44NDg0MywgMC44MzIwMywgMC44NTg2NSwgMC44NTg2NSwgMC44NTg2NSwgMC44NTg2NSwgMC44MjYwMSwgMC44MjYwMSwgMC44MjYwMSwgMC44MjYwMSwgMC45NDQ2OSwgMC45MjQ1LCAwLjkyMjc0LCAwLjkyMjc0LCAwLjkyMjc0LCAwLjkyMjc0LCAwLjkyMjc0LCAwLjkwNzQ3LCAwLjg2NjUxLCAwLjkyNDUsIDAuOTI0NSwgMC45MjQ1LCAwLjkyNDUsIDAuODk0NTMsIDAuOTI0NSwgMC44OTQ1MywgMC44Njc1LCAwLjkyNDUsIDAuODY3NSwgMC45MjQ1LCAwLjg2NzUsIDAuOTI0NSwgMC43MjM0NiwgMC44MzIwMywgMC43MjM0NiwgMC44MzIwMywgMC43MjM0NiwgMC44MzIwMywgMC43MjM0NiwgMC44MzIwMywgMC44NTE5MywgMC44ODc1LCAwLjg2NDc3LCAwLjk5MDM0LCAwLjczMjA2LCAwLjg1ODY1LCAwLjczMjA2LCAwLjg1ODY1LCAwLjczMjA2LCAwLjg1ODY1LCAwLjczMjA2LCAwLjg1ODY1LCAwLjczMjA2LCAwLjg1ODY1LCAwLjgxMTA1LCAwLjkyNDUsIDAuODExMDUsIDAuOTI0NSwgMC44MTEwNSwgMC45MjQ1LCAxLCAxLCAwLjg2Mjc1LCAwLjkyNDUsIDAuOTA4NzIsIDAuOTM1OTEsIDAuOTA2ODUsIDAuODI2MDEsIDAuOTA2ODUsIDAuODI2MDEsIDAuOTA2ODUsIDAuODI2MDEsIDAuOTA2ODUsIDEuMDMyOTcsIDAuOTA2ODUsIDAuODI2MDEsIDAuNzc4OTYsIDEuMDU2MTEsIDAuNjM3NywgMS4wNzY5MiwgMSwgMSwgMC45MDkxOCwgMC43NTU5MywgMS4wMzI5NywgMSwgMSwgMC43NjAzMiwgMC45Mzc1LCAwLjk4MTU2LCAwLjkzNDA3LCAwLjc3MjYxLCAxLjExNDI5LCAwLjg5MjQ5LCAwLjkyNDUsIDEsIDEsIDAuODkyNDksIDAuOTI0NSwgMC45MjUzNCwgMC44NjY5OCwgMC45MjQ1LCAwLjg0MTE4LCAwLjkyMjc0LCAwLjg0MTE4LCAwLjkyMjc0LCAwLjg0MTE4LCAwLjkyMjc0LCAwLjg2NjcsIDAuODYyOTEsIDAuNzUxODYsIDEuMDI5MzMsIDEsIDEsIDAuNzUxODYsIDEuMDI5MzMsIDAuNjc3ODksIDAuNzc4MzIsIDAuNjc3ODksIDAuNzc4MzIsIDAuNjc3ODksIDAuNzc4MzIsIDAuNjc3ODksIDAuNzc4MzIsIDEsIDEsIDAuNzk3NzYsIDAuOTc2NTUsIDAuNzk3NzYsIDEuMjMwMjMsIDAuODg4NDQsIDAuOTI0NSwgMC44ODg0NCwgMC45MjQ1LCAwLjg4ODQ0LCAwLjkyNDUsIDAuODg4NDQsIDAuOTI0NSwgMC44ODg0NCwgMC45MjQ1LCAwLjg4ODQ0LCAwLjkyNDUsIDAuOTQzMDksIDAuOTg5ODYsIDAuNzMwNiwgMC44OTQ1MywgMC43MzA2LCAwLjc2NjU5LCAwLjc5MDA0LCAwLjc2NjU5LCAwLjc5MDA0LCAwLjc2NjU5LCAwLjc5MDA0LCAxLjA5MjMxLCAwLjU0ODczLCAwLjg2NzUsIDAuOTI0NSwgMC43NjMxOCwgMC44NDg0MywgMC44NDU1NywgMC44NjY1MSwgMSwgMSwgMC43OTc3NiwgMS4yMDU2MiwgMS4xODYyMiwgMS4xODYyMiwgMSwgMS4xNDM3LCAwLjY3MDA5LCAwLjk2MzM0LCAwLjkzNjk1LCAxLjM1MTkxLCAxLjQwOTA5LCAwLjk1MTYxLCAxLjQ4Mzg3LCAwLjg2NzUsIDAuOTA4NjEsIDAuNjE5MiwgMC43MzYzLCAwLjY0ODI0LCAwLjgyNDExLCAwLjU2MzIxLCAwLjg1Njk2LCAxLjIzNTE2LCAwLjg2NzUsIDAuODE1NTIsIDAuNzI4NiwgMC44NDEzNCwgMC43MzIwNiwgMC43NjY1OSwgMC44NjI3NSwgMC44NDM2OSwgMC45MDY4NSwgMC43Nzg5MiwgMC44NTg3MSwgMS4wMjYzOCwgMC44OTI0OSwgMC43NTgyOCwgMC44NDExOCwgMC44NTk4NCwgMC43NzQ1MiwgMC43NjQ2NiwgMC43OTc3NiwgMC43MzA2LCAwLjkwNzgyLCAwLjc3ODE4LCAwLjkwMywgMC44NzI5MSwgMC45MDY4NSwgMC43MzA2LCAwLjk5MDU4LCAxLjAzNjY3LCAwLjk0NjM1LCAxLjIzNTE2LCAwLjk4NDksIDAuOTkwNTgsIDAuOTIzOTMsIDAuODkxNiwgMC45NDIsIDEuMDM2NjcsIDAuNzUwMjYsIDAuOTQ2MzUsIDEuMDI5NywgMS4yMzUxNiwgMC45MDkxOCwgMC45NDA0OCwgMC45ODIxNywgMC44OTc0NiwgMC44NDE1MywgMC45MjI3NCwgMC44MjUwNywgMC44ODgzMiwgMC44NDQzOCwgMC44ODE3OCwgMS4wMzUyNSwgMC45ODQ5LCAxLjAwMjI1LCAwLjc4MDg2LCAwLjk3MjQ4LCAwLjg5NDA0LCAxLjIzNTE2LCAwLjk4NDksIDAuOTIyNzQsIDAuOTg0OSwgMC44OTQwNCwgMC43MzIwNiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMC44OTY5MywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMC44NTg2NSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMC45MDkzMywgMSwgMSwgMSwgMSwgMSwgMSwgMC45NDMwOSwgMC45ODk4NiwgMC45NDMwOSwgMC45ODk4NiwgMC45NDMwOSwgMC45ODk4NiwgMC43MzA2LCAwLjg5NDUzLCAxLCAxLCAwLjg5NTUyLCAwLjkwNTI3LCAxLCAwLjkwMTg2LCAxLjEyMzA4LCAxLjEyMzA4LCAxLjEyMzA4LCAxLjEyMzA4LCAxLjI1NjYsIDEuMjU2NiwgMS4yNTY2LCAwLjg5NTUyLCAwLjg5NTUyLCAxLjQyMjU5LCAwLjY4OTk0LCAxLjAzODA5LCAxLCAxLCAxLjAxNzYsIDEuMDE3NiwgMS4xMTUyMywgMS40OTU2LCAyLjAxNDYyLCAwLjk3ODU4LCAwLjgyNjE2LCAwLjkxMTMzLCAwLjgzNDM3LCAwLjkxMTMzLCAxLCAxLCAxLCAwLjcwNTA4LCAxLCAxLjIzMTA4LCAwLjc5ODAxLCAwLjg0NDI2LCAwLjg0NDI2LCAwLjc3NCwgMC45MDU3MiwgMS44MTA1NSwgMC45MDc0OSwgMS44MTA1NSwgMS4yODgwOSwgMS41NTQ2OSwgMC45NDQzNCwgMS4wNzgwNiwgMSwgMC45NzA5NCwgMC43NTg5LCAwLjg1Mjg0LCAwLjkwNzQ3LCAxLjE5NjU4LCAwLjY5ODI1LCAwLjk3NjIyLCAxLjMzNTEyLCAwLjkwNzQ3LCAwLjkwNzQ3LCAwLjg1Mjg0LCAwLjkwNzQ3LCAwLjkwNzQ3LCAxLjQ0OTQ3LCAwLjg1Mjg0LCAwLjg5NDEsIDAuODk0MSwgMC43MDU3MiwgMC44LCAwLjcwNTcyLCAwLjcwNTcyLCAwLjcwNTcyLCAwLjcwNTcyLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjk5ODYyLCAwLjk5ODYyLCAxLCAxLCAxLCAxLCAxLCAxLjAzMzYsIDAuOTEwMjcsIDEsIDEsIDEsIDAuOTk4NjIsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEuMDU4NTksIDEuMDU4NTksIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDFdOwpjb25zdCBDYWxpYnJpSXRhbGljTWV0cmljcyA9IHsKICBsaW5lSGVpZ2h0OiAxLjIyMDcsCiAgbGluZUdhcDogMC4yMjA3Cn07CmNvbnN0IENhbGlicmlSZWd1bGFyRmFjdG9ycyA9IFsxLjM4NzcsIDEsIDEsIDEsIDEuMTcyMjMsIDEuMTI5MywgMC44OTU1MiwgMC45MTEzMywgMC44MDM5NSwgMS4wMjI2OSwgMS4xNTYwMSwgMC45MTA1NiwgMC45MTA1NiwgMS4yNzk4LCAwLjg1Mjg0LCAwLjg5ODA3LCAxLCAwLjkwODYxLCAxLjM5MDE2LCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjk2MzA5LCAwLjk2MzA5LCAwLjg1Mjg0LCAwLjg1Mjg0LCAwLjg1Mjg0LCAwLjgzMzE5LCAwLjg4MDcxLCAwLjg2NzUsIDAuODE1NTIsIDAuNzM4MzQsIDAuODUxOTMsIDAuNzMyMDYsIDAuNzUyMiwgMC44MTEwNSwgMC44NjI3NSwgMC45MDY4NSwgMC42Mzc3LCAwLjc3ODkyLCAwLjc1NTkzLCAxLjAyNjM4LCAwLjg5Mzg1LCAwLjg1MTIyLCAwLjc3NDUyLCAwLjg2NTAzLCAwLjc1MTg2LCAwLjY4ODg3LCAwLjc5Nzc2LCAwLjg4ODQ0LCAwLjg1MDY2LCAwLjk0MjU4LCAwLjc3ODE4LCAwLjczMDYsIDAuNzY2NTksIDEuMTAzNjksIDEuMzkwMTYsIDEuMTAzNjksIDEuMDYxMzksIDAuODk1NTIsIDAuODczOSwgMC44NjEyOCwgMC45NDQ2OSwgMC44NDU3LCAwLjk0NDY5LCAwLjg5NDY0LCAxLjA5ODQyLCAwLjg0NjM2LCAwLjk0NDY5LCAxLjAzMjk3LCAxLjA3NjkyLCAwLjkwOTE4LCAxLjAzMjk3LCAwLjk1ODk3LCAwLjk0NDY5LCAwLjk0ODIsIDAuOTQ0NjksIDAuOTQ0NjksIDEuMDQ2OTIsIDAuNzgyMjMsIDEuMjA1NjIsIDAuOTQ0NjksIDAuOTAzMzIsIDAuOTg5ODYsIDAuODY2MjEsIDAuOTA1MjcsIDAuNzkwMDQsIDAuOTQxNTIsIDEuNzcyNTYsIDAuOTQxNTIsIDAuODUyODQsIDAuOTc4MDEsIDAuODk1NTIsIDAuOTExMzMsIDAuODk1NTIsIDAuOTExMzMsIDEuOTE3MjksIDAuODk1NTIsIDEuMTc4ODksIDEuMTMyNTQsIDEuMDg3MDcsIDAuOTIwOTgsIDAuODUyODQsIDAuNjg3ODcsIDAuNzEzNTMsIDAuODQ3MzcsIDAuOTA3NDcsIDEuMDA4OCwgMS4wMDQ0LCAwLjg3NjgzLCAxLCAxLjA5MDkxLCAxLCAwLjkyMjI5LCAwLjczOSwgMS4xNTY0MiwgMC45MjA5OCwgMC43NjI4OCwgMC44MDUwNCwgMC44MDk3MiwgMC43NTg1OSwgMC44Njc1LCAwLjg2NzUsIDAuODY3NSwgMC44Njc1LCAwLjg2NzUsIDAuODY3NSwgMC43NjMxOCwgMC43MzgzNCwgMC43MzIwNiwgMC43MzIwNiwgMC43MzIwNiwgMC43MzIwNiwgMC45MDY4NSwgMC45MDY4NSwgMC45MDY4NSwgMC45MDY4NSwgMC44NjQ3NywgMC44OTM4NSwgMC44NTEyMiwgMC44NTEyMiwgMC44NTEyMiwgMC44NTEyMiwgMC44NTEyMiwgMC44NTI4NCwgMC44NTMxMSwgMC44ODg0NCwgMC44ODg0NCwgMC44ODg0NCwgMC44ODg0NCwgMC43MzA2LCAwLjc3NDUyLCAwLjg2MzMxLCAwLjg2MTI4LCAwLjg2MTI4LCAwLjg2MTI4LCAwLjg2MTI4LCAwLjg2MTI4LCAwLjg2MTI4LCAwLjg2OTMsIDAuODQ1NywgMC44OTQ2NCwgMC44OTQ2NCwgMC44OTQ2NCwgMC44OTQ2NCwgMC44MjYwMSwgMC44MjYwMSwgMC44MjYwMSwgMC44MjYwMSwgMC45NDQ2OSwgMC45NDQ2OSwgMC45NDgyLCAwLjk0ODIsIDAuOTQ4MiwgMC45NDgyLCAwLjk0ODIsIDAuOTA3NDcsIDAuODY2NTEsIDAuOTQ0NjksIDAuOTQ0NjksIDAuOTQ0NjksIDAuOTQ0NjksIDAuOTA1MjcsIDAuOTQ0NjksIDAuOTA1MjcsIDAuODY3NSwgMC44NjEyOCwgMC44Njc1LCAwLjg2MTI4LCAwLjg2NzUsIDAuODYxMjgsIDAuNzM4MzQsIDAuODQ1NywgMC43MzgzNCwgMC44NDU3LCAwLjczODM0LCAwLjg0NTcsIDAuNzM4MzQsIDAuODQ1NywgMC44NTE5MywgMC45MjQ1NCwgMC44NjQ3NywgMC45OTIxLCAwLjczMjA2LCAwLjg5NDY0LCAwLjczMjA2LCAwLjg5NDY0LCAwLjczMjA2LCAwLjg5NDY0LCAwLjczMjA2LCAwLjg5NDY0LCAwLjczMjA2LCAwLjg5NDY0LCAwLjgxMTA1LCAwLjg0NjM2LCAwLjgxMTA1LCAwLjg0NjM2LCAwLjgxMTA1LCAwLjg0NjM2LCAxLCAxLCAwLjg2Mjc1LCAwLjk0NDY5LCAwLjkwODcyLCAwLjk1Nzg2LCAwLjkwNjg1LCAwLjgyNjAxLCAwLjkwNjg1LCAwLjgyNjAxLCAwLjkwNjg1LCAwLjgyNjAxLCAwLjkwNjg1LCAxLjAzMjk3LCAwLjkwNjg1LCAwLjgyNjAxLCAwLjc3NzQxLCAxLjA1NjExLCAwLjYzNzcsIDEuMDc2OTIsIDEsIDEsIDAuOTA5MTgsIDAuNzU1OTMsIDEuMDMyOTcsIDEsIDEsIDAuNzYwMzIsIDAuOTA0NTIsIDAuOTgxNTYsIDEuMTE4NDIsIDAuNzcyNjEsIDEuMTE0MjksIDAuODkzODUsIDAuOTQ0NjksIDEsIDEsIDAuODkzODUsIDAuOTQ0NjksIDAuOTU4NzcsIDAuODY5MDEsIDAuOTQ0NjksIDAuODUxMjIsIDAuOTQ4MiwgMC44NTEyMiwgMC45NDgyLCAwLjg1MTIyLCAwLjk0ODIsIDAuODY2NywgMC45MDAxNiwgMC43NTE4NiwgMS4wNDY5MiwgMSwgMSwgMC43NTE4NiwgMS4wNDY5MiwgMC42ODg4NywgMC43ODIyMywgMC42ODg4NywgMC43ODIyMywgMC42ODg4NywgMC43ODIyMywgMC42ODg4NywgMC43ODIyMywgMSwgMSwgMC43OTc3NiwgMC45MjE4OCwgMC43OTc3NiwgMS4yMzAyMywgMC44ODg0NCwgMC45NDQ2OSwgMC44ODg0NCwgMC45NDQ2OSwgMC44ODg0NCwgMC45NDQ2OSwgMC44ODg0NCwgMC45NDQ2OSwgMC44ODg0NCwgMC45NDQ2OSwgMC44ODg0NCwgMC45NDQ2OSwgMC45NDI1OCwgMC45ODk4NiwgMC43MzA2LCAwLjkwNTI3LCAwLjczMDYsIDAuNzY2NTksIDAuNzkwMDQsIDAuNzY2NTksIDAuNzkwMDQsIDAuNzY2NTksIDAuNzkwMDQsIDEuMDkyMzEsIDAuNTQ4NzMsIDAuODY3NSwgMC44NjEyOCwgMC43NjMxOCwgMC44NjkzLCAwLjg1MzExLCAwLjg2NjUxLCAxLCAxLCAwLjc5Nzc2LCAxLjIwNTYyLCAxLjE4NjIyLCAxLjE4NjIyLCAxLCAxLjE0MzcsIDAuNjc3NDIsIDAuOTYzMzQsIDAuOTM2OTUsIDEuMzUxOTEsIDEuNDA5MDksIDAuOTUxNjEsIDEuNDgzODcsIDAuODY2ODYsIDAuOTA4NjEsIDAuNjIyNjcsIDAuNzQzNTksIDAuNjU2NDksIDAuODU0OTgsIDAuNTY5NjMsIDAuODgyNTQsIDEuMjM1MTYsIDAuODY3NSwgMC44MTU1MiwgMC43NTQ0MywgMC44NDUwMywgMC43MzIwNiwgMC43NjY1OSwgMC44NjI3NSwgMC44NTEyMiwgMC45MDY4NSwgMC43Nzg5MiwgMC44NTc0NiwgMS4wMjYzOCwgMC44OTM4NSwgMC43NTY1NywgMC44NTEyMiwgMC44NjI3NSwgMC43NzQ1MiwgMC43NDE3MSwgMC43OTc3NiwgMC43MzA2LCAwLjk1MTY1LCAwLjc3ODE4LCAwLjg5NzcyLCAwLjg4ODMxLCAwLjkwNjg1LCAwLjczMDYsIDAuOTgxNDIsIDEuMDIxOTEsIDAuOTY1NzYsIDEuMjM1MTYsIDAuOTkwMTgsIDAuOTgxNDIsIDAuOTIzNiwgMC44OTI1OCwgMC45NDAzNSwgMS4wMjE5MSwgMC43ODg0OCwgMC45NjU3NiwgMC45NTYxLCAxLjIzNTE2LCAwLjkwOTE4LCAwLjkyNTc4LCAwLjk1NDI0LCAwLjg5NzQ2LCAwLjgzOTY5LCAwLjk0ODIsIDAuODAxMTMsIDAuODk0NDIsIDAuODUyMDgsIDAuODYxNTUsIDAuOTgwMjIsIDAuOTkwMTgsIDEuMDA0NTIsIDAuODEyMDksIDAuOTkyNDcsIDAuODkxODEsIDEuMjM1MTYsIDAuOTkwMTgsIDAuOTQ4MiwgMC45OTAxOCwgMC44OTE4MSwgMC43MzIwNiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMC44ODg0NCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMC44OTQ2NCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMC45Njc2NiwgMSwgMSwgMSwgMSwgMSwgMSwgMC45NDI1OCwgMC45ODk4NiwgMC45NDI1OCwgMC45ODk4NiwgMC45NDI1OCwgMC45ODk4NiwgMC43MzA2LCAwLjkwNTI3LCAxLCAxLCAwLjg5NTUyLCAwLjkwNTI3LCAxLCAwLjkwMTg2LCAxLjEyMzA4LCAxLjEyMzA4LCAxLjEyMzA4LCAxLjEyMzA4LCAxLjI1NjYsIDEuMjU2NiwgMS4yNTY2LCAwLjg5NTUyLCAwLjg5NTUyLCAxLjQyMjU5LCAwLjY5MDQzLCAxLjAzODA5LCAxLCAxLCAxLjAxNzYsIDEuMDE3NiwgMS4xMTUyMywgMS40OTU2LCAyLjAxNDYyLCAwLjk5MzMxLCAwLjgyNjE2LCAwLjkxMTMzLCAwLjg0Mjg2LCAwLjkxMTMzLCAxLCAxLCAxLCAwLjcwNTA4LCAxLCAxLjIzMTA4LCAwLjc5ODAxLCAwLjg0NDI2LCAwLjg0NDI2LCAwLjc3NCwgMC45MDUyNywgMS44MTA1NSwgMC45MDUyNywgMS44MTA1NSwgMS4yODgwOSwgMS41NTQ2OSwgMC45NDQzNCwgMS4wNzgwNiwgMSwgMC45NzA5NCwgMC43NTg5LCAwLjg1Mjg0LCAwLjkwNzQ3LCAxLjE5NjU4LCAwLjY5ODI1LCAwLjk3NjIyLCAxLjMzNTEyLCAwLjkwNzQ3LCAwLjkwNzQ3LCAwLjg1MzU2LCAwLjkwNzQ3LCAwLjkwNzQ3LCAxLjQ0OTQ3LCAwLjg1Mjg0LCAwLjg5NDEsIDAuODk0MSwgMC43MDU3MiwgMC44LCAwLjcwNTcyLCAwLjcwNTcyLCAwLjcwNTcyLCAwLjcwNTcyLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjk5ODYyLCAwLjk5ODYyLCAxLCAxLCAxLCAxLCAxLCAxLjAzMzYsIDAuOTEwMjcsIDEsIDEsIDEsIDAuOTk4NjIsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEuMDU4NTksIDEuMDU4NTksIDEsIDEsIDEsIDEuMDcxODUsIDAuOTk0MTMsIDAuOTYzMzQsIDEuMDgwNjUsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDFdOwpjb25zdCBDYWxpYnJpUmVndWxhck1ldHJpY3MgPSB7CiAgbGluZUhlaWdodDogMS4yMjA3LAogIGxpbmVHYXA6IDAuMjIwNwp9OwoKOy8vIC4vc3JjL2NvcmUvaGVsdmV0aWNhX2ZhY3RvcnMuanMKY29uc3QgSGVsdmV0aWNhQm9sZEZhY3RvcnMgPSBbMC43NjExNiwgMSwgMSwgMS4wMDA2LCAwLjk5OTk4LCAwLjk5OTc0LCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTgyLCAwLjk5OTc3LCAxLjAwMDg3LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTU5LCAxLjAwMDAzLCAxLjAwMDYsIDAuOTk5OTgsIDEuMDAwNiwgMS4wMDA2LCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTk4LCAxLCAxLjAwMDAzLCAxLjAwMDAzLCAxLjAwMDAzLCAxLjAwMDI2LCAwLjk5OTksIDAuOTk5NzcsIDAuOTk5NzcsIDAuOTk5NzcsIDAuOTk5NzcsIDEuMDAwMDEsIDEuMDAwMjYsIDEuMDAwMjIsIDAuOTk5NzcsIDEuMDAwNiwgMC45OTk3MywgMC45OTk3NywgMS4wMDAyNiwgMC45OTk5OSwgMC45OTk3NywgMS4wMDAyMiwgMS4wMDAwMSwgMS4wMDAyMiwgMC45OTk3NywgMS4wMDAwMSwgMS4wMDAyNiwgMC45OTk3NywgMS4wMDAwMSwgMS4wMDAxNiwgMS4wMDAwMSwgMS4wMDAwMSwgMS4wMDAyNiwgMC45OTk5OCwgMS4wMDA2LCAwLjk5OTk4LCAxLjAwMDAzLCAwLjk5OTczLCAwLjk5OTk4LCAwLjk5OTczLCAxLjAwMDI2LCAwLjk5OTczLCAxLjAwMDI2LCAwLjk5OTczLCAwLjk5OTk4LCAxLjAwMDI2LCAxLjAwMDI2LCAxLjAwMDYsIDEuMDAwNiwgMC45OTk3MywgMS4wMDA2LCAwLjk5OTgyLCAxLjAwMDI2LCAxLjAwMDI2LCAxLjAwMDI2LCAxLjAwMDI2LCAwLjk5OTU5LCAwLjk5OTczLCAwLjk5OTk4LCAxLjAwMDI2LCAwLjk5OTczLCAxLjAwMDIyLCAwLjk5OTczLCAwLjk5OTczLCAxLCAwLjk5OTU5LCAxLjAwMDc3LCAwLjk5OTU5LCAxLjAwMDAzLCAwLjk5OTk4LCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAxLjAwMDc3LCAwLjk5OTczLCAwLjk5OTk4LCAxLjAwMDI1LCAwLjk5OTY4LCAwLjk5OTczLCAxLjAwMDAzLCAxLjAwMDI1LCAwLjYwMjk5LCAxLjAwMDI0LCAxLjA2NDA5LCAxLCAxLCAwLjk5OTk4LCAxLCAwLjk5OTczLCAxLjAwMDYsIDAuOTk5OTgsIDEsIDAuOTk5MzYsIDAuOTk5NzMsIDEuMDAwMDIsIDEuMDAwMDIsIDEuMDAwMDIsIDEuMDAwMjYsIDAuOTk5NzcsIDAuOTk5NzcsIDAuOTk5NzcsIDAuOTk5NzcsIDAuOTk5NzcsIDAuOTk5NzcsIDEsIDAuOTk5NzcsIDEuMDAwMDEsIDEuMDAwMDEsIDEuMDAwMDEsIDEuMDAwMDEsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMC45OTk3NywgMC45OTk3NywgMS4wMDAyMiwgMS4wMDAyMiwgMS4wMDAyMiwgMS4wMDAyMiwgMS4wMDAyMiwgMS4wMDAwMywgMS4wMDAyMiwgMC45OTk3NywgMC45OTk3NywgMC45OTk3NywgMC45OTk3NywgMS4wMDAwMSwgMS4wMDAwMSwgMS4wMDAyNiwgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk4MiwgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDI2LCAxLjAwMDI2LCAxLjAwMDI2LCAxLjAwMDI2LCAxLjAwMDI2LCAxLjAwMDI2LCAxLjAwMDI2LCAxLjA2NDA5LCAxLjAwMDI2LCAxLjAwMDI2LCAxLjAwMDI2LCAxLjAwMDI2LCAxLjAwMDI2LCAwLjk5OTczLCAxLjAwMDI2LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAxLjAzMzc0LCAwLjk5OTc3LCAxLjAwMDI2LCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDIyLCAxLjAwMDI2LCAxLjAwMDIyLCAxLjAwMDI2LCAxLjAwMDIyLCAxLjAwMDI2LCAxLjAwMDIyLCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDI2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNDIsIDAuOTk5NzMsIDAuOTk5NzMsIDEuMDAwNiwgMC45OTk3NywgMC45OTk3MywgMC45OTk3MywgMS4wMDAyNiwgMS4wMDA2LCAxLjAwMDI2LCAxLjAwMDYsIDEuMDAwMjYsIDEuMDM4MjgsIDEuMDAwMjYsIDAuOTk5OTksIDEuMDAwMjYsIDEuMDAwNiwgMC45OTk3NywgMS4wMDAyNiwgMC45OTk3NywgMS4wMDAyNiwgMC45OTk3NywgMS4wMDAyNiwgMC45OTkzLCAwLjk5OTgsIDEuMDAwMjYsIDEuMDAwMjIsIDEuMDAwMjYsIDEuMDAwMjIsIDEuMDAwMjYsIDEuMDAwMjIsIDEuMDAwMjYsIDEsIDEuMDAwMTYsIDAuOTk5NzcsIDAuOTk5NTksIDAuOTk5NzcsIDAuOTk5NTksIDAuOTk5NzcsIDAuOTk5NTksIDEuMDAwMDEsIDAuOTk5NzMsIDEuMDAwMDEsIDAuOTk5NzMsIDEuMDAwMDEsIDAuOTk5NzMsIDEuMDAwMDEsIDAuOTk5NzMsIDEuMDAwMjYsIDAuOTk5OTgsIDEuMDAwMjYsIDAuODEyMSwgMS4wMDAyNiwgMC45OTk5OCwgMC45OTk3NywgMS4wMDAyNiwgMC45OTk3NywgMS4wMDAyNiwgMC45OTk3NywgMS4wMDAyNiwgMC45OTk3NywgMS4wMDAyNiwgMC45OTk3NywgMS4wMDAyNiwgMC45OTk3NywgMS4wMDAyNiwgMS4wMDAxNiwgMS4wMDAyMiwgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAwMSwgMS4wMDAyNiwgMSwgMS4wMDAyNiwgMSwgMS4wMDAyNiwgMSwgMS4wMDA2LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAxLCAwLjk5OTgyLCAxLjAwMDIyLCAxLjAwMDI2LCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDI2LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAxLjAwMDM0LCAwLjk5OTc3LCAxLCAwLjk5OTk3LCAxLjAwMDI2LCAxLjAwMDc4LCAxLjAwMDM2LCAwLjk5OTczLCAxLjAwMDEzLCAxLjAwMDYsIDAuOTk5NzcsIDAuOTk5NzcsIDAuOTk5ODgsIDAuODUxNDgsIDEuMDAwMDEsIDEuMDAwMjYsIDAuOTk5NzcsIDEuMDAwMjIsIDEuMDAwNiwgMC45OTk3NywgMS4wMDAwMSwgMC45OTk5OSwgMC45OTk3NywgMS4wMDA2OSwgMS4wMDAyMiwgMC45OTk3NywgMS4wMDAwMSwgMC45OTk4NCwgMS4wMDAyNiwgMS4wMDAwMSwgMS4wMDAyNCwgMS4wMDAwMSwgMC45OTk5LCAxLCAxLjAwMDYsIDEuMDAwMDEsIDEuMDAwNDEsIDAuOTk5NjIsIDEuMDAwMjYsIDEuMDAwNiwgMC45OTk5NSwgMS4wMDA0MSwgMC45OTk0MiwgMC45OTk3MywgMC45OTkyNywgMS4wMDA4MiwgMC45OTkwMiwgMS4wMDAyNiwgMS4wMDA4NywgMS4wMDA2LCAxLjAwMDY5LCAwLjk5OTczLCAwLjk5ODY3LCAwLjk5OTczLCAwLjk5OTMsIDEuMDAwMjYsIDEuMDAwNDksIDEuMDAwNTYsIDEsIDAuOTk5ODgsIDAuOTk5MzUsIDAuOTk5OTUsIDAuOTk5NTQsIDEuMDAwNTUsIDAuOTk5NDUsIDEuMDAwMzIsIDEuMDAwNiwgMC45OTk5NSwgMS4wMDAyNiwgMC45OTk5NSwgMS4wMDAzMiwgMS4wMDAwMSwgMS4wMDAwOCwgMC45OTk3MSwgMS4wMDAxOSwgMC45OTk0LCAxLjAwMDAxLCAxLjAwMDYsIDEuMDAwNDQsIDAuOTk5NzMsIDEuMDAwMjMsIDEuMDAwNDcsIDEsIDAuOTk5NDIsIDAuOTk1NjEsIDAuOTk5ODksIDEuMDAwMzUsIDAuOTk5NzcsIDEuMDAwMzUsIDAuOTk5NzcsIDEuMDAwMTksIDAuOTk5NDQsIDEuMDAwMDEsIDEuMDAwMjEsIDAuOTk5MjYsIDEuMDAwMzUsIDEuMDAwMzUsIDAuOTk5NDIsIDEuMDAwNDgsIDAuOTk5OTksIDAuOTk5NzcsIDEuMDAwMjIsIDEuMDAwMzUsIDEuMDAwMDEsIDAuOTk5NzcsIDEuMDAwMjYsIDAuOTk5ODksIDEuMDAwNTcsIDEuMDAwMDEsIDAuOTk5MzYsIDEuMDAwNTIsIDEuMDAwMTIsIDAuOTk5OTYsIDEuMDAwNDMsIDEsIDEuMDAwMzUsIDAuOTk5NCwgMC45OTk3NiwgMS4wMDAzNSwgMC45OTk3MywgMS4wMDA1MiwgMS4wMDA0MSwgMS4wMDExOSwgMS4wMDAzNywgMC45OTk3MywgMS4wMDAwMiwgMC45OTk4NiwgMS4wMDA0MSwgMS4wMDA0MSwgMC45OTkwMiwgMC45OTk2LCAxLjAwMDM0LCAwLjk5OTk5LCAxLjAwMDI2LCAwLjk5OTk5LCAxLjAwMDI2LCAwLjk5OTczLCAxLjAwMDUyLCAwLjk5OTczLCAxLCAwLjk5OTczLCAxLjAwMDQxLCAxLjAwMDc1LCAwLjk5OTQsIDEuMDAwMywgMC45OTk5OSwgMSwgMS4wMDA0MSwgMC45OTk1NSwgMSwgMC45OTkxNSwgMC45OTk3MywgMC45OTk3MywgMS4wMDAyNiwgMS4wMDExOSwgMC45OTk1NSwgMC45OTk3MywgMS4wMDA2LCAwLjk5OTExLCAxLjAwMDYsIDEuMDAwMjYsIDAuOTk5NzIsIDEuMDAwMjYsIDAuOTk5MDIsIDEuMDAwNDEsIDAuOTk5NzMsIDAuOTk5OTksIDEsIDEsIDEuMDAwMzgsIDEuMDAwNSwgMS4wMDAxNiwgMS4wMDAyMiwgMS4wMDAxNiwgMS4wMDAyMiwgMS4wMDAxNiwgMS4wMDAyMiwgMS4wMDAwMSwgMC45OTk3MywgMSwgMSwgMC45OTk3MywgMSwgMSwgMC45OTk1NSwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLCAxLCAxLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTcyLCAxLCAxLCAxLjAwMTA2LCAwLjk5OTk5LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk5LCAwLjk5OTk4LCAxLjY2NDc1LCAxLCAwLjk5OTczLCAwLjk5OTczLCAxLjAwMDIzLCAwLjk5OTczLCAwLjk5OTcxLCAxLjAwMDQ3LCAxLjAwMDIzLCAxLCAwLjk5OTkxLCAwLjk5OTg0LCAxLjAwMDAyLCAxLjAwMDAyLCAxLjAwMDAyLCAxLjAwMDAyLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjk5OTcyLCAxLCAxLjIwOTg1LCAxLjM5NzEzLCAxLjAwMDAzLCAxLjAwMDMxLCAxLjAwMDE1LCAxLCAwLjk5NTYxLCAxLjAwMDI3LCAxLjAwMDMxLCAxLjAwMDMxLCAwLjk5OTE1LCAxLjAwMDMxLCAxLjAwMDMxLCAwLjk5OTk5LCAxLjAwMDAzLCAwLjk5OTk5LCAwLjk5OTk5LCAxLjQxMTQ0LCAxLjYsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDA1NzksIDEuNDA1NzksIDEuMzY2MjUsIDAuOTk5OTksIDEsIDAuOTk4NjEsIDAuOTk4NjEsIDEsIDEuMDAwMjYsIDEuMDAwMjYsIDEuMDAwMjYsIDEuMDAwMjYsIDAuOTk5NzIsIDAuOTk5OTksIDAuOTk5OTksIDAuOTk5OTksIDAuOTk5OTksIDEuNDA0ODMsIDEsIDAuOTk5NzcsIDEuMDAwNTQsIDEsIDEsIDAuOTk5NTMsIDAuOTk5NjIsIDEuMDAwNDIsIDAuOTk5NSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMC45OTk5OCwgMC45OTk5OCwgMC45OTk5OCwgMC45OTk5OCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMV07CmNvbnN0IEhlbHZldGljYUJvbGRNZXRyaWNzID0gewogIGxpbmVIZWlnaHQ6IDEuMiwKICBsaW5lR2FwOiAwLjIKfTsKY29uc3QgSGVsdmV0aWNhQm9sZEl0YWxpY0ZhY3RvcnMgPSBbMC43NjExNiwgMSwgMSwgMS4wMDA2LCAwLjk5OTk4LCAwLjk5OTc0LCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTgyLCAwLjk5OTc3LCAxLjAwMDg3LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTU5LCAxLjAwMDAzLCAxLjAwMDYsIDAuOTk5OTgsIDEuMDAwNiwgMS4wMDA2LCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTk4LCAxLCAxLjAwMDAzLCAxLjAwMDAzLCAxLjAwMDAzLCAxLjAwMDI2LCAwLjk5OTksIDAuOTk5NzcsIDAuOTk5NzcsIDAuOTk5NzcsIDAuOTk5NzcsIDEuMDAwMDEsIDEuMDAwMjYsIDEuMDAwMjIsIDAuOTk5NzcsIDEuMDAwNiwgMC45OTk3MywgMC45OTk3NywgMS4wMDAyNiwgMC45OTk5OSwgMC45OTk3NywgMS4wMDAyMiwgMS4wMDAwMSwgMS4wMDAyMiwgMC45OTk3NywgMS4wMDAwMSwgMS4wMDAyNiwgMC45OTk3NywgMS4wMDAwMSwgMS4wMDAxNiwgMS4wMDAwMSwgMS4wMDAwMSwgMS4wMDAyNiwgMC45OTk5OCwgMS4wMDA2LCAwLjk5OTk4LCAxLjAwMDAzLCAwLjk5OTczLCAwLjk5OTk4LCAwLjk5OTczLCAxLjAwMDI2LCAwLjk5OTczLCAxLjAwMDI2LCAwLjk5OTczLCAwLjk5OTk4LCAxLjAwMDI2LCAxLjAwMDI2LCAxLjAwMDYsIDEuMDAwNiwgMC45OTk3MywgMS4wMDA2LCAwLjk5OTgyLCAxLjAwMDI2LCAxLjAwMDI2LCAxLjAwMDI2LCAxLjAwMDI2LCAwLjk5OTU5LCAwLjk5OTczLCAwLjk5OTk4LCAxLjAwMDI2LCAwLjk5OTczLCAxLjAwMDIyLCAwLjk5OTczLCAwLjk5OTczLCAxLCAwLjk5OTU5LCAxLjAwMDc3LCAwLjk5OTU5LCAxLjAwMDAzLCAwLjk5OTk4LCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAxLjAwMDc3LCAwLjk5OTczLCAwLjk5OTk4LCAxLjAwMDI1LCAwLjk5OTY4LCAwLjk5OTczLCAxLjAwMDAzLCAxLjAwMDI1LCAwLjYwMjk5LCAxLjAwMDI0LCAxLjA2NDA5LCAxLCAxLCAwLjk5OTk4LCAxLCAwLjk5OTczLCAxLjAwMDYsIDAuOTk5OTgsIDEsIDAuOTk5MzYsIDAuOTk5NzMsIDEuMDAwMDIsIDEuMDAwMDIsIDEuMDAwMDIsIDEuMDAwMjYsIDAuOTk5NzcsIDAuOTk5NzcsIDAuOTk5NzcsIDAuOTk5NzcsIDAuOTk5NzcsIDAuOTk5NzcsIDEsIDAuOTk5NzcsIDEuMDAwMDEsIDEuMDAwMDEsIDEuMDAwMDEsIDEuMDAwMDEsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMC45OTk3NywgMC45OTk3NywgMS4wMDAyMiwgMS4wMDAyMiwgMS4wMDAyMiwgMS4wMDAyMiwgMS4wMDAyMiwgMS4wMDAwMywgMS4wMDAyMiwgMC45OTk3NywgMC45OTk3NywgMC45OTk3NywgMC45OTk3NywgMS4wMDAwMSwgMS4wMDAwMSwgMS4wMDAyNiwgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk4MiwgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDI2LCAxLjAwMDI2LCAxLjAwMDI2LCAxLjAwMDI2LCAxLjAwMDI2LCAxLjAwMDI2LCAxLjAwMDI2LCAxLjA2NDA5LCAxLjAwMDI2LCAxLjAwMDI2LCAxLjAwMDI2LCAxLjAwMDI2LCAxLjAwMDI2LCAwLjk5OTczLCAxLjAwMDI2LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAxLjAwNDQsIDAuOTk5NzcsIDEuMDAwMjYsIDEuMDAwMDEsIDAuOTk5NzMsIDEuMDAwMDEsIDAuOTk5NzMsIDEuMDAwMDEsIDAuOTk5NzMsIDEuMDAwMDEsIDAuOTk5NzMsIDEuMDAwMDEsIDAuOTk5NzMsIDEuMDAwMjIsIDEuMDAwMjYsIDEuMDAwMjIsIDEuMDAwMjYsIDEuMDAwMjIsIDEuMDAwMjYsIDEuMDAwMjIsIDEuMDAwMjYsIDAuOTk5NzcsIDEuMDAwMjYsIDAuOTk5NzcsIDEuMDAwMjYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMC45OTk3MSwgMC45OTk3MywgMC45OTk3MywgMS4wMDA2LCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTczLCAxLjAwMDI2LCAxLjAwMDYsIDEuMDAwMjYsIDEuMDAwNiwgMS4wMDAyNiwgMS4wMTAxMSwgMS4wMDAyNiwgMC45OTk5OSwgMS4wMDAyNiwgMS4wMDA2LCAwLjk5OTc3LCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDI2LCAwLjk5OTMsIDAuOTk5OCwgMS4wMDAyNiwgMS4wMDAyMiwgMS4wMDAyNiwgMS4wMDAyMiwgMS4wMDAyNiwgMS4wMDAyMiwgMS4wMDAyNiwgMSwgMS4wMDAxNiwgMC45OTk3NywgMC45OTk1OSwgMC45OTk3NywgMC45OTk1OSwgMC45OTk3NywgMC45OTk1OSwgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAyNiwgMC45OTk5OCwgMS4wMDAyNiwgMC44MTIxLCAxLjAwMDI2LCAwLjk5OTk4LCAwLjk5OTc3LCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDI2LCAxLjAwMDE2LCAxLjAwMDIyLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDAxLCAxLjAwMDI2LCAxLCAxLjAwMDI2LCAxLCAxLjAwMDI2LCAxLCAxLjAwMDYsIDAuOTk5NzMsIDAuOTk5NzcsIDAuOTk5NzMsIDEsIDAuOTk5ODIsIDEuMDAwMjIsIDEuMDAwMjYsIDEuMDAwMDEsIDAuOTk5NzMsIDEuMDAwMjYsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5NzcsIDEsIDEsIDEuMDAwMjYsIDAuOTk5NjksIDAuOTk5NzIsIDAuOTk5ODEsIDAuOTk5OCwgMS4wMDA2LCAwLjk5OTc3LCAwLjk5OTc3LCAxLjAwMDIyLCAwLjkxMTU1LCAxLjAwMDAxLCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDIyLCAxLjAwMDYsIDAuOTk5NzcsIDEuMDAwMDEsIDAuOTk5OTksIDAuOTk5NzcsIDAuOTk5NjYsIDEuMDAwMjIsIDEuMDAwMzIsIDEuMDAwMDEsIDAuOTk5NDQsIDEuMDAwMjYsIDEuMDAwMDEsIDAuOTk5NjgsIDEuMDAwMDEsIDEuMDAwNDcsIDEsIDEuMDAwNiwgMS4wMDAwMSwgMC45OTk4MSwgMS4wMDEwMSwgMS4wMDAyNiwgMS4wMDA2LCAwLjk5OTQ4LCAwLjk5OTgxLCAxLjAwMDY0LCAwLjk5OTczLCAwLjk5OTQyLCAxLjAwMTAxLCAxLjAwMDYxLCAxLjAwMDI2LCAxLjAwMDY5LCAxLjAwMDYsIDEuMDAwMTQsIDAuOTk5NzMsIDEuMDEzMjIsIDAuOTk5NzMsIDEuMDAwNjUsIDEuMDAwMjYsIDEuMDAwMTIsIDAuOTk5MjMsIDEsIDEuMDAwNjQsIDEuMDAwNzYsIDAuOTk5NDgsIDEuMDAwNTUsIDEuMDAwNjMsIDEuMDAwMDcsIDAuOTk5NDMsIDEuMDAwNiwgMC45OTk0OCwgMS4wMDAyNiwgMC45OTk0OCwgMC45OTk0MywgMS4wMDAwMSwgMS4wMDAwMSwgMS4wMDAyOSwgMS4wMDAzOCwgMS4wMDAzNSwgMS4wMDAwMSwgMS4wMDA2LCAxLjAwMDYsIDAuOTk5NzMsIDAuOTk5NzgsIDEuMDAwMDEsIDEuMDAwNTcsIDAuOTk5ODksIDAuOTk5NjcsIDAuOTk5NjQsIDAuOTk5NjcsIDAuOTk5NzcsIDAuOTk5OTksIDAuOTk5NzcsIDEuMDAwMzgsIDAuOTk5NzcsIDEuMDAwMDEsIDAuOTk5NzMsIDEuMDAwNjYsIDAuOTk5NjcsIDAuOTk5NjcsIDEuMDAwNDEsIDAuOTk5OTgsIDAuOTk5OTksIDAuOTk5NzcsIDEuMDAwMjIsIDAuOTk5NjcsIDEuMDAwMDEsIDAuOTk5NzcsIDEuMDAwMjYsIDAuOTk5NjQsIDEuMDAwMzEsIDEuMDAwMDEsIDAuOTk5OTksIDAuOTk5OTksIDEsIDEuMDAwMjMsIDEsIDEsIDAuOTk5OTksIDEuMDAwMzUsIDEuMDAwMDEsIDAuOTk5OTksIDAuOTk5NzMsIDAuOTk5NzcsIDAuOTk5OTksIDEuMDAwNTgsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NTUsIDAuOTk5NSwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAzMiwgMC45OTk4OSwgMS4wMDAzNCwgMC45OTk5OSwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMC45OTk3MywgMC40NTk5OCwgMC45OTk3MywgMS4wMDAyNiwgMC45OTk3MywgMS4wMDAwMSwgMC45OTk5OSwgMC45OTk4MiwgMC45OTk5NCwgMC45OTk5NiwgMSwgMS4wMDA0MiwgMS4wMDA0NCwgMS4wMDAyOSwgMS4wMDAyMywgMC45OTk3MywgMC45OTk3MywgMS4wMDAyNiwgMC45OTk0OSwgMS4wMDAwMiwgMC45OTk3MywgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMC45OTk3NSwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAzMiwgMC45ODY4NSwgMC45OTk3MywgMS4wMDAyNiwgMSwgMSwgMC45OTk2NiwgMS4wMDA0NCwgMS4wMDAxNiwgMS4wMDAyMiwgMS4wMDAxNiwgMS4wMDAyMiwgMS4wMDAxNiwgMS4wMDAyMiwgMS4wMDAwMSwgMC45OTk3MywgMSwgMSwgMC45OTk3MywgMSwgMSwgMC45OTk1NSwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLCAxLCAxLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTcyLCAxLCAxLCAxLjAwMTA2LCAwLjk5OTk5LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk5LCAwLjk5OTk4LCAxLjY2NDc1LCAxLCAwLjk5OTczLCAwLjk5OTczLCAxLCAwLjk5OTczLCAwLjk5OTcxLCAwLjk5OTc4LCAxLCAxLCAwLjk5OTkxLCAwLjk5OTg0LCAxLjAwMDAyLCAxLjAwMDAyLCAxLjAwMDAyLCAxLjAwMDAyLCAxLjAwMDk4LCAxLCAxLCAxLCAxLjAwMDQ5LCAxLCAxLCAwLjk5OTcyLCAxLCAxLjIwOTg1LCAxLjM5NzEzLCAxLjAwMDAzLCAxLjAwMDMxLCAxLjAwMDE1LCAxLCAwLjk5NTYxLCAxLjAwMDI3LCAxLjAwMDMxLCAxLjAwMDMxLCAwLjk5OTE1LCAxLjAwMDMxLCAxLjAwMDMxLCAwLjk5OTk5LCAxLjAwMDAzLCAwLjk5OTk5LCAwLjk5OTk5LCAxLjQxMTQ0LCAxLjYsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDExNDQsIDEuNDA1NzksIDEuNDA1NzksIDEuMzY2MjUsIDAuOTk5OTksIDEsIDAuOTk4NjEsIDAuOTk4NjEsIDEsIDEuMDAwMjYsIDEuMDAwMjYsIDEuMDAwMjYsIDEuMDAwMjYsIDAuOTk5NzIsIDAuOTk5OTksIDAuOTk5OTksIDAuOTk5OTksIDAuOTk5OTksIDEuNDA0ODMsIDEsIDAuOTk5NzcsIDEuMDAwNTQsIDEsIDEsIDAuOTk5NTMsIDAuOTk5NjIsIDEuMDAwNDIsIDAuOTk5NSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMC45OTk5OCwgMC45OTk5OCwgMC45OTk5OCwgMC45OTk5OCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMV07CmNvbnN0IEhlbHZldGljYUJvbGRJdGFsaWNNZXRyaWNzID0gewogIGxpbmVIZWlnaHQ6IDEuMzUsCiAgbGluZUdhcDogMC4yCn07CmNvbnN0IEhlbHZldGljYUl0YWxpY0ZhY3RvcnMgPSBbMC43NjExNiwgMSwgMSwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwMDYsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5ODIsIDEuMDAwMDEsIDEuMDAwNDMsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5NTksIDEuMDAwMDMsIDEuMDAwNiwgMC45OTk5OCwgMS4wMDA2LCAxLjAwMDYsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDEuMDAwNiwgMSwgMS4wMDAwMywgMS4wMDAwMywgMS4wMDAwMywgMC45OTk3MywgMC45OTk4NywgMS4wMDAwMSwgMS4wMDAwMSwgMC45OTk3NywgMC45OTk3NywgMS4wMDAwMSwgMS4wMDAyNiwgMS4wMDAyMiwgMC45OTk3NywgMS4wMDA2LCAxLCAxLjAwMDAxLCAwLjk5OTczLCAwLjk5OTk5LCAwLjk5OTc3LCAxLjAwMDIyLCAxLjAwMDAxLCAxLjAwMDIyLCAwLjk5OTc3LCAxLjAwMDAxLCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDAxLCAxLjAwMDE2LCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDI2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAwLjk5OTQ5LCAwLjk5OTczLCAwLjk5OTk4LCAwLjk5OTczLCAwLjk5OTczLCAxLCAwLjk5OTczLCAwLjk5OTczLCAxLjAwMDYsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5MjQsIDAuOTk5MjQsIDEsIDAuOTk5MjQsIDAuOTk5OTksIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5OTgsIDEsIDEuMDAwNiwgMC45OTk3MywgMSwgMC45OTk3NywgMSwgMSwgMSwgMS4wMDAwNSwgMS4wMDA5LCAxLjAwMDA1LCAxLjAwMDAzLCAwLjk5OTk4LCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAxLjAwMDksIDAuOTk5NzMsIDAuOTk5OTgsIDEuMDAwMjUsIDAuOTk5NjgsIDAuOTk5NzMsIDEuMDAwMDMsIDEuMDAwMjUsIDAuNjAyOTksIDEuMDAwMjQsIDEuMDY0MDksIDEsIDEsIDAuOTk5OTgsIDEsIDAuOTk5OCwgMS4wMDA2LCAwLjk5OTk4LCAxLCAwLjk5OTM2LCAwLjk5OTczLCAxLjAwMDAyLCAxLjAwMDAyLCAxLjAwMDAyLCAxLjAwMDI2LCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDAxLCAxLCAwLjk5OTc3LCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDAuOTk5NzcsIDAuOTk5NzcsIDEuMDAwMjIsIDEuMDAwMjIsIDEuMDAwMjIsIDEuMDAwMjIsIDEuMDAwMjIsIDEuMDAwMDMsIDEuMDAwMjIsIDAuOTk5NzcsIDAuOTk5NzcsIDAuOTk5NzcsIDAuOTk5NzcsIDEuMDAwMDEsIDEuMDAwMDEsIDEuMDAwMjYsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5ODIsIDEsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMS4wNjQwOSwgMS4wMDAyNiwgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMSwgMC45OTk3MywgMSwgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAwMSwgMC45OTk3MywgMC45OTk3NywgMSwgMC45OTk3NywgMSwgMC45OTk3NywgMSwgMC45OTk3NywgMSwgMC45OTk3NywgMS4wMjg4LCAwLjk5OTc3LCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDIyLCAwLjk5OTczLCAxLjAwMDIyLCAwLjk5OTczLCAxLjAwMDIyLCAwLjk5OTczLCAxLjAwMDIyLCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDAuOTk5MjQsIDEuMDAwNiwgMS4wMDA2LCAwLjk5OTQ2LCAxLjAwMDM0LCAxLCAwLjk5OTI0LCAxLjAwMDAxLCAxLCAxLCAwLjk5OTczLCAwLjk5OTI0LCAwLjk5OTczLCAwLjk5OTI0LCAwLjk5OTczLCAxLjA2MzExLCAwLjk5OTczLCAxLjAwMDI0LCAwLjk5OTczLCAwLjk5OTI0LCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAxLjAwMDQxLCAwLjk5OTgsIDAuOTk5NzMsIDEuMDAwMjIsIDAuOTk5NzMsIDEuMDAwMjIsIDAuOTk5NzMsIDEuMDAwMjIsIDAuOTk5NzMsIDEsIDEuMDAwMTYsIDAuOTk5NzcsIDAuOTk5OTgsIDAuOTk5NzcsIDAuOTk5OTgsIDAuOTk5NzcsIDAuOTk5OTgsIDEuMDAwMDEsIDEsIDEuMDAwMDEsIDEsIDEuMDAwMDEsIDEsIDEuMDAwMDEsIDEsIDEuMDAwMjYsIDEuMDAwNiwgMS4wMDAyNiwgMC44OTU0NywgMS4wMDAyNiwgMS4wMDA2LCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAxLjAwMDE2LCAwLjk5OTc3LCAxLjAwMDAxLCAxLCAxLjAwMDAxLCAxLjAwMDI2LCAxLCAxLjAwMDI2LCAxLCAxLjAwMDI2LCAxLCAwLjk5OTI0LCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLCAwLjk5OTgyLCAxLjAwMDIyLCAxLjAwMDI2LCAxLjAwMDAxLCAxLCAxLjAwMDI2LCAxLjAwMDYsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDEuMDAwMDEsIDEsIDEuMDAwNTQsIDAuOTk5NzcsIDEuMDAwODQsIDEuMDAwMDcsIDAuOTk5NzMsIDEuMDAwMTMsIDAuOTk5MjQsIDEuMDAwMDEsIDEuMDAwMDEsIDAuOTk5NDUsIDAuOTEyMjEsIDEuMDAwMDEsIDEuMDAwMjYsIDAuOTk5NzcsIDEuMDAwMjIsIDEuMDAwNiwgMS4wMDAwMSwgMS4wMDAwMSwgMC45OTk5OSwgMC45OTk3NywgMC45OTkzMywgMS4wMDAyMiwgMS4wMDA1NCwgMS4wMDAwMSwgMS4wMDA2NSwgMS4wMDAyNiwgMS4wMDAwMSwgMS4wMDAxLCAxLjAwMDAxLCAxLjAwMDUyLCAxLCAxLjAwMDYsIDEuMDAwMDEsIDAuOTk5NDUsIDAuOTk4OTcsIDAuOTk5NjgsIDAuOTk5MjQsIDEuMDAwMzYsIDAuOTk5NDUsIDAuOTk5NDksIDEsIDEuMDAwNiwgMC45OTg5NywgMC45OTkxOCwgMC45OTk2OCwgMC45OTkxMSwgMC45OTkyNCwgMSwgMC45OTk2MiwgMS4wMTQ4NywgMSwgMS4wMDA1LCAwLjk5OTczLCAxLjAwMDEyLCAxLjAwMDQzLCAxLCAwLjk5OTk1LCAwLjk5OTk0LCAxLjAwMDM2LCAwLjk5OTQ3LCAxLjAwMDE5LCAxLjAwMDYzLCAxLjAwMDI1LCAwLjk5OTI0LCAxLjAwMDM2LCAwLjk5OTczLCAxLjAwMDM2LCAxLjAwMDI1LCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDI3LCAxLjAwMDEsIDEuMDAwNjgsIDEuMDAwMDEsIDEuMDAwNiwgMS4wMDA2LCAxLCAxLjAwMDA4LCAwLjk5OTU3LCAwLjk5OTcyLCAwLjk5OTQsIDAuOTk5NTQsIDAuOTk5NzUsIDEuMDAwNTEsIDEuMDAwMDEsIDEuMDAwMTksIDEuMDAwMDEsIDEuMDAwMSwgMC45OTk4NiwgMS4wMDAwMSwgMS4wMDAwMSwgMS4wMDAzOCwgMC45OTk1NCwgMC45OTk1NCwgMC45OTk0LCAxLjAwMDY2LCAwLjk5OTk5LCAwLjk5OTc3LCAxLjAwMDIyLCAxLjAwMDU0LCAxLjAwMDAxLCAwLjk5OTc3LCAxLjAwMDI2LCAwLjk5OTc1LCAxLjAwMDEsIDEuMDAwMDEsIDAuOTk5OTMsIDAuOTk5NSwgMC45OTk1NSwgMS4wMDAxNiwgMC45OTk3OCwgMC45OTk3NCwgMS4wMDAxOSwgMS4wMDAyMiwgMC45OTk1NSwgMS4wMDA1MywgMC45OTk3MywgMS4wMDA4OSwgMS4wMDAwNSwgMC45OTk2NywgMS4wMDA0OCwgMC45OTk3MywgMS4wMDAwMiwgMS4wMDAzNCwgMC45OTk3MywgMC45OTk3MywgMC45OTk2NCwgMS4wMDAwNiwgMS4wMDA2NiwgMC45OTk0NywgMC45OTk3MywgMC45ODg5NCwgMC45OTk3MywgMSwgMC40NDg5OCwgMSwgMC45OTk0NiwgMSwgMS4wMDAzOSwgMS4wMDA4MiwgMC45OTk5MSwgMC45OTk5MSwgMC45OTk4NSwgMS4wMDAyMiwgMS4wMDAyMywgMS4wMDA2MSwgMS4wMDAwNiwgMC45OTk2NiwgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMS4wMDAxOSwgMS4wMDA4LCAxLCAwLjk5OTI0LCAwLjk5OTI0LCAwLjk5OTI0LCAwLjk5OTgzLCAxLjAwMDQ0LCAwLjk5OTczLCAwLjk5OTY0LCAwLjk4MzMyLCAxLCAwLjk5OTczLCAxLCAxLCAwLjk5OTYyLCAwLjk5ODk1LCAxLjAwMDE2LCAwLjk5OTc3LCAxLjAwMDE2LCAwLjk5OTc3LCAxLjAwMDE2LCAwLjk5OTc3LCAxLjAwMDAxLCAxLCAxLCAxLCAwLjk5OTczLCAxLCAxLCAwLjk5OTU1LCAwLjk5OTI0LCAwLjk5OTI0LCAwLjk5OTI0LCAwLjk5OTI0LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTcyLCAxLCAxLCAxLjAwMjY3LCAwLjk5OTk5LCAwLjk5OTk4LCAwLjk5OTk4LCAxLCAwLjk5OTk4LCAxLjY2NDc1LCAxLCAwLjk5OTczLCAwLjk5OTczLCAxLjAwMDIzLCAwLjk5OTczLCAxLjAwNDIzLCAwLjk5OTI1LCAwLjk5OTk5LCAxLCAwLjk5OTkxLCAwLjk5OTg0LCAxLjAwMDAyLCAxLjAwMDAyLCAxLjAwMDAyLCAxLjAwMDAyLCAxLjAwMDQ5LCAxLCAxLjAwMjQ1LCAxLCAxLCAxLCAxLCAwLjk2MzI5LCAxLCAxLjIwOTg1LCAxLjM5NzEzLCAxLjAwMDAzLCAwLjgyNTQsIDEuMDAwMTUsIDEsIDEuMDAwMzUsIDEuMDAwMjcsIDEuMDAwMzEsIDEuMDAwMzEsIDEuMDAwMDMsIDEuMDAwMzEsIDEuMDAwMzEsIDAuOTk5OTksIDEuMDAwMDMsIDAuOTk5OTksIDAuOTk5OTksIDEuNDExNDQsIDEuNiwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MDU3OSwgMS40MDU3OSwgMS4zNjYyNSwgMC45OTk5OSwgMSwgMC45OTg2MSwgMC45OTg2MSwgMSwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMC45NTMxNywgMC45OTk5OSwgMC45OTk5OSwgMC45OTk5OSwgMC45OTk5OSwgMS40MDQ4MywgMSwgMC45OTk3NywgMS4wMDA1NCwgMSwgMSwgMC45OTk1MywgMC45OTk2MiwgMS4wMDA0MiwgMC45OTk1LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxXTsKY29uc3QgSGVsdmV0aWNhSXRhbGljTWV0cmljcyA9IHsKICBsaW5lSGVpZ2h0OiAxLjM1LAogIGxpbmVHYXA6IDAuMgp9Owpjb25zdCBIZWx2ZXRpY2FSZWd1bGFyRmFjdG9ycyA9IFswLjc2MTE2LCAxLCAxLCAxLjAwMDYsIDEuMDAwNiwgMS4wMDAwNiwgMC45OTk3MywgMC45OTk3MywgMC45OTk4MiwgMS4wMDAwMSwgMS4wMDA0MywgMC45OTk5OCwgMC45OTk5OCwgMC45OTk1OSwgMS4wMDAwMywgMS4wMDA2LCAwLjk5OTk4LCAxLjAwMDYsIDEuMDAwNiwgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMS4wMDA2LCAxLCAxLjAwMDAzLCAxLjAwMDAzLCAxLjAwMDAzLCAwLjk5OTczLCAwLjk5OTg3LCAxLjAwMDAxLCAxLjAwMDAxLCAwLjk5OTc3LCAwLjk5OTc3LCAxLjAwMDAxLCAxLjAwMDI2LCAxLjAwMDIyLCAwLjk5OTc3LCAxLjAwMDYsIDEsIDEuMDAwMDEsIDAuOTk5NzMsIDAuOTk5OTksIDAuOTk5NzcsIDEuMDAwMjIsIDEuMDAwMDEsIDEuMDAwMjIsIDAuOTk5NzcsIDEuMDAwMDEsIDEuMDAwMjYsIDAuOTk5NzcsIDEuMDAwMDEsIDEuMDAwMTYsIDEuMDAwMDEsIDEuMDAwMDEsIDEuMDAwMjYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDAuOTk5NDksIDAuOTk5NzMsIDAuOTk5OTgsIDAuOTk5NzMsIDAuOTk5NzMsIDEsIDAuOTk5NzMsIDAuOTk5NzMsIDEuMDAwNiwgMC45OTk3MywgMC45OTk3MywgMC45OTkyNCwgMC45OTkyNCwgMSwgMC45OTkyNCwgMC45OTk5OSwgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk5OCwgMSwgMS4wMDA2LCAwLjk5OTczLCAxLCAwLjk5OTc3LCAxLCAxLCAxLCAxLjAwMDA1LCAxLjAwMDksIDEuMDAwMDUsIDEuMDAwMDMsIDAuOTk5OTgsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDEuMDAwOSwgMC45OTk3MywgMC45OTk5OCwgMS4wMDAyNSwgMC45OTk2OCwgMC45OTk3MywgMS4wMDAwMywgMS4wMDAyNSwgMC42MDI5OSwgMS4wMDAyNCwgMS4wNjQwOSwgMSwgMSwgMC45OTk5OCwgMSwgMC45OTk4LCAxLjAwMDYsIDAuOTk5OTgsIDEsIDAuOTk5MzYsIDAuOTk5NzMsIDEuMDAwMDIsIDEuMDAwMDIsIDEuMDAwMDIsIDEuMDAwMjYsIDEuMDAwMDEsIDEuMDAwMDEsIDEuMDAwMDEsIDEuMDAwMDEsIDEuMDAwMDEsIDEuMDAwMDEsIDEsIDAuOTk5NzcsIDEuMDAwMDEsIDEuMDAwMDEsIDEuMDAwMDEsIDEuMDAwMDEsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMC45OTk3NywgMC45OTk3NywgMS4wMDAyMiwgMS4wMDAyMiwgMS4wMDAyMiwgMS4wMDAyMiwgMS4wMDAyMiwgMS4wMDAwMywgMS4wMDAyMiwgMC45OTk3NywgMC45OTk3NywgMC45OTk3NywgMC45OTk3NywgMS4wMDAwMSwgMS4wMDAwMSwgMS4wMDAyNiwgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk4MiwgMSwgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAxLjA2NDA5LCAxLjAwMDI2LCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAxLCAwLjk5OTczLCAxLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAwLjk5OTc3LCAxLCAwLjk5OTc3LCAxLCAwLjk5OTc3LCAxLCAwLjk5OTc3LCAxLCAwLjk5OTc3LCAxLjA0NTk2LCAwLjk5OTc3LCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDIyLCAwLjk5OTczLCAxLjAwMDIyLCAwLjk5OTczLCAxLjAwMDIyLCAwLjk5OTczLCAxLjAwMDIyLCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDAuOTk5MjQsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDE5LCAxLjAwMDM0LCAxLCAwLjk5OTI0LCAxLjAwMDAxLCAxLCAxLCAwLjk5OTczLCAwLjk5OTI0LCAwLjk5OTczLCAwLjk5OTI0LCAwLjk5OTczLCAxLjAyNTcyLCAwLjk5OTczLCAxLjAwMDA1LCAwLjk5OTczLCAwLjk5OTI0LCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTk5LCAwLjk5OTgsIDAuOTk5NzMsIDEuMDAwMjIsIDAuOTk5NzMsIDEuMDAwMjIsIDAuOTk5NzMsIDEuMDAwMjIsIDAuOTk5NzMsIDEsIDEuMDAwMTYsIDAuOTk5NzcsIDAuOTk5OTgsIDAuOTk5NzcsIDAuOTk5OTgsIDAuOTk5NzcsIDAuOTk5OTgsIDEuMDAwMDEsIDEsIDEuMDAwMDEsIDEsIDEuMDAwMDEsIDEsIDEuMDAwMDEsIDEsIDEuMDAwMjYsIDEuMDAwNiwgMS4wMDAyNiwgMC44NDUzMywgMS4wMDAyNiwgMS4wMDA2LCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAxLjAwMDE2LCAwLjk5OTc3LCAxLjAwMDAxLCAxLCAxLjAwMDAxLCAxLjAwMDI2LCAxLCAxLjAwMDI2LCAxLCAxLjAwMDI2LCAxLCAwLjk5OTI0LCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLCAwLjk5OTgyLCAxLjAwMDIyLCAxLjAwMDI2LCAxLjAwMDAxLCAxLCAxLjAwMDI2LCAxLjAwMDYsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5MjgsIDEsIDAuOTk5NzcsIDEuMDAwMTMsIDEuMDAwNTUsIDAuOTk5NDcsIDAuOTk5NDUsIDAuOTk5NDEsIDAuOTk5MjQsIDEuMDAwMDEsIDEuMDAwMDEsIDEuMDAwNCwgMC45MTYyMSwgMS4wMDAwMSwgMS4wMDAyNiwgMC45OTk3NywgMS4wMDAyMiwgMS4wMDA2LCAxLjAwMDAxLCAxLjAwMDA1LCAwLjk5OTk5LCAwLjk5OTc3LCAxLjAwMDE1LCAxLjAwMDIyLCAwLjk5OTc3LCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDI2LCAxLjAwMDAxLCAxLjAwMDE5LCAxLjAwMDAxLCAwLjk5OTQ2LCAxLCAxLjAwMDYsIDEuMDAwMDEsIDAuOTk5NzgsIDEuMDAwNDUsIDAuOTk5NzMsIDAuOTk5MjQsIDEuMDAwMjMsIDAuOTk5NzgsIDAuOTk5NjYsIDEsIDEuMDAwNjUsIDEuMDAwNDUsIDEuMDAwMTksIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5MjQsIDEsIDEsIDAuOTY0OTksIDEsIDEuMDAwNTUsIDAuOTk5NzMsIDEuMDAwMDgsIDEuMDAwMjcsIDEsIDAuOTk5NywgMC45OTk5NSwgMS4wMDAyMywgMC45OTkzMywgMS4wMDAxOSwgMS4wMDAxNSwgMS4wMDAzMSwgMC45OTkyNCwgMS4wMDAyMywgMC45OTk3MywgMS4wMDAyMywgMS4wMDAzMSwgMS4wMDAwMSwgMC45OTkyOCwgMS4wMDAyOSwgMS4wMDA5MiwgMS4wMDAzNSwgMS4wMDAwMSwgMS4wMDA2LCAxLjAwMDYsIDEsIDAuOTk5ODgsIDAuOTk5NzUsIDEsIDEuMDAwODIsIDAuOTk1NjEsIDAuOTk5NiwgMS4wMDAzNSwgMS4wMDAwMSwgMC45OTk2MiwgMS4wMDAwMSwgMS4wMDA5MiwgMC45OTk2NCwgMS4wMDAwMSwgMC45OTk2MywgMC45OTk5OSwgMS4wMDAzNSwgMS4wMDAzNSwgMS4wMDA4MiwgMC45OTk2MiwgMC45OTk5OSwgMC45OTk3NywgMS4wMDAyMiwgMS4wMDAzNSwgMS4wMDAwMSwgMC45OTk3NywgMS4wMDAyNiwgMC45OTk2LCAwLjk5OTY3LCAxLjAwMDAxLCAxLjAwMDM0LCAxLjAwMDc0LCAxLjAwMDU0LCAxLjAwMDUzLCAxLjAwMDYzLCAwLjk5OTcxLCAwLjk5OTYyLCAxLjAwMDM1LCAwLjk5OTc1LCAwLjk5OTc3LCAwLjk5OTczLCAxLjAwMDQzLCAwLjk5OTUzLCAxLjAwMDcsIDAuOTk5MTUsIDAuOTk5NzMsIDEuMDAwMDgsIDAuOTk4OTIsIDEuMDAwNzMsIDEuMDAwNzMsIDEuMDAxMTQsIDAuOTk5MTUsIDEuMDAwNzMsIDAuOTk5NTUsIDAuOTk5NzMsIDEuMDAwOTIsIDAuOTk5NzMsIDEsIDAuOTk5OTgsIDEsIDEuMDAwMywgMSwgMS4wMDA0MywgMS4wMDAwMSwgMC45OTk2OSwgMS4wMDAzLCAxLCAxLjAwMDM1LCAxLjAwMDAxLCAwLjk5OTUsIDEsIDEuMDAwOTIsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDEuMDAwNywgMC45OTk1LCAxLCAwLjk5OTI0LCAxLjAwMDYsIDAuOTk5MjQsIDAuOTk5NzIsIDEuMDAwNjIsIDAuOTk5NzMsIDEuMDAxMTQsIDEuMDAwNzMsIDEsIDAuOTk5NTUsIDEsIDEsIDEuMDAwNDcsIDAuOTk5NjgsIDEuMDAwMTYsIDAuOTk5NzcsIDEuMDAwMTYsIDAuOTk5NzcsIDEuMDAwMTYsIDAuOTk5NzcsIDEuMDAwMDEsIDEsIDEsIDEsIDAuOTk5NzMsIDEsIDEsIDAuOTk5NTUsIDAuOTk5MjQsIDAuOTk5MjQsIDAuOTk5MjQsIDAuOTk5MjQsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzIsIDEsIDEsIDEuMDAyNjcsIDAuOTk5OTksIDAuOTk5OTgsIDAuOTk5OTgsIDEsIDAuOTk5OTgsIDEuNjY0NzUsIDEsIDAuOTk5NzMsIDAuOTk5NzMsIDEuMDAwMjMsIDAuOTk5NzMsIDAuOTk5NzEsIDAuOTk5MjUsIDEuMDAwMjMsIDEsIDAuOTk5OTEsIDAuOTk5ODQsIDEuMDAwMDIsIDEuMDAwMDIsIDEuMDAwMDIsIDEuMDAwMDIsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAuOTYzMjksIDEsIDEuMjA5ODUsIDEuMzk3MTMsIDEuMDAwMDMsIDAuODI1NCwgMS4wMDAxNSwgMSwgMS4wMDAzNSwgMS4wMDAyNywgMS4wMDAzMSwgMS4wMDAzMSwgMC45OTkxNSwgMS4wMDAzMSwgMS4wMDAzMSwgMC45OTk5OSwgMS4wMDAwMywgMC45OTk5OSwgMC45OTk5OSwgMS40MTE0NCwgMS42LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQwNTc5LCAxLjQwNTc5LCAxLjM2NjI1LCAwLjk5OTk5LCAxLCAwLjk5ODYxLCAwLjk5ODYxLCAxLCAxLjAwMDI2LCAxLjAwMDI2LCAxLjAwMDI2LCAxLjAwMDI2LCAwLjk1MzE3LCAwLjk5OTk5LCAwLjk5OTk5LCAwLjk5OTk5LCAwLjk5OTk5LCAxLjQwNDgzLCAxLCAwLjk5OTc3LCAxLjAwMDU0LCAxLCAxLCAwLjk5OTUzLCAwLjk5OTYyLCAxLjAwMDQyLCAwLjk5OTUsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDFdOwpjb25zdCBIZWx2ZXRpY2FSZWd1bGFyTWV0cmljcyA9IHsKICBsaW5lSGVpZ2h0OiAxLjIsCiAgbGluZUdhcDogMC4yCn07Cgo7Ly8gLi9zcmMvY29yZS9saWJlcmF0aW9uc2Fuc193aWR0aHMuanMKY29uc3QgTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzID0gWzM2NSwgMCwgMzMzLCAyNzgsIDMzMywgNDc0LCA1NTYsIDU1NiwgODg5LCA3MjIsIDIzOCwgMzMzLCAzMzMsIDM4OSwgNTg0LCAyNzgsIDMzMywgMjc4LCAyNzgsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMzMzLCAzMzMsIDU4NCwgNTg0LCA1ODQsIDYxMSwgOTc1LCA3MjIsIDcyMiwgNzIyLCA3MjIsIDY2NywgNjExLCA3NzgsIDcyMiwgMjc4LCA1NTYsIDcyMiwgNjExLCA4MzMsIDcyMiwgNzc4LCA2NjcsIDc3OCwgNzIyLCA2NjcsIDYxMSwgNzIyLCA2NjcsIDk0NCwgNjY3LCA2NjcsIDYxMSwgMzMzLCAyNzgsIDMzMywgNTg0LCA1NTYsIDMzMywgNTU2LCA2MTEsIDU1NiwgNjExLCA1NTYsIDMzMywgNjExLCA2MTEsIDI3OCwgMjc4LCA1NTYsIDI3OCwgODg5LCA2MTEsIDYxMSwgNjExLCA2MTEsIDM4OSwgNTU2LCAzMzMsIDYxMSwgNTU2LCA3NzgsIDU1NiwgNTU2LCA1MDAsIDM4OSwgMjgwLCAzODksIDU4NCwgMzMzLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI4MCwgNTU2LCAzMzMsIDczNywgMzcwLCA1NTYsIDU4NCwgNzM3LCA1NTIsIDQwMCwgNTQ5LCAzMzMsIDMzMywgMzMzLCA1NzYsIDU1NiwgMjc4LCAzMzMsIDMzMywgMzY1LCA1NTYsIDgzNCwgODM0LCA4MzQsIDYxMSwgNzIyLCA3MjIsIDcyMiwgNzIyLCA3MjIsIDcyMiwgMTAwMCwgNzIyLCA2NjcsIDY2NywgNjY3LCA2NjcsIDI3OCwgMjc4LCAyNzgsIDI3OCwgNzIyLCA3MjIsIDc3OCwgNzc4LCA3NzgsIDc3OCwgNzc4LCA1ODQsIDc3OCwgNzIyLCA3MjIsIDcyMiwgNzIyLCA2NjcsIDY2NywgNjExLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA4ODksIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDYxMSwgNjExLCA2MTEsIDYxMSwgNjExLCA2MTEsIDYxMSwgNTQ5LCA2MTEsIDYxMSwgNjExLCA2MTEsIDYxMSwgNTU2LCA2MTEsIDU1NiwgNzIyLCA1NTYsIDcyMiwgNTU2LCA3MjIsIDU1NiwgNzIyLCA1NTYsIDcyMiwgNTU2LCA3MjIsIDU1NiwgNzIyLCA1NTYsIDcyMiwgNzE5LCA3MjIsIDYxMSwgNjY3LCA1NTYsIDY2NywgNTU2LCA2NjcsIDU1NiwgNjY3LCA1NTYsIDY2NywgNTU2LCA3NzgsIDYxMSwgNzc4LCA2MTEsIDc3OCwgNjExLCA3NzgsIDYxMSwgNzIyLCA2MTEsIDcyMiwgNjExLCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDc4NSwgNTU2LCA1NTYsIDI3OCwgNzIyLCA1NTYsIDU1NiwgNjExLCAyNzgsIDYxMSwgMjc4LCA2MTEsIDM4NSwgNjExLCA0NzksIDYxMSwgMjc4LCA3MjIsIDYxMSwgNzIyLCA2MTEsIDcyMiwgNjExLCA3MDgsIDcyMywgNjExLCA3NzgsIDYxMSwgNzc4LCA2MTEsIDc3OCwgNjExLCAxMDAwLCA5NDQsIDcyMiwgMzg5LCA3MjIsIDM4OSwgNzIyLCAzODksIDY2NywgNTU2LCA2NjcsIDU1NiwgNjY3LCA1NTYsIDY2NywgNTU2LCA2MTEsIDMzMywgNjExLCA0NzksIDYxMSwgMzMzLCA3MjIsIDYxMSwgNzIyLCA2MTEsIDcyMiwgNjExLCA3MjIsIDYxMSwgNzIyLCA2MTEsIDcyMiwgNjExLCA5NDQsIDc3OCwgNjY3LCA1NTYsIDY2NywgNjExLCA1MDAsIDYxMSwgNTAwLCA2MTEsIDUwMCwgMjc4LCA1NTYsIDcyMiwgNTU2LCAxMDAwLCA4ODksIDc3OCwgNjExLCA2NjcsIDU1NiwgNjExLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgNDY1LCA3MjIsIDMzMywgODUzLCA5MDYsIDQ3NCwgODI1LCA5MjcsIDgzOCwgMjc4LCA3MjIsIDcyMiwgNjAxLCA3MTksIDY2NywgNjExLCA3MjIsIDc3OCwgMjc4LCA3MjIsIDY2NywgODMzLCA3MjIsIDY0NCwgNzc4LCA3MjIsIDY2NywgNjAwLCA2MTEsIDY2NywgODIxLCA2NjcsIDgwOSwgODAyLCAyNzgsIDY2NywgNjE1LCA0NTEsIDYxMSwgMjc4LCA1ODIsIDYxNSwgNjEwLCA1NTYsIDYwNiwgNDc1LCA0NjAsIDYxMSwgNTQxLCAyNzgsIDU1OCwgNTU2LCA2MTIsIDU1NiwgNDQ1LCA2MTEsIDc2NiwgNjE5LCA1MjAsIDY4NCwgNDQ2LCA1ODIsIDcxNSwgNTc2LCA3NTMsIDg0NSwgMjc4LCA1ODIsIDYxMSwgNTgyLCA4NDUsIDY2NywgNjY5LCA4ODUsIDU2NywgNzExLCA2NjcsIDI3OCwgMjc2LCA1NTYsIDEwOTQsIDEwNjIsIDg3NSwgNjEwLCA3MjIsIDYyMiwgNzE5LCA3MjIsIDcxOSwgNzIyLCA1NjcsIDcxMiwgNjY3LCA5MDQsIDYyNiwgNzE5LCA3MTksIDYxMCwgNzAyLCA4MzMsIDcyMiwgNzc4LCA3MTksIDY2NywgNzIyLCA2MTEsIDYyMiwgODU0LCA2NjcsIDczMCwgNzAzLCAxMDA1LCAxMDE5LCA4NzAsIDk3OSwgNzE5LCA3MTEsIDEwMzEsIDcxOSwgNTU2LCA2MTgsIDYxNSwgNDE3LCA2MzUsIDU1NiwgNzA5LCA0OTcsIDYxNSwgNjE1LCA1MDAsIDYzNSwgNzQwLCA2MDQsIDYxMSwgNjA0LCA2MTEsIDU1NiwgNDkwLCA1NTYsIDg3NSwgNTU2LCA2MTUsIDU4MSwgODMzLCA4NDQsIDcyOSwgODU0LCA2MTUsIDU1MiwgODU0LCA1ODMsIDU1NiwgNTU2LCA2MTEsIDQxNywgNTUyLCA1NTYsIDI3OCwgMjgxLCAyNzgsIDk2OSwgOTA2LCA2MTEsIDUwMCwgNjE1LCA1NTYsIDYwNCwgNzc4LCA2MTEsIDQ4NywgNDQ3LCA5NDQsIDc3OCwgOTQ0LCA3NzgsIDk0NCwgNzc4LCA2NjcsIDU1NiwgMzMzLCAzMzMsIDU1NiwgMTAwMCwgMTAwMCwgNTUyLCAyNzgsIDI3OCwgMjc4LCAyNzgsIDUwMCwgNTAwLCA1MDAsIDU1NiwgNTU2LCAzNTAsIDEwMDAsIDEwMDAsIDI0MCwgNDc5LCAzMzMsIDMzMywgNjA0LCAzMzMsIDE2NywgMzk2LCA1NTYsIDU1NiwgMTA5NCwgNTU2LCA4ODUsIDQ4OSwgMTExNSwgMTAwMCwgNzY4LCA2MDAsIDgzNCwgODM0LCA4MzQsIDgzNCwgMTAwMCwgNTAwLCAxMDAwLCA1MDAsIDEwMDAsIDUwMCwgNTAwLCA0OTQsIDYxMiwgODIzLCA3MTMsIDU4NCwgNTQ5LCA3MTMsIDk3OSwgNzIyLCAyNzQsIDU0OSwgNTQ5LCA1ODMsIDU0OSwgNTQ5LCA2MDQsIDU4NCwgNjA0LCA2MDQsIDcwOCwgNjI1LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MjksIDYwNCwgNjA0LCAzNTQsIDM1NCwgMTAwMCwgOTkwLCA5OTAsIDk5MCwgOTkwLCA0OTQsIDYwNCwgNjA0LCA2MDQsIDYwNCwgMzU0LCAxMDIxLCAxMDUyLCA5MTcsIDc1MCwgNzUwLCA1MzEsIDY1NiwgNTk0LCA1MTAsIDUwMCwgNzUwLCA3NTAsIDYxMSwgNjExLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMjIyLCAyMjIsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzXTsKY29uc3QgTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZyA9IFstMSwgLTEsIC0xLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCA2NSwgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODEsIDgyLCA4MywgODQsIDg1LCA4NiwgODcsIDg4LCA4OSwgOTAsIDkxLCA5MiwgOTMsIDk0LCA5NSwgOTYsIDk3LCA5OCwgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsIDExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDE2MSwgMTYyLCAxNjMsIDE2NCwgMTY1LCAxNjYsIDE2NywgMTY4LCAxNjksIDE3MCwgMTcxLCAxNzIsIDE3NCwgMTc1LCAxNzYsIDE3NywgMTc4LCAxNzksIDE4MCwgMTgxLCAxODIsIDE4MywgMTg0LCAxODUsIDE4NiwgMTg3LCAxODgsIDE4OSwgMTkwLCAxOTEsIDE5MiwgMTkzLCAxOTQsIDE5NSwgMTk2LCAxOTcsIDE5OCwgMTk5LCAyMDAsIDIwMSwgMjAyLCAyMDMsIDIwNCwgMjA1LCAyMDYsIDIwNywgMjA4LCAyMDksIDIxMCwgMjExLCAyMTIsIDIxMywgMjE0LCAyMTUsIDIxNiwgMjE3LCAyMTgsIDIxOSwgMjIwLCAyMjEsIDIyMiwgMjIzLCAyMjQsIDIyNSwgMjI2LCAyMjcsIDIyOCwgMjI5LCAyMzAsIDIzMSwgMjMyLCAyMzMsIDIzNCwgMjM1LCAyMzYsIDIzNywgMjM4LCAyMzksIDI0MCwgMjQxLCAyNDIsIDI0MywgMjQ0LCAyNDUsIDI0NiwgMjQ3LCAyNDgsIDI0OSwgMjUwLCAyNTEsIDI1MiwgMjUzLCAyNTQsIDI1NSwgMjU2LCAyNTcsIDI1OCwgMjU5LCAyNjAsIDI2MSwgMjYyLCAyNjMsIDI2NCwgMjY1LCAyNjYsIDI2NywgMjY4LCAyNjksIDI3MCwgMjcxLCAyNzIsIDI3MywgMjc0LCAyNzUsIDI3NiwgMjc3LCAyNzgsIDI3OSwgMjgwLCAyODEsIDI4MiwgMjgzLCAyODQsIDI4NSwgMjg2LCAyODcsIDI4OCwgMjg5LCAyOTAsIDI5MSwgMjkyLCAyOTMsIDI5NCwgMjk1LCAyOTYsIDI5NywgMjk4LCAyOTksIDMwMCwgMzAxLCAzMDIsIDMwMywgMzA0LCAzMDUsIDMwNiwgMzA3LCAzMDgsIDMwOSwgMzEwLCAzMTEsIDMxMiwgMzEzLCAzMTQsIDMxNSwgMzE2LCAzMTcsIDMxOCwgMzE5LCAzMjAsIDMyMSwgMzIyLCAzMjMsIDMyNCwgMzI1LCAzMjYsIDMyNywgMzI4LCAzMjksIDMzMCwgMzMxLCAzMzIsIDMzMywgMzM0LCAzMzUsIDMzNiwgMzM3LCAzMzgsIDMzOSwgMzQwLCAzNDEsIDM0MiwgMzQzLCAzNDQsIDM0NSwgMzQ2LCAzNDcsIDM0OCwgMzQ5LCAzNTAsIDM1MSwgMzUyLCAzNTMsIDM1NCwgMzU1LCAzNTYsIDM1NywgMzU4LCAzNTksIDM2MCwgMzYxLCAzNjIsIDM2MywgMzY0LCAzNjUsIDM2NiwgMzY3LCAzNjgsIDM2OSwgMzcwLCAzNzEsIDM3MiwgMzczLCAzNzQsIDM3NSwgMzc2LCAzNzcsIDM3OCwgMzc5LCAzODAsIDM4MSwgMzgyLCAzODMsIDQwMiwgNTA2LCA1MDcsIDUwOCwgNTA5LCA1MTAsIDUxMSwgNTM2LCA1MzcsIDUzOCwgNTM5LCA3MTAsIDcxMSwgNzEzLCA3MjgsIDcyOSwgNzMwLCA3MzEsIDczMiwgNzMzLCA5MDAsIDkwMSwgOTAyLCA5MDMsIDkwNCwgOTA1LCA5MDYsIDkwOCwgOTEwLCA5MTEsIDkxMiwgOTEzLCA5MTQsIDkxNSwgOTE2LCA5MTcsIDkxOCwgOTE5LCA5MjAsIDkyMSwgOTIyLCA5MjMsIDkyNCwgOTI1LCA5MjYsIDkyNywgOTI4LCA5MjksIDkzMSwgOTMyLCA5MzMsIDkzNCwgOTM1LCA5MzYsIDkzNywgOTM4LCA5MzksIDk0MCwgOTQxLCA5NDIsIDk0MywgOTQ0LCA5NDUsIDk0NiwgOTQ3LCA5NDgsIDk0OSwgOTUwLCA5NTEsIDk1MiwgOTUzLCA5NTQsIDk1NSwgOTU2LCA5NTcsIDk1OCwgOTU5LCA5NjAsIDk2MSwgOTYyLCA5NjMsIDk2NCwgOTY1LCA5NjYsIDk2NywgOTY4LCA5NjksIDk3MCwgOTcxLCA5NzIsIDk3MywgOTc0LCAxMDI0LCAxMDI1LCAxMDI2LCAxMDI3LCAxMDI4LCAxMDI5LCAxMDMwLCAxMDMxLCAxMDMyLCAxMDMzLCAxMDM0LCAxMDM1LCAxMDM2LCAxMDM3LCAxMDM4LCAxMDM5LCAxMDQwLCAxMDQxLCAxMDQyLCAxMDQzLCAxMDQ0LCAxMDQ1LCAxMDQ2LCAxMDQ3LCAxMDQ4LCAxMDQ5LCAxMDUwLCAxMDUxLCAxMDUyLCAxMDUzLCAxMDU0LCAxMDU1LCAxMDU2LCAxMDU3LCAxMDU4LCAxMDU5LCAxMDYwLCAxMDYxLCAxMDYyLCAxMDYzLCAxMDY0LCAxMDY1LCAxMDY2LCAxMDY3LCAxMDY4LCAxMDY5LCAxMDcwLCAxMDcxLCAxMDcyLCAxMDczLCAxMDc0LCAxMDc1LCAxMDc2LCAxMDc3LCAxMDc4LCAxMDc5LCAxMDgwLCAxMDgxLCAxMDgyLCAxMDgzLCAxMDg0LCAxMDg1LCAxMDg2LCAxMDg3LCAxMDg4LCAxMDg5LCAxMDkwLCAxMDkxLCAxMDkyLCAxMDkzLCAxMDk0LCAxMDk1LCAxMDk2LCAxMDk3LCAxMDk4LCAxMDk5LCAxMTAwLCAxMTAxLCAxMTAyLCAxMTAzLCAxMTA0LCAxMTA1LCAxMTA2LCAxMTA3LCAxMTA4LCAxMTA5LCAxMTEwLCAxMTExLCAxMTEyLCAxMTEzLCAxMTE0LCAxMTE1LCAxMTE2LCAxMTE3LCAxMTE4LCAxMTE5LCAxMTM4LCAxMTM5LCAxMTY4LCAxMTY5LCA3ODA4LCA3ODA5LCA3ODEwLCA3ODExLCA3ODEyLCA3ODEzLCA3OTIyLCA3OTIzLCA4MjA4LCA4MjA5LCA4MjExLCA4MjEyLCA4MjEzLCA4MjE1LCA4MjE2LCA4MjE3LCA4MjE4LCA4MjE5LCA4MjIwLCA4MjIxLCA4MjIyLCA4MjI0LCA4MjI1LCA4MjI2LCA4MjMwLCA4MjQwLCA4MjQyLCA4MjQzLCA4MjQ5LCA4MjUwLCA4MjUyLCA4MjU0LCA4MjYwLCA4MzE5LCA4MzU1LCA4MzU2LCA4MzU5LCA4MzY0LCA4NDUzLCA4NDY3LCA4NDcwLCA4NDgyLCA4NDg2LCA4NDk0LCA4NTM5LCA4NTQwLCA4NTQxLCA4NTQyLCA4NTkyLCA4NTkzLCA4NTk0LCA4NTk1LCA4NTk2LCA4NTk3LCA4NjE2LCA4NzA2LCA4NzEwLCA4NzE5LCA4NzIxLCA4NzIyLCA4NzMwLCA4NzM0LCA4NzM1LCA4NzQ1LCA4NzQ3LCA4Nzc2LCA4ODAwLCA4ODAxLCA4ODA0LCA4ODA1LCA4OTYyLCA4OTc2LCA4OTkyLCA4OTkzLCA5NDcyLCA5NDc0LCA5NDg0LCA5NDg4LCA5NDkyLCA5NDk2LCA5NTAwLCA5NTA4LCA5NTE2LCA5NTI0LCA5NTMyLCA5NTUyLCA5NTUzLCA5NTU0LCA5NTU1LCA5NTU2LCA5NTU3LCA5NTU4LCA5NTU5LCA5NTYwLCA5NTYxLCA5NTYyLCA5NTYzLCA5NTY0LCA5NTY1LCA5NTY2LCA5NTY3LCA5NTY4LCA5NTY5LCA5NTcwLCA5NTcxLCA5NTcyLCA5NTczLCA5NTc0LCA5NTc1LCA5NTc2LCA5NTc3LCA5NTc4LCA5NTc5LCA5NTgwLCA5NjAwLCA5NjA0LCA5NjA4LCA5NjEyLCA5NjE2LCA5NjE3LCA5NjE4LCA5NjE5LCA5NjMyLCA5NjMzLCA5NjQyLCA5NjQzLCA5NjQ0LCA5NjUwLCA5NjU4LCA5NjYwLCA5NjY4LCA5Njc0LCA5Njc1LCA5Njc5LCA5Njg4LCA5Njg5LCA5NzAyLCA5Nzg2LCA5Nzg3LCA5Nzg4LCA5NzkyLCA5Nzk0LCA5ODI0LCA5ODI3LCA5ODI5LCA5ODMwLCA5ODM0LCA5ODM1LCA5ODM2LCA2MTQ0MSwgNjE0NDIsIDYxNDQ1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTFdOwpjb25zdCBMaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHMgPSBbMzY1LCAwLCAzMzMsIDI3OCwgMzMzLCA0NzQsIDU1NiwgNTU2LCA4ODksIDcyMiwgMjM4LCAzMzMsIDMzMywgMzg5LCA1ODQsIDI3OCwgMzMzLCAyNzgsIDI3OCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAzMzMsIDMzMywgNTg0LCA1ODQsIDU4NCwgNjExLCA5NzUsIDcyMiwgNzIyLCA3MjIsIDcyMiwgNjY3LCA2MTEsIDc3OCwgNzIyLCAyNzgsIDU1NiwgNzIyLCA2MTEsIDgzMywgNzIyLCA3NzgsIDY2NywgNzc4LCA3MjIsIDY2NywgNjExLCA3MjIsIDY2NywgOTQ0LCA2NjcsIDY2NywgNjExLCAzMzMsIDI3OCwgMzMzLCA1ODQsIDU1NiwgMzMzLCA1NTYsIDYxMSwgNTU2LCA2MTEsIDU1NiwgMzMzLCA2MTEsIDYxMSwgMjc4LCAyNzgsIDU1NiwgMjc4LCA4ODksIDYxMSwgNjExLCA2MTEsIDYxMSwgMzg5LCA1NTYsIDMzMywgNjExLCA1NTYsIDc3OCwgNTU2LCA1NTYsIDUwMCwgMzg5LCAyODAsIDM4OSwgNTg0LCAzMzMsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjgwLCA1NTYsIDMzMywgNzM3LCAzNzAsIDU1NiwgNTg0LCA3MzcsIDU1MiwgNDAwLCA1NDksIDMzMywgMzMzLCAzMzMsIDU3NiwgNTU2LCAyNzgsIDMzMywgMzMzLCAzNjUsIDU1NiwgODM0LCA4MzQsIDgzNCwgNjExLCA3MjIsIDcyMiwgNzIyLCA3MjIsIDcyMiwgNzIyLCAxMDAwLCA3MjIsIDY2NywgNjY3LCA2NjcsIDY2NywgMjc4LCAyNzgsIDI3OCwgMjc4LCA3MjIsIDcyMiwgNzc4LCA3NzgsIDc3OCwgNzc4LCA3NzgsIDU4NCwgNzc4LCA3MjIsIDcyMiwgNzIyLCA3MjIsIDY2NywgNjY3LCA2MTEsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDg4OSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI3OCwgMjc4LCAyNzgsIDI3OCwgNjExLCA2MTEsIDYxMSwgNjExLCA2MTEsIDYxMSwgNjExLCA1NDksIDYxMSwgNjExLCA2MTEsIDYxMSwgNjExLCA1NTYsIDYxMSwgNTU2LCA3MjIsIDU1NiwgNzIyLCA1NTYsIDcyMiwgNTU2LCA3MjIsIDU1NiwgNzIyLCA1NTYsIDcyMiwgNTU2LCA3MjIsIDU1NiwgNzIyLCA3NDAsIDcyMiwgNjExLCA2NjcsIDU1NiwgNjY3LCA1NTYsIDY2NywgNTU2LCA2NjcsIDU1NiwgNjY3LCA1NTYsIDc3OCwgNjExLCA3NzgsIDYxMSwgNzc4LCA2MTEsIDc3OCwgNjExLCA3MjIsIDYxMSwgNzIyLCA2MTEsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgNzgyLCA1NTYsIDU1NiwgMjc4LCA3MjIsIDU1NiwgNTU2LCA2MTEsIDI3OCwgNjExLCAyNzgsIDYxMSwgMzk2LCA2MTEsIDQ3OSwgNjExLCAyNzgsIDcyMiwgNjExLCA3MjIsIDYxMSwgNzIyLCA2MTEsIDcwOCwgNzIzLCA2MTEsIDc3OCwgNjExLCA3NzgsIDYxMSwgNzc4LCA2MTEsIDEwMDAsIDk0NCwgNzIyLCAzODksIDcyMiwgMzg5LCA3MjIsIDM4OSwgNjY3LCA1NTYsIDY2NywgNTU2LCA2NjcsIDU1NiwgNjY3LCA1NTYsIDYxMSwgMzMzLCA2MTEsIDQ3OSwgNjExLCAzMzMsIDcyMiwgNjExLCA3MjIsIDYxMSwgNzIyLCA2MTEsIDcyMiwgNjExLCA3MjIsIDYxMSwgNzIyLCA2MTEsIDk0NCwgNzc4LCA2NjcsIDU1NiwgNjY3LCA2MTEsIDUwMCwgNjExLCA1MDAsIDYxMSwgNTAwLCAyNzgsIDU1NiwgNzIyLCA1NTYsIDEwMDAsIDg4OSwgNzc4LCA2MTEsIDY2NywgNTU2LCA2MTEsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDcyMiwgMzMzLCA4NTQsIDkwNiwgNDczLCA4NDQsIDkzMCwgODQ3LCAyNzgsIDcyMiwgNzIyLCA2MTAsIDY3MSwgNjY3LCA2MTEsIDcyMiwgNzc4LCAyNzgsIDcyMiwgNjY3LCA4MzMsIDcyMiwgNjU3LCA3NzgsIDcxOCwgNjY3LCA1OTAsIDYxMSwgNjY3LCA4MjIsIDY2NywgODI5LCA3ODEsIDI3OCwgNjY3LCA2MjAsIDQ3OSwgNjExLCAyNzgsIDU5MSwgNjIwLCA2MjEsIDU1NiwgNjEwLCA0NzksIDQ5MiwgNjExLCA1NTgsIDI3OCwgNTY2LCA1NTYsIDYwMywgNTU2LCA0NTAsIDYxMSwgNzEyLCA2MDUsIDUzMiwgNjY0LCA0MDksIDU5MSwgNzA0LCA1NzgsIDc3MywgODM0LCAyNzgsIDU5MSwgNjExLCA1OTEsIDgzNCwgNjY3LCA2NjcsIDg4NiwgNjE0LCA3MTksIDY2NywgMjc4LCAyNzgsIDU1NiwgMTA5NCwgMTA0MiwgODU0LCA2MjIsIDcxOSwgNjc3LCA3MTksIDcyMiwgNzA4LCA3MjIsIDYxNCwgNzIyLCA2NjcsIDkyNywgNjQzLCA3MTksIDcxOSwgNjE1LCA2ODcsIDgzMywgNzIyLCA3NzgsIDcxOSwgNjY3LCA3MjIsIDYxMSwgNjc3LCA3ODEsIDY2NywgNzI5LCA3MDgsIDk3OSwgOTg5LCA4NTQsIDEwMDAsIDcwOCwgNzE5LCAxMDQyLCA3MjksIDU1NiwgNjE5LCA2MDQsIDUzNCwgNjE4LCA1NTYsIDczNiwgNTEwLCA2MTEsIDYxMSwgNTA3LCA2MjIsIDc0MCwgNjA0LCA2MTEsIDYxMSwgNjExLCA1NTYsIDg4OSwgNTU2LCA4ODUsIDU1NiwgNjQ2LCA1ODMsIDg4OSwgOTM1LCA3MDcsIDg1NCwgNTk0LCA1NTIsIDg2NSwgNTg5LCA1NTYsIDU1NiwgNjExLCA0NjksIDU2MywgNTU2LCAyNzgsIDI3OCwgMjc4LCA5NjksIDkwNiwgNjExLCA1MDcsIDYxOSwgNTU2LCA2MTEsIDc3OCwgNjExLCA1NzUsIDQ2NywgOTQ0LCA3NzgsIDk0NCwgNzc4LCA5NDQsIDc3OCwgNjY3LCA1NTYsIDMzMywgMzMzLCA1NTYsIDEwMDAsIDEwMDAsIDU1MiwgMjc4LCAyNzgsIDI3OCwgMjc4LCA1MDAsIDUwMCwgNTAwLCA1NTYsIDU1NiwgMzUwLCAxMDAwLCAxMDAwLCAyNDAsIDQ3OSwgMzMzLCAzMzMsIDYwNCwgMzMzLCAxNjcsIDM5NiwgNTU2LCA1NTYsIDExMDQsIDU1NiwgODg1LCA1MTYsIDExNDYsIDEwMDAsIDc2OCwgNjAwLCA4MzQsIDgzNCwgODM0LCA4MzQsIDk5OSwgNTAwLCAxMDAwLCA1MDAsIDEwMDAsIDUwMCwgNTAwLCA0OTQsIDYxMiwgODIzLCA3MTMsIDU4NCwgNTQ5LCA3MTMsIDk3OSwgNzIyLCAyNzQsIDU0OSwgNTQ5LCA1ODMsIDU0OSwgNTQ5LCA2MDQsIDU4NCwgNjA0LCA2MDQsIDcwOCwgNjI1LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MjksIDYwNCwgNjA0LCAzNTQsIDM1NCwgMTAwMCwgOTkwLCA5OTAsIDk5MCwgOTkwLCA0OTQsIDYwNCwgNjA0LCA2MDQsIDYwNCwgMzU0LCAxMDIxLCAxMDUyLCA5MTcsIDc1MCwgNzUwLCA1MzEsIDY1NiwgNTk0LCA1MTAsIDUwMCwgNzUwLCA3NTAsIDYxMSwgNjExLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMjIyLCAyMjIsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzXTsKY29uc3QgTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZyA9IFstMSwgLTEsIC0xLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCA2NSwgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODEsIDgyLCA4MywgODQsIDg1LCA4NiwgODcsIDg4LCA4OSwgOTAsIDkxLCA5MiwgOTMsIDk0LCA5NSwgOTYsIDk3LCA5OCwgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsIDExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDE2MSwgMTYyLCAxNjMsIDE2NCwgMTY1LCAxNjYsIDE2NywgMTY4LCAxNjksIDE3MCwgMTcxLCAxNzIsIDE3NCwgMTc1LCAxNzYsIDE3NywgMTc4LCAxNzksIDE4MCwgMTgxLCAxODIsIDE4MywgMTg0LCAxODUsIDE4NiwgMTg3LCAxODgsIDE4OSwgMTkwLCAxOTEsIDE5MiwgMTkzLCAxOTQsIDE5NSwgMTk2LCAxOTcsIDE5OCwgMTk5LCAyMDAsIDIwMSwgMjAyLCAyMDMsIDIwNCwgMjA1LCAyMDYsIDIwNywgMjA4LCAyMDksIDIxMCwgMjExLCAyMTIsIDIxMywgMjE0LCAyMTUsIDIxNiwgMjE3LCAyMTgsIDIxOSwgMjIwLCAyMjEsIDIyMiwgMjIzLCAyMjQsIDIyNSwgMjI2LCAyMjcsIDIyOCwgMjI5LCAyMzAsIDIzMSwgMjMyLCAyMzMsIDIzNCwgMjM1LCAyMzYsIDIzNywgMjM4LCAyMzksIDI0MCwgMjQxLCAyNDIsIDI0MywgMjQ0LCAyNDUsIDI0NiwgMjQ3LCAyNDgsIDI0OSwgMjUwLCAyNTEsIDI1MiwgMjUzLCAyNTQsIDI1NSwgMjU2LCAyNTcsIDI1OCwgMjU5LCAyNjAsIDI2MSwgMjYyLCAyNjMsIDI2NCwgMjY1LCAyNjYsIDI2NywgMjY4LCAyNjksIDI3MCwgMjcxLCAyNzIsIDI3MywgMjc0LCAyNzUsIDI3NiwgMjc3LCAyNzgsIDI3OSwgMjgwLCAyODEsIDI4MiwgMjgzLCAyODQsIDI4NSwgMjg2LCAyODcsIDI4OCwgMjg5LCAyOTAsIDI5MSwgMjkyLCAyOTMsIDI5NCwgMjk1LCAyOTYsIDI5NywgMjk4LCAyOTksIDMwMCwgMzAxLCAzMDIsIDMwMywgMzA0LCAzMDUsIDMwNiwgMzA3LCAzMDgsIDMwOSwgMzEwLCAzMTEsIDMxMiwgMzEzLCAzMTQsIDMxNSwgMzE2LCAzMTcsIDMxOCwgMzE5LCAzMjAsIDMyMSwgMzIyLCAzMjMsIDMyNCwgMzI1LCAzMjYsIDMyNywgMzI4LCAzMjksIDMzMCwgMzMxLCAzMzIsIDMzMywgMzM0LCAzMzUsIDMzNiwgMzM3LCAzMzgsIDMzOSwgMzQwLCAzNDEsIDM0MiwgMzQzLCAzNDQsIDM0NSwgMzQ2LCAzNDcsIDM0OCwgMzQ5LCAzNTAsIDM1MSwgMzUyLCAzNTMsIDM1NCwgMzU1LCAzNTYsIDM1NywgMzU4LCAzNTksIDM2MCwgMzYxLCAzNjIsIDM2MywgMzY0LCAzNjUsIDM2NiwgMzY3LCAzNjgsIDM2OSwgMzcwLCAzNzEsIDM3MiwgMzczLCAzNzQsIDM3NSwgMzc2LCAzNzcsIDM3OCwgMzc5LCAzODAsIDM4MSwgMzgyLCAzODMsIDQwMiwgNTA2LCA1MDcsIDUwOCwgNTA5LCA1MTAsIDUxMSwgNTM2LCA1MzcsIDUzOCwgNTM5LCA3MTAsIDcxMSwgNzEzLCA3MjgsIDcyOSwgNzMwLCA3MzEsIDczMiwgNzMzLCA5MDAsIDkwMSwgOTAyLCA5MDMsIDkwNCwgOTA1LCA5MDYsIDkwOCwgOTEwLCA5MTEsIDkxMiwgOTEzLCA5MTQsIDkxNSwgOTE2LCA5MTcsIDkxOCwgOTE5LCA5MjAsIDkyMSwgOTIyLCA5MjMsIDkyNCwgOTI1LCA5MjYsIDkyNywgOTI4LCA5MjksIDkzMSwgOTMyLCA5MzMsIDkzNCwgOTM1LCA5MzYsIDkzNywgOTM4LCA5MzksIDk0MCwgOTQxLCA5NDIsIDk0MywgOTQ0LCA5NDUsIDk0NiwgOTQ3LCA5NDgsIDk0OSwgOTUwLCA5NTEsIDk1MiwgOTUzLCA5NTQsIDk1NSwgOTU2LCA5NTcsIDk1OCwgOTU5LCA5NjAsIDk2MSwgOTYyLCA5NjMsIDk2NCwgOTY1LCA5NjYsIDk2NywgOTY4LCA5NjksIDk3MCwgOTcxLCA5NzIsIDk3MywgOTc0LCAxMDI0LCAxMDI1LCAxMDI2LCAxMDI3LCAxMDI4LCAxMDI5LCAxMDMwLCAxMDMxLCAxMDMyLCAxMDMzLCAxMDM0LCAxMDM1LCAxMDM2LCAxMDM3LCAxMDM4LCAxMDM5LCAxMDQwLCAxMDQxLCAxMDQyLCAxMDQzLCAxMDQ0LCAxMDQ1LCAxMDQ2LCAxMDQ3LCAxMDQ4LCAxMDQ5LCAxMDUwLCAxMDUxLCAxMDUyLCAxMDUzLCAxMDU0LCAxMDU1LCAxMDU2LCAxMDU3LCAxMDU4LCAxMDU5LCAxMDYwLCAxMDYxLCAxMDYyLCAxMDYzLCAxMDY0LCAxMDY1LCAxMDY2LCAxMDY3LCAxMDY4LCAxMDY5LCAxMDcwLCAxMDcxLCAxMDcyLCAxMDczLCAxMDc0LCAxMDc1LCAxMDc2LCAxMDc3LCAxMDc4LCAxMDc5LCAxMDgwLCAxMDgxLCAxMDgyLCAxMDgzLCAxMDg0LCAxMDg1LCAxMDg2LCAxMDg3LCAxMDg4LCAxMDg5LCAxMDkwLCAxMDkxLCAxMDkyLCAxMDkzLCAxMDk0LCAxMDk1LCAxMDk2LCAxMDk3LCAxMDk4LCAxMDk5LCAxMTAwLCAxMTAxLCAxMTAyLCAxMTAzLCAxMTA0LCAxMTA1LCAxMTA2LCAxMTA3LCAxMTA4LCAxMTA5LCAxMTEwLCAxMTExLCAxMTEyLCAxMTEzLCAxMTE0LCAxMTE1LCAxMTE2LCAxMTE3LCAxMTE4LCAxMTE5LCAxMTM4LCAxMTM5LCAxMTY4LCAxMTY5LCA3ODA4LCA3ODA5LCA3ODEwLCA3ODExLCA3ODEyLCA3ODEzLCA3OTIyLCA3OTIzLCA4MjA4LCA4MjA5LCA4MjExLCA4MjEyLCA4MjEzLCA4MjE1LCA4MjE2LCA4MjE3LCA4MjE4LCA4MjE5LCA4MjIwLCA4MjIxLCA4MjIyLCA4MjI0LCA4MjI1LCA4MjI2LCA4MjMwLCA4MjQwLCA4MjQyLCA4MjQzLCA4MjQ5LCA4MjUwLCA4MjUyLCA4MjU0LCA4MjYwLCA4MzE5LCA4MzU1LCA4MzU2LCA4MzU5LCA4MzY0LCA4NDUzLCA4NDY3LCA4NDcwLCA4NDgyLCA4NDg2LCA4NDk0LCA4NTM5LCA4NTQwLCA4NTQxLCA4NTQyLCA4NTkyLCA4NTkzLCA4NTk0LCA4NTk1LCA4NTk2LCA4NTk3LCA4NjE2LCA4NzA2LCA4NzEwLCA4NzE5LCA4NzIxLCA4NzIyLCA4NzMwLCA4NzM0LCA4NzM1LCA4NzQ1LCA4NzQ3LCA4Nzc2LCA4ODAwLCA4ODAxLCA4ODA0LCA4ODA1LCA4OTYyLCA4OTc2LCA4OTkyLCA4OTkzLCA5NDcyLCA5NDc0LCA5NDg0LCA5NDg4LCA5NDkyLCA5NDk2LCA5NTAwLCA5NTA4LCA5NTE2LCA5NTI0LCA5NTMyLCA5NTUyLCA5NTUzLCA5NTU0LCA5NTU1LCA5NTU2LCA5NTU3LCA5NTU4LCA5NTU5LCA5NTYwLCA5NTYxLCA5NTYyLCA5NTYzLCA5NTY0LCA5NTY1LCA5NTY2LCA5NTY3LCA5NTY4LCA5NTY5LCA5NTcwLCA5NTcxLCA5NTcyLCA5NTczLCA5NTc0LCA5NTc1LCA5NTc2LCA5NTc3LCA5NTc4LCA5NTc5LCA5NTgwLCA5NjAwLCA5NjA0LCA5NjA4LCA5NjEyLCA5NjE2LCA5NjE3LCA5NjE4LCA5NjE5LCA5NjMyLCA5NjMzLCA5NjQyLCA5NjQzLCA5NjQ0LCA5NjUwLCA5NjU4LCA5NjYwLCA5NjY4LCA5Njc0LCA5Njc1LCA5Njc5LCA5Njg4LCA5Njg5LCA5NzAyLCA5Nzg2LCA5Nzg3LCA5Nzg4LCA5NzkyLCA5Nzk0LCA5ODI0LCA5ODI3LCA5ODI5LCA5ODMwLCA5ODM0LCA5ODM1LCA5ODM2LCA2MTQ0MSwgNjE0NDIsIDYxNDQ1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTFdOwpjb25zdCBMaWJlcmF0aW9uU2Fuc0l0YWxpY1dpZHRocyA9IFszNjUsIDAsIDMzMywgMjc4LCAyNzgsIDM1NSwgNTU2LCA1NTYsIDg4OSwgNjY3LCAxOTEsIDMzMywgMzMzLCAzODksIDU4NCwgMjc4LCAzMzMsIDI3OCwgMjc4LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI3OCwgMjc4LCA1ODQsIDU4NCwgNTg0LCA1NTYsIDEwMTUsIDY2NywgNjY3LCA3MjIsIDcyMiwgNjY3LCA2MTEsIDc3OCwgNzIyLCAyNzgsIDUwMCwgNjY3LCA1NTYsIDgzMywgNzIyLCA3NzgsIDY2NywgNzc4LCA3MjIsIDY2NywgNjExLCA3MjIsIDY2NywgOTQ0LCA2NjcsIDY2NywgNjExLCAyNzgsIDI3OCwgMjc4LCA0NjksIDU1NiwgMzMzLCA1NTYsIDU1NiwgNTAwLCA1NTYsIDU1NiwgMjc4LCA1NTYsIDU1NiwgMjIyLCAyMjIsIDUwMCwgMjIyLCA4MzMsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMzMzLCA1MDAsIDI3OCwgNTU2LCA1MDAsIDcyMiwgNTAwLCA1MDAsIDUwMCwgMzM0LCAyNjAsIDMzNCwgNTg0LCAzMzMsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjYwLCA1NTYsIDMzMywgNzM3LCAzNzAsIDU1NiwgNTg0LCA3MzcsIDU1MiwgNDAwLCA1NDksIDMzMywgMzMzLCAzMzMsIDU3NiwgNTM3LCAyNzgsIDMzMywgMzMzLCAzNjUsIDU1NiwgODM0LCA4MzQsIDgzNCwgNjExLCA2NjcsIDY2NywgNjY3LCA2NjcsIDY2NywgNjY3LCAxMDAwLCA3MjIsIDY2NywgNjY3LCA2NjcsIDY2NywgMjc4LCAyNzgsIDI3OCwgMjc4LCA3MjIsIDcyMiwgNzc4LCA3NzgsIDc3OCwgNzc4LCA3NzgsIDU4NCwgNzc4LCA3MjIsIDcyMiwgNzIyLCA3MjIsIDY2NywgNjY3LCA2MTEsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDg4OSwgNTAwLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI3OCwgMjc4LCAyNzgsIDI3OCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NDksIDYxMSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1MDAsIDU1NiwgNTAwLCA2NjcsIDU1NiwgNjY3LCA1NTYsIDY2NywgNTU2LCA3MjIsIDUwMCwgNzIyLCA1MDAsIDcyMiwgNTAwLCA3MjIsIDUwMCwgNzIyLCA2MjUsIDcyMiwgNTU2LCA2NjcsIDU1NiwgNjY3LCA1NTYsIDY2NywgNTU2LCA2NjcsIDU1NiwgNjY3LCA1NTYsIDc3OCwgNTU2LCA3NzgsIDU1NiwgNzc4LCA1NTYsIDc3OCwgNTU2LCA3MjIsIDU1NiwgNzIyLCA1NTYsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjIyLCAyNzgsIDI3OCwgNzMzLCA0NDQsIDUwMCwgMjIyLCA2NjcsIDUwMCwgNTAwLCA1NTYsIDIyMiwgNTU2LCAyMjIsIDU1NiwgMjgxLCA1NTYsIDQwMCwgNTU2LCAyMjIsIDcyMiwgNTU2LCA3MjIsIDU1NiwgNzIyLCA1NTYsIDYxNSwgNzIzLCA1NTYsIDc3OCwgNTU2LCA3NzgsIDU1NiwgNzc4LCA1NTYsIDEwMDAsIDk0NCwgNzIyLCAzMzMsIDcyMiwgMzMzLCA3MjIsIDMzMywgNjY3LCA1MDAsIDY2NywgNTAwLCA2NjcsIDUwMCwgNjY3LCA1MDAsIDYxMSwgMjc4LCA2MTEsIDM1NCwgNjExLCAyNzgsIDcyMiwgNTU2LCA3MjIsIDU1NiwgNzIyLCA1NTYsIDcyMiwgNTU2LCA3MjIsIDU1NiwgNzIyLCA1NTYsIDk0NCwgNzIyLCA2NjcsIDUwMCwgNjY3LCA2MTEsIDUwMCwgNjExLCA1MDAsIDYxMSwgNTAwLCAyMjIsIDU1NiwgNjY3LCA1NTYsIDEwMDAsIDg4OSwgNzc4LCA2MTEsIDY2NywgNTAwLCA2MTEsIDI3OCwgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDY2NywgMjc4LCA3ODksIDg0NiwgMzg5LCA3OTQsIDg2NSwgNzc1LCAyMjIsIDY2NywgNjY3LCA1NzAsIDY3MSwgNjY3LCA2MTEsIDcyMiwgNzc4LCAyNzgsIDY2NywgNjY3LCA4MzMsIDcyMiwgNjQ4LCA3NzgsIDcyNSwgNjY3LCA2MDAsIDYxMSwgNjY3LCA4MzcsIDY2NywgODMxLCA3NjEsIDI3OCwgNjY3LCA1NzAsIDQzOSwgNTU1LCAyMjIsIDU1MCwgNTcwLCA1NzEsIDUwMCwgNTU2LCA0MzksIDQ2MywgNTU1LCA1NDIsIDIyMiwgNTAwLCA0OTIsIDU0OCwgNTAwLCA0NDcsIDU1NiwgNjcwLCA1NzMsIDQ4NiwgNjAzLCAzNzQsIDU1MCwgNjUyLCA1NDYsIDcyOCwgNzc5LCAyMjIsIDU1MCwgNTU2LCA1NTAsIDc3OSwgNjY3LCA2NjcsIDg0MywgNTQ0LCA3MDgsIDY2NywgMjc4LCAyNzgsIDUwMCwgMTA2NiwgOTgyLCA4NDQsIDU4OSwgNzE1LCA2MzksIDcyNCwgNjY3LCA2NTEsIDY2NywgNTQ0LCA3MDQsIDY2NywgOTE3LCA2MTQsIDcxNSwgNzE1LCA1ODksIDY4NiwgODMzLCA3MjIsIDc3OCwgNzI1LCA2NjcsIDcyMiwgNjExLCA2MzksIDc5NSwgNjY3LCA3MjcsIDY3MywgOTIwLCA5MjMsIDgwNSwgODg2LCA2NTEsIDY5NCwgMTAyMiwgNjgyLCA1NTYsIDU2MiwgNTIyLCA0OTMsIDU1MywgNTU2LCA2ODgsIDQ2NSwgNTU2LCA1NTYsIDQ3MiwgNTY0LCA2ODYsIDU1MCwgNTU2LCA1NTYsIDU1NiwgNTAwLCA4MzMsIDUwMCwgODM1LCA1MDAsIDU3MiwgNTE4LCA4MzAsIDg1MSwgNjIxLCA3MzYsIDUyNiwgNDkyLCA3NTIsIDUzNCwgNTU2LCA1NTYsIDU1NiwgMzc4LCA0OTYsIDUwMCwgMjIyLCAyMjIsIDIyMiwgOTEwLCA4MjgsIDU1NiwgNDcyLCA1NjUsIDUwMCwgNTU2LCA3NzgsIDU1NiwgNDkyLCAzMzksIDk0NCwgNzIyLCA5NDQsIDcyMiwgOTQ0LCA3MjIsIDY2NywgNTAwLCAzMzMsIDMzMywgNTU2LCAxMDAwLCAxMDAwLCA1NTIsIDIyMiwgMjIyLCAyMjIsIDIyMiwgMzMzLCAzMzMsIDMzMywgNTU2LCA1NTYsIDM1MCwgMTAwMCwgMTAwMCwgMTg4LCAzNTQsIDMzMywgMzMzLCA1MDAsIDMzMywgMTY3LCAzNjUsIDU1NiwgNTU2LCAxMDk0LCA1NTYsIDg4NSwgMzIzLCAxMDgzLCAxMDAwLCA3NjgsIDYwMCwgODM0LCA4MzQsIDgzNCwgODM0LCAxMDAwLCA1MDAsIDk5OCwgNTAwLCAxMDAwLCA1MDAsIDUwMCwgNDk0LCA2MTIsIDgyMywgNzEzLCA1ODQsIDU0OSwgNzEzLCA5NzksIDcxOSwgMjc0LCA1NDksIDU0OSwgNTg0LCA1NDksIDU0OSwgNjA0LCA1ODQsIDYwNCwgNjA0LCA3MDgsIDYyNSwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzI5LCA2MDQsIDYwNCwgMzU0LCAzNTQsIDEwMDAsIDk5MCwgOTkwLCA5OTAsIDk5MCwgNDk0LCA2MDQsIDYwNCwgNjA0LCA2MDQsIDM1NCwgMTAyMSwgMTA1MiwgOTE3LCA3NTAsIDc1MCwgNTMxLCA2NTYsIDU5NCwgNTEwLCA1MDAsIDc1MCwgNzUwLCA1MDAsIDUwMCwgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDIyMiwgMjIyLCAyOTQsIDI5NCwgMzI0LCAzMjQsIDMxNiwgMzI4LCAzOTgsIDI4NV07CmNvbnN0IExpYmVyYXRpb25TYW5zSXRhbGljTWFwcGluZyA9IFstMSwgLTEsIC0xLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCA2NSwgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODEsIDgyLCA4MywgODQsIDg1LCA4NiwgODcsIDg4LCA4OSwgOTAsIDkxLCA5MiwgOTMsIDk0LCA5NSwgOTYsIDk3LCA5OCwgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsIDExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDE2MSwgMTYyLCAxNjMsIDE2NCwgMTY1LCAxNjYsIDE2NywgMTY4LCAxNjksIDE3MCwgMTcxLCAxNzIsIDE3NCwgMTc1LCAxNzYsIDE3NywgMTc4LCAxNzksIDE4MCwgMTgxLCAxODIsIDE4MywgMTg0LCAxODUsIDE4NiwgMTg3LCAxODgsIDE4OSwgMTkwLCAxOTEsIDE5MiwgMTkzLCAxOTQsIDE5NSwgMTk2LCAxOTcsIDE5OCwgMTk5LCAyMDAsIDIwMSwgMjAyLCAyMDMsIDIwNCwgMjA1LCAyMDYsIDIwNywgMjA4LCAyMDksIDIxMCwgMjExLCAyMTIsIDIxMywgMjE0LCAyMTUsIDIxNiwgMjE3LCAyMTgsIDIxOSwgMjIwLCAyMjEsIDIyMiwgMjIzLCAyMjQsIDIyNSwgMjI2LCAyMjcsIDIyOCwgMjI5LCAyMzAsIDIzMSwgMjMyLCAyMzMsIDIzNCwgMjM1LCAyMzYsIDIzNywgMjM4LCAyMzksIDI0MCwgMjQxLCAyNDIsIDI0MywgMjQ0LCAyNDUsIDI0NiwgMjQ3LCAyNDgsIDI0OSwgMjUwLCAyNTEsIDI1MiwgMjUzLCAyNTQsIDI1NSwgMjU2LCAyNTcsIDI1OCwgMjU5LCAyNjAsIDI2MSwgMjYyLCAyNjMsIDI2NCwgMjY1LCAyNjYsIDI2NywgMjY4LCAyNjksIDI3MCwgMjcxLCAyNzIsIDI3MywgMjc0LCAyNzUsIDI3NiwgMjc3LCAyNzgsIDI3OSwgMjgwLCAyODEsIDI4MiwgMjgzLCAyODQsIDI4NSwgMjg2LCAyODcsIDI4OCwgMjg5LCAyOTAsIDI5MSwgMjkyLCAyOTMsIDI5NCwgMjk1LCAyOTYsIDI5NywgMjk4LCAyOTksIDMwMCwgMzAxLCAzMDIsIDMwMywgMzA0LCAzMDUsIDMwNiwgMzA3LCAzMDgsIDMwOSwgMzEwLCAzMTEsIDMxMiwgMzEzLCAzMTQsIDMxNSwgMzE2LCAzMTcsIDMxOCwgMzE5LCAzMjAsIDMyMSwgMzIyLCAzMjMsIDMyNCwgMzI1LCAzMjYsIDMyNywgMzI4LCAzMjksIDMzMCwgMzMxLCAzMzIsIDMzMywgMzM0LCAzMzUsIDMzNiwgMzM3LCAzMzgsIDMzOSwgMzQwLCAzNDEsIDM0MiwgMzQzLCAzNDQsIDM0NSwgMzQ2LCAzNDcsIDM0OCwgMzQ5LCAzNTAsIDM1MSwgMzUyLCAzNTMsIDM1NCwgMzU1LCAzNTYsIDM1NywgMzU4LCAzNTksIDM2MCwgMzYxLCAzNjIsIDM2MywgMzY0LCAzNjUsIDM2NiwgMzY3LCAzNjgsIDM2OSwgMzcwLCAzNzEsIDM3MiwgMzczLCAzNzQsIDM3NSwgMzc2LCAzNzcsIDM3OCwgMzc5LCAzODAsIDM4MSwgMzgyLCAzODMsIDQwMiwgNTA2LCA1MDcsIDUwOCwgNTA5LCA1MTAsIDUxMSwgNTM2LCA1MzcsIDUzOCwgNTM5LCA3MTAsIDcxMSwgNzEzLCA3MjgsIDcyOSwgNzMwLCA3MzEsIDczMiwgNzMzLCA5MDAsIDkwMSwgOTAyLCA5MDMsIDkwNCwgOTA1LCA5MDYsIDkwOCwgOTEwLCA5MTEsIDkxMiwgOTEzLCA5MTQsIDkxNSwgOTE2LCA5MTcsIDkxOCwgOTE5LCA5MjAsIDkyMSwgOTIyLCA5MjMsIDkyNCwgOTI1LCA5MjYsIDkyNywgOTI4LCA5MjksIDkzMSwgOTMyLCA5MzMsIDkzNCwgOTM1LCA5MzYsIDkzNywgOTM4LCA5MzksIDk0MCwgOTQxLCA5NDIsIDk0MywgOTQ0LCA5NDUsIDk0NiwgOTQ3LCA5NDgsIDk0OSwgOTUwLCA5NTEsIDk1MiwgOTUzLCA5NTQsIDk1NSwgOTU2LCA5NTcsIDk1OCwgOTU5LCA5NjAsIDk2MSwgOTYyLCA5NjMsIDk2NCwgOTY1LCA5NjYsIDk2NywgOTY4LCA5NjksIDk3MCwgOTcxLCA5NzIsIDk3MywgOTc0LCAxMDI0LCAxMDI1LCAxMDI2LCAxMDI3LCAxMDI4LCAxMDI5LCAxMDMwLCAxMDMxLCAxMDMyLCAxMDMzLCAxMDM0LCAxMDM1LCAxMDM2LCAxMDM3LCAxMDM4LCAxMDM5LCAxMDQwLCAxMDQxLCAxMDQyLCAxMDQzLCAxMDQ0LCAxMDQ1LCAxMDQ2LCAxMDQ3LCAxMDQ4LCAxMDQ5LCAxMDUwLCAxMDUxLCAxMDUyLCAxMDUzLCAxMDU0LCAxMDU1LCAxMDU2LCAxMDU3LCAxMDU4LCAxMDU5LCAxMDYwLCAxMDYxLCAxMDYyLCAxMDYzLCAxMDY0LCAxMDY1LCAxMDY2LCAxMDY3LCAxMDY4LCAxMDY5LCAxMDcwLCAxMDcxLCAxMDcyLCAxMDczLCAxMDc0LCAxMDc1LCAxMDc2LCAxMDc3LCAxMDc4LCAxMDc5LCAxMDgwLCAxMDgxLCAxMDgyLCAxMDgzLCAxMDg0LCAxMDg1LCAxMDg2LCAxMDg3LCAxMDg4LCAxMDg5LCAxMDkwLCAxMDkxLCAxMDkyLCAxMDkzLCAxMDk0LCAxMDk1LCAxMDk2LCAxMDk3LCAxMDk4LCAxMDk5LCAxMTAwLCAxMTAxLCAxMTAyLCAxMTAzLCAxMTA0LCAxMTA1LCAxMTA2LCAxMTA3LCAxMTA4LCAxMTA5LCAxMTEwLCAxMTExLCAxMTEyLCAxMTEzLCAxMTE0LCAxMTE1LCAxMTE2LCAxMTE3LCAxMTE4LCAxMTE5LCAxMTM4LCAxMTM5LCAxMTY4LCAxMTY5LCA3ODA4LCA3ODA5LCA3ODEwLCA3ODExLCA3ODEyLCA3ODEzLCA3OTIyLCA3OTIzLCA4MjA4LCA4MjA5LCA4MjExLCA4MjEyLCA4MjEzLCA4MjE1LCA4MjE2LCA4MjE3LCA4MjE4LCA4MjE5LCA4MjIwLCA4MjIxLCA4MjIyLCA4MjI0LCA4MjI1LCA4MjI2LCA4MjMwLCA4MjQwLCA4MjQyLCA4MjQzLCA4MjQ5LCA4MjUwLCA4MjUyLCA4MjU0LCA4MjYwLCA4MzE5LCA4MzU1LCA4MzU2LCA4MzU5LCA4MzY0LCA4NDUzLCA4NDY3LCA4NDcwLCA4NDgyLCA4NDg2LCA4NDk0LCA4NTM5LCA4NTQwLCA4NTQxLCA4NTQyLCA4NTkyLCA4NTkzLCA4NTk0LCA4NTk1LCA4NTk2LCA4NTk3LCA4NjE2LCA4NzA2LCA4NzEwLCA4NzE5LCA4NzIxLCA4NzIyLCA4NzMwLCA4NzM0LCA4NzM1LCA4NzQ1LCA4NzQ3LCA4Nzc2LCA4ODAwLCA4ODAxLCA4ODA0LCA4ODA1LCA4OTYyLCA4OTc2LCA4OTkyLCA4OTkzLCA5NDcyLCA5NDc0LCA5NDg0LCA5NDg4LCA5NDkyLCA5NDk2LCA5NTAwLCA5NTA4LCA5NTE2LCA5NTI0LCA5NTMyLCA5NTUyLCA5NTUzLCA5NTU0LCA5NTU1LCA5NTU2LCA5NTU3LCA5NTU4LCA5NTU5LCA5NTYwLCA5NTYxLCA5NTYyLCA5NTYzLCA5NTY0LCA5NTY1LCA5NTY2LCA5NTY3LCA5NTY4LCA5NTY5LCA5NTcwLCA5NTcxLCA5NTcyLCA5NTczLCA5NTc0LCA5NTc1LCA5NTc2LCA5NTc3LCA5NTc4LCA5NTc5LCA5NTgwLCA5NjAwLCA5NjA0LCA5NjA4LCA5NjEyLCA5NjE2LCA5NjE3LCA5NjE4LCA5NjE5LCA5NjMyLCA5NjMzLCA5NjQyLCA5NjQzLCA5NjQ0LCA5NjUwLCA5NjU4LCA5NjYwLCA5NjY4LCA5Njc0LCA5Njc1LCA5Njc5LCA5Njg4LCA5Njg5LCA5NzAyLCA5Nzg2LCA5Nzg3LCA5Nzg4LCA5NzkyLCA5Nzk0LCA5ODI0LCA5ODI3LCA5ODI5LCA5ODMwLCA5ODM0LCA5ODM1LCA5ODM2LCA2MTQ0MSwgNjE0NDIsIDYxNDQ1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTFdOwpjb25zdCBMaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHMgPSBbMzY1LCAwLCAzMzMsIDI3OCwgMjc4LCAzNTUsIDU1NiwgNTU2LCA4ODksIDY2NywgMTkxLCAzMzMsIDMzMywgMzg5LCA1ODQsIDI3OCwgMzMzLCAyNzgsIDI3OCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyNzgsIDI3OCwgNTg0LCA1ODQsIDU4NCwgNTU2LCAxMDE1LCA2NjcsIDY2NywgNzIyLCA3MjIsIDY2NywgNjExLCA3NzgsIDcyMiwgMjc4LCA1MDAsIDY2NywgNTU2LCA4MzMsIDcyMiwgNzc4LCA2NjcsIDc3OCwgNzIyLCA2NjcsIDYxMSwgNzIyLCA2NjcsIDk0NCwgNjY3LCA2NjcsIDYxMSwgMjc4LCAyNzgsIDI3OCwgNDY5LCA1NTYsIDMzMywgNTU2LCA1NTYsIDUwMCwgNTU2LCA1NTYsIDI3OCwgNTU2LCA1NTYsIDIyMiwgMjIyLCA1MDAsIDIyMiwgODMzLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDMzMywgNTAwLCAyNzgsIDU1NiwgNTAwLCA3MjIsIDUwMCwgNTAwLCA1MDAsIDMzNCwgMjYwLCAzMzQsIDU4NCwgMzMzLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI2MCwgNTU2LCAzMzMsIDczNywgMzcwLCA1NTYsIDU4NCwgNzM3LCA1NTIsIDQwMCwgNTQ5LCAzMzMsIDMzMywgMzMzLCA1NzYsIDUzNywgMjc4LCAzMzMsIDMzMywgMzY1LCA1NTYsIDgzNCwgODM0LCA4MzQsIDYxMSwgNjY3LCA2NjcsIDY2NywgNjY3LCA2NjcsIDY2NywgMTAwMCwgNzIyLCA2NjcsIDY2NywgNjY3LCA2NjcsIDI3OCwgMjc4LCAyNzgsIDI3OCwgNzIyLCA3MjIsIDc3OCwgNzc4LCA3NzgsIDc3OCwgNzc4LCA1ODQsIDc3OCwgNzIyLCA3MjIsIDcyMiwgNzIyLCA2NjcsIDY2NywgNjExLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA4ODksIDUwMCwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTQ5LCA2MTEsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTAwLCA1NTYsIDUwMCwgNjY3LCA1NTYsIDY2NywgNTU2LCA2NjcsIDU1NiwgNzIyLCA1MDAsIDcyMiwgNTAwLCA3MjIsIDUwMCwgNzIyLCA1MDAsIDcyMiwgNjE1LCA3MjIsIDU1NiwgNjY3LCA1NTYsIDY2NywgNTU2LCA2NjcsIDU1NiwgNjY3LCA1NTYsIDY2NywgNTU2LCA3NzgsIDU1NiwgNzc4LCA1NTYsIDc3OCwgNTU2LCA3NzgsIDU1NiwgNzIyLCA1NTYsIDcyMiwgNTU2LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDIyMiwgMjc4LCAyNzgsIDczNSwgNDQ0LCA1MDAsIDIyMiwgNjY3LCA1MDAsIDUwMCwgNTU2LCAyMjIsIDU1NiwgMjIyLCA1NTYsIDI5MiwgNTU2LCAzMzQsIDU1NiwgMjIyLCA3MjIsIDU1NiwgNzIyLCA1NTYsIDcyMiwgNTU2LCA2MDQsIDcyMywgNTU2LCA3NzgsIDU1NiwgNzc4LCA1NTYsIDc3OCwgNTU2LCAxMDAwLCA5NDQsIDcyMiwgMzMzLCA3MjIsIDMzMywgNzIyLCAzMzMsIDY2NywgNTAwLCA2NjcsIDUwMCwgNjY3LCA1MDAsIDY2NywgNTAwLCA2MTEsIDI3OCwgNjExLCAzNzUsIDYxMSwgMjc4LCA3MjIsIDU1NiwgNzIyLCA1NTYsIDcyMiwgNTU2LCA3MjIsIDU1NiwgNzIyLCA1NTYsIDcyMiwgNTU2LCA5NDQsIDcyMiwgNjY3LCA1MDAsIDY2NywgNjExLCA1MDAsIDYxMSwgNTAwLCA2MTEsIDUwMCwgMjIyLCA1NTYsIDY2NywgNTU2LCAxMDAwLCA4ODksIDc3OCwgNjExLCA2NjcsIDUwMCwgNjExLCAyNzgsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCA2NjcsIDI3OCwgNzg0LCA4MzgsIDM4NCwgNzc0LCA4NTUsIDc1MiwgMjIyLCA2NjcsIDY2NywgNTUxLCA2NjgsIDY2NywgNjExLCA3MjIsIDc3OCwgMjc4LCA2NjcsIDY2OCwgODMzLCA3MjIsIDY1MCwgNzc4LCA3MjIsIDY2NywgNjE4LCA2MTEsIDY2NywgNzk4LCA2NjcsIDgzNSwgNzQ4LCAyNzgsIDY2NywgNTc4LCA0NDYsIDU1NiwgMjIyLCA1NDcsIDU3OCwgNTc1LCA1MDAsIDU1NywgNDQ2LCA0NDEsIDU1NiwgNTU2LCAyMjIsIDUwMCwgNTAwLCA1NzYsIDUwMCwgNDQ4LCA1NTYsIDY5MCwgNTY5LCA0ODIsIDYxNywgMzk1LCA1NDcsIDY0OCwgNTI1LCA3MTMsIDc4MSwgMjIyLCA1NDcsIDU1NiwgNTQ3LCA3ODEsIDY2NywgNjY3LCA4NjUsIDU0MiwgNzE5LCA2NjcsIDI3OCwgMjc4LCA1MDAsIDEwNTcsIDEwMTAsIDg1NCwgNTgzLCA3MjIsIDYzNSwgNzE5LCA2NjcsIDY1NiwgNjY3LCA1NDIsIDY3NywgNjY3LCA5MjMsIDYwNCwgNzE5LCA3MTksIDU4MywgNjU2LCA4MzMsIDcyMiwgNzc4LCA3MTksIDY2NywgNzIyLCA2MTEsIDYzNSwgNzYwLCA2NjcsIDc0MCwgNjY3LCA5MTcsIDkzOCwgNzkyLCA4ODUsIDY1NiwgNzE5LCAxMDEwLCA3MjIsIDU1NiwgNTczLCA1MzEsIDM2NSwgNTgzLCA1NTYsIDY2OSwgNDU4LCA1NTksIDU1OSwgNDM4LCA1ODMsIDY4OCwgNTUyLCA1NTYsIDU0MiwgNTU2LCA1MDAsIDQ1OCwgNTAwLCA4MjMsIDUwMCwgNTczLCA1MjEsIDgwMiwgODIzLCA2MjUsIDcxOSwgNTIxLCA1MTAsIDc1MCwgNTQyLCA1NTYsIDU1NiwgNTU2LCAzNjUsIDUxMCwgNTAwLCAyMjIsIDI3OCwgMjIyLCA5MDYsIDgxMiwgNTU2LCA0MzgsIDU1OSwgNTAwLCA1NTIsIDc3OCwgNTU2LCA0ODksIDQxMSwgOTQ0LCA3MjIsIDk0NCwgNzIyLCA5NDQsIDcyMiwgNjY3LCA1MDAsIDMzMywgMzMzLCA1NTYsIDEwMDAsIDEwMDAsIDU1MiwgMjIyLCAyMjIsIDIyMiwgMjIyLCAzMzMsIDMzMywgMzMzLCA1NTYsIDU1NiwgMzUwLCAxMDAwLCAxMDAwLCAxODgsIDM1NCwgMzMzLCAzMzMsIDUwMCwgMzMzLCAxNjcsIDM2NSwgNTU2LCA1NTYsIDEwOTQsIDU1NiwgODg1LCAzMjMsIDEwNzMsIDEwMDAsIDc2OCwgNjAwLCA4MzQsIDgzNCwgODM0LCA4MzQsIDEwMDAsIDUwMCwgMTAwMCwgNTAwLCAxMDAwLCA1MDAsIDUwMCwgNDk0LCA2MTIsIDgyMywgNzEzLCA1ODQsIDU0OSwgNzEzLCA5NzksIDcxOSwgMjc0LCA1NDksIDU0OSwgNTgzLCA1NDksIDU0OSwgNjA0LCA1ODQsIDYwNCwgNjA0LCA3MDgsIDYyNSwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzI5LCA2MDQsIDYwNCwgMzU0LCAzNTQsIDEwMDAsIDk5MCwgOTkwLCA5OTAsIDk5MCwgNDk0LCA2MDQsIDYwNCwgNjA0LCA2MDQsIDM1NCwgMTAyMSwgMTA1MiwgOTE3LCA3NTAsIDc1MCwgNTMxLCA2NTYsIDU5NCwgNTEwLCA1MDAsIDc1MCwgNzUwLCA1MDAsIDUwMCwgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDIyMiwgMjIyLCAyOTQsIDI5NCwgMzI0LCAzMjQsIDMxNiwgMzI4LCAzOTgsIDI4NV07CmNvbnN0IExpYmVyYXRpb25TYW5zUmVndWxhck1hcHBpbmcgPSBbLTEsIC0xLCAtMSwgMzIsIDMzLCAzNCwgMzUsIDM2LCAzNywgMzgsIDM5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwgNjUsIDY2LCA2NywgNjgsIDY5LCA3MCwgNzEsIDcyLCA3MywgNzQsIDc1LCA3NiwgNzcsIDc4LCA3OSwgODAsIDgxLCA4MiwgODMsIDg0LCA4NSwgODYsIDg3LCA4OCwgODksIDkwLCA5MSwgOTIsIDkzLCA5NCwgOTUsIDk2LCA5NywgOTgsIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLCAxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxNjEsIDE2MiwgMTYzLCAxNjQsIDE2NSwgMTY2LCAxNjcsIDE2OCwgMTY5LCAxNzAsIDE3MSwgMTcyLCAxNzQsIDE3NSwgMTc2LCAxNzcsIDE3OCwgMTc5LCAxODAsIDE4MSwgMTgyLCAxODMsIDE4NCwgMTg1LCAxODYsIDE4NywgMTg4LCAxODksIDE5MCwgMTkxLCAxOTIsIDE5MywgMTk0LCAxOTUsIDE5NiwgMTk3LCAxOTgsIDE5OSwgMjAwLCAyMDEsIDIwMiwgMjAzLCAyMDQsIDIwNSwgMjA2LCAyMDcsIDIwOCwgMjA5LCAyMTAsIDIxMSwgMjEyLCAyMTMsIDIxNCwgMjE1LCAyMTYsIDIxNywgMjE4LCAyMTksIDIyMCwgMjIxLCAyMjIsIDIyMywgMjI0LCAyMjUsIDIyNiwgMjI3LCAyMjgsIDIyOSwgMjMwLCAyMzEsIDIzMiwgMjMzLCAyMzQsIDIzNSwgMjM2LCAyMzcsIDIzOCwgMjM5LCAyNDAsIDI0MSwgMjQyLCAyNDMsIDI0NCwgMjQ1LCAyNDYsIDI0NywgMjQ4LCAyNDksIDI1MCwgMjUxLCAyNTIsIDI1MywgMjU0LCAyNTUsIDI1NiwgMjU3LCAyNTgsIDI1OSwgMjYwLCAyNjEsIDI2MiwgMjYzLCAyNjQsIDI2NSwgMjY2LCAyNjcsIDI2OCwgMjY5LCAyNzAsIDI3MSwgMjcyLCAyNzMsIDI3NCwgMjc1LCAyNzYsIDI3NywgMjc4LCAyNzksIDI4MCwgMjgxLCAyODIsIDI4MywgMjg0LCAyODUsIDI4NiwgMjg3LCAyODgsIDI4OSwgMjkwLCAyOTEsIDI5MiwgMjkzLCAyOTQsIDI5NSwgMjk2LCAyOTcsIDI5OCwgMjk5LCAzMDAsIDMwMSwgMzAyLCAzMDMsIDMwNCwgMzA1LCAzMDYsIDMwNywgMzA4LCAzMDksIDMxMCwgMzExLCAzMTIsIDMxMywgMzE0LCAzMTUsIDMxNiwgMzE3LCAzMTgsIDMxOSwgMzIwLCAzMjEsIDMyMiwgMzIzLCAzMjQsIDMyNSwgMzI2LCAzMjcsIDMyOCwgMzI5LCAzMzAsIDMzMSwgMzMyLCAzMzMsIDMzNCwgMzM1LCAzMzYsIDMzNywgMzM4LCAzMzksIDM0MCwgMzQxLCAzNDIsIDM0MywgMzQ0LCAzNDUsIDM0NiwgMzQ3LCAzNDgsIDM0OSwgMzUwLCAzNTEsIDM1MiwgMzUzLCAzNTQsIDM1NSwgMzU2LCAzNTcsIDM1OCwgMzU5LCAzNjAsIDM2MSwgMzYyLCAzNjMsIDM2NCwgMzY1LCAzNjYsIDM2NywgMzY4LCAzNjksIDM3MCwgMzcxLCAzNzIsIDM3MywgMzc0LCAzNzUsIDM3NiwgMzc3LCAzNzgsIDM3OSwgMzgwLCAzODEsIDM4MiwgMzgzLCA0MDIsIDUwNiwgNTA3LCA1MDgsIDUwOSwgNTEwLCA1MTEsIDUzNiwgNTM3LCA1MzgsIDUzOSwgNzEwLCA3MTEsIDcxMywgNzI4LCA3MjksIDczMCwgNzMxLCA3MzIsIDczMywgOTAwLCA5MDEsIDkwMiwgOTAzLCA5MDQsIDkwNSwgOTA2LCA5MDgsIDkxMCwgOTExLCA5MTIsIDkxMywgOTE0LCA5MTUsIDkxNiwgOTE3LCA5MTgsIDkxOSwgOTIwLCA5MjEsIDkyMiwgOTIzLCA5MjQsIDkyNSwgOTI2LCA5MjcsIDkyOCwgOTI5LCA5MzEsIDkzMiwgOTMzLCA5MzQsIDkzNSwgOTM2LCA5MzcsIDkzOCwgOTM5LCA5NDAsIDk0MSwgOTQyLCA5NDMsIDk0NCwgOTQ1LCA5NDYsIDk0NywgOTQ4LCA5NDksIDk1MCwgOTUxLCA5NTIsIDk1MywgOTU0LCA5NTUsIDk1NiwgOTU3LCA5NTgsIDk1OSwgOTYwLCA5NjEsIDk2MiwgOTYzLCA5NjQsIDk2NSwgOTY2LCA5NjcsIDk2OCwgOTY5LCA5NzAsIDk3MSwgOTcyLCA5NzMsIDk3NCwgMTAyNCwgMTAyNSwgMTAyNiwgMTAyNywgMTAyOCwgMTAyOSwgMTAzMCwgMTAzMSwgMTAzMiwgMTAzMywgMTAzNCwgMTAzNSwgMTAzNiwgMTAzNywgMTAzOCwgMTAzOSwgMTA0MCwgMTA0MSwgMTA0MiwgMTA0MywgMTA0NCwgMTA0NSwgMTA0NiwgMTA0NywgMTA0OCwgMTA0OSwgMTA1MCwgMTA1MSwgMTA1MiwgMTA1MywgMTA1NCwgMTA1NSwgMTA1NiwgMTA1NywgMTA1OCwgMTA1OSwgMTA2MCwgMTA2MSwgMTA2MiwgMTA2MywgMTA2NCwgMTA2NSwgMTA2NiwgMTA2NywgMTA2OCwgMTA2OSwgMTA3MCwgMTA3MSwgMTA3MiwgMTA3MywgMTA3NCwgMTA3NSwgMTA3NiwgMTA3NywgMTA3OCwgMTA3OSwgMTA4MCwgMTA4MSwgMTA4MiwgMTA4MywgMTA4NCwgMTA4NSwgMTA4NiwgMTA4NywgMTA4OCwgMTA4OSwgMTA5MCwgMTA5MSwgMTA5MiwgMTA5MywgMTA5NCwgMTA5NSwgMTA5NiwgMTA5NywgMTA5OCwgMTA5OSwgMTEwMCwgMTEwMSwgMTEwMiwgMTEwMywgMTEwNCwgMTEwNSwgMTEwNiwgMTEwNywgMTEwOCwgMTEwOSwgMTExMCwgMTExMSwgMTExMiwgMTExMywgMTExNCwgMTExNSwgMTExNiwgMTExNywgMTExOCwgMTExOSwgMTEzOCwgMTEzOSwgMTE2OCwgMTE2OSwgNzgwOCwgNzgwOSwgNzgxMCwgNzgxMSwgNzgxMiwgNzgxMywgNzkyMiwgNzkyMywgODIwOCwgODIwOSwgODIxMSwgODIxMiwgODIxMywgODIxNSwgODIxNiwgODIxNywgODIxOCwgODIxOSwgODIyMCwgODIyMSwgODIyMiwgODIyNCwgODIyNSwgODIyNiwgODIzMCwgODI0MCwgODI0MiwgODI0MywgODI0OSwgODI1MCwgODI1MiwgODI1NCwgODI2MCwgODMxOSwgODM1NSwgODM1NiwgODM1OSwgODM2NCwgODQ1MywgODQ2NywgODQ3MCwgODQ4MiwgODQ4NiwgODQ5NCwgODUzOSwgODU0MCwgODU0MSwgODU0MiwgODU5MiwgODU5MywgODU5NCwgODU5NSwgODU5NiwgODU5NywgODYxNiwgODcwNiwgODcxMCwgODcxOSwgODcyMSwgODcyMiwgODczMCwgODczNCwgODczNSwgODc0NSwgODc0NywgODc3NiwgODgwMCwgODgwMSwgODgwNCwgODgwNSwgODk2MiwgODk3NiwgODk5MiwgODk5MywgOTQ3MiwgOTQ3NCwgOTQ4NCwgOTQ4OCwgOTQ5MiwgOTQ5NiwgOTUwMCwgOTUwOCwgOTUxNiwgOTUyNCwgOTUzMiwgOTU1MiwgOTU1MywgOTU1NCwgOTU1NSwgOTU1NiwgOTU1NywgOTU1OCwgOTU1OSwgOTU2MCwgOTU2MSwgOTU2MiwgOTU2MywgOTU2NCwgOTU2NSwgOTU2NiwgOTU2NywgOTU2OCwgOTU2OSwgOTU3MCwgOTU3MSwgOTU3MiwgOTU3MywgOTU3NCwgOTU3NSwgOTU3NiwgOTU3NywgOTU3OCwgOTU3OSwgOTU4MCwgOTYwMCwgOTYwNCwgOTYwOCwgOTYxMiwgOTYxNiwgOTYxNywgOTYxOCwgOTYxOSwgOTYzMiwgOTYzMywgOTY0MiwgOTY0MywgOTY0NCwgOTY1MCwgOTY1OCwgOTY2MCwgOTY2OCwgOTY3NCwgOTY3NSwgOTY3OSwgOTY4OCwgOTY4OSwgOTcwMiwgOTc4NiwgOTc4NywgOTc4OCwgOTc5MiwgOTc5NCwgOTgyNCwgOTgyNywgOTgyOSwgOTgzMCwgOTgzNCwgOTgzNSwgOTgzNiwgNjE0NDEsIDYxNDQyLCA2MTQ0NSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xXTsKCjsvLyAuL3NyYy9jb3JlL215cmlhZHByb19mYWN0b3JzLmpzCmNvbnN0IE15cmlhZFByb0JvbGRGYWN0b3JzID0gWzEuMzY4OTgsIDEsIDEsIDAuNzI3MDYsIDAuODA0NzksIDAuODM3MzQsIDAuOTg4OTQsIDAuOTk3OTMsIDAuOTg5NywgMC45Mzg4NCwgMC44NjIwOSwgMC45NDI5MiwgMC45NDI5MiwgMS4xNjY2MSwgMS4wMjA1OCwgMC45MzU4MiwgMC45NjY5NCwgMC45MzU4MiwgMS4xOTEzNywgMC45OTc5MywgMC45OTc5MywgMC45OTc5MywgMC45OTc5MywgMC45OTc5MywgMC45OTc5MywgMC45OTc5MywgMC45OTc5MywgMC45OTc5MywgMC45OTc5MywgMC43ODA3NiwgMC43ODA3NiwgMS4wMjA1OCwgMS4wMjA1OCwgMS4wMjA1OCwgMC43Mjg1MSwgMC43ODk2NiwgMC45MDgzOCwgMC44MzYzNywgMC44MjM5MSwgMC45NjM3NiwgMC44MDA2MSwgMC44NjI3NSwgMC44NzY4LCAwLjk1NDA3LCAxLjAyNTgsIDAuNzM5MDEsIDAuODUwMjIsIDAuODM2NTUsIDEuMDE1NiwgMC45NTU0NiwgMC45MjE3OSwgMC44NzEwNywgMC45MjE3OSwgMC44MjExNCwgMC44MDk2LCAwLjg5NzEzLCAwLjk0NDM4LCAwLjk1MzUzLCAwLjk0MDgzLCAwLjkxOTA1LCAwLjkwNDA2LCAwLjk0NDYsIDAuOTQyOTIsIDEuMTg3NzcsIDAuOTQyOTIsIDEuMDIwNTgsIDAuODk5MDMsIDAuOTAwODgsIDAuOTQ5MzgsIDAuOTc4OTgsIDAuODEwOTMsIDAuOTc1NzEsIDAuOTQ5MzgsIDEuMDI0LCAwLjk1NzcsIDAuOTU5MzMsIDAuOTg2MjEsIDEuMDQ3NCwgMC45NzQ1NSwgMC45ODk4MSwgMC45NjcyLCAwLjk1OTMzLCAwLjk0NDYsIDAuOTc4OTgsIDAuOTc0MDcsIDAuOTc2NDYsIDAuNzgwMzYsIDEuMTAyMDgsIDAuOTU0NDIsIDAuOTUyOTgsIDAuOTc1NzksIDAuOTMzMiwgMC45NDAzOSwgMC45MzgsIDAuODA2ODcsIDEuMDExNDksIDAuODA2ODcsIDEuMDIwNTgsIDAuODA0NzksIDAuOTk3OTMsIDAuOTk3OTMsIDAuOTk3OTMsIDAuOTk3OTMsIDEuMDExNDksIDEuMDA4NzIsIDAuOTAwODgsIDAuOTE4ODIsIDEuMDIxMywgMC44MzYxLCAxLjAyMDU4LCAwLjYyMjk1LCAwLjU0MzI0LCAwLjg5MDIyLCAxLjA4NTk1LCAxLCAxLCAwLjkwMDg4LCAxLCAwLjk3NDU1LCAwLjkzNTgyLCAwLjkwMDg4LCAxLCAxLjA1Njg2LCAwLjgzNjEsIDAuOTk2NDIsIDAuOTk2NDIsIDAuOTk2NDIsIDAuNzI4NTEsIDAuOTA4MzgsIDAuOTA4MzgsIDAuOTA4MzgsIDAuOTA4MzgsIDAuOTA4MzgsIDAuOTA4MzgsIDAuODY4LCAwLjgyMzkxLCAwLjgwMDYxLCAwLjgwMDYxLCAwLjgwMDYxLCAwLjgwMDYxLCAxLjAyNTgsIDEuMDI1OCwgMS4wMjU4LCAxLjAyNTgsIDAuOTc0ODQsIDAuOTU1NDYsIDAuOTIxNzksIDAuOTIxNzksIDAuOTIxNzksIDAuOTIxNzksIDAuOTIxNzksIDEuMDIwNTgsIDAuOTIxNzksIDAuOTQ0MzgsIDAuOTQ0MzgsIDAuOTQ0MzgsIDAuOTQ0MzgsIDAuOTA0MDYsIDAuODY5NTgsIDAuOTgyMjUsIDAuOTQ5MzgsIDAuOTQ5MzgsIDAuOTQ5MzgsIDAuOTQ5MzgsIDAuOTQ5MzgsIDAuOTQ5MzgsIDAuOTAzMSwgMC44MTA5MywgMC45NDkzOCwgMC45NDkzOCwgMC45NDkzOCwgMC45NDkzOCwgMC45ODYyMSwgMC45ODYyMSwgMC45ODYyMSwgMC45ODYyMSwgMC45Mzk2OSwgMC45NTkzMywgMC45NDQ2LCAwLjk0NDYsIDAuOTQ0NiwgMC45NDQ2LCAwLjk0NDYsIDEuMDg1OTUsIDAuOTQ0NiwgMC45NTQ0MiwgMC45NTQ0MiwgMC45NTQ0MiwgMC45NTQ0MiwgMC45NDAzOSwgMC45Nzg5OCwgMC45NDAzOSwgMC45MDgzOCwgMC45NDkzOCwgMC45MDgzOCwgMC45NDkzOCwgMC45MDgzOCwgMC45NDkzOCwgMC44MjM5MSwgMC44MTA5MywgMC44MjM5MSwgMC44MTA5MywgMC44MjM5MSwgMC44MTA5MywgMC44MjM5MSwgMC44MTA5MywgMC45NjM3NiwgMC44NDMxMywgMC45NzQ4NCwgMC45NzU3MSwgMC44MDA2MSwgMC45NDkzOCwgMC44MDA2MSwgMC45NDkzOCwgMC44MDA2MSwgMC45NDkzOCwgMC44MDA2MSwgMC45NDkzOCwgMC44MDA2MSwgMC45NDkzOCwgMC44NzY4LCAwLjk1NzcsIDAuODc2OCwgMC45NTc3LCAwLjg3NjgsIDAuOTU3NywgMSwgMSwgMC45NTQwNywgMC45NTkzMywgMC45NzA2OSwgMC45NTkzMywgMS4wMjU4LCAwLjk4NjIxLCAxLjAyNTgsIDAuOTg2MjEsIDEuMDI1OCwgMC45ODYyMSwgMS4wMjU4LCAwLjk4NjIxLCAxLjAyNTgsIDAuOTg2MjEsIDAuODg3LCAxLjAxNTkxLCAwLjczOTAxLCAxLjA0NzQsIDEsIDEsIDAuOTc0NTUsIDAuODM2NTUsIDAuOTg5ODEsIDEsIDEsIDAuODM2NTUsIDAuNzM5NzcsIDAuODM2NTUsIDAuNzM5MDMsIDAuODQ2MzgsIDEuMDMzLCAwLjk1NTQ2LCAwLjk1OTMzLCAxLCAxLCAwLjk1NTQ2LCAwLjk1OTMzLCAwLjgyNzEsIDAuOTU0MTcsIDAuOTU5MzMsIDAuOTIxNzksIDAuOTQ0NiwgMC45MjE3OSwgMC45NDQ2LCAwLjkyMTc5LCAwLjk0NDYsIDAuOTM2LCAwLjkxOTY0LCAwLjgyMTE0LCAwLjk3NjQ2LCAxLCAxLCAwLjgyMTE0LCAwLjk3NjQ2LCAwLjgwOTYsIDAuNzgwMzYsIDAuODA5NiwgMC43ODAzNiwgMSwgMSwgMC44MDk2LCAwLjc4MDM2LCAxLCAxLCAwLjg5NzEzLCAwLjc3NDUyLCAwLjg5NzEzLCAxLjEwMjA4LCAwLjk0NDM4LCAwLjk1NDQyLCAwLjk0NDM4LCAwLjk1NDQyLCAwLjk0NDM4LCAwLjk1NDQyLCAwLjk0NDM4LCAwLjk1NDQyLCAwLjk0NDM4LCAwLjk1NDQyLCAwLjk0NDM4LCAwLjk1NDQyLCAwLjk0MDgzLCAwLjk3NTc5LCAwLjkwNDA2LCAwLjk0MDM5LCAwLjkwNDA2LCAwLjk0NDYsIDAuOTM4LCAwLjk0NDYsIDAuOTM4LCAwLjk0NDYsIDAuOTM4LCAxLCAwLjk5NzkzLCAwLjkwODM4LCAwLjk0OTM4LCAwLjg2OCwgMC45MDMxLCAwLjkyMTc5LCAwLjk0NDYsIDEsIDEsIDAuODk3MTMsIDEuMTAyMDgsIDAuOTAwODgsIDAuOTAwODgsIDAuOTAwODgsIDAuOTAwODgsIDAuOTAwODgsIDAuOTAwODgsIDAuOTAwODgsIDAuOTAwODgsIDAuOTAwODgsIDAuOTA5ODksIDAuOTM1OCwgMC45MTk0NSwgMC44MzE4MSwgMC43NTI2MSwgMC44Nzk5MiwgMC44Mjk3NiwgMC45NjAzNCwgMC44MzY4OSwgMC45NzI2OCwgMS4wMDc4LCAwLjkwODM4LCAwLjgzNjM3LCAwLjgwMTksIDAuOTAxNTcsIDAuODAwNjEsIDAuOTQ0NiwgMC45NTQwNywgMC45MjQzNiwgMS4wMjU4LCAwLjg1MDIyLCAwLjk3MTUzLCAxLjAxNTYsIDAuOTU1NDYsIDAuODkxOTIsIDAuOTIxNzksIDAuOTIzNjEsIDAuODcxMDcsIDAuOTYzMTgsIDAuODk3MTMsIDAuOTM3MDQsIDAuOTU2MzgsIDAuOTE5MDUsIDAuOTE3MDksIDAuOTI3OTYsIDEuMDI1OCwgMC45MzcwNCwgMC45NDgzNiwgMS4wMzczLCAwLjk1OTMzLCAxLjAwNzgsIDAuOTU4NzEsIDAuOTQ4MzYsIDAuOTYxNzQsIDAuOTI2MDEsIDAuOTQ5OCwgMC45ODYwNywgMC45NTc3NiwgMC45NTkzMywgMS4wNTQ1MywgMS4wMDc4LCAwLjk4Mjc1LCAwLjkzMTQsIDAuOTU2MTcsIDAuOTE3MDEsIDEuMDU5OTMsIDAuOTQ0NiwgMC43ODM2NywgMC45NTUzLCAxLCAwLjg2ODMyLCAxLjAxMjgsIDAuOTU4NzEsIDAuOTkzOTQsIDAuODc1NDgsIDAuOTYzNjEsIDAuODY3NzQsIDEuMDA3OCwgMC45NTg3MSwgMC45NDQ2LCAwLjk1ODcxLCAwLjg2Nzc0LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjk0MDgzLCAwLjk3NTc5LCAwLjk0MDgzLCAwLjk3NTc5LCAwLjk0MDgzLCAwLjk3NTc5LCAwLjkwNDA2LCAwLjk0MDM5LCAwLjk2Njk0LCAxLCAwLjg5OTAzLCAxLCAxLCAxLCAwLjkzNTgyLCAwLjkzNTgyLCAwLjkzNTgyLCAxLCAwLjkwOCwgMC45MDgsIDAuOTE4LCAwLjk0MjE5LCAwLjk0MjE5LCAwLjk2NTQ0LCAxLCAxLjI4NSwgMSwgMSwgMC44MTA3OSwgMC44MTA3OSwgMSwgMSwgMC43NDg1NCwgMSwgMSwgMSwgMSwgMC45OTc5MywgMSwgMSwgMSwgMC42NSwgMSwgMS4zNjE0NSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMS4xNzE3MywgMSwgMC44MDUzNSwgMC43NjE2OSwgMS4wMjA1OCwgMS4wNzMyLCAxLjA1NDg2LCAxLCAxLCAxLjMwNjkyLCAxLjA4NTk1LCAxLjA4NTk1LCAxLCAxLjA4NTk1LCAxLjA4NTk1LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLjE2MTYxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxXTsKY29uc3QgTXlyaWFkUHJvQm9sZE1ldHJpY3MgPSB7CiAgbGluZUhlaWdodDogMS4yLAogIGxpbmVHYXA6IDAuMgp9Owpjb25zdCBNeXJpYWRQcm9Cb2xkSXRhbGljRmFjdG9ycyA9IFsxLjM2ODk4LCAxLCAxLCAwLjY2MjI3LCAwLjgwNzc5LCAwLjgxNjI1LCAwLjk3Mjc2LCAwLjk3Mjc2LCAwLjk3NzMzLCAwLjkyMjIyLCAwLjgzMjY2LCAwLjk0MjkyLCAwLjk0MjkyLCAxLjE2MTQ4LCAxLjAyMDU4LCAwLjkzNTgyLCAwLjk2Njk0LCAwLjkzNTgyLCAxLjE3MzM3LCAwLjk3Mjc2LCAwLjk3Mjc2LCAwLjk3Mjc2LCAwLjk3Mjc2LCAwLjk3Mjc2LCAwLjk3Mjc2LCAwLjk3Mjc2LCAwLjk3Mjc2LCAwLjk3Mjc2LCAwLjk3Mjc2LCAwLjc4MDc2LCAwLjc4MDc2LCAxLjAyMDU4LCAxLjAyMDU4LCAxLjAyMDU4LCAwLjcxNTQxLCAwLjc2ODEzLCAwLjg1NTc2LCAwLjgwNTkxLCAwLjgwNzI5LCAwLjk0Mjk5LCAwLjc3NTEyLCAwLjgzNjU1LCAwLjg2NTIzLCAwLjkyMjIyLCAwLjk4NjIxLCAwLjcxNzQzLCAwLjgxNjk4LCAwLjc5NzI2LCAwLjk4NTU4LCAwLjkyMjIyLCAwLjkwNjM3LCAwLjgzODA5LCAwLjkwNjM3LCAwLjgwNzI5LCAwLjc2NDYzLCAwLjg2Mjc1LCAwLjkwNjk5LCAwLjkxNjA1LCAwLjkxNTQsIDAuODUzMDgsIDAuODU0NTgsIDAuOTA1MzEsIDAuOTQyOTIsIDEuMjEyOTYsIDAuOTQyOTIsIDEuMDIwNTgsIDAuODk5MDMsIDEuMTg2MTYsIDAuOTk2MTMsIDAuOTE2NzcsIDAuNzgyMTYsIDAuOTE2NzcsIDAuOTAwODMsIDAuOTg3OTYsIDAuOTEzNSwgMC45MjE2OCwgMC45NTM4MSwgMC45ODk4MSwgMC45NTI5OCwgMC45NTM4MSwgMC45MzQ1OSwgMC45MjE2OCwgMC45MTUxMywgMC45MjAwNCwgMC45MTY3NywgMC45NTA3NywgMC43NDgsIDEuMDQ1MDIsIDAuOTE2NzcsIDAuOTIwNjEsIDAuOTQyMzYsIDAuODk1NDQsIDAuODkzNjQsIDAuOSwgMC44MDY4NywgMC44NTc4LCAwLjgwNjg3LCAxLjAyMDU4LCAwLjgwNzc5LCAwLjk3Mjc2LCAwLjk3Mjc2LCAwLjk3Mjc2LCAwLjk3Mjc2LCAwLjg1NzgsIDAuOTk5NzMsIDEuMTg2MTYsIDAuOTEzMzksIDEuMDgwNzQsIDAuODI4OTEsIDEuMDIwNTgsIDAuNTU1MDksIDAuNzE1MjYsIDAuODkwMjIsIDEuMDg1OTUsIDEsIDEsIDEuMTg2MTYsIDEsIDAuOTY3MzYsIDAuOTM1ODIsIDEuMTg2MTYsIDEsIDEuMDQ4NjQsIDAuODI3MTEsIDAuOTkwNDMsIDAuOTkwNDMsIDAuOTkwNDMsIDAuNzE1NDEsIDAuODU1NzYsIDAuODU1NzYsIDAuODU1NzYsIDAuODU1NzYsIDAuODU1NzYsIDAuODU1NzYsIDAuODQ1LCAwLjgwNzI5LCAwLjc3NTEyLCAwLjc3NTEyLCAwLjc3NTEyLCAwLjc3NTEyLCAwLjk4NjIxLCAwLjk4NjIxLCAwLjk4NjIxLCAwLjk4NjIxLCAwLjk1OTYxLCAwLjkyMjIyLCAwLjkwNjM3LCAwLjkwNjM3LCAwLjkwNjM3LCAwLjkwNjM3LCAwLjkwNjM3LCAxLjAyMDU4LCAwLjkwMjUxLCAwLjkwNjk5LCAwLjkwNjk5LCAwLjkwNjk5LCAwLjkwNjk5LCAwLjg1NDU4LCAwLjgzNjU5LCAwLjk0OTUxLCAwLjk5NjEzLCAwLjk5NjEzLCAwLjk5NjEzLCAwLjk5NjEzLCAwLjk5NjEzLCAwLjk5NjEzLCAwLjg1ODExLCAwLjc4MjE2LCAwLjkwMDgzLCAwLjkwMDgzLCAwLjkwMDgzLCAwLjkwMDgzLCAwLjk1MzgxLCAwLjk1MzgxLCAwLjk1MzgxLCAwLjk1MzgxLCAwLjkxMzUsIDAuOTIxNjgsIDAuOTE1MTMsIDAuOTE1MTMsIDAuOTE1MTMsIDAuOTE1MTMsIDAuOTE1MTMsIDEuMDg1OTUsIDAuOTE2NzcsIDAuOTE2NzcsIDAuOTE2NzcsIDAuOTE2NzcsIDAuOTE2NzcsIDAuODkzNjQsIDAuOTIzMzIsIDAuODkzNjQsIDAuODU1NzYsIDAuOTk2MTMsIDAuODU1NzYsIDAuOTk2MTMsIDAuODU1NzYsIDAuOTk2MTMsIDAuODA3MjksIDAuNzgyMTYsIDAuODA3MjksIDAuNzgyMTYsIDAuODA3MjksIDAuNzgyMTYsIDAuODA3MjksIDAuNzgyMTYsIDAuOTQyOTksIDAuNzY3ODMsIDAuOTU5NjEsIDAuOTE2NzcsIDAuNzc1MTIsIDAuOTAwODMsIDAuNzc1MTIsIDAuOTAwODMsIDAuNzc1MTIsIDAuOTAwODMsIDAuNzc1MTIsIDAuOTAwODMsIDAuNzc1MTIsIDAuOTAwODMsIDAuODY1MjMsIDAuOTEzNSwgMC44NjUyMywgMC45MTM1LCAwLjg2NTIzLCAwLjkxMzUsIDEsIDEsIDAuOTIyMjIsIDAuOTIxNjgsIDAuOTIyMjIsIDAuOTIxNjgsIDAuOTg2MjEsIDAuOTUzODEsIDAuOTg2MjEsIDAuOTUzODEsIDAuOTg2MjEsIDAuOTUzODEsIDAuOTg2MjEsIDAuOTUzODEsIDAuOTg2MjEsIDAuOTUzODEsIDAuODYwMzYsIDAuOTcwOTYsIDAuNzE3NDMsIDAuOTg5ODEsIDEsIDEsIDAuOTUyOTgsIDAuNzk3MjYsIDAuOTUzODEsIDEsIDEsIDAuNzk3MjYsIDAuNjg5NCwgMC43OTcyNiwgMC43NDMyMSwgMC44MTY5MSwgMS4wMDA2LCAwLjkyMjIyLCAwLjkyMTY4LCAxLCAxLCAwLjkyMjIyLCAwLjkyMTY4LCAwLjc5NDY0LCAwLjkyMDk4LCAwLjkyMTY4LCAwLjkwNjM3LCAwLjkxNTEzLCAwLjkwNjM3LCAwLjkxNTEzLCAwLjkwNjM3LCAwLjkxNTEzLCAwLjkwOSwgMC44NzUxNCwgMC44MDcyOSwgMC45NTA3NywgMSwgMSwgMC44MDcyOSwgMC45NTA3NywgMC43NjQ2MywgMC43NDgsIDAuNzY0NjMsIDAuNzQ4LCAxLCAxLCAwLjc2NDYzLCAwLjc0OCwgMSwgMSwgMC44NjI3NSwgMC43MjY1MSwgMC44NjI3NSwgMS4wNDUwMiwgMC45MDY5OSwgMC45MTY3NywgMC45MDY5OSwgMC45MTY3NywgMC45MDY5OSwgMC45MTY3NywgMC45MDY5OSwgMC45MTY3NywgMC45MDY5OSwgMC45MTY3NywgMC45MDY5OSwgMC45MTY3NywgMC45MTU0LCAwLjk0MjM2LCAwLjg1NDU4LCAwLjg5MzY0LCAwLjg1NDU4LCAwLjkwNTMxLCAwLjksIDAuOTA1MzEsIDAuOSwgMC45MDUzMSwgMC45LCAxLCAwLjk3Mjc2LCAwLjg1NTc2LCAwLjk5NjEzLCAwLjg0NSwgMC44NTgxMSwgMC45MDI1MSwgMC45MTY3NywgMSwgMSwgMC44NjI3NSwgMS4wNDUwMiwgMS4xODYxNiwgMS4xODYxNiwgMS4xODYxNiwgMS4xODYxNiwgMS4xODYxNiwgMS4xODYxNiwgMS4xODYxNiwgMS4xODYxNiwgMS4xODYxNiwgMS4wMDg5OSwgMS4zMDYyOCwgMC44NTU3NiwgMC44MDE3OCwgMC42Njg2MiwgMC43OTI3LCAwLjY5MzIzLCAwLjg4MTI3LCAwLjcyNDU5LCAwLjg5NzExLCAwLjk1MzgxLCAwLjg1NTc2LCAwLjgwNTkxLCAwLjc4MDUsIDAuOTQ3MjksIDAuNzc1MTIsIDAuOTA1MzEsIDAuOTIyMjIsIDAuOTA2MzcsIDAuOTg2MjEsIDAuODE2OTgsIDAuOTI2NTUsIDAuOTg1NTgsIDAuOTIyMjIsIDAuODUzNTksIDAuOTA2MzcsIDAuOTA5NzYsIDAuODM4MDksIDAuOTQ1MjMsIDAuODYyNzUsIDAuODM1MDksIDAuOTMxNTcsIDAuODUzMDgsIDAuODMzOTIsIDAuOTIzNDYsIDAuOTg2MjEsIDAuODM1MDksIDAuOTI4ODYsIDAuOTEzMjQsIDAuOTIxNjgsIDAuOTUzODEsIDAuOTA2NDYsIDAuOTI4ODYsIDAuOTA1NTcsIDAuODY4NDcsIDAuOTAyNzYsIDAuOTEzMjQsIDAuODY4NDIsIDAuOTIxNjgsIDAuOTk1MzEsIDAuOTUzODEsIDAuOTIyNCwgMC44NTQwOCwgMC45MjY5OSwgMC44Njg0NywgMS4wMDUxLCAwLjkxNTEzLCAwLjgwNDg3LCAwLjkzNDgxLCAxLCAwLjg4MTU5LCAxLjA1MjE0LCAwLjkwNjQ2LCAwLjk3MzU1LCAwLjgxNTM5LCAwLjg5Mzk4LCAwLjg1OTIzLCAwLjk1MzgxLCAwLjkwNjQ2LCAwLjkxNTEzLCAwLjkwNjQ2LCAwLjg1OTIzLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjkxNTQsIDAuOTQyMzYsIDAuOTE1NCwgMC45NDIzNiwgMC45MTU0LCAwLjk0MjM2LCAwLjg1NDU4LCAwLjg5MzY0LCAwLjk2Njk0LCAxLCAwLjg5OTAzLCAxLCAxLCAxLCAwLjkxNzgyLCAwLjkxNzgyLCAwLjkxNzgyLCAxLCAwLjg5NiwgMC44OTYsIDAuODk2LCAwLjkzMzIsIDAuOTMzMiwgMC45NTk3MywgMSwgMS4yNiwgMSwgMSwgMC44MDQ3OSwgMC44MDE3OCwgMSwgMSwgMC44NTYzMywgMSwgMSwgMSwgMSwgMC45NzI3NiwgMSwgMSwgMSwgMC42OTgsIDEsIDEuMzYxNDUsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEuMTQ1NDIsIDEsIDAuNzkxOTksIDAuNzg2OTQsIDEuMDIwNTgsIDEuMDM0OTMsIDEuMDU0ODYsIDEsIDEsIDEuMjMwMjYsIDEuMDg1OTUsIDEuMDg1OTUsIDEsIDEuMDg1OTUsIDEuMDg1OTUsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEuMjAwMDYsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDFdOwpjb25zdCBNeXJpYWRQcm9Cb2xkSXRhbGljTWV0cmljcyA9IHsKICBsaW5lSGVpZ2h0OiAxLjIsCiAgbGluZUdhcDogMC4yCn07CmNvbnN0IE15cmlhZFByb0l0YWxpY0ZhY3RvcnMgPSBbMS4zNjg5OCwgMSwgMSwgMC42NTUwNywgMC44NDk0MywgMC44NTYzOSwgMC44ODQ2NSwgMC44ODQ2NSwgMC44NjkzNiwgMC44ODMwNywgMC44Njk0OCwgMC44NTI4MywgMC44NTI4MywgMS4wNjM4MywgMS4wMjA1OCwgMC43NTk0NSwgMC45MjE5LCAwLjc1OTQ1LCAxLjE3MzM3LCAwLjg4NDY1LCAwLjg4NDY1LCAwLjg4NDY1LCAwLjg4NDY1LCAwLjg4NDY1LCAwLjg4NDY1LCAwLjg4NDY1LCAwLjg4NDY1LCAwLjg4NDY1LCAwLjg4NDY1LCAwLjc1OTQ1LCAwLjc1OTQ1LCAxLjAyMDU4LCAxLjAyMDU4LCAxLjAyMDU4LCAwLjY5MDQ2LCAwLjcwOTI2LCAwLjg1MTU4LCAwLjc3ODEyLCAwLjc2ODUyLCAwLjg5NTkxLCAwLjcwNDY2LCAwLjc2MTI1LCAwLjgwMDk0LCAwLjg2ODIyLCAwLjgzODY0LCAwLjcyOCwgMC43NzIxMiwgMC43OTQ3NSwgMC45MzYzNywgMC44NzUxNCwgMC44NTg4LCAwLjc2MDEzLCAwLjg1ODgsIDAuNzI0MjEsIDAuNjk4NjYsIDAuNzc1OTgsIDAuODU5OTEsIDAuODA4MTEsIDAuODc4MzIsIDAuNzgxMTIsIDAuNzc1MTIsIDAuODU2MiwgMS4wMjIyLCAxLjE4NDE3LCAxLjAyMjIsIDEuMjcwMTQsIDAuODk5MDMsIDEuMTUwMTIsIDAuOTM4NTksIDAuOTQzOTksIDAuODQ2LCAwLjk0Mzk5LCAwLjgxNDUzLCAxLjAxODYsIDAuOTQyMTksIDAuOTYwMTcsIDEuMDMwNzUsIDEuMDIxNzUsIDAuOTEyLCAxLjAzMDc1LCAwLjk2OTk4LCAwLjk2MDE3LCAwLjkzODU5LCAwLjk0Mzk5LCAwLjk0Mzk5LCAwLjk1NDkzLCAwLjc0NiwgMS4xMjY1OCwgMC45NDU3OCwgMC45MSwgMC45NzksIDAuODgyLCAwLjg4MiwgMC44MywgMC44NTAzNCwgMC44MzUzNywgMC44NTAzNCwgMS4wMjA1OCwgMC43MDg2OSwgMC44ODQ2NSwgMC44ODQ2NSwgMC44ODQ2NSwgMC44ODQ2NSwgMC44MzUzNywgMC45MDA4MywgMS4xNTAxMiwgMC45MTYxLCAwLjk0NTY1LCAwLjczNTQxLCAxLjAyMDU4LCAwLjUzNjA5LCAwLjY5MzUzLCAwLjc5NTE5LCAxLjA4NTk1LCAxLCAxLCAxLjE1MDEyLCAxLCAwLjkxOTc0LCAwLjc1OTQ1LCAxLjE1MDEyLCAxLCAwLjk0NDYsIDAuNzMzNjEsIDAuOTAwNSwgMC45MDA1LCAwLjkwMDUsIDAuNjI4NjQsIDAuODUxNTgsIDAuODUxNTgsIDAuODUxNTgsIDAuODUxNTgsIDAuODUxNTgsIDAuODUxNTgsIDAuNzczLCAwLjc2ODUyLCAwLjcwNDY2LCAwLjcwNDY2LCAwLjcwNDY2LCAwLjcwNDY2LCAwLjgzODY0LCAwLjgzODY0LCAwLjgzODY0LCAwLjgzODY0LCAwLjkwNTYxLCAwLjg3NTE0LCAwLjg1ODgsIDAuODU4OCwgMC44NTg4LCAwLjg1ODgsIDAuODU4OCwgMS4wMjA1OCwgMC44NTc1MSwgMC44NTk5MSwgMC44NTk5MSwgMC44NTk5MSwgMC44NTk5MSwgMC43NzUxMiwgMC43NjAxMywgMC44ODA3NSwgMC45Mzg1OSwgMC45Mzg1OSwgMC45Mzg1OSwgMC45Mzg1OSwgMC45Mzg1OSwgMC45Mzg1OSwgMC44MDc1LCAwLjg0NiwgMC44MTQ1MywgMC44MTQ1MywgMC44MTQ1MywgMC44MTQ1MywgMC44MjQyNCwgMC44MjQyNCwgMC44MjQyNCwgMC44MjQyNCwgMC45Mjc4LCAwLjk2MDE3LCAwLjkzODU5LCAwLjkzODU5LCAwLjkzODU5LCAwLjkzODU5LCAwLjkzODU5LCAxLjA4NTk1LCAwLjg1NjIsIDAuOTQ1NzgsIDAuOTQ1NzgsIDAuOTQ1NzgsIDAuOTQ1NzgsIDAuODgyLCAwLjk0NTc4LCAwLjg4MiwgMC44NTE1OCwgMC45Mzg1OSwgMC44NTE1OCwgMC45Mzg1OSwgMC44NTE1OCwgMC45Mzg1OSwgMC43Njg1MiwgMC44NDYsIDAuNzY4NTIsIDAuODQ2LCAwLjc2ODUyLCAwLjg0NiwgMC43Njg1MiwgMC44NDYsIDAuODk1OTEsIDAuODU0NCwgMC45MDU2MSwgMC45NDM5OSwgMC43MDQ2NiwgMC44MTQ1MywgMC43MDQ2NiwgMC44MTQ1MywgMC43MDQ2NiwgMC44MTQ1MywgMC43MDQ2NiwgMC44MTQ1MywgMC43MDQ2NiwgMC44MTQ1MywgMC44MDA5NCwgMC45NDIxOSwgMC44MDA5NCwgMC45NDIxOSwgMC44MDA5NCwgMC45NDIxOSwgMSwgMSwgMC44NjgyMiwgMC45NjAxNywgMC44NjgyMiwgMC45NjAxNywgMC44Mzg2NCwgMC44MjQyNCwgMC44Mzg2NCwgMC44MjQyNCwgMC44Mzg2NCwgMC44MjQyNCwgMC44Mzg2NCwgMS4wMzA3NSwgMC44Mzg2NCwgMC44MjQyNCwgMC44MTQwMiwgMS4wMjczOCwgMC43MjgsIDEuMDIxNzUsIDEsIDEsIDAuOTEyLCAwLjc5NDc1LCAxLjAzMDc1LCAxLCAxLCAwLjc5NDc1LCAwLjgzOTExLCAwLjc5NDc1LCAwLjY2MjY2LCAwLjgwNTUzLCAxLjA2Njc2LCAwLjg3NTE0LCAwLjk2MDE3LCAxLCAxLCAwLjg3NTE0LCAwLjk2MDE3LCAwLjg2ODY1LCAwLjg3Mzk2LCAwLjk2MDE3LCAwLjg1ODgsIDAuOTM4NTksIDAuODU4OCwgMC45Mzg1OSwgMC44NTg4LCAwLjkzODU5LCAwLjg2NywgMC44NDc1OSwgMC43MjQyMSwgMC45NTQ5MywgMSwgMSwgMC43MjQyMSwgMC45NTQ5MywgMC42OTg2NiwgMC43NDYsIDAuNjk4NjYsIDAuNzQ2LCAxLCAxLCAwLjY5ODY2LCAwLjc0NiwgMSwgMSwgMC43NzU5OCwgMC44ODQxNywgMC43NzU5OCwgMS4xMjY1OCwgMC44NTk5MSwgMC45NDU3OCwgMC44NTk5MSwgMC45NDU3OCwgMC44NTk5MSwgMC45NDU3OCwgMC44NTk5MSwgMC45NDU3OCwgMC44NTk5MSwgMC45NDU3OCwgMC44NTk5MSwgMC45NDU3OCwgMC44NzgzMiwgMC45NzksIDAuNzc1MTIsIDAuODgyLCAwLjc3NTEyLCAwLjg1NjIsIDAuODMsIDAuODU2MiwgMC44MywgMC44NTYyLCAwLjgzLCAxLCAwLjg4NDY1LCAwLjg1MTU4LCAwLjkzODU5LCAwLjc3MywgMC44MDc1LCAwLjg1NzUxLCAwLjg1NjIsIDEsIDEsIDAuNzc1OTgsIDEuMTI2NTgsIDEuMTUwMTIsIDEuMTUwMTIsIDEuMTUwMTIsIDEuMTUwMTIsIDEuMTUwMTIsIDEuMTUzMTMsIDEuMTUwMTIsIDEuMTUwMTIsIDEuMTUwMTIsIDEuMDgxMDYsIDEuMDM5MDEsIDAuODUxNTgsIDAuNzcwMjUsIDAuNjIyNjQsIDAuNzY0NiwgMC42NTM1MSwgMC44NjAyNiwgMC42OTQ2MSwgMC44OTk0NywgMS4wMzA3NSwgMC44NTE1OCwgMC43NzgxMiwgMC43NjQ0OSwgMC44ODgzNiwgMC43MDQ2NiwgMC44NTYyLCAwLjg2ODIyLCAwLjg1ODgsIDAuODM4NjQsIDAuNzcyMTIsIDAuODUzMDgsIDAuOTM2MzcsIDAuODc1MTQsIDAuODIzNTIsIDAuODU4OCwgMC44NTcwMSwgMC43NjAxMywgMC44OTA1OCwgMC43NzU5OCwgMC44MTU2LCAwLjgyNTY1LCAwLjc4MTEyLCAwLjc3ODk5LCAwLjg5Mzg2LCAwLjgzODY0LCAwLjgxNTYsIDAuOTQ4NiwgMC45MjM4OCwgMC45NjE4NiwgMS4wMzA3NSwgMC45MTEyMywgMC45NDg2LCAwLjkzMjk4LCAwLjg3OCwgMC45Mzk0MiwgMC45MjM4OCwgMC44NDU5NiwgMC45NjE4NiwgMC45NTExOSwgMS4wMzA3NSwgMC45MjIsIDAuODg3ODcsIDAuOTU4MjksIDAuODgsIDAuOTM1NTksIDAuOTM4NTksIDAuNzg4MTUsIDAuOTM3NTgsIDEsIDAuODkyMTcsIDEuMDM3MzcsIDAuOTExMjMsIDAuOTM5NjksIDAuNzc0ODcsIDAuODU3NjksIDAuODY3OTksIDEuMDMwNzUsIDAuOTExMjMsIDAuOTM4NTksIDAuOTExMjMsIDAuODY3OTksIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAuODc4MzIsIDAuOTc5LCAwLjg3ODMyLCAwLjk3OSwgMC44NzgzMiwgMC45NzksIDAuNzc1MTIsIDAuODgyLCAwLjkyMTksIDEsIDAuODk5MDMsIDEsIDEsIDEsIDAuODczMjEsIDAuODczMjEsIDAuODczMjEsIDEsIDEuMDI3LCAxLjAyNywgMS4wMjcsIDAuODY4NDcsIDAuODY4NDcsIDAuNzkxMjEsIDEsIDEuMTI0LCAxLCAxLCAwLjczNTcyLCAwLjczNTcyLCAxLCAxLCAwLjg1MDM0LCAxLCAxLCAxLCAxLCAwLjg4NDY1LCAxLCAxLCAxLCAwLjY2OSwgMSwgMS4zNjE0NSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMS4wNDgyOCwgMSwgMC43NDk0OCwgMC43NTE4NywgMS4wMjA1OCwgMC45ODM5MSwgMS4wMjExOSwgMSwgMSwgMS4wNjIzMywgMS4wODU5NSwgMS4wODU5NSwgMSwgMS4wODU5NSwgMS4wODU5NSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMS4wNTIzMywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMV07CmNvbnN0IE15cmlhZFByb0l0YWxpY01ldHJpY3MgPSB7CiAgbGluZUhlaWdodDogMS4yLAogIGxpbmVHYXA6IDAuMgp9Owpjb25zdCBNeXJpYWRQcm9SZWd1bGFyRmFjdG9ycyA9IFsxLjM2ODk4LCAxLCAxLCAwLjc2MzA1LCAwLjgyNzg0LCAwLjk0OTM1LCAwLjg5MzY0LCAwLjkyMjQxLCAwLjg5MDczLCAwLjkwNzA2LCAwLjk4NDcyLCAwLjg1MjgzLCAwLjg1MjgzLCAxLjA2NjQsIDEuMDIwNTgsIDAuNzQ1MDUsIDAuOTIxOSwgMC43NDUwNSwgMS4yMzQ1NiwgMC45MjI0MSwgMC45MjI0MSwgMC45MjI0MSwgMC45MjI0MSwgMC45MjI0MSwgMC45MjI0MSwgMC45MjI0MSwgMC45MjI0MSwgMC45MjI0MSwgMC45MjI0MSwgMC43NDUwNSwgMC43NDUwNSwgMS4wMjA1OCwgMS4wMjA1OCwgMS4wMjA1OCwgMC43MzAwMiwgMC43MjYwMSwgMC45MTc1NSwgMC44MTI2LCAwLjgwMzE0LCAwLjkyMjIyLCAwLjczNzY0LCAwLjc5NzI2LCAwLjgzMDUxLCAwLjkwMjg0LCAwLjg2MDIzLCAwLjc0LCAwLjgxMjYsIDAuODQ4NjksIDAuOTY1MTgsIDAuOTExMTUsIDAuODg1OCwgMC43OTc2MSwgMC44ODU4LCAwLjc0NDk4LCAwLjczOTE0LCAwLjgxMzYzLCAwLjg5NTkxLCAwLjgzNjU5LCAwLjg5NjMzLCAwLjg1NjA4LCAwLjgxMTEsIDAuOTA1MzEsIDEuMDIyMiwgMS4yMjczNiwgMS4wMjIyLCAxLjI3MDE0LCAwLjg5OTAzLCAwLjkwMDg4LCAwLjg2NjY3LCAxLjAyMzEsIDAuODk2LCAxLjAxNDExLCAwLjkwMDgzLCAxLjA1MDk5LCAxLjAwNTEyLCAwLjk5NzkzLCAxLjA1MzI2LCAxLjA5Mzc3LCAwLjkzOCwgMS4wNjIyNiwgMS4wMDExOSwgMC45OTc5MywgMC45ODcxNCwgMS4wMjMxLCAxLjAxMjMxLCAwLjk4MTk2LCAwLjc5MiwgMS4xOTEzNywgMC45OTA3NCwgMC45NjIsIDEuMDE5MTUsIDAuOTI2LCAwLjk0MiwgMC44NTYsIDAuODUwMzQsIDAuOTIwMDYsIDAuODUwMzQsIDEuMDIwNTgsIDAuNjkwNjcsIDAuOTIyNDEsIDAuOTIyNDEsIDAuOTIyNDEsIDAuOTIyNDEsIDAuOTIwMDYsIDAuOTMzMiwgMC45MDA4OCwgMC45MTg4MiwgMC45MzQ4NCwgMC43NTMzOSwgMS4wMjA1OCwgMC41Njg2NiwgMC41NDMyNCwgMC43OTUxOSwgMS4wODU5NSwgMSwgMSwgMC45MDA4OCwgMSwgMC45NTMyNSwgMC43NDUwNSwgMC45MDA4OCwgMSwgMC45NzE5OCwgMC43NTMzOSwgMC45MTAwOSwgMC45MTAwOSwgMC45MTAwOSwgMC42NjQ2NiwgMC45MTc1NSwgMC45MTc1NSwgMC45MTc1NSwgMC45MTc1NSwgMC45MTc1NSwgMC45MTc1NSwgMC43ODgsIDAuODAzMTQsIDAuNzM3NjQsIDAuNzM3NjQsIDAuNzM3NjQsIDAuNzM3NjQsIDAuODYwMjMsIDAuODYwMjMsIDAuODYwMjMsIDAuODYwMjMsIDAuOTI5MTUsIDAuOTExMTUsIDAuODg1OCwgMC44ODU4LCAwLjg4NTgsIDAuODg1OCwgMC44ODU4LCAxLjAyMDU4LCAwLjg4NTgsIDAuODk1OTEsIDAuODk1OTEsIDAuODk1OTEsIDAuODk1OTEsIDAuODExMSwgMC43OTYxMSwgMC44OTcxMywgMC44NjY2NywgMC44NjY2NywgMC44NjY2NywgMC44NjY2NywgMC44NjY2NywgMC44NjY2NywgMC44NjkzNiwgMC44OTYsIDAuOTAwODMsIDAuOTAwODMsIDAuOTAwODMsIDAuOTAwODMsIDAuODQyMjQsIDAuODQyMjQsIDAuODQyMjQsIDAuODQyMjQsIDAuOTcyNzYsIDAuOTk3OTMsIDAuOTg3MTQsIDAuOTg3MTQsIDAuOTg3MTQsIDAuOTg3MTQsIDAuOTg3MTQsIDEuMDg1OTUsIDAuODk4NzYsIDAuOTkwNzQsIDAuOTkwNzQsIDAuOTkwNzQsIDAuOTkwNzQsIDAuOTQyLCAxLjAyMzEsIDAuOTQyLCAwLjkxNzU1LCAwLjg2NjY3LCAwLjkxNzU1LCAwLjg2NjY3LCAwLjkxNzU1LCAwLjg2NjY3LCAwLjgwMzE0LCAwLjg5NiwgMC44MDMxNCwgMC44OTYsIDAuODAzMTQsIDAuODk2LCAwLjgwMzE0LCAwLjg5NiwgMC45MjIyMiwgMC45MzM3MiwgMC45MjkxNSwgMS4wMTQxMSwgMC43Mzc2NCwgMC45MDA4MywgMC43Mzc2NCwgMC45MDA4MywgMC43Mzc2NCwgMC45MDA4MywgMC43Mzc2NCwgMC45MDA4MywgMC43Mzc2NCwgMC45MDA4MywgMC44MzA1MSwgMS4wMDUxMiwgMC44MzA1MSwgMS4wMDUxMiwgMC44MzA1MSwgMS4wMDUxMiwgMSwgMSwgMC45MDI4NCwgMC45OTc5MywgMC45MDk3NiwgMC45OTc5MywgMC44NjAyMywgMC44NDIyNCwgMC44NjAyMywgMC44NDIyNCwgMC44NjAyMywgMC44NDIyNCwgMC44NjAyMywgMS4wNTMyNiwgMC44NjAyMywgMC44NDIyNCwgMC44Mjg3MywgMS4wNzQ2OSwgMC43NCwgMS4wOTM3NywgMSwgMSwgMC45MzgsIDAuODQ4NjksIDEuMDYyMjYsIDEsIDEsIDAuODQ4NjksIDAuODM3MDQsIDAuODQ4NjksIDAuODE0NDEsIDAuODU1ODgsIDEuMDg5MjcsIDAuOTExMTUsIDAuOTk3OTMsIDEsIDEsIDAuOTExMTUsIDAuOTk3OTMsIDAuOTE4ODcsIDAuOTA5OTEsIDAuOTk3OTMsIDAuODg1OCwgMC45ODcxNCwgMC44ODU4LCAwLjk4NzE0LCAwLjg4NTgsIDAuOTg3MTQsIDAuODk0LCAwLjkxNDM0LCAwLjc0NDk4LCAwLjk4MTk2LCAxLCAxLCAwLjc0NDk4LCAwLjk4MTk2LCAwLjczOTE0LCAwLjc5MiwgMC43MzkxNCwgMC43OTIsIDEsIDEsIDAuNzM5MTQsIDAuNzkyLCAxLCAxLCAwLjgxMzYzLCAwLjkwNCwgMC44MTM2MywgMS4xOTEzNywgMC44OTU5MSwgMC45OTA3NCwgMC44OTU5MSwgMC45OTA3NCwgMC44OTU5MSwgMC45OTA3NCwgMC44OTU5MSwgMC45OTA3NCwgMC44OTU5MSwgMC45OTA3NCwgMC44OTU5MSwgMC45OTA3NCwgMC44OTYzMywgMS4wMTkxNSwgMC44MTExLCAwLjk0MiwgMC44MTExLCAwLjkwNTMxLCAwLjg1NiwgMC45MDUzMSwgMC44NTYsIDAuOTA1MzEsIDAuODU2LCAxLCAwLjkyMjQxLCAwLjkxNzU1LCAwLjg2NjY3LCAwLjc4OCwgMC44NjkzNiwgMC44ODU4LCAwLjg5ODc2LCAxLCAxLCAwLjgxMzYzLCAxLjE5MTM3LCAwLjkwMDg4LCAwLjkwMDg4LCAwLjkwMDg4LCAwLjkwMDg4LCAwLjkwMDg4LCAwLjkwMDg4LCAwLjkwMDg4LCAwLjkwMDg4LCAwLjkwMDg4LCAwLjkwMzg4LCAxLjAzOTAxLCAwLjkyMTM4LCAwLjc4MTA1LCAwLjcxNTQsIDAuODYxNjksIDAuODA1MTMsIDAuOTQwMDcsIDAuODI1MjgsIDAuOTg2MTIsIDEuMDYyMjYsIDAuOTE3NTUsIDAuODEyNiwgMC44MTg4NCwgMC45MjgxOSwgMC43Mzc2NCwgMC45MDUzMSwgMC45MDI4NCwgMC44ODU4LCAwLjg2MDIzLCAwLjgxMjYsIDAuOTExNzIsIDAuOTY1MTgsIDAuOTExMTUsIDAuODMwODksIDAuODg1OCwgMC44Nzc5MSwgMC43OTc2MSwgMC44OTI5NywgMC44MTM2MywgMC44ODE1NywgMC44OTk5MiwgMC44NTYwOCwgMC44MTk5MiwgMC45NDMwNywgMC44NjAyMywgMC44ODE1NywgMC45NTMwOCwgMC45ODY5OSwgMC45OTc5MywgMS4wNjIyNiwgMC45NTgxNywgMC45NTMwOCwgMC45NzM1OCwgMC45MjgsIDAuOTgwODgsIDAuOTg2OTksIDAuOTI3NjEsIDAuOTk3OTMsIDAuOTYwMTcsIDEuMDYyMjYsIDAuOTg2LCAwLjk0NCwgMC45NTk3OCwgMC45MzgsIDAuOTY3MDUsIDAuOTg3MTQsIDAuODA0NDIsIDAuOTg5NzIsIDEsIDAuODk3NjIsIDEuMDQ1NTIsIDAuOTU4MTcsIDAuOTkwMDcsIDAuODcwNjQsIDAuOTE4NzksIDAuODg4ODgsIDEuMDYyMjYsIDAuOTU4MTcsIDAuOTg3MTQsIDAuOTU4MTcsIDAuODg4ODgsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAuODk2MzMsIDEuMDE5MTUsIDAuODk2MzMsIDEuMDE5MTUsIDAuODk2MzMsIDEuMDE5MTUsIDAuODExMSwgMC45NDIsIDAuOTIxOSwgMSwgMC44OTkwMywgMSwgMSwgMSwgMC45MzE3MywgMC45MzE3MywgMC45MzE3MywgMSwgMS4wNjMwNCwgMS4wNjMwNCwgMS4wNjkwNCwgMC44OTkwMywgMC44OTkwMywgMC44MDU0OSwgMSwgMS4xNTYsIDEsIDEsIDAuNzY1NzUsIDAuNzY1NzUsIDEsIDEsIDAuNzI0NTgsIDEsIDEsIDEsIDEsIDAuOTIyNDEsIDEsIDEsIDEsIDAuNjE5LCAxLCAxLjM2MTQ1LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLjA3MjU3LCAxLCAwLjc0NzA1LCAwLjcxMTE5LCAxLjAyMDU4LCAxLjAyNCwgMS4wMjExOSwgMSwgMSwgMS4xNTM2LCAxLjA4NTk1LCAxLjA4NTk1LCAxLCAxLjA4NTk1LCAxLjA4NTk1LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLjA1NjM4LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxXTsKY29uc3QgTXlyaWFkUHJvUmVndWxhck1ldHJpY3MgPSB7CiAgbGluZUhlaWdodDogMS4yLAogIGxpbmVHYXA6IDAuMgp9OwoKOy8vIC4vc3JjL2NvcmUvc2Vnb2V1aV9mYWN0b3JzLmpzCmNvbnN0IFNlZ29ldWlCb2xkRmFjdG9ycyA9IFsxLjc2NzM4LCAxLCAxLCAwLjk5Mjk3LCAwLjk4MjQsIDEuMDQwMTYsIDEuMDY0OTcsIDEuMDM0MjQsIDAuOTc1MjksIDEuMTc2NDcsIDEuMjMyMDMsIDEuMTA4NSwgMS4xMDg1LCAxLjE2OTM5LCAxLjIxMDcsIDAuOTc1NCwgMS4yMTQwOCwgMC45NzU0LCAxLjU5NTc4LCAxLjAzNDI0LCAxLjAzNDI0LCAxLjAzNDI0LCAxLjAzNDI0LCAxLjAzNDI0LCAxLjAzNDI0LCAxLjAzNDI0LCAxLjAzNDI0LCAxLjAzNDI0LCAxLjAzNDI0LCAwLjgxMzc4LCAwLjgxMzc4LCAxLjIxMDcsIDEuMjEwNywgMS4yMTA3LCAwLjcxNzAzLCAwLjk3ODQ3LCAwLjk3MzYzLCAwLjg4Nzc2LCAwLjg2NDEsIDEuMDIwOTYsIDAuNzk3OTUsIDAuODUxMzIsIDAuOTE0LCAxLjA2MDg1LCAxLjE0MDYsIDAuODAwNywgMC44OTg1OCwgMC44MzY5MywgMS4xNDg4OSwgMS4wOTM5OCwgMC45NzQ4OSwgMC45MjA5NCwgMC45NzQ4OSwgMC45MDM5OSwgMC44NDA0MSwgMC45NTkyMywgMS4wMDEzNSwgMSwgMS4wNjQ2NywgMC45ODI0MywgMC45MDk5NiwgMC45OTM2MSwgMS4xMDg1LCAxLjU2OTQyLCAxLjEwODUsIDEuMjEwNywgMC43NDYyNywgMC45NDI4MiwgMC45Njc1MiwgMS4wMTUxOSwgMC44NjMwNCwgMS4wMTM1OSwgMC45NzI3OCwgMS4xNTEwMywgMS4wMTM1OSwgMC45ODU2MSwgMS4wMjI4NSwgMS4wMjI4NSwgMS4wMDUyNywgMS4wMjI4NSwgMS4wMzAyLCAwLjk5MDQxLCAxLjAwMDgsIDEuMDE1MTksIDEuMDEzNTksIDEuMDIyNTgsIDAuNzkxMDQsIDEuMTY4NjIsIDAuOTkwNDEsIDAuOTc0NTQsIDEuMDI1MTEsIDAuOTkyOTgsIDAuOTY3NTIsIDAuOTU4MDEsIDAuOTQ4NTYsIDEuMTY1NzksIDAuOTQ4NTYsIDEuMjEwNywgMC45ODI0LCAxLjAzNDI0LCAxLjAzNDI0LCAxLCAxLjAzNDI0LCAxLjE2NTc5LCAwLjg3MjcsIDEuMzg3MSwgMS4xODYyMiwgMS4xMDgxOCwgMS4wNDQ3OCwgMS4yMTA3LCAxLjE4NjIyLCAwLjc1MTU1LCAwLjk0OTk0LCAxLjI4ODI2LCAxLjIxNDA4LCAxLjIxNDA4LCAwLjkxMDU2LCAxLCAwLjkxNTcyLCAwLjk3NTQsIDAuNjQ2NjMsIDEuMTgzMjgsIDEuMjQ4NjYsIDEuMDQ0NzgsIDEuMTQxNjksIDEuMTU3NDksIDEuMTczODksIDAuNzE3MDMsIDAuOTczNjMsIDAuOTczNjMsIDAuOTczNjMsIDAuOTczNjMsIDAuOTczNjMsIDAuOTczNjMsIDAuOTM1MDYsIDAuODY0MSwgMC43OTc5NSwgMC43OTc5NSwgMC43OTc5NSwgMC43OTc5NSwgMS4xNDA2LCAxLjE0MDYsIDEuMTQwNiwgMS4xNDA2LCAxLjAyMDk2LCAxLjA5Mzk4LCAwLjk3NDI2LCAwLjk3NDI2LCAwLjk3NDI2LCAwLjk3NDI2LCAwLjk3NDI2LCAxLjIxMDcsIDAuOTc0ODksIDEuMDAxMzUsIDEuMDAxMzUsIDEuMDAxMzUsIDEuMDAxMzUsIDAuOTA5OTYsIDAuOTIwOTQsIDEuMDI3OTgsIDAuOTY3NTIsIDAuOTY3NTIsIDAuOTY3NTIsIDAuOTY3NTIsIDAuOTY3NTIsIDAuOTY3NTIsIDAuOTMxMzYsIDAuODYzMDQsIDAuOTcyNzgsIDAuOTcyNzgsIDAuOTcyNzgsIDAuOTcyNzgsIDEuMDIyODUsIDEuMDIyODUsIDEuMDIyODUsIDEuMDIyODUsIDAuOTcxMjIsIDAuOTkwNDEsIDEsIDEsIDEsIDEsIDEsIDEuMjg4MjYsIDEuMDAwOCwgMC45OTA0MSwgMC45OTA0MSwgMC45OTA0MSwgMC45OTA0MSwgMC45Njc1MiwgMS4wMTUxOSwgMC45Njc1MiwgMC45NzM2MywgMC45Njc1MiwgMC45NzM2MywgMC45Njc1MiwgMC45NzM2MywgMC45Njc1MiwgMC44NjQxLCAwLjg2MzA0LCAwLjg2NDEsIDAuODYzMDQsIDAuODY0MSwgMC44NjMwNCwgMC44NjQxLCAwLjg2MzA0LCAxLjAyMDk2LCAxLjAzMDU3LCAxLjAyMDk2LCAxLjAzNTE3LCAwLjc5Nzk1LCAwLjk3Mjc4LCAwLjc5Nzk1LCAwLjk3Mjc4LCAwLjc5Nzk1LCAwLjk3Mjc4LCAwLjc5Nzk1LCAwLjk3Mjc4LCAwLjc5Nzk1LCAwLjk3Mjc4LCAwLjkxNCwgMS4wMTM1OSwgMC45MTQsIDEuMDEzNTksIDAuOTE0LCAxLjAxMzU5LCAxLCAxLCAxLjA2MDg1LCAwLjk4NTYxLCAxLjA2MDg1LCAxLjAwODc5LCAxLjE0MDYsIDEuMDIyODUsIDEuMTQwNiwgMS4wMjI4NSwgMS4xNDA2LCAxLjAyMjg1LCAxLjE0MDYsIDEuMDIyODUsIDEuMTQwNiwgMS4wMjI4NSwgMC45NzEzOCwgMS4wODY5MiwgMC44MDA3LCAxLjAyMjg1LCAxLCAxLCAxLjAwNTI3LCAwLjgzNjkzLCAxLjAyMjg1LCAxLCAxLCAwLjgzNjkzLCAwLjk0NTUsIDAuODM2OTMsIDAuOTA0MTgsIDAuODM2OTMsIDEuMTMwMDUsIDEuMDkzOTgsIDAuOTkwNDEsIDEsIDEsIDEuMDkzOTgsIDAuOTkwNDEsIDAuOTY2OTIsIDEuMDkyNTEsIDAuOTkwNDEsIDAuOTc0ODksIDEuMDAwOCwgMC45NzQ4OSwgMS4wMDA4LCAwLjk3NDg5LCAxLjAwMDgsIDAuOTM5OTQsIDAuOTc5MzEsIDAuOTAzOTksIDEuMDIyNTgsIDEsIDEsIDAuOTAzOTksIDEuMDIyNTgsIDAuODQwNDEsIDAuNzkxMDQsIDAuODQwNDEsIDAuNzkxMDQsIDAuODQwNDEsIDAuNzkxMDQsIDAuODQwNDEsIDAuNzkxMDQsIDEsIDEsIDAuOTU5MjMsIDEuMDcwMzQsIDAuOTU5MjMsIDEuMTY4NjIsIDEuMDAxMzUsIDAuOTkwNDEsIDEuMDAxMzUsIDAuOTkwNDEsIDEuMDAxMzUsIDAuOTkwNDEsIDEuMDAxMzUsIDAuOTkwNDEsIDEuMDAxMzUsIDAuOTkwNDEsIDEuMDAxMzUsIDAuOTkwNDEsIDEuMDY0NjcsIDEuMDI1MTEsIDAuOTA5OTYsIDAuOTY3NTIsIDAuOTA5OTYsIDAuOTkzNjEsIDAuOTU4MDEsIDAuOTkzNjEsIDAuOTU4MDEsIDAuOTkzNjEsIDAuOTU4MDEsIDEuMDc3MzMsIDEuMDM0MjQsIDAuOTczNjMsIDAuOTY3NTIsIDAuOTM1MDYsIDAuOTMxMzYsIDAuOTc0ODksIDEuMDAwOCwgMSwgMSwgMC45NTkyMywgMS4xNjg2MiwgMS4xNTEwMywgMS4xNTEwMywgMS4wMTE3MywgMS4wMzk1OSwgMC43NTk1MywgMC44MTM3OCwgMC43OTkxMiwgMS4xNTEwMywgMS4yMTk5NCwgMC45NTE2MSwgMC44NzgxNSwgMS4wMTE0OSwgMC44MTUyNSwgMC43Njc2LCAwLjk4MTY3LCAxLjAxMTM0LCAxLjAyNTQ2LCAwLjg0MDk3LCAxLjAzMDg5LCAxLjE4MTAyLCAwLjk3MzYzLCAwLjg4Nzc2LCAwLjg1MTM0LCAwLjk3ODI2LCAwLjc5Nzk1LCAwLjk5MzYxLCAxLjA2MDg1LCAwLjk3NDg5LCAxLjE0MDYsIDAuODk4NTgsIDEuMDM4OCwgMS4xNDg4OSwgMS4wOTM5OCwgMC44NjAzOSwgMC45NzQ4OSwgMS4wNTk1LCAwLjkyMDk0LCAwLjk0NzkzLCAwLjk1OTIzLCAwLjkwOTk2LCAwLjk5MzQ2LCAwLjk4MjQzLCAxLjAyMTEyLCAwLjk1NDkzLCAxLjE0MDYsIDAuOTA5OTYsIDEuMDM1NzQsIDEuMDI1OTcsIDEuMDAwOCwgMS4xODEwMiwgMS4wNjYyOCwgMS4wMzU3NCwgMS4wMTkyLCAxLjAxOTMyLCAxLjAwODg2LCAwLjk3NTMxLCAxLjAxMDYsIDEuMDAwOCwgMS4xMzE4OSwgMS4xODEwMiwgMS4wMjI3NywgMC45ODY4MywgMS4wMDE2LCAwLjk5NTYxLCAxLjA3MjM3LCAxLjAwMDgsIDAuOTA0MzQsIDAuOTk5MjEsIDAuOTM4MDMsIDAuODk2NSwgMS4yMzA4NSwgMS4wNjYyOCwgMS4wNDk4MywgMC45NjI2OCwgMS4wNDk5LCAwLjk4NDM5LCAxLjE4MTAyLCAxLjA2NjI4LCAxLjAwMDgsIDEuMDY2MjgsIDAuOTg0MzksIDAuNzk3OTUsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEuMDk0NjYsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAuOTcyNzgsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEuMDIwNjUsIDEsIDEsIDEsIDEsIDEsIDEsIDEuMDY0NjcsIDEuMDI1MTEsIDEuMDY0NjcsIDEuMDI1MTEsIDEuMDY0NjcsIDEuMDI1MTEsIDAuOTA5OTYsIDAuOTY3NTIsIDEsIDEuMjE0MDgsIDAuODk5MDMsIDEsIDEsIDAuNzUxNTUsIDEuMDQzOTQsIDEuMDQzOTQsIDEuMDQzOTQsIDEuMDQzOTQsIDAuOTg2MzMsIDAuOTg2MzMsIDAuOTg2MzMsIDAuNzMwNDcsIDAuNzMwNDcsIDEuMjA2NDIsIDAuOTEyMTEsIDEuMjU2MzUsIDEuMjIyLCAxLjAyOTU2LCAxLjAzMzcyLCAxLjAzMzcyLCAwLjk2MDM5LCAxLjI0NjMzLCAxLCAxLjEyNDU0LCAwLjkzNTAzLCAxLjAzNDI0LCAxLjE5Njg3LCAxLjAzNDI0LCAxLCAxLCAxLCAwLjc3MSwgMSwgMSwgMS4xNTc0OSwgMS4xNTc0OSwgMS4xNTc0OSwgMS4xMDk0OCwgMC44NjI3OSwgMC45NDQzNCwgMC44NjI3OSwgMC45NDQzNCwgMC44NjE4MiwgMSwgMSwgMS4xNjg5NywgMSwgMC45NjA4NSwgMC45MDEzNywgMS4yMTA3LCAxLjE4NDE2LCAxLjEzOTczLCAwLjY5ODI1LCAwLjk3MTYsIDIuMTAzMzksIDEuMjkwMDQsIDEuMjkwMDQsIDEuMjExNzIsIDEuMjkwMDQsIDEuMjkwMDQsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEuNDI2MDMsIDEsIDAuOTk4NjIsIDAuOTk4NjIsIDEsIDAuODcwMjUsIDAuODcwMjUsIDAuODcwMjUsIDAuODcwMjUsIDEuMTg4NzQsIDEuNDI2MDMsIDEsIDEuNDI2MDMsIDEuNDI2MDMsIDAuOTk4NjIsIDEsIDEsIDEsIDEsIDEsIDEuMjg4NiwgMS4wNDMxNSwgMS4xNTI5NiwgMS4zNDE2MywgMSwgMSwgMSwgMS4wOTE5MywgMS4wOTE5MywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMV07CmNvbnN0IFNlZ29ldWlCb2xkTWV0cmljcyA9IHsKICBsaW5lSGVpZ2h0OiAxLjMzMDA4LAogIGxpbmVHYXA6IDAKfTsKY29uc3QgU2Vnb2V1aUJvbGRJdGFsaWNGYWN0b3JzID0gWzEuNzY3MzgsIDEsIDEsIDAuOTg5NDYsIDEuMDM5NTksIDEuMDQwMTYsIDEuMDI4MDksIDEuMDM2LCAwLjk3NjM5LCAxLjEwOTUzLCAxLjIzMjAzLCAxLjExMTQ0LCAxLjExMTQ0LCAxLjE2OTM5LCAxLjIxMjM3LCAwLjk3NTQsIDEuMjEyNjEsIDAuOTc1NCwgMS41OTc1NCwgMS4wMzYsIDEuMDM2LCAxLjAzNiwgMS4wMzYsIDEuMDM2LCAxLjAzNiwgMS4wMzYsIDEuMDM2LCAxLjAzNiwgMS4wMzYsIDAuODEzNzgsIDAuODEzNzgsIDEuMjEyMzcsIDEuMjEyMzcsIDEuMjEyMzcsIDAuNzM1NDEsIDAuOTc4NDcsIDAuOTczNjMsIDAuODk3MjMsIDAuODc4OTcsIDEuMDQyNiwgMC43OTQyOSwgMC44NTI5MiwgMC45MTE0OSwgMS4wNTgxNSwgMS4xNDA2LCAwLjc5NjMxLCAwLjkwMTI4LCAwLjgzODUzLCAxLjA0Mzk2LCAxLjEwNjE1LCAwLjk3NTUyLCAwLjk0NDM2LCAwLjk3NTUyLCAwLjg4NjQxLCAwLjgwNTI3LCAwLjk2MDgzLCAxLjAwMTM1LCAxLCAxLjA2Nzc3LCAwLjk4MTcsIDAuOTExNDIsIDAuOTkzNjEsIDEuMTExNDQsIDEuNTcyOTMsIDEuMTExNDQsIDEuMjEyMzcsIDAuNzQ2MjcsIDEuMzE4MTgsIDEuMDY1ODUsIDAuOTcwNDIsIDAuODMwNTUsIDAuOTcwNDIsIDAuOTM1MDMsIDEuMTI2MSwgMC45NzA0MiwgMC45NzkyMiwgMS4xNDIzNiwgMC45NDU1MiwgMS4wMTA1NCwgMS4xNDIzNiwgMS4wMjQ3MSwgMC45NzkyMiwgMC45NDE2NSwgMC45NzA0MiwgMC45NzA0MiwgMS4wMjc2LCAwLjc4OTI5LCAxLjEyNjEsIDAuOTc5MjIsIDAuOTU4NzQsIDEuMDIxOTcsIDAuOTg1MDcsIDAuOTY3NTIsIDAuOTcxNjgsIDAuOTUxMDcsIDEuMTY1NzksIDAuOTUxMDcsIDEuMjEyMzcsIDEuMDM5NTksIDEuMDM2LCAxLjAzNiwgMSwgMS4wMzYsIDEuMTY1NzksIDAuODczNTcsIDEuMzE4MTgsIDEuMTg3NTQsIDEuMjY3ODEsIDEuMDUzNTYsIDEuMjEyMzcsIDEuMTg2MjIsIDAuNzk0ODcsIDAuOTQ5OTQsIDEuMjkwMDQsIDEuMjQwNDcsIDEuMjQwNDcsIDEuMzE4MTgsIDEsIDAuOTE0ODQsIDAuOTc1NCwgMS4zMTgxOCwgMS4xMzQ5LCAxLjI0ODY2LCAxLjA1MzU2LCAxLjEzOTM0LCAxLjE1NTc0LCAxLjE3Mzg5LCAwLjczNTQxLCAwLjk3MzYzLCAwLjk3MzYzLCAwLjk3MzYzLCAwLjk3MzYzLCAwLjk3MzYzLCAwLjk3MzYzLCAwLjk0Mzg1LCAwLjg3ODk3LCAwLjc5NDI5LCAwLjc5NDI5LCAwLjc5NDI5LCAwLjc5NDI5LCAxLjE0MDYsIDEuMTQwNiwgMS4xNDA2LCAxLjE0MDYsIDEuMDQyNiwgMS4xMDYxNSwgMC45NzU1MiwgMC45NzU1MiwgMC45NzU1MiwgMC45NzU1MiwgMC45NzU1MiwgMS4yMTIzNywgMC45NzU1MiwgMS4wMDEzNSwgMS4wMDEzNSwgMS4wMDEzNSwgMS4wMDEzNSwgMC45MTE0MiwgMC45NDQzNiwgMC45ODcyMSwgMS4wNjU4NSwgMS4wNjU4NSwgMS4wNjU4NSwgMS4wNjU4NSwgMS4wNjU4NSwgMS4wNjU4NSwgMC45NjcwNSwgMC44MzA1NSwgMC45MzUwMywgMC45MzUwMywgMC45MzUwMywgMC45MzUwMywgMS4xNDIzNiwgMS4xNDIzNiwgMS4xNDIzNiwgMS4xNDIzNiwgMC45MzEyNSwgMC45NzkyMiwgMC45NDE2NSwgMC45NDE2NSwgMC45NDE2NSwgMC45NDE2NSwgMC45NDE2NSwgMS4yOTAwNCwgMC45NDE2NSwgMC45NzkyMiwgMC45NzkyMiwgMC45NzkyMiwgMC45NzkyMiwgMC45Njc1MiwgMC45NzA0MiwgMC45Njc1MiwgMC45NzM2MywgMS4wNjU4NSwgMC45NzM2MywgMS4wNjU4NSwgMC45NzM2MywgMS4wNjU4NSwgMC44Nzg5NywgMC44MzA1NSwgMC44Nzg5NywgMC44MzA1NSwgMC44Nzg5NywgMC44MzA1NSwgMC44Nzg5NywgMC44MzA1NSwgMS4wNDI2LCAxLjAwMzMsIDEuMDQyNiwgMC45NzA0MiwgMC43OTQyOSwgMC45MzUwMywgMC43OTQyOSwgMC45MzUwMywgMC43OTQyOSwgMC45MzUwMywgMC43OTQyOSwgMC45MzUwMywgMC43OTQyOSwgMC45MzUwMywgMC45MTE0OSwgMC45NzA0MiwgMC45MTE0OSwgMC45NzA0MiwgMC45MTE0OSwgMC45NzA0MiwgMSwgMSwgMS4wNTgxNSwgMC45NzkyMiwgMS4wNTgxNSwgMC45NzkyMiwgMS4xNDA2LCAxLjE0MjM2LCAxLjE0MDYsIDEuMTQyMzYsIDEuMTQwNiwgMS4xNDIzNiwgMS4xNDA2LCAxLjE0MjM2LCAxLjE0MDYsIDEuMTQyMzYsIDAuOTc0NDEsIDEuMDQzMDIsIDAuNzk2MzEsIDEuMDE1ODIsIDEsIDEsIDEuMDEwNTQsIDAuODM4NTMsIDEuMTQyMzYsIDEsIDEsIDAuODM4NTMsIDEuMDkxMjUsIDAuODM4NTMsIDAuOTA0MTgsIDAuODM4NTMsIDEuMTk1MDgsIDEuMTA2MTUsIDAuOTc5MjIsIDEsIDEsIDEuMTA2MTUsIDAuOTc5MjIsIDEuMDEwMzQsIDEuMTA0NjYsIDAuOTc5MjIsIDAuOTc1NTIsIDAuOTQxNjUsIDAuOTc1NTIsIDAuOTQxNjUsIDAuOTc1NTIsIDAuOTQxNjUsIDAuOTE2MDIsIDAuOTE5ODEsIDAuODg2NDEsIDEuMDI3NiwgMSwgMSwgMC44ODY0MSwgMS4wMjc2LCAwLjgwNTI3LCAwLjc4OTI5LCAwLjgwNTI3LCAwLjc4OTI5LCAwLjgwNTI3LCAwLjc4OTI5LCAwLjgwNTI3LCAwLjc4OTI5LCAxLCAxLCAwLjk2MDgzLCAxLjA1NDAzLCAwLjk1OTIzLCAxLjE2ODYyLCAxLjAwMTM1LCAwLjk3OTIyLCAxLjAwMTM1LCAwLjk3OTIyLCAxLjAwMTM1LCAwLjk3OTIyLCAxLjAwMTM1LCAwLjk3OTIyLCAxLjAwMTM1LCAwLjk3OTIyLCAxLjAwMTM1LCAwLjk3OTIyLCAxLjA2Nzc3LCAxLjAyMTk3LCAwLjkxMTQyLCAwLjk2NzUyLCAwLjkxMTQyLCAwLjk5MzYxLCAwLjk3MTY4LCAwLjk5MzYxLCAwLjk3MTY4LCAwLjk5MzYxLCAwLjk3MTY4LCAxLjIzMTk5LCAxLjAzNiwgMC45NzM2MywgMS4wNjU4NSwgMC45NDM4NSwgMC45NjcwNSwgMC45NzU1MiwgMC45NDE2NSwgMSwgMSwgMC45NjA4MywgMS4xMjYxLCAxLjMxODE4LCAxLjMxODE4LCAxLjMxODE4LCAxLjMxODE4LCAxLjMxODE4LCAxLjMxODE4LCAxLjMxODE4LCAxLjMxODE4LCAxLjMxODE4LCAwLjk1MTYxLCAxLjI3MTI2LCAxLjAwODExLCAwLjgzMjg0LCAwLjc3NzAyLCAwLjk5MTM3LCAwLjk1MjUzLCAxLjAzNDcsIDAuODYxNDIsIDEuMDcyMDUsIDEuMTQyMzYsIDAuOTczNjMsIDAuODk3MjMsIDAuODY4NjksIDEuMDk4MTgsIDAuNzk0MjksIDAuOTkzNjEsIDEuMDU4MTUsIDAuOTc1NTIsIDEuMTQwNiwgMC45MDEyOCwgMS4wNjY2MiwgMS4wNDM5NiwgMS4xMDYxNSwgMC44NDkxOCwgMC45NzU1MiwgMS4wNDY5NCwgMC45NDQzNiwgMC45ODAxNSwgMC45NjA4MywgMC45MTE0MiwgMS4wMDM1NiwgMC45ODE3LCAxLjAxOTQ1LCAwLjk4OTk5LCAxLjE0MDYsIDAuOTExNDIsIDEuMDQ5NjEsIDAuOTg5OCwgMS4wMDYzOSwgMS4xNDIzNiwgMS4wNzUxNCwgMS4wNDk2MSwgMC45OTYwNywgMS4wMjg5NywgMS4wMDgsIDAuOTg5OCwgMC45NTEzNCwgMS4wMDYzOSwgMS4xMTEyMSwgMS4xNDIzNiwgMS4wMDUxOCwgMC45Nzk4MSwgMS4wMjE4NiwgMSwgMS4wODU3OCwgMC45NDE2NSwgMC45OTMxNCwgMC45ODM4NywgMC45MzAyOCwgMC45MzM3NywgMS4zNTEyNSwgMS4wNzUxNCwgMS4xMDY4NywgMC45MzQ5MSwgMS4wNDIzMiwgMS4wMDM1MSwgMS4xNDIzNiwgMS4wNzUxNCwgMC45NDE2NSwgMS4wNzUxNCwgMS4wMDM1MSwgMC43OTQyOSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMS4wOTA5NywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMC45MzUwMywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMC45NjYwOSwgMSwgMSwgMSwgMSwgMSwgMSwgMS4wNjc3NywgMS4wMjE5NywgMS4wNjc3NywgMS4wMjE5NywgMS4wNjc3NywgMS4wMjE5NywgMC45MTE0MiwgMC45Njc1MiwgMSwgMS4yMTI2MSwgMC44OTkwMywgMSwgMSwgMC43NTE1NSwgMS4wNDc0NSwgMS4wNDc0NSwgMS4wNDc0NSwgMS4wNDM5NCwgMC45ODYzMywgMC45ODYzMywgMC45ODYzMywgMC43Mjk1OSwgMC43Mjk1OSwgMS4yMDUwMiwgMC45MTQwNiwgMS4yNjUxNCwgMS4yMjIsIDEuMDI5NTYsIDEuMDMzNzIsIDEuMDMzNzIsIDAuOTYwMzksIDEuMjQ2MzMsIDEsIDEuMDkxMjUsIDAuOTMzMjcsIDEuMDMzMzYsIDEuMTY1NDEsIDEuMDM2LCAxLCAxLCAxLCAwLjc3MSwgMSwgMSwgMS4xNTU3NCwgMS4xNTU3NCwgMS4xNTU3NCwgMS4xNTU3NCwgMC44NjM2NCwgMC45NDQzNCwgMC44NjI3OSwgMC45NDQzNCwgMC44NjIyNCwgMSwgMSwgMS4xNjc5OCwgMSwgMC45NjA4NSwgMC45MDA2OCwgMS4yMTIzNywgMS4xODQxNiwgMS4xMzkwNCwgMC42OTgyNSwgMC45NzE2LCAyLjEwMzM5LCAxLjI5MDA0LCAxLjI5MDA0LCAxLjIxMzM5LCAxLjI5MDA0LCAxLjI5MDA0LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLjQyNjAzLCAxLCAwLjk5ODYyLCAwLjk5ODYyLCAxLCAwLjg3MDI1LCAwLjg3MDI1LCAwLjg3MDI1LCAwLjg3MDI1LCAxLjE4Nzc1LCAxLjQyNjAzLCAxLCAxLjQyNjAzLCAxLjQyNjAzLCAwLjk5ODYyLCAxLCAxLCAxLCAxLCAxLCAxLjI4ODYsIDEuMDQzMTUsIDEuMTUyOTYsIDEuMzQxNjMsIDEsIDEsIDEsIDEuMTMyNjksIDEuMTMyNjksIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDFdOwpjb25zdCBTZWdvZXVpQm9sZEl0YWxpY01ldHJpY3MgPSB7CiAgbGluZUhlaWdodDogMS4zMzAwOCwKICBsaW5lR2FwOiAwCn07CmNvbnN0IFNlZ29ldWlJdGFsaWNGYWN0b3JzID0gWzEuNzY3MzgsIDEsIDEsIDAuOTg5NDYsIDEuMTQ3NjMsIDEuMDUzNjUsIDEuMDYyMzQsIDAuOTY5MjcsIDAuOTI1ODYsIDEuMTUzNzMsIDEuMTg0MTQsIDAuOTEzNDksIDAuOTEzNDksIDEuMDc0MDMsIDEuMTczMDgsIDAuNzgzODMsIDEuMjAwODgsIDAuNzgzODMsIDEuNDI1MzEsIDAuOTY5MjcsIDAuOTY5MjcsIDAuOTY5MjcsIDAuOTY5MjcsIDAuOTY5MjcsIDAuOTY5MjcsIDAuOTY5MjcsIDAuOTY5MjcsIDAuOTY5MjcsIDAuOTY5MjcsIDAuNzgzODMsIDAuNzgzODMsIDEuMTczMDgsIDEuMTczMDgsIDEuMTczMDgsIDAuNzczNDksIDAuOTQ1NjUsIDAuOTQ3MjksIDAuODU5NDQsIDAuODg1MDYsIDAuOTg1OCwgMC43NDgxNywgMC44MDAxNiwgMC44ODQ0OSwgMC45ODAzOSwgMC45NTc4MiwgMC42OTIzOCwgMC44OTg5OCwgMC44MzIzMSwgMC45ODE4MywgMS4wMzk4OSwgMC45NjkyNCwgMC44NjIzNywgMC45NjkyNCwgMC44MDU5NSwgMC43NDUyNCwgMC44NjA5MSwgMC45NTQwMiwgMC45NDE0MywgMC45ODQ0OCwgMC44ODU4LCAwLjgzMDg5LCAwLjkzMjg1LCAxLjA5NDksIDEuMzkwMTYsIDEuMDk0OSwgMS40NTk5NCwgMC43NDYyNywgMS4wNDgzOSwgMC45NzQ1NCwgMC45NzQ1NCwgMC44NzIwNywgMC45NzQ1NCwgMC44NzUzMywgMS4wNjE1MSwgMC45NzQ1NCwgMS4wMDE3NiwgMS4xNjQ4NCwgMS4wODEzMiwgMC45ODA0NywgMS4xNjQ4NCwgMS4wMjk4OSwgMS4wMTA1NCwgMC45NjIyNSwgMC45NzQ1NCwgMC45NzQ1NCwgMS4wNjU5OCwgMC43OTAwNCwgMS4xNjM0NCwgMS4wMDM1MSwgMC45NDYyOSwgMC45OTczLCAwLjkxMDE2LCAwLjk2Nzc3LCAwLjkwNDMsIDAuOTEwODIsIDAuOTI0ODEsIDAuOTEwODIsIDEuMTczMDgsIDAuOTU3NDgsIDAuOTY5MjcsIDAuOTY5MjcsIDEsIDAuOTY5MjcsIDAuOTI0ODEsIDAuODA1OTcsIDEuMDQ4MzksIDEuMjMzOTMsIDEuMTc4MSwgMC45MjQ1LCAxLjE3MzA4LCAxLjIwODA4LCAwLjYzMjE4LCAwLjk0MjYxLCAxLjI0ODIyLCAxLjA5OTcxLCAxLjA5OTcxLCAxLjA0ODM5LCAxLCAwLjg1MjczLCAwLjc4MDMyLCAxLjA0ODM5LCAxLjA5OTcxLCAxLjIyMzI2LCAwLjkyNDUsIDEuMDk4MzYsIDEuMTM1MjUsIDEuMTUyMjIsIDAuNzA0MjQsIDAuOTQ3MjksIDAuOTQ3MjksIDAuOTQ3MjksIDAuOTQ3MjksIDAuOTQ3MjksIDAuOTQ3MjksIDAuODU0OTgsIDAuODg1MDYsIDAuNzQ4MTcsIDAuNzQ4MTcsIDAuNzQ4MTcsIDAuNzQ4MTcsIDAuOTU3ODIsIDAuOTU3ODIsIDAuOTU3ODIsIDAuOTU3ODIsIDAuOTg1OCwgMS4wMzk4OSwgMC45NjkyNCwgMC45NjkyNCwgMC45NjkyNCwgMC45NjkyNCwgMC45NjkyNCwgMS4xNzMwOCwgMC45NjkyNCwgMC45NTQwMiwgMC45NTQwMiwgMC45NTQwMiwgMC45NTQwMiwgMC44MzA4OSwgMC44NjIzNywgMC44ODQwOSwgMC45NzQ1NCwgMC45NzQ1NCwgMC45NzQ1NCwgMC45NzQ1NCwgMC45NzQ1NCwgMC45NzQ1NCwgMC45MjkxNiwgMC44NzIwNywgMC44NzUzMywgMC44NzUzMywgMC44NzUzMywgMC44NzUzMywgMC45MzE0NiwgMC45MzE0NiwgMC45MzE0NiwgMC45MzE0NiwgMC45Mzg1NCwgMS4wMTA1NCwgMC45NjIyNSwgMC45NjIyNSwgMC45NjIyNSwgMC45NjIyNSwgMC45NjIyNSwgMS4yNDgyMiwgMC44NzYxLCAxLjAwMzUxLCAxLjAwMzUxLCAxLjAwMzUxLCAxLjAwMzUxLCAwLjk2Nzc3LCAwLjk3NDU0LCAwLjk2Nzc3LCAwLjk0NzI5LCAwLjk3NDU0LCAwLjk0NzI5LCAwLjk3NDU0LCAwLjk0NzI5LCAwLjk3NDU0LCAwLjg4NTA2LCAwLjg3MjA3LCAwLjg4NTA2LCAwLjg3MjA3LCAwLjg4NTA2LCAwLjg3MjA3LCAwLjg4NTA2LCAwLjg3MjA3LCAwLjk4NTgsIDAuOTUzOTEsIDAuOTg1OCwgMC45NzQ1NCwgMC43NDgxNywgMC44NzUzMywgMC43NDgxNywgMC44NzUzMywgMC43NDgxNywgMC44NzUzMywgMC43NDgxNywgMC44NzUzMywgMC43NDgxNywgMC44NzUzMywgMC44ODQ0OSwgMC45NzQ1NCwgMC44ODQ0OSwgMC45NzQ1NCwgMC44ODQ0OSwgMC45NzQ1NCwgMSwgMSwgMC45ODAzOSwgMS4wMDE3NiwgMC45ODAzOSwgMS4wMDE3NiwgMC45NTc4MiwgMC45MzE0NiwgMC45NTc4MiwgMC45MzE0NiwgMC45NTc4MiwgMC45MzE0NiwgMC45NTc4MiwgMS4xNjQ4NCwgMC45NTc4MiwgMC45MzE0NiwgMC44NDQyMSwgMS4xMjc2MSwgMC42OTIzOCwgMS4wODEzMiwgMSwgMSwgMC45ODA0NywgMC44MzIzMSwgMS4xNjQ4NCwgMSwgMSwgMC44NDcyMywgMS4wNDg2MSwgMC44NDcyMywgMC43ODc1NSwgMC44MzIzMSwgMS4yMzczNiwgMS4wMzk4OSwgMS4wMTA1NCwgMSwgMSwgMS4wMzk4OSwgMS4wMTA1NCwgMC45ODU3LCAxLjAzODQ5LCAxLjAxMDU0LCAwLjk2OTI0LCAwLjk2MjI1LCAwLjk2OTI0LCAwLjk2MjI1LCAwLjk2OTI0LCAwLjk2MjI1LCAwLjkyMzgzLCAwLjkwMTcxLCAwLjgwNTk1LCAxLjA2NTk4LCAxLCAxLCAwLjgwNTk1LCAxLjA2NTk4LCAwLjc0NTI0LCAwLjc5MDA0LCAwLjc0NTI0LCAwLjc5MDA0LCAwLjc0NTI0LCAwLjc5MDA0LCAwLjc0NTI0LCAwLjc5MDA0LCAxLCAxLCAwLjg2MDkxLCAxLjAyNzU5LCAwLjg1NzcxLCAxLjE2MzQ0LCAwLjk1NDAyLCAxLjAwMzUxLCAwLjk1NDAyLCAxLjAwMzUxLCAwLjk1NDAyLCAxLjAwMzUxLCAwLjk1NDAyLCAxLjAwMzUxLCAwLjk1NDAyLCAxLjAwMzUxLCAwLjk1NDAyLCAxLjAwMzUxLCAwLjk4NDQ4LCAwLjk5NzMsIDAuODMwODksIDAuOTY3NzcsIDAuODMwODksIDAuOTMyODUsIDAuOTA0MywgMC45MzI4NSwgMC45MDQzLCAwLjkzMjg1LCAwLjkwNDMsIDEuMzE4NjgsIDAuOTY5MjcsIDAuOTQ3MjksIDAuOTc0NTQsIDAuODU0OTgsIDAuOTI5MTYsIDAuOTY5MjQsIDAuODc2MSwgMSwgMSwgMC44NjA5MSwgMS4xNjM0NCwgMS4wNDgzOSwgMS4wNDgzOSwgMS4wNDgzOSwgMS4wNDgzOSwgMS4wNDgzOSwgMS4wNDgzOSwgMS4wNDgzOSwgMS4wNDgzOSwgMS4wNDgzOSwgMC44MTk2NSwgMC44MTk2NSwgMC45NDcyOSwgMC43ODAzMiwgMC43MTAyMiwgMC45MDg4MywgMC44NDE3MSwgMC45OTg3NywgMC43NzU5NiwgMS4wNTczNCwgMS4yLCAwLjk0NzI5LCAwLjg1OTQ0LCAwLjgyNzkxLCAwLjk2MDcsIDAuNzQ4MTcsIDAuOTMyODUsIDAuOTgwMzksIDAuOTY5MjQsIDAuOTU3ODIsIDAuODk4OTgsIDAuOTgzMTYsIDAuOTgxODMsIDEuMDM5ODksIDAuNzg2MTQsIDAuOTY5MjQsIDAuOTc2NDIsIDAuODYyMzcsIDAuODYwNzUsIDAuODYwOTEsIDAuODMwODksIDAuOTAwODIsIDAuODg1OCwgMC45NzI5NiwgMS4wMTI4NCwgMC45NTc4MiwgMC44MzA4OSwgMS4wOTc2LCAxLjA0LCAxLjAzMzQyLCAxLjIsIDEuMDY3NSwgMS4wOTc2LCAwLjk4MjA1LCAxLjAzODA5LCAxLjA1MDk3LCAxLjA0LCAwLjk1MzY0LCAxLjAzMzQyLCAxLjA1NDAxLCAxLjIsIDEuMDIxNDgsIDEuMDExOSwgMS4wNDcyNCwgMS4wMTI3LCAxLjAyNzMyLCAwLjk2MjI1LCAwLjg5NjUsIDAuOTc3ODMsIDAuOTM1NzQsIDAuOTQ4MTgsIDEuMzA2NzksIDEuMDY3NSwgMS4xMTgyNiwgMC45OTgyMSwgMS4wNTU3LCAxLjAzMjYsIDEuMiwgMS4wNjc1LCAwLjk2MjI1LCAxLjA2NzUsIDEuMDMyNiwgMC43NDgxNywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMS4wMzc1NCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMC44NzUzMywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMC45ODcwNSwgMSwgMSwgMSwgMSwgMSwgMSwgMC45ODQ0OCwgMC45OTczLCAwLjk4NDQ4LCAwLjk5NzMsIDAuOTg0NDgsIDAuOTk3MywgMC44MzA4OSwgMC45Njc3NywgMSwgMS4yMDA4OCwgMC44OTkwMywgMSwgMSwgMC43NTE1NSwgMC45NDk0NSwgMC45NDk0NSwgMC45NDk0NSwgMC45NDk0NSwgMS4xMjMxNywgMS4xMjMxNywgMS4xMjMxNywgMC42NzYwMywgMC42NzYwMywgMS4xNTYyMSwgMC43MzU4NCwgMS4yMTE5MSwgMS4yMjEzNSwgMS4wNjQ4MywgMC45NDg2OCwgMC45NDg2OCwgMC45NTk5NiwgMS4yNDYzMywgMSwgMS4wNzQ5NywgMC44NzcwOSwgMC45NjkyNywgMS4wMTQ3MywgMC45NjkyNywgMSwgMSwgMSwgMC43NzI5NSwgMSwgMSwgMS4wOTgzNiwgMS4wOTgzNiwgMS4wOTgzNiwgMS4wMTUyMiwgMC44NjMyMSwgMC45NDQzNCwgMC44NjQ5LCAwLjk0NDM0LCAwLjg2MTgyLCAxLCAxLCAxLjA4MywgMSwgMC45MTU3OCwgMC44NjQzOCwgMS4xNzMwOCwgMS4xODQxNiwgMS4xNDU4OSwgMC42OTgyNSwgMC45NzYyMiwgMS45Njc5MSwgMS4yNDgyMiwgMS4yNDgyMiwgMS4xNzMwOCwgMS4yNDgyMiwgMS4yNDgyMiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMS40MjYwMywgMSwgMC45OTg2MiwgMC45OTg2MiwgMSwgMC44NzAyNSwgMC44NzAyNSwgMC44NzAyNSwgMC44NzAyNSwgMS4xNzk4NCwgMS40MjYwMywgMSwgMS40MjYwMywgMS40MjYwMywgMC45OTg2MiwgMSwgMSwgMSwgMSwgMSwgMS4yODg2LCAxLjA0MzE1LCAxLjE1Mjk2LCAxLjM0MTYzLCAxLCAxLCAxLCAxLjEwNzQyLCAxLjEwNzQyLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxXTsKY29uc3QgU2Vnb2V1aUl0YWxpY01ldHJpY3MgPSB7CiAgbGluZUhlaWdodDogMS4zMzAwOCwKICBsaW5lR2FwOiAwCn07CmNvbnN0IFNlZ29ldWlSZWd1bGFyRmFjdG9ycyA9IFsxLjc2NzM4LCAxLCAxLCAwLjk4NTk0LCAxLjAyMjg1LCAxLjEwNDU0LCAxLjA2MjM0LCAwLjk2OTI3LCAwLjkyMDM3LCAxLjE5OTg1LCAxLjIwNDYsIDAuOTA2MTYsIDAuOTA2MTYsIDEuMDcxNTIsIDEuMTcxNCwgMC43ODAzMiwgMS4yMDA4OCwgMC43ODAzMiwgMS40MDI0NiwgMC45NjkyNywgMC45NjkyNywgMC45NjkyNywgMC45NjkyNywgMC45NjkyNywgMC45NjkyNywgMC45NjkyNywgMC45NjkyNywgMC45NjkyNywgMC45NjkyNywgMC43ODAzMiwgMC43ODAzMiwgMS4xNzE0LCAxLjE3MTQsIDEuMTcxNCwgMC44MDU5NywgMC45NDA4NCwgMC45NjcwNiwgMC44NTk0NCwgMC44NTczNCwgMC45NzA5MywgMC43NTg0MiwgMC43OTkzNiwgMC44ODE5OCwgMC45ODMxLCAwLjk1NzgyLCAwLjcxMzg3LCAwLjg2OTY5LCAwLjg0NjM2LCAxLjA3Nzk2LCAxLjAzNTg0LCAwLjk2OTI0LCAwLjgzOTY4LCAwLjk2OTI0LCAwLjgyODI2LCAwLjc5NjQ5LCAwLjg1NzcxLCAwLjk1MTMyLCAwLjkzMTE5LCAwLjk4OTY1LCAwLjg4NDMzLCAwLjgyODcsIDAuOTMzNjUsIDEuMDg2MTIsIDEuMzYzOCwgMS4wODYxMiwgMS40NTc4NiwgMC43NDYyNywgMC44MDQ5OSwgMC45MTQ4NCwgMS4wNTcwNywgMC45MjM4MywgMS4wNTg4MiwgMC45NDAzLCAxLjEyNjU0LCAxLjA1ODgyLCAxLjAxNzU2LCAxLjA5MDExLCAxLjA5MDExLCAwLjk5NDE0LCAxLjA5MDExLCAxLjAzNCwgMS4wMTc1NiwgMS4wNTM1NiwgMS4wNTcwNywgMS4wNTg4MiwgMS4wNDM5OSwgMC44NDg2MywgMS4yMTk2OCwgMS4wMTc1NiwgMC45NTgwMSwgMS4wMDA2OCwgMC45MTc5NywgMC45Njc3NywgMC45MDQzLCAwLjkwMzUxLCAwLjkyMTA1LCAwLjkwMzUxLCAxLjE3MTQsIDAuODUzMzcsIDAuOTY5MjcsIDAuOTY5MjcsIDAuOTk5MTIsIDAuOTY5MjcsIDAuOTIxMDUsIDAuODA1OTcsIDEuMjQzNCwgMS4yMDgwOCwgMS4wNTkzNywgMC45MDk1NywgMS4xNzE0LCAxLjIwODA4LCAwLjc1MTU1LCAwLjk0MjYxLCAxLjI0NjQ0LCAxLjA5OTcxLCAxLjA5OTcxLCAwLjg0NzUxLCAxLCAwLjg1MjczLCAwLjc4MDMyLCAwLjYxNTg0LCAxLjA1NDI1LCAxLjE3OTE0LCAwLjkwOTU3LCAxLjA4NjY1LCAxLjExNTkzLCAxLjE0MTY5LCAwLjczMzgxLCAwLjk2NzA2LCAwLjk2NzA2LCAwLjk2NzA2LCAwLjk2NzA2LCAwLjk2NzA2LCAwLjk2NzA2LCAwLjg2MDM1LCAwLjg1NzM0LCAwLjc1ODQyLCAwLjc1ODQyLCAwLjc1ODQyLCAwLjc1ODQyLCAwLjk1NzgyLCAwLjk1NzgyLCAwLjk1NzgyLCAwLjk1NzgyLCAwLjk3MDkzLCAxLjAzNTg0LCAwLjk2OTI0LCAwLjk2OTI0LCAwLjk2OTI0LCAwLjk2OTI0LCAwLjk2OTI0LCAxLjE3MTQsIDAuOTY5MjQsIDAuOTUxMzIsIDAuOTUxMzIsIDAuOTUxMzIsIDAuOTUxMzIsIDAuODI4NywgMC44Mzk2OCwgMC44OTA0OSwgMC45MTQ4NCwgMC45MTQ4NCwgMC45MTQ4NCwgMC45MTQ4NCwgMC45MTQ4NCwgMC45MTQ4NCwgMC45MzU3NSwgMC45MjM4MywgMC45NDAzLCAwLjk0MDMsIDAuOTQwMywgMC45NDAzLCAwLjg3MTcsIDAuODcxNywgMC44NzE3LCAwLjg3MTcsIDEuMDA1MjcsIDEuMDE3NTYsIDEuMDUzNTYsIDEuMDUzNTYsIDEuMDUzNTYsIDEuMDUzNTYsIDEuMDUzNTYsIDEuMjQ2NDQsIDAuOTU5MjMsIDEuMDE3NTYsIDEuMDE3NTYsIDEuMDE3NTYsIDEuMDE3NTYsIDAuOTY3NzcsIDEuMDU3MDcsIDAuOTY3NzcsIDAuOTY3MDYsIDAuOTE0ODQsIDAuOTY3MDYsIDAuOTE0ODQsIDAuOTY3MDYsIDAuOTE0ODQsIDAuODU3MzQsIDAuOTIzODMsIDAuODU3MzQsIDAuOTIzODMsIDAuODU3MzQsIDAuOTIzODMsIDAuODU3MzQsIDAuOTIzODMsIDAuOTcwOTMsIDEuMDk2OSwgMC45NzA5MywgMS4wNTg4MiwgMC43NTg0MiwgMC45NDAzLCAwLjc1ODQyLCAwLjk0MDMsIDAuNzU4NDIsIDAuOTQwMywgMC43NTg0MiwgMC45NDAzLCAwLjc1ODQyLCAwLjk0MDMsIDAuODgxOTgsIDEuMDU4ODIsIDAuODgxOTgsIDEuMDU4ODIsIDAuODgxOTgsIDEuMDU4ODIsIDEsIDEsIDAuOTgzMSwgMS4wMTc1NiwgMC45ODMxLCAxLjAxNzU2LCAwLjk1NzgyLCAwLjg3MTcsIDAuOTU3ODIsIDAuODcxNywgMC45NTc4MiwgMC44NzE3LCAwLjk1NzgyLCAxLjA5MDExLCAwLjk1NzgyLCAwLjg3MTcsIDAuODQ3ODQsIDEuMTE1NTEsIDAuNzEzODcsIDEuMDkwMTEsIDEsIDEsIDAuOTk0MTQsIDAuODQ2MzYsIDEuMDkwMTEsIDEsIDEsIDAuODQ2MzYsIDEuMDUzNiwgMC44NDYzNiwgMC45NDI5OCwgMC44NDYzNiwgMS4yMzI5NywgMS4wMzU4NCwgMS4wMTc1NiwgMSwgMSwgMS4wMzU4NCwgMS4wMTc1NiwgMS4wMDMyMywgMS4wMzQ0NCwgMS4wMTc1NiwgMC45NjkyNCwgMS4wNTM1NiwgMC45NjkyNCwgMS4wNTM1NiwgMC45NjkyNCwgMS4wNTM1NiwgMC45MzA2NiwgMC45ODI5MywgMC44MjgyNiwgMS4wNDM5OSwgMSwgMSwgMC44MjgyNiwgMS4wNDM5OSwgMC43OTY0OSwgMC44NDg2MywgMC43OTY0OSwgMC44NDg2MywgMC43OTY0OSwgMC44NDg2MywgMC43OTY0OSwgMC44NDg2MywgMSwgMSwgMC44NTc3MSwgMS4xNzMxOCwgMC44NTc3MSwgMS4yMTk2OCwgMC45NTEzMiwgMS4wMTc1NiwgMC45NTEzMiwgMS4wMTc1NiwgMC45NTEzMiwgMS4wMTc1NiwgMC45NTEzMiwgMS4wMTc1NiwgMC45NTEzMiwgMS4wMTc1NiwgMC45NTEzMiwgMS4wMTc1NiwgMC45ODk2NSwgMS4wMDA2OCwgMC44Mjg3LCAwLjk2Nzc3LCAwLjgyODcsIDAuOTMzNjUsIDAuOTA0MywgMC45MzM2NSwgMC45MDQzLCAwLjkzMzY1LCAwLjkwNDMsIDEuMDg1NzEsIDAuOTY5MjcsIDAuOTY3MDYsIDAuOTE0ODQsIDAuODYwMzUsIDAuOTM1NzUsIDAuOTY5MjQsIDAuOTU5MjMsIDEsIDEsIDAuODU3NzEsIDEuMjE5NjgsIDEuMTE0MzcsIDEuMTE0MzcsIDAuOTMxMDksIDAuOTEyMDIsIDAuNjA0MTEsIDAuODQxNjQsIDAuNTU1NzIsIDEuMDExNzMsIDAuOTczNjEsIDAuODE4MTgsIDAuODE4MTgsIDAuOTY2MzUsIDAuNzgwMzIsIDAuNzI3MjcsIDAuOTIzNjYsIDAuOTg2MDEsIDEuMDM0MDUsIDAuNzc5NjgsIDEuMDk3OTksIDEuMiwgMC45NjcwNiwgMC44NTk0NCwgMC44NTYzOCwgMC45NjQ5MSwgMC43NTg0MiwgMC45MzM2NSwgMC45ODMxLCAwLjk2OTI0LCAwLjk1NzgyLCAwLjg2OTY5LCAwLjk0MTUyLCAxLjA3Nzk2LCAxLjAzNTg0LCAwLjc4NDM3LCAwLjk2OTI0LCAwLjk4NzE1LCAwLjgzOTY4LCAwLjgzNDkxLCAwLjg1NzcxLCAwLjgyODcsIDAuOTQ0OTIsIDAuODg0MzMsIDAuOTI4NywgMS4wMDk4LCAwLjk1NzgyLCAwLjgyODcsIDEuMDYyNSwgMC45ODI0OCwgMS4wMzQyNCwgMS4yLCAxLjAxMDcxLCAxLjA2MjUsIDAuOTUyNDYsIDEuMDM4MDksIDEuMDQ5MTIsIDAuOTgyNDgsIDEuMDAyMjEsIDEuMDM0MjQsIDEuMDU0NDMsIDEuMiwgMS4wNDc4NSwgMC45OTYwOSwgMS4wMDE2OSwgMS4wNTE3NiwgMC45OTM0NiwgMS4wNTM1NiwgMC45MDg3LCAxLjAzMDA0LCAwLjk1NTQyLCAwLjkzMTE3LCAxLjIzMzYyLCAxLjAxMDcxLCAxLjA3ODMxLCAxLjAyNTEyLCAxLjA1MjA1LCAxLjAzNTAyLCAxLjIsIDEuMDEwNzEsIDEuMDUzNTYsIDEuMDEwNzEsIDEuMDM1MDIsIDAuNzU4NDIsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEuMDM3MTksIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAuOTQwMywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMS4wNDAyMSwgMSwgMSwgMSwgMSwgMSwgMSwgMC45ODk2NSwgMS4wMDA2OCwgMC45ODk2NSwgMS4wMDA2OCwgMC45ODk2NSwgMS4wMDA2OCwgMC44Mjg3LCAwLjk2Nzc3LCAxLCAxLjIwMDg4LCAwLjg5OTAzLCAxLCAxLCAwLjc1MTU1LCAxLjAzMDc3LCAxLjAzMDc3LCAxLjAzMDc3LCAxLjAzMDc3LCAxLjEzMTk2LCAxLjEzMTk2LCAxLjEzMTk2LCAwLjY3NDI4LCAwLjY3NDI4LCAxLjE2MDM5LCAwLjczMjkxLCAxLjIwOTk2LCAxLjIyMTM1LCAxLjA2NDgzLCAwLjk0ODY4LCAwLjk0ODY4LCAwLjk1OTk2LCAxLjI0NjMzLCAxLCAxLjA3NDk3LCAwLjg3Nzk2LCAwLjk2OTI3LCAxLjAxNTE4LCAwLjk2OTI3LCAxLCAxLCAxLCAwLjc3Mjk1LCAxLCAxLCAxLjEwNTM5LCAxLjEwNTM5LCAxLjExMzU4LCAxLjA2OTY3LCAwLjg2Mjc5LCAwLjk0NDM0LCAwLjg2Mjc5LCAwLjk0NDM0LCAwLjg2MTgyLCAxLCAxLCAxLjA4MywgMSwgMC45MTU3OCwgMC44NjUwNywgMS4xNzE0LCAxLjE4NDE2LCAxLjE0NTg5LCAwLjY5ODI1LCAwLjk3NjIyLCAxLjk2OTcsIDEuMjQ4MjIsIDEuMjQ4MjIsIDEuMTcyMzgsIDEuMjQ4MjIsIDEuMjQ4MjIsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEuNDI2MDMsIDEsIDAuOTk4NjIsIDAuOTk4NjIsIDEsIDAuODcwMjUsIDAuODcwMjUsIDAuODcwMjUsIDAuODcwMjUsIDEuMTgwODMsIDEuNDI2MDMsIDEsIDEuNDI2MDMsIDEuNDI2MDMsIDAuOTk4NjIsIDEsIDEsIDEsIDEsIDEsIDEuMjg4NiwgMS4wNDMxNSwgMS4xNTI5NiwgMS4zNDE2MywgMSwgMSwgMSwgMS4xMDkzOCwgMS4xMDkzOCwgMSwgMSwgMSwgMS4wNTQyNSwgMS4wOTk3MSwgMS4wOTk3MSwgMS4wOTk3MSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMV07CmNvbnN0IFNlZ29ldWlSZWd1bGFyTWV0cmljcyA9IHsKICBsaW5lSGVpZ2h0OiAxLjMzMDA4LAogIGxpbmVHYXA6IDAKfTsKCjsvLyAuL3NyYy9jb3JlL3hmYV9mb250cy5qcwoKCgoKCgoKCmNvbnN0IGdldFhGQUZvbnRNYXAgPSBnZXRMb29rdXBUYWJsZUZhY3RvcnkoZnVuY3Rpb24gKHQpIHsKICB0WyJNeXJpYWRQcm8tUmVndWxhciJdID0gdFsiUGRmSlMtRmFsbGJhY2stUmVndWxhciJdID0gewogICAgbmFtZTogIkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIiLAogICAgZmFjdG9yczogTXlyaWFkUHJvUmVndWxhckZhY3RvcnMsCiAgICBiYXNlV2lkdGhzOiBMaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHMsCiAgICBiYXNlTWFwcGluZzogTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZywKICAgIG1ldHJpY3M6IE15cmlhZFByb1JlZ3VsYXJNZXRyaWNzCiAgfTsKICB0WyJNeXJpYWRQcm8tQm9sZCJdID0gdFsiUGRmSlMtRmFsbGJhY2stQm9sZCJdID0gewogICAgbmFtZTogIkxpYmVyYXRpb25TYW5zLUJvbGQiLAogICAgZmFjdG9yczogTXlyaWFkUHJvQm9sZEZhY3RvcnMsCiAgICBiYXNlV2lkdGhzOiBMaWJlcmF0aW9uU2Fuc0JvbGRXaWR0aHMsCiAgICBiYXNlTWFwcGluZzogTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZywKICAgIG1ldHJpY3M6IE15cmlhZFByb0JvbGRNZXRyaWNzCiAgfTsKICB0WyJNeXJpYWRQcm8tSXQiXSA9IHRbIk15cmlhZFByby1JdGFsaWMiXSA9IHRbIlBkZkpTLUZhbGxiYWNrLUl0YWxpYyJdID0gewogICAgbmFtZTogIkxpYmVyYXRpb25TYW5zLUl0YWxpYyIsCiAgICBmYWN0b3JzOiBNeXJpYWRQcm9JdGFsaWNGYWN0b3JzLAogICAgYmFzZVdpZHRoczogTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHMsCiAgICBiYXNlTWFwcGluZzogTGliZXJhdGlvblNhbnNJdGFsaWNNYXBwaW5nLAogICAgbWV0cmljczogTXlyaWFkUHJvSXRhbGljTWV0cmljcwogIH07CiAgdFsiTXlyaWFkUHJvLUJvbGRJdCJdID0gdFsiTXlyaWFkUHJvLUJvbGRJdGFsaWMiXSA9IHRbIlBkZkpTLUZhbGxiYWNrLUJvbGRJdGFsaWMiXSA9IHsKICAgIG5hbWU6ICJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljIiwKICAgIGZhY3RvcnM6IE15cmlhZFByb0JvbGRJdGFsaWNGYWN0b3JzLAogICAgYmFzZVdpZHRoczogTGliZXJhdGlvblNhbnNCb2xkSXRhbGljV2lkdGhzLAogICAgYmFzZU1hcHBpbmc6IExpYmVyYXRpb25TYW5zQm9sZEl0YWxpY01hcHBpbmcsCiAgICBtZXRyaWNzOiBNeXJpYWRQcm9Cb2xkSXRhbGljTWV0cmljcwogIH07CiAgdC5BcmlhbE1UID0gdC5BcmlhbCA9IHRbIkFyaWFsLVJlZ3VsYXIiXSA9IHsKICAgIG5hbWU6ICJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyIiwKICAgIGJhc2VXaWR0aHM6IExpYmVyYXRpb25TYW5zUmVndWxhcldpZHRocywKICAgIGJhc2VNYXBwaW5nOiBMaWJlcmF0aW9uU2Fuc1JlZ3VsYXJNYXBwaW5nCiAgfTsKICB0WyJBcmlhbC1Cb2xkTVQiXSA9IHRbIkFyaWFsLUJvbGQiXSA9IHsKICAgIG5hbWU6ICJMaWJlcmF0aW9uU2Fucy1Cb2xkIiwKICAgIGJhc2VXaWR0aHM6IExpYmVyYXRpb25TYW5zQm9sZFdpZHRocywKICAgIGJhc2VNYXBwaW5nOiBMaWJlcmF0aW9uU2Fuc0JvbGRNYXBwaW5nCiAgfTsKICB0WyJBcmlhbC1JdGFsaWNNVCJdID0gdFsiQXJpYWwtSXRhbGljIl0gPSB7CiAgICBuYW1lOiAiTGliZXJhdGlvblNhbnMtSXRhbGljIiwKICAgIGJhc2VXaWR0aHM6IExpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzLAogICAgYmFzZU1hcHBpbmc6IExpYmVyYXRpb25TYW5zSXRhbGljTWFwcGluZwogIH07CiAgdFsiQXJpYWwtQm9sZEl0YWxpY01UIl0gPSB0WyJBcmlhbC1Cb2xkSXRhbGljIl0gPSB7CiAgICBuYW1lOiAiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYyIsCiAgICBiYXNlV2lkdGhzOiBMaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHMsCiAgICBiYXNlTWFwcGluZzogTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZwogIH07CiAgdFsiQ2FsaWJyaS1SZWd1bGFyIl0gPSB7CiAgICBuYW1lOiAiTGliZXJhdGlvblNhbnMtUmVndWxhciIsCiAgICBmYWN0b3JzOiBDYWxpYnJpUmVndWxhckZhY3RvcnMsCiAgICBiYXNlV2lkdGhzOiBMaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHMsCiAgICBiYXNlTWFwcGluZzogTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZywKICAgIG1ldHJpY3M6IENhbGlicmlSZWd1bGFyTWV0cmljcwogIH07CiAgdFsiQ2FsaWJyaS1Cb2xkIl0gPSB7CiAgICBuYW1lOiAiTGliZXJhdGlvblNhbnMtQm9sZCIsCiAgICBmYWN0b3JzOiBDYWxpYnJpQm9sZEZhY3RvcnMsCiAgICBiYXNlV2lkdGhzOiBMaWJlcmF0aW9uU2Fuc0JvbGRXaWR0aHMsCiAgICBiYXNlTWFwcGluZzogTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZywKICAgIG1ldHJpY3M6IENhbGlicmlCb2xkTWV0cmljcwogIH07CiAgdFsiQ2FsaWJyaS1JdGFsaWMiXSA9IHsKICAgIG5hbWU6ICJMaWJlcmF0aW9uU2Fucy1JdGFsaWMiLAogICAgZmFjdG9yczogQ2FsaWJyaUl0YWxpY0ZhY3RvcnMsCiAgICBiYXNlV2lkdGhzOiBMaWJlcmF0aW9uU2Fuc0l0YWxpY1dpZHRocywKICAgIGJhc2VNYXBwaW5nOiBMaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmcsCiAgICBtZXRyaWNzOiBDYWxpYnJpSXRhbGljTWV0cmljcwogIH07CiAgdFsiQ2FsaWJyaS1Cb2xkSXRhbGljIl0gPSB7CiAgICBuYW1lOiAiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYyIsCiAgICBmYWN0b3JzOiBDYWxpYnJpQm9sZEl0YWxpY0ZhY3RvcnMsCiAgICBiYXNlV2lkdGhzOiBMaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHMsCiAgICBiYXNlTWFwcGluZzogTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZywKICAgIG1ldHJpY3M6IENhbGlicmlCb2xkSXRhbGljTWV0cmljcwogIH07CiAgdFsiU2Vnb2V1aS1SZWd1bGFyIl0gPSB7CiAgICBuYW1lOiAiTGliZXJhdGlvblNhbnMtUmVndWxhciIsCiAgICBmYWN0b3JzOiBTZWdvZXVpUmVndWxhckZhY3RvcnMsCiAgICBiYXNlV2lkdGhzOiBMaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHMsCiAgICBiYXNlTWFwcGluZzogTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZywKICAgIG1ldHJpY3M6IFNlZ29ldWlSZWd1bGFyTWV0cmljcwogIH07CiAgdFsiU2Vnb2V1aS1Cb2xkIl0gPSB7CiAgICBuYW1lOiAiTGliZXJhdGlvblNhbnMtQm9sZCIsCiAgICBmYWN0b3JzOiBTZWdvZXVpQm9sZEZhY3RvcnMsCiAgICBiYXNlV2lkdGhzOiBMaWJlcmF0aW9uU2Fuc0JvbGRXaWR0aHMsCiAgICBiYXNlTWFwcGluZzogTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZywKICAgIG1ldHJpY3M6IFNlZ29ldWlCb2xkTWV0cmljcwogIH07CiAgdFsiU2Vnb2V1aS1JdGFsaWMiXSA9IHsKICAgIG5hbWU6ICJMaWJlcmF0aW9uU2Fucy1JdGFsaWMiLAogICAgZmFjdG9yczogU2Vnb2V1aUl0YWxpY0ZhY3RvcnMsCiAgICBiYXNlV2lkdGhzOiBMaWJlcmF0aW9uU2Fuc0l0YWxpY1dpZHRocywKICAgIGJhc2VNYXBwaW5nOiBMaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmcsCiAgICBtZXRyaWNzOiBTZWdvZXVpSXRhbGljTWV0cmljcwogIH07CiAgdFsiU2Vnb2V1aS1Cb2xkSXRhbGljIl0gPSB7CiAgICBuYW1lOiAiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYyIsCiAgICBmYWN0b3JzOiBTZWdvZXVpQm9sZEl0YWxpY0ZhY3RvcnMsCiAgICBiYXNlV2lkdGhzOiBMaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHMsCiAgICBiYXNlTWFwcGluZzogTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZywKICAgIG1ldHJpY3M6IFNlZ29ldWlCb2xkSXRhbGljTWV0cmljcwogIH07CiAgdFsiSGVsdmV0aWNhLVJlZ3VsYXIiXSA9IHQuSGVsdmV0aWNhID0gewogICAgbmFtZTogIkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIiLAogICAgZmFjdG9yczogSGVsdmV0aWNhUmVndWxhckZhY3RvcnMsCiAgICBiYXNlV2lkdGhzOiBMaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHMsCiAgICBiYXNlTWFwcGluZzogTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZywKICAgIG1ldHJpY3M6IEhlbHZldGljYVJlZ3VsYXJNZXRyaWNzCiAgfTsKICB0WyJIZWx2ZXRpY2EtQm9sZCJdID0gewogICAgbmFtZTogIkxpYmVyYXRpb25TYW5zLUJvbGQiLAogICAgZmFjdG9yczogSGVsdmV0aWNhQm9sZEZhY3RvcnMsCiAgICBiYXNlV2lkdGhzOiBMaWJlcmF0aW9uU2Fuc0JvbGRXaWR0aHMsCiAgICBiYXNlTWFwcGluZzogTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZywKICAgIG1ldHJpY3M6IEhlbHZldGljYUJvbGRNZXRyaWNzCiAgfTsKICB0WyJIZWx2ZXRpY2EtSXRhbGljIl0gPSB7CiAgICBuYW1lOiAiTGliZXJhdGlvblNhbnMtSXRhbGljIiwKICAgIGZhY3RvcnM6IEhlbHZldGljYUl0YWxpY0ZhY3RvcnMsCiAgICBiYXNlV2lkdGhzOiBMaWJlcmF0aW9uU2Fuc0l0YWxpY1dpZHRocywKICAgIGJhc2VNYXBwaW5nOiBMaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmcsCiAgICBtZXRyaWNzOiBIZWx2ZXRpY2FJdGFsaWNNZXRyaWNzCiAgfTsKICB0WyJIZWx2ZXRpY2EtQm9sZEl0YWxpYyJdID0gewogICAgbmFtZTogIkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMiLAogICAgZmFjdG9yczogSGVsdmV0aWNhQm9sZEl0YWxpY0ZhY3RvcnMsCiAgICBiYXNlV2lkdGhzOiBMaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHMsCiAgICBiYXNlTWFwcGluZzogTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZywKICAgIG1ldHJpY3M6IEhlbHZldGljYUJvbGRJdGFsaWNNZXRyaWNzCiAgfTsKfSk7CmZ1bmN0aW9uIGdldFhmYUZvbnROYW1lKG5hbWUpIHsKICBjb25zdCBmb250TmFtZSA9IG5vcm1hbGl6ZUZvbnROYW1lKG5hbWUpOwogIGNvbnN0IGZvbnRNYXAgPSBnZXRYRkFGb250TWFwKCk7CiAgcmV0dXJuIGZvbnRNYXBbZm9udE5hbWVdOwp9CmZ1bmN0aW9uIGdldFhmYUZvbnRXaWR0aHMobmFtZSkgewogIGNvbnN0IGluZm8gPSBnZXRYZmFGb250TmFtZShuYW1lKTsKICBpZiAoIWluZm8pIHsKICAgIHJldHVybiBudWxsOwogIH0KICBjb25zdCB7CiAgICBiYXNlV2lkdGhzLAogICAgYmFzZU1hcHBpbmcsCiAgICBmYWN0b3JzCiAgfSA9IGluZm87CiAgY29uc3QgcmVzY2FsZWRCYXNlV2lkdGhzID0gIWZhY3RvcnMgPyBiYXNlV2lkdGhzIDogYmFzZVdpZHRocy5tYXAoKHcsIGkpID0+IHcgKiBmYWN0b3JzW2ldKTsKICBsZXQgY3VycmVudENvZGUgPSAtMjsKICBsZXQgY3VycmVudEFycmF5OwogIGNvbnN0IG5ld1dpZHRocyA9IFtdOwogIGZvciAoY29uc3QgW3VuaWNvZGUsIGdseXBoSW5kZXhdIG9mIGJhc2VNYXBwaW5nLm1hcCgoY2hhclVuaWNvZGUsIGluZGV4KSA9PiBbY2hhclVuaWNvZGUsIGluZGV4XSkuc29ydCgoW3VuaWNvZGUxXSwgW3VuaWNvZGUyXSkgPT4gdW5pY29kZTEgLSB1bmljb2RlMikpIHsKICAgIGlmICh1bmljb2RlID09PSAtMSkgewogICAgICBjb250aW51ZTsKICAgIH0KICAgIGlmICh1bmljb2RlID09PSBjdXJyZW50Q29kZSArIDEpIHsKICAgICAgY3VycmVudEFycmF5LnB1c2gocmVzY2FsZWRCYXNlV2lkdGhzW2dseXBoSW5kZXhdKTsKICAgICAgY3VycmVudENvZGUgKz0gMTsKICAgIH0gZWxzZSB7CiAgICAgIGN1cnJlbnRDb2RlID0gdW5pY29kZTsKICAgICAgY3VycmVudEFycmF5ID0gW3Jlc2NhbGVkQmFzZVdpZHRoc1tnbHlwaEluZGV4XV07CiAgICAgIG5ld1dpZHRocy5wdXNoKHVuaWNvZGUsIGN1cnJlbnRBcnJheSk7CiAgICB9CiAgfQogIHJldHVybiBuZXdXaWR0aHM7Cn0KZnVuY3Rpb24gZ2V0WGZhRm9udERpY3QobmFtZSkgewogIGNvbnN0IHdpZHRocyA9IGdldFhmYUZvbnRXaWR0aHMobmFtZSk7CiAgY29uc3QgZGljdCA9IG5ldyBEaWN0KG51bGwpOwogIGRpY3Quc2V0KCJCYXNlRm9udCIsIE5hbWUuZ2V0KG5hbWUpKTsKICBkaWN0LnNldCgiVHlwZSIsIE5hbWUuZ2V0KCJGb250IikpOwogIGRpY3Quc2V0KCJTdWJ0eXBlIiwgTmFtZS5nZXQoIkNJREZvbnRUeXBlMiIpKTsKICBkaWN0LnNldCgiRW5jb2RpbmciLCBOYW1lLmdldCgiSWRlbnRpdHktSCIpKTsKICBkaWN0LnNldCgiQ0lEVG9HSURNYXAiLCBOYW1lLmdldCgiSWRlbnRpdHkiKSk7CiAgZGljdC5zZXQoIlciLCB3aWR0aHMpOwogIGRpY3Quc2V0KCJGaXJzdENoYXIiLCB3aWR0aHNbMF0pOwogIGRpY3Quc2V0KCJMYXN0Q2hhciIsIHdpZHRocy5hdCgtMikgKyB3aWR0aHMuYXQoLTEpLmxlbmd0aCAtIDEpOwogIGNvbnN0IGRlc2NyaXB0b3IgPSBuZXcgRGljdChudWxsKTsKICBkaWN0LnNldCgiRm9udERlc2NyaXB0b3IiLCBkZXNjcmlwdG9yKTsKICBjb25zdCBzeXN0ZW1JbmZvID0gbmV3IERpY3QobnVsbCk7CiAgc3lzdGVtSW5mby5zZXQoIk9yZGVyaW5nIiwgIklkZW50aXR5Iik7CiAgc3lzdGVtSW5mby5zZXQoIlJlZ2lzdHJ5IiwgIkFkb2JlIik7CiAgc3lzdGVtSW5mby5zZXQoIlN1cHBsZW1lbnQiLCAwKTsKICBkaWN0LnNldCgiQ0lEU3lzdGVtSW5mbyIsIHN5c3RlbUluZm8pOwogIHJldHVybiBkaWN0Owp9Cgo7Ly8gLi9zcmMvY29yZS9wc19wYXJzZXIuanMKCgoKY2xhc3MgUG9zdFNjcmlwdFBhcnNlciB7CiAgY29uc3RydWN0b3IobGV4ZXIpIHsKICAgIHRoaXMubGV4ZXIgPSBsZXhlcjsKICAgIHRoaXMub3BlcmF0b3JzID0gW107CiAgICB0aGlzLnRva2VuID0gbnVsbDsKICAgIHRoaXMucHJldiA9IG51bGw7CiAgfQogIG5leHRUb2tlbigpIHsKICAgIHRoaXMucHJldiA9IHRoaXMudG9rZW47CiAgICB0aGlzLnRva2VuID0gdGhpcy5sZXhlci5nZXRUb2tlbigpOwogIH0KICBhY2NlcHQodHlwZSkgewogICAgaWYgKHRoaXMudG9rZW4udHlwZSA9PT0gdHlwZSkgewogICAgICB0aGlzLm5leHRUb2tlbigpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CiAgZXhwZWN0KHR5cGUpIHsKICAgIGlmICh0aGlzLmFjY2VwdCh0eXBlKSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcihgVW5leHBlY3RlZCBzeW1ib2w6IGZvdW5kICR7dGhpcy50b2tlbi50eXBlfSBleHBlY3RlZCAke3R5cGV9LmApOwogIH0KICBwYXJzZSgpIHsKICAgIHRoaXMubmV4dFRva2VuKCk7CiAgICB0aGlzLmV4cGVjdChQb3N0U2NyaXB0VG9rZW5UeXBlcy5MQlJBQ0UpOwogICAgdGhpcy5wYXJzZUJsb2NrKCk7CiAgICB0aGlzLmV4cGVjdChQb3N0U2NyaXB0VG9rZW5UeXBlcy5SQlJBQ0UpOwogICAgcmV0dXJuIHRoaXMub3BlcmF0b3JzOwogIH0KICBwYXJzZUJsb2NrKCkgewogICAgd2hpbGUgKHRydWUpIHsKICAgICAgaWYgKHRoaXMuYWNjZXB0KFBvc3RTY3JpcHRUb2tlblR5cGVzLk5VTUJFUikpIHsKICAgICAgICB0aGlzLm9wZXJhdG9ycy5wdXNoKHRoaXMucHJldi52YWx1ZSk7CiAgICAgIH0gZWxzZSBpZiAodGhpcy5hY2NlcHQoUG9zdFNjcmlwdFRva2VuVHlwZXMuT1BFUkFUT1IpKSB7CiAgICAgICAgdGhpcy5vcGVyYXRvcnMucHVzaCh0aGlzLnByZXYudmFsdWUpOwogICAgICB9IGVsc2UgaWYgKHRoaXMuYWNjZXB0KFBvc3RTY3JpcHRUb2tlblR5cGVzLkxCUkFDRSkpIHsKICAgICAgICB0aGlzLnBhcnNlQ29uZGl0aW9uKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9CiAgfQogIHBhcnNlQ29uZGl0aW9uKCkgewogICAgY29uc3QgY29uZGl0aW9uTG9jYXRpb24gPSB0aGlzLm9wZXJhdG9ycy5sZW5ndGg7CiAgICB0aGlzLm9wZXJhdG9ycy5wdXNoKG51bGwsIG51bGwpOwogICAgdGhpcy5wYXJzZUJsb2NrKCk7CiAgICB0aGlzLmV4cGVjdChQb3N0U2NyaXB0VG9rZW5UeXBlcy5SQlJBQ0UpOwogICAgaWYgKHRoaXMuYWNjZXB0KFBvc3RTY3JpcHRUb2tlblR5cGVzLklGKSkgewogICAgICB0aGlzLm9wZXJhdG9yc1tjb25kaXRpb25Mb2NhdGlvbl0gPSB0aGlzLm9wZXJhdG9ycy5sZW5ndGg7CiAgICAgIHRoaXMub3BlcmF0b3JzW2NvbmRpdGlvbkxvY2F0aW9uICsgMV0gPSAianoiOwogICAgfSBlbHNlIGlmICh0aGlzLmFjY2VwdChQb3N0U2NyaXB0VG9rZW5UeXBlcy5MQlJBQ0UpKSB7CiAgICAgIGNvbnN0IGp1bXBMb2NhdGlvbiA9IHRoaXMub3BlcmF0b3JzLmxlbmd0aDsKICAgICAgdGhpcy5vcGVyYXRvcnMucHVzaChudWxsLCBudWxsKTsKICAgICAgY29uc3QgZW5kT2ZUcnVlID0gdGhpcy5vcGVyYXRvcnMubGVuZ3RoOwogICAgICB0aGlzLnBhcnNlQmxvY2soKTsKICAgICAgdGhpcy5leHBlY3QoUG9zdFNjcmlwdFRva2VuVHlwZXMuUkJSQUNFKTsKICAgICAgdGhpcy5leHBlY3QoUG9zdFNjcmlwdFRva2VuVHlwZXMuSUZFTFNFKTsKICAgICAgdGhpcy5vcGVyYXRvcnNbanVtcExvY2F0aW9uXSA9IHRoaXMub3BlcmF0b3JzLmxlbmd0aDsKICAgICAgdGhpcy5vcGVyYXRvcnNbanVtcExvY2F0aW9uICsgMV0gPSAiaiI7CiAgICAgIHRoaXMub3BlcmF0b3JzW2NvbmRpdGlvbkxvY2F0aW9uXSA9IGVuZE9mVHJ1ZTsKICAgICAgdGhpcy5vcGVyYXRvcnNbY29uZGl0aW9uTG9jYXRpb24gKyAxXSA9ICJqeiI7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlBTIEZ1bmN0aW9uOiBlcnJvciBwYXJzaW5nIGNvbmRpdGlvbmFsLiIpOwogICAgfQogIH0KfQpjb25zdCBQb3N0U2NyaXB0VG9rZW5UeXBlcyA9IHsKICBMQlJBQ0U6IDAsCiAgUkJSQUNFOiAxLAogIE5VTUJFUjogMiwKICBPUEVSQVRPUjogMywKICBJRjogNCwKICBJRkVMU0U6IDUKfTsKY2xhc3MgUG9zdFNjcmlwdFRva2VuIHsKICBzdGF0aWMgZ2V0IG9wQ2FjaGUoKSB7CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJvcENhY2hlIiwgT2JqZWN0LmNyZWF0ZShudWxsKSk7CiAgfQogIGNvbnN0cnVjdG9yKHR5cGUsIHZhbHVlKSB7CiAgICB0aGlzLnR5cGUgPSB0eXBlOwogICAgdGhpcy52YWx1ZSA9IHZhbHVlOwogIH0KICBzdGF0aWMgZ2V0T3BlcmF0b3Iob3ApIHsKICAgIHJldHVybiBQb3N0U2NyaXB0VG9rZW4ub3BDYWNoZVtvcF0gfHw9IG5ldyBQb3N0U2NyaXB0VG9rZW4oUG9zdFNjcmlwdFRva2VuVHlwZXMuT1BFUkFUT1IsIG9wKTsKICB9CiAgc3RhdGljIGdldCBMQlJBQ0UoKSB7CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJMQlJBQ0UiLCBuZXcgUG9zdFNjcmlwdFRva2VuKFBvc3RTY3JpcHRUb2tlblR5cGVzLkxCUkFDRSwgInsiKSk7CiAgfQogIHN0YXRpYyBnZXQgUkJSQUNFKCkgewogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAiUkJSQUNFIiwgbmV3IFBvc3RTY3JpcHRUb2tlbihQb3N0U2NyaXB0VG9rZW5UeXBlcy5SQlJBQ0UsICJ9IikpOwogIH0KICBzdGF0aWMgZ2V0IElGKCkgewogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAiSUYiLCBuZXcgUG9zdFNjcmlwdFRva2VuKFBvc3RTY3JpcHRUb2tlblR5cGVzLklGLCAiSUYiKSk7CiAgfQogIHN0YXRpYyBnZXQgSUZFTFNFKCkgewogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAiSUZFTFNFIiwgbmV3IFBvc3RTY3JpcHRUb2tlbihQb3N0U2NyaXB0VG9rZW5UeXBlcy5JRkVMU0UsICJJRkVMU0UiKSk7CiAgfQp9CmNsYXNzIFBvc3RTY3JpcHRMZXhlciB7CiAgY29uc3RydWN0b3Ioc3RyZWFtKSB7CiAgICB0aGlzLnN0cmVhbSA9IHN0cmVhbTsKICAgIHRoaXMubmV4dENoYXIoKTsKICAgIHRoaXMuc3RyQnVmID0gW107CiAgfQogIG5leHRDaGFyKCkgewogICAgcmV0dXJuIHRoaXMuY3VycmVudENoYXIgPSB0aGlzLnN0cmVhbS5nZXRCeXRlKCk7CiAgfQogIGdldFRva2VuKCkgewogICAgbGV0IGNvbW1lbnQgPSBmYWxzZTsKICAgIGxldCBjaCA9IHRoaXMuY3VycmVudENoYXI7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBpZiAoY2ggPCAwKSB7CiAgICAgICAgcmV0dXJuIEVPRjsKICAgICAgfQogICAgICBpZiAoY29tbWVudCkgewogICAgICAgIGlmIChjaCA9PT0gMHgwYSB8fCBjaCA9PT0gMHgwZCkgewogICAgICAgICAgY29tbWVudCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyNSkgewogICAgICAgIGNvbW1lbnQgPSB0cnVlOwogICAgICB9IGVsc2UgaWYgKCFpc1doaXRlU3BhY2UoY2gpKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7CiAgICB9CiAgICBzd2l0Y2ggKGNoIHwgMCkgewogICAgICBjYXNlIDB4MzA6CiAgICAgIGNhc2UgMHgzMToKICAgICAgY2FzZSAweDMyOgogICAgICBjYXNlIDB4MzM6CiAgICAgIGNhc2UgMHgzNDoKICAgICAgY2FzZSAweDM1OgogICAgICBjYXNlIDB4MzY6CiAgICAgIGNhc2UgMHgzNzoKICAgICAgY2FzZSAweDM4OgogICAgICBjYXNlIDB4Mzk6CiAgICAgIGNhc2UgMHgyYjoKICAgICAgY2FzZSAweDJkOgogICAgICBjYXNlIDB4MmU6CiAgICAgICAgcmV0dXJuIG5ldyBQb3N0U2NyaXB0VG9rZW4oUG9zdFNjcmlwdFRva2VuVHlwZXMuTlVNQkVSLCB0aGlzLmdldE51bWJlcigpKTsKICAgICAgY2FzZSAweDdiOgogICAgICAgIHRoaXMubmV4dENoYXIoKTsKICAgICAgICByZXR1cm4gUG9zdFNjcmlwdFRva2VuLkxCUkFDRTsKICAgICAgY2FzZSAweDdkOgogICAgICAgIHRoaXMubmV4dENoYXIoKTsKICAgICAgICByZXR1cm4gUG9zdFNjcmlwdFRva2VuLlJCUkFDRTsKICAgIH0KICAgIGNvbnN0IHN0ckJ1ZiA9IHRoaXMuc3RyQnVmOwogICAgc3RyQnVmLmxlbmd0aCA9IDA7CiAgICBzdHJCdWZbMF0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTsKICAgIHdoaWxlICgoY2ggPSB0aGlzLm5leHRDaGFyKCkpID49IDAgJiYgKGNoID49IDB4NDEgJiYgY2ggPD0gMHg1YSB8fCBjaCA+PSAweDYxICYmIGNoIDw9IDB4N2EpKSB7CiAgICAgIHN0ckJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKTsKICAgIH0KICAgIGNvbnN0IHN0ciA9IHN0ckJ1Zi5qb2luKCIiKTsKICAgIHN3aXRjaCAoc3RyLnRvTG93ZXJDYXNlKCkpIHsKICAgICAgY2FzZSAiaWYiOgogICAgICAgIHJldHVybiBQb3N0U2NyaXB0VG9rZW4uSUY7CiAgICAgIGNhc2UgImlmZWxzZSI6CiAgICAgICAgcmV0dXJuIFBvc3RTY3JpcHRUb2tlbi5JRkVMU0U7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIFBvc3RTY3JpcHRUb2tlbi5nZXRPcGVyYXRvcihzdHIpOwogICAgfQogIH0KICBnZXROdW1iZXIoKSB7CiAgICBsZXQgY2ggPSB0aGlzLmN1cnJlbnRDaGFyOwogICAgY29uc3Qgc3RyQnVmID0gdGhpcy5zdHJCdWY7CiAgICBzdHJCdWYubGVuZ3RoID0gMDsKICAgIHN0ckJ1ZlswXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpOwogICAgd2hpbGUgKChjaCA9IHRoaXMubmV4dENoYXIoKSkgPj0gMCkgewogICAgICBpZiAoY2ggPj0gMHgzMCAmJiBjaCA8PSAweDM5IHx8IGNoID09PSAweDJkIHx8IGNoID09PSAweDJlKSB7CiAgICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpOwogICAgICB9IGVsc2UgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlRmxvYXQoc3RyQnVmLmpvaW4oIiIpKTsKICAgIGlmIChpc05hTih2YWx1ZSkpIHsKICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBJbnZhbGlkIGZsb2F0aW5nIHBvaW50IG51bWJlcjogJHt2YWx1ZX1gKTsKICAgIH0KICAgIHJldHVybiB2YWx1ZTsKICB9Cn0KCjsvLyAuL3NyYy9jb3JlL2ltYWdlX3V0aWxzLmpzCgoKY2xhc3MgQmFzZUxvY2FsQ2FjaGUgewogIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHsKICAgIHRoaXMuX29ubHlSZWZzID0gb3B0aW9ucz8ub25seVJlZnMgPT09IHRydWU7CiAgICBpZiAoIXRoaXMuX29ubHlSZWZzKSB7CiAgICAgIHRoaXMuX25hbWVSZWZNYXAgPSBuZXcgTWFwKCk7CiAgICAgIHRoaXMuX2ltYWdlTWFwID0gbmV3IE1hcCgpOwogICAgfQogICAgdGhpcy5faW1hZ2VDYWNoZSA9IG5ldyBSZWZTZXRDYWNoZSgpOwogIH0KICBnZXRCeU5hbWUobmFtZSkgewogICAgaWYgKHRoaXMuX29ubHlSZWZzKSB7CiAgICAgIHVucmVhY2hhYmxlKCJTaG91bGQgbm90IGNhbGwgYGdldEJ5TmFtZWAgbWV0aG9kLiIpOwogICAgfQogICAgY29uc3QgcmVmID0gdGhpcy5fbmFtZVJlZk1hcC5nZXQobmFtZSk7CiAgICBpZiAocmVmKSB7CiAgICAgIHJldHVybiB0aGlzLmdldEJ5UmVmKHJlZik7CiAgICB9CiAgICByZXR1cm4gdGhpcy5faW1hZ2VNYXAuZ2V0KG5hbWUpIHx8IG51bGw7CiAgfQogIGdldEJ5UmVmKHJlZikgewogICAgcmV0dXJuIHRoaXMuX2ltYWdlQ2FjaGUuZ2V0KHJlZikgfHwgbnVsbDsKICB9CiAgc2V0KG5hbWUsIHJlZiwgZGF0YSkgewogICAgdW5yZWFjaGFibGUoIkFic3RyYWN0IG1ldGhvZCBgc2V0YCBjYWxsZWQuIik7CiAgfQp9CmNsYXNzIExvY2FsSW1hZ2VDYWNoZSBleHRlbmRzIEJhc2VMb2NhbENhY2hlIHsKICBzZXQobmFtZSwgcmVmID0gbnVsbCwgZGF0YSkgewogICAgaWYgKHR5cGVvZiBuYW1lICE9PSAic3RyaW5nIikgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsSW1hZ2VDYWNoZS5zZXQgLSBleHBlY3RlZCAibmFtZSIgYXJndW1lbnQuJyk7CiAgICB9CiAgICBpZiAocmVmKSB7CiAgICAgIGlmICh0aGlzLl9pbWFnZUNhY2hlLmhhcyhyZWYpKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMuX25hbWVSZWZNYXAuc2V0KG5hbWUsIHJlZik7CiAgICAgIHRoaXMuX2ltYWdlQ2FjaGUucHV0KHJlZiwgZGF0YSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICh0aGlzLl9pbWFnZU1hcC5oYXMobmFtZSkpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy5faW1hZ2VNYXAuc2V0KG5hbWUsIGRhdGEpOwogIH0KfQpjbGFzcyBMb2NhbENvbG9yU3BhY2VDYWNoZSBleHRlbmRzIEJhc2VMb2NhbENhY2hlIHsKICBzZXQobmFtZSA9IG51bGwsIHJlZiA9IG51bGwsIGRhdGEpIHsKICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gInN0cmluZyIgJiYgIXJlZikgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsQ29sb3JTcGFjZUNhY2hlLnNldCAtIGV4cGVjdGVkICJuYW1lIiBhbmQvb3IgInJlZiIgYXJndW1lbnQuJyk7CiAgICB9CiAgICBpZiAocmVmKSB7CiAgICAgIGlmICh0aGlzLl9pbWFnZUNhY2hlLmhhcyhyZWYpKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChuYW1lICE9PSBudWxsKSB7CiAgICAgICAgdGhpcy5fbmFtZVJlZk1hcC5zZXQobmFtZSwgcmVmKTsKICAgICAgfQogICAgICB0aGlzLl9pbWFnZUNhY2hlLnB1dChyZWYsIGRhdGEpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAodGhpcy5faW1hZ2VNYXAuaGFzKG5hbWUpKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuX2ltYWdlTWFwLnNldChuYW1lLCBkYXRhKTsKICB9Cn0KY2xhc3MgTG9jYWxGdW5jdGlvbkNhY2hlIGV4dGVuZHMgQmFzZUxvY2FsQ2FjaGUgewogIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHsKICAgIHN1cGVyKHsKICAgICAgb25seVJlZnM6IHRydWUKICAgIH0pOwogIH0KICBzZXQobmFtZSA9IG51bGwsIHJlZiwgZGF0YSkgewogICAgaWYgKCFyZWYpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdMb2NhbEZ1bmN0aW9uQ2FjaGUuc2V0IC0gZXhwZWN0ZWQgInJlZiIgYXJndW1lbnQuJyk7CiAgICB9CiAgICBpZiAodGhpcy5faW1hZ2VDYWNoZS5oYXMocmVmKSkgewogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLl9pbWFnZUNhY2hlLnB1dChyZWYsIGRhdGEpOwogIH0KfQpjbGFzcyBMb2NhbEdTdGF0ZUNhY2hlIGV4dGVuZHMgQmFzZUxvY2FsQ2FjaGUgewogIHNldChuYW1lLCByZWYgPSBudWxsLCBkYXRhKSB7CiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICJzdHJpbmciKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignTG9jYWxHU3RhdGVDYWNoZS5zZXQgLSBleHBlY3RlZCAibmFtZSIgYXJndW1lbnQuJyk7CiAgICB9CiAgICBpZiAocmVmKSB7CiAgICAgIGlmICh0aGlzLl9pbWFnZUNhY2hlLmhhcyhyZWYpKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMuX25hbWVSZWZNYXAuc2V0KG5hbWUsIHJlZik7CiAgICAgIHRoaXMuX2ltYWdlQ2FjaGUucHV0KHJlZiwgZGF0YSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICh0aGlzLl9pbWFnZU1hcC5oYXMobmFtZSkpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy5faW1hZ2VNYXAuc2V0KG5hbWUsIGRhdGEpOwogIH0KfQpjbGFzcyBMb2NhbFRpbGluZ1BhdHRlcm5DYWNoZSBleHRlbmRzIEJhc2VMb2NhbENhY2hlIHsKICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7CiAgICBzdXBlcih7CiAgICAgIG9ubHlSZWZzOiB0cnVlCiAgICB9KTsKICB9CiAgc2V0KG5hbWUgPSBudWxsLCByZWYsIGRhdGEpIHsKICAgIGlmICghcmVmKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignTG9jYWxUaWxpbmdQYXR0ZXJuQ2FjaGUuc2V0IC0gZXhwZWN0ZWQgInJlZiIgYXJndW1lbnQuJyk7CiAgICB9CiAgICBpZiAodGhpcy5faW1hZ2VDYWNoZS5oYXMocmVmKSkgewogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLl9pbWFnZUNhY2hlLnB1dChyZWYsIGRhdGEpOwogIH0KfQpjbGFzcyBSZWdpb25hbEltYWdlQ2FjaGUgZXh0ZW5kcyBCYXNlTG9jYWxDYWNoZSB7CiAgY29uc3RydWN0b3Iob3B0aW9ucykgewogICAgc3VwZXIoewogICAgICBvbmx5UmVmczogdHJ1ZQogICAgfSk7CiAgfQogIHNldChuYW1lID0gbnVsbCwgcmVmLCBkYXRhKSB7CiAgICBpZiAoIXJlZikgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZ2lvbmFsSW1hZ2VDYWNoZS5zZXQgLSBleHBlY3RlZCAicmVmIiBhcmd1bWVudC4nKTsKICAgIH0KICAgIGlmICh0aGlzLl9pbWFnZUNhY2hlLmhhcyhyZWYpKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuX2ltYWdlQ2FjaGUucHV0KHJlZiwgZGF0YSk7CiAgfQp9CmNsYXNzIEdsb2JhbENvbG9yU3BhY2VDYWNoZSBleHRlbmRzIEJhc2VMb2NhbENhY2hlIHsKICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7CiAgICBzdXBlcih7CiAgICAgIG9ubHlSZWZzOiB0cnVlCiAgICB9KTsKICB9CiAgc2V0KG5hbWUgPSBudWxsLCByZWYsIGRhdGEpIHsKICAgIGlmICghcmVmKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignR2xvYmFsQ29sb3JTcGFjZUNhY2hlLnNldCAtIGV4cGVjdGVkICJyZWYiIGFyZ3VtZW50LicpOwogICAgfQogICAgaWYgKHRoaXMuX2ltYWdlQ2FjaGUuaGFzKHJlZikpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy5faW1hZ2VDYWNoZS5wdXQocmVmLCBkYXRhKTsKICB9CiAgY2xlYXIoKSB7CiAgICB0aGlzLl9pbWFnZUNhY2hlLmNsZWFyKCk7CiAgfQp9CmNsYXNzIEdsb2JhbEltYWdlQ2FjaGUgewogIHN0YXRpYyBOVU1fUEFHRVNfVEhSRVNIT0xEID0gMjsKICBzdGF0aWMgTUlOX0lNQUdFU19UT19DQUNIRSA9IDEwOwogIHN0YXRpYyBNQVhfQllURV9TSVpFID0gNWU3OwogICNkZWNvZGVGYWlsZWRTZXQgPSBuZXcgUmVmU2V0KCk7CiAgY29uc3RydWN0b3IoKSB7CiAgICB0aGlzLl9yZWZDYWNoZSA9IG5ldyBSZWZTZXRDYWNoZSgpOwogICAgdGhpcy5faW1hZ2VDYWNoZSA9IG5ldyBSZWZTZXRDYWNoZSgpOwogIH0KICBnZXQgI2J5dGVTaXplKCkgewogICAgbGV0IGJ5dGVTaXplID0gMDsKICAgIGZvciAoY29uc3QgaW1hZ2VEYXRhIG9mIHRoaXMuX2ltYWdlQ2FjaGUpIHsKICAgICAgYnl0ZVNpemUgKz0gaW1hZ2VEYXRhLmJ5dGVTaXplOwogICAgfQogICAgcmV0dXJuIGJ5dGVTaXplOwogIH0KICBnZXQgI2NhY2hlTGltaXRSZWFjaGVkKCkgewogICAgaWYgKHRoaXMuX2ltYWdlQ2FjaGUuc2l6ZSA8IEdsb2JhbEltYWdlQ2FjaGUuTUlOX0lNQUdFU19UT19DQUNIRSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAodGhpcy4jYnl0ZVNpemUgPCBHbG9iYWxJbWFnZUNhY2hlLk1BWF9CWVRFX1NJWkUpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQogIHNob3VsZENhY2hlKHJlZiwgcGFnZUluZGV4KSB7CiAgICBsZXQgcGFnZUluZGV4U2V0ID0gdGhpcy5fcmVmQ2FjaGUuZ2V0KHJlZik7CiAgICBpZiAoIXBhZ2VJbmRleFNldCkgewogICAgICBwYWdlSW5kZXhTZXQgPSBuZXcgU2V0KCk7CiAgICAgIHRoaXMuX3JlZkNhY2hlLnB1dChyZWYsIHBhZ2VJbmRleFNldCk7CiAgICB9CiAgICBwYWdlSW5kZXhTZXQuYWRkKHBhZ2VJbmRleCk7CiAgICBpZiAocGFnZUluZGV4U2V0LnNpemUgPCBHbG9iYWxJbWFnZUNhY2hlLk5VTV9QQUdFU19USFJFU0hPTEQpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKCF0aGlzLl9pbWFnZUNhY2hlLmhhcyhyZWYpICYmIHRoaXMuI2NhY2hlTGltaXRSZWFjaGVkKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KICBhZGREZWNvZGVGYWlsZWQocmVmKSB7CiAgICB0aGlzLiNkZWNvZGVGYWlsZWRTZXQucHV0KHJlZik7CiAgfQogIGhhc0RlY29kZUZhaWxlZChyZWYpIHsKICAgIHJldHVybiB0aGlzLiNkZWNvZGVGYWlsZWRTZXQuaGFzKHJlZik7CiAgfQogIGFkZEJ5dGVTaXplKHJlZiwgYnl0ZVNpemUpIHsKICAgIGNvbnN0IGltYWdlRGF0YSA9IHRoaXMuX2ltYWdlQ2FjaGUuZ2V0KHJlZik7CiAgICBpZiAoIWltYWdlRGF0YSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoaW1hZ2VEYXRhLmJ5dGVTaXplKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGltYWdlRGF0YS5ieXRlU2l6ZSA9IGJ5dGVTaXplOwogIH0KICBnZXREYXRhKHJlZiwgcGFnZUluZGV4KSB7CiAgICBjb25zdCBwYWdlSW5kZXhTZXQgPSB0aGlzLl9yZWZDYWNoZS5nZXQocmVmKTsKICAgIGlmICghcGFnZUluZGV4U2V0KSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgaWYgKHBhZ2VJbmRleFNldC5zaXplIDwgR2xvYmFsSW1hZ2VDYWNoZS5OVU1fUEFHRVNfVEhSRVNIT0xEKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3QgaW1hZ2VEYXRhID0gdGhpcy5faW1hZ2VDYWNoZS5nZXQocmVmKTsKICAgIGlmICghaW1hZ2VEYXRhKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcGFnZUluZGV4U2V0LmFkZChwYWdlSW5kZXgpOwogICAgcmV0dXJuIGltYWdlRGF0YTsKICB9CiAgc2V0RGF0YShyZWYsIGRhdGEpIHsKICAgIGlmICghdGhpcy5fcmVmQ2FjaGUuaGFzKHJlZikpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdHbG9iYWxJbWFnZUNhY2hlLnNldERhdGEgLSBleHBlY3RlZCAic2hvdWxkQ2FjaGUiIHRvIGhhdmUgYmVlbiBjYWxsZWQuJyk7CiAgICB9CiAgICBpZiAodGhpcy5faW1hZ2VDYWNoZS5oYXMocmVmKSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAodGhpcy4jY2FjaGVMaW1pdFJlYWNoZWQpIHsKICAgICAgd2FybigiR2xvYmFsSW1hZ2VDYWNoZS5zZXREYXRhIC0gY2FjaGUgbGltaXQgcmVhY2hlZC4iKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy5faW1hZ2VDYWNoZS5wdXQocmVmLCBkYXRhKTsKICB9CiAgY2xlYXIob25seURhdGEgPSBmYWxzZSkgewogICAgaWYgKCFvbmx5RGF0YSkgewogICAgICB0aGlzLiNkZWNvZGVGYWlsZWRTZXQuY2xlYXIoKTsKICAgICAgdGhpcy5fcmVmQ2FjaGUuY2xlYXIoKTsKICAgIH0KICAgIHRoaXMuX2ltYWdlQ2FjaGUuY2xlYXIoKTsKICB9Cn0KCjsvLyAuL3NyYy9jb3JlL2Z1bmN0aW9uLmpzCgoKCgoKCmNsYXNzIFBERkZ1bmN0aW9uRmFjdG9yeSB7CiAgY29uc3RydWN0b3IoewogICAgeHJlZiwKICAgIGlzRXZhbFN1cHBvcnRlZCA9IHRydWUKICB9KSB7CiAgICB0aGlzLnhyZWYgPSB4cmVmOwogICAgdGhpcy5pc0V2YWxTdXBwb3J0ZWQgPSBpc0V2YWxTdXBwb3J0ZWQgIT09IGZhbHNlOwogIH0KICBjcmVhdGUoZm4sIHBhcnNlQXJyYXkgPSBmYWxzZSkgewogICAgbGV0IGZuUmVmLCBwYXJzZWRGbjsKICAgIGlmIChmbiBpbnN0YW5jZW9mIFJlZikgewogICAgICBmblJlZiA9IGZuOwogICAgfSBlbHNlIGlmIChmbiBpbnN0YW5jZW9mIERpY3QpIHsKICAgICAgZm5SZWYgPSBmbi5vYmpJZDsKICAgIH0gZWxzZSBpZiAoZm4gaW5zdGFuY2VvZiBCYXNlU3RyZWFtKSB7CiAgICAgIGZuUmVmID0gZm4uZGljdD8ub2JqSWQ7CiAgICB9CiAgICBpZiAoZm5SZWYpIHsKICAgICAgY29uc3QgY2FjaGVkRm4gPSB0aGlzLl9sb2NhbEZ1bmN0aW9uQ2FjaGUuZ2V0QnlSZWYoZm5SZWYpOwogICAgICBpZiAoY2FjaGVkRm4pIHsKICAgICAgICByZXR1cm4gY2FjaGVkRm47CiAgICAgIH0KICAgIH0KICAgIGNvbnN0IGZuT2JqID0gdGhpcy54cmVmLmZldGNoSWZSZWYoZm4pOwogICAgaWYgKEFycmF5LmlzQXJyYXkoZm5PYmopKSB7CiAgICAgIGlmICghcGFyc2VBcnJheSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcignUERGRnVuY3Rpb25GYWN0b3J5LmNyZWF0ZSAtIGV4cGVjdGVkICJwYXJzZUFycmF5IiBhcmd1bWVudC4nKTsKICAgICAgfQogICAgICBwYXJzZWRGbiA9IFBERkZ1bmN0aW9uLnBhcnNlQXJyYXkodGhpcywgZm5PYmopOwogICAgfSBlbHNlIHsKICAgICAgcGFyc2VkRm4gPSBQREZGdW5jdGlvbi5wYXJzZSh0aGlzLCBmbk9iaik7CiAgICB9CiAgICBpZiAoZm5SZWYpIHsKICAgICAgdGhpcy5fbG9jYWxGdW5jdGlvbkNhY2hlLnNldChudWxsLCBmblJlZiwgcGFyc2VkRm4pOwogICAgfQogICAgcmV0dXJuIHBhcnNlZEZuOwogIH0KICBnZXQgX2xvY2FsRnVuY3Rpb25DYWNoZSgpIHsKICAgIHJldHVybiBzaGFkb3codGhpcywgIl9sb2NhbEZ1bmN0aW9uQ2FjaGUiLCBuZXcgTG9jYWxGdW5jdGlvbkNhY2hlKCkpOwogIH0KfQpmdW5jdGlvbiB0b051bWJlckFycmF5KGFycikgewogIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgaWYgKCFpc051bWJlckFycmF5KGFyciwgbnVsbCkpIHsKICAgIHJldHVybiBhcnIubWFwKHggPT4gK3gpOwogIH0KICByZXR1cm4gYXJyOwp9CmNsYXNzIFBERkZ1bmN0aW9uIHsKICBzdGF0aWMgZ2V0U2FtcGxlQXJyYXkoc2l6ZSwgb3V0cHV0U2l6ZSwgYnBzLCBzdHJlYW0pIHsKICAgIGxldCBpLCBpaTsKICAgIGxldCBsZW5ndGggPSAxOwogICAgZm9yIChpID0gMCwgaWkgPSBzaXplLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgbGVuZ3RoICo9IHNpemVbaV07CiAgICB9CiAgICBsZW5ndGggKj0gb3V0cHV0U2l6ZTsKICAgIGNvbnN0IGFycmF5ID0gbmV3IEFycmF5KGxlbmd0aCk7CiAgICBsZXQgY29kZVNpemUgPSAwOwogICAgbGV0IGNvZGVCdWYgPSAwOwogICAgY29uc3Qgc2FtcGxlTXVsID0gMS4wIC8gKDIuMCAqKiBicHMgLSAxKTsKICAgIGNvbnN0IHN0ckJ5dGVzID0gc3RyZWFtLmdldEJ5dGVzKChsZW5ndGggKiBicHMgKyA3KSAvIDgpOwogICAgbGV0IHN0cklkeCA9IDA7CiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgd2hpbGUgKGNvZGVTaXplIDwgYnBzKSB7CiAgICAgICAgY29kZUJ1ZiA8PD0gODsKICAgICAgICBjb2RlQnVmIHw9IHN0ckJ5dGVzW3N0cklkeCsrXTsKICAgICAgICBjb2RlU2l6ZSArPSA4OwogICAgICB9CiAgICAgIGNvZGVTaXplIC09IGJwczsKICAgICAgYXJyYXlbaV0gPSAoY29kZUJ1ZiA+PiBjb2RlU2l6ZSkgKiBzYW1wbGVNdWw7CiAgICAgIGNvZGVCdWYgJj0gKDEgPDwgY29kZVNpemUpIC0gMTsKICAgIH0KICAgIHJldHVybiBhcnJheTsKICB9CiAgc3RhdGljIHBhcnNlKGZhY3RvcnksIGZuKSB7CiAgICBjb25zdCBkaWN0ID0gZm4uZGljdCB8fCBmbjsKICAgIGNvbnN0IHR5cGVOdW0gPSBkaWN0LmdldCgiRnVuY3Rpb25UeXBlIik7CiAgICBzd2l0Y2ggKHR5cGVOdW0pIHsKICAgICAgY2FzZSAwOgogICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdFNhbXBsZWQoZmFjdG9yeSwgZm4sIGRpY3QpOwogICAgICBjYXNlIDE6CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMjoKICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3RJbnRlcnBvbGF0ZWQoZmFjdG9yeSwgZGljdCk7CiAgICAgIGNhc2UgMzoKICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3RTdGljaGVkKGZhY3RvcnksIGRpY3QpOwogICAgICBjYXNlIDQ6CiAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0UG9zdFNjcmlwdChmYWN0b3J5LCBmbiwgZGljdCk7CiAgICB9CiAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlVua25vd24gdHlwZSBvZiBmdW5jdGlvbiIpOwogIH0KICBzdGF0aWMgcGFyc2VBcnJheShmYWN0b3J5LCBmbk9iaikgewogICAgY29uc3QgewogICAgICB4cmVmCiAgICB9ID0gZmFjdG9yeTsKICAgIGNvbnN0IGZuQXJyYXkgPSBbXTsKICAgIGZvciAoY29uc3QgZm4gb2YgZm5PYmopIHsKICAgICAgZm5BcnJheS5wdXNoKHRoaXMucGFyc2UoZmFjdG9yeSwgeHJlZi5mZXRjaElmUmVmKGZuKSkpOwogICAgfQogICAgcmV0dXJuIGZ1bmN0aW9uIChzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCkgewogICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBmbkFycmF5Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgICBmbkFycmF5W2ldKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0ICsgaSk7CiAgICAgIH0KICAgIH07CiAgfQogIHN0YXRpYyBjb25zdHJ1Y3RTYW1wbGVkKGZhY3RvcnksIGZuLCBkaWN0KSB7CiAgICBmdW5jdGlvbiB0b011bHRpQXJyYXkoYXJyKSB7CiAgICAgIGNvbnN0IGlucHV0TGVuZ3RoID0gYXJyLmxlbmd0aDsKICAgICAgY29uc3Qgb3V0ID0gW107CiAgICAgIGxldCBpbmRleCA9IDA7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRMZW5ndGg7IGkgKz0gMikgewogICAgICAgIG91dFtpbmRleCsrXSA9IFthcnJbaV0sIGFycltpICsgMV1dOwogICAgICB9CiAgICAgIHJldHVybiBvdXQ7CiAgICB9CiAgICBmdW5jdGlvbiBpbnRlcnBvbGF0ZSh4LCB4bWluLCB4bWF4LCB5bWluLCB5bWF4KSB7CiAgICAgIHJldHVybiB5bWluICsgKHggLSB4bWluKSAqICgoeW1heCAtIHltaW4pIC8gKHhtYXggLSB4bWluKSk7CiAgICB9CiAgICBsZXQgZG9tYWluID0gdG9OdW1iZXJBcnJheShkaWN0LmdldEFycmF5KCJEb21haW4iKSk7CiAgICBsZXQgcmFuZ2UgPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoIlJhbmdlIikpOwogICAgaWYgKCFkb21haW4gfHwgIXJhbmdlKSB7CiAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiTm8gZG9tYWluIG9yIHJhbmdlIik7CiAgICB9CiAgICBjb25zdCBpbnB1dFNpemUgPSBkb21haW4ubGVuZ3RoIC8gMjsKICAgIGNvbnN0IG91dHB1dFNpemUgPSByYW5nZS5sZW5ndGggLyAyOwogICAgZG9tYWluID0gdG9NdWx0aUFycmF5KGRvbWFpbik7CiAgICByYW5nZSA9IHRvTXVsdGlBcnJheShyYW5nZSk7CiAgICBjb25zdCBzaXplID0gdG9OdW1iZXJBcnJheShkaWN0LmdldEFycmF5KCJTaXplIikpOwogICAgY29uc3QgYnBzID0gZGljdC5nZXQoIkJpdHNQZXJTYW1wbGUiKTsKICAgIGNvbnN0IG9yZGVyID0gZGljdC5nZXQoIk9yZGVyIikgfHwgMTsKICAgIGlmIChvcmRlciAhPT0gMSkgewogICAgICBpbmZvKCJObyBzdXBwb3J0IGZvciBjdWJpYyBzcGxpbmUgaW50ZXJwb2xhdGlvbjogIiArIG9yZGVyKTsKICAgIH0KICAgIGxldCBlbmNvZGUgPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoIkVuY29kZSIpKTsKICAgIGlmICghZW5jb2RlKSB7CiAgICAgIGVuY29kZSA9IFtdOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0U2l6ZTsgKytpKSB7CiAgICAgICAgZW5jb2RlLnB1c2goWzAsIHNpemVbaV0gLSAxXSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGVuY29kZSA9IHRvTXVsdGlBcnJheShlbmNvZGUpOwogICAgfQogICAgbGV0IGRlY29kZSA9IHRvTnVtYmVyQXJyYXkoZGljdC5nZXRBcnJheSgiRGVjb2RlIikpOwogICAgZGVjb2RlID0gIWRlY29kZSA/IHJhbmdlIDogdG9NdWx0aUFycmF5KGRlY29kZSk7CiAgICBjb25zdCBzYW1wbGVzID0gdGhpcy5nZXRTYW1wbGVBcnJheShzaXplLCBvdXRwdXRTaXplLCBicHMsIGZuKTsKICAgIHJldHVybiBmdW5jdGlvbiBjb25zdHJ1Y3RTYW1wbGVkRm4oc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHsKICAgICAgY29uc3QgY3ViZVZlcnRpY2VzID0gMSA8PCBpbnB1dFNpemU7CiAgICAgIGNvbnN0IGN1YmVOID0gbmV3IEZsb2F0NjRBcnJheShjdWJlVmVydGljZXMpLmZpbGwoMSk7CiAgICAgIGNvbnN0IGN1YmVWZXJ0ZXggPSBuZXcgVWludDMyQXJyYXkoY3ViZVZlcnRpY2VzKTsKICAgICAgbGV0IGksIGo7CiAgICAgIGxldCBrID0gb3V0cHV0U2l6ZSwKICAgICAgICBwb3MgPSAxOwogICAgICBmb3IgKGkgPSAwOyBpIDwgaW5wdXRTaXplOyArK2kpIHsKICAgICAgICBjb25zdCBkb21haW5fMmkgPSBkb21haW5baV1bMF07CiAgICAgICAgY29uc3QgZG9tYWluXzJpXzEgPSBkb21haW5baV1bMV07CiAgICAgICAgY29uc3QgeGkgPSBNYXRoQ2xhbXAoc3JjW3NyY09mZnNldCArIGldLCBkb21haW5fMmksIGRvbWFpbl8yaV8xKTsKICAgICAgICBsZXQgZSA9IGludGVycG9sYXRlKHhpLCBkb21haW5fMmksIGRvbWFpbl8yaV8xLCBlbmNvZGVbaV1bMF0sIGVuY29kZVtpXVsxXSk7CiAgICAgICAgY29uc3Qgc2l6ZV9pID0gc2l6ZVtpXTsKICAgICAgICBlID0gTWF0aENsYW1wKGUsIDAsIHNpemVfaSAtIDEpOwogICAgICAgIGNvbnN0IGUwID0gZSA8IHNpemVfaSAtIDEgPyBNYXRoLmZsb29yKGUpIDogZSAtIDE7CiAgICAgICAgY29uc3QgbjAgPSBlMCArIDEgLSBlOwogICAgICAgIGNvbnN0IG4xID0gZSAtIGUwOwogICAgICAgIGNvbnN0IG9mZnNldDAgPSBlMCAqIGs7CiAgICAgICAgY29uc3Qgb2Zmc2V0MSA9IG9mZnNldDAgKyBrOwogICAgICAgIGZvciAoaiA9IDA7IGogPCBjdWJlVmVydGljZXM7IGorKykgewogICAgICAgICAgaWYgKGogJiBwb3MpIHsKICAgICAgICAgICAgY3ViZU5bal0gKj0gbjE7CiAgICAgICAgICAgIGN1YmVWZXJ0ZXhbal0gKz0gb2Zmc2V0MTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGN1YmVOW2pdICo9IG4wOwogICAgICAgICAgICBjdWJlVmVydGV4W2pdICs9IG9mZnNldDA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGsgKj0gc2l6ZV9pOwogICAgICAgIHBvcyA8PD0gMTsKICAgICAgfQogICAgICBmb3IgKGogPSAwOyBqIDwgb3V0cHV0U2l6ZTsgKytqKSB7CiAgICAgICAgbGV0IHJqID0gMDsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3ViZVZlcnRpY2VzOyBpKyspIHsKICAgICAgICAgIHJqICs9IHNhbXBsZXNbY3ViZVZlcnRleFtpXSArIGpdICogY3ViZU5baV07CiAgICAgICAgfQogICAgICAgIHJqID0gaW50ZXJwb2xhdGUocmosIDAsIDEsIGRlY29kZVtqXVswXSwgZGVjb2RlW2pdWzFdKTsKICAgICAgICBkZXN0W2Rlc3RPZmZzZXQgKyBqXSA9IE1hdGhDbGFtcChyaiwgcmFuZ2Vbal1bMF0sIHJhbmdlW2pdWzFdKTsKICAgICAgfQogICAgfTsKICB9CiAgc3RhdGljIGNvbnN0cnVjdEludGVycG9sYXRlZChmYWN0b3J5LCBkaWN0KSB7CiAgICBjb25zdCBjMCA9IHRvTnVtYmVyQXJyYXkoZGljdC5nZXRBcnJheSgiQzAiKSkgfHwgWzBdOwogICAgY29uc3QgYzEgPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoIkMxIikpIHx8IFsxXTsKICAgIGNvbnN0IG4gPSBkaWN0LmdldCgiTiIpOwogICAgY29uc3QgZGlmZiA9IFtdOwogICAgZm9yIChsZXQgaSA9IDAsIGlpID0gYzAubGVuZ3RoOyBpIDwgaWk7ICsraSkgewogICAgICBkaWZmLnB1c2goYzFbaV0gLSBjMFtpXSk7CiAgICB9CiAgICBjb25zdCBsZW5ndGggPSBkaWZmLmxlbmd0aDsKICAgIHJldHVybiBmdW5jdGlvbiBjb25zdHJ1Y3RJbnRlcnBvbGF0ZWRGbihzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCkgewogICAgICBjb25zdCB4ID0gbiA9PT0gMSA/IHNyY1tzcmNPZmZzZXRdIDogc3JjW3NyY09mZnNldF0gKiogbjsKICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsZW5ndGg7ICsraikgewogICAgICAgIGRlc3RbZGVzdE9mZnNldCArIGpdID0gYzBbal0gKyB4ICogZGlmZltqXTsKICAgICAgfQogICAgfTsKICB9CiAgc3RhdGljIGNvbnN0cnVjdFN0aWNoZWQoZmFjdG9yeSwgZGljdCkgewogICAgY29uc3QgZG9tYWluID0gdG9OdW1iZXJBcnJheShkaWN0LmdldEFycmF5KCJEb21haW4iKSk7CiAgICBpZiAoIWRvbWFpbikgewogICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIk5vIGRvbWFpbiIpOwogICAgfQogICAgY29uc3QgaW5wdXRTaXplID0gZG9tYWluLmxlbmd0aCAvIDI7CiAgICBpZiAoaW5wdXRTaXplICE9PSAxKSB7CiAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiQmFkIGRvbWFpbiBmb3Igc3RpY2hlZCBmdW5jdGlvbiIpOwogICAgfQogICAgY29uc3QgewogICAgICB4cmVmCiAgICB9ID0gZmFjdG9yeTsKICAgIGNvbnN0IGZucyA9IFtdOwogICAgZm9yIChjb25zdCBmbiBvZiBkaWN0LmdldCgiRnVuY3Rpb25zIikpIHsKICAgICAgZm5zLnB1c2godGhpcy5wYXJzZShmYWN0b3J5LCB4cmVmLmZldGNoSWZSZWYoZm4pKSk7CiAgICB9CiAgICBjb25zdCBib3VuZHMgPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoIkJvdW5kcyIpKTsKICAgIGNvbnN0IGVuY29kZSA9IHRvTnVtYmVyQXJyYXkoZGljdC5nZXRBcnJheSgiRW5jb2RlIikpOwogICAgY29uc3QgdG1wQnVmID0gbmV3IEZsb2F0MzJBcnJheSgxKTsKICAgIHJldHVybiBmdW5jdGlvbiBjb25zdHJ1Y3RTdGljaGVkRm4oc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHsKICAgICAgY29uc3QgdiA9IE1hdGhDbGFtcChzcmNbc3JjT2Zmc2V0XSwgZG9tYWluWzBdLCBkb21haW5bMV0pOwogICAgICBjb25zdCBsZW5ndGggPSBib3VuZHMubGVuZ3RoOwogICAgICBsZXQgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgaWYgKHYgPCBib3VuZHNbaV0pIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBsZXQgZG1pbiA9IGRvbWFpblswXTsKICAgICAgaWYgKGkgPiAwKSB7CiAgICAgICAgZG1pbiA9IGJvdW5kc1tpIC0gMV07CiAgICAgIH0KICAgICAgbGV0IGRtYXggPSBkb21haW5bMV07CiAgICAgIGlmIChpIDwgYm91bmRzLmxlbmd0aCkgewogICAgICAgIGRtYXggPSBib3VuZHNbaV07CiAgICAgIH0KICAgICAgY29uc3Qgcm1pbiA9IGVuY29kZVsyICogaV07CiAgICAgIGNvbnN0IHJtYXggPSBlbmNvZGVbMiAqIGkgKyAxXTsKICAgICAgdG1wQnVmWzBdID0gZG1pbiA9PT0gZG1heCA/IHJtaW4gOiBybWluICsgKHYgLSBkbWluKSAqIChybWF4IC0gcm1pbikgLyAoZG1heCAtIGRtaW4pOwogICAgICBmbnNbaV0odG1wQnVmLCAwLCBkZXN0LCBkZXN0T2Zmc2V0KTsKICAgIH07CiAgfQogIHN0YXRpYyBjb25zdHJ1Y3RQb3N0U2NyaXB0KGZhY3RvcnksIGZuLCBkaWN0KSB7CiAgICBjb25zdCBkb21haW4gPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoIkRvbWFpbiIpKTsKICAgIGNvbnN0IHJhbmdlID0gdG9OdW1iZXJBcnJheShkaWN0LmdldEFycmF5KCJSYW5nZSIpKTsKICAgIGlmICghZG9tYWluKSB7CiAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiTm8gZG9tYWluLiIpOwogICAgfQogICAgaWYgKCFyYW5nZSkgewogICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIk5vIHJhbmdlLiIpOwogICAgfQogICAgY29uc3QgbGV4ZXIgPSBuZXcgUG9zdFNjcmlwdExleGVyKGZuKTsKICAgIGNvbnN0IHBhcnNlciA9IG5ldyBQb3N0U2NyaXB0UGFyc2VyKGxleGVyKTsKICAgIGNvbnN0IGNvZGUgPSBwYXJzZXIucGFyc2UoKTsKICAgIGlmIChmYWN0b3J5LmlzRXZhbFN1cHBvcnRlZCAmJiBGZWF0dXJlVGVzdC5pc0V2YWxTdXBwb3J0ZWQpIHsKICAgICAgY29uc3QgY29tcGlsZWQgPSBuZXcgUG9zdFNjcmlwdENvbXBpbGVyKCkuY29tcGlsZShjb2RlLCBkb21haW4sIHJhbmdlKTsKICAgICAgaWYgKGNvbXBpbGVkKSB7CiAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbigic3JjIiwgInNyY09mZnNldCIsICJkZXN0IiwgImRlc3RPZmZzZXQiLCBjb21waWxlZCk7CiAgICAgIH0KICAgIH0KICAgIGluZm8oIlVuYWJsZSB0byBjb21waWxlIFBTIGZ1bmN0aW9uIik7CiAgICBjb25zdCBudW1PdXRwdXRzID0gcmFuZ2UubGVuZ3RoID4+IDE7CiAgICBjb25zdCBudW1JbnB1dHMgPSBkb21haW4ubGVuZ3RoID4+IDE7CiAgICBjb25zdCBldmFsdWF0b3IgPSBuZXcgUG9zdFNjcmlwdEV2YWx1YXRvcihjb2RlKTsKICAgIGNvbnN0IGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgIGNvbnN0IE1BWF9DQUNIRV9TSVpFID0gMjA0OCAqIDQ7CiAgICBsZXQgY2FjaGVfYXZhaWxhYmxlID0gTUFYX0NBQ0hFX1NJWkU7CiAgICBjb25zdCB0bXBCdWYgPSBuZXcgRmxvYXQzMkFycmF5KG51bUlucHV0cyk7CiAgICByZXR1cm4gZnVuY3Rpb24gY29uc3RydWN0UG9zdFNjcmlwdEZuKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0KSB7CiAgICAgIGxldCBpLCB2YWx1ZTsKICAgICAgbGV0IGtleSA9ICIiOwogICAgICBjb25zdCBpbnB1dCA9IHRtcEJ1ZjsKICAgICAgZm9yIChpID0gMDsgaSA8IG51bUlucHV0czsgaSsrKSB7CiAgICAgICAgdmFsdWUgPSBzcmNbc3JjT2Zmc2V0ICsgaV07CiAgICAgICAgaW5wdXRbaV0gPSB2YWx1ZTsKICAgICAgICBrZXkgKz0gdmFsdWUgKyAiXyI7CiAgICAgIH0KICAgICAgY29uc3QgY2FjaGVkVmFsdWUgPSBjYWNoZVtrZXldOwogICAgICBpZiAoY2FjaGVkVmFsdWUgIT09IHVuZGVmaW5lZCkgewogICAgICAgIGRlc3Quc2V0KGNhY2hlZFZhbHVlLCBkZXN0T2Zmc2V0KTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3Qgb3V0cHV0ID0gbmV3IEZsb2F0MzJBcnJheShudW1PdXRwdXRzKTsKICAgICAgY29uc3Qgc3RhY2sgPSBldmFsdWF0b3IuZXhlY3V0ZShpbnB1dCk7CiAgICAgIGNvbnN0IHN0YWNrSW5kZXggPSBzdGFjay5sZW5ndGggLSBudW1PdXRwdXRzOwogICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtT3V0cHV0czsgaSsrKSB7CiAgICAgICAgdmFsdWUgPSBzdGFja1tzdGFja0luZGV4ICsgaV07CiAgICAgICAgbGV0IGJvdW5kID0gcmFuZ2VbaSAqIDJdOwogICAgICAgIGlmICh2YWx1ZSA8IGJvdW5kKSB7CiAgICAgICAgICB2YWx1ZSA9IGJvdW5kOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBib3VuZCA9IHJhbmdlW2kgKiAyICsgMV07CiAgICAgICAgICBpZiAodmFsdWUgPiBib3VuZCkgewogICAgICAgICAgICB2YWx1ZSA9IGJvdW5kOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBvdXRwdXRbaV0gPSB2YWx1ZTsKICAgICAgfQogICAgICBpZiAoY2FjaGVfYXZhaWxhYmxlID4gMCkgewogICAgICAgIGNhY2hlX2F2YWlsYWJsZS0tOwogICAgICAgIGNhY2hlW2tleV0gPSBvdXRwdXQ7CiAgICAgIH0KICAgICAgZGVzdC5zZXQob3V0cHV0LCBkZXN0T2Zmc2V0KTsKICAgIH07CiAgfQp9CmZ1bmN0aW9uIGlzUERGRnVuY3Rpb24odikgewogIGxldCBmbkRpY3Q7CiAgaWYgKHYgaW5zdGFuY2VvZiBEaWN0KSB7CiAgICBmbkRpY3QgPSB2OwogIH0gZWxzZSBpZiAodiBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pIHsKICAgIGZuRGljdCA9IHYuZGljdDsKICB9IGVsc2UgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gZm5EaWN0LmhhcygiRnVuY3Rpb25UeXBlIik7Cn0KY2xhc3MgUG9zdFNjcmlwdFN0YWNrIHsKICBzdGF0aWMgTUFYX1NUQUNLX1NJWkUgPSAxMDA7CiAgY29uc3RydWN0b3IoaW5pdGlhbFN0YWNrKSB7CiAgICB0aGlzLnN0YWNrID0gaW5pdGlhbFN0YWNrID8gQXJyYXkuZnJvbShpbml0aWFsU3RhY2spIDogW107CiAgfQogIHB1c2godmFsdWUpIHsKICAgIGlmICh0aGlzLnN0YWNrLmxlbmd0aCA+PSBQb3N0U2NyaXB0U3RhY2suTUFYX1NUQUNLX1NJWkUpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJQb3N0U2NyaXB0IGZ1bmN0aW9uIHN0YWNrIG92ZXJmbG93LiIpOwogICAgfQogICAgdGhpcy5zdGFjay5wdXNoKHZhbHVlKTsKICB9CiAgcG9wKCkgewogICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoIDw9IDApIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJQb3N0U2NyaXB0IGZ1bmN0aW9uIHN0YWNrIHVuZGVyZmxvdy4iKTsKICAgIH0KICAgIHJldHVybiB0aGlzLnN0YWNrLnBvcCgpOwogIH0KICBjb3B5KG4pIHsKICAgIGlmICh0aGlzLnN0YWNrLmxlbmd0aCArIG4gPj0gUG9zdFNjcmlwdFN0YWNrLk1BWF9TVEFDS19TSVpFKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiUG9zdFNjcmlwdCBmdW5jdGlvbiBzdGFjayBvdmVyZmxvdy4iKTsKICAgIH0KICAgIGNvbnN0IHN0YWNrID0gdGhpcy5zdGFjazsKICAgIGZvciAobGV0IGkgPSBzdGFjay5sZW5ndGggLSBuLCBqID0gbiAtIDE7IGogPj0gMDsgai0tLCBpKyspIHsKICAgICAgc3RhY2sucHVzaChzdGFja1tpXSk7CiAgICB9CiAgfQogIGluZGV4KG4pIHsKICAgIHRoaXMucHVzaCh0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gbiAtIDFdKTsKICB9CiAgcm9sbChuLCBwKSB7CiAgICBjb25zdCBzdGFjayA9IHRoaXMuc3RhY2s7CiAgICBjb25zdCBsID0gc3RhY2subGVuZ3RoIC0gbjsKICAgIGNvbnN0IHIgPSBzdGFjay5sZW5ndGggLSAxOwogICAgY29uc3QgYyA9IGwgKyAocCAtIE1hdGguZmxvb3IocCAvIG4pICogbik7CiAgICBmb3IgKGxldCBpID0gbCwgaiA9IHI7IGkgPCBqOyBpKyssIGotLSkgewogICAgICBjb25zdCB0ID0gc3RhY2tbaV07CiAgICAgIHN0YWNrW2ldID0gc3RhY2tbal07CiAgICAgIHN0YWNrW2pdID0gdDsKICAgIH0KICAgIGZvciAobGV0IGkgPSBsLCBqID0gYyAtIDE7IGkgPCBqOyBpKyssIGotLSkgewogICAgICBjb25zdCB0ID0gc3RhY2tbaV07CiAgICAgIHN0YWNrW2ldID0gc3RhY2tbal07CiAgICAgIHN0YWNrW2pdID0gdDsKICAgIH0KICAgIGZvciAobGV0IGkgPSBjLCBqID0gcjsgaSA8IGo7IGkrKywgai0tKSB7CiAgICAgIGNvbnN0IHQgPSBzdGFja1tpXTsKICAgICAgc3RhY2tbaV0gPSBzdGFja1tqXTsKICAgICAgc3RhY2tbal0gPSB0OwogICAgfQogIH0KfQpjbGFzcyBQb3N0U2NyaXB0RXZhbHVhdG9yIHsKICBjb25zdHJ1Y3RvcihvcGVyYXRvcnMpIHsKICAgIHRoaXMub3BlcmF0b3JzID0gb3BlcmF0b3JzOwogIH0KICBleGVjdXRlKGluaXRpYWxTdGFjaykgewogICAgY29uc3Qgc3RhY2sgPSBuZXcgUG9zdFNjcmlwdFN0YWNrKGluaXRpYWxTdGFjayk7CiAgICBsZXQgY291bnRlciA9IDA7CiAgICBjb25zdCBvcGVyYXRvcnMgPSB0aGlzLm9wZXJhdG9yczsKICAgIGNvbnN0IGxlbmd0aCA9IG9wZXJhdG9ycy5sZW5ndGg7CiAgICBsZXQgb3BlcmF0b3IsIGEsIGI7CiAgICB3aGlsZSAoY291bnRlciA8IGxlbmd0aCkgewogICAgICBvcGVyYXRvciA9IG9wZXJhdG9yc1tjb3VudGVyKytdOwogICAgICBpZiAodHlwZW9mIG9wZXJhdG9yID09PSAibnVtYmVyIikgewogICAgICAgIHN0YWNrLnB1c2gob3BlcmF0b3IpOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIHN3aXRjaCAob3BlcmF0b3IpIHsKICAgICAgICBjYXNlICJqeiI6CiAgICAgICAgICBiID0gc3RhY2sucG9wKCk7CiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7CiAgICAgICAgICBpZiAoIWEpIHsKICAgICAgICAgICAgY291bnRlciA9IGI7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJqIjoKICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTsKICAgICAgICAgIGNvdW50ZXIgPSBhOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiYWJzIjoKICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTsKICAgICAgICAgIHN0YWNrLnB1c2goTWF0aC5hYnMoYSkpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiYWRkIjoKICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTsKICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTsKICAgICAgICAgIHN0YWNrLnB1c2goYSArIGIpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiYW5kIjoKICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTsKICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTsKICAgICAgICAgIGlmICh0eXBlb2YgYSA9PT0gImJvb2xlYW4iICYmIHR5cGVvZiBiID09PSAiYm9vbGVhbiIpIHsKICAgICAgICAgICAgc3RhY2sucHVzaChhICYmIGIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RhY2sucHVzaChhICYgYik7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJhdGFuIjoKICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTsKICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTsKICAgICAgICAgIGEgPSBNYXRoLmF0YW4yKGEsIGIpIC8gTWF0aC5QSSAqIDE4MDsKICAgICAgICAgIGlmIChhIDwgMCkgewogICAgICAgICAgICBhICs9IDM2MDsKICAgICAgICAgIH0KICAgICAgICAgIHN0YWNrLnB1c2goYSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJiaXRzaGlmdCI6CiAgICAgICAgICBiID0gc3RhY2sucG9wKCk7CiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7CiAgICAgICAgICBpZiAoYSA+IDApIHsKICAgICAgICAgICAgc3RhY2sucHVzaChhIDw8IGIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RhY2sucHVzaChhID4+IGIpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiY2VpbGluZyI6CiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7CiAgICAgICAgICBzdGFjay5wdXNoKE1hdGguY2VpbChhKSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJjb3B5IjoKICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTsKICAgICAgICAgIHN0YWNrLmNvcHkoYSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJjb3MiOgogICAgICAgICAgYSA9IHN0YWNrLnBvcCgpOwogICAgICAgICAgc3RhY2sucHVzaChNYXRoLmNvcyhhICUgMzYwIC8gMTgwICogTWF0aC5QSSkpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiY3ZpIjoKICAgICAgICAgIGEgPSBzdGFjay5wb3AoKSB8IDA7CiAgICAgICAgICBzdGFjay5wdXNoKGEpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiY3ZyIjoKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImRpdiI6CiAgICAgICAgICBiID0gc3RhY2sucG9wKCk7CiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7CiAgICAgICAgICBzdGFjay5wdXNoKGEgLyBiKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImR1cCI6CiAgICAgICAgICBzdGFjay5jb3B5KDEpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiZXEiOgogICAgICAgICAgYiA9IHN0YWNrLnBvcCgpOwogICAgICAgICAgYSA9IHN0YWNrLnBvcCgpOwogICAgICAgICAgc3RhY2sucHVzaChhID09PSBiKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImV4Y2giOgogICAgICAgICAgc3RhY2sucm9sbCgyLCAxKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImV4cCI6CiAgICAgICAgICBiID0gc3RhY2sucG9wKCk7CiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7CiAgICAgICAgICBzdGFjay5wdXNoKGEgKiogYik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJmYWxzZSI6CiAgICAgICAgICBzdGFjay5wdXNoKGZhbHNlKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImZsb29yIjoKICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTsKICAgICAgICAgIHN0YWNrLnB1c2goTWF0aC5mbG9vcihhKSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJnZSI6CiAgICAgICAgICBiID0gc3RhY2sucG9wKCk7CiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7CiAgICAgICAgICBzdGFjay5wdXNoKGEgPj0gYik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJndCI6CiAgICAgICAgICBiID0gc3RhY2sucG9wKCk7CiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7CiAgICAgICAgICBzdGFjay5wdXNoKGEgPiBiKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImlkaXYiOgogICAgICAgICAgYiA9IHN0YWNrLnBvcCgpOwogICAgICAgICAgYSA9IHN0YWNrLnBvcCgpOwogICAgICAgICAgc3RhY2sucHVzaChhIC8gYiB8IDApOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiaW5kZXgiOgogICAgICAgICAgYSA9IHN0YWNrLnBvcCgpOwogICAgICAgICAgc3RhY2suaW5kZXgoYSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJsZSI6CiAgICAgICAgICBiID0gc3RhY2sucG9wKCk7CiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7CiAgICAgICAgICBzdGFjay5wdXNoKGEgPD0gYik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJsbiI6CiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7CiAgICAgICAgICBzdGFjay5wdXNoKE1hdGgubG9nKGEpKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImxvZyI6CiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7CiAgICAgICAgICBzdGFjay5wdXNoKE1hdGgubG9nMTAoYSkpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAibHQiOgogICAgICAgICAgYiA9IHN0YWNrLnBvcCgpOwogICAgICAgICAgYSA9IHN0YWNrLnBvcCgpOwogICAgICAgICAgc3RhY2sucHVzaChhIDwgYik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJtb2QiOgogICAgICAgICAgYiA9IHN0YWNrLnBvcCgpOwogICAgICAgICAgYSA9IHN0YWNrLnBvcCgpOwogICAgICAgICAgc3RhY2sucHVzaChhICUgYik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJtdWwiOgogICAgICAgICAgYiA9IHN0YWNrLnBvcCgpOwogICAgICAgICAgYSA9IHN0YWNrLnBvcCgpOwogICAgICAgICAgc3RhY2sucHVzaChhICogYik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJuZSI6CiAgICAgICAgICBiID0gc3RhY2sucG9wKCk7CiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7CiAgICAgICAgICBzdGFjay5wdXNoKGEgIT09IGIpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAibmVnIjoKICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTsKICAgICAgICAgIHN0YWNrLnB1c2goLWEpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAibm90IjoKICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTsKICAgICAgICAgIGlmICh0eXBlb2YgYSA9PT0gImJvb2xlYW4iKSB7CiAgICAgICAgICAgIHN0YWNrLnB1c2goIWEpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RhY2sucHVzaCh+YSk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJvciI6CiAgICAgICAgICBiID0gc3RhY2sucG9wKCk7CiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7CiAgICAgICAgICBpZiAodHlwZW9mIGEgPT09ICJib29sZWFuIiAmJiB0eXBlb2YgYiA9PT0gImJvb2xlYW4iKSB7CiAgICAgICAgICAgIHN0YWNrLnB1c2goYSB8fCBiKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0YWNrLnB1c2goYSB8IGIpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAicG9wIjoKICAgICAgICAgIHN0YWNrLnBvcCgpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAicm9sbCI6CiAgICAgICAgICBiID0gc3RhY2sucG9wKCk7CiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7CiAgICAgICAgICBzdGFjay5yb2xsKGEsIGIpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAicm91bmQiOgogICAgICAgICAgYSA9IHN0YWNrLnBvcCgpOwogICAgICAgICAgc3RhY2sucHVzaChNYXRoLnJvdW5kKGEpKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgInNpbiI6CiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7CiAgICAgICAgICBzdGFjay5wdXNoKE1hdGguc2luKGEgJSAzNjAgLyAxODAgKiBNYXRoLlBJKSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJzcXJ0IjoKICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTsKICAgICAgICAgIHN0YWNrLnB1c2goTWF0aC5zcXJ0KGEpKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgInN1YiI6CiAgICAgICAgICBiID0gc3RhY2sucG9wKCk7CiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7CiAgICAgICAgICBzdGFjay5wdXNoKGEgLSBiKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgInRydWUiOgogICAgICAgICAgc3RhY2sucHVzaCh0cnVlKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgInRydW5jYXRlIjoKICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTsKICAgICAgICAgIGEgPSBhIDwgMCA/IE1hdGguY2VpbChhKSA6IE1hdGguZmxvb3IoYSk7CiAgICAgICAgICBzdGFjay5wdXNoKGEpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAieG9yIjoKICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTsKICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTsKICAgICAgICAgIGlmICh0eXBlb2YgYSA9PT0gImJvb2xlYW4iICYmIHR5cGVvZiBiID09PSAiYm9vbGVhbiIpIHsKICAgICAgICAgICAgc3RhY2sucHVzaChhICE9PSBiKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0YWNrLnB1c2goYSBeIGIpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcihgVW5rbm93biBvcGVyYXRvciAke29wZXJhdG9yfWApOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc3RhY2suc3RhY2s7CiAgfQp9CmNsYXNzIEFzdE5vZGUgewogIGNvbnN0cnVjdG9yKHR5cGUpIHsKICAgIHRoaXMudHlwZSA9IHR5cGU7CiAgfQogIHZpc2l0KHZpc2l0b3IpIHsKICAgIHVucmVhY2hhYmxlKCJhYnN0cmFjdCBtZXRob2QiKTsKICB9Cn0KY2xhc3MgQXN0QXJndW1lbnQgZXh0ZW5kcyBBc3ROb2RlIHsKICBjb25zdHJ1Y3RvcihpbmRleCwgbWluLCBtYXgpIHsKICAgIHN1cGVyKCJhcmdzIik7CiAgICB0aGlzLmluZGV4ID0gaW5kZXg7CiAgICB0aGlzLm1pbiA9IG1pbjsKICAgIHRoaXMubWF4ID0gbWF4OwogIH0KICB2aXNpdCh2aXNpdG9yKSB7CiAgICB2aXNpdG9yLnZpc2l0QXJndW1lbnQodGhpcyk7CiAgfQp9CmNsYXNzIEFzdExpdGVyYWwgZXh0ZW5kcyBBc3ROb2RlIHsKICBjb25zdHJ1Y3RvcihudW1iZXIpIHsKICAgIHN1cGVyKCJsaXRlcmFsIik7CiAgICB0aGlzLm51bWJlciA9IG51bWJlcjsKICAgIHRoaXMubWluID0gbnVtYmVyOwogICAgdGhpcy5tYXggPSBudW1iZXI7CiAgfQogIHZpc2l0KHZpc2l0b3IpIHsKICAgIHZpc2l0b3IudmlzaXRMaXRlcmFsKHRoaXMpOwogIH0KfQpjbGFzcyBBc3RCaW5hcnlPcGVyYXRpb24gZXh0ZW5kcyBBc3ROb2RlIHsKICBjb25zdHJ1Y3RvcihvcCwgYXJnMSwgYXJnMiwgbWluLCBtYXgpIHsKICAgIHN1cGVyKCJiaW5hcnkiKTsKICAgIHRoaXMub3AgPSBvcDsKICAgIHRoaXMuYXJnMSA9IGFyZzE7CiAgICB0aGlzLmFyZzIgPSBhcmcyOwogICAgdGhpcy5taW4gPSBtaW47CiAgICB0aGlzLm1heCA9IG1heDsKICB9CiAgdmlzaXQodmlzaXRvcikgewogICAgdmlzaXRvci52aXNpdEJpbmFyeU9wZXJhdGlvbih0aGlzKTsKICB9Cn0KY2xhc3MgQXN0TWluIGV4dGVuZHMgQXN0Tm9kZSB7CiAgY29uc3RydWN0b3IoYXJnLCBtYXgpIHsKICAgIHN1cGVyKCJtYXgiKTsKICAgIHRoaXMuYXJnID0gYXJnOwogICAgdGhpcy5taW4gPSBhcmcubWluOwogICAgdGhpcy5tYXggPSBtYXg7CiAgfQogIHZpc2l0KHZpc2l0b3IpIHsKICAgIHZpc2l0b3IudmlzaXRNaW4odGhpcyk7CiAgfQp9CmNsYXNzIEFzdFZhcmlhYmxlIGV4dGVuZHMgQXN0Tm9kZSB7CiAgY29uc3RydWN0b3IoaW5kZXgsIG1pbiwgbWF4KSB7CiAgICBzdXBlcigidmFyIik7CiAgICB0aGlzLmluZGV4ID0gaW5kZXg7CiAgICB0aGlzLm1pbiA9IG1pbjsKICAgIHRoaXMubWF4ID0gbWF4OwogIH0KICB2aXNpdCh2aXNpdG9yKSB7CiAgICB2aXNpdG9yLnZpc2l0VmFyaWFibGUodGhpcyk7CiAgfQp9CmNsYXNzIEFzdFZhcmlhYmxlRGVmaW5pdGlvbiBleHRlbmRzIEFzdE5vZGUgewogIGNvbnN0cnVjdG9yKHZhcmlhYmxlLCBhcmcpIHsKICAgIHN1cGVyKCJkZWZpbml0aW9uIik7CiAgICB0aGlzLnZhcmlhYmxlID0gdmFyaWFibGU7CiAgICB0aGlzLmFyZyA9IGFyZzsKICB9CiAgdmlzaXQodmlzaXRvcikgewogICAgdmlzaXRvci52aXNpdFZhcmlhYmxlRGVmaW5pdGlvbih0aGlzKTsKICB9Cn0KY2xhc3MgRXhwcmVzc2lvbkJ1aWxkZXJWaXNpdG9yIHsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHRoaXMucGFydHMgPSBbXTsKICB9CiAgdmlzaXRBcmd1bWVudChhcmcpIHsKICAgIHRoaXMucGFydHMucHVzaCgiTWF0aC5tYXgoIiwgYXJnLm1pbiwgIiwgTWF0aC5taW4oIiwgYXJnLm1heCwgIiwgc3JjW3NyY09mZnNldCArICIsIGFyZy5pbmRleCwgIl0pKSIpOwogIH0KICB2aXNpdFZhcmlhYmxlKHZhcmlhYmxlKSB7CiAgICB0aGlzLnBhcnRzLnB1c2goInYiLCB2YXJpYWJsZS5pbmRleCk7CiAgfQogIHZpc2l0TGl0ZXJhbChsaXRlcmFsKSB7CiAgICB0aGlzLnBhcnRzLnB1c2gobGl0ZXJhbC5udW1iZXIpOwogIH0KICB2aXNpdEJpbmFyeU9wZXJhdGlvbihvcGVyYXRpb24pIHsKICAgIHRoaXMucGFydHMucHVzaCgiKCIpOwogICAgb3BlcmF0aW9uLmFyZzEudmlzaXQodGhpcyk7CiAgICB0aGlzLnBhcnRzLnB1c2goIiAiLCBvcGVyYXRpb24ub3AsICIgIik7CiAgICBvcGVyYXRpb24uYXJnMi52aXNpdCh0aGlzKTsKICAgIHRoaXMucGFydHMucHVzaCgiKSIpOwogIH0KICB2aXNpdFZhcmlhYmxlRGVmaW5pdGlvbihkZWZpbml0aW9uKSB7CiAgICB0aGlzLnBhcnRzLnB1c2goInZhciAiKTsKICAgIGRlZmluaXRpb24udmFyaWFibGUudmlzaXQodGhpcyk7CiAgICB0aGlzLnBhcnRzLnB1c2goIiA9ICIpOwogICAgZGVmaW5pdGlvbi5hcmcudmlzaXQodGhpcyk7CiAgICB0aGlzLnBhcnRzLnB1c2goIjsiKTsKICB9CiAgdmlzaXRNaW4obWF4KSB7CiAgICB0aGlzLnBhcnRzLnB1c2goIk1hdGgubWluKCIpOwogICAgbWF4LmFyZy52aXNpdCh0aGlzKTsKICAgIHRoaXMucGFydHMucHVzaCgiLCAiLCBtYXgubWF4LCAiKSIpOwogIH0KICB0b1N0cmluZygpIHsKICAgIHJldHVybiB0aGlzLnBhcnRzLmpvaW4oIiIpOwogIH0KfQpmdW5jdGlvbiBidWlsZEFkZE9wZXJhdGlvbihudW0xLCBudW0yKSB7CiAgaWYgKG51bTIudHlwZSA9PT0gImxpdGVyYWwiICYmIG51bTIubnVtYmVyID09PSAwKSB7CiAgICByZXR1cm4gbnVtMTsKICB9CiAgaWYgKG51bTEudHlwZSA9PT0gImxpdGVyYWwiICYmIG51bTEubnVtYmVyID09PSAwKSB7CiAgICByZXR1cm4gbnVtMjsKICB9CiAgaWYgKG51bTIudHlwZSA9PT0gImxpdGVyYWwiICYmIG51bTEudHlwZSA9PT0gImxpdGVyYWwiKSB7CiAgICByZXR1cm4gbmV3IEFzdExpdGVyYWwobnVtMS5udW1iZXIgKyBudW0yLm51bWJlcik7CiAgfQogIHJldHVybiBuZXcgQXN0QmluYXJ5T3BlcmF0aW9uKCIrIiwgbnVtMSwgbnVtMiwgbnVtMS5taW4gKyBudW0yLm1pbiwgbnVtMS5tYXggKyBudW0yLm1heCk7Cn0KZnVuY3Rpb24gYnVpbGRNdWxPcGVyYXRpb24obnVtMSwgbnVtMikgewogIGlmIChudW0yLnR5cGUgPT09ICJsaXRlcmFsIikgewogICAgaWYgKG51bTIubnVtYmVyID09PSAwKSB7CiAgICAgIHJldHVybiBuZXcgQXN0TGl0ZXJhbCgwKTsKICAgIH0gZWxzZSBpZiAobnVtMi5udW1iZXIgPT09IDEpIHsKICAgICAgcmV0dXJuIG51bTE7CiAgICB9IGVsc2UgaWYgKG51bTEudHlwZSA9PT0gImxpdGVyYWwiKSB7CiAgICAgIHJldHVybiBuZXcgQXN0TGl0ZXJhbChudW0xLm51bWJlciAqIG51bTIubnVtYmVyKTsKICAgIH0KICB9CiAgaWYgKG51bTEudHlwZSA9PT0gImxpdGVyYWwiKSB7CiAgICBpZiAobnVtMS5udW1iZXIgPT09IDApIHsKICAgICAgcmV0dXJuIG5ldyBBc3RMaXRlcmFsKDApOwogICAgfSBlbHNlIGlmIChudW0xLm51bWJlciA9PT0gMSkgewogICAgICByZXR1cm4gbnVtMjsKICAgIH0KICB9CiAgY29uc3QgbWluID0gTWF0aC5taW4obnVtMS5taW4gKiBudW0yLm1pbiwgbnVtMS5taW4gKiBudW0yLm1heCwgbnVtMS5tYXggKiBudW0yLm1pbiwgbnVtMS5tYXggKiBudW0yLm1heCk7CiAgY29uc3QgbWF4ID0gTWF0aC5tYXgobnVtMS5taW4gKiBudW0yLm1pbiwgbnVtMS5taW4gKiBudW0yLm1heCwgbnVtMS5tYXggKiBudW0yLm1pbiwgbnVtMS5tYXggKiBudW0yLm1heCk7CiAgcmV0dXJuIG5ldyBBc3RCaW5hcnlPcGVyYXRpb24oIioiLCBudW0xLCBudW0yLCBtaW4sIG1heCk7Cn0KZnVuY3Rpb24gYnVpbGRTdWJPcGVyYXRpb24obnVtMSwgbnVtMikgewogIGlmIChudW0yLnR5cGUgPT09ICJsaXRlcmFsIikgewogICAgaWYgKG51bTIubnVtYmVyID09PSAwKSB7CiAgICAgIHJldHVybiBudW0xOwogICAgfSBlbHNlIGlmIChudW0xLnR5cGUgPT09ICJsaXRlcmFsIikgewogICAgICByZXR1cm4gbmV3IEFzdExpdGVyYWwobnVtMS5udW1iZXIgLSBudW0yLm51bWJlcik7CiAgICB9CiAgfQogIGlmIChudW0yLnR5cGUgPT09ICJiaW5hcnkiICYmIG51bTIub3AgPT09ICItIiAmJiBudW0xLnR5cGUgPT09ICJsaXRlcmFsIiAmJiBudW0xLm51bWJlciA9PT0gMSAmJiBudW0yLmFyZzEudHlwZSA9PT0gImxpdGVyYWwiICYmIG51bTIuYXJnMS5udW1iZXIgPT09IDEpIHsKICAgIHJldHVybiBudW0yLmFyZzI7CiAgfQogIHJldHVybiBuZXcgQXN0QmluYXJ5T3BlcmF0aW9uKCItIiwgbnVtMSwgbnVtMiwgbnVtMS5taW4gLSBudW0yLm1heCwgbnVtMS5tYXggLSBudW0yLm1pbik7Cn0KZnVuY3Rpb24gYnVpbGRNaW5PcGVyYXRpb24obnVtMSwgbWF4KSB7CiAgaWYgKG51bTEubWluID49IG1heCkgewogICAgcmV0dXJuIG5ldyBBc3RMaXRlcmFsKG1heCk7CiAgfSBlbHNlIGlmIChudW0xLm1heCA8PSBtYXgpIHsKICAgIHJldHVybiBudW0xOwogIH0KICByZXR1cm4gbmV3IEFzdE1pbihudW0xLCBtYXgpOwp9CmNsYXNzIFBvc3RTY3JpcHRDb21waWxlciB7CiAgY29tcGlsZShjb2RlLCBkb21haW4sIHJhbmdlKSB7CiAgICBjb25zdCBzdGFjayA9IFtdOwogICAgY29uc3QgaW5zdHJ1Y3Rpb25zID0gW107CiAgICBjb25zdCBpbnB1dFNpemUgPSBkb21haW4ubGVuZ3RoID4+IDEsCiAgICAgIG91dHB1dFNpemUgPSByYW5nZS5sZW5ndGggPj4gMTsKICAgIGxldCBsYXN0UmVnaXN0ZXIgPSAwOwogICAgbGV0IG4sIGo7CiAgICBsZXQgbnVtMSwgbnVtMiwgYXN0MSwgYXN0MiwgdG1wVmFyLCBpdGVtOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dFNpemU7IGkrKykgewogICAgICBzdGFjay5wdXNoKG5ldyBBc3RBcmd1bWVudChpLCBkb21haW5baSAqIDJdLCBkb21haW5baSAqIDIgKyAxXSkpOwogICAgfQogICAgZm9yIChsZXQgaSA9IDAsIGlpID0gY29kZS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CiAgICAgIGl0ZW0gPSBjb2RlW2ldOwogICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICJudW1iZXIiKSB7CiAgICAgICAgc3RhY2sucHVzaChuZXcgQXN0TGl0ZXJhbChpdGVtKSk7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgc3dpdGNoIChpdGVtKSB7CiAgICAgICAgY2FzZSAiYWRkIjoKICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPCAyKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgfQogICAgICAgICAgbnVtMiA9IHN0YWNrLnBvcCgpOwogICAgICAgICAgbnVtMSA9IHN0YWNrLnBvcCgpOwogICAgICAgICAgc3RhY2sucHVzaChidWlsZEFkZE9wZXJhdGlvbihudW0xLCBudW0yKSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJjdnIiOgogICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA8IDEpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJtdWwiOgogICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA8IDIpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgICBudW0yID0gc3RhY2sucG9wKCk7CiAgICAgICAgICBudW0xID0gc3RhY2sucG9wKCk7CiAgICAgICAgICBzdGFjay5wdXNoKGJ1aWxkTXVsT3BlcmF0aW9uKG51bTEsIG51bTIpKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgInN1YiI6CiAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoIDwgMikgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIH0KICAgICAgICAgIG51bTIgPSBzdGFjay5wb3AoKTsKICAgICAgICAgIG51bTEgPSBzdGFjay5wb3AoKTsKICAgICAgICAgIHN0YWNrLnB1c2goYnVpbGRTdWJPcGVyYXRpb24obnVtMSwgbnVtMikpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiZXhjaCI6CiAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoIDwgMikgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIH0KICAgICAgICAgIGFzdDEgPSBzdGFjay5wb3AoKTsKICAgICAgICAgIGFzdDIgPSBzdGFjay5wb3AoKTsKICAgICAgICAgIHN0YWNrLnB1c2goYXN0MSwgYXN0Mik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJwb3AiOgogICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA8IDEpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgICBzdGFjay5wb3AoKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImluZGV4IjoKICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPCAxKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgfQogICAgICAgICAgbnVtMSA9IHN0YWNrLnBvcCgpOwogICAgICAgICAgaWYgKG51bTEudHlwZSAhPT0gImxpdGVyYWwiKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgfQogICAgICAgICAgbiA9IG51bTEubnVtYmVyOwogICAgICAgICAgaWYgKG4gPCAwIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG4pIHx8IHN0YWNrLmxlbmd0aCA8IG4pIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgICBhc3QxID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gbiAtIDFdOwogICAgICAgICAgaWYgKGFzdDEudHlwZSA9PT0gImxpdGVyYWwiIHx8IGFzdDEudHlwZSA9PT0gInZhciIpIHsKICAgICAgICAgICAgc3RhY2sucHVzaChhc3QxKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICB0bXBWYXIgPSBuZXcgQXN0VmFyaWFibGUobGFzdFJlZ2lzdGVyKyssIGFzdDEubWluLCBhc3QxLm1heCk7CiAgICAgICAgICBzdGFja1tzdGFjay5sZW5ndGggLSBuIC0gMV0gPSB0bXBWYXI7CiAgICAgICAgICBzdGFjay5wdXNoKHRtcFZhcik7CiAgICAgICAgICBpbnN0cnVjdGlvbnMucHVzaChuZXcgQXN0VmFyaWFibGVEZWZpbml0aW9uKHRtcFZhciwgYXN0MSkpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiZHVwIjoKICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPCAxKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHR5cGVvZiBjb2RlW2kgKyAxXSA9PT0gIm51bWJlciIgJiYgY29kZVtpICsgMl0gPT09ICJndCIgJiYgY29kZVtpICsgM10gPT09IGkgKyA3ICYmIGNvZGVbaSArIDRdID09PSAianoiICYmIGNvZGVbaSArIDVdID09PSAicG9wIiAmJiBjb2RlW2kgKyA2XSA9PT0gY29kZVtpICsgMV0pIHsKICAgICAgICAgICAgbnVtMSA9IHN0YWNrLnBvcCgpOwogICAgICAgICAgICBzdGFjay5wdXNoKGJ1aWxkTWluT3BlcmF0aW9uKG51bTEsIGNvZGVbaSArIDFdKSk7CiAgICAgICAgICAgIGkgKz0gNjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBhc3QxID0gc3RhY2suYXQoLTEpOwogICAgICAgICAgaWYgKGFzdDEudHlwZSA9PT0gImxpdGVyYWwiIHx8IGFzdDEudHlwZSA9PT0gInZhciIpIHsKICAgICAgICAgICAgc3RhY2sucHVzaChhc3QxKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICB0bXBWYXIgPSBuZXcgQXN0VmFyaWFibGUobGFzdFJlZ2lzdGVyKyssIGFzdDEubWluLCBhc3QxLm1heCk7CiAgICAgICAgICBzdGFja1tzdGFjay5sZW5ndGggLSAxXSA9IHRtcFZhcjsKICAgICAgICAgIHN0YWNrLnB1c2godG1wVmFyKTsKICAgICAgICAgIGluc3RydWN0aW9ucy5wdXNoKG5ldyBBc3RWYXJpYWJsZURlZmluaXRpb24odG1wVmFyLCBhc3QxKSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJyb2xsIjoKICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPCAyKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgfQogICAgICAgICAgbnVtMiA9IHN0YWNrLnBvcCgpOwogICAgICAgICAgbnVtMSA9IHN0YWNrLnBvcCgpOwogICAgICAgICAgaWYgKG51bTIudHlwZSAhPT0gImxpdGVyYWwiIHx8IG51bTEudHlwZSAhPT0gImxpdGVyYWwiKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgfQogICAgICAgICAgaiA9IG51bTIubnVtYmVyOwogICAgICAgICAgbiA9IG51bTEubnVtYmVyOwogICAgICAgICAgaWYgKG4gPD0gMCB8fCAhTnVtYmVyLmlzSW50ZWdlcihuKSB8fCAhTnVtYmVyLmlzSW50ZWdlcihqKSB8fCBzdGFjay5sZW5ndGggPCBuKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgfQogICAgICAgICAgaiA9IChqICUgbiArIG4pICUgbjsKICAgICAgICAgIGlmIChqID09PSAwKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgc3RhY2sucHVzaCguLi5zdGFjay5zcGxpY2Uoc3RhY2subGVuZ3RoIC0gbiwgbiAtIGopKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfQogICAgaWYgKHN0YWNrLmxlbmd0aCAhPT0gb3V0cHV0U2l6ZSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IHJlc3VsdCA9IFtdOwogICAgZm9yIChjb25zdCBpbnN0cnVjdGlvbiBvZiBpbnN0cnVjdGlvbnMpIHsKICAgICAgY29uc3Qgc3RhdGVtZW50QnVpbGRlciA9IG5ldyBFeHByZXNzaW9uQnVpbGRlclZpc2l0b3IoKTsKICAgICAgaW5zdHJ1Y3Rpb24udmlzaXQoc3RhdGVtZW50QnVpbGRlcik7CiAgICAgIHJlc3VsdC5wdXNoKHN0YXRlbWVudEJ1aWxkZXIudG9TdHJpbmcoKSk7CiAgICB9CiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBzdGFjay5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CiAgICAgIGNvbnN0IGV4cHIgPSBzdGFja1tpXSwKICAgICAgICBzdGF0ZW1lbnRCdWlsZGVyID0gbmV3IEV4cHJlc3Npb25CdWlsZGVyVmlzaXRvcigpOwogICAgICBleHByLnZpc2l0KHN0YXRlbWVudEJ1aWxkZXIpOwogICAgICBjb25zdCBtaW4gPSByYW5nZVtpICogMl0sCiAgICAgICAgbWF4ID0gcmFuZ2VbaSAqIDIgKyAxXTsKICAgICAgY29uc3Qgb3V0ID0gW3N0YXRlbWVudEJ1aWxkZXIudG9TdHJpbmcoKV07CiAgICAgIGlmIChtaW4gPiBleHByLm1pbikgewogICAgICAgIG91dC51bnNoaWZ0KCJNYXRoLm1heCgiLCBtaW4sICIsICIpOwogICAgICAgIG91dC5wdXNoKCIpIik7CiAgICAgIH0KICAgICAgaWYgKG1heCA8IGV4cHIubWF4KSB7CiAgICAgICAgb3V0LnVuc2hpZnQoIk1hdGgubWluKCIsIG1heCwgIiwgIik7CiAgICAgICAgb3V0LnB1c2goIikiKTsKICAgICAgfQogICAgICBvdXQudW5zaGlmdCgiZGVzdFtkZXN0T2Zmc2V0ICsgIiwgaSwgIl0gPSAiKTsKICAgICAgb3V0LnB1c2goIjsiKTsKICAgICAgcmVzdWx0LnB1c2gob3V0LmpvaW4oIiIpKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQuam9pbigiXG4iKTsKICB9Cn0KCjsvLyAuL3NyYy9jb3JlL2JpZGkuanMKCmNvbnN0IGJhc2VUeXBlcyA9IFsiQk4iLCAiQk4iLCAiQk4iLCAiQk4iLCAiQk4iLCAiQk4iLCAiQk4iLCAiQk4iLCAiQk4iLCAiUyIsICJCIiwgIlMiLCAiV1MiLCAiQiIsICJCTiIsICJCTiIsICJCTiIsICJCTiIsICJCTiIsICJCTiIsICJCTiIsICJCTiIsICJCTiIsICJCTiIsICJCTiIsICJCTiIsICJCTiIsICJCTiIsICJCIiwgIkIiLCAiQiIsICJTIiwgIldTIiwgIk9OIiwgIk9OIiwgIkVUIiwgIkVUIiwgIkVUIiwgIk9OIiwgIk9OIiwgIk9OIiwgIk9OIiwgIk9OIiwgIkVTIiwgIkNTIiwgIkVTIiwgIkNTIiwgIkNTIiwgIkVOIiwgIkVOIiwgIkVOIiwgIkVOIiwgIkVOIiwgIkVOIiwgIkVOIiwgIkVOIiwgIkVOIiwgIkVOIiwgIkNTIiwgIk9OIiwgIk9OIiwgIk9OIiwgIk9OIiwgIk9OIiwgIk9OIiwgIkwiLCAiTCIsICJMIiwgIkwiLCAiTCIsICJMIiwgIkwiLCAiTCIsICJMIiwgIkwiLCAiTCIsICJMIiwgIkwiLCAiTCIsICJMIiwgIkwiLCAiTCIsICJMIiwgIkwiLCAiTCIsICJMIiwgIkwiLCAiTCIsICJMIiwgIkwiLCAiTCIsICJPTiIsICJPTiIsICJPTiIsICJPTiIsICJPTiIsICJPTiIsICJMIiwgIkwiLCAiTCIsICJMIiwgIkwiLCAiTCIsICJMIiwgIkwiLCAiTCIsICJMIiwgIkwiLCAiTCIsICJMIiwgIkwiLCAiTCIsICJMIiwgIkwiLCAiTCIsICJMIiwgIkwiLCAiTCIsICJMIiwgIkwiLCAiTCIsICJMIiwgIkwiLCAiT04iLCAiT04iLCAiT04iLCAiT04iLCAiQk4iLCAiQk4iLCAiQk4iLCAiQk4iLCAiQk4iLCAiQk4iLCAiQiIsICJCTiIsICJCTiIsICJCTiIsICJCTiIsICJCTiIsICJCTiIsICJCTiIsICJCTiIsICJCTiIsICJCTiIsICJCTiIsICJCTiIsICJCTiIsICJCTiIsICJCTiIsICJCTiIsICJCTiIsICJCTiIsICJCTiIsICJCTiIsICJCTiIsICJCTiIsICJCTiIsICJCTiIsICJCTiIsICJCTiIsICJDUyIsICJPTiIsICJFVCIsICJFVCIsICJFVCIsICJFVCIsICJPTiIsICJPTiIsICJPTiIsICJPTiIsICJMIiwgIk9OIiwgIk9OIiwgIkJOIiwgIk9OIiwgIk9OIiwgIkVUIiwgIkVUIiwgIkVOIiwgIkVOIiwgIk9OIiwgIkwiLCAiT04iLCAiT04iLCAiT04iLCAiRU4iLCAiTCIsICJPTiIsICJPTiIsICJPTiIsICJPTiIsICJPTiIsICJMIiwgIkwiLCAiTCIsICJMIiwgIkwiLCAiTCIsICJMIiwgIkwiLCAiTCIsICJMIiwgIkwiLCAiTCIsICJMIiwgIkwiLCAiTCIsICJMIiwgIkwiLCAiTCIsICJMIiwgIkwiLCAiTCIsICJMIiwgIkwiLCAiT04iLCAiTCIsICJMIiwgIkwiLCAiTCIsICJMIiwgIkwiLCAiTCIsICJMIiwgIkwiLCAiTCIsICJMIiwgIkwiLCAiTCIsICJMIiwgIkwiLCAiTCIsICJMIiwgIkwiLCAiTCIsICJMIiwgIkwiLCAiTCIsICJMIiwgIkwiLCAiTCIsICJMIiwgIkwiLCAiTCIsICJMIiwgIkwiLCAiTCIsICJPTiIsICJMIiwgIkwiLCAiTCIsICJMIiwgIkwiLCAiTCIsICJMIiwgIkwiXTsKY29uc3QgYXJhYmljVHlwZXMgPSBbIkFOIiwgIkFOIiwgIkFOIiwgIkFOIiwgIkFOIiwgIkFOIiwgIk9OIiwgIk9OIiwgIkFMIiwgIkVUIiwgIkVUIiwgIkFMIiwgIkNTIiwgIkFMIiwgIk9OIiwgIk9OIiwgIk5TTSIsICJOU00iLCAiTlNNIiwgIk5TTSIsICJOU00iLCAiTlNNIiwgIk5TTSIsICJOU00iLCAiTlNNIiwgIk5TTSIsICJOU00iLCAiQUwiLCAiQUwiLCAiIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIkFMIiwgIk5TTSIsICJOU00iLCAiTlNNIiwgIk5TTSIsICJOU00iLCAiTlNNIiwgIk5TTSIsICJOU00iLCAiTlNNIiwgIk5TTSIsICJOU00iLCAiTlNNIiwgIk5TTSIsICJOU00iLCAiTlNNIiwgIk5TTSIsICJOU00iLCAiTlNNIiwgIk5TTSIsICJOU00iLCAiTlNNIiwgIkFOIiwgIkFOIiwgIkFOIiwgIkFOIiwgIkFOIiwgIkFOIiwgIkFOIiwgIkFOIiwgIkFOIiwgIkFOIiwgIkVUIiwgIkFOIiwgIkFOIiwgIkFMIiwgIkFMIiwgIkFMIiwgIk5TTSIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJBTCIsICJOU00iLCAiTlNNIiwgIk5TTSIsICJOU00iLCAiTlNNIiwgIk5TTSIsICJOU00iLCAiQU4iLCAiT04iLCAiTlNNIiwgIk5TTSIsICJOU00iLCAiTlNNIiwgIk5TTSIsICJOU00iLCAiQUwiLCAiQUwiLCAiTlNNIiwgIk5TTSIsICJPTiIsICJOU00iLCAiTlNNIiwgIk5TTSIsICJOU00iLCAiQUwiLCAiQUwiLCAiRU4iLCAiRU4iLCAiRU4iLCAiRU4iLCAiRU4iLCAiRU4iLCAiRU4iLCAiRU4iLCAiRU4iLCAiRU4iLCAiQUwiLCAiQUwiLCAiQUwiLCAiQUwiLCAiQUwiLCAiQUwiXTsKZnVuY3Rpb24gaXNPZGQoaSkgewogIHJldHVybiAoaSAmIDEpICE9PSAwOwp9CmZ1bmN0aW9uIGlzRXZlbihpKSB7CiAgcmV0dXJuIChpICYgMSkgPT09IDA7Cn0KZnVuY3Rpb24gZmluZFVuZXF1YWwoYXJyLCBzdGFydCwgdmFsdWUpIHsKICBsZXQgaiwgamo7CiAgZm9yIChqID0gc3RhcnQsIGpqID0gYXJyLmxlbmd0aDsgaiA8IGpqOyArK2opIHsKICAgIGlmIChhcnJbal0gIT09IHZhbHVlKSB7CiAgICAgIHJldHVybiBqOwogICAgfQogIH0KICByZXR1cm4gajsKfQpmdW5jdGlvbiByZXZlcnNlVmFsdWVzKGFyciwgc3RhcnQsIGVuZCkgewogIGZvciAobGV0IGkgPSBzdGFydCwgaiA9IGVuZCAtIDE7IGkgPCBqOyArK2ksIC0taikgewogICAgY29uc3QgdGVtcCA9IGFycltpXTsKICAgIGFycltpXSA9IGFycltqXTsKICAgIGFycltqXSA9IHRlbXA7CiAgfQp9CmZ1bmN0aW9uIGNyZWF0ZUJpZGlUZXh0KHN0ciwgaXNMVFIsIHZlcnRpY2FsID0gZmFsc2UpIHsKICBsZXQgZGlyID0gImx0ciI7CiAgaWYgKHZlcnRpY2FsKSB7CiAgICBkaXIgPSAidHRiIjsKICB9IGVsc2UgaWYgKCFpc0xUUikgewogICAgZGlyID0gInJ0bCI7CiAgfQogIHJldHVybiB7CiAgICBzdHIsCiAgICBkaXIKICB9Owp9CmNvbnN0IGNoYXJzID0gW107CmNvbnN0IHR5cGVzID0gW107CmZ1bmN0aW9uIGJpZGkoc3RyLCBzdGFydExldmVsID0gLTEsIHZlcnRpY2FsID0gZmFsc2UpIHsKICBsZXQgaXNMVFIgPSB0cnVlOwogIGNvbnN0IHN0ckxlbmd0aCA9IHN0ci5sZW5ndGg7CiAgaWYgKHN0ckxlbmd0aCA9PT0gMCB8fCB2ZXJ0aWNhbCkgewogICAgcmV0dXJuIGNyZWF0ZUJpZGlUZXh0KHN0ciwgaXNMVFIsIHZlcnRpY2FsKTsKICB9CiAgY2hhcnMubGVuZ3RoID0gc3RyTGVuZ3RoOwogIHR5cGVzLmxlbmd0aCA9IHN0ckxlbmd0aDsKICBsZXQgbnVtQmlkaSA9IDA7CiAgbGV0IGksIGlpOwogIGZvciAoaSA9IDA7IGkgPCBzdHJMZW5ndGg7ICsraSkgewogICAgY2hhcnNbaV0gPSBzdHIuY2hhckF0KGkpOwogICAgY29uc3QgY2hhckNvZGUgPSBzdHIuY2hhckNvZGVBdChpKTsKICAgIGxldCBjaGFyVHlwZSA9ICJMIjsKICAgIGlmIChjaGFyQ29kZSA8PSAweDAwZmYpIHsKICAgICAgY2hhclR5cGUgPSBiYXNlVHlwZXNbY2hhckNvZGVdOwogICAgfSBlbHNlIGlmICgweDA1OTAgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gMHgwNWY0KSB7CiAgICAgIGNoYXJUeXBlID0gIlIiOwogICAgfSBlbHNlIGlmICgweDA2MDAgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gMHgwNmZmKSB7CiAgICAgIGNoYXJUeXBlID0gYXJhYmljVHlwZXNbY2hhckNvZGUgJiAweGZmXTsKICAgICAgaWYgKCFjaGFyVHlwZSkgewogICAgICAgIHdhcm4oIkJpZGk6IGludmFsaWQgVW5pY29kZSBjaGFyYWN0ZXIgIiArIGNoYXJDb2RlLnRvU3RyaW5nKDE2KSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoMHgwNzAwIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IDB4MDhhYyB8fCAweGZiNTAgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gMHhmZGZmIHx8IDB4ZmU3MCA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSAweGZlZmYpIHsKICAgICAgY2hhclR5cGUgPSAiQUwiOwogICAgfQogICAgaWYgKGNoYXJUeXBlID09PSAiUiIgfHwgY2hhclR5cGUgPT09ICJBTCIgfHwgY2hhclR5cGUgPT09ICJBTiIpIHsKICAgICAgbnVtQmlkaSsrOwogICAgfQogICAgdHlwZXNbaV0gPSBjaGFyVHlwZTsKICB9CiAgaWYgKG51bUJpZGkgPT09IDApIHsKICAgIGlzTFRSID0gdHJ1ZTsKICAgIHJldHVybiBjcmVhdGVCaWRpVGV4dChzdHIsIGlzTFRSKTsKICB9CiAgaWYgKHN0YXJ0TGV2ZWwgPT09IC0xKSB7CiAgICBpZiAobnVtQmlkaSAvIHN0ckxlbmd0aCA8IDAuMyAmJiBzdHJMZW5ndGggPiA0KSB7CiAgICAgIGlzTFRSID0gdHJ1ZTsKICAgICAgc3RhcnRMZXZlbCA9IDA7CiAgICB9IGVsc2UgewogICAgICBpc0xUUiA9IGZhbHNlOwogICAgICBzdGFydExldmVsID0gMTsKICAgIH0KICB9CiAgY29uc3QgbGV2ZWxzID0gW107CiAgZm9yIChpID0gMDsgaSA8IHN0ckxlbmd0aDsgKytpKSB7CiAgICBsZXZlbHNbaV0gPSBzdGFydExldmVsOwogIH0KICBjb25zdCBlID0gaXNPZGQoc3RhcnRMZXZlbCkgPyAiUiIgOiAiTCI7CiAgY29uc3Qgc29yID0gZTsKICBjb25zdCBlb3IgPSBzb3I7CiAgbGV0IGxhc3RUeXBlID0gc29yOwogIGZvciAoaSA9IDA7IGkgPCBzdHJMZW5ndGg7ICsraSkgewogICAgaWYgKHR5cGVzW2ldID09PSAiTlNNIikgewogICAgICB0eXBlc1tpXSA9IGxhc3RUeXBlOwogICAgfSBlbHNlIHsKICAgICAgbGFzdFR5cGUgPSB0eXBlc1tpXTsKICAgIH0KICB9CiAgbGFzdFR5cGUgPSBzb3I7CiAgbGV0IHQ7CiAgZm9yIChpID0gMDsgaSA8IHN0ckxlbmd0aDsgKytpKSB7CiAgICB0ID0gdHlwZXNbaV07CiAgICBpZiAodCA9PT0gIkVOIikgewogICAgICB0eXBlc1tpXSA9IGxhc3RUeXBlID09PSAiQUwiID8gIkFOIiA6ICJFTiI7CiAgICB9IGVsc2UgaWYgKHQgPT09ICJSIiB8fCB0ID09PSAiTCIgfHwgdCA9PT0gIkFMIikgewogICAgICBsYXN0VHlwZSA9IHQ7CiAgICB9CiAgfQogIGZvciAoaSA9IDA7IGkgPCBzdHJMZW5ndGg7ICsraSkgewogICAgdCA9IHR5cGVzW2ldOwogICAgaWYgKHQgPT09ICJBTCIpIHsKICAgICAgdHlwZXNbaV0gPSAiUiI7CiAgICB9CiAgfQogIGZvciAoaSA9IDE7IGkgPCBzdHJMZW5ndGggLSAxOyArK2kpIHsKICAgIGlmICh0eXBlc1tpXSA9PT0gIkVTIiAmJiB0eXBlc1tpIC0gMV0gPT09ICJFTiIgJiYgdHlwZXNbaSArIDFdID09PSAiRU4iKSB7CiAgICAgIHR5cGVzW2ldID0gIkVOIjsKICAgIH0KICAgIGlmICh0eXBlc1tpXSA9PT0gIkNTIiAmJiAodHlwZXNbaSAtIDFdID09PSAiRU4iIHx8IHR5cGVzW2kgLSAxXSA9PT0gIkFOIikgJiYgdHlwZXNbaSArIDFdID09PSB0eXBlc1tpIC0gMV0pIHsKICAgICAgdHlwZXNbaV0gPSB0eXBlc1tpIC0gMV07CiAgICB9CiAgfQogIGZvciAoaSA9IDA7IGkgPCBzdHJMZW5ndGg7ICsraSkgewogICAgaWYgKHR5cGVzW2ldID09PSAiRU4iKSB7CiAgICAgIGZvciAobGV0IGogPSBpIC0gMTsgaiA+PSAwOyAtLWopIHsKICAgICAgICBpZiAodHlwZXNbal0gIT09ICJFVCIpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICB0eXBlc1tqXSA9ICJFTiI7CiAgICAgIH0KICAgICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgc3RyTGVuZ3RoOyArK2opIHsKICAgICAgICBpZiAodHlwZXNbal0gIT09ICJFVCIpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICB0eXBlc1tqXSA9ICJFTiI7CiAgICAgIH0KICAgIH0KICB9CiAgZm9yIChpID0gMDsgaSA8IHN0ckxlbmd0aDsgKytpKSB7CiAgICB0ID0gdHlwZXNbaV07CiAgICBpZiAodCA9PT0gIldTIiB8fCB0ID09PSAiRVMiIHx8IHQgPT09ICJFVCIgfHwgdCA9PT0gIkNTIikgewogICAgICB0eXBlc1tpXSA9ICJPTiI7CiAgICB9CiAgfQogIGxhc3RUeXBlID0gc29yOwogIGZvciAoaSA9IDA7IGkgPCBzdHJMZW5ndGg7ICsraSkgewogICAgdCA9IHR5cGVzW2ldOwogICAgaWYgKHQgPT09ICJFTiIpIHsKICAgICAgdHlwZXNbaV0gPSBsYXN0VHlwZSA9PT0gIkwiID8gIkwiIDogIkVOIjsKICAgIH0gZWxzZSBpZiAodCA9PT0gIlIiIHx8IHQgPT09ICJMIikgewogICAgICBsYXN0VHlwZSA9IHQ7CiAgICB9CiAgfQogIGZvciAoaSA9IDA7IGkgPCBzdHJMZW5ndGg7ICsraSkgewogICAgaWYgKHR5cGVzW2ldID09PSAiT04iKSB7CiAgICAgIGNvbnN0IGVuZCA9IGZpbmRVbmVxdWFsKHR5cGVzLCBpICsgMSwgIk9OIik7CiAgICAgIGxldCBiZWZvcmUgPSBzb3I7CiAgICAgIGlmIChpID4gMCkgewogICAgICAgIGJlZm9yZSA9IHR5cGVzW2kgLSAxXTsKICAgICAgfQogICAgICBsZXQgYWZ0ZXIgPSBlb3I7CiAgICAgIGlmIChlbmQgKyAxIDwgc3RyTGVuZ3RoKSB7CiAgICAgICAgYWZ0ZXIgPSB0eXBlc1tlbmQgKyAxXTsKICAgICAgfQogICAgICBpZiAoYmVmb3JlICE9PSAiTCIpIHsKICAgICAgICBiZWZvcmUgPSAiUiI7CiAgICAgIH0KICAgICAgaWYgKGFmdGVyICE9PSAiTCIpIHsKICAgICAgICBhZnRlciA9ICJSIjsKICAgICAgfQogICAgICBpZiAoYmVmb3JlID09PSBhZnRlcikgewogICAgICAgIHR5cGVzLmZpbGwoYmVmb3JlLCBpLCBlbmQpOwogICAgICB9CiAgICAgIGkgPSBlbmQgLSAxOwogICAgfQogIH0KICBmb3IgKGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyArK2kpIHsKICAgIGlmICh0eXBlc1tpXSA9PT0gIk9OIikgewogICAgICB0eXBlc1tpXSA9IGU7CiAgICB9CiAgfQogIGZvciAoaSA9IDA7IGkgPCBzdHJMZW5ndGg7ICsraSkgewogICAgdCA9IHR5cGVzW2ldOwogICAgaWYgKGlzRXZlbihsZXZlbHNbaV0pKSB7CiAgICAgIGlmICh0ID09PSAiUiIpIHsKICAgICAgICBsZXZlbHNbaV0gKz0gMTsKICAgICAgfSBlbHNlIGlmICh0ID09PSAiQU4iIHx8IHQgPT09ICJFTiIpIHsKICAgICAgICBsZXZlbHNbaV0gKz0gMjsKICAgICAgfQogICAgfSBlbHNlIGlmICh0ID09PSAiTCIgfHwgdCA9PT0gIkFOIiB8fCB0ID09PSAiRU4iKSB7CiAgICAgIGxldmVsc1tpXSArPSAxOwogICAgfQogIH0KICBsZXQgaGlnaGVzdExldmVsID0gLTE7CiAgbGV0IGxvd2VzdE9kZExldmVsID0gOTk7CiAgbGV0IGxldmVsOwogIGZvciAoaSA9IDAsIGlpID0gbGV2ZWxzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHsKICAgIGxldmVsID0gbGV2ZWxzW2ldOwogICAgaWYgKGhpZ2hlc3RMZXZlbCA8IGxldmVsKSB7CiAgICAgIGhpZ2hlc3RMZXZlbCA9IGxldmVsOwogICAgfQogICAgaWYgKGxvd2VzdE9kZExldmVsID4gbGV2ZWwgJiYgaXNPZGQobGV2ZWwpKSB7CiAgICAgIGxvd2VzdE9kZExldmVsID0gbGV2ZWw7CiAgICB9CiAgfQogIGZvciAobGV2ZWwgPSBoaWdoZXN0TGV2ZWw7IGxldmVsID49IGxvd2VzdE9kZExldmVsOyAtLWxldmVsKSB7CiAgICBsZXQgc3RhcnQgPSAtMTsKICAgIGZvciAoaSA9IDAsIGlpID0gbGV2ZWxzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHsKICAgICAgaWYgKGxldmVsc1tpXSA8IGxldmVsKSB7CiAgICAgICAgaWYgKHN0YXJ0ID49IDApIHsKICAgICAgICAgIHJldmVyc2VWYWx1ZXMoY2hhcnMsIHN0YXJ0LCBpKTsKICAgICAgICAgIHN0YXJ0ID0gLTE7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHN0YXJ0IDwgMCkgewogICAgICAgIHN0YXJ0ID0gaTsKICAgICAgfQogICAgfQogICAgaWYgKHN0YXJ0ID49IDApIHsKICAgICAgcmV2ZXJzZVZhbHVlcyhjaGFycywgc3RhcnQsIGxldmVscy5sZW5ndGgpOwogICAgfQogIH0KICBmb3IgKGkgPSAwLCBpaSA9IGNoYXJzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHsKICAgIGNvbnN0IGNoID0gY2hhcnNbaV07CiAgICBpZiAoY2ggPT09ICI8IiB8fCBjaCA9PT0gIj4iKSB7CiAgICAgIGNoYXJzW2ldID0gIiI7CiAgICB9CiAgfQogIHJldHVybiBjcmVhdGVCaWRpVGV4dChjaGFycy5qb2luKCIiKSwgaXNMVFIpOwp9Cgo7Ly8gLi9zcmMvY29yZS9mb250X3N1YnN0aXR1dGlvbnMuanMKCgoKY29uc3QgTk9STUFMID0gewogIHN0eWxlOiAibm9ybWFsIiwKICB3ZWlnaHQ6ICJub3JtYWwiCn07CmNvbnN0IEJPTEQgPSB7CiAgc3R5bGU6ICJub3JtYWwiLAogIHdlaWdodDogImJvbGQiCn07CmNvbnN0IElUQUxJQyA9IHsKICBzdHlsZTogIml0YWxpYyIsCiAgd2VpZ2h0OiAibm9ybWFsIgp9Owpjb25zdCBCT0xESVRBTElDID0gewogIHN0eWxlOiAiaXRhbGljIiwKICB3ZWlnaHQ6ICJib2xkIgp9Owpjb25zdCBzdWJzdGl0dXRpb25NYXAgPSBuZXcgTWFwKFtbIlRpbWVzLVJvbWFuIiwgewogIGxvY2FsOiBbIlRpbWVzIE5ldyBSb21hbiIsICJUaW1lcy1Sb21hbiIsICJUaW1lcyIsICJMaWJlcmF0aW9uIFNlcmlmIiwgIk5pbWJ1cyBSb21hbiIsICJOaW1idXMgUm9tYW4gTCIsICJUaW5vcyIsICJUaG9ybmRhbGUiLCAiVGVYIEd5cmUgVGVybWVzIiwgIkZyZWVTZXJpZiIsICJMaW51eCBMaWJlcnRpbmUgTyIsICJMaWJlcnRpbnVzIFNlcmlmIiwgIkRlamFWdSBTZXJpZiIsICJCaXRzdHJlYW0gVmVyYSBTZXJpZiIsICJVYnVudHUiXSwKICBzdHlsZTogTk9STUFMLAogIHVsdGltYXRlOiAic2VyaWYiCn1dLCBbIlRpbWVzLUJvbGQiLCB7CiAgYWxpYXM6ICJUaW1lcy1Sb21hbiIsCiAgc3R5bGU6IEJPTEQsCiAgdWx0aW1hdGU6ICJzZXJpZiIKfV0sIFsiVGltZXMtSXRhbGljIiwgewogIGFsaWFzOiAiVGltZXMtUm9tYW4iLAogIHN0eWxlOiBJVEFMSUMsCiAgdWx0aW1hdGU6ICJzZXJpZiIKfV0sIFsiVGltZXMtQm9sZEl0YWxpYyIsIHsKICBhbGlhczogIlRpbWVzLVJvbWFuIiwKICBzdHlsZTogQk9MRElUQUxJQywKICB1bHRpbWF0ZTogInNlcmlmIgp9XSwgWyJIZWx2ZXRpY2EiLCB7CiAgbG9jYWw6IFsiSGVsdmV0aWNhIiwgIkhlbHZldGljYSBOZXVlIiwgIkFyaWFsIiwgIkFyaWFsIE5vdmEiLCAiTGliZXJhdGlvbiBTYW5zIiwgIkFyaW1vIiwgIk5pbWJ1cyBTYW5zIiwgIk5pbWJ1cyBTYW5zIEwiLCAiQTAzMCIsICJUZVggR3lyZSBIZXJvcyIsICJGcmVlU2FucyIsICJEZWphVnUgU2FucyIsICJBbGJhbnkiLCAiQml0c3RyZWFtIFZlcmEgU2FucyIsICJBcmlhbCBVbmljb2RlIE1TIiwgIk1pY3Jvc29mdCBTYW5zIFNlcmlmIiwgIkFwcGxlIFN5bWJvbHMiLCAiQ2FudGFyZWxsIl0sCiAgcGF0aDogIkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIudHRmIiwKICBzdHlsZTogTk9STUFMLAogIHVsdGltYXRlOiAic2Fucy1zZXJpZiIKfV0sIFsiSGVsdmV0aWNhLUJvbGQiLCB7CiAgYWxpYXM6ICJIZWx2ZXRpY2EiLAogIHBhdGg6ICJMaWJlcmF0aW9uU2Fucy1Cb2xkLnR0ZiIsCiAgc3R5bGU6IEJPTEQsCiAgdWx0aW1hdGU6ICJzYW5zLXNlcmlmIgp9XSwgWyJIZWx2ZXRpY2EtT2JsaXF1ZSIsIHsKICBhbGlhczogIkhlbHZldGljYSIsCiAgcGF0aDogIkxpYmVyYXRpb25TYW5zLUl0YWxpYy50dGYiLAogIHN0eWxlOiBJVEFMSUMsCiAgdWx0aW1hdGU6ICJzYW5zLXNlcmlmIgp9XSwgWyJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLCB7CiAgYWxpYXM6ICJIZWx2ZXRpY2EiLAogIHBhdGg6ICJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljLnR0ZiIsCiAgc3R5bGU6IEJPTERJVEFMSUMsCiAgdWx0aW1hdGU6ICJzYW5zLXNlcmlmIgp9XSwgWyJDb3VyaWVyIiwgewogIGxvY2FsOiBbIkNvdXJpZXIiLCAiQ291cmllciBOZXciLCAiTGliZXJhdGlvbiBNb25vIiwgIk5pbWJ1cyBNb25vIiwgIk5pbWJ1cyBNb25vIEwiLCAiQ291c2luZSIsICJDdW1iZXJsYW5kIiwgIlRlWCBHeXJlIEN1cnNvciIsICJGcmVlTW9ubyIsICJMaW51eCBMaWJlcnRpbmUgTW9ubyBPIiwgIkxpYmVydGludXMgTW9ubyJdLAogIHN0eWxlOiBOT1JNQUwsCiAgdWx0aW1hdGU6ICJtb25vc3BhY2UiCn1dLCBbIkNvdXJpZXItQm9sZCIsIHsKICBhbGlhczogIkNvdXJpZXIiLAogIHN0eWxlOiBCT0xELAogIHVsdGltYXRlOiAibW9ub3NwYWNlIgp9XSwgWyJDb3VyaWVyLU9ibGlxdWUiLCB7CiAgYWxpYXM6ICJDb3VyaWVyIiwKICBzdHlsZTogSVRBTElDLAogIHVsdGltYXRlOiAibW9ub3NwYWNlIgp9XSwgWyJDb3VyaWVyLUJvbGRPYmxpcXVlIiwgewogIGFsaWFzOiAiQ291cmllciIsCiAgc3R5bGU6IEJPTERJVEFMSUMsCiAgdWx0aW1hdGU6ICJtb25vc3BhY2UiCn1dLCBbIkFyaWFsQmxhY2siLCB7CiAgbG9jYWw6IFsiQXJpYWwgQmxhY2siXSwKICBzdHlsZTogewogICAgc3R5bGU6ICJub3JtYWwiLAogICAgd2VpZ2h0OiAiOTAwIgogIH0sCiAgZmFsbGJhY2s6ICJIZWx2ZXRpY2EtQm9sZCIKfV0sIFsiQXJpYWxCbGFjay1Cb2xkIiwgewogIGFsaWFzOiAiQXJpYWxCbGFjayIKfV0sIFsiQXJpYWxCbGFjay1JdGFsaWMiLCB7CiAgYWxpYXM6ICJBcmlhbEJsYWNrIiwKICBzdHlsZTogewogICAgc3R5bGU6ICJpdGFsaWMiLAogICAgd2VpZ2h0OiAiOTAwIgogIH0sCiAgZmFsbGJhY2s6ICJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiCn1dLCBbIkFyaWFsQmxhY2stQm9sZEl0YWxpYyIsIHsKICBhbGlhczogIkFyaWFsQmxhY2stSXRhbGljIgp9XSwgWyJBcmlhbE5hcnJvdyIsIHsKICBsb2NhbDogWyJBcmlhbCBOYXJyb3ciLCAiTGliZXJhdGlvbiBTYW5zIE5hcnJvdyIsICJIZWx2ZXRpY2EgQ29uZGVuc2VkIiwgIk5pbWJ1cyBTYW5zIE5hcnJvdyIsICJUZVggR3lyZSBIZXJvcyBDbiJdLAogIHN0eWxlOiBOT1JNQUwsCiAgZmFsbGJhY2s6ICJIZWx2ZXRpY2EiCn1dLCBbIkFyaWFsTmFycm93LUJvbGQiLCB7CiAgYWxpYXM6ICJBcmlhbE5hcnJvdyIsCiAgc3R5bGU6IEJPTEQsCiAgZmFsbGJhY2s6ICJIZWx2ZXRpY2EtQm9sZCIKfV0sIFsiQXJpYWxOYXJyb3ctSXRhbGljIiwgewogIGFsaWFzOiAiQXJpYWxOYXJyb3ciLAogIHN0eWxlOiBJVEFMSUMsCiAgZmFsbGJhY2s6ICJIZWx2ZXRpY2EtT2JsaXF1ZSIKfV0sIFsiQXJpYWxOYXJyb3ctQm9sZEl0YWxpYyIsIHsKICBhbGlhczogIkFyaWFsTmFycm93IiwKICBzdHlsZTogQk9MRElUQUxJQywKICBmYWxsYmFjazogIkhlbHZldGljYS1Cb2xkT2JsaXF1ZSIKfV0sIFsiQ2FsaWJyaSIsIHsKICBsb2NhbDogWyJDYWxpYnJpIiwgIkNhcmxpdG8iXSwKICBzdHlsZTogTk9STUFMLAogIGZhbGxiYWNrOiAiSGVsdmV0aWNhIgp9XSwgWyJDYWxpYnJpLUJvbGQiLCB7CiAgYWxpYXM6ICJDYWxpYnJpIiwKICBzdHlsZTogQk9MRCwKICBmYWxsYmFjazogIkhlbHZldGljYS1Cb2xkIgp9XSwgWyJDYWxpYnJpLUl0YWxpYyIsIHsKICBhbGlhczogIkNhbGlicmkiLAogIHN0eWxlOiBJVEFMSUMsCiAgZmFsbGJhY2s6ICJIZWx2ZXRpY2EtT2JsaXF1ZSIKfV0sIFsiQ2FsaWJyaS1Cb2xkSXRhbGljIiwgewogIGFsaWFzOiAiQ2FsaWJyaSIsCiAgc3R5bGU6IEJPTERJVEFMSUMsCiAgZmFsbGJhY2s6ICJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiCn1dLCBbIldpbmdkaW5ncyIsIHsKICBsb2NhbDogWyJXaW5nZGluZ3MiLCAiVVJXIERpbmdiYXRzIl0sCiAgc3R5bGU6IE5PUk1BTAp9XSwgWyJXaW5nZGluZ3MtUmVndWxhciIsIHsKICBhbGlhczogIldpbmdkaW5ncyIKfV0sIFsiV2luZ2RpbmdzLUJvbGQiLCB7CiAgYWxpYXM6ICJXaW5nZGluZ3MiCn1dXSk7CmNvbnN0IGZvbnRBbGlhc2VzID0gbmV3IE1hcChbWyJBcmlhbC1CbGFjayIsICJBcmlhbEJsYWNrIl1dKTsKZnVuY3Rpb24gZ2V0U3R5bGVUb0FwcGVuZChzdHlsZSkgewogIHN3aXRjaCAoc3R5bGUpIHsKICAgIGNhc2UgQk9MRDoKICAgICAgcmV0dXJuICJCb2xkIjsKICAgIGNhc2UgSVRBTElDOgogICAgICByZXR1cm4gIkl0YWxpYyI7CiAgICBjYXNlIEJPTERJVEFMSUM6CiAgICAgIHJldHVybiAiQm9sZCBJdGFsaWMiOwogICAgZGVmYXVsdDoKICAgICAgaWYgKHN0eWxlPy53ZWlnaHQgPT09ICJib2xkIikgewogICAgICAgIHJldHVybiAiQm9sZCI7CiAgICAgIH0KICAgICAgaWYgKHN0eWxlPy5zdHlsZSA9PT0gIml0YWxpYyIpIHsKICAgICAgICByZXR1cm4gIkl0YWxpYyI7CiAgICAgIH0KICB9CiAgcmV0dXJuICIiOwp9CmZ1bmN0aW9uIGdldEZhbWlseU5hbWUoc3RyKSB7CiAgY29uc3Qga2V5d29yZHMgPSBuZXcgU2V0KFsidGhpbiIsICJleHRyYWxpZ2h0IiwgInVsdHJhbGlnaHQiLCAiZGVtaWxpZ2h0IiwgInNlbWlsaWdodCIsICJsaWdodCIsICJib29rIiwgInJlZ3VsYXIiLCAibm9ybWFsIiwgIm1lZGl1bSIsICJkZW1pYm9sZCIsICJzZW1pYm9sZCIsICJib2xkIiwgImV4dHJhYm9sZCIsICJ1bHRyYWJvbGQiLCAiYmxhY2siLCAiaGVhdnkiLCAiZXh0cmFibGFjayIsICJ1bHRyYWJsYWNrIiwgInJvbWFuIiwgIml0YWxpYyIsICJvYmxpcXVlIiwgInVsdHJhY29uZGVuc2VkIiwgImV4dHJhY29uZGVuc2VkIiwgImNvbmRlbnNlZCIsICJzZW1pY29uZGVuc2VkIiwgIm5vcm1hbCIsICJzZW1pZXhwYW5kZWQiLCAiZXhwYW5kZWQiLCAiZXh0cmFleHBhbmRlZCIsICJ1bHRyYWV4cGFuZGVkIiwgImJvbGRpdGFsaWMiXSk7CiAgcmV0dXJuIHN0ci5zcGxpdCgvWy0gLCtdKy9nKS5maWx0ZXIodG9rID0+ICFrZXl3b3Jkcy5oYXModG9rLnRvTG93ZXJDYXNlKCkpKS5qb2luKCIgIik7Cn0KZnVuY3Rpb24gZ2VuZXJhdGVGb250KHsKICBhbGlhcywKICBsb2NhbCwKICBwYXRoLAogIGZhbGxiYWNrLAogIHN0eWxlLAogIHVsdGltYXRlCn0sIHNyYywgbG9jYWxGb250UGF0aCwgdXNlRmFsbGJhY2sgPSB0cnVlLCB1c2VQYXRoID0gdHJ1ZSwgYXBwZW5kID0gIiIpIHsKICBjb25zdCByZXN1bHQgPSB7CiAgICBzdHlsZTogbnVsbCwKICAgIHVsdGltYXRlOiBudWxsCiAgfTsKICBpZiAobG9jYWwpIHsKICAgIGNvbnN0IGV4dHJhID0gYXBwZW5kID8gYCAke2FwcGVuZH1gIDogIiI7CiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgbG9jYWwpIHsKICAgICAgc3JjLnB1c2goYGxvY2FsKCR7bmFtZX0ke2V4dHJhfSlgKTsKICAgIH0KICB9CiAgaWYgKGFsaWFzKSB7CiAgICBjb25zdCBzdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb25NYXAuZ2V0KGFsaWFzKTsKICAgIGNvbnN0IGFsaWFzQXBwZW5kID0gYXBwZW5kIHx8IGdldFN0eWxlVG9BcHBlbmQoc3R5bGUpOwogICAgT2JqZWN0LmFzc2lnbihyZXN1bHQsIGdlbmVyYXRlRm9udChzdWJzdGl0dXRpb24sIHNyYywgbG9jYWxGb250UGF0aCwgdXNlRmFsbGJhY2sgJiYgIWZhbGxiYWNrLCB1c2VQYXRoICYmICFwYXRoLCBhbGlhc0FwcGVuZCkpOwogIH0KICBpZiAoc3R5bGUpIHsKICAgIHJlc3VsdC5zdHlsZSA9IHN0eWxlOwogIH0KICBpZiAodWx0aW1hdGUpIHsKICAgIHJlc3VsdC51bHRpbWF0ZSA9IHVsdGltYXRlOwogIH0KICBpZiAodXNlRmFsbGJhY2sgJiYgZmFsbGJhY2spIHsKICAgIGNvbnN0IGZhbGxiYWNrSW5mbyA9IHN1YnN0aXR1dGlvbk1hcC5nZXQoZmFsbGJhY2spOwogICAgY29uc3QgewogICAgICB1bHRpbWF0ZTogZmFsbGJhY2tVbHRpbWF0ZQogICAgfSA9IGdlbmVyYXRlRm9udChmYWxsYmFja0luZm8sIHNyYywgbG9jYWxGb250UGF0aCwgdXNlRmFsbGJhY2ssIHVzZVBhdGggJiYgIXBhdGgsIGFwcGVuZCk7CiAgICByZXN1bHQudWx0aW1hdGUgfHw9IGZhbGxiYWNrVWx0aW1hdGU7CiAgfQogIGlmICh1c2VQYXRoICYmIHBhdGggJiYgbG9jYWxGb250UGF0aCkgewogICAgc3JjLnB1c2goYHVybCgke2xvY2FsRm9udFBhdGh9JHtwYXRofSlgKTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQpmdW5jdGlvbiBnZXRGb250U3Vic3RpdHV0aW9uKHN5c3RlbUZvbnRDYWNoZSwgaWRGYWN0b3J5LCBsb2NhbEZvbnRQYXRoLCBiYXNlRm9udE5hbWUsIHN0YW5kYXJkRm9udE5hbWUsIHR5cGUpIHsKICBpZiAoYmFzZUZvbnROYW1lLnN0YXJ0c1dpdGgoIkludmFsaWRQREZqc0ZvbnRfIikpIHsKICAgIHJldHVybiBudWxsOwogIH0KICBpZiAoKHR5cGUgPT09ICJUcnVlVHlwZSIgfHwgdHlwZSA9PT0gIlR5cGUxIikgJiYgL15bQS1aXXs2fVwrLy50ZXN0KGJhc2VGb250TmFtZSkpIHsKICAgIGJhc2VGb250TmFtZSA9IGJhc2VGb250TmFtZS5zbGljZSg3KTsKICB9CiAgYmFzZUZvbnROYW1lID0gbm9ybWFsaXplRm9udE5hbWUoYmFzZUZvbnROYW1lKTsKICBjb25zdCBrZXkgPSBiYXNlRm9udE5hbWU7CiAgbGV0IHN1YnN0aXR1dGlvbkluZm8gPSBzeXN0ZW1Gb250Q2FjaGUuZ2V0KGtleSk7CiAgaWYgKHN1YnN0aXR1dGlvbkluZm8pIHsKICAgIHJldHVybiBzdWJzdGl0dXRpb25JbmZvOwogIH0KICBsZXQgc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uTWFwLmdldChiYXNlRm9udE5hbWUpOwogIGlmICghc3Vic3RpdHV0aW9uKSB7CiAgICBmb3IgKGNvbnN0IFthbGlhcywgc3Vic3RdIG9mIGZvbnRBbGlhc2VzKSB7CiAgICAgIGlmIChiYXNlRm9udE5hbWUuc3RhcnRzV2l0aChhbGlhcykpIHsKICAgICAgICBiYXNlRm9udE5hbWUgPSBgJHtzdWJzdH0ke2Jhc2VGb250TmFtZS5zdWJzdHJpbmcoYWxpYXMubGVuZ3RoKX1gOwogICAgICAgIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbk1hcC5nZXQoYmFzZUZvbnROYW1lKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogIH0KICBsZXQgbXVzdEFkZEJhc2VGb250ID0gZmFsc2U7CiAgaWYgKCFzdWJzdGl0dXRpb24pIHsKICAgIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbk1hcC5nZXQoc3RhbmRhcmRGb250TmFtZSk7CiAgICBtdXN0QWRkQmFzZUZvbnQgPSB0cnVlOwogIH0KICBjb25zdCBsb2FkZWROYW1lID0gYCR7aWRGYWN0b3J5LmdldERvY0lkKCl9X3Mke2lkRmFjdG9yeS5jcmVhdGVGb250SWQoKX1gOwogIGlmICghc3Vic3RpdHV0aW9uKSB7CiAgICBpZiAoIXZhbGlkYXRlRm9udE5hbWUoYmFzZUZvbnROYW1lKSkgewogICAgICB3YXJuKGBDYW5ub3Qgc3Vic3RpdHV0ZSB0aGUgZm9udCBiZWNhdXNlIG9mIGl0cyBuYW1lOiAke2Jhc2VGb250TmFtZX1gKTsKICAgICAgc3lzdGVtRm9udENhY2hlLnNldChrZXksIG51bGwpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IGJvbGQgPSAvYm9sZC9naS50ZXN0KGJhc2VGb250TmFtZSk7CiAgICBjb25zdCBpdGFsaWMgPSAvb2JsaXF1ZXxpdGFsaWMvZ2kudGVzdChiYXNlRm9udE5hbWUpOwogICAgY29uc3Qgc3R5bGUgPSBib2xkICYmIGl0YWxpYyAmJiBCT0xESVRBTElDIHx8IGJvbGQgJiYgQk9MRCB8fCBpdGFsaWMgJiYgSVRBTElDIHx8IE5PUk1BTDsKICAgIHN1YnN0aXR1dGlvbkluZm8gPSB7CiAgICAgIGNzczogYCIke2dldEZhbWlseU5hbWUoYmFzZUZvbnROYW1lKX0iLCR7bG9hZGVkTmFtZX1gLAogICAgICBndWVzc0ZhbGxiYWNrOiB0cnVlLAogICAgICBsb2FkZWROYW1lLAogICAgICBiYXNlRm9udE5hbWUsCiAgICAgIHNyYzogYGxvY2FsKCR7YmFzZUZvbnROYW1lfSlgLAogICAgICBzdHlsZQogICAgfTsKICAgIHN5c3RlbUZvbnRDYWNoZS5zZXQoa2V5LCBzdWJzdGl0dXRpb25JbmZvKTsKICAgIHJldHVybiBzdWJzdGl0dXRpb25JbmZvOwogIH0KICBjb25zdCBzcmMgPSBbXTsKICBpZiAobXVzdEFkZEJhc2VGb250ICYmIHZhbGlkYXRlRm9udE5hbWUoYmFzZUZvbnROYW1lKSkgewogICAgc3JjLnB1c2goYGxvY2FsKCR7YmFzZUZvbnROYW1lfSlgKTsKICB9CiAgY29uc3QgewogICAgc3R5bGUsCiAgICB1bHRpbWF0ZQogIH0gPSBnZW5lcmF0ZUZvbnQoc3Vic3RpdHV0aW9uLCBzcmMsIGxvY2FsRm9udFBhdGgpOwogIGNvbnN0IGd1ZXNzRmFsbGJhY2sgPSB1bHRpbWF0ZSA9PT0gbnVsbDsKICBjb25zdCBmYWxsYmFjayA9IGd1ZXNzRmFsbGJhY2sgPyAiIiA6IGAsJHt1bHRpbWF0ZX1gOwogIHN1YnN0aXR1dGlvbkluZm8gPSB7CiAgICBjc3M6IGAiJHtnZXRGYW1pbHlOYW1lKGJhc2VGb250TmFtZSl9Iiwke2xvYWRlZE5hbWV9JHtmYWxsYmFja31gLAogICAgZ3Vlc3NGYWxsYmFjaywKICAgIGxvYWRlZE5hbWUsCiAgICBiYXNlRm9udE5hbWUsCiAgICBzcmM6IHNyYy5qb2luKCIsIiksCiAgICBzdHlsZQogIH07CiAgc3lzdGVtRm9udENhY2hlLnNldChrZXksIHN1YnN0aXR1dGlvbkluZm8pOwogIHJldHVybiBzdWJzdGl0dXRpb25JbmZvOwp9Cgo7Ly8gLi9zcmMvc2hhcmVkL211cm11cmhhc2gzLmpzCmNvbnN0IFNFRUQgPSAweGMzZDJlMWYwOwpjb25zdCBNQVNLX0hJR0ggPSAweGZmZmYwMDAwOwpjb25zdCBNQVNLX0xPVyA9IDB4ZmZmZjsKY2xhc3MgTXVybXVySGFzaDNfNjQgewogIGNvbnN0cnVjdG9yKHNlZWQpIHsKICAgIHRoaXMuaDEgPSBzZWVkID8gc2VlZCAmIDB4ZmZmZmZmZmYgOiBTRUVEOwogICAgdGhpcy5oMiA9IHNlZWQgPyBzZWVkICYgMHhmZmZmZmZmZiA6IFNFRUQ7CiAgfQogIHVwZGF0ZShpbnB1dCkgewogICAgbGV0IGRhdGEsIGxlbmd0aDsKICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICJzdHJpbmciKSB7CiAgICAgIGRhdGEgPSBuZXcgVWludDhBcnJheShpbnB1dC5sZW5ndGggKiAyKTsKICAgICAgbGVuZ3RoID0gMDsKICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gaW5wdXQubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICAgIGNvbnN0IGNvZGUgPSBpbnB1dC5jaGFyQ29kZUF0KGkpOwogICAgICAgIGlmIChjb2RlIDw9IDB4ZmYpIHsKICAgICAgICAgIGRhdGFbbGVuZ3RoKytdID0gY29kZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGF0YVtsZW5ndGgrK10gPSBjb2RlID4+PiA4OwogICAgICAgICAgZGF0YVtsZW5ndGgrK10gPSBjb2RlICYgMHhmZjsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGlucHV0KSkgewogICAgICBkYXRhID0gaW5wdXQuc2xpY2UoKTsKICAgICAgbGVuZ3RoID0gZGF0YS5ieXRlTGVuZ3RoOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRhdGEgZm9ybWF0LCBtdXN0IGJlIGEgc3RyaW5nIG9yIFR5cGVkQXJyYXkuIik7CiAgICB9CiAgICBjb25zdCBibG9ja0NvdW50cyA9IGxlbmd0aCA+PiAyOwogICAgY29uc3QgdGFpbExlbmd0aCA9IGxlbmd0aCAtIGJsb2NrQ291bnRzICogNDsKICAgIGNvbnN0IGRhdGFVaW50MzIgPSBuZXcgVWludDMyQXJyYXkoZGF0YS5idWZmZXIsIDAsIGJsb2NrQ291bnRzKTsKICAgIGxldCBrMSA9IDAsCiAgICAgIGsyID0gMDsKICAgIGxldCBoMSA9IHRoaXMuaDEsCiAgICAgIGgyID0gdGhpcy5oMjsKICAgIGNvbnN0IEMxID0gMHhjYzllMmQ1MSwKICAgICAgQzIgPSAweDFiODczNTkzOwogICAgY29uc3QgQzFfTE9XID0gQzEgJiBNQVNLX0xPVywKICAgICAgQzJfTE9XID0gQzIgJiBNQVNLX0xPVzsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmxvY2tDb3VudHM7IGkrKykgewogICAgICBpZiAoaSAmIDEpIHsKICAgICAgICBrMSA9IGRhdGFVaW50MzJbaV07CiAgICAgICAgazEgPSBrMSAqIEMxICYgTUFTS19ISUdIIHwgazEgKiBDMV9MT1cgJiBNQVNLX0xPVzsKICAgICAgICBrMSA9IGsxIDw8IDE1IHwgazEgPj4+IDE3OwogICAgICAgIGsxID0gazEgKiBDMiAmIE1BU0tfSElHSCB8IGsxICogQzJfTE9XICYgTUFTS19MT1c7CiAgICAgICAgaDEgXj0gazE7CiAgICAgICAgaDEgPSBoMSA8PCAxMyB8IGgxID4+PiAxOTsKICAgICAgICBoMSA9IGgxICogNSArIDB4ZTY1NDZiNjQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgazIgPSBkYXRhVWludDMyW2ldOwogICAgICAgIGsyID0gazIgKiBDMSAmIE1BU0tfSElHSCB8IGsyICogQzFfTE9XICYgTUFTS19MT1c7CiAgICAgICAgazIgPSBrMiA8PCAxNSB8IGsyID4+PiAxNzsKICAgICAgICBrMiA9IGsyICogQzIgJiBNQVNLX0hJR0ggfCBrMiAqIEMyX0xPVyAmIE1BU0tfTE9XOwogICAgICAgIGgyIF49IGsyOwogICAgICAgIGgyID0gaDIgPDwgMTMgfCBoMiA+Pj4gMTk7CiAgICAgICAgaDIgPSBoMiAqIDUgKyAweGU2NTQ2YjY0OwogICAgICB9CiAgICB9CiAgICBrMSA9IDA7CiAgICBzd2l0Y2ggKHRhaWxMZW5ndGgpIHsKICAgICAgY2FzZSAzOgogICAgICAgIGsxIF49IGRhdGFbYmxvY2tDb3VudHMgKiA0ICsgMl0gPDwgMTY7CiAgICAgIGNhc2UgMjoKICAgICAgICBrMSBePSBkYXRhW2Jsb2NrQ291bnRzICogNCArIDFdIDw8IDg7CiAgICAgIGNhc2UgMToKICAgICAgICBrMSBePSBkYXRhW2Jsb2NrQ291bnRzICogNF07CiAgICAgICAgazEgPSBrMSAqIEMxICYgTUFTS19ISUdIIHwgazEgKiBDMV9MT1cgJiBNQVNLX0xPVzsKICAgICAgICBrMSA9IGsxIDw8IDE1IHwgazEgPj4+IDE3OwogICAgICAgIGsxID0gazEgKiBDMiAmIE1BU0tfSElHSCB8IGsxICogQzJfTE9XICYgTUFTS19MT1c7CiAgICAgICAgaWYgKGJsb2NrQ291bnRzICYgMSkgewogICAgICAgICAgaDEgXj0gazE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGgyIF49IGsxOwogICAgICAgIH0KICAgIH0KICAgIHRoaXMuaDEgPSBoMTsKICAgIHRoaXMuaDIgPSBoMjsKICB9CiAgaGV4ZGlnZXN0KCkgewogICAgbGV0IGgxID0gdGhpcy5oMSwKICAgICAgaDIgPSB0aGlzLmgyOwogICAgaDEgXj0gaDIgPj4+IDE7CiAgICBoMSA9IGgxICogMHhlZDU1OGNjZCAmIE1BU0tfSElHSCB8IGgxICogMHg4Y2NkICYgTUFTS19MT1c7CiAgICBoMiA9IGgyICogMHhmZjUxYWZkNyAmIE1BU0tfSElHSCB8ICgoaDIgPDwgMTYgfCBoMSA+Pj4gMTYpICogMHhhZmQ3ZWQ1NSAmIE1BU0tfSElHSCkgPj4+IDE2OwogICAgaDEgXj0gaDIgPj4+IDE7CiAgICBoMSA9IGgxICogMHgxYTg1ZWM1MyAmIE1BU0tfSElHSCB8IGgxICogMHhlYzUzICYgTUFTS19MT1c7CiAgICBoMiA9IGgyICogMHhjNGNlYjlmZSAmIE1BU0tfSElHSCB8ICgoaDIgPDwgMTYgfCBoMSA+Pj4gMTYpICogMHhiOWZlMWE4NSAmIE1BU0tfSElHSCkgPj4+IDE2OwogICAgaDEgXj0gaDIgPj4+IDE7CiAgICByZXR1cm4gKGgxID4+PiAwKS50b1N0cmluZygxNikucGFkU3RhcnQoOCwgIjAiKSArIChoMiA+Pj4gMCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsICIwIik7CiAgfQp9Cgo7Ly8gLi9zcmMvY29yZS9vcGVyYXRvcl9saXN0LmpzCgpmdW5jdGlvbiBhZGRTdGF0ZShwYXJlbnRTdGF0ZSwgcGF0dGVybiwgY2hlY2tGbiwgaXRlcmF0ZUZuLCBwcm9jZXNzRm4pIHsKICBsZXQgc3RhdGUgPSBwYXJlbnRTdGF0ZTsKICBmb3IgKGxldCBpID0gMCwgaWkgPSBwYXR0ZXJuLmxlbmd0aCAtIDE7IGkgPCBpaTsgaSsrKSB7CiAgICBjb25zdCBpdGVtID0gcGF0dGVybltpXTsKICAgIHN0YXRlID0gc3RhdGVbaXRlbV0gfHw9IFtdOwogIH0KICBzdGF0ZVtwYXR0ZXJuLmF0KC0xKV0gPSB7CiAgICBjaGVja0ZuLAogICAgaXRlcmF0ZUZuLAogICAgcHJvY2Vzc0ZuCiAgfTsKfQpjb25zdCBJbml0aWFsU3RhdGUgPSBbXTsKYWRkU3RhdGUoSW5pdGlhbFN0YXRlLCBbT1BTLnNhdmUsIE9QUy50cmFuc2Zvcm0sIE9QUy5wYWludElubGluZUltYWdlWE9iamVjdCwgT1BTLnJlc3RvcmVdLCBudWxsLCBmdW5jdGlvbiBpdGVyYXRlSW5saW5lSW1hZ2VHcm91cChjb250ZXh0LCBpKSB7CiAgY29uc3QgZm5BcnJheSA9IGNvbnRleHQuZm5BcnJheTsKICBjb25zdCBpRmlyc3RTYXZlID0gY29udGV4dC5pQ3VyciAtIDM7CiAgY29uc3QgcG9zID0gKGkgLSBpRmlyc3RTYXZlKSAlIDQ7CiAgc3dpdGNoIChwb3MpIHsKICAgIGNhc2UgMDoKICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IE9QUy5zYXZlOwogICAgY2FzZSAxOgogICAgICByZXR1cm4gZm5BcnJheVtpXSA9PT0gT1BTLnRyYW5zZm9ybTsKICAgIGNhc2UgMjoKICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IE9QUy5wYWludElubGluZUltYWdlWE9iamVjdDsKICAgIGNhc2UgMzoKICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IE9QUy5yZXN0b3JlOwogIH0KICB0aHJvdyBuZXcgRXJyb3IoYGl0ZXJhdGVJbmxpbmVJbWFnZUdyb3VwIC0gaW52YWxpZCBwb3M6ICR7cG9zfWApOwp9LCBmdW5jdGlvbiBmb3VuZElubGluZUltYWdlR3JvdXAoY29udGV4dCwgaSkgewogIGNvbnN0IE1JTl9JTUFHRVNfSU5fSU5MSU5FX0lNQUdFU19CTE9DSyA9IDEwOwogIGNvbnN0IE1BWF9JTUFHRVNfSU5fSU5MSU5FX0lNQUdFU19CTE9DSyA9IDIwMDsKICBjb25zdCBNQVhfV0lEVEggPSAxMDAwOwogIGNvbnN0IElNQUdFX1BBRERJTkcgPSAxOwogIGNvbnN0IGZuQXJyYXkgPSBjb250ZXh0LmZuQXJyYXksCiAgICBhcmdzQXJyYXkgPSBjb250ZXh0LmFyZ3NBcnJheTsKICBjb25zdCBjdXJyID0gY29udGV4dC5pQ3VycjsKICBjb25zdCBpRmlyc3RTYXZlID0gY3VyciAtIDM7CiAgY29uc3QgaUZpcnN0VHJhbnNmb3JtID0gY3VyciAtIDI7CiAgY29uc3QgaUZpcnN0UElJWE8gPSBjdXJyIC0gMTsKICBjb25zdCBjb3VudCA9IE1hdGgubWluKE1hdGguZmxvb3IoKGkgLSBpRmlyc3RTYXZlKSAvIDQpLCBNQVhfSU1BR0VTX0lOX0lOTElORV9JTUFHRVNfQkxPQ0spOwogIGlmIChjb3VudCA8IE1JTl9JTUFHRVNfSU5fSU5MSU5FX0lNQUdFU19CTE9DSykgewogICAgcmV0dXJuIGkgLSAoaSAtIGlGaXJzdFNhdmUpICUgNDsKICB9CiAgbGV0IG1heFggPSAwOwogIGNvbnN0IG1hcCA9IFtdOwogIGxldCBtYXhMaW5lSGVpZ2h0ID0gMDsKICBsZXQgY3VycmVudFggPSBJTUFHRV9QQURESU5HLAogICAgY3VycmVudFkgPSBJTUFHRV9QQURESU5HOwogIGZvciAobGV0IHEgPSAwOyBxIDwgY291bnQ7IHErKykgewogICAgY29uc3QgdHJhbnNmb3JtID0gYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybSArIChxIDw8IDIpXTsKICAgIGNvbnN0IGltZyA9IGFyZ3NBcnJheVtpRmlyc3RQSUlYTyArIChxIDw8IDIpXVswXTsKICAgIGlmIChjdXJyZW50WCArIGltZy53aWR0aCA+IE1BWF9XSURUSCkgewogICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgY3VycmVudFgpOwogICAgICBjdXJyZW50WSArPSBtYXhMaW5lSGVpZ2h0ICsgMiAqIElNQUdFX1BBRERJTkc7CiAgICAgIGN1cnJlbnRYID0gMDsKICAgICAgbWF4TGluZUhlaWdodCA9IDA7CiAgICB9CiAgICBtYXAucHVzaCh7CiAgICAgIHRyYW5zZm9ybSwKICAgICAgeDogY3VycmVudFgsCiAgICAgIHk6IGN1cnJlbnRZLAogICAgICB3OiBpbWcud2lkdGgsCiAgICAgIGg6IGltZy5oZWlnaHQKICAgIH0pOwogICAgY3VycmVudFggKz0gaW1nLndpZHRoICsgMiAqIElNQUdFX1BBRERJTkc7CiAgICBtYXhMaW5lSGVpZ2h0ID0gTWF0aC5tYXgobWF4TGluZUhlaWdodCwgaW1nLmhlaWdodCk7CiAgfQogIGNvbnN0IGltZ1dpZHRoID0gTWF0aC5tYXgobWF4WCwgY3VycmVudFgpICsgSU1BR0VfUEFERElORzsKICBjb25zdCBpbWdIZWlnaHQgPSBjdXJyZW50WSArIG1heExpbmVIZWlnaHQgKyBJTUFHRV9QQURESU5HOwogIGNvbnN0IGltZ0RhdGEgPSBuZXcgVWludDhBcnJheShpbWdXaWR0aCAqIGltZ0hlaWdodCAqIDQpOwogIGNvbnN0IGltZ1Jvd1NpemUgPSBpbWdXaWR0aCA8PCAyOwogIGZvciAobGV0IHEgPSAwOyBxIDwgY291bnQ7IHErKykgewogICAgY29uc3QgZGF0YSA9IGFyZ3NBcnJheVtpRmlyc3RQSUlYTyArIChxIDw8IDIpXVswXS5kYXRhOwogICAgY29uc3Qgcm93U2l6ZSA9IG1hcFtxXS53IDw8IDI7CiAgICBsZXQgZGF0YU9mZnNldCA9IDA7CiAgICBsZXQgb2Zmc2V0ID0gbWFwW3FdLnggKyBtYXBbcV0ueSAqIGltZ1dpZHRoIDw8IDI7CiAgICBpbWdEYXRhLnNldChkYXRhLnN1YmFycmF5KDAsIHJvd1NpemUpLCBvZmZzZXQgLSBpbWdSb3dTaXplKTsKICAgIGZvciAobGV0IGsgPSAwLCBrayA9IG1hcFtxXS5oOyBrIDwga2s7IGsrKykgewogICAgICBpbWdEYXRhLnNldChkYXRhLnN1YmFycmF5KGRhdGFPZmZzZXQsIGRhdGFPZmZzZXQgKyByb3dTaXplKSwgb2Zmc2V0KTsKICAgICAgZGF0YU9mZnNldCArPSByb3dTaXplOwogICAgICBvZmZzZXQgKz0gaW1nUm93U2l6ZTsKICAgIH0KICAgIGltZ0RhdGEuc2V0KGRhdGEuc3ViYXJyYXkoZGF0YU9mZnNldCAtIHJvd1NpemUsIGRhdGFPZmZzZXQpLCBvZmZzZXQpOwogICAgd2hpbGUgKG9mZnNldCA+PSAwKSB7CiAgICAgIGRhdGFbb2Zmc2V0IC0gNF0gPSBkYXRhW29mZnNldF07CiAgICAgIGRhdGFbb2Zmc2V0IC0gM10gPSBkYXRhW29mZnNldCArIDFdOwogICAgICBkYXRhW29mZnNldCAtIDJdID0gZGF0YVtvZmZzZXQgKyAyXTsKICAgICAgZGF0YVtvZmZzZXQgLSAxXSA9IGRhdGFbb2Zmc2V0ICsgM107CiAgICAgIGRhdGFbb2Zmc2V0ICsgcm93U2l6ZV0gPSBkYXRhW29mZnNldCArIHJvd1NpemUgLSA0XTsKICAgICAgZGF0YVtvZmZzZXQgKyByb3dTaXplICsgMV0gPSBkYXRhW29mZnNldCArIHJvd1NpemUgLSAzXTsKICAgICAgZGF0YVtvZmZzZXQgKyByb3dTaXplICsgMl0gPSBkYXRhW29mZnNldCArIHJvd1NpemUgLSAyXTsKICAgICAgZGF0YVtvZmZzZXQgKyByb3dTaXplICsgM10gPSBkYXRhW29mZnNldCArIHJvd1NpemUgLSAxXTsKICAgICAgb2Zmc2V0IC09IGltZ1Jvd1NpemU7CiAgICB9CiAgfQogIGNvbnN0IGltZyA9IHsKICAgIHdpZHRoOiBpbWdXaWR0aCwKICAgIGhlaWdodDogaW1nSGVpZ2h0CiAgfTsKICBpZiAoY29udGV4dC5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCkgewogICAgY29uc3QgY2FudmFzID0gbmV3IE9mZnNjcmVlbkNhbnZhcyhpbWdXaWR0aCwgaW1nSGVpZ2h0KTsKICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwogICAgY3R4LnB1dEltYWdlRGF0YShuZXcgSW1hZ2VEYXRhKG5ldyBVaW50OENsYW1wZWRBcnJheShpbWdEYXRhLmJ1ZmZlciksIGltZ1dpZHRoLCBpbWdIZWlnaHQpLCAwLCAwKTsKICAgIGltZy5iaXRtYXAgPSBjYW52YXMudHJhbnNmZXJUb0ltYWdlQml0bWFwKCk7CiAgICBpbWcuZGF0YSA9IG51bGw7CiAgfSBlbHNlIHsKICAgIGltZy5raW5kID0gSW1hZ2VLaW5kLlJHQkFfMzJCUFA7CiAgICBpbWcuZGF0YSA9IGltZ0RhdGE7CiAgfQogIGZuQXJyYXkuc3BsaWNlKGlGaXJzdFNhdmUsIGNvdW50ICogNCwgT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXApOwogIGFyZ3NBcnJheS5zcGxpY2UoaUZpcnN0U2F2ZSwgY291bnQgKiA0LCBbaW1nLCBtYXBdKTsKICByZXR1cm4gaUZpcnN0U2F2ZSArIDE7Cn0pOwphZGRTdGF0ZShJbml0aWFsU3RhdGUsIFtPUFMuc2F2ZSwgT1BTLnRyYW5zZm9ybSwgT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCwgT1BTLnJlc3RvcmVdLCBudWxsLCBmdW5jdGlvbiBpdGVyYXRlSW1hZ2VNYXNrR3JvdXAoY29udGV4dCwgaSkgewogIGNvbnN0IGZuQXJyYXkgPSBjb250ZXh0LmZuQXJyYXk7CiAgY29uc3QgaUZpcnN0U2F2ZSA9IGNvbnRleHQuaUN1cnIgLSAzOwogIGNvbnN0IHBvcyA9IChpIC0gaUZpcnN0U2F2ZSkgJSA0OwogIHN3aXRjaCAocG9zKSB7CiAgICBjYXNlIDA6CiAgICAgIHJldHVybiBmbkFycmF5W2ldID09PSBPUFMuc2F2ZTsKICAgIGNhc2UgMToKICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IE9QUy50cmFuc2Zvcm07CiAgICBjYXNlIDI6CiAgICAgIHJldHVybiBmbkFycmF5W2ldID09PSBPUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0OwogICAgY2FzZSAzOgogICAgICByZXR1cm4gZm5BcnJheVtpXSA9PT0gT1BTLnJlc3RvcmU7CiAgfQogIHRocm93IG5ldyBFcnJvcihgaXRlcmF0ZUltYWdlTWFza0dyb3VwIC0gaW52YWxpZCBwb3M6ICR7cG9zfWApOwp9LCBmdW5jdGlvbiBmb3VuZEltYWdlTWFza0dyb3VwKGNvbnRleHQsIGkpIHsKICBjb25zdCBNSU5fSU1BR0VTX0lOX01BU0tTX0JMT0NLID0gMTA7CiAgY29uc3QgTUFYX0lNQUdFU19JTl9NQVNLU19CTE9DSyA9IDEwMDsKICBjb25zdCBNQVhfU0FNRV9JTUFHRVNfSU5fTUFTS1NfQkxPQ0sgPSAxMDAwOwogIGNvbnN0IGZuQXJyYXkgPSBjb250ZXh0LmZuQXJyYXksCiAgICBhcmdzQXJyYXkgPSBjb250ZXh0LmFyZ3NBcnJheTsKICBjb25zdCBjdXJyID0gY29udGV4dC5pQ3VycjsKICBjb25zdCBpRmlyc3RTYXZlID0gY3VyciAtIDM7CiAgY29uc3QgaUZpcnN0VHJhbnNmb3JtID0gY3VyciAtIDI7CiAgY29uc3QgaUZpcnN0UElNWE8gPSBjdXJyIC0gMTsKICBsZXQgY291bnQgPSBNYXRoLmZsb29yKChpIC0gaUZpcnN0U2F2ZSkgLyA0KTsKICBpZiAoY291bnQgPCBNSU5fSU1BR0VTX0lOX01BU0tTX0JMT0NLKSB7CiAgICByZXR1cm4gaSAtIChpIC0gaUZpcnN0U2F2ZSkgJSA0OwogIH0KICBsZXQgaXNTYW1lSW1hZ2UgPSBmYWxzZTsKICBsZXQgaVRyYW5zZm9ybSwgdHJhbnNmb3JtQXJnczsKICBjb25zdCBmaXJzdFBJTVhPQXJnMCA9IGFyZ3NBcnJheVtpRmlyc3RQSU1YT11bMF07CiAgY29uc3QgZmlyc3RUcmFuc2Zvcm1BcmcwID0gYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybV1bMF0sCiAgICBmaXJzdFRyYW5zZm9ybUFyZzEgPSBhcmdzQXJyYXlbaUZpcnN0VHJhbnNmb3JtXVsxXSwKICAgIGZpcnN0VHJhbnNmb3JtQXJnMiA9IGFyZ3NBcnJheVtpRmlyc3RUcmFuc2Zvcm1dWzJdLAogICAgZmlyc3RUcmFuc2Zvcm1BcmczID0gYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybV1bM107CiAgaWYgKGZpcnN0VHJhbnNmb3JtQXJnMSA9PT0gZmlyc3RUcmFuc2Zvcm1BcmcyKSB7CiAgICBpc1NhbWVJbWFnZSA9IHRydWU7CiAgICBpVHJhbnNmb3JtID0gaUZpcnN0VHJhbnNmb3JtICsgNDsKICAgIGxldCBpUElNWE8gPSBpRmlyc3RQSU1YTyArIDQ7CiAgICBmb3IgKGxldCBxID0gMTsgcSA8IGNvdW50OyBxKyssIGlUcmFuc2Zvcm0gKz0gNCwgaVBJTVhPICs9IDQpIHsKICAgICAgdHJhbnNmb3JtQXJncyA9IGFyZ3NBcnJheVtpVHJhbnNmb3JtXTsKICAgICAgaWYgKGFyZ3NBcnJheVtpUElNWE9dWzBdICE9PSBmaXJzdFBJTVhPQXJnMCB8fCB0cmFuc2Zvcm1BcmdzWzBdICE9PSBmaXJzdFRyYW5zZm9ybUFyZzAgfHwgdHJhbnNmb3JtQXJnc1sxXSAhPT0gZmlyc3RUcmFuc2Zvcm1BcmcxIHx8IHRyYW5zZm9ybUFyZ3NbMl0gIT09IGZpcnN0VHJhbnNmb3JtQXJnMiB8fCB0cmFuc2Zvcm1BcmdzWzNdICE9PSBmaXJzdFRyYW5zZm9ybUFyZzMpIHsKICAgICAgICBpZiAocSA8IE1JTl9JTUFHRVNfSU5fTUFTS1NfQkxPQ0spIHsKICAgICAgICAgIGlzU2FtZUltYWdlID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvdW50ID0gcTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICB9CiAgaWYgKGlzU2FtZUltYWdlKSB7CiAgICBjb3VudCA9IE1hdGgubWluKGNvdW50LCBNQVhfU0FNRV9JTUFHRVNfSU5fTUFTS1NfQkxPQ0spOwogICAgY29uc3QgcG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheShjb3VudCAqIDIpOwogICAgaVRyYW5zZm9ybSA9IGlGaXJzdFRyYW5zZm9ybTsKICAgIGZvciAobGV0IHEgPSAwOyBxIDwgY291bnQ7IHErKywgaVRyYW5zZm9ybSArPSA0KSB7CiAgICAgIHRyYW5zZm9ybUFyZ3MgPSBhcmdzQXJyYXlbaVRyYW5zZm9ybV07CiAgICAgIHBvc2l0aW9uc1txIDw8IDFdID0gdHJhbnNmb3JtQXJnc1s0XTsKICAgICAgcG9zaXRpb25zWyhxIDw8IDEpICsgMV0gPSB0cmFuc2Zvcm1BcmdzWzVdOwogICAgfQogICAgZm5BcnJheS5zcGxpY2UoaUZpcnN0U2F2ZSwgY291bnQgKiA0LCBPUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0UmVwZWF0KTsKICAgIGFyZ3NBcnJheS5zcGxpY2UoaUZpcnN0U2F2ZSwgY291bnQgKiA0LCBbZmlyc3RQSU1YT0FyZzAsIGZpcnN0VHJhbnNmb3JtQXJnMCwgZmlyc3RUcmFuc2Zvcm1BcmcxLCBmaXJzdFRyYW5zZm9ybUFyZzIsIGZpcnN0VHJhbnNmb3JtQXJnMywgcG9zaXRpb25zXSk7CiAgfSBlbHNlIHsKICAgIGNvdW50ID0gTWF0aC5taW4oY291bnQsIE1BWF9JTUFHRVNfSU5fTUFTS1NfQkxPQ0spOwogICAgY29uc3QgaW1hZ2VzID0gW107CiAgICBmb3IgKGxldCBxID0gMDsgcSA8IGNvdW50OyBxKyspIHsKICAgICAgdHJhbnNmb3JtQXJncyA9IGFyZ3NBcnJheVtpRmlyc3RUcmFuc2Zvcm0gKyAocSA8PCAyKV07CiAgICAgIGNvbnN0IG1hc2tQYXJhbXMgPSBhcmdzQXJyYXlbaUZpcnN0UElNWE8gKyAocSA8PCAyKV1bMF07CiAgICAgIGltYWdlcy5wdXNoKHsKICAgICAgICBkYXRhOiBtYXNrUGFyYW1zLmRhdGEsCiAgICAgICAgd2lkdGg6IG1hc2tQYXJhbXMud2lkdGgsCiAgICAgICAgaGVpZ2h0OiBtYXNrUGFyYW1zLmhlaWdodCwKICAgICAgICBpbnRlcnBvbGF0ZTogbWFza1BhcmFtcy5pbnRlcnBvbGF0ZSwKICAgICAgICBjb3VudDogbWFza1BhcmFtcy5jb3VudCwKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybUFyZ3MKICAgICAgfSk7CiAgICB9CiAgICBmbkFycmF5LnNwbGljZShpRmlyc3RTYXZlLCBjb3VudCAqIDQsIE9QUy5wYWludEltYWdlTWFza1hPYmplY3RHcm91cCk7CiAgICBhcmdzQXJyYXkuc3BsaWNlKGlGaXJzdFNhdmUsIGNvdW50ICogNCwgW2ltYWdlc10pOwogIH0KICByZXR1cm4gaUZpcnN0U2F2ZSArIDE7Cn0pOwphZGRTdGF0ZShJbml0aWFsU3RhdGUsIFtPUFMuc2F2ZSwgT1BTLnRyYW5zZm9ybSwgT1BTLnBhaW50SW1hZ2VYT2JqZWN0LCBPUFMucmVzdG9yZV0sIGZ1bmN0aW9uIChjb250ZXh0KSB7CiAgY29uc3QgYXJnc0FycmF5ID0gY29udGV4dC5hcmdzQXJyYXk7CiAgY29uc3QgaUZpcnN0VHJhbnNmb3JtID0gY29udGV4dC5pQ3VyciAtIDI7CiAgcmV0dXJuIGFyZ3NBcnJheVtpRmlyc3RUcmFuc2Zvcm1dWzFdID09PSAwICYmIGFyZ3NBcnJheVtpRmlyc3RUcmFuc2Zvcm1dWzJdID09PSAwOwp9LCBmdW5jdGlvbiBpdGVyYXRlSW1hZ2VHcm91cChjb250ZXh0LCBpKSB7CiAgY29uc3QgZm5BcnJheSA9IGNvbnRleHQuZm5BcnJheSwKICAgIGFyZ3NBcnJheSA9IGNvbnRleHQuYXJnc0FycmF5OwogIGNvbnN0IGlGaXJzdFNhdmUgPSBjb250ZXh0LmlDdXJyIC0gMzsKICBjb25zdCBwb3MgPSAoaSAtIGlGaXJzdFNhdmUpICUgNDsKICBzd2l0Y2ggKHBvcykgewogICAgY2FzZSAwOgogICAgICByZXR1cm4gZm5BcnJheVtpXSA9PT0gT1BTLnNhdmU7CiAgICBjYXNlIDE6CiAgICAgIGlmIChmbkFycmF5W2ldICE9PSBPUFMudHJhbnNmb3JtKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGNvbnN0IGlGaXJzdFRyYW5zZm9ybSA9IGNvbnRleHQuaUN1cnIgLSAyOwogICAgICBjb25zdCBmaXJzdFRyYW5zZm9ybUFyZzAgPSBhcmdzQXJyYXlbaUZpcnN0VHJhbnNmb3JtXVswXTsKICAgICAgY29uc3QgZmlyc3RUcmFuc2Zvcm1BcmczID0gYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybV1bM107CiAgICAgIGlmIChhcmdzQXJyYXlbaV1bMF0gIT09IGZpcnN0VHJhbnNmb3JtQXJnMCB8fCBhcmdzQXJyYXlbaV1bMV0gIT09IDAgfHwgYXJnc0FycmF5W2ldWzJdICE9PSAwIHx8IGFyZ3NBcnJheVtpXVszXSAhPT0gZmlyc3RUcmFuc2Zvcm1BcmczKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgY2FzZSAyOgogICAgICBpZiAoZm5BcnJheVtpXSAhPT0gT1BTLnBhaW50SW1hZ2VYT2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGNvbnN0IGlGaXJzdFBJWE8gPSBjb250ZXh0LmlDdXJyIC0gMTsKICAgICAgY29uc3QgZmlyc3RQSVhPQXJnMCA9IGFyZ3NBcnJheVtpRmlyc3RQSVhPXVswXTsKICAgICAgaWYgKGFyZ3NBcnJheVtpXVswXSAhPT0gZmlyc3RQSVhPQXJnMCkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGNhc2UgMzoKICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IE9QUy5yZXN0b3JlOwogIH0KICB0aHJvdyBuZXcgRXJyb3IoYGl0ZXJhdGVJbWFnZUdyb3VwIC0gaW52YWxpZCBwb3M6ICR7cG9zfWApOwp9LCBmdW5jdGlvbiAoY29udGV4dCwgaSkgewogIGNvbnN0IE1JTl9JTUFHRVNfSU5fQkxPQ0sgPSAzOwogIGNvbnN0IE1BWF9JTUFHRVNfSU5fQkxPQ0sgPSAxMDAwOwogIGNvbnN0IGZuQXJyYXkgPSBjb250ZXh0LmZuQXJyYXksCiAgICBhcmdzQXJyYXkgPSBjb250ZXh0LmFyZ3NBcnJheTsKICBjb25zdCBjdXJyID0gY29udGV4dC5pQ3VycjsKICBjb25zdCBpRmlyc3RTYXZlID0gY3VyciAtIDM7CiAgY29uc3QgaUZpcnN0VHJhbnNmb3JtID0gY3VyciAtIDI7CiAgY29uc3QgaUZpcnN0UElYTyA9IGN1cnIgLSAxOwogIGNvbnN0IGZpcnN0UElYT0FyZzAgPSBhcmdzQXJyYXlbaUZpcnN0UElYT11bMF07CiAgY29uc3QgZmlyc3RUcmFuc2Zvcm1BcmcwID0gYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybV1bMF07CiAgY29uc3QgZmlyc3RUcmFuc2Zvcm1BcmczID0gYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybV1bM107CiAgY29uc3QgY291bnQgPSBNYXRoLm1pbihNYXRoLmZsb29yKChpIC0gaUZpcnN0U2F2ZSkgLyA0KSwgTUFYX0lNQUdFU19JTl9CTE9DSyk7CiAgaWYgKGNvdW50IDwgTUlOX0lNQUdFU19JTl9CTE9DSykgewogICAgcmV0dXJuIGkgLSAoaSAtIGlGaXJzdFNhdmUpICUgNDsKICB9CiAgY29uc3QgcG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheShjb3VudCAqIDIpOwogIGxldCBpVHJhbnNmb3JtID0gaUZpcnN0VHJhbnNmb3JtOwogIGZvciAobGV0IHEgPSAwOyBxIDwgY291bnQ7IHErKywgaVRyYW5zZm9ybSArPSA0KSB7CiAgICBjb25zdCB0cmFuc2Zvcm1BcmdzID0gYXJnc0FycmF5W2lUcmFuc2Zvcm1dOwogICAgcG9zaXRpb25zW3EgPDwgMV0gPSB0cmFuc2Zvcm1BcmdzWzRdOwogICAgcG9zaXRpb25zWyhxIDw8IDEpICsgMV0gPSB0cmFuc2Zvcm1BcmdzWzVdOwogIH0KICBjb25zdCBhcmdzID0gW2ZpcnN0UElYT0FyZzAsIGZpcnN0VHJhbnNmb3JtQXJnMCwgZmlyc3RUcmFuc2Zvcm1BcmczLCBwb3NpdGlvbnNdOwogIGZuQXJyYXkuc3BsaWNlKGlGaXJzdFNhdmUsIGNvdW50ICogNCwgT1BTLnBhaW50SW1hZ2VYT2JqZWN0UmVwZWF0KTsKICBhcmdzQXJyYXkuc3BsaWNlKGlGaXJzdFNhdmUsIGNvdW50ICogNCwgYXJncyk7CiAgcmV0dXJuIGlGaXJzdFNhdmUgKyAxOwp9KTsKYWRkU3RhdGUoSW5pdGlhbFN0YXRlLCBbT1BTLmJlZ2luVGV4dCwgT1BTLnNldEZvbnQsIE9QUy5zZXRUZXh0TWF0cml4LCBPUFMuc2hvd1RleHQsIE9QUy5lbmRUZXh0XSwgbnVsbCwgZnVuY3Rpb24gaXRlcmF0ZVNob3dUZXh0R3JvdXAoY29udGV4dCwgaSkgewogIGNvbnN0IGZuQXJyYXkgPSBjb250ZXh0LmZuQXJyYXksCiAgICBhcmdzQXJyYXkgPSBjb250ZXh0LmFyZ3NBcnJheTsKICBjb25zdCBpRmlyc3RTYXZlID0gY29udGV4dC5pQ3VyciAtIDQ7CiAgY29uc3QgcG9zID0gKGkgLSBpRmlyc3RTYXZlKSAlIDU7CiAgc3dpdGNoIChwb3MpIHsKICAgIGNhc2UgMDoKICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IE9QUy5iZWdpblRleHQ7CiAgICBjYXNlIDE6CiAgICAgIHJldHVybiBmbkFycmF5W2ldID09PSBPUFMuc2V0Rm9udDsKICAgIGNhc2UgMjoKICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IE9QUy5zZXRUZXh0TWF0cml4OwogICAgY2FzZSAzOgogICAgICBpZiAoZm5BcnJheVtpXSAhPT0gT1BTLnNob3dUZXh0KSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGNvbnN0IGlGaXJzdFNldEZvbnQgPSBjb250ZXh0LmlDdXJyIC0gMzsKICAgICAgY29uc3QgZmlyc3RTZXRGb250QXJnMCA9IGFyZ3NBcnJheVtpRmlyc3RTZXRGb250XVswXTsKICAgICAgY29uc3QgZmlyc3RTZXRGb250QXJnMSA9IGFyZ3NBcnJheVtpRmlyc3RTZXRGb250XVsxXTsKICAgICAgaWYgKGFyZ3NBcnJheVtpXVswXSAhPT0gZmlyc3RTZXRGb250QXJnMCB8fCBhcmdzQXJyYXlbaV1bMV0gIT09IGZpcnN0U2V0Rm9udEFyZzEpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICBjYXNlIDQ6CiAgICAgIHJldHVybiBmbkFycmF5W2ldID09PSBPUFMuZW5kVGV4dDsKICB9CiAgdGhyb3cgbmV3IEVycm9yKGBpdGVyYXRlU2hvd1RleHRHcm91cCAtIGludmFsaWQgcG9zOiAke3Bvc31gKTsKfSwgZnVuY3Rpb24gKGNvbnRleHQsIGkpIHsKICBjb25zdCBNSU5fQ0hBUlNfSU5fQkxPQ0sgPSAzOwogIGNvbnN0IE1BWF9DSEFSU19JTl9CTE9DSyA9IDEwMDA7CiAgY29uc3QgZm5BcnJheSA9IGNvbnRleHQuZm5BcnJheSwKICAgIGFyZ3NBcnJheSA9IGNvbnRleHQuYXJnc0FycmF5OwogIGNvbnN0IGN1cnIgPSBjb250ZXh0LmlDdXJyOwogIGNvbnN0IGlGaXJzdEJlZ2luVGV4dCA9IGN1cnIgLSA0OwogIGNvbnN0IGlGaXJzdFNldEZvbnQgPSBjdXJyIC0gMzsKICBjb25zdCBpRmlyc3RTZXRUZXh0TWF0cml4ID0gY3VyciAtIDI7CiAgY29uc3QgaUZpcnN0U2hvd1RleHQgPSBjdXJyIC0gMTsKICBjb25zdCBpRmlyc3RFbmRUZXh0ID0gY3VycjsKICBjb25zdCBmaXJzdFNldEZvbnRBcmcwID0gYXJnc0FycmF5W2lGaXJzdFNldEZvbnRdWzBdOwogIGNvbnN0IGZpcnN0U2V0Rm9udEFyZzEgPSBhcmdzQXJyYXlbaUZpcnN0U2V0Rm9udF1bMV07CiAgbGV0IGNvdW50ID0gTWF0aC5taW4oTWF0aC5mbG9vcigoaSAtIGlGaXJzdEJlZ2luVGV4dCkgLyA1KSwgTUFYX0NIQVJTX0lOX0JMT0NLKTsKICBpZiAoY291bnQgPCBNSU5fQ0hBUlNfSU5fQkxPQ0spIHsKICAgIHJldHVybiBpIC0gKGkgLSBpRmlyc3RCZWdpblRleHQpICUgNTsKICB9CiAgbGV0IGlGaXJzdCA9IGlGaXJzdEJlZ2luVGV4dDsKICBpZiAoaUZpcnN0QmVnaW5UZXh0ID49IDQgJiYgZm5BcnJheVtpRmlyc3RCZWdpblRleHQgLSA0XSA9PT0gZm5BcnJheVtpRmlyc3RTZXRGb250XSAmJiBmbkFycmF5W2lGaXJzdEJlZ2luVGV4dCAtIDNdID09PSBmbkFycmF5W2lGaXJzdFNldFRleHRNYXRyaXhdICYmIGZuQXJyYXlbaUZpcnN0QmVnaW5UZXh0IC0gMl0gPT09IGZuQXJyYXlbaUZpcnN0U2hvd1RleHRdICYmIGZuQXJyYXlbaUZpcnN0QmVnaW5UZXh0IC0gMV0gPT09IGZuQXJyYXlbaUZpcnN0RW5kVGV4dF0gJiYgYXJnc0FycmF5W2lGaXJzdEJlZ2luVGV4dCAtIDRdWzBdID09PSBmaXJzdFNldEZvbnRBcmcwICYmIGFyZ3NBcnJheVtpRmlyc3RCZWdpblRleHQgLSA0XVsxXSA9PT0gZmlyc3RTZXRGb250QXJnMSkgewogICAgY291bnQrKzsKICAgIGlGaXJzdCAtPSA1OwogIH0KICBsZXQgaUVuZFRleHQgPSBpRmlyc3QgKyA0OwogIGZvciAobGV0IHEgPSAxOyBxIDwgY291bnQ7IHErKykgewogICAgZm5BcnJheS5zcGxpY2UoaUVuZFRleHQsIDMpOwogICAgYXJnc0FycmF5LnNwbGljZShpRW5kVGV4dCwgMyk7CiAgICBpRW5kVGV4dCArPSAyOwogIH0KICByZXR1cm4gaUVuZFRleHQgKyAxOwp9KTsKY2xhc3MgTnVsbE9wdGltaXplciB7CiAgY29uc3RydWN0b3IocXVldWUpIHsKICAgIHRoaXMucXVldWUgPSBxdWV1ZTsKICB9CiAgX29wdGltaXplKCkge30KICBwdXNoKGZuLCBhcmdzKSB7CiAgICB0aGlzLnF1ZXVlLmZuQXJyYXkucHVzaChmbik7CiAgICB0aGlzLnF1ZXVlLmFyZ3NBcnJheS5wdXNoKGFyZ3MpOwogICAgdGhpcy5fb3B0aW1pemUoKTsKICB9CiAgZmx1c2goKSB7fQogIHJlc2V0KCkge30KfQpjbGFzcyBRdWV1ZU9wdGltaXplciBleHRlbmRzIE51bGxPcHRpbWl6ZXIgewogIGNvbnN0cnVjdG9yKHF1ZXVlKSB7CiAgICBzdXBlcihxdWV1ZSk7CiAgICB0aGlzLnN0YXRlID0gbnVsbDsKICAgIHRoaXMuY29udGV4dCA9IHsKICAgICAgaUN1cnI6IDAsCiAgICAgIGZuQXJyYXk6IHF1ZXVlLmZuQXJyYXksCiAgICAgIGFyZ3NBcnJheTogcXVldWUuYXJnc0FycmF5LAogICAgICBpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDogZmFsc2UKICAgIH07CiAgICB0aGlzLm1hdGNoID0gbnVsbDsKICAgIHRoaXMubGFzdFByb2Nlc3NlZCA9IDA7CiAgfQogIHNldCBpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCh2YWx1ZSkgewogICAgdGhpcy5jb250ZXh0LmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkID0gdmFsdWU7CiAgfQogIF9vcHRpbWl6ZSgpIHsKICAgIGNvbnN0IGZuQXJyYXkgPSB0aGlzLnF1ZXVlLmZuQXJyYXk7CiAgICBsZXQgaSA9IHRoaXMubGFzdFByb2Nlc3NlZCwKICAgICAgaWkgPSBmbkFycmF5Lmxlbmd0aDsKICAgIGxldCBzdGF0ZSA9IHRoaXMuc3RhdGU7CiAgICBsZXQgbWF0Y2ggPSB0aGlzLm1hdGNoOwogICAgaWYgKCFzdGF0ZSAmJiAhbWF0Y2ggJiYgaSArIDEgPT09IGlpICYmICFJbml0aWFsU3RhdGVbZm5BcnJheVtpXV0pIHsKICAgICAgdGhpcy5sYXN0UHJvY2Vzc2VkID0gaWk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7CiAgICB3aGlsZSAoaSA8IGlpKSB7CiAgICAgIGlmIChtYXRjaCkgewogICAgICAgIGNvbnN0IGl0ZXJhdGUgPSAoMCwgbWF0Y2guaXRlcmF0ZUZuKShjb250ZXh0LCBpKTsKICAgICAgICBpZiAoaXRlcmF0ZSkgewogICAgICAgICAgaSsrOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGkgPSAoMCwgbWF0Y2gucHJvY2Vzc0ZuKShjb250ZXh0LCBpICsgMSk7CiAgICAgICAgaWkgPSBmbkFycmF5Lmxlbmd0aDsKICAgICAgICBtYXRjaCA9IG51bGw7CiAgICAgICAgc3RhdGUgPSBudWxsOwogICAgICAgIGlmIChpID49IGlpKSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgc3RhdGUgPSAoc3RhdGUgfHwgSW5pdGlhbFN0YXRlKVtmbkFycmF5W2ldXTsKICAgICAgaWYgKCFzdGF0ZSB8fCBBcnJheS5pc0FycmF5KHN0YXRlKSkgewogICAgICAgIGkrKzsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBjb250ZXh0LmlDdXJyID0gaTsKICAgICAgaSsrOwogICAgICBpZiAoc3RhdGUuY2hlY2tGbiAmJiAhKDAsIHN0YXRlLmNoZWNrRm4pKGNvbnRleHQpKSB7CiAgICAgICAgc3RhdGUgPSBudWxsOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIG1hdGNoID0gc3RhdGU7CiAgICAgIHN0YXRlID0gbnVsbDsKICAgIH0KICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTsKICAgIHRoaXMubWF0Y2ggPSBtYXRjaDsKICAgIHRoaXMubGFzdFByb2Nlc3NlZCA9IGk7CiAgfQogIGZsdXNoKCkgewogICAgd2hpbGUgKHRoaXMubWF0Y2gpIHsKICAgICAgY29uc3QgbGVuZ3RoID0gdGhpcy5xdWV1ZS5mbkFycmF5Lmxlbmd0aDsKICAgICAgdGhpcy5sYXN0UHJvY2Vzc2VkID0gKDAsIHRoaXMubWF0Y2gucHJvY2Vzc0ZuKSh0aGlzLmNvbnRleHQsIGxlbmd0aCk7CiAgICAgIHRoaXMubWF0Y2ggPSBudWxsOwogICAgICB0aGlzLnN0YXRlID0gbnVsbDsKICAgICAgdGhpcy5fb3B0aW1pemUoKTsKICAgIH0KICB9CiAgcmVzZXQoKSB7CiAgICB0aGlzLnN0YXRlID0gbnVsbDsKICAgIHRoaXMubWF0Y2ggPSBudWxsOwogICAgdGhpcy5sYXN0UHJvY2Vzc2VkID0gMDsKICB9Cn0KY2xhc3MgT3BlcmF0b3JMaXN0IHsKICBzdGF0aWMgQ0hVTktfU0laRSA9IDEwMDA7CiAgc3RhdGljIENIVU5LX1NJWkVfQUJPVVQgPSB0aGlzLkNIVU5LX1NJWkUgLSA1OwogIGNvbnN0cnVjdG9yKGludGVudCA9IDAsIHN0cmVhbVNpbmspIHsKICAgIHRoaXMuX3N0cmVhbVNpbmsgPSBzdHJlYW1TaW5rOwogICAgdGhpcy5mbkFycmF5ID0gW107CiAgICB0aGlzLmFyZ3NBcnJheSA9IFtdOwogICAgdGhpcy5vcHRpbWl6ZXIgPSBzdHJlYW1TaW5rICYmICEoaW50ZW50ICYgUmVuZGVyaW5nSW50ZW50RmxhZy5PUExJU1QpID8gbmV3IFF1ZXVlT3B0aW1pemVyKHRoaXMpIDogbmV3IE51bGxPcHRpbWl6ZXIodGhpcyk7CiAgICB0aGlzLmRlcGVuZGVuY2llcyA9IG5ldyBTZXQoKTsKICAgIHRoaXMuX3RvdGFsTGVuZ3RoID0gMDsKICAgIHRoaXMud2VpZ2h0ID0gMDsKICAgIHRoaXMuX3Jlc29sdmVkID0gc3RyZWFtU2luayA/IG51bGwgOiBQcm9taXNlLnJlc29sdmUoKTsKICB9CiAgc2V0IGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKHZhbHVlKSB7CiAgICB0aGlzLm9wdGltaXplci5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCA9IHZhbHVlOwogIH0KICBnZXQgbGVuZ3RoKCkgewogICAgcmV0dXJuIHRoaXMuYXJnc0FycmF5Lmxlbmd0aDsKICB9CiAgZ2V0IHJlYWR5KCkgewogICAgcmV0dXJuIHRoaXMuX3Jlc29sdmVkIHx8IHRoaXMuX3N0cmVhbVNpbmsucmVhZHk7CiAgfQogIGdldCB0b3RhbExlbmd0aCgpIHsKICAgIHJldHVybiB0aGlzLl90b3RhbExlbmd0aCArIHRoaXMubGVuZ3RoOwogIH0KICBhZGRPcChmbiwgYXJncykgewogICAgdGhpcy5vcHRpbWl6ZXIucHVzaChmbiwgYXJncyk7CiAgICB0aGlzLndlaWdodCsrOwogICAgaWYgKHRoaXMuX3N0cmVhbVNpbmspIHsKICAgICAgaWYgKHRoaXMud2VpZ2h0ID49IE9wZXJhdG9yTGlzdC5DSFVOS19TSVpFKSB7CiAgICAgICAgdGhpcy5mbHVzaCgpOwogICAgICB9IGVsc2UgaWYgKHRoaXMud2VpZ2h0ID49IE9wZXJhdG9yTGlzdC5DSFVOS19TSVpFX0FCT1VUICYmIChmbiA9PT0gT1BTLnJlc3RvcmUgfHwgZm4gPT09IE9QUy5lbmRUZXh0KSkgewogICAgICAgIHRoaXMuZmx1c2goKTsKICAgICAgfQogICAgfQogIH0KICBhZGRJbWFnZU9wcyhmbiwgYXJncywgb3B0aW9uYWxDb250ZW50LCBoYXNNYXNrID0gZmFsc2UpIHsKICAgIGlmIChoYXNNYXNrKSB7CiAgICAgIHRoaXMuYWRkT3AoT1BTLnNhdmUpOwogICAgICB0aGlzLmFkZE9wKE9QUy5zZXRHU3RhdGUsIFtbWyJTTWFzayIsIGZhbHNlXV1dKTsKICAgIH0KICAgIGlmIChvcHRpb25hbENvbnRlbnQgIT09IHVuZGVmaW5lZCkgewogICAgICB0aGlzLmFkZE9wKE9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wcywgWyJPQyIsIG9wdGlvbmFsQ29udGVudF0pOwogICAgfQogICAgdGhpcy5hZGRPcChmbiwgYXJncyk7CiAgICBpZiAob3B0aW9uYWxDb250ZW50ICE9PSB1bmRlZmluZWQpIHsKICAgICAgdGhpcy5hZGRPcChPUFMuZW5kTWFya2VkQ29udGVudCwgW10pOwogICAgfQogICAgaWYgKGhhc01hc2spIHsKICAgICAgdGhpcy5hZGRPcChPUFMucmVzdG9yZSk7CiAgICB9CiAgfQogIGFkZERlcGVuZGVuY3koZGVwZW5kZW5jeSkgewogICAgaWYgKHRoaXMuZGVwZW5kZW5jaWVzLmhhcyhkZXBlbmRlbmN5KSkgewogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLmRlcGVuZGVuY2llcy5hZGQoZGVwZW5kZW5jeSk7CiAgICB0aGlzLmFkZE9wKE9QUy5kZXBlbmRlbmN5LCBbZGVwZW5kZW5jeV0pOwogIH0KICBhZGREZXBlbmRlbmNpZXMoZGVwZW5kZW5jaWVzKSB7CiAgICBmb3IgKGNvbnN0IGRlcGVuZGVuY3kgb2YgZGVwZW5kZW5jaWVzKSB7CiAgICAgIHRoaXMuYWRkRGVwZW5kZW5jeShkZXBlbmRlbmN5KTsKICAgIH0KICB9CiAgYWRkT3BMaXN0KG9wTGlzdCkgewogICAgaWYgKCEob3BMaXN0IGluc3RhbmNlb2YgT3BlcmF0b3JMaXN0KSkgewogICAgICB3YXJuKCdhZGRPcExpc3QgLSBpZ25vcmluZyBpbnZhbGlkICJvcExpc3QiIHBhcmFtZXRlci4nKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgZm9yIChjb25zdCBkZXBlbmRlbmN5IG9mIG9wTGlzdC5kZXBlbmRlbmNpZXMpIHsKICAgICAgdGhpcy5kZXBlbmRlbmNpZXMuYWRkKGRlcGVuZGVuY3kpOwogICAgfQogICAgZm9yIChsZXQgaSA9IDAsIGlpID0gb3BMaXN0Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgdGhpcy5hZGRPcChvcExpc3QuZm5BcnJheVtpXSwgb3BMaXN0LmFyZ3NBcnJheVtpXSk7CiAgICB9CiAgfQogIGdldElSKCkgewogICAgcmV0dXJuIHsKICAgICAgZm5BcnJheTogdGhpcy5mbkFycmF5LAogICAgICBhcmdzQXJyYXk6IHRoaXMuYXJnc0FycmF5LAogICAgICBsZW5ndGg6IHRoaXMubGVuZ3RoCiAgICB9OwogIH0KICBnZXQgX3RyYW5zZmVycygpIHsKICAgIGNvbnN0IHRyYW5zZmVycyA9IFtdOwogICAgY29uc3QgewogICAgICBmbkFycmF5LAogICAgICBhcmdzQXJyYXksCiAgICAgIGxlbmd0aAogICAgfSA9IHRoaXM7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHN3aXRjaCAoZm5BcnJheVtpXSkgewogICAgICAgIGNhc2UgT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0OgogICAgICAgIGNhc2UgT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXA6CiAgICAgICAgY2FzZSBPUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0OgogICAgICAgICAgY29uc3QgYXJnID0gYXJnc0FycmF5W2ldWzBdOwogICAgICAgICAgaWYgKCFhcmcuY2FjaGVkICYmIGFyZy5kYXRhPy5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgewogICAgICAgICAgICB0cmFuc2ZlcnMucHVzaChhcmcuZGF0YS5idWZmZXIpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBPUFMuY29uc3RydWN0UGF0aDoKICAgICAgICAgIGNvbnN0IFssIFtkYXRhXSwgbWluTWF4XSA9IGFyZ3NBcnJheVtpXTsKICAgICAgICAgIGlmIChkYXRhKSB7CiAgICAgICAgICAgIHRyYW5zZmVycy5wdXNoKGRhdGEuYnVmZmVyLCBtaW5NYXguYnVmZmVyKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJhbnNmZXJzOwogIH0KICBmbHVzaChsYXN0Q2h1bmsgPSBmYWxzZSwgc2VwYXJhdGVBbm5vdHMgPSBudWxsKSB7CiAgICB0aGlzLm9wdGltaXplci5mbHVzaCgpOwogICAgY29uc3QgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICB0aGlzLl90b3RhbExlbmd0aCArPSBsZW5ndGg7CiAgICB0aGlzLl9zdHJlYW1TaW5rLmVucXVldWUoewogICAgICBmbkFycmF5OiB0aGlzLmZuQXJyYXksCiAgICAgIGFyZ3NBcnJheTogdGhpcy5hcmdzQXJyYXksCiAgICAgIGxhc3RDaHVuaywKICAgICAgc2VwYXJhdGVBbm5vdHMsCiAgICAgIGxlbmd0aAogICAgfSwgMSwgdGhpcy5fdHJhbnNmZXJzKTsKICAgIHRoaXMuZGVwZW5kZW5jaWVzLmNsZWFyKCk7CiAgICB0aGlzLmZuQXJyYXkubGVuZ3RoID0gMDsKICAgIHRoaXMuYXJnc0FycmF5Lmxlbmd0aCA9IDA7CiAgICB0aGlzLndlaWdodCA9IDA7CiAgICB0aGlzLm9wdGltaXplci5yZXNldCgpOwogIH0KfQoKOy8vIC4vc3JjL2NvcmUvaW1hZ2UuanMKCgoKCgoKCgoKCmZ1bmN0aW9uIHJlc2l6ZUltYWdlTWFzayhzcmMsIGJwYywgdzEsIGgxLCB3MiwgaDIpIHsKICBjb25zdCBsZW5ndGggPSB3MiAqIGgyOwogIGxldCBkZXN0OwogIGlmIChicGMgPD0gOCkgewogICAgZGVzdCA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7CiAgfSBlbHNlIGlmIChicGMgPD0gMTYpIHsKICAgIGRlc3QgPSBuZXcgVWludDE2QXJyYXkobGVuZ3RoKTsKICB9IGVsc2UgewogICAgZGVzdCA9IG5ldyBVaW50MzJBcnJheShsZW5ndGgpOwogIH0KICBjb25zdCB4UmF0aW8gPSB3MSAvIHcyOwogIGNvbnN0IHlSYXRpbyA9IGgxIC8gaDI7CiAgbGV0IGksCiAgICBqLAogICAgcHksCiAgICBuZXdJbmRleCA9IDAsCiAgICBvbGRJbmRleDsKICBjb25zdCB4U2NhbGVkID0gbmV3IFVpbnQxNkFycmF5KHcyKTsKICBjb25zdCB3MVNjYW5saW5lID0gdzE7CiAgZm9yIChpID0gMDsgaSA8IHcyOyBpKyspIHsKICAgIHhTY2FsZWRbaV0gPSBNYXRoLmZsb29yKGkgKiB4UmF0aW8pOwogIH0KICBmb3IgKGkgPSAwOyBpIDwgaDI7IGkrKykgewogICAgcHkgPSBNYXRoLmZsb29yKGkgKiB5UmF0aW8pICogdzFTY2FubGluZTsKICAgIGZvciAoaiA9IDA7IGogPCB3MjsgaisrKSB7CiAgICAgIG9sZEluZGV4ID0gcHkgKyB4U2NhbGVkW2pdOwogICAgICBkZXN0W25ld0luZGV4KytdID0gc3JjW29sZEluZGV4XTsKICAgIH0KICB9CiAgcmV0dXJuIGRlc3Q7Cn0KY2xhc3MgUERGSW1hZ2UgewogIGNvbnN0cnVjdG9yKHsKICAgIHhyZWYsCiAgICByZXMsCiAgICBpbWFnZSwKICAgIGlzSW5saW5lID0gZmFsc2UsCiAgICBzbWFzayA9IG51bGwsCiAgICBtYXNrID0gbnVsbCwKICAgIGlzTWFzayA9IGZhbHNlLAogICAgcGRmRnVuY3Rpb25GYWN0b3J5LAogICAgZ2xvYmFsQ29sb3JTcGFjZUNhY2hlLAogICAgbG9jYWxDb2xvclNwYWNlQ2FjaGUKICB9KSB7CiAgICB0aGlzLmltYWdlID0gaW1hZ2U7CiAgICBjb25zdCBkaWN0ID0gaW1hZ2UuZGljdDsKICAgIGNvbnN0IGZpbHRlciA9IGRpY3QuZ2V0KCJGIiwgIkZpbHRlciIpOwogICAgbGV0IGZpbHRlck5hbWU7CiAgICBpZiAoZmlsdGVyIGluc3RhbmNlb2YgTmFtZSkgewogICAgICBmaWx0ZXJOYW1lID0gZmlsdGVyLm5hbWU7CiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyKSkgewogICAgICBjb25zdCBmaWx0ZXJaZXJvID0geHJlZi5mZXRjaElmUmVmKGZpbHRlclswXSk7CiAgICAgIGlmIChmaWx0ZXJaZXJvIGluc3RhbmNlb2YgTmFtZSkgewogICAgICAgIGZpbHRlck5hbWUgPSBmaWx0ZXJaZXJvLm5hbWU7CiAgICAgIH0KICAgIH0KICAgIHN3aXRjaCAoZmlsdGVyTmFtZSkgewogICAgICBjYXNlICJKUFhEZWNvZGUiOgogICAgICAgICh7CiAgICAgICAgICB3aWR0aDogaW1hZ2Uud2lkdGgsCiAgICAgICAgICBoZWlnaHQ6IGltYWdlLmhlaWdodCwKICAgICAgICAgIGNvbXBvbmVudHNDb3VudDogaW1hZ2UubnVtQ29tcHMsCiAgICAgICAgICBiaXRzUGVyQ29tcG9uZW50OiBpbWFnZS5iaXRzUGVyQ29tcG9uZW50CiAgICAgICAgfSA9IEpweEltYWdlLnBhcnNlSW1hZ2VQcm9wZXJ0aWVzKGltYWdlLnN0cmVhbSkpOwogICAgICAgIGltYWdlLnN0cmVhbS5yZXNldCgpOwogICAgICAgIHRoaXMuanB4RGVjb2Rlck9wdGlvbnMgPSB7CiAgICAgICAgICBudW1Db21wb25lbnRzOiAwLAogICAgICAgICAgaXNJbmRleGVkQ29sb3JtYXA6IGZhbHNlLAogICAgICAgICAgc21hc2tJbkRhdGE6IGRpY3QuaGFzKCJTTWFza0luRGF0YSIpCiAgICAgICAgfTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiSkJJRzJEZWNvZGUiOgogICAgICAgIGltYWdlLmJpdHNQZXJDb21wb25lbnQgPSAxOwogICAgICAgIGltYWdlLm51bUNvbXBzID0gMTsKICAgICAgICBicmVhazsKICAgIH0KICAgIGxldCB3aWR0aCA9IGRpY3QuZ2V0KCJXIiwgIldpZHRoIik7CiAgICBsZXQgaGVpZ2h0ID0gZGljdC5nZXQoIkgiLCAiSGVpZ2h0Iik7CiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihpbWFnZS53aWR0aCkgJiYgaW1hZ2Uud2lkdGggPiAwICYmIE51bWJlci5pc0ludGVnZXIoaW1hZ2UuaGVpZ2h0KSAmJiBpbWFnZS5oZWlnaHQgPiAwICYmIChpbWFnZS53aWR0aCAhPT0gd2lkdGggfHwgaW1hZ2UuaGVpZ2h0ICE9PSBoZWlnaHQpKSB7CiAgICAgIHdhcm4oIlBERkltYWdlIC0gdXNpbmcgdGhlIFdpZHRoL0hlaWdodCBvZiB0aGUgaW1hZ2UgZGF0YSwgIiArICJyYXRoZXIgdGhhbiB0aGUgaW1hZ2UgZGljdGlvbmFyeS4iKTsKICAgICAgd2lkdGggPSBpbWFnZS53aWR0aDsKICAgICAgaGVpZ2h0ID0gaW1hZ2UuaGVpZ2h0OwogICAgfSBlbHNlIHsKICAgICAgY29uc3QgdmFsaWRXaWR0aCA9IHR5cGVvZiB3aWR0aCA9PT0gIm51bWJlciIgJiYgd2lkdGggPiAwLAogICAgICAgIHZhbGlkSGVpZ2h0ID0gdHlwZW9mIGhlaWdodCA9PT0gIm51bWJlciIgJiYgaGVpZ2h0ID4gMDsKICAgICAgaWYgKCF2YWxpZFdpZHRoIHx8ICF2YWxpZEhlaWdodCkgewogICAgICAgIGlmICghaW1hZ2UuZmFsbGJhY2tEaW1zKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEludmFsaWQgaW1hZ2Ugd2lkdGg6ICR7d2lkdGh9IG9yIGhlaWdodDogJHtoZWlnaHR9YCk7CiAgICAgICAgfQogICAgICAgIHdhcm4oIlBERkltYWdlIC0gdXNpbmcgdGhlIFdpZHRoL0hlaWdodCBvZiB0aGUgcGFyZW50IGltYWdlLCBmb3IgU01hc2svTWFzayBkYXRhLiIpOwogICAgICAgIGlmICghdmFsaWRXaWR0aCkgewogICAgICAgICAgd2lkdGggPSBpbWFnZS5mYWxsYmFja0RpbXMud2lkdGg7CiAgICAgICAgfQogICAgICAgIGlmICghdmFsaWRIZWlnaHQpIHsKICAgICAgICAgIGhlaWdodCA9IGltYWdlLmZhbGxiYWNrRGltcy5oZWlnaHQ7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICB0aGlzLndpZHRoID0gd2lkdGg7CiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDsKICAgIHRoaXMuaW50ZXJwb2xhdGUgPSBkaWN0LmdldCgiSSIsICJJbnRlcnBvbGF0ZSIpOwogICAgdGhpcy5pbWFnZU1hc2sgPSBkaWN0LmdldCgiSU0iLCAiSW1hZ2VNYXNrIikgfHwgZmFsc2U7CiAgICB0aGlzLm1hdHRlID0gZGljdC5nZXQoIk1hdHRlIikgfHwgZmFsc2U7CiAgICBsZXQgYml0c1BlckNvbXBvbmVudCA9IGltYWdlLmJpdHNQZXJDb21wb25lbnQ7CiAgICBpZiAoIWJpdHNQZXJDb21wb25lbnQpIHsKICAgICAgYml0c1BlckNvbXBvbmVudCA9IGRpY3QuZ2V0KCJCUEMiLCAiQml0c1BlckNvbXBvbmVudCIpOwogICAgICBpZiAoIWJpdHNQZXJDb21wb25lbnQpIHsKICAgICAgICBpZiAodGhpcy5pbWFnZU1hc2spIHsKICAgICAgICAgIGJpdHNQZXJDb21wb25lbnQgPSAxOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEJpdHMgcGVyIGNvbXBvbmVudCBtaXNzaW5nIGluIGltYWdlOiAke3RoaXMuaW1hZ2VNYXNrfWApOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgdGhpcy5icGMgPSBiaXRzUGVyQ29tcG9uZW50OwogICAgaWYgKCF0aGlzLmltYWdlTWFzaykgewogICAgICBsZXQgY29sb3JTcGFjZSA9IGRpY3QuZ2V0UmF3KCJDUyIpIHx8IGRpY3QuZ2V0UmF3KCJDb2xvclNwYWNlIik7CiAgICAgIGNvbnN0IGhhc0NvbG9yU3BhY2UgPSAhIWNvbG9yU3BhY2U7CiAgICAgIGlmICghaGFzQ29sb3JTcGFjZSkgewogICAgICAgIGlmICh0aGlzLmpweERlY29kZXJPcHRpb25zKSB7CiAgICAgICAgICBjb2xvclNwYWNlID0gTmFtZS5nZXQoIkRldmljZVJHQkEiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc3dpdGNoIChpbWFnZS5udW1Db21wcykgewogICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgY29sb3JTcGFjZSA9IE5hbWUuZ2V0KCJEZXZpY2VHcmF5Iik7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICBjb2xvclNwYWNlID0gTmFtZS5nZXQoIkRldmljZVJHQiIpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgY29sb3JTcGFjZSA9IE5hbWUuZ2V0KCJEZXZpY2VDTVlLIik7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbWFnZXMgd2l0aCAke2ltYWdlLm51bUNvbXBzfSBjb2xvciBjb21wb25lbnRzIG5vdCBzdXBwb3J0ZWQuYCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHRoaXMuanB4RGVjb2Rlck9wdGlvbnM/LnNtYXNrSW5EYXRhKSB7CiAgICAgICAgY29sb3JTcGFjZSA9IE5hbWUuZ2V0KCJEZXZpY2VSR0JBIik7CiAgICAgIH0KICAgICAgdGhpcy5jb2xvclNwYWNlID0gQ29sb3JTcGFjZVV0aWxzLnBhcnNlKHsKICAgICAgICBjczogY29sb3JTcGFjZSwKICAgICAgICB4cmVmLAogICAgICAgIHJlc291cmNlczogaXNJbmxpbmUgPyByZXMgOiBudWxsLAogICAgICAgIHBkZkZ1bmN0aW9uRmFjdG9yeSwKICAgICAgICBnbG9iYWxDb2xvclNwYWNlQ2FjaGUsCiAgICAgICAgbG9jYWxDb2xvclNwYWNlQ2FjaGUKICAgICAgfSk7CiAgICAgIHRoaXMubnVtQ29tcHMgPSB0aGlzLmNvbG9yU3BhY2UubnVtQ29tcHM7CiAgICAgIGlmICh0aGlzLmpweERlY29kZXJPcHRpb25zKSB7CiAgICAgICAgdGhpcy5qcHhEZWNvZGVyT3B0aW9ucy5udW1Db21wb25lbnRzID0gaGFzQ29sb3JTcGFjZSA/IHRoaXMubnVtQ29tcHMgOiAwOwogICAgICAgIHRoaXMuanB4RGVjb2Rlck9wdGlvbnMuaXNJbmRleGVkQ29sb3JtYXAgPSB0aGlzLmNvbG9yU3BhY2UubmFtZSA9PT0gIkluZGV4ZWQiOwogICAgICB9CiAgICB9CiAgICB0aGlzLmRlY29kZSA9IGRpY3QuZ2V0QXJyYXkoIkQiLCAiRGVjb2RlIik7CiAgICB0aGlzLm5lZWRzRGVjb2RlID0gZmFsc2U7CiAgICBpZiAodGhpcy5kZWNvZGUgJiYgKHRoaXMuY29sb3JTcGFjZSAmJiAhdGhpcy5jb2xvclNwYWNlLmlzRGVmYXVsdERlY29kZSh0aGlzLmRlY29kZSwgYml0c1BlckNvbXBvbmVudCkgfHwgaXNNYXNrICYmICFDb2xvclNwYWNlLmlzRGVmYXVsdERlY29kZSh0aGlzLmRlY29kZSwgMSkpKSB7CiAgICAgIHRoaXMubmVlZHNEZWNvZGUgPSB0cnVlOwogICAgICBjb25zdCBtYXggPSAoMSA8PCBiaXRzUGVyQ29tcG9uZW50KSAtIDE7CiAgICAgIHRoaXMuZGVjb2RlQ29lZmZpY2llbnRzID0gW107CiAgICAgIHRoaXMuZGVjb2RlQWRkZW5kcyA9IFtdOwogICAgICBjb25zdCBpc0luZGV4ZWQgPSB0aGlzLmNvbG9yU3BhY2U/Lm5hbWUgPT09ICJJbmRleGVkIjsKICAgICAgZm9yIChsZXQgaSA9IDAsIGogPSAwOyBpIDwgdGhpcy5kZWNvZGUubGVuZ3RoOyBpICs9IDIsICsraikgewogICAgICAgIGNvbnN0IGRtaW4gPSB0aGlzLmRlY29kZVtpXTsKICAgICAgICBjb25zdCBkbWF4ID0gdGhpcy5kZWNvZGVbaSArIDFdOwogICAgICAgIHRoaXMuZGVjb2RlQ29lZmZpY2llbnRzW2pdID0gaXNJbmRleGVkID8gKGRtYXggLSBkbWluKSAvIG1heCA6IGRtYXggLSBkbWluOwogICAgICAgIHRoaXMuZGVjb2RlQWRkZW5kc1tqXSA9IGlzSW5kZXhlZCA/IGRtaW4gOiBtYXggKiBkbWluOwogICAgICB9CiAgICB9CiAgICBpZiAoc21hc2spIHsKICAgICAgc21hc2suZmFsbGJhY2tEaW1zID8/PSB7CiAgICAgICAgd2lkdGgsCiAgICAgICAgaGVpZ2h0CiAgICAgIH07CiAgICAgIHRoaXMuc21hc2sgPSBuZXcgUERGSW1hZ2UoewogICAgICAgIHhyZWYsCiAgICAgICAgcmVzLAogICAgICAgIGltYWdlOiBzbWFzaywKICAgICAgICBpc0lubGluZSwKICAgICAgICBwZGZGdW5jdGlvbkZhY3RvcnksCiAgICAgICAgZ2xvYmFsQ29sb3JTcGFjZUNhY2hlLAogICAgICAgIGxvY2FsQ29sb3JTcGFjZUNhY2hlCiAgICAgIH0pOwogICAgfSBlbHNlIGlmIChtYXNrKSB7CiAgICAgIGlmIChtYXNrIGluc3RhbmNlb2YgQmFzZVN0cmVhbSkgewogICAgICAgIGNvbnN0IG1hc2tEaWN0ID0gbWFzay5kaWN0LAogICAgICAgICAgaW1hZ2VNYXNrID0gbWFza0RpY3QuZ2V0KCJJTSIsICJJbWFnZU1hc2siKTsKICAgICAgICBpZiAoIWltYWdlTWFzaykgewogICAgICAgICAgd2FybigiSWdub3JpbmcgL01hc2sgaW4gaW1hZ2Ugd2l0aG91dCAvSW1hZ2VNYXNrLiIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBtYXNrLmZhbGxiYWNrRGltcyA/Pz0gewogICAgICAgICAgICB3aWR0aCwKICAgICAgICAgICAgaGVpZ2h0CiAgICAgICAgICB9OwogICAgICAgICAgdGhpcy5tYXNrID0gbmV3IFBERkltYWdlKHsKICAgICAgICAgICAgeHJlZiwKICAgICAgICAgICAgcmVzLAogICAgICAgICAgICBpbWFnZTogbWFzaywKICAgICAgICAgICAgaXNJbmxpbmUsCiAgICAgICAgICAgIGlzTWFzazogdHJ1ZSwKICAgICAgICAgICAgcGRmRnVuY3Rpb25GYWN0b3J5LAogICAgICAgICAgICBnbG9iYWxDb2xvclNwYWNlQ2FjaGUsCiAgICAgICAgICAgIGxvY2FsQ29sb3JTcGFjZUNhY2hlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5tYXNrID0gbWFzazsKICAgICAgfQogICAgfQogIH0KICBzdGF0aWMgYXN5bmMgYnVpbGRJbWFnZSh7CiAgICB4cmVmLAogICAgcmVzLAogICAgaW1hZ2UsCiAgICBpc0lubGluZSA9IGZhbHNlLAogICAgcGRmRnVuY3Rpb25GYWN0b3J5LAogICAgZ2xvYmFsQ29sb3JTcGFjZUNhY2hlLAogICAgbG9jYWxDb2xvclNwYWNlQ2FjaGUKICB9KSB7CiAgICBjb25zdCBpbWFnZURhdGEgPSBpbWFnZTsKICAgIGxldCBzbWFza0RhdGEgPSBudWxsOwogICAgbGV0IG1hc2tEYXRhID0gbnVsbDsKICAgIGNvbnN0IHNtYXNrID0gaW1hZ2UuZGljdC5nZXQoIlNNYXNrIik7CiAgICBjb25zdCBtYXNrID0gaW1hZ2UuZGljdC5nZXQoIk1hc2siKTsKICAgIGlmIChzbWFzaykgewogICAgICBpZiAoc21hc2sgaW5zdGFuY2VvZiBCYXNlU3RyZWFtKSB7CiAgICAgICAgc21hc2tEYXRhID0gc21hc2s7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgd2FybigiVW5zdXBwb3J0ZWQgL1NNYXNrIGZvcm1hdC4iKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChtYXNrKSB7CiAgICAgIGlmIChtYXNrIGluc3RhbmNlb2YgQmFzZVN0cmVhbSB8fCBBcnJheS5pc0FycmF5KG1hc2spKSB7CiAgICAgICAgbWFza0RhdGEgPSBtYXNrOwogICAgICB9IGVsc2UgewogICAgICAgIHdhcm4oIlVuc3VwcG9ydGVkIC9NYXNrIGZvcm1hdC4iKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBQREZJbWFnZSh7CiAgICAgIHhyZWYsCiAgICAgIHJlcywKICAgICAgaW1hZ2U6IGltYWdlRGF0YSwKICAgICAgaXNJbmxpbmUsCiAgICAgIHNtYXNrOiBzbWFza0RhdGEsCiAgICAgIG1hc2s6IG1hc2tEYXRhLAogICAgICBwZGZGdW5jdGlvbkZhY3RvcnksCiAgICAgIGdsb2JhbENvbG9yU3BhY2VDYWNoZSwKICAgICAgbG9jYWxDb2xvclNwYWNlQ2FjaGUKICAgIH0pOwogIH0KICBzdGF0aWMgY3JlYXRlUmF3TWFzayh7CiAgICBpbWdBcnJheSwKICAgIHdpZHRoLAogICAgaGVpZ2h0LAogICAgaW1hZ2VJc0Zyb21EZWNvZGVTdHJlYW0sCiAgICBpbnZlcnNlRGVjb2RlLAogICAgaW50ZXJwb2xhdGUKICB9KSB7CiAgICBjb25zdCBjb21wdXRlZExlbmd0aCA9ICh3aWR0aCArIDcgPj4gMykgKiBoZWlnaHQ7CiAgICBjb25zdCBhY3R1YWxMZW5ndGggPSBpbWdBcnJheS5ieXRlTGVuZ3RoOwogICAgY29uc3QgaGF2ZUZ1bGxEYXRhID0gY29tcHV0ZWRMZW5ndGggPT09IGFjdHVhbExlbmd0aDsKICAgIGxldCBkYXRhLCBpOwogICAgaWYgKGltYWdlSXNGcm9tRGVjb2RlU3RyZWFtICYmICghaW52ZXJzZURlY29kZSB8fCBoYXZlRnVsbERhdGEpKSB7CiAgICAgIGRhdGEgPSBpbWdBcnJheTsKICAgIH0gZWxzZSBpZiAoIWludmVyc2VEZWNvZGUpIHsKICAgICAgZGF0YSA9IG5ldyBVaW50OEFycmF5KGltZ0FycmF5KTsKICAgIH0gZWxzZSB7CiAgICAgIGRhdGEgPSBuZXcgVWludDhBcnJheShjb21wdXRlZExlbmd0aCk7CiAgICAgIGRhdGEuc2V0KGltZ0FycmF5KTsKICAgICAgZGF0YS5maWxsKDB4ZmYsIGFjdHVhbExlbmd0aCk7CiAgICB9CiAgICBpZiAoaW52ZXJzZURlY29kZSkgewogICAgICBmb3IgKGkgPSAwOyBpIDwgYWN0dWFsTGVuZ3RoOyBpKyspIHsKICAgICAgICBkYXRhW2ldIF49IDB4ZmY7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB7CiAgICAgIGRhdGEsCiAgICAgIHdpZHRoLAogICAgICBoZWlnaHQsCiAgICAgIGludGVycG9sYXRlCiAgICB9OwogIH0KICBzdGF0aWMgYXN5bmMgY3JlYXRlTWFzayh7CiAgICBpbWdBcnJheSwKICAgIHdpZHRoLAogICAgaGVpZ2h0LAogICAgaW1hZ2VJc0Zyb21EZWNvZGVTdHJlYW0sCiAgICBpbnZlcnNlRGVjb2RlLAogICAgaW50ZXJwb2xhdGUsCiAgICBpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCA9IGZhbHNlCiAgfSkgewogICAgY29uc3QgaXNTaW5nbGVPcGFxdWVQaXhlbCA9IHdpZHRoID09PSAxICYmIGhlaWdodCA9PT0gMSAmJiBpbnZlcnNlRGVjb2RlID09PSAoaW1nQXJyYXkubGVuZ3RoID09PSAwIHx8ICEhKGltZ0FycmF5WzBdICYgMTI4KSk7CiAgICBpZiAoaXNTaW5nbGVPcGFxdWVQaXhlbCkgewogICAgICByZXR1cm4gewogICAgICAgIGlzU2luZ2xlT3BhcXVlUGl4ZWwKICAgICAgfTsKICAgIH0KICAgIGlmIChpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCkgewogICAgICBpZiAoSW1hZ2VSZXNpemVyLm5lZWRzVG9CZVJlc2l6ZWQod2lkdGgsIGhlaWdodCkpIHsKICAgICAgICBjb25zdCBkYXRhID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHdpZHRoICogaGVpZ2h0ICogNCk7CiAgICAgICAgY29udmVydEJsYWNrQW5kV2hpdGVUb1JHQkEoewogICAgICAgICAgc3JjOiBpbWdBcnJheSwKICAgICAgICAgIGRlc3Q6IGRhdGEsCiAgICAgICAgICB3aWR0aCwKICAgICAgICAgIGhlaWdodCwKICAgICAgICAgIG5vbkJsYWNrQ29sb3I6IDAsCiAgICAgICAgICBpbnZlcnNlRGVjb2RlCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIEltYWdlUmVzaXplci5jcmVhdGVJbWFnZSh7CiAgICAgICAgICBraW5kOiBJbWFnZUtpbmQuUkdCQV8zMkJQUCwKICAgICAgICAgIGRhdGEsCiAgICAgICAgICB3aWR0aCwKICAgICAgICAgIGhlaWdodCwKICAgICAgICAgIGludGVycG9sYXRlCiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgY29uc3QgY2FudmFzID0gbmV3IE9mZnNjcmVlbkNhbnZhcyh3aWR0aCwgaGVpZ2h0KTsKICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7CiAgICAgIGNvbnN0IGltZ0RhdGEgPSBjdHguY3JlYXRlSW1hZ2VEYXRhKHdpZHRoLCBoZWlnaHQpOwogICAgICBjb252ZXJ0QmxhY2tBbmRXaGl0ZVRvUkdCQSh7CiAgICAgICAgc3JjOiBpbWdBcnJheSwKICAgICAgICBkZXN0OiBpbWdEYXRhLmRhdGEsCiAgICAgICAgd2lkdGgsCiAgICAgICAgaGVpZ2h0LAogICAgICAgIG5vbkJsYWNrQ29sb3I6IDAsCiAgICAgICAgaW52ZXJzZURlY29kZQogICAgICB9KTsKICAgICAgY3R4LnB1dEltYWdlRGF0YShpbWdEYXRhLCAwLCAwKTsKICAgICAgY29uc3QgYml0bWFwID0gY2FudmFzLnRyYW5zZmVyVG9JbWFnZUJpdG1hcCgpOwogICAgICByZXR1cm4gewogICAgICAgIGRhdGE6IG51bGwsCiAgICAgICAgd2lkdGgsCiAgICAgICAgaGVpZ2h0LAogICAgICAgIGludGVycG9sYXRlLAogICAgICAgIGJpdG1hcAogICAgICB9OwogICAgfQogICAgcmV0dXJuIHRoaXMuY3JlYXRlUmF3TWFzayh7CiAgICAgIGltZ0FycmF5LAogICAgICB3aWR0aCwKICAgICAgaGVpZ2h0LAogICAgICBpbnZlcnNlRGVjb2RlLAogICAgICBpbWFnZUlzRnJvbURlY29kZVN0cmVhbSwKICAgICAgaW50ZXJwb2xhdGUKICAgIH0pOwogIH0KICBnZXQgZHJhd1dpZHRoKCkgewogICAgcmV0dXJuIE1hdGgubWF4KHRoaXMud2lkdGgsIHRoaXMuc21hc2s/LndpZHRoIHx8IDAsIHRoaXMubWFzaz8ud2lkdGggfHwgMCk7CiAgfQogIGdldCBkcmF3SGVpZ2h0KCkgewogICAgcmV0dXJuIE1hdGgubWF4KHRoaXMuaGVpZ2h0LCB0aGlzLnNtYXNrPy5oZWlnaHQgfHwgMCwgdGhpcy5tYXNrPy5oZWlnaHQgfHwgMCk7CiAgfQogIGRlY29kZUJ1ZmZlcihidWZmZXIpIHsKICAgIGNvbnN0IGJwYyA9IHRoaXMuYnBjOwogICAgY29uc3QgbnVtQ29tcHMgPSB0aGlzLm51bUNvbXBzOwogICAgY29uc3QgZGVjb2RlQWRkZW5kcyA9IHRoaXMuZGVjb2RlQWRkZW5kczsKICAgIGNvbnN0IGRlY29kZUNvZWZmaWNpZW50cyA9IHRoaXMuZGVjb2RlQ29lZmZpY2llbnRzOwogICAgY29uc3QgbWF4ID0gKDEgPDwgYnBjKSAtIDE7CiAgICBsZXQgaSwgaWk7CiAgICBpZiAoYnBjID09PSAxKSB7CiAgICAgIGZvciAoaSA9IDAsIGlpID0gYnVmZmVyLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgICBidWZmZXJbaV0gPSArIWJ1ZmZlcltpXTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9CiAgICBsZXQgaW5kZXggPSAwOwogICAgZm9yIChpID0gMCwgaWkgPSB0aGlzLndpZHRoICogdGhpcy5oZWlnaHQ7IGkgPCBpaTsgaSsrKSB7CiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtQ29tcHM7IGorKykgewogICAgICAgIGJ1ZmZlcltpbmRleF0gPSBNYXRoQ2xhbXAoZGVjb2RlQWRkZW5kc1tqXSArIGJ1ZmZlcltpbmRleF0gKiBkZWNvZGVDb2VmZmljaWVudHNbal0sIDAsIG1heCk7CiAgICAgICAgaW5kZXgrKzsKICAgICAgfQogICAgfQogIH0KICBnZXRDb21wb25lbnRzKGJ1ZmZlcikgewogICAgY29uc3QgYnBjID0gdGhpcy5icGM7CiAgICBpZiAoYnBjID09PSA4KSB7CiAgICAgIHJldHVybiBidWZmZXI7CiAgICB9CiAgICBjb25zdCB3aWR0aCA9IHRoaXMud2lkdGg7CiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmhlaWdodDsKICAgIGNvbnN0IG51bUNvbXBzID0gdGhpcy5udW1Db21wczsKICAgIGNvbnN0IGxlbmd0aCA9IHdpZHRoICogaGVpZ2h0ICogbnVtQ29tcHM7CiAgICBsZXQgYnVmZmVyUG9zID0gMDsKICAgIGxldCBvdXRwdXQ7CiAgICBpZiAoYnBjIDw9IDgpIHsKICAgICAgb3V0cHV0ID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKTsKICAgIH0gZWxzZSBpZiAoYnBjIDw9IDE2KSB7CiAgICAgIG91dHB1dCA9IG5ldyBVaW50MTZBcnJheShsZW5ndGgpOwogICAgfSBlbHNlIHsKICAgICAgb3V0cHV0ID0gbmV3IFVpbnQzMkFycmF5KGxlbmd0aCk7CiAgICB9CiAgICBjb25zdCByb3dDb21wcyA9IHdpZHRoICogbnVtQ29tcHM7CiAgICBjb25zdCBtYXggPSAoMSA8PCBicGMpIC0gMTsKICAgIGxldCBpID0gMCwKICAgICAgaWksCiAgICAgIGJ1ZjsKICAgIGlmIChicGMgPT09IDEpIHsKICAgICAgbGV0IG1hc2ssIGxvb3AxRW5kLCBsb29wMkVuZDsKICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBoZWlnaHQ7IGorKykgewogICAgICAgIGxvb3AxRW5kID0gaSArIChyb3dDb21wcyAmIH43KTsKICAgICAgICBsb29wMkVuZCA9IGkgKyByb3dDb21wczsKICAgICAgICB3aGlsZSAoaSA8IGxvb3AxRW5kKSB7CiAgICAgICAgICBidWYgPSBidWZmZXJbYnVmZmVyUG9zKytdOwogICAgICAgICAgb3V0cHV0W2ldID0gYnVmID4+IDcgJiAxOwogICAgICAgICAgb3V0cHV0W2kgKyAxXSA9IGJ1ZiA+PiA2ICYgMTsKICAgICAgICAgIG91dHB1dFtpICsgMl0gPSBidWYgPj4gNSAmIDE7CiAgICAgICAgICBvdXRwdXRbaSArIDNdID0gYnVmID4+IDQgJiAxOwogICAgICAgICAgb3V0cHV0W2kgKyA0XSA9IGJ1ZiA+PiAzICYgMTsKICAgICAgICAgIG91dHB1dFtpICsgNV0gPSBidWYgPj4gMiAmIDE7CiAgICAgICAgICBvdXRwdXRbaSArIDZdID0gYnVmID4+IDEgJiAxOwogICAgICAgICAgb3V0cHV0W2kgKyA3XSA9IGJ1ZiAmIDE7CiAgICAgICAgICBpICs9IDg7CiAgICAgICAgfQogICAgICAgIGlmIChpIDwgbG9vcDJFbmQpIHsKICAgICAgICAgIGJ1ZiA9IGJ1ZmZlcltidWZmZXJQb3MrK107CiAgICAgICAgICBtYXNrID0gMTI4OwogICAgICAgICAgd2hpbGUgKGkgPCBsb29wMkVuZCkgewogICAgICAgICAgICBvdXRwdXRbaSsrXSA9ICshIShidWYgJiBtYXNrKTsKICAgICAgICAgICAgbWFzayA+Pj0gMTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGxldCBiaXRzID0gMDsKICAgICAgYnVmID0gMDsKICAgICAgZm9yIChpID0gMCwgaWkgPSBsZW5ndGg7IGkgPCBpaTsgKytpKSB7CiAgICAgICAgaWYgKGkgJSByb3dDb21wcyA9PT0gMCkgewogICAgICAgICAgYnVmID0gMDsKICAgICAgICAgIGJpdHMgPSAwOwogICAgICAgIH0KICAgICAgICB3aGlsZSAoYml0cyA8IGJwYykgewogICAgICAgICAgYnVmID0gYnVmIDw8IDggfCBidWZmZXJbYnVmZmVyUG9zKytdOwogICAgICAgICAgYml0cyArPSA4OwogICAgICAgIH0KICAgICAgICBjb25zdCByZW1haW5pbmdCaXRzID0gYml0cyAtIGJwYzsKICAgICAgICBsZXQgdmFsdWUgPSBidWYgPj4gcmVtYWluaW5nQml0czsKICAgICAgICBpZiAodmFsdWUgPCAwKSB7CiAgICAgICAgICB2YWx1ZSA9IDA7CiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA+IG1heCkgewogICAgICAgICAgdmFsdWUgPSBtYXg7CiAgICAgICAgfQogICAgICAgIG91dHB1dFtpXSA9IHZhbHVlOwogICAgICAgIGJ1ZiAmPSAoMSA8PCByZW1haW5pbmdCaXRzKSAtIDE7CiAgICAgICAgYml0cyA9IHJlbWFpbmluZ0JpdHM7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBvdXRwdXQ7CiAgfQogIGFzeW5jIGZpbGxPcGFjaXR5KHJnYmFCdWYsIHdpZHRoLCBoZWlnaHQsIGFjdHVhbEhlaWdodCwgaW1hZ2UpIHsKICAgIGNvbnN0IHNtYXNrID0gdGhpcy5zbWFzazsKICAgIGNvbnN0IG1hc2sgPSB0aGlzLm1hc2s7CiAgICBsZXQgYWxwaGFCdWYsIHN3LCBzaCwgaSwgaWksIGo7CiAgICBpZiAoc21hc2spIHsKICAgICAgc3cgPSBzbWFzay53aWR0aDsKICAgICAgc2ggPSBzbWFzay5oZWlnaHQ7CiAgICAgIGFscGhhQnVmID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHN3ICogc2gpOwogICAgICBhd2FpdCBzbWFzay5maWxsR3JheUJ1ZmZlcihhbHBoYUJ1Zik7CiAgICAgIGlmIChzdyAhPT0gd2lkdGggfHwgc2ggIT09IGhlaWdodCkgewogICAgICAgIGFscGhhQnVmID0gcmVzaXplSW1hZ2VNYXNrKGFscGhhQnVmLCBzbWFzay5icGMsIHN3LCBzaCwgd2lkdGgsIGhlaWdodCk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAobWFzaykgewogICAgICBpZiAobWFzayBpbnN0YW5jZW9mIFBERkltYWdlKSB7CiAgICAgICAgc3cgPSBtYXNrLndpZHRoOwogICAgICAgIHNoID0gbWFzay5oZWlnaHQ7CiAgICAgICAgYWxwaGFCdWYgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkoc3cgKiBzaCk7CiAgICAgICAgbWFzay5udW1Db21wcyA9IDE7CiAgICAgICAgYXdhaXQgbWFzay5maWxsR3JheUJ1ZmZlcihhbHBoYUJ1Zik7CiAgICAgICAgZm9yIChpID0gMCwgaWkgPSBzdyAqIHNoOyBpIDwgaWk7ICsraSkgewogICAgICAgICAgYWxwaGFCdWZbaV0gPSAyNTUgLSBhbHBoYUJ1ZltpXTsKICAgICAgICB9CiAgICAgICAgaWYgKHN3ICE9PSB3aWR0aCB8fCBzaCAhPT0gaGVpZ2h0KSB7CiAgICAgICAgICBhbHBoYUJ1ZiA9IHJlc2l6ZUltYWdlTWFzayhhbHBoYUJ1ZiwgbWFzay5icGMsIHN3LCBzaCwgd2lkdGgsIGhlaWdodCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkobWFzaykpIHsKICAgICAgICBhbHBoYUJ1ZiA9IG5ldyBVaW50OENsYW1wZWRBcnJheSh3aWR0aCAqIGhlaWdodCk7CiAgICAgICAgY29uc3QgbnVtQ29tcHMgPSB0aGlzLm51bUNvbXBzOwogICAgICAgIGZvciAoaSA9IDAsIGlpID0gd2lkdGggKiBoZWlnaHQ7IGkgPCBpaTsgKytpKSB7CiAgICAgICAgICBsZXQgb3BhY2l0eSA9IDA7CiAgICAgICAgICBjb25zdCBpbWFnZU9mZnNldCA9IGkgKiBudW1Db21wczsKICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBudW1Db21wczsgKytqKSB7CiAgICAgICAgICAgIGNvbnN0IGNvbG9yID0gaW1hZ2VbaW1hZ2VPZmZzZXQgKyBqXTsKICAgICAgICAgICAgY29uc3QgbWFza09mZnNldCA9IGogKiAyOwogICAgICAgICAgICBpZiAoY29sb3IgPCBtYXNrW21hc2tPZmZzZXRdIHx8IGNvbG9yID4gbWFza1ttYXNrT2Zmc2V0ICsgMV0pIHsKICAgICAgICAgICAgICBvcGFjaXR5ID0gMjU1OwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBhbHBoYUJ1ZltpXSA9IG9wYWNpdHk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiVW5rbm93biBtYXNrIGZvcm1hdC4iKTsKICAgICAgfQogICAgfQogICAgaWYgKGFscGhhQnVmKSB7CiAgICAgIGZvciAoaSA9IDAsIGogPSAzLCBpaSA9IHdpZHRoICogYWN0dWFsSGVpZ2h0OyBpIDwgaWk7ICsraSwgaiArPSA0KSB7CiAgICAgICAgcmdiYUJ1ZltqXSA9IGFscGhhQnVmW2ldOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBmb3IgKGkgPSAwLCBqID0gMywgaWkgPSB3aWR0aCAqIGFjdHVhbEhlaWdodDsgaSA8IGlpOyArK2ksIGogKz0gNCkgewogICAgICAgIHJnYmFCdWZbal0gPSAyNTU7CiAgICAgIH0KICAgIH0KICB9CiAgdW5kb1ByZWJsZW5kKGJ1ZmZlciwgd2lkdGgsIGhlaWdodCkgewogICAgY29uc3QgbWF0dGUgPSB0aGlzLnNtYXNrPy5tYXR0ZTsKICAgIGlmICghbWF0dGUpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgbWF0dGVSZ2IgPSB0aGlzLmNvbG9yU3BhY2UuZ2V0UmdiKG1hdHRlLCAwKTsKICAgIGNvbnN0IG1hdHRlUiA9IG1hdHRlUmdiWzBdOwogICAgY29uc3QgbWF0dGVHID0gbWF0dGVSZ2JbMV07CiAgICBjb25zdCBtYXR0ZUIgPSBtYXR0ZVJnYlsyXTsKICAgIGNvbnN0IGxlbmd0aCA9IHdpZHRoICogaGVpZ2h0ICogNDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDQpIHsKICAgICAgY29uc3QgYWxwaGEgPSBidWZmZXJbaSArIDNdOwogICAgICBpZiAoYWxwaGEgPT09IDApIHsKICAgICAgICBidWZmZXJbaV0gPSAyNTU7CiAgICAgICAgYnVmZmVyW2kgKyAxXSA9IDI1NTsKICAgICAgICBidWZmZXJbaSArIDJdID0gMjU1OwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGNvbnN0IGsgPSAyNTUgLyBhbHBoYTsKICAgICAgYnVmZmVyW2ldID0gKGJ1ZmZlcltpXSAtIG1hdHRlUikgKiBrICsgbWF0dGVSOwogICAgICBidWZmZXJbaSArIDFdID0gKGJ1ZmZlcltpICsgMV0gLSBtYXR0ZUcpICogayArIG1hdHRlRzsKICAgICAgYnVmZmVyW2kgKyAyXSA9IChidWZmZXJbaSArIDJdIC0gbWF0dGVCKSAqIGsgKyBtYXR0ZUI7CiAgICB9CiAgfQogIGFzeW5jIGNyZWF0ZUltYWdlRGF0YShmb3JjZVJHQkEgPSBmYWxzZSwgaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQgPSBmYWxzZSkgewogICAgY29uc3QgZHJhd1dpZHRoID0gdGhpcy5kcmF3V2lkdGg7CiAgICBjb25zdCBkcmF3SGVpZ2h0ID0gdGhpcy5kcmF3SGVpZ2h0OwogICAgY29uc3QgaW1nRGF0YSA9IHsKICAgICAgd2lkdGg6IGRyYXdXaWR0aCwKICAgICAgaGVpZ2h0OiBkcmF3SGVpZ2h0LAogICAgICBpbnRlcnBvbGF0ZTogdGhpcy5pbnRlcnBvbGF0ZSwKICAgICAga2luZDogMCwKICAgICAgZGF0YTogbnVsbAogICAgfTsKICAgIGNvbnN0IG51bUNvbXBzID0gdGhpcy5udW1Db21wczsKICAgIGNvbnN0IG9yaWdpbmFsV2lkdGggPSB0aGlzLndpZHRoOwogICAgY29uc3Qgb3JpZ2luYWxIZWlnaHQgPSB0aGlzLmhlaWdodDsKICAgIGNvbnN0IGJwYyA9IHRoaXMuYnBjOwogICAgY29uc3Qgcm93Qnl0ZXMgPSBvcmlnaW5hbFdpZHRoICogbnVtQ29tcHMgKiBicGMgKyA3ID4+IDM7CiAgICBjb25zdCBtdXN0QmVSZXNpemVkID0gaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQgJiYgSW1hZ2VSZXNpemVyLm5lZWRzVG9CZVJlc2l6ZWQoZHJhd1dpZHRoLCBkcmF3SGVpZ2h0KTsKICAgIGlmICghdGhpcy5zbWFzayAmJiAhdGhpcy5tYXNrICYmIHRoaXMuY29sb3JTcGFjZS5uYW1lID09PSAiRGV2aWNlUkdCQSIpIHsKICAgICAgaW1nRGF0YS5raW5kID0gSW1hZ2VLaW5kLlJHQkFfMzJCUFA7CiAgICAgIGNvbnN0IGltZ0FycmF5ID0gaW1nRGF0YS5kYXRhID0gYXdhaXQgdGhpcy5nZXRJbWFnZUJ5dGVzKG9yaWdpbmFsSGVpZ2h0ICogb3JpZ2luYWxXaWR0aCAqIDQsIHt9KTsKICAgICAgaWYgKGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKSB7CiAgICAgICAgaWYgKCFtdXN0QmVSZXNpemVkKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVCaXRtYXAoSW1hZ2VLaW5kLlJHQkFfMzJCUFAsIGRyYXdXaWR0aCwgZHJhd0hlaWdodCwgaW1nQXJyYXkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gSW1hZ2VSZXNpemVyLmNyZWF0ZUltYWdlKGltZ0RhdGEsIGZhbHNlKTsKICAgICAgfQogICAgICByZXR1cm4gaW1nRGF0YTsKICAgIH0KICAgIGlmICghZm9yY2VSR0JBKSB7CiAgICAgIGxldCBraW5kOwogICAgICBpZiAodGhpcy5jb2xvclNwYWNlLm5hbWUgPT09ICJEZXZpY2VHcmF5IiAmJiBicGMgPT09IDEpIHsKICAgICAgICBraW5kID0gSW1hZ2VLaW5kLkdSQVlTQ0FMRV8xQlBQOwogICAgICB9IGVsc2UgaWYgKHRoaXMuY29sb3JTcGFjZS5uYW1lID09PSAiRGV2aWNlUkdCIiAmJiBicGMgPT09IDggJiYgIXRoaXMubmVlZHNEZWNvZGUpIHsKICAgICAgICBraW5kID0gSW1hZ2VLaW5kLlJHQl8yNEJQUDsKICAgICAgfQogICAgICBpZiAoa2luZCAmJiAhdGhpcy5zbWFzayAmJiAhdGhpcy5tYXNrICYmIGRyYXdXaWR0aCA9PT0gb3JpZ2luYWxXaWR0aCAmJiBkcmF3SGVpZ2h0ID09PSBvcmlnaW5hbEhlaWdodCkgewogICAgICAgIGNvbnN0IGltYWdlID0gYXdhaXQgdGhpcy4jZ2V0SW1hZ2Uob3JpZ2luYWxXaWR0aCwgb3JpZ2luYWxIZWlnaHQpOwogICAgICAgIGlmIChpbWFnZSkgewogICAgICAgICAgcmV0dXJuIGltYWdlOwogICAgICAgIH0KICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5nZXRJbWFnZUJ5dGVzKG9yaWdpbmFsSGVpZ2h0ICogcm93Qnl0ZXMsIHt9KTsKICAgICAgICBpZiAoaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQpIHsKICAgICAgICAgIGlmIChtdXN0QmVSZXNpemVkKSB7CiAgICAgICAgICAgIHJldHVybiBJbWFnZVJlc2l6ZXIuY3JlYXRlSW1hZ2UoewogICAgICAgICAgICAgIGRhdGEsCiAgICAgICAgICAgICAga2luZCwKICAgICAgICAgICAgICB3aWR0aDogZHJhd1dpZHRoLAogICAgICAgICAgICAgIGhlaWdodDogZHJhd0hlaWdodCwKICAgICAgICAgICAgICBpbnRlcnBvbGF0ZTogdGhpcy5pbnRlcnBvbGF0ZQogICAgICAgICAgICB9LCB0aGlzLm5lZWRzRGVjb2RlKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUJpdG1hcChraW5kLCBvcmlnaW5hbFdpZHRoLCBvcmlnaW5hbEhlaWdodCwgZGF0YSk7CiAgICAgICAgfQogICAgICAgIGltZ0RhdGEua2luZCA9IGtpbmQ7CiAgICAgICAgaW1nRGF0YS5kYXRhID0gZGF0YTsKICAgICAgICBpZiAodGhpcy5uZWVkc0RlY29kZSkgewogICAgICAgICAgYXNzZXJ0KGtpbmQgPT09IEltYWdlS2luZC5HUkFZU0NBTEVfMUJQUCwgIlBERkltYWdlLmNyZWF0ZUltYWdlRGF0YTogVGhlIGltYWdlIG11c3QgYmUgZ3JheXNjYWxlLiIpOwogICAgICAgICAgY29uc3QgYnVmZmVyID0gaW1nRGF0YS5kYXRhOwogICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gYnVmZmVyLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgICAgICAgYnVmZmVyW2ldIF49IDB4ZmY7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBpbWdEYXRhOwogICAgICB9CiAgICAgIGlmICh0aGlzLmltYWdlIGluc3RhbmNlb2YgSnBlZ1N0cmVhbSAmJiAhdGhpcy5zbWFzayAmJiAhdGhpcy5tYXNrICYmICF0aGlzLm5lZWRzRGVjb2RlKSB7CiAgICAgICAgbGV0IGltYWdlTGVuZ3RoID0gb3JpZ2luYWxIZWlnaHQgKiByb3dCeXRlczsKICAgICAgICBpZiAoaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQgJiYgIW11c3RCZVJlc2l6ZWQpIHsKICAgICAgICAgIGxldCBpc0hhbmRsZWQgPSBmYWxzZTsKICAgICAgICAgIHN3aXRjaCAodGhpcy5jb2xvclNwYWNlLm5hbWUpIHsKICAgICAgICAgICAgY2FzZSAiRGV2aWNlR3JheSI6CiAgICAgICAgICAgICAgaW1hZ2VMZW5ndGggKj0gNDsKICAgICAgICAgICAgICBpc0hhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJEZXZpY2VSR0IiOgogICAgICAgICAgICAgIGltYWdlTGVuZ3RoID0gaW1hZ2VMZW5ndGggLyAzICogNDsKICAgICAgICAgICAgICBpc0hhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJEZXZpY2VDTVlLIjoKICAgICAgICAgICAgICBpc0hhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGlzSGFuZGxlZCkgewogICAgICAgICAgICBjb25zdCBpbWFnZSA9IGF3YWl0IHRoaXMuI2dldEltYWdlKGRyYXdXaWR0aCwgZHJhd0hlaWdodCk7CiAgICAgICAgICAgIGlmIChpbWFnZSkgewogICAgICAgICAgICAgIHJldHVybiBpbWFnZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCByZ2JhID0gYXdhaXQgdGhpcy5nZXRJbWFnZUJ5dGVzKGltYWdlTGVuZ3RoLCB7CiAgICAgICAgICAgICAgZHJhd1dpZHRoLAogICAgICAgICAgICAgIGRyYXdIZWlnaHQsCiAgICAgICAgICAgICAgZm9yY2VSR0JBOiB0cnVlCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVCaXRtYXAoSW1hZ2VLaW5kLlJHQkFfMzJCUFAsIGRyYXdXaWR0aCwgZHJhd0hlaWdodCwgcmdiYSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHN3aXRjaCAodGhpcy5jb2xvclNwYWNlLm5hbWUpIHsKICAgICAgICAgICAgY2FzZSAiRGV2aWNlR3JheSI6CiAgICAgICAgICAgICAgaW1hZ2VMZW5ndGggKj0gMzsKICAgICAgICAgICAgY2FzZSAiRGV2aWNlUkdCIjoKICAgICAgICAgICAgY2FzZSAiRGV2aWNlQ01ZSyI6CiAgICAgICAgICAgICAgaW1nRGF0YS5raW5kID0gSW1hZ2VLaW5kLlJHQl8yNEJQUDsKICAgICAgICAgICAgICBpbWdEYXRhLmRhdGEgPSBhd2FpdCB0aGlzLmdldEltYWdlQnl0ZXMoaW1hZ2VMZW5ndGgsIHsKICAgICAgICAgICAgICAgIGRyYXdXaWR0aCwKICAgICAgICAgICAgICAgIGRyYXdIZWlnaHQsCiAgICAgICAgICAgICAgICBmb3JjZVJHQjogdHJ1ZQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIGlmIChtdXN0QmVSZXNpemVkKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gSW1hZ2VSZXNpemVyLmNyZWF0ZUltYWdlKGltZ0RhdGEpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gaW1nRGF0YTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGNvbnN0IGltZ0FycmF5ID0gYXdhaXQgdGhpcy5nZXRJbWFnZUJ5dGVzKG9yaWdpbmFsSGVpZ2h0ICogcm93Qnl0ZXMsIHsKICAgICAgaW50ZXJuYWw6IHRydWUKICAgIH0pOwogICAgY29uc3QgYWN0dWFsSGVpZ2h0ID0gMCB8IGltZ0FycmF5Lmxlbmd0aCAvIHJvd0J5dGVzICogZHJhd0hlaWdodCAvIG9yaWdpbmFsSGVpZ2h0OwogICAgY29uc3QgY29tcHMgPSB0aGlzLmdldENvbXBvbmVudHMoaW1nQXJyYXkpOwogICAgbGV0IGFscGhhMDEsIG1heWJlVW5kb1ByZWJsZW5kOwogICAgbGV0IGNhbnZhcywgY3R4LCBjYW52YXNJbWdEYXRhLCBkYXRhOwogICAgaWYgKGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkICYmICFtdXN0QmVSZXNpemVkKSB7CiAgICAgIGNhbnZhcyA9IG5ldyBPZmZzY3JlZW5DYW52YXMoZHJhd1dpZHRoLCBkcmF3SGVpZ2h0KTsKICAgICAgY3R4ID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7CiAgICAgIGNhbnZhc0ltZ0RhdGEgPSBjdHguY3JlYXRlSW1hZ2VEYXRhKGRyYXdXaWR0aCwgZHJhd0hlaWdodCk7CiAgICAgIGRhdGEgPSBjYW52YXNJbWdEYXRhLmRhdGE7CiAgICB9CiAgICBpbWdEYXRhLmtpbmQgPSBJbWFnZUtpbmQuUkdCQV8zMkJQUDsKICAgIGlmICghZm9yY2VSR0JBICYmICF0aGlzLnNtYXNrICYmICF0aGlzLm1hc2spIHsKICAgICAgaWYgKCFpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCB8fCBtdXN0QmVSZXNpemVkKSB7CiAgICAgICAgaW1nRGF0YS5raW5kID0gSW1hZ2VLaW5kLlJHQl8yNEJQUDsKICAgICAgICBkYXRhID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGRyYXdXaWR0aCAqIGRyYXdIZWlnaHQgKiAzKTsKICAgICAgICBhbHBoYTAxID0gMDsKICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zdCBhcnIgPSBuZXcgVWludDMyQXJyYXkoZGF0YS5idWZmZXIpOwogICAgICAgIGFyci5maWxsKEZlYXR1cmVUZXN0LmlzTGl0dGxlRW5kaWFuID8gMHhmZjAwMDAwMCA6IDB4MDAwMDAwZmYpOwogICAgICAgIGFscGhhMDEgPSAxOwogICAgICB9CiAgICAgIG1heWJlVW5kb1ByZWJsZW5kID0gZmFsc2U7CiAgICB9IGVsc2UgewogICAgICBpZiAoIWlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkIHx8IG11c3RCZVJlc2l6ZWQpIHsKICAgICAgICBkYXRhID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGRyYXdXaWR0aCAqIGRyYXdIZWlnaHQgKiA0KTsKICAgICAgfQogICAgICBhbHBoYTAxID0gMTsKICAgICAgbWF5YmVVbmRvUHJlYmxlbmQgPSB0cnVlOwogICAgICBhd2FpdCB0aGlzLmZpbGxPcGFjaXR5KGRhdGEsIGRyYXdXaWR0aCwgZHJhd0hlaWdodCwgYWN0dWFsSGVpZ2h0LCBjb21wcyk7CiAgICB9CiAgICBpZiAodGhpcy5uZWVkc0RlY29kZSkgewogICAgICB0aGlzLmRlY29kZUJ1ZmZlcihjb21wcyk7CiAgICB9CiAgICB0aGlzLmNvbG9yU3BhY2UuZmlsbFJnYihkYXRhLCBvcmlnaW5hbFdpZHRoLCBvcmlnaW5hbEhlaWdodCwgZHJhd1dpZHRoLCBkcmF3SGVpZ2h0LCBhY3R1YWxIZWlnaHQsIGJwYywgY29tcHMsIGFscGhhMDEpOwogICAgaWYgKG1heWJlVW5kb1ByZWJsZW5kKSB7CiAgICAgIHRoaXMudW5kb1ByZWJsZW5kKGRhdGEsIGRyYXdXaWR0aCwgYWN0dWFsSGVpZ2h0KTsKICAgIH0KICAgIGlmIChpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCAmJiAhbXVzdEJlUmVzaXplZCkgewogICAgICBjdHgucHV0SW1hZ2VEYXRhKGNhbnZhc0ltZ0RhdGEsIDAsIDApOwogICAgICBjb25zdCBiaXRtYXAgPSBjYW52YXMudHJhbnNmZXJUb0ltYWdlQml0bWFwKCk7CiAgICAgIHJldHVybiB7CiAgICAgICAgZGF0YTogbnVsbCwKICAgICAgICB3aWR0aDogZHJhd1dpZHRoLAogICAgICAgIGhlaWdodDogZHJhd0hlaWdodCwKICAgICAgICBiaXRtYXAsCiAgICAgICAgaW50ZXJwb2xhdGU6IHRoaXMuaW50ZXJwb2xhdGUKICAgICAgfTsKICAgIH0KICAgIGltZ0RhdGEuZGF0YSA9IGRhdGE7CiAgICBpZiAobXVzdEJlUmVzaXplZCkgewogICAgICByZXR1cm4gSW1hZ2VSZXNpemVyLmNyZWF0ZUltYWdlKGltZ0RhdGEpOwogICAgfQogICAgcmV0dXJuIGltZ0RhdGE7CiAgfQogIGFzeW5jIGZpbGxHcmF5QnVmZmVyKGJ1ZmZlcikgewogICAgY29uc3QgbnVtQ29tcHMgPSB0aGlzLm51bUNvbXBzOwogICAgaWYgKG51bUNvbXBzICE9PSAxKSB7CiAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcihgUmVhZGluZyBncmF5IHNjYWxlIGZyb20gYSBjb2xvciBpbWFnZTogJHtudW1Db21wc31gKTsKICAgIH0KICAgIGNvbnN0IHdpZHRoID0gdGhpcy53aWR0aDsKICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuaGVpZ2h0OwogICAgY29uc3QgYnBjID0gdGhpcy5icGM7CiAgICBjb25zdCByb3dCeXRlcyA9IHdpZHRoICogbnVtQ29tcHMgKiBicGMgKyA3ID4+IDM7CiAgICBjb25zdCBpbWdBcnJheSA9IGF3YWl0IHRoaXMuZ2V0SW1hZ2VCeXRlcyhoZWlnaHQgKiByb3dCeXRlcywgewogICAgICBpbnRlcm5hbDogdHJ1ZQogICAgfSk7CiAgICBjb25zdCBjb21wcyA9IHRoaXMuZ2V0Q29tcG9uZW50cyhpbWdBcnJheSk7CiAgICBsZXQgaSwgbGVuZ3RoOwogICAgaWYgKGJwYyA9PT0gMSkgewogICAgICBsZW5ndGggPSB3aWR0aCAqIGhlaWdodDsKICAgICAgaWYgKHRoaXMubmVlZHNEZWNvZGUpIHsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgIGJ1ZmZlcltpXSA9IGNvbXBzW2ldIC0gMSAmIDI1NTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICBidWZmZXJbaV0gPSAtY29tcHNbaV0gJiAyNTU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICh0aGlzLm5lZWRzRGVjb2RlKSB7CiAgICAgIHRoaXMuZGVjb2RlQnVmZmVyKGNvbXBzKTsKICAgIH0KICAgIGxlbmd0aCA9IHdpZHRoICogaGVpZ2h0OwogICAgY29uc3Qgc2NhbGUgPSAyNTUgLyAoKDEgPDwgYnBjKSAtIDEpOwogICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgIGJ1ZmZlcltpXSA9IHNjYWxlICogY29tcHNbaV07CiAgICB9CiAgfQogIGNyZWF0ZUJpdG1hcChraW5kLCB3aWR0aCwgaGVpZ2h0LCBzcmMpIHsKICAgIGNvbnN0IGNhbnZhcyA9IG5ldyBPZmZzY3JlZW5DYW52YXMod2lkdGgsIGhlaWdodCk7CiAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgIGxldCBpbWdEYXRhOwogICAgaWYgKGtpbmQgPT09IEltYWdlS2luZC5SR0JBXzMyQlBQKSB7CiAgICAgIGltZ0RhdGEgPSBuZXcgSW1hZ2VEYXRhKHNyYywgd2lkdGgsIGhlaWdodCk7CiAgICB9IGVsc2UgewogICAgICBpbWdEYXRhID0gY3R4LmNyZWF0ZUltYWdlRGF0YSh3aWR0aCwgaGVpZ2h0KTsKICAgICAgY29udmVydFRvUkdCQSh7CiAgICAgICAga2luZCwKICAgICAgICBzcmMsCiAgICAgICAgZGVzdDogbmV3IFVpbnQzMkFycmF5KGltZ0RhdGEuZGF0YS5idWZmZXIpLAogICAgICAgIHdpZHRoLAogICAgICAgIGhlaWdodCwKICAgICAgICBpbnZlcnNlRGVjb2RlOiB0aGlzLm5lZWRzRGVjb2RlCiAgICAgIH0pOwogICAgfQogICAgY3R4LnB1dEltYWdlRGF0YShpbWdEYXRhLCAwLCAwKTsKICAgIGNvbnN0IGJpdG1hcCA9IGNhbnZhcy50cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKTsKICAgIHJldHVybiB7CiAgICAgIGRhdGE6IG51bGwsCiAgICAgIHdpZHRoLAogICAgICBoZWlnaHQsCiAgICAgIGJpdG1hcCwKICAgICAgaW50ZXJwb2xhdGU6IHRoaXMuaW50ZXJwb2xhdGUKICAgIH07CiAgfQogIGFzeW5jICNnZXRJbWFnZSh3aWR0aCwgaGVpZ2h0KSB7CiAgICBjb25zdCBiaXRtYXAgPSBhd2FpdCB0aGlzLmltYWdlLmdldFRyYW5zZmVyYWJsZUltYWdlKCk7CiAgICBpZiAoIWJpdG1hcCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHJldHVybiB7CiAgICAgIGRhdGE6IG51bGwsCiAgICAgIHdpZHRoLAogICAgICBoZWlnaHQsCiAgICAgIGJpdG1hcCwKICAgICAgaW50ZXJwb2xhdGU6IHRoaXMuaW50ZXJwb2xhdGUKICAgIH07CiAgfQogIGFzeW5jIGdldEltYWdlQnl0ZXMobGVuZ3RoLCB7CiAgICBkcmF3V2lkdGgsCiAgICBkcmF3SGVpZ2h0LAogICAgZm9yY2VSR0JBID0gZmFsc2UsCiAgICBmb3JjZVJHQiA9IGZhbHNlLAogICAgaW50ZXJuYWwgPSBmYWxzZQogIH0pIHsKICAgIHRoaXMuaW1hZ2UucmVzZXQoKTsKICAgIHRoaXMuaW1hZ2UuZHJhd1dpZHRoID0gZHJhd1dpZHRoIHx8IHRoaXMud2lkdGg7CiAgICB0aGlzLmltYWdlLmRyYXdIZWlnaHQgPSBkcmF3SGVpZ2h0IHx8IHRoaXMuaGVpZ2h0OwogICAgdGhpcy5pbWFnZS5mb3JjZVJHQkEgPSAhIWZvcmNlUkdCQTsKICAgIHRoaXMuaW1hZ2UuZm9yY2VSR0IgPSAhIWZvcmNlUkdCOwogICAgY29uc3QgaW1hZ2VCeXRlcyA9IGF3YWl0IHRoaXMuaW1hZ2UuZ2V0SW1hZ2VEYXRhKGxlbmd0aCwgdGhpcy5qcHhEZWNvZGVyT3B0aW9ucyk7CiAgICBpZiAoaW50ZXJuYWwgfHwgdGhpcy5pbWFnZSBpbnN0YW5jZW9mIERlY29kZVN0cmVhbSkgewogICAgICByZXR1cm4gaW1hZ2VCeXRlczsKICAgIH0KICAgIGFzc2VydChpbWFnZUJ5dGVzIGluc3RhbmNlb2YgVWludDhBcnJheSwgJ1BERkltYWdlLmdldEltYWdlQnl0ZXM6IFVuc3VwcG9ydGVkICJpbWFnZUJ5dGVzIiB0eXBlLicpOwogICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGltYWdlQnl0ZXMpOwogIH0KfQoKOy8vIC4vc3JjL2NvcmUvZXZhbHVhdG9yLmpzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmNvbnN0IERlZmF1bHRQYXJ0aWFsRXZhbHVhdG9yT3B0aW9ucyA9IE9iamVjdC5mcmVlemUoewogIG1heEltYWdlU2l6ZTogLTEsCiAgZGlzYWJsZUZvbnRGYWNlOiBmYWxzZSwKICBpZ25vcmVFcnJvcnM6IGZhbHNlLAogIGlzRXZhbFN1cHBvcnRlZDogdHJ1ZSwKICBpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDogZmFsc2UsCiAgaXNJbWFnZURlY29kZXJTdXBwb3J0ZWQ6IGZhbHNlLAogIGNhbnZhc01heEFyZWFJbkJ5dGVzOiAtMSwKICBmb250RXh0cmFQcm9wZXJ0aWVzOiBmYWxzZSwKICB1c2VTeXN0ZW1Gb250czogdHJ1ZSwKICB1c2VXYXNtOiB0cnVlLAogIHVzZVdvcmtlckZldGNoOiB0cnVlLAogIGNNYXBVcmw6IG51bGwsCiAgaWNjVXJsOiBudWxsLAogIHN0YW5kYXJkRm9udERhdGFVcmw6IG51bGwsCiAgd2FzbVVybDogbnVsbAp9KTsKY29uc3QgUGF0dGVyblR5cGUgPSB7CiAgVElMSU5HOiAxLAogIFNIQURJTkc6IDIKfTsKY29uc3QgVEVYVF9DSFVOS19CQVRDSF9TSVpFID0gMTA7CmNvbnN0IGRlZmVycmVkID0gUHJvbWlzZS5yZXNvbHZlKCk7CmZ1bmN0aW9uIG5vcm1hbGl6ZUJsZW5kTW9kZSh2YWx1ZSwgcGFyc2luZ0FycmF5ID0gZmFsc2UpIHsKICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHsKICAgIGZvciAoY29uc3QgdmFsIG9mIHZhbHVlKSB7CiAgICAgIGNvbnN0IG1heWJlQk0gPSBub3JtYWxpemVCbGVuZE1vZGUodmFsLCB0cnVlKTsKICAgICAgaWYgKG1heWJlQk0pIHsKICAgICAgICByZXR1cm4gbWF5YmVCTTsKICAgICAgfQogICAgfQogICAgd2FybihgVW5zdXBwb3J0ZWQgYmxlbmQgbW9kZSBBcnJheTogJHt2YWx1ZX1gKTsKICAgIHJldHVybiAic291cmNlLW92ZXIiOwogIH0KICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIE5hbWUpKSB7CiAgICBpZiAocGFyc2luZ0FycmF5KSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcmV0dXJuICJzb3VyY2Utb3ZlciI7CiAgfQogIHN3aXRjaCAodmFsdWUubmFtZSkgewogICAgY2FzZSAiTm9ybWFsIjoKICAgIGNhc2UgIkNvbXBhdGlibGUiOgogICAgICByZXR1cm4gInNvdXJjZS1vdmVyIjsKICAgIGNhc2UgIk11bHRpcGx5IjoKICAgICAgcmV0dXJuICJtdWx0aXBseSI7CiAgICBjYXNlICJTY3JlZW4iOgogICAgICByZXR1cm4gInNjcmVlbiI7CiAgICBjYXNlICJPdmVybGF5IjoKICAgICAgcmV0dXJuICJvdmVybGF5IjsKICAgIGNhc2UgIkRhcmtlbiI6CiAgICAgIHJldHVybiAiZGFya2VuIjsKICAgIGNhc2UgIkxpZ2h0ZW4iOgogICAgICByZXR1cm4gImxpZ2h0ZW4iOwogICAgY2FzZSAiQ29sb3JEb2RnZSI6CiAgICAgIHJldHVybiAiY29sb3ItZG9kZ2UiOwogICAgY2FzZSAiQ29sb3JCdXJuIjoKICAgICAgcmV0dXJuICJjb2xvci1idXJuIjsKICAgIGNhc2UgIkhhcmRMaWdodCI6CiAgICAgIHJldHVybiAiaGFyZC1saWdodCI7CiAgICBjYXNlICJTb2Z0TGlnaHQiOgogICAgICByZXR1cm4gInNvZnQtbGlnaHQiOwogICAgY2FzZSAiRGlmZmVyZW5jZSI6CiAgICAgIHJldHVybiAiZGlmZmVyZW5jZSI7CiAgICBjYXNlICJFeGNsdXNpb24iOgogICAgICByZXR1cm4gImV4Y2x1c2lvbiI7CiAgICBjYXNlICJIdWUiOgogICAgICByZXR1cm4gImh1ZSI7CiAgICBjYXNlICJTYXR1cmF0aW9uIjoKICAgICAgcmV0dXJuICJzYXR1cmF0aW9uIjsKICAgIGNhc2UgIkNvbG9yIjoKICAgICAgcmV0dXJuICJjb2xvciI7CiAgICBjYXNlICJMdW1pbm9zaXR5IjoKICAgICAgcmV0dXJuICJsdW1pbm9zaXR5IjsKICB9CiAgaWYgKHBhcnNpbmdBcnJheSkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIHdhcm4oYFVuc3VwcG9ydGVkIGJsZW5kIG1vZGU6ICR7dmFsdWUubmFtZX1gKTsKICByZXR1cm4gInNvdXJjZS1vdmVyIjsKfQpmdW5jdGlvbiBhZGRMb2NhbGx5Q2FjaGVkSW1hZ2VPcHMob3BMaXN0LCBkYXRhKSB7CiAgaWYgKGRhdGEub2JqSWQpIHsKICAgIG9wTGlzdC5hZGREZXBlbmRlbmN5KGRhdGEub2JqSWQpOwogIH0KICBvcExpc3QuYWRkSW1hZ2VPcHMoZGF0YS5mbiwgZGF0YS5hcmdzLCBkYXRhLm9wdGlvbmFsQ29udGVudCwgZGF0YS5oYXNNYXNrKTsKICBpZiAoZGF0YS5mbiA9PT0gT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCAmJiBkYXRhLmFyZ3NbMF0/LmNvdW50ID4gMCkgewogICAgZGF0YS5hcmdzWzBdLmNvdW50Kys7CiAgfQp9CmNsYXNzIFRpbWVTbG90TWFuYWdlciB7CiAgc3RhdGljIFRJTUVfU0xPVF9EVVJBVElPTl9NUyA9IDIwOwogIHN0YXRpYyBDSEVDS19USU1FX0VWRVJZID0gMTAwOwogIGNvbnN0cnVjdG9yKCkgewogICAgdGhpcy5yZXNldCgpOwogIH0KICBjaGVjaygpIHsKICAgIGlmICgrK3RoaXMuY2hlY2tlZCA8IFRpbWVTbG90TWFuYWdlci5DSEVDS19USU1FX0VWRVJZKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHRoaXMuY2hlY2tlZCA9IDA7CiAgICByZXR1cm4gdGhpcy5lbmRUaW1lIDw9IERhdGUubm93KCk7CiAgfQogIHJlc2V0KCkgewogICAgdGhpcy5lbmRUaW1lID0gRGF0ZS5ub3coKSArIFRpbWVTbG90TWFuYWdlci5USU1FX1NMT1RfRFVSQVRJT05fTVM7CiAgICB0aGlzLmNoZWNrZWQgPSAwOwogIH0KfQpjbGFzcyBQYXJ0aWFsRXZhbHVhdG9yIHsKICBjb25zdHJ1Y3Rvcih7CiAgICB4cmVmLAogICAgaGFuZGxlciwKICAgIHBhZ2VJbmRleCwKICAgIGlkRmFjdG9yeSwKICAgIGZvbnRDYWNoZSwKICAgIGJ1aWx0SW5DTWFwQ2FjaGUsCiAgICBzdGFuZGFyZEZvbnREYXRhQ2FjaGUsCiAgICBnbG9iYWxDb2xvclNwYWNlQ2FjaGUsCiAgICBnbG9iYWxJbWFnZUNhY2hlLAogICAgc3lzdGVtRm9udENhY2hlLAogICAgb3B0aW9ucyA9IG51bGwKICB9KSB7CiAgICB0aGlzLnhyZWYgPSB4cmVmOwogICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlcjsKICAgIHRoaXMucGFnZUluZGV4ID0gcGFnZUluZGV4OwogICAgdGhpcy5pZEZhY3RvcnkgPSBpZEZhY3Rvcnk7CiAgICB0aGlzLmZvbnRDYWNoZSA9IGZvbnRDYWNoZTsKICAgIHRoaXMuYnVpbHRJbkNNYXBDYWNoZSA9IGJ1aWx0SW5DTWFwQ2FjaGU7CiAgICB0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZSA9IHN0YW5kYXJkRm9udERhdGFDYWNoZTsKICAgIHRoaXMuZ2xvYmFsQ29sb3JTcGFjZUNhY2hlID0gZ2xvYmFsQ29sb3JTcGFjZUNhY2hlOwogICAgdGhpcy5nbG9iYWxJbWFnZUNhY2hlID0gZ2xvYmFsSW1hZ2VDYWNoZTsKICAgIHRoaXMuc3lzdGVtRm9udENhY2hlID0gc3lzdGVtRm9udENhY2hlOwogICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCBEZWZhdWx0UGFydGlhbEV2YWx1YXRvck9wdGlvbnM7CiAgICB0aGlzLnR5cGUzRm9udFJlZnMgPSBudWxsOwogICAgdGhpcy5fcmVnaW9uYWxJbWFnZUNhY2hlID0gbmV3IFJlZ2lvbmFsSW1hZ2VDYWNoZSgpOwogICAgdGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kID0gdGhpcy5mZXRjaEJ1aWx0SW5DTWFwLmJpbmQodGhpcyk7CiAgfQogIGdldCBfcGRmRnVuY3Rpb25GYWN0b3J5KCkgewogICAgY29uc3QgcGRmRnVuY3Rpb25GYWN0b3J5ID0gbmV3IFBERkZ1bmN0aW9uRmFjdG9yeSh7CiAgICAgIHhyZWY6IHRoaXMueHJlZiwKICAgICAgaXNFdmFsU3VwcG9ydGVkOiB0aGlzLm9wdGlvbnMuaXNFdmFsU3VwcG9ydGVkCiAgICB9KTsKICAgIHJldHVybiBzaGFkb3codGhpcywgIl9wZGZGdW5jdGlvbkZhY3RvcnkiLCBwZGZGdW5jdGlvbkZhY3RvcnkpOwogIH0KICBnZXQgcGFyc2luZ1R5cGUzRm9udCgpIHsKICAgIHJldHVybiAhIXRoaXMudHlwZTNGb250UmVmczsKICB9CiAgY2xvbmUobmV3T3B0aW9ucyA9IG51bGwpIHsKICAgIGNvbnN0IG5ld0V2YWx1YXRvciA9IE9iamVjdC5jcmVhdGUodGhpcyk7CiAgICBuZXdFdmFsdWF0b3Iub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSwgdGhpcy5vcHRpb25zLCBuZXdPcHRpb25zKTsKICAgIHJldHVybiBuZXdFdmFsdWF0b3I7CiAgfQogIGhhc0JsZW5kTW9kZXMocmVzb3VyY2VzLCBub25CbGVuZE1vZGVzU2V0KSB7CiAgICBpZiAoIShyZXNvdXJjZXMgaW5zdGFuY2VvZiBEaWN0KSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAocmVzb3VyY2VzLm9iaklkICYmIG5vbkJsZW5kTW9kZXNTZXQuaGFzKHJlc291cmNlcy5vYmpJZCkpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgY29uc3QgcHJvY2Vzc2VkID0gbmV3IFJlZlNldChub25CbGVuZE1vZGVzU2V0KTsKICAgIGlmIChyZXNvdXJjZXMub2JqSWQpIHsKICAgICAgcHJvY2Vzc2VkLnB1dChyZXNvdXJjZXMub2JqSWQpOwogICAgfQogICAgY29uc3Qgbm9kZXMgPSBbcmVzb3VyY2VzXSwKICAgICAgeHJlZiA9IHRoaXMueHJlZjsKICAgIHdoaWxlIChub2Rlcy5sZW5ndGgpIHsKICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzLnNoaWZ0KCk7CiAgICAgIGNvbnN0IGdyYXBoaWNTdGF0ZXMgPSBub2RlLmdldCgiRXh0R1N0YXRlIik7CiAgICAgIGlmIChncmFwaGljU3RhdGVzIGluc3RhbmNlb2YgRGljdCkgewogICAgICAgIGZvciAobGV0IGdyYXBoaWNTdGF0ZSBvZiBncmFwaGljU3RhdGVzLmdldFJhd1ZhbHVlcygpKSB7CiAgICAgICAgICBpZiAoZ3JhcGhpY1N0YXRlIGluc3RhbmNlb2YgUmVmKSB7CiAgICAgICAgICAgIGlmIChwcm9jZXNzZWQuaGFzKGdyYXBoaWNTdGF0ZSkpIHsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGdyYXBoaWNTdGF0ZSA9IHhyZWYuZmV0Y2goZ3JhcGhpY1N0YXRlKTsKICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHsKICAgICAgICAgICAgICBwcm9jZXNzZWQucHV0KGdyYXBoaWNTdGF0ZSk7CiAgICAgICAgICAgICAgaW5mbyhgaGFzQmxlbmRNb2RlcyAtIGlnbm9yaW5nIEV4dEdTdGF0ZTogIiR7ZXh9Ii5gKTsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKCEoZ3JhcGhpY1N0YXRlIGluc3RhbmNlb2YgRGljdCkpIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZ3JhcGhpY1N0YXRlLm9iaklkKSB7CiAgICAgICAgICAgIHByb2Nlc3NlZC5wdXQoZ3JhcGhpY1N0YXRlLm9iaklkKTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IGJtID0gZ3JhcGhpY1N0YXRlLmdldCgiQk0iKTsKICAgICAgICAgIGlmIChibSBpbnN0YW5jZW9mIE5hbWUpIHsKICAgICAgICAgICAgaWYgKGJtLm5hbWUgIT09ICJOb3JtYWwiKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYm0gIT09IHVuZGVmaW5lZCAmJiBBcnJheS5pc0FycmF5KGJtKSkgewogICAgICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYm0pIHsKICAgICAgICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIE5hbWUgJiYgZWxlbWVudC5uYW1lICE9PSAiTm9ybWFsIikgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvbnN0IHhPYmplY3RzID0gbm9kZS5nZXQoIlhPYmplY3QiKTsKICAgICAgaWYgKCEoeE9iamVjdHMgaW5zdGFuY2VvZiBEaWN0KSkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGZvciAobGV0IHhPYmplY3Qgb2YgeE9iamVjdHMuZ2V0UmF3VmFsdWVzKCkpIHsKICAgICAgICBpZiAoeE9iamVjdCBpbnN0YW5jZW9mIFJlZikgewogICAgICAgICAgaWYgKHByb2Nlc3NlZC5oYXMoeE9iamVjdCkpIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICB0cnkgewogICAgICAgICAgICB4T2JqZWN0ID0geHJlZi5mZXRjaCh4T2JqZWN0KTsKICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7CiAgICAgICAgICAgIHByb2Nlc3NlZC5wdXQoeE9iamVjdCk7CiAgICAgICAgICAgIGluZm8oYGhhc0JsZW5kTW9kZXMgLSBpZ25vcmluZyBYT2JqZWN0OiAiJHtleH0iLmApOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCEoeE9iamVjdCBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHhPYmplY3QuZGljdC5vYmpJZCkgewogICAgICAgICAgcHJvY2Vzc2VkLnB1dCh4T2JqZWN0LmRpY3Qub2JqSWQpOwogICAgICAgIH0KICAgICAgICBjb25zdCB4UmVzb3VyY2VzID0geE9iamVjdC5kaWN0LmdldCgiUmVzb3VyY2VzIik7CiAgICAgICAgaWYgKCEoeFJlc291cmNlcyBpbnN0YW5jZW9mIERpY3QpKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHhSZXNvdXJjZXMub2JqSWQgJiYgcHJvY2Vzc2VkLmhhcyh4UmVzb3VyY2VzLm9iaklkKSkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIG5vZGVzLnB1c2goeFJlc291cmNlcyk7CiAgICAgICAgaWYgKHhSZXNvdXJjZXMub2JqSWQpIHsKICAgICAgICAgIHByb2Nlc3NlZC5wdXQoeFJlc291cmNlcy5vYmpJZCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBmb3IgKGNvbnN0IHJlZiBvZiBwcm9jZXNzZWQpIHsKICAgICAgbm9uQmxlbmRNb2Rlc1NldC5wdXQocmVmKTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CiAgYXN5bmMgZmV0Y2hCdWlsdEluQ01hcChuYW1lKSB7CiAgICBjb25zdCBjYWNoZWREYXRhID0gdGhpcy5idWlsdEluQ01hcENhY2hlLmdldChuYW1lKTsKICAgIGlmIChjYWNoZWREYXRhKSB7CiAgICAgIHJldHVybiBjYWNoZWREYXRhOwogICAgfQogICAgbGV0IGRhdGE7CiAgICBpZiAodGhpcy5vcHRpb25zLnVzZVdvcmtlckZldGNoKSB7CiAgICAgIGRhdGEgPSB7CiAgICAgICAgY01hcERhdGE6IGF3YWl0IGZldGNoQmluYXJ5RGF0YShgJHt0aGlzLm9wdGlvbnMuY01hcFVybH0ke25hbWV9LmJjbWFwYCksCiAgICAgICAgaXNDb21wcmVzc2VkOiB0cnVlCiAgICAgIH07CiAgICB9IGVsc2UgewogICAgICBkYXRhID0gYXdhaXQgdGhpcy5oYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiRmV0Y2hCaW5hcnlEYXRhIiwgewogICAgICAgIHR5cGU6ICJjTWFwUmVhZGVyRmFjdG9yeSIsCiAgICAgICAgbmFtZQogICAgICB9KTsKICAgIH0KICAgIHRoaXMuYnVpbHRJbkNNYXBDYWNoZS5zZXQobmFtZSwgZGF0YSk7CiAgICByZXR1cm4gZGF0YTsKICB9CiAgYXN5bmMgZmV0Y2hTdGFuZGFyZEZvbnREYXRhKG5hbWUpIHsKICAgIGNvbnN0IGNhY2hlZERhdGEgPSB0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZS5nZXQobmFtZSk7CiAgICBpZiAoY2FjaGVkRGF0YSkgewogICAgICByZXR1cm4gbmV3IFN0cmVhbShjYWNoZWREYXRhKTsKICAgIH0KICAgIGlmICh0aGlzLm9wdGlvbnMudXNlU3lzdGVtRm9udHMgJiYgbmFtZSAhPT0gIlN5bWJvbCIgJiYgbmFtZSAhPT0gIlphcGZEaW5nYmF0cyIpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb25zdCBzdGFuZGFyZEZvbnROYW1lVG9GaWxlTmFtZSA9IGdldEZvbnROYW1lVG9GaWxlTWFwKCksCiAgICAgIGZpbGVuYW1lID0gc3RhbmRhcmRGb250TmFtZVRvRmlsZU5hbWVbbmFtZV07CiAgICBsZXQgZGF0YTsKICAgIHRyeSB7CiAgICAgIGlmICh0aGlzLm9wdGlvbnMudXNlV29ya2VyRmV0Y2gpIHsKICAgICAgICBkYXRhID0gYXdhaXQgZmV0Y2hCaW5hcnlEYXRhKGAke3RoaXMub3B0aW9ucy5zdGFuZGFyZEZvbnREYXRhVXJsfSR7ZmlsZW5hbWV9YCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZGF0YSA9IGF3YWl0IHRoaXMuaGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkZldGNoQmluYXJ5RGF0YSIsIHsKICAgICAgICAgIHR5cGU6ICJzdGFuZGFyZEZvbnREYXRhRmFjdG9yeSIsCiAgICAgICAgICBmaWxlbmFtZQogICAgICAgIH0pOwogICAgICB9CiAgICB9IGNhdGNoIChleCkgewogICAgICB3YXJuKGV4KTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICB0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZS5zZXQobmFtZSwgZGF0YSk7CiAgICByZXR1cm4gbmV3IFN0cmVhbShkYXRhKTsKICB9CiAgYXN5bmMgYnVpbGRGb3JtWE9iamVjdChyZXNvdXJjZXMsIHhvYmosIHNtYXNrLCBvcGVyYXRvckxpc3QsIHRhc2ssIGluaXRpYWxTdGF0ZSwgbG9jYWxDb2xvclNwYWNlQ2FjaGUpIHsKICAgIGNvbnN0IGRpY3QgPSB4b2JqLmRpY3Q7CiAgICBjb25zdCBtYXRyaXggPSBsb29rdXBNYXRyaXgoZGljdC5nZXRBcnJheSgiTWF0cml4IiksIG51bGwpOwogICAgY29uc3QgYmJveCA9IGxvb2t1cE5vcm1hbFJlY3QoZGljdC5nZXRBcnJheSgiQkJveCIpLCBudWxsKTsKICAgIGxldCBvcHRpb25hbENvbnRlbnQsIGdyb3VwT3B0aW9uczsKICAgIGlmIChkaWN0LmhhcygiT0MiKSkgewogICAgICBvcHRpb25hbENvbnRlbnQgPSBhd2FpdCB0aGlzLnBhcnNlTWFya2VkQ29udGVudFByb3BzKGRpY3QuZ2V0KCJPQyIpLCByZXNvdXJjZXMpOwogICAgfQogICAgaWYgKG9wdGlvbmFsQ29udGVudCAhPT0gdW5kZWZpbmVkKSB7CiAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChPUFMuYmVnaW5NYXJrZWRDb250ZW50UHJvcHMsIFsiT0MiLCBvcHRpb25hbENvbnRlbnRdKTsKICAgIH0KICAgIGNvbnN0IGdyb3VwID0gZGljdC5nZXQoIkdyb3VwIik7CiAgICBpZiAoZ3JvdXApIHsKICAgICAgZ3JvdXBPcHRpb25zID0gewogICAgICAgIG1hdHJpeCwKICAgICAgICBiYm94LAogICAgICAgIHNtYXNrLAogICAgICAgIGlzb2xhdGVkOiBmYWxzZSwKICAgICAgICBrbm9ja291dDogZmFsc2UKICAgICAgfTsKICAgICAgY29uc3QgZ3JvdXBTdWJ0eXBlID0gZ3JvdXAuZ2V0KCJTIik7CiAgICAgIGxldCBjb2xvclNwYWNlID0gbnVsbDsKICAgICAgaWYgKGlzTmFtZShncm91cFN1YnR5cGUsICJUcmFuc3BhcmVuY3kiKSkgewogICAgICAgIGdyb3VwT3B0aW9ucy5pc29sYXRlZCA9IGdyb3VwLmdldCgiSSIpIHx8IGZhbHNlOwogICAgICAgIGdyb3VwT3B0aW9ucy5rbm9ja291dCA9IGdyb3VwLmdldCgiSyIpIHx8IGZhbHNlOwogICAgICAgIGlmIChncm91cC5oYXMoIkNTIikpIHsKICAgICAgICAgIGNvbnN0IGNzID0gdGhpcy5fZ2V0Q29sb3JTcGFjZShncm91cC5nZXRSYXcoIkNTIiksIHJlc291cmNlcywgbG9jYWxDb2xvclNwYWNlQ2FjaGUpOwogICAgICAgICAgY29sb3JTcGFjZSA9IGNzIGluc3RhbmNlb2YgQ29sb3JTcGFjZSA/IGNzIDogYXdhaXQgdGhpcy5faGFuZGxlQ29sb3JTcGFjZShjcyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChzbWFzaz8uYmFja2Ryb3ApIHsKICAgICAgICBjb2xvclNwYWNlIHx8PSBDb2xvclNwYWNlVXRpbHMucmdiOwogICAgICAgIHNtYXNrLmJhY2tkcm9wID0gY29sb3JTcGFjZS5nZXRSZ2Ioc21hc2suYmFja2Ryb3AsIDApOwogICAgICB9CiAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChPUFMuYmVnaW5Hcm91cCwgW2dyb3VwT3B0aW9uc10pOwogICAgfQogICAgY29uc3QgYXJncyA9IGdyb3VwID8gW21hdHJpeCwgbnVsbF0gOiBbbWF0cml4LCBiYm94XTsKICAgIG9wZXJhdG9yTGlzdC5hZGRPcChPUFMucGFpbnRGb3JtWE9iamVjdEJlZ2luLCBhcmdzKTsKICAgIGF3YWl0IHRoaXMuZ2V0T3BlcmF0b3JMaXN0KHsKICAgICAgc3RyZWFtOiB4b2JqLAogICAgICB0YXNrLAogICAgICByZXNvdXJjZXM6IGRpY3QuZ2V0KCJSZXNvdXJjZXMiKSB8fCByZXNvdXJjZXMsCiAgICAgIG9wZXJhdG9yTGlzdCwKICAgICAgaW5pdGlhbFN0YXRlCiAgICB9KTsKICAgIG9wZXJhdG9yTGlzdC5hZGRPcChPUFMucGFpbnRGb3JtWE9iamVjdEVuZCwgW10pOwogICAgaWYgKGdyb3VwKSB7CiAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChPUFMuZW5kR3JvdXAsIFtncm91cE9wdGlvbnNdKTsKICAgIH0KICAgIGlmIChvcHRpb25hbENvbnRlbnQgIT09IHVuZGVmaW5lZCkgewogICAgICBvcGVyYXRvckxpc3QuYWRkT3AoT1BTLmVuZE1hcmtlZENvbnRlbnQsIFtdKTsKICAgIH0KICB9CiAgX3NlbmRJbWdEYXRhKG9iaklkLCBpbWdEYXRhLCBjYWNoZUdsb2JhbGx5ID0gZmFsc2UpIHsKICAgIGNvbnN0IHRyYW5zZmVycyA9IGltZ0RhdGEgPyBbaW1nRGF0YS5iaXRtYXAgfHwgaW1nRGF0YS5kYXRhLmJ1ZmZlcl0gOiBudWxsOwogICAgaWYgKHRoaXMucGFyc2luZ1R5cGUzRm9udCB8fCBjYWNoZUdsb2JhbGx5KSB7CiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIuc2VuZCgiY29tbW9ub2JqIiwgW29iaklkLCAiSW1hZ2UiLCBpbWdEYXRhXSwgdHJhbnNmZXJzKTsKICAgIH0KICAgIHJldHVybiB0aGlzLmhhbmRsZXIuc2VuZCgib2JqIiwgW29iaklkLCB0aGlzLnBhZ2VJbmRleCwgIkltYWdlIiwgaW1nRGF0YV0sIHRyYW5zZmVycyk7CiAgfQogIGFzeW5jIGJ1aWxkUGFpbnRJbWFnZVhPYmplY3QoewogICAgcmVzb3VyY2VzLAogICAgaW1hZ2UsCiAgICBpc0lubGluZSA9IGZhbHNlLAogICAgb3BlcmF0b3JMaXN0LAogICAgY2FjaGVLZXksCiAgICBsb2NhbEltYWdlQ2FjaGUsCiAgICBsb2NhbENvbG9yU3BhY2VDYWNoZQogIH0pIHsKICAgIGNvbnN0IGRpY3QgPSBpbWFnZS5kaWN0OwogICAgY29uc3QgaW1hZ2VSZWYgPSBkaWN0Lm9iaklkOwogICAgY29uc3QgdyA9IGRpY3QuZ2V0KCJXIiwgIldpZHRoIik7CiAgICBjb25zdCBoID0gZGljdC5nZXQoIkgiLCAiSGVpZ2h0Iik7CiAgICBpZiAoISh3ICYmIHR5cGVvZiB3ID09PSAibnVtYmVyIikgfHwgIShoICYmIHR5cGVvZiBoID09PSAibnVtYmVyIikpIHsKICAgICAgd2FybigiSW1hZ2UgZGltZW5zaW9ucyBhcmUgbWlzc2luZywgb3Igbm90IG51bWJlcnMuIik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IG1heEltYWdlU2l6ZSA9IHRoaXMub3B0aW9ucy5tYXhJbWFnZVNpemU7CiAgICBpZiAobWF4SW1hZ2VTaXplICE9PSAtMSAmJiB3ICogaCA+IG1heEltYWdlU2l6ZSkgewogICAgICBjb25zdCBtc2cgPSAiSW1hZ2UgZXhjZWVkZWQgbWF4aW11bSBhbGxvd2VkIHNpemUgYW5kIHdhcyByZW1vdmVkLiI7CiAgICAgIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKSB7CiAgICAgICAgd2Fybihtc2cpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTsKICAgIH0KICAgIGxldCBvcHRpb25hbENvbnRlbnQ7CiAgICBpZiAoZGljdC5oYXMoIk9DIikpIHsKICAgICAgb3B0aW9uYWxDb250ZW50ID0gYXdhaXQgdGhpcy5wYXJzZU1hcmtlZENvbnRlbnRQcm9wcyhkaWN0LmdldCgiT0MiKSwgcmVzb3VyY2VzKTsKICAgIH0KICAgIGNvbnN0IGltYWdlTWFzayA9IGRpY3QuZ2V0KCJJTSIsICJJbWFnZU1hc2siKSB8fCBmYWxzZTsKICAgIGxldCBpbWdEYXRhLCBmbiwgYXJnczsKICAgIGlmIChpbWFnZU1hc2spIHsKICAgICAgY29uc3QgaW50ZXJwb2xhdGUgPSBkaWN0LmdldCgiSSIsICJJbnRlcnBvbGF0ZSIpOwogICAgICBjb25zdCBiaXRTdHJpZGVMZW5ndGggPSB3ICsgNyA+PiAzOwogICAgICBjb25zdCBpbWdBcnJheSA9IGltYWdlLmdldEJ5dGVzKGJpdFN0cmlkZUxlbmd0aCAqIGgpOwogICAgICBjb25zdCBkZWNvZGUgPSBkaWN0LmdldEFycmF5KCJEIiwgIkRlY29kZSIpOwogICAgICBpZiAodGhpcy5wYXJzaW5nVHlwZTNGb250KSB7CiAgICAgICAgaW1nRGF0YSA9IFBERkltYWdlLmNyZWF0ZVJhd01hc2soewogICAgICAgICAgaW1nQXJyYXksCiAgICAgICAgICB3aWR0aDogdywKICAgICAgICAgIGhlaWdodDogaCwKICAgICAgICAgIGltYWdlSXNGcm9tRGVjb2RlU3RyZWFtOiBpbWFnZSBpbnN0YW5jZW9mIERlY29kZVN0cmVhbSwKICAgICAgICAgIGludmVyc2VEZWNvZGU6IGRlY29kZT8uWzBdID4gMCwKICAgICAgICAgIGludGVycG9sYXRlCiAgICAgICAgfSk7CiAgICAgICAgaW1nRGF0YS5jYWNoZWQgPSAhIWNhY2hlS2V5OwogICAgICAgIGZuID0gT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdDsKICAgICAgICBhcmdzID0gW2ltZ0RhdGFdOwogICAgICAgIG9wZXJhdG9yTGlzdC5hZGRJbWFnZU9wcyhmbiwgYXJncywgb3B0aW9uYWxDb250ZW50KTsKICAgICAgICBpZiAoY2FjaGVLZXkpIHsKICAgICAgICAgIGNvbnN0IGNhY2hlRGF0YSA9IHsKICAgICAgICAgICAgZm4sCiAgICAgICAgICAgIGFyZ3MsCiAgICAgICAgICAgIG9wdGlvbmFsQ29udGVudAogICAgICAgICAgfTsKICAgICAgICAgIGxvY2FsSW1hZ2VDYWNoZS5zZXQoY2FjaGVLZXksIGltYWdlUmVmLCBjYWNoZURhdGEpOwogICAgICAgICAgaWYgKGltYWdlUmVmKSB7CiAgICAgICAgICAgIHRoaXMuX3JlZ2lvbmFsSW1hZ2VDYWNoZS5zZXQobnVsbCwgaW1hZ2VSZWYsIGNhY2hlRGF0YSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpbWdEYXRhID0gYXdhaXQgUERGSW1hZ2UuY3JlYXRlTWFzayh7CiAgICAgICAgaW1nQXJyYXksCiAgICAgICAgd2lkdGg6IHcsCiAgICAgICAgaGVpZ2h0OiBoLAogICAgICAgIGltYWdlSXNGcm9tRGVjb2RlU3RyZWFtOiBpbWFnZSBpbnN0YW5jZW9mIERlY29kZVN0cmVhbSwKICAgICAgICBpbnZlcnNlRGVjb2RlOiBkZWNvZGU/LlswXSA+IDAsCiAgICAgICAgaW50ZXJwb2xhdGUsCiAgICAgICAgaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6IHRoaXMub3B0aW9ucy5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZAogICAgICB9KTsKICAgICAgaWYgKGltZ0RhdGEuaXNTaW5nbGVPcGFxdWVQaXhlbCkgewogICAgICAgIGZuID0gT1BTLnBhaW50U29saWRDb2xvckltYWdlTWFzazsKICAgICAgICBhcmdzID0gW107CiAgICAgICAgb3BlcmF0b3JMaXN0LmFkZEltYWdlT3BzKGZuLCBhcmdzLCBvcHRpb25hbENvbnRlbnQpOwogICAgICAgIGlmIChjYWNoZUtleSkgewogICAgICAgICAgY29uc3QgY2FjaGVEYXRhID0gewogICAgICAgICAgICBmbiwKICAgICAgICAgICAgYXJncywKICAgICAgICAgICAgb3B0aW9uYWxDb250ZW50CiAgICAgICAgICB9OwogICAgICAgICAgbG9jYWxJbWFnZUNhY2hlLnNldChjYWNoZUtleSwgaW1hZ2VSZWYsIGNhY2hlRGF0YSk7CiAgICAgICAgICBpZiAoaW1hZ2VSZWYpIHsKICAgICAgICAgICAgdGhpcy5fcmVnaW9uYWxJbWFnZUNhY2hlLnNldChudWxsLCBpbWFnZVJlZiwgY2FjaGVEYXRhKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IG9iaklkID0gYG1hc2tfJHt0aGlzLmlkRmFjdG9yeS5jcmVhdGVPYmpJZCgpfWA7CiAgICAgIG9wZXJhdG9yTGlzdC5hZGREZXBlbmRlbmN5KG9iaklkKTsKICAgICAgaW1nRGF0YS5kYXRhTGVuID0gaW1nRGF0YS5iaXRtYXAgPyBpbWdEYXRhLndpZHRoICogaW1nRGF0YS5oZWlnaHQgKiA0IDogaW1nRGF0YS5kYXRhLmxlbmd0aDsKICAgICAgdGhpcy5fc2VuZEltZ0RhdGEob2JqSWQsIGltZ0RhdGEpOwogICAgICBmbiA9IE9QUy5wYWludEltYWdlTWFza1hPYmplY3Q7CiAgICAgIGFyZ3MgPSBbewogICAgICAgIGRhdGE6IG9iaklkLAogICAgICAgIHdpZHRoOiBpbWdEYXRhLndpZHRoLAogICAgICAgIGhlaWdodDogaW1nRGF0YS5oZWlnaHQsCiAgICAgICAgaW50ZXJwb2xhdGU6IGltZ0RhdGEuaW50ZXJwb2xhdGUsCiAgICAgICAgY291bnQ6IDEKICAgICAgfV07CiAgICAgIG9wZXJhdG9yTGlzdC5hZGRJbWFnZU9wcyhmbiwgYXJncywgb3B0aW9uYWxDb250ZW50KTsKICAgICAgaWYgKGNhY2hlS2V5KSB7CiAgICAgICAgY29uc3QgY2FjaGVEYXRhID0gewogICAgICAgICAgb2JqSWQsCiAgICAgICAgICBmbiwKICAgICAgICAgIGFyZ3MsCiAgICAgICAgICBvcHRpb25hbENvbnRlbnQKICAgICAgICB9OwogICAgICAgIGxvY2FsSW1hZ2VDYWNoZS5zZXQoY2FjaGVLZXksIGltYWdlUmVmLCBjYWNoZURhdGEpOwogICAgICAgIGlmIChpbWFnZVJlZikgewogICAgICAgICAgdGhpcy5fcmVnaW9uYWxJbWFnZUNhY2hlLnNldChudWxsLCBpbWFnZVJlZiwgY2FjaGVEYXRhKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgU01BTExfSU1BR0VfRElNRU5TSU9OUyA9IDIwMDsKICAgIGNvbnN0IGhhc01hc2sgPSBkaWN0LmhhcygiU01hc2siKSB8fCBkaWN0LmhhcygiTWFzayIpOwogICAgaWYgKGlzSW5saW5lICYmIHcgKyBoIDwgU01BTExfSU1BR0VfRElNRU5TSU9OUyAmJiAhaGFzTWFzaykgewogICAgICB0cnkgewogICAgICAgIGNvbnN0IGltYWdlT2JqID0gbmV3IFBERkltYWdlKHsKICAgICAgICAgIHhyZWY6IHRoaXMueHJlZiwKICAgICAgICAgIHJlczogcmVzb3VyY2VzLAogICAgICAgICAgaW1hZ2UsCiAgICAgICAgICBpc0lubGluZSwKICAgICAgICAgIHBkZkZ1bmN0aW9uRmFjdG9yeTogdGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LAogICAgICAgICAgZ2xvYmFsQ29sb3JTcGFjZUNhY2hlOiB0aGlzLmdsb2JhbENvbG9yU3BhY2VDYWNoZSwKICAgICAgICAgIGxvY2FsQ29sb3JTcGFjZUNhY2hlCiAgICAgICAgfSk7CiAgICAgICAgaW1nRGF0YSA9IGF3YWl0IGltYWdlT2JqLmNyZWF0ZUltYWdlRGF0YSh0cnVlLCBmYWxzZSk7CiAgICAgICAgb3BlcmF0b3JMaXN0LmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkID0gdGhpcy5vcHRpb25zLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkOwogICAgICAgIG9wZXJhdG9yTGlzdC5hZGRJbWFnZU9wcyhPUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3QsIFtpbWdEYXRhXSwgb3B0aW9uYWxDb250ZW50KTsKICAgICAgfSBjYXRjaCAocmVhc29uKSB7CiAgICAgICAgY29uc3QgbXNnID0gYFVuYWJsZSB0byBkZWNvZGUgaW5saW5lIGltYWdlOiAiJHtyZWFzb259Ii5gOwogICAgICAgIGlmICghdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycykgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7CiAgICAgICAgfQogICAgICAgIHdhcm4obXNnKTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9CiAgICBsZXQgb2JqSWQgPSBgaW1nXyR7dGhpcy5pZEZhY3RvcnkuY3JlYXRlT2JqSWQoKX1gLAogICAgICBjYWNoZUdsb2JhbGx5ID0gZmFsc2U7CiAgICBpZiAodGhpcy5wYXJzaW5nVHlwZTNGb250KSB7CiAgICAgIG9iaklkID0gYCR7dGhpcy5pZEZhY3RvcnkuZ2V0RG9jSWQoKX1fdHlwZTNfJHtvYmpJZH1gOwogICAgfSBlbHNlIGlmIChjYWNoZUtleSAmJiBpbWFnZVJlZikgewogICAgICBjYWNoZUdsb2JhbGx5ID0gdGhpcy5nbG9iYWxJbWFnZUNhY2hlLnNob3VsZENhY2hlKGltYWdlUmVmLCB0aGlzLnBhZ2VJbmRleCk7CiAgICAgIGlmIChjYWNoZUdsb2JhbGx5KSB7CiAgICAgICAgYXNzZXJ0KCFpc0lubGluZSwgIkNhbm5vdCBjYWNoZSBhbiBpbmxpbmUgaW1hZ2UgZ2xvYmFsbHkuIik7CiAgICAgICAgb2JqSWQgPSBgJHt0aGlzLmlkRmFjdG9yeS5nZXREb2NJZCgpfV8ke29iaklkfWA7CiAgICAgIH0KICAgIH0KICAgIG9wZXJhdG9yTGlzdC5hZGREZXBlbmRlbmN5KG9iaklkKTsKICAgIGZuID0gT1BTLnBhaW50SW1hZ2VYT2JqZWN0OwogICAgYXJncyA9IFtvYmpJZCwgdywgaF07CiAgICBvcGVyYXRvckxpc3QuYWRkSW1hZ2VPcHMoZm4sIGFyZ3MsIG9wdGlvbmFsQ29udGVudCwgaGFzTWFzayk7CiAgICBpZiAoY2FjaGVHbG9iYWxseSkgewogICAgICBpZiAodGhpcy5nbG9iYWxJbWFnZUNhY2hlLmhhc0RlY29kZUZhaWxlZChpbWFnZVJlZikpIHsKICAgICAgICB0aGlzLmdsb2JhbEltYWdlQ2FjaGUuc2V0RGF0YShpbWFnZVJlZiwgewogICAgICAgICAgb2JqSWQsCiAgICAgICAgICBmbiwKICAgICAgICAgIGFyZ3MsCiAgICAgICAgICBvcHRpb25hbENvbnRlbnQsCiAgICAgICAgICBoYXNNYXNrLAogICAgICAgICAgYnl0ZVNpemU6IDAKICAgICAgICB9KTsKICAgICAgICB0aGlzLl9zZW5kSW1nRGF0YShvYmpJZCwgbnVsbCwgY2FjaGVHbG9iYWxseSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICh3ICogaCA+IDI1MDAwMCB8fCBoYXNNYXNrKSB7CiAgICAgICAgY29uc3QgbG9jYWxMZW5ndGggPSBhd2FpdCB0aGlzLmhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJjb21tb25vYmoiLCBbb2JqSWQsICJDb3B5TG9jYWxJbWFnZSIsIHsKICAgICAgICAgIGltYWdlUmVmCiAgICAgICAgfV0pOwogICAgICAgIGlmIChsb2NhbExlbmd0aCkgewogICAgICAgICAgdGhpcy5nbG9iYWxJbWFnZUNhY2hlLnNldERhdGEoaW1hZ2VSZWYsIHsKICAgICAgICAgICAgb2JqSWQsCiAgICAgICAgICAgIGZuLAogICAgICAgICAgICBhcmdzLAogICAgICAgICAgICBvcHRpb25hbENvbnRlbnQsCiAgICAgICAgICAgIGhhc01hc2ssCiAgICAgICAgICAgIGJ5dGVTaXplOiAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuZ2xvYmFsSW1hZ2VDYWNoZS5hZGRCeXRlU2l6ZShpbWFnZVJlZiwgbG9jYWxMZW5ndGgpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgUERGSW1hZ2UuYnVpbGRJbWFnZSh7CiAgICAgIHhyZWY6IHRoaXMueHJlZiwKICAgICAgcmVzOiByZXNvdXJjZXMsCiAgICAgIGltYWdlLAogICAgICBpc0lubGluZSwKICAgICAgcGRmRnVuY3Rpb25GYWN0b3J5OiB0aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnksCiAgICAgIGdsb2JhbENvbG9yU3BhY2VDYWNoZTogdGhpcy5nbG9iYWxDb2xvclNwYWNlQ2FjaGUsCiAgICAgIGxvY2FsQ29sb3JTcGFjZUNhY2hlCiAgICB9KS50aGVuKGFzeW5jIGltYWdlT2JqID0+IHsKICAgICAgaW1nRGF0YSA9IGF3YWl0IGltYWdlT2JqLmNyZWF0ZUltYWdlRGF0YShmYWxzZSwgdGhpcy5vcHRpb25zLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKTsKICAgICAgaW1nRGF0YS5kYXRhTGVuID0gaW1nRGF0YS5iaXRtYXAgPyBpbWdEYXRhLndpZHRoICogaW1nRGF0YS5oZWlnaHQgKiA0IDogaW1nRGF0YS5kYXRhLmxlbmd0aDsKICAgICAgaW1nRGF0YS5yZWYgPSBpbWFnZVJlZjsKICAgICAgaWYgKGNhY2hlR2xvYmFsbHkpIHsKICAgICAgICB0aGlzLmdsb2JhbEltYWdlQ2FjaGUuYWRkQnl0ZVNpemUoaW1hZ2VSZWYsIGltZ0RhdGEuZGF0YUxlbik7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMuX3NlbmRJbWdEYXRhKG9iaklkLCBpbWdEYXRhLCBjYWNoZUdsb2JhbGx5KTsKICAgIH0pLmNhdGNoKHJlYXNvbiA9PiB7CiAgICAgIHdhcm4oYFVuYWJsZSB0byBkZWNvZGUgaW1hZ2UgIiR7b2JqSWR9IjogIiR7cmVhc29ufSIuYCk7CiAgICAgIGlmIChpbWFnZVJlZikgewogICAgICAgIHRoaXMuZ2xvYmFsSW1hZ2VDYWNoZS5hZGREZWNvZGVGYWlsZWQoaW1hZ2VSZWYpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLl9zZW5kSW1nRGF0YShvYmpJZCwgbnVsbCwgY2FjaGVHbG9iYWxseSk7CiAgICB9KTsKICAgIGlmIChjYWNoZUtleSkgewogICAgICBjb25zdCBjYWNoZURhdGEgPSB7CiAgICAgICAgb2JqSWQsCiAgICAgICAgZm4sCiAgICAgICAgYXJncywKICAgICAgICBvcHRpb25hbENvbnRlbnQsCiAgICAgICAgaGFzTWFzawogICAgICB9OwogICAgICBsb2NhbEltYWdlQ2FjaGUuc2V0KGNhY2hlS2V5LCBpbWFnZVJlZiwgY2FjaGVEYXRhKTsKICAgICAgaWYgKGltYWdlUmVmKSB7CiAgICAgICAgdGhpcy5fcmVnaW9uYWxJbWFnZUNhY2hlLnNldChudWxsLCBpbWFnZVJlZiwgY2FjaGVEYXRhKTsKICAgICAgICBpZiAoY2FjaGVHbG9iYWxseSkgewogICAgICAgICAgdGhpcy5nbG9iYWxJbWFnZUNhY2hlLnNldERhdGEoaW1hZ2VSZWYsIHsKICAgICAgICAgICAgb2JqSWQsCiAgICAgICAgICAgIGZuLAogICAgICAgICAgICBhcmdzLAogICAgICAgICAgICBvcHRpb25hbENvbnRlbnQsCiAgICAgICAgICAgIGhhc01hc2ssCiAgICAgICAgICAgIGJ5dGVTaXplOiAwCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgaGFuZGxlU01hc2soc21hc2ssIHJlc291cmNlcywgb3BlcmF0b3JMaXN0LCB0YXNrLCBzdGF0ZU1hbmFnZXIsIGxvY2FsQ29sb3JTcGFjZUNhY2hlKSB7CiAgICBjb25zdCBzbWFza0NvbnRlbnQgPSBzbWFzay5nZXQoIkciKTsKICAgIGNvbnN0IHNtYXNrT3B0aW9ucyA9IHsKICAgICAgc3VidHlwZTogc21hc2suZ2V0KCJTIikubmFtZSwKICAgICAgYmFja2Ryb3A6IHNtYXNrLmdldCgiQkMiKQogICAgfTsKICAgIGNvbnN0IHRyYW5zZmVyT2JqID0gc21hc2suZ2V0KCJUUiIpOwogICAgaWYgKGlzUERGRnVuY3Rpb24odHJhbnNmZXJPYmopKSB7CiAgICAgIGNvbnN0IHRyYW5zZmVyRm4gPSB0aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnkuY3JlYXRlKHRyYW5zZmVyT2JqKTsKICAgICAgY29uc3QgdHJhbnNmZXJNYXAgPSBuZXcgVWludDhBcnJheSgyNTYpOwogICAgICBjb25zdCB0bXAgPSBuZXcgRmxvYXQzMkFycmF5KDEpOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7CiAgICAgICAgdG1wWzBdID0gaSAvIDI1NTsKICAgICAgICB0cmFuc2ZlckZuKHRtcCwgMCwgdG1wLCAwKTsKICAgICAgICB0cmFuc2Zlck1hcFtpXSA9IHRtcFswXSAqIDI1NSB8IDA7CiAgICAgIH0KICAgICAgc21hc2tPcHRpb25zLnRyYW5zZmVyTWFwID0gdHJhbnNmZXJNYXA7CiAgICB9CiAgICByZXR1cm4gdGhpcy5idWlsZEZvcm1YT2JqZWN0KHJlc291cmNlcywgc21hc2tDb250ZW50LCBzbWFza09wdGlvbnMsIG9wZXJhdG9yTGlzdCwgdGFzaywgc3RhdGVNYW5hZ2VyLnN0YXRlLmNsb25lKHsKICAgICAgbmV3UGF0aDogdHJ1ZQogICAgfSksIGxvY2FsQ29sb3JTcGFjZUNhY2hlKTsKICB9CiAgaGFuZGxlVHJhbnNmZXJGdW5jdGlvbih0cikgewogICAgbGV0IHRyYW5zZmVyQXJyYXk7CiAgICBpZiAoQXJyYXkuaXNBcnJheSh0cikpIHsKICAgICAgdHJhbnNmZXJBcnJheSA9IHRyOwogICAgfSBlbHNlIGlmIChpc1BERkZ1bmN0aW9uKHRyKSkgewogICAgICB0cmFuc2ZlckFycmF5ID0gW3RyXTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3QgdHJhbnNmZXJNYXBzID0gW107CiAgICBsZXQgbnVtRm5zID0gMCwKICAgICAgbnVtRWZmZWN0ZnVsRm5zID0gMDsKICAgIGZvciAoY29uc3QgZW50cnkgb2YgdHJhbnNmZXJBcnJheSkgewogICAgICBjb25zdCB0cmFuc2Zlck9iaiA9IHRoaXMueHJlZi5mZXRjaElmUmVmKGVudHJ5KTsKICAgICAgbnVtRm5zKys7CiAgICAgIGlmIChpc05hbWUodHJhbnNmZXJPYmosICJJZGVudGl0eSIpKSB7CiAgICAgICAgdHJhbnNmZXJNYXBzLnB1c2gobnVsbCk7CiAgICAgICAgY29udGludWU7CiAgICAgIH0gZWxzZSBpZiAoIWlzUERGRnVuY3Rpb24odHJhbnNmZXJPYmopKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgY29uc3QgdHJhbnNmZXJGbiA9IHRoaXMuX3BkZkZ1bmN0aW9uRmFjdG9yeS5jcmVhdGUodHJhbnNmZXJPYmopOwogICAgICBjb25zdCB0cmFuc2Zlck1hcCA9IG5ldyBVaW50OEFycmF5KDI1NiksCiAgICAgICAgdG1wID0gbmV3IEZsb2F0MzJBcnJheSgxKTsKICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCAyNTY7IGorKykgewogICAgICAgIHRtcFswXSA9IGogLyAyNTU7CiAgICAgICAgdHJhbnNmZXJGbih0bXAsIDAsIHRtcCwgMCk7CiAgICAgICAgdHJhbnNmZXJNYXBbal0gPSB0bXBbMF0gKiAyNTUgfCAwOwogICAgICB9CiAgICAgIHRyYW5zZmVyTWFwcy5wdXNoKHRyYW5zZmVyTWFwKTsKICAgICAgbnVtRWZmZWN0ZnVsRm5zKys7CiAgICB9CiAgICBpZiAoIShudW1GbnMgPT09IDEgfHwgbnVtRm5zID09PSA0KSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmIChudW1FZmZlY3RmdWxGbnMgPT09IDApIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICByZXR1cm4gdHJhbnNmZXJNYXBzOwogIH0KICBoYW5kbGVUaWxpbmdUeXBlKGZuLCBjb2xvciwgcmVzb3VyY2VzLCBwYXR0ZXJuLCBwYXR0ZXJuRGljdCwgb3BlcmF0b3JMaXN0LCB0YXNrLCBsb2NhbFRpbGluZ1BhdHRlcm5DYWNoZSkgewogICAgY29uc3QgdGlsaW5nT3BMaXN0ID0gbmV3IE9wZXJhdG9yTGlzdCgpOwogICAgY29uc3QgcGF0dGVyblJlc291cmNlcyA9IERpY3QubWVyZ2UoewogICAgICB4cmVmOiB0aGlzLnhyZWYsCiAgICAgIGRpY3RBcnJheTogW3BhdHRlcm5EaWN0LmdldCgiUmVzb3VyY2VzIiksIHJlc291cmNlc10KICAgIH0pOwogICAgcmV0dXJuIHRoaXMuZ2V0T3BlcmF0b3JMaXN0KHsKICAgICAgc3RyZWFtOiBwYXR0ZXJuLAogICAgICB0YXNrLAogICAgICByZXNvdXJjZXM6IHBhdHRlcm5SZXNvdXJjZXMsCiAgICAgIG9wZXJhdG9yTGlzdDogdGlsaW5nT3BMaXN0CiAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgY29uc3Qgb3BlcmF0b3JMaXN0SVIgPSB0aWxpbmdPcExpc3QuZ2V0SVIoKTsKICAgICAgY29uc3QgdGlsaW5nUGF0dGVybklSID0gZ2V0VGlsaW5nUGF0dGVybklSKG9wZXJhdG9yTGlzdElSLCBwYXR0ZXJuRGljdCwgY29sb3IpOwogICAgICBvcGVyYXRvckxpc3QuYWRkRGVwZW5kZW5jaWVzKHRpbGluZ09wTGlzdC5kZXBlbmRlbmNpZXMpOwogICAgICBvcGVyYXRvckxpc3QuYWRkT3AoZm4sIHRpbGluZ1BhdHRlcm5JUik7CiAgICAgIGlmIChwYXR0ZXJuRGljdC5vYmpJZCkgewogICAgICAgIGxvY2FsVGlsaW5nUGF0dGVybkNhY2hlLnNldChudWxsLCBwYXR0ZXJuRGljdC5vYmpJZCwgewogICAgICAgICAgb3BlcmF0b3JMaXN0SVIsCiAgICAgICAgICBkaWN0OiBwYXR0ZXJuRGljdAogICAgICAgIH0pOwogICAgICB9CiAgICB9KS5jYXRjaChyZWFzb24gPT4gewogICAgICBpZiAocmVhc29uIGluc3RhbmNlb2YgQWJvcnRFeGNlcHRpb24pIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKHRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpIHsKICAgICAgICB3YXJuKGBoYW5kbGVUaWxpbmdUeXBlIC0gaWdub3JpbmcgcGF0dGVybjogIiR7cmVhc29ufSIuYCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRocm93IHJlYXNvbjsKICAgIH0pOwogIH0KICBhc3luYyBoYW5kbGVTZXRGb250KHJlc291cmNlcywgZm9udEFyZ3MsIGZvbnRSZWYsIG9wZXJhdG9yTGlzdCwgdGFzaywgc3RhdGUsIGZhbGxiYWNrRm9udERpY3QgPSBudWxsLCBjc3NGb250SW5mbyA9IG51bGwpIHsKICAgIGNvbnN0IGZvbnROYW1lID0gZm9udEFyZ3M/LlswXSBpbnN0YW5jZW9mIE5hbWUgPyBmb250QXJnc1swXS5uYW1lIDogbnVsbDsKICAgIGNvbnN0IHRyYW5zbGF0ZWQgPSBhd2FpdCB0aGlzLmxvYWRGb250KGZvbnROYW1lLCBmb250UmVmLCByZXNvdXJjZXMsIHRhc2ssIGZhbGxiYWNrRm9udERpY3QsIGNzc0ZvbnRJbmZvKTsKICAgIGlmICh0cmFuc2xhdGVkLmZvbnQuaXNUeXBlM0ZvbnQpIHsKICAgICAgb3BlcmF0b3JMaXN0LmFkZERlcGVuZGVuY2llcyh0cmFuc2xhdGVkLnR5cGUzRGVwZW5kZW5jaWVzKTsKICAgIH0KICAgIHN0YXRlLmZvbnQgPSB0cmFuc2xhdGVkLmZvbnQ7CiAgICB0cmFuc2xhdGVkLnNlbmQodGhpcy5oYW5kbGVyKTsKICAgIHJldHVybiB0cmFuc2xhdGVkLmxvYWRlZE5hbWU7CiAgfQogIGhhbmRsZVRleHQoY2hhcnMsIHN0YXRlKSB7CiAgICBjb25zdCBmb250ID0gc3RhdGUuZm9udDsKICAgIGNvbnN0IGdseXBocyA9IGZvbnQuY2hhcnNUb0dseXBocyhjaGFycyk7CiAgICBpZiAoZm9udC5kYXRhKSB7CiAgICAgIGNvbnN0IGlzQWRkVG9QYXRoU2V0ID0gISEoc3RhdGUudGV4dFJlbmRlcmluZ01vZGUgJiBUZXh0UmVuZGVyaW5nTW9kZS5BRERfVE9fUEFUSF9GTEFHKTsKICAgICAgaWYgKGlzQWRkVG9QYXRoU2V0IHx8IHN0YXRlLmZpbGxDb2xvclNwYWNlLm5hbWUgPT09ICJQYXR0ZXJuIiB8fCBmb250LmRpc2FibGVGb250RmFjZSkgewogICAgICAgIFBhcnRpYWxFdmFsdWF0b3IuYnVpbGRGb250UGF0aHMoZm9udCwgZ2x5cGhzLCB0aGlzLmhhbmRsZXIsIHRoaXMub3B0aW9ucyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBnbHlwaHM7CiAgfQogIGVuc3VyZVN0YXRlRm9udChzdGF0ZSkgewogICAgaWYgKHN0YXRlLmZvbnQpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgcmVhc29uID0gbmV3IEZvcm1hdEVycm9yKCJNaXNzaW5nIHNldEZvbnQgKFRmKSBvcGVyYXRvciBiZWZvcmUgdGV4dCByZW5kZXJpbmcgb3BlcmF0b3IuIik7CiAgICBpZiAodGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycykgewogICAgICB3YXJuKGBlbnN1cmVTdGF0ZUZvbnQ6ICIke3JlYXNvbn0iLmApOwogICAgICByZXR1cm47CiAgICB9CiAgICB0aHJvdyByZWFzb247CiAgfQogIGFzeW5jIHNldEdTdGF0ZSh7CiAgICByZXNvdXJjZXMsCiAgICBnU3RhdGUsCiAgICBvcGVyYXRvckxpc3QsCiAgICBjYWNoZUtleSwKICAgIHRhc2ssCiAgICBzdGF0ZU1hbmFnZXIsCiAgICBsb2NhbEdTdGF0ZUNhY2hlLAogICAgbG9jYWxDb2xvclNwYWNlQ2FjaGUKICB9KSB7CiAgICBjb25zdCBnU3RhdGVSZWYgPSBnU3RhdGUub2JqSWQ7CiAgICBsZXQgaXNTaW1wbGVHU3RhdGUgPSB0cnVlOwogICAgY29uc3QgZ1N0YXRlT2JqID0gW107CiAgICBsZXQgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpOwogICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgZ1N0YXRlKSB7CiAgICAgIHN3aXRjaCAoa2V5KSB7CiAgICAgICAgY2FzZSAiVHlwZSI6CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJMVyI6CiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAibnVtYmVyIikgewogICAgICAgICAgICB3YXJuKGBJbnZhbGlkIExXIChsaW5lIHdpZHRoKTogJHt2YWx1ZX1gKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBnU3RhdGVPYmoucHVzaChba2V5LCBNYXRoLmFicyh2YWx1ZSldKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkxDIjoKICAgICAgICBjYXNlICJMSiI6CiAgICAgICAgY2FzZSAiTUwiOgogICAgICAgIGNhc2UgIkQiOgogICAgICAgIGNhc2UgIlJJIjoKICAgICAgICBjYXNlICJGTCI6CiAgICAgICAgY2FzZSAiQ0EiOgogICAgICAgIGNhc2UgImNhIjoKICAgICAgICAgIGdTdGF0ZU9iai5wdXNoKFtrZXksIHZhbHVlXSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJGb250IjoKICAgICAgICAgIGlzU2ltcGxlR1N0YXRlID0gZmFsc2U7CiAgICAgICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKCgpID0+IHRoaXMuaGFuZGxlU2V0Rm9udChyZXNvdXJjZXMsIG51bGwsIHZhbHVlWzBdLCBvcGVyYXRvckxpc3QsIHRhc2ssIHN0YXRlTWFuYWdlci5zdGF0ZSkudGhlbihmdW5jdGlvbiAobG9hZGVkTmFtZSkgewogICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkRGVwZW5kZW5jeShsb2FkZWROYW1lKTsKICAgICAgICAgICAgZ1N0YXRlT2JqLnB1c2goW2tleSwgW2xvYWRlZE5hbWUsIHZhbHVlWzFdXV0pOwogICAgICAgICAgfSkpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiQk0iOgogICAgICAgICAgZ1N0YXRlT2JqLnB1c2goW2tleSwgbm9ybWFsaXplQmxlbmRNb2RlKHZhbHVlKV0pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiU01hc2siOgogICAgICAgICAgaWYgKGlzTmFtZSh2YWx1ZSwgIk5vbmUiKSkgewogICAgICAgICAgICBnU3RhdGVPYmoucHVzaChba2V5LCBmYWxzZV0pOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERpY3QpIHsKICAgICAgICAgICAgaXNTaW1wbGVHU3RhdGUgPSBmYWxzZTsKICAgICAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbigoKSA9PiB0aGlzLmhhbmRsZVNNYXNrKHZhbHVlLCByZXNvdXJjZXMsIG9wZXJhdG9yTGlzdCwgdGFzaywgc3RhdGVNYW5hZ2VyLCBsb2NhbENvbG9yU3BhY2VDYWNoZSkpOwogICAgICAgICAgICBnU3RhdGVPYmoucHVzaChba2V5LCB0cnVlXSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB3YXJuKCJVbnN1cHBvcnRlZCBTTWFzayB0eXBlIik7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJUUiI6CiAgICAgICAgICBjb25zdCB0cmFuc2Zlck1hcHMgPSB0aGlzLmhhbmRsZVRyYW5zZmVyRnVuY3Rpb24odmFsdWUpOwogICAgICAgICAgZ1N0YXRlT2JqLnB1c2goW2tleSwgdHJhbnNmZXJNYXBzXSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJPUCI6CiAgICAgICAgY2FzZSAib3AiOgogICAgICAgIGNhc2UgIk9QTSI6CiAgICAgICAgY2FzZSAiQkciOgogICAgICAgIGNhc2UgIkJHMiI6CiAgICAgICAgY2FzZSAiVUNSIjoKICAgICAgICBjYXNlICJVQ1IyIjoKICAgICAgICBjYXNlICJUUjIiOgogICAgICAgIGNhc2UgIkhUIjoKICAgICAgICBjYXNlICJTTSI6CiAgICAgICAgY2FzZSAiU0EiOgogICAgICAgIGNhc2UgIkFJUyI6CiAgICAgICAgY2FzZSAiVEsiOgogICAgICAgICAgaW5mbygiZ3JhcGhpYyBzdGF0ZSBvcGVyYXRvciAiICsga2V5KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBpbmZvKCJVbmtub3duIGdyYXBoaWMgc3RhdGUgb3BlcmF0b3IgIiArIGtleSk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgYXdhaXQgcHJvbWlzZTsKICAgIGlmIChnU3RhdGVPYmoubGVuZ3RoID4gMCkgewogICAgICBvcGVyYXRvckxpc3QuYWRkT3AoT1BTLnNldEdTdGF0ZSwgW2dTdGF0ZU9ial0pOwogICAgfQogICAgaWYgKGlzU2ltcGxlR1N0YXRlKSB7CiAgICAgIGxvY2FsR1N0YXRlQ2FjaGUuc2V0KGNhY2hlS2V5LCBnU3RhdGVSZWYsIGdTdGF0ZU9iaik7CiAgICB9CiAgfQogIGxvYWRGb250KGZvbnROYW1lLCBmb250LCByZXNvdXJjZXMsIHRhc2ssIGZhbGxiYWNrRm9udERpY3QgPSBudWxsLCBjc3NGb250SW5mbyA9IG51bGwpIHsKICAgIGNvbnN0IGVycm9yRm9udCA9IGFzeW5jICgpID0+IG5ldyBUcmFuc2xhdGVkRm9udCh7CiAgICAgIGxvYWRlZE5hbWU6ICJnX2ZvbnRfZXJyb3IiLAogICAgICBmb250OiBuZXcgRXJyb3JGb250KGBGb250ICIke2ZvbnROYW1lfSIgaXMgbm90IGF2YWlsYWJsZS5gKSwKICAgICAgZGljdDogZm9udAogICAgfSk7CiAgICBsZXQgZm9udFJlZjsKICAgIGlmIChmb250KSB7CiAgICAgIGlmIChmb250IGluc3RhbmNlb2YgUmVmKSB7CiAgICAgICAgZm9udFJlZiA9IGZvbnQ7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0IGZvbnRSZXMgPSByZXNvdXJjZXMuZ2V0KCJGb250Iik7CiAgICAgIGlmIChmb250UmVzKSB7CiAgICAgICAgZm9udFJlZiA9IGZvbnRSZXMuZ2V0UmF3KGZvbnROYW1lKTsKICAgICAgfQogICAgfQogICAgaWYgKGZvbnRSZWYpIHsKICAgICAgaWYgKHRoaXMudHlwZTNGb250UmVmcz8uaGFzKGZvbnRSZWYpKSB7CiAgICAgICAgcmV0dXJuIGVycm9yRm9udCgpOwogICAgICB9CiAgICAgIGlmICh0aGlzLmZvbnRDYWNoZS5oYXMoZm9udFJlZikpIHsKICAgICAgICByZXR1cm4gdGhpcy5mb250Q2FjaGUuZ2V0KGZvbnRSZWYpOwogICAgICB9CiAgICAgIHRyeSB7CiAgICAgICAgZm9udCA9IHRoaXMueHJlZi5mZXRjaElmUmVmKGZvbnRSZWYpOwogICAgICB9IGNhdGNoIChleCkgewogICAgICAgIHdhcm4oYGxvYWRGb250IC0gbG9va3VwIGZhaWxlZDogIiR7ZXh9Ii5gKTsKICAgICAgfQogICAgfQogICAgaWYgKCEoZm9udCBpbnN0YW5jZW9mIERpY3QpKSB7CiAgICAgIGlmICghdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyAmJiAhdGhpcy5wYXJzaW5nVHlwZTNGb250KSB7CiAgICAgICAgd2FybihgRm9udCAiJHtmb250TmFtZX0iIGlzIG5vdCBhdmFpbGFibGUuYCk7CiAgICAgICAgcmV0dXJuIGVycm9yRm9udCgpOwogICAgICB9CiAgICAgIHdhcm4oYEZvbnQgIiR7Zm9udE5hbWV9IiBpcyBub3QgYXZhaWxhYmxlIC0tIGF0dGVtcHRpbmcgdG8gZmFsbGJhY2sgdG8gYSBkZWZhdWx0IGZvbnQuYCk7CiAgICAgIGZvbnQgPSBmYWxsYmFja0ZvbnREaWN0IHx8IFBhcnRpYWxFdmFsdWF0b3IuZmFsbGJhY2tGb250RGljdDsKICAgIH0KICAgIGlmIChmb250LmNhY2hlS2V5ICYmIHRoaXMuZm9udENhY2hlLmhhcyhmb250LmNhY2hlS2V5KSkgewogICAgICByZXR1cm4gdGhpcy5mb250Q2FjaGUuZ2V0KGZvbnQuY2FjaGVLZXkpOwogICAgfQogICAgY29uc3QgewogICAgICBwcm9taXNlLAogICAgICByZXNvbHZlCiAgICB9ID0gUHJvbWlzZS53aXRoUmVzb2x2ZXJzKCk7CiAgICBsZXQgcHJlRXZhbHVhdGVkRm9udDsKICAgIHRyeSB7CiAgICAgIHByZUV2YWx1YXRlZEZvbnQgPSB0aGlzLnByZUV2YWx1YXRlRm9udChmb250KTsKICAgICAgcHJlRXZhbHVhdGVkRm9udC5jc3NGb250SW5mbyA9IGNzc0ZvbnRJbmZvOwogICAgfSBjYXRjaCAocmVhc29uKSB7CiAgICAgIHdhcm4oYGxvYWRGb250IC0gcHJlRXZhbHVhdGVGb250IGZhaWxlZDogIiR7cmVhc29ufSIuYCk7CiAgICAgIHJldHVybiBlcnJvckZvbnQoKTsKICAgIH0KICAgIGNvbnN0IHsKICAgICAgZGVzY3JpcHRvciwKICAgICAgaGFzaAogICAgfSA9IHByZUV2YWx1YXRlZEZvbnQ7CiAgICBjb25zdCBmb250UmVmSXNSZWYgPSBmb250UmVmIGluc3RhbmNlb2YgUmVmOwogICAgbGV0IGZvbnRJRDsKICAgIGlmIChoYXNoICYmIGRlc2NyaXB0b3IgaW5zdGFuY2VvZiBEaWN0KSB7CiAgICAgIGNvbnN0IGZvbnRBbGlhc2VzID0gZGVzY3JpcHRvci5mb250QWxpYXNlcyB8fD0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgICAgaWYgKGZvbnRBbGlhc2VzW2hhc2hdKSB7CiAgICAgICAgY29uc3QgYWxpYXNGb250UmVmID0gZm9udEFsaWFzZXNbaGFzaF0uYWxpYXNSZWY7CiAgICAgICAgaWYgKGZvbnRSZWZJc1JlZiAmJiBhbGlhc0ZvbnRSZWYgJiYgdGhpcy5mb250Q2FjaGUuaGFzKGFsaWFzRm9udFJlZikpIHsKICAgICAgICAgIHRoaXMuZm9udENhY2hlLnB1dEFsaWFzKGZvbnRSZWYsIGFsaWFzRm9udFJlZik7CiAgICAgICAgICByZXR1cm4gdGhpcy5mb250Q2FjaGUuZ2V0KGZvbnRSZWYpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBmb250QWxpYXNlc1toYXNoXSA9IHsKICAgICAgICAgIGZvbnRJRDogdGhpcy5pZEZhY3RvcnkuY3JlYXRlRm9udElkKCkKICAgICAgICB9OwogICAgICB9CiAgICAgIGlmIChmb250UmVmSXNSZWYpIHsKICAgICAgICBmb250QWxpYXNlc1toYXNoXS5hbGlhc1JlZiA9IGZvbnRSZWY7CiAgICAgIH0KICAgICAgZm9udElEID0gZm9udEFsaWFzZXNbaGFzaF0uZm9udElEOwogICAgfSBlbHNlIHsKICAgICAgZm9udElEID0gdGhpcy5pZEZhY3RvcnkuY3JlYXRlRm9udElkKCk7CiAgICB9CiAgICBhc3NlcnQoZm9udElEPy5zdGFydHNXaXRoKCJmIiksICdUaGUgImZvbnRJRCIgbXVzdCBiZSAoY29ycmVjdGx5KSBkZWZpbmVkLicpOwogICAgaWYgKGZvbnRSZWZJc1JlZikgewogICAgICB0aGlzLmZvbnRDYWNoZS5wdXQoZm9udFJlZiwgcHJvbWlzZSk7CiAgICB9IGVsc2UgewogICAgICBmb250LmNhY2hlS2V5ID0gYGNhY2hlS2V5XyR7Zm9udElEfWA7CiAgICAgIHRoaXMuZm9udENhY2hlLnB1dChmb250LmNhY2hlS2V5LCBwcm9taXNlKTsKICAgIH0KICAgIGZvbnQubG9hZGVkTmFtZSA9IGAke3RoaXMuaWRGYWN0b3J5LmdldERvY0lkKCl9XyR7Zm9udElEfWA7CiAgICB0aGlzLnRyYW5zbGF0ZUZvbnQocHJlRXZhbHVhdGVkRm9udCkudGhlbihhc3luYyB0cmFuc2xhdGVkRm9udCA9PiB7CiAgICAgIGNvbnN0IHRyYW5zbGF0ZWQgPSBuZXcgVHJhbnNsYXRlZEZvbnQoewogICAgICAgIGxvYWRlZE5hbWU6IGZvbnQubG9hZGVkTmFtZSwKICAgICAgICBmb250OiB0cmFuc2xhdGVkRm9udCwKICAgICAgICBkaWN0OiBmb250CiAgICAgIH0pOwogICAgICBpZiAodHJhbnNsYXRlZEZvbnQuaXNUeXBlM0ZvbnQpIHsKICAgICAgICB0cnkgewogICAgICAgICAgYXdhaXQgdHJhbnNsYXRlZC5sb2FkVHlwZTNEYXRhKHRoaXMsIHJlc291cmNlcywgdGFzayk7CiAgICAgICAgfSBjYXRjaCAocmVhc29uKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFR5cGUzIGZvbnQgbG9hZCBlcnJvcjogJHtyZWFzb259YCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJlc29sdmUodHJhbnNsYXRlZCk7CiAgICB9KS5jYXRjaChyZWFzb24gPT4gewogICAgICB3YXJuKGBsb2FkRm9udCAtIHRyYW5zbGF0ZUZvbnQgZmFpbGVkOiAiJHtyZWFzb259Ii5gKTsKICAgICAgcmVzb2x2ZShuZXcgVHJhbnNsYXRlZEZvbnQoewogICAgICAgIGxvYWRlZE5hbWU6IGZvbnQubG9hZGVkTmFtZSwKICAgICAgICBmb250OiBuZXcgRXJyb3JGb250KHJlYXNvbj8ubWVzc2FnZSksCiAgICAgICAgZGljdDogZm9udAogICAgICB9KSk7CiAgICB9KTsKICAgIHJldHVybiBwcm9taXNlOwogIH0KICBidWlsZFBhdGgoZm4sIGFyZ3MsIHN0YXRlKSB7CiAgICBjb25zdCB7CiAgICAgIHBhdGhNaW5NYXg6IG1pbk1heCwKICAgICAgcGF0aEJ1ZmZlcgogICAgfSA9IHN0YXRlOwogICAgc3dpdGNoIChmbiB8IDApIHsKICAgICAgY2FzZSBPUFMucmVjdGFuZ2xlOgogICAgICAgIHsKICAgICAgICAgIGNvbnN0IHggPSBzdGF0ZS5jdXJyZW50UG9pbnRYID0gYXJnc1swXTsKICAgICAgICAgIGNvbnN0IHkgPSBzdGF0ZS5jdXJyZW50UG9pbnRZID0gYXJnc1sxXTsKICAgICAgICAgIGNvbnN0IHdpZHRoID0gYXJnc1syXTsKICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGFyZ3NbM107CiAgICAgICAgICBjb25zdCB4dyA9IHggKyB3aWR0aDsKICAgICAgICAgIGNvbnN0IHloID0geSArIGhlaWdodDsKICAgICAgICAgIGlmICh3aWR0aCA9PT0gMCB8fCBoZWlnaHQgPT09IDApIHsKICAgICAgICAgICAgcGF0aEJ1ZmZlci5wdXNoKERyYXdPUFMubW92ZVRvLCB4LCB5LCBEcmF3T1BTLmxpbmVUbywgeHcsIHloLCBEcmF3T1BTLmNsb3NlUGF0aCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwYXRoQnVmZmVyLnB1c2goRHJhd09QUy5tb3ZlVG8sIHgsIHksIERyYXdPUFMubGluZVRvLCB4dywgeSwgRHJhd09QUy5saW5lVG8sIHh3LCB5aCwgRHJhd09QUy5saW5lVG8sIHgsIHloLCBEcmF3T1BTLmNsb3NlUGF0aCk7CiAgICAgICAgICB9CiAgICAgICAgICBVdGlsLnJlY3RCb3VuZGluZ0JveCh4LCB5LCB4dywgeWgsIG1pbk1heCk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIGNhc2UgT1BTLm1vdmVUbzoKICAgICAgICB7CiAgICAgICAgICBjb25zdCB4ID0gc3RhdGUuY3VycmVudFBvaW50WCA9IGFyZ3NbMF07CiAgICAgICAgICBjb25zdCB5ID0gc3RhdGUuY3VycmVudFBvaW50WSA9IGFyZ3NbMV07CiAgICAgICAgICBwYXRoQnVmZmVyLnB1c2goRHJhd09QUy5tb3ZlVG8sIHgsIHkpOwogICAgICAgICAgVXRpbC5wb2ludEJvdW5kaW5nQm94KHgsIHksIG1pbk1heCk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIGNhc2UgT1BTLmxpbmVUbzoKICAgICAgICB7CiAgICAgICAgICBjb25zdCB4ID0gc3RhdGUuY3VycmVudFBvaW50WCA9IGFyZ3NbMF07CiAgICAgICAgICBjb25zdCB5ID0gc3RhdGUuY3VycmVudFBvaW50WSA9IGFyZ3NbMV07CiAgICAgICAgICBwYXRoQnVmZmVyLnB1c2goRHJhd09QUy5saW5lVG8sIHgsIHkpOwogICAgICAgICAgVXRpbC5wb2ludEJvdW5kaW5nQm94KHgsIHksIG1pbk1heCk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIGNhc2UgT1BTLmN1cnZlVG86CiAgICAgICAgewogICAgICAgICAgY29uc3Qgc3RhcnRYID0gc3RhdGUuY3VycmVudFBvaW50WDsKICAgICAgICAgIGNvbnN0IHN0YXJ0WSA9IHN0YXRlLmN1cnJlbnRQb2ludFk7CiAgICAgICAgICBjb25zdCBbeDEsIHkxLCB4MiwgeTIsIHgsIHldID0gYXJnczsKICAgICAgICAgIHN0YXRlLmN1cnJlbnRQb2ludFggPSB4OwogICAgICAgICAgc3RhdGUuY3VycmVudFBvaW50WSA9IHk7CiAgICAgICAgICBwYXRoQnVmZmVyLnB1c2goRHJhd09QUy5jdXJ2ZVRvLCB4MSwgeTEsIHgyLCB5MiwgeCwgeSk7CiAgICAgICAgICBVdGlsLmJlemllckJvdW5kaW5nQm94KHN0YXJ0WCwgc3RhcnRZLCB4MSwgeTEsIHgyLCB5MiwgeCwgeSwgbWluTWF4KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgY2FzZSBPUFMuY3VydmVUbzI6CiAgICAgICAgewogICAgICAgICAgY29uc3Qgc3RhcnRYID0gc3RhdGUuY3VycmVudFBvaW50WDsKICAgICAgICAgIGNvbnN0IHN0YXJ0WSA9IHN0YXRlLmN1cnJlbnRQb2ludFk7CiAgICAgICAgICBjb25zdCBbeDEsIHkxLCB4LCB5XSA9IGFyZ3M7CiAgICAgICAgICBzdGF0ZS5jdXJyZW50UG9pbnRYID0geDsKICAgICAgICAgIHN0YXRlLmN1cnJlbnRQb2ludFkgPSB5OwogICAgICAgICAgcGF0aEJ1ZmZlci5wdXNoKERyYXdPUFMuY3VydmVUbywgc3RhcnRYLCBzdGFydFksIHgxLCB5MSwgeCwgeSk7CiAgICAgICAgICBVdGlsLmJlemllckJvdW5kaW5nQm94KHN0YXJ0WCwgc3RhcnRZLCBzdGFydFgsIHN0YXJ0WSwgeDEsIHkxLCB4LCB5LCBtaW5NYXgpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICBjYXNlIE9QUy5jdXJ2ZVRvMzoKICAgICAgICB7CiAgICAgICAgICBjb25zdCBzdGFydFggPSBzdGF0ZS5jdXJyZW50UG9pbnRYOwogICAgICAgICAgY29uc3Qgc3RhcnRZID0gc3RhdGUuY3VycmVudFBvaW50WTsKICAgICAgICAgIGNvbnN0IFt4MSwgeTEsIHgsIHldID0gYXJnczsKICAgICAgICAgIHN0YXRlLmN1cnJlbnRQb2ludFggPSB4OwogICAgICAgICAgc3RhdGUuY3VycmVudFBvaW50WSA9IHk7CiAgICAgICAgICBwYXRoQnVmZmVyLnB1c2goRHJhd09QUy5jdXJ2ZVRvLCB4MSwgeTEsIHgsIHksIHgsIHkpOwogICAgICAgICAgVXRpbC5iZXppZXJCb3VuZGluZ0JveChzdGFydFgsIHN0YXJ0WSwgeDEsIHkxLCB4LCB5LCB4LCB5LCBtaW5NYXgpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICBjYXNlIE9QUy5jbG9zZVBhdGg6CiAgICAgICAgcGF0aEJ1ZmZlci5wdXNoKERyYXdPUFMuY2xvc2VQYXRoKTsKICAgICAgICBicmVhazsKICAgIH0KICB9CiAgX2dldENvbG9yU3BhY2UoY3MsIHJlc291cmNlcywgbG9jYWxDb2xvclNwYWNlQ2FjaGUpIHsKICAgIHJldHVybiBDb2xvclNwYWNlVXRpbHMucGFyc2UoewogICAgICBjcywKICAgICAgeHJlZjogdGhpcy54cmVmLAogICAgICByZXNvdXJjZXMsCiAgICAgIHBkZkZ1bmN0aW9uRmFjdG9yeTogdGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LAogICAgICBnbG9iYWxDb2xvclNwYWNlQ2FjaGU6IHRoaXMuZ2xvYmFsQ29sb3JTcGFjZUNhY2hlLAogICAgICBsb2NhbENvbG9yU3BhY2VDYWNoZSwKICAgICAgYXN5bmNJZk5vdENhY2hlZDogdHJ1ZQogICAgfSk7CiAgfQogIGFzeW5jIF9oYW5kbGVDb2xvclNwYWNlKGNzUHJvbWlzZSkgewogICAgdHJ5IHsKICAgICAgcmV0dXJuIGF3YWl0IGNzUHJvbWlzZTsKICAgIH0gY2F0Y2ggKGV4KSB7CiAgICAgIGlmIChleCBpbnN0YW5jZW9mIEFib3J0RXhjZXB0aW9uKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgaWYgKHRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpIHsKICAgICAgICB3YXJuKGBfaGFuZGxlQ29sb3JTcGFjZSAtIGlnbm9yaW5nIENvbG9yU3BhY2U6ICIke2V4fSIuYCk7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgdGhyb3cgZXg7CiAgICB9CiAgfQogIHBhcnNlU2hhZGluZyh7CiAgICBzaGFkaW5nLAogICAgcmVzb3VyY2VzLAogICAgbG9jYWxDb2xvclNwYWNlQ2FjaGUsCiAgICBsb2NhbFNoYWRpbmdQYXR0ZXJuQ2FjaGUKICB9KSB7CiAgICBsZXQgaWQgPSBsb2NhbFNoYWRpbmdQYXR0ZXJuQ2FjaGUuZ2V0KHNoYWRpbmcpOwogICAgaWYgKGlkKSB7CiAgICAgIHJldHVybiBpZDsKICAgIH0KICAgIGxldCBwYXR0ZXJuSVI7CiAgICB0cnkgewogICAgICBjb25zdCBzaGFkaW5nRmlsbCA9IFBhdHRlcm4ucGFyc2VTaGFkaW5nKHNoYWRpbmcsIHRoaXMueHJlZiwgcmVzb3VyY2VzLCB0aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnksIHRoaXMuZ2xvYmFsQ29sb3JTcGFjZUNhY2hlLCBsb2NhbENvbG9yU3BhY2VDYWNoZSk7CiAgICAgIHBhdHRlcm5JUiA9IHNoYWRpbmdGaWxsLmdldElSKCk7CiAgICB9IGNhdGNoIChyZWFzb24pIHsKICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIEFib3J0RXhjZXB0aW9uKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgaWYgKHRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpIHsKICAgICAgICB3YXJuKGBwYXJzZVNoYWRpbmcgLSBpZ25vcmluZyBzaGFkaW5nOiAiJHtyZWFzb259Ii5gKTsKICAgICAgICBsb2NhbFNoYWRpbmdQYXR0ZXJuQ2FjaGUuc2V0KHNoYWRpbmcsIG51bGwpOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIHRocm93IHJlYXNvbjsKICAgIH0KICAgIGlkID0gYHBhdHRlcm5fJHt0aGlzLmlkRmFjdG9yeS5jcmVhdGVPYmpJZCgpfWA7CiAgICBpZiAodGhpcy5wYXJzaW5nVHlwZTNGb250KSB7CiAgICAgIGlkID0gYCR7dGhpcy5pZEZhY3RvcnkuZ2V0RG9jSWQoKX1fdHlwZTNfJHtpZH1gOwogICAgfQogICAgbG9jYWxTaGFkaW5nUGF0dGVybkNhY2hlLnNldChzaGFkaW5nLCBpZCk7CiAgICBpZiAodGhpcy5wYXJzaW5nVHlwZTNGb250KSB7CiAgICAgIHRoaXMuaGFuZGxlci5zZW5kKCJjb21tb25vYmoiLCBbaWQsICJQYXR0ZXJuIiwgcGF0dGVybklSXSk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLmhhbmRsZXIuc2VuZCgib2JqIiwgW2lkLCB0aGlzLnBhZ2VJbmRleCwgIlBhdHRlcm4iLCBwYXR0ZXJuSVJdKTsKICAgIH0KICAgIHJldHVybiBpZDsKICB9CiAgaGFuZGxlQ29sb3JOKG9wZXJhdG9yTGlzdCwgZm4sIGFyZ3MsIGNzLCBwYXR0ZXJucywgcmVzb3VyY2VzLCB0YXNrLCBsb2NhbENvbG9yU3BhY2VDYWNoZSwgbG9jYWxUaWxpbmdQYXR0ZXJuQ2FjaGUsIGxvY2FsU2hhZGluZ1BhdHRlcm5DYWNoZSkgewogICAgY29uc3QgcGF0dGVybk5hbWUgPSBhcmdzLnBvcCgpOwogICAgaWYgKHBhdHRlcm5OYW1lIGluc3RhbmNlb2YgTmFtZSkgewogICAgICBjb25zdCByYXdQYXR0ZXJuID0gcGF0dGVybnMuZ2V0UmF3KHBhdHRlcm5OYW1lLm5hbWUpOwogICAgICBjb25zdCBsb2NhbFRpbGluZ1BhdHRlcm4gPSByYXdQYXR0ZXJuIGluc3RhbmNlb2YgUmVmICYmIGxvY2FsVGlsaW5nUGF0dGVybkNhY2hlLmdldEJ5UmVmKHJhd1BhdHRlcm4pOwogICAgICBpZiAobG9jYWxUaWxpbmdQYXR0ZXJuKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IGNvbG9yID0gY3MuYmFzZSA/IGNzLmJhc2UuZ2V0UmdiKGFyZ3MsIDApIDogbnVsbDsKICAgICAgICAgIGNvbnN0IHRpbGluZ1BhdHRlcm5JUiA9IGdldFRpbGluZ1BhdHRlcm5JUihsb2NhbFRpbGluZ1BhdHRlcm4ub3BlcmF0b3JMaXN0SVIsIGxvY2FsVGlsaW5nUGF0dGVybi5kaWN0LCBjb2xvcik7CiAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoZm4sIHRpbGluZ1BhdHRlcm5JUik7CiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgICAgIH0gY2F0Y2gge30KICAgICAgfQogICAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy54cmVmLmZldGNoSWZSZWYocmF3UGF0dGVybik7CiAgICAgIGlmIChwYXR0ZXJuKSB7CiAgICAgICAgY29uc3QgZGljdCA9IHBhdHRlcm4gaW5zdGFuY2VvZiBCYXNlU3RyZWFtID8gcGF0dGVybi5kaWN0IDogcGF0dGVybjsKICAgICAgICBjb25zdCB0eXBlTnVtID0gZGljdC5nZXQoIlBhdHRlcm5UeXBlIik7CiAgICAgICAgaWYgKHR5cGVOdW0gPT09IFBhdHRlcm5UeXBlLlRJTElORykgewogICAgICAgICAgY29uc3QgY29sb3IgPSBjcy5iYXNlID8gY3MuYmFzZS5nZXRSZ2IoYXJncywgMCkgOiBudWxsOwogICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlVGlsaW5nVHlwZShmbiwgY29sb3IsIHJlc291cmNlcywgcGF0dGVybiwgZGljdCwgb3BlcmF0b3JMaXN0LCB0YXNrLCBsb2NhbFRpbGluZ1BhdHRlcm5DYWNoZSk7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlTnVtID09PSBQYXR0ZXJuVHlwZS5TSEFESU5HKSB7CiAgICAgICAgICBjb25zdCBzaGFkaW5nID0gZGljdC5nZXQoIlNoYWRpbmciKTsKICAgICAgICAgIGNvbnN0IG9iaklkID0gdGhpcy5wYXJzZVNoYWRpbmcoewogICAgICAgICAgICBzaGFkaW5nLAogICAgICAgICAgICByZXNvdXJjZXMsCiAgICAgICAgICAgIGxvY2FsQ29sb3JTcGFjZUNhY2hlLAogICAgICAgICAgICBsb2NhbFNoYWRpbmdQYXR0ZXJuQ2FjaGUKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKG9iaklkKSB7CiAgICAgICAgICAgIGNvbnN0IG1hdHJpeCA9IGxvb2t1cE1hdHJpeChkaWN0LmdldEFycmF5KCJNYXRyaXgiKSwgbnVsbCk7CiAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChmbiwgWyJTaGFkaW5nIiwgb2JqSWQsIG1hdHJpeF0pOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgICAgICB9CiAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBVbmtub3duIFBhdHRlcm5UeXBlOiAke3R5cGVOdW19YCk7CiAgICAgIH0KICAgIH0KICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcihgVW5rbm93biBQYXR0ZXJuTmFtZTogJHtwYXR0ZXJuTmFtZX1gKTsKICB9CiAgX3BhcnNlVmlzaWJpbGl0eUV4cHJlc3Npb24oYXJyYXksIG5lc3RpbmdDb3VudGVyLCBjdXJyZW50UmVzdWx0KSB7CiAgICBjb25zdCBNQVhfTkVTVElORyA9IDEwOwogICAgaWYgKCsrbmVzdGluZ0NvdW50ZXIgPiBNQVhfTkVTVElORykgewogICAgICB3YXJuKCJWaXNpYmlsaXR5IGV4cHJlc3Npb24gaXMgdG9vIGRlZXBseSBuZXN0ZWQiKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOwogICAgY29uc3Qgb3BlcmF0b3IgPSB0aGlzLnhyZWYuZmV0Y2hJZlJlZihhcnJheVswXSk7CiAgICBpZiAobGVuZ3RoIDwgMiB8fCAhKG9wZXJhdG9yIGluc3RhbmNlb2YgTmFtZSkpIHsKICAgICAgd2FybigiSW52YWxpZCB2aXNpYmlsaXR5IGV4cHJlc3Npb24iKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgc3dpdGNoIChvcGVyYXRvci5uYW1lKSB7CiAgICAgIGNhc2UgIkFuZCI6CiAgICAgIGNhc2UgIk9yIjoKICAgICAgY2FzZSAiTm90IjoKICAgICAgICBjdXJyZW50UmVzdWx0LnB1c2gob3BlcmF0b3IubmFtZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgd2FybihgSW52YWxpZCBvcGVyYXRvciAke29wZXJhdG9yLm5hbWV9IGluIHZpc2liaWxpdHkgZXhwcmVzc2lvbmApOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgcmF3ID0gYXJyYXlbaV07CiAgICAgIGNvbnN0IG9iamVjdCA9IHRoaXMueHJlZi5mZXRjaElmUmVmKHJhdyk7CiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHsKICAgICAgICBjb25zdCBuZXN0ZWRSZXN1bHQgPSBbXTsKICAgICAgICBjdXJyZW50UmVzdWx0LnB1c2gobmVzdGVkUmVzdWx0KTsKICAgICAgICB0aGlzLl9wYXJzZVZpc2liaWxpdHlFeHByZXNzaW9uKG9iamVjdCwgbmVzdGluZ0NvdW50ZXIsIG5lc3RlZFJlc3VsdCk7CiAgICAgIH0gZWxzZSBpZiAocmF3IGluc3RhbmNlb2YgUmVmKSB7CiAgICAgICAgY3VycmVudFJlc3VsdC5wdXNoKHJhdy50b1N0cmluZygpKTsKICAgICAgfQogICAgfQogIH0KICBhc3luYyBwYXJzZU1hcmtlZENvbnRlbnRQcm9wcyhjb250ZW50UHJvcGVydGllcywgcmVzb3VyY2VzKSB7CiAgICBsZXQgb3B0aW9uYWxDb250ZW50OwogICAgaWYgKGNvbnRlbnRQcm9wZXJ0aWVzIGluc3RhbmNlb2YgTmFtZSkgewogICAgICBjb25zdCBwcm9wZXJ0aWVzID0gcmVzb3VyY2VzLmdldCgiUHJvcGVydGllcyIpOwogICAgICBvcHRpb25hbENvbnRlbnQgPSBwcm9wZXJ0aWVzLmdldChjb250ZW50UHJvcGVydGllcy5uYW1lKTsKICAgIH0gZWxzZSBpZiAoY29udGVudFByb3BlcnRpZXMgaW5zdGFuY2VvZiBEaWN0KSB7CiAgICAgIG9wdGlvbmFsQ29udGVudCA9IGNvbnRlbnRQcm9wZXJ0aWVzOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJPcHRpb25hbCBjb250ZW50IHByb3BlcnRpZXMgbWFsZm9ybWVkLiIpOwogICAgfQogICAgY29uc3Qgb3B0aW9uYWxDb250ZW50VHlwZSA9IG9wdGlvbmFsQ29udGVudC5nZXQoIlR5cGUiKT8ubmFtZTsKICAgIGlmIChvcHRpb25hbENvbnRlbnRUeXBlID09PSAiT0NHIikgewogICAgICByZXR1cm4gewogICAgICAgIHR5cGU6IG9wdGlvbmFsQ29udGVudFR5cGUsCiAgICAgICAgaWQ6IG9wdGlvbmFsQ29udGVudC5vYmpJZAogICAgICB9OwogICAgfSBlbHNlIGlmIChvcHRpb25hbENvbnRlbnRUeXBlID09PSAiT0NNRCIpIHsKICAgICAgY29uc3QgZXhwcmVzc2lvbiA9IG9wdGlvbmFsQ29udGVudC5nZXQoIlZFIik7CiAgICAgIGlmIChBcnJheS5pc0FycmF5KGV4cHJlc3Npb24pKSB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107CiAgICAgICAgdGhpcy5fcGFyc2VWaXNpYmlsaXR5RXhwcmVzc2lvbihleHByZXNzaW9uLCAwLCByZXN1bHQpOwogICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgdHlwZTogIk9DTUQiLAogICAgICAgICAgICBleHByZXNzaW9uOiByZXN1bHQKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvbnN0IG9wdGlvbmFsQ29udGVudEdyb3VwcyA9IG9wdGlvbmFsQ29udGVudC5nZXQoIk9DR3MiKTsKICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9uYWxDb250ZW50R3JvdXBzKSB8fCBvcHRpb25hbENvbnRlbnRHcm91cHMgaW5zdGFuY2VvZiBEaWN0KSB7CiAgICAgICAgY29uc3QgZ3JvdXBJZHMgPSBbXTsKICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25hbENvbnRlbnRHcm91cHMpKSB7CiAgICAgICAgICBmb3IgKGNvbnN0IG9jZyBvZiBvcHRpb25hbENvbnRlbnRHcm91cHMpIHsKICAgICAgICAgICAgZ3JvdXBJZHMucHVzaChvY2cudG9TdHJpbmcoKSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGdyb3VwSWRzLnB1c2gob3B0aW9uYWxDb250ZW50R3JvdXBzLm9iaklkKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHR5cGU6IG9wdGlvbmFsQ29udGVudFR5cGUsCiAgICAgICAgICBpZHM6IGdyb3VwSWRzLAogICAgICAgICAgcG9saWN5OiBvcHRpb25hbENvbnRlbnQuZ2V0KCJQIikgaW5zdGFuY2VvZiBOYW1lID8gb3B0aW9uYWxDb250ZW50LmdldCgiUCIpLm5hbWUgOiBudWxsLAogICAgICAgICAgZXhwcmVzc2lvbjogbnVsbAogICAgICAgIH07CiAgICAgIH0gZWxzZSBpZiAob3B0aW9uYWxDb250ZW50R3JvdXBzIGluc3RhbmNlb2YgUmVmKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHR5cGU6IG9wdGlvbmFsQ29udGVudFR5cGUsCiAgICAgICAgICBpZDogb3B0aW9uYWxDb250ZW50R3JvdXBzLnRvU3RyaW5nKCkKICAgICAgICB9OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CiAgZ2V0T3BlcmF0b3JMaXN0KHsKICAgIHN0cmVhbSwKICAgIHRhc2ssCiAgICByZXNvdXJjZXMsCiAgICBvcGVyYXRvckxpc3QsCiAgICBpbml0aWFsU3RhdGUgPSBudWxsLAogICAgZmFsbGJhY2tGb250RGljdCA9IG51bGwKICB9KSB7CiAgICByZXNvdXJjZXMgfHw9IERpY3QuZW1wdHk7CiAgICBpbml0aWFsU3RhdGUgfHw9IG5ldyBFdmFsU3RhdGUoKTsKICAgIGlmICghb3BlcmF0b3JMaXN0KSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignZ2V0T3BlcmF0b3JMaXN0OiBtaXNzaW5nICJvcGVyYXRvckxpc3QiIHBhcmFtZXRlcicpOwogICAgfQogICAgY29uc3Qgc2VsZiA9IHRoaXM7CiAgICBjb25zdCB4cmVmID0gdGhpcy54cmVmOwogICAgY29uc3QgbG9jYWxJbWFnZUNhY2hlID0gbmV3IExvY2FsSW1hZ2VDYWNoZSgpOwogICAgY29uc3QgbG9jYWxDb2xvclNwYWNlQ2FjaGUgPSBuZXcgTG9jYWxDb2xvclNwYWNlQ2FjaGUoKTsKICAgIGNvbnN0IGxvY2FsR1N0YXRlQ2FjaGUgPSBuZXcgTG9jYWxHU3RhdGVDYWNoZSgpOwogICAgY29uc3QgbG9jYWxUaWxpbmdQYXR0ZXJuQ2FjaGUgPSBuZXcgTG9jYWxUaWxpbmdQYXR0ZXJuQ2FjaGUoKTsKICAgIGNvbnN0IGxvY2FsU2hhZGluZ1BhdHRlcm5DYWNoZSA9IG5ldyBNYXAoKTsKICAgIGNvbnN0IHhvYmpzID0gcmVzb3VyY2VzLmdldCgiWE9iamVjdCIpIHx8IERpY3QuZW1wdHk7CiAgICBjb25zdCBwYXR0ZXJucyA9IHJlc291cmNlcy5nZXQoIlBhdHRlcm4iKSB8fCBEaWN0LmVtcHR5OwogICAgY29uc3Qgc3RhdGVNYW5hZ2VyID0gbmV3IFN0YXRlTWFuYWdlcihpbml0aWFsU3RhdGUpOwogICAgY29uc3QgcHJlcHJvY2Vzc29yID0gbmV3IEV2YWx1YXRvclByZXByb2Nlc3NvcihzdHJlYW0sIHhyZWYsIHN0YXRlTWFuYWdlcik7CiAgICBjb25zdCB0aW1lU2xvdE1hbmFnZXIgPSBuZXcgVGltZVNsb3RNYW5hZ2VyKCk7CiAgICBmdW5jdGlvbiBjbG9zZVBlbmRpbmdSZXN0b3JlT1BTKGFyZ3VtZW50KSB7CiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHByZXByb2Nlc3Nvci5zYXZlZFN0YXRlc0RlcHRoOyBpIDwgaWk7IGkrKykgewogICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChPUFMucmVzdG9yZSwgW10pOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUJvZHkocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIGNvbnN0IG5leHQgPSBmdW5jdGlvbiAocHJvbWlzZSkgewogICAgICAgIFByb21pc2UuYWxsKFtwcm9taXNlLCBvcGVyYXRvckxpc3QucmVhZHldKS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHByb21pc2VCb2R5KHJlc29sdmUsIHJlamVjdCk7CiAgICAgICAgICB9IGNhdGNoIChleCkgewogICAgICAgICAgICByZWplY3QoZXgpOwogICAgICAgICAgfQogICAgICAgIH0sIHJlamVjdCk7CiAgICAgIH07CiAgICAgIHRhc2suZW5zdXJlTm90VGVybWluYXRlZCgpOwogICAgICB0aW1lU2xvdE1hbmFnZXIucmVzZXQoKTsKICAgICAgY29uc3Qgb3BlcmF0aW9uID0ge307CiAgICAgIGxldCBzdG9wLCBpLCBpaSwgY3MsIG5hbWUsIGlzVmFsaWROYW1lOwogICAgICB3aGlsZSAoIShzdG9wID0gdGltZVNsb3RNYW5hZ2VyLmNoZWNrKCkpKSB7CiAgICAgICAgb3BlcmF0aW9uLmFyZ3MgPSBudWxsOwogICAgICAgIGlmICghcHJlcHJvY2Vzc29yLnJlYWQob3BlcmF0aW9uKSkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGxldCBhcmdzID0gb3BlcmF0aW9uLmFyZ3M7CiAgICAgICAgbGV0IGZuID0gb3BlcmF0aW9uLmZuOwogICAgICAgIHN3aXRjaCAoZm4gfCAwKSB7CiAgICAgICAgICBjYXNlIE9QUy5wYWludFhPYmplY3Q6CiAgICAgICAgICAgIGlzVmFsaWROYW1lID0gYXJnc1swXSBpbnN0YW5jZW9mIE5hbWU7CiAgICAgICAgICAgIG5hbWUgPSBhcmdzWzBdLm5hbWU7CiAgICAgICAgICAgIGlmIChpc1ZhbGlkTmFtZSkgewogICAgICAgICAgICAgIGNvbnN0IGxvY2FsSW1hZ2UgPSBsb2NhbEltYWdlQ2FjaGUuZ2V0QnlOYW1lKG5hbWUpOwogICAgICAgICAgICAgIGlmIChsb2NhbEltYWdlKSB7CiAgICAgICAgICAgICAgICBhZGRMb2NhbGx5Q2FjaGVkSW1hZ2VPcHMob3BlcmF0b3JMaXN0LCBsb2NhbEltYWdlKTsKICAgICAgICAgICAgICAgIGFyZ3MgPSBudWxsOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIG5leHQobmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmVYT2JqZWN0LCByZWplY3RYT2JqZWN0KSB7CiAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkTmFtZSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJYT2JqZWN0IG11c3QgYmUgcmVmZXJyZWQgdG8gYnkgbmFtZS4iKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgbGV0IHhvYmogPSB4b2Jqcy5nZXRSYXcobmFtZSk7CiAgICAgICAgICAgICAgaWYgKHhvYmogaW5zdGFuY2VvZiBSZWYpIHsKICAgICAgICAgICAgICAgIGNvbnN0IGxvY2FsSW1hZ2UgPSBsb2NhbEltYWdlQ2FjaGUuZ2V0QnlSZWYoeG9iaikgfHwgc2VsZi5fcmVnaW9uYWxJbWFnZUNhY2hlLmdldEJ5UmVmKHhvYmopOwogICAgICAgICAgICAgICAgaWYgKGxvY2FsSW1hZ2UpIHsKICAgICAgICAgICAgICAgICAgYWRkTG9jYWxseUNhY2hlZEltYWdlT3BzKG9wZXJhdG9yTGlzdCwgbG9jYWxJbWFnZSk7CiAgICAgICAgICAgICAgICAgIHJlc29sdmVYT2JqZWN0KCk7CiAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNvbnN0IGdsb2JhbEltYWdlID0gc2VsZi5nbG9iYWxJbWFnZUNhY2hlLmdldERhdGEoeG9iaiwgc2VsZi5wYWdlSW5kZXgpOwogICAgICAgICAgICAgICAgaWYgKGdsb2JhbEltYWdlKSB7CiAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGREZXBlbmRlbmN5KGdsb2JhbEltYWdlLm9iaklkKTsKICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZEltYWdlT3BzKGdsb2JhbEltYWdlLmZuLCBnbG9iYWxJbWFnZS5hcmdzLCBnbG9iYWxJbWFnZS5vcHRpb25hbENvbnRlbnQsIGdsb2JhbEltYWdlLmhhc01hc2spOwogICAgICAgICAgICAgICAgICByZXNvbHZlWE9iamVjdCgpOwogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB4b2JqID0geHJlZi5mZXRjaCh4b2JqKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKCEoeG9iaiBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlhPYmplY3Qgc2hvdWxkIGJlIGEgc3RyZWFtIik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB4b2JqLmRpY3QuZ2V0KCJTdWJ0eXBlIik7CiAgICAgICAgICAgICAgaWYgKCEodHlwZSBpbnN0YW5jZW9mIE5hbWUpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlhPYmplY3Qgc2hvdWxkIGhhdmUgYSBOYW1lIHN1YnR5cGUiKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHR5cGUubmFtZSA9PT0gIkZvcm0iKSB7CiAgICAgICAgICAgICAgICBzdGF0ZU1hbmFnZXIuc2F2ZSgpOwogICAgICAgICAgICAgICAgc2VsZi5idWlsZEZvcm1YT2JqZWN0KHJlc291cmNlcywgeG9iaiwgbnVsbCwgb3BlcmF0b3JMaXN0LCB0YXNrLCBzdGF0ZU1hbmFnZXIuc3RhdGUuY2xvbmUoewogICAgICAgICAgICAgICAgICBuZXdQYXRoOiB0cnVlCiAgICAgICAgICAgICAgICB9KSwgbG9jYWxDb2xvclNwYWNlQ2FjaGUpLnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICBzdGF0ZU1hbmFnZXIucmVzdG9yZSgpOwogICAgICAgICAgICAgICAgICByZXNvbHZlWE9iamVjdCgpOwogICAgICAgICAgICAgICAgfSwgcmVqZWN0WE9iamVjdCk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlLm5hbWUgPT09ICJJbWFnZSIpIHsKICAgICAgICAgICAgICAgIHNlbGYuYnVpbGRQYWludEltYWdlWE9iamVjdCh7CiAgICAgICAgICAgICAgICAgIHJlc291cmNlcywKICAgICAgICAgICAgICAgICAgaW1hZ2U6IHhvYmosCiAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdCwKICAgICAgICAgICAgICAgICAgY2FjaGVLZXk6IG5hbWUsCiAgICAgICAgICAgICAgICAgIGxvY2FsSW1hZ2VDYWNoZSwKICAgICAgICAgICAgICAgICAgbG9jYWxDb2xvclNwYWNlQ2FjaGUKICAgICAgICAgICAgICAgIH0pLnRoZW4ocmVzb2x2ZVhPYmplY3QsIHJlamVjdFhPYmplY3QpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZS5uYW1lID09PSAiUFMiKSB7CiAgICAgICAgICAgICAgICBpbmZvKCJJZ25vcmVkIFhPYmplY3Qgc3VidHlwZSBQUyIpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYFVuaGFuZGxlZCBYT2JqZWN0IHN1YnR5cGUgJHt0eXBlLm5hbWV9YCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJlc29sdmVYT2JqZWN0KCk7CiAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChyZWFzb24pIHsKICAgICAgICAgICAgICBpZiAocmVhc29uIGluc3RhbmNlb2YgQWJvcnRFeGNlcHRpb24pIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHNlbGYub3B0aW9ucy5pZ25vcmVFcnJvcnMpIHsKICAgICAgICAgICAgICAgIHdhcm4oYGdldE9wZXJhdG9yTGlzdCAtIGlnbm9yaW5nIFhPYmplY3Q6ICIke3JlYXNvbn0iLmApOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB0aHJvdyByZWFzb247CiAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY2FzZSBPUFMuc2V0Rm9udDoKICAgICAgICAgICAgY29uc3QgZm9udFNpemUgPSBhcmdzWzFdOwogICAgICAgICAgICBuZXh0KHNlbGYuaGFuZGxlU2V0Rm9udChyZXNvdXJjZXMsIGFyZ3MsIG51bGwsIG9wZXJhdG9yTGlzdCwgdGFzaywgc3RhdGVNYW5hZ2VyLnN0YXRlLCBmYWxsYmFja0ZvbnREaWN0KS50aGVuKGZ1bmN0aW9uIChsb2FkZWROYW1lKSB7CiAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZERlcGVuZGVuY3kobG9hZGVkTmFtZSk7CiAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKE9QUy5zZXRGb250LCBbbG9hZGVkTmFtZSwgZm9udFNpemVdKTsKICAgICAgICAgICAgfSkpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjYXNlIE9QUy5lbmRJbmxpbmVJbWFnZToKICAgICAgICAgICAgY29uc3QgY2FjaGVLZXkgPSBhcmdzWzBdLmNhY2hlS2V5OwogICAgICAgICAgICBpZiAoY2FjaGVLZXkpIHsKICAgICAgICAgICAgICBjb25zdCBsb2NhbEltYWdlID0gbG9jYWxJbWFnZUNhY2hlLmdldEJ5TmFtZShjYWNoZUtleSk7CiAgICAgICAgICAgICAgaWYgKGxvY2FsSW1hZ2UpIHsKICAgICAgICAgICAgICAgIGFkZExvY2FsbHlDYWNoZWRJbWFnZU9wcyhvcGVyYXRvckxpc3QsIGxvY2FsSW1hZ2UpOwogICAgICAgICAgICAgICAgYXJncyA9IG51bGw7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbmV4dChzZWxmLmJ1aWxkUGFpbnRJbWFnZVhPYmplY3QoewogICAgICAgICAgICAgIHJlc291cmNlcywKICAgICAgICAgICAgICBpbWFnZTogYXJnc1swXSwKICAgICAgICAgICAgICBpc0lubGluZTogdHJ1ZSwKICAgICAgICAgICAgICBvcGVyYXRvckxpc3QsCiAgICAgICAgICAgICAgY2FjaGVLZXksCiAgICAgICAgICAgICAgbG9jYWxJbWFnZUNhY2hlLAogICAgICAgICAgICAgIGxvY2FsQ29sb3JTcGFjZUNhY2hlCiAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY2FzZSBPUFMuc2hvd1RleHQ6CiAgICAgICAgICAgIGlmICghc3RhdGVNYW5hZ2VyLnN0YXRlLmZvbnQpIHsKICAgICAgICAgICAgICBzZWxmLmVuc3VyZVN0YXRlRm9udChzdGF0ZU1hbmFnZXIuc3RhdGUpOwogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGFyZ3NbMF0gPSBzZWxmLmhhbmRsZVRleHQoYXJnc1swXSwgc3RhdGVNYW5hZ2VyLnN0YXRlKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIE9QUy5zaG93U3BhY2VkVGV4dDoKICAgICAgICAgICAgaWYgKCFzdGF0ZU1hbmFnZXIuc3RhdGUuZm9udCkgewogICAgICAgICAgICAgIHNlbGYuZW5zdXJlU3RhdGVGb250KHN0YXRlTWFuYWdlci5zdGF0ZSk7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgY29tYmluZWRHbHlwaHMgPSBbXSwKICAgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlTWFuYWdlci5zdGF0ZTsKICAgICAgICAgICAgZm9yIChjb25zdCBhcnJJdGVtIG9mIGFyZ3NbMF0pIHsKICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyckl0ZW0gPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgICAgICBjb21iaW5lZEdseXBocy5wdXNoKC4uLnNlbGYuaGFuZGxlVGV4dChhcnJJdGVtLCBzdGF0ZSkpOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyckl0ZW0gPT09ICJudW1iZXIiKSB7CiAgICAgICAgICAgICAgICBjb21iaW5lZEdseXBocy5wdXNoKGFyckl0ZW0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBhcmdzWzBdID0gY29tYmluZWRHbHlwaHM7CiAgICAgICAgICAgIGZuID0gT1BTLnNob3dUZXh0OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgT1BTLm5leHRMaW5lU2hvd1RleHQ6CiAgICAgICAgICAgIGlmICghc3RhdGVNYW5hZ2VyLnN0YXRlLmZvbnQpIHsKICAgICAgICAgICAgICBzZWxmLmVuc3VyZVN0YXRlRm9udChzdGF0ZU1hbmFnZXIuc3RhdGUpOwogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChPUFMubmV4dExpbmUpOwogICAgICAgICAgICBhcmdzWzBdID0gc2VsZi5oYW5kbGVUZXh0KGFyZ3NbMF0sIHN0YXRlTWFuYWdlci5zdGF0ZSk7CiAgICAgICAgICAgIGZuID0gT1BTLnNob3dUZXh0OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgT1BTLm5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0OgogICAgICAgICAgICBpZiAoIXN0YXRlTWFuYWdlci5zdGF0ZS5mb250KSB7CiAgICAgICAgICAgICAgc2VsZi5lbnN1cmVTdGF0ZUZvbnQoc3RhdGVNYW5hZ2VyLnN0YXRlKTsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoT1BTLm5leHRMaW5lKTsKICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKE9QUy5zZXRXb3JkU3BhY2luZywgW2FyZ3Muc2hpZnQoKV0pOwogICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoT1BTLnNldENoYXJTcGFjaW5nLCBbYXJncy5zaGlmdCgpXSk7CiAgICAgICAgICAgIGFyZ3NbMF0gPSBzZWxmLmhhbmRsZVRleHQoYXJnc1swXSwgc3RhdGVNYW5hZ2VyLnN0YXRlKTsKICAgICAgICAgICAgZm4gPSBPUFMuc2hvd1RleHQ7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBPUFMuc2V0VGV4dFJlbmRlcmluZ01vZGU6CiAgICAgICAgICAgIHN0YXRlTWFuYWdlci5zdGF0ZS50ZXh0UmVuZGVyaW5nTW9kZSA9IGFyZ3NbMF07CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBPUFMuc2V0RmlsbENvbG9yU3BhY2U6CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBmaWxsQ1MgPSBzZWxmLl9nZXRDb2xvclNwYWNlKGFyZ3NbMF0sIHJlc291cmNlcywgbG9jYWxDb2xvclNwYWNlQ2FjaGUpOwogICAgICAgICAgICAgIGlmIChmaWxsQ1MgaW5zdGFuY2VvZiBDb2xvclNwYWNlKSB7CiAgICAgICAgICAgICAgICBzdGF0ZU1hbmFnZXIuc3RhdGUuZmlsbENvbG9yU3BhY2UgPSBmaWxsQ1M7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgbmV4dChzZWxmLl9oYW5kbGVDb2xvclNwYWNlKGZpbGxDUykudGhlbihjb2xvclNwYWNlID0+IHsKICAgICAgICAgICAgICAgIHN0YXRlTWFuYWdlci5zdGF0ZS5maWxsQ29sb3JTcGFjZSA9IGNvbG9yU3BhY2UgfHwgQ29sb3JTcGFjZVV0aWxzLmdyYXk7CiAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgY2FzZSBPUFMuc2V0U3Ryb2tlQ29sb3JTcGFjZToKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IHN0cm9rZUNTID0gc2VsZi5fZ2V0Q29sb3JTcGFjZShhcmdzWzBdLCByZXNvdXJjZXMsIGxvY2FsQ29sb3JTcGFjZUNhY2hlKTsKICAgICAgICAgICAgICBpZiAoc3Ryb2tlQ1MgaW5zdGFuY2VvZiBDb2xvclNwYWNlKSB7CiAgICAgICAgICAgICAgICBzdGF0ZU1hbmFnZXIuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZSA9IHN0cm9rZUNTOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIG5leHQoc2VsZi5faGFuZGxlQ29sb3JTcGFjZShzdHJva2VDUykudGhlbihjb2xvclNwYWNlID0+IHsKICAgICAgICAgICAgICAgIHN0YXRlTWFuYWdlci5zdGF0ZS5zdHJva2VDb2xvclNwYWNlID0gY29sb3JTcGFjZSB8fCBDb2xvclNwYWNlVXRpbHMuZ3JheTsKICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXNlIE9QUy5zZXRGaWxsQ29sb3I6CiAgICAgICAgICAgIGNzID0gc3RhdGVNYW5hZ2VyLnN0YXRlLmZpbGxDb2xvclNwYWNlOwogICAgICAgICAgICBhcmdzID0gY3MuZ2V0UmdiKGFyZ3MsIDApOwogICAgICAgICAgICBmbiA9IE9QUy5zZXRGaWxsUkdCQ29sb3I7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBPUFMuc2V0U3Ryb2tlQ29sb3I6CiAgICAgICAgICAgIGNzID0gc3RhdGVNYW5hZ2VyLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U7CiAgICAgICAgICAgIGFyZ3MgPSBjcy5nZXRSZ2IoYXJncywgMCk7CiAgICAgICAgICAgIGZuID0gT1BTLnNldFN0cm9rZVJHQkNvbG9yOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgT1BTLnNldEZpbGxHcmF5OgogICAgICAgICAgICBzdGF0ZU1hbmFnZXIuc3RhdGUuZmlsbENvbG9yU3BhY2UgPSBDb2xvclNwYWNlVXRpbHMuZ3JheTsKICAgICAgICAgICAgYXJncyA9IENvbG9yU3BhY2VVdGlscy5ncmF5LmdldFJnYihhcmdzLCAwKTsKICAgICAgICAgICAgZm4gPSBPUFMuc2V0RmlsbFJHQkNvbG9yOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgT1BTLnNldFN0cm9rZUdyYXk6CiAgICAgICAgICAgIHN0YXRlTWFuYWdlci5zdGF0ZS5zdHJva2VDb2xvclNwYWNlID0gQ29sb3JTcGFjZVV0aWxzLmdyYXk7CiAgICAgICAgICAgIGFyZ3MgPSBDb2xvclNwYWNlVXRpbHMuZ3JheS5nZXRSZ2IoYXJncywgMCk7CiAgICAgICAgICAgIGZuID0gT1BTLnNldFN0cm9rZVJHQkNvbG9yOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgT1BTLnNldEZpbGxDTVlLQ29sb3I6CiAgICAgICAgICAgIHN0YXRlTWFuYWdlci5zdGF0ZS5maWxsQ29sb3JTcGFjZSA9IENvbG9yU3BhY2VVdGlscy5jbXlrOwogICAgICAgICAgICBhcmdzID0gQ29sb3JTcGFjZVV0aWxzLmNteWsuZ2V0UmdiKGFyZ3MsIDApOwogICAgICAgICAgICBmbiA9IE9QUy5zZXRGaWxsUkdCQ29sb3I7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBPUFMuc2V0U3Ryb2tlQ01ZS0NvbG9yOgogICAgICAgICAgICBzdGF0ZU1hbmFnZXIuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZSA9IENvbG9yU3BhY2VVdGlscy5jbXlrOwogICAgICAgICAgICBhcmdzID0gQ29sb3JTcGFjZVV0aWxzLmNteWsuZ2V0UmdiKGFyZ3MsIDApOwogICAgICAgICAgICBmbiA9IE9QUy5zZXRTdHJva2VSR0JDb2xvcjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIE9QUy5zZXRGaWxsUkdCQ29sb3I6CiAgICAgICAgICAgIHN0YXRlTWFuYWdlci5zdGF0ZS5maWxsQ29sb3JTcGFjZSA9IENvbG9yU3BhY2VVdGlscy5yZ2I7CiAgICAgICAgICAgIGFyZ3MgPSBDb2xvclNwYWNlVXRpbHMucmdiLmdldFJnYihhcmdzLCAwKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIE9QUy5zZXRTdHJva2VSR0JDb2xvcjoKICAgICAgICAgICAgc3RhdGVNYW5hZ2VyLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2UgPSBDb2xvclNwYWNlVXRpbHMucmdiOwogICAgICAgICAgICBhcmdzID0gQ29sb3JTcGFjZVV0aWxzLnJnYi5nZXRSZ2IoYXJncywgMCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBPUFMuc2V0RmlsbENvbG9yTjoKICAgICAgICAgICAgY3MgPSBzdGF0ZU1hbmFnZXIuc3RhdGUucGF0dGVybkZpbGxDb2xvclNwYWNlOwogICAgICAgICAgICBpZiAoIWNzKSB7CiAgICAgICAgICAgICAgaWYgKGlzTnVtYmVyQXJyYXkoYXJncywgbnVsbCkpIHsKICAgICAgICAgICAgICAgIGFyZ3MgPSBDb2xvclNwYWNlVXRpbHMuZ3JheS5nZXRSZ2IoYXJncywgMCk7CiAgICAgICAgICAgICAgICBmbiA9IE9QUy5zZXRGaWxsUkdCQ29sb3I7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYXJncyA9IFtdOwogICAgICAgICAgICAgIGZuID0gT1BTLnNldEZpbGxUcmFuc3BhcmVudDsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoY3MubmFtZSA9PT0gIlBhdHRlcm4iKSB7CiAgICAgICAgICAgICAgbmV4dChzZWxmLmhhbmRsZUNvbG9yTihvcGVyYXRvckxpc3QsIE9QUy5zZXRGaWxsQ29sb3JOLCBhcmdzLCBjcywgcGF0dGVybnMsIHJlc291cmNlcywgdGFzaywgbG9jYWxDb2xvclNwYWNlQ2FjaGUsIGxvY2FsVGlsaW5nUGF0dGVybkNhY2hlLCBsb2NhbFNoYWRpbmdQYXR0ZXJuQ2FjaGUpKTsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYXJncyA9IGNzLmdldFJnYihhcmdzLCAwKTsKICAgICAgICAgICAgZm4gPSBPUFMuc2V0RmlsbFJHQkNvbG9yOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgT1BTLnNldFN0cm9rZUNvbG9yTjoKICAgICAgICAgICAgY3MgPSBzdGF0ZU1hbmFnZXIuc3RhdGUucGF0dGVyblN0cm9rZUNvbG9yU3BhY2U7CiAgICAgICAgICAgIGlmICghY3MpIHsKICAgICAgICAgICAgICBpZiAoaXNOdW1iZXJBcnJheShhcmdzLCBudWxsKSkgewogICAgICAgICAgICAgICAgYXJncyA9IENvbG9yU3BhY2VVdGlscy5ncmF5LmdldFJnYihhcmdzLCAwKTsKICAgICAgICAgICAgICAgIGZuID0gT1BTLnNldFN0cm9rZVJHQkNvbG9yOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGFyZ3MgPSBbXTsKICAgICAgICAgICAgICBmbiA9IE9QUy5zZXRTdHJva2VUcmFuc3BhcmVudDsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoY3MubmFtZSA9PT0gIlBhdHRlcm4iKSB7CiAgICAgICAgICAgICAgbmV4dChzZWxmLmhhbmRsZUNvbG9yTihvcGVyYXRvckxpc3QsIE9QUy5zZXRTdHJva2VDb2xvck4sIGFyZ3MsIGNzLCBwYXR0ZXJucywgcmVzb3VyY2VzLCB0YXNrLCBsb2NhbENvbG9yU3BhY2VDYWNoZSwgbG9jYWxUaWxpbmdQYXR0ZXJuQ2FjaGUsIGxvY2FsU2hhZGluZ1BhdHRlcm5DYWNoZSkpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBhcmdzID0gY3MuZ2V0UmdiKGFyZ3MsIDApOwogICAgICAgICAgICBmbiA9IE9QUy5zZXRTdHJva2VSR0JDb2xvcjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIE9QUy5zaGFkaW5nRmlsbDoKICAgICAgICAgICAgbGV0IHNoYWRpbmc7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgY29uc3Qgc2hhZGluZ1JlcyA9IHJlc291cmNlcy5nZXQoIlNoYWRpbmciKTsKICAgICAgICAgICAgICBpZiAoIXNoYWRpbmdSZXMpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiTm8gc2hhZGluZyByZXNvdXJjZSBmb3VuZCIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBzaGFkaW5nID0gc2hhZGluZ1Jlcy5nZXQoYXJnc1swXS5uYW1lKTsKICAgICAgICAgICAgICBpZiAoIXNoYWRpbmcpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiTm8gc2hhZGluZyBvYmplY3QgZm91bmQiKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gY2F0Y2ggKHJlYXNvbikgewogICAgICAgICAgICAgIGlmIChyZWFzb24gaW5zdGFuY2VvZiBBYm9ydEV4Y2VwdGlvbikgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChzZWxmLm9wdGlvbnMuaWdub3JlRXJyb3JzKSB7CiAgICAgICAgICAgICAgICB3YXJuKGBnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBTaGFkaW5nOiAiJHtyZWFzb259Ii5gKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB0aHJvdyByZWFzb247CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgcGF0dGVybklkID0gc2VsZi5wYXJzZVNoYWRpbmcoewogICAgICAgICAgICAgIHNoYWRpbmcsCiAgICAgICAgICAgICAgcmVzb3VyY2VzLAogICAgICAgICAgICAgIGxvY2FsQ29sb3JTcGFjZUNhY2hlLAogICAgICAgICAgICAgIGxvY2FsU2hhZGluZ1BhdHRlcm5DYWNoZQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaWYgKCFwYXR0ZXJuSWQpIHsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBhcmdzID0gW3BhdHRlcm5JZF07CiAgICAgICAgICAgIGZuID0gT1BTLnNoYWRpbmdGaWxsOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgT1BTLnNldEdTdGF0ZToKICAgICAgICAgICAgaXNWYWxpZE5hbWUgPSBhcmdzWzBdIGluc3RhbmNlb2YgTmFtZTsKICAgICAgICAgICAgbmFtZSA9IGFyZ3NbMF0ubmFtZTsKICAgICAgICAgICAgaWYgKGlzVmFsaWROYW1lKSB7CiAgICAgICAgICAgICAgY29uc3QgbG9jYWxHU3RhdGVPYmogPSBsb2NhbEdTdGF0ZUNhY2hlLmdldEJ5TmFtZShuYW1lKTsKICAgICAgICAgICAgICBpZiAobG9jYWxHU3RhdGVPYmopIHsKICAgICAgICAgICAgICAgIGlmIChsb2NhbEdTdGF0ZU9iai5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChPUFMuc2V0R1N0YXRlLCBbbG9jYWxHU3RhdGVPYmpdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGFyZ3MgPSBudWxsOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIG5leHQobmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmVHU3RhdGUsIHJlamVjdEdTdGF0ZSkgewogICAgICAgICAgICAgIGlmICghaXNWYWxpZE5hbWUpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiR1N0YXRlIG11c3QgYmUgcmVmZXJyZWQgdG8gYnkgbmFtZS4iKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgY29uc3QgZXh0R1N0YXRlID0gcmVzb3VyY2VzLmdldCgiRXh0R1N0YXRlIik7CiAgICAgICAgICAgICAgaWYgKCEoZXh0R1N0YXRlIGluc3RhbmNlb2YgRGljdCkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiRXh0R1N0YXRlIHNob3VsZCBiZSBhIGRpY3Rpb25hcnkuIik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGNvbnN0IGdTdGF0ZSA9IGV4dEdTdGF0ZS5nZXQobmFtZSk7CiAgICAgICAgICAgICAgaWYgKCEoZ1N0YXRlIGluc3RhbmNlb2YgRGljdCkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiR1N0YXRlIHNob3VsZCBiZSBhIGRpY3Rpb25hcnkuIik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHNlbGYuc2V0R1N0YXRlKHsKICAgICAgICAgICAgICAgIHJlc291cmNlcywKICAgICAgICAgICAgICAgIGdTdGF0ZSwKICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdCwKICAgICAgICAgICAgICAgIGNhY2hlS2V5OiBuYW1lLAogICAgICAgICAgICAgICAgdGFzaywKICAgICAgICAgICAgICAgIHN0YXRlTWFuYWdlciwKICAgICAgICAgICAgICAgIGxvY2FsR1N0YXRlQ2FjaGUsCiAgICAgICAgICAgICAgICBsb2NhbENvbG9yU3BhY2VDYWNoZQogICAgICAgICAgICAgIH0pLnRoZW4ocmVzb2x2ZUdTdGF0ZSwgcmVqZWN0R1N0YXRlKTsKICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikgewogICAgICAgICAgICAgIGlmIChyZWFzb24gaW5zdGFuY2VvZiBBYm9ydEV4Y2VwdGlvbikgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoc2VsZi5vcHRpb25zLmlnbm9yZUVycm9ycykgewogICAgICAgICAgICAgICAgd2FybihgZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3JpbmcgRXh0R1N0YXRlOiAiJHtyZWFzb259Ii5gKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgdGhyb3cgcmVhc29uOwogICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGNhc2UgT1BTLnNldExpbmVXaWR0aDoKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IFt0aGlja25lc3NdID0gYXJnczsKICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaWNrbmVzcyAhPT0gIm51bWJlciIpIHsKICAgICAgICAgICAgICAgIHdhcm4oYEludmFsaWQgc2V0TGluZVdpZHRoOiAke3RoaWNrbmVzc31gKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBhcmdzWzBdID0gTWF0aC5hYnModGhpY2tuZXNzKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgY2FzZSBPUFMubW92ZVRvOgogICAgICAgICAgY2FzZSBPUFMubGluZVRvOgogICAgICAgICAgY2FzZSBPUFMuY3VydmVUbzoKICAgICAgICAgIGNhc2UgT1BTLmN1cnZlVG8yOgogICAgICAgICAgY2FzZSBPUFMuY3VydmVUbzM6CiAgICAgICAgICBjYXNlIE9QUy5jbG9zZVBhdGg6CiAgICAgICAgICBjYXNlIE9QUy5yZWN0YW5nbGU6CiAgICAgICAgICAgIHNlbGYuYnVpbGRQYXRoKGZuLCBhcmdzLCBzdGF0ZU1hbmFnZXIuc3RhdGUpOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIGNhc2UgT1BTLnN0cm9rZToKICAgICAgICAgIGNhc2UgT1BTLmNsb3NlU3Ryb2tlOgogICAgICAgICAgY2FzZSBPUFMuZmlsbDoKICAgICAgICAgIGNhc2UgT1BTLmVvRmlsbDoKICAgICAgICAgIGNhc2UgT1BTLmZpbGxTdHJva2U6CiAgICAgICAgICBjYXNlIE9QUy5lb0ZpbGxTdHJva2U6CiAgICAgICAgICBjYXNlIE9QUy5jbG9zZUZpbGxTdHJva2U6CiAgICAgICAgICBjYXNlIE9QUy5jbG9zZUVPRmlsbFN0cm9rZToKICAgICAgICAgIGNhc2UgT1BTLmVuZFBhdGg6CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCB7CiAgICAgICAgICAgICAgICBzdGF0ZTogewogICAgICAgICAgICAgICAgICBwYXRoQnVmZmVyLAogICAgICAgICAgICAgICAgICBwYXRoTWluTWF4CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSA9IHN0YXRlTWFuYWdlcjsKICAgICAgICAgICAgICBpZiAoZm4gPT09IE9QUy5jbG9zZVN0cm9rZSB8fCBmbiA9PT0gT1BTLmNsb3NlRmlsbFN0cm9rZSB8fCBmbiA9PT0gT1BTLmNsb3NlRU9GaWxsU3Ryb2tlKSB7CiAgICAgICAgICAgICAgICBwYXRoQnVmZmVyLnB1c2goRHJhd09QUy5jbG9zZVBhdGgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAocGF0aEJ1ZmZlci5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChPUFMuY29uc3RydWN0UGF0aCwgW2ZuLCBbbnVsbF0sIG51bGxdKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKE9QUy5jb25zdHJ1Y3RQYXRoLCBbZm4sIFtuZXcgRmxvYXQzMkFycmF5KHBhdGhCdWZmZXIpXSwgcGF0aE1pbk1heC5zbGljZSgpXSk7CiAgICAgICAgICAgICAgICBwYXRoQnVmZmVyLmxlbmd0aCA9IDA7CiAgICAgICAgICAgICAgICBwYXRoTWluTWF4LnNldChbSW5maW5pdHksIEluZmluaXR5LCAtSW5maW5pdHksIC1JbmZpbml0eV0sIDApOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgY2FzZSBPUFMubWFya1BvaW50OgogICAgICAgICAgY2FzZSBPUFMubWFya1BvaW50UHJvcHM6CiAgICAgICAgICBjYXNlIE9QUy5iZWdpbkNvbXBhdDoKICAgICAgICAgIGNhc2UgT1BTLmVuZENvbXBhdDoKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICBjYXNlIE9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wczoKICAgICAgICAgICAgaWYgKCEoYXJnc1swXSBpbnN0YW5jZW9mIE5hbWUpKSB7CiAgICAgICAgICAgICAgd2FybihgRXhwZWN0ZWQgbmFtZSBmb3IgYmVnaW5NYXJrZWRDb250ZW50UHJvcHMgYXJnMD0ke2FyZ3NbMF19YCk7CiAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKE9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wcywgWyJPQyIsIG51bGxdKTsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoYXJnc1swXS5uYW1lID09PSAiT0MiKSB7CiAgICAgICAgICAgICAgbmV4dChzZWxmLnBhcnNlTWFya2VkQ29udGVudFByb3BzKGFyZ3NbMV0sIHJlc291cmNlcykudGhlbihkYXRhID0+IHsKICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChPUFMuYmVnaW5NYXJrZWRDb250ZW50UHJvcHMsIFsiT0MiLCBkYXRhXSk7CiAgICAgICAgICAgICAgfSkuY2F0Y2gocmVhc29uID0+IHsKICAgICAgICAgICAgICAgIGlmIChyZWFzb24gaW5zdGFuY2VvZiBBYm9ydEV4Y2VwdGlvbikgewogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc2VsZi5vcHRpb25zLmlnbm9yZUVycm9ycykgewogICAgICAgICAgICAgICAgICB3YXJuKGBnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBiZWdpbk1hcmtlZENvbnRlbnRQcm9wczogIiR7cmVhc29ufSIuYCk7CiAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChPUFMuYmVnaW5NYXJrZWRDb250ZW50UHJvcHMsIFsiT0MiLCBudWxsXSk7CiAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRocm93IHJlYXNvbjsKICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGFyZ3MgPSBbYXJnc1swXS5uYW1lLCBhcmdzWzFdIGluc3RhbmNlb2YgRGljdCA/IGFyZ3NbMV0uZ2V0KCJNQ0lEIikgOiBudWxsXTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIE9QUy5iZWdpbk1hcmtlZENvbnRlbnQ6CiAgICAgICAgICBjYXNlIE9QUy5lbmRNYXJrZWRDb250ZW50OgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgaWYgKGFyZ3MgIT09IG51bGwpIHsKICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGFyZ3MubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICAgICAgICAgICAgaWYgKGFyZ3NbaV0gaW5zdGFuY2VvZiBEaWN0KSB7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoaSA8IGlpKSB7CiAgICAgICAgICAgICAgICB3YXJuKCJnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBvcGVyYXRvcjogIiArIGZuKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoZm4sIGFyZ3MpOwogICAgICB9CiAgICAgIGlmIChzdG9wKSB7CiAgICAgICAgbmV4dChkZWZlcnJlZCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNsb3NlUGVuZGluZ1Jlc3RvcmVPUFMoKTsKICAgICAgcmVzb2x2ZSgpOwogICAgfSkuY2F0Y2gocmVhc29uID0+IHsKICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIEFib3J0RXhjZXB0aW9uKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKSB7CiAgICAgICAgd2FybihgZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3JpbmcgZXJyb3JzIGR1cmluZyAiJHt0YXNrLm5hbWV9IiBgICsgYHRhc2s6ICIke3JlYXNvbn0iLmApOwogICAgICAgIGNsb3NlUGVuZGluZ1Jlc3RvcmVPUFMoKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhyb3cgcmVhc29uOwogICAgfSk7CiAgfQogIGdldFRleHRDb250ZW50KHsKICAgIHN0cmVhbSwKICAgIHRhc2ssCiAgICByZXNvdXJjZXMsCiAgICBzdGF0ZU1hbmFnZXIgPSBudWxsLAogICAgaW5jbHVkZU1hcmtlZENvbnRlbnQgPSBmYWxzZSwKICAgIHNpbmssCiAgICBzZWVuU3R5bGVzID0gbmV3IFNldCgpLAogICAgdmlld0JveCwKICAgIGxhbmcgPSBudWxsLAogICAgbWFya2VkQ29udGVudERhdGEgPSBudWxsLAogICAgZGlzYWJsZU5vcm1hbGl6YXRpb24gPSBmYWxzZSwKICAgIGtlZXBXaGl0ZVNwYWNlID0gZmFsc2UKICB9KSB7CiAgICByZXNvdXJjZXMgfHw9IERpY3QuZW1wdHk7CiAgICBzdGF0ZU1hbmFnZXIgfHw9IG5ldyBTdGF0ZU1hbmFnZXIobmV3IFRleHRTdGF0ZSgpKTsKICAgIGlmIChpbmNsdWRlTWFya2VkQ29udGVudCkgewogICAgICBtYXJrZWRDb250ZW50RGF0YSB8fD0gewogICAgICAgIGxldmVsOiAwCiAgICAgIH07CiAgICB9CiAgICBjb25zdCB0ZXh0Q29udGVudCA9IHsKICAgICAgaXRlbXM6IFtdLAogICAgICBzdHlsZXM6IE9iamVjdC5jcmVhdGUobnVsbCksCiAgICAgIGxhbmcKICAgIH07CiAgICBjb25zdCB0ZXh0Q29udGVudEl0ZW0gPSB7CiAgICAgIGluaXRpYWxpemVkOiBmYWxzZSwKICAgICAgc3RyOiBbXSwKICAgICAgdG90YWxXaWR0aDogMCwKICAgICAgdG90YWxIZWlnaHQ6IDAsCiAgICAgIHdpZHRoOiAwLAogICAgICBoZWlnaHQ6IDAsCiAgICAgIHZlcnRpY2FsOiBmYWxzZSwKICAgICAgcHJldlRyYW5zZm9ybTogbnVsbCwKICAgICAgdGV4dEFkdmFuY2VTY2FsZTogMCwKICAgICAgc3BhY2VJbkZsb3dNaW46IDAsCiAgICAgIHNwYWNlSW5GbG93TWF4OiAwLAogICAgICB0cmFja2luZ1NwYWNlTWluOiBJbmZpbml0eSwKICAgICAgbmVnYXRpdmVTcGFjZU1heDogLUluZmluaXR5LAogICAgICBub3RBU3BhY2U6IC1JbmZpbml0eSwKICAgICAgdHJhbnNmb3JtOiBudWxsLAogICAgICBmb250TmFtZTogbnVsbCwKICAgICAgaGFzRU9MOiBmYWxzZQogICAgfTsKICAgIGNvbnN0IHR3b0xhc3RDaGFycyA9IFsiICIsICIgIl07CiAgICBsZXQgdHdvTGFzdENoYXJzUG9zID0gMDsKICAgIGZ1bmN0aW9uIHNhdmVMYXN0Q2hhcihjaGFyKSB7CiAgICAgIGNvbnN0IG5leHRQb3MgPSAodHdvTGFzdENoYXJzUG9zICsgMSkgJSAyOwogICAgICBjb25zdCByZXQgPSB0d29MYXN0Q2hhcnNbdHdvTGFzdENoYXJzUG9zXSAhPT0gIiAiICYmIHR3b0xhc3RDaGFyc1tuZXh0UG9zXSA9PT0gIiAiOwogICAgICB0d29MYXN0Q2hhcnNbdHdvTGFzdENoYXJzUG9zXSA9IGNoYXI7CiAgICAgIHR3b0xhc3RDaGFyc1BvcyA9IG5leHRQb3M7CiAgICAgIHJldHVybiAha2VlcFdoaXRlU3BhY2UgJiYgcmV0OwogICAgfQogICAgZnVuY3Rpb24gc2hvdWxkQWRkV2hpdGVwc2FjZSgpIHsKICAgICAgcmV0dXJuICFrZWVwV2hpdGVTcGFjZSAmJiB0d29MYXN0Q2hhcnNbdHdvTGFzdENoYXJzUG9zXSAhPT0gIiAiICYmIHR3b0xhc3RDaGFyc1sodHdvTGFzdENoYXJzUG9zICsgMSkgJSAyXSA9PT0gIiAiOwogICAgfQogICAgZnVuY3Rpb24gcmVzZXRMYXN0Q2hhcnMoKSB7CiAgICAgIHR3b0xhc3RDaGFyc1swXSA9IHR3b0xhc3RDaGFyc1sxXSA9ICIgIjsKICAgICAgdHdvTGFzdENoYXJzUG9zID0gMDsKICAgIH0KICAgIGNvbnN0IFRSQUNLSU5HX1NQQUNFX0ZBQ1RPUiA9IDAuMTAyOwogICAgY29uc3QgTk9UX0FfU1BBQ0VfRkFDVE9SID0gMC4wMzsKICAgIGNvbnN0IE5FR0FUSVZFX1NQQUNFX0ZBQ1RPUiA9IC0wLjI7CiAgICBjb25zdCBTUEFDRV9JTl9GTE9XX01JTl9GQUNUT1IgPSAwLjEwMjsKICAgIGNvbnN0IFNQQUNFX0lOX0ZMT1dfTUFYX0ZBQ1RPUiA9IDAuNjsKICAgIGNvbnN0IFZFUlRJQ0FMX1NISUZUX1JBVElPID0gMC4yNTsKICAgIGNvbnN0IHNlbGYgPSB0aGlzOwogICAgY29uc3QgeHJlZiA9IHRoaXMueHJlZjsKICAgIGNvbnN0IHNob3dTcGFjZWRUZXh0QnVmZmVyID0gW107CiAgICBsZXQgeG9ianMgPSBudWxsOwogICAgY29uc3QgZW1wdHlYT2JqZWN0Q2FjaGUgPSBuZXcgTG9jYWxJbWFnZUNhY2hlKCk7CiAgICBjb25zdCBlbXB0eUdTdGF0ZUNhY2hlID0gbmV3IExvY2FsR1N0YXRlQ2FjaGUoKTsKICAgIGNvbnN0IHByZXByb2Nlc3NvciA9IG5ldyBFdmFsdWF0b3JQcmVwcm9jZXNzb3Ioc3RyZWFtLCB4cmVmLCBzdGF0ZU1hbmFnZXIpOwogICAgbGV0IHRleHRTdGF0ZTsKICAgIGZ1bmN0aW9uIHB1c2hXaGl0ZXNwYWNlKHsKICAgICAgd2lkdGggPSAwLAogICAgICBoZWlnaHQgPSAwLAogICAgICB0cmFuc2Zvcm0gPSB0ZXh0Q29udGVudEl0ZW0ucHJldlRyYW5zZm9ybSwKICAgICAgZm9udE5hbWUgPSB0ZXh0Q29udGVudEl0ZW0uZm9udE5hbWUKICAgIH0pIHsKICAgICAgdGV4dENvbnRlbnQuaXRlbXMucHVzaCh7CiAgICAgICAgc3RyOiAiICIsCiAgICAgICAgZGlyOiAibHRyIiwKICAgICAgICB3aWR0aCwKICAgICAgICBoZWlnaHQsCiAgICAgICAgdHJhbnNmb3JtLAogICAgICAgIGZvbnROYW1lLAogICAgICAgIGhhc0VPTDogZmFsc2UKICAgICAgfSk7CiAgICB9CiAgICBmdW5jdGlvbiBnZXRDdXJyZW50VGV4dFRyYW5zZm9ybSgpIHsKICAgICAgY29uc3QgZm9udCA9IHRleHRTdGF0ZS5mb250OwogICAgICBjb25zdCB0c20gPSBbdGV4dFN0YXRlLmZvbnRTaXplICogdGV4dFN0YXRlLnRleHRIU2NhbGUsIDAsIDAsIHRleHRTdGF0ZS5mb250U2l6ZSwgMCwgdGV4dFN0YXRlLnRleHRSaXNlXTsKICAgICAgaWYgKGZvbnQuaXNUeXBlM0ZvbnQgJiYgKHRleHRTdGF0ZS5mb250U2l6ZSA8PSAxIHx8IGZvbnQuaXNDaGFyQkJveCkgJiYgIWlzQXJyYXlFcXVhbCh0ZXh0U3RhdGUuZm9udE1hdHJpeCwgRk9OVF9JREVOVElUWV9NQVRSSVgpKSB7CiAgICAgICAgY29uc3QgZ2x5cGhIZWlnaHQgPSBmb250LmJib3hbM10gLSBmb250LmJib3hbMV07CiAgICAgICAgaWYgKGdseXBoSGVpZ2h0ID4gMCkgewogICAgICAgICAgdHNtWzNdICo9IGdseXBoSGVpZ2h0ICogdGV4dFN0YXRlLmZvbnRNYXRyaXhbM107CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBVdGlsLnRyYW5zZm9ybSh0ZXh0U3RhdGUuY3RtLCBVdGlsLnRyYW5zZm9ybSh0ZXh0U3RhdGUudGV4dE1hdHJpeCwgdHNtKSk7CiAgICB9CiAgICBmdW5jdGlvbiBlbnN1cmVUZXh0Q29udGVudEl0ZW0oKSB7CiAgICAgIGlmICh0ZXh0Q29udGVudEl0ZW0uaW5pdGlhbGl6ZWQpIHsKICAgICAgICByZXR1cm4gdGV4dENvbnRlbnRJdGVtOwogICAgICB9CiAgICAgIGNvbnN0IHsKICAgICAgICBmb250LAogICAgICAgIGxvYWRlZE5hbWUKICAgICAgfSA9IHRleHRTdGF0ZTsKICAgICAgaWYgKCFzZWVuU3R5bGVzLmhhcyhsb2FkZWROYW1lKSkgewogICAgICAgIHNlZW5TdHlsZXMuYWRkKGxvYWRlZE5hbWUpOwogICAgICAgIHRleHRDb250ZW50LnN0eWxlc1tsb2FkZWROYW1lXSA9IHsKICAgICAgICAgIGZvbnRGYW1pbHk6IGZvbnQuZmFsbGJhY2tOYW1lLAogICAgICAgICAgYXNjZW50OiBmb250LmFzY2VudCwKICAgICAgICAgIGRlc2NlbnQ6IGZvbnQuZGVzY2VudCwKICAgICAgICAgIHZlcnRpY2FsOiBmb250LnZlcnRpY2FsCiAgICAgICAgfTsKICAgICAgICBpZiAoc2VsZi5vcHRpb25zLmZvbnRFeHRyYVByb3BlcnRpZXMgJiYgZm9udC5zeXN0ZW1Gb250SW5mbykgewogICAgICAgICAgY29uc3Qgc3R5bGUgPSB0ZXh0Q29udGVudC5zdHlsZXNbbG9hZGVkTmFtZV07CiAgICAgICAgICBzdHlsZS5mb250U3Vic3RpdHV0aW9uID0gZm9udC5zeXN0ZW1Gb250SW5mby5jc3M7CiAgICAgICAgICBzdHlsZS5mb250U3Vic3RpdHV0aW9uTG9hZGVkTmFtZSA9IGZvbnQuc3lzdGVtRm9udEluZm8ubG9hZGVkTmFtZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGV4dENvbnRlbnRJdGVtLmZvbnROYW1lID0gbG9hZGVkTmFtZTsKICAgICAgY29uc3QgdHJtID0gdGV4dENvbnRlbnRJdGVtLnRyYW5zZm9ybSA9IGdldEN1cnJlbnRUZXh0VHJhbnNmb3JtKCk7CiAgICAgIGlmICghZm9udC52ZXJ0aWNhbCkgewogICAgICAgIHRleHRDb250ZW50SXRlbS53aWR0aCA9IHRleHRDb250ZW50SXRlbS50b3RhbFdpZHRoID0gMDsKICAgICAgICB0ZXh0Q29udGVudEl0ZW0uaGVpZ2h0ID0gdGV4dENvbnRlbnRJdGVtLnRvdGFsSGVpZ2h0ID0gTWF0aC5oeXBvdCh0cm1bMl0sIHRybVszXSk7CiAgICAgICAgdGV4dENvbnRlbnRJdGVtLnZlcnRpY2FsID0gZmFsc2U7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGV4dENvbnRlbnRJdGVtLndpZHRoID0gdGV4dENvbnRlbnRJdGVtLnRvdGFsV2lkdGggPSBNYXRoLmh5cG90KHRybVswXSwgdHJtWzFdKTsKICAgICAgICB0ZXh0Q29udGVudEl0ZW0uaGVpZ2h0ID0gdGV4dENvbnRlbnRJdGVtLnRvdGFsSGVpZ2h0ID0gMDsKICAgICAgICB0ZXh0Q29udGVudEl0ZW0udmVydGljYWwgPSB0cnVlOwogICAgICB9CiAgICAgIGNvbnN0IHNjYWxlTGluZVggPSBNYXRoLmh5cG90KHRleHRTdGF0ZS50ZXh0TGluZU1hdHJpeFswXSwgdGV4dFN0YXRlLnRleHRMaW5lTWF0cml4WzFdKTsKICAgICAgY29uc3Qgc2NhbGVDdG1YID0gTWF0aC5oeXBvdCh0ZXh0U3RhdGUuY3RtWzBdLCB0ZXh0U3RhdGUuY3RtWzFdKTsKICAgICAgdGV4dENvbnRlbnRJdGVtLnRleHRBZHZhbmNlU2NhbGUgPSBzY2FsZUN0bVggKiBzY2FsZUxpbmVYOwogICAgICBjb25zdCB7CiAgICAgICAgZm9udFNpemUKICAgICAgfSA9IHRleHRTdGF0ZTsKICAgICAgdGV4dENvbnRlbnRJdGVtLnRyYWNraW5nU3BhY2VNaW4gPSBmb250U2l6ZSAqIFRSQUNLSU5HX1NQQUNFX0ZBQ1RPUjsKICAgICAgdGV4dENvbnRlbnRJdGVtLm5vdEFTcGFjZSA9IGZvbnRTaXplICogTk9UX0FfU1BBQ0VfRkFDVE9SOwogICAgICB0ZXh0Q29udGVudEl0ZW0ubmVnYXRpdmVTcGFjZU1heCA9IGZvbnRTaXplICogTkVHQVRJVkVfU1BBQ0VfRkFDVE9SOwogICAgICB0ZXh0Q29udGVudEl0ZW0uc3BhY2VJbkZsb3dNaW4gPSBmb250U2l6ZSAqIFNQQUNFX0lOX0ZMT1dfTUlOX0ZBQ1RPUjsKICAgICAgdGV4dENvbnRlbnRJdGVtLnNwYWNlSW5GbG93TWF4ID0gZm9udFNpemUgKiBTUEFDRV9JTl9GTE9XX01BWF9GQUNUT1I7CiAgICAgIHRleHRDb250ZW50SXRlbS5oYXNFT0wgPSBmYWxzZTsKICAgICAgdGV4dENvbnRlbnRJdGVtLmluaXRpYWxpemVkID0gdHJ1ZTsKICAgICAgcmV0dXJuIHRleHRDb250ZW50SXRlbTsKICAgIH0KICAgIGZ1bmN0aW9uIHVwZGF0ZUFkdmFuY2VTY2FsZSgpIHsKICAgICAgaWYgKCF0ZXh0Q29udGVudEl0ZW0uaW5pdGlhbGl6ZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3Qgc2NhbGVMaW5lWCA9IE1hdGguaHlwb3QodGV4dFN0YXRlLnRleHRMaW5lTWF0cml4WzBdLCB0ZXh0U3RhdGUudGV4dExpbmVNYXRyaXhbMV0pOwogICAgICBjb25zdCBzY2FsZUN0bVggPSBNYXRoLmh5cG90KHRleHRTdGF0ZS5jdG1bMF0sIHRleHRTdGF0ZS5jdG1bMV0pOwogICAgICBjb25zdCBzY2FsZUZhY3RvciA9IHNjYWxlQ3RtWCAqIHNjYWxlTGluZVg7CiAgICAgIGlmIChzY2FsZUZhY3RvciA9PT0gdGV4dENvbnRlbnRJdGVtLnRleHRBZHZhbmNlU2NhbGUpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKCF0ZXh0Q29udGVudEl0ZW0udmVydGljYWwpIHsKICAgICAgICB0ZXh0Q29udGVudEl0ZW0udG90YWxXaWR0aCArPSB0ZXh0Q29udGVudEl0ZW0ud2lkdGggKiB0ZXh0Q29udGVudEl0ZW0udGV4dEFkdmFuY2VTY2FsZTsKICAgICAgICB0ZXh0Q29udGVudEl0ZW0ud2lkdGggPSAwOwogICAgICB9IGVsc2UgewogICAgICAgIHRleHRDb250ZW50SXRlbS50b3RhbEhlaWdodCArPSB0ZXh0Q29udGVudEl0ZW0uaGVpZ2h0ICogdGV4dENvbnRlbnRJdGVtLnRleHRBZHZhbmNlU2NhbGU7CiAgICAgICAgdGV4dENvbnRlbnRJdGVtLmhlaWdodCA9IDA7CiAgICAgIH0KICAgICAgdGV4dENvbnRlbnRJdGVtLnRleHRBZHZhbmNlU2NhbGUgPSBzY2FsZUZhY3RvcjsKICAgIH0KICAgIGZ1bmN0aW9uIHJ1bkJpZGlUcmFuc2Zvcm0odGV4dENodW5rKSB7CiAgICAgIGxldCB0ZXh0ID0gdGV4dENodW5rLnN0ci5qb2luKCIiKTsKICAgICAgaWYgKCFkaXNhYmxlTm9ybWFsaXphdGlvbikgewogICAgICAgIHRleHQgPSBub3JtYWxpemVVbmljb2RlKHRleHQpOwogICAgICB9CiAgICAgIGNvbnN0IGJpZGlSZXN1bHQgPSBiaWRpKHRleHQsIC0xLCB0ZXh0Q2h1bmsudmVydGljYWwpOwogICAgICByZXR1cm4gewogICAgICAgIHN0cjogYmlkaVJlc3VsdC5zdHIsCiAgICAgICAgZGlyOiBiaWRpUmVzdWx0LmRpciwKICAgICAgICB3aWR0aDogTWF0aC5hYnModGV4dENodW5rLnRvdGFsV2lkdGgpLAogICAgICAgIGhlaWdodDogTWF0aC5hYnModGV4dENodW5rLnRvdGFsSGVpZ2h0KSwKICAgICAgICB0cmFuc2Zvcm06IHRleHRDaHVuay50cmFuc2Zvcm0sCiAgICAgICAgZm9udE5hbWU6IHRleHRDaHVuay5mb250TmFtZSwKICAgICAgICBoYXNFT0w6IHRleHRDaHVuay5oYXNFT0wKICAgICAgfTsKICAgIH0KICAgIGFzeW5jIGZ1bmN0aW9uIGhhbmRsZVNldEZvbnQoZm9udE5hbWUsIGZvbnRSZWYpIHsKICAgICAgY29uc3QgdHJhbnNsYXRlZCA9IGF3YWl0IHNlbGYubG9hZEZvbnQoZm9udE5hbWUsIGZvbnRSZWYsIHJlc291cmNlcywgdGFzayk7CiAgICAgIHRleHRTdGF0ZS5sb2FkZWROYW1lID0gdHJhbnNsYXRlZC5sb2FkZWROYW1lOwogICAgICB0ZXh0U3RhdGUuZm9udCA9IHRyYW5zbGF0ZWQuZm9udDsKICAgICAgdGV4dFN0YXRlLmZvbnRNYXRyaXggPSB0cmFuc2xhdGVkLmZvbnQuZm9udE1hdHJpeCB8fCBGT05UX0lERU5USVRZX01BVFJJWDsKICAgIH0KICAgIGZ1bmN0aW9uIGFwcGx5SW52ZXJzZVJvdGF0aW9uKHgsIHksIG1hdHJpeCkgewogICAgICBjb25zdCBzY2FsZSA9IE1hdGguaHlwb3QobWF0cml4WzBdLCBtYXRyaXhbMV0pOwogICAgICByZXR1cm4gWyhtYXRyaXhbMF0gKiB4ICsgbWF0cml4WzFdICogeSkgLyBzY2FsZSwgKG1hdHJpeFsyXSAqIHggKyBtYXRyaXhbM10gKiB5KSAvIHNjYWxlXTsKICAgIH0KICAgIGZ1bmN0aW9uIGNvbXBhcmVXaXRoTGFzdFBvc2l0aW9uKGdseXBoV2lkdGgpIHsKICAgICAgY29uc3QgY3VycmVudFRyYW5zZm9ybSA9IGdldEN1cnJlbnRUZXh0VHJhbnNmb3JtKCk7CiAgICAgIGxldCBwb3NYID0gY3VycmVudFRyYW5zZm9ybVs0XTsKICAgICAgbGV0IHBvc1kgPSBjdXJyZW50VHJhbnNmb3JtWzVdOwogICAgICBpZiAodGV4dFN0YXRlLmZvbnQ/LnZlcnRpY2FsKSB7CiAgICAgICAgaWYgKHBvc1ggPCB2aWV3Qm94WzBdIHx8IHBvc1ggPiB2aWV3Qm94WzJdIHx8IHBvc1kgKyBnbHlwaFdpZHRoIDwgdmlld0JveFsxXSB8fCBwb3NZID4gdmlld0JveFszXSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChwb3NYICsgZ2x5cGhXaWR0aCA8IHZpZXdCb3hbMF0gfHwgcG9zWCA+IHZpZXdCb3hbMl0gfHwgcG9zWSA8IHZpZXdCb3hbMV0gfHwgcG9zWSA+IHZpZXdCb3hbM10pIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgaWYgKCF0ZXh0U3RhdGUuZm9udCB8fCAhdGV4dENvbnRlbnRJdGVtLnByZXZUcmFuc2Zvcm0pIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBsZXQgbGFzdFBvc1ggPSB0ZXh0Q29udGVudEl0ZW0ucHJldlRyYW5zZm9ybVs0XTsKICAgICAgbGV0IGxhc3RQb3NZID0gdGV4dENvbnRlbnRJdGVtLnByZXZUcmFuc2Zvcm1bNV07CiAgICAgIGlmIChsYXN0UG9zWCA9PT0gcG9zWCAmJiBsYXN0UG9zWSA9PT0gcG9zWSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGxldCByb3RhdGUgPSAtMTsKICAgICAgaWYgKGN1cnJlbnRUcmFuc2Zvcm1bMF0gJiYgY3VycmVudFRyYW5zZm9ybVsxXSA9PT0gMCAmJiBjdXJyZW50VHJhbnNmb3JtWzJdID09PSAwKSB7CiAgICAgICAgcm90YXRlID0gY3VycmVudFRyYW5zZm9ybVswXSA+IDAgPyAwIDogMTgwOwogICAgICB9IGVsc2UgaWYgKGN1cnJlbnRUcmFuc2Zvcm1bMV0gJiYgY3VycmVudFRyYW5zZm9ybVswXSA9PT0gMCAmJiBjdXJyZW50VHJhbnNmb3JtWzNdID09PSAwKSB7CiAgICAgICAgcm90YXRlID0gY3VycmVudFRyYW5zZm9ybVsxXSA+IDAgPyA5MCA6IDI3MDsKICAgICAgfQogICAgICBzd2l0Y2ggKHJvdGF0ZSkgewogICAgICAgIGNhc2UgMDoKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgOTA6CiAgICAgICAgICBbcG9zWCwgcG9zWV0gPSBbcG9zWSwgcG9zWF07CiAgICAgICAgICBbbGFzdFBvc1gsIGxhc3RQb3NZXSA9IFtsYXN0UG9zWSwgbGFzdFBvc1hdOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAxODA6CiAgICAgICAgICBbcG9zWCwgcG9zWSwgbGFzdFBvc1gsIGxhc3RQb3NZXSA9IFstcG9zWCwgLXBvc1ksIC1sYXN0UG9zWCwgLWxhc3RQb3NZXTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMjcwOgogICAgICAgICAgW3Bvc1gsIHBvc1ldID0gWy1wb3NZLCAtcG9zWF07CiAgICAgICAgICBbbGFzdFBvc1gsIGxhc3RQb3NZXSA9IFstbGFzdFBvc1ksIC1sYXN0UG9zWF07CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgW3Bvc1gsIHBvc1ldID0gYXBwbHlJbnZlcnNlUm90YXRpb24ocG9zWCwgcG9zWSwgY3VycmVudFRyYW5zZm9ybSk7CiAgICAgICAgICBbbGFzdFBvc1gsIGxhc3RQb3NZXSA9IGFwcGx5SW52ZXJzZVJvdGF0aW9uKGxhc3RQb3NYLCBsYXN0UG9zWSwgdGV4dENvbnRlbnRJdGVtLnByZXZUcmFuc2Zvcm0pOwogICAgICB9CiAgICAgIGlmICh0ZXh0U3RhdGUuZm9udC52ZXJ0aWNhbCkgewogICAgICAgIGNvbnN0IGFkdmFuY2VZID0gKGxhc3RQb3NZIC0gcG9zWSkgLyB0ZXh0Q29udGVudEl0ZW0udGV4dEFkdmFuY2VTY2FsZTsKICAgICAgICBjb25zdCBhZHZhbmNlWCA9IHBvc1ggLSBsYXN0UG9zWDsKICAgICAgICBjb25zdCB0ZXh0T3JpZW50YXRpb24gPSBNYXRoLnNpZ24odGV4dENvbnRlbnRJdGVtLmhlaWdodCk7CiAgICAgICAgaWYgKGFkdmFuY2VZIDwgdGV4dE9yaWVudGF0aW9uICogdGV4dENvbnRlbnRJdGVtLm5lZ2F0aXZlU3BhY2VNYXgpIHsKICAgICAgICAgIGlmIChNYXRoLmFicyhhZHZhbmNlWCkgPiAwLjUgKiB0ZXh0Q29udGVudEl0ZW0ud2lkdGgpIHsKICAgICAgICAgICAgYXBwZW5kRU9MKCk7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgcmVzZXRMYXN0Q2hhcnMoKTsKICAgICAgICAgIGZsdXNoVGV4dENvbnRlbnRJdGVtKCk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKE1hdGguYWJzKGFkdmFuY2VYKSA+IHRleHRDb250ZW50SXRlbS53aWR0aCkgewogICAgICAgICAgYXBwZW5kRU9MKCk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKGFkdmFuY2VZIDw9IHRleHRPcmllbnRhdGlvbiAqIHRleHRDb250ZW50SXRlbS5ub3RBU3BhY2UpIHsKICAgICAgICAgIHJlc2V0TGFzdENoYXJzKCk7CiAgICAgICAgfQogICAgICAgIGlmIChhZHZhbmNlWSA8PSB0ZXh0T3JpZW50YXRpb24gKiB0ZXh0Q29udGVudEl0ZW0udHJhY2tpbmdTcGFjZU1pbikgewogICAgICAgICAgaWYgKHNob3VsZEFkZFdoaXRlcHNhY2UoKSkgewogICAgICAgICAgICByZXNldExhc3RDaGFycygpOwogICAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpOwogICAgICAgICAgICBwdXNoV2hpdGVzcGFjZSh7CiAgICAgICAgICAgICAgaGVpZ2h0OiBNYXRoLmFicyhhZHZhbmNlWSkKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0ZXh0Q29udGVudEl0ZW0uaGVpZ2h0ICs9IGFkdmFuY2VZOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoIWFkZEZha2VTcGFjZXMoYWR2YW5jZVksIHRleHRDb250ZW50SXRlbS5wcmV2VHJhbnNmb3JtLCB0ZXh0T3JpZW50YXRpb24pKSB7CiAgICAgICAgICBpZiAodGV4dENvbnRlbnRJdGVtLnN0ci5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgcmVzZXRMYXN0Q2hhcnMoKTsKICAgICAgICAgICAgcHVzaFdoaXRlc3BhY2UoewogICAgICAgICAgICAgIGhlaWdodDogTWF0aC5hYnMoYWR2YW5jZVkpCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGV4dENvbnRlbnRJdGVtLmhlaWdodCArPSBhZHZhbmNlWTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKE1hdGguYWJzKGFkdmFuY2VYKSA+IHRleHRDb250ZW50SXRlbS53aWR0aCAqIFZFUlRJQ0FMX1NISUZUX1JBVElPKSB7CiAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBjb25zdCBhZHZhbmNlWCA9IChwb3NYIC0gbGFzdFBvc1gpIC8gdGV4dENvbnRlbnRJdGVtLnRleHRBZHZhbmNlU2NhbGU7CiAgICAgIGNvbnN0IGFkdmFuY2VZID0gcG9zWSAtIGxhc3RQb3NZOwogICAgICBjb25zdCB0ZXh0T3JpZW50YXRpb24gPSBNYXRoLnNpZ24odGV4dENvbnRlbnRJdGVtLndpZHRoKTsKICAgICAgaWYgKGFkdmFuY2VYIDwgdGV4dE9yaWVudGF0aW9uICogdGV4dENvbnRlbnRJdGVtLm5lZ2F0aXZlU3BhY2VNYXgpIHsKICAgICAgICBpZiAoTWF0aC5hYnMoYWR2YW5jZVkpID4gMC41ICogdGV4dENvbnRlbnRJdGVtLmhlaWdodCkgewogICAgICAgICAgYXBwZW5kRU9MKCk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcmVzZXRMYXN0Q2hhcnMoKTsKICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGlmIChNYXRoLmFicyhhZHZhbmNlWSkgPiB0ZXh0Q29udGVudEl0ZW0uaGVpZ2h0KSB7CiAgICAgICAgYXBwZW5kRU9MKCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgaWYgKGFkdmFuY2VYIDw9IHRleHRPcmllbnRhdGlvbiAqIHRleHRDb250ZW50SXRlbS5ub3RBU3BhY2UpIHsKICAgICAgICByZXNldExhc3RDaGFycygpOwogICAgICB9CiAgICAgIGlmIChhZHZhbmNlWCA8PSB0ZXh0T3JpZW50YXRpb24gKiB0ZXh0Q29udGVudEl0ZW0udHJhY2tpbmdTcGFjZU1pbikgewogICAgICAgIGlmIChzaG91bGRBZGRXaGl0ZXBzYWNlKCkpIHsKICAgICAgICAgIHJlc2V0TGFzdENoYXJzKCk7CiAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpOwogICAgICAgICAgcHVzaFdoaXRlc3BhY2UoewogICAgICAgICAgICB3aWR0aDogTWF0aC5hYnMoYWR2YW5jZVgpCiAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGV4dENvbnRlbnRJdGVtLndpZHRoICs9IGFkdmFuY2VYOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICghYWRkRmFrZVNwYWNlcyhhZHZhbmNlWCwgdGV4dENvbnRlbnRJdGVtLnByZXZUcmFuc2Zvcm0sIHRleHRPcmllbnRhdGlvbikpIHsKICAgICAgICBpZiAodGV4dENvbnRlbnRJdGVtLnN0ci5sZW5ndGggPT09IDApIHsKICAgICAgICAgIHJlc2V0TGFzdENoYXJzKCk7CiAgICAgICAgICBwdXNoV2hpdGVzcGFjZSh7CiAgICAgICAgICAgIHdpZHRoOiBNYXRoLmFicyhhZHZhbmNlWCkKICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0ZXh0Q29udGVudEl0ZW0ud2lkdGggKz0gYWR2YW5jZVg7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChNYXRoLmFicyhhZHZhbmNlWSkgPiB0ZXh0Q29udGVudEl0ZW0uaGVpZ2h0ICogVkVSVElDQUxfU0hJRlRfUkFUSU8pIHsKICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gYnVpbGRUZXh0Q29udGVudEl0ZW0oewogICAgICBjaGFycywKICAgICAgZXh0cmFTcGFjaW5nCiAgICB9KSB7CiAgICAgIGNvbnN0IGZvbnQgPSB0ZXh0U3RhdGUuZm9udDsKICAgICAgaWYgKCFjaGFycykgewogICAgICAgIGNvbnN0IGNoYXJTcGFjaW5nID0gdGV4dFN0YXRlLmNoYXJTcGFjaW5nICsgZXh0cmFTcGFjaW5nOwogICAgICAgIGlmIChjaGFyU3BhY2luZykgewogICAgICAgICAgaWYgKCFmb250LnZlcnRpY2FsKSB7CiAgICAgICAgICAgIHRleHRTdGF0ZS50cmFuc2xhdGVUZXh0TWF0cml4KGNoYXJTcGFjaW5nICogdGV4dFN0YXRlLnRleHRIU2NhbGUsIDApOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGV4dFN0YXRlLnRyYW5zbGF0ZVRleHRNYXRyaXgoMCwgLWNoYXJTcGFjaW5nKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGtlZXBXaGl0ZVNwYWNlKSB7CiAgICAgICAgICBjb21wYXJlV2l0aExhc3RQb3NpdGlvbigwKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IGdseXBocyA9IGZvbnQuY2hhcnNUb0dseXBocyhjaGFycyk7CiAgICAgIGNvbnN0IHNjYWxlID0gdGV4dFN0YXRlLmZvbnRNYXRyaXhbMF0gKiB0ZXh0U3RhdGUuZm9udFNpemU7CiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGdseXBocy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CiAgICAgICAgY29uc3QgZ2x5cGggPSBnbHlwaHNbaV07CiAgICAgICAgY29uc3QgewogICAgICAgICAgY2F0ZWdvcnkKICAgICAgICB9ID0gZ2x5cGg7CiAgICAgICAgaWYgKGNhdGVnb3J5LmlzSW52aXNpYmxlRm9ybWF0TWFyaykgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGxldCBjaGFyU3BhY2luZyA9IHRleHRTdGF0ZS5jaGFyU3BhY2luZyArIChpICsgMSA9PT0gaWkgPyBleHRyYVNwYWNpbmcgOiAwKTsKICAgICAgICBsZXQgZ2x5cGhXaWR0aCA9IGdseXBoLndpZHRoOwogICAgICAgIGlmIChmb250LnZlcnRpY2FsKSB7CiAgICAgICAgICBnbHlwaFdpZHRoID0gZ2x5cGgudm1ldHJpYyA/IGdseXBoLnZtZXRyaWNbMF0gOiAtZ2x5cGhXaWR0aDsKICAgICAgICB9CiAgICAgICAgbGV0IHNjYWxlZERpbSA9IGdseXBoV2lkdGggKiBzY2FsZTsKICAgICAgICBpZiAoIWtlZXBXaGl0ZVNwYWNlICYmIGNhdGVnb3J5LmlzV2hpdGVzcGFjZSkgewogICAgICAgICAgaWYgKCFmb250LnZlcnRpY2FsKSB7CiAgICAgICAgICAgIGNoYXJTcGFjaW5nICs9IHNjYWxlZERpbSArIHRleHRTdGF0ZS53b3JkU3BhY2luZzsKICAgICAgICAgICAgdGV4dFN0YXRlLnRyYW5zbGF0ZVRleHRNYXRyaXgoY2hhclNwYWNpbmcgKiB0ZXh0U3RhdGUudGV4dEhTY2FsZSwgMCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjaGFyU3BhY2luZyArPSAtc2NhbGVkRGltICsgdGV4dFN0YXRlLndvcmRTcGFjaW5nOwogICAgICAgICAgICB0ZXh0U3RhdGUudHJhbnNsYXRlVGV4dE1hdHJpeCgwLCAtY2hhclNwYWNpbmcpOwogICAgICAgICAgfQogICAgICAgICAgc2F2ZUxhc3RDaGFyKCIgIik7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKCFjYXRlZ29yeS5pc1plcm9XaWR0aERpYWNyaXRpYyAmJiAhY29tcGFyZVdpdGhMYXN0UG9zaXRpb24oc2NhbGVkRGltKSkgewogICAgICAgICAgaWYgKCFmb250LnZlcnRpY2FsKSB7CiAgICAgICAgICAgIHRleHRTdGF0ZS50cmFuc2xhdGVUZXh0TWF0cml4KHNjYWxlZERpbSAqIHRleHRTdGF0ZS50ZXh0SFNjYWxlLCAwKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRleHRTdGF0ZS50cmFuc2xhdGVUZXh0TWF0cml4KDAsIHNjYWxlZERpbSk7CiAgICAgICAgICB9CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgY29uc3QgdGV4dENodW5rID0gZW5zdXJlVGV4dENvbnRlbnRJdGVtKCk7CiAgICAgICAgaWYgKGNhdGVnb3J5LmlzWmVyb1dpZHRoRGlhY3JpdGljKSB7CiAgICAgICAgICBzY2FsZWREaW0gPSAwOwogICAgICAgIH0KICAgICAgICBpZiAoIWZvbnQudmVydGljYWwpIHsKICAgICAgICAgIHNjYWxlZERpbSAqPSB0ZXh0U3RhdGUudGV4dEhTY2FsZTsKICAgICAgICAgIHRleHRTdGF0ZS50cmFuc2xhdGVUZXh0TWF0cml4KHNjYWxlZERpbSwgMCk7CiAgICAgICAgICB0ZXh0Q2h1bmsud2lkdGggKz0gc2NhbGVkRGltOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0ZXh0U3RhdGUudHJhbnNsYXRlVGV4dE1hdHJpeCgwLCBzY2FsZWREaW0pOwogICAgICAgICAgc2NhbGVkRGltID0gTWF0aC5hYnMoc2NhbGVkRGltKTsKICAgICAgICAgIHRleHRDaHVuay5oZWlnaHQgKz0gc2NhbGVkRGltOwogICAgICAgIH0KICAgICAgICBpZiAoc2NhbGVkRGltKSB7CiAgICAgICAgICB0ZXh0Q2h1bmsucHJldlRyYW5zZm9ybSA9IGdldEN1cnJlbnRUZXh0VHJhbnNmb3JtKCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGdseXBoVW5pY29kZSA9IGdseXBoLnVuaWNvZGU7CiAgICAgICAgaWYgKHNhdmVMYXN0Q2hhcihnbHlwaFVuaWNvZGUpKSB7CiAgICAgICAgICB0ZXh0Q2h1bmsuc3RyLnB1c2goIiAiKTsKICAgICAgICB9CiAgICAgICAgdGV4dENodW5rLnN0ci5wdXNoKGdseXBoVW5pY29kZSk7CiAgICAgICAgaWYgKGNoYXJTcGFjaW5nKSB7CiAgICAgICAgICBpZiAoIWZvbnQudmVydGljYWwpIHsKICAgICAgICAgICAgdGV4dFN0YXRlLnRyYW5zbGF0ZVRleHRNYXRyaXgoY2hhclNwYWNpbmcgKiB0ZXh0U3RhdGUudGV4dEhTY2FsZSwgMCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0ZXh0U3RhdGUudHJhbnNsYXRlVGV4dE1hdHJpeCgwLCAtY2hhclNwYWNpbmcpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gYXBwZW5kRU9MKCkgewogICAgICByZXNldExhc3RDaGFycygpOwogICAgICBpZiAodGV4dENvbnRlbnRJdGVtLmluaXRpYWxpemVkKSB7CiAgICAgICAgdGV4dENvbnRlbnRJdGVtLmhhc0VPTCA9IHRydWU7CiAgICAgICAgZmx1c2hUZXh0Q29udGVudEl0ZW0oKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0ZXh0Q29udGVudC5pdGVtcy5wdXNoKHsKICAgICAgICAgIHN0cjogIiIsCiAgICAgICAgICBkaXI6ICJsdHIiLAogICAgICAgICAgd2lkdGg6IDAsCiAgICAgICAgICBoZWlnaHQ6IDAsCiAgICAgICAgICB0cmFuc2Zvcm06IGdldEN1cnJlbnRUZXh0VHJhbnNmb3JtKCksCiAgICAgICAgICBmb250TmFtZTogdGV4dFN0YXRlLmxvYWRlZE5hbWUsCiAgICAgICAgICBoYXNFT0w6IHRydWUKICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gYWRkRmFrZVNwYWNlcyh3aWR0aCwgdHJhbnNmLCB0ZXh0T3JpZW50YXRpb24pIHsKICAgICAgaWYgKHRleHRPcmllbnRhdGlvbiAqIHRleHRDb250ZW50SXRlbS5zcGFjZUluRmxvd01pbiA8PSB3aWR0aCAmJiB3aWR0aCA8PSB0ZXh0T3JpZW50YXRpb24gKiB0ZXh0Q29udGVudEl0ZW0uc3BhY2VJbkZsb3dNYXgpIHsKICAgICAgICBpZiAodGV4dENvbnRlbnRJdGVtLmluaXRpYWxpemVkKSB7CiAgICAgICAgICByZXNldExhc3RDaGFycygpOwogICAgICAgICAgdGV4dENvbnRlbnRJdGVtLnN0ci5wdXNoKCIgIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBjb25zdCBmb250TmFtZSA9IHRleHRDb250ZW50SXRlbS5mb250TmFtZTsKICAgICAgbGV0IGhlaWdodCA9IDA7CiAgICAgIGlmICh0ZXh0Q29udGVudEl0ZW0udmVydGljYWwpIHsKICAgICAgICBoZWlnaHQgPSB3aWR0aDsKICAgICAgICB3aWR0aCA9IDA7CiAgICAgIH0KICAgICAgZmx1c2hUZXh0Q29udGVudEl0ZW0oKTsKICAgICAgcmVzZXRMYXN0Q2hhcnMoKTsKICAgICAgcHVzaFdoaXRlc3BhY2UoewogICAgICAgIHdpZHRoOiBNYXRoLmFicyh3aWR0aCksCiAgICAgICAgaGVpZ2h0OiBNYXRoLmFicyhoZWlnaHQpLAogICAgICAgIHRyYW5zZm9ybTogdHJhbnNmIHx8IGdldEN1cnJlbnRUZXh0VHJhbnNmb3JtKCksCiAgICAgICAgZm9udE5hbWUKICAgICAgfSk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gZmx1c2hUZXh0Q29udGVudEl0ZW0oKSB7CiAgICAgIGlmICghdGV4dENvbnRlbnRJdGVtLmluaXRpYWxpemVkIHx8ICF0ZXh0Q29udGVudEl0ZW0uc3RyKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICghdGV4dENvbnRlbnRJdGVtLnZlcnRpY2FsKSB7CiAgICAgICAgdGV4dENvbnRlbnRJdGVtLnRvdGFsV2lkdGggKz0gdGV4dENvbnRlbnRJdGVtLndpZHRoICogdGV4dENvbnRlbnRJdGVtLnRleHRBZHZhbmNlU2NhbGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGV4dENvbnRlbnRJdGVtLnRvdGFsSGVpZ2h0ICs9IHRleHRDb250ZW50SXRlbS5oZWlnaHQgKiB0ZXh0Q29udGVudEl0ZW0udGV4dEFkdmFuY2VTY2FsZTsKICAgICAgfQogICAgICB0ZXh0Q29udGVudC5pdGVtcy5wdXNoKHJ1bkJpZGlUcmFuc2Zvcm0odGV4dENvbnRlbnRJdGVtKSk7CiAgICAgIHRleHRDb250ZW50SXRlbS5pbml0aWFsaXplZCA9IGZhbHNlOwogICAgICB0ZXh0Q29udGVudEl0ZW0uc3RyLmxlbmd0aCA9IDA7CiAgICB9CiAgICBmdW5jdGlvbiBlbnF1ZXVlQ2h1bmsoYmF0Y2ggPSBmYWxzZSkgewogICAgICBjb25zdCBsZW5ndGggPSB0ZXh0Q29udGVudC5pdGVtcy5sZW5ndGg7CiAgICAgIGlmIChsZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKGJhdGNoICYmIGxlbmd0aCA8IFRFWFRfQ0hVTktfQkFUQ0hfU0laRSkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBzaW5rLmVucXVldWUodGV4dENvbnRlbnQsIGxlbmd0aCk7CiAgICAgIHRleHRDb250ZW50Lml0ZW1zID0gW107CiAgICAgIHRleHRDb250ZW50LnN0eWxlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICB9CiAgICBjb25zdCB0aW1lU2xvdE1hbmFnZXIgPSBuZXcgVGltZVNsb3RNYW5hZ2VyKCk7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUJvZHkocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIGNvbnN0IG5leHQgPSBmdW5jdGlvbiAocHJvbWlzZSkgewogICAgICAgIGVucXVldWVDaHVuayh0cnVlKTsKICAgICAgICBQcm9taXNlLmFsbChbcHJvbWlzZSwgc2luay5yZWFkeV0pLnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgcHJvbWlzZUJvZHkocmVzb2x2ZSwgcmVqZWN0KTsKICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7CiAgICAgICAgICAgIHJlamVjdChleCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgcmVqZWN0KTsKICAgICAgfTsKICAgICAgdGFzay5lbnN1cmVOb3RUZXJtaW5hdGVkKCk7CiAgICAgIHRpbWVTbG90TWFuYWdlci5yZXNldCgpOwogICAgICBjb25zdCBvcGVyYXRpb24gPSB7fTsKICAgICAgbGV0IHN0b3AsCiAgICAgICAgbmFtZSwKICAgICAgICBpc1ZhbGlkTmFtZSwKICAgICAgICBhcmdzID0gW107CiAgICAgIHdoaWxlICghKHN0b3AgPSB0aW1lU2xvdE1hbmFnZXIuY2hlY2soKSkpIHsKICAgICAgICBhcmdzLmxlbmd0aCA9IDA7CiAgICAgICAgb3BlcmF0aW9uLmFyZ3MgPSBhcmdzOwogICAgICAgIGlmICghcHJlcHJvY2Vzc29yLnJlYWQob3BlcmF0aW9uKSkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHByZXZpb3VzU3RhdGUgPSB0ZXh0U3RhdGU7CiAgICAgICAgdGV4dFN0YXRlID0gc3RhdGVNYW5hZ2VyLnN0YXRlOwogICAgICAgIGNvbnN0IGZuID0gb3BlcmF0aW9uLmZuOwogICAgICAgIGFyZ3MgPSBvcGVyYXRpb24uYXJnczsKICAgICAgICBzd2l0Y2ggKGZuIHwgMCkgewogICAgICAgICAgY2FzZSBPUFMuc2V0Rm9udDoKICAgICAgICAgICAgY29uc3QgZm9udE5hbWVBcmcgPSBhcmdzWzBdLm5hbWUsCiAgICAgICAgICAgICAgZm9udFNpemVBcmcgPSBhcmdzWzFdOwogICAgICAgICAgICBpZiAodGV4dFN0YXRlLmZvbnQgJiYgZm9udE5hbWVBcmcgPT09IHRleHRTdGF0ZS5mb250TmFtZSAmJiBmb250U2l6ZUFyZyA9PT0gdGV4dFN0YXRlLmZvbnRTaXplKSB7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZmx1c2hUZXh0Q29udGVudEl0ZW0oKTsKICAgICAgICAgICAgdGV4dFN0YXRlLmZvbnROYW1lID0gZm9udE5hbWVBcmc7CiAgICAgICAgICAgIHRleHRTdGF0ZS5mb250U2l6ZSA9IGZvbnRTaXplQXJnOwogICAgICAgICAgICBuZXh0KGhhbmRsZVNldEZvbnQoZm9udE5hbWVBcmcsIG51bGwpKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY2FzZSBPUFMuc2V0VGV4dFJpc2U6CiAgICAgICAgICAgIHRleHRTdGF0ZS50ZXh0UmlzZSA9IGFyZ3NbMF07CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBPUFMuc2V0SFNjYWxlOgogICAgICAgICAgICB0ZXh0U3RhdGUudGV4dEhTY2FsZSA9IGFyZ3NbMF0gLyAxMDA7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBPUFMuc2V0TGVhZGluZzoKICAgICAgICAgICAgdGV4dFN0YXRlLmxlYWRpbmcgPSBhcmdzWzBdOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgT1BTLm1vdmVUZXh0OgogICAgICAgICAgICB0ZXh0U3RhdGUudHJhbnNsYXRlVGV4dExpbmVNYXRyaXgoYXJnc1swXSwgYXJnc1sxXSk7CiAgICAgICAgICAgIHRleHRTdGF0ZS50ZXh0TWF0cml4ID0gdGV4dFN0YXRlLnRleHRMaW5lTWF0cml4LnNsaWNlKCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBPUFMuc2V0TGVhZGluZ01vdmVUZXh0OgogICAgICAgICAgICB0ZXh0U3RhdGUubGVhZGluZyA9IC1hcmdzWzFdOwogICAgICAgICAgICB0ZXh0U3RhdGUudHJhbnNsYXRlVGV4dExpbmVNYXRyaXgoYXJnc1swXSwgYXJnc1sxXSk7CiAgICAgICAgICAgIHRleHRTdGF0ZS50ZXh0TWF0cml4ID0gdGV4dFN0YXRlLnRleHRMaW5lTWF0cml4LnNsaWNlKCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBPUFMubmV4dExpbmU6CiAgICAgICAgICAgIHRleHRTdGF0ZS5jYXJyaWFnZVJldHVybigpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgT1BTLnNldFRleHRNYXRyaXg6CiAgICAgICAgICAgIHRleHRTdGF0ZS5zZXRUZXh0TWF0cml4KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0pOwogICAgICAgICAgICB0ZXh0U3RhdGUuc2V0VGV4dExpbmVNYXRyaXgoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSwgYXJnc1s1XSk7CiAgICAgICAgICAgIHVwZGF0ZUFkdmFuY2VTY2FsZSgpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgT1BTLnNldENoYXJTcGFjaW5nOgogICAgICAgICAgICB0ZXh0U3RhdGUuY2hhclNwYWNpbmcgPSBhcmdzWzBdOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgT1BTLnNldFdvcmRTcGFjaW5nOgogICAgICAgICAgICB0ZXh0U3RhdGUud29yZFNwYWNpbmcgPSBhcmdzWzBdOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgT1BTLmJlZ2luVGV4dDoKICAgICAgICAgICAgdGV4dFN0YXRlLnRleHRNYXRyaXggPSBJREVOVElUWV9NQVRSSVguc2xpY2UoKTsKICAgICAgICAgICAgdGV4dFN0YXRlLnRleHRMaW5lTWF0cml4ID0gSURFTlRJVFlfTUFUUklYLnNsaWNlKCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBPUFMuc2hvd1NwYWNlZFRleHQ6CiAgICAgICAgICAgIGlmICghc3RhdGVNYW5hZ2VyLnN0YXRlLmZvbnQpIHsKICAgICAgICAgICAgICBzZWxmLmVuc3VyZVN0YXRlRm9udChzdGF0ZU1hbmFnZXIuc3RhdGUpOwogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbnN0IHNwYWNlRmFjdG9yID0gKHRleHRTdGF0ZS5mb250LnZlcnRpY2FsID8gMSA6IC0xKSAqIHRleHRTdGF0ZS5mb250U2l6ZSAvIDEwMDA7CiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gYXJnc1swXTsKICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gZWxlbWVudHMubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBlbGVtZW50c1tpXTsKICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgICAgICBzaG93U3BhY2VkVGV4dEJ1ZmZlci5wdXNoKGl0ZW0pOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGl0ZW0gPT09ICJudW1iZXIiICYmIGl0ZW0gIT09IDApIHsKICAgICAgICAgICAgICAgIGNvbnN0IHN0ciA9IHNob3dTcGFjZWRUZXh0QnVmZmVyLmpvaW4oIiIpOwogICAgICAgICAgICAgICAgc2hvd1NwYWNlZFRleHRCdWZmZXIubGVuZ3RoID0gMDsKICAgICAgICAgICAgICAgIGJ1aWxkVGV4dENvbnRlbnRJdGVtKHsKICAgICAgICAgICAgICAgICAgY2hhcnM6IHN0ciwKICAgICAgICAgICAgICAgICAgZXh0cmFTcGFjaW5nOiBpdGVtICogc3BhY2VGYWN0b3IKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoc2hvd1NwYWNlZFRleHRCdWZmZXIubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgIGNvbnN0IHN0ciA9IHNob3dTcGFjZWRUZXh0QnVmZmVyLmpvaW4oIiIpOwogICAgICAgICAgICAgIHNob3dTcGFjZWRUZXh0QnVmZmVyLmxlbmd0aCA9IDA7CiAgICAgICAgICAgICAgYnVpbGRUZXh0Q29udGVudEl0ZW0oewogICAgICAgICAgICAgICAgY2hhcnM6IHN0ciwKICAgICAgICAgICAgICAgIGV4dHJhU3BhY2luZzogMAogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBPUFMuc2hvd1RleHQ6CiAgICAgICAgICAgIGlmICghc3RhdGVNYW5hZ2VyLnN0YXRlLmZvbnQpIHsKICAgICAgICAgICAgICBzZWxmLmVuc3VyZVN0YXRlRm9udChzdGF0ZU1hbmFnZXIuc3RhdGUpOwogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJ1aWxkVGV4dENvbnRlbnRJdGVtKHsKICAgICAgICAgICAgICBjaGFyczogYXJnc1swXSwKICAgICAgICAgICAgICBleHRyYVNwYWNpbmc6IDAKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBPUFMubmV4dExpbmVTaG93VGV4dDoKICAgICAgICAgICAgaWYgKCFzdGF0ZU1hbmFnZXIuc3RhdGUuZm9udCkgewogICAgICAgICAgICAgIHNlbGYuZW5zdXJlU3RhdGVGb250KHN0YXRlTWFuYWdlci5zdGF0ZSk7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGV4dFN0YXRlLmNhcnJpYWdlUmV0dXJuKCk7CiAgICAgICAgICAgIGJ1aWxkVGV4dENvbnRlbnRJdGVtKHsKICAgICAgICAgICAgICBjaGFyczogYXJnc1swXSwKICAgICAgICAgICAgICBleHRyYVNwYWNpbmc6IDAKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBPUFMubmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQ6CiAgICAgICAgICAgIGlmICghc3RhdGVNYW5hZ2VyLnN0YXRlLmZvbnQpIHsKICAgICAgICAgICAgICBzZWxmLmVuc3VyZVN0YXRlRm9udChzdGF0ZU1hbmFnZXIuc3RhdGUpOwogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRleHRTdGF0ZS53b3JkU3BhY2luZyA9IGFyZ3NbMF07CiAgICAgICAgICAgIHRleHRTdGF0ZS5jaGFyU3BhY2luZyA9IGFyZ3NbMV07CiAgICAgICAgICAgIHRleHRTdGF0ZS5jYXJyaWFnZVJldHVybigpOwogICAgICAgICAgICBidWlsZFRleHRDb250ZW50SXRlbSh7CiAgICAgICAgICAgICAgY2hhcnM6IGFyZ3NbMl0sCiAgICAgICAgICAgICAgZXh0cmFTcGFjaW5nOiAwCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgT1BTLnBhaW50WE9iamVjdDoKICAgICAgICAgICAgZmx1c2hUZXh0Q29udGVudEl0ZW0oKTsKICAgICAgICAgICAgeG9ianMgPz89IHJlc291cmNlcy5nZXQoIlhPYmplY3QiKSB8fCBEaWN0LmVtcHR5OwogICAgICAgICAgICBpc1ZhbGlkTmFtZSA9IGFyZ3NbMF0gaW5zdGFuY2VvZiBOYW1lOwogICAgICAgICAgICBuYW1lID0gYXJnc1swXS5uYW1lOwogICAgICAgICAgICBpZiAoaXNWYWxpZE5hbWUgJiYgZW1wdHlYT2JqZWN0Q2FjaGUuZ2V0QnlOYW1lKG5hbWUpKSB7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbmV4dChuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZVhPYmplY3QsIHJlamVjdFhPYmplY3QpIHsKICAgICAgICAgICAgICBpZiAoIWlzVmFsaWROYW1lKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlhPYmplY3QgbXVzdCBiZSByZWZlcnJlZCB0byBieSBuYW1lLiIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBsZXQgeG9iaiA9IHhvYmpzLmdldFJhdyhuYW1lKTsKICAgICAgICAgICAgICBpZiAoeG9iaiBpbnN0YW5jZW9mIFJlZikgewogICAgICAgICAgICAgICAgaWYgKGVtcHR5WE9iamVjdENhY2hlLmdldEJ5UmVmKHhvYmopKSB7CiAgICAgICAgICAgICAgICAgIHJlc29sdmVYT2JqZWN0KCk7CiAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNvbnN0IGdsb2JhbEltYWdlID0gc2VsZi5nbG9iYWxJbWFnZUNhY2hlLmdldERhdGEoeG9iaiwgc2VsZi5wYWdlSW5kZXgpOwogICAgICAgICAgICAgICAgaWYgKGdsb2JhbEltYWdlKSB7CiAgICAgICAgICAgICAgICAgIHJlc29sdmVYT2JqZWN0KCk7CiAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHhvYmogPSB4cmVmLmZldGNoKHhvYmopOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoISh4b2JqIGluc3RhbmNlb2YgQmFzZVN0cmVhbSkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiWE9iamVjdCBzaG91bGQgYmUgYSBzdHJlYW0iKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgY29uc3QgdHlwZSA9IHhvYmouZGljdC5nZXQoIlN1YnR5cGUiKTsKICAgICAgICAgICAgICBpZiAoISh0eXBlIGluc3RhbmNlb2YgTmFtZSkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiWE9iamVjdCBzaG91bGQgaGF2ZSBhIE5hbWUgc3VidHlwZSIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAodHlwZS5uYW1lICE9PSAiRm9ybSIpIHsKICAgICAgICAgICAgICAgIGVtcHR5WE9iamVjdENhY2hlLnNldChuYW1lLCB4b2JqLmRpY3Qub2JqSWQsIHRydWUpOwogICAgICAgICAgICAgICAgcmVzb2x2ZVhPYmplY3QoKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gc3RhdGVNYW5hZ2VyLnN0YXRlLmNsb25lKCk7CiAgICAgICAgICAgICAgY29uc3QgeE9ialN0YXRlTWFuYWdlciA9IG5ldyBTdGF0ZU1hbmFnZXIoY3VycmVudFN0YXRlKTsKICAgICAgICAgICAgICBjb25zdCBtYXRyaXggPSBsb29rdXBNYXRyaXgoeG9iai5kaWN0LmdldEFycmF5KCJNYXRyaXgiKSwgbnVsbCk7CiAgICAgICAgICAgICAgaWYgKG1hdHJpeCkgewogICAgICAgICAgICAgICAgeE9ialN0YXRlTWFuYWdlci50cmFuc2Zvcm0obWF0cml4KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZW5xdWV1ZUNodW5rKCk7CiAgICAgICAgICAgICAgY29uc3Qgc2lua1dyYXBwZXIgPSB7CiAgICAgICAgICAgICAgICBlbnF1ZXVlSW52b2tlZDogZmFsc2UsCiAgICAgICAgICAgICAgICBlbnF1ZXVlKGNodW5rLCBzaXplKSB7CiAgICAgICAgICAgICAgICAgIHRoaXMuZW5xdWV1ZUludm9rZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICBzaW5rLmVucXVldWUoY2h1bmssIHNpemUpOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGdldCBkZXNpcmVkU2l6ZSgpIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIHNpbmsuZGVzaXJlZFNpemU7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgZ2V0IHJlYWR5KCkgewogICAgICAgICAgICAgICAgICByZXR1cm4gc2luay5yZWFkeTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgIHNlbGYuZ2V0VGV4dENvbnRlbnQoewogICAgICAgICAgICAgICAgc3RyZWFtOiB4b2JqLAogICAgICAgICAgICAgICAgdGFzaywKICAgICAgICAgICAgICAgIHJlc291cmNlczogeG9iai5kaWN0LmdldCgiUmVzb3VyY2VzIikgfHwgcmVzb3VyY2VzLAogICAgICAgICAgICAgICAgc3RhdGVNYW5hZ2VyOiB4T2JqU3RhdGVNYW5hZ2VyLAogICAgICAgICAgICAgICAgaW5jbHVkZU1hcmtlZENvbnRlbnQsCiAgICAgICAgICAgICAgICBzaW5rOiBzaW5rV3JhcHBlciwKICAgICAgICAgICAgICAgIHNlZW5TdHlsZXMsCiAgICAgICAgICAgICAgICB2aWV3Qm94LAogICAgICAgICAgICAgICAgbGFuZywKICAgICAgICAgICAgICAgIG1hcmtlZENvbnRlbnREYXRhLAogICAgICAgICAgICAgICAgZGlzYWJsZU5vcm1hbGl6YXRpb24sCiAgICAgICAgICAgICAgICBrZWVwV2hpdGVTcGFjZQogICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgaWYgKCFzaW5rV3JhcHBlci5lbnF1ZXVlSW52b2tlZCkgewogICAgICAgICAgICAgICAgICBlbXB0eVhPYmplY3RDYWNoZS5zZXQobmFtZSwgeG9iai5kaWN0Lm9iaklkLCB0cnVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJlc29sdmVYT2JqZWN0KCk7CiAgICAgICAgICAgICAgfSwgcmVqZWN0WE9iamVjdCk7CiAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChyZWFzb24pIHsKICAgICAgICAgICAgICBpZiAocmVhc29uIGluc3RhbmNlb2YgQWJvcnRFeGNlcHRpb24pIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHNlbGYub3B0aW9ucy5pZ25vcmVFcnJvcnMpIHsKICAgICAgICAgICAgICAgIHdhcm4oYGdldFRleHRDb250ZW50IC0gaWdub3JpbmcgWE9iamVjdDogIiR7cmVhc29ufSIuYCk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHRocm93IHJlYXNvbjsKICAgICAgICAgICAgfSkpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjYXNlIE9QUy5zZXRHU3RhdGU6CiAgICAgICAgICAgIGlzVmFsaWROYW1lID0gYXJnc1swXSBpbnN0YW5jZW9mIE5hbWU7CiAgICAgICAgICAgIG5hbWUgPSBhcmdzWzBdLm5hbWU7CiAgICAgICAgICAgIGlmIChpc1ZhbGlkTmFtZSAmJiBlbXB0eUdTdGF0ZUNhY2hlLmdldEJ5TmFtZShuYW1lKSkgewogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG5leHQobmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmVHU3RhdGUsIHJlamVjdEdTdGF0ZSkgewogICAgICAgICAgICAgIGlmICghaXNWYWxpZE5hbWUpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiR1N0YXRlIG11c3QgYmUgcmVmZXJyZWQgdG8gYnkgbmFtZS4iKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgY29uc3QgZXh0R1N0YXRlID0gcmVzb3VyY2VzLmdldCgiRXh0R1N0YXRlIik7CiAgICAgICAgICAgICAgaWYgKCEoZXh0R1N0YXRlIGluc3RhbmNlb2YgRGljdCkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiRXh0R1N0YXRlIHNob3VsZCBiZSBhIGRpY3Rpb25hcnkuIik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGNvbnN0IGdTdGF0ZSA9IGV4dEdTdGF0ZS5nZXQobmFtZSk7CiAgICAgICAgICAgICAgaWYgKCEoZ1N0YXRlIGluc3RhbmNlb2YgRGljdCkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiR1N0YXRlIHNob3VsZCBiZSBhIGRpY3Rpb25hcnkuIik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGNvbnN0IGdTdGF0ZUZvbnQgPSBnU3RhdGUuZ2V0KCJGb250Iik7CiAgICAgICAgICAgICAgaWYgKCFnU3RhdGVGb250KSB7CiAgICAgICAgICAgICAgICBlbXB0eUdTdGF0ZUNhY2hlLnNldChuYW1lLCBnU3RhdGUub2JqSWQsIHRydWUpOwogICAgICAgICAgICAgICAgcmVzb2x2ZUdTdGF0ZSgpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpOwogICAgICAgICAgICAgIHRleHRTdGF0ZS5mb250TmFtZSA9IG51bGw7CiAgICAgICAgICAgICAgdGV4dFN0YXRlLmZvbnRTaXplID0gZ1N0YXRlRm9udFsxXTsKICAgICAgICAgICAgICBoYW5kbGVTZXRGb250KG51bGwsIGdTdGF0ZUZvbnRbMF0pLnRoZW4ocmVzb2x2ZUdTdGF0ZSwgcmVqZWN0R1N0YXRlKTsKICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikgewogICAgICAgICAgICAgIGlmIChyZWFzb24gaW5zdGFuY2VvZiBBYm9ydEV4Y2VwdGlvbikgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoc2VsZi5vcHRpb25zLmlnbm9yZUVycm9ycykgewogICAgICAgICAgICAgICAgd2FybihgZ2V0VGV4dENvbnRlbnQgLSBpZ25vcmluZyBFeHRHU3RhdGU6ICIke3JlYXNvbn0iLmApOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB0aHJvdyByZWFzb247CiAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY2FzZSBPUFMuYmVnaW5NYXJrZWRDb250ZW50OgogICAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpOwogICAgICAgICAgICBpZiAoaW5jbHVkZU1hcmtlZENvbnRlbnQpIHsKICAgICAgICAgICAgICBtYXJrZWRDb250ZW50RGF0YS5sZXZlbCsrOwogICAgICAgICAgICAgIHRleHRDb250ZW50Lml0ZW1zLnB1c2goewogICAgICAgICAgICAgICAgdHlwZTogImJlZ2luTWFya2VkQ29udGVudCIsCiAgICAgICAgICAgICAgICB0YWc6IGFyZ3NbMF0gaW5zdGFuY2VvZiBOYW1lID8gYXJnc1swXS5uYW1lIDogbnVsbAogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBPUFMuYmVnaW5NYXJrZWRDb250ZW50UHJvcHM6CiAgICAgICAgICAgIGZsdXNoVGV4dENvbnRlbnRJdGVtKCk7CiAgICAgICAgICAgIGlmIChpbmNsdWRlTWFya2VkQ29udGVudCkgewogICAgICAgICAgICAgIG1hcmtlZENvbnRlbnREYXRhLmxldmVsKys7CiAgICAgICAgICAgICAgbGV0IG1jaWQgPSBudWxsOwogICAgICAgICAgICAgIGlmIChhcmdzWzFdIGluc3RhbmNlb2YgRGljdCkgewogICAgICAgICAgICAgICAgbWNpZCA9IGFyZ3NbMV0uZ2V0KCJNQ0lEIik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHRleHRDb250ZW50Lml0ZW1zLnB1c2goewogICAgICAgICAgICAgICAgdHlwZTogImJlZ2luTWFya2VkQ29udGVudFByb3BzIiwKICAgICAgICAgICAgICAgIGlkOiBOdW1iZXIuaXNJbnRlZ2VyKG1jaWQpID8gYCR7c2VsZi5pZEZhY3RvcnkuZ2V0UGFnZU9iaklkKCl9X21jJHttY2lkfWAgOiBudWxsLAogICAgICAgICAgICAgICAgdGFnOiBhcmdzWzBdIGluc3RhbmNlb2YgTmFtZSA/IGFyZ3NbMF0ubmFtZSA6IG51bGwKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgT1BTLmVuZE1hcmtlZENvbnRlbnQ6CiAgICAgICAgICAgIGZsdXNoVGV4dENvbnRlbnRJdGVtKCk7CiAgICAgICAgICAgIGlmIChpbmNsdWRlTWFya2VkQ29udGVudCkgewogICAgICAgICAgICAgIGlmIChtYXJrZWRDb250ZW50RGF0YS5sZXZlbCA9PT0gMCkgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIG1hcmtlZENvbnRlbnREYXRhLmxldmVsLS07CiAgICAgICAgICAgICAgdGV4dENvbnRlbnQuaXRlbXMucHVzaCh7CiAgICAgICAgICAgICAgICB0eXBlOiAiZW5kTWFya2VkQ29udGVudCIKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgT1BTLnJlc3RvcmU6CiAgICAgICAgICAgIGlmIChwcmV2aW91c1N0YXRlICYmIChwcmV2aW91c1N0YXRlLmZvbnQgIT09IHRleHRTdGF0ZS5mb250IHx8IHByZXZpb3VzU3RhdGUuZm9udFNpemUgIT09IHRleHRTdGF0ZS5mb250U2l6ZSB8fCBwcmV2aW91c1N0YXRlLmZvbnROYW1lICE9PSB0ZXh0U3RhdGUuZm9udE5hbWUpKSB7CiAgICAgICAgICAgICAgZmx1c2hUZXh0Q29udGVudEl0ZW0oKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgaWYgKHRleHRDb250ZW50Lml0ZW1zLmxlbmd0aCA+PSBzaW5rLmRlc2lyZWRTaXplKSB7CiAgICAgICAgICBzdG9wID0gdHJ1ZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoc3RvcCkgewogICAgICAgIG5leHQoZGVmZXJyZWQpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpOwogICAgICBlbnF1ZXVlQ2h1bmsoKTsKICAgICAgcmVzb2x2ZSgpOwogICAgfSkuY2F0Y2gocmVhc29uID0+IHsKICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIEFib3J0RXhjZXB0aW9uKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKSB7CiAgICAgICAgd2FybihgZ2V0VGV4dENvbnRlbnQgLSBpZ25vcmluZyBlcnJvcnMgZHVyaW5nICIke3Rhc2submFtZX0iIGAgKyBgdGFzazogIiR7cmVhc29ufSIuYCk7CiAgICAgICAgZmx1c2hUZXh0Q29udGVudEl0ZW0oKTsKICAgICAgICBlbnF1ZXVlQ2h1bmsoKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhyb3cgcmVhc29uOwogICAgfSk7CiAgfQogIGFzeW5jIGV4dHJhY3REYXRhU3RydWN0dXJlcyhkaWN0LCBwcm9wZXJ0aWVzKSB7CiAgICBjb25zdCB4cmVmID0gdGhpcy54cmVmOwogICAgbGV0IGNpZFRvR2lkQnl0ZXM7CiAgICBjb25zdCB0b1VuaWNvZGVQcm9taXNlID0gdGhpcy5yZWFkVG9Vbmljb2RlKHByb3BlcnRpZXMudG9Vbmljb2RlKTsKICAgIGlmIChwcm9wZXJ0aWVzLmNvbXBvc2l0ZSkgewogICAgICBjb25zdCBjaWRTeXN0ZW1JbmZvID0gZGljdC5nZXQoIkNJRFN5c3RlbUluZm8iKTsKICAgICAgaWYgKGNpZFN5c3RlbUluZm8gaW5zdGFuY2VvZiBEaWN0KSB7CiAgICAgICAgcHJvcGVydGllcy5jaWRTeXN0ZW1JbmZvID0gewogICAgICAgICAgcmVnaXN0cnk6IHN0cmluZ1RvUERGU3RyaW5nKGNpZFN5c3RlbUluZm8uZ2V0KCJSZWdpc3RyeSIpKSwKICAgICAgICAgIG9yZGVyaW5nOiBzdHJpbmdUb1BERlN0cmluZyhjaWRTeXN0ZW1JbmZvLmdldCgiT3JkZXJpbmciKSksCiAgICAgICAgICBzdXBwbGVtZW50OiBjaWRTeXN0ZW1JbmZvLmdldCgiU3VwcGxlbWVudCIpCiAgICAgICAgfTsKICAgICAgfQogICAgICB0cnkgewogICAgICAgIGNvbnN0IGNpZFRvR2lkTWFwID0gZGljdC5nZXQoIkNJRFRvR0lETWFwIik7CiAgICAgICAgaWYgKGNpZFRvR2lkTWFwIGluc3RhbmNlb2YgQmFzZVN0cmVhbSkgewogICAgICAgICAgY2lkVG9HaWRCeXRlcyA9IGNpZFRvR2lkTWFwLmdldEJ5dGVzKCk7CiAgICAgICAgfQogICAgICB9IGNhdGNoIChleCkgewogICAgICAgIGlmICghdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycykgewogICAgICAgICAgdGhyb3cgZXg7CiAgICAgICAgfQogICAgICAgIHdhcm4oYGV4dHJhY3REYXRhU3RydWN0dXJlcyAtIGlnbm9yaW5nIENJRFRvR0lETWFwIGRhdGE6ICIke2V4fSIuYCk7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0IGRpZmZlcmVuY2VzID0gW107CiAgICBsZXQgYmFzZUVuY29kaW5nTmFtZSA9IG51bGw7CiAgICBsZXQgZW5jb2Rpbmc7CiAgICBpZiAoZGljdC5oYXMoIkVuY29kaW5nIikpIHsKICAgICAgZW5jb2RpbmcgPSBkaWN0LmdldCgiRW5jb2RpbmciKTsKICAgICAgaWYgKGVuY29kaW5nIGluc3RhbmNlb2YgRGljdCkgewogICAgICAgIGJhc2VFbmNvZGluZ05hbWUgPSBlbmNvZGluZy5nZXQoIkJhc2VFbmNvZGluZyIpOwogICAgICAgIGJhc2VFbmNvZGluZ05hbWUgPSBiYXNlRW5jb2RpbmdOYW1lIGluc3RhbmNlb2YgTmFtZSA/IGJhc2VFbmNvZGluZ05hbWUubmFtZSA6IG51bGw7CiAgICAgICAgaWYgKGVuY29kaW5nLmhhcygiRGlmZmVyZW5jZXMiKSkgewogICAgICAgICAgY29uc3QgZGlmZkVuY29kaW5nID0gZW5jb2RpbmcuZ2V0KCJEaWZmZXJlbmNlcyIpOwogICAgICAgICAgbGV0IGluZGV4ID0gMDsKICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZGlmZkVuY29kaW5nKSB7CiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB4cmVmLmZldGNoSWZSZWYoZW50cnkpOwogICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICAgICAgaW5kZXggPSBkYXRhOwogICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBOYW1lKSB7CiAgICAgICAgICAgICAgZGlmZmVyZW5jZXNbaW5kZXgrK10gPSBkYXRhLm5hbWU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBJbnZhbGlkIGVudHJ5IGluICdEaWZmZXJlbmNlcycgYXJyYXk6ICR7ZGF0YX1gKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChlbmNvZGluZyBpbnN0YW5jZW9mIE5hbWUpIHsKICAgICAgICBiYXNlRW5jb2RpbmdOYW1lID0gZW5jb2RpbmcubmFtZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zdCBtc2cgPSAiRW5jb2RpbmcgaXMgbm90IGEgTmFtZSBub3IgYSBEaWN0IjsKICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpIHsKICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcihtc2cpOwogICAgICAgIH0KICAgICAgICB3YXJuKG1zZyk7CiAgICAgIH0KICAgICAgaWYgKGJhc2VFbmNvZGluZ05hbWUgIT09ICJNYWNSb21hbkVuY29kaW5nIiAmJiBiYXNlRW5jb2RpbmdOYW1lICE9PSAiTWFjRXhwZXJ0RW5jb2RpbmciICYmIGJhc2VFbmNvZGluZ05hbWUgIT09ICJXaW5BbnNpRW5jb2RpbmciKSB7CiAgICAgICAgYmFzZUVuY29kaW5nTmFtZSA9IG51bGw7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0IG5vbkVtYmVkZGVkRm9udCA9ICFwcm9wZXJ0aWVzLmZpbGUgfHwgcHJvcGVydGllcy5pc0ludGVybmFsRm9udCwKICAgICAgaXNTeW1ib2xzRm9udE5hbWUgPSBnZXRTeW1ib2xzRm9udHMoKVtwcm9wZXJ0aWVzLm5hbWVdOwogICAgaWYgKGJhc2VFbmNvZGluZ05hbWUgJiYgbm9uRW1iZWRkZWRGb250ICYmIGlzU3ltYm9sc0ZvbnROYW1lKSB7CiAgICAgIGJhc2VFbmNvZGluZ05hbWUgPSBudWxsOwogICAgfQogICAgaWYgKGJhc2VFbmNvZGluZ05hbWUpIHsKICAgICAgcHJvcGVydGllcy5kZWZhdWx0RW5jb2RpbmcgPSBnZXRFbmNvZGluZyhiYXNlRW5jb2RpbmdOYW1lKTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0IGlzU3ltYm9saWNGb250ID0gISEocHJvcGVydGllcy5mbGFncyAmIEZvbnRGbGFncy5TeW1ib2xpYyk7CiAgICAgIGNvbnN0IGlzTm9uc3ltYm9saWNGb250ID0gISEocHJvcGVydGllcy5mbGFncyAmIEZvbnRGbGFncy5Ob25zeW1ib2xpYyk7CiAgICAgIGVuY29kaW5nID0gU3RhbmRhcmRFbmNvZGluZzsKICAgICAgaWYgKHByb3BlcnRpZXMudHlwZSA9PT0gIlRydWVUeXBlIiAmJiAhaXNOb25zeW1ib2xpY0ZvbnQpIHsKICAgICAgICBlbmNvZGluZyA9IFdpbkFuc2lFbmNvZGluZzsKICAgICAgfQogICAgICBpZiAoaXNTeW1ib2xpY0ZvbnQgfHwgaXNTeW1ib2xzRm9udE5hbWUpIHsKICAgICAgICBlbmNvZGluZyA9IE1hY1JvbWFuRW5jb2Rpbmc7CiAgICAgICAgaWYgKG5vbkVtYmVkZGVkRm9udCkgewogICAgICAgICAgaWYgKC9TeW1ib2wvaS50ZXN0KHByb3BlcnRpZXMubmFtZSkpIHsKICAgICAgICAgICAgZW5jb2RpbmcgPSBTeW1ib2xTZXRFbmNvZGluZzsKICAgICAgICAgIH0gZWxzZSBpZiAoL0RpbmdiYXRzL2kudGVzdChwcm9wZXJ0aWVzLm5hbWUpKSB7CiAgICAgICAgICAgIGVuY29kaW5nID0gWmFwZkRpbmdiYXRzRW5jb2Rpbmc7CiAgICAgICAgICB9IGVsc2UgaWYgKC9XaW5nZGluZ3MvaS50ZXN0KHByb3BlcnRpZXMubmFtZSkpIHsKICAgICAgICAgICAgZW5jb2RpbmcgPSBXaW5BbnNpRW5jb2Rpbmc7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHByb3BlcnRpZXMuZGVmYXVsdEVuY29kaW5nID0gZW5jb2Rpbmc7CiAgICB9CiAgICBwcm9wZXJ0aWVzLmRpZmZlcmVuY2VzID0gZGlmZmVyZW5jZXM7CiAgICBwcm9wZXJ0aWVzLmJhc2VFbmNvZGluZ05hbWUgPSBiYXNlRW5jb2RpbmdOYW1lOwogICAgcHJvcGVydGllcy5oYXNFbmNvZGluZyA9ICEhYmFzZUVuY29kaW5nTmFtZSB8fCBkaWZmZXJlbmNlcy5sZW5ndGggPiAwOwogICAgcHJvcGVydGllcy5kaWN0ID0gZGljdDsKICAgIHByb3BlcnRpZXMudG9Vbmljb2RlID0gYXdhaXQgdG9Vbmljb2RlUHJvbWlzZTsKICAgIGNvbnN0IGJ1aWx0VG9Vbmljb2RlID0gYXdhaXQgdGhpcy5idWlsZFRvVW5pY29kZShwcm9wZXJ0aWVzKTsKICAgIHByb3BlcnRpZXMudG9Vbmljb2RlID0gYnVpbHRUb1VuaWNvZGU7CiAgICBpZiAoY2lkVG9HaWRCeXRlcykgewogICAgICBwcm9wZXJ0aWVzLmNpZFRvR2lkTWFwID0gdGhpcy5yZWFkQ2lkVG9HaWRNYXAoY2lkVG9HaWRCeXRlcywgYnVpbHRUb1VuaWNvZGUpOwogICAgfQogICAgcmV0dXJuIHByb3BlcnRpZXM7CiAgfQogIF9zaW1wbGVGb250VG9Vbmljb2RlKHByb3BlcnRpZXMsIGZvcmNlR2x5cGhzID0gZmFsc2UpIHsKICAgIGFzc2VydCghcHJvcGVydGllcy5jb21wb3NpdGUsICJNdXN0IGJlIGEgc2ltcGxlIGZvbnQuIik7CiAgICBjb25zdCB0b1VuaWNvZGUgPSBbXTsKICAgIGNvbnN0IGVuY29kaW5nID0gcHJvcGVydGllcy5kZWZhdWx0RW5jb2Rpbmcuc2xpY2UoKTsKICAgIGNvbnN0IGJhc2VFbmNvZGluZ05hbWUgPSBwcm9wZXJ0aWVzLmJhc2VFbmNvZGluZ05hbWU7CiAgICBjb25zdCBkaWZmZXJlbmNlcyA9IHByb3BlcnRpZXMuZGlmZmVyZW5jZXM7CiAgICBmb3IgKGNvbnN0IGNoYXJjb2RlIGluIGRpZmZlcmVuY2VzKSB7CiAgICAgIGNvbnN0IGdseXBoTmFtZSA9IGRpZmZlcmVuY2VzW2NoYXJjb2RlXTsKICAgICAgaWYgKGdseXBoTmFtZSA9PT0gIi5ub3RkZWYiKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgZW5jb2RpbmdbY2hhcmNvZGVdID0gZ2x5cGhOYW1lOwogICAgfQogICAgY29uc3QgZ2x5cGhzVW5pY29kZU1hcCA9IGdldEdseXBoc1VuaWNvZGUoKTsKICAgIGZvciAoY29uc3QgY2hhcmNvZGUgaW4gZW5jb2RpbmcpIHsKICAgICAgbGV0IGdseXBoTmFtZSA9IGVuY29kaW5nW2NoYXJjb2RlXTsKICAgICAgaWYgKGdseXBoTmFtZSA9PT0gIiIpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBsZXQgdW5pY29kZSA9IGdseXBoc1VuaWNvZGVNYXBbZ2x5cGhOYW1lXTsKICAgICAgaWYgKHVuaWNvZGUgIT09IHVuZGVmaW5lZCkgewogICAgICAgIHRvVW5pY29kZVtjaGFyY29kZV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHVuaWNvZGUpOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGxldCBjb2RlID0gMDsKICAgICAgc3dpdGNoIChnbHlwaE5hbWVbMF0pIHsKICAgICAgICBjYXNlICJHIjoKICAgICAgICAgIGlmIChnbHlwaE5hbWUubGVuZ3RoID09PSAzKSB7CiAgICAgICAgICAgIGNvZGUgPSBwYXJzZUludChnbHlwaE5hbWUuc3Vic3RyaW5nKDEpLCAxNik7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJnIjoKICAgICAgICAgIGlmIChnbHlwaE5hbWUubGVuZ3RoID09PSA1KSB7CiAgICAgICAgICAgIGNvZGUgPSBwYXJzZUludChnbHlwaE5hbWUuc3Vic3RyaW5nKDEpLCAxNik7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJDIjoKICAgICAgICBjYXNlICJjIjoKICAgICAgICAgIGlmIChnbHlwaE5hbWUubGVuZ3RoID49IDMgJiYgZ2x5cGhOYW1lLmxlbmd0aCA8PSA0KSB7CiAgICAgICAgICAgIGNvbnN0IGNvZGVTdHIgPSBnbHlwaE5hbWUuc3Vic3RyaW5nKDEpOwogICAgICAgICAgICBpZiAoZm9yY2VHbHlwaHMpIHsKICAgICAgICAgICAgICBjb2RlID0gcGFyc2VJbnQoY29kZVN0ciwgMTYpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvZGUgPSArY29kZVN0cjsKICAgICAgICAgICAgaWYgKE51bWJlci5pc05hTihjb2RlKSAmJiBOdW1iZXIuaXNJbnRlZ2VyKHBhcnNlSW50KGNvZGVTdHIsIDE2KSkpIHsKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2ltcGxlRm9udFRvVW5pY29kZShwcm9wZXJ0aWVzLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAidSI6CiAgICAgICAgICB1bmljb2RlID0gZ2V0VW5pY29kZUZvckdseXBoKGdseXBoTmFtZSwgZ2x5cGhzVW5pY29kZU1hcCk7CiAgICAgICAgICBpZiAodW5pY29kZSAhPT0gLTEpIHsKICAgICAgICAgICAgY29kZSA9IHVuaWNvZGU7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgc3dpdGNoIChnbHlwaE5hbWUpIHsKICAgICAgICAgICAgY2FzZSAiZl9oIjoKICAgICAgICAgICAgY2FzZSAiZl90IjoKICAgICAgICAgICAgY2FzZSAiVF9oIjoKICAgICAgICAgICAgICB0b1VuaWNvZGVbY2hhcmNvZGVdID0gZ2x5cGhOYW1lLnJlcGxhY2VBbGwoIl8iLCAiIik7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgICBpZiAoY29kZSA+IDAgJiYgY29kZSA8PSAweDEwZmZmZiAmJiBOdW1iZXIuaXNJbnRlZ2VyKGNvZGUpKSB7CiAgICAgICAgaWYgKGJhc2VFbmNvZGluZ05hbWUgJiYgY29kZSA9PT0gK2NoYXJjb2RlKSB7CiAgICAgICAgICBjb25zdCBiYXNlRW5jb2RpbmcgPSBnZXRFbmNvZGluZyhiYXNlRW5jb2RpbmdOYW1lKTsKICAgICAgICAgIGlmIChiYXNlRW5jb2RpbmcgJiYgKGdseXBoTmFtZSA9IGJhc2VFbmNvZGluZ1tjaGFyY29kZV0pKSB7CiAgICAgICAgICAgIHRvVW5pY29kZVtjaGFyY29kZV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGdseXBoc1VuaWNvZGVNYXBbZ2x5cGhOYW1lXSk7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0b1VuaWNvZGVbY2hhcmNvZGVdID0gU3RyaW5nLmZyb21Db2RlUG9pbnQoY29kZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0b1VuaWNvZGU7CiAgfQogIGFzeW5jIGJ1aWxkVG9Vbmljb2RlKHByb3BlcnRpZXMpIHsKICAgIHByb3BlcnRpZXMuaGFzSW5jbHVkZWRUb1VuaWNvZGVNYXAgPSBwcm9wZXJ0aWVzLnRvVW5pY29kZT8ubGVuZ3RoID4gMDsKICAgIGlmIChwcm9wZXJ0aWVzLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwKSB7CiAgICAgIGlmICghcHJvcGVydGllcy5jb21wb3NpdGUgJiYgcHJvcGVydGllcy5oYXNFbmNvZGluZykgewogICAgICAgIHByb3BlcnRpZXMuZmFsbGJhY2tUb1VuaWNvZGUgPSB0aGlzLl9zaW1wbGVGb250VG9Vbmljb2RlKHByb3BlcnRpZXMpOwogICAgICB9CiAgICAgIHJldHVybiBwcm9wZXJ0aWVzLnRvVW5pY29kZTsKICAgIH0KICAgIGlmICghcHJvcGVydGllcy5jb21wb3NpdGUpIHsKICAgICAgcmV0dXJuIG5ldyBUb1VuaWNvZGVNYXAodGhpcy5fc2ltcGxlRm9udFRvVW5pY29kZShwcm9wZXJ0aWVzKSk7CiAgICB9CiAgICBpZiAocHJvcGVydGllcy5jb21wb3NpdGUgJiYgKHByb3BlcnRpZXMuY01hcC5idWlsdEluQ01hcCAmJiAhKHByb3BlcnRpZXMuY01hcCBpbnN0YW5jZW9mIElkZW50aXR5Q01hcCkgfHwgcHJvcGVydGllcy5jaWRTeXN0ZW1JbmZvPy5yZWdpc3RyeSA9PT0gIkFkb2JlIiAmJiAocHJvcGVydGllcy5jaWRTeXN0ZW1JbmZvLm9yZGVyaW5nID09PSAiR0IxIiB8fCBwcm9wZXJ0aWVzLmNpZFN5c3RlbUluZm8ub3JkZXJpbmcgPT09ICJDTlMxIiB8fCBwcm9wZXJ0aWVzLmNpZFN5c3RlbUluZm8ub3JkZXJpbmcgPT09ICJKYXBhbjEiIHx8IHByb3BlcnRpZXMuY2lkU3lzdGVtSW5mby5vcmRlcmluZyA9PT0gIktvcmVhMSIpKSkgewogICAgICBjb25zdCB7CiAgICAgICAgcmVnaXN0cnksCiAgICAgICAgb3JkZXJpbmcKICAgICAgfSA9IHByb3BlcnRpZXMuY2lkU3lzdGVtSW5mbzsKICAgICAgY29uc3QgdWNzMkNNYXBOYW1lID0gTmFtZS5nZXQoYCR7cmVnaXN0cnl9LSR7b3JkZXJpbmd9LVVDUzJgKTsKICAgICAgY29uc3QgdWNzMkNNYXAgPSBhd2FpdCBDTWFwRmFjdG9yeS5jcmVhdGUoewogICAgICAgIGVuY29kaW5nOiB1Y3MyQ01hcE5hbWUsCiAgICAgICAgZmV0Y2hCdWlsdEluQ01hcDogdGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kLAogICAgICAgIHVzZUNNYXA6IG51bGwKICAgICAgfSk7CiAgICAgIGNvbnN0IHRvVW5pY29kZSA9IFtdLAogICAgICAgIGJ1ZiA9IFtdOwogICAgICBwcm9wZXJ0aWVzLmNNYXAuZm9yRWFjaChmdW5jdGlvbiAoY2hhcmNvZGUsIGNpZCkgewogICAgICAgIGlmIChjaWQgPiAweGZmZmYpIHsKICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiTWF4IHNpemUgb2YgQ0lEIGlzIDY1LDUzNSIpOwogICAgICAgIH0KICAgICAgICBjb25zdCB1Y3MyID0gdWNzMkNNYXAubG9va3VwKGNpZCk7CiAgICAgICAgaWYgKHVjczIpIHsKICAgICAgICAgIGJ1Zi5sZW5ndGggPSAwOwogICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gdWNzMi5sZW5ndGg7IGkgPCBpaTsgaSArPSAyKSB7CiAgICAgICAgICAgIGJ1Zi5wdXNoKCh1Y3MyLmNoYXJDb2RlQXQoaSkgPDwgOCkgKyB1Y3MyLmNoYXJDb2RlQXQoaSArIDEpKTsKICAgICAgICAgIH0KICAgICAgICAgIHRvVW5pY29kZVtjaGFyY29kZV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKC4uLmJ1Zik7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgcmV0dXJuIG5ldyBUb1VuaWNvZGVNYXAodG9Vbmljb2RlKTsKICAgIH0KICAgIHJldHVybiBuZXcgSWRlbnRpdHlUb1VuaWNvZGVNYXAocHJvcGVydGllcy5maXJzdENoYXIsIHByb3BlcnRpZXMubGFzdENoYXIpOwogIH0KICBhc3luYyByZWFkVG9Vbmljb2RlKGNtYXBPYmopIHsKICAgIGlmICghY21hcE9iaikgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmIChjbWFwT2JqIGluc3RhbmNlb2YgTmFtZSkgewogICAgICBjb25zdCBjbWFwID0gYXdhaXQgQ01hcEZhY3RvcnkuY3JlYXRlKHsKICAgICAgICBlbmNvZGluZzogY21hcE9iaiwKICAgICAgICBmZXRjaEJ1aWx0SW5DTWFwOiB0aGlzLl9mZXRjaEJ1aWx0SW5DTWFwQm91bmQsCiAgICAgICAgdXNlQ01hcDogbnVsbAogICAgICB9KTsKICAgICAgaWYgKGNtYXAgaW5zdGFuY2VvZiBJZGVudGl0eUNNYXApIHsKICAgICAgICByZXR1cm4gbmV3IElkZW50aXR5VG9Vbmljb2RlTWFwKDAsIDB4ZmZmZik7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBUb1VuaWNvZGVNYXAoY21hcC5nZXRNYXAoKSk7CiAgICB9CiAgICBpZiAoY21hcE9iaiBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pIHsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCBjbWFwID0gYXdhaXQgQ01hcEZhY3RvcnkuY3JlYXRlKHsKICAgICAgICAgIGVuY29kaW5nOiBjbWFwT2JqLAogICAgICAgICAgZmV0Y2hCdWlsdEluQ01hcDogdGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kLAogICAgICAgICAgdXNlQ01hcDogbnVsbAogICAgICAgIH0pOwogICAgICAgIGlmIChjbWFwIGluc3RhbmNlb2YgSWRlbnRpdHlDTWFwKSB7CiAgICAgICAgICByZXR1cm4gbmV3IElkZW50aXR5VG9Vbmljb2RlTWFwKDAsIDB4ZmZmZik7CiAgICAgICAgfQogICAgICAgIGNvbnN0IG1hcCA9IG5ldyBBcnJheShjbWFwLmxlbmd0aCk7CiAgICAgICAgY21hcC5mb3JFYWNoKGZ1bmN0aW9uIChjaGFyQ29kZSwgdG9rZW4pIHsKICAgICAgICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICJudW1iZXIiKSB7CiAgICAgICAgICAgIG1hcFtjaGFyQ29kZV0gPSBTdHJpbmcuZnJvbUNvZGVQb2ludCh0b2tlbik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0b2tlbi5sZW5ndGggJSAyICE9PSAwKSB7CiAgICAgICAgICAgIHRva2VuID0gIlx1MDAwMCIgKyB0b2tlbjsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHN0ciA9IFtdOwogICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCB0b2tlbi5sZW5ndGg7IGsgKz0gMikgewogICAgICAgICAgICBjb25zdCB3MSA9IHRva2VuLmNoYXJDb2RlQXQoaykgPDwgOCB8IHRva2VuLmNoYXJDb2RlQXQoayArIDEpOwogICAgICAgICAgICBpZiAoKHcxICYgMHhmODAwKSAhPT0gMHhkODAwKSB7CiAgICAgICAgICAgICAgc3RyLnB1c2godzEpOwogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGsgKz0gMjsKICAgICAgICAgICAgY29uc3QgdzIgPSB0b2tlbi5jaGFyQ29kZUF0KGspIDw8IDggfCB0b2tlbi5jaGFyQ29kZUF0KGsgKyAxKTsKICAgICAgICAgICAgc3RyLnB1c2goKCh3MSAmIDB4M2ZmKSA8PCAxMCkgKyAodzIgJiAweDNmZikgKyAweDEwMDAwKTsKICAgICAgICAgIH0KICAgICAgICAgIG1hcFtjaGFyQ29kZV0gPSBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5zdHIpOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBuZXcgVG9Vbmljb2RlTWFwKG1hcCk7CiAgICAgIH0gY2F0Y2ggKHJlYXNvbikgewogICAgICAgIGlmIChyZWFzb24gaW5zdGFuY2VvZiBBYm9ydEV4Y2VwdGlvbikgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKSB7CiAgICAgICAgICB3YXJuKGByZWFkVG9Vbmljb2RlIC0gaWdub3JpbmcgVG9Vbmljb2RlIGRhdGE6ICIke3JlYXNvbn0iLmApOwogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIHRocm93IHJlYXNvbjsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIHJlYWRDaWRUb0dpZE1hcChnbHlwaHNEYXRhLCB0b1VuaWNvZGUpIHsKICAgIGNvbnN0IHJlc3VsdCA9IFtdOwogICAgZm9yIChsZXQgaiA9IDAsIGpqID0gZ2x5cGhzRGF0YS5sZW5ndGg7IGogPCBqajsgaisrKSB7CiAgICAgIGNvbnN0IGdseXBoSUQgPSBnbHlwaHNEYXRhW2orK10gPDwgOCB8IGdseXBoc0RhdGFbal07CiAgICAgIGNvbnN0IGNvZGUgPSBqID4+IDE7CiAgICAgIGlmIChnbHlwaElEID09PSAwICYmICF0b1VuaWNvZGUuaGFzKGNvZGUpKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgcmVzdWx0W2NvZGVdID0gZ2x5cGhJRDsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQogIGV4dHJhY3RXaWR0aHMoZGljdCwgZGVzY3JpcHRvciwgcHJvcGVydGllcykgewogICAgY29uc3QgeHJlZiA9IHRoaXMueHJlZjsKICAgIGxldCBnbHlwaHNXaWR0aHMgPSBbXTsKICAgIGxldCBkZWZhdWx0V2lkdGggPSAwOwogICAgY29uc3QgZ2x5cGhzVk1ldHJpY3MgPSBbXTsKICAgIGxldCBkZWZhdWx0Vk1ldHJpY3M7CiAgICBpZiAocHJvcGVydGllcy5jb21wb3NpdGUpIHsKICAgICAgY29uc3QgZHcgPSBkaWN0LmdldCgiRFciKTsKICAgICAgZGVmYXVsdFdpZHRoID0gdHlwZW9mIGR3ID09PSAibnVtYmVyIiA/IE1hdGguY2VpbChkdykgOiAxMDAwOwogICAgICBjb25zdCB3aWR0aHMgPSBkaWN0LmdldCgiVyIpOwogICAgICBpZiAoQXJyYXkuaXNBcnJheSh3aWR0aHMpKSB7CiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gd2lkdGhzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgICAgIGxldCBzdGFydCA9IHhyZWYuZmV0Y2hJZlJlZih3aWR0aHNbaSsrXSk7CiAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoc3RhcnQpKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgY29kZSA9IHhyZWYuZmV0Y2hJZlJlZih3aWR0aHNbaV0pOwogICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29kZSkpIHsKICAgICAgICAgICAgZm9yIChjb25zdCBjIG9mIGNvZGUpIHsKICAgICAgICAgICAgICBjb25zdCB3aWR0aCA9IHhyZWYuZmV0Y2hJZlJlZihjKTsKICAgICAgICAgICAgICBpZiAodHlwZW9mIHdpZHRoID09PSAibnVtYmVyIikgewogICAgICAgICAgICAgICAgZ2x5cGhzV2lkdGhzW3N0YXJ0XSA9IHdpZHRoOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBzdGFydCsrOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKE51bWJlci5pc0ludGVnZXIoY29kZSkpIHsKICAgICAgICAgICAgY29uc3Qgd2lkdGggPSB4cmVmLmZldGNoSWZSZWYod2lkdGhzWysraV0pOwogICAgICAgICAgICBpZiAodHlwZW9mIHdpZHRoICE9PSAibnVtYmVyIikgewogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvciAobGV0IGogPSBzdGFydDsgaiA8PSBjb2RlOyBqKyspIHsKICAgICAgICAgICAgICBnbHlwaHNXaWR0aHNbal0gPSB3aWR0aDsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChwcm9wZXJ0aWVzLnZlcnRpY2FsKSB7CiAgICAgICAgY29uc3QgZHcyID0gZGljdC5nZXRBcnJheSgiRFcyIik7CiAgICAgICAgbGV0IHZtZXRyaWNzID0gaXNOdW1iZXJBcnJheShkdzIsIDIpID8gZHcyIDogWzg4MCwgLTEwMDBdOwogICAgICAgIGRlZmF1bHRWTWV0cmljcyA9IFt2bWV0cmljc1sxXSwgZGVmYXVsdFdpZHRoICogMC41LCB2bWV0cmljc1swXV07CiAgICAgICAgdm1ldHJpY3MgPSBkaWN0LmdldCgiVzIiKTsKICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2bWV0cmljcykpIHsKICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHZtZXRyaWNzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgICAgICAgbGV0IHN0YXJ0ID0geHJlZi5mZXRjaElmUmVmKHZtZXRyaWNzW2krK10pOwogICAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoc3RhcnQpKSB7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgY29kZSA9IHhyZWYuZmV0Y2hJZlJlZih2bWV0cmljc1tpXSk7CiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvZGUpKSB7CiAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDAsIGpqID0gY29kZS5sZW5ndGg7IGogPCBqajsgaisrKSB7CiAgICAgICAgICAgICAgICBjb25zdCB2bWV0cmljID0gW3hyZWYuZmV0Y2hJZlJlZihjb2RlW2orK10pLCB4cmVmLmZldGNoSWZSZWYoY29kZVtqKytdKSwgeHJlZi5mZXRjaElmUmVmKGNvZGVbal0pXTsKICAgICAgICAgICAgICAgIGlmIChpc051bWJlckFycmF5KHZtZXRyaWMsIG51bGwpKSB7CiAgICAgICAgICAgICAgICAgIGdseXBoc1ZNZXRyaWNzW3N0YXJ0XSA9IHZtZXRyaWM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGFydCsrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGNvZGUpKSB7CiAgICAgICAgICAgICAgY29uc3Qgdm1ldHJpYyA9IFt4cmVmLmZldGNoSWZSZWYodm1ldHJpY3NbKytpXSksIHhyZWYuZmV0Y2hJZlJlZih2bWV0cmljc1srK2ldKSwgeHJlZi5mZXRjaElmUmVmKHZtZXRyaWNzWysraV0pXTsKICAgICAgICAgICAgICBpZiAoIWlzTnVtYmVyQXJyYXkodm1ldHJpYywgbnVsbCkpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBmb3IgKGxldCBqID0gc3RhcnQ7IGogPD0gY29kZTsgaisrKSB7CiAgICAgICAgICAgICAgICBnbHlwaHNWTWV0cmljc1tqXSA9IHZtZXRyaWM7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgewogICAgICBjb25zdCB3aWR0aHMgPSBkaWN0LmdldCgiV2lkdGhzIik7CiAgICAgIGlmIChBcnJheS5pc0FycmF5KHdpZHRocykpIHsKICAgICAgICBsZXQgaiA9IHByb3BlcnRpZXMuZmlyc3RDaGFyOwogICAgICAgIGZvciAoY29uc3QgdyBvZiB3aWR0aHMpIHsKICAgICAgICAgIGNvbnN0IHdpZHRoID0geHJlZi5mZXRjaElmUmVmKHcpOwogICAgICAgICAgaWYgKHR5cGVvZiB3aWR0aCA9PT0gIm51bWJlciIpIHsKICAgICAgICAgICAgZ2x5cGhzV2lkdGhzW2pdID0gd2lkdGg7CiAgICAgICAgICB9CiAgICAgICAgICBqKys7CiAgICAgICAgfQogICAgICAgIGNvbnN0IG1pc3NpbmdXaWR0aCA9IGRlc2NyaXB0b3IuZ2V0KCJNaXNzaW5nV2lkdGgiKTsKICAgICAgICBkZWZhdWx0V2lkdGggPSB0eXBlb2YgbWlzc2luZ1dpZHRoID09PSAibnVtYmVyIiA/IG1pc3NpbmdXaWR0aCA6IDA7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29uc3QgYmFzZUZvbnROYW1lID0gZGljdC5nZXQoIkJhc2VGb250Iik7CiAgICAgICAgaWYgKGJhc2VGb250TmFtZSBpbnN0YW5jZW9mIE5hbWUpIHsKICAgICAgICAgIGNvbnN0IG1ldHJpY3MgPSB0aGlzLmdldEJhc2VGb250TWV0cmljcyhiYXNlRm9udE5hbWUubmFtZSk7CiAgICAgICAgICBnbHlwaHNXaWR0aHMgPSB0aGlzLmJ1aWxkQ2hhckNvZGVUb1dpZHRoKG1ldHJpY3Mud2lkdGhzLCBwcm9wZXJ0aWVzKTsKICAgICAgICAgIGRlZmF1bHRXaWR0aCA9IG1ldHJpY3MuZGVmYXVsdFdpZHRoOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgbGV0IGlzTW9ub3NwYWNlID0gdHJ1ZTsKICAgIGxldCBmaXJzdFdpZHRoID0gZGVmYXVsdFdpZHRoOwogICAgZm9yIChjb25zdCBnbHlwaCBpbiBnbHlwaHNXaWR0aHMpIHsKICAgICAgY29uc3QgZ2x5cGhXaWR0aCA9IGdseXBoc1dpZHRoc1tnbHlwaF07CiAgICAgIGlmICghZ2x5cGhXaWR0aCkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmICghZmlyc3RXaWR0aCkgewogICAgICAgIGZpcnN0V2lkdGggPSBnbHlwaFdpZHRoOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmIChmaXJzdFdpZHRoICE9PSBnbHlwaFdpZHRoKSB7CiAgICAgICAgaXNNb25vc3BhY2UgPSBmYWxzZTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgaWYgKGlzTW9ub3NwYWNlKSB7CiAgICAgIHByb3BlcnRpZXMuZmxhZ3MgfD0gRm9udEZsYWdzLkZpeGVkUGl0Y2g7CiAgICB9IGVsc2UgewogICAgICBwcm9wZXJ0aWVzLmZsYWdzICY9IH5Gb250RmxhZ3MuRml4ZWRQaXRjaDsKICAgIH0KICAgIHByb3BlcnRpZXMuZGVmYXVsdFdpZHRoID0gZGVmYXVsdFdpZHRoOwogICAgcHJvcGVydGllcy53aWR0aHMgPSBnbHlwaHNXaWR0aHM7CiAgICBwcm9wZXJ0aWVzLmRlZmF1bHRWTWV0cmljcyA9IGRlZmF1bHRWTWV0cmljczsKICAgIHByb3BlcnRpZXMudm1ldHJpY3MgPSBnbHlwaHNWTWV0cmljczsKICB9CiAgaXNTZXJpZkZvbnQoYmFzZUZvbnROYW1lKSB7CiAgICBjb25zdCBmb250TmFtZVdvU3R5bGUgPSBiYXNlRm9udE5hbWUuc3BsaXQoIi0iLCAxKVswXTsKICAgIHJldHVybiBmb250TmFtZVdvU3R5bGUgaW4gZ2V0U2VyaWZGb250cygpIHx8IC9zZXJpZi9naS50ZXN0KGZvbnROYW1lV29TdHlsZSk7CiAgfQogIGdldEJhc2VGb250TWV0cmljcyhuYW1lKSB7CiAgICBsZXQgZGVmYXVsdFdpZHRoID0gMDsKICAgIGxldCB3aWR0aHMgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgbGV0IG1vbm9zcGFjZSA9IGZhbHNlOwogICAgY29uc3Qgc3RkRm9udE1hcCA9IGdldFN0ZEZvbnRNYXAoKTsKICAgIGxldCBsb29rdXBOYW1lID0gc3RkRm9udE1hcFtuYW1lXSB8fCBuYW1lOwogICAgY29uc3QgTWV0cmljcyA9IGdldE1ldHJpY3MoKTsKICAgIGlmICghKGxvb2t1cE5hbWUgaW4gTWV0cmljcykpIHsKICAgICAgbG9va3VwTmFtZSA9IHRoaXMuaXNTZXJpZkZvbnQobmFtZSkgPyAiVGltZXMtUm9tYW4iIDogIkhlbHZldGljYSI7CiAgICB9CiAgICBjb25zdCBnbHlwaFdpZHRocyA9IE1ldHJpY3NbbG9va3VwTmFtZV07CiAgICBpZiAodHlwZW9mIGdseXBoV2lkdGhzID09PSAibnVtYmVyIikgewogICAgICBkZWZhdWx0V2lkdGggPSBnbHlwaFdpZHRoczsKICAgICAgbW9ub3NwYWNlID0gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIHdpZHRocyA9IGdseXBoV2lkdGhzKCk7CiAgICB9CiAgICByZXR1cm4gewogICAgICBkZWZhdWx0V2lkdGgsCiAgICAgIG1vbm9zcGFjZSwKICAgICAgd2lkdGhzCiAgICB9OwogIH0KICBidWlsZENoYXJDb2RlVG9XaWR0aCh3aWR0aHNCeUdseXBoTmFtZSwgcHJvcGVydGllcykgewogICAgY29uc3Qgd2lkdGhzID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgIGNvbnN0IGRpZmZlcmVuY2VzID0gcHJvcGVydGllcy5kaWZmZXJlbmNlczsKICAgIGNvbnN0IGVuY29kaW5nID0gcHJvcGVydGllcy5kZWZhdWx0RW5jb2Rpbmc7CiAgICBmb3IgKGxldCBjaGFyQ29kZSA9IDA7IGNoYXJDb2RlIDwgMjU2OyBjaGFyQ29kZSsrKSB7CiAgICAgIGlmIChjaGFyQ29kZSBpbiBkaWZmZXJlbmNlcyAmJiB3aWR0aHNCeUdseXBoTmFtZVtkaWZmZXJlbmNlc1tjaGFyQ29kZV1dKSB7CiAgICAgICAgd2lkdGhzW2NoYXJDb2RlXSA9IHdpZHRoc0J5R2x5cGhOYW1lW2RpZmZlcmVuY2VzW2NoYXJDb2RlXV07CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKGNoYXJDb2RlIGluIGVuY29kaW5nICYmIHdpZHRoc0J5R2x5cGhOYW1lW2VuY29kaW5nW2NoYXJDb2RlXV0pIHsKICAgICAgICB3aWR0aHNbY2hhckNvZGVdID0gd2lkdGhzQnlHbHlwaE5hbWVbZW5jb2RpbmdbY2hhckNvZGVdXTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHdpZHRoczsKICB9CiAgcHJlRXZhbHVhdGVGb250KGRpY3QpIHsKICAgIGNvbnN0IGJhc2VEaWN0ID0gZGljdDsKICAgIGxldCB0eXBlID0gZGljdC5nZXQoIlN1YnR5cGUiKTsKICAgIGlmICghKHR5cGUgaW5zdGFuY2VvZiBOYW1lKSkgewogICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoImludmFsaWQgZm9udCBTdWJ0eXBlIik7CiAgICB9CiAgICBsZXQgY29tcG9zaXRlID0gZmFsc2U7CiAgICBsZXQgaGFzaDsKICAgIGlmICh0eXBlLm5hbWUgPT09ICJUeXBlMCIpIHsKICAgICAgY29uc3QgZGYgPSBkaWN0LmdldCgiRGVzY2VuZGFudEZvbnRzIik7CiAgICAgIGlmICghZGYpIHsKICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkRlc2NlbmRhbnQgZm9udHMgYXJlIG5vdCBzcGVjaWZpZWQiKTsKICAgICAgfQogICAgICBkaWN0ID0gQXJyYXkuaXNBcnJheShkZikgPyB0aGlzLnhyZWYuZmV0Y2hJZlJlZihkZlswXSkgOiBkZjsKICAgICAgaWYgKCEoZGljdCBpbnN0YW5jZW9mIERpY3QpKSB7CiAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJEZXNjZW5kYW50IGZvbnQgaXMgbm90IGEgZGljdGlvbmFyeS4iKTsKICAgICAgfQogICAgICB0eXBlID0gZGljdC5nZXQoIlN1YnR5cGUiKTsKICAgICAgaWYgKCEodHlwZSBpbnN0YW5jZW9mIE5hbWUpKSB7CiAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJpbnZhbGlkIGZvbnQgU3VidHlwZSIpOwogICAgICB9CiAgICAgIGNvbXBvc2l0ZSA9IHRydWU7CiAgICB9CiAgICBsZXQgZmlyc3RDaGFyID0gZGljdC5nZXQoIkZpcnN0Q2hhciIpOwogICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGZpcnN0Q2hhcikpIHsKICAgICAgZmlyc3RDaGFyID0gMDsKICAgIH0KICAgIGxldCBsYXN0Q2hhciA9IGRpY3QuZ2V0KCJMYXN0Q2hhciIpOwogICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGxhc3RDaGFyKSkgewogICAgICBsYXN0Q2hhciA9IGNvbXBvc2l0ZSA/IDB4ZmZmZiA6IDB4ZmY7CiAgICB9CiAgICBjb25zdCBkZXNjcmlwdG9yID0gZGljdC5nZXQoIkZvbnREZXNjcmlwdG9yIik7CiAgICBjb25zdCB0b1VuaWNvZGUgPSBkaWN0LmdldCgiVG9Vbmljb2RlIikgfHwgYmFzZURpY3QuZ2V0KCJUb1VuaWNvZGUiKTsKICAgIGlmIChkZXNjcmlwdG9yKSB7CiAgICAgIGhhc2ggPSBuZXcgTXVybXVySGFzaDNfNjQoKTsKICAgICAgY29uc3QgZW5jb2RpbmcgPSBiYXNlRGljdC5nZXRSYXcoIkVuY29kaW5nIik7CiAgICAgIGlmIChlbmNvZGluZyBpbnN0YW5jZW9mIE5hbWUpIHsKICAgICAgICBoYXNoLnVwZGF0ZShlbmNvZGluZy5uYW1lKTsKICAgICAgfSBlbHNlIGlmIChlbmNvZGluZyBpbnN0YW5jZW9mIFJlZikgewogICAgICAgIGhhc2gudXBkYXRlKGVuY29kaW5nLnRvU3RyaW5nKCkpOwogICAgICB9IGVsc2UgaWYgKGVuY29kaW5nIGluc3RhbmNlb2YgRGljdCkgewogICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW5jb2RpbmcuZ2V0UmF3VmFsdWVzKCkpIHsKICAgICAgICAgIGlmIChlbnRyeSBpbnN0YW5jZW9mIE5hbWUpIHsKICAgICAgICAgICAgaGFzaC51cGRhdGUoZW50cnkubmFtZSk7CiAgICAgICAgICB9IGVsc2UgaWYgKGVudHJ5IGluc3RhbmNlb2YgUmVmKSB7CiAgICAgICAgICAgIGhhc2gudXBkYXRlKGVudHJ5LnRvU3RyaW5nKCkpOwogICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGVudHJ5KSkgewogICAgICAgICAgICBjb25zdCBkaWZmTGVuZ3RoID0gZW50cnkubGVuZ3RoLAogICAgICAgICAgICAgIGRpZmZCdWYgPSBuZXcgQXJyYXkoZGlmZkxlbmd0aCk7CiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZGlmZkxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgICAgY29uc3QgZGlmZkVudHJ5ID0gZW50cnlbal07CiAgICAgICAgICAgICAgaWYgKGRpZmZFbnRyeSBpbnN0YW5jZW9mIE5hbWUpIHsKICAgICAgICAgICAgICAgIGRpZmZCdWZbal0gPSBkaWZmRW50cnkubmFtZTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkaWZmRW50cnkgPT09ICJudW1iZXIiIHx8IGRpZmZFbnRyeSBpbnN0YW5jZW9mIFJlZikgewogICAgICAgICAgICAgICAgZGlmZkJ1ZltqXSA9IGRpZmZFbnRyeS50b1N0cmluZygpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBoYXNoLnVwZGF0ZShkaWZmQnVmLmpvaW4oKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGhhc2gudXBkYXRlKGAke2ZpcnN0Q2hhcn0tJHtsYXN0Q2hhcn1gKTsKICAgICAgaWYgKHRvVW5pY29kZSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pIHsKICAgICAgICBjb25zdCBzdHJlYW0gPSB0b1VuaWNvZGUuc3RyIHx8IHRvVW5pY29kZTsKICAgICAgICBjb25zdCB1aW50OGFycmF5ID0gc3RyZWFtLmJ1ZmZlciA/IG5ldyBVaW50OEFycmF5KHN0cmVhbS5idWZmZXIuYnVmZmVyLCAwLCBzdHJlYW0uYnVmZmVyTGVuZ3RoKSA6IG5ldyBVaW50OEFycmF5KHN0cmVhbS5ieXRlcy5idWZmZXIsIHN0cmVhbS5zdGFydCwgc3RyZWFtLmVuZCAtIHN0cmVhbS5zdGFydCk7CiAgICAgICAgaGFzaC51cGRhdGUodWludDhhcnJheSk7CiAgICAgIH0gZWxzZSBpZiAodG9Vbmljb2RlIGluc3RhbmNlb2YgTmFtZSkgewogICAgICAgIGhhc2gudXBkYXRlKHRvVW5pY29kZS5uYW1lKTsKICAgICAgfQogICAgICBjb25zdCB3aWR0aHMgPSBkaWN0LmdldCgiV2lkdGhzIikgfHwgYmFzZURpY3QuZ2V0KCJXaWR0aHMiKTsKICAgICAgaWYgKEFycmF5LmlzQXJyYXkod2lkdGhzKSkgewogICAgICAgIGNvbnN0IHdpZHRoc0J1ZiA9IFtdOwogICAgICAgIGZvciAoY29uc3QgZW50cnkgb2Ygd2lkdGhzKSB7CiAgICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAibnVtYmVyIiB8fCBlbnRyeSBpbnN0YW5jZW9mIFJlZikgewogICAgICAgICAgICB3aWR0aHNCdWYucHVzaChlbnRyeS50b1N0cmluZygpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaGFzaC51cGRhdGUod2lkdGhzQnVmLmpvaW4oKSk7CiAgICAgIH0KICAgICAgaWYgKGNvbXBvc2l0ZSkgewogICAgICAgIGhhc2gudXBkYXRlKCJjb21wb3NpdGVGb250Iik7CiAgICAgICAgY29uc3QgY29tcG9zaXRlV2lkdGhzID0gZGljdC5nZXQoIlciKSB8fCBiYXNlRGljdC5nZXQoIlciKTsKICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjb21wb3NpdGVXaWR0aHMpKSB7CiAgICAgICAgICBjb25zdCB3aWR0aHNCdWYgPSBbXTsKICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgY29tcG9zaXRlV2lkdGhzKSB7CiAgICAgICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICJudW1iZXIiIHx8IGVudHJ5IGluc3RhbmNlb2YgUmVmKSB7CiAgICAgICAgICAgICAgd2lkdGhzQnVmLnB1c2goZW50cnkudG9TdHJpbmcoKSk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShlbnRyeSkpIHsKICAgICAgICAgICAgICBjb25zdCBzdWJXaWR0aHNCdWYgPSBbXTsKICAgICAgICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZW50cnkpIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gIm51bWJlciIgfHwgZWxlbWVudCBpbnN0YW5jZW9mIFJlZikgewogICAgICAgICAgICAgICAgICBzdWJXaWR0aHNCdWYucHVzaChlbGVtZW50LnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB3aWR0aHNCdWYucHVzaChgWyR7c3ViV2lkdGhzQnVmLmpvaW4oKX1dYCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGhhc2gudXBkYXRlKHdpZHRoc0J1Zi5qb2luKCkpOwogICAgICAgIH0KICAgICAgICBjb25zdCBjaWRUb0dpZE1hcCA9IGRpY3QuZ2V0UmF3KCJDSURUb0dJRE1hcCIpIHx8IGJhc2VEaWN0LmdldFJhdygiQ0lEVG9HSURNYXAiKTsKICAgICAgICBpZiAoY2lkVG9HaWRNYXAgaW5zdGFuY2VvZiBOYW1lKSB7CiAgICAgICAgICBoYXNoLnVwZGF0ZShjaWRUb0dpZE1hcC5uYW1lKTsKICAgICAgICB9IGVsc2UgaWYgKGNpZFRvR2lkTWFwIGluc3RhbmNlb2YgUmVmKSB7CiAgICAgICAgICBoYXNoLnVwZGF0ZShjaWRUb0dpZE1hcC50b1N0cmluZygpKTsKICAgICAgICB9IGVsc2UgaWYgKGNpZFRvR2lkTWFwIGluc3RhbmNlb2YgQmFzZVN0cmVhbSkgewogICAgICAgICAgaGFzaC51cGRhdGUoY2lkVG9HaWRNYXAucGVla0J5dGVzKCkpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHsKICAgICAgZGVzY3JpcHRvciwKICAgICAgZGljdCwKICAgICAgYmFzZURpY3QsCiAgICAgIGNvbXBvc2l0ZSwKICAgICAgdHlwZTogdHlwZS5uYW1lLAogICAgICBmaXJzdENoYXIsCiAgICAgIGxhc3RDaGFyLAogICAgICB0b1VuaWNvZGUsCiAgICAgIGhhc2g6IGhhc2ggPyBoYXNoLmhleGRpZ2VzdCgpIDogIiIKICAgIH07CiAgfQogIGFzeW5jIHRyYW5zbGF0ZUZvbnQoewogICAgZGVzY3JpcHRvciwKICAgIGRpY3QsCiAgICBiYXNlRGljdCwKICAgIGNvbXBvc2l0ZSwKICAgIHR5cGUsCiAgICBmaXJzdENoYXIsCiAgICBsYXN0Q2hhciwKICAgIHRvVW5pY29kZSwKICAgIGNzc0ZvbnRJbmZvCiAgfSkgewogICAgY29uc3QgaXNUeXBlM0ZvbnQgPSB0eXBlID09PSAiVHlwZTMiOwogICAgaWYgKCFkZXNjcmlwdG9yKSB7CiAgICAgIGlmIChpc1R5cGUzRm9udCkgewogICAgICAgIGNvbnN0IGJib3ggPSBsb29rdXBOb3JtYWxSZWN0KGRpY3QuZ2V0QXJyYXkoIkZvbnRCQm94IiksIFswLCAwLCAwLCAwXSk7CiAgICAgICAgZGVzY3JpcHRvciA9IG5ldyBEaWN0KG51bGwpOwogICAgICAgIGRlc2NyaXB0b3Iuc2V0KCJGb250TmFtZSIsIE5hbWUuZ2V0KHR5cGUpKTsKICAgICAgICBkZXNjcmlwdG9yLnNldCgiRm9udEJCb3giLCBiYm94KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBsZXQgYmFzZUZvbnROYW1lID0gZGljdC5nZXQoIkJhc2VGb250Iik7CiAgICAgICAgaWYgKCEoYmFzZUZvbnROYW1lIGluc3RhbmNlb2YgTmFtZSkpIHsKICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiQmFzZSBmb250IGlzIG5vdCBzcGVjaWZpZWQiKTsKICAgICAgICB9CiAgICAgICAgYmFzZUZvbnROYW1lID0gYmFzZUZvbnROYW1lLm5hbWUucmVwbGFjZUFsbCgvWyxfXS9nLCAiLSIpOwogICAgICAgIGNvbnN0IG1ldHJpY3MgPSB0aGlzLmdldEJhc2VGb250TWV0cmljcyhiYXNlRm9udE5hbWUpOwogICAgICAgIGNvbnN0IGZvbnROYW1lV29TdHlsZSA9IGJhc2VGb250TmFtZS5zcGxpdCgiLSIsIDEpWzBdOwogICAgICAgIGNvbnN0IGZsYWdzID0gKHRoaXMuaXNTZXJpZkZvbnQoZm9udE5hbWVXb1N0eWxlKSA/IEZvbnRGbGFncy5TZXJpZiA6IDApIHwgKG1ldHJpY3MubW9ub3NwYWNlID8gRm9udEZsYWdzLkZpeGVkUGl0Y2ggOiAwKSB8IChnZXRTeW1ib2xzRm9udHMoKVtmb250TmFtZVdvU3R5bGVdID8gRm9udEZsYWdzLlN5bWJvbGljIDogRm9udEZsYWdzLk5vbnN5bWJvbGljKTsKICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gewogICAgICAgICAgdHlwZSwKICAgICAgICAgIG5hbWU6IGJhc2VGb250TmFtZSwKICAgICAgICAgIGxvYWRlZE5hbWU6IGJhc2VEaWN0LmxvYWRlZE5hbWUsCiAgICAgICAgICBzeXN0ZW1Gb250SW5mbzogbnVsbCwKICAgICAgICAgIHdpZHRoczogbWV0cmljcy53aWR0aHMsCiAgICAgICAgICBkZWZhdWx0V2lkdGg6IG1ldHJpY3MuZGVmYXVsdFdpZHRoLAogICAgICAgICAgaXNTaW11bGF0ZWRGbGFnczogdHJ1ZSwKICAgICAgICAgIGZsYWdzLAogICAgICAgICAgZmlyc3RDaGFyLAogICAgICAgICAgbGFzdENoYXIsCiAgICAgICAgICB0b1VuaWNvZGUsCiAgICAgICAgICB4SGVpZ2h0OiAwLAogICAgICAgICAgY2FwSGVpZ2h0OiAwLAogICAgICAgICAgaXRhbGljQW5nbGU6IDAsCiAgICAgICAgICBpc1R5cGUzRm9udAogICAgICAgIH07CiAgICAgICAgY29uc3Qgd2lkdGhzID0gZGljdC5nZXQoIldpZHRocyIpOwogICAgICAgIGNvbnN0IHN0YW5kYXJkRm9udE5hbWUgPSBnZXRTdGFuZGFyZEZvbnROYW1lKGJhc2VGb250TmFtZSk7CiAgICAgICAgbGV0IGZpbGUgPSBudWxsOwogICAgICAgIGlmIChzdGFuZGFyZEZvbnROYW1lKSB7CiAgICAgICAgICBmaWxlID0gYXdhaXQgdGhpcy5mZXRjaFN0YW5kYXJkRm9udERhdGEoc3RhbmRhcmRGb250TmFtZSk7CiAgICAgICAgICBwcm9wZXJ0aWVzLmlzSW50ZXJuYWxGb250ID0gISFmaWxlOwogICAgICAgIH0KICAgICAgICBpZiAoIXByb3BlcnRpZXMuaXNJbnRlcm5hbEZvbnQgJiYgdGhpcy5vcHRpb25zLnVzZVN5c3RlbUZvbnRzKSB7CiAgICAgICAgICBwcm9wZXJ0aWVzLnN5c3RlbUZvbnRJbmZvID0gZ2V0Rm9udFN1YnN0aXR1dGlvbih0aGlzLnN5c3RlbUZvbnRDYWNoZSwgdGhpcy5pZEZhY3RvcnksIHRoaXMub3B0aW9ucy5zdGFuZGFyZEZvbnREYXRhVXJsLCBiYXNlRm9udE5hbWUsIHN0YW5kYXJkRm9udE5hbWUsIHR5cGUpOwogICAgICAgIH0KICAgICAgICBjb25zdCBuZXdQcm9wZXJ0aWVzID0gYXdhaXQgdGhpcy5leHRyYWN0RGF0YVN0cnVjdHVyZXMoZGljdCwgcHJvcGVydGllcyk7CiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkod2lkdGhzKSkgewogICAgICAgICAgY29uc3QgZ2x5cGhXaWR0aHMgPSBbXTsKICAgICAgICAgIGxldCBqID0gZmlyc3RDaGFyOwogICAgICAgICAgZm9yIChjb25zdCB3IG9mIHdpZHRocykgewogICAgICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMueHJlZi5mZXRjaElmUmVmKHcpOwogICAgICAgICAgICBpZiAodHlwZW9mIHdpZHRoID09PSAibnVtYmVyIikgewogICAgICAgICAgICAgIGdseXBoV2lkdGhzW2pdID0gd2lkdGg7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaisrOwogICAgICAgICAgfQogICAgICAgICAgbmV3UHJvcGVydGllcy53aWR0aHMgPSBnbHlwaFdpZHRoczsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbmV3UHJvcGVydGllcy53aWR0aHMgPSB0aGlzLmJ1aWxkQ2hhckNvZGVUb1dpZHRoKG1ldHJpY3Mud2lkdGhzLCBuZXdQcm9wZXJ0aWVzKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBGb250KGJhc2VGb250TmFtZSwgZmlsZSwgbmV3UHJvcGVydGllcywgdGhpcy5vcHRpb25zKTsKICAgICAgfQogICAgfQogICAgbGV0IGZvbnROYW1lID0gZGVzY3JpcHRvci5nZXQoIkZvbnROYW1lIik7CiAgICBsZXQgYmFzZUZvbnQgPSBkaWN0LmdldCgiQmFzZUZvbnQiKTsKICAgIGlmICh0eXBlb2YgZm9udE5hbWUgPT09ICJzdHJpbmciKSB7CiAgICAgIGZvbnROYW1lID0gTmFtZS5nZXQoZm9udE5hbWUpOwogICAgfQogICAgaWYgKHR5cGVvZiBiYXNlRm9udCA9PT0gInN0cmluZyIpIHsKICAgICAgYmFzZUZvbnQgPSBOYW1lLmdldChiYXNlRm9udCk7CiAgICB9CiAgICBjb25zdCBmb250TmFtZVN0ciA9IGZvbnROYW1lPy5uYW1lOwogICAgY29uc3QgYmFzZUZvbnRTdHIgPSBiYXNlRm9udD8ubmFtZTsKICAgIGlmICghaXNUeXBlM0ZvbnQgJiYgZm9udE5hbWVTdHIgIT09IGJhc2VGb250U3RyKSB7CiAgICAgIGluZm8oYFRoZSBGb250RGVzY3JpcHRvcidzIEZvbnROYW1lIGlzICIke2ZvbnROYW1lU3RyfSIgYnV0IGAgKyBgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBGb250J3MgQmFzZUZvbnQgIiR7YmFzZUZvbnRTdHJ9Ii5gKTsKICAgICAgaWYgKGZvbnROYW1lU3RyICYmIGJhc2VGb250U3RyICYmIChiYXNlRm9udFN0ci5zdGFydHNXaXRoKGZvbnROYW1lU3RyKSB8fCAhaXNLbm93bkZvbnROYW1lKGZvbnROYW1lU3RyKSAmJiBpc0tub3duRm9udE5hbWUoYmFzZUZvbnRTdHIpKSkgewogICAgICAgIGZvbnROYW1lID0gbnVsbDsKICAgICAgfQogICAgfQogICAgZm9udE5hbWUgfHw9IGJhc2VGb250OwogICAgaWYgKCEoZm9udE5hbWUgaW5zdGFuY2VvZiBOYW1lKSkgewogICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoImludmFsaWQgZm9udCBuYW1lIik7CiAgICB9CiAgICBsZXQgZm9udEZpbGUsIHN1YnR5cGUsIGxlbmd0aDEsIGxlbmd0aDIsIGxlbmd0aDM7CiAgICB0cnkgewogICAgICBmb250RmlsZSA9IGRlc2NyaXB0b3IuZ2V0KCJGb250RmlsZSIsICJGb250RmlsZTIiLCAiRm9udEZpbGUzIik7CiAgICAgIGlmIChmb250RmlsZSkgewogICAgICAgIGlmICghKGZvbnRGaWxlIGluc3RhbmNlb2YgQmFzZVN0cmVhbSkpIHsKICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiRm9udEZpbGUgc2hvdWxkIGJlIGEgc3RyZWFtIik7CiAgICAgICAgfSBlbHNlIGlmIChmb250RmlsZS5pc0VtcHR5KSB7CiAgICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkZvbnRGaWxlIGlzIGVtcHR5Iik7CiAgICAgICAgfQogICAgICB9CiAgICB9IGNhdGNoIChleCkgewogICAgICBpZiAoIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpIHsKICAgICAgICB0aHJvdyBleDsKICAgICAgfQogICAgICB3YXJuKGB0cmFuc2xhdGVGb250IC0gZmV0Y2hpbmcgIiR7Zm9udE5hbWUubmFtZX0iIGZvbnQgZmlsZTogIiR7ZXh9Ii5gKTsKICAgICAgZm9udEZpbGUgPSBudWxsOwogICAgfQogICAgbGV0IGlzSW50ZXJuYWxGb250ID0gZmFsc2U7CiAgICBsZXQgZ2x5cGhTY2FsZUZhY3RvcnMgPSBudWxsOwogICAgbGV0IHN5c3RlbUZvbnRJbmZvID0gbnVsbDsKICAgIGlmIChmb250RmlsZSkgewogICAgICBpZiAoZm9udEZpbGUuZGljdCkgewogICAgICAgIGNvbnN0IHN1YnR5cGVFbnRyeSA9IGZvbnRGaWxlLmRpY3QuZ2V0KCJTdWJ0eXBlIik7CiAgICAgICAgaWYgKHN1YnR5cGVFbnRyeSBpbnN0YW5jZW9mIE5hbWUpIHsKICAgICAgICAgIHN1YnR5cGUgPSBzdWJ0eXBlRW50cnkubmFtZTsKICAgICAgICB9CiAgICAgICAgbGVuZ3RoMSA9IGZvbnRGaWxlLmRpY3QuZ2V0KCJMZW5ndGgxIik7CiAgICAgICAgbGVuZ3RoMiA9IGZvbnRGaWxlLmRpY3QuZ2V0KCJMZW5ndGgyIik7CiAgICAgICAgbGVuZ3RoMyA9IGZvbnRGaWxlLmRpY3QuZ2V0KCJMZW5ndGgzIik7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoY3NzRm9udEluZm8pIHsKICAgICAgY29uc3Qgc3RhbmRhcmRGb250TmFtZSA9IGdldFhmYUZvbnROYW1lKGZvbnROYW1lLm5hbWUpOwogICAgICBpZiAoc3RhbmRhcmRGb250TmFtZSkgewogICAgICAgIGNzc0ZvbnRJbmZvLmZvbnRGYW1pbHkgPSBgJHtjc3NGb250SW5mby5mb250RmFtaWx5fS1QZGZKUy1YRkFgOwogICAgICAgIGNzc0ZvbnRJbmZvLm1ldHJpY3MgPSBzdGFuZGFyZEZvbnROYW1lLm1ldHJpY3MgfHwgbnVsbDsKICAgICAgICBnbHlwaFNjYWxlRmFjdG9ycyA9IHN0YW5kYXJkRm9udE5hbWUuZmFjdG9ycyB8fCBudWxsOwogICAgICAgIGZvbnRGaWxlID0gYXdhaXQgdGhpcy5mZXRjaFN0YW5kYXJkRm9udERhdGEoc3RhbmRhcmRGb250TmFtZS5uYW1lKTsKICAgICAgICBpc0ludGVybmFsRm9udCA9ICEhZm9udEZpbGU7CiAgICAgICAgYmFzZURpY3QgPSBkaWN0ID0gZ2V0WGZhRm9udERpY3QoZm9udE5hbWUubmFtZSk7CiAgICAgICAgY29tcG9zaXRlID0gdHJ1ZTsKICAgICAgfQogICAgfSBlbHNlIGlmICghaXNUeXBlM0ZvbnQpIHsKICAgICAgY29uc3Qgc3RhbmRhcmRGb250TmFtZSA9IGdldFN0YW5kYXJkRm9udE5hbWUoZm9udE5hbWUubmFtZSk7CiAgICAgIGlmIChzdGFuZGFyZEZvbnROYW1lKSB7CiAgICAgICAgZm9udEZpbGUgPSBhd2FpdCB0aGlzLmZldGNoU3RhbmRhcmRGb250RGF0YShzdGFuZGFyZEZvbnROYW1lKTsKICAgICAgICBpc0ludGVybmFsRm9udCA9ICEhZm9udEZpbGU7CiAgICAgIH0KICAgICAgaWYgKCFpc0ludGVybmFsRm9udCAmJiB0aGlzLm9wdGlvbnMudXNlU3lzdGVtRm9udHMpIHsKICAgICAgICBzeXN0ZW1Gb250SW5mbyA9IGdldEZvbnRTdWJzdGl0dXRpb24odGhpcy5zeXN0ZW1Gb250Q2FjaGUsIHRoaXMuaWRGYWN0b3J5LCB0aGlzLm9wdGlvbnMuc3RhbmRhcmRGb250RGF0YVVybCwgZm9udE5hbWUubmFtZSwgc3RhbmRhcmRGb250TmFtZSwgdHlwZSk7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0IGZvbnRNYXRyaXggPSBsb29rdXBNYXRyaXgoZGljdC5nZXRBcnJheSgiRm9udE1hdHJpeCIpLCBGT05UX0lERU5USVRZX01BVFJJWCk7CiAgICBjb25zdCBiYm94ID0gbG9va3VwTm9ybWFsUmVjdChkZXNjcmlwdG9yLmdldEFycmF5KCJGb250QkJveCIpIHx8IGRpY3QuZ2V0QXJyYXkoIkZvbnRCQm94IiksIHVuZGVmaW5lZCk7CiAgICBsZXQgYXNjZW50ID0gZGVzY3JpcHRvci5nZXQoIkFzY2VudCIpOwogICAgaWYgKHR5cGVvZiBhc2NlbnQgIT09ICJudW1iZXIiKSB7CiAgICAgIGFzY2VudCA9IHVuZGVmaW5lZDsKICAgIH0KICAgIGxldCBkZXNjZW50ID0gZGVzY3JpcHRvci5nZXQoIkRlc2NlbnQiKTsKICAgIGlmICh0eXBlb2YgZGVzY2VudCAhPT0gIm51bWJlciIpIHsKICAgICAgZGVzY2VudCA9IHVuZGVmaW5lZDsKICAgIH0KICAgIGxldCB4SGVpZ2h0ID0gZGVzY3JpcHRvci5nZXQoIlhIZWlnaHQiKTsKICAgIGlmICh0eXBlb2YgeEhlaWdodCAhPT0gIm51bWJlciIpIHsKICAgICAgeEhlaWdodCA9IDA7CiAgICB9CiAgICBsZXQgY2FwSGVpZ2h0ID0gZGVzY3JpcHRvci5nZXQoIkNhcEhlaWdodCIpOwogICAgaWYgKHR5cGVvZiBjYXBIZWlnaHQgIT09ICJudW1iZXIiKSB7CiAgICAgIGNhcEhlaWdodCA9IDA7CiAgICB9CiAgICBsZXQgZmxhZ3MgPSBkZXNjcmlwdG9yLmdldCgiRmxhZ3MiKTsKICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihmbGFncykpIHsKICAgICAgZmxhZ3MgPSAwOwogICAgfQogICAgbGV0IGl0YWxpY0FuZ2xlID0gZGVzY3JpcHRvci5nZXQoIkl0YWxpY0FuZ2xlIik7CiAgICBpZiAodHlwZW9mIGl0YWxpY0FuZ2xlICE9PSAibnVtYmVyIikgewogICAgICBpdGFsaWNBbmdsZSA9IDA7CiAgICB9CiAgICBjb25zdCBwcm9wZXJ0aWVzID0gewogICAgICB0eXBlLAogICAgICBuYW1lOiBmb250TmFtZS5uYW1lLAogICAgICBzdWJ0eXBlLAogICAgICBmaWxlOiBmb250RmlsZSwKICAgICAgbGVuZ3RoMSwKICAgICAgbGVuZ3RoMiwKICAgICAgbGVuZ3RoMywKICAgICAgaXNJbnRlcm5hbEZvbnQsCiAgICAgIGxvYWRlZE5hbWU6IGJhc2VEaWN0LmxvYWRlZE5hbWUsCiAgICAgIGNvbXBvc2l0ZSwKICAgICAgZml4ZWRQaXRjaDogZmFsc2UsCiAgICAgIGZvbnRNYXRyaXgsCiAgICAgIGZpcnN0Q2hhciwKICAgICAgbGFzdENoYXIsCiAgICAgIHRvVW5pY29kZSwKICAgICAgYmJveCwKICAgICAgYXNjZW50LAogICAgICBkZXNjZW50LAogICAgICB4SGVpZ2h0LAogICAgICBjYXBIZWlnaHQsCiAgICAgIGZsYWdzLAogICAgICBpdGFsaWNBbmdsZSwKICAgICAgaXNUeXBlM0ZvbnQsCiAgICAgIGNzc0ZvbnRJbmZvLAogICAgICBzY2FsZUZhY3RvcnM6IGdseXBoU2NhbGVGYWN0b3JzLAogICAgICBzeXN0ZW1Gb250SW5mbwogICAgfTsKICAgIGlmIChjb21wb3NpdGUpIHsKICAgICAgY29uc3QgY2lkRW5jb2RpbmcgPSBiYXNlRGljdC5nZXQoIkVuY29kaW5nIik7CiAgICAgIGlmIChjaWRFbmNvZGluZyBpbnN0YW5jZW9mIE5hbWUpIHsKICAgICAgICBwcm9wZXJ0aWVzLmNpZEVuY29kaW5nID0gY2lkRW5jb2RpbmcubmFtZTsKICAgICAgfQogICAgICBjb25zdCBjTWFwID0gYXdhaXQgQ01hcEZhY3RvcnkuY3JlYXRlKHsKICAgICAgICBlbmNvZGluZzogY2lkRW5jb2RpbmcsCiAgICAgICAgZmV0Y2hCdWlsdEluQ01hcDogdGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kLAogICAgICAgIHVzZUNNYXA6IG51bGwKICAgICAgfSk7CiAgICAgIHByb3BlcnRpZXMuY01hcCA9IGNNYXA7CiAgICAgIHByb3BlcnRpZXMudmVydGljYWwgPSBwcm9wZXJ0aWVzLmNNYXAudmVydGljYWw7CiAgICB9CiAgICBjb25zdCBuZXdQcm9wZXJ0aWVzID0gYXdhaXQgdGhpcy5leHRyYWN0RGF0YVN0cnVjdHVyZXMoZGljdCwgcHJvcGVydGllcyk7CiAgICB0aGlzLmV4dHJhY3RXaWR0aHMoZGljdCwgZGVzY3JpcHRvciwgbmV3UHJvcGVydGllcyk7CiAgICByZXR1cm4gbmV3IEZvbnQoZm9udE5hbWUubmFtZSwgZm9udEZpbGUsIG5ld1Byb3BlcnRpZXMsIHRoaXMub3B0aW9ucyk7CiAgfQogIHN0YXRpYyBidWlsZEZvbnRQYXRocyhmb250LCBnbHlwaHMsIGhhbmRsZXIsIGV2YWx1YXRvck9wdGlvbnMpIHsKICAgIGZ1bmN0aW9uIGJ1aWxkUGF0aChmb250Q2hhcikgewogICAgICBjb25zdCBnbHlwaE5hbWUgPSBgJHtmb250LmxvYWRlZE5hbWV9X3BhdGhfJHtmb250Q2hhcn1gOwogICAgICB0cnkgewogICAgICAgIGlmIChmb250LnJlbmRlcmVyLmhhc0J1aWx0UGF0aChmb250Q2hhcikpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaGFuZGxlci5zZW5kKCJjb21tb25vYmoiLCBbZ2x5cGhOYW1lLCAiRm9udFBhdGgiLCBmb250LnJlbmRlcmVyLmdldFBhdGhKcyhmb250Q2hhcildKTsKICAgICAgfSBjYXRjaCAocmVhc29uKSB7CiAgICAgICAgaWYgKGV2YWx1YXRvck9wdGlvbnMuaWdub3JlRXJyb3JzKSB7CiAgICAgICAgICB3YXJuKGBidWlsZEZvbnRQYXRocyAtIGlnbm9yaW5nICR7Z2x5cGhOYW1lfSBnbHlwaDogIiR7cmVhc29ufSIuYCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRocm93IHJlYXNvbjsKICAgICAgfQogICAgfQogICAgZm9yIChjb25zdCBnbHlwaCBvZiBnbHlwaHMpIHsKICAgICAgYnVpbGRQYXRoKGdseXBoLmZvbnRDaGFyKTsKICAgICAgY29uc3QgYWNjZW50ID0gZ2x5cGguYWNjZW50OwogICAgICBpZiAoYWNjZW50Py5mb250Q2hhcikgewogICAgICAgIGJ1aWxkUGF0aChhY2NlbnQuZm9udENoYXIpOwogICAgICB9CiAgICB9CiAgfQogIHN0YXRpYyBnZXQgZmFsbGJhY2tGb250RGljdCgpIHsKICAgIGNvbnN0IGRpY3QgPSBuZXcgRGljdCgpOwogICAgZGljdC5zZXQoIkJhc2VGb250IiwgTmFtZS5nZXQoIkhlbHZldGljYSIpKTsKICAgIGRpY3Quc2V0KCJUeXBlIiwgTmFtZS5nZXQoIkZhbGxiYWNrVHlwZSIpKTsKICAgIGRpY3Quc2V0KCJTdWJ0eXBlIiwgTmFtZS5nZXQoIkZhbGxiYWNrVHlwZSIpKTsKICAgIGRpY3Quc2V0KCJFbmNvZGluZyIsIE5hbWUuZ2V0KCJXaW5BbnNpRW5jb2RpbmciKSk7CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJmYWxsYmFja0ZvbnREaWN0IiwgZGljdCk7CiAgfQp9CmNsYXNzIFRyYW5zbGF0ZWRGb250IHsKICAjc2VudCA9IGZhbHNlOwogICN0eXBlM0xvYWRlZCA9IG51bGw7CiAgY29uc3RydWN0b3IoewogICAgbG9hZGVkTmFtZSwKICAgIGZvbnQsCiAgICBkaWN0CiAgfSkgewogICAgdGhpcy5sb2FkZWROYW1lID0gbG9hZGVkTmFtZTsKICAgIHRoaXMuZm9udCA9IGZvbnQ7CiAgICB0aGlzLmRpY3QgPSBkaWN0OwogICAgdGhpcy50eXBlM0RlcGVuZGVuY2llcyA9IGZvbnQuaXNUeXBlM0ZvbnQgPyBuZXcgU2V0KCkgOiBudWxsOwogIH0KICBzZW5kKGhhbmRsZXIpIHsKICAgIGlmICh0aGlzLiNzZW50KSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuI3NlbnQgPSB0cnVlOwogICAgaGFuZGxlci5zZW5kKCJjb21tb25vYmoiLCBbdGhpcy5sb2FkZWROYW1lLCAiRm9udCIsIHRoaXMuZm9udC5leHBvcnREYXRhKCldKTsKICB9CiAgZmFsbGJhY2soaGFuZGxlciwgZXZhbHVhdG9yT3B0aW9ucykgewogICAgaWYgKCF0aGlzLmZvbnQuZGF0YSkgewogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLmZvbnQuZGlzYWJsZUZvbnRGYWNlID0gdHJ1ZTsKICAgIFBhcnRpYWxFdmFsdWF0b3IuYnVpbGRGb250UGF0aHModGhpcy5mb250LCB0aGlzLmZvbnQuZ2x5cGhDYWNoZVZhbHVlcywgaGFuZGxlciwgZXZhbHVhdG9yT3B0aW9ucyk7CiAgfQogIGxvYWRUeXBlM0RhdGEoZXZhbHVhdG9yLCByZXNvdXJjZXMsIHRhc2spIHsKICAgIGlmICh0aGlzLiN0eXBlM0xvYWRlZCkgewogICAgICByZXR1cm4gdGhpcy4jdHlwZTNMb2FkZWQ7CiAgICB9CiAgICBjb25zdCB7CiAgICAgIGZvbnQsCiAgICAgIHR5cGUzRGVwZW5kZW5jaWVzCiAgICB9ID0gdGhpczsKICAgIGFzc2VydChmb250LmlzVHlwZTNGb250LCAiTXVzdCBiZSBhIFR5cGUzIGZvbnQuIik7CiAgICBjb25zdCB0eXBlM0V2YWx1YXRvciA9IGV2YWx1YXRvci5jbG9uZSh7CiAgICAgIGlnbm9yZUVycm9yczogZmFsc2UKICAgIH0pOwogICAgY29uc3QgdHlwZTNGb250UmVmcyA9IG5ldyBSZWZTZXQoZXZhbHVhdG9yLnR5cGUzRm9udFJlZnMpOwogICAgaWYgKHRoaXMuZGljdC5vYmpJZCAmJiAhdHlwZTNGb250UmVmcy5oYXModGhpcy5kaWN0Lm9iaklkKSkgewogICAgICB0eXBlM0ZvbnRSZWZzLnB1dCh0aGlzLmRpY3Qub2JqSWQpOwogICAgfQogICAgdHlwZTNFdmFsdWF0b3IudHlwZTNGb250UmVmcyA9IHR5cGUzRm9udFJlZnM7CiAgICBsZXQgbG9hZENoYXJQcm9jc1Byb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKTsKICAgIGNvbnN0IGNoYXJQcm9jcyA9IHRoaXMuZGljdC5nZXQoIkNoYXJQcm9jcyIpOwogICAgY29uc3QgZm9udFJlc291cmNlcyA9IHRoaXMuZGljdC5nZXQoIlJlc291cmNlcyIpIHx8IHJlc291cmNlczsKICAgIGNvbnN0IGNoYXJQcm9jT3BlcmF0b3JMaXN0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgIGNvbnN0IGZvbnRCQm94ID0gVXRpbC5ub3JtYWxpemVSZWN0KGZvbnQuYmJveCB8fCBbMCwgMCwgMCwgMF0pLAogICAgICB3aWR0aCA9IGZvbnRCQm94WzJdIC0gZm9udEJCb3hbMF0sCiAgICAgIGhlaWdodCA9IGZvbnRCQm94WzNdIC0gZm9udEJCb3hbMV07CiAgICBjb25zdCBmb250QkJveFNpemUgPSBNYXRoLmh5cG90KHdpZHRoLCBoZWlnaHQpOwogICAgZm9yIChjb25zdCBrZXkgb2YgY2hhclByb2NzLmdldEtleXMoKSkgewogICAgICBsb2FkQ2hhclByb2NzUHJvbWlzZSA9IGxvYWRDaGFyUHJvY3NQcm9taXNlLnRoZW4oKCkgPT4gewogICAgICAgIGNvbnN0IGdseXBoU3RyZWFtID0gY2hhclByb2NzLmdldChrZXkpOwogICAgICAgIGNvbnN0IG9wZXJhdG9yTGlzdCA9IG5ldyBPcGVyYXRvckxpc3QoKTsKICAgICAgICByZXR1cm4gdHlwZTNFdmFsdWF0b3IuZ2V0T3BlcmF0b3JMaXN0KHsKICAgICAgICAgIHN0cmVhbTogZ2x5cGhTdHJlYW0sCiAgICAgICAgICB0YXNrLAogICAgICAgICAgcmVzb3VyY2VzOiBmb250UmVzb3VyY2VzLAogICAgICAgICAgb3BlcmF0b3JMaXN0CiAgICAgICAgfSkudGhlbigoKSA9PiB7CiAgICAgICAgICBzd2l0Y2ggKG9wZXJhdG9yTGlzdC5mbkFycmF5WzBdKSB7CiAgICAgICAgICAgIGNhc2UgT1BTLnNldENoYXJXaWR0aEFuZEJvdW5kczoKICAgICAgICAgICAgICB0aGlzLiNyZW1vdmVUeXBlM0NvbG9yT3BlcmF0b3JzKG9wZXJhdG9yTGlzdCwgZm9udEJCb3hTaXplKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBPUFMuc2V0Q2hhcldpZHRoOgogICAgICAgICAgICAgIGlmICghZm9udEJCb3hTaXplKSB7CiAgICAgICAgICAgICAgICB0aGlzLiNndWVzc1R5cGUzRm9udEJCb3gob3BlcmF0b3JMaXN0KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBjaGFyUHJvY09wZXJhdG9yTGlzdFtrZXldID0gb3BlcmF0b3JMaXN0LmdldElSKCk7CiAgICAgICAgICBmb3IgKGNvbnN0IGRlcGVuZGVuY3kgb2Ygb3BlcmF0b3JMaXN0LmRlcGVuZGVuY2llcykgewogICAgICAgICAgICB0eXBlM0RlcGVuZGVuY2llcy5hZGQoZGVwZW5kZW5jeSk7CiAgICAgICAgICB9CiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikgewogICAgICAgICAgd2FybihgVHlwZTMgZm9udCByZXNvdXJjZSAiJHtrZXl9IiBpcyBub3QgYXZhaWxhYmxlLmApOwogICAgICAgICAgY29uc3QgZHVtbXlPcGVyYXRvckxpc3QgPSBuZXcgT3BlcmF0b3JMaXN0KCk7CiAgICAgICAgICBjaGFyUHJvY09wZXJhdG9yTGlzdFtrZXldID0gZHVtbXlPcGVyYXRvckxpc3QuZ2V0SVIoKTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9CiAgICB0aGlzLiN0eXBlM0xvYWRlZCA9IGxvYWRDaGFyUHJvY3NQcm9taXNlLnRoZW4oKCkgPT4gewogICAgICBmb250LmNoYXJQcm9jT3BlcmF0b3JMaXN0ID0gY2hhclByb2NPcGVyYXRvckxpc3Q7CiAgICAgIGlmICh0aGlzLl9iYm94KSB7CiAgICAgICAgZm9udC5pc0NoYXJCQm94ID0gdHJ1ZTsKICAgICAgICBmb250LmJib3ggPSB0aGlzLl9iYm94OwogICAgICB9CiAgICB9KTsKICAgIHJldHVybiB0aGlzLiN0eXBlM0xvYWRlZDsKICB9CiAgI3JlbW92ZVR5cGUzQ29sb3JPcGVyYXRvcnMob3BlcmF0b3JMaXN0LCBmb250QkJveFNpemUgPSBOYU4pIHsKICAgIGNvbnN0IGNoYXJCQm94ID0gVXRpbC5ub3JtYWxpemVSZWN0KG9wZXJhdG9yTGlzdC5hcmdzQXJyYXlbMF0uc2xpY2UoMikpLAogICAgICB3aWR0aCA9IGNoYXJCQm94WzJdIC0gY2hhckJCb3hbMF0sCiAgICAgIGhlaWdodCA9IGNoYXJCQm94WzNdIC0gY2hhckJCb3hbMV07CiAgICBjb25zdCBjaGFyQkJveFNpemUgPSBNYXRoLmh5cG90KHdpZHRoLCBoZWlnaHQpOwogICAgaWYgKHdpZHRoID09PSAwIHx8IGhlaWdodCA9PT0gMCkgewogICAgICBvcGVyYXRvckxpc3QuZm5BcnJheS5zcGxpY2UoMCwgMSk7CiAgICAgIG9wZXJhdG9yTGlzdC5hcmdzQXJyYXkuc3BsaWNlKDAsIDEpOwogICAgfSBlbHNlIGlmIChmb250QkJveFNpemUgPT09IDAgfHwgTWF0aC5yb3VuZChjaGFyQkJveFNpemUgLyBmb250QkJveFNpemUpID49IDEwKSB7CiAgICAgIHRoaXMuX2Jib3ggPz89IFtJbmZpbml0eSwgSW5maW5pdHksIC1JbmZpbml0eSwgLUluZmluaXR5XTsKICAgICAgVXRpbC5yZWN0Qm91bmRpbmdCb3goLi4uY2hhckJCb3gsIHRoaXMuX2Jib3gpOwogICAgfQogICAgbGV0IGkgPSAwLAogICAgICBpaSA9IG9wZXJhdG9yTGlzdC5sZW5ndGg7CiAgICB3aGlsZSAoaSA8IGlpKSB7CiAgICAgIHN3aXRjaCAob3BlcmF0b3JMaXN0LmZuQXJyYXlbaV0pIHsKICAgICAgICBjYXNlIE9QUy5zZXRDaGFyV2lkdGhBbmRCb3VuZHM6CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIE9QUy5zZXRTdHJva2VDb2xvclNwYWNlOgogICAgICAgIGNhc2UgT1BTLnNldEZpbGxDb2xvclNwYWNlOgogICAgICAgIGNhc2UgT1BTLnNldFN0cm9rZUNvbG9yOgogICAgICAgIGNhc2UgT1BTLnNldFN0cm9rZUNvbG9yTjoKICAgICAgICBjYXNlIE9QUy5zZXRGaWxsQ29sb3I6CiAgICAgICAgY2FzZSBPUFMuc2V0RmlsbENvbG9yTjoKICAgICAgICBjYXNlIE9QUy5zZXRTdHJva2VHcmF5OgogICAgICAgIGNhc2UgT1BTLnNldEZpbGxHcmF5OgogICAgICAgIGNhc2UgT1BTLnNldFN0cm9rZVJHQkNvbG9yOgogICAgICAgIGNhc2UgT1BTLnNldEZpbGxSR0JDb2xvcjoKICAgICAgICBjYXNlIE9QUy5zZXRTdHJva2VDTVlLQ29sb3I6CiAgICAgICAgY2FzZSBPUFMuc2V0RmlsbENNWUtDb2xvcjoKICAgICAgICBjYXNlIE9QUy5zaGFkaW5nRmlsbDoKICAgICAgICBjYXNlIE9QUy5zZXRSZW5kZXJpbmdJbnRlbnQ6CiAgICAgICAgICBvcGVyYXRvckxpc3QuZm5BcnJheS5zcGxpY2UoaSwgMSk7CiAgICAgICAgICBvcGVyYXRvckxpc3QuYXJnc0FycmF5LnNwbGljZShpLCAxKTsKICAgICAgICAgIGlpLS07CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICBjYXNlIE9QUy5zZXRHU3RhdGU6CiAgICAgICAgICBjb25zdCBbZ1N0YXRlT2JqXSA9IG9wZXJhdG9yTGlzdC5hcmdzQXJyYXlbaV07CiAgICAgICAgICBsZXQgaiA9IDAsCiAgICAgICAgICAgIGpqID0gZ1N0YXRlT2JqLmxlbmd0aDsKICAgICAgICAgIHdoaWxlIChqIDwgamopIHsKICAgICAgICAgICAgY29uc3QgW2dTdGF0ZUtleV0gPSBnU3RhdGVPYmpbal07CiAgICAgICAgICAgIHN3aXRjaCAoZ1N0YXRlS2V5KSB7CiAgICAgICAgICAgICAgY2FzZSAiVFIiOgogICAgICAgICAgICAgIGNhc2UgIlRSMiI6CiAgICAgICAgICAgICAgY2FzZSAiSFQiOgogICAgICAgICAgICAgIGNhc2UgIkJHIjoKICAgICAgICAgICAgICBjYXNlICJCRzIiOgogICAgICAgICAgICAgIGNhc2UgIlVDUiI6CiAgICAgICAgICAgICAgY2FzZSAiVUNSMiI6CiAgICAgICAgICAgICAgICBnU3RhdGVPYmouc3BsaWNlKGosIDEpOwogICAgICAgICAgICAgICAgamotLTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGorKzsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGkrKzsKICAgIH0KICB9CiAgI2d1ZXNzVHlwZTNGb250QkJveChvcGVyYXRvckxpc3QpIHsKICAgIGxldCBpID0gMTsKICAgIGNvbnN0IGlpID0gb3BlcmF0b3JMaXN0Lmxlbmd0aDsKICAgIHdoaWxlIChpIDwgaWkpIHsKICAgICAgc3dpdGNoIChvcGVyYXRvckxpc3QuZm5BcnJheVtpXSkgewogICAgICAgIGNhc2UgT1BTLmNvbnN0cnVjdFBhdGg6CiAgICAgICAgICBjb25zdCBtaW5NYXggPSBvcGVyYXRvckxpc3QuYXJnc0FycmF5W2ldWzJdOwogICAgICAgICAgdGhpcy5fYmJveCA/Pz0gW0luZmluaXR5LCBJbmZpbml0eSwgLUluZmluaXR5LCAtSW5maW5pdHldOwogICAgICAgICAgVXRpbC5yZWN0Qm91bmRpbmdCb3goLi4ubWluTWF4LCB0aGlzLl9iYm94KTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGkrKzsKICAgIH0KICB9Cn0KY2xhc3MgU3RhdGVNYW5hZ2VyIHsKICBjb25zdHJ1Y3Rvcihpbml0aWFsU3RhdGUgPSBuZXcgRXZhbFN0YXRlKCkpIHsKICAgIHRoaXMuc3RhdGUgPSBpbml0aWFsU3RhdGU7CiAgICB0aGlzLnN0YXRlU3RhY2sgPSBbXTsKICB9CiAgc2F2ZSgpIHsKICAgIGNvbnN0IG9sZCA9IHRoaXMuc3RhdGU7CiAgICB0aGlzLnN0YXRlU3RhY2sucHVzaCh0aGlzLnN0YXRlKTsKICAgIHRoaXMuc3RhdGUgPSBvbGQuY2xvbmUoKTsKICB9CiAgcmVzdG9yZSgpIHsKICAgIGNvbnN0IHByZXYgPSB0aGlzLnN0YXRlU3RhY2sucG9wKCk7CiAgICBpZiAocHJldikgewogICAgICB0aGlzLnN0YXRlID0gcHJldjsKICAgIH0KICB9CiAgdHJhbnNmb3JtKGFyZ3MpIHsKICAgIHRoaXMuc3RhdGUuY3RtID0gVXRpbC50cmFuc2Zvcm0odGhpcy5zdGF0ZS5jdG0sIGFyZ3MpOwogIH0KfQpjbGFzcyBUZXh0U3RhdGUgewogIGNvbnN0cnVjdG9yKCkgewogICAgdGhpcy5jdG0gPSBuZXcgRmxvYXQzMkFycmF5KElERU5USVRZX01BVFJJWCk7CiAgICB0aGlzLmZvbnROYW1lID0gbnVsbDsKICAgIHRoaXMuZm9udFNpemUgPSAwOwogICAgdGhpcy5sb2FkZWROYW1lID0gbnVsbDsKICAgIHRoaXMuZm9udCA9IG51bGw7CiAgICB0aGlzLmZvbnRNYXRyaXggPSBGT05UX0lERU5USVRZX01BVFJJWDsKICAgIHRoaXMudGV4dE1hdHJpeCA9IElERU5USVRZX01BVFJJWC5zbGljZSgpOwogICAgdGhpcy50ZXh0TGluZU1hdHJpeCA9IElERU5USVRZX01BVFJJWC5zbGljZSgpOwogICAgdGhpcy5jaGFyU3BhY2luZyA9IDA7CiAgICB0aGlzLndvcmRTcGFjaW5nID0gMDsKICAgIHRoaXMubGVhZGluZyA9IDA7CiAgICB0aGlzLnRleHRIU2NhbGUgPSAxOwogICAgdGhpcy50ZXh0UmlzZSA9IDA7CiAgfQogIHNldFRleHRNYXRyaXgoYSwgYiwgYywgZCwgZSwgZikgewogICAgY29uc3QgbSA9IHRoaXMudGV4dE1hdHJpeDsKICAgIG1bMF0gPSBhOwogICAgbVsxXSA9IGI7CiAgICBtWzJdID0gYzsKICAgIG1bM10gPSBkOwogICAgbVs0XSA9IGU7CiAgICBtWzVdID0gZjsKICB9CiAgc2V0VGV4dExpbmVNYXRyaXgoYSwgYiwgYywgZCwgZSwgZikgewogICAgY29uc3QgbSA9IHRoaXMudGV4dExpbmVNYXRyaXg7CiAgICBtWzBdID0gYTsKICAgIG1bMV0gPSBiOwogICAgbVsyXSA9IGM7CiAgICBtWzNdID0gZDsKICAgIG1bNF0gPSBlOwogICAgbVs1XSA9IGY7CiAgfQogIHRyYW5zbGF0ZVRleHRNYXRyaXgoeCwgeSkgewogICAgY29uc3QgbSA9IHRoaXMudGV4dE1hdHJpeDsKICAgIG1bNF0gPSBtWzBdICogeCArIG1bMl0gKiB5ICsgbVs0XTsKICAgIG1bNV0gPSBtWzFdICogeCArIG1bM10gKiB5ICsgbVs1XTsKICB9CiAgdHJhbnNsYXRlVGV4dExpbmVNYXRyaXgoeCwgeSkgewogICAgY29uc3QgbSA9IHRoaXMudGV4dExpbmVNYXRyaXg7CiAgICBtWzRdID0gbVswXSAqIHggKyBtWzJdICogeSArIG1bNF07CiAgICBtWzVdID0gbVsxXSAqIHggKyBtWzNdICogeSArIG1bNV07CiAgfQogIGNhcnJpYWdlUmV0dXJuKCkgewogICAgdGhpcy50cmFuc2xhdGVUZXh0TGluZU1hdHJpeCgwLCAtdGhpcy5sZWFkaW5nKTsKICAgIHRoaXMudGV4dE1hdHJpeCA9IHRoaXMudGV4dExpbmVNYXRyaXguc2xpY2UoKTsKICB9CiAgY2xvbmUoKSB7CiAgICBjb25zdCBjbG9uZSA9IE9iamVjdC5jcmVhdGUodGhpcyk7CiAgICBjbG9uZS50ZXh0TWF0cml4ID0gdGhpcy50ZXh0TWF0cml4LnNsaWNlKCk7CiAgICBjbG9uZS50ZXh0TGluZU1hdHJpeCA9IHRoaXMudGV4dExpbmVNYXRyaXguc2xpY2UoKTsKICAgIGNsb25lLmZvbnRNYXRyaXggPSB0aGlzLmZvbnRNYXRyaXguc2xpY2UoKTsKICAgIHJldHVybiBjbG9uZTsKICB9Cn0KY2xhc3MgRXZhbFN0YXRlIHsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHRoaXMuY3RtID0gbmV3IEZsb2F0MzJBcnJheShJREVOVElUWV9NQVRSSVgpOwogICAgdGhpcy5mb250ID0gbnVsbDsKICAgIHRoaXMudGV4dFJlbmRlcmluZ01vZGUgPSBUZXh0UmVuZGVyaW5nTW9kZS5GSUxMOwogICAgdGhpcy5fZmlsbENvbG9yU3BhY2UgPSB0aGlzLl9zdHJva2VDb2xvclNwYWNlID0gQ29sb3JTcGFjZVV0aWxzLmdyYXk7CiAgICB0aGlzLnBhdHRlcm5GaWxsQ29sb3JTcGFjZSA9IG51bGw7CiAgICB0aGlzLnBhdHRlcm5TdHJva2VDb2xvclNwYWNlID0gbnVsbDsKICAgIHRoaXMuY3VycmVudFBvaW50WCA9IHRoaXMuY3VycmVudFBvaW50WSA9IDA7CiAgICB0aGlzLnBhdGhNaW5NYXggPSBuZXcgRmxvYXQzMkFycmF5KFtJbmZpbml0eSwgSW5maW5pdHksIC1JbmZpbml0eSwgLUluZmluaXR5XSk7CiAgICB0aGlzLnBhdGhCdWZmZXIgPSBbXTsKICB9CiAgZ2V0IGZpbGxDb2xvclNwYWNlKCkgewogICAgcmV0dXJuIHRoaXMuX2ZpbGxDb2xvclNwYWNlOwogIH0KICBzZXQgZmlsbENvbG9yU3BhY2UoY29sb3JTcGFjZSkgewogICAgdGhpcy5fZmlsbENvbG9yU3BhY2UgPSB0aGlzLnBhdHRlcm5GaWxsQ29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7CiAgfQogIGdldCBzdHJva2VDb2xvclNwYWNlKCkgewogICAgcmV0dXJuIHRoaXMuX3N0cm9rZUNvbG9yU3BhY2U7CiAgfQogIHNldCBzdHJva2VDb2xvclNwYWNlKGNvbG9yU3BhY2UpIHsKICAgIHRoaXMuX3N0cm9rZUNvbG9yU3BhY2UgPSB0aGlzLnBhdHRlcm5TdHJva2VDb2xvclNwYWNlID0gY29sb3JTcGFjZTsKICB9CiAgY2xvbmUoewogICAgbmV3UGF0aCA9IGZhbHNlCiAgfSA9IHt9KSB7CiAgICBjb25zdCBjbG9uZSA9IE9iamVjdC5jcmVhdGUodGhpcyk7CiAgICBpZiAobmV3UGF0aCkgewogICAgICBjbG9uZS5wYXRoQnVmZmVyID0gW107CiAgICAgIGNsb25lLnBhdGhNaW5NYXggPSBuZXcgRmxvYXQzMkFycmF5KFtJbmZpbml0eSwgSW5maW5pdHksIC1JbmZpbml0eSwgLUluZmluaXR5XSk7CiAgICB9CiAgICByZXR1cm4gY2xvbmU7CiAgfQp9CmNsYXNzIEV2YWx1YXRvclByZXByb2Nlc3NvciB7CiAgc3RhdGljIGdldCBvcE1hcCgpIHsKICAgIHJldHVybiBzaGFkb3codGhpcywgIm9wTWFwIiwgT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLCB7CiAgICAgIHc6IHsKICAgICAgICBpZDogT1BTLnNldExpbmVXaWR0aCwKICAgICAgICBudW1BcmdzOiAxLAogICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2UKICAgICAgfSwKICAgICAgSjogewogICAgICAgIGlkOiBPUFMuc2V0TGluZUNhcCwKICAgICAgICBudW1BcmdzOiAxLAogICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2UKICAgICAgfSwKICAgICAgajogewogICAgICAgIGlkOiBPUFMuc2V0TGluZUpvaW4sCiAgICAgICAgbnVtQXJnczogMSwKICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlCiAgICAgIH0sCiAgICAgIE06IHsKICAgICAgICBpZDogT1BTLnNldE1pdGVyTGltaXQsCiAgICAgICAgbnVtQXJnczogMSwKICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlCiAgICAgIH0sCiAgICAgIGQ6IHsKICAgICAgICBpZDogT1BTLnNldERhc2gsCiAgICAgICAgbnVtQXJnczogMiwKICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlCiAgICAgIH0sCiAgICAgIHJpOiB7CiAgICAgICAgaWQ6IE9QUy5zZXRSZW5kZXJpbmdJbnRlbnQsCiAgICAgICAgbnVtQXJnczogMSwKICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlCiAgICAgIH0sCiAgICAgIGk6IHsKICAgICAgICBpZDogT1BTLnNldEZsYXRuZXNzLAogICAgICAgIG51bUFyZ3M6IDEsCiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZQogICAgICB9LAogICAgICBnczogewogICAgICAgIGlkOiBPUFMuc2V0R1N0YXRlLAogICAgICAgIG51bUFyZ3M6IDEsCiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZQogICAgICB9LAogICAgICBxOiB7CiAgICAgICAgaWQ6IE9QUy5zYXZlLAogICAgICAgIG51bUFyZ3M6IDAsCiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZQogICAgICB9LAogICAgICBROiB7CiAgICAgICAgaWQ6IE9QUy5yZXN0b3JlLAogICAgICAgIG51bUFyZ3M6IDAsCiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZQogICAgICB9LAogICAgICBjbTogewogICAgICAgIGlkOiBPUFMudHJhbnNmb3JtLAogICAgICAgIG51bUFyZ3M6IDYsCiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZQogICAgICB9LAogICAgICBtOiB7CiAgICAgICAgaWQ6IE9QUy5tb3ZlVG8sCiAgICAgICAgbnVtQXJnczogMiwKICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlCiAgICAgIH0sCiAgICAgIGw6IHsKICAgICAgICBpZDogT1BTLmxpbmVUbywKICAgICAgICBudW1BcmdzOiAyLAogICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2UKICAgICAgfSwKICAgICAgYzogewogICAgICAgIGlkOiBPUFMuY3VydmVUbywKICAgICAgICBudW1BcmdzOiA2LAogICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2UKICAgICAgfSwKICAgICAgdjogewogICAgICAgIGlkOiBPUFMuY3VydmVUbzIsCiAgICAgICAgbnVtQXJnczogNCwKICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlCiAgICAgIH0sCiAgICAgIHk6IHsKICAgICAgICBpZDogT1BTLmN1cnZlVG8zLAogICAgICAgIG51bUFyZ3M6IDQsCiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZQogICAgICB9LAogICAgICBoOiB7CiAgICAgICAgaWQ6IE9QUy5jbG9zZVBhdGgsCiAgICAgICAgbnVtQXJnczogMCwKICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlCiAgICAgIH0sCiAgICAgIHJlOiB7CiAgICAgICAgaWQ6IE9QUy5yZWN0YW5nbGUsCiAgICAgICAgbnVtQXJnczogNCwKICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlCiAgICAgIH0sCiAgICAgIFM6IHsKICAgICAgICBpZDogT1BTLnN0cm9rZSwKICAgICAgICBudW1BcmdzOiAwLAogICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2UKICAgICAgfSwKICAgICAgczogewogICAgICAgIGlkOiBPUFMuY2xvc2VTdHJva2UsCiAgICAgICAgbnVtQXJnczogMCwKICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlCiAgICAgIH0sCiAgICAgIGY6IHsKICAgICAgICBpZDogT1BTLmZpbGwsCiAgICAgICAgbnVtQXJnczogMCwKICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlCiAgICAgIH0sCiAgICAgIEY6IHsKICAgICAgICBpZDogT1BTLmZpbGwsCiAgICAgICAgbnVtQXJnczogMCwKICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlCiAgICAgIH0sCiAgICAgICJmKiI6IHsKICAgICAgICBpZDogT1BTLmVvRmlsbCwKICAgICAgICBudW1BcmdzOiAwLAogICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2UKICAgICAgfSwKICAgICAgQjogewogICAgICAgIGlkOiBPUFMuZmlsbFN0cm9rZSwKICAgICAgICBudW1BcmdzOiAwLAogICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2UKICAgICAgfSwKICAgICAgIkIqIjogewogICAgICAgIGlkOiBPUFMuZW9GaWxsU3Ryb2tlLAogICAgICAgIG51bUFyZ3M6IDAsCiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZQogICAgICB9LAogICAgICBiOiB7CiAgICAgICAgaWQ6IE9QUy5jbG9zZUZpbGxTdHJva2UsCiAgICAgICAgbnVtQXJnczogMCwKICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlCiAgICAgIH0sCiAgICAgICJiKiI6IHsKICAgICAgICBpZDogT1BTLmNsb3NlRU9GaWxsU3Ryb2tlLAogICAgICAgIG51bUFyZ3M6IDAsCiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZQogICAgICB9LAogICAgICBuOiB7CiAgICAgICAgaWQ6IE9QUy5lbmRQYXRoLAogICAgICAgIG51bUFyZ3M6IDAsCiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZQogICAgICB9LAogICAgICBXOiB7CiAgICAgICAgaWQ6IE9QUy5jbGlwLAogICAgICAgIG51bUFyZ3M6IDAsCiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZQogICAgICB9LAogICAgICAiVyoiOiB7CiAgICAgICAgaWQ6IE9QUy5lb0NsaXAsCiAgICAgICAgbnVtQXJnczogMCwKICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlCiAgICAgIH0sCiAgICAgIEJUOiB7CiAgICAgICAgaWQ6IE9QUy5iZWdpblRleHQsCiAgICAgICAgbnVtQXJnczogMCwKICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlCiAgICAgIH0sCiAgICAgIEVUOiB7CiAgICAgICAgaWQ6IE9QUy5lbmRUZXh0LAogICAgICAgIG51bUFyZ3M6IDAsCiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZQogICAgICB9LAogICAgICBUYzogewogICAgICAgIGlkOiBPUFMuc2V0Q2hhclNwYWNpbmcsCiAgICAgICAgbnVtQXJnczogMSwKICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlCiAgICAgIH0sCiAgICAgIFR3OiB7CiAgICAgICAgaWQ6IE9QUy5zZXRXb3JkU3BhY2luZywKICAgICAgICBudW1BcmdzOiAxLAogICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2UKICAgICAgfSwKICAgICAgVHo6IHsKICAgICAgICBpZDogT1BTLnNldEhTY2FsZSwKICAgICAgICBudW1BcmdzOiAxLAogICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2UKICAgICAgfSwKICAgICAgVEw6IHsKICAgICAgICBpZDogT1BTLnNldExlYWRpbmcsCiAgICAgICAgbnVtQXJnczogMSwKICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlCiAgICAgIH0sCiAgICAgIFRmOiB7CiAgICAgICAgaWQ6IE9QUy5zZXRGb250LAogICAgICAgIG51bUFyZ3M6IDIsCiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZQogICAgICB9LAogICAgICBUcjogewogICAgICAgIGlkOiBPUFMuc2V0VGV4dFJlbmRlcmluZ01vZGUsCiAgICAgICAgbnVtQXJnczogMSwKICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlCiAgICAgIH0sCiAgICAgIFRzOiB7CiAgICAgICAgaWQ6IE9QUy5zZXRUZXh0UmlzZSwKICAgICAgICBudW1BcmdzOiAxLAogICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2UKICAgICAgfSwKICAgICAgVGQ6IHsKICAgICAgICBpZDogT1BTLm1vdmVUZXh0LAogICAgICAgIG51bUFyZ3M6IDIsCiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZQogICAgICB9LAogICAgICBURDogewogICAgICAgIGlkOiBPUFMuc2V0TGVhZGluZ01vdmVUZXh0LAogICAgICAgIG51bUFyZ3M6IDIsCiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZQogICAgICB9LAogICAgICBUbTogewogICAgICAgIGlkOiBPUFMuc2V0VGV4dE1hdHJpeCwKICAgICAgICBudW1BcmdzOiA2LAogICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2UKICAgICAgfSwKICAgICAgIlQqIjogewogICAgICAgIGlkOiBPUFMubmV4dExpbmUsCiAgICAgICAgbnVtQXJnczogMCwKICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlCiAgICAgIH0sCiAgICAgIFRqOiB7CiAgICAgICAgaWQ6IE9QUy5zaG93VGV4dCwKICAgICAgICBudW1BcmdzOiAxLAogICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2UKICAgICAgfSwKICAgICAgVEo6IHsKICAgICAgICBpZDogT1BTLnNob3dTcGFjZWRUZXh0LAogICAgICAgIG51bUFyZ3M6IDEsCiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZQogICAgICB9LAogICAgICAiJyI6IHsKICAgICAgICBpZDogT1BTLm5leHRMaW5lU2hvd1RleHQsCiAgICAgICAgbnVtQXJnczogMSwKICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlCiAgICAgIH0sCiAgICAgICciJzogewogICAgICAgIGlkOiBPUFMubmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQsCiAgICAgICAgbnVtQXJnczogMywKICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlCiAgICAgIH0sCiAgICAgIGQwOiB7CiAgICAgICAgaWQ6IE9QUy5zZXRDaGFyV2lkdGgsCiAgICAgICAgbnVtQXJnczogMiwKICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlCiAgICAgIH0sCiAgICAgIGQxOiB7CiAgICAgICAgaWQ6IE9QUy5zZXRDaGFyV2lkdGhBbmRCb3VuZHMsCiAgICAgICAgbnVtQXJnczogNiwKICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlCiAgICAgIH0sCiAgICAgIENTOiB7CiAgICAgICAgaWQ6IE9QUy5zZXRTdHJva2VDb2xvclNwYWNlLAogICAgICAgIG51bUFyZ3M6IDEsCiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZQogICAgICB9LAogICAgICBjczogewogICAgICAgIGlkOiBPUFMuc2V0RmlsbENvbG9yU3BhY2UsCiAgICAgICAgbnVtQXJnczogMSwKICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlCiAgICAgIH0sCiAgICAgIFNDOiB7CiAgICAgICAgaWQ6IE9QUy5zZXRTdHJva2VDb2xvciwKICAgICAgICBudW1BcmdzOiA0LAogICAgICAgIHZhcmlhYmxlQXJnczogdHJ1ZQogICAgICB9LAogICAgICBTQ046IHsKICAgICAgICBpZDogT1BTLnNldFN0cm9rZUNvbG9yTiwKICAgICAgICBudW1BcmdzOiAzMywKICAgICAgICB2YXJpYWJsZUFyZ3M6IHRydWUKICAgICAgfSwKICAgICAgc2M6IHsKICAgICAgICBpZDogT1BTLnNldEZpbGxDb2xvciwKICAgICAgICBudW1BcmdzOiA0LAogICAgICAgIHZhcmlhYmxlQXJnczogdHJ1ZQogICAgICB9LAogICAgICBzY246IHsKICAgICAgICBpZDogT1BTLnNldEZpbGxDb2xvck4sCiAgICAgICAgbnVtQXJnczogMzMsCiAgICAgICAgdmFyaWFibGVBcmdzOiB0cnVlCiAgICAgIH0sCiAgICAgIEc6IHsKICAgICAgICBpZDogT1BTLnNldFN0cm9rZUdyYXksCiAgICAgICAgbnVtQXJnczogMSwKICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlCiAgICAgIH0sCiAgICAgIGc6IHsKICAgICAgICBpZDogT1BTLnNldEZpbGxHcmF5LAogICAgICAgIG51bUFyZ3M6IDEsCiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZQogICAgICB9LAogICAgICBSRzogewogICAgICAgIGlkOiBPUFMuc2V0U3Ryb2tlUkdCQ29sb3IsCiAgICAgICAgbnVtQXJnczogMywKICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlCiAgICAgIH0sCiAgICAgIHJnOiB7CiAgICAgICAgaWQ6IE9QUy5zZXRGaWxsUkdCQ29sb3IsCiAgICAgICAgbnVtQXJnczogMywKICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlCiAgICAgIH0sCiAgICAgIEs6IHsKICAgICAgICBpZDogT1BTLnNldFN0cm9rZUNNWUtDb2xvciwKICAgICAgICBudW1BcmdzOiA0LAogICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2UKICAgICAgfSwKICAgICAgazogewogICAgICAgIGlkOiBPUFMuc2V0RmlsbENNWUtDb2xvciwKICAgICAgICBudW1BcmdzOiA0LAogICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2UKICAgICAgfSwKICAgICAgc2g6IHsKICAgICAgICBpZDogT1BTLnNoYWRpbmdGaWxsLAogICAgICAgIG51bUFyZ3M6IDEsCiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZQogICAgICB9LAogICAgICBCSTogewogICAgICAgIGlkOiBPUFMuYmVnaW5JbmxpbmVJbWFnZSwKICAgICAgICBudW1BcmdzOiAwLAogICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2UKICAgICAgfSwKICAgICAgSUQ6IHsKICAgICAgICBpZDogT1BTLmJlZ2luSW1hZ2VEYXRhLAogICAgICAgIG51bUFyZ3M6IDAsCiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZQogICAgICB9LAogICAgICBFSTogewogICAgICAgIGlkOiBPUFMuZW5kSW5saW5lSW1hZ2UsCiAgICAgICAgbnVtQXJnczogMSwKICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlCiAgICAgIH0sCiAgICAgIERvOiB7CiAgICAgICAgaWQ6IE9QUy5wYWludFhPYmplY3QsCiAgICAgICAgbnVtQXJnczogMSwKICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlCiAgICAgIH0sCiAgICAgIE1QOiB7CiAgICAgICAgaWQ6IE9QUy5tYXJrUG9pbnQsCiAgICAgICAgbnVtQXJnczogMSwKICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlCiAgICAgIH0sCiAgICAgIERQOiB7CiAgICAgICAgaWQ6IE9QUy5tYXJrUG9pbnRQcm9wcywKICAgICAgICBudW1BcmdzOiAyLAogICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2UKICAgICAgfSwKICAgICAgQk1DOiB7CiAgICAgICAgaWQ6IE9QUy5iZWdpbk1hcmtlZENvbnRlbnQsCiAgICAgICAgbnVtQXJnczogMSwKICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlCiAgICAgIH0sCiAgICAgIEJEQzogewogICAgICAgIGlkOiBPUFMuYmVnaW5NYXJrZWRDb250ZW50UHJvcHMsCiAgICAgICAgbnVtQXJnczogMiwKICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlCiAgICAgIH0sCiAgICAgIEVNQzogewogICAgICAgIGlkOiBPUFMuZW5kTWFya2VkQ29udGVudCwKICAgICAgICBudW1BcmdzOiAwLAogICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2UKICAgICAgfSwKICAgICAgQlg6IHsKICAgICAgICBpZDogT1BTLmJlZ2luQ29tcGF0LAogICAgICAgIG51bUFyZ3M6IDAsCiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZQogICAgICB9LAogICAgICBFWDogewogICAgICAgIGlkOiBPUFMuZW5kQ29tcGF0LAogICAgICAgIG51bUFyZ3M6IDAsCiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZQogICAgICB9LAogICAgICBCTTogbnVsbCwKICAgICAgQkQ6IG51bGwsCiAgICAgIHRydWU6IG51bGwsCiAgICAgIGZhOiBudWxsLAogICAgICBmYWw6IG51bGwsCiAgICAgIGZhbHM6IG51bGwsCiAgICAgIGZhbHNlOiBudWxsLAogICAgICBudTogbnVsbCwKICAgICAgbnVsOiBudWxsLAogICAgICBudWxsOiBudWxsCiAgICB9KSk7CiAgfQogIHN0YXRpYyBNQVhfSU5WQUxJRF9QQVRIX09QUyA9IDEwOwogIGNvbnN0cnVjdG9yKHN0cmVhbSwgeHJlZiwgc3RhdGVNYW5hZ2VyID0gbmV3IFN0YXRlTWFuYWdlcigpKSB7CiAgICB0aGlzLnBhcnNlciA9IG5ldyBQYXJzZXIoewogICAgICBsZXhlcjogbmV3IExleGVyKHN0cmVhbSwgRXZhbHVhdG9yUHJlcHJvY2Vzc29yLm9wTWFwKSwKICAgICAgeHJlZgogICAgfSk7CiAgICB0aGlzLnN0YXRlTWFuYWdlciA9IHN0YXRlTWFuYWdlcjsKICAgIHRoaXMubm9uUHJvY2Vzc2VkQXJncyA9IFtdOwogICAgdGhpcy5faXNQYXRoT3AgPSBmYWxzZTsKICAgIHRoaXMuX251bUludmFsaWRQYXRoT1BTID0gMDsKICB9CiAgZ2V0IHNhdmVkU3RhdGVzRGVwdGgoKSB7CiAgICByZXR1cm4gdGhpcy5zdGF0ZU1hbmFnZXIuc3RhdGVTdGFjay5sZW5ndGg7CiAgfQogIHJlYWQob3BlcmF0aW9uKSB7CiAgICBsZXQgYXJncyA9IG9wZXJhdGlvbi5hcmdzOwogICAgd2hpbGUgKHRydWUpIHsKICAgICAgY29uc3Qgb2JqID0gdGhpcy5wYXJzZXIuZ2V0T2JqKCk7CiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBDbWQpIHsKICAgICAgICBjb25zdCBjbWQgPSBvYmouY21kOwogICAgICAgIGNvbnN0IG9wU3BlYyA9IEV2YWx1YXRvclByZXByb2Nlc3Nvci5vcE1hcFtjbWRdOwogICAgICAgIGlmICghb3BTcGVjKSB7CiAgICAgICAgICB3YXJuKGBVbmtub3duIGNvbW1hbmQgIiR7Y21kfSIuYCk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgY29uc3QgZm4gPSBvcFNwZWMuaWQ7CiAgICAgICAgY29uc3QgbnVtQXJncyA9IG9wU3BlYy5udW1BcmdzOwogICAgICAgIGxldCBhcmdzTGVuZ3RoID0gYXJncyAhPT0gbnVsbCA/IGFyZ3MubGVuZ3RoIDogMDsKICAgICAgICBpZiAoIXRoaXMuX2lzUGF0aE9wKSB7CiAgICAgICAgICB0aGlzLl9udW1JbnZhbGlkUGF0aE9QUyA9IDA7CiAgICAgICAgfQogICAgICAgIHRoaXMuX2lzUGF0aE9wID0gZm4gPj0gT1BTLm1vdmVUbyAmJiBmbiA8PSBPUFMuZW5kUGF0aDsKICAgICAgICBpZiAoIW9wU3BlYy52YXJpYWJsZUFyZ3MpIHsKICAgICAgICAgIGlmIChhcmdzTGVuZ3RoICE9PSBudW1BcmdzKSB7CiAgICAgICAgICAgIGNvbnN0IG5vblByb2Nlc3NlZEFyZ3MgPSB0aGlzLm5vblByb2Nlc3NlZEFyZ3M7CiAgICAgICAgICAgIHdoaWxlIChhcmdzTGVuZ3RoID4gbnVtQXJncykgewogICAgICAgICAgICAgIG5vblByb2Nlc3NlZEFyZ3MucHVzaChhcmdzLnNoaWZ0KCkpOwogICAgICAgICAgICAgIGFyZ3NMZW5ndGgtLTsKICAgICAgICAgICAgfQogICAgICAgICAgICB3aGlsZSAoYXJnc0xlbmd0aCA8IG51bUFyZ3MgJiYgbm9uUHJvY2Vzc2VkQXJncy5sZW5ndGggIT09IDApIHsKICAgICAgICAgICAgICBpZiAoYXJncyA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgYXJncyA9IFtdOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBhcmdzLnVuc2hpZnQobm9uUHJvY2Vzc2VkQXJncy5wb3AoKSk7CiAgICAgICAgICAgICAgYXJnc0xlbmd0aCsrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYXJnc0xlbmd0aCA8IG51bUFyZ3MpIHsKICAgICAgICAgICAgY29uc3QgcGFydGlhbE1zZyA9IGBjb21tYW5kICR7Y21kfTogZXhwZWN0ZWQgJHtudW1BcmdzfSBhcmdzLCBgICsgYGJ1dCByZWNlaXZlZCAke2FyZ3NMZW5ndGh9IGFyZ3MuYDsKICAgICAgICAgICAgaWYgKHRoaXMuX2lzUGF0aE9wICYmICsrdGhpcy5fbnVtSW52YWxpZFBhdGhPUFMgPiBFdmFsdWF0b3JQcmVwcm9jZXNzb3IuTUFYX0lOVkFMSURfUEFUSF9PUFMpIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEludmFsaWQgJHtwYXJ0aWFsTXNnfWApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHdhcm4oYFNraXBwaW5nICR7cGFydGlhbE1zZ31gKTsKICAgICAgICAgICAgaWYgKGFyZ3MgIT09IG51bGwpIHsKICAgICAgICAgICAgICBhcmdzLmxlbmd0aCA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChhcmdzTGVuZ3RoID4gbnVtQXJncykgewogICAgICAgICAgaW5mbyhgQ29tbWFuZCAke2NtZH06IGV4cGVjdGVkIFswLCAke251bUFyZ3N9XSBhcmdzLCBgICsgYGJ1dCByZWNlaXZlZCAke2FyZ3NMZW5ndGh9IGFyZ3MuYCk7CiAgICAgICAgfQogICAgICAgIHRoaXMucHJlcHJvY2Vzc0NvbW1hbmQoZm4sIGFyZ3MpOwogICAgICAgIG9wZXJhdGlvbi5mbiA9IGZuOwogICAgICAgIG9wZXJhdGlvbi5hcmdzID0gYXJnczsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBpZiAob2JqID09PSBFT0YpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgaWYgKG9iaiAhPT0gbnVsbCkgewogICAgICAgIGlmIChhcmdzID09PSBudWxsKSB7CiAgICAgICAgICBhcmdzID0gW107CiAgICAgICAgfQogICAgICAgIGFyZ3MucHVzaChvYmopOwogICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDMzKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlRvbyBtYW55IGFyZ3VtZW50cyIpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICBwcmVwcm9jZXNzQ29tbWFuZChmbiwgYXJncykgewogICAgc3dpdGNoIChmbiB8IDApIHsKICAgICAgY2FzZSBPUFMuc2F2ZToKICAgICAgICB0aGlzLnN0YXRlTWFuYWdlci5zYXZlKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgT1BTLnJlc3RvcmU6CiAgICAgICAgdGhpcy5zdGF0ZU1hbmFnZXIucmVzdG9yZSgpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE9QUy50cmFuc2Zvcm06CiAgICAgICAgdGhpcy5zdGF0ZU1hbmFnZXIudHJhbnNmb3JtKGFyZ3MpOwogICAgICAgIGJyZWFrOwogICAgfQogIH0KfQoKOy8vIC4vc3JjL2NvcmUvZGVmYXVsdF9hcHBlYXJhbmNlLmpzCgoKCgoKCgoKY2xhc3MgRGVmYXVsdEFwcGVhcmFuY2VFdmFsdWF0b3IgZXh0ZW5kcyBFdmFsdWF0b3JQcmVwcm9jZXNzb3IgewogIGNvbnN0cnVjdG9yKHN0cikgewogICAgc3VwZXIobmV3IFN0cmluZ1N0cmVhbShzdHIpKTsKICB9CiAgcGFyc2UoKSB7CiAgICBjb25zdCBvcGVyYXRpb24gPSB7CiAgICAgIGZuOiAwLAogICAgICBhcmdzOiBbXQogICAgfTsKICAgIGNvbnN0IHJlc3VsdCA9IHsKICAgICAgZm9udFNpemU6IDAsCiAgICAgIGZvbnROYW1lOiAiIiwKICAgICAgZm9udENvbG9yOiBuZXcgVWludDhDbGFtcGVkQXJyYXkoMykKICAgIH07CiAgICB0cnkgewogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIG9wZXJhdGlvbi5hcmdzLmxlbmd0aCA9IDA7CiAgICAgICAgaWYgKCF0aGlzLnJlYWQob3BlcmF0aW9uKSkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnNhdmVkU3RhdGVzRGVwdGggIT09IDApIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBjb25zdCB7CiAgICAgICAgICBmbiwKICAgICAgICAgIGFyZ3MKICAgICAgICB9ID0gb3BlcmF0aW9uOwogICAgICAgIHN3aXRjaCAoZm4gfCAwKSB7CiAgICAgICAgICBjYXNlIE9QUy5zZXRGb250OgogICAgICAgICAgICBjb25zdCBbZm9udE5hbWUsIGZvbnRTaXplXSA9IGFyZ3M7CiAgICAgICAgICAgIGlmIChmb250TmFtZSBpbnN0YW5jZW9mIE5hbWUpIHsKICAgICAgICAgICAgICByZXN1bHQuZm9udE5hbWUgPSBmb250TmFtZS5uYW1lOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0eXBlb2YgZm9udFNpemUgPT09ICJudW1iZXIiICYmIGZvbnRTaXplID4gMCkgewogICAgICAgICAgICAgIHJlc3VsdC5mb250U2l6ZSA9IGZvbnRTaXplOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBPUFMuc2V0RmlsbFJHQkNvbG9yOgogICAgICAgICAgICBDb2xvclNwYWNlVXRpbHMucmdiLmdldFJnYkl0ZW0oYXJncywgMCwgcmVzdWx0LmZvbnRDb2xvciwgMCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBPUFMuc2V0RmlsbEdyYXk6CiAgICAgICAgICAgIENvbG9yU3BhY2VVdGlscy5ncmF5LmdldFJnYkl0ZW0oYXJncywgMCwgcmVzdWx0LmZvbnRDb2xvciwgMCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBPUFMuc2V0RmlsbENNWUtDb2xvcjoKICAgICAgICAgICAgQ29sb3JTcGFjZVV0aWxzLmNteWsuZ2V0UmdiSXRlbShhcmdzLCAwLCByZXN1bHQuZm9udENvbG9yLCAwKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9IGNhdGNoIChyZWFzb24pIHsKICAgICAgd2FybihgcGFyc2VEZWZhdWx0QXBwZWFyYW5jZSAtIGlnbm9yaW5nIGVycm9yczogIiR7cmVhc29ufSIuYCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQpmdW5jdGlvbiBwYXJzZURlZmF1bHRBcHBlYXJhbmNlKHN0cikgewogIHJldHVybiBuZXcgRGVmYXVsdEFwcGVhcmFuY2VFdmFsdWF0b3Ioc3RyKS5wYXJzZSgpOwp9CmNsYXNzIEFwcGVhcmFuY2VTdHJlYW1FdmFsdWF0b3IgZXh0ZW5kcyBFdmFsdWF0b3JQcmVwcm9jZXNzb3IgewogIGNvbnN0cnVjdG9yKHN0cmVhbSwgZXZhbHVhdG9yT3B0aW9ucywgeHJlZiwgZ2xvYmFsQ29sb3JTcGFjZUNhY2hlKSB7CiAgICBzdXBlcihzdHJlYW0pOwogICAgdGhpcy5zdHJlYW0gPSBzdHJlYW07CiAgICB0aGlzLmV2YWx1YXRvck9wdGlvbnMgPSBldmFsdWF0b3JPcHRpb25zOwogICAgdGhpcy54cmVmID0geHJlZjsKICAgIHRoaXMuZ2xvYmFsQ29sb3JTcGFjZUNhY2hlID0gZ2xvYmFsQ29sb3JTcGFjZUNhY2hlOwogICAgdGhpcy5yZXNvdXJjZXMgPSBzdHJlYW0uZGljdD8uZ2V0KCJSZXNvdXJjZXMiKTsKICB9CiAgcGFyc2UoKSB7CiAgICBjb25zdCBvcGVyYXRpb24gPSB7CiAgICAgIGZuOiAwLAogICAgICBhcmdzOiBbXQogICAgfTsKICAgIGxldCByZXN1bHQgPSB7CiAgICAgIHNjYWxlRmFjdG9yOiAxLAogICAgICBmb250U2l6ZTogMCwKICAgICAgZm9udE5hbWU6ICIiLAogICAgICBmb250Q29sb3I6IG5ldyBVaW50OENsYW1wZWRBcnJheSgzKSwKICAgICAgZmlsbENvbG9yU3BhY2U6IENvbG9yU3BhY2VVdGlscy5ncmF5CiAgICB9OwogICAgbGV0IGJyZWFrTG9vcCA9IGZhbHNlOwogICAgY29uc3Qgc3RhY2sgPSBbXTsKICAgIHRyeSB7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgb3BlcmF0aW9uLmFyZ3MubGVuZ3RoID0gMDsKICAgICAgICBpZiAoYnJlYWtMb29wIHx8ICF0aGlzLnJlYWQob3BlcmF0aW9uKSkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHsKICAgICAgICAgIGZuLAogICAgICAgICAgYXJncwogICAgICAgIH0gPSBvcGVyYXRpb247CiAgICAgICAgc3dpdGNoIChmbiB8IDApIHsKICAgICAgICAgIGNhc2UgT1BTLnNhdmU6CiAgICAgICAgICAgIHN0YWNrLnB1c2goewogICAgICAgICAgICAgIHNjYWxlRmFjdG9yOiByZXN1bHQuc2NhbGVGYWN0b3IsCiAgICAgICAgICAgICAgZm9udFNpemU6IHJlc3VsdC5mb250U2l6ZSwKICAgICAgICAgICAgICBmb250TmFtZTogcmVzdWx0LmZvbnROYW1lLAogICAgICAgICAgICAgIGZvbnRDb2xvcjogcmVzdWx0LmZvbnRDb2xvci5zbGljZSgpLAogICAgICAgICAgICAgIGZpbGxDb2xvclNwYWNlOiByZXN1bHQuZmlsbENvbG9yU3BhY2UKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBPUFMucmVzdG9yZToKICAgICAgICAgICAgcmVzdWx0ID0gc3RhY2sucG9wKCkgfHwgcmVzdWx0OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgT1BTLnNldFRleHRNYXRyaXg6CiAgICAgICAgICAgIHJlc3VsdC5zY2FsZUZhY3RvciAqPSBNYXRoLmh5cG90KGFyZ3NbMF0sIGFyZ3NbMV0pOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgT1BTLnNldEZvbnQ6CiAgICAgICAgICAgIGNvbnN0IFtmb250TmFtZSwgZm9udFNpemVdID0gYXJnczsKICAgICAgICAgICAgaWYgKGZvbnROYW1lIGluc3RhbmNlb2YgTmFtZSkgewogICAgICAgICAgICAgIHJlc3VsdC5mb250TmFtZSA9IGZvbnROYW1lLm5hbWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHR5cGVvZiBmb250U2l6ZSA9PT0gIm51bWJlciIgJiYgZm9udFNpemUgPiAwKSB7CiAgICAgICAgICAgICAgcmVzdWx0LmZvbnRTaXplID0gZm9udFNpemUgKiByZXN1bHQuc2NhbGVGYWN0b3I7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIE9QUy5zZXRGaWxsQ29sb3JTcGFjZToKICAgICAgICAgICAgcmVzdWx0LmZpbGxDb2xvclNwYWNlID0gQ29sb3JTcGFjZVV0aWxzLnBhcnNlKHsKICAgICAgICAgICAgICBjczogYXJnc1swXSwKICAgICAgICAgICAgICB4cmVmOiB0aGlzLnhyZWYsCiAgICAgICAgICAgICAgcmVzb3VyY2VzOiB0aGlzLnJlc291cmNlcywKICAgICAgICAgICAgICBwZGZGdW5jdGlvbkZhY3Rvcnk6IHRoaXMuX3BkZkZ1bmN0aW9uRmFjdG9yeSwKICAgICAgICAgICAgICBnbG9iYWxDb2xvclNwYWNlQ2FjaGU6IHRoaXMuZ2xvYmFsQ29sb3JTcGFjZUNhY2hlLAogICAgICAgICAgICAgIGxvY2FsQ29sb3JTcGFjZUNhY2hlOiB0aGlzLl9sb2NhbENvbG9yU3BhY2VDYWNoZQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIE9QUy5zZXRGaWxsQ29sb3I6CiAgICAgICAgICAgIGNvbnN0IGNzID0gcmVzdWx0LmZpbGxDb2xvclNwYWNlOwogICAgICAgICAgICBjcy5nZXRSZ2JJdGVtKGFyZ3MsIDAsIHJlc3VsdC5mb250Q29sb3IsIDApOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgT1BTLnNldEZpbGxSR0JDb2xvcjoKICAgICAgICAgICAgQ29sb3JTcGFjZVV0aWxzLnJnYi5nZXRSZ2JJdGVtKGFyZ3MsIDAsIHJlc3VsdC5mb250Q29sb3IsIDApOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgT1BTLnNldEZpbGxHcmF5OgogICAgICAgICAgICBDb2xvclNwYWNlVXRpbHMuZ3JheS5nZXRSZ2JJdGVtKGFyZ3MsIDAsIHJlc3VsdC5mb250Q29sb3IsIDApOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgT1BTLnNldEZpbGxDTVlLQ29sb3I6CiAgICAgICAgICAgIENvbG9yU3BhY2VVdGlscy5jbXlrLmdldFJnYkl0ZW0oYXJncywgMCwgcmVzdWx0LmZvbnRDb2xvciwgMCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBPUFMuc2hvd1RleHQ6CiAgICAgICAgICBjYXNlIE9QUy5zaG93U3BhY2VkVGV4dDoKICAgICAgICAgIGNhc2UgT1BTLm5leHRMaW5lU2hvd1RleHQ6CiAgICAgICAgICBjYXNlIE9QUy5uZXh0TGluZVNldFNwYWNpbmdTaG93VGV4dDoKICAgICAgICAgICAgYnJlYWtMb29wID0gdHJ1ZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9IGNhdGNoIChyZWFzb24pIHsKICAgICAgd2FybihgcGFyc2VBcHBlYXJhbmNlU3RyZWFtIC0gaWdub3JpbmcgZXJyb3JzOiAiJHtyZWFzb259Ii5gKTsKICAgIH0KICAgIHRoaXMuc3RyZWFtLnJlc2V0KCk7CiAgICBkZWxldGUgcmVzdWx0LnNjYWxlRmFjdG9yOwogICAgZGVsZXRlIHJlc3VsdC5maWxsQ29sb3JTcGFjZTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQogIGdldCBfbG9jYWxDb2xvclNwYWNlQ2FjaGUoKSB7CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJfbG9jYWxDb2xvclNwYWNlQ2FjaGUiLCBuZXcgTG9jYWxDb2xvclNwYWNlQ2FjaGUoKSk7CiAgfQogIGdldCBfcGRmRnVuY3Rpb25GYWN0b3J5KCkgewogICAgY29uc3QgcGRmRnVuY3Rpb25GYWN0b3J5ID0gbmV3IFBERkZ1bmN0aW9uRmFjdG9yeSh7CiAgICAgIHhyZWY6IHRoaXMueHJlZiwKICAgICAgaXNFdmFsU3VwcG9ydGVkOiB0aGlzLmV2YWx1YXRvck9wdGlvbnMuaXNFdmFsU3VwcG9ydGVkCiAgICB9KTsKICAgIHJldHVybiBzaGFkb3codGhpcywgIl9wZGZGdW5jdGlvbkZhY3RvcnkiLCBwZGZGdW5jdGlvbkZhY3RvcnkpOwogIH0KfQpmdW5jdGlvbiBwYXJzZUFwcGVhcmFuY2VTdHJlYW0oc3RyZWFtLCBldmFsdWF0b3JPcHRpb25zLCB4cmVmLCBnbG9iYWxDb2xvclNwYWNlQ2FjaGUpIHsKICByZXR1cm4gbmV3IEFwcGVhcmFuY2VTdHJlYW1FdmFsdWF0b3Ioc3RyZWFtLCBldmFsdWF0b3JPcHRpb25zLCB4cmVmLCBnbG9iYWxDb2xvclNwYWNlQ2FjaGUpLnBhcnNlKCk7Cn0KZnVuY3Rpb24gZ2V0UGRmQ29sb3IoY29sb3IsIGlzRmlsbCkgewogIGlmIChjb2xvclswXSA9PT0gY29sb3JbMV0gJiYgY29sb3JbMV0gPT09IGNvbG9yWzJdKSB7CiAgICBjb25zdCBncmF5ID0gY29sb3JbMF0gLyAyNTU7CiAgICByZXR1cm4gYCR7bnVtYmVyVG9TdHJpbmcoZ3JheSl9ICR7aXNGaWxsID8gImciIDogIkcifWA7CiAgfQogIHJldHVybiBBcnJheS5mcm9tKGNvbG9yLCBjID0+IG51bWJlclRvU3RyaW5nKGMgLyAyNTUpKS5qb2luKCIgIikgKyBgICR7aXNGaWxsID8gInJnIiA6ICJSRyJ9YDsKfQpmdW5jdGlvbiBjcmVhdGVEZWZhdWx0QXBwZWFyYW5jZSh7CiAgZm9udFNpemUsCiAgZm9udE5hbWUsCiAgZm9udENvbG9yCn0pIHsKICByZXR1cm4gYC8ke2VzY2FwZVBERk5hbWUoZm9udE5hbWUpfSAke2ZvbnRTaXplfSBUZiAke2dldFBkZkNvbG9yKGZvbnRDb2xvciwgdHJ1ZSl9YDsKfQpjbGFzcyBGYWtlVW5pY29kZUZvbnQgewogIGNvbnN0cnVjdG9yKHhyZWYsIGZvbnRGYW1pbHkpIHsKICAgIHRoaXMueHJlZiA9IHhyZWY7CiAgICB0aGlzLndpZHRocyA9IG51bGw7CiAgICB0aGlzLmZpcnN0Q2hhciA9IEluZmluaXR5OwogICAgdGhpcy5sYXN0Q2hhciA9IC1JbmZpbml0eTsKICAgIHRoaXMuZm9udEZhbWlseSA9IGZvbnRGYW1pbHk7CiAgICBjb25zdCBjYW52YXMgPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKDEsIDEpOwogICAgdGhpcy5jdHhNZWFzdXJlID0gY2FudmFzLmdldENvbnRleHQoIjJkIiwgewogICAgICB3aWxsUmVhZEZyZXF1ZW50bHk6IHRydWUKICAgIH0pOwogICAgaWYgKCFGYWtlVW5pY29kZUZvbnQuX2ZvbnROYW1lSWQpIHsKICAgICAgRmFrZVVuaWNvZGVGb250Ll9mb250TmFtZUlkID0gMTsKICAgIH0KICAgIHRoaXMuZm9udE5hbWUgPSBOYW1lLmdldChgSW52YWxpZFBERmpzRm9udF8ke2ZvbnRGYW1pbHl9XyR7RmFrZVVuaWNvZGVGb250Ll9mb250TmFtZUlkKyt9YCk7CiAgfQogIGdldCBmb250RGVzY3JpcHRvclJlZigpIHsKICAgIGlmICghRmFrZVVuaWNvZGVGb250Ll9mb250RGVzY3JpcHRvclJlZikgewogICAgICBjb25zdCBmb250RGVzY3JpcHRvciA9IG5ldyBEaWN0KHRoaXMueHJlZik7CiAgICAgIGZvbnREZXNjcmlwdG9yLnNldCgiVHlwZSIsIE5hbWUuZ2V0KCJGb250RGVzY3JpcHRvciIpKTsKICAgICAgZm9udERlc2NyaXB0b3Iuc2V0KCJGb250TmFtZSIsIHRoaXMuZm9udE5hbWUpOwogICAgICBmb250RGVzY3JpcHRvci5zZXQoIkZvbnRGYW1pbHkiLCAiTXlyaWFkUHJvIFJlZ3VsYXIiKTsKICAgICAgZm9udERlc2NyaXB0b3Iuc2V0KCJGb250QkJveCIsIFswLCAwLCAwLCAwXSk7CiAgICAgIGZvbnREZXNjcmlwdG9yLnNldCgiRm9udFN0cmV0Y2giLCBOYW1lLmdldCgiTm9ybWFsIikpOwogICAgICBmb250RGVzY3JpcHRvci5zZXQoIkZvbnRXZWlnaHQiLCA0MDApOwogICAgICBmb250RGVzY3JpcHRvci5zZXQoIkl0YWxpY0FuZ2xlIiwgMCk7CiAgICAgIEZha2VVbmljb2RlRm9udC5fZm9udERlc2NyaXB0b3JSZWYgPSB0aGlzLnhyZWYuZ2V0TmV3UGVyc2lzdGVudFJlZihmb250RGVzY3JpcHRvcik7CiAgICB9CiAgICByZXR1cm4gRmFrZVVuaWNvZGVGb250Ll9mb250RGVzY3JpcHRvclJlZjsKICB9CiAgZ2V0IGRlc2NlbmRhbnRGb250UmVmKCkgewogICAgY29uc3QgZGVzY2VuZGFudEZvbnQgPSBuZXcgRGljdCh0aGlzLnhyZWYpOwogICAgZGVzY2VuZGFudEZvbnQuc2V0KCJCYXNlRm9udCIsIHRoaXMuZm9udE5hbWUpOwogICAgZGVzY2VuZGFudEZvbnQuc2V0KCJUeXBlIiwgTmFtZS5nZXQoIkZvbnQiKSk7CiAgICBkZXNjZW5kYW50Rm9udC5zZXQoIlN1YnR5cGUiLCBOYW1lLmdldCgiQ0lERm9udFR5cGUwIikpOwogICAgZGVzY2VuZGFudEZvbnQuc2V0KCJDSURUb0dJRE1hcCIsIE5hbWUuZ2V0KCJJZGVudGl0eSIpKTsKICAgIGRlc2NlbmRhbnRGb250LnNldCgiRmlyc3RDaGFyIiwgdGhpcy5maXJzdENoYXIpOwogICAgZGVzY2VuZGFudEZvbnQuc2V0KCJMYXN0Q2hhciIsIHRoaXMubGFzdENoYXIpOwogICAgZGVzY2VuZGFudEZvbnQuc2V0KCJGb250RGVzY3JpcHRvciIsIHRoaXMuZm9udERlc2NyaXB0b3JSZWYpOwogICAgZGVzY2VuZGFudEZvbnQuc2V0KCJEVyIsIDEwMDApOwogICAgY29uc3Qgd2lkdGhzID0gW107CiAgICBjb25zdCBjaGFycyA9IFsuLi50aGlzLndpZHRocy5lbnRyaWVzKCldLnNvcnQoKTsKICAgIGxldCBjdXJyZW50Q2hhciA9IG51bGw7CiAgICBsZXQgY3VycmVudFdpZHRocyA9IG51bGw7CiAgICBmb3IgKGNvbnN0IFtjaGFyLCB3aWR0aF0gb2YgY2hhcnMpIHsKICAgICAgaWYgKCFjdXJyZW50Q2hhcikgewogICAgICAgIGN1cnJlbnRDaGFyID0gY2hhcjsKICAgICAgICBjdXJyZW50V2lkdGhzID0gW3dpZHRoXTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAoY2hhciA9PT0gY3VycmVudENoYXIgKyBjdXJyZW50V2lkdGhzLmxlbmd0aCkgewogICAgICAgIGN1cnJlbnRXaWR0aHMucHVzaCh3aWR0aCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgd2lkdGhzLnB1c2goY3VycmVudENoYXIsIGN1cnJlbnRXaWR0aHMpOwogICAgICAgIGN1cnJlbnRDaGFyID0gY2hhcjsKICAgICAgICBjdXJyZW50V2lkdGhzID0gW3dpZHRoXTsKICAgICAgfQogICAgfQogICAgaWYgKGN1cnJlbnRDaGFyKSB7CiAgICAgIHdpZHRocy5wdXNoKGN1cnJlbnRDaGFyLCBjdXJyZW50V2lkdGhzKTsKICAgIH0KICAgIGRlc2NlbmRhbnRGb250LnNldCgiVyIsIHdpZHRocyk7CiAgICBjb25zdCBjaWRTeXN0ZW1JbmZvID0gbmV3IERpY3QodGhpcy54cmVmKTsKICAgIGNpZFN5c3RlbUluZm8uc2V0KCJPcmRlcmluZyIsICJJZGVudGl0eSIpOwogICAgY2lkU3lzdGVtSW5mby5zZXQoIlJlZ2lzdHJ5IiwgIkFkb2JlIik7CiAgICBjaWRTeXN0ZW1JbmZvLnNldCgiU3VwcGxlbWVudCIsIDApOwogICAgZGVzY2VuZGFudEZvbnQuc2V0KCJDSURTeXN0ZW1JbmZvIiwgY2lkU3lzdGVtSW5mbyk7CiAgICByZXR1cm4gdGhpcy54cmVmLmdldE5ld1BlcnNpc3RlbnRSZWYoZGVzY2VuZGFudEZvbnQpOwogIH0KICBnZXQgYmFzZUZvbnRSZWYoKSB7CiAgICBjb25zdCBiYXNlRm9udCA9IG5ldyBEaWN0KHRoaXMueHJlZik7CiAgICBiYXNlRm9udC5zZXQoIkJhc2VGb250IiwgdGhpcy5mb250TmFtZSk7CiAgICBiYXNlRm9udC5zZXQoIlR5cGUiLCBOYW1lLmdldCgiRm9udCIpKTsKICAgIGJhc2VGb250LnNldCgiU3VidHlwZSIsIE5hbWUuZ2V0KCJUeXBlMCIpKTsKICAgIGJhc2VGb250LnNldCgiRW5jb2RpbmciLCBOYW1lLmdldCgiSWRlbnRpdHktSCIpKTsKICAgIGJhc2VGb250LnNldCgiRGVzY2VuZGFudEZvbnRzIiwgW3RoaXMuZGVzY2VuZGFudEZvbnRSZWZdKTsKICAgIGJhc2VGb250LnNldCgiVG9Vbmljb2RlIiwgTmFtZS5nZXQoIklkZW50aXR5LUgiKSk7CiAgICByZXR1cm4gdGhpcy54cmVmLmdldE5ld1BlcnNpc3RlbnRSZWYoYmFzZUZvbnQpOwogIH0KICBnZXQgcmVzb3VyY2VzKCkgewogICAgY29uc3QgcmVzb3VyY2VzID0gbmV3IERpY3QodGhpcy54cmVmKTsKICAgIGNvbnN0IGZvbnQgPSBuZXcgRGljdCh0aGlzLnhyZWYpOwogICAgZm9udC5zZXQodGhpcy5mb250TmFtZS5uYW1lLCB0aGlzLmJhc2VGb250UmVmKTsKICAgIHJlc291cmNlcy5zZXQoIkZvbnQiLCBmb250KTsKICAgIHJldHVybiByZXNvdXJjZXM7CiAgfQogIF9jcmVhdGVDb250ZXh0KCkgewogICAgdGhpcy53aWR0aHMgPSBuZXcgTWFwKCk7CiAgICB0aGlzLmN0eE1lYXN1cmUuZm9udCA9IGAxMDAwcHggJHt0aGlzLmZvbnRGYW1pbHl9YDsKICAgIHJldHVybiB0aGlzLmN0eE1lYXN1cmU7CiAgfQogIGNyZWF0ZUZvbnRSZXNvdXJjZXModGV4dCkgewogICAgY29uc3QgY3R4ID0gdGhpcy5fY3JlYXRlQ29udGV4dCgpOwogICAgZm9yIChjb25zdCBsaW5lIG9mIHRleHQuc3BsaXQoL1xyXG4/fFxuLykpIHsKICAgICAgZm9yIChjb25zdCBjaGFyIG9mIGxpbmUuc3BsaXQoIiIpKSB7CiAgICAgICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKTsKICAgICAgICBpZiAodGhpcy53aWR0aHMuaGFzKGNvZGUpKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgY29uc3QgbWV0cmljcyA9IGN0eC5tZWFzdXJlVGV4dChjaGFyKTsKICAgICAgICBjb25zdCB3aWR0aCA9IE1hdGguY2VpbChtZXRyaWNzLndpZHRoKTsKICAgICAgICB0aGlzLndpZHRocy5zZXQoY29kZSwgd2lkdGgpOwogICAgICAgIHRoaXMuZmlyc3RDaGFyID0gTWF0aC5taW4oY29kZSwgdGhpcy5maXJzdENoYXIpOwogICAgICAgIHRoaXMubGFzdENoYXIgPSBNYXRoLm1heChjb2RlLCB0aGlzLmxhc3RDaGFyKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRoaXMucmVzb3VyY2VzOwogIH0KICBzdGF0aWMgZ2V0Rmlyc3RQb3NpdGlvbkluZm8ocmVjdCwgcm90YXRpb24sIGZvbnRTaXplKSB7CiAgICBjb25zdCBbeDEsIHkxLCB4MiwgeTJdID0gcmVjdDsKICAgIGxldCB3ID0geDIgLSB4MTsKICAgIGxldCBoID0geTIgLSB5MTsKICAgIGlmIChyb3RhdGlvbiAlIDE4MCAhPT0gMCkgewogICAgICBbdywgaF0gPSBbaCwgd107CiAgICB9CiAgICBjb25zdCBsaW5lSGVpZ2h0ID0gTElORV9GQUNUT1IgKiBmb250U2l6ZTsKICAgIGNvbnN0IGxpbmVEZXNjZW50ID0gTElORV9ERVNDRU5UX0ZBQ1RPUiAqIGZvbnRTaXplOwogICAgcmV0dXJuIHsKICAgICAgY29vcmRzOiBbMCwgaCArIGxpbmVEZXNjZW50IC0gbGluZUhlaWdodF0sCiAgICAgIGJib3g6IFswLCAwLCB3LCBoXSwKICAgICAgbWF0cml4OiByb3RhdGlvbiAhPT0gMCA/IGdldFJvdGF0aW9uTWF0cml4KHJvdGF0aW9uLCBoLCBsaW5lSGVpZ2h0KSA6IHVuZGVmaW5lZAogICAgfTsKICB9CiAgY3JlYXRlQXBwZWFyYW5jZSh0ZXh0LCByZWN0LCByb3RhdGlvbiwgZm9udFNpemUsIGJnQ29sb3IsIHN0cm9rZUFscGhhKSB7CiAgICBjb25zdCBjdHggPSB0aGlzLl9jcmVhdGVDb250ZXh0KCk7CiAgICBjb25zdCBsaW5lcyA9IFtdOwogICAgbGV0IG1heFdpZHRoID0gLUluZmluaXR5OwogICAgZm9yIChjb25zdCBsaW5lIG9mIHRleHQuc3BsaXQoL1xyXG4/fFxuLykpIHsKICAgICAgbGluZXMucHVzaChsaW5lKTsKICAgICAgY29uc3QgbGluZVdpZHRoID0gY3R4Lm1lYXN1cmVUZXh0KGxpbmUpLndpZHRoOwogICAgICBtYXhXaWR0aCA9IE1hdGgubWF4KG1heFdpZHRoLCBsaW5lV2lkdGgpOwogICAgICBmb3IgKGNvbnN0IGNvZGUgb2YgY29kZVBvaW50SXRlcihsaW5lKSkgewogICAgICAgIGNvbnN0IGNoYXIgPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlKTsKICAgICAgICBsZXQgd2lkdGggPSB0aGlzLndpZHRocy5nZXQoY29kZSk7CiAgICAgICAgaWYgKHdpZHRoID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgIGNvbnN0IG1ldHJpY3MgPSBjdHgubWVhc3VyZVRleHQoY2hhcik7CiAgICAgICAgICB3aWR0aCA9IE1hdGguY2VpbChtZXRyaWNzLndpZHRoKTsKICAgICAgICAgIHRoaXMud2lkdGhzLnNldChjb2RlLCB3aWR0aCk7CiAgICAgICAgICB0aGlzLmZpcnN0Q2hhciA9IE1hdGgubWluKGNvZGUsIHRoaXMuZmlyc3RDaGFyKTsKICAgICAgICAgIHRoaXMubGFzdENoYXIgPSBNYXRoLm1heChjb2RlLCB0aGlzLmxhc3RDaGFyKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIG1heFdpZHRoICo9IGZvbnRTaXplIC8gMTAwMDsKICAgIGNvbnN0IFt4MSwgeTEsIHgyLCB5Ml0gPSByZWN0OwogICAgbGV0IHcgPSB4MiAtIHgxOwogICAgbGV0IGggPSB5MiAtIHkxOwogICAgaWYgKHJvdGF0aW9uICUgMTgwICE9PSAwKSB7CiAgICAgIFt3LCBoXSA9IFtoLCB3XTsKICAgIH0KICAgIGxldCBoc2NhbGUgPSAxOwogICAgaWYgKG1heFdpZHRoID4gdykgewogICAgICBoc2NhbGUgPSB3IC8gbWF4V2lkdGg7CiAgICB9CiAgICBsZXQgdnNjYWxlID0gMTsKICAgIGNvbnN0IGxpbmVIZWlnaHQgPSBMSU5FX0ZBQ1RPUiAqIGZvbnRTaXplOwogICAgY29uc3QgbGluZURlc2NlbnQgPSBMSU5FX0RFU0NFTlRfRkFDVE9SICogZm9udFNpemU7CiAgICBjb25zdCBtYXhIZWlnaHQgPSBsaW5lSGVpZ2h0ICogbGluZXMubGVuZ3RoOwogICAgaWYgKG1heEhlaWdodCA+IGgpIHsKICAgICAgdnNjYWxlID0gaCAvIG1heEhlaWdodDsKICAgIH0KICAgIGNvbnN0IGZzY2FsZSA9IE1hdGgubWluKGhzY2FsZSwgdnNjYWxlKTsKICAgIGNvbnN0IG5ld0ZvbnRTaXplID0gZm9udFNpemUgKiBmc2NhbGU7CiAgICBjb25zdCBidWZmZXIgPSBbInEiLCBgMCAwICR7bnVtYmVyVG9TdHJpbmcodyl9ICR7bnVtYmVyVG9TdHJpbmcoaCl9IHJlIFcgbmAsIGBCVGAsIGAxIDAgMCAxIDAgJHtudW1iZXJUb1N0cmluZyhoICsgbGluZURlc2NlbnQpfSBUbSAwIFRjICR7Z2V0UGRmQ29sb3IoYmdDb2xvciwgdHJ1ZSl9YCwgYC8ke3RoaXMuZm9udE5hbWUubmFtZX0gJHtudW1iZXJUb1N0cmluZyhuZXdGb250U2l6ZSl9IFRmYF07CiAgICBjb25zdCB7CiAgICAgIHJlc291cmNlcwogICAgfSA9IHRoaXM7CiAgICBzdHJva2VBbHBoYSA9IHR5cGVvZiBzdHJva2VBbHBoYSA9PT0gIm51bWJlciIgJiYgc3Ryb2tlQWxwaGEgPj0gMCAmJiBzdHJva2VBbHBoYSA8PSAxID8gc3Ryb2tlQWxwaGEgOiAxOwogICAgaWYgKHN0cm9rZUFscGhhICE9PSAxKSB7CiAgICAgIGJ1ZmZlci5wdXNoKCIvUjAgZ3MiKTsKICAgICAgY29uc3QgZXh0R1N0YXRlID0gbmV3IERpY3QodGhpcy54cmVmKTsKICAgICAgY29uc3QgcjAgPSBuZXcgRGljdCh0aGlzLnhyZWYpOwogICAgICByMC5zZXQoImNhIiwgc3Ryb2tlQWxwaGEpOwogICAgICByMC5zZXQoIkNBIiwgc3Ryb2tlQWxwaGEpOwogICAgICByMC5zZXQoIlR5cGUiLCBOYW1lLmdldCgiRXh0R1N0YXRlIikpOwogICAgICBleHRHU3RhdGUuc2V0KCJSMCIsIHIwKTsKICAgICAgcmVzb3VyY2VzLnNldCgiRXh0R1N0YXRlIiwgZXh0R1N0YXRlKTsKICAgIH0KICAgIGNvbnN0IHZTaGlmdCA9IG51bWJlclRvU3RyaW5nKGxpbmVIZWlnaHQpOwogICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7CiAgICAgIGJ1ZmZlci5wdXNoKGAwIC0ke3ZTaGlmdH0gVGQgPCR7c3RyaW5nVG9VVEYxNkhleFN0cmluZyhsaW5lKX0+IFRqYCk7CiAgICB9CiAgICBidWZmZXIucHVzaCgiRVQiLCAiUSIpOwogICAgY29uc3QgYXBwZWFyYW5jZSA9IGJ1ZmZlci5qb2luKCJcbiIpOwogICAgY29uc3QgYXBwZWFyYW5jZVN0cmVhbURpY3QgPSBuZXcgRGljdCh0aGlzLnhyZWYpOwogICAgYXBwZWFyYW5jZVN0cmVhbURpY3Quc2V0KCJTdWJ0eXBlIiwgTmFtZS5nZXQoIkZvcm0iKSk7CiAgICBhcHBlYXJhbmNlU3RyZWFtRGljdC5zZXQoIlR5cGUiLCBOYW1lLmdldCgiWE9iamVjdCIpKTsKICAgIGFwcGVhcmFuY2VTdHJlYW1EaWN0LnNldCgiQkJveCIsIFswLCAwLCB3LCBoXSk7CiAgICBhcHBlYXJhbmNlU3RyZWFtRGljdC5zZXQoIkxlbmd0aCIsIGFwcGVhcmFuY2UubGVuZ3RoKTsKICAgIGFwcGVhcmFuY2VTdHJlYW1EaWN0LnNldCgiUmVzb3VyY2VzIiwgcmVzb3VyY2VzKTsKICAgIGlmIChyb3RhdGlvbikgewogICAgICBjb25zdCBtYXRyaXggPSBnZXRSb3RhdGlvbk1hdHJpeChyb3RhdGlvbiwgdywgaCk7CiAgICAgIGFwcGVhcmFuY2VTdHJlYW1EaWN0LnNldCgiTWF0cml4IiwgbWF0cml4KTsKICAgIH0KICAgIGNvbnN0IGFwID0gbmV3IFN0cmluZ1N0cmVhbShhcHBlYXJhbmNlKTsKICAgIGFwLmRpY3QgPSBhcHBlYXJhbmNlU3RyZWFtRGljdDsKICAgIHJldHVybiBhcDsKICB9Cn0KCjsvLyAuL3NyYy9jb3JlL25hbWVfbnVtYmVyX3RyZWUuanMKCgpjbGFzcyBOYW1lT3JOdW1iZXJUcmVlIHsKICBjb25zdHJ1Y3Rvcihyb290LCB4cmVmLCB0eXBlKSB7CiAgICB0aGlzLnJvb3QgPSByb290OwogICAgdGhpcy54cmVmID0geHJlZjsKICAgIHRoaXMuX3R5cGUgPSB0eXBlOwogIH0KICBnZXRBbGwoKSB7CiAgICBjb25zdCBtYXAgPSBuZXcgTWFwKCk7CiAgICBpZiAoIXRoaXMucm9vdCkgewogICAgICByZXR1cm4gbWFwOwogICAgfQogICAgY29uc3QgeHJlZiA9IHRoaXMueHJlZjsKICAgIGNvbnN0IHByb2Nlc3NlZCA9IG5ldyBSZWZTZXQoKTsKICAgIHByb2Nlc3NlZC5wdXQodGhpcy5yb290KTsKICAgIGNvbnN0IHF1ZXVlID0gW3RoaXMucm9vdF07CiAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkgewogICAgICBjb25zdCBvYmogPSB4cmVmLmZldGNoSWZSZWYocXVldWUuc2hpZnQoKSk7CiAgICAgIGlmICghKG9iaiBpbnN0YW5jZW9mIERpY3QpKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKG9iai5oYXMoIktpZHMiKSkgewogICAgICAgIGNvbnN0IGtpZHMgPSBvYmouZ2V0KCJLaWRzIik7CiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGtpZHMpKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgZm9yIChjb25zdCBraWQgb2Yga2lkcykgewogICAgICAgICAgaWYgKHByb2Nlc3NlZC5oYXMoa2lkKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYER1cGxpY2F0ZSBlbnRyeSBpbiAiJHt0aGlzLl90eXBlfSIgdHJlZS5gKTsKICAgICAgICAgIH0KICAgICAgICAgIHF1ZXVlLnB1c2goa2lkKTsKICAgICAgICAgIHByb2Nlc3NlZC5wdXQoa2lkKTsKICAgICAgICB9CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgY29uc3QgZW50cmllcyA9IG9iai5nZXQodGhpcy5fdHlwZSk7CiAgICAgIGlmICghQXJyYXkuaXNBcnJheShlbnRyaWVzKSkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGVudHJpZXMubGVuZ3RoOyBpIDwgaWk7IGkgKz0gMikgewogICAgICAgIG1hcC5zZXQoeHJlZi5mZXRjaElmUmVmKGVudHJpZXNbaV0pLCB4cmVmLmZldGNoSWZSZWYoZW50cmllc1tpICsgMV0pKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG1hcDsKICB9CiAgZ2V0UmF3KGtleSkgewogICAgaWYgKCF0aGlzLnJvb3QpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb25zdCB4cmVmID0gdGhpcy54cmVmOwogICAgbGV0IGtpZHNPckVudHJpZXMgPSB4cmVmLmZldGNoSWZSZWYodGhpcy5yb290KTsKICAgIGxldCBsb29wQ291bnQgPSAwOwogICAgY29uc3QgTUFYX0xFVkVMUyA9IDEwOwogICAgd2hpbGUgKGtpZHNPckVudHJpZXMuaGFzKCJLaWRzIikpIHsKICAgICAgaWYgKCsrbG9vcENvdW50ID4gTUFYX0xFVkVMUykgewogICAgICAgIHdhcm4oYFNlYXJjaCBkZXB0aCBsaW1pdCByZWFjaGVkIGZvciAiJHt0aGlzLl90eXBlfSIgdHJlZS5gKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBjb25zdCBraWRzID0ga2lkc09yRW50cmllcy5nZXQoIktpZHMiKTsKICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGtpZHMpKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgbGV0IGwgPSAwLAogICAgICAgIHIgPSBraWRzLmxlbmd0aCAtIDE7CiAgICAgIHdoaWxlIChsIDw9IHIpIHsKICAgICAgICBjb25zdCBtID0gbCArIHIgPj4gMTsKICAgICAgICBjb25zdCBraWQgPSB4cmVmLmZldGNoSWZSZWYoa2lkc1ttXSk7CiAgICAgICAgY29uc3QgbGltaXRzID0ga2lkLmdldCgiTGltaXRzIik7CiAgICAgICAgaWYgKGtleSA8IHhyZWYuZmV0Y2hJZlJlZihsaW1pdHNbMF0pKSB7CiAgICAgICAgICByID0gbSAtIDE7CiAgICAgICAgfSBlbHNlIGlmIChrZXkgPiB4cmVmLmZldGNoSWZSZWYobGltaXRzWzFdKSkgewogICAgICAgICAgbCA9IG0gKyAxOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBraWRzT3JFbnRyaWVzID0ga2lkOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChsID4gcikgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgICBjb25zdCBlbnRyaWVzID0ga2lkc09yRW50cmllcy5nZXQodGhpcy5fdHlwZSk7CiAgICBpZiAoQXJyYXkuaXNBcnJheShlbnRyaWVzKSkgewogICAgICBsZXQgbCA9IDAsCiAgICAgICAgciA9IGVudHJpZXMubGVuZ3RoIC0gMjsKICAgICAgd2hpbGUgKGwgPD0gcikgewogICAgICAgIGNvbnN0IHRtcCA9IGwgKyByID4+IDEsCiAgICAgICAgICBtID0gdG1wICsgKHRtcCAmIDEpOwogICAgICAgIGNvbnN0IGN1cnJlbnRLZXkgPSB4cmVmLmZldGNoSWZSZWYoZW50cmllc1ttXSk7CiAgICAgICAgaWYgKGtleSA8IGN1cnJlbnRLZXkpIHsKICAgICAgICAgIHIgPSBtIC0gMjsKICAgICAgICB9IGVsc2UgaWYgKGtleSA+IGN1cnJlbnRLZXkpIHsKICAgICAgICAgIGwgPSBtICsgMjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGVudHJpZXNbbSArIDFdOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIGdldChrZXkpIHsKICAgIHJldHVybiB0aGlzLnhyZWYuZmV0Y2hJZlJlZih0aGlzLmdldFJhdyhrZXkpKTsKICB9Cn0KY2xhc3MgTmFtZVRyZWUgZXh0ZW5kcyBOYW1lT3JOdW1iZXJUcmVlIHsKICBjb25zdHJ1Y3Rvcihyb290LCB4cmVmKSB7CiAgICBzdXBlcihyb290LCB4cmVmLCAiTmFtZXMiKTsKICB9Cn0KY2xhc3MgTnVtYmVyVHJlZSBleHRlbmRzIE5hbWVPck51bWJlclRyZWUgewogIGNvbnN0cnVjdG9yKHJvb3QsIHhyZWYpIHsKICAgIHN1cGVyKHJvb3QsIHhyZWYsICJOdW1zIik7CiAgfQp9Cgo7Ly8gLi9zcmMvY29yZS9jbGVhbnVwX2hlbHBlci5qcwoKCgoKZnVuY3Rpb24gY2xlYXJHbG9iYWxDYWNoZXMoKSB7CiAgY2xlYXJQYXR0ZXJuQ2FjaGVzKCk7CiAgY2xlYXJQcmltaXRpdmVDYWNoZXMoKTsKICBjbGVhclVuaWNvZGVDYWNoZXMoKTsKICBKcHhJbWFnZS5jbGVhbnVwKCk7Cn0KCjsvLyAuL3NyYy9jb3JlL2ZpbGVfc3BlYy5qcwoKCgpmdW5jdGlvbiBwaWNrUGxhdGZvcm1JdGVtKGRpY3QpIHsKICBpZiAoIShkaWN0IGluc3RhbmNlb2YgRGljdCkpIHsKICAgIHJldHVybiBudWxsOwogIH0KICBpZiAoZGljdC5oYXMoIlVGIikpIHsKICAgIHJldHVybiBkaWN0LmdldCgiVUYiKTsKICB9IGVsc2UgaWYgKGRpY3QuaGFzKCJGIikpIHsKICAgIHJldHVybiBkaWN0LmdldCgiRiIpOwogIH0gZWxzZSBpZiAoZGljdC5oYXMoIlVuaXgiKSkgewogICAgcmV0dXJuIGRpY3QuZ2V0KCJVbml4Iik7CiAgfSBlbHNlIGlmIChkaWN0LmhhcygiTWFjIikpIHsKICAgIHJldHVybiBkaWN0LmdldCgiTWFjIik7CiAgfSBlbHNlIGlmIChkaWN0LmhhcygiRE9TIikpIHsKICAgIHJldHVybiBkaWN0LmdldCgiRE9TIik7CiAgfQogIHJldHVybiBudWxsOwp9CmZ1bmN0aW9uIHN0cmlwUGF0aChzdHIpIHsKICByZXR1cm4gc3RyLnN1YnN0cmluZyhzdHIubGFzdEluZGV4T2YoIi8iKSArIDEpOwp9CmNsYXNzIEZpbGVTcGVjIHsKICAjY29udGVudEF2YWlsYWJsZSA9IGZhbHNlOwogIGNvbnN0cnVjdG9yKHJvb3QsIHhyZWYsIHNraXBDb250ZW50ID0gZmFsc2UpIHsKICAgIGlmICghKHJvb3QgaW5zdGFuY2VvZiBEaWN0KSkgewogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLnhyZWYgPSB4cmVmOwogICAgdGhpcy5yb290ID0gcm9vdDsKICAgIGlmIChyb290LmhhcygiRlMiKSkgewogICAgICB0aGlzLmZzID0gcm9vdC5nZXQoIkZTIik7CiAgICB9CiAgICBpZiAocm9vdC5oYXMoIlJGIikpIHsKICAgICAgd2FybigiUmVsYXRlZCBmaWxlIHNwZWNpZmljYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIik7CiAgICB9CiAgICBpZiAoIXNraXBDb250ZW50KSB7CiAgICAgIGlmIChyb290LmhhcygiRUYiKSkgewogICAgICAgIHRoaXMuI2NvbnRlbnRBdmFpbGFibGUgPSB0cnVlOwogICAgICB9IGVsc2UgewogICAgICAgIHdhcm4oIk5vbi1lbWJlZGRlZCBmaWxlIHNwZWNpZmljYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIik7CiAgICAgIH0KICAgIH0KICB9CiAgZ2V0IGZpbGVuYW1lKCkgewogICAgbGV0IGZpbGVuYW1lID0gIiI7CiAgICBjb25zdCBpdGVtID0gcGlja1BsYXRmb3JtSXRlbSh0aGlzLnJvb3QpOwogICAgaWYgKGl0ZW0gJiYgdHlwZW9mIGl0ZW0gPT09ICJzdHJpbmciKSB7CiAgICAgIGZpbGVuYW1lID0gc3RyaW5nVG9QREZTdHJpbmcoaXRlbSkucmVwbGFjZUFsbCgiXFxcXCIsICJcXCIpLnJlcGxhY2VBbGwoIlxcLyIsICIvIikucmVwbGFjZUFsbCgiXFwiLCAiLyIpOwogICAgfQogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAiZmlsZW5hbWUiLCBmaWxlbmFtZSB8fCAidW5uYW1lZCIpOwogIH0KICBnZXQgY29udGVudCgpIHsKICAgIGlmICghdGhpcy4jY29udGVudEF2YWlsYWJsZSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHRoaXMuX2NvbnRlbnRSZWYgfHw9IHBpY2tQbGF0Zm9ybUl0ZW0odGhpcy5yb290Py5nZXQoIkVGIikpOwogICAgbGV0IGNvbnRlbnQgPSBudWxsOwogICAgaWYgKHRoaXMuX2NvbnRlbnRSZWYpIHsKICAgICAgY29uc3QgZmlsZU9iaiA9IHRoaXMueHJlZi5mZXRjaElmUmVmKHRoaXMuX2NvbnRlbnRSZWYpOwogICAgICBpZiAoZmlsZU9iaiBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pIHsKICAgICAgICBjb250ZW50ID0gZmlsZU9iai5nZXRCeXRlcygpOwogICAgICB9IGVsc2UgewogICAgICAgIHdhcm4oIkVtYmVkZGVkIGZpbGUgc3BlY2lmaWNhdGlvbiBwb2ludHMgdG8gbm9uLWV4aXN0aW5nL2ludmFsaWQgY29udGVudCIpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB3YXJuKCJFbWJlZGRlZCBmaWxlIHNwZWNpZmljYXRpb24gZG9lcyBub3QgaGF2ZSBhbnkgY29udGVudCIpOwogICAgfQogICAgcmV0dXJuIGNvbnRlbnQ7CiAgfQogIGdldCBkZXNjcmlwdGlvbigpIHsKICAgIGxldCBkZXNjcmlwdGlvbiA9ICIiOwogICAgY29uc3QgZGVzYyA9IHRoaXMucm9vdD8uZ2V0KCJEZXNjIik7CiAgICBpZiAoZGVzYyAmJiB0eXBlb2YgZGVzYyA9PT0gInN0cmluZyIpIHsKICAgICAgZGVzY3JpcHRpb24gPSBzdHJpbmdUb1BERlN0cmluZyhkZXNjKTsKICAgIH0KICAgIHJldHVybiBzaGFkb3codGhpcywgImRlc2NyaXB0aW9uIiwgZGVzY3JpcHRpb24pOwogIH0KICBnZXQgc2VyaWFsaXphYmxlKCkgewogICAgcmV0dXJuIHsKICAgICAgcmF3RmlsZW5hbWU6IHRoaXMuZmlsZW5hbWUsCiAgICAgIGZpbGVuYW1lOiBzdHJpcFBhdGgodGhpcy5maWxlbmFtZSksCiAgICAgIGNvbnRlbnQ6IHRoaXMuY29udGVudCwKICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24KICAgIH07CiAgfQp9Cgo7Ly8gLi9zcmMvY29yZS94bWxfcGFyc2VyLmpzCgpjb25zdCBYTUxQYXJzZXJFcnJvckNvZGUgPSB7CiAgTm9FcnJvcjogMCwKICBFbmRPZkRvY3VtZW50OiAtMSwKICBVbnRlcm1pbmF0ZWRDZGF0OiAtMiwKICBVbnRlcm1pbmF0ZWRYbWxEZWNsYXJhdGlvbjogLTMsCiAgVW50ZXJtaW5hdGVkRG9jdHlwZURlY2xhcmF0aW9uOiAtNCwKICBVbnRlcm1pbmF0ZWRDb21tZW50OiAtNSwKICBNYWxmb3JtZWRFbGVtZW50OiAtNiwKICBPdXRPZk1lbW9yeTogLTcsCiAgVW50ZXJtaW5hdGVkQXR0cmlidXRlVmFsdWU6IC04LAogIFVudGVybWluYXRlZEVsZW1lbnQ6IC05LAogIEVsZW1lbnROZXZlckJlZ3VuOiAtMTAKfTsKZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKHMsIGluZGV4KSB7CiAgY29uc3QgY2ggPSBzW2luZGV4XTsKICByZXR1cm4gY2ggPT09ICIgIiB8fCBjaCA9PT0gIlxuIiB8fCBjaCA9PT0gIlxyIiB8fCBjaCA9PT0gIlx0IjsKfQpmdW5jdGlvbiBpc1doaXRlc3BhY2VTdHJpbmcocykgewogIGZvciAobGV0IGkgPSAwLCBpaSA9IHMubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgaWYgKCFpc1doaXRlc3BhY2UocywgaSkpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KICByZXR1cm4gdHJ1ZTsKfQpjbGFzcyBYTUxQYXJzZXJCYXNlIHsKICBfcmVzb2x2ZUVudGl0aWVzKHMpIHsKICAgIHJldHVybiBzLnJlcGxhY2VBbGwoLyYoW147XSspOy9nLCAoYWxsLCBlbnRpdHkpID0+IHsKICAgICAgaWYgKGVudGl0eS5zdWJzdHJpbmcoMCwgMikgPT09ICIjeCIpIHsKICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQocGFyc2VJbnQoZW50aXR5LnN1YnN0cmluZygyKSwgMTYpKTsKICAgICAgfSBlbHNlIGlmIChlbnRpdHkuc3Vic3RyaW5nKDAsIDEpID09PSAiIyIpIHsKICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQocGFyc2VJbnQoZW50aXR5LnN1YnN0cmluZygxKSwgMTApKTsKICAgICAgfQogICAgICBzd2l0Y2ggKGVudGl0eSkgewogICAgICAgIGNhc2UgImx0IjoKICAgICAgICAgIHJldHVybiAiPCI7CiAgICAgICAgY2FzZSAiZ3QiOgogICAgICAgICAgcmV0dXJuICI+IjsKICAgICAgICBjYXNlICJhbXAiOgogICAgICAgICAgcmV0dXJuICImIjsKICAgICAgICBjYXNlICJxdW90IjoKICAgICAgICAgIHJldHVybiAnIic7CiAgICAgICAgY2FzZSAiYXBvcyI6CiAgICAgICAgICByZXR1cm4gIiciOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLm9uUmVzb2x2ZUVudGl0eShlbnRpdHkpOwogICAgfSk7CiAgfQogIF9wYXJzZUNvbnRlbnQocywgc3RhcnQpIHsKICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBbXTsKICAgIGxldCBwb3MgPSBzdGFydDsKICAgIGZ1bmN0aW9uIHNraXBXcygpIHsKICAgICAgd2hpbGUgKHBvcyA8IHMubGVuZ3RoICYmIGlzV2hpdGVzcGFjZShzLCBwb3MpKSB7CiAgICAgICAgKytwb3M7CiAgICAgIH0KICAgIH0KICAgIHdoaWxlIChwb3MgPCBzLmxlbmd0aCAmJiAhaXNXaGl0ZXNwYWNlKHMsIHBvcykgJiYgc1twb3NdICE9PSAiPiIgJiYgc1twb3NdICE9PSAiLyIpIHsKICAgICAgKytwb3M7CiAgICB9CiAgICBjb25zdCBuYW1lID0gcy5zdWJzdHJpbmcoc3RhcnQsIHBvcyk7CiAgICBza2lwV3MoKTsKICAgIHdoaWxlIChwb3MgPCBzLmxlbmd0aCAmJiBzW3Bvc10gIT09ICI+IiAmJiBzW3Bvc10gIT09ICIvIiAmJiBzW3Bvc10gIT09ICI/IikgewogICAgICBza2lwV3MoKTsKICAgICAgbGV0IGF0dHJOYW1lID0gIiIsCiAgICAgICAgYXR0clZhbHVlID0gIiI7CiAgICAgIHdoaWxlIChwb3MgPCBzLmxlbmd0aCAmJiAhaXNXaGl0ZXNwYWNlKHMsIHBvcykgJiYgc1twb3NdICE9PSAiPSIpIHsKICAgICAgICBhdHRyTmFtZSArPSBzW3Bvc107CiAgICAgICAgKytwb3M7CiAgICAgIH0KICAgICAgc2tpcFdzKCk7CiAgICAgIGlmIChzW3Bvc10gIT09ICI9IikgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgICsrcG9zOwogICAgICBza2lwV3MoKTsKICAgICAgY29uc3QgYXR0ckVuZENoYXIgPSBzW3Bvc107CiAgICAgIGlmIChhdHRyRW5kQ2hhciAhPT0gJyInICYmIGF0dHJFbmRDaGFyICE9PSAiJyIpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBjb25zdCBhdHRyRW5kSW5kZXggPSBzLmluZGV4T2YoYXR0ckVuZENoYXIsICsrcG9zKTsKICAgICAgaWYgKGF0dHJFbmRJbmRleCA8IDApIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBhdHRyVmFsdWUgPSBzLnN1YnN0cmluZyhwb3MsIGF0dHJFbmRJbmRleCk7CiAgICAgIGF0dHJpYnV0ZXMucHVzaCh7CiAgICAgICAgbmFtZTogYXR0ck5hbWUsCiAgICAgICAgdmFsdWU6IHRoaXMuX3Jlc29sdmVFbnRpdGllcyhhdHRyVmFsdWUpCiAgICAgIH0pOwogICAgICBwb3MgPSBhdHRyRW5kSW5kZXggKyAxOwogICAgICBza2lwV3MoKTsKICAgIH0KICAgIHJldHVybiB7CiAgICAgIG5hbWUsCiAgICAgIGF0dHJpYnV0ZXMsCiAgICAgIHBhcnNlZDogcG9zIC0gc3RhcnQKICAgIH07CiAgfQogIF9wYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbihzLCBzdGFydCkgewogICAgbGV0IHBvcyA9IHN0YXJ0OwogICAgZnVuY3Rpb24gc2tpcFdzKCkgewogICAgICB3aGlsZSAocG9zIDwgcy5sZW5ndGggJiYgaXNXaGl0ZXNwYWNlKHMsIHBvcykpIHsKICAgICAgICArK3BvczsKICAgICAgfQogICAgfQogICAgd2hpbGUgKHBvcyA8IHMubGVuZ3RoICYmICFpc1doaXRlc3BhY2UocywgcG9zKSAmJiBzW3Bvc10gIT09ICI+IiAmJiBzW3Bvc10gIT09ICI/IiAmJiBzW3Bvc10gIT09ICIvIikgewogICAgICArK3BvczsKICAgIH0KICAgIGNvbnN0IG5hbWUgPSBzLnN1YnN0cmluZyhzdGFydCwgcG9zKTsKICAgIHNraXBXcygpOwogICAgY29uc3QgYXR0clN0YXJ0ID0gcG9zOwogICAgd2hpbGUgKHBvcyA8IHMubGVuZ3RoICYmIChzW3Bvc10gIT09ICI/IiB8fCBzW3BvcyArIDFdICE9PSAiPiIpKSB7CiAgICAgICsrcG9zOwogICAgfQogICAgY29uc3QgdmFsdWUgPSBzLnN1YnN0cmluZyhhdHRyU3RhcnQsIHBvcyk7CiAgICByZXR1cm4gewogICAgICBuYW1lLAogICAgICB2YWx1ZSwKICAgICAgcGFyc2VkOiBwb3MgLSBzdGFydAogICAgfTsKICB9CiAgcGFyc2VYbWwocykgewogICAgbGV0IGkgPSAwOwogICAgd2hpbGUgKGkgPCBzLmxlbmd0aCkgewogICAgICBjb25zdCBjaCA9IHNbaV07CiAgICAgIGxldCBqID0gaTsKICAgICAgaWYgKGNoID09PSAiPCIpIHsKICAgICAgICArK2o7CiAgICAgICAgY29uc3QgY2gyID0gc1tqXTsKICAgICAgICBsZXQgcTsKICAgICAgICBzd2l0Y2ggKGNoMikgewogICAgICAgICAgY2FzZSAiLyI6CiAgICAgICAgICAgICsrajsKICAgICAgICAgICAgcSA9IHMuaW5kZXhPZigiPiIsIGopOwogICAgICAgICAgICBpZiAocSA8IDApIHsKICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IoWE1MUGFyc2VyRXJyb3JDb2RlLlVudGVybWluYXRlZEVsZW1lbnQpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm9uRW5kRWxlbWVudChzLnN1YnN0cmluZyhqLCBxKSk7CiAgICAgICAgICAgIGogPSBxICsgMTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICI/IjoKICAgICAgICAgICAgKytqOwogICAgICAgICAgICBjb25zdCBwaSA9IHRoaXMuX3BhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uKHMsIGopOwogICAgICAgICAgICBpZiAocy5zdWJzdHJpbmcoaiArIHBpLnBhcnNlZCwgaiArIHBpLnBhcnNlZCArIDIpICE9PSAiPz4iKSB7CiAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKFhNTFBhcnNlckVycm9yQ29kZS5VbnRlcm1pbmF0ZWRYbWxEZWNsYXJhdGlvbik7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMub25QaShwaS5uYW1lLCBwaS52YWx1ZSk7CiAgICAgICAgICAgIGogKz0gcGkucGFyc2VkICsgMjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICIhIjoKICAgICAgICAgICAgaWYgKHMuc3Vic3RyaW5nKGogKyAxLCBqICsgMykgPT09ICItLSIpIHsKICAgICAgICAgICAgICBxID0gcy5pbmRleE9mKCItLT4iLCBqICsgMyk7CiAgICAgICAgICAgICAgaWYgKHEgPCAwKSB7CiAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IoWE1MUGFyc2VyRXJyb3JDb2RlLlVudGVybWluYXRlZENvbW1lbnQpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB0aGlzLm9uQ29tbWVudChzLnN1YnN0cmluZyhqICsgMywgcSkpOwogICAgICAgICAgICAgIGogPSBxICsgMzsKICAgICAgICAgICAgfSBlbHNlIGlmIChzLnN1YnN0cmluZyhqICsgMSwgaiArIDgpID09PSAiW0NEQVRBWyIpIHsKICAgICAgICAgICAgICBxID0gcy5pbmRleE9mKCJdXT4iLCBqICsgOCk7CiAgICAgICAgICAgICAgaWYgKHEgPCAwKSB7CiAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IoWE1MUGFyc2VyRXJyb3JDb2RlLlVudGVybWluYXRlZENkYXQpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB0aGlzLm9uQ2RhdGEocy5zdWJzdHJpbmcoaiArIDgsIHEpKTsKICAgICAgICAgICAgICBqID0gcSArIDM7CiAgICAgICAgICAgIH0gZWxzZSBpZiAocy5zdWJzdHJpbmcoaiArIDEsIGogKyA4KSA9PT0gIkRPQ1RZUEUiKSB7CiAgICAgICAgICAgICAgY29uc3QgcTIgPSBzLmluZGV4T2YoIlsiLCBqICsgOCk7CiAgICAgICAgICAgICAgbGV0IGNvbXBsZXhEb2N0eXBlID0gZmFsc2U7CiAgICAgICAgICAgICAgcSA9IHMuaW5kZXhPZigiPiIsIGogKyA4KTsKICAgICAgICAgICAgICBpZiAocSA8IDApIHsKICAgICAgICAgICAgICAgIHRoaXMub25FcnJvcihYTUxQYXJzZXJFcnJvckNvZGUuVW50ZXJtaW5hdGVkRG9jdHlwZURlY2xhcmF0aW9uKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHEyID4gMCAmJiBxID4gcTIpIHsKICAgICAgICAgICAgICAgIHEgPSBzLmluZGV4T2YoIl0+IiwgaiArIDgpOwogICAgICAgICAgICAgICAgaWYgKHEgPCAwKSB7CiAgICAgICAgICAgICAgICAgIHRoaXMub25FcnJvcihYTUxQYXJzZXJFcnJvckNvZGUuVW50ZXJtaW5hdGVkRG9jdHlwZURlY2xhcmF0aW9uKTsKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY29tcGxleERvY3R5cGUgPSB0cnVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBjb25zdCBkb2N0eXBlQ29udGVudCA9IHMuc3Vic3RyaW5nKGogKyA4LCBxICsgKGNvbXBsZXhEb2N0eXBlID8gMSA6IDApKTsKICAgICAgICAgICAgICB0aGlzLm9uRG9jdHlwZShkb2N0eXBlQ29udGVudCk7CiAgICAgICAgICAgICAgaiA9IHEgKyAoY29tcGxleERvY3R5cGUgPyAyIDogMSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKFhNTFBhcnNlckVycm9yQ29kZS5NYWxmb3JtZWRFbGVtZW50KTsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5fcGFyc2VDb250ZW50KHMsIGopOwogICAgICAgICAgICBpZiAoY29udGVudCA9PT0gbnVsbCkgewogICAgICAgICAgICAgIHRoaXMub25FcnJvcihYTUxQYXJzZXJFcnJvckNvZGUuTWFsZm9ybWVkRWxlbWVudCk7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxldCBpc0Nsb3NlZCA9IGZhbHNlOwogICAgICAgICAgICBpZiAocy5zdWJzdHJpbmcoaiArIGNvbnRlbnQucGFyc2VkLCBqICsgY29udGVudC5wYXJzZWQgKyAyKSA9PT0gIi8+IikgewogICAgICAgICAgICAgIGlzQ2xvc2VkID0gdHJ1ZTsKICAgICAgICAgICAgfSBlbHNlIGlmIChzLnN1YnN0cmluZyhqICsgY29udGVudC5wYXJzZWQsIGogKyBjb250ZW50LnBhcnNlZCArIDEpICE9PSAiPiIpIHsKICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IoWE1MUGFyc2VyRXJyb3JDb2RlLlVudGVybWluYXRlZEVsZW1lbnQpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm9uQmVnaW5FbGVtZW50KGNvbnRlbnQubmFtZSwgY29udGVudC5hdHRyaWJ1dGVzLCBpc0Nsb3NlZCk7CiAgICAgICAgICAgIGogKz0gY29udGVudC5wYXJzZWQgKyAoaXNDbG9zZWQgPyAyIDogMSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB3aGlsZSAoaiA8IHMubGVuZ3RoICYmIHNbal0gIT09ICI8IikgewogICAgICAgICAgaisrOwogICAgICAgIH0KICAgICAgICBjb25zdCB0ZXh0ID0gcy5zdWJzdHJpbmcoaSwgaik7CiAgICAgICAgdGhpcy5vblRleHQodGhpcy5fcmVzb2x2ZUVudGl0aWVzKHRleHQpKTsKICAgICAgfQogICAgICBpID0gajsKICAgIH0KICB9CiAgb25SZXNvbHZlRW50aXR5KG5hbWUpIHsKICAgIHJldHVybiBgJiR7bmFtZX07YDsKICB9CiAgb25QaShuYW1lLCB2YWx1ZSkge30KICBvbkNvbW1lbnQodGV4dCkge30KICBvbkNkYXRhKHRleHQpIHt9CiAgb25Eb2N0eXBlKGRvY3R5cGVDb250ZW50KSB7fQogIG9uVGV4dCh0ZXh0KSB7fQogIG9uQmVnaW5FbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMsIGlzRW1wdHkpIHt9CiAgb25FbmRFbGVtZW50KG5hbWUpIHt9CiAgb25FcnJvcihjb2RlKSB7fQp9CmNsYXNzIFNpbXBsZURPTU5vZGUgewogIGNvbnN0cnVjdG9yKG5vZGVOYW1lLCBub2RlVmFsdWUpIHsKICAgIHRoaXMubm9kZU5hbWUgPSBub2RlTmFtZTsKICAgIHRoaXMubm9kZVZhbHVlID0gbm9kZVZhbHVlOwogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJwYXJlbnROb2RlIiwgewogICAgICB2YWx1ZTogbnVsbCwKICAgICAgd3JpdGFibGU6IHRydWUKICAgIH0pOwogIH0KICBnZXQgZmlyc3RDaGlsZCgpIHsKICAgIHJldHVybiB0aGlzLmNoaWxkTm9kZXM/LlswXTsKICB9CiAgZ2V0IG5leHRTaWJsaW5nKCkgewogICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMucGFyZW50Tm9kZS5jaGlsZE5vZGVzOwogICAgaWYgKCFjaGlsZE5vZGVzKSB7CiAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAgICB9CiAgICBjb25zdCBpbmRleCA9IGNoaWxkTm9kZXMuaW5kZXhPZih0aGlzKTsKICAgIGlmIChpbmRleCA9PT0gLTEpIHsKICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgIH0KICAgIHJldHVybiBjaGlsZE5vZGVzW2luZGV4ICsgMV07CiAgfQogIGdldCB0ZXh0Q29udGVudCgpIHsKICAgIGlmICghdGhpcy5jaGlsZE5vZGVzKSB7CiAgICAgIHJldHVybiB0aGlzLm5vZGVWYWx1ZSB8fCAiIjsKICAgIH0KICAgIHJldHVybiB0aGlzLmNoaWxkTm9kZXMubWFwKGNoaWxkID0+IGNoaWxkLnRleHRDb250ZW50KS5qb2luKCIiKTsKICB9CiAgZ2V0IGNoaWxkcmVuKCkgewogICAgcmV0dXJuIHRoaXMuY2hpbGROb2RlcyB8fCBbXTsKICB9CiAgaGFzQ2hpbGROb2RlcygpIHsKICAgIHJldHVybiB0aGlzLmNoaWxkTm9kZXM/Lmxlbmd0aCA+IDA7CiAgfQogIHNlYXJjaE5vZGUocGF0aHMsIHBvcykgewogICAgaWYgKHBvcyA+PSBwYXRocy5sZW5ndGgpIHsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICBjb25zdCBjb21wb25lbnQgPSBwYXRoc1twb3NdOwogICAgaWYgKGNvbXBvbmVudC5uYW1lLnN0YXJ0c1dpdGgoIiMiKSAmJiBwb3MgPCBwYXRocy5sZW5ndGggLSAxKSB7CiAgICAgIHJldHVybiB0aGlzLnNlYXJjaE5vZGUocGF0aHMsIHBvcyArIDEpOwogICAgfQogICAgY29uc3Qgc3RhY2sgPSBbXTsKICAgIGxldCBub2RlID0gdGhpczsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIGlmIChjb21wb25lbnQubmFtZSA9PT0gbm9kZS5ub2RlTmFtZSkgewogICAgICAgIGlmIChjb21wb25lbnQucG9zID09PSAwKSB7CiAgICAgICAgICBjb25zdCByZXMgPSBub2RlLnNlYXJjaE5vZGUocGF0aHMsIHBvcyArIDEpOwogICAgICAgICAgaWYgKHJlcyAhPT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gcmVzOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoc3RhY2subGVuZ3RoID09PSAwKSB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3QgW3BhcmVudF0gPSBzdGFjay5wb3AoKTsKICAgICAgICAgIGxldCBzaWJsaW5nUG9zID0gMDsKICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgcGFyZW50LmNoaWxkTm9kZXMpIHsKICAgICAgICAgICAgaWYgKGNvbXBvbmVudC5uYW1lID09PSBjaGlsZC5ub2RlTmFtZSkgewogICAgICAgICAgICAgIGlmIChzaWJsaW5nUG9zID09PSBjb21wb25lbnQucG9zKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQuc2VhcmNoTm9kZShwYXRocywgcG9zICsgMSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHNpYmxpbmdQb3MrKzsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIG5vZGUuc2VhcmNoTm9kZShwYXRocywgcG9zICsgMSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChub2RlLmNoaWxkTm9kZXM/Lmxlbmd0aCA+IDApIHsKICAgICAgICBzdGFjay5wdXNoKFtub2RlLCAwXSk7CiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGROb2Rlc1swXTsKICAgICAgfSBlbHNlIGlmIChzdGFjay5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfSBlbHNlIHsKICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoICE9PSAwKSB7CiAgICAgICAgICBjb25zdCBbcGFyZW50LCBjdXJyZW50UG9zXSA9IHN0YWNrLnBvcCgpOwogICAgICAgICAgY29uc3QgbmV3UG9zID0gY3VycmVudFBvcyArIDE7CiAgICAgICAgICBpZiAobmV3UG9zIDwgcGFyZW50LmNoaWxkTm9kZXMubGVuZ3RoKSB7CiAgICAgICAgICAgIHN0YWNrLnB1c2goW3BhcmVudCwgbmV3UG9zXSk7CiAgICAgICAgICAgIG5vZGUgPSBwYXJlbnQuY2hpbGROb2Rlc1tuZXdQb3NdOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIGR1bXAoYnVmZmVyKSB7CiAgICBpZiAodGhpcy5ub2RlTmFtZSA9PT0gIiN0ZXh0IikgewogICAgICBidWZmZXIucHVzaChlbmNvZGVUb1htbFN0cmluZyh0aGlzLm5vZGVWYWx1ZSkpOwogICAgICByZXR1cm47CiAgICB9CiAgICBidWZmZXIucHVzaChgPCR7dGhpcy5ub2RlTmFtZX1gKTsKICAgIGlmICh0aGlzLmF0dHJpYnV0ZXMpIHsKICAgICAgZm9yIChjb25zdCBhdHRyaWJ1dGUgb2YgdGhpcy5hdHRyaWJ1dGVzKSB7CiAgICAgICAgYnVmZmVyLnB1c2goYCAke2F0dHJpYnV0ZS5uYW1lfT0iJHtlbmNvZGVUb1htbFN0cmluZyhhdHRyaWJ1dGUudmFsdWUpfSJgKTsKICAgICAgfQogICAgfQogICAgaWYgKHRoaXMuaGFzQ2hpbGROb2RlcygpKSB7CiAgICAgIGJ1ZmZlci5wdXNoKCI+Iik7CiAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5jaGlsZE5vZGVzKSB7CiAgICAgICAgY2hpbGQuZHVtcChidWZmZXIpOwogICAgICB9CiAgICAgIGJ1ZmZlci5wdXNoKGA8LyR7dGhpcy5ub2RlTmFtZX0+YCk7CiAgICB9IGVsc2UgaWYgKHRoaXMubm9kZVZhbHVlKSB7CiAgICAgIGJ1ZmZlci5wdXNoKGA+JHtlbmNvZGVUb1htbFN0cmluZyh0aGlzLm5vZGVWYWx1ZSl9PC8ke3RoaXMubm9kZU5hbWV9PmApOwogICAgfSBlbHNlIHsKICAgICAgYnVmZmVyLnB1c2goIi8+Iik7CiAgICB9CiAgfQp9CmNsYXNzIFNpbXBsZVhNTFBhcnNlciBleHRlbmRzIFhNTFBhcnNlckJhc2UgewogIGNvbnN0cnVjdG9yKHsKICAgIGhhc0F0dHJpYnV0ZXMgPSBmYWxzZSwKICAgIGxvd2VyQ2FzZU5hbWUgPSBmYWxzZQogIH0pIHsKICAgIHN1cGVyKCk7CiAgICB0aGlzLl9jdXJyZW50RnJhZ21lbnQgPSBudWxsOwogICAgdGhpcy5fc3RhY2sgPSBudWxsOwogICAgdGhpcy5fZXJyb3JDb2RlID0gWE1MUGFyc2VyRXJyb3JDb2RlLk5vRXJyb3I7CiAgICB0aGlzLl9oYXNBdHRyaWJ1dGVzID0gaGFzQXR0cmlidXRlczsKICAgIHRoaXMuX2xvd2VyQ2FzZU5hbWUgPSBsb3dlckNhc2VOYW1lOwogIH0KICBwYXJzZUZyb21TdHJpbmcoZGF0YSkgewogICAgdGhpcy5fY3VycmVudEZyYWdtZW50ID0gW107CiAgICB0aGlzLl9zdGFjayA9IFtdOwogICAgdGhpcy5fZXJyb3JDb2RlID0gWE1MUGFyc2VyRXJyb3JDb2RlLk5vRXJyb3I7CiAgICB0aGlzLnBhcnNlWG1sKGRhdGEpOwogICAgaWYgKHRoaXMuX2Vycm9yQ29kZSAhPT0gWE1MUGFyc2VyRXJyb3JDb2RlLk5vRXJyb3IpIHsKICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgIH0KICAgIGNvbnN0IFtkb2N1bWVudEVsZW1lbnRdID0gdGhpcy5fY3VycmVudEZyYWdtZW50OwogICAgaWYgKCFkb2N1bWVudEVsZW1lbnQpIHsKICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgIH0KICAgIHJldHVybiB7CiAgICAgIGRvY3VtZW50RWxlbWVudAogICAgfTsKICB9CiAgb25UZXh0KHRleHQpIHsKICAgIGlmIChpc1doaXRlc3BhY2VTdHJpbmcodGV4dCkpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3Qgbm9kZSA9IG5ldyBTaW1wbGVET01Ob2RlKCIjdGV4dCIsIHRleHQpOwogICAgdGhpcy5fY3VycmVudEZyYWdtZW50LnB1c2gobm9kZSk7CiAgfQogIG9uQ2RhdGEodGV4dCkgewogICAgY29uc3Qgbm9kZSA9IG5ldyBTaW1wbGVET01Ob2RlKCIjdGV4dCIsIHRleHQpOwogICAgdGhpcy5fY3VycmVudEZyYWdtZW50LnB1c2gobm9kZSk7CiAgfQogIG9uQmVnaW5FbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMsIGlzRW1wdHkpIHsKICAgIGlmICh0aGlzLl9sb3dlckNhc2VOYW1lKSB7CiAgICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7CiAgICB9CiAgICBjb25zdCBub2RlID0gbmV3IFNpbXBsZURPTU5vZGUobmFtZSk7CiAgICBub2RlLmNoaWxkTm9kZXMgPSBbXTsKICAgIGlmICh0aGlzLl9oYXNBdHRyaWJ1dGVzKSB7CiAgICAgIG5vZGUuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7CiAgICB9CiAgICB0aGlzLl9jdXJyZW50RnJhZ21lbnQucHVzaChub2RlKTsKICAgIGlmIChpc0VtcHR5KSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuX3N0YWNrLnB1c2godGhpcy5fY3VycmVudEZyYWdtZW50KTsKICAgIHRoaXMuX2N1cnJlbnRGcmFnbWVudCA9IG5vZGUuY2hpbGROb2RlczsKICB9CiAgb25FbmRFbGVtZW50KG5hbWUpIHsKICAgIHRoaXMuX2N1cnJlbnRGcmFnbWVudCA9IHRoaXMuX3N0YWNrLnBvcCgpIHx8IFtdOwogICAgY29uc3QgbGFzdEVsZW1lbnQgPSB0aGlzLl9jdXJyZW50RnJhZ21lbnQuYXQoLTEpOwogICAgaWYgKCFsYXN0RWxlbWVudCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGZvciAoY29uc3QgY2hpbGROb2RlIG9mIGxhc3RFbGVtZW50LmNoaWxkTm9kZXMpIHsKICAgICAgY2hpbGROb2RlLnBhcmVudE5vZGUgPSBsYXN0RWxlbWVudDsKICAgIH0KICAgIHJldHVybiBsYXN0RWxlbWVudDsKICB9CiAgb25FcnJvcihjb2RlKSB7CiAgICB0aGlzLl9lcnJvckNvZGUgPSBjb2RlOwogIH0KfQoKOy8vIC4vc3JjL2NvcmUvbWV0YWRhdGFfcGFyc2VyLmpzCgpjbGFzcyBNZXRhZGF0YVBhcnNlciB7CiAgY29uc3RydWN0b3IoZGF0YSkgewogICAgZGF0YSA9IHRoaXMuX3JlcGFpcihkYXRhKTsKICAgIGNvbnN0IHBhcnNlciA9IG5ldyBTaW1wbGVYTUxQYXJzZXIoewogICAgICBsb3dlckNhc2VOYW1lOiB0cnVlCiAgICB9KTsKICAgIGNvbnN0IHhtbERvY3VtZW50ID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhkYXRhKTsKICAgIHRoaXMuX21ldGFkYXRhTWFwID0gbmV3IE1hcCgpOwogICAgdGhpcy5fZGF0YSA9IGRhdGE7CiAgICBpZiAoeG1sRG9jdW1lbnQpIHsKICAgICAgdGhpcy5fcGFyc2UoeG1sRG9jdW1lbnQpOwogICAgfQogIH0KICBfcmVwYWlyKGRhdGEpIHsKICAgIHJldHVybiBkYXRhLnJlcGxhY2UoL15bXjxdKy8sICIiKS5yZXBsYWNlQWxsKC8+XFwzNzZcXDM3NyhbXjxdKykvZywgZnVuY3Rpb24gKGFsbCwgY29kZXMpIHsKICAgICAgY29uc3QgYnl0ZXMgPSBjb2Rlcy5yZXBsYWNlQWxsKC9cXChbMC0zXSkoWzAtN10pKFswLTddKS9nLCBmdW5jdGlvbiAoY29kZSwgZDEsIGQyLCBkMykgewogICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGQxICogNjQgKyBkMiAqIDggKyBkMyAqIDEpOwogICAgICB9KS5yZXBsYWNlQWxsKC8mKGFtcHxhcG9zfGd0fGx0fHF1b3QpOy9nLCBmdW5jdGlvbiAoc3RyLCBuYW1lKSB7CiAgICAgICAgc3dpdGNoIChuYW1lKSB7CiAgICAgICAgICBjYXNlICJhbXAiOgogICAgICAgICAgICByZXR1cm4gIiYiOwogICAgICAgICAgY2FzZSAiYXBvcyI6CiAgICAgICAgICAgIHJldHVybiAiJyI7CiAgICAgICAgICBjYXNlICJndCI6CiAgICAgICAgICAgIHJldHVybiAiPiI7CiAgICAgICAgICBjYXNlICJsdCI6CiAgICAgICAgICAgIHJldHVybiAiPCI7CiAgICAgICAgICBjYXNlICJxdW90IjoKICAgICAgICAgICAgcmV0dXJuICciJzsKICAgICAgICB9CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBfcmVwYWlyOiAke25hbWV9IGlzbid0IGRlZmluZWQuYCk7CiAgICAgIH0pOwogICAgICBjb25zdCBjaGFyQnVmID0gWyI+Il07CiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGJ5dGVzLmxlbmd0aDsgaSA8IGlpOyBpICs9IDIpIHsKICAgICAgICBjb25zdCBjb2RlID0gYnl0ZXMuY2hhckNvZGVBdChpKSAqIDI1NiArIGJ5dGVzLmNoYXJDb2RlQXQoaSArIDEpOwogICAgICAgIGlmIChjb2RlID49IDMyICYmIGNvZGUgPCAxMjcgJiYgY29kZSAhPT0gNjAgJiYgY29kZSAhPT0gNjIgJiYgY29kZSAhPT0gMzgpIHsKICAgICAgICAgIGNoYXJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY2hhckJ1Zi5wdXNoKCImI3giICsgKDB4MTAwMDAgKyBjb2RlKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDEpICsgIjsiKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGNoYXJCdWYuam9pbigiIik7CiAgICB9KTsKICB9CiAgX2dldFNlcXVlbmNlKGVudHJ5KSB7CiAgICBjb25zdCBuYW1lID0gZW50cnkubm9kZU5hbWU7CiAgICBpZiAobmFtZSAhPT0gInJkZjpiYWciICYmIG5hbWUgIT09ICJyZGY6c2VxIiAmJiBuYW1lICE9PSAicmRmOmFsdCIpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICByZXR1cm4gZW50cnkuY2hpbGROb2Rlcy5maWx0ZXIobm9kZSA9PiBub2RlLm5vZGVOYW1lID09PSAicmRmOmxpIik7CiAgfQogIF9wYXJzZUFycmF5KGVudHJ5KSB7CiAgICBpZiAoIWVudHJ5Lmhhc0NoaWxkTm9kZXMoKSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBbc2VxTm9kZV0gPSBlbnRyeS5jaGlsZE5vZGVzOwogICAgY29uc3Qgc2VxdWVuY2UgPSB0aGlzLl9nZXRTZXF1ZW5jZShzZXFOb2RlKSB8fCBbXTsKICAgIHRoaXMuX21ldGFkYXRhTWFwLnNldChlbnRyeS5ub2RlTmFtZSwgc2VxdWVuY2UubWFwKG5vZGUgPT4gbm9kZS50ZXh0Q29udGVudC50cmltKCkpKTsKICB9CiAgX3BhcnNlKHhtbERvY3VtZW50KSB7CiAgICBsZXQgcmRmID0geG1sRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OwogICAgaWYgKHJkZi5ub2RlTmFtZSAhPT0gInJkZjpyZGYiKSB7CiAgICAgIHJkZiA9IHJkZi5maXJzdENoaWxkOwogICAgICB3aGlsZSAocmRmICYmIHJkZi5ub2RlTmFtZSAhPT0gInJkZjpyZGYiKSB7CiAgICAgICAgcmRmID0gcmRmLm5leHRTaWJsaW5nOwogICAgICB9CiAgICB9CiAgICBpZiAoIXJkZiB8fCByZGYubm9kZU5hbWUgIT09ICJyZGY6cmRmIiB8fCAhcmRmLmhhc0NoaWxkTm9kZXMoKSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBmb3IgKGNvbnN0IGRlc2Mgb2YgcmRmLmNoaWxkTm9kZXMpIHsKICAgICAgaWYgKGRlc2Mubm9kZU5hbWUgIT09ICJyZGY6ZGVzY3JpcHRpb24iKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBkZXNjLmNoaWxkTm9kZXMpIHsKICAgICAgICBjb25zdCBuYW1lID0gZW50cnkubm9kZU5hbWU7CiAgICAgICAgc3dpdGNoIChuYW1lKSB7CiAgICAgICAgICBjYXNlICIjdGV4dCI6CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgY2FzZSAiZGM6Y3JlYXRvciI6CiAgICAgICAgICBjYXNlICJkYzpzdWJqZWN0IjoKICAgICAgICAgICAgdGhpcy5fcGFyc2VBcnJheShlbnRyeSk7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICB0aGlzLl9tZXRhZGF0YU1hcC5zZXQobmFtZSwgZW50cnkudGV4dENvbnRlbnQudHJpbSgpKTsKICAgICAgfQogICAgfQogIH0KICBnZXQgc2VyaWFsaXphYmxlKCkgewogICAgcmV0dXJuIHsKICAgICAgcGFyc2VkRGF0YTogdGhpcy5fbWV0YWRhdGFNYXAsCiAgICAgIHJhd0RhdGE6IHRoaXMuX2RhdGEKICAgIH07CiAgfQp9Cgo7Ly8gLi9zcmMvY29yZS9zdHJ1Y3RfdHJlZS5qcwoKCgoKY29uc3QgTUFYX0RFUFRIID0gNDA7CmNvbnN0IFN0cnVjdEVsZW1lbnRUeXBlID0gewogIFBBR0VfQ09OVEVOVDogMSwKICBTVFJFQU1fQ09OVEVOVDogMiwKICBPQkpFQ1Q6IDMsCiAgQU5OT1RBVElPTjogNCwKICBFTEVNRU5UOiA1Cn07CmNsYXNzIFN0cnVjdFRyZWVSb290IHsKICBjb25zdHJ1Y3Rvcih4cmVmLCByb290RGljdCwgcm9vdFJlZikgewogICAgdGhpcy54cmVmID0geHJlZjsKICAgIHRoaXMuZGljdCA9IHJvb3REaWN0OwogICAgdGhpcy5yZWYgPSByb290UmVmIGluc3RhbmNlb2YgUmVmID8gcm9vdFJlZiA6IG51bGw7CiAgICB0aGlzLnJvbGVNYXAgPSBuZXcgTWFwKCk7CiAgICB0aGlzLnN0cnVjdFBhcmVudElkcyA9IG51bGw7CiAgfQogIGluaXQoKSB7CiAgICB0aGlzLnJlYWRSb2xlTWFwKCk7CiAgfQogICNhZGRJZFRvUGFnZShwYWdlUmVmLCBpZCwgdHlwZSkgewogICAgaWYgKCEocGFnZVJlZiBpbnN0YW5jZW9mIFJlZikgfHwgaWQgPCAwKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuc3RydWN0UGFyZW50SWRzIHx8PSBuZXcgUmVmU2V0Q2FjaGUoKTsKICAgIGxldCBpZHMgPSB0aGlzLnN0cnVjdFBhcmVudElkcy5nZXQocGFnZVJlZik7CiAgICBpZiAoIWlkcykgewogICAgICBpZHMgPSBbXTsKICAgICAgdGhpcy5zdHJ1Y3RQYXJlbnRJZHMucHV0KHBhZ2VSZWYsIGlkcyk7CiAgICB9CiAgICBpZHMucHVzaChbaWQsIHR5cGVdKTsKICB9CiAgYWRkQW5ub3RhdGlvbklkVG9QYWdlKHBhZ2VSZWYsIGlkKSB7CiAgICB0aGlzLiNhZGRJZFRvUGFnZShwYWdlUmVmLCBpZCwgU3RydWN0RWxlbWVudFR5cGUuQU5OT1RBVElPTik7CiAgfQogIHJlYWRSb2xlTWFwKCkgewogICAgY29uc3Qgcm9sZU1hcERpY3QgPSB0aGlzLmRpY3QuZ2V0KCJSb2xlTWFwIik7CiAgICBpZiAoIShyb2xlTWFwRGljdCBpbnN0YW5jZW9mIERpY3QpKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHJvbGVNYXBEaWN0KSB7CiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE5hbWUpIHsKICAgICAgICB0aGlzLnJvbGVNYXAuc2V0KGtleSwgdmFsdWUubmFtZSk7CiAgICAgIH0KICAgIH0KICB9CiAgc3RhdGljIGFzeW5jIGNhbkNyZWF0ZVN0cnVjdHVyZVRyZWUoewogICAgY2F0YWxvZ1JlZiwKICAgIHBkZk1hbmFnZXIsCiAgICBuZXdBbm5vdGF0aW9uc0J5UGFnZQogIH0pIHsKICAgIGlmICghKGNhdGFsb2dSZWYgaW5zdGFuY2VvZiBSZWYpKSB7CiAgICAgIHdhcm4oIkNhbm5vdCBzYXZlIHRoZSBzdHJ1Y3QgdHJlZTogbm8gY2F0YWxvZyByZWZlcmVuY2UuIik7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGxldCBuZXh0S2V5ID0gMDsKICAgIGxldCBoYXNOb3RoaW5nVG9VcGRhdGUgPSB0cnVlOwogICAgZm9yIChjb25zdCBbcGFnZUluZGV4LCBlbGVtZW50c10gb2YgbmV3QW5ub3RhdGlvbnNCeVBhZ2UpIHsKICAgICAgY29uc3QgewogICAgICAgIHJlZjogcGFnZVJlZgogICAgICB9ID0gYXdhaXQgcGRmTWFuYWdlci5nZXRQYWdlKHBhZ2VJbmRleCk7CiAgICAgIGlmICghKHBhZ2VSZWYgaW5zdGFuY2VvZiBSZWYpKSB7CiAgICAgICAgd2FybihgQ2Fubm90IHNhdmUgdGhlIHN0cnVjdCB0cmVlOiBwYWdlICR7cGFnZUluZGV4fSBoYXMgbm8gcmVmLmApOwogICAgICAgIGhhc05vdGhpbmdUb1VwZGF0ZSA9IHRydWU7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7CiAgICAgICAgaWYgKGVsZW1lbnQuYWNjZXNzaWJpbGl0eURhdGE/LnR5cGUpIHsKICAgICAgICAgIGVsZW1lbnQucGFyZW50VHJlZUlkID0gbmV4dEtleSsrOwogICAgICAgICAgaGFzTm90aGluZ1RvVXBkYXRlID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoaGFzTm90aGluZ1RvVXBkYXRlKSB7CiAgICAgIGZvciAoY29uc3QgZWxlbWVudHMgb2YgbmV3QW5ub3RhdGlvbnNCeVBhZ2UudmFsdWVzKCkpIHsKICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpIHsKICAgICAgICAgIGRlbGV0ZSBlbGVtZW50LnBhcmVudFRyZWVJZDsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQogIHN0YXRpYyBhc3luYyBjcmVhdGVTdHJ1Y3R1cmVUcmVlKHsKICAgIG5ld0Fubm90YXRpb25zQnlQYWdlLAogICAgeHJlZiwKICAgIGNhdGFsb2dSZWYsCiAgICBwZGZNYW5hZ2VyLAogICAgY2hhbmdlcwogIH0pIHsKICAgIGNvbnN0IHJvb3QgPSBwZGZNYW5hZ2VyLmNhdGFsb2cuY2xvbmVEaWN0KCk7CiAgICBjb25zdCBjYWNoZSA9IG5ldyBSZWZTZXRDYWNoZSgpOwogICAgY2FjaGUucHV0KGNhdGFsb2dSZWYsIHJvb3QpOwogICAgY29uc3Qgc3RydWN0VHJlZVJvb3RSZWYgPSB4cmVmLmdldE5ld1RlbXBvcmFyeVJlZigpOwogICAgcm9vdC5zZXQoIlN0cnVjdFRyZWVSb290Iiwgc3RydWN0VHJlZVJvb3RSZWYpOwogICAgY29uc3Qgc3RydWN0VHJlZVJvb3QgPSBuZXcgRGljdCh4cmVmKTsKICAgIHN0cnVjdFRyZWVSb290LnNldCgiVHlwZSIsIE5hbWUuZ2V0KCJTdHJ1Y3RUcmVlUm9vdCIpKTsKICAgIGNvbnN0IHBhcmVudFRyZWVSZWYgPSB4cmVmLmdldE5ld1RlbXBvcmFyeVJlZigpOwogICAgc3RydWN0VHJlZVJvb3Quc2V0KCJQYXJlbnRUcmVlIiwgcGFyZW50VHJlZVJlZik7CiAgICBjb25zdCBraWRzID0gW107CiAgICBzdHJ1Y3RUcmVlUm9vdC5zZXQoIksiLCBraWRzKTsKICAgIGNhY2hlLnB1dChzdHJ1Y3RUcmVlUm9vdFJlZiwgc3RydWN0VHJlZVJvb3QpOwogICAgY29uc3QgcGFyZW50VHJlZSA9IG5ldyBEaWN0KHhyZWYpOwogICAgY29uc3QgbnVtcyA9IFtdOwogICAgcGFyZW50VHJlZS5zZXQoIk51bXMiLCBudW1zKTsKICAgIGNvbnN0IG5leHRLZXkgPSBhd2FpdCB0aGlzLiN3cml0ZUtpZHMoewogICAgICBuZXdBbm5vdGF0aW9uc0J5UGFnZSwKICAgICAgc3RydWN0VHJlZVJvb3RSZWYsCiAgICAgIHN0cnVjdFRyZWVSb290OiBudWxsLAogICAgICBraWRzLAogICAgICBudW1zLAogICAgICB4cmVmLAogICAgICBwZGZNYW5hZ2VyLAogICAgICBjaGFuZ2VzLAogICAgICBjYWNoZQogICAgfSk7CiAgICBzdHJ1Y3RUcmVlUm9vdC5zZXQoIlBhcmVudFRyZWVOZXh0S2V5IiwgbmV4dEtleSk7CiAgICBjYWNoZS5wdXQocGFyZW50VHJlZVJlZiwgcGFyZW50VHJlZSk7CiAgICBmb3IgKGNvbnN0IFtyZWYsIG9ial0gb2YgY2FjaGUuaXRlbXMoKSkgewogICAgICBjaGFuZ2VzLnB1dChyZWYsIHsKICAgICAgICBkYXRhOiBvYmoKICAgICAgfSk7CiAgICB9CiAgfQogIGFzeW5jIGNhblVwZGF0ZVN0cnVjdFRyZWUoewogICAgcGRmTWFuYWdlciwKICAgIG5ld0Fubm90YXRpb25zQnlQYWdlCiAgfSkgewogICAgaWYgKCF0aGlzLnJlZikgewogICAgICB3YXJuKCJDYW5ub3QgdXBkYXRlIHRoZSBzdHJ1Y3QgdHJlZTogbm8gcm9vdCByZWZlcmVuY2UuIik7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGxldCBuZXh0S2V5ID0gdGhpcy5kaWN0LmdldCgiUGFyZW50VHJlZU5leHRLZXkiKTsKICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihuZXh0S2V5KSB8fCBuZXh0S2V5IDwgMCkgewogICAgICB3YXJuKCJDYW5ub3QgdXBkYXRlIHRoZSBzdHJ1Y3QgdHJlZTogaW52YWxpZCBuZXh0IGtleS4iKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgY29uc3QgcGFyZW50VHJlZSA9IHRoaXMuZGljdC5nZXQoIlBhcmVudFRyZWUiKTsKICAgIGlmICghKHBhcmVudFRyZWUgaW5zdGFuY2VvZiBEaWN0KSkgewogICAgICB3YXJuKCJDYW5ub3QgdXBkYXRlIHRoZSBzdHJ1Y3QgdHJlZTogUGFyZW50VHJlZSBpc24ndCBhIGRpY3QuIik7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGNvbnN0IG51bXMgPSBwYXJlbnRUcmVlLmdldCgiTnVtcyIpOwogICAgaWYgKCFBcnJheS5pc0FycmF5KG51bXMpKSB7CiAgICAgIHdhcm4oIkNhbm5vdCB1cGRhdGUgdGhlIHN0cnVjdCB0cmVlOiBudW1zIGlzbid0IGFuIGFycmF5LiIpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBjb25zdCBudW1iZXJUcmVlID0gbmV3IE51bWJlclRyZWUocGFyZW50VHJlZSwgdGhpcy54cmVmKTsKICAgIGZvciAoY29uc3QgcGFnZUluZGV4IG9mIG5ld0Fubm90YXRpb25zQnlQYWdlLmtleXMoKSkgewogICAgICBjb25zdCB7CiAgICAgICAgcGFnZURpY3QKICAgICAgfSA9IGF3YWl0IHBkZk1hbmFnZXIuZ2V0UGFnZShwYWdlSW5kZXgpOwogICAgICBpZiAoIXBhZ2VEaWN0LmhhcygiU3RydWN0UGFyZW50cyIpKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgY29uc3QgaWQgPSBwYWdlRGljdC5nZXQoIlN0cnVjdFBhcmVudHMiKTsKICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGlkKSB8fCAhQXJyYXkuaXNBcnJheShudW1iZXJUcmVlLmdldChpZCkpKSB7CiAgICAgICAgd2FybihgQ2Fubm90IHNhdmUgdGhlIHN0cnVjdCB0cmVlOiBwYWdlICR7cGFnZUluZGV4fSBoYXMgYSB3cm9uZyBpZC5gKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGxldCBoYXNOb3RoaW5nVG9VcGRhdGUgPSB0cnVlOwogICAgZm9yIChjb25zdCBbcGFnZUluZGV4LCBlbGVtZW50c10gb2YgbmV3QW5ub3RhdGlvbnNCeVBhZ2UpIHsKICAgICAgY29uc3QgewogICAgICAgIHBhZ2VEaWN0CiAgICAgIH0gPSBhd2FpdCBwZGZNYW5hZ2VyLmdldFBhZ2UocGFnZUluZGV4KTsKICAgICAgU3RydWN0VHJlZVJvb3QuI2NvbGxlY3RQYXJlbnRzKHsKICAgICAgICBlbGVtZW50cywKICAgICAgICB4cmVmOiB0aGlzLnhyZWYsCiAgICAgICAgcGFnZURpY3QsCiAgICAgICAgbnVtYmVyVHJlZQogICAgICB9KTsKICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7CiAgICAgICAgaWYgKGVsZW1lbnQuYWNjZXNzaWJpbGl0eURhdGE/LnR5cGUpIHsKICAgICAgICAgIGlmICghKGVsZW1lbnQuYWNjZXNzaWJpbGl0eURhdGEuc3RydWN0UGFyZW50ID49IDApKSB7CiAgICAgICAgICAgIGVsZW1lbnQucGFyZW50VHJlZUlkID0gbmV4dEtleSsrOwogICAgICAgICAgfQogICAgICAgICAgaGFzTm90aGluZ1RvVXBkYXRlID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoaGFzTm90aGluZ1RvVXBkYXRlKSB7CiAgICAgIGZvciAoY29uc3QgZWxlbWVudHMgb2YgbmV3QW5ub3RhdGlvbnNCeVBhZ2UudmFsdWVzKCkpIHsKICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpIHsKICAgICAgICAgIGRlbGV0ZSBlbGVtZW50LnBhcmVudFRyZWVJZDsKICAgICAgICAgIGRlbGV0ZSBlbGVtZW50LnN0cnVjdFRyZWVQYXJlbnQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KICBhc3luYyB1cGRhdGVTdHJ1Y3R1cmVUcmVlKHsKICAgIG5ld0Fubm90YXRpb25zQnlQYWdlLAogICAgcGRmTWFuYWdlciwKICAgIGNoYW5nZXMKICB9KSB7CiAgICBjb25zdCB7CiAgICAgIHJlZjogc3RydWN0VHJlZVJvb3RSZWYsCiAgICAgIHhyZWYKICAgIH0gPSB0aGlzOwogICAgY29uc3Qgc3RydWN0VHJlZVJvb3QgPSB0aGlzLmRpY3QuY2xvbmUoKTsKICAgIGNvbnN0IGNhY2hlID0gbmV3IFJlZlNldENhY2hlKCk7CiAgICBjYWNoZS5wdXQoc3RydWN0VHJlZVJvb3RSZWYsIHN0cnVjdFRyZWVSb290KTsKICAgIGxldCBwYXJlbnRUcmVlUmVmID0gc3RydWN0VHJlZVJvb3QuZ2V0UmF3KCJQYXJlbnRUcmVlIik7CiAgICBsZXQgcGFyZW50VHJlZTsKICAgIGlmIChwYXJlbnRUcmVlUmVmIGluc3RhbmNlb2YgUmVmKSB7CiAgICAgIHBhcmVudFRyZWUgPSB4cmVmLmZldGNoKHBhcmVudFRyZWVSZWYpOwogICAgfSBlbHNlIHsKICAgICAgcGFyZW50VHJlZSA9IHBhcmVudFRyZWVSZWY7CiAgICAgIHBhcmVudFRyZWVSZWYgPSB4cmVmLmdldE5ld1RlbXBvcmFyeVJlZigpOwogICAgICBzdHJ1Y3RUcmVlUm9vdC5zZXQoIlBhcmVudFRyZWUiLCBwYXJlbnRUcmVlUmVmKTsKICAgIH0KICAgIHBhcmVudFRyZWUgPSBwYXJlbnRUcmVlLmNsb25lKCk7CiAgICBjYWNoZS5wdXQocGFyZW50VHJlZVJlZiwgcGFyZW50VHJlZSk7CiAgICBsZXQgbnVtcyA9IHBhcmVudFRyZWUuZ2V0UmF3KCJOdW1zIik7CiAgICBsZXQgbnVtc1JlZiA9IG51bGw7CiAgICBpZiAobnVtcyBpbnN0YW5jZW9mIFJlZikgewogICAgICBudW1zUmVmID0gbnVtczsKICAgICAgbnVtcyA9IHhyZWYuZmV0Y2gobnVtc1JlZik7CiAgICB9CiAgICBudW1zID0gbnVtcy5zbGljZSgpOwogICAgaWYgKCFudW1zUmVmKSB7CiAgICAgIHBhcmVudFRyZWUuc2V0KCJOdW1zIiwgbnVtcyk7CiAgICB9CiAgICBjb25zdCBuZXdOZXh0S2V5ID0gYXdhaXQgU3RydWN0VHJlZVJvb3QuI3dyaXRlS2lkcyh7CiAgICAgIG5ld0Fubm90YXRpb25zQnlQYWdlLAogICAgICBzdHJ1Y3RUcmVlUm9vdFJlZiwKICAgICAgc3RydWN0VHJlZVJvb3Q6IHRoaXMsCiAgICAgIGtpZHM6IG51bGwsCiAgICAgIG51bXMsCiAgICAgIHhyZWYsCiAgICAgIHBkZk1hbmFnZXIsCiAgICAgIGNoYW5nZXMsCiAgICAgIGNhY2hlCiAgICB9KTsKICAgIGlmIChuZXdOZXh0S2V5ID09PSAtMSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBzdHJ1Y3RUcmVlUm9vdC5zZXQoIlBhcmVudFRyZWVOZXh0S2V5IiwgbmV3TmV4dEtleSk7CiAgICBpZiAobnVtc1JlZikgewogICAgICBjYWNoZS5wdXQobnVtc1JlZiwgbnVtcyk7CiAgICB9CiAgICBmb3IgKGNvbnN0IFtyZWYsIG9ial0gb2YgY2FjaGUuaXRlbXMoKSkgewogICAgICBjaGFuZ2VzLnB1dChyZWYsIHsKICAgICAgICBkYXRhOiBvYmoKICAgICAgfSk7CiAgICB9CiAgfQogIHN0YXRpYyBhc3luYyAjd3JpdGVLaWRzKHsKICAgIG5ld0Fubm90YXRpb25zQnlQYWdlLAogICAgc3RydWN0VHJlZVJvb3RSZWYsCiAgICBzdHJ1Y3RUcmVlUm9vdCwKICAgIGtpZHMsCiAgICBudW1zLAogICAgeHJlZiwKICAgIHBkZk1hbmFnZXIsCiAgICBjaGFuZ2VzLAogICAgY2FjaGUKICB9KSB7CiAgICBjb25zdCBvYmpyID0gTmFtZS5nZXQoIk9CSlIiKTsKICAgIGxldCBuZXh0S2V5ID0gLTE7CiAgICBsZXQgc3RydWN0VHJlZVBhZ2VPYmpzOwogICAgZm9yIChjb25zdCBbcGFnZUluZGV4LCBlbGVtZW50c10gb2YgbmV3QW5ub3RhdGlvbnNCeVBhZ2UpIHsKICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IHBkZk1hbmFnZXIuZ2V0UGFnZShwYWdlSW5kZXgpOwogICAgICBjb25zdCB7CiAgICAgICAgcmVmOiBwYWdlUmVmCiAgICAgIH0gPSBwYWdlOwogICAgICBjb25zdCBpc1BhZ2VSZWYgPSBwYWdlUmVmIGluc3RhbmNlb2YgUmVmOwogICAgICBmb3IgKGNvbnN0IHsKICAgICAgICBhY2Nlc3NpYmlsaXR5RGF0YSwKICAgICAgICByZWYsCiAgICAgICAgcGFyZW50VHJlZUlkLAogICAgICAgIHN0cnVjdFRyZWVQYXJlbnQKICAgICAgfSBvZiBlbGVtZW50cykgewogICAgICAgIGlmICghYWNjZXNzaWJpbGl0eURhdGE/LnR5cGUpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBjb25zdCB7CiAgICAgICAgICBzdHJ1Y3RQYXJlbnQKICAgICAgICB9ID0gYWNjZXNzaWJpbGl0eURhdGE7CiAgICAgICAgaWYgKHN0cnVjdFRyZWVSb290ICYmIE51bWJlci5pc0ludGVnZXIoc3RydWN0UGFyZW50KSAmJiBzdHJ1Y3RQYXJlbnQgPj0gMCkgewogICAgICAgICAgbGV0IG9ianMgPSAoc3RydWN0VHJlZVBhZ2VPYmpzIHx8PSBuZXcgTWFwKCkpLmdldChwYWdlSW5kZXgpOwogICAgICAgICAgaWYgKG9ianMgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBjb25zdCBzdHJ1Y3RUcmVlUGFnZSA9IG5ldyBTdHJ1Y3RUcmVlUGFnZShzdHJ1Y3RUcmVlUm9vdCwgcGFnZS5wYWdlRGljdCk7CiAgICAgICAgICAgIG9ianMgPSBzdHJ1Y3RUcmVlUGFnZS5jb2xsZWN0T2JqZWN0cyhwYWdlUmVmKTsKICAgICAgICAgICAgc3RydWN0VHJlZVBhZ2VPYmpzLnNldChwYWdlSW5kZXgsIG9ianMpOwogICAgICAgICAgfQogICAgICAgICAgY29uc3Qgb2JqUmVmID0gb2Jqcz8uZ2V0KHN0cnVjdFBhcmVudCk7CiAgICAgICAgICBpZiAob2JqUmVmKSB7CiAgICAgICAgICAgIGNvbnN0IHRhZ0RpY3QgPSB4cmVmLmZldGNoKG9ialJlZikuY2xvbmUoKTsKICAgICAgICAgICAgU3RydWN0VHJlZVJvb3QuI3dyaXRlUHJvcGVydGllcyh0YWdEaWN0LCBhY2Nlc3NpYmlsaXR5RGF0YSk7CiAgICAgICAgICAgIGNoYW5nZXMucHV0KG9ialJlZiwgewogICAgICAgICAgICAgIGRhdGE6IHRhZ0RpY3QKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBuZXh0S2V5ID0gTWF0aC5tYXgobmV4dEtleSwgcGFyZW50VHJlZUlkKTsKICAgICAgICBjb25zdCB0YWdSZWYgPSB4cmVmLmdldE5ld1RlbXBvcmFyeVJlZigpOwogICAgICAgIGNvbnN0IHRhZ0RpY3QgPSBuZXcgRGljdCh4cmVmKTsKICAgICAgICBTdHJ1Y3RUcmVlUm9vdC4jd3JpdGVQcm9wZXJ0aWVzKHRhZ0RpY3QsIGFjY2Vzc2liaWxpdHlEYXRhKTsKICAgICAgICBhd2FpdCB0aGlzLiN1cGRhdGVQYXJlbnRUYWcoewogICAgICAgICAgc3RydWN0VHJlZVBhcmVudCwKICAgICAgICAgIHRhZ0RpY3QsCiAgICAgICAgICBuZXdUYWdSZWY6IHRhZ1JlZiwKICAgICAgICAgIHN0cnVjdFRyZWVSb290UmVmLAogICAgICAgICAgZmFsbGJhY2tLaWRzOiBraWRzLAogICAgICAgICAgeHJlZiwKICAgICAgICAgIGNhY2hlCiAgICAgICAgfSk7CiAgICAgICAgY29uc3Qgb2JqRGljdCA9IG5ldyBEaWN0KHhyZWYpOwogICAgICAgIHRhZ0RpY3Quc2V0KCJLIiwgb2JqRGljdCk7CiAgICAgICAgb2JqRGljdC5zZXQoIlR5cGUiLCBvYmpyKTsKICAgICAgICBpZiAoaXNQYWdlUmVmKSB7CiAgICAgICAgICBvYmpEaWN0LnNldCgiUGciLCBwYWdlUmVmKTsKICAgICAgICB9CiAgICAgICAgb2JqRGljdC5zZXQoIk9iaiIsIHJlZik7CiAgICAgICAgY2FjaGUucHV0KHRhZ1JlZiwgdGFnRGljdCk7CiAgICAgICAgbnVtcy5wdXNoKHBhcmVudFRyZWVJZCwgdGFnUmVmKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5leHRLZXkgKyAxOwogIH0KICBzdGF0aWMgI3dyaXRlUHJvcGVydGllcyh0YWdEaWN0LCB7CiAgICB0eXBlLAogICAgdGl0bGUsCiAgICBsYW5nLAogICAgYWx0LAogICAgZXhwYW5kZWQsCiAgICBhY3R1YWxUZXh0CiAgfSkgewogICAgdGFnRGljdC5zZXQoIlMiLCBOYW1lLmdldCh0eXBlKSk7CiAgICBpZiAodGl0bGUpIHsKICAgICAgdGFnRGljdC5zZXQoIlQiLCBzdHJpbmdUb0FzY2lpT3JVVEYxNkJFKHRpdGxlKSk7CiAgICB9CiAgICBpZiAobGFuZykgewogICAgICB0YWdEaWN0LnNldCgiTGFuZyIsIHN0cmluZ1RvQXNjaWlPclVURjE2QkUobGFuZykpOwogICAgfQogICAgaWYgKGFsdCkgewogICAgICB0YWdEaWN0LnNldCgiQWx0Iiwgc3RyaW5nVG9Bc2NpaU9yVVRGMTZCRShhbHQpKTsKICAgIH0KICAgIGlmIChleHBhbmRlZCkgewogICAgICB0YWdEaWN0LnNldCgiRSIsIHN0cmluZ1RvQXNjaWlPclVURjE2QkUoZXhwYW5kZWQpKTsKICAgIH0KICAgIGlmIChhY3R1YWxUZXh0KSB7CiAgICAgIHRhZ0RpY3Quc2V0KCJBY3R1YWxUZXh0Iiwgc3RyaW5nVG9Bc2NpaU9yVVRGMTZCRShhY3R1YWxUZXh0KSk7CiAgICB9CiAgfQogIHN0YXRpYyAjY29sbGVjdFBhcmVudHMoewogICAgZWxlbWVudHMsCiAgICB4cmVmLAogICAgcGFnZURpY3QsCiAgICBudW1iZXJUcmVlCiAgfSkgewogICAgY29uc3QgaWRUb0VsZW1lbnRzID0gbmV3IE1hcCgpOwogICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7CiAgICAgIGlmIChlbGVtZW50LnN0cnVjdFRyZWVQYXJlbnRJZCkgewogICAgICAgIGNvbnN0IGlkID0gcGFyc2VJbnQoZWxlbWVudC5zdHJ1Y3RUcmVlUGFyZW50SWQuc3BsaXQoIl9tYyIpWzFdLCAxMCk7CiAgICAgICAgbGV0IGVsZW1zID0gaWRUb0VsZW1lbnRzLmdldChpZCk7CiAgICAgICAgaWYgKCFlbGVtcykgewogICAgICAgICAgZWxlbXMgPSBbXTsKICAgICAgICAgIGlkVG9FbGVtZW50cy5zZXQoaWQsIGVsZW1zKTsKICAgICAgICB9CiAgICAgICAgZWxlbXMucHVzaChlbGVtZW50KTsKICAgICAgfQogICAgfQogICAgY29uc3QgaWQgPSBwYWdlRGljdC5nZXQoIlN0cnVjdFBhcmVudHMiKTsKICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihpZCkpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgcGFyZW50QXJyYXkgPSBudW1iZXJUcmVlLmdldChpZCk7CiAgICBjb25zdCB1cGRhdGVFbGVtZW50ID0gKGtpZCwgcGFnZUtpZCwga2lkUmVmKSA9PiB7CiAgICAgIGNvbnN0IGVsZW1zID0gaWRUb0VsZW1lbnRzLmdldChraWQpOwogICAgICBpZiAoZWxlbXMpIHsKICAgICAgICBjb25zdCBwYXJlbnRSZWYgPSBwYWdlS2lkLmdldFJhdygiUCIpOwogICAgICAgIGNvbnN0IHBhcmVudERpY3QgPSB4cmVmLmZldGNoSWZSZWYocGFyZW50UmVmKTsKICAgICAgICBpZiAocGFyZW50UmVmIGluc3RhbmNlb2YgUmVmICYmIHBhcmVudERpY3QgaW5zdGFuY2VvZiBEaWN0KSB7CiAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7CiAgICAgICAgICAgIHJlZjoga2lkUmVmLAogICAgICAgICAgICBkaWN0OiBwYWdlS2lkCiAgICAgICAgICB9OwogICAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1zKSB7CiAgICAgICAgICAgIGVsZW1lbnQuc3RydWN0VHJlZVBhcmVudCA9IHBhcmFtczsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKICAgIGZvciAoY29uc3Qga2lkUmVmIG9mIHBhcmVudEFycmF5KSB7CiAgICAgIGlmICghKGtpZFJlZiBpbnN0YW5jZW9mIFJlZikpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBjb25zdCBwYWdlS2lkID0geHJlZi5mZXRjaChraWRSZWYpOwogICAgICBjb25zdCBrID0gcGFnZUtpZC5nZXQoIksiKTsKICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIoaykpIHsKICAgICAgICB1cGRhdGVFbGVtZW50KGssIHBhZ2VLaWQsIGtpZFJlZik7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGspKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgZm9yIChsZXQga2lkIG9mIGspIHsKICAgICAgICBraWQgPSB4cmVmLmZldGNoSWZSZWYoa2lkKTsKICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihraWQpICYmIHVwZGF0ZUVsZW1lbnQoa2lkLCBwYWdlS2lkLCBraWRSZWYpKSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgaWYgKCEoa2lkIGluc3RhbmNlb2YgRGljdCkpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBpZiAoIWlzTmFtZShraWQuZ2V0KCJUeXBlIiksICJNQ1IiKSkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNvbnN0IG1jaWQgPSBraWQuZ2V0KCJNQ0lEIik7CiAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIobWNpZCkgJiYgdXBkYXRlRWxlbWVudChtY2lkLCBwYWdlS2lkLCBraWRSZWYpKSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgc3RhdGljIGFzeW5jICN1cGRhdGVQYXJlbnRUYWcoewogICAgc3RydWN0VHJlZVBhcmVudCwKICAgIHRhZ0RpY3QsCiAgICBuZXdUYWdSZWYsCiAgICBzdHJ1Y3RUcmVlUm9vdFJlZiwKICAgIGZhbGxiYWNrS2lkcywKICAgIHhyZWYsCiAgICBjYWNoZQogIH0pIHsKICAgIGxldCByZWYgPSBudWxsOwogICAgbGV0IHBhcmVudFJlZjsKICAgIGlmIChzdHJ1Y3RUcmVlUGFyZW50KSB7CiAgICAgICh7CiAgICAgICAgcmVmCiAgICAgIH0gPSBzdHJ1Y3RUcmVlUGFyZW50KTsKICAgICAgcGFyZW50UmVmID0gc3RydWN0VHJlZVBhcmVudC5kaWN0LmdldFJhdygiUCIpIHx8IHN0cnVjdFRyZWVSb290UmVmOwogICAgfSBlbHNlIHsKICAgICAgcGFyZW50UmVmID0gc3RydWN0VHJlZVJvb3RSZWY7CiAgICB9CiAgICB0YWdEaWN0LnNldCgiUCIsIHBhcmVudFJlZik7CiAgICBjb25zdCBwYXJlbnREaWN0ID0geHJlZi5mZXRjaElmUmVmKHBhcmVudFJlZik7CiAgICBpZiAoIXBhcmVudERpY3QpIHsKICAgICAgZmFsbGJhY2tLaWRzLnB1c2gobmV3VGFnUmVmKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgbGV0IGNhY2hlZFBhcmVudERpY3QgPSBjYWNoZS5nZXQocGFyZW50UmVmKTsKICAgIGlmICghY2FjaGVkUGFyZW50RGljdCkgewogICAgICBjYWNoZWRQYXJlbnREaWN0ID0gcGFyZW50RGljdC5jbG9uZSgpOwogICAgICBjYWNoZS5wdXQocGFyZW50UmVmLCBjYWNoZWRQYXJlbnREaWN0KTsKICAgIH0KICAgIGNvbnN0IHBhcmVudEtpZHNSYXcgPSBjYWNoZWRQYXJlbnREaWN0LmdldFJhdygiSyIpOwogICAgbGV0IGNhY2hlZFBhcmVudEtpZHMgPSBwYXJlbnRLaWRzUmF3IGluc3RhbmNlb2YgUmVmID8gY2FjaGUuZ2V0KHBhcmVudEtpZHNSYXcpIDogbnVsbDsKICAgIGlmICghY2FjaGVkUGFyZW50S2lkcykgewogICAgICBjYWNoZWRQYXJlbnRLaWRzID0geHJlZi5mZXRjaElmUmVmKHBhcmVudEtpZHNSYXcpOwogICAgICBjYWNoZWRQYXJlbnRLaWRzID0gQXJyYXkuaXNBcnJheShjYWNoZWRQYXJlbnRLaWRzKSA/IGNhY2hlZFBhcmVudEtpZHMuc2xpY2UoKSA6IFtwYXJlbnRLaWRzUmF3XTsKICAgICAgY29uc3QgcGFyZW50S2lkc1JlZiA9IHhyZWYuZ2V0TmV3VGVtcG9yYXJ5UmVmKCk7CiAgICAgIGNhY2hlZFBhcmVudERpY3Quc2V0KCJLIiwgcGFyZW50S2lkc1JlZik7CiAgICAgIGNhY2hlLnB1dChwYXJlbnRLaWRzUmVmLCBjYWNoZWRQYXJlbnRLaWRzKTsKICAgIH0KICAgIGNvbnN0IGluZGV4ID0gY2FjaGVkUGFyZW50S2lkcy5pbmRleE9mKHJlZik7CiAgICBjYWNoZWRQYXJlbnRLaWRzLnNwbGljZShpbmRleCA+PSAwID8gaW5kZXggKyAxIDogY2FjaGVkUGFyZW50S2lkcy5sZW5ndGgsIDAsIG5ld1RhZ1JlZik7CiAgfQp9CmNsYXNzIFN0cnVjdEVsZW1lbnROb2RlIHsKICBjb25zdHJ1Y3Rvcih0cmVlLCBkaWN0KSB7CiAgICB0aGlzLnRyZWUgPSB0cmVlOwogICAgdGhpcy54cmVmID0gdHJlZS54cmVmOwogICAgdGhpcy5kaWN0ID0gZGljdDsKICAgIHRoaXMua2lkcyA9IFtdOwogICAgdGhpcy5wYXJzZUtpZHMoKTsKICB9CiAgZ2V0IHJvbGUoKSB7CiAgICBjb25zdCBuYW1lT2JqID0gdGhpcy5kaWN0LmdldCgiUyIpOwogICAgY29uc3QgbmFtZSA9IG5hbWVPYmogaW5zdGFuY2VvZiBOYW1lID8gbmFtZU9iai5uYW1lIDogIiI7CiAgICBjb25zdCB7CiAgICAgIHJvb3QKICAgIH0gPSB0aGlzLnRyZWU7CiAgICByZXR1cm4gcm9vdC5yb2xlTWFwLmdldChuYW1lKSA/PyBuYW1lOwogIH0KICBwYXJzZUtpZHMoKSB7CiAgICBsZXQgcGFnZU9iaklkID0gbnVsbDsKICAgIGNvbnN0IG9ialJlZiA9IHRoaXMuZGljdC5nZXRSYXcoIlBnIik7CiAgICBpZiAob2JqUmVmIGluc3RhbmNlb2YgUmVmKSB7CiAgICAgIHBhZ2VPYmpJZCA9IG9ialJlZi50b1N0cmluZygpOwogICAgfQogICAgY29uc3Qga2lkcyA9IHRoaXMuZGljdC5nZXQoIksiKTsKICAgIGlmIChBcnJheS5pc0FycmF5KGtpZHMpKSB7CiAgICAgIGZvciAoY29uc3Qga2lkIG9mIGtpZHMpIHsKICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5wYXJzZUtpZChwYWdlT2JqSWQsIHRoaXMueHJlZi5mZXRjaElmUmVmKGtpZCkpOwogICAgICAgIGlmIChlbGVtZW50KSB7CiAgICAgICAgICB0aGlzLmtpZHMucHVzaChlbGVtZW50KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnBhcnNlS2lkKHBhZ2VPYmpJZCwga2lkcyk7CiAgICAgIGlmIChlbGVtZW50KSB7CiAgICAgICAgdGhpcy5raWRzLnB1c2goZWxlbWVudCk7CiAgICAgIH0KICAgIH0KICB9CiAgcGFyc2VLaWQocGFnZU9iaklkLCBraWQpIHsKICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGtpZCkpIHsKICAgICAgaWYgKHRoaXMudHJlZS5wYWdlRGljdC5vYmpJZCAhPT0gcGFnZU9iaklkKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBTdHJ1Y3RFbGVtZW50KHsKICAgICAgICB0eXBlOiBTdHJ1Y3RFbGVtZW50VHlwZS5QQUdFX0NPTlRFTlQsCiAgICAgICAgbWNpZDoga2lkLAogICAgICAgIHBhZ2VPYmpJZAogICAgICB9KTsKICAgIH0KICAgIGlmICghKGtpZCBpbnN0YW5jZW9mIERpY3QpKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3QgcGFnZVJlZiA9IGtpZC5nZXRSYXcoIlBnIik7CiAgICBpZiAocGFnZVJlZiBpbnN0YW5jZW9mIFJlZikgewogICAgICBwYWdlT2JqSWQgPSBwYWdlUmVmLnRvU3RyaW5nKCk7CiAgICB9CiAgICBjb25zdCB0eXBlID0ga2lkLmdldCgiVHlwZSIpIGluc3RhbmNlb2YgTmFtZSA/IGtpZC5nZXQoIlR5cGUiKS5uYW1lIDogbnVsbDsKICAgIGlmICh0eXBlID09PSAiTUNSIikgewogICAgICBpZiAodGhpcy50cmVlLnBhZ2VEaWN0Lm9iaklkICE9PSBwYWdlT2JqSWQpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBjb25zdCBraWRSZWYgPSBraWQuZ2V0UmF3KCJTdG0iKTsKICAgICAgcmV0dXJuIG5ldyBTdHJ1Y3RFbGVtZW50KHsKICAgICAgICB0eXBlOiBTdHJ1Y3RFbGVtZW50VHlwZS5TVFJFQU1fQ09OVEVOVCwKICAgICAgICByZWZPYmpJZDoga2lkUmVmIGluc3RhbmNlb2YgUmVmID8ga2lkUmVmLnRvU3RyaW5nKCkgOiBudWxsLAogICAgICAgIHBhZ2VPYmpJZCwKICAgICAgICBtY2lkOiBraWQuZ2V0KCJNQ0lEIikKICAgICAgfSk7CiAgICB9CiAgICBpZiAodHlwZSA9PT0gIk9CSlIiKSB7CiAgICAgIGlmICh0aGlzLnRyZWUucGFnZURpY3Qub2JqSWQgIT09IHBhZ2VPYmpJZCkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGNvbnN0IGtpZFJlZiA9IGtpZC5nZXRSYXcoIk9iaiIpOwogICAgICByZXR1cm4gbmV3IFN0cnVjdEVsZW1lbnQoewogICAgICAgIHR5cGU6IFN0cnVjdEVsZW1lbnRUeXBlLk9CSkVDVCwKICAgICAgICByZWZPYmpJZDoga2lkUmVmIGluc3RhbmNlb2YgUmVmID8ga2lkUmVmLnRvU3RyaW5nKCkgOiBudWxsLAogICAgICAgIHBhZ2VPYmpJZAogICAgICB9KTsKICAgIH0KICAgIHJldHVybiBuZXcgU3RydWN0RWxlbWVudCh7CiAgICAgIHR5cGU6IFN0cnVjdEVsZW1lbnRUeXBlLkVMRU1FTlQsCiAgICAgIGRpY3Q6IGtpZAogICAgfSk7CiAgfQp9CmNsYXNzIFN0cnVjdEVsZW1lbnQgewogIGNvbnN0cnVjdG9yKHsKICAgIHR5cGUsCiAgICBkaWN0ID0gbnVsbCwKICAgIG1jaWQgPSBudWxsLAogICAgcGFnZU9iaklkID0gbnVsbCwKICAgIHJlZk9iaklkID0gbnVsbAogIH0pIHsKICAgIHRoaXMudHlwZSA9IHR5cGU7CiAgICB0aGlzLmRpY3QgPSBkaWN0OwogICAgdGhpcy5tY2lkID0gbWNpZDsKICAgIHRoaXMucGFnZU9iaklkID0gcGFnZU9iaklkOwogICAgdGhpcy5yZWZPYmpJZCA9IHJlZk9iaklkOwogICAgdGhpcy5wYXJlbnROb2RlID0gbnVsbDsKICB9Cn0KY2xhc3MgU3RydWN0VHJlZVBhZ2UgewogIGNvbnN0cnVjdG9yKHN0cnVjdFRyZWVSb290LCBwYWdlRGljdCkgewogICAgdGhpcy5yb290ID0gc3RydWN0VHJlZVJvb3Q7CiAgICB0aGlzLnhyZWYgPSBzdHJ1Y3RUcmVlUm9vdD8ueHJlZiA/PyBudWxsOwogICAgdGhpcy5yb290RGljdCA9IHN0cnVjdFRyZWVSb290Py5kaWN0ID8/IG51bGw7CiAgICB0aGlzLnBhZ2VEaWN0ID0gcGFnZURpY3Q7CiAgICB0aGlzLm5vZGVzID0gW107CiAgfQogIGNvbGxlY3RPYmplY3RzKHBhZ2VSZWYpIHsKICAgIGlmICghdGhpcy5yb290IHx8ICF0aGlzLnJvb3REaWN0IHx8ICEocGFnZVJlZiBpbnN0YW5jZW9mIFJlZikpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb25zdCBwYXJlbnRUcmVlID0gdGhpcy5yb290RGljdC5nZXQoIlBhcmVudFRyZWUiKTsKICAgIGlmICghcGFyZW50VHJlZSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IGlkcyA9IHRoaXMucm9vdC5zdHJ1Y3RQYXJlbnRJZHM/LmdldChwYWdlUmVmKTsKICAgIGlmICghaWRzKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3QgbWFwID0gbmV3IE1hcCgpOwogICAgY29uc3QgbnVtYmVyVHJlZSA9IG5ldyBOdW1iZXJUcmVlKHBhcmVudFRyZWUsIHRoaXMueHJlZik7CiAgICBmb3IgKGNvbnN0IFtlbGVtSWRdIG9mIGlkcykgewogICAgICBjb25zdCBvYmogPSBudW1iZXJUcmVlLmdldFJhdyhlbGVtSWQpOwogICAgICBpZiAob2JqIGluc3RhbmNlb2YgUmVmKSB7CiAgICAgICAgbWFwLnNldChlbGVtSWQsIG9iaik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBtYXA7CiAgfQogIHBhcnNlKHBhZ2VSZWYpIHsKICAgIGlmICghdGhpcy5yb290IHx8ICF0aGlzLnJvb3REaWN0IHx8ICEocGFnZVJlZiBpbnN0YW5jZW9mIFJlZikpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgcGFyZW50VHJlZSA9IHRoaXMucm9vdERpY3QuZ2V0KCJQYXJlbnRUcmVlIik7CiAgICBpZiAoIXBhcmVudFRyZWUpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgaWQgPSB0aGlzLnBhZ2VEaWN0LmdldCgiU3RydWN0UGFyZW50cyIpOwogICAgY29uc3QgaWRzID0gdGhpcy5yb290LnN0cnVjdFBhcmVudElkcz8uZ2V0KHBhZ2VSZWYpOwogICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGlkKSAmJiAhaWRzKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IG1hcCA9IG5ldyBNYXAoKTsKICAgIGNvbnN0IG51bWJlclRyZWUgPSBuZXcgTnVtYmVyVHJlZShwYXJlbnRUcmVlLCB0aGlzLnhyZWYpOwogICAgaWYgKE51bWJlci5pc0ludGVnZXIoaWQpKSB7CiAgICAgIGNvbnN0IHBhcmVudEFycmF5ID0gbnVtYmVyVHJlZS5nZXQoaWQpOwogICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJlbnRBcnJheSkpIHsKICAgICAgICBmb3IgKGNvbnN0IHJlZiBvZiBwYXJlbnRBcnJheSkgewogICAgICAgICAgaWYgKHJlZiBpbnN0YW5jZW9mIFJlZikgewogICAgICAgICAgICB0aGlzLmFkZE5vZGUodGhpcy54cmVmLmZldGNoKHJlZiksIG1hcCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoIWlkcykgewogICAgICByZXR1cm47CiAgICB9CiAgICBmb3IgKGNvbnN0IFtlbGVtSWQsIHR5cGVdIG9mIGlkcykgewogICAgICBjb25zdCBvYmogPSBudW1iZXJUcmVlLmdldChlbGVtSWQpOwogICAgICBpZiAob2JqKSB7CiAgICAgICAgY29uc3QgZWxlbSA9IHRoaXMuYWRkTm9kZSh0aGlzLnhyZWYuZmV0Y2hJZlJlZihvYmopLCBtYXApOwogICAgICAgIGlmIChlbGVtPy5raWRzPy5sZW5ndGggPT09IDEgJiYgZWxlbS5raWRzWzBdLnR5cGUgPT09IFN0cnVjdEVsZW1lbnRUeXBlLk9CSkVDVCkgewogICAgICAgICAgZWxlbS5raWRzWzBdLnR5cGUgPSB0eXBlOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICBhZGROb2RlKGRpY3QsIG1hcCwgbGV2ZWwgPSAwKSB7CiAgICBpZiAobGV2ZWwgPiBNQVhfREVQVEgpIHsKICAgICAgd2FybigiU3RydWN0VHJlZSBNQVhfREVQVEggcmVhY2hlZC4iKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBpZiAoIShkaWN0IGluc3RhbmNlb2YgRGljdCkpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBpZiAobWFwLmhhcyhkaWN0KSkgewogICAgICByZXR1cm4gbWFwLmdldChkaWN0KTsKICAgIH0KICAgIGNvbnN0IGVsZW1lbnQgPSBuZXcgU3RydWN0RWxlbWVudE5vZGUodGhpcywgZGljdCk7CiAgICBtYXAuc2V0KGRpY3QsIGVsZW1lbnQpOwogICAgY29uc3QgcGFyZW50ID0gZGljdC5nZXQoIlAiKTsKICAgIGlmICghcGFyZW50IHx8IGlzTmFtZShwYXJlbnQuZ2V0KCJUeXBlIiksICJTdHJ1Y3RUcmVlUm9vdCIpKSB7CiAgICAgIGlmICghdGhpcy5hZGRUb3BMZXZlbE5vZGUoZGljdCwgZWxlbWVudCkpIHsKICAgICAgICBtYXAuZGVsZXRlKGRpY3QpOwogICAgICB9CiAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQogICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMuYWRkTm9kZShwYXJlbnQsIG1hcCwgbGV2ZWwgKyAxKTsKICAgIGlmICghcGFyZW50Tm9kZSkgewogICAgICByZXR1cm4gZWxlbWVudDsKICAgIH0KICAgIGxldCBzYXZlID0gZmFsc2U7CiAgICBmb3IgKGNvbnN0IGtpZCBvZiBwYXJlbnROb2RlLmtpZHMpIHsKICAgICAgaWYgKGtpZC50eXBlID09PSBTdHJ1Y3RFbGVtZW50VHlwZS5FTEVNRU5UICYmIGtpZC5kaWN0ID09PSBkaWN0KSB7CiAgICAgICAga2lkLnBhcmVudE5vZGUgPSBlbGVtZW50OwogICAgICAgIHNhdmUgPSB0cnVlOwogICAgICB9CiAgICB9CiAgICBpZiAoIXNhdmUpIHsKICAgICAgbWFwLmRlbGV0ZShkaWN0KTsKICAgIH0KICAgIHJldHVybiBlbGVtZW50OwogIH0KICBhZGRUb3BMZXZlbE5vZGUoZGljdCwgZWxlbWVudCkgewogICAgY29uc3Qgb2JqID0gdGhpcy5yb290RGljdC5nZXQoIksiKTsKICAgIGlmICghb2JqKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmIChvYmogaW5zdGFuY2VvZiBEaWN0KSB7CiAgICAgIGlmIChvYmoub2JqSWQgIT09IGRpY3Qub2JqSWQpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgdGhpcy5ub2Rlc1swXSA9IGVsZW1lbnQ7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKCFBcnJheS5pc0FycmF5KG9iaikpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBsZXQgc2F2ZSA9IGZhbHNlOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3Qga2lkUmVmID0gb2JqW2ldOwogICAgICBpZiAoa2lkUmVmPy50b1N0cmluZygpID09PSBkaWN0Lm9iaklkKSB7CiAgICAgICAgdGhpcy5ub2Rlc1tpXSA9IGVsZW1lbnQ7CiAgICAgICAgc2F2ZSA9IHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBzYXZlOwogIH0KICBnZXQgc2VyaWFsaXphYmxlKCkgewogICAgZnVuY3Rpb24gbm9kZVRvU2VyaWFsaXphYmxlKG5vZGUsIHBhcmVudCwgbGV2ZWwgPSAwKSB7CiAgICAgIGlmIChsZXZlbCA+IE1BWF9ERVBUSCkgewogICAgICAgIHdhcm4oIlN0cnVjdFRyZWUgdG9vIGRlZXAgdG8gYmUgZnVsbHkgc2VyaWFsaXplZC4iKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgICAgb2JqLnJvbGUgPSBub2RlLnJvbGU7CiAgICAgIG9iai5jaGlsZHJlbiA9IFtdOwogICAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaChvYmopOwogICAgICBsZXQgYWx0ID0gbm9kZS5kaWN0LmdldCgiQWx0Iik7CiAgICAgIGlmICh0eXBlb2YgYWx0ICE9PSAic3RyaW5nIikgewogICAgICAgIGFsdCA9IG5vZGUuZGljdC5nZXQoIkFjdHVhbFRleHQiKTsKICAgICAgfQogICAgICBpZiAodHlwZW9mIGFsdCA9PT0gInN0cmluZyIpIHsKICAgICAgICBvYmouYWx0ID0gc3RyaW5nVG9QREZTdHJpbmcoYWx0KTsKICAgICAgfQogICAgICBjb25zdCBhID0gbm9kZS5kaWN0LmdldCgiQSIpOwogICAgICBpZiAoYSBpbnN0YW5jZW9mIERpY3QpIHsKICAgICAgICBjb25zdCBiYm94ID0gbG9va3VwTm9ybWFsUmVjdChhLmdldEFycmF5KCJCQm94IiksIG51bGwpOwogICAgICAgIGlmIChiYm94KSB7CiAgICAgICAgICBvYmouYmJveCA9IGJib3g7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IHdpZHRoID0gYS5nZXQoIldpZHRoIik7CiAgICAgICAgICBjb25zdCBoZWlnaHQgPSBhLmdldCgiSGVpZ2h0Iik7CiAgICAgICAgICBpZiAodHlwZW9mIHdpZHRoID09PSAibnVtYmVyIiAmJiB3aWR0aCA+IDAgJiYgdHlwZW9mIGhlaWdodCA9PT0gIm51bWJlciIgJiYgaGVpZ2h0ID4gMCkgewogICAgICAgICAgICBvYmouYmJveCA9IFswLCAwLCB3aWR0aCwgaGVpZ2h0XTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgY29uc3QgbGFuZyA9IG5vZGUuZGljdC5nZXQoIkxhbmciKTsKICAgICAgaWYgKHR5cGVvZiBsYW5nID09PSAic3RyaW5nIikgewogICAgICAgIG9iai5sYW5nID0gc3RyaW5nVG9QREZTdHJpbmcobGFuZyk7CiAgICAgIH0KICAgICAgZm9yIChjb25zdCBraWQgb2Ygbm9kZS5raWRzKSB7CiAgICAgICAgY29uc3Qga2lkRWxlbWVudCA9IGtpZC50eXBlID09PSBTdHJ1Y3RFbGVtZW50VHlwZS5FTEVNRU5UID8ga2lkLnBhcmVudE5vZGUgOiBudWxsOwogICAgICAgIGlmIChraWRFbGVtZW50KSB7CiAgICAgICAgICBub2RlVG9TZXJpYWxpemFibGUoa2lkRWxlbWVudCwgb2JqLCBsZXZlbCArIDEpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfSBlbHNlIGlmIChraWQudHlwZSA9PT0gU3RydWN0RWxlbWVudFR5cGUuUEFHRV9DT05URU5UIHx8IGtpZC50eXBlID09PSBTdHJ1Y3RFbGVtZW50VHlwZS5TVFJFQU1fQ09OVEVOVCkgewogICAgICAgICAgb2JqLmNoaWxkcmVuLnB1c2goewogICAgICAgICAgICB0eXBlOiAiY29udGVudCIsCiAgICAgICAgICAgIGlkOiBgcCR7a2lkLnBhZ2VPYmpJZH1fbWMke2tpZC5tY2lkfWAKICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSBpZiAoa2lkLnR5cGUgPT09IFN0cnVjdEVsZW1lbnRUeXBlLk9CSkVDVCkgewogICAgICAgICAgb2JqLmNoaWxkcmVuLnB1c2goewogICAgICAgICAgICB0eXBlOiAib2JqZWN0IiwKICAgICAgICAgICAgaWQ6IGtpZC5yZWZPYmpJZAogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIGlmIChraWQudHlwZSA9PT0gU3RydWN0RWxlbWVudFR5cGUuQU5OT1RBVElPTikgewogICAgICAgICAgb2JqLmNoaWxkcmVuLnB1c2goewogICAgICAgICAgICB0eXBlOiAiYW5ub3RhdGlvbiIsCiAgICAgICAgICAgIGlkOiBgJHtBbm5vdGF0aW9uUHJlZml4fSR7a2lkLnJlZk9iaklkfWAKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgY29uc3Qgcm9vdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICByb290LmNoaWxkcmVuID0gW107CiAgICByb290LnJvbGUgPSAiUm9vdCI7CiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMubm9kZXMpIHsKICAgICAgaWYgKCFjaGlsZCkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIG5vZGVUb1NlcmlhbGl6YWJsZShjaGlsZCwgcm9vdCk7CiAgICB9CiAgICByZXR1cm4gcm9vdDsKICB9Cn0KCjsvLyAuL3NyYy9jb3JlL2NhdGFsb2cuanMKCgoKCgoKCgoKCgpjb25zdCBpc1JlZiA9IHYgPT4gdiBpbnN0YW5jZW9mIFJlZjsKY29uc3QgaXNWYWxpZEV4cGxpY2l0RGVzdCA9IF9pc1ZhbGlkRXhwbGljaXREZXN0LmJpbmQobnVsbCwgaXNSZWYsIGlzTmFtZSk7CmZ1bmN0aW9uIGZldGNoRGVzdChkZXN0KSB7CiAgaWYgKGRlc3QgaW5zdGFuY2VvZiBEaWN0KSB7CiAgICBkZXN0ID0gZGVzdC5nZXQoIkQiKTsKICB9CiAgcmV0dXJuIGlzVmFsaWRFeHBsaWNpdERlc3QoZGVzdCkgPyBkZXN0IDogbnVsbDsKfQpmdW5jdGlvbiBmZXRjaFJlbW90ZURlc3QoYWN0aW9uKSB7CiAgbGV0IGRlc3QgPSBhY3Rpb24uZ2V0KCJEIik7CiAgaWYgKGRlc3QpIHsKICAgIGlmIChkZXN0IGluc3RhbmNlb2YgTmFtZSkgewogICAgICBkZXN0ID0gZGVzdC5uYW1lOwogICAgfQogICAgaWYgKHR5cGVvZiBkZXN0ID09PSAic3RyaW5nIikgewogICAgICByZXR1cm4gc3RyaW5nVG9QREZTdHJpbmcoZGVzdCk7CiAgICB9IGVsc2UgaWYgKGlzVmFsaWRFeHBsaWNpdERlc3QoZGVzdCkpIHsKICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGRlc3QpOwogICAgfQogIH0KICByZXR1cm4gbnVsbDsKfQpjbGFzcyBDYXRhbG9nIHsKICBjb25zdHJ1Y3RvcihwZGZNYW5hZ2VyLCB4cmVmKSB7CiAgICB0aGlzLnBkZk1hbmFnZXIgPSBwZGZNYW5hZ2VyOwogICAgdGhpcy54cmVmID0geHJlZjsKICAgIHRoaXMuX2NhdERpY3QgPSB4cmVmLmdldENhdGFsb2dPYmooKTsKICAgIGlmICghKHRoaXMuX2NhdERpY3QgaW5zdGFuY2VvZiBEaWN0KSkgewogICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkNhdGFsb2cgb2JqZWN0IGlzIG5vdCBhIGRpY3Rpb25hcnkuIik7CiAgICB9CiAgICB0aGlzLnRvcGxldmVsUGFnZXNEaWN0OwogICAgdGhpcy5fYWN0dWFsTnVtUGFnZXMgPSBudWxsOwogICAgdGhpcy5mb250Q2FjaGUgPSBuZXcgUmVmU2V0Q2FjaGUoKTsKICAgIHRoaXMuYnVpbHRJbkNNYXBDYWNoZSA9IG5ldyBNYXAoKTsKICAgIHRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlID0gbmV3IE1hcCgpOwogICAgdGhpcy5nbG9iYWxDb2xvclNwYWNlQ2FjaGUgPSBuZXcgR2xvYmFsQ29sb3JTcGFjZUNhY2hlKCk7CiAgICB0aGlzLmdsb2JhbEltYWdlQ2FjaGUgPSBuZXcgR2xvYmFsSW1hZ2VDYWNoZSgpOwogICAgdGhpcy5wYWdlS2lkc0NvdW50Q2FjaGUgPSBuZXcgUmVmU2V0Q2FjaGUoKTsKICAgIHRoaXMucGFnZUluZGV4Q2FjaGUgPSBuZXcgUmVmU2V0Q2FjaGUoKTsKICAgIHRoaXMucGFnZURpY3RDYWNoZSA9IG5ldyBSZWZTZXRDYWNoZSgpOwogICAgdGhpcy5ub25CbGVuZE1vZGVzU2V0ID0gbmV3IFJlZlNldCgpOwogICAgdGhpcy5zeXN0ZW1Gb250Q2FjaGUgPSBuZXcgTWFwKCk7CiAgfQogIGNsb25lRGljdCgpIHsKICAgIHJldHVybiB0aGlzLl9jYXREaWN0LmNsb25lKCk7CiAgfQogIGdldCB2ZXJzaW9uKCkgewogICAgY29uc3QgdmVyc2lvbiA9IHRoaXMuX2NhdERpY3QuZ2V0KCJWZXJzaW9uIik7CiAgICBpZiAodmVyc2lvbiBpbnN0YW5jZW9mIE5hbWUpIHsKICAgICAgaWYgKFBERl9WRVJTSU9OX1JFR0VYUC50ZXN0KHZlcnNpb24ubmFtZSkpIHsKICAgICAgICByZXR1cm4gc2hhZG93KHRoaXMsICJ2ZXJzaW9uIiwgdmVyc2lvbi5uYW1lKTsKICAgICAgfQogICAgICB3YXJuKGBJbnZhbGlkIFBERiBjYXRhbG9nIHZlcnNpb246ICR7dmVyc2lvbi5uYW1lfWApOwogICAgfQogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAidmVyc2lvbiIsIG51bGwpOwogIH0KICBnZXQgbGFuZygpIHsKICAgIGNvbnN0IGxhbmcgPSB0aGlzLl9jYXREaWN0LmdldCgiTGFuZyIpOwogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAibGFuZyIsIGxhbmcgJiYgdHlwZW9mIGxhbmcgPT09ICJzdHJpbmciID8gc3RyaW5nVG9QREZTdHJpbmcobGFuZykgOiBudWxsKTsKICB9CiAgZ2V0IG5lZWRzUmVuZGVyaW5nKCkgewogICAgY29uc3QgbmVlZHNSZW5kZXJpbmcgPSB0aGlzLl9jYXREaWN0LmdldCgiTmVlZHNSZW5kZXJpbmciKTsKICAgIHJldHVybiBzaGFkb3codGhpcywgIm5lZWRzUmVuZGVyaW5nIiwgdHlwZW9mIG5lZWRzUmVuZGVyaW5nID09PSAiYm9vbGVhbiIgPyBuZWVkc1JlbmRlcmluZyA6IGZhbHNlKTsKICB9CiAgZ2V0IGNvbGxlY3Rpb24oKSB7CiAgICBsZXQgY29sbGVjdGlvbiA9IG51bGw7CiAgICB0cnkgewogICAgICBjb25zdCBvYmogPSB0aGlzLl9jYXREaWN0LmdldCgiQ29sbGVjdGlvbiIpOwogICAgICBpZiAob2JqIGluc3RhbmNlb2YgRGljdCAmJiBvYmouc2l6ZSA+IDApIHsKICAgICAgICBjb2xsZWN0aW9uID0gb2JqOwogICAgICB9CiAgICB9IGNhdGNoIChleCkgewogICAgICBpZiAoZXggaW5zdGFuY2VvZiBNaXNzaW5nRGF0YUV4Y2VwdGlvbikgewogICAgICAgIHRocm93IGV4OwogICAgICB9CiAgICAgIGluZm8oIkNhbm5vdCBmZXRjaCBDb2xsZWN0aW9uIGVudHJ5OyBhc3N1bWluZyBubyBjb2xsZWN0aW9uIGlzIHByZXNlbnQuIik7CiAgICB9CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJjb2xsZWN0aW9uIiwgY29sbGVjdGlvbik7CiAgfQogIGdldCBhY3JvRm9ybSgpIHsKICAgIGxldCBhY3JvRm9ybSA9IG51bGw7CiAgICB0cnkgewogICAgICBjb25zdCBvYmogPSB0aGlzLl9jYXREaWN0LmdldCgiQWNyb0Zvcm0iKTsKICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIERpY3QgJiYgb2JqLnNpemUgPiAwKSB7CiAgICAgICAgYWNyb0Zvcm0gPSBvYmo7CiAgICAgIH0KICAgIH0gY2F0Y2ggKGV4KSB7CiAgICAgIGlmIChleCBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7CiAgICAgICAgdGhyb3cgZXg7CiAgICAgIH0KICAgICAgaW5mbygiQ2Fubm90IGZldGNoIEFjcm9Gb3JtIGVudHJ5OyBhc3N1bWluZyBubyBmb3JtcyBhcmUgcHJlc2VudC4iKTsKICAgIH0KICAgIHJldHVybiBzaGFkb3codGhpcywgImFjcm9Gb3JtIiwgYWNyb0Zvcm0pOwogIH0KICBnZXQgYWNyb0Zvcm1SZWYoKSB7CiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2NhdERpY3QuZ2V0UmF3KCJBY3JvRm9ybSIpOwogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAiYWNyb0Zvcm1SZWYiLCB2YWx1ZSBpbnN0YW5jZW9mIFJlZiA/IHZhbHVlIDogbnVsbCk7CiAgfQogIGdldCBtZXRhZGF0YSgpIHsKICAgIGNvbnN0IHN0cmVhbVJlZiA9IHRoaXMuX2NhdERpY3QuZ2V0UmF3KCJNZXRhZGF0YSIpOwogICAgaWYgKCEoc3RyZWFtUmVmIGluc3RhbmNlb2YgUmVmKSkgewogICAgICByZXR1cm4gc2hhZG93KHRoaXMsICJtZXRhZGF0YSIsIG51bGwpOwogICAgfQogICAgbGV0IG1ldGFkYXRhID0gbnVsbDsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMueHJlZi5mZXRjaChzdHJlYW1SZWYsICF0aGlzLnhyZWYuZW5jcnlwdD8uZW5jcnlwdE1ldGFkYXRhKTsKICAgICAgaWYgKHN0cmVhbSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0gJiYgc3RyZWFtLmRpY3QgaW5zdGFuY2VvZiBEaWN0KSB7CiAgICAgICAgY29uc3QgdHlwZSA9IHN0cmVhbS5kaWN0LmdldCgiVHlwZSIpOwogICAgICAgIGNvbnN0IHN1YnR5cGUgPSBzdHJlYW0uZGljdC5nZXQoIlN1YnR5cGUiKTsKICAgICAgICBpZiAoaXNOYW1lKHR5cGUsICJNZXRhZGF0YSIpICYmIGlzTmFtZShzdWJ0eXBlLCAiWE1MIikpIHsKICAgICAgICAgIGNvbnN0IGRhdGEgPSBzdHJpbmdUb1VURjhTdHJpbmcoc3RyZWFtLmdldFN0cmluZygpKTsKICAgICAgICAgIGlmIChkYXRhKSB7CiAgICAgICAgICAgIG1ldGFkYXRhID0gbmV3IE1ldGFkYXRhUGFyc2VyKGRhdGEpLnNlcmlhbGl6YWJsZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0gY2F0Y2ggKGV4KSB7CiAgICAgIGlmIChleCBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7CiAgICAgICAgdGhyb3cgZXg7CiAgICAgIH0KICAgICAgaW5mbyhgU2tpcHBpbmcgaW52YWxpZCBNZXRhZGF0YTogIiR7ZXh9Ii5gKTsKICAgIH0KICAgIHJldHVybiBzaGFkb3codGhpcywgIm1ldGFkYXRhIiwgbWV0YWRhdGEpOwogIH0KICBnZXQgbWFya0luZm8oKSB7CiAgICBsZXQgbWFya0luZm8gPSBudWxsOwogICAgdHJ5IHsKICAgICAgbWFya0luZm8gPSB0aGlzLl9yZWFkTWFya0luZm8oKTsKICAgIH0gY2F0Y2ggKGV4KSB7CiAgICAgIGlmIChleCBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7CiAgICAgICAgdGhyb3cgZXg7CiAgICAgIH0KICAgICAgd2FybigiVW5hYmxlIHRvIHJlYWQgbWFyayBpbmZvLiIpOwogICAgfQogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAibWFya0luZm8iLCBtYXJrSW5mbyk7CiAgfQogIF9yZWFkTWFya0luZm8oKSB7CiAgICBjb25zdCBvYmogPSB0aGlzLl9jYXREaWN0LmdldCgiTWFya0luZm8iKTsKICAgIGlmICghKG9iaiBpbnN0YW5jZW9mIERpY3QpKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3QgbWFya0luZm8gPSB7CiAgICAgIE1hcmtlZDogZmFsc2UsCiAgICAgIFVzZXJQcm9wZXJ0aWVzOiBmYWxzZSwKICAgICAgU3VzcGVjdHM6IGZhbHNlCiAgICB9OwogICAgZm9yIChjb25zdCBrZXkgaW4gbWFya0luZm8pIHsKICAgICAgY29uc3QgdmFsdWUgPSBvYmouZ2V0KGtleSk7CiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICJib29sZWFuIikgewogICAgICAgIG1hcmtJbmZvW2tleV0gPSB2YWx1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG1hcmtJbmZvOwogIH0KICBnZXQgc3RydWN0VHJlZVJvb3QoKSB7CiAgICBsZXQgc3RydWN0VHJlZSA9IG51bGw7CiAgICB0cnkgewogICAgICBzdHJ1Y3RUcmVlID0gdGhpcy4jcmVhZFN0cnVjdFRyZWVSb290KCk7CiAgICB9IGNhdGNoIChleCkgewogICAgICBpZiAoZXggaW5zdGFuY2VvZiBNaXNzaW5nRGF0YUV4Y2VwdGlvbikgewogICAgICAgIHRocm93IGV4OwogICAgICB9CiAgICAgIHdhcm4oIlVuYWJsZSByZWFkIHRvIHN0cnVjdFRyZWVSb290IGluZm8uIik7CiAgICB9CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJzdHJ1Y3RUcmVlUm9vdCIsIHN0cnVjdFRyZWUpOwogIH0KICAjcmVhZFN0cnVjdFRyZWVSb290KCkgewogICAgY29uc3QgcmF3T2JqID0gdGhpcy5fY2F0RGljdC5nZXRSYXcoIlN0cnVjdFRyZWVSb290Iik7CiAgICBjb25zdCBvYmogPSB0aGlzLnhyZWYuZmV0Y2hJZlJlZihyYXdPYmopOwogICAgaWYgKCEob2JqIGluc3RhbmNlb2YgRGljdCkpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb25zdCByb290ID0gbmV3IFN0cnVjdFRyZWVSb290KHRoaXMueHJlZiwgb2JqLCByYXdPYmopOwogICAgcm9vdC5pbml0KCk7CiAgICByZXR1cm4gcm9vdDsKICB9CiAgZ2V0IHRvcGxldmVsUGFnZXNEaWN0KCkgewogICAgY29uc3QgcGFnZXNPYmogPSB0aGlzLl9jYXREaWN0LmdldCgiUGFnZXMiKTsKICAgIGlmICghKHBhZ2VzT2JqIGluc3RhbmNlb2YgRGljdCkpIHsKICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIHRvcC1sZXZlbCBwYWdlcyBkaWN0aW9uYXJ5LiIpOwogICAgfQogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAidG9wbGV2ZWxQYWdlc0RpY3QiLCBwYWdlc09iaik7CiAgfQogIGdldCBkb2N1bWVudE91dGxpbmUoKSB7CiAgICBsZXQgb2JqID0gbnVsbDsKICAgIHRyeSB7CiAgICAgIG9iaiA9IHRoaXMuX3JlYWREb2N1bWVudE91dGxpbmUoKTsKICAgIH0gY2F0Y2ggKGV4KSB7CiAgICAgIGlmIChleCBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7CiAgICAgICAgdGhyb3cgZXg7CiAgICAgIH0KICAgICAgd2FybigiVW5hYmxlIHRvIHJlYWQgZG9jdW1lbnQgb3V0bGluZS4iKTsKICAgIH0KICAgIHJldHVybiBzaGFkb3codGhpcywgImRvY3VtZW50T3V0bGluZSIsIG9iaik7CiAgfQogIF9yZWFkRG9jdW1lbnRPdXRsaW5lKCkgewogICAgbGV0IG9iaiA9IHRoaXMuX2NhdERpY3QuZ2V0KCJPdXRsaW5lcyIpOwogICAgaWYgKCEob2JqIGluc3RhbmNlb2YgRGljdCkpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBvYmogPSBvYmouZ2V0UmF3KCJGaXJzdCIpOwogICAgaWYgKCEob2JqIGluc3RhbmNlb2YgUmVmKSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IHJvb3QgPSB7CiAgICAgIGl0ZW1zOiBbXQogICAgfTsKICAgIGNvbnN0IHF1ZXVlID0gW3sKICAgICAgb2JqLAogICAgICBwYXJlbnQ6IHJvb3QKICAgIH1dOwogICAgY29uc3QgcHJvY2Vzc2VkID0gbmV3IFJlZlNldCgpOwogICAgcHJvY2Vzc2VkLnB1dChvYmopOwogICAgY29uc3QgeHJlZiA9IHRoaXMueHJlZiwKICAgICAgYmxhY2tDb2xvciA9IG5ldyBVaW50OENsYW1wZWRBcnJheSgzKTsKICAgIHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKSB7CiAgICAgIGNvbnN0IGkgPSBxdWV1ZS5zaGlmdCgpOwogICAgICBjb25zdCBvdXRsaW5lRGljdCA9IHhyZWYuZmV0Y2hJZlJlZihpLm9iaik7CiAgICAgIGlmIChvdXRsaW5lRGljdCA9PT0gbnVsbCkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmICghb3V0bGluZURpY3QuaGFzKCJUaXRsZSIpKSB7CiAgICAgICAgd2FybigiSW52YWxpZCBvdXRsaW5lIGl0ZW0gZW5jb3VudGVyZWQuIik7CiAgICAgIH0KICAgICAgY29uc3QgZGF0YSA9IHsKICAgICAgICB1cmw6IG51bGwsCiAgICAgICAgZGVzdDogbnVsbCwKICAgICAgICBhY3Rpb246IG51bGwKICAgICAgfTsKICAgICAgQ2F0YWxvZy5wYXJzZURlc3REaWN0aW9uYXJ5KHsKICAgICAgICBkZXN0RGljdDogb3V0bGluZURpY3QsCiAgICAgICAgcmVzdWx0T2JqOiBkYXRhLAogICAgICAgIGRvY0Jhc2VVcmw6IHRoaXMuYmFzZVVybCwKICAgICAgICBkb2NBdHRhY2htZW50czogdGhpcy5hdHRhY2htZW50cwogICAgICB9KTsKICAgICAgY29uc3QgdGl0bGUgPSBvdXRsaW5lRGljdC5nZXQoIlRpdGxlIik7CiAgICAgIGNvbnN0IGZsYWdzID0gb3V0bGluZURpY3QuZ2V0KCJGIikgfHwgMDsKICAgICAgY29uc3QgY29sb3IgPSBvdXRsaW5lRGljdC5nZXRBcnJheSgiQyIpOwogICAgICBjb25zdCBjb3VudCA9IG91dGxpbmVEaWN0LmdldCgiQ291bnQiKTsKICAgICAgbGV0IHJnYkNvbG9yID0gYmxhY2tDb2xvcjsKICAgICAgaWYgKGlzTnVtYmVyQXJyYXkoY29sb3IsIDMpICYmIChjb2xvclswXSAhPT0gMCB8fCBjb2xvclsxXSAhPT0gMCB8fCBjb2xvclsyXSAhPT0gMCkpIHsKICAgICAgICByZ2JDb2xvciA9IENvbG9yU3BhY2VVdGlscy5yZ2IuZ2V0UmdiKGNvbG9yLCAwKTsKICAgICAgfQogICAgICBjb25zdCBvdXRsaW5lSXRlbSA9IHsKICAgICAgICBhY3Rpb246IGRhdGEuYWN0aW9uLAogICAgICAgIGF0dGFjaG1lbnQ6IGRhdGEuYXR0YWNobWVudCwKICAgICAgICBkZXN0OiBkYXRhLmRlc3QsCiAgICAgICAgdXJsOiBkYXRhLnVybCwKICAgICAgICB1bnNhZmVVcmw6IGRhdGEudW5zYWZlVXJsLAogICAgICAgIG5ld1dpbmRvdzogZGF0YS5uZXdXaW5kb3csCiAgICAgICAgc2V0T0NHU3RhdGU6IGRhdGEuc2V0T0NHU3RhdGUsCiAgICAgICAgdGl0bGU6IHR5cGVvZiB0aXRsZSA9PT0gInN0cmluZyIgPyBzdHJpbmdUb1BERlN0cmluZyh0aXRsZSkgOiAiIiwKICAgICAgICBjb2xvcjogcmdiQ29sb3IsCiAgICAgICAgY291bnQ6IE51bWJlci5pc0ludGVnZXIoY291bnQpID8gY291bnQgOiB1bmRlZmluZWQsCiAgICAgICAgYm9sZDogISEoZmxhZ3MgJiAyKSwKICAgICAgICBpdGFsaWM6ICEhKGZsYWdzICYgMSksCiAgICAgICAgaXRlbXM6IFtdCiAgICAgIH07CiAgICAgIGkucGFyZW50Lml0ZW1zLnB1c2gob3V0bGluZUl0ZW0pOwogICAgICBvYmogPSBvdXRsaW5lRGljdC5nZXRSYXcoIkZpcnN0Iik7CiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBSZWYgJiYgIXByb2Nlc3NlZC5oYXMob2JqKSkgewogICAgICAgIHF1ZXVlLnB1c2goewogICAgICAgICAgb2JqLAogICAgICAgICAgcGFyZW50OiBvdXRsaW5lSXRlbQogICAgICAgIH0pOwogICAgICAgIHByb2Nlc3NlZC5wdXQob2JqKTsKICAgICAgfQogICAgICBvYmogPSBvdXRsaW5lRGljdC5nZXRSYXcoIk5leHQiKTsKICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIFJlZiAmJiAhcHJvY2Vzc2VkLmhhcyhvYmopKSB7CiAgICAgICAgcXVldWUucHVzaCh7CiAgICAgICAgICBvYmosCiAgICAgICAgICBwYXJlbnQ6IGkucGFyZW50CiAgICAgICAgfSk7CiAgICAgICAgcHJvY2Vzc2VkLnB1dChvYmopOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcm9vdC5pdGVtcy5sZW5ndGggPiAwID8gcm9vdC5pdGVtcyA6IG51bGw7CiAgfQogIGdldCBwZXJtaXNzaW9ucygpIHsKICAgIGxldCBwZXJtaXNzaW9ucyA9IG51bGw7CiAgICB0cnkgewogICAgICBwZXJtaXNzaW9ucyA9IHRoaXMuX3JlYWRQZXJtaXNzaW9ucygpOwogICAgfSBjYXRjaCAoZXgpIHsKICAgICAgaWYgKGV4IGluc3RhbmNlb2YgTWlzc2luZ0RhdGFFeGNlcHRpb24pIHsKICAgICAgICB0aHJvdyBleDsKICAgICAgfQogICAgICB3YXJuKCJVbmFibGUgdG8gcmVhZCBwZXJtaXNzaW9ucy4iKTsKICAgIH0KICAgIHJldHVybiBzaGFkb3codGhpcywgInBlcm1pc3Npb25zIiwgcGVybWlzc2lvbnMpOwogIH0KICBfcmVhZFBlcm1pc3Npb25zKCkgewogICAgY29uc3QgZW5jcnlwdCA9IHRoaXMueHJlZi50cmFpbGVyLmdldCgiRW5jcnlwdCIpOwogICAgaWYgKCEoZW5jcnlwdCBpbnN0YW5jZW9mIERpY3QpKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgbGV0IGZsYWdzID0gZW5jcnlwdC5nZXQoIlAiKTsKICAgIGlmICh0eXBlb2YgZmxhZ3MgIT09ICJudW1iZXIiKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgZmxhZ3MgKz0gMiAqKiAzMjsKICAgIGNvbnN0IHBlcm1pc3Npb25zID0gW107CiAgICBmb3IgKGNvbnN0IGtleSBpbiBQZXJtaXNzaW9uRmxhZykgewogICAgICBjb25zdCB2YWx1ZSA9IFBlcm1pc3Npb25GbGFnW2tleV07CiAgICAgIGlmIChmbGFncyAmIHZhbHVlKSB7CiAgICAgICAgcGVybWlzc2lvbnMucHVzaCh2YWx1ZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBwZXJtaXNzaW9uczsKICB9CiAgZ2V0IG9wdGlvbmFsQ29udGVudENvbmZpZygpIHsKICAgIGxldCBjb25maWcgPSBudWxsOwogICAgdHJ5IHsKICAgICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMuX2NhdERpY3QuZ2V0KCJPQ1Byb3BlcnRpZXMiKTsKICAgICAgaWYgKCFwcm9wZXJ0aWVzKSB7CiAgICAgICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAib3B0aW9uYWxDb250ZW50Q29uZmlnIiwgbnVsbCk7CiAgICAgIH0KICAgICAgY29uc3QgZGVmYXVsdENvbmZpZyA9IHByb3BlcnRpZXMuZ2V0KCJEIik7CiAgICAgIGlmICghZGVmYXVsdENvbmZpZykgewogICAgICAgIHJldHVybiBzaGFkb3codGhpcywgIm9wdGlvbmFsQ29udGVudENvbmZpZyIsIG51bGwpOwogICAgICB9CiAgICAgIGNvbnN0IGdyb3Vwc0RhdGEgPSBwcm9wZXJ0aWVzLmdldCgiT0NHcyIpOwogICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZ3JvdXBzRGF0YSkpIHsKICAgICAgICByZXR1cm4gc2hhZG93KHRoaXMsICJvcHRpb25hbENvbnRlbnRDb25maWciLCBudWxsKTsKICAgICAgfQogICAgICBjb25zdCBncm91cFJlZkNhY2hlID0gbmV3IFJlZlNldENhY2hlKCk7CiAgICAgIGZvciAoY29uc3QgZ3JvdXBSZWYgb2YgZ3JvdXBzRGF0YSkgewogICAgICAgIGlmICghKGdyb3VwUmVmIGluc3RhbmNlb2YgUmVmKSB8fCBncm91cFJlZkNhY2hlLmhhcyhncm91cFJlZikpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBncm91cFJlZkNhY2hlLnB1dChncm91cFJlZiwgdGhpcy4jcmVhZE9wdGlvbmFsQ29udGVudEdyb3VwKGdyb3VwUmVmKSk7CiAgICAgIH0KICAgICAgY29uZmlnID0gdGhpcy4jcmVhZE9wdGlvbmFsQ29udGVudENvbmZpZyhkZWZhdWx0Q29uZmlnLCBncm91cFJlZkNhY2hlKTsKICAgIH0gY2F0Y2ggKGV4KSB7CiAgICAgIGlmIChleCBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7CiAgICAgICAgdGhyb3cgZXg7CiAgICAgIH0KICAgICAgd2FybihgVW5hYmxlIHRvIHJlYWQgb3B0aW9uYWwgY29udGVudCBjb25maWc6ICR7ZXh9YCk7CiAgICB9CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJvcHRpb25hbENvbnRlbnRDb25maWciLCBjb25maWcpOwogIH0KICAjcmVhZE9wdGlvbmFsQ29udGVudEdyb3VwKGdyb3VwUmVmKSB7CiAgICBjb25zdCBncm91cCA9IHRoaXMueHJlZi5mZXRjaChncm91cFJlZik7CiAgICBjb25zdCBvYmogPSB7CiAgICAgIGlkOiBncm91cFJlZi50b1N0cmluZygpLAogICAgICBuYW1lOiBudWxsLAogICAgICBpbnRlbnQ6IG51bGwsCiAgICAgIHVzYWdlOiB7CiAgICAgICAgcHJpbnQ6IG51bGwsCiAgICAgICAgdmlldzogbnVsbAogICAgICB9LAogICAgICByYkdyb3VwczogW10KICAgIH07CiAgICBjb25zdCBuYW1lID0gZ3JvdXAuZ2V0KCJOYW1lIik7CiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICJzdHJpbmciKSB7CiAgICAgIG9iai5uYW1lID0gc3RyaW5nVG9QREZTdHJpbmcobmFtZSk7CiAgICB9CiAgICBsZXQgaW50ZW50ID0gZ3JvdXAuZ2V0QXJyYXkoIkludGVudCIpOwogICAgaWYgKCFBcnJheS5pc0FycmF5KGludGVudCkpIHsKICAgICAgaW50ZW50ID0gW2ludGVudF07CiAgICB9CiAgICBpZiAoaW50ZW50LmV2ZXJ5KGkgPT4gaSBpbnN0YW5jZW9mIE5hbWUpKSB7CiAgICAgIG9iai5pbnRlbnQgPSBpbnRlbnQubWFwKGkgPT4gaS5uYW1lKTsKICAgIH0KICAgIGNvbnN0IHVzYWdlID0gZ3JvdXAuZ2V0KCJVc2FnZSIpOwogICAgaWYgKCEodXNhZ2UgaW5zdGFuY2VvZiBEaWN0KSkgewogICAgICByZXR1cm4gb2JqOwogICAgfQogICAgY29uc3QgdXNhZ2VPYmogPSBvYmoudXNhZ2U7CiAgICBjb25zdCBwcmludCA9IHVzYWdlLmdldCgiUHJpbnQiKTsKICAgIGlmIChwcmludCBpbnN0YW5jZW9mIERpY3QpIHsKICAgICAgY29uc3QgcHJpbnRTdGF0ZSA9IHByaW50LmdldCgiUHJpbnRTdGF0ZSIpOwogICAgICBpZiAocHJpbnRTdGF0ZSBpbnN0YW5jZW9mIE5hbWUpIHsKICAgICAgICBzd2l0Y2ggKHByaW50U3RhdGUubmFtZSkgewogICAgICAgICAgY2FzZSAiT04iOgogICAgICAgICAgY2FzZSAiT0ZGIjoKICAgICAgICAgICAgdXNhZ2VPYmoucHJpbnQgPSB7CiAgICAgICAgICAgICAgcHJpbnRTdGF0ZTogcHJpbnRTdGF0ZS5uYW1lCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBjb25zdCB2aWV3ID0gdXNhZ2UuZ2V0KCJWaWV3Iik7CiAgICBpZiAodmlldyBpbnN0YW5jZW9mIERpY3QpIHsKICAgICAgY29uc3Qgdmlld1N0YXRlID0gdmlldy5nZXQoIlZpZXdTdGF0ZSIpOwogICAgICBpZiAodmlld1N0YXRlIGluc3RhbmNlb2YgTmFtZSkgewogICAgICAgIHN3aXRjaCAodmlld1N0YXRlLm5hbWUpIHsKICAgICAgICAgIGNhc2UgIk9OIjoKICAgICAgICAgIGNhc2UgIk9GRiI6CiAgICAgICAgICAgIHVzYWdlT2JqLnZpZXcgPSB7CiAgICAgICAgICAgICAgdmlld1N0YXRlOiB2aWV3U3RhdGUubmFtZQogICAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIG9iajsKICB9CiAgI3JlYWRPcHRpb25hbENvbnRlbnRDb25maWcoY29uZmlnLCBncm91cFJlZkNhY2hlKSB7CiAgICBmdW5jdGlvbiBwYXJzZU9uT2ZmKHJlZnMpIHsKICAgICAgY29uc3Qgb25QYXJzZWQgPSBbXTsKICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVmcykpIHsKICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHJlZnMpIHsKICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJlZiAmJiBncm91cFJlZkNhY2hlLmhhcyh2YWx1ZSkpIHsKICAgICAgICAgICAgb25QYXJzZWQucHVzaCh2YWx1ZS50b1N0cmluZygpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG9uUGFyc2VkOwogICAgfQogICAgZnVuY3Rpb24gcGFyc2VPcmRlcihyZWZzLCBuZXN0ZWRMZXZlbHMgPSAwKSB7CiAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZWZzKSkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGNvbnN0IG9yZGVyID0gW107CiAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgcmVmcykgewogICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJlZiAmJiBncm91cFJlZkNhY2hlLmhhcyh2YWx1ZSkpIHsKICAgICAgICAgIHBhcnNlZE9yZGVyUmVmcy5wdXQodmFsdWUpOwogICAgICAgICAgb3JkZXIucHVzaCh2YWx1ZS50b1N0cmluZygpKTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBjb25zdCBuZXN0ZWRPcmRlciA9IHBhcnNlTmVzdGVkT3JkZXIodmFsdWUsIG5lc3RlZExldmVscyk7CiAgICAgICAgaWYgKG5lc3RlZE9yZGVyKSB7CiAgICAgICAgICBvcmRlci5wdXNoKG5lc3RlZE9yZGVyKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKG5lc3RlZExldmVscyA+IDApIHsKICAgICAgICByZXR1cm4gb3JkZXI7CiAgICAgIH0KICAgICAgY29uc3QgaGlkZGVuR3JvdXBzID0gW107CiAgICAgIGZvciAoY29uc3QgW2dyb3VwUmVmXSBvZiBncm91cFJlZkNhY2hlLml0ZW1zKCkpIHsKICAgICAgICBpZiAocGFyc2VkT3JkZXJSZWZzLmhhcyhncm91cFJlZikpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBoaWRkZW5Hcm91cHMucHVzaChncm91cFJlZi50b1N0cmluZygpKTsKICAgICAgfQogICAgICBpZiAoaGlkZGVuR3JvdXBzLmxlbmd0aCkgewogICAgICAgIG9yZGVyLnB1c2goewogICAgICAgICAgbmFtZTogbnVsbCwKICAgICAgICAgIG9yZGVyOiBoaWRkZW5Hcm91cHMKICAgICAgICB9KTsKICAgICAgfQogICAgICByZXR1cm4gb3JkZXI7CiAgICB9CiAgICBmdW5jdGlvbiBwYXJzZU5lc3RlZE9yZGVyKHJlZiwgbmVzdGVkTGV2ZWxzKSB7CiAgICAgIGlmICgrK25lc3RlZExldmVscyA+IE1BWF9ORVNURURfTEVWRUxTKSB7CiAgICAgICAgd2FybigicGFyc2VOZXN0ZWRPcmRlciAtIHJlYWNoZWQgTUFYX05FU1RFRF9MRVZFTFMuIik7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgY29uc3QgdmFsdWUgPSB4cmVmLmZldGNoSWZSZWYocmVmKTsKICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGNvbnN0IG5lc3RlZE5hbWUgPSB4cmVmLmZldGNoSWZSZWYodmFsdWVbMF0pOwogICAgICBpZiAodHlwZW9mIG5lc3RlZE5hbWUgIT09ICJzdHJpbmciKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgY29uc3QgbmVzdGVkT3JkZXIgPSBwYXJzZU9yZGVyKHZhbHVlLnNsaWNlKDEpLCBuZXN0ZWRMZXZlbHMpOwogICAgICBpZiAoIW5lc3RlZE9yZGVyPy5sZW5ndGgpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICByZXR1cm4gewogICAgICAgIG5hbWU6IHN0cmluZ1RvUERGU3RyaW5nKG5lc3RlZE5hbWUpLAogICAgICAgIG9yZGVyOiBuZXN0ZWRPcmRlcgogICAgICB9OwogICAgfQogICAgZnVuY3Rpb24gcGFyc2VSQkdyb3VwcyhyYkdyb3VwcykgewogICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmJHcm91cHMpKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgcmJHcm91cHMpIHsKICAgICAgICBjb25zdCByYkdyb3VwID0geHJlZi5mZXRjaElmUmVmKHZhbHVlKTsKICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmJHcm91cCkgfHwgIXJiR3JvdXAubGVuZ3RoKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgY29uc3QgcGFyc2VkUmJHcm91cCA9IG5ldyBTZXQoKTsKICAgICAgICBmb3IgKGNvbnN0IHJlZiBvZiByYkdyb3VwKSB7CiAgICAgICAgICBpZiAocmVmIGluc3RhbmNlb2YgUmVmICYmIGdyb3VwUmVmQ2FjaGUuaGFzKHJlZikgJiYgIXBhcnNlZFJiR3JvdXAuaGFzKHJlZi50b1N0cmluZygpKSkgewogICAgICAgICAgICBwYXJzZWRSYkdyb3VwLmFkZChyZWYudG9TdHJpbmcoKSk7CiAgICAgICAgICAgIGdyb3VwUmVmQ2FjaGUuZ2V0KHJlZikucmJHcm91cHMucHVzaChwYXJzZWRSYkdyb3VwKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGNvbnN0IHhyZWYgPSB0aGlzLnhyZWYsCiAgICAgIHBhcnNlZE9yZGVyUmVmcyA9IG5ldyBSZWZTZXQoKSwKICAgICAgTUFYX05FU1RFRF9MRVZFTFMgPSAxMDsKICAgIHBhcnNlUkJHcm91cHMoY29uZmlnLmdldCgiUkJHcm91cHMiKSk7CiAgICByZXR1cm4gewogICAgICBuYW1lOiB0eXBlb2YgY29uZmlnLmdldCgiTmFtZSIpID09PSAic3RyaW5nIiA/IHN0cmluZ1RvUERGU3RyaW5nKGNvbmZpZy5nZXQoIk5hbWUiKSkgOiBudWxsLAogICAgICBjcmVhdG9yOiB0eXBlb2YgY29uZmlnLmdldCgiQ3JlYXRvciIpID09PSAic3RyaW5nIiA/IHN0cmluZ1RvUERGU3RyaW5nKGNvbmZpZy5nZXQoIkNyZWF0b3IiKSkgOiBudWxsLAogICAgICBiYXNlU3RhdGU6IGNvbmZpZy5nZXQoIkJhc2VTdGF0ZSIpIGluc3RhbmNlb2YgTmFtZSA/IGNvbmZpZy5nZXQoIkJhc2VTdGF0ZSIpLm5hbWUgOiBudWxsLAogICAgICBvbjogcGFyc2VPbk9mZihjb25maWcuZ2V0KCJPTiIpKSwKICAgICAgb2ZmOiBwYXJzZU9uT2ZmKGNvbmZpZy5nZXQoIk9GRiIpKSwKICAgICAgb3JkZXI6IHBhcnNlT3JkZXIoY29uZmlnLmdldCgiT3JkZXIiKSksCiAgICAgIGdyb3VwczogWy4uLmdyb3VwUmVmQ2FjaGVdCiAgICB9OwogIH0KICBzZXRBY3R1YWxOdW1QYWdlcyhudW0gPSBudWxsKSB7CiAgICB0aGlzLl9hY3R1YWxOdW1QYWdlcyA9IG51bTsKICB9CiAgZ2V0IGhhc0FjdHVhbE51bVBhZ2VzKCkgewogICAgcmV0dXJuIHRoaXMuX2FjdHVhbE51bVBhZ2VzICE9PSBudWxsOwogIH0KICBnZXQgX3BhZ2VzQ291bnQoKSB7CiAgICBjb25zdCBvYmogPSB0aGlzLnRvcGxldmVsUGFnZXNEaWN0LmdldCgiQ291bnQiKTsKICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihvYmopKSB7CiAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiUGFnZSBjb3VudCBpbiB0b3AtbGV2ZWwgcGFnZXMgZGljdGlvbmFyeSBpcyBub3QgYW4gaW50ZWdlci4iKTsKICAgIH0KICAgIHJldHVybiBzaGFkb3codGhpcywgIl9wYWdlc0NvdW50Iiwgb2JqKTsKICB9CiAgZ2V0IG51bVBhZ2VzKCkgewogICAgcmV0dXJuIHRoaXMuaGFzQWN0dWFsTnVtUGFnZXMgPyB0aGlzLl9hY3R1YWxOdW1QYWdlcyA6IHRoaXMuX3BhZ2VzQ291bnQ7CiAgfQogIGdldCBkZXN0aW5hdGlvbnMoKSB7CiAgICBjb25zdCByYXdEZXN0cyA9IHRoaXMuI3JlYWREZXN0cygpLAogICAgICBkZXN0cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICBmb3IgKGNvbnN0IG9iaiBvZiByYXdEZXN0cykgewogICAgICBpZiAob2JqIGluc3RhbmNlb2YgTmFtZVRyZWUpIHsKICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBvYmouZ2V0QWxsKCkpIHsKICAgICAgICAgIGNvbnN0IGRlc3QgPSBmZXRjaERlc3QodmFsdWUpOwogICAgICAgICAgaWYgKGRlc3QpIHsKICAgICAgICAgICAgZGVzdHNbc3RyaW5nVG9QREZTdHJpbmcoa2V5KV0gPSBkZXN0OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBEaWN0KSB7CiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2Ygb2JqKSB7CiAgICAgICAgICBjb25zdCBkZXN0ID0gZmV0Y2hEZXN0KHZhbHVlKTsKICAgICAgICAgIGlmIChkZXN0KSB7CiAgICAgICAgICAgIGRlc3RzW2tleV0gfHw9IGRlc3Q7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJkZXN0aW5hdGlvbnMiLCBkZXN0cyk7CiAgfQogIGdldERlc3RpbmF0aW9uKGlkKSB7CiAgICBjb25zdCByYXdEZXN0cyA9IHRoaXMuI3JlYWREZXN0cygpOwogICAgZm9yIChjb25zdCBvYmogb2YgcmF3RGVzdHMpIHsKICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIE5hbWVUcmVlIHx8IG9iaiBpbnN0YW5jZW9mIERpY3QpIHsKICAgICAgICBjb25zdCBkZXN0ID0gZmV0Y2hEZXN0KG9iai5nZXQoaWQpKTsKICAgICAgICBpZiAoZGVzdCkgewogICAgICAgICAgcmV0dXJuIGRlc3Q7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAocmF3RGVzdHNbMF0gaW5zdGFuY2VvZiBOYW1lVHJlZSkgewogICAgICBjb25zdCBkZXN0ID0gdGhpcy5kZXN0aW5hdGlvbnNbaWRdOwogICAgICBpZiAoZGVzdCkgewogICAgICAgIHdhcm4oYEZvdW5kICIke2lkfSIgYXQgYW4gaW5jb3JyZWN0IHBvc2l0aW9uIGluIHRoZSBOYW1lVHJlZS5gKTsKICAgICAgICByZXR1cm4gZGVzdDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogICNyZWFkRGVzdHMoKSB7CiAgICBjb25zdCBvYmogPSB0aGlzLl9jYXREaWN0LmdldCgiTmFtZXMiKTsKICAgIGNvbnN0IHJhd0Rlc3RzID0gW107CiAgICBpZiAob2JqPy5oYXMoIkRlc3RzIikpIHsKICAgICAgcmF3RGVzdHMucHVzaChuZXcgTmFtZVRyZWUob2JqLmdldFJhdygiRGVzdHMiKSwgdGhpcy54cmVmKSk7CiAgICB9CiAgICBpZiAodGhpcy5fY2F0RGljdC5oYXMoIkRlc3RzIikpIHsKICAgICAgcmF3RGVzdHMucHVzaCh0aGlzLl9jYXREaWN0LmdldCgiRGVzdHMiKSk7CiAgICB9CiAgICByZXR1cm4gcmF3RGVzdHM7CiAgfQogIGdldCBwYWdlTGFiZWxzKCkgewogICAgbGV0IG9iaiA9IG51bGw7CiAgICB0cnkgewogICAgICBvYmogPSB0aGlzLl9yZWFkUGFnZUxhYmVscygpOwogICAgfSBjYXRjaCAoZXgpIHsKICAgICAgaWYgKGV4IGluc3RhbmNlb2YgTWlzc2luZ0RhdGFFeGNlcHRpb24pIHsKICAgICAgICB0aHJvdyBleDsKICAgICAgfQogICAgICB3YXJuKCJVbmFibGUgdG8gcmVhZCBwYWdlIGxhYmVscy4iKTsKICAgIH0KICAgIHJldHVybiBzaGFkb3codGhpcywgInBhZ2VMYWJlbHMiLCBvYmopOwogIH0KICBfcmVhZFBhZ2VMYWJlbHMoKSB7CiAgICBjb25zdCBvYmogPSB0aGlzLl9jYXREaWN0LmdldFJhdygiUGFnZUxhYmVscyIpOwogICAgaWYgKCFvYmopIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb25zdCBwYWdlTGFiZWxzID0gbmV3IEFycmF5KHRoaXMubnVtUGFnZXMpOwogICAgbGV0IHN0eWxlID0gbnVsbCwKICAgICAgcHJlZml4ID0gIiI7CiAgICBjb25zdCBudW1iZXJUcmVlID0gbmV3IE51bWJlclRyZWUob2JqLCB0aGlzLnhyZWYpOwogICAgY29uc3QgbnVtcyA9IG51bWJlclRyZWUuZ2V0QWxsKCk7CiAgICBsZXQgY3VycmVudExhYmVsID0gIiIsCiAgICAgIGN1cnJlbnRJbmRleCA9IDE7CiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSB0aGlzLm51bVBhZ2VzOyBpIDwgaWk7IGkrKykgewogICAgICBjb25zdCBsYWJlbERpY3QgPSBudW1zLmdldChpKTsKICAgICAgaWYgKGxhYmVsRGljdCAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgaWYgKCEobGFiZWxEaWN0IGluc3RhbmNlb2YgRGljdCkpIHsKICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiUGFnZUxhYmVsIGlzIG5vdCBhIGRpY3Rpb25hcnkuIik7CiAgICAgICAgfQogICAgICAgIGlmIChsYWJlbERpY3QuaGFzKCJUeXBlIikgJiYgIWlzTmFtZShsYWJlbERpY3QuZ2V0KCJUeXBlIiksICJQYWdlTGFiZWwiKSkgewogICAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIHR5cGUgaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuIik7CiAgICAgICAgfQogICAgICAgIGlmIChsYWJlbERpY3QuaGFzKCJTIikpIHsKICAgICAgICAgIGNvbnN0IHMgPSBsYWJlbERpY3QuZ2V0KCJTIik7CiAgICAgICAgICBpZiAoIShzIGluc3RhbmNlb2YgTmFtZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIHN0eWxlIGluIFBhZ2VMYWJlbCBkaWN0aW9uYXJ5LiIpOwogICAgICAgICAgfQogICAgICAgICAgc3R5bGUgPSBzLm5hbWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHN0eWxlID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgaWYgKGxhYmVsRGljdC5oYXMoIlAiKSkgewogICAgICAgICAgY29uc3QgcCA9IGxhYmVsRGljdC5nZXQoIlAiKTsKICAgICAgICAgIGlmICh0eXBlb2YgcCAhPT0gInN0cmluZyIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIHByZWZpeCBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS4iKTsKICAgICAgICAgIH0KICAgICAgICAgIHByZWZpeCA9IHN0cmluZ1RvUERGU3RyaW5nKHApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBwcmVmaXggPSAiIjsKICAgICAgICB9CiAgICAgICAgaWYgKGxhYmVsRGljdC5oYXMoIlN0IikpIHsKICAgICAgICAgIGNvbnN0IHN0ID0gbGFiZWxEaWN0LmdldCgiU3QiKTsKICAgICAgICAgIGlmICghKE51bWJlci5pc0ludGVnZXIoc3QpICYmIHN0ID49IDEpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiSW52YWxpZCBzdGFydCBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS4iKTsKICAgICAgICAgIH0KICAgICAgICAgIGN1cnJlbnRJbmRleCA9IHN0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjdXJyZW50SW5kZXggPSAxOwogICAgICAgIH0KICAgICAgfQogICAgICBzd2l0Y2ggKHN0eWxlKSB7CiAgICAgICAgY2FzZSAiRCI6CiAgICAgICAgICBjdXJyZW50TGFiZWwgPSBjdXJyZW50SW5kZXg7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJSIjoKICAgICAgICBjYXNlICJyIjoKICAgICAgICAgIGN1cnJlbnRMYWJlbCA9IHRvUm9tYW5OdW1lcmFscyhjdXJyZW50SW5kZXgsIHN0eWxlID09PSAiciIpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiQSI6CiAgICAgICAgY2FzZSAiYSI6CiAgICAgICAgICBjb25zdCBMSU1JVCA9IDI2OwogICAgICAgICAgY29uc3QgQV9VUFBFUl9DQVNFID0gMHg0MSwKICAgICAgICAgICAgQV9MT1dFUl9DQVNFID0gMHg2MTsKICAgICAgICAgIGNvbnN0IGJhc2VDaGFyQ29kZSA9IHN0eWxlID09PSAiYSIgPyBBX0xPV0VSX0NBU0UgOiBBX1VQUEVSX0NBU0U7CiAgICAgICAgICBjb25zdCBsZXR0ZXJJbmRleCA9IGN1cnJlbnRJbmRleCAtIDE7CiAgICAgICAgICBjb25zdCBjaGFyYWN0ZXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJhc2VDaGFyQ29kZSArIGxldHRlckluZGV4ICUgTElNSVQpOwogICAgICAgICAgY3VycmVudExhYmVsID0gY2hhcmFjdGVyLnJlcGVhdChNYXRoLmZsb29yKGxldHRlckluZGV4IC8gTElNSVQpICsgMSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgaWYgKHN0eWxlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcihgSW52YWxpZCBzdHlsZSAiJHtzdHlsZX0iIGluIFBhZ2VMYWJlbCBkaWN0aW9uYXJ5LmApOwogICAgICAgICAgfQogICAgICAgICAgY3VycmVudExhYmVsID0gIiI7CiAgICAgIH0KICAgICAgcGFnZUxhYmVsc1tpXSA9IHByZWZpeCArIGN1cnJlbnRMYWJlbDsKICAgICAgY3VycmVudEluZGV4Kys7CiAgICB9CiAgICByZXR1cm4gcGFnZUxhYmVsczsKICB9CiAgZ2V0IHBhZ2VMYXlvdXQoKSB7CiAgICBjb25zdCBvYmogPSB0aGlzLl9jYXREaWN0LmdldCgiUGFnZUxheW91dCIpOwogICAgbGV0IHBhZ2VMYXlvdXQgPSAiIjsKICAgIGlmIChvYmogaW5zdGFuY2VvZiBOYW1lKSB7CiAgICAgIHN3aXRjaCAob2JqLm5hbWUpIHsKICAgICAgICBjYXNlICJTaW5nbGVQYWdlIjoKICAgICAgICBjYXNlICJPbmVDb2x1bW4iOgogICAgICAgIGNhc2UgIlR3b0NvbHVtbkxlZnQiOgogICAgICAgIGNhc2UgIlR3b0NvbHVtblJpZ2h0IjoKICAgICAgICBjYXNlICJUd29QYWdlTGVmdCI6CiAgICAgICAgY2FzZSAiVHdvUGFnZVJpZ2h0IjoKICAgICAgICAgIHBhZ2VMYXlvdXQgPSBvYmoubmFtZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAicGFnZUxheW91dCIsIHBhZ2VMYXlvdXQpOwogIH0KICBnZXQgcGFnZU1vZGUoKSB7CiAgICBjb25zdCBvYmogPSB0aGlzLl9jYXREaWN0LmdldCgiUGFnZU1vZGUiKTsKICAgIGxldCBwYWdlTW9kZSA9ICJVc2VOb25lIjsKICAgIGlmIChvYmogaW5zdGFuY2VvZiBOYW1lKSB7CiAgICAgIHN3aXRjaCAob2JqLm5hbWUpIHsKICAgICAgICBjYXNlICJVc2VOb25lIjoKICAgICAgICBjYXNlICJVc2VPdXRsaW5lcyI6CiAgICAgICAgY2FzZSAiVXNlVGh1bWJzIjoKICAgICAgICBjYXNlICJGdWxsU2NyZWVuIjoKICAgICAgICBjYXNlICJVc2VPQyI6CiAgICAgICAgY2FzZSAiVXNlQXR0YWNobWVudHMiOgogICAgICAgICAgcGFnZU1vZGUgPSBvYmoubmFtZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAicGFnZU1vZGUiLCBwYWdlTW9kZSk7CiAgfQogIGdldCB2aWV3ZXJQcmVmZXJlbmNlcygpIHsKICAgIGNvbnN0IG9iaiA9IHRoaXMuX2NhdERpY3QuZ2V0KCJWaWV3ZXJQcmVmZXJlbmNlcyIpOwogICAgaWYgKCEob2JqIGluc3RhbmNlb2YgRGljdCkpIHsKICAgICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAidmlld2VyUHJlZmVyZW5jZXMiLCBudWxsKTsKICAgIH0KICAgIGxldCBwcmVmcyA9IG51bGw7CiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBvYmopIHsKICAgICAgbGV0IHByZWZWYWx1ZTsKICAgICAgc3dpdGNoIChrZXkpIHsKICAgICAgICBjYXNlICJIaWRlVG9vbGJhciI6CiAgICAgICAgY2FzZSAiSGlkZU1lbnViYXIiOgogICAgICAgIGNhc2UgIkhpZGVXaW5kb3dVSSI6CiAgICAgICAgY2FzZSAiRml0V2luZG93IjoKICAgICAgICBjYXNlICJDZW50ZXJXaW5kb3ciOgogICAgICAgIGNhc2UgIkRpc3BsYXlEb2NUaXRsZSI6CiAgICAgICAgY2FzZSAiUGlja1RyYXlCeVBERlNpemUiOgogICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gImJvb2xlYW4iKSB7CiAgICAgICAgICAgIHByZWZWYWx1ZSA9IHZhbHVlOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiTm9uRnVsbFNjcmVlblBhZ2VNb2RlIjoKICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE5hbWUpIHsKICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5uYW1lKSB7CiAgICAgICAgICAgICAgY2FzZSAiVXNlTm9uZSI6CiAgICAgICAgICAgICAgY2FzZSAiVXNlT3V0bGluZXMiOgogICAgICAgICAgICAgIGNhc2UgIlVzZVRodW1icyI6CiAgICAgICAgICAgICAgY2FzZSAiVXNlT0MiOgogICAgICAgICAgICAgICAgcHJlZlZhbHVlID0gdmFsdWUubmFtZTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBwcmVmVmFsdWUgPSAiVXNlTm9uZSI7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkRpcmVjdGlvbiI6CiAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBOYW1lKSB7CiAgICAgICAgICAgIHN3aXRjaCAodmFsdWUubmFtZSkgewogICAgICAgICAgICAgIGNhc2UgIkwyUiI6CiAgICAgICAgICAgICAgY2FzZSAiUjJMIjoKICAgICAgICAgICAgICAgIHByZWZWYWx1ZSA9IHZhbHVlLm5hbWU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgcHJlZlZhbHVlID0gIkwyUiI7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIlZpZXdBcmVhIjoKICAgICAgICBjYXNlICJWaWV3Q2xpcCI6CiAgICAgICAgY2FzZSAiUHJpbnRBcmVhIjoKICAgICAgICBjYXNlICJQcmludENsaXAiOgogICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTmFtZSkgewogICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLm5hbWUpIHsKICAgICAgICAgICAgICBjYXNlICJNZWRpYUJveCI6CiAgICAgICAgICAgICAgY2FzZSAiQ3JvcEJveCI6CiAgICAgICAgICAgICAgY2FzZSAiQmxlZWRCb3giOgogICAgICAgICAgICAgIGNhc2UgIlRyaW1Cb3giOgogICAgICAgICAgICAgIGNhc2UgIkFydEJveCI6CiAgICAgICAgICAgICAgICBwcmVmVmFsdWUgPSB2YWx1ZS5uYW1lOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHByZWZWYWx1ZSA9ICJDcm9wQm94IjsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiUHJpbnRTY2FsaW5nIjoKICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE5hbWUpIHsKICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5uYW1lKSB7CiAgICAgICAgICAgICAgY2FzZSAiTm9uZSI6CiAgICAgICAgICAgICAgY2FzZSAiQXBwRGVmYXVsdCI6CiAgICAgICAgICAgICAgICBwcmVmVmFsdWUgPSB2YWx1ZS5uYW1lOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHByZWZWYWx1ZSA9ICJBcHBEZWZhdWx0IjsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiRHVwbGV4IjoKICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE5hbWUpIHsKICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5uYW1lKSB7CiAgICAgICAgICAgICAgY2FzZSAiU2ltcGxleCI6CiAgICAgICAgICAgICAgY2FzZSAiRHVwbGV4RmxpcFNob3J0RWRnZSI6CiAgICAgICAgICAgICAgY2FzZSAiRHVwbGV4RmxpcExvbmdFZGdlIjoKICAgICAgICAgICAgICAgIHByZWZWYWx1ZSA9IHZhbHVlLm5hbWU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgcHJlZlZhbHVlID0gIk5vbmUiOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJQcmludFBhZ2VSYW5nZSI6CiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoICUgMiA9PT0gMCkgewogICAgICAgICAgICBjb25zdCBpc1ZhbGlkID0gdmFsdWUuZXZlcnkoKHBhZ2UsIGksIGFycikgPT4gTnVtYmVyLmlzSW50ZWdlcihwYWdlKSAmJiBwYWdlID4gMCAmJiAoaSA9PT0gMCB8fCBwYWdlID49IGFycltpIC0gMV0pICYmIHBhZ2UgPD0gdGhpcy5udW1QYWdlcyk7CiAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7CiAgICAgICAgICAgICAgcHJlZlZhbHVlID0gdmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIk51bUNvcGllcyI6CiAgICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkgJiYgdmFsdWUgPiAwKSB7CiAgICAgICAgICAgIHByZWZWYWx1ZSA9IHZhbHVlOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHdhcm4oYElnbm9yaW5nIG5vbi1zdGFuZGFyZCBrZXkgaW4gVmlld2VyUHJlZmVyZW5jZXM6ICR7a2V5fS5gKTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmIChwcmVmVmFsdWUgPT09IHVuZGVmaW5lZCkgewogICAgICAgIHdhcm4oYEJhZCB2YWx1ZSwgZm9yIGtleSAiJHtrZXl9IiwgaW4gVmlld2VyUHJlZmVyZW5jZXM6ICR7dmFsdWV9LmApOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmICghcHJlZnMpIHsKICAgICAgICBwcmVmcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICAgIH0KICAgICAgcHJlZnNba2V5XSA9IHByZWZWYWx1ZTsKICAgIH0KICAgIHJldHVybiBzaGFkb3codGhpcywgInZpZXdlclByZWZlcmVuY2VzIiwgcHJlZnMpOwogIH0KICBnZXQgb3BlbkFjdGlvbigpIHsKICAgIGNvbnN0IG9iaiA9IHRoaXMuX2NhdERpY3QuZ2V0KCJPcGVuQWN0aW9uIik7CiAgICBjb25zdCBvcGVuQWN0aW9uID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgIGlmIChvYmogaW5zdGFuY2VvZiBEaWN0KSB7CiAgICAgIGNvbnN0IGRlc3REaWN0ID0gbmV3IERpY3QodGhpcy54cmVmKTsKICAgICAgZGVzdERpY3Quc2V0KCJBIiwgb2JqKTsKICAgICAgY29uc3QgcmVzdWx0T2JqID0gewogICAgICAgIHVybDogbnVsbCwKICAgICAgICBkZXN0OiBudWxsLAogICAgICAgIGFjdGlvbjogbnVsbAogICAgICB9OwogICAgICBDYXRhbG9nLnBhcnNlRGVzdERpY3Rpb25hcnkoewogICAgICAgIGRlc3REaWN0LAogICAgICAgIHJlc3VsdE9iagogICAgICB9KTsKICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0T2JqLmRlc3QpKSB7CiAgICAgICAgb3BlbkFjdGlvbi5kZXN0ID0gcmVzdWx0T2JqLmRlc3Q7CiAgICAgIH0gZWxzZSBpZiAocmVzdWx0T2JqLmFjdGlvbikgewogICAgICAgIG9wZW5BY3Rpb24uYWN0aW9uID0gcmVzdWx0T2JqLmFjdGlvbjsKICAgICAgfQogICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHsKICAgICAgb3BlbkFjdGlvbi5kZXN0ID0gb2JqOwogICAgfQogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAib3BlbkFjdGlvbiIsIG9iamVjdFNpemUob3BlbkFjdGlvbikgPiAwID8gb3BlbkFjdGlvbiA6IG51bGwpOwogIH0KICBnZXQgYXR0YWNobWVudHMoKSB7CiAgICBjb25zdCBvYmogPSB0aGlzLl9jYXREaWN0LmdldCgiTmFtZXMiKTsKICAgIGxldCBhdHRhY2htZW50cyA9IG51bGw7CiAgICBpZiAob2JqIGluc3RhbmNlb2YgRGljdCAmJiBvYmouaGFzKCJFbWJlZGRlZEZpbGVzIikpIHsKICAgICAgY29uc3QgbmFtZVRyZWUgPSBuZXcgTmFtZVRyZWUob2JqLmdldFJhdygiRW1iZWRkZWRGaWxlcyIpLCB0aGlzLnhyZWYpOwogICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBuYW1lVHJlZS5nZXRBbGwoKSkgewogICAgICAgIGNvbnN0IGZzID0gbmV3IEZpbGVTcGVjKHZhbHVlLCB0aGlzLnhyZWYpOwogICAgICAgIGlmICghYXR0YWNobWVudHMpIHsKICAgICAgICAgIGF0dGFjaG1lbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgICAgICB9CiAgICAgICAgYXR0YWNobWVudHNbc3RyaW5nVG9QREZTdHJpbmcoa2V5KV0gPSBmcy5zZXJpYWxpemFibGU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBzaGFkb3codGhpcywgImF0dGFjaG1lbnRzIiwgYXR0YWNobWVudHMpOwogIH0KICBnZXQgeGZhSW1hZ2VzKCkgewogICAgY29uc3Qgb2JqID0gdGhpcy5fY2F0RGljdC5nZXQoIk5hbWVzIik7CiAgICBsZXQgeGZhSW1hZ2VzID0gbnVsbDsKICAgIGlmIChvYmogaW5zdGFuY2VvZiBEaWN0ICYmIG9iai5oYXMoIlhGQUltYWdlcyIpKSB7CiAgICAgIGNvbnN0IG5hbWVUcmVlID0gbmV3IE5hbWVUcmVlKG9iai5nZXRSYXcoIlhGQUltYWdlcyIpLCB0aGlzLnhyZWYpOwogICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBuYW1lVHJlZS5nZXRBbGwoKSkgewogICAgICAgIGlmICgheGZhSW1hZ2VzKSB7CiAgICAgICAgICB4ZmFJbWFnZXMgPSBuZXcgRGljdCh0aGlzLnhyZWYpOwogICAgICAgIH0KICAgICAgICB4ZmFJbWFnZXMuc2V0KHN0cmluZ1RvUERGU3RyaW5nKGtleSksIHZhbHVlKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAieGZhSW1hZ2VzIiwgeGZhSW1hZ2VzKTsKICB9CiAgX2NvbGxlY3RKYXZhU2NyaXB0KCkgewogICAgY29uc3Qgb2JqID0gdGhpcy5fY2F0RGljdC5nZXQoIk5hbWVzIik7CiAgICBsZXQgamF2YVNjcmlwdCA9IG51bGw7CiAgICBmdW5jdGlvbiBhcHBlbmRJZkphdmFTY3JpcHREaWN0KG5hbWUsIGpzRGljdCkgewogICAgICBpZiAoIShqc0RpY3QgaW5zdGFuY2VvZiBEaWN0KSkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoIWlzTmFtZShqc0RpY3QuZ2V0KCJTIiksICJKYXZhU2NyaXB0IikpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgbGV0IGpzID0ganNEaWN0LmdldCgiSlMiKTsKICAgICAgaWYgKGpzIGluc3RhbmNlb2YgQmFzZVN0cmVhbSkgewogICAgICAgIGpzID0ganMuZ2V0U3RyaW5nKCk7CiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGpzICE9PSAic3RyaW5nIikgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBqcyA9IHN0cmluZ1RvUERGU3RyaW5nKGpzKS5yZXBsYWNlQWxsKCJceDAwIiwgIiIpOwogICAgICBpZiAoanMpIHsKICAgICAgICAoamF2YVNjcmlwdCB8fD0gbmV3IE1hcCgpKS5zZXQobmFtZSwganMpOwogICAgICB9CiAgICB9CiAgICBpZiAob2JqIGluc3RhbmNlb2YgRGljdCAmJiBvYmouaGFzKCJKYXZhU2NyaXB0IikpIHsKICAgICAgY29uc3QgbmFtZVRyZWUgPSBuZXcgTmFtZVRyZWUob2JqLmdldFJhdygiSmF2YVNjcmlwdCIpLCB0aGlzLnhyZWYpOwogICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBuYW1lVHJlZS5nZXRBbGwoKSkgewogICAgICAgIGFwcGVuZElmSmF2YVNjcmlwdERpY3Qoc3RyaW5nVG9QREZTdHJpbmcoa2V5KSwgdmFsdWUpOwogICAgICB9CiAgICB9CiAgICBjb25zdCBvcGVuQWN0aW9uID0gdGhpcy5fY2F0RGljdC5nZXQoIk9wZW5BY3Rpb24iKTsKICAgIGlmIChvcGVuQWN0aW9uKSB7CiAgICAgIGFwcGVuZElmSmF2YVNjcmlwdERpY3QoIk9wZW5BY3Rpb24iLCBvcGVuQWN0aW9uKTsKICAgIH0KICAgIHJldHVybiBqYXZhU2NyaXB0OwogIH0KICBnZXQganNBY3Rpb25zKCkgewogICAgY29uc3QgamF2YVNjcmlwdCA9IHRoaXMuX2NvbGxlY3RKYXZhU2NyaXB0KCk7CiAgICBsZXQgYWN0aW9ucyA9IGNvbGxlY3RBY3Rpb25zKHRoaXMueHJlZiwgdGhpcy5fY2F0RGljdCwgRG9jdW1lbnRBY3Rpb25FdmVudFR5cGUpOwogICAgaWYgKGphdmFTY3JpcHQpIHsKICAgICAgYWN0aW9ucyB8fD0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIGphdmFTY3JpcHQpIHsKICAgICAgICBpZiAoa2V5IGluIGFjdGlvbnMpIHsKICAgICAgICAgIGFjdGlvbnNba2V5XS5wdXNoKHZhbCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGFjdGlvbnNba2V5XSA9IFt2YWxdOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAianNBY3Rpb25zIiwgYWN0aW9ucyk7CiAgfQogIGFzeW5jIGNsZWFudXAobWFudWFsbHlUcmlnZ2VyZWQgPSBmYWxzZSkgewogICAgY2xlYXJHbG9iYWxDYWNoZXMoKTsKICAgIHRoaXMuZ2xvYmFsQ29sb3JTcGFjZUNhY2hlLmNsZWFyKCk7CiAgICB0aGlzLmdsb2JhbEltYWdlQ2FjaGUuY2xlYXIobWFudWFsbHlUcmlnZ2VyZWQpOwogICAgdGhpcy5wYWdlS2lkc0NvdW50Q2FjaGUuY2xlYXIoKTsKICAgIHRoaXMucGFnZUluZGV4Q2FjaGUuY2xlYXIoKTsKICAgIHRoaXMucGFnZURpY3RDYWNoZS5jbGVhcigpOwogICAgdGhpcy5ub25CbGVuZE1vZGVzU2V0LmNsZWFyKCk7CiAgICBmb3IgKGNvbnN0IHsKICAgICAgZGljdAogICAgfSBvZiBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLmZvbnRDYWNoZSkpIHsKICAgICAgZGVsZXRlIGRpY3QuY2FjaGVLZXk7CiAgICB9CiAgICB0aGlzLmZvbnRDYWNoZS5jbGVhcigpOwogICAgdGhpcy5idWlsdEluQ01hcENhY2hlLmNsZWFyKCk7CiAgICB0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZS5jbGVhcigpOwogICAgdGhpcy5zeXN0ZW1Gb250Q2FjaGUuY2xlYXIoKTsKICB9CiAgYXN5bmMgZ2V0UGFnZURpY3QocGFnZUluZGV4KSB7CiAgICBjb25zdCBub2Rlc1RvVmlzaXQgPSBbdGhpcy50b3BsZXZlbFBhZ2VzRGljdF07CiAgICBjb25zdCB2aXNpdGVkTm9kZXMgPSBuZXcgUmVmU2V0KCk7CiAgICBjb25zdCBwYWdlc1JlZiA9IHRoaXMuX2NhdERpY3QuZ2V0UmF3KCJQYWdlcyIpOwogICAgaWYgKHBhZ2VzUmVmIGluc3RhbmNlb2YgUmVmKSB7CiAgICAgIHZpc2l0ZWROb2Rlcy5wdXQocGFnZXNSZWYpOwogICAgfQogICAgY29uc3QgeHJlZiA9IHRoaXMueHJlZiwKICAgICAgcGFnZUtpZHNDb3VudENhY2hlID0gdGhpcy5wYWdlS2lkc0NvdW50Q2FjaGUsCiAgICAgIHBhZ2VJbmRleENhY2hlID0gdGhpcy5wYWdlSW5kZXhDYWNoZSwKICAgICAgcGFnZURpY3RDYWNoZSA9IHRoaXMucGFnZURpY3RDYWNoZTsKICAgIGxldCBjdXJyZW50UGFnZUluZGV4ID0gMDsKICAgIHdoaWxlIChub2Rlc1RvVmlzaXQubGVuZ3RoKSB7CiAgICAgIGNvbnN0IGN1cnJlbnROb2RlID0gbm9kZXNUb1Zpc2l0LnBvcCgpOwogICAgICBpZiAoY3VycmVudE5vZGUgaW5zdGFuY2VvZiBSZWYpIHsKICAgICAgICBjb25zdCBjb3VudCA9IHBhZ2VLaWRzQ291bnRDYWNoZS5nZXQoY3VycmVudE5vZGUpOwogICAgICAgIGlmIChjb3VudCA+PSAwICYmIGN1cnJlbnRQYWdlSW5kZXggKyBjb3VudCA8PSBwYWdlSW5kZXgpIHsKICAgICAgICAgIGN1cnJlbnRQYWdlSW5kZXggKz0gY291bnQ7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHZpc2l0ZWROb2Rlcy5oYXMoY3VycmVudE5vZGUpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlBhZ2VzIHRyZWUgY29udGFpbnMgY2lyY3VsYXIgcmVmZXJlbmNlLiIpOwogICAgICAgIH0KICAgICAgICB2aXNpdGVkTm9kZXMucHV0KGN1cnJlbnROb2RlKTsKICAgICAgICBjb25zdCBvYmogPSBhd2FpdCAocGFnZURpY3RDYWNoZS5nZXQoY3VycmVudE5vZGUpIHx8IHhyZWYuZmV0Y2hBc3luYyhjdXJyZW50Tm9kZSkpOwogICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBEaWN0KSB7CiAgICAgICAgICBsZXQgdHlwZSA9IG9iai5nZXRSYXcoIlR5cGUiKTsKICAgICAgICAgIGlmICh0eXBlIGluc3RhbmNlb2YgUmVmKSB7CiAgICAgICAgICAgIHR5cGUgPSBhd2FpdCB4cmVmLmZldGNoQXN5bmModHlwZSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoaXNOYW1lKHR5cGUsICJQYWdlIikgfHwgIW9iai5oYXMoIktpZHMiKSkgewogICAgICAgICAgICBpZiAoIXBhZ2VLaWRzQ291bnRDYWNoZS5oYXMoY3VycmVudE5vZGUpKSB7CiAgICAgICAgICAgICAgcGFnZUtpZHNDb3VudENhY2hlLnB1dChjdXJyZW50Tm9kZSwgMSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCFwYWdlSW5kZXhDYWNoZS5oYXMoY3VycmVudE5vZGUpKSB7CiAgICAgICAgICAgICAgcGFnZUluZGV4Q2FjaGUucHV0KGN1cnJlbnROb2RlLCBjdXJyZW50UGFnZUluZGV4KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoY3VycmVudFBhZ2VJbmRleCA9PT0gcGFnZUluZGV4KSB7CiAgICAgICAgICAgICAgcmV0dXJuIFtvYmosIGN1cnJlbnROb2RlXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjdXJyZW50UGFnZUluZGV4Kys7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBub2Rlc1RvVmlzaXQucHVzaChvYmopOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmICghKGN1cnJlbnROb2RlIGluc3RhbmNlb2YgRGljdCkpIHsKICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlBhZ2UgZGljdGlvbmFyeSBraWQgcmVmZXJlbmNlIHBvaW50cyB0byB3cm9uZyB0eXBlIG9mIG9iamVjdC4iKTsKICAgICAgfQogICAgICBjb25zdCB7CiAgICAgICAgb2JqSWQKICAgICAgfSA9IGN1cnJlbnROb2RlOwogICAgICBsZXQgY291bnQgPSBjdXJyZW50Tm9kZS5nZXRSYXcoIkNvdW50Iik7CiAgICAgIGlmIChjb3VudCBpbnN0YW5jZW9mIFJlZikgewogICAgICAgIGNvdW50ID0gYXdhaXQgeHJlZi5mZXRjaEFzeW5jKGNvdW50KTsKICAgICAgfQogICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihjb3VudCkgJiYgY291bnQgPj0gMCkgewogICAgICAgIGlmIChvYmpJZCAmJiAhcGFnZUtpZHNDb3VudENhY2hlLmhhcyhvYmpJZCkpIHsKICAgICAgICAgIHBhZ2VLaWRzQ291bnRDYWNoZS5wdXQob2JqSWQsIGNvdW50KTsKICAgICAgICB9CiAgICAgICAgaWYgKGN1cnJlbnRQYWdlSW5kZXggKyBjb3VudCA8PSBwYWdlSW5kZXgpIHsKICAgICAgICAgIGN1cnJlbnRQYWdlSW5kZXggKz0gY291bnQ7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgbGV0IGtpZHMgPSBjdXJyZW50Tm9kZS5nZXRSYXcoIktpZHMiKTsKICAgICAgaWYgKGtpZHMgaW5zdGFuY2VvZiBSZWYpIHsKICAgICAgICBraWRzID0gYXdhaXQgeHJlZi5mZXRjaEFzeW5jKGtpZHMpOwogICAgICB9CiAgICAgIGlmICghQXJyYXkuaXNBcnJheShraWRzKSkgewogICAgICAgIGxldCB0eXBlID0gY3VycmVudE5vZGUuZ2V0UmF3KCJUeXBlIik7CiAgICAgICAgaWYgKHR5cGUgaW5zdGFuY2VvZiBSZWYpIHsKICAgICAgICAgIHR5cGUgPSBhd2FpdCB4cmVmLmZldGNoQXN5bmModHlwZSk7CiAgICAgICAgfQogICAgICAgIGlmIChpc05hbWUodHlwZSwgIlBhZ2UiKSB8fCAhY3VycmVudE5vZGUuaGFzKCJLaWRzIikpIHsKICAgICAgICAgIGlmIChjdXJyZW50UGFnZUluZGV4ID09PSBwYWdlSW5kZXgpIHsKICAgICAgICAgICAgcmV0dXJuIFtjdXJyZW50Tm9kZSwgbnVsbF07CiAgICAgICAgICB9CiAgICAgICAgICBjdXJyZW50UGFnZUluZGV4Kys7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJQYWdlIGRpY3Rpb25hcnkga2lkcyBvYmplY3QgaXMgbm90IGFuIGFycmF5LiIpOwogICAgICB9CiAgICAgIGZvciAobGV0IGxhc3QgPSBraWRzLmxlbmd0aCAtIDE7IGxhc3QgPj0gMDsgbGFzdC0tKSB7CiAgICAgICAgY29uc3QgbGFzdEtpZCA9IGtpZHNbbGFzdF07CiAgICAgICAgbm9kZXNUb1Zpc2l0LnB1c2gobGFzdEtpZCk7CiAgICAgICAgaWYgKGN1cnJlbnROb2RlID09PSB0aGlzLnRvcGxldmVsUGFnZXNEaWN0ICYmIGxhc3RLaWQgaW5zdGFuY2VvZiBSZWYgJiYgIXBhZ2VEaWN0Q2FjaGUuaGFzKGxhc3RLaWQpKSB7CiAgICAgICAgICBwYWdlRGljdENhY2hlLnB1dChsYXN0S2lkLCB4cmVmLmZldGNoQXN5bmMobGFzdEtpZCkpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgdGhyb3cgbmV3IEVycm9yKGBQYWdlIGluZGV4ICR7cGFnZUluZGV4fSBub3QgZm91bmQuYCk7CiAgfQogIGFzeW5jIGdldEFsbFBhZ2VEaWN0cyhyZWNvdmVyeU1vZGUgPSBmYWxzZSkgewogICAgY29uc3QgewogICAgICBpZ25vcmVFcnJvcnMKICAgIH0gPSB0aGlzLnBkZk1hbmFnZXIuZXZhbHVhdG9yT3B0aW9uczsKICAgIGNvbnN0IHF1ZXVlID0gW3sKICAgICAgY3VycmVudE5vZGU6IHRoaXMudG9wbGV2ZWxQYWdlc0RpY3QsCiAgICAgIHBvc0luS2lkczogMAogICAgfV07CiAgICBjb25zdCB2aXNpdGVkTm9kZXMgPSBuZXcgUmVmU2V0KCk7CiAgICBjb25zdCBwYWdlc1JlZiA9IHRoaXMuX2NhdERpY3QuZ2V0UmF3KCJQYWdlcyIpOwogICAgaWYgKHBhZ2VzUmVmIGluc3RhbmNlb2YgUmVmKSB7CiAgICAgIHZpc2l0ZWROb2Rlcy5wdXQocGFnZXNSZWYpOwogICAgfQogICAgY29uc3QgbWFwID0gbmV3IE1hcCgpLAogICAgICB4cmVmID0gdGhpcy54cmVmLAogICAgICBwYWdlSW5kZXhDYWNoZSA9IHRoaXMucGFnZUluZGV4Q2FjaGU7CiAgICBsZXQgcGFnZUluZGV4ID0gMDsKICAgIGZ1bmN0aW9uIGFkZFBhZ2VEaWN0KHBhZ2VEaWN0LCBwYWdlUmVmKSB7CiAgICAgIGlmIChwYWdlUmVmICYmICFwYWdlSW5kZXhDYWNoZS5oYXMocGFnZVJlZikpIHsKICAgICAgICBwYWdlSW5kZXhDYWNoZS5wdXQocGFnZVJlZiwgcGFnZUluZGV4KTsKICAgICAgfQogICAgICBtYXAuc2V0KHBhZ2VJbmRleCsrLCBbcGFnZURpY3QsIHBhZ2VSZWZdKTsKICAgIH0KICAgIGZ1bmN0aW9uIGFkZFBhZ2VFcnJvcihlcnJvcikgewogICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBYUmVmRW50cnlFeGNlcHRpb24gJiYgIXJlY292ZXJ5TW9kZSkgewogICAgICAgIHRocm93IGVycm9yOwogICAgICB9CiAgICAgIGlmIChyZWNvdmVyeU1vZGUgJiYgaWdub3JlRXJyb3JzICYmIHBhZ2VJbmRleCA9PT0gMCkgewogICAgICAgIHdhcm4oYGdldEFsbFBhZ2VEaWN0cyAtIFNraXBwaW5nIGludmFsaWQgZmlyc3QgcGFnZTogIiR7ZXJyb3J9Ii5gKTsKICAgICAgICBlcnJvciA9IERpY3QuZW1wdHk7CiAgICAgIH0KICAgICAgbWFwLnNldChwYWdlSW5kZXgrKywgW2Vycm9yLCBudWxsXSk7CiAgICB9CiAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkgewogICAgICBjb25zdCBxdWV1ZUl0ZW0gPSBxdWV1ZS5hdCgtMSk7CiAgICAgIGNvbnN0IHsKICAgICAgICBjdXJyZW50Tm9kZSwKICAgICAgICBwb3NJbktpZHMKICAgICAgfSA9IHF1ZXVlSXRlbTsKICAgICAgbGV0IGtpZHMgPSBjdXJyZW50Tm9kZS5nZXRSYXcoIktpZHMiKTsKICAgICAgaWYgKGtpZHMgaW5zdGFuY2VvZiBSZWYpIHsKICAgICAgICB0cnkgewogICAgICAgICAga2lkcyA9IGF3YWl0IHhyZWYuZmV0Y2hBc3luYyhraWRzKTsKICAgICAgICB9IGNhdGNoIChleCkgewogICAgICAgICAgYWRkUGFnZUVycm9yKGV4KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoIUFycmF5LmlzQXJyYXkoa2lkcykpIHsKICAgICAgICBhZGRQYWdlRXJyb3IobmV3IEZvcm1hdEVycm9yKCJQYWdlIGRpY3Rpb25hcnkga2lkcyBvYmplY3QgaXMgbm90IGFuIGFycmF5LiIpKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBpZiAocG9zSW5LaWRzID49IGtpZHMubGVuZ3RoKSB7CiAgICAgICAgcXVldWUucG9wKCk7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgY29uc3Qga2lkT2JqID0ga2lkc1twb3NJbktpZHNdOwogICAgICBsZXQgb2JqOwogICAgICBpZiAoa2lkT2JqIGluc3RhbmNlb2YgUmVmKSB7CiAgICAgICAgaWYgKHZpc2l0ZWROb2Rlcy5oYXMoa2lkT2JqKSkgewogICAgICAgICAgYWRkUGFnZUVycm9yKG5ldyBGb3JtYXRFcnJvcigiUGFnZXMgdHJlZSBjb250YWlucyBjaXJjdWxhciByZWZlcmVuY2UuIikpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHZpc2l0ZWROb2Rlcy5wdXQoa2lkT2JqKTsKICAgICAgICB0cnkgewogICAgICAgICAgb2JqID0gYXdhaXQgeHJlZi5mZXRjaEFzeW5jKGtpZE9iaik7CiAgICAgICAgfSBjYXRjaCAoZXgpIHsKICAgICAgICAgIGFkZFBhZ2VFcnJvcihleCk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb2JqID0ga2lkT2JqOwogICAgICB9CiAgICAgIGlmICghKG9iaiBpbnN0YW5jZW9mIERpY3QpKSB7CiAgICAgICAgYWRkUGFnZUVycm9yKG5ldyBGb3JtYXRFcnJvcigiUGFnZSBkaWN0aW9uYXJ5IGtpZCByZWZlcmVuY2UgcG9pbnRzIHRvIHdyb25nIHR5cGUgb2Ygb2JqZWN0LiIpKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBsZXQgdHlwZSA9IG9iai5nZXRSYXcoIlR5cGUiKTsKICAgICAgaWYgKHR5cGUgaW5zdGFuY2VvZiBSZWYpIHsKICAgICAgICB0cnkgewogICAgICAgICAgdHlwZSA9IGF3YWl0IHhyZWYuZmV0Y2hBc3luYyh0eXBlKTsKICAgICAgICB9IGNhdGNoIChleCkgewogICAgICAgICAgYWRkUGFnZUVycm9yKGV4KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoaXNOYW1lKHR5cGUsICJQYWdlIikgfHwgIW9iai5oYXMoIktpZHMiKSkgewogICAgICAgIGFkZFBhZ2VEaWN0KG9iaiwga2lkT2JqIGluc3RhbmNlb2YgUmVmID8ga2lkT2JqIDogbnVsbCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcXVldWUucHVzaCh7CiAgICAgICAgICBjdXJyZW50Tm9kZTogb2JqLAogICAgICAgICAgcG9zSW5LaWRzOiAwCiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgcXVldWVJdGVtLnBvc0luS2lkcysrOwogICAgfQogICAgcmV0dXJuIG1hcDsKICB9CiAgZ2V0UGFnZUluZGV4KHBhZ2VSZWYpIHsKICAgIGNvbnN0IGNhY2hlZFBhZ2VJbmRleCA9IHRoaXMucGFnZUluZGV4Q2FjaGUuZ2V0KHBhZ2VSZWYpOwogICAgaWYgKGNhY2hlZFBhZ2VJbmRleCAhPT0gdW5kZWZpbmVkKSB7CiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY2FjaGVkUGFnZUluZGV4KTsKICAgIH0KICAgIGNvbnN0IHhyZWYgPSB0aGlzLnhyZWY7CiAgICBmdW5jdGlvbiBwYWdlc0JlZm9yZVJlZihraWRSZWYpIHsKICAgICAgbGV0IHRvdGFsID0gMCwKICAgICAgICBwYXJlbnRSZWY7CiAgICAgIHJldHVybiB4cmVmLmZldGNoQXN5bmMoa2lkUmVmKS50aGVuKGZ1bmN0aW9uIChub2RlKSB7CiAgICAgICAgaWYgKGlzUmVmc0VxdWFsKGtpZFJlZiwgcGFnZVJlZikgJiYgIWlzRGljdChub2RlLCAiUGFnZSIpICYmICEobm9kZSBpbnN0YW5jZW9mIERpY3QgJiYgIW5vZGUuaGFzKCJUeXBlIikgJiYgbm9kZS5oYXMoIkNvbnRlbnRzIikpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlRoZSByZWZlcmVuY2UgZG9lcyBub3QgcG9pbnQgdG8gYSAvUGFnZSBkaWN0aW9uYXJ5LiIpOwogICAgICAgIH0KICAgICAgICBpZiAoIW5vZGUpIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgRGljdCkpIHsKICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiTm9kZSBtdXN0IGJlIGEgZGljdGlvbmFyeS4iKTsKICAgICAgICB9CiAgICAgICAgcGFyZW50UmVmID0gbm9kZS5nZXRSYXcoIlBhcmVudCIpOwogICAgICAgIHJldHVybiBub2RlLmdldEFzeW5jKCJQYXJlbnQiKTsKICAgICAgfSkudGhlbihmdW5jdGlvbiAocGFyZW50KSB7CiAgICAgICAgaWYgKCFwYXJlbnQpIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBpZiAoIShwYXJlbnQgaW5zdGFuY2VvZiBEaWN0KSkgewogICAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJQYXJlbnQgbXVzdCBiZSBhIGRpY3Rpb25hcnkuIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwYXJlbnQuZ2V0QXN5bmMoIktpZHMiKTsKICAgICAgfSkudGhlbihmdW5jdGlvbiAoa2lkcykgewogICAgICAgIGlmICgha2lkcykgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGtpZFByb21pc2VzID0gW107CiAgICAgICAgbGV0IGZvdW5kID0gZmFsc2U7CiAgICAgICAgZm9yIChjb25zdCBraWQgb2Yga2lkcykgewogICAgICAgICAgaWYgKCEoa2lkIGluc3RhbmNlb2YgUmVmKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIktpZCBtdXN0IGJlIGEgcmVmZXJlbmNlLiIpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGlzUmVmc0VxdWFsKGtpZCwga2lkUmVmKSkgewogICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAga2lkUHJvbWlzZXMucHVzaCh4cmVmLmZldGNoQXN5bmMoa2lkKS50aGVuKGZ1bmN0aW9uIChvYmopIHsKICAgICAgICAgICAgaWYgKCEob2JqIGluc3RhbmNlb2YgRGljdCkpIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIktpZCBub2RlIG11c3QgYmUgYSBkaWN0aW9uYXJ5LiIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChvYmouaGFzKCJDb3VudCIpKSB7CiAgICAgICAgICAgICAgdG90YWwgKz0gb2JqLmdldCgiQ291bnQiKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0b3RhbCsrOwogICAgICAgICAgICB9CiAgICAgICAgICB9KSk7CiAgICAgICAgfQogICAgICAgIGlmICghZm91bmQpIHsKICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiS2lkIHJlZmVyZW5jZSBub3QgZm91bmQgaW4gcGFyZW50J3Mga2lkcy4iKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGtpZFByb21pc2VzKS50aGVuKCgpID0+IFt0b3RhbCwgcGFyZW50UmVmXSk7CiAgICAgIH0pOwogICAgfQogICAgbGV0IHRvdGFsID0gMDsKICAgIGNvbnN0IG5leHQgPSByZWYgPT4gcGFnZXNCZWZvcmVSZWYocmVmKS50aGVuKGFyZ3MgPT4gewogICAgICBpZiAoIWFyZ3MpIHsKICAgICAgICB0aGlzLnBhZ2VJbmRleENhY2hlLnB1dChwYWdlUmVmLCB0b3RhbCk7CiAgICAgICAgcmV0dXJuIHRvdGFsOwogICAgICB9CiAgICAgIGNvbnN0IFtjb3VudCwgcGFyZW50UmVmXSA9IGFyZ3M7CiAgICAgIHRvdGFsICs9IGNvdW50OwogICAgICByZXR1cm4gbmV4dChwYXJlbnRSZWYpOwogICAgfSk7CiAgICByZXR1cm4gbmV4dChwYWdlUmVmKTsKICB9CiAgZ2V0IGJhc2VVcmwoKSB7CiAgICBjb25zdCB1cmkgPSB0aGlzLl9jYXREaWN0LmdldCgiVVJJIik7CiAgICBpZiAodXJpIGluc3RhbmNlb2YgRGljdCkgewogICAgICBjb25zdCBiYXNlID0gdXJpLmdldCgiQmFzZSIpOwogICAgICBpZiAodHlwZW9mIGJhc2UgPT09ICJzdHJpbmciKSB7CiAgICAgICAgY29uc3QgYWJzb2x1dGVVcmwgPSBjcmVhdGVWYWxpZEFic29sdXRlVXJsKGJhc2UsIG51bGwsIHsKICAgICAgICAgIHRyeUNvbnZlcnRFbmNvZGluZzogdHJ1ZQogICAgICAgIH0pOwogICAgICAgIGlmIChhYnNvbHV0ZVVybCkgewogICAgICAgICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAiYmFzZVVybCIsIGFic29sdXRlVXJsLmhyZWYpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAiYmFzZVVybCIsIHRoaXMucGRmTWFuYWdlci5kb2NCYXNlVXJsKTsKICB9CiAgc3RhdGljIHBhcnNlRGVzdERpY3Rpb25hcnkoewogICAgZGVzdERpY3QsCiAgICByZXN1bHRPYmosCiAgICBkb2NCYXNlVXJsID0gbnVsbCwKICAgIGRvY0F0dGFjaG1lbnRzID0gbnVsbAogIH0pIHsKICAgIGlmICghKGRlc3REaWN0IGluc3RhbmNlb2YgRGljdCkpIHsKICAgICAgd2FybigicGFyc2VEZXN0RGljdGlvbmFyeTogYGRlc3REaWN0YCBtdXN0IGJlIGEgZGljdGlvbmFyeS4iKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgbGV0IGFjdGlvbiA9IGRlc3REaWN0LmdldCgiQSIpLAogICAgICB1cmwsCiAgICAgIGRlc3Q7CiAgICBpZiAoIShhY3Rpb24gaW5zdGFuY2VvZiBEaWN0KSkgewogICAgICBpZiAoZGVzdERpY3QuaGFzKCJEZXN0IikpIHsKICAgICAgICBhY3Rpb24gPSBkZXN0RGljdC5nZXQoIkRlc3QiKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhY3Rpb24gPSBkZXN0RGljdC5nZXQoIkFBIik7CiAgICAgICAgaWYgKGFjdGlvbiBpbnN0YW5jZW9mIERpY3QpIHsKICAgICAgICAgIGlmIChhY3Rpb24uaGFzKCJEIikpIHsKICAgICAgICAgICAgYWN0aW9uID0gYWN0aW9uLmdldCgiRCIpOwogICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24uaGFzKCJVIikpIHsKICAgICAgICAgICAgYWN0aW9uID0gYWN0aW9uLmdldCgiVSIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKGFjdGlvbiBpbnN0YW5jZW9mIERpY3QpIHsKICAgICAgY29uc3QgYWN0aW9uVHlwZSA9IGFjdGlvbi5nZXQoIlMiKTsKICAgICAgaWYgKCEoYWN0aW9uVHlwZSBpbnN0YW5jZW9mIE5hbWUpKSB7CiAgICAgICAgd2FybigicGFyc2VEZXN0RGljdGlvbmFyeTogSW52YWxpZCB0eXBlIGluIEFjdGlvbiBkaWN0aW9uYXJ5LiIpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBhY3Rpb25OYW1lID0gYWN0aW9uVHlwZS5uYW1lOwogICAgICBzd2l0Y2ggKGFjdGlvbk5hbWUpIHsKICAgICAgICBjYXNlICJSZXNldEZvcm0iOgogICAgICAgICAgY29uc3QgZmxhZ3MgPSBhY3Rpb24uZ2V0KCJGbGFncyIpOwogICAgICAgICAgY29uc3QgaW5jbHVkZSA9ICgodHlwZW9mIGZsYWdzID09PSAibnVtYmVyIiA/IGZsYWdzIDogMCkgJiAxKSA9PT0gMDsKICAgICAgICAgIGNvbnN0IGZpZWxkcyA9IFtdOwogICAgICAgICAgY29uc3QgcmVmcyA9IFtdOwogICAgICAgICAgZm9yIChjb25zdCBvYmogb2YgYWN0aW9uLmdldCgiRmllbGRzIikgfHwgW10pIHsKICAgICAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIFJlZikgewogICAgICAgICAgICAgIHJlZnMucHVzaChvYmoudG9TdHJpbmcoKSk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9iaiA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICBmaWVsZHMucHVzaChzdHJpbmdUb1BERlN0cmluZyhvYmopKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcmVzdWx0T2JqLnJlc2V0Rm9ybSA9IHsKICAgICAgICAgICAgZmllbGRzLAogICAgICAgICAgICByZWZzLAogICAgICAgICAgICBpbmNsdWRlCiAgICAgICAgICB9OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiVVJJIjoKICAgICAgICAgIHVybCA9IGFjdGlvbi5nZXQoIlVSSSIpOwogICAgICAgICAgaWYgKHVybCBpbnN0YW5jZW9mIE5hbWUpIHsKICAgICAgICAgICAgdXJsID0gIi8iICsgdXJsLm5hbWU7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJHb1RvIjoKICAgICAgICAgIGRlc3QgPSBhY3Rpb24uZ2V0KCJEIik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJMYXVuY2giOgogICAgICAgIGNhc2UgIkdvVG9SIjoKICAgICAgICAgIGNvbnN0IHVybERpY3QgPSBhY3Rpb24uZ2V0KCJGIik7CiAgICAgICAgICBpZiAodXJsRGljdCBpbnN0YW5jZW9mIERpY3QpIHsKICAgICAgICAgICAgY29uc3QgZnMgPSBuZXcgRmlsZVNwZWModXJsRGljdCwgbnVsbCwgdHJ1ZSk7CiAgICAgICAgICAgIGNvbnN0IHsKICAgICAgICAgICAgICByYXdGaWxlbmFtZQogICAgICAgICAgICB9ID0gZnMuc2VyaWFsaXphYmxlOwogICAgICAgICAgICB1cmwgPSByYXdGaWxlbmFtZTsKICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHVybERpY3QgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgIHVybCA9IHVybERpY3Q7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCByZW1vdGVEZXN0ID0gZmV0Y2hSZW1vdGVEZXN0KGFjdGlvbik7CiAgICAgICAgICBpZiAocmVtb3RlRGVzdCAmJiB0eXBlb2YgdXJsID09PSAic3RyaW5nIikgewogICAgICAgICAgICB1cmwgPSB1cmwuc3BsaXQoIiMiLCAxKVswXSArICIjIiArIHJlbW90ZURlc3Q7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBuZXdXaW5kb3cgPSBhY3Rpb24uZ2V0KCJOZXdXaW5kb3ciKTsKICAgICAgICAgIGlmICh0eXBlb2YgbmV3V2luZG93ID09PSAiYm9vbGVhbiIpIHsKICAgICAgICAgICAgcmVzdWx0T2JqLm5ld1dpbmRvdyA9IG5ld1dpbmRvdzsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkdvVG9FIjoKICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGFjdGlvbi5nZXQoIlQiKTsKICAgICAgICAgIGxldCBhdHRhY2htZW50OwogICAgICAgICAgaWYgKGRvY0F0dGFjaG1lbnRzICYmIHRhcmdldCBpbnN0YW5jZW9mIERpY3QpIHsKICAgICAgICAgICAgY29uc3QgcmVsYXRpb25zaGlwID0gdGFyZ2V0LmdldCgiUiIpOwogICAgICAgICAgICBjb25zdCBuYW1lID0gdGFyZ2V0LmdldCgiTiIpOwogICAgICAgICAgICBpZiAoaXNOYW1lKHJlbGF0aW9uc2hpcCwgIkMiKSAmJiB0eXBlb2YgbmFtZSA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICBhdHRhY2htZW50ID0gZG9jQXR0YWNobWVudHNbc3RyaW5nVG9QREZTdHJpbmcobmFtZSldOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYXR0YWNobWVudCkgewogICAgICAgICAgICByZXN1bHRPYmouYXR0YWNobWVudCA9IGF0dGFjaG1lbnQ7CiAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnREZXN0ID0gZmV0Y2hSZW1vdGVEZXN0KGFjdGlvbik7CiAgICAgICAgICAgIGlmIChhdHRhY2htZW50RGVzdCkgewogICAgICAgICAgICAgIHJlc3VsdE9iai5hdHRhY2htZW50RGVzdCA9IGF0dGFjaG1lbnREZXN0OwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB3YXJuKGBwYXJzZURlc3REaWN0aW9uYXJ5IC0gdW5pbXBsZW1lbnRlZCAiR29Ub0UiIGFjdGlvbi5gKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIk5hbWVkIjoKICAgICAgICAgIGNvbnN0IG5hbWVkQWN0aW9uID0gYWN0aW9uLmdldCgiTiIpOwogICAgICAgICAgaWYgKG5hbWVkQWN0aW9uIGluc3RhbmNlb2YgTmFtZSkgewogICAgICAgICAgICByZXN1bHRPYmouYWN0aW9uID0gbmFtZWRBY3Rpb24ubmFtZTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIlNldE9DR1N0YXRlIjoKICAgICAgICAgIGNvbnN0IHN0YXRlID0gYWN0aW9uLmdldCgiU3RhdGUiKTsKICAgICAgICAgIGNvbnN0IHByZXNlcnZlUkIgPSBhY3Rpb24uZ2V0KCJQcmVzZXJ2ZVJCIik7CiAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoc3RhdGUpIHx8IHN0YXRlLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHN0YXRlQXJyID0gW107CiAgICAgICAgICBmb3IgKGNvbnN0IGVsZW0gb2Ygc3RhdGUpIHsKICAgICAgICAgICAgaWYgKGVsZW0gaW5zdGFuY2VvZiBOYW1lKSB7CiAgICAgICAgICAgICAgc3dpdGNoIChlbGVtLm5hbWUpIHsKICAgICAgICAgICAgICAgIGNhc2UgIk9OIjoKICAgICAgICAgICAgICAgIGNhc2UgIk9GRiI6CiAgICAgICAgICAgICAgICBjYXNlICJUb2dnbGUiOgogICAgICAgICAgICAgICAgICBzdGF0ZUFyci5wdXNoKGVsZW0ubmFtZSk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChlbGVtIGluc3RhbmNlb2YgUmVmKSB7CiAgICAgICAgICAgICAgc3RhdGVBcnIucHVzaChlbGVtLnRvU3RyaW5nKCkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoc3RhdGVBcnIubGVuZ3RoICE9PSBzdGF0ZS5sZW5ndGgpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICByZXN1bHRPYmouc2V0T0NHU3RhdGUgPSB7CiAgICAgICAgICAgIHN0YXRlOiBzdGF0ZUFyciwKICAgICAgICAgICAgcHJlc2VydmVSQjogdHlwZW9mIHByZXNlcnZlUkIgPT09ICJib29sZWFuIiA/IHByZXNlcnZlUkIgOiB0cnVlCiAgICAgICAgICB9OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiSmF2YVNjcmlwdCI6CiAgICAgICAgICBjb25zdCBqc0FjdGlvbiA9IGFjdGlvbi5nZXQoIkpTIik7CiAgICAgICAgICBsZXQganM7CiAgICAgICAgICBpZiAoanNBY3Rpb24gaW5zdGFuY2VvZiBCYXNlU3RyZWFtKSB7CiAgICAgICAgICAgIGpzID0ganNBY3Rpb24uZ2V0U3RyaW5nKCk7CiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBqc0FjdGlvbiA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAganMgPSBqc0FjdGlvbjsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IGpzVVJMID0ganMgJiYgcmVjb3ZlckpzVVJMKHN0cmluZ1RvUERGU3RyaW5nKGpzKSk7CiAgICAgICAgICBpZiAoanNVUkwpIHsKICAgICAgICAgICAgdXJsID0ganNVUkwudXJsOwogICAgICAgICAgICByZXN1bHRPYmoubmV3V2luZG93ID0ganNVUkwubmV3V2luZG93OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICBkZWZhdWx0OgogICAgICAgICAgaWYgKGFjdGlvbk5hbWUgPT09ICJKYXZhU2NyaXB0IiB8fCBhY3Rpb25OYW1lID09PSAiU3VibWl0Rm9ybSIpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICB3YXJuKGBwYXJzZURlc3REaWN0aW9uYXJ5IC0gdW5zdXBwb3J0ZWQgYWN0aW9uOiAiJHthY3Rpb25OYW1lfSIuYCk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfSBlbHNlIGlmIChkZXN0RGljdC5oYXMoIkRlc3QiKSkgewogICAgICBkZXN0ID0gZGVzdERpY3QuZ2V0KCJEZXN0Iik7CiAgICB9CiAgICBpZiAodHlwZW9mIHVybCA9PT0gInN0cmluZyIpIHsKICAgICAgY29uc3QgYWJzb2x1dGVVcmwgPSBjcmVhdGVWYWxpZEFic29sdXRlVXJsKHVybCwgZG9jQmFzZVVybCwgewogICAgICAgIGFkZERlZmF1bHRQcm90b2NvbDogdHJ1ZSwKICAgICAgICB0cnlDb252ZXJ0RW5jb2Rpbmc6IHRydWUKICAgICAgfSk7CiAgICAgIGlmIChhYnNvbHV0ZVVybCkgewogICAgICAgIHJlc3VsdE9iai51cmwgPSBhYnNvbHV0ZVVybC5ocmVmOwogICAgICB9CiAgICAgIHJlc3VsdE9iai51bnNhZmVVcmwgPSB1cmw7CiAgICB9CiAgICBpZiAoZGVzdCkgewogICAgICBpZiAoZGVzdCBpbnN0YW5jZW9mIE5hbWUpIHsKICAgICAgICBkZXN0ID0gZGVzdC5uYW1lOwogICAgICB9CiAgICAgIGlmICh0eXBlb2YgZGVzdCA9PT0gInN0cmluZyIpIHsKICAgICAgICByZXN1bHRPYmouZGVzdCA9IHN0cmluZ1RvUERGU3RyaW5nKGRlc3QpOwogICAgICB9IGVsc2UgaWYgKGlzVmFsaWRFeHBsaWNpdERlc3QoZGVzdCkpIHsKICAgICAgICByZXN1bHRPYmouZGVzdCA9IGRlc3Q7CiAgICAgIH0KICAgIH0KICB9Cn0KCjsvLyAuL3NyYy9jb3JlL29iamVjdF9sb2FkZXIuanMKCgoKCmZ1bmN0aW9uIG1heUhhdmVDaGlsZHJlbih2YWx1ZSkgewogIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFJlZiB8fCB2YWx1ZSBpbnN0YW5jZW9mIERpY3QgfHwgdmFsdWUgaW5zdGFuY2VvZiBCYXNlU3RyZWFtIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpOwp9CmZ1bmN0aW9uIGFkZENoaWxkcmVuKG5vZGUsIG5vZGVzVG9WaXNpdCkgewogIGlmIChub2RlIGluc3RhbmNlb2YgRGljdCkgewogICAgbm9kZSA9IG5vZGUuZ2V0UmF3VmFsdWVzKCk7CiAgfSBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgQmFzZVN0cmVhbSkgewogICAgbm9kZSA9IG5vZGUuZGljdC5nZXRSYXdWYWx1ZXMoKTsKICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KG5vZGUpKSB7CiAgICByZXR1cm47CiAgfQogIGZvciAoY29uc3QgcmF3VmFsdWUgb2Ygbm9kZSkgewogICAgaWYgKG1heUhhdmVDaGlsZHJlbihyYXdWYWx1ZSkpIHsKICAgICAgbm9kZXNUb1Zpc2l0LnB1c2gocmF3VmFsdWUpOwogICAgfQogIH0KfQpjbGFzcyBPYmplY3RMb2FkZXIgewogIGNvbnN0cnVjdG9yKGRpY3QsIGtleXMsIHhyZWYpIHsKICAgIHRoaXMuZGljdCA9IGRpY3Q7CiAgICB0aGlzLmtleXMgPSBrZXlzOwogICAgdGhpcy54cmVmID0geHJlZjsKICAgIHRoaXMucmVmU2V0ID0gbnVsbDsKICB9CiAgYXN5bmMgbG9hZCgpIHsKICAgIGlmICh0aGlzLnhyZWYuc3RyZWFtLmlzRGF0YUxvYWRlZCkgewogICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgfQogICAgY29uc3QgewogICAgICBrZXlzLAogICAgICBkaWN0CiAgICB9ID0gdGhpczsKICAgIHRoaXMucmVmU2V0ID0gbmV3IFJlZlNldCgpOwogICAgY29uc3Qgbm9kZXNUb1Zpc2l0ID0gW107CiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7CiAgICAgIGNvbnN0IHJhd1ZhbHVlID0gZGljdC5nZXRSYXcoa2V5KTsKICAgICAgaWYgKHJhd1ZhbHVlICE9PSB1bmRlZmluZWQpIHsKICAgICAgICBub2Rlc1RvVmlzaXQucHVzaChyYXdWYWx1ZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0aGlzLl93YWxrKG5vZGVzVG9WaXNpdCk7CiAgfQogIGFzeW5jIF93YWxrKG5vZGVzVG9WaXNpdCkgewogICAgY29uc3Qgbm9kZXNUb1JldmlzaXQgPSBbXTsKICAgIGNvbnN0IHBlbmRpbmdSZXF1ZXN0cyA9IFtdOwogICAgd2hpbGUgKG5vZGVzVG9WaXNpdC5sZW5ndGgpIHsKICAgICAgbGV0IGN1cnJlbnROb2RlID0gbm9kZXNUb1Zpc2l0LnBvcCgpOwogICAgICBpZiAoY3VycmVudE5vZGUgaW5zdGFuY2VvZiBSZWYpIHsKICAgICAgICBpZiAodGhpcy5yZWZTZXQuaGFzKGN1cnJlbnROb2RlKSkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICB0aGlzLnJlZlNldC5wdXQoY3VycmVudE5vZGUpOwogICAgICAgICAgY3VycmVudE5vZGUgPSB0aGlzLnhyZWYuZmV0Y2goY3VycmVudE5vZGUpOwogICAgICAgIH0gY2F0Y2ggKGV4KSB7CiAgICAgICAgICBpZiAoIShleCBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKSkgewogICAgICAgICAgICB3YXJuKGBPYmplY3RMb2FkZXIuX3dhbGsgLSByZXF1ZXN0aW5nIGFsbCBkYXRhOiAiJHtleH0iLmApOwogICAgICAgICAgICB0aGlzLnJlZlNldCA9IG51bGw7CiAgICAgICAgICAgIGNvbnN0IHsKICAgICAgICAgICAgICBtYW5hZ2VyCiAgICAgICAgICAgIH0gPSB0aGlzLnhyZWYuc3RyZWFtOwogICAgICAgICAgICByZXR1cm4gbWFuYWdlci5yZXF1ZXN0QWxsQ2h1bmtzKCk7CiAgICAgICAgICB9CiAgICAgICAgICBub2Rlc1RvUmV2aXNpdC5wdXNoKGN1cnJlbnROb2RlKTsKICAgICAgICAgIHBlbmRpbmdSZXF1ZXN0cy5wdXNoKHsKICAgICAgICAgICAgYmVnaW46IGV4LmJlZ2luLAogICAgICAgICAgICBlbmQ6IGV4LmVuZAogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pIHsKICAgICAgICBjb25zdCBiYXNlU3RyZWFtcyA9IGN1cnJlbnROb2RlLmdldEJhc2VTdHJlYW1zKCk7CiAgICAgICAgaWYgKGJhc2VTdHJlYW1zKSB7CiAgICAgICAgICBsZXQgZm91bmRNaXNzaW5nRGF0YSA9IGZhbHNlOwogICAgICAgICAgZm9yIChjb25zdCBzdHJlYW0gb2YgYmFzZVN0cmVhbXMpIHsKICAgICAgICAgICAgaWYgKHN0cmVhbS5pc0RhdGFMb2FkZWQpIHsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3VuZE1pc3NpbmdEYXRhID0gdHJ1ZTsKICAgICAgICAgICAgcGVuZGluZ1JlcXVlc3RzLnB1c2goewogICAgICAgICAgICAgIGJlZ2luOiBzdHJlYW0uc3RhcnQsCiAgICAgICAgICAgICAgZW5kOiBzdHJlYW0uZW5kCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGZvdW5kTWlzc2luZ0RhdGEpIHsKICAgICAgICAgICAgbm9kZXNUb1JldmlzaXQucHVzaChjdXJyZW50Tm9kZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGFkZENoaWxkcmVuKGN1cnJlbnROb2RlLCBub2Rlc1RvVmlzaXQpOwogICAgfQogICAgaWYgKHBlbmRpbmdSZXF1ZXN0cy5sZW5ndGgpIHsKICAgICAgYXdhaXQgdGhpcy54cmVmLnN0cmVhbS5tYW5hZ2VyLnJlcXVlc3RSYW5nZXMocGVuZGluZ1JlcXVlc3RzKTsKICAgICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzVG9SZXZpc2l0KSB7CiAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBSZWYpIHsKICAgICAgICAgIHRoaXMucmVmU2V0LnJlbW92ZShub2RlKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMuX3dhbGsobm9kZXNUb1JldmlzaXQpOwogICAgfQogICAgdGhpcy5yZWZTZXQgPSBudWxsOwogICAgcmV0dXJuIHVuZGVmaW5lZDsKICB9Cn0KCjsvLyAuL3NyYy9jb3JlL3hmYS9zeW1ib2xfdXRpbHMuanMKY29uc3QgJGFjY2VwdFdoaXRlc3BhY2UgPSBTeW1ib2woKTsKY29uc3QgJGFkZEhUTUwgPSBTeW1ib2woKTsKY29uc3QgJGFwcGVuZENoaWxkID0gU3ltYm9sKCk7CmNvbnN0ICRjaGlsZHJlblRvSFRNTCA9IFN5bWJvbCgpOwpjb25zdCAkY2xlYW4gPSBTeW1ib2woKTsKY29uc3QgJGNsZWFuUGFnZSA9IFN5bWJvbCgpOwpjb25zdCAkY2xlYW51cCA9IFN5bWJvbCgpOwpjb25zdCAkY2xvbmUgPSBTeW1ib2woKTsKY29uc3QgJGNvbnN1bWVkID0gU3ltYm9sKCk7CmNvbnN0ICRjb250ZW50ID0gU3ltYm9sKCJjb250ZW50Iik7CmNvbnN0ICRkYXRhID0gU3ltYm9sKCJkYXRhIik7CmNvbnN0ICRkdW1wID0gU3ltYm9sKCk7CmNvbnN0ICRleHRyYSA9IFN5bWJvbCgiZXh0cmEiKTsKY29uc3QgJGZpbmFsaXplID0gU3ltYm9sKCk7CmNvbnN0ICRmbHVzaEhUTUwgPSBTeW1ib2woKTsKY29uc3QgJGdldEF0dHJpYnV0ZUl0ID0gU3ltYm9sKCk7CmNvbnN0ICRnZXRBdHRyaWJ1dGVzID0gU3ltYm9sKCk7CmNvbnN0ICRnZXRBdmFpbGFibGVTcGFjZSA9IFN5bWJvbCgpOwpjb25zdCAkZ2V0Q2hpbGRyZW5CeUNsYXNzID0gU3ltYm9sKCk7CmNvbnN0ICRnZXRDaGlsZHJlbkJ5TmFtZSA9IFN5bWJvbCgpOwpjb25zdCAkZ2V0Q2hpbGRyZW5CeU5hbWVJdCA9IFN5bWJvbCgpOwpjb25zdCAkZ2V0RGF0YVZhbHVlID0gU3ltYm9sKCk7CmNvbnN0ICRnZXRFeHRyYSA9IFN5bWJvbCgpOwpjb25zdCAkZ2V0UmVhbENoaWxkcmVuQnlOYW1lSXQgPSBTeW1ib2woKTsKY29uc3QgJGdldENoaWxkcmVuID0gU3ltYm9sKCk7CmNvbnN0ICRnZXRDb250YWluZWRDaGlsZHJlbiA9IFN5bWJvbCgpOwpjb25zdCAkZ2V0TmV4dFBhZ2UgPSBTeW1ib2woKTsKY29uc3QgJGdldFN1YmZvcm1QYXJlbnQgPSBTeW1ib2woKTsKY29uc3QgJGdldFBhcmVudCA9IFN5bWJvbCgpOwpjb25zdCAkZ2V0VGVtcGxhdGVSb290ID0gU3ltYm9sKCk7CmNvbnN0ICRnbG9iYWxEYXRhID0gU3ltYm9sKCk7CmNvbnN0ICRoYXNTZXR0YWJsZVZhbHVlID0gU3ltYm9sKCk7CmNvbnN0ICRpZHMgPSBTeW1ib2woKTsKY29uc3QgJGluZGV4T2YgPSBTeW1ib2woKTsKY29uc3QgJGluc2VydEF0ID0gU3ltYm9sKCk7CmNvbnN0ICRpc0NEQVRBWG1sID0gU3ltYm9sKCk7CmNvbnN0ICRpc0JpbmRhYmxlID0gU3ltYm9sKCk7CmNvbnN0ICRpc0RhdGFWYWx1ZSA9IFN5bWJvbCgpOwpjb25zdCAkaXNEZXNjZW5kZW50ID0gU3ltYm9sKCk7CmNvbnN0ICRpc05zQWdub3N0aWMgPSBTeW1ib2woKTsKY29uc3QgJGlzU3BsaXR0YWJsZSA9IFN5bWJvbCgpOwpjb25zdCAkaXNUaGVyZU1vcmVXaWR0aCA9IFN5bWJvbCgpOwpjb25zdCAkaXNUcmFuc3BhcmVudCA9IFN5bWJvbCgpOwpjb25zdCAkaXNVc2FibGUgPSBTeW1ib2woKTsKY29uc3QgJGxhc3RBdHRyaWJ1dGUgPSBTeW1ib2woKTsKY29uc3QgJG5hbWVzcGFjZUlkID0gU3ltYm9sKCJuYW1lc3BhY2VJZCIpOwpjb25zdCAkbm9kZU5hbWUgPSBTeW1ib2woIm5vZGVOYW1lIik7CmNvbnN0ICRuc0F0dHJpYnV0ZXMgPSBTeW1ib2woKTsKY29uc3QgJG9uQ2hpbGQgPSBTeW1ib2woKTsKY29uc3QgJG9uQ2hpbGRDaGVjayA9IFN5bWJvbCgpOwpjb25zdCAkb25UZXh0ID0gU3ltYm9sKCk7CmNvbnN0ICRwdXNoR2x5cGhzID0gU3ltYm9sKCk7CmNvbnN0ICRwb3BQYXJhID0gU3ltYm9sKCk7CmNvbnN0ICRwdXNoUGFyYSA9IFN5bWJvbCgpOwpjb25zdCAkcmVtb3ZlQ2hpbGQgPSBTeW1ib2woKTsKY29uc3QgJHJvb3QgPSBTeW1ib2woInJvb3QiKTsKY29uc3QgJHJlc29sdmVQcm90b3R5cGVzID0gU3ltYm9sKCk7CmNvbnN0ICRzZWFyY2hOb2RlID0gU3ltYm9sKCk7CmNvbnN0ICRzZXRJZCA9IFN5bWJvbCgpOwpjb25zdCAkc2V0U2V0QXR0cmlidXRlcyA9IFN5bWJvbCgpOwpjb25zdCAkc2V0VmFsdWUgPSBTeW1ib2woKTsKY29uc3QgJHRhYkluZGV4ID0gU3ltYm9sKCk7CmNvbnN0ICR0ZXh0ID0gU3ltYm9sKCk7CmNvbnN0ICR0b1BhZ2VzID0gU3ltYm9sKCk7CmNvbnN0ICR0b0hUTUwgPSBTeW1ib2woKTsKY29uc3QgJHRvU3RyaW5nID0gU3ltYm9sKCk7CmNvbnN0ICR0b1N0eWxlID0gU3ltYm9sKCk7CmNvbnN0ICR1aWQgPSBTeW1ib2woInVpZCIpOwoKOy8vIC4vc3JjL2NvcmUveGZhL25hbWVzcGFjZXMuanMKY29uc3QgJGJ1aWxkWEZBT2JqZWN0ID0gU3ltYm9sKCk7CmNvbnN0IE5hbWVzcGFjZUlkcyA9IHsKICBjb25maWc6IHsKICAgIGlkOiAwLAogICAgY2hlY2s6IG5zID0+IG5zLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGNpLyIpCiAgfSwKICBjb25uZWN0aW9uU2V0OiB7CiAgICBpZDogMSwKICAgIGNoZWNrOiBucyA9PiBucy5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hmYS1jb25uZWN0aW9uLXNldC8iKQogIH0sCiAgZGF0YXNldHM6IHsKICAgIGlkOiAyLAogICAgY2hlY2s6IG5zID0+IG5zLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLWRhdGEvIikKICB9LAogIGZvcm06IHsKICAgIGlkOiAzLAogICAgY2hlY2s6IG5zID0+IG5zLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLWZvcm0vIikKICB9LAogIGxvY2FsZVNldDogewogICAgaWQ6IDQsCiAgICBjaGVjazogbnMgPT4gbnMuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtbG9jYWxlLXNldC8iKQogIH0sCiAgcGRmOiB7CiAgICBpZDogNSwKICAgIGNoZWNrOiBucyA9PiBucyA9PT0gImh0dHA6Ly9ucy5hZG9iZS5jb20veGRwL3BkZi8iCiAgfSwKICBzaWduYXR1cmU6IHsKICAgIGlkOiA2LAogICAgY2hlY2s6IG5zID0+IG5zID09PSAiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyIKICB9LAogIHNvdXJjZVNldDogewogICAgaWQ6IDcsCiAgICBjaGVjazogbnMgPT4gbnMuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtc291cmNlLXNldC8iKQogIH0sCiAgc3R5bGVzaGVldDogewogICAgaWQ6IDgsCiAgICBjaGVjazogbnMgPT4gbnMgPT09ICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCiAgfSwKICB0ZW1wbGF0ZTogewogICAgaWQ6IDksCiAgICBjaGVjazogbnMgPT4gbnMuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtdGVtcGxhdGUvIikKICB9LAogIHhkYzogewogICAgaWQ6IDEwLAogICAgY2hlY2s6IG5zID0+IG5zLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGRjLyIpCiAgfSwKICB4ZHA6IHsKICAgIGlkOiAxMSwKICAgIGNoZWNrOiBucyA9PiBucyA9PT0gImh0dHA6Ly9ucy5hZG9iZS5jb20veGRwLyIKICB9LAogIHhmZGY6IHsKICAgIGlkOiAxMiwKICAgIGNoZWNrOiBucyA9PiBucyA9PT0gImh0dHA6Ly9ucy5hZG9iZS5jb20veGZkZi8iCiAgfSwKICB4aHRtbDogewogICAgaWQ6IDEzLAogICAgY2hlY2s6IG5zID0+IG5zID09PSAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIKICB9LAogIHhtcG1ldGE6IHsKICAgIGlkOiAxNCwKICAgIGNoZWNrOiBucyA9PiBucyA9PT0gImh0dHA6Ly9ucy5hZG9iZS5jb20veG1wbWV0YS8iCiAgfQp9OwoKOy8vIC4vc3JjL2NvcmUveGZhL3V0aWxzLmpzCgpjb25zdCBkaW1Db252ZXJ0ZXJzID0gewogIHB0OiB4ID0+IHgsCiAgY206IHggPT4geCAvIDIuNTQgKiA3MiwKICBtbTogeCA9PiB4IC8gKDEwICogMi41NCkgKiA3MiwKICBpbjogeCA9PiB4ICogNzIsCiAgcHg6IHggPT4geAp9Owpjb25zdCBtZWFzdXJlbWVudFBhdHRlcm4gPSAvKFsrLV0/XGQrXC4/XGQqKSguKikvOwpmdW5jdGlvbiBzdHJpcFF1b3RlcyhzdHIpIHsKICBpZiAoc3RyLnN0YXJ0c1dpdGgoIiciKSB8fCBzdHIuc3RhcnRzV2l0aCgnIicpKSB7CiAgICByZXR1cm4gc3RyLnNsaWNlKDEsIC0xKTsKICB9CiAgcmV0dXJuIHN0cjsKfQpmdW5jdGlvbiBnZXRJbnRlZ2VyKHsKICBkYXRhLAogIGRlZmF1bHRWYWx1ZSwKICB2YWxpZGF0ZQp9KSB7CiAgaWYgKCFkYXRhKSB7CiAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwogIH0KICBkYXRhID0gZGF0YS50cmltKCk7CiAgY29uc3QgbiA9IHBhcnNlSW50KGRhdGEsIDEwKTsKICBpZiAoIWlzTmFOKG4pICYmIHZhbGlkYXRlKG4pKSB7CiAgICByZXR1cm4gbjsKICB9CiAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKfQpmdW5jdGlvbiBnZXRGbG9hdCh7CiAgZGF0YSwKICBkZWZhdWx0VmFsdWUsCiAgdmFsaWRhdGUKfSkgewogIGlmICghZGF0YSkgewogICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKICB9CiAgZGF0YSA9IGRhdGEudHJpbSgpOwogIGNvbnN0IG4gPSBwYXJzZUZsb2F0KGRhdGEpOwogIGlmICghaXNOYU4obikgJiYgdmFsaWRhdGUobikpIHsKICAgIHJldHVybiBuOwogIH0KICByZXR1cm4gZGVmYXVsdFZhbHVlOwp9CmZ1bmN0aW9uIGdldEtleXdvcmQoewogIGRhdGEsCiAgZGVmYXVsdFZhbHVlLAogIHZhbGlkYXRlCn0pIHsKICBpZiAoIWRhdGEpIHsKICAgIHJldHVybiBkZWZhdWx0VmFsdWU7CiAgfQogIGRhdGEgPSBkYXRhLnRyaW0oKTsKICBpZiAodmFsaWRhdGUoZGF0YSkpIHsKICAgIHJldHVybiBkYXRhOwogIH0KICByZXR1cm4gZGVmYXVsdFZhbHVlOwp9CmZ1bmN0aW9uIGdldFN0cmluZ09wdGlvbihkYXRhLCBvcHRpb25zKSB7CiAgcmV0dXJuIGdldEtleXdvcmQoewogICAgZGF0YSwKICAgIGRlZmF1bHRWYWx1ZTogb3B0aW9uc1swXSwKICAgIHZhbGlkYXRlOiBrID0+IG9wdGlvbnMuaW5jbHVkZXMoaykKICB9KTsKfQpmdW5jdGlvbiBnZXRNZWFzdXJlbWVudChzdHIsIGRlZiA9ICIwIikgewogIGRlZiB8fD0gIjAiOwogIGlmICghc3RyKSB7CiAgICByZXR1cm4gZ2V0TWVhc3VyZW1lbnQoZGVmKTsKICB9CiAgY29uc3QgbWF0Y2ggPSBzdHIudHJpbSgpLm1hdGNoKG1lYXN1cmVtZW50UGF0dGVybik7CiAgaWYgKCFtYXRjaCkgewogICAgcmV0dXJuIGdldE1lYXN1cmVtZW50KGRlZik7CiAgfQogIGNvbnN0IFssIHZhbHVlU3RyLCB1bml0XSA9IG1hdGNoOwogIGNvbnN0IHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZVN0cik7CiAgaWYgKGlzTmFOKHZhbHVlKSkgewogICAgcmV0dXJuIGdldE1lYXN1cmVtZW50KGRlZik7CiAgfQogIGlmICh2YWx1ZSA9PT0gMCkgewogICAgcmV0dXJuIDA7CiAgfQogIGNvbnN0IGNvbnYgPSBkaW1Db252ZXJ0ZXJzW3VuaXRdOwogIGlmIChjb252KSB7CiAgICByZXR1cm4gY29udih2YWx1ZSk7CiAgfQogIHJldHVybiB2YWx1ZTsKfQpmdW5jdGlvbiBnZXRSYXRpbyhkYXRhKSB7CiAgaWYgKCFkYXRhKSB7CiAgICByZXR1cm4gewogICAgICBudW06IDEsCiAgICAgIGRlbjogMQogICAgfTsKICB9CiAgY29uc3QgcmF0aW8gPSBkYXRhLnNwbGl0KCI6IiwgMikubWFwKHggPT4gcGFyc2VGbG9hdCh4LnRyaW0oKSkpLmZpbHRlcih4ID0+ICFpc05hTih4KSk7CiAgaWYgKHJhdGlvLmxlbmd0aCA9PT0gMSkgewogICAgcmF0aW8ucHVzaCgxKTsKICB9CiAgaWYgKHJhdGlvLmxlbmd0aCA9PT0gMCkgewogICAgcmV0dXJuIHsKICAgICAgbnVtOiAxLAogICAgICBkZW46IDEKICAgIH07CiAgfQogIGNvbnN0IFtudW0sIGRlbl0gPSByYXRpbzsKICByZXR1cm4gewogICAgbnVtLAogICAgZGVuCiAgfTsKfQpmdW5jdGlvbiBnZXRSZWxldmFudChkYXRhKSB7CiAgaWYgKCFkYXRhKSB7CiAgICByZXR1cm4gW107CiAgfQogIHJldHVybiBkYXRhLnRyaW0oKS5zcGxpdCgvXHMrLykubWFwKGUgPT4gKHsKICAgIGV4Y2x1ZGVkOiBlWzBdID09PSAiLSIsCiAgICB2aWV3bmFtZTogZS5zdWJzdHJpbmcoMSkKICB9KSk7Cn0KZnVuY3Rpb24gZ2V0Q29sb3IoZGF0YSwgZGVmID0gWzAsIDAsIDBdKSB7CiAgbGV0IFtyLCBnLCBiXSA9IGRlZjsKICBpZiAoIWRhdGEpIHsKICAgIHJldHVybiB7CiAgICAgIHIsCiAgICAgIGcsCiAgICAgIGIKICAgIH07CiAgfQogIGNvbnN0IGNvbG9yID0gZGF0YS5zcGxpdCgiLCIsIDMpLm1hcChjID0+IE1hdGhDbGFtcChwYXJzZUludChjLnRyaW0oKSwgMTApLCAwLCAyNTUpKS5tYXAoYyA9PiBpc05hTihjKSA/IDAgOiBjKTsKICBpZiAoY29sb3IubGVuZ3RoIDwgMykgewogICAgcmV0dXJuIHsKICAgICAgciwKICAgICAgZywKICAgICAgYgogICAgfTsKICB9CiAgW3IsIGcsIGJdID0gY29sb3I7CiAgcmV0dXJuIHsKICAgIHIsCiAgICBnLAogICAgYgogIH07Cn0KZnVuY3Rpb24gZ2V0QkJveChkYXRhKSB7CiAgY29uc3QgZGVmID0gLTE7CiAgaWYgKCFkYXRhKSB7CiAgICByZXR1cm4gewogICAgICB4OiBkZWYsCiAgICAgIHk6IGRlZiwKICAgICAgd2lkdGg6IGRlZiwKICAgICAgaGVpZ2h0OiBkZWYKICAgIH07CiAgfQogIGNvbnN0IGJib3ggPSBkYXRhLnNwbGl0KCIsIiwgNCkubWFwKG0gPT4gZ2V0TWVhc3VyZW1lbnQobS50cmltKCksICItMSIpKTsKICBpZiAoYmJveC5sZW5ndGggPCA0IHx8IGJib3hbMl0gPCAwIHx8IGJib3hbM10gPCAwKSB7CiAgICByZXR1cm4gewogICAgICB4OiBkZWYsCiAgICAgIHk6IGRlZiwKICAgICAgd2lkdGg6IGRlZiwKICAgICAgaGVpZ2h0OiBkZWYKICAgIH07CiAgfQogIGNvbnN0IFt4LCB5LCB3aWR0aCwgaGVpZ2h0XSA9IGJib3g7CiAgcmV0dXJuIHsKICAgIHgsCiAgICB5LAogICAgd2lkdGgsCiAgICBoZWlnaHQKICB9Owp9CmNsYXNzIEhUTUxSZXN1bHQgewogIHN0YXRpYyBnZXQgRkFJTFVSRSgpIHsKICAgIHJldHVybiBzaGFkb3codGhpcywgIkZBSUxVUkUiLCBuZXcgSFRNTFJlc3VsdChmYWxzZSwgbnVsbCwgbnVsbCwgbnVsbCkpOwogIH0KICBzdGF0aWMgZ2V0IEVNUFRZKCkgewogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAiRU1QVFkiLCBuZXcgSFRNTFJlc3VsdCh0cnVlLCBudWxsLCBudWxsLCBudWxsKSk7CiAgfQogIGNvbnN0cnVjdG9yKHN1Y2Nlc3MsIGh0bWwsIGJib3gsIGJyZWFrTm9kZSkgewogICAgdGhpcy5zdWNjZXNzID0gc3VjY2VzczsKICAgIHRoaXMuaHRtbCA9IGh0bWw7CiAgICB0aGlzLmJib3ggPSBiYm94OwogICAgdGhpcy5icmVha05vZGUgPSBicmVha05vZGU7CiAgfQogIGlzQnJlYWsoKSB7CiAgICByZXR1cm4gISF0aGlzLmJyZWFrTm9kZTsKICB9CiAgc3RhdGljIGJyZWFrTm9kZShub2RlKSB7CiAgICByZXR1cm4gbmV3IEhUTUxSZXN1bHQoZmFsc2UsIG51bGwsIG51bGwsIG5vZGUpOwogIH0KICBzdGF0aWMgc3VjY2VzcyhodG1sLCBiYm94ID0gbnVsbCkgewogICAgcmV0dXJuIG5ldyBIVE1MUmVzdWx0KHRydWUsIGh0bWwsIGJib3gsIG51bGwpOwogIH0KfQoKOy8vIC4vc3JjL2NvcmUveGZhL2ZvbnRzLmpzCgoKCmNsYXNzIEZvbnRGaW5kZXIgewogIGNvbnN0cnVjdG9yKHBkZkZvbnRzKSB7CiAgICB0aGlzLmZvbnRzID0gbmV3IE1hcCgpOwogICAgdGhpcy5jYWNoZSA9IG5ldyBNYXAoKTsKICAgIHRoaXMud2FybmVkID0gbmV3IFNldCgpOwogICAgdGhpcy5kZWZhdWx0Rm9udCA9IG51bGw7CiAgICB0aGlzLmFkZChwZGZGb250cyk7CiAgfQogIGFkZChwZGZGb250cywgcmVhbGx5TWlzc2luZ0ZvbnRzID0gbnVsbCkgewogICAgZm9yIChjb25zdCBwZGZGb250IG9mIHBkZkZvbnRzKSB7CiAgICAgIHRoaXMuYWRkUGRmRm9udChwZGZGb250KTsKICAgIH0KICAgIGZvciAoY29uc3QgcGRmRm9udCBvZiB0aGlzLmZvbnRzLnZhbHVlcygpKSB7CiAgICAgIGlmICghcGRmRm9udC5yZWd1bGFyKSB7CiAgICAgICAgcGRmRm9udC5yZWd1bGFyID0gcGRmRm9udC5pdGFsaWMgfHwgcGRmRm9udC5ib2xkIHx8IHBkZkZvbnQuYm9sZGl0YWxpYzsKICAgICAgfQogICAgfQogICAgaWYgKCFyZWFsbHlNaXNzaW5nRm9udHMgfHwgcmVhbGx5TWlzc2luZ0ZvbnRzLnNpemUgPT09IDApIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgbXlyaWFkID0gdGhpcy5mb250cy5nZXQoIlBkZkpTLUZhbGxiYWNrLVBkZkpTLVhGQSIpOwogICAgZm9yIChjb25zdCBtaXNzaW5nIG9mIHJlYWxseU1pc3NpbmdGb250cykgewogICAgICB0aGlzLmZvbnRzLnNldChtaXNzaW5nLCBteXJpYWQpOwogICAgfQogIH0KICBhZGRQZGZGb250KHBkZkZvbnQpIHsKICAgIGNvbnN0IGNzc0ZvbnRJbmZvID0gcGRmRm9udC5jc3NGb250SW5mbzsKICAgIGNvbnN0IG5hbWUgPSBjc3NGb250SW5mby5mb250RmFtaWx5OwogICAgbGV0IGZvbnQgPSB0aGlzLmZvbnRzLmdldChuYW1lKTsKICAgIGlmICghZm9udCkgewogICAgICBmb250ID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgICAgdGhpcy5mb250cy5zZXQobmFtZSwgZm9udCk7CiAgICAgIGlmICghdGhpcy5kZWZhdWx0Rm9udCkgewogICAgICAgIHRoaXMuZGVmYXVsdEZvbnQgPSBmb250OwogICAgICB9CiAgICB9CiAgICBsZXQgcHJvcGVydHkgPSAiIjsKICAgIGNvbnN0IGZvbnRXZWlnaHQgPSBwYXJzZUZsb2F0KGNzc0ZvbnRJbmZvLmZvbnRXZWlnaHQpOwogICAgaWYgKHBhcnNlRmxvYXQoY3NzRm9udEluZm8uaXRhbGljQW5nbGUpICE9PSAwKSB7CiAgICAgIHByb3BlcnR5ID0gZm9udFdlaWdodCA+PSA3MDAgPyAiYm9sZGl0YWxpYyIgOiAiaXRhbGljIjsKICAgIH0gZWxzZSBpZiAoZm9udFdlaWdodCA+PSA3MDApIHsKICAgICAgcHJvcGVydHkgPSAiYm9sZCI7CiAgICB9CiAgICBpZiAoIXByb3BlcnR5KSB7CiAgICAgIGlmIChwZGZGb250Lm5hbWUuaW5jbHVkZXMoIkJvbGQiKSB8fCBwZGZGb250LnBzTmFtZT8uaW5jbHVkZXMoIkJvbGQiKSkgewogICAgICAgIHByb3BlcnR5ID0gImJvbGQiOwogICAgICB9CiAgICAgIGlmIChwZGZGb250Lm5hbWUuaW5jbHVkZXMoIkl0YWxpYyIpIHx8IHBkZkZvbnQubmFtZS5lbmRzV2l0aCgiSXQiKSB8fCBwZGZGb250LnBzTmFtZT8uaW5jbHVkZXMoIkl0YWxpYyIpIHx8IHBkZkZvbnQucHNOYW1lPy5lbmRzV2l0aCgiSXQiKSkgewogICAgICAgIHByb3BlcnR5ICs9ICJpdGFsaWMiOwogICAgICB9CiAgICB9CiAgICBpZiAoIXByb3BlcnR5KSB7CiAgICAgIHByb3BlcnR5ID0gInJlZ3VsYXIiOwogICAgfQogICAgZm9udFtwcm9wZXJ0eV0gPSBwZGZGb250OwogIH0KICBnZXREZWZhdWx0KCkgewogICAgcmV0dXJuIHRoaXMuZGVmYXVsdEZvbnQ7CiAgfQogIGZpbmQoZm9udE5hbWUsIG11c3RXYXJuID0gdHJ1ZSkgewogICAgbGV0IGZvbnQgPSB0aGlzLmZvbnRzLmdldChmb250TmFtZSkgfHwgdGhpcy5jYWNoZS5nZXQoZm9udE5hbWUpOwogICAgaWYgKGZvbnQpIHsKICAgICAgcmV0dXJuIGZvbnQ7CiAgICB9CiAgICBjb25zdCBwYXR0ZXJuID0gLyx8LXxffCB8Ym9sZGl0YWxpY3xib2xkfGl0YWxpY3xyZWd1bGFyfGl0L2dpOwogICAgbGV0IG5hbWUgPSBmb250TmFtZS5yZXBsYWNlQWxsKHBhdHRlcm4sICIiKTsKICAgIGZvbnQgPSB0aGlzLmZvbnRzLmdldChuYW1lKTsKICAgIGlmIChmb250KSB7CiAgICAgIHRoaXMuY2FjaGUuc2V0KGZvbnROYW1lLCBmb250KTsKICAgICAgcmV0dXJuIGZvbnQ7CiAgICB9CiAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpOwogICAgY29uc3QgbWF5YmUgPSBbXTsKICAgIGZvciAoY29uc3QgW2ZhbWlseSwgcGRmRm9udF0gb2YgdGhpcy5mb250cy5lbnRyaWVzKCkpIHsKICAgICAgaWYgKGZhbWlseS5yZXBsYWNlQWxsKHBhdHRlcm4sICIiKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgobmFtZSkpIHsKICAgICAgICBtYXliZS5wdXNoKHBkZkZvbnQpOwogICAgICB9CiAgICB9CiAgICBpZiAobWF5YmUubGVuZ3RoID09PSAwKSB7CiAgICAgIGZvciAoY29uc3QgWywgcGRmRm9udF0gb2YgdGhpcy5mb250cy5lbnRyaWVzKCkpIHsKICAgICAgICBpZiAocGRmRm9udC5yZWd1bGFyLm5hbWU/LnJlcGxhY2VBbGwocGF0dGVybiwgIiIpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChuYW1lKSkgewogICAgICAgICAgbWF5YmUucHVzaChwZGZGb250KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChtYXliZS5sZW5ndGggPT09IDApIHsKICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZUFsbCgvcHNtdHxtdC9naSwgIiIpOwogICAgICBmb3IgKGNvbnN0IFtmYW1pbHksIHBkZkZvbnRdIG9mIHRoaXMuZm9udHMuZW50cmllcygpKSB7CiAgICAgICAgaWYgKGZhbWlseS5yZXBsYWNlQWxsKHBhdHRlcm4sICIiKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgobmFtZSkpIHsKICAgICAgICAgIG1heWJlLnB1c2gocGRmRm9udCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAobWF5YmUubGVuZ3RoID09PSAwKSB7CiAgICAgIGZvciAoY29uc3QgcGRmRm9udCBvZiB0aGlzLmZvbnRzLnZhbHVlcygpKSB7CiAgICAgICAgaWYgKHBkZkZvbnQucmVndWxhci5uYW1lPy5yZXBsYWNlQWxsKHBhdHRlcm4sICIiKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgobmFtZSkpIHsKICAgICAgICAgIG1heWJlLnB1c2gocGRmRm9udCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAobWF5YmUubGVuZ3RoID49IDEpIHsKICAgICAgaWYgKG1heWJlLmxlbmd0aCAhPT0gMSAmJiBtdXN0V2FybikgewogICAgICAgIHdhcm4oYFhGQSAtIFRvbyBtYW55IGNob2ljZXMgdG8gZ3Vlc3MgdGhlIGNvcnJlY3QgZm9udDogJHtmb250TmFtZX1gKTsKICAgICAgfQogICAgICB0aGlzLmNhY2hlLnNldChmb250TmFtZSwgbWF5YmVbMF0pOwogICAgICByZXR1cm4gbWF5YmVbMF07CiAgICB9CiAgICBpZiAobXVzdFdhcm4gJiYgIXRoaXMud2FybmVkLmhhcyhmb250TmFtZSkpIHsKICAgICAgdGhpcy53YXJuZWQuYWRkKGZvbnROYW1lKTsKICAgICAgd2FybihgWEZBIC0gQ2Fubm90IGZpbmQgdGhlIGZvbnQ6ICR7Zm9udE5hbWV9YCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KZnVuY3Rpb24gc2VsZWN0Rm9udCh4ZmFGb250LCB0eXBlZmFjZSkgewogIGlmICh4ZmFGb250LnBvc3R1cmUgPT09ICJpdGFsaWMiKSB7CiAgICBpZiAoeGZhRm9udC53ZWlnaHQgPT09ICJib2xkIikgewogICAgICByZXR1cm4gdHlwZWZhY2UuYm9sZGl0YWxpYzsKICAgIH0KICAgIHJldHVybiB0eXBlZmFjZS5pdGFsaWM7CiAgfSBlbHNlIGlmICh4ZmFGb250LndlaWdodCA9PT0gImJvbGQiKSB7CiAgICByZXR1cm4gdHlwZWZhY2UuYm9sZDsKICB9CiAgcmV0dXJuIHR5cGVmYWNlLnJlZ3VsYXI7Cn0KZnVuY3Rpb24gZm9udHNfZ2V0TWV0cmljcyh4ZmFGb250LCByZWFsID0gZmFsc2UpIHsKICBsZXQgcGRmRm9udCA9IG51bGw7CiAgaWYgKHhmYUZvbnQpIHsKICAgIGNvbnN0IG5hbWUgPSBzdHJpcFF1b3Rlcyh4ZmFGb250LnR5cGVmYWNlKTsKICAgIGNvbnN0IHR5cGVmYWNlID0geGZhRm9udFskZ2xvYmFsRGF0YV0uZm9udEZpbmRlci5maW5kKG5hbWUpOwogICAgcGRmRm9udCA9IHNlbGVjdEZvbnQoeGZhRm9udCwgdHlwZWZhY2UpOwogIH0KICBpZiAoIXBkZkZvbnQpIHsKICAgIHJldHVybiB7CiAgICAgIGxpbmVIZWlnaHQ6IDEyLAogICAgICBsaW5lR2FwOiAyLAogICAgICBsaW5lTm9HYXA6IDEwCiAgICB9OwogIH0KICBjb25zdCBzaXplID0geGZhRm9udC5zaXplIHx8IDEwOwogIGNvbnN0IGxpbmVIZWlnaHQgPSBwZGZGb250LmxpbmVIZWlnaHQgPyBNYXRoLm1heChyZWFsID8gMCA6IDEuMiwgcGRmRm9udC5saW5lSGVpZ2h0KSA6IDEuMjsKICBjb25zdCBsaW5lR2FwID0gcGRmRm9udC5saW5lR2FwID09PSB1bmRlZmluZWQgPyAwLjIgOiBwZGZGb250LmxpbmVHYXA7CiAgcmV0dXJuIHsKICAgIGxpbmVIZWlnaHQ6IGxpbmVIZWlnaHQgKiBzaXplLAogICAgbGluZUdhcDogbGluZUdhcCAqIHNpemUsCiAgICBsaW5lTm9HYXA6IE1hdGgubWF4KDEsIGxpbmVIZWlnaHQgLSBsaW5lR2FwKSAqIHNpemUKICB9Owp9Cgo7Ly8gLi9zcmMvY29yZS94ZmEvdGV4dC5qcwoKY29uc3QgV0lEVEhfRkFDVE9SID0gMS4wMjsKY2xhc3MgRm9udEluZm8gewogIGNvbnN0cnVjdG9yKHhmYUZvbnQsIG1hcmdpbiwgbGluZUhlaWdodCwgZm9udEZpbmRlcikgewogICAgdGhpcy5saW5lSGVpZ2h0ID0gbGluZUhlaWdodDsKICAgIHRoaXMucGFyYU1hcmdpbiA9IG1hcmdpbiB8fCB7CiAgICAgIHRvcDogMCwKICAgICAgYm90dG9tOiAwLAogICAgICBsZWZ0OiAwLAogICAgICByaWdodDogMAogICAgfTsKICAgIGlmICgheGZhRm9udCkgewogICAgICBbdGhpcy5wZGZGb250LCB0aGlzLnhmYUZvbnRdID0gdGhpcy5kZWZhdWx0Rm9udChmb250RmluZGVyKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy54ZmFGb250ID0gewogICAgICB0eXBlZmFjZTogeGZhRm9udC50eXBlZmFjZSwKICAgICAgcG9zdHVyZTogeGZhRm9udC5wb3N0dXJlLAogICAgICB3ZWlnaHQ6IHhmYUZvbnQud2VpZ2h0LAogICAgICBzaXplOiB4ZmFGb250LnNpemUsCiAgICAgIGxldHRlclNwYWNpbmc6IHhmYUZvbnQubGV0dGVyU3BhY2luZwogICAgfTsKICAgIGNvbnN0IHR5cGVmYWNlID0gZm9udEZpbmRlci5maW5kKHhmYUZvbnQudHlwZWZhY2UpOwogICAgaWYgKCF0eXBlZmFjZSkgewogICAgICBbdGhpcy5wZGZGb250LCB0aGlzLnhmYUZvbnRdID0gdGhpcy5kZWZhdWx0Rm9udChmb250RmluZGVyKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy5wZGZGb250ID0gc2VsZWN0Rm9udCh4ZmFGb250LCB0eXBlZmFjZSk7CiAgICBpZiAoIXRoaXMucGRmRm9udCkgewogICAgICBbdGhpcy5wZGZGb250LCB0aGlzLnhmYUZvbnRdID0gdGhpcy5kZWZhdWx0Rm9udChmb250RmluZGVyKTsKICAgIH0KICB9CiAgZGVmYXVsdEZvbnQoZm9udEZpbmRlcikgewogICAgY29uc3QgZm9udCA9IGZvbnRGaW5kZXIuZmluZCgiSGVsdmV0aWNhIiwgZmFsc2UpIHx8IGZvbnRGaW5kZXIuZmluZCgiTXlyaWFkIFBybyIsIGZhbHNlKSB8fCBmb250RmluZGVyLmZpbmQoIkFyaWFsIiwgZmFsc2UpIHx8IGZvbnRGaW5kZXIuZ2V0RGVmYXVsdCgpOwogICAgaWYgKGZvbnQ/LnJlZ3VsYXIpIHsKICAgICAgY29uc3QgcGRmRm9udCA9IGZvbnQucmVndWxhcjsKICAgICAgY29uc3QgaW5mbyA9IHBkZkZvbnQuY3NzRm9udEluZm87CiAgICAgIGNvbnN0IHhmYUZvbnQgPSB7CiAgICAgICAgdHlwZWZhY2U6IGluZm8uZm9udEZhbWlseSwKICAgICAgICBwb3N0dXJlOiAibm9ybWFsIiwKICAgICAgICB3ZWlnaHQ6ICJub3JtYWwiLAogICAgICAgIHNpemU6IDEwLAogICAgICAgIGxldHRlclNwYWNpbmc6IDAKICAgICAgfTsKICAgICAgcmV0dXJuIFtwZGZGb250LCB4ZmFGb250XTsKICAgIH0KICAgIGNvbnN0IHhmYUZvbnQgPSB7CiAgICAgIHR5cGVmYWNlOiAiQ291cmllciIsCiAgICAgIHBvc3R1cmU6ICJub3JtYWwiLAogICAgICB3ZWlnaHQ6ICJub3JtYWwiLAogICAgICBzaXplOiAxMCwKICAgICAgbGV0dGVyU3BhY2luZzogMAogICAgfTsKICAgIHJldHVybiBbbnVsbCwgeGZhRm9udF07CiAgfQp9CmNsYXNzIEZvbnRTZWxlY3RvciB7CiAgY29uc3RydWN0b3IoZGVmYXVsdFhmYUZvbnQsIGRlZmF1bHRQYXJhTWFyZ2luLCBkZWZhdWx0TGluZUhlaWdodCwgZm9udEZpbmRlcikgewogICAgdGhpcy5mb250RmluZGVyID0gZm9udEZpbmRlcjsKICAgIHRoaXMuc3RhY2sgPSBbbmV3IEZvbnRJbmZvKGRlZmF1bHRYZmFGb250LCBkZWZhdWx0UGFyYU1hcmdpbiwgZGVmYXVsdExpbmVIZWlnaHQsIGZvbnRGaW5kZXIpXTsKICB9CiAgcHVzaERhdGEoeGZhRm9udCwgbWFyZ2luLCBsaW5lSGVpZ2h0KSB7CiAgICBjb25zdCBsYXN0Rm9udCA9IHRoaXMuc3RhY2suYXQoLTEpOwogICAgZm9yIChjb25zdCBuYW1lIG9mIFsidHlwZWZhY2UiLCAicG9zdHVyZSIsICJ3ZWlnaHQiLCAic2l6ZSIsICJsZXR0ZXJTcGFjaW5nIl0pIHsKICAgICAgaWYgKCF4ZmFGb250W25hbWVdKSB7CiAgICAgICAgeGZhRm9udFtuYW1lXSA9IGxhc3RGb250LnhmYUZvbnRbbmFtZV07CiAgICAgIH0KICAgIH0KICAgIGZvciAoY29uc3QgbmFtZSBvZiBbInRvcCIsICJib3R0b20iLCAibGVmdCIsICJyaWdodCJdKSB7CiAgICAgIGlmIChpc05hTihtYXJnaW5bbmFtZV0pKSB7CiAgICAgICAgbWFyZ2luW25hbWVdID0gbGFzdEZvbnQucGFyYU1hcmdpbltuYW1lXTsKICAgICAgfQogICAgfQogICAgY29uc3QgZm9udEluZm8gPSBuZXcgRm9udEluZm8oeGZhRm9udCwgbWFyZ2luLCBsaW5lSGVpZ2h0IHx8IGxhc3RGb250LmxpbmVIZWlnaHQsIHRoaXMuZm9udEZpbmRlcik7CiAgICBpZiAoIWZvbnRJbmZvLnBkZkZvbnQpIHsKICAgICAgZm9udEluZm8ucGRmRm9udCA9IGxhc3RGb250LnBkZkZvbnQ7CiAgICB9CiAgICB0aGlzLnN0YWNrLnB1c2goZm9udEluZm8pOwogIH0KICBwb3BGb250KCkgewogICAgdGhpcy5zdGFjay5wb3AoKTsKICB9CiAgdG9wRm9udCgpIHsKICAgIHJldHVybiB0aGlzLnN0YWNrLmF0KC0xKTsKICB9Cn0KY2xhc3MgVGV4dE1lYXN1cmUgewogIGNvbnN0cnVjdG9yKGRlZmF1bHRYZmFGb250LCBkZWZhdWx0UGFyYU1hcmdpbiwgZGVmYXVsdExpbmVIZWlnaHQsIGZvbnRzKSB7CiAgICB0aGlzLmdseXBocyA9IFtdOwogICAgdGhpcy5mb250U2VsZWN0b3IgPSBuZXcgRm9udFNlbGVjdG9yKGRlZmF1bHRYZmFGb250LCBkZWZhdWx0UGFyYU1hcmdpbiwgZGVmYXVsdExpbmVIZWlnaHQsIGZvbnRzKTsKICAgIHRoaXMuZXh0cmFIZWlnaHQgPSAwOwogIH0KICBwdXNoRGF0YSh4ZmFGb250LCBtYXJnaW4sIGxpbmVIZWlnaHQpIHsKICAgIHRoaXMuZm9udFNlbGVjdG9yLnB1c2hEYXRhKHhmYUZvbnQsIG1hcmdpbiwgbGluZUhlaWdodCk7CiAgfQogIHBvcEZvbnQoeGZhRm9udCkgewogICAgcmV0dXJuIHRoaXMuZm9udFNlbGVjdG9yLnBvcEZvbnQoKTsKICB9CiAgYWRkUGFyYSgpIHsKICAgIGNvbnN0IGxhc3RGb250ID0gdGhpcy5mb250U2VsZWN0b3IudG9wRm9udCgpOwogICAgdGhpcy5leHRyYUhlaWdodCArPSBsYXN0Rm9udC5wYXJhTWFyZ2luLnRvcCArIGxhc3RGb250LnBhcmFNYXJnaW4uYm90dG9tOwogIH0KICBhZGRTdHJpbmcoc3RyKSB7CiAgICBpZiAoIXN0cikgewogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBsYXN0Rm9udCA9IHRoaXMuZm9udFNlbGVjdG9yLnRvcEZvbnQoKTsKICAgIGNvbnN0IGZvbnRTaXplID0gbGFzdEZvbnQueGZhRm9udC5zaXplOwogICAgaWYgKGxhc3RGb250LnBkZkZvbnQpIHsKICAgICAgY29uc3QgbGV0dGVyU3BhY2luZyA9IGxhc3RGb250LnhmYUZvbnQubGV0dGVyU3BhY2luZzsKICAgICAgY29uc3QgcGRmRm9udCA9IGxhc3RGb250LnBkZkZvbnQ7CiAgICAgIGNvbnN0IGZvbnRMaW5lSGVpZ2h0ID0gcGRmRm9udC5saW5lSGVpZ2h0IHx8IDEuMjsKICAgICAgY29uc3QgbGluZUhlaWdodCA9IGxhc3RGb250LmxpbmVIZWlnaHQgfHwgTWF0aC5tYXgoMS4yLCBmb250TGluZUhlaWdodCkgKiBmb250U2l6ZTsKICAgICAgY29uc3QgbGluZUdhcCA9IHBkZkZvbnQubGluZUdhcCA9PT0gdW5kZWZpbmVkID8gMC4yIDogcGRmRm9udC5saW5lR2FwOwogICAgICBjb25zdCBub0dhcCA9IGZvbnRMaW5lSGVpZ2h0IC0gbGluZUdhcDsKICAgICAgY29uc3QgZmlyc3RMaW5lSGVpZ2h0ID0gTWF0aC5tYXgoMSwgbm9HYXApICogZm9udFNpemU7CiAgICAgIGNvbnN0IHNjYWxlID0gZm9udFNpemUgLyAxMDAwOwogICAgICBjb25zdCBmYWxsYmFja1dpZHRoID0gcGRmRm9udC5kZWZhdWx0V2lkdGggfHwgcGRmRm9udC5jaGFyc1RvR2x5cGhzKCIgIilbMF0ud2lkdGg7CiAgICAgIGZvciAoY29uc3QgbGluZSBvZiBzdHIuc3BsaXQoL1tcdTIwMjlcbl0vKSkgewogICAgICAgIGNvbnN0IGVuY29kZWRMaW5lID0gcGRmRm9udC5lbmNvZGVTdHJpbmcobGluZSkuam9pbigiIik7CiAgICAgICAgY29uc3QgZ2x5cGhzID0gcGRmRm9udC5jaGFyc1RvR2x5cGhzKGVuY29kZWRMaW5lKTsKICAgICAgICBmb3IgKGNvbnN0IGdseXBoIG9mIGdseXBocykgewogICAgICAgICAgY29uc3Qgd2lkdGggPSBnbHlwaC53aWR0aCB8fCBmYWxsYmFja1dpZHRoOwogICAgICAgICAgdGhpcy5nbHlwaHMucHVzaChbd2lkdGggKiBzY2FsZSArIGxldHRlclNwYWNpbmcsIGxpbmVIZWlnaHQsIGZpcnN0TGluZUhlaWdodCwgZ2x5cGgudW5pY29kZSwgZmFsc2VdKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5nbHlwaHMucHVzaChbMCwgMCwgMCwgIlxuIiwgdHJ1ZV0pOwogICAgICB9CiAgICAgIHRoaXMuZ2x5cGhzLnBvcCgpOwogICAgICByZXR1cm47CiAgICB9CiAgICBmb3IgKGNvbnN0IGxpbmUgb2Ygc3RyLnNwbGl0KC9bXHUyMDI5XG5dLykpIHsKICAgICAgZm9yIChjb25zdCBjaGFyIG9mIGxpbmUuc3BsaXQoIiIpKSB7CiAgICAgICAgdGhpcy5nbHlwaHMucHVzaChbZm9udFNpemUsIDEuMiAqIGZvbnRTaXplLCBmb250U2l6ZSwgY2hhciwgZmFsc2VdKTsKICAgICAgfQogICAgICB0aGlzLmdseXBocy5wdXNoKFswLCAwLCAwLCAiXG4iLCB0cnVlXSk7CiAgICB9CiAgICB0aGlzLmdseXBocy5wb3AoKTsKICB9CiAgY29tcHV0ZShtYXhXaWR0aCkgewogICAgbGV0IGxhc3RTcGFjZVBvcyA9IC0xLAogICAgICBsYXN0U3BhY2VXaWR0aCA9IDAsCiAgICAgIHdpZHRoID0gMCwKICAgICAgaGVpZ2h0ID0gMCwKICAgICAgY3VycmVudExpbmVXaWR0aCA9IDAsCiAgICAgIGN1cnJlbnRMaW5lSGVpZ2h0ID0gMDsKICAgIGxldCBpc0Jyb2tlbiA9IGZhbHNlOwogICAgbGV0IGlzRmlyc3RMaW5lID0gdHJ1ZTsKICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHRoaXMuZ2x5cGhzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgY29uc3QgW2dseXBoV2lkdGgsIGxpbmVIZWlnaHQsIGZpcnN0TGluZUhlaWdodCwgY2hhciwgaXNFT0xdID0gdGhpcy5nbHlwaHNbaV07CiAgICAgIGNvbnN0IGlzU3BhY2UgPSBjaGFyID09PSAiICI7CiAgICAgIGNvbnN0IGdseXBoSGVpZ2h0ID0gaXNGaXJzdExpbmUgPyBmaXJzdExpbmVIZWlnaHQgOiBsaW5lSGVpZ2h0OwogICAgICBpZiAoaXNFT0wpIHsKICAgICAgICB3aWR0aCA9IE1hdGgubWF4KHdpZHRoLCBjdXJyZW50TGluZVdpZHRoKTsKICAgICAgICBjdXJyZW50TGluZVdpZHRoID0gMDsKICAgICAgICBoZWlnaHQgKz0gY3VycmVudExpbmVIZWlnaHQ7CiAgICAgICAgY3VycmVudExpbmVIZWlnaHQgPSBnbHlwaEhlaWdodDsKICAgICAgICBsYXN0U3BhY2VQb3MgPSAtMTsKICAgICAgICBsYXN0U3BhY2VXaWR0aCA9IDA7CiAgICAgICAgaXNGaXJzdExpbmUgPSBmYWxzZTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAoaXNTcGFjZSkgewogICAgICAgIGlmIChjdXJyZW50TGluZVdpZHRoICsgZ2x5cGhXaWR0aCA+IG1heFdpZHRoKSB7CiAgICAgICAgICB3aWR0aCA9IE1hdGgubWF4KHdpZHRoLCBjdXJyZW50TGluZVdpZHRoKTsKICAgICAgICAgIGN1cnJlbnRMaW5lV2lkdGggPSAwOwogICAgICAgICAgaGVpZ2h0ICs9IGN1cnJlbnRMaW5lSGVpZ2h0OwogICAgICAgICAgY3VycmVudExpbmVIZWlnaHQgPSBnbHlwaEhlaWdodDsKICAgICAgICAgIGxhc3RTcGFjZVBvcyA9IC0xOwogICAgICAgICAgbGFzdFNwYWNlV2lkdGggPSAwOwogICAgICAgICAgaXNCcm9rZW4gPSB0cnVlOwogICAgICAgICAgaXNGaXJzdExpbmUgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY3VycmVudExpbmVIZWlnaHQgPSBNYXRoLm1heChnbHlwaEhlaWdodCwgY3VycmVudExpbmVIZWlnaHQpOwogICAgICAgICAgbGFzdFNwYWNlV2lkdGggPSBjdXJyZW50TGluZVdpZHRoOwogICAgICAgICAgY3VycmVudExpbmVXaWR0aCArPSBnbHlwaFdpZHRoOwogICAgICAgICAgbGFzdFNwYWNlUG9zID0gaTsKICAgICAgICB9CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKGN1cnJlbnRMaW5lV2lkdGggKyBnbHlwaFdpZHRoID4gbWF4V2lkdGgpIHsKICAgICAgICBoZWlnaHQgKz0gY3VycmVudExpbmVIZWlnaHQ7CiAgICAgICAgY3VycmVudExpbmVIZWlnaHQgPSBnbHlwaEhlaWdodDsKICAgICAgICBpZiAobGFzdFNwYWNlUG9zICE9PSAtMSkgewogICAgICAgICAgaSA9IGxhc3RTcGFjZVBvczsKICAgICAgICAgIHdpZHRoID0gTWF0aC5tYXgod2lkdGgsIGxhc3RTcGFjZVdpZHRoKTsKICAgICAgICAgIGN1cnJlbnRMaW5lV2lkdGggPSAwOwogICAgICAgICAgbGFzdFNwYWNlUG9zID0gLTE7CiAgICAgICAgICBsYXN0U3BhY2VXaWR0aCA9IDA7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHdpZHRoID0gTWF0aC5tYXgod2lkdGgsIGN1cnJlbnRMaW5lV2lkdGgpOwogICAgICAgICAgY3VycmVudExpbmVXaWR0aCA9IGdseXBoV2lkdGg7CiAgICAgICAgfQogICAgICAgIGlzQnJva2VuID0gdHJ1ZTsKICAgICAgICBpc0ZpcnN0TGluZSA9IGZhbHNlOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGN1cnJlbnRMaW5lV2lkdGggKz0gZ2x5cGhXaWR0aDsKICAgICAgY3VycmVudExpbmVIZWlnaHQgPSBNYXRoLm1heChnbHlwaEhlaWdodCwgY3VycmVudExpbmVIZWlnaHQpOwogICAgfQogICAgd2lkdGggPSBNYXRoLm1heCh3aWR0aCwgY3VycmVudExpbmVXaWR0aCk7CiAgICBoZWlnaHQgKz0gY3VycmVudExpbmVIZWlnaHQgKyB0aGlzLmV4dHJhSGVpZ2h0OwogICAgcmV0dXJuIHsKICAgICAgd2lkdGg6IFdJRFRIX0ZBQ1RPUiAqIHdpZHRoLAogICAgICBoZWlnaHQsCiAgICAgIGlzQnJva2VuCiAgICB9OwogIH0KfQoKOy8vIC4vc3JjL2NvcmUveGZhL3NvbS5qcwoKCmNvbnN0IG5hbWVQYXR0ZXJuID0gL15bXi5bXSsvOwpjb25zdCBpbmRleFBhdHRlcm4gPSAvXlteXF1dKy87CmNvbnN0IG9wZXJhdG9ycyA9IHsKICBkb3Q6IDAsCiAgZG90RG90OiAxLAogIGRvdEhhc2g6IDIsCiAgZG90QnJhY2tldDogMywKICBkb3RQYXJlbjogNAp9Owpjb25zdCBzaG9ydGN1dHMgPSBuZXcgTWFwKFtbIiRkYXRhIiwgKHJvb3QsIGN1cnJlbnQpID0+IHJvb3QuZGF0YXNldHMgPyByb290LmRhdGFzZXRzLmRhdGEgOiByb290XSwgWyIkcmVjb3JkIiwgKHJvb3QsIGN1cnJlbnQpID0+IChyb290LmRhdGFzZXRzID8gcm9vdC5kYXRhc2V0cy5kYXRhIDogcm9vdClbJGdldENoaWxkcmVuXSgpWzBdXSwgWyIkdGVtcGxhdGUiLCAocm9vdCwgY3VycmVudCkgPT4gcm9vdC50ZW1wbGF0ZV0sIFsiJGNvbm5lY3Rpb25TZXQiLCAocm9vdCwgY3VycmVudCkgPT4gcm9vdC5jb25uZWN0aW9uU2V0XSwgWyIkZm9ybSIsIChyb290LCBjdXJyZW50KSA9PiByb290LmZvcm1dLCBbIiRsYXlvdXQiLCAocm9vdCwgY3VycmVudCkgPT4gcm9vdC5sYXlvdXRdLCBbIiRob3N0IiwgKHJvb3QsIGN1cnJlbnQpID0+IHJvb3QuaG9zdF0sIFsiJGRhdGFXaW5kb3ciLCAocm9vdCwgY3VycmVudCkgPT4gcm9vdC5kYXRhV2luZG93XSwgWyIkZXZlbnQiLCAocm9vdCwgY3VycmVudCkgPT4gcm9vdC5ldmVudF0sIFsiISIsIChyb290LCBjdXJyZW50KSA9PiByb290LmRhdGFzZXRzXSwgWyIkeGZhIiwgKHJvb3QsIGN1cnJlbnQpID0+IHJvb3RdLCBbInhmYSIsIChyb290LCBjdXJyZW50KSA9PiByb290XSwgWyIkIiwgKHJvb3QsIGN1cnJlbnQpID0+IGN1cnJlbnRdXSk7CmNvbnN0IHNvbUNhY2hlID0gbmV3IFdlYWtNYXAoKTsKZnVuY3Rpb24gcGFyc2VJbmRleChpbmRleCkgewogIGluZGV4ID0gaW5kZXgudHJpbSgpOwogIGlmIChpbmRleCA9PT0gIioiKSB7CiAgICByZXR1cm4gSW5maW5pdHk7CiAgfQogIHJldHVybiBwYXJzZUludChpbmRleCwgMTApIHx8IDA7Cn0KZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9uKGV4cHIsIGRvdERvdEFsbG93ZWQsIG5vRXhwciA9IHRydWUpIHsKICBsZXQgbWF0Y2ggPSBleHByLm1hdGNoKG5hbWVQYXR0ZXJuKTsKICBpZiAoIW1hdGNoKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgbGV0IFtuYW1lXSA9IG1hdGNoOwogIGNvbnN0IHBhcnNlZCA9IFt7CiAgICBuYW1lLAogICAgY2FjaGVOYW1lOiAiLiIgKyBuYW1lLAogICAgaW5kZXg6IDAsCiAgICBqczogbnVsbCwKICAgIGZvcm1DYWxjOiBudWxsLAogICAgb3BlcmF0b3I6IG9wZXJhdG9ycy5kb3QKICB9XTsKICBsZXQgcG9zID0gbmFtZS5sZW5ndGg7CiAgd2hpbGUgKHBvcyA8IGV4cHIubGVuZ3RoKSB7CiAgICBjb25zdCBzcG9zID0gcG9zOwogICAgY29uc3QgY2hhciA9IGV4cHIuY2hhckF0KHBvcysrKTsKICAgIGlmIChjaGFyID09PSAiWyIpIHsKICAgICAgbWF0Y2ggPSBleHByLnNsaWNlKHBvcykubWF0Y2goaW5kZXhQYXR0ZXJuKTsKICAgICAgaWYgKCFtYXRjaCkgewogICAgICAgIHdhcm4oIlhGQSAtIEludmFsaWQgaW5kZXggaW4gU09NIGV4cHJlc3Npb24iKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBwYXJzZWQuYXQoLTEpLmluZGV4ID0gcGFyc2VJbmRleChtYXRjaFswXSk7CiAgICAgIHBvcyArPSBtYXRjaFswXS5sZW5ndGggKyAxOwogICAgICBjb250aW51ZTsKICAgIH0KICAgIGxldCBvcGVyYXRvcjsKICAgIHN3aXRjaCAoZXhwci5jaGFyQXQocG9zKSkgewogICAgICBjYXNlICIuIjoKICAgICAgICBpZiAoIWRvdERvdEFsbG93ZWQpIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBwb3MrKzsKICAgICAgICBvcGVyYXRvciA9IG9wZXJhdG9ycy5kb3REb3Q7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIiMiOgogICAgICAgIHBvcysrOwogICAgICAgIG9wZXJhdG9yID0gb3BlcmF0b3JzLmRvdEhhc2g7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIlsiOgogICAgICAgIGlmIChub0V4cHIpIHsKICAgICAgICAgIHdhcm4oIlhGQSAtIFNPTSBleHByZXNzaW9uIGNvbnRhaW5zIGEgRm9ybUNhbGMgc3ViZXhwcmVzc2lvbiB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGZvciBub3cuIik7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgb3BlcmF0b3IgPSBvcGVyYXRvcnMuZG90QnJhY2tldDsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiKCI6CiAgICAgICAgaWYgKG5vRXhwcikgewogICAgICAgICAgd2FybigiWEZBIC0gU09NIGV4cHJlc3Npb24gY29udGFpbnMgYSBKYXZhU2NyaXB0IHN1YmV4cHJlc3Npb24gd2hpY2ggaXMgbm90IHN1cHBvcnRlZCBmb3Igbm93LiIpOwogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIG9wZXJhdG9yID0gb3BlcmF0b3JzLmRvdFBhcmVuOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIG9wZXJhdG9yID0gb3BlcmF0b3JzLmRvdDsKICAgICAgICBicmVhazsKICAgIH0KICAgIG1hdGNoID0gZXhwci5zbGljZShwb3MpLm1hdGNoKG5hbWVQYXR0ZXJuKTsKICAgIGlmICghbWF0Y2gpIHsKICAgICAgYnJlYWs7CiAgICB9CiAgICBbbmFtZV0gPSBtYXRjaDsKICAgIHBvcyArPSBuYW1lLmxlbmd0aDsKICAgIHBhcnNlZC5wdXNoKHsKICAgICAgbmFtZSwKICAgICAgY2FjaGVOYW1lOiBleHByLnNsaWNlKHNwb3MsIHBvcyksCiAgICAgIG9wZXJhdG9yLAogICAgICBpbmRleDogMCwKICAgICAganM6IG51bGwsCiAgICAgIGZvcm1DYWxjOiBudWxsCiAgICB9KTsKICB9CiAgcmV0dXJuIHBhcnNlZDsKfQpmdW5jdGlvbiBzZWFyY2hOb2RlKHJvb3QsIGNvbnRhaW5lciwgZXhwciwgZG90RG90QWxsb3dlZCA9IHRydWUsIHVzZUNhY2hlID0gdHJ1ZSkgewogIGNvbnN0IHBhcnNlZCA9IHBhcnNlRXhwcmVzc2lvbihleHByLCBkb3REb3RBbGxvd2VkKTsKICBpZiAoIXBhcnNlZCkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIGNvbnN0IGZuID0gc2hvcnRjdXRzLmdldChwYXJzZWRbMF0ubmFtZSk7CiAgbGV0IGkgPSAwOwogIGxldCBpc1F1YWxpZmllZDsKICBpZiAoZm4pIHsKICAgIGlzUXVhbGlmaWVkID0gdHJ1ZTsKICAgIHJvb3QgPSBbZm4ocm9vdCwgY29udGFpbmVyKV07CiAgICBpID0gMTsKICB9IGVsc2UgewogICAgaXNRdWFsaWZpZWQgPSBjb250YWluZXIgPT09IG51bGw7CiAgICByb290ID0gW2NvbnRhaW5lciB8fCByb290XTsKICB9CiAgZm9yIChsZXQgaWkgPSBwYXJzZWQubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgY29uc3QgewogICAgICBuYW1lLAogICAgICBjYWNoZU5hbWUsCiAgICAgIG9wZXJhdG9yLAogICAgICBpbmRleAogICAgfSA9IHBhcnNlZFtpXTsKICAgIGNvbnN0IG5vZGVzID0gW107CiAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygcm9vdCkgewogICAgICBpZiAoIW5vZGUuaXNYRkFPYmplY3QpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBsZXQgY2hpbGRyZW4sIGNhY2hlZDsKICAgICAgaWYgKHVzZUNhY2hlKSB7CiAgICAgICAgY2FjaGVkID0gc29tQ2FjaGUuZ2V0KG5vZGUpOwogICAgICAgIGlmICghY2FjaGVkKSB7CiAgICAgICAgICBjYWNoZWQgPSBuZXcgTWFwKCk7CiAgICAgICAgICBzb21DYWNoZS5zZXQobm9kZSwgY2FjaGVkKTsKICAgICAgICB9CiAgICAgICAgY2hpbGRyZW4gPSBjYWNoZWQuZ2V0KGNhY2hlTmFtZSk7CiAgICAgIH0KICAgICAgaWYgKCFjaGlsZHJlbikgewogICAgICAgIHN3aXRjaCAob3BlcmF0b3IpIHsKICAgICAgICAgIGNhc2Ugb3BlcmF0b3JzLmRvdDoKICAgICAgICAgICAgY2hpbGRyZW4gPSBub2RlWyRnZXRDaGlsZHJlbkJ5TmFtZV0obmFtZSwgZmFsc2UpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2Ugb3BlcmF0b3JzLmRvdERvdDoKICAgICAgICAgICAgY2hpbGRyZW4gPSBub2RlWyRnZXRDaGlsZHJlbkJ5TmFtZV0obmFtZSwgdHJ1ZSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBvcGVyYXRvcnMuZG90SGFzaDoKICAgICAgICAgICAgY2hpbGRyZW4gPSBub2RlWyRnZXRDaGlsZHJlbkJ5Q2xhc3NdKG5hbWUpOwogICAgICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuLmlzWEZBT2JqZWN0QXJyYXkgPyBjaGlsZHJlbi5jaGlsZHJlbiA6IFtjaGlsZHJlbl07CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmICh1c2VDYWNoZSkgewogICAgICAgICAgY2FjaGVkLnNldChjYWNoZU5hbWUsIGNoaWxkcmVuKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHsKICAgICAgICBub2Rlcy5wdXNoKGNoaWxkcmVuKTsKICAgICAgfQogICAgfQogICAgaWYgKG5vZGVzLmxlbmd0aCA9PT0gMCAmJiAhaXNRdWFsaWZpZWQgJiYgaSA9PT0gMCkgewogICAgICBjb25zdCBwYXJlbnQgPSBjb250YWluZXJbJGdldFBhcmVudF0oKTsKICAgICAgY29udGFpbmVyID0gcGFyZW50OwogICAgICBpZiAoIWNvbnRhaW5lcikgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGkgPSAtMTsKICAgICAgcm9vdCA9IFtjb250YWluZXJdOwogICAgICBjb250aW51ZTsKICAgIH0KICAgIHJvb3QgPSBpc0Zpbml0ZShpbmRleCkgPyBub2Rlcy5maWx0ZXIobm9kZSA9PiBpbmRleCA8IG5vZGUubGVuZ3RoKS5tYXAobm9kZSA9PiBub2RlW2luZGV4XSkgOiBub2Rlcy5mbGF0KCk7CiAgfQogIGlmIChyb290Lmxlbmd0aCA9PT0gMCkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIHJldHVybiByb290Owp9CmZ1bmN0aW9uIGNyZWF0ZURhdGFOb2RlKHJvb3QsIGNvbnRhaW5lciwgZXhwcikgewogIGNvbnN0IHBhcnNlZCA9IHBhcnNlRXhwcmVzc2lvbihleHByKTsKICBpZiAoIXBhcnNlZCkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIGlmIChwYXJzZWQuc29tZSh4ID0+IHgub3BlcmF0b3IgPT09IG9wZXJhdG9ycy5kb3REb3QpKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgY29uc3QgZm4gPSBzaG9ydGN1dHMuZ2V0KHBhcnNlZFswXS5uYW1lKTsKICBsZXQgaSA9IDA7CiAgaWYgKGZuKSB7CiAgICByb290ID0gZm4ocm9vdCwgY29udGFpbmVyKTsKICAgIGkgPSAxOwogIH0gZWxzZSB7CiAgICByb290ID0gY29udGFpbmVyIHx8IHJvb3Q7CiAgfQogIGZvciAobGV0IGlpID0gcGFyc2VkLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgIGNvbnN0IHsKICAgICAgbmFtZSwKICAgICAgb3BlcmF0b3IsCiAgICAgIGluZGV4CiAgICB9ID0gcGFyc2VkW2ldOwogICAgaWYgKCFpc0Zpbml0ZShpbmRleCkpIHsKICAgICAgcGFyc2VkW2ldLmluZGV4ID0gMDsKICAgICAgcmV0dXJuIHJvb3QuY3JlYXRlTm9kZXMocGFyc2VkLnNsaWNlKGkpKTsKICAgIH0KICAgIGxldCBjaGlsZHJlbjsKICAgIHN3aXRjaCAob3BlcmF0b3IpIHsKICAgICAgY2FzZSBvcGVyYXRvcnMuZG90OgogICAgICAgIGNoaWxkcmVuID0gcm9vdFskZ2V0Q2hpbGRyZW5CeU5hbWVdKG5hbWUsIGZhbHNlKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBvcGVyYXRvcnMuZG90RG90OgogICAgICAgIGNoaWxkcmVuID0gcm9vdFskZ2V0Q2hpbGRyZW5CeU5hbWVdKG5hbWUsIHRydWUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIG9wZXJhdG9ycy5kb3RIYXNoOgogICAgICAgIGNoaWxkcmVuID0gcm9vdFskZ2V0Q2hpbGRyZW5CeUNsYXNzXShuYW1lKTsKICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuLmlzWEZBT2JqZWN0QXJyYXkgPyBjaGlsZHJlbi5jaGlsZHJlbiA6IFtjaGlsZHJlbl07CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiByb290LmNyZWF0ZU5vZGVzKHBhcnNlZC5zbGljZShpKSk7CiAgICB9CiAgICBpZiAoaW5kZXggPCBjaGlsZHJlbi5sZW5ndGgpIHsKICAgICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbltpbmRleF07CiAgICAgIGlmICghY2hpbGQuaXNYRkFPYmplY3QpIHsKICAgICAgICB3YXJuKGBYRkEgLSBDYW5ub3QgY3JlYXRlIGEgbm9kZS5gKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICByb290ID0gY2hpbGQ7CiAgICB9IGVsc2UgewogICAgICBwYXJzZWRbaV0uaW5kZXggPSBpbmRleCAtIGNoaWxkcmVuLmxlbmd0aDsKICAgICAgcmV0dXJuIHJvb3QuY3JlYXRlTm9kZXMocGFyc2VkLnNsaWNlKGkpKTsKICAgIH0KICB9CiAgcmV0dXJuIG51bGw7Cn0KCjsvLyAuL3NyYy9jb3JlL3hmYS94ZmFfb2JqZWN0LmpzCgoKCgoKCmNvbnN0IF9hcHBseVByb3RvdHlwZSA9IFN5bWJvbCgpOwpjb25zdCBfYXR0cmlidXRlcyA9IFN5bWJvbCgpOwpjb25zdCBfYXR0cmlidXRlTmFtZXMgPSBTeW1ib2woKTsKY29uc3QgX2NoaWxkcmVuID0gU3ltYm9sKCJfY2hpbGRyZW4iKTsKY29uc3QgX2Nsb25lQXR0cmlidXRlID0gU3ltYm9sKCk7CmNvbnN0IF9kYXRhVmFsdWUgPSBTeW1ib2woKTsKY29uc3QgX2RlZmF1bHRWYWx1ZSA9IFN5bWJvbCgpOwpjb25zdCBfZmlsdGVyZWRDaGlsZHJlbkdlbmVyYXRvciA9IFN5bWJvbCgpOwpjb25zdCBfZ2V0UHJvdG90eXBlID0gU3ltYm9sKCk7CmNvbnN0IF9nZXRVbnNldEF0dHJpYnV0ZXMgPSBTeW1ib2woKTsKY29uc3QgX2hhc0NoaWxkcmVuID0gU3ltYm9sKCk7CmNvbnN0IF9tYXggPSBTeW1ib2woKTsKY29uc3QgX29wdGlvbnMgPSBTeW1ib2woKTsKY29uc3QgX3BhcmVudCA9IFN5bWJvbCgicGFyZW50Iik7CmNvbnN0IF9yZXNvbHZlUHJvdG90eXBlc0hlbHBlciA9IFN5bWJvbCgpOwpjb25zdCBfc2V0QXR0cmlidXRlcyA9IFN5bWJvbCgpOwpjb25zdCBfdmFsaWRhdG9yID0gU3ltYm9sKCk7CmxldCB1aWQgPSAwOwpjb25zdCBOU19EQVRBU0VUUyA9IE5hbWVzcGFjZUlkcy5kYXRhc2V0cy5pZDsKY2xhc3MgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3Rvcihuc0lkLCBuYW1lLCBoYXNDaGlsZHJlbiA9IGZhbHNlKSB7CiAgICB0aGlzWyRuYW1lc3BhY2VJZF0gPSBuc0lkOwogICAgdGhpc1skbm9kZU5hbWVdID0gbmFtZTsKICAgIHRoaXNbX2hhc0NoaWxkcmVuXSA9IGhhc0NoaWxkcmVuOwogICAgdGhpc1tfcGFyZW50XSA9IG51bGw7CiAgICB0aGlzW19jaGlsZHJlbl0gPSBbXTsKICAgIHRoaXNbJHVpZF0gPSBgJHtuYW1lfSR7dWlkKyt9YDsKICAgIHRoaXNbJGdsb2JhbERhdGFdID0gbnVsbDsKICB9CiAgZ2V0IGlzWEZBT2JqZWN0KCkgewogICAgcmV0dXJuIHRydWU7CiAgfQogIGdldCBpc1hGQU9iamVjdEFycmF5KCkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICBjcmVhdGVOb2RlcyhwYXRoKSB7CiAgICBsZXQgcm9vdCA9IHRoaXMsCiAgICAgIG5vZGUgPSBudWxsOwogICAgZm9yIChjb25zdCB7CiAgICAgIG5hbWUsCiAgICAgIGluZGV4CiAgICB9IG9mIHBhdGgpIHsKICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gaXNGaW5pdGUoaW5kZXgpID8gaW5kZXggOiAwOyBpIDw9IGlpOyBpKyspIHsKICAgICAgICBjb25zdCBuc0lkID0gcm9vdFskbmFtZXNwYWNlSWRdID09PSBOU19EQVRBU0VUUyA/IC0xIDogcm9vdFskbmFtZXNwYWNlSWRdOwogICAgICAgIG5vZGUgPSBuZXcgWG1sT2JqZWN0KG5zSWQsIG5hbWUpOwogICAgICAgIHJvb3RbJGFwcGVuZENoaWxkXShub2RlKTsKICAgICAgfQogICAgICByb290ID0gbm9kZTsKICAgIH0KICAgIHJldHVybiBub2RlOwogIH0KICBbJG9uQ2hpbGRdKGNoaWxkKSB7CiAgICBpZiAoIXRoaXNbX2hhc0NoaWxkcmVuXSB8fCAhdGhpc1skb25DaGlsZENoZWNrXShjaGlsZCkpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgY29uc3QgbmFtZSA9IGNoaWxkWyRub2RlTmFtZV07CiAgICBjb25zdCBub2RlID0gdGhpc1tuYW1lXTsKICAgIGlmIChub2RlIGluc3RhbmNlb2YgWEZBT2JqZWN0QXJyYXkpIHsKICAgICAgaWYgKG5vZGUucHVzaChjaGlsZCkpIHsKICAgICAgICB0aGlzWyRhcHBlbmRDaGlsZF0oY2hpbGQpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBpZiAobm9kZSAhPT0gbnVsbCkgewogICAgICAgIHRoaXNbJHJlbW92ZUNoaWxkXShub2RlKTsKICAgICAgfQogICAgICB0aGlzW25hbWVdID0gY2hpbGQ7CiAgICAgIHRoaXNbJGFwcGVuZENoaWxkXShjaGlsZCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgbGV0IGlkID0gIiI7CiAgICBpZiAodGhpcy5pZCkgewogICAgICBpZCA9IGAgKGlkOiAke3RoaXMuaWR9KWA7CiAgICB9IGVsc2UgaWYgKHRoaXMubmFtZSkgewogICAgICBpZCA9IGAgKG5hbWU6ICR7dGhpcy5uYW1lfSAke3RoaXMuaC52YWx1ZX0pYDsKICAgIH0KICAgIHdhcm4oYFhGQSAtIG5vZGUgIiR7dGhpc1skbm9kZU5hbWVdfSIke2lkfSBoYXMgYWxyZWFkeSBlbm91Z2ggIiR7bmFtZX0iIWApOwogICAgcmV0dXJuIGZhbHNlOwogIH0KICBbJG9uQ2hpbGRDaGVja10oY2hpbGQpIHsKICAgIHJldHVybiB0aGlzLmhhc093blByb3BlcnR5KGNoaWxkWyRub2RlTmFtZV0pICYmIGNoaWxkWyRuYW1lc3BhY2VJZF0gPT09IHRoaXNbJG5hbWVzcGFjZUlkXTsKICB9CiAgWyRpc05zQWdub3N0aWNdKCkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICBbJGFjY2VwdFdoaXRlc3BhY2VdKCkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICBbJGlzQ0RBVEFYbWxdKCkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICBbJGlzQmluZGFibGVdKCkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICBbJHBvcFBhcmFdKCkgewogICAgaWYgKHRoaXMucGFyYSkgewogICAgICB0aGlzWyRnZXRUZW1wbGF0ZVJvb3RdKClbJGV4dHJhXS5wYXJhU3RhY2sucG9wKCk7CiAgICB9CiAgfQogIFskcHVzaFBhcmFdKCkgewogICAgdGhpc1skZ2V0VGVtcGxhdGVSb290XSgpWyRleHRyYV0ucGFyYVN0YWNrLnB1c2godGhpcy5wYXJhKTsKICB9CiAgWyRzZXRJZF0oaWRzKSB7CiAgICBpZiAodGhpcy5pZCAmJiB0aGlzWyRuYW1lc3BhY2VJZF0gPT09IE5hbWVzcGFjZUlkcy50ZW1wbGF0ZS5pZCkgewogICAgICBpZHMuc2V0KHRoaXMuaWQsIHRoaXMpOwogICAgfQogIH0KICBbJGdldFRlbXBsYXRlUm9vdF0oKSB7CiAgICByZXR1cm4gdGhpc1skZ2xvYmFsRGF0YV0udGVtcGxhdGU7CiAgfQogIFskaXNTcGxpdHRhYmxlXSgpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgWyRpc1RoZXJlTW9yZVdpZHRoXSgpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgWyRhcHBlbmRDaGlsZF0oY2hpbGQpIHsKICAgIGNoaWxkW19wYXJlbnRdID0gdGhpczsKICAgIHRoaXNbX2NoaWxkcmVuXS5wdXNoKGNoaWxkKTsKICAgIGlmICghY2hpbGRbJGdsb2JhbERhdGFdICYmIHRoaXNbJGdsb2JhbERhdGFdKSB7CiAgICAgIGNoaWxkWyRnbG9iYWxEYXRhXSA9IHRoaXNbJGdsb2JhbERhdGFdOwogICAgfQogIH0KICBbJHJlbW92ZUNoaWxkXShjaGlsZCkgewogICAgY29uc3QgaSA9IHRoaXNbX2NoaWxkcmVuXS5pbmRleE9mKGNoaWxkKTsKICAgIHRoaXNbX2NoaWxkcmVuXS5zcGxpY2UoaSwgMSk7CiAgfQogIFskaGFzU2V0dGFibGVWYWx1ZV0oKSB7CiAgICByZXR1cm4gdGhpcy5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKTsKICB9CiAgWyRzZXRWYWx1ZV0oXykge30KICBbJG9uVGV4dF0oXykge30KICBbJGZpbmFsaXplXSgpIHt9CiAgWyRjbGVhbl0oYnVpbGRlcikgewogICAgZGVsZXRlIHRoaXNbX2hhc0NoaWxkcmVuXTsKICAgIGlmICh0aGlzWyRjbGVhbnVwXSkgewogICAgICBidWlsZGVyLmNsZWFuKHRoaXNbJGNsZWFudXBdKTsKICAgICAgZGVsZXRlIHRoaXNbJGNsZWFudXBdOwogICAgfQogIH0KICBbJGluZGV4T2ZdKGNoaWxkKSB7CiAgICByZXR1cm4gdGhpc1tfY2hpbGRyZW5dLmluZGV4T2YoY2hpbGQpOwogIH0KICBbJGluc2VydEF0XShpLCBjaGlsZCkgewogICAgY2hpbGRbX3BhcmVudF0gPSB0aGlzOwogICAgdGhpc1tfY2hpbGRyZW5dLnNwbGljZShpLCAwLCBjaGlsZCk7CiAgICBpZiAoIWNoaWxkWyRnbG9iYWxEYXRhXSAmJiB0aGlzWyRnbG9iYWxEYXRhXSkgewogICAgICBjaGlsZFskZ2xvYmFsRGF0YV0gPSB0aGlzWyRnbG9iYWxEYXRhXTsKICAgIH0KICB9CiAgWyRpc1RyYW5zcGFyZW50XSgpIHsKICAgIHJldHVybiAhdGhpcy5uYW1lOwogIH0KICBbJGxhc3RBdHRyaWJ1dGVdKCkgewogICAgcmV0dXJuICIiOwogIH0KICBbJHRleHRdKCkgewogICAgaWYgKHRoaXNbX2NoaWxkcmVuXS5sZW5ndGggPT09IDApIHsKICAgICAgcmV0dXJuIHRoaXNbJGNvbnRlbnRdOwogICAgfQogICAgcmV0dXJuIHRoaXNbX2NoaWxkcmVuXS5tYXAoYyA9PiBjWyR0ZXh0XSgpKS5qb2luKCIiKTsKICB9CiAgZ2V0IFtfYXR0cmlidXRlTmFtZXNdKCkgewogICAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7CiAgICBpZiAoIXByb3RvLl9hdHRyaWJ1dGVzKSB7CiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBwcm90by5fYXR0cmlidXRlcyA9IG5ldyBTZXQoKTsKICAgICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKSB7CiAgICAgICAgaWYgKHRoaXNbbmFtZV0gPT09IG51bGwgfHwgdGhpc1tuYW1lXSBpbnN0YW5jZW9mIFhGQU9iamVjdCB8fCB0aGlzW25hbWVdIGluc3RhbmNlb2YgWEZBT2JqZWN0QXJyYXkpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBhdHRyaWJ1dGVzLmFkZChuYW1lKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCBfYXR0cmlidXRlTmFtZXMsIHByb3RvLl9hdHRyaWJ1dGVzKTsKICB9CiAgWyRpc0Rlc2NlbmRlbnRdKHBhcmVudCkgewogICAgbGV0IG5vZGUgPSB0aGlzOwogICAgd2hpbGUgKG5vZGUpIHsKICAgICAgaWYgKG5vZGUgPT09IHBhcmVudCkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIG5vZGUgPSBub2RlWyRnZXRQYXJlbnRdKCk7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIFskZ2V0UGFyZW50XSgpIHsKICAgIHJldHVybiB0aGlzW19wYXJlbnRdOwogIH0KICBbJGdldFN1YmZvcm1QYXJlbnRdKCkgewogICAgcmV0dXJuIHRoaXNbJGdldFBhcmVudF0oKTsKICB9CiAgWyRnZXRDaGlsZHJlbl0obmFtZSA9IG51bGwpIHsKICAgIGlmICghbmFtZSkgewogICAgICByZXR1cm4gdGhpc1tfY2hpbGRyZW5dOwogICAgfQogICAgcmV0dXJuIHRoaXNbbmFtZV07CiAgfQogIFskZHVtcF0oKSB7CiAgICBjb25zdCBkdW1wZWQgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgaWYgKHRoaXNbJGNvbnRlbnRdKSB7CiAgICAgIGR1bXBlZC4kY29udGVudCA9IHRoaXNbJGNvbnRlbnRdOwogICAgfQogICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKSB7CiAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1tuYW1lXTsKICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgWEZBT2JqZWN0KSB7CiAgICAgICAgZHVtcGVkW25hbWVdID0gdmFsdWVbJGR1bXBdKCk7CiAgICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBYRkFPYmplY3RBcnJheSkgewogICAgICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKSB7CiAgICAgICAgICBkdW1wZWRbbmFtZV0gPSB2YWx1ZS5kdW1wKCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGR1bXBlZFtuYW1lXSA9IHZhbHVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZHVtcGVkOwogIH0KICBbJHRvU3R5bGVdKCkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIFskdG9IVE1MXSgpIHsKICAgIHJldHVybiBIVE1MUmVzdWx0LkVNUFRZOwogIH0KICAqWyRnZXRDb250YWluZWRDaGlsZHJlbl0oKSB7CiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgdGhpc1skZ2V0Q2hpbGRyZW5dKCkpIHsKICAgICAgeWllbGQgbm9kZTsKICAgIH0KICB9CiAgKltfZmlsdGVyZWRDaGlsZHJlbkdlbmVyYXRvcl0oZmlsdGVyLCBpbmNsdWRlKSB7CiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgdGhpc1skZ2V0Q29udGFpbmVkQ2hpbGRyZW5dKCkpIHsKICAgICAgaWYgKCFmaWx0ZXIgfHwgaW5jbHVkZSA9PT0gZmlsdGVyLmhhcyhub2RlWyRub2RlTmFtZV0pKSB7CiAgICAgICAgY29uc3QgYXZhaWxhYmxlU3BhY2UgPSB0aGlzWyRnZXRBdmFpbGFibGVTcGFjZV0oKTsKICAgICAgICBjb25zdCByZXMgPSBub2RlWyR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKTsKICAgICAgICBpZiAoIXJlcy5zdWNjZXNzKSB7CiAgICAgICAgICB0aGlzWyRleHRyYV0uZmFpbGluZ05vZGUgPSBub2RlOwogICAgICAgIH0KICAgICAgICB5aWVsZCByZXM7CiAgICAgIH0KICAgIH0KICB9CiAgWyRmbHVzaEhUTUxdKCkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIFskYWRkSFRNTF0oaHRtbCwgYmJveCkgewogICAgdGhpc1skZXh0cmFdLmNoaWxkcmVuLnB1c2goaHRtbCk7CiAgfQogIFskZ2V0QXZhaWxhYmxlU3BhY2VdKCkge30KICBbJGNoaWxkcmVuVG9IVE1MXSh7CiAgICBmaWx0ZXIgPSBudWxsLAogICAgaW5jbHVkZSA9IHRydWUKICB9KSB7CiAgICBpZiAoIXRoaXNbJGV4dHJhXS5nZW5lcmF0b3IpIHsKICAgICAgdGhpc1skZXh0cmFdLmdlbmVyYXRvciA9IHRoaXNbX2ZpbHRlcmVkQ2hpbGRyZW5HZW5lcmF0b3JdKGZpbHRlciwgaW5jbHVkZSk7CiAgICB9IGVsc2UgewogICAgICBjb25zdCBhdmFpbGFibGVTcGFjZSA9IHRoaXNbJGdldEF2YWlsYWJsZVNwYWNlXSgpOwogICAgICBjb25zdCByZXMgPSB0aGlzWyRleHRyYV0uZmFpbGluZ05vZGVbJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpOwogICAgICBpZiAoIXJlcy5zdWNjZXNzKSB7CiAgICAgICAgcmV0dXJuIHJlczsKICAgICAgfQogICAgICBpZiAocmVzLmh0bWwpIHsKICAgICAgICB0aGlzWyRhZGRIVE1MXShyZXMuaHRtbCwgcmVzLmJib3gpOwogICAgICB9CiAgICAgIGRlbGV0ZSB0aGlzWyRleHRyYV0uZmFpbGluZ05vZGU7CiAgICB9CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBjb25zdCBnZW4gPSB0aGlzWyRleHRyYV0uZ2VuZXJhdG9yLm5leHQoKTsKICAgICAgaWYgKGdlbi5kb25lKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgY29uc3QgcmVzID0gZ2VuLnZhbHVlOwogICAgICBpZiAoIXJlcy5zdWNjZXNzKSB7CiAgICAgICAgcmV0dXJuIHJlczsKICAgICAgfQogICAgICBpZiAocmVzLmh0bWwpIHsKICAgICAgICB0aGlzWyRhZGRIVE1MXShyZXMuaHRtbCwgcmVzLmJib3gpOwogICAgICB9CiAgICB9CiAgICB0aGlzWyRleHRyYV0uZ2VuZXJhdG9yID0gbnVsbDsKICAgIHJldHVybiBIVE1MUmVzdWx0LkVNUFRZOwogIH0KICBbJHNldFNldEF0dHJpYnV0ZXNdKGF0dHJpYnV0ZXMpIHsKICAgIHRoaXNbX3NldEF0dHJpYnV0ZXNdID0gbmV3IFNldChPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKSk7CiAgfQogIFtfZ2V0VW5zZXRBdHRyaWJ1dGVzXShwcm90b0F0dHJpYnV0ZXMpIHsKICAgIGNvbnN0IGFsbEF0dHIgPSB0aGlzW19hdHRyaWJ1dGVOYW1lc107CiAgICBjb25zdCBzZXRBdHRyID0gdGhpc1tfc2V0QXR0cmlidXRlc107CiAgICByZXR1cm4gWy4uLnByb3RvQXR0cmlidXRlc10uZmlsdGVyKHggPT4gYWxsQXR0ci5oYXMoeCkgJiYgIXNldEF0dHIuaGFzKHgpKTsKICB9CiAgWyRyZXNvbHZlUHJvdG90eXBlc10oaWRzLCBhbmNlc3RvcnMgPSBuZXcgU2V0KCkpIHsKICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpc1tfY2hpbGRyZW5dKSB7CiAgICAgIGNoaWxkW19yZXNvbHZlUHJvdG90eXBlc0hlbHBlcl0oaWRzLCBhbmNlc3RvcnMpOwogICAgfQogIH0KICBbX3Jlc29sdmVQcm90b3R5cGVzSGVscGVyXShpZHMsIGFuY2VzdG9ycykgewogICAgY29uc3QgcHJvdG8gPSB0aGlzW19nZXRQcm90b3R5cGVdKGlkcywgYW5jZXN0b3JzKTsKICAgIGlmIChwcm90bykgewogICAgICB0aGlzW19hcHBseVByb3RvdHlwZV0ocHJvdG8sIGlkcywgYW5jZXN0b3JzKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXNbJHJlc29sdmVQcm90b3R5cGVzXShpZHMsIGFuY2VzdG9ycyk7CiAgICB9CiAgfQogIFtfZ2V0UHJvdG90eXBlXShpZHMsIGFuY2VzdG9ycykgewogICAgY29uc3QgewogICAgICB1c2UsCiAgICAgIHVzZWhyZWYKICAgIH0gPSB0aGlzOwogICAgaWYgKCF1c2UgJiYgIXVzZWhyZWYpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBsZXQgcHJvdG8gPSBudWxsOwogICAgbGV0IHNvbUV4cHJlc3Npb24gPSBudWxsOwogICAgbGV0IGlkID0gbnVsbDsKICAgIGxldCByZWYgPSB1c2U7CiAgICBpZiAodXNlaHJlZikgewogICAgICByZWYgPSB1c2VocmVmOwogICAgICBpZiAodXNlaHJlZi5zdGFydHNXaXRoKCIjc29tKCIpICYmIHVzZWhyZWYuZW5kc1dpdGgoIikiKSkgewogICAgICAgIHNvbUV4cHJlc3Npb24gPSB1c2VocmVmLnNsaWNlKCIjc29tKCIubGVuZ3RoLCAtMSk7CiAgICAgIH0gZWxzZSBpZiAodXNlaHJlZi5zdGFydHNXaXRoKCIuI3NvbSgiKSAmJiB1c2VocmVmLmVuZHNXaXRoKCIpIikpIHsKICAgICAgICBzb21FeHByZXNzaW9uID0gdXNlaHJlZi5zbGljZSgiLiNzb20oIi5sZW5ndGgsIC0xKTsKICAgICAgfSBlbHNlIGlmICh1c2VocmVmLnN0YXJ0c1dpdGgoIiMiKSkgewogICAgICAgIGlkID0gdXNlaHJlZi5zbGljZSgxKTsKICAgICAgfSBlbHNlIGlmICh1c2VocmVmLnN0YXJ0c1dpdGgoIi4jIikpIHsKICAgICAgICBpZCA9IHVzZWhyZWYuc2xpY2UoMik7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAodXNlLnN0YXJ0c1dpdGgoIiMiKSkgewogICAgICBpZCA9IHVzZS5zbGljZSgxKTsKICAgIH0gZWxzZSB7CiAgICAgIHNvbUV4cHJlc3Npb24gPSB1c2U7CiAgICB9CiAgICB0aGlzLnVzZSA9IHRoaXMudXNlaHJlZiA9ICIiOwogICAgaWYgKGlkKSB7CiAgICAgIHByb3RvID0gaWRzLmdldChpZCk7CiAgICB9IGVsc2UgewogICAgICBwcm90byA9IHNlYXJjaE5vZGUoaWRzLmdldCgkcm9vdCksIHRoaXMsIHNvbUV4cHJlc3Npb24sIHRydWUsIGZhbHNlKTsKICAgICAgaWYgKHByb3RvKSB7CiAgICAgICAgcHJvdG8gPSBwcm90b1swXTsKICAgICAgfQogICAgfQogICAgaWYgKCFwcm90bykgewogICAgICB3YXJuKGBYRkEgLSBJbnZhbGlkIHByb3RvdHlwZSByZWZlcmVuY2U6ICR7cmVmfS5gKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBpZiAocHJvdG9bJG5vZGVOYW1lXSAhPT0gdGhpc1skbm9kZU5hbWVdKSB7CiAgICAgIHdhcm4oYFhGQSAtIEluY29tcGF0aWJsZSBwcm90b3R5cGU6ICR7cHJvdG9bJG5vZGVOYW1lXX0gIT09ICR7dGhpc1skbm9kZU5hbWVdfS5gKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBpZiAoYW5jZXN0b3JzLmhhcyhwcm90bykpIHsKICAgICAgd2FybihgWEZBIC0gQ3ljbGUgZGV0ZWN0ZWQgaW4gcHJvdG90eXBlcyB1c2UuYCk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgYW5jZXN0b3JzLmFkZChwcm90byk7CiAgICBjb25zdCBwcm90b1Byb3RvID0gcHJvdG9bX2dldFByb3RvdHlwZV0oaWRzLCBhbmNlc3RvcnMpOwogICAgaWYgKHByb3RvUHJvdG8pIHsKICAgICAgcHJvdG9bX2FwcGx5UHJvdG90eXBlXShwcm90b1Byb3RvLCBpZHMsIGFuY2VzdG9ycyk7CiAgICB9CiAgICBwcm90b1skcmVzb2x2ZVByb3RvdHlwZXNdKGlkcywgYW5jZXN0b3JzKTsKICAgIGFuY2VzdG9ycy5kZWxldGUocHJvdG8pOwogICAgcmV0dXJuIHByb3RvOwogIH0KICBbX2FwcGx5UHJvdG90eXBlXShwcm90bywgaWRzLCBhbmNlc3RvcnMpIHsKICAgIGlmIChhbmNlc3RvcnMuaGFzKHByb3RvKSkgewogICAgICB3YXJuKGBYRkEgLSBDeWNsZSBkZXRlY3RlZCBpbiBwcm90b3R5cGVzIHVzZS5gKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCF0aGlzWyRjb250ZW50XSAmJiBwcm90b1skY29udGVudF0pIHsKICAgICAgdGhpc1skY29udGVudF0gPSBwcm90b1skY29udGVudF07CiAgICB9CiAgICBjb25zdCBuZXdBbmNlc3RvcnMgPSBuZXcgU2V0KGFuY2VzdG9ycyk7CiAgICBuZXdBbmNlc3RvcnMuYWRkKHByb3RvKTsKICAgIGZvciAoY29uc3QgdW5zZXRBdHRyTmFtZSBvZiB0aGlzW19nZXRVbnNldEF0dHJpYnV0ZXNdKHByb3RvW19zZXRBdHRyaWJ1dGVzXSkpIHsKICAgICAgdGhpc1t1bnNldEF0dHJOYW1lXSA9IHByb3RvW3Vuc2V0QXR0ck5hbWVdOwogICAgICBpZiAodGhpc1tfc2V0QXR0cmlidXRlc10pIHsKICAgICAgICB0aGlzW19zZXRBdHRyaWJ1dGVzXS5hZGQodW5zZXRBdHRyTmFtZSk7CiAgICAgIH0KICAgIH0KICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSkgewogICAgICBpZiAodGhpc1tfYXR0cmlidXRlTmFtZXNdLmhhcyhuYW1lKSkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1tuYW1lXTsKICAgICAgY29uc3QgcHJvdG9WYWx1ZSA9IHByb3RvW25hbWVdOwogICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBYRkFPYmplY3RBcnJheSkgewogICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdmFsdWVbX2NoaWxkcmVuXSkgewogICAgICAgICAgY2hpbGRbX3Jlc29sdmVQcm90b3R5cGVzSGVscGVyXShpZHMsIGFuY2VzdG9ycyk7CiAgICAgICAgfQogICAgICAgIGZvciAobGV0IGkgPSB2YWx1ZVtfY2hpbGRyZW5dLmxlbmd0aCwgaWkgPSBwcm90b1ZhbHVlW19jaGlsZHJlbl0ubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICAgICAgY29uc3QgY2hpbGQgPSBwcm90b1tfY2hpbGRyZW5dW2ldWyRjbG9uZV0oKTsKICAgICAgICAgIGlmICh2YWx1ZS5wdXNoKGNoaWxkKSkgewogICAgICAgICAgICBjaGlsZFtfcGFyZW50XSA9IHRoaXM7CiAgICAgICAgICAgIHRoaXNbX2NoaWxkcmVuXS5wdXNoKGNoaWxkKTsKICAgICAgICAgICAgY2hpbGRbX3Jlc29sdmVQcm90b3R5cGVzSGVscGVyXShpZHMsIGFuY2VzdG9ycyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7CiAgICAgICAgdmFsdWVbJHJlc29sdmVQcm90b3R5cGVzXShpZHMsIGFuY2VzdG9ycyk7CiAgICAgICAgaWYgKHByb3RvVmFsdWUpIHsKICAgICAgICAgIHZhbHVlW19hcHBseVByb3RvdHlwZV0ocHJvdG9WYWx1ZSwgaWRzLCBhbmNlc3RvcnMpOwogICAgICAgIH0KICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAocHJvdG9WYWx1ZSAhPT0gbnVsbCkgewogICAgICAgIGNvbnN0IGNoaWxkID0gcHJvdG9WYWx1ZVskY2xvbmVdKCk7CiAgICAgICAgY2hpbGRbX3BhcmVudF0gPSB0aGlzOwogICAgICAgIHRoaXNbbmFtZV0gPSBjaGlsZDsKICAgICAgICB0aGlzW19jaGlsZHJlbl0ucHVzaChjaGlsZCk7CiAgICAgICAgY2hpbGRbX3Jlc29sdmVQcm90b3R5cGVzSGVscGVyXShpZHMsIGFuY2VzdG9ycyk7CiAgICAgIH0KICAgIH0KICB9CiAgc3RhdGljIFtfY2xvbmVBdHRyaWJ1dGVdKG9iaikgewogICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkgewogICAgICByZXR1cm4gb2JqLm1hcCh4ID0+IFhGQU9iamVjdFtfY2xvbmVBdHRyaWJ1dGVdKHgpKTsKICAgIH0KICAgIGlmICh0eXBlb2Ygb2JqID09PSAib2JqZWN0IiAmJiBvYmogIT09IG51bGwpIHsKICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIG9iaik7CiAgICB9CiAgICByZXR1cm4gb2JqOwogIH0KICBbJGNsb25lXSgpIHsKICAgIGNvbnN0IGNsb25lID0gT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykpOwogICAgZm9yIChjb25zdCAkc3ltYm9sIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGhpcykpIHsKICAgICAgdHJ5IHsKICAgICAgICBjbG9uZVskc3ltYm9sXSA9IHRoaXNbJHN5bWJvbF07CiAgICAgIH0gY2F0Y2ggewogICAgICAgIHNoYWRvdyhjbG9uZSwgJHN5bWJvbCwgdGhpc1skc3ltYm9sXSk7CiAgICAgIH0KICAgIH0KICAgIGNsb25lWyR1aWRdID0gYCR7Y2xvbmVbJG5vZGVOYW1lXX0ke3VpZCsrfWA7CiAgICBjbG9uZVtfY2hpbGRyZW5dID0gW107CiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpIHsKICAgICAgaWYgKHRoaXNbX2F0dHJpYnV0ZU5hbWVzXS5oYXMobmFtZSkpIHsKICAgICAgICBjbG9uZVtuYW1lXSA9IFhGQU9iamVjdFtfY2xvbmVBdHRyaWJ1dGVdKHRoaXNbbmFtZV0pOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1tuYW1lXTsKICAgICAgY2xvbmVbbmFtZV0gPSB2YWx1ZSBpbnN0YW5jZW9mIFhGQU9iamVjdEFycmF5ID8gbmV3IFhGQU9iamVjdEFycmF5KHZhbHVlW19tYXhdKSA6IG51bGw7CiAgICB9CiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXNbX2NoaWxkcmVuXSkgewogICAgICBjb25zdCBuYW1lID0gY2hpbGRbJG5vZGVOYW1lXTsKICAgICAgY29uc3QgY2xvbmVkQ2hpbGQgPSBjaGlsZFskY2xvbmVdKCk7CiAgICAgIGNsb25lW19jaGlsZHJlbl0ucHVzaChjbG9uZWRDaGlsZCk7CiAgICAgIGNsb25lZENoaWxkW19wYXJlbnRdID0gY2xvbmU7CiAgICAgIGlmIChjbG9uZVtuYW1lXSA9PT0gbnVsbCkgewogICAgICAgIGNsb25lW25hbWVdID0gY2xvbmVkQ2hpbGQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY2xvbmVbbmFtZV1bX2NoaWxkcmVuXS5wdXNoKGNsb25lZENoaWxkKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGNsb25lOwogIH0KICBbJGdldENoaWxkcmVuXShuYW1lID0gbnVsbCkgewogICAgaWYgKCFuYW1lKSB7CiAgICAgIHJldHVybiB0aGlzW19jaGlsZHJlbl07CiAgICB9CiAgICByZXR1cm4gdGhpc1tfY2hpbGRyZW5dLmZpbHRlcihjID0+IGNbJG5vZGVOYW1lXSA9PT0gbmFtZSk7CiAgfQogIFskZ2V0Q2hpbGRyZW5CeUNsYXNzXShuYW1lKSB7CiAgICByZXR1cm4gdGhpc1tuYW1lXTsKICB9CiAgWyRnZXRDaGlsZHJlbkJ5TmFtZV0obmFtZSwgYWxsVHJhbnNwYXJlbnQsIGZpcnN0ID0gdHJ1ZSkgewogICAgcmV0dXJuIEFycmF5LmZyb20odGhpc1skZ2V0Q2hpbGRyZW5CeU5hbWVJdF0obmFtZSwgYWxsVHJhbnNwYXJlbnQsIGZpcnN0KSk7CiAgfQogICpbJGdldENoaWxkcmVuQnlOYW1lSXRdKG5hbWUsIGFsbFRyYW5zcGFyZW50LCBmaXJzdCA9IHRydWUpIHsKICAgIGlmIChuYW1lID09PSAicGFyZW50IikgewogICAgICB5aWVsZCB0aGlzW19wYXJlbnRdOwogICAgICByZXR1cm47CiAgICB9CiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXNbX2NoaWxkcmVuXSkgewogICAgICBpZiAoY2hpbGRbJG5vZGVOYW1lXSA9PT0gbmFtZSkgewogICAgICAgIHlpZWxkIGNoaWxkOwogICAgICB9CiAgICAgIGlmIChjaGlsZC5uYW1lID09PSBuYW1lKSB7CiAgICAgICAgeWllbGQgY2hpbGQ7CiAgICAgIH0KICAgICAgaWYgKGFsbFRyYW5zcGFyZW50IHx8IGNoaWxkWyRpc1RyYW5zcGFyZW50XSgpKSB7CiAgICAgICAgeWllbGQqIGNoaWxkWyRnZXRDaGlsZHJlbkJ5TmFtZUl0XShuYW1lLCBhbGxUcmFuc3BhcmVudCwgZmFsc2UpOwogICAgICB9CiAgICB9CiAgICBpZiAoZmlyc3QgJiYgdGhpc1tfYXR0cmlidXRlTmFtZXNdLmhhcyhuYW1lKSkgewogICAgICB5aWVsZCBuZXcgWEZBQXR0cmlidXRlKHRoaXMsIG5hbWUsIHRoaXNbbmFtZV0pOwogICAgfQogIH0KfQpjbGFzcyBYRkFPYmplY3RBcnJheSB7CiAgY29uc3RydWN0b3IobWF4ID0gSW5maW5pdHkpIHsKICAgIHRoaXNbX21heF0gPSBtYXg7CiAgICB0aGlzW19jaGlsZHJlbl0gPSBbXTsKICB9CiAgZ2V0IGlzWEZBT2JqZWN0KCkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICBnZXQgaXNYRkFPYmplY3RBcnJheSgpIHsKICAgIHJldHVybiB0cnVlOwogIH0KICBwdXNoKGNoaWxkKSB7CiAgICBjb25zdCBsZW4gPSB0aGlzW19jaGlsZHJlbl0ubGVuZ3RoOwogICAgaWYgKGxlbiA8PSB0aGlzW19tYXhdKSB7CiAgICAgIHRoaXNbX2NoaWxkcmVuXS5wdXNoKGNoaWxkKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICB3YXJuKGBYRkEgLSBub2RlICIke2NoaWxkWyRub2RlTmFtZV19IiBhY2NlcHRzIG5vIG1vcmUgdGhhbiAke3RoaXNbX21heF19IGNoaWxkcmVuYCk7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGlzRW1wdHkoKSB7CiAgICByZXR1cm4gdGhpc1tfY2hpbGRyZW5dLmxlbmd0aCA9PT0gMDsKICB9CiAgZHVtcCgpIHsKICAgIHJldHVybiB0aGlzW19jaGlsZHJlbl0ubGVuZ3RoID09PSAxID8gdGhpc1tfY2hpbGRyZW5dWzBdWyRkdW1wXSgpIDogdGhpc1tfY2hpbGRyZW5dLm1hcCh4ID0+IHhbJGR1bXBdKCkpOwogIH0KICBbJGNsb25lXSgpIHsKICAgIGNvbnN0IGNsb25lID0gbmV3IFhGQU9iamVjdEFycmF5KHRoaXNbX21heF0pOwogICAgY2xvbmVbX2NoaWxkcmVuXSA9IHRoaXNbX2NoaWxkcmVuXS5tYXAoYyA9PiBjWyRjbG9uZV0oKSk7CiAgICByZXR1cm4gY2xvbmU7CiAgfQogIGdldCBjaGlsZHJlbigpIHsKICAgIHJldHVybiB0aGlzW19jaGlsZHJlbl07CiAgfQogIGNsZWFyKCkgewogICAgdGhpc1tfY2hpbGRyZW5dLmxlbmd0aCA9IDA7CiAgfQp9CmNsYXNzIFhGQUF0dHJpYnV0ZSB7CiAgY29uc3RydWN0b3Iobm9kZSwgbmFtZSwgdmFsdWUpIHsKICAgIHRoaXNbX3BhcmVudF0gPSBub2RlOwogICAgdGhpc1skbm9kZU5hbWVdID0gbmFtZTsKICAgIHRoaXNbJGNvbnRlbnRdID0gdmFsdWU7CiAgICB0aGlzWyRjb25zdW1lZF0gPSBmYWxzZTsKICAgIHRoaXNbJHVpZF0gPSBgYXR0cmlidXRlJHt1aWQrK31gOwogIH0KICBbJGdldFBhcmVudF0oKSB7CiAgICByZXR1cm4gdGhpc1tfcGFyZW50XTsKICB9CiAgWyRpc0RhdGFWYWx1ZV0oKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgWyRnZXREYXRhVmFsdWVdKCkgewogICAgcmV0dXJuIHRoaXNbJGNvbnRlbnRdLnRyaW0oKTsKICB9CiAgWyRzZXRWYWx1ZV0odmFsdWUpIHsKICAgIHZhbHVlID0gdmFsdWUudmFsdWUgfHwgIiI7CiAgICB0aGlzWyRjb250ZW50XSA9IHZhbHVlLnRvU3RyaW5nKCk7CiAgfQogIFskdGV4dF0oKSB7CiAgICByZXR1cm4gdGhpc1skY29udGVudF07CiAgfQogIFskaXNEZXNjZW5kZW50XShwYXJlbnQpIHsKICAgIHJldHVybiB0aGlzW19wYXJlbnRdID09PSBwYXJlbnQgfHwgdGhpc1tfcGFyZW50XVskaXNEZXNjZW5kZW50XShwYXJlbnQpOwogIH0KfQpjbGFzcyBYbWxPYmplY3QgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKG5zSWQsIG5hbWUsIGF0dHJpYnV0ZXMgPSB7fSkgewogICAgc3VwZXIobnNJZCwgbmFtZSk7CiAgICB0aGlzWyRjb250ZW50XSA9ICIiOwogICAgdGhpc1tfZGF0YVZhbHVlXSA9IG51bGw7CiAgICBpZiAobmFtZSAhPT0gIiN0ZXh0IikgewogICAgICBjb25zdCBtYXAgPSBuZXcgTWFwKCk7CiAgICAgIHRoaXNbX2F0dHJpYnV0ZXNdID0gbWFwOwogICAgICBmb3IgKGNvbnN0IFthdHRyTmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpKSB7CiAgICAgICAgbWFwLnNldChhdHRyTmFtZSwgbmV3IFhGQUF0dHJpYnV0ZSh0aGlzLCBhdHRyTmFtZSwgdmFsdWUpKTsKICAgICAgfQogICAgICBpZiAoYXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eSgkbnNBdHRyaWJ1dGVzKSkgewogICAgICAgIGNvbnN0IGRhdGFOb2RlID0gYXR0cmlidXRlc1skbnNBdHRyaWJ1dGVzXS54ZmEuZGF0YU5vZGU7CiAgICAgICAgaWYgKGRhdGFOb2RlICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgIGlmIChkYXRhTm9kZSA9PT0gImRhdGFHcm91cCIpIHsKICAgICAgICAgICAgdGhpc1tfZGF0YVZhbHVlXSA9IGZhbHNlOwogICAgICAgICAgfSBlbHNlIGlmIChkYXRhTm9kZSA9PT0gImRhdGFWYWx1ZSIpIHsKICAgICAgICAgICAgdGhpc1tfZGF0YVZhbHVlXSA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICB0aGlzWyRjb25zdW1lZF0gPSBmYWxzZTsKICB9CiAgWyR0b1N0cmluZ10oYnVmKSB7CiAgICBjb25zdCB0YWdOYW1lID0gdGhpc1skbm9kZU5hbWVdOwogICAgaWYgKHRhZ05hbWUgPT09ICIjdGV4dCIpIHsKICAgICAgYnVmLnB1c2goZW5jb2RlVG9YbWxTdHJpbmcodGhpc1skY29udGVudF0pKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgdXRmOFRhZ05hbWUgPSB1dGY4U3RyaW5nVG9TdHJpbmcodGFnTmFtZSk7CiAgICBjb25zdCBwcmVmaXggPSB0aGlzWyRuYW1lc3BhY2VJZF0gPT09IE5TX0RBVEFTRVRTID8gInhmYToiIDogIiI7CiAgICBidWYucHVzaChgPCR7cHJlZml4fSR7dXRmOFRhZ05hbWV9YCk7CiAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgdGhpc1tfYXR0cmlidXRlc10uZW50cmllcygpKSB7CiAgICAgIGNvbnN0IHV0ZjhOYW1lID0gdXRmOFN0cmluZ1RvU3RyaW5nKG5hbWUpOwogICAgICBidWYucHVzaChgICR7dXRmOE5hbWV9PSIke2VuY29kZVRvWG1sU3RyaW5nKHZhbHVlWyRjb250ZW50XSl9ImApOwogICAgfQogICAgaWYgKHRoaXNbX2RhdGFWYWx1ZV0gIT09IG51bGwpIHsKICAgICAgaWYgKHRoaXNbX2RhdGFWYWx1ZV0pIHsKICAgICAgICBidWYucHVzaChgIHhmYTpkYXRhTm9kZT0iZGF0YVZhbHVlImApOwogICAgICB9IGVsc2UgewogICAgICAgIGJ1Zi5wdXNoKGAgeGZhOmRhdGFOb2RlPSJkYXRhR3JvdXAiYCk7CiAgICAgIH0KICAgIH0KICAgIGlmICghdGhpc1skY29udGVudF0gJiYgdGhpc1tfY2hpbGRyZW5dLmxlbmd0aCA9PT0gMCkgewogICAgICBidWYucHVzaCgiLz4iKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgYnVmLnB1c2goIj4iKTsKICAgIGlmICh0aGlzWyRjb250ZW50XSkgewogICAgICBpZiAodHlwZW9mIHRoaXNbJGNvbnRlbnRdID09PSAic3RyaW5nIikgewogICAgICAgIGJ1Zi5wdXNoKGVuY29kZVRvWG1sU3RyaW5nKHRoaXNbJGNvbnRlbnRdKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpc1skY29udGVudF1bJHRvU3RyaW5nXShidWYpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXNbX2NoaWxkcmVuXSkgewogICAgICAgIGNoaWxkWyR0b1N0cmluZ10oYnVmKTsKICAgICAgfQogICAgfQogICAgYnVmLnB1c2goYDwvJHtwcmVmaXh9JHt1dGY4VGFnTmFtZX0+YCk7CiAgfQogIFskb25DaGlsZF0oY2hpbGQpIHsKICAgIGlmICh0aGlzWyRjb250ZW50XSkgewogICAgICBjb25zdCBub2RlID0gbmV3IFhtbE9iamVjdCh0aGlzWyRuYW1lc3BhY2VJZF0sICIjdGV4dCIpOwogICAgICB0aGlzWyRhcHBlbmRDaGlsZF0obm9kZSk7CiAgICAgIG5vZGVbJGNvbnRlbnRdID0gdGhpc1skY29udGVudF07CiAgICAgIHRoaXNbJGNvbnRlbnRdID0gIiI7CiAgICB9CiAgICB0aGlzWyRhcHBlbmRDaGlsZF0oY2hpbGQpOwogICAgcmV0dXJuIHRydWU7CiAgfQogIFskb25UZXh0XShzdHIpIHsKICAgIHRoaXNbJGNvbnRlbnRdICs9IHN0cjsKICB9CiAgWyRmaW5hbGl6ZV0oKSB7CiAgICBpZiAodGhpc1skY29udGVudF0gJiYgdGhpc1tfY2hpbGRyZW5dLmxlbmd0aCA+IDApIHsKICAgICAgY29uc3Qgbm9kZSA9IG5ldyBYbWxPYmplY3QodGhpc1skbmFtZXNwYWNlSWRdLCAiI3RleHQiKTsKICAgICAgdGhpc1skYXBwZW5kQ2hpbGRdKG5vZGUpOwogICAgICBub2RlWyRjb250ZW50XSA9IHRoaXNbJGNvbnRlbnRdOwogICAgICBkZWxldGUgdGhpc1skY29udGVudF07CiAgICB9CiAgfQogIFskdG9IVE1MXSgpIHsKICAgIGlmICh0aGlzWyRub2RlTmFtZV0gPT09ICIjdGV4dCIpIHsKICAgICAgcmV0dXJuIEhUTUxSZXN1bHQuc3VjY2Vzcyh7CiAgICAgICAgbmFtZTogIiN0ZXh0IiwKICAgICAgICB2YWx1ZTogdGhpc1skY29udGVudF0KICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gSFRNTFJlc3VsdC5FTVBUWTsKICB9CiAgWyRnZXRDaGlsZHJlbl0obmFtZSA9IG51bGwpIHsKICAgIGlmICghbmFtZSkgewogICAgICByZXR1cm4gdGhpc1tfY2hpbGRyZW5dOwogICAgfQogICAgcmV0dXJuIHRoaXNbX2NoaWxkcmVuXS5maWx0ZXIoYyA9PiBjWyRub2RlTmFtZV0gPT09IG5hbWUpOwogIH0KICBbJGdldEF0dHJpYnV0ZXNdKCkgewogICAgcmV0dXJuIHRoaXNbX2F0dHJpYnV0ZXNdOwogIH0KICBbJGdldENoaWxkcmVuQnlDbGFzc10obmFtZSkgewogICAgY29uc3QgdmFsdWUgPSB0aGlzW19hdHRyaWJ1dGVzXS5nZXQobmFtZSk7CiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkgewogICAgICByZXR1cm4gdmFsdWU7CiAgICB9CiAgICByZXR1cm4gdGhpc1skZ2V0Q2hpbGRyZW5dKG5hbWUpOwogIH0KICAqWyRnZXRDaGlsZHJlbkJ5TmFtZUl0XShuYW1lLCBhbGxUcmFuc3BhcmVudCkgewogICAgY29uc3QgdmFsdWUgPSB0aGlzW19hdHRyaWJ1dGVzXS5nZXQobmFtZSk7CiAgICBpZiAodmFsdWUpIHsKICAgICAgeWllbGQgdmFsdWU7CiAgICB9CiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXNbX2NoaWxkcmVuXSkgewogICAgICBpZiAoY2hpbGRbJG5vZGVOYW1lXSA9PT0gbmFtZSkgewogICAgICAgIHlpZWxkIGNoaWxkOwogICAgICB9CiAgICAgIGlmIChhbGxUcmFuc3BhcmVudCkgewogICAgICAgIHlpZWxkKiBjaGlsZFskZ2V0Q2hpbGRyZW5CeU5hbWVJdF0obmFtZSwgYWxsVHJhbnNwYXJlbnQpOwogICAgICB9CiAgICB9CiAgfQogICpbJGdldEF0dHJpYnV0ZUl0XShuYW1lLCBza2lwQ29uc3VtZWQpIHsKICAgIGNvbnN0IHZhbHVlID0gdGhpc1tfYXR0cmlidXRlc10uZ2V0KG5hbWUpOwogICAgaWYgKHZhbHVlICYmICghc2tpcENvbnN1bWVkIHx8ICF2YWx1ZVskY29uc3VtZWRdKSkgewogICAgICB5aWVsZCB2YWx1ZTsKICAgIH0KICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpc1tfY2hpbGRyZW5dKSB7CiAgICAgIHlpZWxkKiBjaGlsZFskZ2V0QXR0cmlidXRlSXRdKG5hbWUsIHNraXBDb25zdW1lZCk7CiAgICB9CiAgfQogICpbJGdldFJlYWxDaGlsZHJlbkJ5TmFtZUl0XShuYW1lLCBhbGxUcmFuc3BhcmVudCwgc2tpcENvbnN1bWVkKSB7CiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXNbX2NoaWxkcmVuXSkgewogICAgICBpZiAoY2hpbGRbJG5vZGVOYW1lXSA9PT0gbmFtZSAmJiAoIXNraXBDb25zdW1lZCB8fCAhY2hpbGRbJGNvbnN1bWVkXSkpIHsKICAgICAgICB5aWVsZCBjaGlsZDsKICAgICAgfQogICAgICBpZiAoYWxsVHJhbnNwYXJlbnQpIHsKICAgICAgICB5aWVsZCogY2hpbGRbJGdldFJlYWxDaGlsZHJlbkJ5TmFtZUl0XShuYW1lLCBhbGxUcmFuc3BhcmVudCwgc2tpcENvbnN1bWVkKTsKICAgICAgfQogICAgfQogIH0KICBbJGlzRGF0YVZhbHVlXSgpIHsKICAgIGlmICh0aGlzW19kYXRhVmFsdWVdID09PSBudWxsKSB7CiAgICAgIHJldHVybiB0aGlzW19jaGlsZHJlbl0ubGVuZ3RoID09PSAwIHx8IHRoaXNbX2NoaWxkcmVuXVswXVskbmFtZXNwYWNlSWRdID09PSBOYW1lc3BhY2VJZHMueGh0bWwuaWQ7CiAgICB9CiAgICByZXR1cm4gdGhpc1tfZGF0YVZhbHVlXTsKICB9CiAgWyRnZXREYXRhVmFsdWVdKCkgewogICAgaWYgKHRoaXNbX2RhdGFWYWx1ZV0gPT09IG51bGwpIHsKICAgICAgaWYgKHRoaXNbX2NoaWxkcmVuXS5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gdGhpc1skY29udGVudF0udHJpbSgpOwogICAgICB9CiAgICAgIGlmICh0aGlzW19jaGlsZHJlbl1bMF1bJG5hbWVzcGFjZUlkXSA9PT0gTmFtZXNwYWNlSWRzLnhodG1sLmlkKSB7CiAgICAgICAgcmV0dXJuIHRoaXNbX2NoaWxkcmVuXVswXVskdGV4dF0oKS50cmltKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICByZXR1cm4gdGhpc1skY29udGVudF0udHJpbSgpOwogIH0KICBbJHNldFZhbHVlXSh2YWx1ZSkgewogICAgdmFsdWUgPSB2YWx1ZS52YWx1ZSB8fCAiIjsKICAgIHRoaXNbJGNvbnRlbnRdID0gdmFsdWUudG9TdHJpbmcoKTsKICB9CiAgWyRkdW1wXShoYXNOUyA9IGZhbHNlKSB7CiAgICBjb25zdCBkdW1wZWQgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgaWYgKGhhc05TKSB7CiAgICAgIGR1bXBlZC4kbnMgPSB0aGlzWyRuYW1lc3BhY2VJZF07CiAgICB9CiAgICBpZiAodGhpc1skY29udGVudF0pIHsKICAgICAgZHVtcGVkLiRjb250ZW50ID0gdGhpc1skY29udGVudF07CiAgICB9CiAgICBkdW1wZWQuJG5hbWUgPSB0aGlzWyRub2RlTmFtZV07CiAgICBkdW1wZWQuY2hpbGRyZW4gPSBbXTsKICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpc1tfY2hpbGRyZW5dKSB7CiAgICAgIGR1bXBlZC5jaGlsZHJlbi5wdXNoKGNoaWxkWyRkdW1wXShoYXNOUykpOwogICAgfQogICAgZHVtcGVkLmF0dHJpYnV0ZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIHRoaXNbX2F0dHJpYnV0ZXNdKSB7CiAgICAgIGR1bXBlZC5hdHRyaWJ1dGVzW25hbWVdID0gdmFsdWVbJGNvbnRlbnRdOwogICAgfQogICAgcmV0dXJuIGR1bXBlZDsKICB9Cn0KY2xhc3MgQ29udGVudE9iamVjdCBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IobnNJZCwgbmFtZSkgewogICAgc3VwZXIobnNJZCwgbmFtZSk7CiAgICB0aGlzWyRjb250ZW50XSA9ICIiOwogIH0KICBbJG9uVGV4dF0odGV4dCkgewogICAgdGhpc1skY29udGVudF0gKz0gdGV4dDsKICB9CiAgWyRmaW5hbGl6ZV0oKSB7fQp9CmNsYXNzIE9wdGlvbk9iamVjdCBleHRlbmRzIENvbnRlbnRPYmplY3QgewogIGNvbnN0cnVjdG9yKG5zSWQsIG5hbWUsIG9wdGlvbnMpIHsKICAgIHN1cGVyKG5zSWQsIG5hbWUpOwogICAgdGhpc1tfb3B0aW9uc10gPSBvcHRpb25zOwogIH0KICBbJGZpbmFsaXplXSgpIHsKICAgIHRoaXNbJGNvbnRlbnRdID0gZ2V0S2V5d29yZCh7CiAgICAgIGRhdGE6IHRoaXNbJGNvbnRlbnRdLAogICAgICBkZWZhdWx0VmFsdWU6IHRoaXNbX29wdGlvbnNdWzBdLAogICAgICB2YWxpZGF0ZTogayA9PiB0aGlzW19vcHRpb25zXS5pbmNsdWRlcyhrKQogICAgfSk7CiAgfQogIFskY2xlYW5dKGJ1aWxkZXIpIHsKICAgIHN1cGVyWyRjbGVhbl0oYnVpbGRlcik7CiAgICBkZWxldGUgdGhpc1tfb3B0aW9uc107CiAgfQp9CmNsYXNzIFN0cmluZ09iamVjdCBleHRlbmRzIENvbnRlbnRPYmplY3QgewogIFskZmluYWxpemVdKCkgewogICAgdGhpc1skY29udGVudF0gPSB0aGlzWyRjb250ZW50XS50cmltKCk7CiAgfQp9CmNsYXNzIEludGVnZXJPYmplY3QgZXh0ZW5kcyBDb250ZW50T2JqZWN0IHsKICBjb25zdHJ1Y3Rvcihuc0lkLCBuYW1lLCBkZWZhdWx0VmFsdWUsIHZhbGlkYXRvcikgewogICAgc3VwZXIobnNJZCwgbmFtZSk7CiAgICB0aGlzW19kZWZhdWx0VmFsdWVdID0gZGVmYXVsdFZhbHVlOwogICAgdGhpc1tfdmFsaWRhdG9yXSA9IHZhbGlkYXRvcjsKICB9CiAgWyRmaW5hbGl6ZV0oKSB7CiAgICB0aGlzWyRjb250ZW50XSA9IGdldEludGVnZXIoewogICAgICBkYXRhOiB0aGlzWyRjb250ZW50XSwKICAgICAgZGVmYXVsdFZhbHVlOiB0aGlzW19kZWZhdWx0VmFsdWVdLAogICAgICB2YWxpZGF0ZTogdGhpc1tfdmFsaWRhdG9yXQogICAgfSk7CiAgfQogIFskY2xlYW5dKGJ1aWxkZXIpIHsKICAgIHN1cGVyWyRjbGVhbl0oYnVpbGRlcik7CiAgICBkZWxldGUgdGhpc1tfZGVmYXVsdFZhbHVlXTsKICAgIGRlbGV0ZSB0aGlzW192YWxpZGF0b3JdOwogIH0KfQpjbGFzcyBPcHRpb24wMSBleHRlbmRzIEludGVnZXJPYmplY3QgewogIGNvbnN0cnVjdG9yKG5zSWQsIG5hbWUpIHsKICAgIHN1cGVyKG5zSWQsIG5hbWUsIDAsIG4gPT4gbiA9PT0gMSk7CiAgfQp9CmNsYXNzIE9wdGlvbjEwIGV4dGVuZHMgSW50ZWdlck9iamVjdCB7CiAgY29uc3RydWN0b3IobnNJZCwgbmFtZSkgewogICAgc3VwZXIobnNJZCwgbmFtZSwgMSwgbiA9PiBuID09PSAwKTsKICB9Cn0KCjsvLyAuL3NyYy9jb3JlL3hmYS9odG1sX3V0aWxzLmpzCgoKCgoKCmZ1bmN0aW9uIG1lYXN1cmVUb1N0cmluZyhtKSB7CiAgaWYgKHR5cGVvZiBtID09PSAic3RyaW5nIikgewogICAgcmV0dXJuICIwcHgiOwogIH0KICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihtKSA/IGAke219cHhgIDogYCR7bS50b0ZpeGVkKDIpfXB4YDsKfQpjb25zdCBjb252ZXJ0ZXJzID0gewogIGFuY2hvclR5cGUobm9kZSwgc3R5bGUpIHsKICAgIGNvbnN0IHBhcmVudCA9IG5vZGVbJGdldFN1YmZvcm1QYXJlbnRdKCk7CiAgICBpZiAoIXBhcmVudCB8fCBwYXJlbnQubGF5b3V0ICYmIHBhcmVudC5sYXlvdXQgIT09ICJwb3NpdGlvbiIpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCEoInRyYW5zZm9ybSIgaW4gc3R5bGUpKSB7CiAgICAgIHN0eWxlLnRyYW5zZm9ybSA9ICIiOwogICAgfQogICAgc3dpdGNoIChub2RlLmFuY2hvclR5cGUpIHsKICAgICAgY2FzZSAiYm90dG9tQ2VudGVyIjoKICAgICAgICBzdHlsZS50cmFuc2Zvcm0gKz0gInRyYW5zbGF0ZSgtNTAlLCAtMTAwJSkiOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJib3R0b21MZWZ0IjoKICAgICAgICBzdHlsZS50cmFuc2Zvcm0gKz0gInRyYW5zbGF0ZSgwLC0xMDAlKSI7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgImJvdHRvbVJpZ2h0IjoKICAgICAgICBzdHlsZS50cmFuc2Zvcm0gKz0gInRyYW5zbGF0ZSgtMTAwJSwtMTAwJSkiOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJtaWRkbGVDZW50ZXIiOgogICAgICAgIHN0eWxlLnRyYW5zZm9ybSArPSAidHJhbnNsYXRlKC01MCUsLTUwJSkiOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJtaWRkbGVMZWZ0IjoKICAgICAgICBzdHlsZS50cmFuc2Zvcm0gKz0gInRyYW5zbGF0ZSgwLC01MCUpIjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAibWlkZGxlUmlnaHQiOgogICAgICAgIHN0eWxlLnRyYW5zZm9ybSArPSAidHJhbnNsYXRlKC0xMDAlLC01MCUpIjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAidG9wQ2VudGVyIjoKICAgICAgICBzdHlsZS50cmFuc2Zvcm0gKz0gInRyYW5zbGF0ZSgtNTAlLDApIjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAidG9wUmlnaHQiOgogICAgICAgIHN0eWxlLnRyYW5zZm9ybSArPSAidHJhbnNsYXRlKC0xMDAlLDApIjsKICAgICAgICBicmVhazsKICAgIH0KICB9LAogIGRpbWVuc2lvbnMobm9kZSwgc3R5bGUpIHsKICAgIGNvbnN0IHBhcmVudCA9IG5vZGVbJGdldFN1YmZvcm1QYXJlbnRdKCk7CiAgICBsZXQgd2lkdGggPSBub2RlLnc7CiAgICBjb25zdCBoZWlnaHQgPSBub2RlLmg7CiAgICBpZiAocGFyZW50LmxheW91dD8uaW5jbHVkZXMoInJvdyIpKSB7CiAgICAgIGNvbnN0IGV4dHJhID0gcGFyZW50WyRleHRyYV07CiAgICAgIGNvbnN0IGNvbFNwYW4gPSBub2RlLmNvbFNwYW47CiAgICAgIGxldCB3OwogICAgICBpZiAoY29sU3BhbiA9PT0gLTEpIHsKICAgICAgICB3ID0gTWF0aC5zdW1QcmVjaXNlKGV4dHJhLmNvbHVtbldpZHRocy5zbGljZShleHRyYS5jdXJyZW50Q29sdW1uKSk7CiAgICAgICAgZXh0cmEuY3VycmVudENvbHVtbiA9IDA7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdyA9IE1hdGguc3VtUHJlY2lzZShleHRyYS5jb2x1bW5XaWR0aHMuc2xpY2UoZXh0cmEuY3VycmVudENvbHVtbiwgZXh0cmEuY3VycmVudENvbHVtbiArIGNvbFNwYW4pKTsKICAgICAgICBleHRyYS5jdXJyZW50Q29sdW1uID0gKGV4dHJhLmN1cnJlbnRDb2x1bW4gKyBub2RlLmNvbFNwYW4pICUgZXh0cmEuY29sdW1uV2lkdGhzLmxlbmd0aDsKICAgICAgfQogICAgICBpZiAoIWlzTmFOKHcpKSB7CiAgICAgICAgd2lkdGggPSBub2RlLncgPSB3OwogICAgICB9CiAgICB9CiAgICBzdHlsZS53aWR0aCA9IHdpZHRoICE9PSAiIiA/IG1lYXN1cmVUb1N0cmluZyh3aWR0aCkgOiAiYXV0byI7CiAgICBzdHlsZS5oZWlnaHQgPSBoZWlnaHQgIT09ICIiID8gbWVhc3VyZVRvU3RyaW5nKGhlaWdodCkgOiAiYXV0byI7CiAgfSwKICBwb3NpdGlvbihub2RlLCBzdHlsZSkgewogICAgY29uc3QgcGFyZW50ID0gbm9kZVskZ2V0U3ViZm9ybVBhcmVudF0oKTsKICAgIGlmIChwYXJlbnQ/LmxheW91dCAmJiBwYXJlbnQubGF5b3V0ICE9PSAicG9zaXRpb24iKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKICAgIHN0eWxlLmxlZnQgPSBtZWFzdXJlVG9TdHJpbmcobm9kZS54KTsKICAgIHN0eWxlLnRvcCA9IG1lYXN1cmVUb1N0cmluZyhub2RlLnkpOwogIH0sCiAgcm90YXRlKG5vZGUsIHN0eWxlKSB7CiAgICBpZiAobm9kZS5yb3RhdGUpIHsKICAgICAgaWYgKCEoInRyYW5zZm9ybSIgaW4gc3R5bGUpKSB7CiAgICAgICAgc3R5bGUudHJhbnNmb3JtID0gIiI7CiAgICAgIH0KICAgICAgc3R5bGUudHJhbnNmb3JtICs9IGByb3RhdGUoLSR7bm9kZS5yb3RhdGV9ZGVnKWA7CiAgICAgIHN0eWxlLnRyYW5zZm9ybU9yaWdpbiA9ICJ0b3AgbGVmdCI7CiAgICB9CiAgfSwKICBwcmVzZW5jZShub2RlLCBzdHlsZSkgewogICAgc3dpdGNoIChub2RlLnByZXNlbmNlKSB7CiAgICAgIGNhc2UgImludmlzaWJsZSI6CiAgICAgICAgc3R5bGUudmlzaWJpbGl0eSA9ICJoaWRkZW4iOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJoaWRkZW4iOgogICAgICBjYXNlICJpbmFjdGl2ZSI6CiAgICAgICAgc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgICBicmVhazsKICAgIH0KICB9LAogIGhBbGlnbihub2RlLCBzdHlsZSkgewogICAgaWYgKG5vZGVbJG5vZGVOYW1lXSA9PT0gInBhcmEiKSB7CiAgICAgIHN3aXRjaCAobm9kZS5oQWxpZ24pIHsKICAgICAgICBjYXNlICJqdXN0aWZ5QWxsIjoKICAgICAgICAgIHN0eWxlLnRleHRBbGlnbiA9ICJqdXN0aWZ5LWFsbCI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJyYWRpeCI6CiAgICAgICAgICBzdHlsZS50ZXh0QWxpZ24gPSAibGVmdCI7CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgc3R5bGUudGV4dEFsaWduID0gbm9kZS5oQWxpZ247CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHN3aXRjaCAobm9kZS5oQWxpZ24pIHsKICAgICAgICBjYXNlICJsZWZ0IjoKICAgICAgICAgIHN0eWxlLmFsaWduU2VsZiA9ICJzdGFydCI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJjZW50ZXIiOgogICAgICAgICAgc3R5bGUuYWxpZ25TZWxmID0gImNlbnRlciI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJyaWdodCI6CiAgICAgICAgICBzdHlsZS5hbGlnblNlbGYgPSAiZW5kIjsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgfSwKICBtYXJnaW4obm9kZSwgc3R5bGUpIHsKICAgIGlmIChub2RlLm1hcmdpbikgewogICAgICBzdHlsZS5tYXJnaW4gPSBub2RlLm1hcmdpblskdG9TdHlsZV0oKS5tYXJnaW47CiAgICB9CiAgfQp9OwpmdW5jdGlvbiBzZXRNaW5NYXhEaW1lbnNpb25zKG5vZGUsIHN0eWxlKSB7CiAgY29uc3QgcGFyZW50ID0gbm9kZVskZ2V0U3ViZm9ybVBhcmVudF0oKTsKICBpZiAocGFyZW50LmxheW91dCA9PT0gInBvc2l0aW9uIikgewogICAgaWYgKG5vZGUubWluVyA+IDApIHsKICAgICAgc3R5bGUubWluV2lkdGggPSBtZWFzdXJlVG9TdHJpbmcobm9kZS5taW5XKTsKICAgIH0KICAgIGlmIChub2RlLm1heFcgPiAwKSB7CiAgICAgIHN0eWxlLm1heFdpZHRoID0gbWVhc3VyZVRvU3RyaW5nKG5vZGUubWF4Vyk7CiAgICB9CiAgICBpZiAobm9kZS5taW5IID4gMCkgewogICAgICBzdHlsZS5taW5IZWlnaHQgPSBtZWFzdXJlVG9TdHJpbmcobm9kZS5taW5IKTsKICAgIH0KICAgIGlmIChub2RlLm1heEggPiAwKSB7CiAgICAgIHN0eWxlLm1heEhlaWdodCA9IG1lYXN1cmVUb1N0cmluZyhub2RlLm1heEgpOwogICAgfQogIH0KfQpmdW5jdGlvbiBsYXlvdXRUZXh0KHRleHQsIHhmYUZvbnQsIG1hcmdpbiwgbGluZUhlaWdodCwgZm9udEZpbmRlciwgd2lkdGgpIHsKICBjb25zdCBtZWFzdXJlID0gbmV3IFRleHRNZWFzdXJlKHhmYUZvbnQsIG1hcmdpbiwgbGluZUhlaWdodCwgZm9udEZpbmRlcik7CiAgaWYgKHR5cGVvZiB0ZXh0ID09PSAic3RyaW5nIikgewogICAgbWVhc3VyZS5hZGRTdHJpbmcodGV4dCk7CiAgfSBlbHNlIHsKICAgIHRleHRbJHB1c2hHbHlwaHNdKG1lYXN1cmUpOwogIH0KICByZXR1cm4gbWVhc3VyZS5jb21wdXRlKHdpZHRoKTsKfQpmdW5jdGlvbiBsYXlvdXROb2RlKG5vZGUsIGF2YWlsYWJsZVNwYWNlKSB7CiAgbGV0IGhlaWdodCA9IG51bGw7CiAgbGV0IHdpZHRoID0gbnVsbDsKICBsZXQgaXNCcm9rZW4gPSBmYWxzZTsKICBpZiAoKCFub2RlLncgfHwgIW5vZGUuaCkgJiYgbm9kZS52YWx1ZSkgewogICAgbGV0IG1hcmdpbkggPSAwOwogICAgbGV0IG1hcmdpblYgPSAwOwogICAgaWYgKG5vZGUubWFyZ2luKSB7CiAgICAgIG1hcmdpbkggPSBub2RlLm1hcmdpbi5sZWZ0SW5zZXQgKyBub2RlLm1hcmdpbi5yaWdodEluc2V0OwogICAgICBtYXJnaW5WID0gbm9kZS5tYXJnaW4udG9wSW5zZXQgKyBub2RlLm1hcmdpbi5ib3R0b21JbnNldDsKICAgIH0KICAgIGxldCBsaW5lSGVpZ2h0ID0gbnVsbDsKICAgIGxldCBtYXJnaW4gPSBudWxsOwogICAgaWYgKG5vZGUucGFyYSkgewogICAgICBtYXJnaW4gPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgICBsaW5lSGVpZ2h0ID0gbm9kZS5wYXJhLmxpbmVIZWlnaHQgPT09ICIiID8gbnVsbCA6IG5vZGUucGFyYS5saW5lSGVpZ2h0OwogICAgICBtYXJnaW4udG9wID0gbm9kZS5wYXJhLnNwYWNlQWJvdmUgPT09ICIiID8gMCA6IG5vZGUucGFyYS5zcGFjZUFib3ZlOwogICAgICBtYXJnaW4uYm90dG9tID0gbm9kZS5wYXJhLnNwYWNlQmVsb3cgPT09ICIiID8gMCA6IG5vZGUucGFyYS5zcGFjZUJlbG93OwogICAgICBtYXJnaW4ubGVmdCA9IG5vZGUucGFyYS5tYXJnaW5MZWZ0ID09PSAiIiA/IDAgOiBub2RlLnBhcmEubWFyZ2luTGVmdDsKICAgICAgbWFyZ2luLnJpZ2h0ID0gbm9kZS5wYXJhLm1hcmdpblJpZ2h0ID09PSAiIiA/IDAgOiBub2RlLnBhcmEubWFyZ2luUmlnaHQ7CiAgICB9CiAgICBsZXQgZm9udCA9IG5vZGUuZm9udDsKICAgIGlmICghZm9udCkgewogICAgICBjb25zdCByb290ID0gbm9kZVskZ2V0VGVtcGxhdGVSb290XSgpOwogICAgICBsZXQgcGFyZW50ID0gbm9kZVskZ2V0UGFyZW50XSgpOwogICAgICB3aGlsZSAocGFyZW50ICYmIHBhcmVudCAhPT0gcm9vdCkgewogICAgICAgIGlmIChwYXJlbnQuZm9udCkgewogICAgICAgICAgZm9udCA9IHBhcmVudC5mb250OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHBhcmVudCA9IHBhcmVudFskZ2V0UGFyZW50XSgpOwogICAgICB9CiAgICB9CiAgICBjb25zdCBtYXhXaWR0aCA9IChub2RlLncgfHwgYXZhaWxhYmxlU3BhY2Uud2lkdGgpIC0gbWFyZ2luSDsKICAgIGNvbnN0IGZvbnRGaW5kZXIgPSBub2RlWyRnbG9iYWxEYXRhXS5mb250RmluZGVyOwogICAgaWYgKG5vZGUudmFsdWUuZXhEYXRhICYmIG5vZGUudmFsdWUuZXhEYXRhWyRjb250ZW50XSAmJiBub2RlLnZhbHVlLmV4RGF0YS5jb250ZW50VHlwZSA9PT0gInRleHQvaHRtbCIpIHsKICAgICAgY29uc3QgcmVzID0gbGF5b3V0VGV4dChub2RlLnZhbHVlLmV4RGF0YVskY29udGVudF0sIGZvbnQsIG1hcmdpbiwgbGluZUhlaWdodCwgZm9udEZpbmRlciwgbWF4V2lkdGgpOwogICAgICB3aWR0aCA9IHJlcy53aWR0aDsKICAgICAgaGVpZ2h0ID0gcmVzLmhlaWdodDsKICAgICAgaXNCcm9rZW4gPSByZXMuaXNCcm9rZW47CiAgICB9IGVsc2UgewogICAgICBjb25zdCB0ZXh0ID0gbm9kZS52YWx1ZVskdGV4dF0oKTsKICAgICAgaWYgKHRleHQpIHsKICAgICAgICBjb25zdCByZXMgPSBsYXlvdXRUZXh0KHRleHQsIGZvbnQsIG1hcmdpbiwgbGluZUhlaWdodCwgZm9udEZpbmRlciwgbWF4V2lkdGgpOwogICAgICAgIHdpZHRoID0gcmVzLndpZHRoOwogICAgICAgIGhlaWdodCA9IHJlcy5oZWlnaHQ7CiAgICAgICAgaXNCcm9rZW4gPSByZXMuaXNCcm9rZW47CiAgICAgIH0KICAgIH0KICAgIGlmICh3aWR0aCAhPT0gbnVsbCAmJiAhbm9kZS53KSB7CiAgICAgIHdpZHRoICs9IG1hcmdpbkg7CiAgICB9CiAgICBpZiAoaGVpZ2h0ICE9PSBudWxsICYmICFub2RlLmgpIHsKICAgICAgaGVpZ2h0ICs9IG1hcmdpblY7CiAgICB9CiAgfQogIHJldHVybiB7CiAgICB3OiB3aWR0aCwKICAgIGg6IGhlaWdodCwKICAgIGlzQnJva2VuCiAgfTsKfQpmdW5jdGlvbiBjb21wdXRlQmJveChub2RlLCBodG1sLCBhdmFpbGFibGVTcGFjZSkgewogIGxldCBiYm94OwogIGlmIChub2RlLncgIT09ICIiICYmIG5vZGUuaCAhPT0gIiIpIHsKICAgIGJib3ggPSBbbm9kZS54LCBub2RlLnksIG5vZGUudywgbm9kZS5oXTsKICB9IGVsc2UgewogICAgaWYgKCFhdmFpbGFibGVTcGFjZSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGxldCB3aWR0aCA9IG5vZGUudzsKICAgIGlmICh3aWR0aCA9PT0gIiIpIHsKICAgICAgaWYgKG5vZGUubWF4VyA9PT0gMCkgewogICAgICAgIGNvbnN0IHBhcmVudCA9IG5vZGVbJGdldFN1YmZvcm1QYXJlbnRdKCk7CiAgICAgICAgd2lkdGggPSBwYXJlbnQubGF5b3V0ID09PSAicG9zaXRpb24iICYmIHBhcmVudC53ICE9PSAiIiA/IDAgOiBub2RlLm1pblc7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgd2lkdGggPSBNYXRoLm1pbihub2RlLm1heFcsIGF2YWlsYWJsZVNwYWNlLndpZHRoKTsKICAgICAgfQogICAgICBodG1sLmF0dHJpYnV0ZXMuc3R5bGUud2lkdGggPSBtZWFzdXJlVG9TdHJpbmcod2lkdGgpOwogICAgfQogICAgbGV0IGhlaWdodCA9IG5vZGUuaDsKICAgIGlmIChoZWlnaHQgPT09ICIiKSB7CiAgICAgIGlmIChub2RlLm1heEggPT09IDApIHsKICAgICAgICBjb25zdCBwYXJlbnQgPSBub2RlWyRnZXRTdWJmb3JtUGFyZW50XSgpOwogICAgICAgIGhlaWdodCA9IHBhcmVudC5sYXlvdXQgPT09ICJwb3NpdGlvbiIgJiYgcGFyZW50LmggIT09ICIiID8gMCA6IG5vZGUubWluSDsKICAgICAgfSBlbHNlIHsKICAgICAgICBoZWlnaHQgPSBNYXRoLm1pbihub2RlLm1heEgsIGF2YWlsYWJsZVNwYWNlLmhlaWdodCk7CiAgICAgIH0KICAgICAgaHRtbC5hdHRyaWJ1dGVzLnN0eWxlLmhlaWdodCA9IG1lYXN1cmVUb1N0cmluZyhoZWlnaHQpOwogICAgfQogICAgYmJveCA9IFtub2RlLngsIG5vZGUueSwgd2lkdGgsIGhlaWdodF07CiAgfQogIHJldHVybiBiYm94Owp9CmZ1bmN0aW9uIGZpeERpbWVuc2lvbnMobm9kZSkgewogIGNvbnN0IHBhcmVudCA9IG5vZGVbJGdldFN1YmZvcm1QYXJlbnRdKCk7CiAgaWYgKHBhcmVudC5sYXlvdXQ/LmluY2x1ZGVzKCJyb3ciKSkgewogICAgY29uc3QgZXh0cmEgPSBwYXJlbnRbJGV4dHJhXTsKICAgIGNvbnN0IGNvbFNwYW4gPSBub2RlLmNvbFNwYW47CiAgICBsZXQgd2lkdGg7CiAgICBpZiAoY29sU3BhbiA9PT0gLTEpIHsKICAgICAgd2lkdGggPSBNYXRoLnN1bVByZWNpc2UoZXh0cmEuY29sdW1uV2lkdGhzLnNsaWNlKGV4dHJhLmN1cnJlbnRDb2x1bW4pKTsKICAgIH0gZWxzZSB7CiAgICAgIHdpZHRoID0gTWF0aC5zdW1QcmVjaXNlKGV4dHJhLmNvbHVtbldpZHRocy5zbGljZShleHRyYS5jdXJyZW50Q29sdW1uLCBleHRyYS5jdXJyZW50Q29sdW1uICsgY29sU3BhbikpOwogICAgfQogICAgaWYgKCFpc05hTih3aWR0aCkpIHsKICAgICAgbm9kZS53ID0gd2lkdGg7CiAgICB9CiAgfQogIGlmIChwYXJlbnQubGF5b3V0ICYmIHBhcmVudC5sYXlvdXQgIT09ICJwb3NpdGlvbiIpIHsKICAgIG5vZGUueCA9IG5vZGUueSA9IDA7CiAgfQogIGlmIChub2RlLmxheW91dCA9PT0gInRhYmxlIikgewogICAgaWYgKG5vZGUudyA9PT0gIiIgJiYgQXJyYXkuaXNBcnJheShub2RlLmNvbHVtbldpZHRocykpIHsKICAgICAgbm9kZS53ID0gTWF0aC5zdW1QcmVjaXNlKG5vZGUuY29sdW1uV2lkdGhzKTsKICAgIH0KICB9Cn0KZnVuY3Rpb24gbGF5b3V0Q2xhc3Mobm9kZSkgewogIHN3aXRjaCAobm9kZS5sYXlvdXQpIHsKICAgIGNhc2UgInBvc2l0aW9uIjoKICAgICAgcmV0dXJuICJ4ZmFQb3NpdGlvbiI7CiAgICBjYXNlICJsci10YiI6CiAgICAgIHJldHVybiAieGZhTHJUYiI7CiAgICBjYXNlICJybC1yb3ciOgogICAgICByZXR1cm4gInhmYVJsUm93IjsKICAgIGNhc2UgInJsLXRiIjoKICAgICAgcmV0dXJuICJ4ZmFSbFRiIjsKICAgIGNhc2UgInJvdyI6CiAgICAgIHJldHVybiAieGZhUm93IjsKICAgIGNhc2UgInRhYmxlIjoKICAgICAgcmV0dXJuICJ4ZmFUYWJsZSI7CiAgICBjYXNlICJ0YiI6CiAgICAgIHJldHVybiAieGZhVGIiOwogICAgZGVmYXVsdDoKICAgICAgcmV0dXJuICJ4ZmFQb3NpdGlvbiI7CiAgfQp9CmZ1bmN0aW9uIHRvU3R5bGUobm9kZSwgLi4ubmFtZXMpIHsKICBjb25zdCBzdHlsZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgZm9yIChjb25zdCBuYW1lIG9mIG5hbWVzKSB7CiAgICBjb25zdCB2YWx1ZSA9IG5vZGVbbmFtZV07CiAgICBpZiAodmFsdWUgPT09IG51bGwpIHsKICAgICAgY29udGludWU7CiAgICB9CiAgICBpZiAoY29udmVydGVycy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgewogICAgICBjb252ZXJ0ZXJzW25hbWVdKG5vZGUsIHN0eWxlKTsKICAgICAgY29udGludWU7CiAgICB9CiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBYRkFPYmplY3QpIHsKICAgICAgY29uc3QgbmV3U3R5bGUgPSB2YWx1ZVskdG9TdHlsZV0oKTsKICAgICAgaWYgKG5ld1N0eWxlKSB7CiAgICAgICAgT2JqZWN0LmFzc2lnbihzdHlsZSwgbmV3U3R5bGUpOwogICAgICB9IGVsc2UgewogICAgICAgIHdhcm4oYChERUJVRykgLSBYRkEgLSBzdHlsZSBmb3IgJHtuYW1lfSBub3QgaW1wbGVtZW50ZWQgeWV0YCk7CiAgICAgIH0KICAgIH0KICB9CiAgcmV0dXJuIHN0eWxlOwp9CmZ1bmN0aW9uIGNyZWF0ZVdyYXBwZXIobm9kZSwgaHRtbCkgewogIGNvbnN0IHsKICAgIGF0dHJpYnV0ZXMKICB9ID0gaHRtbDsKICBjb25zdCB7CiAgICBzdHlsZQogIH0gPSBhdHRyaWJ1dGVzOwogIGNvbnN0IHdyYXBwZXIgPSB7CiAgICBuYW1lOiAiZGl2IiwKICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgY2xhc3M6IFsieGZhV3JhcHBlciJdLAogICAgICBzdHlsZTogT2JqZWN0LmNyZWF0ZShudWxsKQogICAgfSwKICAgIGNoaWxkcmVuOiBbXQogIH07CiAgYXR0cmlidXRlcy5jbGFzcy5wdXNoKCJ4ZmFXcmFwcGVkIik7CiAgaWYgKG5vZGUuYm9yZGVyKSB7CiAgICBjb25zdCB7CiAgICAgIHdpZHRocywKICAgICAgaW5zZXRzCiAgICB9ID0gbm9kZS5ib3JkZXJbJGV4dHJhXTsKICAgIGxldCB3aWR0aCwgaGVpZ2h0OwogICAgbGV0IHRvcCA9IGluc2V0c1swXTsKICAgIGxldCBsZWZ0ID0gaW5zZXRzWzNdOwogICAgY29uc3QgaW5zZXRzSCA9IGluc2V0c1swXSArIGluc2V0c1syXTsKICAgIGNvbnN0IGluc2V0c1cgPSBpbnNldHNbMV0gKyBpbnNldHNbM107CiAgICBzd2l0Y2ggKG5vZGUuYm9yZGVyLmhhbmQpIHsKICAgICAgY2FzZSAiZXZlbiI6CiAgICAgICAgdG9wIC09IHdpZHRoc1swXSAvIDI7CiAgICAgICAgbGVmdCAtPSB3aWR0aHNbM10gLyAyOwogICAgICAgIHdpZHRoID0gYGNhbGMoMTAwJSArICR7KHdpZHRoc1sxXSArIHdpZHRoc1szXSkgLyAyIC0gaW5zZXRzV31weClgOwogICAgICAgIGhlaWdodCA9IGBjYWxjKDEwMCUgKyAkeyh3aWR0aHNbMF0gKyB3aWR0aHNbMl0pIC8gMiAtIGluc2V0c0h9cHgpYDsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAibGVmdCI6CiAgICAgICAgdG9wIC09IHdpZHRoc1swXTsKICAgICAgICBsZWZ0IC09IHdpZHRoc1szXTsKICAgICAgICB3aWR0aCA9IGBjYWxjKDEwMCUgKyAke3dpZHRoc1sxXSArIHdpZHRoc1szXSAtIGluc2V0c1d9cHgpYDsKICAgICAgICBoZWlnaHQgPSBgY2FsYygxMDAlICsgJHt3aWR0aHNbMF0gKyB3aWR0aHNbMl0gLSBpbnNldHNIfXB4KWA7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgInJpZ2h0IjoKICAgICAgICB3aWR0aCA9IGluc2V0c1cgPyBgY2FsYygxMDAlIC0gJHtpbnNldHNXfXB4KWAgOiAiMTAwJSI7CiAgICAgICAgaGVpZ2h0ID0gaW5zZXRzSCA/IGBjYWxjKDEwMCUgLSAke2luc2V0c0h9cHgpYCA6ICIxMDAlIjsKICAgICAgICBicmVhazsKICAgIH0KICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBbInhmYUJvcmRlciJdOwogICAgaWYgKGlzUHJpbnRPbmx5KG5vZGUuYm9yZGVyKSkgewogICAgICBjbGFzc05hbWVzLnB1c2goInhmYVByaW50T25seSIpOwogICAgfQogICAgY29uc3QgYm9yZGVyID0gewogICAgICBuYW1lOiAiZGl2IiwKICAgICAgYXR0cmlidXRlczogewogICAgICAgIGNsYXNzOiBjbGFzc05hbWVzLAogICAgICAgIHN0eWxlOiB7CiAgICAgICAgICB0b3A6IGAke3RvcH1weGAsCiAgICAgICAgICBsZWZ0OiBgJHtsZWZ0fXB4YCwKICAgICAgICAgIHdpZHRoLAogICAgICAgICAgaGVpZ2h0CiAgICAgICAgfQogICAgICB9LAogICAgICBjaGlsZHJlbjogW10KICAgIH07CiAgICBmb3IgKGNvbnN0IGtleSBvZiBbImJvcmRlciIsICJib3JkZXJXaWR0aCIsICJib3JkZXJDb2xvciIsICJib3JkZXJSYWRpdXMiLCAiYm9yZGVyU3R5bGUiXSkgewogICAgICBpZiAoc3R5bGVba2V5XSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgYm9yZGVyLmF0dHJpYnV0ZXMuc3R5bGVba2V5XSA9IHN0eWxlW2tleV07CiAgICAgICAgZGVsZXRlIHN0eWxlW2tleV07CiAgICAgIH0KICAgIH0KICAgIHdyYXBwZXIuY2hpbGRyZW4ucHVzaChib3JkZXIsIGh0bWwpOwogIH0gZWxzZSB7CiAgICB3cmFwcGVyLmNoaWxkcmVuLnB1c2goaHRtbCk7CiAgfQogIGZvciAoY29uc3Qga2V5IG9mIFsiYmFja2dyb3VuZCIsICJiYWNrZ3JvdW5kQ2xpcCIsICJ0b3AiLCAibGVmdCIsICJ3aWR0aCIsICJoZWlnaHQiLCAibWluV2lkdGgiLCAibWluSGVpZ2h0IiwgIm1heFdpZHRoIiwgIm1heEhlaWdodCIsICJ0cmFuc2Zvcm0iLCAidHJhbnNmb3JtT3JpZ2luIiwgInZpc2liaWxpdHkiXSkgewogICAgaWYgKHN0eWxlW2tleV0gIT09IHVuZGVmaW5lZCkgewogICAgICB3cmFwcGVyLmF0dHJpYnV0ZXMuc3R5bGVba2V5XSA9IHN0eWxlW2tleV07CiAgICAgIGRlbGV0ZSBzdHlsZVtrZXldOwogICAgfQogIH0KICB3cmFwcGVyLmF0dHJpYnV0ZXMuc3R5bGUucG9zaXRpb24gPSBzdHlsZS5wb3NpdGlvbiA9PT0gImFic29sdXRlIiA/ICJhYnNvbHV0ZSIgOiAicmVsYXRpdmUiOwogIGRlbGV0ZSBzdHlsZS5wb3NpdGlvbjsKICBpZiAoc3R5bGUuYWxpZ25TZWxmKSB7CiAgICB3cmFwcGVyLmF0dHJpYnV0ZXMuc3R5bGUuYWxpZ25TZWxmID0gc3R5bGUuYWxpZ25TZWxmOwogICAgZGVsZXRlIHN0eWxlLmFsaWduU2VsZjsKICB9CiAgcmV0dXJuIHdyYXBwZXI7Cn0KZnVuY3Rpb24gZml4VGV4dEluZGVudChzdHlsZXMpIHsKICBjb25zdCBpbmRlbnQgPSBnZXRNZWFzdXJlbWVudChzdHlsZXMudGV4dEluZGVudCwgIjBweCIpOwogIGlmIChpbmRlbnQgPj0gMCkgewogICAgcmV0dXJuOwogIH0KICBjb25zdCBhbGlnbiA9IHN0eWxlcy50ZXh0QWxpZ24gPT09ICJyaWdodCIgPyAicmlnaHQiIDogImxlZnQiOwogIGNvbnN0IG5hbWUgPSAicGFkZGluZyIgKyAoYWxpZ24gPT09ICJsZWZ0IiA/ICJMZWZ0IiA6ICJSaWdodCIpOwogIGNvbnN0IHBhZGRpbmcgPSBnZXRNZWFzdXJlbWVudChzdHlsZXNbbmFtZV0sICIwcHgiKTsKICBzdHlsZXNbbmFtZV0gPSBgJHtwYWRkaW5nIC0gaW5kZW50fXB4YDsKfQpmdW5jdGlvbiBzZXRBY2Nlc3Mobm9kZSwgY2xhc3NOYW1lcykgewogIHN3aXRjaCAobm9kZS5hY2Nlc3MpIHsKICAgIGNhc2UgIm5vbkludGVyYWN0aXZlIjoKICAgICAgY2xhc3NOYW1lcy5wdXNoKCJ4ZmFOb25JbnRlcmFjdGl2ZSIpOwogICAgICBicmVhazsKICAgIGNhc2UgInJlYWRPbmx5IjoKICAgICAgY2xhc3NOYW1lcy5wdXNoKCJ4ZmFSZWFkT25seSIpOwogICAgICBicmVhazsKICAgIGNhc2UgInByb3RlY3RlZCI6CiAgICAgIGNsYXNzTmFtZXMucHVzaCgieGZhRGlzYWJsZWQiKTsKICAgICAgYnJlYWs7CiAgfQp9CmZ1bmN0aW9uIGlzUHJpbnRPbmx5KG5vZGUpIHsKICByZXR1cm4gbm9kZS5yZWxldmFudC5sZW5ndGggPiAwICYmICFub2RlLnJlbGV2YW50WzBdLmV4Y2x1ZGVkICYmIG5vZGUucmVsZXZhbnRbMF0udmlld25hbWUgPT09ICJwcmludCI7Cn0KZnVuY3Rpb24gZ2V0Q3VycmVudFBhcmEobm9kZSkgewogIGNvbnN0IHN0YWNrID0gbm9kZVskZ2V0VGVtcGxhdGVSb290XSgpWyRleHRyYV0ucGFyYVN0YWNrOwogIHJldHVybiBzdGFjay5sZW5ndGggPyBzdGFjay5hdCgtMSkgOiBudWxsOwp9CmZ1bmN0aW9uIHNldFBhcmEobm9kZSwgbm9kZVN0eWxlLCB2YWx1ZSkgewogIGlmICh2YWx1ZS5hdHRyaWJ1dGVzLmNsYXNzPy5pbmNsdWRlcygieGZhUmljaCIpKSB7CiAgICBpZiAobm9kZVN0eWxlKSB7CiAgICAgIGlmIChub2RlLmggPT09ICIiKSB7CiAgICAgICAgbm9kZVN0eWxlLmhlaWdodCA9ICJhdXRvIjsKICAgICAgfQogICAgICBpZiAobm9kZS53ID09PSAiIikgewogICAgICAgIG5vZGVTdHlsZS53aWR0aCA9ICJhdXRvIjsKICAgICAgfQogICAgfQogICAgY29uc3QgcGFyYSA9IGdldEN1cnJlbnRQYXJhKG5vZGUpOwogICAgaWYgKHBhcmEpIHsKICAgICAgY29uc3QgdmFsdWVTdHlsZSA9IHZhbHVlLmF0dHJpYnV0ZXMuc3R5bGU7CiAgICAgIHZhbHVlU3R5bGUuZGlzcGxheSA9ICJmbGV4IjsKICAgICAgdmFsdWVTdHlsZS5mbGV4RGlyZWN0aW9uID0gImNvbHVtbiI7CiAgICAgIHN3aXRjaCAocGFyYS52QWxpZ24pIHsKICAgICAgICBjYXNlICJ0b3AiOgogICAgICAgICAgdmFsdWVTdHlsZS5qdXN0aWZ5Q29udGVudCA9ICJzdGFydCI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJib3R0b20iOgogICAgICAgICAgdmFsdWVTdHlsZS5qdXN0aWZ5Q29udGVudCA9ICJlbmQiOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAibWlkZGxlIjoKICAgICAgICAgIHZhbHVlU3R5bGUuanVzdGlmeUNvbnRlbnQgPSAiY2VudGVyIjsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGNvbnN0IHBhcmFTdHlsZSA9IHBhcmFbJHRvU3R5bGVdKCk7CiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhwYXJhU3R5bGUpKSB7CiAgICAgICAgaWYgKCEoa2V5IGluIHZhbHVlU3R5bGUpKSB7CiAgICAgICAgICB2YWx1ZVN0eWxlW2tleV0gPSB2YWw7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQp9CmZ1bmN0aW9uIHNldEZvbnRGYW1pbHkoeGZhRm9udCwgbm9kZSwgZm9udEZpbmRlciwgc3R5bGUpIHsKICBpZiAoIWZvbnRGaW5kZXIpIHsKICAgIGRlbGV0ZSBzdHlsZS5mb250RmFtaWx5OwogICAgcmV0dXJuOwogIH0KICBjb25zdCBuYW1lID0gc3RyaXBRdW90ZXMoeGZhRm9udC50eXBlZmFjZSk7CiAgc3R5bGUuZm9udEZhbWlseSA9IGAiJHtuYW1lfSJgOwogIGNvbnN0IHR5cGVmYWNlID0gZm9udEZpbmRlci5maW5kKG5hbWUpOwogIGlmICh0eXBlZmFjZSkgewogICAgY29uc3QgewogICAgICBmb250RmFtaWx5CiAgICB9ID0gdHlwZWZhY2UucmVndWxhci5jc3NGb250SW5mbzsKICAgIGlmIChmb250RmFtaWx5ICE9PSBuYW1lKSB7CiAgICAgIHN0eWxlLmZvbnRGYW1pbHkgPSBgIiR7Zm9udEZhbWlseX0iYDsKICAgIH0KICAgIGNvbnN0IHBhcmEgPSBnZXRDdXJyZW50UGFyYShub2RlKTsKICAgIGlmIChwYXJhICYmIHBhcmEubGluZUhlaWdodCAhPT0gIiIpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHN0eWxlLmxpbmVIZWlnaHQpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgcGRmRm9udCA9IHNlbGVjdEZvbnQoeGZhRm9udCwgdHlwZWZhY2UpOwogICAgaWYgKHBkZkZvbnQpIHsKICAgICAgc3R5bGUubGluZUhlaWdodCA9IE1hdGgubWF4KDEuMiwgcGRmRm9udC5saW5lSGVpZ2h0KTsKICAgIH0KICB9Cn0KZnVuY3Rpb24gZml4VVJMKHN0cikgewogIGNvbnN0IGFic29sdXRlVXJsID0gY3JlYXRlVmFsaWRBYnNvbHV0ZVVybChzdHIsIG51bGwsIHsKICAgIGFkZERlZmF1bHRQcm90b2NvbDogdHJ1ZSwKICAgIHRyeUNvbnZlcnRFbmNvZGluZzogdHJ1ZQogIH0pOwogIHJldHVybiBhYnNvbHV0ZVVybCA/IGFic29sdXRlVXJsLmhyZWYgOiBudWxsOwp9Cgo7Ly8gLi9zcmMvY29yZS94ZmEvbGF5b3V0LmpzCgoKCmZ1bmN0aW9uIGNyZWF0ZUxpbmUobm9kZSwgY2hpbGRyZW4pIHsKICByZXR1cm4gewogICAgbmFtZTogImRpdiIsCiAgICBhdHRyaWJ1dGVzOiB7CiAgICAgIGNsYXNzOiBbbm9kZS5sYXlvdXQgPT09ICJsci10YiIgPyAieGZhTHIiIDogInhmYVJsIl0KICAgIH0sCiAgICBjaGlsZHJlbgogIH07Cn0KZnVuY3Rpb24gZmx1c2hIVE1MKG5vZGUpIHsKICBpZiAoIW5vZGVbJGV4dHJhXSkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIGNvbnN0IGF0dHJpYnV0ZXMgPSBub2RlWyRleHRyYV0uYXR0cmlidXRlczsKICBjb25zdCBodG1sID0gewogICAgbmFtZTogImRpdiIsCiAgICBhdHRyaWJ1dGVzLAogICAgY2hpbGRyZW46IG5vZGVbJGV4dHJhXS5jaGlsZHJlbgogIH07CiAgaWYgKG5vZGVbJGV4dHJhXS5mYWlsaW5nTm9kZSkgewogICAgY29uc3QgaHRtbEZyb21GYWlsaW5nID0gbm9kZVskZXh0cmFdLmZhaWxpbmdOb2RlWyRmbHVzaEhUTUxdKCk7CiAgICBpZiAoaHRtbEZyb21GYWlsaW5nKSB7CiAgICAgIGlmIChub2RlLmxheW91dC5lbmRzV2l0aCgiLXRiIikpIHsKICAgICAgICBodG1sLmNoaWxkcmVuLnB1c2goY3JlYXRlTGluZShub2RlLCBbaHRtbEZyb21GYWlsaW5nXSkpOwogICAgICB9IGVsc2UgewogICAgICAgIGh0bWwuY2hpbGRyZW4ucHVzaChodG1sRnJvbUZhaWxpbmcpOwogICAgICB9CiAgICB9CiAgfQogIGlmIChodG1sLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIHJldHVybiBodG1sOwp9CmZ1bmN0aW9uIGFkZEhUTUwobm9kZSwgaHRtbCwgYmJveCkgewogIGNvbnN0IGV4dHJhID0gbm9kZVskZXh0cmFdOwogIGNvbnN0IGF2YWlsYWJsZVNwYWNlID0gZXh0cmEuYXZhaWxhYmxlU3BhY2U7CiAgY29uc3QgW3gsIHksIHcsIGhdID0gYmJveDsKICBzd2l0Y2ggKG5vZGUubGF5b3V0KSB7CiAgICBjYXNlICJwb3NpdGlvbiI6CiAgICAgIHsKICAgICAgICBleHRyYS53aWR0aCA9IE1hdGgubWF4KGV4dHJhLndpZHRoLCB4ICsgdyk7CiAgICAgICAgZXh0cmEuaGVpZ2h0ID0gTWF0aC5tYXgoZXh0cmEuaGVpZ2h0LCB5ICsgaCk7CiAgICAgICAgZXh0cmEuY2hpbGRyZW4ucHVzaChodG1sKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgY2FzZSAibHItdGIiOgogICAgY2FzZSAicmwtdGIiOgogICAgICBpZiAoIWV4dHJhLmxpbmUgfHwgZXh0cmEuYXR0ZW1wdCA9PT0gMSkgewogICAgICAgIGV4dHJhLmxpbmUgPSBjcmVhdGVMaW5lKG5vZGUsIFtdKTsKICAgICAgICBleHRyYS5jaGlsZHJlbi5wdXNoKGV4dHJhLmxpbmUpOwogICAgICAgIGV4dHJhLm51bWJlckluTGluZSA9IDA7CiAgICAgIH0KICAgICAgZXh0cmEubnVtYmVySW5MaW5lICs9IDE7CiAgICAgIGV4dHJhLmxpbmUuY2hpbGRyZW4ucHVzaChodG1sKTsKICAgICAgaWYgKGV4dHJhLmF0dGVtcHQgPT09IDApIHsKICAgICAgICBleHRyYS5jdXJyZW50V2lkdGggKz0gdzsKICAgICAgICBleHRyYS5oZWlnaHQgPSBNYXRoLm1heChleHRyYS5oZWlnaHQsIGV4dHJhLnByZXZIZWlnaHQgKyBoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBleHRyYS5jdXJyZW50V2lkdGggPSB3OwogICAgICAgIGV4dHJhLnByZXZIZWlnaHQgPSBleHRyYS5oZWlnaHQ7CiAgICAgICAgZXh0cmEuaGVpZ2h0ICs9IGg7CiAgICAgICAgZXh0cmEuYXR0ZW1wdCA9IDA7CiAgICAgIH0KICAgICAgZXh0cmEud2lkdGggPSBNYXRoLm1heChleHRyYS53aWR0aCwgZXh0cmEuY3VycmVudFdpZHRoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlICJybC1yb3ciOgogICAgY2FzZSAicm93IjoKICAgICAgewogICAgICAgIGV4dHJhLmNoaWxkcmVuLnB1c2goaHRtbCk7CiAgICAgICAgZXh0cmEud2lkdGggKz0gdzsKICAgICAgICBleHRyYS5oZWlnaHQgPSBNYXRoLm1heChleHRyYS5oZWlnaHQsIGgpOwogICAgICAgIGNvbnN0IGhlaWdodCA9IG1lYXN1cmVUb1N0cmluZyhleHRyYS5oZWlnaHQpOwogICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgZXh0cmEuY2hpbGRyZW4pIHsKICAgICAgICAgIGNoaWxkLmF0dHJpYnV0ZXMuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0OwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgfQogICAgY2FzZSAidGFibGUiOgogICAgICB7CiAgICAgICAgZXh0cmEud2lkdGggPSBNYXRoQ2xhbXAodywgZXh0cmEud2lkdGgsIGF2YWlsYWJsZVNwYWNlLndpZHRoKTsKICAgICAgICBleHRyYS5oZWlnaHQgKz0gaDsKICAgICAgICBleHRyYS5jaGlsZHJlbi5wdXNoKGh0bWwpOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICBjYXNlICJ0YiI6CiAgICAgIHsKICAgICAgICBleHRyYS53aWR0aCA9IE1hdGhDbGFtcCh3LCBleHRyYS53aWR0aCwgYXZhaWxhYmxlU3BhY2Uud2lkdGgpOwogICAgICAgIGV4dHJhLmhlaWdodCArPSBoOwogICAgICAgIGV4dHJhLmNoaWxkcmVuLnB1c2goaHRtbCk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICB9Cn0KZnVuY3Rpb24gZ2V0QXZhaWxhYmxlU3BhY2Uobm9kZSkgewogIGNvbnN0IGF2YWlsYWJsZVNwYWNlID0gbm9kZVskZXh0cmFdLmF2YWlsYWJsZVNwYWNlOwogIGNvbnN0IG1hcmdpblYgPSBub2RlLm1hcmdpbiA/IG5vZGUubWFyZ2luLnRvcEluc2V0ICsgbm9kZS5tYXJnaW4uYm90dG9tSW5zZXQgOiAwOwogIGNvbnN0IG1hcmdpbkggPSBub2RlLm1hcmdpbiA/IG5vZGUubWFyZ2luLmxlZnRJbnNldCArIG5vZGUubWFyZ2luLnJpZ2h0SW5zZXQgOiAwOwogIHN3aXRjaCAobm9kZS5sYXlvdXQpIHsKICAgIGNhc2UgImxyLXRiIjoKICAgIGNhc2UgInJsLXRiIjoKICAgICAgaWYgKG5vZGVbJGV4dHJhXS5hdHRlbXB0ID09PSAwKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHdpZHRoOiBhdmFpbGFibGVTcGFjZS53aWR0aCAtIG1hcmdpbkggLSBub2RlWyRleHRyYV0uY3VycmVudFdpZHRoLAogICAgICAgICAgaGVpZ2h0OiBhdmFpbGFibGVTcGFjZS5oZWlnaHQgLSBtYXJnaW5WIC0gbm9kZVskZXh0cmFdLnByZXZIZWlnaHQKICAgICAgICB9OwogICAgICB9CiAgICAgIHJldHVybiB7CiAgICAgICAgd2lkdGg6IGF2YWlsYWJsZVNwYWNlLndpZHRoIC0gbWFyZ2luSCwKICAgICAgICBoZWlnaHQ6IGF2YWlsYWJsZVNwYWNlLmhlaWdodCAtIG1hcmdpblYgLSBub2RlWyRleHRyYV0uaGVpZ2h0CiAgICAgIH07CiAgICBjYXNlICJybC1yb3ciOgogICAgY2FzZSAicm93IjoKICAgICAgY29uc3Qgd2lkdGggPSBNYXRoLnN1bVByZWNpc2Uobm9kZVskZXh0cmFdLmNvbHVtbldpZHRocy5zbGljZShub2RlWyRleHRyYV0uY3VycmVudENvbHVtbikpOwogICAgICByZXR1cm4gewogICAgICAgIHdpZHRoLAogICAgICAgIGhlaWdodDogYXZhaWxhYmxlU3BhY2UuaGVpZ2h0IC0gbWFyZ2luSAogICAgICB9OwogICAgY2FzZSAidGFibGUiOgogICAgY2FzZSAidGIiOgogICAgICByZXR1cm4gewogICAgICAgIHdpZHRoOiBhdmFpbGFibGVTcGFjZS53aWR0aCAtIG1hcmdpbkgsCiAgICAgICAgaGVpZ2h0OiBhdmFpbGFibGVTcGFjZS5oZWlnaHQgLSBtYXJnaW5WIC0gbm9kZVskZXh0cmFdLmhlaWdodAogICAgICB9OwogICAgY2FzZSAicG9zaXRpb24iOgogICAgZGVmYXVsdDoKICAgICAgcmV0dXJuIGF2YWlsYWJsZVNwYWNlOwogIH0KfQpmdW5jdGlvbiBnZXRUcmFuc2Zvcm1lZEJCb3gobm9kZSkgewogIGxldCB3ID0gbm9kZS53ID09PSAiIiA/IE5hTiA6IG5vZGUudzsKICBsZXQgaCA9IG5vZGUuaCA9PT0gIiIgPyBOYU4gOiBub2RlLmg7CiAgbGV0IFtjZW50ZXJYLCBjZW50ZXJZXSA9IFswLCAwXTsKICBzd2l0Y2ggKG5vZGUuYW5jaG9yVHlwZSB8fCAiIikgewogICAgY2FzZSAiYm90dG9tQ2VudGVyIjoKICAgICAgW2NlbnRlclgsIGNlbnRlclldID0gW3cgLyAyLCBoXTsKICAgICAgYnJlYWs7CiAgICBjYXNlICJib3R0b21MZWZ0IjoKICAgICAgW2NlbnRlclgsIGNlbnRlclldID0gWzAsIGhdOwogICAgICBicmVhazsKICAgIGNhc2UgImJvdHRvbVJpZ2h0IjoKICAgICAgW2NlbnRlclgsIGNlbnRlclldID0gW3csIGhdOwogICAgICBicmVhazsKICAgIGNhc2UgIm1pZGRsZUNlbnRlciI6CiAgICAgIFtjZW50ZXJYLCBjZW50ZXJZXSA9IFt3IC8gMiwgaCAvIDJdOwogICAgICBicmVhazsKICAgIGNhc2UgIm1pZGRsZUxlZnQiOgogICAgICBbY2VudGVyWCwgY2VudGVyWV0gPSBbMCwgaCAvIDJdOwogICAgICBicmVhazsKICAgIGNhc2UgIm1pZGRsZVJpZ2h0IjoKICAgICAgW2NlbnRlclgsIGNlbnRlclldID0gW3csIGggLyAyXTsKICAgICAgYnJlYWs7CiAgICBjYXNlICJ0b3BDZW50ZXIiOgogICAgICBbY2VudGVyWCwgY2VudGVyWV0gPSBbdyAvIDIsIDBdOwogICAgICBicmVhazsKICAgIGNhc2UgInRvcFJpZ2h0IjoKICAgICAgW2NlbnRlclgsIGNlbnRlclldID0gW3csIDBdOwogICAgICBicmVhazsKICB9CiAgbGV0IHgsIHk7CiAgc3dpdGNoIChub2RlLnJvdGF0ZSB8fCAwKSB7CiAgICBjYXNlIDA6CiAgICAgIFt4LCB5XSA9IFstY2VudGVyWCwgLWNlbnRlclldOwogICAgICBicmVhazsKICAgIGNhc2UgOTA6CiAgICAgIFt4LCB5XSA9IFstY2VudGVyWSwgY2VudGVyWF07CiAgICAgIFt3LCBoXSA9IFtoLCAtd107CiAgICAgIGJyZWFrOwogICAgY2FzZSAxODA6CiAgICAgIFt4LCB5XSA9IFtjZW50ZXJYLCBjZW50ZXJZXTsKICAgICAgW3csIGhdID0gWy13LCAtaF07CiAgICAgIGJyZWFrOwogICAgY2FzZSAyNzA6CiAgICAgIFt4LCB5XSA9IFtjZW50ZXJZLCAtY2VudGVyWF07CiAgICAgIFt3LCBoXSA9IFstaCwgd107CiAgICAgIGJyZWFrOwogIH0KICByZXR1cm4gW25vZGUueCArIHggKyBNYXRoLm1pbigwLCB3KSwgbm9kZS55ICsgeSArIE1hdGgubWluKDAsIGgpLCBNYXRoLmFicyh3KSwgTWF0aC5hYnMoaCldOwp9CmZ1bmN0aW9uIGNoZWNrRGltZW5zaW9ucyhub2RlLCBzcGFjZSkgewogIGlmIChub2RlWyRnZXRUZW1wbGF0ZVJvb3RdKClbJGV4dHJhXS5maXJzdFVuc3BsaXR0YWJsZSA9PT0gbnVsbCkgewogICAgcmV0dXJuIHRydWU7CiAgfQogIGlmIChub2RlLncgPT09IDAgfHwgbm9kZS5oID09PSAwKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgY29uc3QgRVJST1IgPSAyOwogIGNvbnN0IHBhcmVudCA9IG5vZGVbJGdldFN1YmZvcm1QYXJlbnRdKCk7CiAgY29uc3QgYXR0ZW1wdCA9IHBhcmVudFskZXh0cmFdPy5hdHRlbXB0IHx8IDA7CiAgY29uc3QgWywgeSwgdywgaF0gPSBnZXRUcmFuc2Zvcm1lZEJCb3gobm9kZSk7CiAgc3dpdGNoIChwYXJlbnQubGF5b3V0KSB7CiAgICBjYXNlICJsci10YiI6CiAgICBjYXNlICJybC10YiI6CiAgICAgIGlmIChhdHRlbXB0ID09PSAwKSB7CiAgICAgICAgaWYgKCFub2RlWyRnZXRUZW1wbGF0ZVJvb3RdKClbJGV4dHJhXS5ub0xheW91dEZhaWx1cmUpIHsKICAgICAgICAgIGlmIChub2RlLmggIT09ICIiICYmIE1hdGgucm91bmQoaCAtIHNwYWNlLmhlaWdodCkgPiBFUlJPUikgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAobm9kZS53ICE9PSAiIikgewogICAgICAgICAgICBpZiAoTWF0aC5yb3VuZCh3IC0gc3BhY2Uud2lkdGgpIDw9IEVSUk9SKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHBhcmVudFskZXh0cmFdLm51bWJlckluTGluZSA9PT0gMCkgewogICAgICAgICAgICAgIHJldHVybiBzcGFjZS5oZWlnaHQgPiBFUlJPUjsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gc3BhY2Uud2lkdGggPiBFUlJPUjsKICAgICAgICB9CiAgICAgICAgaWYgKG5vZGUudyAhPT0gIiIpIHsKICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHcgLSBzcGFjZS53aWR0aCkgPD0gRVJST1I7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzcGFjZS53aWR0aCA+IEVSUk9SOwogICAgICB9CiAgICAgIGlmIChub2RlWyRnZXRUZW1wbGF0ZVJvb3RdKClbJGV4dHJhXS5ub0xheW91dEZhaWx1cmUpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBpZiAobm9kZS5oICE9PSAiIiAmJiBNYXRoLnJvdW5kKGggLSBzcGFjZS5oZWlnaHQpID4gRVJST1IpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgaWYgKG5vZGUudyA9PT0gIiIgfHwgTWF0aC5yb3VuZCh3IC0gc3BhY2Uud2lkdGgpIDw9IEVSUk9SKSB7CiAgICAgICAgcmV0dXJuIHNwYWNlLmhlaWdodCA+IEVSUk9SOwogICAgICB9CiAgICAgIGlmIChwYXJlbnRbJGlzVGhlcmVNb3JlV2lkdGhdKCkpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIHNwYWNlLmhlaWdodCA+IEVSUk9SOwogICAgY2FzZSAidGFibGUiOgogICAgY2FzZSAidGIiOgogICAgICBpZiAobm9kZVskZ2V0VGVtcGxhdGVSb290XSgpWyRleHRyYV0ubm9MYXlvdXRGYWlsdXJlKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgaWYgKG5vZGUuaCAhPT0gIiIgJiYgIW5vZGVbJGlzU3BsaXR0YWJsZV0oKSkgewogICAgICAgIHJldHVybiBNYXRoLnJvdW5kKGggLSBzcGFjZS5oZWlnaHQpIDw9IEVSUk9SOwogICAgICB9CiAgICAgIGlmIChub2RlLncgPT09ICIiIHx8IE1hdGgucm91bmQodyAtIHNwYWNlLndpZHRoKSA8PSBFUlJPUikgewogICAgICAgIHJldHVybiBzcGFjZS5oZWlnaHQgPiBFUlJPUjsKICAgICAgfQogICAgICBpZiAocGFyZW50WyRpc1RoZXJlTW9yZVdpZHRoXSgpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiBzcGFjZS5oZWlnaHQgPiBFUlJPUjsKICAgIGNhc2UgInBvc2l0aW9uIjoKICAgICAgaWYgKG5vZGVbJGdldFRlbXBsYXRlUm9vdF0oKVskZXh0cmFdLm5vTGF5b3V0RmFpbHVyZSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGlmIChub2RlLmggPT09ICIiIHx8IE1hdGgucm91bmQoaCArIHkgLSBzcGFjZS5oZWlnaHQpIDw9IEVSUk9SKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgY29uc3QgYXJlYSA9IG5vZGVbJGdldFRlbXBsYXRlUm9vdF0oKVskZXh0cmFdLmN1cnJlbnRDb250ZW50QXJlYTsKICAgICAgcmV0dXJuIGggKyB5ID4gYXJlYS5oOwogICAgY2FzZSAicmwtcm93IjoKICAgIGNhc2UgInJvdyI6CiAgICAgIGlmIChub2RlWyRnZXRUZW1wbGF0ZVJvb3RdKClbJGV4dHJhXS5ub0xheW91dEZhaWx1cmUpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBpZiAobm9kZS5oICE9PSAiIikgewogICAgICAgIHJldHVybiBNYXRoLnJvdW5kKGggLSBzcGFjZS5oZWlnaHQpIDw9IEVSUk9SOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgZGVmYXVsdDoKICAgICAgcmV0dXJuIHRydWU7CiAgfQp9Cgo7Ly8gLi9zcmMvY29yZS94ZmEvdGVtcGxhdGUuanMKCgoKCgoKCgoKCmNvbnN0IFRFTVBMQVRFX05TX0lEID0gTmFtZXNwYWNlSWRzLnRlbXBsYXRlLmlkOwpjb25zdCBTVkdfTlMgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciOwpjb25zdCBNQVhfQVRURU1QVFNfRk9SX0xSVEJfTEFZT1VUID0gMjsKY29uc3QgTUFYX0VNUFRZX1BBR0VTID0gMzsKY29uc3QgREVGQVVMVF9UQUJfSU5ERVggPSA1MDAwOwpjb25zdCBIRUFESU5HX1BBVFRFUk4gPSAvXkgoXGQrKSQvOwpjb25zdCBNSU1FUyA9IG5ldyBTZXQoWyJpbWFnZS9naWYiLCAiaW1hZ2UvanBlZyIsICJpbWFnZS9qcGciLCAiaW1hZ2UvcGpwZWciLCAiaW1hZ2UvcG5nIiwgImltYWdlL2FwbmciLCAiaW1hZ2UveC1wbmciLCAiaW1hZ2UvYm1wIiwgImltYWdlL3gtbXMtYm1wIiwgImltYWdlL3RpZmYiLCAiaW1hZ2UvdGlmIiwgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSJdKTsKY29uc3QgSU1BR0VTX0hFQURFUlMgPSBbW1sweDQyLCAweDRkXSwgImltYWdlL2JtcCJdLCBbWzB4ZmYsIDB4ZDgsIDB4ZmZdLCAiaW1hZ2UvanBlZyJdLCBbWzB4NDksIDB4NDksIDB4MmEsIDB4MDBdLCAiaW1hZ2UvdGlmZiJdLCBbWzB4NGQsIDB4NGQsIDB4MDAsIDB4MmFdLCAiaW1hZ2UvdGlmZiJdLCBbWzB4NDcsIDB4NDksIDB4NDYsIDB4MzgsIDB4MzksIDB4NjFdLCAiaW1hZ2UvZ2lmIl0sIFtbMHg4OSwgMHg1MCwgMHg0ZSwgMHg0NywgMHgwZCwgMHgwYSwgMHgxYSwgMHgwYV0sICJpbWFnZS9wbmciXV07CmZ1bmN0aW9uIGdldEJvcmRlckRpbXMobm9kZSkgewogIGlmICghbm9kZSB8fCAhbm9kZS5ib3JkZXIpIHsKICAgIHJldHVybiB7CiAgICAgIHc6IDAsCiAgICAgIGg6IDAKICAgIH07CiAgfQogIGNvbnN0IGJvcmRlckV4dHJhID0gbm9kZS5ib3JkZXJbJGdldEV4dHJhXSgpOwogIGlmICghYm9yZGVyRXh0cmEpIHsKICAgIHJldHVybiB7CiAgICAgIHc6IDAsCiAgICAgIGg6IDAKICAgIH07CiAgfQogIHJldHVybiB7CiAgICB3OiBib3JkZXJFeHRyYS53aWR0aHNbMF0gKyBib3JkZXJFeHRyYS53aWR0aHNbMl0gKyBib3JkZXJFeHRyYS5pbnNldHNbMF0gKyBib3JkZXJFeHRyYS5pbnNldHNbMl0sCiAgICBoOiBib3JkZXJFeHRyYS53aWR0aHNbMV0gKyBib3JkZXJFeHRyYS53aWR0aHNbM10gKyBib3JkZXJFeHRyYS5pbnNldHNbMV0gKyBib3JkZXJFeHRyYS5pbnNldHNbM10KICB9Owp9CmZ1bmN0aW9uIGhhc01hcmdpbihub2RlKSB7CiAgcmV0dXJuIG5vZGUubWFyZ2luICYmIChub2RlLm1hcmdpbi50b3BJbnNldCB8fCBub2RlLm1hcmdpbi5yaWdodEluc2V0IHx8IG5vZGUubWFyZ2luLmJvdHRvbUluc2V0IHx8IG5vZGUubWFyZ2luLmxlZnRJbnNldCk7Cn0KZnVuY3Rpb24gX3NldFZhbHVlKHRlbXBsYXRlTm9kZSwgdmFsdWUpIHsKICBpZiAoIXRlbXBsYXRlTm9kZS52YWx1ZSkgewogICAgY29uc3Qgbm9kZVZhbHVlID0gbmV3IFZhbHVlKHt9KTsKICAgIHRlbXBsYXRlTm9kZVskYXBwZW5kQ2hpbGRdKG5vZGVWYWx1ZSk7CiAgICB0ZW1wbGF0ZU5vZGUudmFsdWUgPSBub2RlVmFsdWU7CiAgfQogIHRlbXBsYXRlTm9kZS52YWx1ZVskc2V0VmFsdWVdKHZhbHVlKTsKfQpmdW5jdGlvbiogZ2V0Q29udGFpbmVkQ2hpbGRyZW4obm9kZSkgewogIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZVskZ2V0Q2hpbGRyZW5dKCkpIHsKICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIFN1YmZvcm1TZXQpIHsKICAgICAgeWllbGQqIGNoaWxkWyRnZXRDb250YWluZWRDaGlsZHJlbl0oKTsKICAgICAgY29udGludWU7CiAgICB9CiAgICB5aWVsZCBjaGlsZDsKICB9Cn0KZnVuY3Rpb24gaXNSZXF1aXJlZChub2RlKSB7CiAgcmV0dXJuIG5vZGUudmFsaWRhdGU/Lm51bGxUZXN0ID09PSAiZXJyb3IiOwp9CmZ1bmN0aW9uIHNldFRhYkluZGV4KG5vZGUpIHsKICB3aGlsZSAobm9kZSkgewogICAgaWYgKCFub2RlLnRyYXZlcnNhbCkgewogICAgICBub2RlWyR0YWJJbmRleF0gPSBub2RlWyRnZXRQYXJlbnRdKClbJHRhYkluZGV4XTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKG5vZGVbJHRhYkluZGV4XSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBsZXQgbmV4dCA9IG51bGw7CiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUudHJhdmVyc2FsWyRnZXRDaGlsZHJlbl0oKSkgewogICAgICBpZiAoY2hpbGQub3BlcmF0aW9uID09PSAibmV4dCIpIHsKICAgICAgICBuZXh0ID0gY2hpbGQ7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGlmICghbmV4dCB8fCAhbmV4dC5yZWYpIHsKICAgICAgbm9kZVskdGFiSW5kZXhdID0gbm9kZVskZ2V0UGFyZW50XSgpWyR0YWJJbmRleF07CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHJvb3QgPSBub2RlWyRnZXRUZW1wbGF0ZVJvb3RdKCk7CiAgICBub2RlWyR0YWJJbmRleF0gPSArK3Jvb3RbJHRhYkluZGV4XTsKICAgIGNvbnN0IHJlZiA9IHJvb3RbJHNlYXJjaE5vZGVdKG5leHQucmVmLCBub2RlKTsKICAgIGlmICghcmVmKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIG5vZGUgPSByZWZbMF07CiAgfQp9CmZ1bmN0aW9uIGFwcGx5QXNzaXN0KG9iaiwgYXR0cmlidXRlcykgewogIGNvbnN0IGFzc2lzdCA9IG9iai5hc3Npc3Q7CiAgaWYgKGFzc2lzdCkgewogICAgY29uc3QgYXNzaXN0VGl0bGUgPSBhc3Npc3RbJHRvSFRNTF0oKTsKICAgIGlmIChhc3Npc3RUaXRsZSkgewogICAgICBhdHRyaWJ1dGVzLnRpdGxlID0gYXNzaXN0VGl0bGU7CiAgICB9CiAgICBjb25zdCByb2xlID0gYXNzaXN0LnJvbGU7CiAgICBjb25zdCBtYXRjaCA9IHJvbGUubWF0Y2goSEVBRElOR19QQVRURVJOKTsKICAgIGlmIChtYXRjaCkgewogICAgICBjb25zdCBhcmlhUm9sZSA9ICJoZWFkaW5nIjsKICAgICAgY29uc3QgYXJpYUxldmVsID0gbWF0Y2hbMV07CiAgICAgIGF0dHJpYnV0ZXMucm9sZSA9IGFyaWFSb2xlOwogICAgICBhdHRyaWJ1dGVzWyJhcmlhLWxldmVsIl0gPSBhcmlhTGV2ZWw7CiAgICB9CiAgfQogIGlmIChvYmoubGF5b3V0ID09PSAidGFibGUiKSB7CiAgICBhdHRyaWJ1dGVzLnJvbGUgPSAidGFibGUiOwogIH0gZWxzZSBpZiAob2JqLmxheW91dCA9PT0gInJvdyIpIHsKICAgIGF0dHJpYnV0ZXMucm9sZSA9ICJyb3ciOwogIH0gZWxzZSB7CiAgICBjb25zdCBwYXJlbnQgPSBvYmpbJGdldFBhcmVudF0oKTsKICAgIGlmIChwYXJlbnQubGF5b3V0ID09PSAicm93IikgewogICAgICBhdHRyaWJ1dGVzLnJvbGUgPSBwYXJlbnQuYXNzaXN0Py5yb2xlID09PSAiVEgiID8gImNvbHVtbmhlYWRlciIgOiAiY2VsbCI7CiAgICB9CiAgfQp9CmZ1bmN0aW9uIGFyaWFMYWJlbChvYmopIHsKICBpZiAoIW9iai5hc3Npc3QpIHsKICAgIHJldHVybiBudWxsOwogIH0KICBjb25zdCBhc3Npc3QgPSBvYmouYXNzaXN0OwogIGlmIChhc3Npc3Quc3BlYWsgJiYgYXNzaXN0LnNwZWFrWyRjb250ZW50XSAhPT0gIiIpIHsKICAgIHJldHVybiBhc3Npc3Quc3BlYWtbJGNvbnRlbnRdOwogIH0KICBpZiAoYXNzaXN0LnRvb2xUaXApIHsKICAgIHJldHVybiBhc3Npc3QudG9vbFRpcFskY29udGVudF07CiAgfQogIHJldHVybiBudWxsOwp9CmZ1bmN0aW9uIHZhbHVlVG9IdG1sKHZhbHVlKSB7CiAgcmV0dXJuIEhUTUxSZXN1bHQuc3VjY2Vzcyh7CiAgICBuYW1lOiAiZGl2IiwKICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgY2xhc3M6IFsieGZhUmljaCJdLAogICAgICBzdHlsZTogT2JqZWN0LmNyZWF0ZShudWxsKQogICAgfSwKICAgIGNoaWxkcmVuOiBbewogICAgICBuYW1lOiAic3BhbiIsCiAgICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICBzdHlsZTogT2JqZWN0LmNyZWF0ZShudWxsKQogICAgICB9LAogICAgICB2YWx1ZQogICAgfV0KICB9KTsKfQpmdW5jdGlvbiBzZXRGaXJzdFVuc3BsaXR0YWJsZShub2RlKSB7CiAgY29uc3Qgcm9vdCA9IG5vZGVbJGdldFRlbXBsYXRlUm9vdF0oKTsKICBpZiAocm9vdFskZXh0cmFdLmZpcnN0VW5zcGxpdHRhYmxlID09PSBudWxsKSB7CiAgICByb290WyRleHRyYV0uZmlyc3RVbnNwbGl0dGFibGUgPSBub2RlOwogICAgcm9vdFskZXh0cmFdLm5vTGF5b3V0RmFpbHVyZSA9IHRydWU7CiAgfQp9CmZ1bmN0aW9uIHVuc2V0Rmlyc3RVbnNwbGl0dGFibGUobm9kZSkgewogIGNvbnN0IHJvb3QgPSBub2RlWyRnZXRUZW1wbGF0ZVJvb3RdKCk7CiAgaWYgKHJvb3RbJGV4dHJhXS5maXJzdFVuc3BsaXR0YWJsZSA9PT0gbm9kZSkgewogICAgcm9vdFskZXh0cmFdLm5vTGF5b3V0RmFpbHVyZSA9IGZhbHNlOwogIH0KfQpmdW5jdGlvbiBoYW5kbGVCcmVhayhub2RlKSB7CiAgaWYgKG5vZGVbJGV4dHJhXSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICBub2RlWyRleHRyYV0gPSBPYmplY3QuY3JlYXRlKG51bGwpOwogIGlmIChub2RlLnRhcmdldFR5cGUgPT09ICJhdXRvIikgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICBjb25zdCByb290ID0gbm9kZVskZ2V0VGVtcGxhdGVSb290XSgpOwogIGxldCB0YXJnZXQgPSBudWxsOwogIGlmIChub2RlLnRhcmdldCkgewogICAgdGFyZ2V0ID0gcm9vdFskc2VhcmNoTm9kZV0obm9kZS50YXJnZXQsIG5vZGVbJGdldFBhcmVudF0oKSk7CiAgICBpZiAoIXRhcmdldCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICB0YXJnZXQgPSB0YXJnZXRbMF07CiAgfQogIGNvbnN0IHsKICAgIGN1cnJlbnRQYWdlQXJlYSwKICAgIGN1cnJlbnRDb250ZW50QXJlYQogIH0gPSByb290WyRleHRyYV07CiAgaWYgKG5vZGUudGFyZ2V0VHlwZSA9PT0gInBhZ2VBcmVhIikgewogICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgUGFnZUFyZWEpKSB7CiAgICAgIHRhcmdldCA9IG51bGw7CiAgICB9CiAgICBpZiAobm9kZS5zdGFydE5ldykgewogICAgICBub2RlWyRleHRyYV0udGFyZ2V0ID0gdGFyZ2V0IHx8IGN1cnJlbnRQYWdlQXJlYTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgaWYgKHRhcmdldCAmJiB0YXJnZXQgIT09IGN1cnJlbnRQYWdlQXJlYSkgewogICAgICBub2RlWyRleHRyYV0udGFyZ2V0ID0gdGFyZ2V0OwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CiAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgQ29udGVudEFyZWEpKSB7CiAgICB0YXJnZXQgPSBudWxsOwogIH0KICBjb25zdCBwYWdlQXJlYSA9IHRhcmdldCAmJiB0YXJnZXRbJGdldFBhcmVudF0oKTsKICBsZXQgaW5kZXg7CiAgbGV0IG5leHRQYWdlQXJlYSA9IHBhZ2VBcmVhOwogIGlmIChub2RlLnN0YXJ0TmV3KSB7CiAgICBpZiAodGFyZ2V0KSB7CiAgICAgIGNvbnN0IGNvbnRlbnRBcmVhcyA9IHBhZ2VBcmVhLmNvbnRlbnRBcmVhLmNoaWxkcmVuOwogICAgICBjb25zdCBpbmRleEZvckN1cnJlbnQgPSBjb250ZW50QXJlYXMuaW5kZXhPZihjdXJyZW50Q29udGVudEFyZWEpOwogICAgICBjb25zdCBpbmRleEZvclRhcmdldCA9IGNvbnRlbnRBcmVhcy5pbmRleE9mKHRhcmdldCk7CiAgICAgIGlmIChpbmRleEZvckN1cnJlbnQgIT09IC0xICYmIGluZGV4Rm9yQ3VycmVudCA8IGluZGV4Rm9yVGFyZ2V0KSB7CiAgICAgICAgbmV4dFBhZ2VBcmVhID0gbnVsbDsKICAgICAgfQogICAgICBpbmRleCA9IGluZGV4Rm9yVGFyZ2V0IC0gMTsKICAgIH0gZWxzZSB7CiAgICAgIGluZGV4ID0gY3VycmVudFBhZ2VBcmVhLmNvbnRlbnRBcmVhLmNoaWxkcmVuLmluZGV4T2YoY3VycmVudENvbnRlbnRBcmVhKTsKICAgIH0KICB9IGVsc2UgaWYgKHRhcmdldCAmJiB0YXJnZXQgIT09IGN1cnJlbnRDb250ZW50QXJlYSkgewogICAgY29uc3QgY29udGVudEFyZWFzID0gcGFnZUFyZWEuY29udGVudEFyZWEuY2hpbGRyZW47CiAgICBpbmRleCA9IGNvbnRlbnRBcmVhcy5pbmRleE9mKHRhcmdldCkgLSAxOwogICAgbmV4dFBhZ2VBcmVhID0gcGFnZUFyZWEgPT09IGN1cnJlbnRQYWdlQXJlYSA/IG51bGwgOiBwYWdlQXJlYTsKICB9IGVsc2UgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICBub2RlWyRleHRyYV0udGFyZ2V0ID0gbmV4dFBhZ2VBcmVhOwogIG5vZGVbJGV4dHJhXS5pbmRleCA9IGluZGV4OwogIHJldHVybiB0cnVlOwp9CmZ1bmN0aW9uIGhhbmRsZU92ZXJmbG93KG5vZGUsIGV4dHJhTm9kZSwgc3BhY2UpIHsKICBjb25zdCByb290ID0gbm9kZVskZ2V0VGVtcGxhdGVSb290XSgpOwogIGNvbnN0IHNhdmVkID0gcm9vdFskZXh0cmFdLm5vTGF5b3V0RmFpbHVyZTsKICBjb25zdCBzYXZlZE1ldGhvZCA9IGV4dHJhTm9kZVskZ2V0U3ViZm9ybVBhcmVudF07CiAgZXh0cmFOb2RlWyRnZXRTdWJmb3JtUGFyZW50XSA9ICgpID0+IG5vZGU7CiAgcm9vdFskZXh0cmFdLm5vTGF5b3V0RmFpbHVyZSA9IHRydWU7CiAgY29uc3QgcmVzID0gZXh0cmFOb2RlWyR0b0hUTUxdKHNwYWNlKTsKICBub2RlWyRhZGRIVE1MXShyZXMuaHRtbCwgcmVzLmJib3gpOwogIHJvb3RbJGV4dHJhXS5ub0xheW91dEZhaWx1cmUgPSBzYXZlZDsKICBleHRyYU5vZGVbJGdldFN1YmZvcm1QYXJlbnRdID0gc2F2ZWRNZXRob2Q7Cn0KY2xhc3MgQXBwZWFyYW5jZUZpbHRlciBleHRlbmRzIFN0cmluZ09iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJhcHBlYXJhbmNlRmlsdGVyIik7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMudHlwZSA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLnR5cGUsIFsib3B0aW9uYWwiLCAicmVxdWlyZWQiXSk7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogIH0KfQpjbGFzcyBBcmMgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCAiYXJjIiwgdHJ1ZSk7CiAgICB0aGlzLmNpcmN1bGFyID0gZ2V0SW50ZWdlcih7CiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuY2lyY3VsYXIsCiAgICAgIGRlZmF1bHRWYWx1ZTogMCwKICAgICAgdmFsaWRhdGU6IHggPT4geCA9PT0gMQogICAgfSk7CiAgICB0aGlzLmhhbmQgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5oYW5kLCBbImV2ZW4iLCAibGVmdCIsICJyaWdodCJdKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy5zdGFydEFuZ2xlID0gZ2V0RmxvYXQoewogICAgICBkYXRhOiBhdHRyaWJ1dGVzLnN0YXJ0QW5nbGUsCiAgICAgIGRlZmF1bHRWYWx1ZTogMCwKICAgICAgdmFsaWRhdGU6IHggPT4gdHJ1ZQogICAgfSk7CiAgICB0aGlzLnN3ZWVwQW5nbGUgPSBnZXRGbG9hdCh7CiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuc3dlZXBBbmdsZSwKICAgICAgZGVmYXVsdFZhbHVlOiAzNjAsCiAgICAgIHZhbGlkYXRlOiB4ID0+IHRydWUKICAgIH0pOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICAgIHRoaXMuZWRnZSA9IG51bGw7CiAgICB0aGlzLmZpbGwgPSBudWxsOwogIH0KICBbJHRvSFRNTF0oKSB7CiAgICBjb25zdCBlZGdlID0gdGhpcy5lZGdlIHx8IG5ldyBFZGdlKHt9KTsKICAgIGNvbnN0IGVkZ2VTdHlsZSA9IGVkZ2VbJHRvU3R5bGVdKCk7CiAgICBjb25zdCBzdHlsZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICBpZiAodGhpcy5maWxsPy5wcmVzZW5jZSA9PT0gInZpc2libGUiKSB7CiAgICAgIE9iamVjdC5hc3NpZ24oc3R5bGUsIHRoaXMuZmlsbFskdG9TdHlsZV0oKSk7CiAgICB9IGVsc2UgewogICAgICBzdHlsZS5maWxsID0gInRyYW5zcGFyZW50IjsKICAgIH0KICAgIHN0eWxlLnN0cm9rZVdpZHRoID0gbWVhc3VyZVRvU3RyaW5nKGVkZ2UucHJlc2VuY2UgPT09ICJ2aXNpYmxlIiA/IGVkZ2UudGhpY2tuZXNzIDogMCk7CiAgICBzdHlsZS5zdHJva2UgPSBlZGdlU3R5bGUuY29sb3I7CiAgICBsZXQgYXJjOwogICAgY29uc3QgYXR0cmlidXRlcyA9IHsKICAgICAgeG1sbnM6IFNWR19OUywKICAgICAgc3R5bGU6IHsKICAgICAgICB3aWR0aDogIjEwMCUiLAogICAgICAgIGhlaWdodDogIjEwMCUiLAogICAgICAgIG92ZXJmbG93OiAidmlzaWJsZSIKICAgICAgfQogICAgfTsKICAgIGlmICh0aGlzLnN3ZWVwQW5nbGUgPT09IDM2MCkgewogICAgICBhcmMgPSB7CiAgICAgICAgbmFtZTogImVsbGlwc2UiLAogICAgICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICAgIHhtbG5zOiBTVkdfTlMsCiAgICAgICAgICBjeDogIjUwJSIsCiAgICAgICAgICBjeTogIjUwJSIsCiAgICAgICAgICByeDogIjUwJSIsCiAgICAgICAgICByeTogIjUwJSIsCiAgICAgICAgICBzdHlsZQogICAgICAgIH0KICAgICAgfTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0IHN0YXJ0QW5nbGUgPSB0aGlzLnN0YXJ0QW5nbGUgKiBNYXRoLlBJIC8gMTgwOwogICAgICBjb25zdCBzd2VlcEFuZ2xlID0gdGhpcy5zd2VlcEFuZ2xlICogTWF0aC5QSSAvIDE4MDsKICAgICAgY29uc3QgbGFyZ2VBcmMgPSB0aGlzLnN3ZWVwQW5nbGUgPiAxODAgPyAxIDogMDsKICAgICAgY29uc3QgW3gxLCB5MSwgeDIsIHkyXSA9IFs1MCAqICgxICsgTWF0aC5jb3Moc3RhcnRBbmdsZSkpLCA1MCAqICgxIC0gTWF0aC5zaW4oc3RhcnRBbmdsZSkpLCA1MCAqICgxICsgTWF0aC5jb3Moc3RhcnRBbmdsZSArIHN3ZWVwQW5nbGUpKSwgNTAgKiAoMSAtIE1hdGguc2luKHN0YXJ0QW5nbGUgKyBzd2VlcEFuZ2xlKSldOwogICAgICBhcmMgPSB7CiAgICAgICAgbmFtZTogInBhdGgiLAogICAgICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICAgIHhtbG5zOiBTVkdfTlMsCiAgICAgICAgICBkOiBgTSAke3gxfSAke3kxfSBBIDUwIDUwIDAgJHtsYXJnZUFyY30gMCAke3gyfSAke3kyfWAsCiAgICAgICAgICB2ZWN0b3JFZmZlY3Q6ICJub24tc2NhbGluZy1zdHJva2UiLAogICAgICAgICAgc3R5bGUKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5hc3NpZ24oYXR0cmlidXRlcywgewogICAgICAgIHZpZXdCb3g6ICIwIDAgMTAwIDEwMCIsCiAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbzogIm5vbmUiCiAgICAgIH0pOwogICAgfQogICAgY29uc3Qgc3ZnID0gewogICAgICBuYW1lOiAic3ZnIiwKICAgICAgY2hpbGRyZW46IFthcmNdLAogICAgICBhdHRyaWJ1dGVzCiAgICB9OwogICAgY29uc3QgcGFyZW50ID0gdGhpc1skZ2V0UGFyZW50XSgpWyRnZXRQYXJlbnRdKCk7CiAgICBpZiAoaGFzTWFyZ2luKHBhcmVudCkpIHsKICAgICAgcmV0dXJuIEhUTUxSZXN1bHQuc3VjY2Vzcyh7CiAgICAgICAgbmFtZTogImRpdiIsCiAgICAgICAgYXR0cmlidXRlczogewogICAgICAgICAgc3R5bGU6IHsKICAgICAgICAgICAgZGlzcGxheTogImlubGluZSIsCiAgICAgICAgICAgIHdpZHRoOiAiMTAwJSIsCiAgICAgICAgICAgIGhlaWdodDogIjEwMCUiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBjaGlsZHJlbjogW3N2Z10KICAgICAgfSk7CiAgICB9CiAgICBzdmcuYXR0cmlidXRlcy5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7CiAgICByZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHN2Zyk7CiAgfQp9CmNsYXNzIEFyZWEgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCAiYXJlYSIsIHRydWUpOwogICAgdGhpcy5jb2xTcGFuID0gZ2V0SW50ZWdlcih7CiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuY29sU3BhbiwKICAgICAgZGVmYXVsdFZhbHVlOiAxLAogICAgICB2YWxpZGF0ZTogbiA9PiBuID49IDEgfHwgbiA9PT0gLTEKICAgIH0pOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgIiI7CiAgICB0aGlzLnJlbGV2YW50ID0gZ2V0UmVsZXZhbnQoYXR0cmlidXRlcy5yZWxldmFudCk7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogICAgdGhpcy54ID0gZ2V0TWVhc3VyZW1lbnQoYXR0cmlidXRlcy54LCAiMHB0Iik7CiAgICB0aGlzLnkgPSBnZXRNZWFzdXJlbWVudChhdHRyaWJ1dGVzLnksICIwcHQiKTsKICAgIHRoaXMuZGVzYyA9IG51bGw7CiAgICB0aGlzLmV4dHJhcyA9IG51bGw7CiAgICB0aGlzLmFyZWEgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuZHJhdyA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5leE9iamVjdCA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5leGNsR3JvdXAgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuZmllbGQgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuc3ViZm9ybSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5zdWJmb3JtU2V0ID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgfQogICpbJGdldENvbnRhaW5lZENoaWxkcmVuXSgpIHsKICAgIHlpZWxkKiBnZXRDb250YWluZWRDaGlsZHJlbih0aGlzKTsKICB9CiAgWyRpc1RyYW5zcGFyZW50XSgpIHsKICAgIHJldHVybiB0cnVlOwogIH0KICBbJGlzQmluZGFibGVdKCkgewogICAgcmV0dXJuIHRydWU7CiAgfQogIFskYWRkSFRNTF0oaHRtbCwgYmJveCkgewogICAgY29uc3QgW3gsIHksIHcsIGhdID0gYmJveDsKICAgIHRoaXNbJGV4dHJhXS53aWR0aCA9IE1hdGgubWF4KHRoaXNbJGV4dHJhXS53aWR0aCwgeCArIHcpOwogICAgdGhpc1skZXh0cmFdLmhlaWdodCA9IE1hdGgubWF4KHRoaXNbJGV4dHJhXS5oZWlnaHQsIHkgKyBoKTsKICAgIHRoaXNbJGV4dHJhXS5jaGlsZHJlbi5wdXNoKGh0bWwpOwogIH0KICBbJGdldEF2YWlsYWJsZVNwYWNlXSgpIHsKICAgIHJldHVybiB0aGlzWyRleHRyYV0uYXZhaWxhYmxlU3BhY2U7CiAgfQogIFskdG9IVE1MXShhdmFpbGFibGVTcGFjZSkgewogICAgY29uc3Qgc3R5bGUgPSB0b1N0eWxlKHRoaXMsICJwb3NpdGlvbiIpOwogICAgY29uc3QgYXR0cmlidXRlcyA9IHsKICAgICAgc3R5bGUsCiAgICAgIGlkOiB0aGlzWyR1aWRdLAogICAgICBjbGFzczogWyJ4ZmFBcmVhIl0KICAgIH07CiAgICBpZiAoaXNQcmludE9ubHkodGhpcykpIHsKICAgICAgYXR0cmlidXRlcy5jbGFzcy5wdXNoKCJ4ZmFQcmludE9ubHkiKTsKICAgIH0KICAgIGlmICh0aGlzLm5hbWUpIHsKICAgICAgYXR0cmlidXRlcy54ZmFOYW1lID0gdGhpcy5uYW1lOwogICAgfQogICAgY29uc3QgY2hpbGRyZW4gPSBbXTsKICAgIHRoaXNbJGV4dHJhXSA9IHsKICAgICAgY2hpbGRyZW4sCiAgICAgIHdpZHRoOiAwLAogICAgICBoZWlnaHQ6IDAsCiAgICAgIGF2YWlsYWJsZVNwYWNlCiAgICB9OwogICAgY29uc3QgcmVzdWx0ID0gdGhpc1skY2hpbGRyZW5Ub0hUTUxdKHsKICAgICAgZmlsdGVyOiBuZXcgU2V0KFsiYXJlYSIsICJkcmF3IiwgImZpZWxkIiwgImV4Y2xHcm91cCIsICJzdWJmb3JtIiwgInN1YmZvcm1TZXQiXSksCiAgICAgIGluY2x1ZGU6IHRydWUKICAgIH0pOwogICAgaWYgKCFyZXN1bHQuc3VjY2VzcykgewogICAgICBpZiAocmVzdWx0LmlzQnJlYWsoKSkgewogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgICAgZGVsZXRlIHRoaXNbJGV4dHJhXTsKICAgICAgcmV0dXJuIEhUTUxSZXN1bHQuRkFJTFVSRTsKICAgIH0KICAgIHN0eWxlLndpZHRoID0gbWVhc3VyZVRvU3RyaW5nKHRoaXNbJGV4dHJhXS53aWR0aCk7CiAgICBzdHlsZS5oZWlnaHQgPSBtZWFzdXJlVG9TdHJpbmcodGhpc1skZXh0cmFdLmhlaWdodCk7CiAgICBjb25zdCBodG1sID0gewogICAgICBuYW1lOiAiZGl2IiwKICAgICAgYXR0cmlidXRlcywKICAgICAgY2hpbGRyZW4KICAgIH07CiAgICBjb25zdCBiYm94ID0gW3RoaXMueCwgdGhpcy55LCB0aGlzWyRleHRyYV0ud2lkdGgsIHRoaXNbJGV4dHJhXS5oZWlnaHRdOwogICAgZGVsZXRlIHRoaXNbJGV4dHJhXTsKICAgIHJldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3MoaHRtbCwgYmJveCk7CiAgfQp9CmNsYXNzIEFzc2lzdCBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJhc3Npc3QiLCB0cnVlKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy5yb2xlID0gYXR0cmlidXRlcy5yb2xlIHx8ICIiOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICAgIHRoaXMuc3BlYWsgPSBudWxsOwogICAgdGhpcy50b29sVGlwID0gbnVsbDsKICB9CiAgWyR0b0hUTUxdKCkgewogICAgcmV0dXJuIHRoaXMudG9vbFRpcD8uWyRjb250ZW50XSB8fCBudWxsOwogIH0KfQpjbGFzcyBCYXJjb2RlIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgImJhcmNvZGUiLCB0cnVlKTsKICAgIHRoaXMuY2hhckVuY29kaW5nID0gZ2V0S2V5d29yZCh7CiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuY2hhckVuY29kaW5nID8gYXR0cmlidXRlcy5jaGFyRW5jb2RpbmcudG9Mb3dlckNhc2UoKSA6ICIiLAogICAgICBkZWZhdWx0VmFsdWU6ICIiLAogICAgICB2YWxpZGF0ZTogayA9PiBbInV0Zi04IiwgImJpZy1maXZlIiwgImZvbnRzcGVjaWZpYyIsICJnYmsiLCAiZ2ItMTgwMzAiLCAiZ2ItMjMxMiIsICJrc2MtNTYwMSIsICJub25lIiwgInNoaWZ0LWppcyIsICJ1Y3MtMiIsICJ1dGYtMTYiXS5pbmNsdWRlcyhrKSB8fCBrLm1hdGNoKC9pc28tODg1OS1cZHsyfS8pCiAgICB9KTsKICAgIHRoaXMuY2hlY2tzdW0gPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5jaGVja3N1bSwgWyJub25lIiwgIjFtb2QxMCIsICIxbW9kMTBfMW1vZDExIiwgIjJtb2QxMCIsICJhdXRvIl0pOwogICAgdGhpcy5kYXRhQ29sdW1uQ291bnQgPSBnZXRJbnRlZ2VyKHsKICAgICAgZGF0YTogYXR0cmlidXRlcy5kYXRhQ29sdW1uQ291bnQsCiAgICAgIGRlZmF1bHRWYWx1ZTogLTEsCiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPj0gMAogICAgfSk7CiAgICB0aGlzLmRhdGFMZW5ndGggPSBnZXRJbnRlZ2VyKHsKICAgICAgZGF0YTogYXR0cmlidXRlcy5kYXRhTGVuZ3RoLAogICAgICBkZWZhdWx0VmFsdWU6IC0xLAogICAgICB2YWxpZGF0ZTogeCA9PiB4ID49IDAKICAgIH0pOwogICAgdGhpcy5kYXRhUHJlcCA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLmRhdGFQcmVwLCBbIm5vbmUiLCAiZmxhdGVDb21wcmVzcyJdKTsKICAgIHRoaXMuZGF0YVJvd0NvdW50ID0gZ2V0SW50ZWdlcih7CiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuZGF0YVJvd0NvdW50LAogICAgICBkZWZhdWx0VmFsdWU6IC0xLAogICAgICB2YWxpZGF0ZTogeCA9PiB4ID49IDAKICAgIH0pOwogICAgdGhpcy5lbmRDaGFyID0gYXR0cmlidXRlcy5lbmRDaGFyIHx8ICIiOwogICAgdGhpcy5lcnJvckNvcnJlY3Rpb25MZXZlbCA9IGdldEludGVnZXIoewogICAgICBkYXRhOiBhdHRyaWJ1dGVzLmVycm9yQ29ycmVjdGlvbkxldmVsLAogICAgICBkZWZhdWx0VmFsdWU6IC0xLAogICAgICB2YWxpZGF0ZTogeCA9PiB4ID49IDAgJiYgeCA8PSA4CiAgICB9KTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy5tb2R1bGVIZWlnaHQgPSBnZXRNZWFzdXJlbWVudChhdHRyaWJ1dGVzLm1vZHVsZUhlaWdodCwgIjVtbSIpOwogICAgdGhpcy5tb2R1bGVXaWR0aCA9IGdldE1lYXN1cmVtZW50KGF0dHJpYnV0ZXMubW9kdWxlV2lkdGgsICIwLjI1bW0iKTsKICAgIHRoaXMucHJpbnRDaGVja0RpZ2l0ID0gZ2V0SW50ZWdlcih7CiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMucHJpbnRDaGVja0RpZ2l0LAogICAgICBkZWZhdWx0VmFsdWU6IDAsCiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPT09IDEKICAgIH0pOwogICAgdGhpcy5yb3dDb2x1bW5SYXRpbyA9IGdldFJhdGlvKGF0dHJpYnV0ZXMucm93Q29sdW1uUmF0aW8pOwogICAgdGhpcy5zdGFydENoYXIgPSBhdHRyaWJ1dGVzLnN0YXJ0Q2hhciB8fCAiIjsKICAgIHRoaXMudGV4dExvY2F0aW9uID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMudGV4dExvY2F0aW9uLCBbImJlbG93IiwgImFib3ZlIiwgImFib3ZlRW1iZWRkZWQiLCAiYmVsb3dFbWJlZGRlZCIsICJub25lIl0pOwogICAgdGhpcy50cnVuY2F0ZSA9IGdldEludGVnZXIoewogICAgICBkYXRhOiBhdHRyaWJ1dGVzLnRydW5jYXRlLAogICAgICBkZWZhdWx0VmFsdWU6IDAsCiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPT09IDEKICAgIH0pOwogICAgdGhpcy50eXBlID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMudHlwZSA/IGF0dHJpYnV0ZXMudHlwZS50b0xvd2VyQ2FzZSgpIDogIiIsIFsiYXp0ZWMiLCAiY29kYWJhciIsICJjb2RlMm9mNWluZHVzdHJpYWwiLCAiY29kZTJvZjVpbnRlcmxlYXZlZCIsICJjb2RlMm9mNW1hdHJpeCIsICJjb2RlMm9mNXN0YW5kYXJkIiwgImNvZGUzb2Y5IiwgImNvZGUzb2Y5ZXh0ZW5kZWQiLCAiY29kZTExIiwgImNvZGU0OSIsICJjb2RlOTMiLCAiY29kZTEyOCIsICJjb2RlMTI4YSIsICJjb2RlMTI4YiIsICJjb2RlMTI4YyIsICJjb2RlMTI4c3NjYyIsICJkYXRhbWF0cml4IiwgImVhbjgiLCAiZWFuOGFkZDIiLCAiZWFuOGFkZDUiLCAiZWFuMTMiLCAiZWFuMTNhZGQyIiwgImVhbjEzYWRkNSIsICJlYW4xM3B3Y2QiLCAiZmltIiwgImxvZ21hcnMiLCAibWF4aWNvZGUiLCAibXNpIiwgInBkZjQxNyIsICJwZGY0MTdtYWNybyIsICJwbGVzc2V5IiwgInBvc3RhdXNjdXN0MiIsICJwb3N0YXVzY3VzdDMiLCAicG9zdGF1c3JlcGx5cGFpZCIsICJwb3N0YXVzc3RhbmRhcmQiLCAicG9zdHVrcm00c2NjIiwgInBvc3R1c2RwYmMiLCAicG9zdHVzaW1iIiwgInBvc3R1c3N0YW5kYXJkIiwgInBvc3R1czV6aXAiLCAicXJjb2RlIiwgInJmaWQiLCAicnNzMTQiLCAicnNzMTRleHBhbmRlZCIsICJyc3MxNGxpbWl0ZWQiLCAicnNzMTRzdGFja2VkIiwgInJzczE0c3RhY2tlZG9tbmkiLCAicnNzMTR0cnVuY2F0ZWQiLCAidGVsZXBlbiIsICJ1Y2MxMjgiLCAidWNjMTI4cmFuZG9tIiwgInVjYzEyOHNzY2MiLCAidXBjYSIsICJ1cGNhYWRkMiIsICJ1cGNhYWRkNSIsICJ1cGNhcHdjZCIsICJ1cGNlIiwgInVwY2VhZGQyIiwgInVwY2VhZGQ1IiwgInVwY2VhbjIiLCAidXBjZWFuNSIsICJ1cHNtYXhpY29kZSJdKTsKICAgIHRoaXMudXBzTW9kZSA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLnVwc01vZGUsIFsidXNDYXJyaWVyIiwgImludGVybmF0aW9uYWxDYXJyaWVyIiwgInNlY3VyZVN5bWJvbCIsICJzdGFuZGFyZFN5bWJvbCJdKTsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgICB0aGlzLndpZGVOYXJyb3dSYXRpbyA9IGdldFJhdGlvKGF0dHJpYnV0ZXMud2lkZU5hcnJvd1JhdGlvKTsKICAgIHRoaXMuZW5jcnlwdCA9IG51bGw7CiAgICB0aGlzLmV4dHJhcyA9IG51bGw7CiAgfQp9CmNsYXNzIEJpbmQgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCAiYmluZCIsIHRydWUpOwogICAgdGhpcy5tYXRjaCA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLm1hdGNoLCBbIm9uY2UiLCAiZGF0YVJlZiIsICJnbG9iYWwiLCAibm9uZSJdKTsKICAgIHRoaXMucmVmID0gYXR0cmlidXRlcy5yZWYgfHwgIiI7CiAgICB0aGlzLnBpY3R1cmUgPSBudWxsOwogIH0KfQpjbGFzcyBCaW5kSXRlbXMgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCAiYmluZEl0ZW1zIik7CiAgICB0aGlzLmNvbm5lY3Rpb24gPSBhdHRyaWJ1dGVzLmNvbm5lY3Rpb24gfHwgIiI7CiAgICB0aGlzLmxhYmVsUmVmID0gYXR0cmlidXRlcy5sYWJlbFJlZiB8fCAiIjsKICAgIHRoaXMucmVmID0gYXR0cmlidXRlcy5yZWYgfHwgIiI7CiAgICB0aGlzLnZhbHVlUmVmID0gYXR0cmlidXRlcy52YWx1ZVJlZiB8fCAiIjsKICB9Cn0KY2xhc3MgQm9va2VuZCBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJib29rZW5kIik7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMubGVhZGVyID0gYXR0cmlidXRlcy5sZWFkZXIgfHwgIiI7CiAgICB0aGlzLnRyYWlsZXIgPSBhdHRyaWJ1dGVzLnRyYWlsZXIgfHwgIiI7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogIH0KfQpjbGFzcyBCb29sZWFuRWxlbWVudCBleHRlbmRzIE9wdGlvbjAxIHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgImJvb2xlYW4iKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8ICIiOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICB9CiAgWyR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKSB7CiAgICByZXR1cm4gdmFsdWVUb0h0bWwodGhpc1skY29udGVudF0gPT09IDEgPyAiMSIgOiAiMCIpOwogIH0KfQpjbGFzcyBCb3JkZXIgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCAiYm9yZGVyIiwgdHJ1ZSk7CiAgICB0aGlzLmJyZWFrID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMuYnJlYWssIFsiY2xvc2UiLCAib3BlbiJdKTsKICAgIHRoaXMuaGFuZCA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLmhhbmQsIFsiZXZlbiIsICJsZWZ0IiwgInJpZ2h0Il0pOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLnByZXNlbmNlID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMucHJlc2VuY2UsIFsidmlzaWJsZSIsICJoaWRkZW4iLCAiaW5hY3RpdmUiLCAiaW52aXNpYmxlIl0pOwogICAgdGhpcy5yZWxldmFudCA9IGdldFJlbGV2YW50KGF0dHJpYnV0ZXMucmVsZXZhbnQpOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICAgIHRoaXMuY29ybmVyID0gbmV3IFhGQU9iamVjdEFycmF5KDQpOwogICAgdGhpcy5lZGdlID0gbmV3IFhGQU9iamVjdEFycmF5KDQpOwogICAgdGhpcy5leHRyYXMgPSBudWxsOwogICAgdGhpcy5maWxsID0gbnVsbDsKICAgIHRoaXMubWFyZ2luID0gbnVsbDsKICB9CiAgWyRnZXRFeHRyYV0oKSB7CiAgICBpZiAoIXRoaXNbJGV4dHJhXSkgewogICAgICBjb25zdCBlZGdlcyA9IHRoaXMuZWRnZS5jaGlsZHJlbi5zbGljZSgpOwogICAgICBpZiAoZWRnZXMubGVuZ3RoIDwgNCkgewogICAgICAgIGNvbnN0IGRlZmF1bHRFZGdlID0gZWRnZXMuYXQoLTEpIHx8IG5ldyBFZGdlKHt9KTsKICAgICAgICBmb3IgKGxldCBpID0gZWRnZXMubGVuZ3RoOyBpIDwgNDsgaSsrKSB7CiAgICAgICAgICBlZGdlcy5wdXNoKGRlZmF1bHRFZGdlKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgY29uc3Qgd2lkdGhzID0gZWRnZXMubWFwKGVkZ2UgPT4gZWRnZS50aGlja25lc3MpOwogICAgICBjb25zdCBpbnNldHMgPSBbMCwgMCwgMCwgMF07CiAgICAgIGlmICh0aGlzLm1hcmdpbikgewogICAgICAgIGluc2V0c1swXSA9IHRoaXMubWFyZ2luLnRvcEluc2V0OwogICAgICAgIGluc2V0c1sxXSA9IHRoaXMubWFyZ2luLnJpZ2h0SW5zZXQ7CiAgICAgICAgaW5zZXRzWzJdID0gdGhpcy5tYXJnaW4uYm90dG9tSW5zZXQ7CiAgICAgICAgaW5zZXRzWzNdID0gdGhpcy5tYXJnaW4ubGVmdEluc2V0OwogICAgICB9CiAgICAgIHRoaXNbJGV4dHJhXSA9IHsKICAgICAgICB3aWR0aHMsCiAgICAgICAgaW5zZXRzLAogICAgICAgIGVkZ2VzCiAgICAgIH07CiAgICB9CiAgICByZXR1cm4gdGhpc1skZXh0cmFdOwogIH0KICBbJHRvU3R5bGVdKCkgewogICAgY29uc3QgewogICAgICBlZGdlcwogICAgfSA9IHRoaXNbJGdldEV4dHJhXSgpOwogICAgY29uc3QgZWRnZVN0eWxlcyA9IGVkZ2VzLm1hcChub2RlID0+IHsKICAgICAgY29uc3Qgc3R5bGUgPSBub2RlWyR0b1N0eWxlXSgpOwogICAgICBzdHlsZS5jb2xvciB8fD0gIiMwMDAwMDAiOwogICAgICByZXR1cm4gc3R5bGU7CiAgICB9KTsKICAgIGNvbnN0IHN0eWxlID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgIGlmICh0aGlzLm1hcmdpbikgewogICAgICBPYmplY3QuYXNzaWduKHN0eWxlLCB0aGlzLm1hcmdpblskdG9TdHlsZV0oKSk7CiAgICB9CiAgICBpZiAodGhpcy5maWxsPy5wcmVzZW5jZSA9PT0gInZpc2libGUiKSB7CiAgICAgIE9iamVjdC5hc3NpZ24oc3R5bGUsIHRoaXMuZmlsbFskdG9TdHlsZV0oKSk7CiAgICB9CiAgICBpZiAodGhpcy5jb3JuZXIuY2hpbGRyZW4uc29tZShub2RlID0+IG5vZGUucmFkaXVzICE9PSAwKSkgewogICAgICBjb25zdCBjb3JuZXJTdHlsZXMgPSB0aGlzLmNvcm5lci5jaGlsZHJlbi5tYXAobm9kZSA9PiBub2RlWyR0b1N0eWxlXSgpKTsKICAgICAgaWYgKGNvcm5lclN0eWxlcy5sZW5ndGggPT09IDIgfHwgY29ybmVyU3R5bGVzLmxlbmd0aCA9PT0gMykgewogICAgICAgIGNvbnN0IGxhc3QgPSBjb3JuZXJTdHlsZXMuYXQoLTEpOwogICAgICAgIGZvciAobGV0IGkgPSBjb3JuZXJTdHlsZXMubGVuZ3RoOyBpIDwgNDsgaSsrKSB7CiAgICAgICAgICBjb3JuZXJTdHlsZXMucHVzaChsYXN0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc3R5bGUuYm9yZGVyUmFkaXVzID0gY29ybmVyU3R5bGVzLm1hcChzID0+IHMucmFkaXVzKS5qb2luKCIgIik7CiAgICB9CiAgICBzd2l0Y2ggKHRoaXMucHJlc2VuY2UpIHsKICAgICAgY2FzZSAiaW52aXNpYmxlIjoKICAgICAgY2FzZSAiaGlkZGVuIjoKICAgICAgICBzdHlsZS5ib3JkZXJTdHlsZSA9ICIiOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJpbmFjdGl2ZSI6CiAgICAgICAgc3R5bGUuYm9yZGVyU3R5bGUgPSAibm9uZSI7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgc3R5bGUuYm9yZGVyU3R5bGUgPSBlZGdlU3R5bGVzLm1hcChzID0+IHMuc3R5bGUpLmpvaW4oIiAiKTsKICAgICAgICBicmVhazsKICAgIH0KICAgIHN0eWxlLmJvcmRlcldpZHRoID0gZWRnZVN0eWxlcy5tYXAocyA9PiBzLndpZHRoKS5qb2luKCIgIik7CiAgICBzdHlsZS5ib3JkZXJDb2xvciA9IGVkZ2VTdHlsZXMubWFwKHMgPT4gcy5jb2xvcikuam9pbigiICIpOwogICAgcmV0dXJuIHN0eWxlOwogIH0KfQpjbGFzcyBCcmVhayBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJicmVhayIsIHRydWUpOwogICAgdGhpcy5hZnRlciA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLmFmdGVyLCBbImF1dG8iLCAiY29udGVudEFyZWEiLCAicGFnZUFyZWEiLCAicGFnZUV2ZW4iLCAicGFnZU9kZCJdKTsKICAgIHRoaXMuYWZ0ZXJUYXJnZXQgPSBhdHRyaWJ1dGVzLmFmdGVyVGFyZ2V0IHx8ICIiOwogICAgdGhpcy5iZWZvcmUgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5iZWZvcmUsIFsiYXV0byIsICJjb250ZW50QXJlYSIsICJwYWdlQXJlYSIsICJwYWdlRXZlbiIsICJwYWdlT2RkIl0pOwogICAgdGhpcy5iZWZvcmVUYXJnZXQgPSBhdHRyaWJ1dGVzLmJlZm9yZVRhcmdldCB8fCAiIjsKICAgIHRoaXMuYm9va2VuZExlYWRlciA9IGF0dHJpYnV0ZXMuYm9va2VuZExlYWRlciB8fCAiIjsKICAgIHRoaXMuYm9va2VuZFRyYWlsZXIgPSBhdHRyaWJ1dGVzLmJvb2tlbmRUcmFpbGVyIHx8ICIiOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLm92ZXJmbG93TGVhZGVyID0gYXR0cmlidXRlcy5vdmVyZmxvd0xlYWRlciB8fCAiIjsKICAgIHRoaXMub3ZlcmZsb3dUYXJnZXQgPSBhdHRyaWJ1dGVzLm92ZXJmbG93VGFyZ2V0IHx8ICIiOwogICAgdGhpcy5vdmVyZmxvd1RyYWlsZXIgPSBhdHRyaWJ1dGVzLm92ZXJmbG93VHJhaWxlciB8fCAiIjsKICAgIHRoaXMuc3RhcnROZXcgPSBnZXRJbnRlZ2VyKHsKICAgICAgZGF0YTogYXR0cmlidXRlcy5zdGFydE5ldywKICAgICAgZGVmYXVsdFZhbHVlOiAwLAogICAgICB2YWxpZGF0ZTogeCA9PiB4ID09PSAxCiAgICB9KTsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgICB0aGlzLmV4dHJhcyA9IG51bGw7CiAgfQp9CmNsYXNzIEJyZWFrQWZ0ZXIgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCAiYnJlYWtBZnRlciIsIHRydWUpOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLmxlYWRlciA9IGF0dHJpYnV0ZXMubGVhZGVyIHx8ICIiOwogICAgdGhpcy5zdGFydE5ldyA9IGdldEludGVnZXIoewogICAgICBkYXRhOiBhdHRyaWJ1dGVzLnN0YXJ0TmV3LAogICAgICBkZWZhdWx0VmFsdWU6IDAsCiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPT09IDEKICAgIH0pOwogICAgdGhpcy50YXJnZXQgPSBhdHRyaWJ1dGVzLnRhcmdldCB8fCAiIjsKICAgIHRoaXMudGFyZ2V0VHlwZSA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLnRhcmdldFR5cGUsIFsiYXV0byIsICJjb250ZW50QXJlYSIsICJwYWdlQXJlYSJdKTsKICAgIHRoaXMudHJhaWxlciA9IGF0dHJpYnV0ZXMudHJhaWxlciB8fCAiIjsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgICB0aGlzLnNjcmlwdCA9IG51bGw7CiAgfQp9CmNsYXNzIEJyZWFrQmVmb3JlIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgImJyZWFrQmVmb3JlIiwgdHJ1ZSk7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMubGVhZGVyID0gYXR0cmlidXRlcy5sZWFkZXIgfHwgIiI7CiAgICB0aGlzLnN0YXJ0TmV3ID0gZ2V0SW50ZWdlcih7CiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuc3RhcnROZXcsCiAgICAgIGRlZmF1bHRWYWx1ZTogMCwKICAgICAgdmFsaWRhdGU6IHggPT4geCA9PT0gMQogICAgfSk7CiAgICB0aGlzLnRhcmdldCA9IGF0dHJpYnV0ZXMudGFyZ2V0IHx8ICIiOwogICAgdGhpcy50YXJnZXRUeXBlID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMudGFyZ2V0VHlwZSwgWyJhdXRvIiwgImNvbnRlbnRBcmVhIiwgInBhZ2VBcmVhIl0pOwogICAgdGhpcy50cmFpbGVyID0gYXR0cmlidXRlcy50cmFpbGVyIHx8ICIiOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICAgIHRoaXMuc2NyaXB0ID0gbnVsbDsKICB9CiAgWyR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKSB7CiAgICB0aGlzWyRleHRyYV0gPSB7fTsKICAgIHJldHVybiBIVE1MUmVzdWx0LkZBSUxVUkU7CiAgfQp9CmNsYXNzIEJ1dHRvbiBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJidXR0b24iLCB0cnVlKTsKICAgIHRoaXMuaGlnaGxpZ2h0ID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMuaGlnaGxpZ2h0LCBbImludmVydGVkIiwgIm5vbmUiLCAib3V0bGluZSIsICJwdXNoIl0pOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogICAgdGhpcy5leHRyYXMgPSBudWxsOwogIH0KICBbJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpIHsKICAgIGNvbnN0IHBhcmVudCA9IHRoaXNbJGdldFBhcmVudF0oKTsKICAgIGNvbnN0IGdyYW5kcGEgPSBwYXJlbnRbJGdldFBhcmVudF0oKTsKICAgIGNvbnN0IGh0bWxCdXR0b24gPSB7CiAgICAgIG5hbWU6ICJidXR0b24iLAogICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgaWQ6IHRoaXNbJHVpZF0sCiAgICAgICAgY2xhc3M6IFsieGZhQnV0dG9uIl0sCiAgICAgICAgc3R5bGU6IHt9CiAgICAgIH0sCiAgICAgIGNoaWxkcmVuOiBbXQogICAgfTsKICAgIGZvciAoY29uc3QgZXZlbnQgb2YgZ3JhbmRwYS5ldmVudC5jaGlsZHJlbikgewogICAgICBpZiAoZXZlbnQuYWN0aXZpdHkgIT09ICJjbGljayIgfHwgIWV2ZW50LnNjcmlwdCkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGNvbnN0IGpzVVJMID0gcmVjb3ZlckpzVVJMKGV2ZW50LnNjcmlwdFskY29udGVudF0pOwogICAgICBpZiAoIWpzVVJMKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgY29uc3QgaHJlZiA9IGZpeFVSTChqc1VSTC51cmwpOwogICAgICBpZiAoIWhyZWYpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBodG1sQnV0dG9uLmNoaWxkcmVuLnB1c2goewogICAgICAgIG5hbWU6ICJhIiwKICAgICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgICBpZDogImxpbmsiICsgdGhpc1skdWlkXSwKICAgICAgICAgIGhyZWYsCiAgICAgICAgICBuZXdXaW5kb3c6IGpzVVJMLm5ld1dpbmRvdywKICAgICAgICAgIGNsYXNzOiBbInhmYUxpbmsiXSwKICAgICAgICAgIHN0eWxlOiB7fQogICAgICAgIH0sCiAgICAgICAgY2hpbGRyZW46IFtdCiAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIEhUTUxSZXN1bHQuc3VjY2VzcyhodG1sQnV0dG9uKTsKICB9Cn0KY2xhc3MgQ2FsY3VsYXRlIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgImNhbGN1bGF0ZSIsIHRydWUpOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLm92ZXJyaWRlID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMub3ZlcnJpZGUsIFsiZGlzYWJsZWQiLCAiZXJyb3IiLCAiaWdub3JlIiwgIndhcm5pbmciXSk7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogICAgdGhpcy5leHRyYXMgPSBudWxsOwogICAgdGhpcy5tZXNzYWdlID0gbnVsbDsKICAgIHRoaXMuc2NyaXB0ID0gbnVsbDsKICB9Cn0KY2xhc3MgQ2FwdGlvbiBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJjYXB0aW9uIiwgdHJ1ZSk7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMucGxhY2VtZW50ID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMucGxhY2VtZW50LCBbImxlZnQiLCAiYm90dG9tIiwgImlubGluZSIsICJyaWdodCIsICJ0b3AiXSk7CiAgICB0aGlzLnByZXNlbmNlID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMucHJlc2VuY2UsIFsidmlzaWJsZSIsICJoaWRkZW4iLCAiaW5hY3RpdmUiLCAiaW52aXNpYmxlIl0pOwogICAgdGhpcy5yZXNlcnZlID0gTWF0aC5jZWlsKGdldE1lYXN1cmVtZW50KGF0dHJpYnV0ZXMucmVzZXJ2ZSkpOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICAgIHRoaXMuZXh0cmFzID0gbnVsbDsKICAgIHRoaXMuZm9udCA9IG51bGw7CiAgICB0aGlzLm1hcmdpbiA9IG51bGw7CiAgICB0aGlzLnBhcmEgPSBudWxsOwogICAgdGhpcy52YWx1ZSA9IG51bGw7CiAgfQogIFskc2V0VmFsdWVdKHZhbHVlKSB7CiAgICBfc2V0VmFsdWUodGhpcywgdmFsdWUpOwogIH0KICBbJGdldEV4dHJhXShhdmFpbGFibGVTcGFjZSkgewogICAgaWYgKCF0aGlzWyRleHRyYV0pIHsKICAgICAgbGV0IHsKICAgICAgICB3aWR0aCwKICAgICAgICBoZWlnaHQKICAgICAgfSA9IGF2YWlsYWJsZVNwYWNlOwogICAgICBzd2l0Y2ggKHRoaXMucGxhY2VtZW50KSB7CiAgICAgICAgY2FzZSAibGVmdCI6CiAgICAgICAgY2FzZSAicmlnaHQiOgogICAgICAgIGNhc2UgImlubGluZSI6CiAgICAgICAgICB3aWR0aCA9IHRoaXMucmVzZXJ2ZSA8PSAwID8gd2lkdGggOiB0aGlzLnJlc2VydmU7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJ0b3AiOgogICAgICAgIGNhc2UgImJvdHRvbSI6CiAgICAgICAgICBoZWlnaHQgPSB0aGlzLnJlc2VydmUgPD0gMCA/IGhlaWdodCA6IHRoaXMucmVzZXJ2ZTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHRoaXNbJGV4dHJhXSA9IGxheW91dE5vZGUodGhpcywgewogICAgICAgIHdpZHRoLAogICAgICAgIGhlaWdodAogICAgICB9KTsKICAgIH0KICAgIHJldHVybiB0aGlzWyRleHRyYV07CiAgfQogIFskdG9IVE1MXShhdmFpbGFibGVTcGFjZSkgewogICAgaWYgKCF0aGlzLnZhbHVlKSB7CiAgICAgIHJldHVybiBIVE1MUmVzdWx0LkVNUFRZOwogICAgfQogICAgdGhpc1skcHVzaFBhcmFdKCk7CiAgICBjb25zdCB2YWx1ZSA9IHRoaXMudmFsdWVbJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpLmh0bWw7CiAgICBpZiAoIXZhbHVlKSB7CiAgICAgIHRoaXNbJHBvcFBhcmFdKCk7CiAgICAgIHJldHVybiBIVE1MUmVzdWx0LkVNUFRZOwogICAgfQogICAgY29uc3Qgc2F2ZWRSZXNlcnZlID0gdGhpcy5yZXNlcnZlOwogICAgaWYgKHRoaXMucmVzZXJ2ZSA8PSAwKSB7CiAgICAgIGNvbnN0IHsKICAgICAgICB3LAogICAgICAgIGgKICAgICAgfSA9IHRoaXNbJGdldEV4dHJhXShhdmFpbGFibGVTcGFjZSk7CiAgICAgIHN3aXRjaCAodGhpcy5wbGFjZW1lbnQpIHsKICAgICAgICBjYXNlICJsZWZ0IjoKICAgICAgICBjYXNlICJyaWdodCI6CiAgICAgICAgY2FzZSAiaW5saW5lIjoKICAgICAgICAgIHRoaXMucmVzZXJ2ZSA9IHc7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJ0b3AiOgogICAgICAgIGNhc2UgImJvdHRvbSI6CiAgICAgICAgICB0aGlzLnJlc2VydmUgPSBoOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0IGNoaWxkcmVuID0gW107CiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAic3RyaW5nIikgewogICAgICBjaGlsZHJlbi5wdXNoKHsKICAgICAgICBuYW1lOiAiI3RleHQiLAogICAgICAgIHZhbHVlCiAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgY2hpbGRyZW4ucHVzaCh2YWx1ZSk7CiAgICB9CiAgICBjb25zdCBzdHlsZSA9IHRvU3R5bGUodGhpcywgImZvbnQiLCAibWFyZ2luIiwgInZpc2liaWxpdHkiKTsKICAgIHN3aXRjaCAodGhpcy5wbGFjZW1lbnQpIHsKICAgICAgY2FzZSAibGVmdCI6CiAgICAgIGNhc2UgInJpZ2h0IjoKICAgICAgICBpZiAodGhpcy5yZXNlcnZlID4gMCkgewogICAgICAgICAgc3R5bGUud2lkdGggPSBtZWFzdXJlVG9TdHJpbmcodGhpcy5yZXNlcnZlKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgInRvcCI6CiAgICAgIGNhc2UgImJvdHRvbSI6CiAgICAgICAgaWYgKHRoaXMucmVzZXJ2ZSA+IDApIHsKICAgICAgICAgIHN0eWxlLmhlaWdodCA9IG1lYXN1cmVUb1N0cmluZyh0aGlzLnJlc2VydmUpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgIH0KICAgIHNldFBhcmEodGhpcywgbnVsbCwgdmFsdWUpOwogICAgdGhpc1skcG9wUGFyYV0oKTsKICAgIHRoaXMucmVzZXJ2ZSA9IHNhdmVkUmVzZXJ2ZTsKICAgIHJldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3MoewogICAgICBuYW1lOiAiZGl2IiwKICAgICAgYXR0cmlidXRlczogewogICAgICAgIHN0eWxlLAogICAgICAgIGNsYXNzOiBbInhmYUNhcHRpb24iXQogICAgICB9LAogICAgICBjaGlsZHJlbgogICAgfSk7CiAgfQp9CmNsYXNzIENlcnRpZmljYXRlIGV4dGVuZHMgU3RyaW5nT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgImNlcnRpZmljYXRlIik7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8fCAiIjsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgfQp9CmNsYXNzIENlcnRpZmljYXRlcyBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJjZXJ0aWZpY2F0ZXMiLCB0cnVlKTsKICAgIHRoaXMuY3JlZGVudGlhbFNlcnZlclBvbGljeSA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLmNyZWRlbnRpYWxTZXJ2ZXJQb2xpY3ksIFsib3B0aW9uYWwiLCAicmVxdWlyZWQiXSk7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMudXJsID0gYXR0cmlidXRlcy51cmwgfHwgIiI7CiAgICB0aGlzLnVybFBvbGljeSA9IGF0dHJpYnV0ZXMudXJsUG9saWN5IHx8ICIiOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICAgIHRoaXMuZW5jcnlwdGlvbiA9IG51bGw7CiAgICB0aGlzLmlzc3VlcnMgPSBudWxsOwogICAgdGhpcy5rZXlVc2FnZSA9IG51bGw7CiAgICB0aGlzLm9pZHMgPSBudWxsOwogICAgdGhpcy5zaWduaW5nID0gbnVsbDsKICAgIHRoaXMuc3ViamVjdEROcyA9IG51bGw7CiAgfQp9CmNsYXNzIENoZWNrQnV0dG9uIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgImNoZWNrQnV0dG9uIiwgdHJ1ZSk7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMubWFyayA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLm1hcmssIFsiZGVmYXVsdCIsICJjaGVjayIsICJjaXJjbGUiLCAiY3Jvc3MiLCAiZGlhbW9uZCIsICJzcXVhcmUiLCAic3RhciJdKTsKICAgIHRoaXMuc2hhcGUgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5zaGFwZSwgWyJzcXVhcmUiLCAicm91bmQiXSk7CiAgICB0aGlzLnNpemUgPSBnZXRNZWFzdXJlbWVudChhdHRyaWJ1dGVzLnNpemUsICIxMHB0Iik7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogICAgdGhpcy5ib3JkZXIgPSBudWxsOwogICAgdGhpcy5leHRyYXMgPSBudWxsOwogICAgdGhpcy5tYXJnaW4gPSBudWxsOwogIH0KICBbJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpIHsKICAgIGNvbnN0IHN0eWxlID0gdG9TdHlsZSgibWFyZ2luIik7CiAgICBjb25zdCBzaXplID0gbWVhc3VyZVRvU3RyaW5nKHRoaXMuc2l6ZSk7CiAgICBzdHlsZS53aWR0aCA9IHN0eWxlLmhlaWdodCA9IHNpemU7CiAgICBsZXQgdHlwZTsKICAgIGxldCBjbGFzc05hbWU7CiAgICBsZXQgZ3JvdXBJZDsKICAgIGNvbnN0IGZpZWxkID0gdGhpc1skZ2V0UGFyZW50XSgpWyRnZXRQYXJlbnRdKCk7CiAgICBjb25zdCBpdGVtcyA9IGZpZWxkLml0ZW1zLmNoaWxkcmVuLmxlbmd0aCAmJiBmaWVsZC5pdGVtcy5jaGlsZHJlblswXVskdG9IVE1MXSgpLmh0bWwgfHwgW107CiAgICBjb25zdCBleHBvcnRlZFZhbHVlID0gewogICAgICBvbjogKGl0ZW1zWzBdICE9PSB1bmRlZmluZWQgPyBpdGVtc1swXSA6ICJvbiIpLnRvU3RyaW5nKCksCiAgICAgIG9mZjogKGl0ZW1zWzFdICE9PSB1bmRlZmluZWQgPyBpdGVtc1sxXSA6ICJvZmYiKS50b1N0cmluZygpCiAgICB9OwogICAgY29uc3QgdmFsdWUgPSBmaWVsZC52YWx1ZT8uWyR0ZXh0XSgpIHx8ICJvZmYiOwogICAgY29uc3QgY2hlY2tlZCA9IHZhbHVlID09PSBleHBvcnRlZFZhbHVlLm9uIHx8IHVuZGVmaW5lZDsKICAgIGNvbnN0IGNvbnRhaW5lciA9IGZpZWxkWyRnZXRTdWJmb3JtUGFyZW50XSgpOwogICAgY29uc3QgZmllbGRJZCA9IGZpZWxkWyR1aWRdOwogICAgbGV0IGRhdGFJZDsKICAgIGlmIChjb250YWluZXIgaW5zdGFuY2VvZiBFeGNsR3JvdXApIHsKICAgICAgZ3JvdXBJZCA9IGNvbnRhaW5lclskdWlkXTsKICAgICAgdHlwZSA9ICJyYWRpbyI7CiAgICAgIGNsYXNzTmFtZSA9ICJ4ZmFSYWRpbyI7CiAgICAgIGRhdGFJZCA9IGNvbnRhaW5lclskZGF0YV0/LlskdWlkXSB8fCBjb250YWluZXJbJHVpZF07CiAgICB9IGVsc2UgewogICAgICB0eXBlID0gImNoZWNrYm94IjsKICAgICAgY2xhc3NOYW1lID0gInhmYUNoZWNrYm94IjsKICAgICAgZGF0YUlkID0gZmllbGRbJGRhdGFdPy5bJHVpZF0gfHwgZmllbGRbJHVpZF07CiAgICB9CiAgICBjb25zdCBpbnB1dCA9IHsKICAgICAgbmFtZTogImlucHV0IiwKICAgICAgYXR0cmlidXRlczogewogICAgICAgIGNsYXNzOiBbY2xhc3NOYW1lXSwKICAgICAgICBzdHlsZSwKICAgICAgICBmaWVsZElkLAogICAgICAgIGRhdGFJZCwKICAgICAgICB0eXBlLAogICAgICAgIGNoZWNrZWQsCiAgICAgICAgeGZhT246IGV4cG9ydGVkVmFsdWUub24sCiAgICAgICAgeGZhT2ZmOiBleHBvcnRlZFZhbHVlLm9mZiwKICAgICAgICAiYXJpYS1sYWJlbCI6IGFyaWFMYWJlbChmaWVsZCksCiAgICAgICAgImFyaWEtcmVxdWlyZWQiOiBmYWxzZQogICAgICB9CiAgICB9OwogICAgaWYgKGdyb3VwSWQpIHsKICAgICAgaW5wdXQuYXR0cmlidXRlcy5uYW1lID0gZ3JvdXBJZDsKICAgIH0KICAgIGlmIChpc1JlcXVpcmVkKGZpZWxkKSkgewogICAgICBpbnB1dC5hdHRyaWJ1dGVzWyJhcmlhLXJlcXVpcmVkIl0gPSB0cnVlOwogICAgICBpbnB1dC5hdHRyaWJ1dGVzLnJlcXVpcmVkID0gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3MoewogICAgICBuYW1lOiAibGFiZWwiLAogICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgY2xhc3M6IFsieGZhTGFiZWwiXQogICAgICB9LAogICAgICBjaGlsZHJlbjogW2lucHV0XQogICAgfSk7CiAgfQp9CmNsYXNzIENob2ljZUxpc3QgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCAiY2hvaWNlTGlzdCIsIHRydWUpOwogICAgdGhpcy5jb21taXRPbiA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLmNvbW1pdE9uLCBbInNlbGVjdCIsICJleGl0Il0pOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLm9wZW4gPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5vcGVuLCBbInVzZXJDb250cm9sIiwgImFsd2F5cyIsICJtdWx0aVNlbGVjdCIsICJvbkVudHJ5Il0pOwogICAgdGhpcy50ZXh0RW50cnkgPSBnZXRJbnRlZ2VyKHsKICAgICAgZGF0YTogYXR0cmlidXRlcy50ZXh0RW50cnksCiAgICAgIGRlZmF1bHRWYWx1ZTogMCwKICAgICAgdmFsaWRhdGU6IHggPT4geCA9PT0gMQogICAgfSk7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogICAgdGhpcy5ib3JkZXIgPSBudWxsOwogICAgdGhpcy5leHRyYXMgPSBudWxsOwogICAgdGhpcy5tYXJnaW4gPSBudWxsOwogIH0KICBbJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpIHsKICAgIGNvbnN0IHN0eWxlID0gdG9TdHlsZSh0aGlzLCAiYm9yZGVyIiwgIm1hcmdpbiIpOwogICAgY29uc3QgdWkgPSB0aGlzWyRnZXRQYXJlbnRdKCk7CiAgICBjb25zdCBmaWVsZCA9IHVpWyRnZXRQYXJlbnRdKCk7CiAgICBjb25zdCBmb250U2l6ZSA9IGZpZWxkLmZvbnQ/LnNpemUgfHwgMTA7CiAgICBjb25zdCBvcHRpb25TdHlsZSA9IHsKICAgICAgZm9udFNpemU6IGBjYWxjKCR7Zm9udFNpemV9cHggKiB2YXIoLS10b3RhbC1zY2FsZS1mYWN0b3IpKWAKICAgIH07CiAgICBjb25zdCBjaGlsZHJlbiA9IFtdOwogICAgaWYgKGZpZWxkLml0ZW1zLmNoaWxkcmVuLmxlbmd0aCA+IDApIHsKICAgICAgY29uc3QgaXRlbXMgPSBmaWVsZC5pdGVtczsKICAgICAgbGV0IGRpc3BsYXllZEluZGV4ID0gMDsKICAgICAgbGV0IHNhdmVJbmRleCA9IDA7CiAgICAgIGlmIChpdGVtcy5jaGlsZHJlbi5sZW5ndGggPT09IDIpIHsKICAgICAgICBkaXNwbGF5ZWRJbmRleCA9IGl0ZW1zLmNoaWxkcmVuWzBdLnNhdmU7CiAgICAgICAgc2F2ZUluZGV4ID0gMSAtIGRpc3BsYXllZEluZGV4OwogICAgICB9CiAgICAgIGNvbnN0IGRpc3BsYXllZCA9IGl0ZW1zLmNoaWxkcmVuW2Rpc3BsYXllZEluZGV4XVskdG9IVE1MXSgpLmh0bWw7CiAgICAgIGNvbnN0IHZhbHVlcyA9IGl0ZW1zLmNoaWxkcmVuW3NhdmVJbmRleF1bJHRvSFRNTF0oKS5odG1sOwogICAgICBsZXQgc2VsZWN0ZWQgPSBmYWxzZTsKICAgICAgY29uc3QgdmFsdWUgPSBmaWVsZC52YWx1ZT8uWyR0ZXh0XSgpIHx8ICIiOwogICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBkaXNwbGF5ZWQubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICAgIGNvbnN0IG9wdGlvbiA9IHsKICAgICAgICAgIG5hbWU6ICJvcHRpb24iLAogICAgICAgICAgYXR0cmlidXRlczogewogICAgICAgICAgICB2YWx1ZTogdmFsdWVzW2ldIHx8IGRpc3BsYXllZFtpXSwKICAgICAgICAgICAgc3R5bGU6IG9wdGlvblN0eWxlCiAgICAgICAgICB9LAogICAgICAgICAgdmFsdWU6IGRpc3BsYXllZFtpXQogICAgICAgIH07CiAgICAgICAgaWYgKHZhbHVlc1tpXSA9PT0gdmFsdWUpIHsKICAgICAgICAgIG9wdGlvbi5hdHRyaWJ1dGVzLnNlbGVjdGVkID0gc2VsZWN0ZWQgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBjaGlsZHJlbi5wdXNoKG9wdGlvbik7CiAgICAgIH0KICAgICAgaWYgKCFzZWxlY3RlZCkgewogICAgICAgIGNoaWxkcmVuLnNwbGljZSgwLCAwLCB7CiAgICAgICAgICBuYW1lOiAib3B0aW9uIiwKICAgICAgICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICAgICAgaGlkZGVuOiB0cnVlLAogICAgICAgICAgICBzZWxlY3RlZDogdHJ1ZQogICAgICAgICAgfSwKICAgICAgICAgIHZhbHVlOiAiICIKICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgY29uc3Qgc2VsZWN0QXR0cmlidXRlcyA9IHsKICAgICAgY2xhc3M6IFsieGZhU2VsZWN0Il0sCiAgICAgIGZpZWxkSWQ6IGZpZWxkWyR1aWRdLAogICAgICBkYXRhSWQ6IGZpZWxkWyRkYXRhXT8uWyR1aWRdIHx8IGZpZWxkWyR1aWRdLAogICAgICBzdHlsZSwKICAgICAgImFyaWEtbGFiZWwiOiBhcmlhTGFiZWwoZmllbGQpLAogICAgICAiYXJpYS1yZXF1aXJlZCI6IGZhbHNlCiAgICB9OwogICAgaWYgKGlzUmVxdWlyZWQoZmllbGQpKSB7CiAgICAgIHNlbGVjdEF0dHJpYnV0ZXNbImFyaWEtcmVxdWlyZWQiXSA9IHRydWU7CiAgICAgIHNlbGVjdEF0dHJpYnV0ZXMucmVxdWlyZWQgPSB0cnVlOwogICAgfQogICAgaWYgKHRoaXMub3BlbiA9PT0gIm11bHRpU2VsZWN0IikgewogICAgICBzZWxlY3RBdHRyaWJ1dGVzLm11bHRpcGxlID0gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3MoewogICAgICBuYW1lOiAibGFiZWwiLAogICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgY2xhc3M6IFsieGZhTGFiZWwiXQogICAgICB9LAogICAgICBjaGlsZHJlbjogW3sKICAgICAgICBuYW1lOiAic2VsZWN0IiwKICAgICAgICBjaGlsZHJlbiwKICAgICAgICBhdHRyaWJ1dGVzOiBzZWxlY3RBdHRyaWJ1dGVzCiAgICAgIH1dCiAgICB9KTsKICB9Cn0KY2xhc3MgQ29sb3IgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCAiY29sb3IiLCB0cnVlKTsKICAgIHRoaXMuY1NwYWNlID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMuY1NwYWNlLCBbIlNSR0IiXSk7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgICB0aGlzLnZhbHVlID0gYXR0cmlidXRlcy52YWx1ZSA/IGdldENvbG9yKGF0dHJpYnV0ZXMudmFsdWUpIDogIiI7CiAgICB0aGlzLmV4dHJhcyA9IG51bGw7CiAgfQogIFskaGFzU2V0dGFibGVWYWx1ZV0oKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIFskdG9TdHlsZV0oKSB7CiAgICByZXR1cm4gdGhpcy52YWx1ZSA/IFV0aWwubWFrZUhleENvbG9yKHRoaXMudmFsdWUuciwgdGhpcy52YWx1ZS5nLCB0aGlzLnZhbHVlLmIpIDogbnVsbDsKICB9Cn0KY2xhc3MgQ29tYiBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJjb21iIik7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMubnVtYmVyT2ZDZWxscyA9IGdldEludGVnZXIoewogICAgICBkYXRhOiBhdHRyaWJ1dGVzLm51bWJlck9mQ2VsbHMsCiAgICAgIGRlZmF1bHRWYWx1ZTogMCwKICAgICAgdmFsaWRhdGU6IHggPT4geCA+PSAwCiAgICB9KTsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgfQp9CmNsYXNzIENvbm5lY3QgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCAiY29ubmVjdCIsIHRydWUpOwogICAgdGhpcy5jb25uZWN0aW9uID0gYXR0cmlidXRlcy5jb25uZWN0aW9uIHx8ICIiOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLnJlZiA9IGF0dHJpYnV0ZXMucmVmIHx8ICIiOwogICAgdGhpcy51c2FnZSA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLnVzYWdlLCBbImV4cG9ydEFuZEltcG9ydCIsICJleHBvcnRPbmx5IiwgImltcG9ydE9ubHkiXSk7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogICAgdGhpcy5waWN0dXJlID0gbnVsbDsKICB9Cn0KY2xhc3MgQ29udGVudEFyZWEgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCAiY29udGVudEFyZWEiLCB0cnVlKTsKICAgIHRoaXMuaCA9IGdldE1lYXN1cmVtZW50KGF0dHJpYnV0ZXMuaCk7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8fCAiIjsKICAgIHRoaXMucmVsZXZhbnQgPSBnZXRSZWxldmFudChhdHRyaWJ1dGVzLnJlbGV2YW50KTsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgICB0aGlzLncgPSBnZXRNZWFzdXJlbWVudChhdHRyaWJ1dGVzLncpOwogICAgdGhpcy54ID0gZ2V0TWVhc3VyZW1lbnQoYXR0cmlidXRlcy54LCAiMHB0Iik7CiAgICB0aGlzLnkgPSBnZXRNZWFzdXJlbWVudChhdHRyaWJ1dGVzLnksICIwcHQiKTsKICAgIHRoaXMuZGVzYyA9IG51bGw7CiAgICB0aGlzLmV4dHJhcyA9IG51bGw7CiAgfQogIFskdG9IVE1MXShhdmFpbGFibGVTcGFjZSkgewogICAgY29uc3QgbGVmdCA9IG1lYXN1cmVUb1N0cmluZyh0aGlzLngpOwogICAgY29uc3QgdG9wID0gbWVhc3VyZVRvU3RyaW5nKHRoaXMueSk7CiAgICBjb25zdCBzdHlsZSA9IHsKICAgICAgbGVmdCwKICAgICAgdG9wLAogICAgICB3aWR0aDogbWVhc3VyZVRvU3RyaW5nKHRoaXMudyksCiAgICAgIGhlaWdodDogbWVhc3VyZVRvU3RyaW5nKHRoaXMuaCkKICAgIH07CiAgICBjb25zdCBjbGFzc05hbWVzID0gWyJ4ZmFDb250ZW50YXJlYSJdOwogICAgaWYgKGlzUHJpbnRPbmx5KHRoaXMpKSB7CiAgICAgIGNsYXNzTmFtZXMucHVzaCgieGZhUHJpbnRPbmx5Iik7CiAgICB9CiAgICByZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHsKICAgICAgbmFtZTogImRpdiIsCiAgICAgIGNoaWxkcmVuOiBbXSwKICAgICAgYXR0cmlidXRlczogewogICAgICAgIHN0eWxlLAogICAgICAgIGNsYXNzOiBjbGFzc05hbWVzLAogICAgICAgIGlkOiB0aGlzWyR1aWRdCiAgICAgIH0KICAgIH0pOwogIH0KfQpjbGFzcyBDb3JuZXIgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCAiY29ybmVyIiwgdHJ1ZSk7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMuaW52ZXJ0ZWQgPSBnZXRJbnRlZ2VyKHsKICAgICAgZGF0YTogYXR0cmlidXRlcy5pbnZlcnRlZCwKICAgICAgZGVmYXVsdFZhbHVlOiAwLAogICAgICB2YWxpZGF0ZTogeCA9PiB4ID09PSAxCiAgICB9KTsKICAgIHRoaXMuam9pbiA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLmpvaW4sIFsic3F1YXJlIiwgInJvdW5kIl0pOwogICAgdGhpcy5wcmVzZW5jZSA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLnByZXNlbmNlLCBbInZpc2libGUiLCAiaGlkZGVuIiwgImluYWN0aXZlIiwgImludmlzaWJsZSJdKTsKICAgIHRoaXMucmFkaXVzID0gZ2V0TWVhc3VyZW1lbnQoYXR0cmlidXRlcy5yYWRpdXMpOwogICAgdGhpcy5zdHJva2UgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5zdHJva2UsIFsic29saWQiLCAiZGFzaERvdCIsICJkYXNoRG90RG90IiwgImRhc2hlZCIsICJkb3R0ZWQiLCAiZW1ib3NzZWQiLCAiZXRjaGVkIiwgImxvd2VyZWQiLCAicmFpc2VkIl0pOwogICAgdGhpcy50aGlja25lc3MgPSBnZXRNZWFzdXJlbWVudChhdHRyaWJ1dGVzLnRoaWNrbmVzcywgIjAuNXB0Iik7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogICAgdGhpcy5jb2xvciA9IG51bGw7CiAgICB0aGlzLmV4dHJhcyA9IG51bGw7CiAgfQogIFskdG9TdHlsZV0oKSB7CiAgICBjb25zdCBzdHlsZSA9IHRvU3R5bGUodGhpcywgInZpc2liaWxpdHkiKTsKICAgIHN0eWxlLnJhZGl1cyA9IG1lYXN1cmVUb1N0cmluZyh0aGlzLmpvaW4gPT09ICJzcXVhcmUiID8gMCA6IHRoaXMucmFkaXVzKTsKICAgIHJldHVybiBzdHlsZTsKICB9Cn0KY2xhc3MgRGF0ZUVsZW1lbnQgZXh0ZW5kcyBDb250ZW50T2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgImRhdGUiKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8ICIiOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICB9CiAgWyRmaW5hbGl6ZV0oKSB7CiAgICBjb25zdCBkYXRlID0gdGhpc1skY29udGVudF0udHJpbSgpOwogICAgdGhpc1skY29udGVudF0gPSBkYXRlID8gbmV3IERhdGUoZGF0ZSkgOiBudWxsOwogIH0KICBbJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpIHsKICAgIHJldHVybiB2YWx1ZVRvSHRtbCh0aGlzWyRjb250ZW50XSA/IHRoaXNbJGNvbnRlbnRdLnRvU3RyaW5nKCkgOiAiIik7CiAgfQp9CmNsYXNzIERhdGVUaW1lIGV4dGVuZHMgQ29udGVudE9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJkYXRlVGltZSIpOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgIiI7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogIH0KICBbJGZpbmFsaXplXSgpIHsKICAgIGNvbnN0IGRhdGUgPSB0aGlzWyRjb250ZW50XS50cmltKCk7CiAgICB0aGlzWyRjb250ZW50XSA9IGRhdGUgPyBuZXcgRGF0ZShkYXRlKSA6IG51bGw7CiAgfQogIFskdG9IVE1MXShhdmFpbGFibGVTcGFjZSkgewogICAgcmV0dXJuIHZhbHVlVG9IdG1sKHRoaXNbJGNvbnRlbnRdID8gdGhpc1skY29udGVudF0udG9TdHJpbmcoKSA6ICIiKTsKICB9Cn0KY2xhc3MgRGF0ZVRpbWVFZGl0IGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgImRhdGVUaW1lRWRpdCIsIHRydWUpOwogICAgdGhpcy5oU2Nyb2xsUG9saWN5ID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMuaFNjcm9sbFBvbGljeSwgWyJhdXRvIiwgIm9mZiIsICJvbiJdKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy5waWNrZXIgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5waWNrZXIsIFsiaG9zdCIsICJub25lIl0pOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICAgIHRoaXMuYm9yZGVyID0gbnVsbDsKICAgIHRoaXMuY29tYiA9IG51bGw7CiAgICB0aGlzLmV4dHJhcyA9IG51bGw7CiAgICB0aGlzLm1hcmdpbiA9IG51bGw7CiAgfQogIFskdG9IVE1MXShhdmFpbGFibGVTcGFjZSkgewogICAgY29uc3Qgc3R5bGUgPSB0b1N0eWxlKHRoaXMsICJib3JkZXIiLCAiZm9udCIsICJtYXJnaW4iKTsKICAgIGNvbnN0IGZpZWxkID0gdGhpc1skZ2V0UGFyZW50XSgpWyRnZXRQYXJlbnRdKCk7CiAgICBjb25zdCBodG1sID0gewogICAgICBuYW1lOiAiaW5wdXQiLAogICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgdHlwZTogInRleHQiLAogICAgICAgIGZpZWxkSWQ6IGZpZWxkWyR1aWRdLAogICAgICAgIGRhdGFJZDogZmllbGRbJGRhdGFdPy5bJHVpZF0gfHwgZmllbGRbJHVpZF0sCiAgICAgICAgY2xhc3M6IFsieGZhVGV4dGZpZWxkIl0sCiAgICAgICAgc3R5bGUsCiAgICAgICAgImFyaWEtbGFiZWwiOiBhcmlhTGFiZWwoZmllbGQpLAogICAgICAgICJhcmlhLXJlcXVpcmVkIjogZmFsc2UKICAgICAgfQogICAgfTsKICAgIGlmIChpc1JlcXVpcmVkKGZpZWxkKSkgewogICAgICBodG1sLmF0dHJpYnV0ZXNbImFyaWEtcmVxdWlyZWQiXSA9IHRydWU7CiAgICAgIGh0bWwuYXR0cmlidXRlcy5yZXF1aXJlZCA9IHRydWU7CiAgICB9CiAgICByZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHsKICAgICAgbmFtZTogImxhYmVsIiwKICAgICAgYXR0cmlidXRlczogewogICAgICAgIGNsYXNzOiBbInhmYUxhYmVsIl0KICAgICAgfSwKICAgICAgY2hpbGRyZW46IFtodG1sXQogICAgfSk7CiAgfQp9CmNsYXNzIERlY2ltYWwgZXh0ZW5kcyBDb250ZW50T2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgImRlY2ltYWwiKTsKICAgIHRoaXMuZnJhY0RpZ2l0cyA9IGdldEludGVnZXIoewogICAgICBkYXRhOiBhdHRyaWJ1dGVzLmZyYWNEaWdpdHMsCiAgICAgIGRlZmF1bHRWYWx1ZTogMiwKICAgICAgdmFsaWRhdGU6IHggPT4gdHJ1ZQogICAgfSk7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMubGVhZERpZ2l0cyA9IGdldEludGVnZXIoewogICAgICBkYXRhOiBhdHRyaWJ1dGVzLmxlYWREaWdpdHMsCiAgICAgIGRlZmF1bHRWYWx1ZTogLTEsCiAgICAgIHZhbGlkYXRlOiB4ID0+IHRydWUKICAgIH0pOwogICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8ICIiOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICB9CiAgWyRmaW5hbGl6ZV0oKSB7CiAgICBjb25zdCBudW1iZXIgPSBwYXJzZUZsb2F0KHRoaXNbJGNvbnRlbnRdLnRyaW0oKSk7CiAgICB0aGlzWyRjb250ZW50XSA9IGlzTmFOKG51bWJlcikgPyBudWxsIDogbnVtYmVyOwogIH0KICBbJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpIHsKICAgIHJldHVybiB2YWx1ZVRvSHRtbCh0aGlzWyRjb250ZW50XSAhPT0gbnVsbCA/IHRoaXNbJGNvbnRlbnRdLnRvU3RyaW5nKCkgOiAiIik7CiAgfQp9CmNsYXNzIERlZmF1bHRVaSBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJkZWZhdWx0VWkiLCB0cnVlKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICAgIHRoaXMuZXh0cmFzID0gbnVsbDsKICB9Cn0KY2xhc3MgRGVzYyBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJkZXNjIiwgdHJ1ZSk7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgICB0aGlzLmJvb2xlYW4gPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuZGF0ZSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5kYXRlVGltZSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5kZWNpbWFsID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmV4RGF0YSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5mbG9hdCA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5pbWFnZSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5pbnRlZ2VyID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLnRleHQgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMudGltZSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogIH0KfQpjbGFzcyBEaWdlc3RNZXRob2QgZXh0ZW5kcyBPcHRpb25PYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCAiZGlnZXN0TWV0aG9kIiwgWyIiLCAiU0hBMSIsICJTSEEyNTYiLCAiU0hBNTEyIiwgIlJJUEVNRDE2MCJdKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICB9Cn0KY2xhc3MgRGlnZXN0TWV0aG9kcyBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJkaWdlc3RNZXRob2RzIiwgdHJ1ZSk7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMudHlwZSA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLnR5cGUsIFsib3B0aW9uYWwiLCAicmVxdWlyZWQiXSk7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogICAgdGhpcy5kaWdlc3RNZXRob2QgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICB9Cn0KY2xhc3MgRHJhdyBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJkcmF3IiwgdHJ1ZSk7CiAgICB0aGlzLmFuY2hvclR5cGUgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5hbmNob3JUeXBlLCBbInRvcExlZnQiLCAiYm90dG9tQ2VudGVyIiwgImJvdHRvbUxlZnQiLCAiYm90dG9tUmlnaHQiLCAibWlkZGxlQ2VudGVyIiwgIm1pZGRsZUxlZnQiLCAibWlkZGxlUmlnaHQiLCAidG9wQ2VudGVyIiwgInRvcFJpZ2h0Il0pOwogICAgdGhpcy5jb2xTcGFuID0gZ2V0SW50ZWdlcih7CiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuY29sU3BhbiwKICAgICAgZGVmYXVsdFZhbHVlOiAxLAogICAgICB2YWxpZGF0ZTogbiA9PiBuID49IDEgfHwgbiA9PT0gLTEKICAgIH0pOwogICAgdGhpcy5oID0gYXR0cmlidXRlcy5oID8gZ2V0TWVhc3VyZW1lbnQoYXR0cmlidXRlcy5oKSA6ICIiOwogICAgdGhpcy5oQWxpZ24gPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5oQWxpZ24sIFsibGVmdCIsICJjZW50ZXIiLCAianVzdGlmeSIsICJqdXN0aWZ5QWxsIiwgInJhZGl4IiwgInJpZ2h0Il0pOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLmxvY2FsZSA9IGF0dHJpYnV0ZXMubG9jYWxlIHx8ICIiOwogICAgdGhpcy5tYXhIID0gZ2V0TWVhc3VyZW1lbnQoYXR0cmlidXRlcy5tYXhILCAiMHB0Iik7CiAgICB0aGlzLm1heFcgPSBnZXRNZWFzdXJlbWVudChhdHRyaWJ1dGVzLm1heFcsICIwcHQiKTsKICAgIHRoaXMubWluSCA9IGdldE1lYXN1cmVtZW50KGF0dHJpYnV0ZXMubWluSCwgIjBwdCIpOwogICAgdGhpcy5taW5XID0gZ2V0TWVhc3VyZW1lbnQoYXR0cmlidXRlcy5taW5XLCAiMHB0Iik7CiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgIiI7CiAgICB0aGlzLnByZXNlbmNlID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMucHJlc2VuY2UsIFsidmlzaWJsZSIsICJoaWRkZW4iLCAiaW5hY3RpdmUiLCAiaW52aXNpYmxlIl0pOwogICAgdGhpcy5yZWxldmFudCA9IGdldFJlbGV2YW50KGF0dHJpYnV0ZXMucmVsZXZhbnQpOwogICAgdGhpcy5yb3RhdGUgPSBnZXRJbnRlZ2VyKHsKICAgICAgZGF0YTogYXR0cmlidXRlcy5yb3RhdGUsCiAgICAgIGRlZmF1bHRWYWx1ZTogMCwKICAgICAgdmFsaWRhdGU6IHggPT4geCAlIDkwID09PSAwCiAgICB9KTsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgICB0aGlzLncgPSBhdHRyaWJ1dGVzLncgPyBnZXRNZWFzdXJlbWVudChhdHRyaWJ1dGVzLncpIDogIiI7CiAgICB0aGlzLnggPSBnZXRNZWFzdXJlbWVudChhdHRyaWJ1dGVzLngsICIwcHQiKTsKICAgIHRoaXMueSA9IGdldE1lYXN1cmVtZW50KGF0dHJpYnV0ZXMueSwgIjBwdCIpOwogICAgdGhpcy5hc3Npc3QgPSBudWxsOwogICAgdGhpcy5ib3JkZXIgPSBudWxsOwogICAgdGhpcy5jYXB0aW9uID0gbnVsbDsKICAgIHRoaXMuZGVzYyA9IG51bGw7CiAgICB0aGlzLmV4dHJhcyA9IG51bGw7CiAgICB0aGlzLmZvbnQgPSBudWxsOwogICAgdGhpcy5rZWVwID0gbnVsbDsKICAgIHRoaXMubWFyZ2luID0gbnVsbDsKICAgIHRoaXMucGFyYSA9IG51bGw7CiAgICB0aGlzLnRyYXZlcnNhbCA9IG51bGw7CiAgICB0aGlzLnVpID0gbnVsbDsKICAgIHRoaXMudmFsdWUgPSBudWxsOwogICAgdGhpcy5zZXRQcm9wZXJ0eSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogIH0KICBbJHNldFZhbHVlXSh2YWx1ZSkgewogICAgX3NldFZhbHVlKHRoaXMsIHZhbHVlKTsKICB9CiAgWyR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKSB7CiAgICBzZXRUYWJJbmRleCh0aGlzKTsKICAgIGlmICh0aGlzLnByZXNlbmNlID09PSAiaGlkZGVuIiB8fCB0aGlzLnByZXNlbmNlID09PSAiaW5hY3RpdmUiKSB7CiAgICAgIHJldHVybiBIVE1MUmVzdWx0LkVNUFRZOwogICAgfQogICAgZml4RGltZW5zaW9ucyh0aGlzKTsKICAgIHRoaXNbJHB1c2hQYXJhXSgpOwogICAgY29uc3Qgc2F2ZWRXID0gdGhpcy53OwogICAgY29uc3Qgc2F2ZWRIID0gdGhpcy5oOwogICAgY29uc3QgewogICAgICB3LAogICAgICBoLAogICAgICBpc0Jyb2tlbgogICAgfSA9IGxheW91dE5vZGUodGhpcywgYXZhaWxhYmxlU3BhY2UpOwogICAgaWYgKHcgJiYgdGhpcy53ID09PSAiIikgewogICAgICBpZiAoaXNCcm9rZW4gJiYgdGhpc1skZ2V0U3ViZm9ybVBhcmVudF0oKVskaXNUaGVyZU1vcmVXaWR0aF0oKSkgewogICAgICAgIHRoaXNbJHBvcFBhcmFdKCk7CiAgICAgICAgcmV0dXJuIEhUTUxSZXN1bHQuRkFJTFVSRTsKICAgICAgfQogICAgICB0aGlzLncgPSB3OwogICAgfQogICAgaWYgKGggJiYgdGhpcy5oID09PSAiIikgewogICAgICB0aGlzLmggPSBoOwogICAgfQogICAgc2V0Rmlyc3RVbnNwbGl0dGFibGUodGhpcyk7CiAgICBpZiAoIWNoZWNrRGltZW5zaW9ucyh0aGlzLCBhdmFpbGFibGVTcGFjZSkpIHsKICAgICAgdGhpcy53ID0gc2F2ZWRXOwogICAgICB0aGlzLmggPSBzYXZlZEg7CiAgICAgIHRoaXNbJHBvcFBhcmFdKCk7CiAgICAgIHJldHVybiBIVE1MUmVzdWx0LkZBSUxVUkU7CiAgICB9CiAgICB1bnNldEZpcnN0VW5zcGxpdHRhYmxlKHRoaXMpOwogICAgY29uc3Qgc3R5bGUgPSB0b1N0eWxlKHRoaXMsICJmb250IiwgImhBbGlnbiIsICJkaW1lbnNpb25zIiwgInBvc2l0aW9uIiwgInByZXNlbmNlIiwgInJvdGF0ZSIsICJhbmNob3JUeXBlIiwgImJvcmRlciIsICJtYXJnaW4iKTsKICAgIHNldE1pbk1heERpbWVuc2lvbnModGhpcywgc3R5bGUpOwogICAgaWYgKHN0eWxlLm1hcmdpbikgewogICAgICBzdHlsZS5wYWRkaW5nID0gc3R5bGUubWFyZ2luOwogICAgICBkZWxldGUgc3R5bGUubWFyZ2luOwogICAgfQogICAgY29uc3QgY2xhc3NOYW1lcyA9IFsieGZhRHJhdyJdOwogICAgaWYgKHRoaXMuZm9udCkgewogICAgICBjbGFzc05hbWVzLnB1c2goInhmYUZvbnQiKTsKICAgIH0KICAgIGlmIChpc1ByaW50T25seSh0aGlzKSkgewogICAgICBjbGFzc05hbWVzLnB1c2goInhmYVByaW50T25seSIpOwogICAgfQogICAgY29uc3QgYXR0cmlidXRlcyA9IHsKICAgICAgc3R5bGUsCiAgICAgIGlkOiB0aGlzWyR1aWRdLAogICAgICBjbGFzczogY2xhc3NOYW1lcwogICAgfTsKICAgIGlmICh0aGlzLm5hbWUpIHsKICAgICAgYXR0cmlidXRlcy54ZmFOYW1lID0gdGhpcy5uYW1lOwogICAgfQogICAgY29uc3QgaHRtbCA9IHsKICAgICAgbmFtZTogImRpdiIsCiAgICAgIGF0dHJpYnV0ZXMsCiAgICAgIGNoaWxkcmVuOiBbXQogICAgfTsKICAgIGFwcGx5QXNzaXN0KHRoaXMsIGF0dHJpYnV0ZXMpOwogICAgY29uc3QgYmJveCA9IGNvbXB1dGVCYm94KHRoaXMsIGh0bWwsIGF2YWlsYWJsZVNwYWNlKTsKICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZSA/IHRoaXMudmFsdWVbJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpLmh0bWwgOiBudWxsOwogICAgaWYgKHZhbHVlID09PSBudWxsKSB7CiAgICAgIHRoaXMudyA9IHNhdmVkVzsKICAgICAgdGhpcy5oID0gc2F2ZWRIOwogICAgICB0aGlzWyRwb3BQYXJhXSgpOwogICAgICByZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKGNyZWF0ZVdyYXBwZXIodGhpcywgaHRtbCksIGJib3gpOwogICAgfQogICAgaHRtbC5jaGlsZHJlbi5wdXNoKHZhbHVlKTsKICAgIHNldFBhcmEodGhpcywgc3R5bGUsIHZhbHVlKTsKICAgIHRoaXMudyA9IHNhdmVkVzsKICAgIHRoaXMuaCA9IHNhdmVkSDsKICAgIHRoaXNbJHBvcFBhcmFdKCk7CiAgICByZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKGNyZWF0ZVdyYXBwZXIodGhpcywgaHRtbCksIGJib3gpOwogIH0KfQpjbGFzcyBFZGdlIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgImVkZ2UiLCB0cnVlKTsKICAgIHRoaXMuY2FwID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMuY2FwLCBbInNxdWFyZSIsICJidXR0IiwgInJvdW5kIl0pOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLnByZXNlbmNlID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMucHJlc2VuY2UsIFsidmlzaWJsZSIsICJoaWRkZW4iLCAiaW5hY3RpdmUiLCAiaW52aXNpYmxlIl0pOwogICAgdGhpcy5zdHJva2UgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5zdHJva2UsIFsic29saWQiLCAiZGFzaERvdCIsICJkYXNoRG90RG90IiwgImRhc2hlZCIsICJkb3R0ZWQiLCAiZW1ib3NzZWQiLCAiZXRjaGVkIiwgImxvd2VyZWQiLCAicmFpc2VkIl0pOwogICAgdGhpcy50aGlja25lc3MgPSBnZXRNZWFzdXJlbWVudChhdHRyaWJ1dGVzLnRoaWNrbmVzcywgIjAuNXB0Iik7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogICAgdGhpcy5jb2xvciA9IG51bGw7CiAgICB0aGlzLmV4dHJhcyA9IG51bGw7CiAgfQogIFskdG9TdHlsZV0oKSB7CiAgICBjb25zdCBzdHlsZSA9IHRvU3R5bGUodGhpcywgInZpc2liaWxpdHkiKTsKICAgIE9iamVjdC5hc3NpZ24oc3R5bGUsIHsKICAgICAgbGluZWNhcDogdGhpcy5jYXAsCiAgICAgIHdpZHRoOiBtZWFzdXJlVG9TdHJpbmcodGhpcy50aGlja25lc3MpLAogICAgICBjb2xvcjogdGhpcy5jb2xvciA/IHRoaXMuY29sb3JbJHRvU3R5bGVdKCkgOiAiIzAwMDAwMCIsCiAgICAgIHN0eWxlOiAiIgogICAgfSk7CiAgICBpZiAodGhpcy5wcmVzZW5jZSAhPT0gInZpc2libGUiKSB7CiAgICAgIHN0eWxlLnN0eWxlID0gIm5vbmUiOwogICAgfSBlbHNlIHsKICAgICAgc3dpdGNoICh0aGlzLnN0cm9rZSkgewogICAgICAgIGNhc2UgInNvbGlkIjoKICAgICAgICAgIHN0eWxlLnN0eWxlID0gInNvbGlkIjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImRhc2hEb3QiOgogICAgICAgICAgc3R5bGUuc3R5bGUgPSAiZGFzaGVkIjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImRhc2hEb3REb3QiOgogICAgICAgICAgc3R5bGUuc3R5bGUgPSAiZGFzaGVkIjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImRhc2hlZCI6CiAgICAgICAgICBzdHlsZS5zdHlsZSA9ICJkYXNoZWQiOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiZG90dGVkIjoKICAgICAgICAgIHN0eWxlLnN0eWxlID0gImRvdHRlZCI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJlbWJvc3NlZCI6CiAgICAgICAgICBzdHlsZS5zdHlsZSA9ICJyaWRnZSI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJldGNoZWQiOgogICAgICAgICAgc3R5bGUuc3R5bGUgPSAiZ3Jvb3ZlIjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImxvd2VyZWQiOgogICAgICAgICAgc3R5bGUuc3R5bGUgPSAiaW5zZXQiOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAicmFpc2VkIjoKICAgICAgICAgIHN0eWxlLnN0eWxlID0gIm91dHNldCI7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHN0eWxlOwogIH0KfQpjbGFzcyBFbmNvZGluZyBleHRlbmRzIE9wdGlvbk9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJlbmNvZGluZyIsIFsiYWRiZS54NTA5LnJzYV9zaGExIiwgImFkYmUucGtjczcuZGV0YWNoZWQiLCAiYWRiZS5wa2NzNy5zaGExIl0pOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogIH0KfQpjbGFzcyBFbmNvZGluZ3MgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCAiZW5jb2RpbmdzIiwgdHJ1ZSk7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMudHlwZSA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLnR5cGUsIFsib3B0aW9uYWwiLCAicmVxdWlyZWQiXSk7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogICAgdGhpcy5lbmNvZGluZyA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogIH0KfQpjbGFzcyBFbmNyeXB0IGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgImVuY3J5cHQiLCB0cnVlKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICAgIHRoaXMuY2VydGlmaWNhdGUgPSBudWxsOwogIH0KfQpjbGFzcyBFbmNyeXB0RGF0YSBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJlbmNyeXB0RGF0YSIsIHRydWUpOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLm9wZXJhdGlvbiA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLm9wZXJhdGlvbiwgWyJlbmNyeXB0IiwgImRlY3J5cHQiXSk7CiAgICB0aGlzLnRhcmdldCA9IGF0dHJpYnV0ZXMudGFyZ2V0IHx8ICIiOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICAgIHRoaXMuZmlsdGVyID0gbnVsbDsKICAgIHRoaXMubWFuaWZlc3QgPSBudWxsOwogIH0KfQpjbGFzcyBFbmNyeXB0aW9uIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgImVuY3J5cHRpb24iLCB0cnVlKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy50eXBlID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMudHlwZSwgWyJvcHRpb25hbCIsICJyZXF1aXJlZCJdKTsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgICB0aGlzLmNlcnRpZmljYXRlID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgfQp9CmNsYXNzIEVuY3J5cHRpb25NZXRob2QgZXh0ZW5kcyBPcHRpb25PYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCAiZW5jcnlwdGlvbk1ldGhvZCIsIFsiIiwgIkFFUzI1Ni1DQkMiLCAiVFJJUExFREVTLUNCQyIsICJBRVMxMjgtQ0JDIiwgIkFFUzE5Mi1DQkMiXSk7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgfQp9CmNsYXNzIEVuY3J5cHRpb25NZXRob2RzIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgImVuY3J5cHRpb25NZXRob2RzIiwgdHJ1ZSk7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMudHlwZSA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLnR5cGUsIFsib3B0aW9uYWwiLCAicmVxdWlyZWQiXSk7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogICAgdGhpcy5lbmNyeXB0aW9uTWV0aG9kID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgfQp9CmNsYXNzIEV2ZW50IGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgImV2ZW50IiwgdHJ1ZSk7CiAgICB0aGlzLmFjdGl2aXR5ID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMuYWN0aXZpdHksIFsiY2xpY2siLCAiY2hhbmdlIiwgImRvY0Nsb3NlIiwgImRvY1JlYWR5IiwgImVudGVyIiwgImV4aXQiLCAiZnVsbCIsICJpbmRleENoYW5nZSIsICJpbml0aWFsaXplIiwgIm1vdXNlRG93biIsICJtb3VzZUVudGVyIiwgIm1vdXNlRXhpdCIsICJtb3VzZVVwIiwgInBvc3RFeGVjdXRlIiwgInBvc3RPcGVuIiwgInBvc3RQcmludCIsICJwb3N0U2F2ZSIsICJwb3N0U2lnbiIsICJwb3N0U3VibWl0IiwgInByZUV4ZWN1dGUiLCAicHJlT3BlbiIsICJwcmVQcmludCIsICJwcmVTYXZlIiwgInByZVNpZ24iLCAicHJlU3VibWl0IiwgInJlYWR5IiwgInZhbGlkYXRpb25TdGF0ZSJdKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy5saXN0ZW4gPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5saXN0ZW4sIFsicmVmT25seSIsICJyZWZBbmREZXNjZW5kZW50cyJdKTsKICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8fCAiIjsKICAgIHRoaXMucmVmID0gYXR0cmlidXRlcy5yZWYgfHwgIiI7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogICAgdGhpcy5leHRyYXMgPSBudWxsOwogICAgdGhpcy5lbmNyeXB0RGF0YSA9IG51bGw7CiAgICB0aGlzLmV4ZWN1dGUgPSBudWxsOwogICAgdGhpcy5zY3JpcHQgPSBudWxsOwogICAgdGhpcy5zaWduRGF0YSA9IG51bGw7CiAgICB0aGlzLnN1Ym1pdCA9IG51bGw7CiAgfQp9CmNsYXNzIEV4RGF0YSBleHRlbmRzIENvbnRlbnRPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCAiZXhEYXRhIik7CiAgICB0aGlzLmNvbnRlbnRUeXBlID0gYXR0cmlidXRlcy5jb250ZW50VHlwZSB8fCAiIjsKICAgIHRoaXMuaHJlZiA9IGF0dHJpYnV0ZXMuaHJlZiB8fCAiIjsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy5tYXhMZW5ndGggPSBnZXRJbnRlZ2VyKHsKICAgICAgZGF0YTogYXR0cmlidXRlcy5tYXhMZW5ndGgsCiAgICAgIGRlZmF1bHRWYWx1ZTogLTEsCiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPj0gLTEKICAgIH0pOwogICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8ICIiOwogICAgdGhpcy5yaWQgPSBhdHRyaWJ1dGVzLnJpZCB8fCAiIjsKICAgIHRoaXMudHJhbnNmZXJFbmNvZGluZyA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLnRyYW5zZmVyRW5jb2RpbmcsIFsibm9uZSIsICJiYXNlNjQiLCAicGFja2FnZSJdKTsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgfQogIFskaXNDREFUQVhtbF0oKSB7CiAgICByZXR1cm4gdGhpcy5jb250ZW50VHlwZSA9PT0gInRleHQvaHRtbCI7CiAgfQogIFskb25DaGlsZF0oY2hpbGQpIHsKICAgIGlmICh0aGlzLmNvbnRlbnRUeXBlID09PSAidGV4dC9odG1sIiAmJiBjaGlsZFskbmFtZXNwYWNlSWRdID09PSBOYW1lc3BhY2VJZHMueGh0bWwuaWQpIHsKICAgICAgdGhpc1skY29udGVudF0gPSBjaGlsZDsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAodGhpcy5jb250ZW50VHlwZSA9PT0gInRleHQveG1sIikgewogICAgICB0aGlzWyRjb250ZW50XSA9IGNoaWxkOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CiAgWyR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKSB7CiAgICBpZiAodGhpcy5jb250ZW50VHlwZSAhPT0gInRleHQvaHRtbCIgfHwgIXRoaXNbJGNvbnRlbnRdKSB7CiAgICAgIHJldHVybiBIVE1MUmVzdWx0LkVNUFRZOwogICAgfQogICAgcmV0dXJuIHRoaXNbJGNvbnRlbnRdWyR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKTsKICB9Cn0KY2xhc3MgRXhPYmplY3QgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCAiZXhPYmplY3QiLCB0cnVlKTsKICAgIHRoaXMuYXJjaGl2ZSA9IGF0dHJpYnV0ZXMuYXJjaGl2ZSB8fCAiIjsKICAgIHRoaXMuY2xhc3NJZCA9IGF0dHJpYnV0ZXMuY2xhc3NJZCB8fCAiIjsKICAgIHRoaXMuY29kZUJhc2UgPSBhdHRyaWJ1dGVzLmNvZGVCYXNlIHx8ICIiOwogICAgdGhpcy5jb2RlVHlwZSA9IGF0dHJpYnV0ZXMuY29kZVR5cGUgfHwgIiI7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8fCAiIjsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgICB0aGlzLmV4dHJhcyA9IG51bGw7CiAgICB0aGlzLmJvb2xlYW4gPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuZGF0ZSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5kYXRlVGltZSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5kZWNpbWFsID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmV4RGF0YSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5leE9iamVjdCA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5mbG9hdCA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5pbWFnZSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5pbnRlZ2VyID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLnRleHQgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMudGltZSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogIH0KfQpjbGFzcyBFeGNsR3JvdXAgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCAiZXhjbEdyb3VwIiwgdHJ1ZSk7CiAgICB0aGlzLmFjY2VzcyA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLmFjY2VzcywgWyJvcGVuIiwgIm5vbkludGVyYWN0aXZlIiwgInByb3RlY3RlZCIsICJyZWFkT25seSJdKTsKICAgIHRoaXMuYWNjZXNzS2V5ID0gYXR0cmlidXRlcy5hY2Nlc3NLZXkgfHwgIiI7CiAgICB0aGlzLmFuY2hvclR5cGUgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5hbmNob3JUeXBlLCBbInRvcExlZnQiLCAiYm90dG9tQ2VudGVyIiwgImJvdHRvbUxlZnQiLCAiYm90dG9tUmlnaHQiLCAibWlkZGxlQ2VudGVyIiwgIm1pZGRsZUxlZnQiLCAibWlkZGxlUmlnaHQiLCAidG9wQ2VudGVyIiwgInRvcFJpZ2h0Il0pOwogICAgdGhpcy5jb2xTcGFuID0gZ2V0SW50ZWdlcih7CiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuY29sU3BhbiwKICAgICAgZGVmYXVsdFZhbHVlOiAxLAogICAgICB2YWxpZGF0ZTogbiA9PiBuID49IDEgfHwgbiA9PT0gLTEKICAgIH0pOwogICAgdGhpcy5oID0gYXR0cmlidXRlcy5oID8gZ2V0TWVhc3VyZW1lbnQoYXR0cmlidXRlcy5oKSA6ICIiOwogICAgdGhpcy5oQWxpZ24gPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5oQWxpZ24sIFsibGVmdCIsICJjZW50ZXIiLCAianVzdGlmeSIsICJqdXN0aWZ5QWxsIiwgInJhZGl4IiwgInJpZ2h0Il0pOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLmxheW91dCA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLmxheW91dCwgWyJwb3NpdGlvbiIsICJsci10YiIsICJybC1yb3ciLCAicmwtdGIiLCAicm93IiwgInRhYmxlIiwgInRiIl0pOwogICAgdGhpcy5tYXhIID0gZ2V0TWVhc3VyZW1lbnQoYXR0cmlidXRlcy5tYXhILCAiMHB0Iik7CiAgICB0aGlzLm1heFcgPSBnZXRNZWFzdXJlbWVudChhdHRyaWJ1dGVzLm1heFcsICIwcHQiKTsKICAgIHRoaXMubWluSCA9IGdldE1lYXN1cmVtZW50KGF0dHJpYnV0ZXMubWluSCwgIjBwdCIpOwogICAgdGhpcy5taW5XID0gZ2V0TWVhc3VyZW1lbnQoYXR0cmlidXRlcy5taW5XLCAiMHB0Iik7CiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgIiI7CiAgICB0aGlzLnByZXNlbmNlID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMucHJlc2VuY2UsIFsidmlzaWJsZSIsICJoaWRkZW4iLCAiaW5hY3RpdmUiLCAiaW52aXNpYmxlIl0pOwogICAgdGhpcy5yZWxldmFudCA9IGdldFJlbGV2YW50KGF0dHJpYnV0ZXMucmVsZXZhbnQpOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICAgIHRoaXMudyA9IGF0dHJpYnV0ZXMudyA/IGdldE1lYXN1cmVtZW50KGF0dHJpYnV0ZXMudykgOiAiIjsKICAgIHRoaXMueCA9IGdldE1lYXN1cmVtZW50KGF0dHJpYnV0ZXMueCwgIjBwdCIpOwogICAgdGhpcy55ID0gZ2V0TWVhc3VyZW1lbnQoYXR0cmlidXRlcy55LCAiMHB0Iik7CiAgICB0aGlzLmFzc2lzdCA9IG51bGw7CiAgICB0aGlzLmJpbmQgPSBudWxsOwogICAgdGhpcy5ib3JkZXIgPSBudWxsOwogICAgdGhpcy5jYWxjdWxhdGUgPSBudWxsOwogICAgdGhpcy5jYXB0aW9uID0gbnVsbDsKICAgIHRoaXMuZGVzYyA9IG51bGw7CiAgICB0aGlzLmV4dHJhcyA9IG51bGw7CiAgICB0aGlzLm1hcmdpbiA9IG51bGw7CiAgICB0aGlzLnBhcmEgPSBudWxsOwogICAgdGhpcy50cmF2ZXJzYWwgPSBudWxsOwogICAgdGhpcy52YWxpZGF0ZSA9IG51bGw7CiAgICB0aGlzLmNvbm5lY3QgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuZXZlbnQgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuZmllbGQgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuc2V0UHJvcGVydHkgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICB9CiAgWyRpc0JpbmRhYmxlXSgpIHsKICAgIHJldHVybiB0cnVlOwogIH0KICBbJGhhc1NldHRhYmxlVmFsdWVdKCkgewogICAgcmV0dXJuIHRydWU7CiAgfQogIFskc2V0VmFsdWVdKHZhbHVlKSB7CiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHRoaXMuZmllbGQuY2hpbGRyZW4pIHsKICAgICAgaWYgKCFmaWVsZC52YWx1ZSkgewogICAgICAgIGNvbnN0IG5vZGVWYWx1ZSA9IG5ldyBWYWx1ZSh7fSk7CiAgICAgICAgZmllbGRbJGFwcGVuZENoaWxkXShub2RlVmFsdWUpOwogICAgICAgIGZpZWxkLnZhbHVlID0gbm9kZVZhbHVlOwogICAgICB9CiAgICAgIGZpZWxkLnZhbHVlWyRzZXRWYWx1ZV0odmFsdWUpOwogICAgfQogIH0KICBbJGlzVGhlcmVNb3JlV2lkdGhdKCkgewogICAgcmV0dXJuIHRoaXMubGF5b3V0LmVuZHNXaXRoKCItdGIiKSAmJiB0aGlzWyRleHRyYV0uYXR0ZW1wdCA9PT0gMCAmJiB0aGlzWyRleHRyYV0ubnVtYmVySW5MaW5lID4gMCB8fCB0aGlzWyRnZXRQYXJlbnRdKClbJGlzVGhlcmVNb3JlV2lkdGhdKCk7CiAgfQogIFskaXNTcGxpdHRhYmxlXSgpIHsKICAgIGNvbnN0IHBhcmVudCA9IHRoaXNbJGdldFN1YmZvcm1QYXJlbnRdKCk7CiAgICBpZiAoIXBhcmVudFskaXNTcGxpdHRhYmxlXSgpKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmICh0aGlzWyRleHRyYV0uX2lzU3BsaXR0YWJsZSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgIHJldHVybiB0aGlzWyRleHRyYV0uX2lzU3BsaXR0YWJsZTsKICAgIH0KICAgIGlmICh0aGlzLmxheW91dCA9PT0gInBvc2l0aW9uIiB8fCB0aGlzLmxheW91dC5pbmNsdWRlcygicm93IikpIHsKICAgICAgdGhpc1skZXh0cmFdLl9pc1NwbGl0dGFibGUgPSBmYWxzZTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKHBhcmVudC5sYXlvdXQ/LmVuZHNXaXRoKCItdGIiKSAmJiBwYXJlbnRbJGV4dHJhXS5udW1iZXJJbkxpbmUgIT09IDApIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdGhpc1skZXh0cmFdLl9pc1NwbGl0dGFibGUgPSB0cnVlOwogICAgcmV0dXJuIHRydWU7CiAgfQogIFskZmx1c2hIVE1MXSgpIHsKICAgIHJldHVybiBmbHVzaEhUTUwodGhpcyk7CiAgfQogIFskYWRkSFRNTF0oaHRtbCwgYmJveCkgewogICAgYWRkSFRNTCh0aGlzLCBodG1sLCBiYm94KTsKICB9CiAgWyRnZXRBdmFpbGFibGVTcGFjZV0oKSB7CiAgICByZXR1cm4gZ2V0QXZhaWxhYmxlU3BhY2UodGhpcyk7CiAgfQogIFskdG9IVE1MXShhdmFpbGFibGVTcGFjZSkgewogICAgc2V0VGFiSW5kZXgodGhpcyk7CiAgICBpZiAodGhpcy5wcmVzZW5jZSA9PT0gImhpZGRlbiIgfHwgdGhpcy5wcmVzZW5jZSA9PT0gImluYWN0aXZlIiB8fCB0aGlzLmggPT09IDAgfHwgdGhpcy53ID09PSAwKSB7CiAgICAgIHJldHVybiBIVE1MUmVzdWx0LkVNUFRZOwogICAgfQogICAgZml4RGltZW5zaW9ucyh0aGlzKTsKICAgIGNvbnN0IGNoaWxkcmVuID0gW107CiAgICBjb25zdCBhdHRyaWJ1dGVzID0gewogICAgICBpZDogdGhpc1skdWlkXSwKICAgICAgY2xhc3M6IFtdCiAgICB9OwogICAgc2V0QWNjZXNzKHRoaXMsIGF0dHJpYnV0ZXMuY2xhc3MpOwogICAgaWYgKCF0aGlzWyRleHRyYV0pIHsKICAgICAgdGhpc1skZXh0cmFdID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgIH0KICAgIE9iamVjdC5hc3NpZ24odGhpc1skZXh0cmFdLCB7CiAgICAgIGNoaWxkcmVuLAogICAgICBhdHRyaWJ1dGVzLAogICAgICBhdHRlbXB0OiAwLAogICAgICBsaW5lOiBudWxsLAogICAgICBudW1iZXJJbkxpbmU6IDAsCiAgICAgIGF2YWlsYWJsZVNwYWNlOiB7CiAgICAgICAgd2lkdGg6IE1hdGgubWluKHRoaXMudyB8fCBJbmZpbml0eSwgYXZhaWxhYmxlU3BhY2Uud2lkdGgpLAogICAgICAgIGhlaWdodDogTWF0aC5taW4odGhpcy5oIHx8IEluZmluaXR5LCBhdmFpbGFibGVTcGFjZS5oZWlnaHQpCiAgICAgIH0sCiAgICAgIHdpZHRoOiAwLAogICAgICBoZWlnaHQ6IDAsCiAgICAgIHByZXZIZWlnaHQ6IDAsCiAgICAgIGN1cnJlbnRXaWR0aDogMAogICAgfSk7CiAgICBjb25zdCBpc1NwbGl0dGFibGUgPSB0aGlzWyRpc1NwbGl0dGFibGVdKCk7CiAgICBpZiAoIWlzU3BsaXR0YWJsZSkgewogICAgICBzZXRGaXJzdFVuc3BsaXR0YWJsZSh0aGlzKTsKICAgIH0KICAgIGlmICghY2hlY2tEaW1lbnNpb25zKHRoaXMsIGF2YWlsYWJsZVNwYWNlKSkgewogICAgICByZXR1cm4gSFRNTFJlc3VsdC5GQUlMVVJFOwogICAgfQogICAgY29uc3QgZmlsdGVyID0gbmV3IFNldChbImZpZWxkIl0pOwogICAgaWYgKHRoaXMubGF5b3V0LmluY2x1ZGVzKCJyb3ciKSkgewogICAgICBjb25zdCBjb2x1bW5XaWR0aHMgPSB0aGlzWyRnZXRTdWJmb3JtUGFyZW50XSgpLmNvbHVtbldpZHRoczsKICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29sdW1uV2lkdGhzKSAmJiBjb2x1bW5XaWR0aHMubGVuZ3RoID4gMCkgewogICAgICAgIHRoaXNbJGV4dHJhXS5jb2x1bW5XaWR0aHMgPSBjb2x1bW5XaWR0aHM7CiAgICAgICAgdGhpc1skZXh0cmFdLmN1cnJlbnRDb2x1bW4gPSAwOwogICAgICB9CiAgICB9CiAgICBjb25zdCBzdHlsZSA9IHRvU3R5bGUodGhpcywgImFuY2hvclR5cGUiLCAiZGltZW5zaW9ucyIsICJwb3NpdGlvbiIsICJwcmVzZW5jZSIsICJib3JkZXIiLCAibWFyZ2luIiwgImhBbGlnbiIpOwogICAgY29uc3QgY2xhc3NOYW1lcyA9IFsieGZhRXhjbGdyb3VwIl07CiAgICBjb25zdCBjbCA9IGxheW91dENsYXNzKHRoaXMpOwogICAgaWYgKGNsKSB7CiAgICAgIGNsYXNzTmFtZXMucHVzaChjbCk7CiAgICB9CiAgICBpZiAoaXNQcmludE9ubHkodGhpcykpIHsKICAgICAgY2xhc3NOYW1lcy5wdXNoKCJ4ZmFQcmludE9ubHkiKTsKICAgIH0KICAgIGF0dHJpYnV0ZXMuc3R5bGUgPSBzdHlsZTsKICAgIGF0dHJpYnV0ZXMuY2xhc3MgPSBjbGFzc05hbWVzOwogICAgaWYgKHRoaXMubmFtZSkgewogICAgICBhdHRyaWJ1dGVzLnhmYU5hbWUgPSB0aGlzLm5hbWU7CiAgICB9CiAgICB0aGlzWyRwdXNoUGFyYV0oKTsKICAgIGNvbnN0IGlzTHJUYiA9IHRoaXMubGF5b3V0ID09PSAibHItdGIiIHx8IHRoaXMubGF5b3V0ID09PSAicmwtdGIiOwogICAgY29uc3QgbWF4UnVuID0gaXNMclRiID8gTUFYX0FUVEVNUFRTX0ZPUl9MUlRCX0xBWU9VVCA6IDE7CiAgICBmb3IgKDsgdGhpc1skZXh0cmFdLmF0dGVtcHQgPCBtYXhSdW47IHRoaXNbJGV4dHJhXS5hdHRlbXB0KyspIHsKICAgICAgaWYgKGlzTHJUYiAmJiB0aGlzWyRleHRyYV0uYXR0ZW1wdCA9PT0gTUFYX0FUVEVNUFRTX0ZPUl9MUlRCX0xBWU9VVCAtIDEpIHsKICAgICAgICB0aGlzWyRleHRyYV0ubnVtYmVySW5MaW5lID0gMDsKICAgICAgfQogICAgICBjb25zdCByZXN1bHQgPSB0aGlzWyRjaGlsZHJlblRvSFRNTF0oewogICAgICAgIGZpbHRlciwKICAgICAgICBpbmNsdWRlOiB0cnVlCiAgICAgIH0pOwogICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBpZiAocmVzdWx0LmlzQnJlYWsoKSkgewogICAgICAgIHRoaXNbJHBvcFBhcmFdKCk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgICBpZiAoaXNMclRiICYmIHRoaXNbJGV4dHJhXS5hdHRlbXB0ID09PSAwICYmIHRoaXNbJGV4dHJhXS5udW1iZXJJbkxpbmUgPT09IDAgJiYgIXRoaXNbJGdldFRlbXBsYXRlUm9vdF0oKVskZXh0cmFdLm5vTGF5b3V0RmFpbHVyZSkgewogICAgICAgIHRoaXNbJGV4dHJhXS5hdHRlbXB0ID0gbWF4UnVuOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICB0aGlzWyRwb3BQYXJhXSgpOwogICAgaWYgKCFpc1NwbGl0dGFibGUpIHsKICAgICAgdW5zZXRGaXJzdFVuc3BsaXR0YWJsZSh0aGlzKTsKICAgIH0KICAgIGlmICh0aGlzWyRleHRyYV0uYXR0ZW1wdCA9PT0gbWF4UnVuKSB7CiAgICAgIGlmICghaXNTcGxpdHRhYmxlKSB7CiAgICAgICAgZGVsZXRlIHRoaXNbJGV4dHJhXTsKICAgICAgfQogICAgICByZXR1cm4gSFRNTFJlc3VsdC5GQUlMVVJFOwogICAgfQogICAgbGV0IG1hcmdpbkggPSAwOwogICAgbGV0IG1hcmdpblYgPSAwOwogICAgaWYgKHRoaXMubWFyZ2luKSB7CiAgICAgIG1hcmdpbkggPSB0aGlzLm1hcmdpbi5sZWZ0SW5zZXQgKyB0aGlzLm1hcmdpbi5yaWdodEluc2V0OwogICAgICBtYXJnaW5WID0gdGhpcy5tYXJnaW4udG9wSW5zZXQgKyB0aGlzLm1hcmdpbi5ib3R0b21JbnNldDsKICAgIH0KICAgIGNvbnN0IHdpZHRoID0gTWF0aC5tYXgodGhpc1skZXh0cmFdLndpZHRoICsgbWFyZ2luSCwgdGhpcy53IHx8IDApOwogICAgY29uc3QgaGVpZ2h0ID0gTWF0aC5tYXgodGhpc1skZXh0cmFdLmhlaWdodCArIG1hcmdpblYsIHRoaXMuaCB8fCAwKTsKICAgIGNvbnN0IGJib3ggPSBbdGhpcy54LCB0aGlzLnksIHdpZHRoLCBoZWlnaHRdOwogICAgaWYgKHRoaXMudyA9PT0gIiIpIHsKICAgICAgc3R5bGUud2lkdGggPSBtZWFzdXJlVG9TdHJpbmcod2lkdGgpOwogICAgfQogICAgaWYgKHRoaXMuaCA9PT0gIiIpIHsKICAgICAgc3R5bGUuaGVpZ2h0ID0gbWVhc3VyZVRvU3RyaW5nKGhlaWdodCk7CiAgICB9CiAgICBjb25zdCBodG1sID0gewogICAgICBuYW1lOiAiZGl2IiwKICAgICAgYXR0cmlidXRlcywKICAgICAgY2hpbGRyZW4KICAgIH07CiAgICBhcHBseUFzc2lzdCh0aGlzLCBhdHRyaWJ1dGVzKTsKICAgIGRlbGV0ZSB0aGlzWyRleHRyYV07CiAgICByZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKGNyZWF0ZVdyYXBwZXIodGhpcywgaHRtbCksIGJib3gpOwogIH0KfQpjbGFzcyBFeGVjdXRlIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgImV4ZWN1dGUiKTsKICAgIHRoaXMuY29ubmVjdGlvbiA9IGF0dHJpYnV0ZXMuY29ubmVjdGlvbiB8fCAiIjsKICAgIHRoaXMuZXhlY3V0ZVR5cGUgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5leGVjdXRlVHlwZSwgWyJpbXBvcnQiLCAicmVtZXJnZSJdKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy5ydW5BdCA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLnJ1bkF0LCBbImNsaWVudCIsICJib3RoIiwgInNlcnZlciJdKTsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgfQp9CmNsYXNzIEV4dHJhcyBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJleHRyYXMiLCB0cnVlKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8ICIiOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICAgIHRoaXMuYm9vbGVhbiA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5kYXRlID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmRhdGVUaW1lID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmRlY2ltYWwgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuZXhEYXRhID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmV4dHJhcyA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5mbG9hdCA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5pbWFnZSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5pbnRlZ2VyID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLnRleHQgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMudGltZSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogIH0KfQpjbGFzcyBGaWVsZCBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJmaWVsZCIsIHRydWUpOwogICAgdGhpcy5hY2Nlc3MgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5hY2Nlc3MsIFsib3BlbiIsICJub25JbnRlcmFjdGl2ZSIsICJwcm90ZWN0ZWQiLCAicmVhZE9ubHkiXSk7CiAgICB0aGlzLmFjY2Vzc0tleSA9IGF0dHJpYnV0ZXMuYWNjZXNzS2V5IHx8ICIiOwogICAgdGhpcy5hbmNob3JUeXBlID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMuYW5jaG9yVHlwZSwgWyJ0b3BMZWZ0IiwgImJvdHRvbUNlbnRlciIsICJib3R0b21MZWZ0IiwgImJvdHRvbVJpZ2h0IiwgIm1pZGRsZUNlbnRlciIsICJtaWRkbGVMZWZ0IiwgIm1pZGRsZVJpZ2h0IiwgInRvcENlbnRlciIsICJ0b3BSaWdodCJdKTsKICAgIHRoaXMuY29sU3BhbiA9IGdldEludGVnZXIoewogICAgICBkYXRhOiBhdHRyaWJ1dGVzLmNvbFNwYW4sCiAgICAgIGRlZmF1bHRWYWx1ZTogMSwKICAgICAgdmFsaWRhdGU6IG4gPT4gbiA+PSAxIHx8IG4gPT09IC0xCiAgICB9KTsKICAgIHRoaXMuaCA9IGF0dHJpYnV0ZXMuaCA/IGdldE1lYXN1cmVtZW50KGF0dHJpYnV0ZXMuaCkgOiAiIjsKICAgIHRoaXMuaEFsaWduID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMuaEFsaWduLCBbImxlZnQiLCAiY2VudGVyIiwgImp1c3RpZnkiLCAianVzdGlmeUFsbCIsICJyYWRpeCIsICJyaWdodCJdKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy5sb2NhbGUgPSBhdHRyaWJ1dGVzLmxvY2FsZSB8fCAiIjsKICAgIHRoaXMubWF4SCA9IGdldE1lYXN1cmVtZW50KGF0dHJpYnV0ZXMubWF4SCwgIjBwdCIpOwogICAgdGhpcy5tYXhXID0gZ2V0TWVhc3VyZW1lbnQoYXR0cmlidXRlcy5tYXhXLCAiMHB0Iik7CiAgICB0aGlzLm1pbkggPSBnZXRNZWFzdXJlbWVudChhdHRyaWJ1dGVzLm1pbkgsICIwcHQiKTsKICAgIHRoaXMubWluVyA9IGdldE1lYXN1cmVtZW50KGF0dHJpYnV0ZXMubWluVywgIjBwdCIpOwogICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8ICIiOwogICAgdGhpcy5wcmVzZW5jZSA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLnByZXNlbmNlLCBbInZpc2libGUiLCAiaGlkZGVuIiwgImluYWN0aXZlIiwgImludmlzaWJsZSJdKTsKICAgIHRoaXMucmVsZXZhbnQgPSBnZXRSZWxldmFudChhdHRyaWJ1dGVzLnJlbGV2YW50KTsKICAgIHRoaXMucm90YXRlID0gZ2V0SW50ZWdlcih7CiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMucm90YXRlLAogICAgICBkZWZhdWx0VmFsdWU6IDAsCiAgICAgIHZhbGlkYXRlOiB4ID0+IHggJSA5MCA9PT0gMAogICAgfSk7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogICAgdGhpcy53ID0gYXR0cmlidXRlcy53ID8gZ2V0TWVhc3VyZW1lbnQoYXR0cmlidXRlcy53KSA6ICIiOwogICAgdGhpcy54ID0gZ2V0TWVhc3VyZW1lbnQoYXR0cmlidXRlcy54LCAiMHB0Iik7CiAgICB0aGlzLnkgPSBnZXRNZWFzdXJlbWVudChhdHRyaWJ1dGVzLnksICIwcHQiKTsKICAgIHRoaXMuYXNzaXN0ID0gbnVsbDsKICAgIHRoaXMuYmluZCA9IG51bGw7CiAgICB0aGlzLmJvcmRlciA9IG51bGw7CiAgICB0aGlzLmNhbGN1bGF0ZSA9IG51bGw7CiAgICB0aGlzLmNhcHRpb24gPSBudWxsOwogICAgdGhpcy5kZXNjID0gbnVsbDsKICAgIHRoaXMuZXh0cmFzID0gbnVsbDsKICAgIHRoaXMuZm9udCA9IG51bGw7CiAgICB0aGlzLmZvcm1hdCA9IG51bGw7CiAgICB0aGlzLml0ZW1zID0gbmV3IFhGQU9iamVjdEFycmF5KDIpOwogICAgdGhpcy5rZWVwID0gbnVsbDsKICAgIHRoaXMubWFyZ2luID0gbnVsbDsKICAgIHRoaXMucGFyYSA9IG51bGw7CiAgICB0aGlzLnRyYXZlcnNhbCA9IG51bGw7CiAgICB0aGlzLnVpID0gbnVsbDsKICAgIHRoaXMudmFsaWRhdGUgPSBudWxsOwogICAgdGhpcy52YWx1ZSA9IG51bGw7CiAgICB0aGlzLmJpbmRJdGVtcyA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5jb25uZWN0ID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmV2ZW50ID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLnNldFByb3BlcnR5ID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgfQogIFskaXNCaW5kYWJsZV0oKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgWyRzZXRWYWx1ZV0odmFsdWUpIHsKICAgIF9zZXRWYWx1ZSh0aGlzLCB2YWx1ZSk7CiAgfQogIFskdG9IVE1MXShhdmFpbGFibGVTcGFjZSkgewogICAgc2V0VGFiSW5kZXgodGhpcyk7CiAgICBpZiAoIXRoaXMudWkpIHsKICAgICAgdGhpcy51aSA9IG5ldyBVaSh7fSk7CiAgICAgIHRoaXMudWlbJGdsb2JhbERhdGFdID0gdGhpc1skZ2xvYmFsRGF0YV07CiAgICAgIHRoaXNbJGFwcGVuZENoaWxkXSh0aGlzLnVpKTsKICAgICAgbGV0IG5vZGU7CiAgICAgIHN3aXRjaCAodGhpcy5pdGVtcy5jaGlsZHJlbi5sZW5ndGgpIHsKICAgICAgICBjYXNlIDA6CiAgICAgICAgICBub2RlID0gbmV3IFRleHRFZGl0KHt9KTsKICAgICAgICAgIHRoaXMudWkudGV4dEVkaXQgPSBub2RlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgbm9kZSA9IG5ldyBDaGVja0J1dHRvbih7fSk7CiAgICAgICAgICB0aGlzLnVpLmNoZWNrQnV0dG9uID0gbm9kZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMjoKICAgICAgICAgIG5vZGUgPSBuZXcgQ2hvaWNlTGlzdCh7fSk7CiAgICAgICAgICB0aGlzLnVpLmNob2ljZUxpc3QgPSBub2RlOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgdGhpcy51aVskYXBwZW5kQ2hpbGRdKG5vZGUpOwogICAgfQogICAgaWYgKCF0aGlzLnVpIHx8IHRoaXMucHJlc2VuY2UgPT09ICJoaWRkZW4iIHx8IHRoaXMucHJlc2VuY2UgPT09ICJpbmFjdGl2ZSIgfHwgdGhpcy5oID09PSAwIHx8IHRoaXMudyA9PT0gMCkgewogICAgICByZXR1cm4gSFRNTFJlc3VsdC5FTVBUWTsKICAgIH0KICAgIGlmICh0aGlzLmNhcHRpb24pIHsKICAgICAgZGVsZXRlIHRoaXMuY2FwdGlvblskZXh0cmFdOwogICAgfQogICAgdGhpc1skcHVzaFBhcmFdKCk7CiAgICBjb25zdCBjYXB0aW9uID0gdGhpcy5jYXB0aW9uID8gdGhpcy5jYXB0aW9uWyR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKS5odG1sIDogbnVsbDsKICAgIGNvbnN0IHNhdmVkVyA9IHRoaXMudzsKICAgIGNvbnN0IHNhdmVkSCA9IHRoaXMuaDsKICAgIGxldCBtYXJnaW5IID0gMDsKICAgIGxldCBtYXJnaW5WID0gMDsKICAgIGlmICh0aGlzLm1hcmdpbikgewogICAgICBtYXJnaW5IID0gdGhpcy5tYXJnaW4ubGVmdEluc2V0ICsgdGhpcy5tYXJnaW4ucmlnaHRJbnNldDsKICAgICAgbWFyZ2luViA9IHRoaXMubWFyZ2luLnRvcEluc2V0ICsgdGhpcy5tYXJnaW4uYm90dG9tSW5zZXQ7CiAgICB9CiAgICBsZXQgYm9yZGVyRGltcyA9IG51bGw7CiAgICBpZiAodGhpcy53ID09PSAiIiB8fCB0aGlzLmggPT09ICIiKSB7CiAgICAgIGxldCB3aWR0aCA9IG51bGw7CiAgICAgIGxldCBoZWlnaHQgPSBudWxsOwogICAgICBsZXQgdWlXID0gMDsKICAgICAgbGV0IHVpSCA9IDA7CiAgICAgIGlmICh0aGlzLnVpLmNoZWNrQnV0dG9uKSB7CiAgICAgICAgdWlXID0gdWlIID0gdGhpcy51aS5jaGVja0J1dHRvbi5zaXplOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IHsKICAgICAgICAgIHcsCiAgICAgICAgICBoCiAgICAgICAgfSA9IGxheW91dE5vZGUodGhpcywgYXZhaWxhYmxlU3BhY2UpOwogICAgICAgIGlmICh3ICE9PSBudWxsKSB7CiAgICAgICAgICB1aVcgPSB3OwogICAgICAgICAgdWlIID0gaDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdWlIID0gZm9udHNfZ2V0TWV0cmljcyh0aGlzLmZvbnQsIHRydWUpLmxpbmVOb0dhcDsKICAgICAgICB9CiAgICAgIH0KICAgICAgYm9yZGVyRGltcyA9IGdldEJvcmRlckRpbXModGhpcy51aVskZ2V0RXh0cmFdKCkpOwogICAgICB1aVcgKz0gYm9yZGVyRGltcy53OwogICAgICB1aUggKz0gYm9yZGVyRGltcy5oOwogICAgICBpZiAodGhpcy5jYXB0aW9uKSB7CiAgICAgICAgY29uc3QgewogICAgICAgICAgdywKICAgICAgICAgIGgsCiAgICAgICAgICBpc0Jyb2tlbgogICAgICAgIH0gPSB0aGlzLmNhcHRpb25bJGdldEV4dHJhXShhdmFpbGFibGVTcGFjZSk7CiAgICAgICAgaWYgKGlzQnJva2VuICYmIHRoaXNbJGdldFN1YmZvcm1QYXJlbnRdKClbJGlzVGhlcmVNb3JlV2lkdGhdKCkpIHsKICAgICAgICAgIHRoaXNbJHBvcFBhcmFdKCk7CiAgICAgICAgICByZXR1cm4gSFRNTFJlc3VsdC5GQUlMVVJFOwogICAgICAgIH0KICAgICAgICB3aWR0aCA9IHc7CiAgICAgICAgaGVpZ2h0ID0gaDsKICAgICAgICBzd2l0Y2ggKHRoaXMuY2FwdGlvbi5wbGFjZW1lbnQpIHsKICAgICAgICAgIGNhc2UgImxlZnQiOgogICAgICAgICAgY2FzZSAicmlnaHQiOgogICAgICAgICAgY2FzZSAiaW5saW5lIjoKICAgICAgICAgICAgd2lkdGggKz0gdWlXOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgInRvcCI6CiAgICAgICAgICBjYXNlICJib3R0b20iOgogICAgICAgICAgICBoZWlnaHQgKz0gdWlIOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgd2lkdGggPSB1aVc7CiAgICAgICAgaGVpZ2h0ID0gdWlIOwogICAgICB9CiAgICAgIGlmICh3aWR0aCAmJiB0aGlzLncgPT09ICIiKSB7CiAgICAgICAgd2lkdGggKz0gbWFyZ2luSDsKICAgICAgICB0aGlzLncgPSBNYXRoLm1pbih0aGlzLm1heFcgPD0gMCA/IEluZmluaXR5IDogdGhpcy5tYXhXLCB0aGlzLm1pblcgKyAxIDwgd2lkdGggPyB3aWR0aCA6IHRoaXMubWluVyk7CiAgICAgIH0KICAgICAgaWYgKGhlaWdodCAmJiB0aGlzLmggPT09ICIiKSB7CiAgICAgICAgaGVpZ2h0ICs9IG1hcmdpblY7CiAgICAgICAgdGhpcy5oID0gTWF0aC5taW4odGhpcy5tYXhIIDw9IDAgPyBJbmZpbml0eSA6IHRoaXMubWF4SCwgdGhpcy5taW5IICsgMSA8IGhlaWdodCA/IGhlaWdodCA6IHRoaXMubWluSCk7CiAgICAgIH0KICAgIH0KICAgIHRoaXNbJHBvcFBhcmFdKCk7CiAgICBmaXhEaW1lbnNpb25zKHRoaXMpOwogICAgc2V0Rmlyc3RVbnNwbGl0dGFibGUodGhpcyk7CiAgICBpZiAoIWNoZWNrRGltZW5zaW9ucyh0aGlzLCBhdmFpbGFibGVTcGFjZSkpIHsKICAgICAgdGhpcy53ID0gc2F2ZWRXOwogICAgICB0aGlzLmggPSBzYXZlZEg7CiAgICAgIHRoaXNbJHBvcFBhcmFdKCk7CiAgICAgIHJldHVybiBIVE1MUmVzdWx0LkZBSUxVUkU7CiAgICB9CiAgICB1bnNldEZpcnN0VW5zcGxpdHRhYmxlKHRoaXMpOwogICAgY29uc3Qgc3R5bGUgPSB0b1N0eWxlKHRoaXMsICJmb250IiwgImRpbWVuc2lvbnMiLCAicG9zaXRpb24iLCAicm90YXRlIiwgImFuY2hvclR5cGUiLCAicHJlc2VuY2UiLCAibWFyZ2luIiwgImhBbGlnbiIpOwogICAgc2V0TWluTWF4RGltZW5zaW9ucyh0aGlzLCBzdHlsZSk7CiAgICBjb25zdCBjbGFzc05hbWVzID0gWyJ4ZmFGaWVsZCJdOwogICAgaWYgKHRoaXMuZm9udCkgewogICAgICBjbGFzc05hbWVzLnB1c2goInhmYUZvbnQiKTsKICAgIH0KICAgIGlmIChpc1ByaW50T25seSh0aGlzKSkgewogICAgICBjbGFzc05hbWVzLnB1c2goInhmYVByaW50T25seSIpOwogICAgfQogICAgY29uc3QgYXR0cmlidXRlcyA9IHsKICAgICAgc3R5bGUsCiAgICAgIGlkOiB0aGlzWyR1aWRdLAogICAgICBjbGFzczogY2xhc3NOYW1lcwogICAgfTsKICAgIGlmIChzdHlsZS5tYXJnaW4pIHsKICAgICAgc3R5bGUucGFkZGluZyA9IHN0eWxlLm1hcmdpbjsKICAgICAgZGVsZXRlIHN0eWxlLm1hcmdpbjsKICAgIH0KICAgIHNldEFjY2Vzcyh0aGlzLCBjbGFzc05hbWVzKTsKICAgIGlmICh0aGlzLm5hbWUpIHsKICAgICAgYXR0cmlidXRlcy54ZmFOYW1lID0gdGhpcy5uYW1lOwogICAgfQogICAgY29uc3QgY2hpbGRyZW4gPSBbXTsKICAgIGNvbnN0IGh0bWwgPSB7CiAgICAgIG5hbWU6ICJkaXYiLAogICAgICBhdHRyaWJ1dGVzLAogICAgICBjaGlsZHJlbgogICAgfTsKICAgIGFwcGx5QXNzaXN0KHRoaXMsIGF0dHJpYnV0ZXMpOwogICAgY29uc3QgYm9yZGVyU3R5bGUgPSB0aGlzLmJvcmRlciA/IHRoaXMuYm9yZGVyWyR0b1N0eWxlXSgpIDogbnVsbDsKICAgIGNvbnN0IGJib3ggPSBjb21wdXRlQmJveCh0aGlzLCBodG1sLCBhdmFpbGFibGVTcGFjZSk7CiAgICBjb25zdCB1aSA9IHRoaXMudWlbJHRvSFRNTF0oKS5odG1sOwogICAgaWYgKCF1aSkgewogICAgICBPYmplY3QuYXNzaWduKHN0eWxlLCBib3JkZXJTdHlsZSk7CiAgICAgIHJldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3MoY3JlYXRlV3JhcHBlcih0aGlzLCBodG1sKSwgYmJveCk7CiAgICB9CiAgICBpZiAodGhpc1skdGFiSW5kZXhdKSB7CiAgICAgIGlmICh1aS5jaGlsZHJlbj8uWzBdKSB7CiAgICAgICAgdWkuY2hpbGRyZW5bMF0uYXR0cmlidXRlcy50YWJpbmRleCA9IHRoaXNbJHRhYkluZGV4XTsKICAgICAgfSBlbHNlIHsKICAgICAgICB1aS5hdHRyaWJ1dGVzLnRhYmluZGV4ID0gdGhpc1skdGFiSW5kZXhdOwogICAgICB9CiAgICB9CiAgICBpZiAoIXVpLmF0dHJpYnV0ZXMuc3R5bGUpIHsKICAgICAgdWkuYXR0cmlidXRlcy5zdHlsZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICB9CiAgICBsZXQgYUVsZW1lbnQgPSBudWxsOwogICAgaWYgKHRoaXMudWkuYnV0dG9uKSB7CiAgICAgIGlmICh1aS5jaGlsZHJlbi5sZW5ndGggPT09IDEpIHsKICAgICAgICBbYUVsZW1lbnRdID0gdWkuY2hpbGRyZW4uc3BsaWNlKDAsIDEpOwogICAgICB9CiAgICAgIE9iamVjdC5hc3NpZ24odWkuYXR0cmlidXRlcy5zdHlsZSwgYm9yZGVyU3R5bGUpOwogICAgfSBlbHNlIHsKICAgICAgT2JqZWN0LmFzc2lnbihzdHlsZSwgYm9yZGVyU3R5bGUpOwogICAgfQogICAgY2hpbGRyZW4ucHVzaCh1aSk7CiAgICBpZiAodGhpcy52YWx1ZSkgewogICAgICBpZiAodGhpcy51aS5pbWFnZUVkaXQpIHsKICAgICAgICB1aS5jaGlsZHJlbi5wdXNoKHRoaXMudmFsdWVbJHRvSFRNTF0oKS5odG1sKTsKICAgICAgfSBlbHNlIGlmICghdGhpcy51aS5idXR0b24pIHsKICAgICAgICBsZXQgdmFsdWUgPSAiIjsKICAgICAgICBpZiAodGhpcy52YWx1ZS5leERhdGEpIHsKICAgICAgICAgIHZhbHVlID0gdGhpcy52YWx1ZS5leERhdGFbJHRleHRdKCk7CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbHVlLnRleHQpIHsKICAgICAgICAgIHZhbHVlID0gdGhpcy52YWx1ZS50ZXh0WyRnZXRFeHRyYV0oKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3QgaHRtbFZhbHVlID0gdGhpcy52YWx1ZVskdG9IVE1MXSgpLmh0bWw7CiAgICAgICAgICBpZiAoaHRtbFZhbHVlICE9PSBudWxsKSB7CiAgICAgICAgICAgIHZhbHVlID0gaHRtbFZhbHVlLmNoaWxkcmVuWzBdLnZhbHVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAodGhpcy51aS50ZXh0RWRpdCAmJiB0aGlzLnZhbHVlLnRleHQ/Lm1heENoYXJzKSB7CiAgICAgICAgICB1aS5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLm1heExlbmd0aCA9IHRoaXMudmFsdWUudGV4dC5tYXhDaGFyczsKICAgICAgICB9CiAgICAgICAgaWYgKHZhbHVlKSB7CiAgICAgICAgICBpZiAodGhpcy51aS5udW1lcmljRWRpdCkgewogICAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpOwogICAgICAgICAgICB2YWx1ZSA9IGlzTmFOKHZhbHVlKSA/ICIiIDogdmFsdWUudG9TdHJpbmcoKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh1aS5jaGlsZHJlblswXS5uYW1lID09PSAidGV4dGFyZWEiKSB7CiAgICAgICAgICAgIHVpLmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMudGV4dENvbnRlbnQgPSB2YWx1ZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHVpLmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMudmFsdWUgPSB2YWx1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmICghdGhpcy51aS5pbWFnZUVkaXQgJiYgdWkuY2hpbGRyZW4/LlswXSAmJiB0aGlzLmgpIHsKICAgICAgYm9yZGVyRGltcyA9IGJvcmRlckRpbXMgfHwgZ2V0Qm9yZGVyRGltcyh0aGlzLnVpWyRnZXRFeHRyYV0oKSk7CiAgICAgIGxldCBjYXB0aW9uSGVpZ2h0ID0gMDsKICAgICAgaWYgKHRoaXMuY2FwdGlvbiAmJiBbInRvcCIsICJib3R0b20iXS5pbmNsdWRlcyh0aGlzLmNhcHRpb24ucGxhY2VtZW50KSkgewogICAgICAgIGNhcHRpb25IZWlnaHQgPSB0aGlzLmNhcHRpb24ucmVzZXJ2ZTsKICAgICAgICBpZiAoY2FwdGlvbkhlaWdodCA8PSAwKSB7CiAgICAgICAgICBjYXB0aW9uSGVpZ2h0ID0gdGhpcy5jYXB0aW9uWyRnZXRFeHRyYV0oYXZhaWxhYmxlU3BhY2UpLmg7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGlucHV0SGVpZ2h0ID0gdGhpcy5oIC0gY2FwdGlvbkhlaWdodCAtIG1hcmdpblYgLSBib3JkZXJEaW1zLmg7CiAgICAgICAgdWkuY2hpbGRyZW5bMF0uYXR0cmlidXRlcy5zdHlsZS5oZWlnaHQgPSBtZWFzdXJlVG9TdHJpbmcoaW5wdXRIZWlnaHQpOwogICAgICB9IGVsc2UgewogICAgICAgIHVpLmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICB9CiAgICB9CiAgICBpZiAoYUVsZW1lbnQpIHsKICAgICAgdWkuY2hpbGRyZW4ucHVzaChhRWxlbWVudCk7CiAgICB9CiAgICBpZiAoIWNhcHRpb24pIHsKICAgICAgaWYgKHVpLmF0dHJpYnV0ZXMuY2xhc3MpIHsKICAgICAgICB1aS5hdHRyaWJ1dGVzLmNsYXNzLnB1c2goInhmYUxlZnQiKTsKICAgICAgfQogICAgICB0aGlzLncgPSBzYXZlZFc7CiAgICAgIHRoaXMuaCA9IHNhdmVkSDsKICAgICAgcmV0dXJuIEhUTUxSZXN1bHQuc3VjY2VzcyhjcmVhdGVXcmFwcGVyKHRoaXMsIGh0bWwpLCBiYm94KTsKICAgIH0KICAgIGlmICh0aGlzLnVpLmJ1dHRvbikgewogICAgICBpZiAoc3R5bGUucGFkZGluZykgewogICAgICAgIGRlbGV0ZSBzdHlsZS5wYWRkaW5nOwogICAgICB9CiAgICAgIGlmIChjYXB0aW9uLm5hbWUgPT09ICJkaXYiKSB7CiAgICAgICAgY2FwdGlvbi5uYW1lID0gInNwYW4iOwogICAgICB9CiAgICAgIHVpLmNoaWxkcmVuLnB1c2goY2FwdGlvbik7CiAgICAgIHJldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3MoaHRtbCwgYmJveCk7CiAgICB9IGVsc2UgaWYgKHRoaXMudWkuY2hlY2tCdXR0b24pIHsKICAgICAgY2FwdGlvbi5hdHRyaWJ1dGVzLmNsYXNzWzBdID0gInhmYUNhcHRpb25Gb3JDaGVja0J1dHRvbiI7CiAgICB9CiAgICBpZiAoIXVpLmF0dHJpYnV0ZXMuY2xhc3MpIHsKICAgICAgdWkuYXR0cmlidXRlcy5jbGFzcyA9IFtdOwogICAgfQogICAgdWkuY2hpbGRyZW4uc3BsaWNlKDAsIDAsIGNhcHRpb24pOwogICAgc3dpdGNoICh0aGlzLmNhcHRpb24ucGxhY2VtZW50KSB7CiAgICAgIGNhc2UgImxlZnQiOgogICAgICAgIHVpLmF0dHJpYnV0ZXMuY2xhc3MucHVzaCgieGZhTGVmdCIpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJyaWdodCI6CiAgICAgICAgdWkuYXR0cmlidXRlcy5jbGFzcy5wdXNoKCJ4ZmFSaWdodCIpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJ0b3AiOgogICAgICAgIHVpLmF0dHJpYnV0ZXMuY2xhc3MucHVzaCgieGZhVG9wIik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgImJvdHRvbSI6CiAgICAgICAgdWkuYXR0cmlidXRlcy5jbGFzcy5wdXNoKCJ4ZmFCb3R0b20iKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiaW5saW5lIjoKICAgICAgICB1aS5hdHRyaWJ1dGVzLmNsYXNzLnB1c2goInhmYUxlZnQiKTsKICAgICAgICBicmVhazsKICAgIH0KICAgIHRoaXMudyA9IHNhdmVkVzsKICAgIHRoaXMuaCA9IHNhdmVkSDsKICAgIHJldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3MoY3JlYXRlV3JhcHBlcih0aGlzLCBodG1sKSwgYmJveCk7CiAgfQp9CmNsYXNzIEZpbGwgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCAiZmlsbCIsIHRydWUpOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLnByZXNlbmNlID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMucHJlc2VuY2UsIFsidmlzaWJsZSIsICJoaWRkZW4iLCAiaW5hY3RpdmUiLCAiaW52aXNpYmxlIl0pOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICAgIHRoaXMuY29sb3IgPSBudWxsOwogICAgdGhpcy5leHRyYXMgPSBudWxsOwogICAgdGhpcy5saW5lYXIgPSBudWxsOwogICAgdGhpcy5wYXR0ZXJuID0gbnVsbDsKICAgIHRoaXMucmFkaWFsID0gbnVsbDsKICAgIHRoaXMuc29saWQgPSBudWxsOwogICAgdGhpcy5zdGlwcGxlID0gbnVsbDsKICB9CiAgWyR0b1N0eWxlXSgpIHsKICAgIGNvbnN0IHBhcmVudCA9IHRoaXNbJGdldFBhcmVudF0oKTsKICAgIGNvbnN0IGdyYW5kcGEgPSBwYXJlbnRbJGdldFBhcmVudF0oKTsKICAgIGNvbnN0IGdncmFuZHBhID0gZ3JhbmRwYVskZ2V0UGFyZW50XSgpOwogICAgY29uc3Qgc3R5bGUgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgbGV0IHByb3BOYW1lID0gImNvbG9yIjsKICAgIGxldCBhbHRQcm9wTmFtZSA9IHByb3BOYW1lOwogICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIEJvcmRlcikgewogICAgICBwcm9wTmFtZSA9ICJiYWNrZ3JvdW5kLWNvbG9yIjsKICAgICAgYWx0UHJvcE5hbWUgPSAiYmFja2dyb3VuZCI7CiAgICAgIGlmIChnZ3JhbmRwYSBpbnN0YW5jZW9mIFVpKSB7CiAgICAgICAgc3R5bGUuYmFja2dyb3VuZENvbG9yID0gIndoaXRlIjsKICAgICAgfQogICAgfQogICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIFJlY3RhbmdsZSB8fCBwYXJlbnQgaW5zdGFuY2VvZiBBcmMpIHsKICAgICAgcHJvcE5hbWUgPSBhbHRQcm9wTmFtZSA9ICJmaWxsIjsKICAgICAgc3R5bGUuZmlsbCA9ICJ3aGl0ZSI7CiAgICB9CiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpIHsKICAgICAgaWYgKG5hbWUgPT09ICJleHRyYXMiIHx8IG5hbWUgPT09ICJjb2xvciIpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBjb25zdCBvYmogPSB0aGlzW25hbWVdOwogICAgICBpZiAoIShvYmogaW5zdGFuY2VvZiBYRkFPYmplY3QpKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgY29uc3QgY29sb3IgPSBvYmpbJHRvU3R5bGVdKHRoaXMuY29sb3IpOwogICAgICBpZiAoY29sb3IpIHsKICAgICAgICBzdHlsZVtjb2xvci5zdGFydHNXaXRoKCIjIikgPyBwcm9wTmFtZSA6IGFsdFByb3BOYW1lXSA9IGNvbG9yOwogICAgICB9CiAgICAgIHJldHVybiBzdHlsZTsKICAgIH0KICAgIGlmICh0aGlzLmNvbG9yPy52YWx1ZSkgewogICAgICBjb25zdCBjb2xvciA9IHRoaXMuY29sb3JbJHRvU3R5bGVdKCk7CiAgICAgIHN0eWxlW2NvbG9yLnN0YXJ0c1dpdGgoIiMiKSA/IHByb3BOYW1lIDogYWx0UHJvcE5hbWVdID0gY29sb3I7CiAgICB9CiAgICByZXR1cm4gc3R5bGU7CiAgfQp9CmNsYXNzIEZpbHRlciBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJmaWx0ZXIiLCB0cnVlKTsKICAgIHRoaXMuYWRkUmV2b2NhdGlvbkluZm8gPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5hZGRSZXZvY2F0aW9uSW5mbywgWyIiLCAicmVxdWlyZWQiLCAib3B0aW9uYWwiLCAibm9uZSJdKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8ICIiOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICAgIHRoaXMudmVyc2lvbiA9IGdldEludGVnZXIoewogICAgICBkYXRhOiB0aGlzLnZlcnNpb24sCiAgICAgIGRlZmF1bHRWYWx1ZTogNSwKICAgICAgdmFsaWRhdGU6IHggPT4geCA+PSAxICYmIHggPD0gNQogICAgfSk7CiAgICB0aGlzLmFwcGVhcmFuY2VGaWx0ZXIgPSBudWxsOwogICAgdGhpcy5jZXJ0aWZpY2F0ZXMgPSBudWxsOwogICAgdGhpcy5kaWdlc3RNZXRob2RzID0gbnVsbDsKICAgIHRoaXMuZW5jb2RpbmdzID0gbnVsbDsKICAgIHRoaXMuZW5jcnlwdGlvbk1ldGhvZHMgPSBudWxsOwogICAgdGhpcy5oYW5kbGVyID0gbnVsbDsKICAgIHRoaXMubG9ja0RvY3VtZW50ID0gbnVsbDsKICAgIHRoaXMubWRwID0gbnVsbDsKICAgIHRoaXMucmVhc29ucyA9IG51bGw7CiAgICB0aGlzLnRpbWVTdGFtcCA9IG51bGw7CiAgfQp9CmNsYXNzIEZsb2F0IGV4dGVuZHMgQ29udGVudE9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJmbG9hdCIpOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgIiI7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogIH0KICBbJGZpbmFsaXplXSgpIHsKICAgIGNvbnN0IG51bWJlciA9IHBhcnNlRmxvYXQodGhpc1skY29udGVudF0udHJpbSgpKTsKICAgIHRoaXNbJGNvbnRlbnRdID0gaXNOYU4obnVtYmVyKSA/IG51bGwgOiBudW1iZXI7CiAgfQogIFskdG9IVE1MXShhdmFpbGFibGVTcGFjZSkgewogICAgcmV0dXJuIHZhbHVlVG9IdG1sKHRoaXNbJGNvbnRlbnRdICE9PSBudWxsID8gdGhpc1skY29udGVudF0udG9TdHJpbmcoKSA6ICIiKTsKICB9Cn0KY2xhc3MgdGVtcGxhdGVfRm9udCBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJmb250IiwgdHJ1ZSk7CiAgICB0aGlzLmJhc2VsaW5lU2hpZnQgPSBnZXRNZWFzdXJlbWVudChhdHRyaWJ1dGVzLmJhc2VsaW5lU2hpZnQpOwogICAgdGhpcy5mb250SG9yaXpvbnRhbFNjYWxlID0gZ2V0RmxvYXQoewogICAgICBkYXRhOiBhdHRyaWJ1dGVzLmZvbnRIb3Jpem9udGFsU2NhbGUsCiAgICAgIGRlZmF1bHRWYWx1ZTogMTAwLAogICAgICB2YWxpZGF0ZTogeCA9PiB4ID49IDAKICAgIH0pOwogICAgdGhpcy5mb250VmVydGljYWxTY2FsZSA9IGdldEZsb2F0KHsKICAgICAgZGF0YTogYXR0cmlidXRlcy5mb250VmVydGljYWxTY2FsZSwKICAgICAgZGVmYXVsdFZhbHVlOiAxMDAsCiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPj0gMAogICAgfSk7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMua2VybmluZ01vZGUgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5rZXJuaW5nTW9kZSwgWyJub25lIiwgInBhaXIiXSk7CiAgICB0aGlzLmxldHRlclNwYWNpbmcgPSBnZXRNZWFzdXJlbWVudChhdHRyaWJ1dGVzLmxldHRlclNwYWNpbmcsICIwIik7CiAgICB0aGlzLmxpbmVUaHJvdWdoID0gZ2V0SW50ZWdlcih7CiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMubGluZVRocm91Z2gsCiAgICAgIGRlZmF1bHRWYWx1ZTogMCwKICAgICAgdmFsaWRhdGU6IHggPT4geCA9PT0gMSB8fCB4ID09PSAyCiAgICB9KTsKICAgIHRoaXMubGluZVRocm91Z2hQZXJpb2QgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5saW5lVGhyb3VnaFBlcmlvZCwgWyJhbGwiLCAid29yZCJdKTsKICAgIHRoaXMub3ZlcmxpbmUgPSBnZXRJbnRlZ2VyKHsKICAgICAgZGF0YTogYXR0cmlidXRlcy5vdmVybGluZSwKICAgICAgZGVmYXVsdFZhbHVlOiAwLAogICAgICB2YWxpZGF0ZTogeCA9PiB4ID09PSAxIHx8IHggPT09IDIKICAgIH0pOwogICAgdGhpcy5vdmVybGluZVBlcmlvZCA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLm92ZXJsaW5lUGVyaW9kLCBbImFsbCIsICJ3b3JkIl0pOwogICAgdGhpcy5wb3N0dXJlID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMucG9zdHVyZSwgWyJub3JtYWwiLCAiaXRhbGljIl0pOwogICAgdGhpcy5zaXplID0gZ2V0TWVhc3VyZW1lbnQoYXR0cmlidXRlcy5zaXplLCAiMTBwdCIpOwogICAgdGhpcy50eXBlZmFjZSA9IGF0dHJpYnV0ZXMudHlwZWZhY2UgfHwgIkNvdXJpZXIiOwogICAgdGhpcy51bmRlcmxpbmUgPSBnZXRJbnRlZ2VyKHsKICAgICAgZGF0YTogYXR0cmlidXRlcy51bmRlcmxpbmUsCiAgICAgIGRlZmF1bHRWYWx1ZTogMCwKICAgICAgdmFsaWRhdGU6IHggPT4geCA9PT0gMSB8fCB4ID09PSAyCiAgICB9KTsKICAgIHRoaXMudW5kZXJsaW5lUGVyaW9kID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMudW5kZXJsaW5lUGVyaW9kLCBbImFsbCIsICJ3b3JkIl0pOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICAgIHRoaXMud2VpZ2h0ID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMud2VpZ2h0LCBbIm5vcm1hbCIsICJib2xkIl0pOwogICAgdGhpcy5leHRyYXMgPSBudWxsOwogICAgdGhpcy5maWxsID0gbnVsbDsKICB9CiAgWyRjbGVhbl0oYnVpbGRlcikgewogICAgc3VwZXJbJGNsZWFuXShidWlsZGVyKTsKICAgIHRoaXNbJGdsb2JhbERhdGFdLnVzZWRUeXBlZmFjZXMuYWRkKHRoaXMudHlwZWZhY2UpOwogIH0KICBbJHRvU3R5bGVdKCkgewogICAgY29uc3Qgc3R5bGUgPSB0b1N0eWxlKHRoaXMsICJmaWxsIik7CiAgICBjb25zdCBjb2xvciA9IHN0eWxlLmNvbG9yOwogICAgaWYgKGNvbG9yKSB7CiAgICAgIGlmIChjb2xvciA9PT0gIiMwMDAwMDAiKSB7CiAgICAgICAgZGVsZXRlIHN0eWxlLmNvbG9yOwogICAgICB9IGVsc2UgaWYgKCFjb2xvci5zdGFydHNXaXRoKCIjIikpIHsKICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kID0gY29sb3I7CiAgICAgICAgc3R5bGUuYmFja2dyb3VuZENsaXAgPSAidGV4dCI7CiAgICAgICAgc3R5bGUuY29sb3IgPSAidHJhbnNwYXJlbnQiOwogICAgICB9CiAgICB9CiAgICBpZiAodGhpcy5iYXNlbGluZVNoaWZ0KSB7CiAgICAgIHN0eWxlLnZlcnRpY2FsQWxpZ24gPSBtZWFzdXJlVG9TdHJpbmcodGhpcy5iYXNlbGluZVNoaWZ0KTsKICAgIH0KICAgIHN0eWxlLmZvbnRLZXJuaW5nID0gdGhpcy5rZXJuaW5nTW9kZSA9PT0gIm5vbmUiID8gIm5vbmUiIDogIm5vcm1hbCI7CiAgICBzdHlsZS5sZXR0ZXJTcGFjaW5nID0gbWVhc3VyZVRvU3RyaW5nKHRoaXMubGV0dGVyU3BhY2luZyk7CiAgICBpZiAodGhpcy5saW5lVGhyb3VnaCAhPT0gMCkgewogICAgICBzdHlsZS50ZXh0RGVjb3JhdGlvbiA9ICJsaW5lLXRocm91Z2giOwogICAgICBpZiAodGhpcy5saW5lVGhyb3VnaCA9PT0gMikgewogICAgICAgIHN0eWxlLnRleHREZWNvcmF0aW9uU3R5bGUgPSAiZG91YmxlIjsKICAgICAgfQogICAgfQogICAgaWYgKHRoaXMub3ZlcmxpbmUgIT09IDApIHsKICAgICAgc3R5bGUudGV4dERlY29yYXRpb24gPSAib3ZlcmxpbmUiOwogICAgICBpZiAodGhpcy5vdmVybGluZSA9PT0gMikgewogICAgICAgIHN0eWxlLnRleHREZWNvcmF0aW9uU3R5bGUgPSAiZG91YmxlIjsKICAgICAgfQogICAgfQogICAgc3R5bGUuZm9udFN0eWxlID0gdGhpcy5wb3N0dXJlOwogICAgc3R5bGUuZm9udFNpemUgPSBtZWFzdXJlVG9TdHJpbmcoMC45OSAqIHRoaXMuc2l6ZSk7CiAgICBzZXRGb250RmFtaWx5KHRoaXMsIHRoaXMsIHRoaXNbJGdsb2JhbERhdGFdLmZvbnRGaW5kZXIsIHN0eWxlKTsKICAgIGlmICh0aGlzLnVuZGVybGluZSAhPT0gMCkgewogICAgICBzdHlsZS50ZXh0RGVjb3JhdGlvbiA9ICJ1bmRlcmxpbmUiOwogICAgICBpZiAodGhpcy51bmRlcmxpbmUgPT09IDIpIHsKICAgICAgICBzdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlID0gImRvdWJsZSI7CiAgICAgIH0KICAgIH0KICAgIHN0eWxlLmZvbnRXZWlnaHQgPSB0aGlzLndlaWdodDsKICAgIHJldHVybiBzdHlsZTsKICB9Cn0KY2xhc3MgRm9ybWF0IGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgImZvcm1hdCIsIHRydWUpOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogICAgdGhpcy5leHRyYXMgPSBudWxsOwogICAgdGhpcy5waWN0dXJlID0gbnVsbDsKICB9Cn0KY2xhc3MgSGFuZGxlciBleHRlbmRzIFN0cmluZ09iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJoYW5kbGVyIik7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMudHlwZSA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLnR5cGUsIFsib3B0aW9uYWwiLCAicmVxdWlyZWQiXSk7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogIH0KfQpjbGFzcyBIeXBoZW5hdGlvbiBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJoeXBoZW5hdGlvbiIpOwogICAgdGhpcy5leGNsdWRlQWxsQ2FwcyA9IGdldEludGVnZXIoewogICAgICBkYXRhOiBhdHRyaWJ1dGVzLmV4Y2x1ZGVBbGxDYXBzLAogICAgICBkZWZhdWx0VmFsdWU6IDAsCiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPT09IDEKICAgIH0pOwogICAgdGhpcy5leGNsdWRlSW5pdGlhbENhcCA9IGdldEludGVnZXIoewogICAgICBkYXRhOiBhdHRyaWJ1dGVzLmV4Y2x1ZGVJbml0aWFsQ2FwLAogICAgICBkZWZhdWx0VmFsdWU6IDAsCiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPT09IDEKICAgIH0pOwogICAgdGhpcy5oeXBoZW5hdGUgPSBnZXRJbnRlZ2VyKHsKICAgICAgZGF0YTogYXR0cmlidXRlcy5oeXBoZW5hdGUsCiAgICAgIGRlZmF1bHRWYWx1ZTogMCwKICAgICAgdmFsaWRhdGU6IHggPT4geCA9PT0gMQogICAgfSk7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMucHVzaENoYXJhY3RlckNvdW50ID0gZ2V0SW50ZWdlcih7CiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMucHVzaENoYXJhY3RlckNvdW50LAogICAgICBkZWZhdWx0VmFsdWU6IDMsCiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPj0gMAogICAgfSk7CiAgICB0aGlzLnJlbWFpbkNoYXJhY3RlckNvdW50ID0gZ2V0SW50ZWdlcih7CiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMucmVtYWluQ2hhcmFjdGVyQ291bnQsCiAgICAgIGRlZmF1bHRWYWx1ZTogMywKICAgICAgdmFsaWRhdGU6IHggPT4geCA+PSAwCiAgICB9KTsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgICB0aGlzLndvcmRDaGFyYWN0ZXJDb3VudCA9IGdldEludGVnZXIoewogICAgICBkYXRhOiBhdHRyaWJ1dGVzLndvcmRDaGFyYWN0ZXJDb3VudCwKICAgICAgZGVmYXVsdFZhbHVlOiA3LAogICAgICB2YWxpZGF0ZTogeCA9PiB4ID49IDAKICAgIH0pOwogIH0KfQpjbGFzcyBJbWFnZSBleHRlbmRzIFN0cmluZ09iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJpbWFnZSIpOwogICAgdGhpcy5hc3BlY3QgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5hc3BlY3QsIFsiZml0IiwgImFjdHVhbCIsICJoZWlnaHQiLCAibm9uZSIsICJ3aWR0aCJdKTsKICAgIHRoaXMuY29udGVudFR5cGUgPSBhdHRyaWJ1dGVzLmNvbnRlbnRUeXBlIHx8ICIiOwogICAgdGhpcy5ocmVmID0gYXR0cmlidXRlcy5ocmVmIHx8ICIiOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgIiI7CiAgICB0aGlzLnRyYW5zZmVyRW5jb2RpbmcgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy50cmFuc2ZlckVuY29kaW5nLCBbImJhc2U2NCIsICJub25lIiwgInBhY2thZ2UiXSk7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogIH0KICBbJHRvSFRNTF0oKSB7CiAgICBpZiAodGhpcy5jb250ZW50VHlwZSAmJiAhTUlNRVMuaGFzKHRoaXMuY29udGVudFR5cGUudG9Mb3dlckNhc2UoKSkpIHsKICAgICAgcmV0dXJuIEhUTUxSZXN1bHQuRU1QVFk7CiAgICB9CiAgICBsZXQgYnVmZmVyID0gdGhpc1skZ2xvYmFsRGF0YV0uaW1hZ2VzICYmIHRoaXNbJGdsb2JhbERhdGFdLmltYWdlcy5nZXQodGhpcy5ocmVmKTsKICAgIGlmICghYnVmZmVyICYmICh0aGlzLmhyZWYgfHwgIXRoaXNbJGNvbnRlbnRdKSkgewogICAgICByZXR1cm4gSFRNTFJlc3VsdC5FTVBUWTsKICAgIH0KICAgIGlmICghYnVmZmVyICYmIHRoaXMudHJhbnNmZXJFbmNvZGluZyA9PT0gImJhc2U2NCIpIHsKICAgICAgYnVmZmVyID0gZnJvbUJhc2U2NFV0aWwodGhpc1skY29udGVudF0pOwogICAgfQogICAgaWYgKCFidWZmZXIpIHsKICAgICAgcmV0dXJuIEhUTUxSZXN1bHQuRU1QVFk7CiAgICB9CiAgICBpZiAoIXRoaXMuY29udGVudFR5cGUpIHsKICAgICAgZm9yIChjb25zdCBbaGVhZGVyLCB0eXBlXSBvZiBJTUFHRVNfSEVBREVSUykgewogICAgICAgIGlmIChidWZmZXIubGVuZ3RoID4gaGVhZGVyLmxlbmd0aCAmJiBoZWFkZXIuZXZlcnkoKHgsIGkpID0+IHggPT09IGJ1ZmZlcltpXSkpIHsKICAgICAgICAgIHRoaXMuY29udGVudFR5cGUgPSB0eXBlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICghdGhpcy5jb250ZW50VHlwZSkgewogICAgICAgIHJldHVybiBIVE1MUmVzdWx0LkVNUFRZOwogICAgICB9CiAgICB9CiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHsKICAgICAgdHlwZTogdGhpcy5jb250ZW50VHlwZQogICAgfSk7CiAgICBsZXQgc3R5bGU7CiAgICBzd2l0Y2ggKHRoaXMuYXNwZWN0KSB7CiAgICAgIGNhc2UgImZpdCI6CiAgICAgIGNhc2UgImFjdHVhbCI6CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgImhlaWdodCI6CiAgICAgICAgc3R5bGUgPSB7CiAgICAgICAgICBoZWlnaHQ6ICIxMDAlIiwKICAgICAgICAgIG9iamVjdEZpdDogImZpbGwiCiAgICAgICAgfTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAibm9uZSI6CiAgICAgICAgc3R5bGUgPSB7CiAgICAgICAgICB3aWR0aDogIjEwMCUiLAogICAgICAgICAgaGVpZ2h0OiAiMTAwJSIsCiAgICAgICAgICBvYmplY3RGaXQ6ICJmaWxsIgogICAgICAgIH07CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIndpZHRoIjoKICAgICAgICBzdHlsZSA9IHsKICAgICAgICAgIHdpZHRoOiAiMTAwJSIsCiAgICAgICAgICBvYmplY3RGaXQ6ICJmaWxsIgogICAgICAgIH07CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBjb25zdCBwYXJlbnQgPSB0aGlzWyRnZXRQYXJlbnRdKCk7CiAgICByZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHsKICAgICAgbmFtZTogImltZyIsCiAgICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICBjbGFzczogWyJ4ZmFJbWFnZSJdLAogICAgICAgIHN0eWxlLAogICAgICAgIHNyYzogVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKSwKICAgICAgICBhbHQ6IHBhcmVudCA/IGFyaWFMYWJlbChwYXJlbnRbJGdldFBhcmVudF0oKSkgOiBudWxsCiAgICAgIH0KICAgIH0pOwogIH0KfQpjbGFzcyBJbWFnZUVkaXQgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCAiaW1hZ2VFZGl0IiwgdHJ1ZSk7CiAgICB0aGlzLmRhdGEgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5kYXRhLCBbImxpbmsiLCAiZW1iZWQiXSk7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgICB0aGlzLmJvcmRlciA9IG51bGw7CiAgICB0aGlzLmV4dHJhcyA9IG51bGw7CiAgICB0aGlzLm1hcmdpbiA9IG51bGw7CiAgfQogIFskdG9IVE1MXShhdmFpbGFibGVTcGFjZSkgewogICAgaWYgKHRoaXMuZGF0YSA9PT0gImVtYmVkIikgewogICAgICByZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHsKICAgICAgICBuYW1lOiAiZGl2IiwKICAgICAgICBjaGlsZHJlbjogW10sCiAgICAgICAgYXR0cmlidXRlczoge30KICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gSFRNTFJlc3VsdC5FTVBUWTsKICB9Cn0KY2xhc3MgSW50ZWdlciBleHRlbmRzIENvbnRlbnRPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCAiaW50ZWdlciIpOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgIiI7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogIH0KICBbJGZpbmFsaXplXSgpIHsKICAgIGNvbnN0IG51bWJlciA9IHBhcnNlSW50KHRoaXNbJGNvbnRlbnRdLnRyaW0oKSwgMTApOwogICAgdGhpc1skY29udGVudF0gPSBpc05hTihudW1iZXIpID8gbnVsbCA6IG51bWJlcjsKICB9CiAgWyR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKSB7CiAgICByZXR1cm4gdmFsdWVUb0h0bWwodGhpc1skY29udGVudF0gIT09IG51bGwgPyB0aGlzWyRjb250ZW50XS50b1N0cmluZygpIDogIiIpOwogIH0KfQpjbGFzcyBJc3N1ZXJzIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgImlzc3VlcnMiLCB0cnVlKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy50eXBlID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMudHlwZSwgWyJvcHRpb25hbCIsICJyZXF1aXJlZCJdKTsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgICB0aGlzLmNlcnRpZmljYXRlID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgfQp9CmNsYXNzIEl0ZW1zIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgIml0ZW1zIiwgdHJ1ZSk7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8fCAiIjsKICAgIHRoaXMucHJlc2VuY2UgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5wcmVzZW5jZSwgWyJ2aXNpYmxlIiwgImhpZGRlbiIsICJpbmFjdGl2ZSIsICJpbnZpc2libGUiXSk7CiAgICB0aGlzLnJlZiA9IGF0dHJpYnV0ZXMucmVmIHx8ICIiOwogICAgdGhpcy5zYXZlID0gZ2V0SW50ZWdlcih7CiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuc2F2ZSwKICAgICAgZGVmYXVsdFZhbHVlOiAwLAogICAgICB2YWxpZGF0ZTogeCA9PiB4ID09PSAxCiAgICB9KTsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgICB0aGlzLmJvb2xlYW4gPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuZGF0ZSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5kYXRlVGltZSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5kZWNpbWFsID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmV4RGF0YSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5mbG9hdCA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5pbWFnZSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5pbnRlZ2VyID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLnRleHQgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMudGltZSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogIH0KICBbJHRvSFRNTF0oKSB7CiAgICBjb25zdCBvdXRwdXQgPSBbXTsKICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpc1skZ2V0Q2hpbGRyZW5dKCkpIHsKICAgICAgb3V0cHV0LnB1c2goY2hpbGRbJHRleHRdKCkpOwogICAgfQogICAgcmV0dXJuIEhUTUxSZXN1bHQuc3VjY2VzcyhvdXRwdXQpOwogIH0KfQpjbGFzcyBLZWVwIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgImtlZXAiLCB0cnVlKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgY29uc3Qgb3B0aW9ucyA9IFsibm9uZSIsICJjb250ZW50QXJlYSIsICJwYWdlQXJlYSJdOwogICAgdGhpcy5pbnRhY3QgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5pbnRhY3QsIG9wdGlvbnMpOwogICAgdGhpcy5uZXh0ID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMubmV4dCwgb3B0aW9ucyk7CiAgICB0aGlzLnByZXZpb3VzID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMucHJldmlvdXMsIG9wdGlvbnMpOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICAgIHRoaXMuZXh0cmFzID0gbnVsbDsKICB9Cn0KY2xhc3MgS2V5VXNhZ2UgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCAia2V5VXNhZ2UiKTsKICAgIGNvbnN0IG9wdGlvbnMgPSBbIiIsICJ5ZXMiLCAibm8iXTsKICAgIHRoaXMuY3JsU2lnbiA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLmNybFNpZ24sIG9wdGlvbnMpOwogICAgdGhpcy5kYXRhRW5jaXBoZXJtZW50ID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMuZGF0YUVuY2lwaGVybWVudCwgb3B0aW9ucyk7CiAgICB0aGlzLmRlY2lwaGVyT25seSA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLmRlY2lwaGVyT25seSwgb3B0aW9ucyk7CiAgICB0aGlzLmRpZ2l0YWxTaWduYXR1cmUgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5kaWdpdGFsU2lnbmF0dXJlLCBvcHRpb25zKTsKICAgIHRoaXMuZW5jaXBoZXJPbmx5ID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMuZW5jaXBoZXJPbmx5LCBvcHRpb25zKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy5rZXlBZ3JlZW1lbnQgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5rZXlBZ3JlZW1lbnQsIG9wdGlvbnMpOwogICAgdGhpcy5rZXlDZXJ0U2lnbiA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLmtleUNlcnRTaWduLCBvcHRpb25zKTsKICAgIHRoaXMua2V5RW5jaXBoZXJtZW50ID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMua2V5RW5jaXBoZXJtZW50LCBvcHRpb25zKTsKICAgIHRoaXMubm9uUmVwdWRpYXRpb24gPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5ub25SZXB1ZGlhdGlvbiwgb3B0aW9ucyk7CiAgICB0aGlzLnR5cGUgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy50eXBlLCBbIm9wdGlvbmFsIiwgInJlcXVpcmVkIl0pOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICB9Cn0KY2xhc3MgTGluZSBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJsaW5lIiwgdHJ1ZSk7CiAgICB0aGlzLmhhbmQgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5oYW5kLCBbImV2ZW4iLCAibGVmdCIsICJyaWdodCJdKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy5zbG9wZSA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLnNsb3BlLCBbIlxcIiwgIi8iXSk7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogICAgdGhpcy5lZGdlID0gbnVsbDsKICB9CiAgWyR0b0hUTUxdKCkgewogICAgY29uc3QgcGFyZW50ID0gdGhpc1skZ2V0UGFyZW50XSgpWyRnZXRQYXJlbnRdKCk7CiAgICBjb25zdCBlZGdlID0gdGhpcy5lZGdlIHx8IG5ldyBFZGdlKHt9KTsKICAgIGNvbnN0IGVkZ2VTdHlsZSA9IGVkZ2VbJHRvU3R5bGVdKCk7CiAgICBjb25zdCBzdHlsZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICBjb25zdCB0aGlja25lc3MgPSBlZGdlLnByZXNlbmNlID09PSAidmlzaWJsZSIgPyBlZGdlLnRoaWNrbmVzcyA6IDA7CiAgICBzdHlsZS5zdHJva2VXaWR0aCA9IG1lYXN1cmVUb1N0cmluZyh0aGlja25lc3MpOwogICAgc3R5bGUuc3Ryb2tlID0gZWRnZVN0eWxlLmNvbG9yOwogICAgbGV0IHgxLCB5MSwgeDIsIHkyOwogICAgbGV0IHdpZHRoID0gIjEwMCUiOwogICAgbGV0IGhlaWdodCA9ICIxMDAlIjsKICAgIGlmIChwYXJlbnQudyA8PSB0aGlja25lc3MpIHsKICAgICAgW3gxLCB5MSwgeDIsIHkyXSA9IFsiNTAlIiwgMCwgIjUwJSIsICIxMDAlIl07CiAgICAgIHdpZHRoID0gc3R5bGUuc3Ryb2tlV2lkdGg7CiAgICB9IGVsc2UgaWYgKHBhcmVudC5oIDw9IHRoaWNrbmVzcykgewogICAgICBbeDEsIHkxLCB4MiwgeTJdID0gWzAsICI1MCUiLCAiMTAwJSIsICI1MCUiXTsKICAgICAgaGVpZ2h0ID0gc3R5bGUuc3Ryb2tlV2lkdGg7CiAgICB9IGVsc2UgaWYgKHRoaXMuc2xvcGUgPT09ICJcXCIpIHsKICAgICAgW3gxLCB5MSwgeDIsIHkyXSA9IFswLCAwLCAiMTAwJSIsICIxMDAlIl07CiAgICB9IGVsc2UgewogICAgICBbeDEsIHkxLCB4MiwgeTJdID0gWzAsICIxMDAlIiwgIjEwMCUiLCAwXTsKICAgIH0KICAgIGNvbnN0IGxpbmUgPSB7CiAgICAgIG5hbWU6ICJsaW5lIiwKICAgICAgYXR0cmlidXRlczogewogICAgICAgIHhtbG5zOiBTVkdfTlMsCiAgICAgICAgeDEsCiAgICAgICAgeTEsCiAgICAgICAgeDIsCiAgICAgICAgeTIsCiAgICAgICAgc3R5bGUKICAgICAgfQogICAgfTsKICAgIGNvbnN0IHN2ZyA9IHsKICAgICAgbmFtZTogInN2ZyIsCiAgICAgIGNoaWxkcmVuOiBbbGluZV0sCiAgICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICB4bWxuczogU1ZHX05TLAogICAgICAgIHdpZHRoLAogICAgICAgIGhlaWdodCwKICAgICAgICBzdHlsZTogewogICAgICAgICAgb3ZlcmZsb3c6ICJ2aXNpYmxlIgogICAgICAgIH0KICAgICAgfQogICAgfTsKICAgIGlmIChoYXNNYXJnaW4ocGFyZW50KSkgewogICAgICByZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHsKICAgICAgICBuYW1lOiAiZGl2IiwKICAgICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgICBzdHlsZTogewogICAgICAgICAgICBkaXNwbGF5OiAiaW5saW5lIiwKICAgICAgICAgICAgd2lkdGg6ICIxMDAlIiwKICAgICAgICAgICAgaGVpZ2h0OiAiMTAwJSIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGNoaWxkcmVuOiBbc3ZnXQogICAgICB9KTsKICAgIH0KICAgIHN2Zy5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKICAgIHJldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3Moc3ZnKTsKICB9Cn0KY2xhc3MgTGluZWFyIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgImxpbmVhciIsIHRydWUpOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLnR5cGUgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy50eXBlLCBbInRvUmlnaHQiLCAidG9Cb3R0b20iLCAidG9MZWZ0IiwgInRvVG9wIl0pOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICAgIHRoaXMuY29sb3IgPSBudWxsOwogICAgdGhpcy5leHRyYXMgPSBudWxsOwogIH0KICBbJHRvU3R5bGVdKHN0YXJ0Q29sb3IpIHsKICAgIHN0YXJ0Q29sb3IgPSBzdGFydENvbG9yID8gc3RhcnRDb2xvclskdG9TdHlsZV0oKSA6ICIjRkZGRkZGIjsKICAgIGNvbnN0IHRyYW5zZiA9IHRoaXMudHlwZS5yZXBsYWNlKC8oW1JCTFRdKS8sICIgJDEiKS50b0xvd2VyQ2FzZSgpOwogICAgY29uc3QgZW5kQ29sb3IgPSB0aGlzLmNvbG9yID8gdGhpcy5jb2xvclskdG9TdHlsZV0oKSA6ICIjMDAwMDAwIjsKICAgIHJldHVybiBgbGluZWFyLWdyYWRpZW50KCR7dHJhbnNmfSwgJHtzdGFydENvbG9yfSwgJHtlbmRDb2xvcn0pYDsKICB9Cn0KY2xhc3MgTG9ja0RvY3VtZW50IGV4dGVuZHMgQ29udGVudE9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJsb2NrRG9jdW1lbnQiKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy50eXBlID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMudHlwZSwgWyJvcHRpb25hbCIsICJyZXF1aXJlZCJdKTsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgfQogIFskZmluYWxpemVdKCkgewogICAgdGhpc1skY29udGVudF0gPSBnZXRTdHJpbmdPcHRpb24odGhpc1skY29udGVudF0sIFsiYXV0byIsICIwIiwgIjEiXSk7CiAgfQp9CmNsYXNzIE1hbmlmZXN0IGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgIm1hbmlmZXN0IiwgdHJ1ZSk7CiAgICB0aGlzLmFjdGlvbiA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLmFjdGlvbiwgWyJpbmNsdWRlIiwgImFsbCIsICJleGNsdWRlIl0pOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgIiI7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogICAgdGhpcy5leHRyYXMgPSBudWxsOwogICAgdGhpcy5yZWYgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICB9Cn0KY2xhc3MgTWFyZ2luIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgIm1hcmdpbiIsIHRydWUpOwogICAgdGhpcy5ib3R0b21JbnNldCA9IGdldE1lYXN1cmVtZW50KGF0dHJpYnV0ZXMuYm90dG9tSW5zZXQsICIwIik7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMubGVmdEluc2V0ID0gZ2V0TWVhc3VyZW1lbnQoYXR0cmlidXRlcy5sZWZ0SW5zZXQsICIwIik7CiAgICB0aGlzLnJpZ2h0SW5zZXQgPSBnZXRNZWFzdXJlbWVudChhdHRyaWJ1dGVzLnJpZ2h0SW5zZXQsICIwIik7CiAgICB0aGlzLnRvcEluc2V0ID0gZ2V0TWVhc3VyZW1lbnQoYXR0cmlidXRlcy50b3BJbnNldCwgIjAiKTsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgICB0aGlzLmV4dHJhcyA9IG51bGw7CiAgfQogIFskdG9TdHlsZV0oKSB7CiAgICByZXR1cm4gewogICAgICBtYXJnaW46IG1lYXN1cmVUb1N0cmluZyh0aGlzLnRvcEluc2V0KSArICIgIiArIG1lYXN1cmVUb1N0cmluZyh0aGlzLnJpZ2h0SW5zZXQpICsgIiAiICsgbWVhc3VyZVRvU3RyaW5nKHRoaXMuYm90dG9tSW5zZXQpICsgIiAiICsgbWVhc3VyZVRvU3RyaW5nKHRoaXMubGVmdEluc2V0KQogICAgfTsKICB9Cn0KY2xhc3MgTWRwIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgIm1kcCIpOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLnBlcm1pc3Npb25zID0gZ2V0SW50ZWdlcih7CiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMucGVybWlzc2lvbnMsCiAgICAgIGRlZmF1bHRWYWx1ZTogMiwKICAgICAgdmFsaWRhdGU6IHggPT4geCA9PT0gMSB8fCB4ID09PSAzCiAgICB9KTsKICAgIHRoaXMuc2lnbmF0dXJlVHlwZSA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLnNpZ25hdHVyZVR5cGUsIFsiZmlsbGVyIiwgImF1dGhvciJdKTsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgfQp9CmNsYXNzIE1lZGl1bSBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJtZWRpdW0iKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy5pbWFnaW5nQkJveCA9IGdldEJCb3goYXR0cmlidXRlcy5pbWFnaW5nQkJveCk7CiAgICB0aGlzLmxvbmcgPSBnZXRNZWFzdXJlbWVudChhdHRyaWJ1dGVzLmxvbmcpOwogICAgdGhpcy5vcmllbnRhdGlvbiA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLm9yaWVudGF0aW9uLCBbInBvcnRyYWl0IiwgImxhbmRzY2FwZSJdKTsKICAgIHRoaXMuc2hvcnQgPSBnZXRNZWFzdXJlbWVudChhdHRyaWJ1dGVzLnNob3J0KTsKICAgIHRoaXMuc3RvY2sgPSBhdHRyaWJ1dGVzLnN0b2NrIHx8ICIiOwogICAgdGhpcy50cmF5SW4gPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy50cmF5SW4sIFsiYXV0byIsICJkZWxlZ2F0ZSIsICJwYWdlRnJvbnQiXSk7CiAgICB0aGlzLnRyYXlPdXQgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy50cmF5T3V0LCBbImF1dG8iLCAiZGVsZWdhdGUiXSk7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogIH0KfQpjbGFzcyBNZXNzYWdlIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgIm1lc3NhZ2UiLCB0cnVlKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICAgIHRoaXMudGV4dCA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogIH0KfQpjbGFzcyBOdW1lcmljRWRpdCBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJudW1lcmljRWRpdCIsIHRydWUpOwogICAgdGhpcy5oU2Nyb2xsUG9saWN5ID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMuaFNjcm9sbFBvbGljeSwgWyJhdXRvIiwgIm9mZiIsICJvbiJdKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICAgIHRoaXMuYm9yZGVyID0gbnVsbDsKICAgIHRoaXMuY29tYiA9IG51bGw7CiAgICB0aGlzLmV4dHJhcyA9IG51bGw7CiAgICB0aGlzLm1hcmdpbiA9IG51bGw7CiAgfQogIFskdG9IVE1MXShhdmFpbGFibGVTcGFjZSkgewogICAgY29uc3Qgc3R5bGUgPSB0b1N0eWxlKHRoaXMsICJib3JkZXIiLCAiZm9udCIsICJtYXJnaW4iKTsKICAgIGNvbnN0IGZpZWxkID0gdGhpc1skZ2V0UGFyZW50XSgpWyRnZXRQYXJlbnRdKCk7CiAgICBjb25zdCBodG1sID0gewogICAgICBuYW1lOiAiaW5wdXQiLAogICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgdHlwZTogInRleHQiLAogICAgICAgIGZpZWxkSWQ6IGZpZWxkWyR1aWRdLAogICAgICAgIGRhdGFJZDogZmllbGRbJGRhdGFdPy5bJHVpZF0gfHwgZmllbGRbJHVpZF0sCiAgICAgICAgY2xhc3M6IFsieGZhVGV4dGZpZWxkIl0sCiAgICAgICAgc3R5bGUsCiAgICAgICAgImFyaWEtbGFiZWwiOiBhcmlhTGFiZWwoZmllbGQpLAogICAgICAgICJhcmlhLXJlcXVpcmVkIjogZmFsc2UKICAgICAgfQogICAgfTsKICAgIGlmIChpc1JlcXVpcmVkKGZpZWxkKSkgewogICAgICBodG1sLmF0dHJpYnV0ZXNbImFyaWEtcmVxdWlyZWQiXSA9IHRydWU7CiAgICAgIGh0bWwuYXR0cmlidXRlcy5yZXF1aXJlZCA9IHRydWU7CiAgICB9CiAgICByZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHsKICAgICAgbmFtZTogImxhYmVsIiwKICAgICAgYXR0cmlidXRlczogewogICAgICAgIGNsYXNzOiBbInhmYUxhYmVsIl0KICAgICAgfSwKICAgICAgY2hpbGRyZW46IFtodG1sXQogICAgfSk7CiAgfQp9CmNsYXNzIE9jY3VyIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgIm9jY3VyIiwgdHJ1ZSk7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMuaW5pdGlhbCA9IGF0dHJpYnV0ZXMuaW5pdGlhbCAhPT0gIiIgPyBnZXRJbnRlZ2VyKHsKICAgICAgZGF0YTogYXR0cmlidXRlcy5pbml0aWFsLAogICAgICBkZWZhdWx0VmFsdWU6ICIiLAogICAgICB2YWxpZGF0ZTogeCA9PiB0cnVlCiAgICB9KSA6ICIiOwogICAgdGhpcy5tYXggPSBhdHRyaWJ1dGVzLm1heCAhPT0gIiIgPyBnZXRJbnRlZ2VyKHsKICAgICAgZGF0YTogYXR0cmlidXRlcy5tYXgsCiAgICAgIGRlZmF1bHRWYWx1ZTogMSwKICAgICAgdmFsaWRhdGU6IHggPT4gdHJ1ZQogICAgfSkgOiAiIjsKICAgIHRoaXMubWluID0gYXR0cmlidXRlcy5taW4gIT09ICIiID8gZ2V0SW50ZWdlcih7CiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMubWluLAogICAgICBkZWZhdWx0VmFsdWU6IDEsCiAgICAgIHZhbGlkYXRlOiB4ID0+IHRydWUKICAgIH0pIDogIiI7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogICAgdGhpcy5leHRyYXMgPSBudWxsOwogIH0KICBbJGNsZWFuXSgpIHsKICAgIGNvbnN0IHBhcmVudCA9IHRoaXNbJGdldFBhcmVudF0oKTsKICAgIGNvbnN0IG9yaWdpbmFsTWluID0gdGhpcy5taW47CiAgICBpZiAodGhpcy5taW4gPT09ICIiKSB7CiAgICAgIHRoaXMubWluID0gcGFyZW50IGluc3RhbmNlb2YgUGFnZUFyZWEgfHwgcGFyZW50IGluc3RhbmNlb2YgUGFnZVNldCA/IDAgOiAxOwogICAgfQogICAgaWYgKHRoaXMubWF4ID09PSAiIikgewogICAgICBpZiAob3JpZ2luYWxNaW4gPT09ICIiKSB7CiAgICAgICAgdGhpcy5tYXggPSBwYXJlbnQgaW5zdGFuY2VvZiBQYWdlQXJlYSB8fCBwYXJlbnQgaW5zdGFuY2VvZiBQYWdlU2V0ID8gLTEgOiAxOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMubWF4ID0gdGhpcy5taW47CiAgICAgIH0KICAgIH0KICAgIGlmICh0aGlzLm1heCAhPT0gLTEgJiYgdGhpcy5tYXggPCB0aGlzLm1pbikgewogICAgICB0aGlzLm1heCA9IHRoaXMubWluOwogICAgfQogICAgaWYgKHRoaXMuaW5pdGlhbCA9PT0gIiIpIHsKICAgICAgdGhpcy5pbml0aWFsID0gcGFyZW50IGluc3RhbmNlb2YgVGVtcGxhdGUgPyAxIDogdGhpcy5taW47CiAgICB9CiAgfQp9CmNsYXNzIE9pZCBleHRlbmRzIFN0cmluZ09iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJvaWQiKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8ICIiOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICB9Cn0KY2xhc3MgT2lkcyBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJvaWRzIiwgdHJ1ZSk7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMudHlwZSA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLnR5cGUsIFsib3B0aW9uYWwiLCAicmVxdWlyZWQiXSk7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogICAgdGhpcy5vaWQgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICB9Cn0KY2xhc3MgT3ZlcmZsb3cgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCAib3ZlcmZsb3ciKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy5sZWFkZXIgPSBhdHRyaWJ1dGVzLmxlYWRlciB8fCAiIjsKICAgIHRoaXMudGFyZ2V0ID0gYXR0cmlidXRlcy50YXJnZXQgfHwgIiI7CiAgICB0aGlzLnRyYWlsZXIgPSBhdHRyaWJ1dGVzLnRyYWlsZXIgfHwgIiI7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogIH0KICBbJGdldEV4dHJhXSgpIHsKICAgIGlmICghdGhpc1skZXh0cmFdKSB7CiAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXNbJGdldFBhcmVudF0oKTsKICAgICAgY29uc3Qgcm9vdCA9IHRoaXNbJGdldFRlbXBsYXRlUm9vdF0oKTsKICAgICAgY29uc3QgdGFyZ2V0ID0gcm9vdFskc2VhcmNoTm9kZV0odGhpcy50YXJnZXQsIHBhcmVudCk7CiAgICAgIGNvbnN0IGxlYWRlciA9IHJvb3RbJHNlYXJjaE5vZGVdKHRoaXMubGVhZGVyLCBwYXJlbnQpOwogICAgICBjb25zdCB0cmFpbGVyID0gcm9vdFskc2VhcmNoTm9kZV0odGhpcy50cmFpbGVyLCBwYXJlbnQpOwogICAgICB0aGlzWyRleHRyYV0gPSB7CiAgICAgICAgdGFyZ2V0OiB0YXJnZXQ/LlswXSB8fCBudWxsLAogICAgICAgIGxlYWRlcjogbGVhZGVyPy5bMF0gfHwgbnVsbCwKICAgICAgICB0cmFpbGVyOiB0cmFpbGVyPy5bMF0gfHwgbnVsbCwKICAgICAgICBhZGRMZWFkZXI6IGZhbHNlLAogICAgICAgIGFkZFRyYWlsZXI6IGZhbHNlCiAgICAgIH07CiAgICB9CiAgICByZXR1cm4gdGhpc1skZXh0cmFdOwogIH0KfQpjbGFzcyBQYWdlQXJlYSBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJwYWdlQXJlYSIsIHRydWUpOwogICAgdGhpcy5ibGFua09yTm90QmxhbmsgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5ibGFua09yTm90QmxhbmssIFsiYW55IiwgImJsYW5rIiwgIm5vdEJsYW5rIl0pOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLmluaXRpYWxOdW1iZXIgPSBnZXRJbnRlZ2VyKHsKICAgICAgZGF0YTogYXR0cmlidXRlcy5pbml0aWFsTnVtYmVyLAogICAgICBkZWZhdWx0VmFsdWU6IDEsCiAgICAgIHZhbGlkYXRlOiB4ID0+IHRydWUKICAgIH0pOwogICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8ICIiOwogICAgdGhpcy5udW1iZXJlZCA9IGdldEludGVnZXIoewogICAgICBkYXRhOiBhdHRyaWJ1dGVzLm51bWJlcmVkLAogICAgICBkZWZhdWx0VmFsdWU6IDEsCiAgICAgIHZhbGlkYXRlOiB4ID0+IHRydWUKICAgIH0pOwogICAgdGhpcy5vZGRPckV2ZW4gPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5vZGRPckV2ZW4sIFsiYW55IiwgImV2ZW4iLCAib2RkIl0pOwogICAgdGhpcy5wYWdlUG9zaXRpb24gPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5wYWdlUG9zaXRpb24sIFsiYW55IiwgImZpcnN0IiwgImxhc3QiLCAib25seSIsICJyZXN0Il0pOwogICAgdGhpcy5yZWxldmFudCA9IGdldFJlbGV2YW50KGF0dHJpYnV0ZXMucmVsZXZhbnQpOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICAgIHRoaXMuZGVzYyA9IG51bGw7CiAgICB0aGlzLmV4dHJhcyA9IG51bGw7CiAgICB0aGlzLm1lZGl1bSA9IG51bGw7CiAgICB0aGlzLm9jY3VyID0gbnVsbDsKICAgIHRoaXMuYXJlYSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5jb250ZW50QXJlYSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5kcmF3ID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmV4Y2xHcm91cCA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5maWVsZCA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5zdWJmb3JtID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgfQogIFskaXNVc2FibGVdKCkgewogICAgaWYgKCF0aGlzWyRleHRyYV0pIHsKICAgICAgdGhpc1skZXh0cmFdID0gewogICAgICAgIG51bWJlck9mVXNlOiAwCiAgICAgIH07CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuICF0aGlzLm9jY3VyIHx8IHRoaXMub2NjdXIubWF4ID09PSAtMSB8fCB0aGlzWyRleHRyYV0ubnVtYmVyT2ZVc2UgPCB0aGlzLm9jY3VyLm1heDsKICB9CiAgWyRjbGVhblBhZ2VdKCkgewogICAgZGVsZXRlIHRoaXNbJGV4dHJhXTsKICB9CiAgWyRnZXROZXh0UGFnZV0oKSB7CiAgICBpZiAoIXRoaXNbJGV4dHJhXSkgewogICAgICB0aGlzWyRleHRyYV0gPSB7CiAgICAgICAgbnVtYmVyT2ZVc2U6IDAKICAgICAgfTsKICAgIH0KICAgIGNvbnN0IHBhcmVudCA9IHRoaXNbJGdldFBhcmVudF0oKTsKICAgIGlmIChwYXJlbnQucmVsYXRpb24gPT09ICJvcmRlcmVkT2NjdXJyZW5jZSIpIHsKICAgICAgaWYgKHRoaXNbJGlzVXNhYmxlXSgpKSB7CiAgICAgICAgdGhpc1skZXh0cmFdLm51bWJlck9mVXNlICs9IDE7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBwYXJlbnRbJGdldE5leHRQYWdlXSgpOwogIH0KICBbJGdldEF2YWlsYWJsZVNwYWNlXSgpIHsKICAgIHJldHVybiB0aGlzWyRleHRyYV0uc3BhY2UgfHwgewogICAgICB3aWR0aDogMCwKICAgICAgaGVpZ2h0OiAwCiAgICB9OwogIH0KICBbJHRvSFRNTF0oKSB7CiAgICBpZiAoIXRoaXNbJGV4dHJhXSkgewogICAgICB0aGlzWyRleHRyYV0gPSB7CiAgICAgICAgbnVtYmVyT2ZVc2U6IDEKICAgICAgfTsKICAgIH0KICAgIGNvbnN0IGNoaWxkcmVuID0gW107CiAgICB0aGlzWyRleHRyYV0uY2hpbGRyZW4gPSBjaGlsZHJlbjsKICAgIGNvbnN0IHN0eWxlID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgIGlmICh0aGlzLm1lZGl1bSAmJiB0aGlzLm1lZGl1bS5zaG9ydCAmJiB0aGlzLm1lZGl1bS5sb25nKSB7CiAgICAgIHN0eWxlLndpZHRoID0gbWVhc3VyZVRvU3RyaW5nKHRoaXMubWVkaXVtLnNob3J0KTsKICAgICAgc3R5bGUuaGVpZ2h0ID0gbWVhc3VyZVRvU3RyaW5nKHRoaXMubWVkaXVtLmxvbmcpOwogICAgICB0aGlzWyRleHRyYV0uc3BhY2UgPSB7CiAgICAgICAgd2lkdGg6IHRoaXMubWVkaXVtLnNob3J0LAogICAgICAgIGhlaWdodDogdGhpcy5tZWRpdW0ubG9uZwogICAgICB9OwogICAgICBpZiAodGhpcy5tZWRpdW0ub3JpZW50YXRpb24gPT09ICJsYW5kc2NhcGUiKSB7CiAgICAgICAgY29uc3QgeCA9IHN0eWxlLndpZHRoOwogICAgICAgIHN0eWxlLndpZHRoID0gc3R5bGUuaGVpZ2h0OwogICAgICAgIHN0eWxlLmhlaWdodCA9IHg7CiAgICAgICAgdGhpc1skZXh0cmFdLnNwYWNlID0gewogICAgICAgICAgd2lkdGg6IHRoaXMubWVkaXVtLmxvbmcsCiAgICAgICAgICBoZWlnaHQ6IHRoaXMubWVkaXVtLnNob3J0CiAgICAgICAgfTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgd2FybigiWEZBIC0gTm8gbWVkaXVtIHNwZWNpZmllZCBpbiBwYWdlQXJlYTogcGxlYXNlIGZpbGUgYSBidWcuIik7CiAgICB9CiAgICB0aGlzWyRjaGlsZHJlblRvSFRNTF0oewogICAgICBmaWx0ZXI6IG5ldyBTZXQoWyJhcmVhIiwgImRyYXciLCAiZmllbGQiLCAic3ViZm9ybSJdKSwKICAgICAgaW5jbHVkZTogdHJ1ZQogICAgfSk7CiAgICB0aGlzWyRjaGlsZHJlblRvSFRNTF0oewogICAgICBmaWx0ZXI6IG5ldyBTZXQoWyJjb250ZW50QXJlYSJdKSwKICAgICAgaW5jbHVkZTogdHJ1ZQogICAgfSk7CiAgICByZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHsKICAgICAgbmFtZTogImRpdiIsCiAgICAgIGNoaWxkcmVuLAogICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgY2xhc3M6IFsieGZhUGFnZSJdLAogICAgICAgIGlkOiB0aGlzWyR1aWRdLAogICAgICAgIHN0eWxlLAogICAgICAgIHhmYU5hbWU6IHRoaXMubmFtZQogICAgICB9CiAgICB9KTsKICB9Cn0KY2xhc3MgUGFnZVNldCBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJwYWdlU2V0IiwgdHJ1ZSk7CiAgICB0aGlzLmR1cGxleEltcG9zaXRpb24gPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5kdXBsZXhJbXBvc2l0aW9uLCBbImxvbmdFZGdlIiwgInNob3J0RWRnZSJdKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8ICIiOwogICAgdGhpcy5yZWxhdGlvbiA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLnJlbGF0aW9uLCBbIm9yZGVyZWRPY2N1cnJlbmNlIiwgImR1cGxleFBhZ2luYXRlZCIsICJzaW1wbGV4UGFnaW5hdGVkIl0pOwogICAgdGhpcy5yZWxldmFudCA9IGdldFJlbGV2YW50KGF0dHJpYnV0ZXMucmVsZXZhbnQpOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICAgIHRoaXMuZXh0cmFzID0gbnVsbDsKICAgIHRoaXMub2NjdXIgPSBudWxsOwogICAgdGhpcy5wYWdlQXJlYSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5wYWdlU2V0ID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgfQogIFskY2xlYW5QYWdlXSgpIHsKICAgIGZvciAoY29uc3QgcGFnZSBvZiB0aGlzLnBhZ2VBcmVhLmNoaWxkcmVuKSB7CiAgICAgIHBhZ2VbJGNsZWFuUGFnZV0oKTsKICAgIH0KICAgIGZvciAoY29uc3QgcGFnZSBvZiB0aGlzLnBhZ2VTZXQuY2hpbGRyZW4pIHsKICAgICAgcGFnZVskY2xlYW5QYWdlXSgpOwogICAgfQogIH0KICBbJGlzVXNhYmxlXSgpIHsKICAgIHJldHVybiAhdGhpcy5vY2N1ciB8fCB0aGlzLm9jY3VyLm1heCA9PT0gLTEgfHwgdGhpc1skZXh0cmFdLm51bWJlck9mVXNlIDwgdGhpcy5vY2N1ci5tYXg7CiAgfQogIFskZ2V0TmV4dFBhZ2VdKCkgewogICAgaWYgKCF0aGlzWyRleHRyYV0pIHsKICAgICAgdGhpc1skZXh0cmFdID0gewogICAgICAgIG51bWJlck9mVXNlOiAxLAogICAgICAgIHBhZ2VJbmRleDogLTEsCiAgICAgICAgcGFnZVNldEluZGV4OiAtMQogICAgICB9OwogICAgfQogICAgaWYgKHRoaXMucmVsYXRpb24gPT09ICJvcmRlcmVkT2NjdXJyZW5jZSIpIHsKICAgICAgaWYgKHRoaXNbJGV4dHJhXS5wYWdlSW5kZXggKyAxIDwgdGhpcy5wYWdlQXJlYS5jaGlsZHJlbi5sZW5ndGgpIHsKICAgICAgICB0aGlzWyRleHRyYV0ucGFnZUluZGV4ICs9IDE7CiAgICAgICAgY29uc3QgcGFnZUFyZWEgPSB0aGlzLnBhZ2VBcmVhLmNoaWxkcmVuW3RoaXNbJGV4dHJhXS5wYWdlSW5kZXhdOwogICAgICAgIHJldHVybiBwYWdlQXJlYVskZ2V0TmV4dFBhZ2VdKCk7CiAgICAgIH0KICAgICAgaWYgKHRoaXNbJGV4dHJhXS5wYWdlU2V0SW5kZXggKyAxIDwgdGhpcy5wYWdlU2V0LmNoaWxkcmVuLmxlbmd0aCkgewogICAgICAgIHRoaXNbJGV4dHJhXS5wYWdlU2V0SW5kZXggKz0gMTsKICAgICAgICByZXR1cm4gdGhpcy5wYWdlU2V0LmNoaWxkcmVuW3RoaXNbJGV4dHJhXS5wYWdlU2V0SW5kZXhdWyRnZXROZXh0UGFnZV0oKTsKICAgICAgfQogICAgICBpZiAodGhpc1skaXNVc2FibGVdKCkpIHsKICAgICAgICB0aGlzWyRleHRyYV0ubnVtYmVyT2ZVc2UgKz0gMTsKICAgICAgICB0aGlzWyRleHRyYV0ucGFnZUluZGV4ID0gLTE7CiAgICAgICAgdGhpc1skZXh0cmFdLnBhZ2VTZXRJbmRleCA9IC0xOwogICAgICAgIHJldHVybiB0aGlzWyRnZXROZXh0UGFnZV0oKTsKICAgICAgfQogICAgICBjb25zdCBwYXJlbnQgPSB0aGlzWyRnZXRQYXJlbnRdKCk7CiAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBQYWdlU2V0KSB7CiAgICAgICAgcmV0dXJuIHBhcmVudFskZ2V0TmV4dFBhZ2VdKCk7CiAgICAgIH0KICAgICAgdGhpc1skY2xlYW5QYWdlXSgpOwogICAgICByZXR1cm4gdGhpc1skZ2V0TmV4dFBhZ2VdKCk7CiAgICB9CiAgICBjb25zdCBwYWdlTnVtYmVyID0gdGhpc1skZ2V0VGVtcGxhdGVSb290XSgpWyRleHRyYV0ucGFnZU51bWJlcjsKICAgIGNvbnN0IHBhcml0eSA9IHBhZ2VOdW1iZXIgJSAyID09PSAwID8gImV2ZW4iIDogIm9kZCI7CiAgICBjb25zdCBwb3NpdGlvbiA9IHBhZ2VOdW1iZXIgPT09IDAgPyAiZmlyc3QiIDogInJlc3QiOwogICAgbGV0IHBhZ2UgPSB0aGlzLnBhZ2VBcmVhLmNoaWxkcmVuLmZpbmQocCA9PiBwLm9kZE9yRXZlbiA9PT0gcGFyaXR5ICYmIHAucGFnZVBvc2l0aW9uID09PSBwb3NpdGlvbik7CiAgICBpZiAocGFnZSkgewogICAgICByZXR1cm4gcGFnZTsKICAgIH0KICAgIHBhZ2UgPSB0aGlzLnBhZ2VBcmVhLmNoaWxkcmVuLmZpbmQocCA9PiBwLm9kZE9yRXZlbiA9PT0gImFueSIgJiYgcC5wYWdlUG9zaXRpb24gPT09IHBvc2l0aW9uKTsKICAgIGlmIChwYWdlKSB7CiAgICAgIHJldHVybiBwYWdlOwogICAgfQogICAgcGFnZSA9IHRoaXMucGFnZUFyZWEuY2hpbGRyZW4uZmluZChwID0+IHAub2RkT3JFdmVuID09PSAiYW55IiAmJiBwLnBhZ2VQb3NpdGlvbiA9PT0gImFueSIpOwogICAgaWYgKHBhZ2UpIHsKICAgICAgcmV0dXJuIHBhZ2U7CiAgICB9CiAgICByZXR1cm4gdGhpcy5wYWdlQXJlYS5jaGlsZHJlblswXTsKICB9Cn0KY2xhc3MgUGFyYSBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJwYXJhIiwgdHJ1ZSk7CiAgICB0aGlzLmhBbGlnbiA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLmhBbGlnbiwgWyJsZWZ0IiwgImNlbnRlciIsICJqdXN0aWZ5IiwgImp1c3RpZnlBbGwiLCAicmFkaXgiLCAicmlnaHQiXSk7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMubGluZUhlaWdodCA9IGF0dHJpYnV0ZXMubGluZUhlaWdodCA/IGdldE1lYXN1cmVtZW50KGF0dHJpYnV0ZXMubGluZUhlaWdodCwgIjBwdCIpIDogIiI7CiAgICB0aGlzLm1hcmdpbkxlZnQgPSBhdHRyaWJ1dGVzLm1hcmdpbkxlZnQgPyBnZXRNZWFzdXJlbWVudChhdHRyaWJ1dGVzLm1hcmdpbkxlZnQsICIwcHQiKSA6ICIiOwogICAgdGhpcy5tYXJnaW5SaWdodCA9IGF0dHJpYnV0ZXMubWFyZ2luUmlnaHQgPyBnZXRNZWFzdXJlbWVudChhdHRyaWJ1dGVzLm1hcmdpblJpZ2h0LCAiMHB0IikgOiAiIjsKICAgIHRoaXMub3JwaGFucyA9IGdldEludGVnZXIoewogICAgICBkYXRhOiBhdHRyaWJ1dGVzLm9ycGhhbnMsCiAgICAgIGRlZmF1bHRWYWx1ZTogMCwKICAgICAgdmFsaWRhdGU6IHggPT4geCA+PSAwCiAgICB9KTsKICAgIHRoaXMucHJlc2VydmUgPSBhdHRyaWJ1dGVzLnByZXNlcnZlIHx8ICIiOwogICAgdGhpcy5yYWRpeE9mZnNldCA9IGF0dHJpYnV0ZXMucmFkaXhPZmZzZXQgPyBnZXRNZWFzdXJlbWVudChhdHRyaWJ1dGVzLnJhZGl4T2Zmc2V0LCAiMHB0IikgOiAiIjsKICAgIHRoaXMuc3BhY2VBYm92ZSA9IGF0dHJpYnV0ZXMuc3BhY2VBYm92ZSA/IGdldE1lYXN1cmVtZW50KGF0dHJpYnV0ZXMuc3BhY2VBYm92ZSwgIjBwdCIpIDogIiI7CiAgICB0aGlzLnNwYWNlQmVsb3cgPSBhdHRyaWJ1dGVzLnNwYWNlQmVsb3cgPyBnZXRNZWFzdXJlbWVudChhdHRyaWJ1dGVzLnNwYWNlQmVsb3csICIwcHQiKSA6ICIiOwogICAgdGhpcy50YWJEZWZhdWx0ID0gYXR0cmlidXRlcy50YWJEZWZhdWx0ID8gZ2V0TWVhc3VyZW1lbnQodGhpcy50YWJEZWZhdWx0KSA6ICIiOwogICAgdGhpcy50YWJTdG9wcyA9IChhdHRyaWJ1dGVzLnRhYlN0b3BzIHx8ICIiKS50cmltKCkuc3BsaXQoL1xzKy8pLm1hcCgoeCwgaSkgPT4gaSAlIDIgPT09IDEgPyBnZXRNZWFzdXJlbWVudCh4KSA6IHgpOwogICAgdGhpcy50ZXh0SW5kZW50ID0gYXR0cmlidXRlcy50ZXh0SW5kZW50ID8gZ2V0TWVhc3VyZW1lbnQoYXR0cmlidXRlcy50ZXh0SW5kZW50LCAiMHB0IikgOiAiIjsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgICB0aGlzLnZBbGlnbiA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLnZBbGlnbiwgWyJ0b3AiLCAiYm90dG9tIiwgIm1pZGRsZSJdKTsKICAgIHRoaXMud2lkb3dzID0gZ2V0SW50ZWdlcih7CiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMud2lkb3dzLAogICAgICBkZWZhdWx0VmFsdWU6IDAsCiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPj0gMAogICAgfSk7CiAgICB0aGlzLmh5cGhlbmF0aW9uID0gbnVsbDsKICB9CiAgWyR0b1N0eWxlXSgpIHsKICAgIGNvbnN0IHN0eWxlID0gdG9TdHlsZSh0aGlzLCAiaEFsaWduIik7CiAgICBpZiAodGhpcy5tYXJnaW5MZWZ0ICE9PSAiIikgewogICAgICBzdHlsZS5wYWRkaW5nTGVmdCA9IG1lYXN1cmVUb1N0cmluZyh0aGlzLm1hcmdpbkxlZnQpOwogICAgfQogICAgaWYgKHRoaXMubWFyZ2luUmlnaHQgIT09ICIiKSB7CiAgICAgIHN0eWxlLnBhZGRpbmdSaWdodCA9IG1lYXN1cmVUb1N0cmluZyh0aGlzLm1hcmdpblJpZ2h0KTsKICAgIH0KICAgIGlmICh0aGlzLnNwYWNlQWJvdmUgIT09ICIiKSB7CiAgICAgIHN0eWxlLnBhZGRpbmdUb3AgPSBtZWFzdXJlVG9TdHJpbmcodGhpcy5zcGFjZUFib3ZlKTsKICAgIH0KICAgIGlmICh0aGlzLnNwYWNlQmVsb3cgIT09ICIiKSB7CiAgICAgIHN0eWxlLnBhZGRpbmdCb3R0b20gPSBtZWFzdXJlVG9TdHJpbmcodGhpcy5zcGFjZUJlbG93KTsKICAgIH0KICAgIGlmICh0aGlzLnRleHRJbmRlbnQgIT09ICIiKSB7CiAgICAgIHN0eWxlLnRleHRJbmRlbnQgPSBtZWFzdXJlVG9TdHJpbmcodGhpcy50ZXh0SW5kZW50KTsKICAgICAgZml4VGV4dEluZGVudChzdHlsZSk7CiAgICB9CiAgICBpZiAodGhpcy5saW5lSGVpZ2h0ID4gMCkgewogICAgICBzdHlsZS5saW5lSGVpZ2h0ID0gbWVhc3VyZVRvU3RyaW5nKHRoaXMubGluZUhlaWdodCk7CiAgICB9CiAgICBpZiAodGhpcy50YWJEZWZhdWx0ICE9PSAiIikgewogICAgICBzdHlsZS50YWJTaXplID0gbWVhc3VyZVRvU3RyaW5nKHRoaXMudGFiRGVmYXVsdCk7CiAgICB9CiAgICBpZiAodGhpcy50YWJTdG9wcy5sZW5ndGggPiAwKSB7fQogICAgaWYgKHRoaXMuaHlwaGVuYXRhdGlvbikgewogICAgICBPYmplY3QuYXNzaWduKHN0eWxlLCB0aGlzLmh5cGhlbmF0YXRpb25bJHRvU3R5bGVdKCkpOwogICAgfQogICAgcmV0dXJuIHN0eWxlOwogIH0KfQpjbGFzcyBQYXNzd29yZEVkaXQgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCAicGFzc3dvcmRFZGl0IiwgdHJ1ZSk7CiAgICB0aGlzLmhTY3JvbGxQb2xpY3kgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5oU2Nyb2xsUG9saWN5LCBbImF1dG8iLCAib2ZmIiwgIm9uIl0pOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLnBhc3N3b3JkQ2hhciA9IGF0dHJpYnV0ZXMucGFzc3dvcmRDaGFyIHx8ICIqIjsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgICB0aGlzLmJvcmRlciA9IG51bGw7CiAgICB0aGlzLmV4dHJhcyA9IG51bGw7CiAgICB0aGlzLm1hcmdpbiA9IG51bGw7CiAgfQp9CmNsYXNzIHRlbXBsYXRlX1BhdHRlcm4gZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCAicGF0dGVybiIsIHRydWUpOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLnR5cGUgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy50eXBlLCBbImNyb3NzSGF0Y2giLCAiY3Jvc3NEaWFnb25hbCIsICJkaWFnb25hbExlZnQiLCAiZGlhZ29uYWxSaWdodCIsICJob3Jpem9udGFsIiwgInZlcnRpY2FsIl0pOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICAgIHRoaXMuY29sb3IgPSBudWxsOwogICAgdGhpcy5leHRyYXMgPSBudWxsOwogIH0KICBbJHRvU3R5bGVdKHN0YXJ0Q29sb3IpIHsKICAgIHN0YXJ0Q29sb3IgPSBzdGFydENvbG9yID8gc3RhcnRDb2xvclskdG9TdHlsZV0oKSA6ICIjRkZGRkZGIjsKICAgIGNvbnN0IGVuZENvbG9yID0gdGhpcy5jb2xvciA/IHRoaXMuY29sb3JbJHRvU3R5bGVdKCkgOiAiIzAwMDAwMCI7CiAgICBjb25zdCB3aWR0aCA9IDU7CiAgICBjb25zdCBjbWQgPSAicmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCI7CiAgICBjb25zdCBjb2xvcnMgPSBgJHtzdGFydENvbG9yfSwke3N0YXJ0Q29sb3J9ICR7d2lkdGh9cHgsJHtlbmRDb2xvcn0gJHt3aWR0aH1weCwke2VuZENvbG9yfSAkezIgKiB3aWR0aH1weGA7CiAgICBzd2l0Y2ggKHRoaXMudHlwZSkgewogICAgICBjYXNlICJjcm9zc0hhdGNoIjoKICAgICAgICByZXR1cm4gYCR7Y21kfSh0byB0b3AsJHtjb2xvcnN9KSAke2NtZH0odG8gcmlnaHQsJHtjb2xvcnN9KWA7CiAgICAgIGNhc2UgImNyb3NzRGlhZ29uYWwiOgogICAgICAgIHJldHVybiBgJHtjbWR9KDQ1ZGVnLCR7Y29sb3JzfSkgJHtjbWR9KC00NWRlZywke2NvbG9yc30pYDsKICAgICAgY2FzZSAiZGlhZ29uYWxMZWZ0IjoKICAgICAgICByZXR1cm4gYCR7Y21kfSg0NWRlZywke2NvbG9yc30pYDsKICAgICAgY2FzZSAiZGlhZ29uYWxSaWdodCI6CiAgICAgICAgcmV0dXJuIGAke2NtZH0oLTQ1ZGVnLCR7Y29sb3JzfSlgOwogICAgICBjYXNlICJob3Jpem9udGFsIjoKICAgICAgICByZXR1cm4gYCR7Y21kfSh0byB0b3AsJHtjb2xvcnN9KWA7CiAgICAgIGNhc2UgInZlcnRpY2FsIjoKICAgICAgICByZXR1cm4gYCR7Y21kfSh0byByaWdodCwke2NvbG9yc30pYDsKICAgIH0KICAgIHJldHVybiAiIjsKICB9Cn0KY2xhc3MgUGljdHVyZSBleHRlbmRzIFN0cmluZ09iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJwaWN0dXJlIik7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgfQp9CmNsYXNzIFByb3RvIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgInByb3RvIiwgdHJ1ZSk7CiAgICB0aGlzLmFwcGVhcmFuY2VGaWx0ZXIgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuYXJjID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmFyZWEgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuYXNzaXN0ID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmJhcmNvZGUgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuYmluZEl0ZW1zID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmJvb2tlbmQgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuYm9vbGVhbiA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5ib3JkZXIgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuYnJlYWsgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuYnJlYWtBZnRlciA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5icmVha0JlZm9yZSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5idXR0b24gPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuY2FsY3VsYXRlID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmNhcHRpb24gPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuY2VydGlmaWNhdGUgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuY2VydGlmaWNhdGVzID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmNoZWNrQnV0dG9uID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmNob2ljZUxpc3QgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuY29sb3IgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuY29tYiA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5jb25uZWN0ID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmNvbnRlbnRBcmVhID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmNvcm5lciA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5kYXRlID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmRhdGVUaW1lID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmRhdGVUaW1lRWRpdCA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5kZWNpbWFsID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmRlZmF1bHRVaSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5kZXNjID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmRpZ2VzdE1ldGhvZCA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5kaWdlc3RNZXRob2RzID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmRyYXcgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuZWRnZSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5lbmNvZGluZyA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5lbmNvZGluZ3MgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuZW5jcnlwdCA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5lbmNyeXB0RGF0YSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5lbmNyeXB0aW9uID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmVuY3J5cHRpb25NZXRob2QgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuZW5jcnlwdGlvbk1ldGhvZHMgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuZXZlbnQgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuZXhEYXRhID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmV4T2JqZWN0ID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmV4Y2xHcm91cCA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5leGVjdXRlID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmV4dHJhcyA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5maWVsZCA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5maWxsID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmZpbHRlciA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5mbG9hdCA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5mb250ID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmZvcm1hdCA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5oYW5kbGVyID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmh5cGhlbmF0aW9uID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmltYWdlID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmltYWdlRWRpdCA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5pbnRlZ2VyID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmlzc3VlcnMgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuaXRlbXMgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMua2VlcCA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5rZXlVc2FnZSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5saW5lID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmxpbmVhciA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5sb2NrRG9jdW1lbnQgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMubWFuaWZlc3QgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMubWFyZ2luID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLm1kcCA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5tZWRpdW0gPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMubWVzc2FnZSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5udW1lcmljRWRpdCA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5vY2N1ciA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5vaWQgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMub2lkcyA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5vdmVyZmxvdyA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5wYWdlQXJlYSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5wYWdlU2V0ID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLnBhcmEgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMucGFzc3dvcmRFZGl0ID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLnBhdHRlcm4gPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMucGljdHVyZSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5yYWRpYWwgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMucmVhc29uID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLnJlYXNvbnMgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMucmVjdGFuZ2xlID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLnJlZiA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5zY3JpcHQgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuc2V0UHJvcGVydHkgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuc2lnbkRhdGEgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuc2lnbmF0dXJlID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLnNpZ25pbmcgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuc29saWQgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuc3BlYWsgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuc3RpcHBsZSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5zdWJmb3JtID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLnN1YmZvcm1TZXQgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuc3ViamVjdEROID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLnN1YmplY3RETnMgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuc3VibWl0ID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLnRleHQgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMudGV4dEVkaXQgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMudGltZSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy50aW1lU3RhbXAgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMudG9vbFRpcCA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy50cmF2ZXJzYWwgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMudHJhdmVyc2UgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMudWkgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMudmFsaWRhdGUgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMudmFsdWUgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMudmFyaWFibGVzID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgfQp9CmNsYXNzIFJhZGlhbCBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJyYWRpYWwiLCB0cnVlKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy50eXBlID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMudHlwZSwgWyJ0b0VkZ2UiLCAidG9DZW50ZXIiXSk7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogICAgdGhpcy5jb2xvciA9IG51bGw7CiAgICB0aGlzLmV4dHJhcyA9IG51bGw7CiAgfQogIFskdG9TdHlsZV0oc3RhcnRDb2xvcikgewogICAgc3RhcnRDb2xvciA9IHN0YXJ0Q29sb3IgPyBzdGFydENvbG9yWyR0b1N0eWxlXSgpIDogIiNGRkZGRkYiOwogICAgY29uc3QgZW5kQ29sb3IgPSB0aGlzLmNvbG9yID8gdGhpcy5jb2xvclskdG9TdHlsZV0oKSA6ICIjMDAwMDAwIjsKICAgIGNvbnN0IGNvbG9ycyA9IHRoaXMudHlwZSA9PT0gInRvRWRnZSIgPyBgJHtzdGFydENvbG9yfSwke2VuZENvbG9yfWAgOiBgJHtlbmRDb2xvcn0sJHtzdGFydENvbG9yfWA7CiAgICByZXR1cm4gYHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgY2VudGVyLCAke2NvbG9yc30pYDsKICB9Cn0KY2xhc3MgUmVhc29uIGV4dGVuZHMgU3RyaW5nT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgInJlYXNvbiIpOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgIiI7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogIH0KfQpjbGFzcyBSZWFzb25zIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgInJlYXNvbnMiLCB0cnVlKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy50eXBlID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMudHlwZSwgWyJvcHRpb25hbCIsICJyZXF1aXJlZCJdKTsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgICB0aGlzLnJlYXNvbiA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogIH0KfQpjbGFzcyBSZWN0YW5nbGUgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCAicmVjdGFuZ2xlIiwgdHJ1ZSk7CiAgICB0aGlzLmhhbmQgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5oYW5kLCBbImV2ZW4iLCAibGVmdCIsICJyaWdodCJdKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICAgIHRoaXMuY29ybmVyID0gbmV3IFhGQU9iamVjdEFycmF5KDQpOwogICAgdGhpcy5lZGdlID0gbmV3IFhGQU9iamVjdEFycmF5KDQpOwogICAgdGhpcy5maWxsID0gbnVsbDsKICB9CiAgWyR0b0hUTUxdKCkgewogICAgY29uc3QgZWRnZSA9IHRoaXMuZWRnZS5jaGlsZHJlbi5sZW5ndGggPyB0aGlzLmVkZ2UuY2hpbGRyZW5bMF0gOiBuZXcgRWRnZSh7fSk7CiAgICBjb25zdCBlZGdlU3R5bGUgPSBlZGdlWyR0b1N0eWxlXSgpOwogICAgY29uc3Qgc3R5bGUgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgaWYgKHRoaXMuZmlsbD8ucHJlc2VuY2UgPT09ICJ2aXNpYmxlIikgewogICAgICBPYmplY3QuYXNzaWduKHN0eWxlLCB0aGlzLmZpbGxbJHRvU3R5bGVdKCkpOwogICAgfSBlbHNlIHsKICAgICAgc3R5bGUuZmlsbCA9ICJ0cmFuc3BhcmVudCI7CiAgICB9CiAgICBzdHlsZS5zdHJva2VXaWR0aCA9IG1lYXN1cmVUb1N0cmluZyhlZGdlLnByZXNlbmNlID09PSAidmlzaWJsZSIgPyBlZGdlLnRoaWNrbmVzcyA6IDApOwogICAgc3R5bGUuc3Ryb2tlID0gZWRnZVN0eWxlLmNvbG9yOwogICAgY29uc3QgY29ybmVyID0gdGhpcy5jb3JuZXIuY2hpbGRyZW4ubGVuZ3RoID8gdGhpcy5jb3JuZXIuY2hpbGRyZW5bMF0gOiBuZXcgQ29ybmVyKHt9KTsKICAgIGNvbnN0IGNvcm5lclN0eWxlID0gY29ybmVyWyR0b1N0eWxlXSgpOwogICAgY29uc3QgcmVjdCA9IHsKICAgICAgbmFtZTogInJlY3QiLAogICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgeG1sbnM6IFNWR19OUywKICAgICAgICB3aWR0aDogIjEwMCUiLAogICAgICAgIGhlaWdodDogIjEwMCUiLAogICAgICAgIHg6IDAsCiAgICAgICAgeTogMCwKICAgICAgICByeDogY29ybmVyU3R5bGUucmFkaXVzLAogICAgICAgIHJ5OiBjb3JuZXJTdHlsZS5yYWRpdXMsCiAgICAgICAgc3R5bGUKICAgICAgfQogICAgfTsKICAgIGNvbnN0IHN2ZyA9IHsKICAgICAgbmFtZTogInN2ZyIsCiAgICAgIGNoaWxkcmVuOiBbcmVjdF0sCiAgICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICB4bWxuczogU1ZHX05TLAogICAgICAgIHN0eWxlOiB7CiAgICAgICAgICBvdmVyZmxvdzogInZpc2libGUiCiAgICAgICAgfSwKICAgICAgICB3aWR0aDogIjEwMCUiLAogICAgICAgIGhlaWdodDogIjEwMCUiCiAgICAgIH0KICAgIH07CiAgICBjb25zdCBwYXJlbnQgPSB0aGlzWyRnZXRQYXJlbnRdKClbJGdldFBhcmVudF0oKTsKICAgIGlmIChoYXNNYXJnaW4ocGFyZW50KSkgewogICAgICByZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHsKICAgICAgICBuYW1lOiAiZGl2IiwKICAgICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgICBzdHlsZTogewogICAgICAgICAgICBkaXNwbGF5OiAiaW5saW5lIiwKICAgICAgICAgICAgd2lkdGg6ICIxMDAlIiwKICAgICAgICAgICAgaGVpZ2h0OiAiMTAwJSIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGNoaWxkcmVuOiBbc3ZnXQogICAgICB9KTsKICAgIH0KICAgIHN2Zy5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKICAgIHJldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3Moc3ZnKTsKICB9Cn0KY2xhc3MgUmVmRWxlbWVudCBleHRlbmRzIFN0cmluZ09iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJyZWYiKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICB9Cn0KY2xhc3MgU2NyaXB0IGV4dGVuZHMgU3RyaW5nT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgInNjcmlwdCIpOwogICAgdGhpcy5iaW5kaW5nID0gYXR0cmlidXRlcy5iaW5kaW5nIHx8ICIiOwogICAgdGhpcy5jb250ZW50VHlwZSA9IGF0dHJpYnV0ZXMuY29udGVudFR5cGUgfHwgIiI7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8fCAiIjsKICAgIHRoaXMucnVuQXQgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5ydW5BdCwgWyJjbGllbnQiLCAiYm90aCIsICJzZXJ2ZXIiXSk7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogIH0KfQpjbGFzcyBTZXRQcm9wZXJ0eSBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJzZXRQcm9wZXJ0eSIpOwogICAgdGhpcy5jb25uZWN0aW9uID0gYXR0cmlidXRlcy5jb25uZWN0aW9uIHx8ICIiOwogICAgdGhpcy5yZWYgPSBhdHRyaWJ1dGVzLnJlZiB8fCAiIjsKICAgIHRoaXMudGFyZ2V0ID0gYXR0cmlidXRlcy50YXJnZXQgfHwgIiI7CiAgfQp9CmNsYXNzIFNpZ25EYXRhIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgInNpZ25EYXRhIiwgdHJ1ZSk7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMub3BlcmF0aW9uID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMub3BlcmF0aW9uLCBbInNpZ24iLCAiY2xlYXIiLCAidmVyaWZ5Il0pOwogICAgdGhpcy5yZWYgPSBhdHRyaWJ1dGVzLnJlZiB8fCAiIjsKICAgIHRoaXMudGFyZ2V0ID0gYXR0cmlidXRlcy50YXJnZXQgfHwgIiI7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogICAgdGhpcy5maWx0ZXIgPSBudWxsOwogICAgdGhpcy5tYW5pZmVzdCA9IG51bGw7CiAgfQp9CmNsYXNzIFNpZ25hdHVyZSBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJzaWduYXR1cmUiLCB0cnVlKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy50eXBlID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMudHlwZSwgWyJQREYxLjMiLCAiUERGMS42Il0pOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICAgIHRoaXMuYm9yZGVyID0gbnVsbDsKICAgIHRoaXMuZXh0cmFzID0gbnVsbDsKICAgIHRoaXMuZmlsdGVyID0gbnVsbDsKICAgIHRoaXMubWFuaWZlc3QgPSBudWxsOwogICAgdGhpcy5tYXJnaW4gPSBudWxsOwogIH0KfQpjbGFzcyBTaWduaW5nIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgInNpZ25pbmciLCB0cnVlKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy50eXBlID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMudHlwZSwgWyJvcHRpb25hbCIsICJyZXF1aXJlZCJdKTsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgICB0aGlzLmNlcnRpZmljYXRlID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgfQp9CmNsYXNzIFNvbGlkIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgInNvbGlkIiwgdHJ1ZSk7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgICB0aGlzLmV4dHJhcyA9IG51bGw7CiAgfQogIFskdG9TdHlsZV0oc3RhcnRDb2xvcikgewogICAgcmV0dXJuIHN0YXJ0Q29sb3IgPyBzdGFydENvbG9yWyR0b1N0eWxlXSgpIDogIiNGRkZGRkYiOwogIH0KfQpjbGFzcyBTcGVhayBleHRlbmRzIFN0cmluZ09iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJzcGVhayIpOwogICAgdGhpcy5kaXNhYmxlID0gZ2V0SW50ZWdlcih7CiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuZGlzYWJsZSwKICAgICAgZGVmYXVsdFZhbHVlOiAwLAogICAgICB2YWxpZGF0ZTogeCA9PiB4ID09PSAxCiAgICB9KTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy5wcmlvcml0eSA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLnByaW9yaXR5LCBbImN1c3RvbSIsICJjYXB0aW9uIiwgIm5hbWUiLCAidG9vbFRpcCJdKTsKICAgIHRoaXMucmlkID0gYXR0cmlidXRlcy5yaWQgfHwgIiI7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogIH0KfQpjbGFzcyBTdGlwcGxlIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgInN0aXBwbGUiLCB0cnVlKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy5yYXRlID0gZ2V0SW50ZWdlcih7CiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMucmF0ZSwKICAgICAgZGVmYXVsdFZhbHVlOiA1MCwKICAgICAgdmFsaWRhdGU6IHggPT4geCA+PSAwICYmIHggPD0gMTAwCiAgICB9KTsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgICB0aGlzLmNvbG9yID0gbnVsbDsKICAgIHRoaXMuZXh0cmFzID0gbnVsbDsKICB9CiAgWyR0b1N0eWxlXShiZ0NvbG9yKSB7CiAgICBjb25zdCBhbHBoYSA9IHRoaXMucmF0ZSAvIDEwMDsKICAgIHJldHVybiBVdGlsLm1ha2VIZXhDb2xvcihNYXRoLnJvdW5kKGJnQ29sb3IudmFsdWUuciAqICgxIC0gYWxwaGEpICsgdGhpcy52YWx1ZS5yICogYWxwaGEpLCBNYXRoLnJvdW5kKGJnQ29sb3IudmFsdWUuZyAqICgxIC0gYWxwaGEpICsgdGhpcy52YWx1ZS5nICogYWxwaGEpLCBNYXRoLnJvdW5kKGJnQ29sb3IudmFsdWUuYiAqICgxIC0gYWxwaGEpICsgdGhpcy52YWx1ZS5iICogYWxwaGEpKTsKICB9Cn0KY2xhc3MgU3ViZm9ybSBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJzdWJmb3JtIiwgdHJ1ZSk7CiAgICB0aGlzLmFjY2VzcyA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLmFjY2VzcywgWyJvcGVuIiwgIm5vbkludGVyYWN0aXZlIiwgInByb3RlY3RlZCIsICJyZWFkT25seSJdKTsKICAgIHRoaXMuYWxsb3dNYWNybyA9IGdldEludGVnZXIoewogICAgICBkYXRhOiBhdHRyaWJ1dGVzLmFsbG93TWFjcm8sCiAgICAgIGRlZmF1bHRWYWx1ZTogMCwKICAgICAgdmFsaWRhdGU6IHggPT4geCA9PT0gMQogICAgfSk7CiAgICB0aGlzLmFuY2hvclR5cGUgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5hbmNob3JUeXBlLCBbInRvcExlZnQiLCAiYm90dG9tQ2VudGVyIiwgImJvdHRvbUxlZnQiLCAiYm90dG9tUmlnaHQiLCAibWlkZGxlQ2VudGVyIiwgIm1pZGRsZUxlZnQiLCAibWlkZGxlUmlnaHQiLCAidG9wQ2VudGVyIiwgInRvcFJpZ2h0Il0pOwogICAgdGhpcy5jb2xTcGFuID0gZ2V0SW50ZWdlcih7CiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuY29sU3BhbiwKICAgICAgZGVmYXVsdFZhbHVlOiAxLAogICAgICB2YWxpZGF0ZTogbiA9PiBuID49IDEgfHwgbiA9PT0gLTEKICAgIH0pOwogICAgdGhpcy5jb2x1bW5XaWR0aHMgPSAoYXR0cmlidXRlcy5jb2x1bW5XaWR0aHMgfHwgIiIpLnRyaW0oKS5zcGxpdCgvXHMrLykubWFwKHggPT4geCA9PT0gIi0xIiA/IC0xIDogZ2V0TWVhc3VyZW1lbnQoeCkpOwogICAgdGhpcy5oID0gYXR0cmlidXRlcy5oID8gZ2V0TWVhc3VyZW1lbnQoYXR0cmlidXRlcy5oKSA6ICIiOwogICAgdGhpcy5oQWxpZ24gPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5oQWxpZ24sIFsibGVmdCIsICJjZW50ZXIiLCAianVzdGlmeSIsICJqdXN0aWZ5QWxsIiwgInJhZGl4IiwgInJpZ2h0Il0pOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLmxheW91dCA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLmxheW91dCwgWyJwb3NpdGlvbiIsICJsci10YiIsICJybC1yb3ciLCAicmwtdGIiLCAicm93IiwgInRhYmxlIiwgInRiIl0pOwogICAgdGhpcy5sb2NhbGUgPSBhdHRyaWJ1dGVzLmxvY2FsZSB8fCAiIjsKICAgIHRoaXMubWF4SCA9IGdldE1lYXN1cmVtZW50KGF0dHJpYnV0ZXMubWF4SCwgIjBwdCIpOwogICAgdGhpcy5tYXhXID0gZ2V0TWVhc3VyZW1lbnQoYXR0cmlidXRlcy5tYXhXLCAiMHB0Iik7CiAgICB0aGlzLm1lcmdlTW9kZSA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLm1lcmdlTW9kZSwgWyJjb25zdW1lRGF0YSIsICJtYXRjaFRlbXBsYXRlIl0pOwogICAgdGhpcy5taW5IID0gZ2V0TWVhc3VyZW1lbnQoYXR0cmlidXRlcy5taW5ILCAiMHB0Iik7CiAgICB0aGlzLm1pblcgPSBnZXRNZWFzdXJlbWVudChhdHRyaWJ1dGVzLm1pblcsICIwcHQiKTsKICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8fCAiIjsKICAgIHRoaXMucHJlc2VuY2UgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5wcmVzZW5jZSwgWyJ2aXNpYmxlIiwgImhpZGRlbiIsICJpbmFjdGl2ZSIsICJpbnZpc2libGUiXSk7CiAgICB0aGlzLnJlbGV2YW50ID0gZ2V0UmVsZXZhbnQoYXR0cmlidXRlcy5yZWxldmFudCk7CiAgICB0aGlzLnJlc3RvcmVTdGF0ZSA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLnJlc3RvcmVTdGF0ZSwgWyJtYW51YWwiLCAiYXV0byJdKTsKICAgIHRoaXMuc2NvcGUgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5zY29wZSwgWyJuYW1lIiwgIm5vbmUiXSk7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogICAgdGhpcy53ID0gYXR0cmlidXRlcy53ID8gZ2V0TWVhc3VyZW1lbnQoYXR0cmlidXRlcy53KSA6ICIiOwogICAgdGhpcy54ID0gZ2V0TWVhc3VyZW1lbnQoYXR0cmlidXRlcy54LCAiMHB0Iik7CiAgICB0aGlzLnkgPSBnZXRNZWFzdXJlbWVudChhdHRyaWJ1dGVzLnksICIwcHQiKTsKICAgIHRoaXMuYXNzaXN0ID0gbnVsbDsKICAgIHRoaXMuYmluZCA9IG51bGw7CiAgICB0aGlzLmJvb2tlbmQgPSBudWxsOwogICAgdGhpcy5ib3JkZXIgPSBudWxsOwogICAgdGhpcy5icmVhayA9IG51bGw7CiAgICB0aGlzLmNhbGN1bGF0ZSA9IG51bGw7CiAgICB0aGlzLmRlc2MgPSBudWxsOwogICAgdGhpcy5leHRyYXMgPSBudWxsOwogICAgdGhpcy5rZWVwID0gbnVsbDsKICAgIHRoaXMubWFyZ2luID0gbnVsbDsKICAgIHRoaXMub2NjdXIgPSBudWxsOwogICAgdGhpcy5vdmVyZmxvdyA9IG51bGw7CiAgICB0aGlzLnBhZ2VTZXQgPSBudWxsOwogICAgdGhpcy5wYXJhID0gbnVsbDsKICAgIHRoaXMudHJhdmVyc2FsID0gbnVsbDsKICAgIHRoaXMudmFsaWRhdGUgPSBudWxsOwogICAgdGhpcy52YXJpYWJsZXMgPSBudWxsOwogICAgdGhpcy5hcmVhID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmJyZWFrQWZ0ZXIgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuYnJlYWtCZWZvcmUgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuY29ubmVjdCA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5kcmF3ID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmV2ZW50ID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmV4T2JqZWN0ID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmV4Y2xHcm91cCA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5maWVsZCA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5wcm90byA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5zZXRQcm9wZXJ0eSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5zdWJmb3JtID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLnN1YmZvcm1TZXQgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICB9CiAgWyRnZXRTdWJmb3JtUGFyZW50XSgpIHsKICAgIGNvbnN0IHBhcmVudCA9IHRoaXNbJGdldFBhcmVudF0oKTsKICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBTdWJmb3JtU2V0KSB7CiAgICAgIHJldHVybiBwYXJlbnRbJGdldFN1YmZvcm1QYXJlbnRdKCk7CiAgICB9CiAgICByZXR1cm4gcGFyZW50OwogIH0KICBbJGlzQmluZGFibGVdKCkgewogICAgcmV0dXJuIHRydWU7CiAgfQogIFskaXNUaGVyZU1vcmVXaWR0aF0oKSB7CiAgICByZXR1cm4gdGhpcy5sYXlvdXQuZW5kc1dpdGgoIi10YiIpICYmIHRoaXNbJGV4dHJhXS5hdHRlbXB0ID09PSAwICYmIHRoaXNbJGV4dHJhXS5udW1iZXJJbkxpbmUgPiAwIHx8IHRoaXNbJGdldFBhcmVudF0oKVskaXNUaGVyZU1vcmVXaWR0aF0oKTsKICB9CiAgKlskZ2V0Q29udGFpbmVkQ2hpbGRyZW5dKCkgewogICAgeWllbGQqIGdldENvbnRhaW5lZENoaWxkcmVuKHRoaXMpOwogIH0KICBbJGZsdXNoSFRNTF0oKSB7CiAgICByZXR1cm4gZmx1c2hIVE1MKHRoaXMpOwogIH0KICBbJGFkZEhUTUxdKGh0bWwsIGJib3gpIHsKICAgIGFkZEhUTUwodGhpcywgaHRtbCwgYmJveCk7CiAgfQogIFskZ2V0QXZhaWxhYmxlU3BhY2VdKCkgewogICAgcmV0dXJuIGdldEF2YWlsYWJsZVNwYWNlKHRoaXMpOwogIH0KICBbJGlzU3BsaXR0YWJsZV0oKSB7CiAgICBjb25zdCBwYXJlbnQgPSB0aGlzWyRnZXRTdWJmb3JtUGFyZW50XSgpOwogICAgaWYgKCFwYXJlbnRbJGlzU3BsaXR0YWJsZV0oKSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAodGhpc1skZXh0cmFdLl9pc1NwbGl0dGFibGUgIT09IHVuZGVmaW5lZCkgewogICAgICByZXR1cm4gdGhpc1skZXh0cmFdLl9pc1NwbGl0dGFibGU7CiAgICB9CiAgICBpZiAodGhpcy5sYXlvdXQgPT09ICJwb3NpdGlvbiIgfHwgdGhpcy5sYXlvdXQuaW5jbHVkZXMoInJvdyIpKSB7CiAgICAgIHRoaXNbJGV4dHJhXS5faXNTcGxpdHRhYmxlID0gZmFsc2U7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmICh0aGlzLmtlZXAgJiYgdGhpcy5rZWVwLmludGFjdCAhPT0gIm5vbmUiKSB7CiAgICAgIHRoaXNbJGV4dHJhXS5faXNTcGxpdHRhYmxlID0gZmFsc2U7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmIChwYXJlbnQubGF5b3V0Py5lbmRzV2l0aCgiLXRiIikgJiYgcGFyZW50WyRleHRyYV0ubnVtYmVySW5MaW5lICE9PSAwKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHRoaXNbJGV4dHJhXS5faXNTcGxpdHRhYmxlID0gdHJ1ZTsKICAgIHJldHVybiB0cnVlOwogIH0KICBbJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpIHsKICAgIHNldFRhYkluZGV4KHRoaXMpOwogICAgaWYgKHRoaXMuYnJlYWspIHsKICAgICAgaWYgKHRoaXMuYnJlYWsuYWZ0ZXIgIT09ICJhdXRvIiB8fCB0aGlzLmJyZWFrLmFmdGVyVGFyZ2V0ICE9PSAiIikgewogICAgICAgIGNvbnN0IG5vZGUgPSBuZXcgQnJlYWtBZnRlcih7CiAgICAgICAgICB0YXJnZXRUeXBlOiB0aGlzLmJyZWFrLmFmdGVyLAogICAgICAgICAgdGFyZ2V0OiB0aGlzLmJyZWFrLmFmdGVyVGFyZ2V0LAogICAgICAgICAgc3RhcnROZXc6IHRoaXMuYnJlYWsuc3RhcnROZXcudG9TdHJpbmcoKQogICAgICAgIH0pOwogICAgICAgIG5vZGVbJGdsb2JhbERhdGFdID0gdGhpc1skZ2xvYmFsRGF0YV07CiAgICAgICAgdGhpc1skYXBwZW5kQ2hpbGRdKG5vZGUpOwogICAgICAgIHRoaXMuYnJlYWtBZnRlci5wdXNoKG5vZGUpOwogICAgICB9CiAgICAgIGlmICh0aGlzLmJyZWFrLmJlZm9yZSAhPT0gImF1dG8iIHx8IHRoaXMuYnJlYWsuYmVmb3JlVGFyZ2V0ICE9PSAiIikgewogICAgICAgIGNvbnN0IG5vZGUgPSBuZXcgQnJlYWtCZWZvcmUoewogICAgICAgICAgdGFyZ2V0VHlwZTogdGhpcy5icmVhay5iZWZvcmUsCiAgICAgICAgICB0YXJnZXQ6IHRoaXMuYnJlYWsuYmVmb3JlVGFyZ2V0LAogICAgICAgICAgc3RhcnROZXc6IHRoaXMuYnJlYWsuc3RhcnROZXcudG9TdHJpbmcoKQogICAgICAgIH0pOwogICAgICAgIG5vZGVbJGdsb2JhbERhdGFdID0gdGhpc1skZ2xvYmFsRGF0YV07CiAgICAgICAgdGhpc1skYXBwZW5kQ2hpbGRdKG5vZGUpOwogICAgICAgIHRoaXMuYnJlYWtCZWZvcmUucHVzaChub2RlKTsKICAgICAgfQogICAgICBpZiAodGhpcy5icmVhay5vdmVyZmxvd1RhcmdldCAhPT0gIiIpIHsKICAgICAgICBjb25zdCBub2RlID0gbmV3IE92ZXJmbG93KHsKICAgICAgICAgIHRhcmdldDogdGhpcy5icmVhay5vdmVyZmxvd1RhcmdldCwKICAgICAgICAgIGxlYWRlcjogdGhpcy5icmVhay5vdmVyZmxvd0xlYWRlciwKICAgICAgICAgIHRyYWlsZXI6IHRoaXMuYnJlYWsub3ZlcmZsb3dUcmFpbGVyCiAgICAgICAgfSk7CiAgICAgICAgbm9kZVskZ2xvYmFsRGF0YV0gPSB0aGlzWyRnbG9iYWxEYXRhXTsKICAgICAgICB0aGlzWyRhcHBlbmRDaGlsZF0obm9kZSk7CiAgICAgICAgdGhpcy5vdmVyZmxvdy5wdXNoKG5vZGUpOwogICAgICB9CiAgICAgIHRoaXNbJHJlbW92ZUNoaWxkXSh0aGlzLmJyZWFrKTsKICAgICAgdGhpcy5icmVhayA9IG51bGw7CiAgICB9CiAgICBpZiAodGhpcy5wcmVzZW5jZSA9PT0gImhpZGRlbiIgfHwgdGhpcy5wcmVzZW5jZSA9PT0gImluYWN0aXZlIikgewogICAgICByZXR1cm4gSFRNTFJlc3VsdC5FTVBUWTsKICAgIH0KICAgIGlmICh0aGlzLmJyZWFrQmVmb3JlLmNoaWxkcmVuLmxlbmd0aCA+IDEgfHwgdGhpcy5icmVha0FmdGVyLmNoaWxkcmVuLmxlbmd0aCA+IDEpIHsKICAgICAgd2FybigiWEZBIC0gU2V2ZXJhbCBicmVha0JlZm9yZSBvciBicmVha0FmdGVyIGluIHN1YmZvcm1zOiBwbGVhc2UgZmlsZSBhIGJ1Zy4iKTsKICAgIH0KICAgIGlmICh0aGlzLmJyZWFrQmVmb3JlLmNoaWxkcmVuLmxlbmd0aCA+PSAxKSB7CiAgICAgIGNvbnN0IGJyZWFrQmVmb3JlID0gdGhpcy5icmVha0JlZm9yZS5jaGlsZHJlblswXTsKICAgICAgaWYgKGhhbmRsZUJyZWFrKGJyZWFrQmVmb3JlKSkgewogICAgICAgIHJldHVybiBIVE1MUmVzdWx0LmJyZWFrTm9kZShicmVha0JlZm9yZSk7CiAgICAgIH0KICAgIH0KICAgIGlmICh0aGlzWyRleHRyYV0/LmFmdGVyQnJlYWtBZnRlcikgewogICAgICByZXR1cm4gSFRNTFJlc3VsdC5FTVBUWTsKICAgIH0KICAgIGZpeERpbWVuc2lvbnModGhpcyk7CiAgICBjb25zdCBjaGlsZHJlbiA9IFtdOwogICAgY29uc3QgYXR0cmlidXRlcyA9IHsKICAgICAgaWQ6IHRoaXNbJHVpZF0sCiAgICAgIGNsYXNzOiBbXQogICAgfTsKICAgIHNldEFjY2Vzcyh0aGlzLCBhdHRyaWJ1dGVzLmNsYXNzKTsKICAgIGlmICghdGhpc1skZXh0cmFdKSB7CiAgICAgIHRoaXNbJGV4dHJhXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICB9CiAgICBPYmplY3QuYXNzaWduKHRoaXNbJGV4dHJhXSwgewogICAgICBjaGlsZHJlbiwKICAgICAgbGluZTogbnVsbCwKICAgICAgYXR0cmlidXRlcywKICAgICAgYXR0ZW1wdDogMCwKICAgICAgbnVtYmVySW5MaW5lOiAwLAogICAgICBhdmFpbGFibGVTcGFjZTogewogICAgICAgIHdpZHRoOiBNYXRoLm1pbih0aGlzLncgfHwgSW5maW5pdHksIGF2YWlsYWJsZVNwYWNlLndpZHRoKSwKICAgICAgICBoZWlnaHQ6IE1hdGgubWluKHRoaXMuaCB8fCBJbmZpbml0eSwgYXZhaWxhYmxlU3BhY2UuaGVpZ2h0KQogICAgICB9LAogICAgICB3aWR0aDogMCwKICAgICAgaGVpZ2h0OiAwLAogICAgICBwcmV2SGVpZ2h0OiAwLAogICAgICBjdXJyZW50V2lkdGg6IDAKICAgIH0pOwogICAgY29uc3Qgcm9vdCA9IHRoaXNbJGdldFRlbXBsYXRlUm9vdF0oKTsKICAgIGNvbnN0IHNhdmVkTm9MYXlvdXRGYWlsdXJlID0gcm9vdFskZXh0cmFdLm5vTGF5b3V0RmFpbHVyZTsKICAgIGNvbnN0IGlzU3BsaXR0YWJsZSA9IHRoaXNbJGlzU3BsaXR0YWJsZV0oKTsKICAgIGlmICghaXNTcGxpdHRhYmxlKSB7CiAgICAgIHNldEZpcnN0VW5zcGxpdHRhYmxlKHRoaXMpOwogICAgfQogICAgaWYgKCFjaGVja0RpbWVuc2lvbnModGhpcywgYXZhaWxhYmxlU3BhY2UpKSB7CiAgICAgIHJldHVybiBIVE1MUmVzdWx0LkZBSUxVUkU7CiAgICB9CiAgICBjb25zdCBmaWx0ZXIgPSBuZXcgU2V0KFsiYXJlYSIsICJkcmF3IiwgImV4Y2xHcm91cCIsICJmaWVsZCIsICJzdWJmb3JtIiwgInN1YmZvcm1TZXQiXSk7CiAgICBpZiAodGhpcy5sYXlvdXQuaW5jbHVkZXMoInJvdyIpKSB7CiAgICAgIGNvbnN0IGNvbHVtbldpZHRocyA9IHRoaXNbJGdldFN1YmZvcm1QYXJlbnRdKCkuY29sdW1uV2lkdGhzOwogICAgICBpZiAoQXJyYXkuaXNBcnJheShjb2x1bW5XaWR0aHMpICYmIGNvbHVtbldpZHRocy5sZW5ndGggPiAwKSB7CiAgICAgICAgdGhpc1skZXh0cmFdLmNvbHVtbldpZHRocyA9IGNvbHVtbldpZHRoczsKICAgICAgICB0aGlzWyRleHRyYV0uY3VycmVudENvbHVtbiA9IDA7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0IHN0eWxlID0gdG9TdHlsZSh0aGlzLCAiYW5jaG9yVHlwZSIsICJkaW1lbnNpb25zIiwgInBvc2l0aW9uIiwgInByZXNlbmNlIiwgImJvcmRlciIsICJtYXJnaW4iLCAiaEFsaWduIik7CiAgICBjb25zdCBjbGFzc05hbWVzID0gWyJ4ZmFTdWJmb3JtIl07CiAgICBjb25zdCBjbCA9IGxheW91dENsYXNzKHRoaXMpOwogICAgaWYgKGNsKSB7CiAgICAgIGNsYXNzTmFtZXMucHVzaChjbCk7CiAgICB9CiAgICBhdHRyaWJ1dGVzLnN0eWxlID0gc3R5bGU7CiAgICBhdHRyaWJ1dGVzLmNsYXNzID0gY2xhc3NOYW1lczsKICAgIGlmICh0aGlzLm5hbWUpIHsKICAgICAgYXR0cmlidXRlcy54ZmFOYW1lID0gdGhpcy5uYW1lOwogICAgfQogICAgaWYgKHRoaXMub3ZlcmZsb3cpIHsKICAgICAgY29uc3Qgb3ZlcmZsb3dFeHRyYSA9IHRoaXMub3ZlcmZsb3dbJGdldEV4dHJhXSgpOwogICAgICBpZiAob3ZlcmZsb3dFeHRyYS5hZGRMZWFkZXIpIHsKICAgICAgICBvdmVyZmxvd0V4dHJhLmFkZExlYWRlciA9IGZhbHNlOwogICAgICAgIGhhbmRsZU92ZXJmbG93KHRoaXMsIG92ZXJmbG93RXh0cmEubGVhZGVyLCBhdmFpbGFibGVTcGFjZSk7CiAgICAgIH0KICAgIH0KICAgIHRoaXNbJHB1c2hQYXJhXSgpOwogICAgY29uc3QgaXNMclRiID0gdGhpcy5sYXlvdXQgPT09ICJsci10YiIgfHwgdGhpcy5sYXlvdXQgPT09ICJybC10YiI7CiAgICBjb25zdCBtYXhSdW4gPSBpc0xyVGIgPyBNQVhfQVRURU1QVFNfRk9SX0xSVEJfTEFZT1VUIDogMTsKICAgIGZvciAoOyB0aGlzWyRleHRyYV0uYXR0ZW1wdCA8IG1heFJ1bjsgdGhpc1skZXh0cmFdLmF0dGVtcHQrKykgewogICAgICBpZiAoaXNMclRiICYmIHRoaXNbJGV4dHJhXS5hdHRlbXB0ID09PSBNQVhfQVRURU1QVFNfRk9SX0xSVEJfTEFZT1VUIC0gMSkgewogICAgICAgIHRoaXNbJGV4dHJhXS5udW1iZXJJbkxpbmUgPSAwOwogICAgICB9CiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXNbJGNoaWxkcmVuVG9IVE1MXSh7CiAgICAgICAgZmlsdGVyLAogICAgICAgIGluY2x1ZGU6IHRydWUKICAgICAgfSk7CiAgICAgIGlmIChyZXN1bHQuc3VjY2VzcykgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGlmIChyZXN1bHQuaXNCcmVhaygpKSB7CiAgICAgICAgdGhpc1skcG9wUGFyYV0oKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICAgIGlmIChpc0xyVGIgJiYgdGhpc1skZXh0cmFdLmF0dGVtcHQgPT09IDAgJiYgdGhpc1skZXh0cmFdLm51bWJlckluTGluZSA9PT0gMCAmJiAhcm9vdFskZXh0cmFdLm5vTGF5b3V0RmFpbHVyZSkgewogICAgICAgIHRoaXNbJGV4dHJhXS5hdHRlbXB0ID0gbWF4UnVuOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICB0aGlzWyRwb3BQYXJhXSgpOwogICAgaWYgKCFpc1NwbGl0dGFibGUpIHsKICAgICAgdW5zZXRGaXJzdFVuc3BsaXR0YWJsZSh0aGlzKTsKICAgIH0KICAgIHJvb3RbJGV4dHJhXS5ub0xheW91dEZhaWx1cmUgPSBzYXZlZE5vTGF5b3V0RmFpbHVyZTsKICAgIGlmICh0aGlzWyRleHRyYV0uYXR0ZW1wdCA9PT0gbWF4UnVuKSB7CiAgICAgIGlmICh0aGlzLm92ZXJmbG93KSB7CiAgICAgICAgdGhpc1skZ2V0VGVtcGxhdGVSb290XSgpWyRleHRyYV0ub3ZlcmZsb3dOb2RlID0gdGhpcy5vdmVyZmxvdzsKICAgICAgfQogICAgICBpZiAoIWlzU3BsaXR0YWJsZSkgewogICAgICAgIGRlbGV0ZSB0aGlzWyRleHRyYV07CiAgICAgIH0KICAgICAgcmV0dXJuIEhUTUxSZXN1bHQuRkFJTFVSRTsKICAgIH0KICAgIGlmICh0aGlzLm92ZXJmbG93KSB7CiAgICAgIGNvbnN0IG92ZXJmbG93RXh0cmEgPSB0aGlzLm92ZXJmbG93WyRnZXRFeHRyYV0oKTsKICAgICAgaWYgKG92ZXJmbG93RXh0cmEuYWRkVHJhaWxlcikgewogICAgICAgIG92ZXJmbG93RXh0cmEuYWRkVHJhaWxlciA9IGZhbHNlOwogICAgICAgIGhhbmRsZU92ZXJmbG93KHRoaXMsIG92ZXJmbG93RXh0cmEudHJhaWxlciwgYXZhaWxhYmxlU3BhY2UpOwogICAgICB9CiAgICB9CiAgICBsZXQgbWFyZ2luSCA9IDA7CiAgICBsZXQgbWFyZ2luViA9IDA7CiAgICBpZiAodGhpcy5tYXJnaW4pIHsKICAgICAgbWFyZ2luSCA9IHRoaXMubWFyZ2luLmxlZnRJbnNldCArIHRoaXMubWFyZ2luLnJpZ2h0SW5zZXQ7CiAgICAgIG1hcmdpblYgPSB0aGlzLm1hcmdpbi50b3BJbnNldCArIHRoaXMubWFyZ2luLmJvdHRvbUluc2V0OwogICAgfQogICAgY29uc3Qgd2lkdGggPSBNYXRoLm1heCh0aGlzWyRleHRyYV0ud2lkdGggKyBtYXJnaW5ILCB0aGlzLncgfHwgMCk7CiAgICBjb25zdCBoZWlnaHQgPSBNYXRoLm1heCh0aGlzWyRleHRyYV0uaGVpZ2h0ICsgbWFyZ2luViwgdGhpcy5oIHx8IDApOwogICAgY29uc3QgYmJveCA9IFt0aGlzLngsIHRoaXMueSwgd2lkdGgsIGhlaWdodF07CiAgICBpZiAodGhpcy53ID09PSAiIikgewogICAgICBzdHlsZS53aWR0aCA9IG1lYXN1cmVUb1N0cmluZyh3aWR0aCk7CiAgICB9CiAgICBpZiAodGhpcy5oID09PSAiIikgewogICAgICBzdHlsZS5oZWlnaHQgPSBtZWFzdXJlVG9TdHJpbmcoaGVpZ2h0KTsKICAgIH0KICAgIGlmICgoc3R5bGUud2lkdGggPT09ICIwcHgiIHx8IHN0eWxlLmhlaWdodCA9PT0gIjBweCIpICYmIGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgewogICAgICByZXR1cm4gSFRNTFJlc3VsdC5FTVBUWTsKICAgIH0KICAgIGNvbnN0IGh0bWwgPSB7CiAgICAgIG5hbWU6ICJkaXYiLAogICAgICBhdHRyaWJ1dGVzLAogICAgICBjaGlsZHJlbgogICAgfTsKICAgIGFwcGx5QXNzaXN0KHRoaXMsIGF0dHJpYnV0ZXMpOwogICAgY29uc3QgcmVzdWx0ID0gSFRNTFJlc3VsdC5zdWNjZXNzKGNyZWF0ZVdyYXBwZXIodGhpcywgaHRtbCksIGJib3gpOwogICAgaWYgKHRoaXMuYnJlYWtBZnRlci5jaGlsZHJlbi5sZW5ndGggPj0gMSkgewogICAgICBjb25zdCBicmVha0FmdGVyID0gdGhpcy5icmVha0FmdGVyLmNoaWxkcmVuWzBdOwogICAgICBpZiAoaGFuZGxlQnJlYWsoYnJlYWtBZnRlcikpIHsKICAgICAgICB0aGlzWyRleHRyYV0uYWZ0ZXJCcmVha0FmdGVyID0gcmVzdWx0OwogICAgICAgIHJldHVybiBIVE1MUmVzdWx0LmJyZWFrTm9kZShicmVha0FmdGVyKTsKICAgICAgfQogICAgfQogICAgZGVsZXRlIHRoaXNbJGV4dHJhXTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQp9CmNsYXNzIFN1YmZvcm1TZXQgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCAic3ViZm9ybVNldCIsIHRydWUpOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgIiI7CiAgICB0aGlzLnJlbGF0aW9uID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMucmVsYXRpb24sIFsib3JkZXJlZCIsICJjaG9pY2UiLCAidW5vcmRlcmVkIl0pOwogICAgdGhpcy5yZWxldmFudCA9IGdldFJlbGV2YW50KGF0dHJpYnV0ZXMucmVsZXZhbnQpOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICAgIHRoaXMuYm9va2VuZCA9IG51bGw7CiAgICB0aGlzLmJyZWFrID0gbnVsbDsKICAgIHRoaXMuZGVzYyA9IG51bGw7CiAgICB0aGlzLmV4dHJhcyA9IG51bGw7CiAgICB0aGlzLm9jY3VyID0gbnVsbDsKICAgIHRoaXMub3ZlcmZsb3cgPSBudWxsOwogICAgdGhpcy5icmVha0FmdGVyID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmJyZWFrQmVmb3JlID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLnN1YmZvcm0gPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuc3ViZm9ybVNldCA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogIH0KICAqWyRnZXRDb250YWluZWRDaGlsZHJlbl0oKSB7CiAgICB5aWVsZCogZ2V0Q29udGFpbmVkQ2hpbGRyZW4odGhpcyk7CiAgfQogIFskZ2V0U3ViZm9ybVBhcmVudF0oKSB7CiAgICBsZXQgcGFyZW50ID0gdGhpc1skZ2V0UGFyZW50XSgpOwogICAgd2hpbGUgKCEocGFyZW50IGluc3RhbmNlb2YgU3ViZm9ybSkpIHsKICAgICAgcGFyZW50ID0gcGFyZW50WyRnZXRQYXJlbnRdKCk7CiAgICB9CiAgICByZXR1cm4gcGFyZW50OwogIH0KICBbJGlzQmluZGFibGVdKCkgewogICAgcmV0dXJuIHRydWU7CiAgfQp9CmNsYXNzIFN1YmplY3RETiBleHRlbmRzIENvbnRlbnRPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCAic3ViamVjdEROIik7CiAgICB0aGlzLmRlbGltaXRlciA9IGF0dHJpYnV0ZXMuZGVsaW1pdGVyIHx8ICIsIjsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8ICIiOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICB9CiAgWyRmaW5hbGl6ZV0oKSB7CiAgICB0aGlzWyRjb250ZW50XSA9IG5ldyBNYXAodGhpc1skY29udGVudF0uc3BsaXQodGhpcy5kZWxpbWl0ZXIpLm1hcChrdiA9PiB7CiAgICAgIGt2ID0ga3Yuc3BsaXQoIj0iLCAyKTsKICAgICAga3ZbMF0gPSBrdlswXS50cmltKCk7CiAgICAgIHJldHVybiBrdjsKICAgIH0pKTsKICB9Cn0KY2xhc3MgU3ViamVjdEROcyBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJzdWJqZWN0RE5zIiwgdHJ1ZSk7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMudHlwZSA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLnR5cGUsIFsib3B0aW9uYWwiLCAicmVxdWlyZWQiXSk7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogICAgdGhpcy5zdWJqZWN0RE4gPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICB9Cn0KY2xhc3MgU3VibWl0IGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgInN1Ym1pdCIsIHRydWUpOwogICAgdGhpcy5lbWJlZFBERiA9IGdldEludGVnZXIoewogICAgICBkYXRhOiBhdHRyaWJ1dGVzLmVtYmVkUERGLAogICAgICBkZWZhdWx0VmFsdWU6IDAsCiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPT09IDEKICAgIH0pOwogICAgdGhpcy5mb3JtYXQgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5mb3JtYXQsIFsieGRwIiwgImZvcm1kYXRhIiwgInBkZiIsICJ1cmxlbmNvZGVkIiwgInhmZCIsICJ4bWwiXSk7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMudGFyZ2V0ID0gYXR0cmlidXRlcy50YXJnZXQgfHwgIiI7CiAgICB0aGlzLnRleHRFbmNvZGluZyA9IGdldEtleXdvcmQoewogICAgICBkYXRhOiBhdHRyaWJ1dGVzLnRleHRFbmNvZGluZyA/IGF0dHJpYnV0ZXMudGV4dEVuY29kaW5nLnRvTG93ZXJDYXNlKCkgOiAiIiwKICAgICAgZGVmYXVsdFZhbHVlOiAiIiwKICAgICAgdmFsaWRhdGU6IGsgPT4gWyJ1dGYtOCIsICJiaWctZml2ZSIsICJmb250c3BlY2lmaWMiLCAiZ2JrIiwgImdiLTE4MDMwIiwgImdiLTIzMTIiLCAia3NjLTU2MDEiLCAibm9uZSIsICJzaGlmdC1qaXMiLCAidWNzLTIiLCAidXRmLTE2Il0uaW5jbHVkZXMoaykgfHwgay5tYXRjaCgvaXNvLTg4NTktXGR7Mn0vKQogICAgfSk7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogICAgdGhpcy54ZHBDb250ZW50ID0gYXR0cmlidXRlcy54ZHBDb250ZW50IHx8ICIiOwogICAgdGhpcy5lbmNyeXB0ID0gbnVsbDsKICAgIHRoaXMuZW5jcnlwdERhdGEgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuc2lnbkRhdGEgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICB9Cn0KY2xhc3MgVGVtcGxhdGUgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCAidGVtcGxhdGUiLCB0cnVlKTsKICAgIHRoaXMuYmFzZVByb2ZpbGUgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5iYXNlUHJvZmlsZSwgWyJmdWxsIiwgImludGVyYWN0aXZlRm9ybXMiXSk7CiAgICB0aGlzLmV4dHJhcyA9IG51bGw7CiAgICB0aGlzLnN1YmZvcm0gPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICB9CiAgWyRmaW5hbGl6ZV0oKSB7CiAgICBpZiAodGhpcy5zdWJmb3JtLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgewogICAgICB3YXJuKCJYRkEgLSBObyBzdWJmb3JtcyBpbiB0ZW1wbGF0ZSBub2RlLiIpOwogICAgfQogICAgaWYgKHRoaXMuc3ViZm9ybS5jaGlsZHJlbi5sZW5ndGggPj0gMikgewogICAgICB3YXJuKCJYRkEgLSBTZXZlcmFsIHN1YmZvcm1zIGluIHRlbXBsYXRlIG5vZGU6IHBsZWFzZSBmaWxlIGEgYnVnLiIpOwogICAgfQogICAgdGhpc1skdGFiSW5kZXhdID0gREVGQVVMVF9UQUJfSU5ERVg7CiAgfQogIFskaXNTcGxpdHRhYmxlXSgpIHsKICAgIHJldHVybiB0cnVlOwogIH0KICBbJHNlYXJjaE5vZGVdKGV4cHIsIGNvbnRhaW5lcikgewogICAgaWYgKGV4cHIuc3RhcnRzV2l0aCgiIyIpKSB7CiAgICAgIHJldHVybiBbdGhpc1skaWRzXS5nZXQoZXhwci5zbGljZSgxKSldOwogICAgfQogICAgcmV0dXJuIHNlYXJjaE5vZGUodGhpcywgY29udGFpbmVyLCBleHByLCB0cnVlLCB0cnVlKTsKICB9CiAgKlskdG9QYWdlc10oKSB7CiAgICBpZiAoIXRoaXMuc3ViZm9ybS5jaGlsZHJlbi5sZW5ndGgpIHsKICAgICAgcmV0dXJuIEhUTUxSZXN1bHQuc3VjY2Vzcyh7CiAgICAgICAgbmFtZTogImRpdiIsCiAgICAgICAgY2hpbGRyZW46IFtdCiAgICAgIH0pOwogICAgfQogICAgdGhpc1skZXh0cmFdID0gewogICAgICBvdmVyZmxvd05vZGU6IG51bGwsCiAgICAgIGZpcnN0VW5zcGxpdHRhYmxlOiBudWxsLAogICAgICBjdXJyZW50Q29udGVudEFyZWE6IG51bGwsCiAgICAgIGN1cnJlbnRQYWdlQXJlYTogbnVsbCwKICAgICAgbm9MYXlvdXRGYWlsdXJlOiBmYWxzZSwKICAgICAgcGFnZU51bWJlcjogMSwKICAgICAgcGFnZVBvc2l0aW9uOiAiZmlyc3QiLAogICAgICBvZGRPckV2ZW46ICJvZGQiLAogICAgICBibGFua09yTm90Qmxhbms6ICJub25CbGFuayIsCiAgICAgIHBhcmFTdGFjazogW10KICAgIH07CiAgICBjb25zdCByb290ID0gdGhpcy5zdWJmb3JtLmNoaWxkcmVuWzBdOwogICAgcm9vdC5wYWdlU2V0WyRjbGVhblBhZ2VdKCk7CiAgICBjb25zdCBwYWdlQXJlYXMgPSByb290LnBhZ2VTZXQucGFnZUFyZWEuY2hpbGRyZW47CiAgICBjb25zdCBtYWluSHRtbCA9IHsKICAgICAgbmFtZTogImRpdiIsCiAgICAgIGNoaWxkcmVuOiBbXQogICAgfTsKICAgIGxldCBwYWdlQXJlYSA9IG51bGw7CiAgICBsZXQgYnJlYWtCZWZvcmUgPSBudWxsOwogICAgbGV0IGJyZWFrQmVmb3JlVGFyZ2V0ID0gbnVsbDsKICAgIGlmIChyb290LmJyZWFrQmVmb3JlLmNoaWxkcmVuLmxlbmd0aCA+PSAxKSB7CiAgICAgIGJyZWFrQmVmb3JlID0gcm9vdC5icmVha0JlZm9yZS5jaGlsZHJlblswXTsKICAgICAgYnJlYWtCZWZvcmVUYXJnZXQgPSBicmVha0JlZm9yZS50YXJnZXQ7CiAgICB9IGVsc2UgaWYgKHJvb3Quc3ViZm9ybS5jaGlsZHJlbi5sZW5ndGggPj0gMSAmJiByb290LnN1YmZvcm0uY2hpbGRyZW5bMF0uYnJlYWtCZWZvcmUuY2hpbGRyZW4ubGVuZ3RoID49IDEpIHsKICAgICAgYnJlYWtCZWZvcmUgPSByb290LnN1YmZvcm0uY2hpbGRyZW5bMF0uYnJlYWtCZWZvcmUuY2hpbGRyZW5bMF07CiAgICAgIGJyZWFrQmVmb3JlVGFyZ2V0ID0gYnJlYWtCZWZvcmUudGFyZ2V0OwogICAgfSBlbHNlIGlmIChyb290LmJyZWFrPy5iZWZvcmVUYXJnZXQpIHsKICAgICAgYnJlYWtCZWZvcmUgPSByb290LmJyZWFrOwogICAgICBicmVha0JlZm9yZVRhcmdldCA9IGJyZWFrQmVmb3JlLmJlZm9yZVRhcmdldDsKICAgIH0gZWxzZSBpZiAocm9vdC5zdWJmb3JtLmNoaWxkcmVuLmxlbmd0aCA+PSAxICYmIHJvb3Quc3ViZm9ybS5jaGlsZHJlblswXS5icmVhaz8uYmVmb3JlVGFyZ2V0KSB7CiAgICAgIGJyZWFrQmVmb3JlID0gcm9vdC5zdWJmb3JtLmNoaWxkcmVuWzBdLmJyZWFrOwogICAgICBicmVha0JlZm9yZVRhcmdldCA9IGJyZWFrQmVmb3JlLmJlZm9yZVRhcmdldDsKICAgIH0KICAgIGlmIChicmVha0JlZm9yZSkgewogICAgICBjb25zdCB0YXJnZXQgPSB0aGlzWyRzZWFyY2hOb2RlXShicmVha0JlZm9yZVRhcmdldCwgYnJlYWtCZWZvcmVbJGdldFBhcmVudF0oKSk7CiAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBQYWdlQXJlYSkgewogICAgICAgIHBhZ2VBcmVhID0gdGFyZ2V0OwogICAgICAgIGJyZWFrQmVmb3JlWyRleHRyYV0gPSB7fTsKICAgICAgfQogICAgfQogICAgaWYgKCFwYWdlQXJlYSkgewogICAgICBwYWdlQXJlYSA9IHBhZ2VBcmVhc1swXTsKICAgIH0KICAgIHBhZ2VBcmVhWyRleHRyYV0gPSB7CiAgICAgIG51bWJlck9mVXNlOiAxCiAgICB9OwogICAgY29uc3QgcGFnZUFyZWFQYXJlbnQgPSBwYWdlQXJlYVskZ2V0UGFyZW50XSgpOwogICAgcGFnZUFyZWFQYXJlbnRbJGV4dHJhXSA9IHsKICAgICAgbnVtYmVyT2ZVc2U6IDEsCiAgICAgIHBhZ2VJbmRleDogcGFnZUFyZWFQYXJlbnQucGFnZUFyZWEuY2hpbGRyZW4uaW5kZXhPZihwYWdlQXJlYSksCiAgICAgIHBhZ2VTZXRJbmRleDogMAogICAgfTsKICAgIGxldCB0YXJnZXRQYWdlQXJlYTsKICAgIGxldCBsZWFkZXIgPSBudWxsOwogICAgbGV0IHRyYWlsZXIgPSBudWxsOwogICAgbGV0IGhhc1NvbWV0aGluZyA9IHRydWU7CiAgICBsZXQgaGFzU29tZXRoaW5nQ291bnRlciA9IDA7CiAgICBsZXQgc3RhcnRJbmRleCA9IDA7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBpZiAoIWhhc1NvbWV0aGluZykgewogICAgICAgIG1haW5IdG1sLmNoaWxkcmVuLnBvcCgpOwogICAgICAgIGlmICgrK2hhc1NvbWV0aGluZ0NvdW50ZXIgPT09IE1BWF9FTVBUWV9QQUdFUykgewogICAgICAgICAgd2FybigiWEZBIC0gU29tZXRoaW5nIGdvZXMgd3Jvbmc6IHBsZWFzZSBmaWxlIGEgYnVnLiIpOwogICAgICAgICAgcmV0dXJuIG1haW5IdG1sOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBoYXNTb21ldGhpbmdDb3VudGVyID0gMDsKICAgICAgfQogICAgICB0YXJnZXRQYWdlQXJlYSA9IG51bGw7CiAgICAgIHRoaXNbJGV4dHJhXS5jdXJyZW50UGFnZUFyZWEgPSBwYWdlQXJlYTsKICAgICAgY29uc3QgcGFnZSA9IHBhZ2VBcmVhWyR0b0hUTUxdKCkuaHRtbDsKICAgICAgbWFpbkh0bWwuY2hpbGRyZW4ucHVzaChwYWdlKTsKICAgICAgaWYgKGxlYWRlcikgewogICAgICAgIHRoaXNbJGV4dHJhXS5ub0xheW91dEZhaWx1cmUgPSB0cnVlOwogICAgICAgIHBhZ2UuY2hpbGRyZW4ucHVzaChsZWFkZXJbJHRvSFRNTF0ocGFnZUFyZWFbJGV4dHJhXS5zcGFjZSkuaHRtbCk7CiAgICAgICAgbGVhZGVyID0gbnVsbDsKICAgICAgfQogICAgICBpZiAodHJhaWxlcikgewogICAgICAgIHRoaXNbJGV4dHJhXS5ub0xheW91dEZhaWx1cmUgPSB0cnVlOwogICAgICAgIHBhZ2UuY2hpbGRyZW4ucHVzaCh0cmFpbGVyWyR0b0hUTUxdKHBhZ2VBcmVhWyRleHRyYV0uc3BhY2UpLmh0bWwpOwogICAgICAgIHRyYWlsZXIgPSBudWxsOwogICAgICB9CiAgICAgIGNvbnN0IGNvbnRlbnRBcmVhcyA9IHBhZ2VBcmVhLmNvbnRlbnRBcmVhLmNoaWxkcmVuOwogICAgICBjb25zdCBodG1sQ29udGVudEFyZWFzID0gcGFnZS5jaGlsZHJlbi5maWx0ZXIobm9kZSA9PiBub2RlLmF0dHJpYnV0ZXMuY2xhc3MuaW5jbHVkZXMoInhmYUNvbnRlbnRhcmVhIikpOwogICAgICBoYXNTb21ldGhpbmcgPSBmYWxzZTsKICAgICAgdGhpc1skZXh0cmFdLmZpcnN0VW5zcGxpdHRhYmxlID0gbnVsbDsKICAgICAgdGhpc1skZXh0cmFdLm5vTGF5b3V0RmFpbHVyZSA9IGZhbHNlOwogICAgICBjb25zdCBmbHVzaCA9IGluZGV4ID0+IHsKICAgICAgICBjb25zdCBodG1sID0gcm9vdFskZmx1c2hIVE1MXSgpOwogICAgICAgIGlmIChodG1sKSB7CiAgICAgICAgICBoYXNTb21ldGhpbmcgfHw9IGh0bWwuY2hpbGRyZW4/Lmxlbmd0aCA+IDA7CiAgICAgICAgICBodG1sQ29udGVudEFyZWFzW2luZGV4XS5jaGlsZHJlbi5wdXNoKGh0bWwpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXgsIGlpID0gY29udGVudEFyZWFzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgICBjb25zdCBjb250ZW50QXJlYSA9IHRoaXNbJGV4dHJhXS5jdXJyZW50Q29udGVudEFyZWEgPSBjb250ZW50QXJlYXNbaV07CiAgICAgICAgY29uc3Qgc3BhY2UgPSB7CiAgICAgICAgICB3aWR0aDogY29udGVudEFyZWEudywKICAgICAgICAgIGhlaWdodDogY29udGVudEFyZWEuaAogICAgICAgIH07CiAgICAgICAgc3RhcnRJbmRleCA9IDA7CiAgICAgICAgaWYgKGxlYWRlcikgewogICAgICAgICAgaHRtbENvbnRlbnRBcmVhc1tpXS5jaGlsZHJlbi5wdXNoKGxlYWRlclskdG9IVE1MXShzcGFjZSkuaHRtbCk7CiAgICAgICAgICBsZWFkZXIgPSBudWxsOwogICAgICAgIH0KICAgICAgICBpZiAodHJhaWxlcikgewogICAgICAgICAgaHRtbENvbnRlbnRBcmVhc1tpXS5jaGlsZHJlbi5wdXNoKHRyYWlsZXJbJHRvSFRNTF0oc3BhY2UpLmh0bWwpOwogICAgICAgICAgdHJhaWxlciA9IG51bGw7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGh0bWwgPSByb290WyR0b0hUTUxdKHNwYWNlKTsKICAgICAgICBpZiAoaHRtbC5zdWNjZXNzKSB7CiAgICAgICAgICBpZiAoaHRtbC5odG1sKSB7CiAgICAgICAgICAgIGhhc1NvbWV0aGluZyB8fD0gaHRtbC5odG1sLmNoaWxkcmVuPy5sZW5ndGggPiAwOwogICAgICAgICAgICBodG1sQ29udGVudEFyZWFzW2ldLmNoaWxkcmVuLnB1c2goaHRtbC5odG1sKTsKICAgICAgICAgIH0gZWxzZSBpZiAoIWhhc1NvbWV0aGluZyAmJiBtYWluSHRtbC5jaGlsZHJlbi5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgIG1haW5IdG1sLmNoaWxkcmVuLnBvcCgpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIG1haW5IdG1sOwogICAgICAgIH0KICAgICAgICBpZiAoaHRtbC5pc0JyZWFrKCkpIHsKICAgICAgICAgIGNvbnN0IG5vZGUgPSBodG1sLmJyZWFrTm9kZTsKICAgICAgICAgIGZsdXNoKGkpOwogICAgICAgICAgaWYgKG5vZGUudGFyZ2V0VHlwZSA9PT0gImF1dG8iKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG5vZGUubGVhZGVyKSB7CiAgICAgICAgICAgIGxlYWRlciA9IHRoaXNbJHNlYXJjaE5vZGVdKG5vZGUubGVhZGVyLCBub2RlWyRnZXRQYXJlbnRdKCkpOwogICAgICAgICAgICBsZWFkZXIgPSBsZWFkZXIgPyBsZWFkZXJbMF0gOiBudWxsOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG5vZGUudHJhaWxlcikgewogICAgICAgICAgICB0cmFpbGVyID0gdGhpc1skc2VhcmNoTm9kZV0obm9kZS50cmFpbGVyLCBub2RlWyRnZXRQYXJlbnRdKCkpOwogICAgICAgICAgICB0cmFpbGVyID0gdHJhaWxlciA/IHRyYWlsZXJbMF0gOiBudWxsOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG5vZGUudGFyZ2V0VHlwZSA9PT0gInBhZ2VBcmVhIikgewogICAgICAgICAgICB0YXJnZXRQYWdlQXJlYSA9IG5vZGVbJGV4dHJhXS50YXJnZXQ7CiAgICAgICAgICAgIGkgPSBJbmZpbml0eTsKICAgICAgICAgIH0gZWxzZSBpZiAoIW5vZGVbJGV4dHJhXS50YXJnZXQpIHsKICAgICAgICAgICAgaSA9IG5vZGVbJGV4dHJhXS5pbmRleDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRhcmdldFBhZ2VBcmVhID0gbm9kZVskZXh0cmFdLnRhcmdldDsKICAgICAgICAgICAgc3RhcnRJbmRleCA9IG5vZGVbJGV4dHJhXS5pbmRleCArIDE7CiAgICAgICAgICAgIGkgPSBJbmZpbml0eTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBpZiAodGhpc1skZXh0cmFdLm92ZXJmbG93Tm9kZSkgewogICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXNbJGV4dHJhXS5vdmVyZmxvd05vZGU7CiAgICAgICAgICB0aGlzWyRleHRyYV0ub3ZlcmZsb3dOb2RlID0gbnVsbDsKICAgICAgICAgIGNvbnN0IG92ZXJmbG93RXh0cmEgPSBub2RlWyRnZXRFeHRyYV0oKTsKICAgICAgICAgIGNvbnN0IHRhcmdldCA9IG92ZXJmbG93RXh0cmEudGFyZ2V0OwogICAgICAgICAgb3ZlcmZsb3dFeHRyYS5hZGRMZWFkZXIgPSBvdmVyZmxvd0V4dHJhLmxlYWRlciAhPT0gbnVsbDsKICAgICAgICAgIG92ZXJmbG93RXh0cmEuYWRkVHJhaWxlciA9IG92ZXJmbG93RXh0cmEudHJhaWxlciAhPT0gbnVsbDsKICAgICAgICAgIGZsdXNoKGkpOwogICAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gaTsKICAgICAgICAgIGkgPSBJbmZpbml0eTsKICAgICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBQYWdlQXJlYSkgewogICAgICAgICAgICB0YXJnZXRQYWdlQXJlYSA9IHRhcmdldDsKICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQ29udGVudEFyZWEpIHsKICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjb250ZW50QXJlYXMuaW5kZXhPZih0YXJnZXQpOwogICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7CiAgICAgICAgICAgICAgaWYgKGluZGV4ID4gY3VycmVudEluZGV4KSB7CiAgICAgICAgICAgICAgICBpID0gaW5kZXggLSAxOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gaW5kZXg7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRhcmdldFBhZ2VBcmVhID0gdGFyZ2V0WyRnZXRQYXJlbnRdKCk7CiAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IHRhcmdldFBhZ2VBcmVhLmNvbnRlbnRBcmVhLmNoaWxkcmVuLmluZGV4T2YodGFyZ2V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGZsdXNoKGkpOwogICAgICB9CiAgICAgIHRoaXNbJGV4dHJhXS5wYWdlTnVtYmVyICs9IDE7CiAgICAgIGlmICh0YXJnZXRQYWdlQXJlYSkgewogICAgICAgIGlmICh0YXJnZXRQYWdlQXJlYVskaXNVc2FibGVdKCkpIHsKICAgICAgICAgIHRhcmdldFBhZ2VBcmVhWyRleHRyYV0ubnVtYmVyT2ZVc2UgKz0gMTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGFyZ2V0UGFnZUFyZWEgPSBudWxsOwogICAgICAgIH0KICAgICAgfQogICAgICBwYWdlQXJlYSA9IHRhcmdldFBhZ2VBcmVhIHx8IHBhZ2VBcmVhWyRnZXROZXh0UGFnZV0oKTsKICAgICAgeWllbGQgbnVsbDsKICAgIH0KICB9Cn0KY2xhc3MgVGV4dCBleHRlbmRzIENvbnRlbnRPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCAidGV4dCIpOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLm1heENoYXJzID0gZ2V0SW50ZWdlcih7CiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMubWF4Q2hhcnMsCiAgICAgIGRlZmF1bHRWYWx1ZTogMCwKICAgICAgdmFsaWRhdGU6IHggPT4geCA+PSAwCiAgICB9KTsKICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8fCAiIjsKICAgIHRoaXMucmlkID0gYXR0cmlidXRlcy5yaWQgfHwgIiI7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogIH0KICBbJGFjY2VwdFdoaXRlc3BhY2VdKCkgewogICAgcmV0dXJuIHRydWU7CiAgfQogIFskb25DaGlsZF0oY2hpbGQpIHsKICAgIGlmIChjaGlsZFskbmFtZXNwYWNlSWRdID09PSBOYW1lc3BhY2VJZHMueGh0bWwuaWQpIHsKICAgICAgdGhpc1skY29udGVudF0gPSBjaGlsZDsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICB3YXJuKGBYRkEgLSBJbnZhbGlkIGNvbnRlbnQgaW4gVGV4dDogJHtjaGlsZFskbm9kZU5hbWVdfS5gKTsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgWyRvblRleHRdKHN0cikgewogICAgaWYgKHRoaXNbJGNvbnRlbnRdIGluc3RhbmNlb2YgWEZBT2JqZWN0KSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHN1cGVyWyRvblRleHRdKHN0cik7CiAgfQogIFskZmluYWxpemVdKCkgewogICAgaWYgKHR5cGVvZiB0aGlzWyRjb250ZW50XSA9PT0gInN0cmluZyIpIHsKICAgICAgdGhpc1skY29udGVudF0gPSB0aGlzWyRjb250ZW50XS5yZXBsYWNlQWxsKCJcclxuIiwgIlxuIik7CiAgICB9CiAgfQogIFskZ2V0RXh0cmFdKCkgewogICAgaWYgKHR5cGVvZiB0aGlzWyRjb250ZW50XSA9PT0gInN0cmluZyIpIHsKICAgICAgcmV0dXJuIHRoaXNbJGNvbnRlbnRdLnNwbGl0KC9bXHUyMDI5XHUyMDI4XG5dLykuZmlsdGVyKGxpbmUgPT4gISFsaW5lKS5qb2luKCJcbiIpOwogICAgfQogICAgcmV0dXJuIHRoaXNbJGNvbnRlbnRdWyR0ZXh0XSgpOwogIH0KICBbJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpIHsKICAgIGlmICh0eXBlb2YgdGhpc1skY29udGVudF0gPT09ICJzdHJpbmciKSB7CiAgICAgIGNvbnN0IGh0bWwgPSB2YWx1ZVRvSHRtbCh0aGlzWyRjb250ZW50XSkuaHRtbDsKICAgICAgaWYgKHRoaXNbJGNvbnRlbnRdLmluY2x1ZGVzKCJcdTIwMjkiKSkgewogICAgICAgIGh0bWwubmFtZSA9ICJkaXYiOwogICAgICAgIGh0bWwuY2hpbGRyZW4gPSBbXTsKICAgICAgICB0aGlzWyRjb250ZW50XS5zcGxpdCgiXHUyMDI5IikubWFwKHBhcmEgPT4gcGFyYS5zcGxpdCgvW1x1MjAyOFxuXS8pLmZsYXRNYXAobGluZSA9PiBbewogICAgICAgICAgbmFtZTogInNwYW4iLAogICAgICAgICAgdmFsdWU6IGxpbmUKICAgICAgICB9LCB7CiAgICAgICAgICBuYW1lOiAiYnIiCiAgICAgICAgfV0pKS5mb3JFYWNoKGxpbmVzID0+IHsKICAgICAgICAgIGh0bWwuY2hpbGRyZW4ucHVzaCh7CiAgICAgICAgICAgIG5hbWU6ICJwIiwKICAgICAgICAgICAgY2hpbGRyZW46IGxpbmVzCiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfSBlbHNlIGlmICgvW1x1MjAyOFxuXS8udGVzdCh0aGlzWyRjb250ZW50XSkpIHsKICAgICAgICBodG1sLm5hbWUgPSAiZGl2IjsKICAgICAgICBodG1sLmNoaWxkcmVuID0gW107CiAgICAgICAgdGhpc1skY29udGVudF0uc3BsaXQoL1tcdTIwMjhcbl0vKS5mb3JFYWNoKGxpbmUgPT4gewogICAgICAgICAgaHRtbC5jaGlsZHJlbi5wdXNoKHsKICAgICAgICAgICAgbmFtZTogInNwYW4iLAogICAgICAgICAgICB2YWx1ZTogbGluZQogICAgICAgICAgfSwgewogICAgICAgICAgICBuYW1lOiAiYnIiCiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfQogICAgICByZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKGh0bWwpOwogICAgfQogICAgcmV0dXJuIHRoaXNbJGNvbnRlbnRdWyR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKTsKICB9Cn0KY2xhc3MgVGV4dEVkaXQgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCAidGV4dEVkaXQiLCB0cnVlKTsKICAgIHRoaXMuYWxsb3dSaWNoVGV4dCA9IGdldEludGVnZXIoewogICAgICBkYXRhOiBhdHRyaWJ1dGVzLmFsbG93UmljaFRleHQsCiAgICAgIGRlZmF1bHRWYWx1ZTogMCwKICAgICAgdmFsaWRhdGU6IHggPT4geCA9PT0gMQogICAgfSk7CiAgICB0aGlzLmhTY3JvbGxQb2xpY3kgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5oU2Nyb2xsUG9saWN5LCBbImF1dG8iLCAib2ZmIiwgIm9uIl0pOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLm11bHRpTGluZSA9IGdldEludGVnZXIoewogICAgICBkYXRhOiBhdHRyaWJ1dGVzLm11bHRpTGluZSwKICAgICAgZGVmYXVsdFZhbHVlOiAiIiwKICAgICAgdmFsaWRhdGU6IHggPT4geCA9PT0gMCB8fCB4ID09PSAxCiAgICB9KTsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgICB0aGlzLnZTY3JvbGxQb2xpY3kgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy52U2Nyb2xsUG9saWN5LCBbImF1dG8iLCAib2ZmIiwgIm9uIl0pOwogICAgdGhpcy5ib3JkZXIgPSBudWxsOwogICAgdGhpcy5jb21iID0gbnVsbDsKICAgIHRoaXMuZXh0cmFzID0gbnVsbDsKICAgIHRoaXMubWFyZ2luID0gbnVsbDsKICB9CiAgWyR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKSB7CiAgICBjb25zdCBzdHlsZSA9IHRvU3R5bGUodGhpcywgImJvcmRlciIsICJmb250IiwgIm1hcmdpbiIpOwogICAgbGV0IGh0bWw7CiAgICBjb25zdCBmaWVsZCA9IHRoaXNbJGdldFBhcmVudF0oKVskZ2V0UGFyZW50XSgpOwogICAgaWYgKHRoaXMubXVsdGlMaW5lID09PSAiIikgewogICAgICB0aGlzLm11bHRpTGluZSA9IGZpZWxkIGluc3RhbmNlb2YgRHJhdyA/IDEgOiAwOwogICAgfQogICAgaWYgKHRoaXMubXVsdGlMaW5lID09PSAxKSB7CiAgICAgIGh0bWwgPSB7CiAgICAgICAgbmFtZTogInRleHRhcmVhIiwKICAgICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgICBkYXRhSWQ6IGZpZWxkWyRkYXRhXT8uWyR1aWRdIHx8IGZpZWxkWyR1aWRdLAogICAgICAgICAgZmllbGRJZDogZmllbGRbJHVpZF0sCiAgICAgICAgICBjbGFzczogWyJ4ZmFUZXh0ZmllbGQiXSwKICAgICAgICAgIHN0eWxlLAogICAgICAgICAgImFyaWEtbGFiZWwiOiBhcmlhTGFiZWwoZmllbGQpLAogICAgICAgICAgImFyaWEtcmVxdWlyZWQiOiBmYWxzZQogICAgICAgIH0KICAgICAgfTsKICAgIH0gZWxzZSB7CiAgICAgIGh0bWwgPSB7CiAgICAgICAgbmFtZTogImlucHV0IiwKICAgICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgICB0eXBlOiAidGV4dCIsCiAgICAgICAgICBkYXRhSWQ6IGZpZWxkWyRkYXRhXT8uWyR1aWRdIHx8IGZpZWxkWyR1aWRdLAogICAgICAgICAgZmllbGRJZDogZmllbGRbJHVpZF0sCiAgICAgICAgICBjbGFzczogWyJ4ZmFUZXh0ZmllbGQiXSwKICAgICAgICAgIHN0eWxlLAogICAgICAgICAgImFyaWEtbGFiZWwiOiBhcmlhTGFiZWwoZmllbGQpLAogICAgICAgICAgImFyaWEtcmVxdWlyZWQiOiBmYWxzZQogICAgICAgIH0KICAgICAgfTsKICAgIH0KICAgIGlmIChpc1JlcXVpcmVkKGZpZWxkKSkgewogICAgICBodG1sLmF0dHJpYnV0ZXNbImFyaWEtcmVxdWlyZWQiXSA9IHRydWU7CiAgICAgIGh0bWwuYXR0cmlidXRlcy5yZXF1aXJlZCA9IHRydWU7CiAgICB9CiAgICByZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHsKICAgICAgbmFtZTogImxhYmVsIiwKICAgICAgYXR0cmlidXRlczogewogICAgICAgIGNsYXNzOiBbInhmYUxhYmVsIl0KICAgICAgfSwKICAgICAgY2hpbGRyZW46IFtodG1sXQogICAgfSk7CiAgfQp9CmNsYXNzIFRpbWUgZXh0ZW5kcyBTdHJpbmdPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCAidGltZSIpOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgIiI7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogIH0KICBbJGZpbmFsaXplXSgpIHsKICAgIGNvbnN0IGRhdGUgPSB0aGlzWyRjb250ZW50XS50cmltKCk7CiAgICB0aGlzWyRjb250ZW50XSA9IGRhdGUgPyBuZXcgRGF0ZShkYXRlKSA6IG51bGw7CiAgfQogIFskdG9IVE1MXShhdmFpbGFibGVTcGFjZSkgewogICAgcmV0dXJuIHZhbHVlVG9IdG1sKHRoaXNbJGNvbnRlbnRdID8gdGhpc1skY29udGVudF0udG9TdHJpbmcoKSA6ICIiKTsKICB9Cn0KY2xhc3MgVGltZVN0YW1wIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgInRpbWVTdGFtcCIpOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLnNlcnZlciA9IGF0dHJpYnV0ZXMuc2VydmVyIHx8ICIiOwogICAgdGhpcy50eXBlID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMudHlwZSwgWyJvcHRpb25hbCIsICJyZXF1aXJlZCJdKTsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgfQp9CmNsYXNzIFRvb2xUaXAgZXh0ZW5kcyBTdHJpbmdPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCAidG9vbFRpcCIpOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLnJpZCA9IGF0dHJpYnV0ZXMucmlkIHx8ICIiOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICB9Cn0KY2xhc3MgVHJhdmVyc2FsIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgInRyYXZlcnNhbCIsIHRydWUpOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogICAgdGhpcy5leHRyYXMgPSBudWxsOwogICAgdGhpcy50cmF2ZXJzZSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogIH0KfQpjbGFzcyBUcmF2ZXJzZSBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJ0cmF2ZXJzZSIsIHRydWUpOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLm9wZXJhdGlvbiA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLm9wZXJhdGlvbiwgWyJuZXh0IiwgImJhY2siLCAiZG93biIsICJmaXJzdCIsICJsZWZ0IiwgInJpZ2h0IiwgInVwIl0pOwogICAgdGhpcy5yZWYgPSBhdHRyaWJ1dGVzLnJlZiB8fCAiIjsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgICB0aGlzLmV4dHJhcyA9IG51bGw7CiAgICB0aGlzLnNjcmlwdCA9IG51bGw7CiAgfQogIGdldCBuYW1lKCkgewogICAgcmV0dXJuIHRoaXMub3BlcmF0aW9uOwogIH0KICBbJGlzVHJhbnNwYXJlbnRdKCkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KfQpjbGFzcyBVaSBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJ1aSIsIHRydWUpOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogICAgdGhpcy5leHRyYXMgPSBudWxsOwogICAgdGhpcy5waWN0dXJlID0gbnVsbDsKICAgIHRoaXMuYmFyY29kZSA9IG51bGw7CiAgICB0aGlzLmJ1dHRvbiA9IG51bGw7CiAgICB0aGlzLmNoZWNrQnV0dG9uID0gbnVsbDsKICAgIHRoaXMuY2hvaWNlTGlzdCA9IG51bGw7CiAgICB0aGlzLmRhdGVUaW1lRWRpdCA9IG51bGw7CiAgICB0aGlzLmRlZmF1bHRVaSA9IG51bGw7CiAgICB0aGlzLmltYWdlRWRpdCA9IG51bGw7CiAgICB0aGlzLm51bWVyaWNFZGl0ID0gbnVsbDsKICAgIHRoaXMucGFzc3dvcmRFZGl0ID0gbnVsbDsKICAgIHRoaXMuc2lnbmF0dXJlID0gbnVsbDsKICAgIHRoaXMudGV4dEVkaXQgPSBudWxsOwogIH0KICBbJGdldEV4dHJhXSgpIHsKICAgIGlmICh0aGlzWyRleHRyYV0gPT09IHVuZGVmaW5lZCkgewogICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpIHsKICAgICAgICBpZiAobmFtZSA9PT0gImV4dHJhcyIgfHwgbmFtZSA9PT0gInBpY3R1cmUiKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgY29uc3Qgb2JqID0gdGhpc1tuYW1lXTsKICAgICAgICBpZiAoIShvYmogaW5zdGFuY2VvZiBYRkFPYmplY3QpKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgdGhpc1skZXh0cmFdID0gb2JqOwogICAgICAgIHJldHVybiBvYmo7CiAgICAgIH0KICAgICAgdGhpc1skZXh0cmFdID0gbnVsbDsKICAgIH0KICAgIHJldHVybiB0aGlzWyRleHRyYV07CiAgfQogIFskdG9IVE1MXShhdmFpbGFibGVTcGFjZSkgewogICAgY29uc3Qgb2JqID0gdGhpc1skZ2V0RXh0cmFdKCk7CiAgICBpZiAob2JqKSB7CiAgICAgIHJldHVybiBvYmpbJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpOwogICAgfQogICAgcmV0dXJuIEhUTUxSZXN1bHQuRU1QVFk7CiAgfQp9CmNsYXNzIFZhbGlkYXRlIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgInZhbGlkYXRlIiwgdHJ1ZSk7CiAgICB0aGlzLmZvcm1hdFRlc3QgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5mb3JtYXRUZXN0LCBbIndhcm5pbmciLCAiZGlzYWJsZWQiLCAiZXJyb3IiXSk7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMubnVsbFRlc3QgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5udWxsVGVzdCwgWyJkaXNhYmxlZCIsICJlcnJvciIsICJ3YXJuaW5nIl0pOwogICAgdGhpcy5zY3JpcHRUZXN0ID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMuc2NyaXB0VGVzdCwgWyJlcnJvciIsICJkaXNhYmxlZCIsICJ3YXJuaW5nIl0pOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICAgIHRoaXMuZXh0cmFzID0gbnVsbDsKICAgIHRoaXMubWVzc2FnZSA9IG51bGw7CiAgICB0aGlzLnBpY3R1cmUgPSBudWxsOwogICAgdGhpcy5zY3JpcHQgPSBudWxsOwogIH0KfQpjbGFzcyBWYWx1ZSBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsICJ2YWx1ZSIsIHRydWUpOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLm92ZXJyaWRlID0gZ2V0SW50ZWdlcih7CiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMub3ZlcnJpZGUsCiAgICAgIGRlZmF1bHRWYWx1ZTogMCwKICAgICAgdmFsaWRhdGU6IHggPT4geCA9PT0gMQogICAgfSk7CiAgICB0aGlzLnJlbGV2YW50ID0gZ2V0UmVsZXZhbnQoYXR0cmlidXRlcy5yZWxldmFudCk7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogICAgdGhpcy5hcmMgPSBudWxsOwogICAgdGhpcy5ib29sZWFuID0gbnVsbDsKICAgIHRoaXMuZGF0ZSA9IG51bGw7CiAgICB0aGlzLmRhdGVUaW1lID0gbnVsbDsKICAgIHRoaXMuZGVjaW1hbCA9IG51bGw7CiAgICB0aGlzLmV4RGF0YSA9IG51bGw7CiAgICB0aGlzLmZsb2F0ID0gbnVsbDsKICAgIHRoaXMuaW1hZ2UgPSBudWxsOwogICAgdGhpcy5pbnRlZ2VyID0gbnVsbDsKICAgIHRoaXMubGluZSA9IG51bGw7CiAgICB0aGlzLnJlY3RhbmdsZSA9IG51bGw7CiAgICB0aGlzLnRleHQgPSBudWxsOwogICAgdGhpcy50aW1lID0gbnVsbDsKICB9CiAgWyRzZXRWYWx1ZV0odmFsdWUpIHsKICAgIGNvbnN0IHBhcmVudCA9IHRoaXNbJGdldFBhcmVudF0oKTsKICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBGaWVsZCkgewogICAgICBpZiAocGFyZW50LnVpPy5pbWFnZUVkaXQpIHsKICAgICAgICBpZiAoIXRoaXMuaW1hZ2UpIHsKICAgICAgICAgIHRoaXMuaW1hZ2UgPSBuZXcgSW1hZ2Uoe30pOwogICAgICAgICAgdGhpc1skYXBwZW5kQ2hpbGRdKHRoaXMuaW1hZ2UpOwogICAgICAgIH0KICAgICAgICB0aGlzLmltYWdlWyRjb250ZW50XSA9IHZhbHVlWyRjb250ZW50XTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KICAgIGNvbnN0IHZhbHVlTmFtZSA9IHZhbHVlWyRub2RlTmFtZV07CiAgICBpZiAodGhpc1t2YWx1ZU5hbWVdICE9PSBudWxsKSB7CiAgICAgIHRoaXNbdmFsdWVOYW1lXVskY29udGVudF0gPSB2YWx1ZVskY29udGVudF07CiAgICAgIHJldHVybjsKICAgIH0KICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSkgewogICAgICBjb25zdCBvYmogPSB0aGlzW25hbWVdOwogICAgICBpZiAob2JqIGluc3RhbmNlb2YgWEZBT2JqZWN0KSB7CiAgICAgICAgdGhpc1tuYW1lXSA9IG51bGw7CiAgICAgICAgdGhpc1skcmVtb3ZlQ2hpbGRdKG9iaik7CiAgICAgIH0KICAgIH0KICAgIHRoaXNbdmFsdWVbJG5vZGVOYW1lXV0gPSB2YWx1ZTsKICAgIHRoaXNbJGFwcGVuZENoaWxkXSh2YWx1ZSk7CiAgfQogIFskdGV4dF0oKSB7CiAgICBpZiAodGhpcy5leERhdGEpIHsKICAgICAgaWYgKHR5cGVvZiB0aGlzLmV4RGF0YVskY29udGVudF0gPT09ICJzdHJpbmciKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZXhEYXRhWyRjb250ZW50XS50cmltKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMuZXhEYXRhWyRjb250ZW50XVskdGV4dF0oKS50cmltKCk7CiAgICB9CiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpIHsKICAgICAgaWYgKG5hbWUgPT09ICJpbWFnZSIpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBjb25zdCBvYmogPSB0aGlzW25hbWVdOwogICAgICBpZiAob2JqIGluc3RhbmNlb2YgWEZBT2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIChvYmpbJGNvbnRlbnRdIHx8ICIiKS50b1N0cmluZygpLnRyaW0oKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIFskdG9IVE1MXShhdmFpbGFibGVTcGFjZSkgewogICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKSB7CiAgICAgIGNvbnN0IG9iaiA9IHRoaXNbbmFtZV07CiAgICAgIGlmICghKG9iaiBpbnN0YW5jZW9mIFhGQU9iamVjdCkpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICByZXR1cm4gb2JqWyR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKTsKICAgIH0KICAgIHJldHVybiBIVE1MUmVzdWx0LkVNUFRZOwogIH0KfQpjbGFzcyBWYXJpYWJsZXMgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCAidmFyaWFibGVzIiwgdHJ1ZSk7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgICB0aGlzLmJvb2xlYW4gPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuZGF0ZSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5kYXRlVGltZSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5kZWNpbWFsID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLmV4RGF0YSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5mbG9hdCA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5pbWFnZSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5pbnRlZ2VyID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLm1hbmlmZXN0ID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLnNjcmlwdCA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy50ZXh0ID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLnRpbWUgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICB9CiAgWyRpc1RyYW5zcGFyZW50XSgpIHsKICAgIHJldHVybiB0cnVlOwogIH0KfQpjbGFzcyBUZW1wbGF0ZU5hbWVzcGFjZSB7CiAgc3RhdGljIFskYnVpbGRYRkFPYmplY3RdKG5hbWUsIGF0dHJpYnV0ZXMpIHsKICAgIGlmIChUZW1wbGF0ZU5hbWVzcGFjZS5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgewogICAgICBjb25zdCBub2RlID0gVGVtcGxhdGVOYW1lc3BhY2VbbmFtZV0oYXR0cmlidXRlcyk7CiAgICAgIG5vZGVbJHNldFNldEF0dHJpYnV0ZXNdKGF0dHJpYnV0ZXMpOwogICAgICByZXR1cm4gbm9kZTsKICAgIH0KICAgIHJldHVybiB1bmRlZmluZWQ7CiAgfQogIHN0YXRpYyBhcHBlYXJhbmNlRmlsdGVyKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IEFwcGVhcmFuY2VGaWx0ZXIoYXR0cnMpOwogIH0KICBzdGF0aWMgYXJjKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IEFyYyhhdHRycyk7CiAgfQogIHN0YXRpYyBhcmVhKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IEFyZWEoYXR0cnMpOwogIH0KICBzdGF0aWMgYXNzaXN0KGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IEFzc2lzdChhdHRycyk7CiAgfQogIHN0YXRpYyBiYXJjb2RlKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IEJhcmNvZGUoYXR0cnMpOwogIH0KICBzdGF0aWMgYmluZChhdHRycykgewogICAgcmV0dXJuIG5ldyBCaW5kKGF0dHJzKTsKICB9CiAgc3RhdGljIGJpbmRJdGVtcyhhdHRycykgewogICAgcmV0dXJuIG5ldyBCaW5kSXRlbXMoYXR0cnMpOwogIH0KICBzdGF0aWMgYm9va2VuZChhdHRycykgewogICAgcmV0dXJuIG5ldyBCb29rZW5kKGF0dHJzKTsKICB9CiAgc3RhdGljIGJvb2xlYW4oYXR0cnMpIHsKICAgIHJldHVybiBuZXcgQm9vbGVhbkVsZW1lbnQoYXR0cnMpOwogIH0KICBzdGF0aWMgYm9yZGVyKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IEJvcmRlcihhdHRycyk7CiAgfQogIHN0YXRpYyBicmVhayhhdHRycykgewogICAgcmV0dXJuIG5ldyBCcmVhayhhdHRycyk7CiAgfQogIHN0YXRpYyBicmVha0FmdGVyKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IEJyZWFrQWZ0ZXIoYXR0cnMpOwogIH0KICBzdGF0aWMgYnJlYWtCZWZvcmUoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgQnJlYWtCZWZvcmUoYXR0cnMpOwogIH0KICBzdGF0aWMgYnV0dG9uKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IEJ1dHRvbihhdHRycyk7CiAgfQogIHN0YXRpYyBjYWxjdWxhdGUoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgQ2FsY3VsYXRlKGF0dHJzKTsKICB9CiAgc3RhdGljIGNhcHRpb24oYXR0cnMpIHsKICAgIHJldHVybiBuZXcgQ2FwdGlvbihhdHRycyk7CiAgfQogIHN0YXRpYyBjZXJ0aWZpY2F0ZShhdHRycykgewogICAgcmV0dXJuIG5ldyBDZXJ0aWZpY2F0ZShhdHRycyk7CiAgfQogIHN0YXRpYyBjZXJ0aWZpY2F0ZXMoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgQ2VydGlmaWNhdGVzKGF0dHJzKTsKICB9CiAgc3RhdGljIGNoZWNrQnV0dG9uKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IENoZWNrQnV0dG9uKGF0dHJzKTsKICB9CiAgc3RhdGljIGNob2ljZUxpc3QoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgQ2hvaWNlTGlzdChhdHRycyk7CiAgfQogIHN0YXRpYyBjb2xvcihhdHRycykgewogICAgcmV0dXJuIG5ldyBDb2xvcihhdHRycyk7CiAgfQogIHN0YXRpYyBjb21iKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IENvbWIoYXR0cnMpOwogIH0KICBzdGF0aWMgY29ubmVjdChhdHRycykgewogICAgcmV0dXJuIG5ldyBDb25uZWN0KGF0dHJzKTsKICB9CiAgc3RhdGljIGNvbnRlbnRBcmVhKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IENvbnRlbnRBcmVhKGF0dHJzKTsKICB9CiAgc3RhdGljIGNvcm5lcihhdHRycykgewogICAgcmV0dXJuIG5ldyBDb3JuZXIoYXR0cnMpOwogIH0KICBzdGF0aWMgZGF0ZShhdHRycykgewogICAgcmV0dXJuIG5ldyBEYXRlRWxlbWVudChhdHRycyk7CiAgfQogIHN0YXRpYyBkYXRlVGltZShhdHRycykgewogICAgcmV0dXJuIG5ldyBEYXRlVGltZShhdHRycyk7CiAgfQogIHN0YXRpYyBkYXRlVGltZUVkaXQoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgRGF0ZVRpbWVFZGl0KGF0dHJzKTsKICB9CiAgc3RhdGljIGRlY2ltYWwoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgRGVjaW1hbChhdHRycyk7CiAgfQogIHN0YXRpYyBkZWZhdWx0VWkoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgRGVmYXVsdFVpKGF0dHJzKTsKICB9CiAgc3RhdGljIGRlc2MoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgRGVzYyhhdHRycyk7CiAgfQogIHN0YXRpYyBkaWdlc3RNZXRob2QoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgRGlnZXN0TWV0aG9kKGF0dHJzKTsKICB9CiAgc3RhdGljIGRpZ2VzdE1ldGhvZHMoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgRGlnZXN0TWV0aG9kcyhhdHRycyk7CiAgfQogIHN0YXRpYyBkcmF3KGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IERyYXcoYXR0cnMpOwogIH0KICBzdGF0aWMgZWRnZShhdHRycykgewogICAgcmV0dXJuIG5ldyBFZGdlKGF0dHJzKTsKICB9CiAgc3RhdGljIGVuY29kaW5nKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IEVuY29kaW5nKGF0dHJzKTsKICB9CiAgc3RhdGljIGVuY29kaW5ncyhhdHRycykgewogICAgcmV0dXJuIG5ldyBFbmNvZGluZ3MoYXR0cnMpOwogIH0KICBzdGF0aWMgZW5jcnlwdChhdHRycykgewogICAgcmV0dXJuIG5ldyBFbmNyeXB0KGF0dHJzKTsKICB9CiAgc3RhdGljIGVuY3J5cHREYXRhKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IEVuY3J5cHREYXRhKGF0dHJzKTsKICB9CiAgc3RhdGljIGVuY3J5cHRpb24oYXR0cnMpIHsKICAgIHJldHVybiBuZXcgRW5jcnlwdGlvbihhdHRycyk7CiAgfQogIHN0YXRpYyBlbmNyeXB0aW9uTWV0aG9kKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IEVuY3J5cHRpb25NZXRob2QoYXR0cnMpOwogIH0KICBzdGF0aWMgZW5jcnlwdGlvbk1ldGhvZHMoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgRW5jcnlwdGlvbk1ldGhvZHMoYXR0cnMpOwogIH0KICBzdGF0aWMgZXZlbnQoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgRXZlbnQoYXR0cnMpOwogIH0KICBzdGF0aWMgZXhEYXRhKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IEV4RGF0YShhdHRycyk7CiAgfQogIHN0YXRpYyBleE9iamVjdChhdHRycykgewogICAgcmV0dXJuIG5ldyBFeE9iamVjdChhdHRycyk7CiAgfQogIHN0YXRpYyBleGNsR3JvdXAoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgRXhjbEdyb3VwKGF0dHJzKTsKICB9CiAgc3RhdGljIGV4ZWN1dGUoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgRXhlY3V0ZShhdHRycyk7CiAgfQogIHN0YXRpYyBleHRyYXMoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgRXh0cmFzKGF0dHJzKTsKICB9CiAgc3RhdGljIGZpZWxkKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IEZpZWxkKGF0dHJzKTsKICB9CiAgc3RhdGljIGZpbGwoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgRmlsbChhdHRycyk7CiAgfQogIHN0YXRpYyBmaWx0ZXIoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgRmlsdGVyKGF0dHJzKTsKICB9CiAgc3RhdGljIGZsb2F0KGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IEZsb2F0KGF0dHJzKTsKICB9CiAgc3RhdGljIGZvbnQoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgdGVtcGxhdGVfRm9udChhdHRycyk7CiAgfQogIHN0YXRpYyBmb3JtYXQoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgRm9ybWF0KGF0dHJzKTsKICB9CiAgc3RhdGljIGhhbmRsZXIoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgSGFuZGxlcihhdHRycyk7CiAgfQogIHN0YXRpYyBoeXBoZW5hdGlvbihhdHRycykgewogICAgcmV0dXJuIG5ldyBIeXBoZW5hdGlvbihhdHRycyk7CiAgfQogIHN0YXRpYyBpbWFnZShhdHRycykgewogICAgcmV0dXJuIG5ldyBJbWFnZShhdHRycyk7CiAgfQogIHN0YXRpYyBpbWFnZUVkaXQoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgSW1hZ2VFZGl0KGF0dHJzKTsKICB9CiAgc3RhdGljIGludGVnZXIoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgSW50ZWdlcihhdHRycyk7CiAgfQogIHN0YXRpYyBpc3N1ZXJzKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IElzc3VlcnMoYXR0cnMpOwogIH0KICBzdGF0aWMgaXRlbXMoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgSXRlbXMoYXR0cnMpOwogIH0KICBzdGF0aWMga2VlcChhdHRycykgewogICAgcmV0dXJuIG5ldyBLZWVwKGF0dHJzKTsKICB9CiAgc3RhdGljIGtleVVzYWdlKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IEtleVVzYWdlKGF0dHJzKTsKICB9CiAgc3RhdGljIGxpbmUoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgTGluZShhdHRycyk7CiAgfQogIHN0YXRpYyBsaW5lYXIoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgTGluZWFyKGF0dHJzKTsKICB9CiAgc3RhdGljIGxvY2tEb2N1bWVudChhdHRycykgewogICAgcmV0dXJuIG5ldyBMb2NrRG9jdW1lbnQoYXR0cnMpOwogIH0KICBzdGF0aWMgbWFuaWZlc3QoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgTWFuaWZlc3QoYXR0cnMpOwogIH0KICBzdGF0aWMgbWFyZ2luKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IE1hcmdpbihhdHRycyk7CiAgfQogIHN0YXRpYyBtZHAoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgTWRwKGF0dHJzKTsKICB9CiAgc3RhdGljIG1lZGl1bShhdHRycykgewogICAgcmV0dXJuIG5ldyBNZWRpdW0oYXR0cnMpOwogIH0KICBzdGF0aWMgbWVzc2FnZShhdHRycykgewogICAgcmV0dXJuIG5ldyBNZXNzYWdlKGF0dHJzKTsKICB9CiAgc3RhdGljIG51bWVyaWNFZGl0KGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IE51bWVyaWNFZGl0KGF0dHJzKTsKICB9CiAgc3RhdGljIG9jY3VyKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IE9jY3VyKGF0dHJzKTsKICB9CiAgc3RhdGljIG9pZChhdHRycykgewogICAgcmV0dXJuIG5ldyBPaWQoYXR0cnMpOwogIH0KICBzdGF0aWMgb2lkcyhhdHRycykgewogICAgcmV0dXJuIG5ldyBPaWRzKGF0dHJzKTsKICB9CiAgc3RhdGljIG92ZXJmbG93KGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IE92ZXJmbG93KGF0dHJzKTsKICB9CiAgc3RhdGljIHBhZ2VBcmVhKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IFBhZ2VBcmVhKGF0dHJzKTsKICB9CiAgc3RhdGljIHBhZ2VTZXQoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgUGFnZVNldChhdHRycyk7CiAgfQogIHN0YXRpYyBwYXJhKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IFBhcmEoYXR0cnMpOwogIH0KICBzdGF0aWMgcGFzc3dvcmRFZGl0KGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IFBhc3N3b3JkRWRpdChhdHRycyk7CiAgfQogIHN0YXRpYyBwYXR0ZXJuKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IHRlbXBsYXRlX1BhdHRlcm4oYXR0cnMpOwogIH0KICBzdGF0aWMgcGljdHVyZShhdHRycykgewogICAgcmV0dXJuIG5ldyBQaWN0dXJlKGF0dHJzKTsKICB9CiAgc3RhdGljIHByb3RvKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IFByb3RvKGF0dHJzKTsKICB9CiAgc3RhdGljIHJhZGlhbChhdHRycykgewogICAgcmV0dXJuIG5ldyBSYWRpYWwoYXR0cnMpOwogIH0KICBzdGF0aWMgcmVhc29uKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IFJlYXNvbihhdHRycyk7CiAgfQogIHN0YXRpYyByZWFzb25zKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IFJlYXNvbnMoYXR0cnMpOwogIH0KICBzdGF0aWMgcmVjdGFuZ2xlKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZShhdHRycyk7CiAgfQogIHN0YXRpYyByZWYoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgUmVmRWxlbWVudChhdHRycyk7CiAgfQogIHN0YXRpYyBzY3JpcHQoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgU2NyaXB0KGF0dHJzKTsKICB9CiAgc3RhdGljIHNldFByb3BlcnR5KGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IFNldFByb3BlcnR5KGF0dHJzKTsKICB9CiAgc3RhdGljIHNpZ25EYXRhKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IFNpZ25EYXRhKGF0dHJzKTsKICB9CiAgc3RhdGljIHNpZ25hdHVyZShhdHRycykgewogICAgcmV0dXJuIG5ldyBTaWduYXR1cmUoYXR0cnMpOwogIH0KICBzdGF0aWMgc2lnbmluZyhhdHRycykgewogICAgcmV0dXJuIG5ldyBTaWduaW5nKGF0dHJzKTsKICB9CiAgc3RhdGljIHNvbGlkKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IFNvbGlkKGF0dHJzKTsKICB9CiAgc3RhdGljIHNwZWFrKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IFNwZWFrKGF0dHJzKTsKICB9CiAgc3RhdGljIHN0aXBwbGUoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgU3RpcHBsZShhdHRycyk7CiAgfQogIHN0YXRpYyBzdWJmb3JtKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IFN1YmZvcm0oYXR0cnMpOwogIH0KICBzdGF0aWMgc3ViZm9ybVNldChhdHRycykgewogICAgcmV0dXJuIG5ldyBTdWJmb3JtU2V0KGF0dHJzKTsKICB9CiAgc3RhdGljIHN1YmplY3RETihhdHRycykgewogICAgcmV0dXJuIG5ldyBTdWJqZWN0RE4oYXR0cnMpOwogIH0KICBzdGF0aWMgc3ViamVjdEROcyhhdHRycykgewogICAgcmV0dXJuIG5ldyBTdWJqZWN0RE5zKGF0dHJzKTsKICB9CiAgc3RhdGljIHN1Ym1pdChhdHRycykgewogICAgcmV0dXJuIG5ldyBTdWJtaXQoYXR0cnMpOwogIH0KICBzdGF0aWMgdGVtcGxhdGUoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgVGVtcGxhdGUoYXR0cnMpOwogIH0KICBzdGF0aWMgdGV4dChhdHRycykgewogICAgcmV0dXJuIG5ldyBUZXh0KGF0dHJzKTsKICB9CiAgc3RhdGljIHRleHRFZGl0KGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IFRleHRFZGl0KGF0dHJzKTsKICB9CiAgc3RhdGljIHRpbWUoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgVGltZShhdHRycyk7CiAgfQogIHN0YXRpYyB0aW1lU3RhbXAoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgVGltZVN0YW1wKGF0dHJzKTsKICB9CiAgc3RhdGljIHRvb2xUaXAoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgVG9vbFRpcChhdHRycyk7CiAgfQogIHN0YXRpYyB0cmF2ZXJzYWwoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgVHJhdmVyc2FsKGF0dHJzKTsKICB9CiAgc3RhdGljIHRyYXZlcnNlKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IFRyYXZlcnNlKGF0dHJzKTsKICB9CiAgc3RhdGljIHVpKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IFVpKGF0dHJzKTsKICB9CiAgc3RhdGljIHZhbGlkYXRlKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IFZhbGlkYXRlKGF0dHJzKTsKICB9CiAgc3RhdGljIHZhbHVlKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IFZhbHVlKGF0dHJzKTsKICB9CiAgc3RhdGljIHZhcmlhYmxlcyhhdHRycykgewogICAgcmV0dXJuIG5ldyBWYXJpYWJsZXMoYXR0cnMpOwogIH0KfQoKOy8vIC4vc3JjL2NvcmUveGZhL2JpbmQuanMKCgoKCgoKY29uc3QgYmluZF9OU19EQVRBU0VUUyA9IE5hbWVzcGFjZUlkcy5kYXRhc2V0cy5pZDsKZnVuY3Rpb24gY3JlYXRlVGV4dChjb250ZW50KSB7CiAgY29uc3Qgbm9kZSA9IG5ldyBUZXh0KHt9KTsKICBub2RlWyRjb250ZW50XSA9IGNvbnRlbnQ7CiAgcmV0dXJuIG5vZGU7Cn0KY2xhc3MgQmluZGVyIHsKICBjb25zdHJ1Y3Rvcihyb290KSB7CiAgICB0aGlzLnJvb3QgPSByb290OwogICAgdGhpcy5kYXRhc2V0cyA9IHJvb3QuZGF0YXNldHM7CiAgICB0aGlzLmRhdGEgPSByb290LmRhdGFzZXRzPy5kYXRhIHx8IG5ldyBYbWxPYmplY3QoTmFtZXNwYWNlSWRzLmRhdGFzZXRzLmlkLCAiZGF0YSIpOwogICAgdGhpcy5lbXB0eU1lcmdlID0gdGhpcy5kYXRhWyRnZXRDaGlsZHJlbl0oKS5sZW5ndGggPT09IDA7CiAgICB0aGlzLnJvb3QuZm9ybSA9IHRoaXMuZm9ybSA9IHJvb3QudGVtcGxhdGVbJGNsb25lXSgpOwogIH0KICBfaXNDb25zdW1lRGF0YSgpIHsKICAgIHJldHVybiAhdGhpcy5lbXB0eU1lcmdlICYmIHRoaXMuX21lcmdlTW9kZTsKICB9CiAgX2lzTWF0Y2hUZW1wbGF0ZSgpIHsKICAgIHJldHVybiAhdGhpcy5faXNDb25zdW1lRGF0YSgpOwogIH0KICBiaW5kKCkgewogICAgdGhpcy5fYmluZEVsZW1lbnQodGhpcy5mb3JtLCB0aGlzLmRhdGEpOwogICAgcmV0dXJuIHRoaXMuZm9ybTsKICB9CiAgZ2V0RGF0YSgpIHsKICAgIHJldHVybiB0aGlzLmRhdGE7CiAgfQogIF9iaW5kVmFsdWUoZm9ybU5vZGUsIGRhdGEsIHBpY3R1cmUpIHsKICAgIGZvcm1Ob2RlWyRkYXRhXSA9IGRhdGE7CiAgICBpZiAoZm9ybU5vZGVbJGhhc1NldHRhYmxlVmFsdWVdKCkpIHsKICAgICAgaWYgKGRhdGFbJGlzRGF0YVZhbHVlXSgpKSB7CiAgICAgICAgY29uc3QgdmFsdWUgPSBkYXRhWyRnZXREYXRhVmFsdWVdKCk7CiAgICAgICAgZm9ybU5vZGVbJHNldFZhbHVlXShjcmVhdGVUZXh0KHZhbHVlKSk7CiAgICAgIH0gZWxzZSBpZiAoZm9ybU5vZGUgaW5zdGFuY2VvZiBGaWVsZCAmJiBmb3JtTm9kZS51aT8uY2hvaWNlTGlzdD8ub3BlbiA9PT0gIm11bHRpU2VsZWN0IikgewogICAgICAgIGNvbnN0IHZhbHVlID0gZGF0YVskZ2V0Q2hpbGRyZW5dKCkubWFwKGNoaWxkID0+IGNoaWxkWyRjb250ZW50XS50cmltKCkpLmpvaW4oIlxuIik7CiAgICAgICAgZm9ybU5vZGVbJHNldFZhbHVlXShjcmVhdGVUZXh0KHZhbHVlKSk7CiAgICAgIH0gZWxzZSBpZiAodGhpcy5faXNDb25zdW1lRGF0YSgpKSB7CiAgICAgICAgd2FybihgWEZBIC0gTm9kZXMgaGF2ZW4ndCB0aGUgc2FtZSB0eXBlLmApOwogICAgICB9CiAgICB9IGVsc2UgaWYgKCFkYXRhWyRpc0RhdGFWYWx1ZV0oKSB8fCB0aGlzLl9pc01hdGNoVGVtcGxhdGUoKSkgewogICAgICB0aGlzLl9iaW5kRWxlbWVudChmb3JtTm9kZSwgZGF0YSk7CiAgICB9IGVsc2UgewogICAgICB3YXJuKGBYRkEgLSBOb2RlcyBoYXZlbid0IHRoZSBzYW1lIHR5cGUuYCk7CiAgICB9CiAgfQogIF9maW5kRGF0YUJ5TmFtZVRvQ29uc3VtZShuYW1lLCBpc1ZhbHVlLCBkYXRhTm9kZSwgZ2xvYmFsKSB7CiAgICBpZiAoIW5hbWUpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBsZXQgZ2VuZXJhdG9yLCBtYXRjaDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7CiAgICAgIGdlbmVyYXRvciA9IGRhdGFOb2RlWyRnZXRSZWFsQ2hpbGRyZW5CeU5hbWVJdF0obmFtZSwgZmFsc2UsIHRydWUpOwogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIG1hdGNoID0gZ2VuZXJhdG9yLm5leHQoKS52YWx1ZTsKICAgICAgICBpZiAoIW1hdGNoKSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgaWYgKGlzVmFsdWUgPT09IG1hdGNoWyRpc0RhdGFWYWx1ZV0oKSkgewogICAgICAgICAgcmV0dXJuIG1hdGNoOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoZGF0YU5vZGVbJG5hbWVzcGFjZUlkXSA9PT0gTmFtZXNwYWNlSWRzLmRhdGFzZXRzLmlkICYmIGRhdGFOb2RlWyRub2RlTmFtZV0gPT09ICJkYXRhIikgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGRhdGFOb2RlID0gZGF0YU5vZGVbJGdldFBhcmVudF0oKTsKICAgIH0KICAgIGlmICghZ2xvYmFsKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgZ2VuZXJhdG9yID0gdGhpcy5kYXRhWyRnZXRSZWFsQ2hpbGRyZW5CeU5hbWVJdF0obmFtZSwgdHJ1ZSwgZmFsc2UpOwogICAgbWF0Y2ggPSBnZW5lcmF0b3IubmV4dCgpLnZhbHVlOwogICAgaWYgKG1hdGNoKSB7CiAgICAgIHJldHVybiBtYXRjaDsKICAgIH0KICAgIGdlbmVyYXRvciA9IHRoaXMuZGF0YVskZ2V0QXR0cmlidXRlSXRdKG5hbWUsIHRydWUpOwogICAgbWF0Y2ggPSBnZW5lcmF0b3IubmV4dCgpLnZhbHVlOwogICAgaWYgKG1hdGNoPy5bJGlzRGF0YVZhbHVlXSgpKSB7CiAgICAgIHJldHVybiBtYXRjaDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KICBfc2V0UHJvcGVydGllcyhmb3JtTm9kZSwgZGF0YU5vZGUpIHsKICAgIGlmICghZm9ybU5vZGUuaGFzT3duUHJvcGVydHkoInNldFByb3BlcnR5IikpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgZm9yIChjb25zdCB7CiAgICAgIHJlZiwKICAgICAgdGFyZ2V0LAogICAgICBjb25uZWN0aW9uCiAgICB9IG9mIGZvcm1Ob2RlLnNldFByb3BlcnR5LmNoaWxkcmVuKSB7CiAgICAgIGlmIChjb25uZWN0aW9uKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKCFyZWYpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBjb25zdCBub2RlcyA9IHNlYXJjaE5vZGUodGhpcy5yb290LCBkYXRhTm9kZSwgcmVmLCBmYWxzZSwgZmFsc2UpOwogICAgICBpZiAoIW5vZGVzKSB7CiAgICAgICAgd2FybihgWEZBIC0gSW52YWxpZCByZWZlcmVuY2U6ICR7cmVmfS5gKTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBjb25zdCBbbm9kZV0gPSBub2RlczsKICAgICAgaWYgKCFub2RlWyRpc0Rlc2NlbmRlbnRdKHRoaXMuZGF0YSkpIHsKICAgICAgICB3YXJuKGBYRkEgLSBJbnZhbGlkIG5vZGU6IG11c3QgYmUgYSBkYXRhIG5vZGUuYCk7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgY29uc3QgdGFyZ2V0Tm9kZXMgPSBzZWFyY2hOb2RlKHRoaXMucm9vdCwgZm9ybU5vZGUsIHRhcmdldCwgZmFsc2UsIGZhbHNlKTsKICAgICAgaWYgKCF0YXJnZXROb2RlcykgewogICAgICAgIHdhcm4oYFhGQSAtIEludmFsaWQgdGFyZ2V0OiAke3RhcmdldH0uYCk7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgY29uc3QgW3RhcmdldE5vZGVdID0gdGFyZ2V0Tm9kZXM7CiAgICAgIGlmICghdGFyZ2V0Tm9kZVskaXNEZXNjZW5kZW50XShmb3JtTm9kZSkpIHsKICAgICAgICB3YXJuKGBYRkEgLSBJbnZhbGlkIHRhcmdldDogbXVzdCBiZSBhIHByb3BlcnR5IG9yIHN1YnByb3BlcnR5LmApOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGNvbnN0IHRhcmdldFBhcmVudCA9IHRhcmdldE5vZGVbJGdldFBhcmVudF0oKTsKICAgICAgaWYgKHRhcmdldE5vZGUgaW5zdGFuY2VvZiBTZXRQcm9wZXJ0eSB8fCB0YXJnZXRQYXJlbnQgaW5zdGFuY2VvZiBTZXRQcm9wZXJ0eSkgewogICAgICAgIHdhcm4oYFhGQSAtIEludmFsaWQgdGFyZ2V0OiBjYW5ub3QgYmUgYSBzZXRQcm9wZXJ0eSBvciBvbmUgb2YgaXRzIHByb3BlcnRpZXMuYCk7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKHRhcmdldE5vZGUgaW5zdGFuY2VvZiBCaW5kSXRlbXMgfHwgdGFyZ2V0UGFyZW50IGluc3RhbmNlb2YgQmluZEl0ZW1zKSB7CiAgICAgICAgd2FybihgWEZBIC0gSW52YWxpZCB0YXJnZXQ6IGNhbm5vdCBiZSBhIGJpbmRJdGVtcyBvciBvbmUgb2YgaXRzIHByb3BlcnRpZXMuYCk7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgY29uc3QgY29udGVudCA9IG5vZGVbJHRleHRdKCk7CiAgICAgIGNvbnN0IG5hbWUgPSB0YXJnZXROb2RlWyRub2RlTmFtZV07CiAgICAgIGlmICh0YXJnZXROb2RlIGluc3RhbmNlb2YgWEZBQXR0cmlidXRlKSB7CiAgICAgICAgY29uc3QgYXR0cnMgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgICAgIGF0dHJzW25hbWVdID0gY29udGVudDsKICAgICAgICBjb25zdCBvYmogPSBSZWZsZWN0LmNvbnN0cnVjdChPYmplY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0UGFyZW50KS5jb25zdHJ1Y3RvciwgW2F0dHJzXSk7CiAgICAgICAgdGFyZ2V0UGFyZW50W25hbWVdID0gb2JqW25hbWVdOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmICghdGFyZ2V0Tm9kZS5oYXNPd25Qcm9wZXJ0eSgkY29udGVudCkpIHsKICAgICAgICB3YXJuKGBYRkEgLSBJbnZhbGlkIG5vZGUgdG8gdXNlIGluIHNldFByb3BlcnR5YCk7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgdGFyZ2V0Tm9kZVskZGF0YV0gPSBub2RlOwogICAgICB0YXJnZXROb2RlWyRjb250ZW50XSA9IGNvbnRlbnQ7CiAgICAgIHRhcmdldE5vZGVbJGZpbmFsaXplXSgpOwogICAgfQogIH0KICBfYmluZEl0ZW1zKGZvcm1Ob2RlLCBkYXRhTm9kZSkgewogICAgaWYgKCFmb3JtTm9kZS5oYXNPd25Qcm9wZXJ0eSgiaXRlbXMiKSB8fCAhZm9ybU5vZGUuaGFzT3duUHJvcGVydHkoImJpbmRJdGVtcyIpIHx8IGZvcm1Ob2RlLmJpbmRJdGVtcy5pc0VtcHR5KCkpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgZm9yIChjb25zdCBpdGVtIG9mIGZvcm1Ob2RlLml0ZW1zLmNoaWxkcmVuKSB7CiAgICAgIGZvcm1Ob2RlWyRyZW1vdmVDaGlsZF0oaXRlbSk7CiAgICB9CiAgICBmb3JtTm9kZS5pdGVtcy5jbGVhcigpOwogICAgY29uc3QgbGFiZWxzID0gbmV3IEl0ZW1zKHt9KTsKICAgIGNvbnN0IHZhbHVlcyA9IG5ldyBJdGVtcyh7fSk7CiAgICBmb3JtTm9kZVskYXBwZW5kQ2hpbGRdKGxhYmVscyk7CiAgICBmb3JtTm9kZS5pdGVtcy5wdXNoKGxhYmVscyk7CiAgICBmb3JtTm9kZVskYXBwZW5kQ2hpbGRdKHZhbHVlcyk7CiAgICBmb3JtTm9kZS5pdGVtcy5wdXNoKHZhbHVlcyk7CiAgICBmb3IgKGNvbnN0IHsKICAgICAgcmVmLAogICAgICBsYWJlbFJlZiwKICAgICAgdmFsdWVSZWYsCiAgICAgIGNvbm5lY3Rpb24KICAgIH0gb2YgZm9ybU5vZGUuYmluZEl0ZW1zLmNoaWxkcmVuKSB7CiAgICAgIGlmIChjb25uZWN0aW9uKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKCFyZWYpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBjb25zdCBub2RlcyA9IHNlYXJjaE5vZGUodGhpcy5yb290LCBkYXRhTm9kZSwgcmVmLCBmYWxzZSwgZmFsc2UpOwogICAgICBpZiAoIW5vZGVzKSB7CiAgICAgICAgd2FybihgWEZBIC0gSW52YWxpZCByZWZlcmVuY2U6ICR7cmVmfS5gKTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHsKICAgICAgICBpZiAoIW5vZGVbJGlzRGVzY2VuZGVudF0odGhpcy5kYXRhc2V0cykpIHsKICAgICAgICAgIHdhcm4oYFhGQSAtIEludmFsaWQgcmVmICgke3JlZn0pOiBtdXN0IGJlIGEgZGF0YXNldHMgY2hpbGQuYCk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgY29uc3QgbGFiZWxOb2RlcyA9IHNlYXJjaE5vZGUodGhpcy5yb290LCBub2RlLCBsYWJlbFJlZiwgdHJ1ZSwgZmFsc2UpOwogICAgICAgIGlmICghbGFiZWxOb2RlcykgewogICAgICAgICAgd2FybihgWEZBIC0gSW52YWxpZCBsYWJlbDogJHtsYWJlbFJlZn0uYCk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgY29uc3QgW2xhYmVsTm9kZV0gPSBsYWJlbE5vZGVzOwogICAgICAgIGlmICghbGFiZWxOb2RlWyRpc0Rlc2NlbmRlbnRdKHRoaXMuZGF0YXNldHMpKSB7CiAgICAgICAgICB3YXJuKGBYRkEgLSBJbnZhbGlkIGxhYmVsOiBtdXN0IGJlIGEgZGF0YXNldHMgY2hpbGQuYCk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgY29uc3QgdmFsdWVOb2RlcyA9IHNlYXJjaE5vZGUodGhpcy5yb290LCBub2RlLCB2YWx1ZVJlZiwgdHJ1ZSwgZmFsc2UpOwogICAgICAgIGlmICghdmFsdWVOb2RlcykgewogICAgICAgICAgd2FybihgWEZBIC0gSW52YWxpZCB2YWx1ZTogJHt2YWx1ZVJlZn0uYCk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgY29uc3QgW3ZhbHVlTm9kZV0gPSB2YWx1ZU5vZGVzOwogICAgICAgIGlmICghdmFsdWVOb2RlWyRpc0Rlc2NlbmRlbnRdKHRoaXMuZGF0YXNldHMpKSB7CiAgICAgICAgICB3YXJuKGBYRkEgLSBJbnZhbGlkIHZhbHVlOiBtdXN0IGJlIGEgZGF0YXNldHMgY2hpbGQuYCk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgY29uc3QgbGFiZWwgPSBjcmVhdGVUZXh0KGxhYmVsTm9kZVskdGV4dF0oKSk7CiAgICAgICAgY29uc3QgdmFsdWUgPSBjcmVhdGVUZXh0KHZhbHVlTm9kZVskdGV4dF0oKSk7CiAgICAgICAgbGFiZWxzWyRhcHBlbmRDaGlsZF0obGFiZWwpOwogICAgICAgIGxhYmVscy50ZXh0LnB1c2gobGFiZWwpOwogICAgICAgIHZhbHVlc1skYXBwZW5kQ2hpbGRdKHZhbHVlKTsKICAgICAgICB2YWx1ZXMudGV4dC5wdXNoKHZhbHVlKTsKICAgICAgfQogICAgfQogIH0KICBfYmluZE9jY3VycmVuY2VzKGZvcm1Ob2RlLCBtYXRjaGVzLCBwaWN0dXJlKSB7CiAgICBsZXQgYmFzZUNsb25lOwogICAgaWYgKG1hdGNoZXMubGVuZ3RoID4gMSkgewogICAgICBiYXNlQ2xvbmUgPSBmb3JtTm9kZVskY2xvbmVdKCk7CiAgICAgIGJhc2VDbG9uZVskcmVtb3ZlQ2hpbGRdKGJhc2VDbG9uZS5vY2N1cik7CiAgICAgIGJhc2VDbG9uZS5vY2N1ciA9IG51bGw7CiAgICB9CiAgICB0aGlzLl9iaW5kVmFsdWUoZm9ybU5vZGUsIG1hdGNoZXNbMF0sIHBpY3R1cmUpOwogICAgdGhpcy5fc2V0UHJvcGVydGllcyhmb3JtTm9kZSwgbWF0Y2hlc1swXSk7CiAgICB0aGlzLl9iaW5kSXRlbXMoZm9ybU5vZGUsIG1hdGNoZXNbMF0pOwogICAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAxKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHBhcmVudCA9IGZvcm1Ob2RlWyRnZXRQYXJlbnRdKCk7CiAgICBjb25zdCBuYW1lID0gZm9ybU5vZGVbJG5vZGVOYW1lXTsKICAgIGNvbnN0IHBvcyA9IHBhcmVudFskaW5kZXhPZl0oZm9ybU5vZGUpOwogICAgZm9yIChsZXQgaSA9IDEsIGlpID0gbWF0Y2hlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CiAgICAgIGNvbnN0IG1hdGNoID0gbWF0Y2hlc1tpXTsKICAgICAgY29uc3QgY2xvbmUgPSBiYXNlQ2xvbmVbJGNsb25lXSgpOwogICAgICBwYXJlbnRbbmFtZV0ucHVzaChjbG9uZSk7CiAgICAgIHBhcmVudFskaW5zZXJ0QXRdKHBvcyArIGksIGNsb25lKTsKICAgICAgdGhpcy5fYmluZFZhbHVlKGNsb25lLCBtYXRjaCwgcGljdHVyZSk7CiAgICAgIHRoaXMuX3NldFByb3BlcnRpZXMoY2xvbmUsIG1hdGNoKTsKICAgICAgdGhpcy5fYmluZEl0ZW1zKGNsb25lLCBtYXRjaCk7CiAgICB9CiAgfQogIF9jcmVhdGVPY2N1cnJlbmNlcyhmb3JtTm9kZSkgewogICAgaWYgKCF0aGlzLmVtcHR5TWVyZ2UpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgewogICAgICBvY2N1cgogICAgfSA9IGZvcm1Ob2RlOwogICAgaWYgKCFvY2N1ciB8fCBvY2N1ci5pbml0aWFsIDw9IDEpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgcGFyZW50ID0gZm9ybU5vZGVbJGdldFBhcmVudF0oKTsKICAgIGNvbnN0IG5hbWUgPSBmb3JtTm9kZVskbm9kZU5hbWVdOwogICAgaWYgKCEocGFyZW50W25hbWVdIGluc3RhbmNlb2YgWEZBT2JqZWN0QXJyYXkpKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGxldCBjdXJyZW50TnVtYmVyOwogICAgaWYgKGZvcm1Ob2RlLm5hbWUpIHsKICAgICAgY3VycmVudE51bWJlciA9IHBhcmVudFtuYW1lXS5jaGlsZHJlbi5maWx0ZXIoZSA9PiBlLm5hbWUgPT09IGZvcm1Ob2RlLm5hbWUpLmxlbmd0aDsKICAgIH0gZWxzZSB7CiAgICAgIGN1cnJlbnROdW1iZXIgPSBwYXJlbnRbbmFtZV0uY2hpbGRyZW4ubGVuZ3RoOwogICAgfQogICAgY29uc3QgcG9zID0gcGFyZW50WyRpbmRleE9mXShmb3JtTm9kZSkgKyAxOwogICAgY29uc3QgaWkgPSBvY2N1ci5pbml0aWFsIC0gY3VycmVudE51bWJlcjsKICAgIGlmIChpaSkgewogICAgICBjb25zdCBub2RlQ2xvbmUgPSBmb3JtTm9kZVskY2xvbmVdKCk7CiAgICAgIG5vZGVDbG9uZVskcmVtb3ZlQ2hpbGRdKG5vZGVDbG9uZS5vY2N1cik7CiAgICAgIG5vZGVDbG9uZS5vY2N1ciA9IG51bGw7CiAgICAgIHBhcmVudFtuYW1lXS5wdXNoKG5vZGVDbG9uZSk7CiAgICAgIHBhcmVudFskaW5zZXJ0QXRdKHBvcywgbm9kZUNsb25lKTsKICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBpaTsgaSsrKSB7CiAgICAgICAgY29uc3QgY2xvbmUgPSBub2RlQ2xvbmVbJGNsb25lXSgpOwogICAgICAgIHBhcmVudFtuYW1lXS5wdXNoKGNsb25lKTsKICAgICAgICBwYXJlbnRbJGluc2VydEF0XShwb3MgKyBpLCBjbG9uZSk7CiAgICAgIH0KICAgIH0KICB9CiAgX2dldE9jY3VySW5mbyhmb3JtTm9kZSkgewogICAgY29uc3QgewogICAgICBuYW1lLAogICAgICBvY2N1cgogICAgfSA9IGZvcm1Ob2RlOwogICAgaWYgKCFvY2N1ciB8fCAhbmFtZSkgewogICAgICByZXR1cm4gWzEsIDFdOwogICAgfQogICAgY29uc3QgbWF4ID0gb2NjdXIubWF4ID09PSAtMSA/IEluZmluaXR5IDogb2NjdXIubWF4OwogICAgcmV0dXJuIFtvY2N1ci5taW4sIG1heF07CiAgfQogIF9zZXRBbmRCaW5kKGZvcm1Ob2RlLCBkYXRhTm9kZSkgewogICAgdGhpcy5fc2V0UHJvcGVydGllcyhmb3JtTm9kZSwgZGF0YU5vZGUpOwogICAgdGhpcy5fYmluZEl0ZW1zKGZvcm1Ob2RlLCBkYXRhTm9kZSk7CiAgICB0aGlzLl9iaW5kRWxlbWVudChmb3JtTm9kZSwgZGF0YU5vZGUpOwogIH0KICBfYmluZEVsZW1lbnQoZm9ybU5vZGUsIGRhdGFOb2RlKSB7CiAgICBjb25zdCB1c2VsZXNzTm9kZXMgPSBbXTsKICAgIHRoaXMuX2NyZWF0ZU9jY3VycmVuY2VzKGZvcm1Ob2RlKTsKICAgIGZvciAoY29uc3QgY2hpbGQgb2YgZm9ybU5vZGVbJGdldENoaWxkcmVuXSgpKSB7CiAgICAgIGlmIChjaGlsZFskZGF0YV0pIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAodGhpcy5fbWVyZ2VNb2RlID09PSB1bmRlZmluZWQgJiYgY2hpbGRbJG5vZGVOYW1lXSA9PT0gInN1YmZvcm0iKSB7CiAgICAgICAgdGhpcy5fbWVyZ2VNb2RlID0gY2hpbGQubWVyZ2VNb2RlID09PSAiY29uc3VtZURhdGEiOwogICAgICAgIGNvbnN0IGRhdGFDaGlsZHJlbiA9IGRhdGFOb2RlWyRnZXRDaGlsZHJlbl0oKTsKICAgICAgICBpZiAoZGF0YUNoaWxkcmVuLmxlbmd0aCA+IDApIHsKICAgICAgICAgIHRoaXMuX2JpbmRPY2N1cnJlbmNlcyhjaGlsZCwgW2RhdGFDaGlsZHJlblswXV0sIG51bGwpOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5lbXB0eU1lcmdlKSB7CiAgICAgICAgICBjb25zdCBuc0lkID0gZGF0YU5vZGVbJG5hbWVzcGFjZUlkXSA9PT0gYmluZF9OU19EQVRBU0VUUyA/IC0xIDogZGF0YU5vZGVbJG5hbWVzcGFjZUlkXTsKICAgICAgICAgIGNvbnN0IGRhdGFDaGlsZCA9IGNoaWxkWyRkYXRhXSA9IG5ldyBYbWxPYmplY3QobnNJZCwgY2hpbGQubmFtZSB8fCAicm9vdCIpOwogICAgICAgICAgZGF0YU5vZGVbJGFwcGVuZENoaWxkXShkYXRhQ2hpbGQpOwogICAgICAgICAgdGhpcy5fYmluZEVsZW1lbnQoY2hpbGQsIGRhdGFDaGlsZCk7CiAgICAgICAgfQogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmICghY2hpbGRbJGlzQmluZGFibGVdKCkpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBsZXQgZ2xvYmFsID0gZmFsc2U7CiAgICAgIGxldCBwaWN0dXJlID0gbnVsbDsKICAgICAgbGV0IHJlZiA9IG51bGw7CiAgICAgIGxldCBtYXRjaCA9IG51bGw7CiAgICAgIGlmIChjaGlsZC5iaW5kKSB7CiAgICAgICAgc3dpdGNoIChjaGlsZC5iaW5kLm1hdGNoKSB7CiAgICAgICAgICBjYXNlICJub25lIjoKICAgICAgICAgICAgdGhpcy5fc2V0QW5kQmluZChjaGlsZCwgZGF0YU5vZGUpOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIGNhc2UgImdsb2JhbCI6CiAgICAgICAgICAgIGdsb2JhbCA9IHRydWU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiZGF0YVJlZiI6CiAgICAgICAgICAgIGlmICghY2hpbGQuYmluZC5yZWYpIHsKICAgICAgICAgICAgICB3YXJuKGBYRkEgLSByZWYgaXMgZW1wdHkgaW4gbm9kZSAke2NoaWxkWyRub2RlTmFtZV19LmApOwogICAgICAgICAgICAgIHRoaXMuX3NldEFuZEJpbmQoY2hpbGQsIGRhdGFOb2RlKTsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZWYgPSBjaGlsZC5iaW5kLnJlZjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgaWYgKGNoaWxkLmJpbmQucGljdHVyZSkgewogICAgICAgICAgcGljdHVyZSA9IGNoaWxkLmJpbmQucGljdHVyZVskY29udGVudF07CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvbnN0IFttaW4sIG1heF0gPSB0aGlzLl9nZXRPY2N1ckluZm8oY2hpbGQpOwogICAgICBpZiAocmVmKSB7CiAgICAgICAgbWF0Y2ggPSBzZWFyY2hOb2RlKHRoaXMucm9vdCwgZGF0YU5vZGUsIHJlZiwgdHJ1ZSwgZmFsc2UpOwogICAgICAgIGlmIChtYXRjaCA9PT0gbnVsbCkgewogICAgICAgICAgbWF0Y2ggPSBjcmVhdGVEYXRhTm9kZSh0aGlzLmRhdGEsIGRhdGFOb2RlLCByZWYpOwogICAgICAgICAgaWYgKCFtYXRjaCkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aGlzLl9pc0NvbnN1bWVEYXRhKCkpIHsKICAgICAgICAgICAgbWF0Y2hbJGNvbnN1bWVkXSA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLl9zZXRBbmRCaW5kKGNoaWxkLCBtYXRjaCk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKHRoaXMuX2lzQ29uc3VtZURhdGEoKSkgewogICAgICAgICAgICBtYXRjaCA9IG1hdGNoLmZpbHRlcihub2RlID0+ICFub2RlWyRjb25zdW1lZF0pOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG1hdGNoLmxlbmd0aCA+IG1heCkgewogICAgICAgICAgICBtYXRjaCA9IG1hdGNoLnNsaWNlKDAsIG1heCk7CiAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICBtYXRjaCA9IG51bGw7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAobWF0Y2ggJiYgdGhpcy5faXNDb25zdW1lRGF0YSgpKSB7CiAgICAgICAgICAgIG1hdGNoLmZvckVhY2gobm9kZSA9PiB7CiAgICAgICAgICAgICAgbm9kZVskY29uc3VtZWRdID0gdHJ1ZTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGlmICghY2hpbGQubmFtZSkgewogICAgICAgICAgdGhpcy5fc2V0QW5kQmluZChjaGlsZCwgZGF0YU5vZGUpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLl9pc0NvbnN1bWVEYXRhKCkpIHsKICAgICAgICAgIGNvbnN0IG1hdGNoZXMgPSBbXTsKICAgICAgICAgIHdoaWxlIChtYXRjaGVzLmxlbmd0aCA8IG1heCkgewogICAgICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMuX2ZpbmREYXRhQnlOYW1lVG9Db25zdW1lKGNoaWxkLm5hbWUsIGNoaWxkWyRoYXNTZXR0YWJsZVZhbHVlXSgpLCBkYXRhTm9kZSwgZ2xvYmFsKTsKICAgICAgICAgICAgaWYgKCFmb3VuZCkgewogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvdW5kWyRjb25zdW1lZF0gPSB0cnVlOwogICAgICAgICAgICBtYXRjaGVzLnB1c2goZm91bmQpOwogICAgICAgICAgfQogICAgICAgICAgbWF0Y2ggPSBtYXRjaGVzLmxlbmd0aCA+IDAgPyBtYXRjaGVzIDogbnVsbDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbWF0Y2ggPSBkYXRhTm9kZVskZ2V0UmVhbENoaWxkcmVuQnlOYW1lSXRdKGNoaWxkLm5hbWUsIGZhbHNlLCB0aGlzLmVtcHR5TWVyZ2UpLm5leHQoKS52YWx1ZTsKICAgICAgICAgIGlmICghbWF0Y2gpIHsKICAgICAgICAgICAgaWYgKG1pbiA9PT0gMCkgewogICAgICAgICAgICAgIHVzZWxlc3NOb2Rlcy5wdXNoKGNoaWxkKTsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCBuc0lkID0gZGF0YU5vZGVbJG5hbWVzcGFjZUlkXSA9PT0gYmluZF9OU19EQVRBU0VUUyA/IC0xIDogZGF0YU5vZGVbJG5hbWVzcGFjZUlkXTsKICAgICAgICAgICAgbWF0Y2ggPSBjaGlsZFskZGF0YV0gPSBuZXcgWG1sT2JqZWN0KG5zSWQsIGNoaWxkLm5hbWUpOwogICAgICAgICAgICBpZiAodGhpcy5lbXB0eU1lcmdlKSB7CiAgICAgICAgICAgICAgbWF0Y2hbJGNvbnN1bWVkXSA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGF0YU5vZGVbJGFwcGVuZENoaWxkXShtYXRjaCk7CiAgICAgICAgICAgIHRoaXMuX3NldEFuZEJpbmQoY2hpbGQsIG1hdGNoKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5lbXB0eU1lcmdlKSB7CiAgICAgICAgICAgIG1hdGNoWyRjb25zdW1lZF0gPSB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgbWF0Y2ggPSBbbWF0Y2hdOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAobWF0Y2gpIHsKICAgICAgICB0aGlzLl9iaW5kT2NjdXJyZW5jZXMoY2hpbGQsIG1hdGNoLCBwaWN0dXJlKTsKICAgICAgfSBlbHNlIGlmIChtaW4gPiAwKSB7CiAgICAgICAgdGhpcy5fc2V0QW5kQmluZChjaGlsZCwgZGF0YU5vZGUpOwogICAgICB9IGVsc2UgewogICAgICAgIHVzZWxlc3NOb2Rlcy5wdXNoKGNoaWxkKTsKICAgICAgfQogICAgfQogICAgdXNlbGVzc05vZGVzLmZvckVhY2gobm9kZSA9PiBub2RlWyRnZXRQYXJlbnRdKClbJHJlbW92ZUNoaWxkXShub2RlKSk7CiAgfQp9Cgo7Ly8gLi9zcmMvY29yZS94ZmEvZGF0YS5qcwoKY2xhc3MgRGF0YUhhbmRsZXIgewogIGNvbnN0cnVjdG9yKHJvb3QsIGRhdGEpIHsKICAgIHRoaXMuZGF0YSA9IGRhdGE7CiAgICB0aGlzLmRhdGFzZXQgPSByb290LmRhdGFzZXRzIHx8IG51bGw7CiAgfQogIHNlcmlhbGl6ZShzdG9yYWdlKSB7CiAgICBjb25zdCBzdGFjayA9IFtbLTEsIHRoaXMuZGF0YVskZ2V0Q2hpbGRyZW5dKCldXTsKICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7CiAgICAgIGNvbnN0IGxhc3QgPSBzdGFjay5hdCgtMSk7CiAgICAgIGNvbnN0IFtpLCBjaGlsZHJlbl0gPSBsYXN0OwogICAgICBpZiAoaSArIDEgPT09IGNoaWxkcmVuLmxlbmd0aCkgewogICAgICAgIHN0YWNrLnBvcCgpOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5bKytsYXN0WzBdXTsKICAgICAgY29uc3Qgc3RvcmFnZUVudHJ5ID0gc3RvcmFnZS5nZXQoY2hpbGRbJHVpZF0pOwogICAgICBpZiAoc3RvcmFnZUVudHJ5KSB7CiAgICAgICAgY2hpbGRbJHNldFZhbHVlXShzdG9yYWdlRW50cnkpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBjaGlsZFskZ2V0QXR0cmlidXRlc10oKTsKICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGF0dHJpYnV0ZXMudmFsdWVzKCkpIHsKICAgICAgICAgIGNvbnN0IGVudHJ5ID0gc3RvcmFnZS5nZXQodmFsdWVbJHVpZF0pOwogICAgICAgICAgaWYgKGVudHJ5KSB7CiAgICAgICAgICAgIHZhbHVlWyRzZXRWYWx1ZV0oZW50cnkpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgY29uc3Qgbm9kZXMgPSBjaGlsZFskZ2V0Q2hpbGRyZW5dKCk7CiAgICAgIGlmIChub2Rlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgc3RhY2sucHVzaChbLTEsIG5vZGVzXSk7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0IGJ1ZiA9IFtgPHhmYTpkYXRhc2V0cyB4bWxuczp4ZmE9Imh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLWRhdGEvMS4wLyI+YF07CiAgICBpZiAodGhpcy5kYXRhc2V0KSB7CiAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5kYXRhc2V0WyRnZXRDaGlsZHJlbl0oKSkgewogICAgICAgIGlmIChjaGlsZFskbm9kZU5hbWVdICE9PSAiZGF0YSIpIHsKICAgICAgICAgIGNoaWxkWyR0b1N0cmluZ10oYnVmKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHRoaXMuZGF0YVskdG9TdHJpbmddKGJ1Zik7CiAgICBidWYucHVzaCgiPC94ZmE6ZGF0YXNldHM+Iik7CiAgICByZXR1cm4gYnVmLmpvaW4oIiIpOwogIH0KfQoKOy8vIC4vc3JjL2NvcmUveGZhL2NvbmZpZy5qcwoKCgoKCmNvbnN0IENPTkZJR19OU19JRCA9IE5hbWVzcGFjZUlkcy5jb25maWcuaWQ7CmNsYXNzIEFjcm9iYXQgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgImFjcm9iYXQiLCB0cnVlKTsKICAgIHRoaXMuYWNyb2JhdDcgPSBudWxsOwogICAgdGhpcy5hdXRvU2F2ZSA9IG51bGw7CiAgICB0aGlzLmNvbW1vbiA9IG51bGw7CiAgICB0aGlzLnZhbGlkYXRlID0gbnVsbDsKICAgIHRoaXMudmFsaWRhdGVBcHByb3ZhbFNpZ25hdHVyZXMgPSBudWxsOwogICAgdGhpcy5zdWJtaXRVcmwgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICB9Cn0KY2xhc3MgQWNyb2JhdDcgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgImFjcm9iYXQ3IiwgdHJ1ZSk7CiAgICB0aGlzLmR5bmFtaWNSZW5kZXIgPSBudWxsOwogIH0KfQpjbGFzcyBBREJFX0pTQ29uc29sZSBleHRlbmRzIE9wdGlvbk9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAiQURCRV9KU0NvbnNvbGUiLCBbImRlbGVnYXRlIiwgIkVuYWJsZSIsICJEaXNhYmxlIl0pOwogIH0KfQpjbGFzcyBBREJFX0pTRGVidWdnZXIgZXh0ZW5kcyBPcHRpb25PYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgIkFEQkVfSlNEZWJ1Z2dlciIsIFsiZGVsZWdhdGUiLCAiRW5hYmxlIiwgIkRpc2FibGUiXSk7CiAgfQp9CmNsYXNzIEFkZFNpbGVudFByaW50IGV4dGVuZHMgT3B0aW9uMDEgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgImFkZFNpbGVudFByaW50Iik7CiAgfQp9CmNsYXNzIEFkZFZpZXdlclByZWZlcmVuY2VzIGV4dGVuZHMgT3B0aW9uMDEgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgImFkZFZpZXdlclByZWZlcmVuY2VzIik7CiAgfQp9CmNsYXNzIEFkanVzdERhdGEgZXh0ZW5kcyBPcHRpb24xMCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAiYWRqdXN0RGF0YSIpOwogIH0KfQpjbGFzcyBBZG9iZUV4dGVuc2lvbkxldmVsIGV4dGVuZHMgSW50ZWdlck9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAiYWRvYmVFeHRlbnNpb25MZXZlbCIsIDAsIG4gPT4gbiA+PSAxICYmIG4gPD0gOCk7CiAgfQp9CmNsYXNzIEFnZW50IGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJhZ2VudCIsIHRydWUpOwogICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lID8gYXR0cmlidXRlcy5uYW1lLnRyaW0oKSA6ICIiOwogICAgdGhpcy5jb21tb24gPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICB9Cn0KY2xhc3MgQWx3YXlzRW1iZWQgZXh0ZW5kcyBDb250ZW50T2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJhbHdheXNFbWJlZCIpOwogIH0KfQpjbGFzcyBBbWQgZXh0ZW5kcyBTdHJpbmdPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgImFtZCIpOwogIH0KfQpjbGFzcyBjb25maWdfQXJlYSBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAiYXJlYSIpOwogICAgdGhpcy5sZXZlbCA9IGdldEludGVnZXIoewogICAgICBkYXRhOiBhdHRyaWJ1dGVzLmxldmVsLAogICAgICBkZWZhdWx0VmFsdWU6IDAsCiAgICAgIHZhbGlkYXRlOiBuID0+IG4gPj0gMSAmJiBuIDw9IDMKICAgIH0pOwogICAgdGhpcy5uYW1lID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMubmFtZSwgWyIiLCAiYmFyY29kZSIsICJjb3JlaW5pdCIsICJkZXZpY2VEcml2ZXIiLCAiZm9udCIsICJnZW5lcmFsIiwgImxheW91dCIsICJtZXJnZSIsICJzY3JpcHQiLCAic2lnbmF0dXJlIiwgInNvdXJjZVNldCIsICJ0ZW1wbGF0ZUNhY2hlIl0pOwogIH0KfQpjbGFzcyBBdHRyaWJ1dGVzIGV4dGVuZHMgT3B0aW9uT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJhdHRyaWJ1dGVzIiwgWyJwcmVzZXJ2ZSIsICJkZWxlZ2F0ZSIsICJpZ25vcmUiXSk7CiAgfQp9CmNsYXNzIEF1dG9TYXZlIGV4dGVuZHMgT3B0aW9uT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJhdXRvU2F2ZSIsIFsiZGlzYWJsZWQiLCAiZW5hYmxlZCJdKTsKICB9Cn0KY2xhc3MgQmFzZSBleHRlbmRzIFN0cmluZ09iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAiYmFzZSIpOwogIH0KfQpjbGFzcyBCYXRjaE91dHB1dCBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAiYmF0Y2hPdXRwdXQiKTsKICAgIHRoaXMuZm9ybWF0ID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMuZm9ybWF0LCBbIm5vbmUiLCAiY29uY2F0IiwgInppcCIsICJ6aXBDb21wcmVzcyJdKTsKICB9Cn0KY2xhc3MgQmVoYXZpb3JPdmVycmlkZSBleHRlbmRzIENvbnRlbnRPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgImJlaGF2aW9yT3ZlcnJpZGUiKTsKICB9CiAgWyRmaW5hbGl6ZV0oKSB7CiAgICB0aGlzWyRjb250ZW50XSA9IG5ldyBNYXAodGhpc1skY29udGVudF0udHJpbSgpLnNwbGl0KC9ccysvKS5maWx0ZXIoeCA9PiB4LmluY2x1ZGVzKCI6IikpLm1hcCh4ID0+IHguc3BsaXQoIjoiLCAyKSkpOwogIH0KfQpjbGFzcyBDYWNoZSBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAiY2FjaGUiLCB0cnVlKTsKICAgIHRoaXMudGVtcGxhdGVDYWNoZSA9IG51bGw7CiAgfQp9CmNsYXNzIENoYW5nZSBleHRlbmRzIE9wdGlvbjAxIHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJjaGFuZ2UiKTsKICB9Cn0KY2xhc3MgQ29tbW9uIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJjb21tb24iLCB0cnVlKTsKICAgIHRoaXMuZGF0YSA9IG51bGw7CiAgICB0aGlzLmxvY2FsZSA9IG51bGw7CiAgICB0aGlzLmxvY2FsZVNldCA9IG51bGw7CiAgICB0aGlzLm1lc3NhZ2luZyA9IG51bGw7CiAgICB0aGlzLnN1cHByZXNzQmFubmVyID0gbnVsbDsKICAgIHRoaXMudGVtcGxhdGUgPSBudWxsOwogICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnaW5nID0gbnVsbDsKICAgIHRoaXMudmVyc2lvbkNvbnRyb2wgPSBudWxsOwogICAgdGhpcy5sb2cgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICB9Cn0KY2xhc3MgQ29tcHJlc3MgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgImNvbXByZXNzIik7CiAgICB0aGlzLnNjb3BlID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMuc2NvcGUsIFsiaW1hZ2VPbmx5IiwgImRvY3VtZW50Il0pOwogIH0KfQpjbGFzcyBDb21wcmVzc0xvZ2ljYWxTdHJ1Y3R1cmUgZXh0ZW5kcyBPcHRpb24wMSB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAiY29tcHJlc3NMb2dpY2FsU3RydWN0dXJlIik7CiAgfQp9CmNsYXNzIENvbXByZXNzT2JqZWN0U3RyZWFtIGV4dGVuZHMgT3B0aW9uMTAgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgImNvbXByZXNzT2JqZWN0U3RyZWFtIik7CiAgfQp9CmNsYXNzIENvbXByZXNzaW9uIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJjb21wcmVzc2lvbiIsIHRydWUpOwogICAgdGhpcy5jb21wcmVzc0xvZ2ljYWxTdHJ1Y3R1cmUgPSBudWxsOwogICAgdGhpcy5jb21wcmVzc09iamVjdFN0cmVhbSA9IG51bGw7CiAgICB0aGlzLmxldmVsID0gbnVsbDsKICAgIHRoaXMudHlwZSA9IG51bGw7CiAgfQp9CmNsYXNzIENvbmZpZyBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAiY29uZmlnIiwgdHJ1ZSk7CiAgICB0aGlzLmFjcm9iYXQgPSBudWxsOwogICAgdGhpcy5wcmVzZW50ID0gbnVsbDsKICAgIHRoaXMudHJhY2UgPSBudWxsOwogICAgdGhpcy5hZ2VudCA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogIH0KfQpjbGFzcyBDb25mb3JtYW5jZSBleHRlbmRzIE9wdGlvbk9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAiY29uZm9ybWFuY2UiLCBbIkEiLCAiQiJdKTsKICB9Cn0KY2xhc3MgQ29udGVudENvcHkgZXh0ZW5kcyBPcHRpb24wMSB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAiY29udGVudENvcHkiKTsKICB9Cn0KY2xhc3MgQ29waWVzIGV4dGVuZHMgSW50ZWdlck9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAiY29waWVzIiwgMSwgbiA9PiBuID49IDEpOwogIH0KfQpjbGFzcyBDcmVhdG9yIGV4dGVuZHMgU3RyaW5nT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJjcmVhdG9yIik7CiAgfQp9CmNsYXNzIEN1cnJlbnRQYWdlIGV4dGVuZHMgSW50ZWdlck9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAiY3VycmVudFBhZ2UiLCAwLCBuID0+IG4gPj0gMCk7CiAgfQp9CmNsYXNzIERhdGEgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgImRhdGEiLCB0cnVlKTsKICAgIHRoaXMuYWRqdXN0RGF0YSA9IG51bGw7CiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBudWxsOwogICAgdGhpcy5pbmNyZW1lbnRhbExvYWQgPSBudWxsOwogICAgdGhpcy5vdXRwdXRYU0wgPSBudWxsOwogICAgdGhpcy5yYW5nZSA9IG51bGw7CiAgICB0aGlzLnJlY29yZCA9IG51bGw7CiAgICB0aGlzLnN0YXJ0Tm9kZSA9IG51bGw7CiAgICB0aGlzLnVyaSA9IG51bGw7CiAgICB0aGlzLndpbmRvdyA9IG51bGw7CiAgICB0aGlzLnhzbCA9IG51bGw7CiAgICB0aGlzLmV4Y2x1ZGVOUyA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy50cmFuc2Zvcm0gPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICB9Cn0KY2xhc3MgRGVidWcgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgImRlYnVnIiwgdHJ1ZSk7CiAgICB0aGlzLnVyaSA9IG51bGw7CiAgfQp9CmNsYXNzIERlZmF1bHRUeXBlZmFjZSBleHRlbmRzIENvbnRlbnRPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgImRlZmF1bHRUeXBlZmFjZSIpOwogICAgdGhpcy53cml0aW5nU2NyaXB0ID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMud3JpdGluZ1NjcmlwdCwgWyIqIiwgIkFyYWJpYyIsICJDeXJpbGxpYyIsICJFYXN0RXVyb3BlYW5Sb21hbiIsICJHcmVlayIsICJIZWJyZXciLCAiSmFwYW5lc2UiLCAiS29yZWFuIiwgIlJvbWFuIiwgIlNpbXBsaWZpZWRDaGluZXNlIiwgIlRoYWkiLCAiVHJhZGl0aW9uYWxDaGluZXNlIiwgIlZpZXRuYW1lc2UiXSk7CiAgfQp9CmNsYXNzIERlc3RpbmF0aW9uIGV4dGVuZHMgT3B0aW9uT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJkZXN0aW5hdGlvbiIsIFsicGRmIiwgInBjbCIsICJwcyIsICJ3ZWJDbGllbnQiLCAienBsIl0pOwogIH0KfQpjbGFzcyBEb2N1bWVudEFzc2VtYmx5IGV4dGVuZHMgT3B0aW9uMDEgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgImRvY3VtZW50QXNzZW1ibHkiKTsKICB9Cn0KY2xhc3MgRHJpdmVyIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJkcml2ZXIiLCB0cnVlKTsKICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSA/IGF0dHJpYnV0ZXMubmFtZS50cmltKCkgOiAiIjsKICAgIHRoaXMuZm9udEluZm8gPSBudWxsOwogICAgdGhpcy54ZGMgPSBudWxsOwogIH0KfQpjbGFzcyBEdXBsZXhPcHRpb24gZXh0ZW5kcyBPcHRpb25PYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgImR1cGxleE9wdGlvbiIsIFsic2ltcGxleCIsICJkdXBsZXhGbGlwTG9uZ0VkZ2UiLCAiZHVwbGV4RmxpcFNob3J0RWRnZSJdKTsKICB9Cn0KY2xhc3MgRHluYW1pY1JlbmRlciBleHRlbmRzIE9wdGlvbk9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAiZHluYW1pY1JlbmRlciIsIFsiZm9yYmlkZGVuIiwgInJlcXVpcmVkIl0pOwogIH0KfQpjbGFzcyBFbWJlZCBleHRlbmRzIE9wdGlvbjAxIHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJlbWJlZCIpOwogIH0KfQpjbGFzcyBjb25maWdfRW5jcnlwdCBleHRlbmRzIE9wdGlvbjAxIHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJlbmNyeXB0Iik7CiAgfQp9CmNsYXNzIGNvbmZpZ19FbmNyeXB0aW9uIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJlbmNyeXB0aW9uIiwgdHJ1ZSk7CiAgICB0aGlzLmVuY3J5cHQgPSBudWxsOwogICAgdGhpcy5lbmNyeXB0aW9uTGV2ZWwgPSBudWxsOwogICAgdGhpcy5wZXJtaXNzaW9ucyA9IG51bGw7CiAgfQp9CmNsYXNzIEVuY3J5cHRpb25MZXZlbCBleHRlbmRzIE9wdGlvbk9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAiZW5jcnlwdGlvbkxldmVsIiwgWyI0MGJpdCIsICIxMjhiaXQiXSk7CiAgfQp9CmNsYXNzIEVuZm9yY2UgZXh0ZW5kcyBTdHJpbmdPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgImVuZm9yY2UiKTsKICB9Cn0KY2xhc3MgRXF1YXRlIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJlcXVhdGUiKTsKICAgIHRoaXMuZm9yY2UgPSBnZXRJbnRlZ2VyKHsKICAgICAgZGF0YTogYXR0cmlidXRlcy5mb3JjZSwKICAgICAgZGVmYXVsdFZhbHVlOiAxLAogICAgICB2YWxpZGF0ZTogbiA9PiBuID09PSAwCiAgICB9KTsKICAgIHRoaXMuZnJvbSA9IGF0dHJpYnV0ZXMuZnJvbSB8fCAiIjsKICAgIHRoaXMudG8gPSBhdHRyaWJ1dGVzLnRvIHx8ICIiOwogIH0KfQpjbGFzcyBFcXVhdGVSYW5nZSBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAiZXF1YXRlUmFuZ2UiKTsKICAgIHRoaXMuZnJvbSA9IGF0dHJpYnV0ZXMuZnJvbSB8fCAiIjsKICAgIHRoaXMudG8gPSBhdHRyaWJ1dGVzLnRvIHx8ICIiOwogICAgdGhpcy5fdW5pY29kZVJhbmdlID0gYXR0cmlidXRlcy51bmljb2RlUmFuZ2UgfHwgIiI7CiAgfQogIGdldCB1bmljb2RlUmFuZ2UoKSB7CiAgICBjb25zdCByYW5nZXMgPSBbXTsKICAgIGNvbnN0IHVuaWNvZGVSZWdleCA9IC9VXCsoWzAtOWEtZkEtRl0rKS87CiAgICBjb25zdCB1bmljb2RlUmFuZ2UgPSB0aGlzLl91bmljb2RlUmFuZ2U7CiAgICBmb3IgKGxldCByYW5nZSBvZiB1bmljb2RlUmFuZ2Uuc3BsaXQoIiwiKS5tYXAoeCA9PiB4LnRyaW0oKSkuZmlsdGVyKHggPT4gISF4KSkgewogICAgICByYW5nZSA9IHJhbmdlLnNwbGl0KCItIiwgMikubWFwKHggPT4gewogICAgICAgIGNvbnN0IGZvdW5kID0geC5tYXRjaCh1bmljb2RlUmVnZXgpOwogICAgICAgIGlmICghZm91bmQpIHsKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcGFyc2VJbnQoZm91bmRbMV0sIDE2KTsKICAgICAgfSk7CiAgICAgIGlmIChyYW5nZS5sZW5ndGggPT09IDEpIHsKICAgICAgICByYW5nZS5wdXNoKHJhbmdlWzBdKTsKICAgICAgfQogICAgICByYW5nZXMucHVzaChyYW5nZSk7CiAgICB9CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJ1bmljb2RlUmFuZ2UiLCByYW5nZXMpOwogIH0KfQpjbGFzcyBFeGNsdWRlIGV4dGVuZHMgQ29udGVudE9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAiZXhjbHVkZSIpOwogIH0KICBbJGZpbmFsaXplXSgpIHsKICAgIHRoaXNbJGNvbnRlbnRdID0gdGhpc1skY29udGVudF0udHJpbSgpLnNwbGl0KC9ccysvKS5maWx0ZXIoeCA9PiB4ICYmIFsiY2FsY3VsYXRlIiwgImNsb3NlIiwgImVudGVyIiwgImV4aXQiLCAiaW5pdGlhbGl6ZSIsICJyZWFkeSIsICJ2YWxpZGF0ZSJdLmluY2x1ZGVzKHgpKTsKICB9Cn0KY2xhc3MgRXhjbHVkZU5TIGV4dGVuZHMgU3RyaW5nT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJleGNsdWRlTlMiKTsKICB9Cn0KY2xhc3MgRmxpcExhYmVsIGV4dGVuZHMgT3B0aW9uT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJmbGlwTGFiZWwiLCBbInVzZVByaW50ZXJTZXR0aW5nIiwgIm9uIiwgIm9mZiJdKTsKICB9Cn0KY2xhc3MgY29uZmlnX0ZvbnRJbmZvIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJmb250SW5mbyIsIHRydWUpOwogICAgdGhpcy5lbWJlZCA9IG51bGw7CiAgICB0aGlzLm1hcCA9IG51bGw7CiAgICB0aGlzLnN1YnNldEJlbG93ID0gbnVsbDsKICAgIHRoaXMuYWx3YXlzRW1iZWQgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuZGVmYXVsdFR5cGVmYWNlID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLm5ldmVyRW1iZWQgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICB9Cn0KY2xhc3MgRm9ybUZpZWxkRmlsbGluZyBleHRlbmRzIE9wdGlvbjAxIHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJmb3JtRmllbGRGaWxsaW5nIik7CiAgfQp9CmNsYXNzIEdyb3VwUGFyZW50IGV4dGVuZHMgU3RyaW5nT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJncm91cFBhcmVudCIpOwogIH0KfQpjbGFzcyBJZkVtcHR5IGV4dGVuZHMgT3B0aW9uT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJpZkVtcHR5IiwgWyJkYXRhVmFsdWUiLCAiZGF0YUdyb3VwIiwgImlnbm9yZSIsICJyZW1vdmUiXSk7CiAgfQp9CmNsYXNzIEluY2x1ZGVYRFBDb250ZW50IGV4dGVuZHMgU3RyaW5nT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJpbmNsdWRlWERQQ29udGVudCIpOwogIH0KfQpjbGFzcyBJbmNyZW1lbnRhbExvYWQgZXh0ZW5kcyBPcHRpb25PYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgImluY3JlbWVudGFsTG9hZCIsIFsibm9uZSIsICJmb3J3YXJkT25seSJdKTsKICB9Cn0KY2xhc3MgSW5jcmVtZW50YWxNZXJnZSBleHRlbmRzIE9wdGlvbjAxIHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJpbmNyZW1lbnRhbE1lcmdlIik7CiAgfQp9CmNsYXNzIEludGVyYWN0aXZlIGV4dGVuZHMgT3B0aW9uMDEgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgImludGVyYWN0aXZlIik7CiAgfQp9CmNsYXNzIEpvZyBleHRlbmRzIE9wdGlvbk9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAiam9nIiwgWyJ1c2VQcmludGVyU2V0dGluZyIsICJub25lIiwgInBhZ2VTZXQiXSk7CiAgfQp9CmNsYXNzIExhYmVsUHJpbnRlciBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAibGFiZWxQcmludGVyIiwgdHJ1ZSk7CiAgICB0aGlzLm5hbWUgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5uYW1lLCBbInpwbCIsICJkcGwiLCAiaXBsIiwgInRjcGwiXSk7CiAgICB0aGlzLmJhdGNoT3V0cHV0ID0gbnVsbDsKICAgIHRoaXMuZmxpcExhYmVsID0gbnVsbDsKICAgIHRoaXMuZm9udEluZm8gPSBudWxsOwogICAgdGhpcy54ZGMgPSBudWxsOwogIH0KfQpjbGFzcyBMYXlvdXQgZXh0ZW5kcyBPcHRpb25PYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgImxheW91dCIsIFsicGFnaW5hdGUiLCAicGFuZWwiXSk7CiAgfQp9CmNsYXNzIExldmVsIGV4dGVuZHMgSW50ZWdlck9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAibGV2ZWwiLCAwLCBuID0+IG4gPiAwKTsKICB9Cn0KY2xhc3MgTGluZWFyaXplZCBleHRlbmRzIE9wdGlvbjAxIHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJsaW5lYXJpemVkIik7CiAgfQp9CmNsYXNzIExvY2FsZSBleHRlbmRzIFN0cmluZ09iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAibG9jYWxlIik7CiAgfQp9CmNsYXNzIExvY2FsZVNldCBleHRlbmRzIFN0cmluZ09iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAibG9jYWxlU2V0Iik7CiAgfQp9CmNsYXNzIExvZyBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAibG9nIiwgdHJ1ZSk7CiAgICB0aGlzLm1vZGUgPSBudWxsOwogICAgdGhpcy50aHJlc2hvbGQgPSBudWxsOwogICAgdGhpcy50byA9IG51bGw7CiAgICB0aGlzLnVyaSA9IG51bGw7CiAgfQp9CmNsYXNzIE1hcEVsZW1lbnQgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgIm1hcCIsIHRydWUpOwogICAgdGhpcy5lcXVhdGUgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMuZXF1YXRlUmFuZ2UgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICB9Cn0KY2xhc3MgTWVkaXVtSW5mbyBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAibWVkaXVtSW5mbyIsIHRydWUpOwogICAgdGhpcy5tYXAgPSBudWxsOwogIH0KfQpjbGFzcyBjb25maWdfTWVzc2FnZSBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAibWVzc2FnZSIsIHRydWUpOwogICAgdGhpcy5tc2dJZCA9IG51bGw7CiAgICB0aGlzLnNldmVyaXR5ID0gbnVsbDsKICB9Cn0KY2xhc3MgTWVzc2FnaW5nIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJtZXNzYWdpbmciLCB0cnVlKTsKICAgIHRoaXMubWVzc2FnZSA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogIH0KfQpjbGFzcyBNb2RlIGV4dGVuZHMgT3B0aW9uT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJtb2RlIiwgWyJhcHBlbmQiLCAib3ZlcndyaXRlIl0pOwogIH0KfQpjbGFzcyBNb2RpZnlBbm5vdHMgZXh0ZW5kcyBPcHRpb24wMSB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAibW9kaWZ5QW5ub3RzIik7CiAgfQp9CmNsYXNzIE1zZ0lkIGV4dGVuZHMgSW50ZWdlck9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAibXNnSWQiLCAxLCBuID0+IG4gPj0gMSk7CiAgfQp9CmNsYXNzIE5hbWVBdHRyIGV4dGVuZHMgU3RyaW5nT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJuYW1lQXR0ciIpOwogIH0KfQpjbGFzcyBOZXZlckVtYmVkIGV4dGVuZHMgQ29udGVudE9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAibmV2ZXJFbWJlZCIpOwogIH0KfQpjbGFzcyBOdW1iZXJPZkNvcGllcyBleHRlbmRzIEludGVnZXJPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgIm51bWJlck9mQ29waWVzIiwgbnVsbCwgbiA9PiBuID49IDIgJiYgbiA8PSA1KTsKICB9Cn0KY2xhc3MgT3BlbkFjdGlvbiBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAib3BlbkFjdGlvbiIsIHRydWUpOwogICAgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGw7CiAgfQp9CmNsYXNzIE91dHB1dCBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAib3V0cHV0IiwgdHJ1ZSk7CiAgICB0aGlzLnRvID0gbnVsbDsKICAgIHRoaXMudHlwZSA9IG51bGw7CiAgICB0aGlzLnVyaSA9IG51bGw7CiAgfQp9CmNsYXNzIE91dHB1dEJpbiBleHRlbmRzIFN0cmluZ09iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAib3V0cHV0QmluIik7CiAgfQp9CmNsYXNzIE91dHB1dFhTTCBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAib3V0cHV0WFNMIiwgdHJ1ZSk7CiAgICB0aGlzLnVyaSA9IG51bGw7CiAgfQp9CmNsYXNzIE92ZXJwcmludCBleHRlbmRzIE9wdGlvbk9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAib3ZlcnByaW50IiwgWyJub25lIiwgImJvdGgiLCAiZHJhdyIsICJmaWVsZCJdKTsKICB9Cn0KY2xhc3MgUGFja2V0cyBleHRlbmRzIFN0cmluZ09iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAicGFja2V0cyIpOwogIH0KICBbJGZpbmFsaXplXSgpIHsKICAgIGlmICh0aGlzWyRjb250ZW50XSA9PT0gIioiKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXNbJGNvbnRlbnRdID0gdGhpc1skY29udGVudF0udHJpbSgpLnNwbGl0KC9ccysvKS5maWx0ZXIoeCA9PiBbImNvbmZpZyIsICJkYXRhc2V0cyIsICJ0ZW1wbGF0ZSIsICJ4ZmRmIiwgInhzbHQiXS5pbmNsdWRlcyh4KSk7CiAgfQp9CmNsYXNzIFBhZ2VPZmZzZXQgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgInBhZ2VPZmZzZXQiKTsKICAgIHRoaXMueCA9IGdldEludGVnZXIoewogICAgICBkYXRhOiBhdHRyaWJ1dGVzLngsCiAgICAgIGRlZmF1bHRWYWx1ZTogInVzZVhEQ1NldHRpbmciLAogICAgICB2YWxpZGF0ZTogbiA9PiB0cnVlCiAgICB9KTsKICAgIHRoaXMueSA9IGdldEludGVnZXIoewogICAgICBkYXRhOiBhdHRyaWJ1dGVzLnksCiAgICAgIGRlZmF1bHRWYWx1ZTogInVzZVhEQ1NldHRpbmciLAogICAgICB2YWxpZGF0ZTogbiA9PiB0cnVlCiAgICB9KTsKICB9Cn0KY2xhc3MgUGFnZVJhbmdlIGV4dGVuZHMgU3RyaW5nT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJwYWdlUmFuZ2UiKTsKICB9CiAgWyRmaW5hbGl6ZV0oKSB7CiAgICBjb25zdCBudW1iZXJzID0gdGhpc1skY29udGVudF0udHJpbSgpLnNwbGl0KC9ccysvKS5tYXAoeCA9PiBwYXJzZUludCh4LCAxMCkpOwogICAgY29uc3QgcmFuZ2VzID0gW107CiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBudW1iZXJzLmxlbmd0aDsgaSA8IGlpOyBpICs9IDIpIHsKICAgICAgcmFuZ2VzLnB1c2gobnVtYmVycy5zbGljZShpLCBpICsgMikpOwogICAgfQogICAgdGhpc1skY29udGVudF0gPSByYW5nZXM7CiAgfQp9CmNsYXNzIFBhZ2luYXRpb24gZXh0ZW5kcyBPcHRpb25PYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgInBhZ2luYXRpb24iLCBbInNpbXBsZXgiLCAiZHVwbGV4U2hvcnRFZGdlIiwgImR1cGxleExvbmdFZGdlIl0pOwogIH0KfQpjbGFzcyBQYWdpbmF0aW9uT3ZlcnJpZGUgZXh0ZW5kcyBPcHRpb25PYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgInBhZ2luYXRpb25PdmVycmlkZSIsIFsibm9uZSIsICJmb3JjZUR1cGxleCIsICJmb3JjZUR1cGxleExvbmdFZGdlIiwgImZvcmNlRHVwbGV4U2hvcnRFZGdlIiwgImZvcmNlU2ltcGxleCJdKTsKICB9Cn0KY2xhc3MgUGFydCBleHRlbmRzIEludGVnZXJPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgInBhcnQiLCAxLCBuID0+IGZhbHNlKTsKICB9Cn0KY2xhc3MgUGNsIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJwY2wiLCB0cnVlKTsKICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8fCAiIjsKICAgIHRoaXMuYmF0Y2hPdXRwdXQgPSBudWxsOwogICAgdGhpcy5mb250SW5mbyA9IG51bGw7CiAgICB0aGlzLmpvZyA9IG51bGw7CiAgICB0aGlzLm1lZGl1bUluZm8gPSBudWxsOwogICAgdGhpcy5vdXRwdXRCaW4gPSBudWxsOwogICAgdGhpcy5wYWdlT2Zmc2V0ID0gbnVsbDsKICAgIHRoaXMuc3RhcGxlID0gbnVsbDsKICAgIHRoaXMueGRjID0gbnVsbDsKICB9Cn0KY2xhc3MgUGRmIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJwZGYiLCB0cnVlKTsKICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8fCAiIjsKICAgIHRoaXMuYWRvYmVFeHRlbnNpb25MZXZlbCA9IG51bGw7CiAgICB0aGlzLmJhdGNoT3V0cHV0ID0gbnVsbDsKICAgIHRoaXMuY29tcHJlc3Npb24gPSBudWxsOwogICAgdGhpcy5jcmVhdG9yID0gbnVsbDsKICAgIHRoaXMuZW5jcnlwdGlvbiA9IG51bGw7CiAgICB0aGlzLmZvbnRJbmZvID0gbnVsbDsKICAgIHRoaXMuaW50ZXJhY3RpdmUgPSBudWxsOwogICAgdGhpcy5saW5lYXJpemVkID0gbnVsbDsKICAgIHRoaXMub3BlbkFjdGlvbiA9IG51bGw7CiAgICB0aGlzLnBkZmEgPSBudWxsOwogICAgdGhpcy5wcm9kdWNlciA9IG51bGw7CiAgICB0aGlzLnJlbmRlclBvbGljeSA9IG51bGw7CiAgICB0aGlzLnNjcmlwdE1vZGVsID0gbnVsbDsKICAgIHRoaXMuc2lsZW50UHJpbnQgPSBudWxsOwogICAgdGhpcy5zdWJtaXRGb3JtYXQgPSBudWxsOwogICAgdGhpcy50YWdnZWQgPSBudWxsOwogICAgdGhpcy52ZXJzaW9uID0gbnVsbDsKICAgIHRoaXMudmlld2VyUHJlZmVyZW5jZXMgPSBudWxsOwogICAgdGhpcy54ZGMgPSBudWxsOwogIH0KfQpjbGFzcyBQZGZhIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJwZGZhIiwgdHJ1ZSk7CiAgICB0aGlzLmFtZCA9IG51bGw7CiAgICB0aGlzLmNvbmZvcm1hbmNlID0gbnVsbDsKICAgIHRoaXMuaW5jbHVkZVhEUENvbnRlbnQgPSBudWxsOwogICAgdGhpcy5wYXJ0ID0gbnVsbDsKICB9Cn0KY2xhc3MgUGVybWlzc2lvbnMgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgInBlcm1pc3Npb25zIiwgdHJ1ZSk7CiAgICB0aGlzLmFjY2Vzc2libGVDb250ZW50ID0gbnVsbDsKICAgIHRoaXMuY2hhbmdlID0gbnVsbDsKICAgIHRoaXMuY29udGVudENvcHkgPSBudWxsOwogICAgdGhpcy5kb2N1bWVudEFzc2VtYmx5ID0gbnVsbDsKICAgIHRoaXMuZm9ybUZpZWxkRmlsbGluZyA9IG51bGw7CiAgICB0aGlzLm1vZGlmeUFubm90cyA9IG51bGw7CiAgICB0aGlzLnBsYWludGV4dE1ldGFkYXRhID0gbnVsbDsKICAgIHRoaXMucHJpbnQgPSBudWxsOwogICAgdGhpcy5wcmludEhpZ2hRdWFsaXR5ID0gbnVsbDsKICB9Cn0KY2xhc3MgUGlja1RyYXlCeVBERlNpemUgZXh0ZW5kcyBPcHRpb24wMSB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAicGlja1RyYXlCeVBERlNpemUiKTsKICB9Cn0KY2xhc3MgY29uZmlnX1BpY3R1cmUgZXh0ZW5kcyBTdHJpbmdPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgInBpY3R1cmUiKTsKICB9Cn0KY2xhc3MgUGxhaW50ZXh0TWV0YWRhdGEgZXh0ZW5kcyBPcHRpb24wMSB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAicGxhaW50ZXh0TWV0YWRhdGEiKTsKICB9Cn0KY2xhc3MgUHJlc2VuY2UgZXh0ZW5kcyBPcHRpb25PYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgInByZXNlbmNlIiwgWyJwcmVzZXJ2ZSIsICJkaXNzb2x2ZSIsICJkaXNzb2x2ZVN0cnVjdHVyZSIsICJpZ25vcmUiLCAicmVtb3ZlIl0pOwogIH0KfQpjbGFzcyBQcmVzZW50IGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJwcmVzZW50IiwgdHJ1ZSk7CiAgICB0aGlzLmJlaGF2aW9yT3ZlcnJpZGUgPSBudWxsOwogICAgdGhpcy5jYWNoZSA9IG51bGw7CiAgICB0aGlzLmNvbW1vbiA9IG51bGw7CiAgICB0aGlzLmNvcGllcyA9IG51bGw7CiAgICB0aGlzLmRlc3RpbmF0aW9uID0gbnVsbDsKICAgIHRoaXMuaW5jcmVtZW50YWxNZXJnZSA9IG51bGw7CiAgICB0aGlzLmxheW91dCA9IG51bGw7CiAgICB0aGlzLm91dHB1dCA9IG51bGw7CiAgICB0aGlzLm92ZXJwcmludCA9IG51bGw7CiAgICB0aGlzLnBhZ2luYXRpb24gPSBudWxsOwogICAgdGhpcy5wYWdpbmF0aW9uT3ZlcnJpZGUgPSBudWxsOwogICAgdGhpcy5zY3JpcHQgPSBudWxsOwogICAgdGhpcy52YWxpZGF0ZSA9IG51bGw7CiAgICB0aGlzLnhkcCA9IG51bGw7CiAgICB0aGlzLmRyaXZlciA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5sYWJlbFByaW50ZXIgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMucGNsID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLnBkZiA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5wcyA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogICAgdGhpcy5zdWJtaXRVcmwgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMud2ViQ2xpZW50ID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLnpwbCA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogIH0KfQpjbGFzcyBQcmludCBleHRlbmRzIE9wdGlvbjAxIHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJwcmludCIpOwogIH0KfQpjbGFzcyBQcmludEhpZ2hRdWFsaXR5IGV4dGVuZHMgT3B0aW9uMDEgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgInByaW50SGlnaFF1YWxpdHkiKTsKICB9Cn0KY2xhc3MgUHJpbnRTY2FsaW5nIGV4dGVuZHMgT3B0aW9uT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJwcmludFNjYWxpbmciLCBbImFwcGRlZmF1bHQiLCAibm9TY2FsaW5nIl0pOwogIH0KfQpjbGFzcyBQcmludGVyTmFtZSBleHRlbmRzIFN0cmluZ09iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAicHJpbnRlck5hbWUiKTsKICB9Cn0KY2xhc3MgUHJvZHVjZXIgZXh0ZW5kcyBTdHJpbmdPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgInByb2R1Y2VyIik7CiAgfQp9CmNsYXNzIFBzIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJwcyIsIHRydWUpOwogICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8ICIiOwogICAgdGhpcy5iYXRjaE91dHB1dCA9IG51bGw7CiAgICB0aGlzLmZvbnRJbmZvID0gbnVsbDsKICAgIHRoaXMuam9nID0gbnVsbDsKICAgIHRoaXMubWVkaXVtSW5mbyA9IG51bGw7CiAgICB0aGlzLm91dHB1dEJpbiA9IG51bGw7CiAgICB0aGlzLnN0YXBsZSA9IG51bGw7CiAgICB0aGlzLnhkYyA9IG51bGw7CiAgfQp9CmNsYXNzIFJhbmdlIGV4dGVuZHMgQ29udGVudE9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAicmFuZ2UiKTsKICB9CiAgWyRmaW5hbGl6ZV0oKSB7CiAgICB0aGlzWyRjb250ZW50XSA9IHRoaXNbJGNvbnRlbnRdLnNwbGl0KCIsIiwgMikubWFwKHJhbmdlID0+IHJhbmdlLnNwbGl0KCItIikubWFwKHggPT4gcGFyc2VJbnQoeC50cmltKCksIDEwKSkpLmZpbHRlcihyYW5nZSA9PiByYW5nZS5ldmVyeSh4ID0+ICFpc05hTih4KSkpLm1hcChyYW5nZSA9PiB7CiAgICAgIGlmIChyYW5nZS5sZW5ndGggPT09IDEpIHsKICAgICAgICByYW5nZS5wdXNoKHJhbmdlWzBdKTsKICAgICAgfQogICAgICByZXR1cm4gcmFuZ2U7CiAgICB9KTsKICB9Cn0KY2xhc3MgUmVjb3JkIGV4dGVuZHMgQ29udGVudE9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAicmVjb3JkIik7CiAgfQogIFskZmluYWxpemVdKCkgewogICAgdGhpc1skY29udGVudF0gPSB0aGlzWyRjb250ZW50XS50cmltKCk7CiAgICBjb25zdCBuID0gcGFyc2VJbnQodGhpc1skY29udGVudF0sIDEwKTsKICAgIGlmICghaXNOYU4obikgJiYgbiA+PSAwKSB7CiAgICAgIHRoaXNbJGNvbnRlbnRdID0gbjsKICAgIH0KICB9Cn0KY2xhc3MgUmVsZXZhbnQgZXh0ZW5kcyBDb250ZW50T2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJyZWxldmFudCIpOwogIH0KICBbJGZpbmFsaXplXSgpIHsKICAgIHRoaXNbJGNvbnRlbnRdID0gdGhpc1skY29udGVudF0udHJpbSgpLnNwbGl0KC9ccysvKTsKICB9Cn0KY2xhc3MgUmVuYW1lIGV4dGVuZHMgQ29udGVudE9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAicmVuYW1lIik7CiAgfQogIFskZmluYWxpemVdKCkgewogICAgdGhpc1skY29udGVudF0gPSB0aGlzWyRjb250ZW50XS50cmltKCk7CiAgICBpZiAodGhpc1skY29udGVudF0udG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCJ4bWwiKSB8fCBuZXcgUmVnRXhwKCJbXFxwe0x9X11bXFxwe0x9XFxkLl9cXHB7TX0tXSoiLCAidSIpLnRlc3QodGhpc1skY29udGVudF0pKSB7CiAgICAgIHdhcm4oIlhGQSAtIFJlbmFtZTogaW52YWxpZCBYRkEgbmFtZSIpOwogICAgfQogIH0KfQpjbGFzcyBSZW5kZXJQb2xpY3kgZXh0ZW5kcyBPcHRpb25PYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgInJlbmRlclBvbGljeSIsIFsic2VydmVyIiwgImNsaWVudCJdKTsKICB9Cn0KY2xhc3MgUnVuU2NyaXB0cyBleHRlbmRzIE9wdGlvbk9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAicnVuU2NyaXB0cyIsIFsiYm90aCIsICJjbGllbnQiLCAibm9uZSIsICJzZXJ2ZXIiXSk7CiAgfQp9CmNsYXNzIGNvbmZpZ19TY3JpcHQgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgInNjcmlwdCIsIHRydWUpOwogICAgdGhpcy5jdXJyZW50UGFnZSA9IG51bGw7CiAgICB0aGlzLmV4Y2x1ZGUgPSBudWxsOwogICAgdGhpcy5ydW5TY3JpcHRzID0gbnVsbDsKICB9Cn0KY2xhc3MgU2NyaXB0TW9kZWwgZXh0ZW5kcyBPcHRpb25PYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgInNjcmlwdE1vZGVsIiwgWyJYRkEiLCAibm9uZSJdKTsKICB9Cn0KY2xhc3MgU2V2ZXJpdHkgZXh0ZW5kcyBPcHRpb25PYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgInNldmVyaXR5IiwgWyJpZ25vcmUiLCAiZXJyb3IiLCAiaW5mb3JtYXRpb24iLCAidHJhY2UiLCAid2FybmluZyJdKTsKICB9Cn0KY2xhc3MgU2lsZW50UHJpbnQgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgInNpbGVudFByaW50IiwgdHJ1ZSk7CiAgICB0aGlzLmFkZFNpbGVudFByaW50ID0gbnVsbDsKICAgIHRoaXMucHJpbnRlck5hbWUgPSBudWxsOwogIH0KfQpjbGFzcyBTdGFwbGUgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgInN0YXBsZSIpOwogICAgdGhpcy5tb2RlID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMubW9kZSwgWyJ1c2VQcmludGVyU2V0dGluZyIsICJvbiIsICJvZmYiXSk7CiAgfQp9CmNsYXNzIFN0YXJ0Tm9kZSBleHRlbmRzIFN0cmluZ09iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAic3RhcnROb2RlIik7CiAgfQp9CmNsYXNzIFN0YXJ0UGFnZSBleHRlbmRzIEludGVnZXJPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgInN0YXJ0UGFnZSIsIDAsIG4gPT4gdHJ1ZSk7CiAgfQp9CmNsYXNzIFN1Ym1pdEZvcm1hdCBleHRlbmRzIE9wdGlvbk9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAic3VibWl0Rm9ybWF0IiwgWyJodG1sIiwgImRlbGVnYXRlIiwgImZkZiIsICJ4bWwiLCAicGRmIl0pOwogIH0KfQpjbGFzcyBTdWJtaXRVcmwgZXh0ZW5kcyBTdHJpbmdPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgInN1Ym1pdFVybCIpOwogIH0KfQpjbGFzcyBTdWJzZXRCZWxvdyBleHRlbmRzIEludGVnZXJPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgInN1YnNldEJlbG93IiwgMTAwLCBuID0+IG4gPj0gMCAmJiBuIDw9IDEwMCk7CiAgfQp9CmNsYXNzIFN1cHByZXNzQmFubmVyIGV4dGVuZHMgT3B0aW9uMDEgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgInN1cHByZXNzQmFubmVyIik7CiAgfQp9CmNsYXNzIFRhZ2dlZCBleHRlbmRzIE9wdGlvbjAxIHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJ0YWdnZWQiKTsKICB9Cn0KY2xhc3MgY29uZmlnX1RlbXBsYXRlIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJ0ZW1wbGF0ZSIsIHRydWUpOwogICAgdGhpcy5iYXNlID0gbnVsbDsKICAgIHRoaXMucmVsZXZhbnQgPSBudWxsOwogICAgdGhpcy5zdGFydFBhZ2UgPSBudWxsOwogICAgdGhpcy51cmkgPSBudWxsOwogICAgdGhpcy54c2wgPSBudWxsOwogIH0KfQpjbGFzcyBUaHJlc2hvbGQgZXh0ZW5kcyBPcHRpb25PYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgInRocmVzaG9sZCIsIFsidHJhY2UiLCAiZXJyb3IiLCAiaW5mb3JtYXRpb24iLCAid2FybmluZyJdKTsKICB9Cn0KY2xhc3MgVG8gZXh0ZW5kcyBPcHRpb25PYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgInRvIiwgWyJudWxsIiwgIm1lbW9yeSIsICJzdGRlcnIiLCAic3Rkb3V0IiwgInN5c3RlbSIsICJ1cmkiXSk7CiAgfQp9CmNsYXNzIFRlbXBsYXRlQ2FjaGUgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgInRlbXBsYXRlQ2FjaGUiKTsKICAgIHRoaXMubWF4RW50cmllcyA9IGdldEludGVnZXIoewogICAgICBkYXRhOiBhdHRyaWJ1dGVzLm1heEVudHJpZXMsCiAgICAgIGRlZmF1bHRWYWx1ZTogNSwKICAgICAgdmFsaWRhdGU6IG4gPT4gbiA+PSAwCiAgICB9KTsKICB9Cn0KY2xhc3MgVHJhY2UgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgInRyYWNlIiwgdHJ1ZSk7CiAgICB0aGlzLmFyZWEgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICB9Cn0KY2xhc3MgVHJhbnNmb3JtIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJ0cmFuc2Zvcm0iLCB0cnVlKTsKICAgIHRoaXMuZ3JvdXBQYXJlbnQgPSBudWxsOwogICAgdGhpcy5pZkVtcHR5ID0gbnVsbDsKICAgIHRoaXMubmFtZUF0dHIgPSBudWxsOwogICAgdGhpcy5waWN0dXJlID0gbnVsbDsKICAgIHRoaXMucHJlc2VuY2UgPSBudWxsOwogICAgdGhpcy5yZW5hbWUgPSBudWxsOwogICAgdGhpcy53aGl0ZXNwYWNlID0gbnVsbDsKICB9Cn0KY2xhc3MgVHlwZSBleHRlbmRzIE9wdGlvbk9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAidHlwZSIsIFsibm9uZSIsICJhc2NpaTg1IiwgImFzY2lpSGV4IiwgImNjaXR0ZmF4IiwgImZsYXRlIiwgImx6dyIsICJydW5MZW5ndGgiLCAibmF0aXZlIiwgInhkcCIsICJtZXJnZWRYRFAiXSk7CiAgfQp9CmNsYXNzIFVyaSBleHRlbmRzIFN0cmluZ09iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAidXJpIik7CiAgfQp9CmNsYXNzIGNvbmZpZ19WYWxpZGF0ZSBleHRlbmRzIE9wdGlvbk9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAidmFsaWRhdGUiLCBbInByZVN1Ym1pdCIsICJwcmVQcmludCIsICJwcmVFeGVjdXRlIiwgInByZVNhdmUiXSk7CiAgfQp9CmNsYXNzIFZhbGlkYXRlQXBwcm92YWxTaWduYXR1cmVzIGV4dGVuZHMgQ29udGVudE9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAidmFsaWRhdGVBcHByb3ZhbFNpZ25hdHVyZXMiKTsKICB9CiAgWyRmaW5hbGl6ZV0oKSB7CiAgICB0aGlzWyRjb250ZW50XSA9IHRoaXNbJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMrLykuZmlsdGVyKHggPT4gWyJkb2NSZWFkeSIsICJwb3N0U2lnbiJdLmluY2x1ZGVzKHgpKTsKICB9Cn0KY2xhc3MgVmFsaWRhdGlvbk1lc3NhZ2luZyBleHRlbmRzIE9wdGlvbk9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAidmFsaWRhdGlvbk1lc3NhZ2luZyIsIFsiYWxsTWVzc2FnZXNJbmRpdmlkdWFsbHkiLCAiYWxsTWVzc2FnZXNUb2dldGhlciIsICJmaXJzdE1lc3NhZ2VPbmx5IiwgIm5vTWVzc2FnZXMiXSk7CiAgfQp9CmNsYXNzIFZlcnNpb24gZXh0ZW5kcyBPcHRpb25PYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgInZlcnNpb24iLCBbIjEuNyIsICIxLjYiLCAiMS41IiwgIjEuNCIsICIxLjMiLCAiMS4yIl0pOwogIH0KfQpjbGFzcyBWZXJzaW9uQ29udHJvbCBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAiVmVyc2lvbkNvbnRyb2wiKTsKICAgIHRoaXMub3V0cHV0QmVsb3cgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5vdXRwdXRCZWxvdywgWyJ3YXJuIiwgImVycm9yIiwgInVwZGF0ZSJdKTsKICAgIHRoaXMuc291cmNlQWJvdmUgPSBnZXRTdHJpbmdPcHRpb24oYXR0cmlidXRlcy5zb3VyY2VBYm92ZSwgWyJ3YXJuIiwgImVycm9yIl0pOwogICAgdGhpcy5zb3VyY2VCZWxvdyA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLnNvdXJjZUJlbG93LCBbInVwZGF0ZSIsICJtYWludGFpbiJdKTsKICB9Cn0KY2xhc3MgVmlld2VyUHJlZmVyZW5jZXMgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgInZpZXdlclByZWZlcmVuY2VzIiwgdHJ1ZSk7CiAgICB0aGlzLkFEQkVfSlNDb25zb2xlID0gbnVsbDsKICAgIHRoaXMuQURCRV9KU0RlYnVnZ2VyID0gbnVsbDsKICAgIHRoaXMuYWRkVmlld2VyUHJlZmVyZW5jZXMgPSBudWxsOwogICAgdGhpcy5kdXBsZXhPcHRpb24gPSBudWxsOwogICAgdGhpcy5lbmZvcmNlID0gbnVsbDsKICAgIHRoaXMubnVtYmVyT2ZDb3BpZXMgPSBudWxsOwogICAgdGhpcy5wYWdlUmFuZ2UgPSBudWxsOwogICAgdGhpcy5waWNrVHJheUJ5UERGU2l6ZSA9IG51bGw7CiAgICB0aGlzLnByaW50U2NhbGluZyA9IG51bGw7CiAgfQp9CmNsYXNzIFdlYkNsaWVudCBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAid2ViQ2xpZW50IiwgdHJ1ZSk7CiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgPyBhdHRyaWJ1dGVzLm5hbWUudHJpbSgpIDogIiI7CiAgICB0aGlzLmZvbnRJbmZvID0gbnVsbDsKICAgIHRoaXMueGRjID0gbnVsbDsKICB9Cn0KY2xhc3MgV2hpdGVzcGFjZSBleHRlbmRzIE9wdGlvbk9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09ORklHX05TX0lELCAid2hpdGVzcGFjZSIsIFsicHJlc2VydmUiLCAibHRyaW0iLCAibm9ybWFsaXplIiwgInJ0cmltIiwgInRyaW0iXSk7CiAgfQp9CmNsYXNzIFdpbmRvdyBleHRlbmRzIENvbnRlbnRPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgIndpbmRvdyIpOwogIH0KICBbJGZpbmFsaXplXSgpIHsKICAgIGNvbnN0IHBhaXIgPSB0aGlzWyRjb250ZW50XS5zcGxpdCgiLCIsIDIpLm1hcCh4ID0+IHBhcnNlSW50KHgudHJpbSgpLCAxMCkpOwogICAgaWYgKHBhaXIuc29tZSh4ID0+IGlzTmFOKHgpKSkgewogICAgICB0aGlzWyRjb250ZW50XSA9IFswLCAwXTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHBhaXIubGVuZ3RoID09PSAxKSB7CiAgICAgIHBhaXIucHVzaChwYWlyWzBdKTsKICAgIH0KICAgIHRoaXNbJGNvbnRlbnRdID0gcGFpcjsKICB9Cn0KY2xhc3MgWGRjIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJ4ZGMiLCB0cnVlKTsKICAgIHRoaXMudXJpID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLnhzbCA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogIH0KfQpjbGFzcyBYZHAgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgInhkcCIsIHRydWUpOwogICAgdGhpcy5wYWNrZXRzID0gbnVsbDsKICB9Cn0KY2xhc3MgWHNsIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05GSUdfTlNfSUQsICJ4c2wiLCB0cnVlKTsKICAgIHRoaXMuZGVidWcgPSBudWxsOwogICAgdGhpcy51cmkgPSBudWxsOwogIH0KfQpjbGFzcyBacGwgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTkZJR19OU19JRCwgInpwbCIsIHRydWUpOwogICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lID8gYXR0cmlidXRlcy5uYW1lLnRyaW0oKSA6ICIiOwogICAgdGhpcy5iYXRjaE91dHB1dCA9IG51bGw7CiAgICB0aGlzLmZsaXBMYWJlbCA9IG51bGw7CiAgICB0aGlzLmZvbnRJbmZvID0gbnVsbDsKICAgIHRoaXMueGRjID0gbnVsbDsKICB9Cn0KY2xhc3MgQ29uZmlnTmFtZXNwYWNlIHsKICBzdGF0aWMgWyRidWlsZFhGQU9iamVjdF0obmFtZSwgYXR0cmlidXRlcykgewogICAgaWYgKENvbmZpZ05hbWVzcGFjZS5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgewogICAgICByZXR1cm4gQ29uZmlnTmFtZXNwYWNlW25hbWVdKGF0dHJpYnV0ZXMpOwogICAgfQogICAgcmV0dXJuIHVuZGVmaW5lZDsKICB9CiAgc3RhdGljIGFjcm9iYXQoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgQWNyb2JhdChhdHRycyk7CiAgfQogIHN0YXRpYyBhY3JvYmF0NyhhdHRycykgewogICAgcmV0dXJuIG5ldyBBY3JvYmF0NyhhdHRycyk7CiAgfQogIHN0YXRpYyBBREJFX0pTQ29uc29sZShhdHRycykgewogICAgcmV0dXJuIG5ldyBBREJFX0pTQ29uc29sZShhdHRycyk7CiAgfQogIHN0YXRpYyBBREJFX0pTRGVidWdnZXIoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgQURCRV9KU0RlYnVnZ2VyKGF0dHJzKTsKICB9CiAgc3RhdGljIGFkZFNpbGVudFByaW50KGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IEFkZFNpbGVudFByaW50KGF0dHJzKTsKICB9CiAgc3RhdGljIGFkZFZpZXdlclByZWZlcmVuY2VzKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IEFkZFZpZXdlclByZWZlcmVuY2VzKGF0dHJzKTsKICB9CiAgc3RhdGljIGFkanVzdERhdGEoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgQWRqdXN0RGF0YShhdHRycyk7CiAgfQogIHN0YXRpYyBhZG9iZUV4dGVuc2lvbkxldmVsKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IEFkb2JlRXh0ZW5zaW9uTGV2ZWwoYXR0cnMpOwogIH0KICBzdGF0aWMgYWdlbnQoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgQWdlbnQoYXR0cnMpOwogIH0KICBzdGF0aWMgYWx3YXlzRW1iZWQoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgQWx3YXlzRW1iZWQoYXR0cnMpOwogIH0KICBzdGF0aWMgYW1kKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IEFtZChhdHRycyk7CiAgfQogIHN0YXRpYyBhcmVhKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IGNvbmZpZ19BcmVhKGF0dHJzKTsKICB9CiAgc3RhdGljIGF0dHJpYnV0ZXMoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgQXR0cmlidXRlcyhhdHRycyk7CiAgfQogIHN0YXRpYyBhdXRvU2F2ZShhdHRycykgewogICAgcmV0dXJuIG5ldyBBdXRvU2F2ZShhdHRycyk7CiAgfQogIHN0YXRpYyBiYXNlKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IEJhc2UoYXR0cnMpOwogIH0KICBzdGF0aWMgYmF0Y2hPdXRwdXQoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgQmF0Y2hPdXRwdXQoYXR0cnMpOwogIH0KICBzdGF0aWMgYmVoYXZpb3JPdmVycmlkZShhdHRycykgewogICAgcmV0dXJuIG5ldyBCZWhhdmlvck92ZXJyaWRlKGF0dHJzKTsKICB9CiAgc3RhdGljIGNhY2hlKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IENhY2hlKGF0dHJzKTsKICB9CiAgc3RhdGljIGNoYW5nZShhdHRycykgewogICAgcmV0dXJuIG5ldyBDaGFuZ2UoYXR0cnMpOwogIH0KICBzdGF0aWMgY29tbW9uKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IENvbW1vbihhdHRycyk7CiAgfQogIHN0YXRpYyBjb21wcmVzcyhhdHRycykgewogICAgcmV0dXJuIG5ldyBDb21wcmVzcyhhdHRycyk7CiAgfQogIHN0YXRpYyBjb21wcmVzc0xvZ2ljYWxTdHJ1Y3R1cmUoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgQ29tcHJlc3NMb2dpY2FsU3RydWN0dXJlKGF0dHJzKTsKICB9CiAgc3RhdGljIGNvbXByZXNzT2JqZWN0U3RyZWFtKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IENvbXByZXNzT2JqZWN0U3RyZWFtKGF0dHJzKTsKICB9CiAgc3RhdGljIGNvbXByZXNzaW9uKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IENvbXByZXNzaW9uKGF0dHJzKTsKICB9CiAgc3RhdGljIGNvbmZpZyhhdHRycykgewogICAgcmV0dXJuIG5ldyBDb25maWcoYXR0cnMpOwogIH0KICBzdGF0aWMgY29uZm9ybWFuY2UoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgQ29uZm9ybWFuY2UoYXR0cnMpOwogIH0KICBzdGF0aWMgY29udGVudENvcHkoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgQ29udGVudENvcHkoYXR0cnMpOwogIH0KICBzdGF0aWMgY29waWVzKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IENvcGllcyhhdHRycyk7CiAgfQogIHN0YXRpYyBjcmVhdG9yKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IENyZWF0b3IoYXR0cnMpOwogIH0KICBzdGF0aWMgY3VycmVudFBhZ2UoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgQ3VycmVudFBhZ2UoYXR0cnMpOwogIH0KICBzdGF0aWMgZGF0YShhdHRycykgewogICAgcmV0dXJuIG5ldyBEYXRhKGF0dHJzKTsKICB9CiAgc3RhdGljIGRlYnVnKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IERlYnVnKGF0dHJzKTsKICB9CiAgc3RhdGljIGRlZmF1bHRUeXBlZmFjZShhdHRycykgewogICAgcmV0dXJuIG5ldyBEZWZhdWx0VHlwZWZhY2UoYXR0cnMpOwogIH0KICBzdGF0aWMgZGVzdGluYXRpb24oYXR0cnMpIHsKICAgIHJldHVybiBuZXcgRGVzdGluYXRpb24oYXR0cnMpOwogIH0KICBzdGF0aWMgZG9jdW1lbnRBc3NlbWJseShhdHRycykgewogICAgcmV0dXJuIG5ldyBEb2N1bWVudEFzc2VtYmx5KGF0dHJzKTsKICB9CiAgc3RhdGljIGRyaXZlcihhdHRycykgewogICAgcmV0dXJuIG5ldyBEcml2ZXIoYXR0cnMpOwogIH0KICBzdGF0aWMgZHVwbGV4T3B0aW9uKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IER1cGxleE9wdGlvbihhdHRycyk7CiAgfQogIHN0YXRpYyBkeW5hbWljUmVuZGVyKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IER5bmFtaWNSZW5kZXIoYXR0cnMpOwogIH0KICBzdGF0aWMgZW1iZWQoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgRW1iZWQoYXR0cnMpOwogIH0KICBzdGF0aWMgZW5jcnlwdChhdHRycykgewogICAgcmV0dXJuIG5ldyBjb25maWdfRW5jcnlwdChhdHRycyk7CiAgfQogIHN0YXRpYyBlbmNyeXB0aW9uKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IGNvbmZpZ19FbmNyeXB0aW9uKGF0dHJzKTsKICB9CiAgc3RhdGljIGVuY3J5cHRpb25MZXZlbChhdHRycykgewogICAgcmV0dXJuIG5ldyBFbmNyeXB0aW9uTGV2ZWwoYXR0cnMpOwogIH0KICBzdGF0aWMgZW5mb3JjZShhdHRycykgewogICAgcmV0dXJuIG5ldyBFbmZvcmNlKGF0dHJzKTsKICB9CiAgc3RhdGljIGVxdWF0ZShhdHRycykgewogICAgcmV0dXJuIG5ldyBFcXVhdGUoYXR0cnMpOwogIH0KICBzdGF0aWMgZXF1YXRlUmFuZ2UoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgRXF1YXRlUmFuZ2UoYXR0cnMpOwogIH0KICBzdGF0aWMgZXhjbHVkZShhdHRycykgewogICAgcmV0dXJuIG5ldyBFeGNsdWRlKGF0dHJzKTsKICB9CiAgc3RhdGljIGV4Y2x1ZGVOUyhhdHRycykgewogICAgcmV0dXJuIG5ldyBFeGNsdWRlTlMoYXR0cnMpOwogIH0KICBzdGF0aWMgZmxpcExhYmVsKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IEZsaXBMYWJlbChhdHRycyk7CiAgfQogIHN0YXRpYyBmb250SW5mbyhhdHRycykgewogICAgcmV0dXJuIG5ldyBjb25maWdfRm9udEluZm8oYXR0cnMpOwogIH0KICBzdGF0aWMgZm9ybUZpZWxkRmlsbGluZyhhdHRycykgewogICAgcmV0dXJuIG5ldyBGb3JtRmllbGRGaWxsaW5nKGF0dHJzKTsKICB9CiAgc3RhdGljIGdyb3VwUGFyZW50KGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IEdyb3VwUGFyZW50KGF0dHJzKTsKICB9CiAgc3RhdGljIGlmRW1wdHkoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgSWZFbXB0eShhdHRycyk7CiAgfQogIHN0YXRpYyBpbmNsdWRlWERQQ29udGVudChhdHRycykgewogICAgcmV0dXJuIG5ldyBJbmNsdWRlWERQQ29udGVudChhdHRycyk7CiAgfQogIHN0YXRpYyBpbmNyZW1lbnRhbExvYWQoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgSW5jcmVtZW50YWxMb2FkKGF0dHJzKTsKICB9CiAgc3RhdGljIGluY3JlbWVudGFsTWVyZ2UoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgSW5jcmVtZW50YWxNZXJnZShhdHRycyk7CiAgfQogIHN0YXRpYyBpbnRlcmFjdGl2ZShhdHRycykgewogICAgcmV0dXJuIG5ldyBJbnRlcmFjdGl2ZShhdHRycyk7CiAgfQogIHN0YXRpYyBqb2coYXR0cnMpIHsKICAgIHJldHVybiBuZXcgSm9nKGF0dHJzKTsKICB9CiAgc3RhdGljIGxhYmVsUHJpbnRlcihhdHRycykgewogICAgcmV0dXJuIG5ldyBMYWJlbFByaW50ZXIoYXR0cnMpOwogIH0KICBzdGF0aWMgbGF5b3V0KGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IExheW91dChhdHRycyk7CiAgfQogIHN0YXRpYyBsZXZlbChhdHRycykgewogICAgcmV0dXJuIG5ldyBMZXZlbChhdHRycyk7CiAgfQogIHN0YXRpYyBsaW5lYXJpemVkKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IExpbmVhcml6ZWQoYXR0cnMpOwogIH0KICBzdGF0aWMgbG9jYWxlKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IExvY2FsZShhdHRycyk7CiAgfQogIHN0YXRpYyBsb2NhbGVTZXQoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgTG9jYWxlU2V0KGF0dHJzKTsKICB9CiAgc3RhdGljIGxvZyhhdHRycykgewogICAgcmV0dXJuIG5ldyBMb2coYXR0cnMpOwogIH0KICBzdGF0aWMgbWFwKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IE1hcEVsZW1lbnQoYXR0cnMpOwogIH0KICBzdGF0aWMgbWVkaXVtSW5mbyhhdHRycykgewogICAgcmV0dXJuIG5ldyBNZWRpdW1JbmZvKGF0dHJzKTsKICB9CiAgc3RhdGljIG1lc3NhZ2UoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgY29uZmlnX01lc3NhZ2UoYXR0cnMpOwogIH0KICBzdGF0aWMgbWVzc2FnaW5nKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IE1lc3NhZ2luZyhhdHRycyk7CiAgfQogIHN0YXRpYyBtb2RlKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IE1vZGUoYXR0cnMpOwogIH0KICBzdGF0aWMgbW9kaWZ5QW5ub3RzKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IE1vZGlmeUFubm90cyhhdHRycyk7CiAgfQogIHN0YXRpYyBtc2dJZChhdHRycykgewogICAgcmV0dXJuIG5ldyBNc2dJZChhdHRycyk7CiAgfQogIHN0YXRpYyBuYW1lQXR0cihhdHRycykgewogICAgcmV0dXJuIG5ldyBOYW1lQXR0cihhdHRycyk7CiAgfQogIHN0YXRpYyBuZXZlckVtYmVkKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IE5ldmVyRW1iZWQoYXR0cnMpOwogIH0KICBzdGF0aWMgbnVtYmVyT2ZDb3BpZXMoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgTnVtYmVyT2ZDb3BpZXMoYXR0cnMpOwogIH0KICBzdGF0aWMgb3BlbkFjdGlvbihhdHRycykgewogICAgcmV0dXJuIG5ldyBPcGVuQWN0aW9uKGF0dHJzKTsKICB9CiAgc3RhdGljIG91dHB1dChhdHRycykgewogICAgcmV0dXJuIG5ldyBPdXRwdXQoYXR0cnMpOwogIH0KICBzdGF0aWMgb3V0cHV0QmluKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IE91dHB1dEJpbihhdHRycyk7CiAgfQogIHN0YXRpYyBvdXRwdXRYU0woYXR0cnMpIHsKICAgIHJldHVybiBuZXcgT3V0cHV0WFNMKGF0dHJzKTsKICB9CiAgc3RhdGljIG92ZXJwcmludChhdHRycykgewogICAgcmV0dXJuIG5ldyBPdmVycHJpbnQoYXR0cnMpOwogIH0KICBzdGF0aWMgcGFja2V0cyhhdHRycykgewogICAgcmV0dXJuIG5ldyBQYWNrZXRzKGF0dHJzKTsKICB9CiAgc3RhdGljIHBhZ2VPZmZzZXQoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgUGFnZU9mZnNldChhdHRycyk7CiAgfQogIHN0YXRpYyBwYWdlUmFuZ2UoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgUGFnZVJhbmdlKGF0dHJzKTsKICB9CiAgc3RhdGljIHBhZ2luYXRpb24oYXR0cnMpIHsKICAgIHJldHVybiBuZXcgUGFnaW5hdGlvbihhdHRycyk7CiAgfQogIHN0YXRpYyBwYWdpbmF0aW9uT3ZlcnJpZGUoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgUGFnaW5hdGlvbk92ZXJyaWRlKGF0dHJzKTsKICB9CiAgc3RhdGljIHBhcnQoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgUGFydChhdHRycyk7CiAgfQogIHN0YXRpYyBwY2woYXR0cnMpIHsKICAgIHJldHVybiBuZXcgUGNsKGF0dHJzKTsKICB9CiAgc3RhdGljIHBkZihhdHRycykgewogICAgcmV0dXJuIG5ldyBQZGYoYXR0cnMpOwogIH0KICBzdGF0aWMgcGRmYShhdHRycykgewogICAgcmV0dXJuIG5ldyBQZGZhKGF0dHJzKTsKICB9CiAgc3RhdGljIHBlcm1pc3Npb25zKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IFBlcm1pc3Npb25zKGF0dHJzKTsKICB9CiAgc3RhdGljIHBpY2tUcmF5QnlQREZTaXplKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IFBpY2tUcmF5QnlQREZTaXplKGF0dHJzKTsKICB9CiAgc3RhdGljIHBpY3R1cmUoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgY29uZmlnX1BpY3R1cmUoYXR0cnMpOwogIH0KICBzdGF0aWMgcGxhaW50ZXh0TWV0YWRhdGEoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgUGxhaW50ZXh0TWV0YWRhdGEoYXR0cnMpOwogIH0KICBzdGF0aWMgcHJlc2VuY2UoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgUHJlc2VuY2UoYXR0cnMpOwogIH0KICBzdGF0aWMgcHJlc2VudChhdHRycykgewogICAgcmV0dXJuIG5ldyBQcmVzZW50KGF0dHJzKTsKICB9CiAgc3RhdGljIHByaW50KGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IFByaW50KGF0dHJzKTsKICB9CiAgc3RhdGljIHByaW50SGlnaFF1YWxpdHkoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgUHJpbnRIaWdoUXVhbGl0eShhdHRycyk7CiAgfQogIHN0YXRpYyBwcmludFNjYWxpbmcoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgUHJpbnRTY2FsaW5nKGF0dHJzKTsKICB9CiAgc3RhdGljIHByaW50ZXJOYW1lKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IFByaW50ZXJOYW1lKGF0dHJzKTsKICB9CiAgc3RhdGljIHByb2R1Y2VyKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IFByb2R1Y2VyKGF0dHJzKTsKICB9CiAgc3RhdGljIHBzKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IFBzKGF0dHJzKTsKICB9CiAgc3RhdGljIHJhbmdlKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IFJhbmdlKGF0dHJzKTsKICB9CiAgc3RhdGljIHJlY29yZChhdHRycykgewogICAgcmV0dXJuIG5ldyBSZWNvcmQoYXR0cnMpOwogIH0KICBzdGF0aWMgcmVsZXZhbnQoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgUmVsZXZhbnQoYXR0cnMpOwogIH0KICBzdGF0aWMgcmVuYW1lKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IFJlbmFtZShhdHRycyk7CiAgfQogIHN0YXRpYyByZW5kZXJQb2xpY3koYXR0cnMpIHsKICAgIHJldHVybiBuZXcgUmVuZGVyUG9saWN5KGF0dHJzKTsKICB9CiAgc3RhdGljIHJ1blNjcmlwdHMoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgUnVuU2NyaXB0cyhhdHRycyk7CiAgfQogIHN0YXRpYyBzY3JpcHQoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgY29uZmlnX1NjcmlwdChhdHRycyk7CiAgfQogIHN0YXRpYyBzY3JpcHRNb2RlbChhdHRycykgewogICAgcmV0dXJuIG5ldyBTY3JpcHRNb2RlbChhdHRycyk7CiAgfQogIHN0YXRpYyBzZXZlcml0eShhdHRycykgewogICAgcmV0dXJuIG5ldyBTZXZlcml0eShhdHRycyk7CiAgfQogIHN0YXRpYyBzaWxlbnRQcmludChhdHRycykgewogICAgcmV0dXJuIG5ldyBTaWxlbnRQcmludChhdHRycyk7CiAgfQogIHN0YXRpYyBzdGFwbGUoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgU3RhcGxlKGF0dHJzKTsKICB9CiAgc3RhdGljIHN0YXJ0Tm9kZShhdHRycykgewogICAgcmV0dXJuIG5ldyBTdGFydE5vZGUoYXR0cnMpOwogIH0KICBzdGF0aWMgc3RhcnRQYWdlKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IFN0YXJ0UGFnZShhdHRycyk7CiAgfQogIHN0YXRpYyBzdWJtaXRGb3JtYXQoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgU3VibWl0Rm9ybWF0KGF0dHJzKTsKICB9CiAgc3RhdGljIHN1Ym1pdFVybChhdHRycykgewogICAgcmV0dXJuIG5ldyBTdWJtaXRVcmwoYXR0cnMpOwogIH0KICBzdGF0aWMgc3Vic2V0QmVsb3coYXR0cnMpIHsKICAgIHJldHVybiBuZXcgU3Vic2V0QmVsb3coYXR0cnMpOwogIH0KICBzdGF0aWMgc3VwcHJlc3NCYW5uZXIoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgU3VwcHJlc3NCYW5uZXIoYXR0cnMpOwogIH0KICBzdGF0aWMgdGFnZ2VkKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IFRhZ2dlZChhdHRycyk7CiAgfQogIHN0YXRpYyB0ZW1wbGF0ZShhdHRycykgewogICAgcmV0dXJuIG5ldyBjb25maWdfVGVtcGxhdGUoYXR0cnMpOwogIH0KICBzdGF0aWMgdGVtcGxhdGVDYWNoZShhdHRycykgewogICAgcmV0dXJuIG5ldyBUZW1wbGF0ZUNhY2hlKGF0dHJzKTsKICB9CiAgc3RhdGljIHRocmVzaG9sZChhdHRycykgewogICAgcmV0dXJuIG5ldyBUaHJlc2hvbGQoYXR0cnMpOwogIH0KICBzdGF0aWMgdG8oYXR0cnMpIHsKICAgIHJldHVybiBuZXcgVG8oYXR0cnMpOwogIH0KICBzdGF0aWMgdHJhY2UoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgVHJhY2UoYXR0cnMpOwogIH0KICBzdGF0aWMgdHJhbnNmb3JtKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IFRyYW5zZm9ybShhdHRycyk7CiAgfQogIHN0YXRpYyB0eXBlKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IFR5cGUoYXR0cnMpOwogIH0KICBzdGF0aWMgdXJpKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IFVyaShhdHRycyk7CiAgfQogIHN0YXRpYyB2YWxpZGF0ZShhdHRycykgewogICAgcmV0dXJuIG5ldyBjb25maWdfVmFsaWRhdGUoYXR0cnMpOwogIH0KICBzdGF0aWMgdmFsaWRhdGVBcHByb3ZhbFNpZ25hdHVyZXMoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgVmFsaWRhdGVBcHByb3ZhbFNpZ25hdHVyZXMoYXR0cnMpOwogIH0KICBzdGF0aWMgdmFsaWRhdGlvbk1lc3NhZ2luZyhhdHRycykgewogICAgcmV0dXJuIG5ldyBWYWxpZGF0aW9uTWVzc2FnaW5nKGF0dHJzKTsKICB9CiAgc3RhdGljIHZlcnNpb24oYXR0cnMpIHsKICAgIHJldHVybiBuZXcgVmVyc2lvbihhdHRycyk7CiAgfQogIHN0YXRpYyB2ZXJzaW9uQ29udHJvbChhdHRycykgewogICAgcmV0dXJuIG5ldyBWZXJzaW9uQ29udHJvbChhdHRycyk7CiAgfQogIHN0YXRpYyB2aWV3ZXJQcmVmZXJlbmNlcyhhdHRycykgewogICAgcmV0dXJuIG5ldyBWaWV3ZXJQcmVmZXJlbmNlcyhhdHRycyk7CiAgfQogIHN0YXRpYyB3ZWJDbGllbnQoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgV2ViQ2xpZW50KGF0dHJzKTsKICB9CiAgc3RhdGljIHdoaXRlc3BhY2UoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgV2hpdGVzcGFjZShhdHRycyk7CiAgfQogIHN0YXRpYyB3aW5kb3coYXR0cnMpIHsKICAgIHJldHVybiBuZXcgV2luZG93KGF0dHJzKTsKICB9CiAgc3RhdGljIHhkYyhhdHRycykgewogICAgcmV0dXJuIG5ldyBYZGMoYXR0cnMpOwogIH0KICBzdGF0aWMgeGRwKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IFhkcChhdHRycyk7CiAgfQogIHN0YXRpYyB4c2woYXR0cnMpIHsKICAgIHJldHVybiBuZXcgWHNsKGF0dHJzKTsKICB9CiAgc3RhdGljIHpwbChhdHRycykgewogICAgcmV0dXJuIG5ldyBacGwoYXR0cnMpOwogIH0KfQoKOy8vIC4vc3JjL2NvcmUveGZhL2Nvbm5lY3Rpb25fc2V0LmpzCgoKY29uc3QgQ09OTkVDVElPTl9TRVRfTlNfSUQgPSBOYW1lc3BhY2VJZHMuY29ubmVjdGlvblNldC5pZDsKY2xhc3MgQ29ubmVjdGlvblNldCBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09OTkVDVElPTl9TRVRfTlNfSUQsICJjb25uZWN0aW9uU2V0IiwgdHJ1ZSk7CiAgICB0aGlzLndzZGxDb25uZWN0aW9uID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgICB0aGlzLnhtbENvbm5lY3Rpb24gPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMueHNkQ29ubmVjdGlvbiA9IG5ldyBYRkFPYmplY3RBcnJheSgpOwogIH0KfQpjbGFzcyBFZmZlY3RpdmVJbnB1dFBvbGljeSBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09OTkVDVElPTl9TRVRfTlNfSUQsICJlZmZlY3RpdmVJbnB1dFBvbGljeSIpOwogICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgIiI7CiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgIiI7CiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8ICIiOwogICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8ICIiOwogIH0KfQpjbGFzcyBFZmZlY3RpdmVPdXRwdXRQb2xpY3kgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTk5FQ1RJT05fU0VUX05TX0lELCAiZWZmZWN0aXZlT3V0cHV0UG9saWN5Iik7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8fCAiIjsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgfQp9CmNsYXNzIE9wZXJhdGlvbiBleHRlbmRzIFN0cmluZ09iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09OTkVDVElPTl9TRVRfTlNfSUQsICJvcGVyYXRpb24iKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy5pbnB1dCA9IGF0dHJpYnV0ZXMuaW5wdXQgfHwgIiI7CiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgIiI7CiAgICB0aGlzLm91dHB1dCA9IGF0dHJpYnV0ZXMub3V0cHV0IHx8ICIiOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICB9Cn0KY2xhc3MgUm9vdEVsZW1lbnQgZXh0ZW5kcyBTdHJpbmdPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTk5FQ1RJT05fU0VUX05TX0lELCAicm9vdEVsZW1lbnQiKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8ICIiOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICB9Cn0KY2xhc3MgU29hcEFjdGlvbiBleHRlbmRzIFN0cmluZ09iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09OTkVDVElPTl9TRVRfTlNfSUQsICJzb2FwQWN0aW9uIik7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8fCAiIjsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgfQp9CmNsYXNzIFNvYXBBZGRyZXNzIGV4dGVuZHMgU3RyaW5nT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05ORUNUSU9OX1NFVF9OU19JRCwgInNvYXBBZGRyZXNzIik7CiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCAiIjsKICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8fCAiIjsKICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgIiI7CiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgIiI7CiAgfQp9CmNsYXNzIGNvbm5lY3Rpb25fc2V0X1VyaSBleHRlbmRzIFN0cmluZ09iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoQ09OTkVDVElPTl9TRVRfTlNfSUQsICJ1cmkiKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8ICIiOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICB9Cn0KY2xhc3MgV3NkbEFkZHJlc3MgZXh0ZW5kcyBTdHJpbmdPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTk5FQ1RJT05fU0VUX05TX0lELCAid3NkbEFkZHJlc3MiKTsKICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8ICIiOwogICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8ICIiOwogICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCAiIjsKICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCAiIjsKICB9Cn0KY2xhc3MgV3NkbENvbm5lY3Rpb24gZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTk5FQ1RJT05fU0VUX05TX0lELCAid3NkbENvbm5lY3Rpb24iLCB0cnVlKTsKICAgIHRoaXMuZGF0YURlc2NyaXB0aW9uID0gYXR0cmlidXRlcy5kYXRhRGVzY3JpcHRpb24gfHwgIiI7CiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgIiI7CiAgICB0aGlzLmVmZmVjdGl2ZUlucHV0UG9saWN5ID0gbnVsbDsKICAgIHRoaXMuZWZmZWN0aXZlT3V0cHV0UG9saWN5ID0gbnVsbDsKICAgIHRoaXMub3BlcmF0aW9uID0gbnVsbDsKICAgIHRoaXMuc29hcEFjdGlvbiA9IG51bGw7CiAgICB0aGlzLnNvYXBBZGRyZXNzID0gbnVsbDsKICAgIHRoaXMud3NkbEFkZHJlc3MgPSBudWxsOwogIH0KfQpjbGFzcyBYbWxDb25uZWN0aW9uIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihDT05ORUNUSU9OX1NFVF9OU19JRCwgInhtbENvbm5lY3Rpb24iLCB0cnVlKTsKICAgIHRoaXMuZGF0YURlc2NyaXB0aW9uID0gYXR0cmlidXRlcy5kYXRhRGVzY3JpcHRpb24gfHwgIiI7CiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgIiI7CiAgICB0aGlzLnVyaSA9IG51bGw7CiAgfQp9CmNsYXNzIFhzZENvbm5lY3Rpb24gZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKENPTk5FQ1RJT05fU0VUX05TX0lELCAieHNkQ29ubmVjdGlvbiIsIHRydWUpOwogICAgdGhpcy5kYXRhRGVzY3JpcHRpb24gPSBhdHRyaWJ1dGVzLmRhdGFEZXNjcmlwdGlvbiB8fCAiIjsKICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8fCAiIjsKICAgIHRoaXMucm9vdEVsZW1lbnQgPSBudWxsOwogICAgdGhpcy51cmkgPSBudWxsOwogIH0KfQpjbGFzcyBDb25uZWN0aW9uU2V0TmFtZXNwYWNlIHsKICBzdGF0aWMgWyRidWlsZFhGQU9iamVjdF0obmFtZSwgYXR0cmlidXRlcykgewogICAgaWYgKENvbm5lY3Rpb25TZXROYW1lc3BhY2UuaGFzT3duUHJvcGVydHkobmFtZSkpIHsKICAgICAgcmV0dXJuIENvbm5lY3Rpb25TZXROYW1lc3BhY2VbbmFtZV0oYXR0cmlidXRlcyk7CiAgICB9CiAgICByZXR1cm4gdW5kZWZpbmVkOwogIH0KICBzdGF0aWMgY29ubmVjdGlvblNldChhdHRycykgewogICAgcmV0dXJuIG5ldyBDb25uZWN0aW9uU2V0KGF0dHJzKTsKICB9CiAgc3RhdGljIGVmZmVjdGl2ZUlucHV0UG9saWN5KGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IEVmZmVjdGl2ZUlucHV0UG9saWN5KGF0dHJzKTsKICB9CiAgc3RhdGljIGVmZmVjdGl2ZU91dHB1dFBvbGljeShhdHRycykgewogICAgcmV0dXJuIG5ldyBFZmZlY3RpdmVPdXRwdXRQb2xpY3koYXR0cnMpOwogIH0KICBzdGF0aWMgb3BlcmF0aW9uKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IE9wZXJhdGlvbihhdHRycyk7CiAgfQogIHN0YXRpYyByb290RWxlbWVudChhdHRycykgewogICAgcmV0dXJuIG5ldyBSb290RWxlbWVudChhdHRycyk7CiAgfQogIHN0YXRpYyBzb2FwQWN0aW9uKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IFNvYXBBY3Rpb24oYXR0cnMpOwogIH0KICBzdGF0aWMgc29hcEFkZHJlc3MoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgU29hcEFkZHJlc3MoYXR0cnMpOwogIH0KICBzdGF0aWMgdXJpKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IGNvbm5lY3Rpb25fc2V0X1VyaShhdHRycyk7CiAgfQogIHN0YXRpYyB3c2RsQWRkcmVzcyhhdHRycykgewogICAgcmV0dXJuIG5ldyBXc2RsQWRkcmVzcyhhdHRycyk7CiAgfQogIHN0YXRpYyB3c2RsQ29ubmVjdGlvbihhdHRycykgewogICAgcmV0dXJuIG5ldyBXc2RsQ29ubmVjdGlvbihhdHRycyk7CiAgfQogIHN0YXRpYyB4bWxDb25uZWN0aW9uKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IFhtbENvbm5lY3Rpb24oYXR0cnMpOwogIH0KICBzdGF0aWMgeHNkQ29ubmVjdGlvbihhdHRycykgewogICAgcmV0dXJuIG5ldyBYc2RDb25uZWN0aW9uKGF0dHJzKTsKICB9Cn0KCjsvLyAuL3NyYy9jb3JlL3hmYS9kYXRhc2V0cy5qcwoKCgpjb25zdCBEQVRBU0VUU19OU19JRCA9IE5hbWVzcGFjZUlkcy5kYXRhc2V0cy5pZDsKY2xhc3MgZGF0YXNldHNfRGF0YSBleHRlbmRzIFhtbE9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoREFUQVNFVFNfTlNfSUQsICJkYXRhIiwgYXR0cmlidXRlcyk7CiAgfQogIFskaXNOc0Fnbm9zdGljXSgpIHsKICAgIHJldHVybiB0cnVlOwogIH0KfQpjbGFzcyBEYXRhc2V0cyBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoREFUQVNFVFNfTlNfSUQsICJkYXRhc2V0cyIsIHRydWUpOwogICAgdGhpcy5kYXRhID0gbnVsbDsKICAgIHRoaXMuU2lnbmF0dXJlID0gbnVsbDsKICB9CiAgWyRvbkNoaWxkXShjaGlsZCkgewogICAgY29uc3QgbmFtZSA9IGNoaWxkWyRub2RlTmFtZV07CiAgICBpZiAobmFtZSA9PT0gImRhdGEiICYmIGNoaWxkWyRuYW1lc3BhY2VJZF0gPT09IERBVEFTRVRTX05TX0lEIHx8IG5hbWUgPT09ICJTaWduYXR1cmUiICYmIGNoaWxkWyRuYW1lc3BhY2VJZF0gPT09IE5hbWVzcGFjZUlkcy5zaWduYXR1cmUuaWQpIHsKICAgICAgdGhpc1tuYW1lXSA9IGNoaWxkOwogICAgfQogICAgdGhpc1skYXBwZW5kQ2hpbGRdKGNoaWxkKTsKICB9Cn0KY2xhc3MgRGF0YXNldHNOYW1lc3BhY2UgewogIHN0YXRpYyBbJGJ1aWxkWEZBT2JqZWN0XShuYW1lLCBhdHRyaWJ1dGVzKSB7CiAgICBpZiAoRGF0YXNldHNOYW1lc3BhY2UuaGFzT3duUHJvcGVydHkobmFtZSkpIHsKICAgICAgcmV0dXJuIERhdGFzZXRzTmFtZXNwYWNlW25hbWVdKGF0dHJpYnV0ZXMpOwogICAgfQogICAgcmV0dXJuIHVuZGVmaW5lZDsKICB9CiAgc3RhdGljIGRhdGFzZXRzKGF0dHJpYnV0ZXMpIHsKICAgIHJldHVybiBuZXcgRGF0YXNldHMoYXR0cmlidXRlcyk7CiAgfQogIHN0YXRpYyBkYXRhKGF0dHJpYnV0ZXMpIHsKICAgIHJldHVybiBuZXcgZGF0YXNldHNfRGF0YShhdHRyaWJ1dGVzKTsKICB9Cn0KCjsvLyAuL3NyYy9jb3JlL3hmYS9sb2NhbGVfc2V0LmpzCgoKCmNvbnN0IExPQ0FMRV9TRVRfTlNfSUQgPSBOYW1lc3BhY2VJZHMubG9jYWxlU2V0LmlkOwpjbGFzcyBDYWxlbmRhclN5bWJvbHMgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKExPQ0FMRV9TRVRfTlNfSUQsICJjYWxlbmRhclN5bWJvbHMiLCB0cnVlKTsKICAgIHRoaXMubmFtZSA9ICJncmVnb3JpYW4iOwogICAgdGhpcy5kYXlOYW1lcyA9IG5ldyBYRkFPYmplY3RBcnJheSgyKTsKICAgIHRoaXMuZXJhTmFtZXMgPSBudWxsOwogICAgdGhpcy5tZXJpZGllbU5hbWVzID0gbnVsbDsKICAgIHRoaXMubW9udGhOYW1lcyA9IG5ldyBYRkFPYmplY3RBcnJheSgyKTsKICB9Cn0KY2xhc3MgQ3VycmVuY3lTeW1ib2wgZXh0ZW5kcyBTdHJpbmdPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKExPQ0FMRV9TRVRfTlNfSUQsICJjdXJyZW5jeVN5bWJvbCIpOwogICAgdGhpcy5uYW1lID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMubmFtZSwgWyJzeW1ib2wiLCAiaXNvbmFtZSIsICJkZWNpbWFsIl0pOwogIH0KfQpjbGFzcyBDdXJyZW5jeVN5bWJvbHMgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKExPQ0FMRV9TRVRfTlNfSUQsICJjdXJyZW5jeVN5bWJvbHMiLCB0cnVlKTsKICAgIHRoaXMuY3VycmVuY3lTeW1ib2wgPSBuZXcgWEZBT2JqZWN0QXJyYXkoMyk7CiAgfQp9CmNsYXNzIERhdGVQYXR0ZXJuIGV4dGVuZHMgU3RyaW5nT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihMT0NBTEVfU0VUX05TX0lELCAiZGF0ZVBhdHRlcm4iKTsKICAgIHRoaXMubmFtZSA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLm5hbWUsIFsiZnVsbCIsICJsb25nIiwgIm1lZCIsICJzaG9ydCJdKTsKICB9Cn0KY2xhc3MgRGF0ZVBhdHRlcm5zIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihMT0NBTEVfU0VUX05TX0lELCAiZGF0ZVBhdHRlcm5zIiwgdHJ1ZSk7CiAgICB0aGlzLmRhdGVQYXR0ZXJuID0gbmV3IFhGQU9iamVjdEFycmF5KDQpOwogIH0KfQpjbGFzcyBEYXRlVGltZVN5bWJvbHMgZXh0ZW5kcyBDb250ZW50T2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihMT0NBTEVfU0VUX05TX0lELCAiZGF0ZVRpbWVTeW1ib2xzIik7CiAgfQp9CmNsYXNzIERheSBleHRlbmRzIFN0cmluZ09iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoTE9DQUxFX1NFVF9OU19JRCwgImRheSIpOwogIH0KfQpjbGFzcyBEYXlOYW1lcyBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoTE9DQUxFX1NFVF9OU19JRCwgImRheU5hbWVzIiwgdHJ1ZSk7CiAgICB0aGlzLmFiYnIgPSBnZXRJbnRlZ2VyKHsKICAgICAgZGF0YTogYXR0cmlidXRlcy5hYmJyLAogICAgICBkZWZhdWx0VmFsdWU6IDAsCiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPT09IDEKICAgIH0pOwogICAgdGhpcy5kYXkgPSBuZXcgWEZBT2JqZWN0QXJyYXkoNyk7CiAgfQp9CmNsYXNzIEVyYSBleHRlbmRzIFN0cmluZ09iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoTE9DQUxFX1NFVF9OU19JRCwgImVyYSIpOwogIH0KfQpjbGFzcyBFcmFOYW1lcyBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoTE9DQUxFX1NFVF9OU19JRCwgImVyYU5hbWVzIiwgdHJ1ZSk7CiAgICB0aGlzLmVyYSA9IG5ldyBYRkFPYmplY3RBcnJheSgyKTsKICB9Cn0KY2xhc3MgbG9jYWxlX3NldF9Mb2NhbGUgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKExPQ0FMRV9TRVRfTlNfSUQsICJsb2NhbGUiLCB0cnVlKTsKICAgIHRoaXMuZGVzYyA9IGF0dHJpYnV0ZXMuZGVzYyB8fCAiIjsKICAgIHRoaXMubmFtZSA9ICJpc29uYW1lIjsKICAgIHRoaXMuY2FsZW5kYXJTeW1ib2xzID0gbnVsbDsKICAgIHRoaXMuY3VycmVuY3lTeW1ib2xzID0gbnVsbDsKICAgIHRoaXMuZGF0ZVBhdHRlcm5zID0gbnVsbDsKICAgIHRoaXMuZGF0ZVRpbWVTeW1ib2xzID0gbnVsbDsKICAgIHRoaXMubnVtYmVyUGF0dGVybnMgPSBudWxsOwogICAgdGhpcy5udW1iZXJTeW1ib2xzID0gbnVsbDsKICAgIHRoaXMudGltZVBhdHRlcm5zID0gbnVsbDsKICAgIHRoaXMudHlwZUZhY2VzID0gbnVsbDsKICB9Cn0KY2xhc3MgbG9jYWxlX3NldF9Mb2NhbGVTZXQgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKExPQ0FMRV9TRVRfTlNfSUQsICJsb2NhbGVTZXQiLCB0cnVlKTsKICAgIHRoaXMubG9jYWxlID0gbmV3IFhGQU9iamVjdEFycmF5KCk7CiAgfQp9CmNsYXNzIE1lcmlkaWVtIGV4dGVuZHMgU3RyaW5nT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihMT0NBTEVfU0VUX05TX0lELCAibWVyaWRpZW0iKTsKICB9Cn0KY2xhc3MgTWVyaWRpZW1OYW1lcyBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoTE9DQUxFX1NFVF9OU19JRCwgIm1lcmlkaWVtTmFtZXMiLCB0cnVlKTsKICAgIHRoaXMubWVyaWRpZW0gPSBuZXcgWEZBT2JqZWN0QXJyYXkoMik7CiAgfQp9CmNsYXNzIE1vbnRoIGV4dGVuZHMgU3RyaW5nT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihMT0NBTEVfU0VUX05TX0lELCAibW9udGgiKTsKICB9Cn0KY2xhc3MgTW9udGhOYW1lcyBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoTE9DQUxFX1NFVF9OU19JRCwgIm1vbnRoTmFtZXMiLCB0cnVlKTsKICAgIHRoaXMuYWJiciA9IGdldEludGVnZXIoewogICAgICBkYXRhOiBhdHRyaWJ1dGVzLmFiYnIsCiAgICAgIGRlZmF1bHRWYWx1ZTogMCwKICAgICAgdmFsaWRhdGU6IHggPT4geCA9PT0gMQogICAgfSk7CiAgICB0aGlzLm1vbnRoID0gbmV3IFhGQU9iamVjdEFycmF5KDEyKTsKICB9Cn0KY2xhc3MgTnVtYmVyUGF0dGVybiBleHRlbmRzIFN0cmluZ09iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoTE9DQUxFX1NFVF9OU19JRCwgIm51bWJlclBhdHRlcm4iKTsKICAgIHRoaXMubmFtZSA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLm5hbWUsIFsiZnVsbCIsICJsb25nIiwgIm1lZCIsICJzaG9ydCJdKTsKICB9Cn0KY2xhc3MgTnVtYmVyUGF0dGVybnMgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKExPQ0FMRV9TRVRfTlNfSUQsICJudW1iZXJQYXR0ZXJucyIsIHRydWUpOwogICAgdGhpcy5udW1iZXJQYXR0ZXJuID0gbmV3IFhGQU9iamVjdEFycmF5KDQpOwogIH0KfQpjbGFzcyBOdW1iZXJTeW1ib2wgZXh0ZW5kcyBTdHJpbmdPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKExPQ0FMRV9TRVRfTlNfSUQsICJudW1iZXJTeW1ib2wiKTsKICAgIHRoaXMubmFtZSA9IGdldFN0cmluZ09wdGlvbihhdHRyaWJ1dGVzLm5hbWUsIFsiZGVjaW1hbCIsICJncm91cGluZyIsICJwZXJjZW50IiwgIm1pbnVzIiwgInplcm8iXSk7CiAgfQp9CmNsYXNzIE51bWJlclN5bWJvbHMgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKExPQ0FMRV9TRVRfTlNfSUQsICJudW1iZXJTeW1ib2xzIiwgdHJ1ZSk7CiAgICB0aGlzLm51bWJlclN5bWJvbCA9IG5ldyBYRkFPYmplY3RBcnJheSg1KTsKICB9Cn0KY2xhc3MgVGltZVBhdHRlcm4gZXh0ZW5kcyBTdHJpbmdPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKExPQ0FMRV9TRVRfTlNfSUQsICJ0aW1lUGF0dGVybiIpOwogICAgdGhpcy5uYW1lID0gZ2V0U3RyaW5nT3B0aW9uKGF0dHJpYnV0ZXMubmFtZSwgWyJmdWxsIiwgImxvbmciLCAibWVkIiwgInNob3J0Il0pOwogIH0KfQpjbGFzcyBUaW1lUGF0dGVybnMgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKExPQ0FMRV9TRVRfTlNfSUQsICJ0aW1lUGF0dGVybnMiLCB0cnVlKTsKICAgIHRoaXMudGltZVBhdHRlcm4gPSBuZXcgWEZBT2JqZWN0QXJyYXkoNCk7CiAgfQp9CmNsYXNzIFR5cGVGYWNlIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihMT0NBTEVfU0VUX05TX0lELCAidHlwZUZhY2UiLCB0cnVlKTsKICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8ICIiOwogIH0KfQpjbGFzcyBUeXBlRmFjZXMgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKExPQ0FMRV9TRVRfTlNfSUQsICJ0eXBlRmFjZXMiLCB0cnVlKTsKICAgIHRoaXMudHlwZUZhY2UgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICB9Cn0KY2xhc3MgTG9jYWxlU2V0TmFtZXNwYWNlIHsKICBzdGF0aWMgWyRidWlsZFhGQU9iamVjdF0obmFtZSwgYXR0cmlidXRlcykgewogICAgaWYgKExvY2FsZVNldE5hbWVzcGFjZS5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgewogICAgICByZXR1cm4gTG9jYWxlU2V0TmFtZXNwYWNlW25hbWVdKGF0dHJpYnV0ZXMpOwogICAgfQogICAgcmV0dXJuIHVuZGVmaW5lZDsKICB9CiAgc3RhdGljIGNhbGVuZGFyU3ltYm9scyhhdHRycykgewogICAgcmV0dXJuIG5ldyBDYWxlbmRhclN5bWJvbHMoYXR0cnMpOwogIH0KICBzdGF0aWMgY3VycmVuY3lTeW1ib2woYXR0cnMpIHsKICAgIHJldHVybiBuZXcgQ3VycmVuY3lTeW1ib2woYXR0cnMpOwogIH0KICBzdGF0aWMgY3VycmVuY3lTeW1ib2xzKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IEN1cnJlbmN5U3ltYm9scyhhdHRycyk7CiAgfQogIHN0YXRpYyBkYXRlUGF0dGVybihhdHRycykgewogICAgcmV0dXJuIG5ldyBEYXRlUGF0dGVybihhdHRycyk7CiAgfQogIHN0YXRpYyBkYXRlUGF0dGVybnMoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgRGF0ZVBhdHRlcm5zKGF0dHJzKTsKICB9CiAgc3RhdGljIGRhdGVUaW1lU3ltYm9scyhhdHRycykgewogICAgcmV0dXJuIG5ldyBEYXRlVGltZVN5bWJvbHMoYXR0cnMpOwogIH0KICBzdGF0aWMgZGF5KGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IERheShhdHRycyk7CiAgfQogIHN0YXRpYyBkYXlOYW1lcyhhdHRycykgewogICAgcmV0dXJuIG5ldyBEYXlOYW1lcyhhdHRycyk7CiAgfQogIHN0YXRpYyBlcmEoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgRXJhKGF0dHJzKTsKICB9CiAgc3RhdGljIGVyYU5hbWVzKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IEVyYU5hbWVzKGF0dHJzKTsKICB9CiAgc3RhdGljIGxvY2FsZShhdHRycykgewogICAgcmV0dXJuIG5ldyBsb2NhbGVfc2V0X0xvY2FsZShhdHRycyk7CiAgfQogIHN0YXRpYyBsb2NhbGVTZXQoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgbG9jYWxlX3NldF9Mb2NhbGVTZXQoYXR0cnMpOwogIH0KICBzdGF0aWMgbWVyaWRpZW0oYXR0cnMpIHsKICAgIHJldHVybiBuZXcgTWVyaWRpZW0oYXR0cnMpOwogIH0KICBzdGF0aWMgbWVyaWRpZW1OYW1lcyhhdHRycykgewogICAgcmV0dXJuIG5ldyBNZXJpZGllbU5hbWVzKGF0dHJzKTsKICB9CiAgc3RhdGljIG1vbnRoKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IE1vbnRoKGF0dHJzKTsKICB9CiAgc3RhdGljIG1vbnRoTmFtZXMoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgTW9udGhOYW1lcyhhdHRycyk7CiAgfQogIHN0YXRpYyBudW1iZXJQYXR0ZXJuKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IE51bWJlclBhdHRlcm4oYXR0cnMpOwogIH0KICBzdGF0aWMgbnVtYmVyUGF0dGVybnMoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgTnVtYmVyUGF0dGVybnMoYXR0cnMpOwogIH0KICBzdGF0aWMgbnVtYmVyU3ltYm9sKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IE51bWJlclN5bWJvbChhdHRycyk7CiAgfQogIHN0YXRpYyBudW1iZXJTeW1ib2xzKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IE51bWJlclN5bWJvbHMoYXR0cnMpOwogIH0KICBzdGF0aWMgdGltZVBhdHRlcm4oYXR0cnMpIHsKICAgIHJldHVybiBuZXcgVGltZVBhdHRlcm4oYXR0cnMpOwogIH0KICBzdGF0aWMgdGltZVBhdHRlcm5zKGF0dHJzKSB7CiAgICByZXR1cm4gbmV3IFRpbWVQYXR0ZXJucyhhdHRycyk7CiAgfQogIHN0YXRpYyB0eXBlRmFjZShhdHRycykgewogICAgcmV0dXJuIG5ldyBUeXBlRmFjZShhdHRycyk7CiAgfQogIHN0YXRpYyB0eXBlRmFjZXMoYXR0cnMpIHsKICAgIHJldHVybiBuZXcgVHlwZUZhY2VzKGF0dHJzKTsKICB9Cn0KCjsvLyAuL3NyYy9jb3JlL3hmYS9zaWduYXR1cmUuanMKCgpjb25zdCBTSUdOQVRVUkVfTlNfSUQgPSBOYW1lc3BhY2VJZHMuc2lnbmF0dXJlLmlkOwpjbGFzcyBzaWduYXR1cmVfU2lnbmF0dXJlIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihTSUdOQVRVUkVfTlNfSUQsICJzaWduYXR1cmUiLCB0cnVlKTsKICB9Cn0KY2xhc3MgU2lnbmF0dXJlTmFtZXNwYWNlIHsKICBzdGF0aWMgWyRidWlsZFhGQU9iamVjdF0obmFtZSwgYXR0cmlidXRlcykgewogICAgaWYgKFNpZ25hdHVyZU5hbWVzcGFjZS5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgewogICAgICByZXR1cm4gU2lnbmF0dXJlTmFtZXNwYWNlW25hbWVdKGF0dHJpYnV0ZXMpOwogICAgfQogICAgcmV0dXJuIHVuZGVmaW5lZDsKICB9CiAgc3RhdGljIHNpZ25hdHVyZShhdHRyaWJ1dGVzKSB7CiAgICByZXR1cm4gbmV3IHNpZ25hdHVyZV9TaWduYXR1cmUoYXR0cmlidXRlcyk7CiAgfQp9Cgo7Ly8gLi9zcmMvY29yZS94ZmEvc3R5bGVzaGVldC5qcwoKCmNvbnN0IFNUWUxFU0hFRVRfTlNfSUQgPSBOYW1lc3BhY2VJZHMuc3R5bGVzaGVldC5pZDsKY2xhc3MgU3R5bGVzaGVldCBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoU1RZTEVTSEVFVF9OU19JRCwgInN0eWxlc2hlZXQiLCB0cnVlKTsKICB9Cn0KY2xhc3MgU3R5bGVzaGVldE5hbWVzcGFjZSB7CiAgc3RhdGljIFskYnVpbGRYRkFPYmplY3RdKG5hbWUsIGF0dHJpYnV0ZXMpIHsKICAgIGlmIChTdHlsZXNoZWV0TmFtZXNwYWNlLmhhc093blByb3BlcnR5KG5hbWUpKSB7CiAgICAgIHJldHVybiBTdHlsZXNoZWV0TmFtZXNwYWNlW25hbWVdKGF0dHJpYnV0ZXMpOwogICAgfQogICAgcmV0dXJuIHVuZGVmaW5lZDsKICB9CiAgc3RhdGljIHN0eWxlc2hlZXQoYXR0cmlidXRlcykgewogICAgcmV0dXJuIG5ldyBTdHlsZXNoZWV0KGF0dHJpYnV0ZXMpOwogIH0KfQoKOy8vIC4vc3JjL2NvcmUveGZhL3hkcC5qcwoKCgpjb25zdCBYRFBfTlNfSUQgPSBOYW1lc3BhY2VJZHMueGRwLmlkOwpjbGFzcyB4ZHBfWGRwIGV4dGVuZHMgWEZBT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihYRFBfTlNfSUQsICJ4ZHAiLCB0cnVlKTsKICAgIHRoaXMudXVpZCA9IGF0dHJpYnV0ZXMudXVpZCB8fCAiIjsKICAgIHRoaXMudGltZVN0YW1wID0gYXR0cmlidXRlcy50aW1lU3RhbXAgfHwgIiI7CiAgICB0aGlzLmNvbmZpZyA9IG51bGw7CiAgICB0aGlzLmNvbm5lY3Rpb25TZXQgPSBudWxsOwogICAgdGhpcy5kYXRhc2V0cyA9IG51bGw7CiAgICB0aGlzLmxvY2FsZVNldCA9IG51bGw7CiAgICB0aGlzLnN0eWxlc2hlZXQgPSBuZXcgWEZBT2JqZWN0QXJyYXkoKTsKICAgIHRoaXMudGVtcGxhdGUgPSBudWxsOwogIH0KICBbJG9uQ2hpbGRDaGVja10oY2hpbGQpIHsKICAgIGNvbnN0IG5zID0gTmFtZXNwYWNlSWRzW2NoaWxkWyRub2RlTmFtZV1dOwogICAgcmV0dXJuIG5zICYmIGNoaWxkWyRuYW1lc3BhY2VJZF0gPT09IG5zLmlkOwogIH0KfQpjbGFzcyBYZHBOYW1lc3BhY2UgewogIHN0YXRpYyBbJGJ1aWxkWEZBT2JqZWN0XShuYW1lLCBhdHRyaWJ1dGVzKSB7CiAgICBpZiAoWGRwTmFtZXNwYWNlLmhhc093blByb3BlcnR5KG5hbWUpKSB7CiAgICAgIHJldHVybiBYZHBOYW1lc3BhY2VbbmFtZV0oYXR0cmlidXRlcyk7CiAgICB9CiAgICByZXR1cm4gdW5kZWZpbmVkOwogIH0KICBzdGF0aWMgeGRwKGF0dHJpYnV0ZXMpIHsKICAgIHJldHVybiBuZXcgeGRwX1hkcChhdHRyaWJ1dGVzKTsKICB9Cn0KCjsvLyAuL3NyYy9jb3JlL3hmYS94aHRtbC5qcwoKCgoKCmNvbnN0IFhIVE1MX05TX0lEID0gTmFtZXNwYWNlSWRzLnhodG1sLmlkOwpjb25zdCAkcmljaFRleHQgPSBTeW1ib2woKTsKY29uc3QgVkFMSURfU1RZTEVTID0gbmV3IFNldChbImNvbG9yIiwgImZvbnQiLCAiZm9udC1mYW1pbHkiLCAiZm9udC1zaXplIiwgImZvbnQtc3RyZXRjaCIsICJmb250LXN0eWxlIiwgImZvbnQtd2VpZ2h0IiwgIm1hcmdpbiIsICJtYXJnaW4tYm90dG9tIiwgIm1hcmdpbi1sZWZ0IiwgIm1hcmdpbi1yaWdodCIsICJtYXJnaW4tdG9wIiwgImxldHRlci1zcGFjaW5nIiwgImxpbmUtaGVpZ2h0IiwgIm9ycGhhbnMiLCAicGFnZS1icmVhay1hZnRlciIsICJwYWdlLWJyZWFrLWJlZm9yZSIsICJwYWdlLWJyZWFrLWluc2lkZSIsICJ0YWItaW50ZXJ2YWwiLCAidGFiLXN0b3AiLCAidGV4dC1hbGlnbiIsICJ0ZXh0LWRlY29yYXRpb24iLCAidGV4dC1pbmRlbnQiLCAidmVydGljYWwtYWxpZ24iLCAid2lkb3dzIiwgImtlcm5pbmctbW9kZSIsICJ4ZmEtZm9udC1ob3Jpem9udGFsLXNjYWxlIiwgInhmYS1mb250LXZlcnRpY2FsLXNjYWxlIiwgInhmYS1zcGFjZXJ1biIsICJ4ZmEtdGFiLXN0b3BzIl0pOwpjb25zdCBTdHlsZU1hcHBpbmcgPSBuZXcgTWFwKFtbInBhZ2UtYnJlYWstYWZ0ZXIiLCAiYnJlYWtBZnRlciJdLCBbInBhZ2UtYnJlYWstYmVmb3JlIiwgImJyZWFrQmVmb3JlIl0sIFsicGFnZS1icmVhay1pbnNpZGUiLCAiYnJlYWtJbnNpZGUiXSwgWyJrZXJuaW5nLW1vZGUiLCB2YWx1ZSA9PiB2YWx1ZSA9PT0gIm5vbmUiID8gIm5vbmUiIDogIm5vcm1hbCJdLCBbInhmYS1mb250LWhvcml6b250YWwtc2NhbGUiLCB2YWx1ZSA9PiBgc2NhbGVYKCR7TWF0aC5tYXgoMCwgcGFyc2VJbnQodmFsdWUpIC8gMTAwKS50b0ZpeGVkKDIpfSlgXSwgWyJ4ZmEtZm9udC12ZXJ0aWNhbC1zY2FsZSIsIHZhbHVlID0+IGBzY2FsZVkoJHtNYXRoLm1heCgwLCBwYXJzZUludCh2YWx1ZSkgLyAxMDApLnRvRml4ZWQoMil9KWBdLCBbInhmYS1zcGFjZXJ1biIsICIiXSwgWyJ4ZmEtdGFiLXN0b3BzIiwgIiJdLCBbImZvbnQtc2l6ZSIsICh2YWx1ZSwgb3JpZ2luYWwpID0+IHsKICB2YWx1ZSA9IG9yaWdpbmFsLmZvbnRTaXplID0gTWF0aC5hYnMoZ2V0TWVhc3VyZW1lbnQodmFsdWUpKTsKICByZXR1cm4gbWVhc3VyZVRvU3RyaW5nKDAuOTkgKiB2YWx1ZSk7Cn1dLCBbImxldHRlci1zcGFjaW5nIiwgdmFsdWUgPT4gbWVhc3VyZVRvU3RyaW5nKGdldE1lYXN1cmVtZW50KHZhbHVlKSldLCBbImxpbmUtaGVpZ2h0IiwgdmFsdWUgPT4gbWVhc3VyZVRvU3RyaW5nKGdldE1lYXN1cmVtZW50KHZhbHVlKSldLCBbIm1hcmdpbiIsIHZhbHVlID0+IG1lYXN1cmVUb1N0cmluZyhnZXRNZWFzdXJlbWVudCh2YWx1ZSkpXSwgWyJtYXJnaW4tYm90dG9tIiwgdmFsdWUgPT4gbWVhc3VyZVRvU3RyaW5nKGdldE1lYXN1cmVtZW50KHZhbHVlKSldLCBbIm1hcmdpbi1sZWZ0IiwgdmFsdWUgPT4gbWVhc3VyZVRvU3RyaW5nKGdldE1lYXN1cmVtZW50KHZhbHVlKSldLCBbIm1hcmdpbi1yaWdodCIsIHZhbHVlID0+IG1lYXN1cmVUb1N0cmluZyhnZXRNZWFzdXJlbWVudCh2YWx1ZSkpXSwgWyJtYXJnaW4tdG9wIiwgdmFsdWUgPT4gbWVhc3VyZVRvU3RyaW5nKGdldE1lYXN1cmVtZW50KHZhbHVlKSldLCBbInRleHQtaW5kZW50IiwgdmFsdWUgPT4gbWVhc3VyZVRvU3RyaW5nKGdldE1lYXN1cmVtZW50KHZhbHVlKSldLCBbImZvbnQtZmFtaWx5IiwgdmFsdWUgPT4gdmFsdWVdLCBbInZlcnRpY2FsLWFsaWduIiwgdmFsdWUgPT4gbWVhc3VyZVRvU3RyaW5nKGdldE1lYXN1cmVtZW50KHZhbHVlKSldXSk7CmNvbnN0IHNwYWNlc1JlZ0V4cCA9IC9ccysvZzsKY29uc3QgY3JsZlJlZ0V4cCA9IC9bXHJcbl0rL2c7CmNvbnN0IGNybGZGb3JSaWNoVGV4dFJlZ0V4cCA9IC9cclxuPy9nOwpmdW5jdGlvbiBtYXBTdHlsZShzdHlsZVN0ciwgbm9kZSwgcmljaFRleHQpIHsKICBjb25zdCBzdHlsZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgaWYgKCFzdHlsZVN0cikgewogICAgcmV0dXJuIHN0eWxlOwogIH0KICBjb25zdCBvcmlnaW5hbCA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2Ygc3R5bGVTdHIuc3BsaXQoIjsiKS5tYXAocyA9PiBzLnNwbGl0KCI6IiwgMikpKSB7CiAgICBjb25zdCBtYXBwaW5nID0gU3R5bGVNYXBwaW5nLmdldChrZXkpOwogICAgaWYgKG1hcHBpbmcgPT09ICIiKSB7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgbGV0IG5ld1ZhbHVlID0gdmFsdWU7CiAgICBpZiAobWFwcGluZykgewogICAgICBuZXdWYWx1ZSA9IHR5cGVvZiBtYXBwaW5nID09PSAic3RyaW5nIiA/IG1hcHBpbmcgOiBtYXBwaW5nKHZhbHVlLCBvcmlnaW5hbCk7CiAgICB9CiAgICBpZiAoa2V5LmVuZHNXaXRoKCJzY2FsZSIpKSB7CiAgICAgIHN0eWxlLnRyYW5zZm9ybSA9IHN0eWxlLnRyYW5zZm9ybSA/IGAke3N0eWxlW2tleV19ICR7bmV3VmFsdWV9YCA6IG5ld1ZhbHVlOwogICAgfSBlbHNlIHsKICAgICAgc3R5bGVba2V5LnJlcGxhY2VBbGwoLy0oW2EtekEtWl0pL2csIChfLCB4KSA9PiB4LnRvVXBwZXJDYXNlKCkpXSA9IG5ld1ZhbHVlOwogICAgfQogIH0KICBpZiAoc3R5bGUuZm9udEZhbWlseSkgewogICAgc2V0Rm9udEZhbWlseSh7CiAgICAgIHR5cGVmYWNlOiBzdHlsZS5mb250RmFtaWx5LAogICAgICB3ZWlnaHQ6IHN0eWxlLmZvbnRXZWlnaHQgfHwgIm5vcm1hbCIsCiAgICAgIHBvc3R1cmU6IHN0eWxlLmZvbnRTdHlsZSB8fCAibm9ybWFsIiwKICAgICAgc2l6ZTogb3JpZ2luYWwuZm9udFNpemUgfHwgMAogICAgfSwgbm9kZSwgbm9kZVskZ2xvYmFsRGF0YV0uZm9udEZpbmRlciwgc3R5bGUpOwogIH0KICBpZiAocmljaFRleHQgJiYgc3R5bGUudmVydGljYWxBbGlnbiAmJiBzdHlsZS52ZXJ0aWNhbEFsaWduICE9PSAiMHB4IiAmJiBzdHlsZS5mb250U2l6ZSkgewogICAgY29uc3QgU1VCX1NVUEVSX1NDUklQVF9GQUNUT1IgPSAwLjU4MzsKICAgIGNvbnN0IFZFUlRJQ0FMX0ZBQ1RPUiA9IDAuMzMzOwogICAgY29uc3QgZm9udFNpemUgPSBnZXRNZWFzdXJlbWVudChzdHlsZS5mb250U2l6ZSk7CiAgICBzdHlsZS5mb250U2l6ZSA9IG1lYXN1cmVUb1N0cmluZyhmb250U2l6ZSAqIFNVQl9TVVBFUl9TQ1JJUFRfRkFDVE9SKTsKICAgIHN0eWxlLnZlcnRpY2FsQWxpZ24gPSBtZWFzdXJlVG9TdHJpbmcoTWF0aC5zaWduKGdldE1lYXN1cmVtZW50KHN0eWxlLnZlcnRpY2FsQWxpZ24pKSAqIGZvbnRTaXplICogVkVSVElDQUxfRkFDVE9SKTsKICB9CiAgaWYgKHJpY2hUZXh0ICYmIHN0eWxlLmZvbnRTaXplKSB7CiAgICBzdHlsZS5mb250U2l6ZSA9IGBjYWxjKCR7c3R5bGUuZm9udFNpemV9ICogdmFyKC0tdG90YWwtc2NhbGUtZmFjdG9yKSlgOwogIH0KICBmaXhUZXh0SW5kZW50KHN0eWxlKTsKICByZXR1cm4gc3R5bGU7Cn0KZnVuY3Rpb24gY2hlY2tTdHlsZShub2RlKSB7CiAgaWYgKCFub2RlLnN0eWxlKSB7CiAgICByZXR1cm4gIiI7CiAgfQogIHJldHVybiBub2RlLnN0eWxlLnNwbGl0KCI7IikuZmlsdGVyKHMgPT4gISFzLnRyaW0oKSkubWFwKHMgPT4gcy5zcGxpdCgiOiIsIDIpLm1hcCh0ID0+IHQudHJpbSgpKSkuZmlsdGVyKChba2V5LCB2YWx1ZV0pID0+IHsKICAgIGlmIChrZXkgPT09ICJmb250LWZhbWlseSIpIHsKICAgICAgbm9kZVskZ2xvYmFsRGF0YV0udXNlZFR5cGVmYWNlcy5hZGQodmFsdWUpOwogICAgfQogICAgcmV0dXJuIFZBTElEX1NUWUxFUy5oYXMoa2V5KTsKICB9KS5tYXAoa3YgPT4ga3Yuam9pbigiOiIpKS5qb2luKCI7Iik7Cn0KY29uc3QgTm9XaGl0ZXMgPSBuZXcgU2V0KFsiYm9keSIsICJodG1sIl0pOwpjbGFzcyBYaHRtbE9iamVjdCBleHRlbmRzIFhtbE9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcywgbmFtZSkgewogICAgc3VwZXIoWEhUTUxfTlNfSUQsIG5hbWUpOwogICAgdGhpc1skcmljaFRleHRdID0gZmFsc2U7CiAgICB0aGlzLnN0eWxlID0gYXR0cmlidXRlcy5zdHlsZSB8fCAiIjsKICB9CiAgWyRjbGVhbl0oYnVpbGRlcikgewogICAgc3VwZXJbJGNsZWFuXShidWlsZGVyKTsKICAgIHRoaXMuc3R5bGUgPSBjaGVja1N0eWxlKHRoaXMpOwogIH0KICBbJGFjY2VwdFdoaXRlc3BhY2VdKCkgewogICAgcmV0dXJuICFOb1doaXRlcy5oYXModGhpc1skbm9kZU5hbWVdKTsKICB9CiAgWyRvblRleHRdKHN0ciwgcmljaFRleHQgPSBmYWxzZSkgewogICAgaWYgKCFyaWNoVGV4dCkgewogICAgICBzdHIgPSBzdHIucmVwbGFjZUFsbChjcmxmUmVnRXhwLCAiIik7CiAgICAgIGlmICghdGhpcy5zdHlsZS5pbmNsdWRlcygieGZhLXNwYWNlcnVuOnllcyIpKSB7CiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2VBbGwoc3BhY2VzUmVnRXhwLCAiICIpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB0aGlzWyRyaWNoVGV4dF0gPSB0cnVlOwogICAgfQogICAgaWYgKHN0cikgewogICAgICB0aGlzWyRjb250ZW50XSArPSBzdHI7CiAgICB9CiAgfQogIFskcHVzaEdseXBoc10obWVhc3VyZSwgbXVzdFBvcCA9IHRydWUpIHsKICAgIGNvbnN0IHhmYUZvbnQgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgY29uc3QgbWFyZ2luID0gewogICAgICB0b3A6IE5hTiwKICAgICAgYm90dG9tOiBOYU4sCiAgICAgIGxlZnQ6IE5hTiwKICAgICAgcmlnaHQ6IE5hTgogICAgfTsKICAgIGxldCBsaW5lSGVpZ2h0ID0gbnVsbDsKICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMuc3R5bGUuc3BsaXQoIjsiKS5tYXAocyA9PiBzLnNwbGl0KCI6IiwgMikpKSB7CiAgICAgIHN3aXRjaCAoa2V5KSB7CiAgICAgICAgY2FzZSAiZm9udC1mYW1pbHkiOgogICAgICAgICAgeGZhRm9udC50eXBlZmFjZSA9IHN0cmlwUXVvdGVzKHZhbHVlKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImZvbnQtc2l6ZSI6CiAgICAgICAgICB4ZmFGb250LnNpemUgPSBnZXRNZWFzdXJlbWVudCh2YWx1ZSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJmb250LXdlaWdodCI6CiAgICAgICAgICB4ZmFGb250LndlaWdodCA9IHZhbHVlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiZm9udC1zdHlsZSI6CiAgICAgICAgICB4ZmFGb250LnBvc3R1cmUgPSB2YWx1ZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImxldHRlci1zcGFjaW5nIjoKICAgICAgICAgIHhmYUZvbnQubGV0dGVyU3BhY2luZyA9IGdldE1lYXN1cmVtZW50KHZhbHVlKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIm1hcmdpbiI6CiAgICAgICAgICBjb25zdCB2YWx1ZXMgPSB2YWx1ZS5zcGxpdCgvIFx0LykubWFwKHggPT4gZ2V0TWVhc3VyZW1lbnQoeCkpOwogICAgICAgICAgc3dpdGNoICh2YWx1ZXMubGVuZ3RoKSB7CiAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICBtYXJnaW4udG9wID0gbWFyZ2luLmJvdHRvbSA9IG1hcmdpbi5sZWZ0ID0gbWFyZ2luLnJpZ2h0ID0gdmFsdWVzWzBdOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgbWFyZ2luLnRvcCA9IG1hcmdpbi5ib3R0b20gPSB2YWx1ZXNbMF07CiAgICAgICAgICAgICAgbWFyZ2luLmxlZnQgPSBtYXJnaW4ucmlnaHQgPSB2YWx1ZXNbMV07CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICBtYXJnaW4udG9wID0gdmFsdWVzWzBdOwogICAgICAgICAgICAgIG1hcmdpbi5ib3R0b20gPSB2YWx1ZXNbMl07CiAgICAgICAgICAgICAgbWFyZ2luLmxlZnQgPSBtYXJnaW4ucmlnaHQgPSB2YWx1ZXNbMV07CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICBtYXJnaW4udG9wID0gdmFsdWVzWzBdOwogICAgICAgICAgICAgIG1hcmdpbi5sZWZ0ID0gdmFsdWVzWzFdOwogICAgICAgICAgICAgIG1hcmdpbi5ib3R0b20gPSB2YWx1ZXNbMl07CiAgICAgICAgICAgICAgbWFyZ2luLnJpZ2h0ID0gdmFsdWVzWzNdOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAibWFyZ2luLXRvcCI6CiAgICAgICAgICBtYXJnaW4udG9wID0gZ2V0TWVhc3VyZW1lbnQodmFsdWUpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAibWFyZ2luLWJvdHRvbSI6CiAgICAgICAgICBtYXJnaW4uYm90dG9tID0gZ2V0TWVhc3VyZW1lbnQodmFsdWUpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAibWFyZ2luLWxlZnQiOgogICAgICAgICAgbWFyZ2luLmxlZnQgPSBnZXRNZWFzdXJlbWVudCh2YWx1ZSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJtYXJnaW4tcmlnaHQiOgogICAgICAgICAgbWFyZ2luLnJpZ2h0ID0gZ2V0TWVhc3VyZW1lbnQodmFsdWUpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAibGluZS1oZWlnaHQiOgogICAgICAgICAgbGluZUhlaWdodCA9IGdldE1lYXN1cmVtZW50KHZhbHVlKTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBtZWFzdXJlLnB1c2hEYXRhKHhmYUZvbnQsIG1hcmdpbiwgbGluZUhlaWdodCk7CiAgICBpZiAodGhpc1skY29udGVudF0pIHsKICAgICAgbWVhc3VyZS5hZGRTdHJpbmcodGhpc1skY29udGVudF0pOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzWyRnZXRDaGlsZHJlbl0oKSkgewogICAgICAgIGlmIChjaGlsZFskbm9kZU5hbWVdID09PSAiI3RleHQiKSB7CiAgICAgICAgICBtZWFzdXJlLmFkZFN0cmluZyhjaGlsZFskY29udGVudF0pOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGNoaWxkWyRwdXNoR2x5cGhzXShtZWFzdXJlKTsKICAgICAgfQogICAgfQogICAgaWYgKG11c3RQb3ApIHsKICAgICAgbWVhc3VyZS5wb3BGb250KCk7CiAgICB9CiAgfQogIFskdG9IVE1MXShhdmFpbGFibGVTcGFjZSkgewogICAgY29uc3QgY2hpbGRyZW4gPSBbXTsKICAgIHRoaXNbJGV4dHJhXSA9IHsKICAgICAgY2hpbGRyZW4KICAgIH07CiAgICB0aGlzWyRjaGlsZHJlblRvSFRNTF0oe30pOwogICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMCAmJiAhdGhpc1skY29udGVudF0pIHsKICAgICAgcmV0dXJuIEhUTUxSZXN1bHQuRU1QVFk7CiAgICB9CiAgICBsZXQgdmFsdWU7CiAgICBpZiAodGhpc1skcmljaFRleHRdKSB7CiAgICAgIHZhbHVlID0gdGhpc1skY29udGVudF0gPyB0aGlzWyRjb250ZW50XS5yZXBsYWNlQWxsKGNybGZGb3JSaWNoVGV4dFJlZ0V4cCwgIlxuIikgOiB1bmRlZmluZWQ7CiAgICB9IGVsc2UgewogICAgICB2YWx1ZSA9IHRoaXNbJGNvbnRlbnRdIHx8IHVuZGVmaW5lZDsKICAgIH0KICAgIHJldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3MoewogICAgICBuYW1lOiB0aGlzWyRub2RlTmFtZV0sCiAgICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICBocmVmOiB0aGlzLmhyZWYsCiAgICAgICAgc3R5bGU6IG1hcFN0eWxlKHRoaXMuc3R5bGUsIHRoaXMsIHRoaXNbJHJpY2hUZXh0XSkKICAgICAgfSwKICAgICAgY2hpbGRyZW4sCiAgICAgIHZhbHVlCiAgICB9KTsKICB9Cn0KY2xhc3MgQSBleHRlbmRzIFhodG1sT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihhdHRyaWJ1dGVzLCAiYSIpOwogICAgdGhpcy5ocmVmID0gZml4VVJMKGF0dHJpYnV0ZXMuaHJlZikgfHwgIiI7CiAgfQp9CmNsYXNzIEIgZXh0ZW5kcyBYaHRtbE9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoYXR0cmlidXRlcywgImIiKTsKICB9CiAgWyRwdXNoR2x5cGhzXShtZWFzdXJlKSB7CiAgICBtZWFzdXJlLnB1c2hGb250KHsKICAgICAgd2VpZ2h0OiAiYm9sZCIKICAgIH0pOwogICAgc3VwZXJbJHB1c2hHbHlwaHNdKG1lYXN1cmUpOwogICAgbWVhc3VyZS5wb3BGb250KCk7CiAgfQp9CmNsYXNzIEJvZHkgZXh0ZW5kcyBYaHRtbE9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoYXR0cmlidXRlcywgImJvZHkiKTsKICB9CiAgWyR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKSB7CiAgICBjb25zdCByZXMgPSBzdXBlclskdG9IVE1MXShhdmFpbGFibGVTcGFjZSk7CiAgICBjb25zdCB7CiAgICAgIGh0bWwKICAgIH0gPSByZXM7CiAgICBpZiAoIWh0bWwpIHsKICAgICAgcmV0dXJuIEhUTUxSZXN1bHQuRU1QVFk7CiAgICB9CiAgICBodG1sLm5hbWUgPSAiZGl2IjsKICAgIGh0bWwuYXR0cmlidXRlcy5jbGFzcyA9IFsieGZhUmljaCJdOwogICAgcmV0dXJuIHJlczsKICB9Cn0KY2xhc3MgQnIgZXh0ZW5kcyBYaHRtbE9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoYXR0cmlidXRlcywgImJyIik7CiAgfQogIFskdGV4dF0oKSB7CiAgICByZXR1cm4gIlxuIjsKICB9CiAgWyRwdXNoR2x5cGhzXShtZWFzdXJlKSB7CiAgICBtZWFzdXJlLmFkZFN0cmluZygiXG4iKTsKICB9CiAgWyR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKSB7CiAgICByZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHsKICAgICAgbmFtZTogImJyIgogICAgfSk7CiAgfQp9CmNsYXNzIEh0bWwgZXh0ZW5kcyBYaHRtbE9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoYXR0cmlidXRlcywgImh0bWwiKTsKICB9CiAgWyR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKSB7CiAgICBjb25zdCBjaGlsZHJlbiA9IFtdOwogICAgdGhpc1skZXh0cmFdID0gewogICAgICBjaGlsZHJlbgogICAgfTsKICAgIHRoaXNbJGNoaWxkcmVuVG9IVE1MXSh7fSk7CiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3MoewogICAgICAgIG5hbWU6ICJkaXYiLAogICAgICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICAgIGNsYXNzOiBbInhmYVJpY2giXSwKICAgICAgICAgIHN0eWxlOiB7fQogICAgICAgIH0sCiAgICAgICAgdmFsdWU6IHRoaXNbJGNvbnRlbnRdIHx8ICIiCiAgICAgIH0pOwogICAgfQogICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMSkgewogICAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuWzBdOwogICAgICBpZiAoY2hpbGQuYXR0cmlidXRlcz8uY2xhc3MuaW5jbHVkZXMoInhmYVJpY2giKSkgewogICAgICAgIHJldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3MoY2hpbGQpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHsKICAgICAgbmFtZTogImRpdiIsCiAgICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICBjbGFzczogWyJ4ZmFSaWNoIl0sCiAgICAgICAgc3R5bGU6IHt9CiAgICAgIH0sCiAgICAgIGNoaWxkcmVuCiAgICB9KTsKICB9Cn0KY2xhc3MgSSBleHRlbmRzIFhodG1sT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihhdHRyaWJ1dGVzLCAiaSIpOwogIH0KICBbJHB1c2hHbHlwaHNdKG1lYXN1cmUpIHsKICAgIG1lYXN1cmUucHVzaEZvbnQoewogICAgICBwb3N0dXJlOiAiaXRhbGljIgogICAgfSk7CiAgICBzdXBlclskcHVzaEdseXBoc10obWVhc3VyZSk7CiAgICBtZWFzdXJlLnBvcEZvbnQoKTsKICB9Cn0KY2xhc3MgTGkgZXh0ZW5kcyBYaHRtbE9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoYXR0cmlidXRlcywgImxpIik7CiAgfQp9CmNsYXNzIE9sIGV4dGVuZHMgWGh0bWxPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKGF0dHJpYnV0ZXMsICJvbCIpOwogIH0KfQpjbGFzcyBQIGV4dGVuZHMgWGh0bWxPYmplY3QgewogIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHsKICAgIHN1cGVyKGF0dHJpYnV0ZXMsICJwIik7CiAgfQogIFskcHVzaEdseXBoc10obWVhc3VyZSkgewogICAgc3VwZXJbJHB1c2hHbHlwaHNdKG1lYXN1cmUsIGZhbHNlKTsKICAgIG1lYXN1cmUuYWRkU3RyaW5nKCJcbiIpOwogICAgbWVhc3VyZS5hZGRQYXJhKCk7CiAgICBtZWFzdXJlLnBvcEZvbnQoKTsKICB9CiAgWyR0ZXh0XSgpIHsKICAgIGNvbnN0IHNpYmxpbmdzID0gdGhpc1skZ2V0UGFyZW50XSgpWyRnZXRDaGlsZHJlbl0oKTsKICAgIGlmIChzaWJsaW5ncy5hdCgtMSkgPT09IHRoaXMpIHsKICAgICAgcmV0dXJuIHN1cGVyWyR0ZXh0XSgpOwogICAgfQogICAgcmV0dXJuIHN1cGVyWyR0ZXh0XSgpICsgIlxuIjsKICB9Cn0KY2xhc3MgU3BhbiBleHRlbmRzIFhodG1sT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihhdHRyaWJ1dGVzLCAic3BhbiIpOwogIH0KfQpjbGFzcyBTdWIgZXh0ZW5kcyBYaHRtbE9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoYXR0cmlidXRlcywgInN1YiIpOwogIH0KfQpjbGFzcyBTdXAgZXh0ZW5kcyBYaHRtbE9iamVjdCB7CiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykgewogICAgc3VwZXIoYXR0cmlidXRlcywgInN1cCIpOwogIH0KfQpjbGFzcyBVbCBleHRlbmRzIFhodG1sT2JqZWN0IHsKICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7CiAgICBzdXBlcihhdHRyaWJ1dGVzLCAidWwiKTsKICB9Cn0KY2xhc3MgWGh0bWxOYW1lc3BhY2UgewogIHN0YXRpYyBbJGJ1aWxkWEZBT2JqZWN0XShuYW1lLCBhdHRyaWJ1dGVzKSB7CiAgICBpZiAoWGh0bWxOYW1lc3BhY2UuaGFzT3duUHJvcGVydHkobmFtZSkpIHsKICAgICAgcmV0dXJuIFhodG1sTmFtZXNwYWNlW25hbWVdKGF0dHJpYnV0ZXMpOwogICAgfQogICAgcmV0dXJuIHVuZGVmaW5lZDsKICB9CiAgc3RhdGljIGEoYXR0cmlidXRlcykgewogICAgcmV0dXJuIG5ldyBBKGF0dHJpYnV0ZXMpOwogIH0KICBzdGF0aWMgYihhdHRyaWJ1dGVzKSB7CiAgICByZXR1cm4gbmV3IEIoYXR0cmlidXRlcyk7CiAgfQogIHN0YXRpYyBib2R5KGF0dHJpYnV0ZXMpIHsKICAgIHJldHVybiBuZXcgQm9keShhdHRyaWJ1dGVzKTsKICB9CiAgc3RhdGljIGJyKGF0dHJpYnV0ZXMpIHsKICAgIHJldHVybiBuZXcgQnIoYXR0cmlidXRlcyk7CiAgfQogIHN0YXRpYyBodG1sKGF0dHJpYnV0ZXMpIHsKICAgIHJldHVybiBuZXcgSHRtbChhdHRyaWJ1dGVzKTsKICB9CiAgc3RhdGljIGkoYXR0cmlidXRlcykgewogICAgcmV0dXJuIG5ldyBJKGF0dHJpYnV0ZXMpOwogIH0KICBzdGF0aWMgbGkoYXR0cmlidXRlcykgewogICAgcmV0dXJuIG5ldyBMaShhdHRyaWJ1dGVzKTsKICB9CiAgc3RhdGljIG9sKGF0dHJpYnV0ZXMpIHsKICAgIHJldHVybiBuZXcgT2woYXR0cmlidXRlcyk7CiAgfQogIHN0YXRpYyBwKGF0dHJpYnV0ZXMpIHsKICAgIHJldHVybiBuZXcgUChhdHRyaWJ1dGVzKTsKICB9CiAgc3RhdGljIHNwYW4oYXR0cmlidXRlcykgewogICAgcmV0dXJuIG5ldyBTcGFuKGF0dHJpYnV0ZXMpOwogIH0KICBzdGF0aWMgc3ViKGF0dHJpYnV0ZXMpIHsKICAgIHJldHVybiBuZXcgU3ViKGF0dHJpYnV0ZXMpOwogIH0KICBzdGF0aWMgc3VwKGF0dHJpYnV0ZXMpIHsKICAgIHJldHVybiBuZXcgU3VwKGF0dHJpYnV0ZXMpOwogIH0KICBzdGF0aWMgdWwoYXR0cmlidXRlcykgewogICAgcmV0dXJuIG5ldyBVbChhdHRyaWJ1dGVzKTsKICB9Cn0KCjsvLyAuL3NyYy9jb3JlL3hmYS9zZXR1cC5qcwoKCgoKCgoKCgpjb25zdCBOYW1lc3BhY2VTZXRVcCA9IHsKICBjb25maWc6IENvbmZpZ05hbWVzcGFjZSwKICBjb25uZWN0aW9uOiBDb25uZWN0aW9uU2V0TmFtZXNwYWNlLAogIGRhdGFzZXRzOiBEYXRhc2V0c05hbWVzcGFjZSwKICBsb2NhbGVTZXQ6IExvY2FsZVNldE5hbWVzcGFjZSwKICBzaWduYXR1cmU6IFNpZ25hdHVyZU5hbWVzcGFjZSwKICBzdHlsZXNoZWV0OiBTdHlsZXNoZWV0TmFtZXNwYWNlLAogIHRlbXBsYXRlOiBUZW1wbGF0ZU5hbWVzcGFjZSwKICB4ZHA6IFhkcE5hbWVzcGFjZSwKICB4aHRtbDogWGh0bWxOYW1lc3BhY2UKfTsKCjsvLyAuL3NyYy9jb3JlL3hmYS91bmtub3duLmpzCgoKY2xhc3MgVW5rbm93bk5hbWVzcGFjZSB7CiAgY29uc3RydWN0b3IobnNJZCkgewogICAgdGhpcy5uYW1lc3BhY2VJZCA9IG5zSWQ7CiAgfQogIFskYnVpbGRYRkFPYmplY3RdKG5hbWUsIGF0dHJpYnV0ZXMpIHsKICAgIHJldHVybiBuZXcgWG1sT2JqZWN0KHRoaXMubmFtZXNwYWNlSWQsIG5hbWUsIGF0dHJpYnV0ZXMpOwogIH0KfQoKOy8vIC4vc3JjL2NvcmUveGZhL2J1aWxkZXIuanMKCgoKCgoKCmNsYXNzIFJvb3QgZXh0ZW5kcyBYRkFPYmplY3QgewogIGNvbnN0cnVjdG9yKGlkcykgewogICAgc3VwZXIoLTEsICJyb290IiwgT2JqZWN0LmNyZWF0ZShudWxsKSk7CiAgICB0aGlzLmVsZW1lbnQgPSBudWxsOwogICAgdGhpc1skaWRzXSA9IGlkczsKICB9CiAgWyRvbkNoaWxkXShjaGlsZCkgewogICAgdGhpcy5lbGVtZW50ID0gY2hpbGQ7CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgWyRmaW5hbGl6ZV0oKSB7CiAgICBzdXBlclskZmluYWxpemVdKCk7CiAgICBpZiAodGhpcy5lbGVtZW50LnRlbXBsYXRlIGluc3RhbmNlb2YgVGVtcGxhdGUpIHsKICAgICAgdGhpc1skaWRzXS5zZXQoJHJvb3QsIHRoaXMuZWxlbWVudCk7CiAgICAgIHRoaXMuZWxlbWVudC50ZW1wbGF0ZVskcmVzb2x2ZVByb3RvdHlwZXNdKHRoaXNbJGlkc10pOwogICAgICB0aGlzLmVsZW1lbnQudGVtcGxhdGVbJGlkc10gPSB0aGlzWyRpZHNdOwogICAgfQogIH0KfQpjbGFzcyBFbXB0eSBleHRlbmRzIFhGQU9iamVjdCB7CiAgY29uc3RydWN0b3IoKSB7CiAgICBzdXBlcigtMSwgIiIsIE9iamVjdC5jcmVhdGUobnVsbCkpOwogIH0KICBbJG9uQ2hpbGRdKF8pIHsKICAgIHJldHVybiBmYWxzZTsKICB9Cn0KY2xhc3MgQnVpbGRlciB7CiAgY29uc3RydWN0b3Iocm9vdE5hbWVTcGFjZSA9IG51bGwpIHsKICAgIHRoaXMuX25hbWVzcGFjZVN0YWNrID0gW107CiAgICB0aGlzLl9uc0Fnbm9zdGljTGV2ZWwgPSAwOwogICAgdGhpcy5fbmFtZXNwYWNlUHJlZml4ZXMgPSBuZXcgTWFwKCk7CiAgICB0aGlzLl9uYW1lc3BhY2VzID0gbmV3IE1hcCgpOwogICAgdGhpcy5fbmV4dE5zSWQgPSBNYXRoLm1heCguLi5PYmplY3QudmFsdWVzKE5hbWVzcGFjZUlkcykubWFwKCh7CiAgICAgIGlkCiAgICB9KSA9PiBpZCkpOwogICAgdGhpcy5fY3VycmVudE5hbWVzcGFjZSA9IHJvb3ROYW1lU3BhY2UgfHwgbmV3IFVua25vd25OYW1lc3BhY2UoKyt0aGlzLl9uZXh0TnNJZCk7CiAgfQogIGJ1aWxkUm9vdChpZHMpIHsKICAgIHJldHVybiBuZXcgUm9vdChpZHMpOwogIH0KICBidWlsZCh7CiAgICBuc1ByZWZpeCwKICAgIG5hbWUsCiAgICBhdHRyaWJ1dGVzLAogICAgbmFtZXNwYWNlLAogICAgcHJlZml4ZXMKICB9KSB7CiAgICBjb25zdCBoYXNOYW1lc3BhY2VEZWYgPSBuYW1lc3BhY2UgIT09IG51bGw7CiAgICBpZiAoaGFzTmFtZXNwYWNlRGVmKSB7CiAgICAgIHRoaXMuX25hbWVzcGFjZVN0YWNrLnB1c2godGhpcy5fY3VycmVudE5hbWVzcGFjZSk7CiAgICAgIHRoaXMuX2N1cnJlbnROYW1lc3BhY2UgPSB0aGlzLl9zZWFyY2hOYW1lc3BhY2UobmFtZXNwYWNlKTsKICAgIH0KICAgIGlmIChwcmVmaXhlcykgewogICAgICB0aGlzLl9hZGROYW1lc3BhY2VQcmVmaXgocHJlZml4ZXMpOwogICAgfQogICAgaWYgKGF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoJG5zQXR0cmlidXRlcykpIHsKICAgICAgY29uc3QgZGF0YVRlbXBsYXRlID0gTmFtZXNwYWNlU2V0VXAuZGF0YXNldHM7CiAgICAgIGNvbnN0IG5zQXR0cnMgPSBhdHRyaWJ1dGVzWyRuc0F0dHJpYnV0ZXNdOwogICAgICBsZXQgeGZhQXR0cnMgPSBudWxsOwogICAgICBmb3IgKGNvbnN0IFtucywgYXR0cnNdIG9mIE9iamVjdC5lbnRyaWVzKG5zQXR0cnMpKSB7CiAgICAgICAgY29uc3QgbnNUb1VzZSA9IHRoaXMuX2dldE5hbWVzcGFjZVRvVXNlKG5zKTsKICAgICAgICBpZiAobnNUb1VzZSA9PT0gZGF0YVRlbXBsYXRlKSB7CiAgICAgICAgICB4ZmFBdHRycyA9IHsKICAgICAgICAgICAgeGZhOiBhdHRycwogICAgICAgICAgfTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoeGZhQXR0cnMpIHsKICAgICAgICBhdHRyaWJ1dGVzWyRuc0F0dHJpYnV0ZXNdID0geGZhQXR0cnM7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZGVsZXRlIGF0dHJpYnV0ZXNbJG5zQXR0cmlidXRlc107CiAgICAgIH0KICAgIH0KICAgIGNvbnN0IG5hbWVzcGFjZVRvVXNlID0gdGhpcy5fZ2V0TmFtZXNwYWNlVG9Vc2UobnNQcmVmaXgpOwogICAgY29uc3Qgbm9kZSA9IG5hbWVzcGFjZVRvVXNlPy5bJGJ1aWxkWEZBT2JqZWN0XShuYW1lLCBhdHRyaWJ1dGVzKSB8fCBuZXcgRW1wdHkoKTsKICAgIGlmIChub2RlWyRpc05zQWdub3N0aWNdKCkpIHsKICAgICAgdGhpcy5fbnNBZ25vc3RpY0xldmVsKys7CiAgICB9CiAgICBpZiAoaGFzTmFtZXNwYWNlRGVmIHx8IHByZWZpeGVzIHx8IG5vZGVbJGlzTnNBZ25vc3RpY10oKSkgewogICAgICBub2RlWyRjbGVhbnVwXSA9IHsKICAgICAgICBoYXNOYW1lc3BhY2U6IGhhc05hbWVzcGFjZURlZiwKICAgICAgICBwcmVmaXhlcywKICAgICAgICBuc0Fnbm9zdGljOiBub2RlWyRpc05zQWdub3N0aWNdKCkKICAgICAgfTsKICAgIH0KICAgIHJldHVybiBub2RlOwogIH0KICBpc05zQWdub3N0aWMoKSB7CiAgICByZXR1cm4gdGhpcy5fbnNBZ25vc3RpY0xldmVsID4gMDsKICB9CiAgX3NlYXJjaE5hbWVzcGFjZShuc05hbWUpIHsKICAgIGxldCBucyA9IHRoaXMuX25hbWVzcGFjZXMuZ2V0KG5zTmFtZSk7CiAgICBpZiAobnMpIHsKICAgICAgcmV0dXJuIG5zOwogICAgfQogICAgZm9yIChjb25zdCBbbmFtZSwgewogICAgICBjaGVjawogICAgfV0gb2YgT2JqZWN0LmVudHJpZXMoTmFtZXNwYWNlSWRzKSkgewogICAgICBpZiAoY2hlY2sobnNOYW1lKSkgewogICAgICAgIG5zID0gTmFtZXNwYWNlU2V0VXBbbmFtZV07CiAgICAgICAgaWYgKG5zKSB7CiAgICAgICAgICB0aGlzLl9uYW1lc3BhY2VzLnNldChuc05hbWUsIG5zKTsKICAgICAgICAgIHJldHVybiBuczsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIG5zID0gbmV3IFVua25vd25OYW1lc3BhY2UoKyt0aGlzLl9uZXh0TnNJZCk7CiAgICB0aGlzLl9uYW1lc3BhY2VzLnNldChuc05hbWUsIG5zKTsKICAgIHJldHVybiBuczsKICB9CiAgX2FkZE5hbWVzcGFjZVByZWZpeChwcmVmaXhlcykgewogICAgZm9yIChjb25zdCB7CiAgICAgIHByZWZpeCwKICAgICAgdmFsdWUKICAgIH0gb2YgcHJlZml4ZXMpIHsKICAgICAgY29uc3QgbmFtZXNwYWNlID0gdGhpcy5fc2VhcmNoTmFtZXNwYWNlKHZhbHVlKTsKICAgICAgbGV0IHByZWZpeFN0YWNrID0gdGhpcy5fbmFtZXNwYWNlUHJlZml4ZXMuZ2V0KHByZWZpeCk7CiAgICAgIGlmICghcHJlZml4U3RhY2spIHsKICAgICAgICBwcmVmaXhTdGFjayA9IFtdOwogICAgICAgIHRoaXMuX25hbWVzcGFjZVByZWZpeGVzLnNldChwcmVmaXgsIHByZWZpeFN0YWNrKTsKICAgICAgfQogICAgICBwcmVmaXhTdGFjay5wdXNoKG5hbWVzcGFjZSk7CiAgICB9CiAgfQogIF9nZXROYW1lc3BhY2VUb1VzZShwcmVmaXgpIHsKICAgIGlmICghcHJlZml4KSB7CiAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50TmFtZXNwYWNlOwogICAgfQogICAgY29uc3QgcHJlZml4U3RhY2sgPSB0aGlzLl9uYW1lc3BhY2VQcmVmaXhlcy5nZXQocHJlZml4KTsKICAgIGlmIChwcmVmaXhTdGFjaz8ubGVuZ3RoID4gMCkgewogICAgICByZXR1cm4gcHJlZml4U3RhY2suYXQoLTEpOwogICAgfQogICAgd2FybihgVW5rbm93biBuYW1lc3BhY2UgcHJlZml4OiAke3ByZWZpeH0uYCk7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgY2xlYW4oZGF0YSkgewogICAgY29uc3QgewogICAgICBoYXNOYW1lc3BhY2UsCiAgICAgIHByZWZpeGVzLAogICAgICBuc0Fnbm9zdGljCiAgICB9ID0gZGF0YTsKICAgIGlmIChoYXNOYW1lc3BhY2UpIHsKICAgICAgdGhpcy5fY3VycmVudE5hbWVzcGFjZSA9IHRoaXMuX25hbWVzcGFjZVN0YWNrLnBvcCgpOwogICAgfQogICAgaWYgKHByZWZpeGVzKSB7CiAgICAgIHByZWZpeGVzLmZvckVhY2goKHsKICAgICAgICBwcmVmaXgKICAgICAgfSkgPT4gewogICAgICAgIHRoaXMuX25hbWVzcGFjZVByZWZpeGVzLmdldChwcmVmaXgpLnBvcCgpOwogICAgICB9KTsKICAgIH0KICAgIGlmIChuc0Fnbm9zdGljKSB7CiAgICAgIHRoaXMuX25zQWdub3N0aWNMZXZlbC0tOwogICAgfQogIH0KfQoKOy8vIC4vc3JjL2NvcmUveGZhL3BhcnNlci5qcwoKCgoKY2xhc3MgWEZBUGFyc2VyIGV4dGVuZHMgWE1MUGFyc2VyQmFzZSB7CiAgY29uc3RydWN0b3Iocm9vdE5hbWVTcGFjZSA9IG51bGwsIHJpY2hUZXh0ID0gZmFsc2UpIHsKICAgIHN1cGVyKCk7CiAgICB0aGlzLl9idWlsZGVyID0gbmV3IEJ1aWxkZXIocm9vdE5hbWVTcGFjZSk7CiAgICB0aGlzLl9zdGFjayA9IFtdOwogICAgdGhpcy5fZ2xvYmFsRGF0YSA9IHsKICAgICAgdXNlZFR5cGVmYWNlczogbmV3IFNldCgpCiAgICB9OwogICAgdGhpcy5faWRzID0gbmV3IE1hcCgpOwogICAgdGhpcy5fY3VycmVudCA9IHRoaXMuX2J1aWxkZXIuYnVpbGRSb290KHRoaXMuX2lkcyk7CiAgICB0aGlzLl9lcnJvckNvZGUgPSBYTUxQYXJzZXJFcnJvckNvZGUuTm9FcnJvcjsKICAgIHRoaXMuX3doaXRlUmVnZXggPSAvXlxzKyQvOwogICAgdGhpcy5fbmJzcHMgPSAvXHhhMCsvZzsKICAgIHRoaXMuX3JpY2hUZXh0ID0gcmljaFRleHQ7CiAgfQogIHBhcnNlKGRhdGEpIHsKICAgIHRoaXMucGFyc2VYbWwoZGF0YSk7CiAgICBpZiAodGhpcy5fZXJyb3JDb2RlICE9PSBYTUxQYXJzZXJFcnJvckNvZGUuTm9FcnJvcikgewogICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgfQogICAgdGhpcy5fY3VycmVudFskZmluYWxpemVdKCk7CiAgICByZXR1cm4gdGhpcy5fY3VycmVudC5lbGVtZW50OwogIH0KICBvblRleHQodGV4dCkgewogICAgdGV4dCA9IHRleHQucmVwbGFjZSh0aGlzLl9uYnNwcywgbWF0Y2ggPT4gbWF0Y2guc2xpY2UoMSkgKyAiICIpOwogICAgaWYgKHRoaXMuX3JpY2hUZXh0IHx8IHRoaXMuX2N1cnJlbnRbJGFjY2VwdFdoaXRlc3BhY2VdKCkpIHsKICAgICAgdGhpcy5fY3VycmVudFskb25UZXh0XSh0ZXh0LCB0aGlzLl9yaWNoVGV4dCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICh0aGlzLl93aGl0ZVJlZ2V4LnRlc3QodGV4dCkpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy5fY3VycmVudFskb25UZXh0XSh0ZXh0LnRyaW0oKSk7CiAgfQogIG9uQ2RhdGEodGV4dCkgewogICAgdGhpcy5fY3VycmVudFskb25UZXh0XSh0ZXh0KTsKICB9CiAgX21rQXR0cmlidXRlcyhhdHRyaWJ1dGVzLCB0YWdOYW1lKSB7CiAgICBsZXQgbmFtZXNwYWNlID0gbnVsbDsKICAgIGxldCBwcmVmaXhlcyA9IG51bGw7CiAgICBjb25zdCBhdHRyaWJ1dGVPYmogPSBPYmplY3QuY3JlYXRlKHt9KTsKICAgIGZvciAoY29uc3QgewogICAgICBuYW1lLAogICAgICB2YWx1ZQogICAgfSBvZiBhdHRyaWJ1dGVzKSB7CiAgICAgIGlmIChuYW1lID09PSAieG1sbnMiKSB7CiAgICAgICAgaWYgKCFuYW1lc3BhY2UpIHsKICAgICAgICAgIG5hbWVzcGFjZSA9IHZhbHVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB3YXJuKGBYRkEgLSBtdWx0aXBsZSBuYW1lc3BhY2UgZGVmaW5pdGlvbiBpbiA8JHt0YWdOYW1lfT5gKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAobmFtZS5zdGFydHNXaXRoKCJ4bWxuczoiKSkgewogICAgICAgIGNvbnN0IHByZWZpeCA9IG5hbWUuc3Vic3RyaW5nKCJ4bWxuczoiLmxlbmd0aCk7CiAgICAgICAgaWYgKCFwcmVmaXhlcykgewogICAgICAgICAgcHJlZml4ZXMgPSBbXTsKICAgICAgICB9CiAgICAgICAgcHJlZml4ZXMucHVzaCh7CiAgICAgICAgICBwcmVmaXgsCiAgICAgICAgICB2YWx1ZQogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IGkgPSBuYW1lLmluZGV4T2YoIjoiKTsKICAgICAgICBpZiAoaSA9PT0gLTEpIHsKICAgICAgICAgIGF0dHJpYnV0ZU9ialtuYW1lXSA9IHZhbHVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBsZXQgbnNBdHRycyA9IGF0dHJpYnV0ZU9ialskbnNBdHRyaWJ1dGVzXTsKICAgICAgICAgIGlmICghbnNBdHRycykgewogICAgICAgICAgICBuc0F0dHJzID0gYXR0cmlidXRlT2JqWyRuc0F0dHJpYnV0ZXNdID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IFtucywgYXR0ck5hbWVdID0gW25hbWUuc2xpY2UoMCwgaSksIG5hbWUuc2xpY2UoaSArIDEpXTsKICAgICAgICAgIGNvbnN0IGF0dHJzID0gbnNBdHRyc1tuc10gfHw9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICAgICAgICBhdHRyc1thdHRyTmFtZV0gPSB2YWx1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBbbmFtZXNwYWNlLCBwcmVmaXhlcywgYXR0cmlidXRlT2JqXTsKICB9CiAgX2dldE5hbWVBbmRQcmVmaXgobmFtZSwgbnNBZ25vc3RpYykgewogICAgY29uc3QgaSA9IG5hbWUuaW5kZXhPZigiOiIpOwogICAgaWYgKGkgPT09IC0xKSB7CiAgICAgIHJldHVybiBbbmFtZSwgbnVsbF07CiAgICB9CiAgICByZXR1cm4gW25hbWUuc3Vic3RyaW5nKGkgKyAxKSwgbnNBZ25vc3RpYyA/ICIiIDogbmFtZS5zdWJzdHJpbmcoMCwgaSldOwogIH0KICBvbkJlZ2luRWxlbWVudCh0YWdOYW1lLCBhdHRyaWJ1dGVzLCBpc0VtcHR5KSB7CiAgICBjb25zdCBbbmFtZXNwYWNlLCBwcmVmaXhlcywgYXR0cmlidXRlc09ial0gPSB0aGlzLl9ta0F0dHJpYnV0ZXMoYXR0cmlidXRlcywgdGFnTmFtZSk7CiAgICBjb25zdCBbbmFtZSwgbnNQcmVmaXhdID0gdGhpcy5fZ2V0TmFtZUFuZFByZWZpeCh0YWdOYW1lLCB0aGlzLl9idWlsZGVyLmlzTnNBZ25vc3RpYygpKTsKICAgIGNvbnN0IG5vZGUgPSB0aGlzLl9idWlsZGVyLmJ1aWxkKHsKICAgICAgbnNQcmVmaXgsCiAgICAgIG5hbWUsCiAgICAgIGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXNPYmosCiAgICAgIG5hbWVzcGFjZSwKICAgICAgcHJlZml4ZXMKICAgIH0pOwogICAgbm9kZVskZ2xvYmFsRGF0YV0gPSB0aGlzLl9nbG9iYWxEYXRhOwogICAgaWYgKGlzRW1wdHkpIHsKICAgICAgbm9kZVskZmluYWxpemVdKCk7CiAgICAgIGlmICh0aGlzLl9jdXJyZW50WyRvbkNoaWxkXShub2RlKSkgewogICAgICAgIG5vZGVbJHNldElkXSh0aGlzLl9pZHMpOwogICAgICB9CiAgICAgIG5vZGVbJGNsZWFuXSh0aGlzLl9idWlsZGVyKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy5fc3RhY2sucHVzaCh0aGlzLl9jdXJyZW50KTsKICAgIHRoaXMuX2N1cnJlbnQgPSBub2RlOwogIH0KICBvbkVuZEVsZW1lbnQobmFtZSkgewogICAgY29uc3Qgbm9kZSA9IHRoaXMuX2N1cnJlbnQ7CiAgICBpZiAobm9kZVskaXNDREFUQVhtbF0oKSAmJiB0eXBlb2Ygbm9kZVskY29udGVudF0gPT09ICJzdHJpbmciKSB7CiAgICAgIGNvbnN0IHBhcnNlciA9IG5ldyBYRkFQYXJzZXIoKTsKICAgICAgcGFyc2VyLl9nbG9iYWxEYXRhID0gdGhpcy5fZ2xvYmFsRGF0YTsKICAgICAgY29uc3Qgcm9vdCA9IHBhcnNlci5wYXJzZShub2RlWyRjb250ZW50XSk7CiAgICAgIG5vZGVbJGNvbnRlbnRdID0gbnVsbDsKICAgICAgbm9kZVskb25DaGlsZF0ocm9vdCk7CiAgICB9CiAgICBub2RlWyRmaW5hbGl6ZV0oKTsKICAgIHRoaXMuX2N1cnJlbnQgPSB0aGlzLl9zdGFjay5wb3AoKTsKICAgIGlmICh0aGlzLl9jdXJyZW50WyRvbkNoaWxkXShub2RlKSkgewogICAgICBub2RlWyRzZXRJZF0odGhpcy5faWRzKTsKICAgIH0KICAgIG5vZGVbJGNsZWFuXSh0aGlzLl9idWlsZGVyKTsKICB9CiAgb25FcnJvcihjb2RlKSB7CiAgICB0aGlzLl9lcnJvckNvZGUgPSBjb2RlOwogIH0KfQoKOy8vIC4vc3JjL2NvcmUveGZhL2ZhY3RvcnkuanMKCgoKCgoKCgpjbGFzcyBYRkFGYWN0b3J5IHsKICBjb25zdHJ1Y3RvcihkYXRhKSB7CiAgICB0cnkgewogICAgICB0aGlzLnJvb3QgPSBuZXcgWEZBUGFyc2VyKCkucGFyc2UoWEZBRmFjdG9yeS5fY3JlYXRlRG9jdW1lbnQoZGF0YSkpOwogICAgICBjb25zdCBiaW5kZXIgPSBuZXcgQmluZGVyKHRoaXMucm9vdCk7CiAgICAgIHRoaXMuZm9ybSA9IGJpbmRlci5iaW5kKCk7CiAgICAgIHRoaXMuZGF0YUhhbmRsZXIgPSBuZXcgRGF0YUhhbmRsZXIodGhpcy5yb290LCBiaW5kZXIuZ2V0RGF0YSgpKTsKICAgICAgdGhpcy5mb3JtWyRnbG9iYWxEYXRhXS50ZW1wbGF0ZSA9IHRoaXMuZm9ybTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgd2FybihgWEZBIC0gYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHBhcnNpbmcgYW5kIGJpbmRpbmc6ICR7ZX1gKTsKICAgIH0KICB9CiAgaXNWYWxpZCgpIHsKICAgIHJldHVybiB0aGlzLnJvb3QgJiYgdGhpcy5mb3JtOwogIH0KICBfY3JlYXRlUGFnZXNIZWxwZXIoKSB7CiAgICBjb25zdCBpdGVyYXRvciA9IHRoaXMuZm9ybVskdG9QYWdlc10oKTsKICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgIGNvbnN0IG5leHRJdGVyYXRpb24gPSAoKSA9PiB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IHZhbHVlID0gaXRlcmF0b3IubmV4dCgpOwogICAgICAgICAgaWYgKHZhbHVlLmRvbmUpIHsKICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZS52YWx1ZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzZXRUaW1lb3V0KG5leHRJdGVyYXRpb24sIDApOwogICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIHJlamVjdChlKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHNldFRpbWVvdXQobmV4dEl0ZXJhdGlvbiwgMCk7CiAgICB9KTsKICB9CiAgYXN5bmMgX2NyZWF0ZVBhZ2VzKCkgewogICAgdHJ5IHsKICAgICAgdGhpcy5wYWdlcyA9IGF3YWl0IHRoaXMuX2NyZWF0ZVBhZ2VzSGVscGVyKCk7CiAgICAgIHRoaXMuZGltcyA9IHRoaXMucGFnZXMuY2hpbGRyZW4ubWFwKGMgPT4gewogICAgICAgIGNvbnN0IHsKICAgICAgICAgIHdpZHRoLAogICAgICAgICAgaGVpZ2h0CiAgICAgICAgfSA9IGMuYXR0cmlidXRlcy5zdHlsZTsKICAgICAgICByZXR1cm4gWzAsIDAsIHBhcnNlSW50KHdpZHRoKSwgcGFyc2VJbnQoaGVpZ2h0KV07CiAgICAgIH0pOwogICAgfSBjYXRjaCAoZSkgewogICAgICB3YXJuKGBYRkEgLSBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgbGF5b3V0OiAke2V9YCk7CiAgICB9CiAgfQogIGdldEJvdW5kaW5nQm94KHBhZ2VJbmRleCkgewogICAgcmV0dXJuIHRoaXMuZGltc1twYWdlSW5kZXhdOwogIH0KICBhc3luYyBnZXROdW1QYWdlcygpIHsKICAgIGlmICghdGhpcy5wYWdlcykgewogICAgICBhd2FpdCB0aGlzLl9jcmVhdGVQYWdlcygpOwogICAgfQogICAgcmV0dXJuIHRoaXMuZGltcy5sZW5ndGg7CiAgfQogIHNldEltYWdlcyhpbWFnZXMpIHsKICAgIHRoaXMuZm9ybVskZ2xvYmFsRGF0YV0uaW1hZ2VzID0gaW1hZ2VzOwogIH0KICBzZXRGb250cyhmb250cykgewogICAgdGhpcy5mb3JtWyRnbG9iYWxEYXRhXS5mb250RmluZGVyID0gbmV3IEZvbnRGaW5kZXIoZm9udHMpOwogICAgY29uc3QgbWlzc2luZ0ZvbnRzID0gW107CiAgICBmb3IgKGxldCB0eXBlZmFjZSBvZiB0aGlzLmZvcm1bJGdsb2JhbERhdGFdLnVzZWRUeXBlZmFjZXMpIHsKICAgICAgdHlwZWZhY2UgPSBzdHJpcFF1b3Rlcyh0eXBlZmFjZSk7CiAgICAgIGNvbnN0IGZvbnQgPSB0aGlzLmZvcm1bJGdsb2JhbERhdGFdLmZvbnRGaW5kZXIuZmluZCh0eXBlZmFjZSk7CiAgICAgIGlmICghZm9udCkgewogICAgICAgIG1pc3NpbmdGb250cy5wdXNoKHR5cGVmYWNlKTsKICAgICAgfQogICAgfQogICAgaWYgKG1pc3NpbmdGb250cy5sZW5ndGggPiAwKSB7CiAgICAgIHJldHVybiBtaXNzaW5nRm9udHM7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CiAgYXBwZW5kRm9udHMoZm9udHMsIHJlYWxseU1pc3NpbmdGb250cykgewogICAgdGhpcy5mb3JtWyRnbG9iYWxEYXRhXS5mb250RmluZGVyLmFkZChmb250cywgcmVhbGx5TWlzc2luZ0ZvbnRzKTsKICB9CiAgYXN5bmMgZ2V0UGFnZXMoKSB7CiAgICBpZiAoIXRoaXMucGFnZXMpIHsKICAgICAgYXdhaXQgdGhpcy5fY3JlYXRlUGFnZXMoKTsKICAgIH0KICAgIGNvbnN0IHBhZ2VzID0gdGhpcy5wYWdlczsKICAgIHRoaXMucGFnZXMgPSBudWxsOwogICAgcmV0dXJuIHBhZ2VzOwogIH0KICBzZXJpYWxpemVEYXRhKHN0b3JhZ2UpIHsKICAgIHJldHVybiB0aGlzLmRhdGFIYW5kbGVyLnNlcmlhbGl6ZShzdG9yYWdlKTsKICB9CiAgc3RhdGljIF9jcmVhdGVEb2N1bWVudChkYXRhKSB7CiAgICBpZiAoIWRhdGFbIi94ZHA6eGRwIl0pIHsKICAgICAgcmV0dXJuIGRhdGFbInhkcDp4ZHAiXTsKICAgIH0KICAgIHJldHVybiBPYmplY3QudmFsdWVzKGRhdGEpLmpvaW4oIiIpOwogIH0KICBzdGF0aWMgZ2V0UmljaFRleHRBc0h0bWwocmMpIHsKICAgIGlmICghcmMgfHwgdHlwZW9mIHJjICE9PSAic3RyaW5nIikgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHRyeSB7CiAgICAgIGxldCByb290ID0gbmV3IFhGQVBhcnNlcihYaHRtbE5hbWVzcGFjZSwgdHJ1ZSkucGFyc2UocmMpOwogICAgICBpZiAoIVsiYm9keSIsICJ4aHRtbCJdLmluY2x1ZGVzKHJvb3RbJG5vZGVOYW1lXSkpIHsKICAgICAgICBjb25zdCBuZXdSb290ID0gWGh0bWxOYW1lc3BhY2UuYm9keSh7fSk7CiAgICAgICAgbmV3Um9vdFskYXBwZW5kQ2hpbGRdKHJvb3QpOwogICAgICAgIHJvb3QgPSBuZXdSb290OwogICAgICB9CiAgICAgIGNvbnN0IHJlc3VsdCA9IHJvb3RbJHRvSFRNTF0oKTsKICAgICAgaWYgKCFyZXN1bHQuc3VjY2VzcykgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGNvbnN0IHsKICAgICAgICBodG1sCiAgICAgIH0gPSByZXN1bHQ7CiAgICAgIGNvbnN0IHsKICAgICAgICBhdHRyaWJ1dGVzCiAgICAgIH0gPSBodG1sOwogICAgICBpZiAoYXR0cmlidXRlcykgewogICAgICAgIGlmIChhdHRyaWJ1dGVzLmNsYXNzKSB7CiAgICAgICAgICBhdHRyaWJ1dGVzLmNsYXNzID0gYXR0cmlidXRlcy5jbGFzcy5maWx0ZXIoYXR0ciA9PiAhYXR0ci5zdGFydHNXaXRoKCJ4ZmEiKSk7CiAgICAgICAgfQogICAgICAgIGF0dHJpYnV0ZXMuZGlyID0gImF1dG8iOwogICAgICB9CiAgICAgIHJldHVybiB7CiAgICAgICAgaHRtbCwKICAgICAgICBzdHI6IHJvb3RbJHRleHRdKCkKICAgICAgfTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgd2FybihgWEZBIC0gYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHBhcnNpbmcgb2YgcmljaCB0ZXh0OiAke2V9YCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCjsvLyAuL3NyYy9jb3JlL2Fubm90YXRpb24uanMKCgoKCgoKCgoKCgoKCgpjbGFzcyBBbm5vdGF0aW9uRmFjdG9yeSB7CiAgc3RhdGljIGNyZWF0ZUdsb2JhbHMocGRmTWFuYWdlcikgewogICAgcmV0dXJuIFByb21pc2UuYWxsKFtwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coImFjcm9Gb3JtIiksIHBkZk1hbmFnZXIuZW5zdXJlRG9jKCJ4ZmFEYXRhc2V0cyIpLCBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coInN0cnVjdFRyZWVSb290IiksIHBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZygiYmFzZVVybCIpLCBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coImF0dGFjaG1lbnRzIiksIHBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZygiZ2xvYmFsQ29sb3JTcGFjZUNhY2hlIildKS50aGVuKChbYWNyb0Zvcm0sIHhmYURhdGFzZXRzLCBzdHJ1Y3RUcmVlUm9vdCwgYmFzZVVybCwgYXR0YWNobWVudHMsIGdsb2JhbENvbG9yU3BhY2VDYWNoZV0pID0+ICh7CiAgICAgIHBkZk1hbmFnZXIsCiAgICAgIGFjcm9Gb3JtOiBhY3JvRm9ybSBpbnN0YW5jZW9mIERpY3QgPyBhY3JvRm9ybSA6IERpY3QuZW1wdHksCiAgICAgIHhmYURhdGFzZXRzLAogICAgICBzdHJ1Y3RUcmVlUm9vdCwKICAgICAgYmFzZVVybCwKICAgICAgYXR0YWNobWVudHMsCiAgICAgIGdsb2JhbENvbG9yU3BhY2VDYWNoZQogICAgfSksIHJlYXNvbiA9PiB7CiAgICAgIHdhcm4oYGNyZWF0ZUdsb2JhbHM6ICIke3JlYXNvbn0iLmApOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0pOwogIH0KICBzdGF0aWMgYXN5bmMgY3JlYXRlKHhyZWYsIHJlZiwgYW5ub3RhdGlvbkdsb2JhbHMsIGlkRmFjdG9yeSwgY29sbGVjdEZpZWxkcywgb3JwaGFuRmllbGRzLCBwYWdlUmVmKSB7CiAgICBjb25zdCBwYWdlSW5kZXggPSBjb2xsZWN0RmllbGRzID8gYXdhaXQgdGhpcy5fZ2V0UGFnZUluZGV4KHhyZWYsIHJlZiwgYW5ub3RhdGlvbkdsb2JhbHMucGRmTWFuYWdlcikgOiBudWxsOwogICAgcmV0dXJuIGFubm90YXRpb25HbG9iYWxzLnBkZk1hbmFnZXIuZW5zdXJlKHRoaXMsICJfY3JlYXRlIiwgW3hyZWYsIHJlZiwgYW5ub3RhdGlvbkdsb2JhbHMsIGlkRmFjdG9yeSwgY29sbGVjdEZpZWxkcywgb3JwaGFuRmllbGRzLCBwYWdlSW5kZXgsIHBhZ2VSZWZdKTsKICB9CiAgc3RhdGljIF9jcmVhdGUoeHJlZiwgcmVmLCBhbm5vdGF0aW9uR2xvYmFscywgaWRGYWN0b3J5LCBjb2xsZWN0RmllbGRzID0gZmFsc2UsIG9ycGhhbkZpZWxkcyA9IG51bGwsIHBhZ2VJbmRleCA9IG51bGwsIHBhZ2VSZWYgPSBudWxsKSB7CiAgICBjb25zdCBkaWN0ID0geHJlZi5mZXRjaElmUmVmKHJlZik7CiAgICBpZiAoIShkaWN0IGluc3RhbmNlb2YgRGljdCkpIHsKICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgIH0KICAgIGNvbnN0IHsKICAgICAgYWNyb0Zvcm0sCiAgICAgIHBkZk1hbmFnZXIKICAgIH0gPSBhbm5vdGF0aW9uR2xvYmFsczsKICAgIGNvbnN0IGlkID0gcmVmIGluc3RhbmNlb2YgUmVmID8gcmVmLnRvU3RyaW5nKCkgOiBgYW5ub3RfJHtpZEZhY3RvcnkuY3JlYXRlT2JqSWQoKX1gOwogICAgbGV0IHN1YnR5cGUgPSBkaWN0LmdldCgiU3VidHlwZSIpOwogICAgc3VidHlwZSA9IHN1YnR5cGUgaW5zdGFuY2VvZiBOYW1lID8gc3VidHlwZS5uYW1lIDogbnVsbDsKICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB7CiAgICAgIHhyZWYsCiAgICAgIHJlZiwKICAgICAgZGljdCwKICAgICAgc3VidHlwZSwKICAgICAgaWQsCiAgICAgIGFubm90YXRpb25HbG9iYWxzLAogICAgICBjb2xsZWN0RmllbGRzLAogICAgICBvcnBoYW5GaWVsZHMsCiAgICAgIG5lZWRBcHBlYXJhbmNlczogIWNvbGxlY3RGaWVsZHMgJiYgYWNyb0Zvcm0uZ2V0KCJOZWVkQXBwZWFyYW5jZXMiKSA9PT0gdHJ1ZSwKICAgICAgcGFnZUluZGV4LAogICAgICBldmFsdWF0b3JPcHRpb25zOiBwZGZNYW5hZ2VyLmV2YWx1YXRvck9wdGlvbnMsCiAgICAgIHBhZ2VSZWYKICAgIH07CiAgICBzd2l0Y2ggKHN1YnR5cGUpIHsKICAgICAgY2FzZSAiTGluayI6CiAgICAgICAgcmV0dXJuIG5ldyBMaW5rQW5ub3RhdGlvbihwYXJhbWV0ZXJzKTsKICAgICAgY2FzZSAiVGV4dCI6CiAgICAgICAgcmV0dXJuIG5ldyBUZXh0QW5ub3RhdGlvbihwYXJhbWV0ZXJzKTsKICAgICAgY2FzZSAiV2lkZ2V0IjoKICAgICAgICBsZXQgZmllbGRUeXBlID0gZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSh7CiAgICAgICAgICBkaWN0LAogICAgICAgICAga2V5OiAiRlQiCiAgICAgICAgfSk7CiAgICAgICAgZmllbGRUeXBlID0gZmllbGRUeXBlIGluc3RhbmNlb2YgTmFtZSA/IGZpZWxkVHlwZS5uYW1lIDogbnVsbDsKICAgICAgICBzd2l0Y2ggKGZpZWxkVHlwZSkgewogICAgICAgICAgY2FzZSAiVHgiOgogICAgICAgICAgICByZXR1cm4gbmV3IFRleHRXaWRnZXRBbm5vdGF0aW9uKHBhcmFtZXRlcnMpOwogICAgICAgICAgY2FzZSAiQnRuIjoKICAgICAgICAgICAgcmV0dXJuIG5ldyBCdXR0b25XaWRnZXRBbm5vdGF0aW9uKHBhcmFtZXRlcnMpOwogICAgICAgICAgY2FzZSAiQ2giOgogICAgICAgICAgICByZXR1cm4gbmV3IENob2ljZVdpZGdldEFubm90YXRpb24ocGFyYW1ldGVycyk7CiAgICAgICAgICBjYXNlICJTaWciOgogICAgICAgICAgICByZXR1cm4gbmV3IFNpZ25hdHVyZVdpZGdldEFubm90YXRpb24ocGFyYW1ldGVycyk7CiAgICAgICAgfQogICAgICAgIHdhcm4oYFVuaW1wbGVtZW50ZWQgd2lkZ2V0IGZpZWxkIHR5cGUgIiR7ZmllbGRUeXBlfSIsIGAgKyAiZmFsbGluZyBiYWNrIHRvIGJhc2UgZmllbGQgdHlwZS4iKTsKICAgICAgICByZXR1cm4gbmV3IFdpZGdldEFubm90YXRpb24ocGFyYW1ldGVycyk7CiAgICAgIGNhc2UgIlBvcHVwIjoKICAgICAgICByZXR1cm4gbmV3IFBvcHVwQW5ub3RhdGlvbihwYXJhbWV0ZXJzKTsKICAgICAgY2FzZSAiRnJlZVRleHQiOgogICAgICAgIHJldHVybiBuZXcgRnJlZVRleHRBbm5vdGF0aW9uKHBhcmFtZXRlcnMpOwogICAgICBjYXNlICJMaW5lIjoKICAgICAgICByZXR1cm4gbmV3IExpbmVBbm5vdGF0aW9uKHBhcmFtZXRlcnMpOwogICAgICBjYXNlICJTcXVhcmUiOgogICAgICAgIHJldHVybiBuZXcgU3F1YXJlQW5ub3RhdGlvbihwYXJhbWV0ZXJzKTsKICAgICAgY2FzZSAiQ2lyY2xlIjoKICAgICAgICByZXR1cm4gbmV3IENpcmNsZUFubm90YXRpb24ocGFyYW1ldGVycyk7CiAgICAgIGNhc2UgIlBvbHlMaW5lIjoKICAgICAgICByZXR1cm4gbmV3IFBvbHlsaW5lQW5ub3RhdGlvbihwYXJhbWV0ZXJzKTsKICAgICAgY2FzZSAiUG9seWdvbiI6CiAgICAgICAgcmV0dXJuIG5ldyBQb2x5Z29uQW5ub3RhdGlvbihwYXJhbWV0ZXJzKTsKICAgICAgY2FzZSAiQ2FyZXQiOgogICAgICAgIHJldHVybiBuZXcgQ2FyZXRBbm5vdGF0aW9uKHBhcmFtZXRlcnMpOwogICAgICBjYXNlICJJbmsiOgogICAgICAgIHJldHVybiBuZXcgSW5rQW5ub3RhdGlvbihwYXJhbWV0ZXJzKTsKICAgICAgY2FzZSAiSGlnaGxpZ2h0IjoKICAgICAgICByZXR1cm4gbmV3IEhpZ2hsaWdodEFubm90YXRpb24ocGFyYW1ldGVycyk7CiAgICAgIGNhc2UgIlVuZGVybGluZSI6CiAgICAgICAgcmV0dXJuIG5ldyBVbmRlcmxpbmVBbm5vdGF0aW9uKHBhcmFtZXRlcnMpOwogICAgICBjYXNlICJTcXVpZ2dseSI6CiAgICAgICAgcmV0dXJuIG5ldyBTcXVpZ2dseUFubm90YXRpb24ocGFyYW1ldGVycyk7CiAgICAgIGNhc2UgIlN0cmlrZU91dCI6CiAgICAgICAgcmV0dXJuIG5ldyBTdHJpa2VPdXRBbm5vdGF0aW9uKHBhcmFtZXRlcnMpOwogICAgICBjYXNlICJTdGFtcCI6CiAgICAgICAgcmV0dXJuIG5ldyBTdGFtcEFubm90YXRpb24ocGFyYW1ldGVycyk7CiAgICAgIGNhc2UgIkZpbGVBdHRhY2htZW50IjoKICAgICAgICByZXR1cm4gbmV3IEZpbGVBdHRhY2htZW50QW5ub3RhdGlvbihwYXJhbWV0ZXJzKTsKICAgICAgZGVmYXVsdDoKICAgICAgICBpZiAoIWNvbGxlY3RGaWVsZHMpIHsKICAgICAgICAgIGlmICghc3VidHlwZSkgewogICAgICAgICAgICB3YXJuKCJBbm5vdGF0aW9uIGlzIG1pc3NpbmcgdGhlIHJlcXVpcmVkIC9TdWJ0eXBlLiIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgd2FybihgVW5pbXBsZW1lbnRlZCBhbm5vdGF0aW9uIHR5cGUgIiR7c3VidHlwZX0iLCBgICsgImZhbGxpbmcgYmFjayB0byBiYXNlIGFubm90YXRpb24uIik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgQW5ub3RhdGlvbihwYXJhbWV0ZXJzKTsKICAgIH0KICB9CiAgc3RhdGljIGFzeW5jIF9nZXRQYWdlSW5kZXgoeHJlZiwgcmVmLCBwZGZNYW5hZ2VyKSB7CiAgICB0cnkgewogICAgICBjb25zdCBhbm5vdERpY3QgPSBhd2FpdCB4cmVmLmZldGNoSWZSZWZBc3luYyhyZWYpOwogICAgICBpZiAoIShhbm5vdERpY3QgaW5zdGFuY2VvZiBEaWN0KSkgewogICAgICAgIHJldHVybiAtMTsKICAgICAgfQogICAgICBjb25zdCBwYWdlUmVmID0gYW5ub3REaWN0LmdldFJhdygiUCIpOwogICAgICBpZiAocGFnZVJlZiBpbnN0YW5jZW9mIFJlZikgewogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCBwYWdlSW5kZXggPSBhd2FpdCBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coImdldFBhZ2VJbmRleCIsIFtwYWdlUmVmXSk7CiAgICAgICAgICByZXR1cm4gcGFnZUluZGV4OwogICAgICAgIH0gY2F0Y2ggKGV4KSB7CiAgICAgICAgICBpbmZvKGBfZ2V0UGFnZUluZGV4IC0tIG5vdCBhIHZhbGlkIHBhZ2UgcmVmZXJlbmNlOiAiJHtleH0iLmApOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoYW5ub3REaWN0LmhhcygiS2lkcyIpKSB7CiAgICAgICAgcmV0dXJuIC0xOwogICAgICB9CiAgICAgIGNvbnN0IG51bVBhZ2VzID0gYXdhaXQgcGRmTWFuYWdlci5lbnN1cmVEb2MoIm51bVBhZ2VzIik7CiAgICAgIGZvciAobGV0IHBhZ2VJbmRleCA9IDA7IHBhZ2VJbmRleCA8IG51bVBhZ2VzOyBwYWdlSW5kZXgrKykgewogICAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCBwZGZNYW5hZ2VyLmdldFBhZ2UocGFnZUluZGV4KTsKICAgICAgICBjb25zdCBhbm5vdGF0aW9ucyA9IGF3YWl0IHBkZk1hbmFnZXIuZW5zdXJlKHBhZ2UsICJhbm5vdGF0aW9ucyIpOwogICAgICAgIGZvciAoY29uc3QgYW5ub3RSZWYgb2YgYW5ub3RhdGlvbnMpIHsKICAgICAgICAgIGlmIChhbm5vdFJlZiBpbnN0YW5jZW9mIFJlZiAmJiBpc1JlZnNFcXVhbChhbm5vdFJlZiwgcmVmKSkgewogICAgICAgICAgICByZXR1cm4gcGFnZUluZGV4OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSBjYXRjaCAoZXgpIHsKICAgICAgd2FybihgX2dldFBhZ2VJbmRleDogIiR7ZXh9Ii5gKTsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CiAgc3RhdGljIGdlbmVyYXRlSW1hZ2VzKGFubm90YXRpb25zLCB4cmVmLCBpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCkgewogICAgaWYgKCFpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCkgewogICAgICB3YXJuKCJnZW5lcmF0ZUltYWdlczogT2Zmc2NyZWVuQ2FudmFzIGlzIG5vdCBzdXBwb3J0ZWQsIGNhbm5vdCBzYXZlIG9yIHByaW50IHNvbWUgYW5ub3RhdGlvbnMgd2l0aCBpbWFnZXMuIik7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgbGV0IGltYWdlUHJvbWlzZXM7CiAgICBmb3IgKGNvbnN0IHsKICAgICAgYml0bWFwSWQsCiAgICAgIGJpdG1hcAogICAgfSBvZiBhbm5vdGF0aW9ucykgewogICAgICBpZiAoIWJpdG1hcCkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGltYWdlUHJvbWlzZXMgfHw9IG5ldyBNYXAoKTsKICAgICAgaW1hZ2VQcm9taXNlcy5zZXQoYml0bWFwSWQsIFN0YW1wQW5ub3RhdGlvbi5jcmVhdGVJbWFnZShiaXRtYXAsIHhyZWYpKTsKICAgIH0KICAgIHJldHVybiBpbWFnZVByb21pc2VzOwogIH0KICBzdGF0aWMgYXN5bmMgc2F2ZU5ld0Fubm90YXRpb25zKGV2YWx1YXRvciwgdGFzaywgYW5ub3RhdGlvbnMsIGltYWdlUHJvbWlzZXMsIGNoYW5nZXMpIHsKICAgIGNvbnN0IHhyZWYgPSBldmFsdWF0b3IueHJlZjsKICAgIGxldCBiYXNlRm9udFJlZjsKICAgIGNvbnN0IHByb21pc2VzID0gW107CiAgICBjb25zdCB7CiAgICAgIGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkCiAgICB9ID0gZXZhbHVhdG9yLm9wdGlvbnM7CiAgICBmb3IgKGNvbnN0IGFubm90YXRpb24gb2YgYW5ub3RhdGlvbnMpIHsKICAgICAgaWYgKGFubm90YXRpb24uZGVsZXRlZCkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIHN3aXRjaCAoYW5ub3RhdGlvbi5hbm5vdGF0aW9uVHlwZSkgewogICAgICAgIGNhc2UgQW5ub3RhdGlvbkVkaXRvclR5cGUuRlJFRVRFWFQ6CiAgICAgICAgICBpZiAoIWJhc2VGb250UmVmKSB7CiAgICAgICAgICAgIGNvbnN0IGJhc2VGb250ID0gbmV3IERpY3QoeHJlZik7CiAgICAgICAgICAgIGJhc2VGb250LnNldCgiQmFzZUZvbnQiLCBOYW1lLmdldCgiSGVsdmV0aWNhIikpOwogICAgICAgICAgICBiYXNlRm9udC5zZXQoIlR5cGUiLCBOYW1lLmdldCgiRm9udCIpKTsKICAgICAgICAgICAgYmFzZUZvbnQuc2V0KCJTdWJ0eXBlIiwgTmFtZS5nZXQoIlR5cGUxIikpOwogICAgICAgICAgICBiYXNlRm9udC5zZXQoIkVuY29kaW5nIiwgTmFtZS5nZXQoIldpbkFuc2lFbmNvZGluZyIpKTsKICAgICAgICAgICAgYmFzZUZvbnRSZWYgPSB4cmVmLmdldE5ld1RlbXBvcmFyeVJlZigpOwogICAgICAgICAgICBjaGFuZ2VzLnB1dChiYXNlRm9udFJlZiwgewogICAgICAgICAgICAgIGRhdGE6IGJhc2VGb250CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgICAgcHJvbWlzZXMucHVzaChGcmVlVGV4dEFubm90YXRpb24uY3JlYXRlTmV3QW5ub3RhdGlvbih4cmVmLCBhbm5vdGF0aW9uLCBjaGFuZ2VzLCB7CiAgICAgICAgICAgIGV2YWx1YXRvciwKICAgICAgICAgICAgdGFzaywKICAgICAgICAgICAgYmFzZUZvbnRSZWYKICAgICAgICAgIH0pKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgQW5ub3RhdGlvbkVkaXRvclR5cGUuSElHSExJR0hUOgogICAgICAgICAgaWYgKGFubm90YXRpb24ucXVhZFBvaW50cykgewogICAgICAgICAgICBwcm9taXNlcy5wdXNoKEhpZ2hsaWdodEFubm90YXRpb24uY3JlYXRlTmV3QW5ub3RhdGlvbih4cmVmLCBhbm5vdGF0aW9uLCBjaGFuZ2VzKSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwcm9taXNlcy5wdXNoKElua0Fubm90YXRpb24uY3JlYXRlTmV3QW5ub3RhdGlvbih4cmVmLCBhbm5vdGF0aW9uLCBjaGFuZ2VzKSk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEFubm90YXRpb25FZGl0b3JUeXBlLklOSzoKICAgICAgICAgIHByb21pc2VzLnB1c2goSW5rQW5ub3RhdGlvbi5jcmVhdGVOZXdBbm5vdGF0aW9uKHhyZWYsIGFubm90YXRpb24sIGNoYW5nZXMpKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgQW5ub3RhdGlvbkVkaXRvclR5cGUuU1RBTVA6CiAgICAgICAgICBjb25zdCBpbWFnZSA9IGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkID8gYXdhaXQgaW1hZ2VQcm9taXNlcz8uZ2V0KGFubm90YXRpb24uYml0bWFwSWQpIDogbnVsbDsKICAgICAgICAgIGlmIChpbWFnZT8uaW1hZ2VTdHJlYW0pIHsKICAgICAgICAgICAgY29uc3QgewogICAgICAgICAgICAgIGltYWdlU3RyZWFtLAogICAgICAgICAgICAgIHNtYXNrU3RyZWFtCiAgICAgICAgICAgIH0gPSBpbWFnZTsKICAgICAgICAgICAgaWYgKHNtYXNrU3RyZWFtKSB7CiAgICAgICAgICAgICAgY29uc3Qgc21hc2tSZWYgPSB4cmVmLmdldE5ld1RlbXBvcmFyeVJlZigpOwogICAgICAgICAgICAgIGNoYW5nZXMucHV0KHNtYXNrUmVmLCB7CiAgICAgICAgICAgICAgICBkYXRhOiBzbWFza1N0cmVhbQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIGltYWdlU3RyZWFtLmRpY3Quc2V0KCJTTWFzayIsIHNtYXNrUmVmKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCBpbWFnZVJlZiA9IGltYWdlLmltYWdlUmVmID0geHJlZi5nZXROZXdUZW1wb3JhcnlSZWYoKTsKICAgICAgICAgICAgY2hhbmdlcy5wdXQoaW1hZ2VSZWYsIHsKICAgICAgICAgICAgICBkYXRhOiBpbWFnZVN0cmVhbQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaW1hZ2UuaW1hZ2VTdHJlYW0gPSBpbWFnZS5zbWFza1N0cmVhbSA9IG51bGw7CiAgICAgICAgICB9CiAgICAgICAgICBwcm9taXNlcy5wdXNoKFN0YW1wQW5ub3RhdGlvbi5jcmVhdGVOZXdBbm5vdGF0aW9uKHhyZWYsIGFubm90YXRpb24sIGNoYW5nZXMsIHsKICAgICAgICAgICAgaW1hZ2UKICAgICAgICAgIH0pKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgQW5ub3RhdGlvbkVkaXRvclR5cGUuU0lHTkFUVVJFOgogICAgICAgICAgcHJvbWlzZXMucHVzaChTdGFtcEFubm90YXRpb24uY3JlYXRlTmV3QW5ub3RhdGlvbih4cmVmLCBhbm5vdGF0aW9uLCBjaGFuZ2VzLCB7fSkpOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB7CiAgICAgIGFubm90YXRpb25zOiBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcykKICAgIH07CiAgfQogIHN0YXRpYyBhc3luYyBwcmludE5ld0Fubm90YXRpb25zKGFubm90YXRpb25HbG9iYWxzLCBldmFsdWF0b3IsIHRhc2ssIGFubm90YXRpb25zLCBpbWFnZVByb21pc2VzKSB7CiAgICBpZiAoIWFubm90YXRpb25zKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3QgewogICAgICBvcHRpb25zLAogICAgICB4cmVmCiAgICB9ID0gZXZhbHVhdG9yOwogICAgY29uc3QgcHJvbWlzZXMgPSBbXTsKICAgIGZvciAoY29uc3QgYW5ub3RhdGlvbiBvZiBhbm5vdGF0aW9ucykgewogICAgICBpZiAoYW5ub3RhdGlvbi5kZWxldGVkKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgc3dpdGNoIChhbm5vdGF0aW9uLmFubm90YXRpb25UeXBlKSB7CiAgICAgICAgY2FzZSBBbm5vdGF0aW9uRWRpdG9yVHlwZS5GUkVFVEVYVDoKICAgICAgICAgIHByb21pc2VzLnB1c2goRnJlZVRleHRBbm5vdGF0aW9uLmNyZWF0ZU5ld1ByaW50QW5ub3RhdGlvbihhbm5vdGF0aW9uR2xvYmFscywgeHJlZiwgYW5ub3RhdGlvbiwgewogICAgICAgICAgICBldmFsdWF0b3IsCiAgICAgICAgICAgIHRhc2ssCiAgICAgICAgICAgIGV2YWx1YXRvck9wdGlvbnM6IG9wdGlvbnMKICAgICAgICAgIH0pKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgQW5ub3RhdGlvbkVkaXRvclR5cGUuSElHSExJR0hUOgogICAgICAgICAgaWYgKGFubm90YXRpb24ucXVhZFBvaW50cykgewogICAgICAgICAgICBwcm9taXNlcy5wdXNoKEhpZ2hsaWdodEFubm90YXRpb24uY3JlYXRlTmV3UHJpbnRBbm5vdGF0aW9uKGFubm90YXRpb25HbG9iYWxzLCB4cmVmLCBhbm5vdGF0aW9uLCB7CiAgICAgICAgICAgICAgZXZhbHVhdG9yT3B0aW9uczogb3B0aW9ucwogICAgICAgICAgICB9KSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwcm9taXNlcy5wdXNoKElua0Fubm90YXRpb24uY3JlYXRlTmV3UHJpbnRBbm5vdGF0aW9uKGFubm90YXRpb25HbG9iYWxzLCB4cmVmLCBhbm5vdGF0aW9uLCB7CiAgICAgICAgICAgICAgZXZhbHVhdG9yT3B0aW9uczogb3B0aW9ucwogICAgICAgICAgICB9KSk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEFubm90YXRpb25FZGl0b3JUeXBlLklOSzoKICAgICAgICAgIHByb21pc2VzLnB1c2goSW5rQW5ub3RhdGlvbi5jcmVhdGVOZXdQcmludEFubm90YXRpb24oYW5ub3RhdGlvbkdsb2JhbHMsIHhyZWYsIGFubm90YXRpb24sIHsKICAgICAgICAgICAgZXZhbHVhdG9yT3B0aW9uczogb3B0aW9ucwogICAgICAgICAgfSkpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBBbm5vdGF0aW9uRWRpdG9yVHlwZS5TVEFNUDoKICAgICAgICAgIGNvbnN0IGltYWdlID0gb3B0aW9ucy5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCA/IGF3YWl0IGltYWdlUHJvbWlzZXM/LmdldChhbm5vdGF0aW9uLmJpdG1hcElkKSA6IG51bGw7CiAgICAgICAgICBpZiAoaW1hZ2U/LmltYWdlU3RyZWFtKSB7CiAgICAgICAgICAgIGNvbnN0IHsKICAgICAgICAgICAgICBpbWFnZVN0cmVhbSwKICAgICAgICAgICAgICBzbWFza1N0cmVhbQogICAgICAgICAgICB9ID0gaW1hZ2U7CiAgICAgICAgICAgIGlmIChzbWFza1N0cmVhbSkgewogICAgICAgICAgICAgIGltYWdlU3RyZWFtLmRpY3Quc2V0KCJTTWFzayIsIHNtYXNrU3RyZWFtKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpbWFnZS5pbWFnZVJlZiA9IG5ldyBKcGVnU3RyZWFtKGltYWdlU3RyZWFtLCBpbWFnZVN0cmVhbS5sZW5ndGgpOwogICAgICAgICAgICBpbWFnZS5pbWFnZVN0cmVhbSA9IGltYWdlLnNtYXNrU3RyZWFtID0gbnVsbDsKICAgICAgICAgIH0KICAgICAgICAgIHByb21pc2VzLnB1c2goU3RhbXBBbm5vdGF0aW9uLmNyZWF0ZU5ld1ByaW50QW5ub3RhdGlvbihhbm5vdGF0aW9uR2xvYmFscywgeHJlZiwgYW5ub3RhdGlvbiwgewogICAgICAgICAgICBpbWFnZSwKICAgICAgICAgICAgZXZhbHVhdG9yT3B0aW9uczogb3B0aW9ucwogICAgICAgICAgfSkpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBBbm5vdGF0aW9uRWRpdG9yVHlwZS5TSUdOQVRVUkU6CiAgICAgICAgICBwcm9taXNlcy5wdXNoKFN0YW1wQW5ub3RhdGlvbi5jcmVhdGVOZXdQcmludEFubm90YXRpb24oYW5ub3RhdGlvbkdsb2JhbHMsIHhyZWYsIGFubm90YXRpb24sIHsKICAgICAgICAgICAgZXZhbHVhdG9yT3B0aW9uczogb3B0aW9ucwogICAgICAgICAgfSkpOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7CiAgfQp9CmZ1bmN0aW9uIGdldFJnYkNvbG9yKGNvbG9yLCBkZWZhdWx0Q29sb3IgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkoMykpIHsKICBpZiAoIUFycmF5LmlzQXJyYXkoY29sb3IpKSB7CiAgICByZXR1cm4gZGVmYXVsdENvbG9yOwogIH0KICBjb25zdCByZ2JDb2xvciA9IGRlZmF1bHRDb2xvciB8fCBuZXcgVWludDhDbGFtcGVkQXJyYXkoMyk7CiAgc3dpdGNoIChjb2xvci5sZW5ndGgpIHsKICAgIGNhc2UgMDoKICAgICAgcmV0dXJuIG51bGw7CiAgICBjYXNlIDE6CiAgICAgIENvbG9yU3BhY2VVdGlscy5ncmF5LmdldFJnYkl0ZW0oY29sb3IsIDAsIHJnYkNvbG9yLCAwKTsKICAgICAgcmV0dXJuIHJnYkNvbG9yOwogICAgY2FzZSAzOgogICAgICBDb2xvclNwYWNlVXRpbHMucmdiLmdldFJnYkl0ZW0oY29sb3IsIDAsIHJnYkNvbG9yLCAwKTsKICAgICAgcmV0dXJuIHJnYkNvbG9yOwogICAgY2FzZSA0OgogICAgICBDb2xvclNwYWNlVXRpbHMuY215ay5nZXRSZ2JJdGVtKGNvbG9yLCAwLCByZ2JDb2xvciwgMCk7CiAgICAgIHJldHVybiByZ2JDb2xvcjsKICAgIGRlZmF1bHQ6CiAgICAgIHJldHVybiBkZWZhdWx0Q29sb3I7CiAgfQp9CmZ1bmN0aW9uIGdldFBkZkNvbG9yQXJyYXkoY29sb3IpIHsKICByZXR1cm4gQXJyYXkuZnJvbShjb2xvciwgYyA9PiBjIC8gMjU1KTsKfQpmdW5jdGlvbiBnZXRRdWFkUG9pbnRzKGRpY3QsIHJlY3QpIHsKICBjb25zdCBxdWFkUG9pbnRzID0gZGljdC5nZXRBcnJheSgiUXVhZFBvaW50cyIpOwogIGlmICghaXNOdW1iZXJBcnJheShxdWFkUG9pbnRzLCBudWxsKSB8fCBxdWFkUG9pbnRzLmxlbmd0aCA9PT0gMCB8fCBxdWFkUG9pbnRzLmxlbmd0aCAlIDggPiAwKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgY29uc3QgbmV3UXVhZFBvaW50cyA9IG5ldyBGbG9hdDMyQXJyYXkocXVhZFBvaW50cy5sZW5ndGgpOwogIGZvciAobGV0IGkgPSAwLCBpaSA9IHF1YWRQb2ludHMubGVuZ3RoOyBpIDwgaWk7IGkgKz0gOCkgewogICAgY29uc3QgW3gxLCB5MSwgeDIsIHkyLCB4MywgeTMsIHg0LCB5NF0gPSBxdWFkUG9pbnRzLnNsaWNlKGksIGkgKyA4KTsKICAgIGNvbnN0IG1pblggPSBNYXRoLm1pbih4MSwgeDIsIHgzLCB4NCk7CiAgICBjb25zdCBtYXhYID0gTWF0aC5tYXgoeDEsIHgyLCB4MywgeDQpOwogICAgY29uc3QgbWluWSA9IE1hdGgubWluKHkxLCB5MiwgeTMsIHk0KTsKICAgIGNvbnN0IG1heFkgPSBNYXRoLm1heCh5MSwgeTIsIHkzLCB5NCk7CiAgICBpZiAocmVjdCAhPT0gbnVsbCAmJiAobWluWCA8IHJlY3RbMF0gfHwgbWF4WCA+IHJlY3RbMl0gfHwgbWluWSA8IHJlY3RbMV0gfHwgbWF4WSA+IHJlY3RbM10pKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgbmV3UXVhZFBvaW50cy5zZXQoW21pblgsIG1heFksIG1heFgsIG1heFksIG1pblgsIG1pblksIG1heFgsIG1pblldLCBpKTsKICB9CiAgcmV0dXJuIG5ld1F1YWRQb2ludHM7Cn0KZnVuY3Rpb24gZ2V0VHJhbnNmb3JtTWF0cml4KHJlY3QsIGJib3gsIG1hdHJpeCkgewogIGNvbnN0IFttaW5YLCBtaW5ZLCBtYXhYLCBtYXhZXSA9IFV0aWwuZ2V0QXhpYWxBbGlnbmVkQm91bmRpbmdCb3goYmJveCwgbWF0cml4KTsKICBpZiAobWluWCA9PT0gbWF4WCB8fCBtaW5ZID09PSBtYXhZKSB7CiAgICByZXR1cm4gWzEsIDAsIDAsIDEsIHJlY3RbMF0sIHJlY3RbMV1dOwogIH0KICBjb25zdCB4UmF0aW8gPSAocmVjdFsyXSAtIHJlY3RbMF0pIC8gKG1heFggLSBtaW5YKTsKICBjb25zdCB5UmF0aW8gPSAocmVjdFszXSAtIHJlY3RbMV0pIC8gKG1heFkgLSBtaW5ZKTsKICByZXR1cm4gW3hSYXRpbywgMCwgMCwgeVJhdGlvLCByZWN0WzBdIC0gbWluWCAqIHhSYXRpbywgcmVjdFsxXSAtIG1pblkgKiB5UmF0aW9dOwp9CmNsYXNzIEFubm90YXRpb24gewogIGNvbnN0cnVjdG9yKHBhcmFtcykgewogICAgY29uc3QgewogICAgICBkaWN0LAogICAgICB4cmVmLAogICAgICBhbm5vdGF0aW9uR2xvYmFscywKICAgICAgcmVmLAogICAgICBvcnBoYW5GaWVsZHMKICAgIH0gPSBwYXJhbXM7CiAgICBjb25zdCBwYXJlbnRSZWYgPSBvcnBoYW5GaWVsZHM/LmdldChyZWYpOwogICAgaWYgKHBhcmVudFJlZikgewogICAgICBkaWN0LnNldCgiUGFyZW50IiwgcGFyZW50UmVmKTsKICAgIH0KICAgIHRoaXMuc2V0VGl0bGUoZGljdC5nZXQoIlQiKSk7CiAgICB0aGlzLnNldENvbnRlbnRzKGRpY3QuZ2V0KCJDb250ZW50cyIpKTsKICAgIHRoaXMuc2V0TW9kaWZpY2F0aW9uRGF0ZShkaWN0LmdldCgiTSIpKTsKICAgIHRoaXMuc2V0RmxhZ3MoZGljdC5nZXQoIkYiKSk7CiAgICB0aGlzLnNldFJlY3RhbmdsZShkaWN0LmdldEFycmF5KCJSZWN0IikpOwogICAgdGhpcy5zZXRDb2xvcihkaWN0LmdldEFycmF5KCJDIikpOwogICAgdGhpcy5zZXRCb3JkZXJTdHlsZShkaWN0KTsKICAgIHRoaXMuc2V0QXBwZWFyYW5jZShkaWN0KTsKICAgIHRoaXMuc2V0T3B0aW9uYWxDb250ZW50KGRpY3QpOwogICAgY29uc3QgTUsgPSBkaWN0LmdldCgiTUsiKTsKICAgIHRoaXMuc2V0Qm9yZGVyQW5kQmFja2dyb3VuZENvbG9ycyhNSyk7CiAgICB0aGlzLnNldFJvdGF0aW9uKE1LLCBkaWN0KTsKICAgIHRoaXMucmVmID0gcGFyYW1zLnJlZiBpbnN0YW5jZW9mIFJlZiA/IHBhcmFtcy5yZWYgOiBudWxsOwogICAgdGhpcy5fc3RyZWFtcyA9IFtdOwogICAgaWYgKHRoaXMuYXBwZWFyYW5jZSkgewogICAgICB0aGlzLl9zdHJlYW1zLnB1c2godGhpcy5hcHBlYXJhbmNlKTsKICAgIH0KICAgIGNvbnN0IGlzTG9ja2VkID0gISEodGhpcy5mbGFncyAmIEFubm90YXRpb25GbGFnLkxPQ0tFRCk7CiAgICBjb25zdCBpc0NvbnRlbnRMb2NrZWQgPSAhISh0aGlzLmZsYWdzICYgQW5ub3RhdGlvbkZsYWcuTE9DS0VEQ09OVEVOVFMpOwogICAgdGhpcy5kYXRhID0gewogICAgICBhbm5vdGF0aW9uRmxhZ3M6IHRoaXMuZmxhZ3MsCiAgICAgIGJvcmRlclN0eWxlOiB0aGlzLmJvcmRlclN0eWxlLAogICAgICBjb2xvcjogdGhpcy5jb2xvciwKICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLmJhY2tncm91bmRDb2xvciwKICAgICAgYm9yZGVyQ29sb3I6IHRoaXMuYm9yZGVyQ29sb3IsCiAgICAgIHJvdGF0aW9uOiB0aGlzLnJvdGF0aW9uLAogICAgICBjb250ZW50c09iajogdGhpcy5fY29udGVudHMsCiAgICAgIGhhc0FwcGVhcmFuY2U6ICEhdGhpcy5hcHBlYXJhbmNlLAogICAgICBpZDogcGFyYW1zLmlkLAogICAgICBtb2RpZmljYXRpb25EYXRlOiB0aGlzLm1vZGlmaWNhdGlvbkRhdGUsCiAgICAgIHJlY3Q6IHRoaXMucmVjdGFuZ2xlLAogICAgICBzdWJ0eXBlOiBwYXJhbXMuc3VidHlwZSwKICAgICAgaGFzT3duQ2FudmFzOiBmYWxzZSwKICAgICAgbm9Sb3RhdGU6ICEhKHRoaXMuZmxhZ3MgJiBBbm5vdGF0aW9uRmxhZy5OT1JPVEFURSksCiAgICAgIG5vSFRNTDogaXNMb2NrZWQgJiYgaXNDb250ZW50TG9ja2VkLAogICAgICBpc0VkaXRhYmxlOiBmYWxzZSwKICAgICAgc3RydWN0UGFyZW50OiAtMQogICAgfTsKICAgIGlmIChhbm5vdGF0aW9uR2xvYmFscy5zdHJ1Y3RUcmVlUm9vdCkgewogICAgICBsZXQgc3RydWN0UGFyZW50ID0gZGljdC5nZXQoIlN0cnVjdFBhcmVudCIpOwogICAgICB0aGlzLmRhdGEuc3RydWN0UGFyZW50ID0gc3RydWN0UGFyZW50ID0gTnVtYmVyLmlzSW50ZWdlcihzdHJ1Y3RQYXJlbnQpICYmIHN0cnVjdFBhcmVudCA+PSAwID8gc3RydWN0UGFyZW50IDogLTE7CiAgICAgIGFubm90YXRpb25HbG9iYWxzLnN0cnVjdFRyZWVSb290LmFkZEFubm90YXRpb25JZFRvUGFnZShwYXJhbXMucGFnZVJlZiwgc3RydWN0UGFyZW50KTsKICAgIH0KICAgIGlmIChwYXJhbXMuY29sbGVjdEZpZWxkcykgewogICAgICBjb25zdCBraWRzID0gZGljdC5nZXQoIktpZHMiKTsKICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2lkcykpIHsKICAgICAgICBjb25zdCBraWRJZHMgPSBbXTsKICAgICAgICBmb3IgKGNvbnN0IGtpZCBvZiBraWRzKSB7CiAgICAgICAgICBpZiAoa2lkIGluc3RhbmNlb2YgUmVmKSB7CiAgICAgICAgICAgIGtpZElkcy5wdXNoKGtpZC50b1N0cmluZygpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGtpZElkcy5sZW5ndGggIT09IDApIHsKICAgICAgICAgIHRoaXMuZGF0YS5raWRJZHMgPSBraWRJZHM7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMuZGF0YS5hY3Rpb25zID0gY29sbGVjdEFjdGlvbnMoeHJlZiwgZGljdCwgQW5ub3RhdGlvbkFjdGlvbkV2ZW50VHlwZSk7CiAgICAgIHRoaXMuZGF0YS5maWVsZE5hbWUgPSB0aGlzLl9jb25zdHJ1Y3RGaWVsZE5hbWUoZGljdCk7CiAgICAgIHRoaXMuZGF0YS5wYWdlSW5kZXggPSBwYXJhbXMucGFnZUluZGV4OwogICAgfQogICAgY29uc3QgaXQgPSBkaWN0LmdldCgiSVQiKTsKICAgIGlmIChpdCBpbnN0YW5jZW9mIE5hbWUpIHsKICAgICAgdGhpcy5kYXRhLml0ID0gaXQubmFtZTsKICAgIH0KICAgIHRoaXMuX2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkID0gcGFyYW1zLmV2YWx1YXRvck9wdGlvbnMuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ7CiAgICB0aGlzLl9mYWxsYmFja0ZvbnREaWN0ID0gbnVsbDsKICAgIHRoaXMuX25lZWRBcHBlYXJhbmNlcyA9IGZhbHNlOwogIH0KICBfaGFzRmxhZyhmbGFncywgZmxhZykgewogICAgcmV0dXJuICEhKGZsYWdzICYgZmxhZyk7CiAgfQogIF9idWlsZEZsYWdzKG5vVmlldywgbm9QcmludCkgewogICAgbGV0IHsKICAgICAgZmxhZ3MKICAgIH0gPSB0aGlzOwogICAgaWYgKG5vVmlldyA9PT0gdW5kZWZpbmVkKSB7CiAgICAgIGlmIChub1ByaW50ID09PSB1bmRlZmluZWQpIHsKICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgICB9CiAgICAgIGlmIChub1ByaW50KSB7CiAgICAgICAgcmV0dXJuIGZsYWdzICYgfkFubm90YXRpb25GbGFnLlBSSU5UOwogICAgICB9CiAgICAgIHJldHVybiBmbGFncyAmIH5Bbm5vdGF0aW9uRmxhZy5ISURERU4gfCBBbm5vdGF0aW9uRmxhZy5QUklOVDsKICAgIH0KICAgIGlmIChub1ZpZXcpIHsKICAgICAgZmxhZ3MgfD0gQW5ub3RhdGlvbkZsYWcuUFJJTlQ7CiAgICAgIGlmIChub1ByaW50KSB7CiAgICAgICAgcmV0dXJuIGZsYWdzICYgfkFubm90YXRpb25GbGFnLk5PVklFVyB8IEFubm90YXRpb25GbGFnLkhJRERFTjsKICAgICAgfQogICAgICByZXR1cm4gZmxhZ3MgJiB+QW5ub3RhdGlvbkZsYWcuSElEREVOIHwgQW5ub3RhdGlvbkZsYWcuTk9WSUVXOwogICAgfQogICAgZmxhZ3MgJj0gfihBbm5vdGF0aW9uRmxhZy5ISURERU4gfCBBbm5vdGF0aW9uRmxhZy5OT1ZJRVcpOwogICAgaWYgKG5vUHJpbnQpIHsKICAgICAgcmV0dXJuIGZsYWdzICYgfkFubm90YXRpb25GbGFnLlBSSU5UOwogICAgfQogICAgcmV0dXJuIGZsYWdzIHwgQW5ub3RhdGlvbkZsYWcuUFJJTlQ7CiAgfQogIF9pc1ZpZXdhYmxlKGZsYWdzKSB7CiAgICByZXR1cm4gIXRoaXMuX2hhc0ZsYWcoZmxhZ3MsIEFubm90YXRpb25GbGFnLklOVklTSUJMRSkgJiYgIXRoaXMuX2hhc0ZsYWcoZmxhZ3MsIEFubm90YXRpb25GbGFnLk5PVklFVyk7CiAgfQogIF9pc1ByaW50YWJsZShmbGFncykgewogICAgcmV0dXJuIHRoaXMuX2hhc0ZsYWcoZmxhZ3MsIEFubm90YXRpb25GbGFnLlBSSU5UKSAmJiAhdGhpcy5faGFzRmxhZyhmbGFncywgQW5ub3RhdGlvbkZsYWcuSElEREVOKSAmJiAhdGhpcy5faGFzRmxhZyhmbGFncywgQW5ub3RhdGlvbkZsYWcuSU5WSVNJQkxFKTsKICB9CiAgbXVzdEJlVmlld2VkKGFubm90YXRpb25TdG9yYWdlLCBfcmVuZGVyRm9ybXMpIHsKICAgIGNvbnN0IG5vVmlldyA9IGFubm90YXRpb25TdG9yYWdlPy5nZXQodGhpcy5kYXRhLmlkKT8ubm9WaWV3OwogICAgaWYgKG5vVmlldyAhPT0gdW5kZWZpbmVkKSB7CiAgICAgIHJldHVybiAhbm9WaWV3OwogICAgfQogICAgcmV0dXJuIHRoaXMudmlld2FibGUgJiYgIXRoaXMuX2hhc0ZsYWcodGhpcy5mbGFncywgQW5ub3RhdGlvbkZsYWcuSElEREVOKTsKICB9CiAgbXVzdEJlUHJpbnRlZChhbm5vdGF0aW9uU3RvcmFnZSkgewogICAgY29uc3Qgbm9QcmludCA9IGFubm90YXRpb25TdG9yYWdlPy5nZXQodGhpcy5kYXRhLmlkKT8ubm9QcmludDsKICAgIGlmIChub1ByaW50ICE9PSB1bmRlZmluZWQpIHsKICAgICAgcmV0dXJuICFub1ByaW50OwogICAgfQogICAgcmV0dXJuIHRoaXMucHJpbnRhYmxlOwogIH0KICBtdXN0QmVWaWV3ZWRXaGVuRWRpdGluZyhpc0VkaXRpbmcsIG1vZGlmaWVkSWRzID0gbnVsbCkgewogICAgcmV0dXJuIGlzRWRpdGluZyA/ICF0aGlzLmRhdGEuaXNFZGl0YWJsZSA6ICFtb2RpZmllZElkcz8uaGFzKHRoaXMuZGF0YS5pZCk7CiAgfQogIGdldCB2aWV3YWJsZSgpIHsKICAgIGlmICh0aGlzLmRhdGEucXVhZFBvaW50cyA9PT0gbnVsbCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAodGhpcy5mbGFncyA9PT0gMCkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiB0aGlzLl9pc1ZpZXdhYmxlKHRoaXMuZmxhZ3MpOwogIH0KICBnZXQgcHJpbnRhYmxlKCkgewogICAgaWYgKHRoaXMuZGF0YS5xdWFkUG9pbnRzID09PSBudWxsKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmICh0aGlzLmZsYWdzID09PSAwKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0aGlzLl9pc1ByaW50YWJsZSh0aGlzLmZsYWdzKTsKICB9CiAgX3BhcnNlU3RyaW5nSGVscGVyKGRhdGEpIHsKICAgIGNvbnN0IHN0ciA9IHR5cGVvZiBkYXRhID09PSAic3RyaW5nIiA/IHN0cmluZ1RvUERGU3RyaW5nKGRhdGEpIDogIiI7CiAgICBjb25zdCBkaXIgPSBzdHIgJiYgYmlkaShzdHIpLmRpciA9PT0gInJ0bCIgPyAicnRsIiA6ICJsdHIiOwogICAgcmV0dXJuIHsKICAgICAgc3RyLAogICAgICBkaXIKICAgIH07CiAgfQogIHNldERlZmF1bHRBcHBlYXJhbmNlKHBhcmFtcykgewogICAgY29uc3QgewogICAgICBkaWN0LAogICAgICBhbm5vdGF0aW9uR2xvYmFscwogICAgfSA9IHBhcmFtczsKICAgIGNvbnN0IGRlZmF1bHRBcHBlYXJhbmNlID0gZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSh7CiAgICAgIGRpY3QsCiAgICAgIGtleTogIkRBIgogICAgfSkgfHwgYW5ub3RhdGlvbkdsb2JhbHMuYWNyb0Zvcm0uZ2V0KCJEQSIpOwogICAgdGhpcy5fZGVmYXVsdEFwcGVhcmFuY2UgPSB0eXBlb2YgZGVmYXVsdEFwcGVhcmFuY2UgPT09ICJzdHJpbmciID8gZGVmYXVsdEFwcGVhcmFuY2UgOiAiIjsKICAgIHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEgPSBwYXJzZURlZmF1bHRBcHBlYXJhbmNlKHRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlKTsKICB9CiAgc2V0VGl0bGUodGl0bGUpIHsKICAgIHRoaXMuX3RpdGxlID0gdGhpcy5fcGFyc2VTdHJpbmdIZWxwZXIodGl0bGUpOwogIH0KICBzZXRDb250ZW50cyhjb250ZW50cykgewogICAgdGhpcy5fY29udGVudHMgPSB0aGlzLl9wYXJzZVN0cmluZ0hlbHBlcihjb250ZW50cyk7CiAgfQogIHNldE1vZGlmaWNhdGlvbkRhdGUobW9kaWZpY2F0aW9uRGF0ZSkgewogICAgdGhpcy5tb2RpZmljYXRpb25EYXRlID0gdHlwZW9mIG1vZGlmaWNhdGlvbkRhdGUgPT09ICJzdHJpbmciID8gbW9kaWZpY2F0aW9uRGF0ZSA6IG51bGw7CiAgfQogIHNldEZsYWdzKGZsYWdzKSB7CiAgICB0aGlzLmZsYWdzID0gTnVtYmVyLmlzSW50ZWdlcihmbGFncykgJiYgZmxhZ3MgPiAwID8gZmxhZ3MgOiAwOwogICAgaWYgKHRoaXMuZmxhZ3MgJiBBbm5vdGF0aW9uRmxhZy5JTlZJU0lCTEUgJiYgdGhpcy5jb25zdHJ1Y3Rvci5uYW1lICE9PSAiQW5ub3RhdGlvbiIpIHsKICAgICAgdGhpcy5mbGFncyBePSBBbm5vdGF0aW9uRmxhZy5JTlZJU0lCTEU7CiAgICB9CiAgfQogIGhhc0ZsYWcoZmxhZykgewogICAgcmV0dXJuIHRoaXMuX2hhc0ZsYWcodGhpcy5mbGFncywgZmxhZyk7CiAgfQogIHNldFJlY3RhbmdsZShyZWN0YW5nbGUpIHsKICAgIHRoaXMucmVjdGFuZ2xlID0gbG9va3VwTm9ybWFsUmVjdChyZWN0YW5nbGUsIFswLCAwLCAwLCAwXSk7CiAgfQogIHNldENvbG9yKGNvbG9yKSB7CiAgICB0aGlzLmNvbG9yID0gZ2V0UmdiQ29sb3IoY29sb3IpOwogIH0KICBzZXRMaW5lRW5kaW5ncyhsaW5lRW5kaW5ncykgewogICAgdGhpcy5saW5lRW5kaW5ncyA9IFsiTm9uZSIsICJOb25lIl07CiAgICBpZiAoQXJyYXkuaXNBcnJheShsaW5lRW5kaW5ncykgJiYgbGluZUVuZGluZ3MubGVuZ3RoID09PSAyKSB7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAgICAgICAgY29uc3Qgb2JqID0gbGluZUVuZGluZ3NbaV07CiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIE5hbWUpIHsKICAgICAgICAgIHN3aXRjaCAob2JqLm5hbWUpIHsKICAgICAgICAgICAgY2FzZSAiTm9uZSI6CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIGNhc2UgIlNxdWFyZSI6CiAgICAgICAgICAgIGNhc2UgIkNpcmNsZSI6CiAgICAgICAgICAgIGNhc2UgIkRpYW1vbmQiOgogICAgICAgICAgICBjYXNlICJPcGVuQXJyb3ciOgogICAgICAgICAgICBjYXNlICJDbG9zZWRBcnJvdyI6CiAgICAgICAgICAgIGNhc2UgIkJ1dHQiOgogICAgICAgICAgICBjYXNlICJST3BlbkFycm93IjoKICAgICAgICAgICAgY2FzZSAiUkNsb3NlZEFycm93IjoKICAgICAgICAgICAgY2FzZSAiU2xhc2giOgogICAgICAgICAgICAgIHRoaXMubGluZUVuZGluZ3NbaV0gPSBvYmoubmFtZTsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgd2FybihgSWdub3JpbmcgaW52YWxpZCBsaW5lRW5kaW5nOiAke29ian1gKTsKICAgICAgfQogICAgfQogIH0KICBzZXRSb3RhdGlvbihtaywgZGljdCkgewogICAgdGhpcy5yb3RhdGlvbiA9IDA7CiAgICBsZXQgYW5nbGUgPSBtayBpbnN0YW5jZW9mIERpY3QgPyBtay5nZXQoIlIiKSB8fCAwIDogZGljdC5nZXQoIlJvdGF0ZSIpIHx8IDA7CiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihhbmdsZSkgJiYgYW5nbGUgIT09IDApIHsKICAgICAgYW5nbGUgJT0gMzYwOwogICAgICBpZiAoYW5nbGUgPCAwKSB7CiAgICAgICAgYW5nbGUgKz0gMzYwOwogICAgICB9CiAgICAgIGlmIChhbmdsZSAlIDkwID09PSAwKSB7CiAgICAgICAgdGhpcy5yb3RhdGlvbiA9IGFuZ2xlOwogICAgICB9CiAgICB9CiAgfQogIHNldEJvcmRlckFuZEJhY2tncm91bmRDb2xvcnMobWspIHsKICAgIGlmIChtayBpbnN0YW5jZW9mIERpY3QpIHsKICAgICAgdGhpcy5ib3JkZXJDb2xvciA9IGdldFJnYkNvbG9yKG1rLmdldEFycmF5KCJCQyIpLCBudWxsKTsKICAgICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSBnZXRSZ2JDb2xvcihtay5nZXRBcnJheSgiQkciKSwgbnVsbCk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLmJvcmRlckNvbG9yID0gdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSBudWxsOwogICAgfQogIH0KICBzZXRCb3JkZXJTdHlsZShib3JkZXJTdHlsZSkgewogICAgdGhpcy5ib3JkZXJTdHlsZSA9IG5ldyBBbm5vdGF0aW9uQm9yZGVyU3R5bGUoKTsKICAgIGlmICghKGJvcmRlclN0eWxlIGluc3RhbmNlb2YgRGljdCkpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGJvcmRlclN0eWxlLmhhcygiQlMiKSkgewogICAgICBjb25zdCBkaWN0ID0gYm9yZGVyU3R5bGUuZ2V0KCJCUyIpOwogICAgICBpZiAoZGljdCBpbnN0YW5jZW9mIERpY3QpIHsKICAgICAgICBjb25zdCBkaWN0VHlwZSA9IGRpY3QuZ2V0KCJUeXBlIik7CiAgICAgICAgaWYgKCFkaWN0VHlwZSB8fCBpc05hbWUoZGljdFR5cGUsICJCb3JkZXIiKSkgewogICAgICAgICAgdGhpcy5ib3JkZXJTdHlsZS5zZXRXaWR0aChkaWN0LmdldCgiVyIpLCB0aGlzLnJlY3RhbmdsZSk7CiAgICAgICAgICB0aGlzLmJvcmRlclN0eWxlLnNldFN0eWxlKGRpY3QuZ2V0KCJTIikpOwogICAgICAgICAgdGhpcy5ib3JkZXJTdHlsZS5zZXREYXNoQXJyYXkoZGljdC5nZXRBcnJheSgiRCIpKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoYm9yZGVyU3R5bGUuaGFzKCJCb3JkZXIiKSkgewogICAgICBjb25zdCBhcnJheSA9IGJvcmRlclN0eWxlLmdldEFycmF5KCJCb3JkZXIiKTsKICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJyYXkpICYmIGFycmF5Lmxlbmd0aCA+PSAzKSB7CiAgICAgICAgdGhpcy5ib3JkZXJTdHlsZS5zZXRIb3Jpem9udGFsQ29ybmVyUmFkaXVzKGFycmF5WzBdKTsKICAgICAgICB0aGlzLmJvcmRlclN0eWxlLnNldFZlcnRpY2FsQ29ybmVyUmFkaXVzKGFycmF5WzFdKTsKICAgICAgICB0aGlzLmJvcmRlclN0eWxlLnNldFdpZHRoKGFycmF5WzJdLCB0aGlzLnJlY3RhbmdsZSk7CiAgICAgICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gNCkgewogICAgICAgICAgdGhpcy5ib3JkZXJTdHlsZS5zZXREYXNoQXJyYXkoYXJyYXlbM10sIHRydWUpOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgdGhpcy5ib3JkZXJTdHlsZS5zZXRXaWR0aCgwKTsKICAgIH0KICB9CiAgc2V0QXBwZWFyYW5jZShkaWN0KSB7CiAgICB0aGlzLmFwcGVhcmFuY2UgPSBudWxsOwogICAgY29uc3QgYXBwZWFyYW5jZVN0YXRlcyA9IGRpY3QuZ2V0KCJBUCIpOwogICAgaWYgKCEoYXBwZWFyYW5jZVN0YXRlcyBpbnN0YW5jZW9mIERpY3QpKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IG5vcm1hbEFwcGVhcmFuY2VTdGF0ZSA9IGFwcGVhcmFuY2VTdGF0ZXMuZ2V0KCJOIik7CiAgICBpZiAobm9ybWFsQXBwZWFyYW5jZVN0YXRlIGluc3RhbmNlb2YgQmFzZVN0cmVhbSkgewogICAgICB0aGlzLmFwcGVhcmFuY2UgPSBub3JtYWxBcHBlYXJhbmNlU3RhdGU7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghKG5vcm1hbEFwcGVhcmFuY2VTdGF0ZSBpbnN0YW5jZW9mIERpY3QpKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IGFzID0gZGljdC5nZXQoIkFTIik7CiAgICBpZiAoIShhcyBpbnN0YW5jZW9mIE5hbWUpIHx8ICFub3JtYWxBcHBlYXJhbmNlU3RhdGUuaGFzKGFzLm5hbWUpKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IGFwcGVhcmFuY2UgPSBub3JtYWxBcHBlYXJhbmNlU3RhdGUuZ2V0KGFzLm5hbWUpOwogICAgaWYgKGFwcGVhcmFuY2UgaW5zdGFuY2VvZiBCYXNlU3RyZWFtKSB7CiAgICAgIHRoaXMuYXBwZWFyYW5jZSA9IGFwcGVhcmFuY2U7CiAgICB9CiAgfQogIHNldE9wdGlvbmFsQ29udGVudChkaWN0KSB7CiAgICB0aGlzLm9jID0gbnVsbDsKICAgIGNvbnN0IG9jID0gZGljdC5nZXQoIk9DIik7CiAgICBpZiAob2MgaW5zdGFuY2VvZiBOYW1lKSB7CiAgICAgIHdhcm4oInNldE9wdGlvbmFsQ29udGVudDogU3VwcG9ydCBmb3IgL05hbWUtZW50cnkgaXMgbm90IGltcGxlbWVudGVkLiIpOwogICAgfSBlbHNlIGlmIChvYyBpbnN0YW5jZW9mIERpY3QpIHsKICAgICAgdGhpcy5vYyA9IG9jOwogICAgfQogIH0KICBsb2FkUmVzb3VyY2VzKGtleXMsIGFwcGVhcmFuY2UpIHsKICAgIHJldHVybiBhcHBlYXJhbmNlLmRpY3QuZ2V0QXN5bmMoIlJlc291cmNlcyIpLnRoZW4ocmVzb3VyY2VzID0+IHsKICAgICAgaWYgKCFyZXNvdXJjZXMpIHsKICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgICB9CiAgICAgIGNvbnN0IG9iamVjdExvYWRlciA9IG5ldyBPYmplY3RMb2FkZXIocmVzb3VyY2VzLCBrZXlzLCByZXNvdXJjZXMueHJlZik7CiAgICAgIHJldHVybiBvYmplY3RMb2FkZXIubG9hZCgpLnRoZW4oKCkgPT4gcmVzb3VyY2VzKTsKICAgIH0pOwogIH0KICBhc3luYyBnZXRPcGVyYXRvckxpc3QoZXZhbHVhdG9yLCB0YXNrLCBpbnRlbnQsIGFubm90YXRpb25TdG9yYWdlKSB7CiAgICBjb25zdCB7CiAgICAgIGhhc093bkNhbnZhcywKICAgICAgaWQsCiAgICAgIHJlY3QKICAgIH0gPSB0aGlzLmRhdGE7CiAgICBsZXQgYXBwZWFyYW5jZSA9IHRoaXMuYXBwZWFyYW5jZTsKICAgIGNvbnN0IGlzVXNpbmdPd25DYW52YXMgPSAhIShoYXNPd25DYW52YXMgJiYgaW50ZW50ICYgUmVuZGVyaW5nSW50ZW50RmxhZy5ESVNQTEFZKTsKICAgIGlmIChpc1VzaW5nT3duQ2FudmFzICYmICh0aGlzLndpZHRoID09PSAwIHx8IHRoaXMuaGVpZ2h0ID09PSAwKSkgewogICAgICB0aGlzLmRhdGEuaGFzT3duQ2FudmFzID0gZmFsc2U7CiAgICAgIHJldHVybiB7CiAgICAgICAgb3BMaXN0OiBuZXcgT3BlcmF0b3JMaXN0KCksCiAgICAgICAgc2VwYXJhdGVGb3JtOiBmYWxzZSwKICAgICAgICBzZXBhcmF0ZUNhbnZhczogZmFsc2UKICAgICAgfTsKICAgIH0KICAgIGlmICghYXBwZWFyYW5jZSkgewogICAgICBpZiAoIWlzVXNpbmdPd25DYW52YXMpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgb3BMaXN0OiBuZXcgT3BlcmF0b3JMaXN0KCksCiAgICAgICAgICBzZXBhcmF0ZUZvcm06IGZhbHNlLAogICAgICAgICAgc2VwYXJhdGVDYW52YXM6IGZhbHNlCiAgICAgICAgfTsKICAgICAgfQogICAgICBhcHBlYXJhbmNlID0gbmV3IFN0cmluZ1N0cmVhbSgiIik7CiAgICAgIGFwcGVhcmFuY2UuZGljdCA9IG5ldyBEaWN0KCk7CiAgICB9CiAgICBjb25zdCBhcHBlYXJhbmNlRGljdCA9IGFwcGVhcmFuY2UuZGljdDsKICAgIGNvbnN0IHJlc291cmNlcyA9IGF3YWl0IHRoaXMubG9hZFJlc291cmNlcyhbIkV4dEdTdGF0ZSIsICJDb2xvclNwYWNlIiwgIlBhdHRlcm4iLCAiU2hhZGluZyIsICJYT2JqZWN0IiwgIkZvbnQiXSwgYXBwZWFyYW5jZSk7CiAgICBjb25zdCBiYm94ID0gbG9va3VwUmVjdChhcHBlYXJhbmNlRGljdC5nZXRBcnJheSgiQkJveCIpLCBbMCwgMCwgMSwgMV0pOwogICAgY29uc3QgbWF0cml4ID0gbG9va3VwTWF0cml4KGFwcGVhcmFuY2VEaWN0LmdldEFycmF5KCJNYXRyaXgiKSwgSURFTlRJVFlfTUFUUklYKTsKICAgIGNvbnN0IHRyYW5zZm9ybSA9IGdldFRyYW5zZm9ybU1hdHJpeChyZWN0LCBiYm94LCBtYXRyaXgpOwogICAgY29uc3Qgb3BMaXN0ID0gbmV3IE9wZXJhdG9yTGlzdCgpOwogICAgbGV0IG9wdGlvbmFsQ29udGVudDsKICAgIGlmICh0aGlzLm9jKSB7CiAgICAgIG9wdGlvbmFsQ29udGVudCA9IGF3YWl0IGV2YWx1YXRvci5wYXJzZU1hcmtlZENvbnRlbnRQcm9wcyh0aGlzLm9jLCBudWxsKTsKICAgIH0KICAgIGlmIChvcHRpb25hbENvbnRlbnQgIT09IHVuZGVmaW5lZCkgewogICAgICBvcExpc3QuYWRkT3AoT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLCBbIk9DIiwgb3B0aW9uYWxDb250ZW50XSk7CiAgICB9CiAgICBvcExpc3QuYWRkT3AoT1BTLmJlZ2luQW5ub3RhdGlvbiwgW2lkLCByZWN0LCB0cmFuc2Zvcm0sIG1hdHJpeCwgaXNVc2luZ093bkNhbnZhc10pOwogICAgYXdhaXQgZXZhbHVhdG9yLmdldE9wZXJhdG9yTGlzdCh7CiAgICAgIHN0cmVhbTogYXBwZWFyYW5jZSwKICAgICAgdGFzaywKICAgICAgcmVzb3VyY2VzLAogICAgICBvcGVyYXRvckxpc3Q6IG9wTGlzdCwKICAgICAgZmFsbGJhY2tGb250RGljdDogdGhpcy5fZmFsbGJhY2tGb250RGljdAogICAgfSk7CiAgICBvcExpc3QuYWRkT3AoT1BTLmVuZEFubm90YXRpb24sIFtdKTsKICAgIGlmIChvcHRpb25hbENvbnRlbnQgIT09IHVuZGVmaW5lZCkgewogICAgICBvcExpc3QuYWRkT3AoT1BTLmVuZE1hcmtlZENvbnRlbnQsIFtdKTsKICAgIH0KICAgIHRoaXMucmVzZXQoKTsKICAgIHJldHVybiB7CiAgICAgIG9wTGlzdCwKICAgICAgc2VwYXJhdGVGb3JtOiBmYWxzZSwKICAgICAgc2VwYXJhdGVDYW52YXM6IGlzVXNpbmdPd25DYW52YXMKICAgIH07CiAgfQogIGFzeW5jIHNhdmUoZXZhbHVhdG9yLCB0YXNrLCBhbm5vdGF0aW9uU3RvcmFnZSwgY2hhbmdlcykgewogICAgcmV0dXJuIG51bGw7CiAgfQogIGdldCBoYXNUZXh0Q29udGVudCgpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgYXN5bmMgZXh0cmFjdFRleHRDb250ZW50KGV2YWx1YXRvciwgdGFzaywgdmlld0JveCkgewogICAgaWYgKCF0aGlzLmFwcGVhcmFuY2UpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgcmVzb3VyY2VzID0gYXdhaXQgdGhpcy5sb2FkUmVzb3VyY2VzKFsiRXh0R1N0YXRlIiwgIkZvbnQiLCAiUHJvcGVydGllcyIsICJYT2JqZWN0Il0sIHRoaXMuYXBwZWFyYW5jZSk7CiAgICBjb25zdCB0ZXh0ID0gW107CiAgICBjb25zdCBidWZmZXIgPSBbXTsKICAgIGxldCBmaXJzdFBvc2l0aW9uID0gbnVsbDsKICAgIGNvbnN0IHNpbmsgPSB7CiAgICAgIGRlc2lyZWRTaXplOiBNYXRoLkluZmluaXR5LAogICAgICByZWFkeTogdHJ1ZSwKICAgICAgZW5xdWV1ZShjaHVuaywgc2l6ZSkgewogICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBjaHVuay5pdGVtcykgewogICAgICAgICAgaWYgKGl0ZW0uc3RyID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBmaXJzdFBvc2l0aW9uIHx8PSBpdGVtLnRyYW5zZm9ybS5zbGljZSgtMik7CiAgICAgICAgICBidWZmZXIucHVzaChpdGVtLnN0cik7CiAgICAgICAgICBpZiAoaXRlbS5oYXNFT0wpIHsKICAgICAgICAgICAgdGV4dC5wdXNoKGJ1ZmZlci5qb2luKCIiKS50cmltRW5kKCkpOwogICAgICAgICAgICBidWZmZXIubGVuZ3RoID0gMDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICBhd2FpdCBldmFsdWF0b3IuZ2V0VGV4dENvbnRlbnQoewogICAgICBzdHJlYW06IHRoaXMuYXBwZWFyYW5jZSwKICAgICAgdGFzaywKICAgICAgcmVzb3VyY2VzLAogICAgICBpbmNsdWRlTWFya2VkQ29udGVudDogdHJ1ZSwKICAgICAga2VlcFdoaXRlU3BhY2U6IHRydWUsCiAgICAgIHNpbmssCiAgICAgIHZpZXdCb3gKICAgIH0pOwogICAgdGhpcy5yZXNldCgpOwogICAgaWYgKGJ1ZmZlci5sZW5ndGgpIHsKICAgICAgdGV4dC5wdXNoKGJ1ZmZlci5qb2luKCIiKS50cmltRW5kKCkpOwogICAgfQogICAgaWYgKHRleHQubGVuZ3RoID4gMSB8fCB0ZXh0WzBdKSB7CiAgICAgIGNvbnN0IGFwcGVhcmFuY2VEaWN0ID0gdGhpcy5hcHBlYXJhbmNlLmRpY3Q7CiAgICAgIGNvbnN0IGJib3ggPSBsb29rdXBSZWN0KGFwcGVhcmFuY2VEaWN0LmdldEFycmF5KCJCQm94IiksIG51bGwpOwogICAgICBjb25zdCBtYXRyaXggPSBsb29rdXBNYXRyaXgoYXBwZWFyYW5jZURpY3QuZ2V0QXJyYXkoIk1hdHJpeCIpLCBudWxsKTsKICAgICAgdGhpcy5kYXRhLnRleHRQb3NpdGlvbiA9IHRoaXMuX3RyYW5zZm9ybVBvaW50KGZpcnN0UG9zaXRpb24sIGJib3gsIG1hdHJpeCk7CiAgICAgIHRoaXMuZGF0YS50ZXh0Q29udGVudCA9IHRleHQ7CiAgICB9CiAgfQogIF90cmFuc2Zvcm1Qb2ludChjb29yZHMsIGJib3gsIG1hdHJpeCkgewogICAgY29uc3QgewogICAgICByZWN0CiAgICB9ID0gdGhpcy5kYXRhOwogICAgYmJveCB8fD0gWzAsIDAsIDEsIDFdOwogICAgbWF0cml4IHx8PSBbMSwgMCwgMCwgMSwgMCwgMF07CiAgICBjb25zdCB0cmFuc2Zvcm0gPSBnZXRUcmFuc2Zvcm1NYXRyaXgocmVjdCwgYmJveCwgbWF0cml4KTsKICAgIHRyYW5zZm9ybVs0XSAtPSByZWN0WzBdOwogICAgdHJhbnNmb3JtWzVdIC09IHJlY3RbMV07CiAgICBjb29yZHMgPSBVdGlsLmFwcGx5VHJhbnNmb3JtKGNvb3JkcywgdHJhbnNmb3JtKTsKICAgIHJldHVybiBVdGlsLmFwcGx5VHJhbnNmb3JtKGNvb3JkcywgbWF0cml4KTsKICB9CiAgZ2V0RmllbGRPYmplY3QoKSB7CiAgICBpZiAodGhpcy5kYXRhLmtpZElkcykgewogICAgICByZXR1cm4gewogICAgICAgIGlkOiB0aGlzLmRhdGEuaWQsCiAgICAgICAgYWN0aW9uczogdGhpcy5kYXRhLmFjdGlvbnMsCiAgICAgICAgbmFtZTogdGhpcy5kYXRhLmZpZWxkTmFtZSwKICAgICAgICBzdHJva2VDb2xvcjogdGhpcy5kYXRhLmJvcmRlckNvbG9yLAogICAgICAgIGZpbGxDb2xvcjogdGhpcy5kYXRhLmJhY2tncm91bmRDb2xvciwKICAgICAgICB0eXBlOiAiIiwKICAgICAgICBraWRJZHM6IHRoaXMuZGF0YS5raWRJZHMsCiAgICAgICAgcGFnZTogdGhpcy5kYXRhLnBhZ2VJbmRleCwKICAgICAgICByb3RhdGlvbjogdGhpcy5yb3RhdGlvbgogICAgICB9OwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIHJlc2V0KCkgewogICAgZm9yIChjb25zdCBzdHJlYW0gb2YgdGhpcy5fc3RyZWFtcykgewogICAgICBzdHJlYW0ucmVzZXQoKTsKICAgIH0KICB9CiAgX2NvbnN0cnVjdEZpZWxkTmFtZShkaWN0KSB7CiAgICBpZiAoIWRpY3QuaGFzKCJUIikgJiYgIWRpY3QuaGFzKCJQYXJlbnQiKSkgewogICAgICB3YXJuKCJVbmtub3duIGZpZWxkIG5hbWUsIGZhbGxpbmcgYmFjayB0byBlbXB0eSBmaWVsZCBuYW1lLiIpOwogICAgICByZXR1cm4gIiI7CiAgICB9CiAgICBpZiAoIWRpY3QuaGFzKCJQYXJlbnQiKSkgewogICAgICByZXR1cm4gc3RyaW5nVG9QREZTdHJpbmcoZGljdC5nZXQoIlQiKSk7CiAgICB9CiAgICBjb25zdCBmaWVsZE5hbWUgPSBbXTsKICAgIGlmIChkaWN0LmhhcygiVCIpKSB7CiAgICAgIGZpZWxkTmFtZS51bnNoaWZ0KHN0cmluZ1RvUERGU3RyaW5nKGRpY3QuZ2V0KCJUIikpKTsKICAgIH0KICAgIGxldCBsb29wRGljdCA9IGRpY3Q7CiAgICBjb25zdCB2aXNpdGVkID0gbmV3IFJlZlNldCgpOwogICAgaWYgKGRpY3Qub2JqSWQpIHsKICAgICAgdmlzaXRlZC5wdXQoZGljdC5vYmpJZCk7CiAgICB9CiAgICB3aGlsZSAobG9vcERpY3QuaGFzKCJQYXJlbnQiKSkgewogICAgICBsb29wRGljdCA9IGxvb3BEaWN0LmdldCgiUGFyZW50Iik7CiAgICAgIGlmICghKGxvb3BEaWN0IGluc3RhbmNlb2YgRGljdCkgfHwgbG9vcERpY3Qub2JqSWQgJiYgdmlzaXRlZC5oYXMobG9vcERpY3Qub2JqSWQpKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgaWYgKGxvb3BEaWN0Lm9iaklkKSB7CiAgICAgICAgdmlzaXRlZC5wdXQobG9vcERpY3Qub2JqSWQpOwogICAgICB9CiAgICAgIGlmIChsb29wRGljdC5oYXMoIlQiKSkgewogICAgICAgIGZpZWxkTmFtZS51bnNoaWZ0KHN0cmluZ1RvUERGU3RyaW5nKGxvb3BEaWN0LmdldCgiVCIpKSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmaWVsZE5hbWUuam9pbigiLiIpOwogIH0KICBnZXQgd2lkdGgoKSB7CiAgICByZXR1cm4gdGhpcy5kYXRhLnJlY3RbMl0gLSB0aGlzLmRhdGEucmVjdFswXTsKICB9CiAgZ2V0IGhlaWdodCgpIHsKICAgIHJldHVybiB0aGlzLmRhdGEucmVjdFszXSAtIHRoaXMuZGF0YS5yZWN0WzFdOwogIH0KfQpjbGFzcyBBbm5vdGF0aW9uQm9yZGVyU3R5bGUgewogIGNvbnN0cnVjdG9yKCkgewogICAgdGhpcy53aWR0aCA9IDE7CiAgICB0aGlzLnJhd1dpZHRoID0gMTsKICAgIHRoaXMuc3R5bGUgPSBBbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLlNPTElEOwogICAgdGhpcy5kYXNoQXJyYXkgPSBbM107CiAgICB0aGlzLmhvcml6b250YWxDb3JuZXJSYWRpdXMgPSAwOwogICAgdGhpcy52ZXJ0aWNhbENvcm5lclJhZGl1cyA9IDA7CiAgfQogIHNldFdpZHRoKHdpZHRoLCByZWN0ID0gWzAsIDAsIDAsIDBdKSB7CiAgICBpZiAod2lkdGggaW5zdGFuY2VvZiBOYW1lKSB7CiAgICAgIHRoaXMud2lkdGggPSAwOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAodHlwZW9mIHdpZHRoID09PSAibnVtYmVyIikgewogICAgICBpZiAod2lkdGggPiAwKSB7CiAgICAgICAgdGhpcy5yYXdXaWR0aCA9IHdpZHRoOwogICAgICAgIGNvbnN0IG1heFdpZHRoID0gKHJlY3RbMl0gLSByZWN0WzBdKSAvIDI7CiAgICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gKHJlY3RbM10gLSByZWN0WzFdKSAvIDI7CiAgICAgICAgaWYgKG1heFdpZHRoID4gMCAmJiBtYXhIZWlnaHQgPiAwICYmICh3aWR0aCA+IG1heFdpZHRoIHx8IHdpZHRoID4gbWF4SGVpZ2h0KSkgewogICAgICAgICAgd2FybihgQW5ub3RhdGlvbkJvcmRlclN0eWxlLnNldFdpZHRoIC0gaWdub3Jpbmcgd2lkdGg6ICR7d2lkdGh9YCk7CiAgICAgICAgICB3aWR0aCA9IDE7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMud2lkdGggPSB3aWR0aDsKICAgIH0KICB9CiAgc2V0U3R5bGUoc3R5bGUpIHsKICAgIGlmICghKHN0eWxlIGluc3RhbmNlb2YgTmFtZSkpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgc3dpdGNoIChzdHlsZS5uYW1lKSB7CiAgICAgIGNhc2UgIlMiOgogICAgICAgIHRoaXMuc3R5bGUgPSBBbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLlNPTElEOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJEIjoKICAgICAgICB0aGlzLnN0eWxlID0gQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5EQVNIRUQ7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIkIiOgogICAgICAgIHRoaXMuc3R5bGUgPSBBbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLkJFVkVMRUQ7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIkkiOgogICAgICAgIHRoaXMuc3R5bGUgPSBBbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLklOU0VUOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJVIjoKICAgICAgICB0aGlzLnN0eWxlID0gQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5VTkRFUkxJTkU7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgYnJlYWs7CiAgICB9CiAgfQogIHNldERhc2hBcnJheShkYXNoQXJyYXksIGZvcmNlU3R5bGUgPSBmYWxzZSkgewogICAgaWYgKEFycmF5LmlzQXJyYXkoZGFzaEFycmF5KSkgewogICAgICBsZXQgaXNWYWxpZCA9IHRydWU7CiAgICAgIGxldCBhbGxaZXJvcyA9IHRydWU7CiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBkYXNoQXJyYXkpIHsKICAgICAgICBjb25zdCB2YWxpZE51bWJlciA9ICtlbGVtZW50ID49IDA7CiAgICAgICAgaWYgKCF2YWxpZE51bWJlcikgewogICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50ID4gMCkgewogICAgICAgICAgYWxsWmVyb3MgPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGRhc2hBcnJheS5sZW5ndGggPT09IDAgfHwgaXNWYWxpZCAmJiAhYWxsWmVyb3MpIHsKICAgICAgICB0aGlzLmRhc2hBcnJheSA9IGRhc2hBcnJheTsKICAgICAgICBpZiAoZm9yY2VTdHlsZSkgewogICAgICAgICAgdGhpcy5zZXRTdHlsZShOYW1lLmdldCgiRCIpKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy53aWR0aCA9IDA7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoZGFzaEFycmF5KSB7CiAgICAgIHRoaXMud2lkdGggPSAwOwogICAgfQogIH0KICBzZXRIb3Jpem9udGFsQ29ybmVyUmFkaXVzKHJhZGl1cykgewogICAgaWYgKE51bWJlci5pc0ludGVnZXIocmFkaXVzKSkgewogICAgICB0aGlzLmhvcml6b250YWxDb3JuZXJSYWRpdXMgPSByYWRpdXM7CiAgICB9CiAgfQogIHNldFZlcnRpY2FsQ29ybmVyUmFkaXVzKHJhZGl1cykgewogICAgaWYgKE51bWJlci5pc0ludGVnZXIocmFkaXVzKSkgewogICAgICB0aGlzLnZlcnRpY2FsQ29ybmVyUmFkaXVzID0gcmFkaXVzOwogICAgfQogIH0KfQpjbGFzcyBNYXJrdXBBbm5vdGF0aW9uIGV4dGVuZHMgQW5ub3RhdGlvbiB7CiAgY29uc3RydWN0b3IocGFyYW1zKSB7CiAgICBzdXBlcihwYXJhbXMpOwogICAgY29uc3QgewogICAgICBkaWN0CiAgICB9ID0gcGFyYW1zOwogICAgaWYgKGRpY3QuaGFzKCJJUlQiKSkgewogICAgICBjb25zdCByYXdJUlQgPSBkaWN0LmdldFJhdygiSVJUIik7CiAgICAgIHRoaXMuZGF0YS5pblJlcGx5VG8gPSByYXdJUlQgaW5zdGFuY2VvZiBSZWYgPyByYXdJUlQudG9TdHJpbmcoKSA6IG51bGw7CiAgICAgIGNvbnN0IHJ0ID0gZGljdC5nZXQoIlJUIik7CiAgICAgIHRoaXMuZGF0YS5yZXBseVR5cGUgPSBydCBpbnN0YW5jZW9mIE5hbWUgPyBydC5uYW1lIDogQW5ub3RhdGlvblJlcGx5VHlwZS5SRVBMWTsKICAgIH0KICAgIGxldCBwb3B1cFJlZiA9IG51bGw7CiAgICBpZiAodGhpcy5kYXRhLnJlcGx5VHlwZSA9PT0gQW5ub3RhdGlvblJlcGx5VHlwZS5HUk9VUCkgewogICAgICBjb25zdCBwYXJlbnQgPSBkaWN0LmdldCgiSVJUIik7CiAgICAgIHRoaXMuc2V0VGl0bGUocGFyZW50LmdldCgiVCIpKTsKICAgICAgdGhpcy5kYXRhLnRpdGxlT2JqID0gdGhpcy5fdGl0bGU7CiAgICAgIHRoaXMuc2V0Q29udGVudHMocGFyZW50LmdldCgiQ29udGVudHMiKSk7CiAgICAgIHRoaXMuZGF0YS5jb250ZW50c09iaiA9IHRoaXMuX2NvbnRlbnRzOwogICAgICBpZiAoIXBhcmVudC5oYXMoIkNyZWF0aW9uRGF0ZSIpKSB7CiAgICAgICAgdGhpcy5kYXRhLmNyZWF0aW9uRGF0ZSA9IG51bGw7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5zZXRDcmVhdGlvbkRhdGUocGFyZW50LmdldCgiQ3JlYXRpb25EYXRlIikpOwogICAgICAgIHRoaXMuZGF0YS5jcmVhdGlvbkRhdGUgPSB0aGlzLmNyZWF0aW9uRGF0ZTsKICAgICAgfQogICAgICBpZiAoIXBhcmVudC5oYXMoIk0iKSkgewogICAgICAgIHRoaXMuZGF0YS5tb2RpZmljYXRpb25EYXRlID0gbnVsbDsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnNldE1vZGlmaWNhdGlvbkRhdGUocGFyZW50LmdldCgiTSIpKTsKICAgICAgICB0aGlzLmRhdGEubW9kaWZpY2F0aW9uRGF0ZSA9IHRoaXMubW9kaWZpY2F0aW9uRGF0ZTsKICAgICAgfQogICAgICBwb3B1cFJlZiA9IHBhcmVudC5nZXRSYXcoIlBvcHVwIik7CiAgICAgIGlmICghcGFyZW50LmhhcygiQyIpKSB7CiAgICAgICAgdGhpcy5kYXRhLmNvbG9yID0gbnVsbDsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnNldENvbG9yKHBhcmVudC5nZXRBcnJheSgiQyIpKTsKICAgICAgICB0aGlzLmRhdGEuY29sb3IgPSB0aGlzLmNvbG9yOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB0aGlzLmRhdGEudGl0bGVPYmogPSB0aGlzLl90aXRsZTsKICAgICAgdGhpcy5zZXRDcmVhdGlvbkRhdGUoZGljdC5nZXQoIkNyZWF0aW9uRGF0ZSIpKTsKICAgICAgdGhpcy5kYXRhLmNyZWF0aW9uRGF0ZSA9IHRoaXMuY3JlYXRpb25EYXRlOwogICAgICBwb3B1cFJlZiA9IGRpY3QuZ2V0UmF3KCJQb3B1cCIpOwogICAgICBpZiAoIWRpY3QuaGFzKCJDIikpIHsKICAgICAgICB0aGlzLmRhdGEuY29sb3IgPSBudWxsOwogICAgICB9CiAgICB9CiAgICB0aGlzLmRhdGEucG9wdXBSZWYgPSBwb3B1cFJlZiBpbnN0YW5jZW9mIFJlZiA/IHBvcHVwUmVmLnRvU3RyaW5nKCkgOiBudWxsOwogICAgaWYgKGRpY3QuaGFzKCJSQyIpKSB7CiAgICAgIHRoaXMuZGF0YS5yaWNoVGV4dCA9IFhGQUZhY3RvcnkuZ2V0UmljaFRleHRBc0h0bWwoZGljdC5nZXQoIlJDIikpOwogICAgfQogIH0KICBzZXRDcmVhdGlvbkRhdGUoY3JlYXRpb25EYXRlKSB7CiAgICB0aGlzLmNyZWF0aW9uRGF0ZSA9IHR5cGVvZiBjcmVhdGlvbkRhdGUgPT09ICJzdHJpbmciID8gY3JlYXRpb25EYXRlIDogbnVsbDsKICB9CiAgX3NldERlZmF1bHRBcHBlYXJhbmNlKHsKICAgIHhyZWYsCiAgICBleHRyYSwKICAgIHN0cm9rZUNvbG9yLAogICAgZmlsbENvbG9yLAogICAgYmxlbmRNb2RlLAogICAgc3Ryb2tlQWxwaGEsCiAgICBmaWxsQWxwaGEsCiAgICBwb2ludHNDYWxsYmFjawogIH0pIHsKICAgIGNvbnN0IGJib3ggPSB0aGlzLmRhdGEucmVjdCA9IFtJbmZpbml0eSwgSW5maW5pdHksIC1JbmZpbml0eSwgLUluZmluaXR5XTsKICAgIGNvbnN0IGJ1ZmZlciA9IFsicSJdOwogICAgaWYgKGV4dHJhKSB7CiAgICAgIGJ1ZmZlci5wdXNoKGV4dHJhKTsKICAgIH0KICAgIGlmIChzdHJva2VDb2xvcikgewogICAgICBidWZmZXIucHVzaChgJHtzdHJva2VDb2xvclswXX0gJHtzdHJva2VDb2xvclsxXX0gJHtzdHJva2VDb2xvclsyXX0gUkdgKTsKICAgIH0KICAgIGlmIChmaWxsQ29sb3IpIHsKICAgICAgYnVmZmVyLnB1c2goYCR7ZmlsbENvbG9yWzBdfSAke2ZpbGxDb2xvclsxXX0gJHtmaWxsQ29sb3JbMl19IHJnYCk7CiAgICB9CiAgICBjb25zdCBwb2ludHNBcnJheSA9IHRoaXMuZGF0YS5xdWFkUG9pbnRzIHx8IEZsb2F0MzJBcnJheS5mcm9tKFt0aGlzLnJlY3RhbmdsZVswXSwgdGhpcy5yZWN0YW5nbGVbM10sIHRoaXMucmVjdGFuZ2xlWzJdLCB0aGlzLnJlY3RhbmdsZVszXSwgdGhpcy5yZWN0YW5nbGVbMF0sIHRoaXMucmVjdGFuZ2xlWzFdLCB0aGlzLnJlY3RhbmdsZVsyXSwgdGhpcy5yZWN0YW5nbGVbMV1dKTsKICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHBvaW50c0FycmF5Lmxlbmd0aDsgaSA8IGlpOyBpICs9IDgpIHsKICAgICAgY29uc3QgcG9pbnRzID0gcG9pbnRzQ2FsbGJhY2soYnVmZmVyLCBwb2ludHNBcnJheS5zdWJhcnJheShpLCBpICsgOCkpOwogICAgICBVdGlsLnJlY3RCb3VuZGluZ0JveCguLi5wb2ludHMsIGJib3gpOwogICAgfQogICAgYnVmZmVyLnB1c2goIlEiKTsKICAgIGNvbnN0IGZvcm1EaWN0ID0gbmV3IERpY3QoeHJlZik7CiAgICBjb25zdCBhcHBlYXJhbmNlU3RyZWFtRGljdCA9IG5ldyBEaWN0KHhyZWYpOwogICAgYXBwZWFyYW5jZVN0cmVhbURpY3Quc2V0KCJTdWJ0eXBlIiwgTmFtZS5nZXQoIkZvcm0iKSk7CiAgICBjb25zdCBhcHBlYXJhbmNlU3RyZWFtID0gbmV3IFN0cmluZ1N0cmVhbShidWZmZXIuam9pbigiICIpKTsKICAgIGFwcGVhcmFuY2VTdHJlYW0uZGljdCA9IGFwcGVhcmFuY2VTdHJlYW1EaWN0OwogICAgZm9ybURpY3Quc2V0KCJGbTAiLCBhcHBlYXJhbmNlU3RyZWFtKTsKICAgIGNvbnN0IGdzRGljdCA9IG5ldyBEaWN0KHhyZWYpOwogICAgaWYgKGJsZW5kTW9kZSkgewogICAgICBnc0RpY3Quc2V0KCJCTSIsIE5hbWUuZ2V0KGJsZW5kTW9kZSkpOwogICAgfQogICAgaWYgKHR5cGVvZiBzdHJva2VBbHBoYSA9PT0gIm51bWJlciIpIHsKICAgICAgZ3NEaWN0LnNldCgiQ0EiLCBzdHJva2VBbHBoYSk7CiAgICB9CiAgICBpZiAodHlwZW9mIGZpbGxBbHBoYSA9PT0gIm51bWJlciIpIHsKICAgICAgZ3NEaWN0LnNldCgiY2EiLCBmaWxsQWxwaGEpOwogICAgfQogICAgY29uc3Qgc3RhdGVEaWN0ID0gbmV3IERpY3QoeHJlZik7CiAgICBzdGF0ZURpY3Quc2V0KCJHUzAiLCBnc0RpY3QpOwogICAgY29uc3QgcmVzb3VyY2VzID0gbmV3IERpY3QoeHJlZik7CiAgICByZXNvdXJjZXMuc2V0KCJFeHRHU3RhdGUiLCBzdGF0ZURpY3QpOwogICAgcmVzb3VyY2VzLnNldCgiWE9iamVjdCIsIGZvcm1EaWN0KTsKICAgIGNvbnN0IGFwcGVhcmFuY2VEaWN0ID0gbmV3IERpY3QoeHJlZik7CiAgICBhcHBlYXJhbmNlRGljdC5zZXQoIlJlc291cmNlcyIsIHJlc291cmNlcyk7CiAgICBhcHBlYXJhbmNlRGljdC5zZXQoIkJCb3giLCBiYm94KTsKICAgIHRoaXMuYXBwZWFyYW5jZSA9IG5ldyBTdHJpbmdTdHJlYW0oIi9HUzAgZ3MgL0ZtMCBEbyIpOwogICAgdGhpcy5hcHBlYXJhbmNlLmRpY3QgPSBhcHBlYXJhbmNlRGljdDsKICAgIHRoaXMuX3N0cmVhbXMucHVzaCh0aGlzLmFwcGVhcmFuY2UsIGFwcGVhcmFuY2VTdHJlYW0pOwogIH0KICBzdGF0aWMgYXN5bmMgY3JlYXRlTmV3QW5ub3RhdGlvbih4cmVmLCBhbm5vdGF0aW9uLCBjaGFuZ2VzLCBwYXJhbXMpIHsKICAgIGNvbnN0IGFubm90YXRpb25SZWYgPSBhbm5vdGF0aW9uLnJlZiB8fD0geHJlZi5nZXROZXdUZW1wb3JhcnlSZWYoKTsKICAgIGNvbnN0IGFwID0gYXdhaXQgdGhpcy5jcmVhdGVOZXdBcHBlYXJhbmNlU3RyZWFtKGFubm90YXRpb24sIHhyZWYsIHBhcmFtcyk7CiAgICBsZXQgYW5ub3RhdGlvbkRpY3Q7CiAgICBpZiAoYXApIHsKICAgICAgY29uc3QgYXBSZWYgPSB4cmVmLmdldE5ld1RlbXBvcmFyeVJlZigpOwogICAgICBhbm5vdGF0aW9uRGljdCA9IHRoaXMuY3JlYXRlTmV3RGljdChhbm5vdGF0aW9uLCB4cmVmLCB7CiAgICAgICAgYXBSZWYKICAgICAgfSk7CiAgICAgIGNoYW5nZXMucHV0KGFwUmVmLCB7CiAgICAgICAgZGF0YTogYXAKICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICBhbm5vdGF0aW9uRGljdCA9IHRoaXMuY3JlYXRlTmV3RGljdChhbm5vdGF0aW9uLCB4cmVmLCB7fSk7CiAgICB9CiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihhbm5vdGF0aW9uLnBhcmVudFRyZWVJZCkpIHsKICAgICAgYW5ub3RhdGlvbkRpY3Quc2V0KCJTdHJ1Y3RQYXJlbnQiLCBhbm5vdGF0aW9uLnBhcmVudFRyZWVJZCk7CiAgICB9CiAgICBjaGFuZ2VzLnB1dChhbm5vdGF0aW9uUmVmLCB7CiAgICAgIGRhdGE6IGFubm90YXRpb25EaWN0CiAgICB9KTsKICAgIHJldHVybiB7CiAgICAgIHJlZjogYW5ub3RhdGlvblJlZgogICAgfTsKICB9CiAgc3RhdGljIGFzeW5jIGNyZWF0ZU5ld1ByaW50QW5ub3RhdGlvbihhbm5vdGF0aW9uR2xvYmFscywgeHJlZiwgYW5ub3RhdGlvbiwgcGFyYW1zKSB7CiAgICBjb25zdCBhcCA9IGF3YWl0IHRoaXMuY3JlYXRlTmV3QXBwZWFyYW5jZVN0cmVhbShhbm5vdGF0aW9uLCB4cmVmLCBwYXJhbXMpOwogICAgY29uc3QgYW5ub3RhdGlvbkRpY3QgPSB0aGlzLmNyZWF0ZU5ld0RpY3QoYW5ub3RhdGlvbiwgeHJlZiwgYXAgPyB7CiAgICAgIGFwCiAgICB9IDoge30pOwogICAgY29uc3QgbmV3QW5ub3RhdGlvbiA9IG5ldyB0aGlzLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcih7CiAgICAgIGRpY3Q6IGFubm90YXRpb25EaWN0LAogICAgICB4cmVmLAogICAgICBhbm5vdGF0aW9uR2xvYmFscywKICAgICAgZXZhbHVhdG9yT3B0aW9uczogcGFyYW1zLmV2YWx1YXRvck9wdGlvbnMKICAgIH0pOwogICAgaWYgKGFubm90YXRpb24ucmVmKSB7CiAgICAgIG5ld0Fubm90YXRpb24ucmVmID0gbmV3QW5ub3RhdGlvbi5yZWZUb1JlcGxhY2UgPSBhbm5vdGF0aW9uLnJlZjsKICAgIH0KICAgIHJldHVybiBuZXdBbm5vdGF0aW9uOwogIH0KfQpjbGFzcyBXaWRnZXRBbm5vdGF0aW9uIGV4dGVuZHMgQW5ub3RhdGlvbiB7CiAgY29uc3RydWN0b3IocGFyYW1zKSB7CiAgICBzdXBlcihwYXJhbXMpOwogICAgY29uc3QgewogICAgICBkaWN0LAogICAgICB4cmVmLAogICAgICBhbm5vdGF0aW9uR2xvYmFscwogICAgfSA9IHBhcmFtczsKICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGE7CiAgICB0aGlzLl9uZWVkQXBwZWFyYW5jZXMgPSBwYXJhbXMubmVlZEFwcGVhcmFuY2VzOwogICAgZGF0YS5hbm5vdGF0aW9uVHlwZSA9IEFubm90YXRpb25UeXBlLldJREdFVDsKICAgIGlmIChkYXRhLmZpZWxkTmFtZSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgIGRhdGEuZmllbGROYW1lID0gdGhpcy5fY29uc3RydWN0RmllbGROYW1lKGRpY3QpOwogICAgfQogICAgaWYgKGRhdGEuYWN0aW9ucyA9PT0gdW5kZWZpbmVkKSB7CiAgICAgIGRhdGEuYWN0aW9ucyA9IGNvbGxlY3RBY3Rpb25zKHhyZWYsIGRpY3QsIEFubm90YXRpb25BY3Rpb25FdmVudFR5cGUpOwogICAgfQogICAgbGV0IGZpZWxkVmFsdWUgPSBnZXRJbmhlcml0YWJsZVByb3BlcnR5KHsKICAgICAgZGljdCwKICAgICAga2V5OiAiViIsCiAgICAgIGdldEFycmF5OiB0cnVlCiAgICB9KTsKICAgIGRhdGEuZmllbGRWYWx1ZSA9IHRoaXMuX2RlY29kZUZvcm1WYWx1ZShmaWVsZFZhbHVlKTsKICAgIGNvbnN0IGRlZmF1bHRGaWVsZFZhbHVlID0gZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSh7CiAgICAgIGRpY3QsCiAgICAgIGtleTogIkRWIiwKICAgICAgZ2V0QXJyYXk6IHRydWUKICAgIH0pOwogICAgZGF0YS5kZWZhdWx0RmllbGRWYWx1ZSA9IHRoaXMuX2RlY29kZUZvcm1WYWx1ZShkZWZhdWx0RmllbGRWYWx1ZSk7CiAgICBpZiAoZmllbGRWYWx1ZSA9PT0gdW5kZWZpbmVkICYmIGFubm90YXRpb25HbG9iYWxzLnhmYURhdGFzZXRzKSB7CiAgICAgIGNvbnN0IHBhdGggPSB0aGlzLl90aXRsZS5zdHI7CiAgICAgIGlmIChwYXRoKSB7CiAgICAgICAgdGhpcy5faGFzVmFsdWVGcm9tWEZBID0gdHJ1ZTsKICAgICAgICBkYXRhLmZpZWxkVmFsdWUgPSBmaWVsZFZhbHVlID0gYW5ub3RhdGlvbkdsb2JhbHMueGZhRGF0YXNldHMuZ2V0VmFsdWUocGF0aCk7CiAgICAgIH0KICAgIH0KICAgIGlmIChmaWVsZFZhbHVlID09PSB1bmRlZmluZWQgJiYgZGF0YS5kZWZhdWx0RmllbGRWYWx1ZSAhPT0gbnVsbCkgewogICAgICBkYXRhLmZpZWxkVmFsdWUgPSBkYXRhLmRlZmF1bHRGaWVsZFZhbHVlOwogICAgfQogICAgZGF0YS5hbHRlcm5hdGl2ZVRleHQgPSBzdHJpbmdUb1BERlN0cmluZyhkaWN0LmdldCgiVFUiKSB8fCAiIik7CiAgICB0aGlzLnNldERlZmF1bHRBcHBlYXJhbmNlKHBhcmFtcyk7CiAgICBkYXRhLmhhc0FwcGVhcmFuY2UgfHw9IHRoaXMuX25lZWRBcHBlYXJhbmNlcyAmJiBkYXRhLmZpZWxkVmFsdWUgIT09IHVuZGVmaW5lZCAmJiBkYXRhLmZpZWxkVmFsdWUgIT09IG51bGw7CiAgICBjb25zdCBmaWVsZFR5cGUgPSBnZXRJbmhlcml0YWJsZVByb3BlcnR5KHsKICAgICAgZGljdCwKICAgICAga2V5OiAiRlQiCiAgICB9KTsKICAgIGRhdGEuZmllbGRUeXBlID0gZmllbGRUeXBlIGluc3RhbmNlb2YgTmFtZSA/IGZpZWxkVHlwZS5uYW1lIDogbnVsbDsKICAgIGNvbnN0IGxvY2FsUmVzb3VyY2VzID0gZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSh7CiAgICAgIGRpY3QsCiAgICAgIGtleTogIkRSIgogICAgfSk7CiAgICBjb25zdCBhY3JvRm9ybVJlc291cmNlcyA9IGFubm90YXRpb25HbG9iYWxzLmFjcm9Gb3JtLmdldCgiRFIiKTsKICAgIGNvbnN0IGFwcGVhcmFuY2VSZXNvdXJjZXMgPSB0aGlzLmFwcGVhcmFuY2U/LmRpY3QuZ2V0KCJSZXNvdXJjZXMiKTsKICAgIHRoaXMuX2ZpZWxkUmVzb3VyY2VzID0gewogICAgICBsb2NhbFJlc291cmNlcywKICAgICAgYWNyb0Zvcm1SZXNvdXJjZXMsCiAgICAgIGFwcGVhcmFuY2VSZXNvdXJjZXMsCiAgICAgIG1lcmdlZFJlc291cmNlczogRGljdC5tZXJnZSh7CiAgICAgICAgeHJlZiwKICAgICAgICBkaWN0QXJyYXk6IFtsb2NhbFJlc291cmNlcywgYXBwZWFyYW5jZVJlc291cmNlcywgYWNyb0Zvcm1SZXNvdXJjZXNdLAogICAgICAgIG1lcmdlU3ViRGljdHM6IHRydWUKICAgICAgfSkKICAgIH07CiAgICBkYXRhLmZpZWxkRmxhZ3MgPSBnZXRJbmhlcml0YWJsZVByb3BlcnR5KHsKICAgICAgZGljdCwKICAgICAga2V5OiAiRmYiCiAgICB9KTsKICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihkYXRhLmZpZWxkRmxhZ3MpIHx8IGRhdGEuZmllbGRGbGFncyA8IDApIHsKICAgICAgZGF0YS5maWVsZEZsYWdzID0gMDsKICAgIH0KICAgIGRhdGEucGFzc3dvcmQgPSB0aGlzLmhhc0ZpZWxkRmxhZyhBbm5vdGF0aW9uRmllbGRGbGFnLlBBU1NXT1JEKTsKICAgIGRhdGEucmVhZE9ubHkgPSB0aGlzLmhhc0ZpZWxkRmxhZyhBbm5vdGF0aW9uRmllbGRGbGFnLlJFQURPTkxZKTsKICAgIGRhdGEucmVxdWlyZWQgPSB0aGlzLmhhc0ZpZWxkRmxhZyhBbm5vdGF0aW9uRmllbGRGbGFnLlJFUVVJUkVEKTsKICAgIGRhdGEuaGlkZGVuID0gdGhpcy5faGFzRmxhZyhkYXRhLmFubm90YXRpb25GbGFncywgQW5ub3RhdGlvbkZsYWcuSElEREVOKSB8fCB0aGlzLl9oYXNGbGFnKGRhdGEuYW5ub3RhdGlvbkZsYWdzLCBBbm5vdGF0aW9uRmxhZy5OT1ZJRVcpOwogIH0KICBfZGVjb2RlRm9ybVZhbHVlKGZvcm1WYWx1ZSkgewogICAgaWYgKEFycmF5LmlzQXJyYXkoZm9ybVZhbHVlKSkgewogICAgICByZXR1cm4gZm9ybVZhbHVlLmZpbHRlcihpdGVtID0+IHR5cGVvZiBpdGVtID09PSAic3RyaW5nIikubWFwKGl0ZW0gPT4gc3RyaW5nVG9QREZTdHJpbmcoaXRlbSkpOwogICAgfSBlbHNlIGlmIChmb3JtVmFsdWUgaW5zdGFuY2VvZiBOYW1lKSB7CiAgICAgIHJldHVybiBzdHJpbmdUb1BERlN0cmluZyhmb3JtVmFsdWUubmFtZSk7CiAgICB9IGVsc2UgaWYgKHR5cGVvZiBmb3JtVmFsdWUgPT09ICJzdHJpbmciKSB7CiAgICAgIHJldHVybiBzdHJpbmdUb1BERlN0cmluZyhmb3JtVmFsdWUpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIGhhc0ZpZWxkRmxhZyhmbGFnKSB7CiAgICByZXR1cm4gISEodGhpcy5kYXRhLmZpZWxkRmxhZ3MgJiBmbGFnKTsKICB9CiAgX2lzVmlld2FibGUoZmxhZ3MpIHsKICAgIHJldHVybiB0cnVlOwogIH0KICBtdXN0QmVWaWV3ZWQoYW5ub3RhdGlvblN0b3JhZ2UsIHJlbmRlckZvcm1zKSB7CiAgICBpZiAocmVuZGVyRm9ybXMpIHsKICAgICAgcmV0dXJuIHRoaXMudmlld2FibGU7CiAgICB9CiAgICByZXR1cm4gc3VwZXIubXVzdEJlVmlld2VkKGFubm90YXRpb25TdG9yYWdlLCByZW5kZXJGb3JtcykgJiYgIXRoaXMuX2hhc0ZsYWcodGhpcy5mbGFncywgQW5ub3RhdGlvbkZsYWcuTk9WSUVXKTsKICB9CiAgZ2V0Um90YXRpb25NYXRyaXgoYW5ub3RhdGlvblN0b3JhZ2UpIHsKICAgIGxldCByb3RhdGlvbiA9IGFubm90YXRpb25TdG9yYWdlPy5nZXQodGhpcy5kYXRhLmlkKT8ucm90YXRpb247CiAgICBpZiAocm90YXRpb24gPT09IHVuZGVmaW5lZCkgewogICAgICByb3RhdGlvbiA9IHRoaXMucm90YXRpb247CiAgICB9CiAgICByZXR1cm4gcm90YXRpb24gPT09IDAgPyBJREVOVElUWV9NQVRSSVggOiBnZXRSb3RhdGlvbk1hdHJpeChyb3RhdGlvbiwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpOwogIH0KICBnZXRCb3JkZXJBbmRCYWNrZ3JvdW5kQXBwZWFyYW5jZXMoYW5ub3RhdGlvblN0b3JhZ2UpIHsKICAgIGxldCByb3RhdGlvbiA9IGFubm90YXRpb25TdG9yYWdlPy5nZXQodGhpcy5kYXRhLmlkKT8ucm90YXRpb247CiAgICBpZiAocm90YXRpb24gPT09IHVuZGVmaW5lZCkgewogICAgICByb3RhdGlvbiA9IHRoaXMucm90YXRpb247CiAgICB9CiAgICBpZiAoIXRoaXMuYmFja2dyb3VuZENvbG9yICYmICF0aGlzLmJvcmRlckNvbG9yKSB7CiAgICAgIHJldHVybiAiIjsKICAgIH0KICAgIGNvbnN0IHJlY3QgPSByb3RhdGlvbiA9PT0gMCB8fCByb3RhdGlvbiA9PT0gMTgwID8gYDAgMCAke3RoaXMud2lkdGh9ICR7dGhpcy5oZWlnaHR9IHJlYCA6IGAwIDAgJHt0aGlzLmhlaWdodH0gJHt0aGlzLndpZHRofSByZWA7CiAgICBsZXQgc3RyID0gIiI7CiAgICBpZiAodGhpcy5iYWNrZ3JvdW5kQ29sb3IpIHsKICAgICAgc3RyID0gYCR7Z2V0UGRmQ29sb3IodGhpcy5iYWNrZ3JvdW5kQ29sb3IsIHRydWUpfSAke3JlY3R9IGYgYDsKICAgIH0KICAgIGlmICh0aGlzLmJvcmRlckNvbG9yKSB7CiAgICAgIGNvbnN0IGJvcmRlcldpZHRoID0gdGhpcy5ib3JkZXJTdHlsZS53aWR0aCB8fCAxOwogICAgICBzdHIgKz0gYCR7Ym9yZGVyV2lkdGh9IHcgJHtnZXRQZGZDb2xvcih0aGlzLmJvcmRlckNvbG9yLCBmYWxzZSl9ICR7cmVjdH0gUyBgOwogICAgfQogICAgcmV0dXJuIHN0cjsKICB9CiAgYXN5bmMgZ2V0T3BlcmF0b3JMaXN0KGV2YWx1YXRvciwgdGFzaywgaW50ZW50LCBhbm5vdGF0aW9uU3RvcmFnZSkgewogICAgaWYgKGludGVudCAmIFJlbmRlcmluZ0ludGVudEZsYWcuQU5OT1RBVElPTlNfRk9STVMgJiYgISh0aGlzIGluc3RhbmNlb2YgU2lnbmF0dXJlV2lkZ2V0QW5ub3RhdGlvbikgJiYgIXRoaXMuZGF0YS5ub0hUTUwgJiYgIXRoaXMuZGF0YS5oYXNPd25DYW52YXMpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBvcExpc3Q6IG5ldyBPcGVyYXRvckxpc3QoKSwKICAgICAgICBzZXBhcmF0ZUZvcm06IHRydWUsCiAgICAgICAgc2VwYXJhdGVDYW52YXM6IGZhbHNlCiAgICAgIH07CiAgICB9CiAgICBpZiAoIXRoaXMuX2hhc1RleHQpIHsKICAgICAgcmV0dXJuIHN1cGVyLmdldE9wZXJhdG9yTGlzdChldmFsdWF0b3IsIHRhc2ssIGludGVudCwgYW5ub3RhdGlvblN0b3JhZ2UpOwogICAgfQogICAgY29uc3QgY29udGVudCA9IGF3YWl0IHRoaXMuX2dldEFwcGVhcmFuY2UoZXZhbHVhdG9yLCB0YXNrLCBpbnRlbnQsIGFubm90YXRpb25TdG9yYWdlKTsKICAgIGlmICh0aGlzLmFwcGVhcmFuY2UgJiYgY29udGVudCA9PT0gbnVsbCkgewogICAgICByZXR1cm4gc3VwZXIuZ2V0T3BlcmF0b3JMaXN0KGV2YWx1YXRvciwgdGFzaywgaW50ZW50LCBhbm5vdGF0aW9uU3RvcmFnZSk7CiAgICB9CiAgICBjb25zdCBvcExpc3QgPSBuZXcgT3BlcmF0b3JMaXN0KCk7CiAgICBpZiAoIXRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlIHx8IGNvbnRlbnQgPT09IG51bGwpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBvcExpc3QsCiAgICAgICAgc2VwYXJhdGVGb3JtOiBmYWxzZSwKICAgICAgICBzZXBhcmF0ZUNhbnZhczogZmFsc2UKICAgICAgfTsKICAgIH0KICAgIGNvbnN0IGlzVXNpbmdPd25DYW52YXMgPSAhISh0aGlzLmRhdGEuaGFzT3duQ2FudmFzICYmIGludGVudCAmIFJlbmRlcmluZ0ludGVudEZsYWcuRElTUExBWSk7CiAgICBjb25zdCBtYXRyaXggPSBbMSwgMCwgMCwgMSwgMCwgMF07CiAgICBjb25zdCBiYm94ID0gWzAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0XTsKICAgIGNvbnN0IHRyYW5zZm9ybSA9IGdldFRyYW5zZm9ybU1hdHJpeCh0aGlzLmRhdGEucmVjdCwgYmJveCwgbWF0cml4KTsKICAgIGxldCBvcHRpb25hbENvbnRlbnQ7CiAgICBpZiAodGhpcy5vYykgewogICAgICBvcHRpb25hbENvbnRlbnQgPSBhd2FpdCBldmFsdWF0b3IucGFyc2VNYXJrZWRDb250ZW50UHJvcHModGhpcy5vYywgbnVsbCk7CiAgICB9CiAgICBpZiAob3B0aW9uYWxDb250ZW50ICE9PSB1bmRlZmluZWQpIHsKICAgICAgb3BMaXN0LmFkZE9wKE9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wcywgWyJPQyIsIG9wdGlvbmFsQ29udGVudF0pOwogICAgfQogICAgb3BMaXN0LmFkZE9wKE9QUy5iZWdpbkFubm90YXRpb24sIFt0aGlzLmRhdGEuaWQsIHRoaXMuZGF0YS5yZWN0LCB0cmFuc2Zvcm0sIHRoaXMuZ2V0Um90YXRpb25NYXRyaXgoYW5ub3RhdGlvblN0b3JhZ2UpLCBpc1VzaW5nT3duQ2FudmFzXSk7CiAgICBjb25zdCBzdHJlYW0gPSBuZXcgU3RyaW5nU3RyZWFtKGNvbnRlbnQpOwogICAgYXdhaXQgZXZhbHVhdG9yLmdldE9wZXJhdG9yTGlzdCh7CiAgICAgIHN0cmVhbSwKICAgICAgdGFzaywKICAgICAgcmVzb3VyY2VzOiB0aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMsCiAgICAgIG9wZXJhdG9yTGlzdDogb3BMaXN0CiAgICB9KTsKICAgIG9wTGlzdC5hZGRPcChPUFMuZW5kQW5ub3RhdGlvbiwgW10pOwogICAgaWYgKG9wdGlvbmFsQ29udGVudCAhPT0gdW5kZWZpbmVkKSB7CiAgICAgIG9wTGlzdC5hZGRPcChPUFMuZW5kTWFya2VkQ29udGVudCwgW10pOwogICAgfQogICAgcmV0dXJuIHsKICAgICAgb3BMaXN0LAogICAgICBzZXBhcmF0ZUZvcm06IGZhbHNlLAogICAgICBzZXBhcmF0ZUNhbnZhczogaXNVc2luZ093bkNhbnZhcwogICAgfTsKICB9CiAgX2dldE1LRGljdChyb3RhdGlvbikgewogICAgY29uc3QgbWsgPSBuZXcgRGljdChudWxsKTsKICAgIGlmIChyb3RhdGlvbikgewogICAgICBtay5zZXQoIlIiLCByb3RhdGlvbik7CiAgICB9CiAgICBpZiAodGhpcy5ib3JkZXJDb2xvcikgewogICAgICBtay5zZXQoIkJDIiwgZ2V0UGRmQ29sb3JBcnJheSh0aGlzLmJvcmRlckNvbG9yKSk7CiAgICB9CiAgICBpZiAodGhpcy5iYWNrZ3JvdW5kQ29sb3IpIHsKICAgICAgbWsuc2V0KCJCRyIsIGdldFBkZkNvbG9yQXJyYXkodGhpcy5iYWNrZ3JvdW5kQ29sb3IpKTsKICAgIH0KICAgIHJldHVybiBtay5zaXplID4gMCA/IG1rIDogbnVsbDsKICB9CiAgYW1lbmRTYXZlZERpY3QoYW5ub3RhdGlvblN0b3JhZ2UsIGRpY3QpIHt9CiAgc2V0VmFsdWUoZGljdCwgdmFsdWUsIHhyZWYsIGNoYW5nZXMpIHsKICAgIGNvbnN0IHsKICAgICAgZGljdDogcGFyZW50RGljdCwKICAgICAgcmVmOiBwYXJlbnRSZWYKICAgIH0gPSBnZXRQYXJlbnRUb1VwZGF0ZShkaWN0LCB0aGlzLnJlZiwgeHJlZik7CiAgICBpZiAoIXBhcmVudERpY3QpIHsKICAgICAgZGljdC5zZXQoIlYiLCB2YWx1ZSk7CiAgICB9IGVsc2UgaWYgKCFjaGFuZ2VzLmhhcyhwYXJlbnRSZWYpKSB7CiAgICAgIGNvbnN0IG5ld1BhcmVudERpY3QgPSBwYXJlbnREaWN0LmNsb25lKCk7CiAgICAgIG5ld1BhcmVudERpY3Quc2V0KCJWIiwgdmFsdWUpOwogICAgICBjaGFuZ2VzLnB1dChwYXJlbnRSZWYsIHsKICAgICAgICBkYXRhOiBuZXdQYXJlbnREaWN0CiAgICAgIH0pOwogICAgICByZXR1cm4gbmV3UGFyZW50RGljdDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KICBhc3luYyBzYXZlKGV2YWx1YXRvciwgdGFzaywgYW5ub3RhdGlvblN0b3JhZ2UsIGNoYW5nZXMpIHsKICAgIGNvbnN0IHN0b3JhZ2VFbnRyeSA9IGFubm90YXRpb25TdG9yYWdlPy5nZXQodGhpcy5kYXRhLmlkKTsKICAgIGNvbnN0IGZsYWdzID0gdGhpcy5fYnVpbGRGbGFncyhzdG9yYWdlRW50cnk/Lm5vVmlldywgc3RvcmFnZUVudHJ5Py5ub1ByaW50KTsKICAgIGxldCB2YWx1ZSA9IHN0b3JhZ2VFbnRyeT8udmFsdWUsCiAgICAgIHJvdGF0aW9uID0gc3RvcmFnZUVudHJ5Py5yb3RhdGlvbjsKICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5kYXRhLmZpZWxkVmFsdWUgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkgewogICAgICBpZiAoIXRoaXMuX2hhc1ZhbHVlRnJvbVhGQSAmJiByb3RhdGlvbiA9PT0gdW5kZWZpbmVkICYmIGZsYWdzID09PSB1bmRlZmluZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdmFsdWUgfHw9IHRoaXMuZGF0YS5maWVsZFZhbHVlOwogICAgfQogICAgaWYgKHJvdGF0aW9uID09PSB1bmRlZmluZWQgJiYgIXRoaXMuX2hhc1ZhbHVlRnJvbVhGQSAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiBBcnJheS5pc0FycmF5KHRoaXMuZGF0YS5maWVsZFZhbHVlKSAmJiBpc0FycmF5RXF1YWwodmFsdWUsIHRoaXMuZGF0YS5maWVsZFZhbHVlKSAmJiBmbGFncyA9PT0gdW5kZWZpbmVkKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChyb3RhdGlvbiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgIHJvdGF0aW9uID0gdGhpcy5yb3RhdGlvbjsKICAgIH0KICAgIGxldCBhcHBlYXJhbmNlID0gbnVsbDsKICAgIGlmICghdGhpcy5fbmVlZEFwcGVhcmFuY2VzKSB7CiAgICAgIGFwcGVhcmFuY2UgPSBhd2FpdCB0aGlzLl9nZXRBcHBlYXJhbmNlKGV2YWx1YXRvciwgdGFzaywgUmVuZGVyaW5nSW50ZW50RmxhZy5TQVZFLCBhbm5vdGF0aW9uU3RvcmFnZSk7CiAgICAgIGlmIChhcHBlYXJhbmNlID09PSBudWxsICYmIGZsYWdzID09PSB1bmRlZmluZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0gZWxzZSB7fQogICAgbGV0IG5lZWRBcHBlYXJhbmNlcyA9IGZhbHNlOwogICAgaWYgKGFwcGVhcmFuY2U/Lm5lZWRBcHBlYXJhbmNlcykgewogICAgICBuZWVkQXBwZWFyYW5jZXMgPSB0cnVlOwogICAgICBhcHBlYXJhbmNlID0gbnVsbDsKICAgIH0KICAgIGNvbnN0IHsKICAgICAgeHJlZgogICAgfSA9IGV2YWx1YXRvcjsKICAgIGNvbnN0IG9yaWdpbmFsRGljdCA9IHhyZWYuZmV0Y2hJZlJlZih0aGlzLnJlZik7CiAgICBpZiAoIShvcmlnaW5hbERpY3QgaW5zdGFuY2VvZiBEaWN0KSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBkaWN0ID0gbmV3IERpY3QoeHJlZik7CiAgICBmb3IgKGNvbnN0IGtleSBvZiBvcmlnaW5hbERpY3QuZ2V0S2V5cygpKSB7CiAgICAgIGlmIChrZXkgIT09ICJBUCIpIHsKICAgICAgICBkaWN0LnNldChrZXksIG9yaWdpbmFsRGljdC5nZXRSYXcoa2V5KSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChmbGFncyAhPT0gdW5kZWZpbmVkKSB7CiAgICAgIGRpY3Quc2V0KCJGIiwgZmxhZ3MpOwogICAgICBpZiAoYXBwZWFyYW5jZSA9PT0gbnVsbCAmJiAhbmVlZEFwcGVhcmFuY2VzKSB7CiAgICAgICAgY29uc3QgYXAgPSBvcmlnaW5hbERpY3QuZ2V0UmF3KCJBUCIpOwogICAgICAgIGlmIChhcCkgewogICAgICAgICAgZGljdC5zZXQoIkFQIiwgYXApOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgY29uc3QgeGZhID0gewogICAgICBwYXRoOiB0aGlzLmRhdGEuZmllbGROYW1lLAogICAgICB2YWx1ZQogICAgfTsKICAgIGNvbnN0IG5ld1BhcmVudERpY3QgPSB0aGlzLnNldFZhbHVlKGRpY3QsIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKHN0cmluZ1RvQXNjaWlPclVURjE2QkUpIDogc3RyaW5nVG9Bc2NpaU9yVVRGMTZCRSh2YWx1ZSksIHhyZWYsIGNoYW5nZXMpOwogICAgdGhpcy5hbWVuZFNhdmVkRGljdChhbm5vdGF0aW9uU3RvcmFnZSwgbmV3UGFyZW50RGljdCB8fCBkaWN0KTsKICAgIGNvbnN0IG1heWJlTUsgPSB0aGlzLl9nZXRNS0RpY3Qocm90YXRpb24pOwogICAgaWYgKG1heWJlTUspIHsKICAgICAgZGljdC5zZXQoIk1LIiwgbWF5YmVNSyk7CiAgICB9CiAgICBjaGFuZ2VzLnB1dCh0aGlzLnJlZiwgewogICAgICBkYXRhOiBkaWN0LAogICAgICB4ZmEsCiAgICAgIG5lZWRBcHBlYXJhbmNlcwogICAgfSk7CiAgICBpZiAoYXBwZWFyYW5jZSAhPT0gbnVsbCkgewogICAgICBjb25zdCBuZXdSZWYgPSB4cmVmLmdldE5ld1RlbXBvcmFyeVJlZigpOwogICAgICBjb25zdCBBUCA9IG5ldyBEaWN0KHhyZWYpOwogICAgICBkaWN0LnNldCgiQVAiLCBBUCk7CiAgICAgIEFQLnNldCgiTiIsIG5ld1JlZik7CiAgICAgIGNvbnN0IHJlc291cmNlcyA9IHRoaXMuX2dldFNhdmVGaWVsZFJlc291cmNlcyh4cmVmKTsKICAgICAgY29uc3QgYXBwZWFyYW5jZVN0cmVhbSA9IG5ldyBTdHJpbmdTdHJlYW0oYXBwZWFyYW5jZSk7CiAgICAgIGNvbnN0IGFwcGVhcmFuY2VEaWN0ID0gYXBwZWFyYW5jZVN0cmVhbS5kaWN0ID0gbmV3IERpY3QoeHJlZik7CiAgICAgIGFwcGVhcmFuY2VEaWN0LnNldCgiU3VidHlwZSIsIE5hbWUuZ2V0KCJGb3JtIikpOwogICAgICBhcHBlYXJhbmNlRGljdC5zZXQoIlJlc291cmNlcyIsIHJlc291cmNlcyk7CiAgICAgIGFwcGVhcmFuY2VEaWN0LnNldCgiQkJveCIsIFswLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodF0pOwogICAgICBjb25zdCByb3RhdGlvbk1hdHJpeCA9IHRoaXMuZ2V0Um90YXRpb25NYXRyaXgoYW5ub3RhdGlvblN0b3JhZ2UpOwogICAgICBpZiAocm90YXRpb25NYXRyaXggIT09IElERU5USVRZX01BVFJJWCkgewogICAgICAgIGFwcGVhcmFuY2VEaWN0LnNldCgiTWF0cml4Iiwgcm90YXRpb25NYXRyaXgpOwogICAgICB9CiAgICAgIGNoYW5nZXMucHV0KG5ld1JlZiwgewogICAgICAgIGRhdGE6IGFwcGVhcmFuY2VTdHJlYW0sCiAgICAgICAgeGZhOiBudWxsLAogICAgICAgIG5lZWRBcHBlYXJhbmNlczogZmFsc2UKICAgICAgfSk7CiAgICB9CiAgICBkaWN0LnNldCgiTSIsIGBEOiR7Z2V0TW9kaWZpY2F0aW9uRGF0ZSgpfWApOwogIH0KICBhc3luYyBfZ2V0QXBwZWFyYW5jZShldmFsdWF0b3IsIHRhc2ssIGludGVudCwgYW5ub3RhdGlvblN0b3JhZ2UpIHsKICAgIGlmICh0aGlzLmRhdGEucGFzc3dvcmQpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb25zdCBzdG9yYWdlRW50cnkgPSBhbm5vdGF0aW9uU3RvcmFnZT8uZ2V0KHRoaXMuZGF0YS5pZCk7CiAgICBsZXQgdmFsdWUsIHJvdGF0aW9uOwogICAgaWYgKHN0b3JhZ2VFbnRyeSkgewogICAgICB2YWx1ZSA9IHN0b3JhZ2VFbnRyeS5mb3JtYXR0ZWRWYWx1ZSB8fCBzdG9yYWdlRW50cnkudmFsdWU7CiAgICAgIHJvdGF0aW9uID0gc3RvcmFnZUVudHJ5LnJvdGF0aW9uOwogICAgfQogICAgaWYgKHJvdGF0aW9uID09PSB1bmRlZmluZWQgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhdGhpcy5fbmVlZEFwcGVhcmFuY2VzKSB7CiAgICAgIGlmICghdGhpcy5faGFzVmFsdWVGcm9tWEZBIHx8IHRoaXMuYXBwZWFyYW5jZSkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgICBjb25zdCBjb2xvcnMgPSB0aGlzLmdldEJvcmRlckFuZEJhY2tncm91bmRBcHBlYXJhbmNlcyhhbm5vdGF0aW9uU3RvcmFnZSk7CiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgewogICAgICB2YWx1ZSA9IHRoaXMuZGF0YS5maWVsZFZhbHVlOwogICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgcmV0dXJuIGAvVHggQk1DIHEgJHtjb2xvcnN9USBFTUNgOwogICAgICB9CiAgICB9CiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAxKSB7CiAgICAgIHZhbHVlID0gdmFsdWVbMF07CiAgICB9CiAgICBhc3NlcnQodHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiwgIkV4cGVjdGVkIGB2YWx1ZWAgdG8gYmUgYSBzdHJpbmcuIik7CiAgICB2YWx1ZSA9IHZhbHVlLnRyaW1FbmQoKTsKICAgIGlmICh0aGlzLmRhdGEuY29tYm8pIHsKICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5kYXRhLm9wdGlvbnMuZmluZCgoewogICAgICAgIGV4cG9ydFZhbHVlCiAgICAgIH0pID0+IHZhbHVlID09PSBleHBvcnRWYWx1ZSk7CiAgICAgIHZhbHVlID0gb3B0aW9uPy5kaXNwbGF5VmFsdWUgfHwgdmFsdWU7CiAgICB9CiAgICBpZiAodmFsdWUgPT09ICIiKSB7CiAgICAgIHJldHVybiBgL1R4IEJNQyBxICR7Y29sb3JzfVEgRU1DYDsKICAgIH0KICAgIGlmIChyb3RhdGlvbiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgIHJvdGF0aW9uID0gdGhpcy5yb3RhdGlvbjsKICAgIH0KICAgIGxldCBsaW5lQ291bnQgPSAtMTsKICAgIGxldCBsaW5lczsKICAgIGlmICh0aGlzLmRhdGEubXVsdGlMaW5lKSB7CiAgICAgIGxpbmVzID0gdmFsdWUuc3BsaXQoL1xyXG4/fFxuLykubWFwKGxpbmUgPT4gbGluZS5ub3JtYWxpemUoIk5GQyIpKTsKICAgICAgbGluZUNvdW50ID0gbGluZXMubGVuZ3RoOwogICAgfSBlbHNlIHsKICAgICAgbGluZXMgPSBbdmFsdWUucmVwbGFjZSgvXHJcbj98XG4vLCAiIikubm9ybWFsaXplKCJORkMiKV07CiAgICB9CiAgICBjb25zdCBkZWZhdWx0UGFkZGluZyA9IDE7CiAgICBjb25zdCBkZWZhdWx0SFBhZGRpbmcgPSAyOwogICAgbGV0IHsKICAgICAgd2lkdGg6IHRvdGFsV2lkdGgsCiAgICAgIGhlaWdodDogdG90YWxIZWlnaHQKICAgIH0gPSB0aGlzOwogICAgaWYgKHJvdGF0aW9uID09PSA5MCB8fCByb3RhdGlvbiA9PT0gMjcwKSB7CiAgICAgIFt0b3RhbFdpZHRoLCB0b3RhbEhlaWdodF0gPSBbdG90YWxIZWlnaHQsIHRvdGFsV2lkdGhdOwogICAgfQogICAgaWYgKCF0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZSkgewogICAgICB0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhID0gcGFyc2VEZWZhdWx0QXBwZWFyYW5jZSh0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZSA9ICIvSGVsdmV0aWNhIDAgVGYgMCBnIik7CiAgICB9CiAgICBsZXQgZm9udCA9IGF3YWl0IFdpZGdldEFubm90YXRpb24uX2dldEZvbnREYXRhKGV2YWx1YXRvciwgdGFzaywgdGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YSwgdGhpcy5fZmllbGRSZXNvdXJjZXMubWVyZ2VkUmVzb3VyY2VzKTsKICAgIGxldCBkZWZhdWx0QXBwZWFyYW5jZSwgZm9udFNpemUsIGxpbmVIZWlnaHQ7CiAgICBjb25zdCBlbmNvZGVkTGluZXMgPSBbXTsKICAgIGxldCBlbmNvZGluZ0Vycm9yID0gZmFsc2U7CiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHsKICAgICAgY29uc3QgZW5jb2RlZFN0cmluZyA9IGZvbnQuZW5jb2RlU3RyaW5nKGxpbmUpOwogICAgICBpZiAoZW5jb2RlZFN0cmluZy5sZW5ndGggPiAxKSB7CiAgICAgICAgZW5jb2RpbmdFcnJvciA9IHRydWU7CiAgICAgIH0KICAgICAgZW5jb2RlZExpbmVzLnB1c2goZW5jb2RlZFN0cmluZy5qb2luKCIiKSk7CiAgICB9CiAgICBpZiAoZW5jb2RpbmdFcnJvciAmJiBpbnRlbnQgJiBSZW5kZXJpbmdJbnRlbnRGbGFnLlNBVkUpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBuZWVkQXBwZWFyYW5jZXM6IHRydWUKICAgICAgfTsKICAgIH0KICAgIGlmIChlbmNvZGluZ0Vycm9yICYmIHRoaXMuX2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKSB7CiAgICAgIGNvbnN0IGZvbnRGYW1pbHkgPSB0aGlzLmRhdGEuY29tYiA/ICJtb25vc3BhY2UiIDogInNhbnMtc2VyaWYiOwogICAgICBjb25zdCBmYWtlVW5pY29kZUZvbnQgPSBuZXcgRmFrZVVuaWNvZGVGb250KGV2YWx1YXRvci54cmVmLCBmb250RmFtaWx5KTsKICAgICAgY29uc3QgcmVzb3VyY2VzID0gZmFrZVVuaWNvZGVGb250LmNyZWF0ZUZvbnRSZXNvdXJjZXMobGluZXMuam9pbigiIikpOwogICAgICBjb25zdCBuZXdGb250ID0gcmVzb3VyY2VzLmdldFJhdygiRm9udCIpOwogICAgICBpZiAodGhpcy5fZmllbGRSZXNvdXJjZXMubWVyZ2VkUmVzb3VyY2VzLmhhcygiRm9udCIpKSB7CiAgICAgICAgY29uc3Qgb2xkRm9udCA9IHRoaXMuX2ZpZWxkUmVzb3VyY2VzLm1lcmdlZFJlc291cmNlcy5nZXQoIkZvbnQiKTsKICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBuZXdGb250LmdldEtleXMoKSkgewogICAgICAgICAgb2xkRm9udC5zZXQoa2V5LCBuZXdGb250LmdldFJhdyhrZXkpKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5fZmllbGRSZXNvdXJjZXMubWVyZ2VkUmVzb3VyY2VzLnNldCgiRm9udCIsIG5ld0ZvbnQpOwogICAgICB9CiAgICAgIGNvbnN0IGZvbnROYW1lID0gZmFrZVVuaWNvZGVGb250LmZvbnROYW1lLm5hbWU7CiAgICAgIGZvbnQgPSBhd2FpdCBXaWRnZXRBbm5vdGF0aW9uLl9nZXRGb250RGF0YShldmFsdWF0b3IsIHRhc2ssIHsKICAgICAgICBmb250TmFtZSwKICAgICAgICBmb250U2l6ZTogMAogICAgICB9LCByZXNvdXJjZXMpOwogICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBlbmNvZGVkTGluZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICAgIGVuY29kZWRMaW5lc1tpXSA9IHN0cmluZ1RvVVRGMTZTdHJpbmcobGluZXNbaV0pOwogICAgICB9CiAgICAgIGNvbnN0IHNhdmVkRGVmYXVsdEFwcGVhcmFuY2UgPSBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobnVsbCksIHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEpOwogICAgICB0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLmZvbnRTaXplID0gMDsKICAgICAgdGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YS5mb250TmFtZSA9IGZvbnROYW1lOwogICAgICBbZGVmYXVsdEFwcGVhcmFuY2UsIGZvbnRTaXplLCBsaW5lSGVpZ2h0XSA9IHRoaXMuX2NvbXB1dGVGb250U2l6ZSh0b3RhbEhlaWdodCAtIDIgKiBkZWZhdWx0UGFkZGluZywgdG90YWxXaWR0aCAtIDIgKiBkZWZhdWx0SFBhZGRpbmcsIHZhbHVlLCBmb250LCBsaW5lQ291bnQpOwogICAgICB0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhID0gc2F2ZWREZWZhdWx0QXBwZWFyYW5jZTsKICAgIH0gZWxzZSB7CiAgICAgIGlmICghdGhpcy5faXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQpIHsKICAgICAgICB3YXJuKCJfZ2V0QXBwZWFyYW5jZTogT2Zmc2NyZWVuQ2FudmFzIGlzIG5vdCBzdXBwb3J0ZWQsIGFubm90YXRpb24gbWF5IG5vdCByZW5kZXIgY29ycmVjdGx5LiIpOwogICAgICB9CiAgICAgIFtkZWZhdWx0QXBwZWFyYW5jZSwgZm9udFNpemUsIGxpbmVIZWlnaHRdID0gdGhpcy5fY29tcHV0ZUZvbnRTaXplKHRvdGFsSGVpZ2h0IC0gMiAqIGRlZmF1bHRQYWRkaW5nLCB0b3RhbFdpZHRoIC0gMiAqIGRlZmF1bHRIUGFkZGluZywgdmFsdWUsIGZvbnQsIGxpbmVDb3VudCk7CiAgICB9CiAgICBsZXQgZGVzY2VudCA9IGZvbnQuZGVzY2VudDsKICAgIGlmIChpc05hTihkZXNjZW50KSkgewogICAgICBkZXNjZW50ID0gQkFTRUxJTkVfRkFDVE9SICogbGluZUhlaWdodDsKICAgIH0gZWxzZSB7CiAgICAgIGRlc2NlbnQgPSBNYXRoLm1heChCQVNFTElORV9GQUNUT1IgKiBsaW5lSGVpZ2h0LCBNYXRoLmFicyhkZXNjZW50KSAqIGZvbnRTaXplKTsKICAgIH0KICAgIGNvbnN0IGRlZmF1bHRWUGFkZGluZyA9IE1hdGgubWluKE1hdGguZmxvb3IoKHRvdGFsSGVpZ2h0IC0gZm9udFNpemUpIC8gMiksIGRlZmF1bHRQYWRkaW5nKTsKICAgIGNvbnN0IGFsaWdubWVudCA9IHRoaXMuZGF0YS50ZXh0QWxpZ25tZW50OwogICAgaWYgKHRoaXMuZGF0YS5tdWx0aUxpbmUpIHsKICAgICAgcmV0dXJuIHRoaXMuX2dldE11bHRpbGluZUFwcGVhcmFuY2UoZGVmYXVsdEFwcGVhcmFuY2UsIGVuY29kZWRMaW5lcywgZm9udCwgZm9udFNpemUsIHRvdGFsV2lkdGgsIHRvdGFsSGVpZ2h0LCBhbGlnbm1lbnQsIGRlZmF1bHRIUGFkZGluZywgZGVmYXVsdFZQYWRkaW5nLCBkZXNjZW50LCBsaW5lSGVpZ2h0LCBhbm5vdGF0aW9uU3RvcmFnZSk7CiAgICB9CiAgICBpZiAodGhpcy5kYXRhLmNvbWIpIHsKICAgICAgcmV0dXJuIHRoaXMuX2dldENvbWJBcHBlYXJhbmNlKGRlZmF1bHRBcHBlYXJhbmNlLCBmb250LCBlbmNvZGVkTGluZXNbMF0sIGZvbnRTaXplLCB0b3RhbFdpZHRoLCB0b3RhbEhlaWdodCwgZGVmYXVsdEhQYWRkaW5nLCBkZWZhdWx0VlBhZGRpbmcsIGRlc2NlbnQsIGxpbmVIZWlnaHQsIGFubm90YXRpb25TdG9yYWdlKTsKICAgIH0KICAgIGNvbnN0IGJvdHRvbVBhZGRpbmcgPSBkZWZhdWx0VlBhZGRpbmcgKyBkZXNjZW50OwogICAgaWYgKGFsaWdubWVudCA9PT0gMCB8fCBhbGlnbm1lbnQgPiAyKSB7CiAgICAgIHJldHVybiBgL1R4IEJNQyBxICR7Y29sb3JzfUJUIGAgKyBkZWZhdWx0QXBwZWFyYW5jZSArIGAgMSAwIDAgMSAke251bWJlclRvU3RyaW5nKGRlZmF1bHRIUGFkZGluZyl9ICR7bnVtYmVyVG9TdHJpbmcoYm90dG9tUGFkZGluZyl9IFRtICgke2VzY2FwZVN0cmluZyhlbmNvZGVkTGluZXNbMF0pfSkgVGpgICsgIiBFVCBRIEVNQyI7CiAgICB9CiAgICBjb25zdCBwcmV2SW5mbyA9IHsKICAgICAgc2hpZnQ6IDAKICAgIH07CiAgICBjb25zdCByZW5kZXJlZFRleHQgPSB0aGlzLl9yZW5kZXJUZXh0KGVuY29kZWRMaW5lc1swXSwgZm9udCwgZm9udFNpemUsIHRvdGFsV2lkdGgsIGFsaWdubWVudCwgcHJldkluZm8sIGRlZmF1bHRIUGFkZGluZywgYm90dG9tUGFkZGluZyk7CiAgICByZXR1cm4gYC9UeCBCTUMgcSAke2NvbG9yc31CVCBgICsgZGVmYXVsdEFwcGVhcmFuY2UgKyBgIDEgMCAwIDEgMCAwIFRtICR7cmVuZGVyZWRUZXh0fWAgKyAiIEVUIFEgRU1DIjsKICB9CiAgc3RhdGljIGFzeW5jIF9nZXRGb250RGF0YShldmFsdWF0b3IsIHRhc2ssIGFwcGVhcmFuY2VEYXRhLCByZXNvdXJjZXMpIHsKICAgIGNvbnN0IG9wZXJhdG9yTGlzdCA9IG5ldyBPcGVyYXRvckxpc3QoKTsKICAgIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHsKICAgICAgZm9udDogbnVsbCwKICAgICAgY2xvbmUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0KICAgIH07CiAgICBjb25zdCB7CiAgICAgIGZvbnROYW1lLAogICAgICBmb250U2l6ZQogICAgfSA9IGFwcGVhcmFuY2VEYXRhOwogICAgYXdhaXQgZXZhbHVhdG9yLmhhbmRsZVNldEZvbnQocmVzb3VyY2VzLCBbZm9udE5hbWUgJiYgTmFtZS5nZXQoZm9udE5hbWUpLCBmb250U2l6ZV0sIG51bGwsIG9wZXJhdG9yTGlzdCwgdGFzaywgaW5pdGlhbFN0YXRlLCBudWxsKTsKICAgIHJldHVybiBpbml0aWFsU3RhdGUuZm9udDsKICB9CiAgX2dldFRleHRXaWR0aCh0ZXh0LCBmb250KSB7CiAgICByZXR1cm4gTWF0aC5zdW1QcmVjaXNlKGZvbnQuY2hhcnNUb0dseXBocyh0ZXh0KS5tYXAoZyA9PiBnLndpZHRoKSkgLyAxMDAwOwogIH0KICBfY29tcHV0ZUZvbnRTaXplKGhlaWdodCwgd2lkdGgsIHRleHQsIGZvbnQsIGxpbmVDb3VudCkgewogICAgbGV0IHsKICAgICAgZm9udFNpemUKICAgIH0gPSB0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhOwogICAgbGV0IGxpbmVIZWlnaHQgPSAoZm9udFNpemUgfHwgMTIpICogTElORV9GQUNUT1IsCiAgICAgIG51bWJlck9mTGluZXMgPSBNYXRoLnJvdW5kKGhlaWdodCAvIGxpbmVIZWlnaHQpOwogICAgaWYgKCFmb250U2l6ZSkgewogICAgICBjb25zdCByb3VuZFdpdGhUd29EaWdpdHMgPSB4ID0+IE1hdGguZmxvb3IoeCAqIDEwMCkgLyAxMDA7CiAgICAgIGlmIChsaW5lQ291bnQgPT09IC0xKSB7CiAgICAgICAgY29uc3QgdGV4dFdpZHRoID0gdGhpcy5fZ2V0VGV4dFdpZHRoKHRleHQsIGZvbnQpOwogICAgICAgIGZvbnRTaXplID0gcm91bmRXaXRoVHdvRGlnaXRzKE1hdGgubWluKGhlaWdodCAvIExJTkVfRkFDVE9SLCB3aWR0aCAvIHRleHRXaWR0aCkpOwogICAgICAgIG51bWJlck9mTGluZXMgPSAxOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IGxpbmVzID0gdGV4dC5zcGxpdCgvXHJcbj98XG4vKTsKICAgICAgICBjb25zdCBjYWNoZWRMaW5lcyA9IFtdOwogICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykgewogICAgICAgICAgY29uc3QgZW5jb2RlZCA9IGZvbnQuZW5jb2RlU3RyaW5nKGxpbmUpLmpvaW4oIiIpOwogICAgICAgICAgY29uc3QgZ2x5cGhzID0gZm9udC5jaGFyc1RvR2x5cGhzKGVuY29kZWQpOwogICAgICAgICAgY29uc3QgcG9zaXRpb25zID0gZm9udC5nZXRDaGFyUG9zaXRpb25zKGVuY29kZWQpOwogICAgICAgICAgY2FjaGVkTGluZXMucHVzaCh7CiAgICAgICAgICAgIGxpbmU6IGVuY29kZWQsCiAgICAgICAgICAgIGdseXBocywKICAgICAgICAgICAgcG9zaXRpb25zCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgY29uc3QgaXNUb29CaWcgPSBmc2l6ZSA9PiB7CiAgICAgICAgICBsZXQgdG90YWxIZWlnaHQgPSAwOwogICAgICAgICAgZm9yIChjb25zdCBjYWNoZSBvZiBjYWNoZWRMaW5lcykgewogICAgICAgICAgICBjb25zdCBjaHVua3MgPSB0aGlzLl9zcGxpdExpbmUobnVsbCwgZm9udCwgZnNpemUsIHdpZHRoLCBjYWNoZSk7CiAgICAgICAgICAgIHRvdGFsSGVpZ2h0ICs9IGNodW5rcy5sZW5ndGggKiBmc2l6ZTsKICAgICAgICAgICAgaWYgKHRvdGFsSGVpZ2h0ID4gaGVpZ2h0KSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9OwogICAgICAgIG51bWJlck9mTGluZXMgPSBNYXRoLm1heChudW1iZXJPZkxpbmVzLCBsaW5lQ291bnQpOwogICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICBsaW5lSGVpZ2h0ID0gaGVpZ2h0IC8gbnVtYmVyT2ZMaW5lczsKICAgICAgICAgIGZvbnRTaXplID0gcm91bmRXaXRoVHdvRGlnaXRzKGxpbmVIZWlnaHQgLyBMSU5FX0ZBQ1RPUik7CiAgICAgICAgICBpZiAoaXNUb29CaWcoZm9udFNpemUpKSB7CiAgICAgICAgICAgIG51bWJlck9mTGluZXMrKzsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgY29uc3QgewogICAgICAgIGZvbnROYW1lLAogICAgICAgIGZvbnRDb2xvcgogICAgICB9ID0gdGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YTsKICAgICAgdGhpcy5fZGVmYXVsdEFwcGVhcmFuY2UgPSBjcmVhdGVEZWZhdWx0QXBwZWFyYW5jZSh7CiAgICAgICAgZm9udFNpemUsCiAgICAgICAgZm9udE5hbWUsCiAgICAgICAgZm9udENvbG9yCiAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIFt0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZSwgZm9udFNpemUsIGhlaWdodCAvIG51bWJlck9mTGluZXNdOwogIH0KICBfcmVuZGVyVGV4dCh0ZXh0LCBmb250LCBmb250U2l6ZSwgdG90YWxXaWR0aCwgYWxpZ25tZW50LCBwcmV2SW5mbywgaFBhZGRpbmcsIHZQYWRkaW5nKSB7CiAgICBsZXQgc2hpZnQ7CiAgICBpZiAoYWxpZ25tZW50ID09PSAxKSB7CiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5fZ2V0VGV4dFdpZHRoKHRleHQsIGZvbnQpICogZm9udFNpemU7CiAgICAgIHNoaWZ0ID0gKHRvdGFsV2lkdGggLSB3aWR0aCkgLyAyOwogICAgfSBlbHNlIGlmIChhbGlnbm1lbnQgPT09IDIpIHsKICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLl9nZXRUZXh0V2lkdGgodGV4dCwgZm9udCkgKiBmb250U2l6ZTsKICAgICAgc2hpZnQgPSB0b3RhbFdpZHRoIC0gd2lkdGggLSBoUGFkZGluZzsKICAgIH0gZWxzZSB7CiAgICAgIHNoaWZ0ID0gaFBhZGRpbmc7CiAgICB9CiAgICBjb25zdCBzaGlmdFN0ciA9IG51bWJlclRvU3RyaW5nKHNoaWZ0IC0gcHJldkluZm8uc2hpZnQpOwogICAgcHJldkluZm8uc2hpZnQgPSBzaGlmdDsKICAgIHZQYWRkaW5nID0gbnVtYmVyVG9TdHJpbmcodlBhZGRpbmcpOwogICAgcmV0dXJuIGAke3NoaWZ0U3RyfSAke3ZQYWRkaW5nfSBUZCAoJHtlc2NhcGVTdHJpbmcodGV4dCl9KSBUamA7CiAgfQogIF9nZXRTYXZlRmllbGRSZXNvdXJjZXMoeHJlZikgewogICAgY29uc3QgewogICAgICBsb2NhbFJlc291cmNlcywKICAgICAgYXBwZWFyYW5jZVJlc291cmNlcywKICAgICAgYWNyb0Zvcm1SZXNvdXJjZXMKICAgIH0gPSB0aGlzLl9maWVsZFJlc291cmNlczsKICAgIGNvbnN0IGZvbnROYW1lID0gdGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YT8uZm9udE5hbWU7CiAgICBpZiAoIWZvbnROYW1lKSB7CiAgICAgIHJldHVybiBsb2NhbFJlc291cmNlcyB8fCBEaWN0LmVtcHR5OwogICAgfQogICAgZm9yIChjb25zdCByZXNvdXJjZXMgb2YgW2xvY2FsUmVzb3VyY2VzLCBhcHBlYXJhbmNlUmVzb3VyY2VzXSkgewogICAgICBpZiAocmVzb3VyY2VzIGluc3RhbmNlb2YgRGljdCkgewogICAgICAgIGNvbnN0IGxvY2FsRm9udCA9IHJlc291cmNlcy5nZXQoIkZvbnQiKTsKICAgICAgICBpZiAobG9jYWxGb250IGluc3RhbmNlb2YgRGljdCAmJiBsb2NhbEZvbnQuaGFzKGZvbnROYW1lKSkgewogICAgICAgICAgcmV0dXJuIHJlc291cmNlczsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChhY3JvRm9ybVJlc291cmNlcyBpbnN0YW5jZW9mIERpY3QpIHsKICAgICAgY29uc3QgYWNyb0Zvcm1Gb250ID0gYWNyb0Zvcm1SZXNvdXJjZXMuZ2V0KCJGb250Iik7CiAgICAgIGlmIChhY3JvRm9ybUZvbnQgaW5zdGFuY2VvZiBEaWN0ICYmIGFjcm9Gb3JtRm9udC5oYXMoZm9udE5hbWUpKSB7CiAgICAgICAgY29uc3Qgc3ViRm9udERpY3QgPSBuZXcgRGljdCh4cmVmKTsKICAgICAgICBzdWJGb250RGljdC5zZXQoZm9udE5hbWUsIGFjcm9Gb3JtRm9udC5nZXRSYXcoZm9udE5hbWUpKTsKICAgICAgICBjb25zdCBzdWJSZXNvdXJjZXNEaWN0ID0gbmV3IERpY3QoeHJlZik7CiAgICAgICAgc3ViUmVzb3VyY2VzRGljdC5zZXQoIkZvbnQiLCBzdWJGb250RGljdCk7CiAgICAgICAgcmV0dXJuIERpY3QubWVyZ2UoewogICAgICAgICAgeHJlZiwKICAgICAgICAgIGRpY3RBcnJheTogW3N1YlJlc291cmNlc0RpY3QsIGxvY2FsUmVzb3VyY2VzXSwKICAgICAgICAgIG1lcmdlU3ViRGljdHM6IHRydWUKICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGxvY2FsUmVzb3VyY2VzIHx8IERpY3QuZW1wdHk7CiAgfQogIGdldEZpZWxkT2JqZWN0KCkgewogICAgcmV0dXJuIG51bGw7CiAgfQp9CmNsYXNzIFRleHRXaWRnZXRBbm5vdGF0aW9uIGV4dGVuZHMgV2lkZ2V0QW5ub3RhdGlvbiB7CiAgY29uc3RydWN0b3IocGFyYW1zKSB7CiAgICBzdXBlcihwYXJhbXMpOwogICAgY29uc3QgewogICAgICBkaWN0CiAgICB9ID0gcGFyYW1zOwogICAgaWYgKGRpY3QuaGFzKCJQTUQiKSkgewogICAgICB0aGlzLmZsYWdzIHw9IEFubm90YXRpb25GbGFnLkhJRERFTjsKICAgICAgdGhpcy5kYXRhLmhpZGRlbiA9IHRydWU7CiAgICAgIHdhcm4oIkJhcmNvZGVzIGFyZSBub3Qgc3VwcG9ydGVkIik7CiAgICB9CiAgICB0aGlzLmRhdGEuaGFzT3duQ2FudmFzID0gdGhpcy5kYXRhLnJlYWRPbmx5ICYmICF0aGlzLmRhdGEubm9IVE1MOwogICAgdGhpcy5faGFzVGV4dCA9IHRydWU7CiAgICBpZiAodHlwZW9mIHRoaXMuZGF0YS5maWVsZFZhbHVlICE9PSAic3RyaW5nIikgewogICAgICB0aGlzLmRhdGEuZmllbGRWYWx1ZSA9ICIiOwogICAgfQogICAgbGV0IGFsaWdubWVudCA9IGdldEluaGVyaXRhYmxlUHJvcGVydHkoewogICAgICBkaWN0LAogICAgICBrZXk6ICJRIgogICAgfSk7CiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoYWxpZ25tZW50KSB8fCBhbGlnbm1lbnQgPCAwIHx8IGFsaWdubWVudCA+IDIpIHsKICAgICAgYWxpZ25tZW50ID0gbnVsbDsKICAgIH0KICAgIHRoaXMuZGF0YS50ZXh0QWxpZ25tZW50ID0gYWxpZ25tZW50OwogICAgbGV0IG1heGltdW1MZW5ndGggPSBnZXRJbmhlcml0YWJsZVByb3BlcnR5KHsKICAgICAgZGljdCwKICAgICAga2V5OiAiTWF4TGVuIgogICAgfSk7CiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIobWF4aW11bUxlbmd0aCkgfHwgbWF4aW11bUxlbmd0aCA8IDApIHsKICAgICAgbWF4aW11bUxlbmd0aCA9IDA7CiAgICB9CiAgICB0aGlzLmRhdGEubWF4TGVuID0gbWF4aW11bUxlbmd0aDsKICAgIHRoaXMuZGF0YS5tdWx0aUxpbmUgPSB0aGlzLmhhc0ZpZWxkRmxhZyhBbm5vdGF0aW9uRmllbGRGbGFnLk1VTFRJTElORSk7CiAgICB0aGlzLmRhdGEuY29tYiA9IHRoaXMuaGFzRmllbGRGbGFnKEFubm90YXRpb25GaWVsZEZsYWcuQ09NQikgJiYgIXRoaXMuZGF0YS5tdWx0aUxpbmUgJiYgIXRoaXMuZGF0YS5wYXNzd29yZCAmJiAhdGhpcy5oYXNGaWVsZEZsYWcoQW5ub3RhdGlvbkZpZWxkRmxhZy5GSUxFU0VMRUNUKSAmJiB0aGlzLmRhdGEubWF4TGVuICE9PSAwOwogICAgdGhpcy5kYXRhLmRvTm90U2Nyb2xsID0gdGhpcy5oYXNGaWVsZEZsYWcoQW5ub3RhdGlvbkZpZWxkRmxhZy5ET05PVFNDUk9MTCk7CiAgfQogIGdldCBoYXNUZXh0Q29udGVudCgpIHsKICAgIHJldHVybiAhIXRoaXMuYXBwZWFyYW5jZSAmJiAhdGhpcy5fbmVlZEFwcGVhcmFuY2VzOwogIH0KICBfZ2V0Q29tYkFwcGVhcmFuY2UoZGVmYXVsdEFwcGVhcmFuY2UsIGZvbnQsIHRleHQsIGZvbnRTaXplLCB3aWR0aCwgaGVpZ2h0LCBoUGFkZGluZywgdlBhZGRpbmcsIGRlc2NlbnQsIGxpbmVIZWlnaHQsIGFubm90YXRpb25TdG9yYWdlKSB7CiAgICBjb25zdCBjb21iV2lkdGggPSB3aWR0aCAvIHRoaXMuZGF0YS5tYXhMZW47CiAgICBjb25zdCBjb2xvcnMgPSB0aGlzLmdldEJvcmRlckFuZEJhY2tncm91bmRBcHBlYXJhbmNlcyhhbm5vdGF0aW9uU3RvcmFnZSk7CiAgICBjb25zdCBidWYgPSBbXTsKICAgIGNvbnN0IHBvc2l0aW9ucyA9IGZvbnQuZ2V0Q2hhclBvc2l0aW9ucyh0ZXh0KTsKICAgIGZvciAoY29uc3QgW3N0YXJ0LCBlbmRdIG9mIHBvc2l0aW9ucykgewogICAgICBidWYucHVzaChgKCR7ZXNjYXBlU3RyaW5nKHRleHQuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpKX0pIFRqYCk7CiAgICB9CiAgICBjb25zdCByZW5kZXJlZENvbWIgPSBidWYuam9pbihgICR7bnVtYmVyVG9TdHJpbmcoY29tYldpZHRoKX0gMCBUZCBgKTsKICAgIHJldHVybiBgL1R4IEJNQyBxICR7Y29sb3JzfUJUIGAgKyBkZWZhdWx0QXBwZWFyYW5jZSArIGAgMSAwIDAgMSAke251bWJlclRvU3RyaW5nKGhQYWRkaW5nKX0gJHtudW1iZXJUb1N0cmluZyh2UGFkZGluZyArIGRlc2NlbnQpfSBUbSAke3JlbmRlcmVkQ29tYn1gICsgIiBFVCBRIEVNQyI7CiAgfQogIF9nZXRNdWx0aWxpbmVBcHBlYXJhbmNlKGRlZmF1bHRBcHBlYXJhbmNlLCBsaW5lcywgZm9udCwgZm9udFNpemUsIHdpZHRoLCBoZWlnaHQsIGFsaWdubWVudCwgaFBhZGRpbmcsIHZQYWRkaW5nLCBkZXNjZW50LCBsaW5lSGVpZ2h0LCBhbm5vdGF0aW9uU3RvcmFnZSkgewogICAgY29uc3QgYnVmID0gW107CiAgICBjb25zdCB0b3RhbFdpZHRoID0gd2lkdGggLSAyICogaFBhZGRpbmc7CiAgICBjb25zdCBwcmV2SW5mbyA9IHsKICAgICAgc2hpZnQ6IDAKICAgIH07CiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBsaW5lcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CiAgICAgIGNvbnN0IGxpbmUgPSBsaW5lc1tpXTsKICAgICAgY29uc3QgY2h1bmtzID0gdGhpcy5fc3BsaXRMaW5lKGxpbmUsIGZvbnQsIGZvbnRTaXplLCB0b3RhbFdpZHRoKTsKICAgICAgZm9yIChsZXQgaiA9IDAsIGpqID0gY2h1bmtzLmxlbmd0aDsgaiA8IGpqOyBqKyspIHsKICAgICAgICBjb25zdCBjaHVuayA9IGNodW5rc1tqXTsKICAgICAgICBjb25zdCB2U2hpZnQgPSBpID09PSAwICYmIGogPT09IDAgPyAtdlBhZGRpbmcgLSAobGluZUhlaWdodCAtIGRlc2NlbnQpIDogLWxpbmVIZWlnaHQ7CiAgICAgICAgYnVmLnB1c2godGhpcy5fcmVuZGVyVGV4dChjaHVuaywgZm9udCwgZm9udFNpemUsIHdpZHRoLCBhbGlnbm1lbnQsIHByZXZJbmZvLCBoUGFkZGluZywgdlNoaWZ0KSk7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0IGNvbG9ycyA9IHRoaXMuZ2V0Qm9yZGVyQW5kQmFja2dyb3VuZEFwcGVhcmFuY2VzKGFubm90YXRpb25TdG9yYWdlKTsKICAgIGNvbnN0IHJlbmRlcmVkVGV4dCA9IGJ1Zi5qb2luKCJcbiIpOwogICAgcmV0dXJuIGAvVHggQk1DIHEgJHtjb2xvcnN9QlQgYCArIGRlZmF1bHRBcHBlYXJhbmNlICsgYCAxIDAgMCAxIDAgJHtudW1iZXJUb1N0cmluZyhoZWlnaHQpfSBUbSAke3JlbmRlcmVkVGV4dH1gICsgIiBFVCBRIEVNQyI7CiAgfQogIF9zcGxpdExpbmUobGluZSwgZm9udCwgZm9udFNpemUsIHdpZHRoLCBjYWNoZSA9IHt9KSB7CiAgICBsaW5lID0gY2FjaGUubGluZSB8fCBsaW5lOwogICAgY29uc3QgZ2x5cGhzID0gY2FjaGUuZ2x5cGhzIHx8IGZvbnQuY2hhcnNUb0dseXBocyhsaW5lKTsKICAgIGlmIChnbHlwaHMubGVuZ3RoIDw9IDEpIHsKICAgICAgcmV0dXJuIFtsaW5lXTsKICAgIH0KICAgIGNvbnN0IHBvc2l0aW9ucyA9IGNhY2hlLnBvc2l0aW9ucyB8fCBmb250LmdldENoYXJQb3NpdGlvbnMobGluZSk7CiAgICBjb25zdCBzY2FsZSA9IGZvbnRTaXplIC8gMTAwMDsKICAgIGNvbnN0IGNodW5rcyA9IFtdOwogICAgbGV0IGxhc3RTcGFjZVBvc0luU3RyaW5nU3RhcnQgPSAtMSwKICAgICAgbGFzdFNwYWNlUG9zSW5TdHJpbmdFbmQgPSAtMSwKICAgICAgbGFzdFNwYWNlUG9zID0gLTEsCiAgICAgIHN0YXJ0Q2h1bmsgPSAwLAogICAgICBjdXJyZW50V2lkdGggPSAwOwogICAgZm9yIChsZXQgaSA9IDAsIGlpID0gZ2x5cGhzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgY29uc3QgW3N0YXJ0LCBlbmRdID0gcG9zaXRpb25zW2ldOwogICAgICBjb25zdCBnbHlwaCA9IGdseXBoc1tpXTsKICAgICAgY29uc3QgZ2x5cGhXaWR0aCA9IGdseXBoLndpZHRoICogc2NhbGU7CiAgICAgIGlmIChnbHlwaC51bmljb2RlID09PSAiICIpIHsKICAgICAgICBpZiAoY3VycmVudFdpZHRoICsgZ2x5cGhXaWR0aCA+IHdpZHRoKSB7CiAgICAgICAgICBjaHVua3MucHVzaChsaW5lLnN1YnN0cmluZyhzdGFydENodW5rLCBzdGFydCkpOwogICAgICAgICAgc3RhcnRDaHVuayA9IHN0YXJ0OwogICAgICAgICAgY3VycmVudFdpZHRoID0gZ2x5cGhXaWR0aDsKICAgICAgICAgIGxhc3RTcGFjZVBvc0luU3RyaW5nU3RhcnQgPSAtMTsKICAgICAgICAgIGxhc3RTcGFjZVBvcyA9IC0xOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjdXJyZW50V2lkdGggKz0gZ2x5cGhXaWR0aDsKICAgICAgICAgIGxhc3RTcGFjZVBvc0luU3RyaW5nU3RhcnQgPSBzdGFydDsKICAgICAgICAgIGxhc3RTcGFjZVBvc0luU3RyaW5nRW5kID0gZW5kOwogICAgICAgICAgbGFzdFNwYWNlUG9zID0gaTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFdpZHRoICsgZ2x5cGhXaWR0aCA+IHdpZHRoKSB7CiAgICAgICAgaWYgKGxhc3RTcGFjZVBvc0luU3RyaW5nU3RhcnQgIT09IC0xKSB7CiAgICAgICAgICBjaHVua3MucHVzaChsaW5lLnN1YnN0cmluZyhzdGFydENodW5rLCBsYXN0U3BhY2VQb3NJblN0cmluZ0VuZCkpOwogICAgICAgICAgc3RhcnRDaHVuayA9IGxhc3RTcGFjZVBvc0luU3RyaW5nRW5kOwogICAgICAgICAgaSA9IGxhc3RTcGFjZVBvcyArIDE7CiAgICAgICAgICBsYXN0U3BhY2VQb3NJblN0cmluZ1N0YXJ0ID0gLTE7CiAgICAgICAgICBjdXJyZW50V2lkdGggPSAwOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjaHVua3MucHVzaChsaW5lLnN1YnN0cmluZyhzdGFydENodW5rLCBzdGFydCkpOwogICAgICAgICAgc3RhcnRDaHVuayA9IHN0YXJ0OwogICAgICAgICAgY3VycmVudFdpZHRoID0gZ2x5cGhXaWR0aDsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY3VycmVudFdpZHRoICs9IGdseXBoV2lkdGg7CiAgICAgIH0KICAgIH0KICAgIGlmIChzdGFydENodW5rIDwgbGluZS5sZW5ndGgpIHsKICAgICAgY2h1bmtzLnB1c2gobGluZS5zdWJzdHJpbmcoc3RhcnRDaHVuaywgbGluZS5sZW5ndGgpKTsKICAgIH0KICAgIHJldHVybiBjaHVua3M7CiAgfQogIGFzeW5jIGV4dHJhY3RUZXh0Q29udGVudChldmFsdWF0b3IsIHRhc2ssIHZpZXdCb3gpIHsKICAgIGF3YWl0IHN1cGVyLmV4dHJhY3RUZXh0Q29udGVudChldmFsdWF0b3IsIHRhc2ssIHZpZXdCb3gpOwogICAgY29uc3QgdGV4dCA9IHRoaXMuZGF0YS50ZXh0Q29udGVudDsKICAgIGlmICghdGV4dCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBhbGxUZXh0ID0gdGV4dC5qb2luKCJcbiIpOwogICAgaWYgKGFsbFRleHQgPT09IHRoaXMuZGF0YS5maWVsZFZhbHVlKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHJlZ2V4ID0gYWxsVGV4dC5yZXBsYWNlQWxsKC8oWy4qKz9eJHt9KCl8W1xdXFxdKXwoXHMrKS9nLCAoX20sIHAxKSA9PiBwMSA/IGBcXCR7cDF9YCA6ICJcXHMrIik7CiAgICBpZiAobmV3IFJlZ0V4cChgXlxccyoke3JlZ2V4fVxccyokYCkudGVzdCh0aGlzLmRhdGEuZmllbGRWYWx1ZSkpIHsKICAgICAgdGhpcy5kYXRhLnRleHRDb250ZW50ID0gdGhpcy5kYXRhLmZpZWxkVmFsdWUuc3BsaXQoIlxuIik7CiAgICB9CiAgfQogIGdldEZpZWxkT2JqZWN0KCkgewogICAgcmV0dXJuIHsKICAgICAgaWQ6IHRoaXMuZGF0YS5pZCwKICAgICAgdmFsdWU6IHRoaXMuZGF0YS5maWVsZFZhbHVlLAogICAgICBkZWZhdWx0VmFsdWU6IHRoaXMuZGF0YS5kZWZhdWx0RmllbGRWYWx1ZSB8fCAiIiwKICAgICAgbXVsdGlsaW5lOiB0aGlzLmRhdGEubXVsdGlMaW5lLAogICAgICBwYXNzd29yZDogdGhpcy5kYXRhLnBhc3N3b3JkLAogICAgICBjaGFyTGltaXQ6IHRoaXMuZGF0YS5tYXhMZW4sCiAgICAgIGNvbWI6IHRoaXMuZGF0YS5jb21iLAogICAgICBlZGl0YWJsZTogIXRoaXMuZGF0YS5yZWFkT25seSwKICAgICAgaGlkZGVuOiB0aGlzLmRhdGEuaGlkZGVuLAogICAgICBuYW1lOiB0aGlzLmRhdGEuZmllbGROYW1lLAogICAgICByZWN0OiB0aGlzLmRhdGEucmVjdCwKICAgICAgYWN0aW9uczogdGhpcy5kYXRhLmFjdGlvbnMsCiAgICAgIHBhZ2U6IHRoaXMuZGF0YS5wYWdlSW5kZXgsCiAgICAgIHN0cm9rZUNvbG9yOiB0aGlzLmRhdGEuYm9yZGVyQ29sb3IsCiAgICAgIGZpbGxDb2xvcjogdGhpcy5kYXRhLmJhY2tncm91bmRDb2xvciwKICAgICAgcm90YXRpb246IHRoaXMucm90YXRpb24sCiAgICAgIHR5cGU6ICJ0ZXh0IgogICAgfTsKICB9Cn0KY2xhc3MgQnV0dG9uV2lkZ2V0QW5ub3RhdGlvbiBleHRlbmRzIFdpZGdldEFubm90YXRpb24gewogIGNvbnN0cnVjdG9yKHBhcmFtcykgewogICAgc3VwZXIocGFyYW1zKTsKICAgIHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UgPSBudWxsOwogICAgdGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlID0gbnVsbDsKICAgIGNvbnN0IGlzUmFkaW8gPSB0aGlzLmhhc0ZpZWxkRmxhZyhBbm5vdGF0aW9uRmllbGRGbGFnLlJBRElPKSwKICAgICAgaXNQdXNoQnV0dG9uID0gdGhpcy5oYXNGaWVsZEZsYWcoQW5ub3RhdGlvbkZpZWxkRmxhZy5QVVNIQlVUVE9OKTsKICAgIHRoaXMuZGF0YS5jaGVja0JveCA9ICFpc1JhZGlvICYmICFpc1B1c2hCdXR0b247CiAgICB0aGlzLmRhdGEucmFkaW9CdXR0b24gPSBpc1JhZGlvICYmICFpc1B1c2hCdXR0b247CiAgICB0aGlzLmRhdGEucHVzaEJ1dHRvbiA9IGlzUHVzaEJ1dHRvbjsKICAgIHRoaXMuZGF0YS5pc1Rvb2x0aXBPbmx5ID0gZmFsc2U7CiAgICBpZiAodGhpcy5kYXRhLmNoZWNrQm94KSB7CiAgICAgIHRoaXMuX3Byb2Nlc3NDaGVja0JveChwYXJhbXMpOwogICAgfSBlbHNlIGlmICh0aGlzLmRhdGEucmFkaW9CdXR0b24pIHsKICAgICAgdGhpcy5fcHJvY2Vzc1JhZGlvQnV0dG9uKHBhcmFtcyk7CiAgICB9IGVsc2UgaWYgKHRoaXMuZGF0YS5wdXNoQnV0dG9uKSB7CiAgICAgIHRoaXMuZGF0YS5oYXNPd25DYW52YXMgPSB0cnVlOwogICAgICB0aGlzLmRhdGEubm9IVE1MID0gZmFsc2U7CiAgICAgIHRoaXMuX3Byb2Nlc3NQdXNoQnV0dG9uKHBhcmFtcyk7CiAgICB9IGVsc2UgewogICAgICB3YXJuKCJJbnZhbGlkIGZpZWxkIGZsYWdzIGZvciBidXR0b24gd2lkZ2V0IGFubm90YXRpb24iKTsKICAgIH0KICB9CiAgYXN5bmMgZ2V0T3BlcmF0b3JMaXN0KGV2YWx1YXRvciwgdGFzaywgaW50ZW50LCBhbm5vdGF0aW9uU3RvcmFnZSkgewogICAgaWYgKHRoaXMuZGF0YS5wdXNoQnV0dG9uKSB7CiAgICAgIHJldHVybiBzdXBlci5nZXRPcGVyYXRvckxpc3QoZXZhbHVhdG9yLCB0YXNrLCBpbnRlbnQsIGZhbHNlLCBhbm5vdGF0aW9uU3RvcmFnZSk7CiAgICB9CiAgICBsZXQgdmFsdWUgPSBudWxsOwogICAgbGV0IHJvdGF0aW9uID0gbnVsbDsKICAgIGlmIChhbm5vdGF0aW9uU3RvcmFnZSkgewogICAgICBjb25zdCBzdG9yYWdlRW50cnkgPSBhbm5vdGF0aW9uU3RvcmFnZS5nZXQodGhpcy5kYXRhLmlkKTsKICAgICAgdmFsdWUgPSBzdG9yYWdlRW50cnkgPyBzdG9yYWdlRW50cnkudmFsdWUgOiBudWxsOwogICAgICByb3RhdGlvbiA9IHN0b3JhZ2VFbnRyeSA/IHN0b3JhZ2VFbnRyeS5yb3RhdGlvbiA6IG51bGw7CiAgICB9CiAgICBpZiAodmFsdWUgPT09IG51bGwgJiYgdGhpcy5hcHBlYXJhbmNlKSB7CiAgICAgIHJldHVybiBzdXBlci5nZXRPcGVyYXRvckxpc3QoZXZhbHVhdG9yLCB0YXNrLCBpbnRlbnQsIGFubm90YXRpb25TdG9yYWdlKTsKICAgIH0KICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgIHZhbHVlID0gdGhpcy5kYXRhLmNoZWNrQm94ID8gdGhpcy5kYXRhLmZpZWxkVmFsdWUgPT09IHRoaXMuZGF0YS5leHBvcnRWYWx1ZSA6IHRoaXMuZGF0YS5maWVsZFZhbHVlID09PSB0aGlzLmRhdGEuYnV0dG9uVmFsdWU7CiAgICB9CiAgICBjb25zdCBhcHBlYXJhbmNlID0gdmFsdWUgPyB0aGlzLmNoZWNrZWRBcHBlYXJhbmNlIDogdGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlOwogICAgaWYgKGFwcGVhcmFuY2UpIHsKICAgICAgY29uc3Qgc2F2ZWRBcHBlYXJhbmNlID0gdGhpcy5hcHBlYXJhbmNlOwogICAgICBjb25zdCBzYXZlZE1hdHJpeCA9IGxvb2t1cE1hdHJpeChhcHBlYXJhbmNlLmRpY3QuZ2V0QXJyYXkoIk1hdHJpeCIpLCBJREVOVElUWV9NQVRSSVgpOwogICAgICBpZiAocm90YXRpb24pIHsKICAgICAgICBhcHBlYXJhbmNlLmRpY3Quc2V0KCJNYXRyaXgiLCB0aGlzLmdldFJvdGF0aW9uTWF0cml4KGFubm90YXRpb25TdG9yYWdlKSk7CiAgICAgIH0KICAgICAgdGhpcy5hcHBlYXJhbmNlID0gYXBwZWFyYW5jZTsKICAgICAgY29uc3Qgb3BlcmF0b3JMaXN0ID0gc3VwZXIuZ2V0T3BlcmF0b3JMaXN0KGV2YWx1YXRvciwgdGFzaywgaW50ZW50LCBhbm5vdGF0aW9uU3RvcmFnZSk7CiAgICAgIHRoaXMuYXBwZWFyYW5jZSA9IHNhdmVkQXBwZWFyYW5jZTsKICAgICAgYXBwZWFyYW5jZS5kaWN0LnNldCgiTWF0cml4Iiwgc2F2ZWRNYXRyaXgpOwogICAgICByZXR1cm4gb3BlcmF0b3JMaXN0OwogICAgfQogICAgcmV0dXJuIHsKICAgICAgb3BMaXN0OiBuZXcgT3BlcmF0b3JMaXN0KCksCiAgICAgIHNlcGFyYXRlRm9ybTogZmFsc2UsCiAgICAgIHNlcGFyYXRlQ2FudmFzOiBmYWxzZQogICAgfTsKICB9CiAgYXN5bmMgc2F2ZShldmFsdWF0b3IsIHRhc2ssIGFubm90YXRpb25TdG9yYWdlLCBjaGFuZ2VzKSB7CiAgICBpZiAodGhpcy5kYXRhLmNoZWNrQm94KSB7CiAgICAgIHRoaXMuX3NhdmVDaGVja2JveChldmFsdWF0b3IsIHRhc2ssIGFubm90YXRpb25TdG9yYWdlLCBjaGFuZ2VzKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHRoaXMuZGF0YS5yYWRpb0J1dHRvbikgewogICAgICB0aGlzLl9zYXZlUmFkaW9CdXR0b24oZXZhbHVhdG9yLCB0YXNrLCBhbm5vdGF0aW9uU3RvcmFnZSwgY2hhbmdlcyk7CiAgICB9CiAgfQogIGFzeW5jIF9zYXZlQ2hlY2tib3goZXZhbHVhdG9yLCB0YXNrLCBhbm5vdGF0aW9uU3RvcmFnZSwgY2hhbmdlcykgewogICAgaWYgKCFhbm5vdGF0aW9uU3RvcmFnZSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBzdG9yYWdlRW50cnkgPSBhbm5vdGF0aW9uU3RvcmFnZS5nZXQodGhpcy5kYXRhLmlkKTsKICAgIGNvbnN0IGZsYWdzID0gdGhpcy5fYnVpbGRGbGFncyhzdG9yYWdlRW50cnk/Lm5vVmlldywgc3RvcmFnZUVudHJ5Py5ub1ByaW50KTsKICAgIGxldCByb3RhdGlvbiA9IHN0b3JhZ2VFbnRyeT8ucm90YXRpb24sCiAgICAgIHZhbHVlID0gc3RvcmFnZUVudHJ5Py52YWx1ZTsKICAgIGlmIChyb3RhdGlvbiA9PT0gdW5kZWZpbmVkICYmIGZsYWdzID09PSB1bmRlZmluZWQpIHsKICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gdGhpcy5kYXRhLmZpZWxkVmFsdWUgPT09IHRoaXMuZGF0YS5leHBvcnRWYWx1ZTsKICAgICAgaWYgKGRlZmF1bHRWYWx1ZSA9PT0gdmFsdWUpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KICAgIGxldCBkaWN0ID0gZXZhbHVhdG9yLnhyZWYuZmV0Y2hJZlJlZih0aGlzLnJlZik7CiAgICBpZiAoIShkaWN0IGluc3RhbmNlb2YgRGljdCkpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgZGljdCA9IGRpY3QuY2xvbmUoKTsKICAgIGlmIChyb3RhdGlvbiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgIHJvdGF0aW9uID0gdGhpcy5yb3RhdGlvbjsKICAgIH0KICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgIHZhbHVlID0gdGhpcy5kYXRhLmZpZWxkVmFsdWUgPT09IHRoaXMuZGF0YS5leHBvcnRWYWx1ZTsKICAgIH0KICAgIGNvbnN0IHhmYSA9IHsKICAgICAgcGF0aDogdGhpcy5kYXRhLmZpZWxkTmFtZSwKICAgICAgdmFsdWU6IHZhbHVlID8gdGhpcy5kYXRhLmV4cG9ydFZhbHVlIDogIiIKICAgIH07CiAgICBjb25zdCBuYW1lID0gTmFtZS5nZXQodmFsdWUgPyB0aGlzLmRhdGEuZXhwb3J0VmFsdWUgOiAiT2ZmIik7CiAgICB0aGlzLnNldFZhbHVlKGRpY3QsIG5hbWUsIGV2YWx1YXRvci54cmVmLCBjaGFuZ2VzKTsKICAgIGRpY3Quc2V0KCJBUyIsIG5hbWUpOwogICAgZGljdC5zZXQoIk0iLCBgRDoke2dldE1vZGlmaWNhdGlvbkRhdGUoKX1gKTsKICAgIGlmIChmbGFncyAhPT0gdW5kZWZpbmVkKSB7CiAgICAgIGRpY3Quc2V0KCJGIiwgZmxhZ3MpOwogICAgfQogICAgY29uc3QgbWF5YmVNSyA9IHRoaXMuX2dldE1LRGljdChyb3RhdGlvbik7CiAgICBpZiAobWF5YmVNSykgewogICAgICBkaWN0LnNldCgiTUsiLCBtYXliZU1LKTsKICAgIH0KICAgIGNoYW5nZXMucHV0KHRoaXMucmVmLCB7CiAgICAgIGRhdGE6IGRpY3QsCiAgICAgIHhmYSwKICAgICAgbmVlZEFwcGVhcmFuY2VzOiBmYWxzZQogICAgfSk7CiAgfQogIGFzeW5jIF9zYXZlUmFkaW9CdXR0b24oZXZhbHVhdG9yLCB0YXNrLCBhbm5vdGF0aW9uU3RvcmFnZSwgY2hhbmdlcykgewogICAgaWYgKCFhbm5vdGF0aW9uU3RvcmFnZSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBzdG9yYWdlRW50cnkgPSBhbm5vdGF0aW9uU3RvcmFnZS5nZXQodGhpcy5kYXRhLmlkKTsKICAgIGNvbnN0IGZsYWdzID0gdGhpcy5fYnVpbGRGbGFncyhzdG9yYWdlRW50cnk/Lm5vVmlldywgc3RvcmFnZUVudHJ5Py5ub1ByaW50KTsKICAgIGxldCByb3RhdGlvbiA9IHN0b3JhZ2VFbnRyeT8ucm90YXRpb24sCiAgICAgIHZhbHVlID0gc3RvcmFnZUVudHJ5Py52YWx1ZTsKICAgIGlmIChyb3RhdGlvbiA9PT0gdW5kZWZpbmVkICYmIGZsYWdzID09PSB1bmRlZmluZWQpIHsKICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gdGhpcy5kYXRhLmZpZWxkVmFsdWUgPT09IHRoaXMuZGF0YS5idXR0b25WYWx1ZTsKICAgICAgaWYgKGRlZmF1bHRWYWx1ZSA9PT0gdmFsdWUpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KICAgIGxldCBkaWN0ID0gZXZhbHVhdG9yLnhyZWYuZmV0Y2hJZlJlZih0aGlzLnJlZik7CiAgICBpZiAoIShkaWN0IGluc3RhbmNlb2YgRGljdCkpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgZGljdCA9IGRpY3QuY2xvbmUoKTsKICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgIHZhbHVlID0gdGhpcy5kYXRhLmZpZWxkVmFsdWUgPT09IHRoaXMuZGF0YS5idXR0b25WYWx1ZTsKICAgIH0KICAgIGlmIChyb3RhdGlvbiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgIHJvdGF0aW9uID0gdGhpcy5yb3RhdGlvbjsKICAgIH0KICAgIGNvbnN0IHhmYSA9IHsKICAgICAgcGF0aDogdGhpcy5kYXRhLmZpZWxkTmFtZSwKICAgICAgdmFsdWU6IHZhbHVlID8gdGhpcy5kYXRhLmJ1dHRvblZhbHVlIDogIiIKICAgIH07CiAgICBjb25zdCBuYW1lID0gTmFtZS5nZXQodmFsdWUgPyB0aGlzLmRhdGEuYnV0dG9uVmFsdWUgOiAiT2ZmIik7CiAgICBpZiAodmFsdWUpIHsKICAgICAgdGhpcy5zZXRWYWx1ZShkaWN0LCBuYW1lLCBldmFsdWF0b3IueHJlZiwgY2hhbmdlcyk7CiAgICB9CiAgICBkaWN0LnNldCgiQVMiLCBuYW1lKTsKICAgIGRpY3Quc2V0KCJNIiwgYEQ6JHtnZXRNb2RpZmljYXRpb25EYXRlKCl9YCk7CiAgICBpZiAoZmxhZ3MgIT09IHVuZGVmaW5lZCkgewogICAgICBkaWN0LnNldCgiRiIsIGZsYWdzKTsKICAgIH0KICAgIGNvbnN0IG1heWJlTUsgPSB0aGlzLl9nZXRNS0RpY3Qocm90YXRpb24pOwogICAgaWYgKG1heWJlTUspIHsKICAgICAgZGljdC5zZXQoIk1LIiwgbWF5YmVNSyk7CiAgICB9CiAgICBjaGFuZ2VzLnB1dCh0aGlzLnJlZiwgewogICAgICBkYXRhOiBkaWN0LAogICAgICB4ZmEsCiAgICAgIG5lZWRBcHBlYXJhbmNlczogZmFsc2UKICAgIH0pOwogIH0KICBfZ2V0RGVmYXVsdENoZWNrZWRBcHBlYXJhbmNlKHBhcmFtcywgdHlwZSkgewogICAgY29uc3QgewogICAgICB3aWR0aCwKICAgICAgaGVpZ2h0CiAgICB9ID0gdGhpczsKICAgIGNvbnN0IGJib3ggPSBbMCwgMCwgd2lkdGgsIGhlaWdodF07CiAgICBjb25zdCBGT05UX1JBVElPID0gMC44OwogICAgY29uc3QgZm9udFNpemUgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAqIEZPTlRfUkFUSU87CiAgICBsZXQgbWV0cmljcywgY2hhcjsKICAgIGlmICh0eXBlID09PSAiY2hlY2siKSB7CiAgICAgIG1ldHJpY3MgPSB7CiAgICAgICAgd2lkdGg6IDAuNzU1ICogZm9udFNpemUsCiAgICAgICAgaGVpZ2h0OiAwLjcwNSAqIGZvbnRTaXplCiAgICAgIH07CiAgICAgIGNoYXIgPSAiXHgzMyI7CiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICJkaXNjIikgewogICAgICBtZXRyaWNzID0gewogICAgICAgIHdpZHRoOiAwLjc5MSAqIGZvbnRTaXplLAogICAgICAgIGhlaWdodDogMC43MDUgKiBmb250U2l6ZQogICAgICB9OwogICAgICBjaGFyID0gIlx4NkMiOwogICAgfSBlbHNlIHsKICAgICAgdW5yZWFjaGFibGUoYF9nZXREZWZhdWx0Q2hlY2tlZEFwcGVhcmFuY2UgLSB1bnN1cHBvcnRlZCB0eXBlOiAke3R5cGV9YCk7CiAgICB9CiAgICBjb25zdCB4U2hpZnQgPSBudW1iZXJUb1N0cmluZygod2lkdGggLSBtZXRyaWNzLndpZHRoKSAvIDIpOwogICAgY29uc3QgeVNoaWZ0ID0gbnVtYmVyVG9TdHJpbmcoKGhlaWdodCAtIG1ldHJpY3MuaGVpZ2h0KSAvIDIpOwogICAgY29uc3QgYXBwZWFyYW5jZSA9IGBxIEJUIC9QZGZKc1phRGIgJHtmb250U2l6ZX0gVGYgMCBnICR7eFNoaWZ0fSAke3lTaGlmdH0gVGQgKCR7Y2hhcn0pIFRqIEVUIFFgOwogICAgY29uc3QgYXBwZWFyYW5jZVN0cmVhbURpY3QgPSBuZXcgRGljdChwYXJhbXMueHJlZik7CiAgICBhcHBlYXJhbmNlU3RyZWFtRGljdC5zZXQoIkZvcm1UeXBlIiwgMSk7CiAgICBhcHBlYXJhbmNlU3RyZWFtRGljdC5zZXQoIlN1YnR5cGUiLCBOYW1lLmdldCgiRm9ybSIpKTsKICAgIGFwcGVhcmFuY2VTdHJlYW1EaWN0LnNldCgiVHlwZSIsIE5hbWUuZ2V0KCJYT2JqZWN0IikpOwogICAgYXBwZWFyYW5jZVN0cmVhbURpY3Quc2V0KCJCQm94IiwgYmJveCk7CiAgICBhcHBlYXJhbmNlU3RyZWFtRGljdC5zZXQoIk1hdHJpeCIsIFsxLCAwLCAwLCAxLCAwLCAwXSk7CiAgICBhcHBlYXJhbmNlU3RyZWFtRGljdC5zZXQoIkxlbmd0aCIsIGFwcGVhcmFuY2UubGVuZ3RoKTsKICAgIGNvbnN0IHJlc291cmNlcyA9IG5ldyBEaWN0KHBhcmFtcy54cmVmKTsKICAgIGNvbnN0IGZvbnQgPSBuZXcgRGljdChwYXJhbXMueHJlZik7CiAgICBmb250LnNldCgiUGRmSnNaYURiIiwgdGhpcy5mYWxsYmFja0ZvbnREaWN0KTsKICAgIHJlc291cmNlcy5zZXQoIkZvbnQiLCBmb250KTsKICAgIGFwcGVhcmFuY2VTdHJlYW1EaWN0LnNldCgiUmVzb3VyY2VzIiwgcmVzb3VyY2VzKTsKICAgIHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UgPSBuZXcgU3RyaW5nU3RyZWFtKGFwcGVhcmFuY2UpOwogICAgdGhpcy5jaGVja2VkQXBwZWFyYW5jZS5kaWN0ID0gYXBwZWFyYW5jZVN0cmVhbURpY3Q7CiAgICB0aGlzLl9zdHJlYW1zLnB1c2godGhpcy5jaGVja2VkQXBwZWFyYW5jZSk7CiAgfQogIF9wcm9jZXNzQ2hlY2tCb3gocGFyYW1zKSB7CiAgICBjb25zdCBjdXN0b21BcHBlYXJhbmNlID0gcGFyYW1zLmRpY3QuZ2V0KCJBUCIpOwogICAgaWYgKCEoY3VzdG9tQXBwZWFyYW5jZSBpbnN0YW5jZW9mIERpY3QpKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IG5vcm1hbEFwcGVhcmFuY2UgPSBjdXN0b21BcHBlYXJhbmNlLmdldCgiTiIpOwogICAgaWYgKCEobm9ybWFsQXBwZWFyYW5jZSBpbnN0YW5jZW9mIERpY3QpKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IGFzVmFsdWUgPSB0aGlzLl9kZWNvZGVGb3JtVmFsdWUocGFyYW1zLmRpY3QuZ2V0KCJBUyIpKTsKICAgIGlmICh0eXBlb2YgYXNWYWx1ZSA9PT0gInN0cmluZyIpIHsKICAgICAgdGhpcy5kYXRhLmZpZWxkVmFsdWUgPSBhc1ZhbHVlOwogICAgfQogICAgY29uc3QgeWVzID0gdGhpcy5kYXRhLmZpZWxkVmFsdWUgIT09IG51bGwgJiYgdGhpcy5kYXRhLmZpZWxkVmFsdWUgIT09ICJPZmYiID8gdGhpcy5kYXRhLmZpZWxkVmFsdWUgOiAiWWVzIjsKICAgIGNvbnN0IGV4cG9ydFZhbHVlcyA9IG5vcm1hbEFwcGVhcmFuY2UuZ2V0S2V5cygpOwogICAgaWYgKGV4cG9ydFZhbHVlcy5sZW5ndGggPT09IDApIHsKICAgICAgZXhwb3J0VmFsdWVzLnB1c2goIk9mZiIsIHllcyk7CiAgICB9IGVsc2UgaWYgKGV4cG9ydFZhbHVlcy5sZW5ndGggPT09IDEpIHsKICAgICAgaWYgKGV4cG9ydFZhbHVlc1swXSA9PT0gIk9mZiIpIHsKICAgICAgICBleHBvcnRWYWx1ZXMucHVzaCh5ZXMpOwogICAgICB9IGVsc2UgewogICAgICAgIGV4cG9ydFZhbHVlcy51bnNoaWZ0KCJPZmYiKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChleHBvcnRWYWx1ZXMuaW5jbHVkZXMoeWVzKSkgewogICAgICBleHBvcnRWYWx1ZXMubGVuZ3RoID0gMDsKICAgICAgZXhwb3J0VmFsdWVzLnB1c2goIk9mZiIsIHllcyk7CiAgICB9IGVsc2UgewogICAgICBjb25zdCBvdGhlclllcyA9IGV4cG9ydFZhbHVlcy5maW5kKHYgPT4gdiAhPT0gIk9mZiIpOwogICAgICBleHBvcnRWYWx1ZXMubGVuZ3RoID0gMDsKICAgICAgZXhwb3J0VmFsdWVzLnB1c2goIk9mZiIsIG90aGVyWWVzKTsKICAgIH0KICAgIGlmICghZXhwb3J0VmFsdWVzLmluY2x1ZGVzKHRoaXMuZGF0YS5maWVsZFZhbHVlKSkgewogICAgICB0aGlzLmRhdGEuZmllbGRWYWx1ZSA9ICJPZmYiOwogICAgfQogICAgdGhpcy5kYXRhLmV4cG9ydFZhbHVlID0gZXhwb3J0VmFsdWVzWzFdOwogICAgY29uc3QgY2hlY2tlZEFwcGVhcmFuY2UgPSBub3JtYWxBcHBlYXJhbmNlLmdldCh0aGlzLmRhdGEuZXhwb3J0VmFsdWUpOwogICAgdGhpcy5jaGVja2VkQXBwZWFyYW5jZSA9IGNoZWNrZWRBcHBlYXJhbmNlIGluc3RhbmNlb2YgQmFzZVN0cmVhbSA/IGNoZWNrZWRBcHBlYXJhbmNlIDogbnVsbDsKICAgIGNvbnN0IHVuY2hlY2tlZEFwcGVhcmFuY2UgPSBub3JtYWxBcHBlYXJhbmNlLmdldCgiT2ZmIik7CiAgICB0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2UgPSB1bmNoZWNrZWRBcHBlYXJhbmNlIGluc3RhbmNlb2YgQmFzZVN0cmVhbSA/IHVuY2hlY2tlZEFwcGVhcmFuY2UgOiBudWxsOwogICAgaWYgKHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UpIHsKICAgICAgdGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UpOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5fZ2V0RGVmYXVsdENoZWNrZWRBcHBlYXJhbmNlKHBhcmFtcywgImNoZWNrIik7CiAgICB9CiAgICBpZiAodGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlKSB7CiAgICAgIHRoaXMuX3N0cmVhbXMucHVzaCh0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2UpOwogICAgfQogICAgdGhpcy5fZmFsbGJhY2tGb250RGljdCA9IHRoaXMuZmFsbGJhY2tGb250RGljdDsKICAgIGlmICh0aGlzLmRhdGEuZGVmYXVsdEZpZWxkVmFsdWUgPT09IG51bGwpIHsKICAgICAgdGhpcy5kYXRhLmRlZmF1bHRGaWVsZFZhbHVlID0gIk9mZiI7CiAgICB9CiAgfQogIF9wcm9jZXNzUmFkaW9CdXR0b24ocGFyYW1zKSB7CiAgICB0aGlzLmRhdGEuYnV0dG9uVmFsdWUgPSBudWxsOwogICAgY29uc3QgZmllbGRQYXJlbnQgPSBwYXJhbXMuZGljdC5nZXQoIlBhcmVudCIpOwogICAgaWYgKGZpZWxkUGFyZW50IGluc3RhbmNlb2YgRGljdCkgewogICAgICB0aGlzLnBhcmVudCA9IHBhcmFtcy5kaWN0LmdldFJhdygiUGFyZW50Iik7CiAgICAgIGNvbnN0IGZpZWxkUGFyZW50VmFsdWUgPSBmaWVsZFBhcmVudC5nZXQoIlYiKTsKICAgICAgaWYgKGZpZWxkUGFyZW50VmFsdWUgaW5zdGFuY2VvZiBOYW1lKSB7CiAgICAgICAgdGhpcy5kYXRhLmZpZWxkVmFsdWUgPSB0aGlzLl9kZWNvZGVGb3JtVmFsdWUoZmllbGRQYXJlbnRWYWx1ZSk7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0IGFwcGVhcmFuY2VTdGF0ZXMgPSBwYXJhbXMuZGljdC5nZXQoIkFQIik7CiAgICBpZiAoIShhcHBlYXJhbmNlU3RhdGVzIGluc3RhbmNlb2YgRGljdCkpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3Qgbm9ybWFsQXBwZWFyYW5jZSA9IGFwcGVhcmFuY2VTdGF0ZXMuZ2V0KCJOIik7CiAgICBpZiAoIShub3JtYWxBcHBlYXJhbmNlIGluc3RhbmNlb2YgRGljdCkpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgZm9yIChjb25zdCBrZXkgb2Ygbm9ybWFsQXBwZWFyYW5jZS5nZXRLZXlzKCkpIHsKICAgICAgaWYgKGtleSAhPT0gIk9mZiIpIHsKICAgICAgICB0aGlzLmRhdGEuYnV0dG9uVmFsdWUgPSB0aGlzLl9kZWNvZGVGb3JtVmFsdWUoa2V5KTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgY29uc3QgY2hlY2tlZEFwcGVhcmFuY2UgPSBub3JtYWxBcHBlYXJhbmNlLmdldCh0aGlzLmRhdGEuYnV0dG9uVmFsdWUpOwogICAgdGhpcy5jaGVja2VkQXBwZWFyYW5jZSA9IGNoZWNrZWRBcHBlYXJhbmNlIGluc3RhbmNlb2YgQmFzZVN0cmVhbSA/IGNoZWNrZWRBcHBlYXJhbmNlIDogbnVsbDsKICAgIGNvbnN0IHVuY2hlY2tlZEFwcGVhcmFuY2UgPSBub3JtYWxBcHBlYXJhbmNlLmdldCgiT2ZmIik7CiAgICB0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2UgPSB1bmNoZWNrZWRBcHBlYXJhbmNlIGluc3RhbmNlb2YgQmFzZVN0cmVhbSA/IHVuY2hlY2tlZEFwcGVhcmFuY2UgOiBudWxsOwogICAgaWYgKHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UpIHsKICAgICAgdGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UpOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5fZ2V0RGVmYXVsdENoZWNrZWRBcHBlYXJhbmNlKHBhcmFtcywgImRpc2MiKTsKICAgIH0KICAgIGlmICh0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2UpIHsKICAgICAgdGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMudW5jaGVja2VkQXBwZWFyYW5jZSk7CiAgICB9CiAgICB0aGlzLl9mYWxsYmFja0ZvbnREaWN0ID0gdGhpcy5mYWxsYmFja0ZvbnREaWN0OwogICAgaWYgKHRoaXMuZGF0YS5kZWZhdWx0RmllbGRWYWx1ZSA9PT0gbnVsbCkgewogICAgICB0aGlzLmRhdGEuZGVmYXVsdEZpZWxkVmFsdWUgPSAiT2ZmIjsKICAgIH0KICB9CiAgX3Byb2Nlc3NQdXNoQnV0dG9uKHBhcmFtcykgewogICAgY29uc3QgewogICAgICBkaWN0LAogICAgICBhbm5vdGF0aW9uR2xvYmFscwogICAgfSA9IHBhcmFtczsKICAgIGlmICghZGljdC5oYXMoIkEiKSAmJiAhZGljdC5oYXMoIkFBIikgJiYgIXRoaXMuZGF0YS5hbHRlcm5hdGl2ZVRleHQpIHsKICAgICAgd2FybigiUHVzaCBidXR0b25zIHdpdGhvdXQgYWN0aW9uIGRpY3Rpb25hcmllcyBhcmUgbm90IHN1cHBvcnRlZCIpOwogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLmRhdGEuaXNUb29sdGlwT25seSA9ICFkaWN0LmhhcygiQSIpICYmICFkaWN0LmhhcygiQUEiKTsKICAgIENhdGFsb2cucGFyc2VEZXN0RGljdGlvbmFyeSh7CiAgICAgIGRlc3REaWN0OiBkaWN0LAogICAgICByZXN1bHRPYmo6IHRoaXMuZGF0YSwKICAgICAgZG9jQmFzZVVybDogYW5ub3RhdGlvbkdsb2JhbHMuYmFzZVVybCwKICAgICAgZG9jQXR0YWNobWVudHM6IGFubm90YXRpb25HbG9iYWxzLmF0dGFjaG1lbnRzCiAgICB9KTsKICB9CiAgZ2V0RmllbGRPYmplY3QoKSB7CiAgICBsZXQgdHlwZSA9ICJidXR0b24iOwogICAgbGV0IGV4cG9ydFZhbHVlczsKICAgIGlmICh0aGlzLmRhdGEuY2hlY2tCb3gpIHsKICAgICAgdHlwZSA9ICJjaGVja2JveCI7CiAgICAgIGV4cG9ydFZhbHVlcyA9IHRoaXMuZGF0YS5leHBvcnRWYWx1ZTsKICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhLnJhZGlvQnV0dG9uKSB7CiAgICAgIHR5cGUgPSAicmFkaW9idXR0b24iOwogICAgICBleHBvcnRWYWx1ZXMgPSB0aGlzLmRhdGEuYnV0dG9uVmFsdWU7CiAgICB9CiAgICByZXR1cm4gewogICAgICBpZDogdGhpcy5kYXRhLmlkLAogICAgICB2YWx1ZTogdGhpcy5kYXRhLmZpZWxkVmFsdWUgfHwgIk9mZiIsCiAgICAgIGRlZmF1bHRWYWx1ZTogdGhpcy5kYXRhLmRlZmF1bHRGaWVsZFZhbHVlLAogICAgICBleHBvcnRWYWx1ZXMsCiAgICAgIGVkaXRhYmxlOiAhdGhpcy5kYXRhLnJlYWRPbmx5LAogICAgICBuYW1lOiB0aGlzLmRhdGEuZmllbGROYW1lLAogICAgICByZWN0OiB0aGlzLmRhdGEucmVjdCwKICAgICAgaGlkZGVuOiB0aGlzLmRhdGEuaGlkZGVuLAogICAgICBhY3Rpb25zOiB0aGlzLmRhdGEuYWN0aW9ucywKICAgICAgcGFnZTogdGhpcy5kYXRhLnBhZ2VJbmRleCwKICAgICAgc3Ryb2tlQ29sb3I6IHRoaXMuZGF0YS5ib3JkZXJDb2xvciwKICAgICAgZmlsbENvbG9yOiB0aGlzLmRhdGEuYmFja2dyb3VuZENvbG9yLAogICAgICByb3RhdGlvbjogdGhpcy5yb3RhdGlvbiwKICAgICAgdHlwZQogICAgfTsKICB9CiAgZ2V0IGZhbGxiYWNrRm9udERpY3QoKSB7CiAgICBjb25zdCBkaWN0ID0gbmV3IERpY3QoKTsKICAgIGRpY3Quc2V0KCJCYXNlRm9udCIsIE5hbWUuZ2V0KCJaYXBmRGluZ2JhdHMiKSk7CiAgICBkaWN0LnNldCgiVHlwZSIsIE5hbWUuZ2V0KCJGYWxsYmFja1R5cGUiKSk7CiAgICBkaWN0LnNldCgiU3VidHlwZSIsIE5hbWUuZ2V0KCJGYWxsYmFja1R5cGUiKSk7CiAgICBkaWN0LnNldCgiRW5jb2RpbmciLCBOYW1lLmdldCgiWmFwZkRpbmdiYXRzRW5jb2RpbmciKSk7CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJmYWxsYmFja0ZvbnREaWN0IiwgZGljdCk7CiAgfQp9CmNsYXNzIENob2ljZVdpZGdldEFubm90YXRpb24gZXh0ZW5kcyBXaWRnZXRBbm5vdGF0aW9uIHsKICBjb25zdHJ1Y3RvcihwYXJhbXMpIHsKICAgIHN1cGVyKHBhcmFtcyk7CiAgICBjb25zdCB7CiAgICAgIGRpY3QsCiAgICAgIHhyZWYKICAgIH0gPSBwYXJhbXM7CiAgICB0aGlzLmluZGljZXMgPSBkaWN0LmdldEFycmF5KCJJIik7CiAgICB0aGlzLmhhc0luZGljZXMgPSBBcnJheS5pc0FycmF5KHRoaXMuaW5kaWNlcykgJiYgdGhpcy5pbmRpY2VzLmxlbmd0aCA+IDA7CiAgICB0aGlzLmRhdGEub3B0aW9ucyA9IFtdOwogICAgY29uc3Qgb3B0aW9ucyA9IGdldEluaGVyaXRhYmxlUHJvcGVydHkoewogICAgICBkaWN0LAogICAgICBrZXk6ICJPcHQiCiAgICB9KTsKICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpKSB7CiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IG9wdGlvbnMubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICAgIGNvbnN0IG9wdGlvbiA9IHhyZWYuZmV0Y2hJZlJlZihvcHRpb25zW2ldKTsKICAgICAgICBjb25zdCBpc09wdGlvbkFycmF5ID0gQXJyYXkuaXNBcnJheShvcHRpb24pOwogICAgICAgIHRoaXMuZGF0YS5vcHRpb25zW2ldID0gewogICAgICAgICAgZXhwb3J0VmFsdWU6IHRoaXMuX2RlY29kZUZvcm1WYWx1ZShpc09wdGlvbkFycmF5ID8geHJlZi5mZXRjaElmUmVmKG9wdGlvblswXSkgOiBvcHRpb24pLAogICAgICAgICAgZGlzcGxheVZhbHVlOiB0aGlzLl9kZWNvZGVGb3JtVmFsdWUoaXNPcHRpb25BcnJheSA/IHhyZWYuZmV0Y2hJZlJlZihvcHRpb25bMV0pIDogb3B0aW9uKQogICAgICAgIH07CiAgICAgIH0KICAgIH0KICAgIGlmICghdGhpcy5oYXNJbmRpY2VzKSB7CiAgICAgIGlmICh0eXBlb2YgdGhpcy5kYXRhLmZpZWxkVmFsdWUgPT09ICJzdHJpbmciKSB7CiAgICAgICAgdGhpcy5kYXRhLmZpZWxkVmFsdWUgPSBbdGhpcy5kYXRhLmZpZWxkVmFsdWVdOwogICAgICB9IGVsc2UgaWYgKCF0aGlzLmRhdGEuZmllbGRWYWx1ZSkgewogICAgICAgIHRoaXMuZGF0YS5maWVsZFZhbHVlID0gW107CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuZGF0YS5maWVsZFZhbHVlID0gW107CiAgICAgIGNvbnN0IGlpID0gdGhpcy5kYXRhLm9wdGlvbnMubGVuZ3RoOwogICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy5pbmRpY2VzKSB7CiAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIoaSkgJiYgaSA+PSAwICYmIGkgPCBpaSkgewogICAgICAgICAgdGhpcy5kYXRhLmZpZWxkVmFsdWUucHVzaCh0aGlzLmRhdGEub3B0aW9uc1tpXS5leHBvcnRWYWx1ZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAodGhpcy5kYXRhLm9wdGlvbnMubGVuZ3RoID09PSAwICYmIHRoaXMuZGF0YS5maWVsZFZhbHVlLmxlbmd0aCA+IDApIHsKICAgICAgdGhpcy5kYXRhLm9wdGlvbnMgPSB0aGlzLmRhdGEuZmllbGRWYWx1ZS5tYXAodmFsdWUgPT4gKHsKICAgICAgICBleHBvcnRWYWx1ZTogdmFsdWUsCiAgICAgICAgZGlzcGxheVZhbHVlOiB2YWx1ZQogICAgICB9KSk7CiAgICB9CiAgICB0aGlzLmRhdGEuY29tYm8gPSB0aGlzLmhhc0ZpZWxkRmxhZyhBbm5vdGF0aW9uRmllbGRGbGFnLkNPTUJPKTsKICAgIHRoaXMuZGF0YS5tdWx0aVNlbGVjdCA9IHRoaXMuaGFzRmllbGRGbGFnKEFubm90YXRpb25GaWVsZEZsYWcuTVVMVElTRUxFQ1QpOwogICAgdGhpcy5faGFzVGV4dCA9IHRydWU7CiAgfQogIGdldEZpZWxkT2JqZWN0KCkgewogICAgY29uc3QgdHlwZSA9IHRoaXMuZGF0YS5jb21ibyA/ICJjb21ib2JveCIgOiAibGlzdGJveCI7CiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZGF0YS5maWVsZFZhbHVlLmxlbmd0aCA+IDAgPyB0aGlzLmRhdGEuZmllbGRWYWx1ZVswXSA6IG51bGw7CiAgICByZXR1cm4gewogICAgICBpZDogdGhpcy5kYXRhLmlkLAogICAgICB2YWx1ZSwKICAgICAgZGVmYXVsdFZhbHVlOiB0aGlzLmRhdGEuZGVmYXVsdEZpZWxkVmFsdWUsCiAgICAgIGVkaXRhYmxlOiAhdGhpcy5kYXRhLnJlYWRPbmx5LAogICAgICBuYW1lOiB0aGlzLmRhdGEuZmllbGROYW1lLAogICAgICByZWN0OiB0aGlzLmRhdGEucmVjdCwKICAgICAgbnVtSXRlbXM6IHRoaXMuZGF0YS5maWVsZFZhbHVlLmxlbmd0aCwKICAgICAgbXVsdGlwbGVTZWxlY3Rpb246IHRoaXMuZGF0YS5tdWx0aVNlbGVjdCwKICAgICAgaGlkZGVuOiB0aGlzLmRhdGEuaGlkZGVuLAogICAgICBhY3Rpb25zOiB0aGlzLmRhdGEuYWN0aW9ucywKICAgICAgaXRlbXM6IHRoaXMuZGF0YS5vcHRpb25zLAogICAgICBwYWdlOiB0aGlzLmRhdGEucGFnZUluZGV4LAogICAgICBzdHJva2VDb2xvcjogdGhpcy5kYXRhLmJvcmRlckNvbG9yLAogICAgICBmaWxsQ29sb3I6IHRoaXMuZGF0YS5iYWNrZ3JvdW5kQ29sb3IsCiAgICAgIHJvdGF0aW9uOiB0aGlzLnJvdGF0aW9uLAogICAgICB0eXBlCiAgICB9OwogIH0KICBhbWVuZFNhdmVkRGljdChhbm5vdGF0aW9uU3RvcmFnZSwgZGljdCkgewogICAgaWYgKCF0aGlzLmhhc0luZGljZXMpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgbGV0IHZhbHVlcyA9IGFubm90YXRpb25TdG9yYWdlPy5nZXQodGhpcy5kYXRhLmlkKT8udmFsdWU7CiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWVzKSkgewogICAgICB2YWx1ZXMgPSBbdmFsdWVzXTsKICAgIH0KICAgIGNvbnN0IGluZGljZXMgPSBbXTsKICAgIGNvbnN0IHsKICAgICAgb3B0aW9ucwogICAgfSA9IHRoaXMuZGF0YTsKICAgIGZvciAobGV0IGkgPSAwLCBqID0gMCwgaWkgPSBvcHRpb25zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgaWYgKG9wdGlvbnNbaV0uZXhwb3J0VmFsdWUgPT09IHZhbHVlc1tqXSkgewogICAgICAgIGluZGljZXMucHVzaChpKTsKICAgICAgICBqICs9IDE7CiAgICAgIH0KICAgIH0KICAgIGRpY3Quc2V0KCJJIiwgaW5kaWNlcyk7CiAgfQogIGFzeW5jIF9nZXRBcHBlYXJhbmNlKGV2YWx1YXRvciwgdGFzaywgaW50ZW50LCBhbm5vdGF0aW9uU3RvcmFnZSkgewogICAgaWYgKHRoaXMuZGF0YS5jb21ibykgewogICAgICByZXR1cm4gc3VwZXIuX2dldEFwcGVhcmFuY2UoZXZhbHVhdG9yLCB0YXNrLCBpbnRlbnQsIGFubm90YXRpb25TdG9yYWdlKTsKICAgIH0KICAgIGxldCBleHBvcnRlZFZhbHVlLCByb3RhdGlvbjsKICAgIGNvbnN0IHN0b3JhZ2VFbnRyeSA9IGFubm90YXRpb25TdG9yYWdlPy5nZXQodGhpcy5kYXRhLmlkKTsKICAgIGlmIChzdG9yYWdlRW50cnkpIHsKICAgICAgcm90YXRpb24gPSBzdG9yYWdlRW50cnkucm90YXRpb247CiAgICAgIGV4cG9ydGVkVmFsdWUgPSBzdG9yYWdlRW50cnkudmFsdWU7CiAgICB9CiAgICBpZiAocm90YXRpb24gPT09IHVuZGVmaW5lZCAmJiBleHBvcnRlZFZhbHVlID09PSB1bmRlZmluZWQgJiYgIXRoaXMuX25lZWRBcHBlYXJhbmNlcykgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmIChleHBvcnRlZFZhbHVlID09PSB1bmRlZmluZWQpIHsKICAgICAgZXhwb3J0ZWRWYWx1ZSA9IHRoaXMuZGF0YS5maWVsZFZhbHVlOwogICAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShleHBvcnRlZFZhbHVlKSkgewogICAgICBleHBvcnRlZFZhbHVlID0gW2V4cG9ydGVkVmFsdWVdOwogICAgfQogICAgY29uc3QgZGVmYXVsdFBhZGRpbmcgPSAxOwogICAgY29uc3QgZGVmYXVsdEhQYWRkaW5nID0gMjsKICAgIGxldCB7CiAgICAgIHdpZHRoOiB0b3RhbFdpZHRoLAogICAgICBoZWlnaHQ6IHRvdGFsSGVpZ2h0CiAgICB9ID0gdGhpczsKICAgIGlmIChyb3RhdGlvbiA9PT0gOTAgfHwgcm90YXRpb24gPT09IDI3MCkgewogICAgICBbdG90YWxXaWR0aCwgdG90YWxIZWlnaHRdID0gW3RvdGFsSGVpZ2h0LCB0b3RhbFdpZHRoXTsKICAgIH0KICAgIGNvbnN0IGxpbmVDb3VudCA9IHRoaXMuZGF0YS5vcHRpb25zLmxlbmd0aDsKICAgIGNvbnN0IHZhbHVlSW5kaWNlcyA9IFtdOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lQ291bnQ7IGkrKykgewogICAgICBjb25zdCB7CiAgICAgICAgZXhwb3J0VmFsdWUKICAgICAgfSA9IHRoaXMuZGF0YS5vcHRpb25zW2ldOwogICAgICBpZiAoZXhwb3J0ZWRWYWx1ZS5pbmNsdWRlcyhleHBvcnRWYWx1ZSkpIHsKICAgICAgICB2YWx1ZUluZGljZXMucHVzaChpKTsKICAgICAgfQogICAgfQogICAgaWYgKCF0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZSkgewogICAgICB0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhID0gcGFyc2VEZWZhdWx0QXBwZWFyYW5jZSh0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZSA9ICIvSGVsdmV0aWNhIDAgVGYgMCBnIik7CiAgICB9CiAgICBjb25zdCBmb250ID0gYXdhaXQgV2lkZ2V0QW5ub3RhdGlvbi5fZ2V0Rm9udERhdGEoZXZhbHVhdG9yLCB0YXNrLCB0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLCB0aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMpOwogICAgbGV0IGRlZmF1bHRBcHBlYXJhbmNlOwogICAgbGV0IHsKICAgICAgZm9udFNpemUKICAgIH0gPSB0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhOwogICAgaWYgKCFmb250U2l6ZSkgewogICAgICBjb25zdCBsaW5lSGVpZ2h0ID0gKHRvdGFsSGVpZ2h0IC0gZGVmYXVsdFBhZGRpbmcpIC8gbGluZUNvdW50OwogICAgICBsZXQgbGluZVdpZHRoID0gLTE7CiAgICAgIGxldCB2YWx1ZTsKICAgICAgZm9yIChjb25zdCB7CiAgICAgICAgZGlzcGxheVZhbHVlCiAgICAgIH0gb2YgdGhpcy5kYXRhLm9wdGlvbnMpIHsKICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuX2dldFRleHRXaWR0aChkaXNwbGF5VmFsdWUsIGZvbnQpOwogICAgICAgIGlmICh3aWR0aCA+IGxpbmVXaWR0aCkgewogICAgICAgICAgbGluZVdpZHRoID0gd2lkdGg7CiAgICAgICAgICB2YWx1ZSA9IGRpc3BsYXlWYWx1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgW2RlZmF1bHRBcHBlYXJhbmNlLCBmb250U2l6ZV0gPSB0aGlzLl9jb21wdXRlRm9udFNpemUobGluZUhlaWdodCwgdG90YWxXaWR0aCAtIDIgKiBkZWZhdWx0SFBhZGRpbmcsIHZhbHVlLCBmb250LCAtMSk7CiAgICB9IGVsc2UgewogICAgICBkZWZhdWx0QXBwZWFyYW5jZSA9IHRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlOwogICAgfQogICAgY29uc3QgbGluZUhlaWdodCA9IGZvbnRTaXplICogTElORV9GQUNUT1I7CiAgICBjb25zdCB2UGFkZGluZyA9IChsaW5lSGVpZ2h0IC0gZm9udFNpemUpIC8gMjsKICAgIGNvbnN0IG51bWJlck9mVmlzaWJsZUxpbmVzID0gTWF0aC5mbG9vcih0b3RhbEhlaWdodCAvIGxpbmVIZWlnaHQpOwogICAgbGV0IGZpcnN0SW5kZXggPSAwOwogICAgaWYgKHZhbHVlSW5kaWNlcy5sZW5ndGggPiAwKSB7CiAgICAgIGNvbnN0IG1pbkluZGV4ID0gTWF0aC5taW4oLi4udmFsdWVJbmRpY2VzKTsKICAgICAgY29uc3QgbWF4SW5kZXggPSBNYXRoLm1heCguLi52YWx1ZUluZGljZXMpOwogICAgICBmaXJzdEluZGV4ID0gTWF0aC5tYXgoMCwgbWF4SW5kZXggLSBudW1iZXJPZlZpc2libGVMaW5lcyArIDEpOwogICAgICBpZiAoZmlyc3RJbmRleCA+IG1pbkluZGV4KSB7CiAgICAgICAgZmlyc3RJbmRleCA9IG1pbkluZGV4OwogICAgICB9CiAgICB9CiAgICBjb25zdCBlbmQgPSBNYXRoLm1pbihmaXJzdEluZGV4ICsgbnVtYmVyT2ZWaXNpYmxlTGluZXMgKyAxLCBsaW5lQ291bnQpOwogICAgY29uc3QgYnVmID0gWyIvVHggQk1DIHEiLCBgMSAxICR7dG90YWxXaWR0aH0gJHt0b3RhbEhlaWdodH0gcmUgVyBuYF07CiAgICBpZiAodmFsdWVJbmRpY2VzLmxlbmd0aCkgewogICAgICBidWYucHVzaCgiMC42MDAwMDYgMC43NTY4NjYgMC44NTQ5MDQgcmciKTsKICAgICAgZm9yIChjb25zdCBpbmRleCBvZiB2YWx1ZUluZGljZXMpIHsKICAgICAgICBpZiAoZmlyc3RJbmRleCA8PSBpbmRleCAmJiBpbmRleCA8IGVuZCkgewogICAgICAgICAgYnVmLnB1c2goYDEgJHt0b3RhbEhlaWdodCAtIChpbmRleCAtIGZpcnN0SW5kZXggKyAxKSAqIGxpbmVIZWlnaHR9ICR7dG90YWxXaWR0aH0gJHtsaW5lSGVpZ2h0fSByZSBmYCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBidWYucHVzaCgiQlQiLCBkZWZhdWx0QXBwZWFyYW5jZSwgYDEgMCAwIDEgMCAke3RvdGFsSGVpZ2h0fSBUbWApOwogICAgY29uc3QgcHJldkluZm8gPSB7CiAgICAgIHNoaWZ0OiAwCiAgICB9OwogICAgZm9yIChsZXQgaSA9IGZpcnN0SW5kZXg7IGkgPCBlbmQ7IGkrKykgewogICAgICBjb25zdCB7CiAgICAgICAgZGlzcGxheVZhbHVlCiAgICAgIH0gPSB0aGlzLmRhdGEub3B0aW9uc1tpXTsKICAgICAgY29uc3QgdnBhZGRpbmcgPSBpID09PSBmaXJzdEluZGV4ID8gdlBhZGRpbmcgOiAwOwogICAgICBidWYucHVzaCh0aGlzLl9yZW5kZXJUZXh0KGRpc3BsYXlWYWx1ZSwgZm9udCwgZm9udFNpemUsIHRvdGFsV2lkdGgsIDAsIHByZXZJbmZvLCBkZWZhdWx0SFBhZGRpbmcsIC1saW5lSGVpZ2h0ICsgdnBhZGRpbmcpKTsKICAgIH0KICAgIGJ1Zi5wdXNoKCJFVCBRIEVNQyIpOwogICAgcmV0dXJuIGJ1Zi5qb2luKCJcbiIpOwogIH0KfQpjbGFzcyBTaWduYXR1cmVXaWRnZXRBbm5vdGF0aW9uIGV4dGVuZHMgV2lkZ2V0QW5ub3RhdGlvbiB7CiAgY29uc3RydWN0b3IocGFyYW1zKSB7CiAgICBzdXBlcihwYXJhbXMpOwogICAgdGhpcy5kYXRhLmZpZWxkVmFsdWUgPSBudWxsOwogICAgdGhpcy5kYXRhLmhhc093bkNhbnZhcyA9IHRoaXMuZGF0YS5ub1JvdGF0ZTsKICAgIHRoaXMuZGF0YS5ub0hUTUwgPSAhdGhpcy5kYXRhLmhhc093bkNhbnZhczsKICB9CiAgZ2V0RmllbGRPYmplY3QoKSB7CiAgICByZXR1cm4gewogICAgICBpZDogdGhpcy5kYXRhLmlkLAogICAgICB2YWx1ZTogbnVsbCwKICAgICAgcGFnZTogdGhpcy5kYXRhLnBhZ2VJbmRleCwKICAgICAgdHlwZTogInNpZ25hdHVyZSIKICAgIH07CiAgfQp9CmNsYXNzIFRleHRBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbiB7CiAgY29uc3RydWN0b3IocGFyYW1zKSB7CiAgICBjb25zdCBERUZBVUxUX0lDT05fU0laRSA9IDIyOwogICAgc3VwZXIocGFyYW1zKTsKICAgIHRoaXMuZGF0YS5ub1JvdGF0ZSA9IHRydWU7CiAgICB0aGlzLmRhdGEuaGFzT3duQ2FudmFzID0gdGhpcy5kYXRhLm5vUm90YXRlOwogICAgdGhpcy5kYXRhLm5vSFRNTCA9IGZhbHNlOwogICAgY29uc3QgewogICAgICBkaWN0CiAgICB9ID0gcGFyYW1zOwogICAgdGhpcy5kYXRhLmFubm90YXRpb25UeXBlID0gQW5ub3RhdGlvblR5cGUuVEVYVDsKICAgIGlmICh0aGlzLmRhdGEuaGFzQXBwZWFyYW5jZSkgewogICAgICB0aGlzLmRhdGEubmFtZSA9ICJOb0ljb24iOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5kYXRhLnJlY3RbMV0gPSB0aGlzLmRhdGEucmVjdFszXSAtIERFRkFVTFRfSUNPTl9TSVpFOwogICAgICB0aGlzLmRhdGEucmVjdFsyXSA9IHRoaXMuZGF0YS5yZWN0WzBdICsgREVGQVVMVF9JQ09OX1NJWkU7CiAgICAgIHRoaXMuZGF0YS5uYW1lID0gZGljdC5oYXMoIk5hbWUiKSA/IGRpY3QuZ2V0KCJOYW1lIikubmFtZSA6ICJOb3RlIjsKICAgIH0KICAgIGlmIChkaWN0LmhhcygiU3RhdGUiKSkgewogICAgICB0aGlzLmRhdGEuc3RhdGUgPSBkaWN0LmdldCgiU3RhdGUiKSB8fCBudWxsOwogICAgICB0aGlzLmRhdGEuc3RhdGVNb2RlbCA9IGRpY3QuZ2V0KCJTdGF0ZU1vZGVsIikgfHwgbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuZGF0YS5zdGF0ZSA9IG51bGw7CiAgICAgIHRoaXMuZGF0YS5zdGF0ZU1vZGVsID0gbnVsbDsKICAgIH0KICB9Cn0KY2xhc3MgTGlua0Fubm90YXRpb24gZXh0ZW5kcyBBbm5vdGF0aW9uIHsKICBjb25zdHJ1Y3RvcihwYXJhbXMpIHsKICAgIHN1cGVyKHBhcmFtcyk7CiAgICBjb25zdCB7CiAgICAgIGRpY3QsCiAgICAgIGFubm90YXRpb25HbG9iYWxzCiAgICB9ID0gcGFyYW1zOwogICAgdGhpcy5kYXRhLmFubm90YXRpb25UeXBlID0gQW5ub3RhdGlvblR5cGUuTElOSzsKICAgIHRoaXMuZGF0YS5ub0hUTUwgPSBmYWxzZTsKICAgIGNvbnN0IHF1YWRQb2ludHMgPSBnZXRRdWFkUG9pbnRzKGRpY3QsIHRoaXMucmVjdGFuZ2xlKTsKICAgIGlmIChxdWFkUG9pbnRzKSB7CiAgICAgIHRoaXMuZGF0YS5xdWFkUG9pbnRzID0gcXVhZFBvaW50czsKICAgIH0KICAgIHRoaXMuZGF0YS5ib3JkZXJDb2xvciB8fD0gdGhpcy5kYXRhLmNvbG9yOwogICAgQ2F0YWxvZy5wYXJzZURlc3REaWN0aW9uYXJ5KHsKICAgICAgZGVzdERpY3Q6IGRpY3QsCiAgICAgIHJlc3VsdE9iajogdGhpcy5kYXRhLAogICAgICBkb2NCYXNlVXJsOiBhbm5vdGF0aW9uR2xvYmFscy5iYXNlVXJsLAogICAgICBkb2NBdHRhY2htZW50czogYW5ub3RhdGlvbkdsb2JhbHMuYXR0YWNobWVudHMKICAgIH0pOwogIH0KfQpjbGFzcyBQb3B1cEFubm90YXRpb24gZXh0ZW5kcyBBbm5vdGF0aW9uIHsKICBjb25zdHJ1Y3RvcihwYXJhbXMpIHsKICAgIHN1cGVyKHBhcmFtcyk7CiAgICBjb25zdCB7CiAgICAgIGRpY3QKICAgIH0gPSBwYXJhbXM7CiAgICB0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGUgPSBBbm5vdGF0aW9uVHlwZS5QT1BVUDsKICAgIHRoaXMuZGF0YS5ub0hUTUwgPSBmYWxzZTsKICAgIGlmICh0aGlzLndpZHRoID09PSAwIHx8IHRoaXMuaGVpZ2h0ID09PSAwKSB7CiAgICAgIHRoaXMuZGF0YS5yZWN0ID0gbnVsbDsKICAgIH0KICAgIGxldCBwYXJlbnRJdGVtID0gZGljdC5nZXQoIlBhcmVudCIpOwogICAgaWYgKCFwYXJlbnRJdGVtKSB7CiAgICAgIHdhcm4oIlBvcHVwIGFubm90YXRpb24gaGFzIGEgbWlzc2luZyBvciBpbnZhbGlkIHBhcmVudCBhbm5vdGF0aW9uLiIpOwogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLmRhdGEucGFyZW50UmVjdCA9IGxvb2t1cE5vcm1hbFJlY3QocGFyZW50SXRlbS5nZXRBcnJheSgiUmVjdCIpLCBudWxsKTsKICAgIGNvbnN0IHJ0ID0gcGFyZW50SXRlbS5nZXQoIlJUIik7CiAgICBpZiAoaXNOYW1lKHJ0LCBBbm5vdGF0aW9uUmVwbHlUeXBlLkdST1VQKSkgewogICAgICBwYXJlbnRJdGVtID0gcGFyZW50SXRlbS5nZXQoIklSVCIpOwogICAgfQogICAgaWYgKCFwYXJlbnRJdGVtLmhhcygiTSIpKSB7CiAgICAgIHRoaXMuZGF0YS5tb2RpZmljYXRpb25EYXRlID0gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuc2V0TW9kaWZpY2F0aW9uRGF0ZShwYXJlbnRJdGVtLmdldCgiTSIpKTsKICAgICAgdGhpcy5kYXRhLm1vZGlmaWNhdGlvbkRhdGUgPSB0aGlzLm1vZGlmaWNhdGlvbkRhdGU7CiAgICB9CiAgICBpZiAoIXBhcmVudEl0ZW0uaGFzKCJDIikpIHsKICAgICAgdGhpcy5kYXRhLmNvbG9yID0gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuc2V0Q29sb3IocGFyZW50SXRlbS5nZXRBcnJheSgiQyIpKTsKICAgICAgdGhpcy5kYXRhLmNvbG9yID0gdGhpcy5jb2xvcjsKICAgIH0KICAgIGlmICghdGhpcy52aWV3YWJsZSkgewogICAgICBjb25zdCBwYXJlbnRGbGFncyA9IHBhcmVudEl0ZW0uZ2V0KCJGIik7CiAgICAgIGlmICh0aGlzLl9pc1ZpZXdhYmxlKHBhcmVudEZsYWdzKSkgewogICAgICAgIHRoaXMuc2V0RmxhZ3MocGFyZW50RmxhZ3MpOwogICAgICB9CiAgICB9CiAgICB0aGlzLnNldFRpdGxlKHBhcmVudEl0ZW0uZ2V0KCJUIikpOwogICAgdGhpcy5kYXRhLnRpdGxlT2JqID0gdGhpcy5fdGl0bGU7CiAgICB0aGlzLnNldENvbnRlbnRzKHBhcmVudEl0ZW0uZ2V0KCJDb250ZW50cyIpKTsKICAgIHRoaXMuZGF0YS5jb250ZW50c09iaiA9IHRoaXMuX2NvbnRlbnRzOwogICAgaWYgKHBhcmVudEl0ZW0uaGFzKCJSQyIpKSB7CiAgICAgIHRoaXMuZGF0YS5yaWNoVGV4dCA9IFhGQUZhY3RvcnkuZ2V0UmljaFRleHRBc0h0bWwocGFyZW50SXRlbS5nZXQoIlJDIikpOwogICAgfQogICAgdGhpcy5kYXRhLm9wZW4gPSAhIWRpY3QuZ2V0KCJPcGVuIik7CiAgfQp9CmNsYXNzIEZyZWVUZXh0QW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb24gewogIGNvbnN0cnVjdG9yKHBhcmFtcykgewogICAgc3VwZXIocGFyYW1zKTsKICAgIHRoaXMuZGF0YS5oYXNPd25DYW52YXMgPSB0aGlzLmRhdGEubm9Sb3RhdGU7CiAgICB0aGlzLmRhdGEuaXNFZGl0YWJsZSA9ICF0aGlzLmRhdGEubm9IVE1MOwogICAgdGhpcy5kYXRhLm5vSFRNTCA9IGZhbHNlOwogICAgY29uc3QgewogICAgICBhbm5vdGF0aW9uR2xvYmFscywKICAgICAgZXZhbHVhdG9yT3B0aW9ucywKICAgICAgeHJlZgogICAgfSA9IHBhcmFtczsKICAgIHRoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IEFubm90YXRpb25UeXBlLkZSRUVURVhUOwogICAgdGhpcy5zZXREZWZhdWx0QXBwZWFyYW5jZShwYXJhbXMpOwogICAgdGhpcy5faGFzQXBwZWFyYW5jZSA9ICEhdGhpcy5hcHBlYXJhbmNlOwogICAgaWYgKHRoaXMuX2hhc0FwcGVhcmFuY2UpIHsKICAgICAgY29uc3QgewogICAgICAgIGZvbnRDb2xvciwKICAgICAgICBmb250U2l6ZQogICAgICB9ID0gcGFyc2VBcHBlYXJhbmNlU3RyZWFtKHRoaXMuYXBwZWFyYW5jZSwgZXZhbHVhdG9yT3B0aW9ucywgeHJlZiwgYW5ub3RhdGlvbkdsb2JhbHMuZ2xvYmFsQ29sb3JTcGFjZUNhY2hlKTsKICAgICAgdGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YS5mb250Q29sb3IgPSBmb250Q29sb3I7CiAgICAgIHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEuZm9udFNpemUgPSBmb250U2l6ZSB8fCAxMDsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEuZm9udFNpemUgfHw9IDEwOwogICAgICBjb25zdCB7CiAgICAgICAgZm9udENvbG9yLAogICAgICAgIGZvbnRTaXplCiAgICAgIH0gPSB0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhOwogICAgICBpZiAodGhpcy5fY29udGVudHMuc3RyKSB7CiAgICAgICAgdGhpcy5kYXRhLnRleHRDb250ZW50ID0gdGhpcy5fY29udGVudHMuc3RyLnNwbGl0KC9cclxuP3xcbi8pLm1hcChsaW5lID0+IGxpbmUudHJpbUVuZCgpKTsKICAgICAgICBjb25zdCB7CiAgICAgICAgICBjb29yZHMsCiAgICAgICAgICBiYm94LAogICAgICAgICAgbWF0cml4CiAgICAgICAgfSA9IEZha2VVbmljb2RlRm9udC5nZXRGaXJzdFBvc2l0aW9uSW5mbyh0aGlzLnJlY3RhbmdsZSwgdGhpcy5yb3RhdGlvbiwgZm9udFNpemUpOwogICAgICAgIHRoaXMuZGF0YS50ZXh0UG9zaXRpb24gPSB0aGlzLl90cmFuc2Zvcm1Qb2ludChjb29yZHMsIGJib3gsIG1hdHJpeCk7CiAgICAgIH0KICAgICAgaWYgKHRoaXMuX2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKSB7CiAgICAgICAgY29uc3Qgc3Ryb2tlQWxwaGEgPSBwYXJhbXMuZGljdC5nZXQoIkNBIik7CiAgICAgICAgY29uc3QgZmFrZVVuaWNvZGVGb250ID0gbmV3IEZha2VVbmljb2RlRm9udCh4cmVmLCAic2Fucy1zZXJpZiIpOwogICAgICAgIHRoaXMuYXBwZWFyYW5jZSA9IGZha2VVbmljb2RlRm9udC5jcmVhdGVBcHBlYXJhbmNlKHRoaXMuX2NvbnRlbnRzLnN0ciwgdGhpcy5yZWN0YW5nbGUsIHRoaXMucm90YXRpb24sIGZvbnRTaXplLCBmb250Q29sb3IsIHN0cm9rZUFscGhhKTsKICAgICAgICB0aGlzLl9zdHJlYW1zLnB1c2godGhpcy5hcHBlYXJhbmNlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB3YXJuKCJGcmVlVGV4dEFubm90YXRpb246IE9mZnNjcmVlbkNhbnZhcyBpcyBub3Qgc3VwcG9ydGVkLCBhbm5vdGF0aW9uIG1heSBub3QgcmVuZGVyIGNvcnJlY3RseS4iKTsKICAgICAgfQogICAgfQogIH0KICBnZXQgaGFzVGV4dENvbnRlbnQoKSB7CiAgICByZXR1cm4gdGhpcy5faGFzQXBwZWFyYW5jZTsKICB9CiAgc3RhdGljIGNyZWF0ZU5ld0RpY3QoYW5ub3RhdGlvbiwgeHJlZiwgewogICAgYXBSZWYsCiAgICBhcAogIH0pIHsKICAgIGNvbnN0IHsKICAgICAgY29sb3IsCiAgICAgIGZvbnRTaXplLAogICAgICBvbGRBbm5vdGF0aW9uLAogICAgICByZWN0LAogICAgICByb3RhdGlvbiwKICAgICAgdXNlciwKICAgICAgdmFsdWUKICAgIH0gPSBhbm5vdGF0aW9uOwogICAgY29uc3QgZnJlZXRleHQgPSBvbGRBbm5vdGF0aW9uIHx8IG5ldyBEaWN0KHhyZWYpOwogICAgZnJlZXRleHQuc2V0KCJUeXBlIiwgTmFtZS5nZXQoIkFubm90IikpOwogICAgZnJlZXRleHQuc2V0KCJTdWJ0eXBlIiwgTmFtZS5nZXQoIkZyZWVUZXh0IikpOwogICAgaWYgKG9sZEFubm90YXRpb24pIHsKICAgICAgZnJlZXRleHQuc2V0KCJNIiwgYEQ6JHtnZXRNb2RpZmljYXRpb25EYXRlKCl9YCk7CiAgICAgIGZyZWV0ZXh0LmRlbGV0ZSgiUkMiKTsKICAgIH0gZWxzZSB7CiAgICAgIGZyZWV0ZXh0LnNldCgiQ3JlYXRpb25EYXRlIiwgYEQ6JHtnZXRNb2RpZmljYXRpb25EYXRlKCl9YCk7CiAgICB9CiAgICBmcmVldGV4dC5zZXQoIlJlY3QiLCByZWN0KTsKICAgIGNvbnN0IGRhID0gYC9IZWx2ICR7Zm9udFNpemV9IFRmICR7Z2V0UGRmQ29sb3IoY29sb3IsIHRydWUpfWA7CiAgICBmcmVldGV4dC5zZXQoIkRBIiwgZGEpOwogICAgZnJlZXRleHQuc2V0KCJDb250ZW50cyIsIHN0cmluZ1RvQXNjaWlPclVURjE2QkUodmFsdWUpKTsKICAgIGZyZWV0ZXh0LnNldCgiRiIsIDQpOwogICAgZnJlZXRleHQuc2V0KCJCb3JkZXIiLCBbMCwgMCwgMF0pOwogICAgZnJlZXRleHQuc2V0KCJSb3RhdGUiLCByb3RhdGlvbik7CiAgICBpZiAodXNlcikgewogICAgICBmcmVldGV4dC5zZXQoIlQiLCBzdHJpbmdUb0FzY2lpT3JVVEYxNkJFKHVzZXIpKTsKICAgIH0KICAgIGlmIChhcFJlZiB8fCBhcCkgewogICAgICBjb25zdCBuID0gbmV3IERpY3QoeHJlZik7CiAgICAgIGZyZWV0ZXh0LnNldCgiQVAiLCBuKTsKICAgICAgaWYgKGFwUmVmKSB7CiAgICAgICAgbi5zZXQoIk4iLCBhcFJlZik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbi5zZXQoIk4iLCBhcCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmcmVldGV4dDsKICB9CiAgc3RhdGljIGFzeW5jIGNyZWF0ZU5ld0FwcGVhcmFuY2VTdHJlYW0oYW5ub3RhdGlvbiwgeHJlZiwgcGFyYW1zKSB7CiAgICBjb25zdCB7CiAgICAgIGJhc2VGb250UmVmLAogICAgICBldmFsdWF0b3IsCiAgICAgIHRhc2sKICAgIH0gPSBwYXJhbXM7CiAgICBjb25zdCB7CiAgICAgIGNvbG9yLAogICAgICBmb250U2l6ZSwKICAgICAgcmVjdCwKICAgICAgcm90YXRpb24sCiAgICAgIHZhbHVlCiAgICB9ID0gYW5ub3RhdGlvbjsKICAgIGNvbnN0IHJlc291cmNlcyA9IG5ldyBEaWN0KHhyZWYpOwogICAgY29uc3QgZm9udCA9IG5ldyBEaWN0KHhyZWYpOwogICAgaWYgKGJhc2VGb250UmVmKSB7CiAgICAgIGZvbnQuc2V0KCJIZWx2IiwgYmFzZUZvbnRSZWYpOwogICAgfSBlbHNlIHsKICAgICAgY29uc3QgYmFzZUZvbnQgPSBuZXcgRGljdCh4cmVmKTsKICAgICAgYmFzZUZvbnQuc2V0KCJCYXNlRm9udCIsIE5hbWUuZ2V0KCJIZWx2ZXRpY2EiKSk7CiAgICAgIGJhc2VGb250LnNldCgiVHlwZSIsIE5hbWUuZ2V0KCJGb250IikpOwogICAgICBiYXNlRm9udC5zZXQoIlN1YnR5cGUiLCBOYW1lLmdldCgiVHlwZTEiKSk7CiAgICAgIGJhc2VGb250LnNldCgiRW5jb2RpbmciLCBOYW1lLmdldCgiV2luQW5zaUVuY29kaW5nIikpOwogICAgICBmb250LnNldCgiSGVsdiIsIGJhc2VGb250KTsKICAgIH0KICAgIHJlc291cmNlcy5zZXQoIkZvbnQiLCBmb250KTsKICAgIGNvbnN0IGhlbHYgPSBhd2FpdCBXaWRnZXRBbm5vdGF0aW9uLl9nZXRGb250RGF0YShldmFsdWF0b3IsIHRhc2ssIHsKICAgICAgZm9udE5hbWU6ICJIZWx2IiwKICAgICAgZm9udFNpemUKICAgIH0sIHJlc291cmNlcyk7CiAgICBjb25zdCBbeDEsIHkxLCB4MiwgeTJdID0gcmVjdDsKICAgIGxldCB3ID0geDIgLSB4MTsKICAgIGxldCBoID0geTIgLSB5MTsKICAgIGlmIChyb3RhdGlvbiAlIDE4MCAhPT0gMCkgewogICAgICBbdywgaF0gPSBbaCwgd107CiAgICB9CiAgICBjb25zdCBsaW5lcyA9IHZhbHVlLnNwbGl0KCJcbiIpOwogICAgY29uc3Qgc2NhbGUgPSBmb250U2l6ZSAvIDEwMDA7CiAgICBsZXQgdG90YWxXaWR0aCA9IC1JbmZpbml0eTsKICAgIGNvbnN0IGVuY29kZWRMaW5lcyA9IFtdOwogICAgZm9yIChsZXQgbGluZSBvZiBsaW5lcykgewogICAgICBjb25zdCBlbmNvZGVkID0gaGVsdi5lbmNvZGVTdHJpbmcobGluZSk7CiAgICAgIGlmIChlbmNvZGVkLmxlbmd0aCA+IDEpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBsaW5lID0gZW5jb2RlZC5qb2luKCIiKTsKICAgICAgZW5jb2RlZExpbmVzLnB1c2gobGluZSk7CiAgICAgIGxldCBsaW5lV2lkdGggPSAwOwogICAgICBjb25zdCBnbHlwaHMgPSBoZWx2LmNoYXJzVG9HbHlwaHMobGluZSk7CiAgICAgIGZvciAoY29uc3QgZ2x5cGggb2YgZ2x5cGhzKSB7CiAgICAgICAgbGluZVdpZHRoICs9IGdseXBoLndpZHRoICogc2NhbGU7CiAgICAgIH0KICAgICAgdG90YWxXaWR0aCA9IE1hdGgubWF4KHRvdGFsV2lkdGgsIGxpbmVXaWR0aCk7CiAgICB9CiAgICBsZXQgaHNjYWxlID0gMTsKICAgIGlmICh0b3RhbFdpZHRoID4gdykgewogICAgICBoc2NhbGUgPSB3IC8gdG90YWxXaWR0aDsKICAgIH0KICAgIGxldCB2c2NhbGUgPSAxOwogICAgY29uc3QgbGluZUhlaWdodCA9IExJTkVfRkFDVE9SICogZm9udFNpemU7CiAgICBjb25zdCBsaW5lQXNjZW50ID0gKExJTkVfRkFDVE9SIC0gTElORV9ERVNDRU5UX0ZBQ1RPUikgKiBmb250U2l6ZTsKICAgIGNvbnN0IHRvdGFsSGVpZ2h0ID0gbGluZUhlaWdodCAqIGxpbmVzLmxlbmd0aDsKICAgIGlmICh0b3RhbEhlaWdodCA+IGgpIHsKICAgICAgdnNjYWxlID0gaCAvIHRvdGFsSGVpZ2h0OwogICAgfQogICAgY29uc3QgZnNjYWxlID0gTWF0aC5taW4oaHNjYWxlLCB2c2NhbGUpOwogICAgY29uc3QgbmV3Rm9udFNpemUgPSBmb250U2l6ZSAqIGZzY2FsZTsKICAgIGxldCBmaXJzdFBvaW50LCBjbGlwQm94LCBtYXRyaXg7CiAgICBzd2l0Y2ggKHJvdGF0aW9uKSB7CiAgICAgIGNhc2UgMDoKICAgICAgICBtYXRyaXggPSBbMSwgMCwgMCwgMV07CiAgICAgICAgY2xpcEJveCA9IFtyZWN0WzBdLCByZWN0WzFdLCB3LCBoXTsKICAgICAgICBmaXJzdFBvaW50ID0gW3JlY3RbMF0sIHJlY3RbM10gLSBsaW5lQXNjZW50XTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSA5MDoKICAgICAgICBtYXRyaXggPSBbMCwgMSwgLTEsIDBdOwogICAgICAgIGNsaXBCb3ggPSBbcmVjdFsxXSwgLXJlY3RbMl0sIHcsIGhdOwogICAgICAgIGZpcnN0UG9pbnQgPSBbcmVjdFsxXSwgLXJlY3RbMF0gLSBsaW5lQXNjZW50XTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAxODA6CiAgICAgICAgbWF0cml4ID0gWy0xLCAwLCAwLCAtMV07CiAgICAgICAgY2xpcEJveCA9IFstcmVjdFsyXSwgLXJlY3RbM10sIHcsIGhdOwogICAgICAgIGZpcnN0UG9pbnQgPSBbLXJlY3RbMl0sIC1yZWN0WzFdIC0gbGluZUFzY2VudF07CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMjcwOgogICAgICAgIG1hdHJpeCA9IFswLCAtMSwgMSwgMF07CiAgICAgICAgY2xpcEJveCA9IFstcmVjdFszXSwgcmVjdFswXSwgdywgaF07CiAgICAgICAgZmlyc3RQb2ludCA9IFstcmVjdFszXSwgcmVjdFsyXSAtIGxpbmVBc2NlbnRdOwogICAgICAgIGJyZWFrOwogICAgfQogICAgY29uc3QgYnVmZmVyID0gWyJxIiwgYCR7bWF0cml4LmpvaW4oIiAiKX0gMCAwIGNtYCwgYCR7Y2xpcEJveC5qb2luKCIgIil9IHJlIFcgbmAsIGBCVGAsIGAke2dldFBkZkNvbG9yKGNvbG9yLCB0cnVlKX1gLCBgMCBUYyAvSGVsdiAke251bWJlclRvU3RyaW5nKG5ld0ZvbnRTaXplKX0gVGZgXTsKICAgIGJ1ZmZlci5wdXNoKGAke2ZpcnN0UG9pbnQuam9pbigiICIpfSBUZCAoJHtlc2NhcGVTdHJpbmcoZW5jb2RlZExpbmVzWzBdKX0pIFRqYCk7CiAgICBjb25zdCB2U2hpZnQgPSBudW1iZXJUb1N0cmluZyhsaW5lSGVpZ2h0KTsKICAgIGZvciAobGV0IGkgPSAxLCBpaSA9IGVuY29kZWRMaW5lcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CiAgICAgIGNvbnN0IGxpbmUgPSBlbmNvZGVkTGluZXNbaV07CiAgICAgIGJ1ZmZlci5wdXNoKGAwIC0ke3ZTaGlmdH0gVGQgKCR7ZXNjYXBlU3RyaW5nKGxpbmUpfSkgVGpgKTsKICAgIH0KICAgIGJ1ZmZlci5wdXNoKCJFVCIsICJRIik7CiAgICBjb25zdCBhcHBlYXJhbmNlID0gYnVmZmVyLmpvaW4oIlxuIik7CiAgICBjb25zdCBhcHBlYXJhbmNlU3RyZWFtRGljdCA9IG5ldyBEaWN0KHhyZWYpOwogICAgYXBwZWFyYW5jZVN0cmVhbURpY3Quc2V0KCJGb3JtVHlwZSIsIDEpOwogICAgYXBwZWFyYW5jZVN0cmVhbURpY3Quc2V0KCJTdWJ0eXBlIiwgTmFtZS5nZXQoIkZvcm0iKSk7CiAgICBhcHBlYXJhbmNlU3RyZWFtRGljdC5zZXQoIlR5cGUiLCBOYW1lLmdldCgiWE9iamVjdCIpKTsKICAgIGFwcGVhcmFuY2VTdHJlYW1EaWN0LnNldCgiQkJveCIsIHJlY3QpOwogICAgYXBwZWFyYW5jZVN0cmVhbURpY3Quc2V0KCJSZXNvdXJjZXMiLCByZXNvdXJjZXMpOwogICAgYXBwZWFyYW5jZVN0cmVhbURpY3Quc2V0KCJNYXRyaXgiLCBbMSwgMCwgMCwgMSwgLXJlY3RbMF0sIC1yZWN0WzFdXSk7CiAgICBjb25zdCBhcCA9IG5ldyBTdHJpbmdTdHJlYW0oYXBwZWFyYW5jZSk7CiAgICBhcC5kaWN0ID0gYXBwZWFyYW5jZVN0cmVhbURpY3Q7CiAgICByZXR1cm4gYXA7CiAgfQp9CmNsYXNzIExpbmVBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbiB7CiAgY29uc3RydWN0b3IocGFyYW1zKSB7CiAgICBzdXBlcihwYXJhbXMpOwogICAgY29uc3QgewogICAgICBkaWN0LAogICAgICB4cmVmCiAgICB9ID0gcGFyYW1zOwogICAgdGhpcy5kYXRhLmFubm90YXRpb25UeXBlID0gQW5ub3RhdGlvblR5cGUuTElORTsKICAgIHRoaXMuZGF0YS5oYXNPd25DYW52YXMgPSB0aGlzLmRhdGEubm9Sb3RhdGU7CiAgICB0aGlzLmRhdGEubm9IVE1MID0gZmFsc2U7CiAgICBjb25zdCBsaW5lQ29vcmRpbmF0ZXMgPSBsb29rdXBSZWN0KGRpY3QuZ2V0QXJyYXkoIkwiKSwgWzAsIDAsIDAsIDBdKTsKICAgIHRoaXMuZGF0YS5saW5lQ29vcmRpbmF0ZXMgPSBVdGlsLm5vcm1hbGl6ZVJlY3QobGluZUNvb3JkaW5hdGVzKTsKICAgIHRoaXMuc2V0TGluZUVuZGluZ3MoZGljdC5nZXRBcnJheSgiTEUiKSk7CiAgICB0aGlzLmRhdGEubGluZUVuZGluZ3MgPSB0aGlzLmxpbmVFbmRpbmdzOwogICAgaWYgKCF0aGlzLmFwcGVhcmFuY2UpIHsKICAgICAgY29uc3Qgc3Ryb2tlQ29sb3IgPSB0aGlzLmNvbG9yID8gZ2V0UGRmQ29sb3JBcnJheSh0aGlzLmNvbG9yKSA6IFswLCAwLCAwXTsKICAgICAgY29uc3Qgc3Ryb2tlQWxwaGEgPSBkaWN0LmdldCgiQ0EiKTsKICAgICAgY29uc3QgaW50ZXJpb3JDb2xvciA9IGdldFJnYkNvbG9yKGRpY3QuZ2V0QXJyYXkoIklDIiksIG51bGwpOwogICAgICBjb25zdCBmaWxsQ29sb3IgPSBpbnRlcmlvckNvbG9yID8gZ2V0UGRmQ29sb3JBcnJheShpbnRlcmlvckNvbG9yKSA6IG51bGw7CiAgICAgIGNvbnN0IGZpbGxBbHBoYSA9IGZpbGxDb2xvciA/IHN0cm9rZUFscGhhIDogbnVsbDsKICAgICAgY29uc3QgYm9yZGVyV2lkdGggPSB0aGlzLmJvcmRlclN0eWxlLndpZHRoIHx8IDEsCiAgICAgICAgYm9yZGVyQWRqdXN0ID0gMiAqIGJvcmRlcldpZHRoOwogICAgICBjb25zdCBiYm94ID0gW3RoaXMuZGF0YS5saW5lQ29vcmRpbmF0ZXNbMF0gLSBib3JkZXJBZGp1c3QsIHRoaXMuZGF0YS5saW5lQ29vcmRpbmF0ZXNbMV0gLSBib3JkZXJBZGp1c3QsIHRoaXMuZGF0YS5saW5lQ29vcmRpbmF0ZXNbMl0gKyBib3JkZXJBZGp1c3QsIHRoaXMuZGF0YS5saW5lQ29vcmRpbmF0ZXNbM10gKyBib3JkZXJBZGp1c3RdOwogICAgICBpZiAoIVV0aWwuaW50ZXJzZWN0KHRoaXMucmVjdGFuZ2xlLCBiYm94KSkgewogICAgICAgIHRoaXMucmVjdGFuZ2xlID0gYmJveDsKICAgICAgfQogICAgICB0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7CiAgICAgICAgeHJlZiwKICAgICAgICBleHRyYTogYCR7Ym9yZGVyV2lkdGh9IHdgLAogICAgICAgIHN0cm9rZUNvbG9yLAogICAgICAgIGZpbGxDb2xvciwKICAgICAgICBzdHJva2VBbHBoYSwKICAgICAgICBmaWxsQWxwaGEsCiAgICAgICAgcG9pbnRzQ2FsbGJhY2s6IChidWZmZXIsIHBvaW50cykgPT4gewogICAgICAgICAgYnVmZmVyLnB1c2goYCR7bGluZUNvb3JkaW5hdGVzWzBdfSAke2xpbmVDb29yZGluYXRlc1sxXX0gbWAsIGAke2xpbmVDb29yZGluYXRlc1syXX0gJHtsaW5lQ29vcmRpbmF0ZXNbM119IGxgLCAiUyIpOwogICAgICAgICAgcmV0dXJuIFtwb2ludHNbMF0gLSBib3JkZXJXaWR0aCwgcG9pbnRzWzddIC0gYm9yZGVyV2lkdGgsIHBvaW50c1syXSArIGJvcmRlcldpZHRoLCBwb2ludHNbM10gKyBib3JkZXJXaWR0aF07CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICB9Cn0KY2xhc3MgU3F1YXJlQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb24gewogIGNvbnN0cnVjdG9yKHBhcmFtcykgewogICAgc3VwZXIocGFyYW1zKTsKICAgIGNvbnN0IHsKICAgICAgZGljdCwKICAgICAgeHJlZgogICAgfSA9IHBhcmFtczsKICAgIHRoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IEFubm90YXRpb25UeXBlLlNRVUFSRTsKICAgIHRoaXMuZGF0YS5oYXNPd25DYW52YXMgPSB0aGlzLmRhdGEubm9Sb3RhdGU7CiAgICB0aGlzLmRhdGEubm9IVE1MID0gZmFsc2U7CiAgICBpZiAoIXRoaXMuYXBwZWFyYW5jZSkgewogICAgICBjb25zdCBzdHJva2VDb2xvciA9IHRoaXMuY29sb3IgPyBnZXRQZGZDb2xvckFycmF5KHRoaXMuY29sb3IpIDogWzAsIDAsIDBdOwogICAgICBjb25zdCBzdHJva2VBbHBoYSA9IGRpY3QuZ2V0KCJDQSIpOwogICAgICBjb25zdCBpbnRlcmlvckNvbG9yID0gZ2V0UmdiQ29sb3IoZGljdC5nZXRBcnJheSgiSUMiKSwgbnVsbCk7CiAgICAgIGNvbnN0IGZpbGxDb2xvciA9IGludGVyaW9yQ29sb3IgPyBnZXRQZGZDb2xvckFycmF5KGludGVyaW9yQ29sb3IpIDogbnVsbDsKICAgICAgY29uc3QgZmlsbEFscGhhID0gZmlsbENvbG9yID8gc3Ryb2tlQWxwaGEgOiBudWxsOwogICAgICBpZiAodGhpcy5ib3JkZXJTdHlsZS53aWR0aCA9PT0gMCAmJiAhZmlsbENvbG9yKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMuX3NldERlZmF1bHRBcHBlYXJhbmNlKHsKICAgICAgICB4cmVmLAogICAgICAgIGV4dHJhOiBgJHt0aGlzLmJvcmRlclN0eWxlLndpZHRofSB3YCwKICAgICAgICBzdHJva2VDb2xvciwKICAgICAgICBmaWxsQ29sb3IsCiAgICAgICAgc3Ryb2tlQWxwaGEsCiAgICAgICAgZmlsbEFscGhhLAogICAgICAgIHBvaW50c0NhbGxiYWNrOiAoYnVmZmVyLCBwb2ludHMpID0+IHsKICAgICAgICAgIGNvbnN0IHggPSBwb2ludHNbNF0gKyB0aGlzLmJvcmRlclN0eWxlLndpZHRoIC8gMjsKICAgICAgICAgIGNvbnN0IHkgPSBwb2ludHNbNV0gKyB0aGlzLmJvcmRlclN0eWxlLndpZHRoIC8gMjsKICAgICAgICAgIGNvbnN0IHdpZHRoID0gcG9pbnRzWzZdIC0gcG9pbnRzWzRdIC0gdGhpcy5ib3JkZXJTdHlsZS53aWR0aDsKICAgICAgICAgIGNvbnN0IGhlaWdodCA9IHBvaW50c1szXSAtIHBvaW50c1s3XSAtIHRoaXMuYm9yZGVyU3R5bGUud2lkdGg7CiAgICAgICAgICBidWZmZXIucHVzaChgJHt4fSAke3l9ICR7d2lkdGh9ICR7aGVpZ2h0fSByZWApOwogICAgICAgICAgaWYgKGZpbGxDb2xvcikgewogICAgICAgICAgICBidWZmZXIucHVzaCgiQiIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYnVmZmVyLnB1c2goIlMiKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBbcG9pbnRzWzBdLCBwb2ludHNbN10sIHBvaW50c1syXSwgcG9pbnRzWzNdXTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogIH0KfQpjbGFzcyBDaXJjbGVBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbiB7CiAgY29uc3RydWN0b3IocGFyYW1zKSB7CiAgICBzdXBlcihwYXJhbXMpOwogICAgY29uc3QgewogICAgICBkaWN0LAogICAgICB4cmVmCiAgICB9ID0gcGFyYW1zOwogICAgdGhpcy5kYXRhLmFubm90YXRpb25UeXBlID0gQW5ub3RhdGlvblR5cGUuQ0lSQ0xFOwogICAgaWYgKCF0aGlzLmFwcGVhcmFuY2UpIHsKICAgICAgY29uc3Qgc3Ryb2tlQ29sb3IgPSB0aGlzLmNvbG9yID8gZ2V0UGRmQ29sb3JBcnJheSh0aGlzLmNvbG9yKSA6IFswLCAwLCAwXTsKICAgICAgY29uc3Qgc3Ryb2tlQWxwaGEgPSBkaWN0LmdldCgiQ0EiKTsKICAgICAgY29uc3QgaW50ZXJpb3JDb2xvciA9IGdldFJnYkNvbG9yKGRpY3QuZ2V0QXJyYXkoIklDIiksIG51bGwpOwogICAgICBjb25zdCBmaWxsQ29sb3IgPSBpbnRlcmlvckNvbG9yID8gZ2V0UGRmQ29sb3JBcnJheShpbnRlcmlvckNvbG9yKSA6IG51bGw7CiAgICAgIGNvbnN0IGZpbGxBbHBoYSA9IGZpbGxDb2xvciA/IHN0cm9rZUFscGhhIDogbnVsbDsKICAgICAgaWYgKHRoaXMuYm9yZGVyU3R5bGUud2lkdGggPT09IDAgJiYgIWZpbGxDb2xvcikgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBjb250cm9sUG9pbnRzRGlzdGFuY2UgPSA0IC8gMyAqIE1hdGgudGFuKE1hdGguUEkgLyAoMiAqIDQpKTsKICAgICAgdGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2UoewogICAgICAgIHhyZWYsCiAgICAgICAgZXh0cmE6IGAke3RoaXMuYm9yZGVyU3R5bGUud2lkdGh9IHdgLAogICAgICAgIHN0cm9rZUNvbG9yLAogICAgICAgIGZpbGxDb2xvciwKICAgICAgICBzdHJva2VBbHBoYSwKICAgICAgICBmaWxsQWxwaGEsCiAgICAgICAgcG9pbnRzQ2FsbGJhY2s6IChidWZmZXIsIHBvaW50cykgPT4gewogICAgICAgICAgY29uc3QgeDAgPSBwb2ludHNbMF0gKyB0aGlzLmJvcmRlclN0eWxlLndpZHRoIC8gMjsKICAgICAgICAgIGNvbnN0IHkwID0gcG9pbnRzWzFdIC0gdGhpcy5ib3JkZXJTdHlsZS53aWR0aCAvIDI7CiAgICAgICAgICBjb25zdCB4MSA9IHBvaW50c1s2XSAtIHRoaXMuYm9yZGVyU3R5bGUud2lkdGggLyAyOwogICAgICAgICAgY29uc3QgeTEgPSBwb2ludHNbN10gKyB0aGlzLmJvcmRlclN0eWxlLndpZHRoIC8gMjsKICAgICAgICAgIGNvbnN0IHhNaWQgPSB4MCArICh4MSAtIHgwKSAvIDI7CiAgICAgICAgICBjb25zdCB5TWlkID0geTAgKyAoeTEgLSB5MCkgLyAyOwogICAgICAgICAgY29uc3QgeE9mZnNldCA9ICh4MSAtIHgwKSAvIDIgKiBjb250cm9sUG9pbnRzRGlzdGFuY2U7CiAgICAgICAgICBjb25zdCB5T2Zmc2V0ID0gKHkxIC0geTApIC8gMiAqIGNvbnRyb2xQb2ludHNEaXN0YW5jZTsKICAgICAgICAgIGJ1ZmZlci5wdXNoKGAke3hNaWR9ICR7eTF9IG1gLCBgJHt4TWlkICsgeE9mZnNldH0gJHt5MX0gJHt4MX0gJHt5TWlkICsgeU9mZnNldH0gJHt4MX0gJHt5TWlkfSBjYCwgYCR7eDF9ICR7eU1pZCAtIHlPZmZzZXR9ICR7eE1pZCArIHhPZmZzZXR9ICR7eTB9ICR7eE1pZH0gJHt5MH0gY2AsIGAke3hNaWQgLSB4T2Zmc2V0fSAke3kwfSAke3gwfSAke3lNaWQgLSB5T2Zmc2V0fSAke3gwfSAke3lNaWR9IGNgLCBgJHt4MH0gJHt5TWlkICsgeU9mZnNldH0gJHt4TWlkIC0geE9mZnNldH0gJHt5MX0gJHt4TWlkfSAke3kxfSBjYCwgImgiKTsKICAgICAgICAgIGlmIChmaWxsQ29sb3IpIHsKICAgICAgICAgICAgYnVmZmVyLnB1c2goIkIiKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJ1ZmZlci5wdXNoKCJTIik7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gW3BvaW50c1swXSwgcG9pbnRzWzddLCBwb2ludHNbMl0sIHBvaW50c1szXV07CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICB9Cn0KY2xhc3MgUG9seWxpbmVBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbiB7CiAgY29uc3RydWN0b3IocGFyYW1zKSB7CiAgICBzdXBlcihwYXJhbXMpOwogICAgY29uc3QgewogICAgICBkaWN0LAogICAgICB4cmVmCiAgICB9ID0gcGFyYW1zOwogICAgdGhpcy5kYXRhLmFubm90YXRpb25UeXBlID0gQW5ub3RhdGlvblR5cGUuUE9MWUxJTkU7CiAgICB0aGlzLmRhdGEuaGFzT3duQ2FudmFzID0gdGhpcy5kYXRhLm5vUm90YXRlOwogICAgdGhpcy5kYXRhLm5vSFRNTCA9IGZhbHNlOwogICAgdGhpcy5kYXRhLnZlcnRpY2VzID0gbnVsbDsKICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQb2x5Z29uQW5ub3RhdGlvbikpIHsKICAgICAgdGhpcy5zZXRMaW5lRW5kaW5ncyhkaWN0LmdldEFycmF5KCJMRSIpKTsKICAgICAgdGhpcy5kYXRhLmxpbmVFbmRpbmdzID0gdGhpcy5saW5lRW5kaW5nczsKICAgIH0KICAgIGNvbnN0IHJhd1ZlcnRpY2VzID0gZGljdC5nZXRBcnJheSgiVmVydGljZXMiKTsKICAgIGlmICghaXNOdW1iZXJBcnJheShyYXdWZXJ0aWNlcywgbnVsbCkpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgdmVydGljZXMgPSB0aGlzLmRhdGEudmVydGljZXMgPSBGbG9hdDMyQXJyYXkuZnJvbShyYXdWZXJ0aWNlcyk7CiAgICBpZiAoIXRoaXMuYXBwZWFyYW5jZSkgewogICAgICBjb25zdCBzdHJva2VDb2xvciA9IHRoaXMuY29sb3IgPyBnZXRQZGZDb2xvckFycmF5KHRoaXMuY29sb3IpIDogWzAsIDAsIDBdOwogICAgICBjb25zdCBzdHJva2VBbHBoYSA9IGRpY3QuZ2V0KCJDQSIpOwogICAgICBjb25zdCBib3JkZXJXaWR0aCA9IHRoaXMuYm9yZGVyU3R5bGUud2lkdGggfHwgMSwKICAgICAgICBib3JkZXJBZGp1c3QgPSAyICogYm9yZGVyV2lkdGg7CiAgICAgIGNvbnN0IGJib3ggPSBbSW5maW5pdHksIEluZmluaXR5LCAtSW5maW5pdHksIC1JbmZpbml0eV07CiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHZlcnRpY2VzLmxlbmd0aDsgaSA8IGlpOyBpICs9IDIpIHsKICAgICAgICBVdGlsLnJlY3RCb3VuZGluZ0JveCh2ZXJ0aWNlc1tpXSAtIGJvcmRlckFkanVzdCwgdmVydGljZXNbaSArIDFdIC0gYm9yZGVyQWRqdXN0LCB2ZXJ0aWNlc1tpXSArIGJvcmRlckFkanVzdCwgdmVydGljZXNbaSArIDFdICsgYm9yZGVyQWRqdXN0LCBiYm94KTsKICAgICAgfQogICAgICBpZiAoIVV0aWwuaW50ZXJzZWN0KHRoaXMucmVjdGFuZ2xlLCBiYm94KSkgewogICAgICAgIHRoaXMucmVjdGFuZ2xlID0gYmJveDsKICAgICAgfQogICAgICB0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7CiAgICAgICAgeHJlZiwKICAgICAgICBleHRyYTogYCR7Ym9yZGVyV2lkdGh9IHdgLAogICAgICAgIHN0cm9rZUNvbG9yLAogICAgICAgIHN0cm9rZUFscGhhLAogICAgICAgIHBvaW50c0NhbGxiYWNrOiAoYnVmZmVyLCBwb2ludHMpID0+IHsKICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHZlcnRpY2VzLmxlbmd0aDsgaSA8IGlpOyBpICs9IDIpIHsKICAgICAgICAgICAgYnVmZmVyLnB1c2goYCR7dmVydGljZXNbaV19ICR7dmVydGljZXNbaSArIDFdfSAke2kgPT09IDAgPyAibSIgOiAibCJ9YCk7CiAgICAgICAgICB9CiAgICAgICAgICBidWZmZXIucHVzaCgiUyIpOwogICAgICAgICAgcmV0dXJuIFtwb2ludHNbMF0sIHBvaW50c1s3XSwgcG9pbnRzWzJdLCBwb2ludHNbM11dOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgfQp9CmNsYXNzIFBvbHlnb25Bbm5vdGF0aW9uIGV4dGVuZHMgUG9seWxpbmVBbm5vdGF0aW9uIHsKICBjb25zdHJ1Y3RvcihwYXJhbXMpIHsKICAgIHN1cGVyKHBhcmFtcyk7CiAgICB0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGUgPSBBbm5vdGF0aW9uVHlwZS5QT0xZR09OOwogIH0KfQpjbGFzcyBDYXJldEFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9uIHsKICBjb25zdHJ1Y3RvcihwYXJhbXMpIHsKICAgIHN1cGVyKHBhcmFtcyk7CiAgICB0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGUgPSBBbm5vdGF0aW9uVHlwZS5DQVJFVDsKICB9Cn0KY2xhc3MgSW5rQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb24gewogIGNvbnN0cnVjdG9yKHBhcmFtcykgewogICAgc3VwZXIocGFyYW1zKTsKICAgIHRoaXMuZGF0YS5oYXNPd25DYW52YXMgPSB0aGlzLmRhdGEubm9Sb3RhdGU7CiAgICB0aGlzLmRhdGEubm9IVE1MID0gZmFsc2U7CiAgICBjb25zdCB7CiAgICAgIGRpY3QsCiAgICAgIHhyZWYKICAgIH0gPSBwYXJhbXM7CiAgICB0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGUgPSBBbm5vdGF0aW9uVHlwZS5JTks7CiAgICB0aGlzLmRhdGEuaW5rTGlzdHMgPSBbXTsKICAgIHRoaXMuZGF0YS5pc0VkaXRhYmxlID0gIXRoaXMuZGF0YS5ub0hUTUw7CiAgICB0aGlzLmRhdGEubm9IVE1MID0gZmFsc2U7CiAgICB0aGlzLmRhdGEub3BhY2l0eSA9IGRpY3QuZ2V0KCJDQSIpIHx8IDE7CiAgICBjb25zdCByYXdJbmtMaXN0cyA9IGRpY3QuZ2V0QXJyYXkoIklua0xpc3QiKTsKICAgIGlmICghQXJyYXkuaXNBcnJheShyYXdJbmtMaXN0cykpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgZm9yIChsZXQgaSA9IDAsIGlpID0gcmF3SW5rTGlzdHMubGVuZ3RoOyBpIDwgaWk7ICsraSkgewogICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmF3SW5rTGlzdHNbaV0pKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgY29uc3QgaW5rTGlzdCA9IG5ldyBGbG9hdDMyQXJyYXkocmF3SW5rTGlzdHNbaV0ubGVuZ3RoKTsKICAgICAgdGhpcy5kYXRhLmlua0xpc3RzLnB1c2goaW5rTGlzdCk7CiAgICAgIGZvciAobGV0IGogPSAwLCBqaiA9IHJhd0lua0xpc3RzW2ldLmxlbmd0aDsgaiA8IGpqOyBqICs9IDIpIHsKICAgICAgICBjb25zdCB4ID0geHJlZi5mZXRjaElmUmVmKHJhd0lua0xpc3RzW2ldW2pdKSwKICAgICAgICAgIHkgPSB4cmVmLmZldGNoSWZSZWYocmF3SW5rTGlzdHNbaV1baiArIDFdKTsKICAgICAgICBpZiAodHlwZW9mIHggPT09ICJudW1iZXIiICYmIHR5cGVvZiB5ID09PSAibnVtYmVyIikgewogICAgICAgICAgaW5rTGlzdFtqXSA9IHg7CiAgICAgICAgICBpbmtMaXN0W2ogKyAxXSA9IHk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoIXRoaXMuYXBwZWFyYW5jZSkgewogICAgICBjb25zdCBzdHJva2VDb2xvciA9IHRoaXMuY29sb3IgPyBnZXRQZGZDb2xvckFycmF5KHRoaXMuY29sb3IpIDogWzAsIDAsIDBdOwogICAgICBjb25zdCBzdHJva2VBbHBoYSA9IGRpY3QuZ2V0KCJDQSIpOwogICAgICBjb25zdCBib3JkZXJXaWR0aCA9IHRoaXMuYm9yZGVyU3R5bGUud2lkdGggfHwgMSwKICAgICAgICBib3JkZXJBZGp1c3QgPSAyICogYm9yZGVyV2lkdGg7CiAgICAgIGNvbnN0IGJib3ggPSBbSW5maW5pdHksIEluZmluaXR5LCAtSW5maW5pdHksIC1JbmZpbml0eV07CiAgICAgIGZvciAoY29uc3QgaW5rTGlzdCBvZiB0aGlzLmRhdGEuaW5rTGlzdHMpIHsKICAgICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBpbmtMaXN0Lmxlbmd0aDsgaSA8IGlpOyBpICs9IDIpIHsKICAgICAgICAgIFV0aWwucmVjdEJvdW5kaW5nQm94KGlua0xpc3RbaV0gLSBib3JkZXJBZGp1c3QsIGlua0xpc3RbaSArIDFdIC0gYm9yZGVyQWRqdXN0LCBpbmtMaXN0W2ldICsgYm9yZGVyQWRqdXN0LCBpbmtMaXN0W2kgKyAxXSArIGJvcmRlckFkanVzdCwgYmJveCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICghVXRpbC5pbnRlcnNlY3QodGhpcy5yZWN0YW5nbGUsIGJib3gpKSB7CiAgICAgICAgdGhpcy5yZWN0YW5nbGUgPSBiYm94OwogICAgICB9CiAgICAgIHRoaXMuX3NldERlZmF1bHRBcHBlYXJhbmNlKHsKICAgICAgICB4cmVmLAogICAgICAgIGV4dHJhOiBgJHtib3JkZXJXaWR0aH0gd2AsCiAgICAgICAgc3Ryb2tlQ29sb3IsCiAgICAgICAgc3Ryb2tlQWxwaGEsCiAgICAgICAgcG9pbnRzQ2FsbGJhY2s6IChidWZmZXIsIHBvaW50cykgPT4gewogICAgICAgICAgZm9yIChjb25zdCBpbmtMaXN0IG9mIHRoaXMuZGF0YS5pbmtMaXN0cykgewogICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBpbmtMaXN0Lmxlbmd0aDsgaSA8IGlpOyBpICs9IDIpIHsKICAgICAgICAgICAgICBidWZmZXIucHVzaChgJHtpbmtMaXN0W2ldfSAke2lua0xpc3RbaSArIDFdfSAke2kgPT09IDAgPyAibSIgOiAibCJ9YCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnVmZmVyLnB1c2goIlMiKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBbcG9pbnRzWzBdLCBwb2ludHNbN10sIHBvaW50c1syXSwgcG9pbnRzWzNdXTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogIH0KICBzdGF0aWMgY3JlYXRlTmV3RGljdChhbm5vdGF0aW9uLCB4cmVmLCB7CiAgICBhcFJlZiwKICAgIGFwCiAgfSkgewogICAgY29uc3QgewogICAgICBvbGRBbm5vdGF0aW9uLAogICAgICBjb2xvciwKICAgICAgb3BhY2l0eSwKICAgICAgcGF0aHMsCiAgICAgIG91dGxpbmVzLAogICAgICByZWN0LAogICAgICByb3RhdGlvbiwKICAgICAgdGhpY2tuZXNzLAogICAgICB1c2VyCiAgICB9ID0gYW5ub3RhdGlvbjsKICAgIGNvbnN0IGluayA9IG9sZEFubm90YXRpb24gfHwgbmV3IERpY3QoeHJlZik7CiAgICBpbmsuc2V0KCJUeXBlIiwgTmFtZS5nZXQoIkFubm90IikpOwogICAgaW5rLnNldCgiU3VidHlwZSIsIE5hbWUuZ2V0KCJJbmsiKSk7CiAgICBpbmsuc2V0KG9sZEFubm90YXRpb24gPyAiTSIgOiAiQ3JlYXRpb25EYXRlIiwgYEQ6JHtnZXRNb2RpZmljYXRpb25EYXRlKCl9YCk7CiAgICBpbmsuc2V0KCJSZWN0IiwgcmVjdCk7CiAgICBpbmsuc2V0KCJJbmtMaXN0Iiwgb3V0bGluZXM/LnBvaW50cyB8fCBwYXRocy5wb2ludHMpOwogICAgaW5rLnNldCgiRiIsIDQpOwogICAgaW5rLnNldCgiUm90YXRlIiwgcm90YXRpb24pOwogICAgaWYgKHVzZXIpIHsKICAgICAgaW5rLnNldCgiVCIsIHN0cmluZ1RvQXNjaWlPclVURjE2QkUodXNlcikpOwogICAgfQogICAgaWYgKG91dGxpbmVzKSB7CiAgICAgIGluay5zZXQoIklUIiwgTmFtZS5nZXQoIklua0hpZ2hsaWdodCIpKTsKICAgIH0KICAgIGNvbnN0IGJzID0gbmV3IERpY3QoeHJlZik7CiAgICBpbmsuc2V0KCJCUyIsIGJzKTsKICAgIGJzLnNldCgiVyIsIHRoaWNrbmVzcyk7CiAgICBpbmsuc2V0KCJDIiwgZ2V0UGRmQ29sb3JBcnJheShjb2xvcikpOwogICAgaW5rLnNldCgiQ0EiLCBvcGFjaXR5KTsKICAgIGNvbnN0IG4gPSBuZXcgRGljdCh4cmVmKTsKICAgIGluay5zZXQoIkFQIiwgbik7CiAgICBpZiAoYXBSZWYpIHsKICAgICAgbi5zZXQoIk4iLCBhcFJlZik7CiAgICB9IGVsc2UgewogICAgICBuLnNldCgiTiIsIGFwKTsKICAgIH0KICAgIHJldHVybiBpbms7CiAgfQogIHN0YXRpYyBhc3luYyBjcmVhdGVOZXdBcHBlYXJhbmNlU3RyZWFtKGFubm90YXRpb24sIHhyZWYsIHBhcmFtcykgewogICAgaWYgKGFubm90YXRpb24ub3V0bGluZXMpIHsKICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlTmV3QXBwZWFyYW5jZVN0cmVhbUZvckhpZ2hsaWdodChhbm5vdGF0aW9uLCB4cmVmLCBwYXJhbXMpOwogICAgfQogICAgY29uc3QgewogICAgICBjb2xvciwKICAgICAgcmVjdCwKICAgICAgcGF0aHMsCiAgICAgIHRoaWNrbmVzcywKICAgICAgb3BhY2l0eQogICAgfSA9IGFubm90YXRpb247CiAgICBjb25zdCBhcHBlYXJhbmNlQnVmZmVyID0gW2Ake3RoaWNrbmVzc30gdyAxIEogMSBqYCwgYCR7Z2V0UGRmQ29sb3IoY29sb3IsIGZhbHNlKX1gXTsKICAgIGlmIChvcGFjaXR5ICE9PSAxKSB7CiAgICAgIGFwcGVhcmFuY2VCdWZmZXIucHVzaCgiL1IwIGdzIik7CiAgICB9CiAgICBmb3IgKGNvbnN0IG91dGxpbmUgb2YgcGF0aHMubGluZXMpIHsKICAgICAgYXBwZWFyYW5jZUJ1ZmZlci5wdXNoKGAke251bWJlclRvU3RyaW5nKG91dGxpbmVbNF0pfSAke251bWJlclRvU3RyaW5nKG91dGxpbmVbNV0pfSBtYCk7CiAgICAgIGZvciAobGV0IGkgPSA2LCBpaSA9IG91dGxpbmUubGVuZ3RoOyBpIDwgaWk7IGkgKz0gNikgewogICAgICAgIGlmIChpc05hTihvdXRsaW5lW2ldKSkgewogICAgICAgICAgYXBwZWFyYW5jZUJ1ZmZlci5wdXNoKGAke251bWJlclRvU3RyaW5nKG91dGxpbmVbaSArIDRdKX0gJHtudW1iZXJUb1N0cmluZyhvdXRsaW5lW2kgKyA1XSl9IGxgKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3QgW2MxeCwgYzF5LCBjMngsIGMyeSwgeCwgeV0gPSBvdXRsaW5lLnNsaWNlKGksIGkgKyA2KTsKICAgICAgICAgIGFwcGVhcmFuY2VCdWZmZXIucHVzaChbYzF4LCBjMXksIGMyeCwgYzJ5LCB4LCB5XS5tYXAobnVtYmVyVG9TdHJpbmcpLmpvaW4oIiAiKSArICIgYyIpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAob3V0bGluZS5sZW5ndGggPT09IDYpIHsKICAgICAgICBhcHBlYXJhbmNlQnVmZmVyLnB1c2goYCR7bnVtYmVyVG9TdHJpbmcob3V0bGluZVs0XSl9ICR7bnVtYmVyVG9TdHJpbmcob3V0bGluZVs1XSl9IGxgKTsKICAgICAgfQogICAgfQogICAgYXBwZWFyYW5jZUJ1ZmZlci5wdXNoKCJTIik7CiAgICBjb25zdCBhcHBlYXJhbmNlID0gYXBwZWFyYW5jZUJ1ZmZlci5qb2luKCJcbiIpOwogICAgY29uc3QgYXBwZWFyYW5jZVN0cmVhbURpY3QgPSBuZXcgRGljdCh4cmVmKTsKICAgIGFwcGVhcmFuY2VTdHJlYW1EaWN0LnNldCgiRm9ybVR5cGUiLCAxKTsKICAgIGFwcGVhcmFuY2VTdHJlYW1EaWN0LnNldCgiU3VidHlwZSIsIE5hbWUuZ2V0KCJGb3JtIikpOwogICAgYXBwZWFyYW5jZVN0cmVhbURpY3Quc2V0KCJUeXBlIiwgTmFtZS5nZXQoIlhPYmplY3QiKSk7CiAgICBhcHBlYXJhbmNlU3RyZWFtRGljdC5zZXQoIkJCb3giLCByZWN0KTsKICAgIGFwcGVhcmFuY2VTdHJlYW1EaWN0LnNldCgiTGVuZ3RoIiwgYXBwZWFyYW5jZS5sZW5ndGgpOwogICAgaWYgKG9wYWNpdHkgIT09IDEpIHsKICAgICAgY29uc3QgcmVzb3VyY2VzID0gbmV3IERpY3QoeHJlZik7CiAgICAgIGNvbnN0IGV4dEdTdGF0ZSA9IG5ldyBEaWN0KHhyZWYpOwogICAgICBjb25zdCByMCA9IG5ldyBEaWN0KHhyZWYpOwogICAgICByMC5zZXQoIkNBIiwgb3BhY2l0eSk7CiAgICAgIHIwLnNldCgiVHlwZSIsIE5hbWUuZ2V0KCJFeHRHU3RhdGUiKSk7CiAgICAgIGV4dEdTdGF0ZS5zZXQoIlIwIiwgcjApOwogICAgICByZXNvdXJjZXMuc2V0KCJFeHRHU3RhdGUiLCBleHRHU3RhdGUpOwogICAgICBhcHBlYXJhbmNlU3RyZWFtRGljdC5zZXQoIlJlc291cmNlcyIsIHJlc291cmNlcyk7CiAgICB9CiAgICBjb25zdCBhcCA9IG5ldyBTdHJpbmdTdHJlYW0oYXBwZWFyYW5jZSk7CiAgICBhcC5kaWN0ID0gYXBwZWFyYW5jZVN0cmVhbURpY3Q7CiAgICByZXR1cm4gYXA7CiAgfQogIHN0YXRpYyBhc3luYyBjcmVhdGVOZXdBcHBlYXJhbmNlU3RyZWFtRm9ySGlnaGxpZ2h0KGFubm90YXRpb24sIHhyZWYsIHBhcmFtcykgewogICAgY29uc3QgewogICAgICBjb2xvciwKICAgICAgcmVjdCwKICAgICAgb3V0bGluZXM6IHsKICAgICAgICBvdXRsaW5lCiAgICAgIH0sCiAgICAgIG9wYWNpdHkKICAgIH0gPSBhbm5vdGF0aW9uOwogICAgY29uc3QgYXBwZWFyYW5jZUJ1ZmZlciA9IFtgJHtnZXRQZGZDb2xvcihjb2xvciwgdHJ1ZSl9YCwgIi9SMCBncyJdOwogICAgYXBwZWFyYW5jZUJ1ZmZlci5wdXNoKGAke251bWJlclRvU3RyaW5nKG91dGxpbmVbNF0pfSAke251bWJlclRvU3RyaW5nKG91dGxpbmVbNV0pfSBtYCk7CiAgICBmb3IgKGxldCBpID0gNiwgaWkgPSBvdXRsaW5lLmxlbmd0aDsgaSA8IGlpOyBpICs9IDYpIHsKICAgICAgaWYgKGlzTmFOKG91dGxpbmVbaV0pKSB7CiAgICAgICAgYXBwZWFyYW5jZUJ1ZmZlci5wdXNoKGAke251bWJlclRvU3RyaW5nKG91dGxpbmVbaSArIDRdKX0gJHtudW1iZXJUb1N0cmluZyhvdXRsaW5lW2kgKyA1XSl9IGxgKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zdCBbYzF4LCBjMXksIGMyeCwgYzJ5LCB4LCB5XSA9IG91dGxpbmUuc2xpY2UoaSwgaSArIDYpOwogICAgICAgIGFwcGVhcmFuY2VCdWZmZXIucHVzaChbYzF4LCBjMXksIGMyeCwgYzJ5LCB4LCB5XS5tYXAobnVtYmVyVG9TdHJpbmcpLmpvaW4oIiAiKSArICIgYyIpOwogICAgICB9CiAgICB9CiAgICBhcHBlYXJhbmNlQnVmZmVyLnB1c2goImggZiIpOwogICAgY29uc3QgYXBwZWFyYW5jZSA9IGFwcGVhcmFuY2VCdWZmZXIuam9pbigiXG4iKTsKICAgIGNvbnN0IGFwcGVhcmFuY2VTdHJlYW1EaWN0ID0gbmV3IERpY3QoeHJlZik7CiAgICBhcHBlYXJhbmNlU3RyZWFtRGljdC5zZXQoIkZvcm1UeXBlIiwgMSk7CiAgICBhcHBlYXJhbmNlU3RyZWFtRGljdC5zZXQoIlN1YnR5cGUiLCBOYW1lLmdldCgiRm9ybSIpKTsKICAgIGFwcGVhcmFuY2VTdHJlYW1EaWN0LnNldCgiVHlwZSIsIE5hbWUuZ2V0KCJYT2JqZWN0IikpOwogICAgYXBwZWFyYW5jZVN0cmVhbURpY3Quc2V0KCJCQm94IiwgcmVjdCk7CiAgICBhcHBlYXJhbmNlU3RyZWFtRGljdC5zZXQoIkxlbmd0aCIsIGFwcGVhcmFuY2UubGVuZ3RoKTsKICAgIGNvbnN0IHJlc291cmNlcyA9IG5ldyBEaWN0KHhyZWYpOwogICAgY29uc3QgZXh0R1N0YXRlID0gbmV3IERpY3QoeHJlZik7CiAgICByZXNvdXJjZXMuc2V0KCJFeHRHU3RhdGUiLCBleHRHU3RhdGUpOwogICAgYXBwZWFyYW5jZVN0cmVhbURpY3Quc2V0KCJSZXNvdXJjZXMiLCByZXNvdXJjZXMpOwogICAgY29uc3QgcjAgPSBuZXcgRGljdCh4cmVmKTsKICAgIGV4dEdTdGF0ZS5zZXQoIlIwIiwgcjApOwogICAgcjAuc2V0KCJCTSIsIE5hbWUuZ2V0KCJNdWx0aXBseSIpKTsKICAgIGlmIChvcGFjaXR5ICE9PSAxKSB7CiAgICAgIHIwLnNldCgiY2EiLCBvcGFjaXR5KTsKICAgICAgcjAuc2V0KCJUeXBlIiwgTmFtZS5nZXQoIkV4dEdTdGF0ZSIpKTsKICAgIH0KICAgIGNvbnN0IGFwID0gbmV3IFN0cmluZ1N0cmVhbShhcHBlYXJhbmNlKTsKICAgIGFwLmRpY3QgPSBhcHBlYXJhbmNlU3RyZWFtRGljdDsKICAgIHJldHVybiBhcDsKICB9Cn0KY2xhc3MgSGlnaGxpZ2h0QW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb24gewogIGNvbnN0cnVjdG9yKHBhcmFtcykgewogICAgc3VwZXIocGFyYW1zKTsKICAgIGNvbnN0IHsKICAgICAgZGljdCwKICAgICAgeHJlZgogICAgfSA9IHBhcmFtczsKICAgIHRoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IEFubm90YXRpb25UeXBlLkhJR0hMSUdIVDsKICAgIHRoaXMuZGF0YS5pc0VkaXRhYmxlID0gIXRoaXMuZGF0YS5ub0hUTUw7CiAgICB0aGlzLmRhdGEubm9IVE1MID0gZmFsc2U7CiAgICB0aGlzLmRhdGEub3BhY2l0eSA9IGRpY3QuZ2V0KCJDQSIpIHx8IDE7CiAgICBjb25zdCBxdWFkUG9pbnRzID0gdGhpcy5kYXRhLnF1YWRQb2ludHMgPSBnZXRRdWFkUG9pbnRzKGRpY3QsIG51bGwpOwogICAgaWYgKHF1YWRQb2ludHMpIHsKICAgICAgY29uc3QgcmVzb3VyY2VzID0gdGhpcy5hcHBlYXJhbmNlPy5kaWN0LmdldCgiUmVzb3VyY2VzIik7CiAgICAgIGlmICghdGhpcy5hcHBlYXJhbmNlIHx8ICFyZXNvdXJjZXM/LmhhcygiRXh0R1N0YXRlIikpIHsKICAgICAgICBpZiAodGhpcy5hcHBlYXJhbmNlKSB7CiAgICAgICAgICB3YXJuKCJIaWdobGlnaHRBbm5vdGF0aW9uIC0gaWdub3JpbmcgYnVpbHQtaW4gYXBwZWFyYW5jZSBzdHJlYW0uIik7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGZpbGxDb2xvciA9IHRoaXMuY29sb3IgPyBnZXRQZGZDb2xvckFycmF5KHRoaXMuY29sb3IpIDogWzEsIDEsIDBdOwogICAgICAgIGNvbnN0IGZpbGxBbHBoYSA9IGRpY3QuZ2V0KCJDQSIpOwogICAgICAgIHRoaXMuX3NldERlZmF1bHRBcHBlYXJhbmNlKHsKICAgICAgICAgIHhyZWYsCiAgICAgICAgICBmaWxsQ29sb3IsCiAgICAgICAgICBibGVuZE1vZGU6ICJNdWx0aXBseSIsCiAgICAgICAgICBmaWxsQWxwaGEsCiAgICAgICAgICBwb2ludHNDYWxsYmFjazogKGJ1ZmZlciwgcG9pbnRzKSA9PiB7CiAgICAgICAgICAgIGJ1ZmZlci5wdXNoKGAke3BvaW50c1swXX0gJHtwb2ludHNbMV19IG1gLCBgJHtwb2ludHNbMl19ICR7cG9pbnRzWzNdfSBsYCwgYCR7cG9pbnRzWzZdfSAke3BvaW50c1s3XX0gbGAsIGAke3BvaW50c1s0XX0gJHtwb2ludHNbNV19IGxgLCAiZiIpOwogICAgICAgICAgICByZXR1cm4gW3BvaW50c1swXSwgcG9pbnRzWzddLCBwb2ludHNbMl0sIHBvaW50c1szXV07CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuZGF0YS5wb3B1cFJlZiA9IG51bGw7CiAgICB9CiAgfQogIHN0YXRpYyBjcmVhdGVOZXdEaWN0KGFubm90YXRpb24sIHhyZWYsIHsKICAgIGFwUmVmLAogICAgYXAKICB9KSB7CiAgICBjb25zdCB7CiAgICAgIGNvbG9yLAogICAgICBvbGRBbm5vdGF0aW9uLAogICAgICBvcGFjaXR5LAogICAgICByZWN0LAogICAgICByb3RhdGlvbiwKICAgICAgdXNlciwKICAgICAgcXVhZFBvaW50cwogICAgfSA9IGFubm90YXRpb247CiAgICBjb25zdCBoaWdobGlnaHQgPSBvbGRBbm5vdGF0aW9uIHx8IG5ldyBEaWN0KHhyZWYpOwogICAgaGlnaGxpZ2h0LnNldCgiVHlwZSIsIE5hbWUuZ2V0KCJBbm5vdCIpKTsKICAgIGhpZ2hsaWdodC5zZXQoIlN1YnR5cGUiLCBOYW1lLmdldCgiSGlnaGxpZ2h0IikpOwogICAgaGlnaGxpZ2h0LnNldChvbGRBbm5vdGF0aW9uID8gIk0iIDogIkNyZWF0aW9uRGF0ZSIsIGBEOiR7Z2V0TW9kaWZpY2F0aW9uRGF0ZSgpfWApOwogICAgaGlnaGxpZ2h0LnNldCgiQ3JlYXRpb25EYXRlIiwgYEQ6JHtnZXRNb2RpZmljYXRpb25EYXRlKCl9YCk7CiAgICBoaWdobGlnaHQuc2V0KCJSZWN0IiwgcmVjdCk7CiAgICBoaWdobGlnaHQuc2V0KCJGIiwgNCk7CiAgICBoaWdobGlnaHQuc2V0KCJCb3JkZXIiLCBbMCwgMCwgMF0pOwogICAgaGlnaGxpZ2h0LnNldCgiUm90YXRlIiwgcm90YXRpb24pOwogICAgaGlnaGxpZ2h0LnNldCgiUXVhZFBvaW50cyIsIHF1YWRQb2ludHMpOwogICAgaGlnaGxpZ2h0LnNldCgiQyIsIGdldFBkZkNvbG9yQXJyYXkoY29sb3IpKTsKICAgIGhpZ2hsaWdodC5zZXQoIkNBIiwgb3BhY2l0eSk7CiAgICBpZiAodXNlcikgewogICAgICBoaWdobGlnaHQuc2V0KCJUIiwgc3RyaW5nVG9Bc2NpaU9yVVRGMTZCRSh1c2VyKSk7CiAgICB9CiAgICBpZiAoYXBSZWYgfHwgYXApIHsKICAgICAgY29uc3QgbiA9IG5ldyBEaWN0KHhyZWYpOwogICAgICBoaWdobGlnaHQuc2V0KCJBUCIsIG4pOwogICAgICBuLnNldCgiTiIsIGFwUmVmIHx8IGFwKTsKICAgIH0KICAgIHJldHVybiBoaWdobGlnaHQ7CiAgfQogIHN0YXRpYyBhc3luYyBjcmVhdGVOZXdBcHBlYXJhbmNlU3RyZWFtKGFubm90YXRpb24sIHhyZWYsIHBhcmFtcykgewogICAgY29uc3QgewogICAgICBjb2xvciwKICAgICAgcmVjdCwKICAgICAgb3V0bGluZXMsCiAgICAgIG9wYWNpdHkKICAgIH0gPSBhbm5vdGF0aW9uOwogICAgY29uc3QgYXBwZWFyYW5jZUJ1ZmZlciA9IFtgJHtnZXRQZGZDb2xvcihjb2xvciwgdHJ1ZSl9YCwgIi9SMCBncyJdOwogICAgY29uc3QgYnVmZmVyID0gW107CiAgICBmb3IgKGNvbnN0IG91dGxpbmUgb2Ygb3V0bGluZXMpIHsKICAgICAgYnVmZmVyLmxlbmd0aCA9IDA7CiAgICAgIGJ1ZmZlci5wdXNoKGAke251bWJlclRvU3RyaW5nKG91dGxpbmVbMF0pfSAke251bWJlclRvU3RyaW5nKG91dGxpbmVbMV0pfSBtYCk7CiAgICAgIGZvciAobGV0IGkgPSAyLCBpaSA9IG91dGxpbmUubGVuZ3RoOyBpIDwgaWk7IGkgKz0gMikgewogICAgICAgIGJ1ZmZlci5wdXNoKGAke251bWJlclRvU3RyaW5nKG91dGxpbmVbaV0pfSAke251bWJlclRvU3RyaW5nKG91dGxpbmVbaSArIDFdKX0gbGApOwogICAgICB9CiAgICAgIGJ1ZmZlci5wdXNoKCJoIik7CiAgICAgIGFwcGVhcmFuY2VCdWZmZXIucHVzaChidWZmZXIuam9pbigiXG4iKSk7CiAgICB9CiAgICBhcHBlYXJhbmNlQnVmZmVyLnB1c2goImYqIik7CiAgICBjb25zdCBhcHBlYXJhbmNlID0gYXBwZWFyYW5jZUJ1ZmZlci5qb2luKCJcbiIpOwogICAgY29uc3QgYXBwZWFyYW5jZVN0cmVhbURpY3QgPSBuZXcgRGljdCh4cmVmKTsKICAgIGFwcGVhcmFuY2VTdHJlYW1EaWN0LnNldCgiRm9ybVR5cGUiLCAxKTsKICAgIGFwcGVhcmFuY2VTdHJlYW1EaWN0LnNldCgiU3VidHlwZSIsIE5hbWUuZ2V0KCJGb3JtIikpOwogICAgYXBwZWFyYW5jZVN0cmVhbURpY3Quc2V0KCJUeXBlIiwgTmFtZS5nZXQoIlhPYmplY3QiKSk7CiAgICBhcHBlYXJhbmNlU3RyZWFtRGljdC5zZXQoIkJCb3giLCByZWN0KTsKICAgIGFwcGVhcmFuY2VTdHJlYW1EaWN0LnNldCgiTGVuZ3RoIiwgYXBwZWFyYW5jZS5sZW5ndGgpOwogICAgY29uc3QgcmVzb3VyY2VzID0gbmV3IERpY3QoeHJlZik7CiAgICBjb25zdCBleHRHU3RhdGUgPSBuZXcgRGljdCh4cmVmKTsKICAgIHJlc291cmNlcy5zZXQoIkV4dEdTdGF0ZSIsIGV4dEdTdGF0ZSk7CiAgICBhcHBlYXJhbmNlU3RyZWFtRGljdC5zZXQoIlJlc291cmNlcyIsIHJlc291cmNlcyk7CiAgICBjb25zdCByMCA9IG5ldyBEaWN0KHhyZWYpOwogICAgZXh0R1N0YXRlLnNldCgiUjAiLCByMCk7CiAgICByMC5zZXQoIkJNIiwgTmFtZS5nZXQoIk11bHRpcGx5IikpOwogICAgaWYgKG9wYWNpdHkgIT09IDEpIHsKICAgICAgcjAuc2V0KCJjYSIsIG9wYWNpdHkpOwogICAgICByMC5zZXQoIlR5cGUiLCBOYW1lLmdldCgiRXh0R1N0YXRlIikpOwogICAgfQogICAgY29uc3QgYXAgPSBuZXcgU3RyaW5nU3RyZWFtKGFwcGVhcmFuY2UpOwogICAgYXAuZGljdCA9IGFwcGVhcmFuY2VTdHJlYW1EaWN0OwogICAgcmV0dXJuIGFwOwogIH0KfQpjbGFzcyBVbmRlcmxpbmVBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbiB7CiAgY29uc3RydWN0b3IocGFyYW1zKSB7CiAgICBzdXBlcihwYXJhbXMpOwogICAgY29uc3QgewogICAgICBkaWN0LAogICAgICB4cmVmCiAgICB9ID0gcGFyYW1zOwogICAgdGhpcy5kYXRhLmFubm90YXRpb25UeXBlID0gQW5ub3RhdGlvblR5cGUuVU5ERVJMSU5FOwogICAgY29uc3QgcXVhZFBvaW50cyA9IHRoaXMuZGF0YS5xdWFkUG9pbnRzID0gZ2V0UXVhZFBvaW50cyhkaWN0LCBudWxsKTsKICAgIGlmIChxdWFkUG9pbnRzKSB7CiAgICAgIGlmICghdGhpcy5hcHBlYXJhbmNlKSB7CiAgICAgICAgY29uc3Qgc3Ryb2tlQ29sb3IgPSB0aGlzLmNvbG9yID8gZ2V0UGRmQ29sb3JBcnJheSh0aGlzLmNvbG9yKSA6IFswLCAwLCAwXTsKICAgICAgICBjb25zdCBzdHJva2VBbHBoYSA9IGRpY3QuZ2V0KCJDQSIpOwogICAgICAgIHRoaXMuX3NldERlZmF1bHRBcHBlYXJhbmNlKHsKICAgICAgICAgIHhyZWYsCiAgICAgICAgICBleHRyYTogIltdIDAgZCAwLjU3MSB3IiwKICAgICAgICAgIHN0cm9rZUNvbG9yLAogICAgICAgICAgc3Ryb2tlQWxwaGEsCiAgICAgICAgICBwb2ludHNDYWxsYmFjazogKGJ1ZmZlciwgcG9pbnRzKSA9PiB7CiAgICAgICAgICAgIGJ1ZmZlci5wdXNoKGAke3BvaW50c1s0XX0gJHtwb2ludHNbNV0gKyAxLjN9IG1gLCBgJHtwb2ludHNbNl19ICR7cG9pbnRzWzddICsgMS4zfSBsYCwgIlMiKTsKICAgICAgICAgICAgcmV0dXJuIFtwb2ludHNbMF0sIHBvaW50c1s3XSwgcG9pbnRzWzJdLCBwb2ludHNbM11dOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB0aGlzLmRhdGEucG9wdXBSZWYgPSBudWxsOwogICAgfQogIH0KfQpjbGFzcyBTcXVpZ2dseUFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9uIHsKICBjb25zdHJ1Y3RvcihwYXJhbXMpIHsKICAgIHN1cGVyKHBhcmFtcyk7CiAgICBjb25zdCB7CiAgICAgIGRpY3QsCiAgICAgIHhyZWYKICAgIH0gPSBwYXJhbXM7CiAgICB0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGUgPSBBbm5vdGF0aW9uVHlwZS5TUVVJR0dMWTsKICAgIGNvbnN0IHF1YWRQb2ludHMgPSB0aGlzLmRhdGEucXVhZFBvaW50cyA9IGdldFF1YWRQb2ludHMoZGljdCwgbnVsbCk7CiAgICBpZiAocXVhZFBvaW50cykgewogICAgICBpZiAoIXRoaXMuYXBwZWFyYW5jZSkgewogICAgICAgIGNvbnN0IHN0cm9rZUNvbG9yID0gdGhpcy5jb2xvciA/IGdldFBkZkNvbG9yQXJyYXkodGhpcy5jb2xvcikgOiBbMCwgMCwgMF07CiAgICAgICAgY29uc3Qgc3Ryb2tlQWxwaGEgPSBkaWN0LmdldCgiQ0EiKTsKICAgICAgICB0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7CiAgICAgICAgICB4cmVmLAogICAgICAgICAgZXh0cmE6ICJbXSAwIGQgMSB3IiwKICAgICAgICAgIHN0cm9rZUNvbG9yLAogICAgICAgICAgc3Ryb2tlQWxwaGEsCiAgICAgICAgICBwb2ludHNDYWxsYmFjazogKGJ1ZmZlciwgcG9pbnRzKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGR5ID0gKHBvaW50c1sxXSAtIHBvaW50c1s1XSkgLyA2OwogICAgICAgICAgICBsZXQgc2hpZnQgPSBkeTsKICAgICAgICAgICAgbGV0IHggPSBwb2ludHNbNF07CiAgICAgICAgICAgIGNvbnN0IHkgPSBwb2ludHNbNV07CiAgICAgICAgICAgIGNvbnN0IHhFbmQgPSBwb2ludHNbNl07CiAgICAgICAgICAgIGJ1ZmZlci5wdXNoKGAke3h9ICR7eSArIHNoaWZ0fSBtYCk7CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICB4ICs9IDI7CiAgICAgICAgICAgICAgc2hpZnQgPSBzaGlmdCA9PT0gMCA/IGR5IDogMDsKICAgICAgICAgICAgICBidWZmZXIucHVzaChgJHt4fSAke3kgKyBzaGlmdH0gbGApOwogICAgICAgICAgICB9IHdoaWxlICh4IDwgeEVuZCk7CiAgICAgICAgICAgIGJ1ZmZlci5wdXNoKCJTIik7CiAgICAgICAgICAgIHJldHVybiBbcG9pbnRzWzRdLCB5IC0gMiAqIGR5LCB4RW5kLCB5ICsgMiAqIGR5XTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgdGhpcy5kYXRhLnBvcHVwUmVmID0gbnVsbDsKICAgIH0KICB9Cn0KY2xhc3MgU3RyaWtlT3V0QW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb24gewogIGNvbnN0cnVjdG9yKHBhcmFtcykgewogICAgc3VwZXIocGFyYW1zKTsKICAgIGNvbnN0IHsKICAgICAgZGljdCwKICAgICAgeHJlZgogICAgfSA9IHBhcmFtczsKICAgIHRoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IEFubm90YXRpb25UeXBlLlNUUklLRU9VVDsKICAgIGNvbnN0IHF1YWRQb2ludHMgPSB0aGlzLmRhdGEucXVhZFBvaW50cyA9IGdldFF1YWRQb2ludHMoZGljdCwgbnVsbCk7CiAgICBpZiAocXVhZFBvaW50cykgewogICAgICBpZiAoIXRoaXMuYXBwZWFyYW5jZSkgewogICAgICAgIGNvbnN0IHN0cm9rZUNvbG9yID0gdGhpcy5jb2xvciA/IGdldFBkZkNvbG9yQXJyYXkodGhpcy5jb2xvcikgOiBbMCwgMCwgMF07CiAgICAgICAgY29uc3Qgc3Ryb2tlQWxwaGEgPSBkaWN0LmdldCgiQ0EiKTsKICAgICAgICB0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7CiAgICAgICAgICB4cmVmLAogICAgICAgICAgZXh0cmE6ICJbXSAwIGQgMSB3IiwKICAgICAgICAgIHN0cm9rZUNvbG9yLAogICAgICAgICAgc3Ryb2tlQWxwaGEsCiAgICAgICAgICBwb2ludHNDYWxsYmFjazogKGJ1ZmZlciwgcG9pbnRzKSA9PiB7CiAgICAgICAgICAgIGJ1ZmZlci5wdXNoKGAkeyhwb2ludHNbMF0gKyBwb2ludHNbNF0pIC8gMn0gYCArIGAkeyhwb2ludHNbMV0gKyBwb2ludHNbNV0pIC8gMn0gbWAsIGAkeyhwb2ludHNbMl0gKyBwb2ludHNbNl0pIC8gMn0gYCArIGAkeyhwb2ludHNbM10gKyBwb2ludHNbN10pIC8gMn0gbGAsICJTIik7CiAgICAgICAgICAgIHJldHVybiBbcG9pbnRzWzBdLCBwb2ludHNbN10sIHBvaW50c1syXSwgcG9pbnRzWzNdXTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgdGhpcy5kYXRhLnBvcHVwUmVmID0gbnVsbDsKICAgIH0KICB9Cn0KY2xhc3MgU3RhbXBBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbiB7CiAgI3NhdmVkSGFzT3duQ2FudmFzID0gbnVsbDsKICBjb25zdHJ1Y3RvcihwYXJhbXMpIHsKICAgIHN1cGVyKHBhcmFtcyk7CiAgICB0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGUgPSBBbm5vdGF0aW9uVHlwZS5TVEFNUDsKICAgIHRoaXMuZGF0YS5oYXNPd25DYW52YXMgPSB0aGlzLmRhdGEubm9Sb3RhdGU7CiAgICB0aGlzLmRhdGEuaXNFZGl0YWJsZSA9ICF0aGlzLmRhdGEubm9IVE1MOwogICAgdGhpcy5kYXRhLm5vSFRNTCA9IGZhbHNlOwogIH0KICBtdXN0QmVWaWV3ZWRXaGVuRWRpdGluZyhpc0VkaXRpbmcsIG1vZGlmaWVkSWRzID0gbnVsbCkgewogICAgaWYgKGlzRWRpdGluZykgewogICAgICBpZiAoIXRoaXMuZGF0YS5pc0VkaXRhYmxlKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgdGhpcy4jc2F2ZWRIYXNPd25DYW52YXMgPz89IHRoaXMuZGF0YS5oYXNPd25DYW52YXM7CiAgICAgIHRoaXMuZGF0YS5oYXNPd25DYW52YXMgPSB0cnVlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmICh0aGlzLiNzYXZlZEhhc093bkNhbnZhcyAhPT0gbnVsbCkgewogICAgICB0aGlzLmRhdGEuaGFzT3duQ2FudmFzID0gdGhpcy4jc2F2ZWRIYXNPd25DYW52YXM7CiAgICAgIHRoaXMuI3NhdmVkSGFzT3duQ2FudmFzID0gbnVsbDsKICAgIH0KICAgIHJldHVybiAhbW9kaWZpZWRJZHM/Lmhhcyh0aGlzLmRhdGEuaWQpOwogIH0KICBzdGF0aWMgYXN5bmMgY3JlYXRlSW1hZ2UoYml0bWFwLCB4cmVmKSB7CiAgICBjb25zdCB7CiAgICAgIHdpZHRoLAogICAgICBoZWlnaHQKICAgIH0gPSBiaXRtYXA7CiAgICBjb25zdCBjYW52YXMgPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKHdpZHRoLCBoZWlnaHQpOwogICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoIjJkIiwgewogICAgICBhbHBoYTogdHJ1ZQogICAgfSk7CiAgICBjdHguZHJhd0ltYWdlKGJpdG1hcCwgMCwgMCk7CiAgICBjb25zdCBkYXRhID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhOwogICAgY29uc3QgYnVmMzIgPSBuZXcgVWludDMyQXJyYXkoZGF0YS5idWZmZXIpOwogICAgY29uc3QgaGFzQWxwaGEgPSBidWYzMi5zb21lKEZlYXR1cmVUZXN0LmlzTGl0dGxlRW5kaWFuID8geCA9PiB4ID4+PiAyNCAhPT0gMHhmZiA6IHggPT4gKHggJiAweGZmKSAhPT0gMHhmZik7CiAgICBpZiAoaGFzQWxwaGEpIHsKICAgICAgY3R4LmZpbGxTdHlsZSA9ICJ3aGl0ZSI7CiAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgY3R4LmRyYXdJbWFnZShiaXRtYXAsIDAsIDApOwogICAgfQogICAgY29uc3QganBlZ0J1ZmZlclByb21pc2UgPSBjYW52YXMuY29udmVydFRvQmxvYih7CiAgICAgIHR5cGU6ICJpbWFnZS9qcGVnIiwKICAgICAgcXVhbGl0eTogMQogICAgfSkudGhlbihibG9iID0+IGJsb2IuYXJyYXlCdWZmZXIoKSk7CiAgICBjb25zdCB4b2JqZWN0TmFtZSA9IE5hbWUuZ2V0KCJYT2JqZWN0Iik7CiAgICBjb25zdCBpbWFnZU5hbWUgPSBOYW1lLmdldCgiSW1hZ2UiKTsKICAgIGNvbnN0IGltYWdlID0gbmV3IERpY3QoeHJlZik7CiAgICBpbWFnZS5zZXQoIlR5cGUiLCB4b2JqZWN0TmFtZSk7CiAgICBpbWFnZS5zZXQoIlN1YnR5cGUiLCBpbWFnZU5hbWUpOwogICAgaW1hZ2Uuc2V0KCJCaXRzUGVyQ29tcG9uZW50IiwgOCk7CiAgICBpbWFnZS5zZXQoIkNvbG9yU3BhY2UiLCBOYW1lLmdldCgiRGV2aWNlUkdCIikpOwogICAgaW1hZ2Uuc2V0KCJGaWx0ZXIiLCBOYW1lLmdldCgiRENURGVjb2RlIikpOwogICAgaW1hZ2Uuc2V0KCJCQm94IiwgWzAsIDAsIHdpZHRoLCBoZWlnaHRdKTsKICAgIGltYWdlLnNldCgiV2lkdGgiLCB3aWR0aCk7CiAgICBpbWFnZS5zZXQoIkhlaWdodCIsIGhlaWdodCk7CiAgICBsZXQgc21hc2tTdHJlYW0gPSBudWxsOwogICAgaWYgKGhhc0FscGhhKSB7CiAgICAgIGNvbnN0IGFscGhhQnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoYnVmMzIubGVuZ3RoKTsKICAgICAgaWYgKEZlYXR1cmVUZXN0LmlzTGl0dGxlRW5kaWFuKSB7CiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gYnVmMzIubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICAgICAgYWxwaGFCdWZmZXJbaV0gPSBidWYzMltpXSA+Pj4gMjQ7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGJ1ZjMyLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgICAgIGFscGhhQnVmZmVyW2ldID0gYnVmMzJbaV0gJiAweGZmOwogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdCBzbWFzayA9IG5ldyBEaWN0KHhyZWYpOwogICAgICBzbWFzay5zZXQoIlR5cGUiLCB4b2JqZWN0TmFtZSk7CiAgICAgIHNtYXNrLnNldCgiU3VidHlwZSIsIGltYWdlTmFtZSk7CiAgICAgIHNtYXNrLnNldCgiQml0c1BlckNvbXBvbmVudCIsIDgpOwogICAgICBzbWFzay5zZXQoIkNvbG9yU3BhY2UiLCBOYW1lLmdldCgiRGV2aWNlR3JheSIpKTsKICAgICAgc21hc2suc2V0KCJXaWR0aCIsIHdpZHRoKTsKICAgICAgc21hc2suc2V0KCJIZWlnaHQiLCBoZWlnaHQpOwogICAgICBzbWFza1N0cmVhbSA9IG5ldyBTdHJlYW0oYWxwaGFCdWZmZXIsIDAsIDAsIHNtYXNrKTsKICAgIH0KICAgIGNvbnN0IGltYWdlU3RyZWFtID0gbmV3IFN0cmVhbShhd2FpdCBqcGVnQnVmZmVyUHJvbWlzZSwgMCwgMCwgaW1hZ2UpOwogICAgcmV0dXJuIHsKICAgICAgaW1hZ2VTdHJlYW0sCiAgICAgIHNtYXNrU3RyZWFtLAogICAgICB3aWR0aCwKICAgICAgaGVpZ2h0CiAgICB9OwogIH0KICBzdGF0aWMgY3JlYXRlTmV3RGljdChhbm5vdGF0aW9uLCB4cmVmLCB7CiAgICBhcFJlZiwKICAgIGFwCiAgfSkgewogICAgY29uc3QgewogICAgICBvbGRBbm5vdGF0aW9uLAogICAgICByZWN0LAogICAgICByb3RhdGlvbiwKICAgICAgdXNlcgogICAgfSA9IGFubm90YXRpb247CiAgICBjb25zdCBzdGFtcCA9IG9sZEFubm90YXRpb24gfHwgbmV3IERpY3QoeHJlZik7CiAgICBzdGFtcC5zZXQoIlR5cGUiLCBOYW1lLmdldCgiQW5ub3QiKSk7CiAgICBzdGFtcC5zZXQoIlN1YnR5cGUiLCBOYW1lLmdldCgiU3RhbXAiKSk7CiAgICBzdGFtcC5zZXQob2xkQW5ub3RhdGlvbiA/ICJNIiA6ICJDcmVhdGlvbkRhdGUiLCBgRDoke2dldE1vZGlmaWNhdGlvbkRhdGUoKX1gKTsKICAgIHN0YW1wLnNldCgiUmVjdCIsIHJlY3QpOwogICAgc3RhbXAuc2V0KCJGIiwgNCk7CiAgICBzdGFtcC5zZXQoIkJvcmRlciIsIFswLCAwLCAwXSk7CiAgICBzdGFtcC5zZXQoIlJvdGF0ZSIsIHJvdGF0aW9uKTsKICAgIGlmICh1c2VyKSB7CiAgICAgIHN0YW1wLnNldCgiVCIsIHN0cmluZ1RvQXNjaWlPclVURjE2QkUodXNlcikpOwogICAgfQogICAgaWYgKGFwUmVmIHx8IGFwKSB7CiAgICAgIGNvbnN0IG4gPSBuZXcgRGljdCh4cmVmKTsKICAgICAgc3RhbXAuc2V0KCJBUCIsIG4pOwogICAgICBpZiAoYXBSZWYpIHsKICAgICAgICBuLnNldCgiTiIsIGFwUmVmKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBuLnNldCgiTiIsIGFwKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHN0YW1wOwogIH0KICBzdGF0aWMgYXN5bmMgI2NyZWF0ZU5ld0FwcGVhcmFuY2VTdHJlYW1Gb3JEcmF3aW5nKGFubm90YXRpb24sIHhyZWYpIHsKICAgIGNvbnN0IHsKICAgICAgYXJlQ29udG91cnMsCiAgICAgIGNvbG9yLAogICAgICByZWN0LAogICAgICBsaW5lcywKICAgICAgdGhpY2tuZXNzCiAgICB9ID0gYW5ub3RhdGlvbjsKICAgIGNvbnN0IGFwcGVhcmFuY2VCdWZmZXIgPSBbYCR7dGhpY2tuZXNzfSB3IDEgSiAxIGpgLCBgJHtnZXRQZGZDb2xvcihjb2xvciwgYXJlQ29udG91cnMpfWBdOwogICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7CiAgICAgIGFwcGVhcmFuY2VCdWZmZXIucHVzaChgJHtudW1iZXJUb1N0cmluZyhsaW5lWzRdKX0gJHtudW1iZXJUb1N0cmluZyhsaW5lWzVdKX0gbWApOwogICAgICBmb3IgKGxldCBpID0gNiwgaWkgPSBsaW5lLmxlbmd0aDsgaSA8IGlpOyBpICs9IDYpIHsKICAgICAgICBpZiAoaXNOYU4obGluZVtpXSkpIHsKICAgICAgICAgIGFwcGVhcmFuY2VCdWZmZXIucHVzaChgJHtudW1iZXJUb1N0cmluZyhsaW5lW2kgKyA0XSl9ICR7bnVtYmVyVG9TdHJpbmcobGluZVtpICsgNV0pfSBsYCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IFtjMXgsIGMxeSwgYzJ4LCBjMnksIHgsIHldID0gbGluZS5zbGljZShpLCBpICsgNik7CiAgICAgICAgICBhcHBlYXJhbmNlQnVmZmVyLnB1c2goW2MxeCwgYzF5LCBjMngsIGMyeSwgeCwgeV0ubWFwKG51bWJlclRvU3RyaW5nKS5qb2luKCIgIikgKyAiIGMiKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGxpbmUubGVuZ3RoID09PSA2KSB7CiAgICAgICAgYXBwZWFyYW5jZUJ1ZmZlci5wdXNoKGAke251bWJlclRvU3RyaW5nKGxpbmVbNF0pfSAke251bWJlclRvU3RyaW5nKGxpbmVbNV0pfSBsYCk7CiAgICAgIH0KICAgIH0KICAgIGFwcGVhcmFuY2VCdWZmZXIucHVzaChhcmVDb250b3VycyA/ICJGIiA6ICJTIik7CiAgICBjb25zdCBhcHBlYXJhbmNlID0gYXBwZWFyYW5jZUJ1ZmZlci5qb2luKCJcbiIpOwogICAgY29uc3QgYXBwZWFyYW5jZVN0cmVhbURpY3QgPSBuZXcgRGljdCh4cmVmKTsKICAgIGFwcGVhcmFuY2VTdHJlYW1EaWN0LnNldCgiRm9ybVR5cGUiLCAxKTsKICAgIGFwcGVhcmFuY2VTdHJlYW1EaWN0LnNldCgiU3VidHlwZSIsIE5hbWUuZ2V0KCJGb3JtIikpOwogICAgYXBwZWFyYW5jZVN0cmVhbURpY3Quc2V0KCJUeXBlIiwgTmFtZS5nZXQoIlhPYmplY3QiKSk7CiAgICBhcHBlYXJhbmNlU3RyZWFtRGljdC5zZXQoIkJCb3giLCByZWN0KTsKICAgIGFwcGVhcmFuY2VTdHJlYW1EaWN0LnNldCgiTGVuZ3RoIiwgYXBwZWFyYW5jZS5sZW5ndGgpOwogICAgY29uc3QgYXAgPSBuZXcgU3RyaW5nU3RyZWFtKGFwcGVhcmFuY2UpOwogICAgYXAuZGljdCA9IGFwcGVhcmFuY2VTdHJlYW1EaWN0OwogICAgcmV0dXJuIGFwOwogIH0KICBzdGF0aWMgYXN5bmMgY3JlYXRlTmV3QXBwZWFyYW5jZVN0cmVhbShhbm5vdGF0aW9uLCB4cmVmLCBwYXJhbXMpIHsKICAgIGlmIChhbm5vdGF0aW9uLm9sZEFubm90YXRpb24pIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBpZiAoYW5ub3RhdGlvbi5pc1NpZ25hdHVyZSkgewogICAgICByZXR1cm4gdGhpcy4jY3JlYXRlTmV3QXBwZWFyYW5jZVN0cmVhbUZvckRyYXdpbmcoYW5ub3RhdGlvbiwgeHJlZik7CiAgICB9CiAgICBjb25zdCB7CiAgICAgIHJvdGF0aW9uCiAgICB9ID0gYW5ub3RhdGlvbjsKICAgIGNvbnN0IHsKICAgICAgaW1hZ2VSZWYsCiAgICAgIHdpZHRoLAogICAgICBoZWlnaHQKICAgIH0gPSBwYXJhbXMuaW1hZ2U7CiAgICBjb25zdCByZXNvdXJjZXMgPSBuZXcgRGljdCh4cmVmKTsKICAgIGNvbnN0IHhvYmplY3QgPSBuZXcgRGljdCh4cmVmKTsKICAgIHJlc291cmNlcy5zZXQoIlhPYmplY3QiLCB4b2JqZWN0KTsKICAgIHhvYmplY3Quc2V0KCJJbTAiLCBpbWFnZVJlZik7CiAgICBjb25zdCBhcHBlYXJhbmNlID0gYHEgJHt3aWR0aH0gMCAwICR7aGVpZ2h0fSAwIDAgY20gL0ltMCBEbyBRYDsKICAgIGNvbnN0IGFwcGVhcmFuY2VTdHJlYW1EaWN0ID0gbmV3IERpY3QoeHJlZik7CiAgICBhcHBlYXJhbmNlU3RyZWFtRGljdC5zZXQoIkZvcm1UeXBlIiwgMSk7CiAgICBhcHBlYXJhbmNlU3RyZWFtRGljdC5zZXQoIlN1YnR5cGUiLCBOYW1lLmdldCgiRm9ybSIpKTsKICAgIGFwcGVhcmFuY2VTdHJlYW1EaWN0LnNldCgiVHlwZSIsIE5hbWUuZ2V0KCJYT2JqZWN0IikpOwogICAgYXBwZWFyYW5jZVN0cmVhbURpY3Quc2V0KCJCQm94IiwgWzAsIDAsIHdpZHRoLCBoZWlnaHRdKTsKICAgIGFwcGVhcmFuY2VTdHJlYW1EaWN0LnNldCgiUmVzb3VyY2VzIiwgcmVzb3VyY2VzKTsKICAgIGlmIChyb3RhdGlvbikgewogICAgICBjb25zdCBtYXRyaXggPSBnZXRSb3RhdGlvbk1hdHJpeChyb3RhdGlvbiwgd2lkdGgsIGhlaWdodCk7CiAgICAgIGFwcGVhcmFuY2VTdHJlYW1EaWN0LnNldCgiTWF0cml4IiwgbWF0cml4KTsKICAgIH0KICAgIGNvbnN0IGFwID0gbmV3IFN0cmluZ1N0cmVhbShhcHBlYXJhbmNlKTsKICAgIGFwLmRpY3QgPSBhcHBlYXJhbmNlU3RyZWFtRGljdDsKICAgIHJldHVybiBhcDsKICB9Cn0KY2xhc3MgRmlsZUF0dGFjaG1lbnRBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbiB7CiAgY29uc3RydWN0b3IocGFyYW1zKSB7CiAgICBzdXBlcihwYXJhbXMpOwogICAgY29uc3QgewogICAgICBkaWN0LAogICAgICB4cmVmCiAgICB9ID0gcGFyYW1zOwogICAgY29uc3QgZmlsZSA9IG5ldyBGaWxlU3BlYyhkaWN0LmdldCgiRlMiKSwgeHJlZik7CiAgICB0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGUgPSBBbm5vdGF0aW9uVHlwZS5GSUxFQVRUQUNITUVOVDsKICAgIHRoaXMuZGF0YS5oYXNPd25DYW52YXMgPSB0aGlzLmRhdGEubm9Sb3RhdGU7CiAgICB0aGlzLmRhdGEubm9IVE1MID0gZmFsc2U7CiAgICB0aGlzLmRhdGEuZmlsZSA9IGZpbGUuc2VyaWFsaXphYmxlOwogICAgY29uc3QgbmFtZSA9IGRpY3QuZ2V0KCJOYW1lIik7CiAgICB0aGlzLmRhdGEubmFtZSA9IG5hbWUgaW5zdGFuY2VvZiBOYW1lID8gc3RyaW5nVG9QREZTdHJpbmcobmFtZS5uYW1lKSA6ICJQdXNoUGluIjsKICAgIGNvbnN0IGZpbGxBbHBoYSA9IGRpY3QuZ2V0KCJjYSIpOwogICAgdGhpcy5kYXRhLmZpbGxBbHBoYSA9IHR5cGVvZiBmaWxsQWxwaGEgPT09ICJudW1iZXIiICYmIGZpbGxBbHBoYSA+PSAwICYmIGZpbGxBbHBoYSA8PSAxID8gZmlsbEFscGhhIDogbnVsbDsKICB9Cn0KCjsvLyAuL3NyYy9jb3JlL2NhbGN1bGF0ZV9tZDUuanMKCmNvbnN0IFBBUkFNUyA9IHsKICBnZXQgcigpIHsKICAgIHJldHVybiBzaGFkb3codGhpcywgInIiLCBuZXcgVWludDhBcnJheShbNywgMTIsIDE3LCAyMiwgNywgMTIsIDE3LCAyMiwgNywgMTIsIDE3LCAyMiwgNywgMTIsIDE3LCAyMiwgNSwgOSwgMTQsIDIwLCA1LCA5LCAxNCwgMjAsIDUsIDksIDE0LCAyMCwgNSwgOSwgMTQsIDIwLCA0LCAxMSwgMTYsIDIzLCA0LCAxMSwgMTYsIDIzLCA0LCAxMSwgMTYsIDIzLCA0LCAxMSwgMTYsIDIzLCA2LCAxMCwgMTUsIDIxLCA2LCAxMCwgMTUsIDIxLCA2LCAxMCwgMTUsIDIxLCA2LCAxMCwgMTUsIDIxXSkpOwogIH0sCiAgZ2V0IGsoKSB7CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJrIiwgbmV3IEludDMyQXJyYXkoWy02ODA4NzY5MzYsIC0zODk1NjQ1ODYsIDYwNjEwNTgxOSwgLTEwNDQ1MjUzMzAsIC0xNzY0MTg4OTcsIDEyMDAwODA0MjYsIC0xNDczMjMxMzQxLCAtNDU3MDU5ODMsIDE3NzAwMzU0MTYsIC0xOTU4NDE0NDE3LCAtNDIwNjMsIC0xOTkwNDA0MTYyLCAxODA0NjAzNjgyLCAtNDAzNDExMDEsIC0xNTAyMDAyMjkwLCAxMjM2NTM1MzI5LCAtMTY1Nzk2NTEwLCAtMTA2OTUwMTYzMiwgNjQzNzE3NzEzLCAtMzczODk3MzAyLCAtNzAxNTU4NjkxLCAzODAxNjA4MywgLTY2MDQ3ODMzNSwgLTQwNTUzNzg0OCwgNTY4NDQ2NDM4LCAtMTAxOTgwMzY5MCwgLTE4NzM2Mzk2MSwgMTE2MzUzMTUwMSwgLTE0NDQ2ODE0NjcsIC01MTQwMzc4NCwgMTczNTMyODQ3MywgLTE5MjY2MDc3MzQsIC0zNzg1NTgsIC0yMDIyNTc0NDYzLCAxODM5MDMwNTYyLCAtMzUzMDk1NTYsIC0xNTMwOTkyMDYwLCAxMjcyODkzMzUzLCAtMTU1NDk3NjMyLCAtMTA5NDczMDY0MCwgNjgxMjc5MTc0LCAtMzU4NTM3MjIyLCAtNzIyNTIxOTc5LCA3NjAyOTE4OSwgLTY0MDM2NDQ4NywgLTQyMTgxNTgzNSwgNTMwNzQyNTIwLCAtOTk1MzM4NjUxLCAtMTk4NjMwODQ0LCAxMTI2ODkxNDE1LCAtMTQxNjM1NDkwNSwgLTU3NDM0MDU1LCAxNzAwNDg1NTcxLCAtMTg5NDk4NjYwNiwgLTEwNTE1MjMsIC0yMDU0OTIyNzk5LCAxODczMzEzMzU5LCAtMzA2MTE3NDQsIC0xNTYwMTk4MzgwLCAxMzA5MTUxNjQ5LCAtMTQ1NTIzMDcwLCAtMTEyMDIxMDM3OSwgNzE4Nzg3MjU5LCAtMzQzNDg1NTUxXSkpOwogIH0KfTsKZnVuY3Rpb24gY2FsY3VsYXRlTUQ1KGRhdGEsIG9mZnNldCwgbGVuZ3RoKSB7CiAgbGV0IGgwID0gMTczMjU4NDE5MywKICAgIGgxID0gLTI3MTczMzg3OSwKICAgIGgyID0gLTE3MzI1ODQxOTQsCiAgICBoMyA9IDI3MTczMzg3ODsKICBjb25zdCBwYWRkZWRMZW5ndGggPSBsZW5ndGggKyA3MiAmIH42MzsKICBjb25zdCBwYWRkZWQgPSBuZXcgVWludDhBcnJheShwYWRkZWRMZW5ndGgpOwogIGxldCBpLCBqOwogIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgcGFkZGVkW2ldID0gZGF0YVtvZmZzZXQrK107CiAgfQogIHBhZGRlZFtpKytdID0gMHg4MDsKICBjb25zdCBuID0gcGFkZGVkTGVuZ3RoIC0gODsKICBpZiAoaSA8IG4pIHsKICAgIGkgPSBuOwogIH0KICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA8PCAzICYgMHhmZjsKICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA+PiA1ICYgMHhmZjsKICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA+PiAxMyAmIDB4ZmY7CiAgcGFkZGVkW2krK10gPSBsZW5ndGggPj4gMjEgJiAweGZmOwogIHBhZGRlZFtpKytdID0gbGVuZ3RoID4+PiAyOSAmIDB4ZmY7CiAgaSArPSAzOwogIGNvbnN0IHcgPSBuZXcgSW50MzJBcnJheSgxNik7CiAgY29uc3QgewogICAgaywKICAgIHIKICB9ID0gUEFSQU1TOwogIGZvciAoaSA9IDA7IGkgPCBwYWRkZWRMZW5ndGg7KSB7CiAgICBmb3IgKGogPSAwOyBqIDwgMTY7ICsraiwgaSArPSA0KSB7CiAgICAgIHdbal0gPSBwYWRkZWRbaV0gfCBwYWRkZWRbaSArIDFdIDw8IDggfCBwYWRkZWRbaSArIDJdIDw8IDE2IHwgcGFkZGVkW2kgKyAzXSA8PCAyNDsKICAgIH0KICAgIGxldCBhID0gaDAsCiAgICAgIGIgPSBoMSwKICAgICAgYyA9IGgyLAogICAgICBkID0gaDMsCiAgICAgIGYsCiAgICAgIGc7CiAgICBmb3IgKGogPSAwOyBqIDwgNjQ7ICsraikgewogICAgICBpZiAoaiA8IDE2KSB7CiAgICAgICAgZiA9IGIgJiBjIHwgfmIgJiBkOwogICAgICAgIGcgPSBqOwogICAgICB9IGVsc2UgaWYgKGogPCAzMikgewogICAgICAgIGYgPSBkICYgYiB8IH5kICYgYzsKICAgICAgICBnID0gNSAqIGogKyAxICYgMTU7CiAgICAgIH0gZWxzZSBpZiAoaiA8IDQ4KSB7CiAgICAgICAgZiA9IGIgXiBjIF4gZDsKICAgICAgICBnID0gMyAqIGogKyA1ICYgMTU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZiA9IGMgXiAoYiB8IH5kKTsKICAgICAgICBnID0gNyAqIGogJiAxNTsKICAgICAgfQogICAgICBjb25zdCB0bXAgPSBkLAogICAgICAgIHJvdGF0ZUFyZyA9IGEgKyBmICsga1tqXSArIHdbZ10gfCAwLAogICAgICAgIHJvdGF0ZSA9IHJbal07CiAgICAgIGQgPSBjOwogICAgICBjID0gYjsKICAgICAgYiA9IGIgKyAocm90YXRlQXJnIDw8IHJvdGF0ZSB8IHJvdGF0ZUFyZyA+Pj4gMzIgLSByb3RhdGUpIHwgMDsKICAgICAgYSA9IHRtcDsKICAgIH0KICAgIGgwID0gaDAgKyBhIHwgMDsKICAgIGgxID0gaDEgKyBiIHwgMDsKICAgIGgyID0gaDIgKyBjIHwgMDsKICAgIGgzID0gaDMgKyBkIHwgMDsKICB9CiAgcmV0dXJuIG5ldyBVaW50OEFycmF5KFtoMCAmIDB4RkYsIGgwID4+IDggJiAweEZGLCBoMCA+PiAxNiAmIDB4RkYsIGgwID4+PiAyNCAmIDB4RkYsIGgxICYgMHhGRiwgaDEgPj4gOCAmIDB4RkYsIGgxID4+IDE2ICYgMHhGRiwgaDEgPj4+IDI0ICYgMHhGRiwgaDIgJiAweEZGLCBoMiA+PiA4ICYgMHhGRiwgaDIgPj4gMTYgJiAweEZGLCBoMiA+Pj4gMjQgJiAweEZGLCBoMyAmIDB4RkYsIGgzID4+IDggJiAweEZGLCBoMyA+PiAxNiAmIDB4RkYsIGgzID4+PiAyNCAmIDB4RkZdKTsKfQoKOy8vIC4vc3JjL2NvcmUvZGF0YXNldF9yZWFkZXIuanMKCgoKZnVuY3Rpb24gZGVjb2RlU3RyaW5nKHN0cikgewogIHRyeSB7CiAgICByZXR1cm4gc3RyaW5nVG9VVEY4U3RyaW5nKHN0cik7CiAgfSBjYXRjaCAoZXgpIHsKICAgIHdhcm4oYFVURi04IGRlY29kaW5nIGZhaWxlZDogIiR7ZXh9Ii5gKTsKICAgIHJldHVybiBzdHI7CiAgfQp9CmNsYXNzIERhdGFzZXRYTUxQYXJzZXIgZXh0ZW5kcyBTaW1wbGVYTUxQYXJzZXIgewogIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHsKICAgIHN1cGVyKG9wdGlvbnMpOwogICAgdGhpcy5ub2RlID0gbnVsbDsKICB9CiAgb25FbmRFbGVtZW50KG5hbWUpIHsKICAgIGNvbnN0IG5vZGUgPSBzdXBlci5vbkVuZEVsZW1lbnQobmFtZSk7CiAgICBpZiAobm9kZSAmJiBuYW1lID09PSAieGZhOmRhdGFzZXRzIikgewogICAgICB0aGlzLm5vZGUgPSBub2RlOwogICAgICB0aHJvdyBuZXcgRXJyb3IoIkFib3J0aW5nIERhdGFzZXRYTUxQYXJzZXIuIik7CiAgICB9CiAgfQp9CmNsYXNzIERhdGFzZXRSZWFkZXIgewogIGNvbnN0cnVjdG9yKGRhdGEpIHsKICAgIGlmIChkYXRhLmRhdGFzZXRzKSB7CiAgICAgIHRoaXMubm9kZSA9IG5ldyBTaW1wbGVYTUxQYXJzZXIoewogICAgICAgIGhhc0F0dHJpYnV0ZXM6IHRydWUKICAgICAgfSkucGFyc2VGcm9tU3RyaW5nKGRhdGEuZGF0YXNldHMpLmRvY3VtZW50RWxlbWVudDsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0IHBhcnNlciA9IG5ldyBEYXRhc2V0WE1MUGFyc2VyKHsKICAgICAgICBoYXNBdHRyaWJ1dGVzOiB0cnVlCiAgICAgIH0pOwogICAgICB0cnkgewogICAgICAgIHBhcnNlci5wYXJzZUZyb21TdHJpbmcoZGF0YVsieGRwOnhkcCJdKTsKICAgICAgfSBjYXRjaCB7fQogICAgICB0aGlzLm5vZGUgPSBwYXJzZXIubm9kZTsKICAgIH0KICB9CiAgZ2V0VmFsdWUocGF0aCkgewogICAgaWYgKCF0aGlzLm5vZGUgfHwgIXBhdGgpIHsKICAgICAgcmV0dXJuICIiOwogICAgfQogICAgY29uc3Qgbm9kZSA9IHRoaXMubm9kZS5zZWFyY2hOb2RlKHBhcnNlWEZBUGF0aChwYXRoKSwgMCk7CiAgICBpZiAoIW5vZGUpIHsKICAgICAgcmV0dXJuICIiOwogICAgfQogICAgY29uc3QgZmlyc3QgPSBub2RlLmZpcnN0Q2hpbGQ7CiAgICBpZiAoZmlyc3Q/Lm5vZGVOYW1lID09PSAidmFsdWUiKSB7CiAgICAgIHJldHVybiBub2RlLmNoaWxkcmVuLm1hcChjaGlsZCA9PiBkZWNvZGVTdHJpbmcoY2hpbGQudGV4dENvbnRlbnQpKTsKICAgIH0KICAgIHJldHVybiBkZWNvZGVTdHJpbmcobm9kZS50ZXh0Q29udGVudCk7CiAgfQp9Cgo7Ly8gLi9zcmMvY29yZS9jYWxjdWxhdGVfc2hhX290aGVyLmpzCgpjbGFzcyBXb3JkNjQgewogIGNvbnN0cnVjdG9yKGhpZ2hJbnRlZ2VyLCBsb3dJbnRlZ2VyKSB7CiAgICB0aGlzLmhpZ2ggPSBoaWdoSW50ZWdlciB8IDA7CiAgICB0aGlzLmxvdyA9IGxvd0ludGVnZXIgfCAwOwogIH0KICBhbmQod29yZCkgewogICAgdGhpcy5oaWdoICY9IHdvcmQuaGlnaDsKICAgIHRoaXMubG93ICY9IHdvcmQubG93OwogIH0KICB4b3Iod29yZCkgewogICAgdGhpcy5oaWdoIF49IHdvcmQuaGlnaDsKICAgIHRoaXMubG93IF49IHdvcmQubG93OwogIH0KICBzaGlmdFJpZ2h0KHBsYWNlcykgewogICAgaWYgKHBsYWNlcyA+PSAzMikgewogICAgICB0aGlzLmxvdyA9IHRoaXMuaGlnaCA+Pj4gcGxhY2VzIC0gMzIgfCAwOwogICAgICB0aGlzLmhpZ2ggPSAwOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5sb3cgPSB0aGlzLmxvdyA+Pj4gcGxhY2VzIHwgdGhpcy5oaWdoIDw8IDMyIC0gcGxhY2VzOwogICAgICB0aGlzLmhpZ2ggPSB0aGlzLmhpZ2ggPj4+IHBsYWNlcyB8IDA7CiAgICB9CiAgfQogIHJvdGF0ZVJpZ2h0KHBsYWNlcykgewogICAgbGV0IGxvdywgaGlnaDsKICAgIGlmIChwbGFjZXMgJiAzMikgewogICAgICBoaWdoID0gdGhpcy5sb3c7CiAgICAgIGxvdyA9IHRoaXMuaGlnaDsKICAgIH0gZWxzZSB7CiAgICAgIGxvdyA9IHRoaXMubG93OwogICAgICBoaWdoID0gdGhpcy5oaWdoOwogICAgfQogICAgcGxhY2VzICY9IDMxOwogICAgdGhpcy5sb3cgPSBsb3cgPj4+IHBsYWNlcyB8IGhpZ2ggPDwgMzIgLSBwbGFjZXM7CiAgICB0aGlzLmhpZ2ggPSBoaWdoID4+PiBwbGFjZXMgfCBsb3cgPDwgMzIgLSBwbGFjZXM7CiAgfQogIG5vdCgpIHsKICAgIHRoaXMuaGlnaCA9IH50aGlzLmhpZ2g7CiAgICB0aGlzLmxvdyA9IH50aGlzLmxvdzsKICB9CiAgYWRkKHdvcmQpIHsKICAgIGNvbnN0IGxvd0FkZCA9ICh0aGlzLmxvdyA+Pj4gMCkgKyAod29yZC5sb3cgPj4+IDApOwogICAgbGV0IGhpZ2hBZGQgPSAodGhpcy5oaWdoID4+PiAwKSArICh3b3JkLmhpZ2ggPj4+IDApOwogICAgaWYgKGxvd0FkZCA+IDB4ZmZmZmZmZmYpIHsKICAgICAgaGlnaEFkZCArPSAxOwogICAgfQogICAgdGhpcy5sb3cgPSBsb3dBZGQgfCAwOwogICAgdGhpcy5oaWdoID0gaGlnaEFkZCB8IDA7CiAgfQogIGNvcHlUbyhieXRlcywgb2Zmc2V0KSB7CiAgICBieXRlc1tvZmZzZXRdID0gdGhpcy5oaWdoID4+PiAyNCAmIDB4ZmY7CiAgICBieXRlc1tvZmZzZXQgKyAxXSA9IHRoaXMuaGlnaCA+PiAxNiAmIDB4ZmY7CiAgICBieXRlc1tvZmZzZXQgKyAyXSA9IHRoaXMuaGlnaCA+PiA4ICYgMHhmZjsKICAgIGJ5dGVzW29mZnNldCArIDNdID0gdGhpcy5oaWdoICYgMHhmZjsKICAgIGJ5dGVzW29mZnNldCArIDRdID0gdGhpcy5sb3cgPj4+IDI0ICYgMHhmZjsKICAgIGJ5dGVzW29mZnNldCArIDVdID0gdGhpcy5sb3cgPj4gMTYgJiAweGZmOwogICAgYnl0ZXNbb2Zmc2V0ICsgNl0gPSB0aGlzLmxvdyA+PiA4ICYgMHhmZjsKICAgIGJ5dGVzW29mZnNldCArIDddID0gdGhpcy5sb3cgJiAweGZmOwogIH0KICBhc3NpZ24od29yZCkgewogICAgdGhpcy5oaWdoID0gd29yZC5oaWdoOwogICAgdGhpcy5sb3cgPSB3b3JkLmxvdzsKICB9Cn0KY29uc3QgY2FsY3VsYXRlX3NoYV9vdGhlcl9QQVJBTVMgPSB7CiAgZ2V0IGsoKSB7CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJrIiwgW25ldyBXb3JkNjQoMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiksIG5ldyBXb3JkNjQoMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCksIG5ldyBXb3JkNjQoMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiksIG5ldyBXb3JkNjQoMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyksIG5ldyBXb3JkNjQoMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCksIG5ldyBXb3JkNjQoMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSksIG5ldyBXb3JkNjQoMHg5MjNmODJhNCwgMHhhZjE5NGY5YiksIG5ldyBXb3JkNjQoMHhhYjFjNWVkNSwgMHhkYTZkODExOCksIG5ldyBXb3JkNjQoMHhkODA3YWE5OCwgMHhhMzAzMDI0MiksIG5ldyBXb3JkNjQoMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSksIG5ldyBXb3JkNjQoMHgyNDMxODViZSwgMHg0ZWU0YjI4YyksIG5ldyBXb3JkNjQoMHg1NTBjN2RjMywgMHhkNWZmYjRlMiksIG5ldyBXb3JkNjQoMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiksIG5ldyBXb3JkNjQoMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSksIG5ldyBXb3JkNjQoMHg5YmRjMDZhNywgMHgyNWM3MTIzNSksIG5ldyBXb3JkNjQoMHhjMTliZjE3NCwgMHhjZjY5MjY5NCksIG5ldyBXb3JkNjQoMHhlNDliNjljMSwgMHg5ZWYxNGFkMiksIG5ldyBXb3JkNjQoMHhlZmJlNDc4NiwgMHgzODRmMjVlMyksIG5ldyBXb3JkNjQoMHgwZmMxOWRjNiwgMHg4YjhjZDViNSksIG5ldyBXb3JkNjQoMHgyNDBjYTFjYywgMHg3N2FjOWM2NSksIG5ldyBXb3JkNjQoMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSksIG5ldyBXb3JkNjQoMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyksIG5ldyBXb3JkNjQoMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCksIG5ldyBXb3JkNjQoMHg3NmY5ODhkYSwgMHg4MzExNTNiNSksIG5ldyBXb3JkNjQoMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiksIG5ldyBXb3JkNjQoMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCksIG5ldyBXb3JkNjQoMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiksIG5ldyBXb3JkNjQoMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCksIG5ldyBXb3JkNjQoMHhjNmUwMGJmMywgMHgzZGE4OGZjMiksIG5ldyBXb3JkNjQoMHhkNWE3OTE0NywgMHg5MzBhYTcyNSksIG5ldyBXb3JkNjQoMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiksIG5ldyBXb3JkNjQoMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCksIG5ldyBXb3JkNjQoMHgyN2I3MGE4NSwgMHg0NmQyMmZmYyksIG5ldyBXb3JkNjQoMHgyZTFiMjEzOCwgMHg1YzI2YzkyNiksIG5ldyBXb3JkNjQoMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCksIG5ldyBXb3JkNjQoMHg1MzM4MGQxMywgMHg5ZDk1YjNkZiksIG5ldyBXb3JkNjQoMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSksIG5ldyBXb3JkNjQoMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCksIG5ldyBXb3JkNjQoMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiksIG5ldyBXb3JkNjQoMHg5MjcyMmM4NSwgMHgxNDgyMzUzYiksIG5ldyBXb3JkNjQoMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCksIG5ldyBXb3JkNjQoMHhhODFhNjY0YiwgMHhiYzQyMzAwMSksIG5ldyBXb3JkNjQoMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSksIG5ldyBXb3JkNjQoMHhjNzZjNTFhMywgMHgwNjU0YmUzMCksIG5ldyBXb3JkNjQoMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCksIG5ldyBXb3JkNjQoMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCksIG5ldyBXb3JkNjQoMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSksIG5ldyBXb3JkNjQoMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCksIG5ldyBXb3JkNjQoMHgxOWE0YzExNiwgMHhiOGQyZDBjOCksIG5ldyBXb3JkNjQoMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyksIG5ldyBXb3JkNjQoMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSksIG5ldyBXb3JkNjQoMHgzNGIwYmNiNSwgMHhlMTliNDhhOCksIG5ldyBXb3JkNjQoMHgzOTFjMGNiMywgMHhjNWM5NWE2MyksIG5ldyBXb3JkNjQoMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYiksIG5ldyBXb3JkNjQoMHg1YjljY2E0ZiwgMHg3NzYzZTM3MyksIG5ldyBXb3JkNjQoMHg2ODJlNmZmMywgMHhkNmIyYjhhMyksIG5ldyBXb3JkNjQoMHg3NDhmODJlZSwgMHg1ZGVmYjJmYyksIG5ldyBXb3JkNjQoMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCksIG5ldyBXb3JkNjQoMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiksIG5ldyBXb3JkNjQoMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyksIG5ldyBXb3JkNjQoMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCksIG5ldyBXb3JkNjQoMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSksIG5ldyBXb3JkNjQoMHhiZWY5YTNmNywgMHhiMmM2NzkxNSksIG5ldyBXb3JkNjQoMHhjNjcxNzhmMiwgMHhlMzcyNTMyYiksIG5ldyBXb3JkNjQoMHhjYTI3M2VjZSwgMHhlYTI2NjE5YyksIG5ldyBXb3JkNjQoMHhkMTg2YjhjNywgMHgyMWMwYzIwNyksIG5ldyBXb3JkNjQoMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSksIG5ldyBXb3JkNjQoMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCksIG5ldyBXb3JkNjQoMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSksIG5ldyBXb3JkNjQoMHgwYTYzN2RjNSwgMHhhMmM4OThhNiksIG5ldyBXb3JkNjQoMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSksIG5ldyBXb3JkNjQoMHgxYjcxMGIzNSwgMHgxMzFjNDcxYiksIG5ldyBXb3JkNjQoMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCksIG5ldyBXb3JkNjQoMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyksIG5ldyBXb3JkNjQoMHgzYzllYmUwYSwgMHgxNWM5YmViYyksIG5ldyBXb3JkNjQoMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyksIG5ldyBXb3JkNjQoMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiksIG5ldyBXb3JkNjQoMHg1OTdmMjk5YywgMHhmYzY1N2UyYSksIG5ldyBXb3JkNjQoMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYyksIG5ldyBXb3JkNjQoMHg2YzQ0MTk4YywgMHg0YTQ3NTgxNyldKTsKICB9Cn07CmZ1bmN0aW9uIGNoKHJlc3VsdCwgeCwgeSwgeiwgdG1wKSB7CiAgcmVzdWx0LmFzc2lnbih4KTsKICByZXN1bHQuYW5kKHkpOwogIHRtcC5hc3NpZ24oeCk7CiAgdG1wLm5vdCgpOwogIHRtcC5hbmQoeik7CiAgcmVzdWx0Lnhvcih0bXApOwp9CmZ1bmN0aW9uIG1haihyZXN1bHQsIHgsIHksIHosIHRtcCkgewogIHJlc3VsdC5hc3NpZ24oeCk7CiAgcmVzdWx0LmFuZCh5KTsKICB0bXAuYXNzaWduKHgpOwogIHRtcC5hbmQoeik7CiAgcmVzdWx0Lnhvcih0bXApOwogIHRtcC5hc3NpZ24oeSk7CiAgdG1wLmFuZCh6KTsKICByZXN1bHQueG9yKHRtcCk7Cn0KZnVuY3Rpb24gc2lnbWEocmVzdWx0LCB4LCB0bXApIHsKICByZXN1bHQuYXNzaWduKHgpOwogIHJlc3VsdC5yb3RhdGVSaWdodCgyOCk7CiAgdG1wLmFzc2lnbih4KTsKICB0bXAucm90YXRlUmlnaHQoMzQpOwogIHJlc3VsdC54b3IodG1wKTsKICB0bXAuYXNzaWduKHgpOwogIHRtcC5yb3RhdGVSaWdodCgzOSk7CiAgcmVzdWx0Lnhvcih0bXApOwp9CmZ1bmN0aW9uIHNpZ21hUHJpbWUocmVzdWx0LCB4LCB0bXApIHsKICByZXN1bHQuYXNzaWduKHgpOwogIHJlc3VsdC5yb3RhdGVSaWdodCgxNCk7CiAgdG1wLmFzc2lnbih4KTsKICB0bXAucm90YXRlUmlnaHQoMTgpOwogIHJlc3VsdC54b3IodG1wKTsKICB0bXAuYXNzaWduKHgpOwogIHRtcC5yb3RhdGVSaWdodCg0MSk7CiAgcmVzdWx0Lnhvcih0bXApOwp9CmZ1bmN0aW9uIGxpdHRsZVNpZ21hKHJlc3VsdCwgeCwgdG1wKSB7CiAgcmVzdWx0LmFzc2lnbih4KTsKICByZXN1bHQucm90YXRlUmlnaHQoMSk7CiAgdG1wLmFzc2lnbih4KTsKICB0bXAucm90YXRlUmlnaHQoOCk7CiAgcmVzdWx0Lnhvcih0bXApOwogIHRtcC5hc3NpZ24oeCk7CiAgdG1wLnNoaWZ0UmlnaHQoNyk7CiAgcmVzdWx0Lnhvcih0bXApOwp9CmZ1bmN0aW9uIGxpdHRsZVNpZ21hUHJpbWUocmVzdWx0LCB4LCB0bXApIHsKICByZXN1bHQuYXNzaWduKHgpOwogIHJlc3VsdC5yb3RhdGVSaWdodCgxOSk7CiAgdG1wLmFzc2lnbih4KTsKICB0bXAucm90YXRlUmlnaHQoNjEpOwogIHJlc3VsdC54b3IodG1wKTsKICB0bXAuYXNzaWduKHgpOwogIHRtcC5zaGlmdFJpZ2h0KDYpOwogIHJlc3VsdC54b3IodG1wKTsKfQpmdW5jdGlvbiBjYWxjdWxhdGVTSEE1MTIoZGF0YSwgb2Zmc2V0LCBsZW5ndGgsIG1vZGUzODQgPSBmYWxzZSkgewogIGxldCBoMCwgaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgaDc7CiAgaWYgKCFtb2RlMzg0KSB7CiAgICBoMCA9IG5ldyBXb3JkNjQoMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCk7CiAgICBoMSA9IG5ldyBXb3JkNjQoMHhiYjY3YWU4NSwgMHg4NGNhYTczYik7CiAgICBoMiA9IG5ldyBXb3JkNjQoMHgzYzZlZjM3MiwgMHhmZTk0ZjgyYik7CiAgICBoMyA9IG5ldyBXb3JkNjQoMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSk7CiAgICBoNCA9IG5ldyBXb3JkNjQoMHg1MTBlNTI3ZiwgMHhhZGU2ODJkMSk7CiAgICBoNSA9IG5ldyBXb3JkNjQoMHg5YjA1Njg4YywgMHgyYjNlNmMxZik7CiAgICBoNiA9IG5ldyBXb3JkNjQoMHgxZjgzZDlhYiwgMHhmYjQxYmQ2Yik7CiAgICBoNyA9IG5ldyBXb3JkNjQoMHg1YmUwY2QxOSwgMHgxMzdlMjE3OSk7CiAgfSBlbHNlIHsKICAgIGgwID0gbmV3IFdvcmQ2NCgweGNiYmI5ZDVkLCAweGMxMDU5ZWQ4KTsKICAgIGgxID0gbmV3IFdvcmQ2NCgweDYyOWEyOTJhLCAweDM2N2NkNTA3KTsKICAgIGgyID0gbmV3IFdvcmQ2NCgweDkxNTkwMTVhLCAweDMwNzBkZDE3KTsKICAgIGgzID0gbmV3IFdvcmQ2NCgweDE1MmZlY2Q4LCAweGY3MGU1OTM5KTsKICAgIGg0ID0gbmV3IFdvcmQ2NCgweDY3MzMyNjY3LCAweGZmYzAwYjMxKTsKICAgIGg1ID0gbmV3IFdvcmQ2NCgweDhlYjQ0YTg3LCAweDY4NTgxNTExKTsKICAgIGg2ID0gbmV3IFdvcmQ2NCgweGRiMGMyZTBkLCAweDY0Zjk4ZmE3KTsKICAgIGg3ID0gbmV3IFdvcmQ2NCgweDQ3YjU0ODFkLCAweGJlZmE0ZmE0KTsKICB9CiAgY29uc3QgcGFkZGVkTGVuZ3RoID0gTWF0aC5jZWlsKChsZW5ndGggKyAxNykgLyAxMjgpICogMTI4OwogIGNvbnN0IHBhZGRlZCA9IG5ldyBVaW50OEFycmF5KHBhZGRlZExlbmd0aCk7CiAgbGV0IGksIGo7CiAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICBwYWRkZWRbaV0gPSBkYXRhW29mZnNldCsrXTsKICB9CiAgcGFkZGVkW2krK10gPSAweDgwOwogIGNvbnN0IG4gPSBwYWRkZWRMZW5ndGggLSAxNjsKICBpZiAoaSA8IG4pIHsKICAgIGkgPSBuOwogIH0KICBpICs9IDExOwogIHBhZGRlZFtpKytdID0gbGVuZ3RoID4+PiAyOSAmIDB4ZmY7CiAgcGFkZGVkW2krK10gPSBsZW5ndGggPj4gMjEgJiAweGZmOwogIHBhZGRlZFtpKytdID0gbGVuZ3RoID4+IDEzICYgMHhmZjsKICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA+PiA1ICYgMHhmZjsKICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA8PCAzICYgMHhmZjsKICBjb25zdCB3ID0gbmV3IEFycmF5KDgwKTsKICBmb3IgKGkgPSAwOyBpIDwgODA7IGkrKykgewogICAgd1tpXSA9IG5ldyBXb3JkNjQoMCwgMCk7CiAgfQogIGNvbnN0IHsKICAgIGsKICB9ID0gY2FsY3VsYXRlX3NoYV9vdGhlcl9QQVJBTVM7CiAgbGV0IGEgPSBuZXcgV29yZDY0KDAsIDApLAogICAgYiA9IG5ldyBXb3JkNjQoMCwgMCksCiAgICBjID0gbmV3IFdvcmQ2NCgwLCAwKTsKICBsZXQgZCA9IG5ldyBXb3JkNjQoMCwgMCksCiAgICBlID0gbmV3IFdvcmQ2NCgwLCAwKSwKICAgIGYgPSBuZXcgV29yZDY0KDAsIDApOwogIGxldCBnID0gbmV3IFdvcmQ2NCgwLCAwKSwKICAgIGggPSBuZXcgV29yZDY0KDAsIDApOwogIGNvbnN0IHQxID0gbmV3IFdvcmQ2NCgwLCAwKSwKICAgIHQyID0gbmV3IFdvcmQ2NCgwLCAwKTsKICBjb25zdCB0bXAxID0gbmV3IFdvcmQ2NCgwLCAwKSwKICAgIHRtcDIgPSBuZXcgV29yZDY0KDAsIDApOwogIGxldCB0bXAzOwogIGZvciAoaSA9IDA7IGkgPCBwYWRkZWRMZW5ndGg7KSB7CiAgICBmb3IgKGogPSAwOyBqIDwgMTY7ICsraikgewogICAgICB3W2pdLmhpZ2ggPSBwYWRkZWRbaV0gPDwgMjQgfCBwYWRkZWRbaSArIDFdIDw8IDE2IHwgcGFkZGVkW2kgKyAyXSA8PCA4IHwgcGFkZGVkW2kgKyAzXTsKICAgICAgd1tqXS5sb3cgPSBwYWRkZWRbaSArIDRdIDw8IDI0IHwgcGFkZGVkW2kgKyA1XSA8PCAxNiB8IHBhZGRlZFtpICsgNl0gPDwgOCB8IHBhZGRlZFtpICsgN107CiAgICAgIGkgKz0gODsKICAgIH0KICAgIGZvciAoaiA9IDE2OyBqIDwgODA7ICsraikgewogICAgICB0bXAzID0gd1tqXTsKICAgICAgbGl0dGxlU2lnbWFQcmltZSh0bXAzLCB3W2ogLSAyXSwgdG1wMik7CiAgICAgIHRtcDMuYWRkKHdbaiAtIDddKTsKICAgICAgbGl0dGxlU2lnbWEodG1wMSwgd1tqIC0gMTVdLCB0bXAyKTsKICAgICAgdG1wMy5hZGQodG1wMSk7CiAgICAgIHRtcDMuYWRkKHdbaiAtIDE2XSk7CiAgICB9CiAgICBhLmFzc2lnbihoMCk7CiAgICBiLmFzc2lnbihoMSk7CiAgICBjLmFzc2lnbihoMik7CiAgICBkLmFzc2lnbihoMyk7CiAgICBlLmFzc2lnbihoNCk7CiAgICBmLmFzc2lnbihoNSk7CiAgICBnLmFzc2lnbihoNik7CiAgICBoLmFzc2lnbihoNyk7CiAgICBmb3IgKGogPSAwOyBqIDwgODA7ICsraikgewogICAgICB0MS5hc3NpZ24oaCk7CiAgICAgIHNpZ21hUHJpbWUodG1wMSwgZSwgdG1wMik7CiAgICAgIHQxLmFkZCh0bXAxKTsKICAgICAgY2godG1wMSwgZSwgZiwgZywgdG1wMik7CiAgICAgIHQxLmFkZCh0bXAxKTsKICAgICAgdDEuYWRkKGtbal0pOwogICAgICB0MS5hZGQod1tqXSk7CiAgICAgIHNpZ21hKHQyLCBhLCB0bXAyKTsKICAgICAgbWFqKHRtcDEsIGEsIGIsIGMsIHRtcDIpOwogICAgICB0Mi5hZGQodG1wMSk7CiAgICAgIHRtcDMgPSBoOwogICAgICBoID0gZzsKICAgICAgZyA9IGY7CiAgICAgIGYgPSBlOwogICAgICBkLmFkZCh0MSk7CiAgICAgIGUgPSBkOwogICAgICBkID0gYzsKICAgICAgYyA9IGI7CiAgICAgIGIgPSBhOwogICAgICB0bXAzLmFzc2lnbih0MSk7CiAgICAgIHRtcDMuYWRkKHQyKTsKICAgICAgYSA9IHRtcDM7CiAgICB9CiAgICBoMC5hZGQoYSk7CiAgICBoMS5hZGQoYik7CiAgICBoMi5hZGQoYyk7CiAgICBoMy5hZGQoZCk7CiAgICBoNC5hZGQoZSk7CiAgICBoNS5hZGQoZik7CiAgICBoNi5hZGQoZyk7CiAgICBoNy5hZGQoaCk7CiAgfQogIGxldCByZXN1bHQ7CiAgaWYgKCFtb2RlMzg0KSB7CiAgICByZXN1bHQgPSBuZXcgVWludDhBcnJheSg2NCk7CiAgICBoMC5jb3B5VG8ocmVzdWx0LCAwKTsKICAgIGgxLmNvcHlUbyhyZXN1bHQsIDgpOwogICAgaDIuY29weVRvKHJlc3VsdCwgMTYpOwogICAgaDMuY29weVRvKHJlc3VsdCwgMjQpOwogICAgaDQuY29weVRvKHJlc3VsdCwgMzIpOwogICAgaDUuY29weVRvKHJlc3VsdCwgNDApOwogICAgaDYuY29weVRvKHJlc3VsdCwgNDgpOwogICAgaDcuY29weVRvKHJlc3VsdCwgNTYpOwogIH0gZWxzZSB7CiAgICByZXN1bHQgPSBuZXcgVWludDhBcnJheSg0OCk7CiAgICBoMC5jb3B5VG8ocmVzdWx0LCAwKTsKICAgIGgxLmNvcHlUbyhyZXN1bHQsIDgpOwogICAgaDIuY29weVRvKHJlc3VsdCwgMTYpOwogICAgaDMuY29weVRvKHJlc3VsdCwgMjQpOwogICAgaDQuY29weVRvKHJlc3VsdCwgMzIpOwogICAgaDUuY29weVRvKHJlc3VsdCwgNDApOwogIH0KICByZXR1cm4gcmVzdWx0Owp9CmZ1bmN0aW9uIGNhbGN1bGF0ZVNIQTM4NChkYXRhLCBvZmZzZXQsIGxlbmd0aCkgewogIHJldHVybiBjYWxjdWxhdGVTSEE1MTIoZGF0YSwgb2Zmc2V0LCBsZW5ndGgsIHRydWUpOwp9Cgo7Ly8gLi9zcmMvY29yZS9jYWxjdWxhdGVfc2hhMjU2LmpzCgpjb25zdCBjYWxjdWxhdGVfc2hhMjU2X1BBUkFNUyA9IHsKICBnZXQgaygpIHsKICAgIHJldHVybiBzaGFkb3codGhpcywgImsiLCBbMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSwgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSwgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMywgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCwgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYywgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSwgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNywgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NywgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMywgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSwgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMywgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCwgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSwgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMywgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCwgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMl0pOwogIH0KfTsKZnVuY3Rpb24gcm90cih4LCBuKSB7CiAgcmV0dXJuIHggPj4+IG4gfCB4IDw8IDMyIC0gbjsKfQpmdW5jdGlvbiBjYWxjdWxhdGVfc2hhMjU2X2NoKHgsIHksIHopIHsKICByZXR1cm4geCAmIHkgXiB+eCAmIHo7Cn0KZnVuY3Rpb24gY2FsY3VsYXRlX3NoYTI1Nl9tYWooeCwgeSwgeikgewogIHJldHVybiB4ICYgeSBeIHggJiB6IF4geSAmIHo7Cn0KZnVuY3Rpb24gY2FsY3VsYXRlX3NoYTI1Nl9zaWdtYSh4KSB7CiAgcmV0dXJuIHJvdHIoeCwgMikgXiByb3RyKHgsIDEzKSBeIHJvdHIoeCwgMjIpOwp9CmZ1bmN0aW9uIGNhbGN1bGF0ZV9zaGEyNTZfc2lnbWFQcmltZSh4KSB7CiAgcmV0dXJuIHJvdHIoeCwgNikgXiByb3RyKHgsIDExKSBeIHJvdHIoeCwgMjUpOwp9CmZ1bmN0aW9uIGNhbGN1bGF0ZV9zaGEyNTZfbGl0dGxlU2lnbWEoeCkgewogIHJldHVybiByb3RyKHgsIDcpIF4gcm90cih4LCAxOCkgXiB4ID4+PiAzOwp9CmZ1bmN0aW9uIGNhbGN1bGF0ZV9zaGEyNTZfbGl0dGxlU2lnbWFQcmltZSh4KSB7CiAgcmV0dXJuIHJvdHIoeCwgMTcpIF4gcm90cih4LCAxOSkgXiB4ID4+PiAxMDsKfQpmdW5jdGlvbiBjYWxjdWxhdGVTSEEyNTYoZGF0YSwgb2Zmc2V0LCBsZW5ndGgpIHsKICBsZXQgaDAgPSAweDZhMDllNjY3LAogICAgaDEgPSAweGJiNjdhZTg1LAogICAgaDIgPSAweDNjNmVmMzcyLAogICAgaDMgPSAweGE1NGZmNTNhLAogICAgaDQgPSAweDUxMGU1MjdmLAogICAgaDUgPSAweDliMDU2ODhjLAogICAgaDYgPSAweDFmODNkOWFiLAogICAgaDcgPSAweDViZTBjZDE5OwogIGNvbnN0IHBhZGRlZExlbmd0aCA9IE1hdGguY2VpbCgobGVuZ3RoICsgOSkgLyA2NCkgKiA2NDsKICBjb25zdCBwYWRkZWQgPSBuZXcgVWludDhBcnJheShwYWRkZWRMZW5ndGgpOwogIGxldCBpLCBqOwogIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgcGFkZGVkW2ldID0gZGF0YVtvZmZzZXQrK107CiAgfQogIHBhZGRlZFtpKytdID0gMHg4MDsKICBjb25zdCBuID0gcGFkZGVkTGVuZ3RoIC0gODsKICBpZiAoaSA8IG4pIHsKICAgIGkgPSBuOwogIH0KICBpICs9IDM7CiAgcGFkZGVkW2krK10gPSBsZW5ndGggPj4+IDI5ICYgMHhmZjsKICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA+PiAyMSAmIDB4ZmY7CiAgcGFkZGVkW2krK10gPSBsZW5ndGggPj4gMTMgJiAweGZmOwogIHBhZGRlZFtpKytdID0gbGVuZ3RoID4+IDUgJiAweGZmOwogIHBhZGRlZFtpKytdID0gbGVuZ3RoIDw8IDMgJiAweGZmOwogIGNvbnN0IHcgPSBuZXcgVWludDMyQXJyYXkoNjQpOwogIGNvbnN0IHsKICAgIGsKICB9ID0gY2FsY3VsYXRlX3NoYTI1Nl9QQVJBTVM7CiAgZm9yIChpID0gMDsgaSA8IHBhZGRlZExlbmd0aDspIHsKICAgIGZvciAoaiA9IDA7IGogPCAxNjsgKytqKSB7CiAgICAgIHdbal0gPSBwYWRkZWRbaV0gPDwgMjQgfCBwYWRkZWRbaSArIDFdIDw8IDE2IHwgcGFkZGVkW2kgKyAyXSA8PCA4IHwgcGFkZGVkW2kgKyAzXTsKICAgICAgaSArPSA0OwogICAgfQogICAgZm9yIChqID0gMTY7IGogPCA2NDsgKytqKSB7CiAgICAgIHdbal0gPSBjYWxjdWxhdGVfc2hhMjU2X2xpdHRsZVNpZ21hUHJpbWUod1tqIC0gMl0pICsgd1tqIC0gN10gKyBjYWxjdWxhdGVfc2hhMjU2X2xpdHRsZVNpZ21hKHdbaiAtIDE1XSkgKyB3W2ogLSAxNl0gfCAwOwogICAgfQogICAgbGV0IGEgPSBoMCwKICAgICAgYiA9IGgxLAogICAgICBjID0gaDIsCiAgICAgIGQgPSBoMywKICAgICAgZSA9IGg0LAogICAgICBmID0gaDUsCiAgICAgIGcgPSBoNiwKICAgICAgaCA9IGg3LAogICAgICB0MSwKICAgICAgdDI7CiAgICBmb3IgKGogPSAwOyBqIDwgNjQ7ICsraikgewogICAgICB0MSA9IGggKyBjYWxjdWxhdGVfc2hhMjU2X3NpZ21hUHJpbWUoZSkgKyBjYWxjdWxhdGVfc2hhMjU2X2NoKGUsIGYsIGcpICsga1tqXSArIHdbal07CiAgICAgIHQyID0gY2FsY3VsYXRlX3NoYTI1Nl9zaWdtYShhKSArIGNhbGN1bGF0ZV9zaGEyNTZfbWFqKGEsIGIsIGMpOwogICAgICBoID0gZzsKICAgICAgZyA9IGY7CiAgICAgIGYgPSBlOwogICAgICBlID0gZCArIHQxIHwgMDsKICAgICAgZCA9IGM7CiAgICAgIGMgPSBiOwogICAgICBiID0gYTsKICAgICAgYSA9IHQxICsgdDIgfCAwOwogICAgfQogICAgaDAgPSBoMCArIGEgfCAwOwogICAgaDEgPSBoMSArIGIgfCAwOwogICAgaDIgPSBoMiArIGMgfCAwOwogICAgaDMgPSBoMyArIGQgfCAwOwogICAgaDQgPSBoNCArIGUgfCAwOwogICAgaDUgPSBoNSArIGYgfCAwOwogICAgaDYgPSBoNiArIGcgfCAwOwogICAgaDcgPSBoNyArIGggfCAwOwogIH0KICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoW2gwID4+IDI0ICYgMHhGRiwgaDAgPj4gMTYgJiAweEZGLCBoMCA+PiA4ICYgMHhGRiwgaDAgJiAweEZGLCBoMSA+PiAyNCAmIDB4RkYsIGgxID4+IDE2ICYgMHhGRiwgaDEgPj4gOCAmIDB4RkYsIGgxICYgMHhGRiwgaDIgPj4gMjQgJiAweEZGLCBoMiA+PiAxNiAmIDB4RkYsIGgyID4+IDggJiAweEZGLCBoMiAmIDB4RkYsIGgzID4+IDI0ICYgMHhGRiwgaDMgPj4gMTYgJiAweEZGLCBoMyA+PiA4ICYgMHhGRiwgaDMgJiAweEZGLCBoNCA+PiAyNCAmIDB4RkYsIGg0ID4+IDE2ICYgMHhGRiwgaDQgPj4gOCAmIDB4RkYsIGg0ICYgMHhGRiwgaDUgPj4gMjQgJiAweEZGLCBoNSA+PiAxNiAmIDB4RkYsIGg1ID4+IDggJiAweEZGLCBoNSAmIDB4RkYsIGg2ID4+IDI0ICYgMHhGRiwgaDYgPj4gMTYgJiAweEZGLCBoNiA+PiA4ICYgMHhGRiwgaDYgJiAweEZGLCBoNyA+PiAyNCAmIDB4RkYsIGg3ID4+IDE2ICYgMHhGRiwgaDcgPj4gOCAmIDB4RkYsIGg3ICYgMHhGRl0pOwp9Cgo7Ly8gLi9zcmMvY29yZS9kZWNyeXB0X3N0cmVhbS5qcwoKY29uc3QgY2h1bmtTaXplID0gNTEyOwpjbGFzcyBEZWNyeXB0U3RyZWFtIGV4dGVuZHMgRGVjb2RlU3RyZWFtIHsKICBjb25zdHJ1Y3RvcihzdHIsIG1heWJlTGVuZ3RoLCBkZWNyeXB0KSB7CiAgICBzdXBlcihtYXliZUxlbmd0aCk7CiAgICB0aGlzLnN0ciA9IHN0cjsKICAgIHRoaXMuZGljdCA9IHN0ci5kaWN0OwogICAgdGhpcy5kZWNyeXB0ID0gZGVjcnlwdDsKICAgIHRoaXMubmV4dENodW5rID0gbnVsbDsKICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSBmYWxzZTsKICB9CiAgcmVhZEJsb2NrKCkgewogICAgbGV0IGNodW5rOwogICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpIHsKICAgICAgY2h1bmsgPSB0aGlzLm5leHRDaHVuazsKICAgIH0gZWxzZSB7CiAgICAgIGNodW5rID0gdGhpcy5zdHIuZ2V0Qnl0ZXMoY2h1bmtTaXplKTsKICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7CiAgICB9CiAgICBpZiAoIWNodW5rPy5sZW5ndGgpIHsKICAgICAgdGhpcy5lb2YgPSB0cnVlOwogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLm5leHRDaHVuayA9IHRoaXMuc3RyLmdldEJ5dGVzKGNodW5rU2l6ZSk7CiAgICBjb25zdCBoYXNNb3JlRGF0YSA9IHRoaXMubmV4dENodW5rPy5sZW5ndGggPiAwOwogICAgY29uc3QgZGVjcnlwdCA9IHRoaXMuZGVjcnlwdDsKICAgIGNodW5rID0gZGVjcnlwdChjaHVuaywgIWhhc01vcmVEYXRhKTsKICAgIGNvbnN0IGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyTGVuZ3RoLAogICAgICBuZXdMZW5ndGggPSBidWZmZXJMZW5ndGggKyBjaHVuay5sZW5ndGgsCiAgICAgIGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKG5ld0xlbmd0aCk7CiAgICBidWZmZXIuc2V0KGNodW5rLCBidWZmZXJMZW5ndGgpOwogICAgdGhpcy5idWZmZXJMZW5ndGggPSBuZXdMZW5ndGg7CiAgfQp9Cgo7Ly8gLi9zcmMvY29yZS9jcnlwdG8uanMKCgoKCgoKY2xhc3MgQVJDRm91ckNpcGhlciB7CiAgY29uc3RydWN0b3Ioa2V5KSB7CiAgICB0aGlzLmEgPSAwOwogICAgdGhpcy5iID0gMDsKICAgIGNvbnN0IHMgPSBuZXcgVWludDhBcnJheSgyNTYpOwogICAgY29uc3Qga2V5TGVuZ3RoID0ga2V5Lmxlbmd0aDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyArK2kpIHsKICAgICAgc1tpXSA9IGk7CiAgICB9CiAgICBmb3IgKGxldCBpID0gMCwgaiA9IDA7IGkgPCAyNTY7ICsraSkgewogICAgICBjb25zdCB0bXAgPSBzW2ldOwogICAgICBqID0gaiArIHRtcCArIGtleVtpICUga2V5TGVuZ3RoXSAmIDB4ZmY7CiAgICAgIHNbaV0gPSBzW2pdOwogICAgICBzW2pdID0gdG1wOwogICAgfQogICAgdGhpcy5zID0gczsKICB9CiAgZW5jcnlwdEJsb2NrKGRhdGEpIHsKICAgIGxldCBhID0gdGhpcy5hLAogICAgICBiID0gdGhpcy5iOwogICAgY29uc3QgcyA9IHRoaXMuczsKICAgIGNvbnN0IG4gPSBkYXRhLmxlbmd0aDsKICAgIGNvbnN0IG91dHB1dCA9IG5ldyBVaW50OEFycmF5KG4pOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgYSA9IGEgKyAxICYgMHhmZjsKICAgICAgY29uc3QgdG1wID0gc1thXTsKICAgICAgYiA9IGIgKyB0bXAgJiAweGZmOwogICAgICBjb25zdCB0bXAyID0gc1tiXTsKICAgICAgc1thXSA9IHRtcDI7CiAgICAgIHNbYl0gPSB0bXA7CiAgICAgIG91dHB1dFtpXSA9IGRhdGFbaV0gXiBzW3RtcCArIHRtcDIgJiAweGZmXTsKICAgIH0KICAgIHRoaXMuYSA9IGE7CiAgICB0aGlzLmIgPSBiOwogICAgcmV0dXJuIG91dHB1dDsKICB9CiAgZGVjcnlwdEJsb2NrKGRhdGEpIHsKICAgIHJldHVybiB0aGlzLmVuY3J5cHRCbG9jayhkYXRhKTsKICB9CiAgZW5jcnlwdChkYXRhKSB7CiAgICByZXR1cm4gdGhpcy5lbmNyeXB0QmxvY2soZGF0YSk7CiAgfQp9CmNsYXNzIE51bGxDaXBoZXIgewogIGRlY3J5cHRCbG9jayhkYXRhKSB7CiAgICByZXR1cm4gZGF0YTsKICB9CiAgZW5jcnlwdChkYXRhKSB7CiAgICByZXR1cm4gZGF0YTsKICB9Cn0KY2xhc3MgQUVTQmFzZUNpcGhlciB7CiAgX3MgPSBuZXcgVWludDhBcnJheShbMHg2MywgMHg3YywgMHg3NywgMHg3YiwgMHhmMiwgMHg2YiwgMHg2ZiwgMHhjNSwgMHgzMCwgMHgwMSwgMHg2NywgMHgyYiwgMHhmZSwgMHhkNywgMHhhYiwgMHg3NiwgMHhjYSwgMHg4MiwgMHhjOSwgMHg3ZCwgMHhmYSwgMHg1OSwgMHg0NywgMHhmMCwgMHhhZCwgMHhkNCwgMHhhMiwgMHhhZiwgMHg5YywgMHhhNCwgMHg3MiwgMHhjMCwgMHhiNywgMHhmZCwgMHg5MywgMHgyNiwgMHgzNiwgMHgzZiwgMHhmNywgMHhjYywgMHgzNCwgMHhhNSwgMHhlNSwgMHhmMSwgMHg3MSwgMHhkOCwgMHgzMSwgMHgxNSwgMHgwNCwgMHhjNywgMHgyMywgMHhjMywgMHgxOCwgMHg5NiwgMHgwNSwgMHg5YSwgMHgwNywgMHgxMiwgMHg4MCwgMHhlMiwgMHhlYiwgMHgyNywgMHhiMiwgMHg3NSwgMHgwOSwgMHg4MywgMHgyYywgMHgxYSwgMHgxYiwgMHg2ZSwgMHg1YSwgMHhhMCwgMHg1MiwgMHgzYiwgMHhkNiwgMHhiMywgMHgyOSwgMHhlMywgMHgyZiwgMHg4NCwgMHg1MywgMHhkMSwgMHgwMCwgMHhlZCwgMHgyMCwgMHhmYywgMHhiMSwgMHg1YiwgMHg2YSwgMHhjYiwgMHhiZSwgMHgzOSwgMHg0YSwgMHg0YywgMHg1OCwgMHhjZiwgMHhkMCwgMHhlZiwgMHhhYSwgMHhmYiwgMHg0MywgMHg0ZCwgMHgzMywgMHg4NSwgMHg0NSwgMHhmOSwgMHgwMiwgMHg3ZiwgMHg1MCwgMHgzYywgMHg5ZiwgMHhhOCwgMHg1MSwgMHhhMywgMHg0MCwgMHg4ZiwgMHg5MiwgMHg5ZCwgMHgzOCwgMHhmNSwgMHhiYywgMHhiNiwgMHhkYSwgMHgyMSwgMHgxMCwgMHhmZiwgMHhmMywgMHhkMiwgMHhjZCwgMHgwYywgMHgxMywgMHhlYywgMHg1ZiwgMHg5NywgMHg0NCwgMHgxNywgMHhjNCwgMHhhNywgMHg3ZSwgMHgzZCwgMHg2NCwgMHg1ZCwgMHgxOSwgMHg3MywgMHg2MCwgMHg4MSwgMHg0ZiwgMHhkYywgMHgyMiwgMHgyYSwgMHg5MCwgMHg4OCwgMHg0NiwgMHhlZSwgMHhiOCwgMHgxNCwgMHhkZSwgMHg1ZSwgMHgwYiwgMHhkYiwgMHhlMCwgMHgzMiwgMHgzYSwgMHgwYSwgMHg0OSwgMHgwNiwgMHgyNCwgMHg1YywgMHhjMiwgMHhkMywgMHhhYywgMHg2MiwgMHg5MSwgMHg5NSwgMHhlNCwgMHg3OSwgMHhlNywgMHhjOCwgMHgzNywgMHg2ZCwgMHg4ZCwgMHhkNSwgMHg0ZSwgMHhhOSwgMHg2YywgMHg1NiwgMHhmNCwgMHhlYSwgMHg2NSwgMHg3YSwgMHhhZSwgMHgwOCwgMHhiYSwgMHg3OCwgMHgyNSwgMHgyZSwgMHgxYywgMHhhNiwgMHhiNCwgMHhjNiwgMHhlOCwgMHhkZCwgMHg3NCwgMHgxZiwgMHg0YiwgMHhiZCwgMHg4YiwgMHg4YSwgMHg3MCwgMHgzZSwgMHhiNSwgMHg2NiwgMHg0OCwgMHgwMywgMHhmNiwgMHgwZSwgMHg2MSwgMHgzNSwgMHg1NywgMHhiOSwgMHg4NiwgMHhjMSwgMHgxZCwgMHg5ZSwgMHhlMSwgMHhmOCwgMHg5OCwgMHgxMSwgMHg2OSwgMHhkOSwgMHg4ZSwgMHg5NCwgMHg5YiwgMHgxZSwgMHg4NywgMHhlOSwgMHhjZSwgMHg1NSwgMHgyOCwgMHhkZiwgMHg4YywgMHhhMSwgMHg4OSwgMHgwZCwgMHhiZiwgMHhlNiwgMHg0MiwgMHg2OCwgMHg0MSwgMHg5OSwgMHgyZCwgMHgwZiwgMHhiMCwgMHg1NCwgMHhiYiwgMHgxNl0pOwogIF9pbnZfcyA9IG5ldyBVaW50OEFycmF5KFsweDUyLCAweDA5LCAweDZhLCAweGQ1LCAweDMwLCAweDM2LCAweGE1LCAweDM4LCAweGJmLCAweDQwLCAweGEzLCAweDllLCAweDgxLCAweGYzLCAweGQ3LCAweGZiLCAweDdjLCAweGUzLCAweDM5LCAweDgyLCAweDliLCAweDJmLCAweGZmLCAweDg3LCAweDM0LCAweDhlLCAweDQzLCAweDQ0LCAweGM0LCAweGRlLCAweGU5LCAweGNiLCAweDU0LCAweDdiLCAweDk0LCAweDMyLCAweGE2LCAweGMyLCAweDIzLCAweDNkLCAweGVlLCAweDRjLCAweDk1LCAweDBiLCAweDQyLCAweGZhLCAweGMzLCAweDRlLCAweDA4LCAweDJlLCAweGExLCAweDY2LCAweDI4LCAweGQ5LCAweDI0LCAweGIyLCAweDc2LCAweDViLCAweGEyLCAweDQ5LCAweDZkLCAweDhiLCAweGQxLCAweDI1LCAweDcyLCAweGY4LCAweGY2LCAweDY0LCAweDg2LCAweDY4LCAweDk4LCAweDE2LCAweGQ0LCAweGE0LCAweDVjLCAweGNjLCAweDVkLCAweDY1LCAweGI2LCAweDkyLCAweDZjLCAweDcwLCAweDQ4LCAweDUwLCAweGZkLCAweGVkLCAweGI5LCAweGRhLCAweDVlLCAweDE1LCAweDQ2LCAweDU3LCAweGE3LCAweDhkLCAweDlkLCAweDg0LCAweDkwLCAweGQ4LCAweGFiLCAweDAwLCAweDhjLCAweGJjLCAweGQzLCAweDBhLCAweGY3LCAweGU0LCAweDU4LCAweDA1LCAweGI4LCAweGIzLCAweDQ1LCAweDA2LCAweGQwLCAweDJjLCAweDFlLCAweDhmLCAweGNhLCAweDNmLCAweDBmLCAweDAyLCAweGMxLCAweGFmLCAweGJkLCAweDAzLCAweDAxLCAweDEzLCAweDhhLCAweDZiLCAweDNhLCAweDkxLCAweDExLCAweDQxLCAweDRmLCAweDY3LCAweGRjLCAweGVhLCAweDk3LCAweGYyLCAweGNmLCAweGNlLCAweGYwLCAweGI0LCAweGU2LCAweDczLCAweDk2LCAweGFjLCAweDc0LCAweDIyLCAweGU3LCAweGFkLCAweDM1LCAweDg1LCAweGUyLCAweGY5LCAweDM3LCAweGU4LCAweDFjLCAweDc1LCAweGRmLCAweDZlLCAweDQ3LCAweGYxLCAweDFhLCAweDcxLCAweDFkLCAweDI5LCAweGM1LCAweDg5LCAweDZmLCAweGI3LCAweDYyLCAweDBlLCAweGFhLCAweDE4LCAweGJlLCAweDFiLCAweGZjLCAweDU2LCAweDNlLCAweDRiLCAweGM2LCAweGQyLCAweDc5LCAweDIwLCAweDlhLCAweGRiLCAweGMwLCAweGZlLCAweDc4LCAweGNkLCAweDVhLCAweGY0LCAweDFmLCAweGRkLCAweGE4LCAweDMzLCAweDg4LCAweDA3LCAweGM3LCAweDMxLCAweGIxLCAweDEyLCAweDEwLCAweDU5LCAweDI3LCAweDgwLCAweGVjLCAweDVmLCAweDYwLCAweDUxLCAweDdmLCAweGE5LCAweDE5LCAweGI1LCAweDRhLCAweDBkLCAweDJkLCAweGU1LCAweDdhLCAweDlmLCAweDkzLCAweGM5LCAweDljLCAweGVmLCAweGEwLCAweGUwLCAweDNiLCAweDRkLCAweGFlLCAweDJhLCAweGY1LCAweGIwLCAweGM4LCAweGViLCAweGJiLCAweDNjLCAweDgzLCAweDUzLCAweDk5LCAweDYxLCAweDE3LCAweDJiLCAweDA0LCAweDdlLCAweGJhLCAweDc3LCAweGQ2LCAweDI2LCAweGUxLCAweDY5LCAweDE0LCAweDYzLCAweDU1LCAweDIxLCAweDBjLCAweDdkXSk7CiAgX21peCA9IG5ldyBVaW50MzJBcnJheShbMHgwMDAwMDAwMCwgMHgwZTA5MGQwYiwgMHgxYzEyMWExNiwgMHgxMjFiMTcxZCwgMHgzODI0MzQyYywgMHgzNjJkMzkyNywgMHgyNDM2MmUzYSwgMHgyYTNmMjMzMSwgMHg3MDQ4Njg1OCwgMHg3ZTQxNjU1MywgMHg2YzVhNzI0ZSwgMHg2MjUzN2Y0NSwgMHg0ODZjNWM3NCwgMHg0NjY1NTE3ZiwgMHg1NDdlNDY2MiwgMHg1YTc3NGI2OSwgMHhlMDkwZDBiMCwgMHhlZTk5ZGRiYiwgMHhmYzgyY2FhNiwgMHhmMjhiYzdhZCwgMHhkOGI0ZTQ5YywgMHhkNmJkZTk5NywgMHhjNGE2ZmU4YSwgMHhjYWFmZjM4MSwgMHg5MGQ4YjhlOCwgMHg5ZWQxYjVlMywgMHg4Y2NhYTJmZSwgMHg4MmMzYWZmNSwgMHhhOGZjOGNjNCwgMHhhNmY1ODFjZiwgMHhiNGVlOTZkMiwgMHhiYWU3OWJkOSwgMHhkYjNiYmI3YiwgMHhkNTMyYjY3MCwgMHhjNzI5YTE2ZCwgMHhjOTIwYWM2NiwgMHhlMzFmOGY1NywgMHhlZDE2ODI1YywgMHhmZjBkOTU0MSwgMHhmMTA0OTg0YSwgMHhhYjczZDMyMywgMHhhNTdhZGUyOCwgMHhiNzYxYzkzNSwgMHhiOTY4YzQzZSwgMHg5MzU3ZTcwZiwgMHg5ZDVlZWEwNCwgMHg4ZjQ1ZmQxOSwgMHg4MTRjZjAxMiwgMHgzYmFiNmJjYiwgMHgzNWEyNjZjMCwgMHgyN2I5NzFkZCwgMHgyOWIwN2NkNiwgMHgwMzhmNWZlNywgMHgwZDg2NTJlYywgMHgxZjlkNDVmMSwgMHgxMTk0NDhmYSwgMHg0YmUzMDM5MywgMHg0NWVhMGU5OCwgMHg1N2YxMTk4NSwgMHg1OWY4MTQ4ZSwgMHg3M2M3MzdiZiwgMHg3ZGNlM2FiNCwgMHg2ZmQ1MmRhOSwgMHg2MWRjMjBhMiwgMHhhZDc2NmRmNiwgMHhhMzdmNjBmZCwgMHhiMTY0NzdlMCwgMHhiZjZkN2FlYiwgMHg5NTUyNTlkYSwgMHg5YjViNTRkMSwgMHg4OTQwNDNjYywgMHg4NzQ5NGVjNywgMHhkZDNlMDVhZSwgMHhkMzM3MDhhNSwgMHhjMTJjMWZiOCwgMHhjZjI1MTJiMywgMHhlNTFhMzE4MiwgMHhlYjEzM2M4OSwgMHhmOTA4MmI5NCwgMHhmNzAxMjY5ZiwgMHg0ZGU2YmQ0NiwgMHg0M2VmYjA0ZCwgMHg1MWY0YTc1MCwgMHg1ZmZkYWE1YiwgMHg3NWMyODk2YSwgMHg3YmNiODQ2MSwgMHg2OWQwOTM3YywgMHg2N2Q5OWU3NywgMHgzZGFlZDUxZSwgMHgzM2E3ZDgxNSwgMHgyMWJjY2YwOCwgMHgyZmI1YzIwMywgMHgwNThhZTEzMiwgMHgwYjgzZWMzOSwgMHgxOTk4ZmIyNCwgMHgxNzkxZjYyZiwgMHg3NjRkZDY4ZCwgMHg3ODQ0ZGI4NiwgMHg2YTVmY2M5YiwgMHg2NDU2YzE5MCwgMHg0ZTY5ZTJhMSwgMHg0MDYwZWZhYSwgMHg1MjdiZjhiNywgMHg1YzcyZjViYywgMHgwNjA1YmVkNSwgMHgwODBjYjNkZSwgMHgxYTE3YTRjMywgMHgxNDFlYTljOCwgMHgzZTIxOGFmOSwgMHgzMDI4ODdmMiwgMHgyMjMzOTBlZiwgMHgyYzNhOWRlNCwgMHg5NmRkMDYzZCwgMHg5OGQ0MGIzNiwgMHg4YWNmMWMyYiwgMHg4NGM2MTEyMCwgMHhhZWY5MzIxMSwgMHhhMGYwM2YxYSwgMHhiMmViMjgwNywgMHhiY2UyMjUwYywgMHhlNjk1NmU2NSwgMHhlODljNjM2ZSwgMHhmYTg3NzQ3MywgMHhmNDhlNzk3OCwgMHhkZWIxNWE0OSwgMHhkMGI4NTc0MiwgMHhjMmEzNDA1ZiwgMHhjY2FhNGQ1NCwgMHg0MWVjZGFmNywgMHg0ZmU1ZDdmYywgMHg1ZGZlYzBlMSwgMHg1M2Y3Y2RlYSwgMHg3OWM4ZWVkYiwgMHg3N2MxZTNkMCwgMHg2NWRhZjRjZCwgMHg2YmQzZjljNiwgMHgzMWE0YjJhZiwgMHgzZmFkYmZhNCwgMHgyZGI2YThiOSwgMHgyM2JmYTViMiwgMHgwOTgwODY4MywgMHgwNzg5OGI4OCwgMHgxNTkyOWM5NSwgMHgxYjliOTE5ZSwgMHhhMTdjMGE0NywgMHhhZjc1MDc0YywgMHhiZDZlMTA1MSwgMHhiMzY3MWQ1YSwgMHg5OTU4M2U2YiwgMHg5NzUxMzM2MCwgMHg4NTRhMjQ3ZCwgMHg4YjQzMjk3NiwgMHhkMTM0NjIxZiwgMHhkZjNkNmYxNCwgMHhjZDI2NzgwOSwgMHhjMzJmNzUwMiwgMHhlOTEwNTYzMywgMHhlNzE5NWIzOCwgMHhmNTAyNGMyNSwgMHhmYjBiNDEyZSwgMHg5YWQ3NjE4YywgMHg5NGRlNmM4NywgMHg4NmM1N2I5YSwgMHg4OGNjNzY5MSwgMHhhMmYzNTVhMCwgMHhhY2ZhNThhYiwgMHhiZWUxNGZiNiwgMHhiMGU4NDJiZCwgMHhlYTlmMDlkNCwgMHhlNDk2MDRkZiwgMHhmNjhkMTNjMiwgMHhmODg0MWVjOSwgMHhkMmJiM2RmOCwgMHhkY2IyMzBmMywgMHhjZWE5MjdlZSwgMHhjMGEwMmFlNSwgMHg3YTQ3YjEzYywgMHg3NDRlYmMzNywgMHg2NjU1YWIyYSwgMHg2ODVjYTYyMSwgMHg0MjYzODUxMCwgMHg0YzZhODgxYiwgMHg1ZTcxOWYwNiwgMHg1MDc4OTIwZCwgMHgwYTBmZDk2NCwgMHgwNDA2ZDQ2ZiwgMHgxNjFkYzM3MiwgMHgxODE0Y2U3OSwgMHgzMjJiZWQ0OCwgMHgzYzIyZTA0MywgMHgyZTM5Zjc1ZSwgMHgyMDMwZmE1NSwgMHhlYzlhYjcwMSwgMHhlMjkzYmEwYSwgMHhmMDg4YWQxNywgMHhmZTgxYTAxYywgMHhkNGJlODMyZCwgMHhkYWI3OGUyNiwgMHhjOGFjOTkzYiwgMHhjNmE1OTQzMCwgMHg5Y2QyZGY1OSwgMHg5MmRiZDI1MiwgMHg4MGMwYzU0ZiwgMHg4ZWM5Yzg0NCwgMHhhNGY2ZWI3NSwgMHhhYWZmZTY3ZSwgMHhiOGU0ZjE2MywgMHhiNmVkZmM2OCwgMHgwYzBhNjdiMSwgMHgwMjAzNmFiYSwgMHgxMDE4N2RhNywgMHgxZTExNzBhYywgMHgzNDJlNTM5ZCwgMHgzYTI3NWU5NiwgMHgyODNjNDk4YiwgMHgyNjM1NDQ4MCwgMHg3YzQyMGZlOSwgMHg3MjRiMDJlMiwgMHg2MDUwMTVmZiwgMHg2ZTU5MThmNCwgMHg0NDY2M2JjNSwgMHg0YTZmMzZjZSwgMHg1ODc0MjFkMywgMHg1NjdkMmNkOCwgMHgzN2ExMGM3YSwgMHgzOWE4MDE3MSwgMHgyYmIzMTY2YywgMHgyNWJhMWI2NywgMHgwZjg1Mzg1NiwgMHgwMThjMzU1ZCwgMHgxMzk3MjI0MCwgMHgxZDllMmY0YiwgMHg0N2U5NjQyMiwgMHg0OWUwNjkyOSwgMHg1YmZiN2UzNCwgMHg1NWYyNzMzZiwgMHg3ZmNkNTAwZSwgMHg3MWM0NWQwNSwgMHg2M2RmNGExOCwgMHg2ZGQ2NDcxMywgMHhkNzMxZGNjYSwgMHhkOTM4ZDFjMSwgMHhjYjIzYzZkYywgMHhjNTJhY2JkNywgMHhlZjE1ZThlNiwgMHhlMTFjZTVlZCwgMHhmMzA3ZjJmMCwgMHhmZDBlZmZmYiwgMHhhNzc5YjQ5MiwgMHhhOTcwYjk5OSwgMHhiYjZiYWU4NCwgMHhiNTYyYTM4ZiwgMHg5ZjVkODBiZSwgMHg5MTU0OGRiNSwgMHg4MzRmOWFhOCwgMHg4ZDQ2OTdhM10pOwogIF9taXhDb2wgPSBuZXcgVWludDhBcnJheSgyNTYpLm1hcCgoXywgaSkgPT4gaSA8IDEyOCA/IGkgPDwgMSA6IGkgPDwgMSBeIDB4MWIpOwogIGNvbnN0cnVjdG9yKCkgewogICAgdGhpcy5idWZmZXIgPSBuZXcgVWludDhBcnJheSgxNik7CiAgICB0aGlzLmJ1ZmZlclBvc2l0aW9uID0gMDsKICB9CiAgX2V4cGFuZEtleShjaXBoZXJLZXkpIHsKICAgIHVucmVhY2hhYmxlKCJDYW5ub3QgY2FsbCBgX2V4cGFuZEtleWAgb24gdGhlIGJhc2UgY2xhc3MiKTsKICB9CiAgX2RlY3J5cHQoaW5wdXQsIGtleSkgewogICAgbGV0IHQsIHUsIHY7CiAgICBjb25zdCBzdGF0ZSA9IG5ldyBVaW50OEFycmF5KDE2KTsKICAgIHN0YXRlLnNldChpbnB1dCk7CiAgICBmb3IgKGxldCBqID0gMCwgayA9IHRoaXMuX2tleVNpemU7IGogPCAxNjsgKytqLCArK2spIHsKICAgICAgc3RhdGVbal0gXj0ga2V5W2tdOwogICAgfQogICAgZm9yIChsZXQgaSA9IHRoaXMuX2N5Y2xlc09mUmVwZXRpdGlvbiAtIDE7IGkgPj0gMTsgLS1pKSB7CiAgICAgIHQgPSBzdGF0ZVsxM107CiAgICAgIHN0YXRlWzEzXSA9IHN0YXRlWzldOwogICAgICBzdGF0ZVs5XSA9IHN0YXRlWzVdOwogICAgICBzdGF0ZVs1XSA9IHN0YXRlWzFdOwogICAgICBzdGF0ZVsxXSA9IHQ7CiAgICAgIHQgPSBzdGF0ZVsxNF07CiAgICAgIHUgPSBzdGF0ZVsxMF07CiAgICAgIHN0YXRlWzE0XSA9IHN0YXRlWzZdOwogICAgICBzdGF0ZVsxMF0gPSBzdGF0ZVsyXTsKICAgICAgc3RhdGVbNl0gPSB0OwogICAgICBzdGF0ZVsyXSA9IHU7CiAgICAgIHQgPSBzdGF0ZVsxNV07CiAgICAgIHUgPSBzdGF0ZVsxMV07CiAgICAgIHYgPSBzdGF0ZVs3XTsKICAgICAgc3RhdGVbMTVdID0gc3RhdGVbM107CiAgICAgIHN0YXRlWzExXSA9IHQ7CiAgICAgIHN0YXRlWzddID0gdTsKICAgICAgc3RhdGVbM10gPSB2OwogICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDE2OyArK2opIHsKICAgICAgICBzdGF0ZVtqXSA9IHRoaXMuX2ludl9zW3N0YXRlW2pdXTsKICAgICAgfQogICAgICBmb3IgKGxldCBqID0gMCwgayA9IGkgKiAxNjsgaiA8IDE2OyArK2osICsraykgewogICAgICAgIHN0YXRlW2pdIF49IGtleVtrXTsKICAgICAgfQogICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDE2OyBqICs9IDQpIHsKICAgICAgICBjb25zdCBzMCA9IHRoaXMuX21peFtzdGF0ZVtqXV07CiAgICAgICAgY29uc3QgczEgPSB0aGlzLl9taXhbc3RhdGVbaiArIDFdXTsKICAgICAgICBjb25zdCBzMiA9IHRoaXMuX21peFtzdGF0ZVtqICsgMl1dOwogICAgICAgIGNvbnN0IHMzID0gdGhpcy5fbWl4W3N0YXRlW2ogKyAzXV07CiAgICAgICAgdCA9IHMwIF4gczEgPj4+IDggXiBzMSA8PCAyNCBeIHMyID4+PiAxNiBeIHMyIDw8IDE2IF4gczMgPj4+IDI0IF4gczMgPDwgODsKICAgICAgICBzdGF0ZVtqXSA9IHQgPj4+IDI0ICYgMHhmZjsKICAgICAgICBzdGF0ZVtqICsgMV0gPSB0ID4+IDE2ICYgMHhmZjsKICAgICAgICBzdGF0ZVtqICsgMl0gPSB0ID4+IDggJiAweGZmOwogICAgICAgIHN0YXRlW2ogKyAzXSA9IHQgJiAweGZmOwogICAgICB9CiAgICB9CiAgICB0ID0gc3RhdGVbMTNdOwogICAgc3RhdGVbMTNdID0gc3RhdGVbOV07CiAgICBzdGF0ZVs5XSA9IHN0YXRlWzVdOwogICAgc3RhdGVbNV0gPSBzdGF0ZVsxXTsKICAgIHN0YXRlWzFdID0gdDsKICAgIHQgPSBzdGF0ZVsxNF07CiAgICB1ID0gc3RhdGVbMTBdOwogICAgc3RhdGVbMTRdID0gc3RhdGVbNl07CiAgICBzdGF0ZVsxMF0gPSBzdGF0ZVsyXTsKICAgIHN0YXRlWzZdID0gdDsKICAgIHN0YXRlWzJdID0gdTsKICAgIHQgPSBzdGF0ZVsxNV07CiAgICB1ID0gc3RhdGVbMTFdOwogICAgdiA9IHN0YXRlWzddOwogICAgc3RhdGVbMTVdID0gc3RhdGVbM107CiAgICBzdGF0ZVsxMV0gPSB0OwogICAgc3RhdGVbN10gPSB1OwogICAgc3RhdGVbM10gPSB2OwogICAgZm9yIChsZXQgaiA9IDA7IGogPCAxNjsgKytqKSB7CiAgICAgIHN0YXRlW2pdID0gdGhpcy5faW52X3Nbc3RhdGVbal1dOwogICAgICBzdGF0ZVtqXSBePSBrZXlbal07CiAgICB9CiAgICByZXR1cm4gc3RhdGU7CiAgfQogIF9lbmNyeXB0KGlucHV0LCBrZXkpIHsKICAgIGNvbnN0IHMgPSB0aGlzLl9zOwogICAgbGV0IHQsIHUsIHY7CiAgICBjb25zdCBzdGF0ZSA9IG5ldyBVaW50OEFycmF5KDE2KTsKICAgIHN0YXRlLnNldChpbnB1dCk7CiAgICBmb3IgKGxldCBqID0gMDsgaiA8IDE2OyArK2opIHsKICAgICAgc3RhdGVbal0gXj0ga2V5W2pdOwogICAgfQogICAgZm9yIChsZXQgaSA9IDE7IGkgPCB0aGlzLl9jeWNsZXNPZlJlcGV0aXRpb247IGkrKykgewogICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDE2OyArK2opIHsKICAgICAgICBzdGF0ZVtqXSA9IHNbc3RhdGVbal1dOwogICAgICB9CiAgICAgIHYgPSBzdGF0ZVsxXTsKICAgICAgc3RhdGVbMV0gPSBzdGF0ZVs1XTsKICAgICAgc3RhdGVbNV0gPSBzdGF0ZVs5XTsKICAgICAgc3RhdGVbOV0gPSBzdGF0ZVsxM107CiAgICAgIHN0YXRlWzEzXSA9IHY7CiAgICAgIHYgPSBzdGF0ZVsyXTsKICAgICAgdSA9IHN0YXRlWzZdOwogICAgICBzdGF0ZVsyXSA9IHN0YXRlWzEwXTsKICAgICAgc3RhdGVbNl0gPSBzdGF0ZVsxNF07CiAgICAgIHN0YXRlWzEwXSA9IHY7CiAgICAgIHN0YXRlWzE0XSA9IHU7CiAgICAgIHYgPSBzdGF0ZVszXTsKICAgICAgdSA9IHN0YXRlWzddOwogICAgICB0ID0gc3RhdGVbMTFdOwogICAgICBzdGF0ZVszXSA9IHN0YXRlWzE1XTsKICAgICAgc3RhdGVbN10gPSB2OwogICAgICBzdGF0ZVsxMV0gPSB1OwogICAgICBzdGF0ZVsxNV0gPSB0OwogICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDE2OyBqICs9IDQpIHsKICAgICAgICBjb25zdCBzMCA9IHN0YXRlW2pdOwogICAgICAgIGNvbnN0IHMxID0gc3RhdGVbaiArIDFdOwogICAgICAgIGNvbnN0IHMyID0gc3RhdGVbaiArIDJdOwogICAgICAgIGNvbnN0IHMzID0gc3RhdGVbaiArIDNdOwogICAgICAgIHQgPSBzMCBeIHMxIF4gczIgXiBzMzsKICAgICAgICBzdGF0ZVtqXSBePSB0IF4gdGhpcy5fbWl4Q29sW3MwIF4gczFdOwogICAgICAgIHN0YXRlW2ogKyAxXSBePSB0IF4gdGhpcy5fbWl4Q29sW3MxIF4gczJdOwogICAgICAgIHN0YXRlW2ogKyAyXSBePSB0IF4gdGhpcy5fbWl4Q29sW3MyIF4gczNdOwogICAgICAgIHN0YXRlW2ogKyAzXSBePSB0IF4gdGhpcy5fbWl4Q29sW3MzIF4gczBdOwogICAgICB9CiAgICAgIGZvciAobGV0IGogPSAwLCBrID0gaSAqIDE2OyBqIDwgMTY7ICsraiwgKytrKSB7CiAgICAgICAgc3RhdGVbal0gXj0ga2V5W2tdOwogICAgICB9CiAgICB9CiAgICBmb3IgKGxldCBqID0gMDsgaiA8IDE2OyArK2opIHsKICAgICAgc3RhdGVbal0gPSBzW3N0YXRlW2pdXTsKICAgIH0KICAgIHYgPSBzdGF0ZVsxXTsKICAgIHN0YXRlWzFdID0gc3RhdGVbNV07CiAgICBzdGF0ZVs1XSA9IHN0YXRlWzldOwogICAgc3RhdGVbOV0gPSBzdGF0ZVsxM107CiAgICBzdGF0ZVsxM10gPSB2OwogICAgdiA9IHN0YXRlWzJdOwogICAgdSA9IHN0YXRlWzZdOwogICAgc3RhdGVbMl0gPSBzdGF0ZVsxMF07CiAgICBzdGF0ZVs2XSA9IHN0YXRlWzE0XTsKICAgIHN0YXRlWzEwXSA9IHY7CiAgICBzdGF0ZVsxNF0gPSB1OwogICAgdiA9IHN0YXRlWzNdOwogICAgdSA9IHN0YXRlWzddOwogICAgdCA9IHN0YXRlWzExXTsKICAgIHN0YXRlWzNdID0gc3RhdGVbMTVdOwogICAgc3RhdGVbN10gPSB2OwogICAgc3RhdGVbMTFdID0gdTsKICAgIHN0YXRlWzE1XSA9IHQ7CiAgICBmb3IgKGxldCBqID0gMCwgayA9IHRoaXMuX2tleVNpemU7IGogPCAxNjsgKytqLCArK2spIHsKICAgICAgc3RhdGVbal0gXj0ga2V5W2tdOwogICAgfQogICAgcmV0dXJuIHN0YXRlOwogIH0KICBfZGVjcnlwdEJsb2NrMihkYXRhLCBmaW5hbGl6ZSkgewogICAgY29uc3Qgc291cmNlTGVuZ3RoID0gZGF0YS5sZW5ndGg7CiAgICBsZXQgYnVmZmVyID0gdGhpcy5idWZmZXIsCiAgICAgIGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyUG9zaXRpb247CiAgICBjb25zdCByZXN1bHQgPSBbXTsKICAgIGxldCBpdiA9IHRoaXMuaXY7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvdXJjZUxlbmd0aDsgKytpKSB7CiAgICAgIGJ1ZmZlcltidWZmZXJMZW5ndGhdID0gZGF0YVtpXTsKICAgICAgKytidWZmZXJMZW5ndGg7CiAgICAgIGlmIChidWZmZXJMZW5ndGggPCAxNikgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGNvbnN0IHBsYWluID0gdGhpcy5fZGVjcnlwdChidWZmZXIsIHRoaXMuX2tleSk7CiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgMTY7ICsraikgewogICAgICAgIHBsYWluW2pdIF49IGl2W2pdOwogICAgICB9CiAgICAgIGl2ID0gYnVmZmVyOwogICAgICByZXN1bHQucHVzaChwbGFpbik7CiAgICAgIGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDE2KTsKICAgICAgYnVmZmVyTGVuZ3RoID0gMDsKICAgIH0KICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyOwogICAgdGhpcy5idWZmZXJMZW5ndGggPSBidWZmZXJMZW5ndGg7CiAgICB0aGlzLml2ID0gaXY7CiAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMCkgewogICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7CiAgICB9CiAgICBsZXQgb3V0cHV0TGVuZ3RoID0gMTYgKiByZXN1bHQubGVuZ3RoOwogICAgaWYgKGZpbmFsaXplKSB7CiAgICAgIGNvbnN0IGxhc3RCbG9jayA9IHJlc3VsdC5hdCgtMSk7CiAgICAgIGxldCBwc0xlbiA9IGxhc3RCbG9ja1sxNV07CiAgICAgIGlmIChwc0xlbiA8PSAxNikgewogICAgICAgIGZvciAobGV0IGkgPSAxNSwgaWkgPSAxNiAtIHBzTGVuOyBpID49IGlpOyAtLWkpIHsKICAgICAgICAgIGlmIChsYXN0QmxvY2tbaV0gIT09IHBzTGVuKSB7CiAgICAgICAgICAgIHBzTGVuID0gMDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIG91dHB1dExlbmd0aCAtPSBwc0xlbjsKICAgICAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdID0gbGFzdEJsb2NrLnN1YmFycmF5KDAsIDE2IC0gcHNMZW4pOwogICAgICB9CiAgICB9CiAgICBjb25zdCBvdXRwdXQgPSBuZXcgVWludDhBcnJheShvdXRwdXRMZW5ndGgpOwogICAgZm9yIChsZXQgaSA9IDAsIGogPSAwLCBpaSA9IHJlc3VsdC5sZW5ndGg7IGkgPCBpaTsgKytpLCBqICs9IDE2KSB7CiAgICAgIG91dHB1dC5zZXQocmVzdWx0W2ldLCBqKTsKICAgIH0KICAgIHJldHVybiBvdXRwdXQ7CiAgfQogIGRlY3J5cHRCbG9jayhkYXRhLCBmaW5hbGl6ZSwgaXYgPSBudWxsKSB7CiAgICBjb25zdCBzb3VyY2VMZW5ndGggPSBkYXRhLmxlbmd0aDsKICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuYnVmZmVyOwogICAgbGV0IGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyUG9zaXRpb247CiAgICBpZiAoaXYpIHsKICAgICAgdGhpcy5pdiA9IGl2OwogICAgfSBlbHNlIHsKICAgICAgZm9yIChsZXQgaSA9IDA7IGJ1ZmZlckxlbmd0aCA8IDE2ICYmIGkgPCBzb3VyY2VMZW5ndGg7ICsraSwgKytidWZmZXJMZW5ndGgpIHsKICAgICAgICBidWZmZXJbYnVmZmVyTGVuZ3RoXSA9IGRhdGFbaV07CiAgICAgIH0KICAgICAgaWYgKGJ1ZmZlckxlbmd0aCA8IDE2KSB7CiAgICAgICAgdGhpcy5idWZmZXJMZW5ndGggPSBidWZmZXJMZW5ndGg7CiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KDApOwogICAgICB9CiAgICAgIHRoaXMuaXYgPSBidWZmZXI7CiAgICAgIGRhdGEgPSBkYXRhLnN1YmFycmF5KDE2KTsKICAgIH0KICAgIHRoaXMuYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoMTYpOwogICAgdGhpcy5idWZmZXJMZW5ndGggPSAwOwogICAgdGhpcy5kZWNyeXB0QmxvY2sgPSB0aGlzLl9kZWNyeXB0QmxvY2syOwogICAgcmV0dXJuIHRoaXMuZGVjcnlwdEJsb2NrKGRhdGEsIGZpbmFsaXplKTsKICB9CiAgZW5jcnlwdChkYXRhLCBpdikgewogICAgY29uc3Qgc291cmNlTGVuZ3RoID0gZGF0YS5sZW5ndGg7CiAgICBsZXQgYnVmZmVyID0gdGhpcy5idWZmZXIsCiAgICAgIGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyUG9zaXRpb247CiAgICBjb25zdCByZXN1bHQgPSBbXTsKICAgIGl2IHx8PSBuZXcgVWludDhBcnJheSgxNik7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvdXJjZUxlbmd0aDsgKytpKSB7CiAgICAgIGJ1ZmZlcltidWZmZXJMZW5ndGhdID0gZGF0YVtpXTsKICAgICAgKytidWZmZXJMZW5ndGg7CiAgICAgIGlmIChidWZmZXJMZW5ndGggPCAxNikgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgMTY7ICsraikgewogICAgICAgIGJ1ZmZlcltqXSBePSBpdltqXTsKICAgICAgfQogICAgICBjb25zdCBjaXBoZXIgPSB0aGlzLl9lbmNyeXB0KGJ1ZmZlciwgdGhpcy5fa2V5KTsKICAgICAgaXYgPSBjaXBoZXI7CiAgICAgIHJlc3VsdC5wdXNoKGNpcGhlcik7CiAgICAgIGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDE2KTsKICAgICAgYnVmZmVyTGVuZ3RoID0gMDsKICAgIH0KICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyOwogICAgdGhpcy5idWZmZXJMZW5ndGggPSBidWZmZXJMZW5ndGg7CiAgICB0aGlzLml2ID0gaXY7CiAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMCkgewogICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7CiAgICB9CiAgICBjb25zdCBvdXRwdXRMZW5ndGggPSAxNiAqIHJlc3VsdC5sZW5ndGg7CiAgICBjb25zdCBvdXRwdXQgPSBuZXcgVWludDhBcnJheShvdXRwdXRMZW5ndGgpOwogICAgZm9yIChsZXQgaSA9IDAsIGogPSAwLCBpaSA9IHJlc3VsdC5sZW5ndGg7IGkgPCBpaTsgKytpLCBqICs9IDE2KSB7CiAgICAgIG91dHB1dC5zZXQocmVzdWx0W2ldLCBqKTsKICAgIH0KICAgIHJldHVybiBvdXRwdXQ7CiAgfQp9CmNsYXNzIEFFUzEyOENpcGhlciBleHRlbmRzIEFFU0Jhc2VDaXBoZXIgewogIF9yY29uID0gbmV3IFVpbnQ4QXJyYXkoWzB4OGQsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MWIsIDB4MzYsIDB4NmMsIDB4ZDgsIDB4YWIsIDB4NGQsIDB4OWEsIDB4MmYsIDB4NWUsIDB4YmMsIDB4NjMsIDB4YzYsIDB4OTcsIDB4MzUsIDB4NmEsIDB4ZDQsIDB4YjMsIDB4N2QsIDB4ZmEsIDB4ZWYsIDB4YzUsIDB4OTEsIDB4MzksIDB4NzIsIDB4ZTQsIDB4ZDMsIDB4YmQsIDB4NjEsIDB4YzIsIDB4OWYsIDB4MjUsIDB4NGEsIDB4OTQsIDB4MzMsIDB4NjYsIDB4Y2MsIDB4ODMsIDB4MWQsIDB4M2EsIDB4NzQsIDB4ZTgsIDB4Y2IsIDB4OGQsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MWIsIDB4MzYsIDB4NmMsIDB4ZDgsIDB4YWIsIDB4NGQsIDB4OWEsIDB4MmYsIDB4NWUsIDB4YmMsIDB4NjMsIDB4YzYsIDB4OTcsIDB4MzUsIDB4NmEsIDB4ZDQsIDB4YjMsIDB4N2QsIDB4ZmEsIDB4ZWYsIDB4YzUsIDB4OTEsIDB4MzksIDB4NzIsIDB4ZTQsIDB4ZDMsIDB4YmQsIDB4NjEsIDB4YzIsIDB4OWYsIDB4MjUsIDB4NGEsIDB4OTQsIDB4MzMsIDB4NjYsIDB4Y2MsIDB4ODMsIDB4MWQsIDB4M2EsIDB4NzQsIDB4ZTgsIDB4Y2IsIDB4OGQsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MWIsIDB4MzYsIDB4NmMsIDB4ZDgsIDB4YWIsIDB4NGQsIDB4OWEsIDB4MmYsIDB4NWUsIDB4YmMsIDB4NjMsIDB4YzYsIDB4OTcsIDB4MzUsIDB4NmEsIDB4ZDQsIDB4YjMsIDB4N2QsIDB4ZmEsIDB4ZWYsIDB4YzUsIDB4OTEsIDB4MzksIDB4NzIsIDB4ZTQsIDB4ZDMsIDB4YmQsIDB4NjEsIDB4YzIsIDB4OWYsIDB4MjUsIDB4NGEsIDB4OTQsIDB4MzMsIDB4NjYsIDB4Y2MsIDB4ODMsIDB4MWQsIDB4M2EsIDB4NzQsIDB4ZTgsIDB4Y2IsIDB4OGQsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MWIsIDB4MzYsIDB4NmMsIDB4ZDgsIDB4YWIsIDB4NGQsIDB4OWEsIDB4MmYsIDB4NWUsIDB4YmMsIDB4NjMsIDB4YzYsIDB4OTcsIDB4MzUsIDB4NmEsIDB4ZDQsIDB4YjMsIDB4N2QsIDB4ZmEsIDB4ZWYsIDB4YzUsIDB4OTEsIDB4MzksIDB4NzIsIDB4ZTQsIDB4ZDMsIDB4YmQsIDB4NjEsIDB4YzIsIDB4OWYsIDB4MjUsIDB4NGEsIDB4OTQsIDB4MzMsIDB4NjYsIDB4Y2MsIDB4ODMsIDB4MWQsIDB4M2EsIDB4NzQsIDB4ZTgsIDB4Y2IsIDB4OGQsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MWIsIDB4MzYsIDB4NmMsIDB4ZDgsIDB4YWIsIDB4NGQsIDB4OWEsIDB4MmYsIDB4NWUsIDB4YmMsIDB4NjMsIDB4YzYsIDB4OTcsIDB4MzUsIDB4NmEsIDB4ZDQsIDB4YjMsIDB4N2QsIDB4ZmEsIDB4ZWYsIDB4YzUsIDB4OTEsIDB4MzksIDB4NzIsIDB4ZTQsIDB4ZDMsIDB4YmQsIDB4NjEsIDB4YzIsIDB4OWYsIDB4MjUsIDB4NGEsIDB4OTQsIDB4MzMsIDB4NjYsIDB4Y2MsIDB4ODMsIDB4MWQsIDB4M2EsIDB4NzQsIDB4ZTgsIDB4Y2IsIDB4OGRdKTsKICBjb25zdHJ1Y3RvcihrZXkpIHsKICAgIHN1cGVyKCk7CiAgICB0aGlzLl9jeWNsZXNPZlJlcGV0aXRpb24gPSAxMDsKICAgIHRoaXMuX2tleVNpemUgPSAxNjA7CiAgICB0aGlzLl9rZXkgPSB0aGlzLl9leHBhbmRLZXkoa2V5KTsKICB9CiAgX2V4cGFuZEtleShjaXBoZXJLZXkpIHsKICAgIGNvbnN0IGIgPSAxNzY7CiAgICBjb25zdCBzID0gdGhpcy5fczsKICAgIGNvbnN0IHJjb24gPSB0aGlzLl9yY29uOwogICAgY29uc3QgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoYik7CiAgICByZXN1bHQuc2V0KGNpcGhlcktleSk7CiAgICBmb3IgKGxldCBqID0gMTYsIGkgPSAxOyBqIDwgYjsgKytpKSB7CiAgICAgIGxldCB0MSA9IHJlc3VsdFtqIC0gM107CiAgICAgIGxldCB0MiA9IHJlc3VsdFtqIC0gMl07CiAgICAgIGxldCB0MyA9IHJlc3VsdFtqIC0gMV07CiAgICAgIGxldCB0NCA9IHJlc3VsdFtqIC0gNF07CiAgICAgIHQxID0gc1t0MV07CiAgICAgIHQyID0gc1t0Ml07CiAgICAgIHQzID0gc1t0M107CiAgICAgIHQ0ID0gc1t0NF07CiAgICAgIHQxIF49IHJjb25baV07CiAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgNDsgKytuKSB7CiAgICAgICAgcmVzdWx0W2pdID0gdDEgXj0gcmVzdWx0W2ogLSAxNl07CiAgICAgICAgaisrOwogICAgICAgIHJlc3VsdFtqXSA9IHQyIF49IHJlc3VsdFtqIC0gMTZdOwogICAgICAgIGorKzsKICAgICAgICByZXN1bHRbal0gPSB0MyBePSByZXN1bHRbaiAtIDE2XTsKICAgICAgICBqKys7CiAgICAgICAgcmVzdWx0W2pdID0gdDQgXj0gcmVzdWx0W2ogLSAxNl07CiAgICAgICAgaisrOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQpjbGFzcyBBRVMyNTZDaXBoZXIgZXh0ZW5kcyBBRVNCYXNlQ2lwaGVyIHsKICBjb25zdHJ1Y3RvcihrZXkpIHsKICAgIHN1cGVyKCk7CiAgICB0aGlzLl9jeWNsZXNPZlJlcGV0aXRpb24gPSAxNDsKICAgIHRoaXMuX2tleVNpemUgPSAyMjQ7CiAgICB0aGlzLl9rZXkgPSB0aGlzLl9leHBhbmRLZXkoa2V5KTsKICB9CiAgX2V4cGFuZEtleShjaXBoZXJLZXkpIHsKICAgIGNvbnN0IGIgPSAyNDA7CiAgICBjb25zdCBzID0gdGhpcy5fczsKICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KGIpOwogICAgcmVzdWx0LnNldChjaXBoZXJLZXkpOwogICAgbGV0IHIgPSAxOwogICAgbGV0IHQxLCB0MiwgdDMsIHQ0OwogICAgZm9yIChsZXQgaiA9IDMyLCBpID0gMTsgaiA8IGI7ICsraSkgewogICAgICBpZiAoaiAlIDMyID09PSAxNikgewogICAgICAgIHQxID0gc1t0MV07CiAgICAgICAgdDIgPSBzW3QyXTsKICAgICAgICB0MyA9IHNbdDNdOwogICAgICAgIHQ0ID0gc1t0NF07CiAgICAgIH0gZWxzZSBpZiAoaiAlIDMyID09PSAwKSB7CiAgICAgICAgdDEgPSByZXN1bHRbaiAtIDNdOwogICAgICAgIHQyID0gcmVzdWx0W2ogLSAyXTsKICAgICAgICB0MyA9IHJlc3VsdFtqIC0gMV07CiAgICAgICAgdDQgPSByZXN1bHRbaiAtIDRdOwogICAgICAgIHQxID0gc1t0MV07CiAgICAgICAgdDIgPSBzW3QyXTsKICAgICAgICB0MyA9IHNbdDNdOwogICAgICAgIHQ0ID0gc1t0NF07CiAgICAgICAgdDEgXj0gcjsKICAgICAgICBpZiAoKHIgPDw9IDEpID49IDI1NikgewogICAgICAgICAgciA9IChyIF4gMHgxYikgJiAweGZmOwogICAgICAgIH0KICAgICAgfQogICAgICBmb3IgKGxldCBuID0gMDsgbiA8IDQ7ICsrbikgewogICAgICAgIHJlc3VsdFtqXSA9IHQxIF49IHJlc3VsdFtqIC0gMzJdOwogICAgICAgIGorKzsKICAgICAgICByZXN1bHRbal0gPSB0MiBePSByZXN1bHRbaiAtIDMyXTsKICAgICAgICBqKys7CiAgICAgICAgcmVzdWx0W2pdID0gdDMgXj0gcmVzdWx0W2ogLSAzMl07CiAgICAgICAgaisrOwogICAgICAgIHJlc3VsdFtqXSA9IHQ0IF49IHJlc3VsdFtqIC0gMzJdOwogICAgICAgIGorKzsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0KY2xhc3MgUERGQmFzZSB7CiAgX2hhc2gocGFzc3dvcmQsIGlucHV0LCB1c2VyQnl0ZXMpIHsKICAgIHVucmVhY2hhYmxlKCJBYnN0cmFjdCBtZXRob2QgYF9oYXNoYCBjYWxsZWQiKTsKICB9CiAgY2hlY2tPd25lclBhc3N3b3JkKHBhc3N3b3JkLCBvd25lclZhbGlkYXRpb25TYWx0LCB1c2VyQnl0ZXMsIG93bmVyUGFzc3dvcmQpIHsKICAgIGNvbnN0IGhhc2hEYXRhID0gbmV3IFVpbnQ4QXJyYXkocGFzc3dvcmQubGVuZ3RoICsgNTYpOwogICAgaGFzaERhdGEuc2V0KHBhc3N3b3JkLCAwKTsKICAgIGhhc2hEYXRhLnNldChvd25lclZhbGlkYXRpb25TYWx0LCBwYXNzd29yZC5sZW5ndGgpOwogICAgaGFzaERhdGEuc2V0KHVzZXJCeXRlcywgcGFzc3dvcmQubGVuZ3RoICsgb3duZXJWYWxpZGF0aW9uU2FsdC5sZW5ndGgpOwogICAgY29uc3QgcmVzdWx0ID0gdGhpcy5faGFzaChwYXNzd29yZCwgaGFzaERhdGEsIHVzZXJCeXRlcyk7CiAgICByZXR1cm4gaXNBcnJheUVxdWFsKHJlc3VsdCwgb3duZXJQYXNzd29yZCk7CiAgfQogIGNoZWNrVXNlclBhc3N3b3JkKHBhc3N3b3JkLCB1c2VyVmFsaWRhdGlvblNhbHQsIHVzZXJQYXNzd29yZCkgewogICAgY29uc3QgaGFzaERhdGEgPSBuZXcgVWludDhBcnJheShwYXNzd29yZC5sZW5ndGggKyA4KTsKICAgIGhhc2hEYXRhLnNldChwYXNzd29yZCwgMCk7CiAgICBoYXNoRGF0YS5zZXQodXNlclZhbGlkYXRpb25TYWx0LCBwYXNzd29yZC5sZW5ndGgpOwogICAgY29uc3QgcmVzdWx0ID0gdGhpcy5faGFzaChwYXNzd29yZCwgaGFzaERhdGEsIFtdKTsKICAgIHJldHVybiBpc0FycmF5RXF1YWwocmVzdWx0LCB1c2VyUGFzc3dvcmQpOwogIH0KICBnZXRPd25lcktleShwYXNzd29yZCwgb3duZXJLZXlTYWx0LCB1c2VyQnl0ZXMsIG93bmVyRW5jcnlwdGlvbikgewogICAgY29uc3QgaGFzaERhdGEgPSBuZXcgVWludDhBcnJheShwYXNzd29yZC5sZW5ndGggKyA1Nik7CiAgICBoYXNoRGF0YS5zZXQocGFzc3dvcmQsIDApOwogICAgaGFzaERhdGEuc2V0KG93bmVyS2V5U2FsdCwgcGFzc3dvcmQubGVuZ3RoKTsKICAgIGhhc2hEYXRhLnNldCh1c2VyQnl0ZXMsIHBhc3N3b3JkLmxlbmd0aCArIG93bmVyS2V5U2FsdC5sZW5ndGgpOwogICAgY29uc3Qga2V5ID0gdGhpcy5faGFzaChwYXNzd29yZCwgaGFzaERhdGEsIHVzZXJCeXRlcyk7CiAgICBjb25zdCBjaXBoZXIgPSBuZXcgQUVTMjU2Q2lwaGVyKGtleSk7CiAgICByZXR1cm4gY2lwaGVyLmRlY3J5cHRCbG9jayhvd25lckVuY3J5cHRpb24sIGZhbHNlLCBuZXcgVWludDhBcnJheSgxNikpOwogIH0KICBnZXRVc2VyS2V5KHBhc3N3b3JkLCB1c2VyS2V5U2FsdCwgdXNlckVuY3J5cHRpb24pIHsKICAgIGNvbnN0IGhhc2hEYXRhID0gbmV3IFVpbnQ4QXJyYXkocGFzc3dvcmQubGVuZ3RoICsgOCk7CiAgICBoYXNoRGF0YS5zZXQocGFzc3dvcmQsIDApOwogICAgaGFzaERhdGEuc2V0KHVzZXJLZXlTYWx0LCBwYXNzd29yZC5sZW5ndGgpOwogICAgY29uc3Qga2V5ID0gdGhpcy5faGFzaChwYXNzd29yZCwgaGFzaERhdGEsIFtdKTsKICAgIGNvbnN0IGNpcGhlciA9IG5ldyBBRVMyNTZDaXBoZXIoa2V5KTsKICAgIHJldHVybiBjaXBoZXIuZGVjcnlwdEJsb2NrKHVzZXJFbmNyeXB0aW9uLCBmYWxzZSwgbmV3IFVpbnQ4QXJyYXkoMTYpKTsKICB9Cn0KY2xhc3MgUERGMTcgZXh0ZW5kcyBQREZCYXNlIHsKICBfaGFzaChwYXNzd29yZCwgaW5wdXQsIHVzZXJCeXRlcykgewogICAgcmV0dXJuIGNhbGN1bGF0ZVNIQTI1NihpbnB1dCwgMCwgaW5wdXQubGVuZ3RoKTsKICB9Cn0KY2xhc3MgUERGMjAgZXh0ZW5kcyBQREZCYXNlIHsKICBfaGFzaChwYXNzd29yZCwgaW5wdXQsIHVzZXJCeXRlcykgewogICAgbGV0IGsgPSBjYWxjdWxhdGVTSEEyNTYoaW5wdXQsIDAsIGlucHV0Lmxlbmd0aCkuc3ViYXJyYXkoMCwgMzIpOwogICAgbGV0IGUgPSBbMF07CiAgICBsZXQgaSA9IDA7CiAgICB3aGlsZSAoaSA8IDY0IHx8IGUuYXQoLTEpID4gaSAtIDMyKSB7CiAgICAgIGNvbnN0IGNvbWJpbmVkTGVuZ3RoID0gcGFzc3dvcmQubGVuZ3RoICsgay5sZW5ndGggKyB1c2VyQnl0ZXMubGVuZ3RoLAogICAgICAgIGNvbWJpbmVkQXJyYXkgPSBuZXcgVWludDhBcnJheShjb21iaW5lZExlbmd0aCk7CiAgICAgIGxldCB3cml0ZU9mZnNldCA9IDA7CiAgICAgIGNvbWJpbmVkQXJyYXkuc2V0KHBhc3N3b3JkLCB3cml0ZU9mZnNldCk7CiAgICAgIHdyaXRlT2Zmc2V0ICs9IHBhc3N3b3JkLmxlbmd0aDsKICAgICAgY29tYmluZWRBcnJheS5zZXQoaywgd3JpdGVPZmZzZXQpOwogICAgICB3cml0ZU9mZnNldCArPSBrLmxlbmd0aDsKICAgICAgY29tYmluZWRBcnJheS5zZXQodXNlckJ5dGVzLCB3cml0ZU9mZnNldCk7CiAgICAgIGNvbnN0IGsxID0gbmV3IFVpbnQ4QXJyYXkoY29tYmluZWRMZW5ndGggKiA2NCk7CiAgICAgIGZvciAobGV0IGogPSAwLCBwb3MgPSAwOyBqIDwgNjQ7IGorKywgcG9zICs9IGNvbWJpbmVkTGVuZ3RoKSB7CiAgICAgICAgazEuc2V0KGNvbWJpbmVkQXJyYXksIHBvcyk7CiAgICAgIH0KICAgICAgY29uc3QgY2lwaGVyID0gbmV3IEFFUzEyOENpcGhlcihrLnN1YmFycmF5KDAsIDE2KSk7CiAgICAgIGUgPSBjaXBoZXIuZW5jcnlwdChrMSwgay5zdWJhcnJheSgxNiwgMzIpKTsKICAgICAgY29uc3QgcmVtYWluZGVyID0gTWF0aC5zdW1QcmVjaXNlKGUuc2xpY2UoMCwgMTYpKSAlIDM7CiAgICAgIGlmIChyZW1haW5kZXIgPT09IDApIHsKICAgICAgICBrID0gY2FsY3VsYXRlU0hBMjU2KGUsIDAsIGUubGVuZ3RoKTsKICAgICAgfSBlbHNlIGlmIChyZW1haW5kZXIgPT09IDEpIHsKICAgICAgICBrID0gY2FsY3VsYXRlU0hBMzg0KGUsIDAsIGUubGVuZ3RoKTsKICAgICAgfSBlbHNlIGlmIChyZW1haW5kZXIgPT09IDIpIHsKICAgICAgICBrID0gY2FsY3VsYXRlU0hBNTEyKGUsIDAsIGUubGVuZ3RoKTsKICAgICAgfQogICAgICBpKys7CiAgICB9CiAgICByZXR1cm4gay5zdWJhcnJheSgwLCAzMik7CiAgfQp9CmNsYXNzIENpcGhlclRyYW5zZm9ybSB7CiAgY29uc3RydWN0b3Ioc3RyaW5nQ2lwaGVyQ29uc3RydWN0b3IsIHN0cmVhbUNpcGhlckNvbnN0cnVjdG9yKSB7CiAgICB0aGlzLlN0cmluZ0NpcGhlckNvbnN0cnVjdG9yID0gc3RyaW5nQ2lwaGVyQ29uc3RydWN0b3I7CiAgICB0aGlzLlN0cmVhbUNpcGhlckNvbnN0cnVjdG9yID0gc3RyZWFtQ2lwaGVyQ29uc3RydWN0b3I7CiAgfQogIGNyZWF0ZVN0cmVhbShzdHJlYW0sIGxlbmd0aCkgewogICAgY29uc3QgY2lwaGVyID0gbmV3IHRoaXMuU3RyZWFtQ2lwaGVyQ29uc3RydWN0b3IoKTsKICAgIHJldHVybiBuZXcgRGVjcnlwdFN0cmVhbShzdHJlYW0sIGxlbmd0aCwgZnVuY3Rpb24gY2lwaGVyVHJhbnNmb3JtRGVjcnlwdFN0cmVhbShkYXRhLCBmaW5hbGl6ZSkgewogICAgICByZXR1cm4gY2lwaGVyLmRlY3J5cHRCbG9jayhkYXRhLCBmaW5hbGl6ZSk7CiAgICB9KTsKICB9CiAgZGVjcnlwdFN0cmluZyhzKSB7CiAgICBjb25zdCBjaXBoZXIgPSBuZXcgdGhpcy5TdHJpbmdDaXBoZXJDb25zdHJ1Y3RvcigpOwogICAgbGV0IGRhdGEgPSBzdHJpbmdUb0J5dGVzKHMpOwogICAgZGF0YSA9IGNpcGhlci5kZWNyeXB0QmxvY2soZGF0YSwgdHJ1ZSk7CiAgICByZXR1cm4gYnl0ZXNUb1N0cmluZyhkYXRhKTsKICB9CiAgZW5jcnlwdFN0cmluZyhzKSB7CiAgICBjb25zdCBjaXBoZXIgPSBuZXcgdGhpcy5TdHJpbmdDaXBoZXJDb25zdHJ1Y3RvcigpOwogICAgaWYgKGNpcGhlciBpbnN0YW5jZW9mIEFFU0Jhc2VDaXBoZXIpIHsKICAgICAgY29uc3Qgc3RyTGVuID0gcy5sZW5ndGg7CiAgICAgIGNvbnN0IHBhZCA9IDE2IC0gc3RyTGVuICUgMTY7CiAgICAgIHMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShwYWQpLnJlcGVhdChwYWQpOwogICAgICBjb25zdCBpdiA9IG5ldyBVaW50OEFycmF5KDE2KTsKICAgICAgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhpdik7CiAgICAgIGxldCBkYXRhID0gc3RyaW5nVG9CeXRlcyhzKTsKICAgICAgZGF0YSA9IGNpcGhlci5lbmNyeXB0KGRhdGEsIGl2KTsKICAgICAgY29uc3QgYnVmID0gbmV3IFVpbnQ4QXJyYXkoMTYgKyBkYXRhLmxlbmd0aCk7CiAgICAgIGJ1Zi5zZXQoaXYpOwogICAgICBidWYuc2V0KGRhdGEsIDE2KTsKICAgICAgcmV0dXJuIGJ5dGVzVG9TdHJpbmcoYnVmKTsKICAgIH0KICAgIGxldCBkYXRhID0gc3RyaW5nVG9CeXRlcyhzKTsKICAgIGRhdGEgPSBjaXBoZXIuZW5jcnlwdChkYXRhKTsKICAgIHJldHVybiBieXRlc1RvU3RyaW5nKGRhdGEpOwogIH0KfQpjbGFzcyBDaXBoZXJUcmFuc2Zvcm1GYWN0b3J5IHsKICBzdGF0aWMgZ2V0IF9kZWZhdWx0UGFzc3dvcmRCeXRlcygpIHsKICAgIHJldHVybiBzaGFkb3codGhpcywgIl9kZWZhdWx0UGFzc3dvcmRCeXRlcyIsIG5ldyBVaW50OEFycmF5KFsweDI4LCAweGJmLCAweDRlLCAweDVlLCAweDRlLCAweDc1LCAweDhhLCAweDQxLCAweDY0LCAweDAwLCAweDRlLCAweDU2LCAweGZmLCAweGZhLCAweDAxLCAweDA4LCAweDJlLCAweDJlLCAweDAwLCAweGI2LCAweGQwLCAweDY4LCAweDNlLCAweDgwLCAweDJmLCAweDBjLCAweGE5LCAweGZlLCAweDY0LCAweDUzLCAweDY5LCAweDdhXSkpOwogIH0KICAjY3JlYXRlRW5jcnlwdGlvbktleTIwKHJldmlzaW9uLCBwYXNzd29yZCwgb3duZXJQYXNzd29yZCwgb3duZXJWYWxpZGF0aW9uU2FsdCwgb3duZXJLZXlTYWx0LCB1Qnl0ZXMsIHVzZXJQYXNzd29yZCwgdXNlclZhbGlkYXRpb25TYWx0LCB1c2VyS2V5U2FsdCwgb3duZXJFbmNyeXB0aW9uLCB1c2VyRW5jcnlwdGlvbiwgcGVybXMpIHsKICAgIGlmIChwYXNzd29yZCkgewogICAgICBjb25zdCBwYXNzd29yZExlbmd0aCA9IE1hdGgubWluKDEyNywgcGFzc3dvcmQubGVuZ3RoKTsKICAgICAgcGFzc3dvcmQgPSBwYXNzd29yZC5zdWJhcnJheSgwLCBwYXNzd29yZExlbmd0aCk7CiAgICB9IGVsc2UgewogICAgICBwYXNzd29yZCA9IFtdOwogICAgfQogICAgY29uc3QgcGRmQWxnb3JpdGhtID0gcmV2aXNpb24gPT09IDYgPyBuZXcgUERGMjAoKSA6IG5ldyBQREYxNygpOwogICAgaWYgKHBkZkFsZ29yaXRobS5jaGVja1VzZXJQYXNzd29yZChwYXNzd29yZCwgdXNlclZhbGlkYXRpb25TYWx0LCB1c2VyUGFzc3dvcmQpKSB7CiAgICAgIHJldHVybiBwZGZBbGdvcml0aG0uZ2V0VXNlcktleShwYXNzd29yZCwgdXNlcktleVNhbHQsIHVzZXJFbmNyeXB0aW9uKTsKICAgIH0gZWxzZSBpZiAocGFzc3dvcmQubGVuZ3RoICYmIHBkZkFsZ29yaXRobS5jaGVja093bmVyUGFzc3dvcmQocGFzc3dvcmQsIG93bmVyVmFsaWRhdGlvblNhbHQsIHVCeXRlcywgb3duZXJQYXNzd29yZCkpIHsKICAgICAgcmV0dXJuIHBkZkFsZ29yaXRobS5nZXRPd25lcktleShwYXNzd29yZCwgb3duZXJLZXlTYWx0LCB1Qnl0ZXMsIG93bmVyRW5jcnlwdGlvbik7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CiAgI3ByZXBhcmVLZXlEYXRhKGZpbGVJZCwgcGFzc3dvcmQsIG93bmVyUGFzc3dvcmQsIHVzZXJQYXNzd29yZCwgZmxhZ3MsIHJldmlzaW9uLCBrZXlMZW5ndGgsIGVuY3J5cHRNZXRhZGF0YSkgewogICAgY29uc3QgaGFzaERhdGFTaXplID0gNDAgKyBvd25lclBhc3N3b3JkLmxlbmd0aCArIGZpbGVJZC5sZW5ndGg7CiAgICBjb25zdCBoYXNoRGF0YSA9IG5ldyBVaW50OEFycmF5KGhhc2hEYXRhU2l6ZSk7CiAgICBsZXQgaSA9IDAsCiAgICAgIGosCiAgICAgIG47CiAgICBpZiAocGFzc3dvcmQpIHsKICAgICAgbiA9IE1hdGgubWluKDMyLCBwYXNzd29yZC5sZW5ndGgpOwogICAgICBmb3IgKDsgaSA8IG47ICsraSkgewogICAgICAgIGhhc2hEYXRhW2ldID0gcGFzc3dvcmRbaV07CiAgICAgIH0KICAgIH0KICAgIGogPSAwOwogICAgd2hpbGUgKGkgPCAzMikgewogICAgICBoYXNoRGF0YVtpKytdID0gQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeS5fZGVmYXVsdFBhc3N3b3JkQnl0ZXNbaisrXTsKICAgIH0KICAgIGhhc2hEYXRhLnNldChvd25lclBhc3N3b3JkLCBpKTsKICAgIGkgKz0gb3duZXJQYXNzd29yZC5sZW5ndGg7CiAgICBoYXNoRGF0YVtpKytdID0gZmxhZ3MgJiAweGZmOwogICAgaGFzaERhdGFbaSsrXSA9IGZsYWdzID4+IDggJiAweGZmOwogICAgaGFzaERhdGFbaSsrXSA9IGZsYWdzID4+IDE2ICYgMHhmZjsKICAgIGhhc2hEYXRhW2krK10gPSBmbGFncyA+Pj4gMjQgJiAweGZmOwogICAgaGFzaERhdGEuc2V0KGZpbGVJZCwgaSk7CiAgICBpICs9IGZpbGVJZC5sZW5ndGg7CiAgICBpZiAocmV2aXNpb24gPj0gNCAmJiAhZW5jcnlwdE1ldGFkYXRhKSB7CiAgICAgIGhhc2hEYXRhLmZpbGwoMHhmZiwgaSwgaSArIDQpOwogICAgICBpICs9IDQ7CiAgICB9CiAgICBsZXQgaGFzaCA9IGNhbGN1bGF0ZU1ENShoYXNoRGF0YSwgMCwgaSk7CiAgICBjb25zdCBrZXlMZW5ndGhJbkJ5dGVzID0ga2V5TGVuZ3RoID4+IDM7CiAgICBpZiAocmV2aXNpb24gPj0gMykgewogICAgICBmb3IgKGogPSAwOyBqIDwgNTA7ICsraikgewogICAgICAgIGhhc2ggPSBjYWxjdWxhdGVNRDUoaGFzaCwgMCwga2V5TGVuZ3RoSW5CeXRlcyk7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0IGVuY3J5cHRpb25LZXkgPSBoYXNoLnN1YmFycmF5KDAsIGtleUxlbmd0aEluQnl0ZXMpOwogICAgbGV0IGNpcGhlciwgY2hlY2tEYXRhOwogICAgaWYgKHJldmlzaW9uID49IDMpIHsKICAgICAgaSA9IDA7CiAgICAgIGhhc2hEYXRhLnNldChDaXBoZXJUcmFuc2Zvcm1GYWN0b3J5Ll9kZWZhdWx0UGFzc3dvcmRCeXRlcywgaSk7CiAgICAgIGkgKz0gMzI7CiAgICAgIGhhc2hEYXRhLnNldChmaWxlSWQsIGkpOwogICAgICBpICs9IGZpbGVJZC5sZW5ndGg7CiAgICAgIGNpcGhlciA9IG5ldyBBUkNGb3VyQ2lwaGVyKGVuY3J5cHRpb25LZXkpOwogICAgICBjaGVja0RhdGEgPSBjaXBoZXIuZW5jcnlwdEJsb2NrKGNhbGN1bGF0ZU1ENShoYXNoRGF0YSwgMCwgaSkpOwogICAgICBuID0gZW5jcnlwdGlvbktleS5sZW5ndGg7CiAgICAgIGNvbnN0IGRlcml2ZWRLZXkgPSBuZXcgVWludDhBcnJheShuKTsKICAgICAgZm9yIChqID0gMTsgaiA8PSAxOTsgKytqKSB7CiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBuOyArK2spIHsKICAgICAgICAgIGRlcml2ZWRLZXlba10gPSBlbmNyeXB0aW9uS2V5W2tdIF4gajsKICAgICAgICB9CiAgICAgICAgY2lwaGVyID0gbmV3IEFSQ0ZvdXJDaXBoZXIoZGVyaXZlZEtleSk7CiAgICAgICAgY2hlY2tEYXRhID0gY2lwaGVyLmVuY3J5cHRCbG9jayhjaGVja0RhdGEpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBjaXBoZXIgPSBuZXcgQVJDRm91ckNpcGhlcihlbmNyeXB0aW9uS2V5KTsKICAgICAgY2hlY2tEYXRhID0gY2lwaGVyLmVuY3J5cHRCbG9jayhDaXBoZXJUcmFuc2Zvcm1GYWN0b3J5Ll9kZWZhdWx0UGFzc3dvcmRCeXRlcyk7CiAgICB9CiAgICByZXR1cm4gY2hlY2tEYXRhLmV2ZXJ5KChkYXRhLCBrKSA9PiB1c2VyUGFzc3dvcmRba10gPT09IGRhdGEpID8gZW5jcnlwdGlvbktleSA6IG51bGw7CiAgfQogICNkZWNvZGVVc2VyUGFzc3dvcmQocGFzc3dvcmQsIG93bmVyUGFzc3dvcmQsIHJldmlzaW9uLCBrZXlMZW5ndGgpIHsKICAgIGNvbnN0IGhhc2hEYXRhID0gbmV3IFVpbnQ4QXJyYXkoMzIpOwogICAgbGV0IGkgPSAwOwogICAgY29uc3QgbiA9IE1hdGgubWluKDMyLCBwYXNzd29yZC5sZW5ndGgpOwogICAgZm9yICg7IGkgPCBuOyArK2kpIHsKICAgICAgaGFzaERhdGFbaV0gPSBwYXNzd29yZFtpXTsKICAgIH0KICAgIGxldCBqID0gMDsKICAgIHdoaWxlIChpIDwgMzIpIHsKICAgICAgaGFzaERhdGFbaSsrXSA9IENpcGhlclRyYW5zZm9ybUZhY3RvcnkuX2RlZmF1bHRQYXNzd29yZEJ5dGVzW2orK107CiAgICB9CiAgICBsZXQgaGFzaCA9IGNhbGN1bGF0ZU1ENShoYXNoRGF0YSwgMCwgaSk7CiAgICBjb25zdCBrZXlMZW5ndGhJbkJ5dGVzID0ga2V5TGVuZ3RoID4+IDM7CiAgICBpZiAocmV2aXNpb24gPj0gMykgewogICAgICBmb3IgKGogPSAwOyBqIDwgNTA7ICsraikgewogICAgICAgIGhhc2ggPSBjYWxjdWxhdGVNRDUoaGFzaCwgMCwgaGFzaC5sZW5ndGgpOwogICAgICB9CiAgICB9CiAgICBsZXQgY2lwaGVyLCB1c2VyUGFzc3dvcmQ7CiAgICBpZiAocmV2aXNpb24gPj0gMykgewogICAgICB1c2VyUGFzc3dvcmQgPSBvd25lclBhc3N3b3JkOwogICAgICBjb25zdCBkZXJpdmVkS2V5ID0gbmV3IFVpbnQ4QXJyYXkoa2V5TGVuZ3RoSW5CeXRlcyk7CiAgICAgIGZvciAoaiA9IDE5OyBqID49IDA7IGotLSkgewogICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwga2V5TGVuZ3RoSW5CeXRlczsgKytrKSB7CiAgICAgICAgICBkZXJpdmVkS2V5W2tdID0gaGFzaFtrXSBeIGo7CiAgICAgICAgfQogICAgICAgIGNpcGhlciA9IG5ldyBBUkNGb3VyQ2lwaGVyKGRlcml2ZWRLZXkpOwogICAgICAgIHVzZXJQYXNzd29yZCA9IGNpcGhlci5lbmNyeXB0QmxvY2sodXNlclBhc3N3b3JkKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgY2lwaGVyID0gbmV3IEFSQ0ZvdXJDaXBoZXIoaGFzaC5zdWJhcnJheSgwLCBrZXlMZW5ndGhJbkJ5dGVzKSk7CiAgICAgIHVzZXJQYXNzd29yZCA9IGNpcGhlci5lbmNyeXB0QmxvY2sob3duZXJQYXNzd29yZCk7CiAgICB9CiAgICByZXR1cm4gdXNlclBhc3N3b3JkOwogIH0KICAjYnVpbGRPYmplY3RLZXkobnVtLCBnZW4sIGVuY3J5cHRpb25LZXksIGlzQWVzID0gZmFsc2UpIHsKICAgIGNvbnN0IG4gPSBlbmNyeXB0aW9uS2V5Lmxlbmd0aDsKICAgIGNvbnN0IGtleSA9IG5ldyBVaW50OEFycmF5KG4gKyA5KTsKICAgIGtleS5zZXQoZW5jcnlwdGlvbktleSk7CiAgICBsZXQgaSA9IG47CiAgICBrZXlbaSsrXSA9IG51bSAmIDB4ZmY7CiAgICBrZXlbaSsrXSA9IG51bSA+PiA4ICYgMHhmZjsKICAgIGtleVtpKytdID0gbnVtID4+IDE2ICYgMHhmZjsKICAgIGtleVtpKytdID0gZ2VuICYgMHhmZjsKICAgIGtleVtpKytdID0gZ2VuID4+IDggJiAweGZmOwogICAgaWYgKGlzQWVzKSB7CiAgICAgIGtleVtpKytdID0gMHg3MzsKICAgICAga2V5W2krK10gPSAweDQxOwogICAgICBrZXlbaSsrXSA9IDB4NmM7CiAgICAgIGtleVtpKytdID0gMHg1NDsKICAgIH0KICAgIGNvbnN0IGhhc2ggPSBjYWxjdWxhdGVNRDUoa2V5LCAwLCBpKTsKICAgIHJldHVybiBoYXNoLnN1YmFycmF5KDAsIE1hdGgubWluKG4gKyA1LCAxNikpOwogIH0KICAjYnVpbGRDaXBoZXJDb25zdHJ1Y3RvcihjZiwgbmFtZSwgbnVtLCBnZW4sIGtleSkgewogICAgaWYgKCEobmFtZSBpbnN0YW5jZW9mIE5hbWUpKSB7CiAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiSW52YWxpZCBjcnlwdCBmaWx0ZXIgbmFtZS4iKTsKICAgIH0KICAgIGNvbnN0IHNlbGYgPSB0aGlzOwogICAgY29uc3QgY3J5cHRGaWx0ZXIgPSBjZi5nZXQobmFtZS5uYW1lKTsKICAgIGNvbnN0IGNmbSA9IGNyeXB0RmlsdGVyPy5nZXQoIkNGTSIpOwogICAgaWYgKCFjZm0gfHwgY2ZtLm5hbWUgPT09ICJOb25lIikgewogICAgICByZXR1cm4gZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiBuZXcgTnVsbENpcGhlcigpOwogICAgICB9OwogICAgfQogICAgaWYgKGNmbS5uYW1lID09PSAiVjIiKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJuIG5ldyBBUkNGb3VyQ2lwaGVyKHNlbGYuI2J1aWxkT2JqZWN0S2V5KG51bSwgZ2VuLCBrZXksIGZhbHNlKSk7CiAgICAgIH07CiAgICB9CiAgICBpZiAoY2ZtLm5hbWUgPT09ICJBRVNWMiIpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gbmV3IEFFUzEyOENpcGhlcihzZWxmLiNidWlsZE9iamVjdEtleShudW0sIGdlbiwga2V5LCB0cnVlKSk7CiAgICAgIH07CiAgICB9CiAgICBpZiAoY2ZtLm5hbWUgPT09ICJBRVNWMyIpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gbmV3IEFFUzI1NkNpcGhlcihrZXkpOwogICAgICB9OwogICAgfQogICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJVbmtub3duIGNyeXB0byBtZXRob2QiKTsKICB9CiAgY29uc3RydWN0b3IoZGljdCwgZmlsZUlkLCBwYXNzd29yZCkgewogICAgY29uc3QgZmlsdGVyID0gZGljdC5nZXQoIkZpbHRlciIpOwogICAgaWYgKCFpc05hbWUoZmlsdGVyLCAiU3RhbmRhcmQiKSkgewogICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoInVua25vd24gZW5jcnlwdGlvbiBtZXRob2QiKTsKICAgIH0KICAgIHRoaXMuZmlsdGVyTmFtZSA9IGZpbHRlci5uYW1lOwogICAgdGhpcy5kaWN0ID0gZGljdDsKICAgIGNvbnN0IGFsZ29yaXRobSA9IGRpY3QuZ2V0KCJWIik7CiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoYWxnb3JpdGhtKSB8fCBhbGdvcml0aG0gIT09IDEgJiYgYWxnb3JpdGhtICE9PSAyICYmIGFsZ29yaXRobSAhPT0gNCAmJiBhbGdvcml0aG0gIT09IDUpIHsKICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJ1bnN1cHBvcnRlZCBlbmNyeXB0aW9uIGFsZ29yaXRobSIpOwogICAgfQogICAgdGhpcy5hbGdvcml0aG0gPSBhbGdvcml0aG07CiAgICBsZXQga2V5TGVuZ3RoID0gZGljdC5nZXQoIkxlbmd0aCIpOwogICAgaWYgKCFrZXlMZW5ndGgpIHsKICAgICAgaWYgKGFsZ29yaXRobSA8PSAzKSB7CiAgICAgICAga2V5TGVuZ3RoID0gNDA7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29uc3QgY2ZEaWN0ID0gZGljdC5nZXQoIkNGIik7CiAgICAgICAgY29uc3Qgc3RyZWFtQ3J5cHRvTmFtZSA9IGRpY3QuZ2V0KCJTdG1GIik7CiAgICAgICAgaWYgKGNmRGljdCBpbnN0YW5jZW9mIERpY3QgJiYgc3RyZWFtQ3J5cHRvTmFtZSBpbnN0YW5jZW9mIE5hbWUpIHsKICAgICAgICAgIGNmRGljdC5zdXBwcmVzc0VuY3J5cHRpb24gPSB0cnVlOwogICAgICAgICAgY29uc3QgaGFuZGxlckRpY3QgPSBjZkRpY3QuZ2V0KHN0cmVhbUNyeXB0b05hbWUubmFtZSk7CiAgICAgICAgICBrZXlMZW5ndGggPSBoYW5kbGVyRGljdD8uZ2V0KCJMZW5ndGgiKSB8fCAxMjg7CiAgICAgICAgICBpZiAoa2V5TGVuZ3RoIDwgNDApIHsKICAgICAgICAgICAga2V5TGVuZ3RoIDw8PSAzOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGtleUxlbmd0aCkgfHwga2V5TGVuZ3RoIDwgNDAgfHwga2V5TGVuZ3RoICUgOCAhPT0gMCkgewogICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoImludmFsaWQga2V5IGxlbmd0aCIpOwogICAgfQogICAgY29uc3Qgb3duZXJCeXRlcyA9IHN0cmluZ1RvQnl0ZXMoZGljdC5nZXQoIk8iKSksCiAgICAgIHVzZXJCeXRlcyA9IHN0cmluZ1RvQnl0ZXMoZGljdC5nZXQoIlUiKSk7CiAgICBjb25zdCBvd25lclBhc3N3b3JkID0gb3duZXJCeXRlcy5zdWJhcnJheSgwLCAzMik7CiAgICBjb25zdCB1c2VyUGFzc3dvcmQgPSB1c2VyQnl0ZXMuc3ViYXJyYXkoMCwgMzIpOwogICAgY29uc3QgZmxhZ3MgPSBkaWN0LmdldCgiUCIpOwogICAgY29uc3QgcmV2aXNpb24gPSBkaWN0LmdldCgiUiIpOwogICAgY29uc3QgZW5jcnlwdE1ldGFkYXRhID0gKGFsZ29yaXRobSA9PT0gNCB8fCBhbGdvcml0aG0gPT09IDUpICYmIGRpY3QuZ2V0KCJFbmNyeXB0TWV0YWRhdGEiKSAhPT0gZmFsc2U7CiAgICB0aGlzLmVuY3J5cHRNZXRhZGF0YSA9IGVuY3J5cHRNZXRhZGF0YTsKICAgIGNvbnN0IGZpbGVJZEJ5dGVzID0gc3RyaW5nVG9CeXRlcyhmaWxlSWQpOwogICAgbGV0IHBhc3N3b3JkQnl0ZXM7CiAgICBpZiAocGFzc3dvcmQpIHsKICAgICAgaWYgKHJldmlzaW9uID09PSA2KSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHBhc3N3b3JkID0gdXRmOFN0cmluZ1RvU3RyaW5nKHBhc3N3b3JkKTsKICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgIHdhcm4oIkNpcGhlclRyYW5zZm9ybUZhY3Rvcnk6IFVuYWJsZSB0byBjb252ZXJ0IFVURjggZW5jb2RlZCBwYXNzd29yZC4iKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcGFzc3dvcmRCeXRlcyA9IHN0cmluZ1RvQnl0ZXMocGFzc3dvcmQpOwogICAgfQogICAgbGV0IGVuY3J5cHRpb25LZXk7CiAgICBpZiAoYWxnb3JpdGhtICE9PSA1KSB7CiAgICAgIGVuY3J5cHRpb25LZXkgPSB0aGlzLiNwcmVwYXJlS2V5RGF0YShmaWxlSWRCeXRlcywgcGFzc3dvcmRCeXRlcywgb3duZXJQYXNzd29yZCwgdXNlclBhc3N3b3JkLCBmbGFncywgcmV2aXNpb24sIGtleUxlbmd0aCwgZW5jcnlwdE1ldGFkYXRhKTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0IG93bmVyVmFsaWRhdGlvblNhbHQgPSBvd25lckJ5dGVzLnN1YmFycmF5KDMyLCA0MCk7CiAgICAgIGNvbnN0IG93bmVyS2V5U2FsdCA9IG93bmVyQnl0ZXMuc3ViYXJyYXkoNDAsIDQ4KTsKICAgICAgY29uc3QgdUJ5dGVzID0gdXNlckJ5dGVzLnN1YmFycmF5KDAsIDQ4KTsKICAgICAgY29uc3QgdXNlclZhbGlkYXRpb25TYWx0ID0gdXNlckJ5dGVzLnN1YmFycmF5KDMyLCA0MCk7CiAgICAgIGNvbnN0IHVzZXJLZXlTYWx0ID0gdXNlckJ5dGVzLnN1YmFycmF5KDQwLCA0OCk7CiAgICAgIGNvbnN0IG93bmVyRW5jcnlwdGlvbiA9IHN0cmluZ1RvQnl0ZXMoZGljdC5nZXQoIk9FIikpOwogICAgICBjb25zdCB1c2VyRW5jcnlwdGlvbiA9IHN0cmluZ1RvQnl0ZXMoZGljdC5nZXQoIlVFIikpOwogICAgICBjb25zdCBwZXJtcyA9IHN0cmluZ1RvQnl0ZXMoZGljdC5nZXQoIlBlcm1zIikpOwogICAgICBlbmNyeXB0aW9uS2V5ID0gdGhpcy4jY3JlYXRlRW5jcnlwdGlvbktleTIwKHJldmlzaW9uLCBwYXNzd29yZEJ5dGVzLCBvd25lclBhc3N3b3JkLCBvd25lclZhbGlkYXRpb25TYWx0LCBvd25lcktleVNhbHQsIHVCeXRlcywgdXNlclBhc3N3b3JkLCB1c2VyVmFsaWRhdGlvblNhbHQsIHVzZXJLZXlTYWx0LCBvd25lckVuY3J5cHRpb24sIHVzZXJFbmNyeXB0aW9uLCBwZXJtcyk7CiAgICB9CiAgICBpZiAoIWVuY3J5cHRpb25LZXkpIHsKICAgICAgaWYgKCFwYXNzd29yZCkgewogICAgICAgIHRocm93IG5ldyBQYXNzd29yZEV4Y2VwdGlvbigiTm8gcGFzc3dvcmQgZ2l2ZW4iLCBQYXNzd29yZFJlc3BvbnNlcy5ORUVEX1BBU1NXT1JEKTsKICAgICAgfQogICAgICBjb25zdCBkZWNvZGVkUGFzc3dvcmQgPSB0aGlzLiNkZWNvZGVVc2VyUGFzc3dvcmQocGFzc3dvcmRCeXRlcywgb3duZXJQYXNzd29yZCwgcmV2aXNpb24sIGtleUxlbmd0aCk7CiAgICAgIGVuY3J5cHRpb25LZXkgPSB0aGlzLiNwcmVwYXJlS2V5RGF0YShmaWxlSWRCeXRlcywgZGVjb2RlZFBhc3N3b3JkLCBvd25lclBhc3N3b3JkLCB1c2VyUGFzc3dvcmQsIGZsYWdzLCByZXZpc2lvbiwga2V5TGVuZ3RoLCBlbmNyeXB0TWV0YWRhdGEpOwogICAgfQogICAgaWYgKCFlbmNyeXB0aW9uS2V5KSB7CiAgICAgIHRocm93IG5ldyBQYXNzd29yZEV4Y2VwdGlvbigiSW5jb3JyZWN0IFBhc3N3b3JkIiwgUGFzc3dvcmRSZXNwb25zZXMuSU5DT1JSRUNUX1BBU1NXT1JEKTsKICAgIH0KICAgIGlmIChhbGdvcml0aG0gPT09IDQgJiYgZW5jcnlwdGlvbktleS5sZW5ndGggPCAxNikgewogICAgICB0aGlzLmVuY3J5cHRpb25LZXkgPSBuZXcgVWludDhBcnJheSgxNik7CiAgICAgIHRoaXMuZW5jcnlwdGlvbktleS5zZXQoZW5jcnlwdGlvbktleSk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLmVuY3J5cHRpb25LZXkgPSBlbmNyeXB0aW9uS2V5OwogICAgfQogICAgaWYgKGFsZ29yaXRobSA+PSA0KSB7CiAgICAgIGNvbnN0IGNmID0gZGljdC5nZXQoIkNGIik7CiAgICAgIGlmIChjZiBpbnN0YW5jZW9mIERpY3QpIHsKICAgICAgICBjZi5zdXBwcmVzc0VuY3J5cHRpb24gPSB0cnVlOwogICAgICB9CiAgICAgIHRoaXMuY2YgPSBjZjsKICAgICAgdGhpcy5zdG1mID0gZGljdC5nZXQoIlN0bUYiKSB8fCBOYW1lLmdldCgiSWRlbnRpdHkiKTsKICAgICAgdGhpcy5zdHJmID0gZGljdC5nZXQoIlN0ckYiKSB8fCBOYW1lLmdldCgiSWRlbnRpdHkiKTsKICAgICAgdGhpcy5lZmYgPSBkaWN0LmdldCgiRUZGIikgfHwgdGhpcy5zdG1mOwogICAgfQogIH0KICBjcmVhdGVDaXBoZXJUcmFuc2Zvcm0obnVtLCBnZW4pIHsKICAgIGlmICh0aGlzLmFsZ29yaXRobSA9PT0gNCB8fCB0aGlzLmFsZ29yaXRobSA9PT0gNSkgewogICAgICByZXR1cm4gbmV3IENpcGhlclRyYW5zZm9ybSh0aGlzLiNidWlsZENpcGhlckNvbnN0cnVjdG9yKHRoaXMuY2YsIHRoaXMuc3RyZiwgbnVtLCBnZW4sIHRoaXMuZW5jcnlwdGlvbktleSksIHRoaXMuI2J1aWxkQ2lwaGVyQ29uc3RydWN0b3IodGhpcy5jZiwgdGhpcy5zdG1mLCBudW0sIGdlbiwgdGhpcy5lbmNyeXB0aW9uS2V5KSk7CiAgICB9CiAgICBjb25zdCBrZXkgPSB0aGlzLiNidWlsZE9iamVjdEtleShudW0sIGdlbiwgdGhpcy5lbmNyeXB0aW9uS2V5LCBmYWxzZSk7CiAgICBjb25zdCBjaXBoZXJDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHsKICAgICAgcmV0dXJuIG5ldyBBUkNGb3VyQ2lwaGVyKGtleSk7CiAgICB9OwogICAgcmV0dXJuIG5ldyBDaXBoZXJUcmFuc2Zvcm0oY2lwaGVyQ29uc3RydWN0b3IsIGNpcGhlckNvbnN0cnVjdG9yKTsKICB9Cn0KCjsvLyAuL3NyYy9jb3JlL3hyZWYuanMKCgoKCgoKY2xhc3MgWFJlZiB7CiAgI2ZpcnN0WFJlZlN0bVBvcyA9IG51bGw7CiAgY29uc3RydWN0b3Ioc3RyZWFtLCBwZGZNYW5hZ2VyKSB7CiAgICB0aGlzLnN0cmVhbSA9IHN0cmVhbTsKICAgIHRoaXMucGRmTWFuYWdlciA9IHBkZk1hbmFnZXI7CiAgICB0aGlzLmVudHJpZXMgPSBbXTsKICAgIHRoaXMuX3hyZWZTdG1zID0gbmV3IFNldCgpOwogICAgdGhpcy5fY2FjaGVNYXAgPSBuZXcgTWFwKCk7CiAgICB0aGlzLl9wZW5kaW5nUmVmcyA9IG5ldyBSZWZTZXQoKTsKICAgIHRoaXMuX25ld1BlcnNpc3RlbnRSZWZOdW0gPSBudWxsOwogICAgdGhpcy5fbmV3VGVtcG9yYXJ5UmVmTnVtID0gbnVsbDsKICAgIHRoaXMuX3BlcnNpc3RlbnRSZWZzQ2FjaGUgPSBudWxsOwogIH0KICBnZXROZXdQZXJzaXN0ZW50UmVmKG9iaikgewogICAgaWYgKHRoaXMuX25ld1BlcnNpc3RlbnRSZWZOdW0gPT09IG51bGwpIHsKICAgICAgdGhpcy5fbmV3UGVyc2lzdGVudFJlZk51bSA9IHRoaXMuZW50cmllcy5sZW5ndGggfHwgMTsKICAgIH0KICAgIGNvbnN0IG51bSA9IHRoaXMuX25ld1BlcnNpc3RlbnRSZWZOdW0rKzsKICAgIHRoaXMuX2NhY2hlTWFwLnNldChudW0sIG9iaik7CiAgICByZXR1cm4gUmVmLmdldChudW0sIDApOwogIH0KICBnZXROZXdUZW1wb3JhcnlSZWYoKSB7CiAgICBpZiAodGhpcy5fbmV3VGVtcG9yYXJ5UmVmTnVtID09PSBudWxsKSB7CiAgICAgIHRoaXMuX25ld1RlbXBvcmFyeVJlZk51bSA9IHRoaXMuZW50cmllcy5sZW5ndGggfHwgMTsKICAgICAgaWYgKHRoaXMuX25ld1BlcnNpc3RlbnRSZWZOdW0pIHsKICAgICAgICB0aGlzLl9wZXJzaXN0ZW50UmVmc0NhY2hlID0gbmV3IE1hcCgpOwogICAgICAgIGZvciAobGV0IGkgPSB0aGlzLl9uZXdUZW1wb3JhcnlSZWZOdW07IGkgPCB0aGlzLl9uZXdQZXJzaXN0ZW50UmVmTnVtOyBpKyspIHsKICAgICAgICAgIHRoaXMuX3BlcnNpc3RlbnRSZWZzQ2FjaGUuc2V0KGksIHRoaXMuX2NhY2hlTWFwLmdldChpKSk7CiAgICAgICAgICB0aGlzLl9jYWNoZU1hcC5kZWxldGUoaSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gUmVmLmdldCh0aGlzLl9uZXdUZW1wb3JhcnlSZWZOdW0rKywgMCk7CiAgfQogIHJlc2V0TmV3VGVtcG9yYXJ5UmVmKCkgewogICAgdGhpcy5fbmV3VGVtcG9yYXJ5UmVmTnVtID0gbnVsbDsKICAgIGlmICh0aGlzLl9wZXJzaXN0ZW50UmVmc0NhY2hlKSB7CiAgICAgIGZvciAoY29uc3QgW251bSwgb2JqXSBvZiB0aGlzLl9wZXJzaXN0ZW50UmVmc0NhY2hlKSB7CiAgICAgICAgdGhpcy5fY2FjaGVNYXAuc2V0KG51bSwgb2JqKTsKICAgICAgfQogICAgfQogICAgdGhpcy5fcGVyc2lzdGVudFJlZnNDYWNoZSA9IG51bGw7CiAgfQogIHNldFN0YXJ0WFJlZihzdGFydFhSZWYpIHsKICAgIHRoaXMuc3RhcnRYUmVmUXVldWUgPSBbc3RhcnRYUmVmXTsKICB9CiAgcGFyc2UocmVjb3ZlcnlNb2RlID0gZmFsc2UpIHsKICAgIGxldCB0cmFpbGVyRGljdDsKICAgIGlmICghcmVjb3ZlcnlNb2RlKSB7CiAgICAgIHRyYWlsZXJEaWN0ID0gdGhpcy5yZWFkWFJlZigpOwogICAgfSBlbHNlIHsKICAgICAgd2FybigiSW5kZXhpbmcgYWxsIFBERiBvYmplY3RzIik7CiAgICAgIHRyYWlsZXJEaWN0ID0gdGhpcy5pbmRleE9iamVjdHMoKTsKICAgIH0KICAgIHRyYWlsZXJEaWN0LmFzc2lnblhyZWYodGhpcyk7CiAgICB0aGlzLnRyYWlsZXIgPSB0cmFpbGVyRGljdDsKICAgIGxldCBlbmNyeXB0OwogICAgdHJ5IHsKICAgICAgZW5jcnlwdCA9IHRyYWlsZXJEaWN0LmdldCgiRW5jcnlwdCIpOwogICAgfSBjYXRjaCAoZXgpIHsKICAgICAgaWYgKGV4IGluc3RhbmNlb2YgTWlzc2luZ0RhdGFFeGNlcHRpb24pIHsKICAgICAgICB0aHJvdyBleDsKICAgICAgfQogICAgICB3YXJuKGBYUmVmLnBhcnNlIC0gSW52YWxpZCAiRW5jcnlwdCIgcmVmZXJlbmNlOiAiJHtleH0iLmApOwogICAgfQogICAgaWYgKGVuY3J5cHQgaW5zdGFuY2VvZiBEaWN0KSB7CiAgICAgIGNvbnN0IGlkcyA9IHRyYWlsZXJEaWN0LmdldCgiSUQiKTsKICAgICAgY29uc3QgZmlsZUlkID0gaWRzPy5sZW5ndGggPyBpZHNbMF0gOiAiIjsKICAgICAgZW5jcnlwdC5zdXBwcmVzc0VuY3J5cHRpb24gPSB0cnVlOwogICAgICB0aGlzLmVuY3J5cHQgPSBuZXcgQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeShlbmNyeXB0LCBmaWxlSWQsIHRoaXMucGRmTWFuYWdlci5wYXNzd29yZCk7CiAgICB9CiAgICBsZXQgcm9vdDsKICAgIHRyeSB7CiAgICAgIHJvb3QgPSB0cmFpbGVyRGljdC5nZXQoIlJvb3QiKTsKICAgIH0gY2F0Y2ggKGV4KSB7CiAgICAgIGlmIChleCBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7CiAgICAgICAgdGhyb3cgZXg7CiAgICAgIH0KICAgICAgd2FybihgWFJlZi5wYXJzZSAtIEludmFsaWQgIlJvb3QiIHJlZmVyZW5jZTogIiR7ZXh9Ii5gKTsKICAgIH0KICAgIGlmIChyb290IGluc3RhbmNlb2YgRGljdCkgewogICAgICB0cnkgewogICAgICAgIGNvbnN0IHBhZ2VzID0gcm9vdC5nZXQoIlBhZ2VzIik7CiAgICAgICAgaWYgKHBhZ2VzIGluc3RhbmNlb2YgRGljdCkgewogICAgICAgICAgdGhpcy5yb290ID0gcm9vdDsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0gY2F0Y2ggKGV4KSB7CiAgICAgICAgaWYgKGV4IGluc3RhbmNlb2YgTWlzc2luZ0RhdGFFeGNlcHRpb24pIHsKICAgICAgICAgIHRocm93IGV4OwogICAgICAgIH0KICAgICAgICB3YXJuKGBYUmVmLnBhcnNlIC0gSW52YWxpZCAiUGFnZXMiIHJlZmVyZW5jZTogIiR7ZXh9Ii5gKTsKICAgICAgfQogICAgfQogICAgaWYgKCFyZWNvdmVyeU1vZGUpIHsKICAgICAgdGhyb3cgbmV3IFhSZWZQYXJzZUV4Y2VwdGlvbigpOwogICAgfQogICAgdGhyb3cgbmV3IEludmFsaWRQREZFeGNlcHRpb24oIkludmFsaWQgUm9vdCByZWZlcmVuY2UuIik7CiAgfQogIHByb2Nlc3NYUmVmVGFibGUocGFyc2VyKSB7CiAgICBpZiAoISgidGFibGVTdGF0ZSIgaW4gdGhpcykpIHsKICAgICAgdGhpcy50YWJsZVN0YXRlID0gewogICAgICAgIGVudHJ5TnVtOiAwLAogICAgICAgIHN0cmVhbVBvczogcGFyc2VyLmxleGVyLnN0cmVhbS5wb3MsCiAgICAgICAgcGFyc2VyQnVmMTogcGFyc2VyLmJ1ZjEsCiAgICAgICAgcGFyc2VyQnVmMjogcGFyc2VyLmJ1ZjIKICAgICAgfTsKICAgIH0KICAgIGNvbnN0IG9iaiA9IHRoaXMucmVhZFhSZWZUYWJsZShwYXJzZXIpOwogICAgaWYgKCFpc0NtZChvYmosICJ0cmFpbGVyIikpIHsKICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgdGFibGU6IGNvdWxkIG5vdCBmaW5kIHRyYWlsZXIgZGljdGlvbmFyeSIpOwogICAgfQogICAgbGV0IGRpY3QgPSBwYXJzZXIuZ2V0T2JqKCk7CiAgICBpZiAoIShkaWN0IGluc3RhbmNlb2YgRGljdCkgJiYgZGljdC5kaWN0KSB7CiAgICAgIGRpY3QgPSBkaWN0LmRpY3Q7CiAgICB9CiAgICBpZiAoIShkaWN0IGluc3RhbmNlb2YgRGljdCkpIHsKICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgdGFibGU6IGNvdWxkIG5vdCBwYXJzZSB0cmFpbGVyIGRpY3Rpb25hcnkiKTsKICAgIH0KICAgIGRlbGV0ZSB0aGlzLnRhYmxlU3RhdGU7CiAgICByZXR1cm4gZGljdDsKICB9CiAgcmVhZFhSZWZUYWJsZShwYXJzZXIpIHsKICAgIGNvbnN0IHN0cmVhbSA9IHBhcnNlci5sZXhlci5zdHJlYW07CiAgICBjb25zdCB0YWJsZVN0YXRlID0gdGhpcy50YWJsZVN0YXRlOwogICAgc3RyZWFtLnBvcyA9IHRhYmxlU3RhdGUuc3RyZWFtUG9zOwogICAgcGFyc2VyLmJ1ZjEgPSB0YWJsZVN0YXRlLnBhcnNlckJ1ZjE7CiAgICBwYXJzZXIuYnVmMiA9IHRhYmxlU3RhdGUucGFyc2VyQnVmMjsKICAgIGxldCBvYmo7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBpZiAoISgiZmlyc3RFbnRyeU51bSIgaW4gdGFibGVTdGF0ZSkgfHwgISgiZW50cnlDb3VudCIgaW4gdGFibGVTdGF0ZSkpIHsKICAgICAgICBpZiAoaXNDbWQob2JqID0gcGFyc2VyLmdldE9iaigpLCAidHJhaWxlciIpKSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgdGFibGVTdGF0ZS5maXJzdEVudHJ5TnVtID0gb2JqOwogICAgICAgIHRhYmxlU3RhdGUuZW50cnlDb3VudCA9IHBhcnNlci5nZXRPYmooKTsKICAgICAgfQogICAgICBsZXQgZmlyc3QgPSB0YWJsZVN0YXRlLmZpcnN0RW50cnlOdW07CiAgICAgIGNvbnN0IGNvdW50ID0gdGFibGVTdGF0ZS5lbnRyeUNvdW50OwogICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoZmlyc3QpIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKGNvdW50KSkgewogICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIHRhYmxlOiB3cm9uZyB0eXBlcyBpbiBzdWJzZWN0aW9uIGhlYWRlciIpOwogICAgICB9CiAgICAgIGZvciAobGV0IGkgPSB0YWJsZVN0YXRlLmVudHJ5TnVtOyBpIDwgY291bnQ7IGkrKykgewogICAgICAgIHRhYmxlU3RhdGUuc3RyZWFtUG9zID0gc3RyZWFtLnBvczsKICAgICAgICB0YWJsZVN0YXRlLmVudHJ5TnVtID0gaTsKICAgICAgICB0YWJsZVN0YXRlLnBhcnNlckJ1ZjEgPSBwYXJzZXIuYnVmMTsKICAgICAgICB0YWJsZVN0YXRlLnBhcnNlckJ1ZjIgPSBwYXJzZXIuYnVmMjsKICAgICAgICBjb25zdCBlbnRyeSA9IHt9OwogICAgICAgIGVudHJ5Lm9mZnNldCA9IHBhcnNlci5nZXRPYmooKTsKICAgICAgICBlbnRyeS5nZW4gPSBwYXJzZXIuZ2V0T2JqKCk7CiAgICAgICAgY29uc3QgdHlwZSA9IHBhcnNlci5nZXRPYmooKTsKICAgICAgICBpZiAodHlwZSBpbnN0YW5jZW9mIENtZCkgewogICAgICAgICAgc3dpdGNoICh0eXBlLmNtZCkgewogICAgICAgICAgICBjYXNlICJmIjoKICAgICAgICAgICAgICBlbnRyeS5mcmVlID0gdHJ1ZTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAibiI6CiAgICAgICAgICAgICAgZW50cnkudW5jb21wcmVzc2VkID0gdHJ1ZTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGVudHJ5Lm9mZnNldCkgfHwgIU51bWJlci5pc0ludGVnZXIoZW50cnkuZ2VuKSB8fCAhKGVudHJ5LmZyZWUgfHwgZW50cnkudW5jb21wcmVzc2VkKSkgewogICAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBJbnZhbGlkIGVudHJ5IGluIFhSZWYgc3Vic2VjdGlvbjogJHtmaXJzdH0sICR7Y291bnR9YCk7CiAgICAgICAgfQogICAgICAgIGlmIChpID09PSAwICYmIGVudHJ5LmZyZWUgJiYgZmlyc3QgPT09IDEpIHsKICAgICAgICAgIGZpcnN0ID0gMDsKICAgICAgICB9CiAgICAgICAgaWYgKCF0aGlzLmVudHJpZXNbaSArIGZpcnN0XSkgewogICAgICAgICAgdGhpcy5lbnRyaWVzW2kgKyBmaXJzdF0gPSBlbnRyeTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGFibGVTdGF0ZS5lbnRyeU51bSA9IDA7CiAgICAgIHRhYmxlU3RhdGUuc3RyZWFtUG9zID0gc3RyZWFtLnBvczsKICAgICAgdGFibGVTdGF0ZS5wYXJzZXJCdWYxID0gcGFyc2VyLmJ1ZjE7CiAgICAgIHRhYmxlU3RhdGUucGFyc2VyQnVmMiA9IHBhcnNlci5idWYyOwogICAgICBkZWxldGUgdGFibGVTdGF0ZS5maXJzdEVudHJ5TnVtOwogICAgICBkZWxldGUgdGFibGVTdGF0ZS5lbnRyeUNvdW50OwogICAgfQogICAgaWYgKHRoaXMuZW50cmllc1swXSAmJiAhdGhpcy5lbnRyaWVzWzBdLmZyZWUpIHsKICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgdGFibGU6IHVuZXhwZWN0ZWQgZmlyc3Qgb2JqZWN0Iik7CiAgICB9CiAgICByZXR1cm4gb2JqOwogIH0KICBwcm9jZXNzWFJlZlN0cmVhbShzdHJlYW0pIHsKICAgIGlmICghKCJzdHJlYW1TdGF0ZSIgaW4gdGhpcykpIHsKICAgICAgY29uc3QgewogICAgICAgIGRpY3QsCiAgICAgICAgcG9zCiAgICAgIH0gPSBzdHJlYW07CiAgICAgIGNvbnN0IGJ5dGVXaWR0aHMgPSBkaWN0LmdldCgiVyIpOwogICAgICBjb25zdCByYW5nZSA9IGRpY3QuZ2V0KCJJbmRleCIpIHx8IFswLCBkaWN0LmdldCgiU2l6ZSIpXTsKICAgICAgdGhpcy5zdHJlYW1TdGF0ZSA9IHsKICAgICAgICBlbnRyeVJhbmdlczogcmFuZ2UsCiAgICAgICAgYnl0ZVdpZHRocywKICAgICAgICBlbnRyeU51bTogMCwKICAgICAgICBzdHJlYW1Qb3M6IHBvcwogICAgICB9OwogICAgfQogICAgdGhpcy5yZWFkWFJlZlN0cmVhbShzdHJlYW0pOwogICAgZGVsZXRlIHRoaXMuc3RyZWFtU3RhdGU7CiAgICByZXR1cm4gc3RyZWFtLmRpY3Q7CiAgfQogIHJlYWRYUmVmU3RyZWFtKHN0cmVhbSkgewogICAgY29uc3Qgc3RyZWFtU3RhdGUgPSB0aGlzLnN0cmVhbVN0YXRlOwogICAgc3RyZWFtLnBvcyA9IHN0cmVhbVN0YXRlLnN0cmVhbVBvczsKICAgIGNvbnN0IFt0eXBlRmllbGRXaWR0aCwgb2Zmc2V0RmllbGRXaWR0aCwgZ2VuZXJhdGlvbkZpZWxkV2lkdGhdID0gc3RyZWFtU3RhdGUuYnl0ZVdpZHRoczsKICAgIGNvbnN0IGVudHJ5UmFuZ2VzID0gc3RyZWFtU3RhdGUuZW50cnlSYW5nZXM7CiAgICB3aGlsZSAoZW50cnlSYW5nZXMubGVuZ3RoID4gMCkgewogICAgICBjb25zdCBbZmlyc3QsIG5dID0gZW50cnlSYW5nZXM7CiAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihmaXJzdCkgfHwgIU51bWJlci5pc0ludGVnZXIobikpIHsKICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEludmFsaWQgWFJlZiByYW5nZSBmaWVsZHM6ICR7Zmlyc3R9LCAke259YCk7CiAgICAgIH0KICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHR5cGVGaWVsZFdpZHRoKSB8fCAhTnVtYmVyLmlzSW50ZWdlcihvZmZzZXRGaWVsZFdpZHRoKSB8fCAhTnVtYmVyLmlzSW50ZWdlcihnZW5lcmF0aW9uRmllbGRXaWR0aCkpIHsKICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEludmFsaWQgWFJlZiBlbnRyeSBmaWVsZHMgbGVuZ3RoOiAke2ZpcnN0fSwgJHtufWApOwogICAgICB9CiAgICAgIGZvciAobGV0IGkgPSBzdHJlYW1TdGF0ZS5lbnRyeU51bTsgaSA8IG47ICsraSkgewogICAgICAgIHN0cmVhbVN0YXRlLmVudHJ5TnVtID0gaTsKICAgICAgICBzdHJlYW1TdGF0ZS5zdHJlYW1Qb3MgPSBzdHJlYW0ucG9zOwogICAgICAgIGxldCB0eXBlID0gMCwKICAgICAgICAgIG9mZnNldCA9IDAsCiAgICAgICAgICBnZW5lcmF0aW9uID0gMDsKICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHR5cGVGaWVsZFdpZHRoOyArK2opIHsKICAgICAgICAgIGNvbnN0IHR5cGVCeXRlID0gc3RyZWFtLmdldEJ5dGUoKTsKICAgICAgICAgIGlmICh0eXBlQnl0ZSA9PT0gLTEpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgYnl0ZVdpZHRocyAndHlwZScuIik7CiAgICAgICAgICB9CiAgICAgICAgICB0eXBlID0gdHlwZSA8PCA4IHwgdHlwZUJ5dGU7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlRmllbGRXaWR0aCA9PT0gMCkgewogICAgICAgICAgdHlwZSA9IDE7CiAgICAgICAgfQogICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgb2Zmc2V0RmllbGRXaWR0aDsgKytqKSB7CiAgICAgICAgICBjb25zdCBvZmZzZXRCeXRlID0gc3RyZWFtLmdldEJ5dGUoKTsKICAgICAgICAgIGlmIChvZmZzZXRCeXRlID09PSAtMSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiBieXRlV2lkdGhzICdvZmZzZXQnLiIpOwogICAgICAgICAgfQogICAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0IDw8IDggfCBvZmZzZXRCeXRlOwogICAgICAgIH0KICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGdlbmVyYXRpb25GaWVsZFdpZHRoOyArK2opIHsKICAgICAgICAgIGNvbnN0IGdlbmVyYXRpb25CeXRlID0gc3RyZWFtLmdldEJ5dGUoKTsKICAgICAgICAgIGlmIChnZW5lcmF0aW9uQnl0ZSA9PT0gLTEpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgYnl0ZVdpZHRocyAnZ2VuZXJhdGlvbicuIik7CiAgICAgICAgICB9CiAgICAgICAgICBnZW5lcmF0aW9uID0gZ2VuZXJhdGlvbiA8PCA4IHwgZ2VuZXJhdGlvbkJ5dGU7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGVudHJ5ID0ge307CiAgICAgICAgZW50cnkub2Zmc2V0ID0gb2Zmc2V0OwogICAgICAgIGVudHJ5LmdlbiA9IGdlbmVyYXRpb247CiAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgIGVudHJ5LmZyZWUgPSB0cnVlOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgZW50cnkudW5jb21wcmVzc2VkID0gdHJ1ZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBJbnZhbGlkIFhSZWYgZW50cnkgdHlwZTogJHt0eXBlfWApOwogICAgICAgIH0KICAgICAgICBpZiAoIXRoaXMuZW50cmllc1tmaXJzdCArIGldKSB7CiAgICAgICAgICB0aGlzLmVudHJpZXNbZmlyc3QgKyBpXSA9IGVudHJ5OwogICAgICAgIH0KICAgICAgfQogICAgICBzdHJlYW1TdGF0ZS5lbnRyeU51bSA9IDA7CiAgICAgIHN0cmVhbVN0YXRlLnN0cmVhbVBvcyA9IHN0cmVhbS5wb3M7CiAgICAgIGVudHJ5UmFuZ2VzLnNwbGljZSgwLCAyKTsKICAgIH0KICB9CiAgaW5kZXhPYmplY3RzKCkgewogICAgY29uc3QgVEFCID0gMHg5LAogICAgICBMRiA9IDB4YSwKICAgICAgQ1IgPSAweGQsCiAgICAgIFNQQUNFID0gMHgyMDsKICAgIGNvbnN0IFBFUkNFTlQgPSAweDI1LAogICAgICBMVCA9IDB4M2M7CiAgICBmdW5jdGlvbiByZWFkVG9rZW4oZGF0YSwgb2Zmc2V0KSB7CiAgICAgIGxldCB0b2tlbiA9ICIiLAogICAgICAgIGNoID0gZGF0YVtvZmZzZXRdOwogICAgICB3aGlsZSAoY2ggIT09IExGICYmIGNoICE9PSBDUiAmJiBjaCAhPT0gTFQpIHsKICAgICAgICBpZiAoKytvZmZzZXQgPj0gZGF0YS5sZW5ndGgpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICB0b2tlbiArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTsKICAgICAgICBjaCA9IGRhdGFbb2Zmc2V0XTsKICAgICAgfQogICAgICByZXR1cm4gdG9rZW47CiAgICB9CiAgICBmdW5jdGlvbiBza2lwVW50aWwoZGF0YSwgb2Zmc2V0LCB3aGF0KSB7CiAgICAgIGNvbnN0IGxlbmd0aCA9IHdoYXQubGVuZ3RoLAogICAgICAgIGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aDsKICAgICAgbGV0IHNraXBwZWQgPSAwOwogICAgICB3aGlsZSAob2Zmc2V0IDwgZGF0YUxlbmd0aCkgewogICAgICAgIGxldCBpID0gMDsKICAgICAgICB3aGlsZSAoaSA8IGxlbmd0aCAmJiBkYXRhW29mZnNldCArIGldID09PSB3aGF0W2ldKSB7CiAgICAgICAgICArK2k7CiAgICAgICAgfQogICAgICAgIGlmIChpID49IGxlbmd0aCkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIG9mZnNldCsrOwogICAgICAgIHNraXBwZWQrKzsKICAgICAgfQogICAgICByZXR1cm4gc2tpcHBlZDsKICAgIH0KICAgIGNvbnN0IGdFbmRvYmpSZWdFeHAgPSAvXGIoZW5kb2JqfFxkK1xzK1xkK1xzK29ianx4cmVmfHRyYWlsZXJccyo8PClcYi9nOwogICAgY29uc3QgZ1N0YXJ0eHJlZlJlZ0V4cCA9IC9cYihzdGFydHhyZWZ8XGQrXHMrXGQrXHMrb2JqKVxiL2c7CiAgICBjb25zdCBvYmpSZWdFeHAgPSAvXihcZCspXHMrKFxkKylccytvYmpcYi87CiAgICBjb25zdCB0cmFpbGVyQnl0ZXMgPSBuZXcgVWludDhBcnJheShbMTE2LCAxMTQsIDk3LCAxMDUsIDEwOCwgMTAxLCAxMTRdKTsKICAgIGNvbnN0IHN0YXJ0eHJlZkJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoWzExNSwgMTE2LCA5NywgMTE0LCAxMTYsIDEyMCwgMTE0LCAxMDEsIDEwMl0pOwogICAgY29uc3QgeHJlZkJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoWzQ3LCA4OCwgODIsIDEwMSwgMTAyXSk7CiAgICB0aGlzLmVudHJpZXMubGVuZ3RoID0gMDsKICAgIHRoaXMuX2NhY2hlTWFwLmNsZWFyKCk7CiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbTsKICAgIHN0cmVhbS5wb3MgPSAwOwogICAgY29uc3QgYnVmZmVyID0gc3RyZWFtLmdldEJ5dGVzKCksCiAgICAgIGJ1ZmZlclN0ciA9IGJ5dGVzVG9TdHJpbmcoYnVmZmVyKSwKICAgICAgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aDsKICAgIGxldCBwb3NpdGlvbiA9IHN0cmVhbS5zdGFydDsKICAgIGNvbnN0IHRyYWlsZXJzID0gW10sCiAgICAgIHhyZWZTdG1zID0gW107CiAgICB3aGlsZSAocG9zaXRpb24gPCBsZW5ndGgpIHsKICAgICAgbGV0IGNoID0gYnVmZmVyW3Bvc2l0aW9uXTsKICAgICAgaWYgKGNoID09PSBUQUIgfHwgY2ggPT09IExGIHx8IGNoID09PSBDUiB8fCBjaCA9PT0gU1BBQ0UpIHsKICAgICAgICArK3Bvc2l0aW9uOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmIChjaCA9PT0gUEVSQ0VOVCkgewogICAgICAgIGRvIHsKICAgICAgICAgICsrcG9zaXRpb247CiAgICAgICAgICBpZiAocG9zaXRpb24gPj0gbGVuZ3RoKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgY2ggPSBidWZmZXJbcG9zaXRpb25dOwogICAgICAgIH0gd2hpbGUgKGNoICE9PSBMRiAmJiBjaCAhPT0gQ1IpOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGNvbnN0IHRva2VuID0gcmVhZFRva2VuKGJ1ZmZlciwgcG9zaXRpb24pOwogICAgICBsZXQgbTsKICAgICAgaWYgKHRva2VuLnN0YXJ0c1dpdGgoInhyZWYiKSAmJiAodG9rZW4ubGVuZ3RoID09PSA0IHx8IC9ccy8udGVzdCh0b2tlbls0XSkpKSB7CiAgICAgICAgcG9zaXRpb24gKz0gc2tpcFVudGlsKGJ1ZmZlciwgcG9zaXRpb24sIHRyYWlsZXJCeXRlcyk7CiAgICAgICAgdHJhaWxlcnMucHVzaChwb3NpdGlvbik7CiAgICAgICAgcG9zaXRpb24gKz0gc2tpcFVudGlsKGJ1ZmZlciwgcG9zaXRpb24sIHN0YXJ0eHJlZkJ5dGVzKTsKICAgICAgfSBlbHNlIGlmIChtID0gb2JqUmVnRXhwLmV4ZWModG9rZW4pKSB7CiAgICAgICAgY29uc3QgbnVtID0gbVsxXSB8IDAsCiAgICAgICAgICBnZW4gPSBtWzJdIHwgMDsKICAgICAgICBjb25zdCBzdGFydFBvcyA9IHBvc2l0aW9uICsgdG9rZW4ubGVuZ3RoOwogICAgICAgIGxldCBjb250ZW50TGVuZ3RoLAogICAgICAgICAgdXBkYXRlRW50cmllcyA9IGZhbHNlOwogICAgICAgIGlmICghdGhpcy5lbnRyaWVzW251bV0pIHsKICAgICAgICAgIHVwZGF0ZUVudHJpZXMgPSB0cnVlOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5lbnRyaWVzW251bV0uZ2VuID09PSBnZW4pIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbnN0IHBhcnNlciA9IG5ldyBQYXJzZXIoewogICAgICAgICAgICAgIGxleGVyOiBuZXcgTGV4ZXIoc3RyZWFtLm1ha2VTdWJTdHJlYW0oc3RhcnRQb3MpKQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgcGFyc2VyLmdldE9iaigpOwogICAgICAgICAgICB1cGRhdGVFbnRyaWVzID0gdHJ1ZTsKICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7CiAgICAgICAgICAgIGlmIChleCBpbnN0YW5jZW9mIFBhcnNlckVPRkV4Y2VwdGlvbikgewogICAgICAgICAgICAgIHdhcm4oYGluZGV4T2JqZWN0cyAtLSBjaGVja2luZyBvYmplY3QgKCR7dG9rZW59KTogIiR7ZXh9Ii5gKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB1cGRhdGVFbnRyaWVzID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAodXBkYXRlRW50cmllcykgewogICAgICAgICAgdGhpcy5lbnRyaWVzW251bV0gPSB7CiAgICAgICAgICAgIG9mZnNldDogcG9zaXRpb24gLSBzdHJlYW0uc3RhcnQsCiAgICAgICAgICAgIGdlbiwKICAgICAgICAgICAgdW5jb21wcmVzc2VkOiB0cnVlCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBnRW5kb2JqUmVnRXhwLmxhc3RJbmRleCA9IHN0YXJ0UG9zOwogICAgICAgIGNvbnN0IG1hdGNoID0gZ0VuZG9ialJlZ0V4cC5leGVjKGJ1ZmZlclN0cik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICBjb25zdCBlbmRQb3MgPSBnRW5kb2JqUmVnRXhwLmxhc3RJbmRleCArIDE7CiAgICAgICAgICBjb250ZW50TGVuZ3RoID0gZW5kUG9zIC0gcG9zaXRpb247CiAgICAgICAgICBpZiAobWF0Y2hbMV0gIT09ICJlbmRvYmoiKSB7CiAgICAgICAgICAgIHdhcm4oYGluZGV4T2JqZWN0czogRm91bmQgIiR7bWF0Y2hbMV19IiBpbnNpZGUgb2YgYW5vdGhlciAib2JqIiwgYCArICdjYXVzZWQgYnkgbWlzc2luZyAiZW5kb2JqIiAtLSB0cnlpbmcgdG8gcmVjb3Zlci4nKTsKICAgICAgICAgICAgY29udGVudExlbmd0aCAtPSBtYXRjaFsxXS5sZW5ndGggKyAxOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb250ZW50TGVuZ3RoID0gbGVuZ3RoIC0gcG9zaXRpb247CiAgICAgICAgfQogICAgICAgIGNvbnN0IGNvbnRlbnQgPSBidWZmZXIuc3ViYXJyYXkocG9zaXRpb24sIHBvc2l0aW9uICsgY29udGVudExlbmd0aCk7CiAgICAgICAgY29uc3QgeHJlZlRhZ09mZnNldCA9IHNraXBVbnRpbChjb250ZW50LCAwLCB4cmVmQnl0ZXMpOwogICAgICAgIGlmICh4cmVmVGFnT2Zmc2V0IDwgY29udGVudExlbmd0aCAmJiBjb250ZW50W3hyZWZUYWdPZmZzZXQgKyA1XSA8IDY0KSB7CiAgICAgICAgICB4cmVmU3Rtcy5wdXNoKHBvc2l0aW9uIC0gc3RyZWFtLnN0YXJ0KTsKICAgICAgICAgIHRoaXMuX3hyZWZTdG1zLmFkZChwb3NpdGlvbiAtIHN0cmVhbS5zdGFydCk7CiAgICAgICAgfQogICAgICAgIHBvc2l0aW9uICs9IGNvbnRlbnRMZW5ndGg7CiAgICAgIH0gZWxzZSBpZiAodG9rZW4uc3RhcnRzV2l0aCgidHJhaWxlciIpICYmICh0b2tlbi5sZW5ndGggPT09IDcgfHwgL1xzLy50ZXN0KHRva2VuWzddKSkpIHsKICAgICAgICB0cmFpbGVycy5wdXNoKHBvc2l0aW9uKTsKICAgICAgICBjb25zdCBzdGFydFBvcyA9IHBvc2l0aW9uICsgdG9rZW4ubGVuZ3RoOwogICAgICAgIGxldCBjb250ZW50TGVuZ3RoOwogICAgICAgIGdTdGFydHhyZWZSZWdFeHAubGFzdEluZGV4ID0gc3RhcnRQb3M7CiAgICAgICAgY29uc3QgbWF0Y2ggPSBnU3RhcnR4cmVmUmVnRXhwLmV4ZWMoYnVmZmVyU3RyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgIGNvbnN0IGVuZFBvcyA9IGdTdGFydHhyZWZSZWdFeHAubGFzdEluZGV4ICsgMTsKICAgICAgICAgIGNvbnRlbnRMZW5ndGggPSBlbmRQb3MgLSBwb3NpdGlvbjsKICAgICAgICAgIGlmIChtYXRjaFsxXSAhPT0gInN0YXJ0eHJlZiIpIHsKICAgICAgICAgICAgd2FybihgaW5kZXhPYmplY3RzOiBGb3VuZCAiJHttYXRjaFsxXX0iIGFmdGVyICJ0cmFpbGVyIiwgYCArICdjYXVzZWQgYnkgbWlzc2luZyAic3RhcnR4cmVmIiAtLSB0cnlpbmcgdG8gcmVjb3Zlci4nKTsKICAgICAgICAgICAgY29udGVudExlbmd0aCAtPSBtYXRjaFsxXS5sZW5ndGggKyAxOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb250ZW50TGVuZ3RoID0gbGVuZ3RoIC0gcG9zaXRpb247CiAgICAgICAgfQogICAgICAgIHBvc2l0aW9uICs9IGNvbnRlbnRMZW5ndGg7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcG9zaXRpb24gKz0gdG9rZW4ubGVuZ3RoICsgMTsKICAgICAgfQogICAgfQogICAgZm9yIChjb25zdCB4cmVmU3RtIG9mIHhyZWZTdG1zKSB7CiAgICAgIHRoaXMuc3RhcnRYUmVmUXVldWUucHVzaCh4cmVmU3RtKTsKICAgICAgdGhpcy5yZWFkWFJlZih0cnVlKTsKICAgIH0KICAgIGNvbnN0IHRyYWlsZXJEaWN0cyA9IFtdOwogICAgbGV0IGlzRW5jcnlwdGVkID0gZmFsc2U7CiAgICBmb3IgKGNvbnN0IHRyYWlsZXIgb2YgdHJhaWxlcnMpIHsKICAgICAgc3RyZWFtLnBvcyA9IHRyYWlsZXI7CiAgICAgIGNvbnN0IHBhcnNlciA9IG5ldyBQYXJzZXIoewogICAgICAgIGxleGVyOiBuZXcgTGV4ZXIoc3RyZWFtKSwKICAgICAgICB4cmVmOiB0aGlzLAogICAgICAgIGFsbG93U3RyZWFtczogdHJ1ZSwKICAgICAgICByZWNvdmVyeU1vZGU6IHRydWUKICAgICAgfSk7CiAgICAgIGNvbnN0IG9iaiA9IHBhcnNlci5nZXRPYmooKTsKICAgICAgaWYgKCFpc0NtZChvYmosICJ0cmFpbGVyIikpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBjb25zdCBkaWN0ID0gcGFyc2VyLmdldE9iaigpOwogICAgICBpZiAoIShkaWN0IGluc3RhbmNlb2YgRGljdCkpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICB0cmFpbGVyRGljdHMucHVzaChkaWN0KTsKICAgICAgaWYgKGRpY3QuaGFzKCJFbmNyeXB0IikpIHsKICAgICAgICBpc0VuY3J5cHRlZCA9IHRydWU7CiAgICAgIH0KICAgIH0KICAgIGxldCB0cmFpbGVyRGljdCwgdHJhaWxlckVycm9yOwogICAgZm9yIChjb25zdCBkaWN0IG9mIFsuLi50cmFpbGVyRGljdHMsICJnZW5GYWxsYmFjayIsIC4uLnRyYWlsZXJEaWN0c10pIHsKICAgICAgaWYgKGRpY3QgPT09ICJnZW5GYWxsYmFjayIpIHsKICAgICAgICBpZiAoIXRyYWlsZXJFcnJvcikgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHRoaXMuX2dlbmVyYXRpb25GYWxsYmFjayA9IHRydWU7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgbGV0IHZhbGlkUGFnZXNEaWN0ID0gZmFsc2U7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3Qgcm9vdERpY3QgPSBkaWN0LmdldCgiUm9vdCIpOwogICAgICAgIGlmICghKHJvb3REaWN0IGluc3RhbmNlb2YgRGljdCkpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBjb25zdCBwYWdlc0RpY3QgPSByb290RGljdC5nZXQoIlBhZ2VzIik7CiAgICAgICAgaWYgKCEocGFnZXNEaWN0IGluc3RhbmNlb2YgRGljdCkpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBjb25zdCBwYWdlc0NvdW50ID0gcGFnZXNEaWN0LmdldCgiQ291bnQiKTsKICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihwYWdlc0NvdW50KSkgewogICAgICAgICAgdmFsaWRQYWdlc0RpY3QgPSB0cnVlOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZXgpIHsKICAgICAgICB0cmFpbGVyRXJyb3IgPSBleDsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAodmFsaWRQYWdlc0RpY3QgJiYgKCFpc0VuY3J5cHRlZCB8fCBkaWN0LmhhcygiRW5jcnlwdCIpKSAmJiBkaWN0LmhhcygiSUQiKSkgewogICAgICAgIHJldHVybiBkaWN0OwogICAgICB9CiAgICAgIHRyYWlsZXJEaWN0ID0gZGljdDsKICAgIH0KICAgIGlmICh0cmFpbGVyRGljdCkgewogICAgICByZXR1cm4gdHJhaWxlckRpY3Q7CiAgICB9CiAgICBpZiAodGhpcy50b3BEaWN0KSB7CiAgICAgIHJldHVybiB0aGlzLnRvcERpY3Q7CiAgICB9CiAgICBpZiAoIXRyYWlsZXJEaWN0cy5sZW5ndGgpIHsKICAgICAgZm9yIChjb25zdCBbbnVtLCBlbnRyeV0gb2YgdGhpcy5lbnRyaWVzLmVudHJpZXMoKSkgewogICAgICAgIGlmICghZW50cnkpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBjb25zdCByZWYgPSBSZWYuZ2V0KG51bSwgZW50cnkuZ2VuKTsKICAgICAgICBsZXQgb2JqOwogICAgICAgIHRyeSB7CiAgICAgICAgICBvYmogPSB0aGlzLmZldGNoKHJlZik7CiAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pIHsKICAgICAgICAgIG9iaiA9IG9iai5kaWN0OwogICAgICAgIH0KICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgRGljdCAmJiBvYmouaGFzKCJSb290IikpIHsKICAgICAgICAgIHJldHVybiBvYmo7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICB0aHJvdyBuZXcgSW52YWxpZFBERkV4Y2VwdGlvbigiSW52YWxpZCBQREYgc3RydWN0dXJlLiIpOwogIH0KICByZWFkWFJlZihyZWNvdmVyeU1vZGUgPSBmYWxzZSkgewogICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW07CiAgICBjb25zdCBzdGFydFhSZWZQYXJzZWRDYWNoZSA9IG5ldyBTZXQoKTsKICAgIHdoaWxlICh0aGlzLnN0YXJ0WFJlZlF1ZXVlLmxlbmd0aCkgewogICAgICB0cnkgewogICAgICAgIGNvbnN0IHN0YXJ0WFJlZiA9IHRoaXMuc3RhcnRYUmVmUXVldWVbMF07CiAgICAgICAgaWYgKHN0YXJ0WFJlZlBhcnNlZENhY2hlLmhhcyhzdGFydFhSZWYpKSB7CiAgICAgICAgICB3YXJuKCJyZWFkWFJlZiAtIHNraXBwaW5nIFhSZWYgdGFibGUgc2luY2UgaXQgd2FzIGFscmVhZHkgcGFyc2VkLiIpOwogICAgICAgICAgdGhpcy5zdGFydFhSZWZRdWV1ZS5zaGlmdCgpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIHN0YXJ0WFJlZlBhcnNlZENhY2hlLmFkZChzdGFydFhSZWYpOwogICAgICAgIHN0cmVhbS5wb3MgPSBzdGFydFhSZWYgKyBzdHJlYW0uc3RhcnQ7CiAgICAgICAgY29uc3QgcGFyc2VyID0gbmV3IFBhcnNlcih7CiAgICAgICAgICBsZXhlcjogbmV3IExleGVyKHN0cmVhbSksCiAgICAgICAgICB4cmVmOiB0aGlzLAogICAgICAgICAgYWxsb3dTdHJlYW1zOiB0cnVlCiAgICAgICAgfSk7CiAgICAgICAgbGV0IG9iaiA9IHBhcnNlci5nZXRPYmooKTsKICAgICAgICBsZXQgZGljdDsKICAgICAgICBpZiAoaXNDbWQob2JqLCAieHJlZiIpKSB7CiAgICAgICAgICBkaWN0ID0gdGhpcy5wcm9jZXNzWFJlZlRhYmxlKHBhcnNlcik7CiAgICAgICAgICBpZiAoIXRoaXMudG9wRGljdCkgewogICAgICAgICAgICB0aGlzLnRvcERpY3QgPSBkaWN0OwogICAgICAgICAgfQogICAgICAgICAgb2JqID0gZGljdC5nZXQoIlhSZWZTdG0iKTsKICAgICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG9iaikgJiYgIXRoaXMuX3hyZWZTdG1zLmhhcyhvYmopKSB7CiAgICAgICAgICAgIHRoaXMuX3hyZWZTdG1zLmFkZChvYmopOwogICAgICAgICAgICB0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2gob2JqKTsKICAgICAgICAgICAgdGhpcy4jZmlyc3RYUmVmU3RtUG9zID8/PSBvYmo7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG9iaikpIHsKICAgICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihwYXJzZXIuZ2V0T2JqKCkpIHx8ICFpc0NtZChwYXJzZXIuZ2V0T2JqKCksICJvYmoiKSB8fCAhKChvYmogPSBwYXJzZXIuZ2V0T2JqKCkpIGluc3RhbmNlb2YgQmFzZVN0cmVhbSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgc3RyZWFtIik7CiAgICAgICAgICB9CiAgICAgICAgICBkaWN0ID0gdGhpcy5wcm9jZXNzWFJlZlN0cmVhbShvYmopOwogICAgICAgICAgaWYgKCF0aGlzLnRvcERpY3QpIHsKICAgICAgICAgICAgdGhpcy50b3BEaWN0ID0gZGljdDsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghZGljdCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkZhaWxlZCB0byByZWFkIFhSZWYgc3RyZWFtIik7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIHN0cmVhbSBoZWFkZXIiKTsKICAgICAgICB9CiAgICAgICAgb2JqID0gZGljdC5nZXQoIlByZXYiKTsKICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihvYmopKSB7CiAgICAgICAgICB0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2gob2JqKTsKICAgICAgICB9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIFJlZikgewogICAgICAgICAgdGhpcy5zdGFydFhSZWZRdWV1ZS5wdXNoKG9iai5udW0pOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIGlmIChlIGluc3RhbmNlb2YgTWlzc2luZ0RhdGFFeGNlcHRpb24pIHsKICAgICAgICAgIHRocm93IGU7CiAgICAgICAgfQogICAgICAgIGluZm8oIih3aGlsZSByZWFkaW5nIFhSZWYpOiAiICsgZSk7CiAgICAgIH0KICAgICAgdGhpcy5zdGFydFhSZWZRdWV1ZS5zaGlmdCgpOwogICAgfQogICAgaWYgKHRoaXMudG9wRGljdCkgewogICAgICByZXR1cm4gdGhpcy50b3BEaWN0OwogICAgfQogICAgaWYgKHJlY292ZXJ5TW9kZSkgewogICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgfQogICAgdGhyb3cgbmV3IFhSZWZQYXJzZUV4Y2VwdGlvbigpOwogIH0KICBnZXQgbGFzdFhSZWZTdHJlYW1Qb3MoKSB7CiAgICByZXR1cm4gdGhpcy4jZmlyc3RYUmVmU3RtUG9zID8/ICh0aGlzLl94cmVmU3Rtcy5zaXplID4gMCA/IE1hdGgubWF4KC4uLnRoaXMuX3hyZWZTdG1zKSA6IG51bGwpOwogIH0KICBnZXRFbnRyeShpKSB7CiAgICBjb25zdCB4cmVmRW50cnkgPSB0aGlzLmVudHJpZXNbaV07CiAgICBpZiAoeHJlZkVudHJ5ICYmICF4cmVmRW50cnkuZnJlZSAmJiB4cmVmRW50cnkub2Zmc2V0KSB7CiAgICAgIHJldHVybiB4cmVmRW50cnk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CiAgZmV0Y2hJZlJlZihvYmosIHN1cHByZXNzRW5jcnlwdGlvbiA9IGZhbHNlKSB7CiAgICBpZiAob2JqIGluc3RhbmNlb2YgUmVmKSB7CiAgICAgIHJldHVybiB0aGlzLmZldGNoKG9iaiwgc3VwcHJlc3NFbmNyeXB0aW9uKTsKICAgIH0KICAgIHJldHVybiBvYmo7CiAgfQogIGZldGNoKHJlZiwgc3VwcHJlc3NFbmNyeXB0aW9uID0gZmFsc2UpIHsKICAgIGlmICghKHJlZiBpbnN0YW5jZW9mIFJlZikpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJyZWYgb2JqZWN0IGlzIG5vdCBhIHJlZmVyZW5jZSIpOwogICAgfQogICAgY29uc3QgbnVtID0gcmVmLm51bTsKICAgIGNvbnN0IGNhY2hlRW50cnkgPSB0aGlzLl9jYWNoZU1hcC5nZXQobnVtKTsKICAgIGlmIChjYWNoZUVudHJ5ICE9PSB1bmRlZmluZWQpIHsKICAgICAgaWYgKGNhY2hlRW50cnkgaW5zdGFuY2VvZiBEaWN0ICYmICFjYWNoZUVudHJ5Lm9iaklkKSB7CiAgICAgICAgY2FjaGVFbnRyeS5vYmpJZCA9IHJlZi50b1N0cmluZygpOwogICAgICB9CiAgICAgIHJldHVybiBjYWNoZUVudHJ5OwogICAgfQogICAgbGV0IHhyZWZFbnRyeSA9IHRoaXMuZ2V0RW50cnkobnVtKTsKICAgIGlmICh4cmVmRW50cnkgPT09IG51bGwpIHsKICAgICAgcmV0dXJuIHhyZWZFbnRyeTsKICAgIH0KICAgIGlmICh0aGlzLl9wZW5kaW5nUmVmcy5oYXMocmVmKSkgewogICAgICB0aGlzLl9wZW5kaW5nUmVmcy5yZW1vdmUocmVmKTsKICAgICAgd2FybihgSWdub3JpbmcgY2lyY3VsYXIgcmVmZXJlbmNlOiAke3JlZn0uYCk7CiAgICAgIHJldHVybiBDSVJDVUxBUl9SRUY7CiAgICB9CiAgICB0aGlzLl9wZW5kaW5nUmVmcy5wdXQocmVmKTsKICAgIHRyeSB7CiAgICAgIHhyZWZFbnRyeSA9IHhyZWZFbnRyeS51bmNvbXByZXNzZWQgPyB0aGlzLmZldGNoVW5jb21wcmVzc2VkKHJlZiwgeHJlZkVudHJ5LCBzdXBwcmVzc0VuY3J5cHRpb24pIDogdGhpcy5mZXRjaENvbXByZXNzZWQocmVmLCB4cmVmRW50cnksIHN1cHByZXNzRW5jcnlwdGlvbik7CiAgICAgIHRoaXMuX3BlbmRpbmdSZWZzLnJlbW92ZShyZWYpOwogICAgfSBjYXRjaCAoZXgpIHsKICAgICAgdGhpcy5fcGVuZGluZ1JlZnMucmVtb3ZlKHJlZik7CiAgICAgIHRocm93IGV4OwogICAgfQogICAgaWYgKHhyZWZFbnRyeSBpbnN0YW5jZW9mIERpY3QpIHsKICAgICAgeHJlZkVudHJ5Lm9iaklkID0gcmVmLnRvU3RyaW5nKCk7CiAgICB9IGVsc2UgaWYgKHhyZWZFbnRyeSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pIHsKICAgICAgeHJlZkVudHJ5LmRpY3Qub2JqSWQgPSByZWYudG9TdHJpbmcoKTsKICAgIH0KICAgIHJldHVybiB4cmVmRW50cnk7CiAgfQogIGZldGNoVW5jb21wcmVzc2VkKHJlZiwgeHJlZkVudHJ5LCBzdXBwcmVzc0VuY3J5cHRpb24gPSBmYWxzZSkgewogICAgY29uc3QgZ2VuID0gcmVmLmdlbjsKICAgIGxldCBudW0gPSByZWYubnVtOwogICAgaWYgKHhyZWZFbnRyeS5nZW4gIT09IGdlbikgewogICAgICBjb25zdCBtc2cgPSBgSW5jb25zaXN0ZW50IGdlbmVyYXRpb24gaW4gWFJlZjogJHtyZWZ9YDsKICAgICAgaWYgKHRoaXMuX2dlbmVyYXRpb25GYWxsYmFjayAmJiB4cmVmRW50cnkuZ2VuIDwgZ2VuKSB7CiAgICAgICAgd2Fybihtc2cpOwogICAgICAgIHJldHVybiB0aGlzLmZldGNoVW5jb21wcmVzc2VkKFJlZi5nZXQobnVtLCB4cmVmRW50cnkuZ2VuKSwgeHJlZkVudHJ5LCBzdXBwcmVzc0VuY3J5cHRpb24pOwogICAgICB9CiAgICAgIHRocm93IG5ldyBYUmVmRW50cnlFeGNlcHRpb24obXNnKTsKICAgIH0KICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtLm1ha2VTdWJTdHJlYW0oeHJlZkVudHJ5Lm9mZnNldCArIHRoaXMuc3RyZWFtLnN0YXJ0KTsKICAgIGNvbnN0IHBhcnNlciA9IG5ldyBQYXJzZXIoewogICAgICBsZXhlcjogbmV3IExleGVyKHN0cmVhbSksCiAgICAgIHhyZWY6IHRoaXMsCiAgICAgIGFsbG93U3RyZWFtczogdHJ1ZQogICAgfSk7CiAgICBjb25zdCBvYmoxID0gcGFyc2VyLmdldE9iaigpOwogICAgY29uc3Qgb2JqMiA9IHBhcnNlci5nZXRPYmooKTsKICAgIGNvbnN0IG9iajMgPSBwYXJzZXIuZ2V0T2JqKCk7CiAgICBpZiAob2JqMSAhPT0gbnVtIHx8IG9iajIgIT09IGdlbiB8fCAhKG9iajMgaW5zdGFuY2VvZiBDbWQpKSB7CiAgICAgIHRocm93IG5ldyBYUmVmRW50cnlFeGNlcHRpb24oYEJhZCAodW5jb21wcmVzc2VkKSBYUmVmIGVudHJ5OiAke3JlZn1gKTsKICAgIH0KICAgIGlmIChvYmozLmNtZCAhPT0gIm9iaiIpIHsKICAgICAgaWYgKG9iajMuY21kLnN0YXJ0c1dpdGgoIm9iaiIpKSB7CiAgICAgICAgbnVtID0gcGFyc2VJbnQob2JqMy5jbWQuc3Vic3RyaW5nKDMpLCAxMCk7CiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obnVtKSkgewogICAgICAgICAgcmV0dXJuIG51bTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhyb3cgbmV3IFhSZWZFbnRyeUV4Y2VwdGlvbihgQmFkICh1bmNvbXByZXNzZWQpIFhSZWYgZW50cnk6ICR7cmVmfWApOwogICAgfQogICAgeHJlZkVudHJ5ID0gdGhpcy5lbmNyeXB0ICYmICFzdXBwcmVzc0VuY3J5cHRpb24gPyBwYXJzZXIuZ2V0T2JqKHRoaXMuZW5jcnlwdC5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0obnVtLCBnZW4pKSA6IHBhcnNlci5nZXRPYmooKTsKICAgIGlmICghKHhyZWZFbnRyeSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pKSB7CiAgICAgIHRoaXMuX2NhY2hlTWFwLnNldChudW0sIHhyZWZFbnRyeSk7CiAgICB9CiAgICByZXR1cm4geHJlZkVudHJ5OwogIH0KICBmZXRjaENvbXByZXNzZWQocmVmLCB4cmVmRW50cnksIHN1cHByZXNzRW5jcnlwdGlvbiA9IGZhbHNlKSB7CiAgICBjb25zdCB0YWJsZU9mZnNldCA9IHhyZWZFbnRyeS5vZmZzZXQ7CiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLmZldGNoKFJlZi5nZXQodGFibGVPZmZzZXQsIDApKTsKICAgIGlmICghKHN0cmVhbSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pKSB7CiAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiYmFkIE9ialN0bSBzdHJlYW0iKTsKICAgIH0KICAgIGNvbnN0IGZpcnN0ID0gc3RyZWFtLmRpY3QuZ2V0KCJGaXJzdCIpOwogICAgY29uc3QgbiA9IHN0cmVhbS5kaWN0LmdldCgiTiIpOwogICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGZpcnN0KSB8fCAhTnVtYmVyLmlzSW50ZWdlcihuKSkgewogICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoImludmFsaWQgZmlyc3QgYW5kIG4gcGFyYW1ldGVycyBmb3IgT2JqU3RtIHN0cmVhbSIpOwogICAgfQogICAgbGV0IHBhcnNlciA9IG5ldyBQYXJzZXIoewogICAgICBsZXhlcjogbmV3IExleGVyKHN0cmVhbSksCiAgICAgIHhyZWY6IHRoaXMsCiAgICAgIGFsbG93U3RyZWFtczogdHJ1ZQogICAgfSk7CiAgICBjb25zdCBudW1zID0gbmV3IEFycmF5KG4pOwogICAgY29uc3Qgb2Zmc2V0cyA9IG5ldyBBcnJheShuKTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgIGNvbnN0IG51bSA9IHBhcnNlci5nZXRPYmooKTsKICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG51bSkpIHsKICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYGludmFsaWQgb2JqZWN0IG51bWJlciBpbiB0aGUgT2JqU3RtIHN0cmVhbTogJHtudW19YCk7CiAgICAgIH0KICAgICAgY29uc3Qgb2Zmc2V0ID0gcGFyc2VyLmdldE9iaigpOwogICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIob2Zmc2V0KSkgewogICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcihgaW52YWxpZCBvYmplY3Qgb2Zmc2V0IGluIHRoZSBPYmpTdG0gc3RyZWFtOiAke29mZnNldH1gKTsKICAgICAgfQogICAgICBudW1zW2ldID0gbnVtOwogICAgICBvZmZzZXRzW2ldID0gb2Zmc2V0OwogICAgfQogICAgY29uc3Qgc3RhcnQgPSAoc3RyZWFtLnN0YXJ0IHx8IDApICsgZmlyc3Q7CiAgICBjb25zdCBlbnRyaWVzID0gbmV3IEFycmF5KG4pOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgY29uc3QgbGVuZ3RoID0gaSA8IG4gLSAxID8gb2Zmc2V0c1tpICsgMV0gLSBvZmZzZXRzW2ldIDogdW5kZWZpbmVkOwogICAgICBpZiAobGVuZ3RoIDwgMCkgewogICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiSW52YWxpZCBvZmZzZXQgaW4gdGhlIE9ialN0bSBzdHJlYW0uIik7CiAgICAgIH0KICAgICAgcGFyc2VyID0gbmV3IFBhcnNlcih7CiAgICAgICAgbGV4ZXI6IG5ldyBMZXhlcihzdHJlYW0ubWFrZVN1YlN0cmVhbShzdGFydCArIG9mZnNldHNbaV0sIGxlbmd0aCwgc3RyZWFtLmRpY3QpKSwKICAgICAgICB4cmVmOiB0aGlzLAogICAgICAgIGFsbG93U3RyZWFtczogdHJ1ZQogICAgICB9KTsKICAgICAgY29uc3Qgb2JqID0gcGFyc2VyLmdldE9iaigpOwogICAgICBlbnRyaWVzW2ldID0gb2JqOwogICAgICBpZiAob2JqIGluc3RhbmNlb2YgQmFzZVN0cmVhbSkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGNvbnN0IG51bSA9IG51bXNbaV0sCiAgICAgICAgZW50cnkgPSB0aGlzLmVudHJpZXNbbnVtXTsKICAgICAgaWYgKGVudHJ5ICYmIGVudHJ5Lm9mZnNldCA9PT0gdGFibGVPZmZzZXQgJiYgZW50cnkuZ2VuID09PSBpKSB7CiAgICAgICAgdGhpcy5fY2FjaGVNYXAuc2V0KG51bSwgb2JqKTsKICAgICAgfQogICAgfQogICAgeHJlZkVudHJ5ID0gZW50cmllc1t4cmVmRW50cnkuZ2VuXTsKICAgIGlmICh4cmVmRW50cnkgPT09IHVuZGVmaW5lZCkgewogICAgICB0aHJvdyBuZXcgWFJlZkVudHJ5RXhjZXB0aW9uKGBCYWQgKGNvbXByZXNzZWQpIFhSZWYgZW50cnk6ICR7cmVmfWApOwogICAgfQogICAgcmV0dXJuIHhyZWZFbnRyeTsKICB9CiAgYXN5bmMgZmV0Y2hJZlJlZkFzeW5jKG9iaiwgc3VwcHJlc3NFbmNyeXB0aW9uKSB7CiAgICBpZiAob2JqIGluc3RhbmNlb2YgUmVmKSB7CiAgICAgIHJldHVybiB0aGlzLmZldGNoQXN5bmMob2JqLCBzdXBwcmVzc0VuY3J5cHRpb24pOwogICAgfQogICAgcmV0dXJuIG9iajsKICB9CiAgYXN5bmMgZmV0Y2hBc3luYyhyZWYsIHN1cHByZXNzRW5jcnlwdGlvbikgewogICAgdHJ5IHsKICAgICAgcmV0dXJuIHRoaXMuZmV0Y2gocmVmLCBzdXBwcmVzc0VuY3J5cHRpb24pOwogICAgfSBjYXRjaCAoZXgpIHsKICAgICAgaWYgKCEoZXggaW5zdGFuY2VvZiBNaXNzaW5nRGF0YUV4Y2VwdGlvbikpIHsKICAgICAgICB0aHJvdyBleDsKICAgICAgfQogICAgICBhd2FpdCB0aGlzLnBkZk1hbmFnZXIucmVxdWVzdFJhbmdlKGV4LmJlZ2luLCBleC5lbmQpOwogICAgICByZXR1cm4gdGhpcy5mZXRjaEFzeW5jKHJlZiwgc3VwcHJlc3NFbmNyeXB0aW9uKTsKICAgIH0KICB9CiAgZ2V0Q2F0YWxvZ09iaigpIHsKICAgIHJldHVybiB0aGlzLnJvb3Q7CiAgfQp9Cgo7Ly8gLi9zcmMvY29yZS9kb2N1bWVudC5qcwoKCgoKCgoKCgoKCgoKCgoKCgoKY29uc3QgTEVUVEVSX1NJWkVfTUVESUFCT1ggPSBbMCwgMCwgNjEyLCA3OTJdOwpjbGFzcyBQYWdlIHsKICBjb25zdHJ1Y3Rvcih7CiAgICBwZGZNYW5hZ2VyLAogICAgeHJlZiwKICAgIHBhZ2VJbmRleCwKICAgIHBhZ2VEaWN0LAogICAgcmVmLAogICAgZ2xvYmFsSWRGYWN0b3J5LAogICAgZm9udENhY2hlLAogICAgYnVpbHRJbkNNYXBDYWNoZSwKICAgIHN0YW5kYXJkRm9udERhdGFDYWNoZSwKICAgIGdsb2JhbENvbG9yU3BhY2VDYWNoZSwKICAgIGdsb2JhbEltYWdlQ2FjaGUsCiAgICBzeXN0ZW1Gb250Q2FjaGUsCiAgICBub25CbGVuZE1vZGVzU2V0LAogICAgeGZhRmFjdG9yeQogIH0pIHsKICAgIHRoaXMucGRmTWFuYWdlciA9IHBkZk1hbmFnZXI7CiAgICB0aGlzLnBhZ2VJbmRleCA9IHBhZ2VJbmRleDsKICAgIHRoaXMucGFnZURpY3QgPSBwYWdlRGljdDsKICAgIHRoaXMueHJlZiA9IHhyZWY7CiAgICB0aGlzLnJlZiA9IHJlZjsKICAgIHRoaXMuZm9udENhY2hlID0gZm9udENhY2hlOwogICAgdGhpcy5idWlsdEluQ01hcENhY2hlID0gYnVpbHRJbkNNYXBDYWNoZTsKICAgIHRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlID0gc3RhbmRhcmRGb250RGF0YUNhY2hlOwogICAgdGhpcy5nbG9iYWxDb2xvclNwYWNlQ2FjaGUgPSBnbG9iYWxDb2xvclNwYWNlQ2FjaGU7CiAgICB0aGlzLmdsb2JhbEltYWdlQ2FjaGUgPSBnbG9iYWxJbWFnZUNhY2hlOwogICAgdGhpcy5zeXN0ZW1Gb250Q2FjaGUgPSBzeXN0ZW1Gb250Q2FjaGU7CiAgICB0aGlzLm5vbkJsZW5kTW9kZXNTZXQgPSBub25CbGVuZE1vZGVzU2V0OwogICAgdGhpcy5ldmFsdWF0b3JPcHRpb25zID0gcGRmTWFuYWdlci5ldmFsdWF0b3JPcHRpb25zOwogICAgdGhpcy5yZXNvdXJjZXNQcm9taXNlID0gbnVsbDsKICAgIHRoaXMueGZhRmFjdG9yeSA9IHhmYUZhY3Rvcnk7CiAgICBjb25zdCBpZENvdW50ZXJzID0gewogICAgICBvYmo6IDAKICAgIH07CiAgICB0aGlzLl9sb2NhbElkRmFjdG9yeSA9IGNsYXNzIGV4dGVuZHMgZ2xvYmFsSWRGYWN0b3J5IHsKICAgICAgc3RhdGljIGNyZWF0ZU9iaklkKCkgewogICAgICAgIHJldHVybiBgcCR7cGFnZUluZGV4fV8keysraWRDb3VudGVycy5vYmp9YDsKICAgICAgfQogICAgICBzdGF0aWMgZ2V0UGFnZU9iaklkKCkgewogICAgICAgIHJldHVybiBgcCR7cmVmLnRvU3RyaW5nKCl9YDsKICAgICAgfQogICAgfTsKICB9CiAgX2dldEluaGVyaXRhYmxlUHJvcGVydHkoa2V5LCBnZXRBcnJheSA9IGZhbHNlKSB7CiAgICBjb25zdCB2YWx1ZSA9IGdldEluaGVyaXRhYmxlUHJvcGVydHkoewogICAgICBkaWN0OiB0aGlzLnBhZ2VEaWN0LAogICAgICBrZXksCiAgICAgIGdldEFycmF5LAogICAgICBzdG9wV2hlbkZvdW5kOiBmYWxzZQogICAgfSk7CiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7CiAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEgfHwgISh2YWx1ZVswXSBpbnN0YW5jZW9mIERpY3QpKSB7CiAgICAgIHJldHVybiB2YWx1ZVswXTsKICAgIH0KICAgIHJldHVybiBEaWN0Lm1lcmdlKHsKICAgICAgeHJlZjogdGhpcy54cmVmLAogICAgICBkaWN0QXJyYXk6IHZhbHVlCiAgICB9KTsKICB9CiAgZ2V0IGNvbnRlbnQoKSB7CiAgICByZXR1cm4gdGhpcy5wYWdlRGljdC5nZXRBcnJheSgiQ29udGVudHMiKTsKICB9CiAgZ2V0IHJlc291cmNlcygpIHsKICAgIGNvbnN0IHJlc291cmNlcyA9IHRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoIlJlc291cmNlcyIpOwogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAicmVzb3VyY2VzIiwgcmVzb3VyY2VzIGluc3RhbmNlb2YgRGljdCA/IHJlc291cmNlcyA6IERpY3QuZW1wdHkpOwogIH0KICBfZ2V0Qm91bmRpbmdCb3gobmFtZSkgewogICAgaWYgKHRoaXMueGZhRGF0YSkgewogICAgICByZXR1cm4gdGhpcy54ZmFEYXRhLmJib3g7CiAgICB9CiAgICBjb25zdCBib3ggPSBsb29rdXBOb3JtYWxSZWN0KHRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkobmFtZSwgdHJ1ZSksIG51bGwpOwogICAgaWYgKGJveCkgewogICAgICBpZiAoYm94WzJdIC0gYm94WzBdID4gMCAmJiBib3hbM10gLSBib3hbMV0gPiAwKSB7CiAgICAgICAgcmV0dXJuIGJveDsKICAgICAgfQogICAgICB3YXJuKGBFbXB0eSwgb3IgaW52YWxpZCwgLyR7bmFtZX0gZW50cnkuYCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CiAgZ2V0IG1lZGlhQm94KCkgewogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAibWVkaWFCb3giLCB0aGlzLl9nZXRCb3VuZGluZ0JveCgiTWVkaWFCb3giKSB8fCBMRVRURVJfU0laRV9NRURJQUJPWCk7CiAgfQogIGdldCBjcm9wQm94KCkgewogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAiY3JvcEJveCIsIHRoaXMuX2dldEJvdW5kaW5nQm94KCJDcm9wQm94IikgfHwgdGhpcy5tZWRpYUJveCk7CiAgfQogIGdldCB1c2VyVW5pdCgpIHsKICAgIGNvbnN0IG9iaiA9IHRoaXMucGFnZURpY3QuZ2V0KCJVc2VyVW5pdCIpOwogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAidXNlclVuaXQiLCB0eXBlb2Ygb2JqID09PSAibnVtYmVyIiAmJiBvYmogPiAwID8gb2JqIDogMS4wKTsKICB9CiAgZ2V0IHZpZXcoKSB7CiAgICBjb25zdCB7CiAgICAgIGNyb3BCb3gsCiAgICAgIG1lZGlhQm94CiAgICB9ID0gdGhpczsKICAgIGlmIChjcm9wQm94ICE9PSBtZWRpYUJveCAmJiAhaXNBcnJheUVxdWFsKGNyb3BCb3gsIG1lZGlhQm94KSkgewogICAgICBjb25zdCBib3ggPSBVdGlsLmludGVyc2VjdChjcm9wQm94LCBtZWRpYUJveCk7CiAgICAgIGlmIChib3ggJiYgYm94WzJdIC0gYm94WzBdID4gMCAmJiBib3hbM10gLSBib3hbMV0gPiAwKSB7CiAgICAgICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAidmlldyIsIGJveCk7CiAgICAgIH0KICAgICAgd2FybigiRW1wdHkgL0Nyb3BCb3ggYW5kIC9NZWRpYUJveCBpbnRlcnNlY3Rpb24uIik7CiAgICB9CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJ2aWV3IiwgbWVkaWFCb3gpOwogIH0KICBnZXQgcm90YXRlKCkgewogICAgbGV0IHJvdGF0ZSA9IHRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoIlJvdGF0ZSIpIHx8IDA7CiAgICBpZiAocm90YXRlICUgOTAgIT09IDApIHsKICAgICAgcm90YXRlID0gMDsKICAgIH0gZWxzZSBpZiAocm90YXRlID49IDM2MCkgewogICAgICByb3RhdGUgJT0gMzYwOwogICAgfSBlbHNlIGlmIChyb3RhdGUgPCAwKSB7CiAgICAgIHJvdGF0ZSA9IChyb3RhdGUgJSAzNjAgKyAzNjApICUgMzYwOwogICAgfQogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAicm90YXRlIiwgcm90YXRlKTsKICB9CiAgX29uU3ViU3RyZWFtRXJyb3IocmVhc29uLCBvYmpJZCkgewogICAgaWYgKHRoaXMuZXZhbHVhdG9yT3B0aW9ucy5pZ25vcmVFcnJvcnMpIHsKICAgICAgd2FybihgZ2V0Q29udGVudFN0cmVhbSAtIGlnbm9yaW5nIHN1Yi1zdHJlYW0gKCR7b2JqSWR9KTogIiR7cmVhc29ufSIuYCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRocm93IHJlYXNvbjsKICB9CiAgYXN5bmMgZ2V0Q29udGVudFN0cmVhbSgpIHsKICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlKHRoaXMsICJjb250ZW50Iik7CiAgICBpZiAoY29udGVudCBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pIHsKICAgICAgcmV0dXJuIGNvbnRlbnQ7CiAgICB9CiAgICBpZiAoQXJyYXkuaXNBcnJheShjb250ZW50KSkgewogICAgICByZXR1cm4gbmV3IFN0cmVhbXNTZXF1ZW5jZVN0cmVhbShjb250ZW50LCB0aGlzLl9vblN1YlN0cmVhbUVycm9yLmJpbmQodGhpcykpOwogICAgfQogICAgcmV0dXJuIG5ldyBOdWxsU3RyZWFtKCk7CiAgfQogIGdldCB4ZmFEYXRhKCkgewogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAieGZhRGF0YSIsIHRoaXMueGZhRmFjdG9yeSA/IHsKICAgICAgYmJveDogdGhpcy54ZmFGYWN0b3J5LmdldEJvdW5kaW5nQm94KHRoaXMucGFnZUluZGV4KQogICAgfSA6IG51bGwpOwogIH0KICBhc3luYyAjcmVwbGFjZUlkQnlSZWYoYW5ub3RhdGlvbnMsIGRlbGV0ZWRBbm5vdGF0aW9ucywgZXhpc3RpbmdBbm5vdGF0aW9ucykgewogICAgY29uc3QgcHJvbWlzZXMgPSBbXTsKICAgIGZvciAoY29uc3QgYW5ub3RhdGlvbiBvZiBhbm5vdGF0aW9ucykgewogICAgICBpZiAoYW5ub3RhdGlvbi5pZCkgewogICAgICAgIGNvbnN0IHJlZiA9IFJlZi5mcm9tU3RyaW5nKGFubm90YXRpb24uaWQpOwogICAgICAgIGlmICghcmVmKSB7CiAgICAgICAgICB3YXJuKGBBIG5vbi1saW5rZWQgYW5ub3RhdGlvbiBjYW5ub3QgYmUgbW9kaWZpZWQ6ICR7YW5ub3RhdGlvbi5pZH1gKTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBpZiAoYW5ub3RhdGlvbi5kZWxldGVkKSB7CiAgICAgICAgICBkZWxldGVkQW5ub3RhdGlvbnMucHV0KHJlZiwgcmVmKTsKICAgICAgICAgIGlmIChhbm5vdGF0aW9uLnBvcHVwUmVmKSB7CiAgICAgICAgICAgIGNvbnN0IHBvcHVwUmVmID0gUmVmLmZyb21TdHJpbmcoYW5ub3RhdGlvbi5wb3B1cFJlZik7CiAgICAgICAgICAgIGlmIChwb3B1cFJlZikgewogICAgICAgICAgICAgIGRlbGV0ZWRBbm5vdGF0aW9ucy5wdXQocG9wdXBSZWYsIHBvcHVwUmVmKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGV4aXN0aW5nQW5ub3RhdGlvbnM/LnB1dChyZWYpOwogICAgICAgIGFubm90YXRpb24ucmVmID0gcmVmOwogICAgICAgIHByb21pc2VzLnB1c2godGhpcy54cmVmLmZldGNoQXN5bmMocmVmKS50aGVuKG9iaiA9PiB7CiAgICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgRGljdCkgewogICAgICAgICAgICBhbm5vdGF0aW9uLm9sZEFubm90YXRpb24gPSBvYmouY2xvbmUoKTsKICAgICAgICAgIH0KICAgICAgICB9LCAoKSA9PiB7CiAgICAgICAgICB3YXJuKGBDYW5ub3QgZmV0Y2ggXGBvbGRBbm5vdGF0aW9uXGAgZm9yOiAke3JlZn0uYCk7CiAgICAgICAgfSkpOwogICAgICAgIGRlbGV0ZSBhbm5vdGF0aW9uLmlkOwogICAgICB9CiAgICB9CiAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7CiAgfQogIGFzeW5jIHNhdmVOZXdBbm5vdGF0aW9ucyhoYW5kbGVyLCB0YXNrLCBhbm5vdGF0aW9ucywgaW1hZ2VQcm9taXNlcywgY2hhbmdlcykgewogICAgaWYgKHRoaXMueGZhRmFjdG9yeSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIlhGQTogQ2Fubm90IHNhdmUgbmV3IGFubm90YXRpb25zLiIpOwogICAgfQogICAgY29uc3QgcGFydGlhbEV2YWx1YXRvciA9IG5ldyBQYXJ0aWFsRXZhbHVhdG9yKHsKICAgICAgeHJlZjogdGhpcy54cmVmLAogICAgICBoYW5kbGVyLAogICAgICBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4LAogICAgICBpZEZhY3Rvcnk6IHRoaXMuX2xvY2FsSWRGYWN0b3J5LAogICAgICBmb250Q2FjaGU6IHRoaXMuZm9udENhY2hlLAogICAgICBidWlsdEluQ01hcENhY2hlOiB0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsCiAgICAgIHN0YW5kYXJkRm9udERhdGFDYWNoZTogdGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsCiAgICAgIGdsb2JhbENvbG9yU3BhY2VDYWNoZTogdGhpcy5nbG9iYWxDb2xvclNwYWNlQ2FjaGUsCiAgICAgIGdsb2JhbEltYWdlQ2FjaGU6IHRoaXMuZ2xvYmFsSW1hZ2VDYWNoZSwKICAgICAgc3lzdGVtRm9udENhY2hlOiB0aGlzLnN5c3RlbUZvbnRDYWNoZSwKICAgICAgb3B0aW9uczogdGhpcy5ldmFsdWF0b3JPcHRpb25zCiAgICB9KTsKICAgIGNvbnN0IGRlbGV0ZWRBbm5vdGF0aW9ucyA9IG5ldyBSZWZTZXRDYWNoZSgpOwogICAgY29uc3QgZXhpc3RpbmdBbm5vdGF0aW9ucyA9IG5ldyBSZWZTZXQoKTsKICAgIGF3YWl0IHRoaXMuI3JlcGxhY2VJZEJ5UmVmKGFubm90YXRpb25zLCBkZWxldGVkQW5ub3RhdGlvbnMsIGV4aXN0aW5nQW5ub3RhdGlvbnMpOwogICAgY29uc3QgcGFnZURpY3QgPSB0aGlzLnBhZ2VEaWN0OwogICAgY29uc3QgYW5ub3RhdGlvbnNBcnJheSA9IHRoaXMuYW5ub3RhdGlvbnMuZmlsdGVyKGEgPT4gIShhIGluc3RhbmNlb2YgUmVmICYmIGRlbGV0ZWRBbm5vdGF0aW9ucy5oYXMoYSkpKTsKICAgIGNvbnN0IG5ld0RhdGEgPSBhd2FpdCBBbm5vdGF0aW9uRmFjdG9yeS5zYXZlTmV3QW5ub3RhdGlvbnMocGFydGlhbEV2YWx1YXRvciwgdGFzaywgYW5ub3RhdGlvbnMsIGltYWdlUHJvbWlzZXMsIGNoYW5nZXMpOwogICAgZm9yIChjb25zdCB7CiAgICAgIHJlZgogICAgfSBvZiBuZXdEYXRhLmFubm90YXRpb25zKSB7CiAgICAgIGlmIChyZWYgaW5zdGFuY2VvZiBSZWYgJiYgIWV4aXN0aW5nQW5ub3RhdGlvbnMuaGFzKHJlZikpIHsKICAgICAgICBhbm5vdGF0aW9uc0FycmF5LnB1c2gocmVmKTsKICAgICAgfQogICAgfQogICAgY29uc3QgZGljdCA9IHBhZ2VEaWN0LmNsb25lKCk7CiAgICBkaWN0LnNldCgiQW5ub3RzIiwgYW5ub3RhdGlvbnNBcnJheSk7CiAgICBjaGFuZ2VzLnB1dCh0aGlzLnJlZiwgewogICAgICBkYXRhOiBkaWN0CiAgICB9KTsKICAgIGZvciAoY29uc3QgZGVsZXRlZFJlZiBvZiBkZWxldGVkQW5ub3RhdGlvbnMpIHsKICAgICAgY2hhbmdlcy5wdXQoZGVsZXRlZFJlZiwgewogICAgICAgIGRhdGE6IG51bGwKICAgICAgfSk7CiAgICB9CiAgfQogIGFzeW5jIHNhdmUoaGFuZGxlciwgdGFzaywgYW5ub3RhdGlvblN0b3JhZ2UsIGNoYW5nZXMpIHsKICAgIGNvbnN0IHBhcnRpYWxFdmFsdWF0b3IgPSBuZXcgUGFydGlhbEV2YWx1YXRvcih7CiAgICAgIHhyZWY6IHRoaXMueHJlZiwKICAgICAgaGFuZGxlciwKICAgICAgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCwKICAgICAgaWRGYWN0b3J5OiB0aGlzLl9sb2NhbElkRmFjdG9yeSwKICAgICAgZm9udENhY2hlOiB0aGlzLmZvbnRDYWNoZSwKICAgICAgYnVpbHRJbkNNYXBDYWNoZTogdGhpcy5idWlsdEluQ01hcENhY2hlLAogICAgICBzdGFuZGFyZEZvbnREYXRhQ2FjaGU6IHRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLAogICAgICBnbG9iYWxDb2xvclNwYWNlQ2FjaGU6IHRoaXMuZ2xvYmFsQ29sb3JTcGFjZUNhY2hlLAogICAgICBnbG9iYWxJbWFnZUNhY2hlOiB0aGlzLmdsb2JhbEltYWdlQ2FjaGUsCiAgICAgIHN5c3RlbUZvbnRDYWNoZTogdGhpcy5zeXN0ZW1Gb250Q2FjaGUsCiAgICAgIG9wdGlvbnM6IHRoaXMuZXZhbHVhdG9yT3B0aW9ucwogICAgfSk7CiAgICBjb25zdCBhbm5vdGF0aW9ucyA9IGF3YWl0IHRoaXMuX3BhcnNlZEFubm90YXRpb25zOwogICAgY29uc3QgcHJvbWlzZXMgPSBbXTsKICAgIGZvciAoY29uc3QgYW5ub3RhdGlvbiBvZiBhbm5vdGF0aW9ucykgewogICAgICBwcm9taXNlcy5wdXNoKGFubm90YXRpb24uc2F2ZShwYXJ0aWFsRXZhbHVhdG9yLCB0YXNrLCBhbm5vdGF0aW9uU3RvcmFnZSwgY2hhbmdlcykuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikgewogICAgICAgIHdhcm4oInNhdmUgLSBpZ25vcmluZyBhbm5vdGF0aW9uIGRhdGEgZHVyaW5nICIgKyBgIiR7dGFzay5uYW1lfSIgdGFzazogIiR7cmVhc29ufSIuYCk7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0pKTsKICAgIH0KICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7CiAgfQogIGFzeW5jIGxvYWRSZXNvdXJjZXMoa2V5cykgewogICAgYXdhaXQgKHRoaXMucmVzb3VyY2VzUHJvbWlzZSA/Pz0gdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCAicmVzb3VyY2VzIikpOwogICAgY29uc3Qgb2JqZWN0TG9hZGVyID0gbmV3IE9iamVjdExvYWRlcih0aGlzLnJlc291cmNlcywga2V5cywgdGhpcy54cmVmKTsKICAgIGF3YWl0IG9iamVjdExvYWRlci5sb2FkKCk7CiAgfQogIGFzeW5jIGdldE9wZXJhdG9yTGlzdCh7CiAgICBoYW5kbGVyLAogICAgc2luaywKICAgIHRhc2ssCiAgICBpbnRlbnQsCiAgICBjYWNoZUtleSwKICAgIGFubm90YXRpb25TdG9yYWdlID0gbnVsbCwKICAgIG1vZGlmaWVkSWRzID0gbnVsbAogIH0pIHsKICAgIGNvbnN0IGNvbnRlbnRTdHJlYW1Qcm9taXNlID0gdGhpcy5nZXRDb250ZW50U3RyZWFtKCk7CiAgICBjb25zdCByZXNvdXJjZXNQcm9taXNlID0gdGhpcy5sb2FkUmVzb3VyY2VzKFsiQ29sb3JTcGFjZSIsICJFeHRHU3RhdGUiLCAiRm9udCIsICJQYXR0ZXJuIiwgIlByb3BlcnRpZXMiLCAiU2hhZGluZyIsICJYT2JqZWN0Il0pOwogICAgY29uc3QgcGFydGlhbEV2YWx1YXRvciA9IG5ldyBQYXJ0aWFsRXZhbHVhdG9yKHsKICAgICAgeHJlZjogdGhpcy54cmVmLAogICAgICBoYW5kbGVyLAogICAgICBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4LAogICAgICBpZEZhY3Rvcnk6IHRoaXMuX2xvY2FsSWRGYWN0b3J5LAogICAgICBmb250Q2FjaGU6IHRoaXMuZm9udENhY2hlLAogICAgICBidWlsdEluQ01hcENhY2hlOiB0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsCiAgICAgIHN0YW5kYXJkRm9udERhdGFDYWNoZTogdGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsCiAgICAgIGdsb2JhbENvbG9yU3BhY2VDYWNoZTogdGhpcy5nbG9iYWxDb2xvclNwYWNlQ2FjaGUsCiAgICAgIGdsb2JhbEltYWdlQ2FjaGU6IHRoaXMuZ2xvYmFsSW1hZ2VDYWNoZSwKICAgICAgc3lzdGVtRm9udENhY2hlOiB0aGlzLnN5c3RlbUZvbnRDYWNoZSwKICAgICAgb3B0aW9uczogdGhpcy5ldmFsdWF0b3JPcHRpb25zCiAgICB9KTsKICAgIGNvbnN0IG5ld0Fubm90c0J5UGFnZSA9ICF0aGlzLnhmYUZhY3RvcnkgPyBnZXROZXdBbm5vdGF0aW9uc01hcChhbm5vdGF0aW9uU3RvcmFnZSkgOiBudWxsOwogICAgY29uc3QgbmV3QW5ub3RzID0gbmV3QW5ub3RzQnlQYWdlPy5nZXQodGhpcy5wYWdlSW5kZXgpOwogICAgbGV0IG5ld0Fubm90YXRpb25zUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShudWxsKTsKICAgIGxldCBkZWxldGVkQW5ub3RhdGlvbnMgPSBudWxsOwogICAgaWYgKG5ld0Fubm90cykgewogICAgICBjb25zdCBhbm5vdGF0aW9uR2xvYmFsc1Byb21pc2UgPSB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlRG9jKCJhbm5vdGF0aW9uR2xvYmFscyIpOwogICAgICBsZXQgaW1hZ2VQcm9taXNlczsKICAgICAgY29uc3QgbWlzc2luZ0JpdG1hcHMgPSBuZXcgU2V0KCk7CiAgICAgIGZvciAoY29uc3QgewogICAgICAgIGJpdG1hcElkLAogICAgICAgIGJpdG1hcAogICAgICB9IG9mIG5ld0Fubm90cykgewogICAgICAgIGlmIChiaXRtYXBJZCAmJiAhYml0bWFwICYmICFtaXNzaW5nQml0bWFwcy5oYXMoYml0bWFwSWQpKSB7CiAgICAgICAgICBtaXNzaW5nQml0bWFwcy5hZGQoYml0bWFwSWQpOwogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdCB7CiAgICAgICAgaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQKICAgICAgfSA9IHRoaXMuZXZhbHVhdG9yT3B0aW9uczsKICAgICAgaWYgKG1pc3NpbmdCaXRtYXBzLnNpemUgPiAwKSB7CiAgICAgICAgY29uc3QgYW5ub3RhdGlvbldpdGhCaXRtYXBzID0gbmV3QW5ub3RzLnNsaWNlKCk7CiAgICAgICAgZm9yIChjb25zdCBba2V5LCBhbm5vdGF0aW9uXSBvZiBhbm5vdGF0aW9uU3RvcmFnZSkgewogICAgICAgICAgaWYgKCFrZXkuc3RhcnRzV2l0aChBbm5vdGF0aW9uRWRpdG9yUHJlZml4KSkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChhbm5vdGF0aW9uLmJpdG1hcCAmJiBtaXNzaW5nQml0bWFwcy5oYXMoYW5ub3RhdGlvbi5iaXRtYXBJZCkpIHsKICAgICAgICAgICAgYW5ub3RhdGlvbldpdGhCaXRtYXBzLnB1c2goYW5ub3RhdGlvbik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGltYWdlUHJvbWlzZXMgPSBBbm5vdGF0aW9uRmFjdG9yeS5nZW5lcmF0ZUltYWdlcyhhbm5vdGF0aW9uV2l0aEJpdG1hcHMsIHRoaXMueHJlZiwgaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQpOwogICAgICB9IGVsc2UgewogICAgICAgIGltYWdlUHJvbWlzZXMgPSBBbm5vdGF0aW9uRmFjdG9yeS5nZW5lcmF0ZUltYWdlcyhuZXdBbm5vdHMsIHRoaXMueHJlZiwgaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQpOwogICAgICB9CiAgICAgIGRlbGV0ZWRBbm5vdGF0aW9ucyA9IG5ldyBSZWZTZXQoKTsKICAgICAgbmV3QW5ub3RhdGlvbnNQcm9taXNlID0gUHJvbWlzZS5hbGwoW2Fubm90YXRpb25HbG9iYWxzUHJvbWlzZSwgdGhpcy4jcmVwbGFjZUlkQnlSZWYobmV3QW5ub3RzLCBkZWxldGVkQW5ub3RhdGlvbnMsIG51bGwpXSkudGhlbigoW2Fubm90YXRpb25HbG9iYWxzXSkgPT4gewogICAgICAgIGlmICghYW5ub3RhdGlvbkdsb2JhbHMpIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gQW5ub3RhdGlvbkZhY3RvcnkucHJpbnROZXdBbm5vdGF0aW9ucyhhbm5vdGF0aW9uR2xvYmFscywgcGFydGlhbEV2YWx1YXRvciwgdGFzaywgbmV3QW5ub3RzLCBpbWFnZVByb21pc2VzKTsKICAgICAgfSk7CiAgICB9CiAgICBjb25zdCBwYWdlTGlzdFByb21pc2UgPSBQcm9taXNlLmFsbChbY29udGVudFN0cmVhbVByb21pc2UsIHJlc291cmNlc1Byb21pc2VdKS50aGVuKGFzeW5jIChbY29udGVudFN0cmVhbV0pID0+IHsKICAgICAgY29uc3Qgb3BMaXN0ID0gbmV3IE9wZXJhdG9yTGlzdChpbnRlbnQsIHNpbmspOwogICAgICBoYW5kbGVyLnNlbmQoIlN0YXJ0UmVuZGVyUGFnZSIsIHsKICAgICAgICB0cmFuc3BhcmVuY3k6IHBhcnRpYWxFdmFsdWF0b3IuaGFzQmxlbmRNb2Rlcyh0aGlzLnJlc291cmNlcywgdGhpcy5ub25CbGVuZE1vZGVzU2V0KSwKICAgICAgICBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4LAogICAgICAgIGNhY2hlS2V5CiAgICAgIH0pOwogICAgICBhd2FpdCBwYXJ0aWFsRXZhbHVhdG9yLmdldE9wZXJhdG9yTGlzdCh7CiAgICAgICAgc3RyZWFtOiBjb250ZW50U3RyZWFtLAogICAgICAgIHRhc2ssCiAgICAgICAgcmVzb3VyY2VzOiB0aGlzLnJlc291cmNlcywKICAgICAgICBvcGVyYXRvckxpc3Q6IG9wTGlzdAogICAgICB9KTsKICAgICAgcmV0dXJuIG9wTGlzdDsKICAgIH0pOwogICAgbGV0IFtwYWdlT3BMaXN0LCBhbm5vdGF0aW9ucywgbmV3QW5ub3RhdGlvbnNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW3BhZ2VMaXN0UHJvbWlzZSwgdGhpcy5fcGFyc2VkQW5ub3RhdGlvbnMsIG5ld0Fubm90YXRpb25zUHJvbWlzZV0pOwogICAgaWYgKG5ld0Fubm90YXRpb25zKSB7CiAgICAgIGFubm90YXRpb25zID0gYW5ub3RhdGlvbnMuZmlsdGVyKGEgPT4gIShhLnJlZiAmJiBkZWxldGVkQW5ub3RhdGlvbnMuaGFzKGEucmVmKSkpOwogICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBuZXdBbm5vdGF0aW9ucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CiAgICAgICAgY29uc3QgbmV3QW5ub3RhdGlvbiA9IG5ld0Fubm90YXRpb25zW2ldOwogICAgICAgIGlmIChuZXdBbm5vdGF0aW9uLnJlZlRvUmVwbGFjZSkgewogICAgICAgICAgY29uc3QgaiA9IGFubm90YXRpb25zLmZpbmRJbmRleChhID0+IGEucmVmICYmIGlzUmVmc0VxdWFsKGEucmVmLCBuZXdBbm5vdGF0aW9uLnJlZlRvUmVwbGFjZSkpOwogICAgICAgICAgaWYgKGogPj0gMCkgewogICAgICAgICAgICBhbm5vdGF0aW9ucy5zcGxpY2UoaiwgMSwgbmV3QW5ub3RhdGlvbik7CiAgICAgICAgICAgIG5ld0Fubm90YXRpb25zLnNwbGljZShpLS0sIDEpOwogICAgICAgICAgICBpaS0tOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBhbm5vdGF0aW9ucyA9IGFubm90YXRpb25zLmNvbmNhdChuZXdBbm5vdGF0aW9ucyk7CiAgICB9CiAgICBpZiAoYW5ub3RhdGlvbnMubGVuZ3RoID09PSAwIHx8IGludGVudCAmIFJlbmRlcmluZ0ludGVudEZsYWcuQU5OT1RBVElPTlNfRElTQUJMRSkgewogICAgICBwYWdlT3BMaXN0LmZsdXNoKHRydWUpOwogICAgICByZXR1cm4gewogICAgICAgIGxlbmd0aDogcGFnZU9wTGlzdC50b3RhbExlbmd0aAogICAgICB9OwogICAgfQogICAgY29uc3QgcmVuZGVyRm9ybXMgPSAhIShpbnRlbnQgJiBSZW5kZXJpbmdJbnRlbnRGbGFnLkFOTk9UQVRJT05TX0ZPUk1TKSwKICAgICAgaXNFZGl0aW5nID0gISEoaW50ZW50ICYgUmVuZGVyaW5nSW50ZW50RmxhZy5JU19FRElUSU5HKSwKICAgICAgaW50ZW50QW55ID0gISEoaW50ZW50ICYgUmVuZGVyaW5nSW50ZW50RmxhZy5BTlkpLAogICAgICBpbnRlbnREaXNwbGF5ID0gISEoaW50ZW50ICYgUmVuZGVyaW5nSW50ZW50RmxhZy5ESVNQTEFZKSwKICAgICAgaW50ZW50UHJpbnQgPSAhIShpbnRlbnQgJiBSZW5kZXJpbmdJbnRlbnRGbGFnLlBSSU5UKTsKICAgIGNvbnN0IG9wTGlzdFByb21pc2VzID0gW107CiAgICBmb3IgKGNvbnN0IGFubm90YXRpb24gb2YgYW5ub3RhdGlvbnMpIHsKICAgICAgaWYgKGludGVudEFueSB8fCBpbnRlbnREaXNwbGF5ICYmIGFubm90YXRpb24ubXVzdEJlVmlld2VkKGFubm90YXRpb25TdG9yYWdlLCByZW5kZXJGb3JtcykgJiYgYW5ub3RhdGlvbi5tdXN0QmVWaWV3ZWRXaGVuRWRpdGluZyhpc0VkaXRpbmcsIG1vZGlmaWVkSWRzKSB8fCBpbnRlbnRQcmludCAmJiBhbm5vdGF0aW9uLm11c3RCZVByaW50ZWQoYW5ub3RhdGlvblN0b3JhZ2UpKSB7CiAgICAgICAgb3BMaXN0UHJvbWlzZXMucHVzaChhbm5vdGF0aW9uLmdldE9wZXJhdG9yTGlzdChwYXJ0aWFsRXZhbHVhdG9yLCB0YXNrLCBpbnRlbnQsIGFubm90YXRpb25TdG9yYWdlKS5jYXRjaChmdW5jdGlvbiAocmVhc29uKSB7CiAgICAgICAgICB3YXJuKCJnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBhbm5vdGF0aW9uIGRhdGEgZHVyaW5nICIgKyBgIiR7dGFzay5uYW1lfSIgdGFzazogIiR7cmVhc29ufSIuYCk7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBvcExpc3Q6IG51bGwsCiAgICAgICAgICAgIHNlcGFyYXRlRm9ybTogZmFsc2UsCiAgICAgICAgICAgIHNlcGFyYXRlQ2FudmFzOiBmYWxzZQogICAgICAgICAgfTsKICAgICAgICB9KSk7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0IG9wTGlzdHMgPSBhd2FpdCBQcm9taXNlLmFsbChvcExpc3RQcm9taXNlcyk7CiAgICBsZXQgZm9ybSA9IGZhbHNlLAogICAgICBjYW52YXMgPSBmYWxzZTsKICAgIGZvciAoY29uc3QgewogICAgICBvcExpc3QsCiAgICAgIHNlcGFyYXRlRm9ybSwKICAgICAgc2VwYXJhdGVDYW52YXMKICAgIH0gb2Ygb3BMaXN0cykgewogICAgICBwYWdlT3BMaXN0LmFkZE9wTGlzdChvcExpc3QpOwogICAgICBmb3JtIHx8PSBzZXBhcmF0ZUZvcm07CiAgICAgIGNhbnZhcyB8fD0gc2VwYXJhdGVDYW52YXM7CiAgICB9CiAgICBwYWdlT3BMaXN0LmZsdXNoKHRydWUsIHsKICAgICAgZm9ybSwKICAgICAgY2FudmFzCiAgICB9KTsKICAgIHJldHVybiB7CiAgICAgIGxlbmd0aDogcGFnZU9wTGlzdC50b3RhbExlbmd0aAogICAgfTsKICB9CiAgYXN5bmMgZXh0cmFjdFRleHRDb250ZW50KHsKICAgIGhhbmRsZXIsCiAgICB0YXNrLAogICAgaW5jbHVkZU1hcmtlZENvbnRlbnQsCiAgICBkaXNhYmxlTm9ybWFsaXphdGlvbiwKICAgIHNpbmsKICB9KSB7CiAgICBjb25zdCBjb250ZW50U3RyZWFtUHJvbWlzZSA9IHRoaXMuZ2V0Q29udGVudFN0cmVhbSgpOwogICAgY29uc3QgcmVzb3VyY2VzUHJvbWlzZSA9IHRoaXMubG9hZFJlc291cmNlcyhbIkV4dEdTdGF0ZSIsICJGb250IiwgIlByb3BlcnRpZXMiLCAiWE9iamVjdCJdKTsKICAgIGNvbnN0IGxhbmdQcm9taXNlID0gdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coImxhbmciKTsKICAgIGNvbnN0IFtjb250ZW50U3RyZWFtLCwgbGFuZ10gPSBhd2FpdCBQcm9taXNlLmFsbChbY29udGVudFN0cmVhbVByb21pc2UsIHJlc291cmNlc1Byb21pc2UsIGxhbmdQcm9taXNlXSk7CiAgICBjb25zdCBwYXJ0aWFsRXZhbHVhdG9yID0gbmV3IFBhcnRpYWxFdmFsdWF0b3IoewogICAgICB4cmVmOiB0aGlzLnhyZWYsCiAgICAgIGhhbmRsZXIsCiAgICAgIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXgsCiAgICAgIGlkRmFjdG9yeTogdGhpcy5fbG9jYWxJZEZhY3RvcnksCiAgICAgIGZvbnRDYWNoZTogdGhpcy5mb250Q2FjaGUsCiAgICAgIGJ1aWx0SW5DTWFwQ2FjaGU6IHRoaXMuYnVpbHRJbkNNYXBDYWNoZSwKICAgICAgc3RhbmRhcmRGb250RGF0YUNhY2hlOiB0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZSwKICAgICAgZ2xvYmFsQ29sb3JTcGFjZUNhY2hlOiB0aGlzLmdsb2JhbENvbG9yU3BhY2VDYWNoZSwKICAgICAgZ2xvYmFsSW1hZ2VDYWNoZTogdGhpcy5nbG9iYWxJbWFnZUNhY2hlLAogICAgICBzeXN0ZW1Gb250Q2FjaGU6IHRoaXMuc3lzdGVtRm9udENhY2hlLAogICAgICBvcHRpb25zOiB0aGlzLmV2YWx1YXRvck9wdGlvbnMKICAgIH0pOwogICAgcmV0dXJuIHBhcnRpYWxFdmFsdWF0b3IuZ2V0VGV4dENvbnRlbnQoewogICAgICBzdHJlYW06IGNvbnRlbnRTdHJlYW0sCiAgICAgIHRhc2ssCiAgICAgIHJlc291cmNlczogdGhpcy5yZXNvdXJjZXMsCiAgICAgIGluY2x1ZGVNYXJrZWRDb250ZW50LAogICAgICBkaXNhYmxlTm9ybWFsaXphdGlvbiwKICAgICAgc2luaywKICAgICAgdmlld0JveDogdGhpcy52aWV3LAogICAgICBsYW5nCiAgICB9KTsKICB9CiAgYXN5bmMgZ2V0U3RydWN0VHJlZSgpIHsKICAgIGNvbnN0IHN0cnVjdFRyZWVSb290ID0gYXdhaXQgdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coInN0cnVjdFRyZWVSb290Iik7CiAgICBpZiAoIXN0cnVjdFRyZWVSb290KSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgYXdhaXQgdGhpcy5fcGFyc2VkQW5ub3RhdGlvbnM7CiAgICBjb25zdCBzdHJ1Y3RUcmVlID0gYXdhaXQgdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCAiX3BhcnNlU3RydWN0VHJlZSIsIFtzdHJ1Y3RUcmVlUm9vdF0pOwogICAgcmV0dXJuIHRoaXMucGRmTWFuYWdlci5lbnN1cmUoc3RydWN0VHJlZSwgInNlcmlhbGl6YWJsZSIpOwogIH0KICBfcGFyc2VTdHJ1Y3RUcmVlKHN0cnVjdFRyZWVSb290KSB7CiAgICBjb25zdCB0cmVlID0gbmV3IFN0cnVjdFRyZWVQYWdlKHN0cnVjdFRyZWVSb290LCB0aGlzLnBhZ2VEaWN0KTsKICAgIHRyZWUucGFyc2UodGhpcy5yZWYpOwogICAgcmV0dXJuIHRyZWU7CiAgfQogIGFzeW5jIGdldEFubm90YXRpb25zRGF0YShoYW5kbGVyLCB0YXNrLCBpbnRlbnQpIHsKICAgIGNvbnN0IGFubm90YXRpb25zID0gYXdhaXQgdGhpcy5fcGFyc2VkQW5ub3RhdGlvbnM7CiAgICBpZiAoYW5ub3RhdGlvbnMubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiBhbm5vdGF0aW9uczsKICAgIH0KICAgIGNvbnN0IGFubm90YXRpb25zRGF0YSA9IFtdLAogICAgICB0ZXh0Q29udGVudFByb21pc2VzID0gW107CiAgICBsZXQgcGFydGlhbEV2YWx1YXRvcjsKICAgIGNvbnN0IGludGVudEFueSA9ICEhKGludGVudCAmIFJlbmRlcmluZ0ludGVudEZsYWcuQU5ZKSwKICAgICAgaW50ZW50RGlzcGxheSA9ICEhKGludGVudCAmIFJlbmRlcmluZ0ludGVudEZsYWcuRElTUExBWSksCiAgICAgIGludGVudFByaW50ID0gISEoaW50ZW50ICYgUmVuZGVyaW5nSW50ZW50RmxhZy5QUklOVCk7CiAgICBmb3IgKGNvbnN0IGFubm90YXRpb24gb2YgYW5ub3RhdGlvbnMpIHsKICAgICAgY29uc3QgaXNWaXNpYmxlID0gaW50ZW50QW55IHx8IGludGVudERpc3BsYXkgJiYgYW5ub3RhdGlvbi52aWV3YWJsZTsKICAgICAgaWYgKGlzVmlzaWJsZSB8fCBpbnRlbnRQcmludCAmJiBhbm5vdGF0aW9uLnByaW50YWJsZSkgewogICAgICAgIGFubm90YXRpb25zRGF0YS5wdXNoKGFubm90YXRpb24uZGF0YSk7CiAgICAgIH0KICAgICAgaWYgKGFubm90YXRpb24uaGFzVGV4dENvbnRlbnQgJiYgaXNWaXNpYmxlKSB7CiAgICAgICAgcGFydGlhbEV2YWx1YXRvciB8fD0gbmV3IFBhcnRpYWxFdmFsdWF0b3IoewogICAgICAgICAgeHJlZjogdGhpcy54cmVmLAogICAgICAgICAgaGFuZGxlciwKICAgICAgICAgIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXgsCiAgICAgICAgICBpZEZhY3Rvcnk6IHRoaXMuX2xvY2FsSWRGYWN0b3J5LAogICAgICAgICAgZm9udENhY2hlOiB0aGlzLmZvbnRDYWNoZSwKICAgICAgICAgIGJ1aWx0SW5DTWFwQ2FjaGU6IHRoaXMuYnVpbHRJbkNNYXBDYWNoZSwKICAgICAgICAgIHN0YW5kYXJkRm9udERhdGFDYWNoZTogdGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsCiAgICAgICAgICBnbG9iYWxDb2xvclNwYWNlQ2FjaGU6IHRoaXMuZ2xvYmFsQ29sb3JTcGFjZUNhY2hlLAogICAgICAgICAgZ2xvYmFsSW1hZ2VDYWNoZTogdGhpcy5nbG9iYWxJbWFnZUNhY2hlLAogICAgICAgICAgc3lzdGVtRm9udENhY2hlOiB0aGlzLnN5c3RlbUZvbnRDYWNoZSwKICAgICAgICAgIG9wdGlvbnM6IHRoaXMuZXZhbHVhdG9yT3B0aW9ucwogICAgICAgIH0pOwogICAgICAgIHRleHRDb250ZW50UHJvbWlzZXMucHVzaChhbm5vdGF0aW9uLmV4dHJhY3RUZXh0Q29udGVudChwYXJ0aWFsRXZhbHVhdG9yLCB0YXNrLCBbLUluZmluaXR5LCAtSW5maW5pdHksIEluZmluaXR5LCBJbmZpbml0eV0pLmNhdGNoKGZ1bmN0aW9uIChyZWFzb24pIHsKICAgICAgICAgIHdhcm4oYGdldEFubm90YXRpb25zRGF0YSAtIGlnbm9yaW5nIHRleHRDb250ZW50IGR1cmluZyAiJHt0YXNrLm5hbWV9IiB0YXNrOiAiJHtyZWFzb259Ii5gKTsKICAgICAgICB9KSk7CiAgICAgIH0KICAgIH0KICAgIGF3YWl0IFByb21pc2UuYWxsKHRleHRDb250ZW50UHJvbWlzZXMpOwogICAgcmV0dXJuIGFubm90YXRpb25zRGF0YTsKICB9CiAgZ2V0IGFubm90YXRpb25zKCkgewogICAgY29uc3QgYW5ub3RzID0gdGhpcy5fZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSgiQW5ub3RzIik7CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJhbm5vdGF0aW9ucyIsIEFycmF5LmlzQXJyYXkoYW5ub3RzKSA/IGFubm90cyA6IFtdKTsKICB9CiAgZ2V0IF9wYXJzZWRBbm5vdGF0aW9ucygpIHsKICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlKHRoaXMsICJhbm5vdGF0aW9ucyIpLnRoZW4oYXN5bmMgYW5ub3RzID0+IHsKICAgICAgaWYgKGFubm90cy5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gYW5ub3RzOwogICAgICB9CiAgICAgIGNvbnN0IFthbm5vdGF0aW9uR2xvYmFscywgZmllbGRPYmplY3RzXSA9IGF3YWl0IFByb21pc2UuYWxsKFt0aGlzLnBkZk1hbmFnZXIuZW5zdXJlRG9jKCJhbm5vdGF0aW9uR2xvYmFscyIpLCB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlRG9jKCJmaWVsZE9iamVjdHMiKV0pOwogICAgICBpZiAoIWFubm90YXRpb25HbG9iYWxzKSB7CiAgICAgICAgcmV0dXJuIFtdOwogICAgICB9CiAgICAgIGNvbnN0IG9ycGhhbkZpZWxkcyA9IGZpZWxkT2JqZWN0cz8ub3JwaGFuRmllbGRzOwogICAgICBjb25zdCBhbm5vdGF0aW9uUHJvbWlzZXMgPSBbXTsKICAgICAgZm9yIChjb25zdCBhbm5vdGF0aW9uUmVmIG9mIGFubm90cykgewogICAgICAgIGFubm90YXRpb25Qcm9taXNlcy5wdXNoKEFubm90YXRpb25GYWN0b3J5LmNyZWF0ZSh0aGlzLnhyZWYsIGFubm90YXRpb25SZWYsIGFubm90YXRpb25HbG9iYWxzLCB0aGlzLl9sb2NhbElkRmFjdG9yeSwgZmFsc2UsIG9ycGhhbkZpZWxkcywgdGhpcy5yZWYpLmNhdGNoKGZ1bmN0aW9uIChyZWFzb24pIHsKICAgICAgICAgIHdhcm4oYF9wYXJzZWRBbm5vdGF0aW9uczogIiR7cmVhc29ufSIuYCk7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9KSk7CiAgICAgIH0KICAgICAgY29uc3Qgc29ydGVkQW5ub3RhdGlvbnMgPSBbXTsKICAgICAgbGV0IHBvcHVwQW5ub3RhdGlvbnMsIHdpZGdldEFubm90YXRpb25zOwogICAgICBmb3IgKGNvbnN0IGFubm90YXRpb24gb2YgYXdhaXQgUHJvbWlzZS5hbGwoYW5ub3RhdGlvblByb21pc2VzKSkgewogICAgICAgIGlmICghYW5ub3RhdGlvbikgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmIChhbm5vdGF0aW9uIGluc3RhbmNlb2YgV2lkZ2V0QW5ub3RhdGlvbikgewogICAgICAgICAgKHdpZGdldEFubm90YXRpb25zIHx8PSBbXSkucHVzaChhbm5vdGF0aW9uKTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBpZiAoYW5ub3RhdGlvbiBpbnN0YW5jZW9mIFBvcHVwQW5ub3RhdGlvbikgewogICAgICAgICAgKHBvcHVwQW5ub3RhdGlvbnMgfHw9IFtdKS5wdXNoKGFubm90YXRpb24pOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIHNvcnRlZEFubm90YXRpb25zLnB1c2goYW5ub3RhdGlvbik7CiAgICAgIH0KICAgICAgaWYgKHdpZGdldEFubm90YXRpb25zKSB7CiAgICAgICAgc29ydGVkQW5ub3RhdGlvbnMucHVzaCguLi53aWRnZXRBbm5vdGF0aW9ucyk7CiAgICAgIH0KICAgICAgaWYgKHBvcHVwQW5ub3RhdGlvbnMpIHsKICAgICAgICBzb3J0ZWRBbm5vdGF0aW9ucy5wdXNoKC4uLnBvcHVwQW5ub3RhdGlvbnMpOwogICAgICB9CiAgICAgIHJldHVybiBzb3J0ZWRBbm5vdGF0aW9uczsKICAgIH0pOwogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAiX3BhcnNlZEFubm90YXRpb25zIiwgcHJvbWlzZSk7CiAgfQogIGdldCBqc0FjdGlvbnMoKSB7CiAgICBjb25zdCBhY3Rpb25zID0gY29sbGVjdEFjdGlvbnModGhpcy54cmVmLCB0aGlzLnBhZ2VEaWN0LCBQYWdlQWN0aW9uRXZlbnRUeXBlKTsKICAgIHJldHVybiBzaGFkb3codGhpcywgImpzQWN0aW9ucyIsIGFjdGlvbnMpOwogIH0KfQpjb25zdCBQREZfSEVBREVSX1NJR05BVFVSRSA9IG5ldyBVaW50OEFycmF5KFsweDI1LCAweDUwLCAweDQ0LCAweDQ2LCAweDJkXSk7CmNvbnN0IFNUQVJUWFJFRl9TSUdOQVRVUkUgPSBuZXcgVWludDhBcnJheShbMHg3MywgMHg3NCwgMHg2MSwgMHg3MiwgMHg3NCwgMHg3OCwgMHg3MiwgMHg2NSwgMHg2Nl0pOwpjb25zdCBFTkRPQkpfU0lHTkFUVVJFID0gbmV3IFVpbnQ4QXJyYXkoWzB4NjUsIDB4NmUsIDB4NjQsIDB4NmYsIDB4NjIsIDB4NmFdKTsKZnVuY3Rpb24gZmluZChzdHJlYW0sIHNpZ25hdHVyZSwgbGltaXQgPSAxMDI0LCBiYWNrd2FyZHMgPSBmYWxzZSkgewogIGNvbnN0IHNpZ25hdHVyZUxlbmd0aCA9IHNpZ25hdHVyZS5sZW5ndGg7CiAgY29uc3Qgc2NhbkJ5dGVzID0gc3RyZWFtLnBlZWtCeXRlcyhsaW1pdCk7CiAgY29uc3Qgc2Nhbkxlbmd0aCA9IHNjYW5CeXRlcy5sZW5ndGggLSBzaWduYXR1cmVMZW5ndGg7CiAgaWYgKHNjYW5MZW5ndGggPD0gMCkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICBpZiAoYmFja3dhcmRzKSB7CiAgICBjb25zdCBzaWduYXR1cmVFbmQgPSBzaWduYXR1cmVMZW5ndGggLSAxOwogICAgbGV0IHBvcyA9IHNjYW5CeXRlcy5sZW5ndGggLSAxOwogICAgd2hpbGUgKHBvcyA+PSBzaWduYXR1cmVFbmQpIHsKICAgICAgbGV0IGogPSAwOwogICAgICB3aGlsZSAoaiA8IHNpZ25hdHVyZUxlbmd0aCAmJiBzY2FuQnl0ZXNbcG9zIC0gal0gPT09IHNpZ25hdHVyZVtzaWduYXR1cmVFbmQgLSBqXSkgewogICAgICAgIGorKzsKICAgICAgfQogICAgICBpZiAoaiA+PSBzaWduYXR1cmVMZW5ndGgpIHsKICAgICAgICBzdHJlYW0ucG9zICs9IHBvcyAtIHNpZ25hdHVyZUVuZDsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBwb3MtLTsKICAgIH0KICB9IGVsc2UgewogICAgbGV0IHBvcyA9IDA7CiAgICB3aGlsZSAocG9zIDw9IHNjYW5MZW5ndGgpIHsKICAgICAgbGV0IGogPSAwOwogICAgICB3aGlsZSAoaiA8IHNpZ25hdHVyZUxlbmd0aCAmJiBzY2FuQnl0ZXNbcG9zICsgal0gPT09IHNpZ25hdHVyZVtqXSkgewogICAgICAgIGorKzsKICAgICAgfQogICAgICBpZiAoaiA+PSBzaWduYXR1cmVMZW5ndGgpIHsKICAgICAgICBzdHJlYW0ucG9zICs9IHBvczsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBwb3MrKzsKICAgIH0KICB9CiAgcmV0dXJuIGZhbHNlOwp9CmNsYXNzIFBERkRvY3VtZW50IHsKICBjb25zdHJ1Y3RvcihwZGZNYW5hZ2VyLCBzdHJlYW0pIHsKICAgIGlmIChzdHJlYW0ubGVuZ3RoIDw9IDApIHsKICAgICAgdGhyb3cgbmV3IEludmFsaWRQREZFeGNlcHRpb24oIlRoZSBQREYgZmlsZSBpcyBlbXB0eSwgaS5lLiBpdHMgc2l6ZSBpcyB6ZXJvIGJ5dGVzLiIpOwogICAgfQogICAgdGhpcy5wZGZNYW5hZ2VyID0gcGRmTWFuYWdlcjsKICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtOwogICAgdGhpcy54cmVmID0gbmV3IFhSZWYoc3RyZWFtLCBwZGZNYW5hZ2VyKTsKICAgIHRoaXMuX3BhZ2VQcm9taXNlcyA9IG5ldyBNYXAoKTsKICAgIHRoaXMuX3ZlcnNpb24gPSBudWxsOwogICAgY29uc3QgaWRDb3VudGVycyA9IHsKICAgICAgZm9udDogMAogICAgfTsKICAgIHRoaXMuX2dsb2JhbElkRmFjdG9yeSA9IGNsYXNzIHsKICAgICAgc3RhdGljIGdldERvY0lkKCkgewogICAgICAgIHJldHVybiBgZ18ke3BkZk1hbmFnZXIuZG9jSWR9YDsKICAgICAgfQogICAgICBzdGF0aWMgY3JlYXRlRm9udElkKCkgewogICAgICAgIHJldHVybiBgZiR7KytpZENvdW50ZXJzLmZvbnR9YDsKICAgICAgfQogICAgICBzdGF0aWMgY3JlYXRlT2JqSWQoKSB7CiAgICAgICAgdW5yZWFjaGFibGUoIkFic3RyYWN0IG1ldGhvZCBgY3JlYXRlT2JqSWRgIGNhbGxlZC4iKTsKICAgICAgfQogICAgICBzdGF0aWMgZ2V0UGFnZU9iaklkKCkgewogICAgICAgIHVucmVhY2hhYmxlKCJBYnN0cmFjdCBtZXRob2QgYGdldFBhZ2VPYmpJZGAgY2FsbGVkLiIpOwogICAgICB9CiAgICB9OwogIH0KICBwYXJzZShyZWNvdmVyeU1vZGUpIHsKICAgIHRoaXMueHJlZi5wYXJzZShyZWNvdmVyeU1vZGUpOwogICAgdGhpcy5jYXRhbG9nID0gbmV3IENhdGFsb2codGhpcy5wZGZNYW5hZ2VyLCB0aGlzLnhyZWYpOwogIH0KICBnZXQgbGluZWFyaXphdGlvbigpIHsKICAgIGxldCBsaW5lYXJpemF0aW9uID0gbnVsbDsKICAgIHRyeSB7CiAgICAgIGxpbmVhcml6YXRpb24gPSBMaW5lYXJpemF0aW9uLmNyZWF0ZSh0aGlzLnN0cmVhbSk7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7CiAgICAgICAgdGhyb3cgZXJyOwogICAgICB9CiAgICAgIGluZm8oZXJyKTsKICAgIH0KICAgIHJldHVybiBzaGFkb3codGhpcywgImxpbmVhcml6YXRpb24iLCBsaW5lYXJpemF0aW9uKTsKICB9CiAgZ2V0IHN0YXJ0WFJlZigpIHsKICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtOwogICAgbGV0IHN0YXJ0WFJlZiA9IDA7CiAgICBpZiAodGhpcy5saW5lYXJpemF0aW9uKSB7CiAgICAgIHN0cmVhbS5yZXNldCgpOwogICAgICBpZiAoZmluZChzdHJlYW0sIEVORE9CSl9TSUdOQVRVUkUpKSB7CiAgICAgICAgc3RyZWFtLnNraXAoNik7CiAgICAgICAgbGV0IGNoID0gc3RyZWFtLnBlZWtCeXRlKCk7CiAgICAgICAgd2hpbGUgKGlzV2hpdGVTcGFjZShjaCkpIHsKICAgICAgICAgIHN0cmVhbS5wb3MrKzsKICAgICAgICAgIGNoID0gc3RyZWFtLnBlZWtCeXRlKCk7CiAgICAgICAgfQogICAgICAgIHN0YXJ0WFJlZiA9IHN0cmVhbS5wb3MgLSBzdHJlYW0uc3RhcnQ7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0IHN0ZXAgPSAxMDI0OwogICAgICBjb25zdCBzdGFydFhSZWZMZW5ndGggPSBTVEFSVFhSRUZfU0lHTkFUVVJFLmxlbmd0aDsKICAgICAgbGV0IGZvdW5kID0gZmFsc2UsCiAgICAgICAgcG9zID0gc3RyZWFtLmVuZDsKICAgICAgd2hpbGUgKCFmb3VuZCAmJiBwb3MgPiAwKSB7CiAgICAgICAgcG9zIC09IHN0ZXAgLSBzdGFydFhSZWZMZW5ndGg7CiAgICAgICAgaWYgKHBvcyA8IDApIHsKICAgICAgICAgIHBvcyA9IDA7CiAgICAgICAgfQogICAgICAgIHN0cmVhbS5wb3MgPSBwb3M7CiAgICAgICAgZm91bmQgPSBmaW5kKHN0cmVhbSwgU1RBUlRYUkVGX1NJR05BVFVSRSwgc3RlcCwgdHJ1ZSk7CiAgICAgIH0KICAgICAgaWYgKGZvdW5kKSB7CiAgICAgICAgc3RyZWFtLnNraXAoOSk7CiAgICAgICAgbGV0IGNoOwogICAgICAgIGRvIHsKICAgICAgICAgIGNoID0gc3RyZWFtLmdldEJ5dGUoKTsKICAgICAgICB9IHdoaWxlIChpc1doaXRlU3BhY2UoY2gpKTsKICAgICAgICBsZXQgc3RyID0gIiI7CiAgICAgICAgd2hpbGUgKGNoID49IDB4MjAgJiYgY2ggPD0gMHgzOSkgewogICAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpOwogICAgICAgICAgY2ggPSBzdHJlYW0uZ2V0Qnl0ZSgpOwogICAgICAgIH0KICAgICAgICBzdGFydFhSZWYgPSBwYXJzZUludChzdHIsIDEwKTsKICAgICAgICBpZiAoaXNOYU4oc3RhcnRYUmVmKSkgewogICAgICAgICAgc3RhcnRYUmVmID0gMDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBzaGFkb3codGhpcywgInN0YXJ0WFJlZiIsIHN0YXJ0WFJlZik7CiAgfQogIGNoZWNrSGVhZGVyKCkgewogICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW07CiAgICBzdHJlYW0ucmVzZXQoKTsKICAgIGlmICghZmluZChzdHJlYW0sIFBERl9IRUFERVJfU0lHTkFUVVJFKSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBzdHJlYW0ubW92ZVN0YXJ0KCk7CiAgICBzdHJlYW0uc2tpcChQREZfSEVBREVSX1NJR05BVFVSRS5sZW5ndGgpOwogICAgbGV0IHZlcnNpb24gPSAiIiwKICAgICAgY2g7CiAgICB3aGlsZSAoKGNoID0gc3RyZWFtLmdldEJ5dGUoKSkgPiAweDIwICYmIHZlcnNpb24ubGVuZ3RoIDwgNykgewogICAgICB2ZXJzaW9uICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpOwogICAgfQogICAgaWYgKFBERl9WRVJTSU9OX1JFR0VYUC50ZXN0KHZlcnNpb24pKSB7CiAgICAgIHRoaXMuX3ZlcnNpb24gPSB2ZXJzaW9uOwogICAgfSBlbHNlIHsKICAgICAgd2FybihgSW52YWxpZCBQREYgaGVhZGVyIHZlcnNpb246ICR7dmVyc2lvbn1gKTsKICAgIH0KICB9CiAgcGFyc2VTdGFydFhSZWYoKSB7CiAgICB0aGlzLnhyZWYuc2V0U3RhcnRYUmVmKHRoaXMuc3RhcnRYUmVmKTsKICB9CiAgZ2V0IG51bVBhZ2VzKCkgewogICAgbGV0IG51bSA9IDA7CiAgICBpZiAodGhpcy5jYXRhbG9nLmhhc0FjdHVhbE51bVBhZ2VzKSB7CiAgICAgIG51bSA9IHRoaXMuY2F0YWxvZy5udW1QYWdlczsKICAgIH0gZWxzZSBpZiAodGhpcy54ZmFGYWN0b3J5KSB7CiAgICAgIG51bSA9IHRoaXMueGZhRmFjdG9yeS5nZXROdW1QYWdlcygpOwogICAgfSBlbHNlIGlmICh0aGlzLmxpbmVhcml6YXRpb24pIHsKICAgICAgbnVtID0gdGhpcy5saW5lYXJpemF0aW9uLm51bVBhZ2VzOwogICAgfSBlbHNlIHsKICAgICAgbnVtID0gdGhpcy5jYXRhbG9nLm51bVBhZ2VzOwogICAgfQogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAibnVtUGFnZXMiLCBudW0pOwogIH0KICBfaGFzT25seURvY3VtZW50U2lnbmF0dXJlcyhmaWVsZHMsIHJlY3Vyc2lvbkRlcHRoID0gMCkgewogICAgY29uc3QgUkVDVVJTSU9OX0xJTUlUID0gMTA7CiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZmllbGRzKSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gZmllbGRzLmV2ZXJ5KGZpZWxkID0+IHsKICAgICAgZmllbGQgPSB0aGlzLnhyZWYuZmV0Y2hJZlJlZihmaWVsZCk7CiAgICAgIGlmICghKGZpZWxkIGluc3RhbmNlb2YgRGljdCkpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgaWYgKGZpZWxkLmhhcygiS2lkcyIpKSB7CiAgICAgICAgaWYgKCsrcmVjdXJzaW9uRGVwdGggPiBSRUNVUlNJT05fTElNSVQpIHsKICAgICAgICAgIHdhcm4oIl9oYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzOiBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aCByZWFjaGVkIik7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLl9oYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzKGZpZWxkLmdldCgiS2lkcyIpLCByZWN1cnNpb25EZXB0aCk7CiAgICAgIH0KICAgICAgY29uc3QgaXNTaWduYXR1cmUgPSBpc05hbWUoZmllbGQuZ2V0KCJGVCIpLCAiU2lnIik7CiAgICAgIGNvbnN0IHJlY3RhbmdsZSA9IGZpZWxkLmdldCgiUmVjdCIpOwogICAgICBjb25zdCBpc0ludmlzaWJsZSA9IEFycmF5LmlzQXJyYXkocmVjdGFuZ2xlKSAmJiByZWN0YW5nbGUuZXZlcnkodmFsdWUgPT4gdmFsdWUgPT09IDApOwogICAgICByZXR1cm4gaXNTaWduYXR1cmUgJiYgaXNJbnZpc2libGU7CiAgICB9KTsKICB9CiAgZ2V0IF94ZmFTdHJlYW1zKCkgewogICAgY29uc3QgYWNyb0Zvcm0gPSB0aGlzLmNhdGFsb2cuYWNyb0Zvcm07CiAgICBpZiAoIWFjcm9Gb3JtKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3QgeGZhID0gYWNyb0Zvcm0uZ2V0KCJYRkEiKTsKICAgIGNvbnN0IGVudHJpZXMgPSB7CiAgICAgICJ4ZHA6eGRwIjogIiIsCiAgICAgIHRlbXBsYXRlOiAiIiwKICAgICAgZGF0YXNldHM6ICIiLAogICAgICBjb25maWc6ICIiLAogICAgICBjb25uZWN0aW9uU2V0OiAiIiwKICAgICAgbG9jYWxlU2V0OiAiIiwKICAgICAgc3R5bGVzaGVldDogIiIsCiAgICAgICIveGRwOnhkcCI6ICIiCiAgICB9OwogICAgaWYgKHhmYSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0gJiYgIXhmYS5pc0VtcHR5KSB7CiAgICAgIGVudHJpZXNbInhkcDp4ZHAiXSA9IHhmYTsKICAgICAgcmV0dXJuIGVudHJpZXM7CiAgICB9CiAgICBpZiAoIUFycmF5LmlzQXJyYXkoeGZhKSB8fCB4ZmEubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgZm9yIChsZXQgaSA9IDAsIGlpID0geGZhLmxlbmd0aDsgaSA8IGlpOyBpICs9IDIpIHsKICAgICAgbGV0IG5hbWU7CiAgICAgIGlmIChpID09PSAwKSB7CiAgICAgICAgbmFtZSA9ICJ4ZHA6eGRwIjsKICAgICAgfSBlbHNlIGlmIChpID09PSBpaSAtIDIpIHsKICAgICAgICBuYW1lID0gIi94ZHA6eGRwIjsKICAgICAgfSBlbHNlIHsKICAgICAgICBuYW1lID0geGZhW2ldOwogICAgICB9CiAgICAgIGlmICghZW50cmllcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLnhyZWYuZmV0Y2hJZlJlZih4ZmFbaSArIDFdKTsKICAgICAgaWYgKCEoZGF0YSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pIHx8IGRhdGEuaXNFbXB0eSkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGVudHJpZXNbbmFtZV0gPSBkYXRhOwogICAgfQogICAgcmV0dXJuIGVudHJpZXM7CiAgfQogIGdldCB4ZmFEYXRhc2V0cygpIHsKICAgIGNvbnN0IHN0cmVhbXMgPSB0aGlzLl94ZmFTdHJlYW1zOwogICAgaWYgKCFzdHJlYW1zKSB7CiAgICAgIHJldHVybiBzaGFkb3codGhpcywgInhmYURhdGFzZXRzIiwgbnVsbCk7CiAgICB9CiAgICBmb3IgKGNvbnN0IGtleSBvZiBbImRhdGFzZXRzIiwgInhkcDp4ZHAiXSkgewogICAgICBjb25zdCBzdHJlYW0gPSBzdHJlYW1zW2tleV07CiAgICAgIGlmICghc3RyZWFtKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgdHJ5IHsKICAgICAgICBjb25zdCBzdHIgPSBzdHJpbmdUb1VURjhTdHJpbmcoc3RyZWFtLmdldFN0cmluZygpKTsKICAgICAgICBjb25zdCBkYXRhID0gewogICAgICAgICAgW2tleV06IHN0cgogICAgICAgIH07CiAgICAgICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAieGZhRGF0YXNldHMiLCBuZXcgRGF0YXNldFJlYWRlcihkYXRhKSk7CiAgICAgIH0gY2F0Y2ggewogICAgICAgIHdhcm4oIlhGQSAtIEludmFsaWQgdXRmLTggc3RyaW5nLiIpOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJ4ZmFEYXRhc2V0cyIsIG51bGwpOwogIH0KICBnZXQgeGZhRGF0YSgpIHsKICAgIGNvbnN0IHN0cmVhbXMgPSB0aGlzLl94ZmFTdHJlYW1zOwogICAgaWYgKCFzdHJlYW1zKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3QgZGF0YSA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICBmb3IgKGNvbnN0IFtrZXksIHN0cmVhbV0gb2YgT2JqZWN0LmVudHJpZXMoc3RyZWFtcykpIHsKICAgICAgaWYgKCFzdHJlYW0pIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICB0cnkgewogICAgICAgIGRhdGFba2V5XSA9IHN0cmluZ1RvVVRGOFN0cmluZyhzdHJlYW0uZ2V0U3RyaW5nKCkpOwogICAgICB9IGNhdGNoIHsKICAgICAgICB3YXJuKCJYRkEgLSBJbnZhbGlkIHV0Zi04IHN0cmluZy4iKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGRhdGE7CiAgfQogIGdldCB4ZmFGYWN0b3J5KCkgewogICAgbGV0IGRhdGE7CiAgICBpZiAodGhpcy5wZGZNYW5hZ2VyLmVuYWJsZVhmYSAmJiB0aGlzLmNhdGFsb2cubmVlZHNSZW5kZXJpbmcgJiYgdGhpcy5mb3JtSW5mby5oYXNYZmEgJiYgIXRoaXMuZm9ybUluZm8uaGFzQWNyb0Zvcm0pIHsKICAgICAgZGF0YSA9IHRoaXMueGZhRGF0YTsKICAgIH0KICAgIHJldHVybiBzaGFkb3codGhpcywgInhmYUZhY3RvcnkiLCBkYXRhID8gbmV3IFhGQUZhY3RvcnkoZGF0YSkgOiBudWxsKTsKICB9CiAgZ2V0IGlzUHVyZVhmYSgpIHsKICAgIHJldHVybiB0aGlzLnhmYUZhY3RvcnkgPyB0aGlzLnhmYUZhY3RvcnkuaXNWYWxpZCgpIDogZmFsc2U7CiAgfQogIGdldCBodG1sRm9yWGZhKCkgewogICAgcmV0dXJuIHRoaXMueGZhRmFjdG9yeSA/IHRoaXMueGZhRmFjdG9yeS5nZXRQYWdlcygpIDogbnVsbDsKICB9CiAgYXN5bmMgbG9hZFhmYUltYWdlcygpIHsKICAgIGNvbnN0IHhmYUltYWdlc0RpY3QgPSBhd2FpdCB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZygieGZhSW1hZ2VzIik7CiAgICBpZiAoIXhmYUltYWdlc0RpY3QpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3Qga2V5cyA9IHhmYUltYWdlc0RpY3QuZ2V0S2V5cygpOwogICAgY29uc3Qgb2JqZWN0TG9hZGVyID0gbmV3IE9iamVjdExvYWRlcih4ZmFJbWFnZXNEaWN0LCBrZXlzLCB0aGlzLnhyZWYpOwogICAgYXdhaXQgb2JqZWN0TG9hZGVyLmxvYWQoKTsKICAgIGNvbnN0IHhmYUltYWdlcyA9IG5ldyBNYXAoKTsKICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHsKICAgICAgY29uc3Qgc3RyZWFtID0geGZhSW1hZ2VzRGljdC5nZXQoa2V5KTsKICAgICAgaWYgKHN0cmVhbSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pIHsKICAgICAgICB4ZmFJbWFnZXMuc2V0KGtleSwgc3RyZWFtLmdldEJ5dGVzKCkpOwogICAgICB9CiAgICB9CiAgICB0aGlzLnhmYUZhY3Rvcnkuc2V0SW1hZ2VzKHhmYUltYWdlcyk7CiAgfQogIGFzeW5jIGxvYWRYZmFGb250cyhoYW5kbGVyLCB0YXNrKSB7CiAgICBjb25zdCBhY3JvRm9ybSA9IGF3YWl0IHRoaXMucGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCJhY3JvRm9ybSIpOwogICAgaWYgKCFhY3JvRm9ybSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCByZXNvdXJjZXMgPSBhd2FpdCBhY3JvRm9ybS5nZXRBc3luYygiRFIiKTsKICAgIGlmICghKHJlc291cmNlcyBpbnN0YW5jZW9mIERpY3QpKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IG9iamVjdExvYWRlciA9IG5ldyBPYmplY3RMb2FkZXIocmVzb3VyY2VzLCBbIkZvbnQiXSwgdGhpcy54cmVmKTsKICAgIGF3YWl0IG9iamVjdExvYWRlci5sb2FkKCk7CiAgICBjb25zdCBmb250UmVzID0gcmVzb3VyY2VzLmdldCgiRm9udCIpOwogICAgaWYgKCEoZm9udFJlcyBpbnN0YW5jZW9mIERpY3QpKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobnVsbCksIHRoaXMucGRmTWFuYWdlci5ldmFsdWF0b3JPcHRpb25zKTsKICAgIG9wdGlvbnMudXNlU3lzdGVtRm9udHMgPSBmYWxzZTsKICAgIGNvbnN0IHBhcnRpYWxFdmFsdWF0b3IgPSBuZXcgUGFydGlhbEV2YWx1YXRvcih7CiAgICAgIHhyZWY6IHRoaXMueHJlZiwKICAgICAgaGFuZGxlciwKICAgICAgcGFnZUluZGV4OiAtMSwKICAgICAgaWRGYWN0b3J5OiB0aGlzLl9nbG9iYWxJZEZhY3RvcnksCiAgICAgIGZvbnRDYWNoZTogdGhpcy5jYXRhbG9nLmZvbnRDYWNoZSwKICAgICAgYnVpbHRJbkNNYXBDYWNoZTogdGhpcy5jYXRhbG9nLmJ1aWx0SW5DTWFwQ2FjaGUsCiAgICAgIHN0YW5kYXJkRm9udERhdGFDYWNoZTogdGhpcy5jYXRhbG9nLnN0YW5kYXJkRm9udERhdGFDYWNoZSwKICAgICAgb3B0aW9ucwogICAgfSk7CiAgICBjb25zdCBvcGVyYXRvckxpc3QgPSBuZXcgT3BlcmF0b3JMaXN0KCk7CiAgICBjb25zdCBwZGZGb250cyA9IFtdOwogICAgY29uc3QgaW5pdGlhbFN0YXRlID0gewogICAgICBnZXQgZm9udCgpIHsKICAgICAgICByZXR1cm4gcGRmRm9udHMuYXQoLTEpOwogICAgICB9LAogICAgICBzZXQgZm9udChmb250KSB7CiAgICAgICAgcGRmRm9udHMucHVzaChmb250KTsKICAgICAgfSwKICAgICAgY2xvbmUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0KICAgIH07CiAgICBjb25zdCBwcm9taXNlcyA9IFtdOwogICAgZm9yIChjb25zdCBbZm9udE5hbWUsIGZvbnRdIG9mIGZvbnRSZXMpIHsKICAgICAgY29uc3QgZGVzY3JpcHRvciA9IGZvbnQuZ2V0KCJGb250RGVzY3JpcHRvciIpOwogICAgICBpZiAoIShkZXNjcmlwdG9yIGluc3RhbmNlb2YgRGljdCkpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBsZXQgZm9udEZhbWlseSA9IGRlc2NyaXB0b3IuZ2V0KCJGb250RmFtaWx5Iik7CiAgICAgIGZvbnRGYW1pbHkgPSBmb250RmFtaWx5LnJlcGxhY2VBbGwoL1sgXSsoXGQpL2csICIkMSIpOwogICAgICBjb25zdCBmb250V2VpZ2h0ID0gZGVzY3JpcHRvci5nZXQoIkZvbnRXZWlnaHQiKTsKICAgICAgY29uc3QgaXRhbGljQW5nbGUgPSAtZGVzY3JpcHRvci5nZXQoIkl0YWxpY0FuZ2xlIik7CiAgICAgIGNvbnN0IGNzc0ZvbnRJbmZvID0gewogICAgICAgIGZvbnRGYW1pbHksCiAgICAgICAgZm9udFdlaWdodCwKICAgICAgICBpdGFsaWNBbmdsZQogICAgICB9OwogICAgICBpZiAoIXZhbGlkYXRlQ1NTRm9udChjc3NGb250SW5mbykpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBwcm9taXNlcy5wdXNoKHBhcnRpYWxFdmFsdWF0b3IuaGFuZGxlU2V0Rm9udChyZXNvdXJjZXMsIFtOYW1lLmdldChmb250TmFtZSksIDFdLCBudWxsLCBvcGVyYXRvckxpc3QsIHRhc2ssIGluaXRpYWxTdGF0ZSwgbnVsbCwgY3NzRm9udEluZm8pLmNhdGNoKGZ1bmN0aW9uIChyZWFzb24pIHsKICAgICAgICB3YXJuKGBsb2FkWGZhRm9udHM6ICIke3JlYXNvbn0iLmApOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9KSk7CiAgICB9CiAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7CiAgICBjb25zdCBtaXNzaW5nRm9udHMgPSB0aGlzLnhmYUZhY3Rvcnkuc2V0Rm9udHMocGRmRm9udHMpOwogICAgaWYgKCFtaXNzaW5nRm9udHMpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgb3B0aW9ucy5pZ25vcmVFcnJvcnMgPSB0cnVlOwogICAgcHJvbWlzZXMubGVuZ3RoID0gMDsKICAgIHBkZkZvbnRzLmxlbmd0aCA9IDA7CiAgICBjb25zdCByZWFsbHlNaXNzaW5nRm9udHMgPSBuZXcgU2V0KCk7CiAgICBmb3IgKGNvbnN0IG1pc3Npbmcgb2YgbWlzc2luZ0ZvbnRzKSB7CiAgICAgIGlmICghZ2V0WGZhRm9udE5hbWUoYCR7bWlzc2luZ30tUmVndWxhcmApKSB7CiAgICAgICAgcmVhbGx5TWlzc2luZ0ZvbnRzLmFkZChtaXNzaW5nKTsKICAgICAgfQogICAgfQogICAgaWYgKHJlYWxseU1pc3NpbmdGb250cy5zaXplKSB7CiAgICAgIG1pc3NpbmdGb250cy5wdXNoKCJQZGZKUy1GYWxsYmFjayIpOwogICAgfQogICAgZm9yIChjb25zdCBtaXNzaW5nIG9mIG1pc3NpbmdGb250cykgewogICAgICBpZiAocmVhbGx5TWlzc2luZ0ZvbnRzLmhhcyhtaXNzaW5nKSkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGZvciAoY29uc3QgZm9udEluZm8gb2YgW3sKICAgICAgICBuYW1lOiAiUmVndWxhciIsCiAgICAgICAgZm9udFdlaWdodDogNDAwLAogICAgICAgIGl0YWxpY0FuZ2xlOiAwCiAgICAgIH0sIHsKICAgICAgICBuYW1lOiAiQm9sZCIsCiAgICAgICAgZm9udFdlaWdodDogNzAwLAogICAgICAgIGl0YWxpY0FuZ2xlOiAwCiAgICAgIH0sIHsKICAgICAgICBuYW1lOiAiSXRhbGljIiwKICAgICAgICBmb250V2VpZ2h0OiA0MDAsCiAgICAgICAgaXRhbGljQW5nbGU6IDEyCiAgICAgIH0sIHsKICAgICAgICBuYW1lOiAiQm9sZEl0YWxpYyIsCiAgICAgICAgZm9udFdlaWdodDogNzAwLAogICAgICAgIGl0YWxpY0FuZ2xlOiAxMgogICAgICB9XSkgewogICAgICAgIGNvbnN0IG5hbWUgPSBgJHttaXNzaW5nfS0ke2ZvbnRJbmZvLm5hbWV9YDsKICAgICAgICBjb25zdCBkaWN0ID0gZ2V0WGZhRm9udERpY3QobmFtZSk7CiAgICAgICAgcHJvbWlzZXMucHVzaChwYXJ0aWFsRXZhbHVhdG9yLmhhbmRsZVNldEZvbnQocmVzb3VyY2VzLCBbTmFtZS5nZXQobmFtZSksIDFdLCBudWxsLCBvcGVyYXRvckxpc3QsIHRhc2ssIGluaXRpYWxTdGF0ZSwgZGljdCwgewogICAgICAgICAgZm9udEZhbWlseTogbWlzc2luZywKICAgICAgICAgIGZvbnRXZWlnaHQ6IGZvbnRJbmZvLmZvbnRXZWlnaHQsCiAgICAgICAgICBpdGFsaWNBbmdsZTogZm9udEluZm8uaXRhbGljQW5nbGUKICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVhc29uKSB7CiAgICAgICAgICB3YXJuKGBsb2FkWGZhRm9udHM6ICIke3JlYXNvbn0iLmApOwogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfSkpOwogICAgICB9CiAgICB9CiAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7CiAgICB0aGlzLnhmYUZhY3RvcnkuYXBwZW5kRm9udHMocGRmRm9udHMsIHJlYWxseU1pc3NpbmdGb250cyk7CiAgfQogIGFzeW5jIHNlcmlhbGl6ZVhmYURhdGEoYW5ub3RhdGlvblN0b3JhZ2UpIHsKICAgIHJldHVybiB0aGlzLnhmYUZhY3RvcnkgPyB0aGlzLnhmYUZhY3Rvcnkuc2VyaWFsaXplRGF0YShhbm5vdGF0aW9uU3RvcmFnZSkgOiBudWxsOwogIH0KICBnZXQgdmVyc2lvbigpIHsKICAgIHJldHVybiB0aGlzLmNhdGFsb2cudmVyc2lvbiB8fCB0aGlzLl92ZXJzaW9uOwogIH0KICBnZXQgZm9ybUluZm8oKSB7CiAgICBjb25zdCBmb3JtSW5mbyA9IHsKICAgICAgaGFzRmllbGRzOiBmYWxzZSwKICAgICAgaGFzQWNyb0Zvcm06IGZhbHNlLAogICAgICBoYXNYZmE6IGZhbHNlLAogICAgICBoYXNTaWduYXR1cmVzOiBmYWxzZQogICAgfTsKICAgIGNvbnN0IGFjcm9Gb3JtID0gdGhpcy5jYXRhbG9nLmFjcm9Gb3JtOwogICAgaWYgKCFhY3JvRm9ybSkgewogICAgICByZXR1cm4gc2hhZG93KHRoaXMsICJmb3JtSW5mbyIsIGZvcm1JbmZvKTsKICAgIH0KICAgIHRyeSB7CiAgICAgIGNvbnN0IGZpZWxkcyA9IGFjcm9Gb3JtLmdldCgiRmllbGRzIik7CiAgICAgIGNvbnN0IGhhc0ZpZWxkcyA9IEFycmF5LmlzQXJyYXkoZmllbGRzKSAmJiBmaWVsZHMubGVuZ3RoID4gMDsKICAgICAgZm9ybUluZm8uaGFzRmllbGRzID0gaGFzRmllbGRzOwogICAgICBjb25zdCB4ZmEgPSBhY3JvRm9ybS5nZXQoIlhGQSIpOwogICAgICBmb3JtSW5mby5oYXNYZmEgPSBBcnJheS5pc0FycmF5KHhmYSkgJiYgeGZhLmxlbmd0aCA+IDAgfHwgeGZhIGluc3RhbmNlb2YgQmFzZVN0cmVhbSAmJiAheGZhLmlzRW1wdHk7CiAgICAgIGNvbnN0IHNpZ0ZsYWdzID0gYWNyb0Zvcm0uZ2V0KCJTaWdGbGFncyIpOwogICAgICBjb25zdCBoYXNTaWduYXR1cmVzID0gISEoc2lnRmxhZ3MgJiAweDEpOwogICAgICBjb25zdCBoYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzID0gaGFzU2lnbmF0dXJlcyAmJiB0aGlzLl9oYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzKGZpZWxkcyk7CiAgICAgIGZvcm1JbmZvLmhhc0Fjcm9Gb3JtID0gaGFzRmllbGRzICYmICFoYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzOwogICAgICBmb3JtSW5mby5oYXNTaWduYXR1cmVzID0gaGFzU2lnbmF0dXJlczsKICAgIH0gY2F0Y2ggKGV4KSB7CiAgICAgIGlmIChleCBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7CiAgICAgICAgdGhyb3cgZXg7CiAgICAgIH0KICAgICAgd2FybihgQ2Fubm90IGZldGNoIGZvcm0gaW5mb3JtYXRpb246ICIke2V4fSIuYCk7CiAgICB9CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJmb3JtSW5mbyIsIGZvcm1JbmZvKTsKICB9CiAgZ2V0IGRvY3VtZW50SW5mbygpIHsKICAgIGNvbnN0IGRvY0luZm8gPSB7CiAgICAgIFBERkZvcm1hdFZlcnNpb246IHRoaXMudmVyc2lvbiwKICAgICAgTGFuZ3VhZ2U6IHRoaXMuY2F0YWxvZy5sYW5nLAogICAgICBFbmNyeXB0RmlsdGVyTmFtZTogdGhpcy54cmVmLmVuY3J5cHQgPyB0aGlzLnhyZWYuZW5jcnlwdC5maWx0ZXJOYW1lIDogbnVsbCwKICAgICAgSXNMaW5lYXJpemVkOiAhIXRoaXMubGluZWFyaXphdGlvbiwKICAgICAgSXNBY3JvRm9ybVByZXNlbnQ6IHRoaXMuZm9ybUluZm8uaGFzQWNyb0Zvcm0sCiAgICAgIElzWEZBUHJlc2VudDogdGhpcy5mb3JtSW5mby5oYXNYZmEsCiAgICAgIElzQ29sbGVjdGlvblByZXNlbnQ6ICEhdGhpcy5jYXRhbG9nLmNvbGxlY3Rpb24sCiAgICAgIElzU2lnbmF0dXJlc1ByZXNlbnQ6IHRoaXMuZm9ybUluZm8uaGFzU2lnbmF0dXJlcwogICAgfTsKICAgIGxldCBpbmZvRGljdDsKICAgIHRyeSB7CiAgICAgIGluZm9EaWN0ID0gdGhpcy54cmVmLnRyYWlsZXIuZ2V0KCJJbmZvIik7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7CiAgICAgICAgdGhyb3cgZXJyOwogICAgICB9CiAgICAgIGluZm8oIlRoZSBkb2N1bWVudCBpbmZvcm1hdGlvbiBkaWN0aW9uYXJ5IGlzIGludmFsaWQuIik7CiAgICB9CiAgICBpZiAoIShpbmZvRGljdCBpbnN0YW5jZW9mIERpY3QpKSB7CiAgICAgIHJldHVybiBzaGFkb3codGhpcywgImRvY3VtZW50SW5mbyIsIGRvY0luZm8pOwogICAgfQogICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgaW5mb0RpY3QpIHsKICAgICAgc3dpdGNoIChrZXkpIHsKICAgICAgICBjYXNlICJUaXRsZSI6CiAgICAgICAgY2FzZSAiQXV0aG9yIjoKICAgICAgICBjYXNlICJTdWJqZWN0IjoKICAgICAgICBjYXNlICJLZXl3b3JkcyI6CiAgICAgICAgY2FzZSAiQ3JlYXRvciI6CiAgICAgICAgY2FzZSAiUHJvZHVjZXIiOgogICAgICAgIGNhc2UgIkNyZWF0aW9uRGF0ZSI6CiAgICAgICAgY2FzZSAiTW9kRGF0ZSI6CiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAic3RyaW5nIikgewogICAgICAgICAgICBkb2NJbmZvW2tleV0gPSBzdHJpbmdUb1BERlN0cmluZyh2YWx1ZSk7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiVHJhcHBlZCI6CiAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBOYW1lKSB7CiAgICAgICAgICAgIGRvY0luZm9ba2V5XSA9IHZhbHVlOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBsZXQgY3VzdG9tVmFsdWU7CiAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkgewogICAgICAgICAgICBjYXNlICJzdHJpbmciOgogICAgICAgICAgICAgIGN1c3RvbVZhbHVlID0gc3RyaW5nVG9QREZTdHJpbmcodmFsdWUpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJudW1iZXIiOgogICAgICAgICAgICBjYXNlICJib29sZWFuIjoKICAgICAgICAgICAgICBjdXN0b21WYWx1ZSA9IHZhbHVlOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE5hbWUpIHsKICAgICAgICAgICAgICAgIGN1c3RvbVZhbHVlID0gdmFsdWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGN1c3RvbVZhbHVlID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgd2FybihgQmFkIHZhbHVlLCBmb3IgY3VzdG9tIGtleSAiJHtrZXl9IiwgaW4gSW5mbzogJHt2YWx1ZX0uYCk7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCFkb2NJbmZvLkN1c3RvbSkgewogICAgICAgICAgICBkb2NJbmZvLkN1c3RvbSA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICAgICAgICB9CiAgICAgICAgICBkb2NJbmZvLkN1c3RvbVtrZXldID0gY3VzdG9tVmFsdWU7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICB3YXJuKGBCYWQgdmFsdWUsIGZvciBrZXkgIiR7a2V5fSIsIGluIEluZm86ICR7dmFsdWV9LmApOwogICAgfQogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAiZG9jdW1lbnRJbmZvIiwgZG9jSW5mbyk7CiAgfQogIGdldCBmaW5nZXJwcmludHMoKSB7CiAgICBjb25zdCBGSU5HRVJQUklOVF9GSVJTVF9CWVRFUyA9IDEwMjQ7CiAgICBjb25zdCBFTVBUWV9GSU5HRVJQUklOVCA9ICJceDAwIi5yZXBlYXQoMTYpOwogICAgZnVuY3Rpb24gdmFsaWRhdGUoZGF0YSkgewogICAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09ICJzdHJpbmciICYmIGRhdGEubGVuZ3RoID09PSAxNiAmJiBkYXRhICE9PSBFTVBUWV9GSU5HRVJQUklOVDsKICAgIH0KICAgIGNvbnN0IGlkID0gdGhpcy54cmVmLnRyYWlsZXIuZ2V0KCJJRCIpOwogICAgbGV0IGhhc2hPcmlnaW5hbCwgaGFzaE1vZGlmaWVkOwogICAgaWYgKEFycmF5LmlzQXJyYXkoaWQpICYmIHZhbGlkYXRlKGlkWzBdKSkgewogICAgICBoYXNoT3JpZ2luYWwgPSBzdHJpbmdUb0J5dGVzKGlkWzBdKTsKICAgICAgaWYgKGlkWzFdICE9PSBpZFswXSAmJiB2YWxpZGF0ZShpZFsxXSkpIHsKICAgICAgICBoYXNoTW9kaWZpZWQgPSBzdHJpbmdUb0J5dGVzKGlkWzFdKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaGFzaE9yaWdpbmFsID0gY2FsY3VsYXRlTUQ1KHRoaXMuc3RyZWFtLmdldEJ5dGVSYW5nZSgwLCBGSU5HRVJQUklOVF9GSVJTVF9CWVRFUyksIDAsIEZJTkdFUlBSSU5UX0ZJUlNUX0JZVEVTKTsKICAgIH0KICAgIHJldHVybiBzaGFkb3codGhpcywgImZpbmdlcnByaW50cyIsIFt0b0hleFV0aWwoaGFzaE9yaWdpbmFsKSwgaGFzaE1vZGlmaWVkID8gdG9IZXhVdGlsKGhhc2hNb2RpZmllZCkgOiBudWxsXSk7CiAgfQogIGFzeW5jIF9nZXRMaW5lYXJpemF0aW9uUGFnZShwYWdlSW5kZXgpIHsKICAgIGNvbnN0IHsKICAgICAgY2F0YWxvZywKICAgICAgbGluZWFyaXphdGlvbiwKICAgICAgeHJlZgogICAgfSA9IHRoaXM7CiAgICBjb25zdCByZWYgPSBSZWYuZ2V0KGxpbmVhcml6YXRpb24ub2JqZWN0TnVtYmVyRmlyc3QsIDApOwogICAgdHJ5IHsKICAgICAgY29uc3Qgb2JqID0gYXdhaXQgeHJlZi5mZXRjaEFzeW5jKHJlZik7CiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBEaWN0KSB7CiAgICAgICAgbGV0IHR5cGUgPSBvYmouZ2V0UmF3KCJUeXBlIik7CiAgICAgICAgaWYgKHR5cGUgaW5zdGFuY2VvZiBSZWYpIHsKICAgICAgICAgIHR5cGUgPSBhd2FpdCB4cmVmLmZldGNoQXN5bmModHlwZSk7CiAgICAgICAgfQogICAgICAgIGlmIChpc05hbWUodHlwZSwgIlBhZ2UiKSB8fCAhb2JqLmhhcygiVHlwZSIpICYmICFvYmouaGFzKCJLaWRzIikgJiYgb2JqLmhhcygiQ29udGVudHMiKSkgewogICAgICAgICAgaWYgKCFjYXRhbG9nLnBhZ2VLaWRzQ291bnRDYWNoZS5oYXMocmVmKSkgewogICAgICAgICAgICBjYXRhbG9nLnBhZ2VLaWRzQ291bnRDYWNoZS5wdXQocmVmLCAxKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghY2F0YWxvZy5wYWdlSW5kZXhDYWNoZS5oYXMocmVmKSkgewogICAgICAgICAgICBjYXRhbG9nLnBhZ2VJbmRleENhY2hlLnB1dChyZWYsIDApOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIFtvYmosIHJlZl07CiAgICAgICAgfQogICAgICB9CiAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcigiVGhlIExpbmVhcml6YXRpb24gZGljdGlvbmFyeSBkb2Vzbid0IHBvaW50IHRvIGEgdmFsaWQgUGFnZSBkaWN0aW9uYXJ5LiIpOwogICAgfSBjYXRjaCAocmVhc29uKSB7CiAgICAgIHdhcm4oYF9nZXRMaW5lYXJpemF0aW9uUGFnZTogIiR7cmVhc29uLm1lc3NhZ2V9Ii5gKTsKICAgICAgcmV0dXJuIGNhdGFsb2cuZ2V0UGFnZURpY3QocGFnZUluZGV4KTsKICAgIH0KICB9CiAgZ2V0UGFnZShwYWdlSW5kZXgpIHsKICAgIGNvbnN0IGNhY2hlZFByb21pc2UgPSB0aGlzLl9wYWdlUHJvbWlzZXMuZ2V0KHBhZ2VJbmRleCk7CiAgICBpZiAoY2FjaGVkUHJvbWlzZSkgewogICAgICByZXR1cm4gY2FjaGVkUHJvbWlzZTsKICAgIH0KICAgIGNvbnN0IHsKICAgICAgY2F0YWxvZywKICAgICAgbGluZWFyaXphdGlvbiwKICAgICAgeGZhRmFjdG9yeQogICAgfSA9IHRoaXM7CiAgICBsZXQgcHJvbWlzZTsKICAgIGlmICh4ZmFGYWN0b3J5KSB7CiAgICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoW0RpY3QuZW1wdHksIG51bGxdKTsKICAgIH0gZWxzZSBpZiAobGluZWFyaXphdGlvbj8ucGFnZUZpcnN0ID09PSBwYWdlSW5kZXgpIHsKICAgICAgcHJvbWlzZSA9IHRoaXMuX2dldExpbmVhcml6YXRpb25QYWdlKHBhZ2VJbmRleCk7CiAgICB9IGVsc2UgewogICAgICBwcm9taXNlID0gY2F0YWxvZy5nZXRQYWdlRGljdChwYWdlSW5kZXgpOwogICAgfQogICAgcHJvbWlzZSA9IHByb21pc2UudGhlbigoW3BhZ2VEaWN0LCByZWZdKSA9PiBuZXcgUGFnZSh7CiAgICAgIHBkZk1hbmFnZXI6IHRoaXMucGRmTWFuYWdlciwKICAgICAgeHJlZjogdGhpcy54cmVmLAogICAgICBwYWdlSW5kZXgsCiAgICAgIHBhZ2VEaWN0LAogICAgICByZWYsCiAgICAgIGdsb2JhbElkRmFjdG9yeTogdGhpcy5fZ2xvYmFsSWRGYWN0b3J5LAogICAgICBmb250Q2FjaGU6IGNhdGFsb2cuZm9udENhY2hlLAogICAgICBidWlsdEluQ01hcENhY2hlOiBjYXRhbG9nLmJ1aWx0SW5DTWFwQ2FjaGUsCiAgICAgIHN0YW5kYXJkRm9udERhdGFDYWNoZTogY2F0YWxvZy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsCiAgICAgIGdsb2JhbENvbG9yU3BhY2VDYWNoZTogY2F0YWxvZy5nbG9iYWxDb2xvclNwYWNlQ2FjaGUsCiAgICAgIGdsb2JhbEltYWdlQ2FjaGU6IGNhdGFsb2cuZ2xvYmFsSW1hZ2VDYWNoZSwKICAgICAgc3lzdGVtRm9udENhY2hlOiBjYXRhbG9nLnN5c3RlbUZvbnRDYWNoZSwKICAgICAgbm9uQmxlbmRNb2Rlc1NldDogY2F0YWxvZy5ub25CbGVuZE1vZGVzU2V0LAogICAgICB4ZmFGYWN0b3J5CiAgICB9KSk7CiAgICB0aGlzLl9wYWdlUHJvbWlzZXMuc2V0KHBhZ2VJbmRleCwgcHJvbWlzZSk7CiAgICByZXR1cm4gcHJvbWlzZTsKICB9CiAgYXN5bmMgY2hlY2tGaXJzdFBhZ2UocmVjb3ZlcnlNb2RlID0gZmFsc2UpIHsKICAgIGlmIChyZWNvdmVyeU1vZGUpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdHJ5IHsKICAgICAgYXdhaXQgdGhpcy5nZXRQYWdlKDApOwogICAgfSBjYXRjaCAocmVhc29uKSB7CiAgICAgIGlmIChyZWFzb24gaW5zdGFuY2VvZiBYUmVmRW50cnlFeGNlcHRpb24pIHsKICAgICAgICB0aGlzLl9wYWdlUHJvbWlzZXMuZGVsZXRlKDApOwogICAgICAgIGF3YWl0IHRoaXMuY2xlYW51cCgpOwogICAgICAgIHRocm93IG5ldyBYUmVmUGFyc2VFeGNlcHRpb24oKTsKICAgICAgfQogICAgfQogIH0KICBhc3luYyBjaGVja0xhc3RQYWdlKHJlY292ZXJ5TW9kZSA9IGZhbHNlKSB7CiAgICBjb25zdCB7CiAgICAgIGNhdGFsb2csCiAgICAgIHBkZk1hbmFnZXIKICAgIH0gPSB0aGlzOwogICAgY2F0YWxvZy5zZXRBY3R1YWxOdW1QYWdlcygpOwogICAgbGV0IG51bVBhZ2VzOwogICAgdHJ5IHsKICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW3BkZk1hbmFnZXIuZW5zdXJlRG9jKCJ4ZmFGYWN0b3J5IiksIHBkZk1hbmFnZXIuZW5zdXJlRG9jKCJsaW5lYXJpemF0aW9uIiksIHBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZygibnVtUGFnZXMiKV0pOwogICAgICBpZiAodGhpcy54ZmFGYWN0b3J5KSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9IGVsc2UgaWYgKHRoaXMubGluZWFyaXphdGlvbikgewogICAgICAgIG51bVBhZ2VzID0gdGhpcy5saW5lYXJpemF0aW9uLm51bVBhZ2VzOwogICAgICB9IGVsc2UgewogICAgICAgIG51bVBhZ2VzID0gY2F0YWxvZy5udW1QYWdlczsKICAgICAgfQogICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIobnVtUGFnZXMpKSB7CiAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJQYWdlIGNvdW50IGlzIG5vdCBhbiBpbnRlZ2VyLiIpOwogICAgICB9IGVsc2UgaWYgKG51bVBhZ2VzIDw9IDEpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgYXdhaXQgdGhpcy5nZXRQYWdlKG51bVBhZ2VzIC0gMSk7CiAgICB9IGNhdGNoIChyZWFzb24pIHsKICAgICAgdGhpcy5fcGFnZVByb21pc2VzLmRlbGV0ZShudW1QYWdlcyAtIDEpOwogICAgICBhd2FpdCB0aGlzLmNsZWFudXAoKTsKICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIFhSZWZFbnRyeUV4Y2VwdGlvbiAmJiAhcmVjb3ZlcnlNb2RlKSB7CiAgICAgICAgdGhyb3cgbmV3IFhSZWZQYXJzZUV4Y2VwdGlvbigpOwogICAgICB9CiAgICAgIHdhcm4oYGNoZWNrTGFzdFBhZ2UgLSBpbnZhbGlkIC9QYWdlcyB0cmVlIC9Db3VudDogJHtudW1QYWdlc30uYCk7CiAgICAgIGxldCBwYWdlc1RyZWU7CiAgICAgIHRyeSB7CiAgICAgICAgcGFnZXNUcmVlID0gYXdhaXQgY2F0YWxvZy5nZXRBbGxQYWdlRGljdHMocmVjb3ZlcnlNb2RlKTsKICAgICAgfSBjYXRjaCAocmVhc29uQWxsKSB7CiAgICAgICAgaWYgKHJlYXNvbkFsbCBpbnN0YW5jZW9mIFhSZWZFbnRyeUV4Y2VwdGlvbiAmJiAhcmVjb3ZlcnlNb2RlKSB7CiAgICAgICAgICB0aHJvdyBuZXcgWFJlZlBhcnNlRXhjZXB0aW9uKCk7CiAgICAgICAgfQogICAgICAgIGNhdGFsb2cuc2V0QWN0dWFsTnVtUGFnZXMoMSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGZvciAoY29uc3QgW3BhZ2VJbmRleCwgW3BhZ2VEaWN0LCByZWZdXSBvZiBwYWdlc1RyZWUpIHsKICAgICAgICBsZXQgcHJvbWlzZTsKICAgICAgICBpZiAocGFnZURpY3QgaW5zdGFuY2VvZiBFcnJvcikgewogICAgICAgICAgcHJvbWlzZSA9IFByb21pc2UucmVqZWN0KHBhZ2VEaWN0KTsKICAgICAgICAgIHByb21pc2UuY2F0Y2goKCkgPT4ge30pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKG5ldyBQYWdlKHsKICAgICAgICAgICAgcGRmTWFuYWdlciwKICAgICAgICAgICAgeHJlZjogdGhpcy54cmVmLAogICAgICAgICAgICBwYWdlSW5kZXgsCiAgICAgICAgICAgIHBhZ2VEaWN0LAogICAgICAgICAgICByZWYsCiAgICAgICAgICAgIGdsb2JhbElkRmFjdG9yeTogdGhpcy5fZ2xvYmFsSWRGYWN0b3J5LAogICAgICAgICAgICBmb250Q2FjaGU6IGNhdGFsb2cuZm9udENhY2hlLAogICAgICAgICAgICBidWlsdEluQ01hcENhY2hlOiBjYXRhbG9nLmJ1aWx0SW5DTWFwQ2FjaGUsCiAgICAgICAgICAgIHN0YW5kYXJkRm9udERhdGFDYWNoZTogY2F0YWxvZy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsCiAgICAgICAgICAgIGdsb2JhbENvbG9yU3BhY2VDYWNoZTogdGhpcy5nbG9iYWxDb2xvclNwYWNlQ2FjaGUsCiAgICAgICAgICAgIGdsb2JhbEltYWdlQ2FjaGU6IGNhdGFsb2cuZ2xvYmFsSW1hZ2VDYWNoZSwKICAgICAgICAgICAgc3lzdGVtRm9udENhY2hlOiBjYXRhbG9nLnN5c3RlbUZvbnRDYWNoZSwKICAgICAgICAgICAgbm9uQmxlbmRNb2Rlc1NldDogY2F0YWxvZy5ub25CbGVuZE1vZGVzU2V0LAogICAgICAgICAgICB4ZmFGYWN0b3J5OiBudWxsCiAgICAgICAgICB9KSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuX3BhZ2VQcm9taXNlcy5zZXQocGFnZUluZGV4LCBwcm9taXNlKTsKICAgICAgfQogICAgICBjYXRhbG9nLnNldEFjdHVhbE51bVBhZ2VzKHBhZ2VzVHJlZS5zaXplKTsKICAgIH0KICB9CiAgYXN5bmMgZm9udEZhbGxiYWNrKGlkLCBoYW5kbGVyKSB7CiAgICBjb25zdCB7CiAgICAgIGNhdGFsb2csCiAgICAgIHBkZk1hbmFnZXIKICAgIH0gPSB0aGlzOwogICAgZm9yIChjb25zdCB0cmFuc2xhdGVkRm9udCBvZiBhd2FpdCBQcm9taXNlLmFsbChjYXRhbG9nLmZvbnRDYWNoZSkpIHsKICAgICAgaWYgKHRyYW5zbGF0ZWRGb250LmxvYWRlZE5hbWUgPT09IGlkKSB7CiAgICAgICAgdHJhbnNsYXRlZEZvbnQuZmFsbGJhY2soaGFuZGxlciwgcGRmTWFuYWdlci5ldmFsdWF0b3JPcHRpb25zKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KICB9CiAgYXN5bmMgY2xlYW51cChtYW51YWxseVRyaWdnZXJlZCA9IGZhbHNlKSB7CiAgICByZXR1cm4gdGhpcy5jYXRhbG9nID8gdGhpcy5jYXRhbG9nLmNsZWFudXAobWFudWFsbHlUcmlnZ2VyZWQpIDogY2xlYXJHbG9iYWxDYWNoZXMoKTsKICB9CiAgYXN5bmMgI2NvbGxlY3RGaWVsZE9iamVjdHMobmFtZSwgcGFyZW50UmVmLCBmaWVsZFJlZiwgcHJvbWlzZXMsIGFubm90YXRpb25HbG9iYWxzLCB2aXNpdGVkUmVmcywgb3JwaGFuRmllbGRzKSB7CiAgICBjb25zdCB7CiAgICAgIHhyZWYKICAgIH0gPSB0aGlzOwogICAgaWYgKCEoZmllbGRSZWYgaW5zdGFuY2VvZiBSZWYpIHx8IHZpc2l0ZWRSZWZzLmhhcyhmaWVsZFJlZikpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdmlzaXRlZFJlZnMucHV0KGZpZWxkUmVmKTsKICAgIGNvbnN0IGZpZWxkID0gYXdhaXQgeHJlZi5mZXRjaEFzeW5jKGZpZWxkUmVmKTsKICAgIGlmICghKGZpZWxkIGluc3RhbmNlb2YgRGljdCkpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgbGV0IHN1YnR5cGUgPSBhd2FpdCBmaWVsZC5nZXRBc3luYygiU3VidHlwZSIpOwogICAgc3VidHlwZSA9IHN1YnR5cGUgaW5zdGFuY2VvZiBOYW1lID8gc3VidHlwZS5uYW1lIDogbnVsbDsKICAgIHN3aXRjaCAoc3VidHlwZSkgewogICAgICBjYXNlICJMaW5rIjoKICAgICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoZmllbGQuaGFzKCJUIikpIHsKICAgICAgY29uc3QgcGFydE5hbWUgPSBzdHJpbmdUb1BERlN0cmluZyhhd2FpdCBmaWVsZC5nZXRBc3luYygiVCIpKTsKICAgICAgbmFtZSA9IG5hbWUgPT09ICIiID8gcGFydE5hbWUgOiBgJHtuYW1lfS4ke3BhcnROYW1lfWA7CiAgICB9IGVsc2UgewogICAgICBsZXQgb2JqID0gZmllbGQ7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgb2JqID0gb2JqLmdldFJhdygiUGFyZW50IikgfHwgcGFyZW50UmVmOwogICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBSZWYpIHsKICAgICAgICAgIGlmICh2aXNpdGVkUmVmcy5oYXMob2JqKSkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIG9iaiA9IGF3YWl0IHhyZWYuZmV0Y2hBc3luYyhvYmopOwogICAgICAgIH0KICAgICAgICBpZiAoIShvYmogaW5zdGFuY2VvZiBEaWN0KSkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmIChvYmouaGFzKCJUIikpIHsKICAgICAgICAgIGNvbnN0IHBhcnROYW1lID0gc3RyaW5nVG9QREZTdHJpbmcoYXdhaXQgb2JqLmdldEFzeW5jKCJUIikpOwogICAgICAgICAgbmFtZSA9IG5hbWUgPT09ICIiID8gcGFydE5hbWUgOiBgJHtuYW1lfS4ke3BhcnROYW1lfWA7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChwYXJlbnRSZWYgJiYgIWZpZWxkLmhhcygiUGFyZW50IikgJiYgaXNOYW1lKGZpZWxkLmdldCgiU3VidHlwZSIpLCAiV2lkZ2V0IikpIHsKICAgICAgb3JwaGFuRmllbGRzLnB1dChmaWVsZFJlZiwgcGFyZW50UmVmKTsKICAgIH0KICAgIGlmICghcHJvbWlzZXMuaGFzKG5hbWUpKSB7CiAgICAgIHByb21pc2VzLnNldChuYW1lLCBbXSk7CiAgICB9CiAgICBwcm9taXNlcy5nZXQobmFtZSkucHVzaChBbm5vdGF0aW9uRmFjdG9yeS5jcmVhdGUoeHJlZiwgZmllbGRSZWYsIGFubm90YXRpb25HbG9iYWxzLCBudWxsLCB0cnVlLCBvcnBoYW5GaWVsZHMsIG51bGwpLnRoZW4oYW5ub3RhdGlvbiA9PiBhbm5vdGF0aW9uPy5nZXRGaWVsZE9iamVjdCgpKS5jYXRjaChmdW5jdGlvbiAocmVhc29uKSB7CiAgICAgIHdhcm4oYCNjb2xsZWN0RmllbGRPYmplY3RzOiAiJHtyZWFzb259Ii5gKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9KSk7CiAgICBpZiAoIWZpZWxkLmhhcygiS2lkcyIpKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IGtpZHMgPSBhd2FpdCBmaWVsZC5nZXRBc3luYygiS2lkcyIpOwogICAgaWYgKEFycmF5LmlzQXJyYXkoa2lkcykpIHsKICAgICAgZm9yIChjb25zdCBraWQgb2Yga2lkcykgewogICAgICAgIGF3YWl0IHRoaXMuI2NvbGxlY3RGaWVsZE9iamVjdHMobmFtZSwgZmllbGRSZWYsIGtpZCwgcHJvbWlzZXMsIGFubm90YXRpb25HbG9iYWxzLCB2aXNpdGVkUmVmcywgb3JwaGFuRmllbGRzKTsKICAgICAgfQogICAgfQogIH0KICBnZXQgZmllbGRPYmplY3RzKCkgewogICAgY29uc3QgcHJvbWlzZSA9IHRoaXMucGRmTWFuYWdlci5lbnN1cmVEb2MoImZvcm1JbmZvIikudGhlbihhc3luYyBmb3JtSW5mbyA9PiB7CiAgICAgIGlmICghZm9ybUluZm8uaGFzRmllbGRzKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgY29uc3QgW2Fubm90YXRpb25HbG9iYWxzLCBhY3JvRm9ybV0gPSBhd2FpdCBQcm9taXNlLmFsbChbdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZURvYygiYW5ub3RhdGlvbkdsb2JhbHMiKSwgdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coImFjcm9Gb3JtIildKTsKICAgICAgaWYgKCFhbm5vdGF0aW9uR2xvYmFscykgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGNvbnN0IHZpc2l0ZWRSZWZzID0gbmV3IFJlZlNldCgpOwogICAgICBjb25zdCBhbGxGaWVsZHMgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgICBjb25zdCBmaWVsZFByb21pc2VzID0gbmV3IE1hcCgpOwogICAgICBjb25zdCBvcnBoYW5GaWVsZHMgPSBuZXcgUmVmU2V0Q2FjaGUoKTsKICAgICAgZm9yIChjb25zdCBmaWVsZFJlZiBvZiBhd2FpdCBhY3JvRm9ybS5nZXRBc3luYygiRmllbGRzIikpIHsKICAgICAgICBhd2FpdCB0aGlzLiNjb2xsZWN0RmllbGRPYmplY3RzKCIiLCBudWxsLCBmaWVsZFJlZiwgZmllbGRQcm9taXNlcywgYW5ub3RhdGlvbkdsb2JhbHMsIHZpc2l0ZWRSZWZzLCBvcnBoYW5GaWVsZHMpOwogICAgICB9CiAgICAgIGNvbnN0IGFsbFByb21pc2VzID0gW107CiAgICAgIGZvciAoY29uc3QgW25hbWUsIHByb21pc2VzXSBvZiBmaWVsZFByb21pc2VzKSB7CiAgICAgICAgYWxsUHJvbWlzZXMucHVzaChQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihmaWVsZHMgPT4gewogICAgICAgICAgZmllbGRzID0gZmllbGRzLmZpbHRlcihmaWVsZCA9PiAhIWZpZWxkKTsKICAgICAgICAgIGlmIChmaWVsZHMubGVuZ3RoID4gMCkgewogICAgICAgICAgICBhbGxGaWVsZHNbbmFtZV0gPSBmaWVsZHM7CiAgICAgICAgICB9CiAgICAgICAgfSkpOwogICAgICB9CiAgICAgIGF3YWl0IFByb21pc2UuYWxsKGFsbFByb21pc2VzKTsKICAgICAgcmV0dXJuIHsKICAgICAgICBhbGxGaWVsZHM6IG9iamVjdFNpemUoYWxsRmllbGRzKSA+IDAgPyBhbGxGaWVsZHMgOiBudWxsLAogICAgICAgIG9ycGhhbkZpZWxkcwogICAgICB9OwogICAgfSk7CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJmaWVsZE9iamVjdHMiLCBwcm9taXNlKTsKICB9CiAgZ2V0IGhhc0pTQWN0aW9ucygpIHsKICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlRG9jKCJfcGFyc2VIYXNKU0FjdGlvbnMiKTsKICAgIHJldHVybiBzaGFkb3codGhpcywgImhhc0pTQWN0aW9ucyIsIHByb21pc2UpOwogIH0KICBhc3luYyBfcGFyc2VIYXNKU0FjdGlvbnMoKSB7CiAgICBjb25zdCBbY2F0YWxvZ0pzQWN0aW9ucywgZmllbGRPYmplY3RzXSA9IGF3YWl0IFByb21pc2UuYWxsKFt0aGlzLnBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZygianNBY3Rpb25zIiksIHRoaXMucGRmTWFuYWdlci5lbnN1cmVEb2MoImZpZWxkT2JqZWN0cyIpXSk7CiAgICBpZiAoY2F0YWxvZ0pzQWN0aW9ucykgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChmaWVsZE9iamVjdHM/LmFsbEZpZWxkcykgewogICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhmaWVsZE9iamVjdHMuYWxsRmllbGRzKS5zb21lKGZpZWxkT2JqZWN0ID0+IGZpZWxkT2JqZWN0LnNvbWUob2JqZWN0ID0+IG9iamVjdC5hY3Rpb25zICE9PSBudWxsKSk7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGdldCBjYWxjdWxhdGlvbk9yZGVySWRzKCkgewogICAgY29uc3QgY2FsY3VsYXRpb25PcmRlciA9IHRoaXMuY2F0YWxvZy5hY3JvRm9ybT8uZ2V0KCJDTyIpOwogICAgaWYgKCFBcnJheS5pc0FycmF5KGNhbGN1bGF0aW9uT3JkZXIpIHx8IGNhbGN1bGF0aW9uT3JkZXIubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiBzaGFkb3codGhpcywgImNhbGN1bGF0aW9uT3JkZXJJZHMiLCBudWxsKTsKICAgIH0KICAgIGNvbnN0IGlkcyA9IFtdOwogICAgZm9yIChjb25zdCBpZCBvZiBjYWxjdWxhdGlvbk9yZGVyKSB7CiAgICAgIGlmIChpZCBpbnN0YW5jZW9mIFJlZikgewogICAgICAgIGlkcy5wdXNoKGlkLnRvU3RyaW5nKCkpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJjYWxjdWxhdGlvbk9yZGVySWRzIiwgaWRzLmxlbmd0aCA/IGlkcyA6IG51bGwpOwogIH0KICBnZXQgYW5ub3RhdGlvbkdsb2JhbHMoKSB7CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJhbm5vdGF0aW9uR2xvYmFscyIsIEFubm90YXRpb25GYWN0b3J5LmNyZWF0ZUdsb2JhbHModGhpcy5wZGZNYW5hZ2VyKSk7CiAgfQp9Cgo7Ly8gLi9zcmMvY29yZS9wZGZfbWFuYWdlci5qcwoKCgoKCgoKCgpmdW5jdGlvbiBwYXJzZURvY0Jhc2VVcmwodXJsKSB7CiAgaWYgKHVybCkgewogICAgY29uc3QgYWJzb2x1dGVVcmwgPSBjcmVhdGVWYWxpZEFic29sdXRlVXJsKHVybCk7CiAgICBpZiAoYWJzb2x1dGVVcmwpIHsKICAgICAgcmV0dXJuIGFic29sdXRlVXJsLmhyZWY7CiAgICB9CiAgICB3YXJuKGBJbnZhbGlkIGFic29sdXRlIGRvY0Jhc2VVcmw6ICIke3VybH0iLmApOwogIH0KICByZXR1cm4gbnVsbDsKfQpjbGFzcyBCYXNlUGRmTWFuYWdlciB7CiAgY29uc3RydWN0b3IoewogICAgZG9jQmFzZVVybCwKICAgIGRvY0lkLAogICAgZW5hYmxlWGZhLAogICAgZXZhbHVhdG9yT3B0aW9ucywKICAgIGhhbmRsZXIsCiAgICBwYXNzd29yZAogIH0pIHsKICAgIHRoaXMuX2RvY0Jhc2VVcmwgPSBwYXJzZURvY0Jhc2VVcmwoZG9jQmFzZVVybCk7CiAgICB0aGlzLl9kb2NJZCA9IGRvY0lkOwogICAgdGhpcy5fcGFzc3dvcmQgPSBwYXNzd29yZDsKICAgIHRoaXMuZW5hYmxlWGZhID0gZW5hYmxlWGZhOwogICAgZXZhbHVhdG9yT3B0aW9ucy5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCAmJj0gRmVhdHVyZVRlc3QuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ7CiAgICBldmFsdWF0b3JPcHRpb25zLmlzSW1hZ2VEZWNvZGVyU3VwcG9ydGVkICYmPSBGZWF0dXJlVGVzdC5pc0ltYWdlRGVjb2RlclN1cHBvcnRlZDsKICAgIHRoaXMuZXZhbHVhdG9yT3B0aW9ucyA9IE9iamVjdC5mcmVlemUoZXZhbHVhdG9yT3B0aW9ucyk7CiAgICBJbWFnZVJlc2l6ZXIuc2V0T3B0aW9ucyhldmFsdWF0b3JPcHRpb25zKTsKICAgIEpwZWdTdHJlYW0uc2V0T3B0aW9ucyhldmFsdWF0b3JPcHRpb25zKTsKICAgIGNvbnN0IG9wdGlvbnMgPSB7CiAgICAgIC4uLmV2YWx1YXRvck9wdGlvbnMsCiAgICAgIGhhbmRsZXIKICAgIH07CiAgICBKcHhJbWFnZS5zZXRPcHRpb25zKG9wdGlvbnMpOwogICAgSWNjQ29sb3JTcGFjZS5zZXRPcHRpb25zKG9wdGlvbnMpOwogICAgQ215a0lDQ0Jhc2VkQ1Muc2V0T3B0aW9ucyhvcHRpb25zKTsKICB9CiAgZ2V0IGRvY0lkKCkgewogICAgcmV0dXJuIHRoaXMuX2RvY0lkOwogIH0KICBnZXQgcGFzc3dvcmQoKSB7CiAgICByZXR1cm4gdGhpcy5fcGFzc3dvcmQ7CiAgfQogIGdldCBkb2NCYXNlVXJsKCkgewogICAgcmV0dXJuIHRoaXMuX2RvY0Jhc2VVcmw7CiAgfQogIGdldCBjYXRhbG9nKCkgewogICAgcmV0dXJuIHRoaXMucGRmRG9jdW1lbnQuY2F0YWxvZzsKICB9CiAgZW5zdXJlRG9jKHByb3AsIGFyZ3MpIHsKICAgIHJldHVybiB0aGlzLmVuc3VyZSh0aGlzLnBkZkRvY3VtZW50LCBwcm9wLCBhcmdzKTsKICB9CiAgZW5zdXJlWFJlZihwcm9wLCBhcmdzKSB7CiAgICByZXR1cm4gdGhpcy5lbnN1cmUodGhpcy5wZGZEb2N1bWVudC54cmVmLCBwcm9wLCBhcmdzKTsKICB9CiAgZW5zdXJlQ2F0YWxvZyhwcm9wLCBhcmdzKSB7CiAgICByZXR1cm4gdGhpcy5lbnN1cmUodGhpcy5wZGZEb2N1bWVudC5jYXRhbG9nLCBwcm9wLCBhcmdzKTsKICB9CiAgZ2V0UGFnZShwYWdlSW5kZXgpIHsKICAgIHJldHVybiB0aGlzLnBkZkRvY3VtZW50LmdldFBhZ2UocGFnZUluZGV4KTsKICB9CiAgZm9udEZhbGxiYWNrKGlkLCBoYW5kbGVyKSB7CiAgICByZXR1cm4gdGhpcy5wZGZEb2N1bWVudC5mb250RmFsbGJhY2soaWQsIGhhbmRsZXIpOwogIH0KICBsb2FkWGZhRm9udHMoaGFuZGxlciwgdGFzaykgewogICAgcmV0dXJuIHRoaXMucGRmRG9jdW1lbnQubG9hZFhmYUZvbnRzKGhhbmRsZXIsIHRhc2spOwogIH0KICBsb2FkWGZhSW1hZ2VzKCkgewogICAgcmV0dXJuIHRoaXMucGRmRG9jdW1lbnQubG9hZFhmYUltYWdlcygpOwogIH0KICBzZXJpYWxpemVYZmFEYXRhKGFubm90YXRpb25TdG9yYWdlKSB7CiAgICByZXR1cm4gdGhpcy5wZGZEb2N1bWVudC5zZXJpYWxpemVYZmFEYXRhKGFubm90YXRpb25TdG9yYWdlKTsKICB9CiAgY2xlYW51cChtYW51YWxseVRyaWdnZXJlZCA9IGZhbHNlKSB7CiAgICByZXR1cm4gdGhpcy5wZGZEb2N1bWVudC5jbGVhbnVwKG1hbnVhbGx5VHJpZ2dlcmVkKTsKICB9CiAgYXN5bmMgZW5zdXJlKG9iaiwgcHJvcCwgYXJncykgewogICAgdW5yZWFjaGFibGUoIkFic3RyYWN0IG1ldGhvZCBgZW5zdXJlYCBjYWxsZWQiKTsKICB9CiAgcmVxdWVzdFJhbmdlKGJlZ2luLCBlbmQpIHsKICAgIHVucmVhY2hhYmxlKCJBYnN0cmFjdCBtZXRob2QgYHJlcXVlc3RSYW5nZWAgY2FsbGVkIik7CiAgfQogIHJlcXVlc3RMb2FkZWRTdHJlYW0obm9GZXRjaCA9IGZhbHNlKSB7CiAgICB1bnJlYWNoYWJsZSgiQWJzdHJhY3QgbWV0aG9kIGByZXF1ZXN0TG9hZGVkU3RyZWFtYCBjYWxsZWQiKTsKICB9CiAgc2VuZFByb2dyZXNzaXZlRGF0YShjaHVuaykgewogICAgdW5yZWFjaGFibGUoIkFic3RyYWN0IG1ldGhvZCBgc2VuZFByb2dyZXNzaXZlRGF0YWAgY2FsbGVkIik7CiAgfQogIHVwZGF0ZVBhc3N3b3JkKHBhc3N3b3JkKSB7CiAgICB0aGlzLl9wYXNzd29yZCA9IHBhc3N3b3JkOwogIH0KICB0ZXJtaW5hdGUocmVhc29uKSB7CiAgICB1bnJlYWNoYWJsZSgiQWJzdHJhY3QgbWV0aG9kIGB0ZXJtaW5hdGVgIGNhbGxlZCIpOwogIH0KfQpjbGFzcyBMb2NhbFBkZk1hbmFnZXIgZXh0ZW5kcyBCYXNlUGRmTWFuYWdlciB7CiAgY29uc3RydWN0b3IoYXJncykgewogICAgc3VwZXIoYXJncyk7CiAgICBjb25zdCBzdHJlYW0gPSBuZXcgU3RyZWFtKGFyZ3Muc291cmNlKTsKICAgIHRoaXMucGRmRG9jdW1lbnQgPSBuZXcgUERGRG9jdW1lbnQodGhpcywgc3RyZWFtKTsKICAgIHRoaXMuX2xvYWRlZFN0cmVhbVByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoc3RyZWFtKTsKICB9CiAgYXN5bmMgZW5zdXJlKG9iaiwgcHJvcCwgYXJncykgewogICAgY29uc3QgdmFsdWUgPSBvYmpbcHJvcF07CiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAiZnVuY3Rpb24iKSB7CiAgICAgIHJldHVybiB2YWx1ZS5hcHBseShvYmosIGFyZ3MpOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwogIH0KICByZXF1ZXN0UmFuZ2UoYmVnaW4sIGVuZCkgewogICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOwogIH0KICByZXF1ZXN0TG9hZGVkU3RyZWFtKG5vRmV0Y2ggPSBmYWxzZSkgewogICAgcmV0dXJuIHRoaXMuX2xvYWRlZFN0cmVhbVByb21pc2U7CiAgfQogIHRlcm1pbmF0ZShyZWFzb24pIHt9Cn0KY2xhc3MgTmV0d29ya1BkZk1hbmFnZXIgZXh0ZW5kcyBCYXNlUGRmTWFuYWdlciB7CiAgY29uc3RydWN0b3IoYXJncykgewogICAgc3VwZXIoYXJncyk7CiAgICB0aGlzLnN0cmVhbU1hbmFnZXIgPSBuZXcgQ2h1bmtlZFN0cmVhbU1hbmFnZXIoYXJncy5zb3VyY2UsIHsKICAgICAgbXNnSGFuZGxlcjogYXJncy5oYW5kbGVyLAogICAgICBsZW5ndGg6IGFyZ3MubGVuZ3RoLAogICAgICBkaXNhYmxlQXV0b0ZldGNoOiBhcmdzLmRpc2FibGVBdXRvRmV0Y2gsCiAgICAgIHJhbmdlQ2h1bmtTaXplOiBhcmdzLnJhbmdlQ2h1bmtTaXplCiAgICB9KTsKICAgIHRoaXMucGRmRG9jdW1lbnQgPSBuZXcgUERGRG9jdW1lbnQodGhpcywgdGhpcy5zdHJlYW1NYW5hZ2VyLmdldFN0cmVhbSgpKTsKICB9CiAgYXN5bmMgZW5zdXJlKG9iaiwgcHJvcCwgYXJncykgewogICAgdHJ5IHsKICAgICAgY29uc3QgdmFsdWUgPSBvYmpbcHJvcF07CiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICByZXR1cm4gdmFsdWUuYXBwbHkob2JqLCBhcmdzKTsKICAgICAgfQogICAgICByZXR1cm4gdmFsdWU7CiAgICB9IGNhdGNoIChleCkgewogICAgICBpZiAoIShleCBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKSkgewogICAgICAgIHRocm93IGV4OwogICAgICB9CiAgICAgIGF3YWl0IHRoaXMucmVxdWVzdFJhbmdlKGV4LmJlZ2luLCBleC5lbmQpOwogICAgICByZXR1cm4gdGhpcy5lbnN1cmUob2JqLCBwcm9wLCBhcmdzKTsKICAgIH0KICB9CiAgcmVxdWVzdFJhbmdlKGJlZ2luLCBlbmQpIHsKICAgIHJldHVybiB0aGlzLnN0cmVhbU1hbmFnZXIucmVxdWVzdFJhbmdlKGJlZ2luLCBlbmQpOwogIH0KICByZXF1ZXN0TG9hZGVkU3RyZWFtKG5vRmV0Y2ggPSBmYWxzZSkgewogICAgcmV0dXJuIHRoaXMuc3RyZWFtTWFuYWdlci5yZXF1ZXN0QWxsQ2h1bmtzKG5vRmV0Y2gpOwogIH0KICBzZW5kUHJvZ3Jlc3NpdmVEYXRhKGNodW5rKSB7CiAgICB0aGlzLnN0cmVhbU1hbmFnZXIub25SZWNlaXZlRGF0YSh7CiAgICAgIGNodW5rCiAgICB9KTsKICB9CiAgdGVybWluYXRlKHJlYXNvbikgewogICAgdGhpcy5zdHJlYW1NYW5hZ2VyLmFib3J0KHJlYXNvbik7CiAgfQp9Cgo7Ly8gLi9zcmMvc2hhcmVkL21lc3NhZ2VfaGFuZGxlci5qcwoKY29uc3QgQ2FsbGJhY2tLaW5kID0gewogIERBVEE6IDEsCiAgRVJST1I6IDIKfTsKY29uc3QgU3RyZWFtS2luZCA9IHsKICBDQU5DRUw6IDEsCiAgQ0FOQ0VMX0NPTVBMRVRFOiAyLAogIENMT1NFOiAzLAogIEVOUVVFVUU6IDQsCiAgRVJST1I6IDUsCiAgUFVMTDogNiwKICBQVUxMX0NPTVBMRVRFOiA3LAogIFNUQVJUX0NPTVBMRVRFOiA4Cn07CmZ1bmN0aW9uIG9uRm4oKSB7fQpmdW5jdGlvbiB3cmFwUmVhc29uKGV4KSB7CiAgaWYgKGV4IGluc3RhbmNlb2YgQWJvcnRFeGNlcHRpb24gfHwgZXggaW5zdGFuY2VvZiBJbnZhbGlkUERGRXhjZXB0aW9uIHx8IGV4IGluc3RhbmNlb2YgUGFzc3dvcmRFeGNlcHRpb24gfHwgZXggaW5zdGFuY2VvZiBSZXNwb25zZUV4Y2VwdGlvbiB8fCBleCBpbnN0YW5jZW9mIFVua25vd25FcnJvckV4Y2VwdGlvbikgewogICAgcmV0dXJuIGV4OwogIH0KICBpZiAoIShleCBpbnN0YW5jZW9mIEVycm9yIHx8IHR5cGVvZiBleCA9PT0gIm9iamVjdCIgJiYgZXggIT09IG51bGwpKSB7CiAgICB1bnJlYWNoYWJsZSgnd3JhcFJlYXNvbjogRXhwZWN0ZWQgInJlYXNvbiIgdG8gYmUgYSAocG9zc2libHkgY2xvbmVkKSBFcnJvci4nKTsKICB9CiAgc3dpdGNoIChleC5uYW1lKSB7CiAgICBjYXNlICJBYm9ydEV4Y2VwdGlvbiI6CiAgICAgIHJldHVybiBuZXcgQWJvcnRFeGNlcHRpb24oZXgubWVzc2FnZSk7CiAgICBjYXNlICJJbnZhbGlkUERGRXhjZXB0aW9uIjoKICAgICAgcmV0dXJuIG5ldyBJbnZhbGlkUERGRXhjZXB0aW9uKGV4Lm1lc3NhZ2UpOwogICAgY2FzZSAiUGFzc3dvcmRFeGNlcHRpb24iOgogICAgICByZXR1cm4gbmV3IFBhc3N3b3JkRXhjZXB0aW9uKGV4Lm1lc3NhZ2UsIGV4LmNvZGUpOwogICAgY2FzZSAiUmVzcG9uc2VFeGNlcHRpb24iOgogICAgICByZXR1cm4gbmV3IFJlc3BvbnNlRXhjZXB0aW9uKGV4Lm1lc3NhZ2UsIGV4LnN0YXR1cywgZXgubWlzc2luZyk7CiAgICBjYXNlICJVbmtub3duRXJyb3JFeGNlcHRpb24iOgogICAgICByZXR1cm4gbmV3IFVua25vd25FcnJvckV4Y2VwdGlvbihleC5tZXNzYWdlLCBleC5kZXRhaWxzKTsKICB9CiAgcmV0dXJuIG5ldyBVbmtub3duRXJyb3JFeGNlcHRpb24oZXgubWVzc2FnZSwgZXgudG9TdHJpbmcoKSk7Cn0KY2xhc3MgTWVzc2FnZUhhbmRsZXIgewogICNtZXNzYWdlQUMgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7CiAgY29uc3RydWN0b3Ioc291cmNlTmFtZSwgdGFyZ2V0TmFtZSwgY29tT2JqKSB7CiAgICB0aGlzLnNvdXJjZU5hbWUgPSBzb3VyY2VOYW1lOwogICAgdGhpcy50YXJnZXROYW1lID0gdGFyZ2V0TmFtZTsKICAgIHRoaXMuY29tT2JqID0gY29tT2JqOwogICAgdGhpcy5jYWxsYmFja0lkID0gMTsKICAgIHRoaXMuc3RyZWFtSWQgPSAxOwogICAgdGhpcy5zdHJlYW1TaW5rcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgIHRoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgdGhpcy5hY3Rpb25IYW5kbGVyID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgIGNvbU9iai5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgdGhpcy4jb25NZXNzYWdlLmJpbmQodGhpcyksIHsKICAgICAgc2lnbmFsOiB0aGlzLiNtZXNzYWdlQUMuc2lnbmFsCiAgICB9KTsKICB9CiAgI29uTWVzc2FnZSh7CiAgICBkYXRhCiAgfSkgewogICAgaWYgKGRhdGEudGFyZ2V0TmFtZSAhPT0gdGhpcy5zb3VyY2VOYW1lKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChkYXRhLnN0cmVhbSkgewogICAgICB0aGlzLiNwcm9jZXNzU3RyZWFtTWVzc2FnZShkYXRhKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGRhdGEuY2FsbGJhY2spIHsKICAgICAgY29uc3QgY2FsbGJhY2tJZCA9IGRhdGEuY2FsbGJhY2tJZDsKICAgICAgY29uc3QgY2FwYWJpbGl0eSA9IHRoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXNbY2FsbGJhY2tJZF07CiAgICAgIGlmICghY2FwYWJpbGl0eSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlc29sdmUgY2FsbGJhY2sgJHtjYWxsYmFja0lkfWApOwogICAgICB9CiAgICAgIGRlbGV0ZSB0aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzW2NhbGxiYWNrSWRdOwogICAgICBpZiAoZGF0YS5jYWxsYmFjayA9PT0gQ2FsbGJhY2tLaW5kLkRBVEEpIHsKICAgICAgICBjYXBhYmlsaXR5LnJlc29sdmUoZGF0YS5kYXRhKTsKICAgICAgfSBlbHNlIGlmIChkYXRhLmNhbGxiYWNrID09PSBDYWxsYmFja0tpbmQuRVJST1IpIHsKICAgICAgICBjYXBhYmlsaXR5LnJlamVjdCh3cmFwUmVhc29uKGRhdGEucmVhc29uKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGNhbGxiYWNrIGNhc2UiKTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmFjdGlvbkhhbmRsZXJbZGF0YS5hY3Rpb25dOwogICAgaWYgKCFhY3Rpb24pIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGFjdGlvbiBmcm9tIHdvcmtlcjogJHtkYXRhLmFjdGlvbn1gKTsKICAgIH0KICAgIGlmIChkYXRhLmNhbGxiYWNrSWQpIHsKICAgICAgY29uc3Qgc291cmNlTmFtZSA9IHRoaXMuc291cmNlTmFtZSwKICAgICAgICB0YXJnZXROYW1lID0gZGF0YS5zb3VyY2VOYW1lLAogICAgICAgIGNvbU9iaiA9IHRoaXMuY29tT2JqOwogICAgICBQcm9taXNlLnRyeShhY3Rpb24sIGRhdGEuZGF0YSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7CiAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHsKICAgICAgICAgIHNvdXJjZU5hbWUsCiAgICAgICAgICB0YXJnZXROYW1lLAogICAgICAgICAgY2FsbGJhY2s6IENhbGxiYWNrS2luZC5EQVRBLAogICAgICAgICAgY2FsbGJhY2tJZDogZGF0YS5jYWxsYmFja0lkLAogICAgICAgICAgZGF0YTogcmVzdWx0CiAgICAgICAgfSk7CiAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHsKICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2UoewogICAgICAgICAgc291cmNlTmFtZSwKICAgICAgICAgIHRhcmdldE5hbWUsCiAgICAgICAgICBjYWxsYmFjazogQ2FsbGJhY2tLaW5kLkVSUk9SLAogICAgICAgICAgY2FsbGJhY2tJZDogZGF0YS5jYWxsYmFja0lkLAogICAgICAgICAgcmVhc29uOiB3cmFwUmVhc29uKHJlYXNvbikKICAgICAgICB9KTsKICAgICAgfSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChkYXRhLnN0cmVhbUlkKSB7CiAgICAgIHRoaXMuI2NyZWF0ZVN0cmVhbVNpbmsoZGF0YSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGFjdGlvbihkYXRhLmRhdGEpOwogIH0KICBvbihhY3Rpb25OYW1lLCBoYW5kbGVyKSB7CiAgICBjb25zdCBhaCA9IHRoaXMuYWN0aW9uSGFuZGxlcjsKICAgIGlmIChhaFthY3Rpb25OYW1lXSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGlzIGFscmVhZHkgYW4gYWN0aW9uTmFtZSBjYWxsZWQgIiR7YWN0aW9uTmFtZX0iYCk7CiAgICB9CiAgICBhaFthY3Rpb25OYW1lXSA9IGhhbmRsZXI7CiAgfQogIHNlbmQoYWN0aW9uTmFtZSwgZGF0YSwgdHJhbnNmZXJzKSB7CiAgICB0aGlzLmNvbU9iai5wb3N0TWVzc2FnZSh7CiAgICAgIHNvdXJjZU5hbWU6IHRoaXMuc291cmNlTmFtZSwKICAgICAgdGFyZ2V0TmFtZTogdGhpcy50YXJnZXROYW1lLAogICAgICBhY3Rpb246IGFjdGlvbk5hbWUsCiAgICAgIGRhdGEKICAgIH0sIHRyYW5zZmVycyk7CiAgfQogIHNlbmRXaXRoUHJvbWlzZShhY3Rpb25OYW1lLCBkYXRhLCB0cmFuc2ZlcnMpIHsKICAgIGNvbnN0IGNhbGxiYWNrSWQgPSB0aGlzLmNhbGxiYWNrSWQrKzsKICAgIGNvbnN0IGNhcGFiaWxpdHkgPSBQcm9taXNlLndpdGhSZXNvbHZlcnMoKTsKICAgIHRoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXNbY2FsbGJhY2tJZF0gPSBjYXBhYmlsaXR5OwogICAgdHJ5IHsKICAgICAgdGhpcy5jb21PYmoucG9zdE1lc3NhZ2UoewogICAgICAgIHNvdXJjZU5hbWU6IHRoaXMuc291cmNlTmFtZSwKICAgICAgICB0YXJnZXROYW1lOiB0aGlzLnRhcmdldE5hbWUsCiAgICAgICAgYWN0aW9uOiBhY3Rpb25OYW1lLAogICAgICAgIGNhbGxiYWNrSWQsCiAgICAgICAgZGF0YQogICAgICB9LCB0cmFuc2ZlcnMpOwogICAgfSBjYXRjaCAoZXgpIHsKICAgICAgY2FwYWJpbGl0eS5yZWplY3QoZXgpOwogICAgfQogICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTsKICB9CiAgc2VuZFdpdGhTdHJlYW0oYWN0aW9uTmFtZSwgZGF0YSwgcXVldWVpbmdTdHJhdGVneSwgdHJhbnNmZXJzKSB7CiAgICBjb25zdCBzdHJlYW1JZCA9IHRoaXMuc3RyZWFtSWQrKywKICAgICAgc291cmNlTmFtZSA9IHRoaXMuc291cmNlTmFtZSwKICAgICAgdGFyZ2V0TmFtZSA9IHRoaXMudGFyZ2V0TmFtZSwKICAgICAgY29tT2JqID0gdGhpcy5jb21PYmo7CiAgICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHsKICAgICAgc3RhcnQ6IGNvbnRyb2xsZXIgPT4gewogICAgICAgIGNvbnN0IHN0YXJ0Q2FwYWJpbGl0eSA9IFByb21pc2Uud2l0aFJlc29sdmVycygpOwogICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdID0gewogICAgICAgICAgY29udHJvbGxlciwKICAgICAgICAgIHN0YXJ0Q2FsbDogc3RhcnRDYXBhYmlsaXR5LAogICAgICAgICAgcHVsbENhbGw6IG51bGwsCiAgICAgICAgICBjYW5jZWxDYWxsOiBudWxsLAogICAgICAgICAgaXNDbG9zZWQ6IGZhbHNlCiAgICAgICAgfTsKICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2UoewogICAgICAgICAgc291cmNlTmFtZSwKICAgICAgICAgIHRhcmdldE5hbWUsCiAgICAgICAgICBhY3Rpb246IGFjdGlvbk5hbWUsCiAgICAgICAgICBzdHJlYW1JZCwKICAgICAgICAgIGRhdGEsCiAgICAgICAgICBkZXNpcmVkU2l6ZTogY29udHJvbGxlci5kZXNpcmVkU2l6ZQogICAgICAgIH0sIHRyYW5zZmVycyk7CiAgICAgICAgcmV0dXJuIHN0YXJ0Q2FwYWJpbGl0eS5wcm9taXNlOwogICAgICB9LAogICAgICBwdWxsOiBjb250cm9sbGVyID0+IHsKICAgICAgICBjb25zdCBwdWxsQ2FwYWJpbGl0eSA9IFByb21pc2Uud2l0aFJlc29sdmVycygpOwogICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLnB1bGxDYWxsID0gcHVsbENhcGFiaWxpdHk7CiAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHsKICAgICAgICAgIHNvdXJjZU5hbWUsCiAgICAgICAgICB0YXJnZXROYW1lLAogICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLlBVTEwsCiAgICAgICAgICBzdHJlYW1JZCwKICAgICAgICAgIGRlc2lyZWRTaXplOiBjb250cm9sbGVyLmRlc2lyZWRTaXplCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHB1bGxDYXBhYmlsaXR5LnByb21pc2U7CiAgICAgIH0sCiAgICAgIGNhbmNlbDogcmVhc29uID0+IHsKICAgICAgICBhc3NlcnQocmVhc29uIGluc3RhbmNlb2YgRXJyb3IsICJjYW5jZWwgbXVzdCBoYXZlIGEgdmFsaWQgcmVhc29uIik7CiAgICAgICAgY29uc3QgY2FuY2VsQ2FwYWJpbGl0eSA9IFByb21pc2Uud2l0aFJlc29sdmVycygpOwogICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLmNhbmNlbENhbGwgPSBjYW5jZWxDYXBhYmlsaXR5OwogICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLmlzQ2xvc2VkID0gdHJ1ZTsKICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2UoewogICAgICAgICAgc291cmNlTmFtZSwKICAgICAgICAgIHRhcmdldE5hbWUsCiAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuQ0FOQ0VMLAogICAgICAgICAgc3RyZWFtSWQsCiAgICAgICAgICByZWFzb246IHdyYXBSZWFzb24ocmVhc29uKQogICAgICAgIH0pOwogICAgICAgIHJldHVybiBjYW5jZWxDYXBhYmlsaXR5LnByb21pc2U7CiAgICAgIH0KICAgIH0sIHF1ZXVlaW5nU3RyYXRlZ3kpOwogIH0KICAjY3JlYXRlU3RyZWFtU2luayhkYXRhKSB7CiAgICBjb25zdCBzdHJlYW1JZCA9IGRhdGEuc3RyZWFtSWQsCiAgICAgIHNvdXJjZU5hbWUgPSB0aGlzLnNvdXJjZU5hbWUsCiAgICAgIHRhcmdldE5hbWUgPSBkYXRhLnNvdXJjZU5hbWUsCiAgICAgIGNvbU9iaiA9IHRoaXMuY29tT2JqOwogICAgY29uc3Qgc2VsZiA9IHRoaXMsCiAgICAgIGFjdGlvbiA9IHRoaXMuYWN0aW9uSGFuZGxlcltkYXRhLmFjdGlvbl07CiAgICBjb25zdCBzdHJlYW1TaW5rID0gewogICAgICBlbnF1ZXVlKGNodW5rLCBzaXplID0gMSwgdHJhbnNmZXJzKSB7CiAgICAgICAgaWYgKHRoaXMuaXNDYW5jZWxsZWQpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY29uc3QgbGFzdERlc2lyZWRTaXplID0gdGhpcy5kZXNpcmVkU2l6ZTsKICAgICAgICB0aGlzLmRlc2lyZWRTaXplIC09IHNpemU7CiAgICAgICAgaWYgKGxhc3REZXNpcmVkU2l6ZSA+IDAgJiYgdGhpcy5kZXNpcmVkU2l6ZSA8PSAwKSB7CiAgICAgICAgICB0aGlzLnNpbmtDYXBhYmlsaXR5ID0gUHJvbWlzZS53aXRoUmVzb2x2ZXJzKCk7CiAgICAgICAgICB0aGlzLnJlYWR5ID0gdGhpcy5zaW5rQ2FwYWJpbGl0eS5wcm9taXNlOwogICAgICAgIH0KICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2UoewogICAgICAgICAgc291cmNlTmFtZSwKICAgICAgICAgIHRhcmdldE5hbWUsCiAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuRU5RVUVVRSwKICAgICAgICAgIHN0cmVhbUlkLAogICAgICAgICAgY2h1bmsKICAgICAgICB9LCB0cmFuc2ZlcnMpOwogICAgICB9LAogICAgICBjbG9zZSgpIHsKICAgICAgICBpZiAodGhpcy5pc0NhbmNlbGxlZCkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0aGlzLmlzQ2FuY2VsbGVkID0gdHJ1ZTsKICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2UoewogICAgICAgICAgc291cmNlTmFtZSwKICAgICAgICAgIHRhcmdldE5hbWUsCiAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuQ0xPU0UsCiAgICAgICAgICBzdHJlYW1JZAogICAgICAgIH0pOwogICAgICAgIGRlbGV0ZSBzZWxmLnN0cmVhbVNpbmtzW3N0cmVhbUlkXTsKICAgICAgfSwKICAgICAgZXJyb3IocmVhc29uKSB7CiAgICAgICAgYXNzZXJ0KHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yLCAiZXJyb3IgbXVzdCBoYXZlIGEgdmFsaWQgcmVhc29uIik7CiAgICAgICAgaWYgKHRoaXMuaXNDYW5jZWxsZWQpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdGhpcy5pc0NhbmNlbGxlZCA9IHRydWU7CiAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHsKICAgICAgICAgIHNvdXJjZU5hbWUsCiAgICAgICAgICB0YXJnZXROYW1lLAogICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLkVSUk9SLAogICAgICAgICAgc3RyZWFtSWQsCiAgICAgICAgICByZWFzb246IHdyYXBSZWFzb24ocmVhc29uKQogICAgICAgIH0pOwogICAgICB9LAogICAgICBzaW5rQ2FwYWJpbGl0eTogUHJvbWlzZS53aXRoUmVzb2x2ZXJzKCksCiAgICAgIG9uUHVsbDogbnVsbCwKICAgICAgb25DYW5jZWw6IG51bGwsCiAgICAgIGlzQ2FuY2VsbGVkOiBmYWxzZSwKICAgICAgZGVzaXJlZFNpemU6IGRhdGEuZGVzaXJlZFNpemUsCiAgICAgIHJlYWR5OiBudWxsCiAgICB9OwogICAgc3RyZWFtU2luay5zaW5rQ2FwYWJpbGl0eS5yZXNvbHZlKCk7CiAgICBzdHJlYW1TaW5rLnJlYWR5ID0gc3RyZWFtU2luay5zaW5rQ2FwYWJpbGl0eS5wcm9taXNlOwogICAgdGhpcy5zdHJlYW1TaW5rc1tzdHJlYW1JZF0gPSBzdHJlYW1TaW5rOwogICAgUHJvbWlzZS50cnkoYWN0aW9uLCBkYXRhLmRhdGEsIHN0cmVhbVNpbmspLnRoZW4oZnVuY3Rpb24gKCkgewogICAgICBjb21PYmoucG9zdE1lc3NhZ2UoewogICAgICAgIHNvdXJjZU5hbWUsCiAgICAgICAgdGFyZ2V0TmFtZSwKICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuU1RBUlRfQ09NUExFVEUsCiAgICAgICAgc3RyZWFtSWQsCiAgICAgICAgc3VjY2VzczogdHJ1ZQogICAgICB9KTsKICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHsKICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHsKICAgICAgICBzb3VyY2VOYW1lLAogICAgICAgIHRhcmdldE5hbWUsCiAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLlNUQVJUX0NPTVBMRVRFLAogICAgICAgIHN0cmVhbUlkLAogICAgICAgIHJlYXNvbjogd3JhcFJlYXNvbihyZWFzb24pCiAgICAgIH0pOwogICAgfSk7CiAgfQogICNwcm9jZXNzU3RyZWFtTWVzc2FnZShkYXRhKSB7CiAgICBjb25zdCBzdHJlYW1JZCA9IGRhdGEuc3RyZWFtSWQsCiAgICAgIHNvdXJjZU5hbWUgPSB0aGlzLnNvdXJjZU5hbWUsCiAgICAgIHRhcmdldE5hbWUgPSBkYXRhLnNvdXJjZU5hbWUsCiAgICAgIGNvbU9iaiA9IHRoaXMuY29tT2JqOwogICAgY29uc3Qgc3RyZWFtQ29udHJvbGxlciA9IHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLAogICAgICBzdHJlYW1TaW5rID0gdGhpcy5zdHJlYW1TaW5rc1tzdHJlYW1JZF07CiAgICBzd2l0Y2ggKGRhdGEuc3RyZWFtKSB7CiAgICAgIGNhc2UgU3RyZWFtS2luZC5TVEFSVF9DT01QTEVURToKICAgICAgICBpZiAoZGF0YS5zdWNjZXNzKSB7CiAgICAgICAgICBzdHJlYW1Db250cm9sbGVyLnN0YXJ0Q2FsbC5yZXNvbHZlKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHN0cmVhbUNvbnRyb2xsZXIuc3RhcnRDYWxsLnJlamVjdCh3cmFwUmVhc29uKGRhdGEucmVhc29uKSk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0cmVhbUtpbmQuUFVMTF9DT01QTEVURToKICAgICAgICBpZiAoZGF0YS5zdWNjZXNzKSB7CiAgICAgICAgICBzdHJlYW1Db250cm9sbGVyLnB1bGxDYWxsLnJlc29sdmUoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc3RyZWFtQ29udHJvbGxlci5wdWxsQ2FsbC5yZWplY3Qod3JhcFJlYXNvbihkYXRhLnJlYXNvbikpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdHJlYW1LaW5kLlBVTEw6CiAgICAgICAgaWYgKCFzdHJlYW1TaW5rKSB7CiAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2UoewogICAgICAgICAgICBzb3VyY2VOYW1lLAogICAgICAgICAgICB0YXJnZXROYW1lLAogICAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuUFVMTF9DT01QTEVURSwKICAgICAgICAgICAgc3RyZWFtSWQsCiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUKICAgICAgICAgIH0pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmIChzdHJlYW1TaW5rLmRlc2lyZWRTaXplIDw9IDAgJiYgZGF0YS5kZXNpcmVkU2l6ZSA+IDApIHsKICAgICAgICAgIHN0cmVhbVNpbmsuc2lua0NhcGFiaWxpdHkucmVzb2x2ZSgpOwogICAgICAgIH0KICAgICAgICBzdHJlYW1TaW5rLmRlc2lyZWRTaXplID0gZGF0YS5kZXNpcmVkU2l6ZTsKICAgICAgICBQcm9taXNlLnRyeShzdHJlYW1TaW5rLm9uUHVsbCB8fCBvbkZuKS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgICAgIGNvbU9iai5wb3N0TWVzc2FnZSh7CiAgICAgICAgICAgIHNvdXJjZU5hbWUsCiAgICAgICAgICAgIHRhcmdldE5hbWUsCiAgICAgICAgICAgIHN0cmVhbTogU3RyZWFtS2luZC5QVUxMX0NPTVBMRVRFLAogICAgICAgICAgICBzdHJlYW1JZCwKICAgICAgICAgICAgc3VjY2VzczogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikgewogICAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHsKICAgICAgICAgICAgc291cmNlTmFtZSwKICAgICAgICAgICAgdGFyZ2V0TmFtZSwKICAgICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLlBVTExfQ09NUExFVEUsCiAgICAgICAgICAgIHN0cmVhbUlkLAogICAgICAgICAgICByZWFzb246IHdyYXBSZWFzb24ocmVhc29uKQogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU3RyZWFtS2luZC5FTlFVRVVFOgogICAgICAgIGFzc2VydChzdHJlYW1Db250cm9sbGVyLCAiZW5xdWV1ZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpOwogICAgICAgIGlmIChzdHJlYW1Db250cm9sbGVyLmlzQ2xvc2VkKSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgc3RyZWFtQ29udHJvbGxlci5jb250cm9sbGVyLmVucXVldWUoZGF0YS5jaHVuayk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU3RyZWFtS2luZC5DTE9TRToKICAgICAgICBhc3NlcnQoc3RyZWFtQ29udHJvbGxlciwgImNsb3NlIHNob3VsZCBoYXZlIHN0cmVhbSBjb250cm9sbGVyIik7CiAgICAgICAgaWYgKHN0cmVhbUNvbnRyb2xsZXIuaXNDbG9zZWQpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBzdHJlYW1Db250cm9sbGVyLmlzQ2xvc2VkID0gdHJ1ZTsKICAgICAgICBzdHJlYW1Db250cm9sbGVyLmNvbnRyb2xsZXIuY2xvc2UoKTsKICAgICAgICB0aGlzLiNkZWxldGVTdHJlYW1Db250cm9sbGVyKHN0cmVhbUNvbnRyb2xsZXIsIHN0cmVhbUlkKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdHJlYW1LaW5kLkVSUk9SOgogICAgICAgIGFzc2VydChzdHJlYW1Db250cm9sbGVyLCAiZXJyb3Igc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXIiKTsKICAgICAgICBzdHJlYW1Db250cm9sbGVyLmNvbnRyb2xsZXIuZXJyb3Iod3JhcFJlYXNvbihkYXRhLnJlYXNvbikpOwogICAgICAgIHRoaXMuI2RlbGV0ZVN0cmVhbUNvbnRyb2xsZXIoc3RyZWFtQ29udHJvbGxlciwgc3RyZWFtSWQpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0cmVhbUtpbmQuQ0FOQ0VMX0NPTVBMRVRFOgogICAgICAgIGlmIChkYXRhLnN1Y2Nlc3MpIHsKICAgICAgICAgIHN0cmVhbUNvbnRyb2xsZXIuY2FuY2VsQ2FsbC5yZXNvbHZlKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHN0cmVhbUNvbnRyb2xsZXIuY2FuY2VsQ2FsbC5yZWplY3Qod3JhcFJlYXNvbihkYXRhLnJlYXNvbikpOwogICAgICAgIH0KICAgICAgICB0aGlzLiNkZWxldGVTdHJlYW1Db250cm9sbGVyKHN0cmVhbUNvbnRyb2xsZXIsIHN0cmVhbUlkKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdHJlYW1LaW5kLkNBTkNFTDoKICAgICAgICBpZiAoIXN0cmVhbVNpbmspIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBjb25zdCBkYXRhUmVhc29uID0gd3JhcFJlYXNvbihkYXRhLnJlYXNvbik7CiAgICAgICAgUHJvbWlzZS50cnkoc3RyZWFtU2luay5vbkNhbmNlbCB8fCBvbkZuLCBkYXRhUmVhc29uKS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgICAgIGNvbU9iai5wb3N0TWVzc2FnZSh7CiAgICAgICAgICAgIHNvdXJjZU5hbWUsCiAgICAgICAgICAgIHRhcmdldE5hbWUsCiAgICAgICAgICAgIHN0cmVhbTogU3RyZWFtS2luZC5DQU5DRUxfQ09NUExFVEUsCiAgICAgICAgICAgIHN0cmVhbUlkLAogICAgICAgICAgICBzdWNjZXNzOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7CiAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2UoewogICAgICAgICAgICBzb3VyY2VOYW1lLAogICAgICAgICAgICB0YXJnZXROYW1lLAogICAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuQ0FOQ0VMX0NPTVBMRVRFLAogICAgICAgICAgICBzdHJlYW1JZCwKICAgICAgICAgICAgcmVhc29uOiB3cmFwUmVhc29uKHJlYXNvbikKICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICAgIHN0cmVhbVNpbmsuc2lua0NhcGFiaWxpdHkucmVqZWN0KGRhdGFSZWFzb24pOwogICAgICAgIHN0cmVhbVNpbmsuaXNDYW5jZWxsZWQgPSB0cnVlOwogICAgICAgIGRlbGV0ZSB0aGlzLnN0cmVhbVNpbmtzW3N0cmVhbUlkXTsKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgc3RyZWFtIGNhc2UiKTsKICAgIH0KICB9CiAgYXN5bmMgI2RlbGV0ZVN0cmVhbUNvbnRyb2xsZXIoc3RyZWFtQ29udHJvbGxlciwgc3RyZWFtSWQpIHsKICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbc3RyZWFtQ29udHJvbGxlci5zdGFydENhbGw/LnByb21pc2UsIHN0cmVhbUNvbnRyb2xsZXIucHVsbENhbGw/LnByb21pc2UsIHN0cmVhbUNvbnRyb2xsZXIuY2FuY2VsQ2FsbD8ucHJvbWlzZV0pOwogICAgZGVsZXRlIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdOwogIH0KICBkZXN0cm95KCkgewogICAgdGhpcy4jbWVzc2FnZUFDPy5hYm9ydCgpOwogICAgdGhpcy4jbWVzc2FnZUFDID0gbnVsbDsKICB9Cn0KCjsvLyAuL3NyYy9jb3JlL3dyaXRlci5qcwoKCgoKCgoKYXN5bmMgZnVuY3Rpb24gd3JpdGVPYmplY3QocmVmLCBvYmosIGJ1ZmZlciwgewogIGVuY3J5cHQgPSBudWxsCn0pIHsKICBjb25zdCB0cmFuc2Zvcm0gPSBlbmNyeXB0Py5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0ocmVmLm51bSwgcmVmLmdlbik7CiAgYnVmZmVyLnB1c2goYCR7cmVmLm51bX0gJHtyZWYuZ2VufSBvYmpcbmApOwogIGlmIChvYmogaW5zdGFuY2VvZiBEaWN0KSB7CiAgICBhd2FpdCB3cml0ZURpY3Qob2JqLCBidWZmZXIsIHRyYW5zZm9ybSk7CiAgfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBCYXNlU3RyZWFtKSB7CiAgICBhd2FpdCB3cml0ZVN0cmVhbShvYmosIGJ1ZmZlciwgdHJhbnNmb3JtKTsKICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob2JqKSB8fCBBcnJheUJ1ZmZlci5pc1ZpZXcob2JqKSkgewogICAgYXdhaXQgd3JpdGVBcnJheShvYmosIGJ1ZmZlciwgdHJhbnNmb3JtKTsKICB9CiAgYnVmZmVyLnB1c2goIlxuZW5kb2JqXG4iKTsKfQphc3luYyBmdW5jdGlvbiB3cml0ZURpY3QoZGljdCwgYnVmZmVyLCB0cmFuc2Zvcm0pIHsKICBidWZmZXIucHVzaCgiPDwiKTsKICBmb3IgKGNvbnN0IGtleSBvZiBkaWN0LmdldEtleXMoKSkgewogICAgYnVmZmVyLnB1c2goYCAvJHtlc2NhcGVQREZOYW1lKGtleSl9IGApOwogICAgYXdhaXQgd3JpdGVWYWx1ZShkaWN0LmdldFJhdyhrZXkpLCBidWZmZXIsIHRyYW5zZm9ybSk7CiAgfQogIGJ1ZmZlci5wdXNoKCI+PiIpOwp9CmFzeW5jIGZ1bmN0aW9uIHdyaXRlU3RyZWFtKHN0cmVhbSwgYnVmZmVyLCB0cmFuc2Zvcm0pIHsKICBsZXQgYnl0ZXMgPSBzdHJlYW0uZ2V0Qnl0ZXMoKTsKICBjb25zdCB7CiAgICBkaWN0CiAgfSA9IHN0cmVhbTsKICBjb25zdCBbZmlsdGVyLCBwYXJhbXNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW2RpY3QuZ2V0QXN5bmMoIkZpbHRlciIpLCBkaWN0LmdldEFzeW5jKCJEZWNvZGVQYXJtcyIpXSk7CiAgY29uc3QgZmlsdGVyWmVybyA9IEFycmF5LmlzQXJyYXkoZmlsdGVyKSA/IGF3YWl0IGRpY3QueHJlZi5mZXRjaElmUmVmQXN5bmMoZmlsdGVyWzBdKSA6IGZpbHRlcjsKICBjb25zdCBpc0ZpbHRlclplcm9GbGF0ZURlY29kZSA9IGlzTmFtZShmaWx0ZXJaZXJvLCAiRmxhdGVEZWNvZGUiKTsKICBjb25zdCBNSU5fTEVOR1RIX0ZPUl9DT01QUkVTU0lORyA9IDI1NjsKICBpZiAoYnl0ZXMubGVuZ3RoID49IE1JTl9MRU5HVEhfRk9SX0NPTVBSRVNTSU5HIHx8IGlzRmlsdGVyWmVyb0ZsYXRlRGVjb2RlKSB7CiAgICB0cnkgewogICAgICBjb25zdCBjcyA9IG5ldyBDb21wcmVzc2lvblN0cmVhbSgiZGVmbGF0ZSIpOwogICAgICBjb25zdCB3cml0ZXIgPSBjcy53cml0YWJsZS5nZXRXcml0ZXIoKTsKICAgICAgYXdhaXQgd3JpdGVyLnJlYWR5OwogICAgICB3cml0ZXIud3JpdGUoYnl0ZXMpLnRoZW4oYXN5bmMgKCkgPT4gewogICAgICAgIGF3YWl0IHdyaXRlci5yZWFkeTsKICAgICAgICBhd2FpdCB3cml0ZXIuY2xvc2UoKTsKICAgICAgfSkuY2F0Y2goKCkgPT4ge30pOwogICAgICBjb25zdCBidWYgPSBhd2FpdCBuZXcgUmVzcG9uc2UoY3MucmVhZGFibGUpLmFycmF5QnVmZmVyKCk7CiAgICAgIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnVmKTsKICAgICAgbGV0IG5ld0ZpbHRlciwgbmV3UGFyYW1zOwogICAgICBpZiAoIWZpbHRlcikgewogICAgICAgIG5ld0ZpbHRlciA9IE5hbWUuZ2V0KCJGbGF0ZURlY29kZSIpOwogICAgICB9IGVsc2UgaWYgKCFpc0ZpbHRlclplcm9GbGF0ZURlY29kZSkgewogICAgICAgIG5ld0ZpbHRlciA9IEFycmF5LmlzQXJyYXkoZmlsdGVyKSA/IFtOYW1lLmdldCgiRmxhdGVEZWNvZGUiKSwgLi4uZmlsdGVyXSA6IFtOYW1lLmdldCgiRmxhdGVEZWNvZGUiKSwgZmlsdGVyXTsKICAgICAgICBpZiAocGFyYW1zKSB7CiAgICAgICAgICBuZXdQYXJhbXMgPSBBcnJheS5pc0FycmF5KHBhcmFtcykgPyBbbnVsbCwgLi4ucGFyYW1zXSA6IFtudWxsLCBwYXJhbXNdOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAobmV3RmlsdGVyKSB7CiAgICAgICAgZGljdC5zZXQoIkZpbHRlciIsIG5ld0ZpbHRlcik7CiAgICAgIH0KICAgICAgaWYgKG5ld1BhcmFtcykgewogICAgICAgIGRpY3Quc2V0KCJEZWNvZGVQYXJtcyIsIG5ld1BhcmFtcyk7CiAgICAgIH0KICAgIH0gY2F0Y2ggKGV4KSB7CiAgICAgIGluZm8oYHdyaXRlU3RyZWFtIC0gY2Fubm90IGNvbXByZXNzIGRhdGE6ICIke2V4fSIuYCk7CiAgICB9CiAgfQogIGxldCBzdHJpbmcgPSBieXRlc1RvU3RyaW5nKGJ5dGVzKTsKICBpZiAodHJhbnNmb3JtKSB7CiAgICBzdHJpbmcgPSB0cmFuc2Zvcm0uZW5jcnlwdFN0cmluZyhzdHJpbmcpOwogIH0KICBkaWN0LnNldCgiTGVuZ3RoIiwgc3RyaW5nLmxlbmd0aCk7CiAgYXdhaXQgd3JpdGVEaWN0KGRpY3QsIGJ1ZmZlciwgdHJhbnNmb3JtKTsKICBidWZmZXIucHVzaCgiIHN0cmVhbVxuIiwgc3RyaW5nLCAiXG5lbmRzdHJlYW0iKTsKfQphc3luYyBmdW5jdGlvbiB3cml0ZUFycmF5KGFycmF5LCBidWZmZXIsIHRyYW5zZm9ybSkgewogIGJ1ZmZlci5wdXNoKCJbIik7CiAgbGV0IGZpcnN0ID0gdHJ1ZTsKICBmb3IgKGNvbnN0IHZhbCBvZiBhcnJheSkgewogICAgaWYgKCFmaXJzdCkgewogICAgICBidWZmZXIucHVzaCgiICIpOwogICAgfSBlbHNlIHsKICAgICAgZmlyc3QgPSBmYWxzZTsKICAgIH0KICAgIGF3YWl0IHdyaXRlVmFsdWUodmFsLCBidWZmZXIsIHRyYW5zZm9ybSk7CiAgfQogIGJ1ZmZlci5wdXNoKCJdIik7Cn0KYXN5bmMgZnVuY3Rpb24gd3JpdGVWYWx1ZSh2YWx1ZSwgYnVmZmVyLCB0cmFuc2Zvcm0pIHsKICBpZiAodmFsdWUgaW5zdGFuY2VvZiBOYW1lKSB7CiAgICBidWZmZXIucHVzaChgLyR7ZXNjYXBlUERGTmFtZSh2YWx1ZS5uYW1lKX1gKTsKICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgUmVmKSB7CiAgICBidWZmZXIucHVzaChgJHt2YWx1ZS5udW19ICR7dmFsdWUuZ2VufSBSYCk7CiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSB8fCBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsdWUpKSB7CiAgICBhd2FpdCB3cml0ZUFycmF5KHZhbHVlLCBidWZmZXIsIHRyYW5zZm9ybSk7CiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciKSB7CiAgICBpZiAodHJhbnNmb3JtKSB7CiAgICAgIHZhbHVlID0gdHJhbnNmb3JtLmVuY3J5cHRTdHJpbmcodmFsdWUpOwogICAgfQogICAgYnVmZmVyLnB1c2goYCgke2VzY2FwZVN0cmluZyh2YWx1ZSl9KWApOwogIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAibnVtYmVyIikgewogICAgYnVmZmVyLnB1c2gobnVtYmVyVG9TdHJpbmcodmFsdWUpKTsKICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gImJvb2xlYW4iKSB7CiAgICBidWZmZXIucHVzaCh2YWx1ZS50b1N0cmluZygpKTsKICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGljdCkgewogICAgYXdhaXQgd3JpdGVEaWN0KHZhbHVlLCBidWZmZXIsIHRyYW5zZm9ybSk7CiAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pIHsKICAgIGF3YWl0IHdyaXRlU3RyZWFtKHZhbHVlLCBidWZmZXIsIHRyYW5zZm9ybSk7CiAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gbnVsbCkgewogICAgYnVmZmVyLnB1c2goIm51bGwiKTsKICB9IGVsc2UgewogICAgd2FybihgVW5oYW5kbGVkIHZhbHVlIGluIHdyaXRlcjogJHt0eXBlb2YgdmFsdWV9LCBwbGVhc2UgZmlsZSBhIGJ1Zy5gKTsKICB9Cn0KZnVuY3Rpb24gd3JpdGVJbnQobnVtYmVyLCBzaXplLCBvZmZzZXQsIGJ1ZmZlcikgewogIGZvciAobGV0IGkgPSBzaXplICsgb2Zmc2V0IC0gMTsgaSA+IG9mZnNldCAtIDE7IGktLSkgewogICAgYnVmZmVyW2ldID0gbnVtYmVyICYgMHhmZjsKICAgIG51bWJlciA+Pj0gODsKICB9CiAgcmV0dXJuIG9mZnNldCArIHNpemU7Cn0KZnVuY3Rpb24gd3JpdGVTdHJpbmcoc3RyaW5nLCBvZmZzZXQsIGJ1ZmZlcikgewogIGNvbnN0IGlpID0gc3RyaW5nLmxlbmd0aDsKICBmb3IgKGxldCBpID0gMDsgaSA8IGlpOyBpKyspIHsKICAgIGJ1ZmZlcltvZmZzZXQgKyBpXSA9IHN0cmluZy5jaGFyQ29kZUF0KGkpICYgMHhmZjsKICB9CiAgcmV0dXJuIG9mZnNldCArIGlpOwp9CmZ1bmN0aW9uIGNvbXB1dGVNRDUoZmlsZXNpemUsIHhyZWZJbmZvKSB7CiAgY29uc3QgdGltZSA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApOwogIGNvbnN0IGZpbGVuYW1lID0geHJlZkluZm8uZmlsZW5hbWUgfHwgIiI7CiAgY29uc3QgbWQ1QnVmZmVyID0gW3RpbWUudG9TdHJpbmcoKSwgZmlsZW5hbWUsIGZpbGVzaXplLnRvU3RyaW5nKCksIC4uLk9iamVjdC52YWx1ZXMoeHJlZkluZm8uaW5mbyldOwogIGNvbnN0IG1kNUJ1ZmZlckxlbiA9IE1hdGguc3VtUHJlY2lzZShtZDVCdWZmZXIubWFwKHN0ciA9PiBzdHIubGVuZ3RoKSk7CiAgY29uc3QgYXJyYXkgPSBuZXcgVWludDhBcnJheShtZDVCdWZmZXJMZW4pOwogIGxldCBvZmZzZXQgPSAwOwogIGZvciAoY29uc3Qgc3RyIG9mIG1kNUJ1ZmZlcikgewogICAgb2Zmc2V0ID0gd3JpdGVTdHJpbmcoc3RyLCBvZmZzZXQsIGFycmF5KTsKICB9CiAgcmV0dXJuIGJ5dGVzVG9TdHJpbmcoY2FsY3VsYXRlTUQ1KGFycmF5LCAwLCBhcnJheS5sZW5ndGgpKTsKfQpmdW5jdGlvbiB3cml0ZVhGQURhdGFGb3JBY3JvZm9ybShzdHIsIGNoYW5nZXMpIHsKICBjb25zdCB4bWwgPSBuZXcgU2ltcGxlWE1MUGFyc2VyKHsKICAgIGhhc0F0dHJpYnV0ZXM6IHRydWUKICB9KS5wYXJzZUZyb21TdHJpbmcoc3RyKTsKICBmb3IgKGNvbnN0IHsKICAgIHhmYQogIH0gb2YgY2hhbmdlcykgewogICAgaWYgKCF4ZmEpIHsKICAgICAgY29udGludWU7CiAgICB9CiAgICBjb25zdCB7CiAgICAgIHBhdGgsCiAgICAgIHZhbHVlCiAgICB9ID0geGZhOwogICAgaWYgKCFwYXRoKSB7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgY29uc3Qgbm9kZVBhdGggPSBwYXJzZVhGQVBhdGgocGF0aCk7CiAgICBsZXQgbm9kZSA9IHhtbC5kb2N1bWVudEVsZW1lbnQuc2VhcmNoTm9kZShub2RlUGF0aCwgMCk7CiAgICBpZiAoIW5vZGUgJiYgbm9kZVBhdGgubGVuZ3RoID4gMSkgewogICAgICBub2RlID0geG1sLmRvY3VtZW50RWxlbWVudC5zZWFyY2hOb2RlKFtub2RlUGF0aC5hdCgtMSldLCAwKTsKICAgIH0KICAgIGlmIChub2RlKSB7CiAgICAgIG5vZGUuY2hpbGROb2RlcyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKHZhbCA9PiBuZXcgU2ltcGxlRE9NTm9kZSgidmFsdWUiLCB2YWwpKSA6IFtuZXcgU2ltcGxlRE9NTm9kZSgiI3RleHQiLCB2YWx1ZSldOwogICAgfSBlbHNlIHsKICAgICAgd2FybihgTm9kZSBub3QgZm91bmQgZm9yIHBhdGg6ICR7cGF0aH1gKTsKICAgIH0KICB9CiAgY29uc3QgYnVmZmVyID0gW107CiAgeG1sLmRvY3VtZW50RWxlbWVudC5kdW1wKGJ1ZmZlcik7CiAgcmV0dXJuIGJ1ZmZlci5qb2luKCIiKTsKfQphc3luYyBmdW5jdGlvbiB1cGRhdGVBY3JvZm9ybSh7CiAgeHJlZiwKICBhY3JvRm9ybSwKICBhY3JvRm9ybVJlZiwKICBoYXNYZmEsCiAgaGFzWGZhRGF0YXNldHNFbnRyeSwKICB4ZmFEYXRhc2V0c1JlZiwKICBuZWVkQXBwZWFyYW5jZXMsCiAgY2hhbmdlcwp9KSB7CiAgaWYgKGhhc1hmYSAmJiAhaGFzWGZhRGF0YXNldHNFbnRyeSAmJiAheGZhRGF0YXNldHNSZWYpIHsKICAgIHdhcm4oIlhGQSAtIENhbm5vdCBzYXZlIGl0Iik7CiAgfQogIGlmICghbmVlZEFwcGVhcmFuY2VzICYmICghaGFzWGZhIHx8ICF4ZmFEYXRhc2V0c1JlZiB8fCBoYXNYZmFEYXRhc2V0c0VudHJ5KSkgewogICAgcmV0dXJuOwogIH0KICBjb25zdCBkaWN0ID0gYWNyb0Zvcm0uY2xvbmUoKTsKICBpZiAoaGFzWGZhICYmICFoYXNYZmFEYXRhc2V0c0VudHJ5KSB7CiAgICBjb25zdCBuZXdYZmEgPSBhY3JvRm9ybS5nZXQoIlhGQSIpLnNsaWNlKCk7CiAgICBuZXdYZmEuc3BsaWNlKDIsIDAsICJkYXRhc2V0cyIpOwogICAgbmV3WGZhLnNwbGljZSgzLCAwLCB4ZmFEYXRhc2V0c1JlZik7CiAgICBkaWN0LnNldCgiWEZBIiwgbmV3WGZhKTsKICB9CiAgaWYgKG5lZWRBcHBlYXJhbmNlcykgewogICAgZGljdC5zZXQoIk5lZWRBcHBlYXJhbmNlcyIsIHRydWUpOwogIH0KICBjaGFuZ2VzLnB1dChhY3JvRm9ybVJlZiwgewogICAgZGF0YTogZGljdAogIH0pOwp9CmZ1bmN0aW9uIHVwZGF0ZVhGQSh7CiAgeGZhRGF0YSwKICB4ZmFEYXRhc2V0c1JlZiwKICBjaGFuZ2VzLAogIHhyZWYKfSkgewogIGlmICh4ZmFEYXRhID09PSBudWxsKSB7CiAgICBjb25zdCBkYXRhc2V0cyA9IHhyZWYuZmV0Y2hJZlJlZih4ZmFEYXRhc2V0c1JlZik7CiAgICB4ZmFEYXRhID0gd3JpdGVYRkFEYXRhRm9yQWNyb2Zvcm0oZGF0YXNldHMuZ2V0U3RyaW5nKCksIGNoYW5nZXMpOwogIH0KICBjb25zdCB4ZmFEYXRhU3RyZWFtID0gbmV3IFN0cmluZ1N0cmVhbSh4ZmFEYXRhKTsKICB4ZmFEYXRhU3RyZWFtLmRpY3QgPSBuZXcgRGljdCh4cmVmKTsKICB4ZmFEYXRhU3RyZWFtLmRpY3Quc2V0KCJUeXBlIiwgTmFtZS5nZXQoIkVtYmVkZGVkRmlsZSIpKTsKICBjaGFuZ2VzLnB1dCh4ZmFEYXRhc2V0c1JlZiwgewogICAgZGF0YTogeGZhRGF0YVN0cmVhbQogIH0pOwp9CmFzeW5jIGZ1bmN0aW9uIGdldFhSZWZUYWJsZSh4cmVmSW5mbywgYmFzZU9mZnNldCwgbmV3UmVmcywgbmV3WHJlZiwgYnVmZmVyKSB7CiAgYnVmZmVyLnB1c2goInhyZWZcbiIpOwogIGNvbnN0IGluZGV4ZXMgPSBnZXRJbmRleGVzKG5ld1JlZnMpOwogIGxldCBpbmRleGVzUG9zaXRpb24gPSAwOwogIGZvciAoY29uc3QgewogICAgcmVmLAogICAgZGF0YQogIH0gb2YgbmV3UmVmcykgewogICAgaWYgKHJlZi5udW0gPT09IGluZGV4ZXNbaW5kZXhlc1Bvc2l0aW9uXSkgewogICAgICBidWZmZXIucHVzaChgJHtpbmRleGVzW2luZGV4ZXNQb3NpdGlvbl19ICR7aW5kZXhlc1tpbmRleGVzUG9zaXRpb24gKyAxXX1cbmApOwogICAgICBpbmRleGVzUG9zaXRpb24gKz0gMjsKICAgIH0KICAgIGlmIChkYXRhICE9PSBudWxsKSB7CiAgICAgIGJ1ZmZlci5wdXNoKGAke2Jhc2VPZmZzZXQudG9TdHJpbmcoKS5wYWRTdGFydCgxMCwgIjAiKX0gJHtNYXRoLm1pbihyZWYuZ2VuLCAweGZmZmYpLnRvU3RyaW5nKCkucGFkU3RhcnQoNSwgIjAiKX0gblxyXG5gKTsKICAgICAgYmFzZU9mZnNldCArPSBkYXRhLmxlbmd0aDsKICAgIH0gZWxzZSB7CiAgICAgIGJ1ZmZlci5wdXNoKGAwMDAwMDAwMDAwICR7TWF0aC5taW4ocmVmLmdlbiArIDEsIDB4ZmZmZikudG9TdHJpbmcoKS5wYWRTdGFydCg1LCAiMCIpfSBmXHJcbmApOwogICAgfQogIH0KICBjb21wdXRlSURzKGJhc2VPZmZzZXQsIHhyZWZJbmZvLCBuZXdYcmVmKTsKICBidWZmZXIucHVzaCgidHJhaWxlclxuIik7CiAgYXdhaXQgd3JpdGVEaWN0KG5ld1hyZWYsIGJ1ZmZlcik7CiAgYnVmZmVyLnB1c2goIlxuc3RhcnR4cmVmXG4iLCBiYXNlT2Zmc2V0LnRvU3RyaW5nKCksICJcbiUlRU9GXG4iKTsKfQpmdW5jdGlvbiBnZXRJbmRleGVzKG5ld1JlZnMpIHsKICBjb25zdCBpbmRleGVzID0gW107CiAgZm9yIChjb25zdCB7CiAgICByZWYKICB9IG9mIG5ld1JlZnMpIHsKICAgIGlmIChyZWYubnVtID09PSBpbmRleGVzLmF0KC0yKSArIGluZGV4ZXMuYXQoLTEpKSB7CiAgICAgIGluZGV4ZXNbaW5kZXhlcy5sZW5ndGggLSAxXSArPSAxOwogICAgfSBlbHNlIHsKICAgICAgaW5kZXhlcy5wdXNoKHJlZi5udW0sIDEpOwogICAgfQogIH0KICByZXR1cm4gaW5kZXhlczsKfQphc3luYyBmdW5jdGlvbiBnZXRYUmVmU3RyZWFtVGFibGUoeHJlZkluZm8sIGJhc2VPZmZzZXQsIG5ld1JlZnMsIG5ld1hyZWYsIGJ1ZmZlcikgewogIGNvbnN0IHhyZWZUYWJsZURhdGEgPSBbXTsKICBsZXQgbWF4T2Zmc2V0ID0gMDsKICBsZXQgbWF4R2VuID0gMDsKICBmb3IgKGNvbnN0IHsKICAgIHJlZiwKICAgIGRhdGEKICB9IG9mIG5ld1JlZnMpIHsKICAgIGxldCBnZW47CiAgICBtYXhPZmZzZXQgPSBNYXRoLm1heChtYXhPZmZzZXQsIGJhc2VPZmZzZXQpOwogICAgaWYgKGRhdGEgIT09IG51bGwpIHsKICAgICAgZ2VuID0gTWF0aC5taW4ocmVmLmdlbiwgMHhmZmZmKTsKICAgICAgeHJlZlRhYmxlRGF0YS5wdXNoKFsxLCBiYXNlT2Zmc2V0LCBnZW5dKTsKICAgICAgYmFzZU9mZnNldCArPSBkYXRhLmxlbmd0aDsKICAgIH0gZWxzZSB7CiAgICAgIGdlbiA9IE1hdGgubWluKHJlZi5nZW4gKyAxLCAweGZmZmYpOwogICAgICB4cmVmVGFibGVEYXRhLnB1c2goWzAsIDAsIGdlbl0pOwogICAgfQogICAgbWF4R2VuID0gTWF0aC5tYXgobWF4R2VuLCBnZW4pOwogIH0KICBuZXdYcmVmLnNldCgiSW5kZXgiLCBnZXRJbmRleGVzKG5ld1JlZnMpKTsKICBjb25zdCBvZmZzZXRTaXplID0gZ2V0U2l6ZUluQnl0ZXMobWF4T2Zmc2V0KTsKICBjb25zdCBtYXhHZW5TaXplID0gZ2V0U2l6ZUluQnl0ZXMobWF4R2VuKTsKICBjb25zdCBzaXplcyA9IFsxLCBvZmZzZXRTaXplLCBtYXhHZW5TaXplXTsKICBuZXdYcmVmLnNldCgiVyIsIHNpemVzKTsKICBjb21wdXRlSURzKGJhc2VPZmZzZXQsIHhyZWZJbmZvLCBuZXdYcmVmKTsKICBjb25zdCBzdHJ1Y3RTaXplID0gTWF0aC5zdW1QcmVjaXNlKHNpemVzKTsKICBjb25zdCBkYXRhID0gbmV3IFVpbnQ4QXJyYXkoc3RydWN0U2l6ZSAqIHhyZWZUYWJsZURhdGEubGVuZ3RoKTsKICBjb25zdCBzdHJlYW0gPSBuZXcgU3RyZWFtKGRhdGEpOwogIHN0cmVhbS5kaWN0ID0gbmV3WHJlZjsKICBsZXQgb2Zmc2V0ID0gMDsKICBmb3IgKGNvbnN0IFt0eXBlLCBvYmpPZmZzZXQsIGdlbl0gb2YgeHJlZlRhYmxlRGF0YSkgewogICAgb2Zmc2V0ID0gd3JpdGVJbnQodHlwZSwgc2l6ZXNbMF0sIG9mZnNldCwgZGF0YSk7CiAgICBvZmZzZXQgPSB3cml0ZUludChvYmpPZmZzZXQsIHNpemVzWzFdLCBvZmZzZXQsIGRhdGEpOwogICAgb2Zmc2V0ID0gd3JpdGVJbnQoZ2VuLCBzaXplc1syXSwgb2Zmc2V0LCBkYXRhKTsKICB9CiAgYXdhaXQgd3JpdGVPYmplY3QoeHJlZkluZm8ubmV3UmVmLCBzdHJlYW0sIGJ1ZmZlciwge30pOwogIGJ1ZmZlci5wdXNoKCJzdGFydHhyZWZcbiIsIGJhc2VPZmZzZXQudG9TdHJpbmcoKSwgIlxuJSVFT0ZcbiIpOwp9CmZ1bmN0aW9uIGNvbXB1dGVJRHMoYmFzZU9mZnNldCwgeHJlZkluZm8sIG5ld1hyZWYpIHsKICBpZiAoQXJyYXkuaXNBcnJheSh4cmVmSW5mby5maWxlSWRzKSAmJiB4cmVmSW5mby5maWxlSWRzLmxlbmd0aCA+IDApIHsKICAgIGNvbnN0IG1kNSA9IGNvbXB1dGVNRDUoYmFzZU9mZnNldCwgeHJlZkluZm8pOwogICAgbmV3WHJlZi5zZXQoIklEIiwgW3hyZWZJbmZvLmZpbGVJZHNbMF0sIG1kNV0pOwogIH0KfQpmdW5jdGlvbiBnZXRUcmFpbGVyRGljdCh4cmVmSW5mbywgY2hhbmdlcywgdXNlWHJlZlN0cmVhbSkgewogIGNvbnN0IG5ld1hyZWYgPSBuZXcgRGljdChudWxsKTsKICBuZXdYcmVmLnNldCgiUHJldiIsIHhyZWZJbmZvLnN0YXJ0WFJlZik7CiAgY29uc3QgcmVmRm9yWHJlZlRhYmxlID0geHJlZkluZm8ubmV3UmVmOwogIGlmICh1c2VYcmVmU3RyZWFtKSB7CiAgICBjaGFuZ2VzLnB1dChyZWZGb3JYcmVmVGFibGUsIHsKICAgICAgZGF0YTogIiIKICAgIH0pOwogICAgbmV3WHJlZi5zZXQoIlNpemUiLCByZWZGb3JYcmVmVGFibGUubnVtICsgMSk7CiAgICBuZXdYcmVmLnNldCgiVHlwZSIsIE5hbWUuZ2V0KCJYUmVmIikpOwogIH0gZWxzZSB7CiAgICBuZXdYcmVmLnNldCgiU2l6ZSIsIHJlZkZvclhyZWZUYWJsZS5udW0pOwogIH0KICBpZiAoeHJlZkluZm8ucm9vdFJlZiAhPT0gbnVsbCkgewogICAgbmV3WHJlZi5zZXQoIlJvb3QiLCB4cmVmSW5mby5yb290UmVmKTsKICB9CiAgaWYgKHhyZWZJbmZvLmluZm9SZWYgIT09IG51bGwpIHsKICAgIG5ld1hyZWYuc2V0KCJJbmZvIiwgeHJlZkluZm8uaW5mb1JlZik7CiAgfQogIGlmICh4cmVmSW5mby5lbmNyeXB0UmVmICE9PSBudWxsKSB7CiAgICBuZXdYcmVmLnNldCgiRW5jcnlwdCIsIHhyZWZJbmZvLmVuY3J5cHRSZWYpOwogIH0KICByZXR1cm4gbmV3WHJlZjsKfQphc3luYyBmdW5jdGlvbiB3cml0ZUNoYW5nZXMoY2hhbmdlcywgeHJlZiwgYnVmZmVyID0gW10pIHsKICBjb25zdCBuZXdSZWZzID0gW107CiAgZm9yIChjb25zdCBbcmVmLCB7CiAgICBkYXRhCiAgfV0gb2YgY2hhbmdlcy5pdGVtcygpKSB7CiAgICBpZiAoZGF0YSA9PT0gbnVsbCB8fCB0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIpIHsKICAgICAgbmV3UmVmcy5wdXNoKHsKICAgICAgICByZWYsCiAgICAgICAgZGF0YQogICAgICB9KTsKICAgICAgY29udGludWU7CiAgICB9CiAgICBhd2FpdCB3cml0ZU9iamVjdChyZWYsIGRhdGEsIGJ1ZmZlciwgeHJlZik7CiAgICBuZXdSZWZzLnB1c2goewogICAgICByZWYsCiAgICAgIGRhdGE6IGJ1ZmZlci5qb2luKCIiKQogICAgfSk7CiAgICBidWZmZXIubGVuZ3RoID0gMDsKICB9CiAgcmV0dXJuIG5ld1JlZnMuc29ydCgoYSwgYikgPT4gYS5yZWYubnVtIC0gYi5yZWYubnVtKTsKfQphc3luYyBmdW5jdGlvbiBpbmNyZW1lbnRhbFVwZGF0ZSh7CiAgb3JpZ2luYWxEYXRhLAogIHhyZWZJbmZvLAogIGNoYW5nZXMsCiAgeHJlZiA9IG51bGwsCiAgaGFzWGZhID0gZmFsc2UsCiAgeGZhRGF0YXNldHNSZWYgPSBudWxsLAogIGhhc1hmYURhdGFzZXRzRW50cnkgPSBmYWxzZSwKICBuZWVkQXBwZWFyYW5jZXMsCiAgYWNyb0Zvcm1SZWYgPSBudWxsLAogIGFjcm9Gb3JtID0gbnVsbCwKICB4ZmFEYXRhID0gbnVsbCwKICB1c2VYcmVmU3RyZWFtID0gZmFsc2UKfSkgewogIGF3YWl0IHVwZGF0ZUFjcm9mb3JtKHsKICAgIHhyZWYsCiAgICBhY3JvRm9ybSwKICAgIGFjcm9Gb3JtUmVmLAogICAgaGFzWGZhLAogICAgaGFzWGZhRGF0YXNldHNFbnRyeSwKICAgIHhmYURhdGFzZXRzUmVmLAogICAgbmVlZEFwcGVhcmFuY2VzLAogICAgY2hhbmdlcwogIH0pOwogIGlmIChoYXNYZmEpIHsKICAgIHVwZGF0ZVhGQSh7CiAgICAgIHhmYURhdGEsCiAgICAgIHhmYURhdGFzZXRzUmVmLAogICAgICBjaGFuZ2VzLAogICAgICB4cmVmCiAgICB9KTsKICB9CiAgY29uc3QgbmV3WHJlZiA9IGdldFRyYWlsZXJEaWN0KHhyZWZJbmZvLCBjaGFuZ2VzLCB1c2VYcmVmU3RyZWFtKTsKICBjb25zdCBidWZmZXIgPSBbXTsKICBjb25zdCBuZXdSZWZzID0gYXdhaXQgd3JpdGVDaGFuZ2VzKGNoYW5nZXMsIHhyZWYsIGJ1ZmZlcik7CiAgbGV0IGJhc2VPZmZzZXQgPSBvcmlnaW5hbERhdGEubGVuZ3RoOwogIGNvbnN0IGxhc3RCeXRlID0gb3JpZ2luYWxEYXRhLmF0KC0xKTsKICBpZiAobGFzdEJ5dGUgIT09IDB4MGEgJiYgbGFzdEJ5dGUgIT09IDB4MGQpIHsKICAgIGJ1ZmZlci5wdXNoKCJcbiIpOwogICAgYmFzZU9mZnNldCArPSAxOwogIH0KICBmb3IgKGNvbnN0IHsKICAgIGRhdGEKICB9IG9mIG5ld1JlZnMpIHsKICAgIGlmIChkYXRhICE9PSBudWxsKSB7CiAgICAgIGJ1ZmZlci5wdXNoKGRhdGEpOwogICAgfQogIH0KICBhd2FpdCAodXNlWHJlZlN0cmVhbSA/IGdldFhSZWZTdHJlYW1UYWJsZSh4cmVmSW5mbywgYmFzZU9mZnNldCwgbmV3UmVmcywgbmV3WHJlZiwgYnVmZmVyKSA6IGdldFhSZWZUYWJsZSh4cmVmSW5mbywgYmFzZU9mZnNldCwgbmV3UmVmcywgbmV3WHJlZiwgYnVmZmVyKSk7CiAgY29uc3QgdG90YWxMZW5ndGggPSBvcmlnaW5hbERhdGEubGVuZ3RoICsgTWF0aC5zdW1QcmVjaXNlKGJ1ZmZlci5tYXAoc3RyID0+IHN0ci5sZW5ndGgpKTsKICBjb25zdCBhcnJheSA9IG5ldyBVaW50OEFycmF5KHRvdGFsTGVuZ3RoKTsKICBhcnJheS5zZXQob3JpZ2luYWxEYXRhKTsKICBsZXQgb2Zmc2V0ID0gb3JpZ2luYWxEYXRhLmxlbmd0aDsKICBmb3IgKGNvbnN0IHN0ciBvZiBidWZmZXIpIHsKICAgIG9mZnNldCA9IHdyaXRlU3RyaW5nKHN0ciwgb2Zmc2V0LCBhcnJheSk7CiAgfQogIHJldHVybiBhcnJheTsKfQoKOy8vIC4vc3JjL2NvcmUvd29ya2VyX3N0cmVhbS5qcwoKY2xhc3MgUERGV29ya2VyU3RyZWFtIHsKICBjb25zdHJ1Y3Rvcihtc2dIYW5kbGVyKSB7CiAgICB0aGlzLl9tc2dIYW5kbGVyID0gbXNnSGFuZGxlcjsKICAgIHRoaXMuX2NvbnRlbnRMZW5ndGggPSBudWxsOwogICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIgPSBudWxsOwogICAgdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycyA9IFtdOwogIH0KICBnZXRGdWxsUmVhZGVyKCkgewogICAgYXNzZXJ0KCF0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciwgIlBERldvcmtlclN0cmVhbS5nZXRGdWxsUmVhZGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlLiIpOwogICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIgPSBuZXcgUERGV29ya2VyU3RyZWFtUmVhZGVyKHRoaXMuX21zZ0hhbmRsZXIpOwogICAgcmV0dXJuIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyOwogIH0KICBnZXRSYW5nZVJlYWRlcihiZWdpbiwgZW5kKSB7CiAgICBjb25zdCByZWFkZXIgPSBuZXcgUERGV29ya2VyU3RyZWFtUmFuZ2VSZWFkZXIoYmVnaW4sIGVuZCwgdGhpcy5fbXNnSGFuZGxlcik7CiAgICB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnB1c2gocmVhZGVyKTsKICAgIHJldHVybiByZWFkZXI7CiAgfQogIGNhbmNlbEFsbFJlcXVlc3RzKHJlYXNvbikgewogICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI/LmNhbmNlbChyZWFzb24pOwogICAgZm9yIChjb25zdCByZWFkZXIgb2YgdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5zbGljZSgwKSkgewogICAgICByZWFkZXIuY2FuY2VsKHJlYXNvbik7CiAgICB9CiAgfQp9CmNsYXNzIFBERldvcmtlclN0cmVhbVJlYWRlciB7CiAgY29uc3RydWN0b3IobXNnSGFuZGxlcikgewogICAgdGhpcy5fbXNnSGFuZGxlciA9IG1zZ0hhbmRsZXI7CiAgICB0aGlzLm9uUHJvZ3Jlc3MgPSBudWxsOwogICAgdGhpcy5fY29udGVudExlbmd0aCA9IG51bGw7CiAgICB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkID0gZmFsc2U7CiAgICB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCA9IGZhbHNlOwogICAgY29uc3QgcmVhZGFibGVTdHJlYW0gPSB0aGlzLl9tc2dIYW5kbGVyLnNlbmRXaXRoU3RyZWFtKCJHZXRSZWFkZXIiKTsKICAgIHRoaXMuX3JlYWRlciA9IHJlYWRhYmxlU3RyZWFtLmdldFJlYWRlcigpOwogICAgdGhpcy5faGVhZGVyc1JlYWR5ID0gdGhpcy5fbXNnSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIlJlYWRlckhlYWRlcnNSZWFkeSIpLnRoZW4oZGF0YSA9PiB7CiAgICAgIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkID0gZGF0YS5pc1N0cmVhbWluZ1N1cHBvcnRlZDsKICAgICAgdGhpcy5faXNSYW5nZVN1cHBvcnRlZCA9IGRhdGEuaXNSYW5nZVN1cHBvcnRlZDsKICAgICAgdGhpcy5fY29udGVudExlbmd0aCA9IGRhdGEuY29udGVudExlbmd0aDsKICAgIH0pOwogIH0KICBnZXQgaGVhZGVyc1JlYWR5KCkgewogICAgcmV0dXJuIHRoaXMuX2hlYWRlcnNSZWFkeTsKICB9CiAgZ2V0IGNvbnRlbnRMZW5ndGgoKSB7CiAgICByZXR1cm4gdGhpcy5fY29udGVudExlbmd0aDsKICB9CiAgZ2V0IGlzU3RyZWFtaW5nU3VwcG9ydGVkKCkgewogICAgcmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkOwogIH0KICBnZXQgaXNSYW5nZVN1cHBvcnRlZCgpIHsKICAgIHJldHVybiB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkOwogIH0KICBhc3luYyByZWFkKCkgewogICAgY29uc3QgewogICAgICB2YWx1ZSwKICAgICAgZG9uZQogICAgfSA9IGF3YWl0IHRoaXMuX3JlYWRlci5yZWFkKCk7CiAgICBpZiAoZG9uZSkgewogICAgICByZXR1cm4gewogICAgICAgIHZhbHVlOiB1bmRlZmluZWQsCiAgICAgICAgZG9uZTogdHJ1ZQogICAgICB9OwogICAgfQogICAgcmV0dXJuIHsKICAgICAgdmFsdWU6IHZhbHVlLmJ1ZmZlciwKICAgICAgZG9uZTogZmFsc2UKICAgIH07CiAgfQogIGNhbmNlbChyZWFzb24pIHsKICAgIHRoaXMuX3JlYWRlci5jYW5jZWwocmVhc29uKTsKICB9Cn0KY2xhc3MgUERGV29ya2VyU3RyZWFtUmFuZ2VSZWFkZXIgewogIGNvbnN0cnVjdG9yKGJlZ2luLCBlbmQsIG1zZ0hhbmRsZXIpIHsKICAgIHRoaXMuX21zZ0hhbmRsZXIgPSBtc2dIYW5kbGVyOwogICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDsKICAgIGNvbnN0IHJlYWRhYmxlU3RyZWFtID0gdGhpcy5fbXNnSGFuZGxlci5zZW5kV2l0aFN0cmVhbSgiR2V0UmFuZ2VSZWFkZXIiLCB7CiAgICAgIGJlZ2luLAogICAgICBlbmQKICAgIH0pOwogICAgdGhpcy5fcmVhZGVyID0gcmVhZGFibGVTdHJlYW0uZ2V0UmVhZGVyKCk7CiAgfQogIGdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgYXN5bmMgcmVhZCgpIHsKICAgIGNvbnN0IHsKICAgICAgdmFsdWUsCiAgICAgIGRvbmUKICAgIH0gPSBhd2FpdCB0aGlzLl9yZWFkZXIucmVhZCgpOwogICAgaWYgKGRvbmUpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLAogICAgICAgIGRvbmU6IHRydWUKICAgICAgfTsKICAgIH0KICAgIHJldHVybiB7CiAgICAgIHZhbHVlOiB2YWx1ZS5idWZmZXIsCiAgICAgIGRvbmU6IGZhbHNlCiAgICB9OwogIH0KICBjYW5jZWwocmVhc29uKSB7CiAgICB0aGlzLl9yZWFkZXIuY2FuY2VsKHJlYXNvbik7CiAgfQp9Cgo7Ly8gLi9zcmMvY29yZS93b3JrZXIuanMKCgoKCgoKCgoKCmNsYXNzIFdvcmtlclRhc2sgewogIGNvbnN0cnVjdG9yKG5hbWUpIHsKICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICB0aGlzLnRlcm1pbmF0ZWQgPSBmYWxzZTsKICAgIHRoaXMuX2NhcGFiaWxpdHkgPSBQcm9taXNlLndpdGhSZXNvbHZlcnMoKTsKICB9CiAgZ2V0IGZpbmlzaGVkKCkgewogICAgcmV0dXJuIHRoaXMuX2NhcGFiaWxpdHkucHJvbWlzZTsKICB9CiAgZmluaXNoKCkgewogICAgdGhpcy5fY2FwYWJpbGl0eS5yZXNvbHZlKCk7CiAgfQogIHRlcm1pbmF0ZSgpIHsKICAgIHRoaXMudGVybWluYXRlZCA9IHRydWU7CiAgfQogIGVuc3VyZU5vdFRlcm1pbmF0ZWQoKSB7CiAgICBpZiAodGhpcy50ZXJtaW5hdGVkKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV29ya2VyIHRhc2sgd2FzIHRlcm1pbmF0ZWQiKTsKICAgIH0KICB9Cn0KY2xhc3MgV29ya2VyTWVzc2FnZUhhbmRsZXIgewogIHN0YXRpYyB7CiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gInVuZGVmaW5lZCIgJiYgIWlzTm9kZUpTICYmIHR5cGVvZiBzZWxmICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2Ygc2VsZi5wb3N0TWVzc2FnZSA9PT0gImZ1bmN0aW9uIiAmJiAib25tZXNzYWdlIiBpbiBzZWxmKSB7CiAgICAgIHRoaXMuaW5pdGlhbGl6ZUZyb21Qb3J0KHNlbGYpOwogICAgfQogIH0KICBzdGF0aWMgc2V0dXAoaGFuZGxlciwgcG9ydCkgewogICAgbGV0IHRlc3RNZXNzYWdlUHJvY2Vzc2VkID0gZmFsc2U7CiAgICBoYW5kbGVyLm9uKCJ0ZXN0IiwgZGF0YSA9PiB7CiAgICAgIGlmICh0ZXN0TWVzc2FnZVByb2Nlc3NlZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0ZXN0TWVzc2FnZVByb2Nlc3NlZCA9IHRydWU7CiAgICAgIGhhbmRsZXIuc2VuZCgidGVzdCIsIGRhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KTsKICAgIH0pOwogICAgaGFuZGxlci5vbigiY29uZmlndXJlIiwgZGF0YSA9PiB7CiAgICAgIHNldFZlcmJvc2l0eUxldmVsKGRhdGEudmVyYm9zaXR5KTsKICAgIH0pOwogICAgaGFuZGxlci5vbigiR2V0RG9jUmVxdWVzdCIsIGRhdGEgPT4gdGhpcy5jcmVhdGVEb2N1bWVudEhhbmRsZXIoZGF0YSwgcG9ydCkpOwogIH0KICBzdGF0aWMgY3JlYXRlRG9jdW1lbnRIYW5kbGVyKGRvY1BhcmFtcywgcG9ydCkgewogICAgbGV0IHBkZk1hbmFnZXI7CiAgICBsZXQgdGVybWluYXRlZCA9IGZhbHNlOwogICAgbGV0IGNhbmNlbFhIUnMgPSBudWxsOwogICAgY29uc3QgV29ya2VyVGFza3MgPSBuZXcgU2V0KCk7CiAgICBjb25zdCB2ZXJib3NpdHkgPSBnZXRWZXJib3NpdHlMZXZlbCgpOwogICAgY29uc3QgewogICAgICBkb2NJZCwKICAgICAgYXBpVmVyc2lvbgogICAgfSA9IGRvY1BhcmFtczsKICAgIGNvbnN0IHdvcmtlclZlcnNpb24gPSAiNS4xLjkxIjsKICAgIGlmIChhcGlWZXJzaW9uICE9PSB3b3JrZXJWZXJzaW9uKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIEFQSSB2ZXJzaW9uICIke2FwaVZlcnNpb259IiBkb2VzIG5vdCBtYXRjaCBgICsgYHRoZSBXb3JrZXIgdmVyc2lvbiAiJHt3b3JrZXJWZXJzaW9ufSIuYCk7CiAgICB9CiAgICBjb25zdCBlbnVtZXJhYmxlUHJvcGVydGllcyA9IFtdOwogICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBbXSkgewogICAgICBlbnVtZXJhYmxlUHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTsKICAgIH0KICAgIGlmIChlbnVtZXJhYmxlUHJvcGVydGllcy5sZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJUaGUgYEFycmF5LnByb3RvdHlwZWAgY29udGFpbnMgdW5leHBlY3RlZCBlbnVtZXJhYmxlIHByb3BlcnRpZXM6ICIgKyBlbnVtZXJhYmxlUHJvcGVydGllcy5qb2luKCIsICIpICsgIjsgdGh1cyBicmVha2luZyBlLmcuIGBmb3IuLi5pbmAgaXRlcmF0aW9uIG9mIGBBcnJheWBzLiIpOwogICAgfQogICAgY29uc3Qgd29ya2VySGFuZGxlck5hbWUgPSBkb2NJZCArICJfd29ya2VyIjsKICAgIGxldCBoYW5kbGVyID0gbmV3IE1lc3NhZ2VIYW5kbGVyKHdvcmtlckhhbmRsZXJOYW1lLCBkb2NJZCwgcG9ydCk7CiAgICBmdW5jdGlvbiBlbnN1cmVOb3RUZXJtaW5hdGVkKCkgewogICAgICBpZiAodGVybWluYXRlZCkgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiV29ya2VyIHdhcyB0ZXJtaW5hdGVkIik7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIHN0YXJ0V29ya2VyVGFzayh0YXNrKSB7CiAgICAgIFdvcmtlclRhc2tzLmFkZCh0YXNrKTsKICAgIH0KICAgIGZ1bmN0aW9uIGZpbmlzaFdvcmtlclRhc2sodGFzaykgewogICAgICB0YXNrLmZpbmlzaCgpOwogICAgICBXb3JrZXJUYXNrcy5kZWxldGUodGFzayk7CiAgICB9CiAgICBhc3luYyBmdW5jdGlvbiBsb2FkRG9jdW1lbnQocmVjb3ZlcnlNb2RlKSB7CiAgICAgIGF3YWl0IHBkZk1hbmFnZXIuZW5zdXJlRG9jKCJjaGVja0hlYWRlciIpOwogICAgICBhd2FpdCBwZGZNYW5hZ2VyLmVuc3VyZURvYygicGFyc2VTdGFydFhSZWYiKTsKICAgICAgYXdhaXQgcGRmTWFuYWdlci5lbnN1cmVEb2MoInBhcnNlIiwgW3JlY292ZXJ5TW9kZV0pOwogICAgICBhd2FpdCBwZGZNYW5hZ2VyLmVuc3VyZURvYygiY2hlY2tGaXJzdFBhZ2UiLCBbcmVjb3ZlcnlNb2RlXSk7CiAgICAgIGF3YWl0IHBkZk1hbmFnZXIuZW5zdXJlRG9jKCJjaGVja0xhc3RQYWdlIiwgW3JlY292ZXJ5TW9kZV0pOwogICAgICBjb25zdCBpc1B1cmVYZmEgPSBhd2FpdCBwZGZNYW5hZ2VyLmVuc3VyZURvYygiaXNQdXJlWGZhIik7CiAgICAgIGlmIChpc1B1cmVYZmEpIHsKICAgICAgICBjb25zdCB0YXNrID0gbmV3IFdvcmtlclRhc2soImxvYWRYZmFGb250cyIpOwogICAgICAgIHN0YXJ0V29ya2VyVGFzayh0YXNrKTsKICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbcGRmTWFuYWdlci5sb2FkWGZhRm9udHMoaGFuZGxlciwgdGFzaykuY2F0Y2gocmVhc29uID0+IHt9KS50aGVuKCgpID0+IGZpbmlzaFdvcmtlclRhc2sodGFzaykpLCBwZGZNYW5hZ2VyLmxvYWRYZmFJbWFnZXMoKV0pOwogICAgICB9CiAgICAgIGNvbnN0IFtudW1QYWdlcywgZmluZ2VycHJpbnRzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtwZGZNYW5hZ2VyLmVuc3VyZURvYygibnVtUGFnZXMiKSwgcGRmTWFuYWdlci5lbnN1cmVEb2MoImZpbmdlcnByaW50cyIpXSk7CiAgICAgIGNvbnN0IGh0bWxGb3JYZmEgPSBpc1B1cmVYZmEgPyBhd2FpdCBwZGZNYW5hZ2VyLmVuc3VyZURvYygiaHRtbEZvclhmYSIpIDogbnVsbDsKICAgICAgcmV0dXJuIHsKICAgICAgICBudW1QYWdlcywKICAgICAgICBmaW5nZXJwcmludHMsCiAgICAgICAgaHRtbEZvclhmYQogICAgICB9OwogICAgfQogICAgYXN5bmMgZnVuY3Rpb24gZ2V0UGRmTWFuYWdlcih7CiAgICAgIGRhdGEsCiAgICAgIHBhc3N3b3JkLAogICAgICBkaXNhYmxlQXV0b0ZldGNoLAogICAgICByYW5nZUNodW5rU2l6ZSwKICAgICAgbGVuZ3RoLAogICAgICBkb2NCYXNlVXJsLAogICAgICBlbmFibGVYZmEsCiAgICAgIGV2YWx1YXRvck9wdGlvbnMKICAgIH0pIHsKICAgICAgY29uc3QgcGRmTWFuYWdlckFyZ3MgPSB7CiAgICAgICAgc291cmNlOiBudWxsLAogICAgICAgIGRpc2FibGVBdXRvRmV0Y2gsCiAgICAgICAgZG9jQmFzZVVybCwKICAgICAgICBkb2NJZCwKICAgICAgICBlbmFibGVYZmEsCiAgICAgICAgZXZhbHVhdG9yT3B0aW9ucywKICAgICAgICBoYW5kbGVyLAogICAgICAgIGxlbmd0aCwKICAgICAgICBwYXNzd29yZCwKICAgICAgICByYW5nZUNodW5rU2l6ZQogICAgICB9OwogICAgICBpZiAoZGF0YSkgewogICAgICAgIHBkZk1hbmFnZXJBcmdzLnNvdXJjZSA9IGRhdGE7CiAgICAgICAgcmV0dXJuIG5ldyBMb2NhbFBkZk1hbmFnZXIocGRmTWFuYWdlckFyZ3MpOwogICAgICB9CiAgICAgIGNvbnN0IHBkZlN0cmVhbSA9IG5ldyBQREZXb3JrZXJTdHJlYW0oaGFuZGxlciksCiAgICAgICAgZnVsbFJlcXVlc3QgPSBwZGZTdHJlYW0uZ2V0RnVsbFJlYWRlcigpOwogICAgICBjb25zdCBwZGZNYW5hZ2VyQ2FwYWJpbGl0eSA9IFByb21pc2Uud2l0aFJlc29sdmVycygpOwogICAgICBsZXQgbmV3UGRmTWFuYWdlciwKICAgICAgICBjYWNoZWRDaHVua3MgPSBbXSwKICAgICAgICBsb2FkZWQgPSAwOwogICAgICBmdWxsUmVxdWVzdC5oZWFkZXJzUmVhZHkudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgaWYgKCFmdWxsUmVxdWVzdC5pc1JhbmdlU3VwcG9ydGVkKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHBkZk1hbmFnZXJBcmdzLnNvdXJjZSA9IHBkZlN0cmVhbTsKICAgICAgICBwZGZNYW5hZ2VyQXJncy5sZW5ndGggPSBmdWxsUmVxdWVzdC5jb250ZW50TGVuZ3RoOwogICAgICAgIHBkZk1hbmFnZXJBcmdzLmRpc2FibGVBdXRvRmV0Y2ggfHw9IGZ1bGxSZXF1ZXN0LmlzU3RyZWFtaW5nU3VwcG9ydGVkOwogICAgICAgIG5ld1BkZk1hbmFnZXIgPSBuZXcgTmV0d29ya1BkZk1hbmFnZXIocGRmTWFuYWdlckFyZ3MpOwogICAgICAgIGZvciAoY29uc3QgY2h1bmsgb2YgY2FjaGVkQ2h1bmtzKSB7CiAgICAgICAgICBuZXdQZGZNYW5hZ2VyLnNlbmRQcm9ncmVzc2l2ZURhdGEoY2h1bmspOwogICAgICAgIH0KICAgICAgICBjYWNoZWRDaHVua3MgPSBbXTsKICAgICAgICBwZGZNYW5hZ2VyQ2FwYWJpbGl0eS5yZXNvbHZlKG5ld1BkZk1hbmFnZXIpOwogICAgICAgIGNhbmNlbFhIUnMgPSBudWxsOwogICAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVhc29uKSB7CiAgICAgICAgcGRmTWFuYWdlckNhcGFiaWxpdHkucmVqZWN0KHJlYXNvbik7CiAgICAgICAgY2FuY2VsWEhScyA9IG51bGw7CiAgICAgIH0pOwogICAgICBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgICAgY29uc3QgcmVhZENodW5rID0gZnVuY3Rpb24gKHsKICAgICAgICAgIHZhbHVlLAogICAgICAgICAgZG9uZQogICAgICAgIH0pIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGVuc3VyZU5vdFRlcm1pbmF0ZWQoKTsKICAgICAgICAgICAgaWYgKGRvbmUpIHsKICAgICAgICAgICAgICBpZiAoIW5ld1BkZk1hbmFnZXIpIHsKICAgICAgICAgICAgICAgIGNvbnN0IHBkZkZpbGUgPSBhcnJheUJ1ZmZlcnNUb0J5dGVzKGNhY2hlZENodW5rcyk7CiAgICAgICAgICAgICAgICBjYWNoZWRDaHVua3MgPSBbXTsKICAgICAgICAgICAgICAgIGlmIChsZW5ndGggJiYgcGRmRmlsZS5sZW5ndGggIT09IGxlbmd0aCkgewogICAgICAgICAgICAgICAgICB3YXJuKCJyZXBvcnRlZCBIVFRQIGxlbmd0aCBpcyBkaWZmZXJlbnQgZnJvbSBhY3R1YWwiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHBkZk1hbmFnZXJBcmdzLnNvdXJjZSA9IHBkZkZpbGU7CiAgICAgICAgICAgICAgICBuZXdQZGZNYW5hZ2VyID0gbmV3IExvY2FsUGRmTWFuYWdlcihwZGZNYW5hZ2VyQXJncyk7CiAgICAgICAgICAgICAgICBwZGZNYW5hZ2VyQ2FwYWJpbGl0eS5yZXNvbHZlKG5ld1BkZk1hbmFnZXIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBjYW5jZWxYSFJzID0gbnVsbDsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbG9hZGVkICs9IHZhbHVlLmJ5dGVMZW5ndGg7CiAgICAgICAgICAgIGlmICghZnVsbFJlcXVlc3QuaXNTdHJlYW1pbmdTdXBwb3J0ZWQpIHsKICAgICAgICAgICAgICBoYW5kbGVyLnNlbmQoIkRvY1Byb2dyZXNzIiwgewogICAgICAgICAgICAgICAgbG9hZGVkLAogICAgICAgICAgICAgICAgdG90YWw6IE1hdGgubWF4KGxvYWRlZCwgZnVsbFJlcXVlc3QuY29udGVudExlbmd0aCB8fCAwKQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChuZXdQZGZNYW5hZ2VyKSB7CiAgICAgICAgICAgICAgbmV3UGRmTWFuYWdlci5zZW5kUHJvZ3Jlc3NpdmVEYXRhKHZhbHVlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBjYWNoZWRDaHVua3MucHVzaCh2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVsbFJlcXVlc3QucmVhZCgpLnRoZW4ocmVhZENodW5rLCByZWplY3QpOwogICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICByZWplY3QoZSk7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICBmdWxsUmVxdWVzdC5yZWFkKCkudGhlbihyZWFkQ2h1bmssIHJlamVjdCk7CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgcGRmTWFuYWdlckNhcGFiaWxpdHkucmVqZWN0KGUpOwogICAgICAgIGNhbmNlbFhIUnMgPSBudWxsOwogICAgICB9KTsKICAgICAgY2FuY2VsWEhScyA9IHJlYXNvbiA9PiB7CiAgICAgICAgcGRmU3RyZWFtLmNhbmNlbEFsbFJlcXVlc3RzKHJlYXNvbik7CiAgICAgIH07CiAgICAgIHJldHVybiBwZGZNYW5hZ2VyQ2FwYWJpbGl0eS5wcm9taXNlOwogICAgfQogICAgZnVuY3Rpb24gc2V0dXBEb2MoZGF0YSkgewogICAgICBmdW5jdGlvbiBvblN1Y2Nlc3MoZG9jKSB7CiAgICAgICAgZW5zdXJlTm90VGVybWluYXRlZCgpOwogICAgICAgIGhhbmRsZXIuc2VuZCgiR2V0RG9jIiwgewogICAgICAgICAgcGRmSW5mbzogZG9jCiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gb25GYWlsdXJlKGV4KSB7CiAgICAgICAgZW5zdXJlTm90VGVybWluYXRlZCgpOwogICAgICAgIGlmIChleCBpbnN0YW5jZW9mIFBhc3N3b3JkRXhjZXB0aW9uKSB7CiAgICAgICAgICBjb25zdCB0YXNrID0gbmV3IFdvcmtlclRhc2soYFBhc3N3b3JkRXhjZXB0aW9uOiByZXNwb25zZSAke2V4LmNvZGV9YCk7CiAgICAgICAgICBzdGFydFdvcmtlclRhc2sodGFzayk7CiAgICAgICAgICBoYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiUGFzc3dvcmRSZXF1ZXN0IiwgZXgpLnRoZW4oZnVuY3Rpb24gKHsKICAgICAgICAgICAgcGFzc3dvcmQKICAgICAgICAgIH0pIHsKICAgICAgICAgICAgZmluaXNoV29ya2VyVGFzayh0YXNrKTsKICAgICAgICAgICAgcGRmTWFuYWdlci51cGRhdGVQYXNzd29yZChwYXNzd29yZCk7CiAgICAgICAgICAgIHBkZk1hbmFnZXJSZWFkeSgpOwogICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkgewogICAgICAgICAgICBmaW5pc2hXb3JrZXJUYXNrKHRhc2spOwogICAgICAgICAgICBoYW5kbGVyLnNlbmQoIkRvY0V4Y2VwdGlvbiIsIGV4KTsKICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBoYW5kbGVyLnNlbmQoIkRvY0V4Y2VwdGlvbiIsIHdyYXBSZWFzb24oZXgpKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gcGRmTWFuYWdlclJlYWR5KCkgewogICAgICAgIGVuc3VyZU5vdFRlcm1pbmF0ZWQoKTsKICAgICAgICBsb2FkRG9jdW1lbnQoZmFsc2UpLnRoZW4ob25TdWNjZXNzLCBmdW5jdGlvbiAocmVhc29uKSB7CiAgICAgICAgICBlbnN1cmVOb3RUZXJtaW5hdGVkKCk7CiAgICAgICAgICBpZiAoIShyZWFzb24gaW5zdGFuY2VvZiBYUmVmUGFyc2VFeGNlcHRpb24pKSB7CiAgICAgICAgICAgIG9uRmFpbHVyZShyZWFzb24pOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBwZGZNYW5hZ2VyLnJlcXVlc3RMb2FkZWRTdHJlYW0oKS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgZW5zdXJlTm90VGVybWluYXRlZCgpOwogICAgICAgICAgICBsb2FkRG9jdW1lbnQodHJ1ZSkudGhlbihvblN1Y2Nlc3MsIG9uRmFpbHVyZSk7CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBlbnN1cmVOb3RUZXJtaW5hdGVkKCk7CiAgICAgIGdldFBkZk1hbmFnZXIoZGF0YSkudGhlbihmdW5jdGlvbiAobmV3UGRmTWFuYWdlcikgewogICAgICAgIGlmICh0ZXJtaW5hdGVkKSB7CiAgICAgICAgICBuZXdQZGZNYW5hZ2VyLnRlcm1pbmF0ZShuZXcgQWJvcnRFeGNlcHRpb24oIldvcmtlciB3YXMgdGVybWluYXRlZC4iKSk7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIldvcmtlciB3YXMgdGVybWluYXRlZCIpOwogICAgICAgIH0KICAgICAgICBwZGZNYW5hZ2VyID0gbmV3UGRmTWFuYWdlcjsKICAgICAgICBwZGZNYW5hZ2VyLnJlcXVlc3RMb2FkZWRTdHJlYW0odHJ1ZSkudGhlbihzdHJlYW0gPT4gewogICAgICAgICAgaGFuZGxlci5zZW5kKCJEYXRhTG9hZGVkIiwgewogICAgICAgICAgICBsZW5ndGg6IHN0cmVhbS5ieXRlcy5ieXRlTGVuZ3RoCiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfSkudGhlbihwZGZNYW5hZ2VyUmVhZHksIG9uRmFpbHVyZSk7CiAgICB9CiAgICBoYW5kbGVyLm9uKCJHZXRQYWdlIiwgZnVuY3Rpb24gKGRhdGEpIHsKICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZ2V0UGFnZShkYXRhLnBhZ2VJbmRleCkudGhlbihmdW5jdGlvbiAocGFnZSkgewogICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbcGRmTWFuYWdlci5lbnN1cmUocGFnZSwgInJvdGF0ZSIpLCBwZGZNYW5hZ2VyLmVuc3VyZShwYWdlLCAicmVmIiksIHBkZk1hbmFnZXIuZW5zdXJlKHBhZ2UsICJ1c2VyVW5pdCIpLCBwZGZNYW5hZ2VyLmVuc3VyZShwYWdlLCAidmlldyIpXSkudGhlbihmdW5jdGlvbiAoW3JvdGF0ZSwgcmVmLCB1c2VyVW5pdCwgdmlld10pIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHJvdGF0ZSwKICAgICAgICAgICAgcmVmLAogICAgICAgICAgICByZWZTdHI6IHJlZj8udG9TdHJpbmcoKSA/PyBudWxsLAogICAgICAgICAgICB1c2VyVW5pdCwKICAgICAgICAgICAgdmlldwogICAgICAgICAgfTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9KTsKICAgIGhhbmRsZXIub24oIkdldFBhZ2VJbmRleCIsIGZ1bmN0aW9uIChkYXRhKSB7CiAgICAgIGNvbnN0IHBhZ2VSZWYgPSBSZWYuZ2V0KGRhdGEubnVtLCBkYXRhLmdlbik7CiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coImdldFBhZ2VJbmRleCIsIFtwYWdlUmVmXSk7CiAgICB9KTsKICAgIGhhbmRsZXIub24oIkdldERlc3RpbmF0aW9ucyIsIGZ1bmN0aW9uIChkYXRhKSB7CiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coImRlc3RpbmF0aW9ucyIpOwogICAgfSk7CiAgICBoYW5kbGVyLm9uKCJHZXREZXN0aW5hdGlvbiIsIGZ1bmN0aW9uIChkYXRhKSB7CiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coImdldERlc3RpbmF0aW9uIiwgW2RhdGEuaWRdKTsKICAgIH0pOwogICAgaGFuZGxlci5vbigiR2V0UGFnZUxhYmVscyIsIGZ1bmN0aW9uIChkYXRhKSB7CiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coInBhZ2VMYWJlbHMiKTsKICAgIH0pOwogICAgaGFuZGxlci5vbigiR2V0UGFnZUxheW91dCIsIGZ1bmN0aW9uIChkYXRhKSB7CiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coInBhZ2VMYXlvdXQiKTsKICAgIH0pOwogICAgaGFuZGxlci5vbigiR2V0UGFnZU1vZGUiLCBmdW5jdGlvbiAoZGF0YSkgewogICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCJwYWdlTW9kZSIpOwogICAgfSk7CiAgICBoYW5kbGVyLm9uKCJHZXRWaWV3ZXJQcmVmZXJlbmNlcyIsIGZ1bmN0aW9uIChkYXRhKSB7CiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coInZpZXdlclByZWZlcmVuY2VzIik7CiAgICB9KTsKICAgIGhhbmRsZXIub24oIkdldE9wZW5BY3Rpb24iLCBmdW5jdGlvbiAoZGF0YSkgewogICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCJvcGVuQWN0aW9uIik7CiAgICB9KTsKICAgIGhhbmRsZXIub24oIkdldEF0dGFjaG1lbnRzIiwgZnVuY3Rpb24gKGRhdGEpIHsKICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZygiYXR0YWNobWVudHMiKTsKICAgIH0pOwogICAgaGFuZGxlci5vbigiR2V0RG9jSlNBY3Rpb25zIiwgZnVuY3Rpb24gKGRhdGEpIHsKICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZygianNBY3Rpb25zIik7CiAgICB9KTsKICAgIGhhbmRsZXIub24oIkdldFBhZ2VKU0FjdGlvbnMiLCBmdW5jdGlvbiAoewogICAgICBwYWdlSW5kZXgKICAgIH0pIHsKICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZ2V0UGFnZShwYWdlSW5kZXgpLnRoZW4ocGFnZSA9PiBwZGZNYW5hZ2VyLmVuc3VyZShwYWdlLCAianNBY3Rpb25zIikpOwogICAgfSk7CiAgICBoYW5kbGVyLm9uKCJHZXRPdXRsaW5lIiwgZnVuY3Rpb24gKGRhdGEpIHsKICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZygiZG9jdW1lbnRPdXRsaW5lIik7CiAgICB9KTsKICAgIGhhbmRsZXIub24oIkdldE9wdGlvbmFsQ29udGVudENvbmZpZyIsIGZ1bmN0aW9uIChkYXRhKSB7CiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coIm9wdGlvbmFsQ29udGVudENvbmZpZyIpOwogICAgfSk7CiAgICBoYW5kbGVyLm9uKCJHZXRQZXJtaXNzaW9ucyIsIGZ1bmN0aW9uIChkYXRhKSB7CiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coInBlcm1pc3Npb25zIik7CiAgICB9KTsKICAgIGhhbmRsZXIub24oIkdldE1ldGFkYXRhIiwgZnVuY3Rpb24gKGRhdGEpIHsKICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFtwZGZNYW5hZ2VyLmVuc3VyZURvYygiZG9jdW1lbnRJbmZvIiksIHBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZygibWV0YWRhdGEiKV0pOwogICAgfSk7CiAgICBoYW5kbGVyLm9uKCJHZXRNYXJrSW5mbyIsIGZ1bmN0aW9uIChkYXRhKSB7CiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coIm1hcmtJbmZvIik7CiAgICB9KTsKICAgIGhhbmRsZXIub24oIkdldERhdGEiLCBmdW5jdGlvbiAoZGF0YSkgewogICAgICByZXR1cm4gcGRmTWFuYWdlci5yZXF1ZXN0TG9hZGVkU3RyZWFtKCkudGhlbihzdHJlYW0gPT4gc3RyZWFtLmJ5dGVzKTsKICAgIH0pOwogICAgaGFuZGxlci5vbigiR2V0QW5ub3RhdGlvbnMiLCBmdW5jdGlvbiAoewogICAgICBwYWdlSW5kZXgsCiAgICAgIGludGVudAogICAgfSkgewogICAgICByZXR1cm4gcGRmTWFuYWdlci5nZXRQYWdlKHBhZ2VJbmRleCkudGhlbihmdW5jdGlvbiAocGFnZSkgewogICAgICAgIGNvbnN0IHRhc2sgPSBuZXcgV29ya2VyVGFzayhgR2V0QW5ub3RhdGlvbnM6IHBhZ2UgJHtwYWdlSW5kZXh9YCk7CiAgICAgICAgc3RhcnRXb3JrZXJUYXNrKHRhc2spOwogICAgICAgIHJldHVybiBwYWdlLmdldEFubm90YXRpb25zRGF0YShoYW5kbGVyLCB0YXNrLCBpbnRlbnQpLnRoZW4oZGF0YSA9PiB7CiAgICAgICAgICBmaW5pc2hXb3JrZXJUYXNrKHRhc2spOwogICAgICAgICAgcmV0dXJuIGRhdGE7CiAgICAgICAgfSwgcmVhc29uID0+IHsKICAgICAgICAgIGZpbmlzaFdvcmtlclRhc2sodGFzayk7CiAgICAgICAgICB0aHJvdyByZWFzb247CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfSk7CiAgICBoYW5kbGVyLm9uKCJHZXRGaWVsZE9iamVjdHMiLCBmdW5jdGlvbiAoZGF0YSkgewogICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVEb2MoImZpZWxkT2JqZWN0cyIpLnRoZW4oZmllbGRPYmplY3RzID0+IGZpZWxkT2JqZWN0cz8uYWxsRmllbGRzIHx8IG51bGwpOwogICAgfSk7CiAgICBoYW5kbGVyLm9uKCJIYXNKU0FjdGlvbnMiLCBmdW5jdGlvbiAoZGF0YSkgewogICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVEb2MoImhhc0pTQWN0aW9ucyIpOwogICAgfSk7CiAgICBoYW5kbGVyLm9uKCJHZXRDYWxjdWxhdGlvbk9yZGVySWRzIiwgZnVuY3Rpb24gKGRhdGEpIHsKICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZW5zdXJlRG9jKCJjYWxjdWxhdGlvbk9yZGVySWRzIik7CiAgICB9KTsKICAgIGhhbmRsZXIub24oIlNhdmVEb2N1bWVudCIsIGFzeW5jIGZ1bmN0aW9uICh7CiAgICAgIGlzUHVyZVhmYSwKICAgICAgbnVtUGFnZXMsCiAgICAgIGFubm90YXRpb25TdG9yYWdlLAogICAgICBmaWxlbmFtZQogICAgfSkgewogICAgICBjb25zdCBnbG9iYWxQcm9taXNlcyA9IFtwZGZNYW5hZ2VyLnJlcXVlc3RMb2FkZWRTdHJlYW0oKSwgcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCJhY3JvRm9ybSIpLCBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coImFjcm9Gb3JtUmVmIiksIHBkZk1hbmFnZXIuZW5zdXJlRG9jKCJzdGFydFhSZWYiKSwgcGRmTWFuYWdlci5lbnN1cmVEb2MoInhyZWYiKSwgcGRmTWFuYWdlci5lbnN1cmVEb2MoImxpbmVhcml6YXRpb24iKSwgcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCJzdHJ1Y3RUcmVlUm9vdCIpXTsKICAgICAgY29uc3QgY2hhbmdlcyA9IG5ldyBSZWZTZXRDYWNoZSgpOwogICAgICBjb25zdCBwcm9taXNlcyA9IFtdOwogICAgICBjb25zdCBuZXdBbm5vdGF0aW9uc0J5UGFnZSA9ICFpc1B1cmVYZmEgPyBnZXROZXdBbm5vdGF0aW9uc01hcChhbm5vdGF0aW9uU3RvcmFnZSkgOiBudWxsOwogICAgICBjb25zdCBbc3RyZWFtLCBhY3JvRm9ybSwgYWNyb0Zvcm1SZWYsIHN0YXJ0WFJlZiwgeHJlZiwgbGluZWFyaXphdGlvbiwgX3N0cnVjdFRyZWVSb290XSA9IGF3YWl0IFByb21pc2UuYWxsKGdsb2JhbFByb21pc2VzKTsKICAgICAgY29uc3QgY2F0YWxvZ1JlZiA9IHhyZWYudHJhaWxlci5nZXRSYXcoIlJvb3QiKSB8fCBudWxsOwogICAgICBsZXQgc3RydWN0VHJlZVJvb3Q7CiAgICAgIGlmIChuZXdBbm5vdGF0aW9uc0J5UGFnZSkgewogICAgICAgIGlmICghX3N0cnVjdFRyZWVSb290KSB7CiAgICAgICAgICBpZiAoYXdhaXQgU3RydWN0VHJlZVJvb3QuY2FuQ3JlYXRlU3RydWN0dXJlVHJlZSh7CiAgICAgICAgICAgIGNhdGFsb2dSZWYsCiAgICAgICAgICAgIHBkZk1hbmFnZXIsCiAgICAgICAgICAgIG5ld0Fubm90YXRpb25zQnlQYWdlCiAgICAgICAgICB9KSkgewogICAgICAgICAgICBzdHJ1Y3RUcmVlUm9vdCA9IG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChhd2FpdCBfc3RydWN0VHJlZVJvb3QuY2FuVXBkYXRlU3RydWN0VHJlZSh7CiAgICAgICAgICBwZGZNYW5hZ2VyLAogICAgICAgICAgbmV3QW5ub3RhdGlvbnNCeVBhZ2UKICAgICAgICB9KSkgewogICAgICAgICAgc3RydWN0VHJlZVJvb3QgPSBfc3RydWN0VHJlZVJvb3Q7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGltYWdlUHJvbWlzZXMgPSBBbm5vdGF0aW9uRmFjdG9yeS5nZW5lcmF0ZUltYWdlcyhhbm5vdGF0aW9uU3RvcmFnZS52YWx1ZXMoKSwgeHJlZiwgcGRmTWFuYWdlci5ldmFsdWF0b3JPcHRpb25zLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKTsKICAgICAgICBjb25zdCBuZXdBbm5vdGF0aW9uUHJvbWlzZXMgPSBzdHJ1Y3RUcmVlUm9vdCA9PT0gdW5kZWZpbmVkID8gcHJvbWlzZXMgOiBbXTsKICAgICAgICBmb3IgKGNvbnN0IFtwYWdlSW5kZXgsIGFubm90YXRpb25zXSBvZiBuZXdBbm5vdGF0aW9uc0J5UGFnZSkgewogICAgICAgICAgbmV3QW5ub3RhdGlvblByb21pc2VzLnB1c2gocGRmTWFuYWdlci5nZXRQYWdlKHBhZ2VJbmRleCkudGhlbihwYWdlID0+IHsKICAgICAgICAgICAgY29uc3QgdGFzayA9IG5ldyBXb3JrZXJUYXNrKGBTYXZlIChlZGl0b3IpOiBwYWdlICR7cGFnZUluZGV4fWApOwogICAgICAgICAgICBzdGFydFdvcmtlclRhc2sodGFzayk7CiAgICAgICAgICAgIHJldHVybiBwYWdlLnNhdmVOZXdBbm5vdGF0aW9ucyhoYW5kbGVyLCB0YXNrLCBhbm5vdGF0aW9ucywgaW1hZ2VQcm9taXNlcywgY2hhbmdlcykuZmluYWxseShmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgZmluaXNoV29ya2VyVGFzayh0YXNrKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9KSk7CiAgICAgICAgfQogICAgICAgIGlmIChzdHJ1Y3RUcmVlUm9vdCA9PT0gbnVsbCkgewogICAgICAgICAgcHJvbWlzZXMucHVzaChQcm9taXNlLmFsbChuZXdBbm5vdGF0aW9uUHJvbWlzZXMpLnRoZW4oYXN5bmMgKCkgPT4gewogICAgICAgICAgICBhd2FpdCBTdHJ1Y3RUcmVlUm9vdC5jcmVhdGVTdHJ1Y3R1cmVUcmVlKHsKICAgICAgICAgICAgICBuZXdBbm5vdGF0aW9uc0J5UGFnZSwKICAgICAgICAgICAgICB4cmVmLAogICAgICAgICAgICAgIGNhdGFsb2dSZWYsCiAgICAgICAgICAgICAgcGRmTWFuYWdlciwKICAgICAgICAgICAgICBjaGFuZ2VzCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSkpOwogICAgICAgIH0gZWxzZSBpZiAoc3RydWN0VHJlZVJvb3QpIHsKICAgICAgICAgIHByb21pc2VzLnB1c2goUHJvbWlzZS5hbGwobmV3QW5ub3RhdGlvblByb21pc2VzKS50aGVuKGFzeW5jICgpID0+IHsKICAgICAgICAgICAgYXdhaXQgc3RydWN0VHJlZVJvb3QudXBkYXRlU3RydWN0dXJlVHJlZSh7CiAgICAgICAgICAgICAgbmV3QW5ub3RhdGlvbnNCeVBhZ2UsCiAgICAgICAgICAgICAgcGRmTWFuYWdlciwKICAgICAgICAgICAgICBjaGFuZ2VzCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSkpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoaXNQdXJlWGZhKSB7CiAgICAgICAgcHJvbWlzZXMucHVzaChwZGZNYW5hZ2VyLnNlcmlhbGl6ZVhmYURhdGEoYW5ub3RhdGlvblN0b3JhZ2UpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBmb3IgKGxldCBwYWdlSW5kZXggPSAwOyBwYWdlSW5kZXggPCBudW1QYWdlczsgcGFnZUluZGV4KyspIHsKICAgICAgICAgIHByb21pc2VzLnB1c2gocGRmTWFuYWdlci5nZXRQYWdlKHBhZ2VJbmRleCkudGhlbihmdW5jdGlvbiAocGFnZSkgewogICAgICAgICAgICBjb25zdCB0YXNrID0gbmV3IFdvcmtlclRhc2soYFNhdmU6IHBhZ2UgJHtwYWdlSW5kZXh9YCk7CiAgICAgICAgICAgIHN0YXJ0V29ya2VyVGFzayh0YXNrKTsKICAgICAgICAgICAgcmV0dXJuIHBhZ2Uuc2F2ZShoYW5kbGVyLCB0YXNrLCBhbm5vdGF0aW9uU3RvcmFnZSwgY2hhbmdlcykuZmluYWxseShmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgZmluaXNoV29ya2VyVGFzayh0YXNrKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9KSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvbnN0IHJlZnMgPSBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7CiAgICAgIGxldCB4ZmFEYXRhID0gbnVsbDsKICAgICAgaWYgKGlzUHVyZVhmYSkgewogICAgICAgIHhmYURhdGEgPSByZWZzWzBdOwogICAgICAgIGlmICgheGZhRGF0YSkgewogICAgICAgICAgcmV0dXJuIHN0cmVhbS5ieXRlczsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoY2hhbmdlcy5zaXplID09PSAwKSB7CiAgICAgICAgcmV0dXJuIHN0cmVhbS5ieXRlczsKICAgICAgfQogICAgICBjb25zdCBuZWVkQXBwZWFyYW5jZXMgPSBhY3JvRm9ybVJlZiAmJiBhY3JvRm9ybSBpbnN0YW5jZW9mIERpY3QgJiYgY2hhbmdlcy52YWx1ZXMoKS5zb21lKHJlZiA9PiByZWYubmVlZEFwcGVhcmFuY2VzKTsKICAgICAgY29uc3QgeGZhID0gYWNyb0Zvcm0gaW5zdGFuY2VvZiBEaWN0ICYmIGFjcm9Gb3JtLmdldCgiWEZBIikgfHwgbnVsbDsKICAgICAgbGV0IHhmYURhdGFzZXRzUmVmID0gbnVsbDsKICAgICAgbGV0IGhhc1hmYURhdGFzZXRzRW50cnkgPSBmYWxzZTsKICAgICAgaWYgKEFycmF5LmlzQXJyYXkoeGZhKSkgewogICAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHhmYS5sZW5ndGg7IGkgPCBpaTsgaSArPSAyKSB7CiAgICAgICAgICBpZiAoeGZhW2ldID09PSAiZGF0YXNldHMiKSB7CiAgICAgICAgICAgIHhmYURhdGFzZXRzUmVmID0geGZhW2kgKyAxXTsKICAgICAgICAgICAgaGFzWGZhRGF0YXNldHNFbnRyeSA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh4ZmFEYXRhc2V0c1JlZiA9PT0gbnVsbCkgewogICAgICAgICAgeGZhRGF0YXNldHNSZWYgPSB4cmVmLmdldE5ld1RlbXBvcmFyeVJlZigpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICh4ZmEpIHsKICAgICAgICB3YXJuKCJVbnN1cHBvcnRlZCBYRkEgdHlwZS4iKTsKICAgICAgfQogICAgICBsZXQgbmV3WHJlZkluZm8gPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgICBpZiAoeHJlZi50cmFpbGVyKSB7CiAgICAgICAgY29uc3QgaW5mb09iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICAgICAgY29uc3QgeHJlZkluZm8gPSB4cmVmLnRyYWlsZXIuZ2V0KCJJbmZvIikgfHwgbnVsbDsKICAgICAgICBpZiAoeHJlZkluZm8gaW5zdGFuY2VvZiBEaWN0KSB7CiAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB4cmVmSW5mbykgewogICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAic3RyaW5nIikgewogICAgICAgICAgICAgIGluZm9PYmpba2V5XSA9IHN0cmluZ1RvUERGU3RyaW5nKHZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBuZXdYcmVmSW5mbyA9IHsKICAgICAgICAgIHJvb3RSZWY6IGNhdGFsb2dSZWYsCiAgICAgICAgICBlbmNyeXB0UmVmOiB4cmVmLnRyYWlsZXIuZ2V0UmF3KCJFbmNyeXB0IikgfHwgbnVsbCwKICAgICAgICAgIG5ld1JlZjogeHJlZi5nZXROZXdUZW1wb3JhcnlSZWYoKSwKICAgICAgICAgIGluZm9SZWY6IHhyZWYudHJhaWxlci5nZXRSYXcoIkluZm8iKSB8fCBudWxsLAogICAgICAgICAgaW5mbzogaW5mb09iaiwKICAgICAgICAgIGZpbGVJZHM6IHhyZWYudHJhaWxlci5nZXQoIklEIikgfHwgbnVsbCwKICAgICAgICAgIHN0YXJ0WFJlZjogbGluZWFyaXphdGlvbiA/IHN0YXJ0WFJlZiA6IHhyZWYubGFzdFhSZWZTdHJlYW1Qb3MgPz8gc3RhcnRYUmVmLAogICAgICAgICAgZmlsZW5hbWUKICAgICAgICB9OwogICAgICB9CiAgICAgIHJldHVybiBpbmNyZW1lbnRhbFVwZGF0ZSh7CiAgICAgICAgb3JpZ2luYWxEYXRhOiBzdHJlYW0uYnl0ZXMsCiAgICAgICAgeHJlZkluZm86IG5ld1hyZWZJbmZvLAogICAgICAgIGNoYW5nZXMsCiAgICAgICAgeHJlZiwKICAgICAgICBoYXNYZmE6ICEheGZhLAogICAgICAgIHhmYURhdGFzZXRzUmVmLAogICAgICAgIGhhc1hmYURhdGFzZXRzRW50cnksCiAgICAgICAgbmVlZEFwcGVhcmFuY2VzLAogICAgICAgIGFjcm9Gb3JtUmVmLAogICAgICAgIGFjcm9Gb3JtLAogICAgICAgIHhmYURhdGEsCiAgICAgICAgdXNlWHJlZlN0cmVhbTogaXNEaWN0KHhyZWYudG9wRGljdCwgIlhSZWYiKQogICAgICB9KS5maW5hbGx5KCgpID0+IHsKICAgICAgICB4cmVmLnJlc2V0TmV3VGVtcG9yYXJ5UmVmKCk7CiAgICAgIH0pOwogICAgfSk7CiAgICBoYW5kbGVyLm9uKCJHZXRPcGVyYXRvckxpc3QiLCBmdW5jdGlvbiAoZGF0YSwgc2luaykgewogICAgICBjb25zdCBwYWdlSW5kZXggPSBkYXRhLnBhZ2VJbmRleDsKICAgICAgcGRmTWFuYWdlci5nZXRQYWdlKHBhZ2VJbmRleCkudGhlbihmdW5jdGlvbiAocGFnZSkgewogICAgICAgIGNvbnN0IHRhc2sgPSBuZXcgV29ya2VyVGFzayhgR2V0T3BlcmF0b3JMaXN0OiBwYWdlICR7cGFnZUluZGV4fWApOwogICAgICAgIHN0YXJ0V29ya2VyVGFzayh0YXNrKTsKICAgICAgICBjb25zdCBzdGFydCA9IHZlcmJvc2l0eSA+PSBWZXJib3NpdHlMZXZlbC5JTkZPUyA/IERhdGUubm93KCkgOiAwOwogICAgICAgIHBhZ2UuZ2V0T3BlcmF0b3JMaXN0KHsKICAgICAgICAgIGhhbmRsZXIsCiAgICAgICAgICBzaW5rLAogICAgICAgICAgdGFzaywKICAgICAgICAgIGludGVudDogZGF0YS5pbnRlbnQsCiAgICAgICAgICBjYWNoZUtleTogZGF0YS5jYWNoZUtleSwKICAgICAgICAgIGFubm90YXRpb25TdG9yYWdlOiBkYXRhLmFubm90YXRpb25TdG9yYWdlLAogICAgICAgICAgbW9kaWZpZWRJZHM6IGRhdGEubW9kaWZpZWRJZHMKICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChvcGVyYXRvckxpc3RJbmZvKSB7CiAgICAgICAgICBmaW5pc2hXb3JrZXJUYXNrKHRhc2spOwogICAgICAgICAgaWYgKHN0YXJ0KSB7CiAgICAgICAgICAgIGluZm8oYHBhZ2U9JHtwYWdlSW5kZXggKyAxfSAtIGdldE9wZXJhdG9yTGlzdDogdGltZT1gICsgYCR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zLCBsZW49JHtvcGVyYXRvckxpc3RJbmZvLmxlbmd0aH1gKTsKICAgICAgICAgIH0KICAgICAgICAgIHNpbmsuY2xvc2UoKTsKICAgICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7CiAgICAgICAgICBmaW5pc2hXb3JrZXJUYXNrKHRhc2spOwogICAgICAgICAgaWYgKHRhc2sudGVybWluYXRlZCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBzaW5rLmVycm9yKHJlYXNvbik7CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfSk7CiAgICBoYW5kbGVyLm9uKCJHZXRUZXh0Q29udGVudCIsIGZ1bmN0aW9uIChkYXRhLCBzaW5rKSB7CiAgICAgIGNvbnN0IHsKICAgICAgICBwYWdlSW5kZXgsCiAgICAgICAgaW5jbHVkZU1hcmtlZENvbnRlbnQsCiAgICAgICAgZGlzYWJsZU5vcm1hbGl6YXRpb24KICAgICAgfSA9IGRhdGE7CiAgICAgIHBkZk1hbmFnZXIuZ2V0UGFnZShwYWdlSW5kZXgpLnRoZW4oZnVuY3Rpb24gKHBhZ2UpIHsKICAgICAgICBjb25zdCB0YXNrID0gbmV3IFdvcmtlclRhc2soIkdldFRleHRDb250ZW50OiBwYWdlICIgKyBwYWdlSW5kZXgpOwogICAgICAgIHN0YXJ0V29ya2VyVGFzayh0YXNrKTsKICAgICAgICBjb25zdCBzdGFydCA9IHZlcmJvc2l0eSA+PSBWZXJib3NpdHlMZXZlbC5JTkZPUyA/IERhdGUubm93KCkgOiAwOwogICAgICAgIHBhZ2UuZXh0cmFjdFRleHRDb250ZW50KHsKICAgICAgICAgIGhhbmRsZXIsCiAgICAgICAgICB0YXNrLAogICAgICAgICAgc2luaywKICAgICAgICAgIGluY2x1ZGVNYXJrZWRDb250ZW50LAogICAgICAgICAgZGlzYWJsZU5vcm1hbGl6YXRpb24KICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgICAgIGZpbmlzaFdvcmtlclRhc2sodGFzayk7CiAgICAgICAgICBpZiAoc3RhcnQpIHsKICAgICAgICAgICAgaW5mbyhgcGFnZT0ke3BhZ2VJbmRleCArIDF9IC0gZ2V0VGV4dENvbnRlbnQ6IHRpbWU9YCArIGAke0RhdGUubm93KCkgLSBzdGFydH1tc2ApOwogICAgICAgICAgfQogICAgICAgICAgc2luay5jbG9zZSgpOwogICAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHsKICAgICAgICAgIGZpbmlzaFdvcmtlclRhc2sodGFzayk7CiAgICAgICAgICBpZiAodGFzay50ZXJtaW5hdGVkKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIHNpbmsuZXJyb3IocmVhc29uKTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9KTsKICAgIGhhbmRsZXIub24oIkdldFN0cnVjdFRyZWUiLCBmdW5jdGlvbiAoZGF0YSkgewogICAgICByZXR1cm4gcGRmTWFuYWdlci5nZXRQYWdlKGRhdGEucGFnZUluZGV4KS50aGVuKHBhZ2UgPT4gcGRmTWFuYWdlci5lbnN1cmUocGFnZSwgImdldFN0cnVjdFRyZWUiKSk7CiAgICB9KTsKICAgIGhhbmRsZXIub24oIkZvbnRGYWxsYmFjayIsIGZ1bmN0aW9uIChkYXRhKSB7CiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmZvbnRGYWxsYmFjayhkYXRhLmlkLCBoYW5kbGVyKTsKICAgIH0pOwogICAgaGFuZGxlci5vbigiQ2xlYW51cCIsIGZ1bmN0aW9uIChkYXRhKSB7CiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmNsZWFudXAodHJ1ZSk7CiAgICB9KTsKICAgIGhhbmRsZXIub24oIlRlcm1pbmF0ZSIsIGZ1bmN0aW9uIChkYXRhKSB7CiAgICAgIHRlcm1pbmF0ZWQgPSB0cnVlOwogICAgICBjb25zdCB3YWl0T24gPSBbXTsKICAgICAgaWYgKHBkZk1hbmFnZXIpIHsKICAgICAgICBwZGZNYW5hZ2VyLnRlcm1pbmF0ZShuZXcgQWJvcnRFeGNlcHRpb24oIldvcmtlciB3YXMgdGVybWluYXRlZC4iKSk7CiAgICAgICAgY29uc3QgY2xlYW51cFByb21pc2UgPSBwZGZNYW5hZ2VyLmNsZWFudXAoKTsKICAgICAgICB3YWl0T24ucHVzaChjbGVhbnVwUHJvbWlzZSk7CiAgICAgICAgcGRmTWFuYWdlciA9IG51bGw7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY2xlYXJHbG9iYWxDYWNoZXMoKTsKICAgICAgfQogICAgICBjYW5jZWxYSFJzPy4obmV3IEFib3J0RXhjZXB0aW9uKCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQuIikpOwogICAgICBmb3IgKGNvbnN0IHRhc2sgb2YgV29ya2VyVGFza3MpIHsKICAgICAgICB3YWl0T24ucHVzaCh0YXNrLmZpbmlzaGVkKTsKICAgICAgICB0YXNrLnRlcm1pbmF0ZSgpOwogICAgICB9CiAgICAgIHJldHVybiBQcm9taXNlLmFsbCh3YWl0T24pLnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgIGhhbmRsZXIuZGVzdHJveSgpOwogICAgICAgIGhhbmRsZXIgPSBudWxsOwogICAgICB9KTsKICAgIH0pOwogICAgaGFuZGxlci5vbigiUmVhZHkiLCBmdW5jdGlvbiAoZGF0YSkgewogICAgICBzZXR1cERvYyhkb2NQYXJhbXMpOwogICAgICBkb2NQYXJhbXMgPSBudWxsOwogICAgfSk7CiAgICByZXR1cm4gd29ya2VySGFuZGxlck5hbWU7CiAgfQogIHN0YXRpYyBpbml0aWFsaXplRnJvbVBvcnQocG9ydCkgewogICAgY29uc3QgaGFuZGxlciA9IG5ldyBNZXNzYWdlSGFuZGxlcigid29ya2VyIiwgIm1haW4iLCBwb3J0KTsKICAgIHRoaXMuc2V0dXAoaGFuZGxlciwgcG9ydCk7CiAgICBoYW5kbGVyLnNlbmQoInJlYWR5IiwgbnVsbCk7CiAgfQp9Cgo7Ly8gLi9zcmMvcGRmLndvcmtlci5qcwoKY29uc3QgcGRmanNWZXJzaW9uID0gIjUuMS45MSI7CmNvbnN0IHBkZmpzQnVpbGQgPSAiNDVjYmU4YmIwIjsKCnZhciBfX3dlYnBhY2tfZXhwb3J0c19fV29ya2VyTWVzc2FnZUhhbmRsZXIgPSBfX3dlYnBhY2tfZXhwb3J0c19fLldvcmtlck1lc3NhZ2VIYW5kbGVyOwpleHBvcnQgeyBfX3dlYnBhY2tfZXhwb3J0c19fV29ya2VyTWVzc2FnZUhhbmRsZXIgYXMgV29ya2VyTWVzc2FnZUhhbmRsZXIgfTsKCi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBkZi53b3JrZXIubWpzLm1hcA==",typeof document>"u"?require("url").pathToFileURL(__filename).href:gh&&gh.tagName.toUpperCase()==="SCRIPT"&&gh.src||new URL("index.cjs",document.baseURI).href).toString();const I=t,g=gg.ref(1),C=gg.ref([]),i=gg.ref(""),e=gg.ref(1);let A=null;const s=()=>{let d=0;window.screen.width>1440?d=1.4:d=1.2,!(g.value>=d)&&(g.value=g.value+.1,n())},l=()=>{g.value<=1||(g.value=g.value-.1,n())},n=async()=>{A=await ndg(I.data).promise,C.value=A.numPages,a()},a=async(d=1)=>{e.value=d;const o=await A.getPage(d),c=document.getElementById("the_canvas"+d),r=c.getContext("2d"),h=window.devicePixelRatio||1,b=r.webkitBackingStorePixelRatio||r.mozBackingStorePixelRatio||r.msBackingStorePixelRatio||r.oBackingStorePixelRatio||r.backingStorePixelRatio||1,u=h/b,m=o.getViewport({scale:g.value});c.width=m.width*u,c.height=m.height*u,c.style.width=m.width+"px",i.value=m.width+"px",c.style.height=m.height+"px",r.setTransform(u,0,0,u,0,0);const Z={canvasContext:r,viewport:m};o.render(Z),C.value>d&&setTimeout(()=>a(d+1))};return gg.onMounted(()=>{n()}),(d,o)=>(gg.openBlock(),gg.createElementBlock("div",adg,[gg.createElementVNode("div",{class:"pdf_down"},[gg.createElementVNode("div",{class:"pdf_set_left",onClick:s},"➕"),gg.createElementVNode("div",{class:"pdf_set_middle",onClick:l},"➖")]),gg.createElementVNode("div",{style:gg.normalizeStyle({width:i.value,margin:"0 auto"})},[(gg.openBlock(!0),gg.createElementBlock(gg.Fragment,null,gg.renderList(C.value,c=>(gg.openBlock(),gg.createElementBlock("canvas",{id:"the_canvas"+c,key:c},null,8,odg))),128))],4)]))}},ddg=m0(cdg,[["__scopeId","data-v-58fcf604"]]);async function rdg(t,I){const g=gg.createApp(ddg,{data:t});return g.mount(I),{$el:I,$destroy(){g.unmount()}}}const hdg=["src"],bdg=["src"],udg={__name:"ImageViewer",props:{image:String,srcList:Array},setup(t){const I=t,g=gg.ref(!1),C=gg.ref(0),i=gg.computed(()=>{const d=Array.isArray(I.srcList)?I.srcList:[];if(d.length)return d.map(c=>String(c||"")).filter(Boolean);const o=String(I.image||"");return o?[o]:[]}),e=gg.computed(()=>({visible:g.value,open:A,close:s,next:l,prev:n}));function A(d=0){i.value.length&&(C.value=Math.max(0,Math.min(i.value.length-1,Number(d)||0)),g.value=!0)}function s(){g.value=!1}function l(){i.value.length<=1||(C.value=(C.value+1)%i.value.length)}function n(){i.value.length<=1||(C.value=(C.value-1+i.value.length)%i.value.length)}function a(d){g.value&&(d.key==="Escape"&&s(),d.key==="ArrowRight"&&l(),d.key==="ArrowLeft"&&n())}return gg.onMounted(()=>{window.addEventListener("keydown",a)}),gg.onBeforeUnmount(()=>{window.removeEventListener("keydown",a)}),(d,o)=>(gg.openBlock(),gg.createElementBlock("div",null,[gg.renderSlot(d.$slots,"image",{src:i.value[0],srcList:i.value,index:C.value,preview:e.value},()=>[i.value[0]?(gg.openBlock(),gg.createElementBlock("img",{key:0,class:"image",src:i.value[0],alt:"",onClick:o[0]||(o[0]=c=>A(0))},null,8,hdg)):gg.createCommentVNode("",!0)],!0),g.value?(gg.openBlock(),gg.createElementBlock("div",{key:0,class:"viewfile-image-preview",onClick:gg.withModifiers(s,["self"])},[gg.createElementVNode("button",{class:"viewfile-image-preview-close",type:"button",onClick:s},"×"),i.value.length>1?(gg.openBlock(),gg.createElementBlock("button",{key:0,class:"viewfile-image-preview-prev",type:"button",onClick:gg.withModifiers(n,["stop"])},"‹")):gg.createCommentVNode("",!0),gg.createElementVNode("img",{class:"viewfile-image-preview-img",src:i.value[C.value],alt:""},null,8,bdg),i.value.length>1?(gg.openBlock(),gg.createElementBlock("button",{key:1,class:"viewfile-image-preview-next",type:"button",onClick:gg.withModifiers(l,["stop"])},"›")):gg.createCommentVNode("",!0)])):gg.createCommentVNode("",!0)]))}},mdg=m0(udg,[["__scopeId","data-v-00723940"]]);async function Zdg(t,I){const g=await J9(t),C=gg.createApp(mdg,{image:g});return C.mount(I),{$el:I,$destroy(){C.unmount()}}}const Gdg={class:"code-area"},wdg={__name:"CodeViewer",props:{value:{type:String,description:"值"}},setup(t){return(I,g)=>(gg.openBlock(),gg.createElementBlock("pre",Gdg," "+gg.toDisplayString(t.value)+`
- `,1))}},pdg=m0(wdg,[["__scopeId","data-v-215846b2"]]);async function Bdg(t,I){const g=await lig(t),C=gg.createApp(pdg,{value:g});return C.mount(I),{$el:I,$destroy(){C.unmount()}}}function qg(t){const I=Number(t);return Number.isFinite(I)?I:0}function e8(t){const I=Number.parseFloat(String(t??""));return Number.isFinite(I)?I:0}function $Z(t,I){return`${t}-${I}`}function th(t){if(!t)return"";try{const g=new DOMParser().parseFromString(t,"text/html");return["script","style","iframe","object","embed","link","meta"].forEach(i=>{g.querySelectorAll(i).forEach(e=>e.remove())}),g.querySelectorAll("*").forEach(i=>{Array.from(i.attributes).forEach(A=>{const s=A.name.toLowerCase(),l=String(A.value||"").trim().toLowerCase();s.startsWith("on")&&i.removeAttribute(A.name),(s==="href"||s==="src")&&l.startsWith("javascript:")&&i.removeAttribute(A.name)});const e=i.getAttribute("style");if(e){let A=e.replace(/font-size\s*:\s*([\d.]+)pt/gi,(s,l)=>{const n=Number(l);return Number.isFinite(n)?`font-size: ${(n*96/72).toFixed(3).replace(/\.0+$/,"").replace(/(\.\d*?)0+$/,"$1")}px`:s});/text-align\s*:\s*justify/i.test(A)&&(/text-align-last/i.test(A)||(A+=";text-align-last:justify"),/text-justify/i.test(A)||(A+=";text-justify:inter-character")),A!==e&&i.setAttribute("style",A)}}),g.body.innerHTML}catch{return t}}function Wdg(t,I){const g=qg(t.order)||I;return`${t.type||"el"}-${g}`}function XI(t,I,g){const C=qg(t.order)||I,e=`${String(t.type||"el")}-${C}`;return g?`${g}/${e}`:e}function bIg(t){const g=[t.radius,t.cornerRadius,t.rx].map(qg).find(C=>C>0)||0;return g?`${g}px`:void 0}function LV(t){const I=String(t.borderColor??t.stroke??t.lineColor??""),g=qg(t.borderWidth??t.strokeWidth??t.lineWidth),C=String(t.borderStrokeDasharray??t.strokeDasharray??t.dasharray??""),i=t.border&&typeof t.border=="object"?t.border:null,e=t.line&&typeof t.line=="object"?t.line:null,A=String((i==null?void 0:i.color)??(e==null?void 0:e.color)??""),s=qg((i==null?void 0:i.width)??(e==null?void 0:e.width)),l=String((i==null?void 0:i.dasharray)??(e==null?void 0:e.dasharray)??""),n=I||A,a=g||s,d=(C&&C!=="0"?C:"")||(l&&l!=="0"?l:"");return{color:n||"transparent",width:Math.max(0,a),dasharray:d||void 0}}function ydg(t){const I=(t==null?void 0:t.ph)??(t==null?void 0:t.placeholder)??(t==null?void 0:t.placeHolder)??null,g=String((I==null?void 0:I.type)??(I==null?void 0:I.phType)??(t==null?void 0:t.phType)??(t==null?void 0:t.placeholderType)??"").trim().toLowerCase(),C=qg((I==null?void 0:I.idx)??(I==null?void 0:I.phIdx)??(t==null?void 0:t.phIdx)??(t==null?void 0:t.idx)??(t==null?void 0:t.placeholderIdx)??(t==null?void 0:t.phIndex)),i=String((I==null?void 0:I.id)??(t==null?void 0:t.phId)??(t==null?void 0:t.placeholderId)??"").trim();return!g&&!C&&!i?null:{type:g,idx:C,id:i}}function A8(t){const I=ydg(t);if(!I)return"";const g=I.id||(I.idx?String(I.idx):"");return g?`${I.type||"ph"}:${g}`:`${I.type||"ph"}`}function Ydg(t){const I=String(t||"").trim();return I?/click to add/i.test(I)||/单击.*添加/.test(I)||/点击.*添加/.test(I)||/添加(标题|文本|内容)/.test(I):!1}function MY(t){const I=qg(t);return I?I>1?Math.max(0,Math.min(1,I/100)):Math.max(0,Math.min(1,I)):0}function uIg(t){const I=t==null?void 0:t.rect,g=t==null?void 0:t.crop,C=I&&typeof I=="object"?I:g&&typeof g=="object"?g:null;if(!C)return null;const i=MY(C.t),e=MY(C.b),A=MY(C.l),s=MY(C.r);if(!i&&!e&&!A&&!s)return null;const l=Math.max(0,Math.min(.9,A)),n=Math.max(0,Math.min(.9,s)),a=Math.max(0,Math.min(.9,i)),d=Math.max(0,Math.min(.9,e));return l+n>=.98||a+d>=.98?null:{t:a,b:d,l,r:n}}function Ndg(t){return String((t==null?void 0:t.geom)||(t==null?void 0:t.shapeType)||"").toLowerCase()}function mIg(t){const I=Ndg(t);return{width:"100%",height:"100%",position:"relative",overflow:"hidden",borderRadius:I==="ellipse"||I==="circle"?"50%":bIg(t)}}function SH(t,I=1){if(t==null)return I;const g=qg(t);if(!g)return I;const C=g>10?g/100:g;return Math.max(0,Math.min(3,C))}function Vdg(t){const I=t==null?void 0:t.filters;if(!I||typeof I!="object")return;const g=SH(I.brightness,1),C=SH(I.contrast,1),i=SH(I.saturation,1),e=qg(I.colorTemperature),A=[];if(g!==1&&A.push(`brightness(${g})`),C!==1&&A.push(`contrast(${C})`),i!==1&&A.push(`saturate(${i})`),e){const s=Math.max(-100,Math.min(100,e)),l=s*.6,n=Math.min(1,Math.abs(s)/200);A.push(`hue-rotate(${l}deg)`),s>0&&n&&A.push(`sepia(${n})`)}return A.length?A.join(" "):void 0}function ZIg(t){const I=uIg(t),g=Vdg(t);if(!I)return{width:"100%",height:"100%",objectFit:"fill",filter:g,display:"block"};const C=1/(1-I.l-I.r),i=1/(1-I.t-I.b),e=-I.l*100,A=-I.t*100;return{width:"100%",height:"100%",objectFit:"fill",display:"block",transformOrigin:"top left",transform:`translate(${e}%, ${A}%) scale(${C}, ${i})`,filter:g}}function Ue(t){var i,e,A,s;const I=typeof t.fill=="object"&&t.fill?t.fill:null,C=[t.src,t.url,t.picBase64,t.mediaBase64,t.base64,t.blob,t.blobUrl,(i=t.value)==null?void 0:i.picBase64,(e=t.value)==null?void 0:e.src,(A=I==null?void 0:I.value)==null?void 0:A.picBase64,(s=I==null?void 0:I.value)==null?void 0:s.src].find(l=>typeof l=="string"&&l.trim());return C?String(C):""}function vV(t){const I=String(t.type||"").toLowerCase();return I==="shape"||I==="rect"||I==="line"}function n9(t){var g,C;if(typeof t.fill=="object"&&((g=t.fill)==null?void 0:g.type)==="image")return!0;if(typeof t.fill=="object"&&t.fill){const i=(C=t.fill)==null?void 0:C.value;if(i&&(typeof i.picBase64=="string"||typeof i.src=="string")||typeof t.fill.picBase64=="string"||typeof t.fill.src=="string")return!0}const I=String(t.type||"").toLowerCase();return I==="pic"||I==="picture"}function a9(t){const I=String(t.type||"").toLowerCase();if(n9(t))return!1;if(I==="image"||I==="pic"||I==="picture")return!0;const g=Ue(t);return!!g&&/^data:image\//i.test(g)}function o9(t){if(String(t.type||"").toLowerCase()==="video")return!0;const g=Ue(t);return!!g&&/^data:video\//i.test(g)}function c9(t){if(String(t.type||"").toLowerCase()==="audio")return!0;const g=Ue(t);return!!g&&/^data:audio\//i.test(g)}function GIg(t){return String(t.type||"").toLowerCase()==="table"}function wIg(t){const I=String(t.type||"").toLowerCase();return I==="chart"||I==="charts"}function pIg(t){const I=String(t.type||"").toLowerCase();return I==="group"||I==="groupshape"||I==="grpsp"||I==="grp"||[t==null?void 0:t.elements,t==null?void 0:t.children,t==null?void 0:t.childrens,t==null?void 0:t.items,t==null?void 0:t.spTree].some(i=>Array.isArray(i)&&i.length)?!0:I.includes("group")}function BIg(t){const I=String(t.type||"").toLowerCase();return I==="math"||I==="equation"}function WIg(t){const I=String(t.type||"").toLowerCase();return I==="diagram"||I==="smartart"||I==="smart_art"}function Mdg(t){var I,g,C,i,e;if(!t||!t.type)return"#fff";if(t.type==="color")return String(t.value||"#fff");if(t.type==="gradient"){const A=Array.isArray((I=t.value)==null?void 0:I.colors)?t.value.colors:[],s=qg((g=t.value)==null?void 0:g.rot),l=String(((C=t.value)==null?void 0:C.path)||"rect"),n=A.map(a=>{const d=String((a==null?void 0:a.pos)??""),o=String((a==null?void 0:a.color)??"");return o?d?`${o} ${d}`:o:""}).filter(Boolean).join(", ");return n?l==="rect"?`linear-gradient(${(90-s+360)%360}deg, ${n})`:`radial-gradient(circle, ${n})`:"#fff"}if(t.type==="image"){const A=String(((i=t.value)==null?void 0:i.picBase64)||((e=t.value)==null?void 0:e.src)||"");return A?`center / cover no-repeat url(${A})`:"#fff"}return"#fff"}function Rdg(t,I){const g=qg(t.order)||I,i=(t==null?void 0:t.__source)==="slide"?1e5:0;return g+i}function yIg(t){const I=t==null?void 0:t.shadow;if(!I||typeof I!="object")return;const g=qg(I.h),C=qg(I.v),i=Math.max(0,qg(I.blur)),e=String(I.color||"").trim();if(!(!e||!g&&!C&&!i))return`drop-shadow(${g}px ${C}px ${i}px ${e})`}function YIg(t){if(vV(t))return;const I=LV(t);if(I.width)return`${I.width}px solid ${I.color}`}function NIg(t){var g,C,i;if(vV(t)||n9(t)||a9(t)||o9(t)||c9(t))return;if(typeof t.fill=="string"){const e=t.fill.trim();return e||void 0}const I=typeof t.fill=="object"&&t.fill?t.fill:null;if(!(!I||!I.type)){if(I.type==="color")return String(I.value||"")||void 0;if(I.type==="gradient"){const e=Array.isArray((g=I.value)==null?void 0:g.colors)?I.value.colors:[],A=qg((C=I.value)==null?void 0:C.rot),s=String(((i=I.value)==null?void 0:i.path)||"rect"),l=e.map(n=>{const a=String((n==null?void 0:n.pos)??""),d=String((n==null?void 0:n.color)??"");return d?a?`${d} ${a}`:d:""}).filter(Boolean).join(", ");return l?s==="rect"?`linear-gradient(${(90-A+360)%360}deg, ${l})`:`radial-gradient(circle, ${l})`:void 0}}}function fdg(t,I){const g=qg(t.left),C=qg(t.top),i=Math.max(0,qg(t.width)),e=Math.max(0,qg(t.height)),A=qg(t.rotate),s=!!t.isFlipH,l=!!t.isFlipV,n=Rdg(t,I),a=t.opacity==null?1:Math.max(0,Math.min(1,qg(t.opacity))),d=[];A&&d.push(`rotate(${A}deg)`),s&&d.push("scaleX(-1)"),l&&d.push("scaleY(-1)");const o=NIg(t),c=YIg(t),r=bIg(t),h=yIg(t);return{position:"absolute",left:`${g}px`,top:`${C}px`,width:`${i}px`,height:`${e}px`,zIndex:n,opacity:a,background:o,border:c,borderRadius:r,filter:h,transformOrigin:"center center",transform:d.length?d.join(" "):void 0}}function EN(t){return{position:"absolute",left:0,top:0,width:"100%",height:"100%",display:"table"}}function PN(t){const I=t==null?void 0:t.autoFit,g=I&&typeof I=="object"?qg(I.fontScale):1,C=g&&g!==1?Math.max(.1,Math.min(5,g)):1,i=!!(t!=null&&t.isVertical),e=i?"vertical-rl":void 0,A=i?"mixed":void 0,s=String(t.vAlign||"up"),l=s==="down"?"bottom":s==="mid"?"middle":"top";return C===1?{display:"table-cell",width:"100%",height:"100%",verticalAlign:l,writingMode:e,textOrientation:A}:{display:"table-cell",width:"100%",height:"100%",position:"absolute",left:0,top:0,verticalAlign:l,writingMode:e,textOrientation:A}}const Yu=new Map;function Di(t,I,g){var w;const C=`c-${$Z(I,g)}`,i=Yu.get(C);if(i)return i;const e=Math.max(1,qg(t.width)),A=Math.max(1,qg(t.height)),s=String((t==null?void 0:t.chartType)||"").toLowerCase(),l=Array.isArray(t==null?void 0:t.colors)?t.colors:[],n=l.length?l.map(W=>String(W||"").trim()).filter(Boolean):[],a=W=>n[W%Math.max(1,n.length)]||"#4e79a7",d=t.opacity==null?1:Math.max(0,Math.min(1,qg(t.opacity))),o=Math.max(4,Math.min(24,Math.round(Math.min(e,A)*.08))),c=s.includes("pie")||s.includes("doughnut"),r=s.includes("bar")||s.includes("col");if(s.includes("scatter")||s.includes("bubble")){const W=t==null?void 0:t.data,y=Array.isArray(W==null?void 0:W[0])?W[0]:[],f=Array.isArray(W==null?void 0:W[1])?W[1]:[],D=Math.min(y.length,f.length),F=D?Math.min(...y.slice(0,D)):0,T=D?Math.max(...y.slice(0,D)):1,Q=D?Math.min(...f.slice(0,D)):0,P=D?Math.max(...f.slice(0,D)):1,L=T-F||1,E=P-Q||1,J=Math.max(1,e-o*2),k=Math.max(1,A-o*2),j=[];for(let tg=0;tg<D;tg++){const Cg=o+(y[tg]-F)/L*J,x=o+(1-(f[tg]-Q)/E)*k;j.push({cx:Cg,cy:x,r:3,fill:a(0),opacity:d})}const q={kind:"scatter",bars:[],paths:[],points:j,slices:[],cx:0,cy:0,holeR:0};return Yu.set(C,q),q}const b=t==null?void 0:t.data;if(c){const W=Array.isArray(b)?b:[],f=(Array.isArray((w=W==null?void 0:W[0])==null?void 0:w.values)?W[0].values:[]).map(k=>({y:qg(k==null?void 0:k.y),x:String((k==null?void 0:k.x)??"")})).filter(k=>Number.isFinite(k.y)&&k.y>0),D=f.reduce((k,j)=>k+j.y,0)||1,F=e/2,T=A/2,Q=Math.max(2,Math.min(e,A)/2-o),P=s.includes("doughnut")?Q*.55:0;let L=-Math.PI/2;const E=[];f.forEach((k,j)=>{const q=k.y/D*Math.PI*2,tg=L+q,Cg=F+Q*Math.cos(L),x=T+Q*Math.sin(L),sg=F+Q*Math.cos(tg),Ag=T+Q*Math.sin(tg),O=q>Math.PI?1:0,_=`M ${F} ${T} L ${Cg} ${x} A ${Q} ${Q} 0 ${O} 1 ${sg} ${Ag} Z`;E.push({d:_,fill:a(j),opacity:d}),L=tg});const J={kind:"pie",bars:[],paths:[],points:[],slices:E,cx:F,cy:T,holeR:P};return Yu.set(C,J),J}const m=(Array.isArray(b)?b:[]).map(W=>{const f=(Array.isArray(W==null?void 0:W.values)?W.values:[]).map(D=>({y:qg(D==null?void 0:D.y),x:String((D==null?void 0:D.x)??"")})).filter(D=>Number.isFinite(D.y));return{name:String((W==null?void 0:W.name)??""),values:f}}).filter(W=>W.values.length),Z=Array.from(new Set(m.flatMap(W=>W.values.map(y=>y.x)).filter(W=>W!=null).map(W=>String(W)))),p=Math.max(1,Z.length),Y=Math.max(1,m.length),R=Math.max(1,...m.flatMap(W=>W.values.map(y=>y.y)).filter(W=>Number.isFinite(W))),X=Math.max(1,e-o*2),H=Math.max(1,A-o*2),S=String((t==null?void 0:t.barDir)||"col").toLowerCase();if(r){const W=[];if(S==="bar"){const f=H/p,D=f*.8,F=(f-D)/2,T=D/Y;for(let Q=0;Q<p;Q++)for(let P=0;P<m.length;P++){const L=m[P].values.find(q=>q.x===Z[Q]),J=(L?L.y:0)/R*X,k=o,j=o+Q*f+F+P*T;W.push({x:k,y:j,w:Math.max(0,J),h:Math.max(0,T*.9),fill:a(P),opacity:d})}}else{const f=X/p,D=f*.8,F=(f-D)/2,T=D/Y;for(let Q=0;Q<p;Q++)for(let P=0;P<m.length;P++){const L=m[P].values.find(q=>q.x===Z[Q]),J=(L?L.y:0)/R*H,k=o+Q*f+F+P*T,j=o+(H-J);W.push({x:k,y:j,w:Math.max(0,T*.9),h:Math.max(0,J),fill:a(P),opacity:d})}}const y={kind:"bar",bars:W,paths:[],points:[],slices:[],cx:0,cy:0,holeR:0};return Yu.set(C,y),y}const z=[],v=[],K=Math.max(1,Math.round(Math.min(e,A)*.01)),V=!!(t!=null&&t.marker),N=W=>o+(p===1?X/2:W/(p-1)*X),B=W=>o+(1-W/R)*H;m.forEach((W,y)=>{let f="";Z.forEach((D,F)=>{const T=W.values.find(E=>E.x===D),Q=T?T.y:0,P=N(F),L=B(Q);f+=F===0?`M ${P} ${L}`:` L ${P} ${L}`,V&&v.push({cx:P,cy:L,r:K*.9+1,fill:a(y),opacity:d})}),z.push({d:f,stroke:a(y),strokeWidth:K})});const G={kind:"line",bars:[],paths:z,points:v,slices:[],cx:0,cy:0,holeR:0};return Yu.set(C,G),G}const s8=new Map;function lm(t,I,g){const C=`t-${$Z(I,g)}`,i=s8.get(C);if(i)return i;const e=t==null?void 0:t.data,A=Array.isArray(e)?e:[],s=t==null?void 0:t.colWidths,l=t==null?void 0:t.rowHeights,n=Array.isArray(s)?s.map(qg):[],a=Array.isArray(l)?l.map(qg):[],d=A.map(c=>(Array.isArray(c)?c:[]).map(h=>Xdg(t,h))),o={colWidths:n,rowHeights:a,rows:d};return s8.set(C,o),o}function VIg(t,I,g,C){const e=lm(t,I,g).rowHeights[C];if(e)return{height:`${e}px`}}function Hdg(t){const I=t.match(/text-align\s*:\s*(left|right|center|justify)/i);return I?I[1].toLowerCase():"left"}function RY(t){if(!t)return"";const I=String(t.borderColor||""),g=Math.max(0,qg(t.borderWidth)),C=String(t.borderType||"solid");return!I||!g?"":`${g}px ${C==="dashed"||C==="dash"?"dashed":"solid"} ${I}`}function Xdg(t,I){const g=I&&typeof I=="object"?I:{},C=String(g.text??g.content??g.html??""),i=Math.max(1,qg(g.colSpan??g.colspan??g.gridSpan)||1),e=Math.max(1,qg(g.rowSpan??g.rowspan)||1),A=qg(g.hMerge)===1||qg(g.vMerge)===1,s=String(g.fillColor||"")||void 0,l=String(g.fontColor||"")||void 0,n=g.fontBold?700:void 0,a=g.fontItalic?"italic":void 0,d=C?Hdg(C):void 0,o=g.borders||(t==null?void 0:t.borders)||void 0,c=RY(o==null?void 0:o.top),r=RY(o==null?void 0:o.right),h=RY(o==null?void 0:o.bottom),b=RY(o==null?void 0:o.left);return{html:C,colspan:i,rowspan:e,skip:A,style:{padding:"2px 4px",verticalAlign:"middle",background:s,color:l,fontWeight:n,fontStyle:a,textAlign:d,borderTop:c||void 0,borderRight:r||void 0,borderBottom:h||void 0,borderLeft:b||void 0,overflow:"hidden"}}}function d9(t){return t.replace(/[^a-zA-Z0-9_-]/g,"_")}function es(t,I,g){var l,n,a;const C=typeof t.fill=="object"?t.fill:null;if(!C||C.type!=="pattern"||!C.value)return null;const i=String(((l=C.value)==null?void 0:l.type)||""),e=String(((n=C.value)==null?void 0:n.foregroundColor)||"#000"),A=String(((a=C.value)==null?void 0:a.backgroundColor)||"#fff"),s=`pptx-pattern-${I}-${d9(g)}`;return i==="pct5"?{id:s,width:10,height:10,background:A,shapes:[{kind:"circle",cx:5,cy:5,r:1.2,fill:e}]}:i==="solidDmnd"?{id:s,width:12,height:12,background:A,shapes:[{kind:"polygon",points:"6,0 12,6 6,12 0,6",fill:e}]}:{id:s,width:10,height:10,background:A,shapes:[{kind:"circle",cx:5,cy:5,r:1,fill:e}]}}function nm(t,I,g){const C=typeof t.fill=="object"?t.fill:null;if(!C)return null;const i=C==null?void 0:C.value;if(!(C.type==="image"||!!i&&(typeof i.picBase64=="string"||typeof i.src=="string")||typeof C.picBase64=="string"||typeof C.src=="string"))return null;const A=Ue(t);return A?{id:`pptx-shape-img-${I}-${d9(g)}`,href:A}:null}const je={pattern:new Map,image:new Map,gradient:new Map};function MIg(t,I,g){const C=`p-${$Z(I,g)}`;if(je.pattern.has(C))return je.pattern.get(C);const i=es(t,I,g);return je.pattern.set(C,i),i}function YN(t,I,g){const C=`i-${$Z(I,g)}`;if(je.image.has(C))return je.image.get(C);const i=nm(t,I,g);return je.image.set(C,i),i}function Sdg(t){const I=String(t??"").trim();if(!I)return"";if(I.endsWith("%"))return I;const g=Number(I);return Number.isFinite(g)?`${g}%`:I}function Ie(t,I,g){var m,Z,p;const C=`g-${$Z(I,g)}`;if(je.gradient.has(C))return je.gradient.get(C);const i=typeof t.fill=="object"?t.fill:null;if(!i||i.type!=="gradient"||!i.value)return je.gradient.set(C,null),null;const e=Array.isArray((m=i.value)==null?void 0:m.colors)?i.value.colors:[],A=qg((Z=i.value)==null?void 0:Z.rot),s=String(((p=i.value)==null?void 0:p.path)||"rect"),l=e.map(Y=>{const R=Sdg(Y==null?void 0:Y.pos),X=String((Y==null?void 0:Y.color)??"").trim(),H=(Y==null?void 0:Y.alpha)??(Y==null?void 0:Y.opacity),S=H==null?void 0:Math.max(0,Math.min(1,qg(H)));return X?{offset:R||void 0,color:X,opacity:S}:null}).filter(Boolean),n=`pptx-grad-${I}-${d9(g)}`;if(!l.length)return je.gradient.set(C,null),null;if(s!=="rect"){const Y={id:n,kind:"radial",stops:l.map(R=>({...R,offset:R.offset||"0%"}))};return je.gradient.set(C,Y),Y}const a=(90-A+360)%360*(Math.PI/180),d=Math.cos(a),o=Math.sin(a),c=.5-d/2,r=.5+o/2,h=.5+d/2,b=.5-o/2,u={id:n,kind:"linear",x1:`${Math.max(0,Math.min(1,c))*100}%`,y1:`${Math.max(0,Math.min(1,r))*100}%`,x2:`${Math.max(0,Math.min(1,h))*100}%`,y2:`${Math.max(0,Math.min(1,b))*100}%`,stops:l.map(Y=>({...Y,offset:Y.offset||"0%"}))};return je.gradient.set(C,u),u}function RIg(t,I,g){return!!(Ie(t,I,g)||MIg(t,I,g)||YN(t,I,g))}function fIg(t,I,g){var e;const C=typeof t.fill=="object"?t.fill:null,i=String(t.type||"").toLowerCase().includes("pic");if((!C||!C.type)&&i){const A=YN(t,I,g);return A?`url(#${A.id})`:"transparent"}if(!C||!C.type)return"transparent";if(C.type==="color")return String(C.value||"transparent");if(C.type==="gradient"){const A=Ie(t,I,g);return A?`url(#${A.id})`:"transparent"}if(C.type==="pattern"){const A=MIg(t,I,g);return A?`url(#${A.id})`:String(((e=C.value)==null?void 0:e.foregroundColor)||"transparent")}if(C.type==="image"||i||C.type==null&&YN(t,I,g)){const A=YN(t,I,g);return A?`url(#${A.id})`:"transparent"}return"transparent"}function HIg(t){return LV(t).color||"transparent"}function XIg(t){const I=LV(t);return Math.max(0,I.width)}function SIg(t){return LV(t).dasharray}function DIg(t){const I=typeof t.path=="string"?String(t.path).trim():"";if(I)return I;const g=Math.max(0,qg(t.width)),C=Math.max(0,qg(t.height)),i=String(t.shapType||t.shapeType||t.geom||"").toLowerCase(),e=!!t.isFlipH,A=!!t.isFlipV;if(i==="line"||i==="connector"||i==="straightconnector1")return A&&e?`M ${g} ${C} L 0 0`:A?`M 0 ${C} L ${g} 0`:e?`M ${g} 0 L 0 ${C}`:`M 0 0 L ${g} ${C}`;if(g<=0||C<=0)return g>0?`M 0 0 L ${g} 0`:C>0?`M 0 0 L 0 ${C}`:"";if(i==="ellipse"||i==="circle"){const l=g/2,n=C/2,a=g/2,d=C/2;return`M ${l-a} ${n} A ${a} ${d} 0 1 0 ${l+a} ${n} A ${a} ${d} 0 1 0 ${l-a} ${n} Z`}if(i==="triangle"||i==="tri")return`M ${g/2} 0 L ${g} ${C} L 0 ${C} Z`;if(i==="diamond"||i==="rhombus")return`M ${g/2} 0 L ${g} ${C/2} L ${g/2} ${C} L 0 ${C/2} Z`;const s=Math.max(0,Math.min(Math.min(g,C)/2,qg(t.radius||t.cornerRadius||t.rx)));if(s){const l=Math.min(s,g/2,C/2);return`M ${l} 0 H ${g-l} A ${l} ${l} 0 0 1 ${g} ${l} V ${C-l} A ${l} ${l} 0 0 1 ${g-l} ${C} H ${l} A ${l} ${l} 0 0 1 0 ${C-l} V ${l} A ${l} ${l} 0 0 1 ${l} 0 Z`}return`M 0 0 H ${g} V ${C} H 0 Z`}function Ddg(t){var C;const I=[t==null?void 0:t.elements,t==null?void 0:t.children,t==null?void 0:t.childrens,t==null?void 0:t.items,t==null?void 0:t.spTree,(C=t==null?void 0:t.spTree)==null?void 0:C.elements],g=[];return I.forEach(i=>{Array.isArray(i)&&i.forEach(e=>{e&&typeof e=="object"&&g.push(e)})}),g}function Kdg(t){const I=String(t||"").match(/-?\d*\.?\d+(?:e[-+]?\d+)?/gi);if(!I||I.length<2)return null;let g=0,C=0;for(let i=0;i+1<I.length;i+=2){const e=Number(I[i]),A=Number(I[i+1]);Number.isFinite(e)&&(g=Math.max(g,Math.abs(e))),Number.isFinite(A)&&(C=Math.max(C,Math.abs(A)))}return!g||!C?null:{vbW:g,vbH:C}}function KIg(t){const I=(t==null?void 0:t.chOff)??(t==null?void 0:t.childOff)??(t==null?void 0:t.childOffset)??null,g=(t==null?void 0:t.chExt)??(t==null?void 0:t.childExt)??(t==null?void 0:t.childExtent)??null,C=qg((I==null?void 0:I.x)??(I==null?void 0:I.left)??(I==null?void 0:I.l)??(t==null?void 0:t.chOffX)??(t==null?void 0:t.childOffX)),i=qg((I==null?void 0:I.y)??(I==null?void 0:I.top)??(I==null?void 0:I.t)??(t==null?void 0:t.chOffY)??(t==null?void 0:t.childOffY)),e=qg((g==null?void 0:g.cx)??(g==null?void 0:g.w)??(g==null?void 0:g.width)??(t==null?void 0:t.chExtW)??(t==null?void 0:t.childExtW)),A=qg((g==null?void 0:g.cy)??(g==null?void 0:g.h)??(g==null?void 0:g.height)??(t==null?void 0:t.chExtH)??(t==null?void 0:t.childExtH));return!e||!A?null:{offX:C,offY:i,extW:e,extH:A}}function Fdg(t,I,g,C,i){const e=Math.max(0,qg(t.width)),A=Math.max(0,qg(t.height)),s=qg(I.left),l=qg(I.top),n=Math.max(0,qg(I.width)),a=Math.max(0,qg(I.height)),d=s>=-.5&&l>=-.5&&s+n<=e+.5&&l+a<=A+.5,o=KIg(t),c=o&&e?e/o.extW:1,r=o&&A?A/o.extH:1,h=d?s:o?(s-o.offX)*c:s-C,b=d?l:o?(l-o.offY)*r:l-i,u=o&&!d?n*c:n,m=o&&!d?a*r:a,Z=qg(I.rotate),p=!!I.isFlipH,Y=!!I.isFlipV,R=qg(I.order)||g,X=I.opacity==null?1:Math.max(0,Math.min(1,qg(I.opacity))),H=[];Z&&H.push(`rotate(${Z}deg)`),p&&H.push("scaleX(-1)"),Y&&H.push("scaleY(-1)");const S=NIg(I),z=YIg(I),v=yIg(I);return{position:"absolute",left:`${h}px`,top:`${b}px`,width:`${u}px`,height:`${m}px`,zIndex:R,opacity:X,background:S,border:z,filter:v,transformOrigin:"center center",transform:H.length?H.join(" "):void 0}}const FIg=gg.defineComponent({name:"PptxGroup",props:{el:{type:Object,required:!0},slideIndex:{type:Number,required:!0},cacheId:{type:String,required:!0},absLeft:{type:Number,required:!0},absTop:{type:Number,required:!0}},setup(t){const I=(C,i,e,A,s)=>{if(!RIg(C,i,e))return null;const l=Ie(C,i,e),n=es(C,i,e),a=nm(C,i,e),d=[];if((l==null?void 0:l.kind)==="linear"?d.push(gg.h("linearGradient",{id:l.id,x1:l.x1,y1:l.y1,x2:l.x2,y2:l.y2},l.stops.map((o,c)=>gg.h("stop",{key:c,offset:o.offset,"stop-color":o.color,"stop-opacity":o.opacity})))):(l==null?void 0:l.kind)==="radial"&&d.push(gg.h("radialGradient",{id:l.id,cx:"50%",cy:"50%",r:"50%"},l.stops.map((o,c)=>gg.h("stop",{key:c,offset:o.offset,"stop-color":o.color,"stop-opacity":o.opacity})))),n&&d.push(gg.h("pattern",{id:n.id,patternUnits:"userSpaceOnUse",width:n.width,height:n.height},[gg.h("rect",{x:0,y:0,width:n.width,height:n.height,fill:n.background}),...n.shapes.map((o,c)=>o.kind==="circle"?gg.h("circle",{key:c,cx:o.cx,cy:o.cy,r:o.r,fill:o.fill}):o.kind==="polygon"?gg.h("polygon",{key:c,points:o.points,fill:o.fill}):gg.h("rect",{key:c,x:o.x,y:o.y,width:o.width,height:o.height,fill:o.fill,transform:o.transform}))])),a){const o=uIg(C),c=o?1/(1-o.l-o.r):1,r=o?1/(1-o.t-o.b):1,h=o?-o.l*c:0,b=o?-o.t*r:0;d.push(gg.h("pattern",{id:a.id,patternUnits:"userSpaceOnUse",patternContentUnits:"userSpaceOnUse",x:0,y:0,width:A,height:s},[gg.h("image",{x:h*A,y:b*s,width:c*A,height:r*s,href:a.href,"xlink:href":a.href,preserveAspectRatio:"none"})]))}return d.length?gg.h("defs",null,d):null},g=(C,i,e,A,s,l)=>{const n=Fdg(e,C,i,A,s),a=XI(C,i,l),d=e8(n==null?void 0:n.left),o=e8(n==null?void 0:n.top),c=A+d,r=s+o,h=KIg(e),b=Math.max(0,qg(e.width)),u=Math.max(0,qg(e.height)),m=h&&b?b/h.extW:1,Z=h&&u?u/h.extH:1;if(a9(C))return gg.h("div",{key:a,class:"pptx-element",style:n},[gg.h("div",{class:"pptx-img-wrap",style:mIg(C)},[gg.h("img",{class:"pptx-img",src:Ue(C),style:ZIg(C),alt:"",draggable:!1})])]);if(o9(C))return gg.h("div",{key:a,class:"pptx-element",style:n},[gg.h("video",{class:"pptx-media",src:Ue(C),controls:!0,preload:"metadata"})]);if(c9(C))return gg.h("div",{key:a,class:"pptx-element",style:n},[gg.h("audio",{class:"pptx-media",src:Ue(C),controls:!0,preload:"metadata"})]);if(BIg(C))return gg.h("div",{key:a,class:"pptx-element",style:n},[gg.h("img",{class:"pptx-img",src:Ue(C),alt:"",draggable:!1})]);if(wIg(C)){const Y=Di(C,t.slideIndex,a),R=[];return Y.kind==="bar"?R.push(...Y.bars.map((X,H)=>gg.h("rect",{key:H,x:X.x,y:X.y,width:X.w,height:X.h,fill:X.fill,"fill-opacity":X.opacity}))):Y.kind==="line"?(R.push(...Y.paths.map((X,H)=>gg.h("path",{key:H,d:X.d,fill:"none",stroke:X.stroke,"stroke-width":X.strokeWidth,"stroke-linejoin":"round","stroke-linecap":"round"}))),R.push(...Y.points.map((X,H)=>gg.h("circle",{key:H,cx:X.cx,cy:X.cy,r:X.r,fill:X.fill,"fill-opacity":X.opacity})))):Y.kind==="pie"?(R.push(...Y.slices.map((X,H)=>gg.h("path",{key:H,d:X.d,fill:X.fill,"fill-opacity":X.opacity}))),Y.holeR&&R.push(gg.h("circle",{cx:Y.cx,cy:Y.cy,r:Y.holeR,fill:"#fff"}))):Y.kind==="scatter"&&R.push(...Y.points.map((X,H)=>gg.h("circle",{key:H,cx:X.cx,cy:X.cy,r:X.r,fill:X.fill,"fill-opacity":X.opacity}))),gg.h("div",{key:a,class:"pptx-element",style:n},[gg.h("svg",{class:"pptx-chart",viewBox:`0 0 ${qg(C.width)} ${qg(C.height)}`,preserveAspectRatio:"none"},R)])}if(GIg(C)){const Y=lm(C,t.slideIndex,a);return gg.h("div",{key:a,class:"pptx-element",style:n},[gg.h("div",{class:"pptx-table-wrap"},[gg.h("table",{class:"pptx-table"},[Y.colWidths.length?gg.h("colgroup",null,Y.colWidths.map((R,X)=>gg.h("col",{key:X,style:{width:R?`${R}px`:void 0}}))):null,gg.h("tbody",null,Y.rows.map((R,X)=>gg.h("tr",{key:X,style:VIg(C,t.slideIndex,a,X)},R.map((H,S)=>H.skip?null:gg.h("td",{key:`${X}-${S}`,colspan:H.colspan,rowspan:H.rowspan,style:H.style},[gg.h("div",{class:"pptx-table-html",innerHTML:th(H.html)})])).filter(Boolean))))].filter(Boolean))])])}if(vV(C)||n9(C)){const Y=Math.max(0,qg(C.width)),R=Math.max(0,qg(C.height)),X=DIg(C),H=(!Y||!R)&&X?Kdg(X):null,S=Y||(H==null?void 0:H.vbW)||1,z=R||(H==null?void 0:H.vbH)||1,v=I(C,t.slideIndex,a,S,z),K=gg.h("svg",{class:"pptx-shape-svg",viewBox:`0 0 ${S} ${z}`,preserveAspectRatio:"none",style:{overflow:"visible",width:"100%",height:"100%",display:"block"}},[v,gg.h("path",{d:X,fill:fIg(C,t.slideIndex,a),stroke:HIg(C),"stroke-width":XIg(C),"stroke-dasharray":SIg(C),style:{vectorEffect:"non-scaling-stroke"}})].filter(Boolean)),N=typeof C.content=="string"&&C.content.trim()?gg.h("div",{class:"pptx-html",style:{...EN(),overflow:"visible",width:`${Y}px`,height:`${R}px`,transform:m!==1||Z!==1?`scale(${m}, ${Z})`:void 0,transformOrigin:"top left",position:"absolute",left:0,top:0}},[gg.h("div",{class:"pptx-html-inner",style:PN(C),innerHTML:th(C.content)})]):null;return gg.h("div",{key:a,class:"pptx-element",style:{...n,overflow:"visible"}},[K,N].filter(Boolean))}if(pIg(C)||WIg(C))return gg.h("div",{key:a,class:"pptx-element",style:n},[gg.h(FIg,{el:C,slideIndex:t.slideIndex,cacheId:a,absLeft:c,absTop:r})]);const p=typeof C.content=="string"&&C.content.trim();return gg.h("div",{key:a,class:"pptx-element",style:n},p?[gg.h("div",{class:"pptx-html",style:EN()},[gg.h("div",{class:"pptx-html-inner",style:PN(C),innerHTML:th(C.content)})])]:[])};return()=>{const C=Ddg(t.el);return gg.h("div",{class:"pptx-group-inner"},C.map((i,e)=>g(i,e,t.el,t.absLeft,t.absTop,t.cacheId)))}}}),kdg={key:0,class:"pptx-empty"},zdg={key:1,class:"pptx-slides"},Jdg=["src"],Ldg=["src"],vdg=["src"],Tdg=["src"],xdg=["viewBox"],jdg=["x","y","width","height","fill","fill-opacity"],Qdg=["d","stroke","stroke-width"],Odg=["cx","cy","r","fill","fill-opacity"],Udg=["d","fill","fill-opacity"],Edg=["cx","cy","r"],Pdg=["cx","cy","r","fill","fill-opacity"],_dg={key:6,class:"pptx-table-wrap"},qdg={class:"pptx-table"},$dg={key:0},grg=["colspan","rowspan"],Irg=["innerHTML"],Crg=["viewBox"],trg={key:0},irg=["id","x1","y1","x2","y2"],erg=["offset","stop-color","stop-opacity"],Arg=["id"],srg=["offset","stop-color","stop-opacity"],lrg=["id","width","height"],nrg=["width","height","fill"],arg=["cx","cy","r","fill"],org=["points","fill"],crg=["x","y","width","height","fill","transform"],drg=["id"],rrg=["href"],hrg=["d","fill","stroke","stroke-width","stroke-dasharray"],brg=["innerHTML"],urg=["innerHTML"],mrg=gg.defineComponent({__name:"PPT",props:{pptxJson:{}},setup(t){const I=t,g=gg.ref(null),C=gg.ref(0);let i=null;const e=gg.computed(()=>{var o,c,r,h;const a=((c=(o=I.pptxJson)==null?void 0:o.size)==null?void 0:c.width)??960,d=((h=(r=I.pptxJson)==null?void 0:r.size)==null?void 0:h.height)??540;return{width:Number.isFinite(a)?a:960,height:Number.isFinite(d)?d:540}}),A=gg.computed(()=>{const a=C.value;if(!a)return 1;const d=a/e.value.width;return Math.min(1,Math.max(.1,d))}),s=gg.computed(()=>{var d;return(Array.isArray((d=I.pptxJson)==null?void 0:d.slides)?I.pptxJson.slides:[]).map(o=>{const c=(Array.isArray(o.elements)?o.elements:[]).map(m=>({...m,__source:"slide"})),r=new Set(c.map(A8).filter(Boolean)),u=[...(Array.isArray(o.layoutElements)?o.layoutElements:[]).map(m=>{const Z={...m,__source:"layout"},p=A8(Z);return p&&r.has(p)?null:p&&typeof Z.content=="string"&&Ydg(Z.content)?{...Z,content:""}:Z}).filter(Boolean),...c].filter(m=>m&&typeof m=="object").map((m,Z)=>({el:m,idx:Z})).sort((m,Z)=>{const p=qg(m.el.order),Y=qg(Z.el.order);return p!==Y?p-Y:m.idx-Z.idx}).map(m=>m.el);return{...o,elements:u}})});gg.onMounted(()=>{if(!g.value)return;console.log(I.pptxJson);const a=()=>{g.value&&(C.value=g.value.clientWidth)};a(),i=new ResizeObserver(()=>a()),i.observe(g.value)}),gg.onBeforeUnmount(()=>{i==null||i.disconnect(),i=null});function l(){return{width:`${Math.round(e.value.width*A.value)}px`,height:`${Math.round(e.value.height*A.value)}px`}}function n(a){var o;const d=Mdg((a==null?void 0:a.fill)??(a==null?void 0:a.backgroundFill)??(a==null?void 0:a.layoutFill)??((o=a==null?void 0:a.layout)==null?void 0:o.fill)??(a==null?void 0:a.masterFill));return{width:`${e.value.width}px`,height:`${e.value.height}px`,transform:`scale(${A.value})`,background:d}}return(a,d)=>(gg.openBlock(),gg.createElementBlock("div",{ref_key:"rootRef",ref:g,class:"pptx-preview"},[s.value.length?(gg.openBlock(),gg.createElementBlock("div",zdg,[(gg.openBlock(!0),gg.createElementBlock(gg.Fragment,null,gg.renderList(s.value,(o,c)=>(gg.openBlock(),gg.createElementBlock("div",{key:c,class:"pptx-slide-shell",style:gg.normalizeStyle(l())},[gg.createElementVNode("div",{class:"pptx-slide",style:gg.normalizeStyle(n(o))},[(gg.openBlock(!0),gg.createElementBlock(gg.Fragment,null,gg.renderList(o.elements,(r,h)=>{var b,u;return gg.openBlock(),gg.createElementBlock("div",{key:gg.unref(Wdg)(r,h),class:"pptx-element",style:gg.normalizeStyle(gg.unref(fdg)(r,h))},[gg.unref(a9)(r)?(gg.openBlock(),gg.createElementBlock("div",{key:0,class:"pptx-img-wrap",style:gg.normalizeStyle(gg.unref(mIg)(r))},[gg.createElementVNode("img",{class:"pptx-img",src:gg.unref(Ue)(r),style:gg.normalizeStyle(gg.unref(ZIg)(r)),alt:"",draggable:"false"},null,12,Jdg)],4)):gg.unref(o9)(r)?(gg.openBlock(),gg.createElementBlock("video",{key:1,class:"pptx-media",src:gg.unref(Ue)(r),controls:"",preload:"metadata"},null,8,Ldg)):gg.unref(c9)(r)?(gg.openBlock(),gg.createElementBlock("audio",{key:2,class:"pptx-media",src:gg.unref(Ue)(r),controls:"",preload:"metadata"},null,8,vdg)):gg.unref(BIg)(r)?(gg.openBlock(),gg.createElementBlock("img",{key:3,class:"pptx-img",src:gg.unref(Ue)(r),alt:"",draggable:"false"},null,8,Tdg)):gg.unref(wIg)(r)?(gg.openBlock(),gg.createElementBlock("svg",{key:4,class:"pptx-chart",viewBox:`0 0 ${gg.unref(qg)(r.width)} ${gg.unref(qg)(r.height)}`,preserveAspectRatio:"none"},[gg.unref(Di)(r,c,gg.unref(XI)(r,h)).kind==="bar"?(gg.openBlock(!0),gg.createElementBlock(gg.Fragment,{key:0},gg.renderList(gg.unref(Di)(r,c,gg.unref(XI)(r,h)).bars,(m,Z)=>(gg.openBlock(),gg.createElementBlock("rect",{key:Z,x:m.x,y:m.y,width:m.w,height:m.h,fill:m.fill,"fill-opacity":m.opacity},null,8,jdg))),128)):gg.unref(Di)(r,c,gg.unref(XI)(r,h)).kind==="line"?(gg.openBlock(),gg.createElementBlock(gg.Fragment,{key:1},[(gg.openBlock(!0),gg.createElementBlock(gg.Fragment,null,gg.renderList(gg.unref(Di)(r,c,gg.unref(XI)(r,h)).paths,(m,Z)=>(gg.openBlock(),gg.createElementBlock("path",{key:Z,d:m.d,fill:"none",stroke:m.stroke,"stroke-width":m.strokeWidth,"stroke-linejoin":"round","stroke-linecap":"round"},null,8,Qdg))),128)),(gg.openBlock(!0),gg.createElementBlock(gg.Fragment,null,gg.renderList(gg.unref(Di)(r,c,gg.unref(XI)(r,h)).points,(m,Z)=>(gg.openBlock(),gg.createElementBlock("circle",{key:Z,cx:m.cx,cy:m.cy,r:m.r,fill:m.fill,"fill-opacity":m.opacity},null,8,Odg))),128))],64)):gg.unref(Di)(r,c,gg.unref(XI)(r,h)).kind==="pie"?(gg.openBlock(),gg.createElementBlock(gg.Fragment,{key:2},[(gg.openBlock(!0),gg.createElementBlock(gg.Fragment,null,gg.renderList(gg.unref(Di)(r,c,gg.unref(XI)(r,h)).slices,(m,Z)=>(gg.openBlock(),gg.createElementBlock("path",{key:Z,d:m.d,fill:m.fill,"fill-opacity":m.opacity},null,8,Udg))),128)),gg.unref(Di)(r,c,gg.unref(XI)(r,h)).holeR?(gg.openBlock(),gg.createElementBlock("circle",{key:0,cx:gg.unref(Di)(r,c,gg.unref(XI)(r,h)).cx,cy:gg.unref(Di)(r,c,gg.unref(XI)(r,h)).cy,r:gg.unref(Di)(r,c,gg.unref(XI)(r,h)).holeR,fill:"#fff"},null,8,Edg)):gg.createCommentVNode("",!0)],64)):gg.unref(Di)(r,c,gg.unref(XI)(r,h)).kind==="scatter"?(gg.openBlock(!0),gg.createElementBlock(gg.Fragment,{key:3},gg.renderList(gg.unref(Di)(r,c,gg.unref(XI)(r,h)).points,(m,Z)=>(gg.openBlock(),gg.createElementBlock("circle",{key:Z,cx:m.cx,cy:m.cy,r:m.r,fill:m.fill,"fill-opacity":m.opacity},null,8,Pdg))),128)):gg.createCommentVNode("",!0)],8,xdg)):gg.unref(pIg)(r)||gg.unref(WIg)(r)?(gg.openBlock(),gg.createBlock(gg.unref(FIg),{key:5,el:r,"slide-index":c,"cache-id":gg.unref(XI)(r,h),"abs-left":gg.unref(qg)(r.left),"abs-top":gg.unref(qg)(r.top)},null,8,["el","slide-index","cache-id","abs-left","abs-top"])):gg.unref(GIg)(r)?(gg.openBlock(),gg.createElementBlock("div",_dg,[gg.createElementVNode("table",qdg,[gg.unref(lm)(r,c,gg.unref(XI)(r,h)).colWidths.length?(gg.openBlock(),gg.createElementBlock("colgroup",$dg,[(gg.openBlock(!0),gg.createElementBlock(gg.Fragment,null,gg.renderList(gg.unref(lm)(r,c,gg.unref(XI)(r,h)).colWidths,(m,Z)=>(gg.openBlock(),gg.createElementBlock("col",{key:Z,style:gg.normalizeStyle({width:m?`${m}px`:void 0})},null,4))),128))])):gg.createCommentVNode("",!0),gg.createElementVNode("tbody",null,[(gg.openBlock(!0),gg.createElementBlock(gg.Fragment,null,gg.renderList(gg.unref(lm)(r,c,gg.unref(XI)(r,h)).rows,(m,Z)=>(gg.openBlock(),gg.createElementBlock("tr",{key:Z,style:gg.normalizeStyle(gg.unref(VIg)(r,c,gg.unref(XI)(r,h),Z))},[(gg.openBlock(!0),gg.createElementBlock(gg.Fragment,null,gg.renderList(m,(p,Y)=>(gg.openBlock(),gg.createElementBlock(gg.Fragment,{key:`${Z}-${Y}`},[p.skip?gg.createCommentVNode("",!0):(gg.openBlock(),gg.createElementBlock("td",{key:0,colspan:p.colspan,rowspan:p.rowspan,style:gg.normalizeStyle(p.style)},[gg.createElementVNode("div",{class:"pptx-table-html",innerHTML:gg.unref(th)(p.html)},null,8,Irg)],12,grg))],64))),128))],4))),128))])])])):gg.unref(vV)(r)?(gg.openBlock(),gg.createElementBlock(gg.Fragment,{key:7},[(gg.openBlock(),gg.createElementBlock("svg",{class:"pptx-shape-svg",viewBox:`0 0 ${gg.unref(qg)(r.width)} ${gg.unref(qg)(r.height)}`,preserveAspectRatio:"none"},[gg.unref(RIg)(r,c,gg.unref(XI)(r,h))?(gg.openBlock(),gg.createElementBlock("defs",trg,[((b=gg.unref(Ie)(r,c,gg.unref(XI)(r,h)))==null?void 0:b.kind)==="linear"?(gg.openBlock(),gg.createElementBlock("linearGradient",{key:0,id:gg.unref(Ie)(r,c,gg.unref(XI)(r,h)).id,x1:gg.unref(Ie)(r,c,gg.unref(XI)(r,h)).x1,y1:gg.unref(Ie)(r,c,gg.unref(XI)(r,h)).y1,x2:gg.unref(Ie)(r,c,gg.unref(XI)(r,h)).x2,y2:gg.unref(Ie)(r,c,gg.unref(XI)(r,h)).y2},[(gg.openBlock(!0),gg.createElementBlock(gg.Fragment,null,gg.renderList(gg.unref(Ie)(r,c,gg.unref(XI)(r,h)).stops,(m,Z)=>(gg.openBlock(),gg.createElementBlock("stop",{key:Z,offset:m.offset,"stop-color":m.color,"stop-opacity":m.opacity},null,8,erg))),128))],8,irg)):((u=gg.unref(Ie)(r,c,gg.unref(XI)(r,h)))==null?void 0:u.kind)==="radial"?(gg.openBlock(),gg.createElementBlock("radialGradient",{key:1,id:gg.unref(Ie)(r,c,gg.unref(XI)(r,h)).id,cx:"50%",cy:"50%",r:"50%"},[(gg.openBlock(!0),gg.createElementBlock(gg.Fragment,null,gg.renderList(gg.unref(Ie)(r,c,gg.unref(XI)(r,h)).stops,(m,Z)=>(gg.openBlock(),gg.createElementBlock("stop",{key:Z,offset:m.offset,"stop-color":m.color,"stop-opacity":m.opacity},null,8,srg))),128))],8,Arg)):gg.createCommentVNode("",!0),gg.unref(es)(r,c,gg.unref(XI)(r,h))?(gg.openBlock(),gg.createElementBlock("pattern",{key:2,id:gg.unref(es)(r,c,gg.unref(XI)(r,h)).id,patternUnits:"userSpaceOnUse",width:gg.unref(es)(r,c,gg.unref(XI)(r,h)).width,height:gg.unref(es)(r,c,gg.unref(XI)(r,h)).height},[gg.createElementVNode("rect",{x:"0",y:"0",width:gg.unref(es)(r,c,gg.unref(XI)(r,h)).width,height:gg.unref(es)(r,c,gg.unref(XI)(r,h)).height,fill:gg.unref(es)(r,c,gg.unref(XI)(r,h)).background},null,8,nrg),(gg.openBlock(!0),gg.createElementBlock(gg.Fragment,null,gg.renderList(gg.unref(es)(r,c,gg.unref(XI)(r,h)).shapes,(m,Z)=>(gg.openBlock(),gg.createElementBlock(gg.Fragment,{key:Z},[m.kind==="circle"?(gg.openBlock(),gg.createElementBlock("circle",{key:0,cx:m.cx,cy:m.cy,r:m.r,fill:m.fill},null,8,arg)):m.kind==="polygon"?(gg.openBlock(),gg.createElementBlock("polygon",{key:1,points:m.points,fill:m.fill},null,8,org)):m.kind==="rect"?(gg.openBlock(),gg.createElementBlock("rect",{key:2,x:m.x,y:m.y,width:m.width,height:m.height,fill:m.fill,transform:m.transform},null,8,crg)):gg.createCommentVNode("",!0)],64))),128))],8,lrg)):gg.createCommentVNode("",!0),gg.unref(nm)(r,c,gg.unref(XI)(r,h))?(gg.openBlock(),gg.createElementBlock("pattern",{key:3,id:gg.unref(nm)(r,c,gg.unref(XI)(r,h)).id,patternUnits:"objectBoundingBox",width:"1",height:"1"},[gg.createElementVNode("image",{x:"0",y:"0",width:"100%",height:"100%",preserveAspectRatio:"none",href:gg.unref(nm)(r,c,gg.unref(XI)(r,h)).href},null,8,rrg)],8,drg)):gg.createCommentVNode("",!0)])):gg.createCommentVNode("",!0),gg.createElementVNode("path",{d:gg.unref(DIg)(r),fill:gg.unref(fIg)(r,c,gg.unref(XI)(r,h)),stroke:gg.unref(HIg)(r),"stroke-width":gg.unref(XIg)(r),"stroke-dasharray":gg.unref(SIg)(r)},null,8,hrg)],8,Crg)),typeof r.content=="string"&&r.content.trim()?(gg.openBlock(),gg.createElementBlock("div",{key:0,class:"pptx-html",style:gg.normalizeStyle(gg.unref(EN)(r))},[gg.createElementVNode("div",{class:"pptx-html-inner",style:gg.normalizeStyle(gg.unref(PN)(r)),innerHTML:gg.unref(th)(r.content)},null,12,brg)],4)):gg.createCommentVNode("",!0)],64)):(gg.openBlock(),gg.createElementBlock(gg.Fragment,{key:8},[typeof r.content=="string"&&r.content.trim()?(gg.openBlock(),gg.createElementBlock("div",{key:0,class:"pptx-html",style:gg.normalizeStyle(gg.unref(EN)(r))},[gg.createElementVNode("div",{class:"pptx-html-inner",style:gg.normalizeStyle(gg.unref(PN)(r)),innerHTML:gg.unref(th)(r.content)},null,12,urg)],4)):gg.createCommentVNode("",!0)],64))],4)}),128))],4)],4))),128))])):(gg.openBlock(),gg.createElementBlock("div",kdg,"暂无可渲染的幻灯片"))],512))}}),Zrg=m0(mrg,[["__scopeId","data-v-5765ec3e"]]);function US(t,I){(I==null||I>t.length)&&(I=t.length);for(var g=0,C=new Array(I);g<I;g++)C[g]=t[g];return C}function kIg(t,I){if(t){if(typeof t=="string")return US(t,I);var g=Object.prototype.toString.call(t).slice(8,-1);return g==="Object"&&t.constructor&&(g=t.constructor.name),g==="Map"||g==="Set"?Array.from(t):g==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(g)?US(t,I):void 0}}function r9(t){return function(I){if(Array.isArray(I))return US(I)}(t)||function(I){if(typeof Symbol<"u"&&I[Symbol.iterator]!=null||I["@@iterator"]!=null)return Array.from(I)}(t)||kIg(t)||function(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
- In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function l8(t,I,g,C,i,e,A){try{var s=t[e](A),l=s.value}catch(n){return void g(n)}s.done?I(l):Promise.resolve(l).then(C,i)}function RC(t){return function(){var I=this,g=arguments;return new Promise(function(C,i){var e=t.apply(I,g);function A(l){l8(e,C,i,A,s,"next",l)}function s(l){l8(e,C,i,A,s,"throw",l)}A(void 0)})}}function La(t){return La=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(I){return typeof I}:function(I){return I&&typeof Symbol=="function"&&I.constructor===Symbol&&I!==Symbol.prototype?"symbol":typeof I},La(t)}function h9(t,I,g){return I in t?Object.defineProperty(t,I,{value:g,enumerable:!0,configurable:!0,writable:!0}):t[I]=g,t}var Ce=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function TV(t){var I=t.default;if(typeof I=="function"){var g=function(){return I.apply(this,arguments)};g.prototype=I.prototype}else g={};return Object.defineProperty(g,"__esModule",{value:!0}),Object.keys(t).forEach(function(C){var i=Object.getOwnPropertyDescriptor(t,C);Object.defineProperty(g,C,i.get?i:{enumerable:!0,get:function(){return t[C]}})}),g}var zIg={exports:{}},n8={exports:{}};(function(t){function I(g){return t.exports=I=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(C){return typeof C}:function(C){return C&&typeof Symbol=="function"&&C.constructor===Symbol&&C!==Symbol.prototype?"symbol":typeof C},t.exports.__esModule=!0,t.exports.default=t.exports,I(g)}t.exports=I,t.exports.__esModule=!0,t.exports.default=t.exports})(n8),function(t){var I=n8.exports.default;function g(){t.exports=g=function(){return C},t.exports.__esModule=!0,t.exports.default=t.exports;var C={},i=Object.prototype,e=i.hasOwnProperty,A=Object.defineProperty||function(B,G,w){B[G]=w.value},s=typeof Symbol=="function"?Symbol:{},l=s.iterator||"@@iterator",n=s.asyncIterator||"@@asyncIterator",a=s.toStringTag||"@@toStringTag";function d(B,G,w){return Object.defineProperty(B,G,{value:w,enumerable:!0,configurable:!0,writable:!0}),B[G]}try{d({},"")}catch{d=function(G,w,W){return G[w]=W}}function o(B,G,w,W){var y=G&&G.prototype instanceof h?G:h,f=Object.create(y.prototype),D=new K(W||[]);return A(f,"_invoke",{value:H(B,w,D)}),f}function c(B,G,w){try{return{type:"normal",arg:B.call(G,w)}}catch(W){return{type:"throw",arg:W}}}C.wrap=o;var r={};function h(){}function b(){}function u(){}var m={};d(m,l,function(){return this});var Z=Object.getPrototypeOf,p=Z&&Z(Z(V([])));p&&p!==i&&e.call(p,l)&&(m=p);var Y=u.prototype=h.prototype=Object.create(m);function R(B){["next","throw","return"].forEach(function(G){d(B,G,function(w){return this._invoke(G,w)})})}function X(B,G){function w(y,f,D,F){var T=c(B[y],B,f);if(T.type!=="throw"){var Q=T.arg,P=Q.value;return P&&I(P)=="object"&&e.call(P,"__await")?G.resolve(P.__await).then(function(L){w("next",L,D,F)},function(L){w("throw",L,D,F)}):G.resolve(P).then(function(L){Q.value=L,D(Q)},function(L){return w("throw",L,D,F)})}F(T.arg)}var W;A(this,"_invoke",{value:function(y,f){function D(){return new G(function(F,T){w(y,f,F,T)})}return W=W?W.then(D,D):D()}})}function H(B,G,w){var W="suspendedStart";return function(y,f){if(W==="executing")throw new Error("Generator is already running");if(W==="completed"){if(y==="throw")throw f;return N()}for(w.method=y,w.arg=f;;){var D=w.delegate;if(D){var F=S(D,w);if(F){if(F===r)continue;return F}}if(w.method==="next")w.sent=w._sent=w.arg;else if(w.method==="throw"){if(W==="suspendedStart")throw W="completed",w.arg;w.dispatchException(w.arg)}else w.method==="return"&&w.abrupt("return",w.arg);W="executing";var T=c(B,G,w);if(T.type==="normal"){if(W=w.done?"completed":"suspendedYield",T.arg===r)continue;return{value:T.arg,done:w.done}}T.type==="throw"&&(W="completed",w.method="throw",w.arg=T.arg)}}}function S(B,G){var w=B.iterator[G.method];if(w===void 0){if(G.delegate=null,G.method==="throw"){if(B.iterator.return&&(G.method="return",G.arg=void 0,S(B,G),G.method==="throw"))return r;G.method="throw",G.arg=new TypeError("The iterator does not provide a 'throw' method")}return r}var W=c(w,B.iterator,G.arg);if(W.type==="throw")return G.method="throw",G.arg=W.arg,G.delegate=null,r;var y=W.arg;return y?y.done?(G[B.resultName]=y.value,G.next=B.nextLoc,G.method!=="return"&&(G.method="next",G.arg=void 0),G.delegate=null,r):y:(G.method="throw",G.arg=new TypeError("iterator result is not an object"),G.delegate=null,r)}function z(B){var G={tryLoc:B[0]};1 in B&&(G.catchLoc=B[1]),2 in B&&(G.finallyLoc=B[2],G.afterLoc=B[3]),this.tryEntries.push(G)}function v(B){var G=B.completion||{};G.type="normal",delete G.arg,B.completion=G}function K(B){this.tryEntries=[{tryLoc:"root"}],B.forEach(z,this),this.reset(!0)}function V(B){if(B){var G=B[l];if(G)return G.call(B);if(typeof B.next=="function")return B;if(!isNaN(B.length)){var w=-1,W=function y(){for(;++w<B.length;)if(e.call(B,w))return y.value=B[w],y.done=!1,y;return y.value=void 0,y.done=!0,y};return W.next=W}}return{next:N}}function N(){return{value:void 0,done:!0}}return b.prototype=u,A(Y,"constructor",{value:u,configurable:!0}),A(u,"constructor",{value:b,configurable:!0}),b.displayName=d(u,a,"GeneratorFunction"),C.isGeneratorFunction=function(B){var G=typeof B=="function"&&B.constructor;return!!G&&(G===b||(G.displayName||G.name)==="GeneratorFunction")},C.mark=function(B){return Object.setPrototypeOf?Object.setPrototypeOf(B,u):(B.__proto__=u,d(B,a,"GeneratorFunction")),B.prototype=Object.create(Y),B},C.awrap=function(B){return{__await:B}},R(X.prototype),d(X.prototype,n,function(){return this}),C.AsyncIterator=X,C.async=function(B,G,w,W,y){y===void 0&&(y=Promise);var f=new X(o(B,G,w,W),y);return C.isGeneratorFunction(G)?f:f.next().then(function(D){return D.done?D.value:f.next()})},R(Y),d(Y,a,"Generator"),d(Y,l,function(){return this}),d(Y,"toString",function(){return"[object Generator]"}),C.keys=function(B){var G=Object(B),w=[];for(var W in G)w.push(W);return w.reverse(),function y(){for(;w.length;){var f=w.pop();if(f in G)return y.value=f,y.done=!1,y}return y.done=!0,y}},C.values=V,K.prototype={constructor:K,reset:function(B){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(v),!B)for(var G in this)G.charAt(0)==="t"&&e.call(this,G)&&!isNaN(+G.slice(1))&&(this[G]=void 0)},stop:function(){this.done=!0;var B=this.tryEntries[0].completion;if(B.type==="throw")throw B.arg;return this.rval},dispatchException:function(B){if(this.done)throw B;var G=this;function w(T,Q){return f.type="throw",f.arg=B,G.next=T,Q&&(G.method="next",G.arg=void 0),!!Q}for(var W=this.tryEntries.length-1;W>=0;--W){var y=this.tryEntries[W],f=y.completion;if(y.tryLoc==="root")return w("end");if(y.tryLoc<=this.prev){var D=e.call(y,"catchLoc"),F=e.call(y,"finallyLoc");if(D&&F){if(this.prev<y.catchLoc)return w(y.catchLoc,!0);if(this.prev<y.finallyLoc)return w(y.finallyLoc)}else if(D){if(this.prev<y.catchLoc)return w(y.catchLoc,!0)}else{if(!F)throw new Error("try statement without catch or finally");if(this.prev<y.finallyLoc)return w(y.finallyLoc)}}}},abrupt:function(B,G){for(var w=this.tryEntries.length-1;w>=0;--w){var W=this.tryEntries[w];if(W.tryLoc<=this.prev&&e.call(W,"finallyLoc")&&this.prev<W.finallyLoc){var y=W;break}}y&&(B==="break"||B==="continue")&&y.tryLoc<=G&&G<=y.finallyLoc&&(y=null);var f=y?y.completion:{};return f.type=B,f.arg=G,y?(this.method="next",this.next=y.finallyLoc,r):this.complete(f)},complete:function(B,G){if(B.type==="throw")throw B.arg;return B.type==="break"||B.type==="continue"?this.next=B.arg:B.type==="return"?(this.rval=this.arg=B.arg,this.method="return",this.next="end"):B.type==="normal"&&G&&(this.next=G),r},finish:function(B){for(var G=this.tryEntries.length-1;G>=0;--G){var w=this.tryEntries[G];if(w.finallyLoc===B)return this.complete(w.completion,w.afterLoc),v(w),r}},catch:function(B){for(var G=this.tryEntries.length-1;G>=0;--G){var w=this.tryEntries[G];if(w.tryLoc===B){var W=w.completion;if(W.type==="throw"){var y=W.arg;v(w)}return y}}throw new Error("illegal catch attempt")},delegateYield:function(B,G,w){return this.delegate={iterator:V(B),resultName:G,nextLoc:w},this.method==="next"&&(this.arg=void 0),r}},C}t.exports=g,t.exports.__esModule=!0,t.exports.default=t.exports}(zIg);var NN=zIg.exports(),rI=NN;try{regeneratorRuntime=NN}catch{typeof globalThis=="object"?globalThis.regeneratorRuntime=NN:Function("r","regeneratorRuntime = r")(NN)}var Z0={},a8={},r0=typeof global<"u"?global:typeof self<"u"?self:typeof window<"u"?window:{},Bs=[],De=[],Grg=typeof Uint8Array<"u"?Uint8Array:Array,b9=!1;function JIg(){b9=!0;for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",I=0,g=t.length;I<g;++I)Bs[I]=t[I],De[t.charCodeAt(I)]=I;De[45]=62,De[95]=63}function wrg(t,I,g){for(var C,i,e=[],A=I;A<g;A+=3)C=(t[A]<<16)+(t[A+1]<<8)+t[A+2],e.push(Bs[(i=C)>>18&63]+Bs[i>>12&63]+Bs[i>>6&63]+Bs[63&i]);return e.join("")}function o8(t){var I;b9||JIg();for(var g=t.length,C=g%3,i="",e=[],A=16383,s=0,l=g-C;s<l;s+=A)e.push(wrg(t,s,s+A>l?l:s+A));return C===1?(I=t[g-1],i+=Bs[I>>2],i+=Bs[I<<4&63],i+="=="):C===2&&(I=(t[g-2]<<8)+t[g-1],i+=Bs[I>>10],i+=Bs[I>>4&63],i+=Bs[I<<2&63],i+="="),e.push(i),e.join("")}function fY(t,I,g,C,i){var e,A,s=8*i-C-1,l=(1<<s)-1,n=l>>1,a=-7,d=g?i-1:0,o=g?-1:1,c=t[I+d];for(d+=o,e=c&(1<<-a)-1,c>>=-a,a+=s;a>0;e=256*e+t[I+d],d+=o,a-=8);for(A=e&(1<<-a)-1,e>>=-a,a+=C;a>0;A=256*A+t[I+d],d+=o,a-=8);if(e===0)e=1-n;else{if(e===l)return A?NaN:1/0*(c?-1:1);A+=Math.pow(2,C),e-=n}return(c?-1:1)*A*Math.pow(2,e-C)}function LIg(t,I,g,C,i,e){var A,s,l,n=8*e-i-1,a=(1<<n)-1,d=a>>1,o=i===23?Math.pow(2,-24)-Math.pow(2,-77):0,c=C?0:e-1,r=C?1:-1,h=I<0||I===0&&1/I<0?1:0;for(I=Math.abs(I),isNaN(I)||I===1/0?(s=isNaN(I)?1:0,A=a):(A=Math.floor(Math.log(I)/Math.LN2),I*(l=Math.pow(2,-A))<1&&(A--,l*=2),(I+=A+d>=1?o/l:o*Math.pow(2,1-d))*l>=2&&(A++,l/=2),A+d>=a?(s=0,A=a):A+d>=1?(s=(I*l-1)*Math.pow(2,i),A+=d):(s=I*Math.pow(2,d-1)*Math.pow(2,i),A=0));i>=8;t[g+c]=255&s,c+=r,s/=256,i-=8);for(A=A<<i|s,n+=i;n>0;t[g+c]=255&A,c+=r,A/=256,n-=8);t[g+c-r]|=128*h}var prg={}.toString,vIg=Array.isArray||function(t){return prg.call(t)=="[object Array]"};Xg.TYPED_ARRAY_SUPPORT=r0.TYPED_ARRAY_SUPPORT===void 0||r0.TYPED_ARRAY_SUPPORT;var Brg=_N();function _N(){return Xg.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function Jl(t,I){if(_N()<I)throw new RangeError("Invalid typed array length");return Xg.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(I)).__proto__=Xg.prototype:(t===null&&(t=new Xg(I)),t.length=I),t}function Xg(t,I,g){if(!(Xg.TYPED_ARRAY_SUPPORT||this instanceof Xg))return new Xg(t,I,g);if(typeof t=="number"){if(typeof I=="string")throw new Error("If encoding is specified then the first argument must be a string");return ES(this,t)}return TIg(this,t,I,g)}function TIg(t,I,g,C){if(typeof I=="number")throw new TypeError('"value" argument must not be a number');return typeof ArrayBuffer<"u"&&I instanceof ArrayBuffer?function(i,e,A,s){if(e.byteLength,A<0||e.byteLength<A)throw new RangeError("'offset' is out of bounds");if(e.byteLength<A+(s||0))throw new RangeError("'length' is out of bounds");return e=A===void 0&&s===void 0?new Uint8Array(e):s===void 0?new Uint8Array(e,A):new Uint8Array(e,A,s),Xg.TYPED_ARRAY_SUPPORT?(i=e).__proto__=Xg.prototype:i=DH(i,e),i}(t,I,g,C):typeof I=="string"?function(i,e,A){if(typeof A=="string"&&A!==""||(A="utf8"),!Xg.isEncoding(A))throw new TypeError('"encoding" must be a valid string encoding');var s=0|jIg(e,A),l=(i=Jl(i,s)).write(e,A);return l!==s&&(i=i.slice(0,l)),i}(t,I,g):function(i,e){if(Ws(e)){var A=0|u9(e.length);return(i=Jl(i,A)).length===0||e.copy(i,0,0,A),i}if(e){if(typeof ArrayBuffer<"u"&&e.buffer instanceof ArrayBuffer||"length"in e)return typeof e.length!="number"||(s=e.length)!=s?Jl(i,0):DH(i,e);if(e.type==="Buffer"&&vIg(e.data))return DH(i,e.data)}var s;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(t,I)}function xIg(t){if(typeof t!="number")throw new TypeError('"size" argument must be a number');if(t<0)throw new RangeError('"size" argument must not be negative')}function ES(t,I){if(xIg(I),t=Jl(t,I<0?0:0|u9(I)),!Xg.TYPED_ARRAY_SUPPORT)for(var g=0;g<I;++g)t[g]=0;return t}function DH(t,I){var g=I.length<0?0:0|u9(I.length);t=Jl(t,g);for(var C=0;C<g;C+=1)t[C]=255&I[C];return t}function u9(t){if(t>=_N())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+_N().toString(16)+" bytes");return 0|t}function Ws(t){return!(t==null||!t._isBuffer)}function jIg(t,I){if(Ws(t))return t.length;if(typeof ArrayBuffer<"u"&&typeof ArrayBuffer.isView=="function"&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;typeof t!="string"&&(t=""+t);var g=t.length;if(g===0)return 0;for(var C=!1;;)switch(I){case"ascii":case"latin1":case"binary":return g;case"utf8":case"utf-8":case void 0:return qN(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*g;case"hex":return g>>>1;case"base64":return EIg(t).length;default:if(C)return qN(t).length;I=(""+I).toLowerCase(),C=!0}}function Wrg(t,I,g){var C=!1;if((I===void 0||I<0)&&(I=0),I>this.length||((g===void 0||g>this.length)&&(g=this.length),g<=0)||(g>>>=0)<=(I>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return Xrg(this,I,g);case"utf8":case"utf-8":return OIg(this,I,g);case"ascii":return frg(this,I,g);case"latin1":case"binary":return Hrg(this,I,g);case"base64":return Rrg(this,I,g);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Srg(this,I,g);default:if(C)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),C=!0}}function fo(t,I,g){var C=t[I];t[I]=t[g],t[g]=C}function c8(t,I,g,C,i){if(t.length===0)return-1;if(typeof g=="string"?(C=g,g=0):g>2147483647?g=2147483647:g<-2147483648&&(g=-2147483648),g=+g,isNaN(g)&&(g=i?0:t.length-1),g<0&&(g=t.length+g),g>=t.length){if(i)return-1;g=t.length-1}else if(g<0){if(!i)return-1;g=0}if(typeof I=="string"&&(I=Xg.from(I,C)),Ws(I))return I.length===0?-1:d8(t,I,g,C,i);if(typeof I=="number")return I&=255,Xg.TYPED_ARRAY_SUPPORT&&typeof Uint8Array.prototype.indexOf=="function"?i?Uint8Array.prototype.indexOf.call(t,I,g):Uint8Array.prototype.lastIndexOf.call(t,I,g):d8(t,[I],g,C,i);throw new TypeError("val must be string, number or Buffer")}function d8(t,I,g,C,i){var e,A=1,s=t.length,l=I.length;if(C!==void 0&&((C=String(C).toLowerCase())==="ucs2"||C==="ucs-2"||C==="utf16le"||C==="utf-16le")){if(t.length<2||I.length<2)return-1;A=2,s/=2,l/=2,g/=2}function n(c,r){return A===1?c[r]:c.readUInt16BE(r*A)}if(i){var a=-1;for(e=g;e<s;e++)if(n(t,e)===n(I,a===-1?0:e-a)){if(a===-1&&(a=e),e-a+1===l)return a*A}else a!==-1&&(e-=e-a),a=-1}else for(g+l>s&&(g=s-l),e=g;e>=0;e--){for(var d=!0,o=0;o<l;o++)if(n(t,e+o)!==n(I,o)){d=!1;break}if(d)return e}return-1}function yrg(t,I,g,C){g=Number(g)||0;var i=t.length-g;C?(C=Number(C))>i&&(C=i):C=i;var e=I.length;if(e%2!=0)throw new TypeError("Invalid hex string");C>e/2&&(C=e/2);for(var A=0;A<C;++A){var s=parseInt(I.substr(2*A,2),16);if(isNaN(s))return A;t[g+A]=s}return A}function Yrg(t,I,g,C){return xV(qN(I,t.length-g),t,g,C)}function QIg(t,I,g,C){return xV(function(i){for(var e=[],A=0;A<i.length;++A)e.push(255&i.charCodeAt(A));return e}(I),t,g,C)}function Nrg(t,I,g,C){return QIg(t,I,g,C)}function Vrg(t,I,g,C){return xV(EIg(I),t,g,C)}function Mrg(t,I,g,C){return xV(function(i,e){for(var A,s,l,n=[],a=0;a<i.length&&!((e-=2)<0);++a)s=(A=i.charCodeAt(a))>>8,l=A%256,n.push(l),n.push(s);return n}(I,t.length-g),t,g,C)}function Rrg(t,I,g){return I===0&&g===t.length?o8(t):o8(t.slice(I,g))}function OIg(t,I,g){g=Math.min(t.length,g);for(var C=[],i=I;i<g;){var e,A,s,l,n=t[i],a=null,d=n>239?4:n>223?3:n>191?2:1;if(i+d<=g)switch(d){case 1:n<128&&(a=n);break;case 2:(192&(e=t[i+1]))==128&&(l=(31&n)<<6|63&e)>127&&(a=l);break;case 3:e=t[i+1],A=t[i+2],(192&e)==128&&(192&A)==128&&(l=(15&n)<<12|(63&e)<<6|63&A)>2047&&(l<55296||l>57343)&&(a=l);break;case 4:e=t[i+1],A=t[i+2],s=t[i+3],(192&e)==128&&(192&A)==128&&(192&s)==128&&(l=(15&n)<<18|(63&e)<<12|(63&A)<<6|63&s)>65535&&l<1114112&&(a=l)}a===null?(a=65533,d=1):a>65535&&(a-=65536,C.push(a>>>10&1023|55296),a=56320|1023&a),C.push(a),i+=d}return function(o){var c=o.length;if(c<=4096)return String.fromCharCode.apply(String,o);for(var r="",h=0;h<c;)r+=String.fromCharCode.apply(String,o.slice(h,h+=4096));return r}(C)}Xg.poolSize=8192,Xg._augment=function(t){return t.__proto__=Xg.prototype,t},Xg.from=function(t,I,g){return TIg(null,t,I,g)},Xg.TYPED_ARRAY_SUPPORT&&(Xg.prototype.__proto__=Uint8Array.prototype,Xg.__proto__=Uint8Array,typeof Symbol<"u"&&Symbol.species&&Xg[Symbol.species]),Xg.alloc=function(t,I,g){return function(C,i,e,A){return xIg(i),i<=0?Jl(C,i):e!==void 0?typeof A=="string"?Jl(C,i).fill(e,A):Jl(C,i).fill(e):Jl(C,i)}(null,t,I,g)},Xg.allocUnsafe=function(t){return ES(null,t)},Xg.allocUnsafeSlow=function(t){return ES(null,t)},Xg.isBuffer=gG,Xg.compare=function(t,I){if(!Ws(t)||!Ws(I))throw new TypeError("Arguments must be Buffers");if(t===I)return 0;for(var g=t.length,C=I.length,i=0,e=Math.min(g,C);i<e;++i)if(t[i]!==I[i]){g=t[i],C=I[i];break}return g<C?-1:C<g?1:0},Xg.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},Xg.concat=function(t,I){if(!vIg(t))throw new TypeError('"list" argument must be an Array of Buffers');if(t.length===0)return Xg.alloc(0);var g;if(I===void 0)for(I=0,g=0;g<t.length;++g)I+=t[g].length;var C=Xg.allocUnsafe(I),i=0;for(g=0;g<t.length;++g){var e=t[g];if(!Ws(e))throw new TypeError('"list" argument must be an Array of Buffers');e.copy(C,i),i+=e.length}return C},Xg.byteLength=jIg,Xg.prototype._isBuffer=!0,Xg.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var I=0;I<t;I+=2)fo(this,I,I+1);return this},Xg.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var I=0;I<t;I+=4)fo(this,I,I+3),fo(this,I+1,I+2);return this},Xg.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var I=0;I<t;I+=8)fo(this,I,I+7),fo(this,I+1,I+6),fo(this,I+2,I+5),fo(this,I+3,I+4);return this},Xg.prototype.toString=function(){var t=0|this.length;return t===0?"":arguments.length===0?OIg(this,0,t):Wrg.apply(this,arguments)},Xg.prototype.equals=function(t){if(!Ws(t))throw new TypeError("Argument must be a Buffer");return this===t||Xg.compare(this,t)===0},Xg.prototype.inspect=function(){var t="";return this.length>0&&(t=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(t+=" ... ")),"<Buffer "+t+">"},Xg.prototype.compare=function(t,I,g,C,i){if(!Ws(t))throw new TypeError("Argument must be a Buffer");if(I===void 0&&(I=0),g===void 0&&(g=t?t.length:0),C===void 0&&(C=0),i===void 0&&(i=this.length),I<0||g>t.length||C<0||i>this.length)throw new RangeError("out of range index");if(C>=i&&I>=g)return 0;if(C>=i)return-1;if(I>=g)return 1;if(this===t)return 0;for(var e=(i>>>=0)-(C>>>=0),A=(g>>>=0)-(I>>>=0),s=Math.min(e,A),l=this.slice(C,i),n=t.slice(I,g),a=0;a<s;++a)if(l[a]!==n[a]){e=l[a],A=n[a];break}return e<A?-1:A<e?1:0},Xg.prototype.includes=function(t,I,g){return this.indexOf(t,I,g)!==-1},Xg.prototype.indexOf=function(t,I,g){return c8(this,t,I,g,!0)},Xg.prototype.lastIndexOf=function(t,I,g){return c8(this,t,I,g,!1)},Xg.prototype.write=function(t,I,g,C){if(I===void 0)C="utf8",g=this.length,I=0;else if(g===void 0&&typeof I=="string")C=I,g=this.length,I=0;else{if(!isFinite(I))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");I|=0,isFinite(g)?(g|=0,C===void 0&&(C="utf8")):(C=g,g=void 0)}var i=this.length-I;if((g===void 0||g>i)&&(g=i),t.length>0&&(g<0||I<0)||I>this.length)throw new RangeError("Attempt to write outside buffer bounds");C||(C="utf8");for(var e=!1;;)switch(C){case"hex":return yrg(this,t,I,g);case"utf8":case"utf-8":return Yrg(this,t,I,g);case"ascii":return QIg(this,t,I,g);case"latin1":case"binary":return Nrg(this,t,I,g);case"base64":return Vrg(this,t,I,g);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Mrg(this,t,I,g);default:if(e)throw new TypeError("Unknown encoding: "+C);C=(""+C).toLowerCase(),e=!0}},Xg.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function frg(t,I,g){var C="";g=Math.min(t.length,g);for(var i=I;i<g;++i)C+=String.fromCharCode(127&t[i]);return C}function Hrg(t,I,g){var C="";g=Math.min(t.length,g);for(var i=I;i<g;++i)C+=String.fromCharCode(t[i]);return C}function Xrg(t,I,g){var C=t.length;(!I||I<0)&&(I=0),(!g||g<0||g>C)&&(g=C);for(var i="",e=I;e<g;++e)i+=Krg(t[e]);return i}function Srg(t,I,g){for(var C=t.slice(I,g),i="",e=0;e<C.length;e+=2)i+=String.fromCharCode(C[e]+256*C[e+1]);return i}function Nt(t,I,g){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+I>g)throw new RangeError("Trying to access beyond buffer length")}function Xi(t,I,g,C,i,e){if(!Ws(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(I>i||I<e)throw new RangeError('"value" argument is out of bounds');if(g+C>t.length)throw new RangeError("Index out of range")}function HY(t,I,g,C){I<0&&(I=65535+I+1);for(var i=0,e=Math.min(t.length-g,2);i<e;++i)t[g+i]=(I&255<<8*(C?i:1-i))>>>8*(C?i:1-i)}function XY(t,I,g,C){I<0&&(I=4294967295+I+1);for(var i=0,e=Math.min(t.length-g,4);i<e;++i)t[g+i]=I>>>8*(C?i:3-i)&255}function UIg(t,I,g,C,i,e){if(g+C>t.length)throw new RangeError("Index out of range");if(g<0)throw new RangeError("Index out of range")}function r8(t,I,g,C,i){return i||UIg(t,0,g,4),LIg(t,I,g,C,23,4),g+4}function h8(t,I,g,C,i){return i||UIg(t,0,g,8),LIg(t,I,g,C,52,8),g+8}Xg.prototype.slice=function(t,I){var g,C=this.length;if((t=~~t)<0?(t+=C)<0&&(t=0):t>C&&(t=C),(I=I===void 0?C:~~I)<0?(I+=C)<0&&(I=0):I>C&&(I=C),I<t&&(I=t),Xg.TYPED_ARRAY_SUPPORT)(g=this.subarray(t,I)).__proto__=Xg.prototype;else{var i=I-t;g=new Xg(i,void 0);for(var e=0;e<i;++e)g[e]=this[e+t]}return g},Xg.prototype.readUIntLE=function(t,I,g){t|=0,I|=0,g||Nt(t,I,this.length);for(var C=this[t],i=1,e=0;++e<I&&(i*=256);)C+=this[t+e]*i;return C},Xg.prototype.readUIntBE=function(t,I,g){t|=0,I|=0,g||Nt(t,I,this.length);for(var C=this[t+--I],i=1;I>0&&(i*=256);)C+=this[t+--I]*i;return C},Xg.prototype.readUInt8=function(t,I){return I||Nt(t,1,this.length),this[t]},Xg.prototype.readUInt16LE=function(t,I){return I||Nt(t,2,this.length),this[t]|this[t+1]<<8},Xg.prototype.readUInt16BE=function(t,I){return I||Nt(t,2,this.length),this[t]<<8|this[t+1]},Xg.prototype.readUInt32LE=function(t,I){return I||Nt(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},Xg.prototype.readUInt32BE=function(t,I){return I||Nt(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},Xg.prototype.readIntLE=function(t,I,g){t|=0,I|=0,g||Nt(t,I,this.length);for(var C=this[t],i=1,e=0;++e<I&&(i*=256);)C+=this[t+e]*i;return C>=(i*=128)&&(C-=Math.pow(2,8*I)),C},Xg.prototype.readIntBE=function(t,I,g){t|=0,I|=0,g||Nt(t,I,this.length);for(var C=I,i=1,e=this[t+--C];C>0&&(i*=256);)e+=this[t+--C]*i;return e>=(i*=128)&&(e-=Math.pow(2,8*I)),e},Xg.prototype.readInt8=function(t,I){return I||Nt(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},Xg.prototype.readInt16LE=function(t,I){I||Nt(t,2,this.length);var g=this[t]|this[t+1]<<8;return 32768&g?4294901760|g:g},Xg.prototype.readInt16BE=function(t,I){I||Nt(t,2,this.length);var g=this[t+1]|this[t]<<8;return 32768&g?4294901760|g:g},Xg.prototype.readInt32LE=function(t,I){return I||Nt(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},Xg.prototype.readInt32BE=function(t,I){return I||Nt(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},Xg.prototype.readFloatLE=function(t,I){return I||Nt(t,4,this.length),fY(this,t,!0,23,4)},Xg.prototype.readFloatBE=function(t,I){return I||Nt(t,4,this.length),fY(this,t,!1,23,4)},Xg.prototype.readDoubleLE=function(t,I){return I||Nt(t,8,this.length),fY(this,t,!0,52,8)},Xg.prototype.readDoubleBE=function(t,I){return I||Nt(t,8,this.length),fY(this,t,!1,52,8)},Xg.prototype.writeUIntLE=function(t,I,g,C){t=+t,I|=0,g|=0,C||Xi(this,t,I,g,Math.pow(2,8*g)-1,0);var i=1,e=0;for(this[I]=255&t;++e<g&&(i*=256);)this[I+e]=t/i&255;return I+g},Xg.prototype.writeUIntBE=function(t,I,g,C){t=+t,I|=0,g|=0,C||Xi(this,t,I,g,Math.pow(2,8*g)-1,0);var i=g-1,e=1;for(this[I+i]=255&t;--i>=0&&(e*=256);)this[I+i]=t/e&255;return I+g},Xg.prototype.writeUInt8=function(t,I,g){return t=+t,I|=0,g||Xi(this,t,I,1,255,0),Xg.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[I]=255&t,I+1},Xg.prototype.writeUInt16LE=function(t,I,g){return t=+t,I|=0,g||Xi(this,t,I,2,65535,0),Xg.TYPED_ARRAY_SUPPORT?(this[I]=255&t,this[I+1]=t>>>8):HY(this,t,I,!0),I+2},Xg.prototype.writeUInt16BE=function(t,I,g){return t=+t,I|=0,g||Xi(this,t,I,2,65535,0),Xg.TYPED_ARRAY_SUPPORT?(this[I]=t>>>8,this[I+1]=255&t):HY(this,t,I,!1),I+2},Xg.prototype.writeUInt32LE=function(t,I,g){return t=+t,I|=0,g||Xi(this,t,I,4,4294967295,0),Xg.TYPED_ARRAY_SUPPORT?(this[I+3]=t>>>24,this[I+2]=t>>>16,this[I+1]=t>>>8,this[I]=255&t):XY(this,t,I,!0),I+4},Xg.prototype.writeUInt32BE=function(t,I,g){return t=+t,I|=0,g||Xi(this,t,I,4,4294967295,0),Xg.TYPED_ARRAY_SUPPORT?(this[I]=t>>>24,this[I+1]=t>>>16,this[I+2]=t>>>8,this[I+3]=255&t):XY(this,t,I,!1),I+4},Xg.prototype.writeIntLE=function(t,I,g,C){if(t=+t,I|=0,!C){var i=Math.pow(2,8*g-1);Xi(this,t,I,g,i-1,-i)}var e=0,A=1,s=0;for(this[I]=255&t;++e<g&&(A*=256);)t<0&&s===0&&this[I+e-1]!==0&&(s=1),this[I+e]=(t/A>>0)-s&255;return I+g},Xg.prototype.writeIntBE=function(t,I,g,C){if(t=+t,I|=0,!C){var i=Math.pow(2,8*g-1);Xi(this,t,I,g,i-1,-i)}var e=g-1,A=1,s=0;for(this[I+e]=255&t;--e>=0&&(A*=256);)t<0&&s===0&&this[I+e+1]!==0&&(s=1),this[I+e]=(t/A>>0)-s&255;return I+g},Xg.prototype.writeInt8=function(t,I,g){return t=+t,I|=0,g||Xi(this,t,I,1,127,-128),Xg.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[I]=255&t,I+1},Xg.prototype.writeInt16LE=function(t,I,g){return t=+t,I|=0,g||Xi(this,t,I,2,32767,-32768),Xg.TYPED_ARRAY_SUPPORT?(this[I]=255&t,this[I+1]=t>>>8):HY(this,t,I,!0),I+2},Xg.prototype.writeInt16BE=function(t,I,g){return t=+t,I|=0,g||Xi(this,t,I,2,32767,-32768),Xg.TYPED_ARRAY_SUPPORT?(this[I]=t>>>8,this[I+1]=255&t):HY(this,t,I,!1),I+2},Xg.prototype.writeInt32LE=function(t,I,g){return t=+t,I|=0,g||Xi(this,t,I,4,2147483647,-2147483648),Xg.TYPED_ARRAY_SUPPORT?(this[I]=255&t,this[I+1]=t>>>8,this[I+2]=t>>>16,this[I+3]=t>>>24):XY(this,t,I,!0),I+4},Xg.prototype.writeInt32BE=function(t,I,g){return t=+t,I|=0,g||Xi(this,t,I,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),Xg.TYPED_ARRAY_SUPPORT?(this[I]=t>>>24,this[I+1]=t>>>16,this[I+2]=t>>>8,this[I+3]=255&t):XY(this,t,I,!1),I+4},Xg.prototype.writeFloatLE=function(t,I,g){return r8(this,t,I,!0,g)},Xg.prototype.writeFloatBE=function(t,I,g){return r8(this,t,I,!1,g)},Xg.prototype.writeDoubleLE=function(t,I,g){return h8(this,t,I,!0,g)},Xg.prototype.writeDoubleBE=function(t,I,g){return h8(this,t,I,!1,g)},Xg.prototype.copy=function(t,I,g,C){if(g||(g=0),C||C===0||(C=this.length),I>=t.length&&(I=t.length),I||(I=0),C>0&&C<g&&(C=g),C===g||t.length===0||this.length===0)return 0;if(I<0)throw new RangeError("targetStart out of bounds");if(g<0||g>=this.length)throw new RangeError("sourceStart out of bounds");if(C<0)throw new RangeError("sourceEnd out of bounds");C>this.length&&(C=this.length),t.length-I<C-g&&(C=t.length-I+g);var i,e=C-g;if(this===t&&g<I&&I<C)for(i=e-1;i>=0;--i)t[i+I]=this[i+g];else if(e<1e3||!Xg.TYPED_ARRAY_SUPPORT)for(i=0;i<e;++i)t[i+I]=this[i+g];else Uint8Array.prototype.set.call(t,this.subarray(g,g+e),I);return e},Xg.prototype.fill=function(t,I,g,C){if(typeof t=="string"){if(typeof I=="string"?(C=I,I=0,g=this.length):typeof g=="string"&&(C=g,g=this.length),t.length===1){var i=t.charCodeAt(0);i<256&&(t=i)}if(C!==void 0&&typeof C!="string")throw new TypeError("encoding must be a string");if(typeof C=="string"&&!Xg.isEncoding(C))throw new TypeError("Unknown encoding: "+C)}else typeof t=="number"&&(t&=255);if(I<0||this.length<I||this.length<g)throw new RangeError("Out of range index");if(g<=I)return this;var e;if(I>>>=0,g=g===void 0?this.length:g>>>0,t||(t=0),typeof t=="number")for(e=I;e<g;++e)this[e]=t;else{var A=Ws(t)?t:qN(new Xg(t,C).toString()),s=A.length;for(e=0;e<g-I;++e)this[e+I]=A[e%s]}return this};var Drg=/[^+\/0-9A-Za-z-_]/g;function Krg(t){return t<16?"0"+t.toString(16):t.toString(16)}function qN(t,I){var g;I=I||1/0;for(var C=t.length,i=null,e=[],A=0;A<C;++A){if((g=t.charCodeAt(A))>55295&&g<57344){if(!i){if(g>56319){(I-=3)>-1&&e.push(239,191,189);continue}if(A+1===C){(I-=3)>-1&&e.push(239,191,189);continue}i=g;continue}if(g<56320){(I-=3)>-1&&e.push(239,191,189),i=g;continue}g=65536+(i-55296<<10|g-56320)}else i&&(I-=3)>-1&&e.push(239,191,189);if(i=null,g<128){if((I-=1)<0)break;e.push(g)}else if(g<2048){if((I-=2)<0)break;e.push(g>>6|192,63&g|128)}else if(g<65536){if((I-=3)<0)break;e.push(g>>12|224,g>>6&63|128,63&g|128)}else{if(!(g<1114112))throw new Error("Invalid code point");if((I-=4)<0)break;e.push(g>>18|240,g>>12&63|128,g>>6&63|128,63&g|128)}}return e}function EIg(t){return function(I){var g,C,i,e,A,s;b9||JIg();var l=I.length;if(l%4>0)throw new Error("Invalid string. Length must be a multiple of 4");A=I[l-2]==="="?2:I[l-1]==="="?1:0,s=new Grg(3*l/4-A),i=A>0?l-4:l;var n=0;for(g=0,C=0;g<i;g+=4,C+=3)e=De[I.charCodeAt(g)]<<18|De[I.charCodeAt(g+1)]<<12|De[I.charCodeAt(g+2)]<<6|De[I.charCodeAt(g+3)],s[n++]=e>>16&255,s[n++]=e>>8&255,s[n++]=255&e;return A===2?(e=De[I.charCodeAt(g)]<<2|De[I.charCodeAt(g+1)]>>4,s[n++]=255&e):A===1&&(e=De[I.charCodeAt(g)]<<10|De[I.charCodeAt(g+1)]<<4|De[I.charCodeAt(g+2)]>>2,s[n++]=e>>8&255,s[n++]=255&e),s}(function(I){if((I=function(g){return g.trim?g.trim():g.replace(/^\s+|\s+$/g,"")}(I).replace(Drg,"")).length<2)return"";for(;I.length%4!=0;)I+="=";return I}(t))}function xV(t,I,g,C){for(var i=0;i<C&&!(i+g>=I.length||i>=t.length);++i)I[i+g]=t[i];return i}function gG(t){return t!=null&&(!!t._isBuffer||b8(t)||function(I){return typeof I.readFloatLE=="function"&&typeof I.slice=="function"&&b8(I.slice(0,0))}(t))}function b8(t){return!!t.constructor&&typeof t.constructor.isBuffer=="function"&&t.constructor.isBuffer(t)}var Frg=Object.freeze({__proto__:null,INSPECT_MAX_BYTES:50,kMaxLength:Brg,Buffer:Xg,SlowBuffer:function(t){return+t!=t&&(t=0),Xg.alloc(+t)},isBuffer:gG}),nt={};function PIg(){throw new Error("setTimeout has not been defined")}function _Ig(){throw new Error("clearTimeout has not been defined")}var xn=PIg,jn=_Ig;function qIg(t){if(xn===setTimeout)return setTimeout(t,0);if((xn===PIg||!xn)&&setTimeout)return xn=setTimeout,setTimeout(t,0);try{return xn(t,0)}catch{try{return xn.call(null,t,0)}catch{return xn.call(this,t,0)}}}typeof r0.setTimeout=="function"&&(xn=setTimeout),typeof r0.clearTimeout=="function"&&(jn=clearTimeout);var To,Ll=[],ih=!1,VN=-1;function krg(){ih&&To&&(ih=!1,To.length?Ll=To.concat(Ll):VN=-1,Ll.length&&$Ig())}function $Ig(){if(!ih){var t=qIg(krg);ih=!0;for(var I=Ll.length;I;){for(To=Ll,Ll=[];++VN<I;)To&&To[VN].run();VN=-1,I=Ll.length}To=null,ih=!1,function(g){if(jn===clearTimeout)return clearTimeout(g);if((jn===_Ig||!jn)&&clearTimeout)return jn=clearTimeout,clearTimeout(g);try{jn(g)}catch{try{return jn.call(null,g)}catch{return jn.call(this,g)}}}(t)}}function Kt(t){var I=new Array(arguments.length-1);if(arguments.length>1)for(var g=1;g<arguments.length;g++)I[g-1]=arguments[g];Ll.push(new gCg(t,I)),Ll.length!==1||ih||qIg($Ig)}function gCg(t,I){this.fun=t,this.array=I}gCg.prototype.run=function(){this.fun.apply(null,this.array)};var Nu=r0.performance||{};Nu.now||Nu.mozNow||Nu.msNow||Nu.oNow||Nu.webkitNow;var qc={env:{}},KH={exports:{}};function Qn(){}function EI(){EI.init.call(this)}function ICg(t){return t._maxListeners===void 0?EI.defaultMaxListeners:t._maxListeners}function zrg(t,I,g){if(I)t.call(g);else for(var C=t.length,i=IG(t,C),e=0;e<C;++e)i[e].call(g)}function Jrg(t,I,g,C){if(I)t.call(g,C);else for(var i=t.length,e=IG(t,i),A=0;A<i;++A)e[A].call(g,C)}function Lrg(t,I,g,C,i){if(I)t.call(g,C,i);else for(var e=t.length,A=IG(t,e),s=0;s<e;++s)A[s].call(g,C,i)}function vrg(t,I,g,C,i,e){if(I)t.call(g,C,i,e);else for(var A=t.length,s=IG(t,A),l=0;l<A;++l)s[l].call(g,C,i,e)}function Trg(t,I,g,C){if(I)t.apply(g,C);else for(var i=t.length,e=IG(t,i),A=0;A<i;++A)e[A].apply(g,C)}function u8(t,I,g,C){var i,e,A,s;if(typeof g!="function")throw new TypeError('"listener" argument must be a function');if((e=t._events)?(e.newListener&&(t.emit("newListener",I,g.listener?g.listener:g),e=t._events),A=e[I]):(e=t._events=new Qn,t._eventsCount=0),A){if(typeof A=="function"?A=e[I]=C?[g,A]:[A,g]:C?A.unshift(g):A.push(g),!A.warned&&(i=ICg(t))&&i>0&&A.length>i){A.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+A.length+" "+I+" listeners added. Use emitter.setMaxListeners() to increase limit");l.name="MaxListenersExceededWarning",l.emitter=t,l.type=I,l.count=A.length,s=l,typeof console.warn=="function"?console.warn(s):console.log(s)}}else A=e[I]=g,++t._eventsCount;return t}function m8(t,I,g){var C=!1;function i(){t.removeListener(I,i),C||(C=!0,g.apply(t,arguments))}return i.listener=g,i}function Z8(t){var I=this._events;if(I){var g=I[t];if(typeof g=="function")return 1;if(g)return g.length}return 0}function IG(t,I){for(var g=new Array(I);I--;)g[I]=t[I];return g}Qn.prototype=Object.create(null),EI.EventEmitter=EI,EI.usingDomains=!1,EI.prototype.domain=void 0,EI.prototype._events=void 0,EI.prototype._maxListeners=void 0,EI.defaultMaxListeners=10,EI.init=function(){this.domain=null,EI.usingDomains&&(void 0).active,this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=new Qn,this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},EI.prototype.setMaxListeners=function(t){if(typeof t!="number"||t<0||isNaN(t))throw new TypeError('"n" argument must be a positive number');return this._maxListeners=t,this},EI.prototype.getMaxListeners=function(){return ICg(this)},EI.prototype.emit=function(t){var I,g,C,i,e,A,s,l=t==="error";if(A=this._events)l=l&&A.error==null;else if(!l)return!1;if(s=this.domain,l){if(I=arguments[1],!s){if(I instanceof Error)throw I;var n=new Error('Uncaught, unspecified "error" event. ('+I+")");throw n.context=I,n}return I||(I=new Error('Uncaught, unspecified "error" event')),I.domainEmitter=this,I.domain=s,I.domainThrown=!1,s.emit("error",I),!1}if(!(g=A[t]))return!1;var a=typeof g=="function";switch(C=arguments.length){case 1:zrg(g,a,this);break;case 2:Jrg(g,a,this,arguments[1]);break;case 3:Lrg(g,a,this,arguments[1],arguments[2]);break;case 4:vrg(g,a,this,arguments[1],arguments[2],arguments[3]);break;default:for(i=new Array(C-1),e=1;e<C;e++)i[e-1]=arguments[e];Trg(g,a,this,i)}return!0},EI.prototype.addListener=function(t,I){return u8(this,t,I,!1)},EI.prototype.on=EI.prototype.addListener,EI.prototype.prependListener=function(t,I){return u8(this,t,I,!0)},EI.prototype.once=function(t,I){if(typeof I!="function")throw new TypeError('"listener" argument must be a function');return this.on(t,m8(this,t,I)),this},EI.prototype.prependOnceListener=function(t,I){if(typeof I!="function")throw new TypeError('"listener" argument must be a function');return this.prependListener(t,m8(this,t,I)),this},EI.prototype.removeListener=function(t,I){var g,C,i,e,A;if(typeof I!="function")throw new TypeError('"listener" argument must be a function');if(!(C=this._events))return this;if(!(g=C[t]))return this;if(g===I||g.listener&&g.listener===I)--this._eventsCount==0?this._events=new Qn:(delete C[t],C.removeListener&&this.emit("removeListener",t,g.listener||I));else if(typeof g!="function"){for(i=-1,e=g.length;e-- >0;)if(g[e]===I||g[e].listener&&g[e].listener===I){A=g[e].listener,i=e;break}if(i<0)return this;if(g.length===1){if(g[0]=void 0,--this._eventsCount==0)return this._events=new Qn,this;delete C[t]}else(function(s,l){for(var n=l,a=n+1,d=s.length;a<d;n+=1,a+=1)s[n]=s[a];s.pop()})(g,i);C.removeListener&&this.emit("removeListener",t,A||I)}return this},EI.prototype.removeAllListeners=function(t){var I,g;if(!(g=this._events))return this;if(!g.removeListener)return arguments.length===0?(this._events=new Qn,this._eventsCount=0):g[t]&&(--this._eventsCount==0?this._events=new Qn:delete g[t]),this;if(arguments.length===0){for(var C,i=Object.keys(g),e=0;e<i.length;++e)(C=i[e])!=="removeListener"&&this.removeAllListeners(C);return this.removeAllListeners("removeListener"),this._events=new Qn,this._eventsCount=0,this}if(typeof(I=g[t])=="function")this.removeListener(t,I);else if(I)do this.removeListener(t,I[I.length-1]);while(I[0]);return this},EI.prototype.listeners=function(t){var I,g,C=this._events;return g=C&&(I=C[t])?typeof I=="function"?[I.listener||I]:function(i){for(var e=new Array(i.length),A=0;A<e.length;++A)e[A]=i[A].listener||i[A];return e}(I):[],g},EI.listenerCount=function(t,I){return typeof t.listenerCount=="function"?t.listenerCount(I):Z8.call(t,I)},EI.prototype.listenerCount=Z8,EI.prototype.eventNames=function(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]};var xrg=Object.freeze({__proto__:null,default:EI,EventEmitter:EI}),Fa=typeof Object.create=="function"?function(t,I){t.super_=I,t.prototype=Object.create(I.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:function(t,I){t.super_=I;var g=function(){};g.prototype=I.prototype,t.prototype=new g,t.prototype.constructor=t},jrg=/%[sdj%]/g;function jV(t){if(!Gm(t)){for(var I=[],g=0;g<arguments.length;g++)I.push(Vs(arguments[g]));return I.join(" ")}g=1;for(var C=arguments,i=C.length,e=String(t).replace(jrg,function(s){if(s==="%%")return"%";if(g>=i)return s;switch(s){case"%s":return String(C[g++]);case"%d":return Number(C[g++]);case"%j":try{return JSON.stringify(C[g++])}catch{return"[Circular]"}default:return s}}),A=C[g];g<i;A=C[++g])CG(A)||!nd(A)?e+=" "+A:e+=" "+Vs(A);return e}function QV(t,I){if(Ys(r0.process))return function(){return QV(t,I).apply(this,arguments)};if(qc.noDeprecation===!0)return t;var g=!1;return function(){if(!g){if(qc.throwDeprecation)throw new Error(I);qc.traceDeprecation?console.trace(I):console.error(I),g=!0}return t.apply(this,arguments)}}var FH,SY={};function m9(t){return Ys(FH)&&(FH=qc.env.NODE_DEBUG||""),t=t.toUpperCase(),!SY[t]&&(new RegExp("\\b"+t+"\\b","i").test(FH)?SY[t]=function(){var I=jV.apply(null,arguments);console.error("%s %d: %s",t,0,I)}:SY[t]=function(){}),SY[t]}function Vs(t,I){var g={seen:[],stylize:Org};return arguments.length>=3&&(g.depth=arguments[2]),arguments.length>=4&&(g.colors=arguments[3]),OV(I)?g.showHidden=I:I&&p9(g,I),Ys(g.showHidden)&&(g.showHidden=!1),Ys(g.depth)&&(g.depth=2),Ys(g.colors)&&(g.colors=!1),Ys(g.customInspect)&&(g.customInspect=!0),g.colors&&(g.stylize=Qrg),$N(g,t,g.depth)}function Qrg(t,I){var g=Vs.styles[I];return g?"\x1B["+Vs.colors[g][0]+"m"+t+"\x1B["+Vs.colors[g][1]+"m":t}function Org(t,I){return t}function $N(t,I,g){if(t.customInspect&&I&&cm(I.inspect)&&I.inspect!==Vs&&(!I.constructor||I.constructor.prototype!==I)){var C=I.inspect(g,t);return Gm(C)||(C=$N(t,C,g)),C}var i=function(o,c){if(Ys(c))return o.stylize("undefined","undefined");if(Gm(c)){var r="'"+JSON.stringify(c).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return o.stylize(r,"string")}if(G9(c))return o.stylize(""+c,"number");if(OV(c))return o.stylize(""+c,"boolean");if(CG(c))return o.stylize("null","null")}(t,I);if(i)return i;var e=Object.keys(I),A=function(o){var c={};return o.forEach(function(r,h){c[r]=!0}),c}(e);if(t.showHidden&&(e=Object.getOwnPropertyNames(I)),om(I)&&(e.indexOf("message")>=0||e.indexOf("description")>=0))return kH(I);if(e.length===0){if(cm(I)){var s=I.name?": "+I.name:"";return t.stylize("[Function"+s+"]","special")}if(am(I))return t.stylize(RegExp.prototype.toString.call(I),"regexp");if(gV(I))return t.stylize(Date.prototype.toString.call(I),"date");if(om(I))return kH(I)}var l,n="",a=!1,d=["{","}"];return Z9(I)&&(a=!0,d=["[","]"]),cm(I)&&(n=" [Function"+(I.name?": "+I.name:"")+"]"),am(I)&&(n=" "+RegExp.prototype.toString.call(I)),gV(I)&&(n=" "+Date.prototype.toUTCString.call(I)),om(I)&&(n=" "+kH(I)),e.length!==0||a&&I.length!=0?g<0?am(I)?t.stylize(RegExp.prototype.toString.call(I),"regexp"):t.stylize("[Object]","special"):(t.seen.push(I),l=a?function(o,c,r,h,b){for(var u=[],m=0,Z=c.length;m<Z;++m)sCg(c,String(m))?u.push(zH(o,c,r,h,String(m),!0)):u.push("");return b.forEach(function(p){p.match(/^\d+$/)||u.push(zH(o,c,r,h,p,!0))}),u}(t,I,g,A,e):e.map(function(o){return zH(t,I,g,A,o,a)}),t.seen.pop(),function(o,c,r){return o.reduce(function(h,b){return b.indexOf(`
- `),h+b.replace(/\u001b\[\d\d?m/g,"").length+1},0)>60?r[0]+(c===""?"":c+`
- `)+" "+o.join(`,
- `)+" "+r[1]:r[0]+c+" "+o.join(", ")+" "+r[1]}(l,n,d)):d[0]+n+d[1]}function kH(t){return"["+Error.prototype.toString.call(t)+"]"}function zH(t,I,g,C,i,e){var A,s,l;if((l=Object.getOwnPropertyDescriptor(I,i)||{value:I[i]}).get?s=l.set?t.stylize("[Getter/Setter]","special"):t.stylize("[Getter]","special"):l.set&&(s=t.stylize("[Setter]","special")),sCg(C,i)||(A="["+i+"]"),s||(t.seen.indexOf(l.value)<0?(s=CG(g)?$N(t,l.value,null):$N(t,l.value,g-1)).indexOf(`
- `)>-1&&(s=e?s.split(`
- `).map(function(n){return" "+n}).join(`
- `).substr(2):`
- `+s.split(`
- `).map(function(n){return" "+n}).join(`
- `)):s=t.stylize("[Circular]","special")),Ys(A)){if(e&&i.match(/^\d+$/))return s;(A=JSON.stringify(""+i)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(A=A.substr(1,A.length-2),A=t.stylize(A,"name")):(A=A.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),A=t.stylize(A,"string"))}return A+": "+s}function Z9(t){return Array.isArray(t)}function OV(t){return typeof t=="boolean"}function CG(t){return t===null}function CCg(t){return t==null}function G9(t){return typeof t=="number"}function Gm(t){return typeof t=="string"}function tCg(t){return typeof t=="symbol"}function Ys(t){return t===void 0}function am(t){return nd(t)&&w9(t)==="[object RegExp]"}function nd(t){return typeof t=="object"&&t!==null}function gV(t){return nd(t)&&w9(t)==="[object Date]"}function om(t){return nd(t)&&(w9(t)==="[object Error]"||t instanceof Error)}function cm(t){return typeof t=="function"}function iCg(t){return t===null||typeof t=="boolean"||typeof t=="number"||typeof t=="string"||typeof t=="symbol"||t===void 0}function eCg(t){return gG(t)}function w9(t){return Object.prototype.toString.call(t)}function JH(t){return t<10?"0"+t.toString(10):t.toString(10)}Vs.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},Vs.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"};var Urg=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function Erg(){var t=new Date,I=[JH(t.getHours()),JH(t.getMinutes()),JH(t.getSeconds())].join(":");return[t.getDate(),Urg[t.getMonth()],I].join(" ")}function ACg(){console.log("%s - %s",Erg(),jV.apply(null,arguments))}function p9(t,I){if(!I||!nd(I))return t;for(var g=Object.keys(I),C=g.length;C--;)t[g[C]]=I[g[C]];return t}function sCg(t,I){return Object.prototype.hasOwnProperty.call(t,I)}var Prg={inherits:Fa,_extend:p9,log:ACg,isBuffer:eCg,isPrimitive:iCg,isFunction:cm,isError:om,isDate:gV,isObject:nd,isRegExp:am,isUndefined:Ys,isSymbol:tCg,isString:Gm,isNumber:G9,isNullOrUndefined:CCg,isNull:CG,isBoolean:OV,isArray:Z9,inspect:Vs,deprecate:QV,format:jV,debuglog:m9},_rg=Object.freeze({__proto__:null,format:jV,deprecate:QV,debuglog:m9,inspect:Vs,isArray:Z9,isBoolean:OV,isNull:CG,isNullOrUndefined:CCg,isNumber:G9,isString:Gm,isSymbol:tCg,isUndefined:Ys,isRegExp:am,isObject:nd,isDate:gV,isError:om,isFunction:cm,isPrimitive:iCg,isBuffer:eCg,log:ACg,inherits:Fa,_extend:p9,default:Prg});function Ko(){this.head=null,this.tail=null,this.length=0}Ko.prototype.push=function(t){var I={data:t,next:null};this.length>0?this.tail.next=I:this.head=I,this.tail=I,++this.length},Ko.prototype.unshift=function(t){var I={data:t,next:this.head};this.length===0&&(this.tail=I),this.head=I,++this.length},Ko.prototype.shift=function(){if(this.length!==0){var t=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,t}},Ko.prototype.clear=function(){this.head=this.tail=null,this.length=0},Ko.prototype.join=function(t){if(this.length===0)return"";for(var I=this.head,g=""+I.data;I=I.next;)g+=t+I.data;return g},Ko.prototype.concat=function(t){if(this.length===0)return Xg.alloc(0);if(this.length===1)return this.head.data;for(var I=Xg.allocUnsafe(t>>>0),g=this.head,C=0;g;)g.data.copy(I,C),C+=g.data.length,g=g.next;return I};var qrg=Xg.isEncoding||function(t){switch(t&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function dm(t){switch(this.encoding=(t||"utf8").toLowerCase().replace(/[-_]/,""),function(I){if(I&&!qrg(I))throw new Error("Unknown encoding: "+I)}(t),this.encoding){case"utf8":this.surrogateSize=3;break;case"ucs2":case"utf16le":this.surrogateSize=2,this.detectIncompleteChar=ghg;break;case"base64":this.surrogateSize=3,this.detectIncompleteChar=Ihg;break;default:return void(this.write=$rg)}this.charBuffer=new Xg(6),this.charReceived=0,this.charLength=0}function $rg(t){return t.toString(this.encoding)}function ghg(t){this.charReceived=t.length%2,this.charLength=this.charReceived?2:0}function Ihg(t){this.charReceived=t.length%3,this.charLength=this.charReceived?3:0}dm.prototype.write=function(t){for(var I="";this.charLength;){var g=t.length>=this.charLength-this.charReceived?this.charLength-this.charReceived:t.length;if(t.copy(this.charBuffer,this.charReceived,0,g),this.charReceived+=g,this.charReceived<this.charLength)return"";if(t=t.slice(g,t.length),!((i=(I=this.charBuffer.slice(0,this.charLength).toString(this.encoding)).charCodeAt(I.length-1))>=55296&&i<=56319)){if(this.charReceived=this.charLength=0,t.length===0)return I;break}this.charLength+=this.surrogateSize,I=""}this.detectIncompleteChar(t);var C=t.length;this.charLength&&(t.copy(this.charBuffer,0,t.length-this.charReceived,C),C-=this.charReceived);var i;if(C=(I+=t.toString(this.encoding,0,C)).length-1,(i=I.charCodeAt(C))>=55296&&i<=56319){var e=this.surrogateSize;return this.charLength+=e,this.charReceived+=e,this.charBuffer.copy(this.charBuffer,e,0,e),t.copy(this.charBuffer,0,0,e),I.substring(0,C)}return I},dm.prototype.detectIncompleteChar=function(t){for(var I=t.length>=3?3:t.length;I>0;I--){var g=t[t.length-I];if(I==1&&g>>5==6){this.charLength=2;break}if(I<=2&&g>>4==14){this.charLength=3;break}if(I<=3&&g>>3==30){this.charLength=4;break}}this.charReceived=I},dm.prototype.end=function(t){var I="";if(t&&t.length&&(I=this.write(t)),this.charReceived){var g=this.charReceived,C=this.charBuffer,i=this.encoding;I+=C.slice(0,g).toString(i)}return I},QC.ReadableState=lCg;var dC=m9("stream");function lCg(t,I){t=t||{},this.objectMode=!!t.objectMode,I instanceof Ze&&(this.objectMode=this.objectMode||!!t.readableObjectMode);var g=t.highWaterMark,C=this.objectMode?16:16384;this.highWaterMark=g||g===0?g:C,this.highWaterMark=~~this.highWaterMark,this.buffer=new Ko,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.defaultEncoding=t.defaultEncoding||"utf8",this.ranOut=!1,this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(this.decoder=new dm(t.encoding),this.encoding=t.encoding)}function QC(t){if(!(this instanceof QC))return new QC(t);this._readableState=new lCg(t,this),this.readable=!0,t&&typeof t.read=="function"&&(this._read=t.read),EI.call(this)}function G8(t,I,g,C,i){var e=function(n,a){var d=null;return gG(a)||typeof a=="string"||a==null||n.objectMode||(d=new TypeError("Invalid non-string/buffer chunk")),d}(I,g);if(e)t.emit("error",e);else if(g===null)I.reading=!1,function(n,a){if(!a.ended){if(a.decoder){var d=a.decoder.end();d&&d.length&&(a.buffer.push(d),a.length+=a.objectMode?1:d.length)}a.ended=!0,IV(n)}}(t,I);else if(I.objectMode||g&&g.length>0)if(I.ended&&!i){var A=new Error("stream.push() after EOF");t.emit("error",A)}else if(I.endEmitted&&i){var s=new Error("stream.unshift() after end event");t.emit("error",s)}else{var l;!I.decoder||i||C||(g=I.decoder.write(g),l=!I.objectMode&&g.length===0),i||(I.reading=!1),l||(I.flowing&&I.length===0&&!I.sync?(t.emit("data",g),t.read(0)):(I.length+=I.objectMode?1:g.length,i?I.buffer.unshift(g):I.buffer.push(g),I.needReadable&&IV(t))),function(n,a){a.readingMore||(a.readingMore=!0,Kt(Chg,n,a))}(t,I)}else i||(I.reading=!1);return function(n){return!n.ended&&(n.needReadable||n.length<n.highWaterMark||n.length===0)}(I)}Fa(QC,EI),QC.prototype.push=function(t,I){var g=this._readableState;return g.objectMode||typeof t!="string"||(I=I||g.defaultEncoding)!==g.encoding&&(t=Xg.from(t,I),I=""),G8(this,g,t,I,!1)},QC.prototype.unshift=function(t){return G8(this,this._readableState,t,"",!0)},QC.prototype.isPaused=function(){return this._readableState.flowing===!1},QC.prototype.setEncoding=function(t){return this._readableState.decoder=new dm(t),this._readableState.encoding=t,this};function w8(t,I){return t<=0||I.length===0&&I.ended?0:I.objectMode?1:t!=t?I.flowing&&I.length?I.buffer.head.data.length:I.length:(t>I.highWaterMark&&(I.highWaterMark=function(g){return g>=8388608?g=8388608:(g--,g|=g>>>1,g|=g>>>2,g|=g>>>4,g|=g>>>8,g|=g>>>16,g++),g}(t)),t<=I.length?t:I.ended?I.length:(I.needReadable=!0,0))}function IV(t){var I=t._readableState;I.needReadable=!1,I.emittedReadable||(dC("emitReadable",I.flowing),I.emittedReadable=!0,I.sync?Kt(p8,t):p8(t))}function p8(t){dC("emit readable"),t.emit("readable"),B9(t)}function Chg(t,I){for(var g=I.length;!I.reading&&!I.flowing&&!I.ended&&I.length<I.highWaterMark&&(dC("maybeReadMore read 0"),t.read(0),g!==I.length);)g=I.length;I.readingMore=!1}function thg(t){dC("readable nexttick read 0"),t.read(0)}function ihg(t,I){I.reading||(dC("resume read 0"),t.read(0)),I.resumeScheduled=!1,I.awaitDrain=0,t.emit("resume"),B9(t),I.flowing&&!I.reading&&t.read(0)}function B9(t){var I=t._readableState;for(dC("flow",I.flowing);I.flowing&&t.read()!==null;);}function B8(t,I){return I.length===0?null:(I.objectMode?g=I.buffer.shift():!t||t>=I.length?(g=I.decoder?I.buffer.join(""):I.buffer.length===1?I.buffer.head.data:I.buffer.concat(I.length),I.buffer.clear()):g=function(C,i,e){var A;return C<i.head.data.length?(A=i.head.data.slice(0,C),i.head.data=i.head.data.slice(C)):A=C===i.head.data.length?i.shift():e?function(s,l){var n=l.head,a=1,d=n.data;for(s-=d.length;n=n.next;){var o=n.data,c=s>o.length?o.length:s;if(c===o.length?d+=o:d+=o.slice(0,s),(s-=c)===0){c===o.length?(++a,n.next?l.head=n.next:l.head=l.tail=null):(l.head=n,n.data=o.slice(c));break}++a}return l.length-=a,d}(C,i):function(s,l){var n=Xg.allocUnsafe(s),a=l.head,d=1;for(a.data.copy(n),s-=a.data.length;a=a.next;){var o=a.data,c=s>o.length?o.length:s;if(o.copy(n,n.length-s,0,c),(s-=c)===0){c===o.length?(++d,a.next?l.head=a.next:l.head=l.tail=null):(l.head=a,a.data=o.slice(c));break}++d}return l.length-=d,n}(C,i),A}(t,I.buffer,I.decoder),g);var g}function LH(t){var I=t._readableState;if(I.length>0)throw new Error('"endReadable()" called on non-empty stream');I.endEmitted||(I.ended=!0,Kt(ehg,I,t))}function ehg(t,I){t.endEmitted||t.length!==0||(t.endEmitted=!0,I.readable=!1,I.emit("end"))}function W8(t,I){for(var g=0,C=t.length;g<C;g++)if(t[g]===I)return g;return-1}function Ahg(){}function shg(t,I,g){this.chunk=t,this.encoding=I,this.callback=g,this.next=null}function PS(t,I){Object.defineProperty(this,"buffer",{get:QV(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.")}),t=t||{},this.objectMode=!!t.objectMode,I instanceof Ze&&(this.objectMode=this.objectMode||!!t.writableObjectMode);var g=t.highWaterMark,C=this.objectMode?16:16384;this.highWaterMark=g||g===0?g:C,this.highWaterMark=~~this.highWaterMark,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1;var i=t.decodeStrings===!1;this.decodeStrings=!i,this.defaultEncoding=t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){(function(A,s){var l=A._writableState,n=l.sync,a=l.writecb;if(function(o){o.writing=!1,o.writecb=null,o.length-=o.writelen,o.writelen=0}(l),s)(function(o,c,r,h,b){--c.pendingcb,r?Kt(b,h):b(h),o._writableState.errorEmitted=!0,o.emit("error",h)})(A,l,n,s,a);else{var d=aCg(l);d||l.corked||l.bufferProcessing||!l.bufferedRequest||nCg(A,l),n?Kt(y8,A,l,d,a):y8(A,l,d,a)}})(I,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new cCg(this)}function Ut(t){if(!(this instanceof Ut||this instanceof Ze))return new Ut(t);this._writableState=new PS(t,this),this.writable=!0,t&&(typeof t.write=="function"&&(this._write=t.write),typeof t.writev=="function"&&(this._writev=t.writev)),EI.call(this)}function _S(t,I,g,C,i,e,A){I.writelen=C,I.writecb=A,I.writing=!0,I.sync=!0,g?t._writev(i,I.onwrite):t._write(i,e,I.onwrite),I.sync=!1}function y8(t,I,g,C){g||function(i,e){e.length===0&&e.needDrain&&(e.needDrain=!1,i.emit("drain"))}(t,I),I.pendingcb--,C(),oCg(t,I)}function nCg(t,I){I.bufferProcessing=!0;var g=I.bufferedRequest;if(t._writev&&g&&g.next){var C=I.bufferedRequestCount,i=new Array(C),e=I.corkedRequestsFree;e.entry=g;for(var A=0;g;)i[A]=g,g=g.next,A+=1;_S(t,I,!0,I.length,i,"",e.finish),I.pendingcb++,I.lastBufferedRequest=null,e.next?(I.corkedRequestsFree=e.next,e.next=null):I.corkedRequestsFree=new cCg(I)}else{for(;g;){var s=g.chunk,l=g.encoding,n=g.callback;if(_S(t,I,!1,I.objectMode?1:s.length,s,l,n),g=g.next,I.writing)break}g===null&&(I.lastBufferedRequest=null)}I.bufferedRequestCount=0,I.bufferedRequest=g,I.bufferProcessing=!1}function aCg(t){return t.ending&&t.length===0&&t.bufferedRequest===null&&!t.finished&&!t.writing}function Y8(t,I){I.prefinished||(I.prefinished=!0,t.emit("prefinish"))}function oCg(t,I){var g=aCg(I);return g&&(I.pendingcb===0?(Y8(t,I),I.finished=!0,t.emit("finish")):Y8(t,I)),g}function cCg(t){var I=this;this.next=null,this.entry=null,this.finish=function(g){var C=I.entry;for(I.entry=null;C;){var i=C.callback;t.pendingcb--,i(g),C=C.next}t.corkedRequestsFree?t.corkedRequestsFree.next=I:t.corkedRequestsFree=I}}QC.prototype.read=function(t){dC("read",t),t=parseInt(t,10);var I=this._readableState,g=t;if(t!==0&&(I.emittedReadable=!1),t===0&&I.needReadable&&(I.length>=I.highWaterMark||I.ended))return dC("read: emitReadable",I.length,I.ended),I.length===0&&I.ended?LH(this):IV(this),null;if((t=w8(t,I))===0&&I.ended)return I.length===0&&LH(this),null;var C,i=I.needReadable;return dC("need readable",i),(I.length===0||I.length-t<I.highWaterMark)&&dC("length less than watermark",i=!0),I.ended||I.reading?dC("reading or ended",i=!1):i&&(dC("do read"),I.reading=!0,I.sync=!0,I.length===0&&(I.needReadable=!0),this._read(I.highWaterMark),I.sync=!1,I.reading||(t=w8(g,I))),(C=t>0?B8(t,I):null)===null?(I.needReadable=!0,t=0):I.length-=t,I.length===0&&(I.ended||(I.needReadable=!0),g!==t&&I.ended&&LH(this)),C!==null&&this.emit("data",C),C},QC.prototype._read=function(t){this.emit("error",new Error("not implemented"))},QC.prototype.pipe=function(t,I){var g=this,C=this._readableState;switch(C.pipesCount){case 0:C.pipes=t;break;case 1:C.pipes=[C.pipes,t];break;default:C.pipes.push(t)}C.pipesCount+=1,dC("pipe count=%d opts=%j",C.pipesCount,I);var i=!I||I.end!==!1?A:n;function e(b){dC("onunpipe"),b===g&&n()}function A(){dC("onend"),t.end()}C.endEmitted?Kt(i):g.once("end",i),t.on("unpipe",e);var s=function(b){return function(){var u=b._readableState;dC("pipeOnDrain",u.awaitDrain),u.awaitDrain&&u.awaitDrain--,u.awaitDrain===0&&b.listeners("data").length&&(u.flowing=!0,B9(b))}}(g);t.on("drain",s);var l=!1;function n(){dC("cleanup"),t.removeListener("close",c),t.removeListener("finish",r),t.removeListener("drain",s),t.removeListener("error",o),t.removeListener("unpipe",e),g.removeListener("end",A),g.removeListener("end",n),g.removeListener("data",d),l=!0,!C.awaitDrain||t._writableState&&!t._writableState.needDrain||s()}var a=!1;function d(b){dC("ondata"),a=!1,t.write(b)!==!1||a||((C.pipesCount===1&&C.pipes===t||C.pipesCount>1&&W8(C.pipes,t)!==-1)&&!l&&(dC("false write response, pause",g._readableState.awaitDrain),g._readableState.awaitDrain++,a=!0),g.pause())}function o(b){var u;dC("onerror",b),h(),t.removeListener("error",o),u="error",t.listeners(u).length===0&&t.emit("error",b)}function c(){t.removeListener("finish",r),h()}function r(){dC("onfinish"),t.removeListener("close",c),h()}function h(){dC("unpipe"),g.unpipe(t)}return g.on("data",d),function(b,u,m){if(typeof b.prependListener=="function")return b.prependListener(u,m);b._events&&b._events[u]?Array.isArray(b._events[u])?b._events[u].unshift(m):b._events[u]=[m,b._events[u]]:b.on(u,m)}(t,"error",o),t.once("close",c),t.once("finish",r),t.emit("pipe",g),C.flowing||(dC("pipe resume"),g.resume()),t},QC.prototype.unpipe=function(t){var I=this._readableState;if(I.pipesCount===0)return this;if(I.pipesCount===1)return t&&t!==I.pipes||(t||(t=I.pipes),I.pipes=null,I.pipesCount=0,I.flowing=!1,t&&t.emit("unpipe",this)),this;if(!t){var g=I.pipes,C=I.pipesCount;I.pipes=null,I.pipesCount=0,I.flowing=!1;for(var i=0;i<C;i++)g[i].emit("unpipe",this);return this}var e=W8(I.pipes,t);return e===-1||(I.pipes.splice(e,1),I.pipesCount-=1,I.pipesCount===1&&(I.pipes=I.pipes[0]),t.emit("unpipe",this)),this},QC.prototype.on=function(t,I){var g=EI.prototype.on.call(this,t,I);if(t==="data")this._readableState.flowing!==!1&&this.resume();else if(t==="readable"){var C=this._readableState;C.endEmitted||C.readableListening||(C.readableListening=C.needReadable=!0,C.emittedReadable=!1,C.reading?C.length&&IV(this):Kt(thg,this))}return g},QC.prototype.addListener=QC.prototype.on,QC.prototype.resume=function(){var t=this._readableState;return t.flowing||(dC("resume"),t.flowing=!0,function(I,g){g.resumeScheduled||(g.resumeScheduled=!0,Kt(ihg,I,g))}(this,t)),this},QC.prototype.pause=function(){return dC("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(dC("pause"),this._readableState.flowing=!1,this.emit("pause")),this},QC.prototype.wrap=function(t){var I=this._readableState,g=!1,C=this;for(var i in t.on("end",function(){if(dC("wrapped end"),I.decoder&&!I.ended){var e=I.decoder.end();e&&e.length&&C.push(e)}C.push(null)}),t.on("data",function(e){dC("wrapped data"),I.decoder&&(e=I.decoder.write(e)),I.objectMode&&e==null||(I.objectMode||e&&e.length)&&(C.push(e)||(g=!0,t.pause()))}),t)this[i]===void 0&&typeof t[i]=="function"&&(this[i]=function(e){return function(){return t[e].apply(t,arguments)}}(i));return function(e,A){for(var s=0,l=e.length;s<l;s++)A(e[s],s)}(["error","close","destroy","pause","resume"],function(e){t.on(e,C.emit.bind(C,e))}),C._read=function(e){dC("wrapped _read",e),g&&(g=!1,t.resume())},C},QC._fromList=B8,Ut.WritableState=PS,Fa(Ut,EI),PS.prototype.getBuffer=function(){for(var t=this.bufferedRequest,I=[];t;)I.push(t),t=t.next;return I},Ut.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},Ut.prototype.write=function(t,I,g){var C=this._writableState,i=!1;return typeof I=="function"&&(g=I,I=null),Xg.isBuffer(t)?I="buffer":I||(I=C.defaultEncoding),typeof g!="function"&&(g=Ahg),C.ended?function(e,A){var s=new Error("write after end");e.emit("error",s),Kt(A,s)}(this,g):function(e,A,s,l){var n=!0,a=!1;return s===null?a=new TypeError("May not write null values to stream"):Xg.isBuffer(s)||typeof s=="string"||s===void 0||A.objectMode||(a=new TypeError("Invalid non-string/buffer chunk")),a&&(e.emit("error",a),Kt(l,a),n=!1),n}(this,C,t,g)&&(C.pendingcb++,i=function(e,A,s,l,n){s=function(c,r,h){return c.objectMode||c.decodeStrings===!1||typeof r!="string"||(r=Xg.from(r,h)),r}(A,s,l),Xg.isBuffer(s)&&(l="buffer");var a=A.objectMode?1:s.length;A.length+=a;var d=A.length<A.highWaterMark;if(d||(A.needDrain=!0),A.writing||A.corked){var o=A.lastBufferedRequest;A.lastBufferedRequest=new shg(s,l,n),o?o.next=A.lastBufferedRequest:A.bufferedRequest=A.lastBufferedRequest,A.bufferedRequestCount+=1}else _S(e,A,!1,a,s,l,n);return d}(this,C,t,I,g)),i},Ut.prototype.cork=function(){this._writableState.corked++},Ut.prototype.uncork=function(){var t=this._writableState;t.corked&&(t.corked--,t.writing||t.corked||t.finished||t.bufferProcessing||!t.bufferedRequest||nCg(this,t))},Ut.prototype.setDefaultEncoding=function(t){if(typeof t=="string"&&(t=t.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((t+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+t);return this._writableState.defaultEncoding=t,this},Ut.prototype._write=function(t,I,g){g(new Error("not implemented"))},Ut.prototype._writev=null,Ut.prototype.end=function(t,I,g){var C=this._writableState;typeof t=="function"?(g=t,t=null,I=null):typeof I=="function"&&(g=I,I=null),t!=null&&this.write(t,I),C.corked&&(C.corked=1,this.uncork()),C.ending||C.finished||function(i,e,A){e.ending=!0,oCg(i,e),A&&(e.finished?Kt(A):i.once("finish",A)),e.ended=!0,i.writable=!1}(this,C,g)},Fa(Ze,QC);for(var N8=Object.keys(Ut.prototype),vH=0;vH<N8.length;vH++){var TH=N8[vH];Ze.prototype[TH]||(Ze.prototype[TH]=Ut.prototype[TH])}function Ze(t){if(!(this instanceof Ze))return new Ze(t);QC.call(this,t),Ut.call(this,t),t&&t.readable===!1&&(this.readable=!1),t&&t.writable===!1&&(this.writable=!1),this.allowHalfOpen=!0,t&&t.allowHalfOpen===!1&&(this.allowHalfOpen=!1),this.once("end",lhg)}function lhg(){this.allowHalfOpen||this._writableState.ended||Kt(nhg,this)}function nhg(t){t.end()}function ahg(t){this.afterTransform=function(I,g){return function(C,i,e){var A=C._transformState;A.transforming=!1;var s=A.writecb;if(!s)return C.emit("error",new Error("no writecb in Transform class"));A.writechunk=null,A.writecb=null,e!=null&&C.push(e),s(i);var l=C._readableState;l.reading=!1,(l.needReadable||l.length<l.highWaterMark)&&C._read(l.highWaterMark)}(t,I,g)},this.needTransform=!1,this.transforming=!1,this.writecb=null,this.writechunk=null,this.writeencoding=null}function yA(t){if(!(this instanceof yA))return new yA(t);Ze.call(this,t),this._transformState=new ahg(this);var I=this;this._readableState.needReadable=!0,this._readableState.sync=!1,t&&(typeof t.transform=="function"&&(this._transform=t.transform),typeof t.flush=="function"&&(this._flush=t.flush)),this.once("prefinish",function(){typeof this._flush=="function"?this._flush(function(g){V8(I,g)}):V8(I)})}function V8(t,I){if(I)return t.emit("error",I);var g=t._writableState,C=t._transformState;if(g.length)throw new Error("Calling transform done when ws.length != 0");if(C.transforming)throw new Error("Calling transform done when still transforming");return t.push(null)}function eh(t){if(!(this instanceof eh))return new eh(t);yA.call(this,t)}function oA(){EI.call(this)}Fa(yA,Ze),yA.prototype.push=function(t,I){return this._transformState.needTransform=!1,Ze.prototype.push.call(this,t,I)},yA.prototype._transform=function(t,I,g){throw new Error("Not implemented")},yA.prototype._write=function(t,I,g){var C=this._transformState;if(C.writecb=g,C.writechunk=t,C.writeencoding=I,!C.transforming){var i=this._readableState;(C.needTransform||i.needReadable||i.length<i.highWaterMark)&&this._read(i.highWaterMark)}},yA.prototype._read=function(t){var I=this._transformState;I.writechunk!==null&&I.writecb&&!I.transforming?(I.transforming=!0,this._transform(I.writechunk,I.writeencoding,I.afterTransform)):I.needTransform=!0},Fa(eh,yA),eh.prototype._transform=function(t,I,g){g(null,t)},Fa(oA,EI),oA.Readable=QC,oA.Writable=Ut,oA.Duplex=Ze,oA.Transform=yA,oA.PassThrough=eh,oA.Stream=oA,oA.prototype.pipe=function(t,I){var g=this;function C(a){t.writable&&t.write(a)===!1&&g.pause&&g.pause()}function i(){g.readable&&g.resume&&g.resume()}g.on("data",C),t.on("drain",i),t._isStdio||I&&I.end===!1||(g.on("end",A),g.on("close",s));var e=!1;function A(){e||(e=!0,t.end())}function s(){e||(e=!0,typeof t.destroy=="function"&&t.destroy())}function l(a){if(n(),EI.listenerCount(this,"error")===0)throw a}function n(){g.removeListener("data",C),t.removeListener("drain",i),g.removeListener("end",A),g.removeListener("close",s),g.removeListener("error",l),t.removeListener("error",l),g.removeListener("end",n),g.removeListener("close",n),t.removeListener("close",n)}return g.on("error",l),t.on("error",l),g.on("end",n),g.on("close",n),t.on("close",n),t.emit("pipe",g),t};var M8,R8,f8,dCg=TV(Object.freeze({__proto__:null,default:oA,Readable:QC,Writable:Ut,Duplex:Ze,Transform:yA,PassThrough:eh,Stream:oA})),xH={exports:{}};function UV(){return M8||(M8=1,xH.exports={nextTick:function(t,I,g,C){if(typeof t!="function")throw new TypeError('"callback" argument must be a function');var i,e,A=arguments.length;switch(A){case 0:case 1:return Kt(t);case 2:return Kt(function(){t.call(null,I)});case 3:return Kt(function(){t.call(null,I,g)});case 4:return Kt(function(){t.call(null,I,g,C)});default:for(i=new Array(A-1),e=0;e<i.length;)i[e++]=arguments[e];return Kt(function(){t.apply(null,i)})}}}),xH.exports}var H8,ohg=TV(xrg),X8={exports:{}};function rCg(){return H8?X8.exports:(H8=1,X8.exports=dCg)}var S8,jH={exports:{}},hCg=TV(Frg);function EV(){return S8||(S8=1,function(t,I){var g=hCg,C=g.Buffer;function i(A,s){for(var l in A)s[l]=A[l]}function e(A,s,l){return C(A,s,l)}C.from&&C.alloc&&C.allocUnsafe&&C.allocUnsafeSlow?t.exports=g:(i(g,I),I.Buffer=e),i(C,e),e.from=function(A,s,l){if(typeof A=="number")throw new TypeError("Argument must not be a number");return C(A,s,l)},e.alloc=function(A,s,l){if(typeof A!="number")throw new TypeError("Argument must be a number");var n=C(A);return s!==void 0?typeof l=="string"?n.fill(s,l):n.fill(s):n.fill(0),n},e.allocUnsafe=function(A){if(typeof A!="number")throw new TypeError("Argument must be a number");return C(A)},e.allocUnsafeSlow=function(A){if(typeof A!="number")throw new TypeError("Argument must be a number");return g.SlowBuffer(A)}}(jH,jH.exports)),jH.exports}var D8,vt={};function tG(){if(D8)return vt;function t(I){return Object.prototype.toString.call(I)}return D8=1,vt.isArray=function(I){return Array.isArray?Array.isArray(I):t(I)==="[object Array]"},vt.isBoolean=function(I){return typeof I=="boolean"},vt.isNull=function(I){return I===null},vt.isNullOrUndefined=function(I){return I==null},vt.isNumber=function(I){return typeof I=="number"},vt.isString=function(I){return typeof I=="string"},vt.isSymbol=function(I){return typeof I=="symbol"},vt.isUndefined=function(I){return I===void 0},vt.isRegExp=function(I){return t(I)==="[object RegExp]"},vt.isObject=function(I){return typeof I=="object"&&I!==null},vt.isDate=function(I){return t(I)==="[object Date]"},vt.isError=function(I){return t(I)==="[object Error]"||I instanceof Error},vt.isFunction=function(I){return typeof I=="function"},vt.isPrimitive=function(I){return I===null||typeof I=="boolean"||typeof I=="number"||typeof I=="string"||typeof I=="symbol"||I===void 0},vt.isBuffer=hCg.Buffer.isBuffer,vt}var K8,F8,k8={exports:{}},PV=TV(_rg),QH={exports:{}};function iG(){return F8||(F8=1,function(t){try{var I=PV;if(typeof I.inherits!="function")throw"";t.exports=I.inherits}catch{t.exports=(K8||(K8=1,typeof Object.create=="function"?QH.exports=function(C,i){i&&(C.super_=i,C.prototype=Object.create(i.prototype,{constructor:{value:C,enumerable:!1,writable:!0,configurable:!0}}))}:QH.exports=function(C,i){if(i){C.super_=i;var e=function(){};e.prototype=i.prototype,C.prototype=new e,C.prototype.constructor=C}}),QH.exports)}}(k8)),k8.exports}var z8,OH,J8,L8,v8,UH,T8,EH,x8,j8={exports:{}};function chg(){return z8||(z8=1,function(t){var I=EV().Buffer,g=PV;t.exports=function(){function C(){(function(i,e){if(!(i instanceof e))throw new TypeError("Cannot call a class as a function")})(this,C),this.head=null,this.tail=null,this.length=0}return C.prototype.push=function(i){var e={data:i,next:null};this.length>0?this.tail.next=e:this.head=e,this.tail=e,++this.length},C.prototype.unshift=function(i){var e={data:i,next:this.head};this.length===0&&(this.tail=e),this.head=e,++this.length},C.prototype.shift=function(){if(this.length!==0){var i=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,i}},C.prototype.clear=function(){this.head=this.tail=null,this.length=0},C.prototype.join=function(i){if(this.length===0)return"";for(var e=this.head,A=""+e.data;e=e.next;)A+=i+e.data;return A},C.prototype.concat=function(i){if(this.length===0)return I.alloc(0);if(this.length===1)return this.head.data;for(var e,A,s,l=I.allocUnsafe(i>>>0),n=this.head,a=0;n;)e=n.data,A=l,s=a,e.copy(A,s),a+=n.data.length,n=n.next;return l},C}(),g&&g.inspect&&g.inspect.custom&&(t.exports.prototype[g.inspect.custom]=function(){var C=g.inspect({length:this.length});return this.constructor.name+" "+C})}(j8)),j8.exports}function bCg(){if(J8)return OH;J8=1;var t=UV();function I(g,C){g.emit("error",C)}return OH={destroy:function(g,C){var i=this,e=this._readableState&&this._readableState.destroyed,A=this._writableState&&this._writableState.destroyed;return e||A?(C?C(g):!g||this._writableState&&this._writableState.errorEmitted||t.nextTick(I,this,g),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(g||null,function(s){!C&&s?(t.nextTick(I,i,s),i._writableState&&(i._writableState.errorEmitted=!0)):C&&C(s)}),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}},OH}function uCg(){if(T8)return UH;T8=1;var t=UV();function I(p){var Y=this;this.next=null,this.entry=null,this.finish=function(){(function(R,X,H){var S=R.entry;for(R.entry=null;S;){var z=S.callback;X.pendingcb--,z(H),S=S.next}X.corkedRequestsFree?X.corkedRequestsFree.next=R:X.corkedRequestsFree=R})(Y,p)}}UH=c;var g,C=t.nextTick;c.WritableState=o;var i=Object.create(tG());i.inherits=iG();var e={deprecate:v8?L8:(v8=1,L8=PV.deprecate)},A=rCg(),s=EV().Buffer,l=Ce.Uint8Array||function(){},n,a=bCg();function d(){}function o(p,Y){g=g||h0(),p=p||{};var R=Y instanceof g;this.objectMode=!!p.objectMode,R&&(this.objectMode=this.objectMode||!!p.writableObjectMode);var X=p.highWaterMark,H=p.writableHighWaterMark,S=this.objectMode?16:16384;this.highWaterMark=X||X===0?X:R&&(H||H===0)?H:S,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var z=p.decodeStrings===!1;this.decodeStrings=!z,this.defaultEncoding=p.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(v){(function(K,V){var N=K._writableState,B=N.sync,G=N.writecb;if(function(W){W.writing=!1,W.writecb=null,W.length-=W.writelen,W.writelen=0}(N),V)(function(W,y,f,D,F){--y.pendingcb,f?(t.nextTick(F,D),t.nextTick(Z,W,y),W._writableState.errorEmitted=!0,W.emit("error",D)):(F(D),W._writableState.errorEmitted=!0,W.emit("error",D),Z(W,y))})(K,N,B,V,G);else{var w=u(N);w||N.corked||N.bufferProcessing||!N.bufferedRequest||b(K,N),B?C(h,K,N,w,G):h(K,N,w,G)}})(Y,v)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new I(this)}function c(p){if(g=g||h0(),!(n.call(c,this)||this instanceof g))return new c(p);this._writableState=new o(p,this),this.writable=!0,p&&(typeof p.write=="function"&&(this._write=p.write),typeof p.writev=="function"&&(this._writev=p.writev),typeof p.destroy=="function"&&(this._destroy=p.destroy),typeof p.final=="function"&&(this._final=p.final)),A.call(this)}function r(p,Y,R,X,H,S,z){Y.writelen=X,Y.writecb=z,Y.writing=!0,Y.sync=!0,R?p._writev(H,Y.onwrite):p._write(H,S,Y.onwrite),Y.sync=!1}function h(p,Y,R,X){R||function(H,S){S.length===0&&S.needDrain&&(S.needDrain=!1,H.emit("drain"))}(p,Y),Y.pendingcb--,X(),Z(p,Y)}function b(p,Y){Y.bufferProcessing=!0;var R=Y.bufferedRequest;if(p._writev&&R&&R.next){var X=Y.bufferedRequestCount,H=new Array(X),S=Y.corkedRequestsFree;S.entry=R;for(var z=0,v=!0;R;)H[z]=R,R.isBuf||(v=!1),R=R.next,z+=1;H.allBuffers=v,r(p,Y,!0,Y.length,H,"",S.finish),Y.pendingcb++,Y.lastBufferedRequest=null,S.next?(Y.corkedRequestsFree=S.next,S.next=null):Y.corkedRequestsFree=new I(Y),Y.bufferedRequestCount=0}else{for(;R;){var K=R.chunk,V=R.encoding,N=R.callback;if(r(p,Y,!1,Y.objectMode?1:K.length,K,V,N),R=R.next,Y.bufferedRequestCount--,Y.writing)break}R===null&&(Y.lastBufferedRequest=null)}Y.bufferedRequest=R,Y.bufferProcessing=!1}function u(p){return p.ending&&p.length===0&&p.bufferedRequest===null&&!p.finished&&!p.writing}function m(p,Y){p._final(function(R){Y.pendingcb--,R&&p.emit("error",R),Y.prefinished=!0,p.emit("prefinish"),Z(p,Y)})}function Z(p,Y){var R=u(Y);return R&&(function(X,H){H.prefinished||H.finalCalled||(typeof X._final=="function"?(H.pendingcb++,H.finalCalled=!0,t.nextTick(m,X,H)):(H.prefinished=!0,X.emit("prefinish")))}(p,Y),Y.pendingcb===0&&(Y.finished=!0,p.emit("finish"))),R}return i.inherits(c,A),o.prototype.getBuffer=function(){for(var p=this.bufferedRequest,Y=[];p;)Y.push(p),p=p.next;return Y},function(){try{Object.defineProperty(o.prototype,"buffer",{get:e.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch{}}(),typeof Symbol=="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]=="function"?(n=Function.prototype[Symbol.hasInstance],Object.defineProperty(c,Symbol.hasInstance,{value:function(p){return!!n.call(this,p)||this===c&&p&&p._writableState instanceof o}})):n=function(p){return p instanceof this},c.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},c.prototype.write=function(p,Y,R){var X,H=this._writableState,S=!1,z=!H.objectMode&&(X=p,s.isBuffer(X)||X instanceof l);return z&&!s.isBuffer(p)&&(p=function(v){return s.from(v)}(p)),typeof Y=="function"&&(R=Y,Y=null),z?Y="buffer":Y||(Y=H.defaultEncoding),typeof R!="function"&&(R=d),H.ended?function(v,K){var V=new Error("write after end");v.emit("error",V),t.nextTick(K,V)}(this,R):(z||function(v,K,V,N){var B=!0,G=!1;return V===null?G=new TypeError("May not write null values to stream"):typeof V=="string"||V===void 0||K.objectMode||(G=new TypeError("Invalid non-string/buffer chunk")),G&&(v.emit("error",G),t.nextTick(N,G),B=!1),B}(this,H,p,R))&&(H.pendingcb++,S=function(v,K,V,N,B,G){if(!V){var w=function(D,F,T){return D.objectMode||D.decodeStrings===!1||typeof F!="string"||(F=s.from(F,T)),F}(K,N,B);N!==w&&(V=!0,B="buffer",N=w)}var W=K.objectMode?1:N.length;K.length+=W;var y=K.length<K.highWaterMark;if(y||(K.needDrain=!0),K.writing||K.corked){var f=K.lastBufferedRequest;K.lastBufferedRequest={chunk:N,encoding:B,isBuf:V,callback:G,next:null},f?f.next=K.lastBufferedRequest:K.bufferedRequest=K.lastBufferedRequest,K.bufferedRequestCount+=1}else r(v,K,!1,W,N,B,G);return y}(this,H,z,p,Y,R)),S},c.prototype.cork=function(){this._writableState.corked++},c.prototype.uncork=function(){var p=this._writableState;p.corked&&(p.corked--,p.writing||p.corked||p.finished||p.bufferProcessing||!p.bufferedRequest||b(this,p))},c.prototype.setDefaultEncoding=function(p){if(typeof p=="string"&&(p=p.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((p+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+p);return this._writableState.defaultEncoding=p,this},Object.defineProperty(c.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),c.prototype._write=function(p,Y,R){R(new Error("_write() is not implemented"))},c.prototype._writev=null,c.prototype.end=function(p,Y,R){var X=this._writableState;typeof p=="function"?(R=p,p=null,Y=null):typeof Y=="function"&&(R=Y,Y=null),p!=null&&this.write(p,Y),X.corked&&(X.corked=1,this.uncork()),X.ending||X.finished||function(H,S,z){S.ending=!0,Z(H,S),z&&(S.finished?t.nextTick(z):H.once("finish",z)),S.ended=!0,H.writable=!1}(this,X,R)},Object.defineProperty(c.prototype,"destroyed",{get:function(){return this._writableState!==void 0&&this._writableState.destroyed},set:function(p){this._writableState&&(this._writableState.destroyed=p)}}),c.prototype.destroy=a.destroy,c.prototype._undestroy=a.undestroy,c.prototype._destroy=function(p,Y){this.end(),Y(p)},UH}function h0(){if(x8)return EH;x8=1;var t=UV(),I=Object.keys||function(d){var o=[];for(var c in d)o.push(c);return o};EH=l;var g=Object.create(tG());g.inherits=iG();var C=mCg(),i=uCg();g.inherits(l,C);for(var e=I(i.prototype),A=0;A<e.length;A++){var s=e[A];l.prototype[s]||(l.prototype[s]=i.prototype[s])}function l(d){if(!(this instanceof l))return new l(d);C.call(this,d),i.call(this,d),d&&d.readable===!1&&(this.readable=!1),d&&d.writable===!1&&(this.writable=!1),this.allowHalfOpen=!0,d&&d.allowHalfOpen===!1&&(this.allowHalfOpen=!1),this.once("end",n)}function n(){this.allowHalfOpen||this._writableState.ended||t.nextTick(a,this)}function a(d){d.end()}return Object.defineProperty(l.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),Object.defineProperty(l.prototype,"destroyed",{get:function(){return this._readableState!==void 0&&this._writableState!==void 0&&this._readableState.destroyed&&this._writableState.destroyed},set:function(d){this._readableState!==void 0&&this._writableState!==void 0&&(this._readableState.destroyed=d,this._writableState.destroyed=d)}}),l.prototype._destroy=function(d,o){this.push(null),this.end(),t.nextTick(o,d)},EH}var Q8,PH,O8,_H,U8,qH,E8,P8,$H={};function _8(){if(Q8)return $H;Q8=1;var t=EV().Buffer,I=t.isEncoding||function(d){switch((d=""+d)&&d.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function g(d){var o;switch(this.encoding=function(c){var r=function(h){if(!h)return"utf8";for(var b;;)switch(h){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return h;default:if(b)return;h=(""+h).toLowerCase(),b=!0}}(c);if(typeof r!="string"&&(t.isEncoding===I||!I(c)))throw new Error("Unknown encoding: "+c);return r||c}(d),this.encoding){case"utf16le":this.text=e,this.end=A,o=4;break;case"utf8":this.fillLast=i,o=4;break;case"base64":this.text=s,this.end=l,o=3;break;default:return this.write=n,void(this.end=a)}this.lastNeed=0,this.lastTotal=0,this.lastChar=t.allocUnsafe(o)}function C(d){return d<=127?0:d>>5==6?2:d>>4==14?3:d>>3==30?4:d>>6==2?-1:-2}function i(d){var o=this.lastTotal-this.lastNeed,c=function(r,h,b){if((192&h[0])!=128)return r.lastNeed=0,"�";if(r.lastNeed>1&&h.length>1){if((192&h[1])!=128)return r.lastNeed=1,"�";if(r.lastNeed>2&&h.length>2&&(192&h[2])!=128)return r.lastNeed=2,"�"}}(this,d);return c!==void 0?c:this.lastNeed<=d.length?(d.copy(this.lastChar,o,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(d.copy(this.lastChar,o,0,d.length),void(this.lastNeed-=d.length))}function e(d,o){if((d.length-o)%2==0){var c=d.toString("utf16le",o);if(c){var r=c.charCodeAt(c.length-1);if(r>=55296&&r<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=d[d.length-2],this.lastChar[1]=d[d.length-1],c.slice(0,-1)}return c}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=d[d.length-1],d.toString("utf16le",o,d.length-1)}function A(d){var o=d&&d.length?this.write(d):"";if(this.lastNeed){var c=this.lastTotal-this.lastNeed;return o+this.lastChar.toString("utf16le",0,c)}return o}function s(d,o){var c=(d.length-o)%3;return c===0?d.toString("base64",o):(this.lastNeed=3-c,this.lastTotal=3,c===1?this.lastChar[0]=d[d.length-1]:(this.lastChar[0]=d[d.length-2],this.lastChar[1]=d[d.length-1]),d.toString("base64",o,d.length-c))}function l(d){var o=d&&d.length?this.write(d):"";return this.lastNeed?o+this.lastChar.toString("base64",0,3-this.lastNeed):o}function n(d){return d.toString(this.encoding)}function a(d){return d&&d.length?this.write(d):""}return $H.StringDecoder=g,g.prototype.write=function(d){if(d.length===0)return"";var o,c;if(this.lastNeed){if((o=this.fillLast(d))===void 0)return"";c=this.lastNeed,this.lastNeed=0}else c=0;return c<d.length?o?o+this.text(d,c):this.text(d,c):o||""},g.prototype.end=function(d){var o=d&&d.length?this.write(d):"";return this.lastNeed?o+"�":o},g.prototype.text=function(d,o){var c=function(h,b,u){var m=b.length-1;if(m<u)return 0;var Z=C(b[m]);return Z>=0?(Z>0&&(h.lastNeed=Z-1),Z):--m<u||Z===-2?0:(Z=C(b[m]))>=0?(Z>0&&(h.lastNeed=Z-2),Z):--m<u||Z===-2?0:(Z=C(b[m]))>=0?(Z>0&&(Z===2?Z=0:h.lastNeed=Z-3),Z):0}(this,d,o);if(!this.lastNeed)return d.toString("utf8",o);this.lastTotal=c;var r=d.length-(c-this.lastNeed);return d.copy(this.lastChar,0,r),d.toString("utf8",o,r)},g.prototype.fillLast=function(d){if(this.lastNeed<=d.length)return d.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);d.copy(this.lastChar,this.lastTotal-this.lastNeed,0,d.length),this.lastNeed-=d.length},$H}function mCg(){if(O8)return PH;O8=1;var t=UV();PH=h;var I,g=function(){if(f8)return R8;f8=1;var B={}.toString;return R8=Array.isArray||function(G){return B.call(G)=="[object Array]"}}();h.ReadableState=r,ohg.EventEmitter;var C=function(B,G){return B.listeners(G).length},i=rCg(),e=EV().Buffer,A=Ce.Uint8Array||function(){},s=Object.create(tG());s.inherits=iG();var l=PV,n=void 0;n=l&&l.debuglog?l.debuglog("stream"):function(){};var a,d=chg(),o=bCg();s.inherits(h,i);var c=["error","close","destroy","pause","resume"];function r(B,G){B=B||{};var w=G instanceof(I=I||h0());this.objectMode=!!B.objectMode,w&&(this.objectMode=this.objectMode||!!B.readableObjectMode);var W=B.highWaterMark,y=B.readableHighWaterMark,f=this.objectMode?16:16384;this.highWaterMark=W||W===0?W:w&&(y||y===0)?y:f,this.highWaterMark=Math.floor(this.highWaterMark),this.buffer=new d,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.destroyed=!1,this.defaultEncoding=B.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,B.encoding&&(a||(a=_8().StringDecoder),this.decoder=new a(B.encoding),this.encoding=B.encoding)}function h(B){if(I=I||h0(),!(this instanceof h))return new h(B);this._readableState=new r(B,this),this.readable=!0,B&&(typeof B.read=="function"&&(this._read=B.read),typeof B.destroy=="function"&&(this._destroy=B.destroy)),i.call(this)}function b(B,G,w,W,y){var f,D=B._readableState;return G===null?(D.reading=!1,function(F,T){if(!T.ended){if(T.decoder){var Q=T.decoder.end();Q&&Q.length&&(T.buffer.push(Q),T.length+=T.objectMode?1:Q.length)}T.ended=!0,p(F)}}(B,D)):(y||(f=function(F,T){var Q;P=T,e.isBuffer(P)||P instanceof A||typeof T=="string"||T===void 0||F.objectMode||(Q=new TypeError("Invalid non-string/buffer chunk"));var P;return Q}(D,G)),f?B.emit("error",f):D.objectMode||G&&G.length>0?(typeof G=="string"||D.objectMode||Object.getPrototypeOf(G)===e.prototype||(G=function(F){return e.from(F)}(G)),W?D.endEmitted?B.emit("error",new Error("stream.unshift() after end event")):u(B,D,G,!0):D.ended?B.emit("error",new Error("stream.push() after EOF")):(D.reading=!1,D.decoder&&!w?(G=D.decoder.write(G),D.objectMode||G.length!==0?u(B,D,G,!1):R(B,D)):u(B,D,G,!1))):W||(D.reading=!1)),function(F){return!F.ended&&(F.needReadable||F.length<F.highWaterMark||F.length===0)}(D)}function u(B,G,w,W){G.flowing&&G.length===0&&!G.sync?(B.emit("data",w),B.read(0)):(G.length+=G.objectMode?1:w.length,W?G.buffer.unshift(w):G.buffer.push(w),G.needReadable&&p(B)),R(B,G)}Object.defineProperty(h.prototype,"destroyed",{get:function(){return this._readableState!==void 0&&this._readableState.destroyed},set:function(B){this._readableState&&(this._readableState.destroyed=B)}}),h.prototype.destroy=o.destroy,h.prototype._undestroy=o.undestroy,h.prototype._destroy=function(B,G){this.push(null),G(B)},h.prototype.push=function(B,G){var w,W=this._readableState;return W.objectMode?w=!0:typeof B=="string"&&((G=G||W.defaultEncoding)!==W.encoding&&(B=e.from(B,G),G=""),w=!0),b(this,B,G,!1,w)},h.prototype.unshift=function(B){return b(this,B,null,!0,!1)},h.prototype.isPaused=function(){return this._readableState.flowing===!1},h.prototype.setEncoding=function(B){return a||(a=_8().StringDecoder),this._readableState.decoder=new a(B),this._readableState.encoding=B,this};var m=8388608;function Z(B,G){return B<=0||G.length===0&&G.ended?0:G.objectMode?1:B!=B?G.flowing&&G.length?G.buffer.head.data.length:G.length:(B>G.highWaterMark&&(G.highWaterMark=function(w){return w>=m?w=m:(w--,w|=w>>>1,w|=w>>>2,w|=w>>>4,w|=w>>>8,w|=w>>>16,w++),w}(B)),B<=G.length?B:G.ended?G.length:(G.needReadable=!0,0))}function p(B){var G=B._readableState;G.needReadable=!1,G.emittedReadable||(n("emitReadable",G.flowing),G.emittedReadable=!0,G.sync?t.nextTick(Y,B):Y(B))}function Y(B){n("emit readable"),B.emit("readable"),z(B)}function R(B,G){G.readingMore||(G.readingMore=!0,t.nextTick(X,B,G))}function X(B,G){for(var w=G.length;!G.reading&&!G.flowing&&!G.ended&&G.length<G.highWaterMark&&(n("maybeReadMore read 0"),B.read(0),w!==G.length);)w=G.length;G.readingMore=!1}function H(B){n("readable nexttick read 0"),B.read(0)}function S(B,G){G.reading||(n("resume read 0"),B.read(0)),G.resumeScheduled=!1,G.awaitDrain=0,B.emit("resume"),z(B),G.flowing&&!G.reading&&B.read(0)}function z(B){var G=B._readableState;for(n("flow",G.flowing);G.flowing&&B.read()!==null;);}function v(B,G){return G.length===0?null:(G.objectMode?w=G.buffer.shift():!B||B>=G.length?(w=G.decoder?G.buffer.join(""):G.buffer.length===1?G.buffer.head.data:G.buffer.concat(G.length),G.buffer.clear()):w=function(W,y,f){var D;return W<y.head.data.length?(D=y.head.data.slice(0,W),y.head.data=y.head.data.slice(W)):D=W===y.head.data.length?y.shift():f?function(F,T){var Q=T.head,P=1,L=Q.data;for(F-=L.length;Q=Q.next;){var E=Q.data,J=F>E.length?E.length:F;if(J===E.length?L+=E:L+=E.slice(0,F),(F-=J)===0){J===E.length?(++P,Q.next?T.head=Q.next:T.head=T.tail=null):(T.head=Q,Q.data=E.slice(J));break}++P}return T.length-=P,L}(W,y):function(F,T){var Q=e.allocUnsafe(F),P=T.head,L=1;for(P.data.copy(Q),F-=P.data.length;P=P.next;){var E=P.data,J=F>E.length?E.length:F;if(E.copy(Q,Q.length-F,0,J),(F-=J)===0){J===E.length?(++L,P.next?T.head=P.next:T.head=T.tail=null):(T.head=P,P.data=E.slice(J));break}++L}return T.length-=L,Q}(W,y),D}(B,G.buffer,G.decoder),w);var w}function K(B){var G=B._readableState;if(G.length>0)throw new Error('"endReadable()" called on non-empty stream');G.endEmitted||(G.ended=!0,t.nextTick(V,G,B))}function V(B,G){B.endEmitted||B.length!==0||(B.endEmitted=!0,G.readable=!1,G.emit("end"))}function N(B,G){for(var w=0,W=B.length;w<W;w++)if(B[w]===G)return w;return-1}return h.prototype.read=function(B){n("read",B),B=parseInt(B,10);var G=this._readableState,w=B;if(B!==0&&(G.emittedReadable=!1),B===0&&G.needReadable&&(G.length>=G.highWaterMark||G.ended))return n("read: emitReadable",G.length,G.ended),G.length===0&&G.ended?K(this):p(this),null;if((B=Z(B,G))===0&&G.ended)return G.length===0&&K(this),null;var W,y=G.needReadable;return n("need readable",y),(G.length===0||G.length-B<G.highWaterMark)&&n("length less than watermark",y=!0),G.ended||G.reading?n("reading or ended",y=!1):y&&(n("do read"),G.reading=!0,G.sync=!0,G.length===0&&(G.needReadable=!0),this._read(G.highWaterMark),G.sync=!1,G.reading||(B=Z(w,G))),(W=B>0?v(B,G):null)===null?(G.needReadable=!0,B=0):G.length-=B,G.length===0&&(G.ended||(G.needReadable=!0),w!==B&&G.ended&&K(this)),W!==null&&this.emit("data",W),W},h.prototype._read=function(B){this.emit("error",new Error("_read() is not implemented"))},h.prototype.pipe=function(B,G){var w=this,W=this._readableState;switch(W.pipesCount){case 0:W.pipes=B;break;case 1:W.pipes=[W.pipes,B];break;default:W.pipes.push(B)}W.pipesCount+=1,n("pipe count=%d opts=%j",W.pipesCount,G);var y=(!G||G.end!==!1)&&B!==qc.stdout&&B!==qc.stderr?D:k;function f(j,q){n("onunpipe"),j===w&&q&&q.hasUnpiped===!1&&(q.hasUnpiped=!0,n("cleanup"),B.removeListener("close",E),B.removeListener("finish",J),B.removeListener("drain",F),B.removeListener("error",L),B.removeListener("unpipe",f),w.removeListener("end",D),w.removeListener("end",k),w.removeListener("data",P),T=!0,!W.awaitDrain||B._writableState&&!B._writableState.needDrain||F())}function D(){n("onend"),B.end()}W.endEmitted?t.nextTick(y):w.once("end",y),B.on("unpipe",f);var F=function(j){return function(){var q=j._readableState;n("pipeOnDrain",q.awaitDrain),q.awaitDrain&&q.awaitDrain--,q.awaitDrain===0&&C(j,"data")&&(q.flowing=!0,z(j))}}(w);B.on("drain",F);var T=!1,Q=!1;function P(j){n("ondata"),Q=!1,B.write(j)!==!1||Q||((W.pipesCount===1&&W.pipes===B||W.pipesCount>1&&N(W.pipes,B)!==-1)&&!T&&(n("false write response, pause",w._readableState.awaitDrain),w._readableState.awaitDrain++,Q=!0),w.pause())}function L(j){n("onerror",j),k(),B.removeListener("error",L),C(B,"error")===0&&B.emit("error",j)}function E(){B.removeListener("finish",J),k()}function J(){n("onfinish"),B.removeListener("close",E),k()}function k(){n("unpipe"),w.unpipe(B)}return w.on("data",P),function(j,q,tg){if(typeof j.prependListener=="function")return j.prependListener(q,tg);j._events&&j._events[q]?g(j._events[q])?j._events[q].unshift(tg):j._events[q]=[tg,j._events[q]]:j.on(q,tg)}(B,"error",L),B.once("close",E),B.once("finish",J),B.emit("pipe",w),W.flowing||(n("pipe resume"),w.resume()),B},h.prototype.unpipe=function(B){var G=this._readableState,w={hasUnpiped:!1};if(G.pipesCount===0)return this;if(G.pipesCount===1)return B&&B!==G.pipes||(B||(B=G.pipes),G.pipes=null,G.pipesCount=0,G.flowing=!1,B&&B.emit("unpipe",this,w)),this;if(!B){var W=G.pipes,y=G.pipesCount;G.pipes=null,G.pipesCount=0,G.flowing=!1;for(var f=0;f<y;f++)W[f].emit("unpipe",this,w);return this}var D=N(G.pipes,B);return D===-1||(G.pipes.splice(D,1),G.pipesCount-=1,G.pipesCount===1&&(G.pipes=G.pipes[0]),B.emit("unpipe",this,w)),this},h.prototype.on=function(B,G){var w=i.prototype.on.call(this,B,G);if(B==="data")this._readableState.flowing!==!1&&this.resume();else if(B==="readable"){var W=this._readableState;W.endEmitted||W.readableListening||(W.readableListening=W.needReadable=!0,W.emittedReadable=!1,W.reading?W.length&&p(this):t.nextTick(H,this))}return w},h.prototype.addListener=h.prototype.on,h.prototype.resume=function(){var B=this._readableState;return B.flowing||(n("resume"),B.flowing=!0,function(G,w){w.resumeScheduled||(w.resumeScheduled=!0,t.nextTick(S,G,w))}(this,B)),this},h.prototype.pause=function(){return n("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(n("pause"),this._readableState.flowing=!1,this.emit("pause")),this},h.prototype.wrap=function(B){var G=this,w=this._readableState,W=!1;for(var y in B.on("end",function(){if(n("wrapped end"),w.decoder&&!w.ended){var D=w.decoder.end();D&&D.length&&G.push(D)}G.push(null)}),B.on("data",function(D){n("wrapped data"),w.decoder&&(D=w.decoder.write(D)),w.objectMode&&D==null||(w.objectMode||D&&D.length)&&(G.push(D)||(W=!0,B.pause()))}),B)this[y]===void 0&&typeof B[y]=="function"&&(this[y]=function(D){return function(){return B[D].apply(B,arguments)}}(y));for(var f=0;f<c.length;f++)B.on(c[f],this.emit.bind(this,c[f]));return this._read=function(D){n("wrapped _read",D),W&&(W=!1,B.resume())},this},Object.defineProperty(h.prototype,"readableHighWaterMark",{enumerable:!1,get:function(){return this._readableState.highWaterMark}}),h._fromList=v,PH}function q8(){if(U8)return _H;U8=1,_H=C;var t=h0(),I=Object.create(tG());function g(A,s){var l=this._transformState;l.transforming=!1;var n=l.writecb;if(!n)return this.emit("error",new Error("write callback called multiple times"));l.writechunk=null,l.writecb=null,s!=null&&this.push(s),n(A);var a=this._readableState;a.reading=!1,(a.needReadable||a.length<a.highWaterMark)&&this._read(a.highWaterMark)}function C(A){if(!(this instanceof C))return new C(A);t.call(this,A),this._transformState={afterTransform:g.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,A&&(typeof A.transform=="function"&&(this._transform=A.transform),typeof A.flush=="function"&&(this._flush=A.flush)),this.on("prefinish",i)}function i(){var A=this;typeof this._flush=="function"?this._flush(function(s,l){e(A,s,l)}):e(this,null,null)}function e(A,s,l){if(s)return A.emit("error",s);if(l!=null&&A.push(l),A._writableState.length)throw new Error("Calling transform done when ws.length != 0");if(A._transformState.transforming)throw new Error("Calling transform done when still transforming");return A.push(null)}return I.inherits=iG(),I.inherits(C,t),C.prototype.push=function(A,s){return this._transformState.needTransform=!1,t.prototype.push.call(this,A,s)},C.prototype._transform=function(A,s,l){throw new Error("_transform() is not implemented")},C.prototype._write=function(A,s,l){var n=this._transformState;if(n.writecb=l,n.writechunk=A,n.writeencoding=s,!n.transforming){var a=this._readableState;(n.needTransform||a.needReadable||a.length<a.highWaterMark)&&this._read(a.highWaterMark)}},C.prototype._read=function(A){var s=this._transformState;s.writechunk!==null&&s.writecb&&!s.transforming?(s.transforming=!0,this._transform(s.writechunk,s.writeencoding,s.afterTransform)):s.needTransform=!0},C.prototype._destroy=function(A,s){var l=this;t.prototype._destroy.call(this,A,function(n){s(n),l.emit("close")})},_H}function ZCg(){return P8||(P8=1,function(t,I){var g=dCg;qc.env.READABLE_STREAM==="disable"&&g?(t.exports=g,(I=t.exports=g.Readable).Readable=g.Readable,I.Writable=g.Writable,I.Duplex=g.Duplex,I.Transform=g.Transform,I.PassThrough=g.PassThrough,I.Stream=g):((I=t.exports=mCg()).Stream=g||I,I.Readable=I,I.Writable=uCg(),I.Duplex=h0(),I.Transform=q8(),I.PassThrough=function(){if(E8)return qH;E8=1,qH=e;var C=q8(),i=Object.create(tG());function e(A){if(!(this instanceof e))return new e(A);C.call(this,A)}return i.inherits=iG(),i.inherits(e,C),e.prototype._transform=function(A,s,l){l(null,A)},qH}())}(KH,KH.exports)),KH.exports}if(nt.base64=!0,nt.array=!0,nt.string=!0,nt.arraybuffer=typeof ArrayBuffer<"u"&&typeof Uint8Array<"u",nt.nodebuffer=!0,nt.uint8array=typeof Uint8Array<"u",typeof ArrayBuffer>"u")nt.blob=!1;else{var $8=new ArrayBuffer(0);try{nt.blob=new Blob([$8],{type:"application/zip"}).size===0}catch{try{var g_=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);g_.append($8),nt.blob=g_.getBlob("application/zip").size===0}catch{nt.blob=!1}}}try{nt.nodestream=!!ZCg().Readable}catch{nt.nodestream=!1}var I_,DY={};function GCg(){if(I_)return DY;I_=1;var t=PC(),I=nt,g="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";return DY.encode=function(C){for(var i,e,A,s,l,n,a,d=[],o=0,c=C.length,r=c,h=t.getTypeOf(C)!=="string";o<C.length;)r=c-o,h?(i=C[o++],e=o<c?C[o++]:0,A=o<c?C[o++]:0):(i=C.charCodeAt(o++),e=o<c?C.charCodeAt(o++):0,A=o<c?C.charCodeAt(o++):0),s=i>>2,l=(3&i)<<4|e>>4,n=r>1?(15&e)<<2|A>>6:64,a=r>2?63&A:64,d.push(g.charAt(s)+g.charAt(l)+g.charAt(n)+g.charAt(a));return d.join("")},DY.decode=function(C){var i,e,A,s,l,n,a=0,d=0,o="data:";if(C.substr(0,o.length)===o)throw new Error("Invalid base64 input, it looks like a data url.");var c,r=3*(C=C.replace(/[^A-Za-z0-9+/=]/g,"")).length/4;if(C.charAt(C.length-1)===g.charAt(64)&&r--,C.charAt(C.length-2)===g.charAt(64)&&r--,r%1!=0)throw new Error("Invalid base64 input, bad content length.");for(c=I.uint8array?new Uint8Array(0|r):new Array(0|r);a<C.length;)i=g.indexOf(C.charAt(a++))<<2|(s=g.indexOf(C.charAt(a++)))>>4,e=(15&s)<<4|(l=g.indexOf(C.charAt(a++)))>>2,A=(3&l)<<6|(n=g.indexOf(C.charAt(a++))),c[d++]=i,l!==64&&(c[d++]=e),n!==64&&(c[d++]=A);return c},DY}var C_,t_,gX,i_,_V={isNode:!0,newBufferFrom:function(t,I){if(Xg.from&&Xg.from!==Uint8Array.from)return Xg.from(t,I);if(typeof t=="number")throw new Error('The "data" argument must not be a number');return new Xg(t,I)},allocBuffer:function(t){if(Xg.alloc)return Xg.alloc(t);var I=new Xg(t);return I.fill(0),I},isBuffer:function(t){return gG(t)},isStream:function(t){return t&&typeof t.on=="function"&&typeof t.pause=="function"&&typeof t.resume=="function"}},wCg=null;wCg=typeof Promise<"u"?Promise:function(){if(i_)return gX;i_=1;var t=function(){if(t_)return C_;t_=1;var o,c,r=Ce.MutationObserver||Ce.WebKitMutationObserver;if(r){var h=0,b=new r(p),u=Ce.document.createTextNode("");b.observe(u,{characterData:!0}),o=function(){u.data=h=++h%2}}else if(Ce.setImmediate||Ce.MessageChannel===void 0)o="document"in Ce&&"onreadystatechange"in Ce.document.createElement("script")?function(){var Y=Ce.document.createElement("script");Y.onreadystatechange=function(){p(),Y.onreadystatechange=null,Y.parentNode.removeChild(Y),Y=null},Ce.document.documentElement.appendChild(Y)}:function(){setTimeout(p,0)};else{var m=new Ce.MessageChannel;m.port1.onmessage=p,o=function(){m.port2.postMessage(0)}}var Z=[];function p(){var Y,R;c=!0;for(var X=Z.length;X;){for(R=Z,Z=[],Y=-1;++Y<X;)R[Y]();X=Z.length}c=!1}return C_=function(Y){Z.push(Y)!==1||c||o()}}();function I(){}var g={},C=["REJECTED"],i=["FULFILLED"],e=["PENDING"];function A(o){if(typeof o!="function")throw new TypeError("resolver must be a function");this.state=e,this.queue=[],this.outcome=void 0,o!==I&&a(this,o)}function s(o,c,r){this.promise=o,typeof c=="function"&&(this.onFulfilled=c,this.callFulfilled=this.otherCallFulfilled),typeof r=="function"&&(this.onRejected=r,this.callRejected=this.otherCallRejected)}function l(o,c,r){t(function(){var h;try{h=c(r)}catch(b){return g.reject(o,b)}h===o?g.reject(o,new TypeError("Cannot resolve promise with itself")):g.resolve(o,h)})}function n(o){var c=o&&o.then;if(o&&(typeof o=="object"||typeof o=="function")&&typeof c=="function")return function(){c.apply(o,arguments)}}function a(o,c){var r=!1;function h(m){r||(r=!0,g.reject(o,m))}function b(m){r||(r=!0,g.resolve(o,m))}var u=d(function(){c(b,h)});u.status==="error"&&h(u.value)}function d(o,c){var r={};try{r.value=o(c),r.status="success"}catch(h){r.status="error",r.value=h}return r}return gX=A,A.prototype.finally=function(o){if(typeof o!="function")return this;var c=this.constructor;return this.then(function(r){return c.resolve(o()).then(function(){return r})},function(r){return c.resolve(o()).then(function(){throw r})})},A.prototype.catch=function(o){return this.then(null,o)},A.prototype.then=function(o,c){if(typeof o!="function"&&this.state===i||typeof c!="function"&&this.state===C)return this;var r=new this.constructor(I);return this.state!==e?l(r,this.state===i?o:c,this.outcome):this.queue.push(new s(r,o,c)),r},s.prototype.callFulfilled=function(o){g.resolve(this.promise,o)},s.prototype.otherCallFulfilled=function(o){l(this.promise,this.onFulfilled,o)},s.prototype.callRejected=function(o){g.reject(this.promise,o)},s.prototype.otherCallRejected=function(o){l(this.promise,this.onRejected,o)},g.resolve=function(o,c){var r=d(n,c);if(r.status==="error")return g.reject(o,r.value);var h=r.value;if(h)a(o,h);else{o.state=i,o.outcome=c;for(var b=-1,u=o.queue.length;++b<u;)o.queue[b].callFulfilled(c)}return o},g.reject=function(o,c){o.state=C,o.outcome=c;for(var r=-1,h=o.queue.length;++r<h;)o.queue[r].callRejected(c);return o},A.resolve=function(o){return o instanceof this?o:g.resolve(new this(I),o)},A.reject=function(o){var c=new this(I);return g.reject(c,o)},A.all=function(o){var c=this;if(Object.prototype.toString.call(o)!=="[object Array]")return this.reject(new TypeError("must be an array"));var r=o.length,h=!1;if(!r)return this.resolve([]);for(var b=new Array(r),u=0,m=-1,Z=new this(I);++m<r;)p(o[m],m);return Z;function p(Y,R){c.resolve(Y).then(function(X){b[R]=X,++u!==r||h||(h=!0,g.resolve(Z,b))},function(X){h||(h=!0,g.reject(Z,X))})}},A.race=function(o){var c=this;if(Object.prototype.toString.call(o)!=="[object Array]")return this.reject(new TypeError("must be an array"));var r=o.length,h=!1;if(!r)return this.resolve([]);for(var b,u=-1,m=new this(I);++u<r;)b=o[u],c.resolve(b).then(function(Z){h||(h=!0,g.resolve(m,Z))},function(Z){h||(h=!0,g.reject(m,Z))});return m},gX}();var e_,eG={Promise:wCg};function PC(){return e_||(e_=1,function(t){var I=nt,g=GCg(),C=_V,i=eG;function e(d){return d}function A(d,o){for(var c=0;c<d.length;++c)o[c]=255&d.charCodeAt(c);return o}t.newBlob=function(d,o){t.checkSupport("blob");try{return new Blob([d],{type:o})}catch{try{var c=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);return c.append(d),c.getBlob(o)}catch{throw new Error("Bug : can't construct the Blob.")}}};var s={stringifyByChunk:function(d,o,c){var r=[],h=0,b=d.length;if(b<=c)return String.fromCharCode.apply(null,d);for(;h<b;)o==="array"||o==="nodebuffer"?r.push(String.fromCharCode.apply(null,d.slice(h,Math.min(h+c,b)))):r.push(String.fromCharCode.apply(null,d.subarray(h,Math.min(h+c,b)))),h+=c;return r.join("")},stringifyByChar:function(d){for(var o="",c=0;c<d.length;c++)o+=String.fromCharCode(d[c]);return o},applyCanBeUsed:{uint8array:function(){try{return I.uint8array&&String.fromCharCode.apply(null,new Uint8Array(1)).length===1}catch{return!1}}(),nodebuffer:function(){try{return I.nodebuffer&&String.fromCharCode.apply(null,C.allocBuffer(1)).length===1}catch{return!1}}()}};function l(d){var o=65536,c=t.getTypeOf(d),r=!0;if(c==="uint8array"?r=s.applyCanBeUsed.uint8array:c==="nodebuffer"&&(r=s.applyCanBeUsed.nodebuffer),r)for(;o>1;)try{return s.stringifyByChunk(d,c,o)}catch{o=Math.floor(o/2)}return s.stringifyByChar(d)}function n(d,o){for(var c=0;c<d.length;c++)o[c]=d[c];return o}t.applyFromCharCode=l;var a={};a.string={string:e,array:function(d){return A(d,new Array(d.length))},arraybuffer:function(d){return a.string.uint8array(d).buffer},uint8array:function(d){return A(d,new Uint8Array(d.length))},nodebuffer:function(d){return A(d,C.allocBuffer(d.length))}},a.array={string:l,array:e,arraybuffer:function(d){return new Uint8Array(d).buffer},uint8array:function(d){return new Uint8Array(d)},nodebuffer:function(d){return C.newBufferFrom(d)}},a.arraybuffer={string:function(d){return l(new Uint8Array(d))},array:function(d){return n(new Uint8Array(d),new Array(d.byteLength))},arraybuffer:e,uint8array:function(d){return new Uint8Array(d)},nodebuffer:function(d){return C.newBufferFrom(new Uint8Array(d))}},a.uint8array={string:l,array:function(d){return n(d,new Array(d.length))},arraybuffer:function(d){return d.buffer},uint8array:e,nodebuffer:function(d){return C.newBufferFrom(d)}},a.nodebuffer={string:l,array:function(d){return n(d,new Array(d.length))},arraybuffer:function(d){return a.nodebuffer.uint8array(d).buffer},uint8array:function(d){return n(d,new Uint8Array(d.length))},nodebuffer:e},t.transformTo=function(d,o){if(o||(o=""),!d)return o;t.checkSupport(d);var c=t.getTypeOf(o);return a[c][d](o)},t.resolve=function(d){for(var o=d.split("/"),c=[],r=0;r<o.length;r++){var h=o[r];h==="."||h===""&&r!==0&&r!==o.length-1||(h===".."?c.pop():c.push(h))}return c.join("/")},t.getTypeOf=function(d){return typeof d=="string"?"string":Object.prototype.toString.call(d)==="[object Array]"?"array":I.nodebuffer&&C.isBuffer(d)?"nodebuffer":I.uint8array&&d instanceof Uint8Array?"uint8array":I.arraybuffer&&d instanceof ArrayBuffer?"arraybuffer":void 0},t.checkSupport=function(d){if(!I[d.toLowerCase()])throw new Error(d+" is not supported by this platform")},t.MAX_VALUE_16BITS=65535,t.MAX_VALUE_32BITS=-1,t.pretty=function(d){var o,c,r="";for(c=0;c<(d||"").length;c++)r+="\\x"+((o=d.charCodeAt(c))<16?"0":"")+o.toString(16).toUpperCase();return r},t.delay=function(d,o,c){setImmediate(function(){d.apply(c||null,o||[])})},t.inherits=function(d,o){var c=function(){};c.prototype=o.prototype,d.prototype=new c},t.extend=function(){var d,o,c={};for(d=0;d<arguments.length;d++)for(o in arguments[d])Object.prototype.hasOwnProperty.call(arguments[d],o)&&c[o]===void 0&&(c[o]=arguments[d][o]);return c},t.prepareContent=function(d,o,c,r,h){return i.Promise.resolve(o).then(function(b){return I.blob&&(b instanceof Blob||["[object File]","[object Blob]"].indexOf(Object.prototype.toString.call(b))!==-1)&&typeof FileReader<"u"?new i.Promise(function(u,m){var Z=new FileReader;Z.onload=function(p){u(p.target.result)},Z.onerror=function(p){m(p.target.error)},Z.readAsArrayBuffer(b)}):b}).then(function(b){var u,m=t.getTypeOf(b);return m?(m==="arraybuffer"?b=t.transformTo("uint8array",b):m==="string"&&(h?b=g.decode(b):c&&r!==!0&&(b=A(u=b,I.uint8array?new Uint8Array(u.length):new Array(u.length)))),b):i.Promise.reject(new Error("Can't read the data of '"+d+"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?"))})}}(a8)),a8}function pCg(t){this.name=t||"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}(function(t,I){if(!t.setImmediate){var g,C,i,e,A,s=1,l={},n=!1,a=t.document,d=Object.getPrototypeOf&&Object.getPrototypeOf(t);d=d&&d.setTimeout?d:t,{}.toString.call(t.process)==="[object process]"?g=function(r){Kt(function(){c(r)})}:function(){if(t.postMessage&&!t.importScripts){var r=!0,h=t.onmessage;return t.onmessage=function(){r=!1},t.postMessage("","*"),t.onmessage=h,r}}()?(e="setImmediate$"+Math.random()+"$",A=function(r){r.source===t&&typeof r.data=="string"&&r.data.indexOf(e)===0&&c(+r.data.slice(e.length))},t.addEventListener?t.addEventListener("message",A,!1):t.attachEvent("onmessage",A),g=function(r){t.postMessage(e+r,"*")}):t.MessageChannel?((i=new MessageChannel).port1.onmessage=function(r){c(r.data)},g=function(r){i.port2.postMessage(r)}):a&&"onreadystatechange"in a.createElement("script")?(C=a.documentElement,g=function(r){var h=a.createElement("script");h.onreadystatechange=function(){c(r),h.onreadystatechange=null,C.removeChild(h),h=null},C.appendChild(h)}):g=function(r){setTimeout(c,0,r)},d.setImmediate=function(r){typeof r!="function"&&(r=new Function(""+r));for(var h=new Array(arguments.length-1),b=0;b<h.length;b++)h[b]=arguments[b+1];var u={callback:r,args:h};return l[s]=u,g(s),s++},d.clearImmediate=o}function o(r){delete l[r]}function c(r){if(n)setTimeout(c,0,r);else{var h=l[r];if(h){n=!0;try{(function(b){var u=b.callback,m=b.args;switch(m.length){case 0:u();break;case 1:u(m[0]);break;case 2:u(m[0],m[1]);break;case 3:u(m[0],m[1],m[2]);break;default:u.apply(void 0,m)}})(h)}finally{o(r),n=!1}}}}})(typeof self>"u"?Ce:self),pCg.prototype={push:function(t){this.emit("data",t)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(t){this.emit("error",t)}return!0},error:function(t){return!this.isFinished&&(this.isPaused?this.generatedError=t:(this.isFinished=!0,this.emit("error",t),this.previous&&this.previous.error(t),this.cleanUp()),!0)},on:function(t,I){return this._listeners[t].push(I),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(t,I){if(this._listeners[t])for(var g=0;g<this._listeners[t].length;g++)this._listeners[t][g].call(this,I)},pipe:function(t){return t.registerPrevious(this)},registerPrevious:function(t){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.streamInfo=t.streamInfo,this.mergeStreamInfo(),this.previous=t;var I=this;return t.on("data",function(g){I.processChunk(g)}),t.on("end",function(){I.end()}),t.on("error",function(g){I.error(g)}),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;this.isPaused=!1;var t=!1;return this.generatedError&&(this.error(this.generatedError),t=!0),this.previous&&this.previous.resume(),!t},flush:function(){},processChunk:function(t){this.push(t)},withStreamInfo:function(t,I){return this.extraStreamInfo[t]=I,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var t in this.extraStreamInfo)Object.prototype.hasOwnProperty.call(this.extraStreamInfo,t)&&(this.streamInfo[t]=this.extraStreamInfo[t])},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 t="Worker "+this.name;return this.previous?this.previous+" -> "+t:t}};var Pe=pCg;(function(t){for(var I=PC(),g=nt,C=_V,i=Pe,e=new Array(256),A=0;A<256;A++)e[A]=A>=252?6:A>=248?5:A>=240?4:A>=224?3:A>=192?2:1;e[254]=e[254]=1;function s(){i.call(this,"utf-8 decode"),this.leftOver=null}function l(){i.call(this,"utf-8 encode")}t.utf8encode=function(n){return g.nodebuffer?C.newBufferFrom(n,"utf-8"):function(a){var d,o,c,r,h,b=a.length,u=0;for(r=0;r<b;r++)(64512&(o=a.charCodeAt(r)))==55296&&r+1<b&&(64512&(c=a.charCodeAt(r+1)))==56320&&(o=65536+(o-55296<<10)+(c-56320),r++),u+=o<128?1:o<2048?2:o<65536?3:4;for(d=g.uint8array?new Uint8Array(u):new Array(u),h=0,r=0;h<u;r++)(64512&(o=a.charCodeAt(r)))==55296&&r+1<b&&(64512&(c=a.charCodeAt(r+1)))==56320&&(o=65536+(o-55296<<10)+(c-56320),r++),o<128?d[h++]=o:o<2048?(d[h++]=192|o>>>6,d[h++]=128|63&o):o<65536?(d[h++]=224|o>>>12,d[h++]=128|o>>>6&63,d[h++]=128|63&o):(d[h++]=240|o>>>18,d[h++]=128|o>>>12&63,d[h++]=128|o>>>6&63,d[h++]=128|63&o);return d}(n)},t.utf8decode=function(n){return g.nodebuffer?I.transformTo("nodebuffer",n).toString("utf-8"):function(a){var d,o,c,r,h=a.length,b=new Array(2*h);for(o=0,d=0;d<h;)if((c=a[d++])<128)b[o++]=c;else if((r=e[c])>4)b[o++]=65533,d+=r-1;else{for(c&=r===2?31:r===3?15:7;r>1&&d<h;)c=c<<6|63&a[d++],r--;r>1?b[o++]=65533:c<65536?b[o++]=c:(c-=65536,b[o++]=55296|c>>10&1023,b[o++]=56320|1023&c)}return b.length!==o&&(b.subarray?b=b.subarray(0,o):b.length=o),I.applyFromCharCode(b)}(n=I.transformTo(g.uint8array?"uint8array":"array",n))},I.inherits(s,i),s.prototype.processChunk=function(n){var a=I.transformTo(g.uint8array?"uint8array":"array",n.data);if(this.leftOver&&this.leftOver.length){if(g.uint8array){var d=a;(a=new Uint8Array(d.length+this.leftOver.length)).set(this.leftOver,0),a.set(d,this.leftOver.length)}else a=this.leftOver.concat(a);this.leftOver=null}var o=function(r,h){var b;for((h=h||r.length)>r.length&&(h=r.length),b=h-1;b>=0&&(192&r[b])==128;)b--;return b<0||b===0?h:b+e[r[b]]>h?b:h}(a),c=a;o!==a.length&&(g.uint8array?(c=a.subarray(0,o),this.leftOver=a.subarray(o,a.length)):(c=a.slice(0,o),this.leftOver=a.slice(o,a.length))),this.push({data:t.utf8decode(c),meta:n.meta})},s.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:t.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},t.Utf8DecodeWorker=s,I.inherits(l,i),l.prototype.processChunk=function(n){this.push({data:t.utf8encode(n.data),meta:n.meta})},t.Utf8EncodeWorker=l})(Z0);var BCg=Pe,A_=PC();function qS(t){BCg.call(this,"ConvertWorker to "+t),this.destType=t}A_.inherits(qS,BCg),qS.prototype.processChunk=function(t){this.push({data:A_.transformTo(this.destType,t.data),meta:t.meta})};var s_,l_,dhg=qS,$c=PC(),rhg=dhg,hhg=Pe,bhg=GCg(),uhg=eG,WCg=null;if(nt.nodestream)try{WCg=function(){if(l_)return s_;l_=1;var t=ZCg().Readable;function I(g,C,i){t.call(this,C),this._helper=g;var e=this;g.on("data",function(A,s){e.push(A)||e._helper.pause(),i&&i(s)}).on("error",function(A){e.emit("error",A)}).on("end",function(){e.push(null)})}return PC().inherits(I,t),I.prototype._read=function(){this._helper.resume()},s_=I}()}catch{}function mhg(t,I){return new uhg.Promise(function(g,C){var i=[],e=t._internalType,A=t._outputType,s=t._mimeType;t.on("data",function(l,n){i.push(l),I&&I(n)}).on("error",function(l){i=[],C(l)}).on("end",function(){try{var l=function(n,a,d){switch(n){case"blob":return $c.newBlob($c.transformTo("arraybuffer",a),d);case"base64":return bhg.encode(a);default:return $c.transformTo(n,a)}}(A,function(n,a){var d,o=0,c=null,r=0;for(d=0;d<a.length;d++)r+=a[d].length;switch(n){case"string":return a.join("");case"array":return Array.prototype.concat.apply([],a);case"uint8array":for(c=new Uint8Array(r),d=0;d<a.length;d++)c.set(a[d],o),o+=a[d].length;return c;case"nodebuffer":return Xg.concat(a);default:throw new Error("concat : unsupported type '"+n+"'")}}(e,i),s);g(l)}catch(n){C(n)}i=[]}).resume()})}function yCg(t,I,g){var C=I;switch(I){case"blob":case"arraybuffer":C="uint8array";break;case"base64":C="string"}try{this._internalType=C,this._outputType=I,this._mimeType=g,$c.checkSupport(C),this._worker=t.pipe(new rhg(C)),t.lock()}catch(i){this._worker=new hhg("error"),this._worker.error(i)}}yCg.prototype={accumulate:function(t){return mhg(this,t)},on:function(t,I){var g=this;return t==="data"?this._worker.on(t,function(C){I.call(g,C.data,C.meta)}):this._worker.on(t,function(){$c.delay(I,arguments,g)}),this},resume:function(){return $c.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(t){if($c.checkSupport("nodestream"),this._outputType!=="nodebuffer")throw new Error(this._outputType+" is not supported by this method");return new WCg(this,{objectMode:this._outputType!=="nodebuffer"},t)}};var YCg=yCg,NCg={base64:!1,binary:!1,dir:!1,createFolders:!0,date:null,compression:null,compressionOptions:null,comment:null,unixPermissions:null,dosPermissions:null},MN=PC(),RN=Pe;function xr(t){RN.call(this,"DataWorker");var I=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,t.then(function(g){I.dataIsReady=!0,I.data=g,I.max=g&&g.length||0,I.type=MN.getTypeOf(g),I.isPaused||I._tickAndRepeat()},function(g){I.error(g)})}MN.inherits(xr,RN),xr.prototype.cleanUp=function(){RN.prototype.cleanUp.call(this),this.data=null},xr.prototype.resume=function(){return!!RN.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,MN.delay(this._tickAndRepeat,[],this)),!0)},xr.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(MN.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},xr.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var t=null,I=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":t=this.data.substring(this.index,I);break;case"uint8array":t=this.data.subarray(this.index,I);break;case"array":case"nodebuffer":t=this.data.slice(this.index,I)}return this.index=I,this.push({data:t,meta:{percent:this.max?this.index/this.max*100:0}})};var VCg=xr,Zhg=PC(),n_=function(){for(var t,I=[],g=0;g<256;g++){t=g;for(var C=0;C<8;C++)t=1&t?3988292384^t>>>1:t>>>1;I[g]=t}return I}(),W9=function(t,I){return t!==void 0&&t.length?Zhg.getTypeOf(t)!=="string"?function(g,C,i,e){var A=n_,s=e+i;g^=-1;for(var l=e;l<s;l++)g=g>>>8^A[255&(g^C[l])];return-1^g}(0|I,t,t.length,0):function(g,C,i,e){var A=n_,s=e+i;g^=-1;for(var l=e;l<s;l++)g=g>>>8^A[255&(g^C.charCodeAt(l))];return-1^g}(0|I,t,t.length,0):0},MCg=Pe,Ghg=W9;function $S(){MCg.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}PC().inherits($S,MCg),$S.prototype.processChunk=function(t){this.streamInfo.crc32=Ghg(t.data,this.streamInfo.crc32||0),this.push(t)};var RCg=$S,whg=PC(),gD=Pe;function ID(t){gD.call(this,"DataLengthProbe for "+t),this.propName=t,this.withStreamInfo(t,0)}whg.inherits(ID,gD),ID.prototype.processChunk=function(t){if(t){var I=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=I+t.data.length}gD.prototype.processChunk.call(this,t)};var a_=eG,o_=VCg,phg=RCg,IX=ID;function CD(t,I,g,C,i){this.compressedSize=t,this.uncompressedSize=I,this.crc32=g,this.compression=C,this.compressedContent=i}CD.prototype={getContentWorker:function(){var t=new o_(a_.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new IX("data_length")),I=this;return t.on("end",function(){if(this.streamInfo.data_length!==I.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),t},getCompressedWorker:function(){return new o_(a_.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},CD.createWorkerFrom=function(t,I,g){return t.pipe(new phg).pipe(new IX("uncompressedSize")).pipe(I.compressWorker(g)).pipe(new IX("compressedSize")).withStreamInfo("compression",I)};var y9=CD,Bhg=YCg,Whg=VCg,CX=Z0,tX=y9,c_=Pe,Y9=function(t,I,g){this.name=t,this.dir=g.dir,this.date=g.date,this.comment=g.comment,this.unixPermissions=g.unixPermissions,this.dosPermissions=g.dosPermissions,this._data=I,this._dataBinary=g.binary,this.options={compression:g.compression,compressionOptions:g.compressionOptions}};Y9.prototype={internalStream:function(t){var I=null,g="string";try{if(!t)throw new Error("No output type specified.");var C=(g=t.toLowerCase())==="string"||g==="text";g!=="binarystring"&&g!=="text"||(g="string"),I=this._decompressWorker();var i=!this._dataBinary;i&&!C&&(I=I.pipe(new CX.Utf8EncodeWorker)),!i&&C&&(I=I.pipe(new CX.Utf8DecodeWorker))}catch(e){(I=new c_("error")).error(e)}return new Bhg(I,g,"")},async:function(t,I){return this.internalStream(t).accumulate(I)},nodeStream:function(t,I){return this.internalStream(t||"nodebuffer").toNodejsStream(I)},_compressWorker:function(t,I){if(this._data instanceof tX&&this._data.compression.magic===t.magic)return this._data.getCompressedWorker();var g=this._decompressWorker();return this._dataBinary||(g=g.pipe(new CX.Utf8EncodeWorker)),tX.createWorkerFrom(g,t,I)},_decompressWorker:function(){return this._data instanceof tX?this._data.getContentWorker():this._data instanceof c_?this._data:new Whg(this._data)}};for(var d_=["asText","asBinary","asNodeBuffer","asUint8Array","asArrayBuffer"],yhg=function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},iX=0;iX<d_.length;iX++)Y9.prototype[d_[iX]]=yhg;var Yhg=Y9,fCg={},CV={},fN={},Ol={};(function(t){var I=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Int32Array<"u";function g(e,A){return Object.prototype.hasOwnProperty.call(e,A)}t.assign=function(e){for(var A=Array.prototype.slice.call(arguments,1);A.length;){var s=A.shift();if(s){if(typeof s!="object")throw new TypeError(s+"must be non-object");for(var l in s)g(s,l)&&(e[l]=s[l])}}return e},t.shrinkBuf=function(e,A){return e.length===A?e:e.subarray?e.subarray(0,A):(e.length=A,e)};var C={arraySet:function(e,A,s,l,n){if(A.subarray&&e.subarray)e.set(A.subarray(s,s+l),n);else for(var a=0;a<l;a++)e[n+a]=A[s+a]},flattenChunks:function(e){var A,s,l,n,a,d;for(l=0,A=0,s=e.length;A<s;A++)l+=e[A].length;for(d=new Uint8Array(l),n=0,A=0,s=e.length;A<s;A++)a=e[A],d.set(a,n),n+=a.length;return d}},i={arraySet:function(e,A,s,l,n){for(var a=0;a<l;a++)e[n+a]=A[s+a]},flattenChunks:function(e){return[].concat.apply([],e)}};t.setTyped=function(e){e?(t.Buf8=Uint8Array,t.Buf16=Uint16Array,t.Buf32=Int32Array,t.assign(t,C)):(t.Buf8=Array,t.Buf16=Array,t.Buf32=Array,t.assign(t,i))},t.setTyped(I)})(Ol);var Eu={},is={},jr={},Nhg=Ol;function G0(t){for(var I=t.length;--I>=0;)t[I]=0}var tD=[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],HN=[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],Vhg=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],r_=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],Al=new Array(576);G0(Al);var Pu=new Array(60);G0(Pu);var wm=new Array(512);G0(wm);var rm=new Array(256);G0(rm);var N9=new Array(29);G0(N9);var h_,b_,u_,tV=new Array(30);function eX(t,I,g,C,i){this.static_tree=t,this.extra_bits=I,this.extra_base=g,this.elems=C,this.max_length=i,this.has_stree=t&&t.length}function AX(t,I){this.dyn_tree=t,this.max_code=0,this.stat_desc=I}function HCg(t){return t<256?wm[t]:wm[256+(t>>>7)]}function pm(t,I){t.pending_buf[t.pending++]=255&I,t.pending_buf[t.pending++]=I>>>8&255}function vi(t,I,g){t.bi_valid>16-g?(t.bi_buf|=I<<t.bi_valid&65535,pm(t,t.bi_buf),t.bi_buf=I>>16-t.bi_valid,t.bi_valid+=g-16):(t.bi_buf|=I<<t.bi_valid&65535,t.bi_valid+=g)}function ys(t,I,g){vi(t,g[2*I],g[2*I+1])}function XCg(t,I){var g=0;do g|=1&t,t>>>=1,g<<=1;while(--I>0);return g>>>1}function SCg(t,I,g){var C,i,e=new Array(16),A=0;for(C=1;C<=15;C++)e[C]=A=A+g[C-1]<<1;for(i=0;i<=I;i++){var s=t[2*i+1];s!==0&&(t[2*i]=XCg(e[s]++,s))}}function m_(t){var I;for(I=0;I<286;I++)t.dyn_ltree[2*I]=0;for(I=0;I<30;I++)t.dyn_dtree[2*I]=0;for(I=0;I<19;I++)t.bl_tree[2*I]=0;t.dyn_ltree[512]=1,t.opt_len=t.static_len=0,t.last_lit=t.matches=0}function DCg(t){t.bi_valid>8?pm(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0}function Z_(t,I,g,C){var i=2*I,e=2*g;return t[i]<t[e]||t[i]===t[e]&&C[I]<=C[g]}function sX(t,I,g){for(var C=t.heap[g],i=g<<1;i<=t.heap_len&&(i<t.heap_len&&Z_(I,t.heap[i+1],t.heap[i],t.depth)&&i++,!Z_(I,C,t.heap[i],t.depth));)t.heap[g]=t.heap[i],g=i,i<<=1;t.heap[g]=C}function G_(t,I,g){var C,i,e,A,s=0;if(t.last_lit!==0)do C=t.pending_buf[t.d_buf+2*s]<<8|t.pending_buf[t.d_buf+2*s+1],i=t.pending_buf[t.l_buf+s],s++,C===0?ys(t,i,I):(ys(t,(e=rm[i])+256+1,I),(A=tD[e])!==0&&vi(t,i-=N9[e],A),ys(t,e=HCg(--C),g),(A=HN[e])!==0&&vi(t,C-=tV[e],A));while(s<t.last_lit);ys(t,256,I)}function lX(t,I){var g,C,i,e=I.dyn_tree,A=I.stat_desc.static_tree,s=I.stat_desc.has_stree,l=I.stat_desc.elems,n=-1;for(t.heap_len=0,t.heap_max=573,g=0;g<l;g++)e[2*g]!==0?(t.heap[++t.heap_len]=n=g,t.depth[g]=0):e[2*g+1]=0;for(;t.heap_len<2;)e[2*(i=t.heap[++t.heap_len]=n<2?++n:0)]=1,t.depth[i]=0,t.opt_len--,s&&(t.static_len-=A[2*i+1]);for(I.max_code=n,g=t.heap_len>>1;g>=1;g--)sX(t,e,g);i=l;do g=t.heap[1],t.heap[1]=t.heap[t.heap_len--],sX(t,e,1),C=t.heap[1],t.heap[--t.heap_max]=g,t.heap[--t.heap_max]=C,e[2*i]=e[2*g]+e[2*C],t.depth[i]=(t.depth[g]>=t.depth[C]?t.depth[g]:t.depth[C])+1,e[2*g+1]=e[2*C+1]=i,t.heap[1]=i++,sX(t,e,1);while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],function(a,d){var o,c,r,h,b,u,m=d.dyn_tree,Z=d.max_code,p=d.stat_desc.static_tree,Y=d.stat_desc.has_stree,R=d.stat_desc.extra_bits,X=d.stat_desc.extra_base,H=d.stat_desc.max_length,S=0;for(h=0;h<=15;h++)a.bl_count[h]=0;for(m[2*a.heap[a.heap_max]+1]=0,o=a.heap_max+1;o<573;o++)(h=m[2*m[2*(c=a.heap[o])+1]+1]+1)>H&&(h=H,S++),m[2*c+1]=h,c>Z||(a.bl_count[h]++,b=0,c>=X&&(b=R[c-X]),u=m[2*c],a.opt_len+=u*(h+b),Y&&(a.static_len+=u*(p[2*c+1]+b)));if(S!==0){do{for(h=H-1;a.bl_count[h]===0;)h--;a.bl_count[h]--,a.bl_count[h+1]+=2,a.bl_count[H]--,S-=2}while(S>0);for(h=H;h!==0;h--)for(c=a.bl_count[h];c!==0;)(r=a.heap[--o])>Z||(m[2*r+1]!==h&&(a.opt_len+=(h-m[2*r+1])*m[2*r],m[2*r+1]=h),c--)}}(t,I),SCg(e,n,t.bl_count)}function w_(t,I,g){var C,i,e=-1,A=I[1],s=0,l=7,n=4;for(A===0&&(l=138,n=3),I[2*(g+1)+1]=65535,C=0;C<=g;C++)i=A,A=I[2*(C+1)+1],++s<l&&i===A||(s<n?t.bl_tree[2*i]+=s:i!==0?(i!==e&&t.bl_tree[2*i]++,t.bl_tree[32]++):s<=10?t.bl_tree[34]++:t.bl_tree[36]++,s=0,e=i,A===0?(l=138,n=3):i===A?(l=6,n=3):(l=7,n=4))}function p_(t,I,g){var C,i,e=-1,A=I[1],s=0,l=7,n=4;for(A===0&&(l=138,n=3),C=0;C<=g;C++)if(i=A,A=I[2*(C+1)+1],!(++s<l&&i===A)){if(s<n)do ys(t,i,t.bl_tree);while(--s!=0);else i!==0?(i!==e&&(ys(t,i,t.bl_tree),s--),ys(t,16,t.bl_tree),vi(t,s-3,2)):s<=10?(ys(t,17,t.bl_tree),vi(t,s-3,3)):(ys(t,18,t.bl_tree),vi(t,s-11,7));s=0,e=i,A===0?(l=138,n=3):i===A?(l=6,n=3):(l=7,n=4)}}G0(tV);var B_=!1;function W_(t,I,g,C){vi(t,0+(C?1:0),3),function(i,e,A,s){DCg(i),pm(i,A),pm(i,~A),Nhg.arraySet(i.pending_buf,i.window,e,A,i.pending),i.pending+=A}(t,I,g)}jr._tr_init=function(t){B_||(function(){var I,g,C,i,e,A=new Array(16);for(C=0,i=0;i<28;i++)for(N9[i]=C,I=0;I<1<<tD[i];I++)rm[C++]=i;for(rm[C-1]=i,e=0,i=0;i<16;i++)for(tV[i]=e,I=0;I<1<<HN[i];I++)wm[e++]=i;for(e>>=7;i<30;i++)for(tV[i]=e<<7,I=0;I<1<<HN[i]-7;I++)wm[256+e++]=i;for(g=0;g<=15;g++)A[g]=0;for(I=0;I<=143;)Al[2*I+1]=8,I++,A[8]++;for(;I<=255;)Al[2*I+1]=9,I++,A[9]++;for(;I<=279;)Al[2*I+1]=7,I++,A[7]++;for(;I<=287;)Al[2*I+1]=8,I++,A[8]++;for(SCg(Al,287,A),I=0;I<30;I++)Pu[2*I+1]=5,Pu[2*I]=XCg(I,5);h_=new eX(Al,tD,257,286,15),b_=new eX(Pu,HN,0,30,15),u_=new eX(new Array(0),Vhg,0,19,7)}(),B_=!0),t.l_desc=new AX(t.dyn_ltree,h_),t.d_desc=new AX(t.dyn_dtree,b_),t.bl_desc=new AX(t.bl_tree,u_),t.bi_buf=0,t.bi_valid=0,m_(t)},jr._tr_stored_block=W_,jr._tr_flush_block=function(t,I,g,C){var i,e,A=0;t.level>0?(t.strm.data_type===2&&(t.strm.data_type=function(s){var l,n=4093624447;for(l=0;l<=31;l++,n>>>=1)if(1&n&&s.dyn_ltree[2*l]!==0)return 0;if(s.dyn_ltree[18]!==0||s.dyn_ltree[20]!==0||s.dyn_ltree[26]!==0)return 1;for(l=32;l<256;l++)if(s.dyn_ltree[2*l]!==0)return 1;return 0}(t)),lX(t,t.l_desc),lX(t,t.d_desc),A=function(s){var l;for(w_(s,s.dyn_ltree,s.l_desc.max_code),w_(s,s.dyn_dtree,s.d_desc.max_code),lX(s,s.bl_desc),l=18;l>=3&&s.bl_tree[2*r_[l]+1]===0;l--);return s.opt_len+=3*(l+1)+5+5+4,l}(t),i=t.opt_len+3+7>>>3,(e=t.static_len+3+7>>>3)<=i&&(i=e)):i=e=g+5,g+4<=i&&I!==-1?W_(t,I,g,C):t.strategy===4||e===i?(vi(t,2+(C?1:0),3),G_(t,Al,Pu)):(vi(t,4+(C?1:0),3),function(s,l,n,a){var d;for(vi(s,l-257,5),vi(s,n-1,5),vi(s,a-4,4),d=0;d<a;d++)vi(s,s.bl_tree[2*r_[d]+1],3);p_(s,s.dyn_ltree,l-1),p_(s,s.dyn_dtree,n-1)}(t,t.l_desc.max_code+1,t.d_desc.max_code+1,A+1),G_(t,t.dyn_ltree,t.dyn_dtree)),m_(t),C&&DCg(t)},jr._tr_tally=function(t,I,g){return t.pending_buf[t.d_buf+2*t.last_lit]=I>>>8&255,t.pending_buf[t.d_buf+2*t.last_lit+1]=255&I,t.pending_buf[t.l_buf+t.last_lit]=255&g,t.last_lit++,I===0?t.dyn_ltree[2*g]++:(t.matches++,I--,t.dyn_ltree[2*(rm[g]+256+1)]++,t.dyn_dtree[2*HCg(I)]++),t.last_lit===t.lit_bufsize-1},jr._tr_align=function(t){vi(t,2,3),ys(t,256,Al),function(I){I.bi_valid===16?(pm(I,I.bi_buf),I.bi_buf=0,I.bi_valid=0):I.bi_valid>=8&&(I.pending_buf[I.pending++]=255&I.bi_buf,I.bi_buf>>=8,I.bi_valid-=8)}(t)};var KCg=function(t,I,g,C){for(var i=65535&t|0,e=t>>>16&65535|0,A=0;g!==0;){g-=A=g>2e3?2e3:g;do e=e+(i=i+I[C++]|0)|0;while(--A);i%=65521,e%=65521}return i|e<<16|0},Mhg=function(){for(var t,I=[],g=0;g<256;g++){t=g;for(var C=0;C<8;C++)t=1&t?3988292384^t>>>1:t>>>1;I[g]=t}return I}(),Pr,FCg=function(t,I,g,C){var i=Mhg,e=C+g;t^=-1;for(var A=C;A<e;A++)t=t>>>8^i[255&(t^I[A])];return-1^t},V9={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"},yi=Ol,Qe=jr,kCg=KCg,On=FCg,Rhg=V9;function Pn(t,I){return t.msg=Rhg[I],I}function y_(t){return(t<<1)-(t>4?9:0)}function $n(t){for(var I=t.length;--I>=0;)t[I]=0}function Un(t){var I=t.state,g=I.pending;g>t.avail_out&&(g=t.avail_out),g!==0&&(yi.arraySet(t.output,I.pending_buf,I.pending_out,g,t.next_out),t.next_out+=g,I.pending_out+=g,t.total_out+=g,t.avail_out-=g,I.pending-=g,I.pending===0&&(I.pending_out=0))}function Et(t,I){Qe._tr_flush_block(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,I),t.block_start=t.strstart,Un(t.strm)}function sC(t,I){t.pending_buf[t.pending++]=I}function Vu(t,I){t.pending_buf[t.pending++]=I>>>8&255,t.pending_buf[t.pending++]=255&I}function zCg(t,I){var g,C,i=t.max_chain_length,e=t.strstart,A=t.prev_length,s=t.nice_match,l=t.strstart>t.w_size-262?t.strstart-(t.w_size-262):0,n=t.window,a=t.w_mask,d=t.prev,o=t.strstart+258,c=n[e+A-1],r=n[e+A];t.prev_length>=t.good_match&&(i>>=2),s>t.lookahead&&(s=t.lookahead);do if(n[(g=I)+A]===r&&n[g+A-1]===c&&n[g]===n[e]&&n[++g]===n[e+1]){e+=2,g++;do;while(n[++e]===n[++g]&&n[++e]===n[++g]&&n[++e]===n[++g]&&n[++e]===n[++g]&&n[++e]===n[++g]&&n[++e]===n[++g]&&n[++e]===n[++g]&&n[++e]===n[++g]&&e<o);if(C=258-(o-e),e=o-258,C>A){if(t.match_start=I,A=C,C>=s)break;c=n[e+A-1],r=n[e+A]}}while((I=d[I&a])>l&&--i!=0);return A<=t.lookahead?A:t.lookahead}function Fo(t){var I,g,C,i,e,A,s,l,n,a,d=t.w_size;do{if(i=t.window_size-t.lookahead-t.strstart,t.strstart>=d+(d-262)){yi.arraySet(t.window,t.window,d,d,0),t.match_start-=d,t.strstart-=d,t.block_start-=d,I=g=t.hash_size;do C=t.head[--I],t.head[I]=C>=d?C-d:0;while(--g);I=g=d;do C=t.prev[--I],t.prev[I]=C>=d?C-d:0;while(--g);i+=d}if(t.strm.avail_in===0)break;if(A=t.strm,s=t.window,l=t.strstart+t.lookahead,n=i,a=void 0,(a=A.avail_in)>n&&(a=n),g=a===0?0:(A.avail_in-=a,yi.arraySet(s,A.input,A.next_in,a,l),A.state.wrap===1?A.adler=kCg(A.adler,s,a,l):A.state.wrap===2&&(A.adler=On(A.adler,s,a,l)),A.next_in+=a,A.total_in+=a,a),t.lookahead+=g,t.lookahead+t.insert>=3)for(e=t.strstart-t.insert,t.ins_h=t.window[e],t.ins_h=(t.ins_h<<t.hash_shift^t.window[e+1])&t.hash_mask;t.insert&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[e+3-1])&t.hash_mask,t.prev[e&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=e,e++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead<262&&t.strm.avail_in!==0)}function nX(t,I){for(var g,C;;){if(t.lookahead<262){if(Fo(t),t.lookahead<262&&I===0)return 1;if(t.lookahead===0)break}if(g=0,t.lookahead>=3&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+3-1])&t.hash_mask,g=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),g!==0&&t.strstart-g<=t.w_size-262&&(t.match_length=zCg(t,g)),t.match_length>=3)if(C=Qe._tr_tally(t,t.strstart-t.match_start,t.match_length-3),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=3){t.match_length--;do t.strstart++,t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+3-1])&t.hash_mask,g=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart;while(--t.match_length!=0);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+1])&t.hash_mask;else C=Qe._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(C&&(Et(t,!1),t.strm.avail_out===0))return 1}return t.insert=t.strstart<2?t.strstart:2,I===4?(Et(t,!0),t.strm.avail_out===0?3:4):t.last_lit&&(Et(t,!1),t.strm.avail_out===0)?1:2}function Vr(t,I){for(var g,C,i;;){if(t.lookahead<262){if(Fo(t),t.lookahead<262&&I===0)return 1;if(t.lookahead===0)break}if(g=0,t.lookahead>=3&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+3-1])&t.hash_mask,g=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=2,g!==0&&t.prev_length<t.max_lazy_match&&t.strstart-g<=t.w_size-262&&(t.match_length=zCg(t,g),t.match_length<=5&&(t.strategy===1||t.match_length===3&&t.strstart-t.match_start>4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){i=t.strstart+t.lookahead-3,C=Qe._tr_tally(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do++t.strstart<=i&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+3-1])&t.hash_mask,g=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart);while(--t.prev_length!=0);if(t.match_available=0,t.match_length=2,t.strstart++,C&&(Et(t,!1),t.strm.avail_out===0))return 1}else if(t.match_available){if((C=Qe._tr_tally(t,0,t.window[t.strstart-1]))&&Et(t,!1),t.strstart++,t.lookahead--,t.strm.avail_out===0)return 1}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(C=Qe._tr_tally(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,I===4?(Et(t,!0),t.strm.avail_out===0?3:4):t.last_lit&&(Et(t,!1),t.strm.avail_out===0)?1:2}function $A(t,I,g,C,i){this.good_length=t,this.max_lazy=I,this.nice_length=g,this.max_chain=C,this.func=i}function fhg(){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=8,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 yi.Buf16(1146),this.dyn_dtree=new yi.Buf16(122),this.bl_tree=new yi.Buf16(78),$n(this.dyn_ltree),$n(this.dyn_dtree),$n(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new yi.Buf16(16),this.heap=new yi.Buf16(573),$n(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new yi.Buf16(573),$n(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 JCg(t){var I;return t&&t.state?(t.total_in=t.total_out=0,t.data_type=2,(I=t.state).pending=0,I.pending_out=0,I.wrap<0&&(I.wrap=-I.wrap),I.status=I.wrap?42:113,t.adler=I.wrap===2?0:1,I.last_flush=0,Qe._tr_init(I),0):Pn(t,-2)}function LCg(t){var I,g=JCg(t);return g===0&&((I=t.state).window_size=2*I.w_size,$n(I.head),I.max_lazy_match=Pr[I.level].max_lazy,I.good_match=Pr[I.level].good_length,I.nice_match=Pr[I.level].nice_length,I.max_chain_length=Pr[I.level].max_chain,I.strstart=0,I.block_start=0,I.lookahead=0,I.insert=0,I.match_length=I.prev_length=2,I.match_available=0,I.ins_h=0),g}function Y_(t,I,g,C,i,e){if(!t)return-2;var A=1;if(I===-1&&(I=6),C<0?(A=0,C=-C):C>15&&(A=2,C-=16),i<1||i>9||g!==8||C<8||C>15||I<0||I>9||e<0||e>4)return Pn(t,-2);C===8&&(C=9);var s=new fhg;return t.state=s,s.strm=t,s.wrap=A,s.gzhead=null,s.w_bits=C,s.w_size=1<<s.w_bits,s.w_mask=s.w_size-1,s.hash_bits=i+7,s.hash_size=1<<s.hash_bits,s.hash_mask=s.hash_size-1,s.hash_shift=~~((s.hash_bits+3-1)/3),s.window=new yi.Buf8(2*s.w_size),s.head=new yi.Buf16(s.hash_size),s.prev=new yi.Buf16(s.w_size),s.lit_bufsize=1<<i+6,s.pending_buf_size=4*s.lit_bufsize,s.pending_buf=new yi.Buf8(s.pending_buf_size),s.d_buf=1*s.lit_bufsize,s.l_buf=3*s.lit_bufsize,s.level=I,s.strategy=e,s.method=g,LCg(t)}Pr=[new $A(0,0,0,0,function(t,I){var g=65535;for(g>t.pending_buf_size-5&&(g=t.pending_buf_size-5);;){if(t.lookahead<=1){if(Fo(t),t.lookahead===0&&I===0)return 1;if(t.lookahead===0)break}t.strstart+=t.lookahead,t.lookahead=0;var C=t.block_start+g;if((t.strstart===0||t.strstart>=C)&&(t.lookahead=t.strstart-C,t.strstart=C,Et(t,!1),t.strm.avail_out===0)||t.strstart-t.block_start>=t.w_size-262&&(Et(t,!1),t.strm.avail_out===0))return 1}return t.insert=0,I===4?(Et(t,!0),t.strm.avail_out===0?3:4):(t.strstart>t.block_start&&(Et(t,!1),t.strm.avail_out),1)}),new $A(4,4,8,4,nX),new $A(4,5,16,8,nX),new $A(4,6,32,32,nX),new $A(4,4,16,16,Vr),new $A(8,16,32,32,Vr),new $A(8,16,128,128,Vr),new $A(8,32,128,256,Vr),new $A(32,128,258,1024,Vr),new $A(32,258,258,4096,Vr)],is.deflateInit=function(t,I){return Y_(t,I,8,15,8,0)},is.deflateInit2=Y_,is.deflateReset=LCg,is.deflateResetKeep=JCg,is.deflateSetHeader=function(t,I){return t&&t.state?t.state.wrap!==2?-2:(t.state.gzhead=I,0):-2},is.deflate=function(t,I){var g,C,i,e;if(!t||!t.state||I>5||I<0)return t?Pn(t,-2):-2;if(C=t.state,!t.output||!t.input&&t.avail_in!==0||C.status===666&&I!==4)return Pn(t,t.avail_out===0?-5:-2);if(C.strm=t,g=C.last_flush,C.last_flush=I,C.status===42)if(C.wrap===2)t.adler=0,sC(C,31),sC(C,139),sC(C,8),C.gzhead?(sC(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)),sC(C,255&C.gzhead.time),sC(C,C.gzhead.time>>8&255),sC(C,C.gzhead.time>>16&255),sC(C,C.gzhead.time>>24&255),sC(C,C.level===9?2:C.strategy>=2||C.level<2?4:0),sC(C,255&C.gzhead.os),C.gzhead.extra&&C.gzhead.extra.length&&(sC(C,255&C.gzhead.extra.length),sC(C,C.gzhead.extra.length>>8&255)),C.gzhead.hcrc&&(t.adler=On(t.adler,C.pending_buf,C.pending,0)),C.gzindex=0,C.status=69):(sC(C,0),sC(C,0),sC(C,0),sC(C,0),sC(C,0),sC(C,C.level===9?2:C.strategy>=2||C.level<2?4:0),sC(C,3),C.status=113);else{var A=8+(C.w_bits-8<<4)<<8;A|=(C.strategy>=2||C.level<2?0:C.level<6?1:C.level===6?2:3)<<6,C.strstart!==0&&(A|=32),A+=31-A%31,C.status=113,Vu(C,A),C.strstart!==0&&(Vu(C,t.adler>>>16),Vu(C,65535&t.adler)),t.adler=1}if(C.status===69)if(C.gzhead.extra){for(i=C.pending;C.gzindex<(65535&C.gzhead.extra.length)&&(C.pending!==C.pending_buf_size||(C.gzhead.hcrc&&C.pending>i&&(t.adler=On(t.adler,C.pending_buf,C.pending-i,i)),Un(t),i=C.pending,C.pending!==C.pending_buf_size));)sC(C,255&C.gzhead.extra[C.gzindex]),C.gzindex++;C.gzhead.hcrc&&C.pending>i&&(t.adler=On(t.adler,C.pending_buf,C.pending-i,i)),C.gzindex===C.gzhead.extra.length&&(C.gzindex=0,C.status=73)}else C.status=73;if(C.status===73)if(C.gzhead.name){i=C.pending;do{if(C.pending===C.pending_buf_size&&(C.gzhead.hcrc&&C.pending>i&&(t.adler=On(t.adler,C.pending_buf,C.pending-i,i)),Un(t),i=C.pending,C.pending===C.pending_buf_size)){e=1;break}e=C.gzindex<C.gzhead.name.length?255&C.gzhead.name.charCodeAt(C.gzindex++):0,sC(C,e)}while(e!==0);C.gzhead.hcrc&&C.pending>i&&(t.adler=On(t.adler,C.pending_buf,C.pending-i,i)),e===0&&(C.gzindex=0,C.status=91)}else C.status=91;if(C.status===91)if(C.gzhead.comment){i=C.pending;do{if(C.pending===C.pending_buf_size&&(C.gzhead.hcrc&&C.pending>i&&(t.adler=On(t.adler,C.pending_buf,C.pending-i,i)),Un(t),i=C.pending,C.pending===C.pending_buf_size)){e=1;break}e=C.gzindex<C.gzhead.comment.length?255&C.gzhead.comment.charCodeAt(C.gzindex++):0,sC(C,e)}while(e!==0);C.gzhead.hcrc&&C.pending>i&&(t.adler=On(t.adler,C.pending_buf,C.pending-i,i)),e===0&&(C.status=103)}else C.status=103;if(C.status===103&&(C.gzhead.hcrc?(C.pending+2>C.pending_buf_size&&Un(t),C.pending+2<=C.pending_buf_size&&(sC(C,255&t.adler),sC(C,t.adler>>8&255),t.adler=0,C.status=113)):C.status=113),C.pending!==0){if(Un(t),t.avail_out===0)return C.last_flush=-1,0}else if(t.avail_in===0&&y_(I)<=y_(g)&&I!==4)return Pn(t,-5);if(C.status===666&&t.avail_in!==0)return Pn(t,-5);if(t.avail_in!==0||C.lookahead!==0||I!==0&&C.status!==666){var s=C.strategy===2?function(l,n){for(var a;;){if(l.lookahead===0&&(Fo(l),l.lookahead===0)){if(n===0)return 1;break}if(l.match_length=0,a=Qe._tr_tally(l,0,l.window[l.strstart]),l.lookahead--,l.strstart++,a&&(Et(l,!1),l.strm.avail_out===0))return 1}return l.insert=0,n===4?(Et(l,!0),l.strm.avail_out===0?3:4):l.last_lit&&(Et(l,!1),l.strm.avail_out===0)?1:2}(C,I):C.strategy===3?function(l,n){for(var a,d,o,c,r=l.window;;){if(l.lookahead<=258){if(Fo(l),l.lookahead<=258&&n===0)return 1;if(l.lookahead===0)break}if(l.match_length=0,l.lookahead>=3&&l.strstart>0&&(d=r[o=l.strstart-1])===r[++o]&&d===r[++o]&&d===r[++o]){c=l.strstart+258;do;while(d===r[++o]&&d===r[++o]&&d===r[++o]&&d===r[++o]&&d===r[++o]&&d===r[++o]&&d===r[++o]&&d===r[++o]&&o<c);l.match_length=258-(c-o),l.match_length>l.lookahead&&(l.match_length=l.lookahead)}if(l.match_length>=3?(a=Qe._tr_tally(l,1,l.match_length-3),l.lookahead-=l.match_length,l.strstart+=l.match_length,l.match_length=0):(a=Qe._tr_tally(l,0,l.window[l.strstart]),l.lookahead--,l.strstart++),a&&(Et(l,!1),l.strm.avail_out===0))return 1}return l.insert=0,n===4?(Et(l,!0),l.strm.avail_out===0?3:4):l.last_lit&&(Et(l,!1),l.strm.avail_out===0)?1:2}(C,I):Pr[C.level].func(C,I);if(s!==3&&s!==4||(C.status=666),s===1||s===3)return t.avail_out===0&&(C.last_flush=-1),0;if(s===2&&(I===1?Qe._tr_align(C):I!==5&&(Qe._tr_stored_block(C,0,0,!1),I===3&&($n(C.head),C.lookahead===0&&(C.strstart=0,C.block_start=0,C.insert=0))),Un(t),t.avail_out===0))return C.last_flush=-1,0}return I!==4?0:C.wrap<=0?1:(C.wrap===2?(sC(C,255&t.adler),sC(C,t.adler>>8&255),sC(C,t.adler>>16&255),sC(C,t.adler>>24&255),sC(C,255&t.total_in),sC(C,t.total_in>>8&255),sC(C,t.total_in>>16&255),sC(C,t.total_in>>24&255)):(Vu(C,t.adler>>>16),Vu(C,65535&t.adler)),Un(t),C.wrap>0&&(C.wrap=-C.wrap),C.pending!==0?0:1)},is.deflateEnd=function(t){var I;return t&&t.state?(I=t.state.status)!==42&&I!==69&&I!==73&&I!==91&&I!==103&&I!==113&&I!==666?Pn(t,-2):(t.state=null,I===113?Pn(t,-3):0):-2},is.deflateSetDictionary=function(t,I){var g,C,i,e,A,s,l,n,a=I.length;if(!t||!t.state||(e=(g=t.state).wrap)===2||e===1&&g.status!==42||g.lookahead)return-2;for(e===1&&(t.adler=kCg(t.adler,I,a,0)),g.wrap=0,a>=g.w_size&&(e===0&&($n(g.head),g.strstart=0,g.block_start=0,g.insert=0),n=new yi.Buf8(g.w_size),yi.arraySet(n,I,a-g.w_size,g.w_size,0),I=n,a=g.w_size),A=t.avail_in,s=t.next_in,l=t.input,t.avail_in=a,t.next_in=0,t.input=I,Fo(g);g.lookahead>=3;){C=g.strstart,i=g.lookahead-2;do g.ins_h=(g.ins_h<<g.hash_shift^g.window[C+3-1])&g.hash_mask,g.prev[C&g.w_mask]=g.head[g.ins_h],g.head[g.ins_h]=C,C++;while(--i);g.strstart=C,g.lookahead=2,Fo(g)}return g.strstart+=g.lookahead,g.block_start=g.strstart,g.insert=g.lookahead,g.lookahead=0,g.match_length=g.prev_length=2,g.match_available=0,t.next_in=s,t.input=l,t.avail_in=A,g.wrap=e,0},is.deflateInfo="pako deflate (from Nodeca project)";var ko={},iV=Ol,vCg=!0,TCg=!0;try{String.fromCharCode.apply(null,[0])}catch{vCg=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch{TCg=!1}for(var _u=new iV.Buf8(256),zn=0;zn<256;zn++)_u[zn]=zn>=252?6:zn>=248?5:zn>=240?4:zn>=224?3:zn>=192?2:1;function N_(t,I){if(I<65534&&(t.subarray&&TCg||!t.subarray&&vCg))return String.fromCharCode.apply(null,iV.shrinkBuf(t,I));for(var g="",C=0;C<I;C++)g+=String.fromCharCode(t[C]);return g}_u[254]=_u[254]=1,ko.string2buf=function(t){var I,g,C,i,e,A=t.length,s=0;for(i=0;i<A;i++)(64512&(g=t.charCodeAt(i)))==55296&&i+1<A&&(64512&(C=t.charCodeAt(i+1)))==56320&&(g=65536+(g-55296<<10)+(C-56320),i++),s+=g<128?1:g<2048?2:g<65536?3:4;for(I=new iV.Buf8(s),e=0,i=0;e<s;i++)(64512&(g=t.charCodeAt(i)))==55296&&i+1<A&&(64512&(C=t.charCodeAt(i+1)))==56320&&(g=65536+(g-55296<<10)+(C-56320),i++),g<128?I[e++]=g:g<2048?(I[e++]=192|g>>>6,I[e++]=128|63&g):g<65536?(I[e++]=224|g>>>12,I[e++]=128|g>>>6&63,I[e++]=128|63&g):(I[e++]=240|g>>>18,I[e++]=128|g>>>12&63,I[e++]=128|g>>>6&63,I[e++]=128|63&g);return I},ko.buf2binstring=function(t){return N_(t,t.length)},ko.binstring2buf=function(t){for(var I=new iV.Buf8(t.length),g=0,C=I.length;g<C;g++)I[g]=t.charCodeAt(g);return I},ko.buf2string=function(t,I){var g,C,i,e,A=I||t.length,s=new Array(2*A);for(C=0,g=0;g<A;)if((i=t[g++])<128)s[C++]=i;else if((e=_u[i])>4)s[C++]=65533,g+=e-1;else{for(i&=e===2?31:e===3?15:7;e>1&&g<A;)i=i<<6|63&t[g++],e--;e>1?s[C++]=65533:i<65536?s[C++]=i:(i-=65536,s[C++]=55296|i>>10&1023,s[C++]=56320|1023&i)}return N_(s,C)},ko.utf8border=function(t,I){var g;for((I=I||t.length)>t.length&&(I=t.length),g=I-1;g>=0&&(192&t[g])==128;)g--;return g<0||g===0?I:g+_u[t[g]]>I?g:I};var xCg=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},hm=is,qu=Ol,iD=ko,eD=V9,Hhg=xCg,jCg=Object.prototype.toString;function xo(t){if(!(this instanceof xo))return new xo(t);this.options=qu.assign({level:-1,method:8,chunkSize:16384,windowBits:15,memLevel:8,strategy:0,to:""},t||{});var I=this.options;I.raw&&I.windowBits>0?I.windowBits=-I.windowBits:I.gzip&&I.windowBits>0&&I.windowBits<16&&(I.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Hhg,this.strm.avail_out=0;var g=hm.deflateInit2(this.strm,I.level,I.method,I.windowBits,I.memLevel,I.strategy);if(g!==0)throw new Error(eD[g]);if(I.header&&hm.deflateSetHeader(this.strm,I.header),I.dictionary){var C;if(C=typeof I.dictionary=="string"?iD.string2buf(I.dictionary):jCg.call(I.dictionary)==="[object ArrayBuffer]"?new Uint8Array(I.dictionary):I.dictionary,(g=hm.deflateSetDictionary(this.strm,C))!==0)throw new Error(eD[g]);this._dict_set=!0}}function aX(t,I){var g=new xo(I);if(g.push(t,!0),g.err)throw g.msg||eD[g.err];return g.result}xo.prototype.push=function(t,I){var g,C,i=this.strm,e=this.options.chunkSize;if(this.ended)return!1;C=I===~~I?I:I===!0?4:0,typeof t=="string"?i.input=iD.string2buf(t):jCg.call(t)==="[object ArrayBuffer]"?i.input=new Uint8Array(t):i.input=t,i.next_in=0,i.avail_in=i.input.length;do{if(i.avail_out===0&&(i.output=new qu.Buf8(e),i.next_out=0,i.avail_out=e),(g=hm.deflate(i,C))!==1&&g!==0)return this.onEnd(g),this.ended=!0,!1;i.avail_out!==0&&(i.avail_in!==0||C!==4&&C!==2)||(this.options.to==="string"?this.onData(iD.buf2binstring(qu.shrinkBuf(i.output,i.next_out))):this.onData(qu.shrinkBuf(i.output,i.next_out)))}while((i.avail_in>0||i.avail_out===0)&&g!==1);return C===4?(g=hm.deflateEnd(this.strm),this.onEnd(g),this.ended=!0,g===0):C!==2||(this.onEnd(0),i.avail_out=0,!0)},xo.prototype.onData=function(t){this.chunks.push(t)},xo.prototype.onEnd=function(t){t===0&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=qu.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},Eu.Deflate=xo,Eu.deflate=aX,Eu.deflateRaw=function(t,I){return(I=I||{}).raw=!0,aX(t,I)},Eu.gzip=function(t,I){return(I=I||{}).gzip=!0,aX(t,I)};var $u={},sA={},V_=Ol,Xhg=[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],Shg=[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],Dhg=[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],Khg=[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],me=Ol,oX=KCg,gs=FCg,Fhg=function(t,I){var g,C,i,e,A,s,l,n,a,d,o,c,r,h,b,u,m,Z,p,Y,R,X,H,S,z;g=t.state,C=t.next_in,S=t.input,i=C+(t.avail_in-5),e=t.next_out,z=t.output,A=e-(I-t.avail_out),s=e+(t.avail_out-257),l=g.dmax,n=g.wsize,a=g.whave,d=g.wnext,o=g.window,c=g.hold,r=g.bits,h=g.lencode,b=g.distcode,u=(1<<g.lenbits)-1,m=(1<<g.distbits)-1;g:do{r<15&&(c+=S[C++]<<r,r+=8,c+=S[C++]<<r,r+=8),Z=h[c&u];I:for(;;){if(c>>>=p=Z>>>24,r-=p,(p=Z>>>16&255)===0)z[e++]=65535&Z;else{if(!(16&p)){if((64&p)==0){Z=h[(65535&Z)+(c&(1<<p)-1)];continue I}if(32&p){g.mode=12;break g}t.msg="invalid literal/length code",g.mode=30;break g}Y=65535&Z,(p&=15)&&(r<p&&(c+=S[C++]<<r,r+=8),Y+=c&(1<<p)-1,c>>>=p,r-=p),r<15&&(c+=S[C++]<<r,r+=8,c+=S[C++]<<r,r+=8),Z=b[c&m];C:for(;;){if(c>>>=p=Z>>>24,r-=p,!(16&(p=Z>>>16&255))){if((64&p)==0){Z=b[(65535&Z)+(c&(1<<p)-1)];continue C}t.msg="invalid distance code",g.mode=30;break g}if(R=65535&Z,r<(p&=15)&&(c+=S[C++]<<r,(r+=8)<p&&(c+=S[C++]<<r,r+=8)),(R+=c&(1<<p)-1)>l){t.msg="invalid distance too far back",g.mode=30;break g}if(c>>>=p,r-=p,R>(p=e-A)){if((p=R-p)>a&&g.sane){t.msg="invalid distance too far back",g.mode=30;break g}if(X=0,H=o,d===0){if(X+=n-p,p<Y){Y-=p;do z[e++]=o[X++];while(--p);X=e-R,H=z}}else if(d<p){if(X+=n+d-p,(p-=d)<Y){Y-=p;do z[e++]=o[X++];while(--p);if(X=0,d<Y){Y-=p=d;do z[e++]=o[X++];while(--p);X=e-R,H=z}}}else if(X+=d-p,p<Y){Y-=p;do z[e++]=o[X++];while(--p);X=e-R,H=z}for(;Y>2;)z[e++]=H[X++],z[e++]=H[X++],z[e++]=H[X++],Y-=3;Y&&(z[e++]=H[X++],Y>1&&(z[e++]=H[X++]))}else{X=e-R;do z[e++]=z[X++],z[e++]=z[X++],z[e++]=z[X++],Y-=3;while(Y>2);Y&&(z[e++]=z[X++],Y>1&&(z[e++]=z[X++]))}break}}break}}while(C<i&&e<s);C-=Y=r>>3,c&=(1<<(r-=Y<<3))-1,t.next_in=C,t.next_out=e,t.avail_in=C<i?i-C+5:5-(C-i),t.avail_out=e<s?s-e+257:257-(e-s),g.hold=c,g.bits=r},bm=function(t,I,g,C,i,e,A,s){var l,n,a,d,o,c,r,h,b,u=s.bits,m=0,Z=0,p=0,Y=0,R=0,X=0,H=0,S=0,z=0,v=0,K=null,V=0,N=new V_.Buf16(16),B=new V_.Buf16(16),G=null,w=0;for(m=0;m<=15;m++)N[m]=0;for(Z=0;Z<C;Z++)N[I[g+Z]]++;for(R=u,Y=15;Y>=1&&N[Y]===0;Y--);if(R>Y&&(R=Y),Y===0)return i[e++]=20971520,i[e++]=20971520,s.bits=1,0;for(p=1;p<Y&&N[p]===0;p++);for(R<p&&(R=p),S=1,m=1;m<=15;m++)if(S<<=1,(S-=N[m])<0)return-1;if(S>0&&(t===0||Y!==1))return-1;for(B[1]=0,m=1;m<15;m++)B[m+1]=B[m]+N[m];for(Z=0;Z<C;Z++)I[g+Z]!==0&&(A[B[I[g+Z]]++]=Z);if(t===0?(K=G=A,c=19):t===1?(K=Xhg,V-=257,G=Shg,w-=257,c=256):(K=Dhg,G=Khg,c=-1),v=0,Z=0,m=p,o=e,X=R,H=0,a=-1,d=(z=1<<R)-1,t===1&&z>852||t===2&&z>592)return 1;for(;;){r=m-H,A[Z]<c?(h=0,b=A[Z]):A[Z]>c?(h=G[w+A[Z]],b=K[V+A[Z]]):(h=96,b=0),l=1<<m-H,p=n=1<<X;do i[o+(v>>H)+(n-=l)]=r<<24|h<<16|b|0;while(n!==0);for(l=1<<m-1;v&l;)l>>=1;if(l!==0?(v&=l-1,v+=l):v=0,Z++,--N[m]==0){if(m===Y)break;m=I[g+A[Z]]}if(m>R&&(v&d)!==a){for(H===0&&(H=R),o+=p,S=1<<(X=m-H);X+H<Y&&!((S-=N[X+H])<=0);)X++,S<<=1;if(z+=1<<X,t===1&&z>852||t===2&&z>592)return 1;i[a=v&d]=R<<24|X<<16|o-e|0}}return v!==0&&(i[o+v]=m-H<<24|64<<16|0),s.bits=R,0};function M_(t){return(t>>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24)}function khg(){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 me.Buf16(320),this.work=new me.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function QCg(t){var I;return t&&t.state?(I=t.state,t.total_in=t.total_out=I.total=0,t.msg="",I.wrap&&(t.adler=1&I.wrap),I.mode=1,I.last=0,I.havedict=0,I.dmax=32768,I.head=null,I.hold=0,I.bits=0,I.lencode=I.lendyn=new me.Buf32(852),I.distcode=I.distdyn=new me.Buf32(592),I.sane=1,I.back=-1,0):-2}function OCg(t){var I;return t&&t.state?((I=t.state).wsize=0,I.whave=0,I.wnext=0,QCg(t)):-2}function UCg(t,I){var g,C;return t&&t.state?(C=t.state,I<0?(g=0,I=-I):(g=1+(I>>4),I<48&&(I&=15)),I&&(I<8||I>15)?-2:(C.window!==null&&C.wbits!==I&&(C.window=null),C.wrap=g,C.wbits=I,OCg(t))):-2}function R_(t,I){var g,C;return t?(C=new khg,t.state=C,C.window=null,(g=UCg(t,I))!==0&&(t.state=null),g):-2}var cX,dX,f_=!0;function zhg(t){if(f_){var I;for(cX=new me.Buf32(512),dX=new me.Buf32(32),I=0;I<144;)t.lens[I++]=8;for(;I<256;)t.lens[I++]=9;for(;I<280;)t.lens[I++]=7;for(;I<288;)t.lens[I++]=8;for(bm(1,t.lens,0,288,cX,0,t.work,{bits:9}),I=0;I<32;)t.lens[I++]=5;bm(2,t.lens,0,32,dX,0,t.work,{bits:5}),f_=!1}t.lencode=cX,t.lenbits=9,t.distcode=dX,t.distbits=5}function H_(t,I,g,C){var i,e=t.state;return e.window===null&&(e.wsize=1<<e.wbits,e.wnext=0,e.whave=0,e.window=new me.Buf8(e.wsize)),C>=e.wsize?(me.arraySet(e.window,I,g-e.wsize,e.wsize,0),e.wnext=0,e.whave=e.wsize):((i=e.wsize-e.wnext)>C&&(i=C),me.arraySet(e.window,I,g-C,i,e.wnext),(C-=i)?(me.arraySet(e.window,I,g-C,C,0),e.wnext=C,e.whave=e.wsize):(e.wnext+=i,e.wnext===e.wsize&&(e.wnext=0),e.whave<e.wsize&&(e.whave+=i))),0}sA.inflateReset=OCg,sA.inflateReset2=UCg,sA.inflateResetKeep=QCg,sA.inflateInit=function(t){return R_(t,15)},sA.inflateInit2=R_,sA.inflate=function(t,I){var g,C,i,e,A,s,l,n,a,d,o,c,r,h,b,u,m,Z,p,Y,R,X,H,S,z=0,v=new me.Buf8(4),K=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!t||!t.state||!t.output||!t.input&&t.avail_in!==0)return-2;(g=t.state).mode===12&&(g.mode=13),A=t.next_out,i=t.output,l=t.avail_out,e=t.next_in,C=t.input,s=t.avail_in,n=g.hold,a=g.bits,d=s,o=l,X=0;g:for(;;)switch(g.mode){case 1:if(g.wrap===0){g.mode=13;break}for(;a<16;){if(s===0)break g;s--,n+=C[e++]<<a,a+=8}if(2&g.wrap&&n===35615){g.check=0,v[0]=255&n,v[1]=n>>>8&255,g.check=gs(g.check,v,2,0),n=0,a=0,g.mode=2;break}if(g.flags=0,g.head&&(g.head.done=!1),!(1&g.wrap)||(((255&n)<<8)+(n>>8))%31){t.msg="incorrect header check",g.mode=30;break}if((15&n)!=8){t.msg="unknown compression method",g.mode=30;break}if(a-=4,R=8+(15&(n>>>=4)),g.wbits===0)g.wbits=R;else if(R>g.wbits){t.msg="invalid window size",g.mode=30;break}g.dmax=1<<R,t.adler=g.check=1,g.mode=512&n?10:12,n=0,a=0;break;case 2:for(;a<16;){if(s===0)break g;s--,n+=C[e++]<<a,a+=8}if(g.flags=n,(255&g.flags)!=8){t.msg="unknown compression method",g.mode=30;break}if(57344&g.flags){t.msg="unknown header flags set",g.mode=30;break}g.head&&(g.head.text=n>>8&1),512&g.flags&&(v[0]=255&n,v[1]=n>>>8&255,g.check=gs(g.check,v,2,0)),n=0,a=0,g.mode=3;case 3:for(;a<32;){if(s===0)break g;s--,n+=C[e++]<<a,a+=8}g.head&&(g.head.time=n),512&g.flags&&(v[0]=255&n,v[1]=n>>>8&255,v[2]=n>>>16&255,v[3]=n>>>24&255,g.check=gs(g.check,v,4,0)),n=0,a=0,g.mode=4;case 4:for(;a<16;){if(s===0)break g;s--,n+=C[e++]<<a,a+=8}g.head&&(g.head.xflags=255&n,g.head.os=n>>8),512&g.flags&&(v[0]=255&n,v[1]=n>>>8&255,g.check=gs(g.check,v,2,0)),n=0,a=0,g.mode=5;case 5:if(1024&g.flags){for(;a<16;){if(s===0)break g;s--,n+=C[e++]<<a,a+=8}g.length=n,g.head&&(g.head.extra_len=n),512&g.flags&&(v[0]=255&n,v[1]=n>>>8&255,g.check=gs(g.check,v,2,0)),n=0,a=0}else g.head&&(g.head.extra=null);g.mode=6;case 6:if(1024&g.flags&&((c=g.length)>s&&(c=s),c&&(g.head&&(R=g.head.extra_len-g.length,g.head.extra||(g.head.extra=new Array(g.head.extra_len)),me.arraySet(g.head.extra,C,e,c,R)),512&g.flags&&(g.check=gs(g.check,C,c,e)),s-=c,e+=c,g.length-=c),g.length))break g;g.length=0,g.mode=7;case 7:if(2048&g.flags){if(s===0)break g;c=0;do R=C[e+c++],g.head&&R&&g.length<65536&&(g.head.name+=String.fromCharCode(R));while(R&&c<s);if(512&g.flags&&(g.check=gs(g.check,C,c,e)),s-=c,e+=c,R)break g}else g.head&&(g.head.name=null);g.length=0,g.mode=8;case 8:if(4096&g.flags){if(s===0)break g;c=0;do R=C[e+c++],g.head&&R&&g.length<65536&&(g.head.comment+=String.fromCharCode(R));while(R&&c<s);if(512&g.flags&&(g.check=gs(g.check,C,c,e)),s-=c,e+=c,R)break g}else g.head&&(g.head.comment=null);g.mode=9;case 9:if(512&g.flags){for(;a<16;){if(s===0)break g;s--,n+=C[e++]<<a,a+=8}if(n!==(65535&g.check)){t.msg="header crc mismatch",g.mode=30;break}n=0,a=0}g.head&&(g.head.hcrc=g.flags>>9&1,g.head.done=!0),t.adler=g.check=0,g.mode=12;break;case 10:for(;a<32;){if(s===0)break g;s--,n+=C[e++]<<a,a+=8}t.adler=g.check=M_(n),n=0,a=0,g.mode=11;case 11:if(g.havedict===0)return t.next_out=A,t.avail_out=l,t.next_in=e,t.avail_in=s,g.hold=n,g.bits=a,2;t.adler=g.check=1,g.mode=12;case 12:if(I===5||I===6)break g;case 13:if(g.last){n>>>=7&a,a-=7&a,g.mode=27;break}for(;a<3;){if(s===0)break g;s--,n+=C[e++]<<a,a+=8}switch(g.last=1&n,a-=1,3&(n>>>=1)){case 0:g.mode=14;break;case 1:if(zhg(g),g.mode=20,I===6){n>>>=2,a-=2;break g}break;case 2:g.mode=17;break;case 3:t.msg="invalid block type",g.mode=30}n>>>=2,a-=2;break;case 14:for(n>>>=7&a,a-=7&a;a<32;){if(s===0)break g;s--,n+=C[e++]<<a,a+=8}if((65535&n)!=(n>>>16^65535)){t.msg="invalid stored block lengths",g.mode=30;break}if(g.length=65535&n,n=0,a=0,g.mode=15,I===6)break g;case 15:g.mode=16;case 16:if(c=g.length){if(c>s&&(c=s),c>l&&(c=l),c===0)break g;me.arraySet(i,C,e,c,A),s-=c,e+=c,l-=c,A+=c,g.length-=c;break}g.mode=12;break;case 17:for(;a<14;){if(s===0)break g;s--,n+=C[e++]<<a,a+=8}if(g.nlen=257+(31&n),n>>>=5,a-=5,g.ndist=1+(31&n),n>>>=5,a-=5,g.ncode=4+(15&n),n>>>=4,a-=4,g.nlen>286||g.ndist>30){t.msg="too many length or distance symbols",g.mode=30;break}g.have=0,g.mode=18;case 18:for(;g.have<g.ncode;){for(;a<3;){if(s===0)break g;s--,n+=C[e++]<<a,a+=8}g.lens[K[g.have++]]=7&n,n>>>=3,a-=3}for(;g.have<19;)g.lens[K[g.have++]]=0;if(g.lencode=g.lendyn,g.lenbits=7,H={bits:g.lenbits},X=bm(0,g.lens,0,19,g.lencode,0,g.work,H),g.lenbits=H.bits,X){t.msg="invalid code lengths set",g.mode=30;break}g.have=0,g.mode=19;case 19:for(;g.have<g.nlen+g.ndist;){for(;u=(z=g.lencode[n&(1<<g.lenbits)-1])>>>16&255,m=65535&z,!((b=z>>>24)<=a);){if(s===0)break g;s--,n+=C[e++]<<a,a+=8}if(m<16)n>>>=b,a-=b,g.lens[g.have++]=m;else{if(m===16){for(S=b+2;a<S;){if(s===0)break g;s--,n+=C[e++]<<a,a+=8}if(n>>>=b,a-=b,g.have===0){t.msg="invalid bit length repeat",g.mode=30;break}R=g.lens[g.have-1],c=3+(3&n),n>>>=2,a-=2}else if(m===17){for(S=b+3;a<S;){if(s===0)break g;s--,n+=C[e++]<<a,a+=8}a-=b,R=0,c=3+(7&(n>>>=b)),n>>>=3,a-=3}else{for(S=b+7;a<S;){if(s===0)break g;s--,n+=C[e++]<<a,a+=8}a-=b,R=0,c=11+(127&(n>>>=b)),n>>>=7,a-=7}if(g.have+c>g.nlen+g.ndist){t.msg="invalid bit length repeat",g.mode=30;break}for(;c--;)g.lens[g.have++]=R}}if(g.mode===30)break;if(g.lens[256]===0){t.msg="invalid code -- missing end-of-block",g.mode=30;break}if(g.lenbits=9,H={bits:g.lenbits},X=bm(1,g.lens,0,g.nlen,g.lencode,0,g.work,H),g.lenbits=H.bits,X){t.msg="invalid literal/lengths set",g.mode=30;break}if(g.distbits=6,g.distcode=g.distdyn,H={bits:g.distbits},X=bm(2,g.lens,g.nlen,g.ndist,g.distcode,0,g.work,H),g.distbits=H.bits,X){t.msg="invalid distances set",g.mode=30;break}if(g.mode=20,I===6)break g;case 20:g.mode=21;case 21:if(s>=6&&l>=258){t.next_out=A,t.avail_out=l,t.next_in=e,t.avail_in=s,g.hold=n,g.bits=a,Fhg(t,o),A=t.next_out,i=t.output,l=t.avail_out,e=t.next_in,C=t.input,s=t.avail_in,n=g.hold,a=g.bits,g.mode===12&&(g.back=-1);break}for(g.back=0;u=(z=g.lencode[n&(1<<g.lenbits)-1])>>>16&255,m=65535&z,!((b=z>>>24)<=a);){if(s===0)break g;s--,n+=C[e++]<<a,a+=8}if(u&&(240&u)==0){for(Z=b,p=u,Y=m;u=(z=g.lencode[Y+((n&(1<<Z+p)-1)>>Z)])>>>16&255,m=65535&z,!(Z+(b=z>>>24)<=a);){if(s===0)break g;s--,n+=C[e++]<<a,a+=8}n>>>=Z,a-=Z,g.back+=Z}if(n>>>=b,a-=b,g.back+=b,g.length=m,u===0){g.mode=26;break}if(32&u){g.back=-1,g.mode=12;break}if(64&u){t.msg="invalid literal/length code",g.mode=30;break}g.extra=15&u,g.mode=22;case 22:if(g.extra){for(S=g.extra;a<S;){if(s===0)break g;s--,n+=C[e++]<<a,a+=8}g.length+=n&(1<<g.extra)-1,n>>>=g.extra,a-=g.extra,g.back+=g.extra}g.was=g.length,g.mode=23;case 23:for(;u=(z=g.distcode[n&(1<<g.distbits)-1])>>>16&255,m=65535&z,!((b=z>>>24)<=a);){if(s===0)break g;s--,n+=C[e++]<<a,a+=8}if((240&u)==0){for(Z=b,p=u,Y=m;u=(z=g.distcode[Y+((n&(1<<Z+p)-1)>>Z)])>>>16&255,m=65535&z,!(Z+(b=z>>>24)<=a);){if(s===0)break g;s--,n+=C[e++]<<a,a+=8}n>>>=Z,a-=Z,g.back+=Z}if(n>>>=b,a-=b,g.back+=b,64&u){t.msg="invalid distance code",g.mode=30;break}g.offset=m,g.extra=15&u,g.mode=24;case 24:if(g.extra){for(S=g.extra;a<S;){if(s===0)break g;s--,n+=C[e++]<<a,a+=8}g.offset+=n&(1<<g.extra)-1,n>>>=g.extra,a-=g.extra,g.back+=g.extra}if(g.offset>g.dmax){t.msg="invalid distance too far back",g.mode=30;break}g.mode=25;case 25:if(l===0)break g;if(c=o-l,g.offset>c){if((c=g.offset-c)>g.whave&&g.sane){t.msg="invalid distance too far back",g.mode=30;break}c>g.wnext?(c-=g.wnext,r=g.wsize-c):r=g.wnext-c,c>g.length&&(c=g.length),h=g.window}else h=i,r=A-g.offset,c=g.length;c>l&&(c=l),l-=c,g.length-=c;do i[A++]=h[r++];while(--c);g.length===0&&(g.mode=21);break;case 26:if(l===0)break g;i[A++]=g.length,l--,g.mode=21;break;case 27:if(g.wrap){for(;a<32;){if(s===0)break g;s--,n|=C[e++]<<a,a+=8}if(o-=l,t.total_out+=o,g.total+=o,o&&(t.adler=g.check=g.flags?gs(g.check,i,o,A-o):oX(g.check,i,o,A-o)),o=l,(g.flags?n:M_(n))!==g.check){t.msg="incorrect data check",g.mode=30;break}n=0,a=0}g.mode=28;case 28:if(g.wrap&&g.flags){for(;a<32;){if(s===0)break g;s--,n+=C[e++]<<a,a+=8}if(n!==(4294967295&g.total)){t.msg="incorrect length check",g.mode=30;break}n=0,a=0}g.mode=29;case 29:X=1;break g;case 30:X=-3;break g;case 31:return-4;default:return-2}return t.next_out=A,t.avail_out=l,t.next_in=e,t.avail_in=s,g.hold=n,g.bits=a,(g.wsize||o!==t.avail_out&&g.mode<30&&(g.mode<27||I!==4))&&H_(t,t.output,t.next_out,o-t.avail_out),d-=t.avail_in,o-=t.avail_out,t.total_in+=d,t.total_out+=o,g.total+=o,g.wrap&&o&&(t.adler=g.check=g.flags?gs(g.check,i,o,t.next_out-o):oX(g.check,i,o,t.next_out-o)),t.data_type=g.bits+(g.last?64:0)+(g.mode===12?128:0)+(g.mode===20||g.mode===15?256:0),(d===0&&o===0||I===4)&&X===0&&(X=-5),X},sA.inflateEnd=function(t){if(!t||!t.state)return-2;var I=t.state;return I.window&&(I.window=null),t.state=null,0},sA.inflateGetHeader=function(t,I){var g;return t&&t.state?(2&(g=t.state).wrap)==0?-2:(g.head=I,I.done=!1,0):-2},sA.inflateSetDictionary=function(t,I){var g,C=I.length;return t&&t.state?(g=t.state).wrap!==0&&g.mode!==11?-2:g.mode===11&&oX(1,I,C,0)!==g.check?-3:H_(t,I,C,C)?(g.mode=31,-4):(g.havedict=1,0):-2},sA.inflateInfo="pako inflate (from Nodeca project)";var ECg={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},Ah=sA,gm=Ol,XN=ko,$C=ECg,AD=V9,Jhg=xCg,Lhg=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},PCg=Object.prototype.toString;function jo(t){if(!(this instanceof jo))return new jo(t);this.options=gm.assign({chunkSize:16384,windowBits:0,to:""},t||{});var I=this.options;I.raw&&I.windowBits>=0&&I.windowBits<16&&(I.windowBits=-I.windowBits,I.windowBits===0&&(I.windowBits=-15)),!(I.windowBits>=0&&I.windowBits<16)||t&&t.windowBits||(I.windowBits+=32),I.windowBits>15&&I.windowBits<48&&(15&I.windowBits)==0&&(I.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Jhg,this.strm.avail_out=0;var g=Ah.inflateInit2(this.strm,I.windowBits);if(g!==$C.Z_OK)throw new Error(AD[g]);if(this.header=new Lhg,Ah.inflateGetHeader(this.strm,this.header),I.dictionary&&(typeof I.dictionary=="string"?I.dictionary=XN.string2buf(I.dictionary):PCg.call(I.dictionary)==="[object ArrayBuffer]"&&(I.dictionary=new Uint8Array(I.dictionary)),I.raw&&(g=Ah.inflateSetDictionary(this.strm,I.dictionary))!==$C.Z_OK))throw new Error(AD[g])}function rX(t,I){var g=new jo(I);if(g.push(t,!0),g.err)throw g.msg||AD[g.err];return g.result}jo.prototype.push=function(t,I){var g,C,i,e,A,s=this.strm,l=this.options.chunkSize,n=this.options.dictionary,a=!1;if(this.ended)return!1;C=I===~~I?I:I===!0?$C.Z_FINISH:$C.Z_NO_FLUSH,typeof t=="string"?s.input=XN.binstring2buf(t):PCg.call(t)==="[object ArrayBuffer]"?s.input=new Uint8Array(t):s.input=t,s.next_in=0,s.avail_in=s.input.length;do{if(s.avail_out===0&&(s.output=new gm.Buf8(l),s.next_out=0,s.avail_out=l),(g=Ah.inflate(s,$C.Z_NO_FLUSH))===$C.Z_NEED_DICT&&n&&(g=Ah.inflateSetDictionary(this.strm,n)),g===$C.Z_BUF_ERROR&&a===!0&&(g=$C.Z_OK,a=!1),g!==$C.Z_STREAM_END&&g!==$C.Z_OK)return this.onEnd(g),this.ended=!0,!1;s.next_out&&(s.avail_out!==0&&g!==$C.Z_STREAM_END&&(s.avail_in!==0||C!==$C.Z_FINISH&&C!==$C.Z_SYNC_FLUSH)||(this.options.to==="string"?(i=XN.utf8border(s.output,s.next_out),e=s.next_out-i,A=XN.buf2string(s.output,i),s.next_out=e,s.avail_out=l-e,e&&gm.arraySet(s.output,s.output,i,e,0),this.onData(A)):this.onData(gm.shrinkBuf(s.output,s.next_out)))),s.avail_in===0&&s.avail_out===0&&(a=!0)}while((s.avail_in>0||s.avail_out===0)&&g!==$C.Z_STREAM_END);return g===$C.Z_STREAM_END&&(C=$C.Z_FINISH),C===$C.Z_FINISH?(g=Ah.inflateEnd(this.strm),this.onEnd(g),this.ended=!0,g===$C.Z_OK):C!==$C.Z_SYNC_FLUSH||(this.onEnd($C.Z_OK),s.avail_out=0,!0)},jo.prototype.onData=function(t){this.chunks.push(t)},jo.prototype.onEnd=function(t){t===$C.Z_OK&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=gm.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},$u.Inflate=jo,$u.inflate=rX,$u.inflateRaw=function(t,I){return(I=I||{}).raw=!0,rX(t,I)},$u.ungzip=rX;var _Cg={};(0,Ol.assign)(_Cg,Eu,$u,ECg);var vhg=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Uint32Array<"u",Thg=_Cg,X_=PC(),SN=Pe,xhg=vhg?"uint8array":"array";function Ho(t,I){SN.call(this,"FlateWorker/"+t),this._pako=null,this._pakoAction=t,this._pakoOptions=I,this.meta={}}fN.magic="\b\0",X_.inherits(Ho,SN),Ho.prototype.processChunk=function(t){this.meta=t.meta,this._pako===null&&this._createPako(),this._pako.push(X_.transformTo(xhg,t.data),!1)},Ho.prototype.flush=function(){SN.prototype.flush.call(this),this._pako===null&&this._createPako(),this._pako.push([],!0)},Ho.prototype.cleanUp=function(){SN.prototype.cleanUp.call(this),this._pako=null},Ho.prototype._createPako=function(){this._pako=new Thg[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(I){t.push({data:I,meta:t.meta})}},fN.compressWorker=function(t){return new Ho("Deflate",t)},fN.uncompressWorker=function(){return new Ho("Inflate",{})};var S_=Pe;CV.STORE={magic:"\0\0",compressWorker:function(){return new S_("STORE compression")},uncompressWorker:function(){return new S_("STORE decompression")}},CV.DEFLATE=fN;var qCg={LOCAL_FILE_HEADER:"PK",CENTRAL_FILE_HEADER:"PK",CENTRAL_DIRECTORY_END:"PK",ZIP64_CENTRAL_DIRECTORY_LOCATOR:"PK\x07",ZIP64_CENTRAL_DIRECTORY_END:"PK",DATA_DESCRIPTOR:"PK\x07\b"},_r=PC(),Qr=Pe,hX=Z0,D_=W9,eV=qCg,WC=function(t,I){var g,C="";for(g=0;g<I;g++)C+=String.fromCharCode(255&t),t>>>=8;return C},K_=function(t,I,g,C,i,e){var A,s,l=t.file,n=t.compression,a=e!==hX.utf8encode,d=_r.transformTo("string",e(l.name)),o=_r.transformTo("string",hX.utf8encode(l.name)),c=l.comment,r=_r.transformTo("string",e(c)),h=_r.transformTo("string",hX.utf8encode(c)),b=o.length!==l.name.length,u=h.length!==c.length,m="",Z="",p="",Y=l.dir,R=l.date,X={crc32:0,compressedSize:0,uncompressedSize:0};I&&!g||(X.crc32=t.crc32,X.compressedSize=t.compressedSize,X.uncompressedSize=t.uncompressedSize);var H=0;I&&(H|=8),a||!b&&!u||(H|=2048);var S,z,v,K=0,V=0;Y&&(K|=16),i==="UNIX"?(V=798,K|=(S=l.unixPermissions,z=Y,v=S,S||(v=z?16893:33204),(65535&v)<<16)):(V=20,K|=63&(l.dosPermissions||0)),A=R.getUTCHours(),A<<=6,A|=R.getUTCMinutes(),A<<=5,A|=R.getUTCSeconds()/2,s=R.getUTCFullYear()-1980,s<<=4,s|=R.getUTCMonth()+1,s<<=5,s|=R.getUTCDate(),b&&(Z=WC(1,1)+WC(D_(d),4)+o,m+="up"+WC(Z.length,2)+Z),u&&(p=WC(1,1)+WC(D_(r),4)+h,m+="uc"+WC(p.length,2)+p);var N="";return N+=`
- \0`,N+=WC(H,2),N+=n.magic,N+=WC(A,2),N+=WC(s,2),N+=WC(X.crc32,4),N+=WC(X.compressedSize,4),N+=WC(X.uncompressedSize,4),N+=WC(d.length,2),N+=WC(m.length,2),{fileRecord:eV.LOCAL_FILE_HEADER+N+d+m,dirRecord:eV.CENTRAL_FILE_HEADER+WC(V,2)+N+WC(r.length,2)+"\0\0\0\0"+WC(K,4)+WC(C,4)+d+m+r}},jhg=function(t){return eV.DATA_DESCRIPTOR+WC(t.crc32,4)+WC(t.compressedSize,4)+WC(t.uncompressedSize,4)};function lA(t,I,g,C){Qr.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=I,this.zipPlatform=g,this.encodeFileName=C,this.streamFiles=t,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}_r.inherits(lA,Qr),lA.prototype.push=function(t){var I=t.meta.percent||0,g=this.entriesCount,C=this._sources.length;this.accumulate?this.contentBuffer.push(t):(this.bytesWritten+=t.data.length,Qr.prototype.push.call(this,{data:t.data,meta:{currentFile:this.currentFile,percent:g?(I+100*(g-C-1))/g:100}}))},lA.prototype.openedSource=function(t){this.currentSourceOffset=this.bytesWritten,this.currentFile=t.file.name;var I=this.streamFiles&&!t.file.dir;if(I){var g=K_(t,I,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:g.fileRecord,meta:{percent:0}})}else this.accumulate=!0},lA.prototype.closedSource=function(t){this.accumulate=!1;var I=this.streamFiles&&!t.file.dir,g=K_(t,I,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(g.dirRecord),I)this.push({data:jhg(t),meta:{percent:100}});else for(this.push({data:g.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},lA.prototype.flush=function(){for(var t=this.bytesWritten,I=0;I<this.dirRecords.length;I++)this.push({data:this.dirRecords[I],meta:{percent:100}});var g=this.bytesWritten-t,C=function(i,e,A,s,l){var n=_r.transformTo("string",l(s));return eV.CENTRAL_DIRECTORY_END+"\0\0\0\0"+WC(i,2)+WC(i,2)+WC(e,4)+WC(A,4)+WC(n.length,2)+n}(this.dirRecords.length,g,t,this.zipComment,this.encodeFileName);this.push({data:C,meta:{percent:100}})},lA.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},lA.prototype.registerPrevious=function(t){this._sources.push(t);var I=this;return t.on("data",function(g){I.processChunk(g)}),t.on("end",function(){I.closedSource(I.previous.streamInfo),I._sources.length?I.prepareNextSource():I.end()}),t.on("error",function(g){I.error(g)}),this},lA.prototype.resume=function(){return!!Qr.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},lA.prototype.error=function(t){var I=this._sources;if(!Qr.prototype.error.call(this,t))return!1;for(var g=0;g<I.length;g++)try{I[g].error(t)}catch{}return!0},lA.prototype.lock=function(){Qr.prototype.lock.call(this);for(var t=this._sources,I=0;I<t.length;I++)t[I].lock()};var Qhg=CV,Ohg=lA;fCg.generateWorker=function(t,I,g){var C=new Ohg(I.streamFiles,g,I.platform,I.encodeFileName),i=0;try{t.forEach(function(e,A){i++;var s=function(d,o){var c=d||o,r=Qhg[c];if(!r)throw new Error(c+" is not a valid compression method !");return r}(A.options.compression,I.compression),l=A.options.compressionOptions||I.compressionOptions||{},n=A.dir,a=A.date;A._compressWorker(s,l).withStreamInfo("file",{name:e,dir:n,date:a,comment:A.comment||"",unixPermissions:A.unixPermissions,dosPermissions:A.dosPermissions}).pipe(C)}),C.entriesCount=i}catch(e){C.error(e)}return C};var Uhg=PC(),DN=Pe;function Im(t,I){DN.call(this,"Nodejs stream input adapter for "+t),this._upstreamEnded=!1,this._bindStream(I)}Uhg.inherits(Im,DN),Im.prototype._bindStream=function(t){var I=this;this._stream=t,t.pause(),t.on("data",function(g){I.push({data:g,meta:{percent:0}})}).on("error",function(g){I.isPaused?this.generatedError=g:I.error(g)}).on("end",function(){I.isPaused?I._upstreamEnded=!0:I.end()})},Im.prototype.pause=function(){return!!DN.prototype.pause.call(this)&&(this._stream.pause(),!0)},Im.prototype.resume=function(){return!!DN.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)};var Ehg=Im,Phg=Z0,um=PC(),$Cg=Pe,_hg=YCg,gtg=NCg,F_=y9,qhg=Yhg,$hg=fCg,k_=_V,g0g=Ehg,Itg=function(t,I,g){var C,i=um.getTypeOf(I),e=um.extend(g||{},gtg);e.date=e.date||new Date,e.compression!==null&&(e.compression=e.compression.toUpperCase()),typeof e.unixPermissions=="string"&&(e.unixPermissions=parseInt(e.unixPermissions,8)),e.unixPermissions&&16384&e.unixPermissions&&(e.dir=!0),e.dosPermissions&&16&e.dosPermissions&&(e.dir=!0),e.dir&&(t=Ctg(t)),e.createFolders&&(C=I0g(t))&&ttg.call(this,C,!0);var A=i==="string"&&e.binary===!1&&e.base64===!1;g&&g.binary!==void 0||(e.binary=!A),(I instanceof F_&&I.uncompressedSize===0||e.dir||!I||I.length===0)&&(e.base64=!1,e.binary=!0,I="",e.compression="STORE",i="string");var s=null;s=I instanceof F_||I instanceof $Cg?I:k_.isNode&&k_.isStream(I)?new g0g(t,I):um.prepareContent(t,I,e.binary,e.optimizedBinaryString,e.base64);var l=new qhg(t,s,e);this.files[t]=l},I0g=function(t){t.slice(-1)==="/"&&(t=t.substring(0,t.length-1));var I=t.lastIndexOf("/");return I>0?t.substring(0,I):""},Ctg=function(t){return t.slice(-1)!=="/"&&(t+="/"),t},ttg=function(t,I){return I=I!==void 0?I:gtg.createFolders,t=Ctg(t),this.files[t]||Itg.call(this,t,null,{dir:!0,createFolders:I}),this.files[t]};function z_(t){return Object.prototype.toString.call(t)==="[object RegExp]"}var C0g={load:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},forEach:function(t){var I,g,C;for(I in this.files)C=this.files[I],(g=I.slice(this.root.length,I.length))&&I.slice(0,this.root.length)===this.root&&t(g,C)},filter:function(t){var I=[];return this.forEach(function(g,C){t(g,C)&&I.push(C)}),I},file:function(t,I,g){if(arguments.length===1){if(z_(t)){var C=t;return this.filter(function(e,A){return!A.dir&&C.test(e)})}var i=this.files[this.root+t];return i&&!i.dir?i:null}return t=this.root+t,Itg.call(this,t,I,g),this},folder:function(t){if(!t)return this;if(z_(t))return this.filter(function(i,e){return e.dir&&t.test(i)});var I=this.root+t,g=ttg.call(this,I),C=this.clone();return C.root=g.name,C},remove:function(t){t=this.root+t;var I=this.files[t];if(I||(t.slice(-1)!=="/"&&(t+="/"),I=this.files[t]),I&&!I.dir)delete this.files[t];else for(var g=this.filter(function(i,e){return e.name.slice(0,t.length)===t}),C=0;C<g.length;C++)delete this.files[g[C].name];return this},generate:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},generateInternalStream:function(t){var I,g={};try{if((g=um.extend(t||{},{streamFiles:!1,compression:"STORE",compressionOptions:null,type:"",platform:"DOS",comment:null,mimeType:"application/zip",encodeFileName:Phg.utf8encode})).type=g.type.toLowerCase(),g.compression=g.compression.toUpperCase(),g.type==="binarystring"&&(g.type="string"),!g.type)throw new Error("No output type specified.");um.checkSupport(g.type),g.platform!=="darwin"&&g.platform!=="freebsd"&&g.platform!=="linux"&&g.platform!=="sunos"||(g.platform="UNIX"),g.platform==="win32"&&(g.platform="DOS");var C=g.comment||this.comment||"";I=$hg.generateWorker(this,g,C)}catch(i){(I=new $Cg("error")).error(i)}return new _hg(I,g.type||"string",g.mimeType)},generateAsync:function(t,I){return this.generateInternalStream(t).accumulate(I)},generateNodeStream:function(t,I){return(t=t||{}).type||(t.type="nodebuffer"),this.generateInternalStream(t).toNodejsStream(I)}},t0g=C0g,i0g=PC();function itg(t){this.data=t,this.length=t.length,this.index=0,this.zero=0}itg.prototype={checkOffset:function(t){this.checkIndex(this.index+t)},checkIndex:function(t){if(this.length<this.zero+t||t<0)throw new Error("End of data reached (data length = "+this.length+", asked index = "+t+"). Corrupted zip ?")},setIndex:function(t){this.checkIndex(t),this.index=t},skip:function(t){this.setIndex(this.index+t)},byteAt:function(){},readInt:function(t){var I,g=0;for(this.checkOffset(t),I=this.index+t-1;I>=this.index;I--)g=(g<<8)+this.byteAt(I);return this.index+=t,g},readString:function(t){return i0g.transformTo("string",this.readData(t))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var t=this.readInt(4);return new Date(Date.UTC(1980+(t>>25&127),(t>>21&15)-1,t>>16&31,t>>11&31,t>>5&63,(31&t)<<1))}};var etg=itg,Atg=etg;function Or(t){Atg.call(this,t);for(var I=0;I<this.data.length;I++)t[I]=255&t[I]}PC().inherits(Or,Atg),Or.prototype.byteAt=function(t){return this.data[this.zero+t]},Or.prototype.lastIndexOfSignature=function(t){for(var I=t.charCodeAt(0),g=t.charCodeAt(1),C=t.charCodeAt(2),i=t.charCodeAt(3),e=this.length-4;e>=0;--e)if(this.data[e]===I&&this.data[e+1]===g&&this.data[e+2]===C&&this.data[e+3]===i)return e-this.zero;return-1},Or.prototype.readAndCheckSignature=function(t){var I=t.charCodeAt(0),g=t.charCodeAt(1),C=t.charCodeAt(2),i=t.charCodeAt(3),e=this.readData(4);return I===e[0]&&g===e[1]&&C===e[2]&&i===e[3]},Or.prototype.readData=function(t){if(this.checkOffset(t),t===0)return[];var I=this.data.slice(this.zero+this.index,this.zero+this.index+t);return this.index+=t,I};var stg=Or,ltg=etg;function Ur(t){ltg.call(this,t)}PC().inherits(Ur,ltg),Ur.prototype.byteAt=function(t){return this.data.charCodeAt(this.zero+t)},Ur.prototype.lastIndexOfSignature=function(t){return this.data.lastIndexOf(t)-this.zero},Ur.prototype.readAndCheckSignature=function(t){return t===this.readData(4)},Ur.prototype.readData=function(t){this.checkOffset(t);var I=this.data.slice(this.zero+this.index,this.zero+this.index+t);return this.index+=t,I};var e0g=Ur,ntg=stg;function sD(t){ntg.call(this,t)}PC().inherits(sD,ntg),sD.prototype.readData=function(t){if(this.checkOffset(t),t===0)return new Uint8Array(0);var I=this.data.subarray(this.zero+this.index,this.zero+this.index+t);return this.index+=t,I};var atg=sD,otg=atg;function lD(t){otg.call(this,t)}PC().inherits(lD,otg),lD.prototype.readData=function(t){this.checkOffset(t);var I=this.data.slice(this.zero+this.index,this.zero+this.index+t);return this.index+=t,I};var A0g=lD,KY=PC(),J_=nt,s0g=stg,l0g=e0g,n0g=A0g,a0g=atg,ctg=function(t){var I=KY.getTypeOf(t);return KY.checkSupport(I),I!=="string"||J_.uint8array?I==="nodebuffer"?new n0g(t):J_.uint8array?new a0g(KY.transformTo("uint8array",t)):new s0g(KY.transformTo("array",t)):new l0g(t)},bX=ctg,Jn=PC(),o0g=y9,L_=W9,FY=Z0,kY=CV,c0g=nt;function dtg(t,I){this.options=t,this.loadOptions=I}dtg.prototype={isEncrypted:function(){return(1&this.bitFlag)==1},useUTF8:function(){return(2048&this.bitFlag)==2048},readLocalPart:function(t){var I,g;if(t.skip(22),this.fileNameLength=t.readInt(2),g=t.readInt(2),this.fileName=t.readData(this.fileNameLength),t.skip(g),this.compressedSize===-1||this.uncompressedSize===-1)throw new Error("Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)");if(I=function(C){for(var i in kY)if(Object.prototype.hasOwnProperty.call(kY,i)&&kY[i].magic===C)return kY[i];return null}(this.compressionMethod),I===null)throw new Error("Corrupted zip : compression "+Jn.pretty(this.compressionMethod)+" unknown (inner file : "+Jn.transformTo("string",this.fileName)+")");this.decompressed=new o0g(this.compressedSize,this.uncompressedSize,this.crc32,I,t.readData(this.compressedSize))},readCentralPart:function(t){this.versionMadeBy=t.readInt(2),t.skip(2),this.bitFlag=t.readInt(2),this.compressionMethod=t.readString(2),this.date=t.readDate(),this.crc32=t.readInt(4),this.compressedSize=t.readInt(4),this.uncompressedSize=t.readInt(4);var I=t.readInt(2);if(this.extraFieldsLength=t.readInt(2),this.fileCommentLength=t.readInt(2),this.diskNumberStart=t.readInt(2),this.internalFileAttributes=t.readInt(2),this.externalFileAttributes=t.readInt(4),this.localHeaderOffset=t.readInt(4),this.isEncrypted())throw new Error("Encrypted zip are not supported");t.skip(I),this.readExtraFields(t),this.parseZIP64ExtraField(t),this.fileComment=t.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var t=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),t===0&&(this.dosPermissions=63&this.externalFileAttributes),t===3&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||this.fileNameStr.slice(-1)!=="/"||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var t=bX(this.extraFields[1].value);this.uncompressedSize===Jn.MAX_VALUE_32BITS&&(this.uncompressedSize=t.readInt(8)),this.compressedSize===Jn.MAX_VALUE_32BITS&&(this.compressedSize=t.readInt(8)),this.localHeaderOffset===Jn.MAX_VALUE_32BITS&&(this.localHeaderOffset=t.readInt(8)),this.diskNumberStart===Jn.MAX_VALUE_32BITS&&(this.diskNumberStart=t.readInt(4))}},readExtraFields:function(t){var I,g,C,i=t.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});t.index+4<i;)I=t.readInt(2),g=t.readInt(2),C=t.readData(g),this.extraFields[I]={id:I,length:g,value:C};t.setIndex(i)},handleUTF8:function(){var t=c0g.uint8array?"uint8array":"array";if(this.useUTF8())this.fileNameStr=FY.utf8decode(this.fileName),this.fileCommentStr=FY.utf8decode(this.fileComment);else{var I=this.findExtraFieldUnicodePath();if(I!==null)this.fileNameStr=I;else{var g=Jn.transformTo(t,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(g)}var C=this.findExtraFieldUnicodeComment();if(C!==null)this.fileCommentStr=C;else{var i=Jn.transformTo(t,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(i)}}},findExtraFieldUnicodePath:function(){var t=this.extraFields[28789];if(t){var I=bX(t.value);return I.readInt(1)!==1||L_(this.fileName)!==I.readInt(4)?null:FY.utf8decode(I.readData(t.length-5))}return null},findExtraFieldUnicodeComment:function(){var t=this.extraFields[25461];if(t){var I=bX(t.value);return I.readInt(1)!==1||L_(this.fileComment)!==I.readInt(4)?null:FY.utf8decode(I.readData(t.length-5))}return null}};var d0g=dtg,r0g=ctg,gl=PC(),eA=qCg,h0g=d0g,b0g=nt;function rtg(t){this.files=[],this.loadOptions=t}rtg.prototype={checkSignature:function(t){if(!this.reader.readAndCheckSignature(t)){this.reader.index-=4;var I=this.reader.readString(4);throw new Error("Corrupted zip or bug: unexpected signature ("+gl.pretty(I)+", expected "+gl.pretty(t)+")")}},isSignature:function(t,I){var g=this.reader.index;this.reader.setIndex(t);var C=this.reader.readString(4)===I;return this.reader.setIndex(g),C},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 t=this.reader.readData(this.zipCommentLength),I=b0g.uint8array?"uint8array":"array",g=gl.transformTo(I,t);this.zipComment=this.loadOptions.decodeFileName(g)},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 t,I,g,C=this.zip64EndOfCentralSize-44;0<C;)t=this.reader.readInt(2),I=this.reader.readInt(4),g=this.reader.readData(I),this.zip64ExtensibleData[t]={id:t,length:I,value:g}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),this.disksCount>1)throw new Error("Multi-volumes zip are not supported")},readLocalFiles:function(){var t,I;for(t=0;t<this.files.length;t++)I=this.files[t],this.reader.setIndex(I.localHeaderOffset),this.checkSignature(eA.LOCAL_FILE_HEADER),I.readLocalPart(this.reader),I.handleUTF8(),I.processAttributes()},readCentralDir:function(){var t;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(eA.CENTRAL_FILE_HEADER);)(t=new h0g({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(t);if(this.centralDirRecords!==this.files.length&&this.centralDirRecords!==0&&this.files.length===0)throw new Error("Corrupted zip or bug: expected "+this.centralDirRecords+" records in central dir, got "+this.files.length)},readEndOfCentral:function(){var t=this.reader.lastIndexOfSignature(eA.CENTRAL_DIRECTORY_END);if(t<0)throw this.isSignature(0,eA.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(t);var I=t;if(this.checkSignature(eA.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===gl.MAX_VALUE_16BITS||this.diskWithCentralDirStart===gl.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===gl.MAX_VALUE_16BITS||this.centralDirRecords===gl.MAX_VALUE_16BITS||this.centralDirSize===gl.MAX_VALUE_32BITS||this.centralDirOffset===gl.MAX_VALUE_32BITS){if(this.zip64=!0,(t=this.reader.lastIndexOfSignature(eA.ZIP64_CENTRAL_DIRECTORY_LOCATOR))<0)throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator");if(this.reader.setIndex(t),this.checkSignature(eA.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,eA.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(eA.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(eA.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var g=this.centralDirOffset+this.centralDirSize;this.zip64&&(g+=20,g+=12+this.zip64EndOfCentralSize);var C=I-g;if(C>0)this.isSignature(I,eA.CENTRAL_FILE_HEADER)||(this.reader.zero=C);else if(C<0)throw new Error("Corrupted zip: missing "+Math.abs(C)+" bytes.")},prepareReader:function(t){this.reader=r0g(t)},load:function(t){this.prepareReader(t),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}};var u0g=rtg,uX=PC(),KN=eG,m0g=Z0,Z0g=u0g,G0g=RCg,v_=_V;function w0g(t){return new KN.Promise(function(I,g){var C=t.decompressed.getContentWorker().pipe(new G0g);C.on("error",function(i){g(i)}).on("end",function(){C.streamInfo.crc32!==t.decompressed.crc32?g(new Error("Corrupted zip : CRC32 mismatch")):I()}).resume()})}function xe(){if(!(this instanceof xe))return new xe;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 t=new xe;for(var I in this)typeof this[I]!="function"&&(t[I]=this[I]);return t}}xe.prototype=t0g,xe.prototype.loadAsync=function(t,I){var g=this;return I=uX.extend(I||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:m0g.utf8decode}),v_.isNode&&v_.isStream(t)?KN.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")):uX.prepareContent("the loaded zip file",t,!0,I.optimizedBinaryString,I.base64).then(function(C){var i=new Z0g(I);return i.load(C),i}).then(function(C){var i=[KN.Promise.resolve(C)],e=C.files;if(I.checkCRC32)for(var A=0;A<e.length;A++)i.push(w0g(e[A]));return KN.Promise.all(i)}).then(function(C){for(var i=C.shift(),e=i.files,A=0;A<e.length;A++){var s=e[A],l=s.fileNameStr,n=uX.resolve(s.fileNameStr);g.file(n,s.decompressed,{binary:!0,optimizedBinaryString:!0,date:s.date,dir:s.dir,comment:s.fileCommentStr.length?s.fileCommentStr:null,unixPermissions:s.unixPermissions,dosPermissions:s.dosPermissions,createFolders:I.createFolders}),s.dir||(g.file(n).unsafeOriginalName=l)}return i.zipComment.length&&(g.comment=i.zipComment),g})},xe.support=nt,xe.defaults=NCg,xe.version="3.10.1",xe.loadAsync=function(t,I){return new xe().loadAsync(t,I)},xe.external=eG;var p0g=xe;function B0g(t,I){var g=(I=I||{}).pos||0,C=!!I.keepComments,i=!!I.keepWhitespace,e=60,A=62,s=45,l=47,n=33,a=39,d=34,o=91,c=93;function r(R){for(var X=[];t[g];)if(t.charCodeAt(g)==e){if(t.charCodeAt(g+1)===l){var H=g+2;if(g=t.indexOf(">",g),t.substring(H,g).indexOf(R)==-1){var S=t.substring(0,g).split(`
- `);throw new Error(`Unexpected close tag
- Line: `+(S.length-1)+`
- Column: `+(S[S.length-1].length+1)+`
- Char: `+t[g])}return g+1&&(g+=1),X}if(t.charCodeAt(g+1)===n){if(t.charCodeAt(g+2)==s){const B=g;for(;g!==-1&&(t.charCodeAt(g)!==A||t.charCodeAt(g-1)!=s||t.charCodeAt(g-2)!=s||g==-1);)g=t.indexOf(">",g+1);g===-1&&(g=t.length),C&&X.push(t.substring(B,g+1))}else{if(t.charCodeAt(g+2)===o&&t.charCodeAt(g+8)===o&&t.substr(g+3,5).toLowerCase()==="cdata"){var z=t.indexOf("]]>",g);z==-1?(X.push(t.substr(g+9)),g=t.length):(X.push(t.substring(g+9,z)),g=z+3);continue}{const B=g+1;g+=2;for(var v=!1;(t.charCodeAt(g)!==A||v===!0)&&t[g];)t.charCodeAt(g)===o?v=!0:v===!0&&t.charCodeAt(g)===c&&(v=!1),g++;X.push(t.substring(B,g))}}g++;continue}var K=m();X.push(K),K.tagName[0]==="?"&&(X.push(...K.children),K.children=[])}else{var V=h();if(i)V.length>0&&X.push(V);else{var N=V.trim();N.length>0&&X.push(N)}g++}return X}function h(){var R=g;return(g=t.indexOf("<",g)-1)===-2&&(g=t.length),t.slice(R,g+1)}function b(){for(var R=g;`\r
- >/= `.indexOf(t[g])===-1&&t[g];)g++;return t.slice(R,g)}var u=I.noChildNodes||["img","br","input","meta","link","hr"];function m(){g++;const R=b(),X={};let H=[];for(;t.charCodeAt(g)!==A&&t[g];){var S=t.charCodeAt(g);if(S>64&&S<91||S>96&&S<123){for(var z=b(),v=t.charCodeAt(g);v&&v!==a&&v!==d&&!(v>64&&v<91||v>96&&v<123)&&v!==A;)g++,v=t.charCodeAt(g);if(v===a||v===d){var K=Z();if(g===-1)return{tagName:R,attributes:X,children:H}}else K=null,g--;X[z]=K}g++}if(t.charCodeAt(g-1)!==l)if(R=="script"){var V=g+1;g=t.indexOf("<\/script>",g),H=[t.slice(V,g)],g+=9}else R=="style"?(V=g+1,g=t.indexOf("</style>",g),H=[t.slice(V,g)],g+=8):u.indexOf(R)===-1?(g++,H=r(R)):g++;else g++;return{tagName:R,attributes:X,children:H}}function Z(){var R=t[g],X=g+1;return g=t.indexOf(R,X),t.slice(X,g)}var p,Y=null;if(I.attrValue!==void 0)for(I.attrName=I.attrName||"id",Y=[];p=void 0,p=new RegExp("\\s"+I.attrName+`\\s*=['"]`+I.attrValue+`['"]`).exec(t),(g=p?p.index:-1)!==-1;)(g=t.lastIndexOf("<",g))!==-1&&Y.push(m()),t=t.substr(g),g=0;else Y=I.parseNode?m():r("");return I.filter&&(Y=btg(Y,I.filter)),I.simplify?htg(Array.isArray(Y)?Y:[Y]):(I.setPos&&(Y.pos=g),Y)}function htg(t){var I={};if(!t.length)return"";if(t.length===1&&typeof t[0]=="string")return t[0];for(var g in t.forEach(function(C){if(typeof C=="object"){I[C.tagName]||(I[C.tagName]=[]);var i=htg(C.children);I[C.tagName].push(i),Object.keys(C.attributes).length&&typeof i!="string"&&(i._attributes=C.attributes)}}),I)I[g].length==1&&(I[g]=I[g][0]);return I}function btg(t,I,g=0,C=""){var i=[];return t.forEach(function(e,A){if(typeof e=="object"&&I(e,A,g,C)&&i.push(e),e.children){var s=btg(e.children,I,g+1,(C?C+".":"")+A+"."+e.tagName);i=i.concat(s)}}),i}function W0g(t,I){var g=typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(!g){if(Array.isArray(t)||(g=function(l,n){if(l){if(typeof l=="string")return T_(l,n);var a=Object.prototype.toString.call(l).slice(8,-1);if(a==="Object"&&l.constructor&&(a=l.constructor.name),a==="Map"||a==="Set")return Array.from(l);if(a==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return T_(l,n)}}(t))||I){g&&(t=g);var C=0,i=function(){};return{s:i,n:function(){return C>=t.length?{done:!0}:{done:!1,value:t[C++]}},e:function(l){throw l},f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
- In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var e,A=!0,s=!1;return{s:function(){g=g.call(t)},n:function(){var l=g.next();return A=l.done,l},e:function(l){s=!0,e=l},f:function(){try{A||g.return==null||g.return()}finally{if(s)throw e}}}}function T_(t,I){(I==null||I>t.length)&&(I=t.length);for(var g=0,C=new Array(I);g<I;g++)C[g]=t[g];return C}function x_(t,I){var g=Object.keys(t);if(Object.getOwnPropertySymbols){var C=Object.getOwnPropertySymbols(t);I&&(C=C.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),g.push.apply(g,C)}return g}function mX(t){for(var I=1;I<arguments.length;I++){var g=arguments[I]!=null?arguments[I]:{};I%2?x_(Object(g),!0).forEach(function(C){h9(t,C,g[C])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(g)):x_(Object(g)).forEach(function(C){Object.defineProperty(t,C,Object.getOwnPropertyDescriptor(g,C))})}return t}var ZX=0;function utg(t){var I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},g={};if(!t.length)return g;if(t.length===1&&typeof t[0]=="string")return Object.keys(I).length?{attrs:mX({order:ZX++},I),value:t[0]}:t[0];var C,i=W0g(t);try{for(i.s();!(C=i.n()).done;){var e=C.value;if(La(e)!=="object")return;if(e.tagName!=="?xml"){g[e.tagName]||(g[e.tagName]=[]);var A=utg(e.children||[],e.attributes);La(A)==="object"&&(A.attrs?A.attrs.order=ZX++:A.attrs={order:ZX++}),Object.keys(e.attributes||{}).length&&(A.attrs=mX(mX({},A.attrs),e.attributes)),g[e.tagName].push(A)}}}catch(l){i.e(l)}finally{i.f()}for(var s in g)g[s].length===1&&(g[s]=g[s][0]);return g}function Gt(t,I){return mtg.apply(this,arguments)}function mtg(){return(mtg=RC(rI.mark(function t(I,g){var C;return rI.wrap(function(i){for(;;)switch(i.prev=i.next){case 0:return i.prev=0,i.next=3,I.file(g).async("string");case 3:return C=i.sent,i.abrupt("return",utg(B0g(C)));case 7:return i.prev=7,i.t0=i.catch(0),i.abrupt("return",null);case 10:case"end":return i.stop()}},t,null,[[0,7]])}))).apply(this,arguments)}function AV(t){return AV=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(I){return typeof I}:function(I){return I&&typeof Symbol=="function"&&I.constructor===Symbol&&I!==Symbol.prototype?"symbol":typeof I},AV(t)}var y0g=/^\s+/,Y0g=/\s+$/;function Qg(t,I){if(I=I||{},(t=t||"")instanceof Qg)return t;if(!(this instanceof Qg))return new Qg(t,I);var g=function(C){var i={r:0,g:0,b:0},e=1,A=null,s=null,l=null,n=!1,a=!1;typeof C=="string"&&(C=function(r){r=r.replace(y0g,"").replace(Y0g,"").toLowerCase();var h,b=!1;if(nD[r])r=nD[r],b=!0;else if(r=="transparent")return{r:0,g:0,b:0,a:0,format:"name"};return(h=nA.rgb.exec(r))?{r:h[1],g:h[2],b:h[3]}:(h=nA.rgba.exec(r))?{r:h[1],g:h[2],b:h[3],a:h[4]}:(h=nA.hsl.exec(r))?{h:h[1],s:h[2],l:h[3]}:(h=nA.hsla.exec(r))?{h:h[1],s:h[2],l:h[3],a:h[4]}:(h=nA.hsv.exec(r))?{h:h[1],s:h[2],v:h[3]}:(h=nA.hsva.exec(r))?{h:h[1],s:h[2],v:h[3],a:h[4]}:(h=nA.hex8.exec(r))?{r:qi(h[1]),g:qi(h[2]),b:qi(h[3]),a:P_(h[4]),format:b?"name":"hex8"}:(h=nA.hex6.exec(r))?{r:qi(h[1]),g:qi(h[2]),b:qi(h[3]),format:b?"name":"hex"}:(h=nA.hex4.exec(r))?{r:qi(h[1]+""+h[1]),g:qi(h[2]+""+h[2]),b:qi(h[3]+""+h[3]),a:P_(h[4]+""+h[4]),format:b?"name":"hex8"}:(h=nA.hex3.exec(r))?{r:qi(h[1]+""+h[1]),g:qi(h[2]+""+h[2]),b:qi(h[3]+""+h[3]),format:b?"name":"hex"}:!1}(C)),AV(C)=="object"&&(Il(C.r)&&Il(C.g)&&Il(C.b)?(d=C.r,o=C.g,c=C.b,i={r:255*KC(d,255),g:255*KC(o,255),b:255*KC(c,255)},n=!0,a=String(C.r).substr(-1)==="%"?"prgb":"rgb"):Il(C.h)&&Il(C.s)&&Il(C.v)?(A=Cm(C.s),s=Cm(C.v),i=function(r,h,b){r=6*KC(r,360),h=KC(h,100),b=KC(b,100);var u=Math.floor(r),m=r-u,Z=b*(1-h),p=b*(1-m*h),Y=b*(1-(1-m)*h),R=u%6;return{r:255*[b,p,Z,Z,Y,b][R],g:255*[Y,b,b,p,Z,Z][R],b:255*[Z,Z,Y,b,b,p][R]}}(C.h,A,s),n=!0,a="hsv"):Il(C.h)&&Il(C.s)&&Il(C.l)&&(A=Cm(C.s),l=Cm(C.l),i=function(r,h,b){var u,m,Z;function p(X,H,S){return S<0&&(S+=1),S>1&&(S-=1),S<1/6?X+6*(H-X)*S:S<.5?H:S<2/3?X+(H-X)*(2/3-S)*6:X}if(r=KC(r,360),h=KC(h,100),b=KC(b,100),h===0)u=m=Z=b;else{var Y=b<.5?b*(1+h):b+h-b*h,R=2*b-Y;u=p(R,Y,r+1/3),m=p(R,Y,r),Z=p(R,Y,r-1/3)}return{r:255*u,g:255*m,b:255*Z}}(C.h,A,l),n=!0,a="hsl"),C.hasOwnProperty("a")&&(e=C.a));var d,o,c;return e=Ztg(e),{ok:n,format:C.format||a,r:Math.min(255,Math.max(i.r,0)),g:Math.min(255,Math.max(i.g,0)),b:Math.min(255,Math.max(i.b,0)),a:e}}(t);this._originalInput=t,this._r=g.r,this._g=g.g,this._b=g.b,this._a=g.a,this._roundA=Math.round(100*this._a)/100,this._format=I.format||g.format,this._gradientType=I.gradientType,this._r<1&&(this._r=Math.round(this._r)),this._g<1&&(this._g=Math.round(this._g)),this._b<1&&(this._b=Math.round(this._b)),this._ok=g.ok}function j_(t,I,g){t=KC(t,255),I=KC(I,255),g=KC(g,255);var C,i,e=Math.max(t,I,g),A=Math.min(t,I,g),s=(e+A)/2;if(e==A)C=i=0;else{var l=e-A;switch(i=s>.5?l/(2-e-A):l/(e+A),e){case t:C=(I-g)/l+(I<g?6:0);break;case I:C=(g-t)/l+2;break;case g:C=(t-I)/l+4}C/=6}return{h:C,s:i,l:s}}function Q_(t,I,g){t=KC(t,255),I=KC(I,255),g=KC(g,255);var C,i,e=Math.max(t,I,g),A=Math.min(t,I,g),s=e,l=e-A;if(i=e===0?0:l/e,e==A)C=0;else{switch(e){case t:C=(I-g)/l+(I<g?6:0);break;case I:C=(g-t)/l+2;break;case g:C=(t-I)/l+4}C/=6}return{h:C,s:i,v:s}}function O_(t,I,g,C){var i=[YA(Math.round(t).toString(16)),YA(Math.round(I).toString(16)),YA(Math.round(g).toString(16))];return C&&i[0].charAt(0)==i[0].charAt(1)&&i[1].charAt(0)==i[1].charAt(1)&&i[2].charAt(0)==i[2].charAt(1)?i[0].charAt(0)+i[1].charAt(0)+i[2].charAt(0):i.join("")}function U_(t,I,g,C){return[YA(Gtg(C)),YA(Math.round(t).toString(16)),YA(Math.round(I).toString(16)),YA(Math.round(g).toString(16))].join("")}function N0g(t,I){I=I===0?0:I||10;var g=Qg(t).toHsl();return g.s-=I/100,g.s=qV(g.s),Qg(g)}function V0g(t,I){I=I===0?0:I||10;var g=Qg(t).toHsl();return g.s+=I/100,g.s=qV(g.s),Qg(g)}function M0g(t){return Qg(t).desaturate(100)}function R0g(t,I){I=I===0?0:I||10;var g=Qg(t).toHsl();return g.l+=I/100,g.l=qV(g.l),Qg(g)}function f0g(t,I){I=I===0?0:I||10;var g=Qg(t).toRgb();return g.r=Math.max(0,Math.min(255,g.r-Math.round(-I/100*255))),g.g=Math.max(0,Math.min(255,g.g-Math.round(-I/100*255))),g.b=Math.max(0,Math.min(255,g.b-Math.round(-I/100*255))),Qg(g)}function H0g(t,I){I=I===0?0:I||10;var g=Qg(t).toHsl();return g.l-=I/100,g.l=qV(g.l),Qg(g)}function X0g(t,I){var g=Qg(t).toHsl(),C=(g.h+I)%360;return g.h=C<0?360+C:C,Qg(g)}function S0g(t){var I=Qg(t).toHsl();return I.h=(I.h+180)%360,Qg(I)}function E_(t,I){if(isNaN(I)||I<=0)throw new Error("Argument to polyad must be a positive number");for(var g=Qg(t).toHsl(),C=[Qg(t)],i=360/I,e=1;e<I;e++)C.push(Qg({h:(g.h+e*i)%360,s:g.s,l:g.l}));return C}function D0g(t){var I=Qg(t).toHsl(),g=I.h;return[Qg(t),Qg({h:(g+72)%360,s:I.s,l:I.l}),Qg({h:(g+216)%360,s:I.s,l:I.l})]}function K0g(t,I,g){I=I||6,g=g||30;var C=Qg(t).toHsl(),i=360/g,e=[Qg(t)];for(C.h=(C.h-(i*I>>1)+720)%360;--I;)C.h=(C.h+i)%360,e.push(Qg(C));return e}function F0g(t,I){I=I||6;for(var g=Qg(t).toHsv(),C=g.h,i=g.s,e=g.v,A=[],s=1/I;I--;)A.push(Qg({h:C,s:i,v:e})),e=(e+s)%1;return A}Qg.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var t=this.toRgb();return(299*t.r+587*t.g+114*t.b)/1e3},getLuminance:function(){var t,I,g,C=this.toRgb();return t=C.r/255,I=C.g/255,g=C.b/255,.2126*(t<=.03928?t/12.92:Math.pow((t+.055)/1.055,2.4))+.7152*(I<=.03928?I/12.92:Math.pow((I+.055)/1.055,2.4))+.0722*(g<=.03928?g/12.92:Math.pow((g+.055)/1.055,2.4))},setAlpha:function(t){return this._a=Ztg(t),this._roundA=Math.round(100*this._a)/100,this},toHsv:function(){var t=Q_(this._r,this._g,this._b);return{h:360*t.h,s:t.s,v:t.v,a:this._a}},toHsvString:function(){var t=Q_(this._r,this._g,this._b),I=Math.round(360*t.h),g=Math.round(100*t.s),C=Math.round(100*t.v);return this._a==1?"hsv("+I+", "+g+"%, "+C+"%)":"hsva("+I+", "+g+"%, "+C+"%, "+this._roundA+")"},toHsl:function(){var t=j_(this._r,this._g,this._b);return{h:360*t.h,s:t.s,l:t.l,a:this._a}},toHslString:function(){var t=j_(this._r,this._g,this._b),I=Math.round(360*t.h),g=Math.round(100*t.s),C=Math.round(100*t.l);return this._a==1?"hsl("+I+", "+g+"%, "+C+"%)":"hsla("+I+", "+g+"%, "+C+"%, "+this._roundA+")"},toHex:function(t){return O_(this._r,this._g,this._b,t)},toHexString:function(t){return"#"+this.toHex(t)},toHex8:function(t){return function(I,g,C,i,e){var A=[YA(Math.round(I).toString(16)),YA(Math.round(g).toString(16)),YA(Math.round(C).toString(16)),YA(Gtg(i))];return e&&A[0].charAt(0)==A[0].charAt(1)&&A[1].charAt(0)==A[1].charAt(1)&&A[2].charAt(0)==A[2].charAt(1)&&A[3].charAt(0)==A[3].charAt(1)?A[0].charAt(0)+A[1].charAt(0)+A[2].charAt(0)+A[3].charAt(0):A.join("")}(this._r,this._g,this._b,this._a,t)},toHex8String:function(t){return"#"+this.toHex8(t)},toRgb:function(){return{r:Math.round(this._r),g:Math.round(this._g),b:Math.round(this._b),a:this._a}},toRgbString:function(){return this._a==1?"rgb("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+")":"rgba("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:Math.round(100*KC(this._r,255))+"%",g:Math.round(100*KC(this._g,255))+"%",b:Math.round(100*KC(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return this._a==1?"rgb("+Math.round(100*KC(this._r,255))+"%, "+Math.round(100*KC(this._g,255))+"%, "+Math.round(100*KC(this._b,255))+"%)":"rgba("+Math.round(100*KC(this._r,255))+"%, "+Math.round(100*KC(this._g,255))+"%, "+Math.round(100*KC(this._b,255))+"%, "+this._roundA+")"},toName:function(){return this._a===0?"transparent":!(this._a<1)&&(k0g[O_(this._r,this._g,this._b,!0)]||!1)},toFilter:function(t){var I="#"+U_(this._r,this._g,this._b,this._a),g=I,C=this._gradientType?"GradientType = 1, ":"";if(t){var i=Qg(t);g="#"+U_(i._r,i._g,i._b,i._a)}return"progid:DXImageTransform.Microsoft.gradient("+C+"startColorstr="+I+",endColorstr="+g+")"},toString:function(t){var I=!!t;t=t||this._format;var g=!1,C=this._a<1&&this._a>=0;return I||!C||t!=="hex"&&t!=="hex6"&&t!=="hex3"&&t!=="hex4"&&t!=="hex8"&&t!=="name"?(t==="rgb"&&(g=this.toRgbString()),t==="prgb"&&(g=this.toPercentageRgbString()),t!=="hex"&&t!=="hex6"||(g=this.toHexString()),t==="hex3"&&(g=this.toHexString(!0)),t==="hex4"&&(g=this.toHex8String(!0)),t==="hex8"&&(g=this.toHex8String()),t==="name"&&(g=this.toName()),t==="hsl"&&(g=this.toHslString()),t==="hsv"&&(g=this.toHsvString()),g||this.toHexString()):t==="name"&&this._a===0?this.toName():this.toRgbString()},clone:function(){return Qg(this.toString())},_applyModification:function(t,I){var g=t.apply(null,[this].concat([].slice.call(I)));return this._r=g._r,this._g=g._g,this._b=g._b,this.setAlpha(g._a),this},lighten:function(){return this._applyModification(R0g,arguments)},brighten:function(){return this._applyModification(f0g,arguments)},darken:function(){return this._applyModification(H0g,arguments)},desaturate:function(){return this._applyModification(N0g,arguments)},saturate:function(){return this._applyModification(V0g,arguments)},greyscale:function(){return this._applyModification(M0g,arguments)},spin:function(){return this._applyModification(X0g,arguments)},_applyCombination:function(t,I){return t.apply(null,[this].concat([].slice.call(I)))},analogous:function(){return this._applyCombination(K0g,arguments)},complement:function(){return this._applyCombination(S0g,arguments)},monochromatic:function(){return this._applyCombination(F0g,arguments)},splitcomplement:function(){return this._applyCombination(D0g,arguments)},triad:function(){return this._applyCombination(E_,[3])},tetrad:function(){return this._applyCombination(E_,[4])}},Qg.fromRatio=function(t,I){if(AV(t)=="object"){var g={};for(var C in t)t.hasOwnProperty(C)&&(g[C]=C==="a"?t[C]:Cm(t[C]));t=g}return Qg(t,I)},Qg.equals=function(t,I){return!(!t||!I)&&Qg(t).toRgbString()==Qg(I).toRgbString()},Qg.random=function(){return Qg.fromRatio({r:Math.random(),g:Math.random(),b:Math.random()})},Qg.mix=function(t,I,g){g=g===0?0:g||50;var C=Qg(t).toRgb(),i=Qg(I).toRgb(),e=g/100;return Qg({r:(i.r-C.r)*e+C.r,g:(i.g-C.g)*e+C.g,b:(i.b-C.b)*e+C.b,a:(i.a-C.a)*e+C.a})},Qg.readability=function(t,I){var g=Qg(t),C=Qg(I);return(Math.max(g.getLuminance(),C.getLuminance())+.05)/(Math.min(g.getLuminance(),C.getLuminance())+.05)},Qg.isReadable=function(t,I,g){var C,i,e=Qg.readability(t,I);switch(i=!1,(C=function(A){var s,l;return s=((A=A||{level:"AA",size:"small"}).level||"AA").toUpperCase(),l=(A.size||"small").toLowerCase(),s!=="AA"&&s!=="AAA"&&(s="AA"),l!=="small"&&l!=="large"&&(l="small"),{level:s,size:l}}(g)).level+C.size){case"AAsmall":case"AAAlarge":i=e>=4.5;break;case"AAlarge":i=e>=3;break;case"AAAsmall":i=e>=7}return i},Qg.mostReadable=function(t,I,g){var C,i,e,A,s=null,l=0;i=(g=g||{}).includeFallbackColors,e=g.level,A=g.size;for(var n=0;n<I.length;n++)(C=Qg.readability(t,I[n]))>l&&(l=C,s=Qg(I[n]));return Qg.isReadable(t,s,{level:e,size:A})||!i?s:(g.includeFallbackColors=!1,Qg.mostReadable(t,["#fff","#000"],g))};var nD=Qg.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},k0g=Qg.hexNames=function(t){var I={};for(var g in t)t.hasOwnProperty(g)&&(I[t[g]]=g);return I}(nD);function Ztg(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t}function KC(t,I){(function(C){return typeof C=="string"&&C.indexOf(".")!=-1&&parseFloat(C)===1})(t)&&(t="100%");var g=function(C){return typeof C=="string"&&C.indexOf("%")!=-1}(t);return t=Math.min(I,Math.max(0,parseFloat(t))),g&&(t=parseInt(t*I,10)/100),Math.abs(t-I)<1e-6?1:t%I/parseFloat(I)}function qV(t){return Math.min(1,Math.max(0,t))}function qi(t){return parseInt(t,16)}function YA(t){return t.length==1?"0"+t:""+t}function Cm(t){return t<=1&&(t=100*t+"%"),t}function Gtg(t){return Math.round(255*parseFloat(t)).toString(16)}function P_(t){return qi(t)/255}var Ln,zY,JY,nA=(zY="[\\s|\\(]+("+(Ln="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)")+")[,|\\s]+("+Ln+")[,|\\s]+("+Ln+")\\s*\\)?",JY="[\\s|\\(]+("+Ln+")[,|\\s]+("+Ln+")[,|\\s]+("+Ln+")[,|\\s]+("+Ln+")\\s*\\)?",{CSS_UNIT:new RegExp(Ln),rgb:new RegExp("rgb"+zY),rgba:new RegExp("rgba"+JY),hsl:new RegExp("hsl"+zY),hsla:new RegExp("hsla"+JY),hsv:new RegExp("hsv"+zY),hsva:new RegExp("hsva"+JY),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/});function Il(t){return!!nA.CSS_UNIT.exec(t)}function z0g(t,I){var g=typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(!g){if(Array.isArray(t)||(g=function(l,n){if(l){if(typeof l=="string")return __(l,n);var a=Object.prototype.toString.call(l).slice(8,-1);if(a==="Object"&&l.constructor&&(a=l.constructor.name),a==="Map"||a==="Set")return Array.from(l);if(a==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return __(l,n)}}(t))||I){g&&(t=g);var C=0,i=function(){};return{s:i,n:function(){return C>=t.length?{done:!0}:{done:!1,value:t[C++]}},e:function(l){throw l},f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
- In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var e,A=!0,s=!1;return{s:function(){g=g.call(t)},n:function(){var l=g.next();return A=l.done,l},e:function(l){s=!0,e=l},f:function(){try{A||g.return==null||g.return()}finally{if(s)throw e}}}}function __(t,I){(I==null||I>t.length)&&(I=t.length);for(var g=0,C=new Array(I);g<I;g++)C[g]=t[g];return C}function wtg(t){for(var I,g="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",C=new Uint8Array(t),i=C.byteLength,e=i%3,A=i-e,s="",l=0;l<A;l+=3)s+=g[(16515072&(I=C[l]<<16|C[l+1]<<8|C[l+2]))>>18]+g[(258048&I)>>12]+g[(4032&I)>>6]+g[63&I];return e===1?s+=g[(252&(I=C[A]))>>2]+g[(3&I)<<4]+"==":e===2&&(s+=g[(64512&(I=C[A]<<8|C[A+1]))>>10]+g[(1008&I)>>4]+g[(15&I)<<2]+"="),s}function GX(t){return t.substr(2+(~-t.lastIndexOf(".")>>>0))}function Mr(t,I){if(!t)return t;var g="";if(t.constructor===Array)for(var C=0;C<t.length;C++)g+=I(t[C],C);else g+=I(t,0);return g}function U(t,I){if(!t)return t;var g,C=z0g(I);try{for(C.s();!(g=C.n()).done;)if(!(t=t[g.value]))return t}catch(i){C.e(i)}finally{C.f()}return t}function b0(t){return t?Math.round(t/6e4):0}function sV(t){var I={"&":"&","<":"<",">":">",'"':""","'":"'"};return t.replace(/[&<>"']/g,function(g){return I[g]})}function aD(t){var I="";switch(t.toLowerCase()){case"jpg":case"jpeg":I="image/jpeg";break;case"png":I="image/png";break;case"gif":I="image/gif";break;case"emf":I="image/x-emf";break;case"wmf":I="image/x-wmf";break;case"svg":I="image/svg+xml";break;case"mp4":I="video/mp4";break;case"webm":I="video/webm";break;case"ogg":I="video/ogg";break;case"avi":I="video/avi";break;case"mpg":I="video/mpg";break;case"wmv":I="video/wmv";break;case"mp3":I="audio/mpeg";break;case"wav":I="audio/wav";break;case"tif":case"tiff":I="image/tiff"}return I}function J0g(t){return/^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/.test(t)}function Rr(t){for(var I=t.toString(16);I.length<2;)I="0"+I;return I}function ptg(t){if(typeof DOMParser>"u")return t.replace(/<[^>]+>/g,"").replace(/\s+/g," ").trim()!=="";var I=new DOMParser().parseFromString(t,"text/html");return(I.body.textContent||I.body.innerText).trim()!==""}function Dt(t){var I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:4;return parseFloat(t.toFixed(I))}function oD(t,I,g,C){var i,e;if(g)e=g;else{var A=U(I.slideContent,["p:sld","p:clrMapOvr","a:overrideClrMapping","attrs"]);e=A||(A=U(I.slideLayoutContent,["p:sldLayout","p:clrMapOvr","a:overrideClrMapping","attrs"]))||U(I.slideMasterContent,["p:sldMaster","p:clrMap","attrs"])}var s=t.substr(2);if(s==="phClr"&&C)i=C;else{if(e)switch(s){case"tx1":case"tx2":case"bg1":case"bg2":t="a:"+e[s]}else switch(s){case"tx1":t="a:dk1";break;case"tx2":t="a:dk2";break;case"bg1":t="a:lt1";break;case"bg2":t="a:lt2"}var l=U(I.themeContent,["a:theme","a:themeElements","a:clrScheme",t]);!(i=U(l,["a:srgbClr","attrs","val"]))&&l&&(i=U(l,["a:sysClr","attrs","lastClr"]))}return i}function Ns(t,I,g){var C=arguments.length>3&&arguments[3]!==void 0?arguments[3]:[],i=U(t,["p:spPr","a:ln"]),e=!!U(i,["a:grpFill"]);if((!i||e)&&C&&C.length)for(var A=C.length-1;A>=0;A--){var s=U(C[A],["p:grpSpPr","a:ln"]);if(s){i=s;break}}if(!i){var l=U(t,["p:style","a:lnRef"]);if(l){var n=U(l,["attrs","idx"]);i=g.themeContent["a:theme"]["a:themeElements"]["a:fmtScheme"]["a:lnStyleLst"]["a:ln"][Number(n)-1]}}i||(i=t);var a=U(i,["a:noFill"]),d=U(i,["attrs","w"]),o=!!(d!==void 0||U(i,["a:prstDash"])||U(i,["a:solidFill"])||U(i,["a:gradFill"])||U(i,["a:pattFill"])),c=0;!a&&o&&(c=parseInt(d)/12700,(!Number.isFinite(c)||c<=0)&&(c=1));var r=U(i,["a:solidFill","a:srgbClr","attrs","val"]);if(!r){var h=U(i,["a:solidFill","a:schemeClr"]),b="a:"+U(h,["attrs","val"]);r=oD(b,g)}if(!r){var u=U(t,["p:style","a:lnRef","a:schemeClr"]),m="a:"+U(u,["attrs","val"]);if(r=oD(m,g)){var Z=U(u,["a:shade","attrs","val"]);if(Z){Z=parseInt(Z)/1e5;var p=Qg("#"+r).toHsl();r=Qg({h:p.h,s:p.s,l:p.l*Z,a:p.a}).toHex()}}}r=r?"#".concat(r):"#000000";var Y=U(i,["a:prstDash","attrs","val"]),R="solid",X="0";switch(Y){case"solid":R="solid",X="0";break;case"dash":R="dashed",X="5";break;case"dashDot":R="dashed",X="5, 5, 1, 5";break;case"dot":R="dotted",X="1, 5";break;case"lgDash":R="dashed",X="10, 5";break;case"lgDashDotDot":R="dotted",X="10, 5, 1, 5, 1, 5";break;case"sysDash":R="dashed",X="5, 2";break;case"sysDashDot":R="dotted",X="5, 2, 1, 5";break;case"sysDashDotDot":R="dotted",X="5, 2, 1, 5, 1, 5";break;case"sysDot":R="dotted",X="2, 5"}return{borderColor:r,borderWidth:c,borderType:R,strokeDasharray:X}}function wX(t,I,g){return g<0&&(g+=6),g>=6&&(g-=6),g<1?(I-t)*g+t:g<3?I:g<4?(I-t)*(4-g)+t:t}function Btg(t,I,g){var C=Qg(t).toHsl();I>=1&&(I=1);var i=C.l*I+(1-I);return g?Qg({h:C.h,s:C.s,l:i,a:C.a}).toHex8():Qg({h:C.h,s:C.s,l:i,a:C.a}).toHex()}function q_(t,I){var g=typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(!g){if(Array.isArray(t)||(g=function(l,n){if(l){if(typeof l=="string")return $_(l,n);var a=Object.prototype.toString.call(l).slice(8,-1);if(a==="Object"&&l.constructor&&(a=l.constructor.name),a==="Map"||a==="Set")return Array.from(l);if(a==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return $_(l,n)}}(t))||I){g&&(t=g);var C=0,i=function(){};return{s:i,n:function(){return C>=t.length?{done:!0}:{done:!1,value:t[C++]}},e:function(l){throw l},f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
- In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var e,A=!0,s=!1;return{s:function(){g=g.call(t)},n:function(){var l=g.next();return A=l.done,l},e:function(l){s=!0,e=l},f:function(){try{A||g.return==null||g.return()}finally{if(s)throw e}}}}function $_(t,I){(I==null||I>t.length)&&(I=t.length);for(var g=0,C=new Array(I);g<I;g++)C[g]=t[g];return C}function ps(t){var I="";return t["a:noFill"]&&(I="NO_FILL"),t["a:solidFill"]&&(I="SOLID_FILL"),t["a:gradFill"]&&(I="GRADIENT_FILL"),t["a:pattFill"]&&(I="PATTERN_FILL"),t["a:blipFill"]&&(I="PIC_FILL"),t["a:grpFill"]&&(I="GROUP_FILL"),I}function $V(t,I,g){return cD.apply(this,arguments)}function cD(){return cD=RC(rI.mark(function t(I,g,C){var i,e,A,s,l,n,a;return rI.wrap(function(d){for(;;)switch(d.prev=d.next){case 0:if(g){d.next=2;break}return d.abrupt("return","");case 2:if(e=U(g,["a:blip","attrs","r:embed"]),I==="slideBg"||I==="slide"?A=U(C,["slideResObj",e,"target"]):I==="slideLayoutBg"?A=U(C,["layoutResObj",e,"target"]):I==="slideMasterBg"?A=U(C,["masterResObj",e,"target"]):I==="themeBg"?A=U(C,["themeResObj",e,"target"]):I==="diagramBg"&&(A=U(C,["diagramResObj",e,"target"])),A){d.next=6;break}return d.abrupt("return",A);case 6:if(i=U(C,["loaded-images",A])){d.next=20;break}if(A=sV(A),(s=A.split(".").pop())!=="xml"){d.next=12;break}return d.abrupt("return","");case 12:return d.next=14,C.zip.file(A).async("arraybuffer");case 14:l=d.sent,n=aD(s),i="data:".concat(n,";base64,").concat(wtg(l)),(a=C["loaded-images"]||{})[A]=i,C["loaded-images"]=a;case 20:return d.abrupt("return",i);case 21:case"end":return d.stop()}},t)})),cD.apply(this,arguments)}function Wtg(t){var I=U(t["a:blip"],["a:alphaModFix","attrs"]),g=1;return I&&I.amt&&I.amt!==""&&(g=parseInt(I.amt)/1e5),g}function L0g(t){if(!t)return null;var I=t["a:blip"];if(!I)return null;var g={},C=I["a:extLst"];if(C&&C["a:ext"]){var i,e=q_(Array.isArray(C["a:ext"])?C["a:ext"]:[C["a:ext"]]);try{for(e.s();!(i=e.n()).done;){var A=i.value;if(A["a14:imgProps"]&&A["a14:imgProps"]["a14:imgLayer"]){var s=A["a14:imgProps"]["a14:imgLayer"]["a14:imgEffect"];if(s){var l,n=q_(Array.isArray(s)?s:[s]);try{for(n.s();!(l=n.n()).done;){var a=l.value;if(a["a14:saturation"]){var d=U(a,["a14:saturation","attrs","sat"]);d&&(g.saturation=parseInt(d)/1e5)}if(a["a14:brightnessContrast"]){var o=U(a,["a14:brightnessContrast","attrs","bright"]),c=U(a,["a14:brightnessContrast","attrs","contrast"]);o&&(g.brightness=parseInt(o)/1e5),c&&(g.contrast=parseInt(c)/1e5)}if(a["a14:sharpenSoften"]){var r=U(a,["a14:sharpenSoften","attrs","amount"]);if(r){var h=parseInt(r)/1e5;h>0?g.sharpen=h:g.soften=Math.abs(h)}}if(a["a14:colorTemperature"]){var b=U(a,["a14:colorTemperature","attrs","colorTemp"]);b&&(g.colorTemperature=parseInt(b))}}}catch(u){n.e(u)}finally{n.f()}}}}}catch(u){e.e(u)}finally{e.f()}}return Object.keys(g).length>0?g:null}function Mu(t,I,g){return ytg.apply(this,arguments)}function ytg(){return(ytg=RC(rI.mark(function t(I,g,C){var i,e,A,s;return rI.wrap(function(l){for(;;)switch(l.prev=l.next){case 0:return l.next=2,$V(g,I["a:blipFill"],C);case 2:return i=l.sent,e=I["a:blipFill"]["a:blip"],A=U(e,["a:alphaModFix","attrs"]),s=1,A&&A.amt&&A.amt!==""&&(s=parseInt(A.amt)/1e5),l.abrupt("return",{picBase64:i,opacity:s});case 8:case"end":return l.stop()}},t)}))).apply(this,arguments)}function M9(t,I){for(var g=t["a:gsLst"]["a:gs"],C=[],i=0;i<g.length;i++){var e=IC(g[i],void 0,void 0,I),A=U(g[i],["attrs","pos"]);C[i]={pos:A?A/1e3+"%":"",color:e}}var s=t["a:lin"],l=0,n="line";if(s)l=b0(s.attrs.ang);else{var a=t["a:path"];a&&a.attrs&&a.attrs.path&&(n=a.attrs.path)}return{rot:l,path:n,colors:C.sort(function(d,o){return parseInt(d.pos)-parseInt(o.pos)})}}function zo(t,I){if(!t)return null;var g=t["a:pattFill"];if(!g)return null;var C=U(g,["attrs","prst"]),i=g["a:fgClr"],e=g["a:bgClr"],A="#000000",s="#FFFFFF";return i&&(A=IC(i,void 0,void 0,I)),e&&(s=IC(e,void 0,void 0,I)),{type:C,foregroundColor:A,backgroundColor:s}}function fr(t,I,g,C){if(t){for(var i=t["a:gradFill"],e=i["a:gsLst"]["a:gs"],A=[],s=0;s<e.length;s++){var l=IC(e[s],g["p:sldMaster"]["p:clrMap"].attrs,I,C),n=U(e[s],["attrs","pos"]);A[s]={pos:n?n/1e3+"%":"",color:l}}var a=i["a:lin"],d=0,o="line";if(a)d=b0(a.attrs.ang)+0;else{var c=i["a:path"];c&&c.attrs&&c.attrs.path&&(o=c.attrs.path)}return{rot:d,path:o,colors:A.sort(function(r,h){return parseInt(r.pos)-parseInt(h.pos)})}}return I?I.indexOf("#")===-1?"#".concat(I):I:null}function v0g(t){return dD.apply(this,arguments)}function dD(){return dD=RC(rI.mark(function t(I){var g,C,i,e,A,s,l,n,a,d,o,c,r,h,b,u,m,Z,p,Y,R,X,H,S,z,v,K,V,N,B,G,w,W,y,f,D,F,T,Q,P,L,E,J,k,j,q,tg,Cg,x,sg,Ag,O,_,Ig,ng,ag,lg,cg,dg,hg,rg,Wg,Gg,Sg,Kg,kg;return rI.wrap(function(yg){for(;;)switch(yg.prev=yg.next){case 0:if(g=I.slideContent,C=I.slideLayoutContent,i=I.slideMasterContent,e=U(g,["p:sld","p:cSld","p:bg","p:bgPr"]),A=U(g,["p:sld","p:cSld","p:bg","p:bgRef"]),s="#fff",l="color",!e){yg.next=32;break}if((n=ps(e))!=="SOLID_FILL"){yg.next=17;break}a=e["a:solidFill"],(o=U(g,["p:sld","p:clrMapOvr","a:overrideClrMapping","attrs"]))?d=o:(c=U(C,["p:sldLayout","p:clrMapOvr","a:overrideClrMapping","attrs"]),d=c||U(i,["p:sldMaster","p:clrMap","attrs"])),r=IC(a,d,void 0,I),s=r,yg.next=30;break;case 17:if(n!=="GRADIENT_FILL"){yg.next=22;break}typeof(h=fr(e,void 0,i,I))=="string"?s=h:h&&(s=h,l="gradient"),yg.next=30;break;case 22:if(n!=="PIC_FILL"){yg.next=29;break}return yg.next=25,Mu(e,"slideBg",I);case 25:s=yg.sent,l="image",yg.next=30;break;case 29:n==="PATTERN_FILL"&&(b=zo(e,I))&&(s=b,l="pattern");case 30:yg.next=157;break;case 32:if(!A){yg.next=40;break}(m=U(g,["p:sld","p:clrMapOvr","a:overrideClrMapping","attrs"]))?u=m:(Z=U(C,["p:sldLayout","p:clrMapOvr","a:overrideClrMapping","attrs"]),u=Z||U(i,["p:sldMaster","p:clrMap","attrs"])),p=IC(A,u,void 0,I),(Y=Number(A.attrs.idx))>1e3&&(R=Y-1e3,X=I.themeContent["a:theme"]["a:themeElements"]["a:fmtScheme"]["a:bgFillStyleLst"],H=[],Object.keys(X).forEach(function(Vg){var pg=X[Vg];if(Vg!=="attrs")if(pg.constructor===Array)for(var Hg=0;Hg<pg.length;Hg++){var Jg={};Jg[Vg]=pg[Hg],pg[Hg].attrs&&(Jg.idex=pg[Hg].attrs.order,Jg.attrs={order:pg[Hg].attrs.order}),H.push(Jg)}else{var zg={};zg[Vg]=pg,pg.attrs&&(zg.idex=pg.attrs.order,zg.attrs={order:pg.attrs.order}),H.push(zg)}}),(S=H.slice(0)).sort(function(Vg,pg){return Vg.idex-pg.idex}),z=S[R-1],(v=ps(z))==="SOLID_FILL"?(K=z["a:solidFill"],V=IC(K,u,void 0,I),s=V):v==="GRADIENT_FILL"&&(typeof(N=fr(z,p,i,I))=="string"?s=N:N&&(s=N,l="gradient"))),yg.next=157;break;case 40:if(e=U(C,["p:sldLayout","p:cSld","p:bg","p:bgPr"]),A=U(C,["p:sldLayout","p:cSld","p:bg","p:bgRef"]),G=U(C,["p:sldLayout","p:clrMapOvr","a:overrideClrMapping","attrs"]),B=G||U(i,["p:sldMaster","p:clrMap","attrs"]),!e){yg.next=67;break}if((w=ps(e))!=="SOLID_FILL"){yg.next=52;break}W=e["a:solidFill"],y=IC(W,B,void 0,I),s=y,yg.next=65;break;case 52:if(w!=="GRADIENT_FILL"){yg.next=57;break}typeof(f=fr(e,void 0,i,I))=="string"?s=f:f&&(s=f,l="gradient"),yg.next=65;break;case 57:if(w!=="PIC_FILL"){yg.next=64;break}return yg.next=60,Mu(e,"slideLayoutBg",I);case 60:s=yg.sent,l="image",yg.next=65;break;case 64:w==="PATTERN_FILL"&&(D=zo(e,I))&&(s=D,l="pattern");case 65:yg.next=157;break;case 67:if(!A){yg.next=100;break}if(F=IC(A,B,void 0,I),!((T=Number(A.attrs.idx))>1e3)){yg.next=98;break}if(Q=T-1e3,P=I.themeContent["a:theme"]["a:themeElements"]["a:fmtScheme"]["a:bgFillStyleLst"],L=[],Object.keys(P).forEach(function(Vg){var pg=P[Vg];if(Vg!=="attrs")if(pg.constructor===Array)for(var Hg=0;Hg<pg.length;Hg++){var Jg={};Jg[Vg]=pg[Hg],pg[Hg].attrs&&(Jg.idex=pg[Hg].attrs.order,Jg.attrs={order:pg[Hg].attrs.order}),L.push(Jg)}else{var zg={};zg[Vg]=pg,pg.attrs&&(zg.idex=pg.attrs.order,zg.attrs={order:pg.attrs.order}),L.push(zg)}}),(E=L.slice(0)).sort(function(Vg,pg){return Vg.idex-pg.idex}),J=E[Q-1],(k=ps(J))!=="SOLID_FILL"){yg.next=85;break}j=J["a:solidFill"],q=IC(j,B,void 0,I),s=q,yg.next=98;break;case 85:if(k!=="GRADIENT_FILL"){yg.next=90;break}typeof(tg=fr(J,F,i,I))=="string"?s=tg:tg&&(s=tg,l="gradient"),yg.next=98;break;case 90:if(k!=="PIC_FILL"){yg.next=97;break}return yg.next=93,Mu(J,"themeBg",I);case 93:s=yg.sent,l="image",yg.next=98;break;case 97:k==="PATTERN_FILL"&&(Cg=zo(J,I))&&(s=Cg,l="pattern");case 98:yg.next=157;break;case 100:if(e=U(i,["p:sldMaster","p:cSld","p:bg","p:bgPr"]),A=U(i,["p:sldMaster","p:cSld","p:bg","p:bgRef"]),x=U(i,["p:sldMaster","p:clrMap","attrs"]),!e){yg.next=126;break}if((sg=ps(e))!=="SOLID_FILL"){yg.next=111;break}Ag=e["a:solidFill"],O=IC(Ag,x,void 0,I),s=O,yg.next=124;break;case 111:if(sg!=="GRADIENT_FILL"){yg.next=116;break}typeof(_=fr(e,void 0,i,I))=="string"?s=_:_&&(s=_,l="gradient"),yg.next=124;break;case 116:if(sg!=="PIC_FILL"){yg.next=123;break}return yg.next=119,Mu(e,"slideMasterBg",I);case 119:s=yg.sent,l="image",yg.next=124;break;case 123:sg==="PATTERN_FILL"&&(Ig=zo(e,I))&&(s=Ig,l="pattern");case 124:yg.next=157;break;case 126:if(!A){yg.next=157;break}if(ng=IC(A,x,void 0,I),!((ag=Number(A.attrs.idx))>1e3)){yg.next=157;break}if(lg=ag-1e3,cg=I.themeContent["a:theme"]["a:themeElements"]["a:fmtScheme"]["a:bgFillStyleLst"],dg=[],Object.keys(cg).forEach(function(Vg){var pg=cg[Vg];if(Vg!=="attrs")if(pg.constructor===Array)for(var Hg=0;Hg<pg.length;Hg++){var Jg={};Jg[Vg]=pg[Hg],pg[Hg].attrs&&(Jg.idex=pg[Hg].attrs.order,Jg.attrs={order:pg[Hg].attrs.order}),dg.push(Jg)}else{var zg={};zg[Vg]=pg,pg.attrs&&(zg.idex=pg.attrs.order,zg.attrs={order:pg.attrs.order}),dg.push(zg)}}),(hg=dg.slice(0)).sort(function(Vg,pg){return Vg.idex-pg.idex}),rg=hg[lg-1],(Wg=ps(rg))!=="SOLID_FILL"){yg.next=144;break}Gg=rg["a:solidFill"],Sg=IC(Gg,B,void 0,I),s=Sg,yg.next=157;break;case 144:if(Wg!=="GRADIENT_FILL"){yg.next=149;break}typeof(Kg=fr(rg,ng,i,I))=="string"?s=Kg:Kg&&(s=Kg,l="gradient"),yg.next=157;break;case 149:if(Wg!=="PIC_FILL"){yg.next=156;break}return yg.next=152,Mu(rg,"themeBg",I);case 152:s=yg.sent,l="image",yg.next=157;break;case 156:Wg==="PATTERN_FILL"&&(kg=zo(rg,I))&&(s=kg,l="pattern");case 157:return yg.abrupt("return",{type:l,value:s});case 158:case"end":return yg.stop()}},t)})),dD.apply(this,arguments)}function Ytg(t,I,g,C,i){return rD.apply(this,arguments)}function rD(){return rD=RC(rI.mark(function t(I,g,C,i,e){var A,s,l,n,a,d,o,c,r,h,b,u=arguments;return rI.wrap(function(m){for(;;)switch(m.prev=m.next){case 0:if(A=u.length>5&&u[5]!==void 0?u[5]:[],s=ps(U(I,["p:spPr"])),l="color",n="",s!=="NO_FILL"){m.next=8;break}return m.abrupt("return",C?"none":"");case 8:if(s!=="SOLID_FILL"){m.next=14;break}a=I["p:spPr"]["a:solidFill"],n=IC(a,void 0,void 0,i),l="color",m.next=38;break;case 14:if(s!=="GRADIENT_FILL"){m.next=20;break}d=I["p:spPr"]["a:gradFill"],n=M9(d,i),l="gradient",m.next=38;break;case 20:if(s!=="PIC_FILL"){m.next=30;break}return o=I["p:spPr"]["a:blipFill"],m.next=24,$V(e,o,i);case 24:c=m.sent,r=Wtg(o),n={picBase64:c,opacity:r},l="image",m.next=38;break;case 30:if(s!=="PATTERN_FILL"){m.next=36;break}h=I["p:spPr"]["a:pattFill"],n=zo({"a:pattFill":h},i),l="pattern",m.next=38;break;case 36:if(s!=="GROUP_FILL"){m.next=38;break}return m.abrupt("return",T0g(A,i,e));case 38:if(n||(b=U(I,["p:style","a:fillRef"]),n=IC(b,void 0,void 0,i),l="color"),n||!g||s!=="NO_FILL"){m.next=41;break}return m.abrupt("return",C?"none":"");case 41:return m.abrupt("return",{type:l,value:n});case 42:case"end":return m.stop()}},t)})),rD.apply(this,arguments)}function T0g(t,I,g){return hD.apply(this,arguments)}function hD(){return hD=RC(rI.mark(function t(I,g,C){var i,e,A,s,l,n,a,d,o,c,r,h,b;return rI.wrap(function(u){for(;;)switch(u.prev=u.next){case 0:i=I.length-1;case 1:if(!(i>=0)){u.next=39;break}if((e=I[i])&&e["p:grpSpPr"]){u.next=5;break}return u.abrupt("continue",36);case 5:if(A=e["p:grpSpPr"],(s=ps(A))!=="SOLID_FILL"){u.next=14;break}if(l=A["a:solidFill"],!(n=IC(l,void 0,void 0,g))){u.next=12;break}return u.abrupt("return",{type:"color",value:n});case 12:u.next=36;break;case 14:if(s!=="GRADIENT_FILL"){u.next=21;break}if(a=A["a:gradFill"],!(d=M9(a,g))){u.next=19;break}return u.abrupt("return",{type:"gradient",value:d});case 19:u.next=36;break;case 21:if(s!=="PIC_FILL"){u.next=31;break}return o=A["a:blipFill"],u.next=25,$V(C,o,g);case 25:if(c=u.sent,r=Wtg(o),!c){u.next=29;break}return u.abrupt("return",{type:"image",value:{picBase64:c,opacity:r}});case 29:u.next=36;break;case 31:if(s!=="PATTERN_FILL"){u.next=36;break}if(h=A["a:pattFill"],!(b=zo({"a:pattFill":h},g))){u.next=36;break}return u.abrupt("return",{type:"pattern",value:b});case 36:i--,u.next=1;break;case 39:return u.abrupt("return",null);case 40:case"end":return u.stop()}},t)})),hD.apply(this,arguments)}function IC(t,I,g,C){if(!t)return"";var i,e,A,s="";if(t["a:srgbClr"])s=U(i=t["a:srgbClr"],["attrs","val"]);else if(t["a:schemeClr"])s=oD("a:"+U(i=t["a:schemeClr"],["attrs","val"]),C,I,g)||"";else if(t["a:scrgbClr"]){var l=(i=t["a:scrgbClr"]).attrs,n=l.r.indexOf("%")!==-1?l.r.split("%").shift():l.r,a=l.g.indexOf("%")!==-1?l.g.split("%").shift():l.g,d=l.b.indexOf("%")!==-1?l.b.split("%").shift():l.b;s=Rr(Number(n)/100*255)+Rr(Number(a)/100*255)+Rr(Number(d)/100*255)}else if(t["a:prstClr"]){var o=U(i=t["a:prstClr"],["attrs","val"]);(A=["white","AliceBlue","AntiqueWhite","Aqua","Aquamarine","Azure","Beige","Bisque","black","BlanchedAlmond","Blue","BlueViolet","Brown","BurlyWood","CadetBlue","Chartreuse","Chocolate","Coral","CornflowerBlue","Cornsilk","Crimson","Cyan","DarkBlue","DarkCyan","DarkGoldenRod","DarkGray","DarkGrey","DarkGreen","DarkKhaki","DarkMagenta","DarkOliveGreen","DarkOrange","DarkOrchid","DarkRed","DarkSalmon","DarkSeaGreen","DarkSlateBlue","DarkSlateGray","DarkSlateGrey","DarkTurquoise","DarkViolet","DeepPink","DeepSkyBlue","DimGray","DimGrey","DodgerBlue","FireBrick","FloralWhite","ForestGreen","Fuchsia","Gainsboro","GhostWhite","Gold","GoldenRod","Gray","Grey","Green","GreenYellow","HoneyDew","HotPink","IndianRed","Indigo","Ivory","Khaki","Lavender","LavenderBlush","LawnGreen","LemonChiffon","LightBlue","LightCoral","LightCyan","LightGoldenRodYellow","LightGray","LightGrey","LightGreen","LightPink","LightSalmon","LightSeaGreen","LightSkyBlue","LightSlateGray","LightSlateGrey","LightSteelBlue","LightYellow","Lime","LimeGreen","Linen","Magenta","Maroon","MediumAquaMarine","MediumBlue","MediumOrchid","MediumPurple","MediumSeaGreen","MediumSlateBlue","MediumSpringGreen","MediumTurquoise","MediumVioletRed","MidnightBlue","MintCream","MistyRose","Moccasin","NavajoWhite","Navy","OldLace","Olive","OliveDrab","Orange","OrangeRed","Orchid","PaleGoldenRod","PaleGreen","PaleTurquoise","PaleVioletRed","PapayaWhip","PeachPuff","Peru","Pink","Plum","PowderBlue","Purple","RebeccaPurple","Red","RosyBrown","RoyalBlue","SaddleBrown","Salmon","SandyBrown","SeaGreen","SeaShell","Sienna","Silver","SkyBlue","SlateBlue","SlateGray","SlateGrey","Snow","SpringGreen","SteelBlue","Tan","Teal","Thistle","Tomato","Turquoise","Violet","Wheat","White","WhiteSmoke","Yellow","YellowGreen"].indexOf(o))!==-1&&(e=["ffffff","f0f8ff","faebd7","00ffff","7fffd4","f0ffff","f5f5dc","ffe4c4","000000","ffebcd","0000ff","8a2be2","a52a2a","deb887","5f9ea0","7fff00","d2691e","ff7f50","6495ed","fff8dc","dc143c","00ffff","00008b","008b8b","b8860b","a9a9a9","a9a9a9","006400","bdb76b","8b008b","556b2f","ff8c00","9932cc","8b0000","e9967a","8fbc8f","483d8b","2f4f4f","2f4f4f","00ced1","9400d3","ff1493","00bfff","696969","696969","1e90ff","b22222","fffaf0","228b22","ff00ff","dcdcdc","f8f8ff","ffd700","daa520","808080","808080","008000","adff2f","f0fff0","ff69b4","cd5c5c","4b0082","fffff0","f0e68c","e6e6fa","fff0f5","7cfc00","fffacd","add8e6","f08080","e0ffff","fafad2","d3d3d3","d3d3d3","90ee90","ffb6c1","ffa07a","20b2aa","87cefa","778899","778899","b0c4de","ffffe0","00ff00","32cd32","faf0e6","ff00ff","800000","66cdaa","0000cd","ba55d3","9370db","3cb371","7b68ee","00fa9a","48d1cc","c71585","191970","f5fffa","ffe4e1","ffe4b5","ffdead","000080","fdf5e6","808000","6b8e23","ffa500","ff4500","da70d6","eee8aa","98fb98","afeeee","db7093","ffefd5","ffdab9","cd853f","ffc0cb","dda0dd","b0e0e6","800080","663399","ff0000","bc8f8f","4169e1","8b4513","fa8072","f4a460","2e8b57","fff5ee","a0522d","c0c0c0","87ceeb","6a5acd","708090","708090","fffafa","00ff7f","4682b4","d2b48c","008080","d8bfd8","ff6347","40e0d0","ee82ee","f5deb3","ffffff","f5f5f5","ffff00","9acd32"][A]),s=e}else if(t["a:hslClr"]){var c=(i=t["a:hslClr"]).attrs,r=function(S,z,v){var K,V=2*v-(K=v<=.5?v*(z+1):v+z-v*z);return{r:255*wX(V,K,2+(S/=60)),g:255*wX(V,K,S),b:255*wX(V,K,S-2)}}(Number(c.hue)/1e5,Number(c.sat.indexOf("%")!==-1?c.sat.split("%").shift():c.sat)/100,Number(c.lum.indexOf("%")!==-1?c.lum.split("%").shift():c.lum)/100);s=Rr(r.r)+Rr(r.g)+Rr(r.b)}else if(t["a:sysClr"]){var h=U(i=t["a:sysClr"],["attrs","lastClr"]);h&&(s=h)}var b=!1,u=parseInt(U(i,["a:alpha","attrs","val"]))/1e5;if(!isNaN(u)){var m=Qg(s);m.setAlpha(u),s=m.toHex8(),b=!0}var Z=parseInt(U(i,["a:hueMod","attrs","val"]))/1e5;isNaN(Z)||(s=function(S,z,v){var K=Qg(S).toHsl(),V=K.h*z;return V>=360&&(V-=360),v?Qg({h:V,s:K.s,l:K.l,a:K.a}).toHex8():Qg({h:V,s:K.s,l:K.l,a:K.a}).toHex()}(s,Z,b));var p=parseInt(U(i,["a:lumMod","attrs","val"]))/1e5;isNaN(p)||(s=function(S,z,v){var K=Qg(S).toHsl(),V=K.l*z;return V>=1&&(V=1),v?Qg({h:K.h,s:K.s,l:V,a:K.a}).toHex8():Qg({h:K.h,s:K.s,l:V,a:K.a}).toHex()}(s,p,b));var Y=parseInt(U(i,["a:lumOff","attrs","val"]))/1e5;isNaN(Y)||(s=function(S,z,v){var K=Qg(S).toHsl(),V=z+K.l;return V>=1?v?Qg({h:K.h,s:K.s,l:1,a:K.a}).toHex8():Qg({h:K.h,s:K.s,l:1,a:K.a}).toHex():v?Qg({h:K.h,s:K.s,l:V,a:K.a}).toHex8():Qg({h:K.h,s:K.s,l:V,a:K.a}).toHex()}(s,Y,b));var R=parseInt(U(i,["a:satMod","attrs","val"]))/1e5;isNaN(R)||(s=function(S,z,v){var K=Qg(S).toHsl(),V=K.s*z;return V>=1&&(V=1),v?Qg({h:K.h,s:V,l:K.l,a:K.a}).toHex8():Qg({h:K.h,s:V,l:K.l,a:K.a}).toHex()}(s,R,b));var X=parseInt(U(i,["a:shade","attrs","val"]))/1e5;isNaN(X)||(s=function(S,z,v){var K=Qg(S).toHsl();z>=1&&(z=1);var V=Math.min(K.l*z,1);return v?Qg({h:K.h,s:K.s,l:V,a:K.a}).toHex8():Qg({h:K.h,s:K.s,l:V,a:K.a}).toHex()}(s,X,b));var H=parseInt(U(i,["a:tint","attrs","val"]))/1e5;return isNaN(H)||(s=Btg(s,H,b)),s&&s.indexOf("#")===-1&&(s="#"+s),s}function x0g(t,I){var g=typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(!g){if(Array.isArray(t)||(g=function(l,n){if(l){if(typeof l=="string")return gq(l,n);var a=Object.prototype.toString.call(l).slice(8,-1);if(a==="Object"&&l.constructor&&(a=l.constructor.name),a==="Map"||a==="Set")return Array.from(l);if(a==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return gq(l,n)}}(t))||I){g&&(t=g);var C=0,i=function(){};return{s:i,n:function(){return C>=t.length?{done:!0}:{done:!1,value:t[C++]}},e:function(l){throw l},f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
- In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var e,A=!0,s=!1;return{s:function(){g=g.call(t)},n:function(){var l=g.next();return A=l.done,l},e:function(l){s=!0,e=l},f:function(){try{A||g.return==null||g.return()}finally{if(s)throw e}}}}function gq(t,I){(I==null||I>t.length)&&(I=t.length);for(var g=0,C=new Array(I);g<I;g++)C[g]=t[g];return C}function Si(t,I){t.constructor!==Array&&(t=[t]);var g,C=[],i=x0g(t);try{for(i.s();!(g=i.n()).done;){var e=g.value,A=U(e,["c:spPr","a:solidFill","a:schemeClr"]);A||(A=U(e,["c:spPr","a:ln","a:solidFill","a:schemeClr"])),A||(A=U(e,["c:marker","c:spPr","a:ln","a:solidFill","a:schemeClr"]));var s=U(A,["attrs","val"]);if(s){s=U(I.themeContent,["a:theme","a:themeElements","a:clrScheme","a:".concat(s),"a:srgbClr","attrs","val"]);var l=U(A,["a:tint","attrs","val"])/1e5;s&&!isNaN(l)&&(s=Btg(s,l))}else s=U(e,["c:spPr","a:solidFill","a:srgbClr","attrs","val"]);s&&(s="#"+s),C.push(s)}}catch(n){i.e(n)}finally{i.f()}return C}function mi(t){var I=[];if(!t)return I;if(t["c:xVal"]){var g=[];Mr(t["c:xVal"]["c:numRef"]["c:numCache"]["c:pt"],function(C){return g.push(parseFloat(C["c:v"])),""}),I.push(g),g=[],Mr(t["c:yVal"]["c:numRef"]["c:numCache"]["c:pt"],function(C){return g.push(parseFloat(C["c:v"])),""}),I.push(g)}else Mr(t,function(C,i){var e=[],A=U(C,["c:tx","c:strRef","c:strCache","c:pt","c:v"])||i,s={};return U(C,["c:cat","c:strRef","c:strCache","c:pt"])?Mr(C["c:cat"]["c:strRef"]["c:strCache"]["c:pt"],function(l){return s[l.attrs.idx]=l["c:v"],""}):U(C,["c:cat","c:numRef","c:numCache","c:pt"])&&Mr(C["c:cat"]["c:numRef"]["c:numCache"]["c:pt"],function(l){return s[l.attrs.idx]=l["c:v"],""}),U(C,["c:val","c:numRef","c:numCache","c:pt"])&&Mr(C["c:val"]["c:numRef"]["c:numCache"]["c:pt"],function(l){return e.push({x:l.attrs.idx,y:parseFloat(l["c:v"])}),""}),I.push({key:A,values:e,xlabels:s}),""});return I}function j0g(t,I){var g=null;for(var C in t)switch(C){case"c:lineChart":g={type:"lineChart",data:mi(t[C]["c:ser"]),colors:Si(t[C]["c:ser"],I),grouping:U(t[C],["c:grouping","attrs","val"]),marker:!!t[C]["c:marker"]};break;case"c:line3DChart":g={type:"line3DChart",data:mi(t[C]["c:ser"]),colors:Si(t[C]["c:ser"],I),grouping:U(t[C],["c:grouping","attrs","val"])};break;case"c:barChart":g={type:"barChart",data:mi(t[C]["c:ser"]),colors:Si(t[C]["c:ser"],I),grouping:U(t[C],["c:grouping","attrs","val"]),barDir:U(t[C],["c:barDir","attrs","val"])};break;case"c:bar3DChart":g={type:"bar3DChart",data:mi(t[C]["c:ser"]),colors:Si(t[C]["c:ser"],I),grouping:U(t[C],["c:grouping","attrs","val"]),barDir:U(t[C],["c:barDir","attrs","val"])};break;case"c:pieChart":g={type:"pieChart",data:mi(t[C]["c:ser"]),colors:Si(t[C]["c:ser"]["c:dPt"],I)};break;case"c:pie3DChart":g={type:"pie3DChart",data:mi(t[C]["c:ser"]),colors:Si(t[C]["c:ser"]["c:dPt"],I)};break;case"c:doughnutChart":g={type:"doughnutChart",data:mi(t[C]["c:ser"]),colors:Si(t[C]["c:ser"]["c:dPt"],I),holeSize:U(t[C],["c:holeSize","attrs","val"])};break;case"c:areaChart":g={type:"areaChart",data:mi(t[C]["c:ser"]),colors:Si(t[C]["c:ser"],I),grouping:U(t[C],["c:grouping","attrs","val"])};break;case"c:area3DChart":g={type:"area3DChart",data:mi(t[C]["c:ser"]),colors:Si(t[C]["c:ser"],I),grouping:U(t[C],["c:grouping","attrs","val"])};break;case"c:scatterChart":g={type:"scatterChart",data:mi(t[C]["c:ser"]),colors:Si(t[C]["c:ser"],I),style:U(t[C],["c:scatterStyle","attrs","val"])};break;case"c:bubbleChart":g={type:"bubbleChart",data:mi(t[C]["c:ser"]),colors:Si(t[C]["c:ser"],I)};break;case"c:radarChart":g={type:"radarChart",data:mi(t[C]["c:ser"]),colors:Si(t[C]["c:ser"],I),style:U(t[C],["c:radarStyle","attrs","val"])};break;case"c:surfaceChart":g={type:"surfaceChart",data:mi(t[C]["c:ser"]),colors:Si(t[C]["c:ser"],I)};break;case"c:surface3DChart":g={type:"surface3DChart",data:mi(t[C]["c:ser"]),colors:Si(t[C]["c:ser"],I)};break;case"c:stockChart":g={type:"stockChart",data:mi(t[C]["c:ser"]),colors:[]}}return g}function Q0g(t,I,g,C){var i=U(t,["a:pPr","attrs","algn"]);if(i||(i=U(I,["a:pPr","attrs","algn"])),!i)if(g==="title"||g==="ctrTitle"||g==="subTitle"){var e=1,A=U(I,["a:pPr","attrs","lvl"]);A&&(e=parseInt(A)+1);var s="a:lvl"+e+"pPr";(i=U(C,["slideLayoutTables","typeTable",g,"p:txBody","a:lstStyle",s,"attrs","algn"]))||(i=U(C,["slideMasterTables","typeTable",g,"p:txBody","a:lstStyle",s,"attrs","algn"])),i||(i=U(C,["slideMasterTextStyles","p:titleStyle",s,"attrs","algn"])),i||g!=="subTitle"||(i=U(C,["slideMasterTextStyles","p:bodyStyle",s,"attrs","algn"]))}else i=U(C,g==="body"?["slideMasterTextStyles","p:bodyStyle","a:lvl1pPr","attrs","algn"]:["slideMasterTables","typeTable",g,"p:txBody","a:lstStyle","a:lvl1pPr","attrs","algn"]);var l="left";if(i)switch(i){case"l":l="left";break;case"r":l="right";break;case"ctr":l="center";break;case"just":case"dist":l="justify";break;default:l="inherit"}return l}function O0g(t,I,g){var C=U(t,["p:txBody","a:bodyPr","attrs","anchor"]);return C||(C=U(I,["p:txBody","a:bodyPr","attrs","anchor"]))||(C=U(g,["p:txBody","a:bodyPr","attrs","anchor"]))||(C="t"),C==="ctr"?"mid":C==="b"?"down":"up"}function U0g(t,I,g){function C(s){if(!s)return null;if(s["a:noAutofit"])return{result:null};if(s["a:spAutoFit"])return{result:{type:"shape"}};if(s["a:normAutofit"]){var l=U(s["a:normAutofit"],["attrs","fontScale"]);return l?{result:{type:"text",fontScale:parseInt(l)/1e3}}:{result:{type:"text"}}}return null}var i=C(U(t,["p:txBody","a:bodyPr"]));if(i)return i.result;var e=C(U(I,["p:txBody","a:bodyPr"]));if(e)return e.result;var A=C(U(g,["p:txBody","a:bodyPr"]));return A?A.result:null}var wg=72/914400;function w0(t,I,g){var C;return t?C=t["a:off"].attrs:I?C=I["a:off"].attrs:g&&(C=g["a:off"].attrs),C?{top:Dt(parseInt(C.y)*wg),left:Dt(parseInt(C.x)*wg)}:{top:0,left:0}}function p0(t,I,g){var C;return t?C=t["a:ext"].attrs:I?C=I["a:ext"].attrs:g&&(C=g["a:ext"].attrs),C?{width:Dt(parseInt(C.cx)*wg),height:Dt(parseInt(C.cy)*wg)}:{width:0,height:0}}function E0g(t,I){return function(g){if(Array.isArray(g))return g}(t)||function(g,C){var i=g==null?null:typeof Symbol<"u"&&g[Symbol.iterator]||g["@@iterator"];if(i!=null){var e,A,s=[],l=!0,n=!1;try{for(i=i.call(g);!(l=(e=i.next()).done)&&(s.push(e.value),!C||s.length!==C);l=!0);}catch(a){n=!0,A=a}finally{try{l||i.return==null||i.return()}finally{if(n)throw A}}return s}}(t,I)||kIg(t,I)||function(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
- In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function Ntg(t,I){var g=IC(t,void 0,void 0,I),C=t.attrs,i=C.dir?parseInt(C.dir)/6e4:0,e=C.dist?parseInt(C.dist)*wg:0,A=C.blurRad?parseInt(C.blurRad)*wg:"",s=e*Math.sin(i*Math.PI/180);return{h:e*Math.cos(i*Math.PI/180),v:s,blur:A,color:g}}function Iq(t,I){var g=Object.keys(t);if(Object.getOwnPropertySymbols){var C=Object.getOwnPropertySymbols(t);I&&(C=C.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),g.push.apply(g,C)}return g}function Is(t){for(var I=1;I<arguments.length;I++){var g=arguments[I]!=null?arguments[I]:{};I%2?Iq(Object(g),!0).forEach(function(C){h9(t,C,g[C])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(g)):Iq(Object(g)).forEach(function(C){Object.defineProperty(t,C,Object.getOwnPropertyDescriptor(g,C))})}return t}function Cq(t,I){var g=typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(!g){if(Array.isArray(t)||(g=function(l,n){if(l){if(typeof l=="string")return tq(l,n);var a=Object.prototype.toString.call(l).slice(8,-1);if(a==="Object"&&l.constructor&&(a=l.constructor.name),a==="Map"||a==="Set")return Array.from(l);if(a==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return tq(l,n)}}(t))||I){g&&(t=g);var C=0,i=function(){};return{s:i,n:function(){return C>=t.length?{done:!0}:{done:!1,value:t[C++]}},e:function(l){throw l},f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
- In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var e,A=!0,s=!1;return{s:function(){g=g.call(t)},n:function(){var l=g.next();return A=l.done,l},e:function(l){s=!0,e=l},f:function(){try{A||g.return==null||g.return()}finally{if(s)throw e}}}}function tq(t,I){(I==null||I>t.length)&&(I=t.length);for(var g=0,C=new Array(I);g<I;g++)C[g]=t[g];return C}function lV(t,I,g,C,i){if(!t)return"";var e,A="",s=U(I,["p:style","a:fontRef"]),l=t["a:p"],n=l.constructor===Array?l:[l],a=null,d=new Map,o=Cq(n);try{for(o.s();!(e=o.n()).done;){var c=e.value,r=c["a:r"],h=c["a:fld"],b=c["a:br"];r&&(r=r.constructor===Array?r:[r],h&&(h=h.constructor===Array?h:[h],r=r.concat(h)),b&&((b=b.constructor===Array?b:[b]).forEach(function(G){return G.type="br"}),b.length>1&&b.shift(),(r=r.concat(b)).sort(function(G,w){return!G.attrs||!w.attrs||G.attrs.order-w.attrs.order})));var u=Q0g(c,I,C,i),m=P0g(c,t,g,C,i);if(m){var Z=_0g(m);if(!a||a.key!==Z){a&&(A+="</".concat(a.tag,">")),A+="<".concat(m.tag,' style="list-style: none; padding-left: 0; margin: 0;">');var p=m.kind==="autoNum"?d.has(Z)?d.get(Z):m.startAt:null;a={key:Z,tag:m.tag,listInfo:m,counter:p}}var Y=$0g(a);a.listInfo.kind==="autoNum"&&d.set(a.key,a.counter);var R=q0g(a.listInfo),X=1.5*(m.lvl-1);A+='<li style="text-align: '.concat(u,"; margin-left: ").concat(X,'em;"><span style="').concat(R,'">').concat(Y,"</span>")}else a&&(A+="</".concat(a.tag,">"),a=null,d.clear()),A+='<p style="text-align: '.concat(u,';">');if(r){var H,S=null,z="",v=Cq(r);try{for(v.s();!(H=v.n()).done;){var K=Vtg(H.value,c,t,s,g,C,i);if(!S||S.styleText!==K.styleText||S.hasLink!==K.hasLink||K.hasLink){if(z){var V=z.replace(/\t/g," ").replace(/\s/g," ");A+='<span style="'.concat(S.styleText,'">').concat(V,"</span>"),z=""}if(K.hasLink){var N=K.text.replace(/\t/g," ").replace(/\s/g," ");A+='<span style="'.concat(K.styleText,'"><a href="').concat(K.linkURL,'" target="_blank">').concat(N,"</a></span>"),S=null}else S=K,z=K.text}else z+=K.text}}catch(G){v.e(G)}finally{v.f()}if(z&&S){var B=z.replace(/\t/g," ").replace(/\s/g," ");A+='<span style="'.concat(S.styleText,'">').concat(B,"</span>")}}else A+=gbg(c,I,t,s,g,C,i);A+=m?"</li>":"</p>"}}catch(G){o.e(G)}finally{o.f()}return a&&(A+="</".concat(a.tag,">")),A}function P0g(t,I,g,C,i){var e=t["a:pPr"];if(!e||e["a:buNone"])return null;var A=1,s=U(e,["attrs","lvl"]);s!==void 0&&(A=parseInt(s)+1);var l=Ru(e);if(l)return Is(Is({},l),{},{lvl:A});var n=Ru(U(I,["a:lstStyle","a:lvl".concat(A,"pPr")]));if(n)return Is(Is({},n),{},{lvl:A});var a=Ru(U(g,["p:txBody","a:lstStyle","a:lvl".concat(A,"pPr")]));if(a)return Is(Is({},a),{},{lvl:A});var d=i&&i.slideMasterTextStyles;if(d){var o=function(h,b){return b?h==="title"||h==="ctrTitle"?"p:titleStyle":h==="subTitle"?b["p:titleStyle"]?"p:titleStyle":"p:bodyStyle":h==="body"?"p:bodyStyle":"p:otherStyle":null}(C,d);if(o){var c=Ru(U(d,[o,"a:lvl".concat(A,"pPr")]));if(c)return Is(Is({},c),{},{lvl:A});var r=Ru(U(d,[o,"a:lvl1pPr"]));if(r)return Is(Is({},r),{},{lvl:A})}}return null}function Ru(t){if(!t||t["a:buNone"])return null;if(t["a:buChar"])return{kind:"char",tag:"ul",char:U(t,["a:buChar","attrs","char"])||"•",font:U(t,["a:buFont","attrs","typeface"])||""};if(t["a:buAutoNum"]){var I=t["a:buAutoNum"],g=U(I,["attrs","type"])||"arabicPeriod",C=U(I,["attrs","startAt"]),i=C?parseInt(C):1,e=U(t,["a:buFont","attrs","typeface"])||"";return{kind:"autoNum",tag:"ol",numType:g,startAt:isNaN(i)?1:i,font:e}}return null}function _0g(t){return t?t.kind==="autoNum"?"".concat(t.tag,":").concat(t.kind,":").concat(t.numType,":").concat(t.startAt,":").concat(t.lvl,":").concat(t.font):"".concat(t.tag,":").concat(t.kind,":").concat(t.char,":").concat(t.lvl,":").concat(t.font):""}function q0g(t){var I="display: inline-block; min-width: 1.4em; margin-right: 0.4em;";return t.font&&(I+="font-family: ".concat(t.font,";")),I}function $0g(t){var I=t.listInfo;if(I.kind==="char")return sV(I.char);var g=t.counter;return t.counter+=1,sV(function(C,i){if(/circle/i.test(i))return function(d){var o=parseInt(d);return isNaN(o)||o<=0?String(d):o>=1&&o<=20?String.fromCharCode(o-1+9312):o>=21&&o<=35?String.fromCharCode(o-21+12881):o>=36&&o<=50?String.fromCharCode(o-36+12977):String(o)}(C);var e,A=String(i||"").toLowerCase(),s=A.includes("chs")||A.includes("cht"),l=i.includes("ParenBoth"),n="";if(l||(i.includes("ParenR")?n=")":i.includes("Period")?n=".":i.includes("Comma")&&(n=",")),e=i.includes("alphaLc")?iq(C,!1):i.includes("alphaUc")?iq(C,!0):i.includes("romanLc")?eq(C,!1):i.includes("romanUc")?eq(C,!0):s?function(d,o,c){var r=parseInt(d);if(isNaN(r)||r<=0)return String(d);var h=c?["零","一","二","三","四","五","六","七","八","九"]:["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"],b=c?["","拾","佰","仟"]:["","十","百","千"],u=o?["","萬","億","兆"]:["","万","亿","兆"],m=function(S){var z=S%1e4;if(z===0)return"";for(var v=[],K=[Math.floor(z/1e3),Math.floor(z%1e3/100),Math.floor(z%100/10),z%10],V=[b[3],b[2],b[1],b[0]],N=!1,B=0;B<K.length;B++){var G=K[B],w=V[B],W=B===K.length-1;G!==0?(N&&(v.push(h[0]),N=!1),w===b[1]&&G===1&&v.length===0?v.push(w):v.push(h[G]+w)):!W&&v.length&&K.slice(B+1).some(function(y){return y!==0})&&(N=!0)}return v.join("")};if(r<1e4)return m(r);for(var Z=[],p=r;p>0;)Z.push(p%1e4),p=Math.floor(p/1e4);for(var Y="",R=Z.length-1;R>=0;R--){var X=Z[R];if(X!==0){if(Y){var H=Y.endsWith(h[0]);!H&&X<1e3&&(Y+=h[0]),H&&X>=1e3&&(Y=Y.slice(0,-h[0].length))}Y+=m(X)+(u[R]||"")}else Y&&!Y.endsWith(h[0])&&(Y+=h[0])}return(Y=Y.replace(/零+$/g,""))||h[0]}(C,A.includes("cht"),A.includes("db")):String(C),l)return"(".concat(e,")");var a=s&&n==="."?"、":n;return"".concat(e).concat(a)}(g,I.numType))}function iq(t,I){for(var g=t,C="";g>0;)g-=1,C=String.fromCharCode(g%26+65)+C,g=Math.floor(g/26);return I?C:C.toLowerCase()}function eq(t,I){for(var g="",C=Math.max(1,Math.min(3999,t)),i=0,e=[[1e3,"M"],[900,"CM"],[500,"D"],[400,"CD"],[100,"C"],[90,"XC"],[50,"L"],[40,"XL"],[10,"X"],[9,"IX"],[5,"V"],[4,"IV"],[1,"I"]];i<e.length;i++)for(var A=E0g(e[i],2),s=A[0],l=A[1];C>=s;)g+=l,C-=s;return I?g:g.toLowerCase()}function gbg(t,I,g,C,i,e,A){var s=Vtg(t,I,g,C,i,e,A),l=s.styleText,n=s.text,a=s.hasLink,d=s.linkURL,o=n.replace(/\t/g," ").replace(/\s/g," ");return a?'<span style="'.concat(l,'"><a href="').concat(d,'" target="_blank">').concat(o,"</a></span>"):'<span style="'.concat(l,'">').concat(o,"</span>")}function Vtg(t,I,g,C,i,e,A){var s=g["a:lstStyle"],l=A.slideMasterTextStyles,n=1,a=U(I["a:pPr"],["attrs","lvl"]);a!==void 0&&(n=parseInt(a)+1);var d=t["a:t"];typeof d!="string"&&(d=U(t,["a:fld","a:t"])),typeof d!="string"&&(d=" ");var o=U(t,["attrs","type"])||U(t,["a:fld","attrs","type"]),c=typeof o=="string"?o.toLowerCase():"";if(c==="slidenum"&&A&&A.slideNo!==void 0&&A.slideNo!==null)d=String(A.slideNo);else if(c.startsWith("datetime")){var r=typeof d=="string"?d.replace(/\s+/g," ").trim():"";if(!r||r==="日期"||r.toLowerCase()==="date"){var h=new Date,b=String(h.getFullYear()),u=String(h.getMonth()+1).padStart(2,"0"),m=String(h.getDate()).padStart(2,"0");d="".concat(b,"-").concat(u,"-").concat(m)}}var Z=typeof d=="string"?d.replace(/\s+/g," ").trim():"";if(e!=="sldNum"||Z!=="<#>"&&Z!=="#"||!A||A.slideNo===void 0||A.slideNo===null){if(e==="dt"&&(Z==="日期"||Z.toLowerCase()==="date")){var p=new Date,Y=String(p.getFullYear()),R=String(p.getMonth()+1).padStart(2,"0"),X=String(p.getDate()).padStart(2,"0");d="".concat(Y,"-").concat(R,"-").concat(X)}}else d=String(A.slideNo);var H="",S=function(P,L,E,J,k,j){var q,tg,Cg=U(P,["a:rPr"]);if(Cg&&((q=ps(Cg))==="SOLID_FILL"&&(tg=IC(Cg["a:solidFill"],void 0,void 0,j)),q==="GRADIENT_FILL"))return M9(Cg["a:gradFill"],j);if(!tg&&U(E,["a:lvl"+k+"pPr","a:defRPr"])){var x=U(E,["a:lvl"+k+"pPr","a:defRPr"]);(q=ps(x))==="SOLID_FILL"&&(tg=IC(x["a:solidFill"],void 0,void 0,j))}if(!tg){var sg=U(L,["p:style","a:fontRef"]);sg&&(tg=IC(sg,void 0,void 0,j)),!tg&&J&&(tg=IC(J,void 0,void 0,j))}return tg||""}(t,I,s,C,n,A),z=function(P,L,E,J,k,j,q){var tg,Cg=1;if(q){var x=U(q,["a:pPr","attrs","lvl"]);x!==void 0&&(Cg=parseInt(x)+1)}if(U(P,["a:rPr","attrs","sz"])&&(tg=U(P,["a:rPr","attrs","sz"])/100),!isNaN(tg)&&tg||!q||U(q,["a:endParaRPr","attrs","sz"])&&(tg=U(q,["a:endParaRPr","attrs","sz"])/100),(isNaN(tg)||!tg)&&j){var sg=U(j,["a:lstStyle"]);if(sg){var Ag=U(sg,["a:lvl".concat(Cg,"pPr"),"a:defRPr","attrs","sz"]);Ag&&(tg=parseInt(Ag)/100)}}if((isNaN(tg)||!tg)&&L){var O=U(L,["p:txBody","a:lstStyle","a:lvl".concat(Cg,"pPr"),"a:defRPr","attrs","sz"]);O&&(tg=parseInt(O)/100)}if((isNaN(tg)||!tg)&&L){var _=U(L,["p:txBody","a:lstStyle","a:lvl1pPr","a:defRPr","attrs","sz"]);_&&(tg=parseInt(_)/100)}if((isNaN(tg)||!tg)&&q){var Ig=U(q,["a:pPr","a:defRPr","attrs","sz"]);Ig&&(tg=parseInt(Ig)/100)}if(isNaN(tg)||!tg)if(E==="dt"||E==="sldNum")tg=12;else{var ng,ag="a:lvl".concat(Cg,"pPr"),lg=function(dg){var hg=U(J,[dg,ag,"a:defRPr","attrs","sz"]);if(hg)return parseInt(hg)/100;var rg=U(J,[dg,"a:lvl1pPr","a:defRPr","attrs","sz"]);return rg?parseInt(rg)/100:null};E==="title"||E==="ctrTitle"?ng=lg("p:titleStyle"):E==="subTitle"?(ng=lg("p:titleStyle"))===null&&(ng=lg("p:bodyStyle")):ng=lg(E==="body"?"p:bodyStyle":"p:otherStyle"),ng!==null&&(tg=ng)}if(isNaN(tg)||!tg){var cg=U(k,["a:lvl".concat(Cg,"pPr"),"a:defRPr","attrs","sz"])||U(k,["a:defPPr","a:defRPr","attrs","sz"]);cg&&(tg=parseInt(cg)/100)}return(tg=isNaN(tg)||!tg?18:tg)+"px"}(t,i,e,l,A.defaultTextStyle,g,I),v=function(P,L,E){var J=U(P,["a:t"]),k=typeof J=="string"&&/[\u3040-\u30ff\u3400-\u9fff\uf900-\ufaff]/.test(J),j=(k?U(P,["a:rPr","a:ea","attrs","typeface"]):null)||U(P,["a:rPr","a:latin","attrs","typeface"])||U(P,["a:rPr","a:ea","attrs","typeface"])||U(P,["a:rPr","a:cs","attrs","typeface"]);if(!j){var q,tg=U(E.themeContent,["a:theme","a:themeElements","a:fontScheme"]);q=U(tg,L==="title"||L==="subTitle"||L==="ctrTitle"?["a:majorFont"]:["a:minorFont"]),j=(k?U(q,["a:ea","attrs","typeface"]):null)||U(q,["a:latin","attrs","typeface"])||U(q,["a:ea","attrs","typeface"])||U(q,["a:cs","attrs","typeface"])}return j||""}(t,e,A),K=function(P){return U(P,["a:rPr","attrs","b"])==="1"?"bold":""}(t),V=function(P){return U(P,["a:rPr","attrs","i"])==="1"?"italic":""}(t),N=function(P){return U(P,["a:rPr","attrs","u"])==="sng"?"underline":""}(t),B=function(P){return U(P,["a:rPr","attrs","strike"])==="sngStrike"?"line-through":""}(t),G=function(P){var L=U(P,["a:rPr","attrs","spc"]);return L?parseInt(L)/100+"pt":""}(t),w=function(P,L){var E=U(P,["a:rPr","a:effectLst","a:outerShdw"]);if(E){var J=Ntg(E,L);if(J){var k=J.h,j=J.v,q=J.blur,tg=J.color;if(!isNaN(j)&&!isNaN(k))return k+"pt "+j+"pt "+(q?q+"pt":"")+" "+tg}}return""}(t,A),W=function(P){var L=U(P,["a:rPr","attrs","baseline"]);return L?parseInt(L)>0?"super":"sub":""}(t);if(S){if(typeof S=="string")H+="color: ".concat(S,";");else if(S.colors){var y=S.colors,f=S.rot,D=y.map(function(P){return"".concat(P.color," ").concat(P.pos)}).join(", "),F="linear-gradient(".concat(f+90,"deg, ").concat(D,")");H+="background: ".concat(F,"; background-clip: text; color: transparent;")}}z&&(H+="font-size: ".concat(z,";")),v&&(H+="font-family: ".concat(v,";")),K&&(H+="font-weight: ".concat(K,";")),V&&(H+="font-style: ".concat(V,";")),N&&(H+="text-decoration: ".concat(N,";")),B&&(H+="text-decoration-line: ".concat(B,";")),G&&(H+="letter-spacing: ".concat(G,";")),W&&(H+="vertical-align: ".concat(W,";")),w&&(H+="text-shadow: ".concat(w,";"));var T=U(t,["a:rPr","a:hlinkClick","attrs","r:id"]),Q=T&&A.slideResObj[T];return{styleText:H,text:d,hasLink:Q,linkURL:Q?A.slideResObj[T].target:null}}function Ibg(t,I,g,C,i,e,A){var s,l=i;if(e>=i)for(;l<=e;){var n=l*(Math.PI/180),a=t+Math.cos(n)*g,d=I+Math.sin(n)*C;l===i&&(s=" M"+a+" "+d),s+=" L"+a+" "+d,l++}else for(;l>e;){var o=l*(Math.PI/180),c=t+Math.cos(o)*g,r=I+Math.sin(o)*C;l===i&&(s=" M "+c+" "+r),s+=" L "+c+" "+r,l--}return s+=""}function Cbg(t,I,g){var C=U(t,["a:pathLst"]),i=U(C,["a:path"]);Array.isArray(i)&&(i=i.shift());var e=parseInt(i.attrs.w),A=parseInt(i.attrs.h),s=e===0?0:1/e*I,l=A===0?0:1/A*g,n="",a=U(i,["a:moveTo"]),d=i["a:lnTo"],o=i["a:cubicBezTo"],c=i["a:arcTo"],r=U(i,["a:close"]);Array.isArray(a)||(a=[a]);var h=[];if(a.length>0){if(Object.keys(a).forEach(function(N){var B=a[N]["a:pt"];B&&Object.keys(B).forEach(function(G){var w=B[G],W=w.x,y=w.y,f=w.order;h.push({type:"movto",x:W,y,order:f})})}),d&&(Array.isArray(d)||(d=[d]),Object.keys(d).forEach(function(N){var B=d[N]["a:pt"];B&&Object.keys(B).forEach(function(G){var w=B[G],W=w.x,y=w.y,f=w.order;h.push({type:"lnto",x:W,y,order:f})})})),o){var b=[];Array.isArray(o)||(o=[o]),Object.keys(o).forEach(function(N){b.push(o[N]["a:pt"])}),b.forEach(function(N){var B=[];N.forEach(function(w){var W={x:w.attrs.x,y:w.attrs.y};B.push(W)});var G=N[0].attrs.order;h.push({type:"cubicBezTo",cubBzPt:B,order:G})})}if(c){var u=c.attrs,m=u.order,Z=u.hR,p=u.wR,Y=u.stAng,R=u.swAng,X=0,H=0,S=U(c,["a:pt","attrs"]);S&&(X=S.x,H=S.y),h.push({type:"arcTo",hR:Z,wR:p,stAng:Y,swAng:R,shftX:X,shftY:H,order:m})}r&&(Array.isArray(r)||(r=[r]),Object.keys(r).forEach(function(){h.push({type:"close",order:1/0})})),h.sort(function(N,B){return N.order-B.order});for(var z=0;z<h.length;){if(h[z].type==="movto")n+=" M"+parseInt(h[z].x)*s+","+parseInt(h[z].y)*l;else if(h[z].type==="lnto")n+=" L"+parseInt(h[z].x)*s+","+parseInt(h[z].y)*l;else if(h[z].type==="cubicBezTo")n+=" C"+parseInt(h[z].cubBzPt[0].x)*s+","+parseInt(h[z].cubBzPt[0].y)*l+" "+parseInt(h[z].cubBzPt[1].x)*s+","+parseInt(h[z].cubBzPt[1].y)*l+" "+parseInt(h[z].cubBzPt[2].x)*s+","+parseInt(h[z].cubBzPt[2].y)*l;else if(h[z].type==="arcTo"){var v=parseInt(h[z].hR)*s,K=parseInt(h[z].wR)*l,V=parseInt(h[z].stAng)/6e4;n+=Ibg(K,v,K,v,V,V+parseInt(h[z].swAng)/6e4)}else h[z].type==="close"&&(n+="z");z++}}return n}function tbg(t,I){var g={};if(t["a:bottom"]){var C=Ns({"p:spPr":{"a:ln":t["a:bottom"]["a:ln"]}},void 0,I);g.bottom=C}if(t["a:top"]){var i=Ns({"p:spPr":{"a:ln":t["a:top"]["a:ln"]}},void 0,I);g.top=i}if(t["a:right"]){var e=Ns({"p:spPr":{"a:ln":t["a:right"]["a:ln"]}},void 0,I);g.right=e}if(t["a:left"]){var A=Ns({"p:spPr":{"a:ln":t["a:left"]["a:ln"]}},void 0,I);g.left=A}return g}function Aq(t,I,g,C){return Mtg.apply(this,arguments)}function Mtg(){return(Mtg=RC(rI.mark(function t(I,g,C,i){var e,A,s,l,n,a,d,o,c,r,h,b,u,m,Z,p,Y;return rI.wrap(function(R){for(;;)switch(R.prev=R.next){case 0:if(e=U(I,["attrs","rowSpan"]),A=U(I,["attrs","gridSpan"]),s=U(I,["attrs","vMerge"]),l=U(I,["attrs","hMerge"]),!(o=U(I,["a:tcPr"]))){R.next=11;break}return c={"p:spPr":o},R.next=9,Ytg(c,void 0,!1,i,"slide");case 9:(r=R.sent)&&r.type==="color"&&r.value&&(n=r.value);case 11:return n||(C&&(h=U(g,[C,"a:tcStyle","a:fill","a:solidFill"])),h&&(n=IC(h,void 0,void 0,i))),C&&(b=U(g,[C,"a:tcTxStyle"])),b&&(a=IC(b,void 0,void 0,i),U(b,["attrs","b"])==="on"&&(d=!0)),(u=U(I,["a:tcPr","a:lnB"]))||(C&&(u=U(g[C],["a:tcStyle","a:tcBdr","a:bottom","a:ln"])),u||(u=U(g,["a:wholeTbl","a:tcStyle","a:tcBdr","a:bottom","a:ln"]))),(m=U(I,["a:tcPr","a:lnT"]))||(C&&(m=U(g[C],["a:tcStyle","a:tcBdr","a:top","a:ln"])),m||(m=U(g,["a:wholeTbl","a:tcStyle","a:tcBdr","a:top","a:ln"]))),(Z=U(I,["a:tcPr","a:lnL"]))||(C&&(Z=U(g[C],["a:tcStyle","a:tcBdr","a:left","a:ln"])),Z||(Z=U(g,["a:wholeTbl","a:tcStyle","a:tcBdr","a:left","a:ln"]))),(p=U(I,["a:tcPr","a:lnR"]))||(C&&(p=U(g[C],["a:tcStyle","a:tcBdr","a:right","a:ln"])),p||(p=U(g,["a:wholeTbl","a:tcStyle","a:tcBdr","a:right","a:ln"]))),Y={},u&&(Y.bottom=Ns(u,void 0,i)),m&&(Y.top=Ns(m,void 0,i)),Z&&(Y.left=Ns(Z,void 0,i)),p&&(Y.right=Ns(p,void 0,i)),R.abrupt("return",{fillColor:n,fontColor:a,fontBold:d,borders:Y,rowSpan:e?+e:void 0,colSpan:A?+A:void 0,vMerge:s?+s:void 0,hMerge:l?+l:void 0});case 28:case"end":return R.stop()}},t)}))).apply(this,arguments)}function ibg(t,I,g,C,i){var e,A,s;if(C&&C["a:wholeTbl"]){var l=U(C,["a:wholeTbl","a:tcStyle","a:fill","a:solidFill"]);if(l){var n=IC(l,void 0,void 0,i);n&&(e=n)}var a=U(C,["a:wholeTbl","a:tcTxStyle"]);if(a){var d=IC(a,void 0,void 0,i);d&&(A=d),U(a,["attrs","b"])==="on"&&(s=!0)}}if(I===0&&g.isFrstRowAttr===1&&C){var o=U(C,["a:firstRow","a:tcStyle","a:fill","a:solidFill"]);if(o){var c=IC(o,void 0,void 0,i);c&&(e=c)}var r=U(C,["a:firstRow","a:tcTxStyle"]);if(r){var h=IC(r,void 0,void 0,i);h&&(A=h),U(r,["attrs","b"])==="on"&&(s=!0)}}else if(I>0&&g.isBandRowAttr===1&&C){if(e="",I%2==0&&C["a:band2H"]){var b=U(C,["a:band2H","a:tcStyle","a:fill","a:solidFill"]);if(b){var u=IC(b,void 0,void 0,i);u&&(e=u)}var m=U(C,["a:band2H","a:tcTxStyle"]);if(m){var Z=IC(m,void 0,void 0,i);Z&&(A=Z)}U(m,["attrs","b"])==="on"&&(s=!0)}if(I%2!=0&&C["a:band1H"]){var p=U(C,["a:band1H","a:tcStyle","a:fill","a:solidFill"]);if(p){var Y=IC(p,void 0,void 0,i);Y&&(e=Y)}var R=U(C,["a:band1H","a:tcTxStyle"]);if(R){var X=IC(R,void 0,void 0,i);X&&(A=X),U(R,["attrs","b"])==="on"&&(s=!0)}}}if(I===t.length-1&&g.isLstRowAttr===1&&C){var H=U(C,["a:lastRow","a:tcStyle","a:fill","a:solidFill"]);if(H){var S=IC(H,void 0,void 0,i);S&&(e=S)}var z=U(C,["a:lastRow","a:tcTxStyle"]);if(z){var v=IC(z,void 0,void 0,i);v&&(A=v),U(z,["attrs","b"])==="on"&&(s=!0)}}return{fillColor:e,fontColor:A,fontBold:s}}function Rtg(t){var I=[];return La(t)!=="object"||(t["m:oMath"]&&(I=I.concat(t["m:oMath"])),Object.values(t).forEach(function(g){(Array.isArray(g)||La(g)==="object")&&(I=I.concat(Rtg(g)))})),I}function sq(t,I){var g=VC(t["m:e"]),C=VC(t["m:lim"]);return I==="low"?"".concat(g,"_{").concat(C,"}"):"".concat(g,"^{").concat(C,"}")}function VC(t){if(!t)return"";if(Array.isArray(t))return t.map(function(A){return VC(A)}).join("");for(var I=[],g=Object.keys(t),C=function(){var A=e[i];Array.isArray(t[A])?I.push.apply(I,r9(t[A].map(function(s){return{key:A,value:s}}))):I.push({key:A,value:t[A]})},i=0,e=g;i<e.length;i++)C();return I.sort(function(A,s){var l=0;A.key==="m:r"&&A.value&&A.value["a:rPr"]?l=A.value["a:rPr"].attrs.order:A.value["".concat(A.key,"Pr")]&&A.value["".concat(A.key,"Pr")]["m:ctrlPr"]&&A.value["".concat(A.key,"Pr")]["m:ctrlPr"]["a:rPr"]&&(l=A.value["".concat(A.key,"Pr")]&&A.value["".concat(A.key,"Pr")]["m:ctrlPr"]&&A.value["".concat(A.key,"Pr")]["m:ctrlPr"]["a:rPr"]&&A.value["".concat(A.key,"Pr")]["m:ctrlPr"]["a:rPr"].attrs.order);var n=0;return s.key==="m:r"&&s.value&&s.value["a:rPr"]?n=s.value["a:rPr"].attrs.order:s.value["".concat(s.key,"Pr")]&&s.value["".concat(s.key,"Pr")]["m:ctrlPr"]&&s.value["".concat(s.key,"Pr")]["m:ctrlPr"]["a:rPr"]&&(n=s.value["".concat(s.key,"Pr")]&&s.value["".concat(s.key,"Pr")]["m:ctrlPr"]&&s.value["".concat(s.key,"Pr")]["m:ctrlPr"]["a:rPr"]&&s.value["".concat(s.key,"Pr")]["m:ctrlPr"]["a:rPr"].attrs.order),l-n}),I.map(function(A){var s,l,n,a,d,o,c,r,h,b,u,m,Z,p,Y,R,X,H=A.key,S=A.value;return H==="m:f"?(l=VC((s=S)["m:num"]),n=VC(s["m:den"]),"\\frac{".concat(l,"}{").concat(n,"}")):H==="m:sSup"?(d=VC((a=S)["m:e"]),o=VC(a["m:sup"]),"".concat(d,"^{").concat(o,"}")):H==="m:sSub"?function(z){var v=VC(z["m:e"]),K=VC(z["m:sub"]);return"".concat(v,"_{").concat(K,"}")}(S):H==="m:rad"?(r=VC((c=S)["m:deg"]),h=VC(c["m:e"]),r?"\\sqrt[".concat(r,"]{").concat(h,"}"):"\\sqrt{".concat(h,"}")):H==="m:nary"?function(z){var v=U(z,["m:naryPr","m:chr","attrs","m:val"])||"∫",K=VC(z["m:sub"]),V=VC(z["m:sup"]),N=VC(z["m:e"]);return"".concat(v,"_{").concat(K,"}^{").concat(V,"}{").concat(N,"}")}(S):H==="m:limLow"?sq(S,"low"):H==="m:limUpp"?sq(S,"upp"):H==="m:d"?function(z){var v=U(z,["m:dPr","m:begChr","attrs","m:val"]),K=U(z,["m:dPr","m:endChr","attrs","m:val"]);v||K||(v="(",K=")"),v&&K&&(v="\\left".concat(v),K="\\right".concat(K));var V=VC(z["m:e"]);return"".concat(v).concat(V).concat(K)}(S):H==="m:func"?(u=VC((b=S)["m:fName"]),m=VC(b["m:e"]),"\\".concat(u,"{").concat(m,"}")):H==="m:groupChr"?(p=U(Z=S,["m:groupChrPr","m:chr","attrs","m:val"]),Y=VC(Z["m:e"]),"".concat(p).concat(Y).concat(p)):H==="m:eqArr"?(R=S["m:e"].map(function(z){return VC(z)}).join(" \\\\ "),"\\begin{cases} ".concat(R," \\end{cases}")):H==="m:bar"?function(z){var v=VC(z["m:e"]);return U(z,["m:barPr","m:pos","attrs","m:val"])==="top"?"\\overline{".concat(v,"}"):"\\underline{".concat(v,"}")}(S):H==="m:acc"?function(z){var v=U(z,["m:accPr","m:chr","attrs","m:val"])||"^",K=VC(z["m:e"]);switch(v){case"́":return"\\acute{".concat(K,"}");case"̀":return"\\grave{".concat(K,"}");case"̂":return"\\hat{".concat(K,"}");case"̃":return"\\tilde{".concat(K,"}");case"̄":return"\\bar{".concat(K,"}");case"̆":return"\\breve{".concat(K,"}");case"̇":return"\\dot{".concat(K,"}");case"̈":return"\\ddot{".concat(K,"}");case"̊":return"\\mathring{".concat(K,"}");case"̋":return"\\H{".concat(K,"}");case"̌":return"\\check{".concat(K,"}");case"̧":return"\\c{".concat(K,"}");default:return"\\".concat(v,"{").concat(K,"}")}}(S):H==="m:borderBox"?function(z){var v=VC(z["m:e"]);return"\\boxed{".concat(v,"}")}(S):H==="m:m"?(X=S["m:mr"].map(function(z){return z["m:e"].map(function(v){return VC(v)}).join(" & ")}),"\\begin{matrix} ".concat(X.join(" \\\\ ")," \\end{matrix}")):H==="m:r"?VC(S):H==="m:t"?S:""}).join("")}function ebg(t){return t.replaceAll(/</g,"<").replaceAll(/>/g,">").replaceAll(/&/g,"&").replaceAll(/'/g,"'").replaceAll(/"/g,'"')}function MI(t,I){var g=typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(!g){if(Array.isArray(t)||(g=function(l,n){if(l){if(typeof l=="string")return lq(l,n);var a=Object.prototype.toString.call(l).slice(8,-1);if(a==="Object"&&l.constructor&&(a=l.constructor.name),a==="Map"||a==="Set")return Array.from(l);if(a==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return lq(l,n)}}(t))||I){g&&(t=g);var C=0,i=function(){};return{s:i,n:function(){return C>=t.length?{done:!0}:{done:!1,value:t[C++]}},e:function(l){throw l},f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
- In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var e,A=!0,s=!1;return{s:function(){g=g.call(t)},n:function(){var l=g.next();return A=l.done,l},e:function(l){s=!0,e=l},f:function(){try{A||g.return==null||g.return()}finally{if(s)throw e}}}}function lq(t,I){(I==null||I>t.length)&&(I=t.length);for(var g=0,C=new Array(I);g<I;g++)C[g]=t[g];return C}function nq(t,I,g,C,i){return{x:t+Math.cos(i)*g,y:I+Math.sin(i)*C}}function aq(t,I,g,C,i,e,A){var s=nq(t,I,g,C,i),l=nq(t,I,g,C,e),n=l,a=s,d=i-e,o=Math.abs(d)>Math.PI?1:0,c=d>=0?1:0;return"M ".concat(n.x,",").concat(n.y," A ").concat(g,",").concat(C," 0 ").concat(o,",").concat(c," ").concat(a.x,",").concat(a.y," Z")}function Mg(t,I,g,C,i,e,A){for(var s,l="",n=e>=i?1:-1,a=i;s=a,n>0?s<=e:s>=e;){var d=a*(Math.PI/180),o=t+Math.cos(d)*g,c=I+Math.sin(d)*C;a===i&&(l=" M".concat(o," ").concat(c)),l+=" L".concat(o," ").concat(c),a+=n}return A&&(l+=" z"),l}function Abg(t,I,g,C){var i="";switch(t){case"rect":case"actionButtonBlank":case"leftRightCircularArrow":case"chartPlus":case"chartStar":case"chartX":case"cornerTabs":case"flowChartOfflineStorage":case"folderCorner":case"funnel":case"lineInv":case"nonIsoscelesTrapezoid":case"plaqueTabs":case"squareTabs":case"upDownArrowCallout":default:i="M 0 0 L ".concat(I," 0 L ").concat(I," ").concat(g," L 0 ").concat(g," Z");break;case"flowChartPredefinedProcess":i="M 0 0 L ".concat(I," 0 L ").concat(I," ").concat(g," L 0 ").concat(g," Z M ").concat(I*(1/8)," 0 L ").concat(I*(1/8)," ").concat(g," M ").concat(I*(7/8)," 0 L ").concat(I*(7/8)," ").concat(g);break;case"flowChartInternalStorage":i="M 0 0 L ".concat(I," 0 L ").concat(I," ").concat(g," L 0 ").concat(g," Z M ").concat(I*(1/8)," 0 L ").concat(I*(1/8)," ").concat(g," M 0 ").concat(g*(1/8)," L ").concat(I," ").concat(g*(1/8));break;case"flowChartCollate":i="M 0,0 L ".concat(I,",0 L 0,").concat(g," L ").concat(I,",").concat(g," z");break;case"flowChartDocument":var e=10800*I/21600,A=17322*g/21600,s=20172*g/21600,l=23922*g/21600;i="M 0,0 L ".concat(I,",0 L ").concat(I,",").concat(A," C ").concat(e,",").concat(A," ").concat(e,",").concat(l," 0,").concat(s," z");break;case"flowChartMultidocument":var n=18022*g/21600,a=3675*g/21600,d=23542*g/21600,o=1815*g/21600,c=16252*g/21600,r=16352*g/21600,h=14392*g/21600,b=20782*g/21600,u=14467*g/21600,m=1532*I/21600,Z=2e4*I/21600,p=9298*I/21600,Y=19298*I/21600,R=18595*I/21600,X=2972*I/21600,H=20800*I/21600;i="M 0,".concat(a," L ").concat(R,",").concat(a," L ").concat(R,",").concat(n," C ").concat(p,",").concat(n," ").concat(p,",").concat(d," 0,").concat(b," z M ").concat(m,",").concat(a," L ").concat(m,",").concat(o," L ").concat(Z,",").concat(o," L ").concat(Z,",").concat(c," C ").concat(Y,",").concat(c," ").concat(R,",").concat(r," ").concat(R,",").concat(r," M ").concat(X,",").concat(o," L ").concat(X,",0 L ").concat(I,",0 L ").concat(I,",").concat(h," C ").concat(H,",").concat(h," ").concat(Z,",").concat(u," ").concat(Z,",").concat(u);break;case"actionButtonBackPrevious":var S=I/2,z=g/2,v=3*Math.min(I,g)/8,K=z-v,V=z+v,N=S-v,B=S+v;i="M 0,0 L ".concat(I,",0 L ").concat(I,",").concat(g," L 0,").concat(g," z M ").concat(N,",").concat(z," L ").concat(B,",").concat(K," L ").concat(B,",").concat(V," z");break;case"actionButtonBeginning":var G=I/2,w=g/2,W=Math.min(I,g),y=3*W/8,f=w-y,D=w+y,F=G-y,T=G+y,Q=3*W/4,P=F+Q/8,L=F+Q/4;i="M 0,0 L ".concat(I,",0 L ").concat(I,",").concat(g," L 0,").concat(g," z M ").concat(L,",").concat(w," L ").concat(T,",").concat(f," L ").concat(T,",").concat(D," z M ").concat(P,",").concat(f," L ").concat(F,",").concat(f," L ").concat(F,",").concat(D," L ").concat(P,",").concat(D," z");break;case"actionButtonDocument":var E=I/2,J=g/2,k=Math.min(I,g),j=3*k/8,q=J-j,tg=J+j,Cg=9*k/32,x=E-Cg,sg=E+Cg,Ag=3*k/16,O=sg-Ag,_=q+Ag;i="M 0,0 L ".concat(I,",0 L ").concat(I,",").concat(g," L 0,").concat(g," z M ").concat(x,",").concat(q," L ").concat(O,",").concat(q," L ").concat(sg,",").concat(_," L ").concat(sg,",").concat(tg," L ").concat(x,",").concat(tg," z M ").concat(O,",").concat(q," L ").concat(O,",").concat(_," L ").concat(sg,",").concat(_," z");break;case"actionButtonEnd":var Ig=I/2,ng=g/2,ag=Math.min(I,g),lg=3*ag/8,cg=ng-lg,dg=ng+lg,hg=Ig-lg,rg=Ig+lg,Wg=3*ag/4,Gg=hg+3*Wg/4,Sg=hg+7*Wg/8;i="M 0,".concat(g," L ").concat(I,",").concat(g," L ").concat(I,",0 L 0,0 z M ").concat(Sg,",").concat(cg," L ").concat(rg,",").concat(cg," L ").concat(rg,",").concat(dg," L ").concat(Sg,",").concat(dg," z M ").concat(Gg,",").concat(ng," L ").concat(hg,",").concat(cg," L ").concat(hg,",").concat(dg," z");break;case"actionButtonForwardNext":var Kg=I/2,kg=g/2,yg=3*Math.min(I,g)/8,Vg=kg-yg,pg=kg+yg,Hg=Kg-yg,Jg=Kg+yg;i="M 0,".concat(g," L ").concat(I,",").concat(g," L ").concat(I,",0 L 0,0 z M ").concat(Jg,",").concat(kg," L ").concat(Hg,",").concat(Vg," L ").concat(Hg,",").concat(pg," z");break;case"actionButtonHelp":var zg=I/2,aI=g/2,BI=Math.min(I,g),Ug=3*BI/8,lI=aI-Ug,oI=zg-Ug,Eg=3*BI/4,LI=Eg/7,fI=3*Eg/14,tI=2*Eg/7,WI=lI+tI,QI=lI+17*Eg/28,nI=lI+21*Eg/28,kI=lI+11*Eg/14,Bg=oI+fI,hI=oI+3*Eg/7,bg=oI+4*Eg/7,ug=Eg/14,fg=3*Eg/28,Tg=Bg+tI,cI=hI+LI,jg=kI+fg,mI=(bg+hI+tI)/2;i="M 0,0 L ".concat(I,",0 L ").concat(I,",").concat(g," L 0,").concat(g," z M ").concat(Bg,",").concat(WI," ").concat(Mg(Tg,WI,tI,tI,180,360,!1).replace("M","L")," ").concat(Mg(mI,WI,LI,fI,0,90,!1).replace("M","L")," ").concat(Mg(mI,QI,ug,fg,270,180,!1).replace("M","L")," L ").concat(bg,",").concat(nI," L ").concat(hI,",").concat(nI," L ").concat(hI,",").concat(QI," ").concat(Mg(cI,QI,LI,fI,180,270,!1).replace("M","L")," ").concat(Mg(bg,WI,ug,fg,90,0,!1).replace("M","L")," ").concat(Mg(Tg,WI,LI,LI,0,-180,!1).replace("M","L")," z M ").concat(zg,",").concat(kI," ").concat(Mg(zg,jg,fg,fg,270,630,!1).replace("M","L")," z");break;case"actionButtonHome":var sI=I/2,gI=g/2,pI=Math.min(I,g),bI=3*pI/8,yI=gI-bI,wC=gI+bI,_I=sI-bI,_C=sI+bI,nC=3*pI/4,Ft=yI+nC/16,og=yI+3*nC/16,Zg=yI+5*nC/16,Dg=yI+3*nC/4,Fg=_I+nC/8,II=_I+7*nC/16,vg=_I+9*nC/16,xg=_I+11*nC/16,zI=_I+13*nC/16,VI=_I+7*nC/8;i="M 0,0 L ".concat(I,",0 L ").concat(I,",").concat(g," L 0,").concat(g," z M ").concat(sI,",").concat(yI," L ").concat(_I,",").concat(gI," L ").concat(Fg,",").concat(gI," L ").concat(Fg,",").concat(wC," L ").concat(VI,",").concat(wC," L ").concat(VI,",").concat(gI," L ").concat(_C,",").concat(gI," L ").concat(zI,",").concat(Zg," L ").concat(zI,",").concat(Ft," L ").concat(xg,",").concat(Ft," L ").concat(xg,",").concat(og," z M ").concat(II,",").concat(Dg," L ").concat(vg,",").concat(Dg," L ").concat(vg,",").concat(wC," L ").concat(II,",").concat(wC," z");break;case"actionButtonInformation":var YI=I/2,dI=g/2,CC=Math.min(I,g),OI=3*CC/8,vI=dI-OI,rC=YI-OI,hC=3*CC/4,pt=5*hC/16,Ni=vI+hC/32,fA=vI+pt,Hs=vI+3*hC/8,_e=vI+13*hC/16,Xs=vI+7*hC/8,qI=rC+pt,TI=rC+13*hC/32,qe=rC+19*hC/32,HA=rC+11*hC/16,El=3*hC/32,bi=vI+OI,$e=Ni+El;i="M 0,0 L ".concat(I,",0 L ").concat(I,",").concat(g," L 0,").concat(g," z M ").concat(YI,",").concat(vI," ").concat(Mg(YI,bi,OI,OI,270,630,!1).replace("M","L")," z M ").concat(YI,",").concat(Ni," ").concat(Mg(YI,$e,El,El,270,630,!1).replace("M","L")," M ").concat(qI,",").concat(fA," L ").concat(qe,",").concat(fA," L ").concat(qe,",").concat(_e," L ").concat(HA,",").concat(_e," L ").concat(HA,",").concat(Xs," L ").concat(qI,",").concat(Xs," L ").concat(qI,",").concat(_e," L ").concat(TI,",").concat(_e," L ").concat(TI,",").concat(Hs," L ").concat(qI,",").concat(Hs," z");break;case"actionButtonMovie":var gA=I/2,ja=g/2,Ss=Math.min(I,g),kt=gA-3*Ss/8,Bt=ja-3*Ss/8,W0=gA+3*Ss/8,OC=3*Ss/4,ad=kt+1455*OC/21600,Qa=kt+1905*OC/21600,Oa=kt+2325*OC/21600,nG=kt+16155*OC/21600,Ds=kt+17010*OC/21600,od=kt+19335*OC/21600,oig=kt+19725*OC/21600,Q9=kt+20595*OC/21600,O9=Bt+5280*OC/21600,U9=Bt+5730*OC/21600,CM=Bt+6630*OC/21600,E9=Bt+7492*OC/21600,P9=Bt+9067*OC/21600,_9=Bt+9555*OC/21600,q9=Bt+13342*OC/21600,$9=Bt+14580*OC/21600,g1=Bt+15592*OC/21600;i="M 0,".concat(g," L ").concat(I,",").concat(g," L ").concat(I,",0 L 0,0 z M ").concat(kt,",").concat(O9," L ").concat(kt,",").concat(_9," L ").concat(ad,",").concat(_9," L ").concat(Qa,",").concat(P9," L ").concat(Oa,",").concat(P9," L ").concat(Oa,",").concat(g1," L ").concat(Ds,",").concat(g1," L ").concat(Ds,",").concat(q9," L ").concat(od,",").concat(q9," L ").concat(Q9,",").concat($9," L ").concat(W0,",").concat($9," L ").concat(W0,",").concat(CM," L ").concat(Q9,",").concat(CM," L ").concat(oig,",").concat(E9," L ").concat(Ds,",").concat(E9," L ").concat(Ds,",").concat(CM," L ").concat(nG,",").concat(U9," L ").concat(Qa,",").concat(U9," L ").concat(ad,",").concat(O9," z");break;case"actionButtonReturn":var y0=I/2,I1=g/2,C1=Math.min(I,g),aG=3*C1/8,oG=I1-aG,t1=I1+aG,Pl=y0-aG,cig=y0+aG,cd=3*C1/4,i1=3*cd/4,e1=5*cd/8,Ua=3*cd/8,A1=cd/4,s1=oG+i1,cG=oG+e1,dd=oG+A1,dig=Pl+7*cd/8,rig=Pl+i1,tM=Pl+e1,l1=Pl+Ua,hig=Pl+A1,rd=cd/8,big=tM-rd,uig=s1-rd,mig=Pl+Ua,Zig=t1-Ua;i="M 0,".concat(g," L ").concat(I,",").concat(g," L ").concat(I,",0 L 0,0 z M ").concat(cig,",").concat(dd," L ").concat(rig,",").concat(oG," L ").concat(y0,",").concat(dd," L ").concat(tM,",").concat(dd," L ").concat(tM,",").concat(cG," ").concat(Mg(big,cG,rd,rd,0,90,!1).replace("M","L")," L ").concat(l1,",").concat(s1," ").concat(Mg(l1,uig,rd,rd,90,180,!1).replace("M","L")," L ").concat(hig,",").concat(dd," L ").concat(Pl,",").concat(dd," L ").concat(Pl,",").concat(cG," ").concat(Mg(mig,cG,Ua,Ua,180,90,!1).replace("M","L")," L ").concat(y0,",").concat(t1," ").concat(Mg(y0,Zig,Ua,Ua,90,0,!1).replace("M","L")," L ").concat(dig,",").concat(dd," z");break;case"actionButtonSound":var n1=I/2,dG=g/2,a1=Math.min(I,g),rG=3*a1/8,Y0=dG-rG,Gig=dG+rG,N0=n1-rG,iM=n1+rG,hd=3*a1/4,o1=5*hd/16,wig=Y0+hd/8,eM=Y0+o1,AM=Y0+11*hd/16,pig=Y0+7*hd/8,c1=N0+o1,d1=N0+5*hd/8,sM=N0+3*hd/4;i="M 0,0 L ".concat(I,",0 L ").concat(I,",").concat(g," L 0,").concat(g," z M ").concat(N0,",").concat(eM," L ").concat(c1,",").concat(eM," L ").concat(d1,",").concat(Y0," L ").concat(d1,",").concat(Gig," L ").concat(c1,",").concat(AM," L ").concat(N0,",").concat(AM," z M ").concat(sM,",").concat(eM," L ").concat(iM,",").concat(wig," M ").concat(sM,",").concat(dG," L ").concat(iM,",").concat(dG," M ").concat(sM,",").concat(AM," L ").concat(iM,",").concat(pig);break;case"irregularSeal1":i="M ".concat(10800*I/21600,",").concat(5800*g/21600," L ").concat(14522*I/21600,",0 L ").concat(14155*I/21600,",").concat(5325*g/21600," L ").concat(18380*I/21600,",").concat(4457*g/21600," L ").concat(16702*I/21600,",").concat(7315*g/21600," L ").concat(21097*I/21600,",").concat(8137*g/21600," L ").concat(17607*I/21600,",").concat(10475*g/21600," L ").concat(I,",").concat(13290*g/21600," L ").concat(16837*I/21600,",").concat(12942*g/21600," L ").concat(18145*I/21600,",").concat(18095*g/21600," L ").concat(14020*I/21600,",").concat(14457*g/21600," L ").concat(13247*I/21600,",").concat(19737*g/21600," L ").concat(10532*I/21600,",").concat(14935*g/21600," L ").concat(8485*I/21600,",").concat(g," L ").concat(7715*I/21600,",").concat(15627*g/21600," L ").concat(4762*I/21600,",").concat(17617*g/21600," L ").concat(5667*I/21600,",").concat(13937*g/21600," L ").concat(135*I/21600,",").concat(14587*g/21600," L ").concat(3722*I/21600,",").concat(11775*g/21600," L 0,").concat(8615*g/21600," L ").concat(4627*I/21600,",").concat(7617*g/21600," L ").concat(370*I/21600,",").concat(2295*g/21600," L ").concat(7312*I/21600,",").concat(6320*g/21600," L ").concat(8352*I/21600,",").concat(2295*g/21600," z");break;case"irregularSeal2":i="M ".concat(11462*I/21600,",").concat(4342*g/21600," L ").concat(14790*I/21600,",0 L ").concat(14525*I/21600,",").concat(5777*g/21600," L ").concat(18007*I/21600,",").concat(3172*g/21600," L ").concat(16380*I/21600,",").concat(6532*g/21600," L ").concat(I,",").concat(6645*g/21600," L ").concat(16985*I/21600,",").concat(9402*g/21600," L ").concat(18270*I/21600,",").concat(11290*g/21600," L ").concat(16380*I/21600,",").concat(12310*g/21600," L ").concat(18877*I/21600,",").concat(15632*g/21600," L ").concat(14640*I/21600,",").concat(14350*g/21600," L ").concat(14942*I/21600,",").concat(17370*g/21600," L ").concat(12180*I/21600,",").concat(15935*g/21600," L ").concat(11612*I/21600,",").concat(18842*g/21600," L ").concat(9872*I/21600,",").concat(17370*g/21600," L ").concat(8700*I/21600,",").concat(19712*g/21600," L ").concat(7527*I/21600,",").concat(18125*g/21600," L ").concat(4917*I/21600,",").concat(g," L ").concat(4805*I/21600,",").concat(18240*g/21600," L ").concat(1285*I/21600,",").concat(17825*g/21600," L ").concat(3330*I/21600,",").concat(15370*g/21600," L 0,").concat(12877*g/21600," L ").concat(3935*I/21600,",").concat(11592*g/21600," L ").concat(1172*I/21600,",").concat(8270*g/21600," L ").concat(5372*I/21600,",").concat(7817*g/21600," L ").concat(4502*I/21600,",").concat(3625*g/21600," L ").concat(8550*I/21600,",").concat(6382*g/21600," L ").concat(9722*I/21600,",").concat(1887*g/21600," z");break;case"flowChartTerminator":var V0=3475*I/21600,r1=18125*I/21600,h1=10800*g/21600;i="M ".concat(V0,",0 L ").concat(r1,",0 ").concat(Mg(r1,g/2,V0,h1,270,450,!1).replace("M","L")," L ").concat(V0,",").concat(g," ").concat(Mg(V0,g/2,V0,h1,90,270,!1).replace("M","L")," z");break;case"flowChartPunchedTape":var lM=180,bd=5*I/20,Ea=2*g/20,nM=18*g/20;i="M 0,".concat(Ea," ").concat(Mg(bd,Ea,bd,Ea,lM,0,!1).replace("M","L")," ").concat(Mg(I*(3/4),Ea,bd,Ea,lM,360,!1).replace("M","L")," L ").concat(I,",").concat(nM," ").concat(Mg(I*(3/4),nM,bd,Ea,0,-180,!1).replace("M","L")," ").concat(Mg(bd,nM,bd,Ea,0,lM,!1).replace("M","L")," z");break;case"flowChartOnlineStorage":var M0=1*I/6,b1=3*g/6;i="M ".concat(M0,",0 L ").concat(I,",0 ").concat(Mg(I,g/2,M0,b1,270,90,!1).replace("M","L")," L ").concat(M0,",").concat(g," ").concat(Mg(M0,g/2,M0,b1,90,270,!1).replace("M","L")," z");break;case"flowChartDisplay":var aM=1*I/6,Big=5*I/6,u1=3*g/6;i="M 0,".concat(u1," L ").concat(aM,",0 L ").concat(Big,",0 ").concat(Mg(I,g/2,aM,u1,270,450,!1).replace("M","L")," L ").concat(aM,",").concat(g," z");break;case"flowChartDelay":var oM=I/2,m1=g/2;i="M 0,0 L ".concat(oM,",0 ").concat(Mg(oM,m1,oM,m1,270,450,!1).replace("M","L")," L 0,").concat(g," z");break;case"flowChartMagneticTape":var Ks=I/2,XA=g/2,Wig=XA+XA*Math.sin(Math.PI/4),yig=180*Math.atan(g/I)/Math.PI;i="M ".concat(Ks,",").concat(g," ").concat(Mg(Ks,XA,Ks,XA,90,180,!1).replace("M","L")," ").concat(Mg(Ks,XA,Ks,XA,180,270,!1).replace("M","L")," ").concat(Mg(Ks,XA,Ks,XA,270,360,!1).replace("M","L")," ").concat(Mg(Ks,XA,Ks,XA,0,yig,!1).replace("M","L")," L ").concat(I,",").concat(Wig," L ").concat(I,",").concat(g," z");break;case"ellipse":case"flowChartConnector":case"flowChartSummingJunction":case"flowChartOr":var R0=I/2,f0=g/2,H0=I/2,Z1=g/2;if(i="M ".concat(R0-H0,",").concat(f0," A ").concat(H0,",").concat(Z1," 0 1,0 ").concat(R0+H0,",").concat(f0," A ").concat(H0,",").concat(Z1," 0 1,0 ").concat(R0-H0,",").concat(f0," Z"),t==="flowChartOr")i+=" M ".concat(I/2," 0 L ").concat(I/2," ").concat(g," M 0 ").concat(g/2," L ").concat(I," ").concat(g/2);else if(t==="flowChartSummingJunction"){var G1=Math.PI/4,w1=I/2*Math.cos(G1),p1=g/2*Math.sin(G1),B1=R0-w1,W1=R0+w1,y1=f0-p1,Y1=f0+p1;i+=" M ".concat(B1," ").concat(y1," L ").concat(W1," ").concat(Y1," M ").concat(W1," ").concat(y1," L ").concat(B1," ").concat(Y1)}break;case"roundRect":case"round1Rect":case"round2DiagRect":case"round2SameRect":case"snip1Rect":case"snip2DiagRect":case"snip2SameRect":case"flowChartAlternateProcess":case"flowChartPunchedCard":var zt,Vi,_l,ql,X0=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]);if(X0&&Array.isArray(X0)){var N1,hG=MI(X0);try{for(hG.s();!(N1=hG.n()).done;){var cM=N1.value,V1=U(cM,["attrs","name"]);if(V1==="adj1"){var Yig=U(cM,["attrs","fmla"]);zt=parseInt(Yig.substring(4))/5e4}else if(V1==="adj2"){var Nig=U(cM,["attrs","fmla"]);Vi=parseInt(Nig.substring(4))/5e4}}}catch(Rg){hG.e(Rg)}finally{hG.f()}}else if(X0){var Vig=U(X0,["attrs","fmla"]);zt=parseInt(Vig.substring(4))/5e4,Vi=0}var M1=!1;switch(t){case"roundRect":case"flowChartAlternateProcess":_l="round",ql="cornrAll",zt===void 0&&(zt=.33334),Vi=0;break;case"round1Rect":_l="round",ql="cornr1",zt===void 0&&(zt=.33334),Vi=0;break;case"round2DiagRect":_l="round",ql="diag",zt===void 0&&(zt=.33334),Vi===void 0&&(Vi=0);break;case"round2SameRect":_l="round",ql="cornr2",zt===void 0&&(zt=.33334),Vi===void 0&&(Vi=0);break;case"snip1Rect":case"flowChartPunchedCard":_l="snip",ql="cornr1",zt===void 0&&(zt=.33334),Vi=0,t==="flowChartPunchedCard"&&(M1=!0);break;case"snip2DiagRect":_l="snip",ql="diag",zt===void 0&&(zt=0),Vi===void 0&&(Vi=.33334);break;case"snip2SameRect":_l="snip",ql="cornr2",zt===void 0&&(zt=.33334),Vi===void 0&&(Vi=0)}i=function(Rg,NI,pC,vC,TC,Hi){var xC,qC,rt,Yt,_i;switch(Hi){case"cornr1":xC=0,qC=0,rt=0,Yt=pC;break;case"cornr2":xC=pC,qC=vC,rt=vC,Yt=pC;break;case"cornrAll":xC=pC,qC=pC,rt=pC,Yt=pC;break;case"diag":xC=pC,qC=vC,rt=pC,Yt=vC;break;default:xC=qC=rt=Yt=0}if(TC==="round"){if(!Rg||!NI)return"";var Jt=function(Yr){var Nr=Number(Yr);return Number.isFinite(Nr)?Math.max(0,Math.min(1,Nr)):0},ht=Math.min(Rg,NI),Lt=Jt(xC)*(ht/2),At=Jt(Yt)*(ht/2),fe=Jt(rt)*(ht/2),He=Jt(qC)*(ht/2),uY=Lt+At>0?Rg/(Lt+At):1,mY=He+fe>0?Rg/(He+fe):1,ZY=Lt+He>0?NI/(Lt+He):1,Zu=At+fe>0?NI/(At+fe):1,Ro=Math.min(1,uY,mY,ZY,Zu);At*=Ro,fe*=Ro,He*=Ro;var Xe=function(Yr,Nr){return"L".concat(Yr,",").concat(Nr)},GY=function(Yr,Nr,vng){return"A".concat(Yr,",").concat(Yr," 0 0,1 ").concat(Nr,",").concat(vng)},$s="";return $s+=(_i=0,"M".concat(Lt*=Ro,",").concat(_i)),$s+=Xe(Rg-At,0),$s+=At>0?GY(At,Rg,At):Xe(Rg,0),$s+=Xe(Rg,NI-fe),$s+=fe>0?GY(fe,Rg-fe,NI):Xe(Rg,NI),$s+=Xe(He,NI),$s+=He>0?GY(He,0,NI-He):Xe(0,NI),$s+=Xe(0,Lt),($s+=Lt>0?GY(Lt,Lt,0):Xe(0,0))+"Z"}return TC==="snip"?"M0,".concat(xC*(NI/2)," L0,").concat(NI/2+NI/2*(1-qC)," L").concat(qC*(Rg/2),",").concat(NI," L").concat(Rg/2+Rg/2*(1-rt),",").concat(NI," L").concat(Rg,",").concat(NI/2+NI/2*(1-rt)," L").concat(Rg,",").concat(Yt*(NI/2)," L").concat(Rg/2+Rg/2*(1-Yt),",0 L").concat(Rg/2*xC,",0 z"):""}(I,g,zt,Vi,_l,ql),M1&&(i=i.replace(/([MLQC])\s*([-\d.e]+)\s*([-\d.e]+)/gi,function(Rg,NI,pC,vC){var TC=I-parseFloat(pC);return"".concat(NI).concat(TC," ").concat(vC)}).replace(/([MLQC])\s*([-\d.e]+)\s*([-\d.e]+)\s*([-\d.e]+)\s*([-\d.e]+)/gi,function(Rg,NI,pC,vC,TC,Hi){var xC=I-parseFloat(pC),qC=I-parseFloat(TC);return"".concat(NI).concat(xC," ").concat(vC," ").concat(qC," ").concat(Hi)}));break;case"snipRoundRect":var R1=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),dM=.33334,rM=.33334;if(R1){var f1,bG=MI(R1);try{for(bG.s();!(f1=bG.n()).done;){var hM=f1.value,H1=U(hM,["attrs","name"]);if(H1==="adj1"){var Mig=U(hM,["attrs","fmla"]);dM=parseInt(Mig.substring(4))/5e4}else if(H1==="adj2"){var Rig=U(hM,["attrs","fmla"]);rM=parseInt(Rig.substring(4))/5e4}}}catch(Rg){bG.e(Rg)}finally{bG.f()}}i="M0,".concat(g," L").concat(I,",").concat(g," L").concat(I,",").concat(g/2*rM," L").concat(I/2+I/2*(1-rM),",0 L").concat(I/2*dM,",0 Q0,0 0,").concat(g/2*dM," z");break;case"bentConnector2":i="M ".concat(I," 0 L ").concat(I," ").concat(g," L 0 ").concat(g);break;case"rtTriangle":i="M 0 0 L 0 ".concat(g," L ").concat(I," ").concat(g," Z");break;case"triangle":case"flowChartExtract":case"flowChartMerge":var X1=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),S1=.5;X1&&(S1=parseInt(X1.substring(4))*wg);var bM=I*S1,uM=0,mM=0,ZM=g,GM=I,wM=g;if(t==="flowChartMerge"){var D1=[I-bM,g-uM];bM=D1[0],uM=D1[1];var K1=[I-mM,g-ZM];mM=K1[0],ZM=K1[1];var F1=[I-GM,g-wM];GM=F1[0],wM=F1[1]}i="M ".concat(bM," ").concat(uM," L ").concat(mM," ").concat(ZM," L ").concat(GM," ").concat(wM," Z");break;case"diamond":case"flowChartDecision":case"flowChartSort":var k1=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),z1=5e4;if(k1){var pM=U(k1,["attrs","fmla"]);pM&&pM.startsWith("val ")&&(z1=parseInt(pM.substring(4)))}var ud=z1/1e5;i="M ".concat(I*ud," 0 L 0 ").concat(g*ud," L ").concat(I*ud," ").concat(g," L ").concat(I," ").concat(g*ud," Z"),t==="flowChartSort"&&(i+=" M 0 ".concat(g*ud," L ").concat(I," ").concat(g*ud));break;case"trapezoid":case"flowChartManualOperation":case"flowChartManualInput":var J1=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),S0=.2;J1&&(S0=.5*(parseInt(J1.substring(4))*wg)/.7407);var uG=I*S0,mG=0,BM=0,WM=g,yM=I,YM=g,ZG=(1-S0)*I,NM=0;if(t==="flowChartManualInput"&&(mG=g/5,uG=I*(S0=0),ZG=(1-S0)*I),t==="flowChartManualOperation"){var L1=[I-uG,g-mG];uG=L1[0],mG=L1[1];var v1=[I-BM,g-WM];BM=v1[0],WM=v1[1];var T1=[I-yM,g-YM];yM=T1[0],YM=T1[1];var x1=[I-ZG,g-NM];ZG=x1[0],NM=x1[1]}i="M ".concat(uG," ").concat(mG," L ").concat(BM," ").concat(WM," L ").concat(yM," ").concat(YM," L ").concat(ZG," ").concat(NM," Z");break;case"parallelogram":case"flowChartInputOutput":var j1=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),VM=.25;if(j1){var fig=I>g?I/g:g/I;VM=parseInt(j1.substring(4))/1e5/fig}i="M ".concat(VM*I," 0 L 0 ").concat(g," L ").concat((1-VM)*I," ").concat(g," L ").concat(I," 0 Z");break;case"pentagon":i="M ".concat(.5*I," 0 L 0 ").concat(.375*g," L ").concat(.15*I," ").concat(g," L ").concat(.85*I," ").concat(g," L ").concat(I," ").concat(.375*g," Z");break;case"hexagon":case"flowChartPreparation":var Q1=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),GG=1.9685039370078738;Q1&&(GG=parseInt(Q1.substring(4))*wg);var O1=7.874015748031495,Hig=60*Math.PI/180,U1=Math.min(I,g),E1=3.9370078740157477*I/U1,MM=U1*(GG<0?0:GG>E1?E1:GG)/O1,P1=I-MM,_1=9.092125984251968*(g/2)/O1*Math.sin(Hig),wG=g/2,q1=wG-_1,$1=wG+_1;i="M 0,".concat(wG," L ").concat(MM,",").concat(q1," L ").concat(P1,",").concat(q1," L ").concat(I,",").concat(wG," L ").concat(P1,",").concat($1," L ").concat(MM,",").concat($1," z");break;case"heptagon":i="M ".concat(.5*I," 0 L ").concat(I/8," ").concat(g/4," L 0 ").concat(5/8*g," L ").concat(I/4," ").concat(g," L ").concat(3/4*I," ").concat(g," L ").concat(I," ").concat(5/8*g," L ").concat(7/8*I," ").concat(g/4," Z");break;case"octagon":var gK=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),md=.25;gK&&(md=parseInt(gK.substring(4))/1e5);var pG=1-md;i="M ".concat(md*I," 0 L 0 ").concat(md*g," L 0 ").concat(pG*g," L ").concat(md*I," ").concat(g," L ").concat(pG*I," ").concat(g," L ").concat(I," ").concat(pG*g," L ").concat(I," ").concat(md*g," L ").concat(pG*I," 0 Z");break;case"decagon":i="M ".concat(3/8*I," 0 L ").concat(I/8," ").concat(g/8," L 0 ").concat(g/2," L ").concat(I/8," ").concat(7/8*g," L ").concat(3/8*I," ").concat(g," L ").concat(5/8*I," ").concat(g," L ").concat(7/8*I," ").concat(7/8*g," L ").concat(I," ").concat(g/2," L ").concat(7/8*I," ").concat(g/8," L ").concat(5/8*I," 0 Z");break;case"dodecagon":i="M ".concat(3/8*I," 0 L ").concat(I/8," ").concat(g/8," L 0 ").concat(3/8*g," L 0 ").concat(5/8*g," L ").concat(I/8," ").concat(7/8*g," L ").concat(3/8*I," ").concat(g," L ").concat(5/8*I," ").concat(g," L ").concat(7/8*I," ").concat(7/8*g," L ").concat(I," ").concat(5/8*g," L ").concat(I," ").concat(3/8*g," L ").concat(7/8*I," ").concat(g/8," L ").concat(5/8*I," 0 Z");break;case"star4":var BG=I/2,WG=g/2,Xig=I/2,Sig=g/2,yG=1.503779527559055,YG=3.9370078740157477,RM=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]);RM&&RM.attrs.name==="adj"&&(yG=parseInt(RM.attrs.fmla.substring(4))*wg);var IK=yG<0?0:yG>YG?YG:yG,Dig=Sig*IK/YG,CK=Xig*IK/YG*Math.cos(.7853981634),tK=Dig*Math.sin(.7853981634),iK=BG-CK,eK=BG+CK,AK=WG-tK,sK=WG+tK;i="M 0,".concat(WG," L ").concat(iK,",").concat(AK," L ").concat(BG,",0 L ").concat(eK,",").concat(AK," L ").concat(I,",").concat(WG," L ").concat(eK,",").concat(sK," L ").concat(BG,",").concat(g," L ").concat(iK,",").concat(sK," z");break;case"star5":var SA=I/2,Kig=g/2,Fig=I/2,kig=g/2,NG=1.503779527559055,lK=8.279212598425197,fM=8.70527559055118,VG=3.9370078740157477,HM=7.874015748031495,Zd=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]);Zd&&Object.keys(Zd).forEach(function(Rg){var NI=Zd[Rg].attrs.name;NI==="adj"?NG=parseInt(Zd[Rg].attrs.fmla.substring(4))*wg:NI==="hf"?lK=parseInt(Zd[Rg].attrs.fmla.substring(4))*wg:NI==="vf"&&(fM=parseInt(Zd[Rg].attrs.fmla.substring(4))*wg)});var nK=NG<0?0:NG>VG?VG:NG,XM=Fig*lK/HM,SM=kig*fM/HM,D0=Kig*fM/HM,aK=XM*Math.cos(.31415926536),oK=XM*Math.cos(5.3407075111),zig=SA-aK,Jig=SA-oK,Lig=SA+oK,vig=SA+aK,cK=D0-SM*Math.sin(.31415926536),dK=D0-SM*Math.sin(5.3407075111),rK=XM*nK/VG,DM=SM*nK/VG,hK=rK*Math.cos(5.9690260418),bK=rK*Math.cos(.94247779608),Tig=SA-hK,xig=SA-bK,jig=SA+bK,Qig=SA+hK,uK=D0-DM*Math.sin(.94247779608),mK=D0-DM*Math.sin(5.9690260418),Oig=D0+DM;i="M ".concat(zig,",").concat(cK," L ").concat(xig,",").concat(uK," L ").concat(SA,",0 L ").concat(jig,",").concat(uK," L ").concat(vig,",").concat(cK," L ").concat(Qig,",").concat(mK," L ").concat(Lig,",").concat(dK," L ").concat(SA,",").concat(Oig," L ").concat(Jig,",").concat(dK," L ").concat(Tig,",").concat(mK," z");break;case"star6":var $l=I/2,K0=g/2,Uig=I/2,Eig=g/2,KM=g/4,MG=2.2730708661417323,ZK=9.092125984251968,RG=3.9370078740157477,F0=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]);F0&&Object.keys(F0).forEach(function(Rg){var NI=F0[Rg].attrs.name;NI==="adj"?MG=parseInt(F0[Rg].attrs.fmla.substring(4))*wg:NI==="hf"&&(ZK=parseInt(F0[Rg].attrs.fmla.substring(4))*wg)});var GK=MG<0?0:MG>RG?RG:MG,wK=Uig*ZK/7.874015748031495,pK=wK*Math.cos(.5235987756),BK=$l-pK,WK=$l+pK,yK=K0+KM,FM=wK*GK/RG,YK=FM/2,Pig=$l-FM,NK=$l-YK,VK=$l+YK,_ig=$l+FM,MK=Eig*GK/RG*Math.sin(1.0471975512),RK=K0-MK,fK=K0+MK;i="M ".concat(BK,",").concat(KM," L ").concat(NK,",").concat(RK," L ").concat($l,",0 L ").concat(VK,",").concat(RK," L ").concat(WK,",").concat(KM," L ").concat(_ig,",").concat(K0," L ").concat(WK,",").concat(yK," L ").concat(VK,",").concat(fK," L ").concat($l,",").concat(g," L ").concat(NK,",").concat(fK," L ").concat(BK,",").concat(yK," L ").concat(Pig,",").concat(K0," z");break;case"star7":var Mi=I/2,qig=g/2,$ig=I/2,geg=g/2,fG=2.7244881889763777,HK=8.076535433070866,kM=8.284251968503936,HG=3.9370078740157477,zM=7.874015748031495,Gd=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]);Gd&&Object.keys(Gd).forEach(function(Rg){var NI=Gd[Rg].attrs.name;NI==="adj"?fG=parseInt(Gd[Rg].attrs.fmla.substring(4))*wg:NI==="hf"?HK=parseInt(Gd[Rg].attrs.fmla.substring(4))*wg:NI==="vf"&&(kM=parseInt(Gd[Rg].attrs.fmla.substring(4))*wg)});var XK=fG<0?0:fG>HG?HG:fG,XG=$ig*HK/zM,SG=geg*kM/zM,Pa=qig*kM/zM,SK=97493*XG/1e5,DK=78183*XG/1e5,KK=43388*XG/1e5,Ieg=Mi-DK,Ceg=Mi-KK,teg=Mi+KK,ieg=Mi+DK,eeg=Mi+SK,FK=Pa-62349*SG/1e5,kK=Pa+22252*SG/1e5,zK=Pa+90097*SG/1e5,JM=XG*XK/HG,DG=SG*XK/HG,JK=97493*JM/1e5,LK=78183*JM/1e5,vK=43388*JM/1e5,Aeg=Mi-JK,seg=Mi-LK,leg=Mi-vK,neg=Mi+vK,aeg=Mi+LK,oeg=Mi+JK,TK=Pa-90097*DG/1e5,xK=Pa-22252*DG/1e5,jK=Pa+62349*DG/1e5,ceg=Pa+DG;i="M ".concat(Mi-SK,",").concat(kK," L ").concat(Aeg,",").concat(xK," L ").concat(Ieg,",").concat(FK," L ").concat(leg,",").concat(TK," L ").concat(Mi,",0 L ").concat(neg,",").concat(TK," L ").concat(ieg,",").concat(FK," L ").concat(oeg,",").concat(xK," L ").concat(eeg,",").concat(kK," L ").concat(aeg,",").concat(jK," L ").concat(teg,",").concat(zK," L ").concat(Mi,",").concat(ceg," L ").concat(Ceg,",").concat(zK," L ").concat(seg,",").concat(jK," z");break;case"star8":var gn=I/2,In=g/2,QK=I/2,OK=g/2,KG=2.9527559055118107,FG=3.9370078740157477,LM=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]);LM&&LM.attrs.name==="adj"&&(KG=parseInt(LM.attrs.fmla.substring(4))*wg);var UK=KG<0?0:KG>FG?FG:KG,EK=QK*Math.cos(.7853981634),PK=gn-EK,_K=gn+EK,qK=OK*Math.sin(.7853981634),$K=In-qK,gF=In+qK,IF=QK*UK/FG,CF=OK*UK/FG,tF=92388*IF/1e5,iF=38268*IF/1e5,eF=92388*CF/1e5,AF=38268*CF/1e5,sF=gn-tF,lF=gn-iF,nF=gn+iF,aF=gn+tF,oF=In-eF,cF=In-AF,dF=In+AF,rF=In+eF;i="M 0,".concat(In," L ").concat(sF,",").concat(cF," L ").concat(PK,",").concat($K," L ").concat(lF,",").concat(oF," L ").concat(gn,",0 L ").concat(nF,",").concat(oF," L ").concat(_K,",").concat($K," L ").concat(aF,",").concat(cF," L ").concat(I,",").concat(In," L ").concat(aF,",").concat(dF," L ").concat(_K,",").concat(gF," L ").concat(nF,",").concat(rF," L ").concat(gn,",").concat(g," L ").concat(lF,",").concat(rF," L ").concat(PK,",").concat(gF," L ").concat(sF,",").concat(dF," z");break;case"star10":var pe=I/2,DA=g/2,deg=I/2,vM=g/2,kG=3.349055118110236,hF=8.279212598425197,zG=3.9370078740157477,k0=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]);k0&&Object.keys(k0).forEach(function(Rg){var NI=k0[Rg].attrs.name;NI==="adj"?kG=parseInt(k0[Rg].attrs.fmla.substring(4))*wg:NI==="hf"&&(hF=parseInt(k0[Rg].attrs.fmla.substring(4))*wg)});var bF=kG<0?0:kG>zG?zG:kG,TM=deg*hF/7.874015748031495,uF=95106*TM/1e5,mF=58779*TM/1e5,ZF=pe-uF,GF=pe-mF,wF=pe+mF,pF=pe+uF,BF=80902*vM/1e5,WF=30902*vM/1e5,yF=DA-BF,YF=DA-WF,NF=DA+WF,VF=DA+BF,JG=TM*bF/zG,MF=vM*bF/zG,RF=80902*JG/1e5,fF=30902*JG/1e5,HF=95106*MF/1e5,XF=58779*MF/1e5,reg=pe-JG,SF=pe-RF,DF=pe-fF,KF=pe+fF,FF=pe+RF,heg=pe+JG,kF=DA-HF,zF=DA-XF,JF=DA+XF,LF=DA+HF;i="M ".concat(ZF,",").concat(YF," L ").concat(SF,",").concat(zF," L ").concat(GF,",").concat(yF," L ").concat(DF,",").concat(kF," L ").concat(pe,",0 L ").concat(KF,",").concat(kF," L ").concat(wF,",").concat(yF," L ").concat(FF,",").concat(zF," L ").concat(pF,",").concat(YF," L ").concat(heg,",").concat(DA," L ").concat(pF,",").concat(NF," L ").concat(FF,",").concat(JF," L ").concat(wF,",").concat(VF," L ").concat(KF,",").concat(LF," L ").concat(pe,",").concat(g," L ").concat(DF,",").concat(LF," L ").concat(GF,",").concat(VF," L ").concat(SF,",").concat(JF," L ").concat(ZF,",").concat(NF," L ").concat(reg,",").concat(DA," z");break;case"star12":var KA=I/2,FA=g/2,vF=I/2,TF=g/2,xF=g/4,jF=I/4,LG=2.9527559055118107,vG=3.9370078740157477,xM=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]);xM&&xM.attrs.name==="adj"&&(LG=parseInt(xM.attrs.fmla.substring(4))*wg);var QF=LG<0?0:LG>vG?vG:LG,OF=vF*Math.cos(.5235987756),UF=TF*Math.sin(1.0471975512),EF=KA-OF,PF=3*I/4,_F=KA+OF,qF=FA-UF,$F=3*g/4,gk=FA+UF,jM=vF*QF/vG,QM=TF*QF/vG,Ik=jM*Math.cos(.2617993878),Ck=jM*Math.cos(.7853981634),tk=jM*Math.cos(1.308996939),ik=QM*Math.sin(1.308996939),ek=QM*Math.sin(.7853981634),Ak=QM*Math.sin(.2617993878),sk=KA-Ik,lk=KA-Ck,nk=KA-tk,ak=KA+tk,ok=KA+Ck,ck=KA+Ik,dk=FA-ik,rk=FA-ek,hk=FA-Ak,bk=FA+Ak,uk=FA+ek,mk=FA+ik;i="M 0,".concat(FA," L ").concat(sk,",").concat(hk," L ").concat(EF,",").concat(xF," L ").concat(lk,",").concat(rk," L ").concat(jF,",").concat(qF," L ").concat(nk,",").concat(dk," L ").concat(KA,",0 L ").concat(ak,",").concat(dk," L ").concat(PF,",").concat(qF," L ").concat(ok,",").concat(rk," L ").concat(_F,",").concat(xF," L ").concat(ck,",").concat(hk," L ").concat(I,",").concat(FA," L ").concat(ck,",").concat(bk," L ").concat(_F,",").concat($F," L ").concat(ok,",").concat(uk," L ").concat(PF,",").concat(gk," L ").concat(ak,",").concat(mk," L ").concat(KA,",").concat(g," L ").concat(nk,",").concat(mk," L ").concat(jF,",").concat(gk," L ").concat(lk,",").concat(uk," L ").concat(EF,",").concat($F," L ").concat(sk,",").concat(bk," z");break;case"star16":var Ii=I/2,Ci=g/2,TG=I/2,xG=g/2,jG=2.9527559055118107,QG=3.9370078740157477,OM=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]);OM&&OM.attrs.name==="adj"&&(jG=parseInt(OM.attrs.fmla.substring(4))*wg);var Zk=jG<0?0:jG>QG?QG:jG,Gk=92388*TG/1e5,wk=70711*TG/1e5,pk=38268*TG/1e5,Bk=92388*xG/1e5,Wk=70711*xG/1e5,yk=38268*xG/1e5,Yk=Ii-Gk,Nk=Ii-wk,Vk=Ii-pk,Mk=Ii+pk,Rk=Ii+wk,fk=Ii+Gk,Hk=Ci-Bk,Xk=Ci-Wk,Sk=Ci-yk,Dk=Ci+yk,Kk=Ci+Wk,Fk=Ci+Bk,OG=TG*Zk/QG,UG=xG*Zk/QG,kk=98079*OG/1e5,zk=83147*OG/1e5,Jk=55557*OG/1e5,Lk=19509*OG/1e5,vk=98079*UG/1e5,Tk=83147*UG/1e5,xk=55557*UG/1e5,jk=19509*UG/1e5,Qk=Ii-kk,Ok=Ii-zk,Uk=Ii-Jk,Ek=Ii-Lk,Pk=Ii+Lk,_k=Ii+Jk,qk=Ii+zk,$k=Ii+kk,g3=Ci-vk,I3=Ci-Tk,C3=Ci-xk,t3=Ci-jk,i3=Ci+jk,e3=Ci+xk,A3=Ci+Tk,s3=Ci+vk;i="M 0,".concat(Ci," L ").concat(Qk,",").concat(t3," L ").concat(Yk,",").concat(Sk," L ").concat(Ok,",").concat(C3," L ").concat(Nk,",").concat(Xk," L ").concat(Uk,",").concat(I3," L ").concat(Vk,",").concat(Hk," L ").concat(Ek,",").concat(g3," L ").concat(Ii,",0 L ").concat(Pk,",").concat(g3," L ").concat(Mk,",").concat(Hk," L ").concat(_k,",").concat(I3," L ").concat(Rk,",").concat(Xk," L ").concat(qk,",").concat(C3," L ").concat(fk,",").concat(Sk," L ").concat($k,",").concat(t3," L ").concat(I,",").concat(Ci," L ").concat($k,",").concat(i3," L ").concat(fk,",").concat(Dk," L ").concat(qk,",").concat(e3," L ").concat(Rk,",").concat(Kk," L ").concat(_k,",").concat(A3," L ").concat(Mk,",").concat(Fk," L ").concat(Pk,",").concat(s3," L ").concat(Ii,",").concat(g," L ").concat(Ek,",").concat(s3," L ").concat(Vk,",").concat(Fk," L ").concat(Uk,",").concat(A3," L ").concat(Nk,",").concat(Kk," L ").concat(Ok,",").concat(e3," L ").concat(Yk,",").concat(Dk," L ").concat(Qk,",").concat(i3," z");break;case"star24":var fC=I/2,HC=g/2,z0=I/2,J0=g/2,beg=g/4,ueg=I/4,EG=2.9527559055118107,PG=3.9370078740157477,UM=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]);UM&&UM.attrs.name==="adj"&&(EG=parseInt(UM.attrs.fmla.substring(4))*wg);var l3=EG<0?0:EG>PG?PG:EG,n3=z0*Math.cos(.2617993878),a3=z0*Math.cos(.5235987756),o3=z0*Math.cos(.7853981634),c3=ueg,d3=z0*Math.cos(1.308996939),r3=J0*Math.sin(1.308996939),h3=J0*Math.sin(1.0471975512),b3=J0*Math.sin(.7853981634),u3=beg,m3=J0*Math.sin(.2617993878),Z3=fC-n3,G3=fC-a3,w3=fC-o3,p3=fC-c3,B3=fC-d3,W3=fC+d3,y3=fC+c3,Y3=fC+o3,N3=fC+a3,V3=fC+n3,M3=HC-r3,R3=HC-h3,f3=HC-b3,H3=HC-u3,X3=HC-m3,S3=HC+m3,D3=HC+u3,K3=HC+b3,F3=HC+h3,k3=HC+r3,wd=z0*l3/PG,pd=J0*l3/PG,z3=99144*wd/1e5,J3=92388*wd/1e5,L3=79335*wd/1e5,v3=60876*wd/1e5,T3=38268*wd/1e5,x3=13053*wd/1e5,j3=99144*pd/1e5,Q3=92388*pd/1e5,O3=79335*pd/1e5,U3=60876*pd/1e5,E3=38268*pd/1e5,P3=13053*pd/1e5,_3=fC-z3,q3=fC-J3,$3=fC-L3,gz=fC-v3,Iz=fC-T3,Cz=fC-x3,tz=fC+x3,iz=fC+T3,ez=fC+v3,Az=fC+L3,sz=fC+J3,lz=fC+z3,nz=HC-j3,az=HC-Q3,oz=HC-O3,cz=HC-U3,dz=HC-E3,rz=HC-P3,hz=HC+P3,bz=HC+E3,uz=HC+U3,mz=HC+O3,Zz=HC+Q3,Gz=HC+j3;i="M 0,".concat(HC," L ").concat(_3,",").concat(rz," L ").concat(Z3,",").concat(X3," L ").concat(q3,",").concat(dz," L ").concat(G3,",").concat(H3," L ").concat($3,",").concat(cz," L ").concat(w3,",").concat(f3," L ").concat(gz,",").concat(oz," L ").concat(p3,",").concat(R3," L ").concat(Iz,",").concat(az," L ").concat(B3,",").concat(M3," L ").concat(Cz,",").concat(nz," L ").concat(fC,",0 L ").concat(tz,",").concat(nz," L ").concat(W3,",").concat(M3," L ").concat(iz,",").concat(az," L ").concat(y3,",").concat(R3," L ").concat(ez,",").concat(oz," L ").concat(Y3,",").concat(f3," L ").concat(Az,",").concat(cz," L ").concat(N3,",").concat(H3," L ").concat(sz,",").concat(dz," L ").concat(V3,",").concat(X3," L ").concat(lz,",").concat(rz," L ").concat(I,",").concat(HC," L ").concat(lz,",").concat(hz," L ").concat(V3,",").concat(S3," L ").concat(sz,",").concat(bz," L ").concat(N3,",").concat(D3," L ").concat(Az,",").concat(uz," L ").concat(Y3,",").concat(K3," L ").concat(ez,",").concat(mz," L ").concat(y3,",").concat(F3," L ").concat(iz,",").concat(Zz," L ").concat(W3,",").concat(k3," L ").concat(tz,",").concat(Gz," L ").concat(fC,",").concat(g," L ").concat(Cz,",").concat(Gz," L ").concat(B3,",").concat(k3," L ").concat(Iz,",").concat(Zz," L ").concat(p3,",").concat(F3," L ").concat(gz,",").concat(mz," L ").concat(w3,",").concat(K3," L ").concat($3,",").concat(uz," L ").concat(G3,",").concat(D3," L ").concat(q3,",").concat(bz," L ").concat(Z3,",").concat(S3," L ").concat(_3,",").concat(hz," z");break;case"star32":var eC=I/2,AC=g/2,Cn=I/2,tn=g/2,_G=2.9527559055118107,qG=3.9370078740157477,EM=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]);EM&&EM.attrs.name==="adj"&&(_G=parseInt(EM.attrs.fmla.substring(4))*wg);var wz=_G<0?0:_G>qG?qG:_G,pz=98079*Cn/1e5,Bz=92388*Cn/1e5,Wz=83147*Cn/1e5,yz=Cn*Math.cos(.7853981634),Yz=55557*Cn/1e5,Nz=38268*Cn/1e5,Vz=19509*Cn/1e5,Mz=98079*tn/1e5,Rz=92388*tn/1e5,fz=83147*tn/1e5,Hz=tn*Math.sin(.7853981634),Xz=55557*tn/1e5,Sz=38268*tn/1e5,Dz=19509*tn/1e5,Kz=eC-pz,Fz=eC-Bz,kz=eC-Wz,zz=eC-yz,Jz=eC-Yz,Lz=eC-Nz,vz=eC-Vz,Tz=eC+Vz,xz=eC+Nz,jz=eC+Yz,Qz=eC+yz,Oz=eC+Wz,Uz=eC+Bz,Ez=eC+pz,Pz=AC-Mz,_z=AC-Rz,qz=AC-fz,$z=AC-Hz,gJ=AC-Xz,IJ=AC-Sz,CJ=AC-Dz,tJ=AC+Dz,iJ=AC+Sz,eJ=AC+Xz,AJ=AC+Hz,sJ=AC+fz,lJ=AC+Rz,nJ=AC+Mz,en=Cn*wz/qG,An=tn*wz/qG,aJ=99518*en/1e5,oJ=95694*en/1e5,cJ=88192*en/1e5,dJ=77301*en/1e5,rJ=63439*en/1e5,hJ=47140*en/1e5,bJ=29028*en/1e5,uJ=9802*en/1e5,mJ=99518*An/1e5,ZJ=95694*An/1e5,GJ=88192*An/1e5,wJ=77301*An/1e5,pJ=63439*An/1e5,BJ=47140*An/1e5,WJ=29028*An/1e5,yJ=9802*An/1e5,YJ=eC-aJ,NJ=eC-oJ,VJ=eC-cJ,MJ=eC-dJ,RJ=eC-rJ,fJ=eC-hJ,HJ=eC-bJ,XJ=eC-uJ,SJ=eC+uJ,DJ=eC+bJ,KJ=eC+hJ,FJ=eC+rJ,kJ=eC+dJ,zJ=eC+cJ,JJ=eC+oJ,LJ=eC+aJ,vJ=AC-mJ,TJ=AC-ZJ,xJ=AC-GJ,jJ=AC-wJ,QJ=AC-pJ,OJ=AC-BJ,UJ=AC-WJ,EJ=AC-yJ,PJ=AC+yJ,_J=AC+WJ,qJ=AC+BJ,$J=AC+pJ,gL=AC+wJ,IL=AC+GJ,CL=AC+ZJ,tL=AC+mJ;i="M 0,".concat(AC," L ").concat(YJ,",").concat(EJ," L ").concat(Kz,",").concat(CJ," L ").concat(NJ,",").concat(UJ," L ").concat(Fz,",").concat(IJ," L ").concat(VJ,",").concat(OJ," L ").concat(kz,",").concat(gJ," L ").concat(MJ,",").concat(QJ," L ").concat(zz,",").concat($z," L ").concat(RJ,",").concat(jJ," L ").concat(Jz,",").concat(qz," L ").concat(fJ,",").concat(xJ," L ").concat(Lz,",").concat(_z," L ").concat(HJ,",").concat(TJ," L ").concat(vz,",").concat(Pz," L ").concat(XJ,",").concat(vJ," L ").concat(eC,",0 L ").concat(SJ,",").concat(vJ," L ").concat(Tz,",").concat(Pz," L ").concat(DJ,",").concat(TJ," L ").concat(xz,",").concat(_z," L ").concat(KJ,",").concat(xJ," L ").concat(jz,",").concat(qz," L ").concat(FJ,",").concat(jJ," L ").concat(Qz,",").concat($z," L ").concat(kJ,",").concat(QJ," L ").concat(Oz,",").concat(gJ," L ").concat(zJ,",").concat(OJ," L ").concat(Uz,",").concat(IJ," L ").concat(JJ,",").concat(UJ," L ").concat(Ez,",").concat(CJ," L ").concat(LJ,",").concat(EJ," L ").concat(I,",").concat(AC," L ").concat(LJ,",").concat(PJ," L ").concat(Ez,",").concat(tJ," L ").concat(JJ,",").concat(_J," L ").concat(Uz,",").concat(iJ," L ").concat(zJ,",").concat(qJ," L ").concat(Oz,",").concat(eJ," L ").concat(kJ,",").concat($J," L ").concat(Qz,",").concat(AJ," L ").concat(FJ,",").concat(gL," L ").concat(jz,",").concat(sJ," L ").concat(KJ,",").concat(IL," L ").concat(xz,",").concat(lJ," L ").concat(DJ,",").concat(CL," L ").concat(Tz,",").concat(nJ," L ").concat(SJ,",").concat(tL," L ").concat(eC,",").concat(g," L ").concat(XJ,",").concat(tL," L ").concat(vz,",").concat(nJ," L ").concat(HJ,",").concat(CL," L ").concat(Lz,",").concat(lJ," L ").concat(fJ,",").concat(IL," L ").concat(Jz,",").concat(sJ," L ").concat(RJ,",").concat(gL," L ").concat(zz,",").concat(AJ," L ").concat(MJ,",").concat($J," L ").concat(kz,",").concat(eJ," L ").concat(VJ,",").concat(qJ," L ").concat(Fz,",").concat(iJ," L ").concat(NJ,",").concat(_J," L ").concat(Kz,",").concat(tJ," L ").concat(YJ,",").concat(PJ," z");break;case"pie":case"pieWedge":case"arc":var L0,v0,$G,gw,Iw=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]);if(t==="pie"?(L0=0,v0=270,$G=g,gw=!0):t==="pieWedge"?(L0=180,v0=270,$G=2*g,gw=!0):t==="arc"&&(L0=270,v0=0,$G=g,gw=!1),Iw){var T0=U(Iw,["attrs","fmla"]),PM=T0;T0===void 0&&(T0=Iw[0].attrs.fmla,PM=Iw[1].attrs.fmla),T0&&(L0=parseInt(T0.substring(4))/6e4),PM&&(v0=parseInt(PM.substring(4))/6e4)}i=function(Rg,NI,pC,vC,TC){var Hi=function(Zu){var Ro=Number(Zu);if(!Number.isFinite(Ro))return 0;var Xe=Ro%360;return Xe<0&&(Xe+=360),Xe},xC=Hi(pC),qC=Hi(vC),rt=qC-xC;rt<0&&(rt+=360),rt=Math.min(Math.max(rt,0),360);var Yt=Number(Rg),_i=Number(NI)/2,Jt=Yt/2,ht=_i,Lt=Jt,At=function(Zu){return Zu*(Math.PI/180)},fe=ht+Math.cos(At(xC))*_i,He=Lt+Math.sin(At(xC))*Jt,uY=ht+Math.cos(At(qC))*_i,mY=Lt+Math.sin(At(qC))*Jt,ZY=rt>180?1:0;return TC?"M".concat(ht,",").concat(Lt," L").concat(fe,",").concat(He," A").concat(_i,",").concat(Jt," 0 ").concat(ZY,",").concat(1," ").concat(uY,",").concat(mY," Z"):"M".concat(fe,",").concat(He," A").concat(_i,",").concat(Jt," 0 ").concat(ZY,",").concat(1," ").concat(uY,",").concat(mY)}($G,I,L0,v0,gw);break;case"chord":var iL=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),eL=45,AL=270;if(iL){var sL,Cw=MI(iL);try{for(Cw.s();!(sL=Cw.n()).done;){var _M=sL.value,lL=U(_M,["attrs","name"]);if(lL==="adj1"){var meg=U(_M,["attrs","fmla"]);eL=parseInt(meg.substring(4))/6e4}else if(lL==="adj2"){var Zeg=U(_M,["attrs","fmla"]);AL=parseInt(Zeg.substring(4))/6e4}}}catch(Rg){Cw.e(Rg)}finally{Cw.f()}}var nL=g/2,aL=I/2;i=Mg(aL,nL,aL,nL,eL,AL,!0);break;case"frame":var oL=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),tw=.9842519685039369,cL=3.9370078740157477;oL&&(tw=parseInt(oL.substring(4))*wg);var Geg=tw<0?0:tw>cL?cL:tw,Bd=Math.min(I,g)*Geg/7.874015748031495,dL=I-Bd,rL=g-Bd;i="M 0,0 L ".concat(I,",0 L ").concat(I,",").concat(g," L 0,").concat(g," z M ").concat(Bd,",").concat(Bd," L ").concat(Bd,",").concat(rL," L ").concat(dL,",").concat(rL," L ").concat(dL,",").concat(Bd," z");break;case"donut":var hL=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),iw=1.9685039370078738,bL=3.9370078740157477;hL&&(iw=parseInt(hL.substring(4))*wg);var weg=iw<0?0:iw>bL?bL:iw,uL=Math.min(I,g)*weg/7.874015748031495,x0=I/2-uL,mL=g/2-uL,peg="M ".concat(I/2-I/2,",").concat(g/2," A ").concat(I/2,",").concat(g/2," 0 1,0 ").concat(I/2+I/2,",").concat(g/2," A ").concat(I/2,",").concat(g/2," 0 1,0 ").concat(I/2-I/2,",").concat(g/2," Z"),Beg="M ".concat(I/2+x0,",").concat(g/2," A ").concat(x0,",").concat(mL," 0 1,1 ").concat(I/2-x0,",").concat(g/2," A ").concat(x0,",").concat(mL," 0 1,1 ").concat(I/2+x0,",").concat(g/2," Z");i="".concat(peg," ").concat(Beg);break;case"noSmoking":var ZL=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),ew=1.4763779527559053,GL=3.9370078740157477;ZL&&(ew=parseInt(ZL.substring(4))*wg);var Weg=ew<0?0:ew>GL?GL:ew,qM=Math.min(I,g)*Weg/7.874015748031495,Aw=I/2-qM,sw=g/2-qM,$M=Math.atan(g/I),wL=sw*Math.cos($M),pL=Aw*Math.sin($M),yeg=Aw*sw/Math.sqrt(wL*wL+pL*pL),Yeg=qM/2,BL=Math.atan(Yeg/yeg),WL=-Math.PI+2*BL,gR=$M-BL,yL=gR-Math.PI,Neg="M ".concat(I/2-I/2,",").concat(g/2," A ").concat(I/2,",").concat(g/2," 0 1,0 ").concat(I/2+I/2,",").concat(g/2," A ").concat(I/2,",").concat(g/2," 0 1,0 ").concat(I/2-I/2,",").concat(g/2," Z"),YL=I/2,NL=g/2,Veg=aq(YL,NL,Aw,sw,gR,gR+WL),Meg=aq(YL,NL,Aw,sw,yL,yL+WL);i="".concat(Neg," ").concat(Veg," ").concat(Meg);break;case"halfFrame":var VL=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),lw=3.5,nw=3.5,aw=7.874015748031495;if(VL){var ML,ow=MI(VL);try{for(ow.s();!(ML=ow.n()).done;){var IR=ML.value,RL=U(IR,["attrs","name"]);RL==="adj1"?lw=parseInt(U(IR,["attrs","fmla"]).substring(4))*wg:RL==="adj2"&&(nw=parseInt(U(IR,["attrs","fmla"]).substring(4))*wg)}}catch(Rg){ow.e(Rg)}finally{ow.f()}}var cw=Math.min(I,g),fL=aw*I/cw,dw=cw*(nw<0?0:nw>fL?fL:nw)/aw,HL=aw*(g-g*dw/I)/cw,CR=cw*(lw<0?0:lw>HL?HL:lw)/aw,Reg=I-CR*I/g,feg=g-dw*g/I;i="M 0,0 L ".concat(I,",0 L ").concat(Reg,",").concat(CR," L ").concat(dw,",").concat(CR," L ").concat(dw,",").concat(feg," L 0,").concat(g," z");break;case"blockArc":var XL=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),rw=180,hw=0,bw=1.9685039370078738,SL=3.9370078740157477;if(XL){var DL,uw=MI(XL);try{for(uw.s();!(DL=uw.n()).done;){var mw=DL.value,tR=U(mw,["attrs","name"]);tR==="adj1"?rw=parseInt(U(mw,["attrs","fmla"]).substring(4))/6e4:tR==="adj2"?hw=parseInt(U(mw,["attrs","fmla"]).substring(4))/6e4:tR==="adj3"&&(bw=parseInt(U(mw,["attrs","fmla"]).substring(4))*wg)}}catch(Rg){uw.e(Rg)}finally{uw.f()}}var iR,eR,j0=360,Wd=rw<0?0:rw>j0?j0:rw,Zw=hw<0?0:hw>j0?j0:hw,Heg=bw<0?0:bw>SL?SL:bw,AR=Zw-Wd,KL=AR>0?AR:AR+j0,Q0=Wd+KL,Xeg=Zw+-KL,Gw=Wd*Math.PI/180,ww=Zw*Math.PI/180,sn=I/2,ln=g/2,pw=I/2,Bw=g/2;if(Wd>90&&Wd<270){var FL=sn*Math.sin(Math.PI/2-Gw),kL=ln*Math.cos(Math.PI/2-Gw);iR=pw-sn*Math.cos(Math.atan(kL/FL)),eR=Bw-ln*Math.sin(Math.atan(kL/FL))}else{var zL=sn*Math.sin(Gw),JL=ln*Math.cos(Gw);iR=pw+sn*Math.cos(Math.atan(zL/JL)),eR=Bw+ln*Math.sin(Math.atan(zL/JL))}var sR,lR,LL=Math.min(I,g)*Heg/7.874015748031495,O0=sn-LL,U0=ln-LL;if(Q0<=450&&Q0>270||Q0>=630&&Q0<720){var vL=O0*Math.sin(ww),TL=U0*Math.cos(ww);sR=pw+O0*Math.cos(Math.atan(vL/TL)),lR=Bw+U0*Math.sin(Math.atan(vL/TL))}else{var xL=O0*Math.sin(Math.PI/2-ww),jL=U0*Math.cos(Math.PI/2-ww);sR=pw-O0*Math.cos(Math.atan(jL/xL)),lR=Bw-U0*Math.sin(Math.atan(jL/xL))}i="M ".concat(iR,",").concat(eR," ").concat(Mg(sn,ln,sn,ln,Wd,Q0,!1).replace("M","L")," L ").concat(sR,",").concat(lR," ").concat(Mg(sn,ln,O0,U0,Zw,Xeg,!1).replace("M","L")," z");break;case"bracePair":var QL=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),Ww=.6561417322834645,OL=1.9685039370078738;QL&&(Ww=parseInt(QL.substring(4))*wg);var UL=g/2,yw=180,EL=Ww<0?0:Ww>OL?OL:Ww,PL=Math.min(I,g),yC=PL*EL/7.874015748031495,Yw=PL*EL/3.9370078740157477,nR=I-Yw,_L=I-yC,aR=UL-yC,oR=UL+yC,cR=g-yC;i="M ".concat(Yw,",").concat(g," ").concat(Mg(Yw,cR,yC,yC,90,yw,!1).replace("M","L")," L ").concat(yC,",").concat(oR," ").concat(Mg(0,oR,yC,yC,0,-90,!1).replace("M","L")," ").concat(Mg(0,aR,yC,yC,90,0,!1).replace("M","L")," L ").concat(yC,",").concat(yC," ").concat(Mg(Yw,yC,yC,yC,yw,270,!1).replace("M","L")," M ").concat(nR,",0 ").concat(Mg(nR,yC,yC,yC,270,360,!1).replace("M","L")," L ").concat(_L,",").concat(aR," ").concat(Mg(I,aR,yC,yC,yw,90,!1).replace("M","L")," ").concat(Mg(I,oR,yC,yC,270,yw,!1).replace("M","L")," L ").concat(_L,",").concat(cR," ").concat(Mg(nR,cR,yC,yC,0,90,!1).replace("M","L"));break;case"leftBrace":var qL=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),Nw=.6561417322834645,Vw=3.9370078740157477,E0=7.874015748031495;if(qL){var $L,Mw=MI(qL);try{for(Mw.s();!($L=Mw.n()).done;){var dR=$L.value,gv=U(dR,["attrs","name"]);gv==="adj1"?Nw=parseInt(U(dR,["attrs","fmla"]).substring(4))*wg:gv==="adj2"&&(Vw=parseInt(U(dR,["attrs","fmla"]).substring(4))*wg)}}catch(Rg){Mw.e(Rg)}finally{Mw.f()}}var Rw=Vw<0?0:Vw>E0?E0:Vw,Iv=Math.min(I,g),Cv=E0-Rw,tv=(Cv<Rw?Cv:Rw)/2*g/Iv,Fs=Iv*(Nw<0?0:Nw>tv?tv:Nw)/E0,iv=g*Rw/E0,Seg=iv-Fs,ev=iv+Fs;i="M ".concat(I,",").concat(g," ").concat(Mg(I,g-Fs,I/2,Fs,90,180,!1).replace("M","L")," L ").concat(I/2,",").concat(ev," ").concat(Mg(0,ev,I/2,Fs,0,-90,!1).replace("M","L")," ").concat(Mg(0,Seg,I/2,Fs,90,0,!1).replace("M","L")," L ").concat(I/2,",").concat(Fs," ").concat(Mg(I,Fs,I/2,Fs,180,270,!1).replace("M","L"));break;case"rightBrace":var Av=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),fw=.6561417322834645,Hw=3.9370078740157477,P0=7.874015748031495;if(Av){var sv,Xw=MI(Av);try{for(Xw.s();!(sv=Xw.n()).done;){var rR=sv.value,lv=U(rR,["attrs","name"]);lv==="adj1"?fw=parseInt(U(rR,["attrs","fmla"]).substring(4))*wg:lv==="adj2"&&(Hw=parseInt(U(rR,["attrs","fmla"]).substring(4))*wg)}}catch(Rg){Xw.e(Rg)}finally{Xw.f()}}var Sw=Hw<0?0:Hw>P0?P0:Hw,nv=Math.min(I,g),av=P0-Sw,ov=(av<Sw?av:Sw)/2*g/nv,nn=nv*(fw<0?0:fw>ov?ov:fw)/P0,cv=g*Sw/P0,dv=cv-nn,rv=g-nn;i="M 0,0 ".concat(Mg(0,nn,I/2,nn,270,360,!1).replace("M","L")," L ").concat(I/2,",").concat(dv," ").concat(Mg(I,dv,I/2,nn,180,90,!1).replace("M","L")," ").concat(Mg(I,cv+nn,I/2,nn,270,180,!1).replace("M","L")," L ").concat(I/2,",").concat(rv," ").concat(Mg(0,rv,I/2,nn,0,90,!1).replace("M","L"));break;case"bracketPair":var hv=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),Dw=1.3123622047244095,bv=3.9370078740157477;hv&&(Dw=parseInt(hv.substring(4))*wg);var Deg=Dw<0?0:Dw>bv?bv:Dw,Ri=Math.min(I,g)*Deg/7.874015748031495,uv=I-Ri,mv=g-Ri;i="".concat(Mg(Ri,Ri,Ri,Ri,270,180,!1)," ").concat(Mg(Ri,mv,Ri,Ri,180,90,!1).replace("M","L")," ").concat(Mg(uv,Ri,Ri,Ri,270,360,!1)," ").concat(Mg(uv,mv,Ri,Ri,0,90,!1).replace("M","L"));break;case"leftBracket":var Zv=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),Kw=.6561417322834645,Gv=3.9370078740157477*g/Math.min(I,g);Zv&&(Kw=parseInt(Zv.substring(4))*wg);var Keg=Kw<0?0:Kw>Gv?Gv:Kw,IA=Math.min(I,g)*Keg/7.874015748031495;IA>I&&(IA=I);var Feg=g-IA;i="M ".concat(I,",").concat(g," ").concat(Mg(IA,Feg,IA,IA,90,180,!1).replace("M","L")," L 0,").concat(IA," ").concat(Mg(IA,IA,IA,IA,180,270,!1).replace("M","L")," L ").concat(I,",0");break;case"rightBracket":var wv=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),Fw=.6561417322834645,pv=3.9370078740157477*g/Math.min(I,g);wv&&(Fw=parseInt(wv.substring(4))*wg);var keg=Fw<0?0:Fw>pv?pv:Fw,_a=Math.min(I,g)*keg/7.874015748031495,zeg=g-_a,Bv=I-_a;i="M 0,".concat(g," ").concat(Mg(Bv,zeg,_a,_a,90,0,!1).replace("M","L")," L ").concat(I,",").concat(g/2," ").concat(Mg(Bv,_a,_a,_a,360,270,!1).replace("M","L")," L 0,0");break;case"moon":var Wv=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),yv=.5;Wv&&(yv=parseInt(Wv.substring(4))/1e5);var kw=g/2,Jeg=(1-yv)*I;i="M ".concat(I,",").concat(g," ").concat(Mg(I,kw,I,kw,90,270,!1).replace("M","L")," ").concat(Mg(I,kw,Jeg,kw,270,90,!1).replace("M","L")," z");break;case"corner":var Yv=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),zw=3.9370078740157477,Jw=3.9370078740157477,Lw=7.874015748031495;if(Yv){var Nv,vw=MI(Yv);try{for(vw.s();!(Nv=vw.n()).done;){var hR=Nv.value,Vv=U(hR,["attrs","name"]);Vv==="adj1"?zw=parseInt(U(hR,["attrs","fmla"]).substring(4))*wg:Vv==="adj2"&&(Jw=parseInt(U(hR,["attrs","fmla"]).substring(4))*wg)}}catch(Rg){vw.e(Rg)}finally{vw.f()}}var Tw=Math.min(I,g),Mv=Lw*g/Tw,Rv=Lw*I/Tw,fv=Tw*(Jw<0?0:Jw>Rv?Rv:Jw)/Lw,Hv=g-Tw*(zw<0?0:zw>Mv?Mv:zw)/Lw;i="M 0,0 L ".concat(fv,",0 L ").concat(fv,",").concat(Hv," L ").concat(I,",").concat(Hv," L ").concat(I,",").concat(g," L 0,").concat(g," z");break;case"diagStripe":var Xv=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),xw=3.9370078740157477,jw=7.874015748031495;Xv&&(xw=parseInt(Xv.substring(4))*wg);var Sv=xw<0?0:xw>jw?jw:xw,Leg=I*Sv/jw;i="M 0,".concat(g*Sv/jw," L ").concat(Leg,",0 L ").concat(I,",0 L 0,").concat(g," z");break;case"gear6":case"gear9":i=function(Rg,NI){for(var pC=1.5*Rg,vC=pC,TC=pC,Hi=NI,xC=pC,qC=Rg,rt=2*Math.PI,Yt=rt/(2*Hi),_i=35*Yt*.005,Jt=50*Yt*.005,ht=Yt,Lt=!1,At=" M"+(vC+xC*Math.cos(Jt))+" "+(TC+xC*Math.sin(Jt));ht<=rt+Yt;ht+=Yt)Lt?(At+=" L"+(vC+qC*Math.cos(ht-_i))+","+(TC+qC*Math.sin(ht-_i)),At+=" L"+(vC+xC*Math.cos(ht+Jt))+","+(TC+xC*Math.sin(ht+Jt))):(At+=" L"+(vC+xC*Math.cos(ht-Jt))+","+(TC+xC*Math.sin(ht-Jt)),At+=" L"+(vC+qC*Math.cos(ht+_i))+","+(TC+qC*Math.sin(ht+_i))),Lt=!Lt;return At+" "}(I,g/3.5,parseInt(t.substring(4)));break;case"bentConnector3":var Dv=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),bR=.5;Dv&&(bR=parseInt(Dv.substring(4))/1e5),i="M 0 0 L ".concat(bR*I," 0 L ").concat(bR*I," ").concat(g," L ").concat(I," ").concat(g);break;case"plus":var Kv=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),kA=.25;Kv&&(kA=parseInt(Kv.substring(4))/1e5);var an=1-kA;i="M ".concat(kA*I," 0 L ").concat(kA*I," ").concat(kA*g," L 0 ").concat(kA*g," L 0 ").concat(an*g," L ").concat(kA*I," ").concat(an*g," L ").concat(kA*I," ").concat(g," L ").concat(an*I," ").concat(g," L ").concat(an*I," ").concat(an*g," L ").concat(I," ").concat(an*g," L ").concat(I," ").concat(kA*g," L ").concat(an*I," ").concat(kA*g," L ").concat(an*I," 0 Z");break;case"teardrop":var Fv=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),_0=7.874015748031495,kv=_0,zv=15.74803149606299;Fv&&(_0=parseInt(Fv.substring(4))*wg);var Jv=_0<0?0:_0>zv?zv:_0,Lv=Math.sqrt(2),veg=Lv*(I/2)*Jv/kv,Teg=Lv*(g/2)*Jv/kv,vv=45*Math.PI/180,xeg=veg*Math.cos(vv),jeg=Teg*Math.cos(vv),Tv=I/2+xeg,xv=g/2-jeg,Qeg=(I/2+Tv)/2,Oeg=(g/2+xv)/2;i="".concat(Mg(I/2,g/2,I/2,g/2,180,270,!1)," Q ").concat(Qeg,",0 ").concat(Tv,",").concat(xv," Q ").concat(I,",").concat(Oeg," ").concat(I,",").concat(g/2," ").concat(Mg(I/2,g/2,I/2,g/2,0,90,!1).replace("M","L")," ").concat(Mg(I/2,g/2,I/2,g/2,90,180,!1).replace("M","L")," z");break;case"plaque":var jv=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),Qw=1.3123622047244095,Qv=3.9370078740157477;jv&&(Qw=parseInt(jv.substring(4))*wg);var Be=(Qw<0?0:Qw>Qv?Qv:Qw)*Math.min(I,g)/7.874015748031495,Ueg=I-Be,Eeg=g-Be;i="M 0,".concat(Be," ").concat(Mg(0,0,Be,Be,90,0,!1).replace("M","L")," L ").concat(Ueg,",0 ").concat(Mg(I,0,Be,Be,180,90,!1).replace("M","L")," L ").concat(I,",").concat(Eeg," ").concat(Mg(I,g,Be,Be,270,180,!1).replace("M","L")," L ").concat(Be,",").concat(g," ").concat(Mg(0,g,Be,Be,0,-90,!1).replace("M","L")," z");break;case"sun":var Ov=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),ks=wg,Ow=25e3*ks,Uv=12500*ks,Ev=46875*ks;Ov&&(Ow=parseInt(Ov.substring(4))*ks);var Pv=Ow<Uv?Uv:Ow>Ev?Ev:Ow,uR=5e4*ks,JC=1e5*ks,Uw=uR-Pv,Ew=3*(uR-30274*Uw/32768)/4,_v=3*(uR-12540*Uw/32768)/4,mR=Ew+3662*ks,ZR=_v+36620*ks,GR=_v+12500*ks,qv=JC-Ew,$v=JC-mR,gT=JC-ZR,IT=JC-GR,CT=18436*I/21600,tT=3163*g/21600,iT=3163*I/21600,eT=18436*g/21600,AT=I*Ew/JC,sT=I*mR/JC,lT=I*ZR/JC,nT=I*GR/JC,aT=I*qv/JC,oT=I*$v/JC,cT=I*gT/JC,dT=I*IT/JC,Peg=I*Pv/JC,_eg=I*Uw/JC,qeg=g*Uw/JC,rT=g*Ew/JC,hT=g*mR/JC,bT=g*ZR/JC,uT=g*GR/JC,mT=g*qv/JC,ZT=g*$v/JC,GT=g*gT/JC,wT=g*IT/JC;i="M ".concat(I,",").concat(g/2," L ").concat(aT,",").concat(wT," L ").concat(aT,",").concat(uT," z M ").concat(CT,",").concat(tT," L ").concat(oT,",").concat(GT," L ").concat(lT,",").concat(hT," z M ").concat(I/2,",0 L ").concat(dT,",").concat(rT," L ").concat(nT,",").concat(rT," z M ").concat(iT,",").concat(tT," L ").concat(cT,",").concat(hT," L ").concat(sT,",").concat(GT," z M 0,").concat(g/2," L ").concat(AT,",").concat(uT," L ").concat(AT,",").concat(wT," z M ").concat(iT,",").concat(eT," L ").concat(sT,",").concat(bT," L ").concat(cT,",").concat(ZT," z M ").concat(I/2,",").concat(g," L ").concat(nT,",").concat(mT," L ").concat(dT,",").concat(mT," z M ").concat(CT,",").concat(eT," L ").concat(lT,",").concat(ZT," L ").concat(oT,",").concat(bT," z M ").concat(Peg,",").concat(g/2," ").concat(Mg(I/2,g/2,_eg,qeg,180,540,!1).replace("M","L")," z");break;case"heart":var pT=49*I/48,BT=10*I/48,$eg=I/2-pT,gAg=I/2-BT,IAg=I/2+BT,CAg=I/2+pT,WT=-g/3;i="M ".concat(I/2,",").concat(g/4," C ").concat(IAg,",").concat(WT," ").concat(CAg,",").concat(g/4," ").concat(I/2,",").concat(g," C ").concat($eg,",").concat(g/4," ").concat(gAg,",").concat(WT," ").concat(I/2,",").concat(g/4," z");break;case"lightningBolt":var tAg=5022*I/21600,iAg=11050*I/21600,eAg=10012*I/21600,AAg=14767*I/21600,sAg=12222*I/21600,lAg=12860*I/21600,nAg=7602*I/21600,aAg=16577*I/21600,oAg=3890*g/21600,cAg=6080*g/21600,dAg=6797*g/21600,rAg=12877*g/21600,hAg=9705*g/21600,bAg=12007*g/21600,uAg=13987*g/21600,mAg=8382*g/21600,ZAg=14915*g/21600;i="M ".concat(8472*I/21600,",0 L ").concat(lAg,",").concat(cAg," L ").concat(iAg,",").concat(dAg," L ").concat(aAg,",").concat(bAg," L ").concat(AAg,",").concat(rAg," L ").concat(I,",").concat(g," L ").concat(eAg,",").concat(ZAg," L ").concat(sAg,",").concat(uAg," L ").concat(tAg,",").concat(hAg," L ").concat(nAg,",").concat(mAg," L 0,").concat(oAg," z");break;case"cube":var yT=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),wR=wg,Pw=25e3*wR;yT&&(Pw=parseInt(yT.substring(4))*wR);var pR=1e5*wR,on=Math.min(I,g)*(Pw<0?0:Pw>pR?pR:Pw)/pR,GAg=g-on,q0=I-on;i="M 0,".concat(on," L ").concat(on,",0 L ").concat(I,",0 L ").concat(I,",").concat(GAg," L ").concat(q0,",").concat(g," L 0,").concat(g," z M 0,").concat(on," L ").concat(q0,",").concat(on," M ").concat(q0,",").concat(on," L ").concat(I,",0 M ").concat(q0,",").concat(on," L ").concat(q0,",").concat(g);break;case"bevel":var YT=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),BR=wg,_w=12500*BR;YT&&(_w=parseInt(YT.substring(4))*BR);var NT=5e4*BR,zA=Math.min(I,g)*(_w<0?0:_w>NT?NT:_w)/7.874015748031495,qw=I-zA,$w=g-zA;i="M 0,0 L ".concat(I,",0 L ").concat(I,",").concat(g," L 0,").concat(g," z M ").concat(zA,",").concat(zA," L ").concat(qw,",").concat(zA," L ").concat(qw,",").concat($w," L ").concat(zA,",").concat($w," z M 0,0 L ").concat(zA,",").concat(zA," M 0,").concat(g," L ").concat(zA,",").concat($w," M ").concat(I,",0 L ").concat(qw,",").concat(zA," M ").concat(I,",").concat(g," L ").concat(qw,",").concat($w);break;case"foldedCorner":var VT=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),WR=wg,gp=16667*WR;VT&&(gp=parseInt(VT.substring(4))*WR);var MT=5e4*WR,yR=Math.min(I,g)*(gp<0?0:gp>MT?MT:gp)/7.874015748031495,RT=yR/5,YR=I-yR,wAg=YR+RT,NR=g-yR,pAg=NR+RT;i="M ".concat(YR,",").concat(g," L ").concat(wAg,",").concat(pAg," L ").concat(I,",").concat(NR," L ").concat(YR,",").concat(g," L 0,").concat(g," L 0,0 L ").concat(I,",0 L ").concat(I,",").concat(NR);break;case"cloud":case"cloudCallout":for(var fT=3900*I/43200,HT=14370*g/43200,BAg=6753*I/43200,WAg=9190*g/43200,XT=5333*I/43200,yAg=7267*g/43200,YAg=4365*I/43200,ST=5945*g/43200,NAg=4857*I/43200,VAg=6595*g/43200,MAg=7273*g/43200,RAg=6775*I/43200,fAg=9220*g/43200,HAg=5785*I/43200,XAg=7867*g/43200,SAg=6752*I/43200,DAg=9215*g/43200,KAg=7720*I/43200,FAg=10543*g/43200,kAg=4360*I/43200,zAg=5918*g/43200,JAg=4345*I/43200,LAg=function(Rg,NI,pC,vC,TC,Hi){return Mg(Rg-pC*Math.cos(TC*Math.PI/180),NI-vC*Math.sin(TC*Math.PI/180),pC,vC,TC,TC+Hi,!1).replace("M","L")},Ip="M ".concat(fT,",").concat(HT),VR=[fT,HT],MR=0,DT=[[BAg,WAg,-11429249/6e4,7426832/6e4],[XT,yAg,-8646143/6e4,5396714/6e4],[YAg,ST,-8748475/6e4,5983381/6e4],[NAg,VAg,-7859164/6e4,7034504/6e4],[XT,MAg,-4722533/6e4,6541615/6e4],[RAg,fAg,-46.26725,130.269],[HAg,XAg,37501/6e4,6842e3/6e4],[SAg,DAg,22.4516,115.17255],[KAg,FAg,3974558/6e4,4542661/6e4],[kAg,zAg,-16496525/6e4,8804134/6e4],[JAg,ST,-246.8285,152.51885]];MR<DT.length;MR++){var vAg=DT[MR],RR=LAg.apply(void 0,[VR[0],VR[1]].concat(r9(vAg)));Ip+=RR;var TAg=RR.lastIndexOf("L"),KT=RR.substring(TAg+1).split(" ");VR=[parseFloat(KT[0]),parseFloat(KT[1])]}if(Ip+=" z",t==="cloudCallout"){var FT=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),$0=wg,Cp=-20833*$0,kT=62500*$0;if(FT){var zT,tp=MI(FT);try{for(tp.s();!(zT=tp.n()).done;){var fR=zT.value,JT=U(fR,["attrs","name"]);JT==="adj1"?Cp=parseInt(U(fR,["attrs","fmla"]).substring(4))*$0:JT==="adj2"&&(kT=parseInt(U(fR,["attrs","fmla"]).substring(4))*$0)}}catch(Rg){tp.e(Rg)}finally{tp.f()}}var LT=1e5*$0,gb=Math.min(I,g),Ib=I/2,Cb=g/2,HR=I*Cp/LT,XR=g*kT/LT,ip=Ib+HR,ep=Cb+XR,vT=Cb*Math.cos(Math.atan(XR/HR)),TT=Ib*Math.sin(Math.atan(XR/HR)),xT=Ib*Math.cos(Math.atan(TT/vT)),jT=Cb*Math.sin(Math.atan(TT/vT)),Ap=(Cp>=0?Ib+xT:Ib-xT)-ip,sp=(Cp>=0?Cb+jT:Cb-jT)-ep,tb=Math.sqrt(Ap*Ap+sp*sp),QT=(tb-6600*gb/21600)/3,ib=1800*gb/21600,OT=QT+ib,UT=OT*sp/tb+ep,ET=4800*gb/21600+2*QT,PT=ET*sp/tb+ep,lp=1200*gb/21600,np=600*gb/21600,_T=OT*Ap/tb+ip+lp,qT=ET*Ap/tb+ip+ib;Ip+="".concat(Mg(ip+np-np,ep,np,np,0,360,!0)," M ").concat(_T,",").concat(UT," ").concat(Mg(_T-lp,UT,lp,lp,0,360,!0).replace("M","L")," M ").concat(qT,",").concat(PT," ").concat(Mg(qT-ib,PT,ib,ib,0,360,!0).replace("M","L"))}i=Ip;break;case"smileyFace":var $T=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),SR=wg,ap=4653*SR;$T&&(ap=parseInt($T.substring(4))*SR);var op=4653*SR,cp=I/2,DR=g/2,gx=ap<-op?-op:ap>op?op:ap,xAg=16640*I/21600,Ix=16515*g/21600,Cx=g*gx/7.874015748031495,KR=Ix-Cx,tx=Ix+Cx+g*gx/3.9370078740157477,ix=1125*I/21600,ex=1125*g/21600,Ax=7570*g/21600,jAg=13135*I/21600,sx=4969*I/21699;i="".concat(Mg(6215*I/21600,Ax,ix,ex,0,360,!0)," ").concat(Mg(jAg,Ax,ix,ex,0,360,!0)," M ").concat(sx,",").concat(KR," Q ").concat(cp,",").concat(tx," ").concat(xAg,",").concat(KR," Q ").concat(cp,",").concat(tx," ").concat(sx,",").concat(KR," M 0,").concat(DR," ").concat(Mg(cp,DR,cp,DR,180,540,!1).replace("M","L")," z");break;case"verticalScroll":case"horizontalScroll":var lx=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),FR=wg,dp=12500*FR;lx&&(dp=parseInt(lx.substring(4))*FR);var nx=25e3*FR,QAg=Math.min(I,g),eb=g,Ab=I,bC=QAg*(dp<0?0:dp>nx?nx:dp)/7.874015748031495,wI=bC/2,cn=bC/4;if(t==="verticalScroll"){var yd=bC+wI,OAg=bC+bC,rp=Ab-bC,ax=Ab-wI,UAg=rp-wI,kR=eb-bC,qa=eb-wI;i="M ".concat(bC,",").concat(kR," L ").concat(bC,",").concat(wI," ").concat(Mg(yd,wI,wI,wI,180,270,!1).replace("M","L")," L ").concat(ax,",").concat(0," ").concat(Mg(ax,wI,wI,wI,270,450,!1).replace("M","L")," L ").concat(rp,",").concat(bC," L ").concat(rp,",").concat(qa," ").concat(Mg(UAg,qa,wI,wI,0,90,!1).replace("M","L")," L ").concat(wI,",").concat(eb," ").concat(Mg(wI,qa,wI,wI,90,270,!1).replace("M","L")," z M ").concat(yd,",").concat(0," ").concat(Mg(yd,wI,wI,wI,270,450,!1).replace("M","L")," ").concat(Mg(yd,yd/2,cn,cn,90,270,!1).replace("M","L")," L ").concat(OAg,",").concat(wI," M ").concat(rp,",").concat(bC," L ").concat(yd,",").concat(bC," M ").concat(bC,",").concat(qa," ").concat(Mg(wI,qa,wI,wI,0,270,!1).replace("M","L")," ").concat(Mg(wI,(qa+kR)/2,cn,cn,270,450,!1).replace("M","L")," z M ").concat(bC,",").concat(qa," L ").concat(bC,",").concat(kR)}else if(t==="horizontalScroll"){var $a=bC+wI,EAg=bC+bC,zR=eb-bC,ox=eb-wI,cx=zR-wI,hp=Ab-bC,Yd=Ab-wI;i="M ".concat(0,",").concat($a," ").concat(Mg(wI,$a,wI,wI,180,270,!1).replace("M","L")," L ").concat(hp,",").concat(bC," L ").concat(hp,",").concat(wI," ").concat(Mg(Yd,wI,wI,wI,180,360,!1).replace("M","L")," L ").concat(Ab,",").concat(cx," ").concat(Mg(Yd,cx,wI,wI,0,90,!1).replace("M","L")," L ").concat(bC,",").concat(zR," L ").concat(bC,",").concat(ox," ").concat(Mg(wI,ox,wI,wI,0,180,!1).replace("M","L")," z M ").concat(Yd,",").concat(bC," ").concat(Mg(Yd,wI,wI,wI,90,-180,!1).replace("M","L")," ").concat(Mg((hp+Yd)/2,wI,cn,cn,180,0,!1).replace("M","L")," z M ").concat(Yd,",").concat(bC," L ").concat(hp,",").concat(bC," M ").concat(wI,",").concat(EAg," L ").concat(wI,",").concat($a," ").concat(Mg($a/2,$a,cn,cn,180,360,!1).replace("M","L")," ").concat(Mg(wI,$a,wI,wI,0,180,!1).replace("M","L")," M ").concat(bC,",").concat($a," L ").concat(bC,",").concat(zR)}break;case"wedgeEllipseCallout":var dx=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),bp=wg,rx=-20833*bp,hx=62500*bp;if(dx){var bx,up=MI(dx);try{for(up.s();!(bx=up.n()).done;){var JR=bx.value,ux=U(JR,["attrs","name"]);ux==="adj1"?rx=parseInt(U(JR,["attrs","fmla"]).substring(4))*bp:ux==="adj2"&&(hx=parseInt(U(JR,["attrs","fmla"]).substring(4))*bp)}}catch(Rg){up.e(Rg)}finally{up.f()}}var mx=7.874015748031495,Zx=11*Math.PI/180,go=g/2,Io=I/2,Gx=I*rx/mx,wx=g*hx/mx,PAg=Io+Gx,_Ag=go+wx,px=Math.atan2(wx*I,Gx*g),LR=px+Zx,vR=px-Zx,qAg=Io*Math.cos(LR),$Ag=go+go*Math.sin(LR),gsg=Io+Io*Math.cos(vR),Isg=go+go*Math.sin(vR);i="M ".concat(Io+qAg,",").concat($Ag," L ").concat(PAg,",").concat(_Ag," L ").concat(gsg,",").concat(Isg," ").concat(Mg(Io,go,Io,go,180*vR/Math.PI,180*LR/Math.PI,!0).replace("M","L"));break;case"wedgeRectCallout":var Bx=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),mp=wg,Wx=-20833*mp,yx=62500*mp;if(Bx){var Yx,Zp=MI(Bx);try{for(Zp.s();!(Yx=Zp.n()).done;){var TR=Yx.value,Nx=U(TR,["attrs","name"]);Nx==="adj1"?Wx=parseInt(U(TR,["attrs","fmla"]).substring(4))*mp:Nx==="adj2"&&(yx=parseInt(U(TR,["attrs","fmla"]).substring(4))*mp)}}catch(Rg){Zp.e(Rg)}finally{Zp.f()}}var Vx=7.874015748031495,dn=I*Wx/Vx,rn=g*yx/Vx,Gp=I/2+dn,wp=g/2+rn,Csg=dn*g/I,hn=Math.abs(rn)-Math.abs(Csg),sb=I*(dn>0?7:2)/12,Mx=I*(dn>0?10:5)/12,lb=g*(rn>0?7:2)/12,Rx=g*(rn>0?10:5)/12,tsg=hn>0||dn>0?0:Gp,isg=hn>0?rn>0?sb:Gp:sb,esg=hn>0?I:dn>0?Gp:I,Asg=hn>0&&rn>0?Gp:sb,ssg=hn>0||dn>0?lb:wp,lsg=hn>0?rn>0?0:wp:0,nsg=hn>0?lb:dn>0?wp:lb,asg=hn>0&&rn>0?wp:g;i="M 0,0 L ".concat(sb,",0 L ").concat(isg,",").concat(lsg," L ").concat(Mx,",0 L ").concat(I,",0 L ").concat(I,",").concat(lb," L ").concat(esg,",").concat(nsg," L ").concat(I,",").concat(Rx," L ").concat(I,",").concat(g," L ").concat(Mx,",").concat(g," L ").concat(Asg,",").concat(asg," L ").concat(sb,",").concat(g," L 0,").concat(g," L 0,").concat(Rx," L ").concat(tsg,",").concat(ssg," L 0,").concat(lb," z");break;case"wedgeRoundRectCallout":var fx=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),Nd=wg,Hx=-20833*Nd,Xx=62500*Nd,Sx=16667*Nd;if(fx){var Dx,pp=MI(fx);try{for(pp.s();!(Dx=pp.n()).done;){var Bp=Dx.value,xR=U(Bp,["attrs","name"]);xR==="adj1"?Hx=parseInt(U(Bp,["attrs","fmla"]).substring(4))*Nd:xR==="adj2"?Xx=parseInt(U(Bp,["attrs","fmla"]).substring(4))*Nd:xR==="adj3"&&(Sx=parseInt(U(Bp,["attrs","fmla"]).substring(4))*Nd)}}catch(Rg){pp.e(Rg)}finally{pp.f()}}var jR=7.874015748031495,osg=Math.min(I,g),bn=I*Hx/jR,un=g*Xx/jR,Wp=I/2+bn,yp=g/2+un,csg=bn*g/I,mn=Math.abs(un)-Math.abs(csg),nb=I*(bn>0?7:2)/12,Kx=I*(bn>0?10:5)/12,ab=g*(un>0?7:2)/12,Fx=g*(un>0?10:5)/12,dsg=mn>0||bn>0?0:Wp,rsg=mn>0?un>0?nb:Wp:nb,hsg=mn>0?I:bn>0?Wp:I,bsg=mn>0&&un>0?Wp:nb,usg=mn>0||bn>0?ab:yp,msg=mn>0?un>0?0:yp:0,Zsg=mn>0?ab:bn>0?yp:ab,Gsg=mn>0&&un>0?yp:g,ti=osg*Sx/jR,QR=I-ti,OR=g-ti;i="M 0,".concat(ti," ").concat(Mg(ti,ti,ti,ti,180,270,!1).replace("M","L")," L ").concat(nb,",0 L ").concat(rsg,",").concat(msg," L ").concat(Kx,",0 L ").concat(QR,",0 ").concat(Mg(QR,ti,ti,ti,270,360,!1).replace("M","L")," L ").concat(I,",").concat(ab," L ").concat(hsg,",").concat(Zsg," L ").concat(I,",").concat(Fx," L ").concat(I,",").concat(OR," ").concat(Mg(QR,OR,ti,ti,0,90,!1).replace("M","L")," L ").concat(Kx,",").concat(g," L ").concat(bsg,",").concat(Gsg," L ").concat(nb,",").concat(g," L ").concat(ti,",").concat(g," ").concat(Mg(ti,OR,ti,ti,90,180,!1).replace("M","L")," L 0,").concat(Fx," L ").concat(dsg,",").concat(usg," L 0,").concat(ab," z");break;case"accentBorderCallout1":case"accentBorderCallout2":case"accentBorderCallout3":case"borderCallout1":case"borderCallout2":case"borderCallout3":case"accentCallout1":case"accentCallout2":case"accentCallout3":case"callout1":case"callout2":case"callout3":var Zn=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),uI=wg,Qi=18750*uI,Oi=-8333*uI,Ui=18750*uI,Ei=-16667*uI,zs=1e5*uI,Js=-16667*uI,ob=112963*uI,cb=-8333*uI;if(Zn){var kx,Yp=MI(Zn);try{for(Yp.s();!(kx=Yp.n()).done;){var Ls=kx.value,Gn=U(Ls,["attrs","name"]);Gn==="adj1"?Qi=parseInt(U(Ls,["attrs","fmla"]).substring(4))*uI:Gn==="adj2"?Oi=parseInt(U(Ls,["attrs","fmla"]).substring(4))*uI:Gn==="adj3"?Ui=parseInt(U(Ls,["attrs","fmla"]).substring(4))*uI:Gn==="adj4"?Ei=parseInt(U(Ls,["attrs","fmla"]).substring(4))*uI:Gn==="adj5"?zs=parseInt(U(Ls,["attrs","fmla"]).substring(4))*uI:Gn==="adj6"?Js=parseInt(U(Ls,["attrs","fmla"]).substring(4))*uI:Gn==="adj7"?ob=parseInt(U(Ls,["attrs","fmla"]).substring(4))*uI:Gn==="adj8"&&(cb=parseInt(U(Ls,["attrs","fmla"]).substring(4))*uI)}}catch(Rg){Yp.e(Rg)}finally{Yp.f()}}var Wt,We,ye,Ye,wn,pn,Np,Vp,UI=1e5*uI,Vd="M 0,0 L ".concat(I,",0 L ").concat(I,",").concat(g," L 0,").concat(g," z");switch(t){case"borderCallout1":case"callout1":Zn||(Qi=18750*uI,Oi=-8333*uI,Ui=112500*uI,Ei=-38333*uI),We=g*Qi/UI,Wt=I*Oi/UI,Ye=g*Ui/UI,ye=I*Ei/UI,i="".concat(Vd," M ").concat(Wt,",").concat(We," L ").concat(ye,",").concat(Ye);break;case"borderCallout2":case"callout2":Zn||(Qi=18750*uI,Oi=-8333*uI,Ui=18750*uI,Ei=-16667*uI,zs=112500*uI,Js=-46667*uI),We=g*Qi/UI,Wt=I*Oi/UI,Ye=g*Ui/UI,ye=I*Ei/UI,pn=g*zs/UI,wn=I*Js/UI,i="".concat(Vd," M ").concat(Wt,",").concat(We," L ").concat(ye,",").concat(Ye," L ").concat(wn,",").concat(pn);break;case"borderCallout3":case"callout3":Zn||(Qi=18750*uI,Oi=-8333*uI,Ui=18750*uI,Ei=-16667*uI,zs=1e5*uI,Js=-16667*uI,ob=112963*uI,cb=-8333*uI),We=g*Qi/UI,Wt=I*Oi/UI,Ye=g*Ui/UI,ye=I*Ei/UI,pn=g*zs/UI,wn=I*Js/UI,Vp=g*ob/UI,Np=I*cb/UI,i="".concat(Vd," M ").concat(Wt,",").concat(We," L ").concat(ye,",").concat(Ye," L ").concat(wn,",").concat(pn," L ").concat(Np,",").concat(Vp);break;case"accentBorderCallout1":case"accentCallout1":Zn||(Qi=18750*uI,Oi=-8333*uI,Ui=112500*uI,Ei=-38333*uI),We=g*Qi/UI,Wt=I*Oi/UI,Ye=g*Ui/UI,ye=I*Ei/UI,i="".concat(Vd," M ").concat(Wt,",").concat(We," L ").concat(ye,",").concat(Ye," M ").concat(Wt,",0 L ").concat(Wt,",").concat(g);break;case"accentBorderCallout2":case"accentCallout2":Zn||(Qi=18750*uI,Oi=-8333*uI,Ui=18750*uI,Ei=-16667*uI,zs=112500*uI,Js=-46667*uI),We=g*Qi/UI,Wt=I*Oi/UI,Ye=g*Ui/UI,ye=I*Ei/UI,pn=g*zs/UI,wn=I*Js/UI,i="".concat(Vd," M ").concat(Wt,",").concat(We," L ").concat(ye,",").concat(Ye," L ").concat(wn,",").concat(pn," M ").concat(Wt,",0 L ").concat(Wt,",").concat(g);break;case"accentBorderCallout3":case"accentCallout3":Zn||(Qi=18750*uI,Oi=-8333*uI,Ui=18750*uI,Ei=-16667*uI,zs=1e5*uI,Js=-16667*uI,ob=112963*uI,cb=-8333*uI),We=g*Qi/UI,Wt=I*Oi/UI,Ye=g*Ui/UI,ye=I*Ei/UI,pn=g*zs/UI,wn=I*Js/UI,Vp=g*ob/UI,Np=I*cb/UI,i="".concat(Vd," M ").concat(Wt,",").concat(We," L ").concat(ye,",").concat(Ye," L ").concat(wn,",").concat(pn," L ").concat(Np,",").concat(Vp," M ").concat(Wt,",0 L ").concat(Wt,",").concat(g)}break;case"leftRightRibbon":var zx=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),vs=wg,Mp=5e4*vs,Rp=5e4*vs,fp=16667*vs;if(zx){var Jx,Hp=MI(zx);try{for(Hp.s();!(Jx=Hp.n()).done;){var Xp=Jx.value,UR=U(Xp,["attrs","name"]);UR==="adj1"?Mp=parseInt(U(Xp,["attrs","fmla"]).substring(4))*vs:UR==="adj2"?Rp=parseInt(U(Xp,["attrs","fmla"]).substring(4))*vs:UR==="adj3"&&(fp=parseInt(U(Xp,["attrs","fmla"]).substring(4))*vs)}}catch(Rg){Hp.e(Rg)}finally{Hp.f()}}var Lx=33333*vs,ER=1e5*vs,vx=2e5*vs,PR=Math.min(I,g),Bn=I/2,Tx=g/2,_R=fp<0?0:fp>Lx?Lx:fp,xx=ER-_R,jx=ER*(Bn-I/32)/PR,db=PR*(Rp<0?0:Rp>jx?jx:Rp)/ER,Sp=I-db,qR=g*(Mp<0?0:Mp>xx?xx:Mp)/vx,Qx=g*_R/-vx,Wn=Tx+Qx-qR,$R=Tx+qR-Qx,gf=Wn+qR,wsg=g-gf,Md=2*gf,If=g-(Md-Wn),Rd=_R*PR/31.49606299212598,Cf=Bn-I/32,Ox=Bn+I/32,Ux=Wn+Rd,Ex=If-Rd;i="M 0,".concat(gf," L ").concat(db,",0 L ").concat(db,",").concat(Wn," L ").concat(Bn,",").concat(Wn," ").concat(Mg(Bn,Ux,I/32,Rd,270,450,!1).replace("M","L")," ").concat(Mg(Bn,Ex,I/32,Rd,270,90,!1).replace("M","L")," L ").concat(Sp,",").concat(If," L ").concat(Sp,",").concat(g-Md," L ").concat(I,",").concat(wsg," L ").concat(Sp,",").concat(g," L ").concat(Sp,",").concat($R," L ").concat(Bn,",").concat($R," ").concat(Mg(Bn,$R-Rd,I/32,Rd,90,180,!1).replace("M","L")," L ").concat(Cf,",").concat(Md-Wn," L ").concat(db,",").concat(Md-Wn," L ").concat(db,",").concat(Md," z M ").concat(Ox,",").concat(Ux," L ").concat(Ox,",").concat(If," M ").concat(Cf,",").concat(Ex," L ").concat(Cf,",").concat(Md-Wn);break;case"ribbon":case"ribbon2":var Px=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),Dp=1.3123622047244095,Kp=3.9370078740157477;if(Px){var _x,Fp=MI(Px);try{for(Fp.s();!(_x=Fp.n()).done;){var tf=_x.value,qx=U(tf,["attrs","name"]);qx==="adj1"?Dp=parseInt(U(tf,["attrs","fmla"]).substring(4))*wg:qx==="adj2"&&(Kp=parseInt(U(tf,["attrs","fmla"]).substring(4))*wg)}}catch(Rg){Fp.e(Rg)}finally{Fp.f()}}var $x=1.9685039370078738,gj=2.6246456692913385,Ij=5.905511811023621,Cj=7.874015748031495,ef=15.74803149606299,tj=I/2,JA=g,rb=I,hb=I/8,ii=I/32,bb=Dp<0?0:Dp>gj?gj:Dp,ij=rb-hb,ej=I*(Kp<$x?$x:Kp>Ij?Ij:Kp)/ef,Ts=tj-ej,xs=tj+ej,Co=Ts+ii,to=xs-ii,ub=Ts+hb,mb=xs-hb,kp=ub-ii,zp=mb+ii,LC=g*bb/31.49606299212598;if(t==="ribbon2"){var Af=JA-g*bb/ef,Aj=g*bb/Cj,sf=JA-Aj,io=0+Aj,sj=(io+JA)/2,Jp=JA-LC,Lp=Af-LC;i="M ".concat(0,",").concat(JA," L ").concat(hb,",").concat(sj," L ").concat(0,",").concat(io," L ").concat(Ts,",").concat(io," L ").concat(Ts,",").concat(LC," ").concat(Mg(Co,LC,ii,LC,180,270,!1).replace("M","L")," L ").concat(to,",").concat(0," ").concat(Mg(to,LC,ii,LC,270,360,!1).replace("M","L")," L ").concat(xs,",").concat(io," L ").concat(rb,",").concat(io," L ").concat(ij,",").concat(sj," L ").concat(rb,",").concat(JA," L ").concat(zp,",").concat(JA," ").concat(Mg(zp,Jp,ii,LC,90,270,!1).replace("M","L")," L ").concat(to,",").concat(Af," ").concat(Mg(to,Lp,ii,LC,90,-90,!1).replace("M","L")," L ").concat(Co,",").concat(sf," ").concat(Mg(Co,Lp,ii,LC,270,90,!1).replace("M","L")," L ").concat(kp,",").concat(Af," ").concat(Mg(kp,Jp,ii,LC,270,450,!1).replace("M","L")," z M ").concat(ub,",").concat(sf," L ").concat(ub,",").concat(Jp," M ").concat(mb,",").concat(Jp," L ").concat(mb,",").concat(sf," M ").concat(Ts,",").concat(Lp," L ").concat(Ts,",").concat(io," M ").concat(xs,",").concat(io," L ").concat(xs,",").concat(Lp)}else if(t==="ribbon"){var lj=g*bb/ef,Zb=g*bb/Cj,eo=JA-Zb,nj=eo/2,lf=JA-LC,vp=Zb-LC;i="M ".concat(0,",").concat(0," L ").concat(kp,",").concat(0," ").concat(Mg(kp,LC,ii,LC,270,450,!1).replace("M","L")," L ").concat(Co,",").concat(lj," ").concat(Mg(Co,vp,ii,LC,270,90,!1).replace("M","L")," L ").concat(to,",").concat(Zb," ").concat(Mg(to,vp,ii,LC,90,-90,!1).replace("M","L")," L ").concat(zp,",").concat(lj," ").concat(Mg(zp,LC,ii,LC,90,270,!1).replace("M","L")," L ").concat(rb,",").concat(0," L ").concat(ij,",").concat(nj," L ").concat(rb,",").concat(eo," L ").concat(xs,",").concat(eo," L ").concat(xs,",").concat(lf," ").concat(Mg(to,lf,ii,LC,0,90,!1).replace("M","L")," L ").concat(Co,",").concat(JA," ").concat(Mg(Co,lf,ii,LC,90,180,!1).replace("M","L")," L ").concat(Ts,",").concat(eo," L ").concat(0,",").concat(eo," L ").concat(hb,",").concat(nj," z M ").concat(ub,",").concat(LC," L ").concat(ub,",").concat(Zb," M ").concat(mb,",").concat(Zb," L ").concat(mb,",").concat(LC," M ").concat(Ts,",").concat(eo," L ").concat(Ts,",").concat(vp," M ").concat(xs,",").concat(vp," L ").concat(xs,",").concat(eo)}break;case"doubleWave":case"wave":var aj=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),Ao=t==="doubleWave"?.49212598425196846:.9842519685039369,so=0;if(aj){var oj,Tp=MI(aj);try{for(Tp.s();!(oj=Tp.n()).done;){var nf=oj.value,cj=U(nf,["attrs","name"]);cj==="adj1"?Ao=parseInt(U(nf,["attrs","fmla"]).substring(4))*wg:cj==="adj2"&&(so=parseInt(U(nf,["attrs","fmla"]).substring(4))*wg)}}catch(Rg){Tp.e(Rg)}finally{Tp.f()}}var xp=-.7874015748031495,dj=3.9370078740157477,fd=7.874015748031495,rj=g,jp=I;if(t==="doubleWave"){var hj=.9842519685039369,lo=g*(Ao<0?0:Ao>hj?hj:Ao)/fd,Qp=10*lo/3,bj=lo-Qp,uj=lo+Qp,Gb=rj-lo,mj=Gb-Qp,Zj=Gb+Qp,Op=I*(so<xp?xp:so>fd?fd:so)/dj,Up=Op>0?0:Op,Ep=0-Up,Gj=Op>0?Op:0,wb=jp-Gj,Pp=(Up+wb)/6,psg=Ep+Pp,wj=(Up+wb)/3,Bsg=Ep+wj,pj=(Ep+wb)/2,Bj=pj+Pp,Wsg=(Bj+wb)/2,_p=0+Gj,af=jp+Up,ysg=_p+Pp,Ysg=_p+wj,Wj=(_p+af)/2,yj=Wj+Pp,Nsg=(yj+af)/2;i="M ".concat(Ep,",").concat(lo," C ").concat(psg,",").concat(bj," ").concat(Bsg,",").concat(uj," ").concat(pj,",").concat(lo," C ").concat(Bj,",").concat(bj," ").concat(Wsg,",").concat(uj," ").concat(wb,",").concat(lo," L ").concat(af,",").concat(Gb," C ").concat(Nsg,",").concat(Zj," ").concat(yj,",").concat(mj," ").concat(Wj,",").concat(Gb," C ").concat(Ysg,",").concat(Zj," ").concat(ysg,",").concat(mj," ").concat(_p,",").concat(Gb," z")}else if(t==="wave"){var Yj=1.574803149606299,Hd=g*(Ao<0?0:Ao>Yj?Yj:Ao)/fd,qp=10*Hd/3,Vsg=Hd-qp,Msg=Hd+qp,$p=rj-Hd,Rsg=$p-qp,fsg=$p+qp,gB=I*(so<xp?xp:so>fd?fd:so)/dj,of=gB>0?0:gB,Nj=0-of,Vj=gB>0?gB:0,cf=jp-Vj,Mj=(of+cf)/3,Rj=Nj+Mj,Hsg=(Rj+cf)/2,fj=0+Vj,Hj=jp+of,Xj=fj+Mj,Xsg=(Xj+Hj)/2;i="M ".concat(Nj,",").concat(Hd," C ").concat(Rj,",").concat(Vsg," ").concat(Hsg,",").concat(Msg," ").concat(cf,",").concat(Hd," L ").concat(Hj,",").concat($p," C ").concat(Xsg,",").concat(fsg," ").concat(Xj,",").concat(Rsg," ").concat(fj,",").concat($p," z")}break;case"ellipseRibbon":case"ellipseRibbon2":var Sj=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),IB=1.9685039370078738,CB=3.9370078740157477,tB=.9842519685039369;if(Sj){var Dj,iB=MI(Sj);try{for(iB.s();!(Dj=iB.n()).done;){var eB=Dj.value,df=U(eB,["attrs","name"]);df==="adj1"?IB=parseInt(U(eB,["attrs","fmla"]).substring(4))*wg:df==="adj2"?CB=parseInt(U(eB,["attrs","fmla"]).substring(4))*wg:df==="adj3"&&(tB=parseInt(U(eB,["attrs","fmla"]).substring(4))*wg)}}catch(Rg){iB.e(Rg)}finally{iB.f()}}var Kj=1.9685039370078738,Fj=5.905511811023621,pb=7.874015748031495,Bb=I/2,fi=g,js=I,AB=I/8,Xd=IB<0?0:IB>pb?pb:IB,kj=pb-Xd,zj=Xd-kj/2>0?Xd-kj/2:0,ei=Bb-I*(CB<Kj?Kj:CB>Fj?Fj:CB)/15.74803149606299,CA=ei+AB,Sd=js-CA,LA=js-ei,Jj=js-AB,no=g*(tB<zj?zj:tB>Xd?Xd:tB)/pb,Dd=4*no/I,Lj=CA-CA*CA/I,Wb=CA/2,vj=js-Wb,sB=g*Xd/pb,yn=sB-no,lB=Dd*(ei-ei*ei/I),Ne=fi-sB,Tj=14*no/16,nB=ei/2,xj=Dd*nB,jj=js-nB;if(t==="ellipseRibbon"){var yb=Dd*Lj,Qj=Dd*Wb,Kd=lB+yn,Oj=no+yn-Kd+no+yn,Uj=(Tj+Ne)/2,aB=lB+Ne,Ej=Kd+Ne,Pj=xj+Ne,Ssg=Oj+Ne,_j=yb+yn;i="M ".concat(0,",").concat(0," Q ").concat(Wb,",").concat(Qj," ").concat(CA,",").concat(yb," L ").concat(ei,",").concat(Kd," Q ").concat(Bb,",").concat(Oj," ").concat(LA,",").concat(Kd," L ").concat(Sd,",").concat(yb," Q ").concat(vj,",").concat(Qj," ").concat(js,",").concat(0," L ").concat(Jj,",").concat(Uj," L ").concat(js,",").concat(Ne," Q ").concat(jj,",").concat(Pj," ").concat(LA,",").concat(aB," L ").concat(LA,",").concat(Ej," Q ").concat(Bb,",").concat(Ssg," ").concat(ei,",").concat(Ej," L ").concat(ei,",").concat(aB," Q ").concat(nB,",").concat(Pj," ").concat(0,",").concat(Ne," L ").concat(AB,",").concat(Uj," z M ").concat(ei,",").concat(aB," L ").concat(ei,",").concat(Kd," M ").concat(LA,",").concat(Kd," L ").concat(LA,",").concat(aB," M ").concat(CA,",").concat(yb," L ").concat(CA,",").concat(_j," M ").concat(Sd,",").concat(_j," L ").concat(Sd,",").concat(yb)}else if(t==="ellipseRibbon2"){var qj=Dd*Lj,oB=fi-qj,$j=fi-Dd*Wb,rf=lB+yn,cB=fi-rf,gQ=no+yn-rf+no+yn,Dsg=fi-gQ,IQ=fi-(Tj+Ne)/2,dB=fi-(lB+Ne),CQ=fi-(rf+Ne),tQ=fi-(xj+Ne),Ksg=fi-(gQ+Ne),iQ=fi-(qj+yn);i="M ".concat(0,",").concat(fi," L ").concat(AB,",").concat(IQ," L ").concat(0,",").concat(sB," Q ").concat(nB,",").concat(tQ," ").concat(ei,",").concat(dB," L ").concat(ei,",").concat(CQ," Q ").concat(Bb,",").concat(Ksg," ").concat(LA,",").concat(CQ," L ").concat(LA,",").concat(dB," Q ").concat(jj,",").concat(tQ," ").concat(js,",").concat(sB," L ").concat(Jj,",").concat(IQ," L ").concat(js,",").concat(fi," Q ").concat(vj,",").concat($j," ").concat(Sd,",").concat(oB," L ").concat(LA,",").concat(cB," Q ").concat(Bb,",").concat(Dsg," ").concat(ei,",").concat(cB," L ").concat(CA,",").concat(oB," Q ").concat(Wb,",").concat($j," ").concat(0,",").concat(fi," z M ").concat(ei,",").concat(cB," L ").concat(ei,",").concat(dB," M ").concat(LA,",").concat(dB," L ").concat(LA,",").concat(cB," M ").concat(CA,",").concat(iQ," L ").concat(CA,",").concat(oB," M ").concat(Sd,",").concat(oB," L ").concat(Sd,",").concat(iQ)}break;case"line":case"straightConnector1":case"bentConnector4":case"bentConnector5":case"curvedConnector2":case"curvedConnector3":case"curvedConnector4":case"curvedConnector5":i="M 0 0 L ".concat(I," ").concat(g);break;case"rightArrow":var eQ=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),Yb=.25,Nb=.5;if(eQ){var AQ,Fsg=I/g,rB=MI(eQ);try{for(rB.s();!(AQ=rB.n()).done;){var hf=AQ.value,sQ=U(hf,["attrs","name"]);sQ==="adj1"?Yb=.5-parseInt(U(hf,["attrs","fmla"]).substring(4))/2e5:sQ==="adj2"&&(Nb=1-parseInt(U(hf,["attrs","fmla"]).substring(4))/1e5/Fsg)}}catch(Rg){rB.e(Rg)}finally{rB.f()}}i="M ".concat(I," ").concat(g/2," L ").concat(Nb*I," 0 L ").concat(Nb*I," ").concat(Yb*g," L 0 ").concat(Yb*g," L 0 ").concat((1-Yb)*g," L ").concat(Nb*I," ").concat((1-Yb)*g," L ").concat(Nb*I," ").concat(g," Z");break;case"leftArrow":var lQ=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),Vb=.25,Mb=.5;if(lQ){var nQ,ksg=I/g,hB=MI(lQ);try{for(hB.s();!(nQ=hB.n()).done;){var bf=nQ.value,aQ=U(bf,["attrs","name"]);aQ==="adj1"?Vb=.5-parseInt(U(bf,["attrs","fmla"]).substring(4))/2e5:aQ==="adj2"&&(Mb=parseInt(U(bf,["attrs","fmla"]).substring(4))/1e5/ksg)}}catch(Rg){hB.e(Rg)}finally{hB.f()}}i="M 0 ".concat(g/2," L ").concat(Mb*I," ").concat(g," L ").concat(Mb*I," ").concat((1-Vb)*g," L ").concat(I," ").concat((1-Vb)*g," L ").concat(I," ").concat(Vb*g," L ").concat(Mb*I," ").concat(Vb*g," L ").concat(Mb*I," 0 Z");break;case"downArrow":case"flowChartOffpageConnector":var oQ=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),Fd=.25,kd=.5;if(oQ){var cQ,zsg=g/I,bB=MI(oQ);try{for(bB.s();!(cQ=bB.n()).done;){var uf=cQ.value,dQ=U(uf,["attrs","name"]);dQ==="adj1"?Fd=parseInt(U(uf,["attrs","fmla"]).substring(4))/2e5:dQ==="adj2"&&(kd=parseInt(U(uf,["attrs","fmla"]).substring(4))/1e5/zsg)}}catch(Rg){bB.e(Rg)}finally{bB.f()}}t==="flowChartOffpageConnector"&&(Fd=.5,kd=.212),i="M ".concat((.5-Fd)*I," 0 L ").concat((.5-Fd)*I," ").concat((1-kd)*g," L 0 ").concat((1-kd)*g," L ").concat(I/2," ").concat(g," L ").concat(I," ").concat((1-kd)*g," L ").concat((.5+Fd)*I," ").concat((1-kd)*g," L ").concat((.5+Fd)*I," 0 Z");break;case"upArrow":var rQ=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),Rb=.25,fb=.5;if(rQ){var hQ,Jsg=g/I,uB=MI(rQ);try{for(uB.s();!(hQ=uB.n()).done;){var mf=hQ.value,bQ=U(mf,["attrs","name"]);bQ==="adj1"?Rb=parseInt(U(mf,["attrs","fmla"]).substring(4))/2e5:bQ==="adj2"&&(fb=parseInt(U(mf,["attrs","fmla"]).substring(4))/1e5/Jsg)}}catch(Rg){uB.e(Rg)}finally{uB.f()}}i="M ".concat(I/2," 0 L 0 ").concat(fb*g," L ").concat((.5-Rb)*I," ").concat(fb*g," L ").concat((.5-Rb)*I," ").concat(g," L ").concat((.5+Rb)*I," ").concat(g," L ").concat((.5+Rb)*I," ").concat(fb*g," L ").concat(I," ").concat(fb*g," Z");break;case"leftRightArrow":var uQ=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),Hb=.25,Qs=.25;if(uQ){var mQ,Lsg=I/g,mB=MI(uQ);try{for(mB.s();!(mQ=mB.n()).done;){var Zf=mQ.value,ZQ=U(Zf,["attrs","name"]);ZQ==="adj1"?Hb=.5-parseInt(U(Zf,["attrs","fmla"]).substring(4))/2e5:ZQ==="adj2"&&(Qs=parseInt(U(Zf,["attrs","fmla"]).substring(4))/1e5/Lsg)}}catch(Rg){mB.e(Rg)}finally{mB.f()}}i="M 0 ".concat(g/2," L ").concat(Qs*I," ").concat(g," L ").concat(Qs*I," ").concat((1-Hb)*g," L ").concat((1-Qs)*I," ").concat((1-Hb)*g," L ").concat((1-Qs)*I," ").concat(g," L ").concat(I," ").concat(g/2," L ").concat((1-Qs)*I," 0 L ").concat((1-Qs)*I," ").concat(Hb*g," L ").concat(Qs*I," ").concat(Hb*g," L ").concat(Qs*I," 0 Z");break;case"upDownArrow":var GQ=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),Xb=.25,Os=.25;if(GQ){var wQ,vsg=g/I,ZB=MI(GQ);try{for(ZB.s();!(wQ=ZB.n()).done;){var Gf=wQ.value,pQ=U(Gf,["attrs","name"]);pQ==="adj1"?Xb=.5-parseInt(U(Gf,["attrs","fmla"]).substring(4))/2e5:pQ==="adj2"&&(Os=parseInt(U(Gf,["attrs","fmla"]).substring(4))/1e5/vsg)}}catch(Rg){ZB.e(Rg)}finally{ZB.f()}}i="M ".concat(I/2," 0 L 0 ").concat(Os*g," L ").concat(Xb*I," ").concat(Os*g," L ").concat(Xb*I," ").concat((1-Os)*g," L 0 ").concat((1-Os)*g," L ").concat(I/2," ").concat(g," L ").concat(I," ").concat((1-Os)*g," L ").concat((1-Xb)*I," ").concat((1-Os)*g," L ").concat((1-Xb)*I," ").concat(Os*g," L ").concat(I," ").concat(Os*g," Z");break;case"quadArrow":var BQ=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),GB=1.7716535433070866,wB=1.7716535433070866,pB=1.7716535433070866,WQ=3.9370078740157477,wf=7.874015748031495;if(BQ){var yQ,BB=MI(BQ);try{for(BB.s();!(yQ=BB.n()).done;){var WB=yQ.value,pf=U(WB,["attrs","name"]);pf==="adj1"?GB=parseInt(U(WB,["attrs","fmla"]).substring(4))*wg:pf==="adj2"?wB=parseInt(U(WB,["attrs","fmla"]).substring(4))*wg:pf==="adj3"&&(pB=parseInt(U(WB,["attrs","fmla"]).substring(4))*wg)}}catch(Rg){BB.e(Rg)}finally{BB.f()}}var zd=g/2,Jd=I/2,Bf=Math.min(I,g),YQ=wB<0?0:wB>WQ?WQ:wB,Wf=2*YQ,NQ=(wf-Wf)/2,vA=Bf*(pB<0?0:pB>NQ?NQ:pB)/wf,yB=Bf*YQ/wf,VQ=Jd-yB,MQ=Jd+yB,YB=Bf*(GB<0?0:GB>Wf?Wf:GB)/15.74803149606299,NB=Jd-YB,VB=Jd+YB,MB=I-vA,RQ=zd-yB,fQ=zd+yB,RB=zd-YB,fB=zd+YB,HB=g-vA;i="M 0,".concat(zd," L ").concat(vA,",").concat(RQ," L ").concat(vA,",").concat(RB," L ").concat(NB,",").concat(RB," L ").concat(NB,",").concat(vA," L ").concat(VQ,",").concat(vA," L ").concat(Jd,",0 L ").concat(MQ,",").concat(vA," L ").concat(VB,",").concat(vA," L ").concat(VB,",").concat(RB," L ").concat(MB,",").concat(RB," L ").concat(MB,",").concat(RQ," L ").concat(I,",").concat(zd," L ").concat(MB,",").concat(fQ," L ").concat(MB,",").concat(fB," L ").concat(VB,",").concat(fB," L ").concat(VB,",").concat(HB," L ").concat(MQ,",").concat(HB," L ").concat(Jd,",").concat(g," L ").concat(VQ,",").concat(HB," L ").concat(NB,",").concat(HB," L ").concat(NB,",").concat(fB," L ").concat(vA,",").concat(fB," L ").concat(vA,",").concat(fQ," z");break;case"leftRightUpArrow":var HQ=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),XB=1.9685039370078738,SB=1.9685039370078738,DB=1.9685039370078738,yf=3.9370078740157477,Yf=7.874015748031495;if(HQ){var XQ,KB=MI(HQ);try{for(KB.s();!(XQ=KB.n()).done;){var FB=XQ.value,Nf=U(FB,["attrs","name"]);Nf==="adj1"?XB=parseInt(U(FB,["attrs","fmla"]).substring(4))*wg:Nf==="adj2"?SB=parseInt(U(FB,["attrs","fmla"]).substring(4))*wg:Nf==="adj3"&&(DB=parseInt(U(FB,["attrs","fmla"]).substring(4))*wg)}}catch(Rg){KB.e(Rg)}finally{KB.f()}}var Sb=I/2,kB=Math.min(I,g),Vf=SB<0?0:SB>yf?yf:SB,Mf=2*Vf,SQ=(Yf-Mf)/2,Us=kB*(DB<0?0:DB>SQ?SQ:DB)/Yf,Rf=kB*Vf/Yf,Tsg=Sb-Rf,xsg=Sb+Rf,zB=kB*(XB<0?0:XB>Mf?Mf:XB)/15.74803149606299,DQ=Sb-zB,KQ=Sb+zB,JB=I-Us,FQ=g-kB*Vf/yf,LB=g-Rf,vB=LB-zB,kQ=LB+zB;i="M 0,".concat(LB," L ").concat(Us,",").concat(FQ," L ").concat(Us,",").concat(vB," L ").concat(DQ,",").concat(vB," L ").concat(DQ,",").concat(Us," L ").concat(Tsg,",").concat(Us," L ").concat(Sb,",0 L ").concat(xsg,",").concat(Us," L ").concat(KQ,",").concat(Us," L ").concat(KQ,",").concat(vB," L ").concat(JB,",").concat(vB," L ").concat(JB,",").concat(FQ," L ").concat(I,",").concat(LB," L ").concat(JB,",").concat(g," L ").concat(JB,",").concat(kQ," L ").concat(Us,",").concat(kQ," L ").concat(Us,",").concat(g," z");break;case"leftUpArrow":var zQ=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),TB=1.9685039370078738,xB=1.9685039370078738,jB=1.9685039370078738,ff=3.9370078740157477,Hf=7.874015748031495;if(zQ){var JQ,QB=MI(zQ);try{for(QB.s();!(JQ=QB.n()).done;){var OB=JQ.value,Xf=U(OB,["attrs","name"]);Xf==="adj1"?TB=parseInt(U(OB,["attrs","fmla"]).substring(4))*wg:Xf==="adj2"?xB=parseInt(U(OB,["attrs","fmla"]).substring(4))*wg:Xf==="adj3"&&(jB=parseInt(U(OB,["attrs","fmla"]).substring(4))*wg)}}catch(Rg){QB.e(Rg)}finally{QB.f()}}var UB=Math.min(I,g),Sf=xB<0?0:xB>ff?ff:xB,Df=2*Sf,LQ=Hf-Df,Yn=UB*(jB<0?0:jB>LQ?LQ:jB)/Hf,vQ=UB*Sf/ff,jsg=I-vQ,Qsg=g-vQ,TQ=UB*Sf/Hf,Kf=I-TQ,Ff=g-TQ,EB=UB*(TB<0?0:TB>Df?Df:TB)/15.74803149606299,xQ=Kf-EB,jQ=Kf+EB,QQ=Ff-EB,OQ=Ff+EB;i="M 0,".concat(Ff," L ").concat(Yn,",").concat(Qsg," L ").concat(Yn,",").concat(QQ," L ").concat(xQ,",").concat(QQ," L ").concat(xQ,",").concat(Yn," L ").concat(jsg,",").concat(Yn," L ").concat(Kf,",0 L ").concat(I,",").concat(Yn," L ").concat(jQ,",").concat(Yn," L ").concat(jQ,",").concat(OQ," L ").concat(Yn,",").concat(OQ," L ").concat(Yn,",").concat(g," z");break;case"bentUpArrow":var UQ=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),PB=1.9685039370078738,_B=1.9685039370078738,qB=1.9685039370078738,ao=3.9370078740157477,kf=7.874015748031495;if(UQ){var EQ,$B=MI(UQ);try{for($B.s();!(EQ=$B.n()).done;){var gW=EQ.value,zf=U(gW,["attrs","name"]);zf==="adj1"?PB=parseInt(U(gW,["attrs","fmla"]).substring(4))*wg:zf==="adj2"?_B=parseInt(U(gW,["attrs","fmla"]).substring(4))*wg:zf==="adj3"&&(qB=parseInt(U(gW,["attrs","fmla"]).substring(4))*wg)}}catch(Rg){$B.e(Rg)}finally{$B.f()}}var Db=Math.min(I,g),PQ=PB<0?0:PB>ao?ao:PB,_Q=_B<0?0:_B>ao?ao:_B,IW=Db*(qB<0?0:qB>ao?ao:qB)/kf,Osg=I-Db*_Q/ao,Jf=I-Db*_Q/kf,qQ=Db*PQ/15.74803149606299,$Q=Jf-qQ,gO=Jf+qQ,IO=g-Db*PQ/kf;i="M 0,".concat(IO," L ").concat($Q,",").concat(IO," L ").concat($Q,",").concat(IW," L ").concat(Osg,",").concat(IW," L ").concat(Jf,",0 L ").concat(I,",").concat(IW," L ").concat(gO,",").concat(IW," L ").concat(gO,",").concat(g," L 0,").concat(g," z");break;case"bentArrow":var CO=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),CW=1.9685039370078738,tW=1.9685039370078738,iW=1.9685039370078738,eW=3.444881889763779,AW=3.9370078740157477,Kb=7.874015748031495;if(CO){var tO,sW=MI(CO);try{for(sW.s();!(tO=sW.n()).done;){var Fb=tO.value,lW=U(Fb,["attrs","name"]);lW==="adj1"?CW=parseInt(U(Fb,["attrs","fmla"]).substring(4))*wg:lW==="adj2"?tW=parseInt(U(Fb,["attrs","fmla"]).substring(4))*wg:lW==="adj3"?iW=parseInt(U(Fb,["attrs","fmla"]).substring(4))*wg:lW==="adj4"&&(eW=parseInt(U(Fb,["attrs","fmla"]).substring(4))*wg)}}catch(Rg){sW.e(Rg)}finally{sW.f()}}var kb=Math.min(I,g),iO=tW<0?0:tW>AW?AW:tW,eO=2*iO,zb=kb*(CW<0?0:CW>eO?eO:CW)/Kb,AO=kb*iO/Kb,Jb=AO-zb/2,sO=kb*(iW<0?0:iW>AW?AW:iW)/Kb,lO=I-sO,nO=g-Jb,aO=Kb*(lO<nO?lO:nO)/kb,Lb=kb*(eW<0?0:eW>aO?aO:eW)/Kb,oO=Lb-zb,nW=oO>0?oO:0,cO=zb+nW,aW=I-sO,oW=Jb+zb,Usg=oW+Jb,dO=Jb+Lb,Esg=oW+nW;i="M 0,".concat(g," L 0,").concat(dO," ").concat(Mg(Lb,dO,Lb,Lb,180,270,!1).replace("M","L")," L ").concat(aW,",").concat(Jb," L ").concat(aW,",0 L ").concat(I,",").concat(AO," L ").concat(aW,",").concat(Usg," L ").concat(aW,",").concat(oW," L ").concat(cO,",").concat(oW," ").concat(Mg(cO,Esg,nW,nW,270,180,!1).replace("M","L")," L ").concat(zb,",").concat(g," z");break;case"uturnArrow":var rO=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),cW=1.9685039370078738,dW=1.9685039370078738,rW=1.9685039370078738,hW=3.444881889763779,bW=5.905511811023621,hO=1.9685039370078738,Es=7.874015748031495;if(rO){var bO,uW=MI(rO);try{for(uW.s();!(bO=uW.n()).done;){var Ld=bO.value,vb=U(Ld,["attrs","name"]);vb==="adj1"?cW=parseInt(U(Ld,["attrs","fmla"]).substring(4))*wg:vb==="adj2"?dW=parseInt(U(Ld,["attrs","fmla"]).substring(4))*wg:vb==="adj3"?rW=parseInt(U(Ld,["attrs","fmla"]).substring(4))*wg:vb==="adj4"?hW=parseInt(U(Ld,["attrs","fmla"]).substring(4))*wg:vb==="adj5"&&(bW=parseInt(U(Ld,["attrs","fmla"]).substring(4))*wg)}}catch(Rg){uW.e(Rg)}finally{uW.f()}}var Nn=Math.min(I,g),uO=dW<0?0:dW>hO?hO:dW,mO=2*uO,Lf=cW<0?0:cW>mO?mO:cW,ZO=(Es-Lf*Nn/g)*g/Nn,GO=rW<0?0:rW>ZO?ZO:rW,wO=(GO+Lf)*Nn/g,Tb=Nn*Lf/Es,vf=Nn*uO/Es,pO=vf-Tb/2,BO=g*(bW<wO?wO:bW>Es?Es:bW)/Es,vd=BO-Nn*GO/Es,Tf=I-pO,WO=Tf/2,yO=Es*(WO<vd?WO:vd)/Nn,TA=Nn*(hW<0?0:hW>yO?yO:hW)/Es,YO=TA-Tb,Td=YO>0?YO:0,xb=Tb+Td,NO=I-vf,VO=NO-vf,xf=VO+pO,MO=Tf-TA,Psg=xf-Td;i="M 0,".concat(g," L 0,").concat(TA," ").concat(Mg(TA,TA,TA,TA,180,270,!1).replace("M","L")," L ").concat(MO,",0 ").concat(Mg(MO,TA,TA,TA,270,360,!1).replace("M","L")," L ").concat(Tf,",").concat(vd," L ").concat(I,",").concat(vd," L ").concat(NO,",").concat(BO," L ").concat(VO,",").concat(vd," L ").concat(xf,",").concat(vd," L ").concat(xf,",").concat(xb," ").concat(Mg(Psg,xb,Td,Td,0,-90,!1).replace("M","L")," L ").concat(xb,",").concat(Tb," ").concat(Mg(xb,xb,Td,Td,270,180,!1).replace("M","L")," L ").concat(Tb,",").concat(g," z");break;case"stripedRightArrow":var RO=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),mW=3.9370078740157477,ZW=3.9370078740157477,jf=7.874015748031495;if(RO){var fO,GW=MI(RO);try{for(GW.s();!(fO=GW.n()).done;){var Qf=fO.value,HO=U(Qf,["attrs","name"]);HO==="adj1"?mW=parseInt(U(Qf,["attrs","fmla"]).substring(4))*wg:HO==="adj2"&&(ZW=parseInt(U(Qf,["attrs","fmla"]).substring(4))*wg)}}catch(Rg){GW.e(Rg)}finally{GW.f()}}var Of=g/2,xd=Math.min(I,g),XO=6.643700787401574*I/xd,SO=5*xd/32,wW=I-xd*(ZW<0?0:ZW>XO?XO:ZW)/jf,DO=g*(mW<0?0:mW>jf?jf:mW)/15.74803149606299,jd=Of-DO,Qd=Of+DO,KO=xd/8,FO=xd/16,kO=xd/32;i="M 0,".concat(jd," L ").concat(kO,",").concat(jd," L ").concat(kO,",").concat(Qd," L 0,").concat(Qd," z M ").concat(FO,",").concat(jd," L ").concat(KO,",").concat(jd," L ").concat(KO,",").concat(Qd," L ").concat(FO,",").concat(Qd," z M ").concat(SO,",").concat(jd," L ").concat(wW,",").concat(jd," L ").concat(wW,",0 L ").concat(I,",").concat(Of," L ").concat(wW,",").concat(g," L ").concat(wW,",").concat(Qd," L ").concat(SO,",").concat(Qd," z");break;case"notchedRightArrow":var zO=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),pW=3.9370078740157477,BW=3.9370078740157477,WW=7.874015748031495;if(zO){var JO,yW=MI(zO);try{for(yW.s();!(JO=yW.n()).done;){var Uf=JO.value,LO=U(Uf,["attrs","name"]);LO==="adj1"?pW=parseInt(U(Uf,["attrs","fmla"]).substring(4))*wg:LO==="adj2"&&(BW=parseInt(U(Uf,["attrs","fmla"]).substring(4))*wg)}}catch(Rg){yW.e(Rg)}finally{yW.f()}}var jb=g/2,_sg=jb,vO=Math.min(I,g),TO=WW*I/vO,xO=vO*(BW<0?0:BW>TO?TO:BW)/WW,YW=I-xO,Ef=g*(pW<0?0:pW>WW?WW:pW)/15.74803149606299,jO=jb-Ef,QO=jb+Ef,qsg=Ef*xO/_sg;i="M 0,".concat(jO," L ").concat(YW,",").concat(jO," L ").concat(YW,",0 L ").concat(I,",").concat(jb," L ").concat(YW,",").concat(g," L ").concat(YW,",").concat(QO," L 0,").concat(QO," L ").concat(qsg,",").concat(jb," z");break;case"homePlate":var OO=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),NW=3.9370078740157477,UO=7.874015748031495;OO&&(NW=parseInt(OO.substring(4))*wg);var $sg=g/2,EO=Math.min(I,g),PO=UO*I/EO,_O=I-EO*(NW<0?0:NW>PO?PO:NW)/UO;i="M 0,0 L ".concat(_O,",0 L ").concat(I,",").concat($sg," L ").concat(_O,",").concat(g," L 0,").concat(g," z");break;case"chevron":var qO=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),VW=3.9370078740157477,$O=7.874015748031495;qO&&(VW=parseInt(qO.substring(4))*wg);var g4=g/2,I4=Math.min(I,g),C4=$O*I/I4,t4=I4*(VW<0?0:VW>C4?C4:VW)/$O,i4=I-t4;i="M 0,0 L ".concat(i4,",0 L ").concat(I,",").concat(g4," L ").concat(i4,",").concat(g," L 0,").concat(g," L ").concat(t4,",").concat(g4," z");break;case"rightArrowCallout":var e4=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),MW=1.9685039370078738,RW=1.9685039370078738,fW=1.9685039370078738,HW=5.116299212598425,A4=3.9370078740157477,XW=7.874015748031495;if(e4){var s4,SW=MI(e4);try{for(SW.s();!(s4=SW.n()).done;){var Qb=s4.value,DW=U(Qb,["attrs","name"]);DW==="adj1"?MW=parseInt(U(Qb,["attrs","fmla"]).substring(4))*wg:DW==="adj2"?RW=parseInt(U(Qb,["attrs","fmla"]).substring(4))*wg:DW==="adj3"?fW=parseInt(U(Qb,["attrs","fmla"]).substring(4))*wg:DW==="adj4"&&(HW=parseInt(U(Qb,["attrs","fmla"]).substring(4))*wg)}}catch(Rg){SW.e(Rg)}finally{SW.f()}}var Ob=g/2,l4=I,n4=g,Od=Math.min(I,g),a4=A4*g/Od,o4=RW<0?0:RW>a4?a4:RW,c4=2*o4,d4=XW*I/Od,r4=fW<0?0:fW>d4?d4:fW,h4=A4-r4*Od/I,b4=Od*o4/XW,u4=Od*(MW<0?0:MW>c4?c4:MW)/15.74803149606299,glg=Ob-b4,m4=Ob-u4,Z4=Ob+u4,Ilg=Ob+b4,KW=l4-Od*r4/XW,FW=I*(HW<0?0:HW>h4?h4:HW)/XW;i="M ".concat(0,",").concat(0," L ").concat(FW,",").concat(0," L ").concat(FW,",").concat(m4," L ").concat(KW,",").concat(m4," L ").concat(KW,",").concat(glg," L ").concat(l4,",").concat(Ob," L ").concat(KW,",").concat(Ilg," L ").concat(KW,",").concat(Z4," L ").concat(FW,",").concat(Z4," L ").concat(FW,",").concat(n4," L ").concat(0,",").concat(n4," z");break;case"downArrowCallout":var G4=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),kW=1.9685039370078738,zW=1.9685039370078738,JW=1.9685039370078738,LW=5.116299212598425,Ub=7.874015748031495;if(G4){var w4,vW=MI(G4);try{for(vW.s();!(w4=vW.n()).done;){var Eb=w4.value,TW=U(Eb,["attrs","name"]);TW==="adj1"?kW=parseInt(U(Eb,["attrs","fmla"]).substring(4))*wg:TW==="adj2"?zW=parseInt(U(Eb,["attrs","fmla"]).substring(4))*wg:TW==="adj3"?JW=parseInt(U(Eb,["attrs","fmla"]).substring(4))*wg:TW==="adj4"&&(LW=parseInt(U(Eb,["attrs","fmla"]).substring(4))*wg)}}catch(Rg){vW.e(Rg)}finally{vW.f()}}var Pb=I/2,p4=I,B4=g,Ud=Math.min(I,g),W4=3.9370078740157477*I/Ud,y4=zW<0?0:zW>W4?W4:zW,Y4=2*y4,N4=Ub*g/Ud,V4=JW<0?0:JW>N4?N4:JW,M4=Ub-V4*Ud/g,R4=Ud*y4/Ub,f4=Ud*(kW<0?0:kW>Y4?Y4:kW)/15.74803149606299,Clg=Pb-R4,H4=Pb-f4,X4=Pb+f4,tlg=Pb+R4,xW=B4-Ud*V4/Ub,jW=g*(LW<0?0:LW>M4?M4:LW)/Ub;i="M ".concat(0,",").concat(0," L ").concat(p4,",").concat(0," L ").concat(p4,",").concat(jW," L ").concat(X4,",").concat(jW," L ").concat(X4,",").concat(xW," L ").concat(tlg,",").concat(xW," L ").concat(Pb,",").concat(B4," L ").concat(Clg,",").concat(xW," L ").concat(H4,",").concat(xW," L ").concat(H4,",").concat(jW," L ").concat(0,",").concat(jW," z");break;case"leftArrowCallout":var S4=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),QW=1.9685039370078738,OW=1.9685039370078738,UW=1.9685039370078738,EW=5.116299212598425,_b=7.874015748031495;if(S4){var D4,PW=MI(S4);try{for(PW.s();!(D4=PW.n()).done;){var qb=D4.value,_W=U(qb,["attrs","name"]);_W==="adj1"?QW=parseInt(U(qb,["attrs","fmla"]).substring(4))*wg:_W==="adj2"?OW=parseInt(U(qb,["attrs","fmla"]).substring(4))*wg:_W==="adj3"?UW=parseInt(U(qb,["attrs","fmla"]).substring(4))*wg:_W==="adj4"&&(EW=parseInt(U(qb,["attrs","fmla"]).substring(4))*wg)}}catch(Rg){PW.e(Rg)}finally{PW.f()}}var $b=g/2,Pf=I,K4=g,Ed=Math.min(I,g),F4=3.9370078740157477*g/Ed,k4=OW<0?0:OW>F4?F4:OW,z4=2*k4,J4=_b*I/Ed,L4=UW<0?0:UW>J4?J4:UW,v4=_b-L4*Ed/I,T4=Ed*k4/_b,x4=Ed*(QW<0?0:QW>z4?z4:QW)/15.74803149606299,ilg=$b-T4,j4=$b-x4,Q4=$b+x4,elg=$b+T4,qW=Ed*L4/_b,$W=Pf-I*(EW<0?0:EW>v4?v4:EW)/_b;i="M ".concat(0,",").concat($b," L ").concat(qW,",").concat(ilg," L ").concat(qW,",").concat(j4," L ").concat($W,",").concat(j4," L ").concat($W,",").concat(0," L ").concat(Pf,",").concat(0," L ").concat(Pf,",").concat(K4," L ").concat($W,",").concat(K4," L ").concat($W,",").concat(Q4," L ").concat(qW,",").concat(Q4," L ").concat(qW,",").concat(elg," z");break;case"upArrowCallout":var O4=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),g2=1.9685039370078738,I2=1.9685039370078738,C2=1.9685039370078738,t2=5.116299212598425,gu=7.874015748031495;if(O4){var U4,i2=MI(O4);try{for(i2.s();!(U4=i2.n()).done;){var Iu=U4.value,e2=U(Iu,["attrs","name"]);e2==="adj1"?g2=parseInt(U(Iu,["attrs","fmla"]).substring(4))*wg:e2==="adj2"?I2=parseInt(U(Iu,["attrs","fmla"]).substring(4))*wg:e2==="adj3"?C2=parseInt(U(Iu,["attrs","fmla"]).substring(4))*wg:e2==="adj4"&&(t2=parseInt(U(Iu,["attrs","fmla"]).substring(4))*wg)}}catch(Rg){i2.e(Rg)}finally{i2.f()}}var Cu=I/2,E4=I,_f=g,Pd=Math.min(I,g),P4=3.9370078740157477*I/Pd,_4=I2<0?0:I2>P4?P4:I2,q4=2*_4,$4=gu*g/Pd,gU=C2<0?0:C2>$4?$4:C2,IU=gu-gU*Pd/g,CU=Pd*_4/gu,tU=Pd*(g2<0?0:g2>q4?q4:g2)/15.74803149606299,Alg=Cu-CU,iU=Cu-tU,eU=Cu+tU,slg=Cu+CU,A2=Pd*gU/gu,s2=_f-g*(t2<0?0:t2>IU?IU:t2)/gu;i="M ".concat(0,",").concat(s2," L ").concat(iU,",").concat(s2," L ").concat(iU,",").concat(A2," L ").concat(Alg,",").concat(A2," L ").concat(Cu,",").concat(0," L ").concat(slg,",").concat(A2," L ").concat(eU,",").concat(A2," L ").concat(eU,",").concat(s2," L ").concat(E4,",").concat(s2," L ").concat(E4,",").concat(_f," L ").concat(0,",").concat(_f," z");break;case"leftRightArrowCallout":var AU=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),l2=1.9685039370078738,n2=1.9685039370078738,a2=1.9685039370078738,o2=3.7892125984251965,sU=3.9370078740157477,qf=7.874015748031495,lU=15.74803149606299;if(AU){var nU,c2=MI(AU);try{for(c2.s();!(nU=c2.n()).done;){var tu=nU.value,d2=U(tu,["attrs","name"]);d2==="adj1"?l2=parseInt(U(tu,["attrs","fmla"]).substring(4))*wg:d2==="adj2"?n2=parseInt(U(tu,["attrs","fmla"]).substring(4))*wg:d2==="adj3"?a2=parseInt(U(tu,["attrs","fmla"]).substring(4))*wg:d2==="adj4"&&(o2=parseInt(U(tu,["attrs","fmla"]).substring(4))*wg)}}catch(Rg){c2.e(Rg)}finally{c2.f()}}var _d=g/2,aU=I/2,oU=I,cU=g,qd=Math.min(I,g),dU=sU*g/qd,rU=n2<0?0:n2>dU?dU:n2,hU=2*rU,bU=sU*I/qd,uU=a2<0?0:a2>bU?bU:a2,mU=qf-uU*qd/(I/2),ZU=qd*rU/qf,GU=qd*(l2<0?0:l2>hU?hU:l2)/lU,wU=_d-ZU,r2=_d-GU,h2=_d+GU,pU=_d+ZU,iu=qd*uU/qf,b2=oU-iu,BU=I*(o2<0?0:o2>mU?mU:o2)/lU,u2=aU-BU,m2=aU+BU;i="M ".concat(0,",").concat(_d," L ").concat(iu,",").concat(wU," L ").concat(iu,",").concat(r2," L ").concat(u2,",").concat(r2," L ").concat(u2,",").concat(0," L ").concat(m2,",").concat(0," L ").concat(m2,",").concat(r2," L ").concat(b2,",").concat(r2," L ").concat(b2,",").concat(wU," L ").concat(oU,",").concat(_d," L ").concat(b2,",").concat(pU," L ").concat(b2,",").concat(h2," L ").concat(m2,",").concat(h2," L ").concat(m2,",").concat(cU," L ").concat(u2,",").concat(cU," L ").concat(u2,",").concat(h2," L ").concat(iu,",").concat(h2," L ").concat(iu,",").concat(pU," z");break;case"quadArrowCallout":var WU=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),Z2=1.4578740157480314,G2=1.4578740157480314,w2=1.4578740157480314,p2=3.7892125984251965,$f=3.9370078740157477,g5=7.874015748031495,I5=15.74803149606299;if(WU){var yU,B2=MI(WU);try{for(B2.s();!(yU=B2.n()).done;){var eu=yU.value,W2=U(eu,["attrs","name"]);W2==="adj1"?Z2=parseInt(U(eu,["attrs","fmla"]).substring(4))*wg:W2==="adj2"?G2=parseInt(U(eu,["attrs","fmla"]).substring(4))*wg:W2==="adj3"?w2=parseInt(U(eu,["attrs","fmla"]).substring(4))*wg:W2==="adj4"&&(p2=parseInt(U(eu,["attrs","fmla"]).substring(4))*wg)}}catch(Rg){B2.e(Rg)}finally{B2.f()}}var Vn=g/2,Mn=I/2,YU=I,NU=g,C5=Math.min(I,g),t5=G2<0?0:G2>$f?$f:G2,VU=2*t5,i5=Z2<0?0:Z2>VU?VU:Z2,MU=$f-t5,RU=w2<0?0:w2>MU?MU:w2,fU=g5-2*RU,HU=p2<i5?i5:p2>fU?fU:p2,y2=C5*t5/g5,Y2=C5*i5/I5,xA=C5*RU/g5,XU=I*HU/I5,SU=g*HU/I5,N2=YU-xA,V2=Mn-XU,M2=Mn+XU,DU=Mn-y2,KU=Mn+y2,R2=Mn-Y2,f2=Mn+Y2,H2=NU-xA,X2=Vn-SU,S2=Vn+SU,FU=Vn-y2,kU=Vn+y2,D2=Vn-Y2,K2=Vn+Y2;i="M ".concat(0,",").concat(Vn," L ").concat(xA,",").concat(FU," L ").concat(xA,",").concat(D2," L ").concat(V2,",").concat(D2," L ").concat(V2,",").concat(X2," L ").concat(R2,",").concat(X2," L ").concat(R2,",").concat(xA," L ").concat(DU,",").concat(xA," L ").concat(Mn,",").concat(0," L ").concat(KU,",").concat(xA," L ").concat(f2,",").concat(xA," L ").concat(f2,",").concat(X2," L ").concat(M2,",").concat(X2," L ").concat(M2,",").concat(D2," L ").concat(N2,",").concat(D2," L ").concat(N2,",").concat(FU," L ").concat(YU,",").concat(Vn," L ").concat(N2,",").concat(kU," L ").concat(N2,",").concat(K2," L ").concat(M2,",").concat(K2," L ").concat(M2,",").concat(S2," L ").concat(f2,",").concat(S2," L ").concat(f2,",").concat(H2," L ").concat(KU,",").concat(H2," L ").concat(Mn,",").concat(NU," L ").concat(DU,",").concat(H2," L ").concat(R2,",").concat(H2," L ").concat(R2,",").concat(S2," L ").concat(V2,",").concat(S2," L ").concat(V2,",").concat(K2," L ").concat(xA,",").concat(K2," L ").concat(xA,",").concat(kU," z");break;case"curvedDownArrow":var zU=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),F2=1.9685039370078738,k2=3.9370078740157477,z2=1.9685039370078738,$d=7.874015748031495;if(zU){var JU,J2=MI(zU);try{for(J2.s();!(JU=J2.n()).done;){var L2=JU.value,e5=U(L2,["attrs","name"]);e5==="adj1"?F2=parseInt(U(L2,["attrs","fmla"]).substring(4))*wg:e5==="adj2"?k2=parseInt(U(L2,["attrs","fmla"]).substring(4))*wg:e5==="adj3"&&(z2=parseInt(U(L2,["attrs","fmla"]).substring(4))*wg)}}catch(Rg){J2.e(Rg)}finally{J2.f()}}var llg=I/2,nlg=I,LU=g,v2=270,Au=Math.min(I,g),vU=3.9370078740157477*I/Au,oo=Au*(F2<0?0:F2>$d?$d:F2)/$d,A5=Au*(k2<0?0:k2>vU?vU:k2)/$d,jA=llg-(oo+A5)/4,s5=2*jA,TU=Math.sqrt(s5*s5-oo*oo)*g/s5,xU=$d*TU/Au,T2=Au*(z2<0?0:z2>xU?xU:z2)/$d,su=jA+oo,l5=Math.sqrt(g*g-T2*T2)*jA/g,n5=jA+l5,jU=(A5-oo)/2,alg=n5-jU,olg=su+l5+jU,clg=nlg-A5/2,x2=LU-T2,a5=180*Math.atan(l5/T2)/Math.PI,dlg=-a5,o5=180*Math.atan(oo/2/TU)/Math.PI,QU=v2+a5,OU=v2-o5,rlg=o5-90,hlg=90+o5;i="M ".concat(clg,",").concat(LU," L ").concat(alg,",").concat(x2," L ").concat(n5,",").concat(x2," ").concat(Mg(jA,g,jA,g,QU,QU+dlg,!1).replace("M","L")," L ").concat(su,",").concat(0," ").concat(Mg(su,g,jA,g,v2,v2+a5,!1).replace("M","L")," L ").concat(n5+oo,",").concat(x2," L ").concat(olg,",").concat(x2," z M ").concat(su,",").concat(0," ").concat(Mg(su,g,jA,g,OU,OU+rlg,!1).replace("M","L")," ").concat(Mg(jA,g,jA,g,180,180+hlg,!1).replace("M","L"));break;case"curvedLeftArrow":var UU=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),j2=1.9685039370078738,Q2=3.9370078740157477,O2=1.9685039370078738,U2=7.874015748031495;if(UU){var EU,E2=MI(UU);try{for(E2.s();!(EU=E2.n()).done;){var P2=EU.value,c5=U(P2,["attrs","name"]);c5==="adj1"?j2=parseInt(U(P2,["attrs","fmla"]).substring(4))*wg:c5==="adj2"?Q2=parseInt(U(P2,["attrs","fmla"]).substring(4))*wg:c5==="adj3"&&(O2=parseInt(U(P2,["attrs","fmla"]).substring(4))*wg)}}catch(Rg){E2.e(Rg)}finally{E2.f()}}var blg=g/2,PU=I,ulg=g,_U=270,lu=Math.min(I,g),qU=3.9370078740157477*g/lu,d5=Q2<0?0:Q2>qU?qU:Q2,gr=lu*(j2<0?0:j2>d5?d5:j2)/U2,r5=lu*d5/U2,Pi=blg-(gr+r5)/4,h5=2*Pi,$U=Math.sqrt(h5*h5-gr*gr)*I/h5,gE=U2*$U/lu,_2=lu*(O2<0?0:O2>gE?gE:O2)/U2,Ir=Pi+gr,b5=Math.sqrt(I*I-_2*_2)*Pi/I,IE=Pi+b5,CE=Ir+b5,tE=(r5-gr)/2,mlg=IE-tE,Zlg=CE+tE,Glg=ulg-r5/2,q2=0+_2,iE=Math.atan(b5/_2),wlg=Math.atan(gr/2/$U)-iE,u5=180*iE/Math.PI,plg=180*wlg/Math.PI;i="M ".concat(PU,",").concat(Ir," ").concat(Mg(0,Pi,I,Pi,0,-90,!1).replace("M","L")," L ").concat(0,",").concat(0," ").concat(Mg(0,Ir,I,Pi,_U,360,!1).replace("M","L")," L ").concat(PU,",").concat(Ir," ").concat(Mg(0,Ir,I,Pi,0,u5,!1).replace("M","L")," L ").concat(q2,",").concat(CE," L ").concat(q2,",").concat(Zlg," L ").concat(0,",").concat(Glg," L ").concat(q2,",").concat(mlg," L ").concat(q2,",").concat(IE," ").concat(Mg(0,Pi,I,Pi,u5,u5+plg,!1).replace("M","L")," ").concat(Mg(0,Pi,I,Pi,0,-90,!1).replace("M","L")," ").concat(Mg(0,Ir,I,Pi,_U,360,!1).replace("M","L"));break;case"curvedRightArrow":var eE=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),$2=1.9685039370078738,gy=3.9370078740157477,Iy=1.9685039370078738,Cy=7.874015748031495;if(eE){var AE,ty=MI(eE);try{for(ty.s();!(AE=ty.n()).done;){var iy=AE.value,m5=U(iy,["attrs","name"]);m5==="adj1"?$2=parseInt(U(iy,["attrs","fmla"]).substring(4))*wg:m5==="adj2"?gy=parseInt(U(iy,["attrs","fmla"]).substring(4))*wg:m5==="adj3"&&(Iy=parseInt(U(iy,["attrs","fmla"]).substring(4))*wg)}}catch(Rg){ty.e(Rg)}finally{ty.f()}}var Blg=g/2,Z5=I,Wlg=g,G5=180,nu=Math.min(I,g),sE=3.9370078740157477*g/nu,w5=gy<0?0:gy>sE?sE:gy,co=nu*($2<0?0:$2>w5?w5:$2)/Cy,p5=nu*w5/Cy,Ve=Blg-(co+p5)/4,B5=2*Ve,lE=Math.sqrt(B5*B5-co*co)*I/B5,nE=Cy*lE/nu,ey=nu*(Iy<0?0:Iy>nE?nE:Iy)/Cy,W5=Ve+co,y5=Math.sqrt(I*I-ey*ey)*Ve/I,aE=Ve+y5,oE=W5+y5,cE=(p5-co)/2,ylg=aE-cE,Ylg=oE+cE,Nlg=Wlg-p5/2,Ay=Z5-ey,Y5=Math.atan(y5/ey),Vlg=Math.PI-Y5,Mlg=-Y5,Rlg=Math.atan(co/2/lE)-Math.PI/2,dE=180*Vlg/Math.PI,flg=180*Mlg/Math.PI,Hlg=180*Y5/Math.PI,Xlg=180*Rlg/Math.PI;i="M ".concat(0,",").concat(Ve," ").concat(Mg(I,Ve,I,Ve,G5,G5+flg,!1).replace("M","L")," L ").concat(Ay,",").concat(aE," L ").concat(Ay,",").concat(ylg," L ").concat(Z5,",").concat(Nlg," L ").concat(Ay,",").concat(Ylg," L ").concat(Ay,",").concat(oE," ").concat(Mg(I,W5,I,Ve,dE,dE+Hlg,!1).replace("M","L")," L ").concat(0,",").concat(Ve," ").concat(Mg(I,Ve,I,Ve,G5,270,!1).replace("M","L")," L ").concat(Z5,",").concat(co," ").concat(Mg(I,W5,I,Ve,270,270+Xlg,!1).replace("M","L"));break;case"curvedUpArrow":var rE=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),sy=1.9685039370078738,ly=3.9370078740157477,ny=1.9685039370078738,Cr=7.874015748031495;if(rE){var hE,ay=MI(rE);try{for(ay.s();!(hE=ay.n()).done;){var oy=hE.value,N5=U(oy,["attrs","name"]);N5==="adj1"?sy=parseInt(U(oy,["attrs","fmla"]).substring(4))*wg:N5==="adj2"?ly=parseInt(U(oy,["attrs","fmla"]).substring(4))*wg:N5==="adj3"&&(ny=parseInt(U(oy,["attrs","fmla"]).substring(4))*wg)}}catch(Rg){ay.e(Rg)}finally{ay.f()}}var Slg=I/2,Dlg=I,Klg=g,au=Math.min(I,g),bE=3.9370078740157477*I/au,ro=au*(sy<0?0:sy>Cr?Cr:sy)/Cr,V5=au*(ly<0?0:ly>bE?bE:ly)/Cr,tA=Slg-(ro+V5)/4,M5=2*tA,uE=Math.sqrt(M5*M5-ro*ro)*g/M5,mE=Cr*uE/au,cy=au*(ny<0?0:ny>mE?mE:ny)/Cr,R5=tA+ro,f5=Math.sqrt(g*g-cy*cy)*tA/g,ZE=tA+f5,GE=R5+f5,wE=(V5-ro)/2,Flg=ZE-wE,klg=GE+wE,zlg=Dlg-V5/2,dy=0+cy,H5=Math.atan(f5/cy),pE=Math.atan(ro/2/uE),Jlg=pE-H5,Llg=Math.PI/2-H5,BE=180*(Math.PI/2-pE)/Math.PI,vlg=180*Jlg/Math.PI,WE=180*Llg/Math.PI,Tlg=180*H5/Math.PI;i="".concat(Mg(tA,0,tA,g,BE,BE+vlg,!1)," L ").concat(ZE,",").concat(dy," L ").concat(Flg,",").concat(dy," L ").concat(zlg,",").concat(0," L ").concat(klg,",").concat(dy," L ").concat(GE,",").concat(dy," ").concat(Mg(R5,0,tA,g,WE,WE+Tlg,!1).replace("M","L")," L ").concat(tA,",").concat(Klg," ").concat(Mg(tA,0,tA,g,90,180,!1).replace("M","L")," L ").concat(ro,",").concat(0," ").concat(Mg(R5,0,tA,g,180,90,!1).replace("M","L"));break;case"mathDivide":case"mathEqual":case"mathMinus":case"mathMultiply":case"mathNotEqual":case"mathPlus":var $I,yt,Me,ry=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]);if(ry)if(Array.isArray(ry)){var yE,hy=MI(ry);try{for(hy.s();!(yE=hy.n()).done;){var by=yE.value,X5=U(by,["attrs","name"]);X5==="adj1"?$I=parseInt(U(by,["attrs","fmla"]).substring(4)):X5==="adj2"?yt=parseInt(U(by,["attrs","fmla"]).substring(4)):X5==="adj3"&&(Me=parseInt(U(by,["attrs","fmla"]).substring(4)))}}catch(Rg){hy.e(Rg)}finally{hy.f()}}else $I=parseInt(U(ry,["attrs","fmla"]).substring(4));var YE=3.9370078740157477,QA=7.874015748031495,iA=15.74803149606299,UC=I/2,Ai=g/2,Ps=g/2;if(t==="mathNotEqual"){$I===void 0&&($I=23520),yt===void 0&&(yt=66e5),Me===void 0&&(Me=11760),$I*=wg,yt=yt/6e4*Math.PI/180,Me*=wg;var NE=70*Math.PI/180,VE=110*Math.PI/180,ME=$I<0?0:$I>YE?YE:$I,RE=QA-2*ME,ou=g*ME/QA,fE=g*(Me<0?0:Me>RE?RE:Me)/iA,HE=5.7866141732283465*I/iA,uy=UC-HE,my=UC+HE,tr=Ai-fE,ir=Ai+fE,cu=tr-ou,du=ir+ou,ru=(yt<NE?NE:yt>VE?VE:yt)-Math.PI/2,Rn=Ps*Math.tan(ru),S5=Math.sqrt(Rn*Rn+Ps*Ps),ho=S5*ou/Ps,fn=UC+Rn-ho/2,XE=fn-Rn*cu/Ps,SE=fn-Rn*tr/Ps,DE=fn-Rn*ir/Ps,KE=fn-Rn*du/Ps,xlg=XE+ho,jlg=SE+ho,Qlg=DE+ho,Olg=KE+ho,FE=ou*Ps/S5,kE=ru>0?fn+FE:fn+ho,zE=ru>0?fn:fn+ho-FE,JE=ou*Rn/S5,LE=ru>0?JE:0,vE=ru>0?0:-JE,Ulg=I-kE,Elg=I-zE,Plg=g-LE,_lg=g-vE;i="M ".concat(uy,",").concat(cu," L ").concat(XE,",").concat(cu," L ").concat(zE,",").concat(vE," L ").concat(kE,",").concat(LE," L ").concat(xlg,",").concat(cu," L ").concat(my,",").concat(cu," L ").concat(my,",").concat(tr," L ").concat(jlg,",").concat(tr," L ").concat(Qlg,",").concat(ir," L ").concat(my,",").concat(ir," L ").concat(my,",").concat(du," L ").concat(Olg,",").concat(du," L ").concat(Elg,",").concat(_lg," L ").concat(Ulg,",").concat(Plg," L ").concat(KE,",").concat(du," L ").concat(uy,",").concat(du," L ").concat(uy,",").concat(ir," L ").concat(DE,",").concat(ir," L ").concat(SE,",").concat(tr," L ").concat(uy,",").concat(tr," z")}else if(t==="mathDivide"){$I===void 0&&($I=23520),yt===void 0&&(yt=5880),Me===void 0&&(Me=11760);var Zy=.07874015748031496,D5=2.8933070866141732,K5=5.7866141732283465,F5=($I*=wg)<Zy?Zy:$I>D5?D5:$I,TE=(K5-F5)/4,xE=D5*I/g,jE=TE<xE?TE:xE,QE=(Me*=wg)<Zy?Zy:Me>jE?jE:Me,OE=K5-4*QE-F5,UE=g*F5/iA,Re=g*QE/QA,EE=I*K5/iA,k5=Ai-UE,PE=Ai+UE,Gy=k5-(g*((yt*=wg)<0?0:yt>OE?OE:yt)/QA+Re)-Re,z5=g-Gy,_E=UC-EE,qE=UC+EE;i="M ".concat(UC,",").concat(Gy," A ").concat(Re,",").concat(Re," 0 1,0 ").concat(UC,",").concat(Gy+2*Re," A ").concat(Re,",").concat(Re," 0 1,0 ").concat(UC,",").concat(Gy," z M ").concat(UC,",").concat(z5," A ").concat(Re,",").concat(Re," 0 1,1 ").concat(UC,",").concat(z5-2*Re," A ").concat(Re,",").concat(Re," 0 1,1 ").concat(UC,",").concat(z5," z M ").concat(_E,",").concat(k5," L ").concat(qE,",").concat(k5," L ").concat(qE,",").concat(PE," L ").concat(_E,",").concat(PE," z")}else if(t==="mathEqual"){$I===void 0&&($I=23520),yt===void 0&&(yt=11760);var $E=2.8933070866141732,g7=($I*=wg)<0?0:$I>$E?$E:$I,I7=QA-2*g7,C7=g*g7/QA,t7=g*((yt*=wg)<0?0:yt>I7?I7:yt)/iA,i7=5.7866141732283465*I/iA,J5=Ai-t7,L5=Ai+t7,e7=J5-C7,A7=L5+C7,wy=UC-i7,py=UC+i7;i="M ".concat(wy,",").concat(e7," L ").concat(py,",").concat(e7," L ").concat(py,",").concat(J5," L ").concat(wy,",").concat(J5," z M ").concat(wy,",").concat(L5," L ").concat(py,",").concat(L5," L ").concat(py,",").concat(A7," L ").concat(wy,",").concat(A7," z")}else if(t==="mathMinus"){$I===void 0&&($I=23520);var s7=g*(($I*=wg)<0?0:$I>QA?QA:$I)/iA,l7=5.7866141732283465*I/iA,n7=Ai-s7,a7=Ai+s7,o7=UC-l7,c7=UC+l7;i="M ".concat(o7,",").concat(n7," L ").concat(c7,",").concat(n7," L ").concat(c7,",").concat(a7," L ").concat(o7,",").concat(a7," z")}else if(t==="mathMultiply"){$I===void 0&&($I=23520),$I*=wg;var v5=4.091732283464567,d7=Math.min(I,g)*($I<0?0:$I>v5?v5:$I)/QA,T5=Math.atan(g/I),r7=Math.sin(T5),h7=Math.cos(T5),x5=Math.tan(T5),b7=Math.sqrt(I*I+g*g),u7=b7-b7*v5/QA,m7=h7*u7/2,Z7=r7*u7/2,G7=r7*d7/2,w7=h7*d7/2,By=m7-G7,hu=Z7+w7,Wy=m7+G7,yy=Z7-w7,p7=(UC-Wy)*x5+yy,B7=I-Wy,j5=I-By,qlg=j5-(Ai-hu)/x5,$lg=By+(Ai-hu)/x5,W7=g-hu,y7=g-yy,gng=g-p7;i="M ".concat(By,",").concat(hu," L ").concat(Wy,",").concat(yy," L ").concat(UC,",").concat(p7," L ").concat(B7,",").concat(yy," L ").concat(j5,",").concat(hu," L ").concat(qlg,",").concat(Ai," L ").concat(j5,",").concat(W7," L ").concat(B7,",").concat(y7," L ").concat(UC,",").concat(gng," L ").concat(Wy,",").concat(y7," L ").concat(By,",").concat(W7," L ").concat($lg,",").concat(Ai," z")}else if(t==="mathPlus"){$I===void 0&&($I=23520),$I*=wg;var Yy=5.7866141732283465,Ing=Math.min(I,g),Y7=I*Yy/iA,N7=g*Yy/iA,Ny=Ing*($I<0?0:$I>Yy?Yy:$I)/iA,V7=UC-Y7,Vy=UC-Ny,My=UC+Ny,M7=UC+Y7,R7=Ai-N7,Ry=Ai-Ny,fy=Ai+Ny,f7=Ai+N7;i="M ".concat(V7,",").concat(Ry," L ").concat(Vy,",").concat(Ry," L ").concat(Vy,",").concat(R7," L ").concat(My,",").concat(R7," L ").concat(My,",").concat(Ry," L ").concat(M7,",").concat(Ry," L ").concat(M7,",").concat(fy," L ").concat(My,",").concat(fy," L ").concat(My,",").concat(f7," L ").concat(Vy,",").concat(f7," L ").concat(Vy,",").concat(fy," L ").concat(V7,",").concat(fy," z")}break;case"can":case"flowChartMagneticDisk":case"flowChartMagneticDrum":var H7=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),bu=1.9685039370078738;H7&&(bu=parseInt(H7.substring(4))*wg),t!=="flowChartMagneticDisk"&&t!=="flowChartMagneticDrum"||(bu=3.9370078740157477);var X7=Math.min(I,g),S7=3.9370078740157477*g/X7,bo=X7*(bu<0?0:bu>S7?S7:bu)/15.74803149606299,D7=g-bo,Q5=180,er=I/2,O5="".concat(Mg(er,bo,er,bo,0,Q5,!1)," ").concat(Mg(er,bo,er,bo,Q5,360,!1).replace("M","L")," L ").concat(I,",").concat(D7," ").concat(Mg(er,D7,er,bo,0,Q5,!1).replace("M","L")," L 0,").concat(bo);t==="flowChartMagneticDrum"&&(O5=O5.replace(/([MLQC])\s*([-\d.e]+)\s*([-\d.e]+)/gi,function(Rg,NI,pC,vC){var TC=I/2-(parseFloat(vC)-g/2),Hi=g/2+(parseFloat(pC)-I/2);return"".concat(NI).concat(TC," ").concat(Hi)}).replace(/([MLQC])\s*([-\d.e]+)\s*([-\d.e]+)\s*([-\d.e]+)\s*([-\d.e]+)/gi,function(Rg,NI,pC,vC,TC,Hi){var xC=I/2-(parseFloat(vC)-g/2),qC=g/2+(parseFloat(pC)-I/2),rt=I/2-(parseFloat(Hi)-g/2),Yt=g/2+(parseFloat(TC)-I/2);return"".concat(NI).concat(xC," ").concat(qC," ").concat(rt," ").concat(Yt)})),i=O5;break;case"swooshArrow":var K7=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),uo=wg,Hy=25e3*uo,Xy=16667*uo;if(K7){var F7,Sy=MI(K7);try{for(Sy.s();!(F7=Sy.n()).done;){var U5=F7.value,k7=U(U5,["attrs","name"]);k7==="adj1"?Hy=parseInt(U(U5,["attrs","fmla"]).substring(4))*uo:k7==="adj2"&&(Xy=parseInt(U(U5,["attrs","fmla"]).substring(4))*uo)}}catch(Rg){Sy.e(Rg)}finally{Sy.f()}}var z7=1*uo,J7=75e3*uo,L7=1e5*uo,E5=Math.min(I,g),P5=E5/8,_5=g/6,v7=5.511811023622047*I/E5,T7=g*(Hy<z7?z7:Hy>J7?J7:Hy)/L7,q5=I-E5*(Xy<0?0:Xy>v7?v7:Xy)/L7,x7=P5,j7=Math.PI/2/14,Q7=P5*Math.tan(j7),Cng=q5-Q7,$5=x7+T7,O7=q5+T7*Math.tan(j7),tng=O7+Q7,U7=$5+P5,ing=U7/2-g/20,eng=_5+_5,Ang=I/6,sng=$5+_5/2,lng=I/4;i="M 0,".concat(g," Q ").concat(Ang,",").concat(eng," ").concat(q5,",").concat(x7," L ").concat(Cng,",0 L ").concat(I,",").concat(ing," L ").concat(tng,",").concat(U7," L ").concat(O7,",").concat($5," Q ").concat(lng,",").concat(sng," 0,").concat(g," z");break;case"circularArrow":var E7=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),Dy=.9842519685039369,Ky=19.03865*Math.PI/180,Fy=340.96135*Math.PI/180,ky=180*Math.PI/180,zy=.9842519685039369;if(E7){var P7,Jy=MI(E7);try{for(Jy.s();!(P7=Jy.n()).done;){var Ar=P7.value,uu=U(Ar,["attrs","name"]);uu==="adj1"?Dy=parseInt(U(Ar,["attrs","fmla"]).substring(4))*wg:uu==="adj2"?Ky=parseInt(U(Ar,["attrs","fmla"]).substring(4))/6e4*Math.PI/180:uu==="adj3"?Fy=parseInt(U(Ar,["attrs","fmla"]).substring(4))/6e4*Math.PI/180:uu==="adj4"?ky=parseInt(U(Ar,["attrs","fmla"]).substring(4))/6e4*Math.PI/180:uu==="adj5"&&(zy=parseInt(U(Ar,["attrs","fmla"]).substring(4))*wg)}}catch(Rg){Jy.e(Rg)}finally{Jy.f()}}var mo=I/2,Zo=g/2,nng=I/2,ang=g/2,_7=Math.min(I,g),q7=1.9685039370078738,$7=7.874015748031495,gP=1/6e4*Math.PI/180,Ly=21599999/6e4*Math.PI/180,Go=2*Math.PI,IP=zy<0?0:zy>q7?q7:zy,CP=2*IP,sr=Fy<gP?gP:Fy>Ly?Ly:Fy,gH=ky<0?0:ky>Ly?Ly:ky,IH=_7*(Dy<0?0:Dy>CP?CP:Dy)/$7,wo=_7*IP/$7,vy=IH/2,lr=nng+vy-wo,nr=ang+vy-wo,po=lr-IH,Bo=nr-IH,Ty=po+vy,xy=Bo+vy,tP=Ty*Math.sin(sr),iP=xy*Math.cos(sr),Hn=Ty*Math.cos(Math.atan2(tP,iP)),ar=xy*Math.sin(Math.atan2(tP,iP)),eP=mo+Hn,AP=Zo+ar,si=Math.min(po,Bo),ong=1-(Hn*Hn-si*si)*(ar*ar-si*si)/(Hn*Hn*ar*ar),CH=(1+Math.sqrt(ong))/((Hn*Hn-si*si)/Hn/ar),tH=Math.atan2(CH,1)>0?Math.atan2(CH,1):Math.atan2(CH,1)+Go,iH=tH-sr>0?tH-sr:tH-sr+Go,cng=iH-Math.PI>0?iH-Go:iH,sP=Math.abs(cng),or=sr+(Ky<0?0:Ky>sP?sP:Ky),lP=Ty*Math.sin(or),nP=xy*Math.cos(or),dng=mo+Ty*Math.cos(Math.atan2(lP,nP)),rng=Zo+xy*Math.sin(Math.atan2(lP,nP)),aP=eP+wo*Math.cos(or),oP=AP+wo*Math.sin(or),cP=eP-wo*Math.cos(or),dP=AP-wo*Math.sin(or),rP=cP-mo,hP=dP-Zo,bP=aP-mo,uP=oP-Zo,Xn=Math.min(lr,nr),mP=rP*Xn/lr,ZP=hP*Xn/nr,jy=bP*Xn/lr,Qy=uP*Xn/nr,cr=jy-mP,Wo=Qy-ZP,OA=Math.sqrt(cr*cr+Wo*Wo),dr=mP*Qy-jy*ZP,Oy=Math.sqrt(Math.max(0,Xn*Xn*OA*OA-dr*dr)),Uy=-1*Wo>0?-1:1,GP=(dr*Wo+Uy*cr*Oy)/(OA*OA),wP=(dr*Wo-Uy*cr*Oy)/(OA*OA),pP=(-dr*cr+Math.abs(Wo)*Oy)/(OA*OA),BP=(-dr*cr-Math.abs(Wo)*Oy)/(OA*OA),WP=Math.sqrt(Math.pow(jy-wP,2)+Math.pow(Qy-BP,2))-Math.sqrt(Math.pow(jy-GP,2)+Math.pow(Qy-pP,2)),eH=mo+(WP>0?GP:wP)*lr/Xn,AH=Zo+(WP>0?pP:BP)*nr/Xn,Ey=rP*si/po,Py=hP*si/Bo,yP=bP*si/po,YP=uP*si/Bo,rr=yP-Ey,hr=YP-Py,UA=Math.sqrt(rr*rr+hr*hr),br=Ey*YP-yP*Py,_y=Math.sqrt(Math.max(0,si*si*UA*UA-br*br)),NP=(br*hr+Uy*rr*_y)/(UA*UA),VP=(br*hr-Uy*rr*_y)/(UA*UA),MP=(-br*rr+Math.abs(hr)*_y)/(UA*UA),RP=(-br*rr-Math.abs(hr)*_y)/(UA*UA),fP=Math.sqrt(Math.pow(Ey-VP,2)+Math.pow(Py-RP,2))-Math.sqrt(Math.pow(Ey-NP,2)+Math.pow(Py-MP,2)),HP=fP>0?NP:VP,XP=fP>0?MP:RP,sH=mo+HP*po/si,lH=Zo+XP*Bo/si,nH=Math.atan2(XP*Bo/si,HP*po/si),SP=nH>0?nH:nH+Go,aH=gH-SP,hng=aH>0?aH-Go:aH,qy=Math.sqrt(Math.pow(eH-sH,2)+Math.pow(AH-lH,2))/2-wo,bng=qy>0?eH:aP,ung=qy>0?AH:oP,mng=qy>0?sH:cP,Zng=qy>0?lH:dP,oH=Math.atan2(AH-Zo,eH-mo),cH=(oH>0?oH:oH+Go)-gH,Gng=cH>0?cH:cH+Go,DP=180*gH/Math.PI,wng=DP+180*Gng/Math.PI,KP=180*SP/Math.PI,png=KP+180*hng/Math.PI;i="".concat(Mg(I/2,g/2,lr,nr,DP,wng,!1)," L ").concat(bng,",").concat(ung," L ").concat(dng,",").concat(rng," L ").concat(mng,",").concat(Zng," L ").concat(sH,",").concat(lH," ").concat(Mg(I/2,g/2,po,Bo,KP,png,!1).replace("M","L")," z");break;case"leftCircularArrow":var FP=U(C,["p:spPr","a:prstGeom","a:avLst","a:gd"]),$y=.9842519685039369,gY=-19.03865*Math.PI/180,IY=19.03865*Math.PI/180,CY=180*Math.PI/180,tY=.9842519685039369;if(FP){var kP,iY=MI(FP);try{for(iY.s();!(kP=iY.n()).done;){var ur=kP.value,mu=U(ur,["attrs","name"]);mu==="adj1"?$y=parseInt(U(ur,["attrs","fmla"]).substring(4))*wg:mu==="adj2"?gY=parseInt(U(ur,["attrs","fmla"]).substring(4))/6e4*Math.PI/180:mu==="adj3"?IY=parseInt(U(ur,["attrs","fmla"]).substring(4))/6e4*Math.PI/180:mu==="adj4"?CY=parseInt(U(ur,["attrs","fmla"]).substring(4))/6e4*Math.PI/180:mu==="adj5"&&(tY=parseInt(U(ur,["attrs","fmla"]).substring(4))*wg)}}catch(Rg){iY.e(Rg)}finally{iY.f()}}var _s=I/2,qs=g/2,Bng=I/2,Wng=g/2,zP=Math.min(I,g),JP=1.9685039370078738,LP=7.874015748031495,vP=1/6e4*Math.PI/180,eY=21599999/6e4*Math.PI/180,yo=2*Math.PI,TP=tY<0?0:tY>JP?JP:tY,xP=2*TP,mr=IY<vP?vP:IY>eY?eY:IY,Sn=CY<0?0:CY>eY?eY:CY,dH=zP*($y<0?0:$y>xP?xP:$y)/LP,Yo=zP*TP/LP,AY=dH/2,No=Bng+AY-Yo,Vo=Wng+AY-Yo,Dn=No-dH,Kn=Vo-dH,jP=Dn+AY,QP=Kn+AY,Fn=jP*Math.cos(mr),Zr=QP*Math.sin(mr),OP=_s+Fn,UP=qs+Zr,li=Math.min(Dn,Kn),yng=1-(Fn*Fn-li*li)*(Zr*Zr-li*li)/(Fn*Fn*Zr*Zr),rH=(1+Math.sqrt(yng))/((Fn*Fn-li*li)/Fn/Zr),hH=Math.atan2(rH,1)>0?Math.atan2(rH,1):Math.atan2(rH,1)+yo,bH=hH-mr>0?hH-mr:hH-mr+yo,Yng=bH-Math.PI>0?bH-yo:bH,EP=-Math.abs(Yng),Gr=mr+(gY<EP?EP:gY>0?0:gY),Nng=_s+jP*Math.cos(Gr),Vng=qs+QP*Math.sin(Gr),Mng=_s+No*Math.cos(Sn),Rng=qs+Vo*Math.sin(Sn),fng=_s+Dn*Math.cos(Sn),Hng=qs+Kn*Math.sin(Sn),PP=OP+Yo*Math.cos(Gr),_P=UP+Yo*Math.sin(Gr),qP=OP-Yo*Math.cos(Gr),$P=UP-Yo*Math.sin(Gr),g6=qP-_s,I6=$P-qs,C6=PP-_s,t6=_P-qs,kn=Math.min(No,Vo),i6=g6*kn/No,e6=I6*kn/Vo,sY=C6*kn/No,lY=t6*kn/Vo,wr=sY-i6,Mo=lY-e6,EA=Math.sqrt(wr*wr+Mo*Mo),pr=i6*lY-sY*e6,nY=Math.sqrt(Math.max(0,kn*kn*EA*EA-pr*pr)),aY=-1*Mo>0?-1:1,A6=(pr*Mo+aY*wr*nY)/(EA*EA),s6=(pr*Mo-aY*wr*nY)/(EA*EA),l6=(-pr*wr+Math.abs(Mo)*nY)/(EA*EA),n6=(-pr*wr-Math.abs(Mo)*nY)/(EA*EA),a6=Math.sqrt(Math.pow(sY-s6,2)+Math.pow(lY-n6,2))-Math.sqrt(Math.pow(sY-A6,2)+Math.pow(lY-l6,2)),oY=_s+(a6>0?A6:s6)*No/kn,cY=qs+(a6>0?l6:n6)*Vo/kn,dY=g6*li/Dn,rY=I6*li/Kn,o6=C6*li/Dn,c6=t6*li/Kn,Br=o6-dY,Wr=c6-rY,PA=Math.sqrt(Br*Br+Wr*Wr),yr=dY*c6-o6*rY,hY=Math.sqrt(Math.max(0,li*li*PA*PA-yr*yr)),d6=(yr*Wr+aY*Br*hY)/(PA*PA),r6=(yr*Wr-aY*Br*hY)/(PA*PA),h6=(-yr*Br+Math.abs(Wr)*hY)/(PA*PA),b6=(-yr*Br-Math.abs(Wr)*hY)/(PA*PA),u6=Math.sqrt(Math.pow(dY-r6,2)+Math.pow(rY-b6,2))-Math.sqrt(Math.pow(dY-d6,2)+Math.pow(rY-h6,2)),m6=u6>0?d6:r6,Z6=u6>0?h6:b6,G6=_s+m6*Dn/li,w6=qs+Z6*Kn/li,uH=Math.atan2(Z6*Kn/li,m6*Dn/li),p6=uH>0?uH:uH+yo,mH=Sn-p6,B6=mH>0?mH:mH+yo,Xng=p6+B6,Sng=-B6,bY=Math.sqrt(Math.pow(oY-G6,2)+Math.pow(cY-w6,2))/2-Yo,Dng=bY>0?oY:PP,Kng=bY>0?cY:_P,Fng=bY>0?G6:qP,kng=bY>0?w6:$P,ZH=Math.atan2(cY-qs,oY-_s),GH=(ZH>0?ZH:ZH+yo)-Sn,zng=180*(Sn+(GH>0?GH-yo:GH))/Math.PI,Jng=180*Sn/Math.PI,W6=180*Xng/Math.PI,Lng=W6+180*Sng/Math.PI;i="M ".concat(Mng,",").concat(Rng," L ").concat(fng,",").concat(Hng," ").concat(Mg(I/2,g/2,Dn,Kn,W6,Lng,!1).replace("M","L")," L ").concat(Fng,",").concat(kng," L ").concat(Nng,",").concat(Vng," L ").concat(Dng,",").concat(Kng," L ").concat(oY,",").concat(cY," ").concat(Mg(I/2,g/2,No,Vo,zng,Jng,!1).replace("M","L")," z")}return i}function pX(t,I){if(!t||!I)return null;var g=U(t,[I,"p:transition"]);return g||((g=U(t,[I,"mc:AlternateContent","mc:Choice","p:transition"]))?g:g=U(t,[I,"mc:AlternateContent","mc:Fallback","p:transition"]))}function sbg(t){if(!t)return null;var I={type:"none",duration:1e3,direction:null},g=t.attrs||{},C=!1,i=/^p\d{2}:dur$/;for(var e in g)if(i.test(e)&&!isNaN(parseInt(g[e],10))){I.duration=parseInt(g[e],10),C=!0;break}if(!C&&g.spd)switch(g.spd){case"slow":default:I.duration=1e3;break;case"med":I.duration=800;break;case"fast":I.duration=500}g.advClick==="0"&&g.advTm&&(I.autoNextAfter=parseInt(g.advTm,10));var A=/^(p|p\d{2}):/;for(var s in t)if(s!=="attrs"&&A.test(s)){var l=t[s];if(I.type=s.substring(s.indexOf(":")+1),l&&l.attrs){var n=l.attrs;n.dur&&!isNaN(parseInt(n.dur,10))&&(C||(I.duration=parseInt(n.dur,10))),n.dir&&(I.direction=n.dir)}break}return I}function oq(t,I){var g=Object.keys(t);if(Object.getOwnPropertySymbols){var C=Object.getOwnPropertySymbols(t);I&&(C=C.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),g.push.apply(g,C)}return g}function _t(t){for(var I=1;I<arguments.length;I++){var g=arguments[I]!=null?arguments[I]:{};I%2?oq(Object(g),!0).forEach(function(C){h9(t,C,g[C])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(g)):oq(Object(g)).forEach(function(C){Object.defineProperty(t,C,Object.getOwnPropertyDescriptor(g,C))})}return t}function uC(t,I){var g=typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(!g){if(Array.isArray(t)||(g=function(l,n){if(l){if(typeof l=="string")return cq(l,n);var a=Object.prototype.toString.call(l).slice(8,-1);if(a==="Object"&&l.constructor&&(a=l.constructor.name),a==="Map"||a==="Set")return Array.from(l);if(a==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return cq(l,n)}}(t))||I){g&&(t=g);var C=0,i=function(){};return{s:i,n:function(){return C>=t.length?{done:!0}:{done:!1,value:t[C++]}},e:function(l){throw l},f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
- In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var e,A=!0,s=!1;return{s:function(){g=g.call(t)},n:function(){var l=g.next();return A=l.done,l},e:function(l){s=!0,e=l},f:function(){try{A||g.return==null||g.return()}finally{if(s)throw e}}}}function cq(t,I){(I==null||I>t.length)&&(I=t.length);for(var g=0,C=new Array(I);g<I;g++)C[g]=t[g];return C}function ftg(t){var I=U(t,["p:nvSpPr","p:nvPr","p:ph"])||U(t,["p:nvPicPr","p:nvPr","p:ph"])||U(t,["p:nvGraphicFramePr","p:nvPr","p:ph"]);if(!I)return null;var g=U(I,["attrs","type"]);return g?String(g):null}function Htg(t){return t==="dt"||t==="sldNum"||t==="ftr"||t==="hdr"}function lbg(t){return U(t,["p:nvSpPr","p:cNvPr","attrs","name"])||U(t,["p:nvPicPr","p:cNvPr","attrs","name"])||U(t,["p:nvGraphicFramePr","p:cNvPr","attrs","name"])||""}function Xtg(t){if(!t)return!1;var I=String(t);return/(^|\b)(Footer Text|Header Text|Slide Number|Date)(\b|$)/i.test(I)||/页脚|页眉|页码|日期/.test(I)}function Stg(t){return String(t||"").replace(/<[^>]+>/g,"").replace(/ /g," ").trim()}function nbg(t){var I=String(t||"").replace(/\s+/g," ").trim();if(!I)return!1;var g=I.toLowerCase();return g==="click to add title"||g==="click to add text"||g==="click to add subtitle"||g==="click to add notes"||/edit\s+master/.test(g)||/edit\s+the\s+master/.test(g)||/edit\s+master\s+(title|text)/.test(g)||I==="此处添加标题"||I==="单击以添加标题"||I==="单击此处添加标题"||I==="此处添加文本"||I==="单击以添加文本"||I==="单击此处添加文本"||I==="单击以添加副标题"||I==="单击此处添加副标题"||I.includes("编辑母版")}function abg(t,I){if(!t||t.type!=="text"||!Number.isFinite(I)||I<=0||!Number.isFinite(t.top)||!Number.isFinite(t.height))return!1;var g=Stg(t.content);if(!g)return!1;var C=t.top>.78*I,i=t.height<.2*I;if(!C||!i)return!1;var e=/^[0-9]{1,3}$/.test(g),A=/^(\d{4}[\-/]\d{1,2}[\-/]\d{1,2})$/.test(g)||/(年\d{1,2}月\d{1,2}日)$/.test(g),s=/页码|日期/.test(g);return e||A||s}function bD(t,I){var g,C=[],i=uC(t||[]);try{for(i.s();!(g=i.n()).done;){var e=g.value;if(e&&!Xtg(e.name)&&!(abg(e,I)||e.type==="text"&&nbg(Stg(e.content))))if(Array.isArray(e.elements)){var A=bD(e.elements,I);if(!A.length)continue;C.push(_t(_t({},e),{},{elements:A}))}else C.push(e)}}catch(s){i.e(s)}finally{i.f()}return C}function uD(t){if(!Array.isArray(t))return t;for(var I=0;I<t.length;I++){var g=t[I];g&&La(g)==="object"&&(g.order=I,Array.isArray(g.elements)&&uD(g.elements))}return t}function obg(t,I){var g=bD(t.elements,I),C=bD(t.layoutElements,I);return uD(g),uD(C),_t(_t({},t),{},{elements:g,layoutElements:C})}function kl(t,I,g){t&&Array.isArray(t.trace)&&(g===void 0?t.trace.push({step:I}):t.trace.push({step:I,data:g}))}function cbg(t){return mD.apply(this,arguments)}function mD(){return mD=RC(rI.mark(function t(I){var g,C,i,e,A,s,l,n,a,d,o,c,r,h,b,u,m,Z,p=arguments;return rI.wrap(function(Y){for(;;)switch(Y.prev=Y.next){case 0:return g=p.length>1&&p[1]!==void 0?p[1]:{},C=[],Y.next=4,p0g.loadAsync(I);case 4:return i=Y.sent,Y.next=7,dbg(i);case 7:return e=Y.sent,Y.next=10,rbg(i);case 10:return A=Y.sent,s=A.width,l=A.height,n=A.defaultTextStyle,a=A.headerFooter,Y.next=17,hbg(i);case 17:return d=Y.sent,o=d.themeContent,c=d.themeColors,Y.next=22,bbg(i);case 22:r=Y.sent,h=r.length?r:e.slides,b=0;case 25:if(!(b<h.length)){Y.next=35;break}return u=h[b],m=b+1,Y.next=30,ubg(i,u,o,n,a,m,g);case 30:Z=Y.sent,C.push(obg(Z,l));case 32:b++,Y.next=25;break;case 35:return Y.abrupt("return",{slides:C,themeColors:c,size:{width:s,height:l}});case 36:case"end":return Y.stop()}},t)})),mD.apply(this,arguments)}function dbg(t){return Dtg.apply(this,arguments)}function Dtg(){return(Dtg=RC(rI.mark(function t(I){var g,C,i,e,A,s,l,n;return rI.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:return a.next=2,Gt(I,"[Content_Types].xml");case 2:g=a.sent,C=g.Types.Override,i=[],e=[],A=uC(C),a.prev=7,A.s();case 9:if((s=A.n()).done){a.next=20;break}l=s.value,a.t0=l.attrs.ContentType,a.next=a.t0==="application/vnd.openxmlformats-officedocument.presentationml.slide+xml"?14:a.t0==="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"?16:18;break;case 14:return i.push(l.attrs.PartName.substr(1)),a.abrupt("break",18);case 16:return e.push(l.attrs.PartName.substr(1)),a.abrupt("break",18);case 18:a.next=9;break;case 20:a.next=25;break;case 22:a.prev=22,a.t1=a.catch(7),A.e(a.t1);case 25:return a.prev=25,A.f(),a.finish(25);case 28:return n=function(d,o){return+/(\d+)\.xml/.exec(d)[1]-+/(\d+)\.xml/.exec(o)[1]},i=i.sort(n),e=e.sort(n),a.abrupt("return",{slides:i,slideLayouts:e});case 32:case"end":return a.stop()}},t,null,[[7,22,25,28]])}))).apply(this,arguments)}function rbg(t){return ZD.apply(this,arguments)}function ZD(){return ZD=RC(rI.mark(function t(I){var g,C,i,e,A,s,l;return rI.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,Gt(I,"ppt/presentation.xml");case 2:return g=n.sent,C=g["p:presentation"]["p:sldSz"].attrs,i=g["p:presentation"]["p:defaultTextStyle"],e=function(a){if(a!=null){var d=String(a).toLowerCase();return d==="1"||d==="true"||d==="on"}},A=function(a){return a===void 0||a},s=U(g,["p:presentation","p:hf","attrs"]),l={dt:A(e(U(s,["dt"]))),ftr:A(e(U(s,["ftr"]))),hdr:A(e(U(s,["hdr"]))),sldNum:A(e(U(s,["sldNum"])))},n.abrupt("return",{width:parseInt(C.cx)*wg,height:parseInt(C.cy)*wg,defaultTextStyle:i,headerFooter:l});case 10:case"end":return n.stop()}},t)})),ZD.apply(this,arguments)}function hbg(t){return GD.apply(this,arguments)}function GD(){return GD=RC(rI.mark(function t(I){var g,C,i,e,A,s,l,n,a,d,o,c,r,h,b,u,m;return rI.wrap(function(Z){for(;;)switch(Z.prev=Z.next){case 0:return Z.next=2,Gt(I,"ppt/_rels/presentation.xml.rels");case 2:if(g=Z.sent,(C=g.Relationships.Relationship).constructor!==Array){Z.next=25;break}e=uC(C),Z.prev=6,e.s();case 8:if((A=e.n()).done){Z.next=15;break}if((s=A.value).attrs.Type!=="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme"){Z.next=13;break}return i=s.attrs.Target,Z.abrupt("break",15);case 13:Z.next=8;break;case 15:Z.next=20;break;case 17:Z.prev=17,Z.t0=Z.catch(6),e.e(Z.t0);case 20:return Z.prev=20,e.f(),Z.finish(20);case 23:Z.next=26;break;case 25:C.attrs.Type==="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme"&&(i=C.attrs.Target);case 26:return Z.next=28,Gt(I,"ppt/"+i);case 28:if(l=Z.sent,n=[],!(a=U(l,["a:theme","a:themeElements","a:clrScheme"]))){Z.next=46;break}d=Object.keys(a),o=0,c=d;case 34:if(!(o<c.length)){Z.next=46;break}if((r=c[o]).startsWith("a:")){Z.next=38;break}return Z.abrupt("continue",43);case 38:h=a[r],b=U(h,["a:srgbClr","attrs","val"]),u=U(h,["a:sysClr","attrs","lastClr"]),(m=b||u)&&n.push("#"+m);case 43:o++,Z.next=34;break;case 46:return Z.abrupt("return",{themeContent:l,themeColors:n});case 47:case"end":return Z.stop()}},t,null,[[6,17,20,23]])})),GD.apply(this,arguments)}function bbg(t){return wD.apply(this,arguments)}function wD(){return wD=RC(rI.mark(function t(I){var g,C,i,e,A,s,l,n,a,d,o,c,r,h,b,u,m,Z;return rI.wrap(function(p){for(;;)switch(p.prev=p.next){case 0:return p.next=2,Gt(I,"ppt/presentation.xml");case 2:return g=p.sent,p.next=5,Gt(I,"ppt/_rels/presentation.xml.rels");case 5:if(C=p.sent,g&&C){p.next=8;break}return p.abrupt("return",[]);case 8:i=U(g,["p:presentation","p:sldIdLst","p:sldId"]),e=Array.isArray(i)?i:i?[i]:[],A=U(C,["Relationships","Relationship"]),s=Array.isArray(A)?A:A?[A]:[],l=new Map,n=uC(s),p.prev=14,n.s();case 16:if((a=n.n()).done){p.next=28;break}if(d=a.value,U(d,["attrs","Type"])==="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide"){p.next=21;break}return p.abrupt("continue",26);case 21:if(o=U(d,["attrs","Id"]),c=U(d,["attrs","Target"]),o&&c){p.next=25;break}return p.abrupt("continue",26);case 25:l.set(String(o),String(c));case 26:p.next=16;break;case 28:p.next=33;break;case 30:p.prev=30,p.t0=p.catch(14),n.e(p.t0);case 33:return p.prev=33,n.f(),p.finish(33);case 36:r=[],h=uC(e),p.prev=38,h.s();case 40:if((b=h.n()).done){p.next=51;break}if(u=b.value,m=U(u,["attrs","r:id"])){p.next=45;break}return p.abrupt("continue",49);case 45:if(Z=l.get(String(m))){p.next=48;break}return p.abrupt("continue",49);case 48:Z.startsWith("ppt/")?r.push(Z):Z.startsWith("../")?r.push(Z.replace("../","ppt/")):r.push("ppt/"+Z.replace(/^\//,""));case 49:p.next=40;break;case 51:p.next=56;break;case 53:p.prev=53,p.t1=p.catch(38),h.e(p.t1);case 56:return p.prev=56,h.f(),p.finish(56);case 59:return p.abrupt("return",r);case 60:case"end":return p.stop()}},t,null,[[14,30,33,36],[38,53,56,59]])})),wD.apply(this,arguments)}function ubg(t,I,g,C,i,e){return pD.apply(this,arguments)}function pD(){return pD=RC(rI.mark(function t(I,g,C,i,e,A){var s,l,n,a,d,o,c,r,h,b,u,m,Z,p,Y,R,X,H,S,z,v,K,V,N,B,G,w,W,y,f,D,F,T,Q,P,L,E,J,k,j,q,tg,Cg,x,sg,Ag,O,_,Ig,ng,ag,lg,cg,dg,hg,rg,Wg,Gg,Sg,Kg,kg,yg,Vg,pg,Hg,Jg,zg,aI,BI,Ug,lI,oI,Eg,LI,fI,tI,WI,QI,nI,kI=arguments;return rI.wrap(function(Bg){for(;;)switch(Bg.prev=Bg.next){case 0:return s=kI.length>6&&kI[6]!==void 0?kI[6]:{},l=g.replace("slides/slide","slides/_rels/slide")+".rels",Bg.next=4,Gt(I,l);case 4:n=Bg.sent,(a=n.Relationships.Relationship).constructor!==Array&&(a=[a]),d="",o="",c="",r="",h=[],b={},u={},m={},Z={},p={},Y=uC(a),Bg.prev=18,Y.s();case 20:if((R=Y.n()).done){Bg.next=37;break}X=R.value,Bg.t0=X.attrs.Type,Bg.next=Bg.t0==="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout"?25:Bg.t0==="http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesSlide"?28:Bg.t0==="http://schemas.microsoft.com/office/2007/relationships/diagramDrawing"?31:(Bg.t0==="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"||Bg.t0==="http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart"||Bg.t0,34);break;case 25:return o=X.attrs.Target.replace("../","ppt/"),b[X.attrs.Id]={type:X.attrs.Type.replace("http://schemas.openxmlformats.org/officeDocument/2006/relationships/",""),target:X.attrs.Target.replace("../","ppt/")},Bg.abrupt("break",35);case 28:return d=X.attrs.Target.replace("../","ppt/"),b[X.attrs.Id]={type:X.attrs.Type.replace("http://schemas.openxmlformats.org/officeDocument/2006/relationships/",""),target:X.attrs.Target.replace("../","ppt/")},Bg.abrupt("break",35);case 31:return h.push(X.attrs.Target.replace("../","ppt/")),b[X.attrs.Id]={type:"diagramDrawing",target:X.attrs.Target.replace("../","ppt/")},Bg.abrupt("break",35);case 34:b[X.attrs.Id]={type:X.attrs.Type.replace("http://schemas.openxmlformats.org/officeDocument/2006/relationships/",""),target:X.attrs.Target.replace("../","ppt/")};case 35:Bg.next=20;break;case 37:Bg.next=42;break;case 39:Bg.prev=39,Bg.t1=Bg.catch(18),Y.e(Bg.t1);case 42:return Bg.prev=42,Y.f(),Bg.finish(42);case 45:return H=s&&s.trace?[]:null,(S=!!H)&&H.push({step:"slide/rels",data:{slideNo:A,sldFileName:g,slideRels:l,noteFilename:d,layoutFilename:o}}),Bg.next=50,Gt(I,d);case 50:return z=Bg.sent,v=mbg(z),Bg.next=54,Gt(I,o);case 54:return K=Bg.sent,Bg.next=57,dq(K);case 57:return V=Bg.sent,N=o.replace("slideLayouts/slideLayout","slideLayouts/_rels/slideLayout")+".rels",Bg.next=61,Gt(I,N);case 61:B=Bg.sent,(a=B.Relationships.Relationship).constructor!==Array&&(a=[a]),G=uC(a),Bg.prev=65,G.s();case 67:if((w=G.n()).done){Bg.next=77;break}W=w.value,Bg.t2=W.attrs.Type,Bg.next=Bg.t2==="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster"?72:74;break;case 72:return c=W.attrs.Target.replace("../","ppt/"),Bg.abrupt("break",75);case 74:u[W.attrs.Id]={type:W.attrs.Type.replace("http://schemas.openxmlformats.org/officeDocument/2006/relationships/",""),target:W.attrs.Target.replace("../","ppt/")};case 75:Bg.next=67;break;case 77:Bg.next=82;break;case 79:Bg.prev=79,Bg.t3=Bg.catch(65),G.e(Bg.t3);case 82:return Bg.prev=82,G.f(),Bg.finish(82);case 85:return S&&H.push({step:"slideLayout/rels",data:{slideLayout:o,slideLayoutRels:N,slideMaster:c}}),Bg.next=88,Gt(I,c);case 88:return y=Bg.sent,f=U(y,["p:sldMaster","p:txStyles"]),D=dq(y),F=c.replace("slideMasters/slideMaster","slideMasters/_rels/slideMaster")+".rels",Bg.next=94,Gt(I,F);case 94:T=Bg.sent,(a=T.Relationships.Relationship).constructor!==Array&&(a=[a]),Q=uC(a),Bg.prev=98,Q.s();case 100:if((P=Q.n()).done){Bg.next=110;break}L=P.value,Bg.t4=L.attrs.Type,Bg.next=Bg.t4==="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme"?105:107;break;case 105:return r=L.attrs.Target.replace("../","ppt/"),Bg.abrupt("break",108);case 107:m[L.attrs.Id]={type:L.attrs.Type.replace("http://schemas.openxmlformats.org/officeDocument/2006/relationships/",""),target:L.attrs.Target.replace("../","ppt/")};case 108:Bg.next=100;break;case 110:Bg.next=115;break;case 112:Bg.prev=112,Bg.t5=Bg.catch(98),Q.e(Bg.t5);case 115:return Bg.prev=115,Q.f(),Bg.finish(115);case 118:if(S&&H.push({step:"slideMaster/rels",data:{slideMaster:c,slideMasterRels:F,themeFilename:r}}),E=C,!r){Bg.next=131;break}return Bg.next=123,Gt(I,r);case 123:return(J=Bg.sent)&&(E=J),k=r.split("/").pop(),j=r.replace(k,"_rels/"+k)+".rels",Bg.next=129,Gt(I,j);case 129:if((q=Bg.sent)&&(a=q.Relationships.Relationship)){a.constructor!==Array&&(a=[a]),tg=uC(a);try{for(tg.s();!(Cg=tg.n()).done;)x=Cg.value,Z[x.attrs.Id]={type:x.attrs.Type.replace("http://schemas.openxmlformats.org/officeDocument/2006/relationships/",""),target:x.attrs.Target.replace("../","ppt/")}}catch(hI){tg.e(hI)}finally{tg.f()}}case 131:if(sg={},Ag={},!h.length){Bg.next=162;break}O=uC(h),Bg.prev=135,O.s();case 137:if((_=O.n()).done){Bg.next=154;break}return Ig=_.value,ng=Ig.split("/").pop(),ag=Ig.replace(ng,"_rels/"+ng)+".rels",Bg.next=143,Gt(I,Ig);case 143:return(lg=Bg.sent)&&(cg=JSON.stringify(lg).replace(/dsp:/g,"p:"),lg=JSON.parse(cg)),sg[Ig]=lg,dg={},Bg.next=149,Gt(I,ag);case 149:if(hg=Bg.sent){(a=hg.Relationships.Relationship).constructor!==Array&&(a=[a]),rg=uC(a);try{for(rg.s();!(Wg=rg.n()).done;)Gg=Wg.value,dg[Gg.attrs.Id]={type:Gg.attrs.Type.replace("http://schemas.openxmlformats.org/officeDocument/2006/relationships/",""),target:Gg.attrs.Target.replace("../","ppt/")}}catch(hI){rg.e(hI)}finally{rg.f()}}Ag[Ig]=dg;case 152:Bg.next=137;break;case 154:Bg.next=159;break;case 156:Bg.prev=156,Bg.t6=Bg.catch(135),O.e(Bg.t6);case 159:return Bg.prev=159,O.f(),Bg.finish(159);case 162:if(Sg=h.length?sg[h[0]]:null,h.length&&(Kg=h[0],kg=Ag[Kg]))for(yg in kg)p[yg]=kg[yg];return Bg.next=166,Gt(I,"ppt/tableStyles.xml");case 166:return Vg=Bg.sent,Bg.next=169,Gt(I,g);case 169:return pg=Bg.sent,Hg=pg["p:sld"]["p:cSld"]["p:spTree"],Jg=U(pg,["p:sld","attrs"]),zg=U(Jg,["showPh"]),aI={zip:I,slideLayoutContent:K,slideLayoutTables:V,slideMasterContent:y,slideMasterTables:D,slideContent:pg,tableStyles:Vg,slideResObj:b,slideMasterTextStyles:f,layoutResObj:u,masterResObj:m,themeContent:E,themeResObj:Z,digramFileContent:Sg,diagramResObj:p,diagramDrawingTargets:h,diagramDrawingContents:sg,diagramResObjByTarget:Ag,diagramDrawingCursor:0,defaultTextStyle:i,headerFooter:e,slideNo:A,trace:H},Bg.next=176,Zbg(aI);case 176:return BI=Bg.sent,Bg.next=179,v0g(aI);case 179:Ug=Bg.sent,lI=[],Bg.t7=rI.keys(Hg);case 182:if((Bg.t8=Bg.t7()).done){Bg.next=213;break}oI=Bg.t8.value,Hg[oI].constructor!==Array&&(Hg[oI]=[Hg[oI]]),Eg=uC(Hg[oI]),Bg.prev=186,Eg.s();case 188:if((LI=Eg.n()).done){Bg.next=203;break}if(fI=LI.value,zg!=="0"){Bg.next=194;break}if(!(U(fI,["p:nvSpPr","p:nvPr","p:ph"])||U(fI,["p:nvPicPr","p:nvPr","p:ph"])||U(fI,["p:nvGraphicFramePr","p:nvPr","p:ph"]))){Bg.next=194;break}return Bg.abrupt("continue",201);case 194:if(!Htg(ftg(fI))){Bg.next=197;break}return Bg.abrupt("continue",201);case 197:return Bg.next=199,vl(oI,fI,Hg,aI,"slide");case 199:(tI=Bg.sent)&&lI.push(tI);case 201:Bg.next=188;break;case 203:Bg.next=208;break;case 205:Bg.prev=205,Bg.t9=Bg.catch(186),Eg.e(Bg.t9);case 208:return Bg.prev=208,Eg.f(),Bg.finish(208);case 211:Bg.next=182;break;case 213:return u0(lI),u0(BI),(WI=pX(pg,"p:sld"))||(WI=pX(K,"p:sldLayout")),WI||(WI=pX(y,"p:sldMaster")),QI=sbg(WI),nI={fill:Ug,elements:lI,layoutElements:BI,note:v,transition:QI},S&&H.length&&(nI.trace=H),Bg.abrupt("return",nI);case 222:case"end":return Bg.stop()}},t,null,[[18,39,42,45],[65,79,82,85],[98,112,115,118],[135,156,159,162],[186,205,208,211]])})),pD.apply(this,arguments)}function mbg(t){var I="",g=U(t,["p:notes","p:cSld","p:spTree","p:sp"]);if(!g)return"";g.constructor!==Array&&(g=[g]);var C,i=uC(g);try{for(i.s();!(C=i.n()).done;){var e=U(C.value,["p:txBody","a:p","a:r"]);if(e){e.constructor!==Array&&(e=[e]);var A,s=uC(e);try{for(s.s();!(A=s.n()).done;){var l=U(A.value,["a:t"]);l&&typeof l=="string"&&(I+=l)}}catch(n){s.e(n)}finally{s.f()}}}}catch(n){i.e(n)}finally{i.f()}return I}function Zbg(t){return BD.apply(this,arguments)}function BD(){return BD=RC(rI.mark(function t(I){var g,C,i,e,A,s,l,n,a,d,o,c,r,h,b,u,m,Z,p,Y,R,X,H,S,z,v,K,V,N,B,G,w,W,y,f,D,F,T,Q,P,L,E,J,k,j,q,tg,Cg,x,sg,Ag,O,_,Ig,ng,ag,lg,cg,dg,hg;return rI.wrap(function(rg){for(;;)switch(rg.prev=rg.next){case 0:if(g=[],C=I.slideLayoutContent,i=I.slideMasterContent,e=I.slideContent,A=U(C,["p:sldLayout","p:cSld","p:spTree"]),s=U(i,["p:sldMaster","p:cSld","p:spTree"]),l=new Set,n=U(e,["p:sld","p:cSld","p:spTree"]),a=U(e,["p:sld","attrs"]),d=U(a,["showMasterSp"]),o=U(a,["showMasterPh"]),c=U(a,["showPh"]),kl(I,"layout/start",{slideNo:I&&I.slideNo,slideShowPh:c,slideShowMasterSp:d,slideShowMasterPh:o}),r=function(Wg,Gg){var Sg=Wg||"",Kg=Gg||"";(Sg||Kg)&&(l.add("".concat(Sg,"|").concat(Kg)),Sg&&l.add("".concat(Sg,"|")),Kg&&l.add("|".concat(Kg)))},h=function(Wg){var Gg=U(Wg,["p:txBody"]);if(!Gg)return!1;var Sg,Kg=U(Gg,["a:p"]),kg=uC(Array.isArray(Kg)?Kg:Kg?[Kg]:[]);try{for(kg.s();!(Sg=kg.n()).done;){var yg,Vg=Sg.value,pg=U(Vg,["a:r"]),Hg=uC(Array.isArray(pg)?pg:pg?[pg]:[]);try{for(Hg.s();!(yg=Hg.n()).done;){var Jg=U(yg.value,["a:t"]);if(typeof Jg=="string"&&Jg.trim()!=="")return!0}}catch(lI){Hg.e(lI)}finally{Hg.f()}var zg,aI=U(Vg,["a:fld"]),BI=uC(Array.isArray(aI)?aI:aI?[aI]:[]);try{for(BI.s();!(zg=BI.n()).done;){var Ug=U(zg.value,["a:t"]);if(typeof Ug=="string"&&Ug.trim()!=="")return!0}}catch(lI){BI.e(lI)}finally{BI.f()}}}catch(lI){kg.e(lI)}finally{kg.f()}return!1},b=function(Wg,Gg){if(!Gg||!Gg.type)return!1;var Sg=String(Gg.type);if(!new Set(["ftr"]).has(Sg))return!1;var Kg=U(I,["slideContent","p:sld","p:hdrFtr","attrs"]),kg=U(Kg,[Sg]),yg=kg!==void 0?function(pg){if(pg==null)return!1;var Hg=String(pg).toLowerCase();return Hg==="1"||Hg==="true"||Hg==="on"}(kg):void 0,Vg=I&&I.headerFooter&&I.headerFooter[Sg]!==void 0?!!I.headerFooter[Sg]:void 0;return!!(yg!==void 0?yg:Vg===void 0||Vg)&&Sg==="ftr"&&h(Wg)},u=function(Wg){return!!(U(Wg,["p:nvSpPr","p:nvPr","p:ph"])||U(Wg,["p:nvPicPr","p:nvPr","p:ph"])||U(Wg,["p:nvGraphicFramePr","p:nvPr","p:ph"]))},m=function(Wg){var Gg=U(Wg,["p:nvSpPr","p:nvPr","p:ph"])||U(Wg,["p:nvPicPr","p:nvPr","p:ph"])||U(Wg,["p:nvGraphicFramePr","p:nvPr","p:ph"]);if(!Gg)return null;var Sg=U(Gg,["attrs","type"]),Kg=U(Gg,["attrs","idx"]);return Sg||Kg?{type:Sg,idx:Kg}:null},Z=function Wg(Gg,Sg){if(Sg){var Kg=m(Sg);if(Kg&&r(Kg.type,Kg.idx),Gg!=="p:grpSp"){if(Gg==="mc:AlternateContent"){var kg=U(Sg,["mc:Fallback"]),yg=kg&&(kg["p:grpSp"]||kg);if(yg)if(yg["p:grpSpPr"])Wg("p:grpSp",yg);else for(var Vg in yg){var pg=yg[Vg];if(Array.isArray(pg)){var Hg,Jg=uC(pg);try{for(Jg.s();!(Hg=Jg.n()).done;)Wg(Vg,Hg.value)}catch(lI){Jg.e(lI)}finally{Jg.f()}}else Wg(Vg,pg)}}}else for(var zg in Sg)if(zg!=="p:nvGrpSpPr"&&zg!=="p:grpSpPr"){var aI=Sg[zg];if(Array.isArray(aI)){var BI,Ug=uC(aI);try{for(Ug.s();!(BI=Ug.n()).done;)Wg(zg,BI.value)}catch(lI){Ug.e(lI)}finally{Ug.f()}}else Wg(zg,aI)}}},p=function(Wg){if(Wg)for(var Gg in Wg){var Sg=Wg[Gg];if(Array.isArray(Sg)){var Kg,kg=uC(Sg);try{for(kg.s();!(Kg=kg.n()).done;){var yg=Kg.value;Z(Gg,yg)}}catch(Vg){kg.e(Vg)}finally{kg.f()}}else Z(Gg,Sg)}},Y=function(Wg,Gg){var Sg=Wg||"",Kg=Gg||"";return!!l.has("".concat(Sg,"|").concat(Kg))||!(!Sg||!l.has("".concat(Sg,"|")))||!(!Kg||!l.has("|".concat(Kg)))},R=function Wg(Gg){if(!Gg||Y(Gg.placeholderType,Gg.placeholderIdx))return null;if(Array.isArray(Gg.elements)){var Sg,Kg=[],kg=uC(Gg.elements);try{for(kg.s();!(Sg=kg.n()).done;){var yg=Wg(Sg.value);yg&&Kg.push(yg)}}catch(Vg){kg.e(Vg)}finally{kg.f()}return Kg.length?_t(_t({},Gg),{},{elements:Kg}):null}return Gg},p(n),kl(I,"layout/overrides/fromSlide",{size:l.size}),X=U(C,["p:sldLayout","attrs","showMasterSp"]),H=U(C,["p:sldLayout","attrs","showMasterPh"]),S=0,z=0,v=0,K=0,!A){rg.next=82;break}rg.t0=rI.keys(A);case 32:if((rg.t1=rg.t0()).done){rg.next=82;break}if(V=rg.t1.value,A[V].constructor!==Array){rg.next=61;break}N=0;case 36:if(!(N<A[V].length)){rg.next=59;break}if(B=A[V][N],c!=="0"||!u(B)){rg.next=41;break}return z+=1,rg.abrupt("continue",56);case 41:if(!(G=m(B))){rg.next=51;break}if(w=G.type||"",W=G.idx||"",!(l.has("".concat(w,"|").concat(W))||w&&l.has("".concat(w,"|"))||W&&l.has("|".concat(W)))){rg.next=48;break}return v+=1,rg.abrupt("continue",56);case 48:if(b(B,G)){rg.next=51;break}return K+=1,rg.abrupt("continue",56);case 51:return rg.next=53,vl(V,B,A,I,"slideLayoutBg");case 53:y=rg.sent,(f=R(y))&&(g.push(f),S+=1);case 56:N++,rg.next=36;break;case 59:rg.next=80;break;case 61:if(D=A[V],c!=="0"||!u(D)){rg.next=65;break}return z+=1,rg.abrupt("continue",32);case 65:if(!(F=m(D))){rg.next=75;break}if(T=F.type||"",Q=F.idx||"",!(l.has("".concat(T,"|").concat(Q))||T&&l.has("".concat(T,"|"))||Q&&l.has("|".concat(Q)))){rg.next=72;break}return v+=1,rg.abrupt("continue",32);case 72:if(b(D,F)){rg.next=75;break}return K+=1,rg.abrupt("continue",32);case 75:return rg.next=77,vl(V,D,A,I,"slideLayoutBg");case 77:P=rg.sent,(L=R(P))&&(g.push(L),S+=1);case 80:rg.next=32;break;case 82:if(kl(I,"layout/layoutElements",{showMasterSp:X,showMasterPh:H,kept:S,skipShowPh:z,skipOverridden:v,skipNotRenderable:K}),p(A),kl(I,"layout/overrides/fromLayout",{size:l.size}),E=0,J=0,k=0,j=0,q=0,!s||X==="0"||d==="0"){rg.next=148;break}rg.t2=rI.keys(s);case 92:if((rg.t3=rg.t2()).done){rg.next=148;break}if(tg=rg.t3.value,s[tg].constructor!==Array){rg.next=124;break}Cg=0;case 96:if(!(Cg<s[tg].length)){rg.next=122;break}if(x=s[tg][Cg],c!=="0"||!u(x)){rg.next=101;break}return J+=1,rg.abrupt("continue",119);case 101:if(!(sg=m(x))){rg.next=114;break}if(H!=="0"&&o!=="0"){rg.next=106;break}return k+=1,rg.abrupt("continue",119);case 106:if(Ag=sg.type||"",O=sg.idx||"",!(l.has("".concat(Ag,"|").concat(O))||Ag&&l.has("".concat(Ag,"|"))||O&&l.has("|".concat(O)))){rg.next=111;break}return j+=1,rg.abrupt("continue",119);case 111:if(b(x,sg)){rg.next=114;break}return q+=1,rg.abrupt("continue",119);case 114:return rg.next=116,vl(tg,x,s,I,"slideMasterBg");case 116:_=rg.sent,(Ig=R(_))&&(g.push(Ig),E+=1);case 119:Cg++,rg.next=96;break;case 122:rg.next=146;break;case 124:if(ng=s[tg],c!=="0"||!u(ng)){rg.next=128;break}return J+=1,rg.abrupt("continue",92);case 128:if(!(ag=m(ng))){rg.next=141;break}if(H!=="0"&&o!=="0"){rg.next=133;break}return k+=1,rg.abrupt("continue",92);case 133:if(lg=ag.type||"",cg=ag.idx||"",!(l.has("".concat(lg,"|").concat(cg))||lg&&l.has("".concat(lg,"|"))||cg&&l.has("|".concat(cg)))){rg.next=138;break}return j+=1,rg.abrupt("continue",92);case 138:if(b(ng,ag)){rg.next=141;break}return q+=1,rg.abrupt("continue",92);case 141:return rg.next=143,vl(tg,ng,s,I,"slideMasterBg");case 143:dg=rg.sent,(hg=R(dg))&&(g.push(hg),E+=1);case 146:rg.next=92;break;case 148:return kl(I,"layout/masterElements",{kept:E,skipShowPh:J,skipShowMasterPh:k,skipOverridden:j,skipNotRenderable:q}),rg.abrupt("return",g);case 150:case"end":return rg.stop()}},t)})),BD.apply(this,arguments)}function u0(t){return t.sort(function(I,g){var C=parseInt(I&&I.order),i=parseInt(g&&g.order);return(isNaN(C)?0:C)-(isNaN(i)?0:i)})}function Ktg(t){return U(t,["p:grpSpPr","a:xfrm"])||U(t,["p:grpSp","p:grpSpPr","a:xfrm"])}function Ftg(t,I,g){if(!t)return t;var C,i,e=_t({},t);return typeof e.left=="number"&&(e.left=Dt(e.left*I)),typeof e.top=="number"&&(e.top=Dt(e.top*g)),typeof e.width=="number"&&(e.width=Dt(e.width*I)),typeof e.height=="number"&&(e.height=Dt(e.height*g)),typeof e.borderWidth=="number"&&(e.borderWidth=Dt(e.borderWidth*Math.max(I,g))),typeof e.path=="string"&&(e.path=function(A,s,l){if(!A||s===1&&l===1)return A;var n=String(A).match(/[a-zA-Z]|[-+]?(?:\d*\.\d+|\d+)(?:e[-+]?\d+)?/g);if(!n)return A;var a,d={M:2,L:2,T:2,H:1,V:1,C:6,S:4,Q:4,A:7,Z:0},o=[],c=null,r=0,h=uC(n);try{for(h.s();!(a=h.n()).done;){var b=a.value;if(/^[a-zA-Z]$/.test(b))c=b,r=0,o.push(b);else{var u=c?c.toUpperCase():"",m=d[u];if(m){var Z=r%m,p=b;if(u!=="A"||Z!==2&&Z!==3&&Z!==4){var Y=parseFloat(b);if(!isNaN(Y)){var R=Y;u==="H"?R=Y*s:u==="V"?R=Y*l:u==="A"?Z===0?R=Y*s:Z===1?R=Y*l:Z===5?R=Y*s:Z===6&&(R=Y*l):R=Z%2==0?Y*s:Y*l,p=String(Dt(R))}}else p=b;o.push(p),r+=1}else o.push(b)}}}catch(X){h.e(X)}finally{h.f()}return o.join(" ")}(e.path,I,g)),e.content&&(e.content=(C=e.content,(i=g)!==1&&C?C.replace(/(font-size:\s*)([\d.]+)pt/g,function(A,s,l){var n=parseFloat(l)*i;return"".concat(s).concat(Dt(n),"pt")}):C)),Array.isArray(e.elements)&&(e.elements=e.elements.map(function(A){return Ftg(A,I,g)})),e}function ktg(t,I,g,C,i){if(!Array.isArray(t)||!C&&!i)return t;var e=Number(I),A=Number(g);if(!Number.isFinite(e)||!Number.isFinite(A))return t;var s,l=uC(t);try{for(l.s();!(s=l.n()).done;){var n=s.value;if(n&&La(n)==="object"){var a=typeof n.width=="number"?n.width:0,d=typeof n.height=="number"?n.height:0;C&&typeof n.left=="number"&&(n.left=Dt(e-n.left-a)),i&&typeof n.top=="number"&&(n.top=Dt(A-n.top-d));var o=typeof n.content=="string"&&ptg(n.content);n.type==="text"||o?(n.isFlipH=!1,n.isFlipV=!1):n.type==="group"&&Array.isArray(n.elements)?(ktg(n.elements,n.width,n.height,C,i),n.isFlipH=!1,n.isFlipV=!1):(C&&(n.isFlipH=!n.isFlipH),i&&(n.isFlipV=!n.isFlipV),(C?1:0)^(i?1:0)&&typeof n.rotate=="number"&&(n.rotate=Dt(-n.rotate)))}}}catch(c){l.e(c)}finally{l.f()}return u0(t),t}function sh(t,I){var g,C=uC(t||[]);try{for(C.s();!(g=C.n()).done;){var i=g.value;if(i){var e=U(i,["attrs",I]);if(e!=null)return e}}}catch(A){C.e(A)}finally{C.f()}}function dq(t){var I=t[Object.keys(t)[0]]["p:cSld"]["p:spTree"],g={},C={},i={},e={},A=function(l){if(l){for(var n in l)if(n!=="p:nvGrpSpPr"&&n!=="p:grpSpPr"){var a=l[n];if(Array.isArray(a)){var d,o=uC(a);try{for(o.s();!(d=o.n()).done;){var c=d.value;s(n,c)}}catch(r){o.e(r)}finally{o.f()}}else s(n,a)}}},s=function l(n,a){if(a)if(n!=="p:sp"&&n!=="p:pic"&&n!=="p:graphicFrame")if(n!=="p:grpSp"){if(n==="mc:AlternateContent"){var d=U(a,["mc:Fallback"]),o=d&&(d["p:grpSp"]||d);o&&(o["p:grpSpPr"]?l("p:grpSp",o):A(o))}}else A(a);else(function(c){var r=function(m){return m&&(m["p:nvSpPr"]||m["p:nvPicPr"]||m["p:nvGraphicFramePr"])||null}(c);if(r){var h=U(r,["p:cNvPr","attrs","id"]),b=U(r,["p:nvPr","p:ph","attrs","idx"]),u=U(r,["p:nvPr","p:ph","attrs","type"]);h&&(g[h]=c),b&&(C[b]=c),u&&(i[u]=c),u&&b&&(e["".concat(u,"|").concat(b)]=c)}})(a)};return A(I),{idTable:g,idxTable:C,typeTable:i,typeIdxTable:e}}function vl(t,I,g,C,i){return WD.apply(this,arguments)}function WD(){return WD=RC(rI.mark(function t(I,g,C,i,e){var A,s,l,n,a=arguments;return rI.wrap(function(d){for(;;)switch(d.prev=d.next){case 0:if(A=a.length>5&&a[5]!==void 0?a[5]:[],!Htg(ftg(g))){d.next=4;break}return d.abrupt("return",null);case 4:if(!Xtg(lbg(g))){d.next=7;break}return d.abrupt("return",null);case 7:d.t0=I,d.next=d.t0==="p:sp"?10:d.t0==="p:cxnSp"?14:d.t0==="p:pic"?18:d.t0==="p:graphicFrame"?22:d.t0==="p:grpSp"?26:d.t0==="mc:AlternateContent"?30:42;break;case 10:return d.next=12,wbg(g,C,i,e,A);case 12:return s=d.sent,d.abrupt("break",42);case 14:return d.next=16,pbg(g,C,i,e,A);case 16:return s=d.sent,d.abrupt("break",42);case 18:return d.next=20,Bbg(g,i,e,A);case 20:return s=d.sent,d.abrupt("break",42);case 22:return d.next=24,Wbg(g,i,e);case 24:return s=d.sent,d.abrupt("break",42);case 26:return d.next=28,YD(g,i,e,A);case 28:return s=d.sent,d.abrupt("break",42);case 30:if(l=U(g,["mc:Fallback"]),!(n=l&&(l["p:grpSp"]||l))||!Ktg(n)){d.next=37;break}return d.next=35,YD(n,i,e,A);case 35:return s=d.sent,d.abrupt("break",42);case 37:if(!U(g,["mc:Choice"])){d.next=41;break}return d.next=40,Gbg(g,i,e);case 40:s=d.sent;case 41:return d.abrupt("break",42);case 42:return d.abrupt("return",s);case 43:case"end":return d.stop()}},t)})),WD.apply(this,arguments)}function Gbg(t,I,g){return yD.apply(this,arguments)}function yD(){return yD=RC(rI.mark(function t(I,g,C){var i,e,A,s,l,n,a,d,o,c,r,h,b,u,m,Z;return rI.wrap(function(p){for(;;)switch(p.prev=p.next){case 0:return i=U(I,["mc:Choice"]),e=U(I,["mc:Fallback"]),A=I.attrs.order,s=U(i,["p:sp","p:spPr","a:xfrm"]),l=w0(s,void 0,void 0),n=l.top,a=l.left,d=p0(s,void 0,void 0),o=d.width,c=d.height,r=Rtg(i)[0],h=ebg(VC(r)),b=U(e,["p:sp","p:spPr","a:blipFill"]),p.next=11,$V(C,b,g);case 11:return u=p.sent,m="",U(i,["p:sp","p:txBody","a:p","a:r"])&&(Z=U(i,["p:sp"]),m=lV(Z["p:txBody"],Z,void 0,void 0,g)),p.abrupt("return",{type:"math",top:n,left:a,width:o,height:c,latex:h,picBase64:u,text:m,order:A});case 15:case"end":return p.stop()}},t)})),yD.apply(this,arguments)}function YD(t,I,g){return ND.apply(this,arguments)}function ND(){return ND=RC(rI.mark(function t(I,g,C){var i,e,A,s,l,n,a,d,o,c,r,h,b,u,m,Z,p,Y,R,X,H,S,z,v,K,V,N,B,G,w,W,y,f,D,F,T,Q,P,L,E,J,k,j,q,tg,Cg,x,sg,Ag,O,_,Ig,ng,ag,lg,cg=arguments;return rI.wrap(function(dg){for(;;)switch(dg.prev=dg.next){case 0:if(i=cg.length>3&&cg[3]!==void 0?cg[3]:[],e=I.attrs.order,A=Ktg(I)){dg.next=5;break}return dg.abrupt("return",null);case 5:s=U(I,["p:nvGrpSpPr","p:cNvPr","attrs","name"])||"",l=U(I,["p:nvGrpSpPr","p:cNvPr","attrs","id"])||"",n=parseInt(A["a:off"].attrs.x)*wg,a=parseInt(A["a:off"].attrs.y)*wg,d=parseInt(A["a:ext"].attrs.cx)*wg,o=parseInt(A["a:ext"].attrs.cy)*wg,c=U(A,["a:chOff","attrs"]),r=U(A,["a:chExt","attrs"]),h=c&&c.x!==void 0?parseInt(c.x)*wg:0,b=c&&c.y!==void 0?parseInt(c.y)*wg:0,u=r&&r.cx!==void 0?parseInt(r.cx)*wg:d,m=r&&r.cy!==void 0?parseInt(r.cy)*wg:o,Z=U(A,["attrs","flipV"])==="1",p=U(A,["attrs","flipH"])==="1",(Y=U(A,["attrs","rot"])||0)&&(Y=b0(Y)),R=u&&!isNaN(u)&&d?d/u:1,X=m&&!isNaN(m)&&o?o/m:1,H=[].concat(r9(i),[I]),S=function(hg){if(!hg)return"";var rg=U(hg,["p:nvGrpSpPr","p:cNvPr","attrs","name"]),Wg=U(hg,["p:nvGrpSpPr","p:cNvPr","attrs","id"]),Gg=U(hg,["attrs","order"]),Sg=[];return rg&&Sg.push(String(rg)),Wg&&Sg.push("#".concat(Wg)),Gg!==void 0&&Sg.push("@".concat(Gg)),Sg.join("")},kl(g,"group/start",{slideNo:g&&g.slideNo,source:C,name:s,id:l,order:e,hierarchy:H.map(S).filter(Boolean),x:n,y:a,cx:d,cy:o,chx:h,chy:b,chcx:u,chcy:m,ws:R,hs:X,isFlipV:Z,isFlipH:p,rotate:Y}),z=[],dg.t0=rI.keys(I);case 28:if((dg.t1=dg.t0()).done){dg.next=58;break}if(v=dg.t1.value,I[v].constructor!==Array){dg.next=52;break}K=uC(I[v]),dg.prev=32,K.s();case 34:if((V=K.n()).done){dg.next=42;break}return N=V.value,dg.next=38,vl(v,N,I,g,C,H);case 38:(B=dg.sent)&&z.push(B);case 40:dg.next=34;break;case 42:dg.next=47;break;case 44:dg.prev=44,dg.t2=dg.catch(32),K.e(dg.t2);case 47:return dg.prev=47,K.f(),dg.finish(47);case 50:dg.next=56;break;case 52:return dg.next=54,vl(v,I[v],I,g,C,H);case 54:(G=dg.sent)&&z.push(G);case 56:dg.next=28;break;case 58:u0(z),w=1/0,W=1/0,y=-1/0,f=-1/0,D=0,F=z;case 64:if(!(D<F.length)){dg.next=77;break}if((T=F[D])&&typeof T.left=="number"&&typeof T.top=="number"){dg.next=68;break}return dg.abrupt("continue",74);case 68:Q=T.left+(typeof T.width=="number"?T.width:0),P=T.top+(typeof T.height=="number"?T.height:0),w=Math.min(w,T.left),W=Math.min(W,T.top),y=Math.max(y,Q),f=Math.max(f,P);case 74:D++,dg.next=64;break;case 77:return L=Number.isFinite(w)&&Number.isFinite(W)&&Number.isFinite(y)&&Number.isFinite(f),E=!(Number.isFinite(d)&&Number.isFinite(o)&&d&&o&&Number.isFinite(u)&&Number.isFinite(m)&&u&&m),J=L?y-w:0,k=L?f-W:0,j=Math.max(1,.002*Math.min(Number.isFinite(d)?d:0,Number.isFinite(o)?o:0)),q=L?Math.abs(J-d)+Math.abs(k-o)+Math.abs(w-n)+Math.abs(W-a):1/0,tg=L?Math.abs(J-u)+Math.abs(k-m)+Math.abs(w-h)+Math.abs(W-b):1/0,Cg=!E&&L&&q+2*j<tg,kl(g,"group/bbox",{slideNo:g&&g.slideNo,source:C,name:s,id:l,order:e,children:z.length,hasBBox:L,bboxMinX:w,bboxMinY:W,bboxMaxX:y,bboxMaxY:f,bboxW:J,bboxH:k,eps:j,isLooseGroup:E,errToSlide:q,errToChild:tg,isChildCoordAbsToSlide:Cg}),x=E?L?w:0:Cg?n:h,sg=E?L?W:0:Cg?a:b,Ag=E||Cg?1:R,O=E||Cg?1:X,_=Dt(E&&L?w:n),Ig=Dt(E&&L?W:a),ng=Dt(E&&L?y-w:d),ag=Dt(E&&L?f-W:o),kl(g,"group/normalize",{slideNo:g&&g.slideNo,source:C,name:s,id:l,order:e,baseX:x,baseY:sg,effWs:Ag,effHs:O,outLeft:_,outTop:Ig,outWidth:ng,outHeight:ag}),u0(lg=z.map(function(hg){return hg&&typeof hg.left=="number"&&typeof hg.top=="number"?Ftg(_t(_t({},hg),{},{left:hg.left-x,top:hg.top-sg}),Ag,O):hg})),ktg(lg,ng,ag,p,Z),kl(g,"group/end",{slideNo:g&&g.slideNo,source:C,name:s,id:l,order:e,normalizedChildren:lg.length}),dg.abrupt("return",{type:"group",top:Ig,left:_,width:ng,height:ag,rotate:Y,order:e,isFlipV:!1,isFlipH:!1,elements:lg});case 100:case"end":return dg.stop()}},t,null,[[32,44,47,50]])})),ND.apply(this,arguments)}function wbg(t,I,g,C){return VD.apply(this,arguments)}function VD(){return VD=RC(rI.mark(function t(I,g,C,i){var e,A,s,l,n,a,d,o,c,r,h=arguments;return rI.wrap(function(b){for(;;)switch(b.prev=b.next){case 0:return e=h.length>4&&h[4]!==void 0?h[4]:[],A=U(I,["p:nvSpPr","p:cNvPr","attrs","name"]),s=U(I,["p:nvSpPr","p:nvPr","p:ph","attrs","idx"]),l=U(I,["p:nvSpPr","p:nvPr","p:ph","attrs","type"]),n=U(I,["attrs","order"]),o=C.slideLayoutTables,c=C.slideMasterTables,l&&s?(r="".concat(l,"|").concat(s),a=o&&o.typeIdxTable&&o.typeIdxTable[r]||o&&o.idxTable&&o.idxTable[s]||o&&o.typeTable&&o.typeTable[l],d=c&&c.typeIdxTable&&c.typeIdxTable[r]||c&&c.idxTable&&c.idxTable[s]||c&&c.typeTable&&c.typeTable[l]):s?(a=o&&o.idxTable?o.idxTable[s]:void 0,d=c&&c.idxTable?c.idxTable[s]:void 0):l&&(a=o&&o.typeTable?o.typeTable[l]:void 0,d=c&&c.typeTable?c.typeTable[l]:void 0),l||U(I,["p:nvSpPr","p:cNvSpPr","attrs","txBox"])==="1"&&(l="text"),l||(l=U(a,["p:nvSpPr","p:nvPr","p:ph","attrs","type"])),l||(l=U(d,["p:nvSpPr","p:nvPr","p:ph","attrs","type"])),l||(l=i==="diagramBg"?"diagram":"obj"),b.next=14,ztg(I,g,a,d,A,l,n,C,i,e);case 14:return b.abrupt("return",b.sent);case 15:case"end":return b.stop()}},t)})),VD.apply(this,arguments)}function pbg(t,I,g,C){return MD.apply(this,arguments)}function MD(){return MD=RC(rI.mark(function t(I,g,C,i){var e,A,s,l,n=arguments;return rI.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:return e=n.length>4&&n[4]!==void 0?n[4]:[],A=I["p:nvCxnSpPr"]["p:cNvPr"].attrs.name,s=I["p:nvCxnSpPr"]["p:nvPr"]["p:ph"]===void 0?void 0:I["p:nvSpPr"]["p:nvPr"]["p:ph"].attrs.type,l=I.attrs.order,a.next=6,ztg(I,g,void 0,void 0,A,s,l,C,i,e);case 6:return a.abrupt("return",a.sent);case 7:case"end":return a.stop()}},t)})),MD.apply(this,arguments)}function ztg(t,I,g,C,i,e,A,s,l){return RD.apply(this,arguments)}function RD(){return RD=RC(rI.mark(function t(I,g,C,i,e,A,s,l,n){var a,d,o,c,r,h,b,u,m,Z,p,Y,R,X,H,S,z,v,K,V,N,B,G,w,W,y,f,D,F,T,Q,P,L,E,J,k,j,q,tg,Cg,x,sg,Ag=arguments;return rI.wrap(function(O){for(;;)switch(O.prev=O.next){case 0:return a=Ag.length>9&&Ag[9]!==void 0?Ag[9]:[],d=U(I,["p:nvSpPr","p:nvPr","p:ph"])||U(I,["p:nvPicPr","p:nvPr","p:ph"])||U(I,["p:nvGraphicFramePr","p:nvPr","p:ph"]),o=d&&U(d,["attrs","type"])||"",c=d&&U(d,["attrs","idx"])||"",h=U(I,r=["p:spPr","a:xfrm"]),b=U(C,r),u=U(i,r),m=U(I,["p:spPr","a:prstGeom","attrs","prst"]),Z=U(I,["p:spPr","a:custGeom"]),p=w0(h,b,u),Y=p.top,R=p.left,X=p0(h,b,u),H=X.width,S=X.height,v=sh(z=[h,b,u],"flipV")==="1",K=sh(z,"flipH")==="1",V=b0(sh(z,"rot")),N=U(I,["p:txXfrm"]),B=V,N&&(G=U(N,["attrs","rot"]))&&(B=V+b0(G)),w="",I["p:txBody"]&&(w=lV(I["p:txBody"],I,C,A,l)),W=Ns(I,A,l,a),y=W.borderColor,f=W.borderWidth,D=W.borderType,F=W.strokeDasharray,O.next=24,Ytg(I,g,void 0,l,n,a);case 24:if(O.t0=O.sent,O.t0){O.next=27;break}O.t0="";case 27:if(T=O.t0,m==="arc"&&(T=""),Q=H,P=S,m==="line"&&(L=Math.max(1,f||0),Q||(Q=L),P||(P=L)),(J=U(I,["p:spPr","a:effectLst","a:outerShdw"]))&&(E=Ntg(J,l)),k=O0g(I,C,i),j=U(I,["p:txBody","a:bodyPr","attrs","vert"])==="eaVert",q=U0g(I,C,i),tg={left:R,top:Y,width:Q,height:P,borderColor:y,borderWidth:f,borderType:D,borderStrokeDasharray:F,fill:T,content:w,isFlipV:v,isFlipH:K,rotate:V,vAlign:k,name:e,order:s,placeholderType:o,placeholderIdx:c},E&&(tg.shadow=E),q&&(tg.autoFit=q),Cg=tg.content&&ptg(tg.content),!Z||A==="diagram"){O.next=47;break}return x=Cbg(Z,Q,P),Cg||(tg.content=""),O.abrupt("return",_t(_t({},tg),{},{type:"shape",shapType:"custom",path:x}));case 47:if(sg="",m&&(sg=Abg(m,Q,P,I)),!m||A!=="obj"&&A&&m==="rect"){O.next=52;break}return Cg||(tg.content=""),O.abrupt("return",_t(_t({},tg),{},{type:"shape",shapType:m,path:sg}));case 52:if(!m||Cg||!T&&!f){O.next=54;break}return O.abrupt("return",_t(_t({},tg),{},{type:"shape",content:"",shapType:m,path:sg}));case 54:return O.abrupt("return",_t(_t({},tg),{},{type:"text",isVertical:j,isFlipV:!1,isFlipH:!1,rotate:B}));case 55:case"end":return O.stop()}},t)})),RD.apply(this,arguments)}function Bbg(t,I,g){return fD.apply(this,arguments)}function fD(){return fD=RC(rI.mark(function t(I,g,C){var i,e,A,s,l,n,a,d,o,c,r,h,b,u,m,Z,p,Y,R,X,H,S,z,v,K,V,N,B,G,w,W,y,f,D,F,T,Q,P,L,E,J,k,j,q,tg,Cg,x,sg,Ag,O,_,Ig=arguments;return rI.wrap(function(ng){for(;;)switch(ng.prev=ng.next){case 0:return i=Ig.length>3&&Ig[3]!==void 0?Ig[3]:[],e=C==="slideMasterBg"?g.masterResObj:C==="slideLayoutBg"?g.layoutResObj:g.slideResObj,A=I.attrs.order,s=U(I,["p:nvPicPr","p:nvPr","p:ph"]),l=s&&U(s,["attrs","type"])||"",n=s&&U(s,["attrs","idx"])||"",a=I["p:blipFill"]["a:blip"].attrs["r:embed"],d=e[a].target,o=GX(d).toLowerCase(),c=g.zip,ng.next=12,c.file(d).async("arraybuffer");case 12:if(r=ng.sent,h=I["p:spPr"]["a:xfrm"],b=U(I,["p:nvPicPr","p:nvPr","p:ph","attrs","idx"]),u=b?U(g.slideLayoutTables,["idxTable",b,"p:spPr","a:xfrm"]):void 0,m=b?U(g.slideMasterTables,["idxTable",b,"p:spPr","a:xfrm"]):void 0,h||(h=u||m),Z=aD(o),p=w0(h,u,m),Y=p.top,R=p.left,X=p0(h,u,m),H=X.width,S=X.height,z="data:".concat(Z,";base64,").concat(wtg(r)),K=sh(v=[h,u,m],"flipV")==="1",V=sh(v,"flipH")==="1",N=b0(sh(v,"rot")),B=U(I,["p:nvPicPr","p:nvPr","a:videoFile"]),F=!1,!B){ng.next=43;break}if(G=B.attrs["r:link"],!J0g(w=e[G].target)){ng.next=36;break}w=sV(w),F=!0,ng.next=43;break;case 36:if((W=GX(w).toLowerCase())!=="mp4"&&W!=="webm"&&W!=="ogg"){ng.next=43;break}return ng.next=40,c.file(w).async("arraybuffer");case 40:f=ng.sent,y=aD(W),D=URL.createObjectURL(new Blob([f],{type:y}));case 43:if(!(T=U(I,["p:nvPicPr","p:nvPr","a:audioFile"]))){ng.next=53;break}if(Q=T.attrs["r:link"],P=e[Q].target,(L=GX(P).toLowerCase())!=="mp3"&&L!=="wav"&&L!=="ogg"){ng.next=53;break}return ng.next=51,c.file(P).async("arraybuffer");case 51:E=ng.sent,J=URL.createObjectURL(new Blob([E]));case 53:if(!B||F){ng.next=55;break}return ng.abrupt("return",{type:"video",top:Y,left:R,width:H,height:S,rotate:N,blob:D,order:A,placeholderType:l,placeholderIdx:n});case 55:if(!B||!F){ng.next=57;break}return ng.abrupt("return",{type:"video",top:Y,left:R,width:H,height:S,rotate:N,src:w,order:A,placeholderType:l,placeholderIdx:n});case 57:if(!T){ng.next=59;break}return ng.abrupt("return",{type:"audio",top:Y,left:R,width:H,height:S,rotate:N,blob:J,order:A,placeholderType:l,placeholderIdx:n});case 59:return(j=U(I,["p:blipFill","a:srcRect","attrs"]))&&(j.t||j.b||j.l||j.r)&&(k={},j.t&&(k.t=j.t/1e3),j.b&&(k.b=j.b/1e3),j.l&&(k.l=j.l/1e3),j.r&&(k.r=j.r/1e3)),q=U(I,["p:spPr","a:prstGeom","attrs","prst"])||"rect",tg=Ns(I,void 0,g,i),Cg=tg.borderColor,x=tg.borderWidth,sg=tg.borderType,Ag=tg.strokeDasharray,O=L0g(I["p:blipFill"]),_={type:"image",top:Y,left:R,width:H,height:S,rotate:N,src:z,isFlipV:K,isFlipH:V,order:A,rect:k,geom:q,borderColor:Cg,borderWidth:x,borderType:sg,borderStrokeDasharray:Ag,placeholderType:l,placeholderIdx:n},O&&(_.filters=O),ng.abrupt("return",_);case 67:case"end":return ng.stop()}},t)})),fD.apply(this,arguments)}function Wbg(t,I,g){return HD.apply(this,arguments)}function HD(){return HD=RC(rI.mark(function t(I,g,C){var i,e,A,s,l,n;return rI.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:i=U(I,["p:nvGraphicFramePr","p:nvPr","p:ph"]),e=i&&U(i,["attrs","type"])||"",A=i&&U(i,["attrs","idx"])||"",s=U(I,["a:graphic","a:graphicData","attrs","uri"]),a.t0=s,a.next=a.t0==="http://schemas.openxmlformats.org/drawingml/2006/table"?7:a.t0==="http://schemas.openxmlformats.org/drawingml/2006/chart"?11:a.t0==="http://schemas.openxmlformats.org/drawingml/2006/diagram"?15:a.t0==="http://schemas.openxmlformats.org/presentationml/2006/ole"?19:26;break;case 7:return a.next=9,ybg(I,g);case 9:return l=a.sent,a.abrupt("break",26);case 11:return a.next=13,Ybg(I,g);case 13:return l=a.sent,a.abrupt("break",26);case 15:return a.next=17,Nbg(I,g);case 17:return l=a.sent,a.abrupt("break",26);case 19:if((n=U(I,["a:graphic","a:graphicData","mc:AlternateContent","mc:Fallback","p:oleObj"]))||(n=U(I,["a:graphic","a:graphicData","p:oleObj"])),!n){a.next=25;break}return a.next=24,YD(n,g,C);case 24:l=a.sent;case 25:return a.abrupt("break",26);case 26:return l&&(e||A)&&(l.placeholderType=e,l.placeholderIdx=A),a.abrupt("return",l);case 28:case"end":return a.stop()}},t)})),HD.apply(this,arguments)}function ybg(t,I){return XD.apply(this,arguments)}function XD(){return XD=RC(rI.mark(function t(I,g){var C,i,e,A,s,l,n,a,d,o,c,r,h,b,u,m,Z,p,Y,R,X,H,S,z,v,K,V,N,B,G,w,W,y,f,D,F,T,Q,P,L,E,J,k,j,q,tg,Cg,x,sg,Ag,O,_,Ig,ng,ag,lg;return rI.wrap(function(cg){for(;;)switch(cg.prev=cg.next){case 0:if(C=I.attrs.order,i=U(I,["a:graphic","a:graphicData","a:tbl"]),e=U(I,["p:xfrm"]),A=w0(e,void 0,void 0),s=A.top,l=A.left,n=p0(e,void 0,void 0),a=n.width,d=n.height,o=U(I,["a:graphic","a:graphicData","a:tbl","a:tblPr"]),(c=U(I,["a:graphic","a:graphicData","a:tbl","a:tblGrid","a:gridCol"])).constructor!==Array&&(c=[c]),r=[],c){h=uC(c);try{for(h.s();!(b=h.n()).done;)u=b.value,m=U(u,["attrs","w"])||0,Z=parseInt(m)*wg,r.push(Z)}catch(dg){h.e(dg)}finally{h.f()}}if(p=o.attrs?o.attrs.firstRow:void 0,Y=o.attrs?o.attrs.firstCol:void 0,R=o.attrs?o.attrs.lastRow:void 0,X=o.attrs?o.attrs.lastCol:void 0,H=o.attrs?o.attrs.bandRow:void 0,S=o.attrs?o.attrs.bandCol:void 0,z={isFrstRowAttr:p&&p==="1"?1:0,isFrstColAttr:Y&&Y==="1"?1:0,isLstRowAttr:R&&R==="1"?1:0,isLstColAttr:X&&X==="1"?1:0,isBandRowAttr:H&&H==="1"?1:0,isBandColAttr:S&&S==="1"?1:0},(K=o["a:tableStyleId"])&&(V=g.tableStyles["a:tblStyleLst"]["a:tblStyle"]))if(V.constructor===Array)for(N=0;N<V.length;N++)V[N].attrs.styleId===K&&(v=V[N]);else V.attrs.styleId===K&&(v=V);v&&(v.tblStylAttrObj=z),B={},G=U(v,["a:wholeTbl","a:tcStyle"]),(w=U(G,["a:tcBdr"]))&&(B=tbg(w,g)),W="",(y=U(v,["a:tblBg","a:fillRef"]))&&(W=IC(y,void 0,void 0,g)),y===void 0&&(y=U(v,["a:wholeTbl","a:tcStyle","a:fill","a:solidFill"]),W=IC(y,void 0,void 0,g)),(f=i["a:tr"]).constructor!==Array&&(f=[f]),D=[],F=[],T=0;case 33:if(!(T<f.length)){cg.next=88;break}if(Q=f[T],P=U(f[T],["attrs","h"])||0,L=parseInt(P)*wg,F.push(L),E=ibg(f,T,z,v,g),J=E.fillColor,k=E.fontColor,j=E.fontBold,q=Q["a:tc"],tg=[],q.constructor!==Array){cg.next=67;break}Cg=0;case 43:if(!(Cg<q.length)){cg.next=65;break}return x=q[Cg],sg=void 0,Cg===0&&z.isFrstColAttr===1?(sg="a:firstCol",z.isLstRowAttr===1&&T===f.length-1&&U(v,["a:seCell"])?sg="a:seCell":z.isFrstRowAttr===1&&T===0&&U(v,["a:neCell"])&&(sg="a:neCell")):!(Cg>0&&z.isBandColAttr===1)||z.isFrstColAttr===1&&T===0||z.isLstRowAttr===1&&T===f.length-1||Cg===q.length-1||Cg%2!=0&&(U(v,["a:band2V"])===void 0?U(v,["a:band1V"])&&(sg="a:band2V"):sg="a:band2V"),Cg===q.length-1&&z.isLstColAttr===1&&(sg="a:lastCol",z.isLstRowAttr===1&&T===f.length-1&&U(v,["a:swCell"])?sg="a:swCell":z.isFrstRowAttr===1&&T===0&&U(v,["a:nwCell"])&&(sg="a:nwCell")),Ag=lV(x["a:txBody"],x,void 0,void 0,g),cg.next=51,Aq(x,v,sg,g);case 51:O=cg.sent,_={text:Ag},O.rowSpan&&(_.rowSpan=O.rowSpan),O.colSpan&&(_.colSpan=O.colSpan),O.vMerge&&(_.vMerge=O.vMerge),O.hMerge&&(_.hMerge=O.hMerge),(O.fontBold||j)&&(_.fontBold=O.fontBold||j),(O.fontColor||k)&&(_.fontColor=O.fontColor||k),(O.fillColor||J||W)&&(_.fillColor=O.fillColor||J||W),O.borders&&(_.borders=O.borders),tg.push(_);case 62:Cg++,cg.next=43;break;case 65:cg.next=84;break;case 67:return Ig=void 0,z.isFrstColAttr===1&&z.isLstRowAttr!==1?Ig="a:firstCol":z.isBandColAttr===1&&z.isLstRowAttr!==1&&(U(v,["a:band2V"])||U(v,["a:band1V"]))&&(Ig="a:band2V"),z.isLstColAttr===1&&z.isLstRowAttr!==1&&(Ig="a:lastCol"),ng=lV(q["a:txBody"],q,void 0,void 0,g),cg.next=73,Aq(q,v,Ig,g);case 73:ag=cg.sent,lg={text:ng},ag.rowSpan&&(lg.rowSpan=ag.rowSpan),ag.colSpan&&(lg.colSpan=ag.colSpan),ag.vMerge&&(lg.vMerge=ag.vMerge),ag.hMerge&&(lg.hMerge=ag.hMerge),(ag.fontBold||j)&&(lg.fontBold=ag.fontBold||j),(ag.fontColor||k)&&(lg.fontColor=ag.fontColor||k),(ag.fillColor||J||W)&&(lg.fillColor=ag.fillColor||J||W),ag.borders&&(lg.borders=ag.borders),tg.push(lg);case 84:D.push(tg);case 85:T++,cg.next=33;break;case 88:return cg.abrupt("return",{type:"table",top:s,left:l,width:a,height:d,data:D,order:C,borders:B,rowHeights:F,colWidths:r});case 89:case"end":return cg.stop()}},t)})),XD.apply(this,arguments)}function Ybg(t,I){return SD.apply(this,arguments)}function SD(){return SD=RC(rI.mark(function t(I,g){var C,i,e,A,s,l,n,a,d,o,c,r,h,b;return rI.wrap(function(u){for(;;)switch(u.prev=u.next){case 0:if(C=I.attrs.order,i=U(I,["p:xfrm"]),e=w0(i,void 0,void 0),A=e.top,s=e.left,l=p0(i,void 0,void 0),n=l.width,a=l.height,d=I["a:graphic"]["a:graphicData"]["c:chart"].attrs["r:id"],(o=U(g.slideResObj,[d,"target"]))||(o=U(g.layoutResObj,[d,"target"])),o||(o=U(g.masterResObj,[d,"target"])),o){u.next=10;break}return u.abrupt("return",{});case 10:return u.next=12,Gt(g.zip,o);case 12:if(c=u.sent,r=U(c,["c:chartSpace","c:chart","c:plotArea"]),h=j0g(r,g)){u.next=17;break}return u.abrupt("return",{});case 17:return b={type:"chart",top:A,left:s,width:n,height:a,data:h.data,colors:h.colors,chartType:h.type,order:C},h.marker!==void 0&&(b.marker=h.marker),h.barDir!==void 0&&(b.barDir=h.barDir),h.holeSize!==void 0&&(b.holeSize=h.holeSize),h.grouping!==void 0&&(b.grouping=h.grouping),h.style!==void 0&&(b.style=h.style),u.abrupt("return",b);case 24:case"end":return u.stop()}},t)})),SD.apply(this,arguments)}function Nbg(t,I){return DD.apply(this,arguments)}function DD(){return DD=RC(rI.mark(function t(I,g){var C,i,e,A,s,l,n,a,d,o,c,r,h,b,u,m,Z,p,Y,R,X,H,S,z,v,K,V;return rI.wrap(function(N){for(;;)switch(N.prev=N.next){case 0:if(C=I.attrs.order,i=U(I,["p:xfrm"]),e=w0(i,void 0,void 0),A=e.left,s=e.top,l=p0(i,void 0,void 0),n=l.width,a=l.height,!(d=U(I,["a:graphic","a:graphicData","dgm:relIds","attrs"])||U(I,["a:graphic","a:graphicData","p:relIds","attrs"]))){N.next=19;break}c=0,r=Object.keys(d);case 7:if(!(c<r.length)){N.next=19;break}if((h=r[c]).startsWith("r:")){N.next=11;break}return N.abrupt("continue",16);case 11:if(b=d[h],!(u=U(g,["slideResObj",b,"target"]))||typeof u!="string"||!/\/diagrams\/drawing/i.test(u)){N.next=16;break}return o=u,N.abrupt("break",19);case 16:c++,N.next=7;break;case 19:if(o||(m=g.diagramDrawingCursor||0,o=g.diagramDrawingTargets&&g.diagramDrawingTargets[m],g.diagramDrawingCursor=m+1),Z=g.diagramResObj,p=g.digramFileContent,o&&(g.diagramResObj=U(g,["diagramResObjByTarget",o])||Z,g.digramFileContent=U(g,["diagramDrawingContents",o])||p),Y=[],!(R=U(g.digramFileContent,["p:drawing","p:spTree"]))){N.next=60;break}N.t0=rI.keys(R);case 27:if((N.t1=N.t0()).done){N.next=60;break}if((X=N.t1.value)!=="p:nvGrpSpPr"&&X!=="p:grpSpPr"){N.next=31;break}return N.abrupt("continue",27);case 31:if(H=R[X],!Array.isArray(H)){N.next=54;break}S=uC(H),N.prev=34,S.s();case 36:if((z=S.n()).done){N.next=44;break}return v=z.value,N.next=40,vl(X,v,R,g,"diagramBg");case 40:(K=N.sent)&&Y.push(K);case 42:N.next=36;break;case 44:N.next=49;break;case 46:N.prev=46,N.t2=N.catch(34),S.e(N.t2);case 49:return N.prev=49,S.f(),N.finish(49);case 52:N.next=58;break;case 54:return N.next=56,vl(X,H,R,g,"diagramBg");case 56:(V=N.sent)&&Y.push(V);case 58:N.next=27;break;case 60:return u0(Y),g.diagramResObj=Z,g.digramFileContent=p,N.abrupt("return",{type:"diagram",left:A,top:s,width:n,height:a,elements:Y,order:C});case 64:case"end":return N.stop()}},t,null,[[34,46,49,52]])})),DD.apply(this,arguments)}async function Vbg(t,I){const g=await cbg(t),C=gg.createApp(Zrg,{pptxJson:g});return C.mount(I),{$el:I,$destroy(){C.unmount()}}}var BX={exports:{}};/*! ExcelJS 19-10-2023 */var rq;function Mbg(){return rq||(rq=1,function(t,I){(function(g){t.exports=g()})(function(){return function g(C,i,e){function A(n,a){if(!i[n]){if(!C[n]){var d=typeof Ka=="function"&&Ka;if(!a&&d)return d(n,!0);if(s)return s(n,!0);var o=new Error("Cannot find module '"+n+"'");throw o.code="MODULE_NOT_FOUND",o}var c=i[n]={exports:{}};C[n][0].call(c.exports,function(r){return A(C[n][1][r]||r)},c,c.exports,g,C,i,e)}return i[n].exports}for(var s=typeof Ka=="function"&&Ka,l=0;l<e.length;l++)A(e[l]);return A}({1:[function(g,C,i){const e=g("fs"),A=g("fast-csv"),s=g("dayjs/plugin/customParseFormat"),l=g("dayjs/plugin/utc"),n=g("dayjs").extend(s).extend(l),a=g("../utils/stream-buf"),{fs:{exists:d}}=g("../utils/utils"),o={true:!0,false:!1,"#N/A":{error:"#N/A"},"#REF!":{error:"#REF!"},"#NAME?":{error:"#NAME?"},"#DIV/0!":{error:"#DIV/0!"},"#NULL!":{error:"#NULL!"},"#VALUE!":{error:"#VALUE!"},"#NUM!":{error:"#NUM!"}};C.exports=class{constructor(c){this.workbook=c,this.worksheet=null}async readFile(c,r){if(r=r||{},!await d(c))throw new Error("File not found: "+c);const h=e.createReadStream(c),b=await this.read(h,r);return h.close(),b}read(c,r){return r=r||{},new Promise((h,b)=>{const u=this.workbook.addWorksheet(r.sheetName),m=r.dateFormats||["YYYY-MM-DD[T]HH:mm:ssZ","YYYY-MM-DD[T]HH:mm:ss","MM-DD-YYYY","YYYY-MM-DD"],Z=r.map||function(Y){if(Y==="")return null;const R=Number(Y);if(!Number.isNaN(R)&&R!==1/0)return R;const X=m.reduce((S,z)=>{if(S)return S;const v=n(Y,z,!0);return v.isValid()?v:null},null);if(X)return new Date(X.valueOf());const H=o[Y];return H!==void 0?H:Y},p=A.parse(r.parserOptions).on("data",Y=>{u.addRow(Y.map(Z))}).on("end",()=>{p.emit("worksheet",u)});p.on("worksheet",h).on("error",b),c.pipe(p)})}createInputStream(){throw new Error("`CSV#createInputStream` is deprecated. You should use `CSV#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md")}write(c,r){return new Promise((h,b)=>{r=r||{};const u=this.workbook.getWorksheet(r.sheetName||r.sheetId),m=A.format(r.formatterOptions);c.on("finish",()=>{h()}),m.on("error",b),m.pipe(c);const{dateFormat:Z,dateUTC:p}=r,Y=r.map||(H=>{if(H){if(H.text||H.hyperlink)return H.hyperlink||H.text||"";if(H.formula||H.result)return H.result||"";if(H instanceof Date)return Z?p?n.utc(H).format(Z):n(H).format(Z):p?n.utc(H).format():n(H).format();if(H.error)return H.error;if(typeof H=="object")return JSON.stringify(H)}return H}),R=r.includeEmptyRows===void 0||r.includeEmptyRows;let X=1;u&&u.eachRow((H,S)=>{if(R)for(;X++<S-1;)m.write([]);const{values:z}=H;z.shift(),m.write(z.map(Y)),X=S}),m.end()})}writeFile(c,r){const h={encoding:(r=r||{}).encoding||"utf8"},b=e.createWriteStream(c,h);return this.write(b,r)}async writeBuffer(c){const r=new a;return await this.write(r,c),r.read()}}},{"../utils/stream-buf":24,"../utils/utils":27,dayjs:391,"dayjs/plugin/customParseFormat":392,"dayjs/plugin/utc":393,"fast-csv":424,fs:216}],2:[function(g,C,i){const e=g("../utils/col-cache");class A{constructor(l,n){let a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0;if(this.worksheet=l,n)if(typeof n=="string"){const d=e.decodeAddress(n);this.nativeCol=d.col+a,this.nativeColOff=0,this.nativeRow=d.row+a,this.nativeRowOff=0}else n.nativeCol!==void 0?(this.nativeCol=n.nativeCol||0,this.nativeColOff=n.nativeColOff||0,this.nativeRow=n.nativeRow||0,this.nativeRowOff=n.nativeRowOff||0):n.col!==void 0?(this.col=n.col+a,this.row=n.row+a):(this.nativeCol=0,this.nativeColOff=0,this.nativeRow=0,this.nativeRowOff=0);else this.nativeCol=0,this.nativeColOff=0,this.nativeRow=0,this.nativeRowOff=0}static asInstance(l){return l instanceof A||l==null?l:new A(l)}get col(){return this.nativeCol+Math.min(this.colWidth-1,this.nativeColOff)/this.colWidth}set col(l){this.nativeCol=Math.floor(l),this.nativeColOff=Math.floor((l-this.nativeCol)*this.colWidth)}get row(){return this.nativeRow+Math.min(this.rowHeight-1,this.nativeRowOff)/this.rowHeight}set row(l){this.nativeRow=Math.floor(l),this.nativeRowOff=Math.floor((l-this.nativeRow)*this.rowHeight)}get colWidth(){return this.worksheet&&this.worksheet.getColumn(this.nativeCol+1)&&this.worksheet.getColumn(this.nativeCol+1).isCustomWidth?Math.floor(1e4*this.worksheet.getColumn(this.nativeCol+1).width):64e4}get rowHeight(){return this.worksheet&&this.worksheet.getRow(this.nativeRow+1)&&this.worksheet.getRow(this.nativeRow+1).height?Math.floor(1e4*this.worksheet.getRow(this.nativeRow+1).height):18e4}get model(){return{nativeCol:this.nativeCol,nativeColOff:this.nativeColOff,nativeRow:this.nativeRow,nativeRowOff:this.nativeRowOff}}set model(l){this.nativeCol=l.nativeCol,this.nativeColOff=l.nativeColOff,this.nativeRow=l.nativeRow,this.nativeRowOff=l.nativeRowOff}}C.exports=A},{"../utils/col-cache":19}],3:[function(g,C,i){const e=g("../utils/col-cache"),A=g("../utils/under-dash"),s=g("./enums"),{slideFormula:l}=g("../utils/shared-formula"),n=g("./note");class a{constructor(c,r,h){if(!c||!r)throw new Error("A Cell needs a Row");this._row=c,this._column=r,e.validateAddress(h),this._address=h,this._value=d.create(a.Types.Null,this),this.style=this._mergeStyle(c.style,r.style,{}),this._mergeCount=0}get worksheet(){return this._row.worksheet}get workbook(){return this._row.worksheet.workbook}destroy(){delete this.style,delete this._value,delete this._row,delete this._column,delete this._address}get numFmt(){return this.style.numFmt}set numFmt(c){this.style.numFmt=c}get font(){return this.style.font}set font(c){this.style.font=c}get alignment(){return this.style.alignment}set alignment(c){this.style.alignment=c}get border(){return this.style.border}set border(c){this.style.border=c}get fill(){return this.style.fill}set fill(c){this.style.fill=c}get protection(){return this.style.protection}set protection(c){this.style.protection=c}_mergeStyle(c,r,h){const b=c&&c.numFmt||r&&r.numFmt;b&&(h.numFmt=b);const u=c&&c.font||r&&r.font;u&&(h.font=u);const m=c&&c.alignment||r&&r.alignment;m&&(h.alignment=m);const Z=c&&c.border||r&&r.border;Z&&(h.border=Z);const p=c&&c.fill||r&&r.fill;p&&(h.fill=p);const Y=c&&c.protection||r&&r.protection;return Y&&(h.protection=Y),h}get address(){return this._address}get row(){return this._row.number}get col(){return this._column.number}get $col$row(){return`$${this._column.letter}$${this.row}`}get type(){return this._value.type}get effectiveType(){return this._value.effectiveType}toCsvString(){return this._value.toCsvString()}addMergeRef(){this._mergeCount++}releaseMergeRef(){this._mergeCount--}get isMerged(){return this._mergeCount>0||this.type===a.Types.Merge}merge(c,r){this._value.release(),this._value=d.create(a.Types.Merge,this,c),r||(this.style=c.style)}unmerge(){this.type===a.Types.Merge&&(this._value.release(),this._value=d.create(a.Types.Null,this),this.style=this._mergeStyle(this._row.style,this._column.style,{}))}isMergedTo(c){return this._value.type===a.Types.Merge&&this._value.isMergedTo(c)}get master(){return this.type===a.Types.Merge?this._value.master:this}get isHyperlink(){return this._value.type===a.Types.Hyperlink}get hyperlink(){return this._value.hyperlink}get value(){return this._value.value}set value(c){this.type!==a.Types.Merge?(this._value.release(),this._value=d.create(d.getType(c),this,c)):this._value.master.value=c}get note(){return this._comment&&this._comment.note}set note(c){this._comment=new n(c)}get text(){return this._value.toString()}get html(){return A.escapeHtml(this.text)}toString(){return this.text}_upgradeToHyperlink(c){this.type===a.Types.String&&(this._value=d.create(a.Types.Hyperlink,this,{text:this._value.value,hyperlink:c}))}get formula(){return this._value.formula}get result(){return this._value.result}get formulaType(){return this._value.formulaType}get fullAddress(){const{worksheet:c}=this._row;return{sheetName:c.name,address:this.address,row:this.row,col:this.col}}get name(){return this.names[0]}set name(c){this.names=[c]}get names(){return this.workbook.definedNames.getNamesEx(this.fullAddress)}set names(c){const{definedNames:r}=this.workbook;r.removeAllNames(this.fullAddress),c.forEach(h=>{r.addEx(this.fullAddress,h)})}addName(c){this.workbook.definedNames.addEx(this.fullAddress,c)}removeName(c){this.workbook.definedNames.removeEx(this.fullAddress,c)}removeAllNames(){this.workbook.definedNames.removeAllNames(this.fullAddress)}get _dataValidations(){return this.worksheet.dataValidations}get dataValidation(){return this._dataValidations.find(this.address)}set dataValidation(c){this._dataValidations.add(this.address,c)}get model(){const{model:c}=this._value;return c.style=this.style,this._comment&&(c.comment=this._comment.model),c}set model(c){if(this._value.release(),this._value=d.create(c.type,this),this._value.model=c,c.comment)switch(c.comment.type){case"note":this._comment=n.fromModel(c.comment)}c.style?this.style=c.style:this.style={}}}a.Types=s.ValueType;const d={getType:o=>o==null?a.Types.Null:o instanceof String||typeof o=="string"?a.Types.String:typeof o=="number"?a.Types.Number:typeof o=="boolean"?a.Types.Boolean:o instanceof Date?a.Types.Date:o.text&&o.hyperlink?a.Types.Hyperlink:o.formula||o.sharedFormula?a.Types.Formula:o.richText?a.Types.RichText:o.sharedString?a.Types.SharedString:o.error?a.Types.Error:a.Types.JSON,types:[{t:a.Types.Null,f:class{constructor(o){this.model={address:o.address,type:a.Types.Null}}get value(){return null}set value(o){}get type(){return a.Types.Null}get effectiveType(){return a.Types.Null}get address(){return this.model.address}set address(o){this.model.address=o}toCsvString(){return""}release(){}toString(){return""}}},{t:a.Types.Number,f:class{constructor(o,c){this.model={address:o.address,type:a.Types.Number,value:c}}get value(){return this.model.value}set value(o){this.model.value=o}get type(){return a.Types.Number}get effectiveType(){return a.Types.Number}get address(){return this.model.address}set address(o){this.model.address=o}toCsvString(){return this.model.value.toString()}release(){}toString(){return this.model.value.toString()}}},{t:a.Types.String,f:class{constructor(o,c){this.model={address:o.address,type:a.Types.String,value:c}}get value(){return this.model.value}set value(o){this.model.value=o}get type(){return a.Types.String}get effectiveType(){return a.Types.String}get address(){return this.model.address}set address(o){this.model.address=o}toCsvString(){return`"${this.model.value.replace(/"/g,'""')}"`}release(){}toString(){return this.model.value}}},{t:a.Types.Date,f:class{constructor(o,c){this.model={address:o.address,type:a.Types.Date,value:c}}get value(){return this.model.value}set value(o){this.model.value=o}get type(){return a.Types.Date}get effectiveType(){return a.Types.Date}get address(){return this.model.address}set address(o){this.model.address=o}toCsvString(){return this.model.value.toISOString()}release(){}toString(){return this.model.value.toString()}}},{t:a.Types.Hyperlink,f:class{constructor(o,c){this.model={address:o.address,type:a.Types.Hyperlink,text:c?c.text:void 0,hyperlink:c?c.hyperlink:void 0},c&&c.tooltip&&(this.model.tooltip=c.tooltip)}get value(){const o={text:this.model.text,hyperlink:this.model.hyperlink};return this.model.tooltip&&(o.tooltip=this.model.tooltip),o}set value(o){this.model={text:o.text,hyperlink:o.hyperlink},o.tooltip&&(this.model.tooltip=o.tooltip)}get text(){return this.model.text}set text(o){this.model.text=o}get hyperlink(){return this.model.hyperlink}set hyperlink(o){this.model.hyperlink=o}get type(){return a.Types.Hyperlink}get effectiveType(){return a.Types.Hyperlink}get address(){return this.model.address}set address(o){this.model.address=o}toCsvString(){return this.model.hyperlink}release(){}toString(){return this.model.text}}},{t:a.Types.Formula,f:class{constructor(o,c){this.cell=o,this.model={address:o.address,type:a.Types.Formula,shareType:c?c.shareType:void 0,ref:c?c.ref:void 0,formula:c?c.formula:void 0,sharedFormula:c?c.sharedFormula:void 0,result:c?c.result:void 0}}_copyModel(o){const c={},r=h=>{const b=o[h];b&&(c[h]=b)};return r("formula"),r("result"),r("ref"),r("shareType"),r("sharedFormula"),c}get value(){return this._copyModel(this.model)}set value(o){this.model=this._copyModel(o)}validate(o){switch(d.getType(o)){case a.Types.Null:case a.Types.String:case a.Types.Number:case a.Types.Date:break;case a.Types.Hyperlink:case a.Types.Formula:default:throw new Error("Cannot process that type of result value")}}get dependencies(){return{ranges:this.formula.match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}:[A-Z]{1,3}\d{1,4}/g),cells:this.formula.replace(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}:[A-Z]{1,3}\d{1,4}/g,"").match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}/g)}}get formula(){return this.model.formula||this._getTranslatedFormula()}set formula(o){this.model.formula=o}get formulaType(){return this.model.formula?s.FormulaType.Master:this.model.sharedFormula?s.FormulaType.Shared:s.FormulaType.None}get result(){return this.model.result}set result(o){this.model.result=o}get type(){return a.Types.Formula}get effectiveType(){const o=this.model.result;return o==null?s.ValueType.Null:o instanceof String||typeof o=="string"?s.ValueType.String:typeof o=="number"?s.ValueType.Number:o instanceof Date?s.ValueType.Date:o.text&&o.hyperlink?s.ValueType.Hyperlink:o.formula?s.ValueType.Formula:s.ValueType.Null}get address(){return this.model.address}set address(o){this.model.address=o}_getTranslatedFormula(){if(!this._translatedFormula&&this.model.sharedFormula){const{worksheet:o}=this.cell,c=o.findCell(this.model.sharedFormula);this._translatedFormula=c&&l(c.formula,c.address,this.model.address)}return this._translatedFormula}toCsvString(){return""+(this.model.result||"")}release(){}toString(){return this.model.result?this.model.result.toString():""}}},{t:a.Types.Merge,f:class{constructor(o,c){this.model={address:o.address,type:a.Types.Merge,master:c?c.address:void 0},this._master=c,c&&c.addMergeRef()}get value(){return this._master.value}set value(o){o instanceof a?(this._master&&this._master.releaseMergeRef(),o.addMergeRef(),this._master=o):this._master.value=o}isMergedTo(o){return o===this._master}get master(){return this._master}get type(){return a.Types.Merge}get effectiveType(){return this._master.effectiveType}get address(){return this.model.address}set address(o){this.model.address=o}toCsvString(){return""}release(){this._master.releaseMergeRef()}toString(){return this.value.toString()}}},{t:a.Types.JSON,f:class{constructor(o,c){this.model={address:o.address,type:a.Types.String,value:JSON.stringify(c),rawValue:c}}get value(){return this.model.rawValue}set value(o){this.model.rawValue=o,this.model.value=JSON.stringify(o)}get type(){return a.Types.String}get effectiveType(){return a.Types.String}get address(){return this.model.address}set address(o){this.model.address=o}toCsvString(){return this.model.value}release(){}toString(){return this.model.value}}},{t:a.Types.SharedString,f:class{constructor(o,c){this.model={address:o.address,type:a.Types.SharedString,value:c}}get value(){return this.model.value}set value(o){this.model.value=o}get type(){return a.Types.SharedString}get effectiveType(){return a.Types.SharedString}get address(){return this.model.address}set address(o){this.model.address=o}toCsvString(){return this.model.value.toString()}release(){}toString(){return this.model.value.toString()}}},{t:a.Types.RichText,f:class{constructor(o,c){this.model={address:o.address,type:a.Types.String,value:c}}get value(){return this.model.value}set value(o){this.model.value=o}toString(){return this.model.value.richText.map(o=>o.text).join("")}get type(){return a.Types.RichText}get effectiveType(){return a.Types.RichText}get address(){return this.model.address}set address(o){this.model.address=o}toCsvString(){return`"${this.text.replace(/"/g,'""')}"`}release(){}}},{t:a.Types.Boolean,f:class{constructor(o,c){this.model={address:o.address,type:a.Types.Boolean,value:c}}get value(){return this.model.value}set value(o){this.model.value=o}get type(){return a.Types.Boolean}get effectiveType(){return a.Types.Boolean}get address(){return this.model.address}set address(o){this.model.address=o}toCsvString(){return this.model.value?1:0}release(){}toString(){return this.model.value.toString()}}},{t:a.Types.Error,f:class{constructor(o,c){this.model={address:o.address,type:a.Types.Error,value:c}}get value(){return this.model.value}set value(o){this.model.value=o}get type(){return a.Types.Error}get effectiveType(){return a.Types.Error}get address(){return this.model.address}set address(o){this.model.address=o}toCsvString(){return this.toString()}release(){}toString(){return this.model.value.error.toString()}}}].reduce((o,c)=>(o[c.t]=c.f,o),[]),create(o,c,r){const h=this.types[o];if(!h)throw new Error("Could not create Value of type "+o);return new h(c,r)}};C.exports=a},{"../utils/col-cache":19,"../utils/shared-formula":23,"../utils/under-dash":26,"./enums":7,"./note":9}],4:[function(g,C,i){const e=g("../utils/under-dash"),A=g("./enums"),s=g("../utils/col-cache");class l{constructor(a,d,o){this._worksheet=a,this._number=d,o!==!1&&(this.defn=o)}get number(){return this._number}get worksheet(){return this._worksheet}get letter(){return s.n2l(this._number)}get isCustomWidth(){return this.width!==void 0&&this.width!==9}get defn(){return{header:this._header,key:this.key,width:this.width,style:this.style,hidden:this.hidden,outlineLevel:this.outlineLevel}}set defn(a){a?(this.key=a.key,this.width=a.width!==void 0?a.width:9,this.outlineLevel=a.outlineLevel,a.style?this.style=a.style:this.style={},this.header=a.header,this._hidden=!!a.hidden):(delete this._header,delete this._key,delete this.width,this.style={},this.outlineLevel=0)}get headers(){return this._header&&this._header instanceof Array?this._header:[this._header]}get header(){return this._header}set header(a){a!==void 0?(this._header=a,this.headers.forEach((d,o)=>{this._worksheet.getCell(o+1,this.number).value=d})):this._header=void 0}get key(){return this._key}set key(a){(this._key&&this._worksheet.getColumnKey(this._key))===this&&this._worksheet.deleteColumnKey(this._key),this._key=a,a&&this._worksheet.setColumnKey(this._key,this)}get hidden(){return!!this._hidden}set hidden(a){this._hidden=a}get outlineLevel(){return this._outlineLevel||0}set outlineLevel(a){this._outlineLevel=a}get collapsed(){return!!(this._outlineLevel&&this._outlineLevel>=this._worksheet.properties.outlineLevelCol)}toString(){return JSON.stringify({key:this.key,width:this.width,headers:this.headers.length?this.headers:void 0})}equivalentTo(a){return this.width===a.width&&this.hidden===a.hidden&&this.outlineLevel===a.outlineLevel&&e.isEqual(this.style,a.style)}get isDefault(){if(this.isCustomWidth||this.hidden||this.outlineLevel)return!1;const a=this.style;return!a||!(a.font||a.numFmt||a.alignment||a.border||a.fill||a.protection)}get headerCount(){return this.headers.length}eachCell(a,d){const o=this.number;d||(d=a,a=null),this._worksheet.eachRow(a,(c,r)=>{d(c.getCell(o),r)})}get values(){const a=[];return this.eachCell((d,o)=>{d&&d.type!==A.ValueType.Null&&(a[o]=d.value)}),a}set values(a){if(!a)return;const d=this.number;let o=0;a.hasOwnProperty("0")&&(o=1),a.forEach((c,r)=>{this._worksheet.getCell(r+o,d).value=c})}_applyStyle(a,d){return this.style[a]=d,this.eachCell(o=>{o[a]=d}),d}get numFmt(){return this.style.numFmt}set numFmt(a){this._applyStyle("numFmt",a)}get font(){return this.style.font}set font(a){this._applyStyle("font",a)}get alignment(){return this.style.alignment}set alignment(a){this._applyStyle("alignment",a)}get protection(){return this.style.protection}set protection(a){this._applyStyle("protection",a)}get border(){return this.style.border}set border(a){this._applyStyle("border",a)}get fill(){return this.style.fill}set fill(a){this._applyStyle("fill",a)}static toModel(a){const d=[];let o=null;return a&&a.forEach((c,r)=>{c.isDefault?o&&(o=null):o&&c.equivalentTo(o)?o.max=r+1:(o={min:r+1,max:r+1,width:c.width!==void 0?c.width:9,style:c.style,isCustomWidth:c.isCustomWidth,hidden:c.hidden,outlineLevel:c.outlineLevel,collapsed:c.collapsed},d.push(o))}),d.length?d:void 0}static fromModel(a,d){const o=[];let c=1,r=0;for(d=(d=d||[]).sort(function(h,b){return h.min-b.min});r<d.length;){const h=d[r++];for(;c<h.min;)o.push(new l(a,c++));for(;c<=h.max;)o.push(new l(a,c++,h))}return o.length?o:null}}C.exports=l},{"../utils/col-cache":19,"../utils/under-dash":26,"./enums":7}],5:[function(g,C,i){C.exports=class{constructor(e){this.model=e||{}}add(e,A){return this.model[e]=A}find(e){return this.model[e]}remove(e){this.model[e]=void 0}}},{}],6:[function(g,C,i){const e=g("../utils/under-dash"),A=g("../utils/col-cache"),s=g("../utils/cell-matrix"),l=g("./range"),n=/[$](\w+)[$](\d+)(:[$](\w+)[$](\d+))?/;C.exports=class{constructor(){this.matrixMap={}}getMatrix(a){return this.matrixMap[a]||(this.matrixMap[a]=new s)}add(a,d){const o=A.decodeEx(a);this.addEx(o,d)}addEx(a,d){const o=this.getMatrix(d);if(a.top)for(let c=a.left;c<=a.right;c++)for(let r=a.top;r<=a.bottom;r++){const h={sheetName:a.sheetName,address:A.n2l(c)+r,row:r,col:c};o.addCellEx(h)}else o.addCellEx(a)}remove(a,d){const o=A.decodeEx(a);this.removeEx(o,d)}removeEx(a,d){this.getMatrix(d).removeCellEx(a)}removeAllNames(a){e.each(this.matrixMap,d=>{d.removeCellEx(a)})}forEach(a){e.each(this.matrixMap,(d,o)=>{d.forEach(c=>{a(o,c)})})}getNames(a){return this.getNamesEx(A.decodeEx(a))}getNamesEx(a){return e.map(this.matrixMap,(d,o)=>d.findCellEx(a)&&o).filter(Boolean)}_explore(a,d){d.mark=!1;const{sheetName:o}=d,c=new l(d.row,d.col,d.row,d.col,o);let r,h;function b(m,Z){const p=a.findCellAt(o,m,d.col);return!(!p||!p.mark)&&(c[Z]=m,p.mark=!1,!0)}for(h=d.row-1;b(h,"top");h--);for(h=d.row+1;b(h,"bottom");h++);function u(m,Z){const p=[];for(h=c.top;h<=c.bottom;h++){const Y=a.findCellAt(o,h,m);if(!Y||!Y.mark)return!1;p.push(Y)}c[Z]=m;for(let Y=0;Y<p.length;Y++)p[Y].mark=!1;return!0}for(r=d.col-1;u(r,"left");r--);for(r=d.col+1;u(r,"right");r++);return c}getRanges(a,d){return(d=d||this.matrixMap[a])?(d.forEach(o=>{o.mark=!0}),{name:a,ranges:d.map(o=>o.mark&&this._explore(d,o)).filter(Boolean).map(o=>o.$shortRange)}):{name:a,ranges:[]}}normaliseMatrix(a,d){a.forEachInSheet(d,(o,c,r)=>{o&&(o.row===c&&o.col===r||(o.row=c,o.col=r,o.address=A.n2l(r)+c))})}spliceRows(a,d,o,c){e.each(this.matrixMap,r=>{r.spliceRows(a,d,o,c),this.normaliseMatrix(r,a)})}spliceColumns(a,d,o,c){e.each(this.matrixMap,r=>{r.spliceColumns(a,d,o,c),this.normaliseMatrix(r,a)})}get model(){return e.map(this.matrixMap,(a,d)=>this.getRanges(d,a)).filter(a=>a.ranges.length)}set model(a){const d=this.matrixMap={};a.forEach(o=>{const c=d[o.name]=new s;o.ranges.forEach(r=>{n.test(r.split("!").pop()||"")&&c.addCell(r)})})}}},{"../utils/cell-matrix":18,"../utils/col-cache":19,"../utils/under-dash":26,"./range":10}],7:[function(g,C,i){C.exports={ValueType:{Null:0,Merge:1,Number:2,String:3,Date:4,Hyperlink:5,Formula:6,SharedString:7,RichText:8,Boolean:9,Error:10},FormulaType:{None:0,Master:1,Shared:2},RelationshipType:{None:0,OfficeDocument:1,Worksheet:2,CalcChain:3,SharedStrings:4,Styles:5,Theme:6,Hyperlink:7},DocumentType:{Xlsx:1},ReadingOrder:{LeftToRight:1,RightToLeft:2},ErrorValue:{NotApplicable:"#N/A",Ref:"#REF!",Name:"#NAME?",DivZero:"#DIV/0!",Null:"#NULL!",Value:"#VALUE!",Num:"#NUM!"}}},{}],8:[function(g,C,i){const e=g("../utils/col-cache"),A=g("./anchor");C.exports=class{constructor(s,l){this.worksheet=s,this.model=l}get model(){switch(this.type){case"background":return{type:this.type,imageId:this.imageId};case"image":return{type:this.type,imageId:this.imageId,hyperlinks:this.range.hyperlinks,range:{tl:this.range.tl.model,br:this.range.br&&this.range.br.model,ext:this.range.ext,editAs:this.range.editAs}};default:throw new Error("Invalid Image Type")}}set model(s){let{type:l,imageId:n,range:a,hyperlinks:d}=s;if(this.type=l,this.imageId=n,l==="image")if(typeof a=="string"){const o=e.decode(a);this.range={tl:new A(this.worksheet,{col:o.left,row:o.top},-1),br:new A(this.worksheet,{col:o.right,row:o.bottom},0),editAs:"oneCell"}}else this.range={tl:new A(this.worksheet,a.tl,0),br:a.br&&new A(this.worksheet,a.br,0),ext:a.ext,editAs:a.editAs,hyperlinks:d||a.hyperlinks}}}},{"../utils/col-cache":19,"./anchor":2}],9:[function(g,C,i){const e=g("../utils/under-dash");class A{constructor(l){this.note=l}get model(){let l=null;switch(typeof this.note){case"string":l={type:"note",note:{texts:[{text:this.note}]}};break;default:l={type:"note",note:this.note}}return e.deepMerge({},A.DEFAULT_CONFIGS,l)}set model(l){const{note:n}=l,{texts:a}=n;a.length===1&&Object.keys(a[0]).length===1?this.note=a[0].text:this.note=n}static fromModel(l){const n=new A;return n.model=l,n}}A.DEFAULT_CONFIGS={note:{margins:{insetmode:"auto",inset:[.13,.13,.25,.25]},protection:{locked:"True",lockText:"True"},editAs:"absolute"}},C.exports=A},{"../utils/under-dash":26}],10:[function(g,C,i){const e=g("../utils/col-cache");class A{constructor(){this.decode(arguments)}setTLBR(l,n,a,d,o){if(arguments.length<4){const c=e.decodeAddress(l),r=e.decodeAddress(n);this.model={top:Math.min(c.row,r.row),left:Math.min(c.col,r.col),bottom:Math.max(c.row,r.row),right:Math.max(c.col,r.col),sheetName:a},this.setTLBR(c.row,c.col,r.row,r.col,o)}else this.model={top:Math.min(l,a),left:Math.min(n,d),bottom:Math.max(l,a),right:Math.max(n,d),sheetName:o}}decode(l){switch(l.length){case 5:this.setTLBR(l[0],l[1],l[2],l[3],l[4]);break;case 4:this.setTLBR(l[0],l[1],l[2],l[3]);break;case 3:this.setTLBR(l[0],l[1],l[2]);break;case 2:this.setTLBR(l[0],l[1]);break;case 1:{const n=l[0];if(n instanceof A)this.model={top:n.model.top,left:n.model.left,bottom:n.model.bottom,right:n.model.right,sheetName:n.sheetName};else if(n instanceof Array)this.decode(n);else if(n.top&&n.left&&n.bottom&&n.right)this.model={top:n.top,left:n.left,bottom:n.bottom,right:n.right,sheetName:n.sheetName};else{const a=e.decodeEx(n);a.top?this.model={top:a.top,left:a.left,bottom:a.bottom,right:a.right,sheetName:a.sheetName}:this.model={top:a.row,left:a.col,bottom:a.row,right:a.col,sheetName:a.sheetName}}break}case 0:this.model={top:0,left:0,bottom:0,right:0};break;default:throw new Error("Invalid number of arguments to _getDimensions() - "+l.length)}}get top(){return this.model.top||1}set top(l){this.model.top=l}get left(){return this.model.left||1}set left(l){this.model.left=l}get bottom(){return this.model.bottom||1}set bottom(l){this.model.bottom=l}get right(){return this.model.right||1}set right(l){this.model.right=l}get sheetName(){return this.model.sheetName}set sheetName(l){this.model.sheetName=l}get _serialisedSheetName(){const{sheetName:l}=this.model;return l?/^[a-zA-Z0-9]*$/.test(l)?l+"!":`'${l}'!`:""}expand(l,n,a,d){(!this.model.top||l<this.top)&&(this.top=l),(!this.model.left||n<this.left)&&(this.left=n),(!this.model.bottom||a>this.bottom)&&(this.bottom=a),(!this.model.right||d>this.right)&&(this.right=d)}expandRow(l){if(l){const{dimensions:n,number:a}=l;n&&this.expand(a,n.min,a,n.max)}}expandToAddress(l){const n=e.decodeEx(l);this.expand(n.row,n.col,n.row,n.col)}get tl(){return e.n2l(this.left)+this.top}get $t$l(){return`$${e.n2l(this.left)}$${this.top}`}get br(){return e.n2l(this.right)+this.bottom}get $b$r(){return`$${e.n2l(this.right)}$${this.bottom}`}get range(){return`${this._serialisedSheetName+this.tl}:${this.br}`}get $range(){return`${this._serialisedSheetName+this.$t$l}:${this.$b$r}`}get shortRange(){return this.count>1?this.range:this._serialisedSheetName+this.tl}get $shortRange(){return this.count>1?this.$range:this._serialisedSheetName+this.$t$l}get count(){return(1+this.bottom-this.top)*(1+this.right-this.left)}toString(){return this.range}intersects(l){return(!l.sheetName||!this.sheetName||l.sheetName===this.sheetName)&&!(l.bottom<this.top)&&!(l.top>this.bottom)&&!(l.right<this.left)&&!(l.left>this.right)}contains(l){const n=e.decodeEx(l);return this.containsEx(n)}containsEx(l){return(!l.sheetName||!this.sheetName||l.sheetName===this.sheetName)&&l.row>=this.top&&l.row<=this.bottom&&l.col>=this.left&&l.col<=this.right}forEachAddress(l){for(let n=this.left;n<=this.right;n++)for(let a=this.top;a<=this.bottom;a++)l(e.encodeAddress(a,n),a,n)}}C.exports=A},{"../utils/col-cache":19}],11:[function(g,C,i){const e=g("../utils/under-dash"),A=g("./enums"),s=g("../utils/col-cache"),l=g("./cell");C.exports=class{constructor(n,a){this._worksheet=n,this._number=a,this._cells=[],this.style={},this.outlineLevel=0}get number(){return this._number}get worksheet(){return this._worksheet}commit(){this._worksheet._commitRow(this)}destroy(){delete this._worksheet,delete this._cells,delete this.style}findCell(n){return this._cells[n-1]}getCellEx(n){let a=this._cells[n.col-1];if(!a){const d=this._worksheet.getColumn(n.col);a=new l(this,d,n.address),this._cells[n.col-1]=a}return a}getCell(n){if(typeof n=="string"){const a=this._worksheet.getColumnKey(n);n=a?a.number:s.l2n(n)}return this._cells[n-1]||this.getCellEx({address:s.encodeAddress(this._number,n),row:this._number,col:n})}splice(n,a){const d=n+a;for(var o=arguments.length,c=new Array(o>2?o-2:0),r=2;r<o;r++)c[r-2]=arguments[r];const h=c.length-a,b=this._cells.length;let u,m,Z;if(h<0)for(u=n+c.length;u<=b;u++)Z=this._cells[u-1],m=this._cells[u-h-1],m?(Z=this.getCell(u),Z.value=m.value,Z.style=m.style,Z._comment=m._comment):Z&&(Z.value=null,Z.style={},Z._comment=void 0);else if(h>0)for(u=b;u>=d;u--)m=this._cells[u-1],m?(Z=this.getCell(u+h),Z.value=m.value,Z.style=m.style,Z._comment=m._comment):this._cells[u+h-1]=void 0;for(u=0;u<c.length;u++)Z=this.getCell(n+u),Z.value=c[u],Z.style={},Z._comment=void 0}eachCell(n,a){if(a||(a=n,n=null),n&&n.includeEmpty){const d=this._cells.length;for(let o=1;o<=d;o++)a(this.getCell(o),o)}else this._cells.forEach((d,o)=>{d&&d.type!==A.ValueType.Null&&a(d,o+1)})}addPageBreak(n,a){const d=this._worksheet,o=Math.max(0,n-1)||0,c=Math.max(0,a-1)||16838,r={id:this._number,max:c,man:1};o&&(r.min=o),d.rowBreaks.push(r)}get values(){const n=[];return this._cells.forEach(a=>{a&&a.type!==A.ValueType.Null&&(n[a.col]=a.value)}),n}set values(n){if(this._cells=[],n)if(n instanceof Array){let a=0;n.hasOwnProperty("0")&&(a=1),n.forEach((d,o)=>{d!==void 0&&(this.getCellEx({address:s.encodeAddress(this._number,o+a),row:this._number,col:o+a}).value=d)})}else this._worksheet.eachColumnKey((a,d)=>{n[d]!==void 0&&(this.getCellEx({address:s.encodeAddress(this._number,a.number),row:this._number,col:a.number}).value=n[d])})}get hasValues(){return e.some(this._cells,n=>n&&n.type!==A.ValueType.Null)}get cellCount(){return this._cells.length}get actualCellCount(){let n=0;return this.eachCell(()=>{n++}),n}get dimensions(){let n=0,a=0;return this._cells.forEach(d=>{d&&d.type!==A.ValueType.Null&&((!n||n>d.col)&&(n=d.col),a<d.col&&(a=d.col))}),n>0?{min:n,max:a}:null}_applyStyle(n,a){return this.style[n]=a,this._cells.forEach(d=>{d&&(d[n]=a)}),a}get numFmt(){return this.style.numFmt}set numFmt(n){this._applyStyle("numFmt",n)}get font(){return this.style.font}set font(n){this._applyStyle("font",n)}get alignment(){return this.style.alignment}set alignment(n){this._applyStyle("alignment",n)}get protection(){return this.style.protection}set protection(n){this._applyStyle("protection",n)}get border(){return this.style.border}set border(n){this._applyStyle("border",n)}get fill(){return this.style.fill}set fill(n){this._applyStyle("fill",n)}get hidden(){return!!this._hidden}set hidden(n){this._hidden=n}get outlineLevel(){return this._outlineLevel||0}set outlineLevel(n){this._outlineLevel=n}get collapsed(){return!!(this._outlineLevel&&this._outlineLevel>=this._worksheet.properties.outlineLevelRow)}get model(){const n=[];let a=0,d=0;return this._cells.forEach(o=>{if(o){const c=o.model;c&&((!a||a>o.col)&&(a=o.col),d<o.col&&(d=o.col),n.push(c))}}),this.height||n.length?{cells:n,number:this.number,min:a,max:d,height:this.height,style:this.style,hidden:this.hidden,outlineLevel:this.outlineLevel,collapsed:this.collapsed}:null}set model(n){if(n.number!==this._number)throw new Error("Invalid row number in model");let a;this._cells=[],n.cells.forEach(d=>{switch(d.type){case l.Types.Merge:break;default:{let o;if(d.address)o=s.decodeAddress(d.address);else if(a){const{row:c}=a,r=a.col+1;o={row:c,col:r,address:s.encodeAddress(c,r),$col$row:`$${s.n2l(r)}$${c}`}}a=o,this.getCellEx(o).model=d;break}}}),n.height?this.height=n.height:delete this.height,this.hidden=n.hidden,this.outlineLevel=n.outlineLevel||0,this.style=n.style&&JSON.parse(JSON.stringify(n.style))||{}}}},{"../utils/col-cache":19,"../utils/under-dash":26,"./cell":3,"./enums":7}],12:[function(g,C,i){const e=g("../utils/col-cache");class A{constructor(l,n,a){this.table=l,this.column=n,this.index=a}_set(l,n){this.table.cacheState(),this.column[l]=n}get name(){return this.column.name}set name(l){this._set("name",l)}get filterButton(){return this.column.filterButton}set filterButton(l){this.column.filterButton=l}get style(){return this.column.style}set style(l){this.column.style=l}get totalsRowLabel(){return this.column.totalsRowLabel}set totalsRowLabel(l){this._set("totalsRowLabel",l)}get totalsRowFunction(){return this.column.totalsRowFunction}set totalsRowFunction(l){this._set("totalsRowFunction",l)}get totalsRowResult(){return this.column.totalsRowResult}set totalsRowResult(l){this._set("totalsRowResult",l)}get totalsRowFormula(){return this.column.totalsRowFormula}set totalsRowFormula(l){this._set("totalsRowFormula",l)}}C.exports=class{constructor(s,l){this.worksheet=s,l&&(this.table=l,this.validate(),this.store())}getFormula(s){switch(s.totalsRowFunction){case"none":return null;case"average":return`SUBTOTAL(101,${this.table.name}[${s.name}])`;case"countNums":return`SUBTOTAL(102,${this.table.name}[${s.name}])`;case"count":return`SUBTOTAL(103,${this.table.name}[${s.name}])`;case"max":return`SUBTOTAL(104,${this.table.name}[${s.name}])`;case"min":return`SUBTOTAL(105,${this.table.name}[${s.name}])`;case"stdDev":return`SUBTOTAL(106,${this.table.name}[${s.name}])`;case"var":return`SUBTOTAL(107,${this.table.name}[${s.name}])`;case"sum":return`SUBTOTAL(109,${this.table.name}[${s.name}])`;case"custom":return s.totalsRowFormula;default:throw new Error("Invalid Totals Row Function: "+s.totalsRowFunction)}}get width(){return this.table.columns.length}get height(){return this.table.rows.length}get filterHeight(){return this.height+(this.table.headerRow?1:0)}get tableHeight(){return this.filterHeight+(this.table.totalsRow?1:0)}validate(){const{table:s}=this,l=(h,b,u)=>{h[b]===void 0&&(h[b]=u)};l(s,"headerRow",!0),l(s,"totalsRow",!1),l(s,"style",{}),l(s.style,"theme","TableStyleMedium2"),l(s.style,"showFirstColumn",!1),l(s.style,"showLastColumn",!1),l(s.style,"showRowStripes",!1),l(s.style,"showColumnStripes",!1);const n=(h,b)=>{if(!h)throw new Error(b)};n(s.ref,"Table must have ref"),n(s.columns,"Table must have column definitions"),n(s.rows,"Table must have row definitions"),s.tl=e.decodeAddress(s.ref);const{row:a,col:d}=s.tl;n(a>0,"Table must be on valid row"),n(d>0,"Table must be on valid col");const{width:o,filterHeight:c,tableHeight:r}=this;s.autoFilterRef=e.encode(a,d,a+c-1,d+o-1),s.tableRef=e.encode(a,d,a+r-1,d+o-1),s.columns.forEach((h,b)=>{n(h.name,`Column ${b} must have a name`),b===0?l(h,"totalsRowLabel","Total"):(l(h,"totalsRowFunction","none"),h.totalsRowFormula=this.getFormula(h))})}store(){const s=(c,r)=>{r&&Object.keys(r).forEach(h=>{c[h]=r[h]})},{worksheet:l,table:n}=this,{row:a,col:d}=n.tl;let o=0;if(n.headerRow){const c=l.getRow(a+o++);n.columns.forEach((r,h)=>{const{style:b,name:u}=r,m=c.getCell(d+h);m.value=u,s(m,b)})}if(n.rows.forEach(c=>{const r=l.getRow(a+o++);c.forEach((h,b)=>{const u=r.getCell(d+b);u.value=h,s(u,n.columns[b].style)})}),n.totalsRow){const c=l.getRow(a+o++);n.columns.forEach((r,h)=>{const b=c.getCell(d+h);if(h===0)b.value=r.totalsRowLabel;else{const u=this.getFormula(r);b.value=u?{formula:r.totalsRowFormula,result:r.totalsRowResult}:null}s(b,r.style)})}}load(s){const{table:l}=this,{row:n,col:a}=l.tl;let d=0;if(l.headerRow){const o=s.getRow(n+d++);l.columns.forEach((c,r)=>{o.getCell(a+r).value=c.name})}if(l.rows.forEach(o=>{const c=s.getRow(n+d++);o.forEach((r,h)=>{c.getCell(a+h).value=r})}),l.totalsRow){const o=s.getRow(n+d++);l.columns.forEach((c,r)=>{const h=o.getCell(a+r);r===0?h.value=c.totalsRowLabel:this.getFormula(c)&&(h.value={formula:c.totalsRowFormula,result:c.totalsRowResult})})}}get model(){return this.table}set model(s){this.table=s}cacheState(){this._cache||(this._cache={ref:this.ref,width:this.width,tableHeight:this.tableHeight})}commit(){if(!this._cache)return;this.validate();const s=e.decodeAddress(this._cache.ref);if(this.ref!==this._cache.ref)for(let l=0;l<this._cache.tableHeight;l++){const n=this.worksheet.getRow(s.row+l);for(let a=0;a<this._cache.width;a++)n.getCell(s.col+a).value=null}else{for(let l=this.tableHeight;l<this._cache.tableHeight;l++){const n=this.worksheet.getRow(s.row+l);for(let a=0;a<this._cache.width;a++)n.getCell(s.col+a).value=null}for(let l=0;l<this.tableHeight;l++){const n=this.worksheet.getRow(s.row+l);for(let a=this.width;a<this._cache.width;a++)n.getCell(s.col+a).value=null}}this.store()}addRow(s,l){this.cacheState(),l===void 0?this.table.rows.push(s):this.table.rows.splice(l,0,s)}removeRows(s){let l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1;this.cacheState(),this.table.rows.splice(s,l)}getColumn(s){const l=this.table.columns[s];return new A(this,l,s)}addColumn(s,l,n){this.cacheState(),n===void 0?(this.table.columns.push(s),this.table.rows.forEach((a,d)=>{a.push(l[d])})):(this.table.columns.splice(n,0,s),this.table.rows.forEach((a,d)=>{a.splice(n,0,l[d])}))}removeColumns(s){let l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1;this.cacheState(),this.table.columns.splice(s,l),this.table.rows.forEach(n=>{n.splice(s,l)})}_assign(s,l,n){this.cacheState(),s[l]=n}get ref(){return this.table.ref}set ref(s){this._assign(this.table,"ref",s)}get name(){return this.table.name}set name(s){this.table.name=s}get displayName(){return this.table.displyName||this.table.name}set displayNamename(s){this.table.displayName=s}get headerRow(){return this.table.headerRow}set headerRow(s){this._assign(this.table,"headerRow",s)}get totalsRow(){return this.table.totalsRow}set totalsRow(s){this._assign(this.table,"totalsRow",s)}get theme(){return this.table.style.name}set theme(s){this.table.style.name=s}get showFirstColumn(){return this.table.style.showFirstColumn}set showFirstColumn(s){this.table.style.showFirstColumn=s}get showLastColumn(){return this.table.style.showLastColumn}set showLastColumn(s){this.table.style.showLastColumn=s}get showRowStripes(){return this.table.style.showRowStripes}set showRowStripes(s){this.table.style.showRowStripes=s}get showColumnStripes(){return this.table.style.showColumnStripes}set showColumnStripes(s){this.table.style.showColumnStripes=s}}},{"../utils/col-cache":19}],13:[function(g,C,i){const e=g("./worksheet"),A=g("./defined-names"),s=g("../xlsx/xlsx"),l=g("../csv/csv");C.exports=class{constructor(){this.category="",this.company="",this.created=new Date,this.description="",this.keywords="",this.manager="",this.modified=this.created,this.properties={},this.calcProperties={},this._worksheets=[],this.subject="",this.title="",this.views=[],this.media=[],this._definedNames=new A}get xlsx(){return this._xlsx||(this._xlsx=new s(this)),this._xlsx}get csv(){return this._csv||(this._csv=new l(this)),this._csv}get nextId(){for(let n=1;n<this._worksheets.length;n++)if(!this._worksheets[n])return n;return this._worksheets.length||1}addWorksheet(n,a){const d=this.nextId;a&&(typeof a=="string"?(console.trace('tabColor argument is now deprecated. Please use workbook.addWorksheet(name, {properties: { tabColor: { argb: "rbg value" } }'),a={properties:{tabColor:{argb:a}}}):(a.argb||a.theme||a.indexed)&&(console.trace("tabColor argument is now deprecated. Please use workbook.addWorksheet(name, {properties: { tabColor: { ... } }"),a={properties:{tabColor:a}}));const o=this._worksheets.reduce((h,b)=>(b&&b.orderNo)>h?b.orderNo:h,0),c=Object.assign({},a,{id:d,name:n,orderNo:o+1,workbook:this}),r=new e(c);return this._worksheets[d]=r,r}removeWorksheetEx(n){delete this._worksheets[n.id]}removeWorksheet(n){const a=this.getWorksheet(n);a&&a.destroy()}getWorksheet(n){return n===void 0?this._worksheets.find(Boolean):typeof n=="number"?this._worksheets[n]:typeof n=="string"?this._worksheets.find(a=>a&&a.name===n):void 0}get worksheets(){return this._worksheets.slice(1).sort((n,a)=>n.orderNo-a.orderNo).filter(Boolean)}eachSheet(n){this.worksheets.forEach(a=>{n(a,a.id)})}get definedNames(){return this._definedNames}clearThemes(){this._themes=void 0}addImage(n){const a=this.media.length;return this.media.push(Object.assign({},n,{type:"image"})),a}getImage(n){return this.media[n]}get model(){return{creator:this.creator||"Unknown",lastModifiedBy:this.lastModifiedBy||"Unknown",lastPrinted:this.lastPrinted,created:this.created,modified:this.modified,properties:this.properties,worksheets:this.worksheets.map(n=>n.model),sheets:this.worksheets.map(n=>n.model).filter(Boolean),definedNames:this._definedNames.model,views:this.views,company:this.company,manager:this.manager,title:this.title,subject:this.subject,keywords:this.keywords,category:this.category,description:this.description,language:this.language,revision:this.revision,contentStatus:this.contentStatus,themes:this._themes,media:this.media,calcProperties:this.calcProperties}}set model(n){this.creator=n.creator,this.lastModifiedBy=n.lastModifiedBy,this.lastPrinted=n.lastPrinted,this.created=n.created,this.modified=n.modified,this.company=n.company,this.manager=n.manager,this.title=n.title,this.subject=n.subject,this.keywords=n.keywords,this.category=n.category,this.description=n.description,this.language=n.language,this.revision=n.revision,this.contentStatus=n.contentStatus,this.properties=n.properties,this.calcProperties=n.calcProperties,this._worksheets=[],n.worksheets.forEach(a=>{const{id:d,name:o,state:c}=a,r=n.sheets&&n.sheets.findIndex(h=>h.id===d);(this._worksheets[d]=new e({id:d,name:o,orderNo:r,state:c,workbook:this})).model=a}),this._definedNames.model=n.definedNames,this.views=n.views,this._themes=n.themes,this.media=n.media||[]}}},{"../csv/csv":1,"../xlsx/xlsx":144,"./defined-names":6,"./worksheet":14}],14:[function(g,C,i){const e=g("../utils/under-dash"),A=g("../utils/col-cache"),s=g("./range"),l=g("./row"),n=g("./column"),a=g("./enums"),d=g("./image"),o=g("./table"),c=g("./data-validations"),r=g("../utils/encryptor"),{copyStyle:h}=g("../utils/copy-style");C.exports=class{constructor(b){b=b||{},this._workbook=b.workbook,this.id=b.id,this.orderNo=b.orderNo,this.name=b.name,this.state=b.state||"visible",this._rows=[],this._columns=null,this._keys={},this._merges={},this.rowBreaks=[],this.properties=Object.assign({},{defaultRowHeight:15,dyDescent:55,outlineLevelCol:0,outlineLevelRow:0},b.properties),this.pageSetup=Object.assign({},{margins:{left:.7,right:.7,top:.75,bottom:.75,header:.3,footer:.3},orientation:"portrait",horizontalDpi:4294967295,verticalDpi:4294967295,fitToPage:!(!b.pageSetup||!b.pageSetup.fitToWidth&&!b.pageSetup.fitToHeight||b.pageSetup.scale),pageOrder:"downThenOver",blackAndWhite:!1,draft:!1,cellComments:"None",errors:"displayed",scale:100,fitToWidth:1,fitToHeight:1,paperSize:void 0,showRowColHeaders:!1,showGridLines:!1,firstPageNumber:void 0,horizontalCentered:!1,verticalCentered:!1,rowBreaks:null,colBreaks:null},b.pageSetup),this.headerFooter=Object.assign({},{differentFirst:!1,differentOddEven:!1,oddHeader:null,oddFooter:null,evenHeader:null,evenFooter:null,firstHeader:null,firstFooter:null},b.headerFooter),this.dataValidations=new c,this.views=b.views||[],this.autoFilter=b.autoFilter||null,this._media=[],this.sheetProtection=null,this.tables={},this.conditionalFormattings=[]}get name(){return this._name}set name(b){if(b===void 0&&(b="sheet"+this.id),this._name!==b){if(typeof b!="string")throw new Error("The name has to be a string.");if(b==="")throw new Error("The name can't be empty.");if(b==="History")throw new Error('The name "History" is protected. Please use a different name.');if(/[*?:/\\[\]]/.test(b))throw new Error(`Worksheet name ${b} cannot include any of the following characters: * ? : \\ / [ ]`);if(/(^')|('$)/.test(b))throw new Error("The first or last character of worksheet name cannot be a single quotation mark: "+b);if(b&&b.length>31&&(console.warn(`Worksheet name ${b} exceeds 31 chars. This will be truncated`),b=b.substring(0,31)),this._workbook._worksheets.find(u=>u&&u.name.toLowerCase()===b.toLowerCase()))throw new Error("Worksheet name already exists: "+b);this._name=b}}get workbook(){return this._workbook}destroy(){this._workbook.removeWorksheetEx(this)}get dimensions(){const b=new s;return this._rows.forEach(u=>{if(u){const m=u.dimensions;m&&b.expand(u.number,m.min,u.number,m.max)}}),b}get columns(){return this._columns}set columns(b){this._headerRowCount=b.reduce((Z,p)=>{const Y=(p.header?1:p.headers&&p.headers.length)||0;return Math.max(Z,Y)},0);let u=1;const m=this._columns=[];b.forEach(Z=>{const p=new n(this,u++,!1);m.push(p),p.defn=Z})}getColumnKey(b){return this._keys[b]}setColumnKey(b,u){this._keys[b]=u}deleteColumnKey(b){delete this._keys[b]}eachColumnKey(b){e.each(this._keys,b)}getColumn(b){if(typeof b=="string"){const u=this._keys[b];if(u)return u;b=A.l2n(b)}if(this._columns||(this._columns=[]),b>this._columns.length){let u=this._columns.length+1;for(;u<=b;)this._columns.push(new n(this,u++))}return this._columns[b-1]}spliceColumns(b,u){const m=this._rows.length;for(var Z=arguments.length,p=new Array(Z>2?Z-2:0),Y=2;Y<Z;Y++)p[Y-2]=arguments[Y];if(p.length>0)for(let S=0;S<m;S++){const z=[b,u];p.forEach(K=>{z.push(K[S]||null)});const v=this.getRow(S+1);v.splice.apply(v,z)}else this._rows.forEach(S=>{S&&S.splice(b,u)});const R=p.length-u,X=b+u,H=this._columns.length;if(R<0)for(let S=b+p.length;S<=H;S++)this.getColumn(S).defn=this.getColumn(S-R).defn;else if(R>0)for(let S=H;S>=X;S--)this.getColumn(S+R).defn=this.getColumn(S).defn;for(let S=b;S<b+p.length;S++)this.getColumn(S).defn=null;this.workbook.definedNames.spliceColumns(this.name,b,u,p.length)}get lastColumn(){return this.getColumn(this.columnCount)}get columnCount(){let b=0;return this.eachRow(u=>{b=Math.max(b,u.cellCount)}),b}get actualColumnCount(){const b=[];let u=0;return this.eachRow(m=>{m.eachCell(Z=>{let{col:p}=Z;b[p]||(b[p]=!0,u++)})}),u}_commitRow(){}get _lastRowNumber(){const b=this._rows;let u=b.length;for(;u>0&&b[u-1]===void 0;)u--;return u}get _nextRow(){return this._lastRowNumber+1}get lastRow(){if(this._rows.length)return this._rows[this._rows.length-1]}findRow(b){return this._rows[b-1]}findRows(b,u){return this._rows.slice(b-1,b-1+u)}get rowCount(){return this._lastRowNumber}get actualRowCount(){let b=0;return this.eachRow(()=>{b++}),b}getRow(b){let u=this._rows[b-1];return u||(u=this._rows[b-1]=new l(this,b)),u}getRows(b,u){if(u<1)return;const m=[];for(let Z=b;Z<b+u;Z++)m.push(this.getRow(Z));return m}addRow(b){let u=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"n";const m=this._nextRow,Z=this.getRow(m);return Z.values=b,this._setStyleOption(m,u[0]==="i"?u:"n"),Z}addRows(b){let u=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"n";const m=[];return b.forEach(Z=>{m.push(this.addRow(Z,u))}),m}insertRow(b,u){let m=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"n";return this.spliceRows(b,0,u),this._setStyleOption(b,m),this.getRow(b)}insertRows(b,u){let m=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"n";if(this.spliceRows(b,0,...u),m!=="n")for(let Z=0;Z<u.length;Z++)m[0]==="o"&&this.findRow(u.length+b+Z)!==void 0?this._copyStyle(u.length+b+Z,b+Z,m[1]==="+"):m[0]==="i"&&this.findRow(b-1)!==void 0&&this._copyStyle(b-1,b+Z,m[1]==="+");return this.getRows(b,u.length)}_setStyleOption(b){let u=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"n";u[0]==="o"&&this.findRow(b+1)!==void 0?this._copyStyle(b+1,b,u[1]==="+"):u[0]==="i"&&this.findRow(b-1)!==void 0&&this._copyStyle(b-1,b,u[1]==="+")}_copyStyle(b,u){let m=arguments.length>2&&arguments[2]!==void 0&&arguments[2];const Z=this.getRow(b),p=this.getRow(u);p.style=h(Z.style),Z.eachCell({includeEmpty:m},(Y,R)=>{p.getCell(R).style=h(Y.style)}),p.height=Z.height}duplicateRow(b,u){let m=arguments.length>2&&arguments[2]!==void 0&&arguments[2];const Z=this._rows[b-1],p=new Array(u).fill(Z.values);this.spliceRows(b+1,m?0:u,...p);for(let Y=0;Y<u;Y++){const R=this._rows[b+Y];R.style=Z.style,R.height=Z.height,Z.eachCell({includeEmpty:!0},(X,H)=>{R.getCell(H).style=X.style})}}spliceRows(b,u){const m=b+u;for(var Z=arguments.length,p=new Array(Z>2?Z-2:0),Y=2;Y<Z;Y++)p[Y-2]=arguments[Y];const R=p.length,X=R-u,H=this._rows.length;let S,z;if(X<0)for(b===H&&(this._rows[H-1]=void 0),S=m;S<=H;S++)if(z=this._rows[S-1],z){const v=this.getRow(S+X);v.values=z.values,v.style=z.style,v.height=z.height,z.eachCell({includeEmpty:!0},(K,V)=>{v.getCell(V).style=K.style}),this._rows[S-1]=void 0}else this._rows[S+X-1]=void 0;else if(X>0)for(S=H;S>=m;S--)if(z=this._rows[S-1],z){const v=this.getRow(S+X);v.values=z.values,v.style=z.style,v.height=z.height,z.eachCell({includeEmpty:!0},(K,V)=>{if(v.getCell(V).style=K.style,K._value.constructor.name==="MergeValue"){const N=this.getRow(K._row._number+R).getCell(V),B=K._value._master,G=this.getRow(B._row._number+R).getCell(B._column._number);N.merge(G)}})}else this._rows[S+X-1]=void 0;for(S=0;S<R;S++){const v=this.getRow(b+S);v.style={},v.values=p[S]}this.workbook.definedNames.spliceRows(this.name,b,u,R)}eachRow(b,u){if(u||(u=b,b=void 0),b&&b.includeEmpty){const m=this._rows.length;for(let Z=1;Z<=m;Z++)u(this.getRow(Z),Z)}else this._rows.forEach(m=>{m&&m.hasValues&&u(m,m.number)})}getSheetValues(){const b=[];return this._rows.forEach(u=>{u&&(b[u.number]=u.values)}),b}findCell(b,u){const m=A.getAddress(b,u),Z=this._rows[m.row-1];return Z?Z.findCell(m.col):void 0}getCell(b,u){const m=A.getAddress(b,u);return this.getRow(m.row).getCellEx(m)}mergeCells(){for(var b=arguments.length,u=new Array(b),m=0;m<b;m++)u[m]=arguments[m];const Z=new s(u);this._mergeCellsInternal(Z)}mergeCellsWithoutStyle(){for(var b=arguments.length,u=new Array(b),m=0;m<b;m++)u[m]=arguments[m];const Z=new s(u);this._mergeCellsInternal(Z,!0)}_mergeCellsInternal(b,u){e.each(this._merges,Z=>{if(Z.intersects(b))throw new Error("Cannot merge already merged cells")});const m=this.getCell(b.top,b.left);for(let Z=b.top;Z<=b.bottom;Z++)for(let p=b.left;p<=b.right;p++)(Z>b.top||p>b.left)&&this.getCell(Z,p).merge(m,u);this._merges[m.address]=b}_unMergeMaster(b){const u=this._merges[b.address];if(u){for(let m=u.top;m<=u.bottom;m++)for(let Z=u.left;Z<=u.right;Z++)this.getCell(m,Z).unmerge();delete this._merges[b.address]}}get hasMerges(){return e.some(this._merges,Boolean)}unMergeCells(){for(var b=arguments.length,u=new Array(b),m=0;m<b;m++)u[m]=arguments[m];const Z=new s(u);for(let p=Z.top;p<=Z.bottom;p++)for(let Y=Z.left;Y<=Z.right;Y++){const R=this.findCell(p,Y);R&&(R.type===a.ValueType.Merge?this._unMergeMaster(R.master):this._merges[R.address]&&this._unMergeMaster(R))}}fillFormula(b,u,m){let Z=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"shared";const p=A.decode(b),{top:Y,left:R,bottom:X,right:H}=p,S=H-R+1,z=A.encodeAddress(Y,R),v=Z==="shared";let K;K=typeof m=="function"?m:Array.isArray(m)?Array.isArray(m[0])?(N,B)=>m[N-Y][B-R]:(N,B)=>m[(N-Y)*S+(B-R)]:()=>{};let V=!0;for(let N=Y;N<=X;N++)for(let B=R;B<=H;B++)V?(this.getCell(N,B).value={shareType:Z,formula:u,ref:b,result:K(N,B)},V=!1):this.getCell(N,B).value=v?{sharedFormula:z,result:K(N,B)}:K(N,B)}addImage(b,u){const m={type:"image",imageId:b,range:u};this._media.push(new d(this,m))}getImages(){return this._media.filter(b=>b.type==="image")}addBackgroundImage(b){const u={type:"background",imageId:b};this._media.push(new d(this,u))}getBackgroundImageId(){const b=this._media.find(u=>u.type==="background");return b&&b.imageId}protect(b,u){return new Promise(m=>{this.sheetProtection={sheet:!0},u&&"spinCount"in u&&(u.spinCount=Number.isFinite(u.spinCount)?Math.round(Math.max(0,u.spinCount)):1e5),b&&(this.sheetProtection.algorithmName="SHA-512",this.sheetProtection.saltValue=r.randomBytes(16).toString("base64"),this.sheetProtection.spinCount=u&&"spinCount"in u?u.spinCount:1e5,this.sheetProtection.hashValue=r.convertPasswordToHash(b,"SHA512",this.sheetProtection.saltValue,this.sheetProtection.spinCount)),u&&(this.sheetProtection=Object.assign(this.sheetProtection,u),!b&&"spinCount"in u&&delete this.sheetProtection.spinCount),m()})}unprotect(){this.sheetProtection=null}addTable(b){const u=new o(this,b);return this.tables[b.name]=u,u}getTable(b){return this.tables[b]}removeTable(b){delete this.tables[b]}getTables(){return Object.values(this.tables)}addConditionalFormatting(b){this.conditionalFormattings.push(b)}removeConditionalFormatting(b){typeof b=="number"?this.conditionalFormattings.splice(b,1):this.conditionalFormattings=b instanceof Function?this.conditionalFormattings.filter(b):[]}get tabColor(){return console.trace("worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor"),this.properties.tabColor}set tabColor(b){console.trace("worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor"),this.properties.tabColor=b}get model(){const b={id:this.id,name:this.name,dataValidations:this.dataValidations.model,properties:this.properties,state:this.state,pageSetup:this.pageSetup,headerFooter:this.headerFooter,rowBreaks:this.rowBreaks,views:this.views,autoFilter:this.autoFilter,media:this._media.map(Z=>Z.model),sheetProtection:this.sheetProtection,tables:Object.values(this.tables).map(Z=>Z.model),conditionalFormattings:this.conditionalFormattings};b.cols=n.toModel(this.columns);const u=b.rows=[],m=b.dimensions=new s;return this._rows.forEach(Z=>{const p=Z&&Z.model;p&&(m.expand(p.number,p.min,p.number,p.max),u.push(p))}),b.merges=[],e.each(this._merges,Z=>{b.merges.push(Z.range)}),b}_parseRows(b){this._rows=[],b.rows.forEach(u=>{const m=new l(this,u.number);this._rows[m.number-1]=m,m.model=u})}_parseMergeCells(b){e.each(b.mergeCells,u=>{this.mergeCellsWithoutStyle(u)})}set model(b){this.name=b.name,this._columns=n.fromModel(this,b.cols),this._parseRows(b),this._parseMergeCells(b),this.dataValidations=new c(b.dataValidations),this.properties=b.properties,this.pageSetup=b.pageSetup,this.headerFooter=b.headerFooter,this.views=b.views,this.autoFilter=b.autoFilter,this._media=b.media.map(u=>new d(this,u)),this.sheetProtection=b.sheetProtection,this.tables=b.tables.reduce((u,m)=>{const Z=new o;return Z.model=m,u[m.name]=Z,u},{}),this.conditionalFormattings=b.conditionalFormattings}}},{"../utils/col-cache":19,"../utils/copy-style":20,"../utils/encryptor":21,"../utils/under-dash":26,"./column":4,"./data-validations":5,"./enums":7,"./image":8,"./range":10,"./row":11,"./table":12}],15:[function(g,C,i){g("core-js/modules/es.promise"),g("core-js/modules/es.promise.finally"),g("core-js/modules/es.object.assign"),g("core-js/modules/es.object.keys"),g("core-js/modules/es.object.values"),g("core-js/modules/es.symbol"),g("core-js/modules/es.symbol.async-iterator"),g("core-js/modules/es.array.iterator"),g("core-js/modules/es.array.includes"),g("core-js/modules/es.array.find-index"),g("core-js/modules/es.array.find"),g("core-js/modules/es.string.from-code-point"),g("core-js/modules/es.string.includes"),g("core-js/modules/es.number.is-nan"),g("regenerator-runtime/runtime");const e={Workbook:g("./doc/workbook")},A=g("./doc/enums");Object.keys(A).forEach(s=>{e[s]=A[s]}),C.exports=e},{"./doc/enums":7,"./doc/workbook":13,"core-js/modules/es.array.find":359,"core-js/modules/es.array.find-index":358,"core-js/modules/es.array.includes":360,"core-js/modules/es.array.iterator":361,"core-js/modules/es.number.is-nan":363,"core-js/modules/es.object.assign":364,"core-js/modules/es.object.keys":366,"core-js/modules/es.object.values":367,"core-js/modules/es.promise":372,"core-js/modules/es.promise.finally":371,"core-js/modules/es.string.from-code-point":376,"core-js/modules/es.string.includes":377,"core-js/modules/es.symbol":381,"core-js/modules/es.symbol.async-iterator":378,"regenerator-runtime/runtime":492}],16:[function(g,C,i){const e=typeof TextDecoder>"u"?null:new TextDecoder("utf-8");i.bufferToString=function(A){return typeof A=="string"?A:e?e.decode(A):A.toString()}},{}],17:[function(g,C,i){const e=typeof TextEncoder>"u"?null:new TextEncoder("utf-8"),{Buffer:A}=g("buffer");i.stringToBuffer=function(s){return typeof s!="string"?s:e?A.from(e.encode(s).buffer):A.from(s)}},{buffer:220}],18:[function(g,C,i){const e=g("./under-dash"),A=g("./col-cache");C.exports=class{constructor(s){this.template=s,this.sheets={}}addCell(s){this.addCellEx(A.decodeEx(s))}getCell(s){return this.findCellEx(A.decodeEx(s),!0)}findCell(s){return this.findCellEx(A.decodeEx(s),!1)}findCellAt(s,l,n){const a=this.sheets[s],d=a&&a[l];return d&&d[n]}addCellEx(s){if(s.top)for(let l=s.top;l<=s.bottom;l++)for(let n=s.left;n<=s.right;n++)this.getCellAt(s.sheetName,l,n);else this.findCellEx(s,!0)}getCellEx(s){return this.findCellEx(s,!0)}findCellEx(s,l){const n=this.findSheet(s,l),a=this.findSheetRow(n,s,l);return this.findRowCell(a,s,l)}getCellAt(s,l,n){const a=this.sheets[s]||(this.sheets[s]=[]),d=a[l]||(a[l]=[]);return d[n]||(d[n]={sheetName:s,address:A.n2l(n)+l,row:l,col:n})}removeCellEx(s){const l=this.findSheet(s);if(!l)return;const n=this.findSheetRow(l,s);n&&delete n[s.col]}forEachInSheet(s,l){const n=this.sheets[s];n&&n.forEach((a,d)=>{a&&a.forEach((o,c)=>{o&&l(o,d,c)})})}forEach(s){e.each(this.sheets,(l,n)=>{this.forEachInSheet(n,s)})}map(s){const l=[];return this.forEach(n=>{l.push(s(n))}),l}findSheet(s,l){const n=s.sheetName;return this.sheets[n]?this.sheets[n]:l?this.sheets[n]=[]:void 0}findSheetRow(s,l,n){const{row:a}=l;return s&&s[a]?s[a]:n?s[a]=[]:void 0}findRowCell(s,l,n){const{col:a}=l;return s&&s[a]?s[a]:n?s[a]=this.template?Object.assign(l,JSON.parse(JSON.stringify(this.template))):l:void 0}spliceRows(s,l,n,a){const d=this.sheets[s];if(d){const o=[];for(let c=0;c<a;c++)o.push([]);d.splice(l,n,...o)}}spliceColumns(s,l,n,a){const d=this.sheets[s];if(d){const o=[];for(let c=0;c<a;c++)o.push(null);e.each(d,c=>{c.splice(l,n,...o)})}}}},{"./col-cache":19,"./under-dash":26}],19:[function(g,C,i){const e=/^[A-Z]+\d+$/,A={_dictionary:["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"],_l2nFill:0,_l2n:{},_n2l:[],_level:s=>s<=26?1:s<=676?2:3,_fill(s){let l,n,a,d,o,c=1;if(s>=4)throw new Error("Out of bounds. Excel supports columns from 1 to 16384");if(this._l2nFill<1&&s>=1){for(;c<=26;)l=this._dictionary[c-1],this._n2l[c]=l,this._l2n[l]=c,c++;this._l2nFill=1}if(this._l2nFill<2&&s>=2){for(c=27;c<=702;)n=c-27,a=n%26,d=Math.floor(n/26),l=this._dictionary[d]+this._dictionary[a],this._n2l[c]=l,this._l2n[l]=c,c++;this._l2nFill=2}if(this._l2nFill<3&&s>=3){for(c=703;c<=16384;)n=c-703,a=n%26,d=Math.floor(n/26)%26,o=Math.floor(n/676),l=this._dictionary[o]+this._dictionary[d]+this._dictionary[a],this._n2l[c]=l,this._l2n[l]=c,c++;this._l2nFill=3}},l2n(s){if(this._l2n[s]||this._fill(s.length),!this._l2n[s])throw new Error("Out of bounds. Invalid column letter: "+s);return this._l2n[s]},n2l(s){if(s<1||s>16384)throw new Error(s+" is out of bounds. Excel supports columns from 1 to 16384");return this._n2l[s]||this._fill(this._level(s)),this._n2l[s]},_hash:{},validateAddress(s){if(!e.test(s))throw new Error("Invalid Address: "+s);return!0},decodeAddress(s){const l=s.length<5&&this._hash[s];if(l)return l;let n=!1,a="",d=0,o=!1,c="",r=0;for(let b,u=0;u<s.length;u++)if(b=s.charCodeAt(u),!o&&b>=65&&b<=90)n=!0,a+=s[u],d=26*d+b-64;else if(b>=48&&b<=57)o=!0,c+=s[u],r=10*r+b-48;else if(o&&n&&b!==36)break;if(n){if(d>16384)throw new Error("Out of bounds. Invalid column letter: "+a)}else d=void 0;o||(r=void 0);const h={address:s=a+c,col:d,row:r,$col$row:`$${a}$${c}`};return d<=100&&r<=100&&(this._hash[s]=h,this._hash[h.$col$row]=h),h},getAddress(s,l){if(l){const n=this.n2l(l)+s;return this.decodeAddress(n)}return this.decodeAddress(s)},decode(s){const l=s.split(":");if(l.length===2){const n=this.decodeAddress(l[0]),a=this.decodeAddress(l[1]),d={top:Math.min(n.row,a.row),left:Math.min(n.col,a.col),bottom:Math.max(n.row,a.row),right:Math.max(n.col,a.col)};return d.tl=this.n2l(d.left)+d.top,d.br=this.n2l(d.right)+d.bottom,d.dimensions=`${d.tl}:${d.br}`,d}return this.decodeAddress(s)},decodeEx(s){const l=s.match(/(?:(?:(?:'((?:[^']|'')*)')|([^'^ !]*))!)?(.*)/),n=l[1]||l[2],a=l[3],d=a.split(":");if(d.length>1){let c=this.decodeAddress(d[0]),r=this.decodeAddress(d[1]);const h=Math.min(c.row,r.row),b=Math.min(c.col,r.col),u=Math.max(c.row,r.row),m=Math.max(c.col,r.col);return c=this.n2l(b)+h,r=this.n2l(m)+u,{top:h,left:b,bottom:u,right:m,sheetName:n,tl:{address:c,col:b,row:h,$col$row:`$${this.n2l(b)}$${h}`,sheetName:n},br:{address:r,col:m,row:u,$col$row:`$${this.n2l(m)}$${u}`,sheetName:n},dimensions:`${c}:${r}`}}if(a.startsWith("#"))return n?{sheetName:n,error:a}:{error:a};const o=this.decodeAddress(a);return n?{sheetName:n,...o}:o},encodeAddress:(s,l)=>A.n2l(l)+s,encode(){switch(arguments.length){case 2:return A.encodeAddress(arguments[0],arguments[1]);case 4:return`${A.encodeAddress(arguments[0],arguments[1])}:${A.encodeAddress(arguments[2],arguments[3])}`;default:throw new Error("Can only encode with 2 or 4 arguments")}},inRange(s,l){const[n,a,,d,o]=s,[c,r]=l;return c>=n&&c<=d&&r>=a&&r<=o}};C.exports=A},{}],20:[function(g,C,i){const e=(s,l)=>({...s,...l.reduce((n,a)=>(s[a]&&(n[a]={...s[a]}),n),{})}),A=function(s,l,n){let a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:[];s[n]&&(l[n]=e(s[n],a))};i.copyStyle=s=>{if(!s)return s;if(l=s,Object.keys(l).length===0)return{};var l;const n={...s};return A(s,n,"font",["color"]),A(s,n,"alignment"),A(s,n,"protection"),s.border&&(A(s,n,"border"),A(s.border,n.border,"top",["color"]),A(s.border,n.border,"left",["color"]),A(s.border,n.border,"bottom",["color"]),A(s.border,n.border,"right",["color"]),A(s.border,n.border,"diagonal",["color"])),s.fill&&(A(s,n,"fill",["fgColor","bgColor","center"]),s.fill.stops&&(n.fill.stops=s.fill.stops.map(a=>e(a,["color"])))),n}},{}],21:[function(g,C,i){(function(e){(function(){const A=g("crypto"),s={hash(l){const n=A.createHash(l);for(var a=arguments.length,d=new Array(a>1?a-1:0),o=1;o<a;o++)d[o-1]=arguments[o];return n.update(e.concat(d)),n.digest()},convertPasswordToHash(l,n,a,d){if(n=n.toLowerCase(),A.getHashes().indexOf(n)<0)throw new Error(`Hash algorithm '${n}' not supported!`);const o=e.from(l,"utf16le");let c=this.hash(n,e.from(a,"base64"),o);for(let r=0;r<d;r++){const h=e.alloc(4);h.writeUInt32LE(r,0),c=this.hash(n,c,h)}return c.toString("base64")},randomBytes:l=>A.randomBytes(l)};C.exports=s}).call(this)}).call(this,g("buffer").Buffer)},{buffer:220,crypto:390}],22:[function(g,C,i){const{SaxesParser:e}=g("saxes"),{PassThrough:A}=g("readable-stream"),{bufferToString:s}=g("./browser-buffer-decode");C.exports=async function*(l){l.pipe&&!l[Symbol.asyncIterator]&&(l=l.pipe(new A));const n=new e;let a;n.on("error",o=>{a=o});let d=[];n.on("opentag",o=>d.push({eventType:"opentag",value:o})),n.on("text",o=>d.push({eventType:"text",value:o})),n.on("closetag",o=>d.push({eventType:"closetag",value:o}));for await(const o of l){if(n.write(s(o)),a)throw a;yield d,d=[]}}},{"./browser-buffer-decode":16,"readable-stream":491,saxes:496}],23:[function(g,C,i){const e=g("./col-cache"),A=/(([a-z_\-0-9]*)!)?([a-z0-9_$]{2,})([(])?/gi,s=/^([$])?([a-z]+)([$])?([1-9][0-9]*)$/i;C.exports={slideFormula:function(l,n,a){const d=e.decode(n),o=e.decode(a);return l.replace(A,(c,r,h,b,u)=>{if(u)return c;const m=s.exec(b);if(m){const Z=m[1],p=m[2].toUpperCase(),Y=m[3],R=m[4];if(p.length>3||p.length===3&&p>"XFD")return c;let X=e.l2n(p),H=parseInt(R,10);return Z||(X+=o.col-d.col),Y||(H+=o.row-d.row),(r||"")+(Z||"")+e.n2l(X)+(Y||"")+H}return c})}}},{"./col-cache":19}],24:[function(g,C,i){(function(e,A){(function(){const s=g("readable-stream"),l=g("./utils"),n=g("./string-buf");class a{constructor(b,u){this._data=b,this._encoding=u}get length(){return this.toBuffer().length}copy(b,u,m,Z){return this.toBuffer().copy(b,u,m,Z)}toBuffer(){return this._buffer||(this._buffer=A.from(this._data,this._encoding)),this._buffer}}class d{constructor(b){this._data=b}get length(){return this._data.length}copy(b,u,m,Z){return this._data._buf.copy(b,u,m,Z)}toBuffer(){return this._data.toBuffer()}}class o{constructor(b){this._data=b}get length(){return this._data.length}copy(b,u,m,Z){this._data.copy(b,u,m,Z)}toBuffer(){return this._data}}class c{constructor(b){this.size=b,this.buffer=A.alloc(b),this.iRead=0,this.iWrite=0}toBuffer(){if(this.iRead===0&&this.iWrite===this.size)return this.buffer;const b=A.alloc(this.iWrite-this.iRead);return this.buffer.copy(b,0,this.iRead,this.iWrite),b}get length(){return this.iWrite-this.iRead}get eod(){return this.iRead===this.iWrite}get full(){return this.iWrite===this.size}read(b){let u;return b===0?null:b===void 0||b>=this.length?(u=this.toBuffer(),this.iRead=this.iWrite,u):(u=A.alloc(b),this.buffer.copy(u,0,this.iRead,b),this.iRead+=b,u)}write(b,u,m){const Z=Math.min(m,this.size-this.iWrite);return b.copy(this.buffer,this.iWrite,u,u+Z),this.iWrite+=Z,Z}}const r=function(h){h=h||{},this.bufSize=h.bufSize||1048576,this.buffers=[],this.batch=h.batch||!1,this.corked=!1,this.inPos=0,this.outPos=0,this.pipes=[],this.paused=!1,this.encoding=null};l.inherits(r,s.Duplex,{toBuffer(){switch(this.buffers.length){case 0:return null;case 1:return this.buffers[0].toBuffer();default:return A.concat(this.buffers.map(h=>h.toBuffer()))}},_getWritableBuffer(){if(this.buffers.length){const b=this.buffers[this.buffers.length-1];if(!b.full)return b}const h=new c(this.bufSize);return this.buffers.push(h),h},async _pipe(h){await Promise.all(this.pipes.map(function(b){return new Promise(u=>{b.write(h.toBuffer(),()=>{u()})})}))},_writeToBuffers(h){let b=0;const u=h.length;for(;b<u;)b+=this._getWritableBuffer().write(h,b,u-b)},async write(h,b,u){let m;if(b instanceof Function&&(u=b,b="utf8"),u=u||l.nop,h instanceof n)m=new d(h);else if(h instanceof A)m=new o(h);else{if(!(typeof h=="string"||h instanceof String||h instanceof ArrayBuffer))throw new Error("Chunk must be one of type String, Buffer or StringBuf.");m=new a(h,b)}if(this.pipes.length)if(this.batch)for(this._writeToBuffers(m);!this.corked&&this.buffers.length>1;)this._pipe(this.buffers.shift());else this.corked?(this._writeToBuffers(m),e.nextTick(u)):(await this._pipe(m),u());else this.paused||this.emit("data",m.toBuffer()),this._writeToBuffers(m),this.emit("readable");return!0},cork(){this.corked=!0},_flush(){if(this.pipes.length)for(;this.buffers.length;)this._pipe(this.buffers.shift())},uncork(){this.corked=!1,this._flush()},end(h,b,u){const m=Z=>{Z?u(Z):(this._flush(),this.pipes.forEach(p=>{p.end()}),this.emit("finish"))};h?this.write(h,b,m):m()},read(h){let b;if(h){for(b=[];h&&this.buffers.length&&!this.buffers[0].eod;){const u=this.buffers[0],m=u.read(h);h-=m.length,b.push(m),u.eod&&u.full&&this.buffers.shift()}return A.concat(b)}return b=this.buffers.map(u=>u.toBuffer()).filter(Boolean),this.buffers=[],A.concat(b)},setEncoding(h){this.encoding=h},pause(){this.paused=!0},resume(){this.paused=!1},isPaused(){return!!this.paused},pipe(h){this.pipes.push(h),!this.paused&&this.buffers.length&&this.end()},unpipe(h){this.pipes=this.pipes.filter(b=>b!==h)},unshift(){throw new Error("Not Implemented")},wrap(){throw new Error("Not Implemented")}}),C.exports=r}).call(this)}).call(this,g("_process"),g("buffer").Buffer)},{"./string-buf":25,"./utils":27,_process:467,buffer:220,"readable-stream":491}],25:[function(g,C,i){(function(e){(function(){C.exports=class{constructor(A){this._buf=e.alloc(A&&A.size||16384),this._encoding=A&&A.encoding||"utf8",this._inPos=0,this._buffer=void 0}get length(){return this._inPos}get capacity(){return this._buf.length}get buffer(){return this._buf}toBuffer(){return this._buffer||(this._buffer=e.alloc(this.length),this._buf.copy(this._buffer,0,0,this.length)),this._buffer}reset(A){A=A||0,this._buffer=void 0,this._inPos=A}_grow(A){let s=2*this._buf.length;for(;s<A;)s*=2;const l=e.alloc(s);this._buf.copy(l,0),this._buf=l}addText(A){this._buffer=void 0;let s=this._inPos+this._buf.write(A,this._inPos,this._encoding);for(;s>=this._buf.length-4;)this._grow(this._inPos+A.length),s=this._inPos+this._buf.write(A,this._inPos,this._encoding);this._inPos=s}addStringBuf(A){A.length&&(this._buffer=void 0,this.length+A.length>this.capacity&&this._grow(this.length+A.length),A._buf.copy(this._buf,this._inPos,0,A.length),this._inPos+=A.length)}}}).call(this)}).call(this,g("buffer").Buffer)},{buffer:220}],26:[function(g,C,i){const{toString:e}=Object.prototype,A=/["&<>]/,s={each:function(l,n){l&&(Array.isArray(l)?l.forEach(n):Object.keys(l).forEach(a=>{n(l[a],a)}))},some:function(l,n){return!!l&&(Array.isArray(l)?l.some(n):Object.keys(l).some(a=>n(l[a],a)))},every:function(l,n){return!l||(Array.isArray(l)?l.every(n):Object.keys(l).every(a=>n(l[a],a)))},map:function(l,n){return l?Array.isArray(l)?l.map(n):Object.keys(l).map(a=>n(l[a],a)):[]},keyBy:(l,n)=>l.reduce((a,d)=>(a[d[n]]=d,a),{}),isEqual:function(l,n){const a=typeof l,d=typeof n,o=Array.isArray(l),c=Array.isArray(n);let r;if(a!==d)return!1;switch(typeof l){case"object":if(o||c)return!(!o||!c)&&l.length===n.length&&l.every((h,b)=>{const u=n[b];return s.isEqual(h,u)});if(l===null||n===null)return l===n;if(r=Object.keys(l),Object.keys(n).length!==r.length)return!1;for(const h of r)if(!n.hasOwnProperty(h))return!1;return s.every(l,(h,b)=>{const u=n[b];return s.isEqual(h,u)});default:return l===n}},escapeHtml(l){const n=A.exec(l);if(!n)return l;let a="",d="",o=0,c=n.index;for(;c<l.length;c++){switch(l.charAt(c)){case'"':d=""";break;case"&":d="&";break;case"'":d="'";break;case"<":d="<";break;case">":d=">";break;default:continue}o!==c&&(a+=l.substring(o,c)),o=c+1,a+=d}return o!==c?a+l.substring(o,c):a},strcmp:(l,n)=>l<n?-1:l>n?1:0,isUndefined:l=>e.call(l)==="[object Undefined]",isObject:l=>e.call(l)==="[object Object]",deepMerge(){const l=arguments[0]||{},{length:n}=arguments;let a,d,o;function c(r,h){a=l[h],o=Array.isArray(r),s.isObject(r)||o?(o?(o=!1,d=a&&Array.isArray(a)?a:[]):d=a&&s.isObject(a)?a:{},l[h]=s.deepMerge(d,r)):s.isUndefined(r)||(l[h]=r)}for(let r=0;r<n;r++)s.each(arguments[r],c);return l}};C.exports=s},{}],27:[function(g,C,i){(function(e,A){(function(){const s=g("fs"),l=/[<>&'"\x7F\x00-\x08\x0B-\x0C\x0E-\x1F]/,n={nop(){},promiseImmediate:a=>new Promise(d=>{e.setImmediate?A(()=>{d(a)}):setTimeout(()=>{d(a)},1)}),inherits:function(a,d,o,c){a.super_=d,c||(c=o,o=null),o&&Object.keys(o).forEach(h=>{Object.defineProperty(a,h,Object.getOwnPropertyDescriptor(o,h))});const r={constructor:{value:a,enumerable:!1,writable:!1,configurable:!0}};c&&Object.keys(c).forEach(h=>{r[h]=Object.getOwnPropertyDescriptor(c,h)}),a.prototype=Object.create(d.prototype,r)},dateToExcel:(a,d)=>25569+a.getTime()/864e5-(d?1462:0),excelToDate(a,d){const o=Math.round(24*(a-25569+(d?1462:0))*3600*1e3);return new Date(o)},parsePath(a){const d=a.lastIndexOf("/");return{path:a.substring(0,d),name:a.substring(d+1)}},getRelsPath(a){const d=n.parsePath(a);return`${d.path}/_rels/${d.name}.rels`},xmlEncode(a){const d=l.exec(a);if(!d)return a;let o="",c="",r=0,h=d.index;for(;h<a.length;h++){const b=a.charCodeAt(h);switch(b){case 34:c=""";break;case 38:c="&";break;case 39:c="'";break;case 60:c="<";break;case 62:c=">";break;case 127:c="";break;default:if(b<=31&&(b<=8||b>=11&&b!==13)){c="";break}continue}r!==h&&(o+=a.substring(r,h)),r=h+1,c&&(o+=c)}return r!==h?o+a.substring(r,h):o},xmlDecode:a=>a.replace(/&([a-z]*);/g,d=>{switch(d){case"<":return"<";case">":return">";case"&":return"&";case"'":return"'";case""":return'"';default:return d}}),validInt(a){const d=parseInt(a,10);return Number.isNaN(d)?0:d},isDateFmt(a){return a?(a=(a=a.replace(/\[[^\]]*]/g,"")).replace(/"[^"]*"/g,"")).match(/[ymdhMsb]+/)!==null:!1},fs:{exists:a=>new Promise(d=>{s.access(a,s.constants.F_OK,o=>{d(!o)})})},toIsoDateString:a=>a.toIsoString().subsstr(0,10),parseBoolean:a=>a===!0||a==="true"||a===1||a==="1"};C.exports=n}).call(this)}).call(this,typeof FI<"u"?FI:typeof self<"u"?self:typeof window<"u"?window:{},g("timers").setImmediate)},{fs:216,timers:523}],28:[function(g,C,i){const e=g("./under-dash"),A=g("./utils");function s(a,d,o){a.push(` ${d}="${A.xmlEncode(o.toString())}"`)}function l(a,d){if(d){const o=[];e.each(d,(c,r)=>{c!==void 0&&s(o,r,c)}),a.push(o.join(""))}}class n{constructor(){this._xml=[],this._stack=[],this._rollbacks=[]}get tos(){return this._stack.length?this._stack[this._stack.length-1]:void 0}get cursor(){return this._xml.length}openXml(d){const o=this._xml;o.push("<?xml"),l(o,d),o.push(`?>
- `)}openNode(d,o){const c=this.tos,r=this._xml;c&&this.open&&r.push(">"),this._stack.push(d),r.push("<"),r.push(d),l(r,o),this.leaf=!0,this.open=!0}addAttribute(d,o){if(!this.open)throw new Error("Cannot write attributes to node if it is not open");o!==void 0&&s(this._xml,d,o)}addAttributes(d){if(!this.open)throw new Error("Cannot write attributes to node if it is not open");l(this._xml,d)}writeText(d){const o=this._xml;this.open&&(o.push(">"),this.open=!1),this.leaf=!1,o.push(A.xmlEncode(d.toString()))}writeXml(d){this.open&&(this._xml.push(">"),this.open=!1),this.leaf=!1,this._xml.push(d)}closeNode(){const d=this._stack.pop(),o=this._xml;this.leaf?o.push("/>"):(o.push("</"),o.push(d),o.push(">")),this.open=!1,this.leaf=!1}leafNode(d,o,c){this.openNode(d,o),c!==void 0&&this.writeText(c),this.closeNode()}closeAll(){for(;this._stack.length;)this.closeNode()}addRollback(){return this._rollbacks.push({xml:this._xml.length,stack:this._stack.length,leaf:this.leaf,open:this.open}),this.cursor}commit(){this._rollbacks.pop()}rollback(){const d=this._rollbacks.pop();this._xml.length>d.xml&&this._xml.splice(d.xml,this._xml.length-d.xml),this._stack.length>d.stack&&this._stack.splice(d.stack,this._stack.length-d.stack),this.leaf=d.leaf,this.open=d.open}get xml(){return this.closeAll(),this._xml.join("")}}n.StdDocAttributes={version:"1.0",encoding:"UTF-8",standalone:"yes"},C.exports=n},{"./under-dash":26,"./utils":27}],29:[function(g,C,i){(function(e){(function(){const A=g("events"),s=g("jszip"),l=g("./stream-buf"),{stringToBuffer:n}=g("./browser-buffer-encode");class a extends A.EventEmitter{constructor(o){super(),this.options=Object.assign({type:"nodebuffer",compression:"DEFLATE"},o),this.zip=new s,this.stream=new l}append(o,c){c.hasOwnProperty("base64")&&c.base64?this.zip.file(c.name,o,{base64:!0}):(e.browser&&typeof o=="string"&&(o=n(o)),this.zip.file(c.name,o))}async finalize(){const o=await this.zip.generateAsync(this.options);this.stream.end(o),this.emit("finish")}read(o){return this.stream.read(o)}setEncoding(o){return this.stream.setEncoding(o)}pause(){return this.stream.pause()}resume(){return this.stream.resume()}isPaused(){return this.stream.isPaused()}pipe(o,c){return this.stream.pipe(o,c)}unpipe(o){return this.stream.unpipe(o)}unshift(o){return this.stream.unshift(o)}wrap(o){return this.stream.wrap(o)}}C.exports={ZipWriter:a}}).call(this)}).call(this,g("_process"))},{"./browser-buffer-encode":17,"./stream-buf":24,_process:467,events:422,jszip:441}],30:[function(g,C,i){C.exports={0:{f:"General"},1:{f:"0"},2:{f:"0.00"},3:{f:"#,##0"},4:{f:"#,##0.00"},9:{f:"0%"},10:{f:"0.00%"},11:{f:"0.00E+00"},12:{f:"# ?/?"},13:{f:"# ??/??"},14:{f:"mm-dd-yy"},15:{f:"d-mmm-yy"},16:{f:"d-mmm"},17:{f:"mmm-yy"},18:{f:"h:mm AM/PM"},19:{f:"h:mm:ss AM/PM"},20:{f:"h:mm"},21:{f:"h:mm:ss"},22:{f:'m/d/yy "h":mm'},27:{"zh-tw":"[$-404]e/m/d","zh-cn":'yyyy"年"m"月"',"ja-jp":"[$-411]ge.m.d","ko-kr":'yyyy"年" mm"月" dd"日"'},28:{"zh-tw":'[$-404]e"年"m"月"d"日"',"zh-cn":'m"月"d"日"',"ja-jp":'[$-411]ggge"年"m"月"d"日"',"ko-kr":"mm-dd"},29:{"zh-tw":'[$-404]e"年"m"月"d"日"',"zh-cn":'m"月"d"日"',"ja-jp":'[$-411]ggge"年"m"月"d"日"',"ko-kr":"mm-dd"},30:{"zh-tw":"m/d/yy ","zh-cn":"m-d-yy","ja-jp":"m/d/yy","ko-kr":"mm-dd-yy"},31:{"zh-tw":'yyyy"年"m"月"d"日"',"zh-cn":'yyyy"年"m"月"d"日"',"ja-jp":'yyyy"年"m"月"d"日"',"ko-kr":'yyyy"년" mm"월" dd"일"'},32:{"zh-tw":'hh"時"mm"分"',"zh-cn":'h"时"mm"分"',"ja-jp":'h"時"mm"分"',"ko-kr":'h"시" mm"분"'},33:{"zh-tw":'hh"時"mm"分"ss"秒"',"zh-cn":'h"时"mm"分"ss"秒"',"ja-jp":'h"時"mm"分"ss"秒"',"ko-kr":'h"시" mm"분" ss"초"'},34:{"zh-tw":'上午/下午 hh"時"mm"分"',"zh-cn":'上午/下午 h"时"mm"分"',"ja-jp":'yyyy"年"m"月"',"ko-kr":"yyyy-mm-dd"},35:{"zh-tw":'上午/下午 hh"時"mm"分"ss"秒"',"zh-cn":'上午/下午 h"时"mm"分"ss"秒"',"ja-jp":'m"月"d"日"',"ko-kr":"yyyy-mm-dd"},36:{"zh-tw":"[$-404]e/m/d","zh-cn":'yyyy"年"m"月"',"ja-jp":"[$-411]ge.m.d","ko-kr":'yyyy"年" mm"月" dd"日"'},37:{f:"#,##0 ;(#,##0)"},38:{f:"#,##0 ;[Red](#,##0)"},39:{f:"#,##0.00 ;(#,##0.00)"},40:{f:"#,##0.00 ;[Red](#,##0.00)"},45:{f:"mm:ss"},46:{f:"[h]:mm:ss"},47:{f:"mmss.0"},48:{f:"##0.0E+0"},49:{f:"@"},50:{"zh-tw":"[$-404]e/m/d","zh-cn":'yyyy"年"m"月"',"ja-jp":"[$-411]ge.m.d","ko-kr":'yyyy"年" mm"月" dd"日"'},51:{"zh-tw":'[$-404]e"年"m"月"d"日"',"zh-cn":'m"月"d"日"',"ja-jp":'[$-411]ggge"年"m"月"d"日"',"ko-kr":"mm-dd"},52:{"zh-tw":'上午/下午 hh"時"mm"分"',"zh-cn":'yyyy"年"m"月"',"ja-jp":'yyyy"年"m"月"',"ko-kr":"yyyy-mm-dd"},53:{"zh-tw":'上午/下午 hh"時"mm"分"ss"秒"',"zh-cn":'m"月"d"日"',"ja-jp":'m"月"d"日"',"ko-kr":"yyyy-mm-dd"},54:{"zh-tw":'[$-404]e"年"m"月"d"日"',"zh-cn":'m"月"d"日"',"ja-jp":'[$-411]ggge"年"m"月"d"日"',"ko-kr":"mm-dd"},55:{"zh-tw":'上午/下午 hh"時"mm"分"',"zh-cn":'上午/下午 h"时"mm"分"',"ja-jp":'yyyy"年"m"月"',"ko-kr":"yyyy-mm-dd"},56:{"zh-tw":'上午/下午 hh"時"mm"分"ss"秒"',"zh-cn":'上午/下午 h"时"mm"分"ss"秒"',"ja-jp":'m"月"d"日"',"ko-kr":"yyyy-mm-dd"},57:{"zh-tw":"[$-404]e/m/d","zh-cn":'yyyy"年"m"月"',"ja-jp":"[$-411]ge.m.d","ko-kr":'yyyy"年" mm"月" dd"日"'},58:{"zh-tw":'[$-404]e"年"m"月"d"日"',"zh-cn":'m"月"d"日"',"ja-jp":'[$-411]ggge"年"m"月"d"日"',"ko-kr":"mm-dd"},59:{"th-th":"t0"},60:{"th-th":"t0.00"},61:{"th-th":"t#,##0"},62:{"th-th":"t#,##0.00"},67:{"th-th":"t0%"},68:{"th-th":"t0.00%"},69:{"th-th":"t# ?/?"},70:{"th-th":"t# ??/??"},81:{"th-th":"d/m/bb"}}},{}],31:[function(g,C,i){C.exports={OfficeDocument:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",Worksheet:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet",CalcChain:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain",SharedStrings:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings",Styles:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles",Theme:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",Hyperlink:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",Image:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",CoreProperties:"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties",ExtenderProperties:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties",Comments:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments",VmlDrawing:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing",Table:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/table"}},{}],32:[function(g,C,i){const e=g("../../utils/parse-sax"),A=g("../../utils/xml-stream");class s{prepare(){}render(){}parseOpen(n){}parseText(n){}parseClose(n){}reconcile(n,a){}reset(){this.model=null,this.map&&Object.values(this.map).forEach(n=>{n instanceof s?n.reset():n.xform&&n.xform.reset()})}mergeModel(n){this.model=Object.assign(this.model||{},n)}async parse(n){for await(const a of n)for(const{eventType:d,value:o}of a)if(d==="opentag")this.parseOpen(o);else if(d==="text")this.parseText(o);else if(d==="closetag"&&!this.parseClose(o.name))return this.model;return this.model}async parseStream(n){return this.parse(e(n))}get xml(){return this.toXml(this.model)}toXml(n){const a=new A;return this.render(a,n),a.xml}static toAttribute(n,a){let d=arguments.length>2&&arguments[2]!==void 0&&arguments[2];if(n===void 0){if(d)return a}else if(d||n!==a)return n.toString()}static toStringAttribute(n,a){let d=arguments.length>2&&arguments[2]!==void 0&&arguments[2];return s.toAttribute(n,a,d)}static toStringValue(n,a){return n===void 0?a:n}static toBoolAttribute(n,a){let d=arguments.length>2&&arguments[2]!==void 0&&arguments[2];if(n===void 0){if(d)return a}else if(d||n!==a)return n?"1":"0"}static toBoolValue(n,a){return n===void 0?a:n==="1"}static toIntAttribute(n,a){let d=arguments.length>2&&arguments[2]!==void 0&&arguments[2];return s.toAttribute(n,a,d)}static toIntValue(n,a){return n===void 0?a:parseInt(n,10)}static toFloatAttribute(n,a){let d=arguments.length>2&&arguments[2]!==void 0&&arguments[2];return s.toAttribute(n,a,d)}static toFloatValue(n,a){return n===void 0?a:parseFloat(n)}}C.exports=s},{"../../utils/parse-sax":22,"../../utils/xml-stream":28}],33:[function(g,C,i){const e=g("../base-xform"),A=g("../../../utils/col-cache");function s(n){try{return A.decodeEx(n),!0}catch{return!1}}function l(n){const a=[];let d=!1,o="";return n.split(",").forEach(c=>{if(!c)return;const r=(c.match(/'/g)||[]).length;if(!r)return void(d?o+=c+",":s(c)&&a.push(c));const h=r%2==0;!d&&h&&s(c)?a.push(c):d&&!h?(d=!1,s(o+c)&&a.push(o+c),o=""):(d=!0,o+=c+",")}),a}C.exports=class extends e{render(n,a){n.openNode("definedName",{name:a.name,localSheetId:a.localSheetId}),n.writeText(a.ranges.join(",")),n.closeNode()}parseOpen(n){switch(n.name){case"definedName":return this._parsedName=n.attributes.name,this._parsedLocalSheetId=n.attributes.localSheetId,this._parsedText=[],!0;default:return!1}}parseText(n){this._parsedText.push(n)}parseClose(){return this.model={name:this._parsedName,ranges:l(this._parsedText.join(""))},this._parsedLocalSheetId!==void 0&&(this.model.localSheetId=parseInt(this._parsedLocalSheetId,10)),!1}}},{"../../../utils/col-cache":19,"../base-xform":32}],34:[function(g,C,i){const e=g("../../../utils/utils"),A=g("../base-xform");C.exports=class extends A{render(s,l){s.leafNode("sheet",{sheetId:l.id,name:l.name,state:l.state,"r:id":l.rId})}parseOpen(s){return s.name==="sheet"&&(this.model={name:e.xmlDecode(s.attributes.name),id:parseInt(s.attributes.sheetId,10),state:s.attributes.state,rId:s.attributes["r:id"]},!0)}parseText(){}parseClose(){return!1}}},{"../../../utils/utils":27,"../base-xform":32}],35:[function(g,C,i){const e=g("../base-xform");C.exports=class extends e{render(A,s){A.leafNode("calcPr",{calcId:171027,fullCalcOnLoad:s.fullCalcOnLoad?1:void 0})}parseOpen(A){return A.name==="calcPr"&&(this.model={},!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],36:[function(g,C,i){const e=g("../base-xform");C.exports=class extends e{render(A,s){A.leafNode("workbookPr",{date1904:s.date1904?1:void 0,defaultThemeVersion:164011,filterPrivacy:1})}parseOpen(A){return A.name==="workbookPr"&&(this.model={date1904:A.attributes.date1904==="1"},!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],37:[function(g,C,i){const e=g("../base-xform");C.exports=class extends e{render(A,s){const l={xWindow:s.x||0,yWindow:s.y||0,windowWidth:s.width||12e3,windowHeight:s.height||24e3,firstSheet:s.firstSheet,activeTab:s.activeTab};s.visibility&&s.visibility!=="visible"&&(l.visibility=s.visibility),A.leafNode("workbookView",l)}parseOpen(A){if(A.name==="workbookView"){const s=this.model={},l=function(a,d,o){const c=d!==void 0?s[a]=d:o;c!==void 0&&(s[a]=c)},n=function(a,d,o){const c=d!==void 0?s[a]=parseInt(d,10):o;c!==void 0&&(s[a]=c)};return n("x",A.attributes.xWindow,0),n("y",A.attributes.yWindow,0),n("width",A.attributes.windowWidth,25e3),n("height",A.attributes.windowHeight,1e4),l("visibility",A.attributes.visibility,"visible"),n("activeTab",A.attributes.activeTab,void 0),n("firstSheet",A.attributes.firstSheet,void 0),!0}return!1}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],38:[function(g,C,i){const e=g("../../../utils/under-dash"),A=g("../../../utils/col-cache"),s=g("../../../utils/xml-stream"),l=g("../base-xform"),n=g("../static-xform"),a=g("../list-xform"),d=g("./defined-name-xform"),o=g("./sheet-xform"),c=g("./workbook-view-xform"),r=g("./workbook-properties-xform"),h=g("./workbook-calc-properties-xform");class b extends l{constructor(){super(),this.map={fileVersion:b.STATIC_XFORMS.fileVersion,workbookPr:new r,bookViews:new a({tag:"bookViews",count:!1,childXform:new c}),sheets:new a({tag:"sheets",count:!1,childXform:new o}),definedNames:new a({tag:"definedNames",count:!1,childXform:new d}),calcPr:new h}}prepare(m){m.sheets=m.worksheets;const Z=[];let p=0;m.sheets.forEach(Y=>{if(Y.pageSetup&&Y.pageSetup.printArea&&Y.pageSetup.printArea.split("&&").forEach(R=>{const X=R.split(":"),H={name:"_xlnm.Print_Area",ranges:[`'${Y.name}'!$${X[0]}:$${X[1]}`],localSheetId:p};Z.push(H)}),Y.pageSetup&&(Y.pageSetup.printTitlesRow||Y.pageSetup.printTitlesColumn)){const R=[];if(Y.pageSetup.printTitlesColumn){const H=Y.pageSetup.printTitlesColumn.split(":");R.push(`'${Y.name}'!$${H[0]}:$${H[1]}`)}if(Y.pageSetup.printTitlesRow){const H=Y.pageSetup.printTitlesRow.split(":");R.push(`'${Y.name}'!$${H[0]}:$${H[1]}`)}const X={name:"_xlnm.Print_Titles",ranges:R,localSheetId:p};Z.push(X)}p++}),Z.length&&(m.definedNames=m.definedNames.concat(Z)),(m.media||[]).forEach((Y,R)=>{Y.name=Y.type+(R+1)})}render(m,Z){m.openXml(s.StdDocAttributes),m.openNode("workbook",b.WORKBOOK_ATTRIBUTES),this.map.fileVersion.render(m),this.map.workbookPr.render(m,Z.properties),this.map.bookViews.render(m,Z.views),this.map.sheets.render(m,Z.sheets),this.map.definedNames.render(m,Z.definedNames),this.map.calcPr.render(m,Z.calcProperties),m.closeNode()}parseOpen(m){if(this.parser)return this.parser.parseOpen(m),!0;switch(m.name){case"workbook":return!0;default:return this.parser=this.map[m.name],this.parser&&this.parser.parseOpen(m),!0}}parseText(m){this.parser&&this.parser.parseText(m)}parseClose(m){if(this.parser)return this.parser.parseClose(m)||(this.parser=void 0),!0;switch(m){case"workbook":return this.model={sheets:this.map.sheets.model,properties:this.map.workbookPr.model||{},views:this.map.bookViews.model,calcProperties:{}},this.map.definedNames.model&&(this.model.definedNames=this.map.definedNames.model),!1;default:return!0}}reconcile(m){const Z=(m.workbookRels||[]).reduce((H,S)=>(H[S.Id]=S,H),{}),p=[];let Y,R=0;(m.sheets||[]).forEach(H=>{const S=Z[H.rId];S&&(Y=m.worksheetHash["xl/"+S.Target.replace(/^(\s|\/xl\/)+/,"")],Y&&(Y.name=H.name,Y.id=H.id,Y.state=H.state,p[R++]=Y))});const X=[];e.each(m.definedNames,H=>{if(H.name==="_xlnm.Print_Area"){if(Y=p[H.localSheetId],Y){Y.pageSetup||(Y.pageSetup={});const S=A.decodeEx(H.ranges[0]);Y.pageSetup.printArea=Y.pageSetup.printArea?`${Y.pageSetup.printArea}&&${S.dimensions}`:S.dimensions}}else if(H.name==="_xlnm.Print_Titles"){if(Y=p[H.localSheetId],Y){Y.pageSetup||(Y.pageSetup={});const S=H.ranges.join(","),z=/\$/g,v=/\$\d+:\$\d+/,K=S.match(v);if(K&&K.length){const B=K[0];Y.pageSetup.printTitlesRow=B.replace(z,"")}const V=/\$[A-Z]+:\$[A-Z]+/,N=S.match(V);if(N&&N.length){const B=N[0];Y.pageSetup.printTitlesColumn=B.replace(z,"")}}}else X.push(H)}),m.definedNames=X,m.media.forEach((H,S)=>{H.index=S})}}b.WORKBOOK_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main","xmlns:r":"http://schemas.openxmlformats.org/officeDocument/2006/relationships","xmlns:mc":"http://schemas.openxmlformats.org/markup-compatibility/2006","mc:Ignorable":"x15","xmlns:x15":"http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"},b.STATIC_XFORMS={fileVersion:new n({tag:"fileVersion",$:{appName:"xl",lastEdited:5,lowestEdited:5,rupBuild:9303}})},C.exports=b},{"../../../utils/col-cache":19,"../../../utils/under-dash":26,"../../../utils/xml-stream":28,"../base-xform":32,"../list-xform":71,"../static-xform":120,"./defined-name-xform":33,"./sheet-xform":34,"./workbook-calc-properties-xform":35,"./workbook-properties-xform":36,"./workbook-view-xform":37}],39:[function(g,C,i){const e=g("../strings/rich-text-xform"),A=g("../../../utils/utils"),s=g("../base-xform"),l=C.exports=function(n){this.model=n};A.inherits(l,s,{get tag(){return"r"},get richTextXform(){return this._richTextXform||(this._richTextXform=new e),this._richTextXform},render(n,a){a=a||this.model,n.openNode("comment",{ref:a.ref,authorId:0}),n.openNode("text"),a&&a.note&&a.note.texts&&a.note.texts.forEach(d=>{this.richTextXform.render(n,d)}),n.closeNode(),n.closeNode()},parseOpen(n){if(this.parser)return this.parser.parseOpen(n),!0;switch(n.name){case"comment":return this.model={type:"note",note:{texts:[]},...n.attributes},!0;case"r":return this.parser=this.richTextXform,this.parser.parseOpen(n),!0;default:return!1}},parseText(n){this.parser&&this.parser.parseText(n)},parseClose(n){switch(n){case"comment":return!1;case"r":return this.model.note.texts.push(this.parser.model),this.parser=void 0,!0;default:return this.parser&&this.parser.parseClose(n),!0}}})},{"../../../utils/utils":27,"../base-xform":32,"../strings/rich-text-xform":122}],40:[function(g,C,i){const e=g("../../../utils/xml-stream"),A=g("../../../utils/utils"),s=g("../base-xform"),l=g("./comment-xform"),n=C.exports=function(){this.map={comment:new l}};A.inherits(n,s,{COMMENTS_ATTRIBUTES:{xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main"}},{render(a,d){d=d||this.model,a.openXml(e.StdDocAttributes),a.openNode("comments",n.COMMENTS_ATTRIBUTES),a.openNode("authors"),a.leafNode("author",null,"Author"),a.closeNode(),a.openNode("commentList"),d.comments.forEach(o=>{this.map.comment.render(a,o)}),a.closeNode(),a.closeNode()},parseOpen(a){if(this.parser)return this.parser.parseOpen(a),!0;switch(a.name){case"commentList":return this.model={comments:[]},!0;case"comment":return this.parser=this.map.comment,this.parser.parseOpen(a),!0;default:return!1}},parseText(a){this.parser&&this.parser.parseText(a)},parseClose(a){switch(a){case"commentList":return!1;case"comment":return this.model.comments.push(this.parser.model),this.parser=void 0,!0;default:return this.parser&&this.parser.parseClose(a),!0}}})},{"../../../utils/utils":27,"../../../utils/xml-stream":28,"../base-xform":32,"./comment-xform":39}],41:[function(g,C,i){const e=g("../../base-xform");C.exports=class extends e{constructor(A){super(),this._model=A}get tag(){return this._model&&this._model.tag}render(A,s,l){(s===l[2]||this.tag==="x:SizeWithCells"&&s===l[1])&&A.leafNode(this.tag)}parseOpen(A){switch(A.name){case this.tag:return this.model={},this.model[this.tag]=!0,!0;default:return!1}}parseText(){}parseClose(){return!1}}},{"../../base-xform":32}],42:[function(g,C,i){const e=g("../../base-xform");C.exports=class extends e{constructor(A){super(),this._model=A}get tag(){return this._model&&this._model.tag}render(A,s){A.leafNode(this.tag,null,s)}parseOpen(A){switch(A.name){case this.tag:return this.text="",!0;default:return!1}}parseText(A){this.text=A}parseClose(){return!1}}},{"../../base-xform":32}],43:[function(g,C,i){const e=g("../base-xform");C.exports=class extends e{get tag(){return"x:Anchor"}getAnchorRect(A){const s=Math.floor(A.left),l=Math.floor(68*(A.left-s)),n=Math.floor(A.top),a=Math.floor(18*(A.top-n)),d=Math.floor(A.right),o=Math.floor(68*(A.right-d)),c=Math.floor(A.bottom);return[s,l,n,a,d,o,c,Math.floor(18*(A.bottom-c))]}getDefaultRect(A){const s=A.col,l=Math.max(A.row-2,0);return[s,6,l,14,s+2,2,l+4,16]}render(A,s){const l=s.anchor?this.getAnchorRect(s.anchor):this.getDefaultRect(s.refAddress);A.leafNode("x:Anchor",null,l.join(", "))}parseOpen(A){switch(A.name){case this.tag:return this.text="",!0;default:return!1}}parseText(A){this.text=A}parseClose(){return!1}}},{"../base-xform":32}],44:[function(g,C,i){const e=g("../base-xform"),A=g("./vml-anchor-xform"),s=g("./style/vml-protection-xform"),l=g("./style/vml-position-xform"),n=["twoCells","oneCells","absolute"];C.exports=class extends e{constructor(){super(),this.map={"x:Anchor":new A,"x:Locked":new s({tag:"x:Locked"}),"x:LockText":new s({tag:"x:LockText"}),"x:SizeWithCells":new l({tag:"x:SizeWithCells"}),"x:MoveWithCells":new l({tag:"x:MoveWithCells"})}}get tag(){return"x:ClientData"}render(a,d){const{protection:o,editAs:c}=d.note;a.openNode(this.tag,{ObjectType:"Note"}),this.map["x:MoveWithCells"].render(a,c,n),this.map["x:SizeWithCells"].render(a,c,n),this.map["x:Anchor"].render(a,d),this.map["x:Locked"].render(a,o.locked),a.leafNode("x:AutoFill",null,"False"),this.map["x:LockText"].render(a,o.lockText),a.leafNode("x:Row",null,d.refAddress.row-1),a.leafNode("x:Column",null,d.refAddress.col-1),a.closeNode()}parseOpen(a){switch(a.name){case this.tag:this.reset(),this.model={anchor:[],protection:{},editAs:""};break;default:this.parser=this.map[a.name],this.parser&&this.parser.parseOpen(a)}return!0}parseText(a){this.parser&&this.parser.parseText(a)}parseClose(a){if(this.parser)return this.parser.parseClose(a)||(this.parser=void 0),!0;switch(a){case this.tag:return this.normalizeModel(),!1;default:return!0}}normalizeModel(){const a=Object.assign({},this.map["x:MoveWithCells"].model,this.map["x:SizeWithCells"].model),d=Object.keys(a).length;this.model.editAs=n[d],this.model.anchor=this.map["x:Anchor"].text,this.model.protection.locked=this.map["x:Locked"].text,this.model.protection.lockText=this.map["x:LockText"].text}}},{"../base-xform":32,"./style/vml-position-xform":41,"./style/vml-protection-xform":42,"./vml-anchor-xform":43}],45:[function(g,C,i){const e=g("../../../utils/xml-stream"),A=g("../base-xform"),s=g("./vml-shape-xform");class l extends A{constructor(){super(),this.map={"v:shape":new s}}get tag(){return"xml"}render(a,d){a.openXml(e.StdDocAttributes),a.openNode(this.tag,l.DRAWING_ATTRIBUTES),a.openNode("o:shapelayout",{"v:ext":"edit"}),a.leafNode("o:idmap",{"v:ext":"edit",data:1}),a.closeNode(),a.openNode("v:shapetype",{id:"_x0000_t202",coordsize:"21600,21600","o:spt":202,path:"m,l,21600r21600,l21600,xe"}),a.leafNode("v:stroke",{joinstyle:"miter"}),a.leafNode("v:path",{gradientshapeok:"t","o:connecttype":"rect"}),a.closeNode(),d.comments.forEach((o,c)=>{this.map["v:shape"].render(a,o,c)}),a.closeNode()}parseOpen(a){if(this.parser)return this.parser.parseOpen(a),!0;switch(a.name){case this.tag:this.reset(),this.model={comments:[]};break;default:this.parser=this.map[a.name],this.parser&&this.parser.parseOpen(a)}return!0}parseText(a){this.parser&&this.parser.parseText(a)}parseClose(a){if(this.parser)return this.parser.parseClose(a)||(this.model.comments.push(this.parser.model),this.parser=void 0),!0;switch(a){case this.tag:return!1;default:return!0}}reconcile(a,d){a.anchors.forEach(o=>{o.br?this.map["xdr:twoCellAnchor"].reconcile(o,d):this.map["xdr:oneCellAnchor"].reconcile(o,d)})}}l.DRAWING_ATTRIBUTES={"xmlns:v":"urn:schemas-microsoft-com:vml","xmlns:o":"urn:schemas-microsoft-com:office:office","xmlns:x":"urn:schemas-microsoft-com:office:excel"},C.exports=l},{"../../../utils/xml-stream":28,"../base-xform":32,"./vml-shape-xform":46}],46:[function(g,C,i){const e=g("../base-xform"),A=g("./vml-textbox-xform"),s=g("./vml-client-data-xform");class l extends e{constructor(){super(),this.map={"v:textbox":new A,"x:ClientData":new s}}get tag(){return"v:shape"}render(a,d,o){a.openNode("v:shape",l.V_SHAPE_ATTRIBUTES(d,o)),a.leafNode("v:fill",{color2:"infoBackground [80]"}),a.leafNode("v:shadow",{color:"none [81]",obscured:"t"}),a.leafNode("v:path",{"o:connecttype":"none"}),this.map["v:textbox"].render(a,d),this.map["x:ClientData"].render(a,d),a.closeNode()}parseOpen(a){if(this.parser)return this.parser.parseOpen(a),!0;switch(a.name){case this.tag:this.reset(),this.model={margins:{insetmode:a.attributes["o:insetmode"]},anchor:"",editAs:"",protection:{}};break;default:this.parser=this.map[a.name],this.parser&&this.parser.parseOpen(a)}return!0}parseText(a){this.parser&&this.parser.parseText(a)}parseClose(a){if(this.parser)return this.parser.parseClose(a)||(this.parser=void 0),!0;switch(a){case this.tag:return this.model.margins.inset=this.map["v:textbox"].model&&this.map["v:textbox"].model.inset,this.model.protection=this.map["x:ClientData"].model&&this.map["x:ClientData"].model.protection,this.model.anchor=this.map["x:ClientData"].model&&this.map["x:ClientData"].model.anchor,this.model.editAs=this.map["x:ClientData"].model&&this.map["x:ClientData"].model.editAs,!1;default:return!0}}}l.V_SHAPE_ATTRIBUTES=(n,a)=>({id:"_x0000_s"+(1025+a),type:"#_x0000_t202",style:"position:absolute; margin-left:105.3pt;margin-top:10.5pt;width:97.8pt;height:59.1pt;z-index:1;visibility:hidden",fillcolor:"infoBackground [80]",strokecolor:"none [81]","o:insetmode":n.note.margins&&n.note.margins.insetmode}),C.exports=l},{"../base-xform":32,"./vml-client-data-xform":44,"./vml-textbox-xform":47}],47:[function(g,C,i){const e=g("../base-xform");C.exports=class extends e{get tag(){return"v:textbox"}conversionUnit(A,s,l){return`${parseFloat(A)*s.toFixed(2)}${l}`}reverseConversionUnit(A){return(A||"").split(",").map(s=>Number(parseFloat(this.conversionUnit(parseFloat(s),.1,"")).toFixed(2)))}render(A,s){const l={style:"mso-direction-alt:auto"};if(s&&s.note){let{inset:n}=s.note&&s.note.margins;Array.isArray(n)&&(n=n.map(a=>this.conversionUnit(a,10,"mm")).join(",")),n&&(l.inset=n)}A.openNode("v:textbox",l),A.leafNode("div",{style:"text-align:left"}),A.closeNode()}parseOpen(A){switch(A.name){case this.tag:return this.model={inset:this.reverseConversionUnit(A.attributes.inset)},!0;default:return!0}}parseText(){}parseClose(A){switch(A){case this.tag:return!1;default:return!0}}}},{"../base-xform":32}],48:[function(g,C,i){const e=g("./base-xform");C.exports=class extends e{createNewModel(A){return{}}parseOpen(A){return this.parser=this.parser||this.map[A.name],this.parser?(this.parser.parseOpen(A),!0):A.name===this.tag&&(this.model=this.createNewModel(A),!0)}parseText(A){this.parser&&this.parser.parseText(A)}onParserClose(A,s){this.model[A]=s.model}parseClose(A){return this.parser?(this.parser.parseClose(A)||(this.onParserClose(A,this.parser),this.parser=void 0),!0):A!==this.tag}}},{"./base-xform":32}],49:[function(g,C,i){const e=g("../base-xform");C.exports=class extends e{render(A,s){A.openNode("HeadingPairs"),A.openNode("vt:vector",{size:2,baseType:"variant"}),A.openNode("vt:variant"),A.leafNode("vt:lpstr",void 0,"Worksheets"),A.closeNode(),A.openNode("vt:variant"),A.leafNode("vt:i4",void 0,s.length),A.closeNode(),A.closeNode(),A.closeNode()}parseOpen(A){return A.name==="HeadingPairs"}parseText(){}parseClose(A){return A!=="HeadingPairs"}}},{"../base-xform":32}],50:[function(g,C,i){const e=g("../base-xform");C.exports=class extends e{render(A,s){A.openNode("TitlesOfParts"),A.openNode("vt:vector",{size:s.length,baseType:"lpstr"}),s.forEach(l=>{A.leafNode("vt:lpstr",void 0,l.name)}),A.closeNode(),A.closeNode()}parseOpen(A){return A.name==="TitlesOfParts"}parseText(){}parseClose(A){return A!=="TitlesOfParts"}}},{"../base-xform":32}],51:[function(g,C,i){const e=g("../../../utils/xml-stream"),A=g("../base-xform"),s=g("../simple/string-xform"),l=g("./app-heading-pairs-xform"),n=g("./app-titles-of-parts-xform");class a extends A{constructor(){super(),this.map={Company:new s({tag:"Company"}),Manager:new s({tag:"Manager"}),HeadingPairs:new l,TitleOfParts:new n}}render(o,c){o.openXml(e.StdDocAttributes),o.openNode("Properties",a.PROPERTY_ATTRIBUTES),o.leafNode("Application",void 0,"Microsoft Excel"),o.leafNode("DocSecurity",void 0,"0"),o.leafNode("ScaleCrop",void 0,"false"),this.map.HeadingPairs.render(o,c.worksheets),this.map.TitleOfParts.render(o,c.worksheets),this.map.Company.render(o,c.company||""),this.map.Manager.render(o,c.manager),o.leafNode("LinksUpToDate",void 0,"false"),o.leafNode("SharedDoc",void 0,"false"),o.leafNode("HyperlinksChanged",void 0,"false"),o.leafNode("AppVersion",void 0,"16.0300"),o.closeNode()}parseOpen(o){if(this.parser)return this.parser.parseOpen(o),!0;switch(o.name){case"Properties":return!0;default:return this.parser=this.map[o.name],!!this.parser&&(this.parser.parseOpen(o),!0)}}parseText(o){this.parser&&this.parser.parseText(o)}parseClose(o){if(this.parser)return this.parser.parseClose(o)||(this.parser=void 0),!0;switch(o){case"Properties":return this.model={worksheets:this.map.TitleOfParts.model,company:this.map.Company.model,manager:this.map.Manager.model},!1;default:return!0}}}a.DateFormat=function(d){return d.toISOString().replace(/[.]\d{3,6}/,"")},a.DateAttrs={"xsi:type":"dcterms:W3CDTF"},a.PROPERTY_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties","xmlns:vt":"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"},C.exports=a},{"../../../utils/xml-stream":28,"../base-xform":32,"../simple/string-xform":119,"./app-heading-pairs-xform":49,"./app-titles-of-parts-xform":50}],52:[function(g,C,i){const e=g("../../../utils/xml-stream"),A=g("../base-xform");class s extends A{render(n,a){n.openXml(e.StdDocAttributes),n.openNode("Types",s.PROPERTY_ATTRIBUTES);const d={};(a.media||[]).forEach(o=>{if(o.type==="image"){const c=o.extension;d[c]||(d[c]=!0,n.leafNode("Default",{Extension:c,ContentType:"image/"+c}))}}),n.leafNode("Default",{Extension:"rels",ContentType:"application/vnd.openxmlformats-package.relationships+xml"}),n.leafNode("Default",{Extension:"xml",ContentType:"application/xml"}),n.leafNode("Override",{PartName:"/xl/workbook.xml",ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"}),a.worksheets.forEach(o=>{const c=`/xl/worksheets/sheet${o.id}.xml`;n.leafNode("Override",{PartName:c,ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"})}),n.leafNode("Override",{PartName:"/xl/theme/theme1.xml",ContentType:"application/vnd.openxmlformats-officedocument.theme+xml"}),n.leafNode("Override",{PartName:"/xl/styles.xml",ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"}),a.sharedStrings&&a.sharedStrings.count&&n.leafNode("Override",{PartName:"/xl/sharedStrings.xml",ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml"}),a.tables&&a.tables.forEach(o=>{n.leafNode("Override",{PartName:"/xl/tables/"+o.target,ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml"})}),a.drawings&&a.drawings.forEach(o=>{n.leafNode("Override",{PartName:`/xl/drawings/${o.name}.xml`,ContentType:"application/vnd.openxmlformats-officedocument.drawing+xml"})}),a.commentRefs&&(n.leafNode("Default",{Extension:"vml",ContentType:"application/vnd.openxmlformats-officedocument.vmlDrawing"}),a.commentRefs.forEach(o=>{let{commentName:c}=o;n.leafNode("Override",{PartName:`/xl/${c}.xml`,ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml"})})),n.leafNode("Override",{PartName:"/docProps/core.xml",ContentType:"application/vnd.openxmlformats-package.core-properties+xml"}),n.leafNode("Override",{PartName:"/docProps/app.xml",ContentType:"application/vnd.openxmlformats-officedocument.extended-properties+xml"}),n.closeNode()}parseOpen(){return!1}parseText(){}parseClose(){return!1}}s.PROPERTY_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/package/2006/content-types"},C.exports=s},{"../../../utils/xml-stream":28,"../base-xform":32}],53:[function(g,C,i){const e=g("../../../utils/xml-stream"),A=g("../base-xform"),s=g("../simple/date-xform"),l=g("../simple/string-xform"),n=g("../simple/integer-xform");class a extends A{constructor(){super(),this.map={"dc:creator":new l({tag:"dc:creator"}),"dc:title":new l({tag:"dc:title"}),"dc:subject":new l({tag:"dc:subject"}),"dc:description":new l({tag:"dc:description"}),"dc:identifier":new l({tag:"dc:identifier"}),"dc:language":new l({tag:"dc:language"}),"cp:keywords":new l({tag:"cp:keywords"}),"cp:category":new l({tag:"cp:category"}),"cp:lastModifiedBy":new l({tag:"cp:lastModifiedBy"}),"cp:lastPrinted":new s({tag:"cp:lastPrinted",format:a.DateFormat}),"cp:revision":new n({tag:"cp:revision"}),"cp:version":new l({tag:"cp:version"}),"cp:contentStatus":new l({tag:"cp:contentStatus"}),"cp:contentType":new l({tag:"cp:contentType"}),"dcterms:created":new s({tag:"dcterms:created",attrs:a.DateAttrs,format:a.DateFormat}),"dcterms:modified":new s({tag:"dcterms:modified",attrs:a.DateAttrs,format:a.DateFormat})}}render(o,c){o.openXml(e.StdDocAttributes),o.openNode("cp:coreProperties",a.CORE_PROPERTY_ATTRIBUTES),this.map["dc:creator"].render(o,c.creator),this.map["dc:title"].render(o,c.title),this.map["dc:subject"].render(o,c.subject),this.map["dc:description"].render(o,c.description),this.map["dc:identifier"].render(o,c.identifier),this.map["dc:language"].render(o,c.language),this.map["cp:keywords"].render(o,c.keywords),this.map["cp:category"].render(o,c.category),this.map["cp:lastModifiedBy"].render(o,c.lastModifiedBy),this.map["cp:lastPrinted"].render(o,c.lastPrinted),this.map["cp:revision"].render(o,c.revision),this.map["cp:version"].render(o,c.version),this.map["cp:contentStatus"].render(o,c.contentStatus),this.map["cp:contentType"].render(o,c.contentType),this.map["dcterms:created"].render(o,c.created),this.map["dcterms:modified"].render(o,c.modified),o.closeNode()}parseOpen(o){if(this.parser)return this.parser.parseOpen(o),!0;switch(o.name){case"cp:coreProperties":case"coreProperties":return!0;default:if(this.parser=this.map[o.name],this.parser)return this.parser.parseOpen(o),!0;throw new Error("Unexpected xml node in parseOpen: "+JSON.stringify(o))}}parseText(o){this.parser&&this.parser.parseText(o)}parseClose(o){if(this.parser)return this.parser.parseClose(o)||(this.parser=void 0),!0;switch(o){case"cp:coreProperties":case"coreProperties":return this.model={creator:this.map["dc:creator"].model,title:this.map["dc:title"].model,subject:this.map["dc:subject"].model,description:this.map["dc:description"].model,identifier:this.map["dc:identifier"].model,language:this.map["dc:language"].model,keywords:this.map["cp:keywords"].model,category:this.map["cp:category"].model,lastModifiedBy:this.map["cp:lastModifiedBy"].model,lastPrinted:this.map["cp:lastPrinted"].model,revision:this.map["cp:revision"].model,contentStatus:this.map["cp:contentStatus"].model,contentType:this.map["cp:contentType"].model,created:this.map["dcterms:created"].model,modified:this.map["dcterms:modified"].model},!1;default:throw new Error("Unexpected xml node in parseClose: "+o)}}}a.DateFormat=function(d){return d.toISOString().replace(/[.]\d{3}/,"")},a.DateAttrs={"xsi:type":"dcterms:W3CDTF"},a.CORE_PROPERTY_ATTRIBUTES={"xmlns:cp":"http://schemas.openxmlformats.org/package/2006/metadata/core-properties","xmlns:dc":"http://purl.org/dc/elements/1.1/","xmlns:dcterms":"http://purl.org/dc/terms/","xmlns:dcmitype":"http://purl.org/dc/dcmitype/","xmlns:xsi":"http://www.w3.org/2001/XMLSchema-instance"},C.exports=a},{"../../../utils/xml-stream":28,"../base-xform":32,"../simple/date-xform":117,"../simple/integer-xform":118,"../simple/string-xform":119}],54:[function(g,C,i){const e=g("../base-xform");C.exports=class extends e{render(A,s){A.leafNode("Relationship",s)}parseOpen(A){switch(A.name){case"Relationship":return this.model=A.attributes,!0;default:return!1}}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],55:[function(g,C,i){const e=g("../../../utils/xml-stream"),A=g("../base-xform"),s=g("./relationship-xform");class l extends A{constructor(){super(),this.map={Relationship:new s}}render(a,d){d=d||this._values,a.openXml(e.StdDocAttributes),a.openNode("Relationships",l.RELATIONSHIPS_ATTRIBUTES),d.forEach(o=>{this.map.Relationship.render(a,o)}),a.closeNode()}parseOpen(a){if(this.parser)return this.parser.parseOpen(a),!0;switch(a.name){case"Relationships":return this.model=[],!0;default:if(this.parser=this.map[a.name],this.parser)return this.parser.parseOpen(a),!0;throw new Error("Unexpected xml node in parseOpen: "+JSON.stringify(a))}}parseText(a){this.parser&&this.parser.parseText(a)}parseClose(a){if(this.parser)return this.parser.parseClose(a)||(this.model.push(this.parser.model),this.parser=void 0),!0;switch(a){case"Relationships":return!1;default:throw new Error("Unexpected xml node in parseClose: "+a)}}}l.RELATIONSHIPS_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/package/2006/relationships"},C.exports=l},{"../../../utils/xml-stream":28,"../base-xform":32,"./relationship-xform":54}],56:[function(g,C,i){const e=g("../base-xform");C.exports=class extends e{parseOpen(A){if(this.parser)return this.parser.parseOpen(A),!0;switch(A.name){case this.tag:this.reset(),this.model={range:{editAs:A.attributes.editAs||"oneCell"}};break;default:this.parser=this.map[A.name],this.parser&&this.parser.parseOpen(A)}return!0}parseText(A){this.parser&&this.parser.parseText(A)}reconcilePicture(A,s){if(A&&A.rId){const l=s.rels[A.rId].Target.match(/.*\/media\/(.+[.][a-zA-Z]{3,4})/);if(l){const n=l[1],a=s.mediaIndex[n];return s.media[a]}}}}},{"../base-xform":32}],57:[function(g,C,i){const e=g("../base-xform"),A=g("./blip-xform");C.exports=class extends e{constructor(){super(),this.map={"a:blip":new A}}get tag(){return"xdr:blipFill"}render(s,l){s.openNode(this.tag),this.map["a:blip"].render(s,l),s.openNode("a:stretch"),s.leafNode("a:fillRect"),s.closeNode(),s.closeNode()}parseOpen(s){if(this.parser)return this.parser.parseOpen(s),!0;switch(s.name){case this.tag:this.reset();break;default:this.parser=this.map[s.name],this.parser&&this.parser.parseOpen(s)}return!0}parseText(){}parseClose(s){if(this.parser)return this.parser.parseClose(s)||(this.parser=void 0),!0;switch(s){case this.tag:return this.model=this.map["a:blip"].model,!1;default:return!0}}}},{"../base-xform":32,"./blip-xform":58}],58:[function(g,C,i){const e=g("../base-xform");C.exports=class extends e{get tag(){return"a:blip"}render(A,s){A.leafNode(this.tag,{"xmlns:r":"http://schemas.openxmlformats.org/officeDocument/2006/relationships","r:embed":s.rId,cstate:"print"})}parseOpen(A){switch(A.name){case this.tag:return this.model={rId:A.attributes["r:embed"]},!0;default:return!0}}parseText(){}parseClose(A){switch(A){case this.tag:return!1;default:return!0}}}},{"../base-xform":32}],59:[function(g,C,i){const e=g("../base-xform");C.exports=class extends e{get tag(){return"xdr:cNvPicPr"}render(A){A.openNode(this.tag),A.leafNode("a:picLocks",{noChangeAspect:"1"}),A.closeNode()}parseOpen(A){switch(A.name){case this.tag:default:return!0}}parseText(){}parseClose(A){switch(A){case this.tag:return!1;default:return!0}}}},{"../base-xform":32}],60:[function(g,C,i){const e=g("../base-xform"),A=g("./hlink-click-xform"),s=g("./ext-lst-xform");C.exports=class extends e{constructor(){super(),this.map={"a:hlinkClick":new A,"a:extLst":new s}}get tag(){return"xdr:cNvPr"}render(l,n){l.openNode(this.tag,{id:n.index,name:"Picture "+n.index}),this.map["a:hlinkClick"].render(l,n),this.map["a:extLst"].render(l,n),l.closeNode()}parseOpen(l){if(this.parser)return this.parser.parseOpen(l),!0;switch(l.name){case this.tag:this.reset();break;default:this.parser=this.map[l.name],this.parser&&this.parser.parseOpen(l)}return!0}parseText(){}parseClose(l){if(this.parser)return this.parser.parseClose(l)||(this.parser=void 0),!0;switch(l){case this.tag:return this.model=this.map["a:hlinkClick"].model,!1;default:return!0}}}},{"../base-xform":32,"./ext-lst-xform":63,"./hlink-click-xform":65}],61:[function(g,C,i){const e=g("../base-xform"),A=g("../simple/integer-xform");C.exports=class extends e{constructor(s){super(),this.tag=s.tag,this.map={"xdr:col":new A({tag:"xdr:col",zero:!0}),"xdr:colOff":new A({tag:"xdr:colOff",zero:!0}),"xdr:row":new A({tag:"xdr:row",zero:!0}),"xdr:rowOff":new A({tag:"xdr:rowOff",zero:!0})}}render(s,l){s.openNode(this.tag),this.map["xdr:col"].render(s,l.nativeCol),this.map["xdr:colOff"].render(s,l.nativeColOff),this.map["xdr:row"].render(s,l.nativeRow),this.map["xdr:rowOff"].render(s,l.nativeRowOff),s.closeNode()}parseOpen(s){if(this.parser)return this.parser.parseOpen(s),!0;switch(s.name){case this.tag:this.reset();break;default:this.parser=this.map[s.name],this.parser&&this.parser.parseOpen(s)}return!0}parseText(s){this.parser&&this.parser.parseText(s)}parseClose(s){if(this.parser)return this.parser.parseClose(s)||(this.parser=void 0),!0;switch(s){case this.tag:return this.model={nativeCol:this.map["xdr:col"].model,nativeColOff:this.map["xdr:colOff"].model,nativeRow:this.map["xdr:row"].model,nativeRowOff:this.map["xdr:rowOff"].model},!1;default:return!0}}}},{"../base-xform":32,"../simple/integer-xform":118}],62:[function(g,C,i){const e=g("../../../utils/col-cache"),A=g("../../../utils/xml-stream"),s=g("../base-xform"),l=g("./two-cell-anchor-xform"),n=g("./one-cell-anchor-xform");class a extends s{constructor(){super(),this.map={"xdr:twoCellAnchor":new l,"xdr:oneCellAnchor":new n}}prepare(o){o.anchors.forEach((c,r)=>{c.anchorType=function(h){return(typeof h.range=="string"?e.decode(h.range):h.range).br?"xdr:twoCellAnchor":"xdr:oneCellAnchor"}(c),this.map[c.anchorType].prepare(c,{index:r})})}get tag(){return"xdr:wsDr"}render(o,c){o.openXml(A.StdDocAttributes),o.openNode(this.tag,a.DRAWING_ATTRIBUTES),c.anchors.forEach(r=>{this.map[r.anchorType].render(o,r)}),o.closeNode()}parseOpen(o){if(this.parser)return this.parser.parseOpen(o),!0;switch(o.name){case this.tag:this.reset(),this.model={anchors:[]};break;default:this.parser=this.map[o.name],this.parser&&this.parser.parseOpen(o)}return!0}parseText(o){this.parser&&this.parser.parseText(o)}parseClose(o){if(this.parser)return this.parser.parseClose(o)||(this.model.anchors.push(this.parser.model),this.parser=void 0),!0;switch(o){case this.tag:return!1;default:return!0}}reconcile(o,c){o.anchors.forEach(r=>{r.br?this.map["xdr:twoCellAnchor"].reconcile(r,c):this.map["xdr:oneCellAnchor"].reconcile(r,c)})}}a.DRAWING_ATTRIBUTES={"xmlns:xdr":"http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing","xmlns:a":"http://schemas.openxmlformats.org/drawingml/2006/main"},C.exports=a},{"../../../utils/col-cache":19,"../../../utils/xml-stream":28,"../base-xform":32,"./one-cell-anchor-xform":67,"./two-cell-anchor-xform":70}],63:[function(g,C,i){const e=g("../base-xform");C.exports=class extends e{get tag(){return"a:extLst"}render(A){A.openNode(this.tag),A.openNode("a:ext",{uri:"{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}"}),A.leafNode("a16:creationId",{"xmlns:a16":"http://schemas.microsoft.com/office/drawing/2014/main",id:"{00000000-0008-0000-0000-000002000000}"}),A.closeNode(),A.closeNode()}parseOpen(A){switch(A.name){case this.tag:default:return!0}}parseText(){}parseClose(A){switch(A){case this.tag:return!1;default:return!0}}}},{"../base-xform":32}],64:[function(g,C,i){const e=g("../base-xform");C.exports=class extends e{constructor(A){super(),this.tag=A.tag,this.map={}}render(A,s){A.openNode(this.tag);const l=Math.floor(9525*s.width),n=Math.floor(9525*s.height);A.addAttribute("cx",l),A.addAttribute("cy",n),A.closeNode()}parseOpen(A){return A.name===this.tag&&(this.model={width:parseInt(A.attributes.cx||"0",10)/9525,height:parseInt(A.attributes.cy||"0",10)/9525},!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],65:[function(g,C,i){const e=g("../base-xform");C.exports=class extends e{get tag(){return"a:hlinkClick"}render(A,s){s.hyperlinks&&s.hyperlinks.rId&&A.leafNode(this.tag,{"xmlns:r":"http://schemas.openxmlformats.org/officeDocument/2006/relationships","r:id":s.hyperlinks.rId,tooltip:s.hyperlinks.tooltip})}parseOpen(A){switch(A.name){case this.tag:return this.model={hyperlinks:{rId:A.attributes["r:id"],tooltip:A.attributes.tooltip}},!0;default:return!0}}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],66:[function(g,C,i){const e=g("../base-xform"),A=g("./c-nv-pr-xform"),s=g("./c-nv-pic-pr-xform");C.exports=class extends e{constructor(){super(),this.map={"xdr:cNvPr":new A,"xdr:cNvPicPr":new s}}get tag(){return"xdr:nvPicPr"}render(l,n){l.openNode(this.tag),this.map["xdr:cNvPr"].render(l,n),this.map["xdr:cNvPicPr"].render(l,n),l.closeNode()}parseOpen(l){if(this.parser)return this.parser.parseOpen(l),!0;switch(l.name){case this.tag:this.reset();break;default:this.parser=this.map[l.name],this.parser&&this.parser.parseOpen(l)}return!0}parseText(){}parseClose(l){if(this.parser)return this.parser.parseClose(l)||(this.parser=void 0),!0;switch(l){case this.tag:return this.model=this.map["xdr:cNvPr"].model,!1;default:return!0}}}},{"../base-xform":32,"./c-nv-pic-pr-xform":59,"./c-nv-pr-xform":60}],67:[function(g,C,i){const e=g("./base-cell-anchor-xform"),A=g("../static-xform"),s=g("./cell-position-xform"),l=g("./ext-xform"),n=g("./pic-xform");C.exports=class extends e{constructor(){super(),this.map={"xdr:from":new s({tag:"xdr:from"}),"xdr:ext":new l({tag:"xdr:ext"}),"xdr:pic":new n,"xdr:clientData":new A({tag:"xdr:clientData"})}}get tag(){return"xdr:oneCellAnchor"}prepare(a,d){this.map["xdr:pic"].prepare(a.picture,d)}render(a,d){a.openNode(this.tag,{editAs:d.range.editAs||"oneCell"}),this.map["xdr:from"].render(a,d.range.tl),this.map["xdr:ext"].render(a,d.range.ext),this.map["xdr:pic"].render(a,d.picture),this.map["xdr:clientData"].render(a,{}),a.closeNode()}parseClose(a){if(this.parser)return this.parser.parseClose(a)||(this.parser=void 0),!0;switch(a){case this.tag:return this.model.range.tl=this.map["xdr:from"].model,this.model.range.ext=this.map["xdr:ext"].model,this.model.picture=this.map["xdr:pic"].model,!1;default:return!0}}reconcile(a,d){a.medium=this.reconcilePicture(a.picture,d)}}},{"../static-xform":120,"./base-cell-anchor-xform":56,"./cell-position-xform":61,"./ext-xform":64,"./pic-xform":68}],68:[function(g,C,i){const e=g("../base-xform"),A=g("../static-xform"),s=g("./blip-fill-xform"),l=g("./nv-pic-pr-xform"),n=g("./sp-pr");C.exports=class extends e{constructor(){super(),this.map={"xdr:nvPicPr":new l,"xdr:blipFill":new s,"xdr:spPr":new A(n)}}get tag(){return"xdr:pic"}prepare(a,d){a.index=d.index+1}render(a,d){a.openNode(this.tag),this.map["xdr:nvPicPr"].render(a,d),this.map["xdr:blipFill"].render(a,d),this.map["xdr:spPr"].render(a,d),a.closeNode()}parseOpen(a){if(this.parser)return this.parser.parseOpen(a),!0;switch(a.name){case this.tag:this.reset();break;default:this.parser=this.map[a.name],this.parser&&this.parser.parseOpen(a)}return!0}parseText(){}parseClose(a){if(this.parser)return this.parser.parseClose(a)||(this.mergeModel(this.parser.model),this.parser=void 0),!0;switch(a){case this.tag:return!1;default:return!0}}}},{"../base-xform":32,"../static-xform":120,"./blip-fill-xform":57,"./nv-pic-pr-xform":66,"./sp-pr":69}],69:[function(g,C,i){C.exports={tag:"xdr:spPr",c:[{tag:"a:xfrm",c:[{tag:"a:off",$:{x:"0",y:"0"}},{tag:"a:ext",$:{cx:"0",cy:"0"}}]},{tag:"a:prstGeom",$:{prst:"rect"},c:[{tag:"a:avLst"}]}]}},{}],70:[function(g,C,i){const e=g("./base-cell-anchor-xform"),A=g("../static-xform"),s=g("./cell-position-xform"),l=g("./pic-xform");C.exports=class extends e{constructor(){super(),this.map={"xdr:from":new s({tag:"xdr:from"}),"xdr:to":new s({tag:"xdr:to"}),"xdr:pic":new l,"xdr:clientData":new A({tag:"xdr:clientData"})}}get tag(){return"xdr:twoCellAnchor"}prepare(n,a){this.map["xdr:pic"].prepare(n.picture,a)}render(n,a){n.openNode(this.tag,{editAs:a.range.editAs||"oneCell"}),this.map["xdr:from"].render(n,a.range.tl),this.map["xdr:to"].render(n,a.range.br),this.map["xdr:pic"].render(n,a.picture),this.map["xdr:clientData"].render(n,{}),n.closeNode()}parseClose(n){if(this.parser)return this.parser.parseClose(n)||(this.parser=void 0),!0;switch(n){case this.tag:return this.model.range.tl=this.map["xdr:from"].model,this.model.range.br=this.map["xdr:to"].model,this.model.picture=this.map["xdr:pic"].model,!1;default:return!0}}reconcile(n,a){n.medium=this.reconcilePicture(n.picture,a)}}},{"../static-xform":120,"./base-cell-anchor-xform":56,"./cell-position-xform":61,"./pic-xform":68}],71:[function(g,C,i){const e=g("./base-xform");C.exports=class extends e{constructor(A){super(),this.tag=A.tag,this.always=!!A.always,this.count=A.count,this.empty=A.empty,this.$count=A.$count||"count",this.$=A.$,this.childXform=A.childXform,this.maxItems=A.maxItems}prepare(A,s){const{childXform:l}=this;A&&A.forEach((n,a)=>{s.index=a,l.prepare(n,s)})}render(A,s){if(this.always||s&&s.length){A.openNode(this.tag,this.$),this.count&&A.addAttribute(this.$count,s&&s.length||0);const{childXform:l}=this;(s||[]).forEach((n,a)=>{l.render(A,n,a)}),A.closeNode()}else this.empty&&A.leafNode(this.tag)}parseOpen(A){if(this.parser)return this.parser.parseOpen(A),!0;switch(A.name){case this.tag:return this.model=[],!0;default:return!!this.childXform.parseOpen(A)&&(this.parser=this.childXform,!0)}}parseText(A){this.parser&&this.parser.parseText(A)}parseClose(A){if(this.parser){if(!this.parser.parseClose(A)&&(this.model.push(this.parser.model),this.parser=void 0,this.maxItems&&this.model.length>this.maxItems))throw new Error(`Max ${this.childXform.tag} count (${this.maxItems}) exceeded`);return!0}return!1}reconcile(A,s){if(A){const{childXform:l}=this;A.forEach(n=>{l.reconcile(n,s)})}}}},{"./base-xform":32}],72:[function(g,C,i){const e=g("../../../utils/col-cache"),A=g("../base-xform");C.exports=class extends A{get tag(){return"autoFilter"}render(s,l){if(l)if(typeof l=="string")s.leafNode("autoFilter",{ref:l});else{const n=function(o){return typeof o=="string"?o:e.getAddress(o.row,o.column).address},a=n(l.from),d=n(l.to);a&&d&&s.leafNode("autoFilter",{ref:`${a}:${d}`})}}parseOpen(s){s.name==="autoFilter"&&(this.model=s.attributes.ref)}}},{"../../../utils/col-cache":19,"../base-xform":32}],73:[function(g,C,i){const e=g("../../../utils/utils"),A=g("../base-xform"),s=g("../../../doc/range"),l=g("../../../doc/enums"),n=g("../strings/rich-text-xform");function a(d){if(d==null)return l.ValueType.Null;if(d instanceof String||typeof d=="string")return l.ValueType.String;if(typeof d=="number")return l.ValueType.Number;if(typeof d=="boolean")return l.ValueType.Boolean;if(d instanceof Date)return l.ValueType.Date;if(d.text&&d.hyperlink)return l.ValueType.Hyperlink;if(d.formula)return l.ValueType.Formula;if(d.error)return l.ValueType.Error;throw new Error("I could not understand type of value")}C.exports=class extends A{constructor(){super(),this.richTextXForm=new n}get tag(){return"c"}prepare(d,o){const c=o.styles.addStyleModel(d.style||{},function(r){switch(r.type){case l.ValueType.Formula:return a(r.result);default:return r.type}}(d));switch(c&&(d.styleId=c),d.comment&&o.comments.push({...d.comment,ref:d.address}),d.type){case l.ValueType.String:case l.ValueType.RichText:o.sharedStrings&&(d.ssId=o.sharedStrings.add(d.value));break;case l.ValueType.Date:o.date1904&&(d.date1904=!0);break;case l.ValueType.Hyperlink:o.sharedStrings&&d.text!==void 0&&d.text!==null&&(d.ssId=o.sharedStrings.add(d.text)),o.hyperlinks.push({address:d.address,target:d.hyperlink,tooltip:d.tooltip});break;case l.ValueType.Merge:o.merges.add(d);break;case l.ValueType.Formula:if(o.date1904&&(d.date1904=!0),d.shareType==="shared"&&(d.si=o.siFormulae++),d.formula)o.formulae[d.address]=d;else if(d.sharedFormula){const r=o.formulae[d.sharedFormula];if(!r)throw new Error("Shared Formula master must exist above and or left of clone for cell "+d.address);r.si===void 0?(r.shareType="shared",r.si=o.siFormulae++,r.range=new s(r.address,d.address)):r.range&&r.range.expandToAddress(d.address),d.si=r.si}}}renderFormula(d,o){let c=null;switch(o.shareType){case"shared":c={t:"shared",ref:o.ref||o.range.range,si:o.si};break;case"array":c={t:"array",ref:o.ref};break;default:o.si!==void 0&&(c={t:"shared",si:o.si})}switch(a(o.result)){case l.ValueType.Null:d.leafNode("f",c,o.formula);break;case l.ValueType.String:d.addAttribute("t","str"),d.leafNode("f",c,o.formula),d.leafNode("v",null,o.result);break;case l.ValueType.Number:d.leafNode("f",c,o.formula),d.leafNode("v",null,o.result);break;case l.ValueType.Boolean:d.addAttribute("t","b"),d.leafNode("f",c,o.formula),d.leafNode("v",null,o.result?1:0);break;case l.ValueType.Error:d.addAttribute("t","e"),d.leafNode("f",c,o.formula),d.leafNode("v",null,o.result.error);break;case l.ValueType.Date:d.leafNode("f",c,o.formula),d.leafNode("v",null,e.dateToExcel(o.result,o.date1904));break;default:throw new Error("I could not understand type of value")}}render(d,o){if(o.type!==l.ValueType.Null||o.styleId){switch(d.openNode("c"),d.addAttribute("r",o.address),o.styleId&&d.addAttribute("s",o.styleId),o.type){case l.ValueType.Null:break;case l.ValueType.Number:d.leafNode("v",null,o.value);break;case l.ValueType.Boolean:d.addAttribute("t","b"),d.leafNode("v",null,o.value?"1":"0");break;case l.ValueType.Error:d.addAttribute("t","e"),d.leafNode("v",null,o.value.error);break;case l.ValueType.String:case l.ValueType.RichText:o.ssId!==void 0?(d.addAttribute("t","s"),d.leafNode("v",null,o.ssId)):o.value&&o.value.richText?(d.addAttribute("t","inlineStr"),d.openNode("is"),o.value.richText.forEach(c=>{this.richTextXForm.render(d,c)}),d.closeNode("is")):(d.addAttribute("t","str"),d.leafNode("v",null,o.value));break;case l.ValueType.Date:d.leafNode("v",null,e.dateToExcel(o.value,o.date1904));break;case l.ValueType.Hyperlink:o.ssId!==void 0?(d.addAttribute("t","s"),d.leafNode("v",null,o.ssId)):(d.addAttribute("t","str"),d.leafNode("v",null,o.text));break;case l.ValueType.Formula:this.renderFormula(d,o);break;case l.ValueType.Merge:}d.closeNode()}}parseOpen(d){if(this.parser)return this.parser.parseOpen(d),!0;switch(d.name){case"c":return this.model={address:d.attributes.r},this.t=d.attributes.t,d.attributes.s&&(this.model.styleId=parseInt(d.attributes.s,10)),!0;case"f":return this.currentNode="f",this.model.si=d.attributes.si,this.model.shareType=d.attributes.t,this.model.ref=d.attributes.ref,!0;case"v":return this.currentNode="v",!0;case"t":return this.currentNode="t",!0;case"r":return this.parser=this.richTextXForm,this.parser.parseOpen(d),!0;default:return!1}}parseText(d){if(this.parser)this.parser.parseText(d);else switch(this.currentNode){case"f":this.model.formula=this.model.formula?this.model.formula+d:d;break;case"v":case"t":this.model.value&&this.model.value.richText?this.model.value.richText.text=this.model.value.richText.text?this.model.value.richText.text+d:d:this.model.value=this.model.value?this.model.value+d:d}}parseClose(d){switch(d){case"c":{const{model:o}=this;if(o.formula||o.shareType)o.type=l.ValueType.Formula,o.value&&(this.t==="str"?o.result=e.xmlDecode(o.value):this.t==="b"?o.result=parseInt(o.value,10)!==0:this.t==="e"?o.result={error:o.value}:o.result=parseFloat(o.value),o.value=void 0);else if(o.value!==void 0)switch(this.t){case"s":o.type=l.ValueType.String,o.value=parseInt(o.value,10);break;case"str":o.type=l.ValueType.String,o.value=e.xmlDecode(o.value);break;case"inlineStr":o.type=l.ValueType.String;break;case"b":o.type=l.ValueType.Boolean,o.value=parseInt(o.value,10)!==0;break;case"e":o.type=l.ValueType.Error,o.value={error:o.value};break;default:o.type=l.ValueType.Number,o.value=parseFloat(o.value)}else o.styleId?o.type=l.ValueType.Null:o.type=l.ValueType.Merge;return!1}case"f":case"v":case"is":return this.currentNode=void 0,!0;case"t":return this.parser?(this.parser.parseClose(d),!0):(this.currentNode=void 0,!0);case"r":return this.model.value=this.model.value||{},this.model.value.richText=this.model.value.richText||[],this.model.value.richText.push(this.parser.model),this.parser=void 0,this.currentNode=void 0,!0;default:return!!this.parser&&(this.parser.parseClose(d),!0)}}reconcile(d,o){const c=d.styleId&&o.styles&&o.styles.getStyleModel(d.styleId);switch(c&&(d.style=c),d.styleId!==void 0&&(d.styleId=void 0),d.type){case l.ValueType.String:typeof d.value=="number"&&o.sharedStrings&&(d.value=o.sharedStrings.getString(d.value)),d.value.richText&&(d.type=l.ValueType.RichText);break;case l.ValueType.Number:c&&e.isDateFmt(c.numFmt)&&(d.type=l.ValueType.Date,d.value=e.excelToDate(d.value,o.date1904));break;case l.ValueType.Formula:d.result!==void 0&&c&&e.isDateFmt(c.numFmt)&&(d.result=e.excelToDate(d.result,o.date1904)),d.shareType==="shared"&&(d.ref?o.formulae[d.si]=d.address:(d.sharedFormula=o.formulae[d.si],delete d.shareType),delete d.si)}const r=o.hyperlinkMap[d.address];r&&(d.type===l.ValueType.Formula?(d.text=d.result,d.result=void 0):(d.text=d.value,d.value=void 0),d.type=l.ValueType.Hyperlink,d.hyperlink=r);const h=o.commentsMap&&o.commentsMap[d.address];h&&(d.comment=h)}}},{"../../../doc/enums":7,"../../../doc/range":10,"../../../utils/utils":27,"../base-xform":32,"../strings/rich-text-xform":122}],74:[function(g,C,i){const e=g("../../base-xform");C.exports=class extends e{get tag(){return"x14:cfIcon"}render(A,s){A.leafNode(this.tag,{iconSet:s.iconSet,iconId:s.iconId})}parseOpen(A){let{attributes:s}=A;this.model={iconSet:s.iconSet,iconId:e.toIntValue(s.iconId)}}parseClose(A){return A!==this.tag}}},{"../../base-xform":32}],75:[function(g,C,i){const{v4:e}=g("uuid"),A=g("../../base-xform"),s=g("../../composite-xform"),l=g("./databar-ext-xform"),n=g("./icon-set-ext-xform"),a={"3Triangles":!0,"3Stars":!0,"5Boxes":!0};class d extends s{constructor(){super(),this.map={"x14:dataBar":this.databarXform=new l,"x14:iconSet":this.iconSetXform=new n}}get tag(){return"x14:cfRule"}static isExt(c){return c.type==="dataBar"?l.isExt(c):!(c.type!=="iconSet"||!c.custom&&!a[c.iconSet])}prepare(c){d.isExt(c)&&(c.x14Id=`{${e()}}`.toUpperCase())}render(c,r){if(d.isExt(r))switch(r.type){case"dataBar":this.renderDataBar(c,r);break;case"iconSet":this.renderIconSet(c,r)}}renderDataBar(c,r){c.openNode(this.tag,{type:"dataBar",id:r.x14Id}),this.databarXform.render(c,r),c.closeNode()}renderIconSet(c,r){c.openNode(this.tag,{type:"iconSet",priority:r.priority,id:r.x14Id||`{${e()}}`}),this.iconSetXform.render(c,r),c.closeNode()}createNewModel(c){let{attributes:r}=c;return{type:r.type,x14Id:r.id,priority:A.toIntValue(r.priority)}}onParserClose(c,r){Object.assign(this.model,r.model)}}C.exports=d},{"../../base-xform":32,"../../composite-xform":48,"./databar-ext-xform":79,"./icon-set-ext-xform":81,uuid:528}],76:[function(g,C,i){const e=g("../../composite-xform"),A=g("./f-ext-xform");C.exports=class extends e{constructor(){super(),this.map={"xm:f":this.fExtXform=new A}}get tag(){return"x14:cfvo"}render(s,l){s.openNode(this.tag,{type:l.type}),l.value!==void 0&&this.fExtXform.render(s,l.value),s.closeNode()}createNewModel(s){return{type:s.attributes.type}}onParserClose(s,l){switch(s){case"xm:f":this.model.value=l.model?parseFloat(l.model):0}}}},{"../../composite-xform":48,"./f-ext-xform":80}],77:[function(g,C,i){const e=g("../../composite-xform"),A=g("./sqref-ext-xform"),s=g("./cf-rule-ext-xform");C.exports=class extends e{constructor(){super(),this.map={"xm:sqref":this.sqRef=new A,"x14:cfRule":this.cfRule=new s}}get tag(){return"x14:conditionalFormatting"}prepare(l,n){l.rules.forEach(a=>{this.cfRule.prepare(a,n)})}render(l,n){n.rules.some(s.isExt)&&(l.openNode(this.tag,{"xmlns:xm":"http://schemas.microsoft.com/office/excel/2006/main"}),n.rules.filter(s.isExt).forEach(a=>this.cfRule.render(l,a)),this.sqRef.render(l,n.ref),l.closeNode())}createNewModel(){return{rules:[]}}onParserClose(l,n){switch(l){case"xm:sqref":this.model.ref=n.model;break;case"x14:cfRule":this.model.rules.push(n.model)}}}},{"../../composite-xform":48,"./cf-rule-ext-xform":75,"./sqref-ext-xform":82}],78:[function(g,C,i){const e=g("../../composite-xform"),A=g("./cf-rule-ext-xform"),s=g("./conditional-formatting-ext-xform");C.exports=class extends e{constructor(){super(),this.map={"x14:conditionalFormatting":this.cfXform=new s}}get tag(){return"x14:conditionalFormattings"}hasContent(l){return l.hasExtContent===void 0&&(l.hasExtContent=l.some(n=>n.rules.some(A.isExt))),l.hasExtContent}prepare(l,n){l.forEach(a=>{this.cfXform.prepare(a,n)})}render(l,n){this.hasContent(n)&&(l.openNode(this.tag),n.forEach(a=>this.cfXform.render(l,a)),l.closeNode())}createNewModel(){return[]}onParserClose(l,n){this.model.push(n.model)}}},{"../../composite-xform":48,"./cf-rule-ext-xform":75,"./conditional-formatting-ext-xform":77}],79:[function(g,C,i){const e=g("../../base-xform"),A=g("../../composite-xform"),s=g("../../style/color-xform"),l=g("./cfvo-ext-xform");C.exports=class extends A{constructor(){super(),this.map={"x14:cfvo":this.cfvoXform=new l,"x14:borderColor":this.borderColorXform=new s("x14:borderColor"),"x14:negativeBorderColor":this.negativeBorderColorXform=new s("x14:negativeBorderColor"),"x14:negativeFillColor":this.negativeFillColorXform=new s("x14:negativeFillColor"),"x14:axisColor":this.axisColorXform=new s("x14:axisColor")}}static isExt(n){return!n.gradient}get tag(){return"x14:dataBar"}render(n,a){n.openNode(this.tag,{minLength:e.toIntAttribute(a.minLength,0,!0),maxLength:e.toIntAttribute(a.maxLength,100,!0),border:e.toBoolAttribute(a.border,!1),gradient:e.toBoolAttribute(a.gradient,!0),negativeBarColorSameAsPositive:e.toBoolAttribute(a.negativeBarColorSameAsPositive,!0),negativeBarBorderColorSameAsPositive:e.toBoolAttribute(a.negativeBarBorderColorSameAsPositive,!0),axisPosition:e.toAttribute(a.axisPosition,"auto"),direction:e.toAttribute(a.direction,"leftToRight")}),a.cfvo.forEach(d=>{this.cfvoXform.render(n,d)}),this.borderColorXform.render(n,a.borderColor),this.negativeBorderColorXform.render(n,a.negativeBorderColor),this.negativeFillColorXform.render(n,a.negativeFillColor),this.axisColorXform.render(n,a.axisColor),n.closeNode()}createNewModel(n){let{attributes:a}=n;return{cfvo:[],minLength:e.toIntValue(a.minLength,0),maxLength:e.toIntValue(a.maxLength,100),border:e.toBoolValue(a.border,!1),gradient:e.toBoolValue(a.gradient,!0),negativeBarColorSameAsPositive:e.toBoolValue(a.negativeBarColorSameAsPositive,!0),negativeBarBorderColorSameAsPositive:e.toBoolValue(a.negativeBarBorderColorSameAsPositive,!0),axisPosition:e.toStringValue(a.axisPosition,"auto"),direction:e.toStringValue(a.direction,"leftToRight")}}onParserClose(n,a){const[,d]=n.split(":");switch(d){case"cfvo":this.model.cfvo.push(a.model);break;default:this.model[d]=a.model}}}},{"../../base-xform":32,"../../composite-xform":48,"../../style/color-xform":128,"./cfvo-ext-xform":76}],80:[function(g,C,i){const e=g("../../base-xform");C.exports=class extends e{get tag(){return"xm:f"}render(A,s){A.leafNode(this.tag,null,s)}parseOpen(){this.model=""}parseText(A){this.model+=A}parseClose(A){return A!==this.tag}}},{"../../base-xform":32}],81:[function(g,C,i){const e=g("../../base-xform"),A=g("../../composite-xform"),s=g("./cfvo-ext-xform"),l=g("./cf-icon-ext-xform");C.exports=class extends A{constructor(){super(),this.map={"x14:cfvo":this.cfvoXform=new s,"x14:cfIcon":this.cfIconXform=new l}}get tag(){return"x14:iconSet"}render(n,a){n.openNode(this.tag,{iconSet:e.toStringAttribute(a.iconSet),reverse:e.toBoolAttribute(a.reverse,!1),showValue:e.toBoolAttribute(a.showValue,!0),custom:e.toBoolAttribute(a.icons,!1)}),a.cfvo.forEach(d=>{this.cfvoXform.render(n,d)}),a.icons&&a.icons.forEach((d,o)=>{d.iconId=o,this.cfIconXform.render(n,d)}),n.closeNode()}createNewModel(n){let{attributes:a}=n;return{cfvo:[],iconSet:e.toStringValue(a.iconSet,"3TrafficLights"),reverse:e.toBoolValue(a.reverse,!1),showValue:e.toBoolValue(a.showValue,!0)}}onParserClose(n,a){const[,d]=n.split(":");switch(d){case"cfvo":this.model.cfvo.push(a.model);break;case"cfIcon":this.model.icons||(this.model.icons=[]),this.model.icons.push(a.model);break;default:this.model[d]=a.model}}}},{"../../base-xform":32,"../../composite-xform":48,"./cf-icon-ext-xform":74,"./cfvo-ext-xform":76}],82:[function(g,C,i){const e=g("../../base-xform");C.exports=class extends e{get tag(){return"xm:sqref"}render(A,s){A.leafNode(this.tag,null,s)}parseOpen(){this.model=""}parseText(A){this.model+=A}parseClose(A){return A!==this.tag}}},{"../../base-xform":32}],83:[function(g,C,i){const e=g("../../base-xform"),A=g("../../composite-xform"),s=g("../../../../doc/range"),l=g("./databar-xform"),n=g("./ext-lst-ref-xform"),a=g("./formula-xform"),d=g("./color-scale-xform"),o=g("./icon-set-xform"),c={"3Triangles":!0,"3Stars":!0,"5Boxes":!0},r=b=>{const{type:u,operator:m}=b;switch(u){case"containsText":case"containsBlanks":case"notContainsBlanks":case"containsErrors":case"notContainsErrors":return{type:"containsText",operator:u};default:return{type:u,operator:m}}};class h extends A{constructor(){super(),this.map={dataBar:this.databarXform=new l,extLst:this.extLstRefXform=new n,formula:this.formulaXform=new a,colorScale:this.colorScaleXform=new d,iconSet:this.iconSetXform=new o}}get tag(){return"cfRule"}static isPrimitive(u){return u.type!=="iconSet"||!u.custom&&!c[u.iconSet]}render(u,m){switch(m.type){case"expression":this.renderExpression(u,m);break;case"cellIs":this.renderCellIs(u,m);break;case"top10":this.renderTop10(u,m);break;case"aboveAverage":this.renderAboveAverage(u,m);break;case"dataBar":this.renderDataBar(u,m);break;case"colorScale":this.renderColorScale(u,m);break;case"iconSet":this.renderIconSet(u,m);break;case"containsText":this.renderText(u,m);break;case"timePeriod":this.renderTimePeriod(u,m)}}renderExpression(u,m){u.openNode(this.tag,{type:"expression",dxfId:m.dxfId,priority:m.priority}),this.formulaXform.render(u,m.formulae[0]),u.closeNode()}renderCellIs(u,m){u.openNode(this.tag,{type:"cellIs",dxfId:m.dxfId,priority:m.priority,operator:m.operator}),m.formulae.forEach(Z=>{this.formulaXform.render(u,Z)}),u.closeNode()}renderTop10(u,m){u.leafNode(this.tag,{type:"top10",dxfId:m.dxfId,priority:m.priority,percent:e.toBoolAttribute(m.percent,!1),bottom:e.toBoolAttribute(m.bottom,!1),rank:e.toIntValue(m.rank,10,!0)})}renderAboveAverage(u,m){u.leafNode(this.tag,{type:"aboveAverage",dxfId:m.dxfId,priority:m.priority,aboveAverage:e.toBoolAttribute(m.aboveAverage,!0)})}renderDataBar(u,m){u.openNode(this.tag,{type:"dataBar",priority:m.priority}),this.databarXform.render(u,m),this.extLstRefXform.render(u,m),u.closeNode()}renderColorScale(u,m){u.openNode(this.tag,{type:"colorScale",priority:m.priority}),this.colorScaleXform.render(u,m),u.closeNode()}renderIconSet(u,m){h.isPrimitive(m)&&(u.openNode(this.tag,{type:"iconSet",priority:m.priority}),this.iconSetXform.render(u,m),u.closeNode())}renderText(u,m){u.openNode(this.tag,{type:m.operator,dxfId:m.dxfId,priority:m.priority,operator:e.toStringAttribute(m.operator,"containsText")});const Z=(p=>{if(p.formulae&&p.formulae[0])return p.formulae[0];const Y=new s(p.ref),{tl:R}=Y;switch(p.operator){case"containsText":return`NOT(ISERROR(SEARCH("${p.text}",${R})))`;case"containsBlanks":return`LEN(TRIM(${R}))=0`;case"notContainsBlanks":return`LEN(TRIM(${R}))>0`;case"containsErrors":return`ISERROR(${R})`;case"notContainsErrors":return`NOT(ISERROR(${R}))`;default:return}})(m);Z&&this.formulaXform.render(u,Z),u.closeNode()}renderTimePeriod(u,m){u.openNode(this.tag,{type:"timePeriod",dxfId:m.dxfId,priority:m.priority,timePeriod:m.timePeriod});const Z=(p=>{if(p.formulae&&p.formulae[0])return p.formulae[0];const Y=new s(p.ref),{tl:R}=Y;switch(p.timePeriod){case"thisWeek":return`AND(TODAY()-ROUNDDOWN(${R},0)<=WEEKDAY(TODAY())-1,ROUNDDOWN(${R},0)-TODAY()<=7-WEEKDAY(TODAY()))`;case"lastWeek":return`AND(TODAY()-ROUNDDOWN(${R},0)>=(WEEKDAY(TODAY())),TODAY()-ROUNDDOWN(${R},0)<(WEEKDAY(TODAY())+7))`;case"nextWeek":return`AND(ROUNDDOWN(${R},0)-TODAY()>(7-WEEKDAY(TODAY())),ROUNDDOWN(${R},0)-TODAY()<(15-WEEKDAY(TODAY())))`;case"yesterday":return`FLOOR(${R},1)=TODAY()-1`;case"today":return`FLOOR(${R},1)=TODAY()`;case"tomorrow":return`FLOOR(${R},1)=TODAY()+1`;case"last7Days":return`AND(TODAY()-FLOOR(${R},1)<=6,FLOOR(${R},1)<=TODAY())`;case"lastMonth":return`AND(MONTH(${R})=MONTH(EDATE(TODAY(),0-1)),YEAR(${R})=YEAR(EDATE(TODAY(),0-1)))`;case"thisMonth":return`AND(MONTH(${R})=MONTH(TODAY()),YEAR(${R})=YEAR(TODAY()))`;case"nextMonth":return`AND(MONTH(${R})=MONTH(EDATE(TODAY(),0+1)),YEAR(${R})=YEAR(EDATE(TODAY(),0+1)))`;default:return}})(m);Z&&this.formulaXform.render(u,Z),u.closeNode()}createNewModel(u){let{attributes:m}=u;return{...r(m),dxfId:e.toIntValue(m.dxfId),priority:e.toIntValue(m.priority),timePeriod:m.timePeriod,percent:e.toBoolValue(m.percent),bottom:e.toBoolValue(m.bottom),rank:e.toIntValue(m.rank),aboveAverage:e.toBoolValue(m.aboveAverage)}}onParserClose(u,m){switch(u){case"dataBar":case"extLst":case"colorScale":case"iconSet":Object.assign(this.model,m.model);break;case"formula":this.model.formulae=this.model.formulae||[],this.model.formulae.push(m.model)}}}C.exports=h},{"../../../../doc/range":10,"../../base-xform":32,"../../composite-xform":48,"./color-scale-xform":85,"./databar-xform":88,"./ext-lst-ref-xform":89,"./formula-xform":90,"./icon-set-xform":91}],84:[function(g,C,i){const e=g("../../base-xform");C.exports=class extends e{get tag(){return"cfvo"}render(A,s){A.leafNode(this.tag,{type:s.type,val:s.value})}parseOpen(A){this.model={type:A.attributes.type,value:e.toFloatValue(A.attributes.val)}}parseClose(A){return A!==this.tag}}},{"../../base-xform":32}],85:[function(g,C,i){const e=g("../../composite-xform"),A=g("../../style/color-xform"),s=g("./cfvo-xform");C.exports=class extends e{constructor(){super(),this.map={cfvo:this.cfvoXform=new s,color:this.colorXform=new A}}get tag(){return"colorScale"}render(l,n){l.openNode(this.tag),n.cfvo.forEach(a=>{this.cfvoXform.render(l,a)}),n.color.forEach(a=>{this.colorXform.render(l,a)}),l.closeNode()}createNewModel(l){return{cfvo:[],color:[]}}onParserClose(l,n){this.model[l].push(n.model)}}},{"../../composite-xform":48,"../../style/color-xform":128,"./cfvo-xform":84}],86:[function(g,C,i){const e=g("../../composite-xform"),A=g("./cf-rule-xform");C.exports=class extends e{constructor(){super(),this.map={cfRule:new A}}get tag(){return"conditionalFormatting"}render(s,l){l.rules.some(A.isPrimitive)&&(s.openNode(this.tag,{sqref:l.ref}),l.rules.forEach(n=>{A.isPrimitive(n)&&(n.ref=l.ref,this.map.cfRule.render(s,n))}),s.closeNode())}createNewModel(s){let{attributes:l}=s;return{ref:l.sqref,rules:[]}}onParserClose(s,l){this.model.rules.push(l.model)}}},{"../../composite-xform":48,"./cf-rule-xform":83}],87:[function(g,C,i){const e=g("../../base-xform"),A=g("./conditional-formatting-xform");C.exports=class extends e{constructor(){super(),this.cfXform=new A}get tag(){return"conditionalFormatting"}reset(){this.model=[]}prepare(s,l){let n=s.reduce((a,d)=>Math.max(a,...d.rules.map(o=>o.priority||0)),1);s.forEach(a=>{a.rules.forEach(d=>{d.priority||(d.priority=n++),d.style&&(d.dxfId=l.styles.addDxfStyle(d.style))})})}render(s,l){l.forEach(n=>{this.cfXform.render(s,n)})}parseOpen(s){if(this.parser)return this.parser.parseOpen(s),!0;switch(s.name){case"conditionalFormatting":return this.parser=this.cfXform,this.parser.parseOpen(s),!0;default:return!1}}parseText(s){this.parser&&this.parser.parseText(s)}parseClose(s){return!!this.parser&&(!!this.parser.parseClose(s)||(this.model.push(this.parser.model),this.parser=void 0,!1))}reconcile(s,l){s.forEach(n=>{n.rules.forEach(a=>{a.dxfId!==void 0&&(a.style=l.styles.getDxfStyle(a.dxfId),delete a.dxfId)})})}}},{"../../base-xform":32,"./conditional-formatting-xform":86}],88:[function(g,C,i){const e=g("../../composite-xform"),A=g("../../style/color-xform"),s=g("./cfvo-xform");C.exports=class extends e{constructor(){super(),this.map={cfvo:this.cfvoXform=new s,color:this.colorXform=new A}}get tag(){return"dataBar"}render(l,n){l.openNode(this.tag),n.cfvo.forEach(a=>{this.cfvoXform.render(l,a)}),this.colorXform.render(l,n.color),l.closeNode()}createNewModel(){return{cfvo:[]}}onParserClose(l,n){switch(l){case"cfvo":this.model.cfvo.push(n.model);break;case"color":this.model.color=n.model}}}},{"../../composite-xform":48,"../../style/color-xform":128,"./cfvo-xform":84}],89:[function(g,C,i){const e=g("../../base-xform"),A=g("../../composite-xform");class s extends e{get tag(){return"x14:id"}render(a,d){a.leafNode(this.tag,null,d)}parseOpen(){this.model=""}parseText(a){this.model+=a}parseClose(a){return a!==this.tag}}class l extends A{constructor(){super(),this.map={"x14:id":this.idXform=new s}}get tag(){return"ext"}render(a,d){a.openNode(this.tag,{uri:"{B025F937-C7B1-47D3-B67F-A62EFF666E3E}","xmlns:x14":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"}),this.idXform.render(a,d.x14Id),a.closeNode()}createNewModel(){return{}}onParserClose(a,d){this.model.x14Id=d.model}}C.exports=class extends A{constructor(){super(),this.map={ext:new l}}get tag(){return"extLst"}render(n,a){n.openNode(this.tag),this.map.ext.render(n,a),n.closeNode()}createNewModel(){return{}}onParserClose(n,a){Object.assign(this.model,a.model)}}},{"../../base-xform":32,"../../composite-xform":48}],90:[function(g,C,i){const e=g("../../base-xform");C.exports=class extends e{get tag(){return"formula"}render(A,s){A.leafNode(this.tag,null,s)}parseOpen(){this.model=""}parseText(A){this.model+=A}parseClose(A){return A!==this.tag}}},{"../../base-xform":32}],91:[function(g,C,i){const e=g("../../base-xform"),A=g("../../composite-xform"),s=g("./cfvo-xform");C.exports=class extends A{constructor(){super(),this.map={cfvo:this.cfvoXform=new s}}get tag(){return"iconSet"}render(l,n){l.openNode(this.tag,{iconSet:e.toStringAttribute(n.iconSet,"3TrafficLights"),reverse:e.toBoolAttribute(n.reverse,!1),showValue:e.toBoolAttribute(n.showValue,!0)}),n.cfvo.forEach(a=>{this.cfvoXform.render(l,a)}),l.closeNode()}createNewModel(l){let{attributes:n}=l;return{iconSet:e.toStringValue(n.iconSet,"3TrafficLights"),reverse:e.toBoolValue(n.reverse),showValue:e.toBoolValue(n.showValue),cfvo:[]}}onParserClose(l,n){this.model[l].push(n.model)}}},{"../../base-xform":32,"../../composite-xform":48,"./cfvo-xform":84}],92:[function(g,C,i){const e=g("../../../utils/utils"),A=g("../base-xform");C.exports=class extends A{get tag(){return"col"}prepare(s,l){const n=l.styles.addStyleModel(s.style||{});n&&(s.styleId=n)}render(s,l){s.openNode("col"),s.addAttribute("min",l.min),s.addAttribute("max",l.max),l.width&&s.addAttribute("width",l.width),l.styleId&&s.addAttribute("style",l.styleId),l.hidden&&s.addAttribute("hidden","1"),l.bestFit&&s.addAttribute("bestFit","1"),l.outlineLevel&&s.addAttribute("outlineLevel",l.outlineLevel),l.collapsed&&s.addAttribute("collapsed","1"),s.addAttribute("customWidth","1"),s.closeNode()}parseOpen(s){if(s.name==="col"){const l=this.model={min:parseInt(s.attributes.min||"0",10),max:parseInt(s.attributes.max||"0",10),width:s.attributes.width===void 0?void 0:parseFloat(s.attributes.width||"0")};return s.attributes.style&&(l.styleId=parseInt(s.attributes.style,10)),e.parseBoolean(s.attributes.hidden)&&(l.hidden=!0),e.parseBoolean(s.attributes.bestFit)&&(l.bestFit=!0),s.attributes.outlineLevel&&(l.outlineLevel=parseInt(s.attributes.outlineLevel,10)),e.parseBoolean(s.attributes.collapsed)&&(l.collapsed=!0),!0}return!1}parseText(){}parseClose(){return!1}reconcile(s,l){s.styleId&&(s.style=l.styles.getStyleModel(s.styleId))}}},{"../../../utils/utils":27,"../base-xform":32}],93:[function(g,C,i){const e=g("../../../utils/under-dash"),A=g("../../../utils/utils"),s=g("../../../utils/col-cache"),l=g("../base-xform"),n=g("../../../doc/range");function a(o,c,r,h){const b=c[r];b!==void 0?o[r]=b:h!==void 0&&(o[r]=h)}function d(o,c,r,h){const b=c[r];b!==void 0&&(o[r]=A.parseBoolean(b))}C.exports=class extends l{get tag(){return"dataValidations"}render(o,c){const r=function(h){const b=e.map(h,(Z,p)=>({address:p,dataValidation:Z,marked:!1})).sort((Z,p)=>e.strcmp(Z.address,p.address)),u=e.keyBy(b,"address"),m=(Z,p,Y)=>{for(let R=0;R<p;R++){const X=s.encodeAddress(Z.row+R,Y);if(!h[X]||!e.isEqual(h[Z.address],h[X]))return!1}return!0};return b.map(Z=>{if(!Z.marked){const p=s.decodeEx(Z.address);if(p.dimensions)return u[p.dimensions].marked=!0,{...Z.dataValidation,sqref:Z.address};let Y=1,R=s.encodeAddress(p.row+Y,p.col);for(;h[R]&&e.isEqual(Z.dataValidation,h[R]);)Y++,R=s.encodeAddress(p.row+Y,p.col);let X=1;for(;m(p,Y,p.col+X);)X++;for(let H=0;H<Y;H++)for(let S=0;S<X;S++)R=s.encodeAddress(p.row+H,p.col+S),u[R].marked=!0;if(Y>1||X>1){const H=p.row+(Y-1),S=p.col+(X-1);return{...Z.dataValidation,sqref:`${Z.address}:${s.encodeAddress(H,S)}`}}return{...Z.dataValidation,sqref:Z.address}}return null}).filter(Boolean)}(c);r.length&&(o.openNode("dataValidations",{count:r.length}),r.forEach(h=>{o.openNode("dataValidation"),h.type!=="any"&&(o.addAttribute("type",h.type),h.operator&&h.type!=="list"&&h.operator!=="between"&&o.addAttribute("operator",h.operator),h.allowBlank&&o.addAttribute("allowBlank","1")),h.showInputMessage&&o.addAttribute("showInputMessage","1"),h.promptTitle&&o.addAttribute("promptTitle",h.promptTitle),h.prompt&&o.addAttribute("prompt",h.prompt),h.showErrorMessage&&o.addAttribute("showErrorMessage","1"),h.errorStyle&&o.addAttribute("errorStyle",h.errorStyle),h.errorTitle&&o.addAttribute("errorTitle",h.errorTitle),h.error&&o.addAttribute("error",h.error),o.addAttribute("sqref",h.sqref),(h.formulae||[]).forEach((b,u)=>{o.openNode("formula"+(u+1)),h.type==="date"?o.writeText(A.dateToExcel(new Date(b))):o.writeText(b),o.closeNode()}),o.closeNode()}),o.closeNode())}parseOpen(o){switch(o.name){case"dataValidations":return this.model={},!0;case"dataValidation":{this._address=o.attributes.sqref;const c={type:o.attributes.type||"any",formulae:[]};switch(o.attributes.type&&d(c,o.attributes,"allowBlank"),d(c,o.attributes,"showInputMessage"),d(c,o.attributes,"showErrorMessage"),c.type){case"any":case"list":case"custom":break;default:a(c,o.attributes,"operator","between")}return a(c,o.attributes,"promptTitle"),a(c,o.attributes,"prompt"),a(c,o.attributes,"errorStyle"),a(c,o.attributes,"errorTitle"),a(c,o.attributes,"error"),this._dataValidation=c,!0}case"formula1":case"formula2":return this._formula=[],!0;default:return!1}}parseText(o){this._formula&&this._formula.push(o)}parseClose(o){switch(o){case"dataValidations":return!1;case"dataValidation":return this._dataValidation.formulae&&this._dataValidation.formulae.length||(delete this._dataValidation.formulae,delete this._dataValidation.operator),(this._address.split(/\s+/g)||[]).forEach(c=>{c.includes(":")?new n(c).forEachAddress(r=>{this.model[r]=this._dataValidation}):this.model[c]=this._dataValidation}),!0;case"formula1":case"formula2":{let c=this._formula.join("");switch(this._dataValidation.type){case"whole":case"textLength":c=parseInt(c,10);break;case"decimal":c=parseFloat(c);break;case"date":c=A.excelToDate(parseFloat(c))}return this._dataValidation.formulae.push(c),this._formula=void 0,!0}default:return!0}}}},{"../../../doc/range":10,"../../../utils/col-cache":19,"../../../utils/under-dash":26,"../../../utils/utils":27,"../base-xform":32}],94:[function(g,C,i){const e=g("../base-xform");C.exports=class extends e{get tag(){return"dimension"}render(A,s){s&&A.leafNode("dimension",{ref:s})}parseOpen(A){return A.name==="dimension"&&(this.model=A.attributes.ref,!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],95:[function(g,C,i){const e=g("../base-xform");C.exports=class extends e{get tag(){return"drawing"}render(A,s){s&&A.leafNode(this.tag,{"r:id":s.rId})}parseOpen(A){switch(A.name){case this.tag:return this.model={rId:A.attributes["r:id"]},!0;default:return!1}}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],96:[function(g,C,i){const e=g("../composite-xform"),A=g("./cf-ext/conditional-formattings-ext-xform");class s extends e{constructor(){super(),this.map={"x14:conditionalFormattings":this.conditionalFormattings=new A}}get tag(){return"ext"}hasContent(n){return this.conditionalFormattings.hasContent(n.conditionalFormattings)}prepare(n,a){this.conditionalFormattings.prepare(n.conditionalFormattings,a)}render(n,a){n.openNode("ext",{uri:"{78C0D931-6437-407d-A8EE-F0AAD7539E65}","xmlns:x14":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"}),this.conditionalFormattings.render(n,a.conditionalFormattings),n.closeNode()}createNewModel(){return{}}onParserClose(n,a){this.model[n]=a.model}}C.exports=class extends e{constructor(){super(),this.map={ext:this.ext=new s}}get tag(){return"extLst"}prepare(l,n){this.ext.prepare(l,n)}hasContent(l){return this.ext.hasContent(l)}render(l,n){this.hasContent(n)&&(l.openNode("extLst"),this.ext.render(l,n),l.closeNode())}createNewModel(){return{}}onParserClose(l,n){Object.assign(this.model,n.model)}}},{"../composite-xform":48,"./cf-ext/conditional-formattings-ext-xform":78}],97:[function(g,C,i){const e=g("../base-xform");C.exports=class extends e{get tag(){return"headerFooter"}render(A,s){if(s){A.addRollback();let l=!1;A.openNode("headerFooter"),s.differentFirst&&(A.addAttribute("differentFirst","1"),l=!0),s.differentOddEven&&(A.addAttribute("differentOddEven","1"),l=!0),s.oddHeader&&typeof s.oddHeader=="string"&&(A.leafNode("oddHeader",null,s.oddHeader),l=!0),s.oddFooter&&typeof s.oddFooter=="string"&&(A.leafNode("oddFooter",null,s.oddFooter),l=!0),s.evenHeader&&typeof s.evenHeader=="string"&&(A.leafNode("evenHeader",null,s.evenHeader),l=!0),s.evenFooter&&typeof s.evenFooter=="string"&&(A.leafNode("evenFooter",null,s.evenFooter),l=!0),s.firstHeader&&typeof s.firstHeader=="string"&&(A.leafNode("firstHeader",null,s.firstHeader),l=!0),s.firstFooter&&typeof s.firstFooter=="string"&&(A.leafNode("firstFooter",null,s.firstFooter),l=!0),l?(A.closeNode(),A.commit()):A.rollback()}}parseOpen(A){switch(A.name){case"headerFooter":return this.model={},A.attributes.differentFirst&&(this.model.differentFirst=parseInt(A.attributes.differentFirst,0)===1),A.attributes.differentOddEven&&(this.model.differentOddEven=parseInt(A.attributes.differentOddEven,0)===1),!0;case"oddHeader":return this.currentNode="oddHeader",!0;case"oddFooter":return this.currentNode="oddFooter",!0;case"evenHeader":return this.currentNode="evenHeader",!0;case"evenFooter":return this.currentNode="evenFooter",!0;case"firstHeader":return this.currentNode="firstHeader",!0;case"firstFooter":return this.currentNode="firstFooter",!0;default:return!1}}parseText(A){switch(this.currentNode){case"oddHeader":this.model.oddHeader=A;break;case"oddFooter":this.model.oddFooter=A;break;case"evenHeader":this.model.evenHeader=A;break;case"evenFooter":this.model.evenFooter=A;break;case"firstHeader":this.model.firstHeader=A;break;case"firstFooter":this.model.firstFooter=A}}parseClose(){switch(this.currentNode){case"oddHeader":case"oddFooter":case"evenHeader":case"evenFooter":case"firstHeader":case"firstFooter":return this.currentNode=void 0,!0;default:return!1}}}},{"../base-xform":32}],98:[function(g,C,i){const e=g("../base-xform");C.exports=class extends e{get tag(){return"hyperlink"}render(A,s){this.isInternalLink(s)?A.leafNode("hyperlink",{ref:s.address,"r:id":s.rId,tooltip:s.tooltip,location:s.target}):A.leafNode("hyperlink",{ref:s.address,"r:id":s.rId,tooltip:s.tooltip})}parseOpen(A){return A.name==="hyperlink"&&(this.model={address:A.attributes.ref,rId:A.attributes["r:id"],tooltip:A.attributes.tooltip},A.attributes.location&&(this.model.target=A.attributes.location),!0)}parseText(){}parseClose(){return!1}isInternalLink(A){return A.target&&/^[^!]+![a-zA-Z]+[\d]+$/.test(A.target)}}},{"../base-xform":32}],99:[function(g,C,i){const e=g("../base-xform");C.exports=class extends e{get tag(){return"mergeCell"}render(A,s){A.leafNode("mergeCell",{ref:s})}parseOpen(A){return A.name==="mergeCell"&&(this.model=A.attributes.ref,!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],100:[function(g,C,i){const e=g("../../../utils/under-dash"),A=g("../../../doc/range"),s=g("../../../utils/col-cache"),l=g("../../../doc/enums");C.exports=class{constructor(){this.merges={}}add(n){if(this.merges[n.master])this.merges[n.master].expandToAddress(n.address);else{const a=`${n.master}:${n.address}`;this.merges[n.master]=new A(a)}}get mergeCells(){return e.map(this.merges,n=>n.range)}reconcile(n,a){e.each(n,d=>{const o=s.decode(d);for(let c=o.top;c<=o.bottom;c++){const r=a[c-1];for(let h=o.left;h<=o.right;h++){const b=r.cells[h-1];b?b.type===l.ValueType.Merge&&(b.master=o.tl):r.cells[h]={type:l.ValueType.Null,address:s.encodeAddress(c,h)}}}})}getMasterAddress(n){const a=this.hash[n];return a&&a.tl}}},{"../../../doc/enums":7,"../../../doc/range":10,"../../../utils/col-cache":19,"../../../utils/under-dash":26}],101:[function(g,C,i){const e=g("../base-xform"),A=s=>s!==void 0;C.exports=class extends e{get tag(){return"outlinePr"}render(s,l){return!(!l||!A(l.summaryBelow)&&!A(l.summaryRight))&&(s.leafNode(this.tag,{summaryBelow:A(l.summaryBelow)?Number(l.summaryBelow):void 0,summaryRight:A(l.summaryRight)?Number(l.summaryRight):void 0}),!0)}parseOpen(s){return s.name===this.tag&&(this.model={summaryBelow:A(s.attributes.summaryBelow)?!!Number(s.attributes.summaryBelow):void 0,summaryRight:A(s.attributes.summaryRight)?!!Number(s.attributes.summaryRight):void 0},!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],102:[function(g,C,i){const e=g("../base-xform");C.exports=class extends e{get tag(){return"brk"}render(A,s){A.leafNode("brk",s)}parseOpen(A){return A.name==="brk"&&(this.model=A.attributes.ref,!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],103:[function(g,C,i){const e=g("../../../utils/under-dash"),A=g("../base-xform");C.exports=class extends A{get tag(){return"pageMargins"}render(s,l){if(l){const n={left:l.left,right:l.right,top:l.top,bottom:l.bottom,header:l.header,footer:l.footer};e.some(n,a=>a!==void 0)&&s.leafNode(this.tag,n)}}parseOpen(s){switch(s.name){case this.tag:return this.model={left:parseFloat(s.attributes.left||.7),right:parseFloat(s.attributes.right||.7),top:parseFloat(s.attributes.top||.75),bottom:parseFloat(s.attributes.bottom||.75),header:parseFloat(s.attributes.header||.3),footer:parseFloat(s.attributes.footer||.3)},!0;default:return!1}}parseText(){}parseClose(){return!1}}},{"../../../utils/under-dash":26,"../base-xform":32}],104:[function(g,C,i){const e=g("../base-xform");C.exports=class extends e{get tag(){return"pageSetUpPr"}render(A,s){return!(!s||!s.fitToPage)&&(A.leafNode(this.tag,{fitToPage:s.fitToPage?"1":void 0}),!0)}parseOpen(A){return A.name===this.tag&&(this.model={fitToPage:A.attributes.fitToPage==="1"},!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],105:[function(g,C,i){const e=g("../../../utils/under-dash"),A=g("../base-xform");function s(d){return d?"1":void 0}function l(d){switch(d){case"overThenDown":return d;default:return}}function n(d){switch(d){case"atEnd":case"asDisplyed":return d;default:return}}function a(d){switch(d){case"dash":case"blank":case"NA":return d;default:return}}C.exports=class extends A{get tag(){return"pageSetup"}render(d,o){if(o){const c={paperSize:o.paperSize,orientation:o.orientation,horizontalDpi:o.horizontalDpi,verticalDpi:o.verticalDpi,pageOrder:l(o.pageOrder),blackAndWhite:s(o.blackAndWhite),draft:s(o.draft),cellComments:n(o.cellComments),errors:a(o.errors),scale:o.scale,fitToWidth:o.fitToWidth,fitToHeight:o.fitToHeight,firstPageNumber:o.firstPageNumber,useFirstPageNumber:s(o.firstPageNumber),usePrinterDefaults:s(o.usePrinterDefaults),copies:o.copies};e.some(c,r=>r!==void 0)&&d.leafNode(this.tag,c)}}parseOpen(d){switch(d.name){case this.tag:return this.model={paperSize:(o=d.attributes.paperSize,o!==void 0?parseInt(o,10):void 0),orientation:d.attributes.orientation||"portrait",horizontalDpi:parseInt(d.attributes.horizontalDpi||"4294967295",10),verticalDpi:parseInt(d.attributes.verticalDpi||"4294967295",10),pageOrder:d.attributes.pageOrder||"downThenOver",blackAndWhite:d.attributes.blackAndWhite==="1",draft:d.attributes.draft==="1",cellComments:d.attributes.cellComments||"None",errors:d.attributes.errors||"displayed",scale:parseInt(d.attributes.scale||"100",10),fitToWidth:parseInt(d.attributes.fitToWidth||"1",10),fitToHeight:parseInt(d.attributes.fitToHeight||"1",10),firstPageNumber:parseInt(d.attributes.firstPageNumber||"1",10),useFirstPageNumber:d.attributes.useFirstPageNumber==="1",usePrinterDefaults:d.attributes.usePrinterDefaults==="1",copies:parseInt(d.attributes.copies||"1",10)},!0;default:return!1}var o}parseText(){}parseClose(){return!1}}},{"../../../utils/under-dash":26,"../base-xform":32}],106:[function(g,C,i){const e=g("../base-xform");C.exports=class extends e{get tag(){return"picture"}render(A,s){s&&A.leafNode(this.tag,{"r:id":s.rId})}parseOpen(A){switch(A.name){case this.tag:return this.model={rId:A.attributes["r:id"]},!0;default:return!1}}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],107:[function(g,C,i){const e=g("../../../utils/under-dash"),A=g("../base-xform");function s(l){return l?"1":void 0}C.exports=class extends A{get tag(){return"printOptions"}render(l,n){if(n){const a={headings:s(n.showRowColHeaders),gridLines:s(n.showGridLines),horizontalCentered:s(n.horizontalCentered),verticalCentered:s(n.verticalCentered)};e.some(a,d=>d!==void 0)&&l.leafNode(this.tag,a)}}parseOpen(l){switch(l.name){case this.tag:return this.model={showRowColHeaders:l.attributes.headings==="1",showGridLines:l.attributes.gridLines==="1",horizontalCentered:l.attributes.horizontalCentered==="1",verticalCentered:l.attributes.verticalCentered==="1"},!0;default:return!1}}parseText(){}parseClose(){return!1}}},{"../../../utils/under-dash":26,"../base-xform":32}],108:[function(g,C,i){const e=g("./page-breaks-xform"),A=g("../list-xform");C.exports=class extends A{constructor(){super({tag:"rowBreaks",count:!0,childXform:new e})}render(s,l){if(l&&l.length){s.openNode(this.tag,this.$),this.count&&(s.addAttribute(this.$count,l.length),s.addAttribute("manualBreakCount",l.length));const{childXform:n}=this;l.forEach(a=>{n.render(s,a)}),s.closeNode()}else this.empty&&s.leafNode(this.tag)}}},{"../list-xform":71,"./page-breaks-xform":102}],109:[function(g,C,i){const e=g("../base-xform"),A=g("../../../utils/utils"),s=g("./cell-xform");C.exports=class extends e{constructor(l){super(),this.maxItems=l&&l.maxItems,this.map={c:new s}}get tag(){return"row"}prepare(l,n){const a=n.styles.addStyleModel(l.style);a&&(l.styleId=a);const d=this.map.c;l.cells.forEach(o=>{d.prepare(o,n)})}render(l,n,a){l.openNode("row"),l.addAttribute("r",n.number),n.height&&(l.addAttribute("ht",n.height),l.addAttribute("customHeight","1")),n.hidden&&l.addAttribute("hidden","1"),n.min>0&&n.max>0&&n.min<=n.max&&l.addAttribute("spans",`${n.min}:${n.max}`),n.styleId&&(l.addAttribute("s",n.styleId),l.addAttribute("customFormat","1")),l.addAttribute("x14ac:dyDescent","0.25"),n.outlineLevel&&l.addAttribute("outlineLevel",n.outlineLevel),n.collapsed&&l.addAttribute("collapsed","1");const d=this.map.c;n.cells.forEach(o=>{d.render(l,o,a)}),l.closeNode()}parseOpen(l){if(this.parser)return this.parser.parseOpen(l),!0;if(l.name==="row"){this.numRowsSeen+=1;const n=l.attributes.spans?l.attributes.spans.split(":").map(d=>parseInt(d,10)):[void 0,void 0],a=this.model={number:parseInt(l.attributes.r,10),min:n[0],max:n[1],cells:[]};return l.attributes.s&&(a.styleId=parseInt(l.attributes.s,10)),A.parseBoolean(l.attributes.hidden)&&(a.hidden=!0),A.parseBoolean(l.attributes.bestFit)&&(a.bestFit=!0),l.attributes.ht&&(a.height=parseFloat(l.attributes.ht)),l.attributes.outlineLevel&&(a.outlineLevel=parseInt(l.attributes.outlineLevel,10)),A.parseBoolean(l.attributes.collapsed)&&(a.collapsed=!0),!0}return this.parser=this.map[l.name],!!this.parser&&(this.parser.parseOpen(l),!0)}parseText(l){this.parser&&this.parser.parseText(l)}parseClose(l){if(this.parser){if(!this.parser.parseClose(l)){if(this.model.cells.push(this.parser.model),this.maxItems&&this.model.cells.length>this.maxItems)throw new Error(`Max column count (${this.maxItems}) exceeded`);this.parser=void 0}return!0}return!1}reconcile(l,n){l.style=l.styleId?n.styles.getStyleModel(l.styleId):{},l.styleId!==void 0&&(l.styleId=void 0);const a=this.map.c;l.cells.forEach(d=>{a.reconcile(d,n)})}}},{"../../../utils/utils":27,"../base-xform":32,"./cell-xform":73}],110:[function(g,C,i){const e=g("../../../utils/under-dash"),A=g("../base-xform");C.exports=class extends A{get tag(){return"sheetFormatPr"}render(s,l){if(l){const n={defaultRowHeight:l.defaultRowHeight,outlineLevelRow:l.outlineLevelRow,outlineLevelCol:l.outlineLevelCol,"x14ac:dyDescent":l.dyDescent};l.defaultColWidth&&(n.defaultColWidth=l.defaultColWidth),l.defaultRowHeight&&l.defaultRowHeight===15||(n.customHeight="1"),e.some(n,a=>a!==void 0)&&s.leafNode("sheetFormatPr",n)}}parseOpen(s){return s.name==="sheetFormatPr"&&(this.model={defaultRowHeight:parseFloat(s.attributes.defaultRowHeight||"0"),dyDescent:parseFloat(s.attributes["x14ac:dyDescent"]||"0"),outlineLevelRow:parseInt(s.attributes.outlineLevelRow||"0",10),outlineLevelCol:parseInt(s.attributes.outlineLevelCol||"0",10)},s.attributes.defaultColWidth&&(this.model.defaultColWidth=parseFloat(s.attributes.defaultColWidth)),!0)}parseText(){}parseClose(){return!1}}},{"../../../utils/under-dash":26,"../base-xform":32}],111:[function(g,C,i){const e=g("../base-xform"),A=g("../style/color-xform"),s=g("./page-setup-properties-xform"),l=g("./outline-properties-xform");C.exports=class extends e{constructor(){super(),this.map={tabColor:new A("tabColor"),pageSetUpPr:new s,outlinePr:new l}}get tag(){return"sheetPr"}render(n,a){if(a){n.addRollback(),n.openNode("sheetPr");let d=!1;d=this.map.tabColor.render(n,a.tabColor)||d,d=this.map.pageSetUpPr.render(n,a.pageSetup)||d,d=this.map.outlinePr.render(n,a.outlineProperties)||d,d?(n.closeNode(),n.commit()):n.rollback()}}parseOpen(n){return this.parser?(this.parser.parseOpen(n),!0):n.name===this.tag?(this.reset(),!0):!!this.map[n.name]&&(this.parser=this.map[n.name],this.parser.parseOpen(n),!0)}parseText(n){return!!this.parser&&(this.parser.parseText(n),!0)}parseClose(n){return this.parser?(this.parser.parseClose(n)||(this.parser=void 0),!0):(this.map.tabColor.model||this.map.pageSetUpPr.model||this.map.outlinePr.model?(this.model={},this.map.tabColor.model&&(this.model.tabColor=this.map.tabColor.model),this.map.pageSetUpPr.model&&(this.model.pageSetup=this.map.pageSetUpPr.model),this.map.outlinePr.model&&(this.model.outlineProperties=this.map.outlinePr.model)):this.model=null,!1)}}},{"../base-xform":32,"../style/color-xform":128,"./outline-properties-xform":101,"./page-setup-properties-xform":104}],112:[function(g,C,i){const e=g("../../../utils/under-dash"),A=g("../base-xform");function s(n,a){return n?a:void 0}function l(n,a){return n===a||void 0}C.exports=class extends A{get tag(){return"sheetProtection"}render(n,a){if(a){const d={sheet:s(a.sheet,"1"),selectLockedCells:a.selectLockedCells===!1?"1":void 0,selectUnlockedCells:a.selectUnlockedCells===!1?"1":void 0,formatCells:s(a.formatCells,"0"),formatColumns:s(a.formatColumns,"0"),formatRows:s(a.formatRows,"0"),insertColumns:s(a.insertColumns,"0"),insertRows:s(a.insertRows,"0"),insertHyperlinks:s(a.insertHyperlinks,"0"),deleteColumns:s(a.deleteColumns,"0"),deleteRows:s(a.deleteRows,"0"),sort:s(a.sort,"0"),autoFilter:s(a.autoFilter,"0"),pivotTables:s(a.pivotTables,"0")};a.sheet&&(d.algorithmName=a.algorithmName,d.hashValue=a.hashValue,d.saltValue=a.saltValue,d.spinCount=a.spinCount,d.objects=s(a.objects===!1,"1"),d.scenarios=s(a.scenarios===!1,"1")),e.some(d,o=>o!==void 0)&&n.leafNode(this.tag,d)}}parseOpen(n){switch(n.name){case this.tag:return this.model={sheet:l(n.attributes.sheet,"1"),objects:n.attributes.objects!=="1"&&void 0,scenarios:n.attributes.scenarios!=="1"&&void 0,selectLockedCells:n.attributes.selectLockedCells!=="1"&&void 0,selectUnlockedCells:n.attributes.selectUnlockedCells!=="1"&&void 0,formatCells:l(n.attributes.formatCells,"0"),formatColumns:l(n.attributes.formatColumns,"0"),formatRows:l(n.attributes.formatRows,"0"),insertColumns:l(n.attributes.insertColumns,"0"),insertRows:l(n.attributes.insertRows,"0"),insertHyperlinks:l(n.attributes.insertHyperlinks,"0"),deleteColumns:l(n.attributes.deleteColumns,"0"),deleteRows:l(n.attributes.deleteRows,"0"),sort:l(n.attributes.sort,"0"),autoFilter:l(n.attributes.autoFilter,"0"),pivotTables:l(n.attributes.pivotTables,"0")},n.attributes.algorithmName&&(this.model.algorithmName=n.attributes.algorithmName,this.model.hashValue=n.attributes.hashValue,this.model.saltValue=n.attributes.saltValue,this.model.spinCount=parseInt(n.attributes.spinCount,10)),!0;default:return!1}}parseText(){}parseClose(){return!1}}},{"../../../utils/under-dash":26,"../base-xform":32}],113:[function(g,C,i){const e=g("../../../utils/col-cache"),A=g("../base-xform"),s={frozen:"frozen",frozenSplit:"frozen",split:"split"};C.exports=class extends A{get tag(){return"sheetView"}prepare(l){switch(l.state){case"frozen":case"split":break;default:l.state="normal"}}render(l,n){l.openNode("sheetView",{workbookViewId:n.workbookViewId||0});const a=function(h,b,u){u&&l.addAttribute(h,b)};let d,o,c,r;switch(a("rightToLeft","1",n.rightToLeft===!0),a("tabSelected","1",n.tabSelected),a("showRuler","0",n.showRuler===!1),a("showRowColHeaders","0",n.showRowColHeaders===!1),a("showGridLines","0",n.showGridLines===!1),a("zoomScale",n.zoomScale,n.zoomScale),a("zoomScaleNormal",n.zoomScaleNormal,n.zoomScaleNormal),a("view",n.style,n.style),n.state){case"frozen":o=n.xSplit||0,c=n.ySplit||0,d=n.topLeftCell||e.getAddress(c+1,o+1).address,r=(n.xSplit&&n.ySplit?"bottomRight":n.xSplit&&"topRight")||"bottomLeft",l.leafNode("pane",{xSplit:n.xSplit||void 0,ySplit:n.ySplit||void 0,topLeftCell:d,activePane:r,state:"frozen"}),l.leafNode("selection",{pane:r,activeCell:n.activeCell,sqref:n.activeCell});break;case"split":n.activePane==="topLeft"&&(n.activePane=void 0),l.leafNode("pane",{xSplit:n.xSplit||void 0,ySplit:n.ySplit||void 0,topLeftCell:n.topLeftCell,activePane:n.activePane}),l.leafNode("selection",{pane:n.activePane,activeCell:n.activeCell,sqref:n.activeCell});break;case"normal":n.activeCell&&l.leafNode("selection",{activeCell:n.activeCell,sqref:n.activeCell})}l.closeNode()}parseOpen(l){switch(l.name){case"sheetView":return this.sheetView={workbookViewId:parseInt(l.attributes.workbookViewId,10),rightToLeft:l.attributes.rightToLeft==="1",tabSelected:l.attributes.tabSelected==="1",showRuler:l.attributes.showRuler!=="0",showRowColHeaders:l.attributes.showRowColHeaders!=="0",showGridLines:l.attributes.showGridLines!=="0",zoomScale:parseInt(l.attributes.zoomScale||"100",10),zoomScaleNormal:parseInt(l.attributes.zoomScaleNormal||"100",10),style:l.attributes.view},this.pane=void 0,this.selections={},!0;case"pane":return this.pane={xSplit:parseInt(l.attributes.xSplit||"0",10),ySplit:parseInt(l.attributes.ySplit||"0",10),topLeftCell:l.attributes.topLeftCell,activePane:l.attributes.activePane||"topLeft",state:l.attributes.state},!0;case"selection":{const n=l.attributes.pane||"topLeft";return this.selections[n]={pane:n,activeCell:l.attributes.activeCell},!0}default:return!1}}parseText(){}parseClose(l){let n,a;switch(l){case"sheetView":return this.sheetView&&this.pane?(n=this.model={workbookViewId:this.sheetView.workbookViewId,rightToLeft:this.sheetView.rightToLeft,state:s[this.pane.state]||"split",xSplit:this.pane.xSplit,ySplit:this.pane.ySplit,topLeftCell:this.pane.topLeftCell,showRuler:this.sheetView.showRuler,showRowColHeaders:this.sheetView.showRowColHeaders,showGridLines:this.sheetView.showGridLines,zoomScale:this.sheetView.zoomScale,zoomScaleNormal:this.sheetView.zoomScaleNormal},this.model.state==="split"&&(n.activePane=this.pane.activePane),a=this.selections[this.pane.activePane],a&&a.activeCell&&(n.activeCell=a.activeCell),this.sheetView.style&&(n.style=this.sheetView.style)):(n=this.model={workbookViewId:this.sheetView.workbookViewId,rightToLeft:this.sheetView.rightToLeft,state:"normal",showRuler:this.sheetView.showRuler,showRowColHeaders:this.sheetView.showRowColHeaders,showGridLines:this.sheetView.showGridLines,zoomScale:this.sheetView.zoomScale,zoomScaleNormal:this.sheetView.zoomScaleNormal},a=this.selections.topLeft,a&&a.activeCell&&(n.activeCell=a.activeCell),this.sheetView.style&&(n.style=this.sheetView.style)),!1;default:return!0}}reconcile(){}}},{"../../../utils/col-cache":19,"../base-xform":32}],114:[function(g,C,i){const e=g("../base-xform");C.exports=class extends e{get tag(){return"tablePart"}render(A,s){s&&A.leafNode(this.tag,{"r:id":s.rId})}parseOpen(A){switch(A.name){case this.tag:return this.model={rId:A.attributes["r:id"]},!0;default:return!1}}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],115:[function(g,C,i){const e=g("../../../utils/under-dash"),A=g("../../../utils/col-cache"),s=g("../../../utils/xml-stream"),l=g("../../rel-type"),n=g("./merges"),a=g("../base-xform"),d=g("../list-xform"),o=g("./row-xform"),c=g("./col-xform"),r=g("./dimension-xform"),h=g("./hyperlink-xform"),b=g("./merge-cell-xform"),u=g("./data-validations-xform"),m=g("./sheet-properties-xform"),Z=g("./sheet-format-properties-xform"),p=g("./sheet-view-xform"),Y=g("./sheet-protection-xform"),R=g("./page-margins-xform"),X=g("./page-setup-xform"),H=g("./print-options-xform"),S=g("./auto-filter-xform"),z=g("./picture-xform"),v=g("./drawing-xform"),K=g("./table-part-xform"),V=g("./row-breaks-xform"),N=g("./header-footer-xform"),B=g("./cf/conditional-formattings-xform"),G=g("./ext-lst-xform"),w=(y,f)=>{if(!f||!f.length)return y;if(!y||!y.length)return f;const D={},F={};return y.forEach(T=>{D[T.ref]=T,T.rules.forEach(Q=>{const{x14Id:P}=Q;P&&(F[P]=Q)})}),f.forEach(T=>{T.rules.forEach(Q=>{const P=F[Q.x14Id];P?((L,E)=>{Object.keys(E).forEach(J=>{const k=L[J],j=E[J];k===void 0&&j!==void 0&&(L[J]=j)})})(P,Q):D[T.ref]?D[T.ref].rules.push(Q):y.push({ref:T.ref,rules:[Q]})})}),y};class W extends a{constructor(f){super();const{maxRows:D,maxCols:F,ignoreNodes:T}=f||{};this.ignoreNodes=T||[],this.map={sheetPr:new m,dimension:new r,sheetViews:new d({tag:"sheetViews",count:!1,childXform:new p}),sheetFormatPr:new Z,cols:new d({tag:"cols",count:!1,childXform:new c}),sheetData:new d({tag:"sheetData",count:!1,empty:!0,childXform:new o({maxItems:F}),maxItems:D}),autoFilter:new S,mergeCells:new d({tag:"mergeCells",count:!0,childXform:new b}),rowBreaks:new V,hyperlinks:new d({tag:"hyperlinks",count:!1,childXform:new h}),pageMargins:new R,dataValidations:new u,pageSetup:new X,headerFooter:new N,printOptions:new H,picture:new z,drawing:new v,sheetProtection:new Y,tableParts:new d({tag:"tableParts",count:!0,childXform:new K}),conditionalFormatting:new B,extLst:new G}}prepare(f,D){D.merges=new n,f.hyperlinks=D.hyperlinks=[],f.comments=D.comments=[],D.formulae={},D.siFormulae=0,this.map.cols.prepare(f.cols,D),this.map.sheetData.prepare(f.rows,D),this.map.conditionalFormatting.prepare(f.conditionalFormattings,D),f.mergeCells=D.merges.mergeCells;const F=f.rels=[];function T(L){return"rId"+(L.length+1)}if(f.hyperlinks.forEach(L=>{const E=T(F);L.rId=E,F.push({Id:E,Type:l.Hyperlink,Target:L.target,TargetMode:"External"})}),f.comments.length>0){const L={Id:T(F),Type:l.Comments,Target:`../comments${f.id}.xml`};F.push(L);const E={Id:T(F),Type:l.VmlDrawing,Target:`../drawings/vmlDrawing${f.id}.vml`};F.push(E),f.comments.forEach(J=>{J.refAddress=A.decodeAddress(J.ref)}),D.commentRefs.push({commentName:"comments"+f.id,vmlDrawing:"vmlDrawing"+f.id})}const Q=[];let P;f.media.forEach(L=>{if(L.type==="background"){const E=T(F);P=D.media[L.imageId],F.push({Id:E,Type:l.Image,Target:`../media/${P.name}.${P.extension}`}),f.background={rId:E},f.image=D.media[L.imageId]}else if(L.type==="image"){let{drawing:E}=f;P=D.media[L.imageId],E||(E=f.drawing={rId:T(F),name:"drawing"+ ++D.drawingsCount,anchors:[],rels:[]},D.drawings.push(E),F.push({Id:E.rId,Type:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing",Target:`../drawings/${E.name}.xml`}));let J=this.preImageId===L.imageId?Q[L.imageId]:Q[E.rels.length];J||(J=T(E.rels),Q[E.rels.length]=J,E.rels.push({Id:J,Type:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",Target:`../media/${P.name}.${P.extension}`}));const k={picture:{rId:J},range:L.range};if(L.hyperlinks&&L.hyperlinks.hyperlink){const j=T(E.rels);Q[E.rels.length]=j,k.picture.hyperlinks={tooltip:L.hyperlinks.tooltip,rId:j},E.rels.push({Id:j,Type:l.Hyperlink,Target:L.hyperlinks.hyperlink,TargetMode:"External"})}this.preImageId=L.imageId,E.anchors.push(k)}}),f.tables.forEach(L=>{const E=T(F);L.rId=E,F.push({Id:E,Type:l.Table,Target:"../tables/"+L.target}),L.columns.forEach(J=>{const{style:k}=J;k&&(J.dxfId=D.styles.addDxfStyle(k))})}),this.map.extLst.prepare(f,D)}render(f,D){f.openXml(s.StdDocAttributes),f.openNode("worksheet",W.WORKSHEET_ATTRIBUTES);const F=D.properties?{defaultRowHeight:D.properties.defaultRowHeight,dyDescent:D.properties.dyDescent,outlineLevelCol:D.properties.outlineLevelCol,outlineLevelRow:D.properties.outlineLevelRow}:void 0;D.properties&&D.properties.defaultColWidth&&(F.defaultColWidth=D.properties.defaultColWidth);const T={outlineProperties:D.properties&&D.properties.outlineProperties,tabColor:D.properties&&D.properties.tabColor,pageSetup:D.pageSetup&&D.pageSetup.fitToPage?{fitToPage:D.pageSetup.fitToPage}:void 0},Q=D.pageSetup&&D.pageSetup.margins,P={showRowColHeaders:D.pageSetup&&D.pageSetup.showRowColHeaders,showGridLines:D.pageSetup&&D.pageSetup.showGridLines,horizontalCentered:D.pageSetup&&D.pageSetup.horizontalCentered,verticalCentered:D.pageSetup&&D.pageSetup.verticalCentered},L=D.sheetProtection;this.map.sheetPr.render(f,T),this.map.dimension.render(f,D.dimensions),this.map.sheetViews.render(f,D.views),this.map.sheetFormatPr.render(f,F),this.map.cols.render(f,D.cols),this.map.sheetData.render(f,D.rows),this.map.sheetProtection.render(f,L),this.map.autoFilter.render(f,D.autoFilter),this.map.mergeCells.render(f,D.mergeCells),this.map.conditionalFormatting.render(f,D.conditionalFormattings),this.map.dataValidations.render(f,D.dataValidations),this.map.hyperlinks.render(f,D.hyperlinks),this.map.printOptions.render(f,P),this.map.pageMargins.render(f,Q),this.map.pageSetup.render(f,D.pageSetup),this.map.headerFooter.render(f,D.headerFooter),this.map.rowBreaks.render(f,D.rowBreaks),this.map.drawing.render(f,D.drawing),this.map.picture.render(f,D.background),this.map.tableParts.render(f,D.tables),this.map.extLst.render(f,D),D.rels&&D.rels.forEach(E=>{E.Type===l.VmlDrawing&&f.leafNode("legacyDrawing",{"r:id":E.Id})}),f.closeNode()}parseOpen(f){return this.parser?(this.parser.parseOpen(f),!0):f.name==="worksheet"?(e.each(this.map,D=>{D.reset()}),!0):(this.map[f.name]&&!this.ignoreNodes.includes(f.name)&&(this.parser=this.map[f.name],this.parser.parseOpen(f)),!0)}parseText(f){this.parser&&this.parser.parseText(f)}parseClose(f){if(this.parser)return this.parser.parseClose(f)||(this.parser=void 0),!0;switch(f){case"worksheet":{const D=this.map.sheetFormatPr.model||{};this.map.sheetPr.model&&this.map.sheetPr.model.tabColor&&(D.tabColor=this.map.sheetPr.model.tabColor),this.map.sheetPr.model&&this.map.sheetPr.model.outlineProperties&&(D.outlineProperties=this.map.sheetPr.model.outlineProperties);const F={fitToPage:this.map.sheetPr.model&&this.map.sheetPr.model.pageSetup&&this.map.sheetPr.model.pageSetup.fitToPage||!1,margins:this.map.pageMargins.model},T=Object.assign(F,this.map.pageSetup.model,this.map.printOptions.model),Q=w(this.map.conditionalFormatting.model,this.map.extLst.model&&this.map.extLst.model["x14:conditionalFormattings"]);return this.model={dimensions:this.map.dimension.model,cols:this.map.cols.model,rows:this.map.sheetData.model,mergeCells:this.map.mergeCells.model,hyperlinks:this.map.hyperlinks.model,dataValidations:this.map.dataValidations.model,properties:D,views:this.map.sheetViews.model,pageSetup:T,headerFooter:this.map.headerFooter.model,background:this.map.picture.model,drawing:this.map.drawing.model,tables:this.map.tableParts.model,conditionalFormattings:Q},this.map.autoFilter.model&&(this.model.autoFilter=this.map.autoFilter.model),this.map.sheetProtection.model&&(this.model.sheetProtection=this.map.sheetProtection.model),!1}default:return!0}}reconcile(f,D){const F=(f.relationships||[]).reduce((Q,P)=>{if(Q[P.Id]=P,P.Type===l.Comments&&(f.comments=D.comments[P.Target].comments),P.Type===l.VmlDrawing&&f.comments&&f.comments.length){const L=D.vmlDrawings[P.Target].comments;f.comments.forEach((E,J)=>{E.note=Object.assign({},E.note,L[J])})}return Q},{});if(D.commentsMap=(f.comments||[]).reduce((Q,P)=>(P.ref&&(Q[P.ref]=P),Q),{}),D.hyperlinkMap=(f.hyperlinks||[]).reduce((Q,P)=>(P.rId&&(Q[P.address]=F[P.rId].Target),Q),{}),D.formulae={},f.rows=f.rows&&f.rows.filter(Boolean)||[],f.rows.forEach(Q=>{Q.cells=Q.cells&&Q.cells.filter(Boolean)||[]}),this.map.cols.reconcile(f.cols,D),this.map.sheetData.reconcile(f.rows,D),this.map.conditionalFormatting.reconcile(f.conditionalFormattings,D),f.media=[],f.drawing){const Q=F[f.drawing.rId].Target.match(/\/drawings\/([a-zA-Z0-9]+)[.][a-zA-Z]{3,4}$/);if(Q){const P=Q[1];D.drawings[P].anchors.forEach(L=>{if(L.medium){const E={type:"image",imageId:L.medium.index,range:L.range,hyperlinks:L.picture.hyperlinks};f.media.push(E)}})}}const T=f.background&&F[f.background.rId];if(T){const Q=T.Target.split("/media/")[1],P=D.mediaIndex&&D.mediaIndex[Q];P!==void 0&&f.media.push({type:"background",imageId:P})}f.tables=(f.tables||[]).map(Q=>{const P=F[Q.rId];return D.tables[P.Target]}),delete f.relationships,delete f.hyperlinks,delete f.comments}}W.WORKSHEET_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main","xmlns:r":"http://schemas.openxmlformats.org/officeDocument/2006/relationships","xmlns:mc":"http://schemas.openxmlformats.org/markup-compatibility/2006","mc:Ignorable":"x14ac","xmlns:x14ac":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"},C.exports=W},{"../../../utils/col-cache":19,"../../../utils/under-dash":26,"../../../utils/xml-stream":28,"../../rel-type":31,"../base-xform":32,"../list-xform":71,"./auto-filter-xform":72,"./cf/conditional-formattings-xform":87,"./col-xform":92,"./data-validations-xform":93,"./dimension-xform":94,"./drawing-xform":95,"./ext-lst-xform":96,"./header-footer-xform":97,"./hyperlink-xform":98,"./merge-cell-xform":99,"./merges":100,"./page-margins-xform":103,"./page-setup-xform":105,"./picture-xform":106,"./print-options-xform":107,"./row-breaks-xform":108,"./row-xform":109,"./sheet-format-properties-xform":110,"./sheet-properties-xform":111,"./sheet-protection-xform":112,"./sheet-view-xform":113,"./table-part-xform":114}],116:[function(g,C,i){const e=g("../base-xform");C.exports=class extends e{constructor(A){super(),this.tag=A.tag,this.attr=A.attr}render(A,s){s&&(A.openNode(this.tag),A.closeNode())}parseOpen(A){A.name===this.tag&&(this.model=!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],117:[function(g,C,i){const e=g("../base-xform");C.exports=class extends e{constructor(A){super(),this.tag=A.tag,this.attr=A.attr,this.attrs=A.attrs,this._format=A.format||function(s){try{return Number.isNaN(s.getTime())?"":s.toISOString()}catch{return""}},this._parse=A.parse||function(s){return new Date(s)}}render(A,s){s&&(A.openNode(this.tag),this.attrs&&A.addAttributes(this.attrs),this.attr?A.addAttribute(this.attr,this._format(s)):A.writeText(this._format(s)),A.closeNode())}parseOpen(A){A.name===this.tag&&(this.attr?this.model=this._parse(A.attributes[this.attr]):this.text=[])}parseText(A){this.attr||this.text.push(A)}parseClose(){return this.attr||(this.model=this._parse(this.text.join(""))),!1}}},{"../base-xform":32}],118:[function(g,C,i){const e=g("../base-xform");C.exports=class extends e{constructor(A){super(),this.tag=A.tag,this.attr=A.attr,this.attrs=A.attrs,this.zero=A.zero}render(A,s){(s||this.zero)&&(A.openNode(this.tag),this.attrs&&A.addAttributes(this.attrs),this.attr?A.addAttribute(this.attr,s):A.writeText(s),A.closeNode())}parseOpen(A){return A.name===this.tag&&(this.attr?this.model=parseInt(A.attributes[this.attr],10):this.text=[],!0)}parseText(A){this.attr||this.text.push(A)}parseClose(){return this.attr||(this.model=parseInt(this.text.join("")||0,10)),!1}}},{"../base-xform":32}],119:[function(g,C,i){const e=g("../base-xform");C.exports=class extends e{constructor(A){super(),this.tag=A.tag,this.attr=A.attr,this.attrs=A.attrs}render(A,s){s!==void 0&&(A.openNode(this.tag),this.attrs&&A.addAttributes(this.attrs),this.attr?A.addAttribute(this.attr,s):A.writeText(s),A.closeNode())}parseOpen(A){A.name===this.tag&&(this.attr?this.model=A.attributes[this.attr]:this.text=[])}parseText(A){this.attr||this.text.push(A)}parseClose(){return this.attr||(this.model=this.text.join("")),!1}}},{"../base-xform":32}],120:[function(g,C,i){const e=g("./base-xform"),A=g("../../utils/xml-stream");C.exports=class extends e{constructor(s){super(),this._model=s}render(s){if(!this._xml){const l=new A;(function n(a,d){a.openNode(d.tag,d.$),d.c&&d.c.forEach(o=>{n(a,o)}),d.t&&a.writeText(d.t),a.closeNode()})(l,this._model),this._xml=l.xml}s.writeXml(this._xml)}parseOpen(){return!0}parseText(){}parseClose(s){switch(s){case this._model.tag:return!1;default:return!0}}}},{"../../utils/xml-stream":28,"./base-xform":32}],121:[function(g,C,i){const e=g("./text-xform"),A=g("./rich-text-xform"),s=g("../base-xform");C.exports=class extends s{constructor(){super(),this.map={r:new A,t:new e}}get tag(){return"rPh"}render(l,n){if(l.openNode(this.tag,{sb:n.sb||0,eb:n.eb||0}),n&&n.hasOwnProperty("richText")&&n.richText){const{r:a}=this.map;n.richText.forEach(d=>{a.render(l,d)})}else n&&this.map.t.render(l,n.text);l.closeNode()}parseOpen(l){const{name:n}=l;return this.parser?(this.parser.parseOpen(l),!0):n===this.tag?(this.model={sb:parseInt(l.attributes.sb,10),eb:parseInt(l.attributes.eb,10)},!0):(this.parser=this.map[n],!!this.parser&&(this.parser.parseOpen(l),!0))}parseText(l){this.parser&&this.parser.parseText(l)}parseClose(l){if(this.parser){if(!this.parser.parseClose(l)){switch(l){case"r":{let n=this.model.richText;n||(n=this.model.richText=[]),n.push(this.parser.model);break}case"t":this.model.text=this.parser.model}this.parser=void 0}return!0}switch(l){case this.tag:return!1;default:return!0}}}},{"../base-xform":32,"./rich-text-xform":122,"./text-xform":125}],122:[function(g,C,i){const e=g("./text-xform"),A=g("../style/font-xform"),s=g("../base-xform");class l extends s{constructor(a){super(),this.model=a}get tag(){return"r"}get textXform(){return this._textXform||(this._textXform=new e)}get fontXform(){return this._fontXform||(this._fontXform=new A(l.FONT_OPTIONS))}render(a,d){d=d||this.model,a.openNode("r"),d.font&&this.fontXform.render(a,d.font),this.textXform.render(a,d.text),a.closeNode()}parseOpen(a){if(this.parser)return this.parser.parseOpen(a),!0;switch(a.name){case"r":return this.model={},!0;case"t":return this.parser=this.textXform,this.parser.parseOpen(a),!0;case"rPr":return this.parser=this.fontXform,this.parser.parseOpen(a),!0;default:return!1}}parseText(a){this.parser&&this.parser.parseText(a)}parseClose(a){switch(a){case"r":return!1;case"t":return this.model.text=this.parser.model,this.parser=void 0,!0;case"rPr":return this.model.font=this.parser.model,this.parser=void 0,!0;default:return this.parser&&this.parser.parseClose(a),!0}}}l.FONT_OPTIONS={tagName:"rPr",fontNameTag:"rFont"},C.exports=l},{"../base-xform":32,"../style/font-xform":131,"./text-xform":125}],123:[function(g,C,i){const e=g("./text-xform"),A=g("./rich-text-xform"),s=g("./phonetic-text-xform"),l=g("../base-xform");C.exports=class extends l{constructor(n){super(),this.model=n,this.map={r:new A,t:new e,rPh:new s}}get tag(){return"si"}render(n,a){n.openNode(this.tag),a&&a.hasOwnProperty("richText")&&a.richText?a.richText.length?a.richText.forEach(d=>{this.map.r.render(n,d)}):this.map.t.render(n,""):a!=null&&this.map.t.render(n,a),n.closeNode()}parseOpen(n){const{name:a}=n;return this.parser?(this.parser.parseOpen(n),!0):a===this.tag?(this.model={},!0):(this.parser=this.map[a],!!this.parser&&(this.parser.parseOpen(n),!0))}parseText(n){this.parser&&this.parser.parseText(n)}parseClose(n){if(this.parser){if(!this.parser.parseClose(n)){switch(n){case"r":{let a=this.model.richText;a||(a=this.model.richText=[]),a.push(this.parser.model);break}case"t":this.model=this.parser.model}this.parser=void 0}return!0}switch(n){case this.tag:return!1;default:return!0}}}},{"../base-xform":32,"./phonetic-text-xform":121,"./rich-text-xform":122,"./text-xform":125}],124:[function(g,C,i){const e=g("../../../utils/xml-stream"),A=g("../base-xform"),s=g("./shared-string-xform");C.exports=class extends A{constructor(l){super(),this.model=l||{values:[],count:0},this.hash=Object.create(null),this.rich=Object.create(null)}get sharedStringXform(){return this._sharedStringXform||(this._sharedStringXform=new s)}get values(){return this.model.values}get uniqueCount(){return this.model.values.length}get count(){return this.model.count}getString(l){return this.model.values[l]}add(l){return l.richText?this.addRichText(l):this.addText(l)}addText(l){let n=this.hash[l];return n===void 0&&(n=this.hash[l]=this.model.values.length,this.model.values.push(l)),this.model.count++,n}addRichText(l){const n=this.sharedStringXform.toXml(l);let a=this.rich[n];return a===void 0&&(a=this.rich[n]=this.model.values.length,this.model.values.push(l)),this.model.count++,a}render(l,n){n=n||this._values,l.openXml(e.StdDocAttributes),l.openNode("sst",{xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main",count:n.count,uniqueCount:n.values.length});const a=this.sharedStringXform;n.values.forEach(d=>{a.render(l,d)}),l.closeNode()}parseOpen(l){if(this.parser)return this.parser.parseOpen(l),!0;switch(l.name){case"sst":return!0;case"si":return this.parser=this.sharedStringXform,this.parser.parseOpen(l),!0;default:throw new Error("Unexpected xml node in parseOpen: "+JSON.stringify(l))}}parseText(l){this.parser&&this.parser.parseText(l)}parseClose(l){if(this.parser)return this.parser.parseClose(l)||(this.model.values.push(this.parser.model),this.model.count++,this.parser=void 0),!0;switch(l){case"sst":return!1;default:throw new Error("Unexpected xml node in parseClose: "+l)}}}},{"../../../utils/xml-stream":28,"../base-xform":32,"./shared-string-xform":123}],125:[function(g,C,i){const e=g("../base-xform");C.exports=class extends e{get tag(){return"t"}render(A,s){A.openNode("t"),/^\s|\n|\s$/.test(s)&&A.addAttribute("xml:space","preserve"),A.writeText(s),A.closeNode()}get model(){return this._text.join("").replace(/_x([0-9A-F]{4})_/g,(A,s)=>String.fromCharCode(parseInt(s,16)))}parseOpen(A){switch(A.name){case"t":return this._text=[],!0;default:return!1}}parseText(A){this._text.push(A)}parseClose(){return!1}}},{"../base-xform":32}],126:[function(g,C,i){const e=g("../../../doc/enums"),A=g("../../../utils/utils"),s=g("../base-xform"),l={horizontalValues:["left","center","right","fill","centerContinuous","distributed","justify"].reduce((a,d)=>(a[d]=!0,a),{}),horizontal(a){return this.horizontalValues[a]?a:void 0},verticalValues:["top","middle","bottom","distributed","justify"].reduce((a,d)=>(a[d]=!0,a),{}),vertical(a){return a==="middle"?"center":this.verticalValues[a]?a:void 0},wrapText:a=>!!a||void 0,shrinkToFit:a=>!!a||void 0,textRotation(a){switch(a){case"vertical":return a;default:return(a=A.validInt(a))>=-90&&a<=90?a:void 0}},indent:a=>(a=A.validInt(a),Math.max(0,a)),readingOrder(a){switch(a){case"ltr":return e.ReadingOrder.LeftToRight;case"rtl":return e.ReadingOrder.RightToLeft;default:return}}},n={toXml(a){if(a=l.textRotation(a)){if(a==="vertical")return 255;const d=Math.round(a);if(d>=0&&d<=90)return d;if(d<0&&d>=-90)return 90-d}},toModel(a){const d=A.validInt(a);if(d!==void 0){if(d===255)return"vertical";if(d>=0&&d<=90)return d;if(d>90&&d<=180)return 90-d}}};C.exports=class extends s{get tag(){return"alignment"}render(a,d){a.addRollback(),a.openNode("alignment");let o=!1;function c(r,h){h&&(a.addAttribute(r,h),o=!0)}c("horizontal",l.horizontal(d.horizontal)),c("vertical",l.vertical(d.vertical)),c("wrapText",!!l.wrapText(d.wrapText)&&"1"),c("shrinkToFit",!!l.shrinkToFit(d.shrinkToFit)&&"1"),c("indent",l.indent(d.indent)),c("textRotation",n.toXml(d.textRotation)),c("readingOrder",l.readingOrder(d.readingOrder)),a.closeNode(),o?a.commit():a.rollback()}parseOpen(a){const d={};let o=!1;function c(r,h,b){r&&(d[h]=b,o=!0)}c(a.attributes.horizontal,"horizontal",a.attributes.horizontal),c(a.attributes.vertical,"vertical",a.attributes.vertical==="center"?"middle":a.attributes.vertical),c(a.attributes.wrapText,"wrapText",A.parseBoolean(a.attributes.wrapText)),c(a.attributes.shrinkToFit,"shrinkToFit",A.parseBoolean(a.attributes.shrinkToFit)),c(a.attributes.indent,"indent",parseInt(a.attributes.indent,10)),c(a.attributes.textRotation,"textRotation",n.toModel(a.attributes.textRotation)),c(a.attributes.readingOrder,"readingOrder",a.attributes.readingOrder==="2"?"rtl":"ltr"),this.model=o?d:null}parseText(){}parseClose(){return!1}}},{"../../../doc/enums":7,"../../../utils/utils":27,"../base-xform":32}],127:[function(g,C,i){const e=g("../base-xform"),A=g("../../../utils/utils"),s=g("./color-xform");class l extends e{constructor(a){super(),this.name=a,this.map={color:new s}}get tag(){return this.name}render(a,d,o){const c=d&&d.color||o||this.defaultColor;a.openNode(this.name),d&&d.style&&(a.addAttribute("style",d.style),c&&this.map.color.render(a,c)),a.closeNode()}parseOpen(a){if(this.parser)return this.parser.parseOpen(a),!0;switch(a.name){case this.name:{const{style:d}=a.attributes;return this.model=d?{style:d}:void 0,!0}case"color":return this.parser=this.map.color,this.parser.parseOpen(a),!0;default:return!1}}parseText(a){this.parser&&this.parser.parseText(a)}parseClose(a){return this.parser?(this.parser.parseClose(a)||(this.parser=void 0),!0):(a===this.name&&this.map.color.model&&(this.model||(this.model={}),this.model.color=this.map.color.model),!1)}validStyle(a){return l.validStyleValues[a]}}l.validStyleValues=["thin","dashed","dotted","dashDot","hair","dashDotDot","slantDashDot","mediumDashed","mediumDashDotDot","mediumDashDot","medium","double","thick"].reduce((n,a)=>(n[a]=!0,n),{}),C.exports=class extends e{constructor(){super(),this.map={top:new l("top"),left:new l("left"),bottom:new l("bottom"),right:new l("right"),diagonal:new l("diagonal")}}render(n,a){const{color:d}=a;function o(c,r){c&&!c.color&&a.color&&(c={...c,color:a.color}),r.render(n,c,d)}n.openNode("border"),a.diagonal&&a.diagonal.style&&(a.diagonal.up&&n.addAttribute("diagonalUp","1"),a.diagonal.down&&n.addAttribute("diagonalDown","1")),o(a.left,this.map.left),o(a.right,this.map.right),o(a.top,this.map.top),o(a.bottom,this.map.bottom),o(a.diagonal,this.map.diagonal),n.closeNode()}parseOpen(n){if(this.parser)return this.parser.parseOpen(n),!0;switch(n.name){case"border":return this.reset(),this.diagonalUp=A.parseBoolean(n.attributes.diagonalUp),this.diagonalDown=A.parseBoolean(n.attributes.diagonalDown),!0;default:return this.parser=this.map[n.name],!!this.parser&&(this.parser.parseOpen(n),!0)}}parseText(n){this.parser&&this.parser.parseText(n)}parseClose(n){if(this.parser)return this.parser.parseClose(n)||(this.parser=void 0),!0;if(n==="border"){const a=this.model={},d=function(o,c,r){c&&(r&&Object.assign(c,r),a[o]=c)};d("left",this.map.left.model),d("right",this.map.right.model),d("top",this.map.top.model),d("bottom",this.map.bottom.model),d("diagonal",this.map.diagonal.model,{up:this.diagonalUp,down:this.diagonalDown})}return!1}}},{"../../../utils/utils":27,"../base-xform":32,"./color-xform":128}],128:[function(g,C,i){const e=g("../base-xform");C.exports=class extends e{constructor(A){super(),this.name=A||"color"}get tag(){return this.name}render(A,s){return!!s&&(A.openNode(this.name),s.argb?A.addAttribute("rgb",s.argb):s.theme!==void 0?(A.addAttribute("theme",s.theme),s.tint!==void 0&&A.addAttribute("tint",s.tint)):s.indexed!==void 0?A.addAttribute("indexed",s.indexed):A.addAttribute("auto","1"),A.closeNode(),!0)}parseOpen(A){return A.name===this.name&&(A.attributes.rgb?this.model={argb:A.attributes.rgb}:A.attributes.theme?(this.model={theme:parseInt(A.attributes.theme,10)},A.attributes.tint&&(this.model.tint=parseFloat(A.attributes.tint))):A.attributes.indexed?this.model={indexed:parseInt(A.attributes.indexed,10)}:this.model=void 0,!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],129:[function(g,C,i){const e=g("../base-xform"),A=g("./alignment-xform"),s=g("./border-xform"),l=g("./fill-xform"),n=g("./font-xform"),a=g("./numfmt-xform"),d=g("./protection-xform");C.exports=class extends e{constructor(){super(),this.map={alignment:new A,border:new s,fill:new l,font:new n,numFmt:new a,protection:new d}}get tag(){return"dxf"}render(o,c){if(o.openNode(this.tag),c.font&&this.map.font.render(o,c.font),c.numFmt&&c.numFmtId){const r={id:c.numFmtId,formatCode:c.numFmt};this.map.numFmt.render(o,r)}c.fill&&this.map.fill.render(o,c.fill),c.alignment&&this.map.alignment.render(o,c.alignment),c.border&&this.map.border.render(o,c.border),c.protection&&this.map.protection.render(o,c.protection),o.closeNode()}parseOpen(o){if(this.parser)return this.parser.parseOpen(o),!0;switch(o.name){case this.tag:return this.reset(),!0;default:return this.parser=this.map[o.name],this.parser&&this.parser.parseOpen(o),!0}}parseText(o){this.parser&&this.parser.parseText(o)}parseClose(o){return this.parser?(this.parser.parseClose(o)||(this.parser=void 0),!0):o!==this.tag||(this.model={alignment:this.map.alignment.model,border:this.map.border.model,fill:this.map.fill.model,font:this.map.font.model,numFmt:this.map.numFmt.model,protection:this.map.protection.model},!1)}}},{"../base-xform":32,"./alignment-xform":126,"./border-xform":127,"./fill-xform":130,"./font-xform":131,"./numfmt-xform":132,"./protection-xform":133}],130:[function(g,C,i){const e=g("../base-xform"),A=g("./color-xform");class s extends e{constructor(){super(),this.map={color:new A}}get tag(){return"stop"}render(o,c){o.openNode("stop"),o.addAttribute("position",c.position),this.map.color.render(o,c.color),o.closeNode()}parseOpen(o){if(this.parser)return this.parser.parseOpen(o),!0;switch(o.name){case"stop":return this.model={position:parseFloat(o.attributes.position)},!0;case"color":return this.parser=this.map.color,this.parser.parseOpen(o),!0;default:return!1}}parseText(){}parseClose(o){return!!this.parser&&(this.parser.parseClose(o)||(this.model.color=this.parser.model,this.parser=void 0),!0)}}class l extends e{constructor(){super(),this.map={fgColor:new A("fgColor"),bgColor:new A("bgColor")}}get name(){return"pattern"}get tag(){return"patternFill"}render(o,c){o.openNode("patternFill"),o.addAttribute("patternType",c.pattern),c.fgColor&&this.map.fgColor.render(o,c.fgColor),c.bgColor&&this.map.bgColor.render(o,c.bgColor),o.closeNode()}parseOpen(o){if(this.parser)return this.parser.parseOpen(o),!0;switch(o.name){case"patternFill":return this.model={type:"pattern",pattern:o.attributes.patternType},!0;default:return this.parser=this.map[o.name],!!this.parser&&(this.parser.parseOpen(o),!0)}}parseText(o){this.parser&&this.parser.parseText(o)}parseClose(o){return!!this.parser&&(this.parser.parseClose(o)||(this.parser.model&&(this.model[o]=this.parser.model),this.parser=void 0),!0)}}class n extends e{constructor(){super(),this.map={stop:new s}}get name(){return"gradient"}get tag(){return"gradientFill"}render(o,c){switch(o.openNode("gradientFill"),c.gradient){case"angle":o.addAttribute("degree",c.degree);break;case"path":o.addAttribute("type","path"),c.center.left&&(o.addAttribute("left",c.center.left),c.center.right===void 0&&o.addAttribute("right",c.center.left)),c.center.right&&o.addAttribute("right",c.center.right),c.center.top&&(o.addAttribute("top",c.center.top),c.center.bottom===void 0&&o.addAttribute("bottom",c.center.top)),c.center.bottom&&o.addAttribute("bottom",c.center.bottom)}const r=this.map.stop;c.stops.forEach(h=>{r.render(o,h)}),o.closeNode()}parseOpen(o){if(this.parser)return this.parser.parseOpen(o),!0;switch(o.name){case"gradientFill":{const c=this.model={stops:[]};return o.attributes.degree?(c.gradient="angle",c.degree=parseInt(o.attributes.degree,10)):o.attributes.type==="path"&&(c.gradient="path",c.center={left:o.attributes.left?parseFloat(o.attributes.left):0,top:o.attributes.top?parseFloat(o.attributes.top):0},o.attributes.right!==o.attributes.left&&(c.center.right=o.attributes.right?parseFloat(o.attributes.right):0),o.attributes.bottom!==o.attributes.top&&(c.center.bottom=o.attributes.bottom?parseFloat(o.attributes.bottom):0)),!0}case"stop":return this.parser=this.map.stop,this.parser.parseOpen(o),!0;default:return!1}}parseText(o){this.parser&&this.parser.parseText(o)}parseClose(o){return!!this.parser&&(this.parser.parseClose(o)||(this.model.stops.push(this.parser.model),this.parser=void 0),!0)}}class a extends e{constructor(){super(),this.map={patternFill:new l,gradientFill:new n}}get tag(){return"fill"}render(o,c){switch(o.addRollback(),o.openNode("fill"),c.type){case"pattern":this.map.patternFill.render(o,c);break;case"gradient":this.map.gradientFill.render(o,c);break;default:return void o.rollback()}o.closeNode(),o.commit()}parseOpen(o){if(this.parser)return this.parser.parseOpen(o),!0;switch(o.name){case"fill":return this.model={},!0;default:return this.parser=this.map[o.name],!!this.parser&&(this.parser.parseOpen(o),!0)}}parseText(o){this.parser&&this.parser.parseText(o)}parseClose(o){return!!this.parser&&(this.parser.parseClose(o)||(this.model=this.parser.model,this.model.type=this.parser.name,this.parser=void 0),!0)}validStyle(o){return a.validPatternValues[o]}}a.validPatternValues=["none","solid","darkVertical","darkGray","mediumGray","lightGray","gray125","gray0625","darkHorizontal","darkVertical","darkDown","darkUp","darkGrid","darkTrellis","lightHorizontal","lightVertical","lightDown","lightUp","lightGrid","lightTrellis","lightGrid"].reduce((d,o)=>(d[o]=!0,d),{}),a.StopXform=s,a.PatternFillXform=l,a.GradientFillXform=n,C.exports=a},{"../base-xform":32,"./color-xform":128}],131:[function(g,C,i){const e=g("./color-xform"),A=g("../simple/boolean-xform"),s=g("../simple/integer-xform"),l=g("../simple/string-xform"),n=g("./underline-xform"),a=g("../../../utils/under-dash"),d=g("../base-xform");class o extends d{constructor(r){super(),this.options=r||o.OPTIONS,this.map={b:{prop:"bold",xform:new A({tag:"b",attr:"val"})},i:{prop:"italic",xform:new A({tag:"i",attr:"val"})},u:{prop:"underline",xform:new n},charset:{prop:"charset",xform:new s({tag:"charset",attr:"val"})},color:{prop:"color",xform:new e},condense:{prop:"condense",xform:new A({tag:"condense",attr:"val"})},extend:{prop:"extend",xform:new A({tag:"extend",attr:"val"})},family:{prop:"family",xform:new s({tag:"family",attr:"val"})},outline:{prop:"outline",xform:new A({tag:"outline",attr:"val"})},vertAlign:{prop:"vertAlign",xform:new l({tag:"vertAlign",attr:"val"})},scheme:{prop:"scheme",xform:new l({tag:"scheme",attr:"val"})},shadow:{prop:"shadow",xform:new A({tag:"shadow",attr:"val"})},strike:{prop:"strike",xform:new A({tag:"strike",attr:"val"})},sz:{prop:"size",xform:new s({tag:"sz",attr:"val"})}},this.map[this.options.fontNameTag]={prop:"name",xform:new l({tag:this.options.fontNameTag,attr:"val"})}}get tag(){return this.options.tagName}render(r,h){const{map:b}=this;r.openNode(this.options.tagName),a.each(this.map,(u,m)=>{b[m].xform.render(r,h[u.prop])}),r.closeNode()}parseOpen(r){if(this.parser)return this.parser.parseOpen(r),!0;if(this.map[r.name])return this.parser=this.map[r.name].xform,this.parser.parseOpen(r);switch(r.name){case this.options.tagName:return this.model={},!0;default:return!1}}parseText(r){this.parser&&this.parser.parseText(r)}parseClose(r){if(this.parser&&!this.parser.parseClose(r)){const h=this.map[r];return this.parser.model&&(this.model[h.prop]=this.parser.model),this.parser=void 0,!0}switch(r){case this.options.tagName:return!1;default:return!0}}}o.OPTIONS={tagName:"font",fontNameTag:"name"},C.exports=o},{"../../../utils/under-dash":26,"../base-xform":32,"../simple/boolean-xform":116,"../simple/integer-xform":118,"../simple/string-xform":119,"./color-xform":128,"./underline-xform":136}],132:[function(g,C,i){const e=g("../../../utils/under-dash"),A=g("../../defaultnumformats"),s=g("../base-xform"),l=function(){const a={};return e.each(A,(d,o)=>{d.f&&(a[d.f]=parseInt(o,10))}),a}();class n extends s{constructor(d,o){super(),this.id=d,this.formatCode=o}get tag(){return"numFmt"}render(d,o){d.leafNode("numFmt",{numFmtId:o.id,formatCode:o.formatCode})}parseOpen(d){switch(d.name){case"numFmt":return this.model={id:parseInt(d.attributes.numFmtId,10),formatCode:d.attributes.formatCode.replace(/[\\](.)/g,"$1")},!0;default:return!1}}parseText(){}parseClose(){return!1}}n.getDefaultFmtId=function(a){return l[a]},n.getDefaultFmtCode=function(a){return A[a]&&A[a].f},C.exports=n},{"../../../utils/under-dash":26,"../../defaultnumformats":30,"../base-xform":32}],133:[function(g,C,i){const e=g("../base-xform"),A={boolean:(s,l)=>s===void 0?l:s};C.exports=class extends e{get tag(){return"protection"}render(s,l){s.addRollback(),s.openNode("protection");let n=!1;function a(d,o){o!==void 0&&(s.addAttribute(d,o),n=!0)}a("locked",A.boolean(l.locked,!0)?void 0:"0"),a("hidden",A.boolean(l.hidden,!1)?"1":void 0),s.closeNode(),n?s.commit():s.rollback()}parseOpen(s){const l={locked:s.attributes.locked!=="0",hidden:s.attributes.hidden==="1"},n=!l.locked||l.hidden;this.model=n?l:null}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],134:[function(g,C,i){const e=g("../base-xform"),A=g("./alignment-xform"),s=g("./protection-xform");C.exports=class extends e{constructor(l){super(),this.xfId=!(!l||!l.xfId),this.map={alignment:new A,protection:new s}}get tag(){return"xf"}render(l,n){l.openNode("xf",{numFmtId:n.numFmtId||0,fontId:n.fontId||0,fillId:n.fillId||0,borderId:n.borderId||0}),this.xfId&&l.addAttribute("xfId",n.xfId||0),n.numFmtId&&l.addAttribute("applyNumberFormat","1"),n.fontId&&l.addAttribute("applyFont","1"),n.fillId&&l.addAttribute("applyFill","1"),n.borderId&&l.addAttribute("applyBorder","1"),n.alignment&&l.addAttribute("applyAlignment","1"),n.protection&&l.addAttribute("applyProtection","1"),n.alignment&&this.map.alignment.render(l,n.alignment),n.protection&&this.map.protection.render(l,n.protection),l.closeNode()}parseOpen(l){if(this.parser)return this.parser.parseOpen(l),!0;switch(l.name){case"xf":return this.model={numFmtId:parseInt(l.attributes.numFmtId,10),fontId:parseInt(l.attributes.fontId,10),fillId:parseInt(l.attributes.fillId,10),borderId:parseInt(l.attributes.borderId,10)},this.xfId&&(this.model.xfId=parseInt(l.attributes.xfId,10)),!0;case"alignment":return this.parser=this.map.alignment,this.parser.parseOpen(l),!0;case"protection":return this.parser=this.map.protection,this.parser.parseOpen(l),!0;default:return!1}}parseText(l){this.parser&&this.parser.parseText(l)}parseClose(l){return this.parser?(this.parser.parseClose(l)||(this.map.protection===this.parser?this.model.protection=this.parser.model:this.model.alignment=this.parser.model,this.parser=void 0),!0):l!=="xf"}}},{"../base-xform":32,"./alignment-xform":126,"./protection-xform":133}],135:[function(g,C,i){const e=g("../../../doc/enums"),A=g("../../../utils/xml-stream"),s=g("../base-xform"),l=g("../static-xform"),n=g("../list-xform"),a=g("./font-xform"),d=g("./fill-xform"),o=g("./border-xform"),c=g("./numfmt-xform"),r=g("./style-xform"),h=g("./dxf-xform");class b extends s{constructor(m){super(),this.map={numFmts:new n({tag:"numFmts",count:!0,childXform:new c}),fonts:new n({tag:"fonts",count:!0,childXform:new a,$:{"x14ac:knownFonts":1}}),fills:new n({tag:"fills",count:!0,childXform:new d}),borders:new n({tag:"borders",count:!0,childXform:new o}),cellStyleXfs:new n({tag:"cellStyleXfs",count:!0,childXform:new r}),cellXfs:new n({tag:"cellXfs",count:!0,childXform:new r({xfId:!0})}),dxfs:new n({tag:"dxfs",always:!0,count:!0,childXform:new h}),numFmt:new c,font:new a,fill:new d,border:new o,style:new r({xfId:!0}),cellStyles:b.STATIC_XFORMS.cellStyles,tableStyles:b.STATIC_XFORMS.tableStyles,extLst:b.STATIC_XFORMS.extLst},m&&this.init()}initIndex(){this.index={style:{},numFmt:{},numFmtNextId:164,font:{},border:{},fill:{}}}init(){this.model={styles:[],numFmts:[],fonts:[],borders:[],fills:[],dxfs:[]},this.initIndex(),this._addBorder({}),this._addStyle({numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}),this._addFill({type:"pattern",pattern:"none"}),this._addFill({type:"pattern",pattern:"gray125"}),this.weakMap=new WeakMap}render(m,Z){Z=Z||this.model,m.openXml(A.StdDocAttributes),m.openNode("styleSheet",b.STYLESHEET_ATTRIBUTES),this.index?(Z.numFmts&&Z.numFmts.length&&(m.openNode("numFmts",{count:Z.numFmts.length}),Z.numFmts.forEach(p=>{m.writeXml(p)}),m.closeNode()),Z.fonts.length||this._addFont({size:11,color:{theme:1},name:"Calibri",family:2,scheme:"minor"}),m.openNode("fonts",{count:Z.fonts.length,"x14ac:knownFonts":1}),Z.fonts.forEach(p=>{m.writeXml(p)}),m.closeNode(),m.openNode("fills",{count:Z.fills.length}),Z.fills.forEach(p=>{m.writeXml(p)}),m.closeNode(),m.openNode("borders",{count:Z.borders.length}),Z.borders.forEach(p=>{m.writeXml(p)}),m.closeNode(),this.map.cellStyleXfs.render(m,[{numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}]),m.openNode("cellXfs",{count:Z.styles.length}),Z.styles.forEach(p=>{m.writeXml(p)}),m.closeNode()):(this.map.numFmts.render(m,Z.numFmts),this.map.fonts.render(m,Z.fonts),this.map.fills.render(m,Z.fills),this.map.borders.render(m,Z.borders),this.map.cellStyleXfs.render(m,[{numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}]),this.map.cellXfs.render(m,Z.styles)),b.STATIC_XFORMS.cellStyles.render(m),this.map.dxfs.render(m,Z.dxfs),b.STATIC_XFORMS.tableStyles.render(m),b.STATIC_XFORMS.extLst.render(m),m.closeNode()}parseOpen(m){if(this.parser)return this.parser.parseOpen(m),!0;switch(m.name){case"styleSheet":return this.initIndex(),!0;default:return this.parser=this.map[m.name],this.parser&&this.parser.parseOpen(m),!0}}parseText(m){this.parser&&this.parser.parseText(m)}parseClose(m){if(this.parser)return this.parser.parseClose(m)||(this.parser=void 0),!0;switch(m){case"styleSheet":{this.model={};const Z=(p,Y)=>{Y.model&&Y.model.length&&(this.model[p]=Y.model)};if(Z("numFmts",this.map.numFmts),Z("fonts",this.map.fonts),Z("fills",this.map.fills),Z("borders",this.map.borders),Z("styles",this.map.cellXfs),Z("dxfs",this.map.dxfs),this.index={model:[],numFmt:[]},this.model.numFmts){const p=this.index.numFmt;this.model.numFmts.forEach(Y=>{p[Y.id]=Y.formatCode})}return!1}default:return!0}}addStyleModel(m,Z){if(!m)return 0;if(this.model.fonts.length||this._addFont({size:11,color:{theme:1},name:"Calibri",family:2,scheme:"minor"}),this.weakMap&&this.weakMap.has(m))return this.weakMap.get(m);const p={};if(Z=Z||e.ValueType.Number,m.numFmt)p.numFmtId=this._addNumFmtStr(m.numFmt);else switch(Z){case e.ValueType.Number:p.numFmtId=this._addNumFmtStr("General");break;case e.ValueType.Date:p.numFmtId=this._addNumFmtStr("mm-dd-yy")}m.font&&(p.fontId=this._addFont(m.font)),m.border&&(p.borderId=this._addBorder(m.border)),m.fill&&(p.fillId=this._addFill(m.fill)),m.alignment&&(p.alignment=m.alignment),m.protection&&(p.protection=m.protection);const Y=this._addStyle(p);return this.weakMap&&this.weakMap.set(m,Y),Y}getStyleModel(m){const Z=this.model.styles[m];if(!Z)return null;let p=this.index.model[m];if(p)return p;if(p=this.index.model[m]={},Z.numFmtId){const R=this.index.numFmt[Z.numFmtId]||c.getDefaultFmtCode(Z.numFmtId);R&&(p.numFmt=R)}function Y(R,X,H){if(H||H===0){const S=X[H];S&&(p[R]=S)}}return Y("font",this.model.fonts,Z.fontId),Y("border",this.model.borders,Z.borderId),Y("fill",this.model.fills,Z.fillId),Z.alignment&&(p.alignment=Z.alignment),Z.protection&&(p.protection=Z.protection),p}addDxfStyle(m){return m.numFmt&&(m.numFmtId=this._addNumFmtStr(m.numFmt)),this.model.dxfs.push(m),this.model.dxfs.length-1}getDxfStyle(m){return this.model.dxfs[m]}_addStyle(m){const Z=this.map.style.toXml(m);let p=this.index.style[Z];return p===void 0&&(p=this.index.style[Z]=this.model.styles.length,this.model.styles.push(Z)),p}_addNumFmtStr(m){let Z=c.getDefaultFmtId(m);if(Z!==void 0||(Z=this.index.numFmt[m],Z!==void 0))return Z;Z=this.index.numFmt[m]=164+this.model.numFmts.length;const p=this.map.numFmt.toXml({id:Z,formatCode:m});return this.model.numFmts.push(p),Z}_addFont(m){const Z=this.map.font.toXml(m);let p=this.index.font[Z];return p===void 0&&(p=this.index.font[Z]=this.model.fonts.length,this.model.fonts.push(Z)),p}_addBorder(m){const Z=this.map.border.toXml(m);let p=this.index.border[Z];return p===void 0&&(p=this.index.border[Z]=this.model.borders.length,this.model.borders.push(Z)),p}_addFill(m){const Z=this.map.fill.toXml(m);let p=this.index.fill[Z];return p===void 0&&(p=this.index.fill[Z]=this.model.fills.length,this.model.fills.push(Z)),p}}b.STYLESHEET_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main","xmlns:mc":"http://schemas.openxmlformats.org/markup-compatibility/2006","mc:Ignorable":"x14ac x16r2","xmlns:x14ac":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac","xmlns:x16r2":"http://schemas.microsoft.com/office/spreadsheetml/2015/02/main"},b.STATIC_XFORMS={cellStyles:new l({tag:"cellStyles",$:{count:1},c:[{tag:"cellStyle",$:{name:"Normal",xfId:0,builtinId:0}}]}),dxfs:new l({tag:"dxfs",$:{count:0}}),tableStyles:new l({tag:"tableStyles",$:{count:0,defaultTableStyle:"TableStyleMedium2",defaultPivotStyle:"PivotStyleLight16"}}),extLst:new l({tag:"extLst",c:[{tag:"ext",$:{uri:"{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}","xmlns:x14":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"},c:[{tag:"x14:slicerStyles",$:{defaultSlicerStyle:"SlicerStyleLight1"}}]},{tag:"ext",$:{uri:"{9260A510-F301-46a8-8635-F512D64BE5F5}","xmlns:x15":"http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"},c:[{tag:"x15:timelineStyles",$:{defaultTimelineStyle:"TimeSlicerStyleLight1"}}]}]})},b.Mock=class extends b{constructor(){super(),this.model={styles:[{numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}],numFmts:[],fonts:[{size:11,color:{theme:1},name:"Calibri",family:2,scheme:"minor"}],borders:[{}],fills:[{type:"pattern",pattern:"none"},{type:"pattern",pattern:"gray125"}]}}parseStream(u){return u.autodrain(),Promise.resolve()}addStyleModel(u,m){switch(m){case e.ValueType.Date:return this.dateStyleId;default:return 0}}get dateStyleId(){if(!this._dateStyleId){const u={numFmtId:c.getDefaultFmtId("mm-dd-yy")};this._dateStyleId=this.model.styles.length,this.model.styles.push(u)}return this._dateStyleId}getStyleModel(){return{}}},C.exports=b},{"../../../doc/enums":7,"../../../utils/xml-stream":28,"../base-xform":32,"../list-xform":71,"../static-xform":120,"./border-xform":127,"./dxf-xform":129,"./fill-xform":130,"./font-xform":131,"./numfmt-xform":132,"./style-xform":134}],136:[function(g,C,i){const e=g("../base-xform");class A extends e{constructor(l){super(),this.model=l}get tag(){return"u"}render(l,n){if((n=n||this.model)===!0)l.leafNode("u");else{const a=A.Attributes[n];a&&l.leafNode("u",a)}}parseOpen(l){l.name==="u"&&(this.model=l.attributes.val||!0)}parseText(){}parseClose(){return!1}}A.Attributes={single:{},double:{val:"double"},singleAccounting:{val:"singleAccounting"},doubleAccounting:{val:"doubleAccounting"}},C.exports=A},{"../base-xform":32}],137:[function(g,C,i){const e=g("../base-xform"),A=g("./filter-column-xform");C.exports=class extends e{constructor(){super(),this.map={filterColumn:new A}}get tag(){return"autoFilter"}prepare(s){s.columns.forEach((l,n)=>{this.map.filterColumn.prepare(l,{index:n})})}render(s,l){return s.openNode(this.tag,{ref:l.autoFilterRef}),l.columns.forEach(n=>{this.map.filterColumn.render(s,n)}),s.closeNode(),!0}parseOpen(s){if(this.parser)return this.parser.parseOpen(s),!0;switch(s.name){case this.tag:return this.model={autoFilterRef:s.attributes.ref,columns:[]},!0;default:if(this.parser=this.map[s.name],this.parser)return this.parseOpen(s),!0;throw new Error("Unexpected xml node in parseOpen: "+JSON.stringify(s))}}parseText(s){this.parser&&this.parser.parseText(s)}parseClose(s){if(this.parser)return this.parser.parseClose(s)||(this.model.columns.push(this.parser.model),this.parser=void 0),!0;switch(s){case this.tag:return!1;default:throw new Error("Unexpected xml node in parseClose: "+s)}}}},{"../base-xform":32,"./filter-column-xform":139}],138:[function(g,C,i){const e=g("../base-xform");C.exports=class extends e{get tag(){return"customFilter"}render(A,s){A.leafNode(this.tag,{val:s.val,operator:s.operator})}parseOpen(A){return A.name===this.tag&&(this.model={val:A.attributes.val,operator:A.attributes.operator},!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],139:[function(g,C,i){const e=g("../base-xform"),A=g("../list-xform"),s=g("./custom-filter-xform"),l=g("./filter-xform");C.exports=class extends e{constructor(){super(),this.map={customFilters:new A({tag:"customFilters",count:!1,empty:!0,childXform:new s}),filters:new A({tag:"filters",count:!1,empty:!0,childXform:new l})}}get tag(){return"filterColumn"}prepare(n,a){n.colId=a.index.toString()}render(n,a){return a.customFilters?(n.openNode(this.tag,{colId:a.colId,hiddenButton:a.filterButton?"0":"1"}),this.map.customFilters.render(n,a.customFilters),n.closeNode(),!0):(n.leafNode(this.tag,{colId:a.colId,hiddenButton:a.filterButton?"0":"1"}),!0)}parseOpen(n){if(this.parser)return this.parser.parseOpen(n),!0;const{attributes:a}=n;switch(n.name){case this.tag:return this.model={filterButton:a.hiddenButton==="0"},!0;default:if(this.parser=this.map[n.name],this.parser)return this.parseOpen(n),!0;throw new Error("Unexpected xml node in parseOpen: "+JSON.stringify(n))}}parseText(){}parseClose(n){if(this.parser)return this.parser.parseClose(n)||(this.parser=void 0),!0;switch(n){case this.tag:return this.model.customFilters=this.map.customFilters.model,!1;default:return!0}}}},{"../base-xform":32,"../list-xform":71,"./custom-filter-xform":138,"./filter-xform":140}],140:[function(g,C,i){const e=g("../base-xform");C.exports=class extends e{get tag(){return"filter"}render(A,s){A.leafNode(this.tag,{val:s.val})}parseOpen(A){return A.name===this.tag&&(this.model={val:A.attributes.val},!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],141:[function(g,C,i){const e=g("../base-xform");C.exports=class extends e{get tag(){return"tableColumn"}prepare(A,s){A.id=s.index+1}render(A,s){return A.leafNode(this.tag,{id:s.id.toString(),name:s.name,totalsRowLabel:s.totalsRowLabel,totalsRowFunction:s.totalsRowFunction,dxfId:s.dxfId}),!0}parseOpen(A){if(A.name===this.tag){const{attributes:s}=A;return this.model={name:s.name,totalsRowLabel:s.totalsRowLabel,totalsRowFunction:s.totalsRowFunction,dxfId:s.dxfId},!0}return!1}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],142:[function(g,C,i){const e=g("../base-xform");C.exports=class extends e{get tag(){return"tableStyleInfo"}render(A,s){return A.leafNode(this.tag,{name:s.theme?s.theme:void 0,showFirstColumn:s.showFirstColumn?"1":"0",showLastColumn:s.showLastColumn?"1":"0",showRowStripes:s.showRowStripes?"1":"0",showColumnStripes:s.showColumnStripes?"1":"0"}),!0}parseOpen(A){if(A.name===this.tag){const{attributes:s}=A;return this.model={theme:s.name?s.name:null,showFirstColumn:s.showFirstColumn==="1",showLastColumn:s.showLastColumn==="1",showRowStripes:s.showRowStripes==="1",showColumnStripes:s.showColumnStripes==="1"},!0}return!1}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],143:[function(g,C,i){const e=g("../../../utils/xml-stream"),A=g("../base-xform"),s=g("../list-xform"),l=g("./auto-filter-xform"),n=g("./table-column-xform"),a=g("./table-style-info-xform");class d extends A{constructor(){super(),this.map={autoFilter:new l,tableColumns:new s({tag:"tableColumns",count:!0,empty:!0,childXform:new n}),tableStyleInfo:new a}}prepare(c,r){this.map.autoFilter.prepare(c),this.map.tableColumns.prepare(c.columns,r)}get tag(){return"table"}render(c,r){c.openXml(e.StdDocAttributes),c.openNode(this.tag,{...d.TABLE_ATTRIBUTES,id:r.id,name:r.name,displayName:r.displayName||r.name,ref:r.tableRef,totalsRowCount:r.totalsRow?"1":void 0,totalsRowShown:r.totalsRow?void 0:"1",headerRowCount:r.headerRow?"1":"0"}),this.map.autoFilter.render(c,r),this.map.tableColumns.render(c,r.columns),this.map.tableStyleInfo.render(c,r.style),c.closeNode()}parseOpen(c){if(this.parser)return this.parser.parseOpen(c),!0;const{name:r,attributes:h}=c;switch(r){case this.tag:this.reset(),this.model={name:h.name,displayName:h.displayName||h.name,tableRef:h.ref,totalsRow:h.totalsRowCount==="1",headerRow:h.headerRowCount==="1"};break;default:this.parser=this.map[c.name],this.parser&&this.parser.parseOpen(c)}return!0}parseText(c){this.parser&&this.parser.parseText(c)}parseClose(c){if(this.parser)return this.parser.parseClose(c)||(this.parser=void 0),!0;switch(c){case this.tag:return this.model.columns=this.map.tableColumns.model,this.map.autoFilter.model&&(this.model.autoFilterRef=this.map.autoFilter.model.autoFilterRef,this.map.autoFilter.model.columns.forEach((r,h)=>{this.model.columns[h].filterButton=r.filterButton})),this.model.style=this.map.tableStyleInfo.model,!1;default:return!0}}reconcile(c,r){c.columns.forEach(h=>{h.dxfId!==void 0&&(h.style=r.styles.getDxfStyle(h.dxfId))})}}d.TABLE_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main","xmlns:mc":"http://schemas.openxmlformats.org/markup-compatibility/2006","mc:Ignorable":"xr xr3","xmlns:xr":"http://schemas.microsoft.com/office/spreadsheetml/2014/revision","xmlns:xr3":"http://schemas.microsoft.com/office/spreadsheetml/2016/revision3"},C.exports=d},{"../../../utils/xml-stream":28,"../base-xform":32,"../list-xform":71,"./auto-filter-xform":137,"./table-column-xform":141,"./table-style-info-xform":142}],144:[function(g,C,i){(function(e,A){(function(){const s=g("fs"),l=g("jszip"),{PassThrough:n}=g("readable-stream"),a=g("../utils/zip-stream"),d=g("../utils/stream-buf"),o=g("../utils/utils"),c=g("../utils/xml-stream"),{bufferToString:r}=g("../utils/browser-buffer-decode"),h=g("./xform/style/styles-xform"),b=g("./xform/core/core-xform"),u=g("./xform/strings/shared-strings-xform"),m=g("./xform/core/relationships-xform"),Z=g("./xform/core/content-types-xform"),p=g("./xform/core/app-xform"),Y=g("./xform/book/workbook-xform"),R=g("./xform/sheet/worksheet-xform"),X=g("./xform/drawing/drawing-xform"),H=g("./xform/table/table-xform"),S=g("./xform/comment/comments-xform"),z=g("./xform/comment/vml-notes-xform"),v=g("./xml/theme1");class K{constructor(N){this.workbook=N}async readFile(N,B){if(!await o.fs.exists(N))throw new Error("File not found: "+N);const G=s.createReadStream(N);try{const w=await this.read(G,B);return G.close(),w}catch(w){throw G.close(),w}}parseRels(N){return new m().parseStream(N)}parseWorkbook(N){return new Y().parseStream(N)}parseSharedStrings(N){return new u().parseStream(N)}reconcile(N,B){const G=new Y,w=new R(B),W=new X,y=new H;G.reconcile(N);const f={media:N.media,mediaIndex:N.mediaIndex};Object.keys(N.drawings).forEach(T=>{const Q=N.drawings[T],P=N.drawingRels[T];P&&(f.rels=P.reduce((L,E)=>(L[E.Id]=E,L),{}),(Q.anchors||[]).forEach(L=>{const E=L.picture&&L.picture.hyperlinks;E&&f.rels[E.rId]&&(E.hyperlink=f.rels[E.rId].Target,delete E.rId)}),W.reconcile(Q,f))});const D={styles:N.styles};Object.values(N.tables).forEach(T=>{y.reconcile(T,D)});const F={styles:N.styles,sharedStrings:N.sharedStrings,media:N.media,mediaIndex:N.mediaIndex,date1904:N.properties&&N.properties.date1904,drawings:N.drawings,comments:N.comments,tables:N.tables,vmlDrawings:N.vmlDrawings};N.worksheets.forEach(T=>{T.relationships=N.worksheetRels[T.sheetNo],w.reconcile(T,F)}),delete N.worksheetHash,delete N.worksheetRels,delete N.globalRels,delete N.sharedStrings,delete N.workbookRels,delete N.sheetDefs,delete N.styles,delete N.mediaIndex,delete N.drawings,delete N.drawingRels,delete N.vmlDrawings}async _processWorksheetEntry(N,B,G,w,W){const y=new R(w),f=await y.parseStream(N);f.sheetNo=G,B.worksheetHash[W]=f,B.worksheets.push(f)}async _processCommentEntry(N,B,G){const w=new S,W=await w.parseStream(N);B.comments[`../${G}.xml`]=W}async _processTableEntry(N,B,G){const w=new H,W=await w.parseStream(N);B.tables[`../tables/${G}.xml`]=W}async _processWorksheetRelsEntry(N,B,G){const w=new m,W=await w.parseStream(N);B.worksheetRels[G]=W}async _processMediaEntry(N,B,G){const w=G.lastIndexOf(".");if(w>=1){const W=G.substr(w+1),y=G.substr(0,w);await new Promise((f,D)=>{const F=new d;F.on("finish",()=>{B.mediaIndex[G]=B.media.length,B.mediaIndex[y]=B.media.length;const T={type:"image",name:y,extension:W,buffer:F.toBuffer()};B.media.push(T),f()}),N.on("error",T=>{D(T)}),N.pipe(F)})}}async _processDrawingEntry(N,B,G){const w=new X,W=await w.parseStream(N);B.drawings[G]=W}async _processDrawingRelsEntry(N,B,G){const w=new m,W=await w.parseStream(N);B.drawingRels[G]=W}async _processVmlDrawingEntry(N,B,G){const w=new z,W=await w.parseStream(N);B.vmlDrawings[`../drawings/${G}.vml`]=W}async _processThemeEntry(N,B,G){await new Promise((w,W)=>{const y=new d;N.on("error",W),y.on("error",W),y.on("finish",()=>{B.themes[G]=y.read().toString(),w()}),N.pipe(y)})}createInputStream(){throw new Error("`XLSX#createInputStream` is deprecated. You should use `XLSX#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md")}async read(N,B){!N[Symbol.asyncIterator]&&N.pipe&&(N=N.pipe(new n));const G=[];for await(const w of N)G.push(w);return this.load(A.concat(G),B)}async load(N,B){let G;G=B&&B.base64?A.from(N.toString(),"base64"):N;const w={worksheets:[],worksheetHash:{},worksheetRels:[],themes:{},media:[],mediaIndex:{},drawings:{},drawingRels:{},comments:{},tables:{},vmlDrawings:{}},W=await l.loadAsync(G);for(const y of Object.values(W.files))if(!y.dir){let f,D=y.name;if(D[0]==="/"&&(D=D.substr(1)),D.match(/xl\/media\//)||D.match(/xl\/theme\/([a-zA-Z0-9]+)[.]xml/))f=new n,f.write(await y.async("nodebuffer"));else{let F;f=new n({writableObjectMode:!0,readableObjectMode:!0}),F=e.browser?r(await y.async("nodebuffer")):await y.async("string");const T=16384;for(let Q=0;Q<F.length;Q+=T)f.write(F.substring(Q,Q+T))}switch(f.end(),D){case"_rels/.rels":w.globalRels=await this.parseRels(f);break;case"xl/workbook.xml":{const F=await this.parseWorkbook(f);w.sheets=F.sheets,w.definedNames=F.definedNames,w.views=F.views,w.properties=F.properties,w.calcProperties=F.calcProperties;break}case"xl/_rels/workbook.xml.rels":w.workbookRels=await this.parseRels(f);break;case"xl/sharedStrings.xml":w.sharedStrings=new u,await w.sharedStrings.parseStream(f);break;case"xl/styles.xml":w.styles=new h,await w.styles.parseStream(f);break;case"docProps/app.xml":{const F=new p,T=await F.parseStream(f);w.company=T.company,w.manager=T.manager;break}case"docProps/core.xml":{const F=new b,T=await F.parseStream(f);Object.assign(w,T);break}default:{let F=D.match(/xl\/worksheets\/sheet(\d+)[.]xml/);if(F){await this._processWorksheetEntry(f,w,F[1],B,D);break}if(F=D.match(/xl\/worksheets\/_rels\/sheet(\d+)[.]xml.rels/),F){await this._processWorksheetRelsEntry(f,w,F[1]);break}if(F=D.match(/xl\/theme\/([a-zA-Z0-9]+)[.]xml/),F){await this._processThemeEntry(f,w,F[1]);break}if(F=D.match(/xl\/media\/([a-zA-Z0-9]+[.][a-zA-Z0-9]{3,4})$/),F){await this._processMediaEntry(f,w,F[1]);break}if(F=D.match(/xl\/drawings\/([a-zA-Z0-9]+)[.]xml/),F){await this._processDrawingEntry(f,w,F[1]);break}if(F=D.match(/xl\/(comments\d+)[.]xml/),F){await this._processCommentEntry(f,w,F[1]);break}if(F=D.match(/xl\/tables\/(table\d+)[.]xml/),F){await this._processTableEntry(f,w,F[1]);break}if(F=D.match(/xl\/drawings\/_rels\/([a-zA-Z0-9]+)[.]xml[.]rels/),F){await this._processDrawingRelsEntry(f,w,F[1]);break}if(F=D.match(/xl\/drawings\/(vmlDrawing\d+)[.]vml/),F){await this._processVmlDrawingEntry(f,w,F[1]);break}}}}return this.reconcile(w,B),this.workbook.model=w,this.workbook}async addMedia(N,B){await Promise.all(B.media.map(async G=>{if(G.type==="image"){const w=`xl/media/${G.name}.${G.extension}`;if(G.filename){const W=await function(y,f){return new Promise((D,F)=>{s.readFile(y,f,(T,Q)=>{T?F(T):D(Q)})})}(G.filename);return N.append(W,{name:w})}if(G.buffer)return N.append(G.buffer,{name:w});if(G.base64){const W=G.base64,y=W.substring(W.indexOf(",")+1);return N.append(y,{name:w,base64:!0})}}throw new Error("Unsupported media")}))}addDrawings(N,B){const G=new X,w=new m;B.worksheets.forEach(W=>{const{drawing:y}=W;if(y){G.prepare(y,{});let f=G.toXml(y);N.append(f,{name:`xl/drawings/${y.name}.xml`}),f=w.toXml(y.rels),N.append(f,{name:`xl/drawings/_rels/${y.name}.xml.rels`})}})}addTables(N,B){const G=new H;B.worksheets.forEach(w=>{const{tables:W}=w;W.forEach(y=>{G.prepare(y,{});const f=G.toXml(y);N.append(f,{name:"xl/tables/"+y.target})})})}async addContentTypes(N,B){const G=new Z().toXml(B);N.append(G,{name:"[Content_Types].xml"})}async addApp(N,B){const G=new p().toXml(B);N.append(G,{name:"docProps/app.xml"})}async addCore(N,B){const G=new b;N.append(G.toXml(B),{name:"docProps/core.xml"})}async addThemes(N,B){const G=B.themes||{theme1:v};Object.keys(G).forEach(w=>{const W=G[w],y=`xl/theme/${w}.xml`;N.append(W,{name:y})})}async addOfficeRels(N){const B=new m().toXml([{Id:"rId1",Type:K.RelType.OfficeDocument,Target:"xl/workbook.xml"},{Id:"rId2",Type:K.RelType.CoreProperties,Target:"docProps/core.xml"},{Id:"rId3",Type:K.RelType.ExtenderProperties,Target:"docProps/app.xml"}]);N.append(B,{name:"_rels/.rels"})}async addWorkbookRels(N,B){let G=1;const w=[{Id:"rId"+G++,Type:K.RelType.Styles,Target:"styles.xml"},{Id:"rId"+G++,Type:K.RelType.Theme,Target:"theme/theme1.xml"}];B.sharedStrings.count&&w.push({Id:"rId"+G++,Type:K.RelType.SharedStrings,Target:"sharedStrings.xml"}),B.worksheets.forEach(y=>{y.rId="rId"+G++,w.push({Id:y.rId,Type:K.RelType.Worksheet,Target:`worksheets/sheet${y.id}.xml`})});const W=new m().toXml(w);N.append(W,{name:"xl/_rels/workbook.xml.rels"})}async addSharedStrings(N,B){B.sharedStrings&&B.sharedStrings.count&&N.append(B.sharedStrings.xml,{name:"xl/sharedStrings.xml"})}async addStyles(N,B){const{xml:G}=B.styles;G&&N.append(G,{name:"xl/styles.xml"})}async addWorkbook(N,B){const G=new Y;N.append(G.toXml(B),{name:"xl/workbook.xml"})}async addWorksheets(N,B){const G=new R,w=new m,W=new S,y=new z;B.worksheets.forEach(f=>{let D=new c;G.render(D,f),N.append(D.xml,{name:`xl/worksheets/sheet${f.id}.xml`}),f.rels&&f.rels.length&&(D=new c,w.render(D,f.rels),N.append(D.xml,{name:`xl/worksheets/_rels/sheet${f.id}.xml.rels`})),f.comments.length>0&&(D=new c,W.render(D,f),N.append(D.xml,{name:`xl/comments${f.id}.xml`}),D=new c,y.render(D,f),N.append(D.xml,{name:`xl/drawings/vmlDrawing${f.id}.vml`}))})}_finalize(N){return new Promise((B,G)=>{N.on("finish",()=>{B(this)}),N.on("error",G),N.finalize()})}prepareModel(N,B){N.creator=N.creator||"ExcelJS",N.lastModifiedBy=N.lastModifiedBy||"ExcelJS",N.created=N.created||new Date,N.modified=N.modified||new Date,N.useSharedStrings=B.useSharedStrings===void 0||B.useSharedStrings,N.useStyles=B.useStyles===void 0||B.useStyles,N.sharedStrings=new u,N.styles=N.useStyles?new h(!0):new h.Mock;const G=new Y,w=new R;G.prepare(N);const W={sharedStrings:N.sharedStrings,styles:N.styles,date1904:N.properties.date1904,drawingsCount:0,media:N.media};W.drawings=N.drawings=[],W.commentRefs=N.commentRefs=[];let y=0;N.tables=[],N.worksheets.forEach(f=>{f.tables.forEach(D=>{y++,D.target=`table${y}.xml`,D.id=y,N.tables.push(D)}),w.prepare(f,W)})}async write(N,B){B=B||{};const{model:G}=this.workbook,w=new a.ZipWriter(B.zip);return w.pipe(N),this.prepareModel(G,B),await this.addContentTypes(w,G),await this.addOfficeRels(w,G),await this.addWorkbookRels(w,G),await this.addWorksheets(w,G),await this.addSharedStrings(w,G),await this.addDrawings(w,G),await this.addTables(w,G),await Promise.all([this.addThemes(w,G),this.addStyles(w,G)]),await this.addMedia(w,G),await Promise.all([this.addApp(w,G),this.addCore(w,G)]),await this.addWorkbook(w,G),this._finalize(w)}writeFile(N,B){const G=s.createWriteStream(N);return new Promise((w,W)=>{G.on("finish",()=>{w()}),G.on("error",y=>{W(y)}),this.write(G,B).then(()=>{G.end()}).catch(y=>{W(y)})})}async writeBuffer(N){const B=new d;return await this.write(B,N),B.read()}}K.RelType=g("./rel-type"),C.exports=K}).call(this)}).call(this,g("_process"),g("buffer").Buffer)},{"../utils/browser-buffer-decode":16,"../utils/stream-buf":24,"../utils/utils":27,"../utils/xml-stream":28,"../utils/zip-stream":29,"./rel-type":31,"./xform/book/workbook-xform":38,"./xform/comment/comments-xform":40,"./xform/comment/vml-notes-xform":45,"./xform/core/app-xform":51,"./xform/core/content-types-xform":52,"./xform/core/core-xform":53,"./xform/core/relationships-xform":55,"./xform/drawing/drawing-xform":62,"./xform/sheet/worksheet-xform":115,"./xform/strings/shared-strings-xform":124,"./xform/style/styles-xform":135,"./xform/table/table-xform":143,"./xml/theme1":145,_process:467,buffer:220,fs:216,jszip:441,"readable-stream":491}],145:[function(g,C,i){C.exports=`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
- <a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Office Theme"> <a:themeElements> <a:clrScheme name="Office"> <a:dk1> <a:sysClr val="windowText" lastClr="000000"/> </a:dk1> <a:lt1> <a:sysClr val="window" lastClr="FFFFFF"/> </a:lt1> <a:dk2> <a:srgbClr val="1F497D"/> </a:dk2> <a:lt2> <a:srgbClr val="EEECE1"/> </a:lt2> <a:accent1> <a:srgbClr val="4F81BD"/> </a:accent1> <a:accent2> <a:srgbClr val="C0504D"/> </a:accent2> <a:accent3> <a:srgbClr val="9BBB59"/> </a:accent3> <a:accent4> <a:srgbClr val="8064A2"/> </a:accent4> <a:accent5> <a:srgbClr val="4BACC6"/> </a:accent5> <a:accent6> <a:srgbClr val="F79646"/> </a:accent6> <a:hlink> <a:srgbClr val="0000FF"/> </a:hlink> <a:folHlink> <a:srgbClr val="800080"/> </a:folHlink> </a:clrScheme> <a:fontScheme name="Office"> <a:majorFont> <a:latin typeface="Cambria"/> <a:ea typeface=""/> <a:cs typeface=""/> <a:font script="Jpan" typeface="MS Pゴシック"/> <a:font script="Hang" typeface="맑은 고딕"/> <a:font script="Hans" typeface="宋体"/> <a:font script="Hant" typeface="新細明體"/> <a:font script="Arab" typeface="Times New Roman"/> <a:font script="Hebr" typeface="Times New Roman"/> <a:font script="Thai" typeface="Tahoma"/> <a:font script="Ethi" typeface="Nyala"/> <a:font script="Beng" typeface="Vrinda"/> <a:font script="Gujr" typeface="Shruti"/> <a:font script="Khmr" typeface="MoolBoran"/> <a:font script="Knda" typeface="Tunga"/> <a:font script="Guru" typeface="Raavi"/> <a:font script="Cans" typeface="Euphemia"/> <a:font script="Cher" typeface="Plantagenet Cherokee"/> <a:font script="Yiii" typeface="Microsoft Yi Baiti"/> <a:font script="Tibt" typeface="Microsoft Himalaya"/> <a:font script="Thaa" typeface="MV Boli"/> <a:font script="Deva" typeface="Mangal"/> <a:font script="Telu" typeface="Gautami"/> <a:font script="Taml" typeface="Latha"/> <a:font script="Syrc" typeface="Estrangelo Edessa"/> <a:font script="Orya" typeface="Kalinga"/> <a:font script="Mlym" typeface="Kartika"/> <a:font script="Laoo" typeface="DokChampa"/> <a:font script="Sinh" typeface="Iskoola Pota"/> <a:font script="Mong" typeface="Mongolian Baiti"/> <a:font script="Viet" typeface="Times New Roman"/> <a:font script="Uigh" typeface="Microsoft Uighur"/> <a:font script="Geor" typeface="Sylfaen"/> </a:majorFont> <a:minorFont> <a:latin typeface="Calibri"/> <a:ea typeface=""/> <a:cs typeface=""/> <a:font script="Jpan" typeface="MS Pゴシック"/> <a:font script="Hang" typeface="맑은 고딕"/> <a:font script="Hans" typeface="宋体"/> <a:font script="Hant" typeface="新細明體"/> <a:font script="Arab" typeface="Arial"/> <a:font script="Hebr" typeface="Arial"/> <a:font script="Thai" typeface="Tahoma"/> <a:font script="Ethi" typeface="Nyala"/> <a:font script="Beng" typeface="Vrinda"/> <a:font script="Gujr" typeface="Shruti"/> <a:font script="Khmr" typeface="DaunPenh"/> <a:font script="Knda" typeface="Tunga"/> <a:font script="Guru" typeface="Raavi"/> <a:font script="Cans" typeface="Euphemia"/> <a:font script="Cher" typeface="Plantagenet Cherokee"/> <a:font script="Yiii" typeface="Microsoft Yi Baiti"/> <a:font script="Tibt" typeface="Microsoft Himalaya"/> <a:font script="Thaa" typeface="MV Boli"/> <a:font script="Deva" typeface="Mangal"/> <a:font script="Telu" typeface="Gautami"/> <a:font script="Taml" typeface="Latha"/> <a:font script="Syrc" typeface="Estrangelo Edessa"/> <a:font script="Orya" typeface="Kalinga"/> <a:font script="Mlym" typeface="Kartika"/> <a:font script="Laoo" typeface="DokChampa"/> <a:font script="Sinh" typeface="Iskoola Pota"/> <a:font script="Mong" typeface="Mongolian Baiti"/> <a:font script="Viet" typeface="Arial"/> <a:font script="Uigh" typeface="Microsoft Uighur"/> <a:font script="Geor" typeface="Sylfaen"/> </a:minorFont> </a:fontScheme> <a:fmtScheme name="Office"> <a:fillStyleLst> <a:solidFill> <a:schemeClr val="phClr"/> </a:solidFill> <a:gradFill rotWithShape="1"> <a:gsLst> <a:gs pos="0"> <a:schemeClr val="phClr"> <a:tint val="50000"/> <a:satMod val="300000"/> </a:schemeClr> </a:gs> <a:gs pos="35000"> <a:schemeClr val="phClr"> <a:tint val="37000"/> <a:satMod val="300000"/> </a:schemeClr> </a:gs> <a:gs pos="100000"> <a:schemeClr val="phClr"> <a:tint val="15000"/> <a:satMod val="350000"/> </a:schemeClr> </a:gs> </a:gsLst> <a:lin ang="16200000" scaled="1"/> </a:gradFill> <a:gradFill rotWithShape="1"> <a:gsLst> <a:gs pos="0"> <a:schemeClr val="phClr"> <a:tint val="100000"/> <a:shade val="100000"/> <a:satMod val="130000"/> </a:schemeClr> </a:gs> <a:gs pos="100000"> <a:schemeClr val="phClr"> <a:tint val="50000"/> <a:shade val="100000"/> <a:satMod val="350000"/> </a:schemeClr> </a:gs> </a:gsLst> <a:lin ang="16200000" scaled="0"/> </a:gradFill> </a:fillStyleLst> <a:lnStyleLst> <a:ln w="9525" cap="flat" cmpd="sng" algn="ctr"> <a:solidFill> <a:schemeClr val="phClr"> <a:shade val="95000"/> <a:satMod val="105000"/> </a:schemeClr> </a:solidFill> <a:prstDash val="solid"/> </a:ln> <a:ln w="25400" cap="flat" cmpd="sng" algn="ctr"> <a:solidFill> <a:schemeClr val="phClr"/> </a:solidFill> <a:prstDash val="solid"/> </a:ln> <a:ln w="38100" cap="flat" cmpd="sng" algn="ctr"> <a:solidFill> <a:schemeClr val="phClr"/> </a:solidFill> <a:prstDash val="solid"/> </a:ln> </a:lnStyleLst> <a:effectStyleLst> <a:effectStyle> <a:effectLst> <a:outerShdw blurRad="40000" dist="20000" dir="5400000" rotWithShape="0"> <a:srgbClr val="000000"> <a:alpha val="38000"/> </a:srgbClr> </a:outerShdw> </a:effectLst> </a:effectStyle> <a:effectStyle> <a:effectLst> <a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"> <a:srgbClr val="000000"> <a:alpha val="35000"/> </a:srgbClr> </a:outerShdw> </a:effectLst> </a:effectStyle> <a:effectStyle> <a:effectLst> <a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"> <a:srgbClr val="000000"> <a:alpha val="35000"/> </a:srgbClr> </a:outerShdw> </a:effectLst> <a:scene3d> <a:camera prst="orthographicFront"> <a:rot lat="0" lon="0" rev="0"/> </a:camera> <a:lightRig rig="threePt" dir="t"> <a:rot lat="0" lon="0" rev="1200000"/> </a:lightRig> </a:scene3d> <a:sp3d> <a:bevelT w="63500" h="25400"/> </a:sp3d> </a:effectStyle> </a:effectStyleLst> <a:bgFillStyleLst> <a:solidFill> <a:schemeClr val="phClr"/> </a:solidFill> <a:gradFill rotWithShape="1"> <a:gsLst> <a:gs pos="0"> <a:schemeClr val="phClr"> <a:tint val="40000"/> <a:satMod val="350000"/> </a:schemeClr> </a:gs> <a:gs pos="40000"> <a:schemeClr val="phClr"> <a:tint val="45000"/> <a:shade val="99000"/> <a:satMod val="350000"/> </a:schemeClr> </a:gs> <a:gs pos="100000"> <a:schemeClr val="phClr"> <a:shade val="20000"/> <a:satMod val="255000"/> </a:schemeClr> </a:gs> </a:gsLst> <a:path path="circle"> <a:fillToRect l="50000" t="-80000" r="50000" b="180000"/> </a:path> </a:gradFill> <a:gradFill rotWithShape="1"> <a:gsLst> <a:gs pos="0"> <a:schemeClr val="phClr"> <a:tint val="80000"/> <a:satMod val="300000"/> </a:schemeClr> </a:gs> <a:gs pos="100000"> <a:schemeClr val="phClr"> <a:shade val="30000"/> <a:satMod val="200000"/> </a:schemeClr> </a:gs> </a:gsLst> <a:path path="circle"> <a:fillToRect l="50000" t="50000" r="50000" b="50000"/> </a:path> </a:gradFill> </a:bgFillStyleLst> </a:fmtScheme> </a:themeElements> <a:objectDefaults> <a:spDef> <a:spPr/> <a:bodyPr/> <a:lstStyle/> <a:style> <a:lnRef idx="1"> <a:schemeClr val="accent1"/> </a:lnRef> <a:fillRef idx="3"> <a:schemeClr val="accent1"/> </a:fillRef> <a:effectRef idx="2"> <a:schemeClr val="accent1"/> </a:effectRef> <a:fontRef idx="minor"> <a:schemeClr val="lt1"/> </a:fontRef> </a:style> </a:spDef> <a:lnDef> <a:spPr/> <a:bodyPr/> <a:lstStyle/> <a:style> <a:lnRef idx="2"> <a:schemeClr val="accent1"/> </a:lnRef> <a:fillRef idx="0"> <a:schemeClr val="accent1"/> </a:fillRef> <a:effectRef idx="1"> <a:schemeClr val="accent1"/> </a:effectRef> <a:fontRef idx="minor"> <a:schemeClr val="tx1"/> </a:fontRef> </a:style> </a:lnDef> </a:objectDefaults> <a:extraClrSchemeLst/> </a:theme>`},{}],146:[function(g,C,i){(function(e){(function(){Object.defineProperty(i,"__esModule",{value:!0}),i.CsvFormatterStream=void 0;const A=g("stream"),s=g("./formatter");class l extends A.Transform{constructor(a){super({writableObjectMode:a.objectMode}),this.hasWrittenBOM=!1,this.formatterOptions=a,this.rowFormatter=new s.RowFormatter(a),this.hasWrittenBOM=!a.writeBOM}transform(a){return this.rowFormatter.rowTransform=a,this}_transform(a,d,o){let c=!1;try{this.hasWrittenBOM||(this.push(this.formatterOptions.BOM),this.hasWrittenBOM=!0),this.rowFormatter.format(a,(r,h)=>r?(c=!0,o(r)):(h&&h.forEach(b=>{this.push(e.from(b,"utf8"))}),c=!0,o()))}catch(r){if(c)throw r;o(r)}}_flush(a){this.rowFormatter.finish((d,o)=>d?a(d):(o&&o.forEach(c=>{this.push(e.from(c,"utf8"))}),a()))}}i.CsvFormatterStream=l}).call(this)}).call(this,g("buffer").Buffer)},{"./formatter":150,buffer:220,stream:505}],147:[function(g,C,i){Object.defineProperty(i,"__esModule",{value:!0}),i.FormatterOptions=void 0,i.FormatterOptions=class{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};var A;this.objectMode=!0,this.delimiter=",",this.rowDelimiter=`
- `,this.quote='"',this.escape=this.quote,this.quoteColumns=!1,this.quoteHeaders=this.quoteColumns,this.headers=null,this.includeEndRowDelimiter=!1,this.writeBOM=!1,this.BOM="\uFEFF",this.alwaysWriteHeaders=!1,Object.assign(this,e||{}),(e==null?void 0:e.quoteHeaders)===void 0&&(this.quoteHeaders=this.quoteColumns),(e==null?void 0:e.quote)===!0?this.quote='"':(e==null?void 0:e.quote)===!1&&(this.quote=""),typeof(e==null?void 0:e.escape)!="string"&&(this.escape=this.quote),this.shouldWriteHeaders=!!this.headers&&((A=e.writeHeaders)===null||A===void 0||A),this.headers=Array.isArray(this.headers)?this.headers:null,this.escapedQuote=`${this.escape}${this.quote}`}}},{}],148:[function(g,C,i){var e=function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(i,"__esModule",{value:!0}),i.FieldFormatter=void 0;const A=e(g("lodash.isboolean")),s=e(g("lodash.isnil")),l=e(g("lodash.escaperegexp"));i.FieldFormatter=class{constructor(n){this._headers=null,this.formatterOptions=n,n.headers!==null&&(this.headers=n.headers),this.REPLACE_REGEXP=new RegExp(n.quote,"g");const a=`[${n.delimiter}${l.default(n.rowDelimiter)}|\r|
- ]`;this.ESCAPE_REGEXP=new RegExp(a)}set headers(n){this._headers=n}shouldQuote(n,a){const d=a?this.formatterOptions.quoteHeaders:this.formatterOptions.quoteColumns;return A.default(d)?d:Array.isArray(d)?d[n]:this._headers!==null&&d[this._headers[n]]}format(n,a,d){const o=(""+(s.default(n)?"":n)).replace(/\0/g,""),{formatterOptions:c}=this;return c.quote!==""&&o.indexOf(c.quote)!==-1?this.quoteField(o.replace(this.REPLACE_REGEXP,c.escapedQuote)):o.search(this.ESCAPE_REGEXP)!==-1||this.shouldQuote(a,d)?this.quoteField(o):o}quoteField(n){const{quote:a}=this.formatterOptions;return`${a}${n}${a}`}}},{"lodash.escaperegexp":442,"lodash.isboolean":444,"lodash.isnil":447}],149:[function(g,C,i){var e=function(d){return d&&d.__esModule?d:{default:d}};Object.defineProperty(i,"__esModule",{value:!0}),i.RowFormatter=void 0;const A=e(g("lodash.isfunction")),s=e(g("lodash.isequal")),l=g("./FieldFormatter"),n=g("../types");class a{constructor(o){this.rowCount=0,this.formatterOptions=o,this.fieldFormatter=new l.FieldFormatter(o),this.headers=o.headers,this.shouldWriteHeaders=o.shouldWriteHeaders,this.hasWrittenHeaders=!1,this.headers!==null&&(this.fieldFormatter.headers=this.headers),o.transform&&(this.rowTransform=o.transform)}static isRowHashArray(o){return!!Array.isArray(o)&&Array.isArray(o[0])&&o[0].length===2}static isRowArray(o){return Array.isArray(o)&&!this.isRowHashArray(o)}static gatherHeaders(o){return a.isRowHashArray(o)?o.map(c=>c[0]):Array.isArray(o)?o:Object.keys(o)}static createTransform(o){return n.isSyncTransform(o)?(c,r)=>{let h=null;try{h=o(c)}catch(b){return r(b)}return r(null,h)}:(c,r)=>{o(c,r)}}set rowTransform(o){if(!A.default(o))throw new TypeError("The transform should be a function");this._rowTransform=a.createTransform(o)}format(o,c){this.callTransformer(o,(r,h)=>{if(r)return c(r);if(!o)return c(null);const b=[];if(h){const{shouldFormatColumns:u,headers:m}=this.checkHeaders(h);if(this.shouldWriteHeaders&&m&&!this.hasWrittenHeaders&&(b.push(this.formatColumns(m,!0)),this.hasWrittenHeaders=!0),u){const Z=this.gatherColumns(h);b.push(this.formatColumns(Z,!1))}}return c(null,b)})}finish(o){const c=[];if(this.formatterOptions.alwaysWriteHeaders&&this.rowCount===0){if(!this.headers)return o(new Error("`alwaysWriteHeaders` option is set to true but `headers` option not provided."));c.push(this.formatColumns(this.headers,!0))}return this.formatterOptions.includeEndRowDelimiter&&c.push(this.formatterOptions.rowDelimiter),o(null,c)}checkHeaders(o){if(this.headers)return{shouldFormatColumns:!0,headers:this.headers};const c=a.gatherHeaders(o);return this.headers=c,this.fieldFormatter.headers=c,this.shouldWriteHeaders?{shouldFormatColumns:!s.default(c,o),headers:c}:{shouldFormatColumns:!0,headers:null}}gatherColumns(o){if(this.headers===null)throw new Error("Headers is currently null");return Array.isArray(o)?a.isRowHashArray(o)?this.headers.map((c,r)=>{const h=o[r];return h?h[1]:""}):a.isRowArray(o)&&!this.shouldWriteHeaders?o:this.headers.map((c,r)=>o[r]):this.headers.map(c=>o[c])}callTransformer(o,c){return this._rowTransform?this._rowTransform(o,c):c(null,o)}formatColumns(o,c){const r=o.map((b,u)=>this.fieldFormatter.format(b,u,c)).join(this.formatterOptions.delimiter),{rowCount:h}=this;return this.rowCount+=1,h?[this.formatterOptions.rowDelimiter,r].join(""):r}}i.RowFormatter=a},{"../types":152,"./FieldFormatter":148,"lodash.isequal":445,"lodash.isfunction":446}],150:[function(g,C,i){Object.defineProperty(i,"__esModule",{value:!0}),i.FieldFormatter=i.RowFormatter=void 0;var e=g("./RowFormatter");Object.defineProperty(i,"RowFormatter",{enumerable:!0,get:function(){return e.RowFormatter}});var A=g("./FieldFormatter");Object.defineProperty(i,"FieldFormatter",{enumerable:!0,get:function(){return A.FieldFormatter}})},{"./FieldFormatter":148,"./RowFormatter":149}],151:[function(g,C,i){(function(e){(function(){var A=Object.create?function(u,m,Z,p){p===void 0&&(p=Z),Object.defineProperty(u,p,{enumerable:!0,get:function(){return m[Z]}})}:function(u,m,Z,p){p===void 0&&(p=Z),u[p]=m[Z]},s=Object.create?function(u,m){Object.defineProperty(u,"default",{enumerable:!0,value:m})}:function(u,m){u.default=m},l=function(u){if(u&&u.__esModule)return u;var m={};if(u!=null)for(var Z in u)Z!=="default"&&Object.prototype.hasOwnProperty.call(u,Z)&&A(m,u,Z);return s(m,u),m},n=function(u,m){for(var Z in u)Z==="default"||Object.prototype.hasOwnProperty.call(m,Z)||A(m,u,Z)};Object.defineProperty(i,"__esModule",{value:!0}),i.writeToPath=i.writeToString=i.writeToBuffer=i.writeToStream=i.write=i.format=i.FormatterOptions=i.CsvFormatterStream=void 0;const a=g("util"),d=g("stream"),o=l(g("fs")),c=g("./FormatterOptions"),r=g("./CsvFormatterStream");n(g("./types"),i);var h=g("./CsvFormatterStream");Object.defineProperty(i,"CsvFormatterStream",{enumerable:!0,get:function(){return h.CsvFormatterStream}});var b=g("./FormatterOptions");Object.defineProperty(i,"FormatterOptions",{enumerable:!0,get:function(){return b.FormatterOptions}}),i.format=u=>new r.CsvFormatterStream(new c.FormatterOptions(u)),i.write=(u,m)=>{const Z=i.format(m),p=a.promisify((Y,R)=>{Z.write(Y,void 0,R)});return u.reduce((Y,R)=>Y.then(()=>p(R)),Promise.resolve()).then(()=>Z.end()).catch(Y=>{Z.emit("error",Y)}),Z},i.writeToStream=(u,m,Z)=>i.write(m,Z).pipe(u),i.writeToBuffer=function(u){let m=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const Z=[],p=new d.Writable({write(Y,R,X){Z.push(Y),X()}});return new Promise((Y,R)=>{p.on("error",R).on("finish",()=>Y(e.concat(Z))),i.write(u,m).pipe(p)})},i.writeToString=(u,m)=>i.writeToBuffer(u,m).then(Z=>Z.toString()),i.writeToPath=(u,m,Z)=>{const p=o.createWriteStream(u,{encoding:"utf8"});return i.write(m,Z).pipe(p)}}).call(this)}).call(this,g("buffer").Buffer)},{"./CsvFormatterStream":146,"./FormatterOptions":147,"./types":152,buffer:220,fs:216,stream:505,util:527}],152:[function(g,C,i){Object.defineProperty(i,"__esModule",{value:!0}),i.isSyncTransform=void 0,i.isSyncTransform=e=>e.length===1},{}],153:[function(g,C,i){(function(e){(function(){Object.defineProperty(i,"__esModule",{value:!0}),i.CsvParserStream=void 0;const A=g("string_decoder"),s=g("stream"),l=g("./transforms"),n=g("./parser");class a extends s.Transform{constructor(o){super({objectMode:o.objectMode}),this.lines="",this.rowCount=0,this.parsedRowCount=0,this.parsedLineCount=0,this.endEmitted=!1,this.headersEmitted=!1,this.parserOptions=o,this.parser=new n.Parser(o),this.headerTransformer=new l.HeaderTransformer(o),this.decoder=new A.StringDecoder(o.encoding),this.rowTransformerValidator=new l.RowTransformerValidator}get hasHitRowLimit(){return this.parserOptions.limitRows&&this.rowCount>=this.parserOptions.maxRows}get shouldEmitRows(){return this.parsedRowCount>this.parserOptions.skipRows}get shouldSkipLine(){return this.parsedLineCount<=this.parserOptions.skipLines}transform(o){return this.rowTransformerValidator.rowTransform=o,this}validate(o){return this.rowTransformerValidator.rowValidator=o,this}emit(o){if(o==="end")return this.endEmitted||(this.endEmitted=!0,super.emit("end",this.rowCount)),!1;for(var c=arguments.length,r=new Array(c>1?c-1:0),h=1;h<c;h++)r[h-1]=arguments[h];return super.emit(o,...r)}_transform(o,c,r){if(this.hasHitRowLimit)return r();const h=a.wrapDoneCallback(r);try{const{lines:b}=this,u=b+this.decoder.write(o),m=this.parse(u,!0);return this.processRows(m,h)}catch(b){return h(b)}}_flush(o){const c=a.wrapDoneCallback(o);if(this.hasHitRowLimit)return c();try{const r=this.lines+this.decoder.end(),h=this.parse(r,!1);return this.processRows(h,c)}catch(r){return c(r)}}parse(o,c){if(!o)return[];const{line:r,rows:h}=this.parser.parse(o,c);return this.lines=r,h}processRows(o,c){const r=o.length,h=b=>{const u=p=>p?c(p):b%100!=0?h(b+1):void e(()=>h(b+1));if(this.checkAndEmitHeaders(),b>=r||this.hasHitRowLimit)return c();if(this.parsedLineCount+=1,this.shouldSkipLine)return u();const m=o[b];this.rowCount+=1,this.parsedRowCount+=1;const Z=this.rowCount;return this.transformRow(m,(p,Y)=>{if(p)return this.rowCount-=1,u(p);if(!Y)return u(new Error("expected transform result"));if(Y.isValid){if(Y.row)return this.pushRow(Y.row,u)}else this.emit("data-invalid",Y.row,Z,Y.reason);return u()})};h(0)}transformRow(o,c){try{this.headerTransformer.transform(o,(r,h)=>r?c(r):h?h.isValid?h.row?this.shouldEmitRows?this.rowTransformerValidator.transformAndValidate(h.row,c):this.skipRow(c):(this.rowCount-=1,this.parsedRowCount-=1,c(null,{row:null,isValid:!0})):this.shouldEmitRows?c(null,{isValid:!1,row:o}):this.skipRow(c):c(new Error("Expected result from header transform")))}catch(r){c(r)}}checkAndEmitHeaders(){!this.headersEmitted&&this.headerTransformer.headers&&(this.headersEmitted=!0,this.emit("headers",this.headerTransformer.headers))}skipRow(o){return this.rowCount-=1,o(null,{row:null,isValid:!0})}pushRow(o,c){try{this.parserOptions.objectMode?this.push(o):this.push(JSON.stringify(o)),c()}catch(r){c(r)}}static wrapDoneCallback(o){let c=!1;return function(r){if(r){if(c)throw r;return c=!0,void o(r)}for(var h=arguments.length,b=new Array(h>1?h-1:0),u=1;u<h;u++)b[u-1]=arguments[u];o(...b)}}}i.CsvParserStream=a}).call(this)}).call(this,g("timers").setImmediate)},{"./parser":165,"./transforms":168,stream:505,string_decoder:218,timers:523}],154:[function(g,C,i){var e=function(l){return l&&l.__esModule?l:{default:l}};Object.defineProperty(i,"__esModule",{value:!0}),i.ParserOptions=void 0;const A=e(g("lodash.escaperegexp")),s=e(g("lodash.isnil"));i.ParserOptions=class{constructor(l){var n;if(this.objectMode=!0,this.delimiter=",",this.ignoreEmpty=!1,this.quote='"',this.escape=null,this.escapeChar=this.quote,this.comment=null,this.supportsComments=!1,this.ltrim=!1,this.rtrim=!1,this.trim=!1,this.headers=null,this.renameHeaders=!1,this.strictColumnHandling=!1,this.discardUnmappedColumns=!1,this.carriageReturn="\r",this.encoding="utf8",this.limitRows=!1,this.maxRows=0,this.skipLines=0,this.skipRows=0,Object.assign(this,l||{}),this.delimiter.length>1)throw new Error("delimiter option must be one character long");this.escapedDelimiter=A.default(this.delimiter),this.escapeChar=(n=this.escape)!==null&&n!==void 0?n:this.quote,this.supportsComments=!s.default(this.comment),this.NEXT_TOKEN_REGEXP=new RegExp(`([^\\s]|\\r\\n|\\n|\\r|${this.escapedDelimiter})`),this.maxRows>0&&(this.limitRows=!0)}}},{"lodash.escaperegexp":442,"lodash.isnil":447}],155:[function(g,C,i){var e=Object.create?function(h,b,u,m){m===void 0&&(m=u),Object.defineProperty(h,m,{enumerable:!0,get:function(){return b[u]}})}:function(h,b,u,m){m===void 0&&(m=u),h[m]=b[u]},A=Object.create?function(h,b){Object.defineProperty(h,"default",{enumerable:!0,value:b})}:function(h,b){h.default=b},s=function(h){if(h&&h.__esModule)return h;var b={};if(h!=null)for(var u in h)u!=="default"&&Object.prototype.hasOwnProperty.call(h,u)&&e(b,h,u);return A(b,h),b},l=function(h,b){for(var u in h)u==="default"||Object.prototype.hasOwnProperty.call(b,u)||e(b,h,u)};Object.defineProperty(i,"__esModule",{value:!0}),i.parseString=i.parseFile=i.parseStream=i.parse=i.ParserOptions=i.CsvParserStream=void 0;const n=s(g("fs")),a=g("stream"),d=g("./ParserOptions"),o=g("./CsvParserStream");l(g("./types"),i);var c=g("./CsvParserStream");Object.defineProperty(i,"CsvParserStream",{enumerable:!0,get:function(){return c.CsvParserStream}});var r=g("./ParserOptions");Object.defineProperty(i,"ParserOptions",{enumerable:!0,get:function(){return r.ParserOptions}}),i.parse=h=>new o.CsvParserStream(new d.ParserOptions(h)),i.parseStream=(h,b)=>h.pipe(new o.CsvParserStream(new d.ParserOptions(b))),i.parseFile=function(h){let b=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return n.createReadStream(h).pipe(new o.CsvParserStream(new d.ParserOptions(b)))},i.parseString=(h,b)=>{const u=new a.Readable;return u.push(h),u.push(null),u.pipe(new o.CsvParserStream(new d.ParserOptions(b)))}},{"./CsvParserStream":153,"./ParserOptions":154,"./types":169,fs:216,stream:505}],156:[function(g,C,i){Object.defineProperty(i,"__esModule",{value:!0}),i.Parser=void 0;const e=g("./Scanner"),A=g("./RowParser"),s=g("./Token");class l{constructor(a){this.parserOptions=a,this.rowParser=new A.RowParser(this.parserOptions)}static removeBOM(a){return a&&a.charCodeAt(0)===65279?a.slice(1):a}parse(a,d){const o=new e.Scanner({line:l.removeBOM(a),parserOptions:this.parserOptions,hasMoreData:d});return this.parserOptions.supportsComments?this.parseWithComments(o):this.parseWithoutComments(o)}parseWithoutComments(a){const d=[];let o=!0;for(;o;)o=this.parseRow(a,d);return{line:a.line,rows:d}}parseWithComments(a){const{parserOptions:d}=this,o=[];for(let c=a.nextCharacterToken;c!==null;c=a.nextCharacterToken)if(s.Token.isTokenComment(c,d)){if(a.advancePastLine()===null)return{line:a.lineFromCursor,rows:o};if(!a.hasMoreCharacters)return{line:a.lineFromCursor,rows:o};a.truncateToCursor()}else if(!this.parseRow(a,o))break;return{line:a.line,rows:o}}parseRow(a,d){if(!a.nextNonSpaceToken)return!1;const o=this.rowParser.parse(a);return o!==null&&(this.parserOptions.ignoreEmpty&&A.RowParser.isEmptyRow(o)||d.push(o),!0)}}i.Parser=l},{"./RowParser":157,"./Scanner":158,"./Token":159}],157:[function(g,C,i){Object.defineProperty(i,"__esModule",{value:!0}),i.RowParser=void 0;const e=g("./column"),A=g("./Token");i.RowParser=class{constructor(s){this.parserOptions=s,this.columnParser=new e.ColumnParser(s)}static isEmptyRow(s){return s.join("").replace(/\s+/g,"")===""}parse(s){const{parserOptions:l}=this,{hasMoreData:n}=s,a=s,d=[];let o=this.getStartToken(a,d);for(;o;){if(A.Token.isTokenRowDelimiter(o))return a.advancePastToken(o),!a.hasMoreCharacters&&A.Token.isTokenCarriageReturn(o,l)&&n?null:(a.truncateToCursor(),d);if(!this.shouldSkipColumnParse(a,o,d)){const c=this.columnParser.parse(a);if(c===null)return null;d.push(c)}o=a.nextNonSpaceToken}return n?null:(a.truncateToCursor(),d)}getStartToken(s,l){const n=s.nextNonSpaceToken;return n!==null&&A.Token.isTokenDelimiter(n,this.parserOptions)?(l.push(""),s.nextNonSpaceToken):n}shouldSkipColumnParse(s,l,n){const{parserOptions:a}=this;if(A.Token.isTokenDelimiter(l,a)){s.advancePastToken(l);const d=s.nextCharacterToken;if(!s.hasMoreCharacters||d!==null&&A.Token.isTokenRowDelimiter(d)||d!==null&&A.Token.isTokenDelimiter(d,a))return n.push(""),!0}return!1}}},{"./Token":159,"./column":164}],158:[function(g,C,i){Object.defineProperty(i,"__esModule",{value:!0}),i.Scanner=void 0;const e=g("./Token"),A=/((?:\r\n)|\n|\r)/;i.Scanner=class{constructor(s){this.cursor=0,this.line=s.line,this.lineLength=this.line.length,this.parserOptions=s.parserOptions,this.hasMoreData=s.hasMoreData,this.cursor=s.cursor||0}get hasMoreCharacters(){return this.lineLength>this.cursor}get nextNonSpaceToken(){const{lineFromCursor:s}=this,l=this.parserOptions.NEXT_TOKEN_REGEXP;if(s.search(l)===-1)return null;const n=l.exec(s);if(n==null)return null;const a=n[1],d=this.cursor+(n.index||0);return new e.Token({token:a,startCursor:d,endCursor:d+a.length-1})}get nextCharacterToken(){const{cursor:s,lineLength:l}=this;return l<=s?null:new e.Token({token:this.line[s],startCursor:s,endCursor:s})}get lineFromCursor(){return this.line.substr(this.cursor)}advancePastLine(){const s=A.exec(this.lineFromCursor);return s?(this.cursor+=(s.index||0)+s[0].length,this):this.hasMoreData?null:(this.cursor=this.lineLength,this)}advanceTo(s){return this.cursor=s,this}advanceToToken(s){return this.cursor=s.startCursor,this}advancePastToken(s){return this.cursor=s.endCursor+1,this}truncateToCursor(){return this.line=this.lineFromCursor,this.lineLength=this.line.length,this.cursor=0,this}}},{"./Token":159}],159:[function(g,C,i){Object.defineProperty(i,"__esModule",{value:!0}),i.Token=void 0,i.Token=class{constructor(e){this.token=e.token,this.startCursor=e.startCursor,this.endCursor=e.endCursor}static isTokenRowDelimiter(e){const A=e.token;return A==="\r"||A===`
- `||A===`\r
- `}static isTokenCarriageReturn(e,A){return e.token===A.carriageReturn}static isTokenComment(e,A){return A.supportsComments&&!!e&&e.token===A.comment}static isTokenEscapeCharacter(e,A){return e.token===A.escapeChar}static isTokenQuote(e,A){return e.token===A.quote}static isTokenDelimiter(e,A){return e.token===A.delimiter}}},{}],160:[function(g,C,i){Object.defineProperty(i,"__esModule",{value:!0}),i.ColumnFormatter=void 0,i.ColumnFormatter=class{constructor(e){e.trim?this.format=A=>A.trim():e.ltrim?this.format=A=>A.trimLeft():e.rtrim?this.format=A=>A.trimRight():this.format=A=>A}}},{}],161:[function(g,C,i){Object.defineProperty(i,"__esModule",{value:!0}),i.ColumnParser=void 0;const e=g("./NonQuotedColumnParser"),A=g("./QuotedColumnParser"),s=g("../Token");i.ColumnParser=class{constructor(l){this.parserOptions=l,this.quotedColumnParser=new A.QuotedColumnParser(l),this.nonQuotedColumnParser=new e.NonQuotedColumnParser(l)}parse(l){const{nextNonSpaceToken:n}=l;return n!==null&&s.Token.isTokenQuote(n,this.parserOptions)?(l.advanceToToken(n),this.quotedColumnParser.parse(l)):this.nonQuotedColumnParser.parse(l)}}},{"../Token":159,"./NonQuotedColumnParser":162,"./QuotedColumnParser":163}],162:[function(g,C,i){Object.defineProperty(i,"__esModule",{value:!0}),i.NonQuotedColumnParser=void 0;const e=g("./ColumnFormatter"),A=g("../Token");i.NonQuotedColumnParser=class{constructor(s){this.parserOptions=s,this.columnFormatter=new e.ColumnFormatter(s)}parse(s){if(!s.hasMoreCharacters)return null;const{parserOptions:l}=this,n=[];let a=s.nextCharacterToken;for(;a&&!A.Token.isTokenDelimiter(a,l)&&!A.Token.isTokenRowDelimiter(a);a=s.nextCharacterToken)n.push(a.token),s.advancePastToken(a);return this.columnFormatter.format(n.join(""))}}},{"../Token":159,"./ColumnFormatter":160}],163:[function(g,C,i){Object.defineProperty(i,"__esModule",{value:!0}),i.QuotedColumnParser=void 0;const e=g("./ColumnFormatter"),A=g("../Token");i.QuotedColumnParser=class{constructor(s){this.parserOptions=s,this.columnFormatter=new e.ColumnFormatter(s)}parse(s){if(!s.hasMoreCharacters)return null;const l=s.cursor,{foundClosingQuote:n,col:a}=this.gatherDataBetweenQuotes(s);if(!n){if(s.advanceTo(l),!s.hasMoreData)throw new Error(`Parse Error: missing closing: '${this.parserOptions.quote||""}' in line: at '${s.lineFromCursor.replace(/[\r\n]/g,"\\n'")}'`);return null}return this.checkForMalformedColumn(s),a}gatherDataBetweenQuotes(s){const{parserOptions:l}=this;let n=!1,a=!1;const d=[];let o=s.nextCharacterToken;for(;!a&&o!==null;o=s.nextCharacterToken){const c=A.Token.isTokenQuote(o,l);if(!n&&c)n=!0;else if(n)if(A.Token.isTokenEscapeCharacter(o,l)){s.advancePastToken(o);const r=s.nextCharacterToken;r!==null&&(A.Token.isTokenQuote(r,l)||A.Token.isTokenEscapeCharacter(r,l))?(d.push(r.token),o=r):c?a=!0:d.push(o.token)}else c?a=!0:d.push(o.token);s.advancePastToken(o)}return{col:this.columnFormatter.format(d.join("")),foundClosingQuote:a}}checkForMalformedColumn(s){const{parserOptions:l}=this,{nextNonSpaceToken:n}=s;if(n){const a=A.Token.isTokenDelimiter(n,l),d=A.Token.isTokenRowDelimiter(n);if(!a&&!d){const o=s.lineFromCursor.substr(0,10).replace(/[\r\n]/g,"\\n'");throw new Error(`Parse Error: expected: '${l.escapedDelimiter}' OR new line got: '${n.token}'. at '${o}`)}s.advanceToToken(n)}else s.hasMoreData||s.advancePastLine()}}},{"../Token":159,"./ColumnFormatter":160}],164:[function(g,C,i){Object.defineProperty(i,"__esModule",{value:!0}),i.ColumnFormatter=i.QuotedColumnParser=i.NonQuotedColumnParser=i.ColumnParser=void 0;var e=g("./ColumnParser");Object.defineProperty(i,"ColumnParser",{enumerable:!0,get:function(){return e.ColumnParser}});var A=g("./NonQuotedColumnParser");Object.defineProperty(i,"NonQuotedColumnParser",{enumerable:!0,get:function(){return A.NonQuotedColumnParser}});var s=g("./QuotedColumnParser");Object.defineProperty(i,"QuotedColumnParser",{enumerable:!0,get:function(){return s.QuotedColumnParser}});var l=g("./ColumnFormatter");Object.defineProperty(i,"ColumnFormatter",{enumerable:!0,get:function(){return l.ColumnFormatter}})},{"./ColumnFormatter":160,"./ColumnParser":161,"./NonQuotedColumnParser":162,"./QuotedColumnParser":163}],165:[function(g,C,i){Object.defineProperty(i,"__esModule",{value:!0}),i.QuotedColumnParser=i.NonQuotedColumnParser=i.ColumnParser=i.Token=i.Scanner=i.RowParser=i.Parser=void 0;var e=g("./Parser");Object.defineProperty(i,"Parser",{enumerable:!0,get:function(){return e.Parser}});var A=g("./RowParser");Object.defineProperty(i,"RowParser",{enumerable:!0,get:function(){return A.RowParser}});var s=g("./Scanner");Object.defineProperty(i,"Scanner",{enumerable:!0,get:function(){return s.Scanner}});var l=g("./Token");Object.defineProperty(i,"Token",{enumerable:!0,get:function(){return l.Token}});var n=g("./column");Object.defineProperty(i,"ColumnParser",{enumerable:!0,get:function(){return n.ColumnParser}}),Object.defineProperty(i,"NonQuotedColumnParser",{enumerable:!0,get:function(){return n.NonQuotedColumnParser}}),Object.defineProperty(i,"QuotedColumnParser",{enumerable:!0,get:function(){return n.QuotedColumnParser}})},{"./Parser":156,"./RowParser":157,"./Scanner":158,"./Token":159,"./column":164}],166:[function(g,C,i){var e=function(a){return a&&a.__esModule?a:{default:a}};Object.defineProperty(i,"__esModule",{value:!0}),i.HeaderTransformer=void 0;const A=e(g("lodash.isundefined")),s=e(g("lodash.isfunction")),l=e(g("lodash.uniq")),n=e(g("lodash.groupby"));i.HeaderTransformer=class{constructor(a){this.headers=null,this.receivedHeaders=!1,this.shouldUseFirstRow=!1,this.processedFirstRow=!1,this.headersLength=0,this.parserOptions=a,a.headers===!0?this.shouldUseFirstRow=!0:Array.isArray(a.headers)?this.setHeaders(a.headers):s.default(a.headers)&&(this.headersTransform=a.headers)}transform(a,d){return this.shouldMapRow(a)?d(null,this.processRow(a)):d(null,{row:null,isValid:!0})}shouldMapRow(a){const{parserOptions:d}=this;if(!this.headersTransform&&d.renameHeaders&&!this.processedFirstRow){if(!this.receivedHeaders)throw new Error("Error renaming headers: new headers must be provided in an array");return this.processedFirstRow=!0,!1}if(!this.receivedHeaders&&Array.isArray(a)){if(this.headersTransform)this.setHeaders(this.headersTransform(a));else{if(!this.shouldUseFirstRow)return!0;this.setHeaders(a)}return!1}return!0}processRow(a){if(!this.headers)return{row:a,isValid:!0};const{parserOptions:d}=this;if(!d.discardUnmappedColumns&&a.length>this.headersLength){if(!d.strictColumnHandling)throw new Error(`Unexpected Error: column header mismatch expected: ${this.headersLength} columns got: ${a.length}`);return{row:a,isValid:!1,reason:`Column header mismatch expected: ${this.headersLength} columns got: ${a.length}`}}return d.strictColumnHandling&&a.length<this.headersLength?{row:a,isValid:!1,reason:`Column header mismatch expected: ${this.headersLength} columns got: ${a.length}`}:{row:this.mapHeaders(a),isValid:!0}}mapHeaders(a){const d={},{headers:o,headersLength:c}=this;for(let r=0;r<c;r+=1){const h=o[r];if(!A.default(h)){const b=a[r];A.default(b)?d[h]="":d[h]=b}}return d}setHeaders(a){var d;const o=a.filter(c=>!!c);if(l.default(o).length!==o.length){const c=n.default(o),r=Object.keys(c).filter(h=>c[h].length>1);throw new Error("Duplicate headers found "+JSON.stringify(r))}this.headers=a,this.receivedHeaders=!0,this.headersLength=((d=this.headers)===null||d===void 0?void 0:d.length)||0}}},{"lodash.groupby":443,"lodash.isfunction":446,"lodash.isundefined":448,"lodash.uniq":449}],167:[function(g,C,i){var e=function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(i,"__esModule",{value:!0}),i.RowTransformerValidator=void 0;const A=e(g("lodash.isfunction")),s=g("../types");class l{constructor(){this._rowTransform=null,this._rowValidator=null}static createTransform(a){return s.isSyncTransform(a)?(d,o)=>{let c=null;try{c=a(d)}catch(r){return o(r)}return o(null,c)}:a}static createValidator(a){return s.isSyncValidate(a)?(d,o)=>{o(null,{row:d,isValid:a(d)})}:(d,o)=>{a(d,(c,r,h)=>c?o(c):o(null,r?{row:d,isValid:r,reason:h}:{row:d,isValid:!1,reason:h}))}}set rowTransform(a){if(!A.default(a))throw new TypeError("The transform should be a function");this._rowTransform=l.createTransform(a)}set rowValidator(a){if(!A.default(a))throw new TypeError("The validate should be a function");this._rowValidator=l.createValidator(a)}transformAndValidate(a,d){return this.callTransformer(a,(o,c)=>o?d(o):c?this.callValidator(c,(r,h)=>r?d(r):h&&!h.isValid?d(null,{row:c,isValid:!1,reason:h.reason}):d(null,{row:c,isValid:!0})):d(null,{row:null,isValid:!0}))}callTransformer(a,d){return this._rowTransform?this._rowTransform(a,d):d(null,a)}callValidator(a,d){return this._rowValidator?this._rowValidator(a,d):d(null,{row:a,isValid:!0})}}i.RowTransformerValidator=l},{"../types":169,"lodash.isfunction":446}],168:[function(g,C,i){Object.defineProperty(i,"__esModule",{value:!0}),i.HeaderTransformer=i.RowTransformerValidator=void 0;var e=g("./RowTransformerValidator");Object.defineProperty(i,"RowTransformerValidator",{enumerable:!0,get:function(){return e.RowTransformerValidator}});var A=g("./HeaderTransformer");Object.defineProperty(i,"HeaderTransformer",{enumerable:!0,get:function(){return A.HeaderTransformer}})},{"./HeaderTransformer":166,"./RowTransformerValidator":167}],169:[function(g,C,i){Object.defineProperty(i,"__esModule",{value:!0}),i.isSyncValidate=i.isSyncTransform=void 0,i.isSyncTransform=e=>e.length===1,i.isSyncValidate=e=>e.length===1},{}],170:[function(g,C,i){const e=i;e.bignum=g("bn.js"),e.define=g("./asn1/api").define,e.base=g("./asn1/base"),e.constants=g("./asn1/constants"),e.decoders=g("./asn1/decoders"),e.encoders=g("./asn1/encoders")},{"./asn1/api":171,"./asn1/base":173,"./asn1/constants":177,"./asn1/decoders":179,"./asn1/encoders":182,"bn.js":184}],171:[function(g,C,i){const e=g("./encoders"),A=g("./decoders"),s=g("inherits");function l(n,a){this.name=n,this.body=a,this.decoders={},this.encoders={}}i.define=function(n,a){return new l(n,a)},l.prototype._createNamed=function(n){const a=this.name;function d(o){this._initNamed(o,a)}return s(d,n),d.prototype._initNamed=function(o,c){n.call(this,o,c)},new d(this)},l.prototype._getDecoder=function(n){return n=n||"der",this.decoders.hasOwnProperty(n)||(this.decoders[n]=this._createNamed(A[n])),this.decoders[n]},l.prototype.decode=function(n,a,d){return this._getDecoder(a).decode(n,d)},l.prototype._getEncoder=function(n){return n=n||"der",this.encoders.hasOwnProperty(n)||(this.encoders[n]=this._createNamed(e[n])),this.encoders[n]},l.prototype.encode=function(n,a,d){return this._getEncoder(a).encode(n,d)}},{"./decoders":179,"./encoders":182,inherits:440}],172:[function(g,C,i){const e=g("inherits"),A=g("../base/reporter").Reporter,s=g("safer-buffer").Buffer;function l(a,d){A.call(this,d),s.isBuffer(a)?(this.base=a,this.offset=0,this.length=a.length):this.error("Input not Buffer")}function n(a,d){if(Array.isArray(a))this.length=0,this.value=a.map(function(o){return n.isEncoderBuffer(o)||(o=new n(o,d)),this.length+=o.length,o},this);else if(typeof a=="number"){if(!(0<=a&&a<=255))return d.error("non-byte EncoderBuffer value");this.value=a,this.length=1}else if(typeof a=="string")this.value=a,this.length=s.byteLength(a);else{if(!s.isBuffer(a))return d.error("Unsupported type: "+typeof a);this.value=a,this.length=a.length}}e(l,A),i.DecoderBuffer=l,l.isDecoderBuffer=function(a){return a instanceof l?!0:typeof a=="object"&&s.isBuffer(a.base)&&a.constructor.name==="DecoderBuffer"&&typeof a.offset=="number"&&typeof a.length=="number"&&typeof a.save=="function"&&typeof a.restore=="function"&&typeof a.isEmpty=="function"&&typeof a.readUInt8=="function"&&typeof a.skip=="function"&&typeof a.raw=="function"},l.prototype.save=function(){return{offset:this.offset,reporter:A.prototype.save.call(this)}},l.prototype.restore=function(a){const d=new l(this.base);return d.offset=a.offset,d.length=this.offset,this.offset=a.offset,A.prototype.restore.call(this,a.reporter),d},l.prototype.isEmpty=function(){return this.offset===this.length},l.prototype.readUInt8=function(a){return this.offset+1<=this.length?this.base.readUInt8(this.offset++,!0):this.error(a||"DecoderBuffer overrun")},l.prototype.skip=function(a,d){if(!(this.offset+a<=this.length))return this.error(d||"DecoderBuffer overrun");const o=new l(this.base);return o._reporterState=this._reporterState,o.offset=this.offset,o.length=this.offset+a,this.offset+=a,o},l.prototype.raw=function(a){return this.base.slice(a?a.offset:this.offset,this.length)},i.EncoderBuffer=n,n.isEncoderBuffer=function(a){return a instanceof n?!0:typeof a=="object"&&a.constructor.name==="EncoderBuffer"&&typeof a.length=="number"&&typeof a.join=="function"},n.prototype.join=function(a,d){return a||(a=s.alloc(this.length)),d||(d=0),this.length===0||(Array.isArray(this.value)?this.value.forEach(function(o){o.join(a,d),d+=o.length}):(typeof this.value=="number"?a[d]=this.value:typeof this.value=="string"?a.write(this.value,d):s.isBuffer(this.value)&&this.value.copy(a,d),d+=this.length)),a}},{"../base/reporter":175,inherits:440,"safer-buffer":495}],173:[function(g,C,i){const e=i;e.Reporter=g("./reporter").Reporter,e.DecoderBuffer=g("./buffer").DecoderBuffer,e.EncoderBuffer=g("./buffer").EncoderBuffer,e.Node=g("./node")},{"./buffer":172,"./node":174,"./reporter":175}],174:[function(g,C,i){const e=g("../base/reporter").Reporter,A=g("../base/buffer").EncoderBuffer,s=g("../base/buffer").DecoderBuffer,l=g("minimalistic-assert"),n=["seq","seqof","set","setof","objid","bool","gentime","utctime","null_","enum","int","objDesc","bitstr","bmpstr","charstr","genstr","graphstr","ia5str","iso646str","numstr","octstr","printstr","t61str","unistr","utf8str","videostr"],a=["key","obj","use","optional","explicit","implicit","def","choice","any","contains"].concat(n);function d(c,r,h){const b={};this._baseState=b,b.name=h,b.enc=c,b.parent=r||null,b.children=null,b.tag=null,b.args=null,b.reverseArgs=null,b.choice=null,b.optional=!1,b.any=!1,b.obj=!1,b.use=null,b.useDecoder=null,b.key=null,b.default=null,b.explicit=null,b.implicit=null,b.contains=null,b.parent||(b.children=[],this._wrap())}C.exports=d;const o=["enc","parent","children","tag","args","reverseArgs","choice","optional","any","obj","use","alteredUse","key","default","explicit","implicit","contains"];d.prototype.clone=function(){const c=this._baseState,r={};o.forEach(function(b){r[b]=c[b]});const h=new this.constructor(r.parent);return h._baseState=r,h},d.prototype._wrap=function(){const c=this._baseState;a.forEach(function(r){this[r]=function(){const h=new this.constructor(this);return c.children.push(h),h[r].apply(h,arguments)}},this)},d.prototype._init=function(c){const r=this._baseState;l(r.parent===null),c.call(this),r.children=r.children.filter(function(h){return h._baseState.parent===this},this),l.equal(r.children.length,1,"Root node can have only one child")},d.prototype._useArgs=function(c){const r=this._baseState,h=c.filter(function(b){return b instanceof this.constructor},this);c=c.filter(function(b){return!(b instanceof this.constructor)},this),h.length!==0&&(l(r.children===null),r.children=h,h.forEach(function(b){b._baseState.parent=this},this)),c.length!==0&&(l(r.args===null),r.args=c,r.reverseArgs=c.map(function(b){if(typeof b!="object"||b.constructor!==Object)return b;const u={};return Object.keys(b).forEach(function(m){m==(0|m)&&(m|=0);const Z=b[m];u[Z]=m}),u}))},["_peekTag","_decodeTag","_use","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeInt","_decodeBool","_decodeList","_encodeComposite","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool"].forEach(function(c){d.prototype[c]=function(){const r=this._baseState;throw new Error(c+" not implemented for encoding: "+r.enc)}}),n.forEach(function(c){d.prototype[c]=function(){const r=this._baseState,h=Array.prototype.slice.call(arguments);return l(r.tag===null),r.tag=c,this._useArgs(h),this}}),d.prototype.use=function(c){l(c);const r=this._baseState;return l(r.use===null),r.use=c,this},d.prototype.optional=function(){return this._baseState.optional=!0,this},d.prototype.def=function(c){const r=this._baseState;return l(r.default===null),r.default=c,r.optional=!0,this},d.prototype.explicit=function(c){const r=this._baseState;return l(r.explicit===null&&r.implicit===null),r.explicit=c,this},d.prototype.implicit=function(c){const r=this._baseState;return l(r.explicit===null&&r.implicit===null),r.implicit=c,this},d.prototype.obj=function(){const c=this._baseState,r=Array.prototype.slice.call(arguments);return c.obj=!0,r.length!==0&&this._useArgs(r),this},d.prototype.key=function(c){const r=this._baseState;return l(r.key===null),r.key=c,this},d.prototype.any=function(){return this._baseState.any=!0,this},d.prototype.choice=function(c){const r=this._baseState;return l(r.choice===null),r.choice=c,this._useArgs(Object.keys(c).map(function(h){return c[h]})),this},d.prototype.contains=function(c){const r=this._baseState;return l(r.use===null),r.contains=c,this},d.prototype._decode=function(c,r){const h=this._baseState;if(h.parent===null)return c.wrapResult(h.children[0]._decode(c,r));let b,u=h.default,m=!0,Z=null;if(h.key!==null&&(Z=c.enterKey(h.key)),h.optional){let p=null;if(h.explicit!==null?p=h.explicit:h.implicit!==null?p=h.implicit:h.tag!==null&&(p=h.tag),p!==null||h.any){if(m=this._peekTag(c,p,h.any),c.isError(m))return m}else{const Y=c.save();try{h.choice===null?this._decodeGeneric(h.tag,c,r):this._decodeChoice(c,r),m=!0}catch{m=!1}c.restore(Y)}}if(h.obj&&m&&(b=c.enterObject()),m){if(h.explicit!==null){const Y=this._decodeTag(c,h.explicit);if(c.isError(Y))return Y;c=Y}const p=c.offset;if(h.use===null&&h.choice===null){let Y;h.any&&(Y=c.save());const R=this._decodeTag(c,h.implicit!==null?h.implicit:h.tag,h.any);if(c.isError(R))return R;h.any?u=c.raw(Y):c=R}if(r&&r.track&&h.tag!==null&&r.track(c.path(),p,c.length,"tagged"),r&&r.track&&h.tag!==null&&r.track(c.path(),c.offset,c.length,"content"),h.any||(u=h.choice===null?this._decodeGeneric(h.tag,c,r):this._decodeChoice(c,r)),c.isError(u))return u;if(h.any||h.choice!==null||h.children===null||h.children.forEach(function(Y){Y._decode(c,r)}),h.contains&&(h.tag==="octstr"||h.tag==="bitstr")){const Y=new s(u);u=this._getUse(h.contains,c._reporterState.obj)._decode(Y,r)}}return h.obj&&m&&(u=c.leaveObject(b)),h.key===null||u===null&&m!==!0?Z!==null&&c.exitKey(Z):c.leaveKey(Z,h.key,u),u},d.prototype._decodeGeneric=function(c,r,h){const b=this._baseState;return c==="seq"||c==="set"?null:c==="seqof"||c==="setof"?this._decodeList(r,c,b.args[0],h):/str$/.test(c)?this._decodeStr(r,c,h):c==="objid"&&b.args?this._decodeObjid(r,b.args[0],b.args[1],h):c==="objid"?this._decodeObjid(r,null,null,h):c==="gentime"||c==="utctime"?this._decodeTime(r,c,h):c==="null_"?this._decodeNull(r,h):c==="bool"?this._decodeBool(r,h):c==="objDesc"?this._decodeStr(r,c,h):c==="int"||c==="enum"?this._decodeInt(r,b.args&&b.args[0],h):b.use!==null?this._getUse(b.use,r._reporterState.obj)._decode(r,h):r.error("unknown tag: "+c)},d.prototype._getUse=function(c,r){const h=this._baseState;return h.useDecoder=this._use(c,r),l(h.useDecoder._baseState.parent===null),h.useDecoder=h.useDecoder._baseState.children[0],h.implicit!==h.useDecoder._baseState.implicit&&(h.useDecoder=h.useDecoder.clone(),h.useDecoder._baseState.implicit=h.implicit),h.useDecoder},d.prototype._decodeChoice=function(c,r){const h=this._baseState;let b=null,u=!1;return Object.keys(h.choice).some(function(m){const Z=c.save(),p=h.choice[m];try{const Y=p._decode(c,r);if(c.isError(Y))return!1;b={type:m,value:Y},u=!0}catch{return c.restore(Z),!1}return!0},this),u?b:c.error("Choice not matched")},d.prototype._createEncoderBuffer=function(c){return new A(c,this.reporter)},d.prototype._encode=function(c,r,h){const b=this._baseState;if(b.default!==null&&b.default===c)return;const u=this._encodeValue(c,r,h);return u===void 0||this._skipDefault(u,r,h)?void 0:u},d.prototype._encodeValue=function(c,r,h){const b=this._baseState;if(b.parent===null)return b.children[0]._encode(c,r||new e);let u=null;if(this.reporter=r,b.optional&&c===void 0){if(b.default===null)return;c=b.default}let m=null,Z=!1;if(b.any)u=this._createEncoderBuffer(c);else if(b.choice)u=this._encodeChoice(c,r);else if(b.contains)m=this._getUse(b.contains,h)._encode(c,r),Z=!0;else if(b.children)m=b.children.map(function(p){if(p._baseState.tag==="null_")return p._encode(null,r,c);if(p._baseState.key===null)return r.error("Child should have a key");const Y=r.enterKey(p._baseState.key);if(typeof c!="object")return r.error("Child expected, but input is not object");const R=p._encode(c[p._baseState.key],r,c);return r.leaveKey(Y),R},this).filter(function(p){return p}),m=this._createEncoderBuffer(m);else if(b.tag==="seqof"||b.tag==="setof"){if(!b.args||b.args.length!==1)return r.error("Too many args for : "+b.tag);if(!Array.isArray(c))return r.error("seqof/setof, but data is not Array");const p=this.clone();p._baseState.implicit=null,m=this._createEncoderBuffer(c.map(function(Y){const R=this._baseState;return this._getUse(R.args[0],c)._encode(Y,r)},p))}else b.use!==null?u=this._getUse(b.use,h)._encode(c,r):(m=this._encodePrimitive(b.tag,c),Z=!0);if(!b.any&&b.choice===null){const p=b.implicit!==null?b.implicit:b.tag,Y=b.implicit===null?"universal":"context";p===null?b.use===null&&r.error("Tag could be omitted only for .use()"):b.use===null&&(u=this._encodeComposite(p,Z,Y,m))}return b.explicit!==null&&(u=this._encodeComposite(b.explicit,!1,"context",u)),u},d.prototype._encodeChoice=function(c,r){const h=this._baseState,b=h.choice[c.type];return b||l(!1,c.type+" not found in "+JSON.stringify(Object.keys(h.choice))),b._encode(c.value,r)},d.prototype._encodePrimitive=function(c,r){const h=this._baseState;if(/str$/.test(c))return this._encodeStr(r,c);if(c==="objid"&&h.args)return this._encodeObjid(r,h.reverseArgs[0],h.args[1]);if(c==="objid")return this._encodeObjid(r,null,null);if(c==="gentime"||c==="utctime")return this._encodeTime(r,c);if(c==="null_")return this._encodeNull();if(c==="int"||c==="enum")return this._encodeInt(r,h.args&&h.reverseArgs[0]);if(c==="bool")return this._encodeBool(r);if(c==="objDesc")return this._encodeStr(r,c);throw new Error("Unsupported tag: "+c)},d.prototype._isNumstr=function(c){return/^[0-9 ]*$/.test(c)},d.prototype._isPrintstr=function(c){return/^[A-Za-z0-9 '()+,-./:=?]*$/.test(c)}},{"../base/buffer":172,"../base/reporter":175,"minimalistic-assert":453}],175:[function(g,C,i){const e=g("inherits");function A(l){this._reporterState={obj:null,path:[],options:l||{},errors:[]}}function s(l,n){this.path=l,this.rethrow(n)}i.Reporter=A,A.prototype.isError=function(l){return l instanceof s},A.prototype.save=function(){const l=this._reporterState;return{obj:l.obj,pathLen:l.path.length}},A.prototype.restore=function(l){const n=this._reporterState;n.obj=l.obj,n.path=n.path.slice(0,l.pathLen)},A.prototype.enterKey=function(l){return this._reporterState.path.push(l)},A.prototype.exitKey=function(l){const n=this._reporterState;n.path=n.path.slice(0,l-1)},A.prototype.leaveKey=function(l,n,a){const d=this._reporterState;this.exitKey(l),d.obj!==null&&(d.obj[n]=a)},A.prototype.path=function(){return this._reporterState.path.join("/")},A.prototype.enterObject=function(){const l=this._reporterState,n=l.obj;return l.obj={},n},A.prototype.leaveObject=function(l){const n=this._reporterState,a=n.obj;return n.obj=l,a},A.prototype.error=function(l){let n;const a=this._reporterState,d=l instanceof s;if(n=d?l:new s(a.path.map(function(o){return"["+JSON.stringify(o)+"]"}).join(""),l.message||l,l.stack),!a.options.partial)throw n;return d||a.errors.push(n),n},A.prototype.wrapResult=function(l){const n=this._reporterState;return n.options.partial?{result:this.isError(l)?null:l,errors:n.errors}:l},e(s,Error),s.prototype.rethrow=function(l){if(this.message=l+" at: "+(this.path||"(shallow)"),Error.captureStackTrace&&Error.captureStackTrace(this,s),!this.stack)try{throw new Error(this.message)}catch(n){this.stack=n.stack}return this}},{inherits:440}],176:[function(g,C,i){function e(A){const s={};return Object.keys(A).forEach(function(l){(0|l)==l&&(l|=0);const n=A[l];s[n]=l}),s}i.tagClass={0:"universal",1:"application",2:"context",3:"private"},i.tagClassByName=e(i.tagClass),i.tag={0:"end",1:"bool",2:"int",3:"bitstr",4:"octstr",5:"null_",6:"objid",7:"objDesc",8:"external",9:"real",10:"enum",11:"embed",12:"utf8str",13:"relativeOid",16:"seq",17:"set",18:"numstr",19:"printstr",20:"t61str",21:"videostr",22:"ia5str",23:"utctime",24:"gentime",25:"graphstr",26:"iso646str",27:"genstr",28:"unistr",29:"charstr",30:"bmpstr"},i.tagByName=e(i.tag)},{}],177:[function(g,C,i){const e=i;e._reverse=function(A){const s={};return Object.keys(A).forEach(function(l){(0|l)==l&&(l|=0);const n=A[l];s[n]=l}),s},e.der=g("./der")},{"./der":176}],178:[function(g,C,i){const e=g("inherits"),A=g("bn.js"),s=g("../base/buffer").DecoderBuffer,l=g("../base/node"),n=g("../constants/der");function a(r){this.enc="der",this.name=r.name,this.entity=r,this.tree=new d,this.tree._init(r.body)}function d(r){l.call(this,"der",r)}function o(r,h){let b=r.readUInt8(h);if(r.isError(b))return b;const u=n.tagClass[b>>6],m=(32&b)==0;if((31&b)==31){let Z=b;for(b=0;(128&Z)==128;){if(Z=r.readUInt8(h),r.isError(Z))return Z;b<<=7,b|=127&Z}}else b&=31;return{cls:u,primitive:m,tag:b,tagStr:n.tag[b]}}function c(r,h,b){let u=r.readUInt8(b);if(r.isError(u))return u;if(!h&&u===128)return null;if((128&u)==0)return u;const m=127&u;if(m>4)return r.error("length octect is too long");u=0;for(let Z=0;Z<m;Z++){u<<=8;const p=r.readUInt8(b);if(r.isError(p))return p;u|=p}return u}C.exports=a,a.prototype.decode=function(r,h){return s.isDecoderBuffer(r)||(r=new s(r,h)),this.tree._decode(r,h)},e(d,l),d.prototype._peekTag=function(r,h,b){if(r.isEmpty())return!1;const u=r.save(),m=o(r,'Failed to peek tag: "'+h+'"');return r.isError(m)?m:(r.restore(u),m.tag===h||m.tagStr===h||m.tagStr+"of"===h||b)},d.prototype._decodeTag=function(r,h,b){const u=o(r,'Failed to decode tag of "'+h+'"');if(r.isError(u))return u;let m=c(r,u.primitive,'Failed to get length of "'+h+'"');if(r.isError(m))return m;if(!b&&u.tag!==h&&u.tagStr!==h&&u.tagStr+"of"!==h)return r.error('Failed to match tag: "'+h+'"');if(u.primitive||m!==null)return r.skip(m,'Failed to match body of: "'+h+'"');const Z=r.save(),p=this._skipUntilEnd(r,'Failed to skip indefinite length body: "'+this.tag+'"');return r.isError(p)?p:(m=r.offset-Z.offset,r.restore(Z),r.skip(m,'Failed to match body of: "'+h+'"'))},d.prototype._skipUntilEnd=function(r,h){for(;;){const b=o(r,h);if(r.isError(b))return b;const u=c(r,b.primitive,h);if(r.isError(u))return u;let m;if(m=b.primitive||u!==null?r.skip(u):this._skipUntilEnd(r,h),r.isError(m))return m;if(b.tagStr==="end")break}},d.prototype._decodeList=function(r,h,b,u){const m=[];for(;!r.isEmpty();){const Z=this._peekTag(r,"end");if(r.isError(Z))return Z;const p=b.decode(r,"der",u);if(r.isError(p)&&Z)break;m.push(p)}return m},d.prototype._decodeStr=function(r,h){if(h==="bitstr"){const b=r.readUInt8();return r.isError(b)?b:{unused:b,data:r.raw()}}if(h==="bmpstr"){const b=r.raw();if(b.length%2==1)return r.error("Decoding of string type: bmpstr length mismatch");let u="";for(let m=0;m<b.length/2;m++)u+=String.fromCharCode(b.readUInt16BE(2*m));return u}if(h==="numstr"){const b=r.raw().toString("ascii");return this._isNumstr(b)?b:r.error("Decoding of string type: numstr unsupported characters")}if(h==="octstr"||h==="objDesc")return r.raw();if(h==="printstr"){const b=r.raw().toString("ascii");return this._isPrintstr(b)?b:r.error("Decoding of string type: printstr unsupported characters")}return/str$/.test(h)?r.raw().toString():r.error("Decoding of string type: "+h+" unsupported")},d.prototype._decodeObjid=function(r,h,b){let u;const m=[];let Z=0,p=0;for(;!r.isEmpty();)p=r.readUInt8(),Z<<=7,Z|=127&p,(128&p)==0&&(m.push(Z),Z=0);128&p&&m.push(Z);const Y=m[0]/40|0,R=m[0]%40;if(u=b?m:[Y,R].concat(m.slice(1)),h){let X=h[u.join(" ")];X===void 0&&(X=h[u.join(".")]),X!==void 0&&(u=X)}return u},d.prototype._decodeTime=function(r,h){const b=r.raw().toString();let u,m,Z,p,Y,R;if(h==="gentime")u=0|b.slice(0,4),m=0|b.slice(4,6),Z=0|b.slice(6,8),p=0|b.slice(8,10),Y=0|b.slice(10,12),R=0|b.slice(12,14);else{if(h!=="utctime")return r.error("Decoding "+h+" time is not supported yet");u=0|b.slice(0,2),m=0|b.slice(2,4),Z=0|b.slice(4,6),p=0|b.slice(6,8),Y=0|b.slice(8,10),R=0|b.slice(10,12),u=u<70?2e3+u:1900+u}return Date.UTC(u,m-1,Z,p,Y,R,0)},d.prototype._decodeNull=function(){return null},d.prototype._decodeBool=function(r){const h=r.readUInt8();return r.isError(h)?h:h!==0},d.prototype._decodeInt=function(r,h){const b=r.raw();let u=new A(b);return h&&(u=h[u.toString(10)]||u),u},d.prototype._use=function(r,h){return typeof r=="function"&&(r=r(h)),r._getDecoder("der").tree}},{"../base/buffer":172,"../base/node":174,"../constants/der":176,"bn.js":184,inherits:440}],179:[function(g,C,i){const e=i;e.der=g("./der"),e.pem=g("./pem")},{"./der":178,"./pem":180}],180:[function(g,C,i){const e=g("inherits"),A=g("safer-buffer").Buffer,s=g("./der");function l(n){s.call(this,n),this.enc="pem"}e(l,s),C.exports=l,l.prototype.decode=function(n,a){const d=n.toString().split(/[\r\n]+/g),o=a.label.toUpperCase(),c=/^-----(BEGIN|END) ([^-]+)-----$/;let r=-1,h=-1;for(let m=0;m<d.length;m++){const Z=d[m].match(c);if(Z!==null&&Z[2]===o){if(r!==-1){if(Z[1]!=="END")break;h=m;break}if(Z[1]!=="BEGIN")break;r=m}}if(r===-1||h===-1)throw new Error("PEM section not found for: "+o);const b=d.slice(r+1,h).join("");b.replace(/[^a-z0-9+/=]+/gi,"");const u=A.from(b,"base64");return s.prototype.decode.call(this,u,a)}},{"./der":178,inherits:440,"safer-buffer":495}],181:[function(g,C,i){const e=g("inherits"),A=g("safer-buffer").Buffer,s=g("../base/node"),l=g("../constants/der");function n(o){this.enc="der",this.name=o.name,this.entity=o,this.tree=new a,this.tree._init(o.body)}function a(o){s.call(this,"der",o)}function d(o){return o<10?"0"+o:o}C.exports=n,n.prototype.encode=function(o,c){return this.tree._encode(o,c).join()},e(a,s),a.prototype._encodeComposite=function(o,c,r,h){const b=function(Z,p,Y,R){let X;if(Z==="seqof"?Z="seq":Z==="setof"&&(Z="set"),l.tagByName.hasOwnProperty(Z))X=l.tagByName[Z];else{if(typeof Z!="number"||(0|Z)!==Z)return R.error("Unknown tag: "+Z);X=Z}return X>=31?R.error("Multi-octet tag encoding unsupported"):(p||(X|=32),X|=l.tagClassByName[Y||"universal"]<<6,X)}(o,c,r,this.reporter);if(h.length<128){const Z=A.alloc(2);return Z[0]=b,Z[1]=h.length,this._createEncoderBuffer([Z,h])}let u=1;for(let Z=h.length;Z>=256;Z>>=8)u++;const m=A.alloc(2+u);m[0]=b,m[1]=128|u;for(let Z=1+u,p=h.length;p>0;Z--,p>>=8)m[Z]=255&p;return this._createEncoderBuffer([m,h])},a.prototype._encodeStr=function(o,c){if(c==="bitstr")return this._createEncoderBuffer([0|o.unused,o.data]);if(c==="bmpstr"){const r=A.alloc(2*o.length);for(let h=0;h<o.length;h++)r.writeUInt16BE(o.charCodeAt(h),2*h);return this._createEncoderBuffer(r)}return c==="numstr"?this._isNumstr(o)?this._createEncoderBuffer(o):this.reporter.error("Encoding of string type: numstr supports only digits and space"):c==="printstr"?this._isPrintstr(o)?this._createEncoderBuffer(o):this.reporter.error("Encoding of string type: printstr supports only latin upper and lower case letters, digits, space, apostrophe, left and rigth parenthesis, plus sign, comma, hyphen, dot, slash, colon, equal sign, question mark"):/str$/.test(c)||c==="objDesc"?this._createEncoderBuffer(o):this.reporter.error("Encoding of string type: "+c+" unsupported")},a.prototype._encodeObjid=function(o,c,r){if(typeof o=="string"){if(!c)return this.reporter.error("string objid given, but no values map found");if(!c.hasOwnProperty(o))return this.reporter.error("objid not found in values map");o=c[o].split(/[\s.]+/g);for(let m=0;m<o.length;m++)o[m]|=0}else if(Array.isArray(o)){o=o.slice();for(let m=0;m<o.length;m++)o[m]|=0}if(!Array.isArray(o))return this.reporter.error("objid() should be either array or string, got: "+JSON.stringify(o));if(!r){if(o[1]>=40)return this.reporter.error("Second objid identifier OOB");o.splice(0,2,40*o[0]+o[1])}let h=0;for(let m=0;m<o.length;m++){let Z=o[m];for(h++;Z>=128;Z>>=7)h++}const b=A.alloc(h);let u=b.length-1;for(let m=o.length-1;m>=0;m--){let Z=o[m];for(b[u--]=127&Z;(Z>>=7)>0;)b[u--]=128|127&Z}return this._createEncoderBuffer(b)},a.prototype._encodeTime=function(o,c){let r;const h=new Date(o);return c==="gentime"?r=[d(h.getUTCFullYear()),d(h.getUTCMonth()+1),d(h.getUTCDate()),d(h.getUTCHours()),d(h.getUTCMinutes()),d(h.getUTCSeconds()),"Z"].join(""):c==="utctime"?r=[d(h.getUTCFullYear()%100),d(h.getUTCMonth()+1),d(h.getUTCDate()),d(h.getUTCHours()),d(h.getUTCMinutes()),d(h.getUTCSeconds()),"Z"].join(""):this.reporter.error("Encoding "+c+" time is not supported yet"),this._encodeStr(r,"octstr")},a.prototype._encodeNull=function(){return this._createEncoderBuffer("")},a.prototype._encodeInt=function(o,c){if(typeof o=="string"){if(!c)return this.reporter.error("String int or enum given, but no values map");if(!c.hasOwnProperty(o))return this.reporter.error("Values map doesn't contain: "+JSON.stringify(o));o=c[o]}if(typeof o!="number"&&!A.isBuffer(o)){const b=o.toArray();!o.sign&&128&b[0]&&b.unshift(0),o=A.from(b)}if(A.isBuffer(o)){let b=o.length;o.length===0&&b++;const u=A.alloc(b);return o.copy(u),o.length===0&&(u[0]=0),this._createEncoderBuffer(u)}if(o<128)return this._createEncoderBuffer(o);if(o<256)return this._createEncoderBuffer([0,o]);let r=1;for(let b=o;b>=256;b>>=8)r++;const h=new Array(r);for(let b=h.length-1;b>=0;b--)h[b]=255&o,o>>=8;return 128&h[0]&&h.unshift(0),this._createEncoderBuffer(A.from(h))},a.prototype._encodeBool=function(o){return this._createEncoderBuffer(o?255:0)},a.prototype._use=function(o,c){return typeof o=="function"&&(o=o(c)),o._getEncoder("der").tree},a.prototype._skipDefault=function(o,c,r){const h=this._baseState;let b;if(h.default===null)return!1;const u=o.join();if(h.defaultBuffer===void 0&&(h.defaultBuffer=this._encodeValue(h.default,c,r).join()),u.length!==h.defaultBuffer.length)return!1;for(b=0;b<u.length;b++)if(u[b]!==h.defaultBuffer[b])return!1;return!0}},{"../base/node":174,"../constants/der":176,inherits:440,"safer-buffer":495}],182:[function(g,C,i){const e=i;e.der=g("./der"),e.pem=g("./pem")},{"./der":181,"./pem":183}],183:[function(g,C,i){const e=g("inherits"),A=g("./der");function s(l){A.call(this,l),this.enc="pem"}e(s,A),C.exports=s,s.prototype.encode=function(l,n){const a=A.prototype.encode.call(this,l).toString("base64"),d=["-----BEGIN "+n.label+"-----"];for(let o=0;o<a.length;o+=64)d.push(a.slice(o,o+64));return d.push("-----END "+n.label+"-----"),d.join(`
- `)}},{"./der":181,inherits:440}],184:[function(g,C,i){(function(e,A){function s(V,N){if(!V)throw new Error(N||"Assertion failed")}function l(V,N){V.super_=N;var B=function(){};B.prototype=N.prototype,V.prototype=new B,V.prototype.constructor=V}function n(V,N,B){if(n.isBN(V))return V;this.negative=0,this.words=null,this.length=0,this.red=null,V!==null&&(N!=="le"&&N!=="be"||(B=N,N=10),this._init(V||0,N||10,B||"be"))}var a;typeof e=="object"?e.exports=n:(void 0).BN=n,n.BN=n,n.wordSize=26;try{a=typeof window<"u"&&window.Buffer!==void 0?window.Buffer:g("buffer").Buffer}catch{}function d(V,N){var B=V.charCodeAt(N);return B>=65&&B<=70?B-55:B>=97&&B<=102?B-87:B-48&15}function o(V,N,B){var G=d(V,B);return B-1>=N&&(G|=d(V,B-1)<<4),G}function c(V,N,B,G){for(var w=0,W=Math.min(V.length,B),y=N;y<W;y++){var f=V.charCodeAt(y)-48;w*=G,w+=f>=49?f-49+10:f>=17?f-17+10:f}return w}n.isBN=function(V){return V instanceof n||V!==null&&typeof V=="object"&&V.constructor.wordSize===n.wordSize&&Array.isArray(V.words)},n.max=function(V,N){return V.cmp(N)>0?V:N},n.min=function(V,N){return V.cmp(N)<0?V:N},n.prototype._init=function(V,N,B){if(typeof V=="number")return this._initNumber(V,N,B);if(typeof V=="object")return this._initArray(V,N,B);N==="hex"&&(N=16),s(N===(0|N)&&N>=2&&N<=36);var G=0;(V=V.toString().replace(/\s+/g,""))[0]==="-"&&(G++,this.negative=1),G<V.length&&(N===16?this._parseHex(V,G,B):(this._parseBase(V,N,G),B==="le"&&this._initArray(this.toArray(),N,B)))},n.prototype._initNumber=function(V,N,B){V<0&&(this.negative=1,V=-V),V<67108864?(this.words=[67108863&V],this.length=1):V<4503599627370496?(this.words=[67108863&V,V/67108864&67108863],this.length=2):(s(V<9007199254740992),this.words=[67108863&V,V/67108864&67108863,1],this.length=3),B==="le"&&this._initArray(this.toArray(),N,B)},n.prototype._initArray=function(V,N,B){if(s(typeof V.length=="number"),V.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(V.length/3),this.words=new Array(this.length);for(var G=0;G<this.length;G++)this.words[G]=0;var w,W,y=0;if(B==="be")for(G=V.length-1,w=0;G>=0;G-=3)W=V[G]|V[G-1]<<8|V[G-2]<<16,this.words[w]|=W<<y&67108863,this.words[w+1]=W>>>26-y&67108863,(y+=24)>=26&&(y-=26,w++);else if(B==="le")for(G=0,w=0;G<V.length;G+=3)W=V[G]|V[G+1]<<8|V[G+2]<<16,this.words[w]|=W<<y&67108863,this.words[w+1]=W>>>26-y&67108863,(y+=24)>=26&&(y-=26,w++);return this.strip()},n.prototype._parseHex=function(V,N,B){this.length=Math.ceil((V.length-N)/6),this.words=new Array(this.length);for(var G=0;G<this.length;G++)this.words[G]=0;var w,W=0,y=0;if(B==="be")for(G=V.length-1;G>=N;G-=2)w=o(V,N,G)<<W,this.words[y]|=67108863&w,W>=18?(W-=18,y+=1,this.words[y]|=w>>>26):W+=8;else for(G=(V.length-N)%2==0?N+1:N;G<V.length;G+=2)w=o(V,N,G)<<W,this.words[y]|=67108863&w,W>=18?(W-=18,y+=1,this.words[y]|=w>>>26):W+=8;this.strip()},n.prototype._parseBase=function(V,N,B){this.words=[0],this.length=1;for(var G=0,w=1;w<=67108863;w*=N)G++;G--,w=w/N|0;for(var W=V.length-B,y=W%G,f=Math.min(W,W-y)+B,D=0,F=B;F<f;F+=G)D=c(V,F,F+G,N),this.imuln(w),this.words[0]+D<67108864?this.words[0]+=D:this._iaddn(D);if(y!==0){var T=1;for(D=c(V,F,V.length,N),F=0;F<y;F++)T*=N;this.imuln(T),this.words[0]+D<67108864?this.words[0]+=D:this._iaddn(D)}this.strip()},n.prototype.copy=function(V){V.words=new Array(this.length);for(var N=0;N<this.length;N++)V.words[N]=this.words[N];V.length=this.length,V.negative=this.negative,V.red=this.red},n.prototype.clone=function(){var V=new n(null);return this.copy(V),V},n.prototype._expand=function(V){for(;this.length<V;)this.words[this.length++]=0;return this},n.prototype.strip=function(){for(;this.length>1&&this.words[this.length-1]===0;)this.length--;return this._normSign()},n.prototype._normSign=function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},n.prototype.inspect=function(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"};var r=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],h=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],b=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function u(V,N,B){B.negative=N.negative^V.negative;var G=V.length+N.length|0;B.length=G,G=G-1|0;var w=0|V.words[0],W=0|N.words[0],y=w*W,f=67108863&y,D=y/67108864|0;B.words[0]=f;for(var F=1;F<G;F++){for(var T=D>>>26,Q=67108863&D,P=Math.min(F,N.length-1),L=Math.max(0,F-V.length+1);L<=P;L++){var E=F-L|0;T+=(y=(w=0|V.words[E])*(W=0|N.words[L])+Q)/67108864|0,Q=67108863&y}B.words[F]=0|Q,D=0|T}return D!==0?B.words[F]=0|D:B.length--,B.strip()}n.prototype.toString=function(V,N){var B;if(N=0|N||1,(V=V||10)===16||V==="hex"){B="";for(var G=0,w=0,W=0;W<this.length;W++){var y=this.words[W],f=(16777215&(y<<G|w)).toString(16);B=(w=y>>>24-G&16777215)!==0||W!==this.length-1?r[6-f.length]+f+B:f+B,(G+=2)>=26&&(G-=26,W--)}for(w!==0&&(B=w.toString(16)+B);B.length%N!=0;)B="0"+B;return this.negative!==0&&(B="-"+B),B}if(V===(0|V)&&V>=2&&V<=36){var D=h[V],F=b[V];B="";var T=this.clone();for(T.negative=0;!T.isZero();){var Q=T.modn(F).toString(V);B=(T=T.idivn(F)).isZero()?Q+B:r[D-Q.length]+Q+B}for(this.isZero()&&(B="0"+B);B.length%N!=0;)B="0"+B;return this.negative!==0&&(B="-"+B),B}s(!1,"Base should be between 2 and 36")},n.prototype.toNumber=function(){var V=this.words[0];return this.length===2?V+=67108864*this.words[1]:this.length===3&&this.words[2]===1?V+=4503599627370496+67108864*this.words[1]:this.length>2&&s(!1,"Number can only safely store up to 53 bits"),this.negative!==0?-V:V},n.prototype.toJSON=function(){return this.toString(16)},n.prototype.toBuffer=function(V,N){return s(a!==void 0),this.toArrayLike(a,V,N)},n.prototype.toArray=function(V,N){return this.toArrayLike(Array,V,N)},n.prototype.toArrayLike=function(V,N,B){var G=this.byteLength(),w=B||Math.max(1,G);s(G<=w,"byte array longer than desired length"),s(w>0,"Requested array length <= 0"),this.strip();var W,y,f=N==="le",D=new V(w),F=this.clone();if(f){for(y=0;!F.isZero();y++)W=F.andln(255),F.iushrn(8),D[y]=W;for(;y<w;y++)D[y]=0}else{for(y=0;y<w-G;y++)D[y]=0;for(y=0;!F.isZero();y++)W=F.andln(255),F.iushrn(8),D[w-y-1]=W}return D},Math.clz32?n.prototype._countBits=function(V){return 32-Math.clz32(V)}:n.prototype._countBits=function(V){var N=V,B=0;return N>=4096&&(B+=13,N>>>=13),N>=64&&(B+=7,N>>>=7),N>=8&&(B+=4,N>>>=4),N>=2&&(B+=2,N>>>=2),B+N},n.prototype._zeroBits=function(V){if(V===0)return 26;var N=V,B=0;return(8191&N)==0&&(B+=13,N>>>=13),(127&N)==0&&(B+=7,N>>>=7),(15&N)==0&&(B+=4,N>>>=4),(3&N)==0&&(B+=2,N>>>=2),(1&N)==0&&B++,B},n.prototype.bitLength=function(){var V=this.words[this.length-1],N=this._countBits(V);return 26*(this.length-1)+N},n.prototype.zeroBits=function(){if(this.isZero())return 0;for(var V=0,N=0;N<this.length;N++){var B=this._zeroBits(this.words[N]);if(V+=B,B!==26)break}return V},n.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},n.prototype.toTwos=function(V){return this.negative!==0?this.abs().inotn(V).iaddn(1):this.clone()},n.prototype.fromTwos=function(V){return this.testn(V-1)?this.notn(V).iaddn(1).ineg():this.clone()},n.prototype.isNeg=function(){return this.negative!==0},n.prototype.neg=function(){return this.clone().ineg()},n.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},n.prototype.iuor=function(V){for(;this.length<V.length;)this.words[this.length++]=0;for(var N=0;N<V.length;N++)this.words[N]=this.words[N]|V.words[N];return this.strip()},n.prototype.ior=function(V){return s((this.negative|V.negative)==0),this.iuor(V)},n.prototype.or=function(V){return this.length>V.length?this.clone().ior(V):V.clone().ior(this)},n.prototype.uor=function(V){return this.length>V.length?this.clone().iuor(V):V.clone().iuor(this)},n.prototype.iuand=function(V){var N;N=this.length>V.length?V:this;for(var B=0;B<N.length;B++)this.words[B]=this.words[B]&V.words[B];return this.length=N.length,this.strip()},n.prototype.iand=function(V){return s((this.negative|V.negative)==0),this.iuand(V)},n.prototype.and=function(V){return this.length>V.length?this.clone().iand(V):V.clone().iand(this)},n.prototype.uand=function(V){return this.length>V.length?this.clone().iuand(V):V.clone().iuand(this)},n.prototype.iuxor=function(V){var N,B;this.length>V.length?(N=this,B=V):(N=V,B=this);for(var G=0;G<B.length;G++)this.words[G]=N.words[G]^B.words[G];if(this!==N)for(;G<N.length;G++)this.words[G]=N.words[G];return this.length=N.length,this.strip()},n.prototype.ixor=function(V){return s((this.negative|V.negative)==0),this.iuxor(V)},n.prototype.xor=function(V){return this.length>V.length?this.clone().ixor(V):V.clone().ixor(this)},n.prototype.uxor=function(V){return this.length>V.length?this.clone().iuxor(V):V.clone().iuxor(this)},n.prototype.inotn=function(V){s(typeof V=="number"&&V>=0);var N=0|Math.ceil(V/26),B=V%26;this._expand(N),B>0&&N--;for(var G=0;G<N;G++)this.words[G]=67108863&~this.words[G];return B>0&&(this.words[G]=~this.words[G]&67108863>>26-B),this.strip()},n.prototype.notn=function(V){return this.clone().inotn(V)},n.prototype.setn=function(V,N){s(typeof V=="number"&&V>=0);var B=V/26|0,G=V%26;return this._expand(B+1),this.words[B]=N?this.words[B]|1<<G:this.words[B]&~(1<<G),this.strip()},n.prototype.iadd=function(V){var N,B,G;if(this.negative!==0&&V.negative===0)return this.negative=0,N=this.isub(V),this.negative^=1,this._normSign();if(this.negative===0&&V.negative!==0)return V.negative=0,N=this.isub(V),V.negative=1,N._normSign();this.length>V.length?(B=this,G=V):(B=V,G=this);for(var w=0,W=0;W<G.length;W++)N=(0|B.words[W])+(0|G.words[W])+w,this.words[W]=67108863&N,w=N>>>26;for(;w!==0&&W<B.length;W++)N=(0|B.words[W])+w,this.words[W]=67108863&N,w=N>>>26;if(this.length=B.length,w!==0)this.words[this.length]=w,this.length++;else if(B!==this)for(;W<B.length;W++)this.words[W]=B.words[W];return this},n.prototype.add=function(V){var N;return V.negative!==0&&this.negative===0?(V.negative=0,N=this.sub(V),V.negative^=1,N):V.negative===0&&this.negative!==0?(this.negative=0,N=V.sub(this),this.negative=1,N):this.length>V.length?this.clone().iadd(V):V.clone().iadd(this)},n.prototype.isub=function(V){if(V.negative!==0){V.negative=0;var N=this.iadd(V);return V.negative=1,N._normSign()}if(this.negative!==0)return this.negative=0,this.iadd(V),this.negative=1,this._normSign();var B,G,w=this.cmp(V);if(w===0)return this.negative=0,this.length=1,this.words[0]=0,this;w>0?(B=this,G=V):(B=V,G=this);for(var W=0,y=0;y<G.length;y++)W=(N=(0|B.words[y])-(0|G.words[y])+W)>>26,this.words[y]=67108863&N;for(;W!==0&&y<B.length;y++)W=(N=(0|B.words[y])+W)>>26,this.words[y]=67108863&N;if(W===0&&y<B.length&&B!==this)for(;y<B.length;y++)this.words[y]=B.words[y];return this.length=Math.max(this.length,y),B!==this&&(this.negative=1),this.strip()},n.prototype.sub=function(V){return this.clone().isub(V)};var m=function(V,N,B){var G,w,W,y=V.words,f=N.words,D=B.words,F=0,T=0|y[0],Q=8191&T,P=T>>>13,L=0|y[1],E=8191&L,J=L>>>13,k=0|y[2],j=8191&k,q=k>>>13,tg=0|y[3],Cg=8191&tg,x=tg>>>13,sg=0|y[4],Ag=8191&sg,O=sg>>>13,_=0|y[5],Ig=8191&_,ng=_>>>13,ag=0|y[6],lg=8191&ag,cg=ag>>>13,dg=0|y[7],hg=8191&dg,rg=dg>>>13,Wg=0|y[8],Gg=8191&Wg,Sg=Wg>>>13,Kg=0|y[9],kg=8191&Kg,yg=Kg>>>13,Vg=0|f[0],pg=8191&Vg,Hg=Vg>>>13,Jg=0|f[1],zg=8191&Jg,aI=Jg>>>13,BI=0|f[2],Ug=8191&BI,lI=BI>>>13,oI=0|f[3],Eg=8191&oI,LI=oI>>>13,fI=0|f[4],tI=8191&fI,WI=fI>>>13,QI=0|f[5],nI=8191&QI,kI=QI>>>13,Bg=0|f[6],hI=8191&Bg,bg=Bg>>>13,ug=0|f[7],fg=8191&ug,Tg=ug>>>13,cI=0|f[8],jg=8191&cI,mI=cI>>>13,sI=0|f[9],gI=8191&sI,pI=sI>>>13;B.negative=V.negative^N.negative,B.length=19;var bI=(F+(G=Math.imul(Q,pg))|0)+((8191&(w=(w=Math.imul(Q,Hg))+Math.imul(P,pg)|0))<<13)|0;F=((W=Math.imul(P,Hg))+(w>>>13)|0)+(bI>>>26)|0,bI&=67108863,G=Math.imul(E,pg),w=(w=Math.imul(E,Hg))+Math.imul(J,pg)|0,W=Math.imul(J,Hg);var yI=(F+(G=G+Math.imul(Q,zg)|0)|0)+((8191&(w=(w=w+Math.imul(Q,aI)|0)+Math.imul(P,zg)|0))<<13)|0;F=((W=W+Math.imul(P,aI)|0)+(w>>>13)|0)+(yI>>>26)|0,yI&=67108863,G=Math.imul(j,pg),w=(w=Math.imul(j,Hg))+Math.imul(q,pg)|0,W=Math.imul(q,Hg),G=G+Math.imul(E,zg)|0,w=(w=w+Math.imul(E,aI)|0)+Math.imul(J,zg)|0,W=W+Math.imul(J,aI)|0;var wC=(F+(G=G+Math.imul(Q,Ug)|0)|0)+((8191&(w=(w=w+Math.imul(Q,lI)|0)+Math.imul(P,Ug)|0))<<13)|0;F=((W=W+Math.imul(P,lI)|0)+(w>>>13)|0)+(wC>>>26)|0,wC&=67108863,G=Math.imul(Cg,pg),w=(w=Math.imul(Cg,Hg))+Math.imul(x,pg)|0,W=Math.imul(x,Hg),G=G+Math.imul(j,zg)|0,w=(w=w+Math.imul(j,aI)|0)+Math.imul(q,zg)|0,W=W+Math.imul(q,aI)|0,G=G+Math.imul(E,Ug)|0,w=(w=w+Math.imul(E,lI)|0)+Math.imul(J,Ug)|0,W=W+Math.imul(J,lI)|0;var _I=(F+(G=G+Math.imul(Q,Eg)|0)|0)+((8191&(w=(w=w+Math.imul(Q,LI)|0)+Math.imul(P,Eg)|0))<<13)|0;F=((W=W+Math.imul(P,LI)|0)+(w>>>13)|0)+(_I>>>26)|0,_I&=67108863,G=Math.imul(Ag,pg),w=(w=Math.imul(Ag,Hg))+Math.imul(O,pg)|0,W=Math.imul(O,Hg),G=G+Math.imul(Cg,zg)|0,w=(w=w+Math.imul(Cg,aI)|0)+Math.imul(x,zg)|0,W=W+Math.imul(x,aI)|0,G=G+Math.imul(j,Ug)|0,w=(w=w+Math.imul(j,lI)|0)+Math.imul(q,Ug)|0,W=W+Math.imul(q,lI)|0,G=G+Math.imul(E,Eg)|0,w=(w=w+Math.imul(E,LI)|0)+Math.imul(J,Eg)|0,W=W+Math.imul(J,LI)|0;var _C=(F+(G=G+Math.imul(Q,tI)|0)|0)+((8191&(w=(w=w+Math.imul(Q,WI)|0)+Math.imul(P,tI)|0))<<13)|0;F=((W=W+Math.imul(P,WI)|0)+(w>>>13)|0)+(_C>>>26)|0,_C&=67108863,G=Math.imul(Ig,pg),w=(w=Math.imul(Ig,Hg))+Math.imul(ng,pg)|0,W=Math.imul(ng,Hg),G=G+Math.imul(Ag,zg)|0,w=(w=w+Math.imul(Ag,aI)|0)+Math.imul(O,zg)|0,W=W+Math.imul(O,aI)|0,G=G+Math.imul(Cg,Ug)|0,w=(w=w+Math.imul(Cg,lI)|0)+Math.imul(x,Ug)|0,W=W+Math.imul(x,lI)|0,G=G+Math.imul(j,Eg)|0,w=(w=w+Math.imul(j,LI)|0)+Math.imul(q,Eg)|0,W=W+Math.imul(q,LI)|0,G=G+Math.imul(E,tI)|0,w=(w=w+Math.imul(E,WI)|0)+Math.imul(J,tI)|0,W=W+Math.imul(J,WI)|0;var nC=(F+(G=G+Math.imul(Q,nI)|0)|0)+((8191&(w=(w=w+Math.imul(Q,kI)|0)+Math.imul(P,nI)|0))<<13)|0;F=((W=W+Math.imul(P,kI)|0)+(w>>>13)|0)+(nC>>>26)|0,nC&=67108863,G=Math.imul(lg,pg),w=(w=Math.imul(lg,Hg))+Math.imul(cg,pg)|0,W=Math.imul(cg,Hg),G=G+Math.imul(Ig,zg)|0,w=(w=w+Math.imul(Ig,aI)|0)+Math.imul(ng,zg)|0,W=W+Math.imul(ng,aI)|0,G=G+Math.imul(Ag,Ug)|0,w=(w=w+Math.imul(Ag,lI)|0)+Math.imul(O,Ug)|0,W=W+Math.imul(O,lI)|0,G=G+Math.imul(Cg,Eg)|0,w=(w=w+Math.imul(Cg,LI)|0)+Math.imul(x,Eg)|0,W=W+Math.imul(x,LI)|0,G=G+Math.imul(j,tI)|0,w=(w=w+Math.imul(j,WI)|0)+Math.imul(q,tI)|0,W=W+Math.imul(q,WI)|0,G=G+Math.imul(E,nI)|0,w=(w=w+Math.imul(E,kI)|0)+Math.imul(J,nI)|0,W=W+Math.imul(J,kI)|0;var Ft=(F+(G=G+Math.imul(Q,hI)|0)|0)+((8191&(w=(w=w+Math.imul(Q,bg)|0)+Math.imul(P,hI)|0))<<13)|0;F=((W=W+Math.imul(P,bg)|0)+(w>>>13)|0)+(Ft>>>26)|0,Ft&=67108863,G=Math.imul(hg,pg),w=(w=Math.imul(hg,Hg))+Math.imul(rg,pg)|0,W=Math.imul(rg,Hg),G=G+Math.imul(lg,zg)|0,w=(w=w+Math.imul(lg,aI)|0)+Math.imul(cg,zg)|0,W=W+Math.imul(cg,aI)|0,G=G+Math.imul(Ig,Ug)|0,w=(w=w+Math.imul(Ig,lI)|0)+Math.imul(ng,Ug)|0,W=W+Math.imul(ng,lI)|0,G=G+Math.imul(Ag,Eg)|0,w=(w=w+Math.imul(Ag,LI)|0)+Math.imul(O,Eg)|0,W=W+Math.imul(O,LI)|0,G=G+Math.imul(Cg,tI)|0,w=(w=w+Math.imul(Cg,WI)|0)+Math.imul(x,tI)|0,W=W+Math.imul(x,WI)|0,G=G+Math.imul(j,nI)|0,w=(w=w+Math.imul(j,kI)|0)+Math.imul(q,nI)|0,W=W+Math.imul(q,kI)|0,G=G+Math.imul(E,hI)|0,w=(w=w+Math.imul(E,bg)|0)+Math.imul(J,hI)|0,W=W+Math.imul(J,bg)|0;var og=(F+(G=G+Math.imul(Q,fg)|0)|0)+((8191&(w=(w=w+Math.imul(Q,Tg)|0)+Math.imul(P,fg)|0))<<13)|0;F=((W=W+Math.imul(P,Tg)|0)+(w>>>13)|0)+(og>>>26)|0,og&=67108863,G=Math.imul(Gg,pg),w=(w=Math.imul(Gg,Hg))+Math.imul(Sg,pg)|0,W=Math.imul(Sg,Hg),G=G+Math.imul(hg,zg)|0,w=(w=w+Math.imul(hg,aI)|0)+Math.imul(rg,zg)|0,W=W+Math.imul(rg,aI)|0,G=G+Math.imul(lg,Ug)|0,w=(w=w+Math.imul(lg,lI)|0)+Math.imul(cg,Ug)|0,W=W+Math.imul(cg,lI)|0,G=G+Math.imul(Ig,Eg)|0,w=(w=w+Math.imul(Ig,LI)|0)+Math.imul(ng,Eg)|0,W=W+Math.imul(ng,LI)|0,G=G+Math.imul(Ag,tI)|0,w=(w=w+Math.imul(Ag,WI)|0)+Math.imul(O,tI)|0,W=W+Math.imul(O,WI)|0,G=G+Math.imul(Cg,nI)|0,w=(w=w+Math.imul(Cg,kI)|0)+Math.imul(x,nI)|0,W=W+Math.imul(x,kI)|0,G=G+Math.imul(j,hI)|0,w=(w=w+Math.imul(j,bg)|0)+Math.imul(q,hI)|0,W=W+Math.imul(q,bg)|0,G=G+Math.imul(E,fg)|0,w=(w=w+Math.imul(E,Tg)|0)+Math.imul(J,fg)|0,W=W+Math.imul(J,Tg)|0;var Zg=(F+(G=G+Math.imul(Q,jg)|0)|0)+((8191&(w=(w=w+Math.imul(Q,mI)|0)+Math.imul(P,jg)|0))<<13)|0;F=((W=W+Math.imul(P,mI)|0)+(w>>>13)|0)+(Zg>>>26)|0,Zg&=67108863,G=Math.imul(kg,pg),w=(w=Math.imul(kg,Hg))+Math.imul(yg,pg)|0,W=Math.imul(yg,Hg),G=G+Math.imul(Gg,zg)|0,w=(w=w+Math.imul(Gg,aI)|0)+Math.imul(Sg,zg)|0,W=W+Math.imul(Sg,aI)|0,G=G+Math.imul(hg,Ug)|0,w=(w=w+Math.imul(hg,lI)|0)+Math.imul(rg,Ug)|0,W=W+Math.imul(rg,lI)|0,G=G+Math.imul(lg,Eg)|0,w=(w=w+Math.imul(lg,LI)|0)+Math.imul(cg,Eg)|0,W=W+Math.imul(cg,LI)|0,G=G+Math.imul(Ig,tI)|0,w=(w=w+Math.imul(Ig,WI)|0)+Math.imul(ng,tI)|0,W=W+Math.imul(ng,WI)|0,G=G+Math.imul(Ag,nI)|0,w=(w=w+Math.imul(Ag,kI)|0)+Math.imul(O,nI)|0,W=W+Math.imul(O,kI)|0,G=G+Math.imul(Cg,hI)|0,w=(w=w+Math.imul(Cg,bg)|0)+Math.imul(x,hI)|0,W=W+Math.imul(x,bg)|0,G=G+Math.imul(j,fg)|0,w=(w=w+Math.imul(j,Tg)|0)+Math.imul(q,fg)|0,W=W+Math.imul(q,Tg)|0,G=G+Math.imul(E,jg)|0,w=(w=w+Math.imul(E,mI)|0)+Math.imul(J,jg)|0,W=W+Math.imul(J,mI)|0;var Dg=(F+(G=G+Math.imul(Q,gI)|0)|0)+((8191&(w=(w=w+Math.imul(Q,pI)|0)+Math.imul(P,gI)|0))<<13)|0;F=((W=W+Math.imul(P,pI)|0)+(w>>>13)|0)+(Dg>>>26)|0,Dg&=67108863,G=Math.imul(kg,zg),w=(w=Math.imul(kg,aI))+Math.imul(yg,zg)|0,W=Math.imul(yg,aI),G=G+Math.imul(Gg,Ug)|0,w=(w=w+Math.imul(Gg,lI)|0)+Math.imul(Sg,Ug)|0,W=W+Math.imul(Sg,lI)|0,G=G+Math.imul(hg,Eg)|0,w=(w=w+Math.imul(hg,LI)|0)+Math.imul(rg,Eg)|0,W=W+Math.imul(rg,LI)|0,G=G+Math.imul(lg,tI)|0,w=(w=w+Math.imul(lg,WI)|0)+Math.imul(cg,tI)|0,W=W+Math.imul(cg,WI)|0,G=G+Math.imul(Ig,nI)|0,w=(w=w+Math.imul(Ig,kI)|0)+Math.imul(ng,nI)|0,W=W+Math.imul(ng,kI)|0,G=G+Math.imul(Ag,hI)|0,w=(w=w+Math.imul(Ag,bg)|0)+Math.imul(O,hI)|0,W=W+Math.imul(O,bg)|0,G=G+Math.imul(Cg,fg)|0,w=(w=w+Math.imul(Cg,Tg)|0)+Math.imul(x,fg)|0,W=W+Math.imul(x,Tg)|0,G=G+Math.imul(j,jg)|0,w=(w=w+Math.imul(j,mI)|0)+Math.imul(q,jg)|0,W=W+Math.imul(q,mI)|0;var Fg=(F+(G=G+Math.imul(E,gI)|0)|0)+((8191&(w=(w=w+Math.imul(E,pI)|0)+Math.imul(J,gI)|0))<<13)|0;F=((W=W+Math.imul(J,pI)|0)+(w>>>13)|0)+(Fg>>>26)|0,Fg&=67108863,G=Math.imul(kg,Ug),w=(w=Math.imul(kg,lI))+Math.imul(yg,Ug)|0,W=Math.imul(yg,lI),G=G+Math.imul(Gg,Eg)|0,w=(w=w+Math.imul(Gg,LI)|0)+Math.imul(Sg,Eg)|0,W=W+Math.imul(Sg,LI)|0,G=G+Math.imul(hg,tI)|0,w=(w=w+Math.imul(hg,WI)|0)+Math.imul(rg,tI)|0,W=W+Math.imul(rg,WI)|0,G=G+Math.imul(lg,nI)|0,w=(w=w+Math.imul(lg,kI)|0)+Math.imul(cg,nI)|0,W=W+Math.imul(cg,kI)|0,G=G+Math.imul(Ig,hI)|0,w=(w=w+Math.imul(Ig,bg)|0)+Math.imul(ng,hI)|0,W=W+Math.imul(ng,bg)|0,G=G+Math.imul(Ag,fg)|0,w=(w=w+Math.imul(Ag,Tg)|0)+Math.imul(O,fg)|0,W=W+Math.imul(O,Tg)|0,G=G+Math.imul(Cg,jg)|0,w=(w=w+Math.imul(Cg,mI)|0)+Math.imul(x,jg)|0,W=W+Math.imul(x,mI)|0;var II=(F+(G=G+Math.imul(j,gI)|0)|0)+((8191&(w=(w=w+Math.imul(j,pI)|0)+Math.imul(q,gI)|0))<<13)|0;F=((W=W+Math.imul(q,pI)|0)+(w>>>13)|0)+(II>>>26)|0,II&=67108863,G=Math.imul(kg,Eg),w=(w=Math.imul(kg,LI))+Math.imul(yg,Eg)|0,W=Math.imul(yg,LI),G=G+Math.imul(Gg,tI)|0,w=(w=w+Math.imul(Gg,WI)|0)+Math.imul(Sg,tI)|0,W=W+Math.imul(Sg,WI)|0,G=G+Math.imul(hg,nI)|0,w=(w=w+Math.imul(hg,kI)|0)+Math.imul(rg,nI)|0,W=W+Math.imul(rg,kI)|0,G=G+Math.imul(lg,hI)|0,w=(w=w+Math.imul(lg,bg)|0)+Math.imul(cg,hI)|0,W=W+Math.imul(cg,bg)|0,G=G+Math.imul(Ig,fg)|0,w=(w=w+Math.imul(Ig,Tg)|0)+Math.imul(ng,fg)|0,W=W+Math.imul(ng,Tg)|0,G=G+Math.imul(Ag,jg)|0,w=(w=w+Math.imul(Ag,mI)|0)+Math.imul(O,jg)|0,W=W+Math.imul(O,mI)|0;var vg=(F+(G=G+Math.imul(Cg,gI)|0)|0)+((8191&(w=(w=w+Math.imul(Cg,pI)|0)+Math.imul(x,gI)|0))<<13)|0;F=((W=W+Math.imul(x,pI)|0)+(w>>>13)|0)+(vg>>>26)|0,vg&=67108863,G=Math.imul(kg,tI),w=(w=Math.imul(kg,WI))+Math.imul(yg,tI)|0,W=Math.imul(yg,WI),G=G+Math.imul(Gg,nI)|0,w=(w=w+Math.imul(Gg,kI)|0)+Math.imul(Sg,nI)|0,W=W+Math.imul(Sg,kI)|0,G=G+Math.imul(hg,hI)|0,w=(w=w+Math.imul(hg,bg)|0)+Math.imul(rg,hI)|0,W=W+Math.imul(rg,bg)|0,G=G+Math.imul(lg,fg)|0,w=(w=w+Math.imul(lg,Tg)|0)+Math.imul(cg,fg)|0,W=W+Math.imul(cg,Tg)|0,G=G+Math.imul(Ig,jg)|0,w=(w=w+Math.imul(Ig,mI)|0)+Math.imul(ng,jg)|0,W=W+Math.imul(ng,mI)|0;var xg=(F+(G=G+Math.imul(Ag,gI)|0)|0)+((8191&(w=(w=w+Math.imul(Ag,pI)|0)+Math.imul(O,gI)|0))<<13)|0;F=((W=W+Math.imul(O,pI)|0)+(w>>>13)|0)+(xg>>>26)|0,xg&=67108863,G=Math.imul(kg,nI),w=(w=Math.imul(kg,kI))+Math.imul(yg,nI)|0,W=Math.imul(yg,kI),G=G+Math.imul(Gg,hI)|0,w=(w=w+Math.imul(Gg,bg)|0)+Math.imul(Sg,hI)|0,W=W+Math.imul(Sg,bg)|0,G=G+Math.imul(hg,fg)|0,w=(w=w+Math.imul(hg,Tg)|0)+Math.imul(rg,fg)|0,W=W+Math.imul(rg,Tg)|0,G=G+Math.imul(lg,jg)|0,w=(w=w+Math.imul(lg,mI)|0)+Math.imul(cg,jg)|0,W=W+Math.imul(cg,mI)|0;var zI=(F+(G=G+Math.imul(Ig,gI)|0)|0)+((8191&(w=(w=w+Math.imul(Ig,pI)|0)+Math.imul(ng,gI)|0))<<13)|0;F=((W=W+Math.imul(ng,pI)|0)+(w>>>13)|0)+(zI>>>26)|0,zI&=67108863,G=Math.imul(kg,hI),w=(w=Math.imul(kg,bg))+Math.imul(yg,hI)|0,W=Math.imul(yg,bg),G=G+Math.imul(Gg,fg)|0,w=(w=w+Math.imul(Gg,Tg)|0)+Math.imul(Sg,fg)|0,W=W+Math.imul(Sg,Tg)|0,G=G+Math.imul(hg,jg)|0,w=(w=w+Math.imul(hg,mI)|0)+Math.imul(rg,jg)|0,W=W+Math.imul(rg,mI)|0;var VI=(F+(G=G+Math.imul(lg,gI)|0)|0)+((8191&(w=(w=w+Math.imul(lg,pI)|0)+Math.imul(cg,gI)|0))<<13)|0;F=((W=W+Math.imul(cg,pI)|0)+(w>>>13)|0)+(VI>>>26)|0,VI&=67108863,G=Math.imul(kg,fg),w=(w=Math.imul(kg,Tg))+Math.imul(yg,fg)|0,W=Math.imul(yg,Tg),G=G+Math.imul(Gg,jg)|0,w=(w=w+Math.imul(Gg,mI)|0)+Math.imul(Sg,jg)|0,W=W+Math.imul(Sg,mI)|0;var YI=(F+(G=G+Math.imul(hg,gI)|0)|0)+((8191&(w=(w=w+Math.imul(hg,pI)|0)+Math.imul(rg,gI)|0))<<13)|0;F=((W=W+Math.imul(rg,pI)|0)+(w>>>13)|0)+(YI>>>26)|0,YI&=67108863,G=Math.imul(kg,jg),w=(w=Math.imul(kg,mI))+Math.imul(yg,jg)|0,W=Math.imul(yg,mI);var dI=(F+(G=G+Math.imul(Gg,gI)|0)|0)+((8191&(w=(w=w+Math.imul(Gg,pI)|0)+Math.imul(Sg,gI)|0))<<13)|0;F=((W=W+Math.imul(Sg,pI)|0)+(w>>>13)|0)+(dI>>>26)|0,dI&=67108863;var CC=(F+(G=Math.imul(kg,gI))|0)+((8191&(w=(w=Math.imul(kg,pI))+Math.imul(yg,gI)|0))<<13)|0;return F=((W=Math.imul(yg,pI))+(w>>>13)|0)+(CC>>>26)|0,CC&=67108863,D[0]=bI,D[1]=yI,D[2]=wC,D[3]=_I,D[4]=_C,D[5]=nC,D[6]=Ft,D[7]=og,D[8]=Zg,D[9]=Dg,D[10]=Fg,D[11]=II,D[12]=vg,D[13]=xg,D[14]=zI,D[15]=VI,D[16]=YI,D[17]=dI,D[18]=CC,F!==0&&(D[19]=F,B.length++),B};function Z(V,N,B){return new p().mulp(V,N,B)}function p(V,N){this.x=V,this.y=N}Math.imul||(m=u),n.prototype.mulTo=function(V,N){var B=this.length+V.length;return this.length===10&&V.length===10?m(this,V,N):B<63?u(this,V,N):B<1024?function(G,w,W){W.negative=w.negative^G.negative,W.length=G.length+w.length;for(var y=0,f=0,D=0;D<W.length-1;D++){var F=f;f=0;for(var T=67108863&y,Q=Math.min(D,w.length-1),P=Math.max(0,D-G.length+1);P<=Q;P++){var L=D-P,E=(0|G.words[L])*(0|w.words[P]),J=67108863&E;T=67108863&(J=J+T|0),f+=(F=(F=F+(E/67108864|0)|0)+(J>>>26)|0)>>>26,F&=67108863}W.words[D]=T,y=F,F=f}return y!==0?W.words[D]=y:W.length--,W.strip()}(this,V,N):Z(this,V,N)},p.prototype.makeRBT=function(V){for(var N=new Array(V),B=n.prototype._countBits(V)-1,G=0;G<V;G++)N[G]=this.revBin(G,B,V);return N},p.prototype.revBin=function(V,N,B){if(V===0||V===B-1)return V;for(var G=0,w=0;w<N;w++)G|=(1&V)<<N-w-1,V>>=1;return G},p.prototype.permute=function(V,N,B,G,w,W){for(var y=0;y<W;y++)G[y]=N[V[y]],w[y]=B[V[y]]},p.prototype.transform=function(V,N,B,G,w,W){this.permute(W,V,N,B,G,w);for(var y=1;y<w;y<<=1)for(var f=y<<1,D=Math.cos(2*Math.PI/f),F=Math.sin(2*Math.PI/f),T=0;T<w;T+=f)for(var Q=D,P=F,L=0;L<y;L++){var E=B[T+L],J=G[T+L],k=B[T+L+y],j=G[T+L+y],q=Q*k-P*j;j=Q*j+P*k,k=q,B[T+L]=E+k,G[T+L]=J+j,B[T+L+y]=E-k,G[T+L+y]=J-j,L!==f&&(q=D*Q-F*P,P=D*P+F*Q,Q=q)}},p.prototype.guessLen13b=function(V,N){var B=1|Math.max(N,V),G=1&B,w=0;for(B=B/2|0;B;B>>>=1)w++;return 1<<w+1+G},p.prototype.conjugate=function(V,N,B){if(!(B<=1))for(var G=0;G<B/2;G++){var w=V[G];V[G]=V[B-G-1],V[B-G-1]=w,w=N[G],N[G]=-N[B-G-1],N[B-G-1]=-w}},p.prototype.normalize13b=function(V,N){for(var B=0,G=0;G<N/2;G++){var w=8192*Math.round(V[2*G+1]/N)+Math.round(V[2*G]/N)+B;V[G]=67108863&w,B=w<67108864?0:w/67108864|0}return V},p.prototype.convert13b=function(V,N,B,G){for(var w=0,W=0;W<N;W++)w+=0|V[W],B[2*W]=8191&w,w>>>=13,B[2*W+1]=8191&w,w>>>=13;for(W=2*N;W<G;++W)B[W]=0;s(w===0),s((-8192&w)==0)},p.prototype.stub=function(V){for(var N=new Array(V),B=0;B<V;B++)N[B]=0;return N},p.prototype.mulp=function(V,N,B){var G=2*this.guessLen13b(V.length,N.length),w=this.makeRBT(G),W=this.stub(G),y=new Array(G),f=new Array(G),D=new Array(G),F=new Array(G),T=new Array(G),Q=new Array(G),P=B.words;P.length=G,this.convert13b(V.words,V.length,y,G),this.convert13b(N.words,N.length,F,G),this.transform(y,W,f,D,G,w),this.transform(F,W,T,Q,G,w);for(var L=0;L<G;L++){var E=f[L]*T[L]-D[L]*Q[L];D[L]=f[L]*Q[L]+D[L]*T[L],f[L]=E}return this.conjugate(f,D,G),this.transform(f,D,P,W,G,w),this.conjugate(P,W,G),this.normalize13b(P,G),B.negative=V.negative^N.negative,B.length=V.length+N.length,B.strip()},n.prototype.mul=function(V){var N=new n(null);return N.words=new Array(this.length+V.length),this.mulTo(V,N)},n.prototype.mulf=function(V){var N=new n(null);return N.words=new Array(this.length+V.length),Z(this,V,N)},n.prototype.imul=function(V){return this.clone().mulTo(V,this)},n.prototype.imuln=function(V){s(typeof V=="number"),s(V<67108864);for(var N=0,B=0;B<this.length;B++){var G=(0|this.words[B])*V,w=(67108863&G)+(67108863&N);N>>=26,N+=G/67108864|0,N+=w>>>26,this.words[B]=67108863&w}return N!==0&&(this.words[B]=N,this.length++),this},n.prototype.muln=function(V){return this.clone().imuln(V)},n.prototype.sqr=function(){return this.mul(this)},n.prototype.isqr=function(){return this.imul(this.clone())},n.prototype.pow=function(V){var N=function(W){for(var y=new Array(W.bitLength()),f=0;f<y.length;f++){var D=f/26|0,F=f%26;y[f]=(W.words[D]&1<<F)>>>F}return y}(V);if(N.length===0)return new n(1);for(var B=this,G=0;G<N.length&&N[G]===0;G++,B=B.sqr());if(++G<N.length)for(var w=B.sqr();G<N.length;G++,w=w.sqr())N[G]!==0&&(B=B.mul(w));return B},n.prototype.iushln=function(V){s(typeof V=="number"&&V>=0);var N,B=V%26,G=(V-B)/26,w=67108863>>>26-B<<26-B;if(B!==0){var W=0;for(N=0;N<this.length;N++){var y=this.words[N]&w,f=(0|this.words[N])-y<<B;this.words[N]=f|W,W=y>>>26-B}W&&(this.words[N]=W,this.length++)}if(G!==0){for(N=this.length-1;N>=0;N--)this.words[N+G]=this.words[N];for(N=0;N<G;N++)this.words[N]=0;this.length+=G}return this.strip()},n.prototype.ishln=function(V){return s(this.negative===0),this.iushln(V)},n.prototype.iushrn=function(V,N,B){var G;s(typeof V=="number"&&V>=0),G=N?(N-N%26)/26:0;var w=V%26,W=Math.min((V-w)/26,this.length),y=67108863^67108863>>>w<<w,f=B;if(G-=W,G=Math.max(0,G),f){for(var D=0;D<W;D++)f.words[D]=this.words[D];f.length=W}if(W!==0)if(this.length>W)for(this.length-=W,D=0;D<this.length;D++)this.words[D]=this.words[D+W];else this.words[0]=0,this.length=1;var F=0;for(D=this.length-1;D>=0&&(F!==0||D>=G);D--){var T=0|this.words[D];this.words[D]=F<<26-w|T>>>w,F=T&y}return f&&F!==0&&(f.words[f.length++]=F),this.length===0&&(this.words[0]=0,this.length=1),this.strip()},n.prototype.ishrn=function(V,N,B){return s(this.negative===0),this.iushrn(V,N,B)},n.prototype.shln=function(V){return this.clone().ishln(V)},n.prototype.ushln=function(V){return this.clone().iushln(V)},n.prototype.shrn=function(V){return this.clone().ishrn(V)},n.prototype.ushrn=function(V){return this.clone().iushrn(V)},n.prototype.testn=function(V){s(typeof V=="number"&&V>=0);var N=V%26,B=(V-N)/26,G=1<<N;return!(this.length<=B)&&!!(this.words[B]&G)},n.prototype.imaskn=function(V){s(typeof V=="number"&&V>=0);var N=V%26,B=(V-N)/26;if(s(this.negative===0,"imaskn works only with positive numbers"),this.length<=B)return this;if(N!==0&&B++,this.length=Math.min(B,this.length),N!==0){var G=67108863^67108863>>>N<<N;this.words[this.length-1]&=G}return this.strip()},n.prototype.maskn=function(V){return this.clone().imaskn(V)},n.prototype.iaddn=function(V){return s(typeof V=="number"),s(V<67108864),V<0?this.isubn(-V):this.negative!==0?this.length===1&&(0|this.words[0])<V?(this.words[0]=V-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(V),this.negative=1,this):this._iaddn(V)},n.prototype._iaddn=function(V){this.words[0]+=V;for(var N=0;N<this.length&&this.words[N]>=67108864;N++)this.words[N]-=67108864,N===this.length-1?this.words[N+1]=1:this.words[N+1]++;return this.length=Math.max(this.length,N+1),this},n.prototype.isubn=function(V){if(s(typeof V=="number"),s(V<67108864),V<0)return this.iaddn(-V);if(this.negative!==0)return this.negative=0,this.iaddn(V),this.negative=1,this;if(this.words[0]-=V,this.length===1&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var N=0;N<this.length&&this.words[N]<0;N++)this.words[N]+=67108864,this.words[N+1]-=1;return this.strip()},n.prototype.addn=function(V){return this.clone().iaddn(V)},n.prototype.subn=function(V){return this.clone().isubn(V)},n.prototype.iabs=function(){return this.negative=0,this},n.prototype.abs=function(){return this.clone().iabs()},n.prototype._ishlnsubmul=function(V,N,B){var G,w,W=V.length+B;this._expand(W);var y=0;for(G=0;G<V.length;G++){w=(0|this.words[G+B])+y;var f=(0|V.words[G])*N;y=((w-=67108863&f)>>26)-(f/67108864|0),this.words[G+B]=67108863&w}for(;G<this.length-B;G++)y=(w=(0|this.words[G+B])+y)>>26,this.words[G+B]=67108863&w;if(y===0)return this.strip();for(s(y===-1),y=0,G=0;G<this.length;G++)y=(w=-(0|this.words[G])+y)>>26,this.words[G]=67108863&w;return this.negative=1,this.strip()},n.prototype._wordDiv=function(V,N){var B=(this.length,V.length),G=this.clone(),w=V,W=0|w.words[w.length-1];(B=26-this._countBits(W))!==0&&(w=w.ushln(B),G.iushln(B),W=0|w.words[w.length-1]);var y,f=G.length-w.length;if(N!=="mod"){(y=new n(null)).length=f+1,y.words=new Array(y.length);for(var D=0;D<y.length;D++)y.words[D]=0}var F=G.clone()._ishlnsubmul(w,1,f);F.negative===0&&(G=F,y&&(y.words[f]=1));for(var T=f-1;T>=0;T--){var Q=67108864*(0|G.words[w.length+T])+(0|G.words[w.length+T-1]);for(Q=Math.min(Q/W|0,67108863),G._ishlnsubmul(w,Q,T);G.negative!==0;)Q--,G.negative=0,G._ishlnsubmul(w,1,T),G.isZero()||(G.negative^=1);y&&(y.words[T]=Q)}return y&&y.strip(),G.strip(),N!=="div"&&B!==0&&G.iushrn(B),{div:y||null,mod:G}},n.prototype.divmod=function(V,N,B){return s(!V.isZero()),this.isZero()?{div:new n(0),mod:new n(0)}:this.negative!==0&&V.negative===0?(W=this.neg().divmod(V,N),N!=="mod"&&(G=W.div.neg()),N!=="div"&&(w=W.mod.neg(),B&&w.negative!==0&&w.iadd(V)),{div:G,mod:w}):this.negative===0&&V.negative!==0?(W=this.divmod(V.neg(),N),N!=="mod"&&(G=W.div.neg()),{div:G,mod:W.mod}):(this.negative&V.negative)!=0?(W=this.neg().divmod(V.neg(),N),N!=="div"&&(w=W.mod.neg(),B&&w.negative!==0&&w.isub(V)),{div:W.div,mod:w}):V.length>this.length||this.cmp(V)<0?{div:new n(0),mod:this}:V.length===1?N==="div"?{div:this.divn(V.words[0]),mod:null}:N==="mod"?{div:null,mod:new n(this.modn(V.words[0]))}:{div:this.divn(V.words[0]),mod:new n(this.modn(V.words[0]))}:this._wordDiv(V,N);var G,w,W},n.prototype.div=function(V){return this.divmod(V,"div",!1).div},n.prototype.mod=function(V){return this.divmod(V,"mod",!1).mod},n.prototype.umod=function(V){return this.divmod(V,"mod",!0).mod},n.prototype.divRound=function(V){var N=this.divmod(V);if(N.mod.isZero())return N.div;var B=N.div.negative!==0?N.mod.isub(V):N.mod,G=V.ushrn(1),w=V.andln(1),W=B.cmp(G);return W<0||w===1&&W===0?N.div:N.div.negative!==0?N.div.isubn(1):N.div.iaddn(1)},n.prototype.modn=function(V){s(V<=67108863);for(var N=(1<<26)%V,B=0,G=this.length-1;G>=0;G--)B=(N*B+(0|this.words[G]))%V;return B},n.prototype.idivn=function(V){s(V<=67108863);for(var N=0,B=this.length-1;B>=0;B--){var G=(0|this.words[B])+67108864*N;this.words[B]=G/V|0,N=G%V}return this.strip()},n.prototype.divn=function(V){return this.clone().idivn(V)},n.prototype.egcd=function(V){s(V.negative===0),s(!V.isZero());var N=this,B=V.clone();N=N.negative!==0?N.umod(V):N.clone();for(var G=new n(1),w=new n(0),W=new n(0),y=new n(1),f=0;N.isEven()&&B.isEven();)N.iushrn(1),B.iushrn(1),++f;for(var D=B.clone(),F=N.clone();!N.isZero();){for(var T=0,Q=1;(N.words[0]&Q)==0&&T<26;++T,Q<<=1);if(T>0)for(N.iushrn(T);T-- >0;)(G.isOdd()||w.isOdd())&&(G.iadd(D),w.isub(F)),G.iushrn(1),w.iushrn(1);for(var P=0,L=1;(B.words[0]&L)==0&&P<26;++P,L<<=1);if(P>0)for(B.iushrn(P);P-- >0;)(W.isOdd()||y.isOdd())&&(W.iadd(D),y.isub(F)),W.iushrn(1),y.iushrn(1);N.cmp(B)>=0?(N.isub(B),G.isub(W),w.isub(y)):(B.isub(N),W.isub(G),y.isub(w))}return{a:W,b:y,gcd:B.iushln(f)}},n.prototype._invmp=function(V){s(V.negative===0),s(!V.isZero());var N=this,B=V.clone();N=N.negative!==0?N.umod(V):N.clone();for(var G,w=new n(1),W=new n(0),y=B.clone();N.cmpn(1)>0&&B.cmpn(1)>0;){for(var f=0,D=1;(N.words[0]&D)==0&&f<26;++f,D<<=1);if(f>0)for(N.iushrn(f);f-- >0;)w.isOdd()&&w.iadd(y),w.iushrn(1);for(var F=0,T=1;(B.words[0]&T)==0&&F<26;++F,T<<=1);if(F>0)for(B.iushrn(F);F-- >0;)W.isOdd()&&W.iadd(y),W.iushrn(1);N.cmp(B)>=0?(N.isub(B),w.isub(W)):(B.isub(N),W.isub(w))}return(G=N.cmpn(1)===0?w:W).cmpn(0)<0&&G.iadd(V),G},n.prototype.gcd=function(V){if(this.isZero())return V.abs();if(V.isZero())return this.abs();var N=this.clone(),B=V.clone();N.negative=0,B.negative=0;for(var G=0;N.isEven()&&B.isEven();G++)N.iushrn(1),B.iushrn(1);for(;;){for(;N.isEven();)N.iushrn(1);for(;B.isEven();)B.iushrn(1);var w=N.cmp(B);if(w<0){var W=N;N=B,B=W}else if(w===0||B.cmpn(1)===0)break;N.isub(B)}return B.iushln(G)},n.prototype.invm=function(V){return this.egcd(V).a.umod(V)},n.prototype.isEven=function(){return(1&this.words[0])==0},n.prototype.isOdd=function(){return(1&this.words[0])==1},n.prototype.andln=function(V){return this.words[0]&V},n.prototype.bincn=function(V){s(typeof V=="number");var N=V%26,B=(V-N)/26,G=1<<N;if(this.length<=B)return this._expand(B+1),this.words[B]|=G,this;for(var w=G,W=B;w!==0&&W<this.length;W++){var y=0|this.words[W];w=(y+=w)>>>26,y&=67108863,this.words[W]=y}return w!==0&&(this.words[W]=w,this.length++),this},n.prototype.isZero=function(){return this.length===1&&this.words[0]===0},n.prototype.cmpn=function(V){var N,B=V<0;if(this.negative!==0&&!B)return-1;if(this.negative===0&&B)return 1;if(this.strip(),this.length>1)N=1;else{B&&(V=-V),s(V<=67108863,"Number is too big");var G=0|this.words[0];N=G===V?0:G<V?-1:1}return this.negative!==0?0|-N:N},n.prototype.cmp=function(V){if(this.negative!==0&&V.negative===0)return-1;if(this.negative===0&&V.negative!==0)return 1;var N=this.ucmp(V);return this.negative!==0?0|-N:N},n.prototype.ucmp=function(V){if(this.length>V.length)return 1;if(this.length<V.length)return-1;for(var N=0,B=this.length-1;B>=0;B--){var G=0|this.words[B],w=0|V.words[B];if(G!==w){G<w?N=-1:G>w&&(N=1);break}}return N},n.prototype.gtn=function(V){return this.cmpn(V)===1},n.prototype.gt=function(V){return this.cmp(V)===1},n.prototype.gten=function(V){return this.cmpn(V)>=0},n.prototype.gte=function(V){return this.cmp(V)>=0},n.prototype.ltn=function(V){return this.cmpn(V)===-1},n.prototype.lt=function(V){return this.cmp(V)===-1},n.prototype.lten=function(V){return this.cmpn(V)<=0},n.prototype.lte=function(V){return this.cmp(V)<=0},n.prototype.eqn=function(V){return this.cmpn(V)===0},n.prototype.eq=function(V){return this.cmp(V)===0},n.red=function(V){return new v(V)},n.prototype.toRed=function(V){return s(!this.red,"Already a number in reduction context"),s(this.negative===0,"red works only with positives"),V.convertTo(this)._forceRed(V)},n.prototype.fromRed=function(){return s(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},n.prototype._forceRed=function(V){return this.red=V,this},n.prototype.forceRed=function(V){return s(!this.red,"Already a number in reduction context"),this._forceRed(V)},n.prototype.redAdd=function(V){return s(this.red,"redAdd works only with red numbers"),this.red.add(this,V)},n.prototype.redIAdd=function(V){return s(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,V)},n.prototype.redSub=function(V){return s(this.red,"redSub works only with red numbers"),this.red.sub(this,V)},n.prototype.redISub=function(V){return s(this.red,"redISub works only with red numbers"),this.red.isub(this,V)},n.prototype.redShl=function(V){return s(this.red,"redShl works only with red numbers"),this.red.shl(this,V)},n.prototype.redMul=function(V){return s(this.red,"redMul works only with red numbers"),this.red._verify2(this,V),this.red.mul(this,V)},n.prototype.redIMul=function(V){return s(this.red,"redMul works only with red numbers"),this.red._verify2(this,V),this.red.imul(this,V)},n.prototype.redSqr=function(){return s(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},n.prototype.redISqr=function(){return s(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},n.prototype.redSqrt=function(){return s(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},n.prototype.redInvm=function(){return s(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},n.prototype.redNeg=function(){return s(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},n.prototype.redPow=function(V){return s(this.red&&!V.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,V)};var Y={k256:null,p224:null,p192:null,p25519:null};function R(V,N){this.name=V,this.p=new n(N,16),this.n=this.p.bitLength(),this.k=new n(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function X(){R.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function H(){R.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function S(){R.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function z(){R.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function v(V){if(typeof V=="string"){var N=n._prime(V);this.m=N.p,this.prime=N}else s(V.gtn(1),"modulus must be greater than 1"),this.m=V,this.prime=null}function K(V){v.call(this,V),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new n(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}R.prototype._tmp=function(){var V=new n(null);return V.words=new Array(Math.ceil(this.n/13)),V},R.prototype.ireduce=function(V){var N,B=V;do this.split(B,this.tmp),N=(B=(B=this.imulK(B)).iadd(this.tmp)).bitLength();while(N>this.n);var G=N<this.n?-1:B.ucmp(this.p);return G===0?(B.words[0]=0,B.length=1):G>0?B.isub(this.p):B.strip!==void 0?B.strip():B._strip(),B},R.prototype.split=function(V,N){V.iushrn(this.n,0,N)},R.prototype.imulK=function(V){return V.imul(this.k)},l(X,R),X.prototype.split=function(V,N){for(var B=Math.min(V.length,9),G=0;G<B;G++)N.words[G]=V.words[G];if(N.length=B,V.length<=9)return V.words[0]=0,void(V.length=1);var w=V.words[9];for(N.words[N.length++]=4194303&w,G=10;G<V.length;G++){var W=0|V.words[G];V.words[G-10]=(4194303&W)<<4|w>>>22,w=W}w>>>=22,V.words[G-10]=w,w===0&&V.length>10?V.length-=10:V.length-=9},X.prototype.imulK=function(V){V.words[V.length]=0,V.words[V.length+1]=0,V.length+=2;for(var N=0,B=0;B<V.length;B++){var G=0|V.words[B];N+=977*G,V.words[B]=67108863&N,N=64*G+(N/67108864|0)}return V.words[V.length-1]===0&&(V.length--,V.words[V.length-1]===0&&V.length--),V},l(H,R),l(S,R),l(z,R),z.prototype.imulK=function(V){for(var N=0,B=0;B<V.length;B++){var G=19*(0|V.words[B])+N,w=67108863&G;G>>>=26,V.words[B]=w,N=G}return N!==0&&(V.words[V.length++]=N),V},n._prime=function(V){if(Y[V])return Y[V];var N;if(V==="k256")N=new X;else if(V==="p224")N=new H;else if(V==="p192")N=new S;else{if(V!=="p25519")throw new Error("Unknown prime "+V);N=new z}return Y[V]=N,N},v.prototype._verify1=function(V){s(V.negative===0,"red works only with positives"),s(V.red,"red works only with red numbers")},v.prototype._verify2=function(V,N){s((V.negative|N.negative)==0,"red works only with positives"),s(V.red&&V.red===N.red,"red works only with red numbers")},v.prototype.imod=function(V){return this.prime?this.prime.ireduce(V)._forceRed(this):V.umod(this.m)._forceRed(this)},v.prototype.neg=function(V){return V.isZero()?V.clone():this.m.sub(V)._forceRed(this)},v.prototype.add=function(V,N){this._verify2(V,N);var B=V.add(N);return B.cmp(this.m)>=0&&B.isub(this.m),B._forceRed(this)},v.prototype.iadd=function(V,N){this._verify2(V,N);var B=V.iadd(N);return B.cmp(this.m)>=0&&B.isub(this.m),B},v.prototype.sub=function(V,N){this._verify2(V,N);var B=V.sub(N);return B.cmpn(0)<0&&B.iadd(this.m),B._forceRed(this)},v.prototype.isub=function(V,N){this._verify2(V,N);var B=V.isub(N);return B.cmpn(0)<0&&B.iadd(this.m),B},v.prototype.shl=function(V,N){return this._verify1(V),this.imod(V.ushln(N))},v.prototype.imul=function(V,N){return this._verify2(V,N),this.imod(V.imul(N))},v.prototype.mul=function(V,N){return this._verify2(V,N),this.imod(V.mul(N))},v.prototype.isqr=function(V){return this.imul(V,V.clone())},v.prototype.sqr=function(V){return this.mul(V,V)},v.prototype.sqrt=function(V){if(V.isZero())return V.clone();var N=this.m.andln(3);if(s(N%2==1),N===3){var B=this.m.add(new n(1)).iushrn(2);return this.pow(V,B)}for(var G=this.m.subn(1),w=0;!G.isZero()&&G.andln(1)===0;)w++,G.iushrn(1);s(!G.isZero());var W=new n(1).toRed(this),y=W.redNeg(),f=this.m.subn(1).iushrn(1),D=this.m.bitLength();for(D=new n(2*D*D).toRed(this);this.pow(D,f).cmp(y)!==0;)D.redIAdd(y);for(var F=this.pow(D,G),T=this.pow(V,G.addn(1).iushrn(1)),Q=this.pow(V,G),P=w;Q.cmp(W)!==0;){for(var L=Q,E=0;L.cmp(W)!==0;E++)L=L.redSqr();s(E<P);var J=this.pow(F,new n(1).iushln(P-E-1));T=T.redMul(J),F=J.redSqr(),Q=Q.redMul(F),P=E}return T},v.prototype.invm=function(V){var N=V._invmp(this.m);return N.negative!==0?(N.negative=0,this.imod(N).redNeg()):this.imod(N)},v.prototype.pow=function(V,N){if(N.isZero())return new n(1).toRed(this);if(N.cmpn(1)===0)return V.clone();var B=new Array(16);B[0]=new n(1).toRed(this),B[1]=V;for(var G=2;G<B.length;G++)B[G]=this.mul(B[G-1],V);var w=B[0],W=0,y=0,f=N.bitLength()%26;for(f===0&&(f=26),G=N.length-1;G>=0;G--){for(var D=N.words[G],F=f-1;F>=0;F--){var T=D>>F&1;w!==B[0]&&(w=this.sqr(w)),T!==0||W!==0?(W<<=1,W|=T,(++y===4||G===0&&F===0)&&(w=this.mul(w,B[W]),y=0,W=0)):y=0}f=26}return w},v.prototype.convertTo=function(V){var N=V.umod(this.m);return N===V?N.clone():N},v.prototype.convertFrom=function(V){var N=V.clone();return N.red=null,N},n.mont=function(V){return new K(V)},l(K,v),K.prototype.convertTo=function(V){return this.imod(V.ushln(this.shift))},K.prototype.convertFrom=function(V){var N=this.imod(V.mul(this.rinv));return N.red=null,N},K.prototype.imul=function(V,N){if(V.isZero()||N.isZero())return V.words[0]=0,V.length=1,V;var B=V.imul(N),G=B.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),w=B.isub(G).iushrn(this.shift),W=w;return w.cmp(this.m)>=0?W=w.isub(this.m):w.cmpn(0)<0&&(W=w.iadd(this.m)),W._forceRed(this)},K.prototype.mul=function(V,N){if(V.isZero()||N.isZero())return new n(0)._forceRed(this);var B=V.mul(N),G=B.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),w=B.isub(G).iushrn(this.shift),W=w;return w.cmp(this.m)>=0?W=w.isub(this.m):w.cmpn(0)<0&&(W=w.iadd(this.m)),W._forceRed(this)},K.prototype.invm=function(V){return this.imod(V._invmp(this.m).mul(this.r2))._forceRed(this)}})(C===void 0||C)},{buffer:188}],185:[function(g,C,i){i.byteLength=function(c){var r=d(c),h=r[0],b=r[1];return 3*(h+b)/4-b},i.toByteArray=function(c){var r,h,b=d(c),u=b[0],m=b[1],Z=new s(function(R,X,H){return 3*(X+H)/4-H}(0,u,m)),p=0,Y=m>0?u-4:u;for(h=0;h<Y;h+=4)r=A[c.charCodeAt(h)]<<18|A[c.charCodeAt(h+1)]<<12|A[c.charCodeAt(h+2)]<<6|A[c.charCodeAt(h+3)],Z[p++]=r>>16&255,Z[p++]=r>>8&255,Z[p++]=255&r;return m===2&&(r=A[c.charCodeAt(h)]<<2|A[c.charCodeAt(h+1)]>>4,Z[p++]=255&r),m===1&&(r=A[c.charCodeAt(h)]<<10|A[c.charCodeAt(h+1)]<<4|A[c.charCodeAt(h+2)]>>2,Z[p++]=r>>8&255,Z[p++]=255&r),Z},i.fromByteArray=function(c){for(var r,h=c.length,b=h%3,u=[],m=0,Z=h-b;m<Z;m+=16383)u.push(o(c,m,m+16383>Z?Z:m+16383));return b===1?(r=c[h-1],u.push(e[r>>2]+e[r<<4&63]+"==")):b===2&&(r=(c[h-2]<<8)+c[h-1],u.push(e[r>>10]+e[r>>4&63]+e[r<<2&63]+"=")),u.join("")};for(var e=[],A=[],s=typeof Uint8Array<"u"?Uint8Array:Array,l="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n=0,a=l.length;n<a;++n)e[n]=l[n],A[l.charCodeAt(n)]=n;function d(c){var r=c.length;if(r%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var h=c.indexOf("=");return h===-1&&(h=r),[h,h===r?0:4-h%4]}function o(c,r,h){for(var b,u,m=[],Z=r;Z<h;Z+=3)b=(c[Z]<<16&16711680)+(c[Z+1]<<8&65280)+(255&c[Z+2]),m.push(e[(u=b)>>18&63]+e[u>>12&63]+e[u>>6&63]+e[63&u]);return m.join("")}A[45]=62,A[95]=63},{}],186:[function(g,C,i){(function(e,A){function s(B,G){if(!B)throw new Error(G||"Assertion failed")}function l(B,G){B.super_=G;var w=function(){};w.prototype=G.prototype,B.prototype=new w,B.prototype.constructor=B}function n(B,G,w){if(n.isBN(B))return B;this.negative=0,this.words=null,this.length=0,this.red=null,B!==null&&(G!=="le"&&G!=="be"||(w=G,G=10),this._init(B||0,G||10,w||"be"))}var a;typeof e=="object"?e.exports=n:(void 0).BN=n,n.BN=n,n.wordSize=26;try{a=typeof window<"u"&&window.Buffer!==void 0?window.Buffer:g("buffer").Buffer}catch{}function d(B,G){var w=B.charCodeAt(G);return w>=48&&w<=57?w-48:w>=65&&w<=70?w-55:w>=97&&w<=102?w-87:void s(!1,"Invalid character in "+B)}function o(B,G,w){var W=d(B,w);return w-1>=G&&(W|=d(B,w-1)<<4),W}function c(B,G,w,W){for(var y=0,f=0,D=Math.min(B.length,w),F=G;F<D;F++){var T=B.charCodeAt(F)-48;y*=W,f=T>=49?T-49+10:T>=17?T-17+10:T,s(T>=0&&f<W,"Invalid character"),y+=f}return y}function r(B,G){B.words=G.words,B.length=G.length,B.negative=G.negative,B.red=G.red}if(n.isBN=function(B){return B instanceof n||B!==null&&typeof B=="object"&&B.constructor.wordSize===n.wordSize&&Array.isArray(B.words)},n.max=function(B,G){return B.cmp(G)>0?B:G},n.min=function(B,G){return B.cmp(G)<0?B:G},n.prototype._init=function(B,G,w){if(typeof B=="number")return this._initNumber(B,G,w);if(typeof B=="object")return this._initArray(B,G,w);G==="hex"&&(G=16),s(G===(0|G)&&G>=2&&G<=36);var W=0;(B=B.toString().replace(/\s+/g,""))[0]==="-"&&(W++,this.negative=1),W<B.length&&(G===16?this._parseHex(B,W,w):(this._parseBase(B,G,W),w==="le"&&this._initArray(this.toArray(),G,w)))},n.prototype._initNumber=function(B,G,w){B<0&&(this.negative=1,B=-B),B<67108864?(this.words=[67108863&B],this.length=1):B<4503599627370496?(this.words=[67108863&B,B/67108864&67108863],this.length=2):(s(B<9007199254740992),this.words=[67108863&B,B/67108864&67108863,1],this.length=3),w==="le"&&this._initArray(this.toArray(),G,w)},n.prototype._initArray=function(B,G,w){if(s(typeof B.length=="number"),B.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(B.length/3),this.words=new Array(this.length);for(var W=0;W<this.length;W++)this.words[W]=0;var y,f,D=0;if(w==="be")for(W=B.length-1,y=0;W>=0;W-=3)f=B[W]|B[W-1]<<8|B[W-2]<<16,this.words[y]|=f<<D&67108863,this.words[y+1]=f>>>26-D&67108863,(D+=24)>=26&&(D-=26,y++);else if(w==="le")for(W=0,y=0;W<B.length;W+=3)f=B[W]|B[W+1]<<8|B[W+2]<<16,this.words[y]|=f<<D&67108863,this.words[y+1]=f>>>26-D&67108863,(D+=24)>=26&&(D-=26,y++);return this._strip()},n.prototype._parseHex=function(B,G,w){this.length=Math.ceil((B.length-G)/6),this.words=new Array(this.length);for(var W=0;W<this.length;W++)this.words[W]=0;var y,f=0,D=0;if(w==="be")for(W=B.length-1;W>=G;W-=2)y=o(B,G,W)<<f,this.words[D]|=67108863&y,f>=18?(f-=18,D+=1,this.words[D]|=y>>>26):f+=8;else for(W=(B.length-G)%2==0?G+1:G;W<B.length;W+=2)y=o(B,G,W)<<f,this.words[D]|=67108863&y,f>=18?(f-=18,D+=1,this.words[D]|=y>>>26):f+=8;this._strip()},n.prototype._parseBase=function(B,G,w){this.words=[0],this.length=1;for(var W=0,y=1;y<=67108863;y*=G)W++;W--,y=y/G|0;for(var f=B.length-w,D=f%W,F=Math.min(f,f-D)+w,T=0,Q=w;Q<F;Q+=W)T=c(B,Q,Q+W,G),this.imuln(y),this.words[0]+T<67108864?this.words[0]+=T:this._iaddn(T);if(D!==0){var P=1;for(T=c(B,Q,B.length,G),Q=0;Q<D;Q++)P*=G;this.imuln(P),this.words[0]+T<67108864?this.words[0]+=T:this._iaddn(T)}this._strip()},n.prototype.copy=function(B){B.words=new Array(this.length);for(var G=0;G<this.length;G++)B.words[G]=this.words[G];B.length=this.length,B.negative=this.negative,B.red=this.red},n.prototype._move=function(B){r(B,this)},n.prototype.clone=function(){var B=new n(null);return this.copy(B),B},n.prototype._expand=function(B){for(;this.length<B;)this.words[this.length++]=0;return this},n.prototype._strip=function(){for(;this.length>1&&this.words[this.length-1]===0;)this.length--;return this._normSign()},n.prototype._normSign=function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},typeof Symbol<"u"&&typeof Symbol.for=="function")try{n.prototype[Symbol.for("nodejs.util.inspect.custom")]=h}catch{n.prototype.inspect=h}else n.prototype.inspect=h;function h(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"}var b=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],u=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],m=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];n.prototype.toString=function(B,G){var w;if(G=0|G||1,(B=B||10)===16||B==="hex"){w="";for(var W=0,y=0,f=0;f<this.length;f++){var D=this.words[f],F=(16777215&(D<<W|y)).toString(16);y=D>>>24-W&16777215,(W+=2)>=26&&(W-=26,f--),w=y!==0||f!==this.length-1?b[6-F.length]+F+w:F+w}for(y!==0&&(w=y.toString(16)+w);w.length%G!=0;)w="0"+w;return this.negative!==0&&(w="-"+w),w}if(B===(0|B)&&B>=2&&B<=36){var T=u[B],Q=m[B];w="";var P=this.clone();for(P.negative=0;!P.isZero();){var L=P.modrn(Q).toString(B);w=(P=P.idivn(Q)).isZero()?L+w:b[T-L.length]+L+w}for(this.isZero()&&(w="0"+w);w.length%G!=0;)w="0"+w;return this.negative!==0&&(w="-"+w),w}s(!1,"Base should be between 2 and 36")},n.prototype.toNumber=function(){var B=this.words[0];return this.length===2?B+=67108864*this.words[1]:this.length===3&&this.words[2]===1?B+=4503599627370496+67108864*this.words[1]:this.length>2&&s(!1,"Number can only safely store up to 53 bits"),this.negative!==0?-B:B},n.prototype.toJSON=function(){return this.toString(16,2)},a&&(n.prototype.toBuffer=function(B,G){return this.toArrayLike(a,B,G)}),n.prototype.toArray=function(B,G){return this.toArrayLike(Array,B,G)};function Z(B,G,w){w.negative=G.negative^B.negative;var W=B.length+G.length|0;w.length=W,W=W-1|0;var y=0|B.words[0],f=0|G.words[0],D=y*f,F=67108863&D,T=D/67108864|0;w.words[0]=F;for(var Q=1;Q<W;Q++){for(var P=T>>>26,L=67108863&T,E=Math.min(Q,G.length-1),J=Math.max(0,Q-B.length+1);J<=E;J++){var k=Q-J|0;P+=(D=(y=0|B.words[k])*(f=0|G.words[J])+L)/67108864|0,L=67108863&D}w.words[Q]=0|L,T=0|P}return T!==0?w.words[Q]=0|T:w.length--,w._strip()}n.prototype.toArrayLike=function(B,G,w){this._strip();var W=this.byteLength(),y=w||Math.max(1,W);s(W<=y,"byte array longer than desired length"),s(y>0,"Requested array length <= 0");var f=function(D,F){return D.allocUnsafe?D.allocUnsafe(F):new D(F)}(B,y);return this["_toArrayLike"+(G==="le"?"LE":"BE")](f,W),f},n.prototype._toArrayLikeLE=function(B,G){for(var w=0,W=0,y=0,f=0;y<this.length;y++){var D=this.words[y]<<f|W;B[w++]=255&D,w<B.length&&(B[w++]=D>>8&255),w<B.length&&(B[w++]=D>>16&255),f===6?(w<B.length&&(B[w++]=D>>24&255),W=0,f=0):(W=D>>>24,f+=2)}if(w<B.length)for(B[w++]=W;w<B.length;)B[w++]=0},n.prototype._toArrayLikeBE=function(B,G){for(var w=B.length-1,W=0,y=0,f=0;y<this.length;y++){var D=this.words[y]<<f|W;B[w--]=255&D,w>=0&&(B[w--]=D>>8&255),w>=0&&(B[w--]=D>>16&255),f===6?(w>=0&&(B[w--]=D>>24&255),W=0,f=0):(W=D>>>24,f+=2)}if(w>=0)for(B[w--]=W;w>=0;)B[w--]=0},Math.clz32?n.prototype._countBits=function(B){return 32-Math.clz32(B)}:n.prototype._countBits=function(B){var G=B,w=0;return G>=4096&&(w+=13,G>>>=13),G>=64&&(w+=7,G>>>=7),G>=8&&(w+=4,G>>>=4),G>=2&&(w+=2,G>>>=2),w+G},n.prototype._zeroBits=function(B){if(B===0)return 26;var G=B,w=0;return(8191&G)==0&&(w+=13,G>>>=13),(127&G)==0&&(w+=7,G>>>=7),(15&G)==0&&(w+=4,G>>>=4),(3&G)==0&&(w+=2,G>>>=2),(1&G)==0&&w++,w},n.prototype.bitLength=function(){var B=this.words[this.length-1],G=this._countBits(B);return 26*(this.length-1)+G},n.prototype.zeroBits=function(){if(this.isZero())return 0;for(var B=0,G=0;G<this.length;G++){var w=this._zeroBits(this.words[G]);if(B+=w,w!==26)break}return B},n.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},n.prototype.toTwos=function(B){return this.negative!==0?this.abs().inotn(B).iaddn(1):this.clone()},n.prototype.fromTwos=function(B){return this.testn(B-1)?this.notn(B).iaddn(1).ineg():this.clone()},n.prototype.isNeg=function(){return this.negative!==0},n.prototype.neg=function(){return this.clone().ineg()},n.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},n.prototype.iuor=function(B){for(;this.length<B.length;)this.words[this.length++]=0;for(var G=0;G<B.length;G++)this.words[G]=this.words[G]|B.words[G];return this._strip()},n.prototype.ior=function(B){return s((this.negative|B.negative)==0),this.iuor(B)},n.prototype.or=function(B){return this.length>B.length?this.clone().ior(B):B.clone().ior(this)},n.prototype.uor=function(B){return this.length>B.length?this.clone().iuor(B):B.clone().iuor(this)},n.prototype.iuand=function(B){var G;G=this.length>B.length?B:this;for(var w=0;w<G.length;w++)this.words[w]=this.words[w]&B.words[w];return this.length=G.length,this._strip()},n.prototype.iand=function(B){return s((this.negative|B.negative)==0),this.iuand(B)},n.prototype.and=function(B){return this.length>B.length?this.clone().iand(B):B.clone().iand(this)},n.prototype.uand=function(B){return this.length>B.length?this.clone().iuand(B):B.clone().iuand(this)},n.prototype.iuxor=function(B){var G,w;this.length>B.length?(G=this,w=B):(G=B,w=this);for(var W=0;W<w.length;W++)this.words[W]=G.words[W]^w.words[W];if(this!==G)for(;W<G.length;W++)this.words[W]=G.words[W];return this.length=G.length,this._strip()},n.prototype.ixor=function(B){return s((this.negative|B.negative)==0),this.iuxor(B)},n.prototype.xor=function(B){return this.length>B.length?this.clone().ixor(B):B.clone().ixor(this)},n.prototype.uxor=function(B){return this.length>B.length?this.clone().iuxor(B):B.clone().iuxor(this)},n.prototype.inotn=function(B){s(typeof B=="number"&&B>=0);var G=0|Math.ceil(B/26),w=B%26;this._expand(G),w>0&&G--;for(var W=0;W<G;W++)this.words[W]=67108863&~this.words[W];return w>0&&(this.words[W]=~this.words[W]&67108863>>26-w),this._strip()},n.prototype.notn=function(B){return this.clone().inotn(B)},n.prototype.setn=function(B,G){s(typeof B=="number"&&B>=0);var w=B/26|0,W=B%26;return this._expand(w+1),this.words[w]=G?this.words[w]|1<<W:this.words[w]&~(1<<W),this._strip()},n.prototype.iadd=function(B){var G,w,W;if(this.negative!==0&&B.negative===0)return this.negative=0,G=this.isub(B),this.negative^=1,this._normSign();if(this.negative===0&&B.negative!==0)return B.negative=0,G=this.isub(B),B.negative=1,G._normSign();this.length>B.length?(w=this,W=B):(w=B,W=this);for(var y=0,f=0;f<W.length;f++)G=(0|w.words[f])+(0|W.words[f])+y,this.words[f]=67108863&G,y=G>>>26;for(;y!==0&&f<w.length;f++)G=(0|w.words[f])+y,this.words[f]=67108863&G,y=G>>>26;if(this.length=w.length,y!==0)this.words[this.length]=y,this.length++;else if(w!==this)for(;f<w.length;f++)this.words[f]=w.words[f];return this},n.prototype.add=function(B){var G;return B.negative!==0&&this.negative===0?(B.negative=0,G=this.sub(B),B.negative^=1,G):B.negative===0&&this.negative!==0?(this.negative=0,G=B.sub(this),this.negative=1,G):this.length>B.length?this.clone().iadd(B):B.clone().iadd(this)},n.prototype.isub=function(B){if(B.negative!==0){B.negative=0;var G=this.iadd(B);return B.negative=1,G._normSign()}if(this.negative!==0)return this.negative=0,this.iadd(B),this.negative=1,this._normSign();var w,W,y=this.cmp(B);if(y===0)return this.negative=0,this.length=1,this.words[0]=0,this;y>0?(w=this,W=B):(w=B,W=this);for(var f=0,D=0;D<W.length;D++)f=(G=(0|w.words[D])-(0|W.words[D])+f)>>26,this.words[D]=67108863&G;for(;f!==0&&D<w.length;D++)f=(G=(0|w.words[D])+f)>>26,this.words[D]=67108863&G;if(f===0&&D<w.length&&w!==this)for(;D<w.length;D++)this.words[D]=w.words[D];return this.length=Math.max(this.length,D),w!==this&&(this.negative=1),this._strip()},n.prototype.sub=function(B){return this.clone().isub(B)};var p=function(B,G,w){var W,y,f,D=B.words,F=G.words,T=w.words,Q=0,P=0|D[0],L=8191&P,E=P>>>13,J=0|D[1],k=8191&J,j=J>>>13,q=0|D[2],tg=8191&q,Cg=q>>>13,x=0|D[3],sg=8191&x,Ag=x>>>13,O=0|D[4],_=8191&O,Ig=O>>>13,ng=0|D[5],ag=8191&ng,lg=ng>>>13,cg=0|D[6],dg=8191&cg,hg=cg>>>13,rg=0|D[7],Wg=8191&rg,Gg=rg>>>13,Sg=0|D[8],Kg=8191&Sg,kg=Sg>>>13,yg=0|D[9],Vg=8191&yg,pg=yg>>>13,Hg=0|F[0],Jg=8191&Hg,zg=Hg>>>13,aI=0|F[1],BI=8191&aI,Ug=aI>>>13,lI=0|F[2],oI=8191&lI,Eg=lI>>>13,LI=0|F[3],fI=8191&LI,tI=LI>>>13,WI=0|F[4],QI=8191&WI,nI=WI>>>13,kI=0|F[5],Bg=8191&kI,hI=kI>>>13,bg=0|F[6],ug=8191&bg,fg=bg>>>13,Tg=0|F[7],cI=8191&Tg,jg=Tg>>>13,mI=0|F[8],sI=8191&mI,gI=mI>>>13,pI=0|F[9],bI=8191&pI,yI=pI>>>13;w.negative=B.negative^G.negative,w.length=19;var wC=(Q+(W=Math.imul(L,Jg))|0)+((8191&(y=(y=Math.imul(L,zg))+Math.imul(E,Jg)|0))<<13)|0;Q=((f=Math.imul(E,zg))+(y>>>13)|0)+(wC>>>26)|0,wC&=67108863,W=Math.imul(k,Jg),y=(y=Math.imul(k,zg))+Math.imul(j,Jg)|0,f=Math.imul(j,zg);var _I=(Q+(W=W+Math.imul(L,BI)|0)|0)+((8191&(y=(y=y+Math.imul(L,Ug)|0)+Math.imul(E,BI)|0))<<13)|0;Q=((f=f+Math.imul(E,Ug)|0)+(y>>>13)|0)+(_I>>>26)|0,_I&=67108863,W=Math.imul(tg,Jg),y=(y=Math.imul(tg,zg))+Math.imul(Cg,Jg)|0,f=Math.imul(Cg,zg),W=W+Math.imul(k,BI)|0,y=(y=y+Math.imul(k,Ug)|0)+Math.imul(j,BI)|0,f=f+Math.imul(j,Ug)|0;var _C=(Q+(W=W+Math.imul(L,oI)|0)|0)+((8191&(y=(y=y+Math.imul(L,Eg)|0)+Math.imul(E,oI)|0))<<13)|0;Q=((f=f+Math.imul(E,Eg)|0)+(y>>>13)|0)+(_C>>>26)|0,_C&=67108863,W=Math.imul(sg,Jg),y=(y=Math.imul(sg,zg))+Math.imul(Ag,Jg)|0,f=Math.imul(Ag,zg),W=W+Math.imul(tg,BI)|0,y=(y=y+Math.imul(tg,Ug)|0)+Math.imul(Cg,BI)|0,f=f+Math.imul(Cg,Ug)|0,W=W+Math.imul(k,oI)|0,y=(y=y+Math.imul(k,Eg)|0)+Math.imul(j,oI)|0,f=f+Math.imul(j,Eg)|0;var nC=(Q+(W=W+Math.imul(L,fI)|0)|0)+((8191&(y=(y=y+Math.imul(L,tI)|0)+Math.imul(E,fI)|0))<<13)|0;Q=((f=f+Math.imul(E,tI)|0)+(y>>>13)|0)+(nC>>>26)|0,nC&=67108863,W=Math.imul(_,Jg),y=(y=Math.imul(_,zg))+Math.imul(Ig,Jg)|0,f=Math.imul(Ig,zg),W=W+Math.imul(sg,BI)|0,y=(y=y+Math.imul(sg,Ug)|0)+Math.imul(Ag,BI)|0,f=f+Math.imul(Ag,Ug)|0,W=W+Math.imul(tg,oI)|0,y=(y=y+Math.imul(tg,Eg)|0)+Math.imul(Cg,oI)|0,f=f+Math.imul(Cg,Eg)|0,W=W+Math.imul(k,fI)|0,y=(y=y+Math.imul(k,tI)|0)+Math.imul(j,fI)|0,f=f+Math.imul(j,tI)|0;var Ft=(Q+(W=W+Math.imul(L,QI)|0)|0)+((8191&(y=(y=y+Math.imul(L,nI)|0)+Math.imul(E,QI)|0))<<13)|0;Q=((f=f+Math.imul(E,nI)|0)+(y>>>13)|0)+(Ft>>>26)|0,Ft&=67108863,W=Math.imul(ag,Jg),y=(y=Math.imul(ag,zg))+Math.imul(lg,Jg)|0,f=Math.imul(lg,zg),W=W+Math.imul(_,BI)|0,y=(y=y+Math.imul(_,Ug)|0)+Math.imul(Ig,BI)|0,f=f+Math.imul(Ig,Ug)|0,W=W+Math.imul(sg,oI)|0,y=(y=y+Math.imul(sg,Eg)|0)+Math.imul(Ag,oI)|0,f=f+Math.imul(Ag,Eg)|0,W=W+Math.imul(tg,fI)|0,y=(y=y+Math.imul(tg,tI)|0)+Math.imul(Cg,fI)|0,f=f+Math.imul(Cg,tI)|0,W=W+Math.imul(k,QI)|0,y=(y=y+Math.imul(k,nI)|0)+Math.imul(j,QI)|0,f=f+Math.imul(j,nI)|0;var og=(Q+(W=W+Math.imul(L,Bg)|0)|0)+((8191&(y=(y=y+Math.imul(L,hI)|0)+Math.imul(E,Bg)|0))<<13)|0;Q=((f=f+Math.imul(E,hI)|0)+(y>>>13)|0)+(og>>>26)|0,og&=67108863,W=Math.imul(dg,Jg),y=(y=Math.imul(dg,zg))+Math.imul(hg,Jg)|0,f=Math.imul(hg,zg),W=W+Math.imul(ag,BI)|0,y=(y=y+Math.imul(ag,Ug)|0)+Math.imul(lg,BI)|0,f=f+Math.imul(lg,Ug)|0,W=W+Math.imul(_,oI)|0,y=(y=y+Math.imul(_,Eg)|0)+Math.imul(Ig,oI)|0,f=f+Math.imul(Ig,Eg)|0,W=W+Math.imul(sg,fI)|0,y=(y=y+Math.imul(sg,tI)|0)+Math.imul(Ag,fI)|0,f=f+Math.imul(Ag,tI)|0,W=W+Math.imul(tg,QI)|0,y=(y=y+Math.imul(tg,nI)|0)+Math.imul(Cg,QI)|0,f=f+Math.imul(Cg,nI)|0,W=W+Math.imul(k,Bg)|0,y=(y=y+Math.imul(k,hI)|0)+Math.imul(j,Bg)|0,f=f+Math.imul(j,hI)|0;var Zg=(Q+(W=W+Math.imul(L,ug)|0)|0)+((8191&(y=(y=y+Math.imul(L,fg)|0)+Math.imul(E,ug)|0))<<13)|0;Q=((f=f+Math.imul(E,fg)|0)+(y>>>13)|0)+(Zg>>>26)|0,Zg&=67108863,W=Math.imul(Wg,Jg),y=(y=Math.imul(Wg,zg))+Math.imul(Gg,Jg)|0,f=Math.imul(Gg,zg),W=W+Math.imul(dg,BI)|0,y=(y=y+Math.imul(dg,Ug)|0)+Math.imul(hg,BI)|0,f=f+Math.imul(hg,Ug)|0,W=W+Math.imul(ag,oI)|0,y=(y=y+Math.imul(ag,Eg)|0)+Math.imul(lg,oI)|0,f=f+Math.imul(lg,Eg)|0,W=W+Math.imul(_,fI)|0,y=(y=y+Math.imul(_,tI)|0)+Math.imul(Ig,fI)|0,f=f+Math.imul(Ig,tI)|0,W=W+Math.imul(sg,QI)|0,y=(y=y+Math.imul(sg,nI)|0)+Math.imul(Ag,QI)|0,f=f+Math.imul(Ag,nI)|0,W=W+Math.imul(tg,Bg)|0,y=(y=y+Math.imul(tg,hI)|0)+Math.imul(Cg,Bg)|0,f=f+Math.imul(Cg,hI)|0,W=W+Math.imul(k,ug)|0,y=(y=y+Math.imul(k,fg)|0)+Math.imul(j,ug)|0,f=f+Math.imul(j,fg)|0;var Dg=(Q+(W=W+Math.imul(L,cI)|0)|0)+((8191&(y=(y=y+Math.imul(L,jg)|0)+Math.imul(E,cI)|0))<<13)|0;Q=((f=f+Math.imul(E,jg)|0)+(y>>>13)|0)+(Dg>>>26)|0,Dg&=67108863,W=Math.imul(Kg,Jg),y=(y=Math.imul(Kg,zg))+Math.imul(kg,Jg)|0,f=Math.imul(kg,zg),W=W+Math.imul(Wg,BI)|0,y=(y=y+Math.imul(Wg,Ug)|0)+Math.imul(Gg,BI)|0,f=f+Math.imul(Gg,Ug)|0,W=W+Math.imul(dg,oI)|0,y=(y=y+Math.imul(dg,Eg)|0)+Math.imul(hg,oI)|0,f=f+Math.imul(hg,Eg)|0,W=W+Math.imul(ag,fI)|0,y=(y=y+Math.imul(ag,tI)|0)+Math.imul(lg,fI)|0,f=f+Math.imul(lg,tI)|0,W=W+Math.imul(_,QI)|0,y=(y=y+Math.imul(_,nI)|0)+Math.imul(Ig,QI)|0,f=f+Math.imul(Ig,nI)|0,W=W+Math.imul(sg,Bg)|0,y=(y=y+Math.imul(sg,hI)|0)+Math.imul(Ag,Bg)|0,f=f+Math.imul(Ag,hI)|0,W=W+Math.imul(tg,ug)|0,y=(y=y+Math.imul(tg,fg)|0)+Math.imul(Cg,ug)|0,f=f+Math.imul(Cg,fg)|0,W=W+Math.imul(k,cI)|0,y=(y=y+Math.imul(k,jg)|0)+Math.imul(j,cI)|0,f=f+Math.imul(j,jg)|0;var Fg=(Q+(W=W+Math.imul(L,sI)|0)|0)+((8191&(y=(y=y+Math.imul(L,gI)|0)+Math.imul(E,sI)|0))<<13)|0;Q=((f=f+Math.imul(E,gI)|0)+(y>>>13)|0)+(Fg>>>26)|0,Fg&=67108863,W=Math.imul(Vg,Jg),y=(y=Math.imul(Vg,zg))+Math.imul(pg,Jg)|0,f=Math.imul(pg,zg),W=W+Math.imul(Kg,BI)|0,y=(y=y+Math.imul(Kg,Ug)|0)+Math.imul(kg,BI)|0,f=f+Math.imul(kg,Ug)|0,W=W+Math.imul(Wg,oI)|0,y=(y=y+Math.imul(Wg,Eg)|0)+Math.imul(Gg,oI)|0,f=f+Math.imul(Gg,Eg)|0,W=W+Math.imul(dg,fI)|0,y=(y=y+Math.imul(dg,tI)|0)+Math.imul(hg,fI)|0,f=f+Math.imul(hg,tI)|0,W=W+Math.imul(ag,QI)|0,y=(y=y+Math.imul(ag,nI)|0)+Math.imul(lg,QI)|0,f=f+Math.imul(lg,nI)|0,W=W+Math.imul(_,Bg)|0,y=(y=y+Math.imul(_,hI)|0)+Math.imul(Ig,Bg)|0,f=f+Math.imul(Ig,hI)|0,W=W+Math.imul(sg,ug)|0,y=(y=y+Math.imul(sg,fg)|0)+Math.imul(Ag,ug)|0,f=f+Math.imul(Ag,fg)|0,W=W+Math.imul(tg,cI)|0,y=(y=y+Math.imul(tg,jg)|0)+Math.imul(Cg,cI)|0,f=f+Math.imul(Cg,jg)|0,W=W+Math.imul(k,sI)|0,y=(y=y+Math.imul(k,gI)|0)+Math.imul(j,sI)|0,f=f+Math.imul(j,gI)|0;var II=(Q+(W=W+Math.imul(L,bI)|0)|0)+((8191&(y=(y=y+Math.imul(L,yI)|0)+Math.imul(E,bI)|0))<<13)|0;Q=((f=f+Math.imul(E,yI)|0)+(y>>>13)|0)+(II>>>26)|0,II&=67108863,W=Math.imul(Vg,BI),y=(y=Math.imul(Vg,Ug))+Math.imul(pg,BI)|0,f=Math.imul(pg,Ug),W=W+Math.imul(Kg,oI)|0,y=(y=y+Math.imul(Kg,Eg)|0)+Math.imul(kg,oI)|0,f=f+Math.imul(kg,Eg)|0,W=W+Math.imul(Wg,fI)|0,y=(y=y+Math.imul(Wg,tI)|0)+Math.imul(Gg,fI)|0,f=f+Math.imul(Gg,tI)|0,W=W+Math.imul(dg,QI)|0,y=(y=y+Math.imul(dg,nI)|0)+Math.imul(hg,QI)|0,f=f+Math.imul(hg,nI)|0,W=W+Math.imul(ag,Bg)|0,y=(y=y+Math.imul(ag,hI)|0)+Math.imul(lg,Bg)|0,f=f+Math.imul(lg,hI)|0,W=W+Math.imul(_,ug)|0,y=(y=y+Math.imul(_,fg)|0)+Math.imul(Ig,ug)|0,f=f+Math.imul(Ig,fg)|0,W=W+Math.imul(sg,cI)|0,y=(y=y+Math.imul(sg,jg)|0)+Math.imul(Ag,cI)|0,f=f+Math.imul(Ag,jg)|0,W=W+Math.imul(tg,sI)|0,y=(y=y+Math.imul(tg,gI)|0)+Math.imul(Cg,sI)|0,f=f+Math.imul(Cg,gI)|0;var vg=(Q+(W=W+Math.imul(k,bI)|0)|0)+((8191&(y=(y=y+Math.imul(k,yI)|0)+Math.imul(j,bI)|0))<<13)|0;Q=((f=f+Math.imul(j,yI)|0)+(y>>>13)|0)+(vg>>>26)|0,vg&=67108863,W=Math.imul(Vg,oI),y=(y=Math.imul(Vg,Eg))+Math.imul(pg,oI)|0,f=Math.imul(pg,Eg),W=W+Math.imul(Kg,fI)|0,y=(y=y+Math.imul(Kg,tI)|0)+Math.imul(kg,fI)|0,f=f+Math.imul(kg,tI)|0,W=W+Math.imul(Wg,QI)|0,y=(y=y+Math.imul(Wg,nI)|0)+Math.imul(Gg,QI)|0,f=f+Math.imul(Gg,nI)|0,W=W+Math.imul(dg,Bg)|0,y=(y=y+Math.imul(dg,hI)|0)+Math.imul(hg,Bg)|0,f=f+Math.imul(hg,hI)|0,W=W+Math.imul(ag,ug)|0,y=(y=y+Math.imul(ag,fg)|0)+Math.imul(lg,ug)|0,f=f+Math.imul(lg,fg)|0,W=W+Math.imul(_,cI)|0,y=(y=y+Math.imul(_,jg)|0)+Math.imul(Ig,cI)|0,f=f+Math.imul(Ig,jg)|0,W=W+Math.imul(sg,sI)|0,y=(y=y+Math.imul(sg,gI)|0)+Math.imul(Ag,sI)|0,f=f+Math.imul(Ag,gI)|0;var xg=(Q+(W=W+Math.imul(tg,bI)|0)|0)+((8191&(y=(y=y+Math.imul(tg,yI)|0)+Math.imul(Cg,bI)|0))<<13)|0;Q=((f=f+Math.imul(Cg,yI)|0)+(y>>>13)|0)+(xg>>>26)|0,xg&=67108863,W=Math.imul(Vg,fI),y=(y=Math.imul(Vg,tI))+Math.imul(pg,fI)|0,f=Math.imul(pg,tI),W=W+Math.imul(Kg,QI)|0,y=(y=y+Math.imul(Kg,nI)|0)+Math.imul(kg,QI)|0,f=f+Math.imul(kg,nI)|0,W=W+Math.imul(Wg,Bg)|0,y=(y=y+Math.imul(Wg,hI)|0)+Math.imul(Gg,Bg)|0,f=f+Math.imul(Gg,hI)|0,W=W+Math.imul(dg,ug)|0,y=(y=y+Math.imul(dg,fg)|0)+Math.imul(hg,ug)|0,f=f+Math.imul(hg,fg)|0,W=W+Math.imul(ag,cI)|0,y=(y=y+Math.imul(ag,jg)|0)+Math.imul(lg,cI)|0,f=f+Math.imul(lg,jg)|0,W=W+Math.imul(_,sI)|0,y=(y=y+Math.imul(_,gI)|0)+Math.imul(Ig,sI)|0,f=f+Math.imul(Ig,gI)|0;var zI=(Q+(W=W+Math.imul(sg,bI)|0)|0)+((8191&(y=(y=y+Math.imul(sg,yI)|0)+Math.imul(Ag,bI)|0))<<13)|0;Q=((f=f+Math.imul(Ag,yI)|0)+(y>>>13)|0)+(zI>>>26)|0,zI&=67108863,W=Math.imul(Vg,QI),y=(y=Math.imul(Vg,nI))+Math.imul(pg,QI)|0,f=Math.imul(pg,nI),W=W+Math.imul(Kg,Bg)|0,y=(y=y+Math.imul(Kg,hI)|0)+Math.imul(kg,Bg)|0,f=f+Math.imul(kg,hI)|0,W=W+Math.imul(Wg,ug)|0,y=(y=y+Math.imul(Wg,fg)|0)+Math.imul(Gg,ug)|0,f=f+Math.imul(Gg,fg)|0,W=W+Math.imul(dg,cI)|0,y=(y=y+Math.imul(dg,jg)|0)+Math.imul(hg,cI)|0,f=f+Math.imul(hg,jg)|0,W=W+Math.imul(ag,sI)|0,y=(y=y+Math.imul(ag,gI)|0)+Math.imul(lg,sI)|0,f=f+Math.imul(lg,gI)|0;var VI=(Q+(W=W+Math.imul(_,bI)|0)|0)+((8191&(y=(y=y+Math.imul(_,yI)|0)+Math.imul(Ig,bI)|0))<<13)|0;Q=((f=f+Math.imul(Ig,yI)|0)+(y>>>13)|0)+(VI>>>26)|0,VI&=67108863,W=Math.imul(Vg,Bg),y=(y=Math.imul(Vg,hI))+Math.imul(pg,Bg)|0,f=Math.imul(pg,hI),W=W+Math.imul(Kg,ug)|0,y=(y=y+Math.imul(Kg,fg)|0)+Math.imul(kg,ug)|0,f=f+Math.imul(kg,fg)|0,W=W+Math.imul(Wg,cI)|0,y=(y=y+Math.imul(Wg,jg)|0)+Math.imul(Gg,cI)|0,f=f+Math.imul(Gg,jg)|0,W=W+Math.imul(dg,sI)|0,y=(y=y+Math.imul(dg,gI)|0)+Math.imul(hg,sI)|0,f=f+Math.imul(hg,gI)|0;var YI=(Q+(W=W+Math.imul(ag,bI)|0)|0)+((8191&(y=(y=y+Math.imul(ag,yI)|0)+Math.imul(lg,bI)|0))<<13)|0;Q=((f=f+Math.imul(lg,yI)|0)+(y>>>13)|0)+(YI>>>26)|0,YI&=67108863,W=Math.imul(Vg,ug),y=(y=Math.imul(Vg,fg))+Math.imul(pg,ug)|0,f=Math.imul(pg,fg),W=W+Math.imul(Kg,cI)|0,y=(y=y+Math.imul(Kg,jg)|0)+Math.imul(kg,cI)|0,f=f+Math.imul(kg,jg)|0,W=W+Math.imul(Wg,sI)|0,y=(y=y+Math.imul(Wg,gI)|0)+Math.imul(Gg,sI)|0,f=f+Math.imul(Gg,gI)|0;var dI=(Q+(W=W+Math.imul(dg,bI)|0)|0)+((8191&(y=(y=y+Math.imul(dg,yI)|0)+Math.imul(hg,bI)|0))<<13)|0;Q=((f=f+Math.imul(hg,yI)|0)+(y>>>13)|0)+(dI>>>26)|0,dI&=67108863,W=Math.imul(Vg,cI),y=(y=Math.imul(Vg,jg))+Math.imul(pg,cI)|0,f=Math.imul(pg,jg),W=W+Math.imul(Kg,sI)|0,y=(y=y+Math.imul(Kg,gI)|0)+Math.imul(kg,sI)|0,f=f+Math.imul(kg,gI)|0;var CC=(Q+(W=W+Math.imul(Wg,bI)|0)|0)+((8191&(y=(y=y+Math.imul(Wg,yI)|0)+Math.imul(Gg,bI)|0))<<13)|0;Q=((f=f+Math.imul(Gg,yI)|0)+(y>>>13)|0)+(CC>>>26)|0,CC&=67108863,W=Math.imul(Vg,sI),y=(y=Math.imul(Vg,gI))+Math.imul(pg,sI)|0,f=Math.imul(pg,gI);var OI=(Q+(W=W+Math.imul(Kg,bI)|0)|0)+((8191&(y=(y=y+Math.imul(Kg,yI)|0)+Math.imul(kg,bI)|0))<<13)|0;Q=((f=f+Math.imul(kg,yI)|0)+(y>>>13)|0)+(OI>>>26)|0,OI&=67108863;var vI=(Q+(W=Math.imul(Vg,bI))|0)+((8191&(y=(y=Math.imul(Vg,yI))+Math.imul(pg,bI)|0))<<13)|0;return Q=((f=Math.imul(pg,yI))+(y>>>13)|0)+(vI>>>26)|0,vI&=67108863,T[0]=wC,T[1]=_I,T[2]=_C,T[3]=nC,T[4]=Ft,T[5]=og,T[6]=Zg,T[7]=Dg,T[8]=Fg,T[9]=II,T[10]=vg,T[11]=xg,T[12]=zI,T[13]=VI,T[14]=YI,T[15]=dI,T[16]=CC,T[17]=OI,T[18]=vI,Q!==0&&(T[19]=Q,w.length++),w};function Y(B,G,w){w.negative=G.negative^B.negative,w.length=B.length+G.length;for(var W=0,y=0,f=0;f<w.length-1;f++){var D=y;y=0;for(var F=67108863&W,T=Math.min(f,G.length-1),Q=Math.max(0,f-B.length+1);Q<=T;Q++){var P=f-Q,L=(0|B.words[P])*(0|G.words[Q]),E=67108863&L;F=67108863&(E=E+F|0),y+=(D=(D=D+(L/67108864|0)|0)+(E>>>26)|0)>>>26,D&=67108863}w.words[f]=F,W=D,D=y}return W!==0?w.words[f]=W:w.length--,w._strip()}function R(B,G,w){return Y(B,G,w)}Math.imul||(p=Z),n.prototype.mulTo=function(B,G){var w=this.length+B.length;return this.length===10&&B.length===10?p(this,B,G):w<63?Z(this,B,G):w<1024?Y(this,B,G):R(this,B,G)},n.prototype.mul=function(B){var G=new n(null);return G.words=new Array(this.length+B.length),this.mulTo(B,G)},n.prototype.mulf=function(B){var G=new n(null);return G.words=new Array(this.length+B.length),R(this,B,G)},n.prototype.imul=function(B){return this.clone().mulTo(B,this)},n.prototype.imuln=function(B){var G=B<0;G&&(B=-B),s(typeof B=="number"),s(B<67108864);for(var w=0,W=0;W<this.length;W++){var y=(0|this.words[W])*B,f=(67108863&y)+(67108863&w);w>>=26,w+=y/67108864|0,w+=f>>>26,this.words[W]=67108863&f}return w!==0&&(this.words[W]=w,this.length++),G?this.ineg():this},n.prototype.muln=function(B){return this.clone().imuln(B)},n.prototype.sqr=function(){return this.mul(this)},n.prototype.isqr=function(){return this.imul(this.clone())},n.prototype.pow=function(B){var G=function(f){for(var D=new Array(f.bitLength()),F=0;F<D.length;F++){var T=F/26|0,Q=F%26;D[F]=f.words[T]>>>Q&1}return D}(B);if(G.length===0)return new n(1);for(var w=this,W=0;W<G.length&&G[W]===0;W++,w=w.sqr());if(++W<G.length)for(var y=w.sqr();W<G.length;W++,y=y.sqr())G[W]!==0&&(w=w.mul(y));return w},n.prototype.iushln=function(B){s(typeof B=="number"&&B>=0);var G,w=B%26,W=(B-w)/26,y=67108863>>>26-w<<26-w;if(w!==0){var f=0;for(G=0;G<this.length;G++){var D=this.words[G]&y,F=(0|this.words[G])-D<<w;this.words[G]=F|f,f=D>>>26-w}f&&(this.words[G]=f,this.length++)}if(W!==0){for(G=this.length-1;G>=0;G--)this.words[G+W]=this.words[G];for(G=0;G<W;G++)this.words[G]=0;this.length+=W}return this._strip()},n.prototype.ishln=function(B){return s(this.negative===0),this.iushln(B)},n.prototype.iushrn=function(B,G,w){var W;s(typeof B=="number"&&B>=0),W=G?(G-G%26)/26:0;var y=B%26,f=Math.min((B-y)/26,this.length),D=67108863^67108863>>>y<<y,F=w;if(W-=f,W=Math.max(0,W),F){for(var T=0;T<f;T++)F.words[T]=this.words[T];F.length=f}if(f!==0)if(this.length>f)for(this.length-=f,T=0;T<this.length;T++)this.words[T]=this.words[T+f];else this.words[0]=0,this.length=1;var Q=0;for(T=this.length-1;T>=0&&(Q!==0||T>=W);T--){var P=0|this.words[T];this.words[T]=Q<<26-y|P>>>y,Q=P&D}return F&&Q!==0&&(F.words[F.length++]=Q),this.length===0&&(this.words[0]=0,this.length=1),this._strip()},n.prototype.ishrn=function(B,G,w){return s(this.negative===0),this.iushrn(B,G,w)},n.prototype.shln=function(B){return this.clone().ishln(B)},n.prototype.ushln=function(B){return this.clone().iushln(B)},n.prototype.shrn=function(B){return this.clone().ishrn(B)},n.prototype.ushrn=function(B){return this.clone().iushrn(B)},n.prototype.testn=function(B){s(typeof B=="number"&&B>=0);var G=B%26,w=(B-G)/26,W=1<<G;return!(this.length<=w)&&!!(this.words[w]&W)},n.prototype.imaskn=function(B){s(typeof B=="number"&&B>=0);var G=B%26,w=(B-G)/26;if(s(this.negative===0,"imaskn works only with positive numbers"),this.length<=w)return this;if(G!==0&&w++,this.length=Math.min(w,this.length),G!==0){var W=67108863^67108863>>>G<<G;this.words[this.length-1]&=W}return this._strip()},n.prototype.maskn=function(B){return this.clone().imaskn(B)},n.prototype.iaddn=function(B){return s(typeof B=="number"),s(B<67108864),B<0?this.isubn(-B):this.negative!==0?this.length===1&&(0|this.words[0])<=B?(this.words[0]=B-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(B),this.negative=1,this):this._iaddn(B)},n.prototype._iaddn=function(B){this.words[0]+=B;for(var G=0;G<this.length&&this.words[G]>=67108864;G++)this.words[G]-=67108864,G===this.length-1?this.words[G+1]=1:this.words[G+1]++;return this.length=Math.max(this.length,G+1),this},n.prototype.isubn=function(B){if(s(typeof B=="number"),s(B<67108864),B<0)return this.iaddn(-B);if(this.negative!==0)return this.negative=0,this.iaddn(B),this.negative=1,this;if(this.words[0]-=B,this.length===1&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var G=0;G<this.length&&this.words[G]<0;G++)this.words[G]+=67108864,this.words[G+1]-=1;return this._strip()},n.prototype.addn=function(B){return this.clone().iaddn(B)},n.prototype.subn=function(B){return this.clone().isubn(B)},n.prototype.iabs=function(){return this.negative=0,this},n.prototype.abs=function(){return this.clone().iabs()},n.prototype._ishlnsubmul=function(B,G,w){var W,y,f=B.length+w;this._expand(f);var D=0;for(W=0;W<B.length;W++){y=(0|this.words[W+w])+D;var F=(0|B.words[W])*G;D=((y-=67108863&F)>>26)-(F/67108864|0),this.words[W+w]=67108863&y}for(;W<this.length-w;W++)D=(y=(0|this.words[W+w])+D)>>26,this.words[W+w]=67108863&y;if(D===0)return this._strip();for(s(D===-1),D=0,W=0;W<this.length;W++)D=(y=-(0|this.words[W])+D)>>26,this.words[W]=67108863&y;return this.negative=1,this._strip()},n.prototype._wordDiv=function(B,G){var w=(this.length,B.length),W=this.clone(),y=B,f=0|y.words[y.length-1];(w=26-this._countBits(f))!==0&&(y=y.ushln(w),W.iushln(w),f=0|y.words[y.length-1]);var D,F=W.length-y.length;if(G!=="mod"){(D=new n(null)).length=F+1,D.words=new Array(D.length);for(var T=0;T<D.length;T++)D.words[T]=0}var Q=W.clone()._ishlnsubmul(y,1,F);Q.negative===0&&(W=Q,D&&(D.words[F]=1));for(var P=F-1;P>=0;P--){var L=67108864*(0|W.words[y.length+P])+(0|W.words[y.length+P-1]);for(L=Math.min(L/f|0,67108863),W._ishlnsubmul(y,L,P);W.negative!==0;)L--,W.negative=0,W._ishlnsubmul(y,1,P),W.isZero()||(W.negative^=1);D&&(D.words[P]=L)}return D&&D._strip(),W._strip(),G!=="div"&&w!==0&&W.iushrn(w),{div:D||null,mod:W}},n.prototype.divmod=function(B,G,w){return s(!B.isZero()),this.isZero()?{div:new n(0),mod:new n(0)}:this.negative!==0&&B.negative===0?(f=this.neg().divmod(B,G),G!=="mod"&&(W=f.div.neg()),G!=="div"&&(y=f.mod.neg(),w&&y.negative!==0&&y.iadd(B)),{div:W,mod:y}):this.negative===0&&B.negative!==0?(f=this.divmod(B.neg(),G),G!=="mod"&&(W=f.div.neg()),{div:W,mod:f.mod}):(this.negative&B.negative)!=0?(f=this.neg().divmod(B.neg(),G),G!=="div"&&(y=f.mod.neg(),w&&y.negative!==0&&y.isub(B)),{div:f.div,mod:y}):B.length>this.length||this.cmp(B)<0?{div:new n(0),mod:this}:B.length===1?G==="div"?{div:this.divn(B.words[0]),mod:null}:G==="mod"?{div:null,mod:new n(this.modrn(B.words[0]))}:{div:this.divn(B.words[0]),mod:new n(this.modrn(B.words[0]))}:this._wordDiv(B,G);var W,y,f},n.prototype.div=function(B){return this.divmod(B,"div",!1).div},n.prototype.mod=function(B){return this.divmod(B,"mod",!1).mod},n.prototype.umod=function(B){return this.divmod(B,"mod",!0).mod},n.prototype.divRound=function(B){var G=this.divmod(B);if(G.mod.isZero())return G.div;var w=G.div.negative!==0?G.mod.isub(B):G.mod,W=B.ushrn(1),y=B.andln(1),f=w.cmp(W);return f<0||y===1&&f===0?G.div:G.div.negative!==0?G.div.isubn(1):G.div.iaddn(1)},n.prototype.modrn=function(B){var G=B<0;G&&(B=-B),s(B<=67108863);for(var w=(1<<26)%B,W=0,y=this.length-1;y>=0;y--)W=(w*W+(0|this.words[y]))%B;return G?-W:W},n.prototype.modn=function(B){return this.modrn(B)},n.prototype.idivn=function(B){var G=B<0;G&&(B=-B),s(B<=67108863);for(var w=0,W=this.length-1;W>=0;W--){var y=(0|this.words[W])+67108864*w;this.words[W]=y/B|0,w=y%B}return this._strip(),G?this.ineg():this},n.prototype.divn=function(B){return this.clone().idivn(B)},n.prototype.egcd=function(B){s(B.negative===0),s(!B.isZero());var G=this,w=B.clone();G=G.negative!==0?G.umod(B):G.clone();for(var W=new n(1),y=new n(0),f=new n(0),D=new n(1),F=0;G.isEven()&&w.isEven();)G.iushrn(1),w.iushrn(1),++F;for(var T=w.clone(),Q=G.clone();!G.isZero();){for(var P=0,L=1;(G.words[0]&L)==0&&P<26;++P,L<<=1);if(P>0)for(G.iushrn(P);P-- >0;)(W.isOdd()||y.isOdd())&&(W.iadd(T),y.isub(Q)),W.iushrn(1),y.iushrn(1);for(var E=0,J=1;(w.words[0]&J)==0&&E<26;++E,J<<=1);if(E>0)for(w.iushrn(E);E-- >0;)(f.isOdd()||D.isOdd())&&(f.iadd(T),D.isub(Q)),f.iushrn(1),D.iushrn(1);G.cmp(w)>=0?(G.isub(w),W.isub(f),y.isub(D)):(w.isub(G),f.isub(W),D.isub(y))}return{a:f,b:D,gcd:w.iushln(F)}},n.prototype._invmp=function(B){s(B.negative===0),s(!B.isZero());var G=this,w=B.clone();G=G.negative!==0?G.umod(B):G.clone();for(var W,y=new n(1),f=new n(0),D=w.clone();G.cmpn(1)>0&&w.cmpn(1)>0;){for(var F=0,T=1;(G.words[0]&T)==0&&F<26;++F,T<<=1);if(F>0)for(G.iushrn(F);F-- >0;)y.isOdd()&&y.iadd(D),y.iushrn(1);for(var Q=0,P=1;(w.words[0]&P)==0&&Q<26;++Q,P<<=1);if(Q>0)for(w.iushrn(Q);Q-- >0;)f.isOdd()&&f.iadd(D),f.iushrn(1);G.cmp(w)>=0?(G.isub(w),y.isub(f)):(w.isub(G),f.isub(y))}return(W=G.cmpn(1)===0?y:f).cmpn(0)<0&&W.iadd(B),W},n.prototype.gcd=function(B){if(this.isZero())return B.abs();if(B.isZero())return this.abs();var G=this.clone(),w=B.clone();G.negative=0,w.negative=0;for(var W=0;G.isEven()&&w.isEven();W++)G.iushrn(1),w.iushrn(1);for(;;){for(;G.isEven();)G.iushrn(1);for(;w.isEven();)w.iushrn(1);var y=G.cmp(w);if(y<0){var f=G;G=w,w=f}else if(y===0||w.cmpn(1)===0)break;G.isub(w)}return w.iushln(W)},n.prototype.invm=function(B){return this.egcd(B).a.umod(B)},n.prototype.isEven=function(){return(1&this.words[0])==0},n.prototype.isOdd=function(){return(1&this.words[0])==1},n.prototype.andln=function(B){return this.words[0]&B},n.prototype.bincn=function(B){s(typeof B=="number");var G=B%26,w=(B-G)/26,W=1<<G;if(this.length<=w)return this._expand(w+1),this.words[w]|=W,this;for(var y=W,f=w;y!==0&&f<this.length;f++){var D=0|this.words[f];y=(D+=y)>>>26,D&=67108863,this.words[f]=D}return y!==0&&(this.words[f]=y,this.length++),this},n.prototype.isZero=function(){return this.length===1&&this.words[0]===0},n.prototype.cmpn=function(B){var G,w=B<0;if(this.negative!==0&&!w)return-1;if(this.negative===0&&w)return 1;if(this._strip(),this.length>1)G=1;else{w&&(B=-B),s(B<=67108863,"Number is too big");var W=0|this.words[0];G=W===B?0:W<B?-1:1}return this.negative!==0?0|-G:G},n.prototype.cmp=function(B){if(this.negative!==0&&B.negative===0)return-1;if(this.negative===0&&B.negative!==0)return 1;var G=this.ucmp(B);return this.negative!==0?0|-G:G},n.prototype.ucmp=function(B){if(this.length>B.length)return 1;if(this.length<B.length)return-1;for(var G=0,w=this.length-1;w>=0;w--){var W=0|this.words[w],y=0|B.words[w];if(W!==y){W<y?G=-1:W>y&&(G=1);break}}return G},n.prototype.gtn=function(B){return this.cmpn(B)===1},n.prototype.gt=function(B){return this.cmp(B)===1},n.prototype.gten=function(B){return this.cmpn(B)>=0},n.prototype.gte=function(B){return this.cmp(B)>=0},n.prototype.ltn=function(B){return this.cmpn(B)===-1},n.prototype.lt=function(B){return this.cmp(B)===-1},n.prototype.lten=function(B){return this.cmpn(B)<=0},n.prototype.lte=function(B){return this.cmp(B)<=0},n.prototype.eqn=function(B){return this.cmpn(B)===0},n.prototype.eq=function(B){return this.cmp(B)===0},n.red=function(B){return new V(B)},n.prototype.toRed=function(B){return s(!this.red,"Already a number in reduction context"),s(this.negative===0,"red works only with positives"),B.convertTo(this)._forceRed(B)},n.prototype.fromRed=function(){return s(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},n.prototype._forceRed=function(B){return this.red=B,this},n.prototype.forceRed=function(B){return s(!this.red,"Already a number in reduction context"),this._forceRed(B)},n.prototype.redAdd=function(B){return s(this.red,"redAdd works only with red numbers"),this.red.add(this,B)},n.prototype.redIAdd=function(B){return s(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,B)},n.prototype.redSub=function(B){return s(this.red,"redSub works only with red numbers"),this.red.sub(this,B)},n.prototype.redISub=function(B){return s(this.red,"redISub works only with red numbers"),this.red.isub(this,B)},n.prototype.redShl=function(B){return s(this.red,"redShl works only with red numbers"),this.red.shl(this,B)},n.prototype.redMul=function(B){return s(this.red,"redMul works only with red numbers"),this.red._verify2(this,B),this.red.mul(this,B)},n.prototype.redIMul=function(B){return s(this.red,"redMul works only with red numbers"),this.red._verify2(this,B),this.red.imul(this,B)},n.prototype.redSqr=function(){return s(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},n.prototype.redISqr=function(){return s(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},n.prototype.redSqrt=function(){return s(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},n.prototype.redInvm=function(){return s(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},n.prototype.redNeg=function(){return s(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},n.prototype.redPow=function(B){return s(this.red&&!B.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,B)};var X={k256:null,p224:null,p192:null,p25519:null};function H(B,G){this.name=B,this.p=new n(G,16),this.n=this.p.bitLength(),this.k=new n(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function S(){H.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function z(){H.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function v(){H.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function K(){H.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function V(B){if(typeof B=="string"){var G=n._prime(B);this.m=G.p,this.prime=G}else s(B.gtn(1),"modulus must be greater than 1"),this.m=B,this.prime=null}function N(B){V.call(this,B),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new n(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}H.prototype._tmp=function(){var B=new n(null);return B.words=new Array(Math.ceil(this.n/13)),B},H.prototype.ireduce=function(B){var G,w=B;do this.split(w,this.tmp),G=(w=(w=this.imulK(w)).iadd(this.tmp)).bitLength();while(G>this.n);var W=G<this.n?-1:w.ucmp(this.p);return W===0?(w.words[0]=0,w.length=1):W>0?w.isub(this.p):w.strip!==void 0?w.strip():w._strip(),w},H.prototype.split=function(B,G){B.iushrn(this.n,0,G)},H.prototype.imulK=function(B){return B.imul(this.k)},l(S,H),S.prototype.split=function(B,G){for(var w=Math.min(B.length,9),W=0;W<w;W++)G.words[W]=B.words[W];if(G.length=w,B.length<=9)return B.words[0]=0,void(B.length=1);var y=B.words[9];for(G.words[G.length++]=4194303&y,W=10;W<B.length;W++){var f=0|B.words[W];B.words[W-10]=(4194303&f)<<4|y>>>22,y=f}y>>>=22,B.words[W-10]=y,y===0&&B.length>10?B.length-=10:B.length-=9},S.prototype.imulK=function(B){B.words[B.length]=0,B.words[B.length+1]=0,B.length+=2;for(var G=0,w=0;w<B.length;w++){var W=0|B.words[w];G+=977*W,B.words[w]=67108863&G,G=64*W+(G/67108864|0)}return B.words[B.length-1]===0&&(B.length--,B.words[B.length-1]===0&&B.length--),B},l(z,H),l(v,H),l(K,H),K.prototype.imulK=function(B){for(var G=0,w=0;w<B.length;w++){var W=19*(0|B.words[w])+G,y=67108863&W;W>>>=26,B.words[w]=y,G=W}return G!==0&&(B.words[B.length++]=G),B},n._prime=function(B){if(X[B])return X[B];var G;if(B==="k256")G=new S;else if(B==="p224")G=new z;else if(B==="p192")G=new v;else{if(B!=="p25519")throw new Error("Unknown prime "+B);G=new K}return X[B]=G,G},V.prototype._verify1=function(B){s(B.negative===0,"red works only with positives"),s(B.red,"red works only with red numbers")},V.prototype._verify2=function(B,G){s((B.negative|G.negative)==0,"red works only with positives"),s(B.red&&B.red===G.red,"red works only with red numbers")},V.prototype.imod=function(B){return this.prime?this.prime.ireduce(B)._forceRed(this):(r(B,B.umod(this.m)._forceRed(this)),B)},V.prototype.neg=function(B){return B.isZero()?B.clone():this.m.sub(B)._forceRed(this)},V.prototype.add=function(B,G){this._verify2(B,G);var w=B.add(G);return w.cmp(this.m)>=0&&w.isub(this.m),w._forceRed(this)},V.prototype.iadd=function(B,G){this._verify2(B,G);var w=B.iadd(G);return w.cmp(this.m)>=0&&w.isub(this.m),w},V.prototype.sub=function(B,G){this._verify2(B,G);var w=B.sub(G);return w.cmpn(0)<0&&w.iadd(this.m),w._forceRed(this)},V.prototype.isub=function(B,G){this._verify2(B,G);var w=B.isub(G);return w.cmpn(0)<0&&w.iadd(this.m),w},V.prototype.shl=function(B,G){return this._verify1(B),this.imod(B.ushln(G))},V.prototype.imul=function(B,G){return this._verify2(B,G),this.imod(B.imul(G))},V.prototype.mul=function(B,G){return this._verify2(B,G),this.imod(B.mul(G))},V.prototype.isqr=function(B){return this.imul(B,B.clone())},V.prototype.sqr=function(B){return this.mul(B,B)},V.prototype.sqrt=function(B){if(B.isZero())return B.clone();var G=this.m.andln(3);if(s(G%2==1),G===3){var w=this.m.add(new n(1)).iushrn(2);return this.pow(B,w)}for(var W=this.m.subn(1),y=0;!W.isZero()&&W.andln(1)===0;)y++,W.iushrn(1);s(!W.isZero());var f=new n(1).toRed(this),D=f.redNeg(),F=this.m.subn(1).iushrn(1),T=this.m.bitLength();for(T=new n(2*T*T).toRed(this);this.pow(T,F).cmp(D)!==0;)T.redIAdd(D);for(var Q=this.pow(T,W),P=this.pow(B,W.addn(1).iushrn(1)),L=this.pow(B,W),E=y;L.cmp(f)!==0;){for(var J=L,k=0;J.cmp(f)!==0;k++)J=J.redSqr();s(k<E);var j=this.pow(Q,new n(1).iushln(E-k-1));P=P.redMul(j),Q=j.redSqr(),L=L.redMul(Q),E=k}return P},V.prototype.invm=function(B){var G=B._invmp(this.m);return G.negative!==0?(G.negative=0,this.imod(G).redNeg()):this.imod(G)},V.prototype.pow=function(B,G){if(G.isZero())return new n(1).toRed(this);if(G.cmpn(1)===0)return B.clone();var w=new Array(16);w[0]=new n(1).toRed(this),w[1]=B;for(var W=2;W<w.length;W++)w[W]=this.mul(w[W-1],B);var y=w[0],f=0,D=0,F=G.bitLength()%26;for(F===0&&(F=26),W=G.length-1;W>=0;W--){for(var T=G.words[W],Q=F-1;Q>=0;Q--){var P=T>>Q&1;y!==w[0]&&(y=this.sqr(y)),P!==0||f!==0?(f<<=1,f|=P,(++D===4||W===0&&Q===0)&&(y=this.mul(y,w[f]),D=0,f=0)):D=0}F=26}return y},V.prototype.convertTo=function(B){var G=B.umod(this.m);return G===B?G.clone():G},V.prototype.convertFrom=function(B){var G=B.clone();return G.red=null,G},n.mont=function(B){return new N(B)},l(N,V),N.prototype.convertTo=function(B){return this.imod(B.ushln(this.shift))},N.prototype.convertFrom=function(B){var G=this.imod(B.mul(this.rinv));return G.red=null,G},N.prototype.imul=function(B,G){if(B.isZero()||G.isZero())return B.words[0]=0,B.length=1,B;var w=B.imul(G),W=w.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),y=w.isub(W).iushrn(this.shift),f=y;return y.cmp(this.m)>=0?f=y.isub(this.m):y.cmpn(0)<0&&(f=y.iadd(this.m)),f._forceRed(this)},N.prototype.mul=function(B,G){if(B.isZero()||G.isZero())return new n(0)._forceRed(this);var w=B.mul(G),W=w.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),y=w.isub(W).iushrn(this.shift),f=y;return y.cmp(this.m)>=0?f=y.isub(this.m):y.cmpn(0)<0&&(f=y.iadd(this.m)),f._forceRed(this)},N.prototype.invm=function(B){return this.imod(B._invmp(this.m).mul(this.r2))._forceRed(this)}})(C===void 0||C)},{buffer:188}],187:[function(g,C,i){var e;function A(l){this.rand=l}if(C.exports=function(l){return e||(e=new A(null)),e.generate(l)},C.exports.Rand=A,A.prototype.generate=function(l){return this._rand(l)},A.prototype._rand=function(l){if(this.rand.getBytes)return this.rand.getBytes(l);for(var n=new Uint8Array(l),a=0;a<n.length;a++)n[a]=this.rand.getByte();return n},typeof self=="object")self.crypto&&self.crypto.getRandomValues?A.prototype._rand=function(l){var n=new Uint8Array(l);return self.crypto.getRandomValues(n),n}:self.msCrypto&&self.msCrypto.getRandomValues?A.prototype._rand=function(l){var n=new Uint8Array(l);return self.msCrypto.getRandomValues(n),n}:typeof window=="object"&&(A.prototype._rand=function(){throw new Error("Not implemented yet")});else try{var s=g("crypto");if(typeof s.randomBytes!="function")throw new Error("Not supported");A.prototype._rand=function(l){return s.randomBytes(l)}}catch{}},{crypto:188}],188:[function(g,C,i){},{}],189:[function(g,C,i){var e=g("safe-buffer").Buffer;function A(o){e.isBuffer(o)||(o=e.from(o));for(var c=o.length/4|0,r=new Array(c),h=0;h<c;h++)r[h]=o.readUInt32BE(4*h);return r}function s(o){for(;0<o.length;o++)o[0]=0}function l(o,c,r,h,b){for(var u,m,Z,p,Y=r[0],R=r[1],X=r[2],H=r[3],S=o[0]^c[0],z=o[1]^c[1],v=o[2]^c[2],K=o[3]^c[3],V=4,N=1;N<b;N++)u=Y[S>>>24]^R[z>>>16&255]^X[v>>>8&255]^H[255&K]^c[V++],m=Y[z>>>24]^R[v>>>16&255]^X[K>>>8&255]^H[255&S]^c[V++],Z=Y[v>>>24]^R[K>>>16&255]^X[S>>>8&255]^H[255&z]^c[V++],p=Y[K>>>24]^R[S>>>16&255]^X[z>>>8&255]^H[255&v]^c[V++],S=u,z=m,v=Z,K=p;return u=(h[S>>>24]<<24|h[z>>>16&255]<<16|h[v>>>8&255]<<8|h[255&K])^c[V++],m=(h[z>>>24]<<24|h[v>>>16&255]<<16|h[K>>>8&255]<<8|h[255&S])^c[V++],Z=(h[v>>>24]<<24|h[K>>>16&255]<<16|h[S>>>8&255]<<8|h[255&z])^c[V++],p=(h[K>>>24]<<24|h[S>>>16&255]<<16|h[z>>>8&255]<<8|h[255&v])^c[V++],[u>>>=0,m>>>=0,Z>>>=0,p>>>=0]}var n=[0,1,2,4,8,16,32,64,128,27,54],a=function(){for(var o=new Array(256),c=0;c<256;c++)o[c]=c<128?c<<1:c<<1^283;for(var r=[],h=[],b=[[],[],[],[]],u=[[],[],[],[]],m=0,Z=0,p=0;p<256;++p){var Y=Z^Z<<1^Z<<2^Z<<3^Z<<4;Y=Y>>>8^255&Y^99,r[m]=Y,h[Y]=m;var R=o[m],X=o[R],H=o[X],S=257*o[Y]^16843008*Y;b[0][m]=S<<24|S>>>8,b[1][m]=S<<16|S>>>16,b[2][m]=S<<8|S>>>24,b[3][m]=S,S=16843009*H^65537*X^257*R^16843008*m,u[0][Y]=S<<24|S>>>8,u[1][Y]=S<<16|S>>>16,u[2][Y]=S<<8|S>>>24,u[3][Y]=S,m===0?m=Z=1:(m=R^o[o[o[H^R]]],Z^=o[o[Z]])}return{SBOX:r,INV_SBOX:h,SUB_MIX:b,INV_SUB_MIX:u}}();function d(o){this._key=A(o),this._reset()}d.blockSize=16,d.keySize=32,d.prototype.blockSize=d.blockSize,d.prototype.keySize=d.keySize,d.prototype._reset=function(){for(var o=this._key,c=o.length,r=c+6,h=4*(r+1),b=[],u=0;u<c;u++)b[u]=o[u];for(u=c;u<h;u++){var m=b[u-1];u%c==0?(m=m<<8|m>>>24,m=a.SBOX[m>>>24]<<24|a.SBOX[m>>>16&255]<<16|a.SBOX[m>>>8&255]<<8|a.SBOX[255&m],m^=n[u/c|0]<<24):c>6&&u%c==4&&(m=a.SBOX[m>>>24]<<24|a.SBOX[m>>>16&255]<<16|a.SBOX[m>>>8&255]<<8|a.SBOX[255&m]),b[u]=b[u-c]^m}for(var Z=[],p=0;p<h;p++){var Y=h-p,R=b[Y-(p%4?0:4)];Z[p]=p<4||Y<=4?R:a.INV_SUB_MIX[0][a.SBOX[R>>>24]]^a.INV_SUB_MIX[1][a.SBOX[R>>>16&255]]^a.INV_SUB_MIX[2][a.SBOX[R>>>8&255]]^a.INV_SUB_MIX[3][a.SBOX[255&R]]}this._nRounds=r,this._keySchedule=b,this._invKeySchedule=Z},d.prototype.encryptBlockRaw=function(o){return l(o=A(o),this._keySchedule,a.SUB_MIX,a.SBOX,this._nRounds)},d.prototype.encryptBlock=function(o){var c=this.encryptBlockRaw(o),r=e.allocUnsafe(16);return r.writeUInt32BE(c[0],0),r.writeUInt32BE(c[1],4),r.writeUInt32BE(c[2],8),r.writeUInt32BE(c[3],12),r},d.prototype.decryptBlock=function(o){var c=(o=A(o))[1];o[1]=o[3],o[3]=c;var r=l(o,this._invKeySchedule,a.INV_SUB_MIX,a.INV_SBOX,this._nRounds),h=e.allocUnsafe(16);return h.writeUInt32BE(r[0],0),h.writeUInt32BE(r[3],4),h.writeUInt32BE(r[2],8),h.writeUInt32BE(r[1],12),h},d.prototype.scrub=function(){s(this._keySchedule),s(this._invKeySchedule),s(this._key)},C.exports.AES=d},{"safe-buffer":494}],190:[function(g,C,i){var e=g("./aes"),A=g("safe-buffer").Buffer,s=g("cipher-base"),l=g("inherits"),n=g("./ghash"),a=g("buffer-xor"),d=g("./incr32");function o(c,r,h,b){s.call(this);var u=A.alloc(4,0);this._cipher=new e.AES(r);var m=this._cipher.encryptBlock(u);this._ghash=new n(m),h=function(Z,p,Y){if(p.length===12)return Z._finID=A.concat([p,A.from([0,0,0,1])]),A.concat([p,A.from([0,0,0,2])]);var R=new n(Y),X=p.length,H=X%16;R.update(p),H&&(H=16-H,R.update(A.alloc(H,0))),R.update(A.alloc(8,0));var S=8*X,z=A.alloc(8);z.writeUIntBE(S,0,8),R.update(z),Z._finID=R.state;var v=A.from(Z._finID);return d(v),v}(this,h,m),this._prev=A.from(h),this._cache=A.allocUnsafe(0),this._secCache=A.allocUnsafe(0),this._decrypt=b,this._alen=0,this._len=0,this._mode=c,this._authTag=null,this._called=!1}l(o,s),o.prototype._update=function(c){if(!this._called&&this._alen){var r=16-this._alen%16;r<16&&(r=A.alloc(r,0),this._ghash.update(r))}this._called=!0;var h=this._mode.encrypt(this,c);return this._decrypt?this._ghash.update(c):this._ghash.update(h),this._len+=c.length,h},o.prototype._final=function(){if(this._decrypt&&!this._authTag)throw new Error("Unsupported state or unable to authenticate data");var c=a(this._ghash.final(8*this._alen,8*this._len),this._cipher.encryptBlock(this._finID));if(this._decrypt&&function(r,h){var b=0;r.length!==h.length&&b++;for(var u=Math.min(r.length,h.length),m=0;m<u;++m)b+=r[m]^h[m];return b}(c,this._authTag))throw new Error("Unsupported state or unable to authenticate data");this._authTag=c,this._cipher.scrub()},o.prototype.getAuthTag=function(){if(this._decrypt||!A.isBuffer(this._authTag))throw new Error("Attempting to get auth tag in unsupported state");return this._authTag},o.prototype.setAuthTag=function(c){if(!this._decrypt)throw new Error("Attempting to set auth tag in unsupported state");this._authTag=c},o.prototype.setAAD=function(c){if(this._called)throw new Error("Attempting to set AAD in unsupported state");this._ghash.update(c),this._alen+=c.length},C.exports=o},{"./aes":189,"./ghash":194,"./incr32":195,"buffer-xor":219,"cipher-base":221,inherits:440,"safe-buffer":494}],191:[function(g,C,i){var e=g("./encrypter"),A=g("./decrypter"),s=g("./modes/list.json");i.createCipher=i.Cipher=e.createCipher,i.createCipheriv=i.Cipheriv=e.createCipheriv,i.createDecipher=i.Decipher=A.createDecipher,i.createDecipheriv=i.Decipheriv=A.createDecipheriv,i.listCiphers=i.getCiphers=function(){return Object.keys(s)}},{"./decrypter":192,"./encrypter":193,"./modes/list.json":203}],192:[function(g,C,i){var e=g("./authCipher"),A=g("safe-buffer").Buffer,s=g("./modes"),l=g("./streamCipher"),n=g("cipher-base"),a=g("./aes"),d=g("evp_bytestokey");function o(h,b,u){n.call(this),this._cache=new c,this._last=void 0,this._cipher=new a.AES(b),this._prev=A.from(u),this._mode=h,this._autopadding=!0}function c(){this.cache=A.allocUnsafe(0)}function r(h,b,u){var m=s[h.toLowerCase()];if(!m)throw new TypeError("invalid suite type");if(typeof u=="string"&&(u=A.from(u)),m.mode!=="GCM"&&u.length!==m.iv)throw new TypeError("invalid iv length "+u.length);if(typeof b=="string"&&(b=A.from(b)),b.length!==m.key/8)throw new TypeError("invalid key length "+b.length);return m.type==="stream"?new l(m.module,b,u,!0):m.type==="auth"?new e(m.module,b,u,!0):new o(m.module,b,u)}g("inherits")(o,n),o.prototype._update=function(h){var b,u;this._cache.add(h);for(var m=[];b=this._cache.get(this._autopadding);)u=this._mode.decrypt(this,b),m.push(u);return A.concat(m)},o.prototype._final=function(){var h=this._cache.flush();if(this._autopadding)return function(b){var u=b[15];if(u<1||u>16)throw new Error("unable to decrypt data");for(var m=-1;++m<u;)if(b[m+(16-u)]!==u)throw new Error("unable to decrypt data");if(u!==16)return b.slice(0,16-u)}(this._mode.decrypt(this,h));if(h)throw new Error("data not multiple of block length")},o.prototype.setAutoPadding=function(h){return this._autopadding=!!h,this},c.prototype.add=function(h){this.cache=A.concat([this.cache,h])},c.prototype.get=function(h){var b;if(h){if(this.cache.length>16)return b=this.cache.slice(0,16),this.cache=this.cache.slice(16),b}else if(this.cache.length>=16)return b=this.cache.slice(0,16),this.cache=this.cache.slice(16),b;return null},c.prototype.flush=function(){if(this.cache.length)return this.cache},i.createDecipher=function(h,b){var u=s[h.toLowerCase()];if(!u)throw new TypeError("invalid suite type");var m=d(b,!1,u.key,u.iv);return r(h,m.key,m.iv)},i.createDecipheriv=r},{"./aes":189,"./authCipher":190,"./modes":202,"./streamCipher":205,"cipher-base":221,evp_bytestokey:423,inherits:440,"safe-buffer":494}],193:[function(g,C,i){var e=g("./modes"),A=g("./authCipher"),s=g("safe-buffer").Buffer,l=g("./streamCipher"),n=g("cipher-base"),a=g("./aes"),d=g("evp_bytestokey");function o(b,u,m){n.call(this),this._cache=new r,this._cipher=new a.AES(u),this._prev=s.from(m),this._mode=b,this._autopadding=!0}g("inherits")(o,n),o.prototype._update=function(b){var u,m;this._cache.add(b);for(var Z=[];u=this._cache.get();)m=this._mode.encrypt(this,u),Z.push(m);return s.concat(Z)};var c=s.alloc(16,16);function r(){this.cache=s.allocUnsafe(0)}function h(b,u,m){var Z=e[b.toLowerCase()];if(!Z)throw new TypeError("invalid suite type");if(typeof u=="string"&&(u=s.from(u)),u.length!==Z.key/8)throw new TypeError("invalid key length "+u.length);if(typeof m=="string"&&(m=s.from(m)),Z.mode!=="GCM"&&m.length!==Z.iv)throw new TypeError("invalid iv length "+m.length);return Z.type==="stream"?new l(Z.module,u,m):Z.type==="auth"?new A(Z.module,u,m):new o(Z.module,u,m)}o.prototype._final=function(){var b=this._cache.flush();if(this._autopadding)return b=this._mode.encrypt(this,b),this._cipher.scrub(),b;if(!b.equals(c))throw this._cipher.scrub(),new Error("data not multiple of block length")},o.prototype.setAutoPadding=function(b){return this._autopadding=!!b,this},r.prototype.add=function(b){this.cache=s.concat([this.cache,b])},r.prototype.get=function(){if(this.cache.length>15){var b=this.cache.slice(0,16);return this.cache=this.cache.slice(16),b}return null},r.prototype.flush=function(){for(var b=16-this.cache.length,u=s.allocUnsafe(b),m=-1;++m<b;)u.writeUInt8(b,m);return s.concat([this.cache,u])},i.createCipheriv=h,i.createCipher=function(b,u){var m=e[b.toLowerCase()];if(!m)throw new TypeError("invalid suite type");var Z=d(u,!1,m.key,m.iv);return h(b,Z.key,Z.iv)}},{"./aes":189,"./authCipher":190,"./modes":202,"./streamCipher":205,"cipher-base":221,evp_bytestokey:423,inherits:440,"safe-buffer":494}],194:[function(g,C,i){var e=g("safe-buffer").Buffer,A=e.alloc(16,0);function s(n){var a=e.allocUnsafe(16);return a.writeUInt32BE(n[0]>>>0,0),a.writeUInt32BE(n[1]>>>0,4),a.writeUInt32BE(n[2]>>>0,8),a.writeUInt32BE(n[3]>>>0,12),a}function l(n){this.h=n,this.state=e.alloc(16,0),this.cache=e.allocUnsafe(0)}l.prototype.ghash=function(n){for(var a=-1;++a<n.length;)this.state[a]^=n[a];this._multiply()},l.prototype._multiply=function(){for(var n,a,d,o=[(n=this.h).readUInt32BE(0),n.readUInt32BE(4),n.readUInt32BE(8),n.readUInt32BE(12)],c=[0,0,0,0],r=-1;++r<128;){for((this.state[~~(r/8)]&1<<7-r%8)!=0&&(c[0]^=o[0],c[1]^=o[1],c[2]^=o[2],c[3]^=o[3]),d=(1&o[3])!=0,a=3;a>0;a--)o[a]=o[a]>>>1|(1&o[a-1])<<31;o[0]=o[0]>>>1,d&&(o[0]=o[0]^225<<24)}this.state=s(c)},l.prototype.update=function(n){var a;for(this.cache=e.concat([this.cache,n]);this.cache.length>=16;)a=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(a)},l.prototype.final=function(n,a){return this.cache.length&&this.ghash(e.concat([this.cache,A],16)),this.ghash(s([0,n,0,a])),this.state},C.exports=l},{"safe-buffer":494}],195:[function(g,C,i){C.exports=function(e){for(var A,s=e.length;s--;){if((A=e.readUInt8(s))!==255){A++,e.writeUInt8(A,s);break}e.writeUInt8(0,s)}}},{}],196:[function(g,C,i){var e=g("buffer-xor");i.encrypt=function(A,s){var l=e(s,A._prev);return A._prev=A._cipher.encryptBlock(l),A._prev},i.decrypt=function(A,s){var l=A._prev;A._prev=s;var n=A._cipher.decryptBlock(s);return e(n,l)}},{"buffer-xor":219}],197:[function(g,C,i){var e=g("safe-buffer").Buffer,A=g("buffer-xor");function s(l,n,a){var d=n.length,o=A(n,l._cache);return l._cache=l._cache.slice(d),l._prev=e.concat([l._prev,a?n:o]),o}i.encrypt=function(l,n,a){for(var d,o=e.allocUnsafe(0);n.length;){if(l._cache.length===0&&(l._cache=l._cipher.encryptBlock(l._prev),l._prev=e.allocUnsafe(0)),!(l._cache.length<=n.length)){o=e.concat([o,s(l,n,a)]);break}d=l._cache.length,o=e.concat([o,s(l,n.slice(0,d),a)]),n=n.slice(d)}return o}},{"buffer-xor":219,"safe-buffer":494}],198:[function(g,C,i){var e=g("safe-buffer").Buffer;function A(l,n,a){for(var d,o,c=-1,r=0;++c<8;)d=n&1<<7-c?128:0,r+=(128&(o=l._cipher.encryptBlock(l._prev)[0]^d))>>c%8,l._prev=s(l._prev,a?d:o);return r}function s(l,n){var a=l.length,d=-1,o=e.allocUnsafe(l.length);for(l=e.concat([l,e.from([n])]);++d<a;)o[d]=l[d]<<1|l[d+1]>>7;return o}i.encrypt=function(l,n,a){for(var d=n.length,o=e.allocUnsafe(d),c=-1;++c<d;)o[c]=A(l,n[c],a);return o}},{"safe-buffer":494}],199:[function(g,C,i){var e=g("safe-buffer").Buffer;function A(s,l,n){var a=s._cipher.encryptBlock(s._prev)[0]^l;return s._prev=e.concat([s._prev.slice(1),e.from([n?l:a])]),a}i.encrypt=function(s,l,n){for(var a=l.length,d=e.allocUnsafe(a),o=-1;++o<a;)d[o]=A(s,l[o],n);return d}},{"safe-buffer":494}],200:[function(g,C,i){var e=g("buffer-xor"),A=g("safe-buffer").Buffer,s=g("../incr32");function l(n){var a=n._cipher.encryptBlockRaw(n._prev);return s(n._prev),a}i.encrypt=function(n,a){var d=Math.ceil(a.length/16),o=n._cache.length;n._cache=A.concat([n._cache,A.allocUnsafe(16*d)]);for(var c=0;c<d;c++){var r=l(n),h=o+16*c;n._cache.writeUInt32BE(r[0],h+0),n._cache.writeUInt32BE(r[1],h+4),n._cache.writeUInt32BE(r[2],h+8),n._cache.writeUInt32BE(r[3],h+12)}var b=n._cache.slice(0,a.length);return n._cache=n._cache.slice(a.length),e(a,b)}},{"../incr32":195,"buffer-xor":219,"safe-buffer":494}],201:[function(g,C,i){i.encrypt=function(e,A){return e._cipher.encryptBlock(A)},i.decrypt=function(e,A){return e._cipher.decryptBlock(A)}},{}],202:[function(g,C,i){var e={ECB:g("./ecb"),CBC:g("./cbc"),CFB:g("./cfb"),CFB8:g("./cfb8"),CFB1:g("./cfb1"),OFB:g("./ofb"),CTR:g("./ctr"),GCM:g("./ctr")},A=g("./list.json");for(var s in A)A[s].module=e[A[s].mode];C.exports=A},{"./cbc":196,"./cfb":197,"./cfb1":198,"./cfb8":199,"./ctr":200,"./ecb":201,"./list.json":203,"./ofb":204}],203:[function(g,C,i){C.exports={"aes-128-ecb":{cipher:"AES",key:128,iv:0,mode:"ECB",type:"block"},"aes-192-ecb":{cipher:"AES",key:192,iv:0,mode:"ECB",type:"block"},"aes-256-ecb":{cipher:"AES",key:256,iv:0,mode:"ECB",type:"block"},"aes-128-cbc":{cipher:"AES",key:128,iv:16,mode:"CBC",type:"block"},"aes-192-cbc":{cipher:"AES",key:192,iv:16,mode:"CBC",type:"block"},"aes-256-cbc":{cipher:"AES",key:256,iv:16,mode:"CBC",type:"block"},aes128:{cipher:"AES",key:128,iv:16,mode:"CBC",type:"block"},aes192:{cipher:"AES",key:192,iv:16,mode:"CBC",type:"block"},aes256:{cipher:"AES",key:256,iv:16,mode:"CBC",type:"block"},"aes-128-cfb":{cipher:"AES",key:128,iv:16,mode:"CFB",type:"stream"},"aes-192-cfb":{cipher:"AES",key:192,iv:16,mode:"CFB",type:"stream"},"aes-256-cfb":{cipher:"AES",key:256,iv:16,mode:"CFB",type:"stream"},"aes-128-cfb8":{cipher:"AES",key:128,iv:16,mode:"CFB8",type:"stream"},"aes-192-cfb8":{cipher:"AES",key:192,iv:16,mode:"CFB8",type:"stream"},"aes-256-cfb8":{cipher:"AES",key:256,iv:16,mode:"CFB8",type:"stream"},"aes-128-cfb1":{cipher:"AES",key:128,iv:16,mode:"CFB1",type:"stream"},"aes-192-cfb1":{cipher:"AES",key:192,iv:16,mode:"CFB1",type:"stream"},"aes-256-cfb1":{cipher:"AES",key:256,iv:16,mode:"CFB1",type:"stream"},"aes-128-ofb":{cipher:"AES",key:128,iv:16,mode:"OFB",type:"stream"},"aes-192-ofb":{cipher:"AES",key:192,iv:16,mode:"OFB",type:"stream"},"aes-256-ofb":{cipher:"AES",key:256,iv:16,mode:"OFB",type:"stream"},"aes-128-ctr":{cipher:"AES",key:128,iv:16,mode:"CTR",type:"stream"},"aes-192-ctr":{cipher:"AES",key:192,iv:16,mode:"CTR",type:"stream"},"aes-256-ctr":{cipher:"AES",key:256,iv:16,mode:"CTR",type:"stream"},"aes-128-gcm":{cipher:"AES",key:128,iv:12,mode:"GCM",type:"auth"},"aes-192-gcm":{cipher:"AES",key:192,iv:12,mode:"GCM",type:"auth"},"aes-256-gcm":{cipher:"AES",key:256,iv:12,mode:"GCM",type:"auth"}}},{}],204:[function(g,C,i){(function(e){(function(){var A=g("buffer-xor");function s(l){return l._prev=l._cipher.encryptBlock(l._prev),l._prev}i.encrypt=function(l,n){for(;l._cache.length<n.length;)l._cache=e.concat([l._cache,s(l)]);var a=l._cache.slice(0,n.length);return l._cache=l._cache.slice(n.length),A(n,a)}}).call(this)}).call(this,g("buffer").Buffer)},{buffer:220,"buffer-xor":219}],205:[function(g,C,i){var e=g("./aes"),A=g("safe-buffer").Buffer,s=g("cipher-base");function l(n,a,d,o){s.call(this),this._cipher=new e.AES(a),this._prev=A.from(d),this._cache=A.allocUnsafe(0),this._secCache=A.allocUnsafe(0),this._decrypt=o,this._mode=n}g("inherits")(l,s),l.prototype._update=function(n){return this._mode.encrypt(this,n,this._decrypt)},l.prototype._final=function(){this._cipher.scrub()},C.exports=l},{"./aes":189,"cipher-base":221,inherits:440,"safe-buffer":494}],206:[function(g,C,i){var e=g("browserify-des"),A=g("browserify-aes/browser"),s=g("browserify-aes/modes"),l=g("browserify-des/modes"),n=g("evp_bytestokey");function a(o,c,r){if(o=o.toLowerCase(),s[o])return A.createCipheriv(o,c,r);if(l[o])return new e({key:c,iv:r,mode:o});throw new TypeError("invalid suite type")}function d(o,c,r){if(o=o.toLowerCase(),s[o])return A.createDecipheriv(o,c,r);if(l[o])return new e({key:c,iv:r,mode:o,decrypt:!0});throw new TypeError("invalid suite type")}i.createCipher=i.Cipher=function(o,c){var r,h;if(o=o.toLowerCase(),s[o])r=s[o].key,h=s[o].iv;else{if(!l[o])throw new TypeError("invalid suite type");r=8*l[o].key,h=l[o].iv}var b=n(c,!1,r,h);return a(o,b.key,b.iv)},i.createCipheriv=i.Cipheriv=a,i.createDecipher=i.Decipher=function(o,c){var r,h;if(o=o.toLowerCase(),s[o])r=s[o].key,h=s[o].iv;else{if(!l[o])throw new TypeError("invalid suite type");r=8*l[o].key,h=l[o].iv}var b=n(c,!1,r,h);return d(o,b.key,b.iv)},i.createDecipheriv=i.Decipheriv=d,i.listCiphers=i.getCiphers=function(){return Object.keys(l).concat(A.getCiphers())}},{"browserify-aes/browser":191,"browserify-aes/modes":202,"browserify-des":207,"browserify-des/modes":208,evp_bytestokey:423}],207:[function(g,C,i){var e=g("cipher-base"),A=g("des.js"),s=g("inherits"),l=g("safe-buffer").Buffer,n={"des-ede3-cbc":A.CBC.instantiate(A.EDE),"des-ede3":A.EDE,"des-ede-cbc":A.CBC.instantiate(A.EDE),"des-ede":A.EDE,"des-cbc":A.CBC.instantiate(A.DES),"des-ecb":A.DES};function a(d){e.call(this);var o,c=d.mode.toLowerCase(),r=n[c];o=d.decrypt?"decrypt":"encrypt";var h=d.key;l.isBuffer(h)||(h=l.from(h)),c!=="des-ede"&&c!=="des-ede-cbc"||(h=l.concat([h,h.slice(0,8)]));var b=d.iv;l.isBuffer(b)||(b=l.from(b)),this._des=r.create({key:h,iv:b,type:o})}n.des=n["des-cbc"],n.des3=n["des-ede3-cbc"],C.exports=a,s(a,e),a.prototype._update=function(d){return l.from(this._des.update(d))},a.prototype._final=function(){return l.from(this._des.final())}},{"cipher-base":221,"des.js":394,inherits:440,"safe-buffer":494}],208:[function(g,C,i){i["des-ecb"]={key:8,iv:0},i["des-cbc"]=i.des={key:8,iv:8},i["des-ede3-cbc"]=i.des3={key:24,iv:8},i["des-ede3"]={key:24,iv:0},i["des-ede-cbc"]={key:16,iv:8},i["des-ede"]={key:16,iv:0}},{}],209:[function(g,C,i){(function(e){(function(){var A=g("bn.js"),s=g("randombytes");function l(a){var d,o=a.modulus.byteLength();do d=new A(s(o));while(d.cmp(a.modulus)>=0||!d.umod(a.prime1)||!d.umod(a.prime2));return d}function n(a,d){var o=function(X){var H=l(X);return{blinder:H.toRed(A.mont(X.modulus)).redPow(new A(X.publicExponent)).fromRed(),unblinder:H.invm(X.modulus)}}(d),c=d.modulus.byteLength(),r=new A(a).mul(o.blinder).umod(d.modulus),h=r.toRed(A.mont(d.prime1)),b=r.toRed(A.mont(d.prime2)),u=d.coefficient,m=d.prime1,Z=d.prime2,p=h.redPow(d.exponent1).fromRed(),Y=b.redPow(d.exponent2).fromRed(),R=p.isub(Y).imul(u).umod(m).imul(Z);return Y.iadd(R).imul(o.unblinder).umod(d.modulus).toArrayLike(e,"be",c)}n.getr=l,C.exports=n}).call(this)}).call(this,g("buffer").Buffer)},{"bn.js":186,buffer:220,randombytes:475}],210:[function(g,C,i){C.exports=g("./browser/algorithms.json")},{"./browser/algorithms.json":211}],211:[function(g,C,i){C.exports={sha224WithRSAEncryption:{sign:"rsa",hash:"sha224",id:"302d300d06096086480165030402040500041c"},"RSA-SHA224":{sign:"ecdsa/rsa",hash:"sha224",id:"302d300d06096086480165030402040500041c"},sha256WithRSAEncryption:{sign:"rsa",hash:"sha256",id:"3031300d060960864801650304020105000420"},"RSA-SHA256":{sign:"ecdsa/rsa",hash:"sha256",id:"3031300d060960864801650304020105000420"},sha384WithRSAEncryption:{sign:"rsa",hash:"sha384",id:"3041300d060960864801650304020205000430"},"RSA-SHA384":{sign:"ecdsa/rsa",hash:"sha384",id:"3041300d060960864801650304020205000430"},sha512WithRSAEncryption:{sign:"rsa",hash:"sha512",id:"3051300d060960864801650304020305000440"},"RSA-SHA512":{sign:"ecdsa/rsa",hash:"sha512",id:"3051300d060960864801650304020305000440"},"RSA-SHA1":{sign:"rsa",hash:"sha1",id:"3021300906052b0e03021a05000414"},"ecdsa-with-SHA1":{sign:"ecdsa",hash:"sha1",id:""},sha256:{sign:"ecdsa",hash:"sha256",id:""},sha224:{sign:"ecdsa",hash:"sha224",id:""},sha384:{sign:"ecdsa",hash:"sha384",id:""},sha512:{sign:"ecdsa",hash:"sha512",id:""},"DSA-SHA":{sign:"dsa",hash:"sha1",id:""},"DSA-SHA1":{sign:"dsa",hash:"sha1",id:""},DSA:{sign:"dsa",hash:"sha1",id:""},"DSA-WITH-SHA224":{sign:"dsa",hash:"sha224",id:""},"DSA-SHA224":{sign:"dsa",hash:"sha224",id:""},"DSA-WITH-SHA256":{sign:"dsa",hash:"sha256",id:""},"DSA-SHA256":{sign:"dsa",hash:"sha256",id:""},"DSA-WITH-SHA384":{sign:"dsa",hash:"sha384",id:""},"DSA-SHA384":{sign:"dsa",hash:"sha384",id:""},"DSA-WITH-SHA512":{sign:"dsa",hash:"sha512",id:""},"DSA-SHA512":{sign:"dsa",hash:"sha512",id:""},"DSA-RIPEMD160":{sign:"dsa",hash:"rmd160",id:""},ripemd160WithRSA:{sign:"rsa",hash:"rmd160",id:"3021300906052b2403020105000414"},"RSA-RIPEMD160":{sign:"rsa",hash:"rmd160",id:"3021300906052b2403020105000414"},md5WithRSAEncryption:{sign:"rsa",hash:"md5",id:"3020300c06082a864886f70d020505000410"},"RSA-MD5":{sign:"rsa",hash:"md5",id:"3020300c06082a864886f70d020505000410"}}},{}],212:[function(g,C,i){C.exports={"1.3.132.0.10":"secp256k1","1.3.132.0.33":"p224","1.2.840.10045.3.1.1":"p192","1.2.840.10045.3.1.7":"p256","1.3.132.0.34":"p384","1.3.132.0.35":"p521"}},{}],213:[function(g,C,i){var e=g("safe-buffer").Buffer,A=g("create-hash"),s=g("readable-stream"),l=g("inherits"),n=g("./sign"),a=g("./verify"),d=g("./algorithms.json");function o(b){s.Writable.call(this);var u=d[b];if(!u)throw new Error("Unknown message digest");this._hashType=u.hash,this._hash=A(u.hash),this._tag=u.id,this._signType=u.sign}function c(b){s.Writable.call(this);var u=d[b];if(!u)throw new Error("Unknown message digest");this._hash=A(u.hash),this._tag=u.id,this._signType=u.sign}function r(b){return new o(b)}function h(b){return new c(b)}Object.keys(d).forEach(function(b){d[b].id=e.from(d[b].id,"hex"),d[b.toLowerCase()]=d[b]}),l(o,s.Writable),o.prototype._write=function(b,u,m){this._hash.update(b),m()},o.prototype.update=function(b,u){return typeof b=="string"&&(b=e.from(b,u)),this._hash.update(b),this},o.prototype.sign=function(b,u){this.end();var m=this._hash.digest(),Z=n(m,b,this._hashType,this._signType,this._tag);return u?Z.toString(u):Z},l(c,s.Writable),c.prototype._write=function(b,u,m){this._hash.update(b),m()},c.prototype.update=function(b,u){return typeof b=="string"&&(b=e.from(b,u)),this._hash.update(b),this},c.prototype.verify=function(b,u,m){typeof u=="string"&&(u=e.from(u,m)),this.end();var Z=this._hash.digest();return a(u,Z,b,this._signType,this._tag)},C.exports={Sign:r,Verify:h,createSign:r,createVerify:h}},{"./algorithms.json":211,"./sign":214,"./verify":215,"create-hash":386,inherits:440,"readable-stream":491,"safe-buffer":494}],214:[function(g,C,i){var e=g("safe-buffer").Buffer,A=g("create-hmac"),s=g("browserify-rsa"),l=g("elliptic").ec,n=g("bn.js"),a=g("parse-asn1"),d=g("./curves.json");function o(b,u,m,Z){if((b=e.from(b.toArray())).length<u.byteLength()){var p=e.alloc(u.byteLength()-b.length);b=e.concat([p,b])}var Y=m.length,R=function(S,z){S=(S=c(S,z)).mod(z);var v=e.from(S.toArray());if(v.length<z.byteLength()){var K=e.alloc(z.byteLength()-v.length);v=e.concat([K,v])}return v}(m,u),X=e.alloc(Y);X.fill(1);var H=e.alloc(Y);return H=A(Z,H).update(X).update(e.from([0])).update(b).update(R).digest(),X=A(Z,H).update(X).digest(),{k:H=A(Z,H).update(X).update(e.from([1])).update(b).update(R).digest(),v:X=A(Z,H).update(X).digest()}}function c(b,u){var m=new n(b),Z=(b.length<<3)-u.bitLength();return Z>0&&m.ishrn(Z),m}function r(b,u,m){var Z,p;do{for(Z=e.alloc(0);8*Z.length<b.bitLength();)u.v=A(m,u.k).update(u.v).digest(),Z=e.concat([Z,u.v]);p=c(Z,b),u.k=A(m,u.k).update(u.v).update(e.from([0])).digest(),u.v=A(m,u.k).update(u.v).digest()}while(p.cmp(b)!==-1);return p}function h(b,u,m,Z){return b.toRed(n.mont(m)).redPow(u).fromRed().mod(Z)}C.exports=function(b,u,m,Z,p){var Y=a(u);if(Y.curve){if(Z!=="ecdsa"&&Z!=="ecdsa/rsa")throw new Error("wrong private key type");return function(S,z){var v=d[z.curve.join(".")];if(!v)throw new Error("unknown curve "+z.curve.join("."));var K=new l(v).keyFromPrivate(z.privateKey).sign(S);return e.from(K.toDER())}(b,Y)}if(Y.type==="dsa"){if(Z!=="dsa")throw new Error("wrong private key type");return function(S,z,v){for(var K,V=z.params.priv_key,N=z.params.p,B=z.params.q,G=z.params.g,w=new n(0),W=c(S,B).mod(B),y=!1,f=o(V,B,S,v);y===!1;)K=r(B,f,v),w=h(G,K,N,B),(y=K.invm(B).imul(W.add(V.mul(w))).mod(B)).cmpn(0)===0&&(y=!1,w=new n(0));return function(D,F){D=D.toArray(),F=F.toArray(),128&D[0]&&(D=[0].concat(D)),128&F[0]&&(F=[0].concat(F));var T=[48,D.length+F.length+4,2,D.length];return T=T.concat(D,[2,F.length],F),e.from(T)}(w,y)}(b,Y,m)}if(Z!=="rsa"&&Z!=="ecdsa/rsa")throw new Error("wrong private key type");b=e.concat([p,b]);for(var R=Y.modulus.byteLength(),X=[0,1];b.length+X.length+1<R;)X.push(255);X.push(0);for(var H=-1;++H<b.length;)X.push(b[H]);return s(X,Y)},C.exports.getKey=o,C.exports.makeKey=r},{"./curves.json":212,"bn.js":186,"browserify-rsa":209,"create-hmac":388,elliptic:405,"parse-asn1":459,"safe-buffer":494}],215:[function(g,C,i){var e=g("safe-buffer").Buffer,A=g("bn.js"),s=g("elliptic").ec,l=g("parse-asn1"),n=g("./curves.json");function a(d,o){if(d.cmpn(0)<=0)throw new Error("invalid sig");if(d.cmp(o)>=o)throw new Error("invalid sig")}C.exports=function(d,o,c,r,h){var b=l(c);if(b.type==="ec"){if(r!=="ecdsa"&&r!=="ecdsa/rsa")throw new Error("wrong public key type");return function(X,H,S){var z=n[S.data.algorithm.curve.join(".")];if(!z)throw new Error("unknown curve "+S.data.algorithm.curve.join("."));var v=new s(z),K=S.data.subjectPrivateKey.data;return v.verify(H,X,K)}(d,o,b)}if(b.type==="dsa"){if(r!=="dsa")throw new Error("wrong public key type");return function(X,H,S){var z=S.data.p,v=S.data.q,K=S.data.g,V=S.data.pub_key,N=l.signature.decode(X,"der"),B=N.s,G=N.r;a(B,v),a(G,v);var w=A.mont(z),W=B.invm(v);return K.toRed(w).redPow(new A(H).mul(W).mod(v)).fromRed().mul(V.toRed(w).redPow(G.mul(W).mod(v)).fromRed()).mod(z).mod(v).cmp(G)===0}(d,o,b)}if(r!=="rsa"&&r!=="ecdsa/rsa")throw new Error("wrong public key type");o=e.concat([h,o]);for(var u=b.modulus.byteLength(),m=[1],Z=0;o.length+m.length+2<u;)m.push(255),Z++;m.push(0);for(var p=-1;++p<o.length;)m.push(o[p]);m=e.from(m);var Y=A.mont(b.modulus);d=(d=new A(d).toRed(Y)).redPow(new A(b.publicExponent)),d=e.from(d.fromRed().toArray());var R=Z<8?1:0;for(u=Math.min(d.length,m.length),d.length!==m.length&&(R=1),p=-1;++p<u;)R|=d[p]^m[p];return R===0}},{"./curves.json":212,"bn.js":186,elliptic:405,"parse-asn1":459,"safe-buffer":494}],216:[function(g,C,i){},{}],217:[function(g,C,i){var e=g("buffer"),A=e.Buffer;function s(n,a){for(var d in n)a[d]=n[d]}function l(n,a,d){return A(n,a,d)}A.from&&A.alloc&&A.allocUnsafe&&A.allocUnsafeSlow?C.exports=e:(s(e,i),i.Buffer=l),s(A,l),l.from=function(n,a,d){if(typeof n=="number")throw new TypeError("Argument must not be a number");return A(n,a,d)},l.alloc=function(n,a,d){if(typeof n!="number")throw new TypeError("Argument must be a number");var o=A(n);return a!==void 0?typeof d=="string"?o.fill(a,d):o.fill(a):o.fill(0),o},l.allocUnsafe=function(n){if(typeof n!="number")throw new TypeError("Argument must be a number");return A(n)},l.allocUnsafeSlow=function(n){if(typeof n!="number")throw new TypeError("Argument must be a number");return e.SlowBuffer(n)}},{buffer:220}],218:[function(g,C,i){var e=g("safe-buffer").Buffer,A=e.isEncoding||function(b){switch((b=""+b)&&b.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function s(b){var u;switch(this.encoding=function(m){var Z=function(p){if(!p)return"utf8";for(var Y;;)switch(p){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return p;default:if(Y)return;p=(""+p).toLowerCase(),Y=!0}}(m);if(typeof Z!="string"&&(e.isEncoding===A||!A(m)))throw new Error("Unknown encoding: "+m);return Z||m}(b),this.encoding){case"utf16le":this.text=a,this.end=d,u=4;break;case"utf8":this.fillLast=n,u=4;break;case"base64":this.text=o,this.end=c,u=3;break;default:return this.write=r,void(this.end=h)}this.lastNeed=0,this.lastTotal=0,this.lastChar=e.allocUnsafe(u)}function l(b){return b<=127?0:b>>5==6?2:b>>4==14?3:b>>3==30?4:b>>6==2?-1:-2}function n(b){var u=this.lastTotal-this.lastNeed,m=function(Z,p,Y){if((192&p[0])!=128)return Z.lastNeed=0,"�";if(Z.lastNeed>1&&p.length>1){if((192&p[1])!=128)return Z.lastNeed=1,"�";if(Z.lastNeed>2&&p.length>2&&(192&p[2])!=128)return Z.lastNeed=2,"�"}}(this,b);return m!==void 0?m:this.lastNeed<=b.length?(b.copy(this.lastChar,u,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(b.copy(this.lastChar,u,0,b.length),void(this.lastNeed-=b.length))}function a(b,u){if((b.length-u)%2==0){var m=b.toString("utf16le",u);if(m){var Z=m.charCodeAt(m.length-1);if(Z>=55296&&Z<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=b[b.length-2],this.lastChar[1]=b[b.length-1],m.slice(0,-1)}return m}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=b[b.length-1],b.toString("utf16le",u,b.length-1)}function d(b){var u=b&&b.length?this.write(b):"";if(this.lastNeed){var m=this.lastTotal-this.lastNeed;return u+this.lastChar.toString("utf16le",0,m)}return u}function o(b,u){var m=(b.length-u)%3;return m===0?b.toString("base64",u):(this.lastNeed=3-m,this.lastTotal=3,m===1?this.lastChar[0]=b[b.length-1]:(this.lastChar[0]=b[b.length-2],this.lastChar[1]=b[b.length-1]),b.toString("base64",u,b.length-m))}function c(b){var u=b&&b.length?this.write(b):"";return this.lastNeed?u+this.lastChar.toString("base64",0,3-this.lastNeed):u}function r(b){return b.toString(this.encoding)}function h(b){return b&&b.length?this.write(b):""}i.StringDecoder=s,s.prototype.write=function(b){if(b.length===0)return"";var u,m;if(this.lastNeed){if((u=this.fillLast(b))===void 0)return"";m=this.lastNeed,this.lastNeed=0}else m=0;return m<b.length?u?u+this.text(b,m):this.text(b,m):u||""},s.prototype.end=function(b){var u=b&&b.length?this.write(b):"";return this.lastNeed?u+"�":u},s.prototype.text=function(b,u){var m=function(p,Y,R){var X=Y.length-1;if(X<R)return 0;var H=l(Y[X]);return H>=0?(H>0&&(p.lastNeed=H-1),H):--X<R||H===-2?0:(H=l(Y[X]))>=0?(H>0&&(p.lastNeed=H-2),H):--X<R||H===-2?0:(H=l(Y[X]))>=0?(H>0&&(H===2?H=0:p.lastNeed=H-3),H):0}(this,b,u);if(!this.lastNeed)return b.toString("utf8",u);this.lastTotal=m;var Z=b.length-(m-this.lastNeed);return b.copy(this.lastChar,0,Z),b.toString("utf8",u,Z)},s.prototype.fillLast=function(b){if(this.lastNeed<=b.length)return b.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);b.copy(this.lastChar,this.lastTotal-this.lastNeed,0,b.length),this.lastNeed-=b.length}},{"safe-buffer":217}],219:[function(g,C,i){(function(e){(function(){C.exports=function(A,s){for(var l=Math.min(A.length,s.length),n=new e(l),a=0;a<l;++a)n[a]=A[a]^s[a];return n}}).call(this)}).call(this,g("buffer").Buffer)},{buffer:220}],220:[function(g,C,i){(function(e){(function(){var A=g("base64-js"),s=g("ieee754");i.Buffer=n,i.SlowBuffer=function(J){return+J!=J&&(J=0),n.alloc(+J)},i.INSPECT_MAX_BYTES=50;function l(J){if(J>2147483647)throw new RangeError('The value "'+J+'" is invalid for option "size"');var k=new Uint8Array(J);return k.__proto__=n.prototype,k}function n(J,k,j){if(typeof J=="number"){if(typeof k=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return o(J)}return a(J,k,j)}function a(J,k,j){if(typeof J=="string")return function(Cg,x){if(typeof x=="string"&&x!==""||(x="utf8"),!n.isEncoding(x))throw new TypeError("Unknown encoding: "+x);var sg=0|h(Cg,x),Ag=l(sg),O=Ag.write(Cg,x);return O!==sg&&(Ag=Ag.slice(0,O)),Ag}(J,k);if(ArrayBuffer.isView(J))return c(J);if(J==null)throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof J);if(L(J,ArrayBuffer)||J&&L(J.buffer,ArrayBuffer))return function(Cg,x,sg){if(x<0||Cg.byteLength<x)throw new RangeError('"offset" is outside of buffer bounds');if(Cg.byteLength<x+(sg||0))throw new RangeError('"length" is outside of buffer bounds');var Ag;return Ag=x===void 0&&sg===void 0?new Uint8Array(Cg):sg===void 0?new Uint8Array(Cg,x):new Uint8Array(Cg,x,sg),Ag.__proto__=n.prototype,Ag}(J,k,j);if(typeof J=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');var q=J.valueOf&&J.valueOf();if(q!=null&&q!==J)return n.from(q,k,j);var tg=function(Cg){if(n.isBuffer(Cg)){var x=0|r(Cg.length),sg=l(x);return sg.length===0||Cg.copy(sg,0,0,x),sg}if(Cg.length!==void 0)return typeof Cg.length!="number"||E(Cg.length)?l(0):c(Cg);if(Cg.type==="Buffer"&&Array.isArray(Cg.data))return c(Cg.data)}(J);if(tg)return tg;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof J[Symbol.toPrimitive]=="function")return n.from(J[Symbol.toPrimitive]("string"),k,j);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof J)}function d(J){if(typeof J!="number")throw new TypeError('"size" argument must be of type number');if(J<0)throw new RangeError('The value "'+J+'" is invalid for option "size"')}function o(J){return d(J),l(J<0?0:0|r(J))}function c(J){for(var k=J.length<0?0:0|r(J.length),j=l(k),q=0;q<k;q+=1)j[q]=255&J[q];return j}function r(J){if(J>=2147483647)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x7fffffff bytes");return 0|J}function h(J,k){if(n.isBuffer(J))return J.length;if(ArrayBuffer.isView(J)||L(J,ArrayBuffer))return J.byteLength;if(typeof J!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof J);var j=J.length,q=arguments.length>2&&arguments[2]===!0;if(!q&&j===0)return 0;for(var tg=!1;;)switch(k){case"ascii":case"latin1":case"binary":return j;case"utf8":case"utf-8":return T(J).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*j;case"hex":return j>>>1;case"base64":return Q(J).length;default:if(tg)return q?-1:T(J).length;k=(""+k).toLowerCase(),tg=!0}}function b(J,k,j){var q=!1;if((k===void 0||k<0)&&(k=0),k>this.length||((j===void 0||j>this.length)&&(j=this.length),j<=0)||(j>>>=0)<=(k>>>=0))return"";for(J||(J="utf8");;)switch(J){case"hex":return N(this,k,j);case"utf8":case"utf-8":return v(this,k,j);case"ascii":return K(this,k,j);case"latin1":case"binary":return V(this,k,j);case"base64":return z(this,k,j);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return B(this,k,j);default:if(q)throw new TypeError("Unknown encoding: "+J);J=(J+"").toLowerCase(),q=!0}}function u(J,k,j){var q=J[k];J[k]=J[j],J[j]=q}function m(J,k,j,q,tg){if(J.length===0)return-1;if(typeof j=="string"?(q=j,j=0):j>2147483647?j=2147483647:j<-2147483648&&(j=-2147483648),E(j=+j)&&(j=tg?0:J.length-1),j<0&&(j=J.length+j),j>=J.length){if(tg)return-1;j=J.length-1}else if(j<0){if(!tg)return-1;j=0}if(typeof k=="string"&&(k=n.from(k,q)),n.isBuffer(k))return k.length===0?-1:Z(J,k,j,q,tg);if(typeof k=="number")return k&=255,typeof Uint8Array.prototype.indexOf=="function"?tg?Uint8Array.prototype.indexOf.call(J,k,j):Uint8Array.prototype.lastIndexOf.call(J,k,j):Z(J,[k],j,q,tg);throw new TypeError("val must be string, number or Buffer")}function Z(J,k,j,q,tg){var Cg,x=1,sg=J.length,Ag=k.length;if(q!==void 0&&((q=String(q).toLowerCase())==="ucs2"||q==="ucs-2"||q==="utf16le"||q==="utf-16le")){if(J.length<2||k.length<2)return-1;x=2,sg/=2,Ag/=2,j/=2}function O(ag,lg){return x===1?ag[lg]:ag.readUInt16BE(lg*x)}if(tg){var _=-1;for(Cg=j;Cg<sg;Cg++)if(O(J,Cg)===O(k,_===-1?0:Cg-_)){if(_===-1&&(_=Cg),Cg-_+1===Ag)return _*x}else _!==-1&&(Cg-=Cg-_),_=-1}else for(j+Ag>sg&&(j=sg-Ag),Cg=j;Cg>=0;Cg--){for(var Ig=!0,ng=0;ng<Ag;ng++)if(O(J,Cg+ng)!==O(k,ng)){Ig=!1;break}if(Ig)return Cg}return-1}function p(J,k,j,q){j=Number(j)||0;var tg=J.length-j;q?(q=Number(q))>tg&&(q=tg):q=tg;var Cg=k.length;q>Cg/2&&(q=Cg/2);for(var x=0;x<q;++x){var sg=parseInt(k.substr(2*x,2),16);if(E(sg))return x;J[j+x]=sg}return x}function Y(J,k,j,q){return P(T(k,J.length-j),J,j,q)}function R(J,k,j,q){return P(function(tg){for(var Cg=[],x=0;x<tg.length;++x)Cg.push(255&tg.charCodeAt(x));return Cg}(k),J,j,q)}function X(J,k,j,q){return R(J,k,j,q)}function H(J,k,j,q){return P(Q(k),J,j,q)}function S(J,k,j,q){return P(function(tg,Cg){for(var x,sg,Ag,O=[],_=0;_<tg.length&&!((Cg-=2)<0);++_)x=tg.charCodeAt(_),sg=x>>8,Ag=x%256,O.push(Ag),O.push(sg);return O}(k,J.length-j),J,j,q)}function z(J,k,j){return k===0&&j===J.length?A.fromByteArray(J):A.fromByteArray(J.slice(k,j))}function v(J,k,j){j=Math.min(J.length,j);for(var q=[],tg=k;tg<j;){var Cg,x,sg,Ag,O=J[tg],_=null,Ig=O>239?4:O>223?3:O>191?2:1;if(tg+Ig<=j)switch(Ig){case 1:O<128&&(_=O);break;case 2:(192&(Cg=J[tg+1]))==128&&(Ag=(31&O)<<6|63&Cg)>127&&(_=Ag);break;case 3:Cg=J[tg+1],x=J[tg+2],(192&Cg)==128&&(192&x)==128&&(Ag=(15&O)<<12|(63&Cg)<<6|63&x)>2047&&(Ag<55296||Ag>57343)&&(_=Ag);break;case 4:Cg=J[tg+1],x=J[tg+2],sg=J[tg+3],(192&Cg)==128&&(192&x)==128&&(192&sg)==128&&(Ag=(15&O)<<18|(63&Cg)<<12|(63&x)<<6|63&sg)>65535&&Ag<1114112&&(_=Ag)}_===null?(_=65533,Ig=1):_>65535&&(_-=65536,q.push(_>>>10&1023|55296),_=56320|1023&_),q.push(_),tg+=Ig}return function(ng){var ag=ng.length;if(ag<=4096)return String.fromCharCode.apply(String,ng);for(var lg="",cg=0;cg<ag;)lg+=String.fromCharCode.apply(String,ng.slice(cg,cg+=4096));return lg}(q)}i.kMaxLength=2147483647,n.TYPED_ARRAY_SUPPORT=function(){try{var J=new Uint8Array(1);return J.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},J.foo()===42}catch{return!1}}(),n.TYPED_ARRAY_SUPPORT||typeof console>"u"||typeof console.error!="function"||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(n.prototype,"parent",{enumerable:!0,get:function(){if(n.isBuffer(this))return this.buffer}}),Object.defineProperty(n.prototype,"offset",{enumerable:!0,get:function(){if(n.isBuffer(this))return this.byteOffset}}),typeof Symbol<"u"&&Symbol.species!=null&&n[Symbol.species]===n&&Object.defineProperty(n,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}),n.poolSize=8192,n.from=function(J,k,j){return a(J,k,j)},n.prototype.__proto__=Uint8Array.prototype,n.__proto__=Uint8Array,n.alloc=function(J,k,j){return function(q,tg,Cg){return d(q),q<=0?l(q):tg!==void 0?typeof Cg=="string"?l(q).fill(tg,Cg):l(q).fill(tg):l(q)}(J,k,j)},n.allocUnsafe=function(J){return o(J)},n.allocUnsafeSlow=function(J){return o(J)},n.isBuffer=function(J){return J!=null&&J._isBuffer===!0&&J!==n.prototype},n.compare=function(J,k){if(L(J,Uint8Array)&&(J=n.from(J,J.offset,J.byteLength)),L(k,Uint8Array)&&(k=n.from(k,k.offset,k.byteLength)),!n.isBuffer(J)||!n.isBuffer(k))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(J===k)return 0;for(var j=J.length,q=k.length,tg=0,Cg=Math.min(j,q);tg<Cg;++tg)if(J[tg]!==k[tg]){j=J[tg],q=k[tg];break}return j<q?-1:q<j?1:0},n.isEncoding=function(J){switch(String(J).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},n.concat=function(J,k){if(!Array.isArray(J))throw new TypeError('"list" argument must be an Array of Buffers');if(J.length===0)return n.alloc(0);var j;if(k===void 0)for(k=0,j=0;j<J.length;++j)k+=J[j].length;var q=n.allocUnsafe(k),tg=0;for(j=0;j<J.length;++j){var Cg=J[j];if(L(Cg,Uint8Array)&&(Cg=n.from(Cg)),!n.isBuffer(Cg))throw new TypeError('"list" argument must be an Array of Buffers');Cg.copy(q,tg),tg+=Cg.length}return q},n.byteLength=h,n.prototype._isBuffer=!0,n.prototype.swap16=function(){var J=this.length;if(J%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var k=0;k<J;k+=2)u(this,k,k+1);return this},n.prototype.swap32=function(){var J=this.length;if(J%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var k=0;k<J;k+=4)u(this,k,k+3),u(this,k+1,k+2);return this},n.prototype.swap64=function(){var J=this.length;if(J%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var k=0;k<J;k+=8)u(this,k,k+7),u(this,k+1,k+6),u(this,k+2,k+5),u(this,k+3,k+4);return this},n.prototype.toString=function(){var J=this.length;return J===0?"":arguments.length===0?v(this,0,J):b.apply(this,arguments)},n.prototype.toLocaleString=n.prototype.toString,n.prototype.equals=function(J){if(!n.isBuffer(J))throw new TypeError("Argument must be a Buffer");return this===J||n.compare(this,J)===0},n.prototype.inspect=function(){var J="",k=i.INSPECT_MAX_BYTES;return J=this.toString("hex",0,k).replace(/(.{2})/g,"$1 ").trim(),this.length>k&&(J+=" ... "),"<Buffer "+J+">"},n.prototype.compare=function(J,k,j,q,tg){if(L(J,Uint8Array)&&(J=n.from(J,J.offset,J.byteLength)),!n.isBuffer(J))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof J);if(k===void 0&&(k=0),j===void 0&&(j=J?J.length:0),q===void 0&&(q=0),tg===void 0&&(tg=this.length),k<0||j>J.length||q<0||tg>this.length)throw new RangeError("out of range index");if(q>=tg&&k>=j)return 0;if(q>=tg)return-1;if(k>=j)return 1;if(this===J)return 0;for(var Cg=(tg>>>=0)-(q>>>=0),x=(j>>>=0)-(k>>>=0),sg=Math.min(Cg,x),Ag=this.slice(q,tg),O=J.slice(k,j),_=0;_<sg;++_)if(Ag[_]!==O[_]){Cg=Ag[_],x=O[_];break}return Cg<x?-1:x<Cg?1:0},n.prototype.includes=function(J,k,j){return this.indexOf(J,k,j)!==-1},n.prototype.indexOf=function(J,k,j){return m(this,J,k,j,!0)},n.prototype.lastIndexOf=function(J,k,j){return m(this,J,k,j,!1)},n.prototype.write=function(J,k,j,q){if(k===void 0)q="utf8",j=this.length,k=0;else if(j===void 0&&typeof k=="string")q=k,j=this.length,k=0;else{if(!isFinite(k))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");k>>>=0,isFinite(j)?(j>>>=0,q===void 0&&(q="utf8")):(q=j,j=void 0)}var tg=this.length-k;if((j===void 0||j>tg)&&(j=tg),J.length>0&&(j<0||k<0)||k>this.length)throw new RangeError("Attempt to write outside buffer bounds");q||(q="utf8");for(var Cg=!1;;)switch(q){case"hex":return p(this,J,k,j);case"utf8":case"utf-8":return Y(this,J,k,j);case"ascii":return R(this,J,k,j);case"latin1":case"binary":return X(this,J,k,j);case"base64":return H(this,J,k,j);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return S(this,J,k,j);default:if(Cg)throw new TypeError("Unknown encoding: "+q);q=(""+q).toLowerCase(),Cg=!0}},n.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function K(J,k,j){var q="";j=Math.min(J.length,j);for(var tg=k;tg<j;++tg)q+=String.fromCharCode(127&J[tg]);return q}function V(J,k,j){var q="";j=Math.min(J.length,j);for(var tg=k;tg<j;++tg)q+=String.fromCharCode(J[tg]);return q}function N(J,k,j){var q=J.length;(!k||k<0)&&(k=0),(!j||j<0||j>q)&&(j=q);for(var tg="",Cg=k;Cg<j;++Cg)tg+=F(J[Cg]);return tg}function B(J,k,j){for(var q=J.slice(k,j),tg="",Cg=0;Cg<q.length;Cg+=2)tg+=String.fromCharCode(q[Cg]+256*q[Cg+1]);return tg}function G(J,k,j){if(J%1!=0||J<0)throw new RangeError("offset is not uint");if(J+k>j)throw new RangeError("Trying to access beyond buffer length")}function w(J,k,j,q,tg,Cg){if(!n.isBuffer(J))throw new TypeError('"buffer" argument must be a Buffer instance');if(k>tg||k<Cg)throw new RangeError('"value" argument is out of bounds');if(j+q>J.length)throw new RangeError("Index out of range")}function W(J,k,j,q,tg,Cg){if(j+q>J.length)throw new RangeError("Index out of range");if(j<0)throw new RangeError("Index out of range")}function y(J,k,j,q,tg){return k=+k,j>>>=0,tg||W(J,0,j,4),s.write(J,k,j,q,23,4),j+4}function f(J,k,j,q,tg){return k=+k,j>>>=0,tg||W(J,0,j,8),s.write(J,k,j,q,52,8),j+8}n.prototype.slice=function(J,k){var j=this.length;(J=~~J)<0?(J+=j)<0&&(J=0):J>j&&(J=j),(k=k===void 0?j:~~k)<0?(k+=j)<0&&(k=0):k>j&&(k=j),k<J&&(k=J);var q=this.subarray(J,k);return q.__proto__=n.prototype,q},n.prototype.readUIntLE=function(J,k,j){J>>>=0,k>>>=0,j||G(J,k,this.length);for(var q=this[J],tg=1,Cg=0;++Cg<k&&(tg*=256);)q+=this[J+Cg]*tg;return q},n.prototype.readUIntBE=function(J,k,j){J>>>=0,k>>>=0,j||G(J,k,this.length);for(var q=this[J+--k],tg=1;k>0&&(tg*=256);)q+=this[J+--k]*tg;return q},n.prototype.readUInt8=function(J,k){return J>>>=0,k||G(J,1,this.length),this[J]},n.prototype.readUInt16LE=function(J,k){return J>>>=0,k||G(J,2,this.length),this[J]|this[J+1]<<8},n.prototype.readUInt16BE=function(J,k){return J>>>=0,k||G(J,2,this.length),this[J]<<8|this[J+1]},n.prototype.readUInt32LE=function(J,k){return J>>>=0,k||G(J,4,this.length),(this[J]|this[J+1]<<8|this[J+2]<<16)+16777216*this[J+3]},n.prototype.readUInt32BE=function(J,k){return J>>>=0,k||G(J,4,this.length),16777216*this[J]+(this[J+1]<<16|this[J+2]<<8|this[J+3])},n.prototype.readIntLE=function(J,k,j){J>>>=0,k>>>=0,j||G(J,k,this.length);for(var q=this[J],tg=1,Cg=0;++Cg<k&&(tg*=256);)q+=this[J+Cg]*tg;return q>=(tg*=128)&&(q-=Math.pow(2,8*k)),q},n.prototype.readIntBE=function(J,k,j){J>>>=0,k>>>=0,j||G(J,k,this.length);for(var q=k,tg=1,Cg=this[J+--q];q>0&&(tg*=256);)Cg+=this[J+--q]*tg;return Cg>=(tg*=128)&&(Cg-=Math.pow(2,8*k)),Cg},n.prototype.readInt8=function(J,k){return J>>>=0,k||G(J,1,this.length),128&this[J]?-1*(255-this[J]+1):this[J]},n.prototype.readInt16LE=function(J,k){J>>>=0,k||G(J,2,this.length);var j=this[J]|this[J+1]<<8;return 32768&j?4294901760|j:j},n.prototype.readInt16BE=function(J,k){J>>>=0,k||G(J,2,this.length);var j=this[J+1]|this[J]<<8;return 32768&j?4294901760|j:j},n.prototype.readInt32LE=function(J,k){return J>>>=0,k||G(J,4,this.length),this[J]|this[J+1]<<8|this[J+2]<<16|this[J+3]<<24},n.prototype.readInt32BE=function(J,k){return J>>>=0,k||G(J,4,this.length),this[J]<<24|this[J+1]<<16|this[J+2]<<8|this[J+3]},n.prototype.readFloatLE=function(J,k){return J>>>=0,k||G(J,4,this.length),s.read(this,J,!0,23,4)},n.prototype.readFloatBE=function(J,k){return J>>>=0,k||G(J,4,this.length),s.read(this,J,!1,23,4)},n.prototype.readDoubleLE=function(J,k){return J>>>=0,k||G(J,8,this.length),s.read(this,J,!0,52,8)},n.prototype.readDoubleBE=function(J,k){return J>>>=0,k||G(J,8,this.length),s.read(this,J,!1,52,8)},n.prototype.writeUIntLE=function(J,k,j,q){J=+J,k>>>=0,j>>>=0,q||w(this,J,k,j,Math.pow(2,8*j)-1,0);var tg=1,Cg=0;for(this[k]=255&J;++Cg<j&&(tg*=256);)this[k+Cg]=J/tg&255;return k+j},n.prototype.writeUIntBE=function(J,k,j,q){J=+J,k>>>=0,j>>>=0,q||w(this,J,k,j,Math.pow(2,8*j)-1,0);var tg=j-1,Cg=1;for(this[k+tg]=255&J;--tg>=0&&(Cg*=256);)this[k+tg]=J/Cg&255;return k+j},n.prototype.writeUInt8=function(J,k,j){return J=+J,k>>>=0,j||w(this,J,k,1,255,0),this[k]=255&J,k+1},n.prototype.writeUInt16LE=function(J,k,j){return J=+J,k>>>=0,j||w(this,J,k,2,65535,0),this[k]=255&J,this[k+1]=J>>>8,k+2},n.prototype.writeUInt16BE=function(J,k,j){return J=+J,k>>>=0,j||w(this,J,k,2,65535,0),this[k]=J>>>8,this[k+1]=255&J,k+2},n.prototype.writeUInt32LE=function(J,k,j){return J=+J,k>>>=0,j||w(this,J,k,4,4294967295,0),this[k+3]=J>>>24,this[k+2]=J>>>16,this[k+1]=J>>>8,this[k]=255&J,k+4},n.prototype.writeUInt32BE=function(J,k,j){return J=+J,k>>>=0,j||w(this,J,k,4,4294967295,0),this[k]=J>>>24,this[k+1]=J>>>16,this[k+2]=J>>>8,this[k+3]=255&J,k+4},n.prototype.writeIntLE=function(J,k,j,q){if(J=+J,k>>>=0,!q){var tg=Math.pow(2,8*j-1);w(this,J,k,j,tg-1,-tg)}var Cg=0,x=1,sg=0;for(this[k]=255&J;++Cg<j&&(x*=256);)J<0&&sg===0&&this[k+Cg-1]!==0&&(sg=1),this[k+Cg]=(J/x>>0)-sg&255;return k+j},n.prototype.writeIntBE=function(J,k,j,q){if(J=+J,k>>>=0,!q){var tg=Math.pow(2,8*j-1);w(this,J,k,j,tg-1,-tg)}var Cg=j-1,x=1,sg=0;for(this[k+Cg]=255&J;--Cg>=0&&(x*=256);)J<0&&sg===0&&this[k+Cg+1]!==0&&(sg=1),this[k+Cg]=(J/x>>0)-sg&255;return k+j},n.prototype.writeInt8=function(J,k,j){return J=+J,k>>>=0,j||w(this,J,k,1,127,-128),J<0&&(J=255+J+1),this[k]=255&J,k+1},n.prototype.writeInt16LE=function(J,k,j){return J=+J,k>>>=0,j||w(this,J,k,2,32767,-32768),this[k]=255&J,this[k+1]=J>>>8,k+2},n.prototype.writeInt16BE=function(J,k,j){return J=+J,k>>>=0,j||w(this,J,k,2,32767,-32768),this[k]=J>>>8,this[k+1]=255&J,k+2},n.prototype.writeInt32LE=function(J,k,j){return J=+J,k>>>=0,j||w(this,J,k,4,2147483647,-2147483648),this[k]=255&J,this[k+1]=J>>>8,this[k+2]=J>>>16,this[k+3]=J>>>24,k+4},n.prototype.writeInt32BE=function(J,k,j){return J=+J,k>>>=0,j||w(this,J,k,4,2147483647,-2147483648),J<0&&(J=4294967295+J+1),this[k]=J>>>24,this[k+1]=J>>>16,this[k+2]=J>>>8,this[k+3]=255&J,k+4},n.prototype.writeFloatLE=function(J,k,j){return y(this,J,k,!0,j)},n.prototype.writeFloatBE=function(J,k,j){return y(this,J,k,!1,j)},n.prototype.writeDoubleLE=function(J,k,j){return f(this,J,k,!0,j)},n.prototype.writeDoubleBE=function(J,k,j){return f(this,J,k,!1,j)},n.prototype.copy=function(J,k,j,q){if(!n.isBuffer(J))throw new TypeError("argument should be a Buffer");if(j||(j=0),q||q===0||(q=this.length),k>=J.length&&(k=J.length),k||(k=0),q>0&&q<j&&(q=j),q===j||J.length===0||this.length===0)return 0;if(k<0)throw new RangeError("targetStart out of bounds");if(j<0||j>=this.length)throw new RangeError("Index out of range");if(q<0)throw new RangeError("sourceEnd out of bounds");q>this.length&&(q=this.length),J.length-k<q-j&&(q=J.length-k+j);var tg=q-j;if(this===J&&typeof Uint8Array.prototype.copyWithin=="function")this.copyWithin(k,j,q);else if(this===J&&j<k&&k<q)for(var Cg=tg-1;Cg>=0;--Cg)J[Cg+k]=this[Cg+j];else Uint8Array.prototype.set.call(J,this.subarray(j,q),k);return tg},n.prototype.fill=function(J,k,j,q){if(typeof J=="string"){if(typeof k=="string"?(q=k,k=0,j=this.length):typeof j=="string"&&(q=j,j=this.length),q!==void 0&&typeof q!="string")throw new TypeError("encoding must be a string");if(typeof q=="string"&&!n.isEncoding(q))throw new TypeError("Unknown encoding: "+q);if(J.length===1){var tg=J.charCodeAt(0);(q==="utf8"&&tg<128||q==="latin1")&&(J=tg)}}else typeof J=="number"&&(J&=255);if(k<0||this.length<k||this.length<j)throw new RangeError("Out of range index");if(j<=k)return this;var Cg;if(k>>>=0,j=j===void 0?this.length:j>>>0,J||(J=0),typeof J=="number")for(Cg=k;Cg<j;++Cg)this[Cg]=J;else{var x=n.isBuffer(J)?J:n.from(J,q),sg=x.length;if(sg===0)throw new TypeError('The value "'+J+'" is invalid for argument "value"');for(Cg=0;Cg<j-k;++Cg)this[Cg+k]=x[Cg%sg]}return this};var D=/[^+/0-9A-Za-z-_]/g;function F(J){return J<16?"0"+J.toString(16):J.toString(16)}function T(J,k){var j;k=k||1/0;for(var q=J.length,tg=null,Cg=[],x=0;x<q;++x){if((j=J.charCodeAt(x))>55295&&j<57344){if(!tg){if(j>56319){(k-=3)>-1&&Cg.push(239,191,189);continue}if(x+1===q){(k-=3)>-1&&Cg.push(239,191,189);continue}tg=j;continue}if(j<56320){(k-=3)>-1&&Cg.push(239,191,189),tg=j;continue}j=65536+(tg-55296<<10|j-56320)}else tg&&(k-=3)>-1&&Cg.push(239,191,189);if(tg=null,j<128){if((k-=1)<0)break;Cg.push(j)}else if(j<2048){if((k-=2)<0)break;Cg.push(j>>6|192,63&j|128)}else if(j<65536){if((k-=3)<0)break;Cg.push(j>>12|224,j>>6&63|128,63&j|128)}else{if(!(j<1114112))throw new Error("Invalid code point");if((k-=4)<0)break;Cg.push(j>>18|240,j>>12&63|128,j>>6&63|128,63&j|128)}}return Cg}function Q(J){return A.toByteArray(function(k){if((k=(k=k.split("=")[0]).trim().replace(D,"")).length<2)return"";for(;k.length%4!=0;)k+="=";return k}(J))}function P(J,k,j,q){for(var tg=0;tg<q&&!(tg+j>=k.length||tg>=J.length);++tg)k[tg+j]=J[tg];return tg}function L(J,k){return J instanceof k||J!=null&&J.constructor!=null&&J.constructor.name!=null&&J.constructor.name===k.name}function E(J){return J!=J}}).call(this)}).call(this,g("buffer").Buffer)},{"base64-js":185,buffer:220,ieee754:439}],221:[function(g,C,i){var e=g("safe-buffer").Buffer,A=g("stream").Transform,s=g("string_decoder").StringDecoder;function l(n){A.call(this),this.hashMode=typeof n=="string",this.hashMode?this[n]=this._finalOrDigest:this.final=this._finalOrDigest,this._final&&(this.__final=this._final,this._final=null),this._decoder=null,this._encoding=null}g("inherits")(l,A),l.prototype.update=function(n,a,d){typeof n=="string"&&(n=e.from(n,a));var o=this._update(n);return this.hashMode?this:(d&&(o=this._toString(o,d)),o)},l.prototype.setAutoPadding=function(){},l.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")},l.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")},l.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")},l.prototype._transform=function(n,a,d){var o;try{this.hashMode?this._update(n):this.push(this._update(n))}catch(c){o=c}finally{d(o)}},l.prototype._flush=function(n){var a;try{this.push(this.__final())}catch(d){a=d}n(a)},l.prototype._finalOrDigest=function(n){var a=this.__final()||e.alloc(0);return n&&(a=this._toString(a,n,!0)),a},l.prototype._toString=function(n,a,d){if(this._decoder||(this._decoder=new s(a),this._encoding=a),this._encoding!==a)throw new Error("can't switch encodings");var o=this._decoder.write(n);return d&&(o+=this._decoder.end()),o},C.exports=l},{inherits:440,"safe-buffer":494,stream:505,string_decoder:218}],222:[function(g,C,i){var e=g("../internals/is-callable"),A=g("../internals/try-to-string"),s=TypeError;C.exports=function(l){if(e(l))return l;throw new s(A(l)+" is not a function")}},{"../internals/is-callable":285,"../internals/try-to-string":349}],223:[function(g,C,i){var e=g("../internals/is-constructor"),A=g("../internals/try-to-string"),s=TypeError;C.exports=function(l){if(e(l))return l;throw new s(A(l)+" is not a constructor")}},{"../internals/is-constructor":286,"../internals/try-to-string":349}],224:[function(g,C,i){var e=g("../internals/is-callable"),A=String,s=TypeError;C.exports=function(l){if(typeof l=="object"||e(l))return l;throw new s("Can't set "+A(l)+" as a prototype")}},{"../internals/is-callable":285}],225:[function(g,C,i){var e=g("../internals/well-known-symbol"),A=g("../internals/object-create"),s=g("../internals/object-define-property").f,l=e("unscopables"),n=Array.prototype;n[l]===void 0&&s(n,l,{configurable:!0,value:A(null)}),C.exports=function(a){n[l][a]=!0}},{"../internals/object-create":306,"../internals/object-define-property":308,"../internals/well-known-symbol":357}],226:[function(g,C,i){var e=g("../internals/object-is-prototype-of"),A=TypeError;C.exports=function(s,l){if(e(l,s))return s;throw new A("Incorrect invocation")}},{"../internals/object-is-prototype-of":314}],227:[function(g,C,i){var e=g("../internals/is-object"),A=String,s=TypeError;C.exports=function(l){if(e(l))return l;throw new s(A(l)+" is not an object")}},{"../internals/is-object":289}],228:[function(g,C,i){var e=g("../internals/to-indexed-object"),A=g("../internals/to-absolute-index"),s=g("../internals/length-of-array-like"),l=function(n){return function(a,d,o){var c,r=e(a),h=s(r),b=A(o,h);if(n&&d!=d){for(;h>b;)if((c=r[b++])!=c)return!0}else for(;h>b;b++)if((n||b in r)&&r[b]===d)return n||b||0;return!n&&-1}};C.exports={includes:l(!0),indexOf:l(!1)}},{"../internals/length-of-array-like":299,"../internals/to-absolute-index":340,"../internals/to-indexed-object":341}],229:[function(g,C,i){var e=g("../internals/function-bind-context"),A=g("../internals/function-uncurry-this"),s=g("../internals/indexed-object"),l=g("../internals/to-object"),n=g("../internals/length-of-array-like"),a=g("../internals/array-species-create"),d=A([].push),o=function(c){var r=c===1,h=c===2,b=c===3,u=c===4,m=c===6,Z=c===7,p=c===5||m;return function(Y,R,X,H){for(var S,z,v=l(Y),K=s(v),V=e(R,X),N=n(K),B=0,G=H||a,w=r?G(Y,N):h||Z?G(Y,0):void 0;N>B;B++)if((p||B in K)&&(z=V(S=K[B],B,v),c))if(r)w[B]=z;else if(z)switch(c){case 3:return!0;case 5:return S;case 6:return B;case 2:d(w,S)}else switch(c){case 4:return!1;case 7:d(w,S)}return m?-1:b||u?u:w}};C.exports={forEach:o(0),map:o(1),filter:o(2),some:o(3),every:o(4),find:o(5),findIndex:o(6),filterReject:o(7)}},{"../internals/array-species-create":233,"../internals/function-bind-context":262,"../internals/function-uncurry-this":268,"../internals/indexed-object":280,"../internals/length-of-array-like":299,"../internals/to-object":344}],230:[function(g,C,i){var e=g("../internals/to-absolute-index"),A=g("../internals/length-of-array-like"),s=g("../internals/create-property"),l=Array,n=Math.max;C.exports=function(a,d,o){for(var c=A(a),r=e(d,c),h=e(o===void 0?c:o,c),b=l(n(h-r,0)),u=0;r<h;r++,u++)s(b,u,a[r]);return b.length=u,b}},{"../internals/create-property":243,"../internals/length-of-array-like":299,"../internals/to-absolute-index":340}],231:[function(g,C,i){var e=g("../internals/function-uncurry-this");C.exports=e([].slice)},{"../internals/function-uncurry-this":268}],232:[function(g,C,i){var e=g("../internals/is-array"),A=g("../internals/is-constructor"),s=g("../internals/is-object"),l=g("../internals/well-known-symbol")("species"),n=Array;C.exports=function(a){var d;return e(a)&&(d=a.constructor,(A(d)&&(d===n||e(d.prototype))||s(d)&&(d=d[l])===null)&&(d=void 0)),d===void 0?n:d}},{"../internals/is-array":284,"../internals/is-constructor":286,"../internals/is-object":289,"../internals/well-known-symbol":357}],233:[function(g,C,i){var e=g("../internals/array-species-constructor");C.exports=function(A,s){return new(e(A))(s===0?0:s)}},{"../internals/array-species-constructor":232}],234:[function(g,C,i){var e=g("../internals/well-known-symbol")("iterator"),A=!1;try{var s=0,l={next:function(){return{done:!!s++}},return:function(){A=!0}};l[e]=function(){return this},Array.from(l,function(){throw 2})}catch{}C.exports=function(n,a){try{if(!a&&!A)return!1}catch{return!1}var d=!1;try{var o={};o[e]=function(){return{next:function(){return{done:d=!0}}}},n(o)}catch{}return d}},{"../internals/well-known-symbol":357}],235:[function(g,C,i){var e=g("../internals/function-uncurry-this"),A=e({}.toString),s=e("".slice);C.exports=function(l){return s(A(l),8,-1)}},{"../internals/function-uncurry-this":268}],236:[function(g,C,i){var e=g("../internals/to-string-tag-support"),A=g("../internals/is-callable"),s=g("../internals/classof-raw"),l=g("../internals/well-known-symbol")("toStringTag"),n=Object,a=s(function(){return arguments}())==="Arguments";C.exports=e?s:function(d){var o,c,r;return d===void 0?"Undefined":d===null?"Null":typeof(c=function(h,b){try{return h[b]}catch{}}(o=n(d),l))=="string"?c:a?s(o):(r=s(o))==="Object"&&A(o.callee)?"Arguments":r}},{"../internals/classof-raw":235,"../internals/is-callable":285,"../internals/to-string-tag-support":347,"../internals/well-known-symbol":357}],237:[function(g,C,i){var e=g("../internals/has-own-property"),A=g("../internals/own-keys"),s=g("../internals/object-get-own-property-descriptor"),l=g("../internals/object-define-property");C.exports=function(n,a,d){for(var o=A(a),c=l.f,r=s.f,h=0;h<o.length;h++){var b=o[h];e(n,b)||d&&e(d,b)||c(n,b,r(a,b))}}},{"../internals/has-own-property":275,"../internals/object-define-property":308,"../internals/object-get-own-property-descriptor":309,"../internals/own-keys":321}],238:[function(g,C,i){var e=g("../internals/well-known-symbol")("match");C.exports=function(A){var s=/./;try{"/./"[A](s)}catch{try{return s[e]=!1,"/./"[A](s)}catch{}}return!1}},{"../internals/well-known-symbol":357}],239:[function(g,C,i){var e=g("../internals/fails");C.exports=!e(function(){function A(){}return A.prototype.constructor=null,Object.getPrototypeOf(new A)!==A.prototype})},{"../internals/fails":260}],240:[function(g,C,i){C.exports=function(e,A){return{value:e,done:A}}},{}],241:[function(g,C,i){var e=g("../internals/descriptors"),A=g("../internals/object-define-property"),s=g("../internals/create-property-descriptor");C.exports=e?function(l,n,a){return A.f(l,n,s(1,a))}:function(l,n,a){return l[n]=a,l}},{"../internals/create-property-descriptor":242,"../internals/descriptors":247,"../internals/object-define-property":308}],242:[function(g,C,i){C.exports=function(e,A){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:A}}},{}],243:[function(g,C,i){var e=g("../internals/to-property-key"),A=g("../internals/object-define-property"),s=g("../internals/create-property-descriptor");C.exports=function(l,n,a){var d=e(n);d in l?A.f(l,d,s(0,a)):l[d]=a}},{"../internals/create-property-descriptor":242,"../internals/object-define-property":308,"../internals/to-property-key":346}],244:[function(g,C,i){var e=g("../internals/make-built-in"),A=g("../internals/object-define-property");C.exports=function(s,l,n){return n.get&&e(n.get,l,{getter:!0}),n.set&&e(n.set,l,{setter:!0}),A.f(s,l,n)}},{"../internals/make-built-in":300,"../internals/object-define-property":308}],245:[function(g,C,i){var e=g("../internals/is-callable"),A=g("../internals/object-define-property"),s=g("../internals/make-built-in"),l=g("../internals/define-global-property");C.exports=function(n,a,d,o){o||(o={});var c=o.enumerable,r=o.name!==void 0?o.name:a;if(e(d)&&s(d,r,o),o.global)c?n[a]=d:l(a,d);else{try{o.unsafe?n[a]&&(c=!0):delete n[a]}catch{}c?n[a]=d:A.f(n,a,{value:d,enumerable:!1,configurable:!o.nonConfigurable,writable:!o.nonWritable})}return n}},{"../internals/define-global-property":246,"../internals/is-callable":285,"../internals/make-built-in":300,"../internals/object-define-property":308}],246:[function(g,C,i){var e=g("../internals/global"),A=Object.defineProperty;C.exports=function(s,l){try{A(e,s,{value:l,configurable:!0,writable:!0})}catch{e[s]=l}return l}},{"../internals/global":274}],247:[function(g,C,i){var e=g("../internals/fails");C.exports=!e(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!==7})},{"../internals/fails":260}],248:[function(g,C,i){var e=typeof document=="object"&&document.all,A=e===void 0&&e!==void 0;C.exports={all:e,IS_HTMLDDA:A}},{}],249:[function(g,C,i){var e=g("../internals/global"),A=g("../internals/is-object"),s=e.document,l=A(s)&&A(s.createElement);C.exports=function(n){return l?s.createElement(n):{}}},{"../internals/global":274,"../internals/is-object":289}],250:[function(g,C,i){var e=g("../internals/engine-is-deno"),A=g("../internals/engine-is-node");C.exports=!e&&!A&&typeof window=="object"&&typeof document=="object"},{"../internals/engine-is-deno":251,"../internals/engine-is-node":254}],251:[function(g,C,i){C.exports=typeof Deno=="object"&&Deno&&typeof Deno.version=="object"},{}],252:[function(g,C,i){var e=g("../internals/engine-user-agent");C.exports=/ipad|iphone|ipod/i.test(e)&&typeof Pebble<"u"},{"../internals/engine-user-agent":256}],253:[function(g,C,i){var e=g("../internals/engine-user-agent");C.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(e)},{"../internals/engine-user-agent":256}],254:[function(g,C,i){var e=g("../internals/global"),A=g("../internals/classof-raw");C.exports=A(e.process)==="process"},{"../internals/classof-raw":235,"../internals/global":274}],255:[function(g,C,i){var e=g("../internals/engine-user-agent");C.exports=/web0s(?!.*chrome)/i.test(e)},{"../internals/engine-user-agent":256}],256:[function(g,C,i){C.exports=typeof navigator<"u"&&String(navigator.userAgent)||""},{}],257:[function(g,C,i){var e,A,s=g("../internals/global"),l=g("../internals/engine-user-agent"),n=s.process,a=s.Deno,d=n&&n.versions||a&&a.version,o=d&&d.v8;o&&(A=(e=o.split("."))[0]>0&&e[0]<4?1:+(e[0]+e[1])),!A&&l&&(!(e=l.match(/Edge\/(\d+)/))||e[1]>=74)&&(e=l.match(/Chrome\/(\d+)/))&&(A=+e[1]),C.exports=A},{"../internals/engine-user-agent":256,"../internals/global":274}],258:[function(g,C,i){C.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},{}],259:[function(g,C,i){var e=g("../internals/global"),A=g("../internals/object-get-own-property-descriptor").f,s=g("../internals/create-non-enumerable-property"),l=g("../internals/define-built-in"),n=g("../internals/define-global-property"),a=g("../internals/copy-constructor-properties"),d=g("../internals/is-forced");C.exports=function(o,c){var r,h,b,u,m,Z=o.target,p=o.global,Y=o.stat;if(r=p?e:Y?e[Z]||n(Z,{}):(e[Z]||{}).prototype)for(h in c){if(u=c[h],b=o.dontCallGetSet?(m=A(r,h))&&m.value:r[h],!d(p?h:Z+(Y?".":"#")+h,o.forced)&&b!==void 0){if(typeof u==typeof b)continue;a(u,b)}(o.sham||b&&b.sham)&&s(u,"sham",!0),l(r,h,u,o)}}},{"../internals/copy-constructor-properties":237,"../internals/create-non-enumerable-property":241,"../internals/define-built-in":245,"../internals/define-global-property":246,"../internals/global":274,"../internals/is-forced":287,"../internals/object-get-own-property-descriptor":309}],260:[function(g,C,i){C.exports=function(e){try{return!!e()}catch{return!0}}},{}],261:[function(g,C,i){var e=g("../internals/function-bind-native"),A=Function.prototype,s=A.apply,l=A.call;C.exports=typeof Reflect=="object"&&Reflect.apply||(e?l.bind(s):function(){return l.apply(s,arguments)})},{"../internals/function-bind-native":263}],262:[function(g,C,i){var e=g("../internals/function-uncurry-this-clause"),A=g("../internals/a-callable"),s=g("../internals/function-bind-native"),l=e(e.bind);C.exports=function(n,a){return A(n),a===void 0?n:s?l(n,a):function(){return n.apply(a,arguments)}}},{"../internals/a-callable":222,"../internals/function-bind-native":263,"../internals/function-uncurry-this-clause":267}],263:[function(g,C,i){var e=g("../internals/fails");C.exports=!e(function(){var A=(function(){}).bind();return typeof A!="function"||A.hasOwnProperty("prototype")})},{"../internals/fails":260}],264:[function(g,C,i){var e=g("../internals/function-bind-native"),A=Function.prototype.call;C.exports=e?A.bind(A):function(){return A.apply(A,arguments)}},{"../internals/function-bind-native":263}],265:[function(g,C,i){var e=g("../internals/descriptors"),A=g("../internals/has-own-property"),s=Function.prototype,l=e&&Object.getOwnPropertyDescriptor,n=A(s,"name"),a=n&&(function(){}).name==="something",d=n&&(!e||e&&l(s,"name").configurable);C.exports={EXISTS:n,PROPER:a,CONFIGURABLE:d}},{"../internals/descriptors":247,"../internals/has-own-property":275}],266:[function(g,C,i){var e=g("../internals/function-uncurry-this"),A=g("../internals/a-callable");C.exports=function(s,l,n){try{return e(A(Object.getOwnPropertyDescriptor(s,l)[n]))}catch{}}},{"../internals/a-callable":222,"../internals/function-uncurry-this":268}],267:[function(g,C,i){var e=g("../internals/classof-raw"),A=g("../internals/function-uncurry-this");C.exports=function(s){if(e(s)==="Function")return A(s)}},{"../internals/classof-raw":235,"../internals/function-uncurry-this":268}],268:[function(g,C,i){var e=g("../internals/function-bind-native"),A=Function.prototype,s=A.call,l=e&&A.bind.bind(s,s);C.exports=e?l:function(n){return function(){return s.apply(n,arguments)}}},{"../internals/function-bind-native":263}],269:[function(g,C,i){var e=g("../internals/global"),A=g("../internals/is-callable"),s=function(l){return A(l)?l:void 0};C.exports=function(l,n){return arguments.length<2?s(e[l]):e[l]&&e[l][n]}},{"../internals/global":274,"../internals/is-callable":285}],270:[function(g,C,i){var e=g("../internals/classof"),A=g("../internals/get-method"),s=g("../internals/is-null-or-undefined"),l=g("../internals/iterators"),n=g("../internals/well-known-symbol")("iterator");C.exports=function(a){if(!s(a))return A(a,n)||A(a,"@@iterator")||l[e(a)]}},{"../internals/classof":236,"../internals/get-method":273,"../internals/is-null-or-undefined":288,"../internals/iterators":298,"../internals/well-known-symbol":357}],271:[function(g,C,i){var e=g("../internals/function-call"),A=g("../internals/a-callable"),s=g("../internals/an-object"),l=g("../internals/try-to-string"),n=g("../internals/get-iterator-method"),a=TypeError;C.exports=function(d,o){var c=arguments.length<2?n(d):o;if(A(c))return s(e(c,d));throw new a(l(d)+" is not iterable")}},{"../internals/a-callable":222,"../internals/an-object":227,"../internals/function-call":264,"../internals/get-iterator-method":270,"../internals/try-to-string":349}],272:[function(g,C,i){var e=g("../internals/function-uncurry-this"),A=g("../internals/is-array"),s=g("../internals/is-callable"),l=g("../internals/classof-raw"),n=g("../internals/to-string"),a=e([].push);C.exports=function(d){if(s(d))return d;if(A(d)){for(var o=d.length,c=[],r=0;r<o;r++){var h=d[r];typeof h=="string"?a(c,h):typeof h!="number"&&l(h)!=="Number"&&l(h)!=="String"||a(c,n(h))}var b=c.length,u=!0;return function(m,Z){if(u)return u=!1,Z;if(A(this))return Z;for(var p=0;p<b;p++)if(c[p]===m)return Z}}}},{"../internals/classof-raw":235,"../internals/function-uncurry-this":268,"../internals/is-array":284,"../internals/is-callable":285,"../internals/to-string":348}],273:[function(g,C,i){var e=g("../internals/a-callable"),A=g("../internals/is-null-or-undefined");C.exports=function(s,l){var n=s[l];return A(n)?void 0:e(n)}},{"../internals/a-callable":222,"../internals/is-null-or-undefined":288}],274:[function(g,C,i){(function(e){(function(){var A=function(s){return s&&s.Math===Math&&s};C.exports=A(typeof globalThis=="object"&&globalThis)||A(typeof window=="object"&&window)||A(typeof self=="object"&&self)||A(typeof e=="object"&&e)||function(){return this}()||this||Function("return this")()}).call(this)}).call(this,typeof FI<"u"?FI:typeof self<"u"?self:typeof window<"u"?window:{})},{}],275:[function(g,C,i){var e=g("../internals/function-uncurry-this"),A=g("../internals/to-object"),s=e({}.hasOwnProperty);C.exports=Object.hasOwn||function(l,n){return s(A(l),n)}},{"../internals/function-uncurry-this":268,"../internals/to-object":344}],276:[function(g,C,i){C.exports={}},{}],277:[function(g,C,i){C.exports=function(e,A){try{arguments.length===1?console.error(e):console.error(e,A)}catch{}}},{}],278:[function(g,C,i){var e=g("../internals/get-built-in");C.exports=e("document","documentElement")},{"../internals/get-built-in":269}],279:[function(g,C,i){var e=g("../internals/descriptors"),A=g("../internals/fails"),s=g("../internals/document-create-element");C.exports=!e&&!A(function(){return Object.defineProperty(s("div"),"a",{get:function(){return 7}}).a!==7})},{"../internals/descriptors":247,"../internals/document-create-element":249,"../internals/fails":260}],280:[function(g,C,i){var e=g("../internals/function-uncurry-this"),A=g("../internals/fails"),s=g("../internals/classof-raw"),l=Object,n=e("".split);C.exports=A(function(){return!l("z").propertyIsEnumerable(0)})?function(a){return s(a)==="String"?n(a,""):l(a)}:l},{"../internals/classof-raw":235,"../internals/fails":260,"../internals/function-uncurry-this":268}],281:[function(g,C,i){var e=g("../internals/function-uncurry-this"),A=g("../internals/is-callable"),s=g("../internals/shared-store"),l=e(Function.toString);A(s.inspectSource)||(s.inspectSource=function(n){return l(n)}),C.exports=s.inspectSource},{"../internals/function-uncurry-this":268,"../internals/is-callable":285,"../internals/shared-store":333}],282:[function(g,C,i){var e,A,s,l=g("../internals/weak-map-basic-detection"),n=g("../internals/global"),a=g("../internals/is-object"),d=g("../internals/create-non-enumerable-property"),o=g("../internals/has-own-property"),c=g("../internals/shared-store"),r=g("../internals/shared-key"),h=g("../internals/hidden-keys"),b=n.TypeError,u=n.WeakMap;if(l||c.state){var m=c.state||(c.state=new u);m.get=m.get,m.has=m.has,m.set=m.set,e=function(p,Y){if(m.has(p))throw new b("Object already initialized");return Y.facade=p,m.set(p,Y),Y},A=function(p){return m.get(p)||{}},s=function(p){return m.has(p)}}else{var Z=r("state");h[Z]=!0,e=function(p,Y){if(o(p,Z))throw new b("Object already initialized");return Y.facade=p,d(p,Z,Y),Y},A=function(p){return o(p,Z)?p[Z]:{}},s=function(p){return o(p,Z)}}C.exports={set:e,get:A,has:s,enforce:function(p){return s(p)?A(p):e(p,{})},getterFor:function(p){return function(Y){var R;if(!a(Y)||(R=A(Y)).type!==p)throw new b("Incompatible receiver, "+p+" required");return R}}}},{"../internals/create-non-enumerable-property":241,"../internals/global":274,"../internals/has-own-property":275,"../internals/hidden-keys":276,"../internals/is-object":289,"../internals/shared-key":332,"../internals/shared-store":333,"../internals/weak-map-basic-detection":354}],283:[function(g,C,i){var e=g("../internals/well-known-symbol"),A=g("../internals/iterators"),s=e("iterator"),l=Array.prototype;C.exports=function(n){return n!==void 0&&(A.Array===n||l[s]===n)}},{"../internals/iterators":298,"../internals/well-known-symbol":357}],284:[function(g,C,i){var e=g("../internals/classof-raw");C.exports=Array.isArray||function(A){return e(A)==="Array"}},{"../internals/classof-raw":235}],285:[function(g,C,i){var e=g("../internals/document-all"),A=e.all;C.exports=e.IS_HTMLDDA?function(s){return typeof s=="function"||s===A}:function(s){return typeof s=="function"}},{"../internals/document-all":248}],286:[function(g,C,i){var e=g("../internals/function-uncurry-this"),A=g("../internals/fails"),s=g("../internals/is-callable"),l=g("../internals/classof"),n=g("../internals/get-built-in"),a=g("../internals/inspect-source"),d=function(){},o=[],c=n("Reflect","construct"),r=/^\s*(?:class|function)\b/,h=e(r.exec),b=!r.test(d),u=function(Z){if(!s(Z))return!1;try{return c(d,o,Z),!0}catch{return!1}},m=function(Z){if(!s(Z))return!1;switch(l(Z)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return b||!!h(r,a(Z))}catch{return!0}};m.sham=!0,C.exports=!c||A(function(){var Z;return u(u.call)||!u(Object)||!u(function(){Z=!0})||Z})?m:u},{"../internals/classof":236,"../internals/fails":260,"../internals/function-uncurry-this":268,"../internals/get-built-in":269,"../internals/inspect-source":281,"../internals/is-callable":285}],287:[function(g,C,i){var e=g("../internals/fails"),A=g("../internals/is-callable"),s=/#|\.prototype\./,l=function(c,r){var h=a[n(c)];return h===o||h!==d&&(A(r)?e(r):!!r)},n=l.normalize=function(c){return String(c).replace(s,".").toLowerCase()},a=l.data={},d=l.NATIVE="N",o=l.POLYFILL="P";C.exports=l},{"../internals/fails":260,"../internals/is-callable":285}],288:[function(g,C,i){C.exports=function(e){return e==null}},{}],289:[function(g,C,i){var e=g("../internals/is-callable"),A=g("../internals/document-all"),s=A.all;C.exports=A.IS_HTMLDDA?function(l){return typeof l=="object"?l!==null:e(l)||l===s}:function(l){return typeof l=="object"?l!==null:e(l)}},{"../internals/document-all":248,"../internals/is-callable":285}],290:[function(g,C,i){C.exports=!1},{}],291:[function(g,C,i){var e=g("../internals/is-object"),A=g("../internals/classof-raw"),s=g("../internals/well-known-symbol")("match");C.exports=function(l){var n;return e(l)&&((n=l[s])!==void 0?!!n:A(l)==="RegExp")}},{"../internals/classof-raw":235,"../internals/is-object":289,"../internals/well-known-symbol":357}],292:[function(g,C,i){var e=g("../internals/get-built-in"),A=g("../internals/is-callable"),s=g("../internals/object-is-prototype-of"),l=g("../internals/use-symbol-as-uid"),n=Object;C.exports=l?function(a){return typeof a=="symbol"}:function(a){var d=e("Symbol");return A(d)&&s(d.prototype,n(a))}},{"../internals/get-built-in":269,"../internals/is-callable":285,"../internals/object-is-prototype-of":314,"../internals/use-symbol-as-uid":351}],293:[function(g,C,i){var e=g("../internals/function-bind-context"),A=g("../internals/function-call"),s=g("../internals/an-object"),l=g("../internals/try-to-string"),n=g("../internals/is-array-iterator-method"),a=g("../internals/length-of-array-like"),d=g("../internals/object-is-prototype-of"),o=g("../internals/get-iterator"),c=g("../internals/get-iterator-method"),r=g("../internals/iterator-close"),h=TypeError,b=function(m,Z){this.stopped=m,this.result=Z},u=b.prototype;C.exports=function(m,Z,p){var Y,R,X,H,S,z,v,K=p&&p.that,V=!(!p||!p.AS_ENTRIES),N=!(!p||!p.IS_RECORD),B=!(!p||!p.IS_ITERATOR),G=!(!p||!p.INTERRUPTED),w=e(Z,K),W=function(f){return Y&&r(Y,"normal",f),new b(!0,f)},y=function(f){return V?(s(f),G?w(f[0],f[1],W):w(f[0],f[1])):G?w(f,W):w(f)};if(N)Y=m.iterator;else if(B)Y=m;else{if(!(R=c(m)))throw new h(l(m)+" is not iterable");if(n(R)){for(X=0,H=a(m);H>X;X++)if((S=y(m[X]))&&d(u,S))return S;return new b(!1)}Y=o(m,R)}for(z=N?m.next:Y.next;!(v=A(z,Y)).done;){try{S=y(v.value)}catch(f){r(Y,"throw",f)}if(typeof S=="object"&&S&&d(u,S))return S}return new b(!1)}},{"../internals/an-object":227,"../internals/function-bind-context":262,"../internals/function-call":264,"../internals/get-iterator":271,"../internals/get-iterator-method":270,"../internals/is-array-iterator-method":283,"../internals/iterator-close":294,"../internals/length-of-array-like":299,"../internals/object-is-prototype-of":314,"../internals/try-to-string":349}],294:[function(g,C,i){var e=g("../internals/function-call"),A=g("../internals/an-object"),s=g("../internals/get-method");C.exports=function(l,n,a){var d,o;A(l);try{if(!(d=s(l,"return"))){if(n==="throw")throw a;return a}d=e(d,l)}catch(c){o=!0,d=c}if(n==="throw")throw a;if(o)throw d;return A(d),a}},{"../internals/an-object":227,"../internals/function-call":264,"../internals/get-method":273}],295:[function(g,C,i){var e=g("../internals/iterators-core").IteratorPrototype,A=g("../internals/object-create"),s=g("../internals/create-property-descriptor"),l=g("../internals/set-to-string-tag"),n=g("../internals/iterators"),a=function(){return this};C.exports=function(d,o,c,r){var h=o+" Iterator";return d.prototype=A(e,{next:s(+!r,c)}),l(d,h,!1,!0),n[h]=a,d}},{"../internals/create-property-descriptor":242,"../internals/iterators":298,"../internals/iterators-core":297,"../internals/object-create":306,"../internals/set-to-string-tag":331}],296:[function(g,C,i){var e=g("../internals/export"),A=g("../internals/function-call"),s=g("../internals/is-pure"),l=g("../internals/function-name"),n=g("../internals/is-callable"),a=g("../internals/iterator-create-constructor"),d=g("../internals/object-get-prototype-of"),o=g("../internals/object-set-prototype-of"),c=g("../internals/set-to-string-tag"),r=g("../internals/create-non-enumerable-property"),h=g("../internals/define-built-in"),b=g("../internals/well-known-symbol"),u=g("../internals/iterators"),m=g("../internals/iterators-core"),Z=l.PROPER,p=l.CONFIGURABLE,Y=m.IteratorPrototype,R=m.BUGGY_SAFARI_ITERATORS,X=b("iterator"),H=function(){return this};C.exports=function(S,z,v,K,V,N,B){a(v,z,K);var G,w,W,y=function(L){if(L===V&&Q)return Q;if(!R&&L&&L in F)return F[L];switch(L){case"keys":case"values":case"entries":return function(){return new v(this,L)}}return function(){return new v(this)}},f=z+" Iterator",D=!1,F=S.prototype,T=F[X]||F["@@iterator"]||V&&F[V],Q=!R&&T||y(V),P=z==="Array"&&F.entries||T;if(P&&(G=d(P.call(new S)))!==Object.prototype&&G.next&&(s||d(G)===Y||(o?o(G,Y):n(G[X])||h(G,X,H)),c(G,f,!0,!0),s&&(u[f]=H)),Z&&V==="values"&&T&&T.name!=="values"&&(!s&&p?r(F,"name","values"):(D=!0,Q=function(){return A(T,this)})),V)if(w={values:y("values"),keys:N?Q:y("keys"),entries:y("entries")},B)for(W in w)(R||D||!(W in F))&&h(F,W,w[W]);else e({target:z,proto:!0,forced:R||D},w);return s&&!B||F[X]===Q||h(F,X,Q,{name:V}),u[z]=Q,w}},{"../internals/create-non-enumerable-property":241,"../internals/define-built-in":245,"../internals/export":259,"../internals/function-call":264,"../internals/function-name":265,"../internals/is-callable":285,"../internals/is-pure":290,"../internals/iterator-create-constructor":295,"../internals/iterators":298,"../internals/iterators-core":297,"../internals/object-get-prototype-of":313,"../internals/object-set-prototype-of":318,"../internals/set-to-string-tag":331,"../internals/well-known-symbol":357}],297:[function(g,C,i){var e,A,s,l=g("../internals/fails"),n=g("../internals/is-callable"),a=g("../internals/is-object"),d=g("../internals/object-create"),o=g("../internals/object-get-prototype-of"),c=g("../internals/define-built-in"),r=g("../internals/well-known-symbol"),h=g("../internals/is-pure"),b=r("iterator"),u=!1;[].keys&&("next"in(s=[].keys())?(A=o(o(s)))!==Object.prototype&&(e=A):u=!0),!a(e)||l(function(){var m={};return e[b].call(m)!==m})?e={}:h&&(e=d(e)),n(e[b])||c(e,b,function(){return this}),C.exports={IteratorPrototype:e,BUGGY_SAFARI_ITERATORS:u}},{"../internals/define-built-in":245,"../internals/fails":260,"../internals/is-callable":285,"../internals/is-object":289,"../internals/is-pure":290,"../internals/object-create":306,"../internals/object-get-prototype-of":313,"../internals/well-known-symbol":357}],298:[function(g,C,i){arguments[4][276][0].apply(i,arguments)},{dup:276}],299:[function(g,C,i){var e=g("../internals/to-length");C.exports=function(A){return e(A.length)}},{"../internals/to-length":343}],300:[function(g,C,i){var e=g("../internals/function-uncurry-this"),A=g("../internals/fails"),s=g("../internals/is-callable"),l=g("../internals/has-own-property"),n=g("../internals/descriptors"),a=g("../internals/function-name").CONFIGURABLE,d=g("../internals/inspect-source"),o=g("../internals/internal-state"),c=o.enforce,r=o.get,h=String,b=Object.defineProperty,u=e("".slice),m=e("".replace),Z=e([].join),p=n&&!A(function(){return b(function(){},"length",{value:8}).length!==8}),Y=String(String).split("String"),R=C.exports=function(X,H,S){u(h(H),0,7)==="Symbol("&&(H="["+m(h(H),/^Symbol\(([^)]*)\)/,"$1")+"]"),S&&S.getter&&(H="get "+H),S&&S.setter&&(H="set "+H),(!l(X,"name")||a&&X.name!==H)&&(n?b(X,"name",{value:H,configurable:!0}):X.name=H),p&&S&&l(S,"arity")&&X.length!==S.arity&&b(X,"length",{value:S.arity});try{S&&l(S,"constructor")&&S.constructor?n&&b(X,"prototype",{writable:!1}):X.prototype&&(X.prototype=void 0)}catch{}var z=c(X);return l(z,"source")||(z.source=Z(Y,typeof H=="string"?H:"")),X};Function.prototype.toString=R(function(){return s(this)&&r(this).source||d(this)},"toString")},{"../internals/descriptors":247,"../internals/fails":260,"../internals/function-name":265,"../internals/function-uncurry-this":268,"../internals/has-own-property":275,"../internals/inspect-source":281,"../internals/internal-state":282,"../internals/is-callable":285}],301:[function(g,C,i){var e=Math.ceil,A=Math.floor;C.exports=Math.trunc||function(s){var l=+s;return(l>0?A:e)(l)}},{}],302:[function(g,C,i){var e,A,s,l,n,a=g("../internals/global"),d=g("../internals/function-bind-context"),o=g("../internals/object-get-own-property-descriptor").f,c=g("../internals/task").set,r=g("../internals/queue"),h=g("../internals/engine-is-ios"),b=g("../internals/engine-is-ios-pebble"),u=g("../internals/engine-is-webos-webkit"),m=g("../internals/engine-is-node"),Z=a.MutationObserver||a.WebKitMutationObserver,p=a.document,Y=a.process,R=a.Promise,X=o(a,"queueMicrotask"),H=X&&X.value;if(!H){var S=new r,z=function(){var v,K;for(m&&(v=Y.domain)&&v.exit();K=S.get();)try{K()}catch(V){throw S.head&&e(),V}v&&v.enter()};h||m||u||!Z||!p?!b&&R&&R.resolve?((l=R.resolve(void 0)).constructor=R,n=d(l.then,l),e=function(){n(z)}):m?e=function(){Y.nextTick(z)}:(c=d(c,a),e=function(){c(z)}):(A=!0,s=p.createTextNode(""),new Z(z).observe(s,{characterData:!0}),e=function(){s.data=A=!A}),H=function(v){S.head||e(),S.add(v)}}C.exports=H},{"../internals/engine-is-ios":253,"../internals/engine-is-ios-pebble":252,"../internals/engine-is-node":254,"../internals/engine-is-webos-webkit":255,"../internals/function-bind-context":262,"../internals/global":274,"../internals/object-get-own-property-descriptor":309,"../internals/queue":328,"../internals/task":339}],303:[function(g,C,i){var e=g("../internals/a-callable"),A=TypeError,s=function(l){var n,a;this.promise=new l(function(d,o){if(n!==void 0||a!==void 0)throw new A("Bad Promise constructor");n=d,a=o}),this.resolve=e(n),this.reject=e(a)};C.exports.f=function(l){return new s(l)}},{"../internals/a-callable":222}],304:[function(g,C,i){var e=g("../internals/is-regexp"),A=TypeError;C.exports=function(s){if(e(s))throw new A("The method doesn't accept regular expressions");return s}},{"../internals/is-regexp":291}],305:[function(g,C,i){var e=g("../internals/descriptors"),A=g("../internals/function-uncurry-this"),s=g("../internals/function-call"),l=g("../internals/fails"),n=g("../internals/object-keys"),a=g("../internals/object-get-own-property-symbols"),d=g("../internals/object-property-is-enumerable"),o=g("../internals/to-object"),c=g("../internals/indexed-object"),r=Object.assign,h=Object.defineProperty,b=A([].concat);C.exports=!r||l(function(){if(e&&r({b:1},r(h({},"a",{enumerable:!0,get:function(){h(this,"b",{value:3,enumerable:!1})}}),{b:2})).b!==1)return!0;var u={},m={},Z=Symbol("assign detection");return u[Z]=7,"abcdefghijklmnopqrst".split("").forEach(function(p){m[p]=p}),r({},u)[Z]!==7||n(r({},m)).join("")!=="abcdefghijklmnopqrst"})?function(u,m){for(var Z=o(u),p=arguments.length,Y=1,R=a.f,X=d.f;p>Y;)for(var H,S=c(arguments[Y++]),z=R?b(n(S),R(S)):n(S),v=z.length,K=0;v>K;)H=z[K++],e&&!s(X,S,H)||(Z[H]=S[H]);return Z}:r},{"../internals/descriptors":247,"../internals/fails":260,"../internals/function-call":264,"../internals/function-uncurry-this":268,"../internals/indexed-object":280,"../internals/object-get-own-property-symbols":312,"../internals/object-keys":316,"../internals/object-property-is-enumerable":317,"../internals/to-object":344}],306:[function(g,C,i){var e,A=g("../internals/an-object"),s=g("../internals/object-define-properties"),l=g("../internals/enum-bug-keys"),n=g("../internals/hidden-keys"),a=g("../internals/html"),d=g("../internals/document-create-element"),o=g("../internals/shared-key"),c=o("IE_PROTO"),r=function(){},h=function(m){return"<script>"+m+"<\/script>"},b=function(m){m.write(h("")),m.close();var Z=m.parentWindow.Object;return m=null,Z},u=function(){try{e=new ActiveXObject("htmlfile")}catch{}var m,Z;u=typeof document<"u"?document.domain&&e?b(e):((Z=d("iframe")).style.display="none",a.appendChild(Z),Z.src="javascript:",(m=Z.contentWindow.document).open(),m.write(h("document.F=Object")),m.close(),m.F):b(e);for(var p=l.length;p--;)delete u.prototype[l[p]];return u()};n[c]=!0,C.exports=Object.create||function(m,Z){var p;return m!==null?(r.prototype=A(m),p=new r,r.prototype=null,p[c]=m):p=u(),Z===void 0?p:s.f(p,Z)}},{"../internals/an-object":227,"../internals/document-create-element":249,"../internals/enum-bug-keys":258,"../internals/hidden-keys":276,"../internals/html":278,"../internals/object-define-properties":307,"../internals/shared-key":332}],307:[function(g,C,i){var e=g("../internals/descriptors"),A=g("../internals/v8-prototype-define-bug"),s=g("../internals/object-define-property"),l=g("../internals/an-object"),n=g("../internals/to-indexed-object"),a=g("../internals/object-keys");i.f=e&&!A?Object.defineProperties:function(d,o){l(d);for(var c,r=n(o),h=a(o),b=h.length,u=0;b>u;)s.f(d,c=h[u++],r[c]);return d}},{"../internals/an-object":227,"../internals/descriptors":247,"../internals/object-define-property":308,"../internals/object-keys":316,"../internals/to-indexed-object":341,"../internals/v8-prototype-define-bug":352}],308:[function(g,C,i){var e=g("../internals/descriptors"),A=g("../internals/ie8-dom-define"),s=g("../internals/v8-prototype-define-bug"),l=g("../internals/an-object"),n=g("../internals/to-property-key"),a=TypeError,d=Object.defineProperty,o=Object.getOwnPropertyDescriptor;i.f=e?s?function(c,r,h){if(l(c),r=n(r),l(h),typeof c=="function"&&r==="prototype"&&"value"in h&&"writable"in h&&!h.writable){var b=o(c,r);b&&b.writable&&(c[r]=h.value,h={configurable:"configurable"in h?h.configurable:b.configurable,enumerable:"enumerable"in h?h.enumerable:b.enumerable,writable:!1})}return d(c,r,h)}:d:function(c,r,h){if(l(c),r=n(r),l(h),A)try{return d(c,r,h)}catch{}if("get"in h||"set"in h)throw new a("Accessors not supported");return"value"in h&&(c[r]=h.value),c}},{"../internals/an-object":227,"../internals/descriptors":247,"../internals/ie8-dom-define":279,"../internals/to-property-key":346,"../internals/v8-prototype-define-bug":352}],309:[function(g,C,i){var e=g("../internals/descriptors"),A=g("../internals/function-call"),s=g("../internals/object-property-is-enumerable"),l=g("../internals/create-property-descriptor"),n=g("../internals/to-indexed-object"),a=g("../internals/to-property-key"),d=g("../internals/has-own-property"),o=g("../internals/ie8-dom-define"),c=Object.getOwnPropertyDescriptor;i.f=e?c:function(r,h){if(r=n(r),h=a(h),o)try{return c(r,h)}catch{}if(d(r,h))return l(!A(s.f,r,h),r[h])}},{"../internals/create-property-descriptor":242,"../internals/descriptors":247,"../internals/function-call":264,"../internals/has-own-property":275,"../internals/ie8-dom-define":279,"../internals/object-property-is-enumerable":317,"../internals/to-indexed-object":341,"../internals/to-property-key":346}],310:[function(g,C,i){var e=g("../internals/classof-raw"),A=g("../internals/to-indexed-object"),s=g("../internals/object-get-own-property-names").f,l=g("../internals/array-slice-simple"),n=typeof window=="object"&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];C.exports.f=function(a){return n&&e(a)==="Window"?function(d){try{return s(d)}catch{return l(n)}}(a):s(A(a))}},{"../internals/array-slice-simple":230,"../internals/classof-raw":235,"../internals/object-get-own-property-names":311,"../internals/to-indexed-object":341}],311:[function(g,C,i){var e=g("../internals/object-keys-internal"),A=g("../internals/enum-bug-keys").concat("length","prototype");i.f=Object.getOwnPropertyNames||function(s){return e(s,A)}},{"../internals/enum-bug-keys":258,"../internals/object-keys-internal":315}],312:[function(g,C,i){i.f=Object.getOwnPropertySymbols},{}],313:[function(g,C,i){var e=g("../internals/has-own-property"),A=g("../internals/is-callable"),s=g("../internals/to-object"),l=g("../internals/shared-key"),n=g("../internals/correct-prototype-getter"),a=l("IE_PROTO"),d=Object,o=d.prototype;C.exports=n?d.getPrototypeOf:function(c){var r=s(c);if(e(r,a))return r[a];var h=r.constructor;return A(h)&&r instanceof h?h.prototype:r instanceof d?o:null}},{"../internals/correct-prototype-getter":239,"../internals/has-own-property":275,"../internals/is-callable":285,"../internals/shared-key":332,"../internals/to-object":344}],314:[function(g,C,i){var e=g("../internals/function-uncurry-this");C.exports=e({}.isPrototypeOf)},{"../internals/function-uncurry-this":268}],315:[function(g,C,i){var e=g("../internals/function-uncurry-this"),A=g("../internals/has-own-property"),s=g("../internals/to-indexed-object"),l=g("../internals/array-includes").indexOf,n=g("../internals/hidden-keys"),a=e([].push);C.exports=function(d,o){var c,r=s(d),h=0,b=[];for(c in r)!A(n,c)&&A(r,c)&&a(b,c);for(;o.length>h;)A(r,c=o[h++])&&(~l(b,c)||a(b,c));return b}},{"../internals/array-includes":228,"../internals/function-uncurry-this":268,"../internals/has-own-property":275,"../internals/hidden-keys":276,"../internals/to-indexed-object":341}],316:[function(g,C,i){var e=g("../internals/object-keys-internal"),A=g("../internals/enum-bug-keys");C.exports=Object.keys||function(s){return e(s,A)}},{"../internals/enum-bug-keys":258,"../internals/object-keys-internal":315}],317:[function(g,C,i){var e={}.propertyIsEnumerable,A=Object.getOwnPropertyDescriptor,s=A&&!e.call({1:2},1);i.f=s?function(l){var n=A(this,l);return!!n&&n.enumerable}:e},{}],318:[function(g,C,i){var e=g("../internals/function-uncurry-this-accessor"),A=g("../internals/an-object"),s=g("../internals/a-possible-prototype");C.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var l,n=!1,a={};try{(l=e(Object.prototype,"__proto__","set"))(a,[]),n=a instanceof Array}catch{}return function(d,o){return A(d),s(o),n?l(d,o):d.__proto__=o,d}}():void 0)},{"../internals/a-possible-prototype":224,"../internals/an-object":227,"../internals/function-uncurry-this-accessor":266}],319:[function(g,C,i){var e=g("../internals/descriptors"),A=g("../internals/fails"),s=g("../internals/function-uncurry-this"),l=g("../internals/object-get-prototype-of"),n=g("../internals/object-keys"),a=g("../internals/to-indexed-object"),d=s(g("../internals/object-property-is-enumerable").f),o=s([].push),c=e&&A(function(){var h=Object.create(null);return h[2]=2,!d(h,2)}),r=function(h){return function(b){for(var u,m=a(b),Z=n(m),p=c&&l(m)===null,Y=Z.length,R=0,X=[];Y>R;)u=Z[R++],e&&!(p?u in m:d(m,u))||o(X,h?[u,m[u]]:m[u]);return X}};C.exports={entries:r(!0),values:r(!1)}},{"../internals/descriptors":247,"../internals/fails":260,"../internals/function-uncurry-this":268,"../internals/object-get-prototype-of":313,"../internals/object-keys":316,"../internals/object-property-is-enumerable":317,"../internals/to-indexed-object":341}],320:[function(g,C,i){var e=g("../internals/function-call"),A=g("../internals/is-callable"),s=g("../internals/is-object"),l=TypeError;C.exports=function(n,a){var d,o;if(a==="string"&&A(d=n.toString)&&!s(o=e(d,n))||A(d=n.valueOf)&&!s(o=e(d,n))||a!=="string"&&A(d=n.toString)&&!s(o=e(d,n)))return o;throw new l("Can't convert object to primitive value")}},{"../internals/function-call":264,"../internals/is-callable":285,"../internals/is-object":289}],321:[function(g,C,i){var e=g("../internals/get-built-in"),A=g("../internals/function-uncurry-this"),s=g("../internals/object-get-own-property-names"),l=g("../internals/object-get-own-property-symbols"),n=g("../internals/an-object"),a=A([].concat);C.exports=e("Reflect","ownKeys")||function(d){var o=s.f(n(d)),c=l.f;return c?a(o,c(d)):o}},{"../internals/an-object":227,"../internals/function-uncurry-this":268,"../internals/get-built-in":269,"../internals/object-get-own-property-names":311,"../internals/object-get-own-property-symbols":312}],322:[function(g,C,i){var e=g("../internals/global");C.exports=e},{"../internals/global":274}],323:[function(g,C,i){C.exports=function(e){try{return{error:!1,value:e()}}catch(A){return{error:!0,value:A}}}},{}],324:[function(g,C,i){var e=g("../internals/global"),A=g("../internals/promise-native-constructor"),s=g("../internals/is-callable"),l=g("../internals/is-forced"),n=g("../internals/inspect-source"),a=g("../internals/well-known-symbol"),d=g("../internals/engine-is-browser"),o=g("../internals/engine-is-deno"),c=g("../internals/is-pure"),r=g("../internals/engine-v8-version"),h=A&&A.prototype,b=a("species"),u=!1,m=s(e.PromiseRejectionEvent),Z=l("Promise",function(){var p=n(A),Y=p!==String(A);if(!Y&&r===66||c&&(!h.catch||!h.finally))return!0;if(!r||r<51||!/native code/.test(p)){var R=new A(function(H){H(1)}),X=function(H){H(function(){},function(){})};if((R.constructor={})[b]=X,!(u=R.then(function(){})instanceof X))return!0}return!Y&&(d||o)&&!m});C.exports={CONSTRUCTOR:Z,REJECTION_EVENT:m,SUBCLASSING:u}},{"../internals/engine-is-browser":250,"../internals/engine-is-deno":251,"../internals/engine-v8-version":257,"../internals/global":274,"../internals/inspect-source":281,"../internals/is-callable":285,"../internals/is-forced":287,"../internals/is-pure":290,"../internals/promise-native-constructor":325,"../internals/well-known-symbol":357}],325:[function(g,C,i){var e=g("../internals/global");C.exports=e.Promise},{"../internals/global":274}],326:[function(g,C,i){var e=g("../internals/an-object"),A=g("../internals/is-object"),s=g("../internals/new-promise-capability");C.exports=function(l,n){if(e(l),A(n)&&n.constructor===l)return n;var a=s.f(l);return(0,a.resolve)(n),a.promise}},{"../internals/an-object":227,"../internals/is-object":289,"../internals/new-promise-capability":303}],327:[function(g,C,i){var e=g("../internals/promise-native-constructor"),A=g("../internals/check-correctness-of-iteration"),s=g("../internals/promise-constructor-detection").CONSTRUCTOR;C.exports=s||!A(function(l){e.all(l).then(void 0,function(){})})},{"../internals/check-correctness-of-iteration":234,"../internals/promise-constructor-detection":324,"../internals/promise-native-constructor":325}],328:[function(g,C,i){var e=function(){this.head=null,this.tail=null};e.prototype={add:function(A){var s={item:A,next:null},l=this.tail;l?l.next=s:this.head=s,this.tail=s},get:function(){var A=this.head;if(A)return(this.head=A.next)===null&&(this.tail=null),A.item}},C.exports=e},{}],329:[function(g,C,i){var e=g("../internals/is-null-or-undefined"),A=TypeError;C.exports=function(s){if(e(s))throw new A("Can't call method on "+s);return s}},{"../internals/is-null-or-undefined":288}],330:[function(g,C,i){var e=g("../internals/get-built-in"),A=g("../internals/define-built-in-accessor"),s=g("../internals/well-known-symbol"),l=g("../internals/descriptors"),n=s("species");C.exports=function(a){var d=e(a);l&&d&&!d[n]&&A(d,n,{configurable:!0,get:function(){return this}})}},{"../internals/define-built-in-accessor":244,"../internals/descriptors":247,"../internals/get-built-in":269,"../internals/well-known-symbol":357}],331:[function(g,C,i){var e=g("../internals/object-define-property").f,A=g("../internals/has-own-property"),s=g("../internals/well-known-symbol")("toStringTag");C.exports=function(l,n,a){l&&!a&&(l=l.prototype),l&&!A(l,s)&&e(l,s,{configurable:!0,value:n})}},{"../internals/has-own-property":275,"../internals/object-define-property":308,"../internals/well-known-symbol":357}],332:[function(g,C,i){var e=g("../internals/shared"),A=g("../internals/uid"),s=e("keys");C.exports=function(l){return s[l]||(s[l]=A(l))}},{"../internals/shared":334,"../internals/uid":350}],333:[function(g,C,i){var e=g("../internals/global"),A=g("../internals/define-global-property"),s=e["__core-js_shared__"]||A("__core-js_shared__",{});C.exports=s},{"../internals/define-global-property":246,"../internals/global":274}],334:[function(g,C,i){var e=g("../internals/is-pure"),A=g("../internals/shared-store");(C.exports=function(s,l){return A[s]||(A[s]=l!==void 0?l:{})})("versions",[]).push({version:"3.33.0",mode:e?"pure":"global",copyright:"© 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.33.0/LICENSE",source:"https://github.com/zloirock/core-js"})},{"../internals/is-pure":290,"../internals/shared-store":333}],335:[function(g,C,i){var e=g("../internals/an-object"),A=g("../internals/a-constructor"),s=g("../internals/is-null-or-undefined"),l=g("../internals/well-known-symbol")("species");C.exports=function(n,a){var d,o=e(n).constructor;return o===void 0||s(d=e(o)[l])?a:A(d)}},{"../internals/a-constructor":223,"../internals/an-object":227,"../internals/is-null-or-undefined":288,"../internals/well-known-symbol":357}],336:[function(g,C,i){var e=g("../internals/engine-v8-version"),A=g("../internals/fails"),s=g("../internals/global").String;C.exports=!!Object.getOwnPropertySymbols&&!A(function(){var l=Symbol("symbol detection");return!s(l)||!(Object(l)instanceof Symbol)||!Symbol.sham&&e&&e<41})},{"../internals/engine-v8-version":257,"../internals/fails":260,"../internals/global":274}],337:[function(g,C,i){var e=g("../internals/function-call"),A=g("../internals/get-built-in"),s=g("../internals/well-known-symbol"),l=g("../internals/define-built-in");C.exports=function(){var n=A("Symbol"),a=n&&n.prototype,d=a&&a.valueOf,o=s("toPrimitive");a&&!a[o]&&l(a,o,function(c){return e(d,this)},{arity:1})}},{"../internals/define-built-in":245,"../internals/function-call":264,"../internals/get-built-in":269,"../internals/well-known-symbol":357}],338:[function(g,C,i){var e=g("../internals/symbol-constructor-detection");C.exports=e&&!!Symbol.for&&!!Symbol.keyFor},{"../internals/symbol-constructor-detection":336}],339:[function(g,C,i){var e,A,s,l,n=g("../internals/global"),a=g("../internals/function-apply"),d=g("../internals/function-bind-context"),o=g("../internals/is-callable"),c=g("../internals/has-own-property"),r=g("../internals/fails"),h=g("../internals/html"),b=g("../internals/array-slice"),u=g("../internals/document-create-element"),m=g("../internals/validate-arguments-length"),Z=g("../internals/engine-is-ios"),p=g("../internals/engine-is-node"),Y=n.setImmediate,R=n.clearImmediate,X=n.process,H=n.Dispatch,S=n.Function,z=n.MessageChannel,v=n.String,K=0,V={};r(function(){e=n.location});var N=function(W){if(c(V,W)){var y=V[W];delete V[W],y()}},B=function(W){return function(){N(W)}},G=function(W){N(W.data)},w=function(W){n.postMessage(v(W),e.protocol+"//"+e.host)};Y&&R||(Y=function(W){m(arguments.length,1);var y=o(W)?W:S(W),f=b(arguments,1);return V[++K]=function(){a(y,void 0,f)},A(K),K},R=function(W){delete V[W]},p?A=function(W){X.nextTick(B(W))}:H&&H.now?A=function(W){H.now(B(W))}:z&&!Z?(l=(s=new z).port2,s.port1.onmessage=G,A=d(l.postMessage,l)):n.addEventListener&&o(n.postMessage)&&!n.importScripts&&e&&e.protocol!=="file:"&&!r(w)?(A=w,n.addEventListener("message",G,!1)):A="onreadystatechange"in u("script")?function(W){h.appendChild(u("script")).onreadystatechange=function(){h.removeChild(this),N(W)}}:function(W){setTimeout(B(W),0)}),C.exports={set:Y,clear:R}},{"../internals/array-slice":231,"../internals/document-create-element":249,"../internals/engine-is-ios":253,"../internals/engine-is-node":254,"../internals/fails":260,"../internals/function-apply":261,"../internals/function-bind-context":262,"../internals/global":274,"../internals/has-own-property":275,"../internals/html":278,"../internals/is-callable":285,"../internals/validate-arguments-length":353}],340:[function(g,C,i){var e=g("../internals/to-integer-or-infinity"),A=Math.max,s=Math.min;C.exports=function(l,n){var a=e(l);return a<0?A(a+n,0):s(a,n)}},{"../internals/to-integer-or-infinity":342}],341:[function(g,C,i){var e=g("../internals/indexed-object"),A=g("../internals/require-object-coercible");C.exports=function(s){return e(A(s))}},{"../internals/indexed-object":280,"../internals/require-object-coercible":329}],342:[function(g,C,i){var e=g("../internals/math-trunc");C.exports=function(A){var s=+A;return s!=s||s===0?0:e(s)}},{"../internals/math-trunc":301}],343:[function(g,C,i){var e=g("../internals/to-integer-or-infinity"),A=Math.min;C.exports=function(s){return s>0?A(e(s),9007199254740991):0}},{"../internals/to-integer-or-infinity":342}],344:[function(g,C,i){var e=g("../internals/require-object-coercible"),A=Object;C.exports=function(s){return A(e(s))}},{"../internals/require-object-coercible":329}],345:[function(g,C,i){var e=g("../internals/function-call"),A=g("../internals/is-object"),s=g("../internals/is-symbol"),l=g("../internals/get-method"),n=g("../internals/ordinary-to-primitive"),a=g("../internals/well-known-symbol"),d=TypeError,o=a("toPrimitive");C.exports=function(c,r){if(!A(c)||s(c))return c;var h,b=l(c,o);if(b){if(r===void 0&&(r="default"),h=e(b,c,r),!A(h)||s(h))return h;throw new d("Can't convert object to primitive value")}return r===void 0&&(r="number"),n(c,r)}},{"../internals/function-call":264,"../internals/get-method":273,"../internals/is-object":289,"../internals/is-symbol":292,"../internals/ordinary-to-primitive":320,"../internals/well-known-symbol":357}],346:[function(g,C,i){var e=g("../internals/to-primitive"),A=g("../internals/is-symbol");C.exports=function(s){var l=e(s,"string");return A(l)?l:l+""}},{"../internals/is-symbol":292,"../internals/to-primitive":345}],347:[function(g,C,i){var e={};e[g("../internals/well-known-symbol")("toStringTag")]="z",C.exports=String(e)==="[object z]"},{"../internals/well-known-symbol":357}],348:[function(g,C,i){var e=g("../internals/classof"),A=String;C.exports=function(s){if(e(s)==="Symbol")throw new TypeError("Cannot convert a Symbol value to a string");return A(s)}},{"../internals/classof":236}],349:[function(g,C,i){var e=String;C.exports=function(A){try{return e(A)}catch{return"Object"}}},{}],350:[function(g,C,i){var e=g("../internals/function-uncurry-this"),A=0,s=Math.random(),l=e(1 .toString);C.exports=function(n){return"Symbol("+(n===void 0?"":n)+")_"+l(++A+s,36)}},{"../internals/function-uncurry-this":268}],351:[function(g,C,i){var e=g("../internals/symbol-constructor-detection");C.exports=e&&!Symbol.sham&&typeof Symbol.iterator=="symbol"},{"../internals/symbol-constructor-detection":336}],352:[function(g,C,i){var e=g("../internals/descriptors"),A=g("../internals/fails");C.exports=e&&A(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42})},{"../internals/descriptors":247,"../internals/fails":260}],353:[function(g,C,i){var e=TypeError;C.exports=function(A,s){if(A<s)throw new e("Not enough arguments");return A}},{}],354:[function(g,C,i){var e=g("../internals/global"),A=g("../internals/is-callable"),s=e.WeakMap;C.exports=A(s)&&/native code/.test(String(s))},{"../internals/global":274,"../internals/is-callable":285}],355:[function(g,C,i){var e=g("../internals/path"),A=g("../internals/has-own-property"),s=g("../internals/well-known-symbol-wrapped"),l=g("../internals/object-define-property").f;C.exports=function(n){var a=e.Symbol||(e.Symbol={});A(a,n)||l(a,n,{value:s.f(n)})}},{"../internals/has-own-property":275,"../internals/object-define-property":308,"../internals/path":322,"../internals/well-known-symbol-wrapped":356}],356:[function(g,C,i){var e=g("../internals/well-known-symbol");i.f=e},{"../internals/well-known-symbol":357}],357:[function(g,C,i){var e=g("../internals/global"),A=g("../internals/shared"),s=g("../internals/has-own-property"),l=g("../internals/uid"),n=g("../internals/symbol-constructor-detection"),a=g("../internals/use-symbol-as-uid"),d=e.Symbol,o=A("wks"),c=a?d.for||d:d&&d.withoutSetter||l;C.exports=function(r){return s(o,r)||(o[r]=n&&s(d,r)?d[r]:c("Symbol."+r)),o[r]}},{"../internals/global":274,"../internals/has-own-property":275,"../internals/shared":334,"../internals/symbol-constructor-detection":336,"../internals/uid":350,"../internals/use-symbol-as-uid":351}],358:[function(g,C,i){var e=g("../internals/export"),A=g("../internals/array-iteration").findIndex,s=g("../internals/add-to-unscopables"),l=!0;"findIndex"in[]&&Array(1).findIndex(function(){l=!1}),e({target:"Array",proto:!0,forced:l},{findIndex:function(n){return A(this,n,arguments.length>1?arguments[1]:void 0)}}),s("findIndex")},{"../internals/add-to-unscopables":225,"../internals/array-iteration":229,"../internals/export":259}],359:[function(g,C,i){var e=g("../internals/export"),A=g("../internals/array-iteration").find,s=g("../internals/add-to-unscopables"),l=!0;"find"in[]&&Array(1).find(function(){l=!1}),e({target:"Array",proto:!0,forced:l},{find:function(n){return A(this,n,arguments.length>1?arguments[1]:void 0)}}),s("find")},{"../internals/add-to-unscopables":225,"../internals/array-iteration":229,"../internals/export":259}],360:[function(g,C,i){var e=g("../internals/export"),A=g("../internals/array-includes").includes,s=g("../internals/fails"),l=g("../internals/add-to-unscopables");e({target:"Array",proto:!0,forced:s(function(){return!Array(1).includes()})},{includes:function(n){return A(this,n,arguments.length>1?arguments[1]:void 0)}}),l("includes")},{"../internals/add-to-unscopables":225,"../internals/array-includes":228,"../internals/export":259,"../internals/fails":260}],361:[function(g,C,i){var e=g("../internals/to-indexed-object"),A=g("../internals/add-to-unscopables"),s=g("../internals/iterators"),l=g("../internals/internal-state"),n=g("../internals/object-define-property").f,a=g("../internals/iterator-define"),d=g("../internals/create-iter-result-object"),o=g("../internals/is-pure"),c=g("../internals/descriptors"),r=l.set,h=l.getterFor("Array Iterator");C.exports=a(Array,"Array",function(u,m){r(this,{type:"Array Iterator",target:e(u),index:0,kind:m})},function(){var u=h(this),m=u.target,Z=u.kind,p=u.index++;if(!m||p>=m.length)return u.target=void 0,d(void 0,!0);switch(Z){case"keys":return d(p,!1);case"values":return d(m[p],!1)}return d([p,m[p]],!1)},"values");var b=s.Arguments=s.Array;if(A("keys"),A("values"),A("entries"),!o&&c&&b.name!=="values")try{n(b,"name",{value:"values"})}catch{}},{"../internals/add-to-unscopables":225,"../internals/create-iter-result-object":240,"../internals/descriptors":247,"../internals/internal-state":282,"../internals/is-pure":290,"../internals/iterator-define":296,"../internals/iterators":298,"../internals/object-define-property":308,"../internals/to-indexed-object":341}],362:[function(g,C,i){var e=g("../internals/export"),A=g("../internals/get-built-in"),s=g("../internals/function-apply"),l=g("../internals/function-call"),n=g("../internals/function-uncurry-this"),a=g("../internals/fails"),d=g("../internals/is-callable"),o=g("../internals/is-symbol"),c=g("../internals/array-slice"),r=g("../internals/get-json-replacer-function"),h=g("../internals/symbol-constructor-detection"),b=String,u=A("JSON","stringify"),m=n(/./.exec),Z=n("".charAt),p=n("".charCodeAt),Y=n("".replace),R=n(1 .toString),X=/[\uD800-\uDFFF]/g,H=/^[\uD800-\uDBFF]$/,S=/^[\uDC00-\uDFFF]$/,z=!h||a(function(){var N=A("Symbol")("stringify detection");return u([N])!=="[null]"||u({a:N})!=="{}"||u(Object(N))!=="{}"}),v=a(function(){return u("\uDF06\uD834")!=='"\\udf06\\ud834"'||u("\uDEAD")!=='"\\udead"'}),K=function(N,B){var G=c(arguments),w=r(B);if(d(w)||N!==void 0&&!o(N))return G[1]=function(W,y){if(d(w)&&(y=l(w,this,b(W),y)),!o(y))return y},s(u,null,G)},V=function(N,B,G){var w=Z(G,B-1),W=Z(G,B+1);return m(H,N)&&!m(S,W)||m(S,N)&&!m(H,w)?"\\u"+R(p(N,0),16):N};u&&e({target:"JSON",stat:!0,arity:3,forced:z||v},{stringify:function(N,B,G){var w=c(arguments),W=s(z?K:u,null,w);return v&&typeof W=="string"?Y(W,X,V):W}})},{"../internals/array-slice":231,"../internals/export":259,"../internals/fails":260,"../internals/function-apply":261,"../internals/function-call":264,"../internals/function-uncurry-this":268,"../internals/get-built-in":269,"../internals/get-json-replacer-function":272,"../internals/is-callable":285,"../internals/is-symbol":292,"../internals/symbol-constructor-detection":336}],363:[function(g,C,i){g("../internals/export")({target:"Number",stat:!0},{isNaN:function(e){return e!=e}})},{"../internals/export":259}],364:[function(g,C,i){var e=g("../internals/export"),A=g("../internals/object-assign");e({target:"Object",stat:!0,arity:2,forced:Object.assign!==A},{assign:A})},{"../internals/export":259,"../internals/object-assign":305}],365:[function(g,C,i){var e=g("../internals/export"),A=g("../internals/symbol-constructor-detection"),s=g("../internals/fails"),l=g("../internals/object-get-own-property-symbols"),n=g("../internals/to-object");e({target:"Object",stat:!0,forced:!A||s(function(){l.f(1)})},{getOwnPropertySymbols:function(a){var d=l.f;return d?d(n(a)):[]}})},{"../internals/export":259,"../internals/fails":260,"../internals/object-get-own-property-symbols":312,"../internals/symbol-constructor-detection":336,"../internals/to-object":344}],366:[function(g,C,i){var e=g("../internals/export"),A=g("../internals/to-object"),s=g("../internals/object-keys");e({target:"Object",stat:!0,forced:g("../internals/fails")(function(){s(1)})},{keys:function(l){return s(A(l))}})},{"../internals/export":259,"../internals/fails":260,"../internals/object-keys":316,"../internals/to-object":344}],367:[function(g,C,i){var e=g("../internals/export"),A=g("../internals/object-to-array").values;e({target:"Object",stat:!0},{values:function(s){return A(s)}})},{"../internals/export":259,"../internals/object-to-array":319}],368:[function(g,C,i){var e=g("../internals/export"),A=g("../internals/function-call"),s=g("../internals/a-callable"),l=g("../internals/new-promise-capability"),n=g("../internals/perform"),a=g("../internals/iterate");e({target:"Promise",stat:!0,forced:g("../internals/promise-statics-incorrect-iteration")},{all:function(d){var o=this,c=l.f(o),r=c.resolve,h=c.reject,b=n(function(){var u=s(o.resolve),m=[],Z=0,p=1;a(d,function(Y){var R=Z++,X=!1;p++,A(u,o,Y).then(function(H){X||(X=!0,m[R]=H,--p||r(m))},h)}),--p||r(m)});return b.error&&h(b.value),c.promise}})},{"../internals/a-callable":222,"../internals/export":259,"../internals/function-call":264,"../internals/iterate":293,"../internals/new-promise-capability":303,"../internals/perform":323,"../internals/promise-statics-incorrect-iteration":327}],369:[function(g,C,i){var e=g("../internals/export"),A=g("../internals/is-pure"),s=g("../internals/promise-constructor-detection").CONSTRUCTOR,l=g("../internals/promise-native-constructor"),n=g("../internals/get-built-in"),a=g("../internals/is-callable"),d=g("../internals/define-built-in"),o=l&&l.prototype;if(e({target:"Promise",proto:!0,forced:s,real:!0},{catch:function(r){return this.then(void 0,r)}}),!A&&a(l)){var c=n("Promise").prototype.catch;o.catch!==c&&d(o,"catch",c,{unsafe:!0})}},{"../internals/define-built-in":245,"../internals/export":259,"../internals/get-built-in":269,"../internals/is-callable":285,"../internals/is-pure":290,"../internals/promise-constructor-detection":324,"../internals/promise-native-constructor":325}],370:[function(g,C,i){var e,A,s,l=g("../internals/export"),n=g("../internals/is-pure"),a=g("../internals/engine-is-node"),d=g("../internals/global"),o=g("../internals/function-call"),c=g("../internals/define-built-in"),r=g("../internals/object-set-prototype-of"),h=g("../internals/set-to-string-tag"),b=g("../internals/set-species"),u=g("../internals/a-callable"),m=g("../internals/is-callable"),Z=g("../internals/is-object"),p=g("../internals/an-instance"),Y=g("../internals/species-constructor"),R=g("../internals/task").set,X=g("../internals/microtask"),H=g("../internals/host-report-errors"),S=g("../internals/perform"),z=g("../internals/queue"),v=g("../internals/internal-state"),K=g("../internals/promise-native-constructor"),V=g("../internals/promise-constructor-detection"),N=g("../internals/new-promise-capability"),B=V.CONSTRUCTOR,G=V.REJECTION_EVENT,w=V.SUBCLASSING,W=v.getterFor("Promise"),y=v.set,f=K&&K.prototype,D=K,F=f,T=d.TypeError,Q=d.document,P=d.process,L=N.f,E=L,J=!!(Q&&Q.createEvent&&d.dispatchEvent),k=function(Ig){var ng;return!(!Z(Ig)||!m(ng=Ig.then))&&ng},j=function(Ig,ng){var ag,lg,cg,dg=ng.value,hg=ng.state===1,rg=hg?Ig.ok:Ig.fail,Wg=Ig.resolve,Gg=Ig.reject,Sg=Ig.domain;try{rg?(hg||(ng.rejection===2&&sg(ng),ng.rejection=1),rg===!0?ag=dg:(Sg&&Sg.enter(),ag=rg(dg),Sg&&(Sg.exit(),cg=!0)),ag===Ig.promise?Gg(new T("Promise-chain cycle")):(lg=k(ag))?o(lg,ag,Wg,Gg):Wg(ag)):Gg(dg)}catch(Kg){Sg&&!cg&&Sg.exit(),Gg(Kg)}},q=function(Ig,ng){Ig.notified||(Ig.notified=!0,X(function(){for(var ag,lg=Ig.reactions;ag=lg.get();)j(ag,Ig);Ig.notified=!1,ng&&!Ig.rejection&&Cg(Ig)}))},tg=function(Ig,ng,ag){var lg,cg;J?((lg=Q.createEvent("Event")).promise=ng,lg.reason=ag,lg.initEvent(Ig,!1,!0),d.dispatchEvent(lg)):lg={promise:ng,reason:ag},!G&&(cg=d["on"+Ig])?cg(lg):Ig==="unhandledrejection"&&H("Unhandled promise rejection",ag)},Cg=function(Ig){o(R,d,function(){var ng,ag=Ig.facade,lg=Ig.value;if(x(Ig)&&(ng=S(function(){a?P.emit("unhandledRejection",lg,ag):tg("unhandledrejection",ag,lg)}),Ig.rejection=a||x(Ig)?2:1,ng.error))throw ng.value})},x=function(Ig){return Ig.rejection!==1&&!Ig.parent},sg=function(Ig){o(R,d,function(){var ng=Ig.facade;a?P.emit("rejectionHandled",ng):tg("rejectionhandled",ng,Ig.value)})},Ag=function(Ig,ng,ag){return function(lg){Ig(ng,lg,ag)}},O=function(Ig,ng,ag){Ig.done||(Ig.done=!0,ag&&(Ig=ag),Ig.value=ng,Ig.state=2,q(Ig,!0))},_=function(Ig,ng,ag){if(!Ig.done){Ig.done=!0,ag&&(Ig=ag);try{if(Ig.facade===ng)throw new T("Promise can't be resolved itself");var lg=k(ng);lg?X(function(){var cg={done:!1};try{o(lg,ng,Ag(_,cg,Ig),Ag(O,cg,Ig))}catch(dg){O(cg,dg,Ig)}}):(Ig.value=ng,Ig.state=1,q(Ig,!1))}catch(cg){O({done:!1},cg,Ig)}}};if(B&&(F=(D=function(Ig){p(this,F),u(Ig),o(e,this);var ng=W(this);try{Ig(Ag(_,ng),Ag(O,ng))}catch(ag){O(ng,ag)}}).prototype,(e=function(Ig){y(this,{type:"Promise",done:!1,notified:!1,parent:!1,reactions:new z,rejection:!1,state:0,value:void 0})}).prototype=c(F,"then",function(Ig,ng){var ag=W(this),lg=L(Y(this,D));return ag.parent=!0,lg.ok=!m(Ig)||Ig,lg.fail=m(ng)&&ng,lg.domain=a?P.domain:void 0,ag.state===0?ag.reactions.add(lg):X(function(){j(lg,ag)}),lg.promise}),A=function(){var Ig=new e,ng=W(Ig);this.promise=Ig,this.resolve=Ag(_,ng),this.reject=Ag(O,ng)},N.f=L=function(Ig){return Ig===D||Ig===void 0?new A(Ig):E(Ig)},!n&&m(K)&&f!==Object.prototype)){s=f.then,w||c(f,"then",function(Ig,ng){var ag=this;return new D(function(lg,cg){o(s,ag,lg,cg)}).then(Ig,ng)},{unsafe:!0});try{delete f.constructor}catch{}r&&r(f,F)}l({global:!0,constructor:!0,wrap:!0,forced:B},{Promise:D}),h(D,"Promise",!1,!0),b("Promise")},{"../internals/a-callable":222,"../internals/an-instance":226,"../internals/define-built-in":245,"../internals/engine-is-node":254,"../internals/export":259,"../internals/function-call":264,"../internals/global":274,"../internals/host-report-errors":277,"../internals/internal-state":282,"../internals/is-callable":285,"../internals/is-object":289,"../internals/is-pure":290,"../internals/microtask":302,"../internals/new-promise-capability":303,"../internals/object-set-prototype-of":318,"../internals/perform":323,"../internals/promise-constructor-detection":324,"../internals/promise-native-constructor":325,"../internals/queue":328,"../internals/set-species":330,"../internals/set-to-string-tag":331,"../internals/species-constructor":335,"../internals/task":339}],371:[function(g,C,i){var e=g("../internals/export"),A=g("../internals/is-pure"),s=g("../internals/promise-native-constructor"),l=g("../internals/fails"),n=g("../internals/get-built-in"),a=g("../internals/is-callable"),d=g("../internals/species-constructor"),o=g("../internals/promise-resolve"),c=g("../internals/define-built-in"),r=s&&s.prototype;if(e({target:"Promise",proto:!0,real:!0,forced:!!s&&l(function(){r.finally.call({then:function(){}},function(){})})},{finally:function(b){var u=d(this,n("Promise")),m=a(b);return this.then(m?function(Z){return o(u,b()).then(function(){return Z})}:b,m?function(Z){return o(u,b()).then(function(){throw Z})}:b)}}),!A&&a(s)){var h=n("Promise").prototype.finally;r.finally!==h&&c(r,"finally",h,{unsafe:!0})}},{"../internals/define-built-in":245,"../internals/export":259,"../internals/fails":260,"../internals/get-built-in":269,"../internals/is-callable":285,"../internals/is-pure":290,"../internals/promise-native-constructor":325,"../internals/promise-resolve":326,"../internals/species-constructor":335}],372:[function(g,C,i){g("../modules/es.promise.constructor"),g("../modules/es.promise.all"),g("../modules/es.promise.catch"),g("../modules/es.promise.race"),g("../modules/es.promise.reject"),g("../modules/es.promise.resolve")},{"../modules/es.promise.all":368,"../modules/es.promise.catch":369,"../modules/es.promise.constructor":370,"../modules/es.promise.race":373,"../modules/es.promise.reject":374,"../modules/es.promise.resolve":375}],373:[function(g,C,i){var e=g("../internals/export"),A=g("../internals/function-call"),s=g("../internals/a-callable"),l=g("../internals/new-promise-capability"),n=g("../internals/perform"),a=g("../internals/iterate");e({target:"Promise",stat:!0,forced:g("../internals/promise-statics-incorrect-iteration")},{race:function(d){var o=this,c=l.f(o),r=c.reject,h=n(function(){var b=s(o.resolve);a(d,function(u){A(b,o,u).then(c.resolve,r)})});return h.error&&r(h.value),c.promise}})},{"../internals/a-callable":222,"../internals/export":259,"../internals/function-call":264,"../internals/iterate":293,"../internals/new-promise-capability":303,"../internals/perform":323,"../internals/promise-statics-incorrect-iteration":327}],374:[function(g,C,i){var e=g("../internals/export"),A=g("../internals/function-call"),s=g("../internals/new-promise-capability");e({target:"Promise",stat:!0,forced:g("../internals/promise-constructor-detection").CONSTRUCTOR},{reject:function(l){var n=s.f(this);return A(n.reject,void 0,l),n.promise}})},{"../internals/export":259,"../internals/function-call":264,"../internals/new-promise-capability":303,"../internals/promise-constructor-detection":324}],375:[function(g,C,i){var e=g("../internals/export"),A=g("../internals/get-built-in"),s=g("../internals/is-pure"),l=g("../internals/promise-native-constructor"),n=g("../internals/promise-constructor-detection").CONSTRUCTOR,a=g("../internals/promise-resolve"),d=A("Promise"),o=s&&!n;e({target:"Promise",stat:!0,forced:s||n},{resolve:function(c){return a(o&&this===d?l:this,c)}})},{"../internals/export":259,"../internals/get-built-in":269,"../internals/is-pure":290,"../internals/promise-constructor-detection":324,"../internals/promise-native-constructor":325,"../internals/promise-resolve":326}],376:[function(g,C,i){var e=g("../internals/export"),A=g("../internals/function-uncurry-this"),s=g("../internals/to-absolute-index"),l=RangeError,n=String.fromCharCode,a=String.fromCodePoint,d=A([].join);e({target:"String",stat:!0,arity:1,forced:!!a&&a.length!==1},{fromCodePoint:function(o){for(var c,r=[],h=arguments.length,b=0;h>b;){if(c=+arguments[b++],s(c,1114111)!==c)throw new l(c+" is not a valid code point");r[b]=c<65536?n(c):n(55296+((c-=65536)>>10),c%1024+56320)}return d(r,"")}})},{"../internals/export":259,"../internals/function-uncurry-this":268,"../internals/to-absolute-index":340}],377:[function(g,C,i){var e=g("../internals/export"),A=g("../internals/function-uncurry-this"),s=g("../internals/not-a-regexp"),l=g("../internals/require-object-coercible"),n=g("../internals/to-string"),a=g("../internals/correct-is-regexp-logic"),d=A("".indexOf);e({target:"String",proto:!0,forced:!a("includes")},{includes:function(o){return!!~d(n(l(this)),n(s(o)),arguments.length>1?arguments[1]:void 0)}})},{"../internals/correct-is-regexp-logic":238,"../internals/export":259,"../internals/function-uncurry-this":268,"../internals/not-a-regexp":304,"../internals/require-object-coercible":329,"../internals/to-string":348}],378:[function(g,C,i){g("../internals/well-known-symbol-define")("asyncIterator")},{"../internals/well-known-symbol-define":355}],379:[function(g,C,i){var e=g("../internals/export"),A=g("../internals/global"),s=g("../internals/function-call"),l=g("../internals/function-uncurry-this"),n=g("../internals/is-pure"),a=g("../internals/descriptors"),d=g("../internals/symbol-constructor-detection"),o=g("../internals/fails"),c=g("../internals/has-own-property"),r=g("../internals/object-is-prototype-of"),h=g("../internals/an-object"),b=g("../internals/to-indexed-object"),u=g("../internals/to-property-key"),m=g("../internals/to-string"),Z=g("../internals/create-property-descriptor"),p=g("../internals/object-create"),Y=g("../internals/object-keys"),R=g("../internals/object-get-own-property-names"),X=g("../internals/object-get-own-property-names-external"),H=g("../internals/object-get-own-property-symbols"),S=g("../internals/object-get-own-property-descriptor"),z=g("../internals/object-define-property"),v=g("../internals/object-define-properties"),K=g("../internals/object-property-is-enumerable"),V=g("../internals/define-built-in"),N=g("../internals/define-built-in-accessor"),B=g("../internals/shared"),G=g("../internals/shared-key"),w=g("../internals/hidden-keys"),W=g("../internals/uid"),y=g("../internals/well-known-symbol"),f=g("../internals/well-known-symbol-wrapped"),D=g("../internals/well-known-symbol-define"),F=g("../internals/symbol-define-to-primitive"),T=g("../internals/set-to-string-tag"),Q=g("../internals/internal-state"),P=g("../internals/array-iteration").forEach,L=G("hidden"),E=Q.set,J=Q.getterFor("Symbol"),k=Object.prototype,j=A.Symbol,q=j&&j.prototype,tg=A.RangeError,Cg=A.TypeError,x=A.QObject,sg=S.f,Ag=z.f,O=X.f,_=K.f,Ig=l([].push),ng=B("symbols"),ag=B("op-symbols"),lg=B("wks"),cg=!x||!x.prototype||!x.prototype.findChild,dg=function(Vg,pg,Hg){var Jg=sg(k,pg);Jg&&delete k[pg],Ag(Vg,pg,Hg),Jg&&Vg!==k&&Ag(k,pg,Jg)},hg=a&&o(function(){return p(Ag({},"a",{get:function(){return Ag(this,"a",{value:7}).a}})).a!==7})?dg:Ag,rg=function(Vg,pg){var Hg=ng[Vg]=p(q);return E(Hg,{type:"Symbol",tag:Vg,description:pg}),a||(Hg.description=pg),Hg},Wg=function(Vg,pg,Hg){Vg===k&&Wg(ag,pg,Hg),h(Vg);var Jg=u(pg);return h(Hg),c(ng,Jg)?(Hg.enumerable?(c(Vg,L)&&Vg[L][Jg]&&(Vg[L][Jg]=!1),Hg=p(Hg,{enumerable:Z(0,!1)})):(c(Vg,L)||Ag(Vg,L,Z(1,{})),Vg[L][Jg]=!0),hg(Vg,Jg,Hg)):Ag(Vg,Jg,Hg)},Gg=function(Vg,pg){h(Vg);var Hg=b(pg),Jg=Y(Hg).concat(yg(Hg));return P(Jg,function(zg){a&&!s(Sg,Hg,zg)||Wg(Vg,zg,Hg[zg])}),Vg},Sg=function(Vg){var pg=u(Vg),Hg=s(_,this,pg);return!(this===k&&c(ng,pg)&&!c(ag,pg))&&(!(Hg||!c(this,pg)||!c(ng,pg)||c(this,L)&&this[L][pg])||Hg)},Kg=function(Vg,pg){var Hg=b(Vg),Jg=u(pg);if(Hg!==k||!c(ng,Jg)||c(ag,Jg)){var zg=sg(Hg,Jg);return!zg||!c(ng,Jg)||c(Hg,L)&&Hg[L][Jg]||(zg.enumerable=!0),zg}},kg=function(Vg){var pg=O(b(Vg)),Hg=[];return P(pg,function(Jg){c(ng,Jg)||c(w,Jg)||Ig(Hg,Jg)}),Hg},yg=function(Vg){var pg=Vg===k,Hg=O(pg?ag:b(Vg)),Jg=[];return P(Hg,function(zg){!c(ng,zg)||pg&&!c(k,zg)||Ig(Jg,ng[zg])}),Jg};d||(V(q=(j=function(){if(r(q,this))throw new Cg("Symbol is not a constructor");var Vg=arguments.length&&arguments[0]!==void 0?m(arguments[0]):void 0,pg=W(Vg),Hg=function(Jg){this===k&&s(Hg,ag,Jg),c(this,L)&&c(this[L],pg)&&(this[L][pg]=!1);var zg=Z(1,Jg);try{hg(this,pg,zg)}catch(aI){if(!(aI instanceof tg))throw aI;dg(this,pg,zg)}};return a&&cg&&hg(k,pg,{configurable:!0,set:Hg}),rg(pg,Vg)}).prototype,"toString",function(){return J(this).tag}),V(j,"withoutSetter",function(Vg){return rg(W(Vg),Vg)}),K.f=Sg,z.f=Wg,v.f=Gg,S.f=Kg,R.f=X.f=kg,H.f=yg,f.f=function(Vg){return rg(y(Vg),Vg)},a&&(N(q,"description",{configurable:!0,get:function(){return J(this).description}}),n||V(k,"propertyIsEnumerable",Sg,{unsafe:!0}))),e({global:!0,constructor:!0,wrap:!0,forced:!d,sham:!d},{Symbol:j}),P(Y(lg),function(Vg){D(Vg)}),e({target:"Symbol",stat:!0,forced:!d},{useSetter:function(){cg=!0},useSimple:function(){cg=!1}}),e({target:"Object",stat:!0,forced:!d,sham:!a},{create:function(Vg,pg){return pg===void 0?p(Vg):Gg(p(Vg),pg)},defineProperty:Wg,defineProperties:Gg,getOwnPropertyDescriptor:Kg}),e({target:"Object",stat:!0,forced:!d},{getOwnPropertyNames:kg}),F(),T(j,"Symbol"),w[L]=!0},{"../internals/an-object":227,"../internals/array-iteration":229,"../internals/create-property-descriptor":242,"../internals/define-built-in":245,"../internals/define-built-in-accessor":244,"../internals/descriptors":247,"../internals/export":259,"../internals/fails":260,"../internals/function-call":264,"../internals/function-uncurry-this":268,"../internals/global":274,"../internals/has-own-property":275,"../internals/hidden-keys":276,"../internals/internal-state":282,"../internals/is-pure":290,"../internals/object-create":306,"../internals/object-define-properties":307,"../internals/object-define-property":308,"../internals/object-get-own-property-descriptor":309,"../internals/object-get-own-property-names":311,"../internals/object-get-own-property-names-external":310,"../internals/object-get-own-property-symbols":312,"../internals/object-is-prototype-of":314,"../internals/object-keys":316,"../internals/object-property-is-enumerable":317,"../internals/set-to-string-tag":331,"../internals/shared":334,"../internals/shared-key":332,"../internals/symbol-constructor-detection":336,"../internals/symbol-define-to-primitive":337,"../internals/to-indexed-object":341,"../internals/to-property-key":346,"../internals/to-string":348,"../internals/uid":350,"../internals/well-known-symbol":357,"../internals/well-known-symbol-define":355,"../internals/well-known-symbol-wrapped":356}],380:[function(g,C,i){var e=g("../internals/export"),A=g("../internals/get-built-in"),s=g("../internals/has-own-property"),l=g("../internals/to-string"),n=g("../internals/shared"),a=g("../internals/symbol-registry-detection"),d=n("string-to-symbol-registry"),o=n("symbol-to-string-registry");e({target:"Symbol",stat:!0,forced:!a},{for:function(c){var r=l(c);if(s(d,r))return d[r];var h=A("Symbol")(r);return d[r]=h,o[h]=r,h}})},{"../internals/export":259,"../internals/get-built-in":269,"../internals/has-own-property":275,"../internals/shared":334,"../internals/symbol-registry-detection":338,"../internals/to-string":348}],381:[function(g,C,i){g("../modules/es.symbol.constructor"),g("../modules/es.symbol.for"),g("../modules/es.symbol.key-for"),g("../modules/es.json.stringify"),g("../modules/es.object.get-own-property-symbols")},{"../modules/es.json.stringify":362,"../modules/es.object.get-own-property-symbols":365,"../modules/es.symbol.constructor":379,"../modules/es.symbol.for":380,"../modules/es.symbol.key-for":382}],382:[function(g,C,i){var e=g("../internals/export"),A=g("../internals/has-own-property"),s=g("../internals/is-symbol"),l=g("../internals/try-to-string"),n=g("../internals/shared"),a=g("../internals/symbol-registry-detection"),d=n("symbol-to-string-registry");e({target:"Symbol",stat:!0,forced:!a},{keyFor:function(o){if(!s(o))throw new TypeError(l(o)+" is not a symbol");if(A(d,o))return d[o]}})},{"../internals/export":259,"../internals/has-own-property":275,"../internals/is-symbol":292,"../internals/shared":334,"../internals/symbol-registry-detection":338,"../internals/try-to-string":349}],383:[function(g,C,i){function e(A){return Object.prototype.toString.call(A)}i.isArray=function(A){return Array.isArray?Array.isArray(A):e(A)==="[object Array]"},i.isBoolean=function(A){return typeof A=="boolean"},i.isNull=function(A){return A===null},i.isNullOrUndefined=function(A){return A==null},i.isNumber=function(A){return typeof A=="number"},i.isString=function(A){return typeof A=="string"},i.isSymbol=function(A){return typeof A=="symbol"},i.isUndefined=function(A){return A===void 0},i.isRegExp=function(A){return e(A)==="[object RegExp]"},i.isObject=function(A){return typeof A=="object"&&A!==null},i.isDate=function(A){return e(A)==="[object Date]"},i.isError=function(A){return e(A)==="[object Error]"||A instanceof Error},i.isFunction=function(A){return typeof A=="function"},i.isPrimitive=function(A){return A===null||typeof A=="boolean"||typeof A=="number"||typeof A=="string"||typeof A=="symbol"||A===void 0},i.isBuffer=g("buffer").Buffer.isBuffer},{buffer:220}],384:[function(g,C,i){(function(e){(function(){var A=g("elliptic"),s=g("bn.js");C.exports=function(d){return new n(d)};var l={secp256k1:{name:"secp256k1",byteLength:32},secp224r1:{name:"p224",byteLength:28},prime256v1:{name:"p256",byteLength:32},prime192v1:{name:"p192",byteLength:24},ed25519:{name:"ed25519",byteLength:32},secp384r1:{name:"p384",byteLength:48},secp521r1:{name:"p521",byteLength:66}};function n(d){this.curveType=l[d],this.curveType||(this.curveType={name:d}),this.curve=new A.ec(this.curveType.name),this.keys=void 0}function a(d,o,c){Array.isArray(d)||(d=d.toArray());var r=new e(d);if(c&&r.length<c){var h=new e(c-r.length);h.fill(0),r=e.concat([h,r])}return o?r.toString(o):r}l.p224=l.secp224r1,l.p256=l.secp256r1=l.prime256v1,l.p192=l.secp192r1=l.prime192v1,l.p384=l.secp384r1,l.p521=l.secp521r1,n.prototype.generateKeys=function(d,o){return this.keys=this.curve.genKeyPair(),this.getPublicKey(d,o)},n.prototype.computeSecret=function(d,o,c){return o=o||"utf8",e.isBuffer(d)||(d=new e(d,o)),a(this.curve.keyFromPublic(d).getPublic().mul(this.keys.getPrivate()).getX(),c,this.curveType.byteLength)},n.prototype.getPublicKey=function(d,o){var c=this.keys.getPublic(o==="compressed",!0);return o==="hybrid"&&(c[c.length-1]%2?c[0]=7:c[0]=6),a(c,d)},n.prototype.getPrivateKey=function(d){return a(this.keys.getPrivate(),d)},n.prototype.setPublicKey=function(d,o){return o=o||"utf8",e.isBuffer(d)||(d=new e(d,o)),this.keys._importPublic(d),this},n.prototype.setPrivateKey=function(d,o){o=o||"utf8",e.isBuffer(d)||(d=new e(d,o));var c=new s(d);return c=c.toString(16),this.keys=this.curve.genKeyPair(),this.keys._importPrivate(c),this}}).call(this)}).call(this,g("buffer").Buffer)},{"bn.js":385,buffer:220,elliptic:405}],385:[function(g,C,i){arguments[4][184][0].apply(i,arguments)},{buffer:188,dup:184}],386:[function(g,C,i){var e=g("inherits"),A=g("md5.js"),s=g("ripemd160"),l=g("sha.js"),n=g("cipher-base");function a(d){n.call(this,"digest"),this._hash=d}e(a,n),a.prototype._update=function(d){this._hash.update(d)},a.prototype._final=function(){return this._hash.digest()},C.exports=function(d){return(d=d.toLowerCase())==="md5"?new A:d==="rmd160"||d==="ripemd160"?new s:new a(l(d))}},{"cipher-base":221,inherits:440,"md5.js":450,ripemd160:493,"sha.js":498}],387:[function(g,C,i){var e=g("md5.js");C.exports=function(A){return new e().update(A).digest()}},{"md5.js":450}],388:[function(g,C,i){var e=g("inherits"),A=g("./legacy"),s=g("cipher-base"),l=g("safe-buffer").Buffer,n=g("create-hash/md5"),a=g("ripemd160"),d=g("sha.js"),o=l.alloc(128);function c(r,h){s.call(this,"digest"),typeof h=="string"&&(h=l.from(h));var b=r==="sha512"||r==="sha384"?128:64;this._alg=r,this._key=h,h.length>b?h=(r==="rmd160"?new a:d(r)).update(h).digest():h.length<b&&(h=l.concat([h,o],b));for(var u=this._ipad=l.allocUnsafe(b),m=this._opad=l.allocUnsafe(b),Z=0;Z<b;Z++)u[Z]=54^h[Z],m[Z]=92^h[Z];this._hash=r==="rmd160"?new a:d(r),this._hash.update(u)}e(c,s),c.prototype._update=function(r){this._hash.update(r)},c.prototype._final=function(){var r=this._hash.digest();return(this._alg==="rmd160"?new a:d(this._alg)).update(this._opad).update(r).digest()},C.exports=function(r,h){return(r=r.toLowerCase())==="rmd160"||r==="ripemd160"?new c("rmd160",h):r==="md5"?new A(n,h):new c(r,h)}},{"./legacy":389,"cipher-base":221,"create-hash/md5":387,inherits:440,ripemd160:493,"safe-buffer":494,"sha.js":498}],389:[function(g,C,i){var e=g("inherits"),A=g("safe-buffer").Buffer,s=g("cipher-base"),l=A.alloc(128);function n(a,d){s.call(this,"digest"),typeof d=="string"&&(d=A.from(d)),this._alg=a,this._key=d,d.length>64?d=a(d):d.length<64&&(d=A.concat([d,l],64));for(var o=this._ipad=A.allocUnsafe(64),c=this._opad=A.allocUnsafe(64),r=0;r<64;r++)o[r]=54^d[r],c[r]=92^d[r];this._hash=[o]}e(n,s),n.prototype._update=function(a){this._hash.push(a)},n.prototype._final=function(){var a=this._alg(A.concat(this._hash));return this._alg(A.concat([this._opad,a]))},C.exports=n},{"cipher-base":221,inherits:440,"safe-buffer":494}],390:[function(g,C,i){i.randomBytes=i.rng=i.pseudoRandomBytes=i.prng=g("randombytes"),i.createHash=i.Hash=g("create-hash"),i.createHmac=i.Hmac=g("create-hmac");var e=g("browserify-sign/algos"),A=Object.keys(e),s=["sha1","sha224","sha256","sha384","sha512","md5","rmd160"].concat(A);i.getHashes=function(){return s};var l=g("pbkdf2");i.pbkdf2=l.pbkdf2,i.pbkdf2Sync=l.pbkdf2Sync;var n=g("browserify-cipher");i.Cipher=n.Cipher,i.createCipher=n.createCipher,i.Cipheriv=n.Cipheriv,i.createCipheriv=n.createCipheriv,i.Decipher=n.Decipher,i.createDecipher=n.createDecipher,i.Decipheriv=n.Decipheriv,i.createDecipheriv=n.createDecipheriv,i.getCiphers=n.getCiphers,i.listCiphers=n.listCiphers;var a=g("diffie-hellman");i.DiffieHellmanGroup=a.DiffieHellmanGroup,i.createDiffieHellmanGroup=a.createDiffieHellmanGroup,i.getDiffieHellman=a.getDiffieHellman,i.createDiffieHellman=a.createDiffieHellman,i.DiffieHellman=a.DiffieHellman;var d=g("browserify-sign");i.createSign=d.createSign,i.Sign=d.Sign,i.createVerify=d.createVerify,i.Verify=d.Verify,i.createECDH=g("create-ecdh");var o=g("public-encrypt");i.publicEncrypt=o.publicEncrypt,i.privateEncrypt=o.privateEncrypt,i.publicDecrypt=o.publicDecrypt,i.privateDecrypt=o.privateDecrypt;var c=g("randomfill");i.randomFill=c.randomFill,i.randomFillSync=c.randomFillSync,i.createCredentials=function(){throw new Error(["sorry, createCredentials is not implemented yet","we accept pull requests","https://github.com/crypto-browserify/crypto-browserify"].join(`
- `))},i.constants={DH_CHECK_P_NOT_SAFE_PRIME:2,DH_CHECK_P_NOT_PRIME:1,DH_UNABLE_TO_CHECK_GENERATOR:4,DH_NOT_SUITABLE_GENERATOR:8,NPN_ENABLED:1,ALPN_ENABLED:1,RSA_PKCS1_PADDING:1,RSA_SSLV23_PADDING:2,RSA_NO_PADDING:3,RSA_PKCS1_OAEP_PADDING:4,RSA_X931_PADDING:5,RSA_PKCS1_PSS_PADDING:6,POINT_CONVERSION_COMPRESSED:2,POINT_CONVERSION_UNCOMPRESSED:4,POINT_CONVERSION_HYBRID:6}},{"browserify-cipher":206,"browserify-sign":213,"browserify-sign/algos":210,"create-ecdh":384,"create-hash":386,"create-hmac":388,"diffie-hellman":400,pbkdf2:460,"public-encrypt":468,randombytes:475,randomfill:476}],391:[function(g,C,i){(function(e,A){typeof i=="object"&&C!==void 0?C.exports=A():(e=typeof globalThis<"u"?globalThis:e||self).dayjs=A()})(void 0,function(){var e=6e4,A=36e5,s="millisecond",l="second",n="minute",a="hour",d="day",o="week",c="month",r="quarter",h="year",b="date",u="Invalid Date",m=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,Z=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,p={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(G){var w=["th","st","nd","rd"],W=G%100;return"["+G+(w[(W-20)%10]||w[W]||w[0])+"]"}},Y=function(G,w,W){var y=String(G);return!y||y.length>=w?G:""+Array(w+1-y.length).join(W)+G},R={s:Y,z:function(G){var w=-G.utcOffset(),W=Math.abs(w),y=Math.floor(W/60),f=W%60;return(w<=0?"+":"-")+Y(y,2,"0")+":"+Y(f,2,"0")},m:function G(w,W){if(w.date()<W.date())return-G(W,w);var y=12*(W.year()-w.year())+(W.month()-w.month()),f=w.clone().add(y,c),D=W-f<0,F=w.clone().add(y+(D?-1:1),c);return+(-(y+(W-f)/(D?f-F:F-f))||0)},a:function(G){return G<0?Math.ceil(G)||0:Math.floor(G)},p:function(G){return{M:c,y:h,w:o,d,D:b,h:a,m:n,s:l,ms:s,Q:r}[G]||String(G||"").toLowerCase().replace(/s$/,"")},u:function(G){return G===void 0}},X="en",H={};H[X]=p;var S="$isDayjsObject",z=function(G){return G instanceof N||!(!G||!G[S])},v=function G(w,W,y){var f;if(!w)return X;if(typeof w=="string"){var D=w.toLowerCase();H[D]&&(f=D),W&&(H[D]=W,f=D);var F=w.split("-");if(!f&&F.length>1)return G(F[0])}else{var T=w.name;H[T]=w,f=T}return!y&&f&&(X=f),f||!y&&X},K=function(G,w){if(z(G))return G.clone();var W=typeof w=="object"?w:{};return W.date=G,W.args=arguments,new N(W)},V=R;V.l=v,V.i=z,V.w=function(G,w){return K(G,{locale:w.$L,utc:w.$u,x:w.$x,$offset:w.$offset})};var N=function(){function G(W){this.$L=v(W.locale,null,!0),this.parse(W),this.$x=this.$x||W.x||{},this[S]=!0}var w=G.prototype;return w.parse=function(W){this.$d=function(y){var f=y.date,D=y.utc;if(f===null)return new Date(NaN);if(V.u(f))return new Date;if(f instanceof Date)return new Date(f);if(typeof f=="string"&&!/Z$/i.test(f)){var F=f.match(m);if(F){var T=F[2]-1||0,Q=(F[7]||"0").substring(0,3);return D?new Date(Date.UTC(F[1],T,F[3]||1,F[4]||0,F[5]||0,F[6]||0,Q)):new Date(F[1],T,F[3]||1,F[4]||0,F[5]||0,F[6]||0,Q)}}return new Date(f)}(W),this.init()},w.init=function(){var W=this.$d;this.$y=W.getFullYear(),this.$M=W.getMonth(),this.$D=W.getDate(),this.$W=W.getDay(),this.$H=W.getHours(),this.$m=W.getMinutes(),this.$s=W.getSeconds(),this.$ms=W.getMilliseconds()},w.$utils=function(){return V},w.isValid=function(){return this.$d.toString()!==u},w.isSame=function(W,y){var f=K(W);return this.startOf(y)<=f&&f<=this.endOf(y)},w.isAfter=function(W,y){return K(W)<this.startOf(y)},w.isBefore=function(W,y){return this.endOf(y)<K(W)},w.$g=function(W,y,f){return V.u(W)?this[y]:this.set(f,W)},w.unix=function(){return Math.floor(this.valueOf()/1e3)},w.valueOf=function(){return this.$d.getTime()},w.startOf=function(W,y){var f=this,D=!!V.u(y)||y,F=V.p(W),T=function(q,tg){var Cg=V.w(f.$u?Date.UTC(f.$y,tg,q):new Date(f.$y,tg,q),f);return D?Cg:Cg.endOf(d)},Q=function(q,tg){return V.w(f.toDate()[q].apply(f.toDate("s"),(D?[0,0,0,0]:[23,59,59,999]).slice(tg)),f)},P=this.$W,L=this.$M,E=this.$D,J="set"+(this.$u?"UTC":"");switch(F){case h:return D?T(1,0):T(31,11);case c:return D?T(1,L):T(0,L+1);case o:var k=this.$locale().weekStart||0,j=(P<k?P+7:P)-k;return T(D?E-j:E+(6-j),L);case d:case b:return Q(J+"Hours",0);case a:return Q(J+"Minutes",1);case n:return Q(J+"Seconds",2);case l:return Q(J+"Milliseconds",3);default:return this.clone()}},w.endOf=function(W){return this.startOf(W,!1)},w.$set=function(W,y){var f,D=V.p(W),F="set"+(this.$u?"UTC":""),T=(f={},f[d]=F+"Date",f[b]=F+"Date",f[c]=F+"Month",f[h]=F+"FullYear",f[a]=F+"Hours",f[n]=F+"Minutes",f[l]=F+"Seconds",f[s]=F+"Milliseconds",f)[D],Q=D===d?this.$D+(y-this.$W):y;if(D===c||D===h){var P=this.clone().set(b,1);P.$d[T](Q),P.init(),this.$d=P.set(b,Math.min(this.$D,P.daysInMonth())).$d}else T&&this.$d[T](Q);return this.init(),this},w.set=function(W,y){return this.clone().$set(W,y)},w.get=function(W){return this[V.p(W)]()},w.add=function(W,y){var f,D=this;W=Number(W);var F=V.p(y),T=function(L){var E=K(D);return V.w(E.date(E.date()+Math.round(L*W)),D)};if(F===c)return this.set(c,this.$M+W);if(F===h)return this.set(h,this.$y+W);if(F===d)return T(1);if(F===o)return T(7);var Q=(f={},f[n]=e,f[a]=A,f[l]=1e3,f)[F]||1,P=this.$d.getTime()+W*Q;return V.w(P,this)},w.subtract=function(W,y){return this.add(-1*W,y)},w.format=function(W){var y=this,f=this.$locale();if(!this.isValid())return f.invalidDate||u;var D=W||"YYYY-MM-DDTHH:mm:ssZ",F=V.z(this),T=this.$H,Q=this.$m,P=this.$M,L=f.weekdays,E=f.months,J=f.meridiem,k=function(tg,Cg,x,sg){return tg&&(tg[Cg]||tg(y,D))||x[Cg].slice(0,sg)},j=function(tg){return V.s(T%12||12,tg,"0")},q=J||function(tg,Cg,x){var sg=tg<12?"AM":"PM";return x?sg.toLowerCase():sg};return D.replace(Z,function(tg,Cg){return Cg||function(x){switch(x){case"YY":return String(y.$y).slice(-2);case"YYYY":return V.s(y.$y,4,"0");case"M":return P+1;case"MM":return V.s(P+1,2,"0");case"MMM":return k(f.monthsShort,P,E,3);case"MMMM":return k(E,P);case"D":return y.$D;case"DD":return V.s(y.$D,2,"0");case"d":return String(y.$W);case"dd":return k(f.weekdaysMin,y.$W,L,2);case"ddd":return k(f.weekdaysShort,y.$W,L,3);case"dddd":return L[y.$W];case"H":return String(T);case"HH":return V.s(T,2,"0");case"h":return j(1);case"hh":return j(2);case"a":return q(T,Q,!0);case"A":return q(T,Q,!1);case"m":return String(Q);case"mm":return V.s(Q,2,"0");case"s":return String(y.$s);case"ss":return V.s(y.$s,2,"0");case"SSS":return V.s(y.$ms,3,"0");case"Z":return F}return null}(tg)||F.replace(":","")})},w.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},w.diff=function(W,y,f){var D,F=this,T=V.p(y),Q=K(W),P=(Q.utcOffset()-this.utcOffset())*e,L=this-Q,E=function(){return V.m(F,Q)};switch(T){case h:D=E()/12;break;case c:D=E();break;case r:D=E()/3;break;case o:D=(L-P)/6048e5;break;case d:D=(L-P)/864e5;break;case a:D=L/A;break;case n:D=L/e;break;case l:D=L/1e3;break;default:D=L}return f?D:V.a(D)},w.daysInMonth=function(){return this.endOf(c).$D},w.$locale=function(){return H[this.$L]},w.locale=function(W,y){if(!W)return this.$L;var f=this.clone(),D=v(W,y,!0);return D&&(f.$L=D),f},w.clone=function(){return V.w(this.$d,this)},w.toDate=function(){return new Date(this.valueOf())},w.toJSON=function(){return this.isValid()?this.toISOString():null},w.toISOString=function(){return this.$d.toISOString()},w.toString=function(){return this.$d.toUTCString()},G}(),B=N.prototype;return K.prototype=B,[["$ms",s],["$s",l],["$m",n],["$H",a],["$W",d],["$M",c],["$y",h],["$D",b]].forEach(function(G){B[G[1]]=function(w){return this.$g(w,G[0],G[1])}}),K.extend=function(G,w){return G.$i||(G(w,N,K),G.$i=!0),K},K.locale=v,K.isDayjs=z,K.unix=function(G){return K(1e3*G)},K.en=H[X],K.Ls=H,K.p={},K})},{}],392:[function(g,C,i){(function(e,A){typeof i=="object"&&C!==void 0?C.exports=A():(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_customParseFormat=A()})(void 0,function(){var e={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},A=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,s=/\d\d/,l=/\d\d?/,n=/\d*[^-_:/,()\s\d]+/,a={},d=function(m){return(m=+m)+(m>68?1900:2e3)},o=function(m){return function(Z){this[m]=+Z}},c=[/[+-]\d\d:?(\d\d)?|Z/,function(m){(this.zone||(this.zone={})).offset=function(Z){if(!Z||Z==="Z")return 0;var p=Z.match(/([+-]|\d\d)/g),Y=60*p[1]+(+p[2]||0);return Y===0?0:p[0]==="+"?-Y:Y}(m)}],r=function(m){var Z=a[m];return Z&&(Z.indexOf?Z:Z.s.concat(Z.f))},h=function(m,Z){var p,Y=a.meridiem;if(Y){for(var R=1;R<=24;R+=1)if(m.indexOf(Y(R,0,Z))>-1){p=R>12;break}}else p=m===(Z?"pm":"PM");return p},b={A:[n,function(m){this.afternoon=h(m,!1)}],a:[n,function(m){this.afternoon=h(m,!0)}],S:[/\d/,function(m){this.milliseconds=100*+m}],SS:[s,function(m){this.milliseconds=10*+m}],SSS:[/\d{3}/,function(m){this.milliseconds=+m}],s:[l,o("seconds")],ss:[l,o("seconds")],m:[l,o("minutes")],mm:[l,o("minutes")],H:[l,o("hours")],h:[l,o("hours")],HH:[l,o("hours")],hh:[l,o("hours")],D:[l,o("day")],DD:[s,o("day")],Do:[n,function(m){var Z=a.ordinal,p=m.match(/\d+/);if(this.day=p[0],Z)for(var Y=1;Y<=31;Y+=1)Z(Y).replace(/\[|\]/g,"")===m&&(this.day=Y)}],M:[l,o("month")],MM:[s,o("month")],MMM:[n,function(m){var Z=r("months"),p=(r("monthsShort")||Z.map(function(Y){return Y.slice(0,3)})).indexOf(m)+1;if(p<1)throw new Error;this.month=p%12||p}],MMMM:[n,function(m){var Z=r("months").indexOf(m)+1;if(Z<1)throw new Error;this.month=Z%12||Z}],Y:[/[+-]?\d+/,o("year")],YY:[s,function(m){this.year=d(m)}],YYYY:[/\d{4}/,o("year")],Z:c,ZZ:c};function u(m){var Z,p;Z=m,p=a&&a.formats;for(var Y=(m=Z.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(K,V,N){var B=N&&N.toUpperCase();return V||p[N]||e[N]||p[B].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(G,w,W){return w||W.slice(1)})})).match(A),R=Y.length,X=0;X<R;X+=1){var H=Y[X],S=b[H],z=S&&S[0],v=S&&S[1];Y[X]=v?{regex:z,parser:v}:H.replace(/^\[|\]$/g,"")}return function(K){for(var V={},N=0,B=0;N<R;N+=1){var G=Y[N];if(typeof G=="string")B+=G.length;else{var w=G.regex,W=G.parser,y=K.slice(B),f=w.exec(y)[0];W.call(V,f),K=K.replace(f,"")}}return function(D){var F=D.afternoon;if(F!==void 0){var T=D.hours;F?T<12&&(D.hours+=12):T===12&&(D.hours=0),delete D.afternoon}}(V),V}}return function(m,Z,p){p.p.customParseFormat=!0,m&&m.parseTwoDigitYear&&(d=m.parseTwoDigitYear);var Y=Z.prototype,R=Y.parse;Y.parse=function(X){var H=X.date,S=X.utc,z=X.args;this.$u=S;var v=z[1];if(typeof v=="string"){var K=z[2]===!0,V=z[3]===!0,N=K||V,B=z[2];V&&(B=z[2]),a=this.$locale(),!K&&B&&(a=p.Ls[B]),this.$d=function(y,f,D){try{if(["x","X"].indexOf(f)>-1)return new Date((f==="X"?1e3:1)*y);var F=u(f)(y),T=F.year,Q=F.month,P=F.day,L=F.hours,E=F.minutes,J=F.seconds,k=F.milliseconds,j=F.zone,q=new Date,tg=P||(T||Q?1:q.getDate()),Cg=T||q.getFullYear(),x=0;T&&!Q||(x=Q>0?Q-1:q.getMonth());var sg=L||0,Ag=E||0,O=J||0,_=k||0;return j?new Date(Date.UTC(Cg,x,tg,sg,Ag,O,_+60*j.offset*1e3)):D?new Date(Date.UTC(Cg,x,tg,sg,Ag,O,_)):new Date(Cg,x,tg,sg,Ag,O,_)}catch{return new Date("")}}(H,v,S),this.init(),B&&B!==!0&&(this.$L=this.locale(B).$L),N&&H!=this.format(v)&&(this.$d=new Date("")),a={}}else if(v instanceof Array)for(var G=v.length,w=1;w<=G;w+=1){z[1]=v[w-1];var W=p.apply(this,z);if(W.isValid()){this.$d=W.$d,this.$L=W.$L,this.init();break}w===G&&(this.$d=new Date(""))}else R.call(this,X)}}})},{}],393:[function(g,C,i){(function(e,A){typeof i=="object"&&C!==void 0?C.exports=A():(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_utc=A()})(void 0,function(){var e="minute",A=/[+-]\d\d(?::?\d\d)?/g,s=/([+-]|\d\d)/g;return function(l,n,a){var d=n.prototype;a.utc=function(m){var Z={date:m,utc:!0,args:arguments};return new n(Z)},d.utc=function(m){var Z=a(this.toDate(),{locale:this.$L,utc:!0});return m?Z.add(this.utcOffset(),e):Z},d.local=function(){return a(this.toDate(),{locale:this.$L,utc:!1})};var o=d.parse;d.parse=function(m){m.utc&&(this.$u=!0),this.$utils().u(m.$offset)||(this.$offset=m.$offset),o.call(this,m)};var c=d.init;d.init=function(){if(this.$u){var m=this.$d;this.$y=m.getUTCFullYear(),this.$M=m.getUTCMonth(),this.$D=m.getUTCDate(),this.$W=m.getUTCDay(),this.$H=m.getUTCHours(),this.$m=m.getUTCMinutes(),this.$s=m.getUTCSeconds(),this.$ms=m.getUTCMilliseconds()}else c.call(this)};var r=d.utcOffset;d.utcOffset=function(m,Z){var p=this.$utils().u;if(p(m))return this.$u?0:p(this.$offset)?r.call(this):this.$offset;if(typeof m=="string"&&(m=function(H){H===void 0&&(H="");var S=H.match(A);if(!S)return null;var z=(""+S[0]).match(s)||["-",0,0],v=z[0],K=60*+z[1]+ +z[2];return K===0?0:v==="+"?K:-K}(m))===null)return this;var Y=Math.abs(m)<=16?60*m:m,R=this;if(Z)return R.$offset=Y,R.$u=m===0,R;if(m!==0){var X=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(R=this.local().add(Y+X,e)).$offset=Y,R.$x.$localOffset=X}else R=this.utc();return R};var h=d.format;d.format=function(m){var Z=m||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return h.call(this,Z)},d.valueOf=function(){var m=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*m},d.isUTC=function(){return!!this.$u},d.toISOString=function(){return this.toDate().toISOString()},d.toString=function(){return this.toDate().toUTCString()};var b=d.toDate;d.toDate=function(m){return m==="s"&&this.$offset?a(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():b.call(this)};var u=d.diff;d.diff=function(m,Z,p){if(m&&this.$u===m.$u)return u.call(this,m,Z,p);var Y=this.local(),R=a(m).local();return u.call(Y,R,Z,p)}}})},{}],394:[function(g,C,i){i.utils=g("./des/utils"),i.Cipher=g("./des/cipher"),i.DES=g("./des/des"),i.CBC=g("./des/cbc"),i.EDE=g("./des/ede")},{"./des/cbc":395,"./des/cipher":396,"./des/des":397,"./des/ede":398,"./des/utils":399}],395:[function(g,C,i){var e=g("minimalistic-assert"),A=g("inherits"),s={};function l(n){e.equal(n.length,8,"Invalid IV length"),this.iv=new Array(8);for(var a=0;a<this.iv.length;a++)this.iv[a]=n[a]}i.instantiate=function(n){function a(r){n.call(this,r),this._cbcInit()}A(a,n);for(var d=Object.keys(s),o=0;o<d.length;o++){var c=d[o];a.prototype[c]=s[c]}return a.create=function(r){return new a(r)},a},s._cbcInit=function(){var n=new l(this.options.iv);this._cbcState=n},s._update=function(n,a,d,o){var c=this._cbcState,r=this.constructor.super_.prototype,h=c.iv;if(this.type==="encrypt"){for(var b=0;b<this.blockSize;b++)h[b]^=n[a+b];for(r._update.call(this,h,0,d,o),b=0;b<this.blockSize;b++)h[b]=d[o+b]}else{for(r._update.call(this,n,a,d,o),b=0;b<this.blockSize;b++)d[o+b]^=h[b];for(b=0;b<this.blockSize;b++)h[b]=n[a+b]}}},{inherits:440,"minimalistic-assert":453}],396:[function(g,C,i){var e=g("minimalistic-assert");function A(s){this.options=s,this.type=this.options.type,this.blockSize=8,this._init(),this.buffer=new Array(this.blockSize),this.bufferOff=0,this.padding=s.padding!==!1}C.exports=A,A.prototype._init=function(){},A.prototype.update=function(s){return s.length===0?[]:this.type==="decrypt"?this._updateDecrypt(s):this._updateEncrypt(s)},A.prototype._buffer=function(s,l){for(var n=Math.min(this.buffer.length-this.bufferOff,s.length-l),a=0;a<n;a++)this.buffer[this.bufferOff+a]=s[l+a];return this.bufferOff+=n,n},A.prototype._flushBuffer=function(s,l){return this._update(this.buffer,0,s,l),this.bufferOff=0,this.blockSize},A.prototype._updateEncrypt=function(s){var l=0,n=0,a=(this.bufferOff+s.length)/this.blockSize|0,d=new Array(a*this.blockSize);this.bufferOff!==0&&(l+=this._buffer(s,l),this.bufferOff===this.buffer.length&&(n+=this._flushBuffer(d,n)));for(var o=s.length-(s.length-l)%this.blockSize;l<o;l+=this.blockSize)this._update(s,l,d,n),n+=this.blockSize;for(;l<s.length;l++,this.bufferOff++)this.buffer[this.bufferOff]=s[l];return d},A.prototype._updateDecrypt=function(s){for(var l=0,n=0,a=Math.ceil((this.bufferOff+s.length)/this.blockSize)-1,d=new Array(a*this.blockSize);a>0;a--)l+=this._buffer(s,l),n+=this._flushBuffer(d,n);return l+=this._buffer(s,l),d},A.prototype.final=function(s){var l,n;return s&&(l=this.update(s)),n=this.type==="encrypt"?this._finalEncrypt():this._finalDecrypt(),l?l.concat(n):n},A.prototype._pad=function(s,l){if(l===0)return!1;for(;l<s.length;)s[l++]=0;return!0},A.prototype._finalEncrypt=function(){if(!this._pad(this.buffer,this.bufferOff))return[];var s=new Array(this.blockSize);return this._update(this.buffer,0,s,0),s},A.prototype._unpad=function(s){return s},A.prototype._finalDecrypt=function(){e.equal(this.bufferOff,this.blockSize,"Not enough data to decrypt");var s=new Array(this.blockSize);return this._flushBuffer(s,0),this._unpad(s)}},{"minimalistic-assert":453}],397:[function(g,C,i){var e=g("minimalistic-assert"),A=g("inherits"),s=g("./utils"),l=g("./cipher");function n(){this.tmp=new Array(2),this.keys=null}function a(o){l.call(this,o);var c=new n;this._desState=c,this.deriveKeys(c,o.key)}A(a,l),C.exports=a,a.create=function(o){return new a(o)};var d=[1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1];a.prototype.deriveKeys=function(o,c){o.keys=new Array(32),e.equal(c.length,this.blockSize,"Invalid key length");var r=s.readUInt32BE(c,0),h=s.readUInt32BE(c,4);s.pc1(r,h,o.tmp,0),r=o.tmp[0],h=o.tmp[1];for(var b=0;b<o.keys.length;b+=2){var u=d[b>>>1];r=s.r28shl(r,u),h=s.r28shl(h,u),s.pc2(r,h,o.keys,b)}},a.prototype._update=function(o,c,r,h){var b=this._desState,u=s.readUInt32BE(o,c),m=s.readUInt32BE(o,c+4);s.ip(u,m,b.tmp,0),u=b.tmp[0],m=b.tmp[1],this.type==="encrypt"?this._encrypt(b,u,m,b.tmp,0):this._decrypt(b,u,m,b.tmp,0),u=b.tmp[0],m=b.tmp[1],s.writeUInt32BE(r,u,h),s.writeUInt32BE(r,m,h+4)},a.prototype._pad=function(o,c){if(this.padding===!1)return!1;for(var r=o.length-c,h=c;h<o.length;h++)o[h]=r;return!0},a.prototype._unpad=function(o){if(this.padding===!1)return o;for(var c=o[o.length-1],r=o.length-c;r<o.length;r++)e.equal(o[r],c);return o.slice(0,o.length-c)},a.prototype._encrypt=function(o,c,r,h,b){for(var u=c,m=r,Z=0;Z<o.keys.length;Z+=2){var p=o.keys[Z],Y=o.keys[Z+1];s.expand(m,o.tmp,0),p^=o.tmp[0],Y^=o.tmp[1];var R=s.substitute(p,Y),X=m;m=(u^s.permute(R))>>>0,u=X}s.rip(m,u,h,b)},a.prototype._decrypt=function(o,c,r,h,b){for(var u=r,m=c,Z=o.keys.length-2;Z>=0;Z-=2){var p=o.keys[Z],Y=o.keys[Z+1];s.expand(u,o.tmp,0),p^=o.tmp[0],Y^=o.tmp[1];var R=s.substitute(p,Y),X=u;u=(m^s.permute(R))>>>0,m=X}s.rip(u,m,h,b)}},{"./cipher":396,"./utils":399,inherits:440,"minimalistic-assert":453}],398:[function(g,C,i){var e=g("minimalistic-assert"),A=g("inherits"),s=g("./cipher"),l=g("./des");function n(d,o){e.equal(o.length,24,"Invalid key length");var c=o.slice(0,8),r=o.slice(8,16),h=o.slice(16,24);this.ciphers=d==="encrypt"?[l.create({type:"encrypt",key:c}),l.create({type:"decrypt",key:r}),l.create({type:"encrypt",key:h})]:[l.create({type:"decrypt",key:h}),l.create({type:"encrypt",key:r}),l.create({type:"decrypt",key:c})]}function a(d){s.call(this,d);var o=new n(this.type,this.options.key);this._edeState=o}A(a,s),C.exports=a,a.create=function(d){return new a(d)},a.prototype._update=function(d,o,c,r){var h=this._edeState;h.ciphers[0]._update(d,o,c,r),h.ciphers[1]._update(c,r,c,r),h.ciphers[2]._update(c,r,c,r)},a.prototype._pad=l.prototype._pad,a.prototype._unpad=l.prototype._unpad},{"./cipher":396,"./des":397,inherits:440,"minimalistic-assert":453}],399:[function(g,C,i){i.readUInt32BE=function(l,n){return(l[0+n]<<24|l[1+n]<<16|l[2+n]<<8|l[3+n])>>>0},i.writeUInt32BE=function(l,n,a){l[0+a]=n>>>24,l[1+a]=n>>>16&255,l[2+a]=n>>>8&255,l[3+a]=255&n},i.ip=function(l,n,a,d){for(var o=0,c=0,r=6;r>=0;r-=2){for(var h=0;h<=24;h+=8)o<<=1,o|=n>>>h+r&1;for(h=0;h<=24;h+=8)o<<=1,o|=l>>>h+r&1}for(r=6;r>=0;r-=2){for(h=1;h<=25;h+=8)c<<=1,c|=n>>>h+r&1;for(h=1;h<=25;h+=8)c<<=1,c|=l>>>h+r&1}a[d+0]=o>>>0,a[d+1]=c>>>0},i.rip=function(l,n,a,d){for(var o=0,c=0,r=0;r<4;r++)for(var h=24;h>=0;h-=8)o<<=1,o|=n>>>h+r&1,o<<=1,o|=l>>>h+r&1;for(r=4;r<8;r++)for(h=24;h>=0;h-=8)c<<=1,c|=n>>>h+r&1,c<<=1,c|=l>>>h+r&1;a[d+0]=o>>>0,a[d+1]=c>>>0},i.pc1=function(l,n,a,d){for(var o=0,c=0,r=7;r>=5;r--){for(var h=0;h<=24;h+=8)o<<=1,o|=n>>h+r&1;for(h=0;h<=24;h+=8)o<<=1,o|=l>>h+r&1}for(h=0;h<=24;h+=8)o<<=1,o|=n>>h+r&1;for(r=1;r<=3;r++){for(h=0;h<=24;h+=8)c<<=1,c|=n>>h+r&1;for(h=0;h<=24;h+=8)c<<=1,c|=l>>h+r&1}for(h=0;h<=24;h+=8)c<<=1,c|=l>>h+r&1;a[d+0]=o>>>0,a[d+1]=c>>>0},i.r28shl=function(l,n){return l<<n&268435455|l>>>28-n};var e=[14,11,17,4,27,23,25,0,13,22,7,18,5,9,16,24,2,20,12,21,1,8,15,26,15,4,25,19,9,1,26,16,5,11,23,8,12,7,17,0,22,3,10,14,6,20,27,24];i.pc2=function(l,n,a,d){for(var o=0,c=0,r=e.length>>>1,h=0;h<r;h++)o<<=1,o|=l>>>e[h]&1;for(h=r;h<e.length;h++)c<<=1,c|=n>>>e[h]&1;a[d+0]=o>>>0,a[d+1]=c>>>0},i.expand=function(l,n,a){var d=0,o=0;d=(1&l)<<5|l>>>27;for(var c=23;c>=15;c-=4)d<<=6,d|=l>>>c&63;for(c=11;c>=3;c-=4)o|=l>>>c&63,o<<=6;o|=(31&l)<<1|l>>>31,n[a+0]=d>>>0,n[a+1]=o>>>0};var A=[14,0,4,15,13,7,1,4,2,14,15,2,11,13,8,1,3,10,10,6,6,12,12,11,5,9,9,5,0,3,7,8,4,15,1,12,14,8,8,2,13,4,6,9,2,1,11,7,15,5,12,11,9,3,7,14,3,10,10,0,5,6,0,13,15,3,1,13,8,4,14,7,6,15,11,2,3,8,4,14,9,12,7,0,2,1,13,10,12,6,0,9,5,11,10,5,0,13,14,8,7,10,11,1,10,3,4,15,13,4,1,2,5,11,8,6,12,7,6,12,9,0,3,5,2,14,15,9,10,13,0,7,9,0,14,9,6,3,3,4,15,6,5,10,1,2,13,8,12,5,7,14,11,12,4,11,2,15,8,1,13,1,6,10,4,13,9,0,8,6,15,9,3,8,0,7,11,4,1,15,2,14,12,3,5,11,10,5,14,2,7,12,7,13,13,8,14,11,3,5,0,6,6,15,9,0,10,3,1,4,2,7,8,2,5,12,11,1,12,10,4,14,15,9,10,3,6,15,9,0,0,6,12,10,11,1,7,13,13,8,15,9,1,4,3,5,14,11,5,12,2,7,8,2,4,14,2,14,12,11,4,2,1,12,7,4,10,7,11,13,6,1,8,5,5,0,3,15,15,10,13,3,0,9,14,8,9,6,4,11,2,8,1,12,11,7,10,1,13,14,7,2,8,13,15,6,9,15,12,0,5,9,6,10,3,4,0,5,14,3,12,10,1,15,10,4,15,2,9,7,2,12,6,9,8,5,0,6,13,1,3,13,4,14,14,0,7,11,5,3,11,8,9,4,14,3,15,2,5,12,2,9,8,5,12,15,3,10,7,11,0,14,4,1,10,7,1,6,13,0,11,8,6,13,4,13,11,0,2,11,14,7,15,4,0,9,8,1,13,10,3,14,12,3,9,5,7,12,5,2,10,15,6,8,1,6,1,6,4,11,11,13,13,8,12,1,3,4,7,10,14,7,10,9,15,5,6,0,8,15,0,14,5,2,9,3,2,12,13,1,2,15,8,13,4,8,6,10,15,3,11,7,1,4,10,12,9,5,3,6,14,11,5,0,0,14,12,9,7,2,7,2,11,1,4,14,1,7,9,4,12,10,14,8,2,13,0,15,6,12,10,9,13,0,15,3,3,5,5,6,8,11];i.substitute=function(l,n){for(var a=0,d=0;d<4;d++)a<<=4,a|=A[64*d+(l>>>18-6*d&63)];for(d=0;d<4;d++)a<<=4,a|=A[256+64*d+(n>>>18-6*d&63)];return a>>>0};var s=[16,25,12,11,3,20,4,15,31,17,9,6,27,14,1,22,30,24,8,18,0,5,29,23,13,19,2,26,10,21,28,7];i.permute=function(l){for(var n=0,a=0;a<s.length;a++)n<<=1,n|=l>>>s[a]&1;return n>>>0},i.padSplit=function(l,n,a){for(var d=l.toString(2);d.length<n;)d="0"+d;for(var o=[],c=0;c<n;c+=a)o.push(d.slice(c,c+a));return o.join(" ")}},{}],400:[function(g,C,i){(function(e){(function(){var A=g("./lib/generatePrime"),s=g("./lib/primes.json"),l=g("./lib/dh"),n={binary:!0,hex:!0,base64:!0};i.DiffieHellmanGroup=i.createDiffieHellmanGroup=i.getDiffieHellman=function(a){var d=new e(s[a].prime,"hex"),o=new e(s[a].gen,"hex");return new l(d,o)},i.createDiffieHellman=i.DiffieHellman=function a(d,o,c,r){return e.isBuffer(o)||n[o]===void 0?a(d,"binary",o,c):(o=o||"binary",r=r||"binary",c=c||new e([2]),e.isBuffer(c)||(c=new e(c,r)),typeof d=="number"?new l(A(d,c),c,!0):(e.isBuffer(d)||(d=new e(d,o)),new l(d,c,!0)))}}).call(this)}).call(this,g("buffer").Buffer)},{"./lib/dh":401,"./lib/generatePrime":402,"./lib/primes.json":403,buffer:220}],401:[function(g,C,i){(function(e){(function(){var A=g("bn.js"),s=new(g("miller-rabin")),l=new A(24),n=new A(11),a=new A(10),d=new A(3),o=new A(7),c=g("./generatePrime"),r=g("randombytes");function h(p,Y){return Y=Y||"utf8",e.isBuffer(p)||(p=new e(p,Y)),this._pub=new A(p),this}function b(p,Y){return Y=Y||"utf8",e.isBuffer(p)||(p=new e(p,Y)),this._priv=new A(p),this}C.exports=m;var u={};function m(p,Y,R){this.setGenerator(Y),this.__prime=new A(p),this._prime=A.mont(this.__prime),this._primeLen=p.length,this._pub=void 0,this._priv=void 0,this._primeCode=void 0,R?(this.setPublicKey=h,this.setPrivateKey=b):this._primeCode=8}function Z(p,Y){var R=new e(p.toArray());return Y?R.toString(Y):R}Object.defineProperty(m.prototype,"verifyError",{enumerable:!0,get:function(){return typeof this._primeCode!="number"&&(this._primeCode=function(p,Y){var R=Y.toString("hex"),X=[R,p.toString(16)].join("_");if(X in u)return u[X];var H,S=0;if(p.isEven()||!c.simpleSieve||!c.fermatTest(p)||!s.test(p))return S+=1,S+=R==="02"||R==="05"?8:4,u[X]=S,S;switch(s.test(p.shrn(1))||(S+=2),R){case"02":p.mod(l).cmp(n)&&(S+=8);break;case"05":(H=p.mod(a)).cmp(d)&&H.cmp(o)&&(S+=8);break;default:S+=4}return u[X]=S,S}(this.__prime,this.__gen)),this._primeCode}}),m.prototype.generateKeys=function(){return this._priv||(this._priv=new A(r(this._primeLen))),this._pub=this._gen.toRed(this._prime).redPow(this._priv).fromRed(),this.getPublicKey()},m.prototype.computeSecret=function(p){var Y=(p=(p=new A(p)).toRed(this._prime)).redPow(this._priv).fromRed(),R=new e(Y.toArray()),X=this.getPrime();if(R.length<X.length){var H=new e(X.length-R.length);H.fill(0),R=e.concat([H,R])}return R},m.prototype.getPublicKey=function(p){return Z(this._pub,p)},m.prototype.getPrivateKey=function(p){return Z(this._priv,p)},m.prototype.getPrime=function(p){return Z(this.__prime,p)},m.prototype.getGenerator=function(p){return Z(this._gen,p)},m.prototype.setGenerator=function(p,Y){return Y=Y||"utf8",e.isBuffer(p)||(p=new e(p,Y)),this.__gen=p,this._gen=new A(p),this}}).call(this)}).call(this,g("buffer").Buffer)},{"./generatePrime":402,"bn.js":404,buffer:220,"miller-rabin":451,randombytes:475}],402:[function(g,C,i){var e=g("randombytes");C.exports=p,p.simpleSieve=m,p.fermatTest=Z;var A=g("bn.js"),s=new A(24),l=new(g("miller-rabin")),n=new A(1),a=new A(2),d=new A(5),o=(new A(16),new A(8),new A(10)),c=new A(3),r=(new A(7),new A(11)),h=new A(4),b=(new A(12),null);function u(){if(b!==null)return b;var Y=[];Y[0]=2;for(var R=1,X=3;X<1048576;X+=2){for(var H=Math.ceil(Math.sqrt(X)),S=0;S<R&&Y[S]<=H&&X%Y[S]!=0;S++);R!==S&&Y[S]<=H||(Y[R++]=X)}return b=Y,Y}function m(Y){for(var R=u(),X=0;X<R.length;X++)if(Y.modn(R[X])===0)return Y.cmpn(R[X])===0;return!0}function Z(Y){var R=A.mont(Y);return a.toRed(R).redPow(Y.subn(1)).fromRed().cmpn(1)===0}function p(Y,R){if(Y<16)return new A(R===2||R===5?[140,123]:[140,39]);var X,H;for(R=new A(R);;){for(X=new A(e(Math.ceil(Y/8)));X.bitLength()>Y;)X.ishrn(1);if(X.isEven()&&X.iadd(n),X.testn(1)||X.iadd(a),R.cmp(a)){if(!R.cmp(d))for(;X.mod(o).cmp(c);)X.iadd(h)}else for(;X.mod(s).cmp(r);)X.iadd(h);if(m(H=X.shrn(1))&&m(X)&&Z(H)&&Z(X)&&l.test(H)&&l.test(X))return X}}},{"bn.js":404,"miller-rabin":451,randombytes:475}],403:[function(g,C,i){C.exports={modp1:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"},modp2:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"},modp5:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"},modp14:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"},modp15:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"},modp16:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"},modp17:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"},modp18:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"}}},{}],404:[function(g,C,i){arguments[4][184][0].apply(i,arguments)},{buffer:188,dup:184}],405:[function(g,C,i){var e=i;e.version=g("../package.json").version,e.utils=g("./elliptic/utils"),e.rand=g("brorand"),e.curve=g("./elliptic/curve"),e.curves=g("./elliptic/curves"),e.ec=g("./elliptic/ec"),e.eddsa=g("./elliptic/eddsa")},{"../package.json":421,"./elliptic/curve":408,"./elliptic/curves":411,"./elliptic/ec":412,"./elliptic/eddsa":415,"./elliptic/utils":419,brorand:187}],406:[function(g,C,i){var e=g("bn.js"),A=g("../utils"),s=A.getNAF,l=A.getJSF,n=A.assert;function a(o,c){this.type=o,this.p=new e(c.p,16),this.red=c.prime?e.red(c.prime):e.mont(this.p),this.zero=new e(0).toRed(this.red),this.one=new e(1).toRed(this.red),this.two=new e(2).toRed(this.red),this.n=c.n&&new e(c.n,16),this.g=c.g&&this.pointFromJSON(c.g,c.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4),this._bitLength=this.n?this.n.bitLength():0;var r=this.n&&this.p.div(this.n);!r||r.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}function d(o,c){this.curve=o,this.type=c,this.precomputed=null}C.exports=a,a.prototype.point=function(){throw new Error("Not implemented")},a.prototype.validate=function(){throw new Error("Not implemented")},a.prototype._fixedNafMul=function(o,c){n(o.precomputed);var r=o._getDoubles(),h=s(c,1,this._bitLength),b=(1<<r.step+1)-(r.step%2==0?2:1);b/=3;var u,m,Z=[];for(u=0;u<h.length;u+=r.step){m=0;for(var p=u+r.step-1;p>=u;p--)m=(m<<1)+h[p];Z.push(m)}for(var Y=this.jpoint(null,null,null),R=this.jpoint(null,null,null),X=b;X>0;X--){for(u=0;u<Z.length;u++)(m=Z[u])===X?R=R.mixedAdd(r.points[u]):m===-X&&(R=R.mixedAdd(r.points[u].neg()));Y=Y.add(R)}return Y.toP()},a.prototype._wnafMul=function(o,c){var r=4,h=o._getNAFPoints(r);r=h.wnd;for(var b=h.points,u=s(c,r,this._bitLength),m=this.jpoint(null,null,null),Z=u.length-1;Z>=0;Z--){for(var p=0;Z>=0&&u[Z]===0;Z--)p++;if(Z>=0&&p++,m=m.dblp(p),Z<0)break;var Y=u[Z];n(Y!==0),m=o.type==="affine"?Y>0?m.mixedAdd(b[Y-1>>1]):m.mixedAdd(b[-Y-1>>1].neg()):Y>0?m.add(b[Y-1>>1]):m.add(b[-Y-1>>1].neg())}return o.type==="affine"?m.toP():m},a.prototype._wnafMulAdd=function(o,c,r,h,b){var u,m,Z,p=this._wnafT1,Y=this._wnafT2,R=this._wnafT3,X=0;for(u=0;u<h;u++){var H=(Z=c[u])._getNAFPoints(o);p[u]=H.wnd,Y[u]=H.points}for(u=h-1;u>=1;u-=2){var S=u-1,z=u;if(p[S]===1&&p[z]===1){var v=[c[S],null,null,c[z]];c[S].y.cmp(c[z].y)===0?(v[1]=c[S].add(c[z]),v[2]=c[S].toJ().mixedAdd(c[z].neg())):c[S].y.cmp(c[z].y.redNeg())===0?(v[1]=c[S].toJ().mixedAdd(c[z]),v[2]=c[S].add(c[z].neg())):(v[1]=c[S].toJ().mixedAdd(c[z]),v[2]=c[S].toJ().mixedAdd(c[z].neg()));var K=[-3,-1,-5,-7,0,7,5,1,3],V=l(r[S],r[z]);for(X=Math.max(V[0].length,X),R[S]=new Array(X),R[z]=new Array(X),m=0;m<X;m++){var N=0|V[0][m],B=0|V[1][m];R[S][m]=K[3*(N+1)+(B+1)],R[z][m]=0,Y[S]=v}}else R[S]=s(r[S],p[S],this._bitLength),R[z]=s(r[z],p[z],this._bitLength),X=Math.max(R[S].length,X),X=Math.max(R[z].length,X)}var G=this.jpoint(null,null,null),w=this._wnafT4;for(u=X;u>=0;u--){for(var W=0;u>=0;){var y=!0;for(m=0;m<h;m++)w[m]=0|R[m][u],w[m]!==0&&(y=!1);if(!y)break;W++,u--}if(u>=0&&W++,G=G.dblp(W),u<0)break;for(m=0;m<h;m++){var f=w[m];f!==0&&(f>0?Z=Y[m][f-1>>1]:f<0&&(Z=Y[m][-f-1>>1].neg()),G=Z.type==="affine"?G.mixedAdd(Z):G.add(Z))}}for(u=0;u<h;u++)Y[u]=null;return b?G:G.toP()},a.BasePoint=d,d.prototype.eq=function(){throw new Error("Not implemented")},d.prototype.validate=function(){return this.curve.validate(this)},a.prototype.decodePoint=function(o,c){o=A.toArray(o,c);var r=this.p.byteLength();if((o[0]===4||o[0]===6||o[0]===7)&&o.length-1==2*r)return o[0]===6?n(o[o.length-1]%2==0):o[0]===7&&n(o[o.length-1]%2==1),this.point(o.slice(1,1+r),o.slice(1+r,1+2*r));if((o[0]===2||o[0]===3)&&o.length-1===r)return this.pointFromX(o.slice(1,1+r),o[0]===3);throw new Error("Unknown point format")},d.prototype.encodeCompressed=function(o){return this.encode(o,!0)},d.prototype._encode=function(o){var c=this.curve.p.byteLength(),r=this.getX().toArray("be",c);return o?[this.getY().isEven()?2:3].concat(r):[4].concat(r,this.getY().toArray("be",c))},d.prototype.encode=function(o,c){return A.encode(this._encode(c),o)},d.prototype.precompute=function(o){if(this.precomputed)return this;var c={doubles:null,naf:null,beta:null};return c.naf=this._getNAFPoints(8),c.doubles=this._getDoubles(4,o),c.beta=this._getBeta(),this.precomputed=c,this},d.prototype._hasDoubles=function(o){if(!this.precomputed)return!1;var c=this.precomputed.doubles;return!!c&&c.points.length>=Math.ceil((o.bitLength()+1)/c.step)},d.prototype._getDoubles=function(o,c){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var r=[this],h=this,b=0;b<c;b+=o){for(var u=0;u<o;u++)h=h.dbl();r.push(h)}return{step:o,points:r}},d.prototype._getNAFPoints=function(o){if(this.precomputed&&this.precomputed.naf)return this.precomputed.naf;for(var c=[this],r=(1<<o)-1,h=r===1?null:this.dbl(),b=1;b<r;b++)c[b]=c[b-1].add(h);return{wnd:o,points:c}},d.prototype._getBeta=function(){return null},d.prototype.dblp=function(o){for(var c=this,r=0;r<o;r++)c=c.dbl();return c}},{"../utils":419,"bn.js":420}],407:[function(g,C,i){var e=g("../utils"),A=g("bn.js"),s=g("inherits"),l=g("./base"),n=e.assert;function a(o){this.twisted=(0|o.a)!=1,this.mOneA=this.twisted&&(0|o.a)==-1,this.extended=this.mOneA,l.call(this,"edwards",o),this.a=new A(o.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new A(o.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new A(o.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),n(!this.twisted||this.c.fromRed().cmpn(1)===0),this.oneC=(0|o.c)==1}function d(o,c,r,h,b){l.BasePoint.call(this,o,"projective"),c===null&&r===null&&h===null?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new A(c,16),this.y=new A(r,16),this.z=h?new A(h,16):this.curve.one,this.t=b&&new A(b,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}s(a,l),C.exports=a,a.prototype._mulA=function(o){return this.mOneA?o.redNeg():this.a.redMul(o)},a.prototype._mulC=function(o){return this.oneC?o:this.c.redMul(o)},a.prototype.jpoint=function(o,c,r,h){return this.point(o,c,r,h)},a.prototype.pointFromX=function(o,c){(o=new A(o,16)).red||(o=o.toRed(this.red));var r=o.redSqr(),h=this.c2.redSub(this.a.redMul(r)),b=this.one.redSub(this.c2.redMul(this.d).redMul(r)),u=h.redMul(b.redInvm()),m=u.redSqrt();if(m.redSqr().redSub(u).cmp(this.zero)!==0)throw new Error("invalid point");var Z=m.fromRed().isOdd();return(c&&!Z||!c&&Z)&&(m=m.redNeg()),this.point(o,m)},a.prototype.pointFromY=function(o,c){(o=new A(o,16)).red||(o=o.toRed(this.red));var r=o.redSqr(),h=r.redSub(this.c2),b=r.redMul(this.d).redMul(this.c2).redSub(this.a),u=h.redMul(b.redInvm());if(u.cmp(this.zero)===0){if(c)throw new Error("invalid point");return this.point(this.zero,o)}var m=u.redSqrt();if(m.redSqr().redSub(u).cmp(this.zero)!==0)throw new Error("invalid point");return m.fromRed().isOdd()!==c&&(m=m.redNeg()),this.point(m,o)},a.prototype.validate=function(o){if(o.isInfinity())return!0;o.normalize();var c=o.x.redSqr(),r=o.y.redSqr(),h=c.redMul(this.a).redAdd(r),b=this.c2.redMul(this.one.redAdd(this.d.redMul(c).redMul(r)));return h.cmp(b)===0},s(d,l.BasePoint),a.prototype.pointFromJSON=function(o){return d.fromJSON(this,o)},a.prototype.point=function(o,c,r,h){return new d(this,o,c,r,h)},d.fromJSON=function(o,c){return new d(o,c[0],c[1],c[2])},d.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" y: "+this.y.fromRed().toString(16,2)+" z: "+this.z.fromRed().toString(16,2)+">"},d.prototype.isInfinity=function(){return this.x.cmpn(0)===0&&(this.y.cmp(this.z)===0||this.zOne&&this.y.cmp(this.curve.c)===0)},d.prototype._extDbl=function(){var o=this.x.redSqr(),c=this.y.redSqr(),r=this.z.redSqr();r=r.redIAdd(r);var h=this.curve._mulA(o),b=this.x.redAdd(this.y).redSqr().redISub(o).redISub(c),u=h.redAdd(c),m=u.redSub(r),Z=h.redSub(c),p=b.redMul(m),Y=u.redMul(Z),R=b.redMul(Z),X=m.redMul(u);return this.curve.point(p,Y,X,R)},d.prototype._projDbl=function(){var o,c,r,h,b,u,m=this.x.redAdd(this.y).redSqr(),Z=this.x.redSqr(),p=this.y.redSqr();if(this.curve.twisted){var Y=(h=this.curve._mulA(Z)).redAdd(p);this.zOne?(o=m.redSub(Z).redSub(p).redMul(Y.redSub(this.curve.two)),c=Y.redMul(h.redSub(p)),r=Y.redSqr().redSub(Y).redSub(Y)):(b=this.z.redSqr(),u=Y.redSub(b).redISub(b),o=m.redSub(Z).redISub(p).redMul(u),c=Y.redMul(h.redSub(p)),r=Y.redMul(u))}else h=Z.redAdd(p),b=this.curve._mulC(this.z).redSqr(),u=h.redSub(b).redSub(b),o=this.curve._mulC(m.redISub(h)).redMul(u),c=this.curve._mulC(h).redMul(Z.redISub(p)),r=h.redMul(u);return this.curve.point(o,c,r)},d.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},d.prototype._extAdd=function(o){var c=this.y.redSub(this.x).redMul(o.y.redSub(o.x)),r=this.y.redAdd(this.x).redMul(o.y.redAdd(o.x)),h=this.t.redMul(this.curve.dd).redMul(o.t),b=this.z.redMul(o.z.redAdd(o.z)),u=r.redSub(c),m=b.redSub(h),Z=b.redAdd(h),p=r.redAdd(c),Y=u.redMul(m),R=Z.redMul(p),X=u.redMul(p),H=m.redMul(Z);return this.curve.point(Y,R,H,X)},d.prototype._projAdd=function(o){var c,r,h=this.z.redMul(o.z),b=h.redSqr(),u=this.x.redMul(o.x),m=this.y.redMul(o.y),Z=this.curve.d.redMul(u).redMul(m),p=b.redSub(Z),Y=b.redAdd(Z),R=this.x.redAdd(this.y).redMul(o.x.redAdd(o.y)).redISub(u).redISub(m),X=h.redMul(p).redMul(R);return this.curve.twisted?(c=h.redMul(Y).redMul(m.redSub(this.curve._mulA(u))),r=p.redMul(Y)):(c=h.redMul(Y).redMul(m.redSub(u)),r=this.curve._mulC(p).redMul(Y)),this.curve.point(X,c,r)},d.prototype.add=function(o){return this.isInfinity()?o:o.isInfinity()?this:this.curve.extended?this._extAdd(o):this._projAdd(o)},d.prototype.mul=function(o){return this._hasDoubles(o)?this.curve._fixedNafMul(this,o):this.curve._wnafMul(this,o)},d.prototype.mulAdd=function(o,c,r){return this.curve._wnafMulAdd(1,[this,c],[o,r],2,!1)},d.prototype.jmulAdd=function(o,c,r){return this.curve._wnafMulAdd(1,[this,c],[o,r],2,!0)},d.prototype.normalize=function(){if(this.zOne)return this;var o=this.z.redInvm();return this.x=this.x.redMul(o),this.y=this.y.redMul(o),this.t&&(this.t=this.t.redMul(o)),this.z=this.curve.one,this.zOne=!0,this},d.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},d.prototype.getX=function(){return this.normalize(),this.x.fromRed()},d.prototype.getY=function(){return this.normalize(),this.y.fromRed()},d.prototype.eq=function(o){return this===o||this.getX().cmp(o.getX())===0&&this.getY().cmp(o.getY())===0},d.prototype.eqXToP=function(o){var c=o.toRed(this.curve.red).redMul(this.z);if(this.x.cmp(c)===0)return!0;for(var r=o.clone(),h=this.curve.redN.redMul(this.z);;){if(r.iadd(this.curve.n),r.cmp(this.curve.p)>=0)return!1;if(c.redIAdd(h),this.x.cmp(c)===0)return!0}},d.prototype.toP=d.prototype.normalize,d.prototype.mixedAdd=d.prototype.add},{"../utils":419,"./base":406,"bn.js":420,inherits:440}],408:[function(g,C,i){var e=i;e.base=g("./base"),e.short=g("./short"),e.mont=g("./mont"),e.edwards=g("./edwards")},{"./base":406,"./edwards":407,"./mont":409,"./short":410}],409:[function(g,C,i){var e=g("bn.js"),A=g("inherits"),s=g("./base"),l=g("../utils");function n(d){s.call(this,"mont",d),this.a=new e(d.a,16).toRed(this.red),this.b=new e(d.b,16).toRed(this.red),this.i4=new e(4).toRed(this.red).redInvm(),this.two=new e(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function a(d,o,c){s.BasePoint.call(this,d,"projective"),o===null&&c===null?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new e(o,16),this.z=new e(c,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}A(n,s),C.exports=n,n.prototype.validate=function(d){var o=d.normalize().x,c=o.redSqr(),r=c.redMul(o).redAdd(c.redMul(this.a)).redAdd(o);return r.redSqrt().redSqr().cmp(r)===0},A(a,s.BasePoint),n.prototype.decodePoint=function(d,o){return this.point(l.toArray(d,o),1)},n.prototype.point=function(d,o){return new a(this,d,o)},n.prototype.pointFromJSON=function(d){return a.fromJSON(this,d)},a.prototype.precompute=function(){},a.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},a.fromJSON=function(d,o){return new a(d,o[0],o[1]||d.one)},a.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" z: "+this.z.fromRed().toString(16,2)+">"},a.prototype.isInfinity=function(){return this.z.cmpn(0)===0},a.prototype.dbl=function(){var d=this.x.redAdd(this.z).redSqr(),o=this.x.redSub(this.z).redSqr(),c=d.redSub(o),r=d.redMul(o),h=c.redMul(o.redAdd(this.curve.a24.redMul(c)));return this.curve.point(r,h)},a.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},a.prototype.diffAdd=function(d,o){var c=this.x.redAdd(this.z),r=this.x.redSub(this.z),h=d.x.redAdd(d.z),b=d.x.redSub(d.z).redMul(c),u=h.redMul(r),m=o.z.redMul(b.redAdd(u).redSqr()),Z=o.x.redMul(b.redISub(u).redSqr());return this.curve.point(m,Z)},a.prototype.mul=function(d){for(var o=d.clone(),c=this,r=this.curve.point(null,null),h=[];o.cmpn(0)!==0;o.iushrn(1))h.push(o.andln(1));for(var b=h.length-1;b>=0;b--)h[b]===0?(c=c.diffAdd(r,this),r=r.dbl()):(r=c.diffAdd(r,this),c=c.dbl());return r},a.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},a.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")},a.prototype.eq=function(d){return this.getX().cmp(d.getX())===0},a.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},a.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},{"../utils":419,"./base":406,"bn.js":420,inherits:440}],410:[function(g,C,i){var e=g("../utils"),A=g("bn.js"),s=g("inherits"),l=g("./base"),n=e.assert;function a(c){l.call(this,"short",c),this.a=new A(c.a,16).toRed(this.red),this.b=new A(c.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=this.a.fromRed().cmpn(0)===0,this.threeA=this.a.fromRed().sub(this.p).cmpn(-3)===0,this.endo=this._getEndomorphism(c),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}function d(c,r,h,b){l.BasePoint.call(this,c,"affine"),r===null&&h===null?(this.x=null,this.y=null,this.inf=!0):(this.x=new A(r,16),this.y=new A(h,16),b&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}function o(c,r,h,b){l.BasePoint.call(this,c,"jacobian"),r===null&&h===null&&b===null?(this.x=this.curve.one,this.y=this.curve.one,this.z=new A(0)):(this.x=new A(r,16),this.y=new A(h,16),this.z=new A(b,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}s(a,l),C.exports=a,a.prototype._getEndomorphism=function(c){if(this.zeroA&&this.g&&this.n&&this.p.modn(3)===1){var r,h;if(c.beta)r=new A(c.beta,16).toRed(this.red);else{var b=this._getEndoRoots(this.p);r=(r=b[0].cmp(b[1])<0?b[0]:b[1]).toRed(this.red)}if(c.lambda)h=new A(c.lambda,16);else{var u=this._getEndoRoots(this.n);this.g.mul(u[0]).x.cmp(this.g.x.redMul(r))===0?h=u[0]:(h=u[1],n(this.g.mul(h).x.cmp(this.g.x.redMul(r))===0))}return{beta:r,lambda:h,basis:c.basis?c.basis.map(function(m){return{a:new A(m.a,16),b:new A(m.b,16)}}):this._getEndoBasis(h)}}},a.prototype._getEndoRoots=function(c){var r=c===this.p?this.red:A.mont(c),h=new A(2).toRed(r).redInvm(),b=h.redNeg(),u=new A(3).toRed(r).redNeg().redSqrt().redMul(h);return[b.redAdd(u).fromRed(),b.redSub(u).fromRed()]},a.prototype._getEndoBasis=function(c){for(var r,h,b,u,m,Z,p,Y,R,X=this.n.ushrn(Math.floor(this.n.bitLength()/2)),H=c,S=this.n.clone(),z=new A(1),v=new A(0),K=new A(0),V=new A(1),N=0;H.cmpn(0)!==0;){var B=S.div(H);Y=S.sub(B.mul(H)),R=K.sub(B.mul(z));var G=V.sub(B.mul(v));if(!b&&Y.cmp(X)<0)r=p.neg(),h=z,b=Y.neg(),u=R;else if(b&&++N==2)break;p=Y,S=H,H=Y,K=z,z=R,V=v,v=G}m=Y.neg(),Z=R;var w=b.sqr().add(u.sqr());return m.sqr().add(Z.sqr()).cmp(w)>=0&&(m=r,Z=h),b.negative&&(b=b.neg(),u=u.neg()),m.negative&&(m=m.neg(),Z=Z.neg()),[{a:b,b:u},{a:m,b:Z}]},a.prototype._endoSplit=function(c){var r=this.endo.basis,h=r[0],b=r[1],u=b.b.mul(c).divRound(this.n),m=h.b.neg().mul(c).divRound(this.n),Z=u.mul(h.a),p=m.mul(b.a),Y=u.mul(h.b),R=m.mul(b.b);return{k1:c.sub(Z).sub(p),k2:Y.add(R).neg()}},a.prototype.pointFromX=function(c,r){(c=new A(c,16)).red||(c=c.toRed(this.red));var h=c.redSqr().redMul(c).redIAdd(c.redMul(this.a)).redIAdd(this.b),b=h.redSqrt();if(b.redSqr().redSub(h).cmp(this.zero)!==0)throw new Error("invalid point");var u=b.fromRed().isOdd();return(r&&!u||!r&&u)&&(b=b.redNeg()),this.point(c,b)},a.prototype.validate=function(c){if(c.inf)return!0;var r=c.x,h=c.y,b=this.a.redMul(r),u=r.redSqr().redMul(r).redIAdd(b).redIAdd(this.b);return h.redSqr().redISub(u).cmpn(0)===0},a.prototype._endoWnafMulAdd=function(c,r,h){for(var b=this._endoWnafT1,u=this._endoWnafT2,m=0;m<c.length;m++){var Z=this._endoSplit(r[m]),p=c[m],Y=p._getBeta();Z.k1.negative&&(Z.k1.ineg(),p=p.neg(!0)),Z.k2.negative&&(Z.k2.ineg(),Y=Y.neg(!0)),b[2*m]=p,b[2*m+1]=Y,u[2*m]=Z.k1,u[2*m+1]=Z.k2}for(var R=this._wnafMulAdd(1,b,u,2*m,h),X=0;X<2*m;X++)b[X]=null,u[X]=null;return R},s(d,l.BasePoint),a.prototype.point=function(c,r,h){return new d(this,c,r,h)},a.prototype.pointFromJSON=function(c,r){return d.fromJSON(this,c,r)},d.prototype._getBeta=function(){if(this.curve.endo){var c=this.precomputed;if(c&&c.beta)return c.beta;var r=this.curve.point(this.x.redMul(this.curve.endo.beta),this.y);if(c){var h=this.curve,b=function(u){return h.point(u.x.redMul(h.endo.beta),u.y)};c.beta=r,r.precomputed={beta:null,naf:c.naf&&{wnd:c.naf.wnd,points:c.naf.points.map(b)},doubles:c.doubles&&{step:c.doubles.step,points:c.doubles.points.map(b)}}}return r}},d.prototype.toJSON=function(){return this.precomputed?[this.x,this.y,this.precomputed&&{doubles:this.precomputed.doubles&&{step:this.precomputed.doubles.step,points:this.precomputed.doubles.points.slice(1)},naf:this.precomputed.naf&&{wnd:this.precomputed.naf.wnd,points:this.precomputed.naf.points.slice(1)}}]:[this.x,this.y]},d.fromJSON=function(c,r,h){typeof r=="string"&&(r=JSON.parse(r));var b=c.point(r[0],r[1],h);if(!r[2])return b;function u(Z){return c.point(Z[0],Z[1],h)}var m=r[2];return b.precomputed={beta:null,doubles:m.doubles&&{step:m.doubles.step,points:[b].concat(m.doubles.points.map(u))},naf:m.naf&&{wnd:m.naf.wnd,points:[b].concat(m.naf.points.map(u))}},b},d.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" y: "+this.y.fromRed().toString(16,2)+">"},d.prototype.isInfinity=function(){return this.inf},d.prototype.add=function(c){if(this.inf)return c;if(c.inf)return this;if(this.eq(c))return this.dbl();if(this.neg().eq(c))return this.curve.point(null,null);if(this.x.cmp(c.x)===0)return this.curve.point(null,null);var r=this.y.redSub(c.y);r.cmpn(0)!==0&&(r=r.redMul(this.x.redSub(c.x).redInvm()));var h=r.redSqr().redISub(this.x).redISub(c.x),b=r.redMul(this.x.redSub(h)).redISub(this.y);return this.curve.point(h,b)},d.prototype.dbl=function(){if(this.inf)return this;var c=this.y.redAdd(this.y);if(c.cmpn(0)===0)return this.curve.point(null,null);var r=this.curve.a,h=this.x.redSqr(),b=c.redInvm(),u=h.redAdd(h).redIAdd(h).redIAdd(r).redMul(b),m=u.redSqr().redISub(this.x.redAdd(this.x)),Z=u.redMul(this.x.redSub(m)).redISub(this.y);return this.curve.point(m,Z)},d.prototype.getX=function(){return this.x.fromRed()},d.prototype.getY=function(){return this.y.fromRed()},d.prototype.mul=function(c){return c=new A(c,16),this.isInfinity()?this:this._hasDoubles(c)?this.curve._fixedNafMul(this,c):this.curve.endo?this.curve._endoWnafMulAdd([this],[c]):this.curve._wnafMul(this,c)},d.prototype.mulAdd=function(c,r,h){var b=[this,r],u=[c,h];return this.curve.endo?this.curve._endoWnafMulAdd(b,u):this.curve._wnafMulAdd(1,b,u,2)},d.prototype.jmulAdd=function(c,r,h){var b=[this,r],u=[c,h];return this.curve.endo?this.curve._endoWnafMulAdd(b,u,!0):this.curve._wnafMulAdd(1,b,u,2,!0)},d.prototype.eq=function(c){return this===c||this.inf===c.inf&&(this.inf||this.x.cmp(c.x)===0&&this.y.cmp(c.y)===0)},d.prototype.neg=function(c){if(this.inf)return this;var r=this.curve.point(this.x,this.y.redNeg());if(c&&this.precomputed){var h=this.precomputed,b=function(u){return u.neg()};r.precomputed={naf:h.naf&&{wnd:h.naf.wnd,points:h.naf.points.map(b)},doubles:h.doubles&&{step:h.doubles.step,points:h.doubles.points.map(b)}}}return r},d.prototype.toJ=function(){return this.inf?this.curve.jpoint(null,null,null):this.curve.jpoint(this.x,this.y,this.curve.one)},s(o,l.BasePoint),a.prototype.jpoint=function(c,r,h){return new o(this,c,r,h)},o.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var c=this.z.redInvm(),r=c.redSqr(),h=this.x.redMul(r),b=this.y.redMul(r).redMul(c);return this.curve.point(h,b)},o.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},o.prototype.add=function(c){if(this.isInfinity())return c;if(c.isInfinity())return this;var r=c.z.redSqr(),h=this.z.redSqr(),b=this.x.redMul(r),u=c.x.redMul(h),m=this.y.redMul(r.redMul(c.z)),Z=c.y.redMul(h.redMul(this.z)),p=b.redSub(u),Y=m.redSub(Z);if(p.cmpn(0)===0)return Y.cmpn(0)!==0?this.curve.jpoint(null,null,null):this.dbl();var R=p.redSqr(),X=R.redMul(p),H=b.redMul(R),S=Y.redSqr().redIAdd(X).redISub(H).redISub(H),z=Y.redMul(H.redISub(S)).redISub(m.redMul(X)),v=this.z.redMul(c.z).redMul(p);return this.curve.jpoint(S,z,v)},o.prototype.mixedAdd=function(c){if(this.isInfinity())return c.toJ();if(c.isInfinity())return this;var r=this.z.redSqr(),h=this.x,b=c.x.redMul(r),u=this.y,m=c.y.redMul(r).redMul(this.z),Z=h.redSub(b),p=u.redSub(m);if(Z.cmpn(0)===0)return p.cmpn(0)!==0?this.curve.jpoint(null,null,null):this.dbl();var Y=Z.redSqr(),R=Y.redMul(Z),X=h.redMul(Y),H=p.redSqr().redIAdd(R).redISub(X).redISub(X),S=p.redMul(X.redISub(H)).redISub(u.redMul(R)),z=this.z.redMul(Z);return this.curve.jpoint(H,S,z)},o.prototype.dblp=function(c){if(c===0)return this;if(this.isInfinity())return this;if(!c)return this.dbl();var r;if(this.curve.zeroA||this.curve.threeA){var h=this;for(r=0;r<c;r++)h=h.dbl();return h}var b=this.curve.a,u=this.curve.tinv,m=this.x,Z=this.y,p=this.z,Y=p.redSqr().redSqr(),R=Z.redAdd(Z);for(r=0;r<c;r++){var X=m.redSqr(),H=R.redSqr(),S=H.redSqr(),z=X.redAdd(X).redIAdd(X).redIAdd(b.redMul(Y)),v=m.redMul(H),K=z.redSqr().redISub(v.redAdd(v)),V=v.redISub(K),N=z.redMul(V);N=N.redIAdd(N).redISub(S);var B=R.redMul(p);r+1<c&&(Y=Y.redMul(S)),m=K,p=B,R=N}return this.curve.jpoint(m,R.redMul(u),p)},o.prototype.dbl=function(){return this.isInfinity()?this:this.curve.zeroA?this._zeroDbl():this.curve.threeA?this._threeDbl():this._dbl()},o.prototype._zeroDbl=function(){var c,r,h;if(this.zOne){var b=this.x.redSqr(),u=this.y.redSqr(),m=u.redSqr(),Z=this.x.redAdd(u).redSqr().redISub(b).redISub(m);Z=Z.redIAdd(Z);var p=b.redAdd(b).redIAdd(b),Y=p.redSqr().redISub(Z).redISub(Z),R=m.redIAdd(m);R=(R=R.redIAdd(R)).redIAdd(R),c=Y,r=p.redMul(Z.redISub(Y)).redISub(R),h=this.y.redAdd(this.y)}else{var X=this.x.redSqr(),H=this.y.redSqr(),S=H.redSqr(),z=this.x.redAdd(H).redSqr().redISub(X).redISub(S);z=z.redIAdd(z);var v=X.redAdd(X).redIAdd(X),K=v.redSqr(),V=S.redIAdd(S);V=(V=V.redIAdd(V)).redIAdd(V),c=K.redISub(z).redISub(z),r=v.redMul(z.redISub(c)).redISub(V),h=(h=this.y.redMul(this.z)).redIAdd(h)}return this.curve.jpoint(c,r,h)},o.prototype._threeDbl=function(){var c,r,h;if(this.zOne){var b=this.x.redSqr(),u=this.y.redSqr(),m=u.redSqr(),Z=this.x.redAdd(u).redSqr().redISub(b).redISub(m);Z=Z.redIAdd(Z);var p=b.redAdd(b).redIAdd(b).redIAdd(this.curve.a),Y=p.redSqr().redISub(Z).redISub(Z);c=Y;var R=m.redIAdd(m);R=(R=R.redIAdd(R)).redIAdd(R),r=p.redMul(Z.redISub(Y)).redISub(R),h=this.y.redAdd(this.y)}else{var X=this.z.redSqr(),H=this.y.redSqr(),S=this.x.redMul(H),z=this.x.redSub(X).redMul(this.x.redAdd(X));z=z.redAdd(z).redIAdd(z);var v=S.redIAdd(S),K=(v=v.redIAdd(v)).redAdd(v);c=z.redSqr().redISub(K),h=this.y.redAdd(this.z).redSqr().redISub(H).redISub(X);var V=H.redSqr();V=(V=(V=V.redIAdd(V)).redIAdd(V)).redIAdd(V),r=z.redMul(v.redISub(c)).redISub(V)}return this.curve.jpoint(c,r,h)},o.prototype._dbl=function(){var c=this.curve.a,r=this.x,h=this.y,b=this.z,u=b.redSqr().redSqr(),m=r.redSqr(),Z=h.redSqr(),p=m.redAdd(m).redIAdd(m).redIAdd(c.redMul(u)),Y=r.redAdd(r),R=(Y=Y.redIAdd(Y)).redMul(Z),X=p.redSqr().redISub(R.redAdd(R)),H=R.redISub(X),S=Z.redSqr();S=(S=(S=S.redIAdd(S)).redIAdd(S)).redIAdd(S);var z=p.redMul(H).redISub(S),v=h.redAdd(h).redMul(b);return this.curve.jpoint(X,z,v)},o.prototype.trpl=function(){if(!this.curve.zeroA)return this.dbl().add(this);var c=this.x.redSqr(),r=this.y.redSqr(),h=this.z.redSqr(),b=r.redSqr(),u=c.redAdd(c).redIAdd(c),m=u.redSqr(),Z=this.x.redAdd(r).redSqr().redISub(c).redISub(b),p=(Z=(Z=(Z=Z.redIAdd(Z)).redAdd(Z).redIAdd(Z)).redISub(m)).redSqr(),Y=b.redIAdd(b);Y=(Y=(Y=Y.redIAdd(Y)).redIAdd(Y)).redIAdd(Y);var R=u.redIAdd(Z).redSqr().redISub(m).redISub(p).redISub(Y),X=r.redMul(R);X=(X=X.redIAdd(X)).redIAdd(X);var H=this.x.redMul(p).redISub(X);H=(H=H.redIAdd(H)).redIAdd(H);var S=this.y.redMul(R.redMul(Y.redISub(R)).redISub(Z.redMul(p)));S=(S=(S=S.redIAdd(S)).redIAdd(S)).redIAdd(S);var z=this.z.redAdd(Z).redSqr().redISub(h).redISub(p);return this.curve.jpoint(H,S,z)},o.prototype.mul=function(c,r){return c=new A(c,r),this.curve._wnafMul(this,c)},o.prototype.eq=function(c){if(c.type==="affine")return this.eq(c.toJ());if(this===c)return!0;var r=this.z.redSqr(),h=c.z.redSqr();if(this.x.redMul(h).redISub(c.x.redMul(r)).cmpn(0)!==0)return!1;var b=r.redMul(this.z),u=h.redMul(c.z);return this.y.redMul(u).redISub(c.y.redMul(b)).cmpn(0)===0},o.prototype.eqXToP=function(c){var r=this.z.redSqr(),h=c.toRed(this.curve.red).redMul(r);if(this.x.cmp(h)===0)return!0;for(var b=c.clone(),u=this.curve.redN.redMul(r);;){if(b.iadd(this.curve.n),b.cmp(this.curve.p)>=0)return!1;if(h.redIAdd(u),this.x.cmp(h)===0)return!0}},o.prototype.inspect=function(){return this.isInfinity()?"<EC JPoint Infinity>":"<EC JPoint x: "+this.x.toString(16,2)+" y: "+this.y.toString(16,2)+" z: "+this.z.toString(16,2)+">"},o.prototype.isInfinity=function(){return this.z.cmpn(0)===0}},{"../utils":419,"./base":406,"bn.js":420,inherits:440}],411:[function(g,C,i){var e,A=i,s=g("hash.js"),l=g("./curve"),n=g("./utils").assert;function a(o){o.type==="short"?this.curve=new l.short(o):o.type==="edwards"?this.curve=new l.edwards(o):this.curve=new l.mont(o),this.g=this.curve.g,this.n=this.curve.n,this.hash=o.hash,n(this.g.validate(),"Invalid curve"),n(this.g.mul(this.n).isInfinity(),"Invalid curve, G*N != O")}function d(o,c){Object.defineProperty(A,o,{configurable:!0,enumerable:!0,get:function(){var r=new a(c);return Object.defineProperty(A,o,{configurable:!0,enumerable:!0,value:r}),r}})}A.PresetCurve=a,d("p192",{type:"short",prime:"p192",p:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",a:"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",b:"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",n:"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",hash:s.sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]}),d("p224",{type:"short",prime:"p224",p:"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",a:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",b:"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",n:"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",hash:s.sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]}),d("p256",{type:"short",prime:null,p:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",a:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",b:"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",n:"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",hash:s.sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]}),d("p384",{type:"short",prime:null,p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff",a:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc",b:"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef",n:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973",hash:s.sha384,gRed:!1,g:["aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7","3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f"]}),d("p521",{type:"short",prime:null,p:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff",a:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc",b:"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00",n:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409",hash:s.sha512,gRed:!1,g:["000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66","00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650"]}),d("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"1",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:s.sha256,gRed:!1,g:["9"]}),d("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:s.sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]});try{e=g("./precomputed/secp256k1")}catch{e=void 0}d("secp256k1",{type:"short",prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",hash:s.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",e]})},{"./curve":408,"./precomputed/secp256k1":418,"./utils":419,"hash.js":426}],412:[function(g,C,i){var e=g("bn.js"),A=g("hmac-drbg"),s=g("../utils"),l=g("../curves"),n=g("brorand"),a=s.assert,d=g("./key"),o=g("./signature");function c(r){if(!(this instanceof c))return new c(r);typeof r=="string"&&(a(Object.prototype.hasOwnProperty.call(l,r),"Unknown curve "+r),r=l[r]),r instanceof l.PresetCurve&&(r={curve:r}),this.curve=r.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=r.curve.g,this.g.precompute(r.curve.n.bitLength()+1),this.hash=r.hash||r.curve.hash}C.exports=c,c.prototype.keyPair=function(r){return new d(this,r)},c.prototype.keyFromPrivate=function(r,h){return d.fromPrivate(this,r,h)},c.prototype.keyFromPublic=function(r,h){return d.fromPublic(this,r,h)},c.prototype.genKeyPair=function(r){r||(r={});for(var h=new A({hash:this.hash,pers:r.pers,persEnc:r.persEnc||"utf8",entropy:r.entropy||n(this.hash.hmacStrength),entropyEnc:r.entropy&&r.entropyEnc||"utf8",nonce:this.n.toArray()}),b=this.n.byteLength(),u=this.n.sub(new e(2));;){var m=new e(h.generate(b));if(!(m.cmp(u)>0))return m.iaddn(1),this.keyFromPrivate(m)}},c.prototype._truncateToN=function(r,h){var b=8*r.byteLength()-this.n.bitLength();return b>0&&(r=r.ushrn(b)),!h&&r.cmp(this.n)>=0?r.sub(this.n):r},c.prototype.sign=function(r,h,b,u){typeof b=="object"&&(u=b,b=null),u||(u={}),h=this.keyFromPrivate(h,b),r=this._truncateToN(new e(r,16));for(var m=this.n.byteLength(),Z=h.getPrivate().toArray("be",m),p=r.toArray("be",m),Y=new A({hash:this.hash,entropy:Z,nonce:p,pers:u.pers,persEnc:u.persEnc||"utf8"}),R=this.n.sub(new e(1)),X=0;;X++){var H=u.k?u.k(X):new e(Y.generate(this.n.byteLength()));if(!((H=this._truncateToN(H,!0)).cmpn(1)<=0||H.cmp(R)>=0)){var S=this.g.mul(H);if(!S.isInfinity()){var z=S.getX(),v=z.umod(this.n);if(v.cmpn(0)!==0){var K=H.invm(this.n).mul(v.mul(h.getPrivate()).iadd(r));if((K=K.umod(this.n)).cmpn(0)!==0){var V=(S.getY().isOdd()?1:0)|(z.cmp(v)!==0?2:0);return u.canonical&&K.cmp(this.nh)>0&&(K=this.n.sub(K),V^=1),new o({r:v,s:K,recoveryParam:V})}}}}}},c.prototype.verify=function(r,h,b,u){r=this._truncateToN(new e(r,16)),b=this.keyFromPublic(b,u);var m=(h=new o(h,"hex")).r,Z=h.s;if(m.cmpn(1)<0||m.cmp(this.n)>=0||Z.cmpn(1)<0||Z.cmp(this.n)>=0)return!1;var p,Y=Z.invm(this.n),R=Y.mul(r).umod(this.n),X=Y.mul(m).umod(this.n);return this.curve._maxwellTrick?!(p=this.g.jmulAdd(R,b.getPublic(),X)).isInfinity()&&p.eqXToP(m):!(p=this.g.mulAdd(R,b.getPublic(),X)).isInfinity()&&p.getX().umod(this.n).cmp(m)===0},c.prototype.recoverPubKey=function(r,h,b,u){a((3&b)===b,"The recovery param is more than two bits"),h=new o(h,u);var m=this.n,Z=new e(r),p=h.r,Y=h.s,R=1&b,X=b>>1;if(p.cmp(this.curve.p.umod(this.curve.n))>=0&&X)throw new Error("Unable to find sencond key candinate");p=X?this.curve.pointFromX(p.add(this.curve.n),R):this.curve.pointFromX(p,R);var H=h.r.invm(m),S=m.sub(Z).mul(H).umod(m),z=Y.mul(H).umod(m);return this.g.mulAdd(S,p,z)},c.prototype.getKeyRecoveryParam=function(r,h,b,u){if((h=new o(h,u)).recoveryParam!==null)return h.recoveryParam;for(var m=0;m<4;m++){var Z;try{Z=this.recoverPubKey(r,h,m)}catch{continue}if(Z.eq(b))return m}throw new Error("Unable to find valid recovery factor")}},{"../curves":411,"../utils":419,"./key":413,"./signature":414,"bn.js":420,brorand:187,"hmac-drbg":438}],413:[function(g,C,i){var e=g("bn.js"),A=g("../utils").assert;function s(l,n){this.ec=l,this.priv=null,this.pub=null,n.priv&&this._importPrivate(n.priv,n.privEnc),n.pub&&this._importPublic(n.pub,n.pubEnc)}C.exports=s,s.fromPublic=function(l,n,a){return n instanceof s?n:new s(l,{pub:n,pubEnc:a})},s.fromPrivate=function(l,n,a){return n instanceof s?n:new s(l,{priv:n,privEnc:a})},s.prototype.validate=function(){var l=this.getPublic();return l.isInfinity()?{result:!1,reason:"Invalid public key"}:l.validate()?l.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:"Public key * N != O"}:{result:!1,reason:"Public key is not a point"}},s.prototype.getPublic=function(l,n){return typeof l=="string"&&(n=l,l=null),this.pub||(this.pub=this.ec.g.mul(this.priv)),n?this.pub.encode(n,l):this.pub},s.prototype.getPrivate=function(l){return l==="hex"?this.priv.toString(16,2):this.priv},s.prototype._importPrivate=function(l,n){this.priv=new e(l,n||16),this.priv=this.priv.umod(this.ec.curve.n)},s.prototype._importPublic=function(l,n){if(l.x||l.y)return this.ec.curve.type==="mont"?A(l.x,"Need x coordinate"):this.ec.curve.type!=="short"&&this.ec.curve.type!=="edwards"||A(l.x&&l.y,"Need both x and y coordinate"),void(this.pub=this.ec.curve.point(l.x,l.y));this.pub=this.ec.curve.decodePoint(l,n)},s.prototype.derive=function(l){return l.validate()||A(l.validate(),"public point not validated"),l.mul(this.priv).getX()},s.prototype.sign=function(l,n,a){return this.ec.sign(l,this,n,a)},s.prototype.verify=function(l,n){return this.ec.verify(l,n,this)},s.prototype.inspect=function(){return"<Key priv: "+(this.priv&&this.priv.toString(16,2))+" pub: "+(this.pub&&this.pub.inspect())+" >"}},{"../utils":419,"bn.js":420}],414:[function(g,C,i){var e=g("bn.js"),A=g("../utils"),s=A.assert;function l(c,r){if(c instanceof l)return c;this._importDER(c,r)||(s(c.r&&c.s,"Signature without r or s"),this.r=new e(c.r,16),this.s=new e(c.s,16),c.recoveryParam===void 0?this.recoveryParam=null:this.recoveryParam=c.recoveryParam)}function n(){this.place=0}function a(c,r){var h=c[r.place++];if(!(128&h))return h;var b=15&h;if(b===0||b>4)return!1;for(var u=0,m=0,Z=r.place;m<b;m++,Z++)u<<=8,u|=c[Z],u>>>=0;return!(u<=127)&&(r.place=Z,u)}function d(c){for(var r=0,h=c.length-1;!c[r]&&!(128&c[r+1])&&r<h;)r++;return r===0?c:c.slice(r)}function o(c,r){if(r<128)c.push(r);else{var h=1+(Math.log(r)/Math.LN2>>>3);for(c.push(128|h);--h;)c.push(r>>>(h<<3)&255);c.push(r)}}C.exports=l,l.prototype._importDER=function(c,r){c=A.toArray(c,r);var h=new n;if(c[h.place++]!==48)return!1;var b=a(c,h);if(b===!1||b+h.place!==c.length||c[h.place++]!==2)return!1;var u=a(c,h);if(u===!1)return!1;var m=c.slice(h.place,u+h.place);if(h.place+=u,c[h.place++]!==2)return!1;var Z=a(c,h);if(Z===!1||c.length!==Z+h.place)return!1;var p=c.slice(h.place,Z+h.place);if(m[0]===0){if(!(128&m[1]))return!1;m=m.slice(1)}if(p[0]===0){if(!(128&p[1]))return!1;p=p.slice(1)}return this.r=new e(m),this.s=new e(p),this.recoveryParam=null,!0},l.prototype.toDER=function(c){var r=this.r.toArray(),h=this.s.toArray();for(128&r[0]&&(r=[0].concat(r)),128&h[0]&&(h=[0].concat(h)),r=d(r),h=d(h);!(h[0]||128&h[1]);)h=h.slice(1);var b=[2];o(b,r.length),(b=b.concat(r)).push(2),o(b,h.length);var u=b.concat(h),m=[48];return o(m,u.length),m=m.concat(u),A.encode(m,c)}},{"../utils":419,"bn.js":420}],415:[function(g,C,i){var e=g("hash.js"),A=g("../curves"),s=g("../utils"),l=s.assert,n=s.parseBytes,a=g("./key"),d=g("./signature");function o(c){if(l(c==="ed25519","only tested with ed25519 so far"),!(this instanceof o))return new o(c);c=A[c].curve,this.curve=c,this.g=c.g,this.g.precompute(c.n.bitLength()+1),this.pointClass=c.point().constructor,this.encodingLength=Math.ceil(c.n.bitLength()/8),this.hash=e.sha512}C.exports=o,o.prototype.sign=function(c,r){c=n(c);var h=this.keyFromSecret(r),b=this.hashInt(h.messagePrefix(),c),u=this.g.mul(b),m=this.encodePoint(u),Z=this.hashInt(m,h.pubBytes(),c).mul(h.priv()),p=b.add(Z).umod(this.curve.n);return this.makeSignature({R:u,S:p,Rencoded:m})},o.prototype.verify=function(c,r,h){c=n(c),r=this.makeSignature(r);var b=this.keyFromPublic(h),u=this.hashInt(r.Rencoded(),b.pubBytes(),c),m=this.g.mul(r.S());return r.R().add(b.pub().mul(u)).eq(m)},o.prototype.hashInt=function(){for(var c=this.hash(),r=0;r<arguments.length;r++)c.update(arguments[r]);return s.intFromLE(c.digest()).umod(this.curve.n)},o.prototype.keyFromPublic=function(c){return a.fromPublic(this,c)},o.prototype.keyFromSecret=function(c){return a.fromSecret(this,c)},o.prototype.makeSignature=function(c){return c instanceof d?c:new d(this,c)},o.prototype.encodePoint=function(c){var r=c.getY().toArray("le",this.encodingLength);return r[this.encodingLength-1]|=c.getX().isOdd()?128:0,r},o.prototype.decodePoint=function(c){var r=(c=s.parseBytes(c)).length-1,h=c.slice(0,r).concat(-129&c[r]),b=(128&c[r])!=0,u=s.intFromLE(h);return this.curve.pointFromY(u,b)},o.prototype.encodeInt=function(c){return c.toArray("le",this.encodingLength)},o.prototype.decodeInt=function(c){return s.intFromLE(c)},o.prototype.isPoint=function(c){return c instanceof this.pointClass}},{"../curves":411,"../utils":419,"./key":416,"./signature":417,"hash.js":426}],416:[function(g,C,i){var e=g("../utils"),A=e.assert,s=e.parseBytes,l=e.cachedProperty;function n(a,d){this.eddsa=a,this._secret=s(d.secret),a.isPoint(d.pub)?this._pub=d.pub:this._pubBytes=s(d.pub)}n.fromPublic=function(a,d){return d instanceof n?d:new n(a,{pub:d})},n.fromSecret=function(a,d){return d instanceof n?d:new n(a,{secret:d})},n.prototype.secret=function(){return this._secret},l(n,"pubBytes",function(){return this.eddsa.encodePoint(this.pub())}),l(n,"pub",function(){return this._pubBytes?this.eddsa.decodePoint(this._pubBytes):this.eddsa.g.mul(this.priv())}),l(n,"privBytes",function(){var a=this.eddsa,d=this.hash(),o=a.encodingLength-1,c=d.slice(0,a.encodingLength);return c[0]&=248,c[o]&=127,c[o]|=64,c}),l(n,"priv",function(){return this.eddsa.decodeInt(this.privBytes())}),l(n,"hash",function(){return this.eddsa.hash().update(this.secret()).digest()}),l(n,"messagePrefix",function(){return this.hash().slice(this.eddsa.encodingLength)}),n.prototype.sign=function(a){return A(this._secret,"KeyPair can only verify"),this.eddsa.sign(a,this)},n.prototype.verify=function(a,d){return this.eddsa.verify(a,d,this)},n.prototype.getSecret=function(a){return A(this._secret,"KeyPair is public only"),e.encode(this.secret(),a)},n.prototype.getPublic=function(a){return e.encode(this.pubBytes(),a)},C.exports=n},{"../utils":419}],417:[function(g,C,i){var e=g("bn.js"),A=g("../utils"),s=A.assert,l=A.cachedProperty,n=A.parseBytes;function a(d,o){this.eddsa=d,typeof o!="object"&&(o=n(o)),Array.isArray(o)&&(o={R:o.slice(0,d.encodingLength),S:o.slice(d.encodingLength)}),s(o.R&&o.S,"Signature without R or S"),d.isPoint(o.R)&&(this._R=o.R),o.S instanceof e&&(this._S=o.S),this._Rencoded=Array.isArray(o.R)?o.R:o.Rencoded,this._Sencoded=Array.isArray(o.S)?o.S:o.Sencoded}l(a,"S",function(){return this.eddsa.decodeInt(this.Sencoded())}),l(a,"R",function(){return this.eddsa.decodePoint(this.Rencoded())}),l(a,"Rencoded",function(){return this.eddsa.encodePoint(this.R())}),l(a,"Sencoded",function(){return this.eddsa.encodeInt(this.S())}),a.prototype.toBytes=function(){return this.Rencoded().concat(this.Sencoded())},a.prototype.toHex=function(){return A.encode(this.toBytes(),"hex").toUpperCase()},C.exports=a},{"../utils":419,"bn.js":420}],418:[function(g,C,i){C.exports={doubles:{step:4,points:[["e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a","f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821"],["8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508","11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf"],["175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739","d3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695"],["363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640","4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9"],["8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c","4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36"],["723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda","96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f"],["eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa","5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999"],["100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0","cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09"],["e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d","9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d"],["feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d","e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088"],["da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1","9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d"],["53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0","5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8"],["8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047","10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a"],["385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862","283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453"],["6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7","7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160"],["3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd","56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0"],["85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83","7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6"],["948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a","53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589"],["6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8","bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17"],["e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d","4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda"],["e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725","7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd"],["213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754","4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2"],["4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c","17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6"],["fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6","6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f"],["76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39","c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01"],["c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891","893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3"],["d895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b","febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f"],["b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03","2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7"],["e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d","eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78"],["a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070","7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1"],["90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4","e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150"],["8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da","662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82"],["e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11","1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc"],["8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e","efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b"],["e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41","2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51"],["b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef","67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45"],["d68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8","db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120"],["324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d","648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84"],["4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96","35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d"],["9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd","ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d"],["6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5","9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8"],["a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266","40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8"],["7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71","34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac"],["928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac","c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f"],["85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751","1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962"],["ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e","493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907"],["827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241","c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec"],["eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3","be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d"],["e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f","4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414"],["1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19","aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd"],["146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be","b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0"],["fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9","6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811"],["da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2","8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1"],["a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13","7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c"],["174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c","ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73"],["959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba","2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd"],["d2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151","e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405"],["64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073","d99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589"],["8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458","38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e"],["13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b","69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27"],["bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366","d3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1"],["8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa","40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482"],["8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0","620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945"],["dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787","7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573"],["f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e","ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82"]]},naf:{wnd:7,points:[["f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9","388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672"],["2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4","d8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6"],["5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc","6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da"],["acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe","cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37"],["774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb","d984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b"],["f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8","ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81"],["d7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e","581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58"],["defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34","4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77"],["2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c","85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a"],["352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5","321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c"],["2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f","2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67"],["9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714","73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402"],["daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729","a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55"],["c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db","2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482"],["6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4","e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82"],["1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5","b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396"],["605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479","2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49"],["62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d","80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf"],["80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f","1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a"],["7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb","d0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7"],["d528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9","eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933"],["49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963","758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a"],["77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74","958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6"],["f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530","e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37"],["463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b","5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e"],["f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247","cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6"],["caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1","cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476"],["2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120","4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40"],["7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435","91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61"],["754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18","673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683"],["e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8","59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5"],["186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb","3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b"],["df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f","55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417"],["5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143","efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868"],["290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba","e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a"],["af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45","f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6"],["766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a","744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996"],["59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e","c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e"],["f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8","e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d"],["7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c","30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2"],["948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519","e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e"],["7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab","100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437"],["3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca","ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311"],["d3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf","8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4"],["1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610","68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575"],["733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4","f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d"],["15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c","d56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d"],["a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940","edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629"],["e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980","a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06"],["311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3","66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374"],["34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf","9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee"],["f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63","4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1"],["d7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448","fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b"],["32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf","5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661"],["7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5","8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6"],["ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6","8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e"],["16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5","5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d"],["eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99","f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc"],["78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51","f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4"],["494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5","42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c"],["a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5","204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b"],["c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997","4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913"],["841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881","73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154"],["5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5","39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865"],["36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66","d2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc"],["336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726","ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224"],["8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede","6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e"],["1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94","60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6"],["85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31","3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511"],["29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51","b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b"],["a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252","ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2"],["4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5","cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c"],["d24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b","6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3"],["ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4","322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d"],["af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f","6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700"],["e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889","2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4"],["591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246","b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196"],["11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984","998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4"],["3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a","b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257"],["cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030","bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13"],["c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197","6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096"],["c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593","c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38"],["a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef","21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f"],["347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38","60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448"],["da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a","49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a"],["c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111","5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4"],["4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502","7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437"],["3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea","be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7"],["cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26","8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d"],["b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986","39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a"],["d4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e","62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54"],["48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4","25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77"],["dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda","ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517"],["6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859","cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10"],["e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f","f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125"],["eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c","6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e"],["13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942","fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1"],["ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a","1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2"],["b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80","5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423"],["ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d","438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8"],["8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1","cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758"],["52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63","c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375"],["e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352","6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d"],["7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193","ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec"],["5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00","9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0"],["32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58","ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c"],["e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7","d3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4"],["8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8","c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f"],["4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e","67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649"],["3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d","cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826"],["674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b","299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5"],["d32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f","f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87"],["30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6","462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b"],["be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297","62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc"],["93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a","7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c"],["b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c","ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f"],["d5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52","4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a"],["d3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb","bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46"],["463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065","bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f"],["7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917","603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03"],["74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9","cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08"],["30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3","553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8"],["9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57","712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373"],["176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66","ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3"],["75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8","9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8"],["809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721","9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1"],["1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180","4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9"]]}}},{}],419:[function(g,C,i){var e=i,A=g("bn.js"),s=g("minimalistic-assert"),l=g("minimalistic-crypto-utils");e.assert=s,e.toArray=l.toArray,e.zero2=l.zero2,e.toHex=l.toHex,e.encode=l.encode,e.getNAF=function(n,a,d){var o=new Array(Math.max(n.bitLength(),d)+1);o.fill(0);for(var c=1<<a+1,r=n.clone(),h=0;h<o.length;h++){var b,u=r.andln(c-1);r.isOdd()?(b=u>(c>>1)-1?(c>>1)-u:u,r.isubn(b)):b=0,o[h]=b,r.iushrn(1)}return o},e.getJSF=function(n,a){var d=[[],[]];n=n.clone(),a=a.clone();for(var o,c=0,r=0;n.cmpn(-c)>0||a.cmpn(-r)>0;){var h,b,u=n.andln(3)+c&3,m=a.andln(3)+r&3;u===3&&(u=-1),m===3&&(m=-1),h=(1&u)==0?0:(o=n.andln(7)+c&7)!==3&&o!==5||m!==2?u:-u,d[0].push(h),b=(1&m)==0?0:(o=a.andln(7)+r&7)!==3&&o!==5||u!==2?m:-m,d[1].push(b),2*c===h+1&&(c=1-c),2*r===b+1&&(r=1-r),n.iushrn(1),a.iushrn(1)}return d},e.cachedProperty=function(n,a,d){var o="_"+a;n.prototype[a]=function(){return this[o]!==void 0?this[o]:this[o]=d.call(this)}},e.parseBytes=function(n){return typeof n=="string"?e.toArray(n,"hex"):n},e.intFromLE=function(n){return new A(n,"hex","le")}},{"bn.js":420,"minimalistic-assert":453,"minimalistic-crypto-utils":454}],420:[function(g,C,i){arguments[4][184][0].apply(i,arguments)},{buffer:188,dup:184}],421:[function(g,C,i){C.exports={name:"elliptic",version:"6.5.4",description:"EC cryptography",main:"lib/elliptic.js",files:["lib"],scripts:{lint:"eslint lib test","lint:fix":"npm run lint -- --fix",unit:"istanbul test _mocha --reporter=spec test/index.js",test:"npm run lint && npm run unit",version:"grunt dist && git add dist/"},repository:{type:"git",url:"git@github.com:indutny/elliptic"},keywords:["EC","Elliptic","curve","Cryptography"],author:"Fedor Indutny <fedor@indutny.com>",license:"MIT",bugs:{url:"https://github.com/indutny/elliptic/issues"},homepage:"https://github.com/indutny/elliptic",devDependencies:{brfs:"^2.0.2",coveralls:"^3.1.0",eslint:"^7.6.0",grunt:"^1.2.1","grunt-browserify":"^5.3.0","grunt-cli":"^1.3.2","grunt-contrib-connect":"^3.0.0","grunt-contrib-copy":"^1.0.0","grunt-contrib-uglify":"^5.0.0","grunt-mocha-istanbul":"^5.0.2","grunt-saucelabs":"^9.0.1",istanbul:"^0.4.5",mocha:"^8.0.1"},dependencies:{"bn.js":"^4.11.9",brorand:"^1.1.0","hash.js":"^1.0.0","hmac-drbg":"^1.0.1",inherits:"^2.0.4","minimalistic-assert":"^1.0.1","minimalistic-crypto-utils":"^1.0.1"}}},{}],422:[function(g,C,i){var e=Object.create||function(H){var S=function(){};return S.prototype=H,new S},A=Object.keys||function(H){var S=[];for(var z in H)Object.prototype.hasOwnProperty.call(H,z)&&S.push(z);return z},s=Function.prototype.bind||function(H){var S=this;return function(){return S.apply(H,arguments)}};function l(){this._events&&Object.prototype.hasOwnProperty.call(this,"_events")||(this._events=e(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0}C.exports=l,l.EventEmitter=l,l.prototype._events=void 0,l.prototype._maxListeners=void 0;var n,a=10;try{var d={};Object.defineProperty&&Object.defineProperty(d,"x",{value:0}),n=d.x===0}catch{n=!1}function o(H){return H._maxListeners===void 0?l.defaultMaxListeners:H._maxListeners}function c(H,S,z){if(S)H.call(z);else for(var v=H.length,K=X(H,v),V=0;V<v;++V)K[V].call(z)}function r(H,S,z,v){if(S)H.call(z,v);else for(var K=H.length,V=X(H,K),N=0;N<K;++N)V[N].call(z,v)}function h(H,S,z,v,K){if(S)H.call(z,v,K);else for(var V=H.length,N=X(H,V),B=0;B<V;++B)N[B].call(z,v,K)}function b(H,S,z,v,K,V){if(S)H.call(z,v,K,V);else for(var N=H.length,B=X(H,N),G=0;G<N;++G)B[G].call(z,v,K,V)}function u(H,S,z,v){if(S)H.apply(z,v);else for(var K=H.length,V=X(H,K),N=0;N<K;++N)V[N].apply(z,v)}function m(H,S,z,v){var K,V,N;if(typeof z!="function")throw new TypeError('"listener" argument must be a function');if((V=H._events)?(V.newListener&&(H.emit("newListener",S,z.listener?z.listener:z),V=H._events),N=V[S]):(V=H._events=e(null),H._eventsCount=0),N){if(typeof N=="function"?N=V[S]=v?[z,N]:[N,z]:v?N.unshift(z):N.push(z),!N.warned&&(K=o(H))&&K>0&&N.length>K){N.warned=!0;var B=new Error("Possible EventEmitter memory leak detected. "+N.length+' "'+String(S)+'" listeners added. Use emitter.setMaxListeners() to increase limit.');B.name="MaxListenersExceededWarning",B.emitter=H,B.type=S,B.count=N.length,typeof console=="object"&&console.warn&&console.warn("%s: %s",B.name,B.message)}}else N=V[S]=z,++H._eventsCount;return H}function Z(){if(!this.fired)switch(this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length){case 0:return this.listener.call(this.target);case 1:return this.listener.call(this.target,arguments[0]);case 2:return this.listener.call(this.target,arguments[0],arguments[1]);case 3:return this.listener.call(this.target,arguments[0],arguments[1],arguments[2]);default:for(var H=new Array(arguments.length),S=0;S<H.length;++S)H[S]=arguments[S];this.listener.apply(this.target,H)}}function p(H,S,z){var v={fired:!1,wrapFn:void 0,target:H,type:S,listener:z},K=s.call(Z,v);return K.listener=z,v.wrapFn=K,K}function Y(H,S,z){var v=H._events;if(!v)return[];var K=v[S];return K?typeof K=="function"?z?[K.listener||K]:[K]:z?function(V){for(var N=new Array(V.length),B=0;B<N.length;++B)N[B]=V[B].listener||V[B];return N}(K):X(K,K.length):[]}function R(H){var S=this._events;if(S){var z=S[H];if(typeof z=="function")return 1;if(z)return z.length}return 0}function X(H,S){for(var z=new Array(S),v=0;v<S;++v)z[v]=H[v];return z}n?Object.defineProperty(l,"defaultMaxListeners",{enumerable:!0,get:function(){return a},set:function(H){if(typeof H!="number"||H<0||H!=H)throw new TypeError('"defaultMaxListeners" must be a positive number');a=H}}):l.defaultMaxListeners=a,l.prototype.setMaxListeners=function(H){if(typeof H!="number"||H<0||isNaN(H))throw new TypeError('"n" argument must be a positive number');return this._maxListeners=H,this},l.prototype.getMaxListeners=function(){return o(this)},l.prototype.emit=function(H){var S,z,v,K,V,N,B=H==="error";if(N=this._events)B=B&&N.error==null;else if(!B)return!1;if(B){if(arguments.length>1&&(S=arguments[1]),S instanceof Error)throw S;var G=new Error('Unhandled "error" event. ('+S+")");throw G.context=S,G}if(!(z=N[H]))return!1;var w=typeof z=="function";switch(v=arguments.length){case 1:c(z,w,this);break;case 2:r(z,w,this,arguments[1]);break;case 3:h(z,w,this,arguments[1],arguments[2]);break;case 4:b(z,w,this,arguments[1],arguments[2],arguments[3]);break;default:for(K=new Array(v-1),V=1;V<v;V++)K[V-1]=arguments[V];u(z,w,this,K)}return!0},l.prototype.addListener=function(H,S){return m(this,H,S,!1)},l.prototype.on=l.prototype.addListener,l.prototype.prependListener=function(H,S){return m(this,H,S,!0)},l.prototype.once=function(H,S){if(typeof S!="function")throw new TypeError('"listener" argument must be a function');return this.on(H,p(this,H,S)),this},l.prototype.prependOnceListener=function(H,S){if(typeof S!="function")throw new TypeError('"listener" argument must be a function');return this.prependListener(H,p(this,H,S)),this},l.prototype.removeListener=function(H,S){var z,v,K,V,N;if(typeof S!="function")throw new TypeError('"listener" argument must be a function');if(!(v=this._events))return this;if(!(z=v[H]))return this;if(z===S||z.listener===S)--this._eventsCount==0?this._events=e(null):(delete v[H],v.removeListener&&this.emit("removeListener",H,z.listener||S));else if(typeof z!="function"){for(K=-1,V=z.length-1;V>=0;V--)if(z[V]===S||z[V].listener===S){N=z[V].listener,K=V;break}if(K<0)return this;K===0?z.shift():function(B,G){for(var w=G,W=w+1,y=B.length;W<y;w+=1,W+=1)B[w]=B[W];B.pop()}(z,K),z.length===1&&(v[H]=z[0]),v.removeListener&&this.emit("removeListener",H,N||S)}return this},l.prototype.removeAllListeners=function(H){var S,z,v;if(!(z=this._events))return this;if(!z.removeListener)return arguments.length===0?(this._events=e(null),this._eventsCount=0):z[H]&&(--this._eventsCount==0?this._events=e(null):delete z[H]),this;if(arguments.length===0){var K,V=A(z);for(v=0;v<V.length;++v)(K=V[v])!=="removeListener"&&this.removeAllListeners(K);return this.removeAllListeners("removeListener"),this._events=e(null),this._eventsCount=0,this}if(typeof(S=z[H])=="function")this.removeListener(H,S);else if(S)for(v=S.length-1;v>=0;v--)this.removeListener(H,S[v]);return this},l.prototype.listeners=function(H){return Y(this,H,!0)},l.prototype.rawListeners=function(H){return Y(this,H,!1)},l.listenerCount=function(H,S){return typeof H.listenerCount=="function"?H.listenerCount(S):R.call(H,S)},l.prototype.listenerCount=R,l.prototype.eventNames=function(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]}},{}],423:[function(g,C,i){var e=g("safe-buffer").Buffer,A=g("md5.js");C.exports=function(s,l,n,a){if(e.isBuffer(s)||(s=e.from(s,"binary")),l&&(e.isBuffer(l)||(l=e.from(l,"binary")),l.length!==8))throw new RangeError("salt should be Buffer with 8 byte length");for(var d=n/8,o=e.alloc(d),c=e.alloc(a||0),r=e.alloc(0);d>0||a>0;){var h=new A;h.update(r),h.update(s),l&&h.update(l),r=h.digest();var b=0;if(d>0){var u=o.length-d;b=Math.min(d,r.length),r.copy(o,u,0,b),d-=b}if(b<r.length&&a>0){var m=c.length-a,Z=Math.min(a,r.length-b);r.copy(c,m,b,b+Z),a-=Z}}return r.fill(0),{key:o,iv:c}}},{"md5.js":450,"safe-buffer":494}],424:[function(g,C,i){Object.defineProperty(i,"__esModule",{value:!0}),i.CsvParserStream=i.ParserOptions=i.parseFile=i.parseStream=i.parseString=i.parse=i.FormatterOptions=i.CsvFormatterStream=i.writeToPath=i.writeToString=i.writeToBuffer=i.writeToStream=i.write=i.format=void 0;var e=g("@fast-csv/format");Object.defineProperty(i,"format",{enumerable:!0,get:function(){return e.format}}),Object.defineProperty(i,"write",{enumerable:!0,get:function(){return e.write}}),Object.defineProperty(i,"writeToStream",{enumerable:!0,get:function(){return e.writeToStream}}),Object.defineProperty(i,"writeToBuffer",{enumerable:!0,get:function(){return e.writeToBuffer}}),Object.defineProperty(i,"writeToString",{enumerable:!0,get:function(){return e.writeToString}}),Object.defineProperty(i,"writeToPath",{enumerable:!0,get:function(){return e.writeToPath}}),Object.defineProperty(i,"CsvFormatterStream",{enumerable:!0,get:function(){return e.CsvFormatterStream}}),Object.defineProperty(i,"FormatterOptions",{enumerable:!0,get:function(){return e.FormatterOptions}});var A=g("@fast-csv/parse");Object.defineProperty(i,"parse",{enumerable:!0,get:function(){return A.parse}}),Object.defineProperty(i,"parseString",{enumerable:!0,get:function(){return A.parseString}}),Object.defineProperty(i,"parseStream",{enumerable:!0,get:function(){return A.parseStream}}),Object.defineProperty(i,"parseFile",{enumerable:!0,get:function(){return A.parseFile}}),Object.defineProperty(i,"ParserOptions",{enumerable:!0,get:function(){return A.ParserOptions}}),Object.defineProperty(i,"CsvParserStream",{enumerable:!0,get:function(){return A.CsvParserStream}})},{"@fast-csv/format":151,"@fast-csv/parse":155}],425:[function(g,C,i){var e=g("safe-buffer").Buffer,A=g("readable-stream").Transform;function s(l){A.call(this),this._block=e.allocUnsafe(l),this._blockSize=l,this._blockOffset=0,this._length=[0,0,0,0],this._finalized=!1}g("inherits")(s,A),s.prototype._transform=function(l,n,a){var d=null;try{this.update(l,n)}catch(o){d=o}a(d)},s.prototype._flush=function(l){var n=null;try{this.push(this.digest())}catch(a){n=a}l(n)},s.prototype.update=function(l,n){if(function(h,b){if(!e.isBuffer(h)&&typeof h!="string")throw new TypeError(b+" must be a string or a buffer")}(l,"Data"),this._finalized)throw new Error("Digest already called");e.isBuffer(l)||(l=e.from(l,n));for(var a=this._block,d=0;this._blockOffset+l.length-d>=this._blockSize;){for(var o=this._blockOffset;o<this._blockSize;)a[o++]=l[d++];this._update(),this._blockOffset=0}for(;d<l.length;)a[this._blockOffset++]=l[d++];for(var c=0,r=8*l.length;r>0;++c)this._length[c]+=r,(r=this._length[c]/4294967296|0)>0&&(this._length[c]-=4294967296*r);return this},s.prototype._update=function(){throw new Error("_update is not implemented")},s.prototype.digest=function(l){if(this._finalized)throw new Error("Digest already called");this._finalized=!0;var n=this._digest();l!==void 0&&(n=n.toString(l)),this._block.fill(0),this._blockOffset=0;for(var a=0;a<4;++a)this._length[a]=0;return n},s.prototype._digest=function(){throw new Error("_digest is not implemented")},C.exports=s},{inherits:440,"readable-stream":491,"safe-buffer":494}],426:[function(g,C,i){var e=i;e.utils=g("./hash/utils"),e.common=g("./hash/common"),e.sha=g("./hash/sha"),e.ripemd=g("./hash/ripemd"),e.hmac=g("./hash/hmac"),e.sha1=e.sha.sha1,e.sha256=e.sha.sha256,e.sha224=e.sha.sha224,e.sha384=e.sha.sha384,e.sha512=e.sha.sha512,e.ripemd160=e.ripemd.ripemd160},{"./hash/common":427,"./hash/hmac":428,"./hash/ripemd":429,"./hash/sha":430,"./hash/utils":437}],427:[function(g,C,i){var e=g("./utils"),A=g("minimalistic-assert");function s(){this.pending=null,this.pendingTotal=0,this.blockSize=this.constructor.blockSize,this.outSize=this.constructor.outSize,this.hmacStrength=this.constructor.hmacStrength,this.padLength=this.constructor.padLength/8,this.endian="big",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}i.BlockHash=s,s.prototype.update=function(l,n){if(l=e.toArray(l,n),this.pending?this.pending=this.pending.concat(l):this.pending=l,this.pendingTotal+=l.length,this.pending.length>=this._delta8){var a=(l=this.pending).length%this._delta8;this.pending=l.slice(l.length-a,l.length),this.pending.length===0&&(this.pending=null),l=e.join32(l,0,l.length-a,this.endian);for(var d=0;d<l.length;d+=this._delta32)this._update(l,d,d+this._delta32)}return this},s.prototype.digest=function(l){return this.update(this._pad()),A(this.pending===null),this._digest(l)},s.prototype._pad=function(){var l=this.pendingTotal,n=this._delta8,a=n-(l+this.padLength)%n,d=new Array(a+this.padLength);d[0]=128;for(var o=1;o<a;o++)d[o]=0;if(l<<=3,this.endian==="big"){for(var c=8;c<this.padLength;c++)d[o++]=0;d[o++]=0,d[o++]=0,d[o++]=0,d[o++]=0,d[o++]=l>>>24&255,d[o++]=l>>>16&255,d[o++]=l>>>8&255,d[o++]=255&l}else for(d[o++]=255&l,d[o++]=l>>>8&255,d[o++]=l>>>16&255,d[o++]=l>>>24&255,d[o++]=0,d[o++]=0,d[o++]=0,d[o++]=0,c=8;c<this.padLength;c++)d[o++]=0;return d}},{"./utils":437,"minimalistic-assert":453}],428:[function(g,C,i){var e=g("./utils"),A=g("minimalistic-assert");function s(l,n,a){if(!(this instanceof s))return new s(l,n,a);this.Hash=l,this.blockSize=l.blockSize/8,this.outSize=l.outSize/8,this.inner=null,this.outer=null,this._init(e.toArray(n,a))}C.exports=s,s.prototype._init=function(l){l.length>this.blockSize&&(l=new this.Hash().update(l).digest()),A(l.length<=this.blockSize);for(var n=l.length;n<this.blockSize;n++)l.push(0);for(n=0;n<l.length;n++)l[n]^=54;for(this.inner=new this.Hash().update(l),n=0;n<l.length;n++)l[n]^=106;this.outer=new this.Hash().update(l)},s.prototype.update=function(l,n){return this.inner.update(l,n),this},s.prototype.digest=function(l){return this.outer.update(this.inner.digest()),this.outer.digest(l)}},{"./utils":437,"minimalistic-assert":453}],429:[function(g,C,i){var e=g("./utils"),A=g("./common"),s=e.rotl32,l=e.sum32,n=e.sum32_3,a=e.sum32_4,d=A.BlockHash;function o(){if(!(this instanceof o))return new o;d.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.endian="little"}function c(p,Y,R,X){return p<=15?Y^R^X:p<=31?Y&R|~Y&X:p<=47?(Y|~R)^X:p<=63?Y&X|R&~X:Y^(R|~X)}function r(p){return p<=15?0:p<=31?1518500249:p<=47?1859775393:p<=63?2400959708:2840853838}function h(p){return p<=15?1352829926:p<=31?1548603684:p<=47?1836072691:p<=63?2053994217:0}e.inherits(o,d),i.ripemd160=o,o.blockSize=512,o.outSize=160,o.hmacStrength=192,o.padLength=64,o.prototype._update=function(p,Y){for(var R=this.h[0],X=this.h[1],H=this.h[2],S=this.h[3],z=this.h[4],v=R,K=X,V=H,N=S,B=z,G=0;G<80;G++){var w=l(s(a(R,c(G,X,H,S),p[b[G]+Y],r(G)),m[G]),z);R=z,z=S,S=s(H,10),H=X,X=w,w=l(s(a(v,c(79-G,K,V,N),p[u[G]+Y],h(G)),Z[G]),B),v=B,B=N,N=s(V,10),V=K,K=w}w=n(this.h[1],H,N),this.h[1]=n(this.h[2],S,B),this.h[2]=n(this.h[3],z,v),this.h[3]=n(this.h[4],R,K),this.h[4]=n(this.h[0],X,V),this.h[0]=w},o.prototype._digest=function(p){return p==="hex"?e.toHex32(this.h,"little"):e.split32(this.h,"little")};var b=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],u=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],m=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],Z=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]},{"./common":427,"./utils":437}],430:[function(g,C,i){i.sha1=g("./sha/1"),i.sha224=g("./sha/224"),i.sha256=g("./sha/256"),i.sha384=g("./sha/384"),i.sha512=g("./sha/512")},{"./sha/1":431,"./sha/224":432,"./sha/256":433,"./sha/384":434,"./sha/512":435}],431:[function(g,C,i){var e=g("../utils"),A=g("../common"),s=g("./common"),l=e.rotl32,n=e.sum32,a=e.sum32_5,d=s.ft_1,o=A.BlockHash,c=[1518500249,1859775393,2400959708,3395469782];function r(){if(!(this instanceof r))return new r;o.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.W=new Array(80)}e.inherits(r,o),C.exports=r,r.blockSize=512,r.outSize=160,r.hmacStrength=80,r.padLength=64,r.prototype._update=function(h,b){for(var u=this.W,m=0;m<16;m++)u[m]=h[b+m];for(;m<u.length;m++)u[m]=l(u[m-3]^u[m-8]^u[m-14]^u[m-16],1);var Z=this.h[0],p=this.h[1],Y=this.h[2],R=this.h[3],X=this.h[4];for(m=0;m<u.length;m++){var H=~~(m/20),S=a(l(Z,5),d(H,p,Y,R),X,u[m],c[H]);X=R,R=Y,Y=l(p,30),p=Z,Z=S}this.h[0]=n(this.h[0],Z),this.h[1]=n(this.h[1],p),this.h[2]=n(this.h[2],Y),this.h[3]=n(this.h[3],R),this.h[4]=n(this.h[4],X)},r.prototype._digest=function(h){return h==="hex"?e.toHex32(this.h,"big"):e.split32(this.h,"big")}},{"../common":427,"../utils":437,"./common":436}],432:[function(g,C,i){var e=g("../utils"),A=g("./256");function s(){if(!(this instanceof s))return new s;A.call(this),this.h=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428]}e.inherits(s,A),C.exports=s,s.blockSize=512,s.outSize=224,s.hmacStrength=192,s.padLength=64,s.prototype._digest=function(l){return l==="hex"?e.toHex32(this.h.slice(0,7),"big"):e.split32(this.h.slice(0,7),"big")}},{"../utils":437,"./256":433}],433:[function(g,C,i){var e=g("../utils"),A=g("../common"),s=g("./common"),l=g("minimalistic-assert"),n=e.sum32,a=e.sum32_4,d=e.sum32_5,o=s.ch32,c=s.maj32,r=s.s0_256,h=s.s1_256,b=s.g0_256,u=s.g1_256,m=A.BlockHash,Z=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];function p(){if(!(this instanceof p))return new p;m.call(this),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=Z,this.W=new Array(64)}e.inherits(p,m),C.exports=p,p.blockSize=512,p.outSize=256,p.hmacStrength=192,p.padLength=64,p.prototype._update=function(Y,R){for(var X=this.W,H=0;H<16;H++)X[H]=Y[R+H];for(;H<X.length;H++)X[H]=a(u(X[H-2]),X[H-7],b(X[H-15]),X[H-16]);var S=this.h[0],z=this.h[1],v=this.h[2],K=this.h[3],V=this.h[4],N=this.h[5],B=this.h[6],G=this.h[7];for(l(this.k.length===X.length),H=0;H<X.length;H++){var w=d(G,h(V),o(V,N,B),this.k[H],X[H]),W=n(r(S),c(S,z,v));G=B,B=N,N=V,V=n(K,w),K=v,v=z,z=S,S=n(w,W)}this.h[0]=n(this.h[0],S),this.h[1]=n(this.h[1],z),this.h[2]=n(this.h[2],v),this.h[3]=n(this.h[3],K),this.h[4]=n(this.h[4],V),this.h[5]=n(this.h[5],N),this.h[6]=n(this.h[6],B),this.h[7]=n(this.h[7],G)},p.prototype._digest=function(Y){return Y==="hex"?e.toHex32(this.h,"big"):e.split32(this.h,"big")}},{"../common":427,"../utils":437,"./common":436,"minimalistic-assert":453}],434:[function(g,C,i){var e=g("../utils"),A=g("./512");function s(){if(!(this instanceof s))return new s;A.call(this),this.h=[3418070365,3238371032,1654270250,914150663,2438529370,812702999,355462360,4144912697,1731405415,4290775857,2394180231,1750603025,3675008525,1694076839,1203062813,3204075428]}e.inherits(s,A),C.exports=s,s.blockSize=1024,s.outSize=384,s.hmacStrength=192,s.padLength=128,s.prototype._digest=function(l){return l==="hex"?e.toHex32(this.h.slice(0,12),"big"):e.split32(this.h.slice(0,12),"big")}},{"../utils":437,"./512":435}],435:[function(g,C,i){var e=g("../utils"),A=g("../common"),s=g("minimalistic-assert"),l=e.rotr64_hi,n=e.rotr64_lo,a=e.shr64_hi,d=e.shr64_lo,o=e.sum64,c=e.sum64_hi,r=e.sum64_lo,h=e.sum64_4_hi,b=e.sum64_4_lo,u=e.sum64_5_hi,m=e.sum64_5_lo,Z=A.BlockHash,p=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591];function Y(){if(!(this instanceof Y))return new Y;Z.call(this),this.h=[1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209],this.k=p,this.W=new Array(160)}function R(W,y,f,D,F){var T=W&f^~W&F;return T<0&&(T+=4294967296),T}function X(W,y,f,D,F,T){var Q=y&D^~y&T;return Q<0&&(Q+=4294967296),Q}function H(W,y,f,D,F){var T=W&f^W&F^f&F;return T<0&&(T+=4294967296),T}function S(W,y,f,D,F,T){var Q=y&D^y&T^D&T;return Q<0&&(Q+=4294967296),Q}function z(W,y){var f=l(W,y,28)^l(y,W,2)^l(y,W,7);return f<0&&(f+=4294967296),f}function v(W,y){var f=n(W,y,28)^n(y,W,2)^n(y,W,7);return f<0&&(f+=4294967296),f}function K(W,y){var f=l(W,y,14)^l(W,y,18)^l(y,W,9);return f<0&&(f+=4294967296),f}function V(W,y){var f=n(W,y,14)^n(W,y,18)^n(y,W,9);return f<0&&(f+=4294967296),f}function N(W,y){var f=l(W,y,1)^l(W,y,8)^a(W,y,7);return f<0&&(f+=4294967296),f}function B(W,y){var f=n(W,y,1)^n(W,y,8)^d(W,y,7);return f<0&&(f+=4294967296),f}function G(W,y){var f=l(W,y,19)^l(y,W,29)^a(W,y,6);return f<0&&(f+=4294967296),f}function w(W,y){var f=n(W,y,19)^n(y,W,29)^d(W,y,6);return f<0&&(f+=4294967296),f}e.inherits(Y,Z),C.exports=Y,Y.blockSize=1024,Y.outSize=512,Y.hmacStrength=192,Y.padLength=128,Y.prototype._prepareBlock=function(W,y){for(var f=this.W,D=0;D<32;D++)f[D]=W[y+D];for(;D<f.length;D+=2){var F=G(f[D-4],f[D-3]),T=w(f[D-4],f[D-3]),Q=f[D-14],P=f[D-13],L=N(f[D-30],f[D-29]),E=B(f[D-30],f[D-29]),J=f[D-32],k=f[D-31];f[D]=h(F,T,Q,P,L,E,J,k),f[D+1]=b(F,T,Q,P,L,E,J,k)}},Y.prototype._update=function(W,y){this._prepareBlock(W,y);var f=this.W,D=this.h[0],F=this.h[1],T=this.h[2],Q=this.h[3],P=this.h[4],L=this.h[5],E=this.h[6],J=this.h[7],k=this.h[8],j=this.h[9],q=this.h[10],tg=this.h[11],Cg=this.h[12],x=this.h[13],sg=this.h[14],Ag=this.h[15];s(this.k.length===f.length);for(var O=0;O<f.length;O+=2){var _=sg,Ig=Ag,ng=K(k,j),ag=V(k,j),lg=R(k,j,q,tg,Cg),cg=X(k,j,q,tg,Cg,x),dg=this.k[O],hg=this.k[O+1],rg=f[O],Wg=f[O+1],Gg=u(_,Ig,ng,ag,lg,cg,dg,hg,rg,Wg),Sg=m(_,Ig,ng,ag,lg,cg,dg,hg,rg,Wg);_=z(D,F),Ig=v(D,F),ng=H(D,F,T,Q,P),ag=S(D,F,T,Q,P,L);var Kg=c(_,Ig,ng,ag),kg=r(_,Ig,ng,ag);sg=Cg,Ag=x,Cg=q,x=tg,q=k,tg=j,k=c(E,J,Gg,Sg),j=r(J,J,Gg,Sg),E=P,J=L,P=T,L=Q,T=D,Q=F,D=c(Gg,Sg,Kg,kg),F=r(Gg,Sg,Kg,kg)}o(this.h,0,D,F),o(this.h,2,T,Q),o(this.h,4,P,L),o(this.h,6,E,J),o(this.h,8,k,j),o(this.h,10,q,tg),o(this.h,12,Cg,x),o(this.h,14,sg,Ag)},Y.prototype._digest=function(W){return W==="hex"?e.toHex32(this.h,"big"):e.split32(this.h,"big")}},{"../common":427,"../utils":437,"minimalistic-assert":453}],436:[function(g,C,i){var e=g("../utils").rotr32;function A(n,a,d){return n&a^~n&d}function s(n,a,d){return n&a^n&d^a&d}function l(n,a,d){return n^a^d}i.ft_1=function(n,a,d,o){return n===0?A(a,d,o):n===1||n===3?l(a,d,o):n===2?s(a,d,o):void 0},i.ch32=A,i.maj32=s,i.p32=l,i.s0_256=function(n){return e(n,2)^e(n,13)^e(n,22)},i.s1_256=function(n){return e(n,6)^e(n,11)^e(n,25)},i.g0_256=function(n){return e(n,7)^e(n,18)^n>>>3},i.g1_256=function(n){return e(n,17)^e(n,19)^n>>>10}},{"../utils":437}],437:[function(g,C,i){var e=g("minimalistic-assert"),A=g("inherits");function s(d,o){return(64512&d.charCodeAt(o))==55296&&!(o<0||o+1>=d.length)&&(64512&d.charCodeAt(o+1))==56320}function l(d){return(d>>>24|d>>>8&65280|d<<8&16711680|(255&d)<<24)>>>0}function n(d){return d.length===1?"0"+d:d}function a(d){return d.length===7?"0"+d:d.length===6?"00"+d:d.length===5?"000"+d:d.length===4?"0000"+d:d.length===3?"00000"+d:d.length===2?"000000"+d:d.length===1?"0000000"+d:d}i.inherits=A,i.toArray=function(d,o){if(Array.isArray(d))return d.slice();if(!d)return[];var c=[];if(typeof d=="string")if(o){if(o==="hex")for((d=d.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(d="0"+d),h=0;h<d.length;h+=2)c.push(parseInt(d[h]+d[h+1],16))}else for(var r=0,h=0;h<d.length;h++){var b=d.charCodeAt(h);b<128?c[r++]=b:b<2048?(c[r++]=b>>6|192,c[r++]=63&b|128):s(d,h)?(b=65536+((1023&b)<<10)+(1023&d.charCodeAt(++h)),c[r++]=b>>18|240,c[r++]=b>>12&63|128,c[r++]=b>>6&63|128,c[r++]=63&b|128):(c[r++]=b>>12|224,c[r++]=b>>6&63|128,c[r++]=63&b|128)}else for(h=0;h<d.length;h++)c[h]=0|d[h];return c},i.toHex=function(d){for(var o="",c=0;c<d.length;c++)o+=n(d[c].toString(16));return o},i.htonl=l,i.toHex32=function(d,o){for(var c="",r=0;r<d.length;r++){var h=d[r];o==="little"&&(h=l(h)),c+=a(h.toString(16))}return c},i.zero2=n,i.zero8=a,i.join32=function(d,o,c,r){var h=c-o;e(h%4==0);for(var b=new Array(h/4),u=0,m=o;u<b.length;u++,m+=4){var Z;Z=r==="big"?d[m]<<24|d[m+1]<<16|d[m+2]<<8|d[m+3]:d[m+3]<<24|d[m+2]<<16|d[m+1]<<8|d[m],b[u]=Z>>>0}return b},i.split32=function(d,o){for(var c=new Array(4*d.length),r=0,h=0;r<d.length;r++,h+=4){var b=d[r];o==="big"?(c[h]=b>>>24,c[h+1]=b>>>16&255,c[h+2]=b>>>8&255,c[h+3]=255&b):(c[h+3]=b>>>24,c[h+2]=b>>>16&255,c[h+1]=b>>>8&255,c[h]=255&b)}return c},i.rotr32=function(d,o){return d>>>o|d<<32-o},i.rotl32=function(d,o){return d<<o|d>>>32-o},i.sum32=function(d,o){return d+o>>>0},i.sum32_3=function(d,o,c){return d+o+c>>>0},i.sum32_4=function(d,o,c,r){return d+o+c+r>>>0},i.sum32_5=function(d,o,c,r,h){return d+o+c+r+h>>>0},i.sum64=function(d,o,c,r){var h=d[o],b=r+d[o+1]>>>0,u=(b<r?1:0)+c+h;d[o]=u>>>0,d[o+1]=b},i.sum64_hi=function(d,o,c,r){return(o+r>>>0<o?1:0)+d+c>>>0},i.sum64_lo=function(d,o,c,r){return o+r>>>0},i.sum64_4_hi=function(d,o,c,r,h,b,u,m){var Z=0,p=o;return Z+=(p=p+r>>>0)<o?1:0,Z+=(p=p+b>>>0)<b?1:0,d+c+h+u+(Z+=(p=p+m>>>0)<m?1:0)>>>0},i.sum64_4_lo=function(d,o,c,r,h,b,u,m){return o+r+b+m>>>0},i.sum64_5_hi=function(d,o,c,r,h,b,u,m,Z,p){var Y=0,R=o;return Y+=(R=R+r>>>0)<o?1:0,Y+=(R=R+b>>>0)<b?1:0,Y+=(R=R+m>>>0)<m?1:0,d+c+h+u+Z+(Y+=(R=R+p>>>0)<p?1:0)>>>0},i.sum64_5_lo=function(d,o,c,r,h,b,u,m,Z,p){return o+r+b+m+p>>>0},i.rotr64_hi=function(d,o,c){return(o<<32-c|d>>>c)>>>0},i.rotr64_lo=function(d,o,c){return(d<<32-c|o>>>c)>>>0},i.shr64_hi=function(d,o,c){return d>>>c},i.shr64_lo=function(d,o,c){return(d<<32-c|o>>>c)>>>0}},{inherits:440,"minimalistic-assert":453}],438:[function(g,C,i){var e=g("hash.js"),A=g("minimalistic-crypto-utils"),s=g("minimalistic-assert");function l(n){if(!(this instanceof l))return new l(n);this.hash=n.hash,this.predResist=!!n.predResist,this.outLen=this.hash.outSize,this.minEntropy=n.minEntropy||this.hash.hmacStrength,this._reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var a=A.toArray(n.entropy,n.entropyEnc||"hex"),d=A.toArray(n.nonce,n.nonceEnc||"hex"),o=A.toArray(n.pers,n.persEnc||"hex");s(a.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(a,d,o)}C.exports=l,l.prototype._init=function(n,a,d){var o=n.concat(a).concat(d);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var c=0;c<this.V.length;c++)this.K[c]=0,this.V[c]=1;this._update(o),this._reseed=1,this.reseedInterval=281474976710656},l.prototype._hmac=function(){return new e.hmac(this.hash,this.K)},l.prototype._update=function(n){var a=this._hmac().update(this.V).update([0]);n&&(a=a.update(n)),this.K=a.digest(),this.V=this._hmac().update(this.V).digest(),n&&(this.K=this._hmac().update(this.V).update([1]).update(n).digest(),this.V=this._hmac().update(this.V).digest())},l.prototype.reseed=function(n,a,d,o){typeof a!="string"&&(o=d,d=a,a=null),n=A.toArray(n,a),d=A.toArray(d,o),s(n.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(n.concat(d||[])),this._reseed=1},l.prototype.generate=function(n,a,d,o){if(this._reseed>this.reseedInterval)throw new Error("Reseed is required");typeof a!="string"&&(o=d,d=a,a=null),d&&(d=A.toArray(d,o||"hex"),this._update(d));for(var c=[];c.length<n;)this.V=this._hmac().update(this.V).digest(),c=c.concat(this.V);var r=c.slice(0,n);return this._update(d),this._reseed++,A.encode(r,a)}},{"hash.js":426,"minimalistic-assert":453,"minimalistic-crypto-utils":454}],439:[function(g,C,i){/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */i.read=function(e,A,s,l,n){var a,d,o=8*n-l-1,c=(1<<o)-1,r=c>>1,h=-7,b=s?n-1:0,u=s?-1:1,m=e[A+b];for(b+=u,a=m&(1<<-h)-1,m>>=-h,h+=o;h>0;a=256*a+e[A+b],b+=u,h-=8);for(d=a&(1<<-h)-1,a>>=-h,h+=l;h>0;d=256*d+e[A+b],b+=u,h-=8);if(a===0)a=1-r;else{if(a===c)return d?NaN:1/0*(m?-1:1);d+=Math.pow(2,l),a-=r}return(m?-1:1)*d*Math.pow(2,a-l)},i.write=function(e,A,s,l,n,a){var d,o,c,r=8*a-n-1,h=(1<<r)-1,b=h>>1,u=n===23?Math.pow(2,-24)-Math.pow(2,-77):0,m=l?0:a-1,Z=l?1:-1,p=A<0||A===0&&1/A<0?1:0;for(A=Math.abs(A),isNaN(A)||A===1/0?(o=isNaN(A)?1:0,d=h):(d=Math.floor(Math.log(A)/Math.LN2),A*(c=Math.pow(2,-d))<1&&(d--,c*=2),(A+=d+b>=1?u/c:u*Math.pow(2,1-b))*c>=2&&(d++,c/=2),d+b>=h?(o=0,d=h):d+b>=1?(o=(A*c-1)*Math.pow(2,n),d+=b):(o=A*Math.pow(2,b-1)*Math.pow(2,n),d=0));n>=8;e[s+m]=255&o,m+=Z,o/=256,n-=8);for(d=d<<n|o,r+=n;r>0;e[s+m]=255&d,m+=Z,d/=256,r-=8);e[s+m-Z]|=128*p}},{}],440:[function(g,C,i){typeof Object.create=="function"?C.exports=function(e,A){A&&(e.super_=A,e.prototype=Object.create(A.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:C.exports=function(e,A){if(A){e.super_=A;var s=function(){};s.prototype=A.prototype,e.prototype=new s,e.prototype.constructor=e}}},{}],441:[function(g,C,i){(function(e,A,s,l,n,a,d,o){(function(){/*!
- 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(c){typeof i=="object"&&C!==void 0?C.exports=c():(typeof window<"u"?window:A!==void 0?A:typeof self<"u"?self:this).JSZip=c()})(function(){return function c(r,h,b){function u(p,Y){if(!h[p]){if(!r[p]){var R=typeof g=="function"&&g;if(!Y&&R)return R(p,!0);if(m)return m(p,!0);var X=new Error("Cannot find module '"+p+"'");throw X.code="MODULE_NOT_FOUND",X}var H=h[p]={exports:{}};r[p][0].call(H.exports,function(S){return u(r[p][1][S]||S)},H,H.exports,c,r,h,b)}return h[p].exports}for(var m=typeof g=="function"&&g,Z=0;Z<b.length;Z++)u(b[Z]);return u}({1:[function(c,r,h){var b=c("./utils"),u=c("./support"),m="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";h.encode=function(Z){for(var p,Y,R,X,H,S,z,v=[],K=0,V=Z.length,N=V,B=b.getTypeOf(Z)!=="string";K<Z.length;)N=V-K,R=B?(p=Z[K++],Y=K<V?Z[K++]:0,K<V?Z[K++]:0):(p=Z.charCodeAt(K++),Y=K<V?Z.charCodeAt(K++):0,K<V?Z.charCodeAt(K++):0),X=p>>2,H=(3&p)<<4|Y>>4,S=1<N?(15&Y)<<2|R>>6:64,z=2<N?63&R:64,v.push(m.charAt(X)+m.charAt(H)+m.charAt(S)+m.charAt(z));return v.join("")},h.decode=function(Z){var p,Y,R,X,H,S,z=0,v=0,K="data:";if(Z.substr(0,K.length)===K)throw new Error("Invalid base64 input, it looks like a data url.");var V,N=3*(Z=Z.replace(/[^A-Za-z0-9+/=]/g,"")).length/4;if(Z.charAt(Z.length-1)===m.charAt(64)&&N--,Z.charAt(Z.length-2)===m.charAt(64)&&N--,N%1!=0)throw new Error("Invalid base64 input, bad content length.");for(V=u.uint8array?new Uint8Array(0|N):new Array(0|N);z<Z.length;)p=m.indexOf(Z.charAt(z++))<<2|(X=m.indexOf(Z.charAt(z++)))>>4,Y=(15&X)<<4|(H=m.indexOf(Z.charAt(z++)))>>2,R=(3&H)<<6|(S=m.indexOf(Z.charAt(z++))),V[v++]=p,H!==64&&(V[v++]=Y),S!==64&&(V[v++]=R);return V}},{"./support":30,"./utils":32}],2:[function(c,r,h){var b=c("./external"),u=c("./stream/DataWorker"),m=c("./stream/Crc32Probe"),Z=c("./stream/DataLengthProbe");function p(Y,R,X,H,S){this.compressedSize=Y,this.uncompressedSize=R,this.crc32=X,this.compression=H,this.compressedContent=S}p.prototype={getContentWorker:function(){var Y=new u(b.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new Z("data_length")),R=this;return Y.on("end",function(){if(this.streamInfo.data_length!==R.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),Y},getCompressedWorker:function(){return new u(b.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},p.createWorkerFrom=function(Y,R,X){return Y.pipe(new m).pipe(new Z("uncompressedSize")).pipe(R.compressWorker(X)).pipe(new Z("compressedSize")).withStreamInfo("compression",R)},r.exports=p},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(c,r,h){var b=c("./stream/GenericWorker");h.STORE={magic:"\0\0",compressWorker:function(){return new b("STORE compression")},uncompressWorker:function(){return new b("STORE decompression")}},h.DEFLATE=c("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(c,r,h){var b=c("./utils"),u=function(){for(var m,Z=[],p=0;p<256;p++){m=p;for(var Y=0;Y<8;Y++)m=1&m?3988292384^m>>>1:m>>>1;Z[p]=m}return Z}();r.exports=function(m,Z){return m!==void 0&&m.length?b.getTypeOf(m)!=="string"?function(p,Y,R,X){var H=u,S=0+R;p^=-1;for(var z=0;z<S;z++)p=p>>>8^H[255&(p^Y[z])];return-1^p}(0|Z,m,m.length):function(p,Y,R,X){var H=u,S=0+R;p^=-1;for(var z=0;z<S;z++)p=p>>>8^H[255&(p^Y.charCodeAt(z))];return-1^p}(0|Z,m,m.length):0}},{"./utils":32}],5:[function(c,r,h){h.base64=!1,h.binary=!1,h.dir=!1,h.createFolders=!0,h.date=null,h.compression=null,h.compressionOptions=null,h.comment=null,h.unixPermissions=null,h.dosPermissions=null},{}],6:[function(c,r,h){var b;b=typeof Promise<"u"?Promise:c("lie"),r.exports={Promise:b}},{lie:37}],7:[function(c,r,h){var b=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Uint32Array<"u",u=c("pako"),m=c("./utils"),Z=c("./stream/GenericWorker"),p=b?"uint8array":"array";function Y(R,X){Z.call(this,"FlateWorker/"+R),this._pako=null,this._pakoAction=R,this._pakoOptions=X,this.meta={}}h.magic="\b\0",m.inherits(Y,Z),Y.prototype.processChunk=function(R){this.meta=R.meta,this._pako===null&&this._createPako(),this._pako.push(m.transformTo(p,R.data),!1)},Y.prototype.flush=function(){Z.prototype.flush.call(this),this._pako===null&&this._createPako(),this._pako.push([],!0)},Y.prototype.cleanUp=function(){Z.prototype.cleanUp.call(this),this._pako=null},Y.prototype._createPako=function(){this._pako=new u[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var R=this;this._pako.onData=function(X){R.push({data:X,meta:R.meta})}},h.compressWorker=function(R){return new Y("Deflate",R)},h.uncompressWorker=function(){return new Y("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(c,r,h){function b(H,S){var z,v="";for(z=0;z<S;z++)v+=String.fromCharCode(255&H),H>>>=8;return v}function u(H,S,z,v,K,V){var N,B,G=H.file,w=H.compression,W=V!==p.utf8encode,y=m.transformTo("string",V(G.name)),f=m.transformTo("string",p.utf8encode(G.name)),D=G.comment,F=m.transformTo("string",V(D)),T=m.transformTo("string",p.utf8encode(D)),Q=f.length!==G.name.length,P=T.length!==D.length,L="",E="",J="",k=G.dir,j=G.date,q={crc32:0,compressedSize:0,uncompressedSize:0};S&&!z||(q.crc32=H.crc32,q.compressedSize=H.compressedSize,q.uncompressedSize=H.uncompressedSize);var tg=0;S&&(tg|=8),W||!Q&&!P||(tg|=2048);var Cg=0,x=0;k&&(Cg|=16),K==="UNIX"?(x=798,Cg|=function(Ag,O){var _=Ag;return Ag||(_=O?16893:33204),(65535&_)<<16}(G.unixPermissions,k)):(x=20,Cg|=function(Ag){return 63&(Ag||0)}(G.dosPermissions)),N=j.getUTCHours(),N<<=6,N|=j.getUTCMinutes(),N<<=5,N|=j.getUTCSeconds()/2,B=j.getUTCFullYear()-1980,B<<=4,B|=j.getUTCMonth()+1,B<<=5,B|=j.getUTCDate(),Q&&(E=b(1,1)+b(Y(y),4)+f,L+="up"+b(E.length,2)+E),P&&(J=b(1,1)+b(Y(F),4)+T,L+="uc"+b(J.length,2)+J);var sg="";return sg+=`
- \0`,sg+=b(tg,2),sg+=w.magic,sg+=b(N,2),sg+=b(B,2),sg+=b(q.crc32,4),sg+=b(q.compressedSize,4),sg+=b(q.uncompressedSize,4),sg+=b(y.length,2),sg+=b(L.length,2),{fileRecord:R.LOCAL_FILE_HEADER+sg+y+L,dirRecord:R.CENTRAL_FILE_HEADER+b(x,2)+sg+b(F.length,2)+"\0\0\0\0"+b(Cg,4)+b(v,4)+y+L+F}}var m=c("../utils"),Z=c("../stream/GenericWorker"),p=c("../utf8"),Y=c("../crc32"),R=c("../signature");function X(H,S,z,v){Z.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=S,this.zipPlatform=z,this.encodeFileName=v,this.streamFiles=H,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}m.inherits(X,Z),X.prototype.push=function(H){var S=H.meta.percent||0,z=this.entriesCount,v=this._sources.length;this.accumulate?this.contentBuffer.push(H):(this.bytesWritten+=H.data.length,Z.prototype.push.call(this,{data:H.data,meta:{currentFile:this.currentFile,percent:z?(S+100*(z-v-1))/z:100}}))},X.prototype.openedSource=function(H){this.currentSourceOffset=this.bytesWritten,this.currentFile=H.file.name;var S=this.streamFiles&&!H.file.dir;if(S){var z=u(H,S,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:z.fileRecord,meta:{percent:0}})}else this.accumulate=!0},X.prototype.closedSource=function(H){this.accumulate=!1;var S=this.streamFiles&&!H.file.dir,z=u(H,S,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(z.dirRecord),S)this.push({data:function(v){return R.DATA_DESCRIPTOR+b(v.crc32,4)+b(v.compressedSize,4)+b(v.uncompressedSize,4)}(H),meta:{percent:100}});else for(this.push({data:z.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},X.prototype.flush=function(){for(var H=this.bytesWritten,S=0;S<this.dirRecords.length;S++)this.push({data:this.dirRecords[S],meta:{percent:100}});var z=this.bytesWritten-H,v=function(K,V,N,B,G){var w=m.transformTo("string",G(B));return R.CENTRAL_DIRECTORY_END+"\0\0\0\0"+b(K,2)+b(K,2)+b(V,4)+b(N,4)+b(w.length,2)+w}(this.dirRecords.length,z,H,this.zipComment,this.encodeFileName);this.push({data:v,meta:{percent:100}})},X.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},X.prototype.registerPrevious=function(H){this._sources.push(H);var S=this;return H.on("data",function(z){S.processChunk(z)}),H.on("end",function(){S.closedSource(S.previous.streamInfo),S._sources.length?S.prepareNextSource():S.end()}),H.on("error",function(z){S.error(z)}),this},X.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))},X.prototype.error=function(H){var S=this._sources;if(!Z.prototype.error.call(this,H))return!1;for(var z=0;z<S.length;z++)try{S[z].error(H)}catch{}return!0},X.prototype.lock=function(){Z.prototype.lock.call(this);for(var H=this._sources,S=0;S<H.length;S++)H[S].lock()},r.exports=X},{"../crc32":4,"../signature":23,"../stream/GenericWorker":28,"../utf8":31,"../utils":32}],9:[function(c,r,h){var b=c("../compressions"),u=c("./ZipFileWorker");h.generateWorker=function(m,Z,p){var Y=new u(Z.streamFiles,p,Z.platform,Z.encodeFileName),R=0;try{m.forEach(function(X,H){R++;var S=function(V,N){var B=V||N,G=b[B];if(!G)throw new Error(B+" is not a valid compression method !");return G}(H.options.compression,Z.compression),z=H.options.compressionOptions||Z.compressionOptions||{},v=H.dir,K=H.date;H._compressWorker(S,z).withStreamInfo("file",{name:X,dir:v,date:K,comment:H.comment||"",unixPermissions:H.unixPermissions,dosPermissions:H.dosPermissions}).pipe(Y)}),Y.entriesCount=R}catch(X){Y.error(X)}return Y}},{"../compressions":3,"./ZipFileWorker":8}],10:[function(c,r,h){function b(){if(!(this instanceof b))return new b;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 u=new b;for(var m in this)typeof this[m]!="function"&&(u[m]=this[m]);return u}}(b.prototype=c("./object")).loadAsync=c("./load"),b.support=c("./support"),b.defaults=c("./defaults"),b.version="3.10.1",b.loadAsync=function(u,m){return new b().loadAsync(u,m)},b.external=c("./external"),r.exports=b},{"./defaults":5,"./external":6,"./load":11,"./object":15,"./support":30}],11:[function(c,r,h){var b=c("./utils"),u=c("./external"),m=c("./utf8"),Z=c("./zipEntries"),p=c("./stream/Crc32Probe"),Y=c("./nodejsUtils");function R(X){return new u.Promise(function(H,S){var z=X.decompressed.getContentWorker().pipe(new p);z.on("error",function(v){S(v)}).on("end",function(){z.streamInfo.crc32!==X.decompressed.crc32?S(new Error("Corrupted zip : CRC32 mismatch")):H()}).resume()})}r.exports=function(X,H){var S=this;return H=b.extend(H||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:m.utf8decode}),Y.isNode&&Y.isStream(X)?u.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")):b.prepareContent("the loaded zip file",X,!0,H.optimizedBinaryString,H.base64).then(function(z){var v=new Z(H);return v.load(z),v}).then(function(z){var v=[u.Promise.resolve(z)],K=z.files;if(H.checkCRC32)for(var V=0;V<K.length;V++)v.push(R(K[V]));return u.Promise.all(v)}).then(function(z){for(var v=z.shift(),K=v.files,V=0;V<K.length;V++){var N=K[V],B=N.fileNameStr,G=b.resolve(N.fileNameStr);S.file(G,N.decompressed,{binary:!0,optimizedBinaryString:!0,date:N.date,dir:N.dir,comment:N.fileCommentStr.length?N.fileCommentStr:null,unixPermissions:N.unixPermissions,dosPermissions:N.dosPermissions,createFolders:H.createFolders}),N.dir||(S.file(G).unsafeOriginalName=B)}return v.zipComment.length&&(S.comment=v.zipComment),S})}},{"./external":6,"./nodejsUtils":14,"./stream/Crc32Probe":25,"./utf8":31,"./utils":32,"./zipEntries":33}],12:[function(c,r,h){var b=c("../utils"),u=c("../stream/GenericWorker");function m(Z,p){u.call(this,"Nodejs stream input adapter for "+Z),this._upstreamEnded=!1,this._bindStream(p)}b.inherits(m,u),m.prototype._bindStream=function(Z){var p=this;(this._stream=Z).pause(),Z.on("data",function(Y){p.push({data:Y,meta:{percent:0}})}).on("error",function(Y){p.isPaused?this.generatedError=Y:p.error(Y)}).on("end",function(){p.isPaused?p._upstreamEnded=!0:p.end()})},m.prototype.pause=function(){return!!u.prototype.pause.call(this)&&(this._stream.pause(),!0)},m.prototype.resume=function(){return!!u.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)},r.exports=m},{"../stream/GenericWorker":28,"../utils":32}],13:[function(c,r,h){var b=c("readable-stream").Readable;function u(m,Z,p){b.call(this,Z),this._helper=m;var Y=this;m.on("data",function(R,X){Y.push(R)||Y._helper.pause(),p&&p(X)}).on("error",function(R){Y.emit("error",R)}).on("end",function(){Y.push(null)})}c("../utils").inherits(u,b),u.prototype._read=function(){this._helper.resume()},r.exports=u},{"../utils":32,"readable-stream":16}],14:[function(c,r,h){r.exports={isNode:s!==void 0,newBufferFrom:function(b,u){if(s.from&&s.from!==Uint8Array.from)return s.from(b,u);if(typeof b=="number")throw new Error('The "data" argument must not be a number');return new s(b,u)},allocBuffer:function(b){if(s.alloc)return s.alloc(b);var u=new s(b);return u.fill(0),u},isBuffer:function(b){return s.isBuffer(b)},isStream:function(b){return b&&typeof b.on=="function"&&typeof b.pause=="function"&&typeof b.resume=="function"}}},{}],15:[function(c,r,h){function b(G,w,W){var y,f=m.getTypeOf(w),D=m.extend(W||{},Y);D.date=D.date||new Date,D.compression!==null&&(D.compression=D.compression.toUpperCase()),typeof D.unixPermissions=="string"&&(D.unixPermissions=parseInt(D.unixPermissions,8)),D.unixPermissions&&16384&D.unixPermissions&&(D.dir=!0),D.dosPermissions&&16&D.dosPermissions&&(D.dir=!0),D.dir&&(G=K(G)),D.createFolders&&(y=v(G))&&V.call(this,y,!0);var F=f==="string"&&D.binary===!1&&D.base64===!1;W&&W.binary!==void 0||(D.binary=!F),(w instanceof R&&w.uncompressedSize===0||D.dir||!w||w.length===0)&&(D.base64=!1,D.binary=!0,w="",D.compression="STORE",f="string");var T;T=w instanceof R||w instanceof Z?w:S.isNode&&S.isStream(w)?new z(G,w):m.prepareContent(G,w,D.binary,D.optimizedBinaryString,D.base64);var Q=new X(G,T,D);this.files[G]=Q}var u=c("./utf8"),m=c("./utils"),Z=c("./stream/GenericWorker"),p=c("./stream/StreamHelper"),Y=c("./defaults"),R=c("./compressedObject"),X=c("./zipObject"),H=c("./generate"),S=c("./nodejsUtils"),z=c("./nodejs/NodejsStreamInputAdapter"),v=function(G){G.slice(-1)==="/"&&(G=G.substring(0,G.length-1));var w=G.lastIndexOf("/");return 0<w?G.substring(0,w):""},K=function(G){return G.slice(-1)!=="/"&&(G+="/"),G},V=function(G,w){return w=w!==void 0?w:Y.createFolders,G=K(G),this.files[G]||b.call(this,G,null,{dir:!0,createFolders:w}),this.files[G]};function N(G){return Object.prototype.toString.call(G)==="[object RegExp]"}var B={load:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},forEach:function(G){var w,W,y;for(w in this.files)y=this.files[w],(W=w.slice(this.root.length,w.length))&&w.slice(0,this.root.length)===this.root&&G(W,y)},filter:function(G){var w=[];return this.forEach(function(W,y){G(W,y)&&w.push(y)}),w},file:function(G,w,W){if(arguments.length!==1)return G=this.root+G,b.call(this,G,w,W),this;if(N(G)){var y=G;return this.filter(function(D,F){return!F.dir&&y.test(D)})}var f=this.files[this.root+G];return f&&!f.dir?f:null},folder:function(G){if(!G)return this;if(N(G))return this.filter(function(f,D){return D.dir&&G.test(f)});var w=this.root+G,W=V.call(this,w),y=this.clone();return y.root=W.name,y},remove:function(G){G=this.root+G;var w=this.files[G];if(w||(G.slice(-1)!=="/"&&(G+="/"),w=this.files[G]),w&&!w.dir)delete this.files[G];else for(var W=this.filter(function(f,D){return D.name.slice(0,G.length)===G}),y=0;y<W.length;y++)delete this.files[W[y].name];return this},generate:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},generateInternalStream:function(G){var w,W={};try{if((W=m.extend(G||{},{streamFiles:!1,compression:"STORE",compressionOptions:null,type:"",platform:"DOS",comment:null,mimeType:"application/zip",encodeFileName:u.utf8encode})).type=W.type.toLowerCase(),W.compression=W.compression.toUpperCase(),W.type==="binarystring"&&(W.type="string"),!W.type)throw new Error("No output type specified.");m.checkSupport(W.type),W.platform!=="darwin"&&W.platform!=="freebsd"&&W.platform!=="linux"&&W.platform!=="sunos"||(W.platform="UNIX"),W.platform==="win32"&&(W.platform="DOS");var y=W.comment||this.comment||"";w=H.generateWorker(this,W,y)}catch(f){(w=new Z("error")).error(f)}return new p(w,W.type||"string",W.mimeType)},generateAsync:function(G,w){return this.generateInternalStream(G).accumulate(w)},generateNodeStream:function(G,w){return(G=G||{}).type||(G.type="nodebuffer"),this.generateInternalStream(G).toNodejsStream(w)}};r.exports=B},{"./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(c,r,h){r.exports=c("stream")},{stream:void 0}],17:[function(c,r,h){var b=c("./DataReader");function u(m){b.call(this,m);for(var Z=0;Z<this.data.length;Z++)m[Z]=255&m[Z]}c("../utils").inherits(u,b),u.prototype.byteAt=function(m){return this.data[this.zero+m]},u.prototype.lastIndexOfSignature=function(m){for(var Z=m.charCodeAt(0),p=m.charCodeAt(1),Y=m.charCodeAt(2),R=m.charCodeAt(3),X=this.length-4;0<=X;--X)if(this.data[X]===Z&&this.data[X+1]===p&&this.data[X+2]===Y&&this.data[X+3]===R)return X-this.zero;return-1},u.prototype.readAndCheckSignature=function(m){var Z=m.charCodeAt(0),p=m.charCodeAt(1),Y=m.charCodeAt(2),R=m.charCodeAt(3),X=this.readData(4);return Z===X[0]&&p===X[1]&&Y===X[2]&&R===X[3]},u.prototype.readData=function(m){if(this.checkOffset(m),m===0)return[];var Z=this.data.slice(this.zero+this.index,this.zero+this.index+m);return this.index+=m,Z},r.exports=u},{"../utils":32,"./DataReader":18}],18:[function(c,r,h){var b=c("../utils");function u(m){this.data=m,this.length=m.length,this.index=0,this.zero=0}u.prototype={checkOffset:function(m){this.checkIndex(this.index+m)},checkIndex:function(m){if(this.length<this.zero+m||m<0)throw new Error("End of data reached (data length = "+this.length+", asked index = "+m+"). Corrupted zip ?")},setIndex:function(m){this.checkIndex(m),this.index=m},skip:function(m){this.setIndex(this.index+m)},byteAt:function(){},readInt:function(m){var Z,p=0;for(this.checkOffset(m),Z=this.index+m-1;Z>=this.index;Z--)p=(p<<8)+this.byteAt(Z);return this.index+=m,p},readString:function(m){return b.transformTo("string",this.readData(m))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var m=this.readInt(4);return new Date(Date.UTC(1980+(m>>25&127),(m>>21&15)-1,m>>16&31,m>>11&31,m>>5&63,(31&m)<<1))}},r.exports=u},{"../utils":32}],19:[function(c,r,h){var b=c("./Uint8ArrayReader");function u(m){b.call(this,m)}c("../utils").inherits(u,b),u.prototype.readData=function(m){this.checkOffset(m);var Z=this.data.slice(this.zero+this.index,this.zero+this.index+m);return this.index+=m,Z},r.exports=u},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(c,r,h){var b=c("./DataReader");function u(m){b.call(this,m)}c("../utils").inherits(u,b),u.prototype.byteAt=function(m){return this.data.charCodeAt(this.zero+m)},u.prototype.lastIndexOfSignature=function(m){return this.data.lastIndexOf(m)-this.zero},u.prototype.readAndCheckSignature=function(m){return m===this.readData(4)},u.prototype.readData=function(m){this.checkOffset(m);var Z=this.data.slice(this.zero+this.index,this.zero+this.index+m);return this.index+=m,Z},r.exports=u},{"../utils":32,"./DataReader":18}],21:[function(c,r,h){var b=c("./ArrayReader");function u(m){b.call(this,m)}c("../utils").inherits(u,b),u.prototype.readData=function(m){if(this.checkOffset(m),m===0)return new Uint8Array(0);var Z=this.data.subarray(this.zero+this.index,this.zero+this.index+m);return this.index+=m,Z},r.exports=u},{"../utils":32,"./ArrayReader":17}],22:[function(c,r,h){var b=c("../utils"),u=c("../support"),m=c("./ArrayReader"),Z=c("./StringReader"),p=c("./NodeBufferReader"),Y=c("./Uint8ArrayReader");r.exports=function(R){var X=b.getTypeOf(R);return b.checkSupport(X),X!=="string"||u.uint8array?X==="nodebuffer"?new p(R):u.uint8array?new Y(b.transformTo("uint8array",R)):new m(b.transformTo("array",R)):new Z(R)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(c,r,h){h.LOCAL_FILE_HEADER="PK",h.CENTRAL_FILE_HEADER="PK",h.CENTRAL_DIRECTORY_END="PK",h.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK\x07",h.ZIP64_CENTRAL_DIRECTORY_END="PK",h.DATA_DESCRIPTOR="PK\x07\b"},{}],24:[function(c,r,h){var b=c("./GenericWorker"),u=c("../utils");function m(Z){b.call(this,"ConvertWorker to "+Z),this.destType=Z}u.inherits(m,b),m.prototype.processChunk=function(Z){this.push({data:u.transformTo(this.destType,Z.data),meta:Z.meta})},r.exports=m},{"../utils":32,"./GenericWorker":28}],25:[function(c,r,h){var b=c("./GenericWorker"),u=c("../crc32");function m(){b.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}c("../utils").inherits(m,b),m.prototype.processChunk=function(Z){this.streamInfo.crc32=u(Z.data,this.streamInfo.crc32||0),this.push(Z)},r.exports=m},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(c,r,h){var b=c("../utils"),u=c("./GenericWorker");function m(Z){u.call(this,"DataLengthProbe for "+Z),this.propName=Z,this.withStreamInfo(Z,0)}b.inherits(m,u),m.prototype.processChunk=function(Z){if(Z){var p=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=p+Z.data.length}u.prototype.processChunk.call(this,Z)},r.exports=m},{"../utils":32,"./GenericWorker":28}],27:[function(c,r,h){var b=c("../utils"),u=c("./GenericWorker");function m(Z){u.call(this,"DataWorker");var p=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,Z.then(function(Y){p.dataIsReady=!0,p.data=Y,p.max=Y&&Y.length||0,p.type=b.getTypeOf(Y),p.isPaused||p._tickAndRepeat()},function(Y){p.error(Y)})}b.inherits(m,u),m.prototype.cleanUp=function(){u.prototype.cleanUp.call(this),this.data=null},m.prototype.resume=function(){return!!u.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,b.delay(this._tickAndRepeat,[],this)),!0)},m.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(b.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},m.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var Z=null,p=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":Z=this.data.substring(this.index,p);break;case"uint8array":Z=this.data.subarray(this.index,p);break;case"array":case"nodebuffer":Z=this.data.slice(this.index,p)}return this.index=p,this.push({data:Z,meta:{percent:this.max?this.index/this.max*100:0}})},r.exports=m},{"../utils":32,"./GenericWorker":28}],28:[function(c,r,h){function b(u){this.name=u||"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}b.prototype={push:function(u){this.emit("data",u)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(u){this.emit("error",u)}return!0},error:function(u){return!this.isFinished&&(this.isPaused?this.generatedError=u:(this.isFinished=!0,this.emit("error",u),this.previous&&this.previous.error(u),this.cleanUp()),!0)},on:function(u,m){return this._listeners[u].push(m),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(u,m){if(this._listeners[u])for(var Z=0;Z<this._listeners[u].length;Z++)this._listeners[u][Z].call(this,m)},pipe:function(u){return u.registerPrevious(this)},registerPrevious:function(u){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.streamInfo=u.streamInfo,this.mergeStreamInfo(),this.previous=u;var m=this;return u.on("data",function(Z){m.processChunk(Z)}),u.on("end",function(){m.end()}),u.on("error",function(Z){m.error(Z)}),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 u=this.isPaused=!1;return this.generatedError&&(this.error(this.generatedError),u=!0),this.previous&&this.previous.resume(),!u},flush:function(){},processChunk:function(u){this.push(u)},withStreamInfo:function(u,m){return this.extraStreamInfo[u]=m,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var u in this.extraStreamInfo)Object.prototype.hasOwnProperty.call(this.extraStreamInfo,u)&&(this.streamInfo[u]=this.extraStreamInfo[u])},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 u="Worker "+this.name;return this.previous?this.previous+" -> "+u:u}},r.exports=b},{}],29:[function(c,r,h){var b=c("../utils"),u=c("./ConvertWorker"),m=c("./GenericWorker"),Z=c("../base64"),p=c("../support"),Y=c("../external"),R=null;if(p.nodestream)try{R=c("../nodejs/NodejsStreamOutputAdapter")}catch{}function X(H,S,z){var v=S;switch(S){case"blob":case"arraybuffer":v="uint8array";break;case"base64":v="string"}try{this._internalType=v,this._outputType=S,this._mimeType=z,b.checkSupport(v),this._worker=H.pipe(new u(v)),H.lock()}catch(K){this._worker=new m("error"),this._worker.error(K)}}X.prototype={accumulate:function(H){return function(S,z){return new Y.Promise(function(v,K){var V=[],N=S._internalType,B=S._outputType,G=S._mimeType;S.on("data",function(w,W){V.push(w),z&&z(W)}).on("error",function(w){V=[],K(w)}).on("end",function(){try{var w=function(W,y,f){switch(W){case"blob":return b.newBlob(b.transformTo("arraybuffer",y),f);case"base64":return Z.encode(y);default:return b.transformTo(W,y)}}(B,function(W,y){var f,D=0,F=null,T=0;for(f=0;f<y.length;f++)T+=y[f].length;switch(W){case"string":return y.join("");case"array":return Array.prototype.concat.apply([],y);case"uint8array":for(F=new Uint8Array(T),f=0;f<y.length;f++)F.set(y[f],D),D+=y[f].length;return F;case"nodebuffer":return s.concat(y);default:throw new Error("concat : unsupported type '"+W+"'")}}(N,V),G);v(w)}catch(W){K(W)}V=[]}).resume()})}(this,H)},on:function(H,S){var z=this;return H==="data"?this._worker.on(H,function(v){S.call(z,v.data,v.meta)}):this._worker.on(H,function(){b.delay(S,arguments,z)}),this},resume:function(){return b.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(H){if(b.checkSupport("nodestream"),this._outputType!=="nodebuffer")throw new Error(this._outputType+" is not supported by this method");return new R(this,{objectMode:this._outputType!=="nodebuffer"},H)}},r.exports=X},{"../base64":1,"../external":6,"../nodejs/NodejsStreamOutputAdapter":13,"../support":30,"../utils":32,"./ConvertWorker":24,"./GenericWorker":28}],30:[function(c,r,h){if(h.base64=!0,h.array=!0,h.string=!0,h.arraybuffer=typeof ArrayBuffer<"u"&&typeof Uint8Array<"u",h.nodebuffer=s!==void 0,h.uint8array=typeof Uint8Array<"u",typeof ArrayBuffer>"u")h.blob=!1;else{var b=new ArrayBuffer(0);try{h.blob=new Blob([b],{type:"application/zip"}).size===0}catch{try{var u=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);u.append(b),h.blob=u.getBlob("application/zip").size===0}catch{h.blob=!1}}}try{h.nodestream=!!c("readable-stream").Readable}catch{h.nodestream=!1}},{"readable-stream":16}],31:[function(c,r,h){for(var b=c("./utils"),u=c("./support"),m=c("./nodejsUtils"),Z=c("./stream/GenericWorker"),p=new Array(256),Y=0;Y<256;Y++)p[Y]=252<=Y?6:248<=Y?5:240<=Y?4:224<=Y?3:192<=Y?2:1;function R(){Z.call(this,"utf-8 decode"),this.leftOver=null}function X(){Z.call(this,"utf-8 encode")}p[254]=p[254]=1,h.utf8encode=function(H){return u.nodebuffer?m.newBufferFrom(H,"utf-8"):function(S){var z,v,K,V,N,B=S.length,G=0;for(V=0;V<B;V++)(64512&(v=S.charCodeAt(V)))==55296&&V+1<B&&(64512&(K=S.charCodeAt(V+1)))==56320&&(v=65536+(v-55296<<10)+(K-56320),V++),G+=v<128?1:v<2048?2:v<65536?3:4;for(z=u.uint8array?new Uint8Array(G):new Array(G),V=N=0;N<G;V++)(64512&(v=S.charCodeAt(V)))==55296&&V+1<B&&(64512&(K=S.charCodeAt(V+1)))==56320&&(v=65536+(v-55296<<10)+(K-56320),V++),v<128?z[N++]=v:(v<2048?z[N++]=192|v>>>6:(v<65536?z[N++]=224|v>>>12:(z[N++]=240|v>>>18,z[N++]=128|v>>>12&63),z[N++]=128|v>>>6&63),z[N++]=128|63&v);return z}(H)},h.utf8decode=function(H){return u.nodebuffer?b.transformTo("nodebuffer",H).toString("utf-8"):function(S){var z,v,K,V,N=S.length,B=new Array(2*N);for(z=v=0;z<N;)if((K=S[z++])<128)B[v++]=K;else if(4<(V=p[K]))B[v++]=65533,z+=V-1;else{for(K&=V===2?31:V===3?15:7;1<V&&z<N;)K=K<<6|63&S[z++],V--;1<V?B[v++]=65533:K<65536?B[v++]=K:(K-=65536,B[v++]=55296|K>>10&1023,B[v++]=56320|1023&K)}return B.length!==v&&(B.subarray?B=B.subarray(0,v):B.length=v),b.applyFromCharCode(B)}(H=b.transformTo(u.uint8array?"uint8array":"array",H))},b.inherits(R,Z),R.prototype.processChunk=function(H){var S=b.transformTo(u.uint8array?"uint8array":"array",H.data);if(this.leftOver&&this.leftOver.length){if(u.uint8array){var z=S;(S=new Uint8Array(z.length+this.leftOver.length)).set(this.leftOver,0),S.set(z,this.leftOver.length)}else S=this.leftOver.concat(S);this.leftOver=null}var v=function(V,N){var B;for((N=N||V.length)>V.length&&(N=V.length),B=N-1;0<=B&&(192&V[B])==128;)B--;return B<0||B===0?N:B+p[V[B]]>N?B:N}(S),K=S;v!==S.length&&(u.uint8array?(K=S.subarray(0,v),this.leftOver=S.subarray(v,S.length)):(K=S.slice(0,v),this.leftOver=S.slice(v,S.length))),this.push({data:h.utf8decode(K),meta:H.meta})},R.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:h.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},h.Utf8DecodeWorker=R,b.inherits(X,Z),X.prototype.processChunk=function(H){this.push({data:h.utf8encode(H.data),meta:H.meta})},h.Utf8EncodeWorker=X},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(c,r,h){var b=c("./support"),u=c("./base64"),m=c("./nodejsUtils"),Z=c("./external");function p(z){return z}function Y(z,v){for(var K=0;K<z.length;++K)v[K]=255&z.charCodeAt(K);return v}c("setimmediate"),h.newBlob=function(z,v){h.checkSupport("blob");try{return new Blob([z],{type:v})}catch{try{var K=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);return K.append(z),K.getBlob(v)}catch{throw new Error("Bug : can't construct the Blob.")}}};var R={stringifyByChunk:function(z,v,K){var V=[],N=0,B=z.length;if(B<=K)return String.fromCharCode.apply(null,z);for(;N<B;)v==="array"||v==="nodebuffer"?V.push(String.fromCharCode.apply(null,z.slice(N,Math.min(N+K,B)))):V.push(String.fromCharCode.apply(null,z.subarray(N,Math.min(N+K,B)))),N+=K;return V.join("")},stringifyByChar:function(z){for(var v="",K=0;K<z.length;K++)v+=String.fromCharCode(z[K]);return v},applyCanBeUsed:{uint8array:function(){try{return b.uint8array&&String.fromCharCode.apply(null,new Uint8Array(1)).length===1}catch{return!1}}(),nodebuffer:function(){try{return b.nodebuffer&&String.fromCharCode.apply(null,m.allocBuffer(1)).length===1}catch{return!1}}()}};function X(z){var v=65536,K=h.getTypeOf(z),V=!0;if(K==="uint8array"?V=R.applyCanBeUsed.uint8array:K==="nodebuffer"&&(V=R.applyCanBeUsed.nodebuffer),V)for(;1<v;)try{return R.stringifyByChunk(z,K,v)}catch{v=Math.floor(v/2)}return R.stringifyByChar(z)}function H(z,v){for(var K=0;K<z.length;K++)v[K]=z[K];return v}h.applyFromCharCode=X;var S={};S.string={string:p,array:function(z){return Y(z,new Array(z.length))},arraybuffer:function(z){return S.string.uint8array(z).buffer},uint8array:function(z){return Y(z,new Uint8Array(z.length))},nodebuffer:function(z){return Y(z,m.allocBuffer(z.length))}},S.array={string:X,array:p,arraybuffer:function(z){return new Uint8Array(z).buffer},uint8array:function(z){return new Uint8Array(z)},nodebuffer:function(z){return m.newBufferFrom(z)}},S.arraybuffer={string:function(z){return X(new Uint8Array(z))},array:function(z){return H(new Uint8Array(z),new Array(z.byteLength))},arraybuffer:p,uint8array:function(z){return new Uint8Array(z)},nodebuffer:function(z){return m.newBufferFrom(new Uint8Array(z))}},S.uint8array={string:X,array:function(z){return H(z,new Array(z.length))},arraybuffer:function(z){return z.buffer},uint8array:p,nodebuffer:function(z){return m.newBufferFrom(z)}},S.nodebuffer={string:X,array:function(z){return H(z,new Array(z.length))},arraybuffer:function(z){return S.nodebuffer.uint8array(z).buffer},uint8array:function(z){return H(z,new Uint8Array(z.length))},nodebuffer:p},h.transformTo=function(z,v){if(v=v||"",!z)return v;h.checkSupport(z);var K=h.getTypeOf(v);return S[K][z](v)},h.resolve=function(z){for(var v=z.split("/"),K=[],V=0;V<v.length;V++){var N=v[V];N==="."||N===""&&V!==0&&V!==v.length-1||(N===".."?K.pop():K.push(N))}return K.join("/")},h.getTypeOf=function(z){return typeof z=="string"?"string":Object.prototype.toString.call(z)==="[object Array]"?"array":b.nodebuffer&&m.isBuffer(z)?"nodebuffer":b.uint8array&&z instanceof Uint8Array?"uint8array":b.arraybuffer&&z instanceof ArrayBuffer?"arraybuffer":void 0},h.checkSupport=function(z){if(!b[z.toLowerCase()])throw new Error(z+" is not supported by this platform")},h.MAX_VALUE_16BITS=65535,h.MAX_VALUE_32BITS=-1,h.pretty=function(z){var v,K,V="";for(K=0;K<(z||"").length;K++)V+="\\x"+((v=z.charCodeAt(K))<16?"0":"")+v.toString(16).toUpperCase();return V},h.delay=function(z,v,K){o(function(){z.apply(K||null,v||[])})},h.inherits=function(z,v){function K(){}K.prototype=v.prototype,z.prototype=new K},h.extend=function(){var z,v,K={};for(z=0;z<arguments.length;z++)for(v in arguments[z])Object.prototype.hasOwnProperty.call(arguments[z],v)&&K[v]===void 0&&(K[v]=arguments[z][v]);return K},h.prepareContent=function(z,v,K,V,N){return Z.Promise.resolve(v).then(function(B){return b.blob&&(B instanceof Blob||["[object File]","[object Blob]"].indexOf(Object.prototype.toString.call(B))!==-1)&&typeof FileReader<"u"?new Z.Promise(function(G,w){var W=new FileReader;W.onload=function(y){G(y.target.result)},W.onerror=function(y){w(y.target.error)},W.readAsArrayBuffer(B)}):B}).then(function(B){var G=h.getTypeOf(B);return G?(G==="arraybuffer"?B=h.transformTo("uint8array",B):G==="string"&&(N?B=u.decode(B):K&&V!==!0&&(B=function(w){return Y(w,b.uint8array?new Uint8Array(w.length):new Array(w.length))}(B))),B):Z.Promise.reject(new Error("Can't read the data of '"+z+"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?"))})}},{"./base64":1,"./external":6,"./nodejsUtils":14,"./support":30,setimmediate:54}],33:[function(c,r,h){var b=c("./reader/readerFor"),u=c("./utils"),m=c("./signature"),Z=c("./zipEntry"),p=c("./support");function Y(R){this.files=[],this.loadOptions=R}Y.prototype={checkSignature:function(R){if(!this.reader.readAndCheckSignature(R)){this.reader.index-=4;var X=this.reader.readString(4);throw new Error("Corrupted zip or bug: unexpected signature ("+u.pretty(X)+", expected "+u.pretty(R)+")")}},isSignature:function(R,X){var H=this.reader.index;this.reader.setIndex(R);var S=this.reader.readString(4)===X;return this.reader.setIndex(H),S},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 R=this.reader.readData(this.zipCommentLength),X=p.uint8array?"uint8array":"array",H=u.transformTo(X,R);this.zipComment=this.loadOptions.decodeFileName(H)},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 R,X,H,S=this.zip64EndOfCentralSize-44;0<S;)R=this.reader.readInt(2),X=this.reader.readInt(4),H=this.reader.readData(X),this.zip64ExtensibleData[R]={id:R,length:X,value:H}},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 R,X;for(R=0;R<this.files.length;R++)X=this.files[R],this.reader.setIndex(X.localHeaderOffset),this.checkSignature(m.LOCAL_FILE_HEADER),X.readLocalPart(this.reader),X.handleUTF8(),X.processAttributes()},readCentralDir:function(){var R;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(m.CENTRAL_FILE_HEADER);)(R=new Z({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(R);if(this.centralDirRecords!==this.files.length&&this.centralDirRecords!==0&&this.files.length===0)throw new Error("Corrupted zip or bug: expected "+this.centralDirRecords+" records in central dir, got "+this.files.length)},readEndOfCentral:function(){var R=this.reader.lastIndexOfSignature(m.CENTRAL_DIRECTORY_END);if(R<0)throw this.isSignature(0,m.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(R);var X=R;if(this.checkSignature(m.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===u.MAX_VALUE_16BITS||this.diskWithCentralDirStart===u.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===u.MAX_VALUE_16BITS||this.centralDirRecords===u.MAX_VALUE_16BITS||this.centralDirSize===u.MAX_VALUE_32BITS||this.centralDirOffset===u.MAX_VALUE_32BITS){if(this.zip64=!0,(R=this.reader.lastIndexOfSignature(m.ZIP64_CENTRAL_DIRECTORY_LOCATOR))<0)throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator");if(this.reader.setIndex(R),this.checkSignature(m.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,m.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(m.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(m.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var H=this.centralDirOffset+this.centralDirSize;this.zip64&&(H+=20,H+=12+this.zip64EndOfCentralSize);var S=X-H;if(0<S)this.isSignature(X,m.CENTRAL_FILE_HEADER)||(this.reader.zero=S);else if(S<0)throw new Error("Corrupted zip: missing "+Math.abs(S)+" bytes.")},prepareReader:function(R){this.reader=b(R)},load:function(R){this.prepareReader(R),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},r.exports=Y},{"./reader/readerFor":22,"./signature":23,"./support":30,"./utils":32,"./zipEntry":34}],34:[function(c,r,h){var b=c("./reader/readerFor"),u=c("./utils"),m=c("./compressedObject"),Z=c("./crc32"),p=c("./utf8"),Y=c("./compressions"),R=c("./support");function X(H,S){this.options=H,this.loadOptions=S}X.prototype={isEncrypted:function(){return(1&this.bitFlag)==1},useUTF8:function(){return(2048&this.bitFlag)==2048},readLocalPart:function(H){var S,z;if(H.skip(22),this.fileNameLength=H.readInt(2),z=H.readInt(2),this.fileName=H.readData(this.fileNameLength),H.skip(z),this.compressedSize===-1||this.uncompressedSize===-1)throw new Error("Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)");if((S=function(v){for(var K in Y)if(Object.prototype.hasOwnProperty.call(Y,K)&&Y[K].magic===v)return Y[K];return null}(this.compressionMethod))===null)throw new Error("Corrupted zip : compression "+u.pretty(this.compressionMethod)+" unknown (inner file : "+u.transformTo("string",this.fileName)+")");this.decompressed=new m(this.compressedSize,this.uncompressedSize,this.crc32,S,H.readData(this.compressedSize))},readCentralPart:function(H){this.versionMadeBy=H.readInt(2),H.skip(2),this.bitFlag=H.readInt(2),this.compressionMethod=H.readString(2),this.date=H.readDate(),this.crc32=H.readInt(4),this.compressedSize=H.readInt(4),this.uncompressedSize=H.readInt(4);var S=H.readInt(2);if(this.extraFieldsLength=H.readInt(2),this.fileCommentLength=H.readInt(2),this.diskNumberStart=H.readInt(2),this.internalFileAttributes=H.readInt(2),this.externalFileAttributes=H.readInt(4),this.localHeaderOffset=H.readInt(4),this.isEncrypted())throw new Error("Encrypted zip are not supported");H.skip(S),this.readExtraFields(H),this.parseZIP64ExtraField(H),this.fileComment=H.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var H=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),H==0&&(this.dosPermissions=63&this.externalFileAttributes),H==3&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||this.fileNameStr.slice(-1)!=="/"||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var H=b(this.extraFields[1].value);this.uncompressedSize===u.MAX_VALUE_32BITS&&(this.uncompressedSize=H.readInt(8)),this.compressedSize===u.MAX_VALUE_32BITS&&(this.compressedSize=H.readInt(8)),this.localHeaderOffset===u.MAX_VALUE_32BITS&&(this.localHeaderOffset=H.readInt(8)),this.diskNumberStart===u.MAX_VALUE_32BITS&&(this.diskNumberStart=H.readInt(4))}},readExtraFields:function(H){var S,z,v,K=H.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});H.index+4<K;)S=H.readInt(2),z=H.readInt(2),v=H.readData(z),this.extraFields[S]={id:S,length:z,value:v};H.setIndex(K)},handleUTF8:function(){var H=R.uint8array?"uint8array":"array";if(this.useUTF8())this.fileNameStr=p.utf8decode(this.fileName),this.fileCommentStr=p.utf8decode(this.fileComment);else{var S=this.findExtraFieldUnicodePath();if(S!==null)this.fileNameStr=S;else{var z=u.transformTo(H,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(z)}var v=this.findExtraFieldUnicodeComment();if(v!==null)this.fileCommentStr=v;else{var K=u.transformTo(H,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(K)}}},findExtraFieldUnicodePath:function(){var H=this.extraFields[28789];if(H){var S=b(H.value);return S.readInt(1)!==1||Z(this.fileName)!==S.readInt(4)?null:p.utf8decode(S.readData(H.length-5))}return null},findExtraFieldUnicodeComment:function(){var H=this.extraFields[25461];if(H){var S=b(H.value);return S.readInt(1)!==1||Z(this.fileComment)!==S.readInt(4)?null:p.utf8decode(S.readData(H.length-5))}return null}},r.exports=X},{"./compressedObject":2,"./compressions":3,"./crc32":4,"./reader/readerFor":22,"./support":30,"./utf8":31,"./utils":32}],35:[function(c,r,h){function b(S,z,v){this.name=S,this.dir=v.dir,this.date=v.date,this.comment=v.comment,this.unixPermissions=v.unixPermissions,this.dosPermissions=v.dosPermissions,this._data=z,this._dataBinary=v.binary,this.options={compression:v.compression,compressionOptions:v.compressionOptions}}var u=c("./stream/StreamHelper"),m=c("./stream/DataWorker"),Z=c("./utf8"),p=c("./compressedObject"),Y=c("./stream/GenericWorker");b.prototype={internalStream:function(S){var z=null,v="string";try{if(!S)throw new Error("No output type specified.");var K=(v=S.toLowerCase())==="string"||v==="text";v!=="binarystring"&&v!=="text"||(v="string"),z=this._decompressWorker();var V=!this._dataBinary;V&&!K&&(z=z.pipe(new Z.Utf8EncodeWorker)),!V&&K&&(z=z.pipe(new Z.Utf8DecodeWorker))}catch(N){(z=new Y("error")).error(N)}return new u(z,v,"")},async:function(S,z){return this.internalStream(S).accumulate(z)},nodeStream:function(S,z){return this.internalStream(S||"nodebuffer").toNodejsStream(z)},_compressWorker:function(S,z){if(this._data instanceof p&&this._data.compression.magic===S.magic)return this._data.getCompressedWorker();var v=this._decompressWorker();return this._dataBinary||(v=v.pipe(new Z.Utf8EncodeWorker)),p.createWorkerFrom(v,S,z)},_decompressWorker:function(){return this._data instanceof p?this._data.getContentWorker():this._data instanceof Y?this._data:new m(this._data)}};for(var R=["asText","asBinary","asNodeBuffer","asUint8Array","asArrayBuffer"],X=function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},H=0;H<R.length;H++)b.prototype[R[H]]=X;r.exports=b},{"./compressedObject":2,"./stream/DataWorker":27,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31}],36:[function(c,r,h){(function(b){var u,m,Z=b.MutationObserver||b.WebKitMutationObserver;if(Z){var p=0,Y=new Z(S),R=b.document.createTextNode("");Y.observe(R,{characterData:!0}),u=function(){R.data=p=++p%2}}else if(b.setImmediate||b.MessageChannel===void 0)u="document"in b&&"onreadystatechange"in b.document.createElement("script")?function(){var z=b.document.createElement("script");z.onreadystatechange=function(){S(),z.onreadystatechange=null,z.parentNode.removeChild(z),z=null},b.document.documentElement.appendChild(z)}:function(){setTimeout(S,0)};else{var X=new b.MessageChannel;X.port1.onmessage=S,u=function(){X.port2.postMessage(0)}}var H=[];function S(){var z,v;m=!0;for(var K=H.length;K;){for(v=H,H=[],z=-1;++z<K;)v[z]();K=H.length}m=!1}r.exports=function(z){H.push(z)!==1||m||u()}}).call(this,A!==void 0?A:typeof self<"u"?self:typeof window<"u"?window:{})},{}],37:[function(c,r,h){var b=c("immediate");function u(){}var m={},Z=["REJECTED"],p=["FULFILLED"],Y=["PENDING"];function R(K){if(typeof K!="function")throw new TypeError("resolver must be a function");this.state=Y,this.queue=[],this.outcome=void 0,K!==u&&z(this,K)}function X(K,V,N){this.promise=K,typeof V=="function"&&(this.onFulfilled=V,this.callFulfilled=this.otherCallFulfilled),typeof N=="function"&&(this.onRejected=N,this.callRejected=this.otherCallRejected)}function H(K,V,N){b(function(){var B;try{B=V(N)}catch(G){return m.reject(K,G)}B===K?m.reject(K,new TypeError("Cannot resolve promise with itself")):m.resolve(K,B)})}function S(K){var V=K&&K.then;if(K&&(typeof K=="object"||typeof K=="function")&&typeof V=="function")return function(){V.apply(K,arguments)}}function z(K,V){var N=!1;function B(W){N||(N=!0,m.reject(K,W))}function G(W){N||(N=!0,m.resolve(K,W))}var w=v(function(){V(G,B)});w.status==="error"&&B(w.value)}function v(K,V){var N={};try{N.value=K(V),N.status="success"}catch(B){N.status="error",N.value=B}return N}(r.exports=R).prototype.finally=function(K){if(typeof K!="function")return this;var V=this.constructor;return this.then(function(N){return V.resolve(K()).then(function(){return N})},function(N){return V.resolve(K()).then(function(){throw N})})},R.prototype.catch=function(K){return this.then(null,K)},R.prototype.then=function(K,V){if(typeof K!="function"&&this.state===p||typeof V!="function"&&this.state===Z)return this;var N=new this.constructor(u);return this.state!==Y?H(N,this.state===p?K:V,this.outcome):this.queue.push(new X(N,K,V)),N},X.prototype.callFulfilled=function(K){m.resolve(this.promise,K)},X.prototype.otherCallFulfilled=function(K){H(this.promise,this.onFulfilled,K)},X.prototype.callRejected=function(K){m.reject(this.promise,K)},X.prototype.otherCallRejected=function(K){H(this.promise,this.onRejected,K)},m.resolve=function(K,V){var N=v(S,V);if(N.status==="error")return m.reject(K,N.value);var B=N.value;if(B)z(K,B);else{K.state=p,K.outcome=V;for(var G=-1,w=K.queue.length;++G<w;)K.queue[G].callFulfilled(V)}return K},m.reject=function(K,V){K.state=Z,K.outcome=V;for(var N=-1,B=K.queue.length;++N<B;)K.queue[N].callRejected(V);return K},R.resolve=function(K){return K instanceof this?K:m.resolve(new this(u),K)},R.reject=function(K){var V=new this(u);return m.reject(V,K)},R.all=function(K){var V=this;if(Object.prototype.toString.call(K)!=="[object Array]")return this.reject(new TypeError("must be an array"));var N=K.length,B=!1;if(!N)return this.resolve([]);for(var G=new Array(N),w=0,W=-1,y=new this(u);++W<N;)f(K[W],W);return y;function f(D,F){V.resolve(D).then(function(T){G[F]=T,++w!==N||B||(B=!0,m.resolve(y,G))},function(T){B||(B=!0,m.reject(y,T))})}},R.race=function(K){if(Object.prototype.toString.call(K)!=="[object Array]")return this.reject(new TypeError("must be an array"));var V=K.length,N=!1;if(!V)return this.resolve([]);for(var B,G=-1,w=new this(u);++G<V;)B=K[G],this.resolve(B).then(function(W){N||(N=!0,m.resolve(w,W))},function(W){N||(N=!0,m.reject(w,W))});return w}},{immediate:36}],38:[function(c,r,h){var b={};(0,c("./lib/utils/common").assign)(b,c("./lib/deflate"),c("./lib/inflate"),c("./lib/zlib/constants")),r.exports=b},{"./lib/deflate":39,"./lib/inflate":40,"./lib/utils/common":41,"./lib/zlib/constants":44}],39:[function(c,r,h){var b=c("./zlib/deflate"),u=c("./utils/common"),m=c("./utils/strings"),Z=c("./zlib/messages"),p=c("./zlib/zstream"),Y=Object.prototype.toString;function R(H){if(!(this instanceof R))return new R(H);this.options=u.assign({level:-1,method:8,chunkSize:16384,windowBits:15,memLevel:8,strategy:0,to:""},H||{});var S=this.options;S.raw&&0<S.windowBits?S.windowBits=-S.windowBits:S.gzip&&0<S.windowBits&&S.windowBits<16&&(S.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new p,this.strm.avail_out=0;var z=b.deflateInit2(this.strm,S.level,S.method,S.windowBits,S.memLevel,S.strategy);if(z!==0)throw new Error(Z[z]);if(S.header&&b.deflateSetHeader(this.strm,S.header),S.dictionary){var v;if(v=typeof S.dictionary=="string"?m.string2buf(S.dictionary):Y.call(S.dictionary)==="[object ArrayBuffer]"?new Uint8Array(S.dictionary):S.dictionary,(z=b.deflateSetDictionary(this.strm,v))!==0)throw new Error(Z[z]);this._dict_set=!0}}function X(H,S){var z=new R(S);if(z.push(H,!0),z.err)throw z.msg||Z[z.err];return z.result}R.prototype.push=function(H,S){var z,v,K=this.strm,V=this.options.chunkSize;if(this.ended)return!1;v=S===~~S?S:S===!0?4:0,typeof H=="string"?K.input=m.string2buf(H):Y.call(H)==="[object ArrayBuffer]"?K.input=new Uint8Array(H):K.input=H,K.next_in=0,K.avail_in=K.input.length;do{if(K.avail_out===0&&(K.output=new u.Buf8(V),K.next_out=0,K.avail_out=V),(z=b.deflate(K,v))!==1&&z!==0)return this.onEnd(z),!(this.ended=!0);K.avail_out!==0&&(K.avail_in!==0||v!==4&&v!==2)||(this.options.to==="string"?this.onData(m.buf2binstring(u.shrinkBuf(K.output,K.next_out))):this.onData(u.shrinkBuf(K.output,K.next_out)))}while((0<K.avail_in||K.avail_out===0)&&z!==1);return v===4?(z=b.deflateEnd(this.strm),this.onEnd(z),this.ended=!0,z===0):v!==2||(this.onEnd(0),!(K.avail_out=0))},R.prototype.onData=function(H){this.chunks.push(H)},R.prototype.onEnd=function(H){H===0&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=u.flattenChunks(this.chunks)),this.chunks=[],this.err=H,this.msg=this.strm.msg},h.Deflate=R,h.deflate=X,h.deflateRaw=function(H,S){return(S=S||{}).raw=!0,X(H,S)},h.gzip=function(H,S){return(S=S||{}).gzip=!0,X(H,S)}},{"./utils/common":41,"./utils/strings":42,"./zlib/deflate":46,"./zlib/messages":51,"./zlib/zstream":53}],40:[function(c,r,h){var b=c("./zlib/inflate"),u=c("./utils/common"),m=c("./utils/strings"),Z=c("./zlib/constants"),p=c("./zlib/messages"),Y=c("./zlib/zstream"),R=c("./zlib/gzheader"),X=Object.prototype.toString;function H(z){if(!(this instanceof H))return new H(z);this.options=u.assign({chunkSize:16384,windowBits:0,to:""},z||{});var v=this.options;v.raw&&0<=v.windowBits&&v.windowBits<16&&(v.windowBits=-v.windowBits,v.windowBits===0&&(v.windowBits=-15)),!(0<=v.windowBits&&v.windowBits<16)||z&&z.windowBits||(v.windowBits+=32),15<v.windowBits&&v.windowBits<48&&(15&v.windowBits)==0&&(v.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Y,this.strm.avail_out=0;var K=b.inflateInit2(this.strm,v.windowBits);if(K!==Z.Z_OK)throw new Error(p[K]);this.header=new R,b.inflateGetHeader(this.strm,this.header)}function S(z,v){var K=new H(v);if(K.push(z,!0),K.err)throw K.msg||p[K.err];return K.result}H.prototype.push=function(z,v){var K,V,N,B,G,w,W=this.strm,y=this.options.chunkSize,f=this.options.dictionary,D=!1;if(this.ended)return!1;V=v===~~v?v:v===!0?Z.Z_FINISH:Z.Z_NO_FLUSH,typeof z=="string"?W.input=m.binstring2buf(z):X.call(z)==="[object ArrayBuffer]"?W.input=new Uint8Array(z):W.input=z,W.next_in=0,W.avail_in=W.input.length;do{if(W.avail_out===0&&(W.output=new u.Buf8(y),W.next_out=0,W.avail_out=y),(K=b.inflate(W,Z.Z_NO_FLUSH))===Z.Z_NEED_DICT&&f&&(w=typeof f=="string"?m.string2buf(f):X.call(f)==="[object ArrayBuffer]"?new Uint8Array(f):f,K=b.inflateSetDictionary(this.strm,w)),K===Z.Z_BUF_ERROR&&D===!0&&(K=Z.Z_OK,D=!1),K!==Z.Z_STREAM_END&&K!==Z.Z_OK)return this.onEnd(K),!(this.ended=!0);W.next_out&&(W.avail_out!==0&&K!==Z.Z_STREAM_END&&(W.avail_in!==0||V!==Z.Z_FINISH&&V!==Z.Z_SYNC_FLUSH)||(this.options.to==="string"?(N=m.utf8border(W.output,W.next_out),B=W.next_out-N,G=m.buf2string(W.output,N),W.next_out=B,W.avail_out=y-B,B&&u.arraySet(W.output,W.output,N,B,0),this.onData(G)):this.onData(u.shrinkBuf(W.output,W.next_out)))),W.avail_in===0&&W.avail_out===0&&(D=!0)}while((0<W.avail_in||W.avail_out===0)&&K!==Z.Z_STREAM_END);return K===Z.Z_STREAM_END&&(V=Z.Z_FINISH),V===Z.Z_FINISH?(K=b.inflateEnd(this.strm),this.onEnd(K),this.ended=!0,K===Z.Z_OK):V!==Z.Z_SYNC_FLUSH||(this.onEnd(Z.Z_OK),!(W.avail_out=0))},H.prototype.onData=function(z){this.chunks.push(z)},H.prototype.onEnd=function(z){z===Z.Z_OK&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=u.flattenChunks(this.chunks)),this.chunks=[],this.err=z,this.msg=this.strm.msg},h.Inflate=H,h.inflate=S,h.inflateRaw=function(z,v){return(v=v||{}).raw=!0,S(z,v)},h.ungzip=S},{"./utils/common":41,"./utils/strings":42,"./zlib/constants":44,"./zlib/gzheader":47,"./zlib/inflate":49,"./zlib/messages":51,"./zlib/zstream":53}],41:[function(c,r,h){var b=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Int32Array<"u";h.assign=function(Z){for(var p=Array.prototype.slice.call(arguments,1);p.length;){var Y=p.shift();if(Y){if(typeof Y!="object")throw new TypeError(Y+"must be non-object");for(var R in Y)Y.hasOwnProperty(R)&&(Z[R]=Y[R])}}return Z},h.shrinkBuf=function(Z,p){return Z.length===p?Z:Z.subarray?Z.subarray(0,p):(Z.length=p,Z)};var u={arraySet:function(Z,p,Y,R,X){if(p.subarray&&Z.subarray)Z.set(p.subarray(Y,Y+R),X);else for(var H=0;H<R;H++)Z[X+H]=p[Y+H]},flattenChunks:function(Z){var p,Y,R,X,H,S;for(p=R=0,Y=Z.length;p<Y;p++)R+=Z[p].length;for(S=new Uint8Array(R),p=X=0,Y=Z.length;p<Y;p++)H=Z[p],S.set(H,X),X+=H.length;return S}},m={arraySet:function(Z,p,Y,R,X){for(var H=0;H<R;H++)Z[X+H]=p[Y+H]},flattenChunks:function(Z){return[].concat.apply([],Z)}};h.setTyped=function(Z){Z?(h.Buf8=Uint8Array,h.Buf16=Uint16Array,h.Buf32=Int32Array,h.assign(h,u)):(h.Buf8=Array,h.Buf16=Array,h.Buf32=Array,h.assign(h,m))},h.setTyped(b)},{}],42:[function(c,r,h){var b=c("./common"),u=!0,m=!0;try{String.fromCharCode.apply(null,[0])}catch{u=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch{m=!1}for(var Z=new b.Buf8(256),p=0;p<256;p++)Z[p]=252<=p?6:248<=p?5:240<=p?4:224<=p?3:192<=p?2:1;function Y(R,X){if(X<65537&&(R.subarray&&m||!R.subarray&&u))return String.fromCharCode.apply(null,b.shrinkBuf(R,X));for(var H="",S=0;S<X;S++)H+=String.fromCharCode(R[S]);return H}Z[254]=Z[254]=1,h.string2buf=function(R){var X,H,S,z,v,K=R.length,V=0;for(z=0;z<K;z++)(64512&(H=R.charCodeAt(z)))==55296&&z+1<K&&(64512&(S=R.charCodeAt(z+1)))==56320&&(H=65536+(H-55296<<10)+(S-56320),z++),V+=H<128?1:H<2048?2:H<65536?3:4;for(X=new b.Buf8(V),z=v=0;v<V;z++)(64512&(H=R.charCodeAt(z)))==55296&&z+1<K&&(64512&(S=R.charCodeAt(z+1)))==56320&&(H=65536+(H-55296<<10)+(S-56320),z++),H<128?X[v++]=H:(H<2048?X[v++]=192|H>>>6:(H<65536?X[v++]=224|H>>>12:(X[v++]=240|H>>>18,X[v++]=128|H>>>12&63),X[v++]=128|H>>>6&63),X[v++]=128|63&H);return X},h.buf2binstring=function(R){return Y(R,R.length)},h.binstring2buf=function(R){for(var X=new b.Buf8(R.length),H=0,S=X.length;H<S;H++)X[H]=R.charCodeAt(H);return X},h.buf2string=function(R,X){var H,S,z,v,K=X||R.length,V=new Array(2*K);for(H=S=0;H<K;)if((z=R[H++])<128)V[S++]=z;else if(4<(v=Z[z]))V[S++]=65533,H+=v-1;else{for(z&=v===2?31:v===3?15:7;1<v&&H<K;)z=z<<6|63&R[H++],v--;1<v?V[S++]=65533:z<65536?V[S++]=z:(z-=65536,V[S++]=55296|z>>10&1023,V[S++]=56320|1023&z)}return Y(V,S)},h.utf8border=function(R,X){var H;for((X=X||R.length)>R.length&&(X=R.length),H=X-1;0<=H&&(192&R[H])==128;)H--;return H<0||H===0?X:H+Z[R[H]]>X?H:X}},{"./common":41}],43:[function(c,r,h){r.exports=function(b,u,m,Z){for(var p=65535&b|0,Y=b>>>16&65535|0,R=0;m!==0;){for(m-=R=2e3<m?2e3:m;Y=Y+(p=p+u[Z++]|0)|0,--R;);p%=65521,Y%=65521}return p|Y<<16|0}},{}],44:[function(c,r,h){r.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(c,r,h){var b=function(){for(var u,m=[],Z=0;Z<256;Z++){u=Z;for(var p=0;p<8;p++)u=1&u?3988292384^u>>>1:u>>>1;m[Z]=u}return m}();r.exports=function(u,m,Z,p){var Y=b,R=p+Z;u^=-1;for(var X=p;X<R;X++)u=u>>>8^Y[255&(u^m[X])];return-1^u}},{}],46:[function(c,r,h){var b,u=c("../utils/common"),m=c("./trees"),Z=c("./adler32"),p=c("./crc32"),Y=c("./messages"),R=-2,X=258,H=262,S=113;function z(L,E){return L.msg=Y[E],E}function v(L){return(L<<1)-(4<L?9:0)}function K(L){for(var E=L.length;0<=--E;)L[E]=0}function V(L){var E=L.state,J=E.pending;J>L.avail_out&&(J=L.avail_out),J!==0&&(u.arraySet(L.output,E.pending_buf,E.pending_out,J,L.next_out),L.next_out+=J,E.pending_out+=J,L.total_out+=J,L.avail_out-=J,E.pending-=J,E.pending===0&&(E.pending_out=0))}function N(L,E){m._tr_flush_block(L,0<=L.block_start?L.block_start:-1,L.strstart-L.block_start,E),L.block_start=L.strstart,V(L.strm)}function B(L,E){L.pending_buf[L.pending++]=E}function G(L,E){L.pending_buf[L.pending++]=E>>>8&255,L.pending_buf[L.pending++]=255&E}function w(L,E){var J,k,j=L.max_chain_length,q=L.strstart,tg=L.prev_length,Cg=L.nice_match,x=L.strstart>L.w_size-H?L.strstart-(L.w_size-H):0,sg=L.window,Ag=L.w_mask,O=L.prev,_=L.strstart+X,Ig=sg[q+tg-1],ng=sg[q+tg];L.prev_length>=L.good_match&&(j>>=2),Cg>L.lookahead&&(Cg=L.lookahead);do if(sg[(J=E)+tg]===ng&&sg[J+tg-1]===Ig&&sg[J]===sg[q]&&sg[++J]===sg[q+1]){q+=2,J++;do;while(sg[++q]===sg[++J]&&sg[++q]===sg[++J]&&sg[++q]===sg[++J]&&sg[++q]===sg[++J]&&sg[++q]===sg[++J]&&sg[++q]===sg[++J]&&sg[++q]===sg[++J]&&sg[++q]===sg[++J]&&q<_);if(k=X-(_-q),q=_-X,tg<k){if(L.match_start=E,Cg<=(tg=k))break;Ig=sg[q+tg-1],ng=sg[q+tg]}}while((E=O[E&Ag])>x&&--j!=0);return tg<=L.lookahead?tg:L.lookahead}function W(L){var E,J,k,j,q,tg,Cg,x,sg,Ag,O=L.w_size;do{if(j=L.window_size-L.lookahead-L.strstart,L.strstart>=O+(O-H)){for(u.arraySet(L.window,L.window,O,O,0),L.match_start-=O,L.strstart-=O,L.block_start-=O,E=J=L.hash_size;k=L.head[--E],L.head[E]=O<=k?k-O:0,--J;);for(E=J=O;k=L.prev[--E],L.prev[E]=O<=k?k-O:0,--J;);j+=O}if(L.strm.avail_in===0)break;if(tg=L.strm,Cg=L.window,x=L.strstart+L.lookahead,Ag=void 0,(sg=j)<(Ag=tg.avail_in)&&(Ag=sg),J=Ag===0?0:(tg.avail_in-=Ag,u.arraySet(Cg,tg.input,tg.next_in,Ag,x),tg.state.wrap===1?tg.adler=Z(tg.adler,Cg,Ag,x):tg.state.wrap===2&&(tg.adler=p(tg.adler,Cg,Ag,x)),tg.next_in+=Ag,tg.total_in+=Ag,Ag),L.lookahead+=J,L.lookahead+L.insert>=3)for(q=L.strstart-L.insert,L.ins_h=L.window[q],L.ins_h=(L.ins_h<<L.hash_shift^L.window[q+1])&L.hash_mask;L.insert&&(L.ins_h=(L.ins_h<<L.hash_shift^L.window[q+3-1])&L.hash_mask,L.prev[q&L.w_mask]=L.head[L.ins_h],L.head[L.ins_h]=q,q++,L.insert--,!(L.lookahead+L.insert<3)););}while(L.lookahead<H&&L.strm.avail_in!==0)}function y(L,E){for(var J,k;;){if(L.lookahead<H){if(W(L),L.lookahead<H&&E===0)return 1;if(L.lookahead===0)break}if(J=0,L.lookahead>=3&&(L.ins_h=(L.ins_h<<L.hash_shift^L.window[L.strstart+3-1])&L.hash_mask,J=L.prev[L.strstart&L.w_mask]=L.head[L.ins_h],L.head[L.ins_h]=L.strstart),J!==0&&L.strstart-J<=L.w_size-H&&(L.match_length=w(L,J)),L.match_length>=3)if(k=m._tr_tally(L,L.strstart-L.match_start,L.match_length-3),L.lookahead-=L.match_length,L.match_length<=L.max_lazy_match&&L.lookahead>=3){for(L.match_length--;L.strstart++,L.ins_h=(L.ins_h<<L.hash_shift^L.window[L.strstart+3-1])&L.hash_mask,J=L.prev[L.strstart&L.w_mask]=L.head[L.ins_h],L.head[L.ins_h]=L.strstart,--L.match_length!=0;);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 k=m._tr_tally(L,0,L.window[L.strstart]),L.lookahead--,L.strstart++;if(k&&(N(L,!1),L.strm.avail_out===0))return 1}return L.insert=L.strstart<2?L.strstart:2,E===4?(N(L,!0),L.strm.avail_out===0?3:4):L.last_lit&&(N(L,!1),L.strm.avail_out===0)?1:2}function f(L,E){for(var J,k,j;;){if(L.lookahead<H){if(W(L),L.lookahead<H&&E===0)return 1;if(L.lookahead===0)break}if(J=0,L.lookahead>=3&&(L.ins_h=(L.ins_h<<L.hash_shift^L.window[L.strstart+3-1])&L.hash_mask,J=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=2,J!==0&&L.prev_length<L.max_lazy_match&&L.strstart-J<=L.w_size-H&&(L.match_length=w(L,J),L.match_length<=5&&(L.strategy===1||L.match_length===3&&4096<L.strstart-L.match_start)&&(L.match_length=2)),L.prev_length>=3&&L.match_length<=L.prev_length){for(j=L.strstart+L.lookahead-3,k=m._tr_tally(L,L.strstart-1-L.prev_match,L.prev_length-3),L.lookahead-=L.prev_length-1,L.prev_length-=2;++L.strstart<=j&&(L.ins_h=(L.ins_h<<L.hash_shift^L.window[L.strstart+3-1])&L.hash_mask,J=L.prev[L.strstart&L.w_mask]=L.head[L.ins_h],L.head[L.ins_h]=L.strstart),--L.prev_length!=0;);if(L.match_available=0,L.match_length=2,L.strstart++,k&&(N(L,!1),L.strm.avail_out===0))return 1}else if(L.match_available){if((k=m._tr_tally(L,0,L.window[L.strstart-1]))&&N(L,!1),L.strstart++,L.lookahead--,L.strm.avail_out===0)return 1}else L.match_available=1,L.strstart++,L.lookahead--}return L.match_available&&(k=m._tr_tally(L,0,L.window[L.strstart-1]),L.match_available=0),L.insert=L.strstart<2?L.strstart:2,E===4?(N(L,!0),L.strm.avail_out===0?3:4):L.last_lit&&(N(L,!1),L.strm.avail_out===0)?1:2}function D(L,E,J,k,j){this.good_length=L,this.max_lazy=E,this.nice_length=J,this.max_chain=k,this.func=j}function F(){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=8,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 u.Buf16(1146),this.dyn_dtree=new u.Buf16(122),this.bl_tree=new u.Buf16(78),K(this.dyn_ltree),K(this.dyn_dtree),K(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new u.Buf16(16),this.heap=new u.Buf16(573),K(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new u.Buf16(573),K(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 T(L){var E;return L&&L.state?(L.total_in=L.total_out=0,L.data_type=2,(E=L.state).pending=0,E.pending_out=0,E.wrap<0&&(E.wrap=-E.wrap),E.status=E.wrap?42:S,L.adler=E.wrap===2?0:1,E.last_flush=0,m._tr_init(E),0):z(L,R)}function Q(L){var E=T(L);return E===0&&function(J){J.window_size=2*J.w_size,K(J.head),J.max_lazy_match=b[J.level].max_lazy,J.good_match=b[J.level].good_length,J.nice_match=b[J.level].nice_length,J.max_chain_length=b[J.level].max_chain,J.strstart=0,J.block_start=0,J.lookahead=0,J.insert=0,J.match_length=J.prev_length=2,J.match_available=0,J.ins_h=0}(L.state),E}function P(L,E,J,k,j,q){if(!L)return R;var tg=1;if(E===-1&&(E=6),k<0?(tg=0,k=-k):15<k&&(tg=2,k-=16),j<1||9<j||J!==8||k<8||15<k||E<0||9<E||q<0||4<q)return z(L,R);k===8&&(k=9);var Cg=new F;return(L.state=Cg).strm=L,Cg.wrap=tg,Cg.gzhead=null,Cg.w_bits=k,Cg.w_size=1<<Cg.w_bits,Cg.w_mask=Cg.w_size-1,Cg.hash_bits=j+7,Cg.hash_size=1<<Cg.hash_bits,Cg.hash_mask=Cg.hash_size-1,Cg.hash_shift=~~((Cg.hash_bits+3-1)/3),Cg.window=new u.Buf8(2*Cg.w_size),Cg.head=new u.Buf16(Cg.hash_size),Cg.prev=new u.Buf16(Cg.w_size),Cg.lit_bufsize=1<<j+6,Cg.pending_buf_size=4*Cg.lit_bufsize,Cg.pending_buf=new u.Buf8(Cg.pending_buf_size),Cg.d_buf=1*Cg.lit_bufsize,Cg.l_buf=3*Cg.lit_bufsize,Cg.level=E,Cg.strategy=q,Cg.method=J,Q(L)}b=[new D(0,0,0,0,function(L,E){var J=65535;for(J>L.pending_buf_size-5&&(J=L.pending_buf_size-5);;){if(L.lookahead<=1){if(W(L),L.lookahead===0&&E===0)return 1;if(L.lookahead===0)break}L.strstart+=L.lookahead,L.lookahead=0;var k=L.block_start+J;if((L.strstart===0||L.strstart>=k)&&(L.lookahead=L.strstart-k,L.strstart=k,N(L,!1),L.strm.avail_out===0)||L.strstart-L.block_start>=L.w_size-H&&(N(L,!1),L.strm.avail_out===0))return 1}return L.insert=0,E===4?(N(L,!0),L.strm.avail_out===0?3:4):(L.strstart>L.block_start&&(N(L,!1),L.strm.avail_out),1)}),new D(4,4,8,4,y),new D(4,5,16,8,y),new D(4,6,32,32,y),new D(4,4,16,16,f),new D(8,16,32,32,f),new D(8,16,128,128,f),new D(8,32,128,256,f),new D(32,128,258,1024,f),new D(32,258,258,4096,f)],h.deflateInit=function(L,E){return P(L,E,8,15,8,0)},h.deflateInit2=P,h.deflateReset=Q,h.deflateResetKeep=T,h.deflateSetHeader=function(L,E){return L&&L.state?L.state.wrap!==2?R:(L.state.gzhead=E,0):R},h.deflate=function(L,E){var J,k,j,q;if(!L||!L.state||5<E||E<0)return L?z(L,R):R;if(k=L.state,!L.output||!L.input&&L.avail_in!==0||k.status===666&&E!==4)return z(L,L.avail_out===0?-5:R);if(k.strm=L,J=k.last_flush,k.last_flush=E,k.status===42)if(k.wrap===2)L.adler=0,B(k,31),B(k,139),B(k,8),k.gzhead?(B(k,(k.gzhead.text?1:0)+(k.gzhead.hcrc?2:0)+(k.gzhead.extra?4:0)+(k.gzhead.name?8:0)+(k.gzhead.comment?16:0)),B(k,255&k.gzhead.time),B(k,k.gzhead.time>>8&255),B(k,k.gzhead.time>>16&255),B(k,k.gzhead.time>>24&255),B(k,k.level===9?2:2<=k.strategy||k.level<2?4:0),B(k,255&k.gzhead.os),k.gzhead.extra&&k.gzhead.extra.length&&(B(k,255&k.gzhead.extra.length),B(k,k.gzhead.extra.length>>8&255)),k.gzhead.hcrc&&(L.adler=p(L.adler,k.pending_buf,k.pending,0)),k.gzindex=0,k.status=69):(B(k,0),B(k,0),B(k,0),B(k,0),B(k,0),B(k,k.level===9?2:2<=k.strategy||k.level<2?4:0),B(k,3),k.status=S);else{var tg=8+(k.w_bits-8<<4)<<8;tg|=(2<=k.strategy||k.level<2?0:k.level<6?1:k.level===6?2:3)<<6,k.strstart!==0&&(tg|=32),tg+=31-tg%31,k.status=S,G(k,tg),k.strstart!==0&&(G(k,L.adler>>>16),G(k,65535&L.adler)),L.adler=1}if(k.status===69)if(k.gzhead.extra){for(j=k.pending;k.gzindex<(65535&k.gzhead.extra.length)&&(k.pending!==k.pending_buf_size||(k.gzhead.hcrc&&k.pending>j&&(L.adler=p(L.adler,k.pending_buf,k.pending-j,j)),V(L),j=k.pending,k.pending!==k.pending_buf_size));)B(k,255&k.gzhead.extra[k.gzindex]),k.gzindex++;k.gzhead.hcrc&&k.pending>j&&(L.adler=p(L.adler,k.pending_buf,k.pending-j,j)),k.gzindex===k.gzhead.extra.length&&(k.gzindex=0,k.status=73)}else k.status=73;if(k.status===73)if(k.gzhead.name){j=k.pending;do{if(k.pending===k.pending_buf_size&&(k.gzhead.hcrc&&k.pending>j&&(L.adler=p(L.adler,k.pending_buf,k.pending-j,j)),V(L),j=k.pending,k.pending===k.pending_buf_size)){q=1;break}q=k.gzindex<k.gzhead.name.length?255&k.gzhead.name.charCodeAt(k.gzindex++):0,B(k,q)}while(q!==0);k.gzhead.hcrc&&k.pending>j&&(L.adler=p(L.adler,k.pending_buf,k.pending-j,j)),q===0&&(k.gzindex=0,k.status=91)}else k.status=91;if(k.status===91)if(k.gzhead.comment){j=k.pending;do{if(k.pending===k.pending_buf_size&&(k.gzhead.hcrc&&k.pending>j&&(L.adler=p(L.adler,k.pending_buf,k.pending-j,j)),V(L),j=k.pending,k.pending===k.pending_buf_size)){q=1;break}q=k.gzindex<k.gzhead.comment.length?255&k.gzhead.comment.charCodeAt(k.gzindex++):0,B(k,q)}while(q!==0);k.gzhead.hcrc&&k.pending>j&&(L.adler=p(L.adler,k.pending_buf,k.pending-j,j)),q===0&&(k.status=103)}else k.status=103;if(k.status===103&&(k.gzhead.hcrc?(k.pending+2>k.pending_buf_size&&V(L),k.pending+2<=k.pending_buf_size&&(B(k,255&L.adler),B(k,L.adler>>8&255),L.adler=0,k.status=S)):k.status=S),k.pending!==0){if(V(L),L.avail_out===0)return k.last_flush=-1,0}else if(L.avail_in===0&&v(E)<=v(J)&&E!==4)return z(L,-5);if(k.status===666&&L.avail_in!==0)return z(L,-5);if(L.avail_in!==0||k.lookahead!==0||E!==0&&k.status!==666){var Cg=k.strategy===2?function(x,sg){for(var Ag;;){if(x.lookahead===0&&(W(x),x.lookahead===0)){if(sg===0)return 1;break}if(x.match_length=0,Ag=m._tr_tally(x,0,x.window[x.strstart]),x.lookahead--,x.strstart++,Ag&&(N(x,!1),x.strm.avail_out===0))return 1}return x.insert=0,sg===4?(N(x,!0),x.strm.avail_out===0?3:4):x.last_lit&&(N(x,!1),x.strm.avail_out===0)?1:2}(k,E):k.strategy===3?function(x,sg){for(var Ag,O,_,Ig,ng=x.window;;){if(x.lookahead<=X){if(W(x),x.lookahead<=X&&sg===0)return 1;if(x.lookahead===0)break}if(x.match_length=0,x.lookahead>=3&&0<x.strstart&&(O=ng[_=x.strstart-1])===ng[++_]&&O===ng[++_]&&O===ng[++_]){Ig=x.strstart+X;do;while(O===ng[++_]&&O===ng[++_]&&O===ng[++_]&&O===ng[++_]&&O===ng[++_]&&O===ng[++_]&&O===ng[++_]&&O===ng[++_]&&_<Ig);x.match_length=X-(Ig-_),x.match_length>x.lookahead&&(x.match_length=x.lookahead)}if(x.match_length>=3?(Ag=m._tr_tally(x,1,x.match_length-3),x.lookahead-=x.match_length,x.strstart+=x.match_length,x.match_length=0):(Ag=m._tr_tally(x,0,x.window[x.strstart]),x.lookahead--,x.strstart++),Ag&&(N(x,!1),x.strm.avail_out===0))return 1}return x.insert=0,sg===4?(N(x,!0),x.strm.avail_out===0?3:4):x.last_lit&&(N(x,!1),x.strm.avail_out===0)?1:2}(k,E):b[k.level].func(k,E);if(Cg!==3&&Cg!==4||(k.status=666),Cg===1||Cg===3)return L.avail_out===0&&(k.last_flush=-1),0;if(Cg===2&&(E===1?m._tr_align(k):E!==5&&(m._tr_stored_block(k,0,0,!1),E===3&&(K(k.head),k.lookahead===0&&(k.strstart=0,k.block_start=0,k.insert=0))),V(L),L.avail_out===0))return k.last_flush=-1,0}return E!==4?0:k.wrap<=0?1:(k.wrap===2?(B(k,255&L.adler),B(k,L.adler>>8&255),B(k,L.adler>>16&255),B(k,L.adler>>24&255),B(k,255&L.total_in),B(k,L.total_in>>8&255),B(k,L.total_in>>16&255),B(k,L.total_in>>24&255)):(G(k,L.adler>>>16),G(k,65535&L.adler)),V(L),0<k.wrap&&(k.wrap=-k.wrap),k.pending!==0?0:1)},h.deflateEnd=function(L){var E;return L&&L.state?(E=L.state.status)!==42&&E!==69&&E!==73&&E!==91&&E!==103&&E!==S&&E!==666?z(L,R):(L.state=null,E===S?z(L,-3):0):R},h.deflateSetDictionary=function(L,E){var J,k,j,q,tg,Cg,x,sg,Ag=E.length;if(!L||!L.state||(q=(J=L.state).wrap)===2||q===1&&J.status!==42||J.lookahead)return R;for(q===1&&(L.adler=Z(L.adler,E,Ag,0)),J.wrap=0,Ag>=J.w_size&&(q===0&&(K(J.head),J.strstart=0,J.block_start=0,J.insert=0),sg=new u.Buf8(J.w_size),u.arraySet(sg,E,Ag-J.w_size,J.w_size,0),E=sg,Ag=J.w_size),tg=L.avail_in,Cg=L.next_in,x=L.input,L.avail_in=Ag,L.next_in=0,L.input=E,W(J);J.lookahead>=3;){for(k=J.strstart,j=J.lookahead-2;J.ins_h=(J.ins_h<<J.hash_shift^J.window[k+3-1])&J.hash_mask,J.prev[k&J.w_mask]=J.head[J.ins_h],J.head[J.ins_h]=k,k++,--j;);J.strstart=k,J.lookahead=2,W(J)}return J.strstart+=J.lookahead,J.block_start=J.strstart,J.insert=J.lookahead,J.lookahead=0,J.match_length=J.prev_length=2,J.match_available=0,L.next_in=Cg,L.input=x,L.avail_in=tg,J.wrap=q,0},h.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./messages":51,"./trees":52}],47:[function(c,r,h){r.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(c,r,h){r.exports=function(b,u){var m,Z,p,Y,R,X,H,S,z,v,K,V,N,B,G,w,W,y,f,D,F,T,Q,P,L;m=b.state,Z=b.next_in,P=b.input,p=Z+(b.avail_in-5),Y=b.next_out,L=b.output,R=Y-(u-b.avail_out),X=Y+(b.avail_out-257),H=m.dmax,S=m.wsize,z=m.whave,v=m.wnext,K=m.window,V=m.hold,N=m.bits,B=m.lencode,G=m.distcode,w=(1<<m.lenbits)-1,W=(1<<m.distbits)-1;g:do{N<15&&(V+=P[Z++]<<N,N+=8,V+=P[Z++]<<N,N+=8),y=B[V&w];I:for(;;){if(V>>>=f=y>>>24,N-=f,(f=y>>>16&255)==0)L[Y++]=65535&y;else{if(!(16&f)){if((64&f)==0){y=B[(65535&y)+(V&(1<<f)-1)];continue I}if(32&f){m.mode=12;break g}b.msg="invalid literal/length code",m.mode=30;break g}D=65535&y,(f&=15)&&(N<f&&(V+=P[Z++]<<N,N+=8),D+=V&(1<<f)-1,V>>>=f,N-=f),N<15&&(V+=P[Z++]<<N,N+=8,V+=P[Z++]<<N,N+=8),y=G[V&W];C:for(;;){if(V>>>=f=y>>>24,N-=f,!(16&(f=y>>>16&255))){if((64&f)==0){y=G[(65535&y)+(V&(1<<f)-1)];continue C}b.msg="invalid distance code",m.mode=30;break g}if(F=65535&y,N<(f&=15)&&(V+=P[Z++]<<N,(N+=8)<f&&(V+=P[Z++]<<N,N+=8)),H<(F+=V&(1<<f)-1)){b.msg="invalid distance too far back",m.mode=30;break g}if(V>>>=f,N-=f,(f=Y-R)<F){if(z<(f=F-f)&&m.sane){b.msg="invalid distance too far back",m.mode=30;break g}if(Q=K,(T=0)===v){if(T+=S-f,f<D){for(D-=f;L[Y++]=K[T++],--f;);T=Y-F,Q=L}}else if(v<f){if(T+=S+v-f,(f-=v)<D){for(D-=f;L[Y++]=K[T++],--f;);if(T=0,v<D){for(D-=f=v;L[Y++]=K[T++],--f;);T=Y-F,Q=L}}}else if(T+=v-f,f<D){for(D-=f;L[Y++]=K[T++],--f;);T=Y-F,Q=L}for(;2<D;)L[Y++]=Q[T++],L[Y++]=Q[T++],L[Y++]=Q[T++],D-=3;D&&(L[Y++]=Q[T++],1<D&&(L[Y++]=Q[T++]))}else{for(T=Y-F;L[Y++]=L[T++],L[Y++]=L[T++],L[Y++]=L[T++],2<(D-=3););D&&(L[Y++]=L[T++],1<D&&(L[Y++]=L[T++]))}break}}break}}while(Z<p&&Y<X);Z-=D=N>>3,V&=(1<<(N-=D<<3))-1,b.next_in=Z,b.next_out=Y,b.avail_in=Z<p?p-Z+5:5-(Z-p),b.avail_out=Y<X?X-Y+257:257-(Y-X),m.hold=V,m.bits=N}},{}],49:[function(c,r,h){var b=c("../utils/common"),u=c("./adler32"),m=c("./crc32"),Z=c("./inffast"),p=c("./inftrees"),Y=-2;function R(w){return(w>>>24&255)+(w>>>8&65280)+((65280&w)<<8)+((255&w)<<24)}function X(){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 b.Buf16(320),this.work=new b.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function H(w){var W;return w&&w.state?(W=w.state,w.total_in=w.total_out=W.total=0,w.msg="",W.wrap&&(w.adler=1&W.wrap),W.mode=1,W.last=0,W.havedict=0,W.dmax=32768,W.head=null,W.hold=0,W.bits=0,W.lencode=W.lendyn=new b.Buf32(852),W.distcode=W.distdyn=new b.Buf32(592),W.sane=1,W.back=-1,0):Y}function S(w){var W;return w&&w.state?((W=w.state).wsize=0,W.whave=0,W.wnext=0,H(w)):Y}function z(w,W){var y,f;return w&&w.state?(f=w.state,W<0?(y=0,W=-W):(y=1+(W>>4),W<48&&(W&=15)),W&&(W<8||15<W)?Y:(f.window!==null&&f.wbits!==W&&(f.window=null),f.wrap=y,f.wbits=W,S(w))):Y}function v(w,W){var y,f;return w?(f=new X,(w.state=f).window=null,(y=z(w,W))!==0&&(w.state=null),y):Y}var K,V,N=!0;function B(w){if(N){var W;for(K=new b.Buf32(512),V=new b.Buf32(32),W=0;W<144;)w.lens[W++]=8;for(;W<256;)w.lens[W++]=9;for(;W<280;)w.lens[W++]=7;for(;W<288;)w.lens[W++]=8;for(p(1,w.lens,0,288,K,0,w.work,{bits:9}),W=0;W<32;)w.lens[W++]=5;p(2,w.lens,0,32,V,0,w.work,{bits:5}),N=!1}w.lencode=K,w.lenbits=9,w.distcode=V,w.distbits=5}function G(w,W,y,f){var D,F=w.state;return F.window===null&&(F.wsize=1<<F.wbits,F.wnext=0,F.whave=0,F.window=new b.Buf8(F.wsize)),f>=F.wsize?(b.arraySet(F.window,W,y-F.wsize,F.wsize,0),F.wnext=0,F.whave=F.wsize):(f<(D=F.wsize-F.wnext)&&(D=f),b.arraySet(F.window,W,y-f,D,F.wnext),(f-=D)?(b.arraySet(F.window,W,y-f,f,0),F.wnext=f,F.whave=F.wsize):(F.wnext+=D,F.wnext===F.wsize&&(F.wnext=0),F.whave<F.wsize&&(F.whave+=D))),0}h.inflateReset=S,h.inflateReset2=z,h.inflateResetKeep=H,h.inflateInit=function(w){return v(w,15)},h.inflateInit2=v,h.inflate=function(w,W){var y,f,D,F,T,Q,P,L,E,J,k,j,q,tg,Cg,x,sg,Ag,O,_,Ig,ng,ag,lg,cg=0,dg=new b.Buf8(4),hg=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!w||!w.state||!w.output||!w.input&&w.avail_in!==0)return Y;(y=w.state).mode===12&&(y.mode=13),T=w.next_out,D=w.output,P=w.avail_out,F=w.next_in,f=w.input,Q=w.avail_in,L=y.hold,E=y.bits,J=Q,k=P,ng=0;g:for(;;)switch(y.mode){case 1:if(y.wrap===0){y.mode=13;break}for(;E<16;){if(Q===0)break g;Q--,L+=f[F++]<<E,E+=8}if(2&y.wrap&&L===35615){dg[y.check=0]=255&L,dg[1]=L>>>8&255,y.check=m(y.check,dg,2,0),E=L=0,y.mode=2;break}if(y.flags=0,y.head&&(y.head.done=!1),!(1&y.wrap)||(((255&L)<<8)+(L>>8))%31){w.msg="incorrect header check",y.mode=30;break}if((15&L)!=8){w.msg="unknown compression method",y.mode=30;break}if(E-=4,Ig=8+(15&(L>>>=4)),y.wbits===0)y.wbits=Ig;else if(Ig>y.wbits){w.msg="invalid window size",y.mode=30;break}y.dmax=1<<Ig,w.adler=y.check=1,y.mode=512&L?10:12,E=L=0;break;case 2:for(;E<16;){if(Q===0)break g;Q--,L+=f[F++]<<E,E+=8}if(y.flags=L,(255&y.flags)!=8){w.msg="unknown compression method",y.mode=30;break}if(57344&y.flags){w.msg="unknown header flags set",y.mode=30;break}y.head&&(y.head.text=L>>8&1),512&y.flags&&(dg[0]=255&L,dg[1]=L>>>8&255,y.check=m(y.check,dg,2,0)),E=L=0,y.mode=3;case 3:for(;E<32;){if(Q===0)break g;Q--,L+=f[F++]<<E,E+=8}y.head&&(y.head.time=L),512&y.flags&&(dg[0]=255&L,dg[1]=L>>>8&255,dg[2]=L>>>16&255,dg[3]=L>>>24&255,y.check=m(y.check,dg,4,0)),E=L=0,y.mode=4;case 4:for(;E<16;){if(Q===0)break g;Q--,L+=f[F++]<<E,E+=8}y.head&&(y.head.xflags=255&L,y.head.os=L>>8),512&y.flags&&(dg[0]=255&L,dg[1]=L>>>8&255,y.check=m(y.check,dg,2,0)),E=L=0,y.mode=5;case 5:if(1024&y.flags){for(;E<16;){if(Q===0)break g;Q--,L+=f[F++]<<E,E+=8}y.length=L,y.head&&(y.head.extra_len=L),512&y.flags&&(dg[0]=255&L,dg[1]=L>>>8&255,y.check=m(y.check,dg,2,0)),E=L=0}else y.head&&(y.head.extra=null);y.mode=6;case 6:if(1024&y.flags&&(Q<(j=y.length)&&(j=Q),j&&(y.head&&(Ig=y.head.extra_len-y.length,y.head.extra||(y.head.extra=new Array(y.head.extra_len)),b.arraySet(y.head.extra,f,F,j,Ig)),512&y.flags&&(y.check=m(y.check,f,j,F)),Q-=j,F+=j,y.length-=j),y.length))break g;y.length=0,y.mode=7;case 7:if(2048&y.flags){if(Q===0)break g;for(j=0;Ig=f[F+j++],y.head&&Ig&&y.length<65536&&(y.head.name+=String.fromCharCode(Ig)),Ig&&j<Q;);if(512&y.flags&&(y.check=m(y.check,f,j,F)),Q-=j,F+=j,Ig)break g}else y.head&&(y.head.name=null);y.length=0,y.mode=8;case 8:if(4096&y.flags){if(Q===0)break g;for(j=0;Ig=f[F+j++],y.head&&Ig&&y.length<65536&&(y.head.comment+=String.fromCharCode(Ig)),Ig&&j<Q;);if(512&y.flags&&(y.check=m(y.check,f,j,F)),Q-=j,F+=j,Ig)break g}else y.head&&(y.head.comment=null);y.mode=9;case 9:if(512&y.flags){for(;E<16;){if(Q===0)break g;Q--,L+=f[F++]<<E,E+=8}if(L!==(65535&y.check)){w.msg="header crc mismatch",y.mode=30;break}E=L=0}y.head&&(y.head.hcrc=y.flags>>9&1,y.head.done=!0),w.adler=y.check=0,y.mode=12;break;case 10:for(;E<32;){if(Q===0)break g;Q--,L+=f[F++]<<E,E+=8}w.adler=y.check=R(L),E=L=0,y.mode=11;case 11:if(y.havedict===0)return w.next_out=T,w.avail_out=P,w.next_in=F,w.avail_in=Q,y.hold=L,y.bits=E,2;w.adler=y.check=1,y.mode=12;case 12:if(W===5||W===6)break g;case 13:if(y.last){L>>>=7&E,E-=7&E,y.mode=27;break}for(;E<3;){if(Q===0)break g;Q--,L+=f[F++]<<E,E+=8}switch(y.last=1&L,E-=1,3&(L>>>=1)){case 0:y.mode=14;break;case 1:if(B(y),y.mode=20,W!==6)break;L>>>=2,E-=2;break g;case 2:y.mode=17;break;case 3:w.msg="invalid block type",y.mode=30}L>>>=2,E-=2;break;case 14:for(L>>>=7&E,E-=7&E;E<32;){if(Q===0)break g;Q--,L+=f[F++]<<E,E+=8}if((65535&L)!=(L>>>16^65535)){w.msg="invalid stored block lengths",y.mode=30;break}if(y.length=65535&L,E=L=0,y.mode=15,W===6)break g;case 15:y.mode=16;case 16:if(j=y.length){if(Q<j&&(j=Q),P<j&&(j=P),j===0)break g;b.arraySet(D,f,F,j,T),Q-=j,F+=j,P-=j,T+=j,y.length-=j;break}y.mode=12;break;case 17:for(;E<14;){if(Q===0)break g;Q--,L+=f[F++]<<E,E+=8}if(y.nlen=257+(31&L),L>>>=5,E-=5,y.ndist=1+(31&L),L>>>=5,E-=5,y.ncode=4+(15&L),L>>>=4,E-=4,286<y.nlen||30<y.ndist){w.msg="too many length or distance symbols",y.mode=30;break}y.have=0,y.mode=18;case 18:for(;y.have<y.ncode;){for(;E<3;){if(Q===0)break g;Q--,L+=f[F++]<<E,E+=8}y.lens[hg[y.have++]]=7&L,L>>>=3,E-=3}for(;y.have<19;)y.lens[hg[y.have++]]=0;if(y.lencode=y.lendyn,y.lenbits=7,ag={bits:y.lenbits},ng=p(0,y.lens,0,19,y.lencode,0,y.work,ag),y.lenbits=ag.bits,ng){w.msg="invalid code lengths set",y.mode=30;break}y.have=0,y.mode=19;case 19:for(;y.have<y.nlen+y.ndist;){for(;x=(cg=y.lencode[L&(1<<y.lenbits)-1])>>>16&255,sg=65535&cg,!((Cg=cg>>>24)<=E);){if(Q===0)break g;Q--,L+=f[F++]<<E,E+=8}if(sg<16)L>>>=Cg,E-=Cg,y.lens[y.have++]=sg;else{if(sg===16){for(lg=Cg+2;E<lg;){if(Q===0)break g;Q--,L+=f[F++]<<E,E+=8}if(L>>>=Cg,E-=Cg,y.have===0){w.msg="invalid bit length repeat",y.mode=30;break}Ig=y.lens[y.have-1],j=3+(3&L),L>>>=2,E-=2}else if(sg===17){for(lg=Cg+3;E<lg;){if(Q===0)break g;Q--,L+=f[F++]<<E,E+=8}E-=Cg,Ig=0,j=3+(7&(L>>>=Cg)),L>>>=3,E-=3}else{for(lg=Cg+7;E<lg;){if(Q===0)break g;Q--,L+=f[F++]<<E,E+=8}E-=Cg,Ig=0,j=11+(127&(L>>>=Cg)),L>>>=7,E-=7}if(y.have+j>y.nlen+y.ndist){w.msg="invalid bit length repeat",y.mode=30;break}for(;j--;)y.lens[y.have++]=Ig}}if(y.mode===30)break;if(y.lens[256]===0){w.msg="invalid code -- missing end-of-block",y.mode=30;break}if(y.lenbits=9,ag={bits:y.lenbits},ng=p(1,y.lens,0,y.nlen,y.lencode,0,y.work,ag),y.lenbits=ag.bits,ng){w.msg="invalid literal/lengths set",y.mode=30;break}if(y.distbits=6,y.distcode=y.distdyn,ag={bits:y.distbits},ng=p(2,y.lens,y.nlen,y.ndist,y.distcode,0,y.work,ag),y.distbits=ag.bits,ng){w.msg="invalid distances set",y.mode=30;break}if(y.mode=20,W===6)break g;case 20:y.mode=21;case 21:if(6<=Q&&258<=P){w.next_out=T,w.avail_out=P,w.next_in=F,w.avail_in=Q,y.hold=L,y.bits=E,Z(w,k),T=w.next_out,D=w.output,P=w.avail_out,F=w.next_in,f=w.input,Q=w.avail_in,L=y.hold,E=y.bits,y.mode===12&&(y.back=-1);break}for(y.back=0;x=(cg=y.lencode[L&(1<<y.lenbits)-1])>>>16&255,sg=65535&cg,!((Cg=cg>>>24)<=E);){if(Q===0)break g;Q--,L+=f[F++]<<E,E+=8}if(x&&(240&x)==0){for(Ag=Cg,O=x,_=sg;x=(cg=y.lencode[_+((L&(1<<Ag+O)-1)>>Ag)])>>>16&255,sg=65535&cg,!(Ag+(Cg=cg>>>24)<=E);){if(Q===0)break g;Q--,L+=f[F++]<<E,E+=8}L>>>=Ag,E-=Ag,y.back+=Ag}if(L>>>=Cg,E-=Cg,y.back+=Cg,y.length=sg,x===0){y.mode=26;break}if(32&x){y.back=-1,y.mode=12;break}if(64&x){w.msg="invalid literal/length code",y.mode=30;break}y.extra=15&x,y.mode=22;case 22:if(y.extra){for(lg=y.extra;E<lg;){if(Q===0)break g;Q--,L+=f[F++]<<E,E+=8}y.length+=L&(1<<y.extra)-1,L>>>=y.extra,E-=y.extra,y.back+=y.extra}y.was=y.length,y.mode=23;case 23:for(;x=(cg=y.distcode[L&(1<<y.distbits)-1])>>>16&255,sg=65535&cg,!((Cg=cg>>>24)<=E);){if(Q===0)break g;Q--,L+=f[F++]<<E,E+=8}if((240&x)==0){for(Ag=Cg,O=x,_=sg;x=(cg=y.distcode[_+((L&(1<<Ag+O)-1)>>Ag)])>>>16&255,sg=65535&cg,!(Ag+(Cg=cg>>>24)<=E);){if(Q===0)break g;Q--,L+=f[F++]<<E,E+=8}L>>>=Ag,E-=Ag,y.back+=Ag}if(L>>>=Cg,E-=Cg,y.back+=Cg,64&x){w.msg="invalid distance code",y.mode=30;break}y.offset=sg,y.extra=15&x,y.mode=24;case 24:if(y.extra){for(lg=y.extra;E<lg;){if(Q===0)break g;Q--,L+=f[F++]<<E,E+=8}y.offset+=L&(1<<y.extra)-1,L>>>=y.extra,E-=y.extra,y.back+=y.extra}if(y.offset>y.dmax){w.msg="invalid distance too far back",y.mode=30;break}y.mode=25;case 25:if(P===0)break g;if(j=k-P,y.offset>j){if((j=y.offset-j)>y.whave&&y.sane){w.msg="invalid distance too far back",y.mode=30;break}q=j>y.wnext?(j-=y.wnext,y.wsize-j):y.wnext-j,j>y.length&&(j=y.length),tg=y.window}else tg=D,q=T-y.offset,j=y.length;for(P<j&&(j=P),P-=j,y.length-=j;D[T++]=tg[q++],--j;);y.length===0&&(y.mode=21);break;case 26:if(P===0)break g;D[T++]=y.length,P--,y.mode=21;break;case 27:if(y.wrap){for(;E<32;){if(Q===0)break g;Q--,L|=f[F++]<<E,E+=8}if(k-=P,w.total_out+=k,y.total+=k,k&&(w.adler=y.check=y.flags?m(y.check,D,k,T-k):u(y.check,D,k,T-k)),k=P,(y.flags?L:R(L))!==y.check){w.msg="incorrect data check",y.mode=30;break}E=L=0}y.mode=28;case 28:if(y.wrap&&y.flags){for(;E<32;){if(Q===0)break g;Q--,L+=f[F++]<<E,E+=8}if(L!==(4294967295&y.total)){w.msg="incorrect length check",y.mode=30;break}E=L=0}y.mode=29;case 29:ng=1;break g;case 30:ng=-3;break g;case 31:return-4;case 32:default:return Y}return w.next_out=T,w.avail_out=P,w.next_in=F,w.avail_in=Q,y.hold=L,y.bits=E,(y.wsize||k!==w.avail_out&&y.mode<30&&(y.mode<27||W!==4))&&G(w,w.output,w.next_out,k-w.avail_out)?(y.mode=31,-4):(J-=w.avail_in,k-=w.avail_out,w.total_in+=J,w.total_out+=k,y.total+=k,y.wrap&&k&&(w.adler=y.check=y.flags?m(y.check,D,k,w.next_out-k):u(y.check,D,k,w.next_out-k)),w.data_type=y.bits+(y.last?64:0)+(y.mode===12?128:0)+(y.mode===20||y.mode===15?256:0),(J==0&&k===0||W===4)&&ng===0&&(ng=-5),ng)},h.inflateEnd=function(w){if(!w||!w.state)return Y;var W=w.state;return W.window&&(W.window=null),w.state=null,0},h.inflateGetHeader=function(w,W){var y;return w&&w.state?(2&(y=w.state).wrap)==0?Y:((y.head=W).done=!1,0):Y},h.inflateSetDictionary=function(w,W){var y,f=W.length;return w&&w.state?(y=w.state).wrap!==0&&y.mode!==11?Y:y.mode===11&&u(1,W,f,0)!==y.check?-3:G(w,W,f,f)?(y.mode=31,-4):(y.havedict=1,0):Y},h.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./inffast":48,"./inftrees":50}],50:[function(c,r,h){var b=c("../utils/common"),u=[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],m=[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],p=[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];r.exports=function(Y,R,X,H,S,z,v,K){var V,N,B,G,w,W,y,f,D,F=K.bits,T=0,Q=0,P=0,L=0,E=0,J=0,k=0,j=0,q=0,tg=0,Cg=null,x=0,sg=new b.Buf16(16),Ag=new b.Buf16(16),O=null,_=0;for(T=0;T<=15;T++)sg[T]=0;for(Q=0;Q<H;Q++)sg[R[X+Q]]++;for(E=F,L=15;1<=L&&sg[L]===0;L--);if(L<E&&(E=L),L===0)return S[z++]=20971520,S[z++]=20971520,K.bits=1,0;for(P=1;P<L&&sg[P]===0;P++);for(E<P&&(E=P),T=j=1;T<=15;T++)if(j<<=1,(j-=sg[T])<0)return-1;if(0<j&&(Y===0||L!==1))return-1;for(Ag[1]=0,T=1;T<15;T++)Ag[T+1]=Ag[T]+sg[T];for(Q=0;Q<H;Q++)R[X+Q]!==0&&(v[Ag[R[X+Q]]++]=Q);if(W=Y===0?(Cg=O=v,19):Y===1?(Cg=u,x-=257,O=m,_-=257,256):(Cg=Z,O=p,-1),T=P,w=z,k=Q=tg=0,B=-1,G=(q=1<<(J=E))-1,Y===1&&852<q||Y===2&&592<q)return 1;for(;;){for(y=T-k,D=v[Q]<W?(f=0,v[Q]):v[Q]>W?(f=O[_+v[Q]],Cg[x+v[Q]]):(f=96,0),V=1<<T-k,P=N=1<<J;S[w+(tg>>k)+(N-=V)]=y<<24|f<<16|D|0,N!==0;);for(V=1<<T-1;tg&V;)V>>=1;if(V!==0?(tg&=V-1,tg+=V):tg=0,Q++,--sg[T]==0){if(T===L)break;T=R[X+v[Q]]}if(E<T&&(tg&G)!==B){for(k===0&&(k=E),w+=P,j=1<<(J=T-k);J+k<L&&!((j-=sg[J+k])<=0);)J++,j<<=1;if(q+=1<<J,Y===1&&852<q||Y===2&&592<q)return 1;S[B=tg&G]=E<<24|J<<16|w-z|0}}return tg!==0&&(S[w+tg]=T-k<<24|64<<16|0),K.bits=E,0}},{"../utils/common":41}],51:[function(c,r,h){r.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(c,r,h){var b=c("../utils/common");function u(O){for(var _=O.length;0<=--_;)O[_]=0}var m=256,Z=286,p=30,Y=15,R=[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],X=[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],H=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],S=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],z=new Array(576);u(z);var v=new Array(60);u(v);var K=new Array(512);u(K);var V=new Array(256);u(V);var N=new Array(29);u(N);var B,G,w,W=new Array(p);function y(O,_,Ig,ng,ag){this.static_tree=O,this.extra_bits=_,this.extra_base=Ig,this.elems=ng,this.max_length=ag,this.has_stree=O&&O.length}function f(O,_){this.dyn_tree=O,this.max_code=0,this.stat_desc=_}function D(O){return O<256?K[O]:K[256+(O>>>7)]}function F(O,_){O.pending_buf[O.pending++]=255&_,O.pending_buf[O.pending++]=_>>>8&255}function T(O,_,Ig){O.bi_valid>16-Ig?(O.bi_buf|=_<<O.bi_valid&65535,F(O,O.bi_buf),O.bi_buf=_>>16-O.bi_valid,O.bi_valid+=Ig-16):(O.bi_buf|=_<<O.bi_valid&65535,O.bi_valid+=Ig)}function Q(O,_,Ig){T(O,Ig[2*_],Ig[2*_+1])}function P(O,_){for(var Ig=0;Ig|=1&O,O>>>=1,Ig<<=1,0<--_;);return Ig>>>1}function L(O,_,Ig){var ng,ag,lg=new Array(16),cg=0;for(ng=1;ng<=Y;ng++)lg[ng]=cg=cg+Ig[ng-1]<<1;for(ag=0;ag<=_;ag++){var dg=O[2*ag+1];dg!==0&&(O[2*ag]=P(lg[dg]++,dg))}}function E(O){var _;for(_=0;_<Z;_++)O.dyn_ltree[2*_]=0;for(_=0;_<p;_++)O.dyn_dtree[2*_]=0;for(_=0;_<19;_++)O.bl_tree[2*_]=0;O.dyn_ltree[512]=1,O.opt_len=O.static_len=0,O.last_lit=O.matches=0}function J(O){8<O.bi_valid?F(O,O.bi_buf):0<O.bi_valid&&(O.pending_buf[O.pending++]=O.bi_buf),O.bi_buf=0,O.bi_valid=0}function k(O,_,Ig,ng){var ag=2*_,lg=2*Ig;return O[ag]<O[lg]||O[ag]===O[lg]&&ng[_]<=ng[Ig]}function j(O,_,Ig){for(var ng=O.heap[Ig],ag=Ig<<1;ag<=O.heap_len&&(ag<O.heap_len&&k(_,O.heap[ag+1],O.heap[ag],O.depth)&&ag++,!k(_,ng,O.heap[ag],O.depth));)O.heap[Ig]=O.heap[ag],Ig=ag,ag<<=1;O.heap[Ig]=ng}function q(O,_,Ig){var ng,ag,lg,cg,dg=0;if(O.last_lit!==0)for(;ng=O.pending_buf[O.d_buf+2*dg]<<8|O.pending_buf[O.d_buf+2*dg+1],ag=O.pending_buf[O.l_buf+dg],dg++,ng===0?Q(O,ag,_):(Q(O,(lg=V[ag])+m+1,_),(cg=R[lg])!==0&&T(O,ag-=N[lg],cg),Q(O,lg=D(--ng),Ig),(cg=X[lg])!==0&&T(O,ng-=W[lg],cg)),dg<O.last_lit;);Q(O,256,_)}function tg(O,_){var Ig,ng,ag,lg=_.dyn_tree,cg=_.stat_desc.static_tree,dg=_.stat_desc.has_stree,hg=_.stat_desc.elems,rg=-1;for(O.heap_len=0,O.heap_max=573,Ig=0;Ig<hg;Ig++)lg[2*Ig]!==0?(O.heap[++O.heap_len]=rg=Ig,O.depth[Ig]=0):lg[2*Ig+1]=0;for(;O.heap_len<2;)lg[2*(ag=O.heap[++O.heap_len]=rg<2?++rg:0)]=1,O.depth[ag]=0,O.opt_len--,dg&&(O.static_len-=cg[2*ag+1]);for(_.max_code=rg,Ig=O.heap_len>>1;1<=Ig;Ig--)j(O,lg,Ig);for(ag=hg;Ig=O.heap[1],O.heap[1]=O.heap[O.heap_len--],j(O,lg,1),ng=O.heap[1],O.heap[--O.heap_max]=Ig,O.heap[--O.heap_max]=ng,lg[2*ag]=lg[2*Ig]+lg[2*ng],O.depth[ag]=(O.depth[Ig]>=O.depth[ng]?O.depth[Ig]:O.depth[ng])+1,lg[2*Ig+1]=lg[2*ng+1]=ag,O.heap[1]=ag++,j(O,lg,1),2<=O.heap_len;);O.heap[--O.heap_max]=O.heap[1],function(Wg,Gg){var Sg,Kg,kg,yg,Vg,pg,Hg=Gg.dyn_tree,Jg=Gg.max_code,zg=Gg.stat_desc.static_tree,aI=Gg.stat_desc.has_stree,BI=Gg.stat_desc.extra_bits,Ug=Gg.stat_desc.extra_base,lI=Gg.stat_desc.max_length,oI=0;for(yg=0;yg<=Y;yg++)Wg.bl_count[yg]=0;for(Hg[2*Wg.heap[Wg.heap_max]+1]=0,Sg=Wg.heap_max+1;Sg<573;Sg++)lI<(yg=Hg[2*Hg[2*(Kg=Wg.heap[Sg])+1]+1]+1)&&(yg=lI,oI++),Hg[2*Kg+1]=yg,Jg<Kg||(Wg.bl_count[yg]++,Vg=0,Ug<=Kg&&(Vg=BI[Kg-Ug]),pg=Hg[2*Kg],Wg.opt_len+=pg*(yg+Vg),aI&&(Wg.static_len+=pg*(zg[2*Kg+1]+Vg)));if(oI!==0){do{for(yg=lI-1;Wg.bl_count[yg]===0;)yg--;Wg.bl_count[yg]--,Wg.bl_count[yg+1]+=2,Wg.bl_count[lI]--,oI-=2}while(0<oI);for(yg=lI;yg!==0;yg--)for(Kg=Wg.bl_count[yg];Kg!==0;)Jg<(kg=Wg.heap[--Sg])||(Hg[2*kg+1]!==yg&&(Wg.opt_len+=(yg-Hg[2*kg+1])*Hg[2*kg],Hg[2*kg+1]=yg),Kg--)}}(O,_),L(lg,rg,O.bl_count)}function Cg(O,_,Ig){var ng,ag,lg=-1,cg=_[1],dg=0,hg=7,rg=4;for(cg===0&&(hg=138,rg=3),_[2*(Ig+1)+1]=65535,ng=0;ng<=Ig;ng++)ag=cg,cg=_[2*(ng+1)+1],++dg<hg&&ag===cg||(dg<rg?O.bl_tree[2*ag]+=dg:ag!==0?(ag!==lg&&O.bl_tree[2*ag]++,O.bl_tree[32]++):dg<=10?O.bl_tree[34]++:O.bl_tree[36]++,lg=ag,rg=(dg=0)===cg?(hg=138,3):ag===cg?(hg=6,3):(hg=7,4))}function x(O,_,Ig){var ng,ag,lg=-1,cg=_[1],dg=0,hg=7,rg=4;for(cg===0&&(hg=138,rg=3),ng=0;ng<=Ig;ng++)if(ag=cg,cg=_[2*(ng+1)+1],!(++dg<hg&&ag===cg)){if(dg<rg)for(;Q(O,ag,O.bl_tree),--dg!=0;);else ag!==0?(ag!==lg&&(Q(O,ag,O.bl_tree),dg--),Q(O,16,O.bl_tree),T(O,dg-3,2)):dg<=10?(Q(O,17,O.bl_tree),T(O,dg-3,3)):(Q(O,18,O.bl_tree),T(O,dg-11,7));lg=ag,rg=(dg=0)===cg?(hg=138,3):ag===cg?(hg=6,3):(hg=7,4)}}u(W);var sg=!1;function Ag(O,_,Ig,ng){T(O,0+(ng?1:0),3),function(ag,lg,cg,dg){J(ag),F(ag,cg),F(ag,~cg),b.arraySet(ag.pending_buf,ag.window,lg,cg,ag.pending),ag.pending+=cg}(O,_,Ig)}h._tr_init=function(O){sg||(function(){var _,Ig,ng,ag,lg,cg=new Array(16);for(ag=ng=0;ag<28;ag++)for(N[ag]=ng,_=0;_<1<<R[ag];_++)V[ng++]=ag;for(V[ng-1]=ag,ag=lg=0;ag<16;ag++)for(W[ag]=lg,_=0;_<1<<X[ag];_++)K[lg++]=ag;for(lg>>=7;ag<p;ag++)for(W[ag]=lg<<7,_=0;_<1<<X[ag]-7;_++)K[256+lg++]=ag;for(Ig=0;Ig<=Y;Ig++)cg[Ig]=0;for(_=0;_<=143;)z[2*_+1]=8,_++,cg[8]++;for(;_<=255;)z[2*_+1]=9,_++,cg[9]++;for(;_<=279;)z[2*_+1]=7,_++,cg[7]++;for(;_<=287;)z[2*_+1]=8,_++,cg[8]++;for(L(z,287,cg),_=0;_<p;_++)v[2*_+1]=5,v[2*_]=P(_,5);B=new y(z,R,257,Z,Y),G=new y(v,X,0,p,Y),w=new y(new Array(0),H,0,19,7)}(),sg=!0),O.l_desc=new f(O.dyn_ltree,B),O.d_desc=new f(O.dyn_dtree,G),O.bl_desc=new f(O.bl_tree,w),O.bi_buf=0,O.bi_valid=0,E(O)},h._tr_stored_block=Ag,h._tr_flush_block=function(O,_,Ig,ng){var ag,lg,cg=0;0<O.level?(O.strm.data_type===2&&(O.strm.data_type=function(dg){var hg,rg=4093624447;for(hg=0;hg<=31;hg++,rg>>>=1)if(1&rg&&dg.dyn_ltree[2*hg]!==0)return 0;if(dg.dyn_ltree[18]!==0||dg.dyn_ltree[20]!==0||dg.dyn_ltree[26]!==0)return 1;for(hg=32;hg<m;hg++)if(dg.dyn_ltree[2*hg]!==0)return 1;return 0}(O)),tg(O,O.l_desc),tg(O,O.d_desc),cg=function(dg){var hg;for(Cg(dg,dg.dyn_ltree,dg.l_desc.max_code),Cg(dg,dg.dyn_dtree,dg.d_desc.max_code),tg(dg,dg.bl_desc),hg=18;3<=hg&&dg.bl_tree[2*S[hg]+1]===0;hg--);return dg.opt_len+=3*(hg+1)+5+5+4,hg}(O),ag=O.opt_len+3+7>>>3,(lg=O.static_len+3+7>>>3)<=ag&&(ag=lg)):ag=lg=Ig+5,Ig+4<=ag&&_!==-1?Ag(O,_,Ig,ng):O.strategy===4||lg===ag?(T(O,2+(ng?1:0),3),q(O,z,v)):(T(O,4+(ng?1:0),3),function(dg,hg,rg,Wg){var Gg;for(T(dg,hg-257,5),T(dg,rg-1,5),T(dg,Wg-4,4),Gg=0;Gg<Wg;Gg++)T(dg,dg.bl_tree[2*S[Gg]+1],3);x(dg,dg.dyn_ltree,hg-1),x(dg,dg.dyn_dtree,rg-1)}(O,O.l_desc.max_code+1,O.d_desc.max_code+1,cg+1),q(O,O.dyn_ltree,O.dyn_dtree)),E(O),ng&&J(O)},h._tr_tally=function(O,_,Ig){return O.pending_buf[O.d_buf+2*O.last_lit]=_>>>8&255,O.pending_buf[O.d_buf+2*O.last_lit+1]=255&_,O.pending_buf[O.l_buf+O.last_lit]=255&Ig,O.last_lit++,_===0?O.dyn_ltree[2*Ig]++:(O.matches++,_--,O.dyn_ltree[2*(V[Ig]+m+1)]++,O.dyn_dtree[2*D(_)]++),O.last_lit===O.lit_bufsize-1},h._tr_align=function(O){T(O,2,3),Q(O,256,z),function(_){_.bi_valid===16?(F(_,_.bi_buf),_.bi_buf=0,_.bi_valid=0):8<=_.bi_valid&&(_.pending_buf[_.pending++]=255&_.bi_buf,_.bi_buf>>=8,_.bi_valid-=8)}(O)}},{"../utils/common":41}],53:[function(c,r,h){r.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(c,r,h){(function(b){(function(u,m){if(!u.setImmediate){var Z,p,Y,R,X=1,H={},S=!1,z=u.document,v=Object.getPrototypeOf&&Object.getPrototypeOf(u);v=v&&v.setTimeout?v:u,Z={}.toString.call(u.process)==="[object process]"?function(B){e.nextTick(function(){V(B)})}:function(){if(u.postMessage&&!u.importScripts){var B=!0,G=u.onmessage;return u.onmessage=function(){B=!1},u.postMessage("","*"),u.onmessage=G,B}}()?(R="setImmediate$"+Math.random()+"$",u.addEventListener?u.addEventListener("message",N,!1):u.attachEvent("onmessage",N),function(B){u.postMessage(R+B,"*")}):u.MessageChannel?((Y=new MessageChannel).port1.onmessage=function(B){V(B.data)},function(B){Y.port2.postMessage(B)}):z&&"onreadystatechange"in z.createElement("script")?(p=z.documentElement,function(B){var G=z.createElement("script");G.onreadystatechange=function(){V(B),G.onreadystatechange=null,p.removeChild(G),G=null},p.appendChild(G)}):function(B){setTimeout(V,0,B)},v.setImmediate=function(B){typeof B!="function"&&(B=new Function(""+B));for(var G=new Array(arguments.length-1),w=0;w<G.length;w++)G[w]=arguments[w+1];var W={callback:B,args:G};return H[X]=W,Z(X),X++},v.clearImmediate=K}function K(B){delete H[B]}function V(B){if(S)setTimeout(V,0,B);else{var G=H[B];if(G){S=!0;try{(function(w){var W=w.callback,y=w.args;switch(y.length){case 0:W();break;case 1:W(y[0]);break;case 2:W(y[0],y[1]);break;case 3:W(y[0],y[1],y[2]);break;default:W.apply(void 0,y)}})(G)}finally{K(B),S=!1}}}}function N(B){B.source===u&&typeof B.data=="string"&&B.data.indexOf(R)===0&&V(+B.data.slice(R.length))}})(typeof self>"u"?b===void 0?this:b:self)}).call(this,A!==void 0?A:typeof self<"u"?self:typeof window<"u"?window:{})},{}]},{},[10])(10)})}).call(this)}).call(this,g("_process"),typeof FI<"u"?FI:typeof self<"u"?self:typeof window<"u"?window:{},g("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],g("timers").setImmediate)},{_process:467,buffer:220,timers:523}],442:[function(g,C,i){(function(e){(function(){var A=/[\\^$.*+?()[\]{}|]/g,s=RegExp(A.source),l=typeof e=="object"&&e&&e.Object===Object&&e,n=typeof self=="object"&&self&&self.Object===Object&&self,a=l||n||Function("return this")(),d=Object.prototype.toString,o=a.Symbol,c=o?o.prototype:void 0,r=c?c.toString:void 0;function h(b){if(typeof b=="string")return b;if(function(m){return typeof m=="symbol"||function(Z){return!!Z&&typeof Z=="object"}(m)&&d.call(m)=="[object Symbol]"}(b))return r?r.call(b):"";var u=b+"";return u=="0"&&1/b==-1/0?"-0":u}C.exports=function(b){var u;return(b=(u=b)==null?"":h(u))&&s.test(b)?b.replace(A,"\\$&"):b}}).call(this)}).call(this,typeof FI<"u"?FI:typeof self<"u"?self:typeof window<"u"?window:{})},{}],443:[function(g,C,i){(function(e){(function(){var A="[object Arguments]",s="[object Map]",l="[object Object]",n="[object Set]",a=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,d=/^\w*$/,o=/^\./,c=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,r=/\\(\\)?/g,h=/^\[object .+?Constructor\]$/,b=/^(?:0|[1-9]\d*)$/,u={};u["[object Float32Array]"]=u["[object Float64Array]"]=u["[object Int8Array]"]=u["[object Int16Array]"]=u["[object Int32Array]"]=u["[object Uint8Array]"]=u["[object Uint8ClampedArray]"]=u["[object Uint16Array]"]=u["[object Uint32Array]"]=!0,u[A]=u["[object Array]"]=u["[object ArrayBuffer]"]=u["[object Boolean]"]=u["[object DataView]"]=u["[object Date]"]=u["[object Error]"]=u["[object Function]"]=u[s]=u["[object Number]"]=u[l]=u["[object RegExp]"]=u[n]=u["[object String]"]=u["[object WeakMap]"]=!1;var m=typeof e=="object"&&e&&e.Object===Object&&e,Z=typeof self=="object"&&self&&self.Object===Object&&self,p=m||Z||Function("return this")(),Y=typeof i=="object"&&i&&!i.nodeType&&i,R=Y&&typeof C=="object"&&C&&!C.nodeType&&C,X=R&&R.exports===Y&&m.process,H=function(){try{return X&&X.binding("util")}catch{}}(),S=H&&H.isTypedArray;function z(og,Zg,Dg,Fg){for(var II=-1,vg=og?og.length:0;++II<vg;){var xg=og[II];Zg(Fg,xg,Dg(xg),og)}return Fg}function v(og,Zg){for(var Dg=-1,Fg=og?og.length:0;++Dg<Fg;)if(Zg(og[Dg],Dg,og))return!0;return!1}function K(og){var Zg=!1;if(og!=null&&typeof og.toString!="function")try{Zg=!!(og+"")}catch{}return Zg}function V(og){var Zg=-1,Dg=Array(og.size);return og.forEach(function(Fg,II){Dg[++Zg]=[II,Fg]}),Dg}function N(og){var Zg=-1,Dg=Array(og.size);return og.forEach(function(Fg){Dg[++Zg]=Fg}),Dg}var B,G,w,W=Array.prototype,y=Function.prototype,f=Object.prototype,D=p["__core-js_shared__"],F=(B=/[^.]+$/.exec(D&&D.keys&&D.keys.IE_PROTO||""))?"Symbol(src)_1."+B:"",T=y.toString,Q=f.hasOwnProperty,P=f.toString,L=RegExp("^"+T.call(Q).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),E=p.Symbol,J=p.Uint8Array,k=f.propertyIsEnumerable,j=W.splice,q=(G=Object.keys,w=Object,function(og){return G(w(og))}),tg=tI(p,"DataView"),Cg=tI(p,"Map"),x=tI(p,"Promise"),sg=tI(p,"Set"),Ag=tI(p,"WeakMap"),O=tI(Object,"create"),_=ug(tg),Ig=ug(Cg),ng=ug(x),ag=ug(sg),lg=ug(Ag),cg=E?E.prototype:void 0,dg=cg?cg.valueOf:void 0,hg=cg?cg.toString:void 0;function rg(og){var Zg=-1,Dg=og?og.length:0;for(this.clear();++Zg<Dg;){var Fg=og[Zg];this.set(Fg[0],Fg[1])}}function Wg(og){var Zg=-1,Dg=og?og.length:0;for(this.clear();++Zg<Dg;){var Fg=og[Zg];this.set(Fg[0],Fg[1])}}function Gg(og){var Zg=-1,Dg=og?og.length:0;for(this.clear();++Zg<Dg;){var Fg=og[Zg];this.set(Fg[0],Fg[1])}}function Sg(og){var Zg=-1,Dg=og?og.length:0;for(this.__data__=new Gg;++Zg<Dg;)this.add(og[Zg])}function Kg(og){this.__data__=new Wg(og)}function kg(og,Zg){var Dg=sI(og)||mI(og)?function(xg,zI){for(var VI=-1,YI=Array(xg);++VI<xg;)YI[VI]=zI(VI);return YI}(og.length,String):[],Fg=Dg.length,II=!!Fg;for(var vg in og)!Q.call(og,vg)||II&&(vg=="length"||QI(vg,Fg))||Dg.push(vg);return Dg}function yg(og,Zg){for(var Dg=og.length;Dg--;)if(jg(og[Dg][0],Zg))return Dg;return-1}function Vg(og,Zg,Dg,Fg){return Hg(og,function(II,vg,xg){Zg(Fg,II,Dg(II),xg)}),Fg}rg.prototype.clear=function(){this.__data__=O?O(null):{}},rg.prototype.delete=function(og){return this.has(og)&&delete this.__data__[og]},rg.prototype.get=function(og){var Zg=this.__data__;if(O){var Dg=Zg[og];return Dg==="__lodash_hash_undefined__"?void 0:Dg}return Q.call(Zg,og)?Zg[og]:void 0},rg.prototype.has=function(og){var Zg=this.__data__;return O?Zg[og]!==void 0:Q.call(Zg,og)},rg.prototype.set=function(og,Zg){return this.__data__[og]=O&&Zg===void 0?"__lodash_hash_undefined__":Zg,this},Wg.prototype.clear=function(){this.__data__=[]},Wg.prototype.delete=function(og){var Zg=this.__data__,Dg=yg(Zg,og);return!(Dg<0)&&(Dg==Zg.length-1?Zg.pop():j.call(Zg,Dg,1),!0)},Wg.prototype.get=function(og){var Zg=this.__data__,Dg=yg(Zg,og);return Dg<0?void 0:Zg[Dg][1]},Wg.prototype.has=function(og){return yg(this.__data__,og)>-1},Wg.prototype.set=function(og,Zg){var Dg=this.__data__,Fg=yg(Dg,og);return Fg<0?Dg.push([og,Zg]):Dg[Fg][1]=Zg,this},Gg.prototype.clear=function(){this.__data__={hash:new rg,map:new(Cg||Wg),string:new rg}},Gg.prototype.delete=function(og){return fI(this,og).delete(og)},Gg.prototype.get=function(og){return fI(this,og).get(og)},Gg.prototype.has=function(og){return fI(this,og).has(og)},Gg.prototype.set=function(og,Zg){return fI(this,og).set(og,Zg),this},Sg.prototype.add=Sg.prototype.push=function(og){return this.__data__.set(og,"__lodash_hash_undefined__"),this},Sg.prototype.has=function(og){return this.__data__.has(og)},Kg.prototype.clear=function(){this.__data__=new Wg},Kg.prototype.delete=function(og){return this.__data__.delete(og)},Kg.prototype.get=function(og){return this.__data__.get(og)},Kg.prototype.has=function(og){return this.__data__.has(og)},Kg.prototype.set=function(og,Zg){var Dg=this.__data__;if(Dg instanceof Wg){var Fg=Dg.__data__;if(!Cg||Fg.length<199)return Fg.push([og,Zg]),this;Dg=this.__data__=new Gg(Fg)}return Dg.set(og,Zg),this};var pg,Hg=(pg=function(og,Zg){return og&&Jg(og,Zg,nC)},function(og,Zg){if(og==null)return og;if(!gI(og))return pg(og,Zg);for(var Dg=og.length,Fg=-1,II=Object(og);++Fg<Dg&&Zg(II[Fg],Fg,II)!==!1;);return og}),Jg=function(og){return function(Zg,Dg,Fg){for(var II=-1,vg=Object(Zg),xg=Fg(Zg),zI=xg.length;zI--;){var VI=xg[++II];if(Dg(vg[VI],VI,vg)===!1)break}return Zg}}();function zg(og,Zg){for(var Dg=0,Fg=(Zg=nI(Zg,og)?[Zg]:Eg(Zg)).length;og!=null&&Dg<Fg;)og=og[bg(Zg[Dg++])];return Dg&&Dg==Fg?og:void 0}function aI(og,Zg){return og!=null&&Zg in Object(og)}function BI(og,Zg,Dg,Fg,II){return og===Zg||(og==null||Zg==null||!yI(og)&&!wC(Zg)?og!=og&&Zg!=Zg:function(vg,xg,zI,VI,YI,dI){var CC=sI(vg),OI=sI(xg),vI="[object Array]",rC="[object Array]";CC||(vI=(vI=WI(vg))==A?l:vI),OI||(rC=(rC=WI(xg))==A?l:rC);var hC=vI==l&&!K(vg),pt=rC==l&&!K(xg),Ni=vI==rC;if(Ni&&!hC)return dI||(dI=new Kg),CC||_C(vg)?LI(vg,xg,zI,VI,YI,dI):function(qI,TI,qe,HA,El,bi,$e){switch(qe){case"[object DataView]":if(qI.byteLength!=TI.byteLength||qI.byteOffset!=TI.byteOffset)return!1;qI=qI.buffer,TI=TI.buffer;case"[object ArrayBuffer]":return!(qI.byteLength!=TI.byteLength||!HA(new J(qI),new J(TI)));case"[object Boolean]":case"[object Date]":case"[object Number]":return jg(+qI,+TI);case"[object Error]":return qI.name==TI.name&&qI.message==TI.message;case"[object RegExp]":case"[object String]":return qI==TI+"";case s:var gA=V;case n:var ja=2&bi;if(gA||(gA=N),qI.size!=TI.size&&!ja)return!1;var Ss=$e.get(qI);if(Ss)return Ss==TI;bi|=1,$e.set(qI,TI);var kt=LI(gA(qI),gA(TI),HA,El,bi,$e);return $e.delete(qI),kt;case"[object Symbol]":if(dg)return dg.call(qI)==dg.call(TI)}return!1}(vg,xg,vI,zI,VI,YI,dI);if(!(2&YI)){var fA=hC&&Q.call(vg,"__wrapped__"),Hs=pt&&Q.call(xg,"__wrapped__");if(fA||Hs){var _e=fA?vg.value():vg,Xs=Hs?xg.value():xg;return dI||(dI=new Kg),zI(_e,Xs,VI,YI,dI)}}return Ni?(dI||(dI=new Kg),function(qI,TI,qe,HA,El,bi){var $e=2&El,gA=nC(qI),ja=gA.length,Ss=nC(TI).length;if(ja!=Ss&&!$e)return!1;for(var kt=ja;kt--;){var Bt=gA[kt];if(!($e?Bt in TI:Q.call(TI,Bt)))return!1}var W0=bi.get(qI);if(W0&&bi.get(TI))return W0==TI;var OC=!0;bi.set(qI,TI),bi.set(TI,qI);for(var ad=$e;++kt<ja;){Bt=gA[kt];var Qa=qI[Bt],Oa=TI[Bt];if(HA)var nG=$e?HA(Oa,Qa,Bt,TI,qI,bi):HA(Qa,Oa,Bt,qI,TI,bi);if(!(nG===void 0?Qa===Oa||qe(Qa,Oa,HA,El,bi):nG)){OC=!1;break}ad||(ad=Bt=="constructor")}if(OC&&!ad){var Ds=qI.constructor,od=TI.constructor;Ds==od||!("constructor"in qI)||!("constructor"in TI)||typeof Ds=="function"&&Ds instanceof Ds&&typeof od=="function"&&od instanceof od||(OC=!1)}return bi.delete(qI),bi.delete(TI),OC}(vg,xg,zI,VI,YI,dI)):!1}(og,Zg,BI,Dg,Fg,II))}function Ug(og){return!(!yI(og)||function(Zg){return!!F&&F in Zg}(og))&&(pI(og)||K(og)?L:h).test(ug(og))}function lI(og){return typeof og=="function"?og:og==null?Ft:typeof og=="object"?sI(og)?function(Fg,II){return nI(Fg)&&kI(II)?Bg(bg(Fg),II):function(vg){var xg=function(zI,VI,YI){var dI=zI==null?void 0:zg(zI,VI);return dI===void 0?YI:dI}(vg,Fg);return xg===void 0&&xg===II?function(zI,VI){return zI!=null&&function(YI,dI,CC){dI=nI(dI,YI)?[dI]:Eg(dI);for(var OI,vI=-1,rC=dI.length;++vI<rC;){var hC=bg(dI[vI]);if(!(OI=YI!=null&&CC(YI,hC)))break;YI=YI[hC]}return OI||!!(rC=YI?YI.length:0)&&bI(rC)&&QI(hC,rC)&&(sI(YI)||mI(YI))}(zI,VI,aI)}(vg,Fg):BI(II,xg,void 0,3)}}(og[0],og[1]):function(Fg){var II=function(vg){for(var xg=nC(vg),zI=xg.length;zI--;){var VI=xg[zI],YI=vg[VI];xg[zI]=[VI,YI,kI(YI)]}return xg}(Fg);return II.length==1&&II[0][2]?Bg(II[0][0],II[0][1]):function(vg){return vg===Fg||function(xg,zI,VI,YI){var dI=VI.length,CC=dI;if(xg==null)return!CC;for(xg=Object(xg);dI--;){var OI=VI[dI];if(OI[2]?OI[1]!==xg[OI[0]]:!(OI[0]in xg))return!1}for(;++dI<CC;){var vI=(OI=VI[dI])[0],rC=xg[vI],hC=OI[1];if(OI[2]){if(rC===void 0&&!(vI in xg))return!1}else{var pt=new Kg,Ni;if(!(Ni===void 0?BI(hC,rC,YI,3,pt):Ni))return!1}}return!0}(vg,Fg,II)}}(og):nI(Zg=og)?(Dg=bg(Zg),function(Fg){return Fg==null?void 0:Fg[Dg]}):function(Fg){return function(II){return zg(II,Fg)}}(Zg);var Zg,Dg}function oI(og){if(Dg=(Zg=og)&&Zg.constructor,Fg=typeof Dg=="function"&&Dg.prototype||f,Zg!==Fg)return q(og);var Zg,Dg,Fg,II=[];for(var vg in Object(og))Q.call(og,vg)&&vg!="constructor"&&II.push(vg);return II}function Eg(og){return sI(og)?og:hI(og)}function LI(og,Zg,Dg,Fg,II,vg){var xg=2&II,zI=og.length,VI=Zg.length;if(zI!=VI&&!(xg&&VI>zI))return!1;var YI=vg.get(og);if(YI&&vg.get(Zg))return YI==Zg;var dI=-1,CC=!0,OI=1&II?new Sg:void 0;for(vg.set(og,Zg),vg.set(Zg,og);++dI<zI;){var vI=og[dI],rC=Zg[dI];if(Fg)var hC=xg?Fg(rC,vI,dI,Zg,og,vg):Fg(vI,rC,dI,og,Zg,vg);if(hC!==void 0){if(hC)continue;CC=!1;break}if(OI){if(!v(Zg,function(pt,Ni){if(!OI.has(Ni)&&(vI===pt||Dg(vI,pt,Fg,II,vg)))return OI.add(Ni)})){CC=!1;break}}else if(vI!==rC&&!Dg(vI,rC,Fg,II,vg)){CC=!1;break}}return vg.delete(og),vg.delete(Zg),CC}function fI(og,Zg){var Dg,Fg,II=og.__data__;return((Fg=typeof(Dg=Zg))=="string"||Fg=="number"||Fg=="symbol"||Fg=="boolean"?Dg!=="__proto__":Dg===null)?II[typeof Zg=="string"?"string":"hash"]:II.map}function tI(og,Zg){var Dg=function(Fg,II){return Fg==null?void 0:Fg[II]}(og,Zg);return Ug(Dg)?Dg:void 0}var WI=function(og){return P.call(og)};function QI(og,Zg){return!!(Zg=Zg??9007199254740991)&&(typeof og=="number"||b.test(og))&&og>-1&&og%1==0&&og<Zg}function nI(og,Zg){if(sI(og))return!1;var Dg=typeof og;return!(Dg!="number"&&Dg!="symbol"&&Dg!="boolean"&&og!=null&&!_I(og))||d.test(og)||!a.test(og)||Zg!=null&&og in Object(Zg)}function kI(og){return og==og&&!yI(og)}function Bg(og,Zg){return function(Dg){return Dg!=null&&Dg[og]===Zg&&(Zg!==void 0||og in Object(Dg))}}(tg&&WI(new tg(new ArrayBuffer(1)))!="[object DataView]"||Cg&&WI(new Cg)!=s||x&&WI(x.resolve())!="[object Promise]"||sg&&WI(new sg)!=n||Ag&&WI(new Ag)!="[object WeakMap]")&&(WI=function(og){var Zg=P.call(og),Dg=Zg==l?og.constructor:void 0,Fg=Dg?ug(Dg):void 0;if(Fg)switch(Fg){case _:return"[object DataView]";case Ig:return s;case ng:return"[object Promise]";case ag:return n;case lg:return"[object WeakMap]"}return Zg});var hI=cI(function(og){var Zg;og=(Zg=og)==null?"":function(Fg){if(typeof Fg=="string")return Fg;if(_I(Fg))return hg?hg.call(Fg):"";var II=Fg+"";return II=="0"&&1/Fg==-1/0?"-0":II}(Zg);var Dg=[];return o.test(og)&&Dg.push(""),og.replace(c,function(Fg,II,vg,xg){Dg.push(vg?xg.replace(r,"$1"):II||Fg)}),Dg});function bg(og){if(typeof og=="string"||_I(og))return og;var Zg=og+"";return Zg=="0"&&1/og==-1/0?"-0":Zg}function ug(og){if(og!=null){try{return T.call(og)}catch{}try{return og+""}catch{}}return""}var fg,Tg=(fg=function(og,Zg,Dg){Q.call(og,Dg)?og[Dg].push(Zg):og[Dg]=[Zg]},function(og,Zg){var Dg=sI(og)?z:Vg,Fg={};return Dg(og,fg,lI(Zg),Fg)});function cI(og,Zg){if(typeof og!="function"||Zg&&typeof Zg!="function")throw new TypeError("Expected a function");var Dg=function(){var Fg=arguments,II=Zg?Zg.apply(this,Fg):Fg[0],vg=Dg.cache;if(vg.has(II))return vg.get(II);var xg=og.apply(this,Fg);return Dg.cache=vg.set(II,xg),xg};return Dg.cache=new(cI.Cache||Gg),Dg}function jg(og,Zg){return og===Zg||og!=og&&Zg!=Zg}function mI(og){return function(Zg){return wC(Zg)&&gI(Zg)}(og)&&Q.call(og,"callee")&&(!k.call(og,"callee")||P.call(og)==A)}cI.Cache=Gg;var sI=Array.isArray;function gI(og){return og!=null&&bI(og.length)&&!pI(og)}function pI(og){var Zg=yI(og)?P.call(og):"";return Zg=="[object Function]"||Zg=="[object GeneratorFunction]"}function bI(og){return typeof og=="number"&&og>-1&&og%1==0&&og<=9007199254740991}function yI(og){var Zg=typeof og;return!!og&&(Zg=="object"||Zg=="function")}function wC(og){return!!og&&typeof og=="object"}function _I(og){return typeof og=="symbol"||wC(og)&&P.call(og)=="[object Symbol]"}var _C=S?function(og){return function(Zg){return og(Zg)}}(S):function(og){return wC(og)&&bI(og.length)&&!!u[P.call(og)]};function nC(og){return gI(og)?kg(og):oI(og)}function Ft(og){return og}C.exports=Tg}).call(this)}).call(this,typeof FI<"u"?FI:typeof self<"u"?self:typeof window<"u"?window:{})},{}],444:[function(g,C,i){var e=Object.prototype.toString;C.exports=function(A){return A===!0||A===!1||function(s){return!!s&&typeof s=="object"}(A)&&e.call(A)=="[object Boolean]"}},{}],445:[function(g,C,i){(function(e){(function(){var A="[object Arguments]",s="[object Map]",l="[object Object]",n="[object Set]",a=/^\[object .+?Constructor\]$/,d=/^(?:0|[1-9]\d*)$/,o={};o["[object Float32Array]"]=o["[object Float64Array]"]=o["[object Int8Array]"]=o["[object Int16Array]"]=o["[object Int32Array]"]=o["[object Uint8Array]"]=o["[object Uint8ClampedArray]"]=o["[object Uint16Array]"]=o["[object Uint32Array]"]=!0,o[A]=o["[object Array]"]=o["[object ArrayBuffer]"]=o["[object Boolean]"]=o["[object DataView]"]=o["[object Date]"]=o["[object Error]"]=o["[object Function]"]=o[s]=o["[object Number]"]=o[l]=o["[object RegExp]"]=o[n]=o["[object String]"]=o["[object WeakMap]"]=!1;var c=typeof e=="object"&&e&&e.Object===Object&&e,r=typeof self=="object"&&self&&self.Object===Object&&self,h=c||r||Function("return this")(),b=typeof i=="object"&&i&&!i.nodeType&&i,u=b&&typeof C=="object"&&C&&!C.nodeType&&C,m=u&&u.exports===b,Z=m&&c.process,p=function(){try{return Z&&Z.binding&&Z.binding("util")}catch{}}(),Y=p&&p.isTypedArray;function R(bg,ug){for(var fg=-1,Tg=bg==null?0:bg.length;++fg<Tg;)if(ug(bg[fg],fg,bg))return!0;return!1}function X(bg){var ug=-1,fg=Array(bg.size);return bg.forEach(function(Tg,cI){fg[++ug]=[cI,Tg]}),fg}function H(bg){var ug=-1,fg=Array(bg.size);return bg.forEach(function(Tg){fg[++ug]=Tg}),fg}var S,z,v,K=Array.prototype,V=Function.prototype,N=Object.prototype,B=h["__core-js_shared__"],G=V.toString,w=N.hasOwnProperty,W=(S=/[^.]+$/.exec(B&&B.keys&&B.keys.IE_PROTO||""))?"Symbol(src)_1."+S:"",y=N.toString,f=RegExp("^"+G.call(w).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),D=m?h.Buffer:void 0,F=h.Symbol,T=h.Uint8Array,Q=N.propertyIsEnumerable,P=K.splice,L=F?F.toStringTag:void 0,E=Object.getOwnPropertySymbols,J=D?D.isBuffer:void 0,k=(z=Object.keys,v=Object,function(bg){return z(v(bg))}),j=aI(h,"DataView"),q=aI(h,"Map"),tg=aI(h,"Promise"),Cg=aI(h,"Set"),x=aI(h,"WeakMap"),sg=aI(Object,"create"),Ag=oI(j),O=oI(q),_=oI(tg),Ig=oI(Cg),ng=oI(x),ag=F?F.prototype:void 0,lg=ag?ag.valueOf:void 0;function cg(bg){var ug=-1,fg=bg==null?0:bg.length;for(this.clear();++ug<fg;){var Tg=bg[ug];this.set(Tg[0],Tg[1])}}function dg(bg){var ug=-1,fg=bg==null?0:bg.length;for(this.clear();++ug<fg;){var Tg=bg[ug];this.set(Tg[0],Tg[1])}}function hg(bg){var ug=-1,fg=bg==null?0:bg.length;for(this.clear();++ug<fg;){var Tg=bg[ug];this.set(Tg[0],Tg[1])}}function rg(bg){var ug=-1,fg=bg==null?0:bg.length;for(this.__data__=new hg;++ug<fg;)this.add(bg[ug])}function Wg(bg){var ug=this.__data__=new dg(bg);this.size=ug.size}function Gg(bg,ug){var fg=fI(bg),Tg=!fg&&LI(bg),cI=!fg&&!Tg&&tI(bg),jg=!fg&&!Tg&&!cI&&Bg(bg),mI=fg||Tg||cI||jg,sI=mI?function(bI,yI){for(var wC=-1,_I=Array(bI);++wC<bI;)_I[wC]=yI(wC);return _I}(bg.length,String):[],gI=sI.length;for(var pI in bg)!w.call(bg,pI)||mI&&(pI=="length"||cI&&(pI=="offset"||pI=="parent")||jg&&(pI=="buffer"||pI=="byteLength"||pI=="byteOffset")||lI(pI,gI))||sI.push(pI);return sI}function Sg(bg,ug){for(var fg=bg.length;fg--;)if(Eg(bg[fg][0],ug))return fg;return-1}function Kg(bg){return bg==null?bg===void 0?"[object Undefined]":"[object Null]":L&&L in Object(bg)?function(ug){var fg=w.call(ug,L),Tg=ug[L];try{ug[L]=void 0;var cI=!0}catch{}var jg=y.call(ug);return cI&&(fg?ug[L]=Tg:delete ug[L]),jg}(bg):function(ug){return y.call(ug)}(bg)}function kg(bg){return kI(bg)&&Kg(bg)==A}function yg(bg,ug,fg,Tg,cI){return bg===ug||(bg==null||ug==null||!kI(bg)&&!kI(ug)?bg!=bg&&ug!=ug:function(jg,mI,sI,gI,pI,bI){var yI=fI(jg),wC=fI(mI),_I=yI?"[object Array]":Ug(jg),_C=wC?"[object Array]":Ug(mI),nC=(_I=_I==A?l:_I)==l,Ft=(_C=_C==A?l:_C)==l,og=_I==_C;if(og&&tI(jg)){if(!tI(mI))return!1;yI=!0,nC=!1}if(og&&!nC)return bI||(bI=new Wg),yI||Bg(jg)?Hg(jg,mI,sI,gI,pI,bI):function(vg,xg,zI,VI,YI,dI,CC){switch(zI){case"[object DataView]":if(vg.byteLength!=xg.byteLength||vg.byteOffset!=xg.byteOffset)return!1;vg=vg.buffer,xg=xg.buffer;case"[object ArrayBuffer]":return!(vg.byteLength!=xg.byteLength||!dI(new T(vg),new T(xg)));case"[object Boolean]":case"[object Date]":case"[object Number]":return Eg(+vg,+xg);case"[object Error]":return vg.name==xg.name&&vg.message==xg.message;case"[object RegExp]":case"[object String]":return vg==xg+"";case s:var OI=X;case n:var vI=1&VI;if(OI||(OI=H),vg.size!=xg.size&&!vI)return!1;var rC=CC.get(vg);if(rC)return rC==xg;VI|=2,CC.set(vg,xg);var hC=Hg(OI(vg),OI(xg),VI,YI,dI,CC);return CC.delete(vg),hC;case"[object Symbol]":if(lg)return lg.call(vg)==lg.call(xg)}return!1}(jg,mI,_I,sI,gI,pI,bI);if(!(1&sI)){var Zg=nC&&w.call(jg,"__wrapped__"),Dg=Ft&&w.call(mI,"__wrapped__");if(Zg||Dg){var Fg=Zg?jg.value():jg,II=Dg?mI.value():mI;return bI||(bI=new Wg),pI(Fg,II,sI,gI,bI)}}return og?(bI||(bI=new Wg),function(vg,xg,zI,VI,YI,dI){var CC=1&zI,OI=Jg(vg),vI=OI.length,rC=Jg(xg).length;if(vI!=rC&&!CC)return!1;for(var hC=vI;hC--;){var pt=OI[hC];if(!(CC?pt in xg:w.call(xg,pt)))return!1}var Ni=dI.get(vg);if(Ni&&dI.get(xg))return Ni==xg;var fA=!0;dI.set(vg,xg),dI.set(xg,vg);for(var Hs=CC;++hC<vI;){pt=OI[hC];var _e=vg[pt],Xs=xg[pt];if(VI)var qI=CC?VI(Xs,_e,pt,xg,vg,dI):VI(_e,Xs,pt,vg,xg,dI);if(!(qI===void 0?_e===Xs||YI(_e,Xs,zI,VI,dI):qI)){fA=!1;break}Hs||(Hs=pt=="constructor")}if(fA&&!Hs){var TI=vg.constructor,qe=xg.constructor;TI==qe||!("constructor"in vg)||!("constructor"in xg)||typeof TI=="function"&&TI instanceof TI&&typeof qe=="function"&&qe instanceof qe||(fA=!1)}return dI.delete(vg),dI.delete(xg),fA}(jg,mI,sI,gI,pI,bI)):!1}(bg,ug,fg,Tg,yg,cI))}function Vg(bg){return!(!nI(bg)||function(ug){return!!W&&W in ug}(bg))&&(WI(bg)?f:a).test(oI(bg))}function pg(bg){if(fg=(ug=bg)&&ug.constructor,Tg=typeof fg=="function"&&fg.prototype||N,ug!==Tg)return k(bg);var ug,fg,Tg,cI=[];for(var jg in Object(bg))w.call(bg,jg)&&jg!="constructor"&&cI.push(jg);return cI}function Hg(bg,ug,fg,Tg,cI,jg){var mI=1&fg,sI=bg.length,gI=ug.length;if(sI!=gI&&!(mI&&gI>sI))return!1;var pI=jg.get(bg);if(pI&&jg.get(ug))return pI==ug;var bI=-1,yI=!0,wC=2&fg?new rg:void 0;for(jg.set(bg,ug),jg.set(ug,bg);++bI<sI;){var _I=bg[bI],_C=ug[bI];if(Tg)var nC=mI?Tg(_C,_I,bI,ug,bg,jg):Tg(_I,_C,bI,bg,ug,jg);if(nC!==void 0){if(nC)continue;yI=!1;break}if(wC){if(!R(ug,function(Ft,og){if(Zg=og,!wC.has(Zg)&&(_I===Ft||cI(_I,Ft,fg,Tg,jg)))return wC.push(og);var Zg})){yI=!1;break}}else if(_I!==_C&&!cI(_I,_C,fg,Tg,jg)){yI=!1;break}}return jg.delete(bg),jg.delete(ug),yI}function Jg(bg){return function(ug,fg,Tg){var cI=fg(ug);return fI(ug)?cI:function(jg,mI){for(var sI=-1,gI=mI.length,pI=jg.length;++sI<gI;)jg[pI+sI]=mI[sI];return jg}(cI,Tg(ug))}(bg,hI,BI)}function zg(bg,ug){var fg,Tg,cI=bg.__data__;return((Tg=typeof(fg=ug))=="string"||Tg=="number"||Tg=="symbol"||Tg=="boolean"?fg!=="__proto__":fg===null)?cI[typeof ug=="string"?"string":"hash"]:cI.map}function aI(bg,ug){var fg=function(Tg,cI){return Tg==null?void 0:Tg[cI]}(bg,ug);return Vg(fg)?fg:void 0}cg.prototype.clear=function(){this.__data__=sg?sg(null):{},this.size=0},cg.prototype.delete=function(bg){var ug=this.has(bg)&&delete this.__data__[bg];return this.size-=ug?1:0,ug},cg.prototype.get=function(bg){var ug=this.__data__;if(sg){var fg=ug[bg];return fg==="__lodash_hash_undefined__"?void 0:fg}return w.call(ug,bg)?ug[bg]:void 0},cg.prototype.has=function(bg){var ug=this.__data__;return sg?ug[bg]!==void 0:w.call(ug,bg)},cg.prototype.set=function(bg,ug){var fg=this.__data__;return this.size+=this.has(bg)?0:1,fg[bg]=sg&&ug===void 0?"__lodash_hash_undefined__":ug,this},dg.prototype.clear=function(){this.__data__=[],this.size=0},dg.prototype.delete=function(bg){var ug=this.__data__,fg=Sg(ug,bg);return!(fg<0)&&(fg==ug.length-1?ug.pop():P.call(ug,fg,1),--this.size,!0)},dg.prototype.get=function(bg){var ug=this.__data__,fg=Sg(ug,bg);return fg<0?void 0:ug[fg][1]},dg.prototype.has=function(bg){return Sg(this.__data__,bg)>-1},dg.prototype.set=function(bg,ug){var fg=this.__data__,Tg=Sg(fg,bg);return Tg<0?(++this.size,fg.push([bg,ug])):fg[Tg][1]=ug,this},hg.prototype.clear=function(){this.size=0,this.__data__={hash:new cg,map:new(q||dg),string:new cg}},hg.prototype.delete=function(bg){var ug=zg(this,bg).delete(bg);return this.size-=ug?1:0,ug},hg.prototype.get=function(bg){return zg(this,bg).get(bg)},hg.prototype.has=function(bg){return zg(this,bg).has(bg)},hg.prototype.set=function(bg,ug){var fg=zg(this,bg),Tg=fg.size;return fg.set(bg,ug),this.size+=fg.size==Tg?0:1,this},rg.prototype.add=rg.prototype.push=function(bg){return this.__data__.set(bg,"__lodash_hash_undefined__"),this},rg.prototype.has=function(bg){return this.__data__.has(bg)},Wg.prototype.clear=function(){this.__data__=new dg,this.size=0},Wg.prototype.delete=function(bg){var ug=this.__data__,fg=ug.delete(bg);return this.size=ug.size,fg},Wg.prototype.get=function(bg){return this.__data__.get(bg)},Wg.prototype.has=function(bg){return this.__data__.has(bg)},Wg.prototype.set=function(bg,ug){var fg=this.__data__;if(fg instanceof dg){var Tg=fg.__data__;if(!q||Tg.length<199)return Tg.push([bg,ug]),this.size=++fg.size,this;fg=this.__data__=new hg(Tg)}return fg.set(bg,ug),this.size=fg.size,this};var BI=E?function(bg){return bg==null?[]:(bg=Object(bg),function(ug,fg){for(var Tg=-1,cI=ug==null?0:ug.length,jg=0,mI=[];++Tg<cI;){var sI=ug[Tg];fg(sI,Tg,ug)&&(mI[jg++]=sI)}return mI}(E(bg),function(ug){return Q.call(bg,ug)}))}:function(){return[]},Ug=Kg;function lI(bg,ug){return!!(ug=ug??9007199254740991)&&(typeof bg=="number"||d.test(bg))&&bg>-1&&bg%1==0&&bg<ug}function oI(bg){if(bg!=null){try{return G.call(bg)}catch{}try{return bg+""}catch{}}return""}function Eg(bg,ug){return bg===ug||bg!=bg&&ug!=ug}(j&&Ug(new j(new ArrayBuffer(1)))!="[object DataView]"||q&&Ug(new q)!=s||tg&&Ug(tg.resolve())!="[object Promise]"||Cg&&Ug(new Cg)!=n||x&&Ug(new x)!="[object WeakMap]")&&(Ug=function(bg){var ug=Kg(bg),fg=ug==l?bg.constructor:void 0,Tg=fg?oI(fg):"";if(Tg)switch(Tg){case Ag:return"[object DataView]";case O:return s;case _:return"[object Promise]";case Ig:return n;case ng:return"[object WeakMap]"}return ug});var LI=kg(function(){return arguments}())?kg:function(bg){return kI(bg)&&w.call(bg,"callee")&&!Q.call(bg,"callee")},fI=Array.isArray,tI=J||function(){return!1};function WI(bg){if(!nI(bg))return!1;var ug=Kg(bg);return ug=="[object Function]"||ug=="[object GeneratorFunction]"||ug=="[object AsyncFunction]"||ug=="[object Proxy]"}function QI(bg){return typeof bg=="number"&&bg>-1&&bg%1==0&&bg<=9007199254740991}function nI(bg){var ug=typeof bg;return bg!=null&&(ug=="object"||ug=="function")}function kI(bg){return bg!=null&&typeof bg=="object"}var Bg=Y?function(bg){return function(ug){return bg(ug)}}(Y):function(bg){return kI(bg)&&QI(bg.length)&&!!o[Kg(bg)]};function hI(bg){return(ug=bg)!=null&&QI(ug.length)&&!WI(ug)?Gg(bg):pg(bg);var ug}C.exports=function(bg,ug){return yg(bg,ug)}}).call(this)}).call(this,typeof FI<"u"?FI:typeof self<"u"?self:typeof window<"u"?window:{})},{}],446:[function(g,C,i){(function(e){(function(){var A=typeof e=="object"&&e&&e.Object===Object&&e,s=typeof self=="object"&&self&&self.Object===Object&&self,l=A||s||Function("return this")(),n=Object.prototype,a=n.hasOwnProperty,d=n.toString,o=l.Symbol,c=o?o.toStringTag:void 0;function r(h){return h==null?h===void 0?"[object Undefined]":"[object Null]":c&&c in Object(h)?function(b){var u=a.call(b,c),m=b[c];try{b[c]=void 0;var Z=!0}catch{}var p=d.call(b);return Z&&(u?b[c]=m:delete b[c]),p}(h):function(b){return d.call(b)}(h)}C.exports=function(h){if(!function(u){var m=typeof u;return u!=null&&(m=="object"||m=="function")}(h))return!1;var b=r(h);return b=="[object Function]"||b=="[object GeneratorFunction]"||b=="[object AsyncFunction]"||b=="[object Proxy]"}}).call(this)}).call(this,typeof FI<"u"?FI:typeof self<"u"?self:typeof window<"u"?window:{})},{}],447:[function(g,C,i){C.exports=function(e){return e==null}},{}],448:[function(g,C,i){C.exports=function(e){return e===void 0}},{}],449:[function(g,C,i){(function(e){(function(){var A=/^\[object .+?Constructor\]$/,s=typeof e=="object"&&e&&e.Object===Object&&e,l=typeof self=="object"&&self&&self.Object===Object&&self,n=s||l||Function("return this")();function a(F,T){return!!(F&&F.length)&&function(Q,P,L){if(P!=P)return function(k,j,q,tg){for(var Cg=k.length,x=q+-1;++x<Cg;)if(j(k[x],x,k))return x;return-1}(Q,d,L);for(var E=L-1,J=Q.length;++E<J;)if(Q[E]===P)return E;return-1}(F,T,0)>-1}function d(F){return F!=F}function o(F,T){return F.has(T)}function c(F){var T=-1,Q=Array(F.size);return F.forEach(function(P){Q[++T]=P}),Q}var r,h=Array.prototype,b=Function.prototype,u=Object.prototype,m=n["__core-js_shared__"],Z=(r=/[^.]+$/.exec(m&&m.keys&&m.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"",p=b.toString,Y=u.hasOwnProperty,R=u.toString,X=RegExp("^"+p.call(Y).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),H=h.splice,S=f(n,"Map"),z=f(n,"Set"),v=f(Object,"create");function K(F){var T=-1,Q=F?F.length:0;for(this.clear();++T<Q;){var P=F[T];this.set(P[0],P[1])}}function V(F){var T=-1,Q=F?F.length:0;for(this.clear();++T<Q;){var P=F[T];this.set(P[0],P[1])}}function N(F){var T=-1,Q=F?F.length:0;for(this.clear();++T<Q;){var P=F[T];this.set(P[0],P[1])}}function B(F){var T=-1,Q=F?F.length:0;for(this.__data__=new N;++T<Q;)this.add(F[T])}function G(F,T){for(var Q,P,L=F.length;L--;)if((Q=F[L][0])===(P=T)||Q!=Q&&P!=P)return L;return-1}function w(F){return!(!D(F)||(T=F,Z&&Z in T))&&(function(Q){var P=D(Q)?R.call(Q):"";return P=="[object Function]"||P=="[object GeneratorFunction]"}(F)||function(Q){var P=!1;if(Q!=null&&typeof Q.toString!="function")try{P=!!(Q+"")}catch{}return P}(F)?X:A).test(function(Q){if(Q!=null){try{return p.call(Q)}catch{}try{return Q+""}catch{}}return""}(F));var T}K.prototype.clear=function(){this.__data__=v?v(null):{}},K.prototype.delete=function(F){return this.has(F)&&delete this.__data__[F]},K.prototype.get=function(F){var T=this.__data__;if(v){var Q=T[F];return Q==="__lodash_hash_undefined__"?void 0:Q}return Y.call(T,F)?T[F]:void 0},K.prototype.has=function(F){var T=this.__data__;return v?T[F]!==void 0:Y.call(T,F)},K.prototype.set=function(F,T){return this.__data__[F]=v&&T===void 0?"__lodash_hash_undefined__":T,this},V.prototype.clear=function(){this.__data__=[]},V.prototype.delete=function(F){var T=this.__data__,Q=G(T,F);return!(Q<0)&&(Q==T.length-1?T.pop():H.call(T,Q,1),!0)},V.prototype.get=function(F){var T=this.__data__,Q=G(T,F);return Q<0?void 0:T[Q][1]},V.prototype.has=function(F){return G(this.__data__,F)>-1},V.prototype.set=function(F,T){var Q=this.__data__,P=G(Q,F);return P<0?Q.push([F,T]):Q[P][1]=T,this},N.prototype.clear=function(){this.__data__={hash:new K,map:new(S||V),string:new K}},N.prototype.delete=function(F){return y(this,F).delete(F)},N.prototype.get=function(F){return y(this,F).get(F)},N.prototype.has=function(F){return y(this,F).has(F)},N.prototype.set=function(F,T){return y(this,F).set(F,T),this},B.prototype.add=B.prototype.push=function(F){return this.__data__.set(F,"__lodash_hash_undefined__"),this},B.prototype.has=function(F){return this.__data__.has(F)};var W=z&&1/c(new z([,-0]))[1]==1/0?function(F){return new z(F)}:function(){};function y(F,T){var Q,P,L=F.__data__;return((P=typeof(Q=T))=="string"||P=="number"||P=="symbol"||P=="boolean"?Q!=="__proto__":Q===null)?L[typeof T=="string"?"string":"hash"]:L.map}function f(F,T){var Q=function(P,L){return P==null?void 0:P[L]}(F,T);return w(Q)?Q:void 0}function D(F){var T=typeof F;return!!F&&(T=="object"||T=="function")}C.exports=function(F){return F&&F.length?function(T,Q,P){var L=-1,E=a,J=T.length,k=!0,j=[],q=j;if(J>=200){var tg=W(T);if(tg)return c(tg);k=!1,E=o,q=new B}else q=j;g:for(;++L<J;){var Cg=T[L],x=Cg;if(Cg=Cg!==0?Cg:0,k&&x==x){for(var sg=q.length;sg--;)if(q[sg]===x)continue g;j.push(Cg)}else E(q,x,P)||(q!==j&&q.push(x),j.push(Cg))}return j}(F):[]}}).call(this)}).call(this,typeof FI<"u"?FI:typeof self<"u"?self:typeof window<"u"?window:{})},{}],450:[function(g,C,i){var e=g("inherits"),A=g("hash-base"),s=g("safe-buffer").Buffer,l=new Array(16);function n(){A.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878}function a(h,b){return h<<b|h>>>32-b}function d(h,b,u,m,Z,p,Y){return a(h+(b&u|~b&m)+Z+p|0,Y)+b|0}function o(h,b,u,m,Z,p,Y){return a(h+(b&m|u&~m)+Z+p|0,Y)+b|0}function c(h,b,u,m,Z,p,Y){return a(h+(b^u^m)+Z+p|0,Y)+b|0}function r(h,b,u,m,Z,p,Y){return a(h+(u^(b|~m))+Z+p|0,Y)+b|0}e(n,A),n.prototype._update=function(){for(var h=l,b=0;b<16;++b)h[b]=this._block.readInt32LE(4*b);var u=this._a,m=this._b,Z=this._c,p=this._d;u=d(u,m,Z,p,h[0],3614090360,7),p=d(p,u,m,Z,h[1],3905402710,12),Z=d(Z,p,u,m,h[2],606105819,17),m=d(m,Z,p,u,h[3],3250441966,22),u=d(u,m,Z,p,h[4],4118548399,7),p=d(p,u,m,Z,h[5],1200080426,12),Z=d(Z,p,u,m,h[6],2821735955,17),m=d(m,Z,p,u,h[7],4249261313,22),u=d(u,m,Z,p,h[8],1770035416,7),p=d(p,u,m,Z,h[9],2336552879,12),Z=d(Z,p,u,m,h[10],4294925233,17),m=d(m,Z,p,u,h[11],2304563134,22),u=d(u,m,Z,p,h[12],1804603682,7),p=d(p,u,m,Z,h[13],4254626195,12),Z=d(Z,p,u,m,h[14],2792965006,17),u=o(u,m=d(m,Z,p,u,h[15],1236535329,22),Z,p,h[1],4129170786,5),p=o(p,u,m,Z,h[6],3225465664,9),Z=o(Z,p,u,m,h[11],643717713,14),m=o(m,Z,p,u,h[0],3921069994,20),u=o(u,m,Z,p,h[5],3593408605,5),p=o(p,u,m,Z,h[10],38016083,9),Z=o(Z,p,u,m,h[15],3634488961,14),m=o(m,Z,p,u,h[4],3889429448,20),u=o(u,m,Z,p,h[9],568446438,5),p=o(p,u,m,Z,h[14],3275163606,9),Z=o(Z,p,u,m,h[3],4107603335,14),m=o(m,Z,p,u,h[8],1163531501,20),u=o(u,m,Z,p,h[13],2850285829,5),p=o(p,u,m,Z,h[2],4243563512,9),Z=o(Z,p,u,m,h[7],1735328473,14),u=c(u,m=o(m,Z,p,u,h[12],2368359562,20),Z,p,h[5],4294588738,4),p=c(p,u,m,Z,h[8],2272392833,11),Z=c(Z,p,u,m,h[11],1839030562,16),m=c(m,Z,p,u,h[14],4259657740,23),u=c(u,m,Z,p,h[1],2763975236,4),p=c(p,u,m,Z,h[4],1272893353,11),Z=c(Z,p,u,m,h[7],4139469664,16),m=c(m,Z,p,u,h[10],3200236656,23),u=c(u,m,Z,p,h[13],681279174,4),p=c(p,u,m,Z,h[0],3936430074,11),Z=c(Z,p,u,m,h[3],3572445317,16),m=c(m,Z,p,u,h[6],76029189,23),u=c(u,m,Z,p,h[9],3654602809,4),p=c(p,u,m,Z,h[12],3873151461,11),Z=c(Z,p,u,m,h[15],530742520,16),u=r(u,m=c(m,Z,p,u,h[2],3299628645,23),Z,p,h[0],4096336452,6),p=r(p,u,m,Z,h[7],1126891415,10),Z=r(Z,p,u,m,h[14],2878612391,15),m=r(m,Z,p,u,h[5],4237533241,21),u=r(u,m,Z,p,h[12],1700485571,6),p=r(p,u,m,Z,h[3],2399980690,10),Z=r(Z,p,u,m,h[10],4293915773,15),m=r(m,Z,p,u,h[1],2240044497,21),u=r(u,m,Z,p,h[8],1873313359,6),p=r(p,u,m,Z,h[15],4264355552,10),Z=r(Z,p,u,m,h[6],2734768916,15),m=r(m,Z,p,u,h[13],1309151649,21),u=r(u,m,Z,p,h[4],4149444226,6),p=r(p,u,m,Z,h[11],3174756917,10),Z=r(Z,p,u,m,h[2],718787259,15),m=r(m,Z,p,u,h[9],3951481745,21),this._a=this._a+u|0,this._b=this._b+m|0,this._c=this._c+Z|0,this._d=this._d+p|0},n.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var h=s.allocUnsafe(16);return h.writeInt32LE(this._a,0),h.writeInt32LE(this._b,4),h.writeInt32LE(this._c,8),h.writeInt32LE(this._d,12),h},C.exports=n},{"hash-base":425,inherits:440,"safe-buffer":494}],451:[function(g,C,i){var e=g("bn.js"),A=g("brorand");function s(l){this.rand=l||new A.Rand}C.exports=s,s.create=function(l){return new s(l)},s.prototype._randbelow=function(l){var n=l.bitLength(),a=Math.ceil(n/8);do var d=new e(this.rand.generate(a));while(d.cmp(l)>=0);return d},s.prototype._randrange=function(l,n){var a=n.sub(l);return l.add(this._randbelow(a))},s.prototype.test=function(l,n,a){var d=l.bitLength(),o=e.mont(l),c=new e(1).toRed(o);n||(n=Math.max(1,d/48|0));for(var r=l.subn(1),h=0;!r.testn(h);h++);for(var b=l.shrn(h),u=r.toRed(o);n>0;n--){var m=this._randrange(new e(2),r);a&&a(m);var Z=m.toRed(o).redPow(b);if(Z.cmp(c)!==0&&Z.cmp(u)!==0){for(var p=1;p<h;p++){if((Z=Z.redSqr()).cmp(c)===0)return!1;if(Z.cmp(u)===0)break}if(p===h)return!1}}return!0},s.prototype.getDivisor=function(l,n){var a=l.bitLength(),d=e.mont(l),o=new e(1).toRed(d);n||(n=Math.max(1,a/48|0));for(var c=l.subn(1),r=0;!c.testn(r);r++);for(var h=l.shrn(r),b=c.toRed(d);n>0;n--){var u=this._randrange(new e(2),c),m=l.gcd(u);if(m.cmpn(1)!==0)return m;var Z=u.toRed(d).redPow(h);if(Z.cmp(o)!==0&&Z.cmp(b)!==0){for(var p=1;p<r;p++){if((Z=Z.redSqr()).cmp(o)===0)return Z.fromRed().subn(1).gcd(l);if(Z.cmp(b)===0)break}if(p===r)return(Z=Z.redSqr()).fromRed().subn(1).gcd(l)}}return!1}},{"bn.js":452,brorand:187}],452:[function(g,C,i){arguments[4][184][0].apply(i,arguments)},{buffer:188,dup:184}],453:[function(g,C,i){function e(A,s){if(!A)throw new Error(s||"Assertion failed")}C.exports=e,e.equal=function(A,s,l){if(A!=s)throw new Error(l||"Assertion failed: "+A+" != "+s)}},{}],454:[function(g,C,i){var e=i;function A(l){return l.length===1?"0"+l:l}function s(l){for(var n="",a=0;a<l.length;a++)n+=A(l[a].toString(16));return n}e.toArray=function(l,n){if(Array.isArray(l))return l.slice();if(!l)return[];var a=[];if(typeof l!="string"){for(var d=0;d<l.length;d++)a[d]=0|l[d];return a}if(n==="hex")for((l=l.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(l="0"+l),d=0;d<l.length;d+=2)a.push(parseInt(l[d]+l[d+1],16));else for(d=0;d<l.length;d++){var o=l.charCodeAt(d),c=o>>8,r=255&o;c?a.push(c,r):a.push(r)}return a},e.zero2=A,e.toHex=s,e.encode=function(l,n){return n==="hex"?s(l):l}},{}],455:[function(g,C,i){C.exports={"2.16.840.1.101.3.4.1.1":"aes-128-ecb","2.16.840.1.101.3.4.1.2":"aes-128-cbc","2.16.840.1.101.3.4.1.3":"aes-128-ofb","2.16.840.1.101.3.4.1.4":"aes-128-cfb","2.16.840.1.101.3.4.1.21":"aes-192-ecb","2.16.840.1.101.3.4.1.22":"aes-192-cbc","2.16.840.1.101.3.4.1.23":"aes-192-ofb","2.16.840.1.101.3.4.1.24":"aes-192-cfb","2.16.840.1.101.3.4.1.41":"aes-256-ecb","2.16.840.1.101.3.4.1.42":"aes-256-cbc","2.16.840.1.101.3.4.1.43":"aes-256-ofb","2.16.840.1.101.3.4.1.44":"aes-256-cfb"}},{}],456:[function(g,C,i){var e=g("asn1.js");i.certificate=g("./certificate");var A=e.define("RSAPrivateKey",function(){this.seq().obj(this.key("version").int(),this.key("modulus").int(),this.key("publicExponent").int(),this.key("privateExponent").int(),this.key("prime1").int(),this.key("prime2").int(),this.key("exponent1").int(),this.key("exponent2").int(),this.key("coefficient").int())});i.RSAPrivateKey=A;var s=e.define("RSAPublicKey",function(){this.seq().obj(this.key("modulus").int(),this.key("publicExponent").int())});i.RSAPublicKey=s;var l=e.define("SubjectPublicKeyInfo",function(){this.seq().obj(this.key("algorithm").use(n),this.key("subjectPublicKey").bitstr())});i.PublicKey=l;var n=e.define("AlgorithmIdentifier",function(){this.seq().obj(this.key("algorithm").objid(),this.key("none").null_().optional(),this.key("curve").objid().optional(),this.key("params").seq().obj(this.key("p").int(),this.key("q").int(),this.key("g").int()).optional())}),a=e.define("PrivateKeyInfo",function(){this.seq().obj(this.key("version").int(),this.key("algorithm").use(n),this.key("subjectPrivateKey").octstr())});i.PrivateKey=a;var d=e.define("EncryptedPrivateKeyInfo",function(){this.seq().obj(this.key("algorithm").seq().obj(this.key("id").objid(),this.key("decrypt").seq().obj(this.key("kde").seq().obj(this.key("id").objid(),this.key("kdeparams").seq().obj(this.key("salt").octstr(),this.key("iters").int())),this.key("cipher").seq().obj(this.key("algo").objid(),this.key("iv").octstr()))),this.key("subjectPrivateKey").octstr())});i.EncryptedPrivateKey=d;var o=e.define("DSAPrivateKey",function(){this.seq().obj(this.key("version").int(),this.key("p").int(),this.key("q").int(),this.key("g").int(),this.key("pub_key").int(),this.key("priv_key").int())});i.DSAPrivateKey=o,i.DSAparam=e.define("DSAparam",function(){this.int()});var c=e.define("ECPrivateKey",function(){this.seq().obj(this.key("version").int(),this.key("privateKey").octstr(),this.key("parameters").optional().explicit(0).use(r),this.key("publicKey").optional().explicit(1).bitstr())});i.ECPrivateKey=c;var r=e.define("ECParameters",function(){this.choice({namedCurve:this.objid()})});i.signature=e.define("signature",function(){this.seq().obj(this.key("r").int(),this.key("s").int())})},{"./certificate":457,"asn1.js":170}],457:[function(g,C,i){var e=g("asn1.js"),A=e.define("Time",function(){this.choice({utcTime:this.utctime(),generalTime:this.gentime()})}),s=e.define("AttributeTypeValue",function(){this.seq().obj(this.key("type").objid(),this.key("value").any())}),l=e.define("AlgorithmIdentifier",function(){this.seq().obj(this.key("algorithm").objid(),this.key("parameters").optional(),this.key("curve").objid().optional())}),n=e.define("SubjectPublicKeyInfo",function(){this.seq().obj(this.key("algorithm").use(l),this.key("subjectPublicKey").bitstr())}),a=e.define("RelativeDistinguishedName",function(){this.setof(s)}),d=e.define("RDNSequence",function(){this.seqof(a)}),o=e.define("Name",function(){this.choice({rdnSequence:this.use(d)})}),c=e.define("Validity",function(){this.seq().obj(this.key("notBefore").use(A),this.key("notAfter").use(A))}),r=e.define("Extension",function(){this.seq().obj(this.key("extnID").objid(),this.key("critical").bool().def(!1),this.key("extnValue").octstr())}),h=e.define("TBSCertificate",function(){this.seq().obj(this.key("version").explicit(0).int().optional(),this.key("serialNumber").int(),this.key("signature").use(l),this.key("issuer").use(o),this.key("validity").use(c),this.key("subject").use(o),this.key("subjectPublicKeyInfo").use(n),this.key("issuerUniqueID").implicit(1).bitstr().optional(),this.key("subjectUniqueID").implicit(2).bitstr().optional(),this.key("extensions").explicit(3).seqof(r).optional())}),b=e.define("X509Certificate",function(){this.seq().obj(this.key("tbsCertificate").use(h),this.key("signatureAlgorithm").use(l),this.key("signatureValue").bitstr())});C.exports=b},{"asn1.js":170}],458:[function(g,C,i){var e=/Proc-Type: 4,ENCRYPTED[\n\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\n\r]+([0-9A-z\n\r+/=]+)[\n\r]+/m,A=/^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m,s=/^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\n\r+/=]+)-----END \1-----$/m,l=g("evp_bytestokey"),n=g("browserify-aes"),a=g("safe-buffer").Buffer;C.exports=function(d,o){var c,r=d.toString(),h=r.match(e);if(h){var b="aes"+h[1],u=a.from(h[2],"hex"),m=a.from(h[3].replace(/[\r\n]/g,""),"base64"),Z=l(o,u.slice(0,8),parseInt(h[1],10)).key,p=[],Y=n.createDecipheriv(b,Z,u);p.push(Y.update(m)),p.push(Y.final()),c=a.concat(p)}else{var R=r.match(s);c=a.from(R[2].replace(/[\r\n]/g,""),"base64")}return{tag:r.match(A)[1],data:c}}},{"browserify-aes":191,evp_bytestokey:423,"safe-buffer":494}],459:[function(g,C,i){var e=g("./asn1"),A=g("./aesid.json"),s=g("./fixProc"),l=g("browserify-aes"),n=g("pbkdf2"),a=g("safe-buffer").Buffer;function d(o){var c;typeof o!="object"||a.isBuffer(o)||(c=o.passphrase,o=o.key),typeof o=="string"&&(o=a.from(o));var r,h,b=s(o,c),u=b.tag,m=b.data;switch(u){case"CERTIFICATE":h=e.certificate.decode(m,"der").tbsCertificate.subjectPublicKeyInfo;case"PUBLIC KEY":switch(h||(h=e.PublicKey.decode(m,"der")),r=h.algorithm.algorithm.join(".")){case"1.2.840.113549.1.1.1":return e.RSAPublicKey.decode(h.subjectPublicKey.data,"der");case"1.2.840.10045.2.1":return h.subjectPrivateKey=h.subjectPublicKey,{type:"ec",data:h};case"1.2.840.10040.4.1":return h.algorithm.params.pub_key=e.DSAparam.decode(h.subjectPublicKey.data,"der"),{type:"dsa",data:h.algorithm.params};default:throw new Error("unknown key id "+r)}case"ENCRYPTED PRIVATE KEY":m=function(Z,p){var Y=Z.algorithm.decrypt.kde.kdeparams.salt,R=parseInt(Z.algorithm.decrypt.kde.kdeparams.iters.toString(),10),X=A[Z.algorithm.decrypt.cipher.algo.join(".")],H=Z.algorithm.decrypt.cipher.iv,S=Z.subjectPrivateKey,z=parseInt(X.split("-")[1],10)/8,v=n.pbkdf2Sync(p,Y,R,z,"sha1"),K=l.createDecipheriv(X,v,H),V=[];return V.push(K.update(S)),V.push(K.final()),a.concat(V)}(m=e.EncryptedPrivateKey.decode(m,"der"),c);case"PRIVATE KEY":switch(r=(h=e.PrivateKey.decode(m,"der")).algorithm.algorithm.join(".")){case"1.2.840.113549.1.1.1":return e.RSAPrivateKey.decode(h.subjectPrivateKey,"der");case"1.2.840.10045.2.1":return{curve:h.algorithm.curve,privateKey:e.ECPrivateKey.decode(h.subjectPrivateKey,"der").privateKey};case"1.2.840.10040.4.1":return h.algorithm.params.priv_key=e.DSAparam.decode(h.subjectPrivateKey,"der"),{type:"dsa",params:h.algorithm.params};default:throw new Error("unknown key id "+r)}case"RSA PUBLIC KEY":return e.RSAPublicKey.decode(m,"der");case"RSA PRIVATE KEY":return e.RSAPrivateKey.decode(m,"der");case"DSA PRIVATE KEY":return{type:"dsa",params:e.DSAPrivateKey.decode(m,"der")};case"EC PRIVATE KEY":return{curve:(m=e.ECPrivateKey.decode(m,"der")).parameters.value,privateKey:m.privateKey};default:throw new Error("unknown key type "+u)}}C.exports=d,d.signature=e.signature},{"./aesid.json":455,"./asn1":456,"./fixProc":458,"browserify-aes":191,pbkdf2:460,"safe-buffer":494}],460:[function(g,C,i){i.pbkdf2=g("./lib/async"),i.pbkdf2Sync=g("./lib/sync")},{"./lib/async":461,"./lib/sync":464}],461:[function(g,C,i){(function(e){(function(){var A,s,l=g("safe-buffer").Buffer,n=g("./precondition"),a=g("./default-encoding"),d=g("./sync"),o=g("./to-buffer"),c=e.crypto&&e.crypto.subtle,r={sha:"SHA-1","sha-1":"SHA-1",sha1:"SHA-1",sha256:"SHA-256","sha-256":"SHA-256",sha384:"SHA-384","sha-384":"SHA-384","sha-512":"SHA-512",sha512:"SHA-512"},h=[];function b(){return s||(s=e.process&&e.process.nextTick?e.process.nextTick:e.queueMicrotask?e.queueMicrotask:e.setImmediate?e.setImmediate:e.setTimeout)}function u(m,Z,p,Y,R){return c.importKey("raw",m,{name:"PBKDF2"},!1,["deriveBits"]).then(function(X){return c.deriveBits({name:"PBKDF2",salt:Z,iterations:p,hash:{name:R}},X,Y<<3)}).then(function(X){return l.from(X)})}C.exports=function(m,Z,p,Y,R,X){typeof R=="function"&&(X=R,R=void 0);var H=r[(R=R||"sha1").toLowerCase()];if(H&&typeof e.Promise=="function"){if(n(p,Y),m=o(m,a,"Password"),Z=o(Z,a,"Salt"),typeof X!="function")throw new Error("No callback provided to pbkdf2");(function(S,z){S.then(function(v){b()(function(){z(null,v)})},function(v){b()(function(){z(v)})})})(function(S){if(e.process&&!e.process.browser||!c||!c.importKey||!c.deriveBits)return Promise.resolve(!1);if(h[S]!==void 0)return h[S];var z=u(A=A||l.alloc(8),A,10,128,S).then(function(){return!0}).catch(function(){return!1});return h[S]=z,z}(H).then(function(S){return S?u(m,Z,p,Y,H):d(m,Z,p,Y,R)}),X)}else b()(function(){var S;try{S=d(m,Z,p,Y,R)}catch(z){return X(z)}X(null,S)})}}).call(this)}).call(this,typeof FI<"u"?FI:typeof self<"u"?self:typeof window<"u"?window:{})},{"./default-encoding":462,"./precondition":463,"./sync":464,"./to-buffer":465,"safe-buffer":494}],462:[function(g,C,i){(function(e,A){(function(){var s;A.process&&A.process.browser?s="utf-8":A.process&&A.process.version?s=parseInt(e.version.split(".")[0].slice(1),10)>=6?"utf-8":"binary":s="utf-8",C.exports=s}).call(this)}).call(this,g("_process"),typeof FI<"u"?FI:typeof self<"u"?self:typeof window<"u"?window:{})},{_process:467}],463:[function(g,C,i){var e=Math.pow(2,30)-1;C.exports=function(A,s){if(typeof A!="number")throw new TypeError("Iterations not a number");if(A<0)throw new TypeError("Bad iterations");if(typeof s!="number")throw new TypeError("Key length not a number");if(s<0||s>e||s!=s)throw new TypeError("Bad key length")}},{}],464:[function(g,C,i){var e=g("create-hash/md5"),A=g("ripemd160"),s=g("sha.js"),l=g("safe-buffer").Buffer,n=g("./precondition"),a=g("./default-encoding"),d=g("./to-buffer"),o=l.alloc(128),c={md5:16,sha1:20,sha224:28,sha256:32,sha384:48,sha512:64,rmd160:20,ripemd160:20};function r(h,b,u){var m=function(H){function S(z){return s(H).update(z).digest()}return H==="rmd160"||H==="ripemd160"?function(z){return new A().update(z).digest()}:H==="md5"?e:S}(h),Z=h==="sha512"||h==="sha384"?128:64;b.length>Z?b=m(b):b.length<Z&&(b=l.concat([b,o],Z));for(var p=l.allocUnsafe(Z+c[h]),Y=l.allocUnsafe(Z+c[h]),R=0;R<Z;R++)p[R]=54^b[R],Y[R]=92^b[R];var X=l.allocUnsafe(Z+u+4);p.copy(X,0,0,Z),this.ipad1=X,this.ipad2=p,this.opad=Y,this.alg=h,this.blocksize=Z,this.hash=m,this.size=c[h]}r.prototype.run=function(h,b){return h.copy(b,this.blocksize),this.hash(b).copy(this.opad,this.blocksize),this.hash(this.opad)},C.exports=function(h,b,u,m,Z){n(u,m);var p=new r(Z=Z||"sha1",h=d(h,a,"Password"),(b=d(b,a,"Salt")).length),Y=l.allocUnsafe(m),R=l.allocUnsafe(b.length+4);b.copy(R,0,0,b.length);for(var X=0,H=c[Z],S=Math.ceil(m/H),z=1;z<=S;z++){R.writeUInt32BE(z,b.length);for(var v=p.run(R,p.ipad1),K=v,V=1;V<u;V++){K=p.run(K,p.ipad2);for(var N=0;N<H;N++)v[N]^=K[N]}v.copy(Y,X),X+=H}return Y}},{"./default-encoding":462,"./precondition":463,"./to-buffer":465,"create-hash/md5":387,ripemd160:493,"safe-buffer":494,"sha.js":498}],465:[function(g,C,i){var e=g("safe-buffer").Buffer;C.exports=function(A,s,l){if(e.isBuffer(A))return A;if(typeof A=="string")return e.from(A,s);if(ArrayBuffer.isView(A))return e.from(A.buffer);throw new TypeError(l+" must be a string, a Buffer, a typed array or a DataView")}},{"safe-buffer":494}],466:[function(g,C,i){(function(e){(function(){e===void 0||!e.version||e.version.indexOf("v0.")===0||e.version.indexOf("v1.")===0&&e.version.indexOf("v1.8.")!==0?C.exports={nextTick:function(A,s,l,n){if(typeof A!="function")throw new TypeError('"callback" argument must be a function');var a,d,o=arguments.length;switch(o){case 0:case 1:return e.nextTick(A);case 2:return e.nextTick(function(){A.call(null,s)});case 3:return e.nextTick(function(){A.call(null,s,l)});case 4:return e.nextTick(function(){A.call(null,s,l,n)});default:for(a=new Array(o-1),d=0;d<a.length;)a[d++]=arguments[d];return e.nextTick(function(){A.apply(null,a)})}}}:C.exports=e}).call(this)}).call(this,g("_process"))},{_process:467}],467:[function(g,C,i){var e,A,s=C.exports={};function l(){throw new Error("setTimeout has not been defined")}function n(){throw new Error("clearTimeout has not been defined")}function a(Z){if(e===setTimeout)return setTimeout(Z,0);if((e===l||!e)&&setTimeout)return e=setTimeout,setTimeout(Z,0);try{return e(Z,0)}catch{try{return e.call(null,Z,0)}catch{return e.call(this,Z,0)}}}(function(){try{e=typeof setTimeout=="function"?setTimeout:l}catch{e=l}try{A=typeof clearTimeout=="function"?clearTimeout:n}catch{A=n}})();var d,o=[],c=!1,r=-1;function h(){c&&d&&(c=!1,d.length?o=d.concat(o):r=-1,o.length&&b())}function b(){if(!c){var Z=a(h);c=!0;for(var p=o.length;p;){for(d=o,o=[];++r<p;)d&&d[r].run();r=-1,p=o.length}d=null,c=!1,function(Y){if(A===clearTimeout)return clearTimeout(Y);if((A===n||!A)&&clearTimeout)return A=clearTimeout,clearTimeout(Y);try{A(Y)}catch{try{return A.call(null,Y)}catch{return A.call(this,Y)}}}(Z)}}function u(Z,p){this.fun=Z,this.array=p}function m(){}s.nextTick=function(Z){var p=new Array(arguments.length-1);if(arguments.length>1)for(var Y=1;Y<arguments.length;Y++)p[Y-1]=arguments[Y];o.push(new u(Z,p)),o.length!==1||c||a(b)},u.prototype.run=function(){this.fun.apply(null,this.array)},s.title="browser",s.browser=!0,s.env={},s.argv=[],s.version="",s.versions={},s.on=m,s.addListener=m,s.once=m,s.off=m,s.removeListener=m,s.removeAllListeners=m,s.emit=m,s.prependListener=m,s.prependOnceListener=m,s.listeners=function(Z){return[]},s.binding=function(Z){throw new Error("process.binding is not supported")},s.cwd=function(){return"/"},s.chdir=function(Z){throw new Error("process.chdir is not supported")},s.umask=function(){return 0}},{}],468:[function(g,C,i){i.publicEncrypt=g("./publicEncrypt"),i.privateDecrypt=g("./privateDecrypt"),i.privateEncrypt=function(e,A){return i.publicEncrypt(e,A,!0)},i.publicDecrypt=function(e,A){return i.privateDecrypt(e,A,!0)}},{"./privateDecrypt":471,"./publicEncrypt":472}],469:[function(g,C,i){var e=g("create-hash"),A=g("safe-buffer").Buffer;function s(l){var n=A.allocUnsafe(4);return n.writeUInt32BE(l,0),n}C.exports=function(l,n){for(var a,d=A.alloc(0),o=0;d.length<n;)a=s(o++),d=A.concat([d,e("sha1").update(l).update(a).digest()]);return d.slice(0,n)}},{"create-hash":386,"safe-buffer":494}],470:[function(g,C,i){arguments[4][184][0].apply(i,arguments)},{buffer:188,dup:184}],471:[function(g,C,i){var e=g("parse-asn1"),A=g("./mgf"),s=g("./xor"),l=g("bn.js"),n=g("browserify-rsa"),a=g("create-hash"),d=g("./withPublic"),o=g("safe-buffer").Buffer;C.exports=function(c,r,h){var b;b=c.padding?c.padding:h?1:4;var u,m=e(c),Z=m.modulus.byteLength();if(r.length>Z||new l(r).cmp(m.modulus)>=0)throw new Error("decryption error");u=h?d(new l(r),m):n(r,m);var p=o.alloc(Z-u.length);if(u=o.concat([p,u],Z),b===4)return function(Y,R){var X=Y.modulus.byteLength(),H=a("sha1").update(o.alloc(0)).digest(),S=H.length;if(R[0]!==0)throw new Error("decryption error");var z=R.slice(1,S+1),v=R.slice(S+1),K=s(z,A(v,S)),V=s(v,A(K,X-S-1));if(function(B,G){B=o.from(B),G=o.from(G);var w=0,W=B.length;B.length!==G.length&&(w++,W=Math.min(B.length,G.length));for(var y=-1;++y<W;)w+=B[y]^G[y];return w}(H,V.slice(0,S)))throw new Error("decryption error");for(var N=S;V[N]===0;)N++;if(V[N++]!==1)throw new Error("decryption error");return V.slice(N)}(m,u);if(b===1)return function(Y,R,X){for(var H=R.slice(0,2),S=2,z=0;R[S++]!==0;)if(S>=R.length){z++;break}var v=R.slice(2,S-1);if((H.toString("hex")!=="0002"&&!X||H.toString("hex")!=="0001"&&X)&&z++,v.length<8&&z++,z)throw new Error("decryption error");return R.slice(S)}(0,u,h);if(b===3)return u;throw new Error("unknown padding")}},{"./mgf":469,"./withPublic":473,"./xor":474,"bn.js":470,"browserify-rsa":209,"create-hash":386,"parse-asn1":459,"safe-buffer":494}],472:[function(g,C,i){var e=g("parse-asn1"),A=g("randombytes"),s=g("create-hash"),l=g("./mgf"),n=g("./xor"),a=g("bn.js"),d=g("./withPublic"),o=g("browserify-rsa"),c=g("safe-buffer").Buffer;C.exports=function(r,h,b){var u;u=r.padding?r.padding:b?1:4;var m,Z=e(r);if(u===4)m=function(p,Y){var R=p.modulus.byteLength(),X=Y.length,H=s("sha1").update(c.alloc(0)).digest(),S=H.length,z=2*S;if(X>R-z-2)throw new Error("message too long");var v=c.alloc(R-X-z-2),K=R-S-1,V=A(S),N=n(c.concat([H,v,c.alloc(1,1),Y],K),l(V,K)),B=n(V,l(N,S));return new a(c.concat([c.alloc(1),B,N],R))}(Z,h);else if(u===1)m=function(p,Y,R){var X,H=Y.length,S=p.modulus.byteLength();if(H>S-11)throw new Error("message too long");return X=R?c.alloc(S-H-3,255):function(z){for(var v,K=c.allocUnsafe(z),V=0,N=A(2*z),B=0;V<z;)B===N.length&&(N=A(2*z),B=0),(v=N[B++])&&(K[V++]=v);return K}(S-H-3),new a(c.concat([c.from([0,R?1:2]),X,c.alloc(1),Y],S))}(Z,h,b);else{if(u!==3)throw new Error("unknown padding");if((m=new a(h)).cmp(Z.modulus)>=0)throw new Error("data too long for modulus")}return b?o(m,Z):d(m,Z)}},{"./mgf":469,"./withPublic":473,"./xor":474,"bn.js":470,"browserify-rsa":209,"create-hash":386,"parse-asn1":459,randombytes:475,"safe-buffer":494}],473:[function(g,C,i){var e=g("bn.js"),A=g("safe-buffer").Buffer;C.exports=function(s,l){return A.from(s.toRed(e.mont(l.modulus)).redPow(new e(l.publicExponent)).fromRed().toArray())}},{"bn.js":470,"safe-buffer":494}],474:[function(g,C,i){C.exports=function(e,A){for(var s=e.length,l=-1;++l<s;)e[l]^=A[l];return e}},{}],475:[function(g,C,i){(function(e,A){(function(){var s=g("safe-buffer").Buffer,l=A.crypto||A.msCrypto;l&&l.getRandomValues?C.exports=function(n,a){if(n>4294967295)throw new RangeError("requested too many random bytes");var d=s.allocUnsafe(n);if(n>0)if(n>65536)for(var o=0;o<n;o+=65536)l.getRandomValues(d.slice(o,o+65536));else l.getRandomValues(d);return typeof a=="function"?e.nextTick(function(){a(null,d)}):d}:C.exports=function(){throw new Error(`Secure random number generation is not supported by this browser.
- Use Chrome, Firefox or Internet Explorer 11`)}}).call(this)}).call(this,g("_process"),typeof FI<"u"?FI:typeof self<"u"?self:typeof window<"u"?window:{})},{_process:467,"safe-buffer":494}],476:[function(g,C,i){(function(e,A){(function(){function s(){throw new Error(`secure random number generation not supported by this browser
- use chrome, FireFox or Internet Explorer 11`)}var l=g("safe-buffer"),n=g("randombytes"),a=l.Buffer,d=l.kMaxLength,o=A.crypto||A.msCrypto,c=Math.pow(2,32)-1;function r(u,m){if(typeof u!="number"||u!=u)throw new TypeError("offset must be a number");if(u>c||u<0)throw new TypeError("offset must be a uint32");if(u>d||u>m)throw new RangeError("offset out of range")}function h(u,m,Z){if(typeof u!="number"||u!=u)throw new TypeError("size must be a number");if(u>c||u<0)throw new TypeError("size must be a uint32");if(u+m>Z||u>d)throw new RangeError("buffer too small")}function b(u,m,Z,p){if(e.browser){var Y=u.buffer,R=new Uint8Array(Y,m,Z);return o.getRandomValues(R),p?void e.nextTick(function(){p(null,u)}):u}if(!p)return n(Z).copy(u,m),u;n(Z,function(X,H){if(X)return p(X);H.copy(u,m),p(null,u)})}o&&o.getRandomValues||!e.browser?(i.randomFill=function(u,m,Z,p){if(!(a.isBuffer(u)||u instanceof A.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');if(typeof m=="function")p=m,m=0,Z=u.length;else if(typeof Z=="function")p=Z,Z=u.length-m;else if(typeof p!="function")throw new TypeError('"cb" argument must be a function');return r(m,u.length),h(Z,m,u.length),b(u,m,Z,p)},i.randomFillSync=function(u,m,Z){if(m===void 0&&(m=0),!(a.isBuffer(u)||u instanceof A.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');return r(m,u.length),Z===void 0&&(Z=u.length-m),h(Z,m,u.length),b(u,m,Z)}):(i.randomFill=s,i.randomFillSync=s)}).call(this)}).call(this,g("_process"),typeof FI<"u"?FI:typeof self<"u"?self:typeof window<"u"?window:{})},{_process:467,randombytes:475,"safe-buffer":494}],477:[function(g,C,i){var e={};function A(l,n,a){a||(a=Error);var d=function(o){var c,r;function h(b,u,m){return o.call(this,function(Z,p,Y){return typeof n=="string"?n:n(Z,p,Y)}(b,u,m))||this}return r=o,(c=h).prototype=Object.create(r.prototype),c.prototype.constructor=c,c.__proto__=r,h}(a);d.prototype.name=a.name,d.prototype.code=l,e[l]=d}function s(l,n){if(Array.isArray(l)){var a=l.length;return l=l.map(function(d){return String(d)}),a>2?"one of ".concat(n," ").concat(l.slice(0,a-1).join(", "),", or ")+l[a-1]:a===2?"one of ".concat(n," ").concat(l[0]," or ").concat(l[1]):"of ".concat(n," ").concat(l[0])}return"of ".concat(n," ").concat(String(l))}A("ERR_INVALID_OPT_VALUE",function(l,n){return'The value "'+n+'" is invalid for option "'+l+'"'},TypeError),A("ERR_INVALID_ARG_TYPE",function(l,n,a){var d,o,c;if(typeof n=="string"&&(o="not ",n.substr(0,o.length)===o)?(d="must not be",n=n.replace(/^not /,"")):d="must be",function(h,b,u){return(u===void 0||u>h.length)&&(u=h.length),h.substring(u-b.length,u)===b}(l," argument"))c="The ".concat(l," ").concat(d," ").concat(s(n,"type"));else{var r=function(h,b,u){return typeof u!="number"&&(u=0),!(u+b.length>h.length)&&h.indexOf(b,u)!==-1}(l,".")?"property":"argument";c='The "'.concat(l,'" ').concat(r," ").concat(d," ").concat(s(n,"type"))}return c+=". Received type ".concat(typeof a)},TypeError),A("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF"),A("ERR_METHOD_NOT_IMPLEMENTED",function(l){return"The "+l+" method is not implemented"}),A("ERR_STREAM_PREMATURE_CLOSE","Premature close"),A("ERR_STREAM_DESTROYED",function(l){return"Cannot call "+l+" after a stream was destroyed"}),A("ERR_MULTIPLE_CALLBACK","Callback called multiple times"),A("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable"),A("ERR_STREAM_WRITE_AFTER_END","write after end"),A("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),A("ERR_UNKNOWN_ENCODING",function(l){return"Unknown encoding: "+l},TypeError),A("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event"),C.exports.codes=e},{}],478:[function(g,C,i){(function(e){(function(){var A=Object.keys||function(h){var b=[];for(var u in h)b.push(u);return b};C.exports=o;var s=g("./_stream_readable"),l=g("./_stream_writable");g("inherits")(o,s);for(var n=A(l.prototype),a=0;a<n.length;a++){var d=n[a];o.prototype[d]||(o.prototype[d]=l.prototype[d])}function o(h){if(!(this instanceof o))return new o(h);s.call(this,h),l.call(this,h),this.allowHalfOpen=!0,h&&(h.readable===!1&&(this.readable=!1),h.writable===!1&&(this.writable=!1),h.allowHalfOpen===!1&&(this.allowHalfOpen=!1,this.once("end",c)))}function c(){this._writableState.ended||e.nextTick(r,this)}function r(h){h.end()}Object.defineProperty(o.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),Object.defineProperty(o.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(o.prototype,"writableLength",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(o.prototype,"destroyed",{enumerable:!1,get:function(){return this._readableState!==void 0&&this._writableState!==void 0&&this._readableState.destroyed&&this._writableState.destroyed},set:function(h){this._readableState!==void 0&&this._writableState!==void 0&&(this._readableState.destroyed=h,this._writableState.destroyed=h)}})}).call(this)}).call(this,g("_process"))},{"./_stream_readable":480,"./_stream_writable":482,_process:467,inherits:440}],479:[function(g,C,i){C.exports=A;var e=g("./_stream_transform");function A(s){if(!(this instanceof A))return new A(s);e.call(this,s)}g("inherits")(A,e),A.prototype._transform=function(s,l,n){n(null,s)}},{"./_stream_transform":481,inherits:440}],480:[function(g,C,i){(function(e,A){(function(){var s;C.exports=K,K.ReadableState=v,g("events").EventEmitter;var l=function(J,k){return J.listeners(k).length},n=g("./internal/streams/stream"),a=g("buffer").Buffer,d=(A!==void 0?A:typeof window<"u"?window:typeof self<"u"?self:{}).Uint8Array||function(){},o,c=g("util");o=c&&c.debuglog?c.debuglog("stream"):function(){};var r,h,b,u=g("./internal/streams/buffer_list"),m=g("./internal/streams/destroy"),Z=g("./internal/streams/state").getHighWaterMark,p=g("../errors").codes,Y=p.ERR_INVALID_ARG_TYPE,R=p.ERR_STREAM_PUSH_AFTER_EOF,X=p.ERR_METHOD_NOT_IMPLEMENTED,H=p.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;g("inherits")(K,n);var S=m.errorOrDestroy,z=["error","close","destroy","pause","resume"];function v(J,k,j){s=s||g("./_stream_duplex"),J=J||{},typeof j!="boolean"&&(j=k instanceof s),this.objectMode=!!J.objectMode,j&&(this.objectMode=this.objectMode||!!J.readableObjectMode),this.highWaterMark=Z(this,J,"readableHighWaterMark",j),this.buffer=new u,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=J.emitClose!==!1,this.autoDestroy=!!J.autoDestroy,this.destroyed=!1,this.defaultEncoding=J.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,J.encoding&&(r||(r=g("string_decoder/").StringDecoder),this.decoder=new r(J.encoding),this.encoding=J.encoding)}function K(J){if(s=s||g("./_stream_duplex"),!(this instanceof K))return new K(J);var k=this instanceof s;this._readableState=new v(J,this,k),this.readable=!0,J&&(typeof J.read=="function"&&(this._read=J.read),typeof J.destroy=="function"&&(this._destroy=J.destroy)),n.call(this)}function V(J,k,j,q,tg){o("readableAddChunk",k);var Cg,x=J._readableState;if(k===null)x.reading=!1,function(sg,Ag){if(o("onEofChunk"),!Ag.ended){if(Ag.decoder){var O=Ag.decoder.end();O&&O.length&&(Ag.buffer.push(O),Ag.length+=Ag.objectMode?1:O.length)}Ag.ended=!0,Ag.sync?G(sg):(Ag.needReadable=!1,Ag.emittedReadable||(Ag.emittedReadable=!0,w(sg)))}}(J,x);else if(tg||(Cg=function(sg,Ag){var O;_=Ag,a.isBuffer(_)||_ instanceof d||typeof Ag=="string"||Ag===void 0||sg.objectMode||(O=new Y("chunk",["string","Buffer","Uint8Array"],Ag));var _;return O}(x,k)),Cg)S(J,Cg);else if(x.objectMode||k&&k.length>0)if(typeof k=="string"||x.objectMode||Object.getPrototypeOf(k)===a.prototype||(k=function(sg){return a.from(sg)}(k)),q)x.endEmitted?S(J,new H):N(J,x,k,!0);else if(x.ended)S(J,new R);else{if(x.destroyed)return!1;x.reading=!1,x.decoder&&!j?(k=x.decoder.write(k),x.objectMode||k.length!==0?N(J,x,k,!1):W(J,x)):N(J,x,k,!1)}else q||(x.reading=!1,W(J,x));return!x.ended&&(x.length<x.highWaterMark||x.length===0)}function N(J,k,j,q){k.flowing&&k.length===0&&!k.sync?(k.awaitDrain=0,J.emit("data",j)):(k.length+=k.objectMode?1:j.length,q?k.buffer.unshift(j):k.buffer.push(j),k.needReadable&&G(J)),W(J,k)}Object.defineProperty(K.prototype,"destroyed",{enumerable:!1,get:function(){return this._readableState!==void 0&&this._readableState.destroyed},set:function(J){this._readableState&&(this._readableState.destroyed=J)}}),K.prototype.destroy=m.destroy,K.prototype._undestroy=m.undestroy,K.prototype._destroy=function(J,k){k(J)},K.prototype.push=function(J,k){var j,q=this._readableState;return q.objectMode?j=!0:typeof J=="string"&&((k=k||q.defaultEncoding)!==q.encoding&&(J=a.from(J,k),k=""),j=!0),V(this,J,k,!1,j)},K.prototype.unshift=function(J){return V(this,J,null,!0,!1)},K.prototype.isPaused=function(){return this._readableState.flowing===!1},K.prototype.setEncoding=function(J){r||(r=g("string_decoder/").StringDecoder);var k=new r(J);this._readableState.decoder=k,this._readableState.encoding=this._readableState.decoder.encoding;for(var j=this._readableState.buffer.head,q="";j!==null;)q+=k.write(j.data),j=j.next;return this._readableState.buffer.clear(),q!==""&&this._readableState.buffer.push(q),this._readableState.length=q.length,this};function B(J,k){return J<=0||k.length===0&&k.ended?0:k.objectMode?1:J!=J?k.flowing&&k.length?k.buffer.head.data.length:k.length:(J>k.highWaterMark&&(k.highWaterMark=function(j){return j>=1073741824?j=1073741824:(j--,j|=j>>>1,j|=j>>>2,j|=j>>>4,j|=j>>>8,j|=j>>>16,j++),j}(J)),J<=k.length?J:k.ended?k.length:(k.needReadable=!0,0))}function G(J){var k=J._readableState;o("emitReadable",k.needReadable,k.emittedReadable),k.needReadable=!1,k.emittedReadable||(o("emitReadable",k.flowing),k.emittedReadable=!0,e.nextTick(w,J))}function w(J){var k=J._readableState;o("emitReadable_",k.destroyed,k.length,k.ended),k.destroyed||!k.length&&!k.ended||(J.emit("readable"),k.emittedReadable=!1),k.needReadable=!k.flowing&&!k.ended&&k.length<=k.highWaterMark,T(J)}function W(J,k){k.readingMore||(k.readingMore=!0,e.nextTick(y,J,k))}function y(J,k){for(;!k.reading&&!k.ended&&(k.length<k.highWaterMark||k.flowing&&k.length===0);){var j=k.length;if(o("maybeReadMore read 0"),J.read(0),j===k.length)break}k.readingMore=!1}function f(J){var k=J._readableState;k.readableListening=J.listenerCount("readable")>0,k.resumeScheduled&&!k.paused?k.flowing=!0:J.listenerCount("data")>0&&J.resume()}function D(J){o("readable nexttick read 0"),J.read(0)}function F(J,k){o("resume",k.reading),k.reading||J.read(0),k.resumeScheduled=!1,J.emit("resume"),T(J),k.flowing&&!k.reading&&J.read(0)}function T(J){var k=J._readableState;for(o("flow",k.flowing);k.flowing&&J.read()!==null;);}function Q(J,k){return k.length===0?null:(k.objectMode?j=k.buffer.shift():!J||J>=k.length?(j=k.decoder?k.buffer.join(""):k.buffer.length===1?k.buffer.first():k.buffer.concat(k.length),k.buffer.clear()):j=k.buffer.consume(J,k.decoder),j);var j}function P(J){var k=J._readableState;o("endReadable",k.endEmitted),k.endEmitted||(k.ended=!0,e.nextTick(L,k,J))}function L(J,k){if(o("endReadableNT",J.endEmitted,J.length),!J.endEmitted&&J.length===0&&(J.endEmitted=!0,k.readable=!1,k.emit("end"),J.autoDestroy)){var j=k._writableState;(!j||j.autoDestroy&&j.finished)&&k.destroy()}}function E(J,k){for(var j=0,q=J.length;j<q;j++)if(J[j]===k)return j;return-1}K.prototype.read=function(J){o("read",J),J=parseInt(J,10);var k=this._readableState,j=J;if(J!==0&&(k.emittedReadable=!1),J===0&&k.needReadable&&((k.highWaterMark!==0?k.length>=k.highWaterMark:k.length>0)||k.ended))return o("read: emitReadable",k.length,k.ended),k.length===0&&k.ended?P(this):G(this),null;if((J=B(J,k))===0&&k.ended)return k.length===0&&P(this),null;var q,tg=k.needReadable;return o("need readable",tg),(k.length===0||k.length-J<k.highWaterMark)&&o("length less than watermark",tg=!0),k.ended||k.reading?o("reading or ended",tg=!1):tg&&(o("do read"),k.reading=!0,k.sync=!0,k.length===0&&(k.needReadable=!0),this._read(k.highWaterMark),k.sync=!1,k.reading||(J=B(j,k))),(q=J>0?Q(J,k):null)===null?(k.needReadable=k.length<=k.highWaterMark,J=0):(k.length-=J,k.awaitDrain=0),k.length===0&&(k.ended||(k.needReadable=!0),j!==J&&k.ended&&P(this)),q!==null&&this.emit("data",q),q},K.prototype._read=function(J){S(this,new X("_read()"))},K.prototype.pipe=function(J,k){var j=this,q=this._readableState;switch(q.pipesCount){case 0:q.pipes=J;break;case 1:q.pipes=[q.pipes,J];break;default:q.pipes.push(J)}q.pipesCount+=1,o("pipe count=%d opts=%j",q.pipesCount,k);var tg=(!k||k.end!==!1)&&J!==e.stdout&&J!==e.stderr?x:ag;function Cg(lg,cg){o("onunpipe"),lg===j&&cg&&cg.hasUnpiped===!1&&(cg.hasUnpiped=!0,o("cleanup"),J.removeListener("close",Ig),J.removeListener("finish",ng),J.removeListener("drain",sg),J.removeListener("error",_),J.removeListener("unpipe",Cg),j.removeListener("end",x),j.removeListener("end",ag),j.removeListener("data",O),Ag=!0,!q.awaitDrain||J._writableState&&!J._writableState.needDrain||sg())}function x(){o("onend"),J.end()}q.endEmitted?e.nextTick(tg):j.once("end",tg),J.on("unpipe",Cg);var sg=function(lg){return function(){var cg=lg._readableState;o("pipeOnDrain",cg.awaitDrain),cg.awaitDrain&&cg.awaitDrain--,cg.awaitDrain===0&&l(lg,"data")&&(cg.flowing=!0,T(lg))}}(j);J.on("drain",sg);var Ag=!1;function O(lg){o("ondata");var cg=J.write(lg);o("dest.write",cg),cg===!1&&((q.pipesCount===1&&q.pipes===J||q.pipesCount>1&&E(q.pipes,J)!==-1)&&!Ag&&(o("false write response, pause",q.awaitDrain),q.awaitDrain++),j.pause())}function _(lg){o("onerror",lg),ag(),J.removeListener("error",_),l(J,"error")===0&&S(J,lg)}function Ig(){J.removeListener("finish",ng),ag()}function ng(){o("onfinish"),J.removeListener("close",Ig),ag()}function ag(){o("unpipe"),j.unpipe(J)}return j.on("data",O),function(lg,cg,dg){if(typeof lg.prependListener=="function")return lg.prependListener(cg,dg);lg._events&&lg._events[cg]?Array.isArray(lg._events[cg])?lg._events[cg].unshift(dg):lg._events[cg]=[dg,lg._events[cg]]:lg.on(cg,dg)}(J,"error",_),J.once("close",Ig),J.once("finish",ng),J.emit("pipe",j),q.flowing||(o("pipe resume"),j.resume()),J},K.prototype.unpipe=function(J){var k=this._readableState,j={hasUnpiped:!1};if(k.pipesCount===0)return this;if(k.pipesCount===1)return J&&J!==k.pipes||(J||(J=k.pipes),k.pipes=null,k.pipesCount=0,k.flowing=!1,J&&J.emit("unpipe",this,j)),this;if(!J){var q=k.pipes,tg=k.pipesCount;k.pipes=null,k.pipesCount=0,k.flowing=!1;for(var Cg=0;Cg<tg;Cg++)q[Cg].emit("unpipe",this,{hasUnpiped:!1});return this}var x=E(k.pipes,J);return x===-1||(k.pipes.splice(x,1),k.pipesCount-=1,k.pipesCount===1&&(k.pipes=k.pipes[0]),J.emit("unpipe",this,j)),this},K.prototype.on=function(J,k){var j=n.prototype.on.call(this,J,k),q=this._readableState;return J==="data"?(q.readableListening=this.listenerCount("readable")>0,q.flowing!==!1&&this.resume()):J==="readable"&&(q.endEmitted||q.readableListening||(q.readableListening=q.needReadable=!0,q.flowing=!1,q.emittedReadable=!1,o("on readable",q.length,q.reading),q.length?G(this):q.reading||e.nextTick(D,this))),j},K.prototype.addListener=K.prototype.on,K.prototype.removeListener=function(J,k){var j=n.prototype.removeListener.call(this,J,k);return J==="readable"&&e.nextTick(f,this),j},K.prototype.removeAllListeners=function(J){var k=n.prototype.removeAllListeners.apply(this,arguments);return J!=="readable"&&J!==void 0||e.nextTick(f,this),k},K.prototype.resume=function(){var J=this._readableState;return J.flowing||(o("resume"),J.flowing=!J.readableListening,function(k,j){j.resumeScheduled||(j.resumeScheduled=!0,e.nextTick(F,k,j))}(this,J)),J.paused=!1,this},K.prototype.pause=function(){return o("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(o("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this},K.prototype.wrap=function(J){var k=this,j=this._readableState,q=!1;for(var tg in J.on("end",function(){if(o("wrapped end"),j.decoder&&!j.ended){var x=j.decoder.end();x&&x.length&&k.push(x)}k.push(null)}),J.on("data",function(x){o("wrapped data"),j.decoder&&(x=j.decoder.write(x)),j.objectMode&&x==null||(j.objectMode||x&&x.length)&&(k.push(x)||(q=!0,J.pause()))}),J)this[tg]===void 0&&typeof J[tg]=="function"&&(this[tg]=function(x){return function(){return J[x].apply(J,arguments)}}(tg));for(var Cg=0;Cg<z.length;Cg++)J.on(z[Cg],this.emit.bind(this,z[Cg]));return this._read=function(x){o("wrapped _read",x),q&&(q=!1,J.resume())},this},typeof Symbol=="function"&&(K.prototype[Symbol.asyncIterator]=function(){return h===void 0&&(h=g("./internal/streams/async_iterator")),h(this)}),Object.defineProperty(K.prototype,"readableHighWaterMark",{enumerable:!1,get:function(){return this._readableState.highWaterMark}}),Object.defineProperty(K.prototype,"readableBuffer",{enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}}),Object.defineProperty(K.prototype,"readableFlowing",{enumerable:!1,get:function(){return this._readableState.flowing},set:function(J){this._readableState&&(this._readableState.flowing=J)}}),K._fromList=Q,Object.defineProperty(K.prototype,"readableLength",{enumerable:!1,get:function(){return this._readableState.length}}),typeof Symbol=="function"&&(K.from=function(J,k){return b===void 0&&(b=g("./internal/streams/from")),b(K,J,k)})}).call(this)}).call(this,g("_process"),typeof FI<"u"?FI:typeof self<"u"?self:typeof window<"u"?window:{})},{"../errors":477,"./_stream_duplex":478,"./internal/streams/async_iterator":483,"./internal/streams/buffer_list":484,"./internal/streams/destroy":485,"./internal/streams/from":487,"./internal/streams/state":489,"./internal/streams/stream":490,_process:467,buffer:220,events:422,inherits:440,"string_decoder/":522,util:188}],481:[function(g,C,i){C.exports=o;var e=g("../errors").codes,A=e.ERR_METHOD_NOT_IMPLEMENTED,s=e.ERR_MULTIPLE_CALLBACK,l=e.ERR_TRANSFORM_ALREADY_TRANSFORMING,n=e.ERR_TRANSFORM_WITH_LENGTH_0,a=g("./_stream_duplex");function d(h,b){var u=this._transformState;u.transforming=!1;var m=u.writecb;if(m===null)return this.emit("error",new s);u.writechunk=null,u.writecb=null,b!=null&&this.push(b),m(h);var Z=this._readableState;Z.reading=!1,(Z.needReadable||Z.length<Z.highWaterMark)&&this._read(Z.highWaterMark)}function o(h){if(!(this instanceof o))return new o(h);a.call(this,h),this._transformState={afterTransform:d.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,h&&(typeof h.transform=="function"&&(this._transform=h.transform),typeof h.flush=="function"&&(this._flush=h.flush)),this.on("prefinish",c)}function c(){var h=this;typeof this._flush!="function"||this._readableState.destroyed?r(this,null,null):this._flush(function(b,u){r(h,b,u)})}function r(h,b,u){if(b)return h.emit("error",b);if(u!=null&&h.push(u),h._writableState.length)throw new n;if(h._transformState.transforming)throw new l;return h.push(null)}g("inherits")(o,a),o.prototype.push=function(h,b){return this._transformState.needTransform=!1,a.prototype.push.call(this,h,b)},o.prototype._transform=function(h,b,u){u(new A("_transform()"))},o.prototype._write=function(h,b,u){var m=this._transformState;if(m.writecb=u,m.writechunk=h,m.writeencoding=b,!m.transforming){var Z=this._readableState;(m.needTransform||Z.needReadable||Z.length<Z.highWaterMark)&&this._read(Z.highWaterMark)}},o.prototype._read=function(h){var b=this._transformState;b.writechunk===null||b.transforming?b.needTransform=!0:(b.transforming=!0,this._transform(b.writechunk,b.writeencoding,b.afterTransform))},o.prototype._destroy=function(h,b){a.prototype._destroy.call(this,h,function(u){b(u)})}},{"../errors":477,"./_stream_duplex":478,inherits:440}],482:[function(g,C,i){(function(e,A){(function(){function s(y){var f=this;this.next=null,this.entry=null,this.finish=function(){(function(D,F,T){var Q=D.entry;for(D.entry=null;Q;){var P=Q.callback;F.pendingcb--,P(T),Q=Q.next}F.corkedRequestsFree.next=D})(f,y)}}var l;C.exports=K,K.WritableState=v;var n={deprecate:g("util-deprecate")},a=g("./internal/streams/stream"),d=g("buffer").Buffer,o=(A!==void 0?A:typeof window<"u"?window:typeof self<"u"?self:{}).Uint8Array||function(){},c,r=g("./internal/streams/destroy"),h=g("./internal/streams/state").getHighWaterMark,b=g("../errors").codes,u=b.ERR_INVALID_ARG_TYPE,m=b.ERR_METHOD_NOT_IMPLEMENTED,Z=b.ERR_MULTIPLE_CALLBACK,p=b.ERR_STREAM_CANNOT_PIPE,Y=b.ERR_STREAM_DESTROYED,R=b.ERR_STREAM_NULL_VALUES,X=b.ERR_STREAM_WRITE_AFTER_END,H=b.ERR_UNKNOWN_ENCODING,S=r.errorOrDestroy;function z(){}function v(y,f,D){l=l||g("./_stream_duplex"),y=y||{},typeof D!="boolean"&&(D=f instanceof l),this.objectMode=!!y.objectMode,D&&(this.objectMode=this.objectMode||!!y.writableObjectMode),this.highWaterMark=h(this,y,"writableHighWaterMark",D),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var F=y.decodeStrings===!1;this.decodeStrings=!F,this.defaultEncoding=y.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(T){(function(Q,P){var L=Q._writableState,E=L.sync,J=L.writecb;if(typeof J!="function")throw new Z;if(function(j){j.writing=!1,j.writecb=null,j.length-=j.writelen,j.writelen=0}(L),P)(function(j,q,tg,Cg,x){--q.pendingcb,tg?(e.nextTick(x,Cg),e.nextTick(W,j,q),j._writableState.errorEmitted=!0,S(j,Cg)):(x(Cg),j._writableState.errorEmitted=!0,S(j,Cg),W(j,q))})(Q,L,E,P,J);else{var k=G(L)||Q.destroyed;k||L.corked||L.bufferProcessing||!L.bufferedRequest||B(Q,L),E?e.nextTick(N,Q,L,k,J):N(Q,L,k,J)}})(f,T)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=y.emitClose!==!1,this.autoDestroy=!!y.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new s(this)}function K(y){var f=this instanceof(l=l||g("./_stream_duplex"));if(!f&&!c.call(K,this))return new K(y);this._writableState=new v(y,this,f),this.writable=!0,y&&(typeof y.write=="function"&&(this._write=y.write),typeof y.writev=="function"&&(this._writev=y.writev),typeof y.destroy=="function"&&(this._destroy=y.destroy),typeof y.final=="function"&&(this._final=y.final)),a.call(this)}function V(y,f,D,F,T,Q,P){f.writelen=F,f.writecb=P,f.writing=!0,f.sync=!0,f.destroyed?f.onwrite(new Y("write")):D?y._writev(T,f.onwrite):y._write(T,Q,f.onwrite),f.sync=!1}function N(y,f,D,F){D||function(T,Q){Q.length===0&&Q.needDrain&&(Q.needDrain=!1,T.emit("drain"))}(y,f),f.pendingcb--,F(),W(y,f)}function B(y,f){f.bufferProcessing=!0;var D=f.bufferedRequest;if(y._writev&&D&&D.next){var F=f.bufferedRequestCount,T=new Array(F),Q=f.corkedRequestsFree;Q.entry=D;for(var P=0,L=!0;D;)T[P]=D,D.isBuf||(L=!1),D=D.next,P+=1;T.allBuffers=L,V(y,f,!0,f.length,T,"",Q.finish),f.pendingcb++,f.lastBufferedRequest=null,Q.next?(f.corkedRequestsFree=Q.next,Q.next=null):f.corkedRequestsFree=new s(f),f.bufferedRequestCount=0}else{for(;D;){var E=D.chunk,J=D.encoding,k=D.callback;if(V(y,f,!1,f.objectMode?1:E.length,E,J,k),D=D.next,f.bufferedRequestCount--,f.writing)break}D===null&&(f.lastBufferedRequest=null)}f.bufferedRequest=D,f.bufferProcessing=!1}function G(y){return y.ending&&y.length===0&&y.bufferedRequest===null&&!y.finished&&!y.writing}function w(y,f){y._final(function(D){f.pendingcb--,D&&S(y,D),f.prefinished=!0,y.emit("prefinish"),W(y,f)})}function W(y,f){var D=G(f);if(D&&(function(T,Q){Q.prefinished||Q.finalCalled||(typeof T._final!="function"||Q.destroyed?(Q.prefinished=!0,T.emit("prefinish")):(Q.pendingcb++,Q.finalCalled=!0,e.nextTick(w,T,Q)))}(y,f),f.pendingcb===0&&(f.finished=!0,y.emit("finish"),f.autoDestroy))){var F=y._readableState;(!F||F.autoDestroy&&F.endEmitted)&&y.destroy()}return D}g("inherits")(K,a),v.prototype.getBuffer=function(){for(var y=this.bufferedRequest,f=[];y;)f.push(y),y=y.next;return f},function(){try{Object.defineProperty(v.prototype,"buffer",{get:n.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch{}}(),typeof Symbol=="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]=="function"?(c=Function.prototype[Symbol.hasInstance],Object.defineProperty(K,Symbol.hasInstance,{value:function(y){return!!c.call(this,y)||this===K&&y&&y._writableState instanceof v}})):c=function(y){return y instanceof this},K.prototype.pipe=function(){S(this,new p)},K.prototype.write=function(y,f,D){var F,T=this._writableState,Q=!1,P=!T.objectMode&&(F=y,d.isBuffer(F)||F instanceof o);return P&&!d.isBuffer(y)&&(y=function(L){return d.from(L)}(y)),typeof f=="function"&&(D=f,f=null),P?f="buffer":f||(f=T.defaultEncoding),typeof D!="function"&&(D=z),T.ending?function(L,E){var J=new X;S(L,J),e.nextTick(E,J)}(this,D):(P||function(L,E,J,k){var j;return J===null?j=new R:typeof J=="string"||E.objectMode||(j=new u("chunk",["string","Buffer"],J)),!j||(S(L,j),e.nextTick(k,j),!1)}(this,T,y,D))&&(T.pendingcb++,Q=function(L,E,J,k,j,q){if(!J){var tg=function(Ag,O,_){return Ag.objectMode||Ag.decodeStrings===!1||typeof O!="string"||(O=d.from(O,_)),O}(E,k,j);k!==tg&&(J=!0,j="buffer",k=tg)}var Cg=E.objectMode?1:k.length;E.length+=Cg;var x=E.length<E.highWaterMark;if(x||(E.needDrain=!0),E.writing||E.corked){var sg=E.lastBufferedRequest;E.lastBufferedRequest={chunk:k,encoding:j,isBuf:J,callback:q,next:null},sg?sg.next=E.lastBufferedRequest:E.bufferedRequest=E.lastBufferedRequest,E.bufferedRequestCount+=1}else V(L,E,!1,Cg,k,j,q);return x}(this,T,P,y,f,D)),Q},K.prototype.cork=function(){this._writableState.corked++},K.prototype.uncork=function(){var y=this._writableState;y.corked&&(y.corked--,y.writing||y.corked||y.bufferProcessing||!y.bufferedRequest||B(this,y))},K.prototype.setDefaultEncoding=function(y){if(typeof y=="string"&&(y=y.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((y+"").toLowerCase())>-1))throw new H(y);return this._writableState.defaultEncoding=y,this},Object.defineProperty(K.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(K.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),K.prototype._write=function(y,f,D){D(new m("_write()"))},K.prototype._writev=null,K.prototype.end=function(y,f,D){var F=this._writableState;return typeof y=="function"?(D=y,y=null,f=null):typeof f=="function"&&(D=f,f=null),y!=null&&this.write(y,f),F.corked&&(F.corked=1,this.uncork()),F.ending||function(T,Q,P){Q.ending=!0,W(T,Q),P&&(Q.finished?e.nextTick(P):T.once("finish",P)),Q.ended=!0,T.writable=!1}(this,F,D),this},Object.defineProperty(K.prototype,"writableLength",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(K.prototype,"destroyed",{enumerable:!1,get:function(){return this._writableState!==void 0&&this._writableState.destroyed},set:function(y){this._writableState&&(this._writableState.destroyed=y)}}),K.prototype.destroy=r.destroy,K.prototype._undestroy=r.undestroy,K.prototype._destroy=function(y,f){f(y)}}).call(this)}).call(this,g("_process"),typeof FI<"u"?FI:typeof self<"u"?self:typeof window<"u"?window:{})},{"../errors":477,"./_stream_duplex":478,"./internal/streams/destroy":485,"./internal/streams/state":489,"./internal/streams/stream":490,_process:467,buffer:220,inherits:440,"util-deprecate":524}],483:[function(g,C,i){(function(e){(function(){var A;function s(Y,R,X){return(R=function(H){var S=function(z,v){if(typeof z!="object"||z===null)return z;var K=z[Symbol.toPrimitive];if(K!==void 0){var V=K.call(z,v);if(typeof V!="object")return V;throw new TypeError("@@toPrimitive must return a primitive value.")}return(v==="string"?String:Number)(z)}(H,"string");return typeof S=="symbol"?S:String(S)}(R))in Y?Object.defineProperty(Y,R,{value:X,enumerable:!0,configurable:!0,writable:!0}):Y[R]=X,Y}var l=g("./end-of-stream"),n=Symbol("lastResolve"),a=Symbol("lastReject"),d=Symbol("error"),o=Symbol("ended"),c=Symbol("lastPromise"),r=Symbol("handlePromise"),h=Symbol("stream");function b(Y,R){return{value:Y,done:R}}function u(Y){var R=Y[n];if(R!==null){var X=Y[h].read();X!==null&&(Y[c]=null,Y[n]=null,Y[a]=null,R(b(X,!1)))}}function m(Y){e.nextTick(u,Y)}var Z=Object.getPrototypeOf(function(){}),p=Object.setPrototypeOf((s(A={get stream(){return this[h]},next:function(){var Y=this,R=this[d];if(R!==null)return Promise.reject(R);if(this[o])return Promise.resolve(b(void 0,!0));if(this[h].destroyed)return new Promise(function(z,v){e.nextTick(function(){Y[d]?v(Y[d]):z(b(void 0,!0))})});var X,H=this[c];if(H)X=new Promise(function(z,v){return function(K,V){z.then(function(){v[o]?K(b(void 0,!0)):v[r](K,V)},V)}}(H,this));else{var S=this[h].read();if(S!==null)return Promise.resolve(b(S,!1));X=new Promise(this[r])}return this[c]=X,X}},Symbol.asyncIterator,function(){return this}),s(A,"return",function(){var Y=this;return new Promise(function(R,X){Y[h].destroy(null,function(H){H?X(H):R(b(void 0,!0))})})}),A),Z);C.exports=function(Y){var R,X=Object.create(p,(s(R={},h,{value:Y,writable:!0}),s(R,n,{value:null,writable:!0}),s(R,a,{value:null,writable:!0}),s(R,d,{value:null,writable:!0}),s(R,o,{value:Y._readableState.endEmitted,writable:!0}),s(R,r,{value:function(H,S){var z=X[h].read();z?(X[c]=null,X[n]=null,X[a]=null,H(b(z,!1))):(X[n]=H,X[a]=S)},writable:!0}),R));return X[c]=null,l(Y,function(H){if(H&&H.code!=="ERR_STREAM_PREMATURE_CLOSE"){var S=X[a];return S!==null&&(X[c]=null,X[n]=null,X[a]=null,S(H)),void(X[d]=H)}var z=X[n];z!==null&&(X[c]=null,X[n]=null,X[a]=null,z(b(void 0,!0))),X[o]=!0}),Y.on("readable",m.bind(null,X)),X}}).call(this)}).call(this,g("_process"))},{"./end-of-stream":486,_process:467}],484:[function(g,C,i){function e(c,r){var h=Object.keys(c);if(Object.getOwnPropertySymbols){var b=Object.getOwnPropertySymbols(c);r&&(b=b.filter(function(u){return Object.getOwnPropertyDescriptor(c,u).enumerable})),h.push.apply(h,b)}return h}function A(c){for(var r=1;r<arguments.length;r++){var h=arguments[r]!=null?arguments[r]:{};r%2?e(Object(h),!0).forEach(function(b){s(c,b,h[b])}):Object.getOwnPropertyDescriptors?Object.defineProperties(c,Object.getOwnPropertyDescriptors(h)):e(Object(h)).forEach(function(b){Object.defineProperty(c,b,Object.getOwnPropertyDescriptor(h,b))})}return c}function s(c,r,h){return(r=n(r))in c?Object.defineProperty(c,r,{value:h,enumerable:!0,configurable:!0,writable:!0}):c[r]=h,c}function l(c,r){for(var h=0;h<r.length;h++){var b=r[h];b.enumerable=b.enumerable||!1,b.configurable=!0,"value"in b&&(b.writable=!0),Object.defineProperty(c,n(b.key),b)}}function n(c){var r=function(h,b){if(typeof h!="object"||h===null)return h;var u=h[Symbol.toPrimitive];if(u!==void 0){var m=u.call(h,b);if(typeof m!="object")return m;throw new TypeError("@@toPrimitive must return a primitive value.")}return(b==="string"?String:Number)(h)}(c,"string");return typeof r=="symbol"?r:String(r)}var a=g("buffer").Buffer,d=g("util").inspect,o=d&&d.custom||"inspect";C.exports=function(){function c(){(function(b,u){if(!(b instanceof u))throw new TypeError("Cannot call a class as a function")})(this,c),this.head=null,this.tail=null,this.length=0}var r,h;return r=c,(h=[{key:"push",value:function(b){var u={data:b,next:null};this.length>0?this.tail.next=u:this.head=u,this.tail=u,++this.length}},{key:"unshift",value:function(b){var u={data:b,next:this.head};this.length===0&&(this.tail=u),this.head=u,++this.length}},{key:"shift",value:function(){if(this.length!==0){var b=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,b}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(b){if(this.length===0)return"";for(var u=this.head,m=""+u.data;u=u.next;)m+=b+u.data;return m}},{key:"concat",value:function(b){if(this.length===0)return a.alloc(0);for(var u,m,Z,p=a.allocUnsafe(b>>>0),Y=this.head,R=0;Y;)u=Y.data,m=p,Z=R,a.prototype.copy.call(u,m,Z),R+=Y.data.length,Y=Y.next;return p}},{key:"consume",value:function(b,u){var m;return b<this.head.data.length?(m=this.head.data.slice(0,b),this.head.data=this.head.data.slice(b)):m=b===this.head.data.length?this.shift():u?this._getString(b):this._getBuffer(b),m}},{key:"first",value:function(){return this.head.data}},{key:"_getString",value:function(b){var u=this.head,m=1,Z=u.data;for(b-=Z.length;u=u.next;){var p=u.data,Y=b>p.length?p.length:b;if(Y===p.length?Z+=p:Z+=p.slice(0,b),(b-=Y)==0){Y===p.length?(++m,u.next?this.head=u.next:this.head=this.tail=null):(this.head=u,u.data=p.slice(Y));break}++m}return this.length-=m,Z}},{key:"_getBuffer",value:function(b){var u=a.allocUnsafe(b),m=this.head,Z=1;for(m.data.copy(u),b-=m.data.length;m=m.next;){var p=m.data,Y=b>p.length?p.length:b;if(p.copy(u,u.length-b,0,Y),(b-=Y)==0){Y===p.length?(++Z,m.next?this.head=m.next:this.head=this.tail=null):(this.head=m,m.data=p.slice(Y));break}++Z}return this.length-=Z,u}},{key:o,value:function(b,u){return d(this,A(A({},u),{},{depth:0,customInspect:!1}))}}])&&l(r.prototype,h),Object.defineProperty(r,"prototype",{writable:!1}),c}()},{buffer:220,util:188}],485:[function(g,C,i){(function(e){(function(){function A(n,a){l(n,a),s(n)}function s(n){n._writableState&&!n._writableState.emitClose||n._readableState&&!n._readableState.emitClose||n.emit("close")}function l(n,a){n.emit("error",a)}C.exports={destroy:function(n,a){var d=this,o=this._readableState&&this._readableState.destroyed,c=this._writableState&&this._writableState.destroyed;return o||c?(a?a(n):n&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,e.nextTick(l,this,n)):e.nextTick(l,this,n)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(n||null,function(r){!a&&r?d._writableState?d._writableState.errorEmitted?e.nextTick(s,d):(d._writableState.errorEmitted=!0,e.nextTick(A,d,r)):e.nextTick(A,d,r):a?(e.nextTick(s,d),a(r)):e.nextTick(s,d)}),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)},errorOrDestroy:function(n,a){var d=n._readableState,o=n._writableState;d&&d.autoDestroy||o&&o.autoDestroy?n.destroy(a):n.emit("error",a)}}}).call(this)}).call(this,g("_process"))},{_process:467}],486:[function(g,C,i){var e=g("../../../errors").codes.ERR_STREAM_PREMATURE_CLOSE;function A(){}C.exports=function s(l,n,a){if(typeof n=="function")return s(l,null,n);n||(n={}),a=function(Y){var R=!1;return function(){if(!R){R=!0;for(var X=arguments.length,H=new Array(X),S=0;S<X;S++)H[S]=arguments[S];Y.apply(this,H)}}}(a||A);var d=n.readable||n.readable!==!1&&l.readable,o=n.writable||n.writable!==!1&&l.writable,c=function(){l.writable||h()},r=l._writableState&&l._writableState.finished,h=function(){o=!1,r=!0,d||a.call(l)},b=l._readableState&&l._readableState.endEmitted,u=function(){d=!1,b=!0,o||a.call(l)},m=function(Y){a.call(l,Y)},Z=function(){var Y;return d&&!b?(l._readableState&&l._readableState.ended||(Y=new e),a.call(l,Y)):o&&!r?(l._writableState&&l._writableState.ended||(Y=new e),a.call(l,Y)):void 0},p=function(){l.req.on("finish",h)};return function(Y){return Y.setHeader&&typeof Y.abort=="function"}(l)?(l.on("complete",h),l.on("abort",Z),l.req?p():l.on("request",p)):o&&!l._writableState&&(l.on("end",c),l.on("close",c)),l.on("end",u),l.on("finish",h),n.error!==!1&&l.on("error",m),l.on("close",Z),function(){l.removeListener("complete",h),l.removeListener("abort",Z),l.removeListener("request",p),l.req&&l.req.removeListener("finish",h),l.removeListener("end",c),l.removeListener("close",c),l.removeListener("finish",h),l.removeListener("end",u),l.removeListener("error",m),l.removeListener("close",Z)}}},{"../../../errors":477}],487:[function(g,C,i){C.exports=function(){throw new Error("Readable.from is not available in the browser")}},{}],488:[function(g,C,i){var e,A=g("../../../errors").codes,s=A.ERR_MISSING_ARGS,l=A.ERR_STREAM_DESTROYED;function n(r){if(r)throw r}function a(r,h,b,u){u=function(p){var Y=!1;return function(){Y||(Y=!0,p.apply(void 0,arguments))}}(u);var m=!1;r.on("close",function(){m=!0}),e===void 0&&(e=g("./end-of-stream")),e(r,{readable:h,writable:b},function(p){if(p)return u(p);m=!0,u()});var Z=!1;return function(p){if(!m&&!Z)return Z=!0,function(Y){return Y.setHeader&&typeof Y.abort=="function"}(r)?r.abort():typeof r.destroy=="function"?r.destroy():void u(p||new l("pipe"))}}function d(r){r()}function o(r,h){return r.pipe(h)}function c(r){return r.length?typeof r[r.length-1]!="function"?n:r.pop():n}C.exports=function(){for(var r=arguments.length,h=new Array(r),b=0;b<r;b++)h[b]=arguments[b];var u,m=c(h);if(Array.isArray(h[0])&&(h=h[0]),h.length<2)throw new s("streams");var Z=h.map(function(p,Y){var R=Y<h.length-1;return a(p,R,Y>0,function(X){u||(u=X),X&&Z.forEach(d),R||(Z.forEach(d),m(u))})});return h.reduce(o)}},{"../../../errors":477,"./end-of-stream":486}],489:[function(g,C,i){var e=g("../../../errors").codes.ERR_INVALID_OPT_VALUE;C.exports={getHighWaterMark:function(A,s,l,n){var a=function(d,o,c){return d.highWaterMark!=null?d.highWaterMark:o?d[c]:null}(s,n,l);if(a!=null){if(!isFinite(a)||Math.floor(a)!==a||a<0)throw new e(n?l:"highWaterMark",a);return Math.floor(a)}return A.objectMode?16:16384}}},{"../../../errors":477}],490:[function(g,C,i){C.exports=g("events").EventEmitter},{events:422}],491:[function(g,C,i){(i=C.exports=g("./lib/_stream_readable.js")).Stream=i,i.Readable=i,i.Writable=g("./lib/_stream_writable.js"),i.Duplex=g("./lib/_stream_duplex.js"),i.Transform=g("./lib/_stream_transform.js"),i.PassThrough=g("./lib/_stream_passthrough.js"),i.finished=g("./lib/internal/streams/end-of-stream.js"),i.pipeline=g("./lib/internal/streams/pipeline.js")},{"./lib/_stream_duplex.js":478,"./lib/_stream_passthrough.js":479,"./lib/_stream_readable.js":480,"./lib/_stream_transform.js":481,"./lib/_stream_writable.js":482,"./lib/internal/streams/end-of-stream.js":486,"./lib/internal/streams/pipeline.js":488}],492:[function(g,C,i){var e=function(A){var s=Object.prototype,l=s.hasOwnProperty,n=Object.defineProperty||function(W,y,f){W[y]=f.value},a=typeof Symbol=="function"?Symbol:{},d=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",c=a.toStringTag||"@@toStringTag";function r(W,y,f){return Object.defineProperty(W,y,{value:f,enumerable:!0,configurable:!0,writable:!0}),W[y]}try{r({},"")}catch{r=function(y,f,D){return y[f]=D}}function h(W,y,f,D){var F=y&&y.prototype instanceof m?y:m,T=Object.create(F.prototype),Q=new B(D||[]);return n(T,"_invoke",{value:v(W,f,Q)}),T}function b(W,y,f){try{return{type:"normal",arg:W.call(y,f)}}catch(D){return{type:"throw",arg:D}}}A.wrap=h;var u={};function m(){}function Z(){}function p(){}var Y={};r(Y,d,function(){return this});var R=Object.getPrototypeOf,X=R&&R(R(G([])));X&&X!==s&&l.call(X,d)&&(Y=X);var H=p.prototype=m.prototype=Object.create(Y);function S(W){["next","throw","return"].forEach(function(y){r(W,y,function(f){return this._invoke(y,f)})})}function z(W,y){var f;n(this,"_invoke",{value:function(D,F){function T(){return new y(function(Q,P){(function L(E,J,k,j){var q=b(W[E],W,J);if(q.type!=="throw"){var tg=q.arg,Cg=tg.value;return Cg&&typeof Cg=="object"&&l.call(Cg,"__await")?y.resolve(Cg.__await).then(function(x){L("next",x,k,j)},function(x){L("throw",x,k,j)}):y.resolve(Cg).then(function(x){tg.value=x,k(tg)},function(x){return L("throw",x,k,j)})}j(q.arg)})(D,F,Q,P)})}return f=f?f.then(T,T):T()}})}function v(W,y,f){var D="suspendedStart";return function(F,T){if(D==="executing")throw new Error("Generator is already running");if(D==="completed"){if(F==="throw")throw T;return w()}for(f.method=F,f.arg=T;;){var Q=f.delegate;if(Q){var P=K(Q,f);if(P){if(P===u)continue;return P}}if(f.method==="next")f.sent=f._sent=f.arg;else if(f.method==="throw"){if(D==="suspendedStart")throw D="completed",f.arg;f.dispatchException(f.arg)}else f.method==="return"&&f.abrupt("return",f.arg);D="executing";var L=b(W,y,f);if(L.type==="normal"){if(D=f.done?"completed":"suspendedYield",L.arg===u)continue;return{value:L.arg,done:f.done}}L.type==="throw"&&(D="completed",f.method="throw",f.arg=L.arg)}}}function K(W,y){var f=y.method,D=W.iterator[f];if(D===void 0)return y.delegate=null,f==="throw"&&W.iterator.return&&(y.method="return",y.arg=void 0,K(W,y),y.method==="throw")||f!=="return"&&(y.method="throw",y.arg=new TypeError("The iterator does not provide a '"+f+"' method")),u;var F=b(D,W.iterator,y.arg);if(F.type==="throw")return y.method="throw",y.arg=F.arg,y.delegate=null,u;var T=F.arg;return T?T.done?(y[W.resultName]=T.value,y.next=W.nextLoc,y.method!=="return"&&(y.method="next",y.arg=void 0),y.delegate=null,u):T:(y.method="throw",y.arg=new TypeError("iterator result is not an object"),y.delegate=null,u)}function V(W){var y={tryLoc:W[0]};1 in W&&(y.catchLoc=W[1]),2 in W&&(y.finallyLoc=W[2],y.afterLoc=W[3]),this.tryEntries.push(y)}function N(W){var y=W.completion||{};y.type="normal",delete y.arg,W.completion=y}function B(W){this.tryEntries=[{tryLoc:"root"}],W.forEach(V,this),this.reset(!0)}function G(W){if(W){var y=W[d];if(y)return y.call(W);if(typeof W.next=="function")return W;if(!isNaN(W.length)){var f=-1,D=function F(){for(;++f<W.length;)if(l.call(W,f))return F.value=W[f],F.done=!1,F;return F.value=void 0,F.done=!0,F};return D.next=D}}return{next:w}}function w(){return{value:void 0,done:!0}}return Z.prototype=p,n(H,"constructor",{value:p,configurable:!0}),n(p,"constructor",{value:Z,configurable:!0}),Z.displayName=r(p,c,"GeneratorFunction"),A.isGeneratorFunction=function(W){var y=typeof W=="function"&&W.constructor;return!!y&&(y===Z||(y.displayName||y.name)==="GeneratorFunction")},A.mark=function(W){return Object.setPrototypeOf?Object.setPrototypeOf(W,p):(W.__proto__=p,r(W,c,"GeneratorFunction")),W.prototype=Object.create(H),W},A.awrap=function(W){return{__await:W}},S(z.prototype),r(z.prototype,o,function(){return this}),A.AsyncIterator=z,A.async=function(W,y,f,D,F){F===void 0&&(F=Promise);var T=new z(h(W,y,f,D),F);return A.isGeneratorFunction(y)?T:T.next().then(function(Q){return Q.done?Q.value:T.next()})},S(H),r(H,c,"Generator"),r(H,d,function(){return this}),r(H,"toString",function(){return"[object Generator]"}),A.keys=function(W){var y=Object(W),f=[];for(var D in y)f.push(D);return f.reverse(),function F(){for(;f.length;){var T=f.pop();if(T in y)return F.value=T,F.done=!1,F}return F.done=!0,F}},A.values=G,B.prototype={constructor:B,reset:function(W){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(N),!W)for(var y in this)y.charAt(0)==="t"&&l.call(this,y)&&!isNaN(+y.slice(1))&&(this[y]=void 0)},stop:function(){this.done=!0;var W=this.tryEntries[0].completion;if(W.type==="throw")throw W.arg;return this.rval},dispatchException:function(W){if(this.done)throw W;var y=this;function f(L,E){return T.type="throw",T.arg=W,y.next=L,E&&(y.method="next",y.arg=void 0),!!E}for(var D=this.tryEntries.length-1;D>=0;--D){var F=this.tryEntries[D],T=F.completion;if(F.tryLoc==="root")return f("end");if(F.tryLoc<=this.prev){var Q=l.call(F,"catchLoc"),P=l.call(F,"finallyLoc");if(Q&&P){if(this.prev<F.catchLoc)return f(F.catchLoc,!0);if(this.prev<F.finallyLoc)return f(F.finallyLoc)}else if(Q){if(this.prev<F.catchLoc)return f(F.catchLoc,!0)}else{if(!P)throw new Error("try statement without catch or finally");if(this.prev<F.finallyLoc)return f(F.finallyLoc)}}}},abrupt:function(W,y){for(var f=this.tryEntries.length-1;f>=0;--f){var D=this.tryEntries[f];if(D.tryLoc<=this.prev&&l.call(D,"finallyLoc")&&this.prev<D.finallyLoc){var F=D;break}}F&&(W==="break"||W==="continue")&&F.tryLoc<=y&&y<=F.finallyLoc&&(F=null);var T=F?F.completion:{};return T.type=W,T.arg=y,F?(this.method="next",this.next=F.finallyLoc,u):this.complete(T)},complete:function(W,y){if(W.type==="throw")throw W.arg;return W.type==="break"||W.type==="continue"?this.next=W.arg:W.type==="return"?(this.rval=this.arg=W.arg,this.method="return",this.next="end"):W.type==="normal"&&y&&(this.next=y),u},finish:function(W){for(var y=this.tryEntries.length-1;y>=0;--y){var f=this.tryEntries[y];if(f.finallyLoc===W)return this.complete(f.completion,f.afterLoc),N(f),u}},catch:function(W){for(var y=this.tryEntries.length-1;y>=0;--y){var f=this.tryEntries[y];if(f.tryLoc===W){var D=f.completion;if(D.type==="throw"){var F=D.arg;N(f)}return F}}throw new Error("illegal catch attempt")},delegateYield:function(W,y,f){return this.delegate={iterator:G(W),resultName:y,nextLoc:f},this.method==="next"&&(this.arg=void 0),u}},A}(typeof C=="object"?C.exports:{});try{regeneratorRuntime=e}catch{typeof globalThis=="object"?globalThis.regeneratorRuntime=e:Function("r","regeneratorRuntime = r")(e)}},{}],493:[function(g,C,i){var e=g("buffer").Buffer,A=g("inherits"),s=g("hash-base"),l=new Array(16),n=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],a=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],d=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],o=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],c=[0,1518500249,1859775393,2400959708,2840853838],r=[1352829926,1548603684,1836072691,2053994217,0];function h(){s.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520}function b(R,X){return R<<X|R>>>32-X}function u(R,X,H,S,z,v,K,V){return b(R+(X^H^S)+v+K|0,V)+z|0}function m(R,X,H,S,z,v,K,V){return b(R+(X&H|~X&S)+v+K|0,V)+z|0}function Z(R,X,H,S,z,v,K,V){return b(R+((X|~H)^S)+v+K|0,V)+z|0}function p(R,X,H,S,z,v,K,V){return b(R+(X&S|H&~S)+v+K|0,V)+z|0}function Y(R,X,H,S,z,v,K,V){return b(R+(X^(H|~S))+v+K|0,V)+z|0}A(h,s),h.prototype._update=function(){for(var R=l,X=0;X<16;++X)R[X]=this._block.readInt32LE(4*X);for(var H=0|this._a,S=0|this._b,z=0|this._c,v=0|this._d,K=0|this._e,V=0|this._a,N=0|this._b,B=0|this._c,G=0|this._d,w=0|this._e,W=0;W<80;W+=1){var y,f;W<16?(y=u(H,S,z,v,K,R[n[W]],c[0],d[W]),f=Y(V,N,B,G,w,R[a[W]],r[0],o[W])):W<32?(y=m(H,S,z,v,K,R[n[W]],c[1],d[W]),f=p(V,N,B,G,w,R[a[W]],r[1],o[W])):W<48?(y=Z(H,S,z,v,K,R[n[W]],c[2],d[W]),f=Z(V,N,B,G,w,R[a[W]],r[2],o[W])):W<64?(y=p(H,S,z,v,K,R[n[W]],c[3],d[W]),f=m(V,N,B,G,w,R[a[W]],r[3],o[W])):(y=Y(H,S,z,v,K,R[n[W]],c[4],d[W]),f=u(V,N,B,G,w,R[a[W]],r[4],o[W])),H=K,K=v,v=b(z,10),z=S,S=y,V=w,w=G,G=b(B,10),B=N,N=f}var D=this._b+z+G|0;this._b=this._c+v+w|0,this._c=this._d+K+V|0,this._d=this._e+H+N|0,this._e=this._a+S+B|0,this._a=D},h.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var R=e.alloc?e.alloc(20):new e(20);return R.writeInt32LE(this._a,0),R.writeInt32LE(this._b,4),R.writeInt32LE(this._c,8),R.writeInt32LE(this._d,12),R.writeInt32LE(this._e,16),R},C.exports=h},{buffer:220,"hash-base":425,inherits:440}],494:[function(g,C,i){/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */var e=g("buffer"),A=e.Buffer;function s(n,a){for(var d in n)a[d]=n[d]}function l(n,a,d){return A(n,a,d)}A.from&&A.alloc&&A.allocUnsafe&&A.allocUnsafeSlow?C.exports=e:(s(e,i),i.Buffer=l),l.prototype=Object.create(A.prototype),s(A,l),l.from=function(n,a,d){if(typeof n=="number")throw new TypeError("Argument must not be a number");return A(n,a,d)},l.alloc=function(n,a,d){if(typeof n!="number")throw new TypeError("Argument must be a number");var o=A(n);return a!==void 0?typeof d=="string"?o.fill(a,d):o.fill(a):o.fill(0),o},l.allocUnsafe=function(n){if(typeof n!="number")throw new TypeError("Argument must be a number");return A(n)},l.allocUnsafeSlow=function(n){if(typeof n!="number")throw new TypeError("Argument must be a number");return e.SlowBuffer(n)}},{buffer:220}],495:[function(g,C,i){(function(e){(function(){var A,s=g("buffer"),l=s.Buffer,n={};for(A in s)s.hasOwnProperty(A)&&A!=="SlowBuffer"&&A!=="Buffer"&&(n[A]=s[A]);var a=n.Buffer={};for(A in l)l.hasOwnProperty(A)&&A!=="allocUnsafe"&&A!=="allocUnsafeSlow"&&(a[A]=l[A]);if(n.Buffer.prototype=l.prototype,a.from&&a.from!==Uint8Array.from||(a.from=function(d,o,c){if(typeof d=="number")throw new TypeError('The "value" argument must not be of type number. Received type '+typeof d);if(d&&d.length===void 0)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof d);return l(d,o,c)}),a.alloc||(a.alloc=function(d,o,c){if(typeof d!="number")throw new TypeError('The "size" argument must be of type number. Received type '+typeof d);if(d<0||d>=2*(1<<30))throw new RangeError('The value "'+d+'" is invalid for option "size"');var r=l(d);return o&&o.length!==0?typeof c=="string"?r.fill(o,c):r.fill(o):r.fill(0),r}),!n.kStringMaxLength)try{n.kStringMaxLength=e.binding("buffer").kStringMaxLength}catch{}n.constants||(n.constants={MAX_LENGTH:n.kMaxLength},n.kStringMaxLength&&(n.constants.MAX_STRING_LENGTH=n.kStringMaxLength)),C.exports=n}).call(this)}).call(this,g("_process"))},{_process:467,buffer:220}],496:[function(g,C,i){Object.defineProperty(i,"__esModule",{value:!0});const e=g("xmlchars/xml/1.0/ed5"),A=g("xmlchars/xml/1.1/ed2"),s=g("xmlchars/xmlns/1.0/ed3");var l=e.isS,n=e.isChar,a=e.isNameStartChar,d=e.isNameChar,o=e.S_LIST,c=e.NAME_RE,r=A.isChar,h=s.isNCNameStartChar,b=s.isNCNameChar,u=s.NC_NAME_RE;const m="http://www.w3.org/XML/1998/namespace",Z="http://www.w3.org/2000/xmlns/",p={__proto__:null,xml:m,xmlns:Z},Y={__proto__:null,amp:"&",gt:">",lt:"<",quot:'"',apos:"'"},R=G=>G===34||G===39,X=[34,39],H=[...X,91,62],S=[...X,60,93],z=[61,63,...o],v=[...o,62,38,60];function K(G,w,W){switch(w){case"xml":W!==m&&G.fail(`xml prefix must be bound to ${m}.`);break;case"xmlns":W!==Z&&G.fail(`xmlns prefix must be bound to ${Z}.`)}switch(W){case Z:G.fail(w===""?`the default namespace may not be set to ${W}.`:`may not assign a prefix (even "xmlns") to the URI ${Z}.`);break;case m:switch(w){case"xml":break;case"":G.fail(`the default namespace may not be set to ${W}.`);break;default:G.fail("may not assign the xml namespace to another prefix.")}}}const V=G=>u.test(G),N=G=>c.test(G);i.EVENTS=["xmldecl","text","processinginstruction","doctype","comment","opentagstart","attribute","opentag","closetag","cdata","error","end","ready"];const B={xmldecl:"xmldeclHandler",text:"textHandler",processinginstruction:"piHandler",doctype:"doctypeHandler",comment:"commentHandler",opentagstart:"openTagStartHandler",attribute:"attributeHandler",opentag:"openTagHandler",closetag:"closeTagHandler",cdata:"cdataHandler",error:"errorHandler",end:"endHandler",ready:"readyHandler"};i.SaxesParser=class{constructor(G){this.opt=G??{},this.fragmentOpt=!!this.opt.fragment;const w=this.xmlnsOpt=!!this.opt.xmlns;if(this.trackPosition=this.opt.position!==!1,this.fileName=this.opt.fileName,w){this.nameStartCheck=h,this.nameCheck=b,this.isName=V,this.processAttribs=this.processAttribsNS,this.pushAttrib=this.pushAttribNS,this.ns=Object.assign({__proto__:null},p);const W=this.opt.additionalNamespaces;W!=null&&(function(y,f){for(const D of Object.keys(f))K(y,D,f[D])}(this,W),Object.assign(this.ns,W))}else this.nameStartCheck=a,this.nameCheck=d,this.isName=N,this.processAttribs=this.processAttribsPlain,this.pushAttrib=this.pushAttribPlain;this.stateTable=[this.sBegin,this.sBeginWhitespace,this.sDoctype,this.sDoctypeQuote,this.sDTD,this.sDTDQuoted,this.sDTDOpenWaka,this.sDTDOpenWakaBang,this.sDTDComment,this.sDTDCommentEnding,this.sDTDCommentEnded,this.sDTDPI,this.sDTDPIEnding,this.sText,this.sEntity,this.sOpenWaka,this.sOpenWakaBang,this.sComment,this.sCommentEnding,this.sCommentEnded,this.sCData,this.sCDataEnding,this.sCDataEnding2,this.sPIFirstChar,this.sPIRest,this.sPIBody,this.sPIEnding,this.sXMLDeclNameStart,this.sXMLDeclName,this.sXMLDeclEq,this.sXMLDeclValueStart,this.sXMLDeclValue,this.sXMLDeclSeparator,this.sXMLDeclEnding,this.sOpenTag,this.sOpenTagSlash,this.sAttrib,this.sAttribName,this.sAttribNameSawWhite,this.sAttribValue,this.sAttribValueQuoted,this.sAttribValueClosed,this.sAttribValueUnquoted,this.sCloseTag,this.sCloseTagSawWhite],this._init()}get closed(){return this._closed}_init(){var G;this.openWakaBang="",this.text="",this.name="",this.piTarget="",this.entity="",this.q=null,this.tags=[],this.tag=null,this.topNS=null,this.chunk="",this.chunkPosition=0,this.i=0,this.prevI=0,this.carriedFromPrevious=void 0,this.forbiddenState=0,this.attribList=[];const{fragmentOpt:w}=this;this.state=w?13:0,this.reportedTextBeforeRoot=this.reportedTextAfterRoot=this.closedRoot=this.sawRoot=w,this.xmlDeclPossible=!w,this.xmlDeclExpects=["version"],this.entityReturnState=void 0;let{defaultXMLVersion:W}=this.opt;if(W===void 0){if(this.opt.forceXMLVersion===!0)throw new Error("forceXMLVersion set but defaultXMLVersion is not set");W="1.0"}this.setXMLVersion(W),this.positionAtNewLine=0,this.doctype=!1,this._closed=!1,this.xmlDecl={version:void 0,encoding:void 0,standalone:void 0},this.line=1,this.column=0,this.ENTITIES=Object.create(Y),(G=this.readyHandler)===null||G===void 0||G.call(this)}get position(){return this.chunkPosition+this.i}get columnIndex(){return this.position-this.positionAtNewLine}on(G,w){this[B[G]]=w}off(G){this[B[G]]=void 0}makeError(G){var w;let W=(w=this.fileName)!==null&&w!==void 0?w:"";return this.trackPosition&&(W.length>0&&(W+=":"),W+=`${this.line}:${this.column}`),W.length>0&&(W+=": "),new Error(W+G)}fail(G){const w=this.makeError(G),W=this.errorHandler;if(W===void 0)throw w;return W(w),this}write(G){if(this.closed)return this.fail("cannot write after close; assign an onready handler.");let w=!1;G===null?(w=!0,G=""):typeof G=="object"&&(G=G.toString()),this.carriedFromPrevious!==void 0&&(G=`${this.carriedFromPrevious}${G}`,this.carriedFromPrevious=void 0);let W=G.length;const y=G.charCodeAt(W-1);!w&&(y===13||y>=55296&&y<=56319)&&(this.carriedFromPrevious=G[W-1],W--,G=G.slice(0,W));const{stateTable:f}=this;for(this.chunk=G,this.i=0;this.i<W;)f[this.state].call(this);return this.chunkPosition+=W,w?this.end():this}close(){return this.write(null)}getCode10(){const{chunk:G,i:w}=this;if(this.prevI=w,this.i=w+1,w>=G.length)return-1;const W=G.charCodeAt(w);if(this.column++,W<55296){if(W>=32||W===9)return W;switch(W){case 10:return this.line++,this.column=0,this.positionAtNewLine=this.position,10;case 13:return G.charCodeAt(w+1)===10&&(this.i=w+2),this.line++,this.column=0,this.positionAtNewLine=this.position,-2;default:return this.fail("disallowed character."),W}}if(W>56319)return W>=57344&&W<=65533||this.fail("disallowed character."),W;const y=65536+1024*(W-55296)+(G.charCodeAt(w+1)-56320);return this.i=w+2,y>1114111&&this.fail("disallowed character."),y}getCode11(){const{chunk:G,i:w}=this;if(this.prevI=w,this.i=w+1,w>=G.length)return-1;const W=G.charCodeAt(w);if(this.column++,W<55296){if(W>31&&W<127||W>159&&W!==8232||W===9)return W;switch(W){case 10:return this.line++,this.column=0,this.positionAtNewLine=this.position,10;case 13:{const f=G.charCodeAt(w+1);f!==10&&f!==133||(this.i=w+2)}case 133:case 8232:return this.line++,this.column=0,this.positionAtNewLine=this.position,-2;default:return this.fail("disallowed character."),W}}if(W>56319)return W>=57344&&W<=65533||this.fail("disallowed character."),W;const y=65536+1024*(W-55296)+(G.charCodeAt(w+1)-56320);return this.i=w+2,y>1114111&&this.fail("disallowed character."),y}getCodeNorm(){const G=this.getCode();return G===-2?10:G}unget(){this.i=this.prevI,this.column--}captureTo(G){let{i:w}=this;const{chunk:W}=this;for(;;){const y=this.getCode(),f=y===-2,D=f?10:y;if(D===-1||G.includes(D))return this.text+=W.slice(w,this.prevI),D;f&&(this.text+=W.slice(w,this.prevI)+`
- `,w=this.i)}}captureToChar(G){let{i:w}=this;const{chunk:W}=this;for(;;){let y=this.getCode();switch(y){case-2:this.text+=W.slice(w,this.prevI)+`
- `,w=this.i,y=10;break;case-1:return this.text+=W.slice(w),!1}if(y===G)return this.text+=W.slice(w,this.prevI),!0}}captureNameChars(){const{chunk:G,i:w}=this;for(;;){const W=this.getCode();if(W===-1)return this.name+=G.slice(w),-1;if(!d(W))return this.name+=G.slice(w,this.prevI),W===-2?10:W}}skipSpaces(){for(;;){const G=this.getCodeNorm();if(G===-1||!l(G))return G}}setXMLVersion(G){this.currentXMLVersion=G,G==="1.0"?(this.isChar=n,this.getCode=this.getCode10):(this.isChar=r,this.getCode=this.getCode11)}sBegin(){this.chunk.charCodeAt(0)===65279&&(this.i++,this.column++),this.state=1}sBeginWhitespace(){const G=this.i,w=this.skipSpaces();switch(this.prevI!==G&&(this.xmlDeclPossible=!1),w){case 60:if(this.state=15,this.text.length!==0)throw new Error("no-empty text at start");break;case-1:break;default:this.unget(),this.state=13,this.xmlDeclPossible=!1}}sDoctype(){var G;const w=this.captureTo(H);switch(w){case 62:(G=this.doctypeHandler)===null||G===void 0||G.call(this,this.text),this.text="",this.state=13,this.doctype=!0;break;case-1:break;default:this.text+=String.fromCodePoint(w),w===91?this.state=4:R(w)&&(this.state=3,this.q=w)}}sDoctypeQuote(){const G=this.q;this.captureToChar(G)&&(this.text+=String.fromCodePoint(G),this.q=null,this.state=2)}sDTD(){const G=this.captureTo(S);G!==-1&&(this.text+=String.fromCodePoint(G),G===93?this.state=2:G===60?this.state=6:R(G)&&(this.state=5,this.q=G))}sDTDQuoted(){const G=this.q;this.captureToChar(G)&&(this.text+=String.fromCodePoint(G),this.state=4,this.q=null)}sDTDOpenWaka(){const G=this.getCodeNorm();switch(this.text+=String.fromCodePoint(G),G){case 33:this.state=7,this.openWakaBang="";break;case 63:this.state=11;break;default:this.state=4}}sDTDOpenWakaBang(){const G=String.fromCodePoint(this.getCodeNorm()),w=this.openWakaBang+=G;this.text+=G,w!=="-"&&(this.state=w==="--"?8:4,this.openWakaBang="")}sDTDComment(){this.captureToChar(45)&&(this.text+="-",this.state=9)}sDTDCommentEnding(){const G=this.getCodeNorm();this.text+=String.fromCodePoint(G),this.state=G===45?10:8}sDTDCommentEnded(){const G=this.getCodeNorm();this.text+=String.fromCodePoint(G),G===62?this.state=4:(this.fail("malformed comment."),this.state=8)}sDTDPI(){this.captureToChar(63)&&(this.text+="?",this.state=12)}sDTDPIEnding(){const G=this.getCodeNorm();this.text+=String.fromCodePoint(G),G===62&&(this.state=4)}sText(){this.tags.length!==0?this.handleTextInRoot():this.handleTextOutsideRoot()}sEntity(){let{i:G}=this;const{chunk:w}=this;g:for(;;)switch(this.getCode()){case-2:this.entity+=w.slice(G,this.prevI)+`
- `,G=this.i;break;case 59:{const{entityReturnState:W}=this,y=this.entity+w.slice(G,this.prevI);let f;this.state=W,y===""?(this.fail("empty entity name."),f="&;"):(f=this.parseEntity(y),this.entity=""),W===13&&this.textHandler===void 0||(this.text+=f);break g}case-1:this.entity+=w.slice(G);break g}}sOpenWaka(){const G=this.getCode();if(a(G))this.state=34,this.unget(),this.xmlDeclPossible=!1;else switch(G){case 47:this.state=43,this.xmlDeclPossible=!1;break;case 33:this.state=16,this.openWakaBang="",this.xmlDeclPossible=!1;break;case 63:this.state=23;break;default:this.fail("disallowed character in tag name"),this.state=13,this.xmlDeclPossible=!1}}sOpenWakaBang(){switch(this.openWakaBang+=String.fromCodePoint(this.getCodeNorm()),this.openWakaBang){case"[CDATA[":this.sawRoot||this.reportedTextBeforeRoot||(this.fail("text data outside of root node."),this.reportedTextBeforeRoot=!0),this.closedRoot&&!this.reportedTextAfterRoot&&(this.fail("text data outside of root node."),this.reportedTextAfterRoot=!0),this.state=20,this.openWakaBang="";break;case"--":this.state=17,this.openWakaBang="";break;case"DOCTYPE":this.state=2,(this.doctype||this.sawRoot)&&this.fail("inappropriately located doctype declaration."),this.openWakaBang="";break;default:this.openWakaBang.length>=7&&this.fail("incorrect syntax.")}}sComment(){this.captureToChar(45)&&(this.state=18)}sCommentEnding(){var G;const w=this.getCodeNorm();w===45?(this.state=19,(G=this.commentHandler)===null||G===void 0||G.call(this,this.text),this.text=""):(this.text+="-"+String.fromCodePoint(w),this.state=17)}sCommentEnded(){const G=this.getCodeNorm();G!==62?(this.fail("malformed comment."),this.text+="--"+String.fromCodePoint(G),this.state=17):this.state=13}sCData(){this.captureToChar(93)&&(this.state=21)}sCDataEnding(){const G=this.getCodeNorm();G===93?this.state=22:(this.text+="]"+String.fromCodePoint(G),this.state=20)}sCDataEnding2(){var G;const w=this.getCodeNorm();switch(w){case 62:(G=this.cdataHandler)===null||G===void 0||G.call(this,this.text),this.text="",this.state=13;break;case 93:this.text+="]";break;default:this.text+="]]"+String.fromCodePoint(w),this.state=20}}sPIFirstChar(){const G=this.getCodeNorm();this.nameStartCheck(G)?(this.piTarget+=String.fromCodePoint(G),this.state=24):G===63||l(G)?(this.fail("processing instruction without a target."),this.state=G===63?26:25):(this.fail("disallowed character in processing instruction name."),this.piTarget+=String.fromCodePoint(G),this.state=24)}sPIRest(){const{chunk:G,i:w}=this;for(;;){const W=this.getCodeNorm();if(W===-1)return void(this.piTarget+=G.slice(w));if(!this.nameCheck(W)){this.piTarget+=G.slice(w,this.prevI);const y=W===63;y||l(W)?this.piTarget==="xml"?(this.xmlDeclPossible||this.fail("an XML declaration must be at the start of the document."),this.state=y?33:27):this.state=y?26:25:(this.fail("disallowed character in processing instruction name."),this.piTarget+=String.fromCodePoint(W));break}}}sPIBody(){if(this.text.length===0){const G=this.getCodeNorm();G===63?this.state=26:l(G)||(this.text=String.fromCodePoint(G))}else this.captureToChar(63)&&(this.state=26)}sPIEnding(){var G;const w=this.getCodeNorm();if(w===62){const{piTarget:W}=this;W.toLowerCase()==="xml"&&this.fail("the XML declaration must appear at the start of the document."),(G=this.piHandler)===null||G===void 0||G.call(this,{target:W,body:this.text}),this.piTarget=this.text="",this.state=13}else w===63?this.text+="?":(this.text+="?"+String.fromCodePoint(w),this.state=25);this.xmlDeclPossible=!1}sXMLDeclNameStart(){const G=this.skipSpaces();G!==63?G!==-1&&(this.state=28,this.name=String.fromCodePoint(G)):this.state=33}sXMLDeclName(){const G=this.captureTo(z);if(G===63)return this.state=33,this.name+=this.text,this.text="",void this.fail("XML declaration is incomplete.");if(l(G)||G===61){if(this.name+=this.text,this.text="",!this.xmlDeclExpects.includes(this.name))switch(this.name.length){case 0:this.fail("did not expect any more name/value pairs.");break;case 1:this.fail(`expected the name ${this.xmlDeclExpects[0]}.`);break;default:this.fail("expected one of "+this.xmlDeclExpects.join(", "))}this.state=G===61?30:29}}sXMLDeclEq(){const G=this.getCodeNorm();if(G===63)return this.state=33,void this.fail("XML declaration is incomplete.");l(G)||(G!==61&&this.fail("value required."),this.state=30)}sXMLDeclValueStart(){const G=this.getCodeNorm();if(G===63)return this.state=33,void this.fail("XML declaration is incomplete.");l(G)||(R(G)?this.q=G:(this.fail("value must be quoted."),this.q=32),this.state=31)}sXMLDeclValue(){const G=this.captureTo([this.q,63]);if(G===63)return this.state=33,this.text="",void this.fail("XML declaration is incomplete.");if(G===-1)return;const w=this.text;switch(this.text="",this.name){case"version":{this.xmlDeclExpects=["encoding","standalone"];const W=w;this.xmlDecl.version=W,/^1\.[0-9]+$/.test(W)?this.opt.forceXMLVersion||this.setXMLVersion(W):this.fail("version number must match /^1\\.[0-9]+$/.");break}case"encoding":/^[A-Za-z][A-Za-z0-9._-]*$/.test(w)||this.fail("encoding value must match /^[A-Za-z0-9][A-Za-z0-9._-]*$/."),this.xmlDeclExpects=["standalone"],this.xmlDecl.encoding=w;break;case"standalone":w!=="yes"&&w!=="no"&&this.fail('standalone value must match "yes" or "no".'),this.xmlDeclExpects=[],this.xmlDecl.standalone=w}this.name="",this.state=32}sXMLDeclSeparator(){const G=this.getCodeNorm();G!==63?(l(G)||(this.fail("whitespace required."),this.unget()),this.state=27):this.state=33}sXMLDeclEnding(){var G;this.getCodeNorm()===62?(this.piTarget!=="xml"?this.fail("processing instructions are not allowed before root."):this.name!=="version"&&this.xmlDeclExpects.includes("version")&&this.fail("XML declaration must contain a version."),(G=this.xmldeclHandler)===null||G===void 0||G.call(this,this.xmlDecl),this.name="",this.piTarget=this.text="",this.state=13):this.fail("The character ? is disallowed anywhere in XML declarations."),this.xmlDeclPossible=!1}sOpenTag(){var G;const w=this.captureNameChars();if(w===-1)return;const W=this.tag={name:this.name,attributes:Object.create(null)};switch(this.name="",this.xmlnsOpt&&(this.topNS=W.ns=Object.create(null)),(G=this.openTagStartHandler)===null||G===void 0||G.call(this,W),this.sawRoot=!0,!this.fragmentOpt&&this.closedRoot&&this.fail("documents may contain only one root."),w){case 62:this.openTag();break;case 47:this.state=35;break;default:l(w)||this.fail("disallowed character in tag name."),this.state=36}}sOpenTagSlash(){this.getCode()===62?this.openSelfClosingTag():(this.fail("forward-slash in opening tag not followed by >."),this.state=36)}sAttrib(){const G=this.skipSpaces();G!==-1&&(a(G)?(this.unget(),this.state=37):G===62?this.openTag():G===47?this.state=35:this.fail("disallowed character in attribute name."))}sAttribName(){const G=this.captureNameChars();G===61?this.state=39:l(G)?this.state=38:G===62?(this.fail("attribute without value."),this.pushAttrib(this.name,this.name),this.name=this.text="",this.openTag()):G!==-1&&this.fail("disallowed character in attribute name.")}sAttribNameSawWhite(){const G=this.skipSpaces();switch(G){case-1:return;case 61:this.state=39;break;default:this.fail("attribute without value."),this.text="",this.name="",G===62?this.openTag():a(G)?(this.unget(),this.state=37):(this.fail("disallowed character in attribute name."),this.state=36)}}sAttribValue(){const G=this.getCodeNorm();R(G)?(this.q=G,this.state=40):l(G)||(this.fail("unquoted attribute value."),this.state=42,this.unget())}sAttribValueQuoted(){const{q:G,chunk:w}=this;let{i:W}=this;for(;;)switch(this.getCode()){case G:return this.pushAttrib(this.name,this.text+w.slice(W,this.prevI)),this.name=this.text="",this.q=null,void(this.state=41);case 38:return this.text+=w.slice(W,this.prevI),this.state=14,void(this.entityReturnState=40);case 10:case-2:case 9:this.text+=w.slice(W,this.prevI)+" ",W=this.i;break;case 60:return this.text+=w.slice(W,this.prevI),void this.fail("disallowed character.");case-1:return void(this.text+=w.slice(W))}}sAttribValueClosed(){const G=this.getCodeNorm();l(G)?this.state=36:G===62?this.openTag():G===47?this.state=35:a(G)?(this.fail("no whitespace between attributes."),this.unget(),this.state=37):this.fail("disallowed character in attribute name.")}sAttribValueUnquoted(){const G=this.captureTo(v);switch(G){case 38:this.state=14,this.entityReturnState=42;break;case 60:this.fail("disallowed character.");break;case-1:break;default:this.text.includes("]]>")&&this.fail('the string "]]>" is disallowed in char data.'),this.pushAttrib(this.name,this.text),this.name=this.text="",G===62?this.openTag():this.state=36}}sCloseTag(){const G=this.captureNameChars();G===62?this.closeTag():l(G)?this.state=44:G!==-1&&this.fail("disallowed character in closing tag.")}sCloseTagSawWhite(){switch(this.skipSpaces()){case 62:this.closeTag();break;case-1:break;default:this.fail("disallowed character in closing tag.")}}handleTextInRoot(){let{i:G,forbiddenState:w}=this;const{chunk:W,textHandler:y}=this;g:for(;;)switch(this.getCode()){case 60:if(this.state=15,y!==void 0){const{text:f}=this,D=W.slice(G,this.prevI);f.length!==0?(y(f+D),this.text=""):D.length!==0&&y(D)}w=0;break g;case 38:this.state=14,this.entityReturnState=13,y!==void 0&&(this.text+=W.slice(G,this.prevI)),w=0;break g;case 93:switch(w){case 0:w=1;break;case 1:w=2;break;case 2:break;default:throw new Error("impossible state")}break;case 62:w===2&&this.fail('the string "]]>" is disallowed in char data.'),w=0;break;case-2:y!==void 0&&(this.text+=W.slice(G,this.prevI)+`
- `),G=this.i,w=0;break;case-1:y!==void 0&&(this.text+=W.slice(G));break g;default:w=0}this.forbiddenState=w}handleTextOutsideRoot(){let{i:G}=this;const{chunk:w,textHandler:W}=this;let y=!1;g:for(;;){const f=this.getCode();switch(f){case 60:if(this.state=15,W!==void 0){const{text:D}=this,F=w.slice(G,this.prevI);D.length!==0?(W(D+F),this.text=""):F.length!==0&&W(F)}break g;case 38:this.state=14,this.entityReturnState=13,W!==void 0&&(this.text+=w.slice(G,this.prevI)),y=!0;break g;case-2:W!==void 0&&(this.text+=w.slice(G,this.prevI)+`
- `),G=this.i;break;case-1:W!==void 0&&(this.text+=w.slice(G));break g;default:l(f)||(y=!0)}}y&&(this.sawRoot||this.reportedTextBeforeRoot||(this.fail("text data outside of root node."),this.reportedTextBeforeRoot=!0),this.closedRoot&&!this.reportedTextAfterRoot&&(this.fail("text data outside of root node."),this.reportedTextAfterRoot=!0))}pushAttribNS(G,w){var W;const{prefix:y,local:f}=this.qname(G),D={name:G,prefix:y,local:f,value:w};if(this.attribList.push(D),(W=this.attributeHandler)===null||W===void 0||W.call(this,D),y==="xmlns"){const F=w.trim();this.currentXMLVersion==="1.0"&&F===""&&this.fail("invalid attempt to undefine prefix in XML 1.0"),this.topNS[f]=F,K(this,f,F)}else if(G==="xmlns"){const F=w.trim();this.topNS[""]=F,K(this,"",F)}}pushAttribPlain(G,w){var W;const y={name:G,value:w};this.attribList.push(y),(W=this.attributeHandler)===null||W===void 0||W.call(this,y)}end(){var G,w;this.sawRoot||this.fail("document must contain a root element.");const{tags:W}=this;for(;W.length>0;){const f=W.pop();this.fail("unclosed tag: "+f.name)}this.state!==0&&this.state!==13&&this.fail("unexpected end.");const{text:y}=this;return y.length!==0&&((G=this.textHandler)===null||G===void 0||G.call(this,y),this.text=""),this._closed=!0,(w=this.endHandler)===null||w===void 0||w.call(this),this._init(),this}resolve(G){var w,W;let y=this.topNS[G];if(y!==void 0)return y;const{tags:f}=this;for(let D=f.length-1;D>=0;D--)if(y=f[D].ns[G],y!==void 0)return y;return y=this.ns[G],y!==void 0?y:(W=(w=this.opt).resolvePrefix)===null||W===void 0?void 0:W.call(w,G)}qname(G){const w=G.indexOf(":");if(w===-1)return{prefix:"",local:G};const W=G.slice(w+1),y=G.slice(0,w);return(y===""||W===""||W.includes(":"))&&this.fail(`malformed name: ${G}.`),{prefix:y,local:W}}processAttribsNS(){var G;const{attribList:w}=this,W=this.tag;{const{prefix:D,local:F}=this.qname(W.name);W.prefix=D,W.local=F;const T=W.uri=(G=this.resolve(D))!==null&&G!==void 0?G:"";D!==""&&(D==="xmlns"&&this.fail('tags may not have "xmlns" as prefix.'),T===""&&(this.fail(`unbound namespace prefix: ${JSON.stringify(D)}.`),W.uri=D))}if(w.length===0)return;const{attributes:y}=W,f=new Set;for(const D of w){const{name:F,prefix:T,local:Q}=D;let P,L;T===""?(P=F==="xmlns"?Z:"",L=F):(P=this.resolve(T),P===void 0&&(this.fail(`unbound namespace prefix: ${JSON.stringify(T)}.`),P=T),L=`{${P}}${Q}`),f.has(L)&&this.fail(`duplicate attribute: ${L}.`),f.add(L),D.uri=P,y[F]=D}this.attribList=[]}processAttribsPlain(){const{attribList:G}=this,w=this.tag.attributes;for(const{name:W,value:y}of G)w[W]!==void 0&&this.fail(`duplicate attribute: ${W}.`),w[W]=y;this.attribList=[]}openTag(){var G;this.processAttribs();const{tags:w}=this,W=this.tag;W.isSelfClosing=!1,(G=this.openTagHandler)===null||G===void 0||G.call(this,W),w.push(W),this.state=13,this.name=""}openSelfClosingTag(){var G,w,W;this.processAttribs();const{tags:y}=this,f=this.tag;f.isSelfClosing=!0,(G=this.openTagHandler)===null||G===void 0||G.call(this,f),(w=this.closeTagHandler)===null||w===void 0||w.call(this,f),(this.tag=(W=y[y.length-1])!==null&&W!==void 0?W:null)===null&&(this.closedRoot=!0),this.state=13,this.name=""}closeTag(){const{tags:G,name:w}=this;if(this.state=13,this.name="",w==="")return this.fail("weird empty close tag."),void(this.text+="</>");const W=this.closeTagHandler;let y=G.length;for(;y-- >0;){const f=this.tag=G.pop();if(this.topNS=f.ns,W==null||W(f),f.name===w)break;this.fail("unexpected close tag.")}y===0?this.closedRoot=!0:y<0&&(this.fail(`unmatched closing tag: ${w}.`),this.text+=`</${w}>`)}parseEntity(G){if(G[0]!=="#"){const W=this.ENTITIES[G];return W!==void 0?W:(this.fail(this.isName(G)?"undefined entity.":"disallowed character in entity name."),`&${G};`)}let w=NaN;return G[1]==="x"&&/^#x[0-9a-f]+$/i.test(G)?w=parseInt(G.slice(2),16):/^#[0-9]+$/.test(G)&&(w=parseInt(G.slice(1),10)),this.isChar(w)?String.fromCodePoint(w):(this.fail("malformed character entity."),`&${G};`)}}},{"xmlchars/xml/1.0/ed5":543,"xmlchars/xml/1.1/ed2":544,"xmlchars/xmlns/1.0/ed3":545}],497:[function(g,C,i){var e=g("safe-buffer").Buffer;function A(s,l){this._block=e.alloc(s),this._finalSize=l,this._blockSize=s,this._len=0}A.prototype.update=function(s,l){typeof s=="string"&&(l=l||"utf8",s=e.from(s,l));for(var n=this._block,a=this._blockSize,d=s.length,o=this._len,c=0;c<d;){for(var r=o%a,h=Math.min(d-c,a-r),b=0;b<h;b++)n[r+b]=s[c+b];c+=h,(o+=h)%a==0&&this._update(n)}return this._len+=d,this},A.prototype.digest=function(s){var l=this._len%this._blockSize;this._block[l]=128,this._block.fill(0,l+1),l>=this._finalSize&&(this._update(this._block),this._block.fill(0));var n=8*this._len;if(n<=4294967295)this._block.writeUInt32BE(n,this._blockSize-4);else{var a=(4294967295&n)>>>0,d=(n-a)/4294967296;this._block.writeUInt32BE(d,this._blockSize-8),this._block.writeUInt32BE(a,this._blockSize-4)}this._update(this._block);var o=this._hash();return s?o.toString(s):o},A.prototype._update=function(){throw new Error("_update must be implemented by subclass")},C.exports=A},{"safe-buffer":494}],498:[function(g,C,i){var e=C.exports=function(A){A=A.toLowerCase();var s=e[A];if(!s)throw new Error(A+" is not supported (we accept pull requests)");return new s};e.sha=g("./sha"),e.sha1=g("./sha1"),e.sha224=g("./sha224"),e.sha256=g("./sha256"),e.sha384=g("./sha384"),e.sha512=g("./sha512")},{"./sha":499,"./sha1":500,"./sha224":501,"./sha256":502,"./sha384":503,"./sha512":504}],499:[function(g,C,i){var e=g("inherits"),A=g("./hash"),s=g("safe-buffer").Buffer,l=[1518500249,1859775393,-1894007588,-899497514],n=new Array(80);function a(){this.init(),this._w=n,A.call(this,64,56)}function d(c){return c<<30|c>>>2}function o(c,r,h,b){return c===0?r&h|~r&b:c===2?r&h|r&b|h&b:r^h^b}e(a,A),a.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},a.prototype._update=function(c){for(var r,h=this._w,b=0|this._a,u=0|this._b,m=0|this._c,Z=0|this._d,p=0|this._e,Y=0;Y<16;++Y)h[Y]=c.readInt32BE(4*Y);for(;Y<80;++Y)h[Y]=h[Y-3]^h[Y-8]^h[Y-14]^h[Y-16];for(var R=0;R<80;++R){var X=~~(R/20),H=0|((r=b)<<5|r>>>27)+o(X,u,m,Z)+p+h[R]+l[X];p=Z,Z=m,m=d(u),u=b,b=H}this._a=b+this._a|0,this._b=u+this._b|0,this._c=m+this._c|0,this._d=Z+this._d|0,this._e=p+this._e|0},a.prototype._hash=function(){var c=s.allocUnsafe(20);return c.writeInt32BE(0|this._a,0),c.writeInt32BE(0|this._b,4),c.writeInt32BE(0|this._c,8),c.writeInt32BE(0|this._d,12),c.writeInt32BE(0|this._e,16),c},C.exports=a},{"./hash":497,inherits:440,"safe-buffer":494}],500:[function(g,C,i){var e=g("inherits"),A=g("./hash"),s=g("safe-buffer").Buffer,l=[1518500249,1859775393,-1894007588,-899497514],n=new Array(80);function a(){this.init(),this._w=n,A.call(this,64,56)}function d(r){return r<<5|r>>>27}function o(r){return r<<30|r>>>2}function c(r,h,b,u){return r===0?h&b|~h&u:r===2?h&b|h&u|b&u:h^b^u}e(a,A),a.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},a.prototype._update=function(r){for(var h,b=this._w,u=0|this._a,m=0|this._b,Z=0|this._c,p=0|this._d,Y=0|this._e,R=0;R<16;++R)b[R]=r.readInt32BE(4*R);for(;R<80;++R)b[R]=(h=b[R-3]^b[R-8]^b[R-14]^b[R-16])<<1|h>>>31;for(var X=0;X<80;++X){var H=~~(X/20),S=d(u)+c(H,m,Z,p)+Y+b[X]+l[H]|0;Y=p,p=Z,Z=o(m),m=u,u=S}this._a=u+this._a|0,this._b=m+this._b|0,this._c=Z+this._c|0,this._d=p+this._d|0,this._e=Y+this._e|0},a.prototype._hash=function(){var r=s.allocUnsafe(20);return r.writeInt32BE(0|this._a,0),r.writeInt32BE(0|this._b,4),r.writeInt32BE(0|this._c,8),r.writeInt32BE(0|this._d,12),r.writeInt32BE(0|this._e,16),r},C.exports=a},{"./hash":497,inherits:440,"safe-buffer":494}],501:[function(g,C,i){var e=g("inherits"),A=g("./sha256"),s=g("./hash"),l=g("safe-buffer").Buffer,n=new Array(64);function a(){this.init(),this._w=n,s.call(this,64,56)}e(a,A),a.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},a.prototype._hash=function(){var d=l.allocUnsafe(28);return d.writeInt32BE(this._a,0),d.writeInt32BE(this._b,4),d.writeInt32BE(this._c,8),d.writeInt32BE(this._d,12),d.writeInt32BE(this._e,16),d.writeInt32BE(this._f,20),d.writeInt32BE(this._g,24),d},C.exports=a},{"./hash":497,"./sha256":502,inherits:440,"safe-buffer":494}],502:[function(g,C,i){var e=g("inherits"),A=g("./hash"),s=g("safe-buffer").Buffer,l=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],n=new Array(64);function a(){this.init(),this._w=n,A.call(this,64,56)}function d(b,u,m){return m^b&(u^m)}function o(b,u,m){return b&u|m&(b|u)}function c(b){return(b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10)}function r(b){return(b>>>6|b<<26)^(b>>>11|b<<21)^(b>>>25|b<<7)}function h(b){return(b>>>7|b<<25)^(b>>>18|b<<14)^b>>>3}e(a,A),a.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},a.prototype._update=function(b){for(var u,m=this._w,Z=0|this._a,p=0|this._b,Y=0|this._c,R=0|this._d,X=0|this._e,H=0|this._f,S=0|this._g,z=0|this._h,v=0;v<16;++v)m[v]=b.readInt32BE(4*v);for(;v<64;++v)m[v]=0|(((u=m[v-2])>>>17|u<<15)^(u>>>19|u<<13)^u>>>10)+m[v-7]+h(m[v-15])+m[v-16];for(var K=0;K<64;++K){var V=z+r(X)+d(X,H,S)+l[K]+m[K]|0,N=c(Z)+o(Z,p,Y)|0;z=S,S=H,H=X,X=R+V|0,R=Y,Y=p,p=Z,Z=V+N|0}this._a=Z+this._a|0,this._b=p+this._b|0,this._c=Y+this._c|0,this._d=R+this._d|0,this._e=X+this._e|0,this._f=H+this._f|0,this._g=S+this._g|0,this._h=z+this._h|0},a.prototype._hash=function(){var b=s.allocUnsafe(32);return b.writeInt32BE(this._a,0),b.writeInt32BE(this._b,4),b.writeInt32BE(this._c,8),b.writeInt32BE(this._d,12),b.writeInt32BE(this._e,16),b.writeInt32BE(this._f,20),b.writeInt32BE(this._g,24),b.writeInt32BE(this._h,28),b},C.exports=a},{"./hash":497,inherits:440,"safe-buffer":494}],503:[function(g,C,i){var e=g("inherits"),A=g("./sha512"),s=g("./hash"),l=g("safe-buffer").Buffer,n=new Array(160);function a(){this.init(),this._w=n,s.call(this,128,112)}e(a,A),a.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},a.prototype._hash=function(){var d=l.allocUnsafe(48);function o(c,r,h){d.writeInt32BE(c,h),d.writeInt32BE(r,h+4)}return o(this._ah,this._al,0),o(this._bh,this._bl,8),o(this._ch,this._cl,16),o(this._dh,this._dl,24),o(this._eh,this._el,32),o(this._fh,this._fl,40),d},C.exports=a},{"./hash":497,"./sha512":504,inherits:440,"safe-buffer":494}],504:[function(g,C,i){var e=g("inherits"),A=g("./hash"),s=g("safe-buffer").Buffer,l=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],n=new Array(160);function a(){this.init(),this._w=n,A.call(this,128,112)}function d(p,Y,R){return R^p&(Y^R)}function o(p,Y,R){return p&Y|R&(p|Y)}function c(p,Y){return(p>>>28|Y<<4)^(Y>>>2|p<<30)^(Y>>>7|p<<25)}function r(p,Y){return(p>>>14|Y<<18)^(p>>>18|Y<<14)^(Y>>>9|p<<23)}function h(p,Y){return(p>>>1|Y<<31)^(p>>>8|Y<<24)^p>>>7}function b(p,Y){return(p>>>1|Y<<31)^(p>>>8|Y<<24)^(p>>>7|Y<<25)}function u(p,Y){return(p>>>19|Y<<13)^(Y>>>29|p<<3)^p>>>6}function m(p,Y){return(p>>>19|Y<<13)^(Y>>>29|p<<3)^(p>>>6|Y<<26)}function Z(p,Y){return p>>>0<Y>>>0?1:0}e(a,A),a.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},a.prototype._update=function(p){for(var Y=this._w,R=0|this._ah,X=0|this._bh,H=0|this._ch,S=0|this._dh,z=0|this._eh,v=0|this._fh,K=0|this._gh,V=0|this._hh,N=0|this._al,B=0|this._bl,G=0|this._cl,w=0|this._dl,W=0|this._el,y=0|this._fl,f=0|this._gl,D=0|this._hl,F=0;F<32;F+=2)Y[F]=p.readInt32BE(4*F),Y[F+1]=p.readInt32BE(4*F+4);for(;F<160;F+=2){var T=Y[F-30],Q=Y[F-30+1],P=h(T,Q),L=b(Q,T),E=u(T=Y[F-4],Q=Y[F-4+1]),J=m(Q,T),k=Y[F-14],j=Y[F-14+1],q=Y[F-32],tg=Y[F-32+1],Cg=L+j|0,x=P+k+Z(Cg,L)|0;x=(x=x+E+Z(Cg=Cg+J|0,J)|0)+q+Z(Cg=Cg+tg|0,tg)|0,Y[F]=x,Y[F+1]=Cg}for(var sg=0;sg<160;sg+=2){x=Y[sg],Cg=Y[sg+1];var Ag=o(R,X,H),O=o(N,B,G),_=c(R,N),Ig=c(N,R),ng=r(z,W),ag=r(W,z),lg=l[sg],cg=l[sg+1],dg=d(z,v,K),hg=d(W,y,f),rg=D+ag|0,Wg=V+ng+Z(rg,D)|0;Wg=(Wg=(Wg=Wg+dg+Z(rg=rg+hg|0,hg)|0)+lg+Z(rg=rg+cg|0,cg)|0)+x+Z(rg=rg+Cg|0,Cg)|0;var Gg=Ig+O|0,Sg=_+Ag+Z(Gg,Ig)|0;V=K,D=f,K=v,f=y,v=z,y=W,z=S+Wg+Z(W=w+rg|0,w)|0,S=H,w=G,H=X,G=B,X=R,B=N,R=Wg+Sg+Z(N=rg+Gg|0,rg)|0}this._al=this._al+N|0,this._bl=this._bl+B|0,this._cl=this._cl+G|0,this._dl=this._dl+w|0,this._el=this._el+W|0,this._fl=this._fl+y|0,this._gl=this._gl+f|0,this._hl=this._hl+D|0,this._ah=this._ah+R+Z(this._al,N)|0,this._bh=this._bh+X+Z(this._bl,B)|0,this._ch=this._ch+H+Z(this._cl,G)|0,this._dh=this._dh+S+Z(this._dl,w)|0,this._eh=this._eh+z+Z(this._el,W)|0,this._fh=this._fh+v+Z(this._fl,y)|0,this._gh=this._gh+K+Z(this._gl,f)|0,this._hh=this._hh+V+Z(this._hl,D)|0},a.prototype._hash=function(){var p=s.allocUnsafe(64);function Y(R,X,H){p.writeInt32BE(R,H),p.writeInt32BE(X,H+4)}return Y(this._ah,this._al,0),Y(this._bh,this._bl,8),Y(this._ch,this._cl,16),Y(this._dh,this._dl,24),Y(this._eh,this._el,32),Y(this._fh,this._fl,40),Y(this._gh,this._gl,48),Y(this._hh,this._hl,56),p},C.exports=a},{"./hash":497,inherits:440,"safe-buffer":494}],505:[function(g,C,i){C.exports=A;var e=g("events").EventEmitter;function A(){e.call(this)}g("inherits")(A,e),A.Readable=g("readable-stream/readable.js"),A.Writable=g("readable-stream/writable.js"),A.Duplex=g("readable-stream/duplex.js"),A.Transform=g("readable-stream/transform.js"),A.PassThrough=g("readable-stream/passthrough.js"),A.Stream=A,A.prototype.pipe=function(s,l){var n=this;function a(u){s.writable&&s.write(u)===!1&&n.pause&&n.pause()}function d(){n.readable&&n.resume&&n.resume()}n.on("data",a),s.on("drain",d),s._isStdio||l&&l.end===!1||(n.on("end",c),n.on("close",r));var o=!1;function c(){o||(o=!0,s.end())}function r(){o||(o=!0,typeof s.destroy=="function"&&s.destroy())}function h(u){if(b(),e.listenerCount(this,"error")===0)throw u}function b(){n.removeListener("data",a),s.removeListener("drain",d),n.removeListener("end",c),n.removeListener("close",r),n.removeListener("error",h),s.removeListener("error",h),n.removeListener("end",b),n.removeListener("close",b),s.removeListener("close",b)}return n.on("error",h),s.on("error",h),n.on("end",b),n.on("close",b),s.on("close",b),s.emit("pipe",n),s}},{events:422,inherits:440,"readable-stream/duplex.js":507,"readable-stream/passthrough.js":516,"readable-stream/readable.js":517,"readable-stream/transform.js":518,"readable-stream/writable.js":519}],506:[function(g,C,i){var e={}.toString;C.exports=Array.isArray||function(A){return e.call(A)=="[object Array]"}},{}],507:[function(g,C,i){C.exports=g("./lib/_stream_duplex.js")},{"./lib/_stream_duplex.js":508}],508:[function(g,C,i){var e=g("process-nextick-args"),A=Object.keys||function(b){var u=[];for(var m in b)u.push(m);return u};C.exports=c;var s=Object.create(g("core-util-is"));s.inherits=g("inherits");var l=g("./_stream_readable"),n=g("./_stream_writable");s.inherits(c,l);for(var a=A(n.prototype),d=0;d<a.length;d++){var o=a[d];c.prototype[o]||(c.prototype[o]=n.prototype[o])}function c(b){if(!(this instanceof c))return new c(b);l.call(this,b),n.call(this,b),b&&b.readable===!1&&(this.readable=!1),b&&b.writable===!1&&(this.writable=!1),this.allowHalfOpen=!0,b&&b.allowHalfOpen===!1&&(this.allowHalfOpen=!1),this.once("end",r)}function r(){this.allowHalfOpen||this._writableState.ended||e.nextTick(h,this)}function h(b){b.end()}Object.defineProperty(c.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),Object.defineProperty(c.prototype,"destroyed",{get:function(){return this._readableState!==void 0&&this._writableState!==void 0&&this._readableState.destroyed&&this._writableState.destroyed},set:function(b){this._readableState!==void 0&&this._writableState!==void 0&&(this._readableState.destroyed=b,this._writableState.destroyed=b)}}),c.prototype._destroy=function(b,u){this.push(null),this.end(),e.nextTick(u,b)}},{"./_stream_readable":510,"./_stream_writable":512,"core-util-is":383,inherits:440,"process-nextick-args":466}],509:[function(g,C,i){C.exports=s;var e=g("./_stream_transform"),A=Object.create(g("core-util-is"));function s(l){if(!(this instanceof s))return new s(l);e.call(this,l)}A.inherits=g("inherits"),A.inherits(s,e),s.prototype._transform=function(l,n,a){a(null,l)}},{"./_stream_transform":511,"core-util-is":383,inherits:440}],510:[function(g,C,i){(function(e,A){(function(){var s=g("process-nextick-args");C.exports=R;var l,n=g("isarray");R.ReadableState=Y,g("events").EventEmitter;var a=function(D,F){return D.listeners(F).length},d=g("./internal/streams/stream"),o=g("safe-buffer").Buffer,c=(A!==void 0?A:typeof window<"u"?window:typeof self<"u"?self:{}).Uint8Array||function(){},r=Object.create(g("core-util-is"));r.inherits=g("inherits");var h=g("util"),b=void 0;b=h&&h.debuglog?h.debuglog("stream"):function(){};var u,m=g("./internal/streams/BufferList"),Z=g("./internal/streams/destroy");r.inherits(R,d);var p=["error","close","destroy","pause","resume"];function Y(D,F){D=D||{};var T=F instanceof(l=l||g("./_stream_duplex"));this.objectMode=!!D.objectMode,T&&(this.objectMode=this.objectMode||!!D.readableObjectMode);var Q=D.highWaterMark,P=D.readableHighWaterMark,L=this.objectMode?16:16384;this.highWaterMark=Q||Q===0?Q:T&&(P||P===0)?P:L,this.highWaterMark=Math.floor(this.highWaterMark),this.buffer=new m,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.destroyed=!1,this.defaultEncoding=D.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,D.encoding&&(u||(u=g("string_decoder/").StringDecoder),this.decoder=new u(D.encoding),this.encoding=D.encoding)}function R(D){if(l=l||g("./_stream_duplex"),!(this instanceof R))return new R(D);this._readableState=new Y(D,this),this.readable=!0,D&&(typeof D.read=="function"&&(this._read=D.read),typeof D.destroy=="function"&&(this._destroy=D.destroy)),d.call(this)}function X(D,F,T,Q,P){var L,E=D._readableState;return F===null?(E.reading=!1,function(J,k){if(!k.ended){if(k.decoder){var j=k.decoder.end();j&&j.length&&(k.buffer.push(j),k.length+=k.objectMode?1:j.length)}k.ended=!0,z(J)}}(D,E)):(P||(L=function(J,k){var j;q=k,o.isBuffer(q)||q instanceof c||typeof k=="string"||k===void 0||J.objectMode||(j=new TypeError("Invalid non-string/buffer chunk"));var q;return j}(E,F)),L?D.emit("error",L):E.objectMode||F&&F.length>0?(typeof F=="string"||E.objectMode||Object.getPrototypeOf(F)===o.prototype||(F=function(J){return o.from(J)}(F)),Q?E.endEmitted?D.emit("error",new Error("stream.unshift() after end event")):H(D,E,F,!0):E.ended?D.emit("error",new Error("stream.push() after EOF")):(E.reading=!1,E.decoder&&!T?(F=E.decoder.write(F),E.objectMode||F.length!==0?H(D,E,F,!1):K(D,E)):H(D,E,F,!1))):Q||(E.reading=!1)),function(J){return!J.ended&&(J.needReadable||J.length<J.highWaterMark||J.length===0)}(E)}function H(D,F,T,Q){F.flowing&&F.length===0&&!F.sync?(D.emit("data",T),D.read(0)):(F.length+=F.objectMode?1:T.length,Q?F.buffer.unshift(T):F.buffer.push(T),F.needReadable&&z(D)),K(D,F)}Object.defineProperty(R.prototype,"destroyed",{get:function(){return this._readableState!==void 0&&this._readableState.destroyed},set:function(D){this._readableState&&(this._readableState.destroyed=D)}}),R.prototype.destroy=Z.destroy,R.prototype._undestroy=Z.undestroy,R.prototype._destroy=function(D,F){this.push(null),F(D)},R.prototype.push=function(D,F){var T,Q=this._readableState;return Q.objectMode?T=!0:typeof D=="string"&&((F=F||Q.defaultEncoding)!==Q.encoding&&(D=o.from(D,F),F=""),T=!0),X(this,D,F,!1,T)},R.prototype.unshift=function(D){return X(this,D,null,!0,!1)},R.prototype.isPaused=function(){return this._readableState.flowing===!1},R.prototype.setEncoding=function(D){return u||(u=g("string_decoder/").StringDecoder),this._readableState.decoder=new u(D),this._readableState.encoding=D,this};function S(D,F){return D<=0||F.length===0&&F.ended?0:F.objectMode?1:D!=D?F.flowing&&F.length?F.buffer.head.data.length:F.length:(D>F.highWaterMark&&(F.highWaterMark=function(T){return T>=8388608?T=8388608:(T--,T|=T>>>1,T|=T>>>2,T|=T>>>4,T|=T>>>8,T|=T>>>16,T++),T}(D)),D<=F.length?D:F.ended?F.length:(F.needReadable=!0,0))}function z(D){var F=D._readableState;F.needReadable=!1,F.emittedReadable||(b("emitReadable",F.flowing),F.emittedReadable=!0,F.sync?s.nextTick(v,D):v(D))}function v(D){b("emit readable"),D.emit("readable"),G(D)}function K(D,F){F.readingMore||(F.readingMore=!0,s.nextTick(V,D,F))}function V(D,F){for(var T=F.length;!F.reading&&!F.flowing&&!F.ended&&F.length<F.highWaterMark&&(b("maybeReadMore read 0"),D.read(0),T!==F.length);)T=F.length;F.readingMore=!1}function N(D){b("readable nexttick read 0"),D.read(0)}function B(D,F){F.reading||(b("resume read 0"),D.read(0)),F.resumeScheduled=!1,F.awaitDrain=0,D.emit("resume"),G(D),F.flowing&&!F.reading&&D.read(0)}function G(D){var F=D._readableState;for(b("flow",F.flowing);F.flowing&&D.read()!==null;);}function w(D,F){return F.length===0?null:(F.objectMode?T=F.buffer.shift():!D||D>=F.length?(T=F.decoder?F.buffer.join(""):F.buffer.length===1?F.buffer.head.data:F.buffer.concat(F.length),F.buffer.clear()):T=function(Q,P,L){var E;return Q<P.head.data.length?(E=P.head.data.slice(0,Q),P.head.data=P.head.data.slice(Q)):E=Q===P.head.data.length?P.shift():L?function(J,k){var j=k.head,q=1,tg=j.data;for(J-=tg.length;j=j.next;){var Cg=j.data,x=J>Cg.length?Cg.length:J;if(x===Cg.length?tg+=Cg:tg+=Cg.slice(0,J),(J-=x)===0){x===Cg.length?(++q,j.next?k.head=j.next:k.head=k.tail=null):(k.head=j,j.data=Cg.slice(x));break}++q}return k.length-=q,tg}(Q,P):function(J,k){var j=o.allocUnsafe(J),q=k.head,tg=1;for(q.data.copy(j),J-=q.data.length;q=q.next;){var Cg=q.data,x=J>Cg.length?Cg.length:J;if(Cg.copy(j,j.length-J,0,x),(J-=x)===0){x===Cg.length?(++tg,q.next?k.head=q.next:k.head=k.tail=null):(k.head=q,q.data=Cg.slice(x));break}++tg}return k.length-=tg,j}(Q,P),E}(D,F.buffer,F.decoder),T);var T}function W(D){var F=D._readableState;if(F.length>0)throw new Error('"endReadable()" called on non-empty stream');F.endEmitted||(F.ended=!0,s.nextTick(y,F,D))}function y(D,F){D.endEmitted||D.length!==0||(D.endEmitted=!0,F.readable=!1,F.emit("end"))}function f(D,F){for(var T=0,Q=D.length;T<Q;T++)if(D[T]===F)return T;return-1}R.prototype.read=function(D){b("read",D),D=parseInt(D,10);var F=this._readableState,T=D;if(D!==0&&(F.emittedReadable=!1),D===0&&F.needReadable&&(F.length>=F.highWaterMark||F.ended))return b("read: emitReadable",F.length,F.ended),F.length===0&&F.ended?W(this):z(this),null;if((D=S(D,F))===0&&F.ended)return F.length===0&&W(this),null;var Q,P=F.needReadable;return b("need readable",P),(F.length===0||F.length-D<F.highWaterMark)&&b("length less than watermark",P=!0),F.ended||F.reading?b("reading or ended",P=!1):P&&(b("do read"),F.reading=!0,F.sync=!0,F.length===0&&(F.needReadable=!0),this._read(F.highWaterMark),F.sync=!1,F.reading||(D=S(T,F))),(Q=D>0?w(D,F):null)===null?(F.needReadable=!0,D=0):F.length-=D,F.length===0&&(F.ended||(F.needReadable=!0),T!==D&&F.ended&&W(this)),Q!==null&&this.emit("data",Q),Q},R.prototype._read=function(D){this.emit("error",new Error("_read() is not implemented"))},R.prototype.pipe=function(D,F){var T=this,Q=this._readableState;switch(Q.pipesCount){case 0:Q.pipes=D;break;case 1:Q.pipes=[Q.pipes,D];break;default:Q.pipes.push(D)}Q.pipesCount+=1,b("pipe count=%d opts=%j",Q.pipesCount,F);var P=(!F||F.end!==!1)&&D!==e.stdout&&D!==e.stderr?E:sg;function L(Ag,O){b("onunpipe"),Ag===T&&O&&O.hasUnpiped===!1&&(O.hasUnpiped=!0,b("cleanup"),D.removeListener("close",Cg),D.removeListener("finish",x),D.removeListener("drain",J),D.removeListener("error",tg),D.removeListener("unpipe",L),T.removeListener("end",E),T.removeListener("end",sg),T.removeListener("data",q),k=!0,!Q.awaitDrain||D._writableState&&!D._writableState.needDrain||J())}function E(){b("onend"),D.end()}Q.endEmitted?s.nextTick(P):T.once("end",P),D.on("unpipe",L);var J=function(Ag){return function(){var O=Ag._readableState;b("pipeOnDrain",O.awaitDrain),O.awaitDrain&&O.awaitDrain--,O.awaitDrain===0&&a(Ag,"data")&&(O.flowing=!0,G(Ag))}}(T);D.on("drain",J);var k=!1,j=!1;function q(Ag){b("ondata"),j=!1,D.write(Ag)!==!1||j||((Q.pipesCount===1&&Q.pipes===D||Q.pipesCount>1&&f(Q.pipes,D)!==-1)&&!k&&(b("false write response, pause",Q.awaitDrain),Q.awaitDrain++,j=!0),T.pause())}function tg(Ag){b("onerror",Ag),sg(),D.removeListener("error",tg),a(D,"error")===0&&D.emit("error",Ag)}function Cg(){D.removeListener("finish",x),sg()}function x(){b("onfinish"),D.removeListener("close",Cg),sg()}function sg(){b("unpipe"),T.unpipe(D)}return T.on("data",q),function(Ag,O,_){if(typeof Ag.prependListener=="function")return Ag.prependListener(O,_);Ag._events&&Ag._events[O]?n(Ag._events[O])?Ag._events[O].unshift(_):Ag._events[O]=[_,Ag._events[O]]:Ag.on(O,_)}(D,"error",tg),D.once("close",Cg),D.once("finish",x),D.emit("pipe",T),Q.flowing||(b("pipe resume"),T.resume()),D},R.prototype.unpipe=function(D){var F=this._readableState,T={hasUnpiped:!1};if(F.pipesCount===0)return this;if(F.pipesCount===1)return D&&D!==F.pipes||(D||(D=F.pipes),F.pipes=null,F.pipesCount=0,F.flowing=!1,D&&D.emit("unpipe",this,T)),this;if(!D){var Q=F.pipes,P=F.pipesCount;F.pipes=null,F.pipesCount=0,F.flowing=!1;for(var L=0;L<P;L++)Q[L].emit("unpipe",this,{hasUnpiped:!1});return this}var E=f(F.pipes,D);return E===-1||(F.pipes.splice(E,1),F.pipesCount-=1,F.pipesCount===1&&(F.pipes=F.pipes[0]),D.emit("unpipe",this,T)),this},R.prototype.on=function(D,F){var T=d.prototype.on.call(this,D,F);if(D==="data")this._readableState.flowing!==!1&&this.resume();else if(D==="readable"){var Q=this._readableState;Q.endEmitted||Q.readableListening||(Q.readableListening=Q.needReadable=!0,Q.emittedReadable=!1,Q.reading?Q.length&&z(this):s.nextTick(N,this))}return T},R.prototype.addListener=R.prototype.on,R.prototype.resume=function(){var D=this._readableState;return D.flowing||(b("resume"),D.flowing=!0,function(F,T){T.resumeScheduled||(T.resumeScheduled=!0,s.nextTick(B,F,T))}(this,D)),this},R.prototype.pause=function(){return b("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(b("pause"),this._readableState.flowing=!1,this.emit("pause")),this},R.prototype.wrap=function(D){var F=this,T=this._readableState,Q=!1;for(var P in D.on("end",function(){if(b("wrapped end"),T.decoder&&!T.ended){var E=T.decoder.end();E&&E.length&&F.push(E)}F.push(null)}),D.on("data",function(E){b("wrapped data"),T.decoder&&(E=T.decoder.write(E)),T.objectMode&&E==null||(T.objectMode||E&&E.length)&&(F.push(E)||(Q=!0,D.pause()))}),D)this[P]===void 0&&typeof D[P]=="function"&&(this[P]=function(E){return function(){return D[E].apply(D,arguments)}}(P));for(var L=0;L<p.length;L++)D.on(p[L],this.emit.bind(this,p[L]));return this._read=function(E){b("wrapped _read",E),Q&&(Q=!1,D.resume())},this},Object.defineProperty(R.prototype,"readableHighWaterMark",{enumerable:!1,get:function(){return this._readableState.highWaterMark}}),R._fromList=w}).call(this)}).call(this,g("_process"),typeof FI<"u"?FI:typeof self<"u"?self:typeof window<"u"?window:{})},{"./_stream_duplex":508,"./internal/streams/BufferList":513,"./internal/streams/destroy":514,"./internal/streams/stream":515,_process:467,"core-util-is":383,events:422,inherits:440,isarray:506,"process-nextick-args":466,"safe-buffer":520,"string_decoder/":521,util:188}],511:[function(g,C,i){C.exports=l;var e=g("./_stream_duplex"),A=Object.create(g("core-util-is"));function s(d,o){var c=this._transformState;c.transforming=!1;var r=c.writecb;if(!r)return this.emit("error",new Error("write callback called multiple times"));c.writechunk=null,c.writecb=null,o!=null&&this.push(o),r(d);var h=this._readableState;h.reading=!1,(h.needReadable||h.length<h.highWaterMark)&&this._read(h.highWaterMark)}function l(d){if(!(this instanceof l))return new l(d);e.call(this,d),this._transformState={afterTransform:s.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,d&&(typeof d.transform=="function"&&(this._transform=d.transform),typeof d.flush=="function"&&(this._flush=d.flush)),this.on("prefinish",n)}function n(){var d=this;typeof this._flush=="function"?this._flush(function(o,c){a(d,o,c)}):a(this,null,null)}function a(d,o,c){if(o)return d.emit("error",o);if(c!=null&&d.push(c),d._writableState.length)throw new Error("Calling transform done when ws.length != 0");if(d._transformState.transforming)throw new Error("Calling transform done when still transforming");return d.push(null)}A.inherits=g("inherits"),A.inherits(l,e),l.prototype.push=function(d,o){return this._transformState.needTransform=!1,e.prototype.push.call(this,d,o)},l.prototype._transform=function(d,o,c){throw new Error("_transform() is not implemented")},l.prototype._write=function(d,o,c){var r=this._transformState;if(r.writecb=c,r.writechunk=d,r.writeencoding=o,!r.transforming){var h=this._readableState;(r.needTransform||h.needReadable||h.length<h.highWaterMark)&&this._read(h.highWaterMark)}},l.prototype._read=function(d){var o=this._transformState;o.writechunk!==null&&o.writecb&&!o.transforming?(o.transforming=!0,this._transform(o.writechunk,o.writeencoding,o.afterTransform)):o.needTransform=!0},l.prototype._destroy=function(d,o){var c=this;e.prototype._destroy.call(this,d,function(r){o(r),c.emit("close")})}},{"./_stream_duplex":508,"core-util-is":383,inherits:440}],512:[function(g,C,i){(function(e,A,s){(function(){var l=g("process-nextick-args");function n(K){var V=this;this.next=null,this.entry=null,this.finish=function(){(function(N,B,G){var w=N.entry;for(N.entry=null;w;){var W=w.callback;B.pendingcb--,W(G),w=w.next}B.corkedRequestsFree.next=N})(V,K)}}C.exports=Y;var a,d=!e.browser&&["v0.10","v0.9."].indexOf(e.version.slice(0,5))>-1?s:l.nextTick;Y.WritableState=p;var o=Object.create(g("core-util-is"));o.inherits=g("inherits");var c={deprecate:g("util-deprecate")},r=g("./internal/streams/stream"),h=g("safe-buffer").Buffer,b=(A!==void 0?A:typeof window<"u"?window:typeof self<"u"?self:{}).Uint8Array||function(){},u,m=g("./internal/streams/destroy");function Z(){}function p(K,V){a=a||g("./_stream_duplex"),K=K||{};var N=V instanceof a;this.objectMode=!!K.objectMode,N&&(this.objectMode=this.objectMode||!!K.writableObjectMode);var B=K.highWaterMark,G=K.writableHighWaterMark,w=this.objectMode?16:16384;this.highWaterMark=B||B===0?B:N&&(G||G===0)?G:w,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var W=K.decodeStrings===!1;this.decodeStrings=!W,this.defaultEncoding=K.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(y){(function(f,D){var F=f._writableState,T=F.sync,Q=F.writecb;if(function(L){L.writing=!1,L.writecb=null,L.length-=L.writelen,L.writelen=0}(F),D)(function(L,E,J,k,j){--E.pendingcb,J?(l.nextTick(j,k),l.nextTick(v,L,E),L._writableState.errorEmitted=!0,L.emit("error",k)):(j(k),L._writableState.errorEmitted=!0,L.emit("error",k),v(L,E))})(f,F,T,D,Q);else{var P=S(F);P||F.corked||F.bufferProcessing||!F.bufferedRequest||H(f,F),T?d(X,f,F,P,Q):X(f,F,P,Q)}})(V,y)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new n(this)}function Y(K){if(a=a||g("./_stream_duplex"),!(u.call(Y,this)||this instanceof a))return new Y(K);this._writableState=new p(K,this),this.writable=!0,K&&(typeof K.write=="function"&&(this._write=K.write),typeof K.writev=="function"&&(this._writev=K.writev),typeof K.destroy=="function"&&(this._destroy=K.destroy),typeof K.final=="function"&&(this._final=K.final)),r.call(this)}function R(K,V,N,B,G,w,W){V.writelen=B,V.writecb=W,V.writing=!0,V.sync=!0,N?K._writev(G,V.onwrite):K._write(G,w,V.onwrite),V.sync=!1}function X(K,V,N,B){N||function(G,w){w.length===0&&w.needDrain&&(w.needDrain=!1,G.emit("drain"))}(K,V),V.pendingcb--,B(),v(K,V)}function H(K,V){V.bufferProcessing=!0;var N=V.bufferedRequest;if(K._writev&&N&&N.next){var B=V.bufferedRequestCount,G=new Array(B),w=V.corkedRequestsFree;w.entry=N;for(var W=0,y=!0;N;)G[W]=N,N.isBuf||(y=!1),N=N.next,W+=1;G.allBuffers=y,R(K,V,!0,V.length,G,"",w.finish),V.pendingcb++,V.lastBufferedRequest=null,w.next?(V.corkedRequestsFree=w.next,w.next=null):V.corkedRequestsFree=new n(V),V.bufferedRequestCount=0}else{for(;N;){var f=N.chunk,D=N.encoding,F=N.callback;if(R(K,V,!1,V.objectMode?1:f.length,f,D,F),N=N.next,V.bufferedRequestCount--,V.writing)break}N===null&&(V.lastBufferedRequest=null)}V.bufferedRequest=N,V.bufferProcessing=!1}function S(K){return K.ending&&K.length===0&&K.bufferedRequest===null&&!K.finished&&!K.writing}function z(K,V){K._final(function(N){V.pendingcb--,N&&K.emit("error",N),V.prefinished=!0,K.emit("prefinish"),v(K,V)})}function v(K,V){var N=S(V);return N&&(function(B,G){G.prefinished||G.finalCalled||(typeof B._final=="function"?(G.pendingcb++,G.finalCalled=!0,l.nextTick(z,B,G)):(G.prefinished=!0,B.emit("prefinish")))}(K,V),V.pendingcb===0&&(V.finished=!0,K.emit("finish"))),N}o.inherits(Y,r),p.prototype.getBuffer=function(){for(var K=this.bufferedRequest,V=[];K;)V.push(K),K=K.next;return V},function(){try{Object.defineProperty(p.prototype,"buffer",{get:c.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch{}}(),typeof Symbol=="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]=="function"?(u=Function.prototype[Symbol.hasInstance],Object.defineProperty(Y,Symbol.hasInstance,{value:function(K){return!!u.call(this,K)||this===Y&&K&&K._writableState instanceof p}})):u=function(K){return K instanceof this},Y.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},Y.prototype.write=function(K,V,N){var B,G=this._writableState,w=!1,W=!G.objectMode&&(B=K,h.isBuffer(B)||B instanceof b);return W&&!h.isBuffer(K)&&(K=function(y){return h.from(y)}(K)),typeof V=="function"&&(N=V,V=null),W?V="buffer":V||(V=G.defaultEncoding),typeof N!="function"&&(N=Z),G.ended?function(y,f){var D=new Error("write after end");y.emit("error",D),l.nextTick(f,D)}(this,N):(W||function(y,f,D,F){var T=!0,Q=!1;return D===null?Q=new TypeError("May not write null values to stream"):typeof D=="string"||D===void 0||f.objectMode||(Q=new TypeError("Invalid non-string/buffer chunk")),Q&&(y.emit("error",Q),l.nextTick(F,Q),T=!1),T}(this,G,K,N))&&(G.pendingcb++,w=function(y,f,D,F,T,Q){if(!D){var P=function(k,j,q){return k.objectMode||k.decodeStrings===!1||typeof j!="string"||(j=h.from(j,q)),j}(f,F,T);F!==P&&(D=!0,T="buffer",F=P)}var L=f.objectMode?1:F.length;f.length+=L;var E=f.length<f.highWaterMark;if(E||(f.needDrain=!0),f.writing||f.corked){var J=f.lastBufferedRequest;f.lastBufferedRequest={chunk:F,encoding:T,isBuf:D,callback:Q,next:null},J?J.next=f.lastBufferedRequest:f.bufferedRequest=f.lastBufferedRequest,f.bufferedRequestCount+=1}else R(y,f,!1,L,F,T,Q);return E}(this,G,W,K,V,N)),w},Y.prototype.cork=function(){this._writableState.corked++},Y.prototype.uncork=function(){var K=this._writableState;K.corked&&(K.corked--,K.writing||K.corked||K.bufferProcessing||!K.bufferedRequest||H(this,K))},Y.prototype.setDefaultEncoding=function(K){if(typeof K=="string"&&(K=K.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((K+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+K);return this._writableState.defaultEncoding=K,this},Object.defineProperty(Y.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),Y.prototype._write=function(K,V,N){N(new Error("_write() is not implemented"))},Y.prototype._writev=null,Y.prototype.end=function(K,V,N){var B=this._writableState;typeof K=="function"?(N=K,K=null,V=null):typeof V=="function"&&(N=V,V=null),K!=null&&this.write(K,V),B.corked&&(B.corked=1,this.uncork()),B.ending||function(G,w,W){w.ending=!0,v(G,w),W&&(w.finished?l.nextTick(W):G.once("finish",W)),w.ended=!0,G.writable=!1}(this,B,N)},Object.defineProperty(Y.prototype,"destroyed",{get:function(){return this._writableState!==void 0&&this._writableState.destroyed},set:function(K){this._writableState&&(this._writableState.destroyed=K)}}),Y.prototype.destroy=m.destroy,Y.prototype._undestroy=m.undestroy,Y.prototype._destroy=function(K,V){this.end(),V(K)}}).call(this)}).call(this,g("_process"),typeof FI<"u"?FI:typeof self<"u"?self:typeof window<"u"?window:{},g("timers").setImmediate)},{"./_stream_duplex":508,"./internal/streams/destroy":514,"./internal/streams/stream":515,_process:467,"core-util-is":383,inherits:440,"process-nextick-args":466,"safe-buffer":520,timers:523,"util-deprecate":524}],513:[function(g,C,i){var e=g("safe-buffer").Buffer,A=g("util");C.exports=function(){function s(){(function(l,n){if(!(l instanceof n))throw new TypeError("Cannot call a class as a function")})(this,s),this.head=null,this.tail=null,this.length=0}return s.prototype.push=function(l){var n={data:l,next:null};this.length>0?this.tail.next=n:this.head=n,this.tail=n,++this.length},s.prototype.unshift=function(l){var n={data:l,next:this.head};this.length===0&&(this.tail=n),this.head=n,++this.length},s.prototype.shift=function(){if(this.length!==0){var l=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,l}},s.prototype.clear=function(){this.head=this.tail=null,this.length=0},s.prototype.join=function(l){if(this.length===0)return"";for(var n=this.head,a=""+n.data;n=n.next;)a+=l+n.data;return a},s.prototype.concat=function(l){if(this.length===0)return e.alloc(0);for(var n,a,d,o=e.allocUnsafe(l>>>0),c=this.head,r=0;c;)n=c.data,a=o,d=r,n.copy(a,d),r+=c.data.length,c=c.next;return o},s}(),A&&A.inspect&&A.inspect.custom&&(C.exports.prototype[A.inspect.custom]=function(){var s=A.inspect({length:this.length});return this.constructor.name+" "+s})},{"safe-buffer":520,util:188}],514:[function(g,C,i){var e=g("process-nextick-args");function A(s,l){s.emit("error",l)}C.exports={destroy:function(s,l){var n=this,a=this._readableState&&this._readableState.destroyed,d=this._writableState&&this._writableState.destroyed;return a||d?(l?l(s):s&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,e.nextTick(A,this,s)):e.nextTick(A,this,s)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(s||null,function(o){!l&&o?n._writableState?n._writableState.errorEmitted||(n._writableState.errorEmitted=!0,e.nextTick(A,n,o)):e.nextTick(A,n,o):l&&l(o)}),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}}},{"process-nextick-args":466}],515:[function(g,C,i){arguments[4][490][0].apply(i,arguments)},{dup:490,events:422}],516:[function(g,C,i){C.exports=g("./readable").PassThrough},{"./readable":517}],517:[function(g,C,i){(i=C.exports=g("./lib/_stream_readable.js")).Stream=i,i.Readable=i,i.Writable=g("./lib/_stream_writable.js"),i.Duplex=g("./lib/_stream_duplex.js"),i.Transform=g("./lib/_stream_transform.js"),i.PassThrough=g("./lib/_stream_passthrough.js")},{"./lib/_stream_duplex.js":508,"./lib/_stream_passthrough.js":509,"./lib/_stream_readable.js":510,"./lib/_stream_transform.js":511,"./lib/_stream_writable.js":512}],518:[function(g,C,i){C.exports=g("./readable").Transform},{"./readable":517}],519:[function(g,C,i){C.exports=g("./lib/_stream_writable.js")},{"./lib/_stream_writable.js":512}],520:[function(g,C,i){arguments[4][217][0].apply(i,arguments)},{buffer:220,dup:217}],521:[function(g,C,i){arguments[4][218][0].apply(i,arguments)},{dup:218,"safe-buffer":520}],522:[function(g,C,i){arguments[4][218][0].apply(i,arguments)},{dup:218,"safe-buffer":494}],523:[function(g,C,i){(function(e,A){(function(){var s=g("process/browser.js").nextTick,l=Function.prototype.apply,n=Array.prototype.slice,a={},d=0;function o(c,r){this._id=c,this._clearFn=r}i.setTimeout=function(){return new o(l.call(setTimeout,window,arguments),clearTimeout)},i.setInterval=function(){return new o(l.call(setInterval,window,arguments),clearInterval)},i.clearTimeout=i.clearInterval=function(c){c.close()},o.prototype.unref=o.prototype.ref=function(){},o.prototype.close=function(){this._clearFn.call(window,this._id)},i.enroll=function(c,r){clearTimeout(c._idleTimeoutId),c._idleTimeout=r},i.unenroll=function(c){clearTimeout(c._idleTimeoutId),c._idleTimeout=-1},i._unrefActive=i.active=function(c){clearTimeout(c._idleTimeoutId);var r=c._idleTimeout;r>=0&&(c._idleTimeoutId=setTimeout(function(){c._onTimeout&&c._onTimeout()},r))},i.setImmediate=typeof e=="function"?e:function(c){var r=d++,h=!(arguments.length<2)&&n.call(arguments,1);return a[r]=!0,s(function(){a[r]&&(h?c.apply(null,h):c.call(null),i.clearImmediate(r))}),r},i.clearImmediate=typeof A=="function"?A:function(c){delete a[c]}}).call(this)}).call(this,g("timers").setImmediate,g("timers").clearImmediate)},{"process/browser.js":467,timers:523}],524:[function(g,C,i){(function(e){(function(){function A(s){try{if(!e.localStorage)return!1}catch{return!1}var l=e.localStorage[s];return l!=null&&String(l).toLowerCase()==="true"}C.exports=function(s,l){if(A("noDeprecation"))return s;var n=!1;return function(){if(!n){if(A("throwDeprecation"))throw new Error(l);A("traceDeprecation")?console.trace(l):console.warn(l),n=!0}return s.apply(this,arguments)}}}).call(this)}).call(this,typeof FI<"u"?FI:typeof self<"u"?self:typeof window<"u"?window:{})},{}],525:[function(g,C,i){typeof Object.create=="function"?C.exports=function(e,A){e.super_=A,e.prototype=Object.create(A.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:C.exports=function(e,A){e.super_=A;var s=function(){};s.prototype=A.prototype,e.prototype=new s,e.prototype.constructor=e}},{}],526:[function(g,C,i){C.exports=function(e){return e&&typeof e=="object"&&typeof e.copy=="function"&&typeof e.fill=="function"&&typeof e.readUInt8=="function"}},{}],527:[function(g,C,i){(function(e,A){(function(){var s=/%[sdj%]/g;i.format=function(G){if(!p(G)){for(var w=[],W=0;W<arguments.length;W++)w.push(a(arguments[W]));return w.join(" ")}W=1;for(var y=arguments,f=y.length,D=String(G).replace(s,function(T){if(T==="%%")return"%";if(W>=f)return T;switch(T){case"%s":return String(y[W++]);case"%d":return Number(y[W++]);case"%j":try{return JSON.stringify(y[W++])}catch{return"[Circular]"}default:return T}}),F=y[W];W<f;F=y[++W])m(F)||!X(F)?D+=" "+F:D+=" "+a(F);return D},i.deprecate=function(G,w){if(Y(A.process))return function(){return i.deprecate(G,w).apply(this,arguments)};if(e.noDeprecation===!0)return G;var W=!1;return function(){if(!W){if(e.throwDeprecation)throw new Error(w);e.traceDeprecation?console.trace(w):console.error(w),W=!0}return G.apply(this,arguments)}};var l,n={};function a(G,w){var W={seen:[],stylize:o};return arguments.length>=3&&(W.depth=arguments[2]),arguments.length>=4&&(W.colors=arguments[3]),u(w)?W.showHidden=w:w&&i._extend(W,w),Y(W.showHidden)&&(W.showHidden=!1),Y(W.depth)&&(W.depth=2),Y(W.colors)&&(W.colors=!1),Y(W.customInspect)&&(W.customInspect=!0),W.colors&&(W.stylize=d),c(W,G,W.depth)}function d(G,w){var W=a.styles[w];return W?"\x1B["+a.colors[W][0]+"m"+G+"\x1B["+a.colors[W][1]+"m":G}function o(G,w){return G}function c(G,w,W){if(G.customInspect&&w&&z(w.inspect)&&w.inspect!==i.inspect&&(!w.constructor||w.constructor.prototype!==w)){var y=w.inspect(W,G);return p(y)||(y=c(G,y,W)),y}var f=function(J,k){if(Y(k))return J.stylize("undefined","undefined");if(p(k)){var j="'"+JSON.stringify(k).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return J.stylize(j,"string")}if(Z(k))return J.stylize(""+k,"number");if(u(k))return J.stylize(""+k,"boolean");if(m(k))return J.stylize("null","null")}(G,w);if(f)return f;var D=Object.keys(w),F=function(J){var k={};return J.forEach(function(j,q){k[j]=!0}),k}(D);if(G.showHidden&&(D=Object.getOwnPropertyNames(w)),S(w)&&(D.indexOf("message")>=0||D.indexOf("description")>=0))return r(w);if(D.length===0){if(z(w)){var T=w.name?": "+w.name:"";return G.stylize("[Function"+T+"]","special")}if(R(w))return G.stylize(RegExp.prototype.toString.call(w),"regexp");if(H(w))return G.stylize(Date.prototype.toString.call(w),"date");if(S(w))return r(w)}var Q,P="",L=!1,E=["{","}"];return b(w)&&(L=!0,E=["[","]"]),z(w)&&(P=" [Function"+(w.name?": "+w.name:"")+"]"),R(w)&&(P=" "+RegExp.prototype.toString.call(w)),H(w)&&(P=" "+Date.prototype.toUTCString.call(w)),S(w)&&(P=" "+r(w)),D.length!==0||L&&w.length!=0?W<0?R(w)?G.stylize(RegExp.prototype.toString.call(w),"regexp"):G.stylize("[Object]","special"):(G.seen.push(w),Q=L?function(J,k,j,q,tg){for(var Cg=[],x=0,sg=k.length;x<sg;++x)B(k,String(x))?Cg.push(h(J,k,j,q,String(x),!0)):Cg.push("");return tg.forEach(function(Ag){Ag.match(/^\d+$/)||Cg.push(h(J,k,j,q,Ag,!0))}),Cg}(G,w,W,F,D):D.map(function(J){return h(G,w,W,F,J,L)}),G.seen.pop(),function(J,k,j){return J.reduce(function(q,tg){return tg.indexOf(`
- `)>=0,q+tg.replace(/\u001b\[\d\d?m/g,"").length+1},0)>60?j[0]+(k===""?"":k+`
- `)+" "+J.join(`,
- `)+" "+j[1]:j[0]+k+" "+J.join(", ")+" "+j[1]}(Q,P,E)):E[0]+P+E[1]}function r(G){return"["+Error.prototype.toString.call(G)+"]"}function h(G,w,W,y,f,D){var F,T,Q;if((Q=Object.getOwnPropertyDescriptor(w,f)||{value:w[f]}).get?T=Q.set?G.stylize("[Getter/Setter]","special"):G.stylize("[Getter]","special"):Q.set&&(T=G.stylize("[Setter]","special")),B(y,f)||(F="["+f+"]"),T||(G.seen.indexOf(Q.value)<0?(T=m(W)?c(G,Q.value,null):c(G,Q.value,W-1)).indexOf(`
- `)>-1&&(T=D?T.split(`
- `).map(function(P){return" "+P}).join(`
- `).substr(2):`
- `+T.split(`
- `).map(function(P){return" "+P}).join(`
- `)):T=G.stylize("[Circular]","special")),Y(F)){if(D&&f.match(/^\d+$/))return T;(F=JSON.stringify(""+f)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(F=F.substr(1,F.length-2),F=G.stylize(F,"name")):(F=F.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),F=G.stylize(F,"string"))}return F+": "+T}function b(G){return Array.isArray(G)}function u(G){return typeof G=="boolean"}function m(G){return G===null}function Z(G){return typeof G=="number"}function p(G){return typeof G=="string"}function Y(G){return G===void 0}function R(G){return X(G)&&v(G)==="[object RegExp]"}function X(G){return typeof G=="object"&&G!==null}function H(G){return X(G)&&v(G)==="[object Date]"}function S(G){return X(G)&&(v(G)==="[object Error]"||G instanceof Error)}function z(G){return typeof G=="function"}function v(G){return Object.prototype.toString.call(G)}function K(G){return G<10?"0"+G.toString(10):G.toString(10)}i.debuglog=function(G){if(Y(l)&&(l=e.env.NODE_DEBUG||""),G=G.toUpperCase(),!n[G])if(new RegExp("\\b"+G+"\\b","i").test(l)){var w=e.pid;n[G]=function(){var W=i.format.apply(i,arguments);console.error("%s %d: %s",G,w,W)}}else n[G]=function(){};return n[G]},i.inspect=a,a.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},a.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},i.isArray=b,i.isBoolean=u,i.isNull=m,i.isNullOrUndefined=function(G){return G==null},i.isNumber=Z,i.isString=p,i.isSymbol=function(G){return typeof G=="symbol"},i.isUndefined=Y,i.isRegExp=R,i.isObject=X,i.isDate=H,i.isError=S,i.isFunction=z,i.isPrimitive=function(G){return G===null||typeof G=="boolean"||typeof G=="number"||typeof G=="string"||typeof G=="symbol"||G===void 0},i.isBuffer=g("./support/isBuffer");var V=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function N(){var G=new Date,w=[K(G.getHours()),K(G.getMinutes()),K(G.getSeconds())].join(":");return[G.getDate(),V[G.getMonth()],w].join(" ")}function B(G,w){return Object.prototype.hasOwnProperty.call(G,w)}i.log=function(){console.log("%s - %s",N(),i.format.apply(i,arguments))},i.inherits=g("inherits"),i._extend=function(G,w){if(!w||!X(w))return G;for(var W=Object.keys(w),y=W.length;y--;)G[W[y]]=w[W[y]];return G}}).call(this)}).call(this,g("_process"),typeof FI<"u"?FI:typeof self<"u"?self:typeof window<"u"?window:{})},{"./support/isBuffer":526,_process:467,inherits:525}],528:[function(g,C,i){Object.defineProperty(i,"__esModule",{value:!0}),Object.defineProperty(i,"v1",{enumerable:!0,get:function(){return e.default}}),Object.defineProperty(i,"v3",{enumerable:!0,get:function(){return A.default}}),Object.defineProperty(i,"v4",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(i,"v5",{enumerable:!0,get:function(){return l.default}}),Object.defineProperty(i,"NIL",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(i,"version",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(i,"validate",{enumerable:!0,get:function(){return d.default}}),Object.defineProperty(i,"stringify",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(i,"parse",{enumerable:!0,get:function(){return c.default}});var e=r(g("./v1.js")),A=r(g("./v3.js")),s=r(g("./v4.js")),l=r(g("./v5.js")),n=r(g("./nil.js")),a=r(g("./version.js")),d=r(g("./validate.js")),o=r(g("./stringify.js")),c=r(g("./parse.js"));function r(h){return h&&h.__esModule?h:{default:h}}},{"./nil.js":530,"./parse.js":531,"./stringify.js":535,"./v1.js":536,"./v3.js":537,"./v4.js":539,"./v5.js":540,"./validate.js":541,"./version.js":542}],529:[function(g,C,i){function e(c){return 14+(c+64>>>9<<4)+1}function A(c,r){const h=(65535&c)+(65535&r);return(c>>16)+(r>>16)+(h>>16)<<16|65535&h}function s(c,r,h,b,u,m){return A((Z=A(A(r,c),A(b,m)))<<(p=u)|Z>>>32-p,h);var Z,p}function l(c,r,h,b,u,m,Z){return s(r&h|~r&b,c,r,u,m,Z)}function n(c,r,h,b,u,m,Z){return s(r&b|h&~b,c,r,u,m,Z)}function a(c,r,h,b,u,m,Z){return s(r^h^b,c,r,u,m,Z)}function d(c,r,h,b,u,m,Z){return s(h^(r|~b),c,r,u,m,Z)}Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var o=function(c){if(typeof c=="string"){const r=unescape(encodeURIComponent(c));c=new Uint8Array(r.length);for(let h=0;h<r.length;++h)c[h]=r.charCodeAt(h)}return function(r){const h=[],b=32*r.length;for(let u=0;u<b;u+=8){const m=r[u>>5]>>>u%32&255,Z=parseInt("0123456789abcdef".charAt(m>>>4&15)+"0123456789abcdef".charAt(15&m),16);h.push(Z)}return h}(function(r,h){r[h>>5]|=128<<h%32,r[e(h)-1]=h;let b=1732584193,u=-271733879,m=-1732584194,Z=271733878;for(let p=0;p<r.length;p+=16){const Y=b,R=u,X=m,H=Z;b=l(b,u,m,Z,r[p],7,-680876936),Z=l(Z,b,u,m,r[p+1],12,-389564586),m=l(m,Z,b,u,r[p+2],17,606105819),u=l(u,m,Z,b,r[p+3],22,-1044525330),b=l(b,u,m,Z,r[p+4],7,-176418897),Z=l(Z,b,u,m,r[p+5],12,1200080426),m=l(m,Z,b,u,r[p+6],17,-1473231341),u=l(u,m,Z,b,r[p+7],22,-45705983),b=l(b,u,m,Z,r[p+8],7,1770035416),Z=l(Z,b,u,m,r[p+9],12,-1958414417),m=l(m,Z,b,u,r[p+10],17,-42063),u=l(u,m,Z,b,r[p+11],22,-1990404162),b=l(b,u,m,Z,r[p+12],7,1804603682),Z=l(Z,b,u,m,r[p+13],12,-40341101),m=l(m,Z,b,u,r[p+14],17,-1502002290),u=l(u,m,Z,b,r[p+15],22,1236535329),b=n(b,u,m,Z,r[p+1],5,-165796510),Z=n(Z,b,u,m,r[p+6],9,-1069501632),m=n(m,Z,b,u,r[p+11],14,643717713),u=n(u,m,Z,b,r[p],20,-373897302),b=n(b,u,m,Z,r[p+5],5,-701558691),Z=n(Z,b,u,m,r[p+10],9,38016083),m=n(m,Z,b,u,r[p+15],14,-660478335),u=n(u,m,Z,b,r[p+4],20,-405537848),b=n(b,u,m,Z,r[p+9],5,568446438),Z=n(Z,b,u,m,r[p+14],9,-1019803690),m=n(m,Z,b,u,r[p+3],14,-187363961),u=n(u,m,Z,b,r[p+8],20,1163531501),b=n(b,u,m,Z,r[p+13],5,-1444681467),Z=n(Z,b,u,m,r[p+2],9,-51403784),m=n(m,Z,b,u,r[p+7],14,1735328473),u=n(u,m,Z,b,r[p+12],20,-1926607734),b=a(b,u,m,Z,r[p+5],4,-378558),Z=a(Z,b,u,m,r[p+8],11,-2022574463),m=a(m,Z,b,u,r[p+11],16,1839030562),u=a(u,m,Z,b,r[p+14],23,-35309556),b=a(b,u,m,Z,r[p+1],4,-1530992060),Z=a(Z,b,u,m,r[p+4],11,1272893353),m=a(m,Z,b,u,r[p+7],16,-155497632),u=a(u,m,Z,b,r[p+10],23,-1094730640),b=a(b,u,m,Z,r[p+13],4,681279174),Z=a(Z,b,u,m,r[p],11,-358537222),m=a(m,Z,b,u,r[p+3],16,-722521979),u=a(u,m,Z,b,r[p+6],23,76029189),b=a(b,u,m,Z,r[p+9],4,-640364487),Z=a(Z,b,u,m,r[p+12],11,-421815835),m=a(m,Z,b,u,r[p+15],16,530742520),u=a(u,m,Z,b,r[p+2],23,-995338651),b=d(b,u,m,Z,r[p],6,-198630844),Z=d(Z,b,u,m,r[p+7],10,1126891415),m=d(m,Z,b,u,r[p+14],15,-1416354905),u=d(u,m,Z,b,r[p+5],21,-57434055),b=d(b,u,m,Z,r[p+12],6,1700485571),Z=d(Z,b,u,m,r[p+3],10,-1894986606),m=d(m,Z,b,u,r[p+10],15,-1051523),u=d(u,m,Z,b,r[p+1],21,-2054922799),b=d(b,u,m,Z,r[p+8],6,1873313359),Z=d(Z,b,u,m,r[p+15],10,-30611744),m=d(m,Z,b,u,r[p+6],15,-1560198380),u=d(u,m,Z,b,r[p+13],21,1309151649),b=d(b,u,m,Z,r[p+4],6,-145523070),Z=d(Z,b,u,m,r[p+11],10,-1120210379),m=d(m,Z,b,u,r[p+2],15,718787259),u=d(u,m,Z,b,r[p+9],21,-343485551),b=A(b,Y),u=A(u,R),m=A(m,X),Z=A(Z,H)}return[b,u,m,Z]}(function(r){if(r.length===0)return[];const h=8*r.length,b=new Uint32Array(e(h));for(let u=0;u<h;u+=8)b[u>>5]|=(255&r[u/8])<<u%32;return b}(c),8*c.length))};i.default=o},{}],530:[function(g,C,i){Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0,i.default="00000000-0000-0000-0000-000000000000"},{}],531:[function(g,C,i){Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var e,A=(e=g("./validate.js"))&&e.__esModule?e:{default:e},s=function(l){if(!(0,A.default)(l))throw TypeError("Invalid UUID");let n;const a=new Uint8Array(16);return a[0]=(n=parseInt(l.slice(0,8),16))>>>24,a[1]=n>>>16&255,a[2]=n>>>8&255,a[3]=255&n,a[4]=(n=parseInt(l.slice(9,13),16))>>>8,a[5]=255&n,a[6]=(n=parseInt(l.slice(14,18),16))>>>8,a[7]=255&n,a[8]=(n=parseInt(l.slice(19,23),16))>>>8,a[9]=255&n,a[10]=(n=parseInt(l.slice(24,36),16))/1099511627776&255,a[11]=n/4294967296&255,a[12]=n>>>24&255,a[13]=n>>>16&255,a[14]=n>>>8&255,a[15]=255&n,a};i.default=s},{"./validate.js":541}],532:[function(g,C,i){Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0,i.default=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i},{}],533:[function(g,C,i){let e;Object.defineProperty(i,"__esModule",{value:!0}),i.default=function(){if(!e&&(e=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto),!e))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return e(A)};const A=new Uint8Array(16)},{}],534:[function(g,C,i){function e(l,n,a,d){switch(l){case 0:return n&a^~n&d;case 1:return n^a^d;case 2:return n&a^n&d^a&d;case 3:return n^a^d}}function A(l,n){return l<<n|l>>>32-n}Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var s=function(l){const n=[1518500249,1859775393,2400959708,3395469782],a=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof l=="string"){const r=unescape(encodeURIComponent(l));l=[];for(let h=0;h<r.length;++h)l.push(r.charCodeAt(h))}else Array.isArray(l)||(l=Array.prototype.slice.call(l));l.push(128);const d=l.length/4+2,o=Math.ceil(d/16),c=new Array(o);for(let r=0;r<o;++r){const h=new Uint32Array(16);for(let b=0;b<16;++b)h[b]=l[64*r+4*b]<<24|l[64*r+4*b+1]<<16|l[64*r+4*b+2]<<8|l[64*r+4*b+3];c[r]=h}c[o-1][14]=8*(l.length-1)/Math.pow(2,32),c[o-1][14]=Math.floor(c[o-1][14]),c[o-1][15]=8*(l.length-1)&4294967295;for(let r=0;r<o;++r){const h=new Uint32Array(80);for(let Y=0;Y<16;++Y)h[Y]=c[r][Y];for(let Y=16;Y<80;++Y)h[Y]=A(h[Y-3]^h[Y-8]^h[Y-14]^h[Y-16],1);let b=a[0],u=a[1],m=a[2],Z=a[3],p=a[4];for(let Y=0;Y<80;++Y){const R=Math.floor(Y/20),X=A(b,5)+e(R,u,m,Z)+p+n[R]+h[Y]>>>0;p=Z,Z=m,m=A(u,30)>>>0,u=b,b=X}a[0]=a[0]+b>>>0,a[1]=a[1]+u>>>0,a[2]=a[2]+m>>>0,a[3]=a[3]+Z>>>0,a[4]=a[4]+p>>>0}return[a[0]>>24&255,a[0]>>16&255,a[0]>>8&255,255&a[0],a[1]>>24&255,a[1]>>16&255,a[1]>>8&255,255&a[1],a[2]>>24&255,a[2]>>16&255,a[2]>>8&255,255&a[2],a[3]>>24&255,a[3]>>16&255,a[3]>>8&255,255&a[3],a[4]>>24&255,a[4]>>16&255,a[4]>>8&255,255&a[4]]};i.default=s},{}],535:[function(g,C,i){Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var e,A=(e=g("./validate.js"))&&e.__esModule?e:{default:e};const s=[];for(let n=0;n<256;++n)s.push((n+256).toString(16).substr(1));var l=function(n){let a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;const d=(s[n[a+0]]+s[n[a+1]]+s[n[a+2]]+s[n[a+3]]+"-"+s[n[a+4]]+s[n[a+5]]+"-"+s[n[a+6]]+s[n[a+7]]+"-"+s[n[a+8]]+s[n[a+9]]+"-"+s[n[a+10]]+s[n[a+11]]+s[n[a+12]]+s[n[a+13]]+s[n[a+14]]+s[n[a+15]]).toLowerCase();if(!(0,A.default)(d))throw TypeError("Stringified UUID is invalid");return d};i.default=l},{"./validate.js":541}],536:[function(g,C,i){Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var e=s(g("./rng.js")),A=s(g("./stringify.js"));function s(c){return c&&c.__esModule?c:{default:c}}let l,n,a=0,d=0;var o=function(c,r,h){let b=r&&h||0;const u=r||new Array(16);let m=(c=c||{}).node||l,Z=c.clockseq!==void 0?c.clockseq:n;if(m==null||Z==null){const S=c.random||(c.rng||e.default)();m==null&&(m=l=[1|S[0],S[1],S[2],S[3],S[4],S[5]]),Z==null&&(Z=n=16383&(S[6]<<8|S[7]))}let p=c.msecs!==void 0?c.msecs:Date.now(),Y=c.nsecs!==void 0?c.nsecs:d+1;const R=p-a+(Y-d)/1e4;if(R<0&&c.clockseq===void 0&&(Z=Z+1&16383),(R<0||p>a)&&c.nsecs===void 0&&(Y=0),Y>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");a=p,d=Y,n=Z,p+=122192928e5;const X=(1e4*(268435455&p)+Y)%4294967296;u[b++]=X>>>24&255,u[b++]=X>>>16&255,u[b++]=X>>>8&255,u[b++]=255&X;const H=p/4294967296*1e4&268435455;u[b++]=H>>>8&255,u[b++]=255&H,u[b++]=H>>>24&15|16,u[b++]=H>>>16&255,u[b++]=Z>>>8|128,u[b++]=255&Z;for(let S=0;S<6;++S)u[b+S]=m[S];return r||(0,A.default)(u)};i.default=o},{"./rng.js":533,"./stringify.js":535}],537:[function(g,C,i){Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var e=s(g("./v35.js")),A=s(g("./md5.js"));function s(n){return n&&n.__esModule?n:{default:n}}var l=(0,e.default)("v3",48,A.default);i.default=l},{"./md5.js":529,"./v35.js":538}],538:[function(g,C,i){Object.defineProperty(i,"__esModule",{value:!0}),i.default=function(a,d,o){function c(r,h,b,u){if(typeof r=="string"&&(r=function(Z){Z=unescape(encodeURIComponent(Z));const p=[];for(let Y=0;Y<Z.length;++Y)p.push(Z.charCodeAt(Y));return p}(r)),typeof h=="string"&&(h=(0,A.default)(h)),h.length!==16)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let m=new Uint8Array(16+r.length);if(m.set(h),m.set(r,h.length),m=o(m),m[6]=15&m[6]|d,m[8]=63&m[8]|128,b){u=u||0;for(let Z=0;Z<16;++Z)b[u+Z]=m[Z];return b}return(0,e.default)(m)}try{c.name=a}catch{}return c.DNS=l,c.URL=n,c},i.URL=i.DNS=void 0;var e=s(g("./stringify.js")),A=s(g("./parse.js"));function s(a){return a&&a.__esModule?a:{default:a}}const l="6ba7b810-9dad-11d1-80b4-00c04fd430c8";i.DNS=l;const n="6ba7b811-9dad-11d1-80b4-00c04fd430c8";i.URL=n},{"./parse.js":531,"./stringify.js":535}],539:[function(g,C,i){Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var e=s(g("./rng.js")),A=s(g("./stringify.js"));function s(n){return n&&n.__esModule?n:{default:n}}var l=function(n,a,d){const o=(n=n||{}).random||(n.rng||e.default)();if(o[6]=15&o[6]|64,o[8]=63&o[8]|128,a){d=d||0;for(let c=0;c<16;++c)a[d+c]=o[c];return a}return(0,A.default)(o)};i.default=l},{"./rng.js":533,"./stringify.js":535}],540:[function(g,C,i){Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var e=s(g("./v35.js")),A=s(g("./sha1.js"));function s(n){return n&&n.__esModule?n:{default:n}}var l=(0,e.default)("v5",80,A.default);i.default=l},{"./sha1.js":534,"./v35.js":538}],541:[function(g,C,i){Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var e,A=(e=g("./regex.js"))&&e.__esModule?e:{default:e},s=function(l){return typeof l=="string"&&A.default.test(l)};i.default=s},{"./regex.js":532}],542:[function(g,C,i){Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var e,A=(e=g("./validate.js"))&&e.__esModule?e:{default:e},s=function(l){if(!(0,A.default)(l))throw TypeError("Invalid UUID");return parseInt(l.substr(14,1),16)};i.default=s},{"./validate.js":541}],543:[function(g,C,i){/**
- * Character classes and associated utilities for the 5th edition of XML 1.0.
- *
- * @author Louis-Dominique Dubeau
- * @license MIT
- * @copyright Louis-Dominique Dubeau
- */Object.defineProperty(i,"__esModule",{value:!0}),i.CHAR=`
- \r --�𐀀-`,i.S=` \r
- `,i.NAME_START_CHAR=":A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-⁰-Ⰰ-、-豈-﷏ﷰ-�𐀀-",i.NAME_CHAR="-"+i.NAME_START_CHAR+".0-9·̀-ͯ‿-⁀",i.CHAR_RE=new RegExp("^["+i.CHAR+"]$","u"),i.S_RE=new RegExp("^["+i.S+"]+$","u"),i.NAME_START_CHAR_RE=new RegExp("^["+i.NAME_START_CHAR+"]$","u"),i.NAME_CHAR_RE=new RegExp("^["+i.NAME_CHAR+"]$","u"),i.NAME_RE=new RegExp("^["+i.NAME_START_CHAR+"]["+i.NAME_CHAR+"]*$","u"),i.NMTOKEN_RE=new RegExp("^["+i.NAME_CHAR+"]+$","u");function e(A){return A>=65&&A<=90||A>=97&&A<=122||A===58||A===95||A===8204||A===8205||A>=192&&A<=214||A>=216&&A<=246||A>=248&&A<=767||A>=880&&A<=893||A>=895&&A<=8191||A>=8304&&A<=8591||A>=11264&&A<=12271||A>=12289&&A<=55295||A>=63744&&A<=64975||A>=65008&&A<=65533||A>=65536&&A<=983039}i.S_LIST=[32,10,13,9],i.isChar=function(A){return A>=32&&A<=55295||A===10||A===13||A===9||A>=57344&&A<=65533||A>=65536&&A<=1114111},i.isS=function(A){return A===32||A===10||A===13||A===9},i.isNameStartChar=e,i.isNameChar=function(A){return e(A)||A>=48&&A<=57||A===45||A===46||A===183||A>=768&&A<=879||A>=8255&&A<=8256}},{}],544:[function(g,C,i){/**
- * Character classes and associated utilities for the 2nd edition of XML 1.1.
- *
- * @author Louis-Dominique Dubeau
- * @license MIT
- * @copyright Louis-Dominique Dubeau
- */Object.defineProperty(i,"__esModule",{value:!0}),i.CHAR="--�𐀀-",i.RESTRICTED_CHAR="-\b\v\f---",i.S=` \r
- `,i.NAME_START_CHAR=":A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-⁰-Ⰰ-、-豈-﷏ﷰ-�𐀀-",i.NAME_CHAR="-"+i.NAME_START_CHAR+".0-9·̀-ͯ‿-⁀",i.CHAR_RE=new RegExp("^["+i.CHAR+"]$","u"),i.RESTRICTED_CHAR_RE=new RegExp("^["+i.RESTRICTED_CHAR+"]$","u"),i.S_RE=new RegExp("^["+i.S+"]+$","u"),i.NAME_START_CHAR_RE=new RegExp("^["+i.NAME_START_CHAR+"]$","u"),i.NAME_CHAR_RE=new RegExp("^["+i.NAME_CHAR+"]$","u"),i.NAME_RE=new RegExp("^["+i.NAME_START_CHAR+"]["+i.NAME_CHAR+"]*$","u"),i.NMTOKEN_RE=new RegExp("^["+i.NAME_CHAR+"]+$","u");function e(A){return A>=65&&A<=90||A>=97&&A<=122||A===58||A===95||A===8204||A===8205||A>=192&&A<=214||A>=216&&A<=246||A>=248&&A<=767||A>=880&&A<=893||A>=895&&A<=8191||A>=8304&&A<=8591||A>=11264&&A<=12271||A>=12289&&A<=55295||A>=63744&&A<=64975||A>=65008&&A<=65533||A>=65536&&A<=983039}i.S_LIST=[32,10,13,9],i.isChar=function(A){return A>=1&&A<=55295||A>=57344&&A<=65533||A>=65536&&A<=1114111},i.isRestrictedChar=function(A){return A>=1&&A<=8||A===11||A===12||A>=14&&A<=31||A>=127&&A<=132||A>=134&&A<=159},i.isCharAndNotRestricted=function(A){return A===9||A===10||A===13||A>31&&A<127||A===133||A>159&&A<=55295||A>=57344&&A<=65533||A>=65536&&A<=1114111},i.isS=function(A){return A===32||A===10||A===13||A===9},i.isNameStartChar=e,i.isNameChar=function(A){return e(A)||A>=48&&A<=57||A===45||A===46||A===183||A>=768&&A<=879||A>=8255&&A<=8256}},{}],545:[function(g,C,i){/**
- * Character class utilities for XML NS 1.0 edition 3.
- *
- * @author Louis-Dominique Dubeau
- * @license MIT
- * @copyright Louis-Dominique Dubeau
- */function e(A){return A>=65&&A<=90||A===95||A>=97&&A<=122||A>=192&&A<=214||A>=216&&A<=246||A>=248&&A<=767||A>=880&&A<=893||A>=895&&A<=8191||A>=8204&&A<=8205||A>=8304&&A<=8591||A>=11264&&A<=12271||A>=12289&&A<=55295||A>=63744&&A<=64975||A>=65008&&A<=65533||A>=65536&&A<=983039}Object.defineProperty(i,"__esModule",{value:!0}),i.NC_NAME_START_CHAR="A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ--⁰-Ⰰ-、-豈-﷏ﷰ-�𐀀-",i.NC_NAME_CHAR="-"+i.NC_NAME_START_CHAR+".0-9·̀-ͯ‿-⁀",i.NC_NAME_START_CHAR_RE=new RegExp("^["+i.NC_NAME_START_CHAR+"]$","u"),i.NC_NAME_CHAR_RE=new RegExp("^["+i.NC_NAME_CHAR+"]$","u"),i.NC_NAME_RE=new RegExp("^["+i.NC_NAME_START_CHAR+"]["+i.NC_NAME_CHAR+"]*$","u"),i.isNCNameStartChar=e,i.isNCNameChar=function(A){return e(A)||A===45||A===46||A>=48&&A<=57||A===183||A>=768&&A<=879||A>=8255&&A<=8256}},{}]},{},[15])(15)})}(BX)),BX.exports}var Rbg=Mbg();const fbg=qq(Rbg);class ed{constructor(I,g=""){typeof I=="string"?(this.el=document.createElement(I),this.el.className=g):this.el=I,this.data={}}data(I,g){return g!==void 0?(this.data[I]=g,this):this.data[I]}on(I,g){const[C,...i]=I.split(".");let e=C;return e==="mousewheel"&&/Firefox/i.test(window.navigator.userAgent)&&(e="DOMMouseScroll"),this.el.addEventListener(e,A=>{g(A);for(let s=0;s<i.length;s+=1){const l=i[s];if(l==="left"&&A.button!==0||l==="right"&&A.button!==2)return;l==="stop"&&A.stopPropagation()}}),this}offset(I){if(I!==void 0)return Object.keys(I).forEach(A=>{this.css(A,`${I[A]}px`)}),this;const{offsetTop:g,offsetLeft:C,offsetHeight:i,offsetWidth:e}=this.el;return{top:g,left:C,height:i,width:e}}scroll(I){const{el:g}=this;return I!==void 0&&(I.left!==void 0&&(g.scrollLeft=I.left),I.top!==void 0&&(g.scrollTop=I.top)),{left:g.scrollLeft,top:g.scrollTop}}box(){return this.el.getBoundingClientRect()}parent(){return new ed(this.el.parentNode)}children(...I){return arguments.length===0?this.el.childNodes:(I.forEach(g=>this.child(g)),this)}removeChild(I){this.el.removeChild(I)}child(I){let g=I;return typeof I=="string"?g=document.createTextNode(I):I instanceof ed&&(g=I.el),this.el.appendChild(g),this}contains(I){return this.el.contains(I)}className(I){return I!==void 0?(this.el.className=I,this):this.el.className}addClass(I){return this.el.classList.add(I),this}hasClass(I){return this.el.classList.contains(I)}removeClass(I){return this.el.classList.remove(I),this}toggle(I="active"){return this.toggleClass(I)}toggleClass(I){return this.el.classList.toggle(I)}active(I=!0,g="active"){return I?this.addClass(g):this.removeClass(g),this}checked(I=!0){return this.active(I,"checked"),this}disabled(I=!0){return I?this.addClass("disabled"):this.removeClass("disabled"),this}attr(I,g){if(g!==void 0)this.el.setAttribute(I,g);else{if(typeof I=="string")return this.el.getAttribute(I);Object.keys(I).forEach(C=>{this.el.setAttribute(C,I[C])})}return this}removeAttr(I){return this.el.removeAttribute(I),this}html(I){return I!==void 0?(this.el.innerHTML=I,this):this.el.innerHTML}val(I){return I!==void 0?(this.el.value=I,this):this.el.value}focus(){this.el.focus()}cssRemoveKeys(...I){return I.forEach(g=>this.el.style.removeProperty(g)),this}css(I,g){return g===void 0&&typeof I!="string"?(Object.keys(I).forEach(C=>{this.el.style[C]=I[C]}),this):g!==void 0?(this.el.style[I]=g,this):this.el.style[I]}computedStyle(){return window.getComputedStyle(this.el,null)}show(){return this.css("display","block"),this}hide(){return this.css("display","none"),this}}const Yg=(t,I="")=>new ed(t,I),_n=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"];function Jtg(t){let I="",g=t;for(;g>=_n.length;)g/=_n.length,g-=1,I+=_n[parseInt(g,10)%_n.length];const C=t%_n.length;return I+=_n[C],I}function Hbg(t){let I=0;for(let g=0;g<t.length-1;g+=1){const C=t.charCodeAt(g)-65,i=t.length-1-g;I+=_n.length**i+_n.length*C}return I+=t.charCodeAt(t.length-1)-65,I}function ka(t){let I="",g="";for(let C=0;C<t.length;C+=1)t.charAt(C)>="0"&&t.charAt(C)<="9"?g+=t.charAt(C):I+=t.charAt(C);return[Hbg(I),parseInt(g,10)-1]}function zl(t,I){return`${Jtg(t)}${I+1}`}function fu(t,I,g,C=()=>!0){if(I===0&&g===0)return t;const[i,e]=ka(t);return C(i,e)?zl(i+I,e+g):t}class it{constructor(I,g,C,i,e=0,A=0){this.sri=I,this.sci=g,this.eri=C,this.eci=i,this.w=e,this.h=A}set(I,g,C,i){this.sri=I,this.sci=g,this.eri=C,this.eci=i}multiple(){return this.eri-this.sri>0||this.eci-this.sci>0}includes(...I){let[g,C]=[0,0];I.length===1?[C,g]=ka(I[0]):I.length===2&&([g,C]=I);const{sri:i,sci:e,eri:A,eci:s}=this;return i<=g&&g<=A&&e<=C&&C<=s}each(I,g=()=>!0){const{sri:C,sci:i,eri:e,eci:A}=this;for(let s=C;s<=e;s+=1)if(g(s))for(let l=i;l<=A;l+=1)I(s,l)}contains(I){return this.sri<=I.sri&&this.sci<=I.sci&&this.eri>=I.eri&&this.eci>=I.eci}within(I){return this.sri>=I.sri&&this.sci>=I.sci&&this.eri<=I.eri&&this.eci<=I.eci}disjoint(I){return this.sri>I.eri||this.sci>I.eci||I.sri>this.eri||I.sci>this.eci}intersects(I){return this.sri<=I.eri&&this.sci<=I.eci&&I.sri<=this.eri&&I.sci<=this.eci}union(I){const{sri:g,sci:C,eri:i,eci:e}=this;return new it(I.sri<g?I.sri:g,I.sci<C?I.sci:C,I.eri>i?I.eri:i,I.eci>e?I.eci:e)}difference(I){const g=[],C=(o,c,r,h)=>{g.push(new it(o,c,r,h))},{sri:i,sci:e,eri:A,eci:s}=this,l=I.sri-i,n=I.sci-e,a=A-I.eri,d=s-I.eci;return l>0?(C(i,e,I.sri-1,s),a>0?(C(I.eri+1,e,A,s),n>0&&C(I.sri,e,I.eri,I.sci-1),d>0&&C(I.sri,I.eci+1,I.eri,s)):(n>0&&C(I.sri,e,A,I.sci-1),d>0&&C(I.sri,I.eci+1,A,s))):a>0&&(C(I.eri+1,e,A,s),n>0&&C(i,e,I.eri,I.sci-1),d>0&&C(i,I.eci+1,I.eri,s)),n>0?(C(i,e,A,I.sci-1),d>0?(C(i,I.eri+1,A,s),l>0&&C(i,I.sci,I.sri-1,I.eci),a>0&&C(I.sri+1,I.sci,A,I.eci)):(l>0&&C(i,I.sci,I.sri-1,s),a>0&&C(I.sri+1,I.sci,A,s))):d>0&&(C(A,I.eci+1,A,s),l>0&&C(i,e,I.sri-1,I.eci),a>0&&C(I.eri+1,e,A,I.eci)),g}size(){return[this.eri-this.sri+1,this.eci-this.sci+1]}toString(){const{sri:I,sci:g,eri:C,eci:i}=this;let e=zl(g,I);return this.multiple()&&(e=`${e}:${zl(i,C)}`),e}clone(){const{sri:I,sci:g,eri:C,eci:i,w:e,h:A}=this;return new it(I,g,C,i,e,A)}equals(I){return this.eri===I.eri&&this.eci===I.eci&&this.sri===I.sri&&this.sci===I.sci}static valueOf(I){const g=I.split(":"),[C,i]=ka(g[0]);let[e,A]=[i,C];return g.length>1&&([A,e]=ka(g[1])),new it(i,C,e,A)}}let Xbg=class{constructor(){this.range=new it(0,0,0,0),this.ri=0,this.ci=0}multiple(){return this.range.multiple()}setIndexes(I,g){this.ri=I,this.ci=g}size(){return this.range.size()}};class Sbg{constructor(){this.x=0,this.y=0,this.ri=0,this.ci=0}}class Dbg{constructor(){this.undoItems=[],this.redoItems=[]}add(I){this.undoItems.push(JSON.stringify(I)),this.redoItems=[]}canUndo(){return this.undoItems.length>0}canRedo(){return this.redoItems.length>0}undo(I,g){const{undoItems:C,redoItems:i}=this;this.canUndo()&&(i.push(JSON.stringify(I)),g(JSON.parse(C.pop())))}redo(I,g){const{undoItems:C,redoItems:i}=this;this.canRedo()&&(C.push(JSON.stringify(I)),g(JSON.parse(i.pop())))}}class Kbg{constructor(){this.range=null,this.state="clear"}copy(I){return this.range=I,this.state="copy",this}cut(I){return this.range=I,this.state="cut",this}isCopy(){return this.state==="copy"}isCut(){return this.state==="cut"}isClear(){return this.state==="clear"}clear(){this.range=null,this.state="clear"}}class hq{constructor(I,g,C){this.ci=I,this.operator=g,this.value=C}set(I,g){this.operator=I,this.value=g}includes(I){const{operator:g,value:C}=this;return g==="all"?!0:g==="in"?C.includes(I):!1}vlength(){const{operator:I,value:g}=this;return I==="in"?g.length:0}getData(){const{ci:I,operator:g,value:C}=this;return{ci:I,operator:g,value:C}}}class bq{constructor(I,g){this.ci=I,this.order=g}asc(){return this.order==="asc"}desc(){return this.order==="desc"}}class Fbg{constructor(){this.ref=null,this.filters=[],this.sort=null}setData({ref:I,filters:g,sort:C}){I!=null&&(this.ref=I,this.filters=g.map(i=>new hq(i.ci,i.operator,i.value)),C&&(this.sort=new bq(C.ci,C.order)))}getData(){if(this.active()){const{ref:I,filters:g,sort:C}=this;return{ref:I,filters:g.map(i=>i.getData()),sort:C}}return{}}addFilter(I,g,C){const i=this.getFilter(I);i==null?this.filters.push(new hq(I,g,C)):i.set(g,C)}setSort(I,g){this.sort=g?new bq(I,g):null}includes(I,g){return this.active()?this.hrange().includes(I,g):!1}getSort(I){const{sort:g}=this;return g&&g.ci===I?g:null}getFilter(I){const{filters:g}=this;for(let C=0;C<g.length;C+=1)if(g[C].ci===I)return g[C];return null}filteredRows(I){const g=new Set,C=new Set;if(this.active()){const{sri:i,eri:e}=this.range(),{filters:A}=this;for(let s=i+1;s<=e;s+=1)for(let l=0;l<A.length;l+=1){const n=A[l],a=I(s,n.ci),d=a?a.text:"";if(n.includes(d))C.add(s);else{g.add(s);break}}}return{rset:g,fset:C}}items(I,g){const C={};if(this.active()){const{sri:i,eri:e}=this.range();for(let A=i+1;A<=e;A+=1){const s=g(A,I);if(s!==null&&!/^\s*$/.test(s.text)){const l=s.text,n=(C[l]||0)+1;C[l]=n}else C[""]=(C[""]||0)+1}}return C}range(){return it.valueOf(this.ref)}hrange(){const I=this.range();return I.eri=I.sri,I}clear(){this.ref=null,this.filters=[],this.sort=null}active(){return this.ref!==null}}class R9{constructor(I=[]){this._=I}forEach(I){this._.forEach(I)}deleteWithin(I){this._=this._.filter(g=>!g.within(I))}getFirstIncludes(I,g){for(let C=0;C<this._.length;C+=1){const i=this._[C];if(i.includes(I,g))return i}return null}filterIntersects(I){return new R9(this._.filter(g=>g.intersects(I)))}intersects(I){for(let g=0;g<this._.length;g+=1)if(this._[g].intersects(I))return!0;return!1}union(I){let g=I;return this._.forEach(C=>{C.intersects(g)&&(g=C.union(g))}),g}add(I){this.deleteWithin(I),this._.push(I)}shift(I,g,C,i){this._.forEach(e=>{const{sri:A,sci:s,eri:l,eci:n}=e,a=e;I==="row"?A>=g?(a.sri+=C,a.eri+=C):A<g&&g<=l&&(a.eri+=C,i(A,s,C,0)):I==="column"&&(s>=g?(a.sci+=C,a.eci+=C):s<g&&g<=n&&(a.eci+=C,i(A,s,0,C)))})}move(I,g,C){this._.forEach(i=>{const e=i;e.within(I)&&(e.eri+=g,e.sri+=g,e.sci+=C,e.eci+=C)})}setData(I){return this._=I.map(g=>it.valueOf(g)),this}getData(){return this._.map(I=>I.toString())}}function kbg(t){return JSON.parse(JSON.stringify(t))}const Ltg=(t={},...I)=>(I.forEach(g=>{Object.keys(g).forEach(C=>{const i=g[C];typeof i=="string"||typeof i=="number"||typeof i=="boolean"?t[C]=i:typeof i!="function"&&!Array.isArray(i)&&i instanceof Object?(t[C]=t[C]||{},Ltg(t[C],i)):t[C]=i})}),t);function KD(t,I){const g=Object.keys(t);if(g.length!==Object.keys(I).length)return!1;for(let C=0;C<g.length;C+=1){const i=g[C],e=t[i],A=I[i];if(A===void 0)return!1;if(typeof e=="string"||typeof e=="number"||typeof e=="boolean"){if(e!==A)return!1}else if(Array.isArray(e)){if(e.length!==A.length)return!1;for(let s=0;s<e.length;s+=1)if(!KD(e[s],A[s]))return!1}else if(typeof e!="function"&&!Array.isArray(e)&&e instanceof Object&&!KD(e,A))return!1}return!0}const zbg=(t,I=g=>g)=>{let g=0,C=0;return Object.keys(t).forEach(i=>{g+=I(t[i],i),C+=1}),[g,C]};function Jbg(t,I){const g=t[`${I}`];return delete t[`${I}`],g}function Lbg(t,I,g,C,i,e){let A=g,s=C,l=t;for(;l<I&&!(A>i);l+=1)s=e(l),A+=s;return[l,A-s,s]}function vbg(t,I,g){let C=0;for(let i=t;i<I;i+=1)C+=g(i);return C}function Tbg(t,I,g){for(let C=t;C<I;C+=1)g(C)}function xbg(t,I){if(t.length===I.length){for(let g=0;g<t.length;g+=1)if(t[g]!==I[g])return!1}else return!1;return!0}function WX(t){const I=`${t}`;let g=0,C=!1;for(let i=0;i<I.length;i+=1)C===!0&&(g+=1),I.charAt(i)==="."&&(C=!0);return g}function Jo(t,I,g){if(Number.isNaN(I)||Number.isNaN(g))return I+t+g;const C=WX(I),i=WX(g),e=Number(I),A=Number(g);let s=0;if(t==="-")s=e-A;else if(t==="+")s=e+A;else if(t==="*")s=e*A;else if(t==="/")return s=e/A,WX(s)>5?s.toFixed(2):s;return s.toFixed(Math.max(C,i))}const Ti={cloneDeep:kbg,merge:(...t)=>Ltg({},...t),equals:KD,arrayEquals:xbg,sum:zbg,rangeEach:Tbg,rangeSum:vbg,rangeReduceIf:Lbg,deleteProperty:Jbg,numberCalc:Jo};class jbg{constructor({len:I,height:g}){this._={},this.len=I,this.height=g}getHeight(I){if(this.isHide(I))return 0;const g=this.get(I);return g&&g.height?g.height:this.height}setHeight(I,g){const C=this.getOrNew(I);C.height=g}unhide(I){let g=I;for(;g>0&&(g-=1,this.isHide(g));)this.setHide(g,!1)}isHide(I){const g=this.get(I);return g&&g.hide}setHide(I,g){const C=this.getOrNew(I);g===!0?C.hide=!0:delete C.hide}setStyle(I,g){const C=this.getOrNew(I);C.style=g}sumHeight(I,g,C){return Ti.rangeSum(I,g,i=>C&&C.has(i)?0:this.getHeight(i))}totalHeight(){return this.sumHeight(0,this.len)}get(I){return this._[I]}getOrNew(I){return this._[I]=this._[I]||{cells:{}},this._[I]}getCell(I,g){const C=this.get(I);return C!==void 0&&C.cells!==void 0&&C.cells[g]!==void 0?C.cells[g]:null}getCellMerge(I,g){const C=this.getCell(I,g);return C&&C.merge?C.merge:[0,0]}getCellOrNew(I,g){const C=this.getOrNew(I);return C.cells[g]=C.cells[g]||{},C.cells[g]}setCell(I,g,C,i="all"){const e=this.getOrNew(I);i==="all"?e.cells[g]=C:i==="text"?(e.cells[g]=e.cells[g]||{},e.cells[g].text=C.text):i==="format"&&(e.cells[g]=e.cells[g]||{},e.cells[g].style=C.style,C.merge&&(e.cells[g].merge=C.merge))}setCellText(I,g,C){const i=this.getCellOrNew(I,g);i.editable!==!1&&(i.text=C)}copyPaste(I,g,C,i=!1,e=()=>{}){const{sri:A,sci:s,eri:l,eci:n}=I,a=g.sri,d=g.sci,o=g.eri,c=g.eci,[r,h]=I.size(),[b,u]=g.size();let m=!0,Z=0;(o<A||c<s)&&(m=!1,o<A?Z=b:Z=u);for(let p=A;p<=l;p+=1)if(this._[p]){for(let Y=s;Y<=n;Y+=1)if(this._[p].cells&&this._[p].cells[Y])for(let R=a;R<=o;R+=r)for(let X=d;X<=c;X+=h){const H=R+(p-A),S=X+(Y-s),z=Ti.cloneDeep(this._[p].cells[Y]);if(i&&z&&z.text&&z.text.length>0){const{text:v}=z;let K=X-d+(R-a)+2;if(m||(K-=Z+1),v[0]==="=")z.text=v.replace(/[a-zA-Z]{1,3}\d+/g,V=>{let[N,B]=[0,0];return A===a?N=K-1:B=K-1,/^\d+$/.test(V)?V:fu(V,N,B)});else if(r<=1&&h>1&&(a>l||o<A)||h<=1&&r>1&&(d>n||c<s)||r<=1&&h<=1){const V=/[\\.\d]+$/.exec(v);if(V!==null){const N=Number(V[0])+K-1;z.text=v.substring(0,V.index)+N}}}this.setCell(H,S,z,C),e(H,S,z)}}}cutPaste(I,g){const C={};this.each(i=>{this.eachCells(i,e=>{let A=parseInt(i,10),s=parseInt(e,10);I.includes(i,e)&&(A=g.sri+(A-I.sri),s=g.sci+(s-I.sci)),C[A]=C[A]||{cells:{}},C[A].cells[s]=this._[i].cells[e]})}),this._=C}paste(I,g){if(I.length<=0)return;const{sri:C,sci:i}=g;I.forEach((e,A)=>{const s=C+A;e.forEach((l,n)=>{const a=i+n;this.setCellText(s,a,l)})})}insert(I,g=1){const C={};this.each((i,e)=>{let A=parseInt(i,10);A>=I&&(A+=g,this.eachCells(i,(s,l)=>{l.text&&l.text[0]==="="&&(l.text=l.text.replace(/[a-zA-Z]{1,3}\d+/g,n=>fu(n,0,g,(a,d)=>d>=I)))})),C[A]=e}),this._=C,this.len+=g}delete(I,g){const C=g-I+1,i={};this.each((e,A)=>{const s=parseInt(e,10);s<I?i[s]=A:e>g&&(i[s-C]=A,this.eachCells(e,(l,n)=>{n.text&&n.text[0]==="="&&(n.text=n.text.replace(/[a-zA-Z]{1,3}\d+/g,a=>fu(a,0,-C,(d,o)=>o>g)))}))}),this._=i,this.len-=C}insertColumn(I,g=1){this.each((C,i)=>{const e={};this.eachCells(C,(A,s)=>{let l=parseInt(A,10);l>=I&&(l+=g,s.text&&s.text[0]==="="&&(s.text=s.text.replace(/[a-zA-Z]{1,3}\d+/g,n=>fu(n,g,0,a=>a>=I)))),e[l]=s}),i.cells=e})}deleteColumn(I,g){const C=g-I+1;this.each((i,e)=>{const A={};this.eachCells(i,(s,l)=>{const n=parseInt(s,10);n<I?A[n]=l:n>g&&(A[n-C]=l,l.text&&l.text[0]==="="&&(l.text=l.text.replace(/[a-zA-Z]{1,3}\d+/g,a=>fu(a,-C,0,d=>d>g))))}),e.cells=A})}deleteCells(I,g="all"){I.each((C,i)=>{this.deleteCell(C,i,g)})}deleteCell(I,g,C="all"){const i=this.get(I);if(i!==null){const e=this.getCell(I,g);e!==null&&e.editable!==!1&&(C==="all"?delete i.cells[g]:C==="text"?(e.text&&delete e.text,e.value&&delete e.value):C==="format"?(e.style!==void 0&&delete e.style,e.merge&&delete e.merge):C==="merge"&&e.merge&&delete e.merge)}}maxCell(){const I=Object.keys(this._),g=I[I.length-1],C=this._[g];if(C){const{cells:i}=C,e=Object.keys(i),A=e[e.length-1];return[parseInt(g,10),parseInt(A,10)]}return[0,0]}each(I){Object.entries(this._).forEach(([g,C])=>{I(g,C)})}eachCells(I,g){this._[I]&&this._[I].cells&&Object.entries(this._[I].cells).forEach(([C,i])=>{g(C,i)})}setData(I){I.len&&(this.len=I.len,delete I.len),this._=I}getData(){const{len:I}=this;return Object.assign({len:I},this._)}}class Qbg{constructor({len:I,width:g,indexWidth:C,minWidth:i}){this._={},this.len=I,this.width=g,this.indexWidth=C,this.minWidth=i}setData(I){I.len&&(this.len=I.len,delete I.len),this._=I}getData(){const{len:I}=this;return Object.assign({len:I},this._)}getWidth(I){if(this.isHide(I))return 0;const g=this._[I];return g&&g.width?g.width:this.width}getOrNew(I){return this._[I]=this._[I]||{},this._[I]}setWidth(I,g){const C=this.getOrNew(I);C.width=g}unhide(I){let g=I;for(;g>0&&(g-=1,this.isHide(g));)this.setHide(g,!1)}isHide(I){const g=this._[I];return g&&g.hide}setHide(I,g){const C=this.getOrNew(I);g===!0?C.hide=!0:delete C.hide}setStyle(I,g){const C=this.getOrNew(I);C.style=g}sumWidth(I,g){return Ti.rangeSum(I,g,C=>this.getWidth(C))}totalWidth(){return this.sumWidth(0,this.len)}}const Obg={toolbar:{undo:"Undo",redo:"Redo",print:"Print",paintformat:"Paint format",clearformat:"Clear format",format:"Format",fontName:"Font",fontSize:"Font size",fontBold:"Font bold",fontItalic:"Font italic",underline:"Underline",strike:"Strike",color:"Text color",bgcolor:"Fill color",border:"Borders",merge:"Merge cells",align:"Horizontal align",valign:"Vertical align",textwrap:"Text wrapping",freeze:"Freeze cell",autofilter:"Filter",formula:"Functions",more:"More"},contextmenu:{copy:"Copy",cut:"Cut",paste:"Paste",pasteValue:"Paste values only",pasteFormat:"Paste format only",hide:"Hide",insertRow:"Insert row",insertColumn:"Insert column",deleteSheet:"Delete",deleteRow:"Delete row",deleteColumn:"Delete column",deleteCell:"Delete cell",deleteCellText:"Delete cell text",validation:"Data validations",cellprintable:"Enable export",cellnonprintable:"Disable export",celleditable:"Enable editing",cellnoneditable:"Disable editing"},print:{size:"Paper size",orientation:"Page orientation",orientations:["Landscape","Portrait"]},format:{normal:"Normal",text:"Plain Text",number:"Number",percent:"Percent",rmb:"RMB",usd:"USD",eur:"EUR",date:"Date",time:"Time",datetime:"Date time",duration:"Duration"},formula:{sum:"Sum",average:"Average",max:"Max",min:"Min",_if:"IF",and:"AND",or:"OR",concat:"Concat"},validation:{required:"it must be required",notMatch:"it not match its validation rule",between:"it is between {} and {}",notBetween:"it is not between {} and {}",notIn:"it is not in list",equal:"it equal to {}",notEqual:"it not equal to {}",lessThan:"it less than {}",lessThanEqual:"it less than or equal to {}",greaterThan:"it greater than {}",greaterThanEqual:"it greater than or equal to {}"},error:{pasteForMergedCell:"Unable to do this for merged cells"},calendar:{weeks:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"]},button:{next:"Next",cancel:"Cancel",remove:"Remove",save:"Save",ok:"OK"},sort:{desc:"Sort Z -> A",asc:"Sort A -> Z"},filter:{empty:"empty"},dataValidation:{mode:"Mode",range:"Cell Range",criteria:"Criteria",modeType:{cell:"Cell",column:"Colun",row:"Row"},type:{list:"List",number:"Number",date:"Date",phone:"Phone",email:"Email"},operator:{be:"between",nbe:"not betwwen",lt:"less than",lte:"less than or equal to",gt:"greater than",gte:"greater than or equal to",eq:"equal to",neq:"not equal to"}}};let FD=["en"];const vtg={en:Obg};function uq(t,I){if(I)for(const g of FD){if(!I[g])break;let C=I[g];const i=t.match(/(?:\\.|[^.])+/g);for(let e=0;e<i.length;e+=1){const A=i[e],s=C[A];if(!s)break;if(e===i.length-1)return s;C=s}}}function ot(t){let I=uq(t,vtg);return!I&&window&&window.x_spreadsheet&&window.x_spreadsheet.$messages&&(I=uq(t,window.x_spreadsheet.$messages)),I||""}function PI(t){return()=>ot(t)}function Ttg(t,I,g=!1){g?FD=[t]:FD.unshift(t),I&&(vtg[t]=I)}const mq={phone:/^[1-9]\d{10}$/,email:/w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*/};function AA(t,I,...g){let C="";return t||(C=ot(`validation.${I}`,...g)),[t,C]}class xtg{constructor(I,g,C,i){this.required=g,this.value=C,this.type=I,this.operator=i,this.message=""}parseValue(I){const{type:g}=this;return g==="date"?new Date(I):g==="number"?Number(I):I}equals(I){let g=this.type===I.type&&this.required===I.required&&this.operator===I.operator;return g&&(Array.isArray(this.value)?g=Ti.arrayEquals(this.value,I.value):g=this.value===I.value),g}values(){return this.value.split(",")}validate(I){const{required:g,operator:C,value:i,type:e}=this;if(g&&/^\s*$/.test(I))return AA(!1,"required");if(/^\s*$/.test(I))return[!0];if(mq[e]&&!mq[e].test(I))return AA(!1,"notMatch");if(e==="list")return AA(this.values().includes(I),"notIn");if(C){const A=this.parseValue(I);if(C==="be"){const[s,l]=i;return AA(A>=this.parseValue(s)&&A<=this.parseValue(l),"between",s,l)}if(C==="nbe"){const[s,l]=i;return AA(A<this.parseValue(s)||A>this.parseValue(l),"notBetween",s,l)}if(C==="eq")return AA(A===this.parseValue(i),"equal",i);if(C==="neq")return AA(A!==this.parseValue(i),"notEqual",i);if(C==="lt")return AA(A<this.parseValue(i),"lessThan",i);if(C==="lte")return AA(A<=this.parseValue(i),"lessThanEqual",i);if(C==="gt")return AA(A>this.parseValue(i),"greaterThan",i);if(C==="gte")return AA(A>=this.parseValue(i),"greaterThanEqual",i)}return[!0]}}class nV{constructor(I,g,C){this.refs=g,this.mode=I,this.validator=C}includes(I,g){const{refs:C}=this;for(let i=0;i<C.length;i+=1)if(it.valueOf(C[i]).includes(I,g))return!0;return!1}addRef(I){this.remove(it.valueOf(I)),this.refs.push(I)}remove(I){const g=[];this.refs.forEach(C=>{const i=it.valueOf(C);i.intersects(I)?i.difference(I).forEach(A=>g.push(A.toString())):g.push(C)}),this.refs=g}getData(){const{refs:I,mode:g,validator:C}=this,{type:i,required:e,operator:A,value:s}=C;return{refs:I,mode:g,type:i,required:e,operator:A,value:s}}static valueOf({refs:I,mode:g,type:C,required:i,operator:e,value:A}){return new nV(g,I,new xtg(C,i,A,e))}}class Ubg{constructor(){this._=[],this.errors=new Map}getError(I,g){return this.errors.get(`${I}_${g}`)}validate(I,g,C){const i=this.get(I,g),e=`${I}_${g}`,{errors:A}=this;if(i!==null){const[s,l]=i.validator.validate(C);s?A.delete(e):A.set(e,l)}else A.delete(e);return!0}add(I,g,{type:C,required:i,value:e,operator:A}){const s=new xtg(C,i,e,A),l=this.getByValidator(s);l!==null?l.addRef(g):this._.push(new nV(I,[g],s))}getByValidator(I){for(let g=0;g<this._.length;g+=1){const C=this._[g];if(C.validator.equals(I))return C}return null}get(I,g){for(let C=0;C<this._.length;C+=1){const i=this._[C];if(i.includes(I,g))return i}return null}remove(I){this.each(g=>{g.remove(I)})}each(I){this._.forEach(g=>I(g))}getData(){return this._.filter(I=>I.refs.length>0).map(I=>I.getData())}setData(I){this._=I.map(g=>nV.valueOf(g))}}const Ebg={mode:"edit",view:{height:()=>document.documentElement.clientHeight,width:()=>document.documentElement.clientWidth},showGrid:!0,showToolbar:!0,showContextmenu:!0,showBottomBar:!0,row:{len:100,height:25},col:{len:26,width:100,indexWidth:60,minWidth:60},style:{bgcolor:"#ffffff",align:"left",valign:"middle",textwrap:!1,strike:!1,underline:!1,color:"#0a0a0a",font:{name:"Arial",size:10,bold:!1,italic:!1},format:"normal"}},Pbg=41,_bg=41,Zq=(t,I)=>Object.prototype.hasOwnProperty.call(t,I);function Gq(t,I,g=()=>{}){const{merges:C}=this,i=I.clone(),[e,A]=t.size(),[s,l]=I.size();return e>s&&(i.eri=I.sri+e-1),A>l&&(i.eci=I.sci+A-1),C.intersects(i)?(g(ot("error.pasteForMergedCell")),!1):!0}function wq(t,I,g,C=!1){const{rows:i,merges:e}=this;(g==="all"||g==="format")&&(i.deleteCells(I,g),e.deleteWithin(I)),i.copyPaste(t,I,g,C,(A,s,l)=>{if(l&&l.merge){const[n,a]=l.merge;if(n<=0&&a<=0)return;e.add(new it(A,s,A+n,s+a))}})}function qbg(t,I){const{clipboard:g,rows:C,merges:i}=this;C.cutPaste(t,I),i.move(t,I.sri-t.sri,I.sci-t.sci),g.clear()}function Hr(t,I,g){const{styles:C,rows:i}=this,e=i.getCellOrNew(t,I);let A={};e.style!==void 0&&(A=Ti.cloneDeep(C[e.style])),A=Ti.merge(A,{border:g}),e.style=this.addStyle(A)}function $bg({mode:t,style:I,color:g}){const{styles:C,selector:i,rows:e}=this,{sri:A,sci:s,eri:l,eci:n}=i.range,a=!this.isSignleSelected();if(!(!a&&(t==="inside"||t==="horizontal"||t==="vertical"))){if(t==="outside"&&!a)Hr.call(this,A,s,{top:[I,g],bottom:[I,g],left:[I,g],right:[I,g]});else if(t==="none")i.range.each((d,o)=>{const c=e.getCell(d,o);if(c&&c.style!==void 0){const r=Ti.cloneDeep(C[c.style]);delete r.border,c.style=this.addStyle(r)}});else if(t==="all"||t==="inside"||t==="outside"||t==="horizontal"||t==="vertical"){const d=[];for(let o=A;o<=l;o+=1)for(let c=s;c<=n;c+=1){const r=[];for(let Y=0;Y<d.length;Y+=1){const[R,X,H,S]=d[Y];if(o===R+H+1&&r.push(Y),R<=o&&o<=R+H&&c===X){c+=S+1;break}}if(r.forEach(Y=>d.splice(Y,1)),c>n)break;const h=e.getCell(o,c);let[b,u]=[0,0];h&&h.merge&&([b,u]=h.merge,d.push([o,c,b,u]));const m=b>0&&o+b===l,Z=u>0&&c+u===n;let p={};t==="all"?p={bottom:[I,g],top:[I,g],left:[I,g],right:[I,g]}:t==="inside"?(!Z&&c<n&&(p.right=[I,g]),!m&&o<l&&(p.bottom=[I,g])):t==="horizontal"?!m&&o<l&&(p.bottom=[I,g]):t==="vertical"?!Z&&c<n&&(p.right=[I,g]):t==="outside"&&a&&(A===o&&(p.top=[I,g]),(m||l===o)&&(p.bottom=[I,g]),s===c&&(p.left=[I,g]),(Z||n===c)&&(p.right=[I,g])),Object.keys(p).length>0&&Hr.call(this,o,c,p),c+=u}}else if(t==="top"||t==="bottom")for(let d=s;d<=n;d+=1)t==="top"&&(Hr.call(this,A,d,{top:[I,g]}),d+=e.getCellMerge(A,d)[1]),t==="bottom"&&(Hr.call(this,l,d,{bottom:[I,g]}),d+=e.getCellMerge(l,d)[1]);else if(t==="left"||t==="right")for(let d=A;d<=l;d+=1)t==="left"&&(Hr.call(this,d,s,{left:[I,g]}),d+=e.getCellMerge(d,s)[0]),t==="right"&&(Hr.call(this,d,n,{right:[I,g]}),d+=e.getCellMerge(d,n)[0])}}function gug(t,I){const{rows:g}=this,C=this.freezeTotalHeight();let i=g.height;C+g.height<t&&(i-=I);const e=this.exceptRowSet;let A=0,s=i,{height:l}=g;for(;A<g.len&&!(s>t);A+=1)e.has(A)||(l=g.getHeight(A),s+=l);return s-=l,s<=0?{ri:-1,top:0,height:l}:{ri:A-1,top:s,height:l}}function Iug(t,I){const{cols:g}=this,C=this.freezeTotalWidth();let i=g.indexWidth;C+g.indexWidth<t&&(i-=I);const[e,A,s]=Ti.rangeReduceIf(0,g.len,i,g.indexWidth,t,l=>g.getWidth(l));return A<=0?{ci:-1,left:0,width:g.indexWidth}:{ci:e-1,left:A,width:s}}class Cug{constructor(I,g){this.settings=Ti.merge(Ebg,g||{}),this.name=I||"sheet",this.freeze=[0,0],this.styles=[],this.merges=new R9,this.rows=new jbg(this.settings.row),this.cols=new Qbg(this.settings.col),this.validations=new Ubg,this.hyperlinks={},this.comments={},this.selector=new Xbg,this.scroll=new Sbg,this.history=new Dbg,this.clipboard=new Kbg,this.autoFilter=new Fbg,this.change=()=>{},this.exceptRowSet=new Set,this.sortedRowMap=new Map,this.unsortedRowMap=new Map}addValidation(I,g,C){this.changeData(()=>{this.validations.add(I,g,C)})}removeValidation(){const{range:I}=this.selector;this.changeData(()=>{this.validations.remove(I)})}getSelectedValidator(){const{ri:I,ci:g}=this.selector,C=this.validations.get(I,g);return C?C.validator:null}getSelectedValidation(){const{ri:I,ci:g,range:C}=this.selector,i=this.validations.get(I,g),e={ref:C.toString()};return i!==null&&(e.mode=i.mode,e.validator=i.validator),e}canUndo(){return this.history.canUndo()}canRedo(){return this.history.canRedo()}undo(){this.history.undo(this.getData(),I=>{this.setData(I)})}redo(){this.history.redo(this.getData(),I=>{this.setData(I)})}copy(){this.clipboard.copy(this.selector.range)}copyToSystemClipboard(){if(navigator.clipboard===void 0)return;let I="";const g=this.rows.getData();for(let C=this.selector.range.sri;C<=this.selector.range.eri;C+=1){if(Zq(g,C)){for(let i=this.selector.range.sci;i<=this.selector.range.eci;i+=1)if(i>this.selector.range.sci&&(I+=" "),Zq(g[C].cells,i)){const e=String(g[C].cells[i].text);e.indexOf(`
- `)===-1&&e.indexOf(" ")===-1&&e.indexOf('"')===-1?I+=e:I+=`"${e}"`}}else for(let i=this.selector.range.sci;i<=this.selector.range.eci;i+=1)I+=" ";I+=`
- `}navigator.clipboard.writeText(I).then(()=>{},C=>{console.log("text copy to the system clipboard error ",I,C)})}cut(){this.clipboard.cut(this.selector.range)}paste(I="all",g=()=>{}){const{clipboard:C,selector:i}=this;return C.isClear()||!Gq.call(this,C.range,i.range,g)?!1:(this.changeData(()=>{C.isCopy()?wq.call(this,C.range,i.range,I):C.isCut()&&qbg.call(this,C.range,i.range)}),!0)}pasteFromText(I){const g=I.split(`\r
- `).map(e=>e.replace(/"/g,"").split(" "));g.length>0&&(g.length-=1);const{rows:C,selector:i}=this;this.changeData(()=>{C.paste(g,i.range)})}autofill(I,g,C=()=>{}){const i=this.selector.range;return Gq.call(this,i,I,C)?(this.changeData(()=>{wq.call(this,i,I,g,!0)}),!0):!1}clearClipboard(){this.clipboard.clear()}calSelectedRangeByEnd(I,g){const{selector:C,rows:i,cols:e,merges:A}=this;let{sri:s,sci:l,eri:n,eci:a}=C.range;const d=C.ri,o=C.ci;let[c,r]=[I,g];return I<0&&(c=i.len-1),g<0&&(r=e.len-1),c>d?[s,n]=[d,c]:[s,n]=[c,d],r>o?[l,a]=[o,r]:[l,a]=[r,o],C.range=A.union(new it(s,l,n,a)),C.range=A.union(C.range),C.range}calSelectedRangeByStart(I,g){const{selector:C,rows:i,cols:e,merges:A}=this;let s=A.getFirstIncludes(I,g);return s===null&&(s=new it(I,g,I,g),I===-1&&(s.sri=0,s.eri=i.len-1),g===-1&&(s.sci=0,s.eci=e.len-1)),C.range=s,s}setSelectedCellAttr(I,g){this.changeData(()=>{const{selector:C,styles:i,rows:e}=this;if(I==="merge")g?this.merge():this.unmerge();else if(I==="border")$bg.call(this,g);else if(I==="formula"){const{ri:A,ci:s,range:l}=C;if(C.multiple()){const[n,a]=C.size(),{sri:d,sci:o,eri:c,eci:r}=l;if(n>1)for(let h=o;h<=r;h+=1){const b=e.getCellOrNew(c+1,h);b.text=`=${g}(${zl(h,d)}:${zl(h,c)})`}else if(a>1){const h=e.getCellOrNew(A,r+1);h.text=`=${g}(${zl(o,A)}:${zl(r,A)})`}}else{const n=e.getCellOrNew(A,s);n.text=`=${g}()`}}else C.range.each((A,s)=>{const l=e.getCellOrNew(A,s);let n={};if(l.style!==void 0&&(n=Ti.cloneDeep(i[l.style])),I==="format")n.format=g,l.style=this.addStyle(n);else if(I==="font-bold"||I==="font-italic"||I==="font-name"||I==="font-size"){const a={};a[I.split("-")[1]]=g,n.font=Object.assign(n.font||{},a),l.style=this.addStyle(n)}else I==="strike"||I==="textwrap"||I==="underline"||I==="align"||I==="valign"||I==="color"||I==="bgcolor"?(n[I]=g,l.style=this.addStyle(n)):l[I]=g})})}setSelectedCellText(I,g="input"){const{autoFilter:C,selector:i,rows:e}=this,{ri:A,ci:s}=i;let l=A;this.unsortedRowMap.has(A)&&(l=this.unsortedRowMap.get(A));const n=e.getCell(l,s),a=n?n.text:"";if(this.setCellText(l,s,I,g),C.active()){const d=C.getFilter(s);if(d){const o=d.value.findIndex(c=>c===a);o>=0&&d.value.splice(o,1,I)}}}getSelectedCell(){const{ri:I,ci:g}=this.selector;let C=I;return this.unsortedRowMap.has(I)&&(C=this.unsortedRowMap.get(I)),this.rows.getCell(C,g)}xyInSelectedRect(I,g){const{left:C,top:i,width:e,height:A}=this.getSelectedRect(),s=I-this.cols.indexWidth,l=g-this.rows.height;return s>C&&s<C+e&&l>i&&l<i+A}getSelectedRect(){return this.getRect(this.selector.range)}getClipboardRect(){const{clipboard:I}=this;return I.isClear()?{left:-100,top:-100}:this.getRect(I.range)}getRect(I){const{scroll:g,rows:C,cols:i,exceptRowSet:e}=this,{sri:A,sci:s,eri:l,eci:n}=I;if(A<0&&s<0)return{left:0,l:0,top:0,t:0,scroll:g};const a=i.sumWidth(0,s),d=C.sumHeight(0,A,e),o=C.sumHeight(A,l+1,e),c=i.sumWidth(s,n+1);let r=a-g.x,h=d-g.y;const b=this.freezeTotalHeight(),u=this.freezeTotalWidth();return u>0&&u>a&&(r=a),b>0&&b>d&&(h=d),{l:a,t:d,left:r,top:h,height:o,width:c,scroll:g}}getCellRectByXY(I,g){const{scroll:C,merges:i,rows:e,cols:A}=this;let{ri:s,top:l,height:n}=gug.call(this,g,C.y),{ci:a,left:d,width:o}=Iug.call(this,I,C.x);if(a===-1&&(o=A.totalWidth()),s===-1&&(n=e.totalHeight()),s>=0||a>=0){const c=i.getFirstIncludes(s,a);c&&(s=c.sri,a=c.sci,{left:d,top:l,width:o,height:n}=this.cellRect(s,a))}return{ri:s,ci:a,left:d,top:l,width:o,height:n}}isSignleSelected(){const{sri:I,sci:g,eri:C,eci:i}=this.selector.range,e=this.getCell(I,g);if(e&&e.merge){const[A,s]=e.merge;if(I+A===C&&g+s===i)return!0}return!this.selector.multiple()}canUnmerge(){const{sri:I,sci:g,eri:C,eci:i}=this.selector.range,e=this.getCell(I,g);if(e&&e.merge){const[A,s]=e.merge;if(I+A===C&&g+s===i)return!0}return!1}merge(){const{selector:I,rows:g}=this;if(this.isSignleSelected())return;const[C,i]=I.size();if(C>1||i>1){const{sri:e,sci:A}=I.range;this.changeData(()=>{const s=g.getCellOrNew(e,A);s.merge=[C-1,i-1],this.merges.add(I.range),this.rows.deleteCells(I.range),this.rows.setCell(e,A,s)})}}unmerge(){const{selector:I}=this;if(!this.isSignleSelected())return;const{sri:g,sci:C}=I.range;this.changeData(()=>{this.rows.deleteCell(g,C,"merge"),this.merges.deleteWithin(I.range)})}canAutofilter(){return!this.autoFilter.active()}autofilter(){const{autoFilter:I,selector:g}=this;this.changeData(()=>{I.active()?(I.clear(),this.exceptRowSet=new Set,this.sortedRowMap=new Map,this.unsortedRowMap=new Map):I.ref=g.range.toString()})}setAutoFilter(I,g,C,i){const{autoFilter:e}=this;e.addFilter(I,C,i),e.setSort(I,g),this.resetAutoFilter()}resetAutoFilter(){const{autoFilter:I,rows:g}=this;if(!I.active())return;const{sort:C}=I,{rset:i,fset:e}=I.filteredRows((l,n)=>g.getCell(l,n)),A=Array.from(e),s=Array.from(e);C&&A.sort((l,n)=>C.order==="asc"?l-n:C.order==="desc"?n-l:0),this.exceptRowSet=i,this.sortedRowMap=new Map,this.unsortedRowMap=new Map,A.forEach((l,n)=>{this.sortedRowMap.set(s[n],l),this.unsortedRowMap.set(l,s[n])})}deleteCell(I="all"){const{selector:g}=this;this.changeData(()=>{this.rows.deleteCells(g.range,I),(I==="all"||I==="format")&&this.merges.deleteWithin(g.range)})}insert(I,g=1){this.changeData(()=>{const{sri:C,sci:i}=this.selector.range,{rows:e,merges:A,cols:s}=this;let l=C;I==="row"?e.insert(C,g):I==="column"&&(e.insertColumn(i,g),l=i,s.len+=1),A.shift(I,l,g,(n,a,d,o)=>{const c=e.getCell(n,a);c.merge[0]+=d,c.merge[1]+=o})})}delete(I){this.changeData(()=>{const{rows:g,merges:C,selector:i,cols:e}=this,{range:A}=i,{sri:s,sci:l,eri:n,eci:a}=i.range,[d,o]=i.range.size();let c=s,r=d;I==="row"?g.delete(s,n):I==="column"&&(g.deleteColumn(l,a),c=A.sci,r=o,e.len-=1),C.shift(I,c,-r,(h,b,u,m)=>{const Z=g.getCell(h,b);Z.merge[0]+=u,Z.merge[1]+=m,Z.merge[0]===0&&Z.merge[1]===0&&delete Z.merge})})}scrollx(I,g){const{scroll:C,freeze:i,cols:e}=this,[,A]=i,[s,l,n]=Ti.rangeReduceIf(A,e.len,0,0,I,d=>e.getWidth(d));let a=l;I>0&&(a+=n),C.x!==a&&(C.ci=I>0?s:0,C.x=a,g())}scrolly(I,g){const{scroll:C,freeze:i,rows:e}=this,[A]=i,[s,l,n]=Ti.rangeReduceIf(A,e.len,0,0,I,d=>e.getHeight(d));let a=l;I>0&&(a+=n),C.y!==a&&(C.ri=I>0?s:0,C.y=a,g())}cellRect(I,g){const{rows:C,cols:i}=this,e=i.sumWidth(0,g),A=C.sumHeight(0,I),s=C.getCell(I,g);let l=i.getWidth(g),n=C.getHeight(I);if(s!==null&&s.merge){const[a,d]=s.merge;if(a>0)for(let o=1;o<=a;o+=1)n+=C.getHeight(I+o);if(d>0)for(let o=1;o<=d;o+=1)l+=i.getWidth(g+o)}return{left:e,top:A,width:l,height:n,cell:s}}getCell(I,g){return this.rows.getCell(I,g)}getCellTextOrDefault(I,g){const C=this.getCell(I,g);return C&&C.text?C.text:""}getCellStyle(I,g){const C=this.getCell(I,g);return C&&C.style!==void 0?this.styles[C.style]:null}getCellStyleOrDefault(I,g){const{styles:C,rows:i}=this,e=i.getCell(I,g),A=e&&e.style!==void 0?C[e.style]:{};return Ti.merge(this.defaultStyle(),A)}getSelectedCellStyle(){const{ri:I,ci:g}=this.selector;return this.getCellStyleOrDefault(I,g)}setCellText(I,g,C,i){const{rows:e,history:A,validations:s}=this;i==="finished"?(e.setCellText(I,g,""),A.add(this.getData()),e.setCellText(I,g,C)):(e.setCellText(I,g,C),this.change(this.getData())),s.validate(I,g,C)}freezeIsActive(){const[I,g]=this.freeze;return I>0||g>0}setFreeze(I,g){this.changeData(()=>{this.freeze=[I,g]})}freezeTotalWidth(){return this.cols.sumWidth(0,this.freeze[1])}freezeTotalHeight(){return this.rows.sumHeight(0,this.freeze[0])}setRowHeight(I,g){this.changeData(()=>{this.rows.setHeight(I,g)})}setColWidth(I,g){this.changeData(()=>{this.cols.setWidth(I,g)})}viewHeight(){const{view:I,showToolbar:g,showBottomBar:C}=this.settings;let i=I.height();return C&&(i-=_bg),g&&(i-=Pbg),i}viewWidth(){return this.settings.view.width()}freezeViewRange(){const[I,g]=this.freeze;return new it(0,0,I-1,g-1,this.freezeTotalWidth(),this.freezeTotalHeight())}contentRange(){const{rows:I,cols:g}=this,[C,i]=I.maxCell(),e=I.sumHeight(0,C+1),A=g.sumWidth(0,i+1);return new it(0,0,C,i,A,e)}exceptRowTotalHeight(I,g){const{exceptRowSet:C,rows:i}=this,e=Array.from(C);let A=0;return e.forEach(s=>{if(s<I||s>g){const l=i.getHeight(s);A+=l}}),A}viewRange(){const{scroll:I,rows:g,cols:C,freeze:i,exceptRowSet:e}=this;let{ri:A,ci:s}=I;A<=0&&([A]=i),s<=0&&([,s]=i);let[l,n]=[0,0],[a,d]=[g.len,C.len];for(let o=A;o<g.len&&(e.has(o)||(n+=g.getHeight(o),a=o),!(n>this.viewHeight()));o+=1);for(let o=s;o<C.len&&(l+=C.getWidth(o),d=o,!(l>this.viewWidth()));o+=1);return new it(A,s,a,d,l,n)}eachMergesInView(I,g){this.merges.filterIntersects(I).forEach(C=>g(C))}hideRowsOrCols(){const{rows:I,cols:g,selector:C}=this,[i,e]=C.size(),{sri:A,sci:s,eri:l,eci:n}=C.range;if(i===I.len)for(let a=s;a<=n;a+=1)g.setHide(a,!0);else if(e===g.len)for(let a=A;a<=l;a+=1)I.setHide(a,!0)}unhideRowsOrCols(I,g){this[`${I}s`].unhide(g)}rowEach(I,g,C){let i=0;const{rows:e}=this,A=this.exceptRowSet,s=[...A];let l=0;for(let n=0;n<s.length;n+=1)s[n]<I&&(l+=1);for(let n=I+l;n<=g+l;n+=1)if(A.has(n))l+=1;else{const a=e.getHeight(n);if(a>0&&(C(n,i,a),i+=a,i>this.viewHeight()))break}}colEach(I,g,C){let i=0;const{cols:e}=this;for(let A=I;A<=g;A+=1){const s=e.getWidth(A);if(s>0&&(C(A,i,s),i+=s,i>this.viewWidth()))break}}defaultStyle(){return this.settings.style}addStyle(I){const{styles:g}=this;for(let C=0;C<g.length;C+=1){const i=g[C];if(Ti.equals(i,I))return C}return g.push(I),g.length-1}changeData(I){this.history.add(this.getData()),I(),this.change(this.getData())}setData(I){return Object.keys(I).forEach(g=>{if(g==="merges"||g==="rows"||g==="cols"||g==="validations")this[g].setData(I[g]);else if(g==="freeze"){const[C,i]=ka(I[g]);this.freeze=[i,C]}else g==="autofilter"?this.autoFilter.setData(I[g]):I[g]!==void 0&&(this[g]=I[g])}),this}getData(){const{name:I,freeze:g,styles:C,merges:i,rows:e,cols:A,validations:s,autoFilter:l}=this;return{name:I,freeze:zl(g[1],g[0]),styles:C,merges:i.getData(),rows:e.getData(),cols:A.getData(),validations:s.getData(),autofilter:l.getData()}}}function ji(t,I,g){t.addEventListener(I,g)}function aV(t,I,g){t.removeEventListener(I,g)}function B0(t){t.xclickoutside&&(aV(window.document.body,"click",t.xclickoutside),delete t.xclickoutside)}function AG(t,I){t.xclickoutside=g=>{g.detail===2||t.contains(g.target)||(I?I(t):(t.hide(),B0(t)))},ji(window.document.body,"click",t.xclickoutside)}function jtg(t,I,g){ji(t,"mousemove",I);const C=t;C.xEvtUp=i=>{aV(t,"mousemove",I),aV(t,"mouseup",t.xEvtUp),g(i)},ji(t,"mouseup",t.xEvtUp)}function pq(t,I,g,C){let i="";Math.abs(t)>Math.abs(I)?(i=t>0?"right":"left",C(i,t,g)):(i=I>0?"down":"up",C(i,I,g))}function tug(t,{move:I,end:g}){let C=0,i=0;ji(t,"touchstart",e=>{const{pageX:A,pageY:s}=e.touches[0];C=A,i=s}),ji(t,"touchmove",e=>{if(!I)return;const{pageX:A,pageY:s}=e.changedTouches[0],l=A-C,n=s-i;(Math.abs(l)>10||Math.abs(n)>10)&&(pq(l,n,e,I),C=A,i=s),e.preventDefault()}),ji(t,"touchend",e=>{if(!g)return;const{pageX:A,pageY:s}=e.changedTouches[0],l=A-C,n=s-i;pq(l,n,e,g)})}function iug(){const t=new Map;function I(A,s){const l=()=>{const a=t.get(A);return Array.isArray(a)&&a.push(s)||!1},n=()=>t.set(A,[].concat(s));return t.has(A)&&l()||n()}function g(A,s){const l=()=>{const n=t.get(A);for(const a of n)a.call(null,...s)};return t.has(A)&&l()}function C(A,s){const l=()=>{const n=t.get(A),a=n.indexOf(s);return a>=0&&n.splice(a,1)&&t.get(A).length===0&&t.delete(A)};return t.has(A)&&l()}function i(A,s){const l=(...n)=>{s.call(null,...n),C(A,l)};return I(A,l)}function e(){t.clear()}return{get current(){return t},on:I,once:i,fire:g,removeListener:C,removeAllListeners:e}}const Lg="x-spreadsheet";class Bq{constructor(I=!1,g){this.moving=!1,this.vertical=I,this.el=Yg("div",`${Lg}-resizer ${I?"vertical":"horizontal"}`).children(this.unhideHoverEl=Yg("div",`${Lg}-resizer-hover`).on("dblclick.stop",C=>this.mousedblclickHandler(C)).css("position","absolute").hide(),this.hoverEl=Yg("div",`${Lg}-resizer-hover`).on("mousedown.stop",C=>this.mousedownHandler(C)),this.lineEl=Yg("div",`${Lg}-resizer-line`).hide()).hide(),this.cRect=null,this.finishedFn=null,this.minDistance=g,this.unhideFn=()=>{}}showUnhide(I){this.unhideIndex=I,this.unhideHoverEl.show()}hideUnhide(){this.unhideHoverEl.hide()}show(I,g){const{moving:C,vertical:i,hoverEl:e,lineEl:A,el:s,unhideHoverEl:l}=this;if(C)return;this.cRect=I;const{left:n,top:a,width:d,height:o}=I;s.offset({left:i?n+d-5:n,top:i?a:a+o-5}).show(),e.offset({width:i?5:d,height:i?o:5}),A.offset({width:i?0:g.width,height:i?g.height:0}),l.offset({left:i?5-d:n,top:i?a:5-o,width:i?5:d,height:i?o:5})}hide(){this.el.offset({left:0,top:0}).hide(),this.hideUnhide()}mousedblclickHandler(){this.unhideIndex&&this.unhideFn(this.unhideIndex)}mousedownHandler(I){let g=I;const{el:C,lineEl:i,cRect:e,vertical:A,minDistance:s}=this;let l=A?e.width:e.height;i.show(),jtg(window,n=>{this.moving=!0,g!==null&&n.buttons===1&&(A?(l+=n.movementX,l>s&&C.css("left",`${e.left+l}px`)):(l+=n.movementY,l>s&&C.css("top",`${e.top+l}px`)),g=n)},()=>{g=null,i.hide(),this.moving=!1,this.hide(),this.finishedFn&&(l<s&&(l=s),this.finishedFn(e,l))})}}class Wq{constructor(I){this.vertical=I,this.moveFn=null,this.el=Yg("div",`${Lg}-scrollbar ${I?"vertical":"horizontal"}`).child(this.contentEl=Yg("div","")).on("mousemove.stop",()=>{}).on("scroll.stop",g=>{const{scrollTop:C,scrollLeft:i}=g.target;this.moveFn&&this.moveFn(this.vertical?C:i,g)})}move(I){return this.el.scroll(I),this}scroll(){return this.el.scroll()}set(I,g){const C=I-1;if(g>C){const i=this.vertical?"height":"width";this.el.css(i,`${C-15}px`).show(),this.contentEl.css(this.vertical?"width":"height","1px").css(i,`${g}px`)}else this.el.hide();return this}}const LY=2*2-1;let kD=10;class vY{constructor(I=!1){this.useHideInput=I,this.inputChange=()=>{},this.cornerEl=Yg("div",`${Lg}-selector-corner`),this.areaEl=Yg("div",`${Lg}-selector-area`).child(this.cornerEl).hide(),this.clipboardEl=Yg("div",`${Lg}-selector-clipboard`).hide(),this.autofillEl=Yg("div",`${Lg}-selector-autofill`).hide(),this.el=Yg("div",`${Lg}-selector`).css("z-index",`${kD}`).children(this.areaEl,this.clipboardEl,this.autofillEl).hide(),I&&(this.hideInput=Yg("input","").on("compositionend",g=>{this.inputChange(g.target.value)}),this.el.child(this.hideInputDiv=Yg("div","hide-input").child(this.hideInput)),this.el.child(this.hideInputDiv=Yg("div","hide-input").child(this.hideInput))),kD+=1}setOffset(I){return this.el.offset(I).show(),this}hide(){return this.el.hide(),this}setAreaOffset(I){const{left:g,top:C,width:i,height:e}=I,A={width:i-LY+.8,height:e-LY+.8,left:g-.8,top:C-.8};this.areaEl.offset(A).show(),this.useHideInput&&(this.hideInputDiv.offset(A),this.hideInput.val("").focus())}setClipboardOffset(I){const{left:g,top:C,width:i,height:e}=I;this.clipboardEl.offset({left:g,top:C,width:i-5,height:e-5})}showAutofill(I){const{left:g,top:C,width:i,height:e}=I;this.autofillEl.offset({width:i-LY,height:e-LY,left:g,top:C}).show()}hideAutofill(){this.autofillEl.hide()}showClipboard(){this.clipboardEl.show()}hideClipboard(){this.clipboardEl.hide()}}function f9(t){const{data:I}=this,{left:g,top:C,width:i,height:e,scroll:A,l:s,t:l}=t,n=I.freezeTotalWidth(),a=I.freezeTotalHeight();let d=g-n;n>s&&(d-=A.x);let o=C-a;return a>l&&(o-=A.y),{left:d,top:o,width:i,height:e}}function H9(t){const{data:I}=this,{left:g,width:C,height:i,l:e,t:A,scroll:s}=t,l=I.freezeTotalWidth();let n=g-l;return l>e&&(n-=s.x),{left:n,top:A,width:C,height:i}}function X9(t){const{data:I}=this,{top:g,width:C,height:i,l:e,t:A,scroll:s}=t,l=I.freezeTotalHeight();let n=g-l;return l>A&&(n-=s.y),{left:e,top:n,width:C,height:i}}function zD(t){const{br:I}=this;I.setAreaOffset(f9.call(this,t))}function eug(t){const{tl:I}=this;I.setAreaOffset(t)}function Qtg(t){const{t:I}=this;I.setAreaOffset(H9.call(this,t))}function Otg(t){const{l:I}=this;I.setAreaOffset(X9.call(this,t))}function Utg(t){const{l:I}=this;I.setClipboardOffset(X9.call(this,t))}function JD(t){const{br:I}=this;I.setClipboardOffset(f9.call(this,t))}function Aug(t){const{tl:I}=this;I.setClipboardOffset(t)}function Etg(t){const{t:I}=this;I.setClipboardOffset(H9.call(this,t))}function yq(t){zD.call(this,t),eug.call(this,t),Qtg.call(this,t),Otg.call(this,t)}function Yq(t){JD.call(this,t),Aug.call(this,t),Etg.call(this,t),Utg.call(this,t)}class sug{constructor(I){this.inputChange=()=>{},this.data=I,this.br=new vY(!0),this.t=new vY,this.l=new vY,this.tl=new vY,this.br.inputChange=g=>{this.inputChange(g)},this.br.el.show(),this.offset=null,this.areaOffset=null,this.indexes=null,this.range=null,this.arange=null,this.el=Yg("div",`${Lg}-selectors`).children(this.tl.el,this.t.el,this.l.el,this.br.el).hide(),this.lastri=-1,this.lastci=-1,kD+=1}resetData(I){this.data=I,this.range=I.selector.range,this.resetAreaOffset()}hide(){this.el.hide()}resetOffset(){const{data:I,tl:g,t:C,l:i,br:e}=this,A=I.freezeTotalHeight(),s=I.freezeTotalWidth();A>0||s>0?(g.setOffset({width:s,height:A}),C.setOffset({left:s,height:A}),i.setOffset({top:A,width:s}),e.setOffset({left:s,top:A})):(g.hide(),C.hide(),i.hide(),e.setOffset({left:0,top:0}))}resetAreaOffset(){const I=this.data.getSelectedRect(),g=this.data.getClipboardRect();yq.call(this,I),Yq.call(this,g),this.resetOffset()}resetBRTAreaOffset(){const I=this.data.getSelectedRect(),g=this.data.getClipboardRect();zD.call(this,I),Qtg.call(this,I),JD.call(this,g),Etg.call(this,g),this.resetOffset()}resetBRLAreaOffset(){const I=this.data.getSelectedRect(),g=this.data.getClipboardRect();zD.call(this,I),Otg.call(this,I),JD.call(this,g),Utg.call(this,g),this.resetOffset()}set(I,g,C=!0){const{data:i}=this,e=i.calSelectedRangeByStart(I,g),{sri:A,sci:s}=e;if(C){let[l,n]=[I,g];I<0&&(l=0),g<0&&(n=0),i.selector.setIndexes(l,n),this.indexes=[l,n]}this.moveIndexes=[A,s],this.range=e,this.resetAreaOffset(),this.el.show()}setEnd(I,g,C=!0){const{data:i,lastri:e,lastci:A}=this;if(C){if(I===e&&g===A)return;this.lastri=I,this.lastci=g}this.range=i.calSelectedRangeByEnd(I,g),yq.call(this,this.data.getSelectedRect())}reset(){const{eri:I,eci:g}=this.data.selector.range;this.setEnd(I,g)}showAutofill(I,g){if(I===-1&&g===-1)return;const{sri:C,sci:i,eri:e,eci:A}=this.range,[s,l]=[I,g],n=C-I,a=i-g,d=e-I,o=A-g;if(a>0)this.arange=new it(C,l,e,i-1);else if(n>0)this.arange=new it(s,i,C-1,A);else if(o<0)this.arange=new it(C,A+1,e,l);else if(d<0)this.arange=new it(e+1,i,s,A);else{this.arange=null;return}if(this.arange!==null){const c=this.data.getRect(this.arange);c.width+=2,c.height+=2;const{br:r,l:h,t:b,tl:u}=this;r.showAutofill(f9.call(this,c)),h.showAutofill(X9.call(this,c)),b.showAutofill(H9.call(this,c)),u.showAutofill(c)}}hideAutofill(){["br","l","t","tl"].forEach(I=>{this[I].hideAutofill()})}showClipboard(){const I=this.data.getClipboardRect();Yq.call(this,I),["br","l","t","tl"].forEach(g=>{this[g].showClipboard()})}hideClipboard(){["br","l","t","tl"].forEach(I=>{this[I].hideClipboard()})}}function lug(t){t.preventDefault(),t.stopPropagation();const{filterItems:I}=this;I.length<=0||(this.itemIndex>=0&&I[this.itemIndex].toggle(),this.itemIndex-=1,this.itemIndex<0&&(this.itemIndex=I.length-1),I[this.itemIndex].toggle())}function nug(t){t.stopPropagation();const{filterItems:I}=this;I.length<=0||(this.itemIndex>=0&&I[this.itemIndex].toggle(),this.itemIndex+=1,this.itemIndex>I.length-1&&(this.itemIndex=0),I[this.itemIndex].toggle())}function Nq(t){t.preventDefault();const{filterItems:I}=this;I.length<=0||(t.stopPropagation(),this.itemIndex<0&&(this.itemIndex=0),I[this.itemIndex].el.click(),this.hide())}function aug(t){const{keyCode:I}=t;switch(t.ctrlKey&&t.stopPropagation(),I){case 37:t.stopPropagation();break;case 38:lug.call(this,t);break;case 39:t.stopPropagation();break;case 40:nug.call(this,t);break;case 13:Nq.call(this,t);break;case 9:Nq.call(this,t);break;default:t.stopPropagation();break}}class Ptg{constructor(I,g,C="200px"){this.filterItems=[],this.items=I,this.el=Yg("div",`${Lg}-suggest`).css("width",C).hide(),this.itemClick=g,this.itemIndex=-1}setOffset(I){this.el.cssRemoveKeys("top","bottom").offset(I)}hide(){const{el:I}=this;this.filterItems=[],this.itemIndex=-1,I.hide(),B0(this.el.parent())}setItems(I){this.items=I}search(I){let{items:g}=this;if(/^\s*$/.test(I)||(g=g.filter(i=>(i.key||i).startsWith(I.toUpperCase()))),g=g.map(i=>{let{title:e}=i;e?typeof e=="function"&&(e=e()):e=i;const A=Yg("div",`${Lg}-item`).child(e).on("click.stop",()=>{this.itemClick(i),this.hide()});return i.label&&A.child(Yg("div","label").html(i.label)),A}),this.filterItems=g,g.length<=0)return;const{el:C}=this;C.html("").children(...g).show(),AG(C.parent(),()=>{this.hide()})}bindInputEvents(I){I.on("keydown",g=>aug.call(this,g))}}class hi extends ed{constructor(I){super("div",`${Lg}-icon`),this.iconNameEl=Yg("div",`${Lg}-icon-img ${I}`),this.child(this.iconNameEl)}setName(I){this.iconNameEl.className(`${Lg}-icon-img ${I}`)}}function Vq(t,I){t.setMonth(t.getMonth()+I)}function oug(t,I){const g=new Date(t);return g.setDate(I-t.getDay()+1),g}function cug(t,I,g){const C=new Date(t,I,1,23,59,59),i=[[],[],[],[],[],[]];for(let e=0;e<6;e+=1)for(let A=0;A<7;A+=1){const s=e*7+A,l=oug(C,s),n=l.getMonth()!==I,a=l.getMonth()===g.getMonth()&&l.getDate()===g.getDate();i[e][A]={d:l,disabled:n,active:a}}return i}class dug{constructor(I){this.value=I,this.cvalue=new Date(I),this.headerLeftEl=Yg("div","calendar-header-left"),this.bodyEl=Yg("tbody",""),this.buildAll(),this.el=Yg("div","x-spreadsheet-calendar").children(Yg("div","calendar-header").children(this.headerLeftEl,Yg("div","calendar-header-right").children(Yg("a","calendar-prev").on("click.stop",()=>this.prev()).child(new hi("chevron-left")),Yg("a","calendar-next").on("click.stop",()=>this.next()).child(new hi("chevron-right")))),Yg("table","calendar-body").children(Yg("thead","").child(Yg("tr","").children(...ot("calendar.weeks").map(g=>Yg("th","cell").child(g)))),this.bodyEl)),this.selectChange=()=>{}}setValue(I){this.value=I,this.cvalue=new Date(I),this.buildAll()}prev(){const{value:I}=this;Vq(I,-1),this.buildAll()}next(){const{value:I}=this;Vq(I,1),this.buildAll()}buildAll(){this.buildHeaderLeft(),this.buildBody()}buildHeaderLeft(){const{value:I}=this;this.headerLeftEl.html(`${ot("calendar.months")[I.getMonth()]} ${I.getFullYear()}`)}buildBody(){const{value:I,cvalue:g,bodyEl:C}=this,e=cug(I.getFullYear(),I.getMonth(),g).map(A=>{const s=A.map(l=>{let n="cell";return l.disabled&&(n+=" disabled"),l.active&&(n+=" active"),Yg("td","").child(Yg("div",n).on("click.stop",()=>{this.selectChange(l.d)}).child(l.d.getDate().toString()))});return Yg("tr","").children(...s)});C.html("").children(...e)}}class rug{constructor(){this.calendar=new dug(new Date),this.el=Yg("div",`${Lg}-datepicker`).child(this.calendar.el).hide()}setValue(I){const{calendar:g}=this;return typeof I=="string"?/^\d{4}-\d{1,2}-\d{1,2}$/.test(I)&&g.setValue(new Date(I.replace(new RegExp("-","g"),"/"))):I instanceof Date&&g.setValue(I),this}change(I){this.calendar.selectChange=g=>{I(g),this.hide()}}show(){this.el.show()}hide(){this.el.hide()}}function oV(){const{inputText:t}=this;if(!/^\s*$/.test(t)){const{textlineEl:I,textEl:g,areaOffset:C}=this,i=t.split(`
- `),e=Math.max(...i.map(d=>d.length)),s=I.offset().width/t.length,l=(e+1)*s+5,n=this.viewFn().width-C.left-s;let a=i.length;if(l>C.width){let d=l;l>n&&(d=n,a+=parseInt(l/n,10),a+=l%n>0?1:0),g.css("width",`${d}px`)}a*=this.rowHeight,a>C.height&&g.css("height",`${a}px`)}}function hug({target:t},I){const{value:g,selectionEnd:C}=t,i=`${g.slice(0,C)}${I}${g.slice(C)}`;t.value=i,t.setSelectionRange(C+1,C+1),this.inputText=i,this.textlineEl.html(i),oV.call(this)}function bug(t){const{keyCode:I,altKey:g}=t;I!==13&&I!==9&&t.stopPropagation(),I===13&&g&&(hug.call(this,t,`
- `),t.stopPropagation()),I===13&&!g&&t.preventDefault()}function uug(t){const I=t.target.value,{suggest:g,textlineEl:C,validator:i}=this,{cell:e}=this;if(e!==null)if("editable"in e&&e.editable===!0||e.editable===void 0){if(this.inputText=I,i)i.type==="list"?g.search(I):g.hide();else{const A=I.lastIndexOf("=");A!==-1?g.search(I.substring(A+1)):g.hide()}C.html(I),oV.call(this),this.change("input",I)}else t.target.value=e.text;else{if(this.inputText=I,i)i.type==="list"?g.search(I):g.hide();else{const A=I.lastIndexOf("=");A!==-1?g.search(I.substring(A+1)):g.hide()}C.html(I),oV.call(this),this.change("input",I)}}function mug(t){const{el:I}=this.textEl;setTimeout(()=>{I.focus(),I.setSelectionRange(t,t)},0)}function _tg(t,I){const{textEl:g,textlineEl:C}=this;g.el.blur(),g.val(t),C.html(t),mug.call(this,I)}function Zug(t){const{inputText:I,validator:g}=this;let C=0;if(g&&g.type==="list")this.inputText=t,C=this.inputText.length;else{const i=I.lastIndexOf("="),e=I.substring(0,i+1);let A=I.substring(i+1);A.indexOf(")")!==-1?A=A.substring(A.indexOf(")")):A="",this.inputText=`${e+t.key}(`,C=this.inputText.length,this.inputText+=`)${A}`}_tg.call(this,this.inputText,C)}function Gug(){this.suggest.setItems(this.formulas)}function wug(t){let I=t.getMonth()+1,g=t.getDate();return I<10&&(I=`0${I}`),g<10&&(g=`0${g}`),`${t.getFullYear()}-${I}-${g}`}class pug{constructor(I,g,C){this.viewFn=g,this.rowHeight=C,this.formulas=I,this.suggest=new Ptg(I,i=>{Zug.call(this,i)}),this.datepicker=new rug,this.datepicker.change(i=>{this.setText(wug(i)),this.clear()}),this.areaEl=Yg("div",`${Lg}-editor-area`).children(this.textEl=Yg("textarea","").on("input",i=>uug.call(this,i)).on("paste.stop",()=>{}).on("keydown",i=>bug.call(this,i)),this.textlineEl=Yg("div","textline"),this.suggest.el,this.datepicker.el).on("mousemove.stop",()=>{}).on("mousedown.stop",()=>{}),this.el=Yg("div",`${Lg}-editor`).child(this.areaEl).hide(),this.suggest.bindInputEvents(this.textEl),this.areaOffset=null,this.freeze={w:0,h:0},this.cell=null,this.inputText="",this.change=()=>{}}setFreezeLengths(I,g){this.freeze.w=I,this.freeze.h=g}clear(){this.inputText!==""&&this.change("finished",this.inputText),this.cell=null,this.areaOffset=null,this.inputText="",this.el.hide(),this.textEl.val(""),this.textlineEl.html(""),Gug.call(this),this.datepicker.hide()}setOffset(I,g="top"){const{textEl:C,areaEl:i,suggest:e,freeze:A,el:s}=this;if(I){this.areaOffset=I;const{left:l,top:n,width:a,height:d,l:o,t:c}=I,r={left:0,top:0};A.w>o&&A.h>c||(A.w<o&&A.h<c?(r.left=A.w,r.top=A.h):A.w>o?r.top=A.h:A.h>c&&(r.left=A.w)),s.offset(r),i.offset({left:l-r.left-.8,top:n-r.top-.8}),C.offset({width:a-9+.8,height:d-3+.8});const h={left:0};h[g]=d,e.setOffset(h),e.hide()}}setCell(I,g){const{el:C,datepicker:i,suggest:e}=this;C.show(),this.cell=I;const A=I&&I.text||"";if(this.setText(A),this.validator=g,g){const{type:s}=g;s==="date"&&(i.show(),/^\s*$/.test(A)||i.setValue(A)),s==="list"&&(e.setItems(g.values()),e.search(""))}}setText(I){this.inputText=I,_tg.call(this,I,I.length),oV.call(this)}}class gd extends ed{constructor(I,g=""){super("div",`${Lg}-button ${g}`),this.child(ot(`button.${I}`))}}function cV(){return window.devicePixelRatio||1}function S9(){return cV()-.5}function SI(t){return parseInt(t*cV(),10)}function Xr(t){const I=SI(t);return I>0?I-.5:.5}class Bug{constructor(I,g,C,i,e=0){this.x=I,this.y=g,this.width=C,this.height=i,this.padding=e,this.bgcolor="#ffffff",this.borderTop=null,this.borderRight=null,this.borderBottom=null,this.borderLeft=null}setBorders({top:I,bottom:g,left:C,right:i}){I&&(this.borderTop=I),i&&(this.borderRight=i),g&&(this.borderBottom=g),C&&(this.borderLeft=C)}innerWidth(){return this.width-this.padding*2-2}innerHeight(){return this.height-this.padding*2-2}textx(I){const{width:g,padding:C}=this;let{x:i}=this;return I==="left"?i+=C:I==="center"?i+=g/2:I==="right"&&(i+=g-C),i}texty(I,g){const{height:C,padding:i}=this;let{y:e}=this;return I==="top"?e+=i:I==="middle"?e+=C/2-g/2:I==="bottom"&&(e+=C-i-g),e}topxys(){const{x:I,y:g,width:C}=this;return[[I,g],[I+C,g]]}rightxys(){const{x:I,y:g,width:C,height:i}=this;return[[I+C,g],[I+C,g+i]]}bottomxys(){const{x:I,y:g,width:C,height:i}=this;return[[I,g+i],[I+C,g+i]]}leftxys(){const{x:I,y:g,height:C}=this;return[[I,g],[I,g+C]]}}function Mq(t,I,g,C,i,e,A){const s={x:0,y:0};t==="underline"?i==="bottom"?s.y=0:i==="top"?s.y=-(e+2):s.y=-e/2:t==="strike"&&(i==="bottom"?s.y=e/2:i==="top"&&(s.y=-(e/2+2))),C==="center"?s.x=A/2:C==="right"&&(s.x=A),this.line([I-s.x,g-s.y],[I-s.x+A,g-s.y])}class qtg{constructor(I,g,C){this.el=I,this.ctx=I.getContext("2d"),this.resize(g,C),this.ctx.scale(cV(),cV())}resize(I,g){this.el.style.width=`${I}px`,this.el.style.height=`${g}px`,this.el.width=SI(I),this.el.height=SI(g)}clear(){const{width:I,height:g}=this.el;return this.ctx.clearRect(0,0,I,g),this}attr(I){return Object.assign(this.ctx,I),this}save(){return this.ctx.save(),this.ctx.beginPath(),this}restore(){return this.ctx.restore(),this}beginPath(){return this.ctx.beginPath(),this}translate(I,g){return this.ctx.translate(SI(I),SI(g)),this}scale(I,g){return this.ctx.scale(I,g),this}clearRect(I,g,C,i){return this.ctx.clearRect(I,g,C,i),this}fillRect(I,g,C,i){return this.ctx.fillRect(SI(I)-.5,SI(g)-.5,SI(C),SI(i)),this}fillText(I,g,C){return this.ctx.fillText(I,SI(g),SI(C)),this}text(I,g,C={},i=!0){const{ctx:e}=this,{align:A,valign:s,font:l,color:n,strike:a,underline:d}=C,o=g.textx(A);e.save(),e.beginPath(),this.attr({textAlign:A,textBaseline:s,font:`${l.italic?"italic":""} ${l.bold?"bold":""} ${SI(l.size)}px ${l.name}`,fillStyle:n,strokeStyle:n});const c=`${I}`.split(`
- `),r=g.innerWidth(),h=[];c.forEach(m=>{const Z=e.measureText(m).width;if(i&&Z>SI(r)){let p={w:0,len:0,start:0};for(let Y=0;Y<m.length;Y+=1)p.w>=SI(r)&&(h.push(m.substr(p.start,p.len)),p={w:0,len:0,start:Y}),p.len+=1,p.w+=e.measureText(m[Y]).width+1;p.len>0&&h.push(m.substr(p.start,p.len))}else h.push(m)});const b=(h.length-1)*(l.size+2);let u=g.texty(s,b);return h.forEach(m=>{const Z=e.measureText(m).width;this.fillText(m,o,u),a&&Mq.call(this,"strike",o,u,A,s,l.size,Z),d&&Mq.call(this,"underline",o,u,A,s,l.size,Z),u+=l.size+2}),e.restore(),this}border(I,g){const{ctx:C}=this;return C.lineWidth=S9,C.strokeStyle=g,I==="medium"?C.lineWidth=SI(2)-.5:I==="thick"?C.lineWidth=SI(3):I==="dashed"?C.setLineDash([SI(3),SI(2)]):I==="dotted"?C.setLineDash([SI(1),SI(1)]):I==="double"&&C.setLineDash([SI(2),0]),this}line(...I){const{ctx:g}=this;if(I.length>1){g.beginPath();const[C,i]=I[0];g.moveTo(Xr(C),Xr(i));for(let e=1;e<I.length;e+=1){const[A,s]=I[e];g.lineTo(Xr(A),Xr(s))}g.stroke()}return this}strokeBorders(I){const{ctx:g}=this;g.save();const{borderTop:C,borderRight:i,borderBottom:e,borderLeft:A}=I;C&&(this.border(...C),this.line(...I.topxys())),i&&(this.border(...i),this.line(...I.rightxys())),e&&(this.border(...e),this.line(...I.bottomxys())),A&&(this.border(...A),this.line(...I.leftxys())),g.restore()}dropdown(I){const{ctx:g}=this,{x:C,y:i,width:e,height:A}=I,s=C+e-15,l=i+A-15;g.save(),g.beginPath(),g.moveTo(SI(s),SI(l)),g.lineTo(SI(s+8),SI(l)),g.lineTo(SI(s+4),SI(l+6)),g.closePath(),g.fillStyle="rgba(0, 0, 0, .45)",g.fill(),g.restore()}error(I){const{ctx:g}=this,{x:C,y:i,width:e}=I,A=C+e-1;g.save(),g.beginPath(),g.moveTo(SI(A-8),SI(i-1)),g.lineTo(SI(A),SI(i-1)),g.lineTo(SI(A),SI(i+8)),g.closePath(),g.fillStyle="rgba(255, 0, 0, .65)",g.fill(),g.restore()}frozen(I){const{ctx:g}=this,{x:C,y:i,width:e}=I,A=C+e-1;g.save(),g.beginPath(),g.moveTo(SI(A-8),SI(i-1)),g.lineTo(SI(A),SI(i-1)),g.lineTo(SI(A),SI(i+8)),g.closePath(),g.fillStyle="rgba(0, 255, 0, .85)",g.fill(),g.restore()}rect(I,g){const{ctx:C}=this,{x:i,y:e,width:A,height:s,bgcolor:l}=I;C.save(),C.beginPath(),C.fillStyle=l||"#fff",C.rect(Xr(i+1),Xr(e+1),SI(A-2),SI(s-2)),C.clip(),C.fill(),g(),C.restore()}}const Rq=[{key:"Arial",title:"Arial"},{key:"Helvetica",title:"Helvetica"},{key:"Source Sans Pro",title:"Source Sans Pro"},{key:"Comic Sans MS",title:"Comic Sans MS"},{key:"Courier New",title:"Courier New"},{key:"Verdana",title:"Verdana"},{key:"Lato",title:"Lato"}],LD=[{pt:7.5,px:10},{pt:8,px:11},{pt:9,px:12},{pt:10,px:13},{pt:10.5,px:14},{pt:11,px:15},{pt:12,px:16},{pt:14,px:18.7},{pt:15,px:20},{pt:16,px:21.3},{pt:18,px:24},{pt:22,px:29.3},{pt:24,px:32},{pt:26,px:34.7},{pt:36,px:48},{pt:42,px:56}];function Wug(t){for(let I=0;I<LD.length;I+=1){const g=LD[I];if(g.pt===t)return g.px}return t}const yug=t=>{const I=[],g=[];let C=[],i=0,e="",A=1,s="";for(let l=0;l<t.length;l+=1){const n=t.charAt(l);if(n!==" "){if(n>="a"&&n<="z")C.push(n.toUpperCase());else if(n>="0"&&n<="9"||n>="A"&&n<="Z"||n===".")C.push(n);else if(n==='"'){for(l+=1;t.charAt(l)!=='"';)C.push(t.charAt(l)),l+=1;g.push(`"${C.join("")}`),C=[]}else if(n==="-"&&/[+\-*/,(]/.test(s))C.push(n);else{if(n!=="("&&C.length>0&&g.push(C.join("")),n===")"){let a=I.pop();if(i===2)try{const[d,o]=ka(g.pop()),[c,r]=ka(g.pop());let h=0;for(let b=c;b<=d;b+=1)for(let u=r;u<=o;u+=1)g.push(zl(b,u)),h+=1;g.push([a,h])}catch{}else if(i===1||i===3)i===3&&g.push(e),g.push([a,A]),A=1;else for(;a!=="("&&(g.push(a),!(I.length<=0));)a=I.pop();i=0}else if(n==="="||n===">"||n==="<"){const a=t.charAt(l+1);e=n,(a==="="||a==="-")&&(e+=a,l+=1),i=3}else if(n===":")i=2;else if(n===",")i===3&&g.push(e),i=1,A+=1;else if(n==="("&&C.length>0)I.push(C.join(""));else{if(I.length>0&&(n==="+"||n==="-")){let a=I[I.length-1];if(a!=="("&&g.push(I.pop()),a==="*"||a==="/")for(;I.length>0&&(a=I[I.length-1],a!=="(");)g.push(I.pop())}else if(I.length>0){const a=I[I.length-1];(a==="*"||a==="/")&&g.push(I.pop())}I.push(n)}C=[]}s=n}}for(C.length>0&&g.push(C.join(""));I.length>0;)g.push(I.pop());return g},Yug=(t,I)=>{const[g]=t;let C=t;if(g==='"')return t.substring(1);let i=1;if(g==="-"&&(C=t.substring(1),i=-1),C[0]>="0"&&C[0]<="9")return i*Number(C);const[e,A]=ka(C);return i*I(e,A)},Nug=(t,I,g,C)=>{const i=[];for(let e=0;e<t.length;e+=1){const A=t[e],s=A[0];if(A==="+"){const l=i.pop();i.push(Jo("+",i.pop(),l))}else if(A==="-")if(i.length===1){const l=i.pop();i.push(Jo("*",l,-1))}else{const l=i.pop();i.push(Jo("-",i.pop(),l))}else if(A==="*")i.push(Jo("*",i.pop(),i.pop()));else if(A==="/"){const l=i.pop();i.push(Jo("/",i.pop(),l))}else if(s==="="||s===">"||s==="<"){let l=i.pop();Number.isNaN(l)||(l=Number(l));let n=i.pop();Number.isNaN(n)||(n=Number(n));let a=!1;s==="="?a=n===l:A===">"?a=n>l:A===">="?a=n>=l:A==="<"?a=n<l:A==="<="&&(a=n<=l),i.push(a)}else if(Array.isArray(A)){const[l,n]=A,a=[];for(let d=0;d<n;d+=1)a.push(i.pop());i.push(I[l].render(a.reverse()))}else{if(C.includes(A))return 0;(s>="a"&&s<="z"||s>="A"&&s<="Z")&&C.push(A),i.push(Yug(A,g)),C.pop()}}return i[0]},$tg=(t,I,g,C=[])=>{if(t[0]==="="){const i=yug(t.substring(1));return i.length<=0?t:Nug(i,I,(e,A)=>$tg(g(e,A),I,g,C),C)}return t},Vug={render:$tg},D9=[{key:"SUM",title:PI("formula.sum"),render:t=>t.reduce((I,g)=>Jo("+",I,g),0)},{key:"AVERAGE",title:PI("formula.average"),render:t=>t.reduce((I,g)=>Number(I)+Number(g),0)/t.length},{key:"MAX",title:PI("formula.max"),render:t=>Math.max(...t.map(I=>Number(I)))},{key:"MIN",title:PI("formula.min"),render:t=>Math.min(...t.map(I=>Number(I)))},{key:"IF",title:PI("formula._if"),render:([t,I,g])=>t?I:g},{key:"AND",title:PI("formula.and"),render:t=>t.every(I=>I)},{key:"OR",title:PI("formula.or"),render:t=>t.some(I=>I)},{key:"CONCAT",title:PI("formula.concat"),render:t=>t.join("")}],Mug=D9,gig={};D9.forEach(t=>{gig[t.key]=t});const Sr=t=>t,TY=t=>{if(/^(-?\d*.?\d*)$/.test(t)){const I=Number(t).toFixed(2).toString(),[g,...C]=I.split("\\.");return[g.replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,"),...C]}return t},tm=[{key:"normal",title:PI("format.normal"),type:"string",render:Sr},{key:"text",title:PI("format.text"),type:"string",render:Sr},{key:"number",title:PI("format.number"),type:"number",label:"1,000.12",render:TY},{key:"percent",title:PI("format.percent"),type:"number",label:"10.12%",render:t=>`${t}%`},{key:"rmb",title:PI("format.rmb"),type:"number",label:"¥10.00",render:t=>`¥${TY(t)}`},{key:"usd",title:PI("format.usd"),type:"number",label:"$10.00",render:t=>`$${TY(t)}`},{key:"eur",title:PI("format.eur"),type:"number",label:"€10.00",render:t=>`€${TY(t)}`},{key:"date",title:PI("format.date"),type:"date",label:"26/09/2008",render:Sr},{key:"time",title:PI("format.time"),type:"date",label:"15:59:00",render:Sr},{key:"datetime",title:PI("format.datetime"),type:"date",label:"26/09/2008 15:59:00",render:Sr},{key:"duration",title:PI("format.duration"),type:"date",label:"24:01:00",render:Sr}],Iig={};tm.forEach(t=>{Iig[t.key]=t});const Rug=5,fug={fillStyle:"#f4f5f8"},Hug={fillStyle:"#fff",lineWidth:S9,strokeStyle:"#e6e6e6"};function Xug(){return{textAlign:"center",textBaseline:"middle",font:`500 ${SI(12)}px Source Sans Pro`,fillStyle:"#585757",lineWidth:S9(),strokeStyle:"#e6e6e6"}}function Cig(t,I,g,C=0){const{left:i,top:e,width:A,height:s}=t.cellRect(I,g);return new Bug(i,e+C,A,s,Rug)}function dV(t,I,g,C,i=0){const{sortedRowMap:e,rows:A,cols:s}=I;if(A.isHide(g)||s.isHide(C))return;let l=g;e.has(g)&&(l=e.get(g));const n=I.getCell(l,C);if(n===null)return;let a=!1;"editable"in n&&n.editable===!1&&(a=!0);const d=I.getCellStyleOrDefault(l,C),o=Cig(I,g,C,i);o.bgcolor=d.bgcolor,d.border!==void 0&&(o.setBorders(d.border),t.strokeBorders(o)),t.rect(o,()=>{let c="";I.settings.evalPaused?c=n.text||"":c=Vug.render(n.text||"",gig,(b,u)=>I.getCellTextOrDefault(u,b)),d.format&&(c=Iig[d.format].render(c));const r=Object.assign({},d.font);r.size=Wug(r.size),t.text(c,o,{align:d.align,valign:d.valign,font:r,color:d.color,strike:d.strike,underline:d.underline},d.textwrap),I.validations.getError(g,C)&&t.error(o),a&&t.frozen(o)})}function Sug(t){const{data:I,draw:g}=this;if(t){const{autoFilter:C}=I;if(!C.active())return;const i=C.hrange();t.intersects(i)&&i.each((e,A)=>{const s=Cig(I,e,A);g.dropdown(s)})}}function xY(t,I,g,C,i){const{draw:e,data:A}=this;e.save(),e.translate(I,g).translate(C,i);const{exceptRowSet:s}=A,l=d=>{const o=s.has(d);if(o){const c=A.rows.getHeight(d);e.translate(0,-c)}return!o},n=A.exceptRowTotalHeight(t.sri,t.eri);e.save(),e.translate(0,-n),t.each((d,o)=>{dV(e,A,d,o)},d=>l(d)),e.restore();const a=new Set;e.save(),e.translate(0,-n),A.eachMergesInView(t,({sri:d,sci:o,eri:c})=>{if(!s.has(d))dV(e,A,d,o);else if(!a.has(d)){a.add(d);const r=A.rows.sumHeight(d,c+1);e.translate(0,-r)}}),e.restore(),Sug.call(this,t),e.restore()}function fq(t,I,g,C){const{draw:i}=this;i.save(),i.attr({fillStyle:"rgba(75, 137, 255, 0.08)"}).fillRect(t,I,g,C),i.restore()}function jY(t,I,g,C,i,e){const{draw:A,data:s}=this,l=I.h,n=I.w,a=e+C,d=i+g;A.save(),A.attr(fug),(t==="all"||t==="left")&&A.fillRect(0,a,g,l),(t==="all"||t==="top")&&A.fillRect(d,0,n,C);const{sri:o,sci:c,eri:r,eci:h}=s.selector.range;A.attr(Xug()),(t==="all"||t==="left")&&(s.rowEach(I.sri,I.eri,(b,u,m)=>{const Z=a+u,p=b;A.line([0,Z],[g,Z]),o<=p&&p<r+1&&fq.call(this,0,Z,g,m),A.fillText(p+1,g/2,Z+m/2),b>0&&s.rows.isHide(b-1)&&(A.save(),A.attr({strokeStyle:"#c6c6c6"}),A.line([5,Z+5],[g-5,Z+5]),A.restore())}),A.line([0,l+a],[g,l+a]),A.line([g,a],[g,l+a])),(t==="all"||t==="top")&&(s.colEach(I.sci,I.eci,(b,u,m)=>{const Z=d+u,p=b;A.line([Z,0],[Z,C]),c<=p&&p<h+1&&fq.call(this,Z,0,m,C),A.fillText(Jtg(p),Z+m/2,C/2),b>0&&s.cols.isHide(b-1)&&(A.save(),A.attr({strokeStyle:"#c6c6c6"}),A.line([Z+5,5],[Z+5,C-5]),A.restore())}),A.line([n+d,0],[n+d,C]),A.line([0,C],[n+d,C])),A.restore()}function Dug(t,I){const{draw:g}=this;g.save(),g.attr({fillStyle:"#f4f5f8"}).fillRect(0,0,t,I),g.restore()}function QY({sri:t,sci:I,eri:g,eci:C,w:i,h:e},A,s,l,n){const{draw:a,data:d}=this,{settings:o}=d;if(a.save(),a.attr(Hug).translate(A+l,s+n),!o.showGrid){a.restore();return}d.rowEach(t,g,(c,r,h)=>{c!==t&&a.line([0,r],[i,r]),c===g&&a.line([0,r+h],[i,r+h])}),d.colEach(I,C,(c,r,h)=>{c!==I&&a.line([r,0],[r,e]),c===C&&a.line([r+h,0],[r+h,e])}),a.restore()}function Kug(t,I,g,C){const{draw:i,data:e}=this,A=e.viewWidth()-t,s=e.viewHeight()-I;i.save().translate(t,I).attr({strokeStyle:"rgba(75, 137, 255, .6)"}),i.line([0,C],[A,C]),i.line([g,0],[g,s]),i.restore()}class Fug{constructor(I,g){this.el=I,this.draw=new qtg(I,g.viewWidth(),g.viewHeight()),this.data=g}resetData(I){this.data=I,this.render()}render(){const{data:I}=this,{rows:g,cols:C}=I,i=C.indexWidth,e=g.height;this.draw.resize(I.viewWidth(),I.viewHeight()),this.clear();const A=I.viewRange(),s=I.freezeTotalWidth(),l=I.freezeTotalHeight(),{x:n,y:a}=I.scroll;QY.call(this,A,i,e,s,l),xY.call(this,A,i,e,-n,-a),jY.call(this,"all",A,i,e,s,l),Dug.call(this,i,e);const[d,o]=I.freeze;if(d>0||o>0){if(d>0){const r=A.clone();r.sri=0,r.eri=d-1,r.h=l,QY.call(this,r,i,e,s,0),xY.call(this,r,i,e,-n,0),jY.call(this,"top",r,i,e,s,0)}if(o>0){const r=A.clone();r.sci=0,r.eci=o-1,r.w=s,QY.call(this,r,i,e,0,l),jY.call(this,"left",r,i,e,0,l),xY.call(this,r,i,e,0,-a)}const c=I.freezeViewRange();QY.call(this,c,i,e,0,0),jY.call(this,"all",c,i,e,0,0),xY.call(this,c,i,e,0,0),Kug.call(this,i,e,s,l)}}clear(){this.draw.clear()}}const FN=[["A3",11.69,16.54],["A4",8.27,11.69],["A5",5.83,8.27],["B4",9.84,13.9],["B5",6.93,9.84]],vD=["landscape","portrait"];function rV(t){return parseInt(96*t,10)}function Hq(t){t==="cancel"?this.el.hide():this.toPrint()}function kug(t){const{paper:I}=this,{value:g}=t.target,C=FN[g];I.w=rV(C[1]),I.h=rV(C[2]),this.preview()}function zug(t){const{paper:I}=this,{value:g}=t.target,C=vD[g];I.orientation=C,this.preview()}let Jug=class{constructor(I){this.paper={w:rV(FN[0][1]),h:rV(FN[0][2]),padding:50,orientation:vD[0],get width(){return this.orientation==="landscape"?this.h:this.w},get height(){return this.orientation==="landscape"?this.w:this.h}},this.data=I,this.el=Yg("div",`${Lg}-print`).children(Yg("div",`${Lg}-print-bar`).children(Yg("div","-title").child("Print settings"),Yg("div","-right").children(Yg("div",`${Lg}-buttons`).children(new gd("cancel").on("click",Hq.bind(this,"cancel")),new gd("next","primary").on("click",Hq.bind(this,"next"))))),Yg("div",`${Lg}-print-content`).children(this.contentEl=Yg("div","-content"),Yg("div","-sider").child(Yg("form","").children(Yg("fieldset","").children(Yg("label","").child(`${ot("print.size")}`),Yg("select","").children(...FN.map((g,C)=>Yg("option","").attr("value",C).child(`${g[0]} ( ${g[1]}''x${g[2]}'' )`))).on("change",kug.bind(this))),Yg("fieldset","").children(Yg("label","").child(`${ot("print.orientation")}`),Yg("select","").children(...vD.map((g,C)=>Yg("option","").attr("value",C).child(`${ot("print.orientations")[C]}`))).on("change",zug.bind(this))))))).hide()}resetData(I){this.data=I}preview(){const{data:I,paper:g}=this,{width:C,height:i,padding:e}=g,A=C-e*2,s=i-e*2,l=I.contentRange(),n=parseInt(l.h/s,10)+1,a=A/l.w;let d=e;const o=e;a>1&&(d+=(A-l.w)/2);let c=0,r=0;this.contentEl.html(""),this.canvases=[];const h={sri:0,sci:0,eri:0,eci:0};for(let b=0;b<n;b+=1){let u=0,m=0;const Z=Yg("div",`${Lg}-canvas-card`),p=Yg("canvas",`${Lg}-canvas`);this.canvases.push(p.el);const Y=new qtg(p.el,C,i);for(Y.save(),Y.translate(d,o),a<1&&Y.scale(a,a);c<=l.eri;c+=1){const X=I.rows.getHeight(c);if(u+=X,u<s)for(let H=0;H<=l.eci;H+=1)dV(Y,I,c,H,r),h.eci=H;else{m=-(u-X);break}}h.eri=c,Y.restore(),Y.save(),Y.translate(d,o),a<1&&Y.scale(a,a);const R=r;I.eachMergesInView(h,({sri:X,sci:H})=>{dV(Y,I,X,H,R)}),Y.restore(),h.sri=h.eri,h.sci=h.eci,r+=m,this.contentEl.child(Yg("div",`${Lg}-canvas-card-wraper`).child(Z.child(p)))}this.el.show()}toPrint(){this.el.hide();const{paper:I}=this,g=Yg("iframe","").hide(),{el:C}=g;window.document.body.appendChild(C);const{contentWindow:i}=C,e=i.document,A=document.createElement("style");A.innerHTML=`
- @page { size: ${I.width}px ${I.height}px; };
- canvas {
- page-break-before: auto;
- page-break-after: always;
- image-rendering: pixelated;
- };
- `,e.head.appendChild(A),this.canvases.forEach(s=>{const l=s.cloneNode(!1);l.getContext("2d").drawImage(s,0,0),e.body.appendChild(l)}),i.print()}};const Lug=[{key:"copy",title:PI("contextmenu.copy"),label:"Ctrl+C"},{key:"cut",title:PI("contextmenu.cut"),label:"Ctrl+X"},{key:"paste",title:PI("contextmenu.paste"),label:"Ctrl+V"},{key:"paste-value",title:PI("contextmenu.pasteValue"),label:"Ctrl+Shift+V"},{key:"paste-format",title:PI("contextmenu.pasteFormat"),label:"Ctrl+Alt+V"},{key:"divider"},{key:"insert-row",title:PI("contextmenu.insertRow")},{key:"insert-column",title:PI("contextmenu.insertColumn")},{key:"divider"},{key:"delete-row",title:PI("contextmenu.deleteRow")},{key:"delete-column",title:PI("contextmenu.deleteColumn")},{key:"delete-cell-text",title:PI("contextmenu.deleteCellText")},{key:"hide",title:PI("contextmenu.hide")},{key:"divider"},{key:"validation",title:PI("contextmenu.validation")},{key:"divider"},{key:"cell-printable",title:PI("contextmenu.cellprintable")},{key:"cell-non-printable",title:PI("contextmenu.cellnonprintable")},{key:"divider"},{key:"cell-editable",title:PI("contextmenu.celleditable")},{key:"cell-non-editable",title:PI("contextmenu.cellnoneditable")}];function vug(t){return t.key==="divider"?Yg("div",`${Lg}-item divider`):Yg("div",`${Lg}-item`).on("click",()=>{this.itemClick(t.key),this.hide()}).children(t.title(),Yg("div","label").child(t.label||""))}function Tug(){return Lug.map(t=>vug.call(this,t))}let xug=class{constructor(I,g=!1){this.menuItems=Tug.call(this),this.el=Yg("div",`${Lg}-contextmenu`).children(...this.menuItems).hide(),this.viewFn=I,this.itemClick=()=>{},this.isHide=g,this.setMode("range")}setMode(I){const g=this.menuItems[12];I==="row-col"?g.show():g.hide()}hide(){const{el:I}=this;I.hide(),B0(I)}setPosition(I,g){if(this.isHide)return;const{el:C}=this,{width:i}=C.show().offset(),e=this.viewFn(),A=e.height/2;let s=I;e.width-I<=i&&(s-=i),C.css("left",`${s}px`),g>A?C.css("bottom",`${e.height-g}px`).css("max-height",`${g}px`).css("top","auto"):C.css("top",`${g}px`).css("max-height",`${e.height-g}px`).css("bottom","auto"),AG(C)}};function jug(t,I){if(I.classList.contains("active"))return;const{left:g,top:C,width:i,height:e}=I.getBoundingClientRect(),A=Yg("div",`${Lg}-tooltip`).html(t).show();document.body.appendChild(A.el);const s=A.box();A.css("left",`${g+i/2-s.width/2}px`).css("top",`${C+e+2}px`),ji(I,"mouseleave",()=>{document.body.contains(A.el)&&document.body.removeChild(A.el)}),ji(I,"click",()=>{document.body.contains(A.el)&&document.body.removeChild(A.el)})}class K9{constructor(I,g,C){this.tip=ot(`toolbar.${I.replace(/-[a-z]/g,i=>i[1].toUpperCase())}`),g&&(this.tip+=` (${g})`),this.tag=I,this.shortcut=g,this.value=C,this.el=this.element(),this.change=()=>{}}element(){const{tip:I}=this;return Yg("div",`${Lg}-toolbar-btn`).on("mouseenter",g=>{jug(I,g.target)}).attr("data-tooltip",I)}setState(){}}class Rs extends K9{dropdown(){}getValue(I){return I}element(){const{tag:I}=this;return this.dd=this.dropdown(),this.dd.change=g=>this.change(I,this.getValue(g)),super.element().child(this.dd)}setState(I){I&&(this.value=I,this.dd.setTitle(I))}}class fs extends ed{constructor(I,g,C,i,...e){super("div",`${Lg}-dropdown ${i}`),this.title=I,this.change=()=>{},this.headerClick=()=>{},typeof I=="string"?this.title=Yg("div",`${Lg}-dropdown-title`).child(I):C&&this.title.addClass("arrow-left"),this.contentEl=Yg("div",`${Lg}-dropdown-content`).css("width",g).hide(),this.setContentChildren(...e),this.headerEl=Yg("div",`${Lg}-dropdown-header`),this.headerEl.on("click",()=>{this.contentEl.css("display")!=="block"?this.show():this.hide()}).children(this.title,C?Yg("div",`${Lg}-icon arrow-right`).child(Yg("div",`${Lg}-icon-img arrow-down`)):""),this.children(this.headerEl,this.contentEl)}setContentChildren(...I){this.contentEl.html(""),I.length>0&&this.contentEl.children(...I)}setTitle(I){this.title.html(I),this.hide()}show(){const{contentEl:I}=this;I.show(),this.parent().active(),AG(this.parent(),()=>{this.hide()})}hide(){this.parent().active(!1),this.contentEl.hide(),B0(this.parent())}}function Qug(t){return Yg("div",`${Lg}-item`).child(new hi(t))}class tig extends fs{constructor(I,g){const C=new hi(`align-${g}`),i=I.map(e=>Qug(`align-${e}`).on("click",()=>{this.setTitle(e),this.change(e)}));super(C,"auto",!0,"bottom-left",...i)}setTitle(I){this.title.setName(`align-${I}`),this.hide()}}class Oug extends Rs{constructor(I){super("align","",I)}dropdown(){const{value:I}=this;return new tig(["left","center","right"],I)}}class Uug extends Rs{constructor(I){super("valign","",I)}dropdown(){const{value:I}=this;return new tig(["top","middle","bottom"],I)}}class Ul extends K9{element(){const{tag:I}=this;return super.element().child(new hi(I)).on("click",()=>this.click())}click(){this.change(this.tag,this.toggle())}setState(I){this.el.active(I)}toggle(){return this.el.toggle()}active(){return this.el.hasClass("active")}}class Eug extends Ul{constructor(){super("autofilter")}setState(){}}class Pug extends Ul{constructor(){super("font-bold","Ctrl+B")}}class _ug extends Ul{constructor(){super("font-italic","Ctrl+I")}}class qug extends Ul{constructor(){super("strike","Ctrl+U")}}class $ug extends Ul{constructor(){super("underline","Ctrl+U")}}const gmg=["#ffffff","#000100","#e7e5e6","#445569","#5b9cd6","#ed7d31","#a5a5a5","#ffc001","#4371c6","#71ae47"],Img=[["#f2f2f2","#7f7f7f","#d0cecf","#d5dce4","#deeaf6","#fce5d5","#ededed","#fff2cd","#d9e2f3","#e3efd9"],["#d8d8d8","#595959","#afabac","#adb8ca","#bdd7ee","#f7ccac","#dbdbdb","#ffe59a","#b3c6e7","#c5e0b3"],["#bfbfbf","#3f3f3f","#756f6f","#8596b0","#9cc2e6","#f4b184","#c9c9c9","#fed964","#8eaada","#a7d08c"],["#a5a5a5","#262626","#3a3839","#333f4f","#2e75b5","#c45a10","#7b7b7b","#bf8e01","#2f5596","#538136"],["#7f7f7f","#0c0c0c","#171516","#222a35","#1f4e7a","#843c0a","#525252","#7e6000","#203864","#365624"]],Cmg=["#c00000","#fe0000","#fdc101","#ffff01","#93d051","#00b04e","#01b0f1","#0170c1","#012060","#7030a0"];function yX(t){return Yg("td","").child(Yg("div",`${Lg}-color-palette-cell`).on("click.stop",()=>this.change(t)).css("background-color",t))}class tmg{constructor(){this.el=Yg("div",`${Lg}-color-palette`),this.change=()=>{};const I=Yg("table","").children(Yg("tbody","").children(Yg("tr",`${Lg}-theme-color-placeholders`).children(...gmg.map(g=>yX.call(this,g))),...Img.map(g=>Yg("tr",`${Lg}-theme-colors`).children(...g.map(C=>yX.call(this,C)))),Yg("tr",`${Lg}-standard-colors`).children(...Cmg.map(g=>yX.call(this,g)))));this.el.child(I)}}class F9 extends fs{constructor(I,g){const C=new hi(I).css("height","16px").css("border-bottom",`3px solid ${g}`),i=new tmg;i.change=e=>{this.setTitle(e),this.change(e)},super(C,"auto",!1,"bottom-left",i.el)}setTitle(I){this.title.css("border-color",I),this.hide()}}const img=[["thin",'<svg xmlns="http://www.w3.org/2000/svg" width="50" height="1" style="user-select: none;"><line x1="0" y1="0.5" x2="50" y2="0.5" stroke-width="1" stroke="black" style="user-select: none;"></line></svg>'],["medium",'<svg xmlns="http://www.w3.org/2000/svg" width="50" height="2" style="user-select: none;"><line x1="0" y1="1.0" x2="50" y2="1.0" stroke-width="2" stroke="black" style="user-select: none;"></line></svg>'],["thick",'<svg xmlns="http://www.w3.org/2000/svg" width="50" height="3" style="user-select: none;"><line x1="0" y1="1.5" x2="50" y2="1.5" stroke-width="3" stroke="black" style="user-select: none;"></line></svg>'],["dashed",'<svg xmlns="http://www.w3.org/2000/svg" width="50" height="1" style="user-select: none;"><line x1="0" y1="0.5" x2="50" y2="0.5" stroke-width="1" stroke="black" stroke-dasharray="2" style="user-select: none;"></line></svg>'],["dotted",'<svg xmlns="http://www.w3.org/2000/svg" width="50" height="1" style="user-select: none;"><line x1="0" y1="0.5" x2="50" y2="0.5" stroke-width="1" stroke="black" stroke-dasharray="1" style="user-select: none;"></line></svg>']];class emg extends fs{constructor(I){const g=new hi("line-type");let C=0;const i=img.map((e,A)=>Yg("div",`${Lg}-item state ${I===e[0]?"checked":""}`).on("click",()=>{i[C].toggle("checked"),i[A].toggle("checked"),C=A,this.hide(),this.change(e)}).child(Yg("div",`${Lg}-line-type`).html(e[1])));super(g,"auto",!1,"bottom-left",...i)}}function Xq(...t){return Yg("table","").child(Yg("tbody","").children(...t))}function Sq(t){return Yg("td","").child(Yg("div",`${Lg}-border-palette-cell`).child(new hi(`border-${t}`)).on("click",()=>{this.mode=t;const{mode:I,style:g,color:C}=this;this.change({mode:I,style:g,color:C})}))}class Amg{constructor(){this.color="#000",this.style="thin",this.mode="all",this.change=()=>{},this.ddColor=new F9("line-color",this.color),this.ddColor.change=g=>{this.color=g},this.ddType=new emg(this.style),this.ddType.change=([g])=>{this.style=g},this.el=Yg("div",`${Lg}-border-palette`);const I=Xq(Yg("tr","").children(Yg("td",`${Lg}-border-palette-left`).child(Xq(Yg("tr","").children(...["all","inside","horizontal","vertical","outside"].map(g=>Sq.call(this,g))),Yg("tr","").children(...["left","top","right","bottom","none"].map(g=>Sq.call(this,g))))),Yg("td",`${Lg}-border-palette-right`).children(Yg("div",`${Lg}-toolbar-btn`).child(this.ddColor.el),Yg("div",`${Lg}-toolbar-btn`).child(this.ddType.el))));this.el.child(I)}}class smg extends fs{constructor(){const I=new hi("border-all"),g=new Amg;g.change=C=>{this.change(C),this.hide()},super(I,"auto",!1,"bottom-left",g.el)}}class lmg extends Rs{constructor(){super("border")}dropdown(){return new smg}}class gM extends K9{element(){return super.element().child(new hi(this.tag)).on("click",()=>this.change(this.tag))}setState(I){this.el.disabled(I)}}class nmg extends gM{constructor(){super("clearformat")}}class amg extends Ul{constructor(){super("paintformat")}setState(){}}class omg extends Rs{constructor(I){super("color",void 0,I)}dropdown(){const{tag:I,value:g}=this;return new F9(I,g)}}class cmg extends Rs{constructor(I){super("bgcolor",void 0,I)}dropdown(){const{tag:I,value:g}=this;return new F9(I,g)}}class dmg extends fs{constructor(){const I=LD.map(g=>Yg("div",`${Lg}-item`).on("click",()=>{this.setTitle(`${g.pt}`),this.change(g)}).child(`${g.pt}`));super("10","60px",!0,"bottom-left",...I)}}let rmg=class extends Rs{constructor(){super("font-size")}getValue(I){return I.pt}dropdown(){return new dmg}};class hmg extends fs{constructor(){const I=Rq.map(g=>Yg("div",`${Lg}-item`).on("click",()=>{this.setTitle(g.title),this.change(g)}).child(g.title));super(Rq[0].title,"160px",!0,"bottom-left",...I)}}class bmg extends Rs{constructor(){super("font-name")}getValue(I){return I.key}dropdown(){return new hmg}}class umg extends fs{constructor(){let I=tm.slice(0);I.splice(2,0,{key:"divider"}),I.splice(8,0,{key:"divider"}),I=I.map(g=>{const C=Yg("div",`${Lg}-item`);return g.key==="divider"?C.addClass("divider"):(C.child(g.title()).on("click",()=>{this.setTitle(g.title()),this.change(g)}),g.label&&C.child(Yg("div","label").html(g.label))),C}),super("Normal","220px",!0,"bottom-left",...I)}setTitle(I){for(let g=0;g<tm.length;g+=1)tm[g].key===I&&this.title.html(tm[g].title());this.hide()}}let mmg=class extends Rs{constructor(){super("format")}getValue(I){return I.key}dropdown(){return new umg}};class Zmg extends fs{constructor(){const I=D9.map(g=>Yg("div",`${Lg}-item`).on("click",()=>{this.hide(),this.change(g)}).child(g.key));super(new hi("formula"),"180px",!0,"bottom-left",...I)}}class Gmg extends Rs{constructor(){super("formula")}getValue(I){return I.key}dropdown(){return new Zmg}}class wmg extends Ul{constructor(){super("freeze")}}class pmg extends Ul{constructor(){super("merge")}setState(I,g){this.el.active(I).disabled(g)}}class Bmg extends gM{constructor(){super("redo","Ctrl+Y")}}class Wmg extends gM{constructor(){super("undo","Ctrl+Z")}}class ymg extends gM{constructor(){super("print","Ctrl+P")}}class Ymg extends Ul{constructor(){super("textwrap")}}let Nmg=class extends fs{constructor(){const I=new hi("ellipsis"),g=Yg("div",`${Lg}-toolbar-more`);super(I,"auto",!1,"bottom-right",g),this.moreBtns=g,this.contentEl.css("max-width","420px")}};class Vmg extends Rs{constructor(){super("more"),this.el.hide()}dropdown(){return new Nmg}show(){this.el.show()}hide(){this.el.hide()}}function Dr(){return Yg("div",`${Lg}-toolbar-divider`)}function Mmg(){this.btns2=[],this.items.forEach(t=>{if(Array.isArray(t))t.forEach(({el:I})=>{const g=I.box(),{marginLeft:C,marginRight:i}=I.computedStyle();this.btns2.push([I,g.width+parseInt(C,10)+parseInt(i,10)])});else{const I=t.box(),{marginLeft:g,marginRight:C}=t.computedStyle();this.btns2.push([t,I.width+parseInt(g,10)+parseInt(C,10)])}})}function Dq(){const{el:t,btns:I,moreEl:g,btns2:C}=this,{moreBtns:i,contentEl:e}=g.dd;t.css("width",`${this.widthFn()-60}px`);const A=t.box();let s=160,l=12;const n=[],a=[];C.forEach(([d,o],c)=>{s+=o,c===C.length-1||s<A.width?n.push(d):(l+=o,a.push(d))}),I.html("").children(...n),i.html("").children(...a),e.css("width",`${l}px`),a.length>0?g.show():g.hide()}class Rmg{constructor(I,g,C=!1){this.data=I,this.change=()=>{},this.widthFn=g,this.isHide=C;const i=I.defaultStyle();this.items=[[this.undoEl=new Wmg,this.redoEl=new Bmg,new ymg,this.paintformatEl=new amg,this.clearformatEl=new nmg],Dr(),[this.formatEl=new mmg],Dr(),[this.fontEl=new bmg,this.fontSizeEl=new rmg],Dr(),[this.boldEl=new Pug,this.italicEl=new _ug,this.underlineEl=new $ug,this.strikeEl=new qug,this.textColorEl=new omg(i.color)],Dr(),[this.fillColorEl=new cmg(i.bgcolor),this.borderEl=new lmg,this.mergeEl=new pmg],Dr(),[this.alignEl=new Oug(i.align),this.valignEl=new Uug(i.valign),this.textwrapEl=new Ymg],Dr(),[this.freezeEl=new wmg,this.autofilterEl=new Eug,this.formulaEl=new Gmg,this.moreEl=new Vmg]],this.el=Yg("div",`${Lg}-toolbar`),this.btns=Yg("div",`${Lg}-toolbar-btns`),this.items.forEach(e=>{Array.isArray(e)?e.forEach(A=>{this.btns.child(A.el),A.change=(...s)=>{this.change(...s)}}):this.btns.child(e.el)}),this.el.child(this.btns),C?this.el.hide():(this.reset(),setTimeout(()=>{Mmg.call(this),Dq.call(this)},0),ji(window,"resize",()=>{Dq.call(this)}))}paintformatActive(){return this.paintformatEl.active()}paintformatToggle(){this.paintformatEl.toggle()}trigger(I){this[`${I}El`].click()}resetData(I){this.data=I,this.reset()}reset(){if(this.isHide)return;const{data:I}=this,g=I.getSelectedCellStyle();this.undoEl.setState(!I.canUndo()),this.redoEl.setState(!I.canRedo()),this.mergeEl.setState(I.canUnmerge(),!I.selector.multiple()),this.autofilterEl.setState(!I.canAutofilter());const{font:C,format:i}=g;this.formatEl.setState(i),this.fontEl.setState(C.name),this.fontSizeEl.setState(C.size),this.boldEl.setState(C.bold),this.italicEl.setState(C.italic),this.underlineEl.setState(g.underline),this.strikeEl.setState(g.strike),this.textColorEl.setState(g.color),this.fillColorEl.setState(g.bgcolor),this.alignEl.setState(g.align),this.valignEl.setState(g.valign),this.textwrapEl.setState(g.textwrap),this.freezeEl.setState(I.freezeIsActive())}}class fmg{constructor(I,g,C="600px"){this.title=I,this.el=Yg("div",`${Lg}-modal`).css("width",C).children(Yg("div",`${Lg}-modal-header`).children(new hi("close").on("click.stop",()=>this.hide()),this.title),Yg("div",`${Lg}-modal-content`).children(...g)).hide()}show(){this.dimmer=Yg("div",`${Lg}-dimmer active`),document.body.appendChild(this.dimmer.el);const{width:I,height:g}=this.el.show().box(),{clientHeight:C,clientWidth:i}=document.documentElement;this.el.offset({left:(i-I)/2,top:(C-g)/3}),window.xkeydownEsc=e=>{e.keyCode===27&&this.hide()},ji(window,"keydown",window.xkeydownEsc)}hide(){this.el.hide(),document.body.removeChild(this.dimmer.el),aV(window,"keydown",window.xkeydownEsc),delete window.xkeydownEsc}}class Er{constructor(I,g){this.vchange=()=>{},this.el=Yg("div",`${Lg}-form-input`),this.input=Yg("input","").css("width",I).on("input",C=>this.vchange(C)).attr("placeholder",g),this.el.child(this.input)}focus(){setTimeout(()=>{this.input.el.focus()},10)}hint(I){this.input.attr("placeholder",I)}val(I){return this.input.val(I)}}class YX{constructor(I,g,C,i=A=>A,e=()=>{}){this.key=I,this.getTitle=i,this.vchange=()=>{},this.el=Yg("div",`${Lg}-form-select`),this.suggest=new Ptg(g.map(A=>({key:A,title:this.getTitle(A)})),A=>{this.itemClick(A.key),e(A.key),this.vchange(A.key)},C,this.el),this.el.children(this.itemEl=Yg("div","input-text").html(this.getTitle(I)),this.suggest.el).on("click",()=>this.show())}show(){this.suggest.search("")}itemClick(I){this.key=I,this.itemEl.html(this.getTitle(I))}val(I){return I!==void 0?(this.key=I,this.itemEl.html(this.getTitle(I)),this):this.key}}const Hmg={number:/(^\d+$)|(^\d+(\.\d{0,4})?$)/,date:/^\d{4}-\d{1,2}-\d{1,2}$/};class vn{constructor(I,g,C,i){this.label="",this.rule=g,C&&(this.label=Yg("label","label").css("width",`${i}px`).html(C)),this.tip=Yg("div","tip").child("tip").hide(),this.input=I,this.input.vchange=()=>this.validate(),this.el=Yg("div",`${Lg}-form-field`).children(this.label,I.el,this.tip)}isShow(){return this.el.css("display")!=="none"}show(){this.el.show()}hide(){return this.el.hide(),this}val(I){return this.input.val(I)}hint(I){this.input.hint(I)}validate(){const{input:I,rule:g,tip:C,el:i}=this,e=I.val();return g.required&&/^\s*$/.test(e)?(C.html(ot("validation.required")),i.addClass("error"),!1):(g.type||g.pattern)&&!(g.pattern||Hmg[g.type]).test(e)?(C.html(ot("validation.notMatch")),i.addClass("error"),!1):(i.removeClass("error"),!0)}}const Kq=100;class Xmg extends fmg{constructor(){const I=new vn(new YX("cell",["cell"],"100%",n=>ot(`dataValidation.modeType.${n}`)),{required:!0},`${ot("dataValidation.range")}:`,Kq),g=new vn(new Er("120px","E3 or E3:F12"),{required:!0,pattern:/^([A-Z]{1,2}[1-9]\d*)(:[A-Z]{1,2}[1-9]\d*)?$/}),C=new vn(new YX("list",["list","number","date","phone","email"],"100%",n=>ot(`dataValidation.type.${n}`),n=>this.criteriaSelected(n)),{required:!0},`${ot("dataValidation.criteria")}:`,Kq),i=new vn(new YX("be",["be","nbe","eq","neq","lt","lte","gt","gte"],"160px",n=>ot(`dataValidation.operator.${n}`),n=>this.criteriaOperatorSelected(n)),{required:!0}).hide(),e=new vn(new Er("70px","10"),{required:!0}).hide(),A=new vn(new Er("70px","100"),{required:!0,type:"number"}).hide(),s=new vn(new Er("120px","a,b,c"),{required:!0}),l=new vn(new Er("70px","10"),{required:!0,type:"number"}).hide();super(ot("contextmenu.validation"),[Yg("div",`${Lg}-form-fields`).children(I.el,g.el),Yg("div",`${Lg}-form-fields`).children(C.el,i.el,e.el,A.el,l.el,s.el),Yg("div",`${Lg}-buttons`).children(new gd("cancel").on("click",()=>this.btnClick("cancel")),new gd("remove").on("click",()=>this.btnClick("remove")),new gd("save","primary").on("click",()=>this.btnClick("save")))]),this.mf=I,this.rf=g,this.cf=C,this.of=i,this.minvf=e,this.maxvf=A,this.vf=l,this.svf=s,this.change=()=>{}}showVf(I){const g=I==="date"?"2018-11-12":"10",{vf:C}=this;C.input.hint(g),C.show()}criteriaSelected(I){const{of:g,minvf:C,maxvf:i,vf:e,svf:A}=this;I==="date"||I==="number"?(g.show(),C.rule.type=I,i.rule.type=I,I==="date"?(C.hint("2018-11-12"),i.hint("2019-11-12")):(C.hint("10"),i.hint("100")),C.show(),i.show(),e.hide(),A.hide()):(I==="list"?A.show():A.hide(),e.hide(),g.hide(),C.hide(),i.hide())}criteriaOperatorSelected(I){if(!I)return;const{minvf:g,maxvf:C,vf:i}=this;if(I==="be"||I==="nbe")g.show(),C.show(),i.hide();else{const e=this.cf.val();i.rule.type=e,e==="date"?i.hint("2018-11-12"):i.hint("10"),i.show(),g.hide(),C.hide()}}btnClick(I){if(I==="cancel")this.hide();else if(I==="remove")this.change("remove"),this.hide();else if(I==="save"){const g=["mf","rf","cf","of","svf","vf","minvf","maxvf"];for(let l=0;l<g.length;l+=1){const n=this[g[l]];if(n.isShow()&&!n.validate())return}const C=this.mf.val(),i=this.rf.val(),e=this.cf.val(),A=this.of.val();let s=this.svf.val();(e==="number"||e==="date")&&(A==="be"||A==="nbe"?s=[this.minvf.val(),this.maxvf.val()]:s=this.vf.val()),this.change("save",C,i,{type:e,operator:A,required:!1,value:s}),this.hide()}}setValue(I){if(I){const{mf:g,rf:C,cf:i,of:e,svf:A,vf:s,minvf:l,maxvf:n}=this,{mode:a,ref:d,validator:o}=I,{type:c,operator:r,value:h}=o||{type:"list"};g.val(a||"cell"),C.val(d),i.val(c),e.val(r),Array.isArray(h)?(l.val(h[0]),n.val(h[1])):(A.val(h||""),s.val(h||"")),this.criteriaSelected(c),this.criteriaOperatorSelected(r)}this.show()}}function iig(t){return Yg("div",`${Lg}-item ${t}`)}function Fq(t){return iig("state").child(ot(`sort.${t}`)).on("click.stop",()=>this.itemClick(t))}function Smg(t){const{filterbEl:I,filterValues:g}=this;I.html(""),Object.keys(t).forEach((i,e)=>{const A=t[i],s=g.includes(i)?"checked":"";I.child(Yg("div",`${Lg}-item state ${s}`).on("click.stop",()=>this.filterClick(e,i)).children(i===""?ot("filter.empty"):i,Yg("div","label").html(`(${A})`)))})}function kq(){const{filterhEl:t,filterValues:I,values:g}=this;t.html(`${I.length} / ${g.length}`),t.checked(I.length===g.length)}class Dmg{constructor(){this.filterbEl=Yg("div",`${Lg}-body`),this.filterhEl=Yg("div",`${Lg}-header state`).on("click.stop",()=>this.filterClick(0,"all")),this.el=Yg("div",`${Lg}-sort-filter`).children(this.sortAscEl=Fq.call(this,"asc"),this.sortDescEl=Fq.call(this,"desc"),iig("divider"),Yg("div",`${Lg}-filter`).children(this.filterhEl,this.filterbEl),Yg("div",`${Lg}-buttons`).children(new gd("cancel").on("click",()=>this.btnClick("cancel")),new gd("ok","primary").on("click",()=>this.btnClick("ok")))).hide(),this.ci=null,this.sortDesc=null,this.values=null,this.filterValues=[]}btnClick(I){if(I==="ok"){const{ci:g,sort:C,filterValues:i}=this;this.ok&&this.ok(g,C,"in",i)}this.hide()}itemClick(I){this.sort=I;const{sortAscEl:g,sortDescEl:C}=this;g.checked(I==="asc"),C.checked(I==="desc")}filterClick(I,g){const{filterbEl:C,filterValues:i,values:e}=this,A=C.children();g==="all"?A.length===i.length?(this.filterValues=[],A.forEach(s=>Yg(s).checked(!1))):(this.filterValues=Array.from(e),A.forEach(s=>Yg(s).checked(!0))):Yg(A[I]).toggle("checked")?i.push(g):i.splice(i.findIndex(l=>l===g),1),kq.call(this)}set(I,g,C,i){this.ci=I;const{sortAscEl:e,sortDescEl:A}=this;i!==null?(this.sort=i.order,e.checked(i.asc()),A.checked(i.desc())):(this.sortDesc=null,e.checked(!1),A.checked(!1)),this.values=Object.keys(g),this.filterValues=C?Array.from(C.value):Object.keys(g),Smg.call(this,g,C),kq.call(this)}setOffset(I){this.el.offset(I).show();let g=1;AG(this.el,()=>{g<=0&&this.hide(),g-=1})}show(){this.el.show()}hide(){this.el.hide(),B0(this.el)}}function eig(t,I){const g=Yg("div",`${Lg}-toast`),C=Yg("div",`${Lg}-dimmer active`),i=()=>{document.body.removeChild(g.el),document.body.removeChild(C.el)};g.children(Yg("div",`${Lg}-toast-header`).children(new hi("close").on("click.stop",()=>i()),t),Yg("div",`${Lg}-toast-content`).html(I)),document.body.appendChild(g.el),document.body.appendChild(C.el);const{width:e,height:A}=g.box(),{clientHeight:s,clientWidth:l}=document.documentElement;g.offset({left:(l-e)/2,top:(s-A)/3})}function NX(t,I){let g;return(...C)=>{const i=this,e=C;g||(g=setTimeout(()=>{g=null,t.apply(i,e)},I))}}function Kmg(){const{data:t,verticalScrollbar:I,horizontalScrollbar:g}=this,{l:C,t:i,left:e,top:A,width:s,height:l}=t.getSelectedRect(),n=this.getTableOffset();if(Math.abs(e)+s>n.width)g.move({left:C+s-n.width});else{const a=t.freezeTotalWidth();e<a&&g.move({left:C-1-a})}if(Math.abs(A)+l>n.height)I.move({top:i+l-n.height-1});else{const a=t.freezeTotalHeight();A<a&&I.move({top:i-1-a})}}function Id(t,I,g,C=!0,i=!1){if(I===-1&&g===-1)return;const{table:e,selector:A,toolbar:s,data:l,contextMenu:n}=this;n.setMode(I===-1||g===-1?"row-col":"range");const a=l.getCell(I,g);t?(A.setEnd(I,g,i),this.trigger("cells-selected",a,A.range)):(A.set(I,g,C),this.trigger("cell-selected",a,I,g)),s.reset(),e.render()}function Cs(t,I){const{selector:g,data:C}=this,{rows:i,cols:e}=C;let[A,s]=g.indexes;const{eri:l,eci:n}=g.range;t&&([A,s]=g.moveIndexes),I==="left"?s>0&&(s-=1):I==="right"?(n!==s&&(s=n),s<e.len-1&&(s+=1)):I==="up"?A>0&&(A-=1):I==="down"?(l!==A&&(A=l),A<i.len-1&&(A+=1)):I==="row-first"?s=0:I==="row-last"?s=e.len-1:I==="col-first"?A=0:I==="col-last"&&(A=i.len-1),t&&(g.moveIndexes=[A,s]),Id.call(this,t,A,s),Kmg.call(this)}function Fmg(t){if(t.buttons!==0||t.target.className===`${Lg}-resizer-hover`)return;const{offsetX:I,offsetY:g}=t,{rowResizer:C,colResizer:i,tableEl:e,data:A}=this,{rows:s,cols:l}=A;if(I>l.indexWidth&&g>s.height){C.hide(),i.hide();return}const n=e.box(),a=A.getCellRectByXY(t.offsetX,t.offsetY);a.ri>=0&&a.ci===-1?(a.width=l.indexWidth,C.show(a,{width:n.width}),s.isHide(a.ri-1)?C.showUnhide(a.ri):C.hideUnhide()):C.hide(),a.ri===-1&&a.ci>=0?(a.height=s.height,i.show(a,{height:n.height}),l.isHide(a.ci-1)?i.showUnhide(a.ci):i.hideUnhide()):i.hide()}function kmg(t){const{verticalScrollbar:I,horizontalScrollbar:g,data:C}=this,{top:i}=I.scroll(),{left:e}=g.scroll(),{rows:A,cols:s}=C,{deltaY:l,deltaX:n}=t,a=(b,u)=>{let m=b,Z=0;do Z=u(m),m+=1;while(Z<=0);return Z},d=b=>{if(b>0){const u=C.scroll.ri+1;if(u<A.len){const m=a(u,Z=>A.getHeight(Z));I.move({top:i+m-1})}}else{const u=C.scroll.ri-1;if(u>=0){const m=a(u,Z=>A.getHeight(Z));I.move({top:u===0?0:i-m})}}},o=b=>{if(b>0){const u=C.scroll.ci+1;if(u<s.len){const m=a(u,Z=>s.getWidth(Z));g.move({left:e+m-1})}}else{const u=C.scroll.ci-1;if(u>=0){const m=a(u,Z=>s.getWidth(Z));g.move({left:u===0?0:e-m})}}},c=Math.abs(l),r=Math.abs(n),h=Math.max(c,r);/Firefox/i.test(window.navigator.userAgent)&&NX(d(t.detail),50),h===r&&NX(o(n),50),h===c&&NX(d(l),50)}function zmg(t,I){const{verticalScrollbar:g,horizontalScrollbar:C}=this,{top:i}=g.scroll(),{left:e}=C.scroll();t==="left"||t==="right"?C.move({left:e-I}):(t==="up"||t==="down")&&g.move({top:i-I})}function k9(){const{data:t,verticalScrollbar:I}=this,{height:g}=this.getTableOffset(),C=t.exceptRowTotalHeight(0,-1);I.set(g,t.rows.totalHeight()-C)}function z9(){const{data:t,horizontalScrollbar:I}=this,{width:g}=this.getTableOffset();t&&I.set(g,t.cols.totalWidth())}function Jmg(){const{selector:t,data:I,editor:g}=this,[C,i]=I.freeze;if(C>0||i>0){const e=I.freezeTotalWidth(),A=I.freezeTotalHeight();g.setFreezeLengths(e,A)}t.resetAreaOffset()}function xi(){const{tableEl:t,overlayerEl:I,overlayerCEl:g,table:C,toolbar:i,selector:e,el:A}=this,s=this.getTableOffset(),l=this.getRect();t.attr(l),I.offset(l),g.offset(s),A.css("width",`${l.width}px`),k9.call(this),z9.call(this),Jmg.call(this),C.render(),i.reset(),e.reset()}function sG(){const{data:t,selector:I}=this;t.clearClipboard(),I.hideClipboard()}function TD(){const{data:t,selector:I}=this;t.copy(),t.copyToSystemClipboard(),I.showClipboard()}function zq(){const{data:t,selector:I}=this;t.cut(),I.showClipboard()}function im(t,I){const{data:g}=this;if(g.settings.mode!=="read"){if(g.paste(t,C=>eig("Tip",C)))xi.call(this);else if(I){const C=I.clipboardData.getData("text/plain");this.data.pasteFromText(C),xi.call(this)}}}function Lmg(){this.data.hideRowsOrCols(),xi.call(this)}function Jq(t,I){this.data.unhideRowsOrCols(t,I),xi.call(this)}function vmg(){const{data:t}=this;t.autofilter(),xi.call(this)}function Tmg(){const{toolbar:t}=this;t.paintformatActive()&&(im.call(this,"format"),sG.call(this),t.paintformatToggle())}function Lq(t){const{selector:I,data:g,table:C,sortFilter:i}=this,{offsetX:e,offsetY:A}=t,s=t.target.className===`${Lg}-selector-corner`,l=g.getCellRectByXY(e,A),{left:n,top:a,width:d,height:o}=l;let{ri:c,ci:r}=l;const{autoFilter:h}=g;if(h.includes(c,r)&&n+d-20<e&&a+o-20<A){const b=h.items(r,(u,m)=>g.rows.getCell(u,m));i.hide(),i.set(r,b,h.getFilter(r),h.getSort(r)),i.setOffset({left:n,top:a+o+2});return}t.shiftKey||(s?I.showAutofill(c,r):Id.call(this,!1,c,r),jtg(window,b=>{({ri:c,ci:r}=g.getCellRectByXY(b.offsetX,b.offsetY)),s?I.showAutofill(c,r):b.buttons===1&&!b.shiftKey&&Id.call(this,!0,c,r,!0,!0)},()=>{s&&I.arange&&g.settings.mode!=="read"&&g.autofill(I.arange,"all",b=>eig("Tip",b))&&C.render(),I.hideAutofill(),Tmg.call(this)})),!s&&t.buttons===1&&t.shiftKey&&Id.call(this,!0,c,r)}function lG(){const{editor:t,data:I}=this,g=I.getSelectedRect(),C=this.getTableOffset();let i="top";g.top>C.height/2&&(i="bottom"),t.setOffset(g,i)}function em(){const{editor:t,data:I}=this;I.settings.mode!=="read"&&(lG.call(this),t.setCell(I.getSelectedCell(),I.getSelectedValidator()),sG.call(this))}function xmg(t){const{data:I,table:g,selector:C}=this;I.scrolly(t,()=>{C.resetBRLAreaOffset(),lG.call(this),g.render()})}function jmg(t){const{data:I,table:g,selector:C}=this;I.scrollx(t,()=>{C.resetBRTAreaOffset(),lG.call(this),g.render()})}function Qmg(t,I){const{ri:g}=t,{table:C,selector:i,data:e}=this;e.rows.setHeight(g,I),C.render(),i.resetAreaOffset(),k9.call(this),lG.call(this)}function Omg(t,I){const{ci:g}=t,{table:C,selector:i,data:e}=this;e.cols.setWidth(g,I),C.render(),i.resetAreaOffset(),z9.call(this),lG.call(this)}function VX(t,I="finished"){const{data:g,table:C}=this;if(g.settings.mode==="read")return;g.setSelectedCellText(t,I);const{ri:i,ci:e}=g.selector;I==="finished"?C.render():this.trigger("cell-edited",t,i,e)}function kN(t){const{data:I}=this;I.settings.mode!=="read"&&(t==="insert-row"?I.insert("row"):t==="delete-row"?I.delete("row"):t==="insert-column"?I.insert("column"):t==="delete-column"?I.delete("column"):t==="delete-cell"?I.deleteCell():t==="delete-cell-format"?I.deleteCell("format"):t==="delete-cell-text"?I.deleteCell("text"):t==="cell-printable"?I.setSelectedCellAttr("printable",!0):t==="cell-non-printable"?I.setSelectedCellAttr("printable",!1):t==="cell-editable"?I.setSelectedCellAttr("editable",!0):t==="cell-non-editable"&&I.setSelectedCellAttr("editable",!1),sG.call(this),xi.call(this))}function Umg(t,I){const{data:g}=this;if(t==="undo")this.undo();else if(t==="redo")this.redo();else if(t==="print")this.print.preview();else if(t==="paintformat")I===!0?TD.call(this):sG.call(this);else if(t==="clearformat")kN.call(this,"delete-cell-format");else if(t!=="link"){if(t!=="chart")if(t==="autofilter")vmg.call(this);else if(t==="freeze")if(I){const{ri:C,ci:i}=g.selector;this.freeze(C,i)}else this.freeze(0,0);else g.setSelectedCellAttr(t,I),t==="formula"&&!g.selector.multiple()&&em.call(this),xi.call(this)}}function Emg(t,I,g,C){this.data.setAutoFilter(t,I,g,C),xi.call(this)}function Pmg(){const{selector:t,overlayerEl:I,rowResizer:g,colResizer:C,verticalScrollbar:i,horizontalScrollbar:e,editor:A,contextMenu:s,toolbar:l,modalValidation:n,sortFilter:a}=this;I.on("mousemove",d=>{Fmg.call(this,d)}).on("mousedown",d=>{A.clear(),s.hide(),d.buttons===2?(this.data.xyInSelectedRect(d.offsetX,d.offsetY)||Lq.call(this,d),s.setPosition(d.offsetX,d.offsetY),d.stopPropagation()):d.detail===2?em.call(this):Lq.call(this,d)}).on("mousewheel.stop",d=>{kmg.call(this,d)}).on("mouseout",d=>{const{offsetX:o,offsetY:c}=d;c<=0&&C.hide(),o<=0&&g.hide()}),t.inputChange=d=>{VX.call(this,d,"input"),em.call(this)},tug(I.el,{move:(d,o)=>{zmg.call(this,d,o)}}),l.change=(d,o)=>Umg.call(this,d,o),a.ok=(d,o,c,r)=>Emg.call(this,d,o,c,r),g.finishedFn=(d,o)=>{Qmg.call(this,d,o)},C.finishedFn=(d,o)=>{Omg.call(this,d,o)},g.unhideFn=d=>{Jq.call(this,"row",d)},C.unhideFn=d=>{Jq.call(this,"col",d)},i.moveFn=(d,o)=>{xmg.call(this,d,o)},e.moveFn=(d,o)=>{jmg.call(this,d,o)},A.change=(d,o)=>{VX.call(this,o,d)},n.change=(d,...o)=>{d==="save"?this.data.addValidation(...o):this.data.removeValidation()},s.itemClick=d=>{d==="validation"?n.setValue(this.data.getSelectedValidation()):d==="copy"?TD.call(this):d==="cut"?zq.call(this):d==="paste"?im.call(this,"all"):d==="paste-value"?im.call(this,"text"):d==="paste-format"?im.call(this,"format"):d==="hide"?Lmg.call(this):kN.call(this,d)},ji(window,"resize",()=>{this.reload()}),ji(window,"click",d=>{this.focusing=I.contains(d.target)}),ji(window,"paste",d=>{this.focusing&&(im.call(this,"all",d),d.preventDefault())}),ji(window,"keydown",d=>{if(!this.focusing)return;const o=d.keyCode||d.which,{key:c,ctrlKey:r,shiftKey:h,metaKey:b}=d;if(r||b)switch(o){case 90:this.undo(),d.preventDefault();break;case 89:this.redo(),d.preventDefault();break;case 67:TD.call(this),d.preventDefault();break;case 88:zq.call(this),d.preventDefault();break;case 85:l.trigger("underline"),d.preventDefault();break;case 86:break;case 37:Cs.call(this,h,"row-first"),d.preventDefault();break;case 38:Cs.call(this,h,"col-first"),d.preventDefault();break;case 39:Cs.call(this,h,"row-last"),d.preventDefault();break;case 40:Cs.call(this,h,"col-last"),d.preventDefault();break;case 32:Id.call(this,!1,-1,this.data.selector.ci,!1),d.preventDefault();break;case 66:l.trigger("bold");break;case 73:l.trigger("italic");break}else{switch(o){case 32:h&&Id.call(this,!1,this.data.selector.ri,-1,!1);break;case 27:s.hide(),sG.call(this);break;case 37:Cs.call(this,h,"left"),d.preventDefault();break;case 38:Cs.call(this,h,"up"),d.preventDefault();break;case 39:Cs.call(this,h,"right"),d.preventDefault();break;case 40:Cs.call(this,h,"down"),d.preventDefault();break;case 9:A.clear(),Cs.call(this,!1,h?"left":"right"),d.preventDefault();break;case 13:A.clear(),Cs.call(this,!1,h?"up":"down"),d.preventDefault();break;case 8:kN.call(this,"delete-cell-text"),d.preventDefault();break}c==="Delete"?(kN.call(this,"delete-cell-text"),d.preventDefault()):o>=65&&o<=90||o>=48&&o<=57||o>=96&&o<=105||d.key==="="?(VX.call(this,d.key,"input"),em.call(this)):o===113&&em.call(this)}})}class _mg{constructor(I,g){this.eventMap=iug();const{view:C,showToolbar:i,showContextmenu:e}=g.settings;this.el=Yg("div",`${Lg}-sheet`),this.toolbar=new Rmg(g,C.width,!i),this.print=new Jug(g),I.children(this.toolbar.el,this.el,this.print.el),this.data=g,this.tableEl=Yg("canvas",`${Lg}-table`),this.rowResizer=new Bq(!1,g.rows.height),this.colResizer=new Bq(!0,g.cols.minWidth),this.verticalScrollbar=new Wq(!0),this.horizontalScrollbar=new Wq(!1),this.editor=new pug(Mug,()=>this.getTableOffset(),g.rows.height),this.modalValidation=new Xmg,this.contextMenu=new xug(()=>this.getRect(),!e),this.selector=new sug(g),this.overlayerCEl=Yg("div",`${Lg}-overlayer-content`).children(this.editor.el,this.selector.el),this.overlayerEl=Yg("div",`${Lg}-overlayer`).child(this.overlayerCEl),this.sortFilter=new Dmg,this.el.children(this.tableEl,this.overlayerEl.el,this.rowResizer.el,this.colResizer.el,this.verticalScrollbar.el,this.horizontalScrollbar.el,this.contextMenu.el,this.modalValidation.el,this.sortFilter.el),this.table=new Fug(this.tableEl.el,g),Pmg.call(this),xi.call(this),Id.call(this,!1,0,0)}on(I,g){return this.eventMap.on(I,g),this}trigger(I,...g){const{eventMap:C}=this;C.fire(I,g)}resetData(I){this.editor.clear(),this.data=I,k9.call(this),z9.call(this),this.toolbar.resetData(I),this.print.resetData(I),this.selector.resetData(I),this.table.resetData(I)}loadData(I){return this.data.setData(I),xi.call(this),this}freeze(I,g){const{data:C}=this;return C.setFreeze(I,g),xi.call(this),this}undo(){this.data.undo(),xi.call(this)}redo(){this.data.redo(),xi.call(this)}reload(){return xi.call(this),this}getRect(){const{data:I}=this;return{width:I.viewWidth(),height:I.viewHeight()}}getTableOffset(){const{rows:I,cols:g}=this.data,{width:C,height:i}=this.getRect();return{width:C-g.indexWidth,height:i-I.height,left:g.indexWidth,top:I.height}}}class qmg extends fs{constructor(I){const g=new hi("ellipsis");super(g,"auto",!1,"top-left"),this.contentClick=I}reset(I){const g=I.map((C,i)=>Yg("div",`${Lg}-item`).css("width","150px").css("font-weight","normal").on("click",()=>{this.contentClick(i),this.hide()}).child(C));this.setContentChildren(...g)}setTitle(){}}const $mg=[{key:"delete",title:PI("contextmenu.deleteSheet")}];function gZg(t){return Yg("div",`${Lg}-item`).child(t.title()).on("click",()=>{this.itemClick(t.key),this.hide()})}function IZg(){return $mg.map(t=>gZg.call(this,t))}class CZg{constructor(){this.el=Yg("div",`${Lg}-contextmenu`).css("width","160px").children(...IZg.call(this)).hide(),this.itemClick=()=>{}}hide(){const{el:I}=this;I.hide(),B0(I)}setOffset(I){const{el:g}=this;g.offset(I),g.show(),AG(g)}}class tZg{constructor(I=()=>{},g=()=>{},C=()=>{},i=()=>{}){this.swapFunc=g,this.updateFunc=i,this.dataNames=[],this.activeEl=null,this.deleteEl=null,this.items=[],this.moreEl=new qmg(e=>{this.clickSwap2(this.items[e])}),this.contextMenu=new CZg,this.contextMenu.itemClick=C,this.el=Yg("div",`${Lg}-bottombar`).children(this.contextMenu.el,this.menuEl=Yg("ul",`${Lg}-menu`).child(Yg("li","").children(new hi("add").on("click",()=>{I()}),Yg("span","").child(this.moreEl))))}addItem(I,g){this.dataNames.push(I);const C=Yg("li",g?"active":"").child(I);C.on("click",()=>{this.clickSwap2(C)}).on("contextmenu",i=>{const{offsetLeft:e,offsetHeight:A}=i.target;this.contextMenu.setOffset({left:e,bottom:A+1}),this.deleteEl=C}).on("dblclick",()=>{const i=C.html(),e=new Er("auto","");e.val(i),e.input.on("blur",({target:A})=>{const{value:s}=A,l=this.dataNames.findIndex(n=>n===i);this.renameItem(l,s)}),C.html("").child(e.el),e.focus()}),g&&this.clickSwap(C),this.items.push(C),this.menuEl.child(C),this.moreEl.reset(this.dataNames)}renameItem(I,g){this.dataNames.splice(I,1,g),this.moreEl.reset(this.dataNames),this.items[I].html("").child(g),this.updateFunc(I,g)}clear(){this.items.forEach(I=>{this.menuEl.removeChild(I.el)}),this.items=[],this.dataNames=[],this.moreEl.reset(this.dataNames)}deleteItem(){const{activeEl:I,deleteEl:g}=this;if(this.items.length>1){const C=this.items.findIndex(i=>i===g);if(this.items.splice(C,1),this.dataNames.splice(C,1),this.menuEl.removeChild(g.el),this.moreEl.reset(this.dataNames),I===g){const[i]=this.items;return this.activeEl=i,this.activeEl.toggle(),[C,0]}return[C,-1]}return[-1]}clickSwap2(I){const g=this.items.findIndex(C=>C===I);this.clickSwap(I),this.activeEl.toggle(),this.swapFunc(g)}clickSwap(I){this.activeEl!==null&&this.activeEl.toggle(),this.activeEl=I}}class xD{constructor(I,g={}){let C=I;this.options={showBottomBar:!0,...g},this.sheetIndex=1,this.datas=[],typeof I=="string"&&(C=document.querySelector(I)),this.bottombar=this.options.showBottomBar?new tZg(()=>{const e=this.addSheet();this.sheet.resetData(e)},e=>{const A=this.datas[e];this.sheet.resetData(A)},()=>{this.deleteSheet()},(e,A)=>{this.datas[e].name=A}):null,this.data=this.addSheet();const i=Yg("div",`${Lg}`).on("contextmenu",e=>e.preventDefault());C.appendChild(i.el),this.sheet=new _mg(i,this.data),this.bottombar!==null&&i.child(this.bottombar.el)}addSheet(I,g=!0){const C=I||`sheet${this.sheetIndex}`,i=new Cug(C,this.options);return i.change=(...e)=>{this.sheet.trigger("change",...e)},this.datas.push(i),this.bottombar!==null&&this.bottombar.addItem(C,g),this.sheetIndex+=1,i}deleteSheet(){if(this.bottombar===null)return;const[I,g]=this.bottombar.deleteItem();I>=0&&(this.datas.splice(I,1),g>=0&&this.sheet.resetData(this.datas[g]))}loadData(I){const g=Array.isArray(I)?I:[I];if(this.bottombar!==null&&this.bottombar.clear(),this.datas=[],g.length>0)for(let C=0;C<g.length;C+=1){const i=g[C],e=this.addSheet(i.name,C===0);e.setData(i),C===0&&this.sheet.resetData(e)}return this}getData(){return this.datas.map(I=>I.getData())}cellText(I,g,C,i=0){return this.datas[i].setCellText(I,g,C,"finished"),this}cell(I,g,C=0){return this.datas[C].getCell(I,g)}cellStyle(I,g,C=0){return this.datas[C].getCellStyle(I,g)}reRender(){return this.sheet.table.render(),this}on(I,g){return this.sheet.on(I,g),this}validate(){const{validations:I}=this.data;return I.errors.size<=0}change(I){return this.sheet.on("change",I),this}static locale(I,g){Ttg(I,g)}}const iZg=(t,I={})=>new xD(t,I);window&&(window.x_spreadsheet=iZg,window.x_spreadsheet.locale=(t,I)=>Ttg(t,I));const vq=["000000","FFFFFF","FF0000","00FF00","0000FF","FFFF00","FF00FF","00FFFF","000000","FFFFFF","FF0000","00FF00","0000FF","FFFF00","FF00FF","00FFFF","800000","008000","000080","808000","800080","008080","C0C0C0","808080","9999FF","993366","FFFFCC","CCFFFF","660066","FF8080","0066CC","CCCCFF","000080","FF00FF","FFFF00","00FFFF","800080","800000","008080","0000FF","00CCFF","CCFFFF","CCFFCC","FFFF99","99CCFF","FF99CC","CC99FF","FFCC99","3366FF","33CCCC","99CC00","FFCC00","FF9900","FF6600","666699","969696","003366","339966","003300","333300","993300","993366","333399","333333","b7e0ff","00CCFF"];function hV(t){"@babel/helpers - typeof";return hV=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(I){return typeof I}:function(I){return I&&typeof Symbol=="function"&&I.constructor===Symbol&&I!==Symbol.prototype?"symbol":typeof I},hV(t)}var eZg=/^\s+/,AZg=/\s+$/;function AI(t,I){if(t=t||"",I=I||{},t instanceof AI)return t;if(!(this instanceof AI))return new AI(t,I);var g=sZg(t);this._originalInput=t,this._r=g.r,this._g=g.g,this._b=g.b,this._a=g.a,this._roundA=Math.round(100*this._a)/100,this._format=I.format||g.format,this._gradientType=I.gradientType,this._r<1&&(this._r=Math.round(this._r)),this._g<1&&(this._g=Math.round(this._g)),this._b<1&&(this._b=Math.round(this._b)),this._ok=g.ok}AI.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var I=this.toRgb();return(I.r*299+I.g*587+I.b*114)/1e3},getLuminance:function(){var I=this.toRgb(),g,C,i,e,A,s;return g=I.r/255,C=I.g/255,i=I.b/255,g<=.03928?e=g/12.92:e=Math.pow((g+.055)/1.055,2.4),C<=.03928?A=C/12.92:A=Math.pow((C+.055)/1.055,2.4),i<=.03928?s=i/12.92:s=Math.pow((i+.055)/1.055,2.4),.2126*e+.7152*A+.0722*s},setAlpha:function(I){return this._a=Aig(I),this._roundA=Math.round(100*this._a)/100,this},toHsv:function(){var I=xq(this._r,this._g,this._b);return{h:I.h*360,s:I.s,v:I.v,a:this._a}},toHsvString:function(){var I=xq(this._r,this._g,this._b),g=Math.round(I.h*360),C=Math.round(I.s*100),i=Math.round(I.v*100);return this._a==1?"hsv("+g+", "+C+"%, "+i+"%)":"hsva("+g+", "+C+"%, "+i+"%, "+this._roundA+")"},toHsl:function(){var I=Tq(this._r,this._g,this._b);return{h:I.h*360,s:I.s,l:I.l,a:this._a}},toHslString:function(){var I=Tq(this._r,this._g,this._b),g=Math.round(I.h*360),C=Math.round(I.s*100),i=Math.round(I.l*100);return this._a==1?"hsl("+g+", "+C+"%, "+i+"%)":"hsla("+g+", "+C+"%, "+i+"%, "+this._roundA+")"},toHex:function(I){return jq(this._r,this._g,this._b,I)},toHexString:function(I){return"#"+this.toHex(I)},toHex8:function(I){return oZg(this._r,this._g,this._b,this._a,I)},toHex8String:function(I){return"#"+this.toHex8(I)},toRgb:function(){return{r:Math.round(this._r),g:Math.round(this._g),b:Math.round(this._b),a:this._a}},toRgbString:function(){return this._a==1?"rgb("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+")":"rgba("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:Math.round(FC(this._r,255)*100)+"%",g:Math.round(FC(this._g,255)*100)+"%",b:Math.round(FC(this._b,255)*100)+"%",a:this._a}},toPercentageRgbString:function(){return this._a==1?"rgb("+Math.round(FC(this._r,255)*100)+"%, "+Math.round(FC(this._g,255)*100)+"%, "+Math.round(FC(this._b,255)*100)+"%)":"rgba("+Math.round(FC(this._r,255)*100)+"%, "+Math.round(FC(this._g,255)*100)+"%, "+Math.round(FC(this._b,255)*100)+"%, "+this._roundA+")"},toName:function(){return this._a===0?"transparent":this._a<1?!1:BZg[jq(this._r,this._g,this._b,!0)]||!1},toFilter:function(I){var g="#"+Qq(this._r,this._g,this._b,this._a),C=g,i=this._gradientType?"GradientType = 1, ":"";if(I){var e=AI(I);C="#"+Qq(e._r,e._g,e._b,e._a)}return"progid:DXImageTransform.Microsoft.gradient("+i+"startColorstr="+g+",endColorstr="+C+")"},toString:function(I){var g=!!I;I=I||this._format;var C=!1,i=this._a<1&&this._a>=0,e=!g&&i&&(I==="hex"||I==="hex6"||I==="hex3"||I==="hex4"||I==="hex8"||I==="name");return e?I==="name"&&this._a===0?this.toName():this.toRgbString():(I==="rgb"&&(C=this.toRgbString()),I==="prgb"&&(C=this.toPercentageRgbString()),(I==="hex"||I==="hex6")&&(C=this.toHexString()),I==="hex3"&&(C=this.toHexString(!0)),I==="hex4"&&(C=this.toHex8String(!0)),I==="hex8"&&(C=this.toHex8String()),I==="name"&&(C=this.toName()),I==="hsl"&&(C=this.toHslString()),I==="hsv"&&(C=this.toHsvString()),C||this.toHexString())},clone:function(){return AI(this.toString())},_applyModification:function(I,g){var C=I.apply(null,[this].concat([].slice.call(g)));return this._r=C._r,this._g=C._g,this._b=C._b,this.setAlpha(C._a),this},lighten:function(){return this._applyModification(hZg,arguments)},brighten:function(){return this._applyModification(bZg,arguments)},darken:function(){return this._applyModification(uZg,arguments)},desaturate:function(){return this._applyModification(cZg,arguments)},saturate:function(){return this._applyModification(dZg,arguments)},greyscale:function(){return this._applyModification(rZg,arguments)},spin:function(){return this._applyModification(mZg,arguments)},_applyCombination:function(I,g){return I.apply(null,[this].concat([].slice.call(g)))},analogous:function(){return this._applyCombination(wZg,arguments)},complement:function(){return this._applyCombination(ZZg,arguments)},monochromatic:function(){return this._applyCombination(pZg,arguments)},splitcomplement:function(){return this._applyCombination(GZg,arguments)},triad:function(){return this._applyCombination(Oq,[3])},tetrad:function(){return this._applyCombination(Oq,[4])}};AI.fromRatio=function(t,I){if(hV(t)=="object"){var g={};for(var C in t)t.hasOwnProperty(C)&&(C==="a"?g[C]=t[C]:g[C]=Am(t[C]));t=g}return AI(t,I)};function sZg(t){var I={r:0,g:0,b:0},g=1,C=null,i=null,e=null,A=!1,s=!1;return typeof t=="string"&&(t=NZg(t)),hV(t)=="object"&&(Cl(t.r)&&Cl(t.g)&&Cl(t.b)?(I=lZg(t.r,t.g,t.b),A=!0,s=String(t.r).substr(-1)==="%"?"prgb":"rgb"):Cl(t.h)&&Cl(t.s)&&Cl(t.v)?(C=Am(t.s),i=Am(t.v),I=aZg(t.h,C,i),A=!0,s="hsv"):Cl(t.h)&&Cl(t.s)&&Cl(t.l)&&(C=Am(t.s),e=Am(t.l),I=nZg(t.h,C,e),A=!0,s="hsl"),t.hasOwnProperty("a")&&(g=t.a)),g=Aig(g),{ok:A,format:t.format||s,r:Math.min(255,Math.max(I.r,0)),g:Math.min(255,Math.max(I.g,0)),b:Math.min(255,Math.max(I.b,0)),a:g}}function lZg(t,I,g){return{r:FC(t,255)*255,g:FC(I,255)*255,b:FC(g,255)*255}}function Tq(t,I,g){t=FC(t,255),I=FC(I,255),g=FC(g,255);var C=Math.max(t,I,g),i=Math.min(t,I,g),e,A,s=(C+i)/2;if(C==i)e=A=0;else{var l=C-i;switch(A=s>.5?l/(2-C-i):l/(C+i),C){case t:e=(I-g)/l+(I<g?6:0);break;case I:e=(g-t)/l+2;break;case g:e=(t-I)/l+4;break}e/=6}return{h:e,s:A,l:s}}function nZg(t,I,g){var C,i,e;t=FC(t,360),I=FC(I,100),g=FC(g,100);function A(n,a,d){return d<0&&(d+=1),d>1&&(d-=1),d<1/6?n+(a-n)*6*d:d<1/2?a:d<2/3?n+(a-n)*(2/3-d)*6:n}if(I===0)C=i=e=g;else{var s=g<.5?g*(1+I):g+I-g*I,l=2*g-s;C=A(l,s,t+1/3),i=A(l,s,t),e=A(l,s,t-1/3)}return{r:C*255,g:i*255,b:e*255}}function xq(t,I,g){t=FC(t,255),I=FC(I,255),g=FC(g,255);var C=Math.max(t,I,g),i=Math.min(t,I,g),e,A,s=C,l=C-i;if(A=C===0?0:l/C,C==i)e=0;else{switch(C){case t:e=(I-g)/l+(I<g?6:0);break;case I:e=(g-t)/l+2;break;case g:e=(t-I)/l+4;break}e/=6}return{h:e,s:A,v:s}}function aZg(t,I,g){t=FC(t,360)*6,I=FC(I,100),g=FC(g,100);var C=Math.floor(t),i=t-C,e=g*(1-I),A=g*(1-i*I),s=g*(1-(1-i)*I),l=C%6,n=[g,A,e,e,s,g][l],a=[s,g,g,A,e,e][l],d=[e,e,s,g,g,A][l];return{r:n*255,g:a*255,b:d*255}}function jq(t,I,g,C){var i=[NA(Math.round(t).toString(16)),NA(Math.round(I).toString(16)),NA(Math.round(g).toString(16))];return C&&i[0].charAt(0)==i[0].charAt(1)&&i[1].charAt(0)==i[1].charAt(1)&&i[2].charAt(0)==i[2].charAt(1)?i[0].charAt(0)+i[1].charAt(0)+i[2].charAt(0):i.join("")}function oZg(t,I,g,C,i){var e=[NA(Math.round(t).toString(16)),NA(Math.round(I).toString(16)),NA(Math.round(g).toString(16)),NA(sig(C))];return i&&e[0].charAt(0)==e[0].charAt(1)&&e[1].charAt(0)==e[1].charAt(1)&&e[2].charAt(0)==e[2].charAt(1)&&e[3].charAt(0)==e[3].charAt(1)?e[0].charAt(0)+e[1].charAt(0)+e[2].charAt(0)+e[3].charAt(0):e.join("")}function Qq(t,I,g,C){var i=[NA(sig(C)),NA(Math.round(t).toString(16)),NA(Math.round(I).toString(16)),NA(Math.round(g).toString(16))];return i.join("")}AI.equals=function(t,I){return!t||!I?!1:AI(t).toRgbString()==AI(I).toRgbString()};AI.random=function(){return AI.fromRatio({r:Math.random(),g:Math.random(),b:Math.random()})};function cZg(t,I){I=I===0?0:I||10;var g=AI(t).toHsl();return g.s-=I/100,g.s=IM(g.s),AI(g)}function dZg(t,I){I=I===0?0:I||10;var g=AI(t).toHsl();return g.s+=I/100,g.s=IM(g.s),AI(g)}function rZg(t){return AI(t).desaturate(100)}function hZg(t,I){I=I===0?0:I||10;var g=AI(t).toHsl();return g.l+=I/100,g.l=IM(g.l),AI(g)}function bZg(t,I){I=I===0?0:I||10;var g=AI(t).toRgb();return g.r=Math.max(0,Math.min(255,g.r-Math.round(255*-(I/100)))),g.g=Math.max(0,Math.min(255,g.g-Math.round(255*-(I/100)))),g.b=Math.max(0,Math.min(255,g.b-Math.round(255*-(I/100)))),AI(g)}function uZg(t,I){I=I===0?0:I||10;var g=AI(t).toHsl();return g.l-=I/100,g.l=IM(g.l),AI(g)}function mZg(t,I){var g=AI(t).toHsl(),C=(g.h+I)%360;return g.h=C<0?360+C:C,AI(g)}function ZZg(t){var I=AI(t).toHsl();return I.h=(I.h+180)%360,AI(I)}function Oq(t,I){if(isNaN(I)||I<=0)throw new Error("Argument to polyad must be a positive number");for(var g=AI(t).toHsl(),C=[AI(t)],i=360/I,e=1;e<I;e++)C.push(AI({h:(g.h+e*i)%360,s:g.s,l:g.l}));return C}function GZg(t){var I=AI(t).toHsl(),g=I.h;return[AI(t),AI({h:(g+72)%360,s:I.s,l:I.l}),AI({h:(g+216)%360,s:I.s,l:I.l})]}function wZg(t,I,g){I=I||6,g=g||30;var C=AI(t).toHsl(),i=360/g,e=[AI(t)];for(C.h=(C.h-(i*I>>1)+720)%360;--I;)C.h=(C.h+i)%360,e.push(AI(C));return e}function pZg(t,I){I=I||6;for(var g=AI(t).toHsv(),C=g.h,i=g.s,e=g.v,A=[],s=1/I;I--;)A.push(AI({h:C,s:i,v:e})),e=(e+s)%1;return A}AI.mix=function(t,I,g){g=g===0?0:g||50;var C=AI(t).toRgb(),i=AI(I).toRgb(),e=g/100,A={r:(i.r-C.r)*e+C.r,g:(i.g-C.g)*e+C.g,b:(i.b-C.b)*e+C.b,a:(i.a-C.a)*e+C.a};return AI(A)};AI.readability=function(t,I){var g=AI(t),C=AI(I);return(Math.max(g.getLuminance(),C.getLuminance())+.05)/(Math.min(g.getLuminance(),C.getLuminance())+.05)};AI.isReadable=function(t,I,g){var C=AI.readability(t,I),i,e;switch(e=!1,i=VZg(g),i.level+i.size){case"AAsmall":case"AAAlarge":e=C>=4.5;break;case"AAlarge":e=C>=3;break;case"AAAsmall":e=C>=7;break}return e};AI.mostReadable=function(t,I,g){var C=null,i=0,e,A,s,l;g=g||{},A=g.includeFallbackColors,s=g.level,l=g.size;for(var n=0;n<I.length;n++)e=AI.readability(t,I[n]),e>i&&(i=e,C=AI(I[n]));return AI.isReadable(t,C,{level:s,size:l})||!A?C:(g.includeFallbackColors=!1,AI.mostReadable(t,["#fff","#000"],g))};var jD=AI.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},BZg=AI.hexNames=WZg(jD);function WZg(t){var I={};for(var g in t)t.hasOwnProperty(g)&&(I[t[g]]=g);return I}function Aig(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t}function FC(t,I){yZg(t)&&(t="100%");var g=YZg(t);return t=Math.min(I,Math.max(0,parseFloat(t))),g&&(t=parseInt(t*I,10)/100),Math.abs(t-I)<1e-6?1:t%I/parseFloat(I)}function IM(t){return Math.min(1,Math.max(0,t))}function $i(t){return parseInt(t,16)}function yZg(t){return typeof t=="string"&&t.indexOf(".")!=-1&&parseFloat(t)===1}function YZg(t){return typeof t=="string"&&t.indexOf("%")!=-1}function NA(t){return t.length==1?"0"+t:""+t}function Am(t){return t<=1&&(t=t*100+"%"),t}function sig(t){return Math.round(parseFloat(t)*255).toString(16)}function Uq(t){return $i(t)/255}var aA=function(){var t="[-\\+]?\\d+%?",I="[-\\+]?\\d*\\.\\d+%?",g="(?:"+I+")|(?:"+t+")",C="[\\s|\\(]+("+g+")[,|\\s]+("+g+")[,|\\s]+("+g+")\\s*\\)?",i="[\\s|\\(]+("+g+")[,|\\s]+("+g+")[,|\\s]+("+g+")[,|\\s]+("+g+")\\s*\\)?";return{CSS_UNIT:new RegExp(g),rgb:new RegExp("rgb"+C),rgba:new RegExp("rgba"+i),hsl:new RegExp("hsl"+C),hsla:new RegExp("hsla"+i),hsv:new RegExp("hsv"+C),hsva:new RegExp("hsva"+i),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();function Cl(t){return!!aA.CSS_UNIT.exec(t)}function NZg(t){t=t.replace(eZg,"").replace(AZg,"").toLowerCase();var I=!1;if(jD[t])t=jD[t],I=!0;else if(t=="transparent")return{r:0,g:0,b:0,a:0,format:"name"};var g;return(g=aA.rgb.exec(t))?{r:g[1],g:g[2],b:g[3]}:(g=aA.rgba.exec(t))?{r:g[1],g:g[2],b:g[3],a:g[4]}:(g=aA.hsl.exec(t))?{h:g[1],s:g[2],l:g[3]}:(g=aA.hsla.exec(t))?{h:g[1],s:g[2],l:g[3],a:g[4]}:(g=aA.hsv.exec(t))?{h:g[1],s:g[2],v:g[3]}:(g=aA.hsva.exec(t))?{h:g[1],s:g[2],v:g[3],a:g[4]}:(g=aA.hex8.exec(t))?{r:$i(g[1]),g:$i(g[2]),b:$i(g[3]),a:Uq(g[4]),format:I?"name":"hex8"}:(g=aA.hex6.exec(t))?{r:$i(g[1]),g:$i(g[2]),b:$i(g[3]),format:I?"name":"hex"}:(g=aA.hex4.exec(t))?{r:$i(g[1]+""+g[1]),g:$i(g[2]+""+g[2]),b:$i(g[3]+""+g[3]),a:Uq(g[4]+""+g[4]),format:I?"name":"hex8"}:(g=aA.hex3.exec(t))?{r:$i(g[1]+""+g[1]),g:$i(g[2]+""+g[2]),b:$i(g[3]+""+g[3]),format:I?"name":"hex"}:!1}function VZg(t){var I,g;return t=t||{level:"AA",size:"small"},I=(t.level||"AA").toUpperCase(),g=(t.size||"small").toLowerCase(),I!=="AA"&&I!=="AAA"&&(I="AA"),g!=="small"&&g!=="large"&&(g="small"),{level:I,size:g}}const MZg={__name:"Table",props:{workbook:Object},setup(t){const I=t,g=gg.ref(null),C=gg.ref([]),i=gg.ref(null),e=gg.computed(()=>I.workbook.worksheets?I.workbook.worksheets.filter(Z=>Z._rows.length):[]),A=()=>{g.value=new xD(i.value,{view:{height:()=>document.documentElement.clientHeight-120,width:()=>document.documentElement.clientWidth-40},mode:"read",showToolbar:!1,showGrid:!0,showContextmenu:!1,multipleSheets:!0,rpx:1,row:{len:100,height:25,autoHeight:!0},col:{len:26,width:50,indexWidth:60,minWidth:30,autoWidth:!0},style:{bgcolor:"#ffffff",color:"#333333",align:"left",valign:"middle",textwrap:!1,strike:!1,underline:!1,italic:!1,bold:!1,fontSize:12}}).loadData({}),m()},s=()=>{if(g.value){i.value.classList.add("loading");try{const Z=l();g.value&&(i.value.innerHTML=""),g.value=new xD(i.value,{view:{height:()=>document.documentElement.clientHeight-120,width:()=>document.documentElement.clientWidth-40},mode:"read",showToolbar:!1,showGrid:!0,showContextmenu:!1,multipleSheets:!0,rpx:1,row:{len:100,height:25,autoHeight:!0},col:{len:26,width:50,indexWidth:60,minWidth:30,autoWidth:!0}}).loadData(Z)}finally{i.value.classList.remove("loading")}}},l=()=>{let Z=[];return e.value.forEach(p=>{const Y=p.id,R={name:p._name,freeze:"A1",styles:[{bgcolor:"#ffffff",color:"#000000",align:"left",valign:"middle",fontSize:12}],merges:[],rows:{},cols:{}};try{n(p,R),a(p,R,new Map),r(p,R),Z.push(R)}catch{Z[Y]={name:p._name||"Sheet1",rows:{},cols:{}}}}),Z},n=(Z,p)=>{Z._merges&&Object.values(Z._merges).forEach(Y=>{const{top:R,left:X,bottom:H,right:S}=Y;p.merges.push(`${h(X-1)}${R}:${h(S-1)}${H}`)})},a=(Z,p,Y)=>{const R=Math.min(Z.rowCount||50,100);for(let X=0;X<R;X++){const H=Z.getRow(X+1);let S=25;if(p.rows[X]={cells:{},height:S},!H||!H.cellCount)continue;const z=Math.min(Z.columnCount||26,100);for(let v=0;v<z;v++)try{const K=H.getCell(v+1);if(!K||K.type==="null"&&!K.style){p.rows[X].cells[v]={text:"",style:0};continue}const{text:V,height:N}=d(K),B=o(K,Y,p.styles);S=Math.max(S,N);const G=Object.values(Z._merges||{}).find(w=>w.top===H.number&&w.left===v+1);G?p.rows[X].cells[v]={text:V,style:B,merge:[G.bottom-G.top,G.right-G.left]}:p.rows[X].cells[v]={text:V,style:B}}catch{p.rows[X].cells[v]={text:"",style:0}}p.rows[X].height=S}},d=Z=>{let p="";try{if(!Z||Z.value===null||Z.value===void 0)p="";else if(Z.type==="date"||Z.numFmt&&(Z.numFmt.includes("yy")||Z.numFmt.includes("mm")||Z.numFmt.includes("dd")||Z.numFmt.includes("h")||Z.numFmt.includes("m:s")))try{let S;if(Z.value instanceof Date)S=Z.value;else if(typeof Z.value=="number"){const z=new Date(1899,11,30);S=new Date(z.getTime()+Z.value*24*60*60*1e3)}else S=new Date(Z.value);if(isNaN(S.getTime()))p=String(Z.text||Z.value||"");else{const z=S.getFullYear(),v=(S.getMonth()+1).toString().padStart(2,"0"),K=S.getDate().toString().padStart(2,"0");if(Z.numFmt&&(Z.numFmt.includes("h")||Z.numFmt.includes("s"))){const V=S.getHours().toString().padStart(2,"0"),N=S.getMinutes().toString().padStart(2,"0"),B=S.getSeconds().toString().padStart(2,"0");p=`${z}/${v}/${K} ${V}:${N}:${B}`}else p=`${z}/${v}/${K}`}}catch{p=String(Z.text||Z.value||"")}else if(typeof Z.value=="object"&&Z.value!==null)Z.value.hyperlink?p="[链接]":Z.value.image?p="[图片]":Z.value.richText?p=Z.value.richText.map(S=>String((S==null?void 0:S.text)||"")).join(""):p=String(Z.text||"");else if(Z.formula)if(Z.numFmt&&(Z.numFmt.includes("yy")||Z.numFmt.includes("mm")||Z.numFmt.includes("dd")))try{const S=new Date(1899,11,30),z=new Date(S.getTime()+Z.result*24*60*60*1e3);if(isNaN(z.getTime()))p=String(Z.result||Z.value||"");else{const v=z.getFullYear(),K=(z.getMonth()+1).toString().padStart(2,"0"),V=z.getDate().toString().padStart(2,"0");p=`${v}-${K}-${V}`}}catch{p=String(Z.result||Z.value||"")}else p=Z.result!==void 0&&Z.result!==null?String(Z.result):String(Z.value||"");else p=Z.text!==void 0&&Z.text!==null?String(Z.text):Z.value!==void 0&&Z.value!==null?String(Z.value):""}catch{p="[格式错误]"}const Y=((p||"").match(/\n/g)||[]).length+1,R=[...p||""],X=Math.ceil(R.length/40),H=Math.max(Y,X)*20;return{text:p,height:H}},o=(Z,p,Y)=>{var S,z,v,K,V;const R={bgcolor:"#ffffff",color:"#000000",align:((S=Z.alignment)==null?void 0:S.horizontal)||"left",valign:((z=Z.alignment)==null?void 0:z.vertical)||"middle",fontSize:((v=Z.font)==null?void 0:v.size)||12,textwrap:!0,bold:(K=Z.font)==null?void 0:K.bold,italic:(V=Z.font)==null?void 0:V.italic,underline:!1,strike:!1};if(Z.fill&&Z.fill.type==="pattern"){const N=Z.fill.fgColor||{};if(typeof N.indexed=="number"){const B=vq[N.indexed];B&&(R.bgcolor=`#${B}`)}else if(typeof N.theme=="number"){const B={0:1,1:0,2:3,3:2,4:4,5:5,6:6,7:7,8:8,9:9},G=B[N.theme]!==void 0?B[N.theme]:N.theme;if(C.value[G]){let w=`#${C.value[G]}`;typeof N.tint=="number"&&N.tint!==0&&(w=c(w,N.tint)),R.bgcolor=w}}else if(N.rgb)R.bgcolor=`#${N.rgb.substring(N.rgb.length-6)}`;else if(N.argb){const B=u(N.argb);B&&(R.bgcolor=B)}}if(Z.font&&Z.font.color){const N=Z.font.color;if(typeof N.indexed=="number"){const B=vq[N.indexed];B&&(R.color=`#${B}`)}else if(typeof N.theme=="number"){const B={0:1,1:0,2:3,3:2,4:4,5:5,6:6,7:7,8:8,9:9},G=B[N.theme]!==void 0?B[N.theme]:N.theme;if(C.value[G]){let w=`#${C.value[G]}`;typeof N.tint=="number"&&N.tint!==0&&(w=c(w,N.tint)),R.color=w}}else if(N.rgb)R.color=`#${N.rgb.substring(N.rgb.length-6)}`;else if(N.argb){const B=u(N.argb);B&&(R.color=B)}}const X=JSON.stringify(R);if(p.has(X))return p.get(X);Y.push(R);const H=Y.length-1;return p.set(X,H),H},c=(Z,p)=>{try{const R=AI(Z).toRgb(),X=(v,K)=>{let V;return K<0?V=v*(1+K):V=v+(255-v)*K,Math.max(0,Math.min(255,Math.round(V)))},H=X(R.r,p),S=X(R.g,p),z=X(R.b,p);return AI({r:H,g:S,b:z}).toHexString()}catch{return Z}},r=(Z,p)=>{const Y=Math.min(Z.columnCount||26,50),R=new Map,X=new Set;Z._merges&&Object.values(Z._merges).forEach(H=>{for(let S=H.left;S<=H.right;S++)X.add(S-1)}),Z.eachRow(H=>{var S,z,v;for(let K=0;K<Y;K++)try{const V=H.getCell(K+1);if(!V)continue;let N="";try{V.text!==void 0&&V.text!==null?N=String(V.text):V.value!==void 0&&V.value!==null&&(typeof V.value=="object"?N=(S=V.value)!=null&&S.richText?V.value.richText.map(B=>String((B==null?void 0:B.text)||"")).join(""):(z=V.value)!=null&&z.hyperlink?"[链接]":(v=V.value)!=null&&v.image?"[图片]":"":N=String(V.value))}catch{N=""}if(N)if(Object.values(Z._merges||{}).some(G=>H.number>=G.top&&H.number<=G.bottom&&K+1>=G.left&&K+1<=G.right)){const G=Object.values(Z._merges||{}).find(w=>H.number>=w.top&&H.number<=w.bottom&&K+1>=w.left&&K+1<=w.right);if(G&&K+1===G.left){const w=G.right-G.left+1,W=[...N].reduce((f,D)=>f+(/[\u4e00-\u9fa5]/.test(D)?2:1),0),y=Math.ceil(W/w);R.set(K,Math.max(R.get(K)||0,y))}}else{const G=[...N].reduce((w,W)=>w+(/[\u4e00-\u9fa5]/.test(W)?2:1),0);R.set(K,Math.max(R.get(K)||0,G))}}catch{}});for(let H=0;H<Y;H++){const S=R.get(H);if(S){const z=Math.min(Math.max(S*8+10,50),300);p.cols[H]={width:z}}}},h=Z=>{let p,Y="";for(;Z>=0;)p=Z%26,Y=String.fromCharCode(p+65)+Y,Z=(Z-p)/26-1;return Y},b=()=>{var p;const Z=(p=I.workbook._themes)==null?void 0:p.theme1;if(!Z){C.value=["FFFFFF","000000","EEECE1","1F497D","4F81BD","C0504D","9BBB59","8064A2","4BACC6","F79646"];return}try{const X=new DOMParser().parseFromString(Z,"text/xml").getElementsByTagName("a:clrScheme")[0];if(!X)throw new Error("找不到颜色方案元素");C.value=[];const H=Array.from(X.children);for(const S of H){let z=null;const v=S.getElementsByTagName("a:srgbClr")[0],K=S.getElementsByTagName("a:sysClr")[0];v?z=v.getAttribute("val"):K&&(z=K.getAttribute("lastClr")||K.getAttribute("val")),C.value.push(z||"FFFFFF")}}catch(Y){console.error("解析主题颜色出错:",Y),C.value=["FFFFFF","000000","EEECE1","1F497D","4F81BD","C0504D","9BBB59","8064A2","4BACC6","F79646"]}},u=Z=>!Z||Z.length<8?null:`#${Z.substring(2)}`,m=()=>{b(),s()};return gg.onMounted(()=>{A()}),gg.watch(()=>I.workbook,()=>{m()}),(Z,p)=>(gg.openBlock(),gg.createElementBlock("div",null,[gg.createElementVNode("div",{ref_key:"spreadsheetRef",ref:i,class:"spreadsheet-container",id:"spreadsheet"},null,512)]))}};async function RZg(t,I){const g=await new fbg.Workbook().xlsx.load(t),C=gg.createApp(MZg,{workbook:g});return C.mount(I),{$el:I,$destroy(){C.unmount()}}}const Eq=t=>({$el:t,$destroy(){}}),fZg=[{accepts:["docx"],handler:async(t,I)=>{const g={...ED,debug:!0,experimental:!0};return await hog(t,I,null,g),Eq(I)}},{accepts:["pptx"],handler:async(t,I)=>Vbg(t,I)},{accepts:["xlsx"],handler:async(t,I)=>RZg(t,I)},{accepts:["pdf"],handler:async(t,I)=>rdg(t,I)},{accepts:["gif","jpg","jpeg","bmp","tiff","tif","png","svg"],handler:async(t,I)=>Zdg(t,I)},{accepts:["txt","json","js","css","java","py","html","jsx","ts","tsx","xml","md","log"],handler:async(t,I)=>Bdg(t,I)},{accepts:["error"],handler:async(t,I,g)=>(I.innerHTML=`<div style="text-align: center margin-top: 80px">不支持.${g}格式的在线预览,请下载后预览或转换为支持的格式</div>
- <div style="text-align: center">支持docx, xlsx, pptx, pdf, 以及纯文本格式和各种图片格式的在线预览</div>`,Eq(I))}],Pq=fZg.reduce((t,{accepts:I,handler:g})=>(I.forEach(C=>t[C]=g),t),{});async function HZg(t){return new Promise((I,g)=>{const C=new FileReader;C.onload=i=>I(i.target.result),C.onerror=i=>g(i),C.readAsArrayBuffer(t)})}async function J9(t){return new Promise((I,g)=>{const C=new FileReader;C.onload=i=>I(i.target.result),C.onerror=i=>g(i),C.readAsDataURL(new Blob([t]))})}async function lig(t){return new Promise((I,g)=>{const C=new FileReader;C.onload=i=>I(i.target.result),C.onerror=i=>g(i),C.readAsText(new Blob([t]),"utf-8")})}function XZg(t){const I=t.lastIndexOf(".");return t.substr(I+1)}async function nig(t,I,g){const C=Pq[I];return C?C(t,g):Pq.error(t,g,I)}const SZg="data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20t='1623827680993'%20class='icon'%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='6860'%20width='128'%20height='128'%20xmlns:xlink='http://www.w3.org/1999/xlink'%3e%3cdefs%3e%3cstyle%20type='text/css'%3e%3c/style%3e%3c/defs%3e%3cpath%20d='M971.232%2041.216l0.768%200.768a32%2032%200%200%201%200%2044.96L88.512%20982.496a31.808%2031.808%200%200%201-41.952%202.944l-3.808-3.424a32%2032%200%200%201%200-44.96l169.12-171.36c-58.08-49.28-112.256-114.4-162.592-195.36l-7.84-12.8a65.664%2065.664%200%200%201%200-67.84c130.176-215.392%20286.656-323.104%20469.44-323.104%2081.312%200%20157.6%2021.312%20228.8%2064l186.56-189.088a31.808%2031.808%200%200%201%2044.992-0.32zM828.576%20297.28c51.584%2047.04%20100.16%20106.72%20145.728%20179.104l8.096%2013.024c12.8%2020.96%2012.8%2047.488%200%2068.448-131.68%20215.2-288.864%20322.784-471.52%20322.784-73.152%200-142.08-17.248-206.784-51.712l47.84-48.48a369.888%20369.888%200%200%200%20158.944%2035.296c158.144%200%20296.192-94.528%20417.088-292.096l-7.68-12.352c-43.424-69.056-89.088-124.96-137.024-168.128l45.312-45.888z%20m-317.696-65.792c-158.112%200-295.392%2094.496-414.848%20292.16l7.424%2012.064c48.32%2077.76%2099.552%20138.88%20153.856%20183.904l91.008-92.256a195.776%20195.776%200%200%201-29.504-103.744c0-107.552%2086.016-194.752%20192.128-194.752%2037.6%200%2072.704%2010.976%20102.336%2029.92l79.424-80.544a373.76%20373.76%200%200%200-181.824-46.72z%20m174.656%20210.784c11.264%2024.768%2017.504%2052.32%2017.504%2081.344%200%20107.552-85.984%20194.752-192.096%20194.752a189.248%20189.248%200%200%201-80.256-17.76l50.08-50.784c9.696%202.368%2019.776%203.616%2030.176%203.616%2070.72%200%20128.064-58.112%20128.064-129.824a131.84%20131.84%200%200%200-3.552-30.56l50.08-50.784z%20m-174.592-48.48c-70.72%200-128.096%2058.112-128.096%20129.824%200%2020.064%204.48%2039.04%2012.48%2056l170.88-173.152a126.144%20126.144%200%200%200-55.264-12.672z'%20fill='%23bfbfbf'%20p-id='6861'%3e%3c/path%3e%3c/svg%3e",DZg={class:"view-other"},KZg=["src"],FZg={class:"size-item"},kZg={__name:"index",props:{file:{type:Object,default:()=>({})}},setup(t){const I=t,g=gg.computed(()=>{const C=Number(I.file.size);if(!Number.isFinite(C)||!C)return"0KB";const i=1024,e=1048576,A=Math.abs(C),s=C<0?"-":"";return A>=e?`${s}${Math.floor(A/e*100)/100} GB`:A>=i?`${s}${Math.floor(A/i*100)/100} MB`:`${s}${A} KB`});return(C,i)=>{const e=gg.resolveComponent("big");return gg.openBlock(),gg.createElementBlock("div",DZg,[gg.createElementVNode("img",{class:"view-off-icon",src:gg.unref(SZg),alt:""},null,8,KZg),gg.createElementVNode("p",null,[gg.createTextVNode(gg.toDisplayString(t.file.name)+"."+gg.toDisplayString(t.file.type),1),gg.createElementVNode("span",FZg,gg.toDisplayString(g.value),1)]),gg.createElementVNode("p",null,[gg.createVNode(e,null,{default:gg.withCtx(()=>i[0]||(i[0]=[gg.createElementVNode("strong",null,"该类型文件不支持在线预览,请下载后查看。",-1)])),_:1})])])}}},zZg=m0(kZg,[["__scopeId","data-v-d007bf31"]]),JZg={class:"container"},LZg={class:"modal-height"},vZg={class:"file-box"},TZg={class:"view-wrapper"},xZg={key:0,class:"preview-wrapper",ref:"wrapper"},jZg={class:"preview-inner",ref:"preview-inner"},QZg={class:"preview-mark",ref:"bg-mark",id:"bg-mark"},OZg={class:"loading-container"},UZg={key:0,class:"viewfile-image"},EZg=["src","alt"],PZg=["src"],_Zg={__name:"index",props:{file:{type:Object,default:()=>({})}},setup(t){const I=t,g=gg.ref(!1),C=gg.ref(null),i=gg.ref(""),e=gg.ref(!1),A=gg.ref(0),s=gg.computed(()=>{const u=(I.file.type||"").toLowerCase();return Object.values({doc:["docx"],xlsx:["xlsx"],pdf:["pdf"],ppt:["pptx"],image:["gif","jpg","jpeg","bmp","tiff","tif","png","svg"],text:["txt","json","js","css","java","py","html","jsx","ts","tsx","xml","md","log"]}).flat().includes(u)}),l=gg.computed(()=>{const u=(I.file.type||"").toLowerCase();return["gif","jpg","jpeg","bmp","tiff","tif","png","svg"].includes(u)}),n=gg.computed(()=>{const u=String(i.value||"");return u?[u]:[]}),a=gg.computed(()=>({visible:e.value,open:d,close:o,next:c,prev:r}));function d(u=0){n.value.length&&(A.value=Math.max(0,Math.min(n.value.length-1,Number(u)||0)),e.value=!0)}function o(){e.value=!1}function c(){const u=n.value;u.length<=1||(A.value=(A.value+1)%u.length)}function r(){const u=n.value;u.length<=1||(A.value=(A.value-1+u.length)%u.length)}function h(u){e.value&&(u.key==="Escape"&&o(),u.key==="ArrowRight"&&c(),u.key==="ArrowLeft"&&r())}gg.onMounted(()=>{window.addEventListener("keydown",h)}),gg.onBeforeUnmount(()=>{window.removeEventListener("keydown",h)});const b=(u,m)=>{if(!C.value)return Promise.reject(new Error("Output element not found"));C.value.innerHTML="";const Z=document.createElement("div"),p=C.value.appendChild(Z);return new Promise((Y,R)=>nig(u,m,p).then(Y).catch(R))};return gg.watch(()=>I.file,u=>{if(u&&u.type)try{g.value=!0,gg.nextTick(()=>{if(l.value){i.value="",e.value=!1,A.value=0,C.value&&(C.value.innerHTML=""),J9(u.fileBuffer).then(m=>{i.value=String(m||"")}).finally(()=>{g.value=!1});return}i.value="",e.value=!1,A.value=0,b(u.fileBuffer,u.type).finally(()=>{g.value=!1})})}catch(m){console.warn(m)}},{immediate:!0,deep:!0}),(u,m)=>(gg.openBlock(),gg.createElementBlock("div",JZg,[gg.createElementVNode("div",LZg,[gg.createElementVNode("div",vZg,[gg.withDirectives(gg.createElementVNode("p",{class:"file-name"},gg.toDisplayString(t.file.filename),513),[[gg.vShow,!g.value]]),gg.createElementVNode("div",TZg,[s.value?(gg.openBlock(),gg.createElementBlock("div",xZg,[gg.createElementVNode("div",jZg,[gg.createElementVNode("div",QZg,null,512),gg.withDirectives(gg.createElementVNode("div",OZg,m[1]||(m[1]=[gg.createElementVNode("div",{class:"loading-spinner"},[gg.createElementVNode("svg",{viewBox:"0 0 50 50",class:"circular"},[gg.createElementVNode("circle",{cx:"25",cy:"25",r:"20",fill:"none",class:"path"})])],-1)]),512),[[gg.vShow,g.value]]),l.value?gg.withDirectives((gg.openBlock(),gg.createElementBlock("div",UZg,[gg.renderSlot(u.$slots,"image",{src:i.value,srcList:n.value,index:A.value,file:t.file,preview:a.value},()=>[gg.createElementVNode("img",{class:"viewfile-image-inner",src:i.value,alt:t.file.filename||"",onClick:m[0]||(m[0]=Z=>d(0))},null,8,EZg)],!0),e.value?(gg.openBlock(),gg.createElementBlock("div",{key:0,class:"viewfile-image-preview",onClick:gg.withModifiers(o,["self"])},[gg.createElementVNode("button",{class:"viewfile-image-preview-close",type:"button",onClick:o},"×"),n.value.length>1?(gg.openBlock(),gg.createElementBlock("button",{key:0,class:"viewfile-image-preview-prev",type:"button",onClick:gg.withModifiers(r,["stop"])}," ‹ ")):gg.createCommentVNode("",!0),gg.createElementVNode("img",{class:"viewfile-image-preview-img",src:n.value[A.value],alt:""},null,8,PZg),n.value.length>1?(gg.openBlock(),gg.createElementBlock("button",{key:1,class:"viewfile-image-preview-next",type:"button",onClick:gg.withModifiers(c,["stop"])}," › ")):gg.createCommentVNode("",!0)])):gg.createCommentVNode("",!0)],512)),[[gg.vShow,!g.value]]):gg.withDirectives((gg.openBlock(),gg.createElementBlock("div",{key:1,class:"output",ref_key:"output",ref:C},null,512)),[[gg.vShow,!g.value]])],512)],512)):t.file.type&&!s.value?(gg.openBlock(),gg.createBlock(zZg,{key:1,file:t.file},null,8,["file"])):gg.createCommentVNode("",!0)])])])]))}},aig=m0(_Zg,[["__scopeId","data-v-3eb932b1"]]),qZg={install(t){t.component("ViewFile",aig)}};exports.ViewFile=aig;exports.default=qZg;exports.getExtend=XZg;exports.readBuffer=HZg;exports.readDataURL=J9;exports.readText=lig;exports.render=nig;
|